commit 397c3187280dfa84ce9da56a9944d945bf73977d parent ba6106a65317ab93cae85888ec656a36219cf47a Author: Updatebot <updatebot@mozilla.com> Date: Wed, 29 Oct 2025 13:57:00 +0000 Bug 1996756 - Update NSS to 415413a2f83f1652586df85083d2219172eec15c UPGRADE_NSS_RELEASE r=bbeurdouche Differential Revision: https://phabricator.services.mozilla.com/D270291 Diffstat:
58 files changed, 30801 insertions(+), 12761 deletions(-)
diff --git a/security/manager/ssl/RootHashes.inc b/security/manager/ssl/RootHashes.inc @@ -22,12 +22,6 @@ static const struct CertAuthorityHash ROOT_TABLE[] = { 4 /* Bin Number */ }, { - /* CommScope Public Trust RSA Root-01 */ - { 0x02, 0xbd, 0xf9, 0x6e, 0x2a, 0x45, 0xdd, 0x9b, 0xf1, 0x8f, 0xc7, 0xe1, 0xdb, 0xdf, 0x21, 0xa0, - 0x37, 0x9b, 0xa3, 0xc9, 0xc2, 0x61, 0x03, 0x44, 0xcf, 0xd8, 0xd6, 0x06, 0xfe, 0xc1, 0xed, 0x81 }, - 5 /* Bin Number */ - }, - { /* Entrust Root Certification Authority - EC1 */ { 0x02, 0xed, 0x0e, 0xb2, 0x8c, 0x14, 0xda, 0x45, 0x16, 0x5c, 0x56, 0x67, 0x91, 0x70, 0x0d, 0x64, 0x51, 0xd7, 0xfb, 0x56, 0xf0, 0xb2, 0xab, 0x1d, 0x3b, 0x8e, 0xb0, 0x70, 0xe5, 0x6e, 0xdf, 0xf5 }, @@ -70,12 +64,6 @@ static const struct CertAuthorityHash ROOT_TABLE[] = { 11 /* Bin Number */ }, { - /* CommScope Public Trust ECC Root-01 */ - { 0x11, 0x43, 0x7c, 0xda, 0x7b, 0xb4, 0x5e, 0x41, 0x36, 0x5f, 0x45, 0xb3, 0x9a, 0x38, 0x98, 0x6b, - 0x0d, 0xe0, 0x0d, 0xef, 0x34, 0x8e, 0x0c, 0x7b, 0xb0, 0x87, 0x36, 0x33, 0x80, 0x0b, 0xc3, 0x8b }, - 12 /* Bin Number */ - }, - { /* emSign Root CA - C1 */ { 0x12, 0x56, 0x09, 0xaa, 0x30, 0x1d, 0xa0, 0xa2, 0x49, 0xb9, 0x7a, 0x82, 0x39, 0xcb, 0x6a, 0x34, 0x21, 0x6f, 0x44, 0xdc, 0xac, 0x9f, 0x39, 0x54, 0xb1, 0x42, 0x92, 0xf2, 0xe8, 0xc8, 0x60, 0x8f }, @@ -160,12 +148,6 @@ static const struct CertAuthorityHash ROOT_TABLE[] = { 25 /* Bin Number */ }, { - /* CommScope Public Trust ECC Root-02 */ - { 0x2f, 0xfb, 0x7f, 0x81, 0x3b, 0xbb, 0xb3, 0xc8, 0x9a, 0xb4, 0xe8, 0x16, 0x2d, 0x0f, 0x16, 0xd7, - 0x15, 0x09, 0xa8, 0x30, 0xcc, 0x9d, 0x73, 0xc2, 0x62, 0xe5, 0x14, 0x08, 0x75, 0xd1, 0xad, 0x4a }, - 26 /* Bin Number */ - }, - { /* IdenTrust Public Sector Root CA 1 */ { 0x30, 0xd0, 0x89, 0x5a, 0x9a, 0x44, 0x8a, 0x26, 0x20, 0x91, 0x63, 0x55, 0x22, 0xd1, 0xf5, 0x20, 0x10, 0xb5, 0x86, 0x7a, 0xca, 0xe1, 0x2c, 0x78, 0xef, 0x95, 0x8f, 0xd4, 0xf4, 0x38, 0x9f, 0x2f }, @@ -897,10 +879,4 @@ static const struct CertAuthorityHash ROOT_TABLE[] = { 0xc3, 0x01, 0x57, 0xc1, 0x5d, 0x31, 0x76, 0x5b, 0xa9, 0xb1, 0x57, 0x04, 0xe1, 0xae, 0x78, 0xfd }, 144 /* Bin Number */ }, - { - /* CommScope Public Trust RSA Root-02 */ - { 0xff, 0xe9, 0x43, 0xd7, 0x93, 0x42, 0x4b, 0x4f, 0x7c, 0x44, 0x0c, 0x1c, 0x3d, 0x64, 0x8d, 0x53, - 0x63, 0xf3, 0x4b, 0x82, 0xdc, 0x87, 0xaa, 0x7a, 0x9f, 0x11, 0x8f, 0xc5, 0xde, 0xe1, 0x01, 0xf1 }, - 145 /* Bin Number */ - }, }; diff --git a/security/nss/automation/abi-check/expected-report-libssl3.so.txt b/security/nss/automation/abi-check/expected-report-libssl3.so.txt @@ -9,7 +9,7 @@ 1 data member change: type of 'union {SECKEYRSAPublicKey rsa; SECKEYDSAPublicKey dsa; SECKEYDHPublicKey dh; SECKEYKEAPublicKey kea; SECKEYFortezzaPublicKey fortezza; SECKEYECPublicKey ec; SECKEYKyberPublicKey kyber; SECKEYMLDSAPublicKey mldsa;} SECKEYPublicKeyStr::u' changed: type size hasn't changed - 1 data member change: + 1 data member changes (1 filtered): type of 'SECKEYMLDSAPublicKey mldsa' changed: underlying type 'struct SECKEYMLDSAPublicKeyStr' at keythi.h:196:1 changed: type size hasn't changed diff --git a/security/nss/automation/taskcluster/scripts/run_hacl.sh b/security/nss/automation/taskcluster/scripts/run_hacl.sh @@ -8,28 +8,48 @@ fi set -e -x -v -# Get the HACL* source, containing a snapshot of the C code, extracted on the -# HACL CI. -git clone -q "https://github.com/hacl-star/hacl-star" ~/hacl-star -git -C ~/hacl-star checkout -q 0f136f28935822579c244f287e1d2a1908a7e552 +export HACL_STAR=~/hacl-star +export KARAMEL=~/karamel +export LIBCRUX=~/libcrux + +# HACL* +git clone -q "https://github.com/hacl-star/hacl-star" ${HACL_STAR} +git -C ${HACL_STAR} checkout -q 0f136f28935822579c244f287e1d2a1908a7e552 # Format the C snapshot. -cd ~/hacl-star/dist/mozilla +cd ${HACL_STAR}/dist/mozilla cp ${VCS_PATH}/nss/.clang-format . find . -type f -name '*.[ch]' -exec clang-format -i {} \+ -cd ~/hacl-star/dist/karamel +cd ${HACL_STAR}/dist/karamel cp ${VCS_PATH}/nss/.clang-format . find . -type f -name '*.[ch]' -exec clang-format -i {} \+ -cd ~/hacl-star/dist/gcc-compatible +cd ${HACL_STAR}/dist/gcc-compatible cp ${VCS_PATH}/nss/.clang-format . find . -type f -name '*.[ch]' -exec clang-format -i {} \+ -cd ~/hacl-star +cd ${HACL_STAR} patches=(${VCS_PATH}/nss/automation/taskcluster/scripts/patches/*.patch) for f in "${patches[@]}"; do git apply "$f" done +# Libcrux + +git clone -q "https://github.com/cryspen/libcrux" ${LIBCRUX} +git -C ${LIBCRUX} checkout -q 5a1d172a1bcff83bb401bfa718d08a2dc8c77e4e + +cd ${LIBCRUX} +cp ${VCS_PATH}/nss/.clang-format . +find libcrux-ml-kem/extracts/c/generated -type f -name '*.[ch]' -exec clang-format -i {} \+ + +# Karamel +git clone -q "https://github.com/FStarLang/karamel" ${KARAMEL} +git -C ${KARAMEL} checkout -q 80f5435f2fc505973c469a4afcc8d875cddd0d8b + +cd ${KARAMEL} +cp ${VCS_PATH}/nss/.clang-format . +find include krmllib -type f -name '*.[ch]' -exec clang-format -i {} \+ + # These diff commands will return 1 if there are differences and stop the script. # We have two checks in the script. @@ -38,10 +58,10 @@ done # For instance, the files Hacl_Chacha20.h are present in both directories, but the content differs. # TODO(Bug 1899443): remove these exceptions -files=($(find ${VCS_PATH}/nss/lib/freebl/verified/internal -type f -name '*.[ch]' -not -path "*/freebl/verified/internal/libcrux*")) +files=($(find ${VCS_PATH}/nss/lib/freebl/verified/internal -type f -name '*.[ch]')) for f in "${files[@]}"; do file_name=$(basename "$f") - hacl_file=($(find ~/hacl-star/dist/mozilla/internal/ -type f -name $file_name)) + hacl_file=($(find ${HACL_STAR}/dist/mozilla/internal/ ${LIBCRUX}/libcrux-ml-kem/extracts/c/generated/internal -type f -name $file_name)) if [ $file_name == "Hacl_Ed25519.h" \ -o $file_name == "Hacl_Ed25519_PrecompTable.h" ] then @@ -53,7 +73,7 @@ done files=($(find ${VCS_PATH}/nss/lib/freebl/verified/ -type f -name '*.[ch]' -not -path "*/freebl/verified/internal/*" -not -path "*/freebl/verified/config.h" -not -path "*/freebl/verified/libcrux*")) for f in "${files[@]}"; do file_name=$(basename "$f") - hacl_file=($(find ~/hacl-star/dist/mozilla/ ~/hacl-star/dist/karamel/ -type f -name $file_name -not -path "*/hacl-star/dist/mozilla/internal/*")) + hacl_file=($(find ${HACL_STAR}/dist/mozilla/ ${KARAMEL}/include/ ${KARAMEL}/krmllib/dist/ ${LIBCRUX}/libcrux-ml-kem/extracts/c/generated/ -type f -name $file_name -not -path "*/hacl-star/dist/mozilla/internal/*" -not -path "*/libcrux-ml-kem/extracts/c/generated/internal/*")) if [ $file_name == "Hacl_P384.c" \ -o $file_name == "Hacl_P384.h" \ -o $file_name == "Hacl_P521.c" \ @@ -78,7 +98,7 @@ done files=($(find ${VCS_PATH}/nss/lib/freebl/verified/internal -type f -name '*.[ch]')) for f in "${files[@]}"; do file_name=$(basename "$f") - hacl_file=($(find ~/hacl-star/dist/gcc-compatible/internal/ -type f -name $file_name)) + hacl_file=($(find ${HACL_STAR}/dist/gcc-compatible/internal/ -type f -name $file_name)) if [ $file_name != "Hacl_Ed25519.h" \ -a $file_name != "Hacl_Ed25519_PrecompTable.h" ] then @@ -90,7 +110,7 @@ done files=($(find ${VCS_PATH}/nss/lib/freebl/verified/ -type f -name '*.[ch]' -not -path "*/freebl/verified/internal/*")) for f in "${files[@]}"; do file_name=$(basename "$f") - hacl_file=($(find ~/hacl-star/dist/gcc-compatible/ -type f -name $file_name -not -path "*/hacl-star/dist/gcc-compatible/internal/*")) + hacl_file=($(find ${HACL_STAR}/dist/gcc-compatible/ -type f -name $file_name -not -path "*/hacl-star/dist/gcc-compatible/internal/*")) if [ $file_name != "Hacl_Ed25519.h" \ -a $file_name != "Hacl_Ed25519.c" ] then diff --git a/security/nss/coreconf/coreconf.dep b/security/nss/coreconf/coreconf.dep @@ -12,3 +12,4 @@ #error "Do not include this header file." + diff --git a/security/nss/gtests/common/nist/genNISTTestVector.py b/security/nss/gtests/common/nist/genNISTTestVector.py @@ -0,0 +1,418 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this file, +# You can obtain one at http://mozilla.org/MPL/2.0/. + +import json +import os +import subprocess +import hashlib + +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives.asymmetric import ec +from cryptography.hazmat.primitives import serialization +import binascii + +script_dir = os.path.dirname(os.path.abspath(__file__)) + +# Imports a JSON testvector file. +def import_testvector(file): + """Import a JSON testvector file and return an array of the contained objects.""" + with open(file) as f: + vectors = json.loads(f.read()) + return vectors + +# Convert a test data string to a hex array. +def string_to_hex(string): + """Convert a string of hex chars to a string representing a C-format array of hex bytes.""" + b = bytearray.fromhex(string) + result = ', '.join("{:#04x}".format(x) for x in b) + return result + +def digest(string): + b = bytearray.fromhex(string) + h = hashlib.sha3_256() + h.update(b) + return h.hexdigest() + +#now split them into readable lines +def string_line_split(string, group_len, count, spaces): + result='' + lstring = string; + while (len(lstring) > count*group_len): + result += lstring[:count*group_len].rjust(spaces); + result += '\n' + lstring=lstring[count*group_len:]; + result += lstring.rjust(spaces) + return result + +# put it together +def string_to_hex_array(string): + result="{\n" + result += string_line_split(' '+string_to_hex(string), 6, 12, 4) + result += '}' + return result + + +mldsa_spki={ + "ML-DSA-44": "30820532300b06096086480165030403110382052100", + "ML-DSA-65": "308207b2300b0609608648016503040312038207a100", + "ML-DSA-87": "30820a32300b060960864801650304031303820a2100", +} + +mldsa_p11param={ + "ML-DSA-44": "CKP_ML_DSA_44", + "ML-DSA-65": "CKP_ML_DSA_65", + "ML-DSA-87": "CKP_ML_DSA_87", +} + +class MLDSA_VERIFY(): + key_name='' + has_name=False + def init_global(self, group, group_result, out_defs): + paramSet= group['parameterSet'] + self.paramSet=paramSet + if not paramSet in mldsa_spki: + return False + if 'pk' in group: + rawkey= group['pk'] + paramSet= group['parameterSet'] + key_name = "kPubKey"+str(group['tgId']) + key=mldsa_spki[paramSet]+rawkey + out_defs.append('// Key Type'+paramSet+'\n') + out_defs.append('static const std::vector<uint8_t> ' + key_name + string_to_hex_array(key) + ';\n\n') + self.key_name=key_name + self.has_name=True + return True + self.has_name=False + # only fetch the test types that we support: external + # pure, and externalMu == false. + # we can adjust these when we and externalMu support and + # MLDSA Hash support (if we ever do) + if 'signatureInterface' in group: + if group['signatureInterface'] != "external": + return False + if 'preHash' in group: + if group['preHash'] != "pure": + return False + if 'externalMu' in group: + if group['externalMu']: + return False + return True + def format_testcase(self, testcase, testcase_result, out_defs): + key=mldsa_spki[self.paramSet]+testcase['pk'] + result = '\n// {}\n'.format(self.paramSet) + result = '// tcID: {}\n'.format(testcase['tcId']) + result += '{{{},\n'.format(testcase['tcId']) + result += '// signature\n{},\n'.format(string_to_hex_array(testcase['signature'])) + if self.has_name: + result += '{},\n'.format(self.key_name) + else: + result += '// pubkey\n{},\n'.format(string_to_hex_array(key)) + if 'context' in testcase: + result += '// context\n{},\n'.format(string_to_hex_array(testcase['context'])) + else: + result += '// context\n{{}},\n' + result += '// message\n{},\n'.format(string_to_hex_array(testcase['message'])) + result += '{}}},\n'.format(str(testcase_result['testPassed']).lower()) + display = 'tcID {}: {} '.format(testcase['tcId'],self.paramSet) + display += 'key({}) message({}) '.format(len(key)/2,len(testcase['message'])/2) + display += 'signature({}) ctx({}) '.format(len(testcase['signature'])/2,len(testcase['context'])/2,) + display += '{}'.format(testcase_result['testPassed']) + print(display) + return result + +class MLDSA_KEYGEN(): + def init_global(self, group, group_result, out_defs): + paramSet= group['parameterSet'] + self.paramSet = paramSet + return paramSet in mldsa_p11param + def format_testcase(self, testcase, testcase_result, out_defs): + seed=testcase['seed'] + pubk=testcase_result['pk'] + privk=testcase_result['sk'] + result = '\n// {}\n'.format(self.paramSet) + result = '// tcID: {}\n'.format(testcase['tcId']) + result += '{{{},\n'.format(testcase['tcId']) + result += '{},\n'.format(mldsa_p11param[self.paramSet]) + result += '//seed\n{},\n'.format(string_to_hex_array(seed)) + result += '//raw pubkey\n{},\n'.format(string_to_hex_array(pubk)) + result += '//raw privkey\n{}}},\n'.format(string_to_hex_array(privk)) + display = 'tcID {}: {} '.format(testcase['tcId'],self.paramSet) + display += 'seed({}) pubk({}) '.format(len(seed)/2,len(pubk)/2) + display += 'privk({})'.format(len(privk)/2) + print(display) + return result + +mlkem_freebl_param={ + "ML-KEM-768": "params_ml_kem768", + "ML-KEM-1024": "params_ml_kem1024", +} + +mlkem_freebl_test_param={ + "ML-KEM-768": "params_ml_kem768_test_mode", + "ML-KEM-1024": "params_ml_kem1024_test_mode", +} + +mlkem_prefix={ + "ML-KEM-768": "MlKem768", + "ML-KEM-1024": "MlKem1024", +} + +class MLKEM_KEYGEN(): + def init_global(self, group, group_result, out_defs): + paramSet= group['parameterSet'] + self.paramSet = paramSet + return paramSet in mlkem_freebl_param + def format_testcase(self, testcase, testcase_result, out_defs): + seed=testcase['d']+testcase['z'] + pubk=testcase_result['ek'] + privk=testcase_result['dk'] + pubkDigest=digest(pubk) + privkDigest=digest(privk) + result = '\n// {}\n'.format(self.paramSet) + result = '// tcID: {}\n'.format(testcase['tcId']) + result += '{{{},\n'.format(testcase['tcId']) + result += '{},\n'.format(mlkem_freebl_param[self.paramSet]) + result += '//seed\n{},\n'.format(string_to_hex_array(seed)) + result += '//publicKeyDigest\n{},\n'.format(string_to_hex_array(pubkDigest)) + result += '//privateKeyDigest\n{}}},\n'.format(string_to_hex_array(privkDigest)) + display = 'tcID {}: {} '.format(testcase['tcId'],self.paramSet) + display += 'seed({}) pubk({}) '.format(len(seed)/2,len(pubk)/2) + display += 'privk({})'.format(len(privk)/2) + print(display) + return result + +class MLKEM_ENCAP(): + key_name='' + has_name=False + def init_global(self, group, group_result, out_defs): + paramSet= group['parameterSet'] + self.paramSet=paramSet + if not paramSet in mlkem_freebl_test_param: + return False + if group['function'] != 'encapsulation': + return False + return True + def format_testcase(self, testcase, testcase_result, out_defs): + key=testcase['ek'] + result = '\n// {}\n'.format(self.paramSet) + result = '// tcID: {}\n'.format(testcase['tcId']) + result += '{{{},\n'.format(testcase['tcId']) + result += '{},\n'.format(mlkem_freebl_test_param[self.paramSet]) + result += '// entropy\n{},\n'.format(string_to_hex_array(testcase['m'])) + result += '// publicKey\n{},\n'.format(string_to_hex_array(testcase['ek'])) + cipherTextDigest=digest(testcase_result['c']) + result += '// cipherTextDigest\n{},\n'.format(string_to_hex_array(cipherTextDigest)) + result += '// secret\n{},\ntrue}},\n'.format(string_to_hex_array(testcase_result['k'])) + display = 'tcID {}: {} '.format(testcase['tcId'],self.paramSet) + display += 'key({}) encapsulate'.format(len(key)/2) + print(display) + return result + +class MLKEM_DECAP(): + key_name='' + has_name=False + def init_global(self, group, group_result, out_defs): + paramSet= group['parameterSet'] + self.paramSet=paramSet + if not paramSet in mlkem_freebl_test_param: + return False + if group['function'] != 'decapsulation': + return False + return True + def format_testcase(self, testcase, testcase_result, out_defs): + result = '\n// {}\n'.format(self.paramSet) + result = '// tcID: {}\n'.format(testcase['tcId']) + result += '{{{},\n'.format(testcase['tcId']) + result += '{},\n'.format(mlkem_freebl_test_param[self.paramSet]) + result += '// privateKey\n{},\n'.format(string_to_hex_array(testcase['dk'])) + result += '// ciphertext\n{},\n'.format(string_to_hex_array(testcase['c'])) + result += '// secret\n{},\ntrue}},\n'.format(string_to_hex_array(testcase_result['k'])) + display = 'tcID {}: {} decapsulate'.format(testcase['tcId'],self.paramSet) + print(display) + return result + +def matchID(_id, source, target): + for i in target: + if i[_id] == source[_id]: + return i + return {} + +def generate_vectors_file(params): + """ + Generate and store a .h-file with test vectors for one test. + + params -- Dictionary with parameters for test vector generation for the desired test. + """ + + cases = import_testvector(os.path.join(script_dir, params['source_dir'] + params['prompt_file'])) + result = import_testvector(os.path.join(script_dir, params['source_dir'] + params['result_file'])) + + base_vectors = "" + if 'base' in params: + with open(os.path.join(script_dir, params['base'])) as base: + base_vectors = base.read() + base_vectors += "\n\n" + + header = standard_params['license'] + header += "\n" + header += standard_params['top_comment'] + header += "\n" + header += "#ifndef " + params['section'] + "\n" + header += "#define " + params['section'] + "\n" + header += "\n" + + for include in standard_params['includes']: + header += "#include " + include + "\n" + + header += "\n" + + if 'includes' in params: + for include in params['includes']: + header += "#include " + include + "\n" + header += "\n" + + shared_defs = [] + vectors_file = base_vectors + params['array_init'] + + for group in cases['testGroups']: + group_result = matchID('tgId', group, result['testGroups']); + if (not params['formatter'].init_global(group, group_result, shared_defs)): + continue; + for test in group['tests']: + test_result = matchID('tcId', test, group_result['tests']); + vectors_file += params['formatter'].format_testcase(test, test_result, shared_defs) + + vectors_file = vectors_file[:params['crop_size_end']] + '\n};\n\n' + vectors_file += "#endif // " + params['section'] + '\n' + + with open(os.path.join(script_dir, params['target']), 'w') as target: + target.write(header) + for definition in shared_defs: + target.write(definition) + target.write(vectors_file) + + +standard_params = { + 'includes': ['"testvectors_base/test-structs.h"'], + 'license': +"""/* vim: set ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + """, + + 'top_comment': +"""/* This file is generated from sources in nss/gtests/common/wycheproof + * automatically and should not be touched manually. + * Generation is trigged by calling python3 genTestVectors.py */ + """ +} + +# Parameters that describe the generation of a testvector file for each supoorted test. +# source -- relative path to the wycheproof JSON source file with testvectors. +# base -- relative path to non-wycheproof vectors. +# target -- relative path to where the finished .h-file is written. +# array_init -- string to initialize the c-header style array of testvectors. +# formatter -- the test case formatter class to be used for this test. +# crop_size_end -- number of characters removed from the end of the last generated test vector to close the array definition. +# section -- name of the section +# comment -- additional comments to add to the file just before definition of the test vector array. + +ml_dsa_verify_params = { + 'source_dir': 'source_vectors/', + 'test_name': 'ML-DSA-sigVer-FIPS204', + 'tag': 'v1.1.0.40', + 'prompt_file': 'ml_dsa_verify_prompt.json', + 'result_file': 'ml_dsa_verify_result.json', + 'target': '../testvectors/ml-dsa-verify-vectors.h', + 'array_init': 'const MlDsaVerifyTestVector kMLDsaNISTVerifyVectors[] = {\n', + 'formatter' : MLDSA_VERIFY(), + 'crop_size_end': -2, + 'section': 'mldsa_verify_vectors_h__', + 'comment' : '' +} + +ml_dsa_keygen_params = { + 'source_dir': 'source_vectors/', + 'test_name': 'ML-DSA-keyGen-FIPS204', + 'tag': 'v1.1.0.40', + 'prompt_file': 'ml_dsa_keygen_prompt.json', + 'result_file': 'ml_dsa_keygen_result.json', + 'target': '../testvectors/ml-dsa-keygen-vectors.h', + 'array_init': 'const MlDsaKeyGenTestVector kMLDsaNISTKeyGenVectors[] = {\n', + 'formatter' : MLDSA_KEYGEN(), + 'crop_size_end': -2, + 'section': 'mldsa_keygen_vectors_h__', + 'comment' : '' +} + +ml_kem_decap_params = { + 'source_dir': 'source_vectors/', + 'test_name': 'ML-KEM-encapDecap-FIPS203', + 'tag': 'v1.1.0.40', + 'prompt_file': 'ml_kem_encap_decap_prompt.json', + 'result_file': 'ml_kem_encap_decap_result.json', + 'target': '../testvectors/ml-kem-decap-vectors.h', + 'array_init': 'const std::vector<MlKemDecapTestVector> MlKemDecapTests = {\n', + 'formatter' : MLKEM_DECAP(), + 'crop_size_end': -2, + 'section': 'mlkem_decap_vectors_h__', + 'comment' : '' +} + +ml_kem_encap_params = { + 'source_dir': 'source_vectors/', + 'test_name': 'ML-KEM-encapDecap-FIPS203', + 'tag': 'v1.1.0.40', + 'prompt_file': 'ml_kem_encap_decap_prompt.json', + 'result_file': 'ml_kem_encap_decap_result.json', + 'target': '../testvectors/ml-kem-encap-vectors.h', + 'array_init': 'const std::vector<MlKemEncapTestVector> MlKemEncapTests = {\n', + 'formatter' : MLKEM_ENCAP(), + 'crop_size_end': -2, + 'section': 'mlkem_encap_vectors_h__', + 'comment' : '' +} + +ml_kem_keygen_params = { + 'source_dir': 'source_vectors/', + 'test_name': 'ML-KEM-keyGen-FIPS203', + 'tag': 'v1.1.0.40', + 'prompt_file': 'ml_kem_keygen_prompt.json', + 'result_file': 'ml_kem_keygen_result.json', + 'target': '../testvectors/ml-kem-keygen-vectors.h', + 'array_init': 'const std::vector<MlKemKeyGenTestVector> MlKemKeyGenTests = {\n', + 'formatter' : MLKEM_KEYGEN(), + 'crop_size_end': -2, + 'section': 'mlkem_keygen_vectors_h__', + 'comment' : '' +} + + +def update_tests(tests): + + remote_base = "https://raw.githubusercontent.com/usnistgov/ACVP-Server/refs/tags/" + for test in tests: + remote = remote_base+test['tag']+"/gen-val/json-files/"+test['test_name']+"/" + subprocess.check_call(['wget', remote+"/prompt.json", '-O', + script_dir+'/'+test['source_dir']+test['prompt_file']]) + subprocess.check_call(['wget', remote+"/expectedResults.json", '-O', + script_dir+'/'+test['source_dir']+test['result_file']]) + +def generate_test_vectors(): + """Generate C-header files for all supported tests.""" + all_tests = [ ml_kem_keygen_params, ml_kem_encap_params, ml_kem_decap_params ] +#all_tests = [ml_kem_keygen_params, ml_kem_encap_params, ml_kem_decap_params ] + update_tests(all_tests) + for test in all_tests: + generate_vectors_file(test) + +def main(): + generate_test_vectors() + +if __name__ == '__main__': + main() diff --git a/security/nss/gtests/common/nist/source_vectors/ml_kem_encap_decap_prompt.json b/security/nss/gtests/common/nist/source_vectors/ml_kem_encap_decap_prompt.json @@ -0,0 +1,870 @@ +{ + "vsId": 42, + "algorithm": "ML-KEM", + "mode": "encapDecap", + "revision": "FIPS203", + "isSample": true, + "testGroups": [ + { + "tgId": 1, + "testType": "AFT", + "parameterSet": "ML-KEM-512", + "function": "encapsulation", + "tests": [ + { + "tcId": 1, + "ek": "ADB031A018722F19C25829150A8B94297C9519173A2C908AEBF76F86C9724A0354300C6AB58A90C7B18A2E828B5FD2CDEACA9810EC00FD8CBB22AA6AE641B5824055A91B27C1F73518953913FA2037D295F42B7E34AABE90D72A2453B215D886EBE28779D76F4830B01A73291B5A7186454A91D665B9E6C04FE808F76AC25E298B97195999F866DBFABD571B59549787F5E316A0C65F3E9132089B219E11712D245AF955ACBFA36D37BB2DFD570ECF90941BD369E8023B2FF65F04D5408FA84531604A5EACCF3D62221429A1D6B1BE5FEB04EBA0BB698B6B6AE4CF72317D96E99B0A840AB55C275B9979BB231926D7140FC9B8C8124B87532E854113532A809C714D492746BEA7C30AA869DD780B77D0BADBBA9D9FE6A09780B1EE7076F5E3CAF5F470D004CB53098BFA340248835EC782B34D612C53701259D2583360935D8B5F25051BF196214D1CC6B33A8A47F41A65B5A143DB3651885214307B0D938F9D253672A4587EBC6D9743A3AFB35A3098149B27C3EA0BAAC5942D9A92856EB0447D1709ED70A673AA1FEBA5398A821FA21B215FD78866C29B1E75C50815CC3F093B7CA70717A10CCF8C1880072230163008AA675A17759937CA672A56BBA772C527A5F9F12D53267419559A7A1A0A3003B64D34ABC8F4294210B140F517BEE86F393BB577E6A41EB64A4EF633C8BA941314528B67A24F4829E99C96BF92022307A763A9086F7C597340C8FBBB0689DC1D28800BAD710422A9334A406B203101A6C97A3D00AC6C095735E22CBC60B3A0760C8B0268FB5BB3D7D0543BAB599FD326608264EA477EE8F8C178898FE7387F15A6B40B13B069D3B574967F8487309495420F20B23456CF6D010AB19CABA9B27CAE79B09D7084D1863359B40F205556456AAD5F92A5A36B49B737866901CF6FB47B59A9C5783C2C5FD95087DA417F7410708290B619B701852B051272AE0428263C28CB025E1C1103B2718A0DDA5FC30394600879AF509B62C57B88A018FEDB09642872591582ABB4AC1408A5750902589406E2479D3BC5AD8016610D7BA18D984EBD951393FC2B83446D474AC8E2A634F66F181976B8C14F6078DE84113D8E728FAC101A23C86300D795CAE9875436CC", + "m": "E8D6BAC09B25469BEE582A7DEE9BD21890CD3F0AF4D7E19E30B3E24E657C149C" + }, + { + "tcId": 2, + "ek": "CE22B227E25D5B5422E53ABD78D6B80AF94A4BFC15AC6A39C56602C1B29934F456E23C9FB9BA568E4C2B3E7B8D6AF7A8AEB4A7AC94A57453CE6E05AC505B1F6785BB024B6EA9744E6C7874472AAFFF7B0F58A5ABFD2424F9E3B8AB9A4813A19FCCD2CE35E1C45829BB5888A9D6C14E351618F72B9135FA0677B91FD0EB84F997C5FFE7C45FB03067238FB5C880469079CB13620DEBB9A4E5247E08247B1C588666CE43EB6377C33741F2372CD14FC9D6BD9F53997FD92A1059AD5FC261EE89561AD26EB7C88A95370CFEA4A76A9CB5DF32996E5C060AA1CB8F39B8AC9956BD037AE3C750F255AED4B56E44317ABAC0442BF484F43896B2493A53568A6123444FC50E6A3B81A6223BE973902CD64C03F233B0B638538B57BE5A43F11BA31B93CF15D32844E48AAFEA0DB277A19E9A395496366D9C9AD2341BE34C58941692A1DC7570626202A5185903466CEA91B7078C357787967493569760C348ABF7C223EAB1365F455C85306ECF8BB951C0727FB94B89790A75D03782B568589B194A80C049DA498347C50B26447F5C8334B70C9EF74EB65C1DA2429B11942D0D57BB14415C6442973F079B1881AD9D5C71657757AB2A2650EC252292ADD1AC2967B9CA1158A6D2E5BBD55211D24874753CC673A8A689B8021010BFA2A8938F3B6F68549C326A221EB86BF7D98A8ED708BBC95AA6D51F8CF94ED374A1C0585F36BC7F22CBA513449942363F37D167CFCA6A38588147F101E26B5F818C2C67B515D7802DF57437BE9567D77A5164B4A061AA0EF019CF1E9024FAC61F43812B47846185C4BA2B4A7A3CD51CDACB558DF8101C2326EA8B4313C91C043542D7B53EF8B83AE02AAEDA2749B2913CC65487D408C463233750A4CF3913957F270753745CA8450BBD113877C3A9D370643D5BC13D0B4D6D979C9BC197BCA91EA0DC004575C7F8CCC08DA501356A4197AB34F34554DD461FD9C3A94A37C90FB864BAEC31D26B7E0D83853C48C896018D67113C4BD723362B87DA964C56027E820B6412282BA7A5819E7A9E4DD27E8C778B8EB8AC7C21BEFEA4192A9468BFC13BC08B079042152012250A0E9261D5B0B540A09464A54EF02AD0F1255ADC57F034529127DA186DCE9527", + "m": "971B2D3905A306927C18F0F72D9F58CD3FAC6238C902C3AE679449F6CDB91235" + }, + { + "tcId": 3, + "ek": "F5496665F95ED5240696B112B542863122ABC8E23D1F647E1FD74464F167A58B69BDC21A4AF7991290292B43B6EF692541C144B8E72E004A5C1BBC02528B3F02BCB6F2751B06454C9EF7324C051243268C936CB19FE1CCFB29C85D50AA963B4137484823753A5037128D00BE20302796F2920E0948BF9559EF9CA2E2240F40A01CFB4B0C0C54A476FC75980369CBE976A6AC423C8087B94417B926B706B0B5573B16A14B2BB06A167F75A050D200CF20AA3B6B91A9C9893D08A9264599E6C0563F031EFC250B0137983257B80BAB1C43A010E7C53B52A095D9A19F3FA64D2B6C181B580E14669FA05C4E18BB2924D221F36AB92DE8BAAB514C1788CA5AF83A90929784506AB8205765433D7F1693873631E3605FE72A4B50211D807A4EF3D80110B6009046258B97A5DDDB9D1FD15A0346118C7290FD07760A54C83092C806FAB456467CC862682DC5906ABC53DD0AA0BCA5A23D2B85DC711A88AAB092E47C2CB3B69D85938B3C4A262168A3741B5E4CB8DC227DF7C71EA83230A05A2625D04F9CD774A76BBD9E9BA3099C4462F97E30B56942EA48B8566225A45549C21004C89B66900B6A7898232A385839396338A773651F72060D04B1994C282B6CE733C946A97D6B202BE92458A0AC9EF092AF1336EBF46CC1A99D735C4B8AF04AB7607093122C54764A3EDA4676062A35261BBC67C688E9A053F830BAD186FDCB10BCB42E1AEA2AF3D390B0568882246646003CAC4C291D494F14649C778A293803640BB2A59343A114C13407C06AE68665F4414747A19782440C49B6C814B91FE03019576440C8F361FE256F2AF70EF807ADBFB275304606A793A2CDB984BF043703F71C233C6B92257D66916B52C41EFCF115E03100C292055F0BC89D2102E9755203065836E963F0058E52C18CF8190D97829B2661AAB25A2AE89993B8F1756A86370B4884F0C70F60CB73D74C98BE394396E97427650493EBA03ECC2C1A6BB638488BAFF015D5D0CE17403B664517BE6B19F0B17A4DE2B2976415307334BC715B74B8A9EC5BC41A0A8A0C6CC4EF6420D1551C260026E6A58A80434FF58776044492E6A9DD1B70197DF7A3701EE36CBC3EE64CD5646DDEFC65E8B3AB813F85297148", + "m": "A9E1CAAAB831808A51837DFEAB3669CC6C6E5C8C44AB3ADAB32D245C13CC812E" + }, + { + "tcId": 4, + "ek": "B449808E533DB80176A324BCA4DC33E161CC79DABD92E8667149CB23721C2A8A1A251755D3F879D744B13A2C14E685ADAFA298786B40D0559D1BC50C3B82BAF860BDD004AC5825759C6596E45BB46B4647EFC4C7D0321A8149CC6A71323C05330BC984E0C703F23437603076228BBC4B7182263A1DA83B9EDEFC7584D2326E973A1978C0F046801F884E1DC0498583B5BD098E9C49BBA5C7A6630C412D02966C2A80C63587BB5A438A45BBA9621A071ACDB4C91118038F78932A552417DD43821CE7C995B95FBF295482F2905637C5217970C7F1B8BE0B87471C4146467102F08549EA266D8A8536898C7538440DFA60FFA9B91A3B3097655891573DD93A8CCBF81C2D4C10D6B0CAC0B92ABD918428A66DF9A2B7DD440101D83DD88150E4FA6B66AA5FC1A1CA9854245FA72B8C7980546C380A68C84DBBA2F08621FF8727095B0711F9307C876766FC95724CC4558741AE6A23595CA94CD4B9CE303E25846BDBF3192DA867816B1F12E62BFB7977712101CAB11A7F90C9F6820CFD07412F254F8E8B2A1E51C5F4806630C764A04C70D8D56DD2C072610B6333F58E46D782C52B7B44C4A17EC45B1ED03E17CAB6D0F203A7379EE0615EA2E48553231CA6C88D7398908205D038950AFEA34C727917C5F2ABE4AB4DCDF28AB6811E50D07930FB292CA3048442A8C45B37B66C653239A9EEBA2C0D9462C5114D577515C0D6663FCBAC93C3B3E91610FDF4242B506F5815839C929CEED957D0E45D2597BADE830990C9362D9C2B4C08AF4640757D0B954A142FC0058168BB8BAAD6A47250C7A1B1CE9187674D614D0712548D90C5237B0F740A800A015CA9B303CC4416CC8A4DBF84A0CAA49D36A76A747A42D1CB12036817CED21E3F487152A29509F6B4CAD80145322F1EE07D91917282B63E79419B659590AC62481F76161D996DFAC02290100D51249879C1443CD786A37C9A16611C980880C80124A6D493E6F35C7D4B9BC996090ED3482BE37E1F4637B5C57BF295605E949392883AE845CA143CBEC523BAAF09B27EB84A1C57798EB2BD884217B91887BB88C5A561B91CD4A3150806DEB20CC37A81F190693D16F71B6F62EA0CE9A3DBAA109888F67A0DBAA6809811E5EB26", + "m": "4DCF56F1BD29253C98117410BA20609FA9F95749986751D68E9AB639F4F78D80" + }, + { + "tcId": 5, + "ek": "2AB8684EE00C69416B8B834FC812B29C619880DC1EB380CF08135C5579306150B2FA5C22CEB330D2D45A49C34B0154CAA3430C9BF77FC3548E3B0B06062371A73A56E58C518467B56C2C7F69265E64A612B72914D30C51EB709F9A578321254EDE994DA3B9768120B03CC81D52B8C876E85C6A3ABE1CF4A09A9B6C6D7A683E48C885B22DDD97258E879FBD798DA4C3222DD551B76461E4672ECFC66419A40CA3B3C7BA9156537A6DF1A05097977FC7AB5F39DAB4DCA726E600A0A2B47D579A9B9800597E745C99A26F1BF3C4A5B707E44392F7836A19B01CAC53381F2C46EB8C81351A25B6D05495C516DD4B7767A68D9AE6C9B3282E34EA89D2DA9A5219C421818E41A828567A1F7BD98C1D6A2E626B06B81A15A6672040CA7ABBE116660CB8E4CB00EEBA72879C4129195166F392FB49B318023FAA1BA3D7A55A845A474DD32E2DEA65B3EC4BA941B3EDB93D0E59C238305572760C4DD20C7A597CC1801CAD12CAFA417081CC898681A46B0971133B11ABA25FF5982B10B07E2A3810C70764C2B3334C45C6BB5189C6412F14009D086AAF27D45D1B665A62370381D12498785D4DB900C3909E3DCB13254327BD13479A1B1BB4F2452DE17046765A16C4762BFBA9CE3B4B6E61552EFAAAE3FB2F5A076C68AA6CF5B95F57B77F2D2B9FDD050A1FF756FD308385526E0DD1BF679A206D6801B09531F11063B8265CC88A3A6262CDC4E29D6D0C22381785A5477B21E1AAE4F35EB6538152657454AB580C7C19B34235FF9483023BAA025A93528A3E934381CC1A790E336C0225278DA8575E43CF0242BB2A6296D151428BC22BC5DB4B1D745BB66257D72B63045A443EA239CF592D39795E9EE72D00BA84C873A1D0220439654F3843639461CBA8F83117A6B057D134EF02214ECA098E6239D440AC0559C473FB9729345BB1799C3E150599A76A1C44A2F19522C0727C162C723B280DE9C57353B2A0B0D48367783E86E2327D690E046667B1A409B17A1A6026652B81509F653CE3102283861AB679024740822DA55F549C2191581D47B1876CAB1464E371B33238410ACFE5666ADAD55F48A49EA3604F0120A49B0BA2EC78EA7EBD9AC9C70691AFA2332724909CC41EA6C096F5", + "m": "72B1007ABDBA00ACADDACA96126640B1A57DF3CB73A4C0D352EF668274095A64" + }, + { + "tcId": 6, + "ek": "E9CB1244955DA0236506008E82AAABDBD29892F447CA7093ED349E8A1594D33485F373626250A29017B44558212F6962A01149656750B7E4B736631B3F979356D076440A1DAA9192737860E391BC23918E031271C4E728E0551B5D545580069B26F0699CCC88B2B214250B7B66E49E6D0B1002F87500E3C720616DD9ECB9227A89B071118847569017A467253E5443458879A8E7D6A2C485170E22CF8AF99C669598906A99C95599DD771FEED5374B3C5756112B269850B66363B1FB67EC0B867DE032740852155235016C2F48060137E2B36481CE7F829D67F15A54F9978729A5F9767A0893A19BB47B6E1BAD26719C25423F384B18B5EB8036E5B296D25A0BF80F6B7CBABE378A442C7ED61787B754609CA61161F4A79739BD6606ADFCC678A66605760B616E4081604979B68B0884998D8582BA906C618941A3F77664B579925E5364567733C7395B420621564A14E7D02AACB0BBEB78440A699A2D24B3BC1311C6A549A80068B84B8085C8AC6EB98BA692AB1ABBC42A86B818388203855D27207F8821921BA28AEF03A5EDD40D970C54992B9954207D77E094845BCDE8841F8D34287500191481BC87A316D59A7F0E1048C265575B421CB51042151CA259189798D344FD126FE673B9FAA393BA9BAD0E34922239762ECA52754A108F82CAA9933734F9736C3A0FFE5C0983E0AD67A9395524397B1C8BE1C789AE14C68A9B8F4AF64A6FD234BAA8BA6E9509AEFBBD922A5E9FC21ADD576702294CABAA324D1529339942EEC958DD645CBC3406F7941E06D48C9E08030AB54B93D22535814F58E16E458503318CB93BE22C32D7BDC3158EB650C2BE663E7BB99615CC2335171DEAAC5B075469988A03D8B4A406B65D64E7C96BDA4133B5BE8864846DF2A02952116FE0950AE074C1596638669324987F72A26AFE565C1914B2996BB1B972C519133D449BAC27838869CC74B2604F95F767BCAB72EA23A145C8A0D3B73DF2A5BA44CC84BCB71FB0A243F41439EE9611CEA651245926D840639831063593B71C36441F66899A80AB7A23035B68A24B8B328A295708D53F69220E83A139C2E88095003AC836877349094E168023AB3D52CFBE9DCAD584A2A741D68FEF9C399734", + "m": "B55B0D4D7DD3C983F6355998EDCF91A9150AA5FEBD12667A115D823BD9792815" + }, + { + "tcId": 7, + "ek": "854ACA726531DDAB3A63BB697755B12AB8B35A3583A2A8486A438082C6C8A4289BBE93B925B9B6E5D78DAC17820FA9691016601BEC352189740EF507EBA31E6FCBBB8E82A382733551A3B6073506995CC5130B41531323F75A990003A8A221695B86AFEA451819202931B24DEB810ADEA76BAC029C62F97FB0812284B94254067C6AAB640BD21139B9929E747288F3C067E196B25769531329F115631F85CCCB7659C155BAB25B12FD7B23780016C5F33CA93486EB717A6632A83C60BBE2C77DC269ABD0B3C1085AAF4A3B33C06B1BB88C9372AA31B40098A79180D32C9526353125D740959A8063595F1D780B9A325D791C27D1211E290945992590517242C9917E7A9970D481772A515168619B37C30518B22D86F298CEA72CD5CB5B0A612C850523DF53AF5DF5B55B3B122849C820443EBA030F65899C071235F54C74362871A4A708C4F68CBA731E55BA5CE3B78F9087B9219033DB3803774393C2334FA1D30087E54736354E7A14519CC12FD72A8161882FE44A0009E16DD8EB737D098C44B69652F9CED26893D8BC7E8FD737A3C8654AAB63B0411D38114BD55554280737C9E5B736F55060141340AC106B43BA7F187787A3AE115A58F34389FAB233B9F4936C543F5E7671A4AB0B1076CB27BB02C21C731FB51FDC9617D27998762602B3265924D0094BC34BD07A224C2C20156280B4EB772F0721E95B1CC011858002231D04CA6083ADA7DBADED3970BDDBCE22D45DE944AB8F5A9BE74A59DC8AC894F52511764C51825101AC969D67144B495945740F966A051C66809BCC088E4A6CDC20A9B31C0E972C63323578F94A417CE870C0721F1C1107140A0B94306EBAB404EC01608ABB95794546BDDC1769A2946855B42E799BC5D721E1754A3DA99690FB5CE093A9374A0945AB12F7C928EAC71AE7FC02289575F7F9650A8584DD495DECB84B8BBA5B0D96363768CE1F6BC684D3872273988CB0B2539383C5B191A55C88F00BCAC36C3460E43E087B0B23AA5636C94D359836DE4080C0A039D7F796A4692E0E8466596268C2499C2FD93314A37027C40EF6279A12F9741B9956F135151B67050CEAA579C581D190D689A8FD6704720FCAE8415789288BC1C0DFF3230F", + "m": "CBB7EF27BD519C2226D0F7E543A5980F69E0491D31251CD60CEA846164E28FBE" + }, + { + "tcId": 8, + "ek": "FA770BB88623568242755A5DC5BC1DCC888F68FA8E8B4B5AD00A4ED4E4CD03A2CC88234F21D5448E8A3BF8406333FC8B1D3113096C91C4C08217AC7C77680F40619A021AAF9F39C462024E96C274C1C038ED51AE92DB28309642823C83B6085A594208723AA70EAA764C5A8256F646E8B86A091C389B350FB7C1BEF81846E564374B06103927C0A21A00FDF04C8F4118EC028D5AC0B79FD3901E49BBBBA0C69BEC6536E85A1EE859509828CF569D8CF9C77A1AB80C0C4B079C59633809004A9B0E70225A2126BE1069D2F0587EA27DD081B803FC80339747CD85BF456924F6E964264B98D221939A545FEE716E78A83E1EE83266E8B72F1145FF2038F522164D944090035262CA0990A8007A953FD44CBE494BB3FAF323A1F4B24BECC3EFE65C6DCA2C5220C18B633B8B709F93B35937889E3F67A9E9CA6090F3355547AAB7D00F5A957E26DA37522C3679F64C60A34413B71807FBC95AD10508691E57EB345E76C3372A5913B593E53595966A04CE389F23D269D99707BC3338A7AA4FE2C786EC453E310386402AAA5AF46E8668BF13921D8BFC4804C9AAC841B6BEC59C1EB03FA668987161A21CF645E54B19B5F9C5347A4F0125602A780048C494A80335F2E095DE9505F1BA1BF12A285DB33A06764233EB90D589888A5568A852461EF9367E0CA1D41A1455BB9A1DE72184258628738406D2C7EFA66E83B1940CC008A1EC525F1BA33D08BEF6F3BB7C8C6E08418D6B18706BD394C69A69F73A6327B89ECFB1018BD72BB9962B3568A2E5E171CB12573EFA817E495D67A5B543F0181C814F4F12BD034121A8176C1688475BC63AD644C46029347A7C1BC21A8BCF6A4A74A56FBFE21959464F6AECC8B5F0AF4EE4CEBC2513FAB418D15C15F1182CD8626CB608407AE08899397F0C82240850A04457859688507910234E03203BE43A97610E5AD290062759388012711C73B88A052852C1FB2148AC0B165E909D9C730DB64C4DC7E0174951619D1658E9CB0032A01D908A05B8844E60BA5DABF344ED50100A6A0D11F17CB951C30DBC1B9AE861CE48C88939064F697E067147614AB3251B86EF9AD3ACC6C7E20FD49EF0B506DD4AC9657613472489CFFF7B2E0B2D1AAC6D6B", + "m": "191E675978AF4CA20E33A0A3CB77A44F59CF847225F230020918F3CD85AB1C12" + }, + { + "tcId": 9, + "ek": "1DE50DFB696AF390B9BED92ED22214D8B53B46E96853326B2A2C562455537D147E1367123D57BB7189469EFBCE7B456A4441B23249781A9308611A2F861A3726A874A26A5BF36B25A90C58E3C41BC8DA97F9AC34761058CD951B5B039B53438A55582867D9964E45296D03B5902B6470C62A2D62C7DA1569BDB05A28CBC95FC07E78DBA4D0821D3DA12E4E0372B1AB0EF48B1AAC79069473AB5AC7941EB97E7CA3AC5DC48CEA3C3AF2722E6BCC887AF12F95E23408002C99860F2CE95EE7F093445B1FC28AB7867C09ABC033330459FCAC55916BB54A4BC0B7713EB387A9DCB9B595EB59B9D884E18619011B14E6D23C00754C7925AD5160AA9F657E741124AEAB1A9C674EC9B47526C0B99764BF4C1C575757BB06188FFE2060D3131F0CC91D15C11AB423C21F30876E134C7DA9647EC721F0B42D21C202AC913C5FB57E99D3785521A5AB898918507F47E84B04004904B08BB32B97A323989B3A178507C821203B0B7B74F4433189A0AB2A70ABBE6A872F31CF208B206DE0572EECA61BE5550EF9335E9B7283D10A5C35C42DA85A0977CC63820298D4B3F118799560CA1AC7ADA7021B995B71C330468E658F5433CB3F145AC2DB18B40BC49F2BBB54676D8143336A692AF86699F5AC4837456FB6DB8D5DC256E5B13399E141467AC70FBA83BBB547ED0B6EDF163D5E00CA63D305EF1072CF2B46732893EAE47C8C8725025C6557960AB91832DC07C354F26104ECBABCB308D20812E1A82C6DF473981956933491196ABA432706B09BC5B6E83DA16B8C16332717F4AA8DF7CD5AE928724C8317421A113B9EE5D9A34B8BB1D9D65ADD7ACCB21A36A2B180483A300358A3B7096A7746A0CC5C49163C0F5D362323E247EEE1C9840262735269F3A148E1D1C45BDB62CBE5177F01791517667041909CD48931C93AC9EC24D8EB9DF0B161D74C6D212648B587990F05B120DB80F15799CA830FE5896C86755CD6FBC70E942A2FDA4B081064E0AC658842133285A73B61887845B35A32296876C1C79C7021099F31B89FFD2B99153C8809BB7BB9B7214E87072873264A03A7BAFB17B3D15E115CA0AD4C00A8C2E3C1691CC5B6C2AE3254C63D12799A034D38596B565E1AE8201590", + "m": "072230269C6568A07B70427B9C480D19081BEAAE2D1CBF5925B8A1BE24C3E1AA" + }, + { + "tcId": 10, + "ek": "FB406373851AD545BF4C469AAFE79E5DCB8BB7486816BA39E203A60DC9C003DC457FF33BB48557CD6702C9E239F6D7941A7AA9C0C1A162D74885D09AC00BA7ACC74B221B87C9B3C8A408B5F05B467FF73A82E146F9B701E5BB1D34210A6555A16FCC1D4264ACAD908D3EA010C3E65538202B577AAAAC0B8B8E7739665A0CABA946B4E501C79171686963DF030A7D5A6776D81EB88180B12128EDC8283D9C3331D9494EFC342D653DAA5B897C092C0A5643686B63D6E68DA5525D9F5AAA27233232F13160553CC0949BFD7A9A5F5A5F876712D09B97AD322EE4868F33B96E462B51578122292C2E00B04FE33115F225B2BE50BDBD7C15DE1236BF74B04E7B15C2D7039411217D99A7CEB7B3ADD53207FC087FD3545D2B8D2CFC3C55F3C173FC1A0FBC1B0D090ABCC3A2A800858317738F7A8BCB559399B90DB3837C4261A1D2396568F9C991B97AE86791917C963BCB1D5B8B765C126FAB5C6B134CAF8891CE93B29510F6920A8415B99C0B9265B236EB14B3E384EC5C537E1457267779A35C98199842048353FFA009D017119450A2143B508C4889AB786335044E1FD3C422EA805B533630A3479981C523262FCFBA0B5BD26E4DF16112A0A13A3732659421A480C30AFB8FF7DB1069887E9C275675919DA834529C934EFA81232F774BF6140BACA4396AE8BE90D899A44883A8CA2104D057809C650A244CCCA24290751795442E5F101E928686D00913D3196372D76E8ED25E53BB4BA4609B98642A2E15631B488A29919EE5922412796DD3624F7CD71A74806A8F3443A42A329D156BB8F484C9153B03176759C36A7B654DFA70C80C819B0F000789D586E307078BC63DDC2C7296560BEFC43CB04A3F3650476C4426CBB5B57AE243F887CBDCB38F1E35BB4C47117674B57863A65DC489CAC35F4FDC7A9BD243864B223BD49C7A60A09193BDABA10E8B71BD2085C1119A60FC691331712E778669E466B13D1C1A13B12C6A40AA32344D846983BDF9C0A371BC257B7D768CC936D9709E51C97D525AC5C189CC3B40604BB15E8C0AD4A29F5F59448DBB5E2B5804648CAEB4CB7380BC463E92899C0776D73EE85340457CAC247CCDD5030273FF5DF97C4D5366E752DA057095EB", + "m": "DEB85FC95E414F99ABCA958E645712D8CE7B95C9AF67DDBAA380F084F365D9BF" + }, + { + "tcId": 11, + "ek": "23FBBEA1F21D607028087C433E16B18F3B543D344271FA7A302180301BCEA3492F1AA6B0382830FB357747DA5A72EB3B38C66FB9C3AE32B457AE0CC7791587021CAE3986B5513705BD168EF73188DA11057289B1E7468EE756A7C0C84C5FD687FD389D0DD981BE7C5FAA7C5E7B25023F527EAC7B41E25AC10A6C70E40172807217E27C5802825306A3479728258D584716B579687C541357AA1B713CC80A3656F092A11B42CE8A9AED315E3112391C2984E695A5BC5A4A2436A9A04850A1806B63CA1D6F634300C63EF6F6B737276978EA2FC52031D936B324C3909C0C2A3383A84E5146E8777031A944BC9635A358351B00554D1218A3D8798BF16C821B0CF0E555C366973DD07E9A442466161E567245BFF5A2E1B518BB94CA462235353B1DD892371C6B261E77A0C909635000533EAB93BF2861B6545C41DBB0328C12681709582400DC82333C308918B015B6AA802E9A8CB3714C55B63F3E00CE82670CF53C0DB3A0CA21489883767C59F9C45949C65EF69629088CA0078DA4F24AF3C072F2F50B6EFB15E8F712D4C8922B0724E95C4A8820AE8A49406B143DE5558BEF50240926C4D0417F3648CD0A76A5C8E59463B7CC41E89D4B4884ABE396B4D42760690B9AE7916B5A549AB739401B2F2C486900E0949FDA52B000362974B66E44CB1CEB4C57D9B0D20A13379137DB126C7A52A7410B7243352C86B5C48B19CFB01900B551CAA6C90BA9FC24DF0490BB4558A8A733F963443F142F086325DC87123F2B9F7B217216F1ABF274441AE5B724E103EE538C9BC536C86C20F002409EC5B56E7A706B3602F63961DB9B69EB9A13212451D2CC7020E606368C31EB4B8C1FB68922758C08F9AE4B347FE91051A478AE2BB85CCDC831CAE432CBE21812422F07005466A18D54D4862365835DAC67944C72F5854872B6A9307293BD454346438FDBA0B36194B200B77866E15FC2D4B3F76690A4AC742C5C7219057484411D6F541E9B2A9068EA9F953A88A54BBFB458181E7C4279734B41B239A5D2A6C6278062027F19B42504C40A1121B942550970D129FD3C964203B2DE6AA215F6BBFD32309606B395B9B48B50CFF985E23423D766070EFD4A7BF5D7F8E2B1EDAB968F1079", + "m": "53A655137356B8CE821B452F20922B8ED42B2C86F02D6561824D54CAEF77149C" + }, + { + "tcId": 12, + "ek": "98037C109A2C3FE8C53D3C7F49AC0604705809CC2E4442A8BE85BED38A8EC3E28862093C98660FAF12681771564ABB83BA779723F04F5F76C7709037EAF66B2A990C4AABB6B92153AE670FE2540AA72CC95C6742328A3115557A68B5A92FE04D74232111D255A5CB7510101F9D6694EC3C072AA0BE67F56F02007B11F1AEB9ECB0548868F1E29952C472493B3FD8AAA7B86671A278691FBB00A5C4938A229D97764DB9868FCD2AB62273BDB05A57A54C5F1A8A329BF5682CAAB8FA8360224240D7400254E12B0AC7B0A3F32378C673FD44AAB74C13292128B2519D0C253A59373599C48B0022257E2886D7CA784CB6C18D6AB7EAC3064136C422B4131F78B0807193A03A64607416D2470392838E05A161446046DAD6821397278EC50736686C36B419F61865E3B099AAD97D4F18C64F7A1AC68C69FD7C7067E25F5FD494D1A8C0576C5289EB754ED416A1123C5E50432D2A4036D73486865FCC8B16DAE11E1E2B3CC1245C9B9049155731ADD6B53678988BDB80A2A90D73E875139B4448E37F91C441827882D570CA62CC0ABC3B6E87E8475E6A460B6A3C4FA7BBA04A63109816E6B598B9500FABE29DBBC660DB103CED9449727744B6F150293C218113734A0881FF81618FC44474103BE1831C1F98261A33385403403ED46C0751355B979EC33238274217D1FB05C7690DEB0C7739760585523D3B7488E1512B7C86BFD540A33291C14687434F59CE41EA0D4754443DF418C236C80F614DAF9AB5687704AEB320E86C1824BCB65A423E2119CF6F69A29301C471097EB7A0AA9F0C5C14872D1C590171EC3D2FBAC758624D7069124C60A479A29BF8451053F0795663683E8BB84E39C808E93313D4A04C4397EA345454C7944036123C452ECED0A4EEAC9E3633AD9BE72A37F23970251C275B549D466B8D073BB58C514209A8F8A51C6E56CF9733C80A6130C6F2693144675F84AA46A86824AA0220836940904AD2624C5DE9912A162A2BFA07D51944EE2B4F3471347DB20F50E90D8759594E9B87C32702A971B0903664E0E636A24A773EA9AA5E8C807C06B5CB8395240018DCB05836F7040B39C064EF33C0D4702457AEE4ACC57527789367F287151F6C6BDBAB6BB5C48A", + "m": "3A05D71E6F7533367FF679AC979DD1ABFB59B519F72C1BF0EF1799F24526E504" + }, + { + "tcId": 13, + "ek": "2CC8621B2593B17213CD39195AC379DE82110182B20C3C4853445C3D6CA3FB44C33AC676391ABC6BDACCEEEBB7422C24E254A9BB4A57F40757F12A3F2359BE2686279E4A46E29308F6A0891E45B3CEF210D8EC4B908612595572C53A4272706606F50C0444A081A3611F962AD4E7079B74BC8AA8AAA758AF80232B62AB4343370265F083E823193FCC2A354872BCD471EEF8AB97654329355667952D36329FDF2B721126A23451342BE87AEE8B866A296AD7969E0870713E8B480A24818D293A7629C4FB775336204FBC93C0F1C477F9352F80572460520F84656AC55C78C5AB9588A19960A53EB1A2099476BAB1E4BE7AE7AEC14C20DF221E64B62F8E7343BB167563216F4873A5054C954B454FEBB56EEA9300D2B62F3EFAAA9CA6370470B0E3B9BF7E6326224BA3CD01027E93873BC75586E04463B3981805479E334C3599BF563C16071788F3EC9A08D165B1631BC2E75B45B1834151AC49B7CD35F98883274C87C6429A3AAC8BB988BC20159F611F30C0B6B5A16821141C16A44368E54B9BF800D8C579922B9B146B3B5C3B6341F38F8D26692A389A3C927B740CAA7A8182D9249E8D6C38F86A8735D0081DE2608F5010D7F6097929C9DADACAC067A0DB16AAADA501E3844F93B9928B815CBAF713194381EF02CB2A189C461C7BBAF68D77FA2EC80A2860875444A5201FE94B48DA753AE5762E7C41E64ABDFD134E544A967174ABC8D4C0799C77A4A32C4F5747D018414C703984A69B36AC3BE59054555191B154BF98AB3357201E1FF75EBCDC774B993306A314F19C909D247060A1CEBC8799C2E8862DF1387A02847E20C6DD730474131F72407759F40BFCC34422946459F510797CBE95B9410FBAAD3C0A5ECFA584BE1A27A94B21D21AC11CECA7465810834010E1188BFEF9831FB21F98CB1AF7A47B549A78000987217C73B6CA438CB66BE5DA6E49DA077CA1A150A5CFB6DB152C0C9025FB8AE276435EB10C01B9BF02C964221074A9B7B085832A1263B992E18185C8AA1EE0265D62044A3404BCA43353F2C00504A49CA6B3E9C3A865080DF9E43C53A6C460707D461522D185A12EA49189A28E301EEF96503C80E2E15CDD9969F928663749A3FEA5A55B722D28", + "m": "EE232C7256F577225858BD2A2CA71B25BBB8C952D10E71E2CD6343F5F621DBB4" + }, + { + "tcId": 14, + "ek": "77D1820106BE738580178A12778798EFD1095BEB6ADD80280C403D655318C7C688376184C48844AAFB712733887CF3B9CE041F3E8B648AC80DA9B69C5FB67BC8013DE5F66B69E2513B9802245089EA8A64092B6A31377B731195712171704C1F9868A22EB0BF61B26EE1A7A6660652BE8AC9449A57EA286361627D5288CAD6C95AAFC128BBE80781AB444ED937FD8C447CCA22C618C0BBFC083AB5798D129C436B30EDC91555F104637CAE38C722A299C6E784A314B59B70D998232609F84B9DB4E7BE078181746522360953FBA7A07320C794030B10F990EDDB1BADE825FAD481E8C9B4F82625D07A313BB15F26B7B454D1AB92CB1316476F98058A2D786EA16842FBE202017361B789642FC46275F3063A707099B9A592F9925BC54366AB51590368F8503ADF5B42BC000901D884F53728E450205261B3283B64BB08448B02C852C6373119599C9108B1343E887B0CEB29A5FD286AD8F01A00955B38F29DDD1BB5DAA5C426A43221304C2A68333BF9C2AC508E7B3B39046B0D030B8573421456A397C7B75113278E4B563387D44915627405A5556BF8A1F093A2C3979788E869C5C8C6F62A922DC81F16C05326D80574D961A62AC724970389739ADA632837A924309A267D210C3DE1639DC4AF5DC475129C7A39B50249BAA9A113B3B178B5495584FB687806FA2CB504B4A6820850412492186B3B131920B52F89E876899132C4DA068E6255BA702952C87562881C7F7692CF167AE62798057B0A7534BBB4425CB2E9CC1CE6A248A01712831E38C869C864816D55B9C8F737C68072B13C6335765C3154AFE86A644430B40DD82820309B6E212B04A48E8E73B94F787FED320718842121A326B6170CDBBB575792863F856E299A54B7B5B56C3A3B32496A914B2F1E849C17C536411778931B2C0EEB6E6BFB099FEC41EA916644AC6B6DF46AAA145894CAA42B68CFE803736330BEE5BC4E956344DE1082AB1C5A7CDA918E905DE74581556792FB51C5646515ABBC7A84169950385E298895419B42B20A8D2A5A2FA49468F67745CD7076A270CA5302619CBAA46125B050FC9429648DCFD735418E9E8122191EED8EB8E31A98C0953FA4027CBAC7EA775981A327B56FB2BE1C", + "m": "0C7B8B92E01D9CF1055BCD2677E4DDC150341F3F6A352C52EB344ECE599F8924" + }, + { + "tcId": 15, + "ek": "29AB05F327A39F7770AE6362DC990126523A102B9B297B0DD059188AD656F8E6637733875056643FF43090C0485060288229A243A4CBF0C56C639268CF3C3CD3B54B5DA30353097FDEB52EA7935F428A9AE73B4F3CF85D2D93B913174995737AC621272EB39B21E39CCD71068C880C3302501B9644E6D07A2289BC28A5C2CBD333B04A6752CA51C6B441BCD7B31842311C15C650D17C60740527208EF29A2D00AC7E930B798CDA9D3E560CFC1B5934855E2B327B72252B89C14C3F90532EF2B5B9D52CDEB9562DB00C6A88966C93CCA6D1ADF652AF4808813935822146710975831E3A9C4A573C24100B4848A7397527A7E54D44FBA037E82A7CF4C973CC7E442C91392B657C7987A5481C941A2B476B1EB751457A72C2C066A73E5BC3649160EA267392EC5CC089114DE8489654CEC3161227093CB37AC7CF809074A1570F351115D26496474A46A24EB2D5AD920AB6E22C0D2F9B33EFA905F154129B7C0A44CA80071506EF874CC6F814B1CABB67858679F385EF6C1AF3E47BDC107149805865AC320307022D69C675F17B2BE21575D32B3E792310342673A522E5E90A8BD7AC11489F57191EBE0662E37CC51F7471179862868A07ED0B20777075D24C65E6E226149C3CE709BE17438D253B1A09308A8124730B26A8969BAEF01815700119492B899B430CC1B0CF1F5682B6649320617DE2853D402813A921724A8873FAA84428D57BD57783D6B377FBF6A27B7066DF06663015A5DB108A9B723263B0773E65ADFA58C88F88484E9ACDD712C54BC4305D422D3615420F8A5A0BA92B0312844EAC7DF7E30A3A5BB442CA41F8DCC84B0513B2B6B72DE12F32FCCFD1C52BFE637AEF2CAFC0D9930D68813F79AA1331200538922EFA6A58DAC5E386826EE3A761D24AB95A8C0D165812F9A602C401FCEA11A0847FBA25533A476F9BCC4D28491E2FE92F524970BC101BBA4C4F4F05ACE0F7B75279B0B0D6C0E7412DFC1146CDEC255A90C470D96E33A62DC8268A5C208C2723A01DC976607AC099E71E5A2AA77EF5A700D4539D291512082CE36A57BDD727E2767FF674CD94EBAAD82951E30ABCC56B8A825DD300CB7DFA5E801FCAC14FD3620B0991E5BFDD3A32BB70DE588BC0", + "m": "1A6BA0302B5AF50F60AFD5E2FA89EE6EA334036E3D9C992806D0C83F201D8CFC" + }, + { + "tcId": 16, + "ek": "1D242C6FBCA62F4489BA799A75C0A655B142A9EBB6EFD3AA5FA5624BE121F8ACAFEB1A2DF2769113810A71DC660B33A2C66B4DA241B7CFABA673E14CA3254EAAD6A32FB877027190F3149303500AE46150BBD88EDC2CB88F941231916B7FB83CE816480C285C6490C63C5C86193CB0C233AEF958298234714B35B00ADBB19112333C75960CA9723A0779ACB24E3127071DB211C11B326EC772211A690195002623427BA01D8D0C892B289322F42C95537070443A040BAF91CCC10255927BE86C920CCBCD11C86267BF5E505344F100BA042BC17A3DD0485988815E5D8307F91AAB83CA0E238465E9D9B82B47ABB0EA00C85A571E61B8559937A6AA99D1E076AF056FBD1A7AB868A0CF940CA0DC99F15C6D12F6CC0F8B8EA663BBCD1981F89243620221F37B0E04801E2E72B521A1737F6BC621936944DB9213B22C5F094C3910C135D86A5D33967C883C4196C8E427CD1265C9FF4A5A66059EEB76B765D471DCBC76D8877235D59AB9C58FE496197150B00785A3A435BF1AB4492380101DE96BD1D0783CB5210D91BDAE08A28EC2769964CB70255B39135B5DD28D9B5614D4A137701A993F464360E2B05E3C4B41C04EFAEB2C97779D156161AB5C94FBE92405BA1A5D09ABD705CB27CA33F9C595B782B54FB242A97AB592BA29C5A511B3CCC288A271682B57823A651CE28428A170BD297D83A4B7AD44367D94BBCA4C172A03418344420AF80226BA7CE327C9201C47AD5C5CE3E5643F7C378B88A2DB23802C93888A907697DAA90120C4D810A280F2CBC2105AB507AB8D364A4D28B991E28D878084F141942A435DD9DA509C344C26428F5A98C883578400B20A0D14204963A27AB94AF4C4C4A7E43C5D3849F3A85BCDD44A2BA78D50C80E24FBBB28D506B5D8164567C7A77126023790CA20965F147DF5BA9BFB67AB450C9DB17CAB7E678E997C5B78DAABF9BB9C072748DCB40BEC498740F165CCEBA9987B5D1EB58A91E3CD6D5667EA137B4C352BC6431DD328BAB4E93C9939A25D6AA7AD4013762540D85CC92FF75250987E923C949CFA80EDB61F0F9A24124588748A0E6EE76EF2044B2B87D3DAD6C4F33D19E7821A2B164CED6643A49EFB528762C3781FC12BD57AA7", + "m": "74562BC3CB76D586C4B5D8B457CDA5597A2CAFBEAB56009694FF61F094EADB61" + }, + { + "tcId": 17, + "ek": "FC01466D431E209A5828B68380466E50024713BA6295120C3F97135FB20609EBB45A5C13C5B66734883B821365BBAC161E1323D72A3208E045F88567E44BB9DC24AF320117A1781DCB57C06FA8AA2FF221E62A67470632910062BE235E7EF20D5CCC7568616B7F16154A90511EFB9DDCC7BD349C6656589A785523540C8CB2C1369F094BBDD65F67E3C229F941F3272BA23594A76A261D5A3818800B674655D3932D6A4C7585B61231877D707CCE706C2E37157FC2B39D52CC6D42412191254202BA3EC5871C7C1935E22A0694B6B42DD3618559B23E759D67796A16367E87E3C3ECFA6CDD02A4F3516531517FD937123DA80559711DE131BE87414D53BA458BBCC38C14BBFAD69BDBAB859824C16B5C445F64BB72115C0E22368E8231E79A0943650B5D09BBFF616C32A63ACE36455B614ECE93C860D50027830B13283F24670744D985A8D22BA71107B1B191EA0B7971281224948AF4949655136D7C58BF0885AE5D002934404D0D366525725EF6E53F28303CEC716DADAB738800186F137BC765B40053864100CDA6F03A7960031FBB8DDEDBAC97201C415619D504CC9EA2C35A4A0F0171910C4A6FBF78753D874C01A89C567803BB3615F6A336787502FEE170F11BC798B21A73484895ACAC3F31BA8985401D0023BDFC2271788010037A06393ADA9086D3F27EC0051B6BF25AA6AB6DC9DCB1A6939951510E2B9177EEA0A74334A1C01626E2F88735552DE6505AC995A1C3A072FDA3BC9E48AF0476ADD90C7CAB35AD4D4BA35EC6B50998669EB68EAA881F964089EA4122E53159C2CB24DB023D04656AC0BAAF04A3C449F211E13B72917A2DBAD499F62CB3F761125FDBAFE3F48F9B452E539A974784345D96A825D10A6B2321EF18998B9AB29212C19577A9C89A6FDBA58EA592081F5C2E9549AF751792120490C67667146AAA2126A14FF9CB86CC3AB1B83165A94A90D15A29698C7A86890C3877D5337A2A59303B653960E868CC9CCE14A94E72A587C738068C30B338D26155F37D1C07B63270BB492BB528F5BAC435987E18C9D16961E959CDE0EA65F63270A1A21FBB1CCEF36C12333471A3D15E72CDB19C91D37E2AED64A6F9CEB873D659AC549E2CA643FDD03D", + "m": "1B2B3B8AC692DEC57BC4020C41F68B9CD74779D7062FC70D5147D010710303E5" + }, + { + "tcId": 18, + "ek": "8B7CB31FEA6ABDB219B58AAB6CB84D05401401D24D2C9A7D011B55383028E06493AAFA3D80932419F35684614CC27BC74B59286CE46C6723C13FE12680E69DCBA71C97238D0CEBCA4087BA6BA874098119F4EB2151B883D943C5E067B6BC12823B5B7D9BC6945A0529A949368C42BAA32B2A44021BCA0481FA233E0B670441EB63A2F3C186E908123A420D11B53B2898175504EFB32C871C7EB12A0BB844B7B0C39363B41BDF76253B78B272827FCE28C25ED24661B76AD693BA329578AED32FB80AB1D66724CADA805D5391859C8245915317C91EFC494947F81A149C0D7165C0BA82A1BDF4C4A7583B86E276AEF8145BCA3C76462BF774609B57091B284DBBC7474F61C94D8CA6B949B39840C12FE7543BF1536500BD2161914149CBFE56CF109B4DD196978E0B5F14FC942B64B69A515CB3F097F11270105894BF8C8D15534DD9B8B75F443557746F7248110ADB5B0A4219A68A24DB337AA285689A734DD056903D5658EE864AC25A5308BABAA2930FAA84BD39DB42C85B228C9A3DBC35CC66809B164B4E55337EF4C2685EA0B1F32B369DB12A5457CE777302875478F905068E5668BD21A8D7E1CD79DA6B501B8DC35A8E05F62B96C4442173C13E1B40F8CC0E25BBC7F67687D4158AA8105CCB53443960B9B68C6B27698CDF0235184098E88563E21324582958C5571BF804395752CA04684A88C57A302A330EE56E161BCB1CDB7846604122399FCC93C3E10A0ACEC751707C3245CBC82843CB7A02D0E711C0C4712494F57246B319A93783CE769373937E374C4011B02E8BBCBA4F7357CA7746B1F4B5B0EC66B213A58E61710111676FC13477F461D9A24F13265CAB4C620738712E5AC33F6509F3361ED292326BBCAFB8A636B99CBF387BBCFE31683427403F98A3FCBC940FAA7680917082403CDE6C4D2C7454A6C68223F4255818662BB795B7C535B761399DDB11FECB5E15B26335B7B7096143742A5C66B770605631249B20B3D1B1274378D1CC49DFFB3CE19B70ED63B6C7771880F13927210C5285234E70139043325D8A047508BD62A67DEDB87D813CA84CD34C95733107CC1D3509EDE38EE20829EC10001845E99D41862CDB29323A8534BE7370EC5D268A36", + "m": "9AB0A04481E29DE87183922A0D98B60C5A922D8D5D5172B5C50C451209F409A9" + }, + { + "tcId": 19, + "ek": "CA21557F40036E229268DA78CCF09536BC5A2DB52EABBA7D2951BBACC3B42C3235127B6BB075CE2D6C19C9D6CE2044657DFC2CC24A1C8D32614109A53C1400A43950EFD57D42F536C24348122A11D497A369C8C31C48985BD31D3CA55A45089993511BEC35741C0B6D8128966C4BA6F48797979516E053C47E12806F595365968F7D805300B62F48645174B152356C1FB9248D61D57ECFA80B845AA3FDB57FAD5708CEC5A69A01293B178476639DA6DA5B45E01B9F3934E0665B35A9320056376C645511CC60E1156193E75B1309AE8264C9A45A38436CAF3CA2915430482225509C770E6B71AA9A33426928725D6174E90496DC543330C680C145327BF8044E7072439CB600E365E5E76B09E0173245A2E48ABE0C3039AAF06B015830EF85297747A91C1291DABB200C30A2C5E0AA7528A59186BD8AB9ABDB797113F59CD2E2BEE28AA6E05C1D80A15E523B99F4075431EA97CD27B7405CA9712A3CE3956299A15439CB2A45B82CB3E1A7DD620F14D793D7439C2DA4442F92C37A7C5D7FC4BA7F92022C806D03B048B5E9302EEC573C157388D54C55BCBB015A5C85E2511061CC504C8A265340D0584A2C2039440A7A1D5C290300BC2CD74E8DD590B460AD7D707F52DB5C8192B75BEBA6D17C5A680418CF93CED1B941D78B1ACD039309A7BE8EF6B3AC9A5CFC4CC3808BC85659C32D3A9A9DAB504079BD20127671A7CC9B9A1869E47338D6826E5C4773F29998A29528A1B5DA58BC2E31522AA31CDDD7C662631166137240F1A07F12032B66C32FE9A89A6C7606288216792D7ACA1BEED1890D5985114542DA681CCADCA832659F93F63449454703A5CBC0E423133B6B9FF46655F84670446162324C1814035D956F94D08322543C4DDCA734029D4E83246D84A000D38E476739323A697ED349EA485489F00BF96791B9A535408675666687D24456ABE4C8E03A9180B77934794AB72A013FA16B857BA30A422138E5A0F405C44F3356E6202735D45171F184972992F2413055F2CA15302AB7D744B5BC07D7247D025B7952B360EFB8CBB4CB279A61886D12AF65340553055BEC357233014F5A4E61CE472A2FCA38070BFD0C93C74CF3F2F4A74E8CB874406D2769B5BDCFC8", + "m": "14818B627520828517EF10CFA36B55BA7580D54F3116B1980A47C590697CD911" + }, + { + "tcId": 20, + "ek": "7F6010550045AC3BB5DEB879A281457F3C6C7EC867413C69C6513AF4B756DC88C649B61D682CC60D03715FB6B81DAB480B575A70961689275F4D065FD7FAC32C3C7E06B4CF862BAE17A570800A6EB5B09FDD15470BE04D73E8ACD203953F56CE32D128C12539D21C7F095092EFBC903B56907A509E56628F4311A3D13740E9D2978A178A950B5AEF7B9C7713A7711B4682BB6CFC234676386878955A55E520B3722122251D53E549AAB63985A35B74EB806831B230945457B93E4904799DC66EF483CC9815BC94F5811C527EACBB2D1762005B8A2349C5968D7597229C22FC686AE97C14230565BB53270B7476ECF52A4E3A0329ACA88564C5B5F38DBC7BCE511512EA857A80A03E8EC3B167258FD3F32E34206F9059A2337477E4AC9B5EA19EF9CA75662652F8F2BBBF20AD03247A349748AB426C6171465E3132F6BA90EBD94951EB338D3ABBC83A5BBE0CC26EC3B6774B03EED9C68AF26644F5911EF377E2022828716E5AF9BBAF92358ACC087A8534B1861195E9A3AB69320EF14A1C918793B93097873319C84854308FA2964B1751BFD810746AE793057314E592488D6CBD6C1B431F167A84A4AC0E1B825C0146695B02D6562F8C5B6D66ECC96FF24898024152EA83C1454812E49FF0679F69003EFDF7C87EA0A51D032DF6296418E92D0841A683950111C15B9E2918A3C11F4973C387A4BF66DC3D85F7BE6D798F047675EB4B8FB5474853E8586679B10FA130991093A168CD1BACA608D131CE023116A7390A94AA3122CAFF7465FA23255258CD447B3941E98E59258CE9663CEB01C56D817504858E20594532A67AB6BB7E57AA0C2107504E19A33FC0C44F2A068434A25C2CC807E57F486BB5414B624C78258F638765CA71DE2977660893D8BB18F4F1B53A5C2FD5F63244B66CE503C46506091CAA64619BC885FBAB713149E8182A4AC499830CBE27570C291C02ECF57640633C97EC27570B71BBA409C8B8B93B20AE52B276FDB659E724497180AA3354774D6ACC85AA80DCDA008635319CF4BDE8680E50D95EDE882B8B758EAAD342469C1EEDE10725579FCCA45267789F9C00B8ED5E9D8F48BCD9CEFD314AD2DD1ABDB7B6FA1CDCBBCD463119CC965E2F225EA9", + "m": "E9BE043610DEEB8439153B73B1C39E49CF423A0F06B97DF5BEFC82D77310D804" + }, + { + "tcId": 21, + "ek": "BCC71CDF135FFAD034F1E252F4D53303D97E1CF911EA64A1CD9354C2E1099CEABFB91CACF8385A68B28453B1388833B014906AFFB096E7D38AA9819EF5F92AA9192962A14DB06547DB52506A095E2DA181A02A30E666465FC873A87408EB728DC68639FE03AFEBC80B5BBB474D657D6E13C2A8952777B30F1A8866B4545269C212D0476F5EFA6701273231CC0E76A83A55A1A9FA058ADBA013FD035FD2C415E7B4535FC3650B3C6F9C03AF1EFC9BEC255DE942759896CD630BB3EBDBC106930B08C0319EC870DE49785A010CBAFBC06AAC5720354FC5A6B1BE743E3C1185EA4820B722C7CB8C8B0E141C7AE0AA4F115953FB30BC917BF5088DE2B099B9B650D0E1B882F68E93B106F863593A6135D2691FFDD78C3B84CAAA20798BB780E75A423D0B13BF68BA2EA06A90EB0D13E7B3CF8B91E754071D9A8ED23458E7508EE3254C44708DB51A038D3A3CB52163BE56BC88D5C0A649638DF33334D4A34C0B2A0F4A66CD279A474C44657933A57A70D440A4647445A3059EE289339D2490FA011DD53C80E7E306D620C58A54C511388F7213BC6F233BCE8C33768713C8055204CB68D529ACDAAA7762FA78DBA4AD10C8CC8241AA21D1AD6C2C736106AEED762151017E3D9039705C423CF24A55912784230F7041B631E43C1BC75FB218708052A52EC791B503B1FB0071B10C636A7B305466B8DBC037E72A0C05A34B19422528534B73F0784CDCBA47DC62A95025A8D89CE673716A837B2102B70E32264EF7B4FE9A31B645897B0578FD6767D6A44B01B464296C68C7AAA4EA415D0007A20A85B32A822DB33936A8D5041DB5A6BC0925E86099ADA2588B48B8BA9A74950C9CBA855F960A6893277BE87B93982B7B25E9573AE3B3B2537C20A997C5AAAFC2C1B543B6B5BECA0E0F58AF73C54C0AE897F980C45AF196265A05B3365D0D33954B28A705B150EA12A33871B47E53CB47746D75D1CE78E164DF20CD1EB7CCDC996F4AF82B5F8577FD785509D75056E91935B9CF030207A216999780179833C41D8078CDB25699056B190A1CE2B2587BC21FE7FB8F6D0AA2F11B9CC2A7367112A24C345A36CA96392E24CB4ABB821DC4D910DBA50E08287A7BDCA28BAED2923F32FB3EE7", + "m": "39FA26CB8511267576C1B6F2AD594BDC536FB7657313D75FA545332E418F94E8" + }, + { + "tcId": 22, + "ek": "89667FE5B2554FE76986904D23F5C0CD3776C02168200B42D7B771E10729F236B855538BEDCB2DA3E18AD6912918D72F7D20504CA6365AE768E2B93AA82B01F376440DB6A8E054B2C5FCC9564B95B0C4CF3719C3662A97059B57721622B777B964C854863903F8E8C54DA201A5B6B3C0562C1E5ACD19D85525126BF0657EA6E287092319652BC8AEC31CBF147F2B177BC193B4B50B79C945C8B0343100F8627A84B14493978A75BB90405D2A99C5A14260EEC19172514C58BBBCCEA92350A85307EC2B72318B26543EF38A8E2F0A440C970AD3297A6F152CD3E56ECC1371E2DA4F4F74471B2B9AD95BBA1A784C9D4BA98E91816FFC9B140525C5B8C9F4661B33F62D99A70CD6470479959DFFC7BBAEF355F6DB64858A5643E31202F367D8FA1B8C01A2381B8449820CDAD082B705B7516B1F2323961F1A3C7B156E41FAB35FFAC439B81F5C090972548CD16655F46526EF2AC3C9073CEC6461A29091D94B425926CFCBC50946639780404D38E7783885B7331A6F7E6CA1E6D3C8AB0B808A93A6625477CF83377DF129D6268F0D36B38B2115C8A622D774BD2C5AAF0E0B512214959C433116F879BE158C997A46B7A53417545F1D199A8F543D4A4201E528209F8C9CB199177ABB91825238FEF226A599BB0EA4BFA519848EC6436C1A50E2A4CF00670C4AA873F3D8198592C240C6BD5A351212D698001BCF5BF06F63693A665C09634BC7AFBC0040E97D00CC32FA421057C724DD522D5BF355CCA17C1BA1967FFCBC00607CAE7748235B492645CC822A2D482C2E5A0272333A763093CE68C038A4AAC4596C4D6F41064ADBA37DB50054B45DA3358C9287B224B78254B6C771C0C84B45CA5C92829B12CF31A207AB16060695C46B358DFF8570A25CCC34395723818630349DA67C13E8B40960A57D848AC3F40B4757F20ABA6CA1F0037B35B2A96A57AF86B27822550B3F7501E3856696BB1E6D771F9AE44DC5D53CDB09530D1612C341B22794A5F5B3C493261C02D09F8A3A784F67A6C001B613C75951628033692C81728D744C5F302821AD1471D28B782CC05B8FD6C45F60A97229BA6EA76C3F6C9968DCB2C3DE4DE31B43333819D27BFEEC34A527F91B6679D5A166151EF6", + "m": "9CA2BB454CC94AEBB5DF92C4F5570D60339C769B4133248B91C3CC89986E0130" + }, + { + "tcId": 23, + "ek": "35C6292832132646457208C975B513DB334C5775B27931994F2660F1AA0B12A9BBF0338639F1C752A65BB63574199247FB738E3B027439509C38BA7A7025BE28292B33D6CAE2476D22061BBD79A13041930F5895FAB0C5358CC95959609E5901DCE3C2A650239A658A515628C5F5319082618C739D12141E4D37C003502E472971F4814E546B1FC6174870D5A7AEF0C20861CCE03A2D1CB62EB282248C674B86956EC2533618682E52C13B2FF4B7DEF9A7EC085B9F7AAEA1621D213A5A2EB21075F76EEE32C944B69C74A115EDB6C022F139996CBDEAC845889460267297A23A3DDAC2AFFCB5AEB60479600B380CB0934A3047F87C28AC4AA3F6F7C1FCE873463C3913010AB2796CEA1808C769327191C4BA05B722AC22B7000DC898149BEBCD7B9967BB1C9606534B4F917930A4152F24128B9724B3639CD56B23A450B76A6CB7BC93714E89B50E98ADEF2BABB3B114CFC25C87A51D00E12FB8715DC50B5687E3237E5A11E8909865A1515F5B6F08327B271011E95034C4FABEFB4A1D04F75B9A778CA3FC4528913BBB451338E4C46B2507E4A643A91A8DE98884BF85CF8D696E0C72AAB0A40FE1D24AE2E631FE449FBE451C70A382012C38DB340CA1E928E3F947FA4A21E8C921CAB8813734A2AA4AB77903CD0BB8325114699C31C6FD49022AA44A00C16BC96985FE08983702491E9B5F3A93965F1421D1B455D1F4900D6B090353753A505560616FF2A68CB55AB6C99B98AB75090F591520D3CA268436465A3D4F466BE76CBD61BB4660BA922FC4821D90155C176464C406EAF32B9550855BC89E7F4008760249363C39D14AA12367BC2512A5A6C7852A2C11B092BBCC997C8772BDED26BF9D16C745900E3C3172D80C15318BB77690CC43A7889FB92B08F87C4BF834DCF043DE83A2DE46BBA708ABD4D6B6038CBF43C97347B6C4BBC1B82733AB4A65A486FC072D57BC51539290BA90CA4657D059275A3057FFE412657B0A75406402E0BF896ACA7228B2D8A2B15368CD88F1C354393443B266ABA87A3157814EFA7443904DE4B23F282C82EEA2359E25107C7481FCAC8375C2CC9B765405824052FAC328EB59820A96F2F671FB75B92DB470ED23FCEC218374909A13DB", + "m": "0CA7D2A40EE364EA00CB0D35EFC66D1D1322527B78758D6F47C928B1B44BB6C2" + }, + { + "tcId": 24, + "ek": "AC4443528CB6A38159C797AD8D0B6AED4543BDC31051BC8C1FE785B2118B291768B7593579096746FB51416C871502037CCC89D1817B9D5175F857BB7F6B22C5082BC7F36D3B1A07F83C89964850F22A77A3C74D45B0B62793B8B6C460E19BC900A5A7298CBE7267017F40A01C523CCF13676196AA05062E35A45160624FA116CB85A2321EC1AA14654FD969070A346A9B790B047223DED7B4F1B864A8A1B2B5B54E1F6B2456BB4826C62ECFD2CDC2591C46F2BA85F1A603E9BC6E600312022259522469D4717B04C45EB15ED6639C68039200431F35C205E7B9026B617E44BCB0C87B73CB09022D64AF24396071709B38A973D0BB20672B60BD70B7D5F16040267DD1647F024A88127C8058933F19F33DD988B1ACA1951F56ACFE18459FC7038B780052F92EB8C88DE49BB704E0B4DFC04538A871CB697C7D99191D23A4BA65B447F4A2FB7C1957735A9FF67F8C72232E652CBE3762C3C60553347D7A4248DBF69235A862AC909C96E98590C292CDC9A3DD9C367AA37041A13B3B883916C8180D3402E6427012C069CE29475EDC3574902969D68C7D96A162C092132715F89CAD2256BEF977CE5FAA4E7AD04D101C54E542C02851C70E40A210F11C9F54BFBCCACF3966B8C0D1B1CF912E935005F0C941A540B995570E59894E6277B703C4CD37DABC2FF6409303907A5C6D6A3A207B74A374D113E034C304C789DFB4180E31991CE5536562818EEC339442C67B185A1CD487057B1C98FC4C48AB7964D0972D8A16CD0C8CEDB451E232726B841746B7545A4131AE42C5E05064F6DC4CBE88C15092758A6A78380AB31EB1CA2D2904F2A52E04DC20B8E1CBE2285226864236170C6E1CA34ADA714566515672591ADC87D8B209EE0004A8416135BC22B180B173CC9F15F414BAC131AB3C0173BB686769133CD51294F1210B6759BD219F2CC46CB9D182BF85CFDCF6464DBC03CCA50060891DB764651B1595BFEB388583BEF5788DA7720F5278885E8C334FDA5AC2A25D8C16B3581332932749226B4478D04F16B1B90D575F133671D2537D7759534C8C0E7578B0A55174AA45BD57212447187390C772454A37F9AAA5210A9C6504625FD0C65BF09B5815E524437404D2C40C9F", + "m": "E2BE9786687E365A08AECFF9027E896927205C08858BE6633E57A6F4ABA4D1F5" + }, + { + "tcId": 25, + "ek": "8598054FBA714F3826418C8F82FACA5C7C4C47E888948305A9634F3710616698AEBE7A90866C86AE305050B84443A5481B651D9B69940B6581938836ABD012F8BCC8B3BC10489B797FB5ACF9777F9E77B828D7A1120440A7F5C3E2ACCFF7955108B7CB66F89537E5B8DCD3BB3345B6D85BCAC83096A914CA59070F87279E7EDC490AB6C106117232D3980DA36952A8A575F7533BE910B6EB4735D8BCFF4CA746597E61595106879D985AA6C448BA41CC237A7771357C08BE18868A37AA9DE13F5DA4244FFC22616B934FA49AEB6453E5BC5961206D91B0BB5428B90671A7BD06456149783A93A9042CB4FA16368EF96FBDF6CE57C575283425A08036DD8A4D18755F85C43FA8293D22DA18EB70561D121ACFE92D336B8456E59BD649A8F4A3A9CFB281D6465DFC0B8D7583B063A1283DB41B9C6A3A589078802C2B0E165A225C48172A68BB58B96566319CBB03F5A99D6A737E871574C1D0AAE66941864244C3897D9C20C97539926B3B0A6E9B2A1BB23CA4D840A88AC133F09A05D35702BC10ECC190345B4BF2694A1E818CD6B15DC1D0799726039AEA124C1CA31883B0F26C6512861AA7A8145C19BC6EA091D91849B83803476634CFA25B031CB8CB2487133810AA86AB3EB66C3F907509CB28F8294F9DBB83BE5BB396601582FABFDBE7BB3D364F85653BE4406C1C4A39823A59473557BA982919481EFDA99010D4689DA2BF4FC23185368EA7FC81870563381129F17394FF11137C49BE1CD88FDEA880F7E1B4C068994EF6878ECA8BE0739D3F211CA112C368C02C8F1C1DDF950567E5115CD98E5B28052F7539DA1A3E605C1B5DF64E5A8674C7810E84F3BABE8911CE8856BEC0AB507356375647C7F970753013FA23C2645B538B69A898742D89021663BB93292C729F723AD6DCBCDCB127D4092D29F49839311B47681B3B40B8C8DA3C2A8C78B718BDB4E7007DEA9A1D55A37D8CB2056A3502BBBADCF16376F581CD62CBEAC516603538C3A662DDF568FCBAA1C9E9686A1621A21302E7873D681631FF2C022AC5A69167AF27B6CD97763E41683971B16E2823972AE519110891A5710363A451ED99D73B63871BBDD53D8F1A3E0977615E9AA9240BBA25E85C5B2CC663", + "m": "A48C1A5F9C92298551E7F9B1BD7CA485D6EAC0E44F41D86A0F5175A4A421472D" + } + ] + }, + { + "tgId": 2, + "testType": "AFT", + "parameterSet": "ML-KEM-768", + "function": "encapsulation", + "tests": [ + { + "tcId": 26, + "ek": "F255CE47334283B8622BE7CE76D7354E3C4FE3F6C44F6BB25C9864EE0BAEB5765950D88F438263CE8B5A7A4C0FC4C95F10C477A7521F9BB458B8AA55D2E43BDC86B72F0930EE428B4C5A9C7116310F2AA5CB03AC1603C811959EA9012D69CBCE40B37CD890999CC74FF375C66F048B240363343CB795998856D560F4C712938C79466864D20B0BE95419C9EA6A8E7203A1986D10B606691242CEF630941B116458A41C83B7DC5B06A97C840B116F2CE9CFA87A1C1AA8C4FAC137DE8498E8749B3638404271539B247183A32E7E4413B6400E0F295788084EEA93B4A7653341005672D908C62B64B11B48414B505F3036EE56CC4DA88FEF27B2DA974C9DD38C150090B5B8A29BD7C5975A8A959549044B4DAED52A7FA68335308F40C9B768C5821F78CF068A694978964F597408D09759A19578624C64DC18EAB23082E599EC488DFE016E4BA58977E15B715C612496310219B9B4775CB51C5DF03B934F7473AA58A57C602CF17C5993D30F52D753AC56BACA1A994742BC50435E179A262B3C8EECE1513955C593E7508B945F6E95CC4268CBD45B2504082FB8B23D8906946A74AC2FB676BDBC39DF76B9B8450F49D283C622784565B76B96084DFC099EC2279E5BC13492561B4439E32324B0050C5FE6451974BF0D72750AC58BAC046D218AC397F65532ACC7800246ED1C8094FC807306BF88E2816AD13B06F2898CA87C486A124B618156A090B1058722ABAE389AB5612CA2C2766DDEF98202A6AB1097B392404EA151788528B07544325F851B4DEAA2495138F929BBB4026042B0A8CD3CB0A7D061927A717D4877E0D9A409D6B125361C99090AFDF922A776ACADA2B6A84522134B089D4B428020C83061A87816C6A59263E636B5B2ECBCA6A64E29600948D5B0B45600B8D473A65B450B766D0251B6915898BC3C1C2C53B9679121F1F06CFB9604DE0051FF4B093939C907AB18C2988646A90481BB99F4153611C138BE34BE163B3ABAC44354A774E9CB54FB29903367C78D275467499D22E83A11CA9B8445BE9DF3CB612069222A8715A495D115B4BC2457AB731AE7EC1BD8EC9722CA980958180AC2BD67898F4A72A675106D66981B2E923C0BA40E3234655D00B25D6462591C9C9C7A53491489D57A77B2510D08B95B9C61C1784BA752F4A73023742ECB985DFB37808B16D6C283CD4A06C5A3AC401855E1DABE63F9668BF7A661946B18230A1A5A7C19DA66ED08151E77A624F579D4E44ABE023A1CD33459FCC3F1A6589426634D062D0A75A387A0B7B8D802A66B2106E01264500915B97307C85ECF331BCAC35E4AA243C837876D858AFA8B510C342708B38093B2CD35D1BA68DA0544794D172C6CA8850A7F847B56998D8E0B0A17144FB6F443E3679767CA91B80A6CAA8BB0E22BBAC01C0EAE1604B8A243911672B3748C7F18C531E3783D522039130057198D6F0989E99641AB718DA123710BDB67B3B75EC66BA9CF459FE06C7C4F7959DD7281FF155940B09FB14AA55CD40B963CA3312C05B36A5207C989428C16E5D288ADB18A66F74617CA39DB8AA612D706DFEC884C457AECD1AAB598195B4AC971529FB7A883492235E62112064A0F6FF5BF4F1619A0D03B96B5112009966B2DF7C2F300B6F295DF7FA2C453E1949DF6405309DF7575C7656C245EDCA9F6", + "m": "5BD922AF345AB90F297D0A82EA39527A648E4977AB56242E2AC0ED9A2CC66F10" + }, + { + "tcId": 27, + "ek": "8E8107F8F9701A9B6B01F05D964539605B87CAD36A2797604D3983D0603F7522650312A8707B64F1F4CB12D8886321BF7EA1CC28F3982554A3FFC664B706C76C429785EAC08D8954517315A418A5181A2D882C51623C9E3623545BBA8511C8BC0993880391BCEFF86A1A0717D09079A1C33C8E9C97BB520F273684B2AAC1D4D18A70D490AD0A6627F0537460C095364A42FA08A21AA6D24255F6B2660B1B64839846F6E030814CC58B188FD1D142D4DC3EC5319773817287BB82EE5479E0A1A498E1671D615162D8C5B38068B61643832300FDA1B41EABA31C5B9854A07B62D8B2C591898D92BEE3CC01710810EEF3288FEB3AD9FB58F8D39F76A128EFC764FE269345EC76613AB0A41A746496445FA705AEA7094A4542A8E59F83B380E0BC663247765C3B685B33C01CE7806C80B037D22053E6B155D516CCF2C010F97575527AC7A5C3D1AA659063AF2D0B0D915A1B57C75C707A179DA035A9E1CA3977B91B8330930C4DB5BB2501308747C0A709C34142A3627BCC2952FCA704D749E3723231672187DC1CF61C087A2384FE727BE3AA7BB00240E2395B979B0DFB942D38F3825E72132395348F7C6CBBB800C3C36F8D4818D584C19B124AC9A728F7714760625B5FE877C855BE65B01BBCE106A24A2F7208696E73A22A27522566AADD8A73A050914D362932902B8EC8429E5C15CB427965A87F190625B6452C32896F5776318B15CE2F3060B296A1BB72A4C36B5CFCC97B9668713F85575280C1085B20D8B35D993A27DBECB97DB218B3C297B2E60C8384B05DF2C7234C750669864A5BBF76B9902F00A05BD74429E57C1B24C6BC28B6BE2C9EA5C46213D92C4E29828DC1B10DA786106106C7689014009B1B1C022093AB7CECB44D4998B0838BBF912C81269051655691135B5CD45F84D715F3C7B56DA3314D8783BD0213C0C33038116042D116DCA41226974483C6A4B8A2A319690FC0B1BEDCA3B02925A01C13472AB9A565778D44242D3B1776FDFC15C4F18969623E01A453AFBC6F2C264CFEAA8AD14B39F96B55EEDA5CB8C391A31773CBAA77E8481B5E26ABC8D531430B0931F36BAF28B96FD646AFB71195D58BFA1686A7247F9A69A5D20C0516694E760451199A25A55457BD17674B4CBFC5AA201ED0CCE77172951170342B3091181DC22B7CA70213D1A38B9D757E87961A4CA7BC18E22F0626850A794E3C2A5D5B5001B194486CC0CC880467FCF3B55B3492648980C961333E6C516EC4298A7112EFE459E1E92E821C74D5896CDF229A798529EB5048088A4D9BB105E54C006A5C15A46923909272AFA9B6D5661F7AF16D15A698D213C51D771AD0B14BA641C762A292EC5A0372D63501B5BECBF24731E283DC4246E3652A5544BFE99A71D05974CC2B9DDCB34C0AD9A057BA0DF05C56B8854E01655BAF21C9A5079983D322525049E0811103A101BB5163538C6D27A477B4F956F1967F445A2201D990D304755EEA5482813089A3C4911031FB49B380D13FA2C8A9BA7B439B3B5102B832DC65387FA41B4E7959BCB790ABC51BC30608555A80C4984AF0B80CBD1829FAB6C7BAF870D7B76D55672456FC3AAE7A4FA466CF64B43482E53DFFD1862F32BE3718CE4D21C57B894A3193C3DC8A03A34AA37806B6A35925C365EB01B4835F4AE98AC69080870E7CC1", + "m": "F3430DAE17CEDEF4BBACBDECDE7FEE0522D6A9AF90ED76B13B312E7A86E5310F" + }, + { + "tcId": 28, + "ek": "62387A619993B5D9567CE83676994DC54C46D6E380A8944E0DC60DD6312460E698CFA6AEC0AB440C3A3D93F21F65A05B42933CA538108BE5235F8A69B505CC2ED84CC0606EEC5B1449BC5F12048074F05985429AFB6C9FBB7140C28019BF783CE9877749516CFC76969925A09451A277893CE3280AD7DACED8C66615E074D4716103CA5C10757027995F8F98ACD141AFDB4CB1531089525BAA01B906BA4ABD0D6C186ADC3B96691965A883034C53E50268BF8A6CD954115FF64D6C9630CEF8288E6395C2EA011CBB3170F79DFA0759F1D1CDC475059FFCC375DBA3AD9B064230833060C803182957F80EC9772DC235A58B16C38A365176F3147C5B524AA13E2296A36F2964C1638FD8F7570CC572D7D69E2B81985C580A9B8BBFF08A3FCC757FEE6040FDEC7852A32A05D51D8FF338C0730242CA6DB2A4BAEE99C29749A33E1396FC680B6A7589089477DCF44FEA18AA2C925900203200AD14585239F0727B4387530BF68F7E077E62A108581C8127FB1C5DBB5E04582E746894D2516995434D81380FFD374A0641776B218E38C978622A5BE4EC6072E38A1F0289B060C2DEC91E7F763702F17803A58F094250D2E1670C7B90F0778365E8BFEB2B3556B168FE55B854089E52E0A2B8D832DA57AE355091C876AE67B367CA866A1C3597AD4CCF4E5B2FCE0788593141D2C0CB6B3C9B80D3445F992EBFE98F26DA68D03669503A0EC696B430B2217ED9C4B6CB22BB3A91D6AA6C1A2A3F3615BF67C5B420EABE7159363F525E5AF9049D4C0C9ED197DD7B6F8B4C2F6604C8CEA75771A3AEEC0C0E8D1C8A6AE94FC8485206217CF785677E34C458795D6303403F7AA427763C5ADC4DFFC8C2FD422870B876FAAC6D334931F0D760ACF4092A0727F1935855B20698B5C8B2879576A25D9A9B93862079DC02CC30C731FDB7021C9631C43230A6FC6DDA1956F3EA01DCAA64354060CD4C67E1149915A423FCE3166272B2E3B71E3BB509AE978D88859B55E50D338B703E1B1D77D44212E00D510695974A07B8250053B7129889769B4991B5083E05D0054FC4CEA18C0A4291298578BD53B11D174C6FAEBB6E5919B2E7BB7A4CA9C94E45ACC1674D5D994D2AF81CAAC6A153334A1B770937F14DC2696721665F87751B608C921B985215F40EB28BA632533119618A97D0766FD7807318571EF8305175724E54CA261A03B8243B7D1087F70A39A7FCBB0B223CBD11AEFEA9BBA4833FBED98ED48120B3CB507C2C272E7A6EE6C92EE5401B65345182C31901F1C0A82743C2512A392C3B6BB73FADD89131FBB65610C9407C62860B7EF894CD353C02E347424185C27A06209914444FBA9C751CC27D50527531B282A6C503594571CA89759C345632AD2AC24DAE862EE091C4F421194ACCC9F45792B69C12215B878A4ACE975B295C672288472A2B5CB3865C787F7A3DB60608E648A11E6BBCA38456F93CB4CE2C31FF1B660A096832E518B6B7032C20ADB3830E982430EFE661C3E50802487CEEDB0FD8A004A7263483F1B41227B96C207EB1B2131082CD85244310AB6D09D4A73D436BF3E8A275ABBEAD804968F9A5ADF2264F897463D71FB09A797EA500B671C0062C04B911606293B8C7BA6186C2A2DDF074C2A6F36D35796EF0FF1CF8E47273048F82A8F00AA9040D87CB0586D968", + "m": "DEAE13A40F060C5A154826D5FDAC7C271E2A7C8BD3FCC211027F4B7C2E67C0FC" + }, + { + "tcId": 29, + "ek": "C17292BC117476F81C319CC2523875F5309794D2B7AA85AC7AFC08AED5B283F5A16A7274F80A484D9292D440B4DD4537C0E37040835ABA5562314069E5262E8218C191686459E80201379760D55054F11D53647135A5A62972C7EC5C9A426A8D8FD9C712B4B510A670CF54A1CE3127EAB80A3F8BB0AA228E5C22A3794767CC040DF13764CB6953FEA762269BC8D5D169619C80E0160D990A3BB41297086110050145D8EA48BF503C4C6414BE732B2BA83F583B3EDE75C486D56949A2AEBC82459526BBA71525301C178B2B0FB5A7C2CAC480473280D50BCBDDA21C876B3A6B99BD32C27A1A081E36BA72DEC599FA976DA3180DEC4A8B134196E5E01122A266CFD79AABBA26F18336DF74593E296CDC0A770EB80F08D3290607AE95867D1FA5A05E4521910304D20320145219F3737AEEA8C5A94A63AADC06ECE1AAD714C25C244360DC49FD79847FFB2D0BA20DE374A1B5F54DA9B3A0EF5824E339BC58B552FDDC72045B1FD8FBA920874DB50961C3D4BF0D1A1212EC58C9720DA1FCCF3D7711EB4A5C205744B3AC0AD571AC8D9C345ABC571E65112686361402393FEA6712DC323D88132699738B89287388388A149638993629F8B59AE623ABC37FABC385D36CADBD6C6F54B97310A06BB5323C42A66F973237A626AFCE620DCB88967BE7C8BAC479D6C1887201BB44E1A75AC351754135A81C799F26358B9C7948B564D6C88DCC075EEE7A256EC49861CB2E8F28422E362F4D6ACE1E94AA6CAA1E15DAC4D6F0683B156A71807CEE810915F4ADF68736387C7089B24355D21465A7BB71B3CCC5989C54C9B7C5B2823B496A2FD23A7A994A7788B91FA14D05306D86125F33F342A11AC53CC8838859CC0740B6CDDB9B2E53C4A2D13391967A5E3197998494699AC84028B751399ACE998E26B818B94CBEF78AC97170990431BA7BA22B8891CDCBF62413D585AD6488CCDA194DF89222699BC77A71B43A80A95336F978967116B7059153CF344B02B0CFD78BAE7547849DD106A3170A99FBCE07067D06354A0E86C6D106A2F513A839660CA2942A51D9A463027EC2E5B574B795D59BC3BFA406B6A99BED62A63B37B27C5B40C45871C5CB503D062E255C48D2835FDF89467250CCC4EAA32DEC2B05C04E555C5FBCE3CDC6C855E6545062B4C8D4599D83717F03124727E45B5383BD3AF08144E7BADF062F1F2009336078A7A62CF2706642B2BDA323C43495CD8C067D8914640CB8660759970F665F8E282C9CAC647D709AD600AB8B67C9DE7A36A1482C2A94AA1E214CEE1A68566649CA5B8553A6404934219BF1C07657C82F48C3BDB00BC0B394327C75102BC10B5756AD404930CA4DC8ABA2486875AFA58BD81B83F08B9FEDF802626518B9441C0049A98CB0C8E5F132A0738ACBF323B3577EC906940871947F856C591047C1C66883F040A6995117B8AB51E5B88207A84E3C7239266B13790C561876C99C64DA8B9465627C59FB1F740951C906B540B592BD6467E16324594974E6933C6E509708B56D41766D4A59597BCB5AB902B86CA3B4F8AC29DD4CA359A8C3CC70563B0CAB3E559C3F1507F54C2FA61A383D217071C4C704514150AACBD9B02000A48DE2605AFC8A142B49B95CCA44A9CEDE035327B2BC1B770BC0C3EE6DBD74FC9D3948A46E4429FF6D3B5CC6A018", + "m": "C4316DD26DF672F2C733AFA75904229B722CEC9C4A5ADAA24C6DAA6D6FA57194" + }, + { + "tcId": 30, + "ek": "FD821E5AA360B31CC3E498AA047206482375975B629ED6AA5C7A1E2051A7A7B9B2BBFA92C032C2C0245D7504AF81197E80877A29656EEF67541221BA52652D48E82D013024DA578C2D5144DC9B1C32C4C840CACA5266327DB125DA10B978A151418A300CB472D695386D784262222E2CB54F81B62F39B4A8FBA821699B7EE7B65409B57E2C990D90991FE7124844537047D2CC5D9946E6E57B2F548D3CA6306A28A92C3A29D5543758A41ABF7A087FA734F0C2163A4B4C1E09C64A6BA39B1ACC09EB4889C91366DBCEF73699A72100F29A566E143AB267C370C65E3A268CBFF3505819573AE695DA655FF8F50ECD8632141C53228AC408CB68A5643A44E1B23AAC0E731008CFF40CDA87A6FAFA197D12CC565AADFB722A7BC79ACD399A08740880589991B132A806BD8FB47EC0C754BA7B62087A59DEB3BE4789BA11001C113177424B57290198F6EB1E61821E20A4BD8C1A4CB2D945F60137557135DB4588A87058056A1EF43A76C6C4B82686CC431A1F6711064129073256962A2A556B5C9D70765CCE6577FFF00E04BA528BF467506C40EA211A86F37888CA5D37594AD0D872BCE47D0DD814839A80AA86C1DE00842A418FFA50C233B427F597B072D08C41E5946D9C78B45618BE943DE0F4CCAB7AB78317574B27858FF9047AEBA133685B7ED4552A964451CC1236699C2A458A02A1A9A71075F2E0603F708AED15C51223B0504957A23CC8FAD2135D96BB1F340B25B00146D162A34BB0FC127B80B7AB8E23526CC9677E587B67A954C5303E99136ACD85045221CF3ACA261009871998389B86C877138F3EE41734F43117F2CBE0839B05B12915174BB8826467BB9E22FCA92B27A99BD0CFE137C06EA06C5EC6073C55B182385FC5FB483EFAB78D692474B6AC87179576A3C846A62F4AA642CCC91F424B6C8477BE201A0BAFF58C77720ABB34274A7B0D510CB98F99B9AF786C8E762EF977205BB346F1320AEB37481634A20EA49503229AA6B5C00449CC6D0B635FC66B6567B047B9679D13C7CBF19087AC5CD4BB82BC98B14530C5FB16844C311F6761956C51C1959AB205ACA8EC92741523083845AEEA1B1F61527109F4761199CBB8F35E311C913251A707083618E9B6308A727045230FACB9A78954E25C183F2B9E00A565ADF753101A7BD2826AF49025585575E0B6A3F03658D3C24505C222BAE30E51A6CD55559C9B76C2A22367412AB883634CA7AC6B655351E3E954671A1F7AAC4B1C387289F05179083DE24B301EF660D66339EC7285D67B494D403B35D03F7E891D514B2F3A2806A06698DA0301D207AFBED78E7797B6B7D4240174B07B514909AC4A4C99905F9B7E56A074E51405846323EBEA69C49CCAC80A5732548376FA30840775568A597113A08614043B23402477705FD24142C6427429A08DB307C5B635130707C00272AD8BBEB34A0D10648254F0312725BA84C93807C7932E605C032CA11F39B2A7D4A781D928682291E04B966662249CF2727B570F5B6407D3312826473FF549209B30CB1E75CE07D5C56108A5BA468C5DB457F4470615B906249675901A4ED5915504DA865501849BF77BA4809D38B50DBE0CC3FE91771F90B561F96ABEC4C0676B1FDC5B5F65DE5D2E1D792C6AA330324CA329EB00A67F7771907ADD301F8493CAC1F5C579", + "m": "7D08CC014254ED16B7784EEF0045FABEDCAFB0E1EA6FA3CB3BF9B01F847A97CD" + }, + { + "tcId": 31, + "ek": "F564C5F0E7CBC1302B8A46700F99170020435AB65681C8463E3C7BD5813129357CE6D55FEA5BAB90845E89300250CAB11A12150321B92CC6A95C3A36CB0A60647C141FE78C10A6B4C1496FD164C0454288449793F18279B71AAD0E4C5C6191845C81A1B56C28C386721A53B566426A732B425FD97BF6849EACA5A8326B99EFABC453688F6BB775459A774D9BC4C2D7321562B93D0B537606CA735598EE06A3422944818C8BC765A08376C1D172A74A169E925394C8A039716B29E6A8BE142AAA0EB5564D6A2C513572F8F897C74C623CD4B22E6A2EAC1499FCA679089311AE50B2F6A4A754D46C023304D4C51EF66996DEEA115BE47D3399B68BB5C3748B2899863E28A9B83E5BCBA526B7ADFBCCD010A8D5A5233E8356C5AA49B625228C217BD011A170D919BED00712A1562363B023B608ACB6C4626BBA7774A56343BF1630647BA2C9FFA8B0A33065A5D8C3FE049B0407A0D67016861CB56C9568AE46A0A32A4ABD1AC6A1CC18E74553E3593F9569502F42C66E1A73CCA4B24EFB31A0E8A906897E4883A9D3C289F3B24A35F392551294169029AA139E8F39551C73C555865DF5E436FF0C9F3F916080D9CC227A61E52340727B718A6C81FAE14A6CB16CD0189288635A42751D7AA48FDFEB52F1A79E4486BB1436AA95263BFD62776D0B74925A9F35D1CC82D371D428AE4A19BC01B318D899308FC569F5F0482579755C8A05E08B3E646A4C8BA3993DDC4E1D847758C8097B523545E0498B5B1232587E83C514E385CA052B53EDDCB07E48120C286AD3A32CA6C1B696628196C44FFFEC3E712A52C8987BCEC92B7A249F8743499791B90ADB0D4AB3814D6112687885710A6F2BC3250C727DEC5A10E4122703793375E17161410944428E76BB374B08540B26C85796814EFB085C4491BF75C19D184E7E5602F174AB1068A874086C30491051DA1B197423DA6700DEA3C4A30548FE38187D6A3919DCB3A2616114A93E32F119A415CD98713410F76BBA043D79753FD4A933D727391F518A3EBBC9A20471487219EA00A5A6A2CBFC28877709783A7B3013E9179778374EB821A5505B01C8727BCC25F2A3599101720D77034A0693F176182458412FCA4A4B112781B19D82857A278728BE736FB0052FF09ACAF2F2369DA8B50905C0E742B1FA33B6E50292EDF0B45AD617F5C37CA3E7A35AC637C74B15FBCB1CA166830CEB221763283BD68921C4880C34346C7760738AB29B52C6515110E2193E84409C009763EA3648542ACC67B80565CB4C86D3A8AA52BA44428C97BB63CB711BE7C792D90B02CA51352DFB7CED4C2DE0286BF0E1493E9A02730C054C69A435686F9E483C27D0C91D098E77E56ACA29874BA92600273BC76693B2193684ACAD7BD5C1A1077818548C19733ACC194BF6164EF96292EADC3385C404BF12004D91B379D240CCD29728C82134EB40CE7AA1FE4806F076C567868978BB8B8A391B5971280107B9D9C922228435CC760353B078B6092F9BA80EDD49204B79BD66725E36DC2FE3742C1262102B70BD73C2671528378961603931BB7BA9C812D3B17C3649B10C7E83A347F7246CF0C06ABAF1C12D232D513273E83C4324A23BD1D5ADD5851022033372CA45370C9F7E131DEEA6638122D128EDA823931476A103353818A8D2B063583E5EF9A91E55", + "m": "CF4C77023EADB9229E47B17A97AEAFC8746589D9106334A9518989E3794768E6" + }, + { + "tcId": 32, + "ek": "6DA57408E3BD5F0367667C3E950B80C4A4A541F3C97BE9942FFB7BDCC01333D1754D6B280208889C9457AA9B56EF904AC2794E52105C0B23212AEB1E6ADC49FA5A5C383726B8563E6E9129AC507353960C4A641D7E69941518CCC106500EAB7EBA412E3C4CC903640E0E51082C85B0CA3108AEFA6C3E38029A9731A3D831B80255F9097F0A35A260E8585EE18DA460598F63C0E9B3C45D7C3728D25435088C309C27158625E7A812E4A209A571668964CD210C7AE2DA0775E4856FC75E8CD90187926D1A949CAEB211072B23320711BD2623AA00BCB142B72046609E5622770CC89B4B93F5C0CDAA0789FB11B2353492DA3441FD5061ACD51A9AD7569C805E2215863C094BCD31194174715C33B1A24799BD3315924015E451C5863AABB9B951B1F825AF0906FEC169ADB68BEE67A923E371C92050FA594D1A276A02B2AFE103405C6A857170A8CF67183931CDE8A92FAE0567EBFC5EAE543A9774A16F185AAC003E2F849F20F3C97DA57B8F92020672666F78C19240A593D67CFA861D98592033C78E04582FDEA55C0B251DC992041373B7D49C7C1DA523F3E783E53967ED8C12CBC02C5947297664434EAC117F7502F38364F37C8931B4317F00C61D445A5802A26262C7291167A19C96C5EC30929C48D263669C0B4A2398AEBBCA7E74659159AC420E0B78F22A110D1180324C3A18E412B1A4A25F833F4DC10F9EC49E6E368AF809094FA630198185A980072959BFADCA836A987494849131E8A5258C0037348AE715698963310CD79270314DCB017EE8A82B68D6612613313D4C39134B663EA591681B4F774B614726C81AB2B9FD59BBB59100371267E910139C959ED3A2B220784D9642146A7904A507B1D268AC2BFAABB600312FC155A6C081554AB772E7398629A4DC668A03A44E32E0CEFECB42BAD26531333DB4CCA47BE72199B7A678E44D5D1C7C4520B66FB63B8723A09CD373C05791CA8BCE4AE2BF85811F221618C79293CEFB115F7778915B0C0A5657F0C1298C5C6CD83570BA4B32D2858132D60EC9539D47BBCEF10B1DDA16B5E3C9370E9AC88B286E717818DDF0B91293BCFC91733CB946ECCC6890D936370A12D2C12F601B515BA88F47326A8B1232FC8A5DDE477CFEC9C7A50C734CAC08BCC6C92405C3585186E5C0AEA4BAB3A956A27F369B8D614C3015A5DC981B6267B6D7D812D6D6574E96B14215B61CBA7F05321D8AB7A1B539493EFC0FA72B00C55506DC13907B0C4AEFCC10FBEB72709B4B00EB7CB00C3200C8A793566C82A62B869829D55A68B675B7CDF3A5C5560AFDC9C9C3435556E480B2C6646834173BE54BA71053D9351631A35105E40369740F3076B6649217CDFC544F50C6AFA8A9C9CC2CC6D68429112A631461B9E95B7676AE3EC614B650512FB3B18D4A6022B077E00447B0B4ADB8DA59C1A4C7326A27B7B7916887BA30285D0F662D36B8ACC4636D4F808828A28919F25FBDB7437F8C7B8F54C806025649D99C255BC6B3C853AE89171BA9043FD69BA8D619D851799BF76F8C99BF919BB7F7A140F054844655B4149B47DDA196781B3A346C757A34392F52871C8C09E970CFA5B405EEA2AA27537F57412DD9E407C4A8AFCD2CC9FEA720D1F8085C236C9C50A9527FA22715E977B03093D8AD5A7FD81EE1BAD23BF127BACC3FFF", + "m": "0153BF0F4E8DE89DF3DA167CC98D7FC3AC1300F0CED9E74ED5D46031820D4D18" + }, + { + "tcId": 33, + "ek": "E0F3052D66509EEC07C79838B49242B60C4A977C7F0941B7F085C73DF258A1575114D7B4E31A32E55462048B6A937A01D311431FDA2818446625229760CB53E75671B9E73C05875DAB9A6A9ABBAE05425289D603322A368500B7D7D83F65D6BB5D2AC7B0C60E49021A91672F02621C291412885C688AF76EB842B3F6EBCF927751E4ABB0E3B7808EDCA3A71121B5167776D6754911BEAFB839E288B2D2AA378712206FDC2DB6E8077552288C821116D313DFB4A387CABF08AC4B6D9AC42A3449773BC22BB69AAEB94248B88F5DF567B7853AE3F7AD1F218FA18356C2E3B3C62651375A8C64B91E11A003D497B212B7CFDFC765B1E2AAB2596493E4693F12202D2B685188036D8553BC7A0DD976A9E8BB8DD6C6B7FCB38D6074AFB26C0E2B96445D142B6D747EBB2B314E1707F35C563A287102F84121CAB81428B15855C4B9C843B0638A1E1B005CB1290C369E5905C312951A39EB846464B4A9103F2723195FF2644423A90E60A7AF5333E2BA4D1A8B8765538B85E24D0E0B117A883B13D9BDF83BC6E5F28AB1A10A40C181F0186179964154438EFC117E40F7385F07620F337041111B66C50E692C56AB6B6C37814819E72D2DCB213CA35A8FE613B61A35CF09C44DC4BB4B065BD0285D52E6CDAA4A4DB2961387964E0713B378781593A7BA25604D243864EA33791C94625AD05A913C0F093A2CAC530CEA5266ABC4833AB728AAB97DBF036B9029C0DC089613979CBCB1A600E4841A31842EF1CE12742B5A2B97A13780EBEABDAA4085C2FB2E8A148AD3317A576B4AF1192C04F52D1108B17555C68F694F0AF949CE7077DB36A6DF0525859630194A5A8920A07BC988B174A7B4BB80B5F26E06A0ACBEA80006045E7F427F009A79E5C95DA885BE282CC0B10742F00C94A6704822C1983ACA5C05147B0ED2C0130BCB618359A8071F434223C732676999BD18BBC9502170227B1DA4FAB58373758AC2625F482F5DA6B89E73060CE5715BB1AFF116B6A96502CE399D0D127EC28390A5B12850FC0CF67B90CC750352E604CCF69D6EE76101F9824B78B0FAD5C59F6A01CF1A82B5BC1A690C9F43028B9FB52F4954549A2AB32FAA1AF3364AED5C30E68B30385A5001662BB097B93B3B55366A445185099E00AB9A87A7A74175E355BC72F3315D88801923A11F97CE0AA5370C145D46369654419D49272699653118EC3A9EE51ECC12CF104734E7B48B7CDB9AD6E1ABEA670924A7C74B2BCDE03B6F26D9BC9B8661D481C738E43A419318E182662F37B4A6B3A22B7B863A3171CBA4A339C20DEE83B962471CC6113A7A43CA7CA821E939A27B73A1C7B3845BFB55120C03F0B8BAD7D37AB896C464B28A3CA09D0349BC013C85DF05AE9F4A15FBE918B9209674044B660CC5892729CCF4C9EC09008E364506361B3F396207E49F6AC31BAE991EDAD7081264795F056540D161F3B7981413C6497642A478B6597540DDB5BA8FD22382C8045F13BD74C3C5B81B7BCA9B99492232B2D75EEE65C1ADCA0EB2727BCF9B1FF4818C9B1B120544924695A23A8B538C6C8344B41EF7940EFDF73FB168B2295C78A760401714B16C46A18495028CE4ADDC21C340B87E9EB17D55412077700E470BAD2EB7B5EBEC603C09E6C28CB674FA32DC5B9625EF7367A5B106E88B0C73A22E9E320017", + "m": "C0A25F239A315DFF60A6B98F472322F43426A7DBC3047C52375C4E13899ACFBE" + }, + { + "tcId": 34, + "ek": "1D1141D58B6801B3CE4A78A74077A7D5E464F9D7101CB24720D0A922B261B17381C0822C463CCDE0822F45F5734B71820B8C45EF933A0E6329F781301BD7B8A270B5870704EE150F5709A4F098C412839830B9BDDCCB4E1DDC5C130B27228089E3D386A3640FEA08B5DC130519E66FEE5602AB783716A98000AD2CB7C93D756C2DA4BCBCED945887F978170716EC762C013009CB572ED9EC09647C0F1C9B861E14B266F2069E740BAC33BFE8E7B62E5705970082C1DCAFA319CB94867D631679DE494D0389095D0049FFB90001468C6F2C8D1BE2692C34647BF6380D8A23C4D12FC95C71AC394E2CE16324A926D57AB41C65656337922801273909D0B56A848A7ACC383848A86A5675EC96781AC90D9288560B4522295B5B5A869BA05B5B30927772549B0313C609A391B37FF3966C2484866D8857C11783332B7FAF986000F5B816A0C5D9D1ABA7AC11425BA249B86643F100F0252286B47CDD6B6B07262794E135A079451398BB58272AA7B68F8A2979F5807DBC9B82D3E1B312D0BC98449A58889226E4A30C19087B168C6D21C6A25AC6D6A533A0E7464E2A71A80BCDDD51664EC4C82B463E39F841DE464D13D5531DD628CBA0414CA56306A69DBD2C6BC6892753B034182C10819B92A73452F218B806CA9CBABC1ED4637A006A5880BB6EB6F7B75733392384C2D6A497F3263384F847CA1039F90C6387D688D1DAC3653A460F6174F2582F5378666AE70F875C1630CA355E9C48002259DB0142E1B912A7C3BBA97614A2F29135745F0233ABB8318836411A1AB5A59E95150EFAB1ED4C8E9063952494C4B6FC8EDE568C534A78A33944A3B5237088CB2315339EFC77A9D27F622536D70BAB5CB26C99C6085E78204FA58653F5940541463D198BFBA4881E0517D6BBB5A0311720F61211FC3B337171205A59F5474D253B71835A5BC4DC41ECC74E24B3A8733B93BD1B7E4A58B380C2459D7880F4499B0BB9CC4DFB9F021ABB96D4BBAAA60CCA97BC3E097682255AE3B23162F2B1631C598827542089B284C09DE2C88FE546C2735747DA942C83390F48BC7DEE80163547417BD60215599CB852732D12755F548C69F71B8E521FA44929B238776B22C0DC071EF8295576F634C7B3C45233C309B83A5C2B895D804D7C1936FB2A6318F8ABF3026B756A4F4FA98E41526F092468BE9A92A5DB3BE02C7440670A4AC274BF7AC1C5791E9D45ABFAB0BBC593C75FD0A9E7C0BBE899770DE6A9D7A48D0A3B3A55471A1C659F89A40F78161783AC65C764CD9E39579BB94694F262CECC8B24B0CE23381E40918B572844F936A687E009EF1280C99B4E86C1BFA522BFD0B7C90E11873784377E21CB4272192E545EDB2BB0C21151981465489299123B5EC1101B02BC30346C760799CC0ED6173BAC222B8A40BF94017E24A1AFDC59755A3E16B4BB0B731857572F12E3160812723E774E6F3ACD6CC32216B08DBDF616AE843CE4B66CD0A7C40F2B3D8DB14E526A9BA50C7E2A351364650EFD76C91336A23F7030C7C75C0A5762417381C81874030B02C10BAD2C6751764420088463B273C4E4C368A483064D5B69900992A0E81F70A5A9EC7433A032806164B791E352F41142379B89139190EA55CA884D3339CC03886B5CD7703C6B5CAEF8B4500EF43076F2AD22560FF04BFB2115", + "m": "87D6A46D4A11BDDD27D01F96EEA185F4F129A2F252499E4E4F14BB750FA75B71" + }, + { + "tcId": 35, + "ek": "C9E8A07CF6128397B5E386299CF831DE98151A1B18072AAE0497BDBD7CB966958776710ABBE318D28B3EB096721D4490802BC36AD1CA279B926D5588FB568DC7BA3D912A2E27255B4BEB87DCABBF448B0D82D5120EEB31BAB4BBF4301FE0DC97B0A241B6C862491B6F3C0369A2ABBD59EA6AE9611BB8A0ABA52426DDC2282AFB01B70B430309294ECA78CA589BC960B92295454DCC9B2C30596C1493E6722192D2788CEA761ED24C19B9322514C14E848E59251C7967804B65638DE06E351B93EF92BBFAD06EE28B4FB7F5BBE3D8CAA9D4873DA11D87E97B990A255D34B8E6D8408F553688F4B4CB9AA31B22ABBF18B0B1142BCBB22356F520EE688C4BD56C65EBA68F235494FB7112A25623C75CB5B994540A1EEAFBCC439229AB6907ED059431F599E0697B979072B6092A85394B9896C4E966ACA513BECD9202A2047D213B2F9590263663363880B1D2F2ACF774CDEE484D1E41940F6429A7681025E234BC11AEC78C778D671753E951A6665B9E9497E4302496E3C25C0A7F0D803FB07226494146C10A961E47A2C6AA8FDBF8B9054C217BCB37A018973597056801A6532699D8CA069182452001C2A7C3A34AC83C80D554A9488884455B50158614244E82E0B59C98BF61032FD4D05CBEA23FE5781204B9B0B6053541059E94F2355D35BB4D8153006D208F10B2F2A439EC12307D603DD443C955626229992BC6993C142CB92BC6CA941966B9C024E946A1BD3B68F0616E06151EEC2421C51979E1D78A026694AB1B44F3F9404F770C6E509FF4DB354C9B74828719BE0382FCECA08E7CAF792685B1BB68FE021B59B136B5AAA6351291379A8A7E0C253AEB17EBE8AA2DD28D1F905AB528297784CAA5F33E90EBCF1DB005BE6501D1F306D7B8958EA1632A62B89CA91148C11948D8A8B0532230A2481ED2A3AB1AB2DE525BA925800B5A9B9037C116387C1B921E664996DECB00E9887B4F896F2B579398C60884385490E216CFCC0B3A06286969B71E0C29B0387620A48B78E10454C981DC357E4808BCE46664ECE13C8D3B46E0388F99337B0D4819E4764A626C971BD681E34AB13C53A8AA8192F0B844C882125C628DCFA37D36F3BFE347888CBABC6083A705349A8CA9BCC845076226B166F04B5F78B4722A5F6FEB3D98049AEC342E7ED6535A907984EB5DDC0B30D8FCA510D74C29F57E18E10E9DA32631A5C47E993820E6951BAB3B0F07486B56C92A485F3E572B412527E4AA01204AC776B707D073B89F6956EBC85FD835705A01A552D4CC5F503413631A4B0663D296856C0B6079E422D1B2B1DE6C40A4CC03361374D72963F1A5459E951BDBFA3A37516E10B967EF94192206BF4755B15230668CB7A750E954BAE7BBAACA860AD30823C36A21ECB71728A452539E98267E891ABAD1E84AD4732E969039F9B32FF5E536840A9D686B5BDB137ADEF8A6BB3AC5A4A3207B3A29D419004CE47A8DD65DBEF2693656B81D1A2C9C7A1D46F74C8D5BADB435ABB01799B628746F01942B28A5A770BE30538EE2E32F78D869225C17A049BE1343B04E9345DBEA9B82167BF285B4DA19475774C6BE1CBB4FC35D46903003255144CA54115C8DAD1A6981198FDF64121AB4B676495B2DD441152A5774447DD6F80EDCA14DDFE7A031439AFEDC6B87C4BCA0A7F6FB58980678", + "m": "B6A0FB8D2AD262777059D27CC3491CBF434E5B78CC53B5761ADBDA2C10B97385" + }, + { + "tcId": 36, + "ek": "7CB96228E1CAF41794D3053FA33020981107D447532DE694E2E52EFE3405E84B752E16835A71382AE07D6F1CA973455580A344E847947B81745288C3EE3B77B5788352D85E121B4AF8822633D8C9F577B70F844ADF118FB2C72D33427270B02C79B380E8B39ABB8220CCD59A3566677CC9897A54BB302B6748B597DD784EE0C84DA1A7C0D3D874265341E696B60FE36258D593F2A2AE570814CA529E89FBAD1A0354166B9F75C618FDE22B00447C063ACA9D121697BC06DA67B9170BB924C3AD488A758012824FD09898354386AA023E9462287CC44864407DFB690FBB11786377394A91E43787025097E53469148790BDDC94E43B5B28DAC44E2510C7912D6A643BA1A63163B07F2682404CDB1894DB159166957BA2020C67AA623213C145C680D624527C896267809827912FF20121F69B39AB5E96689210A8A89096904AB47DCF7315DC0B4622A429E7F4819B5BAAD19C836DC4516481ACC6CA65A0B3BA3079B58C9CB5B8EB60C8D6C335A307C454B44307AB649B7D2AF212E63584EE59C5318B1E2A06356F30B9D7E4403760182A68238DBBCF56F516569223CA318EDBE3A32EAC45E46C466716CB14AA00C4826018A460D0969FD3368A3F681F5E52C7D23648051B847D30930AE09E0471C1B9A772CA42969228710E55681E155ED69C40EC0974A366635A5B24965115497234ED0997ED1765EA121E92FB5CB55A4FDB6CA3592A11020B544A176D23E799E1A827C8539DF44B8143C55FA8A1B78DF4773FDA1E54E152C1BA294A8188B25C50CBF501719825260107DC61BF77765A7068C7622B9F4788253860098D3218656A8415B1845B345CA23805096039E049885F29AB9647B79416BAB4B18E6996B0F0DB9875EA0052051C76DC81DFF8706869BF88064020604EFB32963E5177A0877F6BAB009876666B77669FE80E59B4566C085EFA9B711C4C2D0B91C10EC22D09783E5682882ED04ACD3B81E77C001772B6379BB8544504257BBE0E9A9636505259D443C3823149C49C84482993885B1F507F3CA9890484C8D75458286B07DDFA081061677D5B70737C37E4E2A3510660E857354D25BE81F5CF1B175E47045600E443EAA53F37326C608A63361692E8A39BB4B89D3C5968EBEA63E37B272EB542CDB0882B277E87C95DB8B3B9F28ABD3B32973510119E22A5C70580C8037688B4CB9BDA78DFDAAE9908B910862AC8D10023D46122F76963249E90460C42708336FA7A25077D235CC203121F341A7F738462C167A581F14772B00636DB3A3DC87E302559084A366C07799B7CBD1BF47C358891DF38779F0004296AB1D03940FA5AB95CD91560C35C1845BD749682AB30C8974A2AC432A4A6C78F41A1B8D4290FD35035AFC1442B83C734EC7ED837808EE77588B6A216BCAB4E4579F7E96DB9AC384CF7CF979750AEDC7E6BD6B819DB4876F3913205608A8A4BAA8CB87F454741E3225481B34983B084309FDF140250C140533C64F514BA95D614E0FC5B6D52A2A9B80B0AB2B869950FA2E2855A9AA263EA491E263D8D0C561D8194760587601B3195E84F14FC552FDAC64C46BDC2E27D9340987769812DAC0ECDE266312B7E138B437B95A1A2BB4ED6603A9998CA7B837F1C35332EC0D22F349EC272CA8939AEC888EA66C043C553133A6265216E42F4FF6559D0", + "m": "9532C8E20FE634395197F4CE87C69BCF6EA66F603E60597D797D56A24CD337C7" + }, + { + "tcId": 37, + "ek": "A0E7452390155A639BCCD600C514504EA3746AC587E0A0422B20342D702DA3906EC72415F2C14DCFE212A0895A1442C8972838B06882B7A93A15A4A1D0B82E56E7406860C9484A78D658AF02474FBD224A0FF29E7BEA45D3F520B5982C6D8AAB76298156B62FD46B0D953451F6E6A8875856F75C0F7A349AB04880546CB782041FACCC22EB371352A837A20B2E55990F00D19745BCB507508A334306BE3BB138AA912F5A0F15B9C1D010220578C456823C107301E43C52A4FA6B9210CB22F87D04E7C57ECC134A4871C636B1C61B4E81465898412E3949A07CB765BF123BD3B7CF130141F0601082DC3711087F50A65A485A520EC6337AABA72675AEFFF9AB72303ED98315FE67A11AA08FED9AC9843036DC9669F9F61731513C53D4B20C362B95AA038B5454DB8CA2BDCB530E6ACFC40C3C513C3D25BA7FE304374D972707600633A93A557B655D7A2F5BA3694369AD74CA658A33815F4A29F7BA8DEE35CE0A7907FDB426BC8B857D3088E4B04F14048D96D275E3359C2F2844EE51A3DF78C0DB223918365C384A4B590C3157A698384465AE16C7D1B70FC0D20F885036B78C93A437CD3E7B9CAE40BC00BB2AE119703219427D9C296EF7B165A5229484586A8375DAD4A6CBA937DA198BA13A26D4F4251F2B3B06574702FA93654A9091A80B364706090974A8E035C0B3C9723AADE279A40EDBCC233BA27A8143E170529510438F181551080BDC394B18DBCF0203B56E1A5A52B2109DCC13150B1511341327F811287A5029F51EE57A286C18B277827DC9FB432D178543D8B1F0757B0368367D4177662219C00721FAA78E0F037ADA381625D362B6DC9A7E5CA4362A787FF6B724741EC9C761D022A9D9287B37158FC9764AA69915ECF3C1C68990ADC08FD1E6705CD115D0C79A2602308B8C2DB5299857C1A7936A7F05F24567356F78570A94026F3AC778F0B2C1623946563B808B4A48FED23662E24131F37B1C77BC82FB4AF88ABBCF239D316519841B88DC6C751161155BEBC1AF66AEBA91B326B596F75374A3B7C6BAD9CEC1D796AB91A27473BDFCAA35EE66A96943BBFB9C5EB0454152789CDC703C6B872151C941CE5A3BDA52BEB4D42C5DA96BF58C31012796DB443076F8B10667B5AB358B5673C65A28AB29E4ACBBB02AEDB246C245CEFAA8877AA1028035BAC336147823CCA9574C23ABA0EFBCB2C1A70ABD0A5CC47497961388E6D31436767A087489EEF7344EDB4D20C919F6C3CAB1EA18D255C09EC2C3BE04821D81B528128EDDD904AE83743BA541A5BC71526092E490A26D0474E34411778939C621154EE31DE4C947FCE091ACBB5CC3A28403BA30DEB464CFE304138A1F01CA2FD4E88C9924646B67499A2A738AA656E82C0ACFFBA6A2FB0D880AA3CD677B865635929770C0655A03099761D49E37990059D9857FB77361994FB9FAA9770AC419E64D31E81B8B814FC10104D1144FF70B593B42104BB124459C9DAD80162CF0054D131ED906B5C17598A7313954ECA5BC221E6FA4910DDC2F855C73B8E13043601EA7F1C884642C37D4BE873143A5F64D956B6C96E978A468A61058750648B0FAC78347003BA570B2BBB4B8E1F742DE3C54FB145D37BB0DAB700F1DE5502908683119D1E7F8CBCF12460BC7337843162BD3222C35E269AD2E7D227C9AE0", + "m": "88A301C84D61B64CB98AAAD807464CDE49FE108C4206703CCD248026C1ECC02A" + }, + { + "tcId": 38, + "ek": "5F27432274618EA54DA2AB735FB37CD75B2ECB595B79A500F254A1C11250E0D46C6BCB4C49984056E60D19BACE63984F571C6C194A324C25C2F5064C2C0695333B3EC1501CF65A45F6E8904AC40F81C84E493095361555BA221A59DCB008796E0DE25C3F621ABB834D7BE2480AB9CCB2D51E4678B358503B64C3ACF169B1A278107AE45DA9A76C40332146114F63174E654622FF9B78F9C5A49FB440164622B7D51A684079399C085C117C29B93ADDD9A4AD85154D1C6382F1A241B2C161D5BB960757A3437A8227B9F95C6A2F589662680818C7342D8012FF0B9495D498C899358676B5A27653BD0B1FCC995EFD2A80E852187BAB6721EBBBF631868D7102B2580A6192CD862BC37D2970E5C1C2D7D217E13BC7182015B998A87CAC8921B4261188C729A34AA71A7D9CAC9376969406627AD781AFB659502EBA1BE8BB0B925592EEDA6A73295A8B8B8BA80B4C005A708C983A95229FEE14A4E572231E1326B4AB0B56940436AA750CB21DE5F6C2364042AFA25A3E124D85CC2979B67D315808A31386536293CF4A7A8AD8BBC47982BFC6AD2D32CC4ECB582D49884EB89F8E70B54CE72E32246EA6A6435081CA9591C27CE03729272125AC2417AC476D808AECB64EEBB9749BFA96842A532A8C30BC70820F842EE91486DE12A2F6549E0832A02F78C0D74862F357C0F04A9D58FB1B6A9535EA76CF352263359C4B8573B80C30959500538DB90F81D505E92CC33C6181E2824B7F45CEFC5BB37002BA46C77E31D36041D54C039BBEEC868CB2EC3970166DFEA7937BD63E8D4B48D3D5A192D70C03F337CFF12F21384B823303224AA4B216A3EC0907DEB69791E04C2C78B39875061DA67B0ED7C6683C7FE0C8906A8AA68FD6B394DA2DD37AA524310DDAF742B5FCB7070B3BAFB15DA53455AC416A21B8C093C6C575077919376AC2ACA19614B0262A610772C656B3A2FC43AC9566C1C7015A9A8CC2A518CE46A0B6BD403A440B76D97B2003AC9091A02F458A4DE5CC54FCDBA56A43031936A1338B13E35969B0674773888EAD8A00086A9F35D1A073E075777654B23707B7690A13C697B3B4BCB49701531BAE653AA5510B8676D0ADC5E712772392229594F63C85F2852C8C2735304449375C9B41031DE6CA164D07C9563C0CF04209F28CC82BB745A6F4678D0289BFA70182463477C9CE0C408910EB9EA40A5987848FB0918C20F567C5B071EACAC85D6AC229CA753229BFFD231ECE2924688C7E0415C5ED7B4E53F956B7BC36561133D2B62D158673FF75A74A71969DD41A88D71E54D13ECAA4B27CFCB19D699BB1BA0A056710279230E420708098654060266AF42AC41B98E0E40BE6A09C77A4A5FF9116E65026B89605F4E93DE5D064DA1B499F357EA26CA05DA0BF0C1A093C036E6D0C795BEB154CE80687692DAAC4708C714CAB458C5592C32DC14D8E8C1CA0928DDF5B9AE901A964ECB7DEF15FC35AA033E22051A8A7CAFCC867707BDFC288873312BACB5503F0833C96B00367818E0B05DC38656EF358F2E0514C161799DC828C61C31AC18531D487ED73372E234302121872161448F525F87361A2C98DEFFA29F2B8C974E1BA33C56ECCAAB31838BF77EB2C247BCADE567E06A058CE85BBAD355FB0487B4D57575F2A7BE8B7140ED8137FDA5A42DFABEFEB575F4A", + "m": "802D8FA5F03B3CFA45F8030C78FF8C03529225F9F976BC509910D56D795F10F8" + }, + { + "tcId": 39, + "ek": "729C4EB6F8C30A614F31680C5BB65E1D238BC1CA8A5FE73EDC45273244BA8BB2625565391CB31BBB46C256E78F0E14978FFC1BE4547F57D08F97D007F74901A7EB650CBA00CD6A562BD63F5E3983D30357ABE2C19802CC05231D30514861C94747D9053311A19E6A39A5CB6B10E75328C59F49E37B9531C478C7B6065A1B66430365309AF9A48DF4C07B1B463C205C1E3DA562A302389432C6E428ACD581272F68BF9080C493F6A73335B023D83F421890DF56528EF6CECD680BDB3568DD170F4F860118EC71D16C687AF47F2E3103948937C59B3E166A969726B3DC8BCC32317BE868627F026529A93E11738EE1B19FE4C7525AF52872D2AC4CE48075732E22F142E878BE088487E11BB3BCC52D9180ACBAA395A8E14E35101F775996A588646FD97F02A7BE76710E23159832238F527B51806AB920C5266FB89CC41A87F6D3760CCAAAAE019FD20713AA2302BFA78869C1985E791351F02578BA593F521F56F096B04329BC3B492F876786FB55CF696D15549C50DBAABC165BEBCC98CA7893649518E757A44AB54DCA8A4AF9ABB4853C47F9127EBA755D2B0C4BD8C27F5A7444918A1066686DAE7263625C21FF4174F663AE58065977E9BAE1002971B6325723433B636E662247D0CC33CA8C6BB8A35BB4FB6724189E31D3572A684C21028299F9C74D80346E0948BBFA2F7A94B298B2C9963B56018C07F6CB87CBB663B3523C9A30332A423E3B416F29C98098D47D052C81708C31E1962A17A1A116ACB203701F58A52A08C8C73ED7C307A4AC42E20C80E9002CDC8D82138CCAC300D76AB98A07CC1B4359F2A5CB787919311533E432AE9D5BA618D45377EB18BDFC067951B8EA5745801B05BAD1AA52A4284A977E845419069AB266F29E35168AF3C545C8F837B97B475989812F4852FCC957CEAB144CB949ED5250516513D0C816FF1B170DBB7DB0FA1CEA52AAEFFA6E74853AEC9AB2066C760699093FBB731AD16AA3B1632E1910B4931B6EC4711D2A0BD9509B6555BB6117CA6D098601B9C00A87615CCA6BC55228543802040826028C322CC4C81BB75A4EB366EDE097E1C122A957034A75C104084801003204B97F6CD648FD55A7ECF72CEE587EF7A4B4057B581362A452964DE5B0574B692452C4C18804B4B27924455656633024A3D87E8835BFEA673521FB64A01867A9D97FB2362633A636DF6496CBE65CAF2A77C6A7C8DAFC40D42A77B8763C4915C36D439559155ACED0B1A215327C0680DE0A76C8AA85539886B8CA1053E59DF1FC2A23301000150B71FB969AF008252787B9C23BE2B86CD6A5A707BC1D3589133FF7A2686A91B015B94B568A97C07E53C7B93E9B81E8F55357DBAF64704D8B3C49FD831189000DFB9C40B23650FCD897970341AA90050C27201FD32866A9614C5441923861BF0BC653A27799F83575A8A3863A0518542CC73C1364D794A455C3D14927F6E0B8CF131A22DC8530660B06B99AB441AF6E0A4FFAD4B1034C6FD02B223A434EC7924AB714874C58CE624403032768FB365E9EE060D4E09B56F61159956FF25009D0403ED6915F6B325623434466CCC223465316CC02092C752CA6AB703616217287A79B68E0894A44005AB4F138D21BBF4A24A091D7118AEEB842AB5DE73EFFD722DC3961CA1B078D189C14D2AFD79F0A03B8EA", + "m": "C658543131679A2D5634613DD2730985EFEA13D455984D1E2B9635A9ED86FA4A" + }, + { + "tcId": 40, + "ek": "18E9CF4AAB838EE7617A14424E3735A65292D3D693D6305D44416968D615D0C4818373678433BD4FE23137098393B9591C1A80BB0C7FE3C4921E0AA6A2D892412AA2B19A8E46340E6A743AD199AEE8681B4C370A304191CCC6A0F7778D2A00C8E0E20ED03795354221DF2C316DCC29892AA43FEA6E8D3B0F8CF431DA6720E9F5BCD95A6F1F951A4CAB9F07EC5096E1524A4822AAB2BC11EA7592BC9FBBE6BBF7D488D6B6AE43B038AC72B94F357A8DF94E0233C6929946B317B2A97CA2C9879B728A70CA15770CE52CCE9B08823A77EB36674A446B7AF39305BC18301097DE00C8CCC64B9CEAA3C5702409C44C774449A9E4126C1C8C8DB66383482C508845069A264D1263FC199F55F1C3D71928994201797A9C54014EE39A3AD60255BAE846E16879B5C2B31F304AA710C892874E165506A2CC38BC0519FC03B3C10009587CA9271337C39938F1834804993CCC136055D390AE9949C62299171CB2735934D89B3F45B81CC9CC4CAA66551183A09FB58356F84EA25A1D7D981138E5B38949703CAA4D914CCA9FD1CE435651E4224E600B8981E68B54FB91C341935CB015C997CE5EB53D24F44E34C339BA72A523323296761B75EC4D02413324336009C759BD6B3E737B681A409549E847ED667AAB581B434B8DC95995FA1483674BBD0E55CE93099F6509BBE80163CED2AE4BF7A67C380C93A53194E22557C78EE468CA85144FC5B38A5AC80E2FC444367105BD0647ECA56C95729FF1C8C9FF3A32C1E50945949B9FF671C6950AB6526E4E2396FF5A915805A663B92E2DB2638E655237990E8E370007DAB114874D8D899EBCE2AAEA8905E9557BECE15B3BEC136BF911E4C87C8844CB55A55375FA4ECC4490EF614CAF83409E861E01722025B34095141ECCA6600B1B35F14CBE43152B77498E053A49E1F81518EC23EC126C87B5CC7B2440368418E2C83BC7971DE2BC24A8F3C772BB7DF94B25E3556E26218CDB443203A38FECE86DB7D51EEDB00951948D805702338A256D396F42EB9A29D9A672E78E60E63746D79627FA308716A5681835686BB9946C8F7F49925D638C76A71DE4C1236FEC4216C34AEF160DD474C6D21B2084A6B014064083058E6EAB34A0D36F03FBA97895B7402187A4361ED0C460D67AA4B39B3F17D815D8936440899BE30920C8C925FC9B93604B58C094424025349164810399BBC16B5827E79BDE6C7E3F1ABE17234BCDAB251EC04230B081E74B6475E69406563AFFEC919D40285E94BF5ABAA5BD0A9082C383523882D036456BF544593174B180A6519B242E69220C352BDB675F11A1C35F31499061C3DD27390D8AA97EF069C31105A30B33A9DB663701928B112975AA07B21025D83028AE0CBFBFDA262FA7805870A70CD5A340C7711E1A345BD61F7EB16332DA4182A044D04751FE11BD2D2AAC7F64596D80837DE6458B8C8879318A3450B178989850D4C464398D78B222D1A61C1445AD5D02A41C152D758A7295B92371E573FE26CF11902EB777011CF4B89BE8073FE77CBDB3558921C904C528B4660560727197663D25AA50647786705322DDA2BC1E5A567072BF23BC14C7721BF62A89FF6661ADC1CC269CB2A10A2329878792E0C7327B6A79F567DD873E89D0E048C6F3B80C69345C88D211137B3311F0C10FE79D03AF4F4E05C9", + "m": "19D0A724BF0FA6EE8ADC0C64F7A1665D969F927DBD1656344556B8EAA73E7ECC" + }, + { + "tcId": 41, + "ek": "32A529AC1509BA833C6E557B6713864556921576166E489CDC9557467C97BC51A785B2ADEBBBA885074D91A582E0021D83FBBB27B82CB49474F0C4731418345103467CFC2647638BBC91508E800437FC4199925B4939C1DF6483240CCC2269373C29ADDBC67015101F4507BD2D37557628B6CA702D261C407E6405F5792784D05CF482A1FD706EB603688E780B5BC4BC4BF51976366F53715CAD8424D7C9246A5BB69403637BA29B745B4E85017F0DECC11D095ADE802D6B89C53C8C129070BC274571D6D4763173269A034872233B97853EDF29A6D4099E97964B93A82D6169761566390448744C231F5C596C19F1BCAA903ADCF1A60F43162473A29062BC91440150115718D42AC1CB0D7EF5411EC3741E5327B9C55A2892981926A4A1A203F06371755312A1358D93EA5C275AA161DC27BD5246A8E43781CA5ECF355D2B97AE6ED98E31BA19C6AAB8EE70630A019CDA924B5D539BE0B3B163E8C66292306E6779A1CC2C28FCB3772550CF83A2E18C0A274616DD852A35B682D2DB563D730CCFABC9A5662087194E68874A6843000653005E330CB69864D7F7A4340C663A4566A67B7C52AA3886544C96D543B7B683CECC483C2076BA61C186945C7E15B443506A41D23AFCF1699AB121DA3C42109C6B6D72B89100C59FAC2955B787939A70F6B27E8957BAF236A120B24809AA4B7C74AA26383153C87C05E2CA7C9B70A4254CB081B7D5F4A03BB5CCC2B42415FA4E2BFC702BC420B8BBB917BBC1FBB899354C42D2B28DF9F834AC45A4606C6F2AE5B313C2821563721DC1158C6C23C7BA2DE3A26112A90213E27A9D32447E90577B693F8B1A64290A8532806F2E1B0141127B76D319D48C3A2AAC136A502FEAB97892C898D2210AAD1337DCF7056227C21CB97907BA0A46929BC2456E41705A50B7A10912807CC9B2E0414D101A7D58DB68D7C5B22E1748361789199A25490C4BF4EA32053BC5A949246FC2B8AAA5BF0B4500744A875F08543018250397A676333FBE12CB7AE382FFB63F9FB07E277298F14745A3CA6E33F62BA0945BAF935C3806473D2046A768C2D8174BE762BC8E9A63B0079168CC1F9AE76E9700CE27EA8879456106C17D6C7116F2476DBE6624AA735E2F048D6EDA4643C23AF7D7457845BF6A933E2D026400C554886002E6213E27710034451FD27CAD979045301C55D67255616B9F6A5588F20C6FBD07AE73C8ADB8D7A9F3931BA73732E5354D162333B5E639C938C302C6ABC07A345D52A3DF1A8C5322531069784272A4A575749A628CC6C519CC8B7DD01414B04A5C35D4C930F9B5A7CB680C306D9554B1D95C6599734DDB1245EDB3A2EE7754EFB497A86866A1C147DE016574A51E9AE904D31307AF145024F14E773670DB379A3F06B72BBA25CA387289E93B20EAA0A6D222B7F92DD1D3B042B4CA27A2626F148474B2174B81A2C7546F7BF2B34A5858A6D5987D00CE5C0431439A562ADB3195B12B495A50B391AAEC7BB8F8512CE7859A3DD38574D11F08ABC722FA6747B67A81A74168D781B077104084794EE596C6E15F5AFB352B3C9C3ED06FB951375B8141CDAC6FAA2361CC6CBE7E82874302BB1AF996E17210B09C98EBA849B2BA9D87145219A8A073E7387D40C6577252A41FDEE70DDD5F7E3B4BA4DD20F1CD7CFA66CEC72F35E5", + "m": "275EA1B2E810DBDF0453808D537CCEB9DACABE25063007BAD14F69548F51F58E" + }, + { + "tcId": 42, + "ek": "4D790B63B271BE001C2F7ABB8E173057046AD23A9BE0DA184286CFF9E45087B16655D66DBE31376A529E337C6EBEB08B58280BEA9030A4E61C728C601CC42AEC802F194B6AA1B77E3EB86220F611A6044AFFF958CFB05527445F6A198154A206E93A69DD4B70BCD4C50F4A21754B68472C45B37915E3C011D4393752E2A26F605009A43C2CB9B72DB6BCA1468943F6049C007F8221B6E0B98D51B104A5218D433860CCD112BA3CBE09F7A26599AC3E98685E08684374450BD339C3D579D7265748A0A31CE25DF2B50B392CA341F9B8058055AB7AA616710695DB2D7E7436D14515EAC2C61E0526124810FC5444C064665FA88FD184BABDD375EFEB37C8E6B04B8546FCB82AAEC9B12C60A0A699893EBB2F309CC8101044D750CE88A5AA54BB08B4F76746CA120A9C1DCB35B50721CBFE1320C096A586D954A71793C579A5EEB7B3E3F734D0450C2C81AA30D051C70A67DA979A94341427E713318A60F923428016BA25238D5519B6336080C03B915C85AAA8D23A2D6001F0B30FC2584BB9B3C06E88301EEAA90422180E091CF8186BE855B4E81421F5B076CF202424E4BAEEFA6DED220D1C525251B6BC681AC73EBA07E1340129C4B9318A0B4FE414550681C4B003AD1CB4C60C635F342E8F342F2C332061AB3F0089C34E529B70198BBFF72D456151CB527040A38A24587CDDC32F4A55C48D013CCDBACA21179F0C0A4400F562C45AAA0A811B321A4540BC2103E8287AA9625A25433BD0641B563A29D95095A09ECFA09577E50F09289564D05907F18F839B2B8B694D41BC7DB00A9488A0A4C6D65C5DA753E2E940B9D70E66296BAF9BBE34AC7F6B077A5A9BBB4E6ABF1AABB192F098E0F1696458C20C610F7F5097DE2CBDE3E72D78122AA9A48339F4774286422A17476C481ED34C2DF0644F9112085E0B036D23B9544C3AC675BE3BE4AA7E2460B6FC1C80389C67212982126B9237A351B340A87693AE0C35E9011DAAC9CC4ACA96F4A70EA6494E49C654A3AAC83025C40B52B9902CB4765A89E2DCC7129774D6604EBEAB8AC4611CD56A3E62C8497E9B3FF5D33ACF50B0595638CEAB5A00D131298A18A297A6BD1619634B7590E54F72AC602192715AC2680F30A00E8408B21B5A0122CFDB7BB387128F08A312FEA9C6B6BCAE3159859B5170F459B442C3AFEB451927F0ABF14A2F6B4BA36A3B6E584B0C8C4C5E7165897D8C017CE41FAD61740863839B1B9EB2AB9C549224CDE46763A4969A3B2B98B95A901180851889DBE1AA1E88649A777646F44B1B901B49078A5DB41489D0A9AC263257698C035C24CCCA03E816A4CA3953A518ADFED302C7B3BB621493BE468ED7F192EEFBAE71268F82F48320294550269B6F1C2DC7568ED8A91A978BA46FD32EF2618A15BB6DBEB4074568A834653304D007E4E67F9D01208866045B3422B6548DB4B8309974C1419359864735F85107E1913759DC5C5F72950C7B2998874A5DE75ECABCA9EA27AD78566BB7CB871DAC162EC05B0C944215066917363C58E7197AF7BA89125CD252B41F551E79348A39B56560E2AA6A856D008264AF8250811051203CB530F4BB1A1A87056263608B7274D890ED2A134B0BB52B572C66BC3D261901801C2A2973DE5363CCC7774FC21BE0C6647D594781671ED437DCD5A81755A9A0FFF052", + "m": "C9FA64CD0FC030C6E8CEA918895A2EB2DE300635D859B8468CA64698441F29B1" + }, + { + "tcId": 43, + "ek": "5749A64A6B17C7C078672264DBDC27DAA0C60C8A0B8F6B5F16F3BD7D3A5D07F565BDE7281EE76E6EF76F04250E751741BA907FD97C22200B211A40693D700C92313EED0A006CC8C4A1F4770538A9A2668D6BC99A191BC041C66DD2996DE3DB9B02489EDF061FE3D1A8894C6295BB2468DAA5CA9A760EB511474713058843D01995BF62A4C7ABB931133EFFE980C4476118B7442C5366A104341CD31091E0CC6D40C5CC8C1A276C0DD48BACBC549811652A3ADCCDED7B81C5639497E80DA7017E8F94B349AB9C6B5B9033594FFB2C3992864E8BF983F0567852CB770DF206296A8F1C4C561A29AB70827A77D72446021D39D9BCAC574E94DB89A2B9B8D23AC14449535D8C3DE4E26E3FECC694E545214AC59D4665B283AEFCC029034633A7FA93BF738F7333A561F97CAB828F870CC9D0AB94A0C7C935BA55B8457DE92B2D1858092CA20E17D60B8E52052E30B6CBD472448226383226D817313ADB3C594990996140E5D7226E060EAA514A812991E3295B0949B3AFC2728B0CAB5871B59BB038BEDCC0D458A6C3639B7D918050A27FDF686E8019AA99F666331BA45371CCE838793FE0789A7CCA2149C110A78558A1C808717A52C5081D5141FF463B0A22256734A0EFE83774054607E6CF23884CAA0520957185A9399C4C8AC9ABC83A75E93080512E34C7B26C2A8761B59AB22AC89AE040CE679E9F455F0E894D9EF7A406074F179304F1B24F7C364490F9B458D76F81E90667D847803197E6BBCBC62B6B7E610C49113241837614295F65E90C95795828BA66579CBBEE11486B7279C873CEF3CA3CB7573E46368AA91372BB5991057B92A5A09AEAF51EF35785E2D785A9C8B952E99924D198D260841AA60563CBACABDB65A7C9636504BEEEE7270F847669CA4DBB9860C782BDF60B175FD85322F20032C2183EA81E0F853B63095DF2F42079884999769DAB0CC3805BAF63F4C1A5299747F412743502AAAC88196CBCA2506BB23B73A1788B0182054B4A40238891043C24C05949C4A83AC7F88745B37B2348A0EBA57C7915517E9A96759AC002240AD0747EA7E09E0D5984AE18C74EE163E73C280CD33B7AD1263B720DB71C3CBD0A0DA41ABE8829345ED7B73D2B953640CAF63A17B82331A17878F6286E564B9457E22F1643A86AF6C5EF6B69BFF5936440604D4327AC42753E51AC15860741693EC389778ADA74E92C0A1A74B4B20A10DF288F6E10A783908D5BC4A524C7C4A0B6B71F0151FCF4994F610B8C5AA530ABA7B92A90C8D62A68D6585B248C570322DEB9653301288D7A4A6308B9E9C104A9B2677AAAB77351A19F3C0EF7232305589A2B7B559CF19AB5C4A448D01F8412B184A177688BBBCAC6BB5661528FE67B5EA65665F0BD5D355352D19E5842A6CF33BB280753D469802626839C3A47FBCB85614B917F4023C417C75A6889BF4B5946E239B048CD10B429FEAC70A1C27A3A84259FB0BE833C3BDCF64F669967E901CB232258E3F3A3029AB448F445B3E186705178CF391A5128B68AE37C8F236928C75825D88C548B6A2648C872094207797F2BF75A2DC159A35694CDA7A1EED5AB27C483092C498BB59EB1A25EFCB807EB5B71FC602A2004032D453A49C93F66BB6B9C8E2166B3A16AA018454B67EA44360D9712F6F9F41D3E72DA52B0CDD86C4765", + "m": "FD5E704570D35278D53EF9FC3BAA34D3DFEA092C1709BDFC363B1905DE4EA840" + }, + { + "tcId": 44, + "ek": "0CC3128C7805F6FA61204AA9D0F643084910CBB1995C423029449983228628E235B6B0C476771823B66FBD751EE2C5B2BE5B6800B51980B91F9232991D1852A872CFD873CF8C24B6E1E795CE2326560C4CD047B479A7A7C6F921197B4BD66296FEE3CDBF79262AFC2C3399B60EE11B0AAB0C80971A4AEB524C91CEA533BC6428C607A25ECF3AB3A9D36C13552BF922169B52AC0B59897FD15042683BB9FBB525961105AAAA349116EAE394D2B48A74A9437D5A572CE333809947F84CABE426906894C9DEDCCEAA36B77897CCD5C5C097E5B225ABADC4439E8C316595263CB5B43C52B58C44F851FA4501E59B2D092114F4A996845192F646463E6763A8266C16C428CECCCFF3B86905CC3498B59683993673E63C33730C7E8724FC75A9D65ACC97868723201DAA844E2ED21934E2390260894AAB8019062EF8DB63C0D91C69C56F3AEA80D163792007BB81271E7F83977F875CBC37005ACACC034970685831391B2C9D5ABCB996399499596B6004EAFB2D8581101F541B08387F30C53E2C7BC41C2538A6813267078F04620F5A9573DFF0CA85CB41F113B0426A863C4214B1F2861F8236FCEB9A463861D6F0367EA70ABE16BE836AA5DF34B128D7A90E64684B4091232B462767AFFA2A989B900F366B2AB768AE04911FBF796DAAD66B1BEC883D245178BB42A251763AE58811D75604B071C7AA0925E81350B93C4B048A0ED36766EB986EDB5CB4E5AE0115832D9C8E39F2410494CBDDC2A89BC6AB4E9B48CC5455267C2C86A123E542C54AC1185ED288A207397311C4A6E7A7F5C3B345304CCF908A1D38538909B9BA39B2AE0B4A9CE6121F5A59CFB832C73C76D46A9103664BF6568A1159C14A595E1A641743F6669E0CBB374B7D59FA0B0D41997520575BA85195A4C9D25409C338230777ABF259A4FCF94ACBC148F6C361B89C9C6DEB63AC520E1C7168EE9B4508C63859911C15DC6B3DC09A7FB4620248A2C08443286B1C630A90EA39897428037652406C730C1ED448E57739DC99A1A0A70F6972247D472CAD0563241AB62898A41DAC2252B49E117A1D2CD5BAD9171C337A137D5375A6D73913F68E7F469504424FB6877B53BA0044D204C674CCD0E3588562056A80279A90BCFFE7AD12629ACCC9A3B74A4E4B97425FD46D76B0ADE5DCA5C3A07A180B2E3CDB0279F419DFACA291D4C0A28A7346AC091683924083C05AA66B20CB16E1F88BC44B976D134E5D870AAE59A4F5C9C4FC9A1C5FB38B0FC8AD85B48F5F39C9D289381CC4438B6738FEB99B8FF7154566245BF84929B276E0F1172C6A39EBD36FB82C64D784109B6B3DE8D916F1471235141DA2231FF2224366D87719E506A714343AD9BA401430199617DA35C96EB09639D486DFB3CA458CAA56E551076986CC34685FB7C04E4756F5D87978586B656C7F329CCFA1D2BF2A3A7C3CA5C56D662CBA570124E409352B64D89B910692B565C8C109CA13E8B235DD2A996CE04BB2C0C6817CAE7AC9C9118A5653572CB10C334E06553B2107E5727C1E78356BF841D52B23EEF947DE60B47E814F58F6A140A601B723342FDA1321C943E8FB34D97746EA755A0128567C30C4E03308C04B298EE56A735C8E74F6B56B80055DA3095154F976346F9B3C6BD3386823A2218AE80108DB53AE2A353ED9BE216900D95E", + "m": "6DC3DFAE715682F3BC56365CE0ACDF6C7D5A9BABC4B196BEA280DE4F29BC1F4E" + }, + { + "tcId": 45, + "ek": "58737F23B688D0C6A7BDB6BD1D58AEA1C19A5E9774C450517AFC7E6CC392D5046341A46E00C218F7549615599B85DB99720926FCA0423AD351F888206887ABC5A645CF5B1E0C110405C31BFDF0312B6A8D2946CDACF64F987323844C1236086F3D583C07CC4DC88876B9F0A65C73471433B6BDA2874FC0086F22C0D45BC41B94541D1192A8BB7D02E102E1D6B71666008851287821C5462A60085528DC2C9EAE6CA59A6C9253725C5049C1C7B207DE8701C68BCECFFCB7E8B4A1245837E67BA487ABC7857C0AB6456E448B811D6345D950A1D6E6B4F353BCC12C01F1F7AAF0A4B51901930741305D50AAFF931820F530B3230B257BB723B78F79C45E95172FB8F634DDCB3745035277B361785220C1A64A360B989C63B007A73DC79B85193192E0007472011BAE3B2C0832CA88E69086E69C448383DD917E479470A3DC0F6ED6A1BF111007A40F368696088A3B6D457AF638A0A8397E158BAB674A037DEB5968738BD85A1E0D76566CA374BD6116D611996C03B90CA62E1CE03EC5B650C8D799A9B678DC6C970DB2BCEC85BC73136AE10B20AF5026004DB845C93C979BA6701CAB4B0C99C8C60E64F4AD8360A667986EBAA3AC65E256419799BA1A79E2481393F31C670950A092BDC02ACE4093438956856965BD8EAC072958606ADAAE249C9166B99B27624EE161B74DF9422B877505698B27377DBFB11FA2572E69704E61B788DE7BBC862B1D50B119061523C3281A4B0B0A8886CC89763A86EB0533118B6F9083DBB8A56F33880B3C421E60541CB27A0A89177868C765409AE59592A0B95E1F84BCB8E663DF256066FCC041C8632A6649D0E39B1242866A159A9E715060E7A4118509F2E7B97DA5343681BB89686726210CF74524DB681A6E3CBECFB230C32A60740038DC45B807210D89FA671708D09A2B21F9CCC42B600050390EBFA312A3387F74E03B489646D06018E1182DD372C646F0930D412D4DF446E3E21406390A3E280170298BD9FC17B62B003FB4286F16464D09C115A786F09013F772BD0E604FE83A5910771405EB91CCF797BDECCCF089C1CB8CB438820A4E29A9D76B3D110812FF9726A1E336FE703AA70B6179B190E75B7D8799B07C7877A1F937E27B1B10FBBFAF29C0CB4439FCF4CF03071CBCD32ACC2408C889469E3A3292439F8B2470ACBCA714B9B42F6324AB1C2CCFE16EC52C6D57175BE1A09786D62FE52A5072B65EF753632A982DE3B9AAFE060ADDC955721870DE80ADB0001F5D2442E871A39EF62C14196F290517FFA136DB211AEFEA360DB9C5199654AC7590B7580FBD243C84624F04A4666E64CCD13BB9D1B344C16460D8500BF9F04BFD978E54C1B01B0851B8F941F4AC574E8832C7F2917A237C6EA5C1FE1AC46A01C15539109CA204CCC43A63869A6B8A6AE99307E5FB8AE2CB9CC7145F2AD6485B0939D9A7AACBCB049963BA6F9153C8B833DBF4723D8AAABD304E7B69AC505B4BD6AC6C67D9CE031A18C58C1D1415C1D264308AB481D2D992B6854044121C023A160FF12B3289A1A62CB37C04C45B92472157C0FDAA0C05C62847073A874CCF908CB99A2433B4A90BE693BE570881465A9A45CB9FEC4789A603C6F4351BECBCC2C3AB5643A53B4AC9C4695E860F481672EE1E581625DDA87749EAE423F89539241A4CB1BEE677", + "m": "F921AE54E0122CEDA043CB3796990F6343A763D19209624386A8F43CD4D57D1D" + }, + { + "tcId": 46, + "ek": "699A68191B4165F92470E07B4D078FBDB468AD0645B87834878B987FA1C0F7FB9AC1465B0224965D45BA36A41285B20D5B746D79298AB329879E864804160882DBA2218BCE58119140BA4803D209D976A60635C498EA3E4E66B4C7C6BBF7880EB8258E8DD6255DCB1481016452E880EF4C57E174C605917228853636634FD46680B8D8922205508600BEC5158632D416C3613082638BE205114B11002A21402FA21E1050AF78B959899540BCF168ADC38EE58423E269C64F5A921DE80E1A444F7DD9AA02D8B7DB89AE8C3B228A71637E9548A29390D6F42827E2C11749615D73B1CECB5AE5B074AE387E33255033BC20F8E7185B2878E1FC79E840CCAD7A7E991529DE389970C030CA4A7C89DA0D16B42D6A28404ADC259D4C60D7512F0479ABEF1806F2330DAB63C955590754930E65733C78B473C356AAADB09D4B94AF7315BCAAF42FD3916AFAD95DAD87732804503FDA6CC6A2347B22008D60A8632697B1F79B19F7C6909018591A2FA4649EC9D69A388631FB43ACAC97BC1CE278BEA88AB2EC97423A7CA2A2683E0722FF254979783F4EDBB1B08467DC1A4A04B043C9805CF7196C2D153D9CFB5E1FE406F55BC46350B162BC9ADC8888514A143FA932BE0C1D692B40B0B52702E6C6DF7A8BEA332546B34004593E56736340542B25DB4A0A62C52F3481690AB5929A6A75D20B64583CB2048FB0BC5D05FA33A094030EC53F964145782A05F10688B1FC37B092A21BFCBE5683B82F55CA1E5B8091467AE7D78EBCE4CADEDB1773BB01C4AC1AFCFA39B873742CE92514965B072A1DBC892E48E6855EB89D75250C34C09399C17E5688C014461BABA2830F0B783C480C7BF265F496C8D3105D357627D5C48BDA6680E291469C88552F467292EAAEDE8599868434E1F42257C4C192832D1FAA48AC84B5C10276499956BE1B3B5723685B8429426141B44B45AA180F0755CCA44C36AB8C6F184373B1EC3CE164AD13B0100E684D4242BD75E81BE6D7277A9BCE52CB7B7765965EBC6F0D773961930CBFB16843917DCF545D9F165295D706E322A83F783013B9A72F804570C19F4F250B6AD57C66E6B1DB9B1D8FC01633D83877E2C93BABC704624FF526BEC5939796971ED1D807556C645FD4382DCCA19128BCAC18053F10A1E9054FE36C9FD5B90344741DB74478DE23C74259B9A74A2AA10C787F3786C7E7AE11675D60B848FC4385D29CC5400732FD0A88DA498FADA336A847729D54393F0A6B9BC77964D2AFDB0519BB629D91B3332D80C5C24B471738B174B9C45AAC57E7973C3217CF2EE2687536CE00001937D49E4CA95A37A11F8B53745BB7173031B1E7F68E6E3B5D1C82498637B41BB59296C1BE61875C7858C613826CB27562DA12779729C32F72625A451D5AD4C2DA44693C82A5C5D46D03FA03CE33747A3A57DF18AA78EA9C9BC1CA82265BB603976E16B938B14367465F75DC9BDFF767E1CC9180928471361E52237325386E6229CCFDA2556FA4351C289D8E51C23CF1BAB7953324564665709EF08B750FD105D8968408372F5C2A480D27A2414457544BB16E0C4DF09C1E395CA637B2436F936AD47145260671197809599A2F86B7206699B88C978922F65671A15E47B02C73CA2CDDCDA6A503CEA0BBDC46DAB5FE68DEA4DF37BB31062C5C6A00EFF57E66", + "m": "A965CD4B05432E20ECA0C3E848BDFC660BBA4DEAA1995468928C5DCF6237D893" + }, + { + "tcId": 47, + "ek": "AB8C611322B8C85C78AC49754736648A3C2FB71C87A0B57931C3236E6415F4316E7D22CCF3FCB063A0496EDBB23B64B004A41300AC1C26733DFA86878D4677ACD3060C515EC2B7A7372802E3F898F2881238EC36CB64151B550A56916525F76F0B3B588BA48DB391ACFE5967FFD0AD08E016A428732F60A1FC13083F0875BBC87E8F8332AC8784C5602E10E4240C3482E4E10CD4C21B5E64167870908F510FD5A828A8CB97C0150351D124C42A11B800075D786C2D922CDAA23422C692030B4BF58A073DD35637F267B6F829E6EC4427D5ACE569553A9718DD93AA47F3CAA4FAA2F130CCC2D6289CC904113B5430178B641561BE46632B97CC2F407E17D72DBAD40AD647CB043C60371241DE8C57B04B541785CF00FB533179AA17A6AF1EFACC5F55634663BC31FBBAFE8C871BA23A6759BDEACC947E20786232470708B6CB1BCF02E7CEFB8C9B2541554DC18E3D26447586C70DD4CB19166E13486FF11C37EE5A779D0C95F4BC38C36C237B138224E57B68B1908787925ABAC8F8A210E80542BF775B6BF66836FB01F4C60041E9C562282AE6C49881087C178568FC04133462A98F303E61E59E16D0A798912F9C3616D2F8918A05BED9CA0AD37556FE23493FE7A4B3EC716CB6CB6F88AD58D43E77ACA94A6C70AD87CC62F360CDD5A439F5B2D5360BFE8100D5089CED324D7BACA36CF57803C26888E3666B526B45559C4FB7618022663B7A07F25A4E67A8C24F963ABF669B84E33F42A395230845BC39B14A7874FBC1428D450E2E560989D97F1ABA3E88C204DB2732B18CA9FB2216E0F1262E03CA231C19CDC400DE902B0CC72ABCB554231AA361E6ABCA5923C1D10D1DD3004756A05711504A5BAE2C138E4FDA43A2FC1714EA1C87DA4DAC0A56492B929681AA78CB0DB01034C73016B60114C0D48151E32C2692AD3258840F0159F7C83055623347568CCDF384974403364A034932ACB797B20C1914F24ABDD0CCC3D34155E422BDC74772B71A5E917A79BF216C710B596FBB88EC3A1D32F5B5913035CC940644378AA7A5102A9825DDD1ABD578714AE463E6B0B6B3609EF070A558088B1A8935B8D24D91D971CA50657C558C6EB28B215BAF3647C7C7995EBDD427B9C3C9E5716AEB8C6455A10A0398CB045972E7D10A2B69B60D84150B4776C756220D70B0AC207B84737F44FC1FA97086662C44E1EB80132C521DE2CC42C722F07701AB89CC25C530EC477291E44FC9CCB75D027840229A9C9718ECF97BA040B6AF5C27F02C863D163A25B71C3544608A785B22B21E56092562C67B275C8826031FDF434B37983874993836BA795855B713B5C4FA06CF543B70FD2A2D0E942E72A34776DABDD4E7C3828C21E09CCEF52373F57B9416D41A987CA11FB6715FD45C2FE9AB416C3900A10FDE3A12DAF6BB3A399A9463BC94459141B88E282485220ABE52B851588B7FB11A9CF623106DB9C1F177656C293F85F959F67988C5568001872BFF5499B186AE10100DAD9A5F48A71186673A41D70EF2B247F678C732727BD2F0B85CA363A6DA3137173F0DD93102E3C06163054FD26E8142135F92656082745FCC58A6802DFC3BB13606D0C466ADAAF653F2199EF368A9D2A7A746089DF2982949030907D27202FEE9E880CC75512028F81DEAD71A2E1DA95777828D6E7C2E14", + "m": "E47018BC07C98EBB7154D8E66B1A1BBAFFD8E1C3E0618DE8487060B899E82650" + }, + { + "tcId": 48, + "ek": "45C4C23771BE5E053D9D59350D86AF1940948A8CC583A61099668EB77556D142A61AD23266497C6D964727ECA50B3B4321F64E73BC8AB09678E193A75670C19C1136D3A48F145325629C8ECE8B1D9AE08749F57E093AA0EDCC584DE103F6B38A6DF733AC9A4FDED75388A9A2B4A22F8B215286430463968A1FD31792DA683897211F47457DB91DA650826E7506C02CC8AB10044FEC31B2B52D22A705CFD40E308B2643A427F08033A0350DE50065B5C395DC18082A94CEDA7169F9957D32F86E7840962E22BF36724C3943C3FEF92365D18AB9957FF46803D5180FDD73B19D7A188CB306F81B7087227582289E6DF2C47A4A5DC800AD0FAB3BA22B5DF4A4CAB093210699534889B478F97FB9988E395B8A0306AA880A2A20412A39A3A25F10C5FD973368527BCA27176B41AA739CBAE58A9D08501328972A665A176078097B30394EE125B0AC1E9C6505C4874E7AA41671E642EBD568C0943F00BC25D766BC000C214FCB5F596832C3528F1E004926120807C54E7325327F820AA8E724D6F07ABA21124CFB3CFA8A7BA7AA2A171036C8E156EEF5C0D2820F18C7C97D3B7E68480763E987F9B31904C8C03FD20C412C51B5A7BDB0B3CE84192F0DFC40E57CBAC3853ADC015F4D3B3E6AB110E53A6BADE96241D08014115D12D136228351518B9ED0CA83CB740C5BD145BE0916B07872E09617E4D221CBD8B85180B6666BB552603B22A074BAF5C93C7393D8014A36A757B7D60FB5C6128D537699AC8EE4F875EA0972DC5BB46ED39F5D351837BC910026182E9150EAFA7F00418D6F4A9A4EA5222A986694798C040ABE8A893028103B2B37C028DC618E3005C12BABE6B39256A30F807C85C38C280765A7A1BB1D110137AF1B18C3166A9DBA2D4EA18FC974CD51D21774BA5142BA1DBBF97D1D842C96DC8775E34003E3BC89350D2EAC93DC2559422A9C88944702170AECD7CA6E90A413444F09313303147970F53822B35C17E8BEDA361730C52013EC2D6E47A59D7841EB458244A27903414AC10997B27076A6CBC505A27D4543802F931161FA22A13C1D1FF362A2929A952B5C0C16682EB6CBAA3B2A0CD6316207A9DFBA957ECA4A5B9CAFD4CBB1D6EB88BB9A8A7454432D866EEC0A822980C2CC383B61D7940E819C42D663FEAB4847C09663424D3E290C28A7934E0CB6719538F4A915FE48245FCA46F747639D17691EEBC41CEB758EC24156E1AE93509E0F95940BC025BEF34885343400EC2604EC16657198CE428117881A37C816BD38405D5A34ECF2CB1E5C7A83002A2263606BA956C3C180EFC28205EBA0FF2CC72EF438CB8A0A8723909C706B010A7B9F09BAA598B2D4729379F2A9891327FC23C69556BD5D743B4F1274AEC43B59590FBD32476699CED38395C62146B5EA576A88B159043B1148381BF669ED317A4710CC5469494482149E64B2A1DB8419D8CEF0CC081AEA29E362B010D39A195272B4BB1C87DA13DEDB6D99C51E4AB8908816B9B06619431C21FAD80D234677961CB7020AAEA100BC18C51B93E0A0F5F6662A40388CD27462B469C60CC3B37BAFC3542FD6D11C88CC336ED146E7CA38AB9C0C474B3631611CD4CBBC2936058134AFEDBA46716B5412362055B98DB35836401102BB3559E253AC4DDACD9B9FB1A30557E362F446BD2BF67021168A", + "m": "0C6FD9FD1121F5F957F9DF8810C7AF1B44E0FF06867B7FB8B570EA543BA7938A" + }, + { + "tcId": 49, + "ek": "3543CED7C2159F7734C9C5234B0050177B8E5D4022F40B3D2BBC8DE8B9A2422C711FE97C17BB7078321EC81C8204F682FABC3614120853D29AE9C1A3811B4E422836BC021A4F6ACC9F06BC3867B55D98589AF51A9F64103ED244A12B82BEFABED58AA11511AFE711AF87F06DE3463E5AAC6EEDEAAEB012CF77128461CB5B38840381A08E0A8119A0EA9302D48488053DD7550F7D3CB2507A6F69E186BED53D72276C517B3A4AE90E74C24CFB09C79E72BC188389F657B9F9C6BB8E5A7AE3832AF4453CDC4337CA9B029F91BD6F4735E5BA6FAAE805F11779DDA19BB1E81BC9F7207F9C4F58A795600C2A8ED03876D3729622605B2C13AE72065D077631C7AEAB226B7111C926A7C0B35AA9CE208F3020111CA6266C91A138A9CE7911BD641621E9CB3CB0941E343588068A4992B0A6954BA5D498545CF62C5A201558CCA2FE9514EC92043D2B013E254FC5F3A18880120901B63273BF99810DA49A56780612DB98894396C449F0CCFDA915BAE829974A157D09729AD90918FABE51B72D49134741B0C97429A558359E0642388A503D5E309E2371B2663327B1A7498376AA4F1AB0D320B4D2852EE9EC28825C9C9F4287A190BCCB170CCA897D08C90B2C186AB7F23309F274D7959D2C1003FA8333A1491C5C645F34C094FEFA104E554CDFF63EF955ADD55A9CE5753A150C6D9BFA382541B984103DC78B662D114BEA830E95134158CBB854310CAE406BBCE4CE82B7257C330E8B113790954BF19CBA1FC25828EC06E17C73E135CDF5748490681F7BE052EAB149912528B2004B2B02725852C28E8B566291AA02C1A410717987B22B3D29B5DA9363B63B33F4108C6783186236288A31BFF07482C189AA4C4C5F4B6024C388CBE049A02CC0A6CB52886A25B9B9423AA4716D0F65308D61CA33649884CA4910A00D9F8B6D56DB719E470291DA6802F57D452531FDE36ADAB00450C3735CB8C0484BA8F6E8A939819FBB9AC548905E13458A278579A6E5160950846BA1A9E4D62EBDEB8C8F9B1CA26C20F76BA90C5679B2BA4D8EE4B963557DB1E8C891729DA1F421FF20C42261654E753C63A39DC7B9094A20AAA3E29DF29327AF314576A8CBDC5AB55B8C4B91DB1DF25304E808B677FB9FA2F82D15A957CD8485DD5A35999B992CE428795897C1BB18DF01C0DE2B0D45620F31D820B41282C4D98D95825AC52B11310A1EEBCC6724D4BDF7A3B69A1C1D63047969A058FBEB926F68696B6761F4F66B3D7A31878006901853C58128C9CA6A911764A244A290F96D00DC38343244803BC647C6152FE9BBD0CB82A4467AA4D25CE175C08009B867F60D9A32138D3864F719A2B798987430C0C7326D3BEB3F895472B2D054030366111CC2DEF60C7800CE3BDA023A062BC2351393AC44DFF30B49E60F907404562159B5077B31E6675D905CC7C1CB4CD64B2AF5AFA50CC387C333AEC7CABA219CB4C8A8952B429A1BCF05D78EC65A908436256F46114A19AF2F1A0EAD0C12AED4171EF653F3D2802749C618D70006D68664EAB3B876B48FC298256577CE34AB5127CEE03433B2CA9B403C0A39B02657180C829684A7A58458487E00143CEFD5AFFEF316F2E716B0B42416975E44A63EC62269966C6C71F9B01C5C839BC3E778ADD880E2126F8776B0264707617CD467E982E2DEF5E1", + "m": "87B25E0AFC6E9D186DF7DA6C3D9E048E1B16C990866367BD903C779266CFD537" + }, + { + "tcId": 50, + "ek": "F5BAA74B78634AC845B35C58C290C2C6B0495E797F1A924F574AA8432218F89A8CF47928F1F5A72B4304B6798B3B1A08ADA4CB70406F91815269308761F2BF706029BA718EA4F6CC8D2A632598A248B2BFD0F33CA512383793CB204CA808D1352574834D816B857A89F3539779E53DC58373C9B94F87940C1E3B9DEEF0BA4CF69F837781F13C2AED423B9F64C8E384C3EE70888CC74AE006531A0544EC702A2D1927B55C0D3653058FF6B2EB68279541BBDB3430E4123AFC505DC62C666CA5B6C751C1448320B0F07FDE43B20F7A50C631CA754C7003B3B485C1BFAFE841288716CB38B9B5FB3E5B7AC59F0A5759AC950340391D62994CCB27E2575D2F1AADDB4278D3EA1098F46C10F43A4638277383363EF0A2F74227C5D1C3E0F8698869C94323C612466C8D7237EF73344573215E31BD3924468E33700FE0B87F5A9027DCA22AA37EF9D3C744BC89C236CDE0B2346AA4CB8745B699F1925A2353FC4890404517EDD9CF42632DD599133FC8CECA3345DE747F2FE55F1EFBBA2E114ED18452BC846314A7894A249F0565C228118B9C956BADC06FD4F36D4E433B56A199B9245D802581DDB9AA7AC256640A554E8614DA8243F5D4CA7F4860F4BC04E6EBACBD31208725CC12A827879750D2E52DDFFB9CE2A38B63D11E7AD0A0ACF77151D0328572A46E460D65395B944C8A1C720D85D737F5C63FA7AB91949615F9F332F174849C138332C509D00BAB5CC71461535ABFA86967184D2BD846F1C10104EA2834EA0C7A734A935C666C7A221AA02939E4BB87332A75C983DE14C575F8794EEABDBB113A75940F9A311D89866148238C5D3C550035812125407C46C1767A60A0E0BB44C9CED39649BF18500AEC0B43718EABBAB3A5D0AC51B2A4AE861FDCB546A6893F58D82C91B74B58C18D0BBB7D54F36D351B8B84CC270EE4CEEE9B1A2DBC39BCAC5E15070241A9A27662AF8F97AB64EA8741C32E711760EE46CACE560EF4A25BB8246390FCCDA4197F682495F0A46C38FCBDFA81A5246573FCA974BD623DA80736D598B069093ECBDC759AF122DD977C83407E372978C135980772B6A1086FE3460F6FD92CC5F2AAD0372DE7866B0C517E17931CD1687773307DF4243E1CB00691C8742A82732FB7914B9C7CB4C92953EC4F7B1A9CBDF066CF499ABB65A0436590049A4D0AD566421BC0712B2F64F802D0DC3670771A727C62D919A0F969A4E4228CA3344834993CF474728D2649C3C3A37C85AB51D95D964710D73C63C541B5EE0985CA63CC55C037F62A696247CB001D5441C33003185629513180A3C1EC0238CFCBAB4004A088C1C1C9D23D068A09CEA16A42F0936EEC7F6D539372BB2C8779C919099DF18720DB076224F8BAECAB14ED28A980C00771B72CF35895FF908210CACB775C9F8FA6585579A00DB09667B5185197C45BA267CA040DFBF29666250A187C5151864B43441E7A40022852A1EEB841D55000B4230887665555F8793A46B780158B744C880FB947D203239D090F8C53A1BAC47DE0F0196F4245A238C4D9A0959DF22CC16B88BBB53270B335533C368789C6CC208660406B1A686616D92CEC02493F44BDBABC86CFB2119B8A18B2BB4E7B660D3A65A2F0FCAAA8A018EF5F0BB1FB0880E9B95E50D657E561520E90B5590005C86DCD7639E33064ABBB", + "m": "F188ECA4ECEED7C3C9860A430575EFECBBF650126E5FAFAC464B1272F427866B" + } + ] + }, + { + "tgId": 3, + "testType": "AFT", + "parameterSet": "ML-KEM-1024", + "function": "encapsulation", + "tests": [ + { + "tcId": 51, + "ek": "39690870B765DDF5A0B7092773EC1911637E8A80307A865A24E3012FBACC0FD431D12A44B38CC685335C858714026187E8F641933291CBE0B678D78944B17D7DA605DEC011B8681E113701C0074553156EE11530A4B63B8FE886637B524DE2733D039591230CD90C1EBAB61E3A5762E46B4E6067C6C4B280F371A3D8BB6839242DD3E381B41A3624396C2C557D1809934A901D8091731A43A32DA32EC9FA860FFC4AD09022B944C654980D2F928773B5BBBE048A21DB3F67167EA7F2B156246014ACCDC24455F5D1B0F7171D29CAA43DEB1CE32513078B495AC09C9B6793497BB593570CF8AA2D1F7549E5D54FA5A339B4281C90D75A9D0186B7322129B90B1DF6A39892C60A613D55E4A46EC07B69B6AF96255617C77951958A15B71DC48075562A236AA325008909CF75993CD58AA81658750985FA593EF6C0400BA07BF119C7380B1D61751A4390A398B6205A6895A857A463EC931FC262D89B069D6CB3AC9BB4E5272F35CA612D8346B65427708186C9422A37332B9955BFBA7080454CB5972397839B5465219EC6024D08A46EC4B29A15249653F413FDA1C99E82C144E7BCD9E17C19C2C3D43C4792F91EA4D8487567392AF43A513480975959E50CCA55DC89AB0A19A313B1B7E6ADBD7A1477281BD128B2C0F867CCD13877248E5844882F48B878E536D5208716F11B75051033E9A30DE9AFBBA66305E1BA265686B29C3186FB3CA1952936FABD2EA931E0D74E4D849CB685BFFC38C9E29559DE6AAF2EB4017C543EB9D59732B421C3A5CB5781BB60F1A953F07D7937B3651305E1D46E15569321721E310494C2EC16C843B3B4D9831809065BDA8F4E5A17E80123312C065C03ACE623AF5589CE361C913BDA355A031E42C54EABA24AF3F6848E6C4932427AE2A09D25808BDF0288D4C245EA2973C261CB29A6AFB13C6058A3A19F11673A198F86A251113837CDA27F2304A1E3D75C8BB88E6C67A006CC63DAC90017B865DC0268EFC53E2CB75CC6F1008B34839CC80B26A019440C0D34132BC4690519131DE15434B730B3A2492F6EF6471CF1C5568463A3387102135EB1A8635F0A63E33176914B40CC2494002C0E19C38A0D97C0CA5632261519193030F33ACEC68125D33C5AF26A9F97B1B181A00E4E9144A2D4811D7654F9B958CCE126E030A7FEC045A0BCB82ED40509643F3F5736B652116A4008EDA65FA1895EC82390C2713B4303BB6E7B4B416429D8ABBC497B98907224D065B3DC5A017907BBF7079E08B770AFD059A31A30933580EF49B5C48B0ACE675697D6B1041992DB62246092376954980AA03DCFCB5ADEA36B0B2138AE349D5E270F0D83640BE9885CC9371C6490C1F39959C9A192E584DFF9CB2D8C2297B117B9D7627AC5B2D29335558718A5A7C34564B0C0A1105F0A00E0084ACA185C5A54741E4B4053A431713678F5951D3FE47E0719A082017AB73B892EF3C77ECB170BF386AB36C89876BC8AE67B0CB82EE42793D9D7435172043E8CA3A8E1A83197891121932A0AB2EF46789EAB0BEDF5A5707A4B10035BD331B01E298370E112443A48D96CA9503832E3495DD2E571374C1F57B6B9A0A074AA29736C488FE1D823662ABD3A379CA43007DE317392D332A6826ACE381AF4C82C31F7C781788C705C4E6F06B1488850AAE55B6872731570444DB49AC9A53E9635816C1C537D2430F922124317592B36A68685859EF334B2782A5072A661C55C39294975572319474DB4E33DFFDC5E88ABA83B6B8D468753C88BA898DB116CF0415DB41C17D346462BBAC4A44207D0C93A4B71C8D00D47B969C690ABB371C0BBE1A367A3046643C466C867E341805EB435F8316358F69E6A4976BB54ABD90AA963B52BDFC93BA27C833BF5CCB4A2CA5BABA12D70016ACB875582416BA1A82246CAE8489647B36990F9128E350407CB614C926E492BB6D78021E73CB54641317FF282B9436462183B9375A5D32879355A96215B31ACE09C93779240260EB8B974FE049407229B808B7818142C3A071CC5561F56593E7605346C63817FEB0B836ABB786077BC7A7E3511275C160BA9017C57774E9503048C29B959F5C9E354A8E137CD72C873AD1978F69324DC282504E0A221FB1B740004A63AA7A2D33E00BD0DA29962B8F30233C78317F22CE7D068F16C1722994225E800491E05723201D81BE63E10D05502E1FF54580492D7DC5682EBF09E85773B4E61", + "m": "8199CF923CE12126920108569C11CBF97CF03F44AF5CFA7D550E9B2AC7431982" + }, + { + "tcId": 52, + "ek": "6FB1B3514251DD374101E8CC62DC4C20899AD4D5722B1232A0B32907726DB6139AB65688FF9C28DDC1387F6537E2E8459C096176A31FF8FC091617006B1C68520AB464113FA33068484941B79922291CC14F123B49D7BC75902B4A1634A0990FCB6612C8D07F2AB8CACE9214BB9145CACBBCC6F548CD97AC4DF928EA459E81C24CE1F8C068653AA4A29B9D23A7A48B9BCAF99A2CCC0A5727456D84ADBFA79EE58AA6CFE4987A2B1D2E201615328FD5AA92FE3B22F23823E99B1F4AFB7C69748ABFB12468D624BC677319C87616071136A56014796863D51F3D913135877DFCE7651F75AB1BA1C00066578B5CC07DE612E19A54FE062182C4B1E19B1F0A4211A9DA401E12C0407B897F3776690A45EDC578830609E31B4AD9D5A51722A221E33E74D1B5BC64C5EEBA6643EB9B32E54A1D4B770DE8C201C291D2E7981E1B9BDA14BF2675527C70664A941E4F4805AF025A069C0368736899F0A2D5FA24D8672A701528E33817A189B1CE655333D84481903AA3441AE4257BE7683735CB98D039585F4C6D842321836875C1A78F247B3D27781826FCCE47F753C88A57A8F39E8766711AD5753C060B7AE5B7EAE85021041306A70960FCB5CD64A655D366D59B703B52A5B4102C5C78B298595F1D7A8A28540C40603F2B42B79052A456E114602A948DF4252C17CC66700728D6072BA44161B05238641EDA15CFF92C4C89C754598615619B4EB2838F64C657A278BF4CA12224717EBBA1A86350BFA2A05594A885B3E61D9CA4BCE5D6B632E214F3B12B658915D2E423FD46686F031D29FAAB04688388456CF58A0BEE7A73CD016CE8B6BE1B762F160894F6D61FAB48915E54B1F919031A293211F4CE07B54C74653991D4A76E2CB68476CD7B121FE7CB80DC44A092864AAD8A12C8D3860473B60A370ADD8B25E315A99B708F80B44A7D01BC3ED4BE7719BFCC5094B9CA470BC0CE9D1A45CC9925BF43B9FC475ABC973DDC153FBB5689D624198816143C054D767CC7FAA0848FA39D0F825233EB2422292587236169C79F2C71375AE43682FC52AA75C815184028FABBC6639BDE6BA41609C27290A195489C81C64A4129252BB056654CC67072BCCE967539554E34383AC56B3FF78AA8A9325BB9314B16795AF5F25486CA214A41B7C383655303CE73F49A831907949141C2944EC8415EE4666F4FBC85E67CA3F15C68B4D23BB0887C2DDA81353C6F21740C08DB187AAAA88ED5B5E618011913534A332DC74C810C47601A4953FDF26DC7738E2BA5A56F45366840BEFE36CA04D20125856F98F28830473203728C4B9038E5CA7291074508CC55997896DB9353CECA7C76003D91E2BD8AABA8EC706F6AF3C9C3BA8882278E6097BECF179946FC3DC31AC8EC36228F49B935A57B1D7B2C16068FD977656D7122737933E84B1FA54AC1792C7219889681985A16012B524B4A92E499B5284EBE093D4DAA8D90B04714CC62E10C688F838E9C028C4D728B1D1ABF9F4240B463BB588BC4BF1ACE20F2C244ECA941B2A491000927670350B81549517866E471184674EF13695770440EB1BD49F5513C10AF5702ABD291925BC6B514963980C33D06FC130BA90BEA70CDFCB9BE6C076359D82A7FE1CA8EDAAEB1DB3130150A6FC7AD894426108B4FD7624E43FC3DC41A98D2E0475F166EBC8A9BD43293FEC14AD1E19273430FDF877C59613EA5D82782212F6BB9886CDC3C51E87DFDEB236DC90BE554C9ADA48D1E21A7BAC91D91C84CDA669571582B4FC17CDACBAEA9B09B6A4AC66405254277C95DC957AB24AC91C65DDED3C05F9B08F979470DA05E652A0155C733452747B8946E8118AB4CF354492586062C56BD2C9AEED133E5BB62D7D7C960D00444BAC4C75452AE0A89807CC450889DA8D96FB50C31C23B05CB8C839B016D3D9800282C0A791705BDF6BD98D8B5BFA94C3EBCB40F764D82C090D9F148B9D47E9BC7905AA3A8B8F122BBC4660D832E4A658430F96423906ECFE6A9866AC134B1CAFADC8589B1327D1CBED20A2194DA90E696250692B5522ABD7A938B9857328501C2DBF05C72456560E5C925FAC4FAC2BEA33A6AB588381684244B58C5D3E7C9D1170C20FBCAE4D6415EF45D874CC301C3A15E11BBACE37082F632EBEA76D8323E4BF54A63880636E1997A47476E8172F8C014DF7B477A631F10EB610CA9D603B73F363AF20BB65D6DAEC6328BA1495D7AFF28D8E2B2", + "m": "FDE093F23AA3E27045E30E0824A77EF01518BFB7B9F6E30EE2E275F2FCCCDC81" + }, + { + "tcId": 53, + "ek": "F06B1C4CF6A5AC4B62A7F9B20CD5977EC72EEB573AFF6A8BA3E918E2A6196A8BB106A08CE09C4963D39F3E30562D719AD923046F89882D66CEACC0574EB7B545604AECB6364D92084BF81486E934CBDB36E7A3558D618DA6C7380BA475269A1E5F1A8720774A6F451D973289AB746F57C006633C5C5AC69160F401A2B1CE17A02F57C81D88258DC3B07FE993829E242DBFA7349B9783AE34B63F1CABE577CAD7A16B845A662F3B1172A23379B1A135069A292A5D1483776BF2386A819462CB0213138B1E7649C255639DD1C25075A8B1057D688518BC085E483A4D1637335EF28D9A5254C83A08AED98732A15E46838ED2FB2169176FAF92C309D9473BB1BA1D1A2A120B714FC6A1AB0C60B85C003F378F97599D929AB93DCB735F0CB108084D2A239A1B1720F29201A7AA247E3B23E8244F1A94145FA63E18C4416B82344DCC7BB61420A7DBC593E26430D4926176180BCC2B59E7ABEC8246054CB707C8B16E314D9CE246A7DC0475D19B2035641ABB5D131BCFF1025BB516178672120C452D48441B5CC17E75F7A3DE209A21611E0723ACF7815F0C41AB9E85994AD81509841041CA5473606C200A55AD887637870124888A1C17A3FCD6BF0170AC32624145C12AA18283932465E779C7588906073C2D7A7CBC1CB8036E390362352B16643876104BD544892A0514C6CB1C19140B60E25B6F01ACC76B6D6DF7C121F5A945073FCAC611BA5C41FE1C064CFC028724978446440DB75BEFC38BF6C803F0698F7EF24C27C622CC550F5EFC86290C46D25A5F49F3C812C516567947942B93E73414682C31DA22297A169723C5651B8C0A2697AA560B4A65D8A9E6F0398C0C2FA55C3A964CCF32F16021FC5D87E279B923A6D05419B741616343BBE0C2BC1983087A731F90EB4C33A82CBC37C09E587442676D29712A72B06B79DC1D5554C98B24643A05780FFBAF5AB89D28D6557610BCF1448080A640533A56FBF5C422EA200B65AA29C388FEE3CC3CD015A1CB2BE4C6315EF949FBD3888607877B086980218F1EA650BE30C6FBFBB17A879A45033EF7631EECB243B72C43069C4689F5BF9DC78A1D60A3785416AA6C3BA9EC6340A5B0C40450A89922C36C02F3B96FFBF4636897C622E38B268276E428C522911C8B7C015DD57B357174B40968F20B98C87216B4208BEF2B4F2647336D1ABFCCB939F3A6A4B5B51092F760D3C27F98E3CDC1AA4EA11515DA642513F4C2B30935841A7DE6932EB4EA7820C79358A7766021B60ED2071F547A1370B789A0AD0929ACDE7506849B49F7D12053554DA227157C7C25295555FA2AB93F167043C83009F455824A1EB81A27DA8B39B015B7247C4FEF343E3585B519221AA2052C93C1C4863B0F940C8E76C0CE562ACBC7F029FC1C54726261E6F66C63360956E06EC631604724100A861C2290BE296A91F5E88BF6942004E9B6013B4AEBC44B05CB9E08114BCF9A92806C7934B373FC444F88D966D1E43CFAD339F1D217BDAA8CE4CC93A5554152091C2C0C5961F5CDF71A5F8AF056D1059187784C153056680174567436D86228DB3B399769BFCAEC1A3F8BBFD6908410608BD11AB2DD9A40A4C47734E579CA70CD18B304D8D72161AB4DDCC7B71836AA01A870FB87AAF9526D09023295498F15051C8159168AF674602010ED2182303C8D8C39191B2C7374961E4B838B381C15F3E5A339D79883F35E991844723C4F47D99AAC517317B69B0C09872FF300B602C4A63833EDD7CE275A804EB1C186EA7E8CA7B63C2C90B7503378F4853BAC5D9B9334E74A68CFE868A3D4A1FC4A89BD967F127CC0EE0A174F42BBF43430B7A849AF37C1EC1AC7DF9C3F9D514756434EF8D61B3A0C5439A394BA974830C3566BB410EC9797C83B9BE7A1141858A3ABE9014EBA1BB35629E67BCBAF9592D9D6B8C2879B06D44EA5B3AD3121B83D550645C079D8E154FAE2B287A7BDDA9437E4CC57CFB4C9CFF1C3FD98B2BF829BD7829B88E47A6057AD7F365EBDB548C23C3AB4DBC0CFD7C3B3C8AECEB9834D9B6C4F325E44628CFE3BAD02BBB687E57B2168211DF44B9BEBA5204678BBCC9157274089D30A59379FE4C0C343CBB8E1D01BB2C388F42053F9A304FBCB1E594C4A0E7BC6B86097AD1A9505462626810ED6442FC9132D2DE95A264AA5CC966748EB76E5373062781F2B7566CF65DAEEF2348D39777B4126B6027C680B0266EA29B55E586156", + "m": "B31920DC102928F497E08EEB72A41F1753DB939CA30E8A3B48B059544F8DF0EE" + }, + { + "tcId": 54, + "ek": "6F1777B3673C3D5BC2D582930467815B74570074BD920CB169889367016BD95698FF9C51A2E8A97FACB82C749437953A5EB2B1E0B38475745BDD7719C64C7D9A9C927474B973C5B5A05817C0986C321A1E492C4AFBA5B8077B2692C714BD61477334AA1947661D1583D832695136399FEB4FAAC99033601E3BB59BF1D42C7D6B60FB0566DF903271D41E463923EEA3800F3B35D9998669F94477B57AC3D68A02C49A4D821B15933BA67B8D19BA5201983AE3F39B0249C5B86763FCAB12CAB5874F0B185ED6452B7B12F490AE26781811431664361DC5F5C880C6A1FAFA103DB663F0A8934A9465931C397649A662D22A85FA32F3B638BF7B5373D6C242372B487C9BF089B72DC356FA2905C5432D37020291A51DEF99909AB7909BBC2C95B748FBE5ADF36AA84A7266A61956FD269F372A454EFC76FF870B6AC6B58FB03388263A198AC767741B04C804357765EBFA0E8AF6C2D8A0729E939286967373792F4E8B38B3B34074BBA05E095083B4A6EBB089C534BE59903AFC237008E88D4992299D718EA9EBCF064BCF263392205A310206053354529C742D45B534A4EA9BF26527F2258EC72A9AB8BC284F9A7F22A7710174458AAAB07B1A8816BA08ABF840EA62B97A4A6F05E39CB18901DA626C38E8094F8718F5A34D009013F9C27DD0739142D1A19CE0826DEB5E99D2023A0165E5F5AE5D687893A2477DB663A5768AEEF53DECAC8252AA5FD711683840C37AF71FE656B06B0B6FF99585F7DC51908BC253E047101756D9C28D0B8C985A90AFED06428FC665A22C8F72C82E4C64BB53FCAB51877D1219631AE215129730274568D5A745D96146C55A81A2CC4D59F4C12E23987669939E83A03C87BD847CA783182517B254CE140BE1DA3AF8922F55742C5D7C0C002C05C1DA8528E39B028B526F1C5D5E8880F7751C4FB619659B369E893E86E4B4853A62F64A7F05121C7C486E3956B676B3BF9411A79C9C1BE5A5B92B7101AB1685AFC88BC6E455147A16AA93012DA7355C4BB52540CE47E3C7D8705AD767789C5A09E7F856535B39DA06B9B8A984F2CBCDCC083B4B600763376ACE71BAD9FB2F0E1C2CBC0CCE77B75CDB514BA797A6C39046B57B973BEC53F94B885DC937824A78ACD06B135A9D6799CF38CBA5B9C5CFD6FC7CDDCB9110D9A47FC9CAB4413180D38AE85882055A9BE7360E16F4C4751A2BA2EC98BEDCB92E897FCAA4C9C9E06DD82C90D1CA776C1A276A089987AC9983F114E0239FA7F03E49123D0C747E03440EA56B77440B89EEE0318DF54BCE1092A7C352DB29916EA25C790628DCA415BE4210A2627446EC2724B32C3C33C52D230D24449D787BB1BFE16276EA3B95F22D8E180EC406B726B22E3CB90A9B67A6D0674E65A18A431C6C74D4940BBC3E20B588C5A7C0978C6DE4C38E44D69D4CD0ADA2A5A901C78075E9AE113350535B35184343B3C158FB95849953333580A1DBD42AF1F244967294D318AA6C41A06E1B944DF3841AA7039CB503B94428DFDC0936CCCD4DBAC46533B7825452C8020D03B1540F660F08948E1FD0C453E7899A4C368FA07BB635B341A234CAA607E4520D4EB83D0E748EA7D73BA7186F9A51780CE81E90574C44B55E57E448A63868A8A740D2902DAA3CBD15B2883B012FCBBCC79C71B380F2042A92C487965E3A58BF53A20CC878BB34F474A5E1493C23B11996B8ABB2BBD84024D06A2B7090591C828676703686588FF1E9473BE2CCD5C73C55318E12C892C15A4C25A9B2D96965A44880FE7AC589E8C839377B792B0D3E6C885749264328BAC0750CAB9CA95AC3124501C66D3AAC4B8833CFA62AC82930B55C6FC81CA9EB9830BDC821A8B09B36963792887694997A573AB25A587A6629407F2902A257A229E64F66434351923CAEE32BF0AC0044B1291B015CA70BC8B19CCBEC83368753A2F648A74FBAA24176641951ADAF561286CA0360C411D1E7B437110D55C42EBB0853DA52511D918E28E97586AC1DBD4A5C01DAC272FCA4134582E941A44CA179E4C47751115151D72846451C36E74921BB76F0FBA7BBB5CD1DA6929C1702B6A75564CBBF8D26A26AFA92095C58E70091A5A3AE828A3820B0A6CF52AC55D384BA1B8F39B7682E99472FC79A526A96DCD6197827BE23930FE9D357FFF7904FD40002043BAC3AC585F1CDA4EB7F95C7847E0CF96267594737208E496A2872ADF1AE515BDEA873D987444A", + "m": "C1F32099307F1A17F58BA32DAD0151736D831F7A3ADD0647F7D2320228D06AA7" + }, + { + "tcId": 55, + "ek": "007363361C85D85753779AC217569EDFF54644109BE7F252D3A59B405074A7724FDB408736B5B459E7151B05057CACB5FC93A59078A0D4985327973A26AB058BC41CDEB857311C301EFB0653817A3ED8A48E29865DFC22707760D31117F5D14070552295F361B7570600839AB4C23B4BFB32FF7B0D0059128012A11552A2C73633909B68D76665125972B66BB73F6053DA0C107E989F50A47243F934A5313CCE4978614794AE956293E165D22198A3220826367299524058591841FC209123A36E492556C20039A09604834E90732D341C7CF7792557D3C05DCA2C5C66139C1A5192B261246C3347A95AEBE227DE2747B2FC3C36508BB82248E604CE4D13570F452DC36A285AC465D9B9791F4A52DC57013E449F9F098AFDAB740DE4B8676A5D3D238CD154ADE2B98EEE09B1BF5C1FBEE70D495B5A08D5A7744248C90A0A5F9B87602C3A6E6C5E0044C3B22632A2C32191CA0DA0ACCD91B58858EA239C70353E8C576E383492204AD3BB141AABBA2FA199E2EC94A9B87E24B424A5F9CFC226741E00AC0BF0A648DAAA39A7571F2213F89A93BE88AF6DB80E7459CA754A0A9CD0912DD50FE3AAC42D14416BA59EBFABABE0057A984849DDFB162C266C7544B42C43AA09930D7E76873FE879433B3EEC0098FA5B4319D471184AB94C8474E508A06032BFC6612A8784199B483741C0B929195F00F395CC79BBE058736439830FCC96BC5A2FD8A878C8B07355C02B46BB6833741187146F30525A7A149E52F3C87C86C489655589D06767EBCEB1134538839DF2F81CF8977201296B96709D2E57AAF8215A07410C925854E91567BD78A09BD815E6F954FC932C444493F2CB801512C5AEDC8ACE9B1F0A02ADD6580885038FB3519F85A4C8B473C2DBBC5F491358D907ADBE96958A1839BF371428BB59DA13A1968039580A30F51C6846B03066C624A40C0236529C59643AE741C0FF5C5EA4B3B527C53DBE26883ED84F3FF09F47EB5DCF2A2AFA1BB598964E89CCABDAB75E5AA63AD9D42CBF56ABBD45798F1232C23462D2FB86FF066C28828FC1012941333552D87D8ACAB64E82C1E3231C4834BC0D2650D4A96FF2C27D83D88FDF457B26B77895469AC1A0A978C763DE93086136B1921AAB994769FB0697937420D1A398431C21E9113796612F7A2A893DFAA09AD12F0DAC553F09C87C25A09DCC2BDEDBCBCC61508E26A0DC1099C2F530BC8756D8CC7C6F134CE010381F16AE4F6A9E7E62907BF289C0B16882D71EEBE31BBDE1A45E0C69578548E3D54E4A362E2C3A8E3FD5AF20115CFEB04258FC728C4BCC16D4C655CB7D0A783EC6DAAD3350BBAE53009C608784742303F95599AB19197236691056E9687B0BC623B49A782E855DA6C8AF5695B2D1B60560B2C12C0939F6E745F13895E3C672AA984183BA7B47AB70B26603FD84212602372DD49A99342D48E0B573113FD2CCBA3EC57C79770FB22398533229B60B93C72397C1D1B34AC03E2BDA48836B49AE42C5271786A63B9F542B9E64D106ECAC63740CB2E18BBC141B764AD5A6EE004AB80187A3904FD8932497AB46C930293545A19750B6FC6C026E8C3B6B767795EB41D6800ADD791DB3871B6DE85BC39B5DDAFB09BD459F6E3C3229A67A96F288A7B982B32630C9009009C2A0C6B2B1EAD47A033CABCDD687979CCDB2160CB3653DB6B9B735317AEED78FCBB13E7BD38D0535B8D837653D91AFC70716BDC669333C363E4303A818B2FDC66A1672708CF9676832254C043535334408222A1232A6D92459E25004148322080AAD50B9BCD76B24D849C05E6825BA49B135C136EF8B4552A29DE0184BB9E6B50430892C0A0854F57ADC017E6844893F75025941123CCC83E4030DE481484EC0A1A9F896DD344A6C6BBC859B853AB47A5BB51E97D04E391312A14268B66B6DEAD8A9077318DC8844F3F5B9D17A759E864F6209D0A95C3C345183EB5025AA6476210710FF5777D45924D302BF298A7FB3A54A402278E527AD946A6D745B5F58B886E3F48AC9EABB92CB840BF5CF907C6BA4434299C919659B6E4711725B47915720C7AD4A8DD5F16AF653B742F6199AD94E2127748CE5BAB685CD23CC5156E8BE17F8786BF341A4D1A1A6D99CE9894A6BE576C7DB7BCDFA6E5B95ACE6DB6A38BC51EEDBAE49D61ADBE43B63356C4B260481360B285A4B26501FC8B6E5709E5997EEB2359382FE949AD53490A5B2ED1093", + "m": "CF8B689629DE77D277026AA0A4E0256DBA2A78C9F0065362B7D83357E4A4EF0B" + }, + { + "tcId": 56, + "ek": "20B8AD943C5B0BD30B0760ACAC5B04379AA6C1A5CA644415F093CB940343A57B5ACF543FB66089C9706ED313CD06CB4B56837C0A9716B31ABB2E1CBCC18C50A1F1CD8C480AE30B6095F43B453B6589F62CD40A34B8B44B8BDB927722868BE2214A197BA63409866CC961EC7DA818166C9748976CBACCB95DF2D15597958ACE1896EF609B1D272CC7D3B8CBE8B138FBB053B31130B82159A46E8B3A2D87562254883C2C1B5B78E98A8D846D3DC70F0D08BB9E2377947838C7D74B94EB4FAD9B704A68A18348847BC4BF084290EBC07B0947CF1ADC32F9950C34B33A0A340CC0269ED3C8520FE9717819A8EF8173DF9A2924C22E0EAB6F60220D5DB1BF7E98A4D6A5C2D4A6C3D0DC2E8E485DD2678C968124813A235DA41250E5C58029BE7FD42CA6883AD460CDD3C0B2B3F28117B9CF63838BCAC01898C64C1DB530C318A375063BF3677EDBA3169C8843F0F478A8694F28521262F2B4C5D40732039869C674182569E2264041E8A3F553BBF1E94FB0C7600890615266671103C6E20251DCA952DA943EFFC10BA56AC563D39F3FB14514CB3D0A6A289C3765473222A05808B2459A03D5BD0C202241D55F2022CDF8CAC439A44DEF4951403416A13867ACD3735684B259B8AE793B7B0D99637CB8CA0D7721DE69BF93F217D8866A0E54AE8420928AC40DD5AA30B3249597193807663AC0FB950F06BAD695B6BC3BB57CA44AD2666F0C03671021C7CE3CB0DED0380EDA240F763A8147CA3B070E53853ED1F3A404B1BDF6BACC9BF77E745A65F4C37B9BD6CEC07ABDE4ECB01570C7A4715F3975370849764E313FAC2C51F850A7205C29205277C13502D1753580A6583539C83A776474D5A39722566E3A6E92A93F5B66C915F0BE2FAC7523A1055D79C85B818ADAE142EB803CB759AFFA9C52BCB3677E19AAA04AC81606A9B5377688962B4C09BC42F563D011387886BBF2BB309968C3AFB395F601B4927122E5519707926272925EC1613555C984AEAC7083A138E837116F8353DA805D07D0BEA03BC598644548421E70B43CC62C826CE257DC420D067576529C24F913A454E7AFA2845121429B1C19B20E751D97804AC76828C7054FBA091EAB1C5C9E40715092C824DB69D5C7CAD1EC1959FC1C68AB8A9A928F50D816610B38ED7202774779891471BE167BF53AB398F29BAF12244BDB56A817A2A8133531F172C6178F19055E53C1486923AB1ADC06CA53BF7CD207F34AB0DB1065B051523156A2BF82B91BF09E65B1066C65A7BD61A1F39561C55577E1B9A5ED781B5212569E799C6CB3439282A06B38CCB064ABD1F4BBA80C73E848762F8C9CE94B499C502ABE4B6727EC7B55E4A5C043A04577C4ED865C5347611EE3B0E5EC930C91BE57F68E47E9A074E45FE04861FF4238B81658D0172E277B22AD97B0263CA81CC3383790B577B3CFED068B10203ED471945F4247B5D23265E936A860CDEDB4A95300042B419E4C2C3B55E12F00DAB1DBB289965B9DFADA8E36272F4D16A05A43AEA258B1173A9A273417D75627FA832426CB21B741803F1A38B7AB7E4B3981832468A0594A0626BEA1C48F675813056A49CF98818FC97E79E125FD535AAF80A5F17B69BCCAB11D3931E76C010CC3782F8694C389A89F8B02C5932DA1FC500930807464908805331997A82C8784CBA5686754A3CEF9A336AC59F0F9C02D2961F3234F70B14E8FE29A686A229C915526326BCE62755AF0B307989976999A79B24E8B702A537150503813CA21746CE57EBC5C82D453444747A2C26219F3F86C9AB8C13202868D38455B360EE3072456191FB6157334F6625898396F3161AB2CA0FA513EF7786022286E7B8A6FD53B6283A13ACB0B3AB217393017C8C3E32EB366BBB92B890447278BCBBDF9E053C2E80F7344C2D811446BBA48751415AD925A61BA153B3637100403D81460A370875F442434D840C7BB6A6E909823A54B314874CA2CC304526AF9D0911FC0ACB37C38E35AAEE59BBC3F48514F602ABAFC8337C5CC91EB8C9C256EB367629656C105E9C586975E23E69C18527FA1F063358B80B6FA8880B3991FF6A4202586D4D872F737A386B7A840517C6B879508D55079DA2101C781F04A805837AC3EFB550D571EF60C153D98AAD58B1EB6E75DC5E526E1125ACFF846BC3720BB92AC066B24F6B97C96DDB5581E160B752C4EA8F118CCC6D789B871C6D23F1E0974D07BF2733C48EC", + "m": "9A478719A0424A37D0A77DC8D7E1D9602417CC100C27443A33C11E5A60F99B14" + }, + { + "tcId": 57, + "ek": "CAE526C672A1D6860CFA7682DA5349A2FC6831F01491021C8DC4813B94AB2E5A875D9B9C57A592DBB54DCB6317005972804237F3F6B17C1AAE9B67A6BF23B3FB7144D094A4DD974FEC506003457314C3B3692984DA2B44E584947850CF5302B559FB12C5BB11B08967FA03A0D1907728382B9B9BBE83851425EA8EB766B24B73CB8987BB344B3C3246848171B26C7764BF6CBCD3FCB6E4680E8F895A7AC357CA6C14948AAB5D2BBCD2C77B2065BDAB83721117750DE66843830ECDD47B3DE3CC0DE3B698204179F39AD3D349F86A0124B492ABD6BEAD7713EB593F3FEB9870F5A6EA721FDD0621B9B487CF1CA9AE56B7DE022BC67616B2DC03E6F23C0EA13500951C2EF698F6BB8B28432A875B6773CA1559477596C6C5C7219524C5547E36CF91437E257293946074A3BA6A62A7278BD5BA0C3C5D33671EFCEC4C04D21D5036B4D5F92AB996A5CD932110A6019EB4040CFBCECF757E4811393C8B48CA3219021921A62B19A366636C756AAA043A6C2C1E417400DA04A73BDC1A4110C5197B1E2A890ACB20B2CC577CD6D3446756BAE2E56EF0DABBDF39190A3BB600594CE0F2551401491C98CBE88A486D959B1D038A10A2CA875A10566507C82849CA72A311B2239AD3943898CCD1BB4F55451B06DAB33052C6EE25219980C43D81C976428502B95FDC9BAF7D3B414721214A0A36B5EC2B2027C54AF7B817B320E5239F20F0B1D06B7D60100304F22A430CAC64C979A3C1A74C8731CED67083F61BE0AA5C58275721B29EC77AB2736A606AA7A7F8144847C93EAD1C606C302459D5757E328AD75320DA830AD5CB52FB496B7C6579E124BC15542CC11328A22B6764664B5E6506CD0792EBDCBE4A372349473BF6EBC3C1A97CEAD0C4BC04CA074B06CF204DE0B85C4164CBF994C9B5BA1ED6055A40EABD91E91F79708E25A4B09B4C88AE2C447B30BE864646D4FC0101BC87C8D49F29F82D88A7110DD9143A0AAAE661488897713B124999051E971A0EC2B8968270746D0718F2A3A9274C20FD46676AA36A9192B2E8912F38D5B12087673B9A528AD841D6230FE614B3F5404E0DD88107EB9B6FA241F9CC003DBB4006413C6D574D7834CE94980639D2CA63063FAE6A0AC0B20BB424865825C202538660F167EB3C7EBD56C2083447A097117971BEC59B3A12A22E62237DEC1B5DCC89346D211E05C3149DC31C423772FD84563032080B284214712783903931D20FB8328AFED64848F6CC1629758267CC3D041B2A6864C87559DFB5419449B055153FDDABC5A1424CB46956C5B8113507787EB0C7623CB7FA75A176D0333B64B2B42418BA87BB44C07363A78D0FDB247285595BAC27442A1BF2249C6FA90F9AB10964DA2952028BD9127864C5C366487597D91435A64BA0C24C25D259B863A417477562E57727E3834D59485077AFFCF79184109B6D6564EF8180F6508FCF60A0A913A6409A34EFE3C7AB181D246B0A297BCD4A42BA13C2429CC9133D1913B7F9AE1C97836565C75B7C17DF7C0BF7249BB6299E91134FF7B99CE8733874164AA74A7098A11347A1B9036C8BCFE1B63A5A86986A986CF53619E61387A0958231C51CC70FAF14B23597AE58047882721CAB244F820903C2BCB38BB7B719E028D1D46BA6F26A7DBA61809673E8A0AD37E7BA327874DCE38AC8863C0CA68830148F3C5C4505D579007222ED677D256859AE959F4A7C1908587E84C105C6717686FC625DB11B21CB1983C296116B68D0A4C9A0D71F457B348AF7016971BCED2A4B81872BE744A799DB3C7F8A044CE895C4549AFC5066C65732F0CB5F1EBAAD86491FDF60511BC299447447AF78B4A872643A516832A848C997CFBEECAA9F630EB4006783A77B52D8632FEC4551E62D62A25D3F2A50F64A79B7C0079F33BA2B0A4D4CF9611A8B0BBD053A28C1CFE3AA8359BA0709232A180B56B5DC5653004189AC1929054B3123BB308608DF15BA6FD656D466457CF59EFA330E8A3453C5A27F031C6474A73200F6A852DBC6E8771E3B714A18C1166C943D1448B164D81855EC20928A65ADF97A1174249074B970530A6D12995E8C96F3E21851EC10E0BB4152091AEC15661149280B12856E294F81D74EEFF9063BA32495B1B37D293A58F46327258DBC62CCD03B96392936EDA76B0C2B619D716A56E0AAB767A43D69A91D041DF2A9372294F2AD9795FBAFD36656A647D9BD526672671E3E8B9C", + "m": "9368DF9115459AFC4B662C4ABA993971E4A90F59E49C54DC72A938D4A02DD672" + }, + { + "tcId": 58, + "ek": "8F7B5B00D2BAEF1742CF63AF67A209303B09A4367D71F445155CC278C0777A017BDF69AB8400091D58B3FFD919B3061886D728DDE78AC9D957AB9BB686BC2E56733AA2532004CCCAB959374E1422C72148D3C5047555BD839843FC94872A901A483839FDB7B81D1616C744A473404E53D03EEA7A0975394AACAB2958058761711EAED64F6242CA2D8804C83750F7E036AC33962BD2857EA758BBA104894905D8D5883E96478EF3CB4CB27BB88149CFB11C32AA80F59B051EC349B4C5B78FF63033750C9F0751F84B13D22693BA6C2D6C763AF8A258B7451E7F4C5E3C1985A917BAB20437B7C0CF08486BD0CC945F452B7F978EBF3CB6EBD8C87F851B2EE20AEF351FA3C34BD6555BB5743B018B952B819F68300EDA355E3EA09122C0676DEB3C546345DE741E16892ED4E5B1E1A8CBFDF33D8F37CA8BF967D51C0AE3ABB2E53762F59605B5323CC030AD1B295DA819BE4EBA7530C71FD072990DA581DB70A7CF062602D93BAB03A187552D1C720079010B743B2CC440AB08755945DB1D7A67A713518412C8AA9A0A310C80224A735237722FE2532711A9A46D120A3D3B4FC931BA2089246E0A2B71F7B533B00EDAD18178B1CEC0457C66807E22A5B840D5363F3C0314D4CD8602494C056BB4BA12BF5B578725899DF38DDB533EBB535374A99835242F51F80E45F06421B27088A714705A833F89995DB14AE0B31361E11EFBF3B26B1A5B2A9C586117CD7C982751921FA312A7F32174AE6232275082BF35161CE6B9DF6614156932A527C5A5370168B2C3A9F419B6FB2FEECA59F5A847A367037704935AE45337A1BA0FD314065A0D99433E70F4116DC34EC8F14612D61FCCC2BF048A7EF886B6C1E0BA5DB55CD53241FB9A8F6A5007EB4687D955CBE68B08382A919B02583A30C426AC052CB9177F2C1313D4170739756F7777F25703CA540865D9B7F893C20C405172931E6D12C3DAA892B0C0B1B6B6ABEC5A2AA1223EBA2498B69826B41B8B222257901BC4490202DAC7918BCA6BC167345A59A2B5D03EC2CA0B606C9026597D36B6A0D4F3495BC608E53A6E5CE6B0E92C206CC7C885CC5546DA8FE5F2CA206155C66723AD50A84FD922F9ACA8E5E6AAEB04141CF3366E0A3183AC4B0968065F845729C2CB9C6A016BB59CBCB8745AD7A45B704A15099CE3D8A6E4C304D2924D06C519A2EB2CB8522C76E426B7FC994C4B7C983726AC617EA1374A5EB819B66BAB2BC83B38B1348291497EC1A8C7904907077ED0BC13B049520AE5044DCBB343EB7C62134B3926188326AC29550AA1D886E2CB3D3EA3AEA7D7549779CC444A4F7CB59B29078410CA81630C71E2650AA99B60F9F96CF26CB3BE33A2D8A18451F94F7C9AA0CE511C0F158D693B8BCFF5B24744546C43C98C4960B7A58ED0D63E33611A20A0C8CC21253332058D29AD8C3A60A07C077B44195D8729EE72B04FA75895756259B44DF28B0B28D45E8AB15F7964BE237657F63A712646736CDB05F9C92416E46F5F1188267823ABF12783EC3DD9091488EB827EB3BE5861425B880A154C1461330D3DDA9DD9D63A7BB1BC16A859C3F96041F679FDDB910487C6B5791CDA5646C1024DAE53C531A707315A0D92606EA3C822281C9EF7F2357FDAA6F02CAA93732A523C1545D023F959AC5A6A6C6E7BC82F47B6B3740BBAF173A844CF4237907605170EFA0BC0A248EED02AA99198C4E015693091E4F25053DB5162502D87E97F7460662F0553B9870B41AB2E4B44CE2D935DAA6670DC0448EEE43550647671A66EE6E02EEE93B79DA9400E40BD0B304BE4702CADA47F0A338FD5A9426D652306CA8EC2B93BFA1828D4471A67E216796C6585775BC60AABC3C7073799C2591660659B4ECDB1B7BB193DA6CCAA97857050498000E24FFD45A5D13C240536AF5BF830EE3C6A7F064603E0AACE5B3CB590724A0179ADC95A97CA16E69592FC896C12C40AC6326A0FA5BFAB9356793B8323F5BAE3A9829BF67556C441F760AE15E82641F05CE4D1AA1E266100ED3410E610665109BDE16CBB0C124953590D613BD8183F87B9407C7CCAF4D85CDE2B0DD156BB2845C3D31415F9538F6E58B388AC1211902E77F5734B9417CB0B74E4F19F5ED594ECA36D375A555EE746B5E7B2AE5B68C9BB657839702DB58E4B891461877FAABA489A305F46C2C0C547C1E0DB340C4EBC3C8AD88497589EAB088CFB10CD6C0527EB45D32D", + "m": "7400A071B4F087057C4D6330D11BD46658A2E040CC4B72CD3B564EA0681672D4" + }, + { + "tcId": 59, + "ek": "FCAB2566620A0710B44B229F530C75202B76582A95AE93642D78AA5B714CCCF317F8C5131A0598DEB406F7133F0B4A2529C751D0260C09442803E5C48C764435FC63CD6BA0FB71220279C3635B478668717DB6AA56F790CB07AD45B55C74861DF50C8732C82B3B516E7EA00A898A0BF6B33FE5CC05677CC7A360C19C138E6E19B6A8ECCE2A2054F4DC699E001C43A245404B089520119C569E39205EBF9A534E1818CC53ACC2EABFD2521568E37798756B947937DEE0A249313F980055D141CC18AC3520463FDB4033C0137FC99C47E5026E8B26A257F067793AAD133B06B3D3BC4501CA3C390D8EF2439003177F8224C3E4343424942E62810C887085036A8A26CD4C1514BD917B8B5B06C46896E13B29240889CF3524D098929FF42635230A65746C6683C313FB529C9BBE72D4BB1AC91A9E4481DC5B1947802A50F549815B54566502301305EA36AAC4C93F014B939379362042800DAA251A3619B1D62AC3F4C9B658BC9D1B8A93E58C3CA650C8065A33F0B6E668BD8C7A264A916EC1F495A7348F9DD5782283734CDC5030719A632C5241E0BC95E06A990A1A1C5CC6BF516DBF836B79C7C7428C29806B08547A198B8086A7288086CA2E71E37DBAC5390357AF7B747461B6140894A2453A36AF8B690CC01305B918D4F91243B80BFBA66DC24C76B5CC89E436B1645C3280D138158C43688C8C0CB53AD10CAD5CC643C3248BA54775CF71CF7A0BCAE99C37D2E24A78013692CA1F9E85921F51ABAA347D6CB4194F686E4D68052B766FA10B55A63C24DCACB644DA0E88B97F77D74C072CB27C5AA7A385322A2567F8539BD8E24893F3B402B666E2B7395040089E493C34144D00CCB0DBB17BC47A10E2C500C7B64FA5A753F0A13A0BBCAEB825357AF2B9D377340E31422F928FCAB40BF367928BC705AAB70860BA2992F85118D21D39035858C24B4029A9282CB66530765AA8129DE257D50153DEC31C03B6245E13BFB2F2A3918BA561EC8FC07CC4080141F52AAD72C6BEFF4478F4637631B0907ACA70769B7D5F663900CCBB9CC651227665EBACC8E28580D1B823E082618612126D7C2C24F6B859894DF3469F02850F982B8CAABC6134D0401D469855642B6E84448D386CF91149ED6242984A5999B09FA7519A29183D6DAA9B6BD168E85077DFB9A6B9060F74B81C61A468AA867642320EB3D4197106CA62A191F1A72D5DC58BC4C43D996035E50893C10A51D6C28AFE146835CB41B5352DC0DA54EB6393EAA0769E00091E387B65032BB4FA15D828257DD08A990A76F85A8339220CFF242E20941D45CC2B6F2656648715861B91E7CB0557229694A771AC48133E8B4F05443909FCB4EA53941DE9086B0B2A18FC6A6261254CA56EAE50392D120D7886B66A2606713706430801C2D488DB74352BA7A81E384CEEA544C5D5717FB565806A365D36898299CE8475006913424C4B17CEF529A2A5173AD6626C400D14436100CDC6B7278D55972367F0CC806A5C6596780DB286575863CC39BB26B851CD06B378083BC38335D0F0C3987A65749068A0040ED10139345C63B2566103D9A5EAB55E015410EECB0CCD13772BF1265A667E6705BE5955C479EC8B49473554BA450BD9C1FF8658CF2CBB0329A43D8A2ECD6C4AAA950F80817748EB38897A6EB0600402A829F3D334C2795BAE1C8CCBD69C039ABAF96A3CAFEC66263076DABCB76261521A0B9ED70700A27969C83702826CB9890B2850931FD7FC6E28700896838730E58F74499A5CF3CDA54253E250C08860972A743BE1731800F19573B48A811AAD9CC462FC30B15472BF97CC9D7FE7B659522ECCA61EC1B85AFB3236B0E5695145BD3F3305E1B62F8F353D7F6984C32C34BD123DC370549D474AF6B097E774494EA543FDB57888ECC766C2A7E4B647F9BC730652A9F95B471D55A10F3B75B5F1692295372F311E18E1AF546A7044D2974937B12859C07A2AB4D846815E4264718079288AAF10AB2BDE9422AB8180ADE788D8475FAF94515FC43605FCB088F20B2AB8C2242290B47B932B50446BF1C364BA7DEDE41BF3381609494C55589C3C14650B4A328EF65FB2764D6186CC3C4271A1E02ABD35CFDC1354C1B46AE53331130935484C1E0A922FD055599A082BB0B92757A8BE4F19496F9C2A6EEA1EB33348B2EBA6945C25706EAD29580163B86E71F19A5A5299342FBBBB3DDC3A66BE422A10003E5E567D", + "m": "E8AD0312B9082FB7AD12828867A95E5227D5D3854220EB26534E825DEB1C9D4C" + }, + { + "tcId": 60, + "ek": "1C53A76737B6EEC3220DFA2553C23485F934D8853441F40A32698006980174E8882255A73FA89AAE13C5A8E067FB314F1308BDE6C616D5AC43E381C7C058A98BA62E22F22BD6290555EB8FF9E00D8E977014B1A975E27E39B557B7B4096478A1B120C92DA160BECCC7E6F7A3CA4C23F41C2D1EC94C1E1070FC4506C3D50A73E2629BFA95B6825A2408C970EAAA57DC41B969391B5599E4A8C706FBCC01E14187618C9D58A5126C287B291F59A25A281079424BB2AD22ADFC319FA10B0742232AF6762B835A1B93B426C67CABC42921BA74C83FF72E14C171935AAD2675769810649ED24B8D030A85257535251D820C6646535E288B1942353E960A2876D43C7425693112C781E1343FB63046704806043F00702DCD7BB486A04296E3750B9CA16E910F9CFCCA36E5AEA9529E5D3736CDB99477C7ACA6602149A0C2D5171B76A052097BB2A49269E3305D9877150E6C53055859E9C87BEC3B6CBB0992870A838823B7E6186556157E13867A1E973074D3C6C0A4328906048C239182E1439FF9ACDB7869F450143F899FA0CBC96119A685A06C9E6918ED7CAA55DBB11D67AF2EA548012AC6F017648CE66119E770A0EB8B852B4654854B9BBC0199C81E7CD74B7D3B8EB0130B31E0A339AC39015A25AE378CF0C39C9D47AB5EC20202E396DDC1B7DAB3AF4199BAE6405E0C3C54CDA1283C74C92032C3EF8C0C41530CB9193F23C96CB328B3EC23018E719067CA430D01CB5185C10884A96667A11DE3338FF688DAE32EF2D5A257074BEA431B059ABA51784AAAA5B8EACABD7D0563986782CECB3A9CF58004E4938B1859B544207CF37E4D05953D1556FA2C6EE76B5E073AC14119B21A4C520E3C7B4DAB35451814CFDC879050765BC4086A682C80B628CFAA1221C510A6981F84DA57A773BD0D29246A7A4446FB76EFC46D9C92CBB493CDC1DC7C555B6F1E78A2D7A34F043563E0B223DE7BB15B002802BB1BD77B1365304534B02D37F1903D7B84C6861B30AA68EB2C143F62A993790C996877DD156E469BBE08ACBB4E211919E768B01C56743357F60545E36743B14BC053FA4E22DB40696B2CD64A9FE617A3F37B89467581D1FB392608B840926CA4A831BEC66CCF744A25651DFB84AFED0954D1D59E9A09CEECFA6CC0BABA89F345B4442B1D41820AF46A9B6576BF3A5ABC5C7B117473D877026B774A0C62148E5C3FDE30C433F330F3A4481B1CCE8B48CC5C39CF34A76361D1369AC5B64CC019F401A41C49ABF5A3412A282DD08C44499AAF4087A26EFB2B2EB9BBBAE5BB7BFA3D871B1207A07BB62943CDAA4639E8C5A978B16FACCA31A79FF3482A1D7BC55B827CB4F51DC58081D073090F05320E9656CDFB8E64110CF18720C205320E4A72D24A6B49C6CD65BC4424699860CB1989FAC3E0D0721898A4EF162B720675FCA29A33C762CB689D40149C78C7C0FB916ABC3483C8FA071584122D96AEBFA9CC8D8B8943A23A5C61B314C93E6DCA5022132777473932975B51732B669B791D918CF0F72B1751C84CDB12F102B65C123B24139C7454808957B0B29329A217469992032197006AB240DC070748A3C159E90C257A71E578667DA8900B186AC98984198112D50654598168BC08470363BCEECBBD391A61E631650D2729EBF135F4F0CFF5047182E32DE3CCC85BA85B60290573F7BAADE951C9320E2C653B399642B7862627AC5C77B1A99837125C350EE6D15E5BE09386F05752E2229ED8B0BE692A2A762C53B340EC8C7988CB9B62F8A2D73336883033D0150F9BE39768166F7C31202D693CEA4BBAE3A351E1F8C3495B5D9144BE50C2A484B001F3DBC12A187467302A8383CF8027663976BA1991785B089951EC4A8BA9B847A7092C34B78FD901C7517653EC42EA3A0E68551611264A90039100EC46D0D04ECB065CABABB37588616EF8355AA416B7C646BFF020A0AA1199454A15A43B32187C0D7C749B09C2CEC20EA8AAB548A31DF7E40892E6208CFC5F3B418B9614A7CCBC9941E6B01B78BA6B38A51C392CC4920D98C1669228C009092A7DC07E608982C1A00E90604F9A50A7A1D02D32E3704CB37CE71AC69FCB36725B50AF03138F78A32BA35AD8E25D0D86B9A8A7C817221F15E64B91A0431CA6BA6EA9495F0431A8382ADA232BC947457D16C389F4B23518BA0789BE8D6B990E1A4518DE7E6CE18B3DBF01938A79B6718C38721B3DA1588E74E28BB5", + "m": "6B7D6C279FFEA4B676580F2406EFF9DB1C3E93EBADEDD2BAF7F5F062E09C95A8" + }, + { + "tcId": 61, + "ek": "D15C21352BAA5D5942F315A8C0408C58A46E3BA02AE52B7E2E74A68CD7538626250DCBB23F164BEE480419E9AF27B715F1550E5AF88F193A249B24C5F3D9AF7F5C677079445BF3C2EE0B8D02586EC7D258B751743BA9A12EE7247D6238F47CBAE6A484A8974984B2C9B4D47270C09B5BCA1C75BA4A21618C92A1C460C71DDE8AB14C39BCD1442684A106210128AFE37A0022C58682B43A4A5403807CC9F8C86556682C83870DC49762DA01448089119AB610FBBFBCAB7B3B4099EAF6582F2AA0F63690CE3722411AC5795C4B8CB742FB14B6B67A6B7798C753BA82E3A51D59633E1EFC959A0674998504439CA5624208C4F292DE581470A5A78970983955A1DF33C158941F5643BB7AC08CD04101ECE566E98201FC47BCAF2842EB0A92FD135571254F6F5C5B0D760DE237AE30305882406E1A13AF4EA5A471702549814AD5AC95C4A65D57C1BA7FABBDE09C903C7644F774694242807F04734F838B16F81E6B8979CD8A9DAD065552C5370559C477C7376E55A502550CF845C2C12910D367B14873653BA1394A40834C45A8B5ABBA799B29545C49254C801BCA81A13815175BA6F320A840A332D1D837FFDB9CEA8A038B60A39685A21DF62B1B539569F9AAA4010530244E1D27C866A02459DBBB619102DF8C1FE8D27270111B397953FE77903F14A0BFB324CA3B3F33124A8BC01A6900611DF31E9163038E2099F88A8267D62448683657D39B51C06295094F5BC4C2AFF3B4570584AC030C9CB6A60E9C4F1955B97E028327F73577084D26CB5123592EE3681D81DC977F068835B7410EC75A47C4AF01283132A68257A4B52B7450FD4765AEE94F9621A734A002A15B8A9B86280D74BA18515B65898215575B9F70C8DEF420A03947F973604F65C2BEF50BF453CA02816046EBA7B687321DB919663BA3014361804680E2538427A7C7C7A90D24D9CEC86522C7A61E4DD7782FCA185E75B4768B097666AEDBA9594441225FB90B36C3804DC829F55232DE786828142A17D2218784485D6BC5A3F42654734157585E1EAC5F7F090792D1B20228C9F40979E24B8AD298BBBD50080A042B819B5B34987B20E59C9E498DA306AA88BC8B6C8C55F8C21D32C5973125B4C946A34B27B335703817806B23084E4BA25E084012364410414303824726F3C652D6C2947242A1ABB4AC3AB02EF47A2FBF190020E15D1D7BCEA0382ACA84723ED116818A5F53E70D0B6C265454520D7B57ABC738C49B2E7961CCC507327339B027787E02F668A1213DEB0CB62C0366E0ABC7D3B80D9500CD1F86A1A41B84AB59318E65189E62297CC11707A9580658699B9C04455751B5AB8040239A5CF2B39F5C7F72F859468929366671C53458F6B63EA4857CE149649195AEEC2115627758DC47989874601F771257BB9597EA83401862C8581AA0EC54746083E8A805FE33C3BC75C748675871AC6A332C1ACC996E5D70C8BEBAC2F1B17FFA850B8D9A211CAB89BEBB0C8AD6731F5363BA07B1DA0C06D9E0577EF097DDE97017346303D61BC9CAAC6C6A08A33B3C96D1395A60CFC135B850D7B94833B4D90C7F53621815AA6431193E25C7CDAE4C3F50F65F834380B1E008F01A15B07B7C35B64AF0A08E04B934F5F23C69150CEAE91D735C5B5B860D92D7A833F1C442B22EFF38186FD2326CCC9881D922E1A944FEF28138464B5B268379B81068F16AD78B1EC7C0198E995C7AEC78AFAA7FB5562C40250A7844B0B6299DAE0C18E897574B688B23738A04A081C35BB82DF002B6F19D509B16ADEB74C4460C3FA17B20288A567167664C87A0DB784A491BD3FB3861213139863EC7F69D8164A48BDA321DE4B67EE397721516267733EA533C7A8110E8119ED420600A053921ABB2A8172AC06473237A4227C19D1DC923F7F69C6BBB3F63C019A5211882B37A7675B85C41CF8B8C3D00977EDC95A63E22A28604C5C8A168B25C09B172015D640240BBBB2CB1AB6187A5399372E80170DFE33AAA636D1AC4CDE5BBABDA25004B111586601E1F3CAD6D5588891833121658B44238020B5FEC811A89AB9906598071C48019910F20239866695B5AF79210D7A965571A81F68788B1B867D93ECD3ACD54E5573FF47922278C46C23D58C88A582B9919777DD7E4751B63BDA0175344A54DA30083CF8B7A4E069D772B14EE78C6D7D1C153927E04DF4BFAFFA796774F9ACF678F036F14881A4B48554CE42A1027", + "m": "AC916F44E43EAAE93220E47A6647D9DBD61321AD1D683F3476511118DFA412AB" + }, + { + "tcId": 62, + "ek": "6BE66B6D77B10807050CD12161802165D8970FAC5D9F5CA5DF29185BB4BC1EDB128EC1BB354A6AB712AA63D69FAC3AAE20A18A2C974C06D84A5D8BC583C986764CCDFB6009EAC36B890B9D68FC459A47A4659B233205CBA67A35287C35E1201BFDCA07EAC103DC952C4C849573B699D2FA6D6B698A308564FBDC4083BB661AE283A2A4522AD0A3CEA3A8B0682710CA8A24574DBA91560A55735A3724F98BBA6A162EFFA21059418A53CC6EBEC67DAF14255F8B6D13AA12B29488715729DA1CCA3BEA65EAD4291787A43DCBA2F43C670A8A3F2F8C7897943FB262A3FCA13B6D59BC558A16854255BBEC6870DC402C7903C7037640677CBC146164E28FE8450F556B12CB10783AD7194DD21D2C94B44C695B62A8398C81B25528323CF17A22A5455F45048B076E4CECA85C61BC3409912B288E30B358E4C905EB840E5D565A0319A903037322D7227E631CDD872BF30462993CCA577B839BE254D37900F9FA2B1B2470146A2F38CBC3BFA41AE6D8CADAD1C09B02427538B211778AE2303B4C401DB77184EE85615A7648A3564CEC916A028057CCB2839DA629049C43C05B34669C33FEEC77F9A856083A1DC0F8433F6B9518823C4640396A97AE9AE5AF5B2553B1866C7E05BCF6795485A05C4D0C125A32C25000963DB80C557B4BDBEB0651B41F3498A8B588384F4B31C8C619517B8A0753C41D42C92E384755EB2BD33C251A767E1C955F33574EC590C4770B00E5B5103C633377135ACC472CFBE27644E730AC9B2B63164B75DB0D3B25303F6AB59007C66F339A9314CFC207ACBC8223BB11242AD34F5900B666B0800EF8CCF9076A75930BADA394EF6A28270CB93FDA3FC5029045980CBB351BDE29392CD34C0F933E24EC08EB8C134F9809FE855F840879D0A442F7235C4BA2842C2BC5DBB76B1E1083FABA3117F40D081C31F4E9C15985A99D2BB5A7800D7EB6AA44EA528EC68382D9735505222D935F221AAA39DB289A331FAEA934C353CBFF6C0E890116DED277444121AEB9128B1B56943AAD1C1AB32CFCA00E3075731711CE1B703B86612E3A2590756895F10CFE451078A58B92407A4CF23325356F6E3439011B3FDFE6B62D93A39132289624A582FBCE26E97FF35A9D37703C7F4845E5A0CCCCD36616E72A89B65E3E217CD6EC340699345EA7B644C22CC84B0EE16CB285E9852175A0F772519AD103A40AC636F03B6556C4A67CCCE4B1CD7F98C720C281A411B5C52C7C15C23014653DF487A6188709838158D8F6107DC5AE86B1163475B108BA29D8C545BDD25FF3490A36B7CE374184EDE2C47D02873DEC94BC813003FBB1FD013067EC949B261619C523BBCCBD11171363D33990DC9E0F0BA32A375C6DE1B52ED98E7C09BBE574177339BB377596F85179F6FA0111F3112CE1B1EC603E28A7228DD953B6B3C6063352154B3377C45BE234238EAA066B628F1C108463E938D89A3EE5B010FD980E80F2BE45E999F7625361809B8057C63563745FE7BA112C307B558D43C98C2D35862C866DA3E8881803892038BFD6A2C5E2936F1532B6D8C26EFA0878C4B2849045131273AF0494B5561260AC5983FA274BB590573028A4779123EDC6AF44305E041A76F35749A66A8471762D6C104B5D2544FD20A1D28500280A8549A5C3AAB9A221C51775019E4084933B91A5A167721C2366F4324B660A2775F860C1727778467794E6211A6414A46769E7BA82F1B17C9AC823C20A240CC88F8FF28D67B261B00919CD3B90BDAB5091042D4D232AA09859E01A5637EA03713418D02117B8BA080BAA5C1B841A82A6384299ABEA3314CD546542444B8CC234CC83BE9447A762B20390D26687F864F2B569A2D654B7A425DE793255365D51A2CE425C7F433A29F32732F1790747532CCB7B6C5D0A0FD134B0BBD58528B229495581285A7A6A24A9CBE5453F7981447301001024D59914F31BB6C96B4E6B23830237CF3D4CC613D0A7D3DC8C43E210DDAB58D1A78FCB0CA024D64780709A52BB6C0D6139EBF50E9AC393E9E1B91FE5A712520934913B449B0130333F0B6C6F786230DE384AAA614DBA2B6AB4F84F1C49BDCEBC08CFD738F8E137ED98A87A2616F7F623CBD8C7C3E7AB4B6428302B0133C18097601D98F123862473BF267E5F4A721D00727249AD497A70198287FBA814B0A240A19C3653B21E4B806EC5EAA5766660C5FFBFB00D905DD45DEA3A2BD60B1C3919", + "m": "357AFFB4FB7DDD3DE405376B2149CC7EFC96D589A0C3FA6B3168A47C3C89BBAE" + }, + { + "tcId": 63, + "ek": "8F098C33C76FD7E7ABE351B7BA7A4125B20156B4BADCE651C7444857A945A03237BCDB05AEB35666DB1CB604C217E6862A4041FF7829C010B400943D9B34BC0C94498A78C5E134364281C992F8389A2C3E4849A40A17CF947C4C6B0A55A2D73A323009363B287758107FC7648FF9ADBBF5CC3315C8C0D278F000A8B1C577F39BCE8E92210E9865BD43423BE0A830281EAFB2C8D051BBD9EA5F611AC09E205502961CA6FCA43419700A1921218970C68A8956E3626A45B4C10A5AA9598761382F9477C4EE62C37B6911F7659D1ADBA590B9188BEBCA3B2C14EB163E499017DFFA90DE663132230A011B2F9C1A2D51581FA2255F87C5A928082332DC84F17A19C20833C284B11CDB61F9DB3B6A683B7AC2014A5847435C92E7FC47A51C13E1322546718F02F026F088612BDBB08E5218B9196340817A1F60C9BA4755272ABE64907060F32DD3B23819DCC76AA470F7490389970771657D0E9B305FECCD2D79715E2935D3727D1B4CBAF9060246C30B52205779002A16BBC83F79C31CF73DA0F53200454D48830409772E0E977AB7E4B6D4905E872588E6709F04D83DAE423F2BB25DCB83091E742751507ECE0C2315C04BCA234DED4A790AE68429E64A918399CE7A3C305B81206528B8AB976C334FCA0292C7BC0D39E4AED9196EC29B71A01B8526F54DB92568A0401E35292B06A3A6F26BB406065847067243B189E2172BEBF5C10919ADF674A23735079360AF81C405CF9A2450E26D235377465754F3919E88217B3BB128BD8633216B48B1677833B02F5F4A4B6D0859120393722C3CE246C550F1006C1A4C9D41000DB9B1EA62484A08139EA54A5A08B7023305100922196CB6AB54A61EB108732753834CA315B77C3A741D8FA86EA9EC696513BD38DC25FFF98EBDB296317133401915D109BB1E9B686C302661C6CFC4374B55428E98C27AB744521D77392A5469FD593DE4D1C8156AAB74A1197C9BCC9B566F8627B3DC494CEE5141D8C615E43A51FC65BD2A2A7D7D369E5DC39E225225C91350AC471D97C8161B25C0EC9A48A5072DA7442D238319EB5702BAA67AD075CCB2216DB4B47DDBE848872482D36578E0F146F4FCCF76D62B5DA2A7C2170CF4ECBDB676B269DC335DF516290307B8C0A2EFE35B6D3509A4126246D9B191D38BFA0C38A6185C74706B6BBC3B029595D3B2CC62115087792336FC2E8E3BC8C84B318FC44687D796CF18ADAA51571E990C316A9F415053D8C86D05243515F0372ED160832B7157C4920B3909DCA480438595FAE2320584722D37B45244CF11733DD0258D59434D0CE082863B10B8613E5B66AD13AC4C4B2BA84EAC068C971116A26E3E220B412C88B86C0DD7112F2A53AF2349A10A96B43214B4D5A38143597A9C9A2289D0C49273309E57C8051AA46C7214710A7067499105ABCA0BA532FDA0A261E871346782457A4ED3F46EBC79BCFCE547A6B76745133A7EB8744E671992BB73A281A70D19CB3D5454122A72EA4C0A084A1A5DA75F8418C55D92BF2F697A879A555105D00AA7987E30AB0655A531F19BD866B0CA8116A547A671617755BCAE9F705D93F43B0E71596637390380A21AC3A8FC1015218685EFAA6ACDF7092388B8D1B47BA57551EE7812B7BC93E20A1C2FCC81BF24CB2AFB74CF4784F03A6B9CE607E140C495F05CDDA9C39F74029AAA42084A301A25C699A631F70B71B3A10ADD2C5DB48B1218478F82D91C303109CDE930C6401CAD2475BEB1200A0402FDD40D0253137C049F53F990DEC368E24573E979497C7544E1225427053EFFB698B3D26DDB8CB3F5AA1F926A91C571BA5878C11C71BBFB883FB874BABCE1B8082131F5D68E43AB35B9EA7940A8CDC8960B9986C27417236D8B6DFF952DB0529988986BBAD7A8A0A156D6844053828869C2127219256DF27F26A74CF0E15485F0B8A6E671D7D8CBA377BC8753692725903E4761D70C22BB491633F379A505A3877C18FB8604FFC684D003B86E79C3F4D3BA2F114E2967092852C7504B73E1E911D93A26D1B8063CB3862ED9BEE8DB97359758B3F2C80742CC169583F780BDBF424EE19B19A0E188B263C4AB4B1C5D2328126A1B9E5735B083667BA6A58445238B87A377A4668CC2310548AEDE7B5210E329AAFB63D0C0644A512A0089385770326ECBA746865FA3A98400E1478D0AF4309DFCDB200CD42C0F37D639223A1B91952D37DDF93B37B6ED8C", + "m": "224195792D336E8BC9C7480B8428F7F98CADFF65A5E33DAA71D6EB41DEC623BF" + }, + { + "tcId": 64, + "ek": "52B340AF13C1D015CE9EC24F7308C3AACA0C9E284FD0DB248BD954361B8230080808338D3FE7CC858310E9EB9DB78A3D08074455D9CE0ED93C827439ACC4BD470162B59C4161046C8A547096107EA626B4B660C71A41922FB866AC2385E2E94BF748AB75B58224E5ADC2E33372011EBDFC759DDABF6AFB15B190A476A1CBCB5C6809B5BEDCD092A8D52780D65E1CECC218C02C174768D9E853A0E0BF71A8C0073A0A7EA29C1D994506A8C383A7039732026CA641F66883E1365486A60F20F6088E34775524A8181C2EAA8935D06C7EAAC48DDA30C6B763B2A1CB0C56583FC155B2F9571EEB1646B7AB54B6B055A8AA16EAAB0B38F7518F716F236ABD8984CFCC9ABA38B2238BB7C2025088A83374C50548505443CD73883D85B97DCB9714FA4247704DA306B524F609D9C58B8384951C6426A8329B0F33C5E5031489026B28E8A9E0F025EA96CFE1A1BEF4D202D8B618158291C34212A93B36C7AC2B08C49F36A9547BD43CC9F5B560957B33091CA2531B1476C854904B185867CAC1AE2C479CEF65782BAC5FD54677A24390DCFA2782C2BE856C2D0EA220AFEC3AC56239B8778CB55C1543D03A5E81CFA535B74C438C0379529026035B30B4DE611316E2AA32F723EA2050D30B6FF902B94BF48AC68039C33BAC0C76A39CB9A8592663F0D394FAF2BD74A2133A358C9DB8647A60AB842BCD94A1BC2EE408662BB8A297C28D0C077A274397CC54EDC0BDFF887A1BC29A237A61AED20ADF15B5A99223AAD445D01943AD90238205658265A89998AF96D78ADC0BC6A307A06EA9226E670856E072D33BC46169BBC56B5DD360AE124A90FC443A17493DD6550473FB7CF2405BC0C032EF9058A312ABD4D9873821A14BC5450E15BCF9B23EFFE89CF7402F1208C9E676C60FAB51AA1B2DA9E7B87C10522A17C368408E85B87EA9EB528C8022DAE0BE8F2643BC55B18A8866DCE936FCB323EB8A374109387252C715516FA76C9DA29681ED066AB79B53C394C6431560ECFB2584D26D1654112EFC1FA2FB9DF8F0464E060E6002091F2C356BE5CCF0CB3E133CAE4776495B5BBE11F30F0D240989B3472B1966496606C53296B8C58964BC36F5890BB218AB79C900C7C273A0051D016CBD0DF7915C7405905C364EF8C17745C01728B52F59CE6022C933C0C032B906164A7753B81C6AB50EBEEAC0E544011FFC207067530275B3ACEA028271454CD4BC57D949BBCA49D96BC9EF26A9DDEC78CE6B199BA3B5505216BA644484725B9631477C119911A117B41754185983A7E37236A99EA98264F16C30D694B47AA28FD3D9C7D16A47D2109BA0A41B31E286B73239952B047C4B9CAC59353FD954F09968E88114E1F13FFB08858D4926B016CD8765A76819859EF62698E5B55DA93DFFCA7DC7A570924A85FF23884D373EC0D05279645A0ACAA24F73B40542536656A00894B7874502218A51482C0E7DC8271CC5AD0D4119CE9218EC1AA389A251521B2E659BB4D9B676586C91302853E8A44D5435AF4DB09615483D002A9AA8240C61F8453D0B1C2653CF28AC52D5EAC2E0A80DEC0605A18095D76697958192F24BAC1132B9502239620B6466193E4B15CB1476C3189C549538048BF72AF06B52E5DB63D01107579796D0B06B5E55286C502F183C518533C2C8E98AB944BA6BE682E9415711D0A8A1B352E1A8A1404A6C769819A845C8F0F86142207EB1B6CF117A9AA12CB22A721FC8F7982F99086720990D042174A2A83F760EB313388190494A9BC48159C528DAB1D9CB9D956857D6F87A489089450A6101707DE4C94995291675C3C2A0B071D8C53510DB154844C614E7139F16023D38498483864B7BA9B2C0507BCB235173AC38752F90D3625452506B41AA8D69A86BC71AA853189556B3F727B30D86B38D20CA8B675300437E504AAA0D539165BC31BAE4901FC03362F2A049095AF01B2FF37612CB5A67D3978962EA1589CCAE70B12D212B272F5A326C082F51A325C0295E5B148A08256B1B311CC3A880092B2000D695EBD5429DCCB6678444FD38A17440C4102656902539DD690D0BBA4FEEC8302938BF7655521A5A91BB2C2E9A00A75BA3198745B720581C676B8FA6E9939BC05C007A42E73CA12DCBB74AE527A43A6C3D6427FD3A21848347029540CBD98F40686CDB7C24741A4F706505612DD21F5A9751072D862E2C8B925EEF35C1836A47542D8094867CABA8DD0153", + "m": "D42529A8BC0FBD9756ED1EB1D7868B16985CC6DCE075C39EA85C817288DEF29B" + }, + { + "tcId": 65, + "ek": "EF20521A13794FA6C4690C6929FB8864DC5347B6C5BD91CBFCF9ABB66896FFB65CB357565F88828D467817F603773A3CBF4733C3D06B5543A4EE0C5AF6642FE5F3249DC016B6DA6F73066E31F3613A292484AA74810632FD456A19F40A2327451D4A3DD6BACB4370143896041E22A852245021695A82036466451F6DE95F72E5349F22AAB8456BD08A7D2EC1338D176AE0803281AA6EEEC7A6EF6AA2BA1B423D9C04438A7AA761017C79431C72B81D569F2D935B71305FF2D84C56734A4886CD4A2CB6A600C3837C4C2D535802C5BBF2F733F4D1BE1A041D2FA5C1299734D38448B1D31444EC226AB757B5782B6BA65C63D8CF356801A4E958506854F7A806FEC35409B10C7071AC3E3A0C242B40462553AE7351DD51C8A802A4C08B89FA56200BC15938C945BD100AF347CBB1ABB540AB89BA7B3C6A381E47E8321E7286C73C0FA8E65223459660C894447BB07180A8B68C8E797A6200E482E9A0A5A72A7E43876B3065B358D9BE916B735EA02D4A55168E4C639FF741C3B9752A9C320DF917C55A5B57E3C98AD516A2878204C5190F3339885364B037968EB960831C8C2EDBA4F4128C622194B913832D0008B456CD050A3966C20A97B55A55F737BBB0788073286331762CB856900692B79AACE68C807A8349728849E6132DB6917BC37394CEBCB6A02476CD395E9061827E63A32FE9A9F72060784AC099508AC5E1CD17F4CFB806A9835C20393567974BA652935182B5660EB5919771BB41429E635C69E96C3206F164CC22B3F3D6CBE11BCE65480E35998E0F9BAE5583786F414A750C9F45DC975F35B09844BD1108CABE826E59C8CE7F0297A46AB6BD2684640A06C0B621A9797B4185047158606D794C3BC7CB765589FC4C0CD3FC3A88E97B57482C0BCABB03387BA723253CF827AD27167B3C8C7CA0C17DB94D39B32A1F2356257260B8C88CAA55594A9342B8B76F2A76B74D318266441C3924651CBA9AB8523A2E0800BB8B4E41BA37F7FAB88D4815FEE73C911657204BCFF8D7376F29BF6D7C8559D35BF467910DACB13454837911B2E4312A3E8B9FCD27BAF5A45EF0B4523929535BA61A07A98D89130A6D1765FEE01C6E3128A6CC10DCF16C734CC76FC13EFB930616C2CF1908B813B2648641753C006A492607B3099181BCCAB62839162165E0FC580DFB35288AA25C284C6978921CBC0538408974760AC6F3B442358398AC3B7532BD7DF155726A9EEEC62D205898EE065909C50BD5107E98822772640DC2CB7F5B67029D139DB63AC88331B579B75E9CEBCBED601799AA60540A7585547F04BB13C9AB0346B66E1DE81EFB7678242C89C9736DC58558EA3B0C028A0685CBA06503703088780FDB7964069C3B8260D8965F87986B18B97404A2671CF0190964158EB5B1B644553C42B3381981F48603F3173DAF66456A3183EC0C58C93A1D26C044DFD73E14C92A244214E9C85A4A36C4BC4A1835F3658A7636055A3386E541A59068EB4ACC4399AAC8F65BB1118A2D5AAB53B4128913B22AB624B0315751EC32058C64B7B4C16664B22FA4ACFFC683E1969136FB3667F3C154A95E4694C0793B9F066980D4BC693ED5B931161749F99F8E734C914955216970299792C06677CCF4063899A15FD3072A68841AD12424598C7B905AEE611653519C8E6B1C09241A46630465F1726D9B4FAF142AE62C62F098AAE4267E64D284F35C4F47F68A8AC3BEB72C782F3514C0864A54A0C8C3D35F34467587191FCCA819B83B6AF7E16803737A6CD5A6C5686141110771D477291A5B76667152413EB499421DF257D8488D79E243FCE7B5A8590E3BF02E64B517050888D99311534B6FBD01AF76DA776FFB31781809F545B9F90832B0FC392FDB122BD06D06B8491F1312C0346BFCD55FE468916230B4A9702EEA07B398647C417C454A9A2627D53D90779332945891162530E76529DC2C3135BDE1391AD7A74F3E512A661736C2723BEFE0590379BAE0B143514654DE0A1936F7549642578E2383740929088AB55CB20A27A9A15B2C3C9E6651D8DB659AA0C0D5B340A84B8F86B63C6EB78DB08541F6D3A871EA3188870790F0B13317B1FF866EB9E45C980257CFBC28E83A96AB9A3B1928C271D27A67A58B9175C400519BAD716C1EF54BFC346077E3C092D10A7B5661C0C17AE4596B80BC541E6AFCD663B13484890D1AB01ABBBE9F9A871249BF1F5B8CED425C1F94", + "m": "100875F2DB897BFEB1892A6D047EA44F809A8C735C14EE57CF9415D57023C1C8" + }, + { + "tcId": 66, + "ek": "30A19EA857474B1C04265852B72896C0529BC1233296922673237E251C1FD1A89F200C4E5886050BB43F3CF43F56C5633CFB93C1C64C71313C8676BA6F0C51B1B02CD7174C2A3274F6F24952A70155CB1227841FE0F4900EC3485038122189413B2B2C1528319BA9785F8B80BECCBEFD6AA9005676F3648AAF34484232005B81C42DC757B8879ECC175F02EB454E031764A991E111072BD9A62CF593161717215C547BA88F41E9A1D4D731DFC0004B44AE8E696476825B22378F10FAA5CD4505D4705A7AC7A258565D8062C75FFA0C38E297E20059AC1A69CFD84C1D6493B431CF84AA740F69B22B44BB791B2052FA7F7F6C51F6F0281BA70923312373051F53A78FFC523FE334B8197C2D654090A9E60AD134189872CEC2B79F77BA8FEA8414383134EC290084592EEEBC53422727F8588882C9BDA77C2143125D2FACBB76CC17B528965981A9EF8A4AC02313E7A552EBA0196B365C517B18AF9123C3981FA3486A84654C9ED833F1772BB6022540179064B97C10416422CC57E796A715E5B4144C3A078C70FC238F3A30C5DF8095646804CC676354A8631F506A5ED0418A823209FC3B885055519B62E368486ED8B571AA331A4776A081A876D3933EF59CF6F1BEAAE7A693047B5E526EB6E8908FF036D95A8EC6A4CF77B46EE490B35E395927371EFCF1592B38BC16765B4BEC86FADBB9DC6A9C9A423B9F54C3839AB9CAD7378622530CC89AF27904C605644AC975D1A5610CF450A822BBE7C924B5D5235D77761A7C68C6DA888FFBB138C3330874363E269AC8A95A6E8AB540003CCE5A730AE7A5D5C871BDE273FB1B8BEF15353BA07FBAD75EA454839B899F0E701F2A5A879A5833ADF083C5134F953B95F23C6E539A64202977684A0E84766E13299B0BCAA855818DD9596C8D298D19F4A21A97781CC80635D593111A5410FB3ACC2A5E5CFC8CF422B018E50664BB2B545CC19367C213282B41A54BC4484A72FC94F203CA6D673EE5EC5F0B421B3E1859FC1736115152EFC13ED02429AD53465FB5716AE6646BF6640652790EE5BA65878D01070584C436971945E48A7917052D3F542E4815006EC682B061B7D6DBAD33A10135FB50ED801AA2B6A11611A546649964CC5CEC1BCAB0FB95FED7CB0FC44B292681CD5611B1A109EFB92C5E8C5592A07F9119861D4A324C6C53A0D9573A2B12F02A85F6A8969A5B8CB3534B808235399B492A68C0FAB97C15D1993351A2602370DF1085E9172C46951F776AB42AC0B236D42C6D248A6D1C9864551BAEAABEC30903E5683A5F61CC2F4C6948DB394E991C53B512068C63796A854B942BD91C8A8896B09153A205A420D3F6CE13427F28C48D6F916FC97B3C719C818614BDA8B911BB7310BF212071AC5195C31739201BDE54B88E0CB33B93B2ADF846C6529DEBBA22AE54BE9C590A94951BF3DB40EE171A6E2453269684A5AC101BC8616BA2A163F4869B84AE3B440B6C24A62B1B8496DCAC1778066A682790713F2B7A73145247E9B2CE51F377D7B2AC35641D6410C61011BE7D844FE1F0C54F81104D65B9AE3671D14A20104995773A0B7104AA1045CCFA30182470A4AD812740108090A8823B4B5CD17843B2413E49F22D706578E425C614A504A54315E9020A66D1261FD958B5376E9C99B8C026955DF73DB481B68C699B4786AA4F685E2E3829FCEC2BAEE61CAC00C804B992A1660D4712007DD69512C490D6788FAC516EB93BBFEF9A2BDA41352F1ABE56FC5EDA48CD2EC74EB87A589C06C2FD546F736278427362979CC3D02C2EFA3A5ACBAB7FB028AFABE947D39823CC4A579DDC9B61A842B7E1995CC6BD14E0073856A605BBAEC0CA91981A06B55227FE139EBFF843C6080C2630CDEA963B8E0287BCA5C3903986B9E92340FA5E474AB0E77C907A7C270175AE7759109EE99A4D8B077135C9261478A2E93A9AC0739C4B0809CA8BD90364BB850A168235ECE2003D183A491420DAAB1FCEE6674F32A3F479677C7977EB670882B4A6695707A9483EF1445E2D911789AC834B98418E568A77B58A24FCC9EA3215C564CDFFBA18F9F1843769162A73736C517871F4110F952BB133B74AE72A9164C0FA0A5E41C8A791342491FC8282B38E9BB233AA2A971784232A4821F0F594D8F0956E8460ACE05AA75BA9AB395BE7D75A32111BB2940F293319DB178A625E6B6E96BD08EDDBDFA371B90975E952CBE6D9B3F1EE", + "m": "76C865E6B5794B3BA194EE331E4E816948B926F886FA9C1C86B007760E030C5F" + }, + { + "tcId": 67, + "ek": "24DB776A03719CC5BEC67069F363048F41348E14CE066978F1ABB74627A318112165219923625F84769331B1BDA2259029350AD7366935F909E4963B68785CD51BC9EEC65F10D554A632BD332A0698C09A518B430920619F424C21E1325531698168A902FB007704118A1B5587EA709F418DED70474F967ED9874F1A2962D83B9B16E87754370D0C629945D23FCA99AB72C535DC3BCC7D1983991BAA2E13936A1C8114522C7C1561FC623C59A3C81AA18B6AFA6FF366113204B56B5C5261D54162F8362AF18181A00022EB57F2B418AB1069C6C718536C375542423E55CBC59182104046B282741F312FA0685621A045A0CB800A3462A45807460124A17C4D8BC030D76B9FC8EB021DA14605F71B097B1FD287396B0295E7DC60C9BA4AD1E661DA82119442C05B5479F2C056FA4B86D5179F773378A27913C57B806236590094810A610CCEA942D3B08493089CB5957806598CBB5603ADA9079F965CD4FB02EB2726079983D5243502F4CA05B044CC2330FE95A6A8D70391614DD2FB26A2BC3EBD26138F357D89160BCCFC3F130866A403600E24436D9C3C901B5778275E650A720BBB81706166D8396BF85368FD206C5B346F3477204B4AA820B520322C1A5012AABE062AE4A26AA0B699A716A67C532DF77141897B19DA28496ED6C3B1A43A5E2A57C88A4F49C01305955511B95C37625F44FC5B41F147D0774FB0289393100845E8AC9FC500EC3A79E33212C9779477311234205BD88C82102C1527959E7C826C3A893C27638376F099840B50C8C1A708D31DD7AAB5ECD3AA82B7461E57A9E9A41C0CFC328B97CC3BFA51CCC968C435926B216445881829C47BE4E78F1F013955D75499D50D7BB154AFBB41F8F80545B493E601A58B898730BC842A0ABDAF64A544320FCEE368C242357AF2A9CF04374699156F1024868C43924469BB373A0F9BC89C303C966BCD21402F339802B91176B38837C2228303D3950969C7D8A7552658B128050018181D1A4A031F191DDE9481000D1CF6D2ADA22B533047BEC471462F26C12775B00692AC686369EB9A8FA159564E54C6E1777FD6023AFE43B8DCC1229C736003805BB4D4683DABBDCB16700D3C7F6BC130ACDB748F320994B2969AB6730E395C6A270254C698A3627ACB03522454B7C5E947D81C28B65B9E4C3A096AD878B1DB75D9480F83BC2107909B53E860A8F87D48CACEA838011404C5E57C1031C453440C05E350B32DE20413B3A5E7928A6CF63F1498A128D7BB3ADC1D1FC0C0DEF798438505ED539703A2543BA8B326560C1D12CF967359BF9364489583910A7F09297FB599AA831004AC65044F98B816421A1C98B3B147AC0AB74432B18E9AA0AF812A329AB33414877368D3924A957C4CDBC038E053E7861B9B382AD746C7E89205D57A797B0264FE9600F0DC31539A24E833433D684E7213AD32813A88644052889D6D5386814A1E40A186A9629D8255CB1C0A09CDD74B9070ACF5733D278395432AAA47D162FA87C451648B69A6C9E68268EBCBCC48600D87E00A93D42576C13E9631275FE166310113639C5E47C0882B35C13FD08ECB704705035692C11D8E947616F780A5892BB8585B8CDB8FFC3B7229779A7ED7C78753AD388CB98CD5C846521F1478C1BEEC53584B4321B66341E248C4950AB78A671AF6B40D63BC716444207AAF37AABF6C445EEFF3ADFCA64592AC7FF434A33D5267D4894109A53CD49228FDF97153318EA2934B80067B35CB124077474E5A2E367672A6507BA3A96E0BB12223E3574BD4BE0696C967453D4506AB3A97797C392AAC685E41177D4AFB60CA24917259A84839CA2597BA2B0C8822E39932FC048B0A3FEEE7B52FA63ACA42CC990C77D9CB87B91292AD513E8BB86179255424E3A75677925A188DCFD1531704443C19C98CE668A53824647C82ED21C0A0D776489BA0A09451E3154A94764AFE6163DCEA1E6230601E9946637027702398FDA26593958C277770E44528FB74A3082042BED537715A77F28783D51AB5B084C42C4092BBD5686BE90F6C54CE94EA512F21711214B38FB47C16640E9DA58C5FA00BCAE181410C589358B886238BBBE77528AA498217418E0923BBA7C793192317399749B55E3F9A7C21C37DA0A29721805F9DB270DB80B0F539C08498646BD78A4411C5F22028B69A9B57D3B0AA3060A71271EC2CA2B7ADDB3F7D4AF959E88055354209171196", + "m": "C829CD10AC6B551DAEFD57E40679DD9BE5F87DA42FBE9DC67BD9EF089FB6648A" + }, + { + "tcId": 68, + "ek": "B9CCB715967A7B74CE650C2DB8C39597BC6548295DBC1421AE17C179B163EAE671F3E18A975A701F351667B8C470A1A585C107F4415490231CCEB58E7397BD9A5C1EAED56676795809B62F1A3610B08132931B008B53A3EDAC9F380606D90C71C5229137ECB2EAC33BF9A4407EA506F590C0C3742DF81A8479CA5CC852B81378AA973C12C350CB4B56873AD3148D24A36C060CF92797A9306FC89C276CB407AEE7BF87025E25D12BC4B4BBA1107B9DC08DB8BC1DE8B19CA9511E592A8F82EB105151C38109B3C24B0901503452059232B004267C380BD15EC1A232BD6A0977FC95AD77C8DB9AAE5A182A9CA92B8AA31F1A2B6CCBD223B97760BA055ACD209232C000A29903CF556E4ED52F3C9AB65D7C66FEBC77A5E997D03C75C2F1C518A72ED0E3370981480A904B07645738C1110E4673EE946A7EE1BC7335993B483136920F48A1C13FD3B0E7A06D29C044C9060491E6673627625A58B240926B0556379FA14E7F6B81609088FDDAC52DF994705704781775F6C92FBD0C213D997C91C32C0E7B0E7CF87F7AAC4BB843C55A1145FE1A5B0263543E49C6A9178A45C82B18F5565D15CE1DEC980B9BA5E906BA8983228060B2C4C75B99A84FE792497FCCB6F3675BA4DB995663949E43C9FCB9620B5AC60EB02344D9A37067724D7ACBF6C0021D076791681B05F6B9E3521E46324CA10C709D58B525E06AE70A7E1DF161F55773FA1B2CA9F12E495425BE89767FB0AFA9661ABF4A08C628BBFABC6FC1161368C78852E8AA863CA35DE773C05B27FBCAB15DF55DEA2210B3349733415E2F2C7B81D8458E0226E2C4CFEA296BDD2C03C594C693296F7DDA19287215C42A65B45AA9D8A60C460397CF1B81EC107F5628B4F498735D23CE6CD00854AC74195B7A9789877AC6B443693BA1B616F7C14353C55136B63D860A14A0AA4C3A23754A6B16D65B9E35840F677171B02CB18C7B70077002CF03005B3A24F8696192012DB3852FD097AF5FC348339B906BDB1514A24CA2E231723B1D0050AFA1D6A70E5B58B13534CBA79D54557D60A03E11B9B90E02539E05547673564440364383B142D8C835956F8AEB9AA1B4A65167986A5B173070A373324123C00B56888E18562CC8D3732A552A7B1180BABA9EEBCCC069839CE158115E77198429CCD016706A969A44287B4B2AA2DA36C0F9C82D3E0513FD87BF3A603DEA42B98E12015AAB06DC830E9798A8275866FC4A3A3849282A298D29048376201116F2656120C429CC4835E85C12337D5AA2CED36C494303047ED482C218C44B18CF6B6B551C7B439BA8AE58971C82AAC5E9912BCA5AAE7E719D5FFACC45F0449AE4CE8335458760CE9A8C9B0633BC42049D8EA23A4C31109407D0A775025558221F92A4DAE587E7821F7F130C1EAB8880B06BC177A870A34E3D6A00E8F43CA38098FE59A6D86C8856187C7E0A7885170905B335CCF8CB45B2912386202A8569A78A65EEC9B60C9B75C6DAA25AD8615F8117AD3B2C51A667BE3328B0F37A3D3CAC1486C9502829532B87233419A7559D46CBB7DD5BB81B3B1C6CAA84E1BC8F12679DEEF882222AC6C0F34206955B10499711EC3EC2D93AC739BC269052FBB93EFDA92811D95ACB02C591EB4EAE8153846601B5DC9FBC48568D3692C22C8FA1EBBBCB0229CE7659CC5111F5E9949266ADE1A66BE4C3A8C300B0C7F1608F95493F392CFACA5EB3EA98046A27AFF8899966894126A6D2BBC38EB64FE8656F18145380C0A143549CB38420A150ACB84C78989808E8E9048EFB7809391EBE34AA0BF79853D7962E446905132132F3CECC33C123342AE0F9435AC29FC7E1AF1AABAB682C4F0F4ABFC340A9BE82A6A2FA810AD48BAD259D7BA38478052348F5715B31A645889092BA9489962F8598AACB28A2A521A9D4BC5AA9485964C66B0EC287170927239397933C3C6533496874729575CD1A99ABAA1129D3C694B31B5CB81C98B6F0B21C66B2C8F7022879B075F0AD6323CE37D87EBC98A8B512C5B00A9DD3B5CB581516031C98B2E77E12F79EB2376BD88A77176591868A2BA023C86ED0626B5A648F32A4962828259529841C9F3C19C81C0A9E64C847BEB33A346763E9B60BE532CFDCB65F2775AAEBB94D88A8CCB96A491F92830B7392FDCB93ED6275B2A1793E821EC7BC66C73AB8BBEBAD5FF0B4267382192044BBF2A96F6E8F599213267D70A1841B541E5B0D687C5613", + "m": "F96A2C83B2820767333F97B96B7415FE68027EBA19770E8F052C46037523D01A" + }, + { + "tcId": 69, + "ek": "BA0A092D326EEFACA399B3309C1A152CC6BA9C0CC18D6CC29C1B13EF2404840A49E4C30E638B4F6827589F7AB5BEA183BC346214C96FBA745F25A43BD65C73CEFB1750416E47F86EE49A23749386D401974E775CE65BC57A21B5E62C80CEB87FCCC250BFE5318C92A036BB8AE320A185F1715587A76188266EDC0F01F29148532967992A56D72091F584EF8CCBD77C25B28098979A51839A8909AA02A5980DA08936EEB1B86F4C6628950BE3B8736A0A98A723AF903CC000ED857F485E59F67A5DE20787035A3654834F8C3D2F0CCB76F13A491605CF5530B7915650C1CB57607BB8547084DC0BEA07C979706074997B1D46541EABBA7EC2459D202DCF177E4A471285A24D95043DD8C843D7039E47321601F00857998B29962C8D8366BB577184D00D3C089913A2097513C3CCBC49CE6305ADF9933E3C8FAB7576ED52C0AAD904118958E4761D636C4AFCE008054616C1D4A6B3E47FB3988DD559CA26D9309BF2B86D738529A2639BF02F330AABCE0873481188AB663CFFC351E37A1AA10556DBAA8D8285992BF487D2900B7EB74E4C89755B1190006BB42FAB4C712A51DC51775703B08F02A77ECA53EFA6B8BE760C530B0246BBBBD77BA3C21B8371F9022E69085D594E85504963D6846A6C3FBA833E8DE26DD2AB9DFCF15ECAB2A26B602495215D4482A58456BC9FDB99038261C97302D45A515B93ACD003786C70B2BD987C56F536F9758840DB6524AC51096577AAB445281A3C65B76FA05CC5C2D57223EB8ABBD859FA1CA2BD2C5B2AD6216651AB2C4B77199B51FF6B8AFDD188C5719A86CB7FAFD0947F00C415A907F5DB916BE311EF7BBE121CC3897C08A6E5123E5489B54617DA6161B4975A241A2C72AA987EDA9D30C19405201179FC97CE0005D1761FAD8B01DBC74CFFFCCC64BC9D7A5C768AF390E6A953D368AB14120933065B334275513A579F27919A3CBDAEEBC229C7ADA403843312CBFF9749872A4B8A89099B8B9EB8746295E3093FE210CFC34404E6690FE863C2E1CC1A80A5727312A04B198CE2BB36BA845C142EC2777847D40F935288A858280F510019E128532B8E8C14A3BE606459F05D57D465BC018AA5FC52A4269A74E04846188687A87DEB86260F152DFE0294F4EBC3A0868965F89DA0094F9F0C9E214C0409EA93EAA08823AAB0B851BEA31A6D1AB1A27A0487870035ADC18AD9E09F6104CFD8A5985AC85EA135ABD2E52CC8491AC87247F86BCA3D591498C6C2276227CE237B6E665BA1314044C1BE9B9C85349B87FC9983115C76D84253870855A4C329A323065A5A4D4726161F473BF5B23C6D764F033C548FC0C4EA3057457A2622275002F029B9F1C1527119497C05FA433B83A46670922B94BA3B1259C7E49386635882E88A72ED3867FB232B74A3729AC7507D59BBD994B72CBB3EDCC7B3D8D0334E3795DB740E3271BB3F8C465D1B1D64A716F34C7DC1EA807A94BB55B75DAF9476658477A15B033B521607E069DB949FC64990E50702278132DB6322C19532398A0A2B186E555C7D7723319DD9AB4C196A24639648FC57BE134582562E014A9C664A418D6C5F6C00766B93AF5E1CCE3C8C883228B77552CBE0C318C0D407B8D792F798657BF1A62723ACB15089E10ABF9E1C0BF4F699D631CA0A98A53195440B87BF38DB43BCD86063872AC1B2406A516803BC0994383E64DB8213E98874116684271C3E8CB2A3049F7EAC3BC5A8B5E39AB5BE232C355552CCE654D989CDAFEBCC6DAC484645B204CC5A014BB7679267D43B5E2097B97B19AA6596605892ABD74B0646B91F9752A3C89348D069B69FA2665B75BAC5C83E1D55368F321688E713C243901223C4F70C5616A7B79EB50F93148AB2E38A619B8AE5F96727DB83E7C56AFEA1A9D471B40BDB6C19C030A8CA4F40755B7472AC712070FDA07C6A282C9B491B54B8C89E61575EE76C2FEA7D99B637577A5F3E30121BC3A54B8790488895D7625D1CE88F52ECC3BF62BC2157C32EEB7F3CD3B3103A500819C47DB2915F55A7294A1F8ED66EB3698EB8568ADA4109A3808311065A6644781E50B17778512896BFBB831E0469662DB60073A8454882A5BC2AA9D49538A664ADFD23C3234B569E31875DF545489630B5C4B655E94D29F49470AA5ADDEC2B2C47A8B8452C49E28206070645946F5985D2A6540FDC5962E3871A4CFD334077D969252271C8AD942E8EFFD76F44F5", + "m": "AEC3D1B909A1B0187A29FFCBC01A3B6F3CC7AC665249AA461034647C8E4FB0C4" + }, + { + "tcId": 70, + "ek": "A68C1685049B376654A2829A5C294975FB236EB9765E2150276809D9C18ED1A997E2242DA0F7578A8562642464D96C001D55362907314340A3D6875D034172D3952D4F91C677C803120BBF27730DE074B0632319F636CC1CF35F93E771D2BC044EE74AE5724E51C8997CB5A1947B9A27600119533A6DEB8766994974ACCCCC31A302DC86A5E8CF758742B13C511D35B52CD29D16D1448A823E67690A21C02CE4578E61B3CFB9261CEC389DA91992954BCB9A7311E4808305576E1127ABD83C5756E9B7ED56B501C71548D16579446518E226EEE74CF923CBE0A37C9B4930EEC2CD0B84C29D366AB54697505A7B8033CFD4622CDFC18BAEF507BBE6BC3BD44D0E614278880C7A6587ADB78C2B955B55C373C2B4885948300B706D30531220D75EF9494DD5847039500404F776BAE76D89F62A528686E6C4B74AB45023C7B15BDA00831524BCB918D12B7187993B34D10DBF334B8BC94756B02403DC132C1B7511C2BF9E1518C31BA30BC89B5681A60430A0BF6C4F99378ED93B151CC5B08A8A538DBBCAC3C38E5A8209C2DC2773CC5FD7F14C2F76545A3940E89B089B030BDED890C54119BB151894E2AD0685331A208A5949C15C1B7F7A529D7275C479E22E81E35FCE8183BB02776D68A63956A4ED079A6BAA741F1C95F1BC0AB6514511763DB233AADE0603AF58B831877E0508B1F587C5F7E72C39E3229655B18B438C3E07D0394C5F061C3AAFE042D480C68C2058DE40632B1CC6426BC688403B0541498AFC071D48A6F55CBCA8826D8D19AC7234C8B16B680956CF7111B3577045BF47B04479BF6C210E29F4B37D002A5CAA9875359E422764FAA7C0BD7A0859466055A6212D554350B29C075ACA4E092643A499363A848011623A978E590488D3182A733644FA3667F091766E806CE2DC9B79AA7B958457836BB444482A0094712B37BDA9B706C061A1C7408757C13640F4644A58962F307F3A92B4A0F32F20D98FB9C87A378C9FAFB00083320AA8CC8AF9B95BA43862D9AC14856266B418BC08A01BB1EB5E92636A6D0C0C5EF73097428F0ED91BF88A9548A252055B87B1129EBD1C78258A2A16D998F9203E4A1A686B31CDB15B1353A330A87CAD5E463BE394BA0C6ABE19F5B9C666396128CD750962093B44C4D26E854A9F9AC112FCB3BF0D2CA87774BDA2B8B17994266B10751B78BC9DBA04FB6172E7BB70DDC91103279ED9F410EEF05C7BA39E0CB996FE8B4456702BF045A61E36BA1B7782D9BC39FD8C346CD2B494905A32697B86883C8E84544C7134FEA479CDD4A6F4196196F70AB6B6A2727A5BA593550FA11E7D8BAA7A0C200727CDA2C1103B783546A554AE5101B9926C137485D8B77317A372BB573192F256FEDA5A34446AB519A412F39F84BA38D4594F26E62738D3C2C0594A1B9B3CE09205B71378CA9C77CC6925E2B315DC304D252B6EF7C252378256A2AA6F2902CF5A842B4E61B266F7039C71ABEE26BD0EF88832E75506CAA6CD5A08E57723C4A67615F38A3D2A9CCC3C6C1D9B70057BA8B0E340E77AA6B3E76CAB368E57B3242817AB05A09DE8798CFF8859B1D03E836A53E6ACA48AF2B50004B2EEA19EF449290B927243817E38C92B70267E8FDC41E26B9C2BD6C2F3C927AA305E80D98526BB2221E62CA6F23ED895335DD16BDE1A62AD6BC516195EFA659D46241553A6645E8B889A14A7FB644E6D2B36A190980B8297B28097B5E5896980C2417940AB5B2BA4931B976822CE1C451731A270A138B00A05E5CC16E7F07EC6B486E06AB616772504F0132252241283CEFA603734BB8A177C86807414EEB339F62C73A83524C5731AB2786AF6B5188AFC810A36C9FBAB5EC8DC0043E072DF6097D594A5934091B2BBBCEF0BC81AD334A4228975C30781E6CA2BB15F6A546538DB6F68B768B1A90878B41C3944122C3ABA45478599435F0AA304EA17A50BD1A8A1A88F63AB3116691E78C94AE6CA1CBB5B100AC635894623FCB971AF1154F8597681C87F62E26A7F63409D7956EA9957C72512760097FE86740E66C4B38B7239C3358A50CF1051A6D11219465C85FEB24331525901EA159AA4556118B7A050BE0861385553433A58A7945A850A475D6C967C929BBE8C16705471599CD16ACC788E709244C2411E08A73594BB5EAC082148C5C73D117920B5BF31D0213C438AC0BB6020D30A98756460BED8D945D889CA7A7DB328C44F43188D", + "m": "249E32490FFBF7E5A7AD78B73E8968F434E6B9DAADF5B8FB73DD0BA450FDCB27" + }, + { + "tcId": 71, + "ek": "C4F6942BA4CC3C571DC0285BC541257E5A23C7791BCCA93D3D523E601A85B7C284D3AB804CECA32D33737F39AF9D83BF7275150DF49B8C527F1E3B674FF3A1149A995CD0872F899196D7A5B04C36E2057CB8F91E60A166D955254519325E94A95633C534E1149003CB78A8CB41D54AB822C7A92A39C2B88723B87BC7E071BFAC23BBD4A28C85B599D042B80A7B68D0354CC0A3DCDA6E8B39017F828C6B6741D6949EA5A9B9B2509287027FB8178913F6007154404F00C60C557C75BB9D4A21CC79937C8AB51A10811A53C43801A96691ECBA362406E1F467098B6E43C3C0BEC60E1EEBC5769B06B3D2B2B7F3259174ABE7732B1CB03AE7BB2052A430ED1227FA1B29FF37C7CA2C0F11A7033D72C2858461978BCC3F195791554208E31CEA147D995A372A366DF7743DFC5366F2770EAD9C3172AB71C064C049D515FE259879B04B0F568CAA0A477D53ADC7D1AF0058B5F36A24149A57D5071CC347C5B6E3CF3997503DF1B1A7060B1FA8C5C4E567C2F586AD5A3C2941384EC274F9377ADB9A019AB10819A79D72235B8E359B734915D6C27ECBB1BCC999690CD097D723BBE0078BE9167BF3157655509A44D3635A052C9D5B47692C126E79BB8EC3A884153C432BB161BAB85BD98EB816512027CE465514352856A7891C7F11025DB528F60445CF133F484A952DF40955CB12314828A0964ECBFB8829844117BA61CF175C0346CC0AFC81368231ABF40F11B5CFBE51AC499596A90569FA6B0162E8CAB5602B7DB46BAE45356B68C96104B5F8E9545BD697174145EC1948DE76AF9151C69C157D3D5C40EEBCB92D428A2CEC63F8A46B514C065D1BCA8B65407B8C5E3D91185AD8C8FB936441824985356BAAC036C7B4A84A4B9E8875AE1FDAAEF499C37C1126D7D6735D353040F0ABFDFC8B2EE8CE40B71398E58E46F2477E7C1D7F1771CC2C18AA433FD37B5512153B119B7A6D629883D15022897D93B956C0E2C03D691C6942911741C9417458097A99EE346C6F72A59392BAB93C45624AA0D30A4D52806A22D2C11A9123F9859F1E7C7444560BDE386F2C7B76636740E58C9DDAC2C66ED32E3A4AA2AFE328B9CB6A2ADC51C52C68F4D72638712054970AFDDC08F9B4BAA936C6B1EA04C149A012653450435969248E0CEC951DC23E53237471B0507449139664685A25538FF996E42A56138C68A430CC342CC5C7007980546A94C7B24CA67275886455B5A25481CA62DB14391C03D1ACBC5AC93815F8623D137DD932C3B1A8B95576533AB12E9FD585F4606F2F740B1BE2B986BC8726880DCCC64655325F6B6228F7797E8B592B18595E4A8A1800EB8218866ABEB1C54E9C8EA88318277C8EC06CA1EC01CAC8E0BE93562515ECCB80B34AE658BD6CD5563227C7FE80548A29A346394C3C262615182BA4902308373498477632662AD31202E6466713159A34342456E61D74C6C9CBDC8E849CC98F315CAE504AC600286917721D8886A1E688FB79498EFA704EE70E27978ACE42C9F3656A4385848536487633BC1B377FA2ACB15D0A21AE3BB77A41CD84685DFA6170AADBA186B4732BA0BBB30C01A422A8E464ACE691233266147D0AC0F78AC4A9DA1D6452753390C040A66496899ED41C6738C5B6E9E54597582270EA5182F7AB0709A324D4AE0DE78D0C4822FE825064F5B1F240B9C93B5F520860E640BADAE68F9292AF19C10232467E72038AFC4B9080BA9DBF6293FBA11032A76BB992CBC4A12B62EC5E7E221EE10A17049B0060DC1C17D5AE64D90E85170B919A51C3694DA9014D61623E2190AF0EF323228005FBC216241BBE7D87793C23167F592FC9AC3DF268412E16C433E5B5F6A5BE96980856337FA3673DB4219B46D1B21FE93AD122B5F75C2AB360031F68238D26AC1C291350D563FD2927B59602278AA75871B02B0A4EF4280F907AAB0C47B5B010A7CE0834B0E900E82B997CF02277077F64F954F63790B9796956CC9A14178D76A66A82A8827867C9981BCFE896B9239C73C8A16593E49EEEE48ED0156C9845435ACC9D733591F1A10EDA9056B550C8E87717822623C169CBFA21BCCF34A4396C1948F2760E26C8543AB25B89307DC828CC506861CAB9068141F12A48F1BC1F74CA8A2B79CD5B584E626204BB302D09D49D2DCB0B66D5B99CF449ED401AD6108F1F8BA464D6EA1A4E1E01EE58F21952C7F3BBF9467AF5C950638B3D26A8CF88ED1CC132", + "m": "E7E42C33C541BBBEC6FC7BF1ED58145611EA7DA9DD2C729FE4C5BC7979C7A928" + }, + { + "tcId": 72, + "ek": "66CB5D55A730A9FB2A1C275AD73845B3DB76C773361C9C2F1AFAB2FC5596A9306A889C178B5487D56A0E37130072E553B3F72DFC0B571444A0465321103C0B14F47DCBD21E723C400F72BCD5C7281AE1275A56B0D2669F2B8CBC5FECA750CC3DE4E937DABB98E501AE313C2A7B307E8296C4B928CC097894E1956177F065DAB01F3C6BA31B29A1BBC4C5A04CBCDC57B5CA8B1984E6BB6AFA89511A2E31A45C413B3C468C47A8658718F711F66741C5C685ACAA16A6749EDE7202643586E57771E24B784A3A20000A2B2C82CA78F974412C0263B5CCE37696631BAAADB9B70491BC205B6932D501630CB0BED642B7027B8D3AC2B72C09782B0D9D50AA33D6713ACB2A283530B5E25470D73D2B206E45E13A141393A4144BD2E00217046391DC38760B19644031ABF72B0C0A8A7EC91BE6D1BC3021BB79245E4077BA93920136385E3D0A145DD9041261143F54B283A7C67077ADAE796DB52C26B65740F09328C53AB106167E215151DBABC525089CD3EA41001B9B480105743A0BEF6408ED1B14A180C519F4B509D73FD34B3CA43BB426D4A63ECC676F265DA46684D439B1D0294CB4A0A0275BAF437234C82046B5FB443F867289DC256446CD74D10E33F02F00B95609169143AA1B2017539F86A71DF5235399178D062EB8143E728194C6311870689593981E33D0778D989CB42CC9814A5BB458B1B02576D981203C3A0B86C5AEE50A65853219787A88EF85793BF078F4458647BA40A6C9972B103E0358C51103BC24A61363AA1DC5C34C2EB4AADCD06F4617266ED77CC27467834B9DF7BC98750B0EAB7C2359BBCAABB083F637579A0677FB3C0CB6F086ECC19B37065E4DA8433FF66CA2DC2D57C04B18DA3103C30EF0B5B750168289013193BACEAAC84FC2A56724CB8EFAA69DCC83C84A623D3407C5D818C35C325F2C22C8ACF45CA99B73B638910412553EE1AF76D9B62D1BB62BFA659BD4B924B326C31B81485142896A9D8C49AE33ECB5B5790AB2404219A1C584B4761F2CB54CA39E76A0CEA0982C146A9610C69CF5BA9B41E398CA3A1D040962AE4B84BF4C2B6980607CF4838E2558BE0A8E378A24069152C356C1E9339D58CA3341952C5BB44F293B95201206AC87326D19805B71B976E7A756194E5BF71EC7D95AD7F4507E499EC88A53E3440BF37038521C02A6544434D2C925E34A18A349EE42350E068FBD0040E5F52EAC0C095E1A5D220091176897EB4BB2A1E06AF767CDEE453707540D6ECB5EA8CB40444A049C810F5A626311045142836FDEE74C44FC29BCC64D5746C15599A749A93A5F3327AF910DC7A74979A585DF373219A3C2D6207725BAAD067340A8B97765269D0A799AFEA889D5C3084DEA435830B19C09629445481FE6804C89C147F20CA908A086446340E947B1EBCC70B7271FA35CA762C19A7564E069141A52B92993C6BF48979098C34579AB5B042EAC1057A7C1CFD75A37D5F16A2826C7E20CC244477D146C05EA291F533C425D86BAF8F40209B0048AB8B89DC8AC67F0ACEC4189EB78237925995053AAD5ECA6DB9C10C4826B955A6B39368C3BD14C3E09499842752E9716DF09C1E868395F91B1179AC42F700AA94B851A3A87F8B77990BC6D61F067BFC19B1B3B7BE08C907C7829C08205A6C4079E817B54DA79B5049CD4801146AAACE5E6AF4DC7C4A8EC7F7FC348EEB25B896543ACA314D9E0C09DC117589CCA9942BF8675CDAC39C69228BC6413C228F224AF7BA2195C7A46291ED443848661C753583550C29D04C6994D718335959CDFC996FC4B3B49216CAD873D213CA36ED7B6913BB53162CB8A16AF95845A71FA822E532EDBA773832432DE11AE71AC31E4542972984EE641487305B51798C28929BDF516A24617A1D7D778FF88C5DC0077DBC1A3FCD48D4516BA6742A1C9B8B17C8B7BDBC8AB08B954BA67BCF1502F28BC8AC1113743F169CE7833DB7AC42BE5557BDAA46F8704936B3F36F4AF84EAC0E79C515A65AE18454D1A74CF60FAC062BB41A801D0BD6783479B5E1B80A3355B715B4007BAFC3B7F1CBBA82C418C096D0C32C07D7533901968C08CA01FA88E41842DA70CB5B7D71EBB7A78FDA21AB33AA325A87C9A3376793406C2B6C422A16495B96330A0AB468CCE2C16B00F9857F3A164B4B2AA48AC2D550C9A43B367A6914A7628F437F3B8D85918653320500D9E9A44B32F41281F64A33D6D6055A819EE47", + "m": "7A8CB007CA98491AB2FA051CCAF636FDDF29C79B7EA734A68F1CA86C850083D3" + }, + { + "tcId": 73, + "ek": "B4E4BE2D96CDF15184E6F92EF0B8A6C23811A55BB6A30C2DFA0C8011E9B454CA7A78A24465D0594EC693866B26787A9D4C893E13A90C72A669BE74B44A5C8D1F53A5829B50360334B197B169E2943A08B4F017CE2A062F2A040F3501267AF4B85A870FDA702099991FDAE240A97B1DD5C9ABFE26C37DD7A35A036112A87EFBA358E0CC3185ABA2689A07432A9FC4259FFBA396B241633E721762548D03CB56E91A8FE2C6A92BE50032E233EEE040FB0837560C23B14271064476219825A66A4B1A2215CEF970B161A502EC87AB1B2C6A571C545A49E684BBAAD40719891031B0BED8A3572F018D7D679EA95189F7D2C263B4BD5B7ABCFBB926E1C06FA8C95175D32E12F4B7730B78CEFA5D5F92654E311A651820B37705C22357AFAC9F2F1B0A184773C08548548BC4CAA5B9E2B26D5664CCBB153C9F018EE06CC662FCB3CCEBC11B144CB70B026A5AB1DC38BBF6C96CC69ACE8D84469BE77B3F0996A0EC6FF1C46C49B629332AC05BA4B138660F53E13FB5004AD6C491E8D2049D8B738C60000A235350C07FB5585CC77768E150BFBB11C43E797CACE9C370B7360AF59A2680A7AA3BC1A11485C2F53EF8E43AB9B12544B2994D2A962613A3A39A6BB44B71C63237AE917403385DEA634E1CA28E4058296D4C3E750A18AB712F0EF98214A539EABC011181C809351ADCEC240CE33AEF01056A7B668AB96B051560C4EC605864407F028CC38794EE1A6DC9D6B865FCA577BBAEF2F52195743B8E8AC8C460A7465948E2951C2CA6399E2970BD7CB41D1C78889C24BA798D7F4A96E4D69B39605DB4544A5EB010FDF105E23BAE487996C82B1732223832DB86972427046CB503E57D0F0549A8F884B77256456A6C44EB7D93395B58A4CD7491286459006043372669137F087FF60A8CF63321CB5C1C1A241EF42B19F10B9F939625B6769D0D7179B240082CA2BF019A6C987639D492529FF9B1D5E397B2F66B1EF539BD4514C4286929E2B664525499C944A692338FFAB623354A5B57BEBAE49F33C6C4C5C85236CCA803E44E785BB9C1FC83ACDA51D428364A542BEB4B60020C1A61515F12B52B35A76FD9844EF97B912EAA7B0409A18565AAD1A95AECF414E4857F35F5B190F4653339051138B9C6D74601B83CDED90CAF99B7BD5503C832BD149BC7B6874389C0AA2BF14420A3A622C50285BC452D0A1927504817387318A86CBB87770D6A628AE528025904240C86136030A5E78C0D80B2A8C780FFC90AC9F82D0052C595F9AA4C0C3DBFD83957A2BACFA14E11E48548C334941C80F761502BE69043566311072243705EE64C0E500B72F51C097EBBAA28678A720796A2CBA787C895B0835189C15D63E9AA222C0B1BC80C6C113B1E088446AB5B243273B7555CEBAC3C8E3547BB0B9E55831CC612290A6317D0AA9C60D6A16EB05F55AAB741E759C89C2AC24BC3CCBBCF321C878B221FCC431C297BC50D218B59B5C283405BFC7B13DB8784A0B1C969225217A95C1B092170AA57769A98B209B5C45162FBE190B48BB93D5C183F72167CC99A79FBCDC404C2184125BB7568DBE74B3262252610669AE115D0A1A2F14C2D580BA8DBA8C039A83C6E1064CB7B4641C330270C1E09EB556F363DA09C3029FCA472914635E89418A8B2E1635C921B68DA8A59782B31B9E3AE9B86A3BB69AA9BE6A61ABB419D33886674932E37538515987D8A798A38C967763ABA1B9FAEA62A3B9B0F7B3A8274EB0F95A21DDF9C5514CBCA4C0CAAB0DCB27AD42F3311363E707AC4E46AE62A5F05B43E4605B5559C991DBB9D68282DA03B178E6866C124C9655810E5921030AC403BFB164085C6D49B017F544E515607825ABA3FF9826CB96B1455871AD82A834AA04DD80A0493680E397D6FB0C6E00946DBC89389E654589B86AD5657EFC950C338CB336614BC7C76DE914AA550A17A27405F67C400A5BE70E382DD824801455863A3B4D41513295102D9031613796B5EC3A771853552FC18E4D6440E5661405A9822F19D0AA9C637DA32EEE104E578672B226BB16092F2D12DFAB573A9B279B9E49D72614416F7928EB9CD31C48526419107543ACC5271C6649F8A64281A067D0FF10F4DBB43C16A25F494B3E4D79CF66539602106BE0BAA9AF626648AB67C1B6C18424BB8B4C8C030B878D1ABA7282DFF47118303DEB780899BABF65DC4832934BE586AABE74951FE9FB2E1A6DBAE24721216", + "m": "B4966D6F6E12819FD32A99E8B911A4867D3F056ADD1920920DA05B909ACB1041" + }, + { + "tcId": 74, + "ek": "CA077766543F325675DAE9A75BB57EB4050800A51B16A1AADDA33F36495B167BC7B196C48C94C653B28039E915274B74D36B754941869EC24BE631A418EA61B7675946C7493ECC90A1B716845644015799E093344E0394B2D29F9B72391837BECFD1BE89E9238C55B0975CB9F4E39481686402739B933A214D11CAA914406EF270410A1720D0AEE0A94B38109827F9BA0A0542F2645CDEA82B1C8C649430BB2CF80802508539B9685A8C4C60F469E158951C5469490A8AA2C2AD7519967E61A58C49760BDB446E118B9AFA66CCEB57CE8841B702126F8C6F3D609B9D0A78ECA26C3F4591DBD8B801D231756139A73A4AA0F638D380A9A8C3431C021155625962E86921B78F4E815673294A7B0328131996DE54B818F2C66EA295D7C62EB1D408BAB62C54B31BD7D386713CB88DE94841733504B15EC7D6312A7409BE56B2CBE145BF57C64395B1EC4294C3D123694755095923A1E0CC172A10272404A578C48CE04424C7CB2C291962740A5B8A43CCB838FB633104510A46BC86875609367220E4147948A46CE8194DD01825F20B21AC478BC377B2FC906B6690B8CAC69B3AC1225F5B3F183888631BBB418A869AA5920C1C13F2F2010C98AA7063861D9CA8D8D5589A0C36DEF96FD186769C8A5756A56744D9ADC41C96A2745EC7982F9FB97CB272638837340B3A4A56E902127369D1ABC06B9B4FA4121FBCF86F56025B5E46A467B6B18386A9D00164486164C4D609F64B488515BE2276B426C670F5EA79732149C865402AB97D6DD49892559D9F70B796A194E867B862F157AC5488F5406EF871BCB3A00F2B724D180B2DE9C78249F479D6F37F3DCC19975429AFBA15C28C6E0B0254457305D192B99FB3A47F85B435015D1AB0CB7750A0C82885ED3359F6751602247086281A31C3303307519AB3B9F2F496D7272D4F527282196C65262592DC8138869D4B5380869A5174D2093DE48AE172B66280B3E797799844A7F5BB14E9C013BD9461761B6B1DC26E6EEC61E9D6A15493B1BFCC091294A6B1937F8C9B99CE5B8EC084C4B8320203011E757A653F6252A941C28E7B0BE3D18B14B8349D9B58A7A9297E43A006D7586D0CB7929971C216BC500BB0EB11CAAC1004058469C60A1096E93505E639CB141842959EA1393A6EE7684F25AB59C3CDC3509556C9CE74B653FC460F49E82A06680A63347A267C6930172E453C383C116C9EA222E95ABE4522594F84C52F973CB96AB8F39C14F99C9251706824A78771B425C531948CBB2285243646EAB1AAE6C749F0ABDEC726690A912E9A042444563F2A0338D2886BFC9939930045D69059C50BA2D635B734698E2390C7C75651D85E5BCC0B5A74124F13706E2A297A012C528769A514134C98C2AC35BDBB7B126D8CCFCA2776D6D3603F31119592A0BACB9E3F183DBCA06CD159292F6B17A2D3831FDCABEF041F609579AFD287F0E275EEC2755047908C3B7DF601796CA4CD88C4AB7C3864553968BAC43001F81A9AA449EDB9680F4487E9979F769BCBF43CBFAE2B7D9F8503E346319520ABBD3285A1BA0525935183D22258BAA37BC4030CDC2F261B778FA2C6AC32248AAC7B6EC9B7E7F09090E9A90507065199B78EFB184B265E60E11A1B30CE1F6605DB975DF809168C5A183DA03F7E25AA98914AC36AC0A807C613E66925327B8E924E7618A6EBA34E05FC8E0EB96D7CC93B6B1127334A34B9C2BC6EF725D9529EF10B6565A02010F412305C16AB8389DFA052EF072665CC48250A60BB129BB15A3703823F095CCBC54CC8C33B85866692A3F91B66C114CC6753A3683C5821318F258173E2B82958C4466332542A845004C52C7BC3F3662F2C85282927665AAC033861BB49A20A1D6BC246084CE577BFAEA54D60B2BC3BE76B3D8A8696112A01B74E8B32B247D7550955AF7626BFCFC7B712F089637BC6C70A15EE8C69DDBB9B38DA04BB9B442218509E98AEB95322AB6456D856BE38277146DA89B8E00846A20682788023E95B53A88E7E306C52D86FB619CC4A09095F598919B620CB6A323FD211C194473584839C620459732532B7625FE00B1D287CD9F771C59A1361E66C26448A347B3BF0B913DFDC643F376CEAF76B144615846431EE6305B2F5CD6554B5D68ACAFAC576D20BAC3B9C6BF1D20370CC54845B3E88274AC6E5883E884013CCCEF1DF6CF8E7EA73C3066242A6517F759B21E79AC4BDCE87F6D66F", + "m": "2DC9A15E18639A2471A4530DD355B71BB61520D33E094B35C7F8F4AF6A0CA09E" + }, + { + "tcId": 75, + "ek": "A69846EC61A335E64DF134AE1B6B9A4D395584CABA471B8025E91A9BE870D7B31E2E82841BB5C60155A3CFCB9B25B0B7668CCEDE726C084755BB7277F5D9667AF58C14B01DE7F781E3D423B78A08F96277531A07EFF48F7066820967A5B3126A28F64F9931632AA557C95B24222C92C754BAF354752CB9B973386983A80B15BB1FECF11E8F048C0E58B2278A65B9B4ADCFEC3FA9B7409CF77562866BCBB652177969C9BB828074CDA0DC25BEA205F6111E37199E59632D81B461899C0003EA1B88EA90E9D2864685A8B3D025E803C068BC6A5F96BA05D8BB7648939C05A041D51524F15963FA3BE2E4735CEA6051C109D53C9983B7A825923951DCACD217650BE501CCF628F51C2286A53461A71C48033B1EA8542B07302A2948A7A097EE1A276791B2C893279BF20321E5958D6C4883924EF9C1BE8295B4002A7BE6BA903DA17E1D92194CE89A57B56F2185BBFA207E6F6337D3547A0D5858377A5EA21CA1CDD91B1E762FF658789553376FC20E0CC08069E43599445D555B886BB71389F1B97E514E3AA71BA9CBCA79B6A982E80F1093C17A634B2269AECE47231F87C5DAF0C4A5F1127DFA7A16A38664C671BE337DE1533D91B86D8DAB1491313B9A431AF21AC866B79DB264B224C961E2609175DB1E44B16118E51A246B83B0F2628CA70D5F029B8AFB627EB616EB21034EBB4E71C33BFFF88AC66684C09B62D6202E2EC99C3CC6AC6CD4A2F94C4702FCB38DB376E1F194BEC351D4334BC6634070985946C96731BAA280D07698957E5B4182DD524E1CC7894EFAA0B50334C1D5A0439557A04B989C163E7CD556F117BA291A35D5C218D6DAA9A4E10F7034350E134B6FC601428437E7679B3CDA75BC8CC6DC301271D441CA112CB5868A384B48560B024A406CCF737035A27E0FCBB6DB8C279BB33F1857C234658DBEEB256D6C3DBA405F6F0A1D354223A427216AA417D56B622F2AAEE631C3AD5A64839C9078664E4930A0650B8293AC532B633299BC72305A88AABA1FC62A20632423328A1CD7AA49E69A936FD42861D1B64802662B2095841B45D7D81CB0B9167D69A63EE83ABA8234096CBB78F4A9EB0349C6A63FD20C21B3083401453ABA3C6495522B2ED1380B2BA5607CBE9DA3BF4051A4DF80ACB4E870EDC78C8B7A1A977B6E62BC34C996C5E967AEDFB0148EE8799F20CFF85CB0338CB3F62329076466F7E501CB9C8AB239612DE7856C63375C41BAA696916F7A1BD9861BF3F18884CCB3AE342AAC7321EE249E3E8CC96608ACFFFB29446C0AF7C829D41C6987880FA1F5B1553B498AD5A37D43C2E0340A06396E37D47486CC1EC3C05FB1D46304AB8DBD6AAAB166229CC588D60291FF06842D8A4AAB34C0E4E59FF5787A85346AB1D85232148B41835705A7B2725A45E317B5C838C85809B77C18808B002D0BA4420077A09FD959B712070B31455CBA08056A50710AA818C64296C42827D6404E1CA857465ECD0B62D3DBA56C02ABB03C80D1D4146CAA0798823075BC20B6AB0983E2B86FAA429E55745CD6A066B53B77F398B48810DF3A7EF9F233483677BBA70D8F263EEFB21102256A22DC13AE2B594907567ABB97E3743B7A70A7EAC7922B524C7D8C37CE759736485FAC477EC2512CF6AA88D3111A2797968BB1C93AD6750873AB3951C9C8A41FE0BB7281E674F9DB47592746628049E18376B48347AB7BA26D283EE5472D2CC3971C7470F347CC345B6321A79385B50E913502B0719064352EFC327E5CB5BAF29240F4EC0AB742AA045BC04A7C1B63890510F6681F151AA22172CA9A56F2E05F24D092883133760B760833CC0154B3BA5C5ECD423EA89224BB95587A2A323E75436081200AA216821319BC067D80A8B82FD01CA4B5A01ECC45E750017920BCF9E5A90B8B81C480585C92172F4613601B07F8422805301E75430A826C0620064C4F7C64A6E3C130671616CCC131476F41E58CC31B58CB2B2B7312BD03A936CF73067497A17873AAE9795EDF543410842E8FBB4D0A37583F18862EC97FD6D5C85DE48659B9025D5C216095B68D09BA787A1034549AD0BC0A5CEAA9EABCA5CDC3C206496BB1F5B8D0E92B3482CF5C071F24F100DD3647E0F5BF4121033DC3CE7B0638559C0DB9158EA2CA5809A76019725A23510928240A38798C3B37B981DB20912C42F920F78CBFDF193DF96DF952100BD329D50E95BADD80AADFCF3EC9D34381E8BA", + "m": "E349CDF8C2F96A1C08E31895462B6BA4B42687A90C7DAE55AB2003678AA6FC86" + } + ] + }, + { + "tgId": 4, + "testType": "VAL", + "parameterSet": "ML-KEM-512", + "function": "decapsulation", + "tests": [ + { + "tcId": 76, + "dk": "54301038DA5911366D16C417BFD96AEB85C5DA4AA45AF32F88A700BB9A973AB62684A052D793379B3C2B253B01A4E512AB34C8D8A76F5EBA5F1B28451A66632872C489F3CA606C6B36336895C032386BB35E98B43C8136350616CCF82A4C24816F4354B7C197940A62537BB36F2B8DE32A6AF6CAA100845FB62184B82B29DCE2662CA94D93FB027DB3C8EF858D4223540E79AD5D204C99637FB66718CD04782E149A07354D6FB2C742A9849506BDDECC0548367421FA2B8599443C74192D6B4B67CC5E16F8880087AC578ABCADB5492CC1AC6916CE73AB2858797134676260B22B28B4A8917C5ABD876EDA706CE381AA4985827D492A736652DD6C1DADD10ADF045DBF416158B0384A991D8501BAA9A714B82788C263C16858C81B978FD353126222A46E1587718872BB11513CDA3A88B6547BC464CD612548E581DFE106382428BA8452A86AC6ECB50B7B3C1CBEA571513C63B8741A2CB82C5055CDB2CB00CE9036C220A25C1BA21891B520D435342136D0C15AAFC12DBCC810E9C256D397A3D23A6287282AAEC038649151886A19F9B583806839EE86A12D131FB3E6A1CA1C9CC48626037B5F3DA74C8A025CC61A76078B07D00AA6DAD32C4147CDAADB4DF644A8DBF4222C47AEEF774BDAFA5A48258BDEA84E7B8B6A5CA09243589EF7F1C249A2B344068FC8D874C33B6C4C2782EA86AADE7C10EFDCC93FB993147A3B636127711195C121C7506759389373F896843991125D5A0AB8FB34595166A9109DC2D19AE2738444716C9C21BD06DC8145458ACBA30981A95F8E141BD17B17A3F645E9B63747E370E8D873937A858048614F0645F4B461EF769D2A696706C2811E756163E4746BF00CFFC556AD7A2F0804A6BEDC6A59B1546727C602A99397C50FF818721D5319F63B058D03BC9DE57C1DB74FE14A0D083C25B17886200633D230946DE0A148781735555CCE797040BB479FA733C2A808EE1CB9A285CF863CBDB47172F3A68EEA614736C73C71FA4AD82C6CF13C5CD3179AD296BF3BD6815D13CBFF75A3A99B4824B7560227BE0BD809BD43AED7D951ECDB7273719560DCC0E8C13F70EC19B39348974173A550A5C52A248E191D46640799A4365F3C254757350B65764984180A9ABC9048679D6A84C61B7405EC82A403B79569C024CACA55D79BE23C943C159DDADB17011820C7D88D54071FC8AB142727BE747BBD253A26E92071DC34716F5037D1988A889302621A8465D08ABFD2215D97575D730C9495617EF3B69D0C7AA79965CA985BC147797D9688116A20F9626BAB1997FCEAACBFB439D655A566B0A4BD08472265439C00CE487955EBEA094AD00A6A5AC6FB9359F3C11A6E4B3B6C714F70F8A7B8B6524572B34B758DA270753B697415A964170374548B9D1FE43FD80C62A4D951E28182F2848B044A8352E11F5198547B71215E6287DFF13A18287148277883926396D9A07C0B0139577E4923AC41C9C31F0B6067C88B94CBB9921513ACF0AE80D7779D72C666B256B72A777B56A2D12007797B7BE6657650EB42B1060AADC5157FB819EBF707E51637CD8469645196765A2EBFE8483D62C5E2422C27BCA84E5A0F69F45609928A7E51948A9464D5093CF463A39C26447126C684160F3A4298EA0B5B0973A15403CDDF286BEBFA587FFBB5BFA7692A404ABE3BB14014AEAC418900E4588676A5E7A21553F50037262E3DD6253A8BBD985A679F638F709545AB322F6DE71192FB60C0A368A3B06C8CF5267D792D6C2518EA0A27855635E3E68891C141123A1F8C80AA5300B151AC9AE4342334265C457CA8809891EFF12B398A8465F25508836EE3075C898822BA7675AC359D80E85FF84112C8502932016E24531FB24AA0F744B8252B3D89B4A41721BFD779A826AA46F00720B9592A12307B27EB2B5502987AB477161B72F31BB8EF2C2F4EA83823B72CB16532768508835852A701C3522A7B71DA1CD8B5CCA512117990709797C8AAEA3B300B79A28460D22A2C3527CBB8529AA667064FA2039E22AD5ED740BFA353EB04B74A9C9328266561A76A12EC2C33766697DABBDE92A712B81712D2C4E1F335AA642774441E917650F8D92278A8C0444214A774B7996463527756935171D9FA61D0B50454F74ED50831EB3138DB7374A35387BBCB23E40388BB9228C3A66CDD2222524D7CB8DAE2E70FE3D97847AC35824F5D58B54DD943A440DBFF4216429146E2AC9383962420545163D6F82456E1B93E22A1B2E6875ADA12D4E194AE93EF5C3485EEBBE1BB13C560480DC3471CD950EB300CF2D18F38CAE7575B133526", + "c": "9068502093766BB27635F12F3569794C54227CB1828128AEFC5B715CDCD1E9080D59FB218D17EA0D212D158DDB5ED0FFDB4FA9401F4F23387D32AC8B788CFB7A319114425138744002648B07D5216A3EFB4964BC72E98A6EA2939FAF372CAB44CD5D8A929F66C41D644118ACDE5DA2F09B87F8A1F41F55924A7784D8552790CDF256958E35324381902D9A006FAE02933B017A8E55931B6A0CC8CE3B5723D85DE4C4585FAEC0BD80986224CDAEA443556EBF8BCFDE162C258B9E0AB00C2B9DE0190384C61988BCF362BD0493D40D276FFE4873811EF2851204626342921BFB6A75EB6079F58C030AB1D9C1844078E61C29DB88B5FDC463B7AD3F770E1CB8B526BD9B9A5AFADADAED0368BEE0FFABD9ADFEB0FBF6E6DC7A36115BA47A292D454D7A31F5601BD8BD5435B2EF464A474E37B12B7794F356F905FDBEB248B44003F2B43B925CDB98017A68A15B8B90E2D6DAB1B72AC2921CA92F55B3453C2865DECC094E77EC1E70F99A14CE22BBBF7D3C25F1ECBF96478D84DB4EB1F5E077777214CDA31165C2790172EF778435B56B712E3C5C6B2FDFA3B40B45F7065731EC1E33A8FB300F9FD1EAB14A77E5D8367329E0F834A76E889EC2C8F80E5C1098055F2D517EC381A01F37B1AA3923894D90E1A25A8F55D3DB782ADCD644A1B8A168BBF263C77F34B1A3388E76528FD4F91BFDD7D6499EF99CF663964421FFBB6C17CA9456A2E6A3681298628FA728D3FCFB3BDB65A22E7CFC962FB83007F249D543696A8EFBD9A3DBC7C090F2C82B38E76ACB653F18E78407EFDEA120AE61CDCC8C28CAD984D776B69FB201BA3E154F3C87F53CF84DEF777E50BE420DDFB9734065B8D541F983E69E7FB2B48A186BF8338F3234A0B785B2BA63AA875B28EEE98843C48F60BA500E93067F283155A21905836AC33CA8B06790DD800DD000CC42171775A07F704229FB6F9E5123ED032148DD0EC616530B98A68BE3DBAD2A5D24FFABEFD6D78F4484C8A9969DB7480F54A3DDAB445D3C6C489A9E296B612591A027D624032CD1B11452FEA69A178006E8429BEAB1FC089098BE7EA3D73518F3F5E7B59843" + }, + { + "tcId": 77, + "dk": "3B5879284A33A6204C06F84BF91843CF9B23CD8256E3D23BD1012325686138F40E435275298A614D30950D98B00F59AE6A04BBC37510D4DCBE738B90530B455B048DF4F4AF191B59DB8A3D37C83190D425D40014775B507D43A2E2204B9AA6B6241057663A782A411419F0A0E1E8A4D7F5995B197114E832C7FAB5F2D69923D53A46F07C403038C29219EF228DA1746ED27978D9723D09EA6D6F32856D8B5589382AF4F32D2DDA0EADF342ED3248EB0CCB7B9424FCE6432F8A3892A24D610B9F35B7A4D63B918203BEF239C07277433D8122EDA503C3D596B7C670893051286044EA919BB4863AB6A7CD8D43255C099CE1DB832B109CC24C1B15BCA2F5383F03CC7263775AD39A90DE6A1E1CBB4EE8683295353FDE05478CFBB4C5249500FAA9D35B264E36494F009D8CEA06AC096FF3965DE5980B8E8485149B6912BA7B8E935341755AC67499647391A181158F3AC719F3B36CA0624B6C6F26800904609759B0C5D4270ACCAA01159C4235685D1B079624576C73F498A3F9A37B5090FD6010960C3EC9D7A1D95C3749DC3E225B800D2B8F3B597090F0B83CB315B7A43FB69151AD2B2EF21C8E3D6028A650716BD96F466BAEC316A230232B59A97D371C3DF6D2476C51C64F48271EA38AAE9C8EACD1A0F9318DFBC273D382CDFC0043B0C47B35834EB2069A0E306A53826C49C7A69AE3442947C37ED01F55E9411146870DA50194E778CAF71A7561429D1AC02AC362FAD196CE1331BF2A00001DA290F2B136B92B576C2831717908682412462AF101C3ED3685180112D41A73BB164553F9B79CA71F0932693A630E4209BEBE7BAA7AEA295150B1B827716F47464204258F414BDB6C5FFFC42249C782494A4268F60BC5C195AE9C1EFD778CBC15AF2003B3DAB7336AF5037BFB4EED702EC887AF43EBA616414914B08493D53ED9F89EC2805EA1B40B634610B458236A2ACA1610565350234E9B23BE27166FB8ABDB441138F44E79D8541C3AAE85FC553FB884CCA95E6C84325DF29E112B6D863444A52721F5A5A6D0DB5A65564A545633CB121A927136408C16763191EB10270E6A1604B486770AB5FCCA728F659556C212F9925F28493CD3C2A60AD743830769F9B387422AC46385C88F4A10D8C43764F5200E810D20AB9A7AEB5C8B100CB751C55B301976D7BD4F0A1DE7D7CFBF0379CC6B9844B16749B8C6659824B65C2659A430914B322289B88D51324772C4A507CBAF240436AAC23950088E41973FCC487F57BD1D14321664AFC6EA2B66403C881509BE445933528A4F97C2A5B86F1CBC08816484F9432241A09E16D6B6C7068F0356505227216127AF9506250E59ADA3AB4611D7BA4A999621241A3D8C4FE0E7CBAE2492B6F44E6AFCA27F33940E3233F5A382549B9DA2C52B9BC99A8BDC1E541B274987A5BC4A272F330F725856220961C659CD9BA534716C5A113B53CD243D5C907FD6E1B2CDE69090B40314B7CA85F2185F9401FA758C3FD8AD91441A6DCB88B7350B753CC06AE5A1FBCB4DF61CAE1DFC7E60C28C7787654A068DD06821983AAED658C110BC19C2FC61E76CAA65D9C0914887A77571B3E63CD63A437028BC03DC8F69346585D023F01465E430220607948619975FAC993703CF60055D9AF28EAA1A2CE412322D11497DF22137380714B701DAE205EF308E2EB8A1B0B09ADB896BB8AB3F34F9BA2695056B7785FD51ACD043CDC1919C6B0335D7E7BDD1C43693582ED5E71D534163A48C45796B43E98BCB3DF47E075B8AE3E96A640CA659747B287C4714113DDCCBC83D37C54022CD321409BE74C331900CB17A72DC27BB6D4401D974B4E236B82F894EF5DC9A7A29091AB475D584B52D9672DDBC8D63B0BDB51554709041CC07CDEE435F39463C04BA0DC2B4C085AAC7822AA4BA50CD470A75C53A7C1318839DF4086D8A8D3510780081112453134F15601F810895B287195866FC237669F5B212C002F62B2130952B99BAC4E0AB002FA915520A715A41B1D541CB54CB7DD0291655F14FD2D0B3D802C9D6CB569FC815B69B1A0787463104A30AB34E7BD732FEEA3C8CC8764FE199947513889942B7C110482C9A1477348C3C3B491060A78B8299490E4DBABD22B054929BA77EE31922E1439D15B530A0C307E72C2F9C568622301DFA261C885A6F66399DC79E593486B11FF236B8367BF6864A1A596448FC251898A3C89CCD0B5511311826546E56B6967EE923E5733561D5A4BF940CAAC4960BF60CB769A40E396BFC370F094A00986D708AC731B420FDC11FCB071BDA0786A23F80269341AE270B8ED6844B", + "c": "30991222B8EA47530F7C703D85BF4357F61F47615539781920EFFDF067172E32EF1BA77B21670ECA074C4B2401BB591B21CA0F4BFBA9F8BE4A26A9DE2ECEAA8303A91073C0C91205DAF6DDB17D35104969C5036BA722B176F6A3E6D92E1E5EDDAD9A6A3561F7E5338BA2B163702E297F9C6F27C5BCB7975139DFF287B739D2053BBC4307946B89DF3D9C963379B932DDBA015A6EA396E729996F7FF573A0C24040DE323E60B95B2197C89127661DB35D44588E132742B62949EA45D3E8527F0B2B71295E0943F1FA1F87D3B3EF11F840B59E2BBB10AA22B687FF23D22CDA109D5CE33F3527FEA041579793530226009D48CAE3E499FD0ECCD036D04B8DA21F939908E53F5BBBE41DBACAF3A7F9F5839D479BA0909F0DF0B2C8CD7AE8B11F160B16EBA19656744AC38D9AEE3A31E698380B3B9483E3A5F3C3B3767C519ACBB515706B1F192B16AA7B1E0B8178F28C65CAB578368DE5BD0DD5691B659293B3B212A5547E60727F69B33D3938A301572FDD931F5F71E7C647BF9CB4B3A8B294E2A17CF504319278648E59DA78F0FC5BBAD5ABC37551C30AAB853CC50DF796F308EC99D56A2348954EDAF7AF6E4D62FA6B1BB6FAC370226F47F1A91E2BC6731875C09CCBF8E635745DEF1A607F15BA774E7A1FCE8822C07916D352BF24DE6218350C5356D627411F884623496620500337654DBB8048D58DB94BCD8BF18ADFF7EAFE9DC8687156F426379FF0D57B880B8F86FD94861CF865DB231B9ADF9FCC53A7D8E5BEC45EF2EDEEAF2109F35A365C1287AC81D18EF302C9313B357870DB914E2E8300440A0C44E3940FAB6B35F1BC4BDF9B7A54EEC634897F1F715A334E553F2AEF6ECCD13966364CB942CA7C91A90EE2ED924DAD7F7A0907A56323BA787967F687E1C8BAB45976E20AE14301139E989E4257EC9F87728F4AC56A5F0588D96908FF7DD901AC4FBD8AB336EAC865377DCE7C22B4E8193F17769E1C1D6A2365D21715F014E9634834EEC80E4F6C97FDFDA6559BA2F88F81CA57A03AED25A0D818E7823BD08713E1667815A5E4776ACE6FB5658053E6DD38A01AA0AA9819802BD83E" + }, + { + "tcId": 78, + "dk": "65BAA3F5C74319F488D378CD416C312E8B5FB189A3991741B4035E1E15B261E350004A4DA438725888AC54BBAA2C9406E303CDB2D9765A0352A22A28BF80CE51CB4234397119B3C5AAE2324BCC0FF6620605373366A474621A949B90888A12BA91FCB68CC9C42070B2AFCC54095236497583DEE7947A3258A6D33672C2B1FE8A02EA9CC34A045C91C5AD3AB72973888C46B8CC383015DC12476551BADDE250D2D84E7B06B7D5984B55A6918023C41EC9648CBC706BC61EF3C041C96822265C092DF204BFA25A9A16754B165AEE58607F2CB9BAFC05F548164C96483A846C3892A6553422E99B1D0099B946FBAA4C320D8187BA9928C574B448613B18EC7BA7AD5C4042642FD04260F5E5600E22AA69051642D0A2AC2BBF5142B69A69B4865AC9FC8B25F71B93F8CCC2C601717D85AE5267116EEA467F54656999CDB365076CEB052D4B4698B361C0B9B02B7BC10129972AC64B1CC65EE0AAB59D401AB41A245BF10F0D58393587CED798786EA87A56F48121E3CF0420BDB438A4E292CB33B6B371D8850D290C8C93627D2B428566014A82AAFF496E809BAC64538A2A52B6FFAA0852574D8A648A5CE81A17471EABF3CBE2F34B6E54C01CE079CFF4AF0CC60F820C64BA30755B20CD06420BCB9156055624599C1F8B8292A668468BE0836FC47383EB8B74E2118E918FC499C64E146276B17E5E015BA85863D9920D8A299F90CB09C178018B895CE6F0828246247CD0B9C86B4F885350CA6167E90953E9397B5EDC0A71866C087A9A8C1A6A3E895BAA78303337479AC256BAD692FC0A9ADB58C2A152A9E382B11956AE30263E74AA7BF1D79B3B98800B7C82E81A0C3AA2CBF4A8CC1D13B3ACE8B3502361ADC694E7684278164C810642771B04085122DD408228606B939550892B01A05B347B2135B5568B4E13C250BC1CD14396A3B756450BC864D7C9346CA4879178DE1A0D5DD82E09F9A938B40C37C4407DA787DC7149875C3E927BA166528054001FF103BFCFD2C1AB933C17E10F1F12779AA44207C960BCF7330D415832050713B438C0482651A5B10B850A828964EEB26196A84AF4AC2922664886862835E6188D53C21FDC5EAF7849E078832E004CE79A7BBF122E6E59885608002C170077E98440039870E03FCB890D94001A98482EE6644097FB2BF39A93DA8811B951C6B905229A40BB97727EFAC92D266C4AAEC5623C17C1982A25D4859E362A030D191BD9E11D5CEB145E7482FFDC38ED17AAD859BE642072F55B4EDAFA4AC438B3DFB793A910BEA792780A801E70D2AF76283B60238DEE9A63011C343A586BA54CBB0C77CBBB3C8470C09F1A9C57A42436D3ECB89DC0CD711591FC674878A8317BB833D8DB10D217CC02883A1FBA2CFE3770F46721A7C9AC0045BE9F14487CE6992CC0CB1871CEADC3BA0627CFEBEB974B457D3B7953922CB0F5134918B006CAC669FB0B180BA00FEF56912B99A2C23B095E0A1F65F5611C879D4B519FB7E27153284725749C8D321178BB83C33AA9B547129E780B6C958E69192090FB3E2D69AF3B44A923276B4D5998A3349E5E291291B613B579800B12BE0805063755032A219916A5B9807A7A74A0A833F14F2F940465D970EFC7B7F8D93AE6D554A61085BE277DB5709AF4F1AE3F331B6C8900B24697978B7F69F1B3800B3606F23D90A683E44995F4A1451FA4322E03BA4E32120C5B6E6F8218B67A42D2A54467D672297B4F5CF51131180261276548F1ADD6C985415C15C3D00D83108BF34A6077EACCF7789865341B9594AC3C3781D15336696325C811842335AA43E2146B9176EA251ECCEC7F3E18C8E7F11CA7B09AF0CC14995515D80AB090711520D9BC8CD7353187BCD7D2BC4FD19911E11D904959617B4A30EA844E6292CDE42E46D2A013635C1C38C2D42BCFA68C928B6196B9EA75E6626DC7B17849205838B4C794511DED5B19CDB76CCFBC175F6B94E4E5CC5FC3C940C836C7F86BCAB3BAA860CFC3F1C8C088ABC684A243DCA306B27C2200AD1A31261B4C3C163B99E3022D8F79C9B4989AFDC32F5D93134FD57AE2A7B8381319E9FC2266F457CEE24440307417429AA259CF7DF5865A290404D73FB638BA6341316D8AA69FF605FD23453C34BC015B915D723815285FC200966C03CA84828A37579C86418D5433748669A56C447FCAF3F7A27F8BE433449CF232282A0FC0F55F6387EC0CDBAF615987A1537E35FD4ECF80F07D398BD1A4F057647C17838F8427212A33DC3D3E7052AD61DB62ECC47A3A06302A8383E1A465EDCF1BF3523A84F5549859A8CA5C0905DEBA3E", + "c": "596D8F70598FC6837434DBC18E9891D67735460FE00248E49E07EEDCD2A36C07B37ADB63AB0DD98294B799CD8CE664D09F567A7B52C2BAC89F32366101983529D97586951B9EE52A1B48B51D87F47444D6D3A0F3F5A7063B621C6152ED5FD7A1B06903CB88D2817CC000ACD3C81A6F236CF4A268FEA9388E61EFE62FCFE21D93B8D872E31AC4C84AA8F6A66C419BD9D03EBD11A00BBB3AC07DC806A32783AADDE4B41FA8743A330CA590F5E2076F738A147999D8AA983E67E8D8CB663EEC7A693CE9E48016BDE8511484EEB22232142F6778B0AC3096F14EE5C0131C966171B3CDA96F815D8A6A4668B20F65593543B19656E3C7315523E2FBF3936D050DAFF6E260CF196A2CC83D1C5A8949D1B38E331083565E8683CFB4485D256B7E5CD128FDB516745DE86E402A67DF21FABB2B64E804225ACC7D0435D83261DB47EDC234BE5497469740C2160C793E84EB061D8612093B242D0396588333F4A3CAAE8A456F7D8F29A790CF7569530EDAA4FD2A93F9CAAE4FC4C6CD1D873153351D082B3C9FDF7C644C36D168485CB8C71E96258A3750A89BC3E4EFCB2C81130D7B2CEA9A3277F3919C193B69677DC2BD290F473DE11562974D4AD9E4CA19598E63CF0442763B1A17E00E58207FF2403FBBA79B393C885BCFADAF31AE41FD124CEBCD1AFE38A05CD7B03CE692CC4984C5EC72EEDA9ED85F8575E96CB06569B938AD6E8E78316B3FD099504D1B254D8BC1379B77D61A83D47270FEA6E2455CBAE336A2AAE8FDE479FC405D2F1AD2F54ADEC49B9C2999BA2694C42F88E8AED706DDB9CFD9E9A560FEFB52ABBEA30A09128ABC1780D8099736AF4D4F208EADEA47A1700F2D8C7765C497ED9E23E3A73EA0159F4F7BFB137ED5E6239737743323CACD84E172CD0B451D7F3232BBB6A61AA267D7F5A06A285A2FEEBB13705C824AF5E760017604AB15FB2D68E21A71198B78A6A7969012403AC2DCABED2DE26D65FC5877878EB1456F9F66DC09D66F7F66C127828E1C6E92D8BBD50D2F15AA16AAE3F38759250AF9E02EBBE9DDBEB16F7523FBD8B1473F1D2A3AC7C7FF8EBE0A5D8B764B00D190" + }, + { + "tcId": 79, + "dk": "D01B6395019BCB1318A6670DBA709588C0A734256B3CCB44E6F2A002B91B9DFBC68E18C1957B3EE8C5464C00215E41907C7B6C1E0C20F62B294E8686627CA3181AA1377C25B5F79355B31BC0C14776621A014302DB2119F9BA4F0AD653F9B4AD562BB14760802AEC8B10348403289C9ADA8C1F39A4CBDA9648589ECFD09DE6AA0BE97AA8F0A13644F23D8E505E1076B415DC078B659E63A50D04A53E680980B2E90241435AA0810CC76016F0010E7CF8B2A9A0B1F0A75CC068CAFB4A5AFCD74CBADA6456D83A4D460D978025A89B379F2294D61BBF0A344611635335CC05DD24BC800C48845930F90538C5854D9862B059F952A25B3D2D6BB3E70141EEA769BDB31F42467C16E6509DF8A0A24477916A28B623A555E47079C61EB7B7A5431085AE7457F696812CC49D0DB242FB42B3A58A6B405289974BC34DF24C8E09C63BB81F109468B112668CBB408AA13AA1F2B4EB79A419ACC2B3C05807679E8EC60951B266D621319EBC289F8709E903478D150448FB00B142BEAC93BADAB7703D5CC4ECD78A05121B4182501CE62E4A3BBA65CA6C57156622CB624F844172B0CD3B376E1E008A25E0A8BF982927E154C55A82EC276DA312C2721570F835C51C131E7A011D26F52A90E5BAB0B813EA41C7BB3BC7FAC789775286B1D115CBB865BF96324FA99A3180B7D1A8B7C2B539411302EA62020611359659C2AE0062B1C52C83B7B94A831EC9036A79025689A70C14C44BF590A914A3325392827F6820B96961E7CB2E88B56A1F706C6027A18BD3AB8998124D8C73251A8CCAB2771A630BA448318562061755B6F271063100C4DF788030113F5A8768EEAC11B31A1F0A81C5D14002242409F35B2725AA68FC4087A22321F122B672E101052C3EE59571A9B71C17976C3220C070C0A4641B73B007CD51A5561BF0AC24B58A1DE1443EB38B794822C4148843746C44E6458FC92F1BF4289E3178CBA74521D792DD297D93D15FED878F9021B8F1DAB90D6259C354CC9B4A383A58800C42547F9A13A4F809F5C05EED58C6C98A878FF432ADBAAE218A9C283CBF45D527ECF8A4B867ACD7576957D1C12F29C94A9C9351A321F262343BB7777A8B46CAB624E3F4BCB5704258B462F9EA711146AB34E748A1F08D000249FD73655CE748552909B3AA5546B54A72EA5980B957636B05EB14AA616C1B8B5AA78A5279A46B23B513132AFB85C963409E40CEFCB74F71C75298A670F7C0632C302444C7CE74F643E27B03AF93A76490374632BBFAD0C2AC84BA2BE4579C32237EC701177312B68458AF3B039F431C2658BD54041398D94F39848199C8763A2AB170C421853C7FA19C0A9ED89B665B13CE3553F6C8BA4C745327B3B10B0CABBEEC2D2C11277F359E86547D1E901F0BC44126F3242850AA7A3A00E4FB2923049205EAC160C24CA1B32280B0C0CB788857A54D223548C7505A5DCC5D29D7189595BB5CC070AA23149D376AADD75DE42A611E157C00B797735A3FEA3B59E0EC46E58A0FCB48606D033CF8D75E6592CC89448732D78B30B754F3AB7066F85C57F45E7FC035A7F08496225171373818F765FC02817BAB6FAE432CF0EC38C0779ACE7231041B8047869227DC01202419B83A7B8B87A74468036D9A2CF0C5892EE9CC85F89A32039A0D3A219D0365C600125BCC15CF607C737732D7AB5A27367ACA464571B0839DF379A79880F5B7BFF1FCC4AB69A047166800204C733B3A72FC566C2C280788CFE36A1FA9F63189B0382E683A4ED417D755A20B9895652C1E26B628BF19915D06B8320AA997531E298926F0F268C97C936B1896CC51050411338AC8088CF4A333C847384C9DC766CDB1BA531199C08B0266F1D24331E941224B2617EA9D1EAC33024939041007B5F840100B7E5437306D2A72A3B439E3D355817C78EF28332123797466A0F873A33AA76BC0B42E33C109F3EC8733785C2D03B4E64C3A5A1988C1C4947142CAE75965A610AF5D9849D6056DD9A45E8A8705C04306850B13FA295D36164F486B3440F62951F79BBA12747497C31167BE94D1A9D424373B4B377AE18299C85EE375B0312004D71C107E3ABB12CCA8AA50935ED1AA64477D866BA940C6441D44B006D22AF62960F62478BF978222DCB90E454CCD33BD9AE06F3EB34F5B576C4C9146A4514DD33258A0B6562A5EBC6A8FC1B5F15C9CDDF7EE64417FB722AE52086868BC807BF19B472AF32AE511FAA0E231976722B8C8DA3A15116AB0407F3C7209D421D97969800A933F9742B5A904C6C1477F268EDD8106D88618B002F3A2D0FBB72682CD37B51F9BEC47", + "c": "3856C757D2A5FCCD231A1669ECE3832AF80E5AE832F3B1314ABFF54CDBB94ECBE156D3E93FC4705C46D0E662468EFFBB514DEAA24C384DF4F0BB2B3442D6C67926B5D4EBC6DE170AE0A420EF7319F3A52B6F7726CD47F743B86CB5AE06610FE485932D9B6EA9CDE8023A978DBD0DB5C5DD30AEC898A042C825F0143A32DE320EA97CC36B1625D652342F716F61446EE2355435A9FC043DCD68C6BA0C15AF81A50EE394CFAF9558C6247A6E83826FB48ACAA574F26FF137676348EF1FD80EACE7A20EF6A5150CA1F094A9C31794E3C20CE6CFA71AAC394072432CB4442C6BC7D9AACDF493949CB4E9F33B1946ACFAB8ED5C7D978E43DF907848996F9CDF2CEAEDCF4CFFDA1F18AB30EE1F68F505B4C3A1CCFAF492944506101FD2432667B4D1DBA381C3401BCEB2FCD93CEE7D506E63D97081D4721A453BB96009CD58122AA3B2BADC079EC0358C6C8051D58DBBAE2DB9EA7A28668A2B2FB35D90A542212C7ED4C149416B5CA79B9CCA8B608062A0F3E8E6801D86C8295BD1BA1A078935ACEF1C9DC52F126E83B79927A361167C4DA101FE8C42C20E3AD167D28A73E22093E12EABC39A1C0B3A295C3049104E1E9772D3A4A76D829D9BAB22958C14C301488287936EADE7FCBF43744E71B35A23DF0BD07D2D89C468CE3F8E1BE589B202D74B2D4DECC09FB919EFEA56166CF385C40E113FFFC570178044ABADE35172614DEDF9FA93D91AD8218655C8519D5871986C16320D845D5A5231DC1E04335A26AAD213341A5946680FE9F22CC7BBEB660EEEC1CE9BBC92D497A9ACB21642F9CB52D19AC26B774FCF8817350E301E77CD294ADDA779672597BAD395F4913A45E0346A41C14C0A473928F89B92A7075B63E7929E1FD45077D0401356705DD9B6B75D5044605017A9139B19559DB18C3B931DD71A532C861AF40D18D15C63531F1545D337BA1A30841CDA6AB7D6EAFAA4798E4E6980F7718EAE92775DD8460569B05440DCE3789E6D743E695B5B1BAB0C9DE9C666C1595BBEDF69E80445DD53DBAEBEA126E45479CD6472D5F97840475EB1E52F7984ED651C07B82D584A07D9099C353DDA" + }, + { + "tcId": 80, + "dk": "51A822E5747B76120A780B2F0476232B7B6A621C7256D001C1143569A2ACED1B5C1D43B171C49AA4D0423885BA985738CA8710F2AB9463410D18D936B064443C1C7535BB08C00A2CBEF22E5995224084CCE04460950C3252D948A732B52F8A174A70C35C829223E9854415212F724A481882A7368197BB0DA8560C6A92C455022145EA0DD7292194E35371BA31F9C234A8D9AE62FC2D004D4CA4A5A5E82C892094BB5E27BB749C8AB4AB655E175D0090319CB620EF5BA883F66DAB93789C74C8AB820000CC472D57A33BB98D0467CC0DF7153D2C44E490111AC4C97900AEFE9B7CACE43BCFE622E08AB7CB567BE17A98083934CD134738585547583CBF2281C2D37F2BB34F7878B91AC4629060AA0C1B7E1F891B166310035625254893FAD88CAE845049EA95C8910F6039A91A31ACFE006ECE2466D0F989B89297FDD65066DC31DFAA6A43091316581A60B68F04E347784C2B3BB1723E9B6C8C9C74907421F6D0A98E936432086E51A5708AD237DB0247D48B724AD44834628DA4781803584242D8871248C26058A20E855BA2793D8AAAB743F065ECD84D529531D64A775B62A4FDA65DF4FA7E02D91E85036D8F328B002DA02D1823DDA830550578B5CC0B04B3CF5BA48C3FA46BC5D8126932890A690925A66423E793B5AAAEAB58690963B08B10A7A892CC6AE094CB27704ED1C673EC4845715FF9639375E92BDAA4BE12517AACC3B9441971FA0038371297799B99CAD9C0E303BE39938CED9BB1F23CB9B77928351636B961280C626CF512477E1046C907C13D214172E0986ED0C20B70A9CE03181F00A886B5CC72E09ED70B95E0CA154D3498795485A4319D02459DDEB7B08F38C3B3A545B11A59217283DF46219F722641759D7C8565F163C27EBC61114434B5472C1F66929843BAF2765DC328614CCC6EAAAB558A0AAB5F6A3CAAC17789E523B7BA389DF92D465C403290A626620A819C1AF3528DA871612EBC1E1FDA68AA312E13934F36CB42F6353F798481B77762BB9600EAD4825D2110046522B5CC1894982E5A254AD6F97BDF186060284A6425AB1DA53756296892A1733CB95521E3A32F34C0D26933A251CF7AC2C8588903E4E8AAB2956AED328687D59F3B0179B0F008B9D82E30D62F979891E077661FB02540535B65B8038EF647AA977B7EC28E737351D871A128D939162A8B06B596CCB112C9477134D00FABEC425C063FDAB7092940A02D56B677C7B5C6791352871B72B8B7D1539525A46A05318D1451BDD8445D93C7A42108109417052BC6CB108896AE0837EF0337AD349ED682578CD083BA7125EE909BF59ABD2515875494AB1D25A2164CBD6B346A8E057AAD77C3A524086801CE61772197B7AD01D18B12834ECF18394F689A74CA4192A86D68F112300CAB592B2C0D2488C2C55392DC4FDAE417AF076FD068424F16CDFBD36588E4AA96955D6061960ABA9BF9C588AEB2203F3083D9B101AFE366B26AC896D78951726B4143AB39725CAB14CDFAC93A4FB2BABAD835DF36118C00002E2634D954A871264876B8B46549367EE14EFD78037DCA255AD5463C83A5623544144699F92420B5891DE80280B7590E556AA87EEC3AD010261852A3F437C7B40455E09BCD9C514126281EA31B43DDD3C2E1D67A845A87B3A38E7DC41BE5C32C28F2C4D5F17D839773730717377AB992710362CA38652C31B034532A1C393933A11A8B4D6BC17A35B9B0B9A4621170B0106134C045947651A121E3455A79720CFCAB6A725823503442F068C9F5019FA1A69C763B07A66FB30B45F95B796B802E09718381D96C28D487A69C55FA602E48823F8F49A9ED69234A341D399403623C65C4507AA83A33AB10B1830B93F270574EE6146BF75A82731B8A8B83C823C514969623004CF4ABA8AE086F949926174B40EBB0CC6EBA9382D61F2FD01BCAC78E80EB1136386B9DB54003964134873C5A8870015C0AFC364CFBB52429243AB82242E1F990E6E285A20C3352374BE0035124702EDE831314DA724900BE6A86811FA7A488F6695D4808DD0081D0648D2551355952B31447721E915ACB93AB8AA4B394130EDDE1C63E9B4440B21E5BA572D4321A69525A698865BE90B983F0118DF62769C78521049DBF2B2953F3631DA706114A7641DC11D95004D827BC8548A720A2B05F0757A1858E6FA5EF180041D7A2F738F02464C7B7408302EC5C501E0226552EE6DB8368E20D6B8B724847EE33153F8A80C0C1E6C1EF48CC62258A9C317F45CEFE99731D01927CE0920C048F5700432F3C5C7EF9AEAFF97BCDDBCCB14C362C701F896F", + "c": "768C849DD542135E428DA8406B93A10BB55C8A062A1E500E8B902FD6275557F3E29395112F7581F7826333A4FFD3D49F660B8AAA4CE0DD38006671BF3877383F8056684A3C64B356029122643ECA9BAFD86CF4F82A609588A4ECF8AAE1B541089FB6FB147E7C54E58EB9CA8809F1702729DCDE7628C948BCB4855E55D425893DF2815A016832FFBFDE9C0DE95B2B0E2720E331FF9F92474213501D2B8D80002ABA34609C08B5B0681B1D2668783005E75BF224939B24FC5F5AE399FCC19B9688C06F1FB98E4A78A5C41CD14F5023992CA8EAD1B83BBCB49FA51E1B269495F5D5FB4A6692319FF09AE80C0FBF959B77624A1753729B0760F0BFF8C7B12922E7872B3EAD813E68251014CE38C983EA6FDB01BBF6CE94343966467A56495E61A2F793BE805AA54544D6447A7310645311FC1A8233E3EC1228F4741182055A58162D381912CC5F7DA0E544EC448414E8AF3F45937EAC1646DFE90B13D5A8E50B25F692526B886F41E40A74B9D139B64A53AD73987B0B7105792C8E17CA5F4C8F46C976B7069C4BDD1F97B41F7CD4A97903882FD137B406EA0E1DBE67BF21F6437893948BFEA806A390237F59D573C78FA0472497B1B0A2E343AD0ADD3DAEA44A655EC1096A77BF7FD422BE04E56BEB8E41403011FE6B92C848283933D68E444EF6E547D568B858F108F17C3EFBF71102ED89E4F3335A5C76951C60325389C37A972D2325DA3A048203DA2CB7E2929C548007B8A9C68517AF654FDC851DA9DD2EE53993795E48095935BC6601CA47BA8FD3B06B63559E10CB42BF1C4499CC9B8F13B93639478A5C424F607B0EDCD1AE0A2FB2FA77B923B1DA1793A2F71EC55FD58F4615D73D86F385FC5D96B19F1A53A8C5158E286DAE4D1A1EB82A0044AD4C5D051F94A0609E97312E83B0AE7D2830D3C3E12E939DE17BBF3AA7B455994A85B2578BB73E611A53A805641DDF9567C65432194C03D7A362E9052E932287DF0BE93F48DC7FAA6ED702D8960D6B6A71421FA676B15452E3C897D06A33A0CD049B0901C5613385D889857499BC873353BE56FE55E4F31F010B2F251ADF948F97A754E994" + }, + { + "tcId": 81, + "dk": "B86B90057B5871C81C77E4554A5BAE897377AFA99A49EB94D0EC723E526B5815BD73E1BF4DA14A6ED130D8A6CF55809B348CCF94E2A6B0A8CB84E046EE72C23DB47BF3566848813065BC2C91C99A47A67E0837A842C94296428A396CC556E1446D7C58B76B831B65B63D9749997A08DD0897DFA8B36923C366431353213CC4C18D3B963FF0637323169B64D5B22818405753B5E5A12C15346E8D554D0509BE3F2C4CC06262009451BB3B5B9FF45D2EB84A6402BC75395AE93338D33B6BAFC301C424CB1FABAC82C08192B0A4615288E2F8364C79B83663CEB609AE2A7559343C48B3A95574A3638B8C1AA5E4134885CA881775437A05AB25943EA75D3BFAA2EC993C74574365761BF409C15EA64833720EDE1146DEC322FFEC5186BA71392AAC3454C93C5526D204B199108CC1E321AF3833244C8FC0C8CA802CA31E1A587848BE1247B260186F5F7127416B950DCA863AFC89109A379E863A8673BC5FCB632834C99766CAFF332B9781C6FF65BFC2581A3816295628846D926396EAC04A667A58580B4CB416D13500CDF48B983054BFE49063C3B202AC40AD79319CE606BA7901A6A684145CB944E71FD0D2084AE300EA45BBFE6C5B862A07F85BCE378418388365D119B9D8904A10B7C2D19192D24AB3511233B3AC2B32E011D959BB4F8C73D6CAA12AFB869D0571696609966BB5346C0888C6B0A2288591E6B5C5E7828C26AAB3726DE9E17088F10A9433997C498CA383270321CDFC047305240321B8ACCED733BFF52740147E58E516A10A89F518C0EEF87B57C32472D3ABEA4AA5435C5F97D73936D5A8A868865E53221C703751BB616CB73CED8668AAC5053D06BF277602B90C4DEB643C556A80A3400458901BE121598339BD9AB65C732C1A98FB66DB81A29DBC345A4B8F5A672A7047B8C98062B4C025AC3526D0C3416C91A7C4A6A231D8687E9880110308705183DDCB9352C1B7F3C98FF0082C01F1BD71552A1E7A6C0A77B40AC603B27BB8020A668773583E9C2048BA337E4A2200C2049FDA2AEA23260E2272FA541D93AA43E022BACDC618F022397300C3050CBBD393530886B554F533124924D97239405178EF508707A7B735513873A50AFA0649A54C1EB96A7A8A1A5952727304F7A2A5F8690AABBABE4A5C2C02389CA299F23B655A038C24585E8916C3B126021C137D4F9C823DF346650B940DD956047650C5D606E7827C1001355A3087D4B28D3D8B6BF9B508DEBB8F59F517322107EBF89B23536450F13AD54A169A643A2BD72D701407DA1777F26B71FD0376540BAF962705127C30C6D28FA584A1B07158E04B0C5A603776D6AC77F99435EC17F55803208BB0CE30B998A615F2D4669BDA329208A35174A04B91A28330385D609F22185DF20CBAB9C520EC9279B41207D8263A8DF366989216B0971243ECA22245C60197471EBCCD96B73E4308B8C9E37203D15D228395423BA3EB63756536B913F4B5637C6A566C1A2D96B94960B5ED85CAA9CA099B6264BE515A46B85D7E3216B9F97AD917AD3FB59422B093B4160C2BCA5AAB1B8A6B02C523E574648588F511CB5698342144472A968250F9995AFAA655DA57A13A9B95F8376F05A336D6A58B388DBE8052C4C3BEBB4BA8937211DF961DB1921203497200243231F09D88CB9130BA1E2D561EF9F266A4C18AB7497E1DF1266BE6583A4089DC1C8AD97081E1A95DC5D4141184CB7A5491954105F8F42E23E59618669040F569D9B1105D027DD054A810CCBE1D392B06209A1219B775C10A6A5B43F8444A7C217181DC3915811DC5C2C7E059182E39A8FA4635F3867BF962479F71A705011D3862A038C0AEE9F2540F34C91B61BBAE1CC4E0B714EECB39F3E88049D9180A542F830C0855722B4ADC1185A037976C298E945120FA2E9D440F1F0AA783D67EF53AAB4311552387A9AA2A2BDA892FDF6A1EF8CC11E8674D765B9359B15CAEC31205E502FE2A446968A397DB273E6C3A9F9C9CD5F0C90478597DFB3451D0389B307028B057BADCB6751C5FAF4A9AAB94850AB720BF9112A8D40DA0F30BF094BA85842BA313BB1670C2EB157198566DF4435415FC681F9ABC7B0189A08B771836BCB76B8280D191D9F080F391A0928C21B9993333AA3C67E9C2E412942A204186A124BB016B27359FF64378BA944818084EC2A764C79EBF4243683A2B216661BF242E56F8F2295399B0A1B0149FAD31AE408EE623755E05379EFC338DF128DC1EFDD786FFA4450DE832547AF7A83836D8C7692E3C7B26B9695F3A7AF331C70E24D80142D4BBC6A941FE4DB07ED38E7B6006", + "c": "659D3ECEC912EA365B95A68E368FCAD3A2CE9E5B6032687651ECD4DD8A32840559CF71364852EEC28540E55674690C540507A3781BAFA7BFD7207D4039F3C02A612BA8EC09CE4921E180DAE0F9603959AC2D578958E61F1C46A4C19DFF316FD1DCDE63D29811B4A60136E015208F322B487A47325707A38F4D11863252A9A4C82B94198FB56A4356CAB954CD4C4685514CA69ABB61D9DF45540D194DD8B673300E13C55455207129742E8B1E9667290590F7272B984B489D2F2DB671DD02FB1F499F47A40DBDF33DB8107794FB68522A5F979762E9BA687882E2C4D5AAB3B83CC513518AFC6A9418B1B435FBC18DB182A6A9674AAF9C683C2B2450892A142DD3C2C1391F77F8A57DC79510973FB5654F379BC7F3C37C6A5B203C4172D110A9975D71A5873736A44033F67B007B571A970EAF8369327B50CFEE57A2815AAD5DEAD72A65522D4815EB5BFE72B033160B0CBDE31930A5DB1506CA17F91F0168D64246072D2A5A3042E3D0BD3C625F798C40502CF528A6763EB25800832719682631E3D4A000C511CCD99D3E3C905CEF5004791617D13586B74BE7830652F363A8146B6888DB5E78704319F3A8A0B8BD8209023E22D5C4628ACE2982A20AE1001AD5A6363FC3B34F42B91558A18754FDE4CD4A3858D37341AB956626D8667E139022347171B01AAE07639E0E1C8E32EED8F9CE6D030E8740F907BF73C25A2BA8E9654FDA35D26E3832545832A58E2838EFD798283C1F719D89426D8FBBFC440D8C29DBEFC315B5BA1592139660A5DC2B4CCE72A9A03B3007B0DAFF89389C6620800635EA00DB108AD9D25A94B13A05732E591C140121B636C5D1821E8D4E5139708670F8BBBECFCFF023C0950060730D0BA0D893168A8EAE3629507D8C587373745A22DEE52F670445EA770FF27C857914DCE69C7B57FE9C8964830B39644B5E485A538F0289A7D364CF80296CB36DD23893F6D29B04B0EC0F04F6758A5521C3E5FA03D0F415E53C5D94466B2C655605B2DDCF1286DBF6360A4F6D8FF6AD4031F04E8A46632149D1CA458DA6453AD3DD09069A1ADFE61DE1F8B86B24F45414B16759" + }, + { + "tcId": 82, + "dk": "3B51977CF371CBB75DA68C26934237638C1F28CA097F1AAF8A387E669041DCB329DB043F416B64F6EA35CF0A955463459709C75FD349FF3B87D0218F6600812E3B9C08446D471905C26B2D512BBEBA55229CD6558561655B2C7480582A54EC8E404796FC8B508CA58F048235B0E91F9F682E22FA1BFF713266B2CDE79AB271E8824FAA25C1589DE2A07F2BA81031164388A16C10A4786E50199AC023C3A30DF26489DE288A715141299BB9EB0CAF78202392B01FF482754468AF6DE863A708465247093D201231307A455573BDDC356F206B065492EF220186194FCD3621607000C26B7E926551F8107F256647F4F3A2B43136B04459EF1928489C0B4BF12972990BF3F75CEE3082FB88AA3EAC16AE5904A79A9FA52315C77826A5309ED8B5BA1109AA96379FB9D4628317637D864E79243C2CB802FD964176CB47EF234F890560A3BCC0E940111174904602A0B4ECBFED94C475153235955D0AD147E7602739B661839A11A1A52257C6C003BB064AD2AF230BA606462B493A860C02AA62A5727E1263E54680C176151010419E437D4319C118D9A687676605D9437E950FCE770F5E9A52A0F46A8CA57441C2074FCCAE08E5638DBC30413B11FAC00EFB2A337311165393BAB1070AC4A140E2EB12D55978BD1114A7D19B03765AAD34724E8C603B635D5DD3C5F53B7CC83A8811354DFA609DBB0A8FB21553118C41A4437768687FBD8BC00B1983DF56213FA270506A15EBA99B87CB294BC817A23CC76165AC22E676642279E8751475C21B3AA42687174E433886689B171308141E8613E01560062410B8C154F11A5495274204EC75ED373E4E336D7E8BBCB24CCD9AB812CBDAB869F67B19941E10C9AB44A9A3055BA19FAA1812068958C37B48B796F1E869768211BCB9B31F6C49FB27B03AC9098618C9AFA5618F840EBCF75942316E687C2BEF3A163CE37E8016C1F645BB5BD2AA2D4137CF60476677CFA3685E68B188096B9CF3DBBE521C77CC47AA9FB007CF1C30B72876F52351E9A68E09F59A945887F4368EB46741D0C25F27FBBC45C36510496626D3013C128C6051B2D8336B30D77462623E4E59A01A27B1526C594A0894863610F757151C847410A5AF63E95D91B925CA1791EA788171A4940BE89E5F6A50D554ABB33282F057AA1630359B80AFC958B54C612902618197B6CDFA0C6720F36E070824AD372C499895985111C756739AA8ADD2C21940920E4D3379362A16BDB20E22A6BB26B079845BCDF32A20646B480D6C9ECB871CAF0A38F98662D3A9C89E8ACC78842F9C2C76AA79840E5491AF6428409271E6349CAB281692127B3985C547C009DA497D4F4424DD8109D52A476D440E457762C664683E8364C26C0EBBC827B7967207690C8AF5BA38F4215D71652146434A2B42CD61804D77BC61BAAD539124AB6B414341A8677A8DF0A9666E26BFB3300204194E24F350BEE636575C069272BB6FBB34A5433D6024BA6643B02625C41F055FC049BAE48A7D754681829A852C802F53D34E6BECA36852CF62C02D3D4A9D92A1856195A0C6F6727EC3291FC8CFEF7BA3838496FBF89815B32CB55C4DDF075322377AFFE4C1C6739130015D53E9272CE826C63252F032059286391164B950F921BFF53ECF5767F0B6A5A2C2724FD47F378261D5324380646237355276A0291A0A085389C210F5A5A9380322D2BD8C97ACA6DA7C326A8F765C054BE323395AB9383B7847C741E6EB1FA52C5E78D3856ADA3F19DB9C5AB914A71A88FC049445C3241050BB65FBAFA969C1B5E47C3E988D9CB022836780313A0BD728AB51627FB8D478E2C62163F996E14A0CD52859FE32B015129EC6581742A6C48B95953E70CCB73299CE847ACA77609789AB6496023491838CC9C0B321CFA8DC29655A86ADF8A149BC390959776534726134016C9B1B562C2EAFFCA6C9A53546FC7DA2C222E9545AE6C79167706073C0BF41CA0A8FF18C2ED1C4955A282A79C57E71097E67CB8A930ECEE0037E4BA749FBAC51B06890736CDD86184A08528C308ED659477BB721AF5CAD9D7477D9EA7FDBDC558CD455EF4B07AC746648A384794AA1BE7B22B9A507B1DB6A6DA96CC6146471F22F55D7C0FCC106BE7C5B30E634E381873188A46561981CB972B981C51CF3C49B2961B795AE260CAA1AE67D03717EC3A23819F5FE2CFFEA19119C220C5832EB7FAFBF2279D277A8A7D1030FD1F35806D1EB7C4EFEBDA7A51F21044515236AAEE733328776D292038C722EEAA1AF83D6078CA796D367EF6F824746E006FB70C714A96D19D4F1D2F5ED39DEFA727521", + "c": "E931C94E02ED9F04CD60B13068C5A229CAAF01A0D929F62F21804D4297670D863A382EF306540F98C897015E2EF56632503FA3DF924FA333A4AC684466BE8E312EE22B41FA8058076EBD39C1D0C3A0CDFCB6A78BA2B49AF9242943D9D16332DA270017E6EFF53E039DEB7BE6C50FF8158F94FE08C12646D418BB456F53B8A2B80ED0444E9BACA0D88107A7E2D7F69B58E3793D08C0F2FA575136C79A4BD3FFBA2689F51CD1FE37D3F9331CE670A8B9B9F4F15D451CA0D2879B1169F178A7EB7CB488FA1D621BD57331BB72B34A885A818B99B60884A0D42E85D86D66486299B18F7AA4456AD70D2B5CDFD5B8606C845CBD3D9D0A928DB32826F46062132A335EB0195A4AA287594B584E98923E7F2898BF443323A429CA33DA777494885A848B549ECCC435E8B8D3940918A241FF97B03C14D855037E4555B98507050D1B1DFCE68B96FAAF562E3F3307AB3DCC1C822F16C4609BB45616D6F45F48BF54B31914A4EC827CFF8500AFE3294297AD85A8AEA3F3845A9A3D06CBC5FD2BA7D61689D2DBF85765F8A673D3244C27CF148CFD66BF360981E35B9EA1CD022CDA262F4EA81E090A1CA1A3C9A5333EDEA755755752564560F578EE2BC99C227E621C53489C26F3E109AA18FC3BC01FC14BF473F3B9A9368069CE272B2A786C6FB6BA5120E89B3C5A403B9489DD065AFDDD81CEFD11B8BC5C4AFF5330CE8BEF0F5DD17748FA240CA3D83D17EB96EE6CEB39AFCC87BB83FD0DA8E2C8E003952AF86552CC3345D49BBBB363729B8EEA09FECDF7F3BFB1FE4E03EA9A71B45100286E76E33494C0B1C6E2151B6C571C239EF36757D4D46FDAF694260DCE0C040DBE230C6F9BF195D2CD2D7B460EC036FA10153A154D578BA1D8B74A52E642D730218A551835D76103410C433C919732171EA4C4DB1FA9CD05216266A5F14888C8540016AF50D9ED4F7BD4B1214C774CFA9D032A5FC0A89073E3259A05290C7885C2C4FD07DE218AFB7BCE656E54EAC77F34C23E9024F05AE641BA5F72F342DB172998871F94CAE6206EF179AF6D728A442E0F91873079AD49A6F1E348226263E039F448F54DA473" + }, + { + "tcId": 83, + "dk": "10575428C648AD91083CB07F76AC26A36540CAD99D2E9C5624E8337A359F8B5748C10C7D035085B0F429A123649BDA87AB285FA96237FCF449CA78361862B10BE3C0377957150A12D32B1D0B8959C45734F91C4BE9A0ACA88B1CA4D0C7BDA00DA618475F6C34D668498DB75DE569303259BF20411BFD566E2DCBCFEC4B055172147AE747881B7076136178831A06A9A2256886C35AC35B5C3F2C2C38CB4117D4A1187803ACB412003BE96052EB1174965A172890D6B034A0EC94D06A368F819284A547391149C34469B61BC8D0F29A62F0847686C15BD9327C1A67ACF0C5E9141CE34A768213002705CCCCB971EAAB55332A42EE472E0D6263178C69067A0AC52021DC4C798FE8A1ED893F34A2B48B405540C086204A8B869B141C186D8B3946070AA5CEA055F8F420705B64FDC13EA580CA57A7ADC23659B7EC1D44AABEF7A9144F93A1E4411A47922CEA0BAEF1151C8369C3857C17420769ECCA02E6B162D7865B7DE37EADD75DDFF75BC2125988D83F3CE80A1331878B277712234BCEE101F723422C7227B536BF352131F0A11DC56304EC65928AC436343B7826268221F4A49AA52389674D8B780E7EA72F69B5443E622B0FB9106532CA87B9A16C7387DA2BB41A643A9287162A90803A10BCAF68309C2B3F0EC8770CC09A2020C8A2DBBCAB1A192A734961F5BCC22B7CF6CB314C6B9FFD5332D4C5028B11632FC66A2F56421D7C8A07656F5888701C9CB6E4FA29EA692B0A8C97B34797CA83B09797A356A28EF9E3A471D82517FC56A306AE8CB396E8CC293BC849A443A4273C02F964C62EACBCEE86CF988A9E75164154A4611773885814107F37C5BCAA6FBE3A4C2FA1723B670E5838289326B182365BD0CACE1C60BDC1C35BF5F3CE653A5EAEC6052A1C14868191F4B30605605BAB8B06C876741AA74F4CA8CEDF719F8817A7E4C536F2260CADF0683A92B136E03B90B51218A826B44584513B131B7133A5479EF808AE2A186224B085AB1197883166F61AA270762238EA76E3C29E8FB35F0D023CF01421699B5DB739227C12A1C462ABC9B0BE92E45AADEA1456B386B1203D2B94718D0698292038F9E5857CAA46755BCBAC626E068B493AF1BADCA93D697CB7FAD685D9293244B26818E3B156C9A796DB53E06B736CBAB1DC0B4869668F078107DA976730D5ACC1742B47CBC3F942693D443F30CA1F51E472D98A33C1B9A1E37894C98845A6B369C71611D69173BE935170239594A30F8A7C241BE28DDC1129ADCC72EFD26B3699A2A46829D4A20643C0AA00E9286CB8B2B8370268FCC30C4B1E81363FC968203301B8AE52957D169E16C197A8267D06897B928A2F7915572CDB4650069204C093F18C8061E1B79858349D831F9C8C53A93891999A739790777683908D2634C3DC53C3A03349C274C16A1BC03B0658A6A230105F63236BC4AA147DCAA566294E137480BD516019BB52B2514A62C894BC081EC1793C708B4F76F692FC93816565A09CD2662B6344C472C5FE141A417381E4969528469E2EB873E8871A5774A583246253F62874197E03A81BA8E1550E6AA75E70AFC3978E401B6DE52CCF898804EC102EB037C98ECB20C9AB9218783413025030165E13A44CCEB71BC2322E55F17309E555BF96BEFCE7AFDBD25BFBE149CF7B1464BAAF78222171153DCD3A3774BA059B9BA586536F5EC63635F17CC3C48DD07975E063BEEF96C165B82831384FD8440695286CFAD51E3AD2891CBBC96DE5B563B20D72D85F921647E5BC912F4B0BB75C0C790694745AAC2B9C3B2C5409F9D505B44952AEB6506CCB1CC2D506F0BBC3BB442DD85758AF658DF10C6907650315484C27798D7EC7AE577037B30A48DE13B377035EEBB27A0FEC6CEE366605B40604B420CE92705B9B83E1F93D5AAB9C2FD668E3839DF11A31B101BE639CC0F5D05878E32F351680EBA50F021717EDC5835FC7C20A72435BD91BFDB0C4B68731C6566E8F1C7F1FF10DECC14EA857B008D5C37178826C280FAC788D3DC54B0115BF0D9018890B2378628CA158BA91657A576688AED610CCACCF96E6B5884328C091569B12785C4C054CF83C42E06D40B6BB763B449C00C3A7D9581FA3667F22BFC1A750B907C87BB14C3723C9A880743ED5A181B16D8435B4A4C98537E20086D89D28AB3327627AD75291B87561B97631DEE6FCA7F77A1792E99587DA9456B5B98A53F73B4A4DBA89A68C79BBB888549D8E7F789D27A3513B899264806953E9650240F1E5740BBF9B6598839C74574CBD32E7837877F7020480A15F6E6AF143F3C078AAA0DC6D72BFBDA2", + "c": "3AE5A2271AC46827EB9B46E6A6AC7AD0D338B2306CD812CB80ECEA078687858E575BD61D4B08BCE51D473D11AAC2C047A346225F842775611A4446CC43E924ECF9A6409B6A589134B5B4C46F8478F0994E90BCABFB361935B4A944CB1D5D3AB38001242EDEF3C0BC192496C2FA6EF67DB276D36512A867FC9E6BDA9191388F3798A4D1D7A4A236F1F026DA54D0BBC0691DD867F424770A1A050C26D8CF80C8AF88780262F73BBAD0727F6705048A32D02CB536137796A6664F03ECB0FDD76403A8AA6C7B39C62A1DA2981A6AB36C987ED2BBF6088C868F15B55955329B17FCFD4EC19B69A7734610EABBEB02491E786EC1AEB85F743593E0880FB0B997F1A81E484802C39D4293FAC089886EC4DA1020AFE810CCA5056CED3AFC8AFF69E1B8DBE05B3A2D105CC55ADB632242541AD4241104B1D789DD6496FE7D22D2173E409A18BEE297F30B9EBB76275FCC07988D464A6B3912AF1136BCF32EEB1DD35EC7CF179D55A0EF4C4C2BA9740BE3A24F33EE1D1B2B7881A71FB9DBE7F89CF6944519B14C6EBD4288CCE624C59474E861249802337B1C992318DDF75ABC03E492D5BA80F3A6AE2D693EA379DF7773B5272E3BB432E0AD4B56191C8ECFAC229E133FEF9B082B3323392BAB98B7CD3BDFD03684F8B4BFD339792313DE77B2A7AFA3BE806B9EC962B825FF6D6CC8E052A33720C9EF3AE81E8207433A3B6E39E90A5B7FDDF6FD4540760FD6DBE7BDA313F3B46B5B4587F57DAAF6C8990C4253182A3DA94AD6CD3414858AC95A87D5C2ACDD0B6C3D48A2C78C4E9A897E33393A257F428B1826B49F9DA7382664447C7026BF5A009C495EE3FBEAA175DBAD78FF7061F7D1D3061E205F2295AD8837648E804271BE3BA05865B767B7032FDA57B1E77097EC877ADA26F09CCC22AE7A2A510B44B24D2A5C5F34AE3EE6DEE769469378952FF5269FB8EED7740D473D8DABA32AF26DA0ED40AD839C3D02A477B1E2F090ECD06BA910066EA8BBB2F32C0A077ACA9E1866C175F74428EAF9C5D0B4E8A949E7C5B8B68CCA427F879EDD2B7E32F598885ED74CB2BF43853F9118DEBBF13CF6D171BD8F" + }, + { + "tcId": 84, + "dk": "9AE711EC12485D079B373C1629772BA9BC0A6B81232F1A5EEC91330FB2BE42F32B5687614C5C6C2D1A42E292A0BA30CC6A51A258D07BC05118FE29BD53F48988A2BF0F2920008A3EBCF28872BBC5DFD8931E987EEA2040EEDC97D6498235E4767C976A7CD1B850F649D8C680CDCAC6D2512CB1634A34809C65940A0B04562AC5655947A123B6B48CF72248C6C47E600B5AB410CF0193E7F4AF5EE17C2FE88EC145971164B5CE6511360311271090514451580BA2E3AC8AD50618FFD508CF250A056650BCBC0B36000FF82664CD633F04E6B85AE02AE6424370F4443D3564F13120B617202633228FBB9C6928741A3715ED5412A57340DB9BA67B0941CA9908340A3048335083BB2A3BA3AA0B50C05D668DFD64A7391025427B48DDB1C4EAA047CD4970A397B1DBD4975A59375642A8558A043FC1AAAB384143BB936261B87310A1F4382C6D465A1C4A46B885CA67EBBF863A134D7B1387D7347A29783C15AC16F3C628A52B5706A123DB49E050374123718DD724008CC24752BC88E5A0EED6B38702B985864A2EA099109B51DF1975F695BA4B7A68B14088DA656B77D68FD848042B262998D4A1F376CF77478B9943A40A031744780B3B346BC1DC9AC5D57367AC98D8DA8A5B5A4C07D9BCB9D7BF30524DC43B0F47439D4D115ED981235DEB3FAC400F1433447EDCB685E69AD3F749D4A54F34E88BB0102C3EE4C6BE8135B993459AEA43C3B941CB4C2A460C3C6EC40A5F2553B3F76D8DD2AE13A46E367A0F5E8B1C31042E5AC45D0DD26FC1257CE3BA7A63B441657CB1762AACEF154D41BC93B3B17997855C78F2B37AE55297D8C4836338B2F9B76D6A84A0F2908334801E6BB9EE2506250063F108AB9B48538D7256EA5797DFB90BDB943109D2C6C8C83751736C6CD1768E24AB724AC709B1CF97A4754A152B187C334CC79FF4A2A721686B483B3085DCAABC5BB451A916CCF48BAD23233FD6729BB2C8E58257FCBA5BABDA6BAA49B23304454F79AA47215B3F51CA9EC429A49C8AAFB55AAA854CD0507B0E6902BA119355F43ADEB583185C0D7FE1925A468B7C583D03DCCC2F7471D985351C83C3DF2509E3C67E58E236D479779EC928C1700F6D4162AC8051BCBBA7AB47B70016A091C1B2A73BAFF47119F2B793B8A66CF4877D972110B7FA3C1860417B34322C449052613CC8005C852B111DB94B06739F2AC286731A3FC96A258727172DE84A5E046C0C5780E3016DCC25910960BFCD0BC86BF50103D5178FA60E6C8B9CF0847257461167265D90C541551B6E672B224BD6711AA31315104E194678FD6B2A8D32311004001149CF4CA3C8154C4976178DCEE33375A09D7B3C447FF4A6BD4CA8CBE957CEA938D2CBA7A24093205475205C4000E439F6E7A40E4898A33CBE30CA3B7286AC49C9142230016B8A7C8F4A402F43AE0B3ABDD977077481510349C09176978C92546A866D0585C2AC12927A0A6D79B1A39644AEDDF6C5AF1013A7B661E875CEA3FC95BE5A172A881D0B63BFB018387108646E7207DEA9B839CB0DB26B48F4E918D55ACDF2338C58A7ABF0D2561F299283BB7D2D8670D094009CC427EB0329D5144B3F0B683166CBF9763F4E58584B6627D4175162484586201E75E0CCAB112F6339AD01B247E4A96C7C769EC5F9B107D9CFF352C3F3EC61E95690999C0498FB16B7C539E9372E9DE99D50756389D63B6691C123947F6B0661E4403C0ADC6364B1516668C175BA9FD8EB462D3532091179FD67853BF7C2DFD5A898648ACEF8AD42B145E67701F2820565AC4D4DD9AF2D395469192B884212F00BC30391BD711C0141814CA95C53B6455C848CBDE2185592B9C84CBA5F43D39F6B6B77F39B599ED9568ECA342D71047C4B55E244B863B2725E8865850B9DC33A4DDBE3AA05D597BCF52901FC54A82635397C992C615F73227A12A6595D5C28B5B6A685CBC335602FFD2184A75243FA639C488BC14BD73CD1D6373E7BAF72453F1EC073F5A6A26D990F48570FD769838361B48313464906B8DEA60FEEB1A139486DB1D7C2F63A6C48D54E5BE76E835026D383AD38952E5511BF02F857699CC16376A425999DEB06895E1812C901CED44835D35BA7864A5CD2D4B21F0B9E6DFBA7D870B07AB401BF23A3B02C11CF00CF7BB99BA500520D846B41B81BBA5650A6F118AF8A67688F81B0D2500048E5A0B5B6037F7A0C2EAFF45D0123620B115E4B92A400F11997BE7A68FE85D93A281B31BB1B612287B9E94659A2480C2278C53FCF213F532ABD59FB62728FEF47CA84C2E93674EB6A518FFDF590EB66615EA7174013", + "c": "111C9A3008F48AD675BF25B97F3B3F7F12793521425025C47645413AED3A2E8A29B7EB5DD46F4B4C8DA0FAA8140B83CAE325066EA3641A6001E475B685B4B348FBD7AFC0B07ABB26E7163E32F3D4B1FA7E7E15AFE168B31F7476697161B6E44374E13723EAC77C3055282D60195AF71E4799576FFC7C59D85684846F05BEB47465E977DD7E45120D0D3F7DA6AE7F43E3C9F958DC26FBC0D4E5C0FC6EEEFD392401162CA36872FE996B213B25814D951AF84B3E19BF14A83E35CD91B4434C5C9F47FFD08905D9C71B86E82E433B6391573982DB3D7BFE8E1E656C60809E1F91A7846732189AF4616D5B4605E224CDAAB8D3E7F0A80792F352591AB59C9B5494842057970E9223B793C91FFFB44A87F999BE7B964B4A0FAA1F3DE424320EBFAEE29EC27DA4FD8E01A85D0839DCF4FFD2494C932F5CFCD3C4C608266A43312E4E8BFE0CABED2FE7608E387F04FAB278A8F84023571F8E3069E3664FBF25ECF33CB14F5945D924609BB7F956FE82FBB3C122FE163CEAA2661D84EDD5DDE9D254C2C8C1F25BC6691E589BB83B657BD88619A88A0A28A42DD4DE04DD762F83FDA21559CFECA8143DEAFD40644B5F789784E5A4E6E8BC592DF66D2F875E531654C3A55D7B2A06F4E3050A83E9B1AAD62D185F3BD400E5964723E793682010161D8B5CA310F87245C678C8C739D2E5B473B409C4418BB21581BA67EFA8069E4D10BA6D0FE8F8E6E30FA322B2E790238F1A51998A66969A50785FCD4215F44FA67EFE179FD212E91BD3BD8528FBBEC7FF132FCD228A105CB8FCB4C08AD3828E0FCE07779995DC8ADBA45F91BD3A9B8D46BF8E837368A218C5104BBB9ADEA8334C758C1BDB17300AB06B1B5442530ADA971C7E55FF053EC7AE0A4F0410324D640E287865E39E511CC957E4C949B21C0CA8B98901AD6636B54D6DC12C86FE740D4AB07198E8C17C7DD28EBB94AAF1AE60AA724BE97401E056818F563FAD982E692F3696ACD79BE0D418289DAB86F4BE9008D1940FD51657045A10BC2B1A6C55CFBC680765874E654FDB543E4D78D86626A407657D2EAC0C1B18B1E9AC1353ECE898F1735EE3" + }, + { + "tcId": 85, + "dk": "D276B7EB86B21B95477AD26C470A942696AB91C570ED5CC531D6704B752657AB7416E5284200BF13E73308F86E225CA057B03D785908B880939D439419972E95155CE8A841B552428DC00FE5AB47A35979F68165960C77A039BB5CBC3F80CC4526D402E53C6F9759B7C7743FA150CE581925295192A912191A3A0EBD215D3188670FF21D845080DCD1B73DA65887D324E6B20E67A1721E078B26CA1BE91A5FADB6BF40C8329C917576CC7C0B20BA187A5075D245464BB3B874A81286359EA66913146273B28866548D13C0A0CB91337685382556C88DEA378AC37104A0279FB647B459C0132A2152F132D1E71BA721CD7857C46F217EF4AA1E4BB484D3D21C2495975E2BA7A0C03B617B318B8773728A3C54575832860CB0968E5E8265714AB6F8659D881183956AC1368627387130A479862492805C7C67E558775B566D1D0521A82C14DD0087473303F8CC93EFD45D14653982C871F807B8BB5362C5079AE5D51FEC1907797C07E48B46A0C73D9087AD8B63972D0166DE89887974B0FF989D7D5794863C710529462B48BFA85605C4F1425C6920AFF484DBE116EBEC06AFD4C406599EFBB8929468C0FEC5B0D95344FA3AB9CB2765D550661AB1077E494B8A88387BDB016C0163414275337896EA797C59467F13E035ECC61DDCF0A7BFA146BB36C7D8720ACA12A22F4070A7004D1877769C3A2162DA0F23F88BBD405267E642B2DBAAFC99A9E9F91BC1C09302E15F165B08836CCE76DA7F317AB6C14C1CA593CE27A7048E70291D4B8EE6C80EE7039F9964608F08940D8651D0FC764C02640B019D8C828B424840FFA00D1686246A93010F4B97A2E37431010A007AB552F8575AFCC64EEA0C01EA791F4066214637AD706864B353F54B30884B2E11A1AE4BEC0E1CDC8939057261A30506975A64858079E431D6437E45D30F899B9DC4C7734BD613A546213D24B625A0B4D289484973C8E0A3C57797514FDC032C0AA9CDDC3FD6F7394112A83D26692499C046D5732ABCC8437481A4D82E599813361772BD519884693C3DC8CEABBC1747F4ABC061725F2714B7618BD04563A15BB140E00AFFBC558CE050BE2C7B4616CF37604F4D736991179394CC379A87BE8A1952CFA51D35999124A44A2B96BCDA9519E9FB1F40A13F035A926A177EBB37141A3081BAA0A6CB120A35909FBBF5A245C1BB9343C2071A7750689847A246D2306137C590CDCAB6E2A355E00CB6A399968F3B11A5897658B72A3A466E71C339845CC0C9D8C985D63B31703993F24293F70D5DB6A886DB658FD43C7B2681784062739451453256C0350EC31C4E1CD4B06B3BB2EEB19F5BE27DA3E564F92486685660004A3C972B4BF872859EF781DD90079DC343C8B1AD8A4020D90C00FDF0493DA7CFA0B25335482A010A690C648227A3671313162D5259CD0162CDA68F1CB291F844B845D9A5376BBF8DF67B374B4DA47B6CB7AB0C81461CA3FB591FB27A9ED0791988B8352055AD469BA0B66AB7D4A71497128309C45495A27E73B86A32C05A257FFE04453337C66C5B55D27BA88AAA36BD371F17DC589F01C883587C409B695BB6455CAC976A7A48B5136DCE1CBDB8F7CDA119B3AC5B19E622086BA77689D9B351CB1BA144954F51C2CA5B1D475A0582C0B13006AFE2683CFBE59D4DF5CD6A7A7541428DB6F85C7F9C831C412A17393A76B9BE7CDBBDADC38510962078170A68D60719223D8075854BB929EF4671D1970B1629397287372F328370DA198A17CB4D19A55F25CD37C866420587CC2C1AE578C2768047033546563567CDBC1FA8173D53B1CBBBB8CC93908C97F4620BFCB87FE99051E47C08884699F72ED4782900C89814001F7475673DAABDB4359CAA58044AC22089D73915416F81E59DB06808EFE31ABA4017ECF25FBDA730074C75867B6C8A7C37A79670E9B8CE8D3B7FE4879E24296705B424A764BB9A320F7D695A6C43273F7706F8254DAF845BB9A6459D643A94A97453468ED9547C6FB0C6EEF280F6833F85FA63F8EA12F65153B07395C609B37FBA2FAC39416C23C3EBC3A45DC892A68C210B49614FC966A25409A1066A83D7C301B4BE1948BC24565B3810C852489DAA42A8CDE93489A04E2E622AB2003410753D770636F9B06527DA6274C10BF90C7B1B8179F817CF5A4095D627B1F1B433B17079818EA6E206716FB0745D3438F995ACB85239BB378CB0A900A2D2C6C81E65325EF7D8E1E3467815EA3582ED63D90E99CD0EF85185D3A2CEE9904F78D67A606479059C3920A06895F8EC369A9B9173059CCD77667520A7D276162AFBD25D", + "c": "A6A2CA5C790E38F2CA43AB92A12A914B2F85284CF46F42BFBC4DD40AE65B1BE7D821F91EBCCC986F3A1669F83E7D6F135A3BE09D0D7FCFF7F883DE86CA2938BDD3780543EE67740E0C8BFD6FB6D60C7E971161474A4D969A5C8A535AFE14DB3C890B511DA945C53F925AFF4F9329C097DD6E3EEA93B12D8DD5A05D89510C0019266137DD24077708E2F2C63FA7CEBD3B736DCF3107F1FD1BD90939788BEADE520E23643F109203523E8237D5AD1D96832188206A50023129DB1400B00CB3418C1D8FF15CB23AD339D669594A3794DC189DE19871667D7501FCBBB880C4CA9C87BBC1A5482B218450F2A830BD0CB084E70B0D123D7CBDA0F7700FC4D2AC4B22DB12DDC590807793A2475AB66E0B8B6A3FA2A80211E1A752539D65223431604E6E583D3AF71BC5CE4FB85A7FB643F5E343418B7E4B92534D78E37528642F7ADC915114CEBFB2A5CC984DAA7B98519523A4334C1289EE33A2E9EA80D3E3F92EC7D4A6D4F4E7D659D1B7DFC00612D74ECF4DE5402962C0F03117E48D0C739314E4C4E233AE779420251EC3FDD6E364F4CDFA3747C543CA9B57711143FE7E16E4CEFAE7C3FF9F53398FE501104B886EE7505D8EDD3B258A56E629DE61CC656B721A7B4A2C2A03CE5A222AB7FC6A2FD1992D88CE5B98B314617BB3B1419E4DEADFFCD7F2197DB0B150EA87BC2EDFA11DC986720C295D3FE4F78F40C00EF835938B0882D4453E71EE63BBB521A79CE857BFAF732D996973B68F587984045418FF929DDE6B6E82F82C910222828AD5F1D31093B9081D592738E16018DC9082BFB233EEF847120D6A846E5A33F772C989D37CB274F20BA7829D0F7797C02EFC7C2260040497F5BE3811068473CC5A5B84C2AA29749F501D03E4ED64E77EE9A2AF125AC8A7C313C892BB3A44646491E2F10D805436C0A02C164C38DA178036FAAE6DDD64585289BAA942CD30116ABC59A9B455D349D09A9AD7A3F59BEF76B26C026361F0731D4B8BF70D265E38818DF36FA623C56254D826FF2AF9C28D519843B3534741C0B6A78CF094A6BE8434FAD989BB33ECD88C98F02E3BF37628D48D1736AE2465A7" + } + ] + }, + { + "tgId": 5, + "testType": "VAL", + "parameterSet": "ML-KEM-768", + "function": "decapsulation", + "tests": [ + { + "tcId": 86, + "dk": "BDB614FFC9BA80A3BBC1899EC855448E2734BBA74116181D1503CFF0B497C832B75998A5CBA94C76C2CCA25904F574080DFCB7B4E64D5D7547B2C2C5E4CAAE550098BA50BD6DA47EFD10A67C2502A8C7B42F4B2696846FD849706C014A6CD8B828012B4BF41BCE0041E27A4245231B954B958B1400A7721FDDE369C488BE6AF043A8C0A9CD0CBBE132A2F303BB57A4ADFA02CB12717B2EEA905381B110E61A6B506B45392F45313C51756D80B27B9398C1F3F1A74655AC08AB6801F651A1A378DE128F63D4BACE138330025FA3882BAA630C98A070395697D4756D7F0521EDFA065D36A7491B53A371080F97CA1FA0B93E544DBEE4815B92AC2EFB9005113D583A731E17B713A68373D5AF07E32520B1958FD9643B4CA70E601472002141A12424726114AC1FA65801C8659846E8A1D42C53BB0A3BECACB43161C7DB707351485258C4C373754E9774AC09482CE92A24EBE959973A5E12606440777B22471C3EC015F2673EA3B4AB844778EAEA88302446EE790C2E954B29738A90287EFDA113125170488964EA551451955656A788BFE4C58A7AC4A9F2BFA2DB2C91C69DBB332FC4B231DBF1B4AA914BC63C1C37380C2395874EC1C517F0C79DD0B85054668D93CB2922917F9593D49292353C8A0208A26C37738EF146E92A2E10C49904F324AFE1820EFA0AC5E5A4AB3585A097B6D35C88DD57B5AC0241C21A5DE1A581D5416C11CB1AF1B79374C746FFFA4DF658CC6881BCD5C875E925223AE8A56924422EE9091B21BEBE841C37B8506B097E3F3BC20342AE00307745AACED7090547C1882D32C60BDA724CD156ABF8A11DA1BB054A8BAB5C44B474084FA13FE2949310EB64239338BEB36BD86ACC923C4320510220545D8EEC2F77EA364870B58404126B501CAB238BACA52040DA2037D541D574A6E7C30B9877AD540512BE2B41AAF888295B1A38C0CCE4F023BFEA82EC0217BE5A7D6A6515C399ADE1AA911336718524AD916A186FB488DA793D214486F0E231AAB6075C0A04D6406286684D65484B8520438F021FB4C55AFC5A4C35D97F0036480E65A8EF894C938B42ED023A4B966D235479012594BAEA06E6E86DF73C9DFB000F748C8140AB49341B5952F5862EB73E8503B4125997384B11208972D1DA3D320064459B6D714A4151696A843B872626B051D219F8238BFE480182D93F70752319B8AAF7360494038BE5700F2E9B86E83812744989B4921469F8A4B41C682ED329203B00257A950BD5435B224E4699729CE58D3855293C62C44EEA5D2CF96B4063A10C8ACE2DEB53FA79B8A1E77F955A6A48B38119FA6B8106301A25849F9030C86A2889BC75C147C90D6525DC532745391E717C70DB15007423C06E8BAA23277FC896B757536C2BA5A2605397E015A84AB216635B2366C7BF1364CF87D3CC61A31A57A6949AF77AD5990ED54122D4082813754079765C999266C3E961E674C1F7D03F9D258C1976950A120E0E31CF6239362FF38E395935B5E29D40C5BFBBDC63C25855A372C3656C243AA135E8492F3890615CC75B3A25221DB72670E465E1B45128B131395B4F0AE3BB09E94965983FDF6A54AF087AE4F32DD7837AEBF893212306D8B6AC1765758466908A3A641F2962ECA97FE4A63D64804B5B259F2025197F0B0EA9996326D24736553ABF113594E122AAC2C62936C1BD75689E240CED9BCE098212067776023A4954376EAA342687195E548160835224283A4606207C6C939376030C91BC3FCD6466810C5FA361488824B35C693DD8FB56DE2412B86A9ADB28384F908B23ABBD28307CCF834D3CB29F3E1AAC65806F4084974CD7037E2B84F645733FD660D3C246076706856B2415B0A234A29A76532DD6D6320BD06AA459768FB067C7B28B8C89258C2354EC5926D23BA388C14E39A63F61D23D705B1B850C58804856934892DAA452007B2ED01C6196995C55C647F3F58BE2D27AF8845C2334AD27687A25E50BB6BC90058B181D7197C5331088B7AC1D18038AA9920145887247C805102B95F57235783A4847130E47566A60469575651F0137608395D010567B7866C8505E6DBB6F6728959C128C382414FA53C461850E7783CCA1B4265008642581A06BB0C410D2A791D0977669188C6231A4A3390DAC1B15243E41D57843C53E309A3DEE5BB0991A85109A716800866259054FE1CC59FB6A96A75C8503517EFB5517E8170376512A53C861FA35AC8C4B5E63756247042690BD67BB8E0C7C9E8F05C5CE48CAB0F1425E329072F87401634211241738C2CE97208C6A6AB609F03EF13387AC6C08A3FA61E53632677507711A25C1FA3454D86D7BFC75E668100D6A6A03086142275383E291097104356A0848724BD95C3CD89CCECE97421BDC67B0FC8AA0E0C2460B4AADD9033CFC60EF04AA6F39566E89793DDC0481109E532566D90525EDE57E8B756FDA7190BB89937DABBE2AF4239961CFDAD37F1E4B5BED5A4CB5637163840716A1CE2F2036975A640B6A7EF308690D66750CA05B9058772828BC458AA9CE47116EF459B01C292010B7449207EDE7AA38AB20F10280E316298E9C86B3B4B94E718B85798D5567C96531A6CF84BC806AB85E156A34447B15FA9FA5BBA5F1087189BB9D4561885B2547DBC5BC081C1A268A9EBEE5CB1D4147545044D11933F43871ADA5495C894793645B0BC472407BCDC5ECCE19F219C98532882381739B94E2366BAE2C543E68116BC30974149E59318DF3336204C22063E4481E688FE2634D790773E243A325AACA07AC65EED5BBB092B6371B519BC01067849E6BA3C5D9B4AF5D073BC84BB472C123F2C72C4B191C85405D63C148B368399ECCC42F208F62E75E14408BEB14101EE4249D2418C359AB05E5A3B60A5465637EC6A31419EAAB9458A285F684404C4A94425FF6806150C7111AD2A77C0616D45CAE9024BE5DE259FFD6C3C0E509DF484F2D219D5F3CB596BB763D4BA6C3521789FC840142A42D510F14EA44B3E9B573A49F9B0879CA5A5E0606639A7C67A7674124E2423339126FB019E00BBB5031A1AB9B3A71190459A16EBB0A196DD9CD5A152179082AFA9436B647A68111439DC325EA777BCA84ADDBD62FDFB61009A54FEB495A166BB35C9C426A678E6E2958BF52138F68711D623B41C7B4A97A241B17B3C37720FBF04BA3C175C96A4CED4C3FD0E4CFBB345A0CF48A7C0870E4353CA02B92A204A9C03A6287BA8E1CFA50B91C2E2674CF93382A72E8B9E0214504B97C18D60351F689392A8E44AA2C57DAAABE4CE52E3CDC2BB436DCBDECEBAE89BD2E392F0370092A66B4F02AC3FDAD8D8F210A271603D045F95EC94C2A38EF4985F2E72EDDF9EEA90CA3F0FDE3F9D49FA98B44BA6D37FC13524B7FF2435B88410255345590DA7870813873", + "c": "E3C563F0E5A3E2A6FF16EC3630EA56BA17647ED1236BD957021549825E806DE8924E3AF298F5D3CF2D462E31082180D2C2964ED80D3E7D92E5227E01B9B740F1E2D111FB379AF7A92320EF8BAC44A2591C7438B7F916C1508C45106E2EE3629F28FD280D725C382D647C894E60C2B109843D5DB59ABFD52B4B98E86773CBC75C8989239C288A79AB1D6608FA6EF287BB0431391C0CFD73504AB24D10A2F8FA5F3C3F38D9BD48607889E160CAA09818830472038F9F6CC2F7AFDBC45870B434F421743E1E0FD019D5C41101D9DAC014472C4FEEF0A9EF980E7F276CC7F1E1513A64172428A4A091A4C9A6A009EE5621E37B179EBAAC0D122A8BF42AE861EA420473D2C8F9EF3F4EECA11AAF8863BC66310EE5233797134E849A01992149CDF637BE74F0292988572A38AC86959CB67DECF3B3C3BCCCF186F917476DEE06727EA819A51ED1EE6F3228F4A0322032759D74BEF9703BC185A59492A79A67109FD6786130AB0D41F346D59FEAB3F3FEEC1270904B1504FCF463E9B4B40FA9B5266582A8031F0B200954FD080E207C9B40608C499D49FF752D9D1A4FB5F91264085D9E1A4A1A1FC91B5C5B3DBFA5D1EF5FCDF289206F611610B948644CFF3632229AF44D2971E3FD85E88E6936DA82DDD8815EA1A5DD6DD3DFC03259F604FEFC59CD4F9FC6AB4E9D8001A747546455B9629CCDCF5C4058D57C20DB6C9EEBF7C4ECBF76784FC2C9A08B5414F02EE7C93A38201BDFF31068786FBF98654F0A32B188B891BC59D683E08BB2D6906594CD02B232DAE179BD5C10CA0F7323A0016876BD80AE16265AE3A96204665A01758FFA9EAD686D3BC22D92899633520437994D73EEAC9A2E55C1EBCC3D07229B2E5202DAC0285B2BD600437CFEFE98EC02B13977359FE4E51EA9FFCC287C88211BB220A3F0E52D5D97B547B2369CBBF46512DFC304D72EE1664C91BA5E75B2B1D089EA9C02BBB7E390FCB2EE60E56FCAFFC3E3FEEA01FD8D5212783BF71AA94BA94813325A0249E55BD4337B7BD662D6641DEA484962E04DB7B42522837991D1048E9785E3BC297B2106ACA4968DDC1D05BED81DCD061D21DCFDB82D79CE3853E8B2089A8FE150F3F34CA7BF540D8044D8E40CA3EFC66F1778EC0E131F922E28D8B62B4050042064360515B5A88032F82AC618C9356678CC77F3C4B3456C61462232D92094B29A139E975D1DBD2B2E5A8BD6AD7A3CB9EB9BC0C0144B2178EE709B2D8EFDE65FDF3630565FA83910C9C3CC179F4613467294FE778A33636AE26AA9C2EF2D0FF2D648D3F8E2B9E20D434EB8BE0AD4B57E87B92A6D3572D8DFCD38B2DF6D77C5C8C25612EB7A3E0C0791003DDDCFA723841749A6AB9A9A5AFB098E1A82390FEF7A0FED281D7DA116B830524B5B4319F93DB15081136B5B06F8FB289018B47BE3302C193C8236015CEAC96916E39E4E8C032398056DA8C57F7D0F0A0A88B8B91D5D4D2A37CC5F0B8935BA7FA7AC4A0E0D87ED501B6196B7A4014226667F0F0EBC221BAEB63C7947D8677BFD625403F99F74" + }, + { + "tcId": 87, + "dk": "DD30BACFE52565345BDB2157888B5694438242E2A2792B5E3696C516F8AD1D893DA3FA1907ABC9F0E627866C30B1BCB4887C7291D0381F2976C690ACFA571184112F11251E38C61DE8E727198515FF2696BC8002000D0C1AD542360652EBBA33F5F8A037F50E146400BF12247B73A7045369272753B2DB9A5B13614CA446634B9513D3A050C155E879537CEC6E93634B3DC067DEDB1A6A378DC9674AF3F09A6726B346F5A1EE069C1356626D7126380745C7B065D5528735B36355A8260F3216DED3CDB1F6780B8BBFA409B67A266F097429C0E808D1F2479617AF9A05712E7731298455611A66C2584C8888B691F23B574A463FA8CDAD2802CB14BF83AA31D5D946ED55097A24CA024696148A3126DB4E69AB82EDC9024C4734FE182E45E8766732750ED443726A578E39484A90721A28CBB0E03DD72931405516F53001D57C4CA4EA2E171CC27AD896F2A8C6A5877C5338374DAC8DF4D762C1D97BC735430B33CF62BBC2D0A0A3FA8401B54C0BB77A46FFE5AD73FC2A5D285A1137052ED028DB79988A4323D0F8105C58AD9FB47BED3A60A8811FA2C55B187AC7DADCC42AC09B2EEA3609A06A68EB47B28025419B9C702BCAF06C38C86C7640629C89D7A486990D62433A66327A687A4CCCFBBEF4C0947966C991573592B78E54E7ABD5A9CD17D6930933936E049121C568CC013D415C23CBB2125F5A3B1FF58FA795B4E16B8C44A94FFCC344D035BDEDC45698A2A205414416A49F4E2A06281C9D254462C070AA8B7974180B3FAF81A7257034B7752EA315A1F4DC64418470EFBA37B228C0E5826C40D31519865D0DD07004B21B0D57872FBA2A00245C2702CF2C8AB91C5A5AF8F40614FBB1279C66C4F2405B4221EDBB8B35FC5EB65707559A29A04939C5990633680771D76E302616DA2A5384D875E5F2C3ACD4C96FA74CF88090B22540478161BBC14B8B6121607239056022EA3947EF661D72B12227889C2E1C266A7A60C014BE19E0328817104027475CBC78CE2C85012017EDDC0F7CEA11C8EA72AD3338498292BEEA4B8A7129D71B1927FAC2A6921DFB87C425F9CCBDE2BDD01C685E3CAE52425070C5C00EC8745FA538E4F96F72D89214E042F19734D7E57952D0833C72276CC93D9991A1AD99AE0CB5886FB83367C967CA65A7AFD022DF404DB0625FBF2C50F0D8812FE2BB1DB4351C7CCA96018A07A6AA62255655A59319AA9A0F130387AC5EB3BA4591A68130523A6D023F57D7801C71BF2237A17FB3590B240FB03037675A56CB85A68EC0C4FBEC98A1C534EAA4C1AFA1B7A012AE871C2EA6B34B3E661A90713C66A0A527676143CAB465205ED21B1E82050343B62CCBF875A2B13D752AA9007426D52661E6E1C42446B7FA632332498B53DC68D780264E1638BE1B24C6323BFF427030130A3091772988789CFC65369C98CF6A6BCFDC99CB477D0D120531C8AF46613228CC687DB38E984C269FA225E61B4B5EDC4246849CE2578BC7519881055D00295DFB560152F435E7A800F5E2BF2299A2BEBA0F0EA63D2B3550AAE2518EE80948E9961BB74D5B5B8C65C2C7C2229158B017B9250B2200809C8466387831C08B791FCA10D2DB3800429B35279310403566934BABE1776A3A01EA24AE603A99613B63596360748386C8F33EDAD3AD33C5620DBB58FE81B76B960A28C8A893F7930F2583AB0431CB15B6D0EA97EE76045FECB2FEE09BE411B8AB827236C67D65C4B548A43999134D4FA3735629CFBF3314EC955194C8BDAE1B6B32635F27427DF0C8103639CBF7301C4C36B896E853C2377C5C155C9DEC611D1B6BBABB6777B6A95DA79B5456007B30CED6BB4547056C7B08B703A774114B036DC081BC896BED96C8F7C8BEC4EC945CB78E21503F04F849C053A9B7E1CA5E080325972FF9310B12B04BFDDA31AEE5C45E7BA024133BE2B7B389D22D3C9AB4CA34A31FA902571ABD0C267DC23157787B368F1352BA6A0F9D04187AD29CDCBC382DCACE8E31869CC2C7A55097AECC218FA68509D289833988EDC26B23B4CE26954A15041465A7287E372CC6213F7988768D105030DACD01B73B5F2145020287ADB92D63DB8D8E16A231618D4DD97851335C68811789428E8A8280519A81A215774B103981614224E35592647823E633E951646A1912721C0AD5BC21DE84734E285653B0858E5B325699B5E31C027B266E7E82C6473072A9E49B0B8C28BCD163ABCC7A3F3251601B4719F2894F1089FBB37F1F760079C6286525551BE7AC73E52926B28FF3F89A663043CC3C5FE2BC0312C3A0E1206583633F0747013C42A541E5CD53142D19D06B7E930CE1F68485D700BFAC9A71977C37A28CB11C703AA04FE533B58F6826ACC1AFBF25CB7B0A7890C427FE7069120315313C0A45C18C2EEA868243B4F46A03622C911A98ABBD7C2EA3305A5237AE76838350EC1512314A7CFB19549283CF2866F3FC3F429168A461034830BC4FCC2A7259BA6A49B256CA9066086A1BFA64712A7E5EF40BCC758B5A600C2717216839BEBEF900EDFBA4126C89047328A9849E80A596FA930D666099A9978085508F9AE8CD1A1325B4082457045A923410C84A0EF382BEA75420883C4E3E43183E8B9BB02A7030051526055910A835AF9053BFD66B378CB978AAB14B629F88839F3A4A7F985BCFEE440939359C7FF98B668202149045F68418466C45E76517F9F7389A683B47897A608A2F85800F7795BE75799DFD597057FA3F86C84CD52A4140758AE45B51F80262DD56337562A974B942DCD20EA2BC5C52F225DAF5A80BE0AED045A7E812819F646D28B0578D042C8B77C8341B46102BC881A738DDBB43411B43C41813C4C28D75400BAD4902ECE7C899FC7FEEE32C78D70165DBBDD139BA3EB2210EE3C1F6BC2B31C8C73B1A54657346C3D322B243AF797A93E7129B17FBCD3C7B9CE49216472BB6DF1B2F41BA4EC3813EE6DB3898F19643C38FFAF3880101B08DE8370ABAA82D91BFDE31B8F78CB85474A3BF06844A233E65884303CABDD1BB52F23C01512871A6FB50DCD3A2417140DAB019A11BC10176C5C83BB138CC2BB45369FB74995613CCF71426CC45536586A9ECEB63877494C4789E62B33BE19B87AC40357DE584F11B236E389B26A5578232478E56B798FA77E6366EC15046B38B4BEE0255FB6AC0B8B928F9F3849417B7C76A396D0B58DE16C709E58D5C523DCB6C7EF74C60960886926B4F5B472A7D2B419DB06592691B0F7299EE970B8ECA7F74B1258AD17C087C8EA0F1AA37C40C631CFC95ABCC465F6315C54C7531FF559F19B952406FF1BE2C2C55A5817F1A9B11AAEC3112029860E6400D99E57DF796A8B775C8C5060D4C3DF45BA1405A293656507D39C8FC3990BD23E6735715792EFF440A9BEC79C7F5FDE9", + "c": "690D3DA51B1D22BA09AA62B4FD6EADFB4C587C34FC434C62225B9D132DEDFA5774B4ADFA213EDB328DFD6056CEE8F96EC1454C85F8037021F22879FF0BD7FE1386BF272021522F774F10C4C9F7A53E18E3A7023DEA1C3BC8BC76EA8FCD2BE2442A655F2E34F3F102919B4C336B177B038A0CDE0A2A49787E89AB005999F1AC733A04B867D557AFEC7502368CF8DED96CDA58FD0C0426767AC2EDF808F8A03B45D72B30D354C9792FEF5213E7928399F09E2DE540F4826ED72F86C02637738ACF28B28CBC8D45D5A7A0F4AC5A1B7CDA2FE6AE3872C6985E61E259311D5201A540B4351DA0E794F3BBAAB916E2603633741A7878BF61B3B344715D6DCD614ECDE5EDEDAB3DCF4DB03582CF12B764179ED88FCF5FDB0A550522468E04A5FCB297EA78C1DC6DB4CB868F7B1D0B195A16CADB15C28DFE7D2ACD9C2399B6461ED22D000F3368E88BF12F32BFE6B749B4665978C297314DB35122C7D04738E38F7B4CD8246FD36B93624CDC7F0BB10FB482479EF1E1FFB2F85094C9806D160467832D604FF7945CE2D6BCDF15802BC2CECB90FA3F109987BBB377B4E0B092B64F712E3605B3B11E3377453538EB28406243C9C182858650F70CA9AAE1B8E00E3699D2C47038F2AF7076CA6C2330542FE680D79C463F60F80192F85F6BFA0AD455712840F0E25DFDE29CB98A68FD2EB4DAE3C536967D5C4615788AD70A5451ACC78A5419979EB35F83E2DEC8A9EF3DF19A73225832FC6EF76A19159E38DE1BD15B6931F4D47C25024AB2DFB0A800EDB9E070E1FB3628B8236AD227AC3F6603F1866C4CFD669F992C50C06C1986868330C4889B3A9F77DEBC702F3A6337A549B1F51FFBB7201B04287DFA6BF3144160DED6206B5AA1F9A03CC0D56FC53EE55C8CD9A23344BCFBE1439904A3FE6A225D3DC16BF0BDE2B53F90CC0064C4A7DA29E93A84585161D6B367063DF1AD2639E94F0F61455225AA72C294936293831B7F221D209D30317FE4D68507822BF667C8175F23ACDB14000715D26AB3303C46D2E9741F03A73C5FF80B50E2750744D747E295A6DC2D6B9C5D12F0D711267F46E61D25388A5AD57F8ED0EF9CF99311A6A14D0EC5AA5BD8046755921930406B786BB015F4C5B1326650CF8A6EA2FFA758C4F3250F235CF4A824807BFF10BF54910A610B1361B156980ABDE86D087FA133CABE34FC5EED86C3332B86A84742ABF33144B8B08E3E22C845A5E0C2ABD786DA7A7E01DEE4558365857B384CC3F398D74E157CCDBEBF8ABA82AB7804303ED27E280BF68AC3122F6881B3F75C0F5BBB69F6C02C4712FF8B9D1822686CBC441A4C81BB54DF79C90E32A2C5464C0453954DE231AA0D01A0FBB868B4467D1AB6035A9F0C85C1C4016F586B7B6E653689331949380A00CC8ABBB265089606F65E324FEE9AF4CDF02B1F6685AFAA05E2DC9AA17AF7E8131D1F1E3D2FFDB9592C9C57CCDD619274D547FE2285A8989DE7926C654DCAED5613CB4DD4A2E0BBF9BAA7DA1A0F7628C924927EC3C339A38E73C219CC79EDB4904F97" + }, + { + "tcId": 88, + "dk": "195006A3550B231C8348E6B3B5B386E9E3108AEBBC8F83630606586EC28635E58878809A5A53363214AA48C3508C32929090280C366CBCE2971332C96F05551F06814F340B5490BE545448EA603BDB945B5B778130CA72AD490E3FDCCD1904487E1284EE392941970D44CA314F38BF6A22414192A1372536CF1C559A48A5A89011D935781CC54E6BD43F8CD3A952C6386265971212C21D8B6BF0CC0B72D560DBB79C0092BC0596BA5D5B70A1C48C7E474163B00CDE389ADC881BD58075C5C43D22A28E1EC51023B27024249C3382A25E26C56DD651E92B45BCB96F8B41C671C4730847253A15C1C2061A055603397C394157570848A88D22C4B1FA0808F65CF47A7CB5B06E149900A1DC9E8C4C58BE1B082AB3B99AC34EEF855216F4B4D9D276A687636DA8938056AFB764C554D07A9A7241AFF51B052A475E37521390906A241B73F71F5E8913357C8257392B17430CF76154AB6CAA1AA255771954CA3CAF731748D870A99AA4097183BE1013C9BFC7CD78B8C77C4412D69A518BE91C2DBC72C2656A2FB18231B958714513C51C71CC002139936F64B8C6879C78BEA352AC82691041C526CC97BE790D07DA9ADE6B4DB28953A233B0B7F0AE0E08AEC82256B70A51BF893C1D643E6629011537B845050257184E36B3A90B008382528F0FE268D36453B08894115B3C10617F4A8A3C63E748AFF07B60B76179572DEC958531DB5C903C2EE826C18FCC40636B28E5B37C0B47349C4409C599614D1B5E664B12B95B71C46A2DC76979B23B889673B0CB860480598984A78BDDEC5DBDDB8463E7941515B804159D46E8B51E24139D557A5E8450EB84A3898153568609D382287651003528237325B291D28BB4356AFEF1A903D9006BB24F9AFA4CE0E4A490AC32FEE2475A864E2B74BCBF780827CA2F94D855E0117A6444BB31B4383B2566B2140825025375AC17DA535031456E5EF95CF7E95355D11C7E3C113E589342AACCCFE5761DC21837BB8E51BA9415C2AF3F352B5AD57CD9288DE0643E0EE75D9019C3E7C8BDA6B6645BE63E206925554B34B95B34D33C05DB5970FE016A6A51C86051B6C364A80E832E0156AD688A42E73A6D20420CDFDBBA7B70C40436668BDAB6A014CA920B2A4C34595C187B20D430851265C3C858213C57B29C01AD822373A231598633FB027EABF40C7C15884813AB59A39D18735E64F4622B384C73D433C1505183249044B61857846F9A54C3D3A213FAF2CD9A33194648375FAA08A05AB96E52464B91083E60C7366981F8C0181CB8B4A6342A08614A4123285C8595EB1B1F2B1398EE670393117A26103B41C7C7282166B7E49F745A936981AE9F0BC73CD74F97F6AB133250DC081DF88B1E4771A39CF3BE8F64CE721B5A828528289AA5D4EC6FF0463191D3BC6221124B52C405E88E96EAB49B435BE9415A91A68117C5650E53613A78AB2B0915A4FACA6545B9628999A3A46AC5855FF2406613101B36A13AC31B55E8D118F4056074C78275C80D57D9798819B3F8368F19826A728A9CF05CC637690BC971A86186A97A2889F976BB4654A778258D91D37E2E7B13B584817B6C22AF49207997BABAABA5B7F8665A710574A22EA42B4736E720E57C470A274211D14D803290BB20BD026906B869C1B8780E3ED23F3F4ABDBDD3873BE9191CB67E8C5463B3A21C5B6C43699450C6B4CA2A30249EBA1D5133887E9A4F005C4724D46533A4991A12AA905588A484471F76AA7F38512ED20B4EEC05DB8734E340799AC23546D9C8142C276A46B58874AC6F5641C6DB2A2981C45C310E2171C3D6B793CF4B2B6F0B30E012C2FF3234D07C9105D9673ED3C9433918F70738E10A9F3ED7C4CF506B1B60501BC833BFA3A001C36C9FBB9D9B118CB444B575A768F54379E8C25E4883A209E3B68E141679349CAD62771A0B855F7722C27BBFE4B54F5E553DC4485E18A08598C32AE057C2A241273F116366FA943039B19F0B817CE6691533120A60ACCD62ACF6B5868BE05CDC9A08EF47CC1CB3587A82B699334254F6796C538465120824BB2FAB3172AAB904F9768693306301627F87382E8D77B3D69A22CF878E7998B3226A14EC19AFC88445A7243FCF8308DC8B351D402AFF98B14840ADBBF50F49A14F018A95E3871CF7C75EBC1C26717C20F8BBC87CD2900DD6518129789CF83D9FB0664B966BF394BF213A0F2FD7C0DB493A13A2B8B5ACC5B18929CA325F1C51B037148CA0E8A401587D570B067FD14B52620D16E4BBB74C2EF1E7B4CD74B15DFB08996AB83D8396DA99049477450C93B24C0530AD5B2E9A305EC6B63A09954D1E961B2052A6FA49C4A55CCA4DA1C4711383552CCEA53CC572B6481686B71F12325C03809A36C02BC0835D28768D42C942E97A9AF1C007312FC0560EE1010938E146FC9C07A851C7E07B655EA2A85E777DB3526F0882AC8B011879A015CBCC81F2BA22193640A5A045D5B650250992995CAC5E9058E8EA5ED1D41F8F479E4509025E3CBE83F567E2932D2BF33AF773C5BEDB8EBA9A2240C530A7EB61380AB5AEA96D1F04AFCD0ACA9F04438C743CDBA128F7F70B7C7901D98616B6C49C5CF557326552F9B1CF8FF019BB38CF527B84AF4055EC180CCD5066CE96CA82121E0CCC3C61232B10C532359ACC2406CEE37945DA11CCB0A69102AA510E55195CEBBDCD77705D2BBE77F37B8657655048ACF06519B47B2FE469891C8303939A3F4B68B9516B38430A6216ACCEEED049FAA44FE2D17D6FD15797630CAA001595CCB3934195B1365263D861BF4B27F1C70A500BBD82054B8192417ED0626F077AE670B23CA37F8AE64B8DE49A3A3A70C081CF581041846861050088FAE35F44037549E5244F385B88997EE5FA70094B4FF50B531C87AEF1308AF91731056742F96967C2206B076A1FB219C243A74AA0E607CFEB9604D04ADCA3904DC397E1777D3B58197EC54D37795CCBB4CAF23A5A546672B0C2283AE7AA5C914009A511EDA293CE06AF182A606C23A5EE4458674170B20712C58C8CA87CAD4A8739B1E32092F9AFA24B8DE6CA70040AA769F9258AD144E1CA8D635031FA70A710B3B717FB65304C7B23C553067688C8658F94154CE79083B9A1BDBCC335A525912AE0466AA9B9E3D926C21A25FACC56BB738949366CDDA31CF38551E104BAD04C3CD3866DF028AB7C067AEBA10E751C534ED886FB5C4BFA0051FA7B23D50B80C1A84851847D427009767796592A79957B25806A613E39078CA8C30EE18688704FAFE5879DF63A3E78FEABF45823C3A23E8A4FA58FFACA18FEE9253CBFD62A05FF71CC07B568CB4D837941CB1ECAE7D1816414BD4C3087042FDE3920616002F9CC6F94FFE4F7E02022A7002586990349F68FB68A93A302E8C21C6A385719FD8987E9B902", + "c": "6618487F983BA7883B55EF192AA5AB0132F0489334F6756286643E4C1C33CCC2C395B90BE43202FC5E00073A35C3D08C378FCAB6E2F0CE0FCCDF4F684B55DAF3032818712E426F3E1F57BBE813D67E515E7C343673464322E7B63E30604A10156D1F79ECC57D05BDC55EEB7AF23C9902EFD4F3BBE2A79A1A9CB421D0158297F5840D02AD286C40D607059D3C926647BE162B333973D6F89B6CE4028C7B3482EC6BB2A6FCB97EF59BC1556D2940675C587EB24462E7D0D0584C6FC2E9FDBAE3A7BBE6CA74D6D3BEF8E05F308A7F6A51AC1AA9556ED7E8A7529994C41B34F36314CDF0AD9F07E1ECE10214CFBFA656D1D492810A66ECEFAC960D1377DD1DDA18BFDE0E8363A161B621BA8C37AF3EEA65491F40639823B555134D92DD622A367EF7CC5408F2CE18EF9B170BA2FC62004FB76B2545A54F68450CBD9221CC89A6413B0B1A80D3C6C039DBD1EEF85F4EDB018CAAD07CD17E33B44CE418368000FC000A10F82CA4F0EB860B46CE1BD10CB706DE0263660EB0BCFA0737700DE36E2C2F349AB8DEEE35DAAA5B983215D9E8B801370B93FD116A404BAB783C6E37321C8AB86EED41072315CE271DD4B52BBA7D968FEA1ED693BCEACAF6E20F3F4AA9FCBAB6E7D16D3CBF35B6CEA86CF6A1A88AFE50AB490F35936131F45425B94AAC5A83D16164D348089820E7ADF5253213293D05DA970A1B40506C76E65EF4A59345D00DA5461D4E188C9EEF0DAB41E7684E31F3E20ADC71D6FFD89552931FC634BF91F465E38DBCAE1FBB491AFBF1530DAEED2C68984435262280E831C1E9C9F81AA0C80D91BD57ECC02A1873A27EC3F09E99656687997B9E05460A061F3920572078ECF4BF32E6C42E06AD27EA06425D09F58907ECAE51834864ACAD3FAB372AFC0E1A789A1E98C27D523C2F5068E88E5372FCC8FBF4E5E7ED766C561CFEEC2B6D1AF29607CA7C4BCA48365A15B0C3C6BA585608DC6898FCF4C14414351C8AD2AB6FAE6C028B883E27E968A27ED79367EDBA6B1155A3010D42A77CA7EC2F2525936648671D95011B5BF019BB5466C881AEF38C75E1D6CF775AB2336CCEF8346D6B55B58F7F63026E9C9DC38A0E6E2BD550DB4CACF6433DAD6294EEE825928DC71ED003A6859C16CDE0835FBEEA446394424FD517E94A7D3730EC9029357A54A4ED34EB62A94A58D99097C5161CE5CBC6CE312AA625A0EF83EC51902A4959CBCD9A056DADDF7E2B26036453BE57984C65D68859C00DF8E1C1701595CA2DD5CBE3FF3150C67FCCFE765DFEB2A20B7BF1732FD083C14346FF2F7501DAAF6F6B77954A59F7389A7469F71248A2C70C02EB0533A099167713180A74EF90D5EF3F672BAF5C47735CDF9A025D114A062D3020ED12F0EE1C1AFACDBDBF08A3E5473ACD47C8D45B3F250560337BA924EEED08D5D6BD8AD684ABD18B442F8AF9E125F2486CEB81C950080505A0446995B79606D4706C066C6ADE8EBCDADA3D6227890DB24DC7D1A33BBCD1722F8FA7A6B5E8CC37971FAD3F878D2CE215A055779FF5522E9CBC95B7" + }, + { + "tcId": 89, + "dk": "A7F68B43898F7383B09F0C6EE0D97377D454D528132DA90AC55819A461B58424BB95C7C00A246F04F8B03D3C9D62389AC2B45DD6D43F32072C86E03812909650C52A0104A42696C5E1F389EE4A8775A9A063737A5AB41D8C0C0B8C49C822D7351C1A63BE677D49018CF18311775926746520D650C1C31C0BDB6B570C96BA6B06915815C0FCF6B32F583E80C2B7A84B805ACA39F676426A463E59D6C904042761833CD4C0C0336B00D7E158DC774C5C58BD71458C7C74459682245A03B3C8B8522B7448C3A98432C48495E51E7B401EAA8669707C16F36B72FF21623838B31B496D56B12C0747587325A59509379D2706670C573F85ACA0F426119254D5519D759232C5087B84520F2459148DC6A86184662BC368BC2C83FE0CA7BE156C67C05025A1161BD1380DA39BCA2C99EF727B4DD90D99C21209B573803953129C4DC82A279ACA0A73833C5BE189187546519C2E17EA895CEC1EA7D46594297FF43CBFB7D54466B21F1DD4B72116C10B6198553AA0273CC6F38CA9F9011985012AB4F44C7DC13B00A10F646456D9B29CFDC368FA610C49F1BBF75B5759480A43CACAF99C8BBCB5873CE1CC0D091F6282CB6D1A9FC34459AD0333C88A1C7FA3132DD2B415F809235A101162120CE0BB53C435EED595E01273622CB6A33222477634104A64909A2CA19956D0E0CBDC6A8A611128DF161217856737100205E1B1E9EC844C447E4A4BC538157D5EF37A81F3BFC0F347CF14BD3F75C18F53A777CB0D381B0AECCCABE4005515C911A2C4C7123447DFC93964262FF05A45D969551240BAE60B41ED698AF8E5193BF409862759599C598AC63460F991D47A18A7E7A101964E756603D3A4747A10179CD77FFC1614B5B15D028B7F5794BF7E46B09DF68EEA6744ED117EB241B59095177314194E6C9BFB3049AF1CCE267880E810A855BC5A30177996C22CEBFB58A93331395C52C0809813A2600EB2CE358473DD9A25D8C149F515A5CE10335E0A716D1A09AA817ED6959E18B79ABA93A7CA25562E458A294B767AC5BC860756E2393DAF0507F185C7DE839D2E70885885973B561A660A8E497C0999F99D6C7C66AFA2C1A098A5088685F330969B3526D09758CC8964E3B543DDA6177312507730AEB98C3EA4E4C9478499DD676D2634A7BD69BC2FF8CAEC434BE2F58428334B4014255C4654BCC3A46B737E486C424DC019EF071FDFC817AB7B35362313D7787C73EA9B411CBABB5526441999C6E9ACDBD581987A4A88A421FBF42691A36629A37E7ACA126A7BC68A9BBDCF270F2EFC8E12C328B39A6C80D24496931C012769559A8042F0C2B81158AD77493949987295947AB5CA8EB13B2D668990291CCDD0703FC046C38301CFC350EAB92B9307A685D9BC43E4105F8BB286745E60A4A37E6966F2F7B558F8427DC17A122143C12271A276A0C6D28FF8410C236B68C8CC75D46B403F430716192A47FC7A8BC2CD11528870F7A5AB52A752609D42A05250538E1CC07B4E278CF2977D14F9BB1BA701D771915ED65903BB5CDBC5C1FCFA1D4B04A43AA4B48D946A5B124E3789AF2C34BBAD31A17839653E849E2B917230824887193568FAAC42F533CDF4B31009950EDB065CDC498536A3101876BE0412D99A23CB207074F8A203A4421678ACFA3A225FA5C560055E8D380187EC6845DA3BD3611FD6E917DEE3CF2830C52C026BBA8A6A31578B942484F0079E88B2AC05D7C453D73D3716BEE80C698A323D2D5331B046B86AE007AD40CCE3927A75F4894432C7D235B4B6610A792920D5F0CBEA389235784EA91BA02BFBA238A79FA2ACB6B2A91DBA4BCD0678796D0BB4357B4BDD849762F4A7CBC69D163C7874C9ADC92B01EAE8AE616461CC89ADF41C415E484B94BA43FCE7AF7B520A598B35429809C109CD7C048B9C67C70124B597C1979A7A31B7156CEEF849C720B39406A32D1B639D18A1D0E462699181B9523FFF361AC995BF1127A4E5046C32F1A1E102CDFC431B060975A7437EB765BFE9A486CE6A52E3E33CEA47766EAA9BAFC819F248B0520313EDEB524CC6BE7771C75E96AA1096507CB18E9B101CBC21132A7337D78C0684E07C3AB8260E2070A3825EBC625F8851CC3E653011DB01DB07CC6B350A68652E31AB630FD373B75A1099A72C35441B9B6127B99469F95B503C663C9B3634A212936B3023FB4B50E8186619B00925639F52453979DB24D2B8CAACD61094D1B14C9597DF53339105C1A6D89BD6D626BD6C5D0E1BABF903CA8B4B48420A137B729A2EBAB17FB434EE258EA5F4CF9B9B1F58E85E343292981C0D02C4003F52B2F37CB3E7CA65AEB8A7F2EAC05634457581A9ECDC487223691263B696F8BD1D685770256AEA5A94DB60AE05A501835848E2F8CE8BD7CF5D1365E6120E18D456366B19E9F1ADE4C552050A02CEA89B8F99BF89B36C08232E13F79A25310934E23FA4ACA724761E12B32322F2744D93A6E4B0997B019C6857952369035F284D60D70581C593BF4B5749987B2E569941860E1619AD1D524469E987B7261F2274739699935291656D114525400984865B91895EC6C39EC54925BE2581D24A62D7B2785C2C697FD61C14C28D1A9568C9C331E3D749BA6597D9BC94CF391A7E3AA57C52C7ACBA8A6A85941BDC59CF57CA46336B25FB9BA93CCF8719A0057969A764399EF2CC3A81AA1C4534E195151389432BB43EC54A2DB2DAAEE068921A6A275333AF3A66C22E924C9CCBCD298663D6C4048BB09E8785387F8A291B3C15E72CAC44C6360EAB290F633FAAF4B023D000B03371EC885EBEE4684ED39A3BD03A390A0F7FC72F5E9B8574A23098404E7F4620C7A8411370B2AD8813DCC91011670FD3A29C088303725CB2425C783AE71539C75F96C1B1B395BD936C118B0BCA994627F32A6B53A187884453CAC606C39B81937670FA915A36F44FDF00D0AF0CBABA707A9FCC3672123D4EDBC1E7F30692400CE8E83E198A5CB692CED4363D7781095E12961BD27AFE1948C8F7259E336A2531082A2978C72BC67AD30BCA086C51A7BCD57B7B15F64E332C1F91AB6015105893917102530459C218DEEB58F5DC9DA5262B7D8A3159B43154F8597E5C57CF37400A2C560081B098DC2C20F6B5CCECC6BCF5B96184B0F7475076317C2EE5482ED83FE058108F762958E610041963937930C3AA3E6985423A33A07E77613F7236F0D9911AF49344A15D77C02A68F19C661704EF515871659F050251BF4CA9074A1A2B1A028FCB92E8053DFCAA319334C6443FDC1F8EADE4EF0C36949A1D36B440747C8D27DEF2FE62C033D6C17CBCC8C60DF10A55B73E721350FF5FFDF8C9717103B3F242F12FCF292DE0CE75194E2E59678218BE4EAA47762D1ABE76C755C76249BC0DEA1C5C1625531BD1F86FA0AFDA", + "c": "6C69EB30D9636EBA9EE14BC92EE730720D39E189AE3ABD96367580845A82F27C6C85F7135BC2471553CF1B0E0F092D87AEE9AE24649D6BC910A6C6B432F20993E562C5A1777BD801A7F1C05FD3A9E8DF57A187CF2637F99C6E24B5DCEAA64DB892796803DE9C1B6EB9E297440F7051D668F4781764F84CE499D6E7F6E4086C1F9B862260630E1B3E6C4BE52EC4FD99670A345659E4D865E5DBFD19D6412B4C9D31003D36EB9A1DE2ECD3A495B9E5A44D51BF85610EA867C9F4F1F09E10667A4919207628B2FD91330BADFD44CF491CADA6FA9AECDE5E20CE8AECC2986647F2656869E6201D851AC8176D98DCADC5ABD396B0C4B468871D0EB9332C264AC7550CBA62F77655110C4D15DA73A641F67A7821D7C7EA81CD4DD1BEFC5CC056883E74EB8DC985CA193ABEB30865A59C86167DFB51F96891D604577572D61623950D5CBC20F2752E6C65662950F7D69C4E6D883830326539DBEE1A1E683D74E1B261AD1D825D57FABC3512A405B172BE7AC22479E4D2F834009337726751CA617A95A6E915E50755FD644D600AB670EEB5F1CF097CC521A7EFE8A712E52FC91634EF0A3B87B91370444661674D9F1D0766DE59CEDC70CE0E78EC062F7A50DFA575897BB4A758FC7D49A92C6CDCA5020C0408A7830106529CCD6CBED34B0D5CA2AB68F27CA869ACCFF363BD546CD6EB6ED3589BBAE0D7E3101C71D63220140CE0146DC2A038B4C32749A4B99C3D9666688582984FBCC82F79FEF746180D05B8574FC42BE26E35961E01F2EB634CAC23BDA5D798C7264223524A040C9EF7D42673C7F6B0F2611467580EAAD9FFCAE0291962A98EC23C7351D620EA02723A6493E6354ABE0373FBC77DCDD022025F8C7F94C3476A0E400AA7414F6E50584E14B7DE84968F47083CB228924551191FA1031FEE39CF9A0494A18E34FE269F980A15594A6F68499FB01BCED9DAD187DB29842D928755F618D08B3F44A243257D7EBECADE361D47758A3E3B6E06601E4F409D2208F36397300978FE8173082851DEC328325BA05676848B9198E46966EEFDE2DC72417841E82F9848FFF6BE528F147648F881CF9718E6B1F7E0E20C6A1B37C5EED42DC6B982CB2232802CB71E83123DB105E6DD068BCBBDFA964C9955B2D93B7776EEBA03C5650C631D8F05AD84AD7D8190ACFFBA4977607AB8CB19788BDC7323A7A1D91B7AF8BE6A4386ADB47BEA4B4D93C01665CD605D5677B9A2B75A7BEE386FB1DABA09ED209915616BC544167B97C9E23DE77B757D5B98E63CCA9051B6D882313B4477D10B04128E6FBA7E1EAE23FBFB64C8D091EE233FCDEE91A0EA195CE511C3DF4B24C17B9D36389EF5CEB3BEE6D9A50ED35E3BB72E95040851A4AD2910CE6EC35A17AD1715DA7BD121190876203457836838B0415A53F62F9A6C4CB2B1B8E811FD78023FB5A119214D192B813E9B82B82574D36A5DFB1EA9A03D20ED2DF12A04944FB9BA283E0B290BA7370B5098A328AA70A1455CF166EC6A6DDC0704FCDE258E1F7363B4A46B4AD1B6E749D7CB8F" + }, + { + "tcId": 90, + "dk": "37782D0B89341726615D95246DA633E2BCA9D71B477B77150CACB7BB5A0ED4565644A2565EBBC4AD742AC5718F3A63518D3818A3FC31DC5552EE033522622AB75027BCC39C741B3524E51A26D12C02628BC363AA0D908330B356A412911BDB8042768FACE36B02E5126DEB6592590AC5D867EF937A2BDC3A74930C183411342AB5D0E77031859F3877A1E71B9C50200EFA04730D5A223760A62BD4B1F0615A0EA902492404523AC1F485253CC10BAB97503808C565808DEB9B3176532975638923678002E232AD68666539407AE1CEF8129702C8B58E69060DB422C49B67426214F7DB20C2FC857F52B174D6C93BE90B4A58811EE27E453382E12918652CA9F0313A8BECB7D8D7C9EC4830142539BDD92582D00234503D6FD8CE12F806A5381232D6BF0F0391EF8A1B288038FCAA98956C546AF47327009CA65326521A553F2A4E3983B052B3420D20303D378C6AF110B3451CCD5A4AE4AA83F7B2C20BC27542318690FBB2F542A3A51930E04B9FB6109C15F72B825656586C8B76F54F5382ABFE34CF91471922C9BD2D600003156C621579A0C61626A7C2D0BB7AFF95863A89C3D4722916397601630DE0E158AA9B5974A95107E0ABB6A66308123241275613C210495CAD017202508464847B4BE8792D4DC9017BD94FCE873A30C0A587A16CC7941413785AB6969CC90C47235847AD4CB1769835F195871712AA467C5DF1B30D06BB907C6519CA4AA3DC9884262339D4441C078049995BAD49FB8FD95219EA3CCF17C17F97213AD862710A60CAED990D5CF01919764218D672D9B5050AF0524A7AC67B8A38A4FA5C755050F9431584970BF6775F2609559F3807FBCA6EB67B9C67F6B0A0B4B527D563BEB415AC4989473758E31BBDC8F517911B1E431B88B7E871EA33A052FB1D2536032C561DDEB6526E652E1DF338E9C179539C891421AAF6067F550052140B89E5942E42337A1DB8CC3D88760A1498D5F407497925238A79A0B469FB2BBA70D93195F4017E0008FCC65D0635C9FDBB74EC4C4C50455E1E5B893D03764861964A9C3703FBC6A6FA557D34AA5C352D67C370DE7608E83670A48692FEB4CA17B842BCC8AAC7B0AA4546A607157DD2529182703E8AF6818E836635C428E136BDEED6678F962B1CE847D993B5F7B57370390B74261909A3963264A21DD4886A812A44CA2CB82A06EBD7C1280CA993F542EB36CB656A140471195A56C750073906B6115DC17A93E79D7E6037883349EF3B0469E984B8D63BA932BC592A09643B7C675567B676B25E46AEBC61265872CE01F61F75E4AA086B82B2F51364C3065CD880078933F606B114DACEB97AC9B535115F8166B5E9C1E23C1BD6406534A0209DC96063632682185E8E8C6B86FA3B073AA765718C8E42BBCCC16D1137270374C12A076295B0B61060341148BD64BB5553D2AE933274A034CE5CD62DE96118947877A934A28AF22F5F3410722C22B4839DC72AC2DD8222FCFB918A81ABB2422B30313484292695478F521396114A8FF0FBCCFE94A028743A7FC34EB9DBAD283C891E6A18765812FFB658EA58842BBB1232EAABDB332BA111BE36100745A842F8F3B19809C2E3C554BA3B312042C17F298FE7C1910E6774B934C283E76806808ACAAA120286650F965DEDBC6E00E13563B5547A345981FBB177A6CD6598B358F56C3B272AA2106FC8901FEC0633391BA78DD344D17A219C3AA103A8B078BB3451D690D81AB22B858231850672A92270D95209F01123E6620B043F8B64ABF9252087365E51B8789B76995EE0098CB2AAEEA6760935A9390746EAD04270B91CB08B87ED1905335895D766CB8D229AE939A154A0680C583FD2D0CD71009D8D26A9B6F90C5A463125BC63ED2165BBC12AFD5866518110C4E809CED8932F5149EEA59FE806091906CE6D53AAD7045A69A74540C738B4E948FB470073D35DC6A536475AC8A037A1DB842D742A2D2A41C708C9125EA746D309981B51719CB31A7BA412DD11AD1C1C33C7810F016498EDBA6938D00BE7902E20AC9EFAC7C8E0A22FA5EA711B0ABBA13BBE5138A11244B81AE04C65987B7A5428430980BE57575881260B1780DAF3086C94AEDD0295A793414552B2168300A5A9B077F82FB8A2B697C7CAD06078184896C0D87BD5F8A6A967266E051A2E984B335A88D59285D06775B7F25C48F431A735BC9837AF8383365D8CC06052416B826B3A888314696B7CF67F20C2345CF1113A666A1A63B878610D24744FFD9B8F8A889F3E065ECE25827E137E33E56956FC60CC2423CC6AB8F272AF00179D98E014BE1A2D6DB202399B272CC33AFB2B0F1F502636CB1CB74279D66884F0169E2FE334F268ABDCA372B36084A784B34AD0998BD742263B2119C65527F61C11816724D577B1E77A911A5D9C005F10106A7E8C6292716E27B55EDA339A7A88C62AE166FC324BCB8529C4115969E1C28237977D70C950B31C50D036B0B5584273CCF9B87250666365029F3287429C69943E488C053240B2707EF6CA58D8C840766250853A4BDB938A258B004F0705F0DA8D2D97C753884319D7A2CBBCB357DBCC1134039D205BFDA3306F61C4E28C1271112353B827A2A98996135DBD76B04D4545DDD4B111184B2A787B326A3C0466159114A9BF6C801780BAABFBB578096B73245B3EAA17161530DA777306BA614AEC5D60376288AC7F0E66A4989B93920C37F18A2F91F045DA13A2E7777FB3922A48E9211962A4E9A47BFE467B707091AF86BF8CEB111EFC9745BAA22300C447C28181721AC8A7B51C9470A8F999B7E2268ADC327C160A3F42CCA0C9094DFB65BBAA5CB0153F85225E5C83AEAC55932F19B6A9E077E2BCA1E0221EF4191DD53940063799BEE5B0A5336B6D8324A1A6AC5A865071CAC33C6930974C0A54675BE7392B8227C09EB59706442618F68FCF5977D19C06B5EC6AB8D5C3F5712B96F20ED16A1E170B40219B003A5A453E5B58AB92A786FCAFAE855D3FA66724125D069251CD04277CB1B2065728E7B4437A9954CF711616C25156353194D336F75080BD706ADFFC51D1F7163662B0F84B625226249D15CF7C33206F5249E7325548149421620852F2BECEC6BA28476935BB0F27E181E9508B9838A51DC68EBC70653ED8B5E2D68DD9895F5223A418C49951B5CCCA8494D86AB2E6D773FBB55884E2AC16DC9418100A774548E4A95AF4265772E9A3A082CED78AB81CF15DCC1C24F7D4889CC606A137B29C31A1BDAC4FB050ACB1D28D9C07B3D9973DB9A763044A6F13AF75A46DC7D480380940F9D688DE684BDF867C21EF4BDBF50908DB04620C3BA3112D18C0B347C5A0CFE56E720693645641009674E2E2F6E5DA0447A798028E8157DBAAFD5B9370227C9D876818A9A4F7D23D9567BF413F3383F8F1AB", + "c": "F58D542A5D03DD8D622D2D61E9CC759873479DB67359DAB471DE0C6945505EF8EF61734E84EF78D5A36EEA0FE8E6006B0741C415A225834C644AFB29E4CBF207C24F7760024BA27F1BFAB5A9EC712C3A81FC2F232736BA2CA69AA2F9CA7AC17EEB89A193493800951C71812E4E2134680B3BE6FFCE9508C791EB19494D86F9192990D0745AEFED3A83B24A6E7C8C2BA6CB536D2710C49D2C3122D090B95E57C8E1DECDBAD54BF7CC1E76E79448EBAAD77284E35FA03567FC692D2D8E674D7D805899BD00C35615FAC52298BAE7D87C7CAFA3734E95FC8C7EABD0C3224BBDF0F32B61491C1C060DCDD2492516CC4419DAD6AFEF3B96A1504A9F0CE09F1774E607F3E9AC4484F41B7AF8BE402EFB12680AE98B71557562A8C1D3486C5998515D9BF87CD173F5A79BA90EEEDDFF7E0F323D8920C41A80320CCFB2157A0E9148FAFDA7FD68828E5B612B373342872F3FDB0F77F2339D96BB49D2F5E172E0523C04DE0E3C80C89F5640B84FD8B372AFB3319150D7057A9293EA36A53275FC778BE736F468AB4FDDCEF2CB40D42AB8C834B5DC08C1E3B9E7CFEA61373A46595FD2E3DCC164C7B5212F98D3AAD9FE7E08585E0111265ED71F94725E3E4D9873487C407C74B03EE254EC8D9B041D817E6E9D0827626438822595FF14503D0257F04D99352C5BB09DEC0696804260516684308C1B7B60D86A27F724D10080FA4A2B70C90090C9D3DBBB2D681EA2EDF35A73AEB3A77E4338C5631E0842AC53137379E8A653291CDE9CC3421B2417A0C59A1A3E4AF60F455FB01A65E9BCD415B77D6486495D453BA9ED0C79237313D89019FAA1BF89EF849A752389CC2A8D1E677DB68A4E4CD81A2CB9F09E0531C11BB6FCF0FAD67507A86B174F45C033B1988C6B433E9E66CA7CA69A39446FFE2B219C9A9B3CB808C067E781765991665FB40B5780E307B39C370EF01C6000660827D5CAD3E1BBD28BCE05AC0443A2806EFB93CCA9C7ED3C18FA6D58C99C5E6B6AF785636384643BD2E24F6A705012AD7A4D2E6B94CC9908C086F13515C42EFC4CDEFEB2645D106AE385D4014B983DF6A099438954586928D46476A2E70E36147B8F57DC498DC564C62CAB6C00638895D864438E8C3FB075449A7636BAD20A0C8BD433BA1C6B4E3E8E42ABD6AFD23CD6D76A4DEEBF898F699094F1E2EC5E857142C0EC0FE724F040A02CF191D2DDC0A4880D89A0ECAFF00BFD2E26588180EC93B6E3ACE0D45573CBE0B836A9547D12F00BE77B059B0F73FF36827033795F877CD347ABEE7222697440A8EE6F9F9D4747C7DF26C92CAD12747AC6442066CBEEE4B072F5E1809724B462BDD86309A08C96E23D8BDC7006129C41CD1524E9DB13475F8DBB58B9F8EE722FFEFE0628AFD711A1A66CC03F7A1D26A321093179877A1E9CB223CD688F65772C1F550C86FD9025B58F6A1DC9CEC65816EBFB2CB405526F797A500B52EA73AFE592E7A63BE79D6E2ABFE03D528154C0E8D277C844EFA398B346D96F41376FD969356114854C1997D53189404F499165" + }, + { + "tcId": 91, + "dk": "46819AFC7C032A80BB830361F0547C20CBA4B440ABDEC723C003B269B22B6ED84F159A2D691AC014E3CBBDF41F6E6B57031ABDA1C6075D786B957A95EBC65E6F6B1257637186703E5BCA5F80560613FC3192A40247B62C1D8C3A15F04D36C125B0D74EC6B087A1401A69B6A00785729C582C1194195792C164A65ECBA8077B7847DA022B1CA105D07BB68A58846DF8010CEAC960A783DC48A46BE33394402A1DB589C50A0445759632A2241AF905FFB059DC0C8D9B589A1ED30ABA265BE5D412FBCA0CAA52C662A009D21A9F00C7B4ACFB09175107084456FB92A74E903176777CBAF05A7083344823AC6A8477636C4E6AD5739189A2C1A11A21C9B4D70B6D40C37BC7B6937A24C20DA46D64877F167CBC9FF5C0B848B5225B7F24D5A76B0A66FC57A394832391D8BAE9C4CDB5930CEB66B03F52613EF40CEDD810CF2C45D0A62144227496875DC682CFAD4A4E82C42C73C6B830762D068B96B2C81BF1250F9F477B9A0A318E134D22E04AE79B4B46798C37D47E7B63B2D2F58E95841A9B673372AC619051B2BFAC4A654C07E7C714C8820724AC2994ECA3C133915215529351A66B29CD7AA9ABB31986B1677D3DE49007C3C3C3F9A1C4E52AAB1023EAE38396C301F1F57CF653C065BA7439F597D3D6BBE4395982E369DC618052B55B19453352FB603A07A24164B63FC79701A27BCD22C813D58EF86797439B0EE4CC79C9452BF1D2B71E101FA2B0BB392A661CF6B68B4BA0DA3A52C6311E706462845255AEB56C2E324CADBA74AF47CF7A0C5F23735A5185AADBCA26C1638275D045778144C6F71C5FD59B247ACC0A4B22040468DA162EE6B13005594B075C823FFBBEBF1B1EA72A866B8765C9806A374250800A50D6EA4FDF421F87286205B8C346D2348A2A2229B234B7697E18C5BFA6A968E0BA4FC6553752571D880C6C624BA3687480CDE20C018475722C8E09E33AEA03207009CF3AE62AC216A84BC3AFDDA813C7E371368016D862819AC68E5FA8AA394C3E3B94CB9A9AABABACBFA45B2F39F69CAFF354F287A0B6EC15449B82CEE7A1A9041D9D53A87953A1D45217184B2238710291777BE0C713D6F200C67B1658D8481FD88E8E33BDCFEAA88C0BBE5312516C90423DFA92E8AA927330A4A10B884685163CB0A9084990D832C6AFA960223A14D8085D07EB29587CC23B50A5897B969C471703DAC3C2D662FD1C8CA568674D230CC994857AD5C6180B10D3510CBD018966654E314C6CFCC979D0B428EF682DE27081E0663BB1A5B8A11AA9D7495BA2674CCE8698705142B7627CD34ABD81FA96C43829AAE87FDAD3C2518B8189EB8ADD0B24C4302B66F9C8514361947086C0E26263E659EF446AAC4179F4AC4AE08BCD710C63B1B18AFF405E2B793BCB8A6DFB95ADBE52AB0009106B0596AB72BB50B7AFF25A1822C693876CC54292ACE2B25C501836414C08324508861A06AB40778412A65F6699E548916E9CA3A8AB4D68394799653A99785D11DAB151E4A433C1C6D6CB7973168AB4A027DD0639381306BEB52420F7000D81AA1E0172128B5018B0402021B49CC708FD5A00CFA95503DA95F985A4CBE60FBEE8C96440743ED49CF8DBB017815EF17561E56B04D7E03B870726DE1350105270BA1CC905F9164AF44D1F68215A0A333BA4BD03AA6A2CCBA60D0B7E74A4A41E67BDDC74A118246E4845789FD430F5BCA29CDCA9A1E47E0B4231F66A4FE9029D69337415412286BCA0B8B38BF14AADC7197B137C10B0B17E2A40CFF8430D80218F8BFA28382A026BEBAF083816335B8824A47D01647B1ABA5A8D8C2A952CCAA3042AFA9AB5216683DFC83D03419BE4662ADEB44CCBC327F038A3E2AC709372C5BF747321545319832E741223AA7AAD9827A288B5691EEA37DD785ED1222F0743C664CBB4968A3C3DD74AF0D31AD26A2BC9ECB93EEC968BB669EB76B9005B7DE9E561C0E6C75FD6074999CE1AA79A9FD8C128B853DF72740E0094E5E77F84996BCEA450B802654F555F38D11999456AEE817456C41D8ACA024A0C6D31786D738A0A387488E24485B18236243875A9241A325850A668718432B02B91A872250CF1CA7BB3D68618450DB727916961578C50AA5C8A5BE8873E8877C9A241B94B35AA6B57421C5CBD7500B180389EF7F326B27B63E9DBAA5CA8AED215782033595F79CD255BA823CB39D110AEB1307CFDA33D2B193E7D578AF73B8888B601700B1E6E742C2520C03DA05901C29993E4234552981C69CB232BA5F2E229C5231D840B1F8F667590B89A9B0C00307602932302ADB80913A35DA711A4EE5C5FCF682F6B90486FA0B728638B98606C3DDABAFAA169B3565480278F6B4B64B07AA03F0902F409772EE242E191291A06B50987CD58C16AE5983B47EA400C53B295FB8E3206ABF1B2CAA9C46C343A734027C6F221BA68B42C6BF44D806C7A728064E68BBF35F7C01383CB25EA906126623855A31A06891EA4C231300DF5933BC312430AB61F0E536E5E131EB5251C8309047F40B36F34277A31161384C90FF47ED956B0F3B66A78550FD0BAA32EA71BC4F883CD2165EEE44F81E47FB9807BE8973625148EF622B0DBC443403C0410007C99D67316A517DBE202DF804FF1133B32A9833A2116829525FB68BD2E6A7E938CB409E3878D13955B01B93D3A74A7FCAEC6A7AA6752C7B0B0B1F8C70D0A33383A3C3ACB233203628AEA70B6EA6451082B7C6EB68332324AE411B31F120A10781DB456308543771310A2F851ADAA125BE7037DBB186EB4CABDC89BADB4012364DA1FD63BA58CAA9112FA2FF5AC3642319E7A96C9CBC13C00A288DE398D55B2A06CB71187442476964D902B422B24B62674A4FFA9794009866C46978133088696A084D60A9161003B0A3F6174B7CF5836F7667AD96959F3514169183DF200CCF6F541C3AC4066129990ACACF7AC0232279B21752639566ABFA703D853741C2628C62896497B575978CFB7DA37C026B1236B0F1EEA03450736AE73AD20F8853E33B90F40CFC058BDFCFA00379A2080E0B81840993C2505D9CA5A3E59AC1377C4C176BC7EA512FEE7A1D85406A3068ECF91B0F67C79B424958421AB5E411476015C319ACFFF692D67F92753BC431B9CAF00A6B000F526D57351D6A6A63E76AA5B50212A23C64E562E8D66C7AB30843D503FBB8941E064555203ACB3C8864D0A427BF1504856688074281C66C3A7A2B0CF582E2C2293962C2022A0A26F33529E963D7C72486B24977948730CC9A89FEA714A49426669897842F4E23D9DE1575014671BA3801285563213A3FAB2D00F0D26CD453DF0557B4190F81298E44F5A57B35DA4E38A8D970A89E0820A5AE30E7F77CE282425CA39F4A6918F5B97B9580AA6019CDFC5604A13B2EE4D72F5D0896F0C335D20", + "c": "49C77EB019FA3D007EC426C759E07A7740E5C63AE8D0DEB905BEABF4531BCE762A7A455D45F571218C23A434054DCE1D7C65D3557C3D4301688D72D95A14E052EBBE6AF4C2D878837240BB8473D4023B5B0E74DA7AE7B6ABBAE062142B8B06C195623B88757564D6C58C0F929A96E43DA3450B08E0DA716FE52CDD51CA5883548B61235289A2E0F657B250233EF8639DA08E6E10E4A6E75291851F729F89DC37601C520D5A1904CA9D752EB655F9A73190E7350AB410348512BF9CE650943FE41C03BED22DF45CE1B09585E20C67DF556B05D68BF64251508FE8012EB845720E2AAF158F1B069374FF3FE7293A0DEB05CF914EC5C2311ECD4657A4BF55B7DC94530703A60EEC3BFAF70CC0CC1A2CC1C147E35AF6073716F4BE540DB1FE13BEA22B7175BB50D7C15F044AA54B126C69E57C1D4C5C5A9CA947AED4FD279DCB950D6408B62E7940AE12076702E553E604340768A870931FF3CC5C0F4C158F1322BA6FB6E3ED4B5421ED5A2F5949004E885E08E7F87E631C8674EC7310240C16F24B2B5A9175DB724628F1F0CF76088ED5EDDA985635C614BB0DDBD79D3CCBDE0CAD1CEB9A3FB536F71FB5DD0979FB87F0A8D4E33EA11AB19A98F36AEE54BF7870CC22DD4D4A2C375CFE9A68FE64776E612999BCD54334B601934459D0FC18F78259FC4E5A03E6A4996BC66EC0489C1C012B43195DD2EBC6C9A45CFCF2E3AB611E987A9BD527FD89FFBCAF78A2A8E03F1FF07378722C9E624A066F161466D4405E851E70752B7A963195DFB8CC8DD4510FA699CD0B0BC0213EC6662CDC9273A8F2648D4F68CE6EAAD00934CEFBBF8072D0814634444534ADB4CCFB36E5067594E5723893DE05F7312B380DC08486563A0496AFF6F2349BED9E44E09399E1F769440740A7E52097B616E58A859A5D3C7168364CB0C746B524EABE1E51BE8D4CFDAF80A73B8C6779B70B899086D12AE3662D0BC196151F7724194B2E01295E08FCF3C9FAB46CBAE3F96B3BBD6A66D51AEEAD6C4FC2875C5C2227F12E227633264B8C658D867AD67A85EBF8B9732FBBEB08103C733E7ABFE7F6928F414C9F780F2C9F80BFD27E212EB007DA10322034021301497D5F7911C11F64889685B6B6A7C51562CE13C6E8908B6F62246FE6A2A485C0B1BB0038BDF3FAA4CD22FA450E375B0449802D8D96DD33A6A5EBB58EE78A25AA33E8F737C5346FE135324146830259E927BD1E72FD208F2C906792C60DF161448EDF57E6BF77D6B9DAC24A17694C996E92894B9F350799BBDD7E86F30818960BA56FD23B07DB2605392C0A9E152E255CB4FF6FFE3B5BB5153E0AAE288C97FCC0479F3867FC5247E850A9F9406AEFCB87EB282FC46427AC4332D69940153B1B8607E9EA3F5681C9EF1E9E0CD06457187A72C2A10C61C7F39786C7608AFB0D19857A1EBBD333D148FF23BF54AD18CD21019C134BD5960A964ABCFD4364ACEBC64F09243E25A9B5E33A2AE51BB0523D59901AE4FD946DD0977F6FF46CCA2FE7003CC3AE90FB85A3708F0C0DF6A2E5FCA2BD46" + }, + { + "tcId": 92, + "dk": "5CB4C2E47C20D4D968A9E55D1A4A1CA172A154973C60F1BD55FC3A6DC8184A17153AD0059E0824EA12238C3068D6553636F19DCA495EE2064762292BC318B144667CD9438A2C32904DF01AE90A11FB0828F0DCC150A02F7E758BB95C3B64F093ABDC9D576915103954E67B7AB5D271F1603248B16B15C8B913202E85461A4E9CC589C54A0D3041C2B6953E73C24C5C6F0B9B6BAAF63CA11863A2E47420D790AED7CFC83C6BF5C15AB4DAC00F9239B7848231652473322282CA0F34F73C6D9C25040CB2076085D85186349B03A518CC720C0AFFD37E61B56B394CAA20074AC86195E7816AB037AB3D300B9FFB6892199122E703FAA7C6B9C34D8445593BDC00FC786C7CC206898325E44338E74B02AE931D95AC50DFD42FE6C16EA7A344A4304FAD54838AA9B78101B7E803A33ED6822E7C8FDD693A5B3C9F45ABB3893C6680C765149266C16105735A9F94B4B6E0A78A94B537D37A7EEC131AE32545BE14BF6C42384C9B9C7577001492254B7A85A6955551E52011656D95B236B3C10B7CC79119E5223562C3BE2A5DBB527110BA54B852C99F7607AEF66AC730003EA0A170836B22289FCD39A2F5478FEEF38799A28114F3875A7A226FF7A2295858ECA953F7262A6A886087FAB084B7BCEC4663486077B7E7A204EB4A9A7374CE07D09E61C5CD6B168BE584F19C513C35A2951033445251CF6BC85DF872B8DA47F0B00C17391F66706D2BC65B698AC85B36ADBF166FA6A23764562C69FA57A5F2B6EB836883796DD671A95AE4B44A47BE78B22E775C233144A0D95B6C8393AD16F39E217C9FC59C77866B12E0039C480945D98B6A25FB9F0D4ACE6F102039171932F27B7DB10CF0239707D45A2BC84C4A0005821A3B430B125D02934E360193414AD85151E1F4A718A64CEAD112AB5A4206CCAF71B9AD91EB5B2068C1AD04CAAA3238E77355CE71228D962EB4E4AE7B499019C1CA15179027103EF85AB16B0BBC538A955100C328845BFE5199680861F6C865046928264012A7529C6B55B79BE27CF497308408A1A821658D8AB146146F32770B5B173E2B45B97BCAA0B833B68C5981646B3A9C2630D98B4193F6231CE3C68EE1C3F8B5C4EDAC4063D7585A127C22866E96B6984B71132CC90F3844046CC7C23A498B65E4349E9737363946BE782BA811CC67B82380DB87C5F71FED9587D2E4C37EF211ADBB39C973B07266841BF2A0E4F8CF40E62B9FB647232A111DC56028A73B43143E7D671AC1B964EB488EF932510E231B08A64DD83C3A3FE1C2C1A2644AEA554EE85264F4768226382BC5502605519B91566E9C7D52D1922D87BDF1E3640545C70B9C61D402670298119EC26569632A71A362CD151092F21892BCC179252391F0122EEA25CE20590E5605583C28A6F30E26987C23D56FEFD49D8DDBB0C27684713C4BCDF4411F66B541996DAB7025C3AC1E0E424D112A9D27A58CA78B6FAA00616794492808B5E2B48A05240ABC3A6F7EF5339E7A530F703554024D89F0C13514668CF8864947BBF3721325415C7BE738C321482DEA3478D019D2F298AA7B315A468DC13CC39CC0B67FB29C72611051269B42279AA25B942C6152209CA168026288F77515E9BB054CC1B5A3435D5771D9E7BA6E19437BCCC947EBC3DE0B9B87E2029E58C4AA2BB7750B780C20C5330CCF83F01760D561976ABACE156F1448C3971679DB529E280AC4E17B67A5F54B7E5072ACD4BD1F4B2C4CC133E6480569AC86FBE368D102CC26338ACD8992DC60B80AF834DDF1B615A23B97453C5E8A5C705B5CF191B79CD32F30711BB07C341CF7C93FC055B4850581167F7A180BD448C0F15858D00353B3903C984169A524AC74640F7169C3C691C0E9FB362CCCB6283C9403613BF545C20DB6C21AD96615422A79FA4810F59691F16ABBB0AC18C035CB2233A80AA7CB050F44283F01279F9DBA4AC2D712A0739DA5B5675776C2BAE37C6D4C17A57230A3356DD691B87278CB85673DCF0C135CD6CA40697215396A67B03345B5AF5371B74E101D8D284221F08E39770A86130CF10B327411BCAC3CB20F234F260AAD1A1220873BBDA9658B98237EDA14065A48C77FC2351E8AB0995CC428C581D400141C1B6F31555C42FB649F893C93570C8BC00585AA21327666AA5C861BA01FB91A60625B8167C663D6B8CCB93851C7236C88D8353A25026C87ACD2A16374F213D37B10A9143C7CCA4C73F881926C89BC31C62AC2B643856877603DD24C032B6A90CF661023FB44419897E22168553A4FB046A2E5BA788951CEE12C3D501556CA8744FD47245446916D88065A522C9158A82BF1B495A91504ABCDE6774F51B405D994332B5735D925875AC7BDE26927FC9092811CAF614372B357B88B3C23BBBC44E880B98D7981EEE36F255A4683E86ED3A03434E1C075B3348429804095A647D53400D480FDA3381DE897EEC08243E8A2CB2C174BF79EB4EA3C76C42DE8DA9ED1E3730BBB655942A452404A0E046DA8B06F29FB51B69058D8B2413C79C3DD8C8EF7538F35E8C007AA5867B8076602715FA98FD7B89CCA9764DB94CDB657413445BD93E095D70B2E0E397788020A0F38B466772739211436727316447FE7469D90D21E2697C5D9614AA6927EE68B368573B1DD2B26AA0B9706598D863B3AA5D74858D5445A59B3829877E26178511115925B65BD367203B8592CE34ACF2A67CF80777FF5A8E88B7E2DD27383F8C6657A012704BD556374313C3D4F257F1D104E2B5B631F41C5D8992344D8C9408B8F63A5C5E479B432DC5C1295C0759406482689F62C47F30B291E3AA5A04AB762663B5DB360C7481FE29002CFB16616F50C1F1CB93BB8828DB22A02E2BD2E166433398436CB92161974A64C73D56857CAE5BF7EA07B5AE9C94DCBCAFDA81AF4BB6BB23A881E181BB6902B9360BBC4B4730A6CAF51B78190916E50503E572951555585156762C547B17D19B4E5D8C43AA63CB331A7E44B2151B0B31F61A1C7628648D0381A7A9C4FDB2B9E2998CB7121ACF280FEC30AD657619594A9A6A8106158A4379B3FC845A2F369267E41C84D8309FBEA7BFE9201B6F25125326FA10A198818ADD1AAB6010A7DC220A19C490CC5CC2478970F183C2FEBD346B35CC6A3A399B29BBC99E7C661D27EA6612068609CFD91B890A9C092AAA638C923B182001D54C87D09A45E5B58FD11BD3965B621F426F9C09A79A39775D4144A64CF0142C8585120552692DD503FA99C206F7203FBD765E5E094F4666891310CAC0CB6D8DA16DE0D7B4079BB462963D3BB50DBD799825A89FC965130C429FC78DEC0BE8791A5FC5C3256093B6A2771B74BAA0E7A392BE9786539C7D779967E1C808359E68078657C842E8DAB13CBDF6F7F8ADD047FD559D7301C13F6012418DA0E0889", + "c": "F4992501CF2F2EAEE6D1417D8D17317D61A33D8C3BD6E8E85ABA5EA7847077B3675F64C9EB4BE036BEE72C51E124FE95594B9740401FB09025D3D2BD5E277D562516F2AE98F0DD8301C3E069A81E395B8906B5EE054F0929C6C1127B36186CD121B960C582CEF4BCA24FD70D55A33851BECEDB0BE236608B4AEB1A28DED9730B28F3B3DA55337F12B88CCD7073C14E4D8133BB949F656A916A5BD661FFD7320818316DC695DD7D26F8CDA18C7F75224D635ACE8E276F747E73D78D42ECBFBCF8D54D5B5483F8574121C422E94A72E9BAC36D5C2FDDCAF8F5AEE6FFBD4D29C11E2FD2F26E93CBED40573F0D3AF8AC3CA56F8226D4FC5A17818C1087449B74248C2C9AD52CC279CAB0D24CC7EFC60499F927F7A8898C93E42C0859F9E76EDEE539F737BC047E5DBBC9E0A948ECEC3D6C998CD2F870C7858ADFC495C83C65CB069DF557E26E6B0FA3F2182B33E93FE2ABE2CA6F55B3022A518B7E8885BF7357D99C5A8C49D13D9D31E3B845F4641C8C18F4AD79C25E2F854566DB4EA208CB0AF3302793AF0CA778491C666C0664EA0FF3CC79EA6FF2F4DDA3A5228ABF635E8002FEC9EB376B7F709E73A9A162ABA9E14898C3DDD999F5D3EC14B24CE733A30B0529FA6B827482D32031832A907F2889251B9A54B705A19097F7D83F0EF180251BD2A4398DD500820863D051C2F6DFC14D4E712939DCF93D2A79DD985B22025112CDBCBF2F293149E343993546FC8B5DC9CFB7244C9CDFAE8134FE71F1EB60DACFEAA63A61E80EC02B94ACD3BDAA73051ABCC54D09486E6FD3ED327A947926CBC26B185F7F0620EDB773DC5AEA75711B94A076E306CEEE1DA7AEEC03C713D193281F62107877EB6C2238FC4230D263F30CCD17BF3D23138055874B3ED4415203A9AE367F9AE5B235B5A28957EE12D8F256AC6F7B1F7168C6281EE9AABABAEFF5EDF24F9E4F11598ADDDF15E62BC1A706A19CF6E827F049A7B62F185D2D02D92359A76D53C7685230934BCCF1D99F49966BBCBF57539531749E79A3B194BC0AA6A4A139BD5C622F65158B2C1EB18887F998A9366277736CE47F7BA7A255F6B4953E32E8E70A18D1D18914D495CC93887D523BA1D4830A6C71CB2533238819511D4E4AC6BCF736557659908D49AA58A29A5E66E4A10139F1A883CDADDA4F2B874F89DAC2E9B8110347E62DE75C6B5D9D64EE1150554D3AC40EB0EF49BE3D21C3FE2C3C6ABA7BE55503F933864B8D0C68C38AE6E0AC92FBE31EB2A8F5AE3F031B1A201473B3ED05FB291E97386ECF56CCAB597FA4CD43B09E6DAECE3B24840A459BC6045543F140E52B98AEDF21DC5F14074F2EB673800604A588DC0F0D13A48246FF3BD31D3EB9C6F110391927322FC8F4C9602935430D94CC9033BF1881C1EF805377C7D10C55A5AF2520A0A9D459EC13E4C59CB80CCF0A64B092851DDC7D418ADD1C8BF91E45623411B4390CB870F63DBB9A014E98FF19D5C8F54B64EBF931A4124D8133D7A9CB5A7DCFF89313F39A13075C70E68CA8D82F9E9A0E4EAC76ABD148DA" + }, + { + "tcId": 93, + "dk": "E895B8DD5C297C811D01281446C44C182738CC585083B068A5DBCD5368C82EAB2141A11B01C28BE800CA932356374813064CC1A60A72E5F4955EB20DF19C9060C9BF2B0B4E0511116F4A49EEA604D6633848D264BEF77A35F643CBAC92F5B25F686011BAA875DF33121E84CD6EF51F0927B3EF4A2AFDC1BB071222BCEC47839875379741EEF209D3F5118CA7AA103A11E738C5F881BC60A67F88B6B47E757A32340EB653C2CF3C6673CB41E843CB4A0875A249851CB7CDE5D87A4917A5F03C558F44451E4382D4E0082F48B4DE501B813270DDA80903C81409EB8470D16B52AABD0EAA8ADA7AAE24B919CA95458334A4AB566B44F865CC78C9CFB8214D48855D0413F2EBC51302014CD99129B6BD8AE11983602D1F05C425138D6DE17AA1F8700489483D206BACFA4E5746A6CED9B6406785BF85C7252641566511DB8C0F72AB752382374C72365E0A9548169718A910B29B6687AA9966505E86137FE845A94F74BC01443DC9F81B43E10E1D7A7265E04BA4F7A733ABAC6F6316BE92292B942E74D04DC3419385EC3AD1C3A10BF97DC2B259DED665DA7258342059C2F12226D46572EAB9ACD9740E779406A73C7893AF3F1C027AC37C5A7451A6A87730B105E0AC9645BB2CD1D2188BE4BE3FFC9BE5B956CA460B50A40D0CFA6BB69107DD1736494C7AF59148C296655FD0630BB14429B83F1F057AA9208B3F11C05B29CB1EB1044FD73AEE659C2040C2F4DC8AB9F0664122793FE89C2536869EF71F80629EA01230EC7648977740D6B11A01FB88F8F99766692ADD588C55591A61634B527909DA61782E995718767D20614175BB1C6FF360371A1334D5B820AB33A03C582AC5163FB606AA489C29385DBE2B206993391FF37F7C3B8B265939480AA01A451AF40C607C18958891CD8CC21984F09426B20570891E3E090DB6422174A03F8D151725126D6C246FE0AB0232279FCEC27415A417CE6424B70B3201AB3E6F14AEDC9A069330AB0949A30FDABC6C051FEAD73705F2645684B7A78654E0CB531205C3F00780F218392C338DEC8566254117CC186A3412AB43A237F4306D68634D8EE624B592835A37757BD645C79C8EDDDC5A33773B6B086003654894577F59F6BCB46731EF66A9A1B96016E94F87F4199384460E02A4EC37A1BA1546106B254EA53AD6B47869F556BB88BF5012CEEDF61C69F3551465222CB758FE61BB28B541EA4CC28F71AF5D115B7FA256126B0329C579E85425B3C9A942B81FF8666C57D20FC1443AA6B5404B477240271ABE3566CD28C0AF5203E6981D182B10333BC0CC62CE7F124CA345A0CF55601EC92A14D7783A5671054C14C24533754BBB12947D2A4B24168932CED48E69E619A806C3C1DCAE30495018F08B02E66749E3B80F686C32A9833F3737154854478839B17ACAA4EBA98AC57B1879BC1E348CDD4631091386DAA38E12EB1DB64AAAB17C441C8A155949C23357552EC1A4E7E568823804A0C0B35AAB0902AA3E5E18C478D48F24A2B4E205331F25AD5069AEADF6C293D68933E85B27E2158FBC4841BB873A758999D1517A87A4DC89C42DCC69C2D18F8C090D1B3452411451307BA7C08C602F9754F1C45B6A376AF35B36CF327FFB9586A8D23EDCF4C1739C9643E96A613496BEF0A477B097D62A9E4E93B0274B503E5A322F10C4C019AE18EB80C136ADFBC95489EC340E59221C12013A0525BC3C5C7CB56C6283AA12E2B058B9A16EE748C1E613A2C03801E44E39C6989421A6529227BC811A73B2301D981152476FF6632411617EED110C5DC448C8B706ACB48D4E2781C3904053817D07B56E9A2C24A3109710208842792B67E2B5E2B576667985159694CA0590AA4B0C8978BF5FCA96A725CDD10212AE92556BDC000BC77414D20BDA257E5D559AEB4BC75C0652F8C5834167749E589F2915A4F9C406F520869F234BC32B6C72C57E7297B1C5A68497A4C13B53255915B372406AEE46B3A7B418FDD439CCE023222BCAE78C9B405A396D665689177A7AD360730B370E69A76A56C4228A9089695D0D7C43C6D042AA01AA2FEA7025C391253906FAA97ACCB74149F4C44C902C0A6336DD76347578C88058C4AE7A54908A853745971C7A0365DB8CE9433A1686C7C7D16840F6725B254A51D2A8DC659B6A927B5EC074352BAB3F559DB71812E2DA045D9C10B13A1784E46BC7E926D018145D789B78A7C65B61CDD1324859F30A42A168219B1D5500527DF205001D4D5EC66534FB33B8410C5EB0CC0EF15FA344723B2A7B4C0A520B60562D341486C3103A329332989057DA75274579F7A6AA62D51EF98A9E931C5654AB126104879231C4C1B43E2F37B3E7E18AB13A352DB65367C392CA6721A43A2C1D2B8ECFDC5F59150473E2659FC0C57CDB91681C28DEB5292C376608497D87119F85D2A994C48AEBC8166589124D6B5E20E35E4E52275138AF518B19C37AA8B0679B5DE98EA61381BD513535E7847D6C9C3FC58A6A489FDE1C33456AAAEAE92459B5BB4073808F4C512CD8C06F99326AC2701085C711D78D8D41916AD93F63626D2715C1881854530453D69B9A86448A50F1809370B69B645DB90B04AA27A997A9BF1C009374049F55B77497E6AF622565686825DDA321D64005D4D457308864E352C6FF345B17A57FDA64022F05A80CA61A644BAFB7906B38F1255A677300739A85DBB1C0ECC0C3493FFACC023F3B9541D217DD82A4185C6BD1B011E8B9C4ECA71824651B1AA41EB07AC5EB07B9119374984B99A57307C5E608989A201AD118C1A06FBCA614144C8481714B77D5B821CC0B50F80C91443A92420DB8109ECE0686E00AB130DC67C7A867CD3A27A7BC27F3AC19D6159F3D0063F8DC11FB841AD83BBDC8A1581C69C5F9D01805500918C496F3E48F529112F0BB89C495599E14B0D27B1D68C77A7FD24E4402A5C93C9F81040448B67A926C8805F9AC34990F0B131F5E8A4A09E77E9FB380B62A5224030ED0663E05ABACB64332ABBB4D8816456E5780F69930C51355A3F70BAEE896CDFA61A1419570C31341DBA662655D92B507FE336D1A58B0702C4A98C2965E4362FD56147B299E5A0B20DEC6158EC8874C25578EFA4F228BB73979208AC0A4FF1288288AA3B2F57C69D33790F7224EE769ABA0406B035A9A4C8C2812CDF321B74A875BB0B9041EF92E0D27B71A3602D6CCADD882568135AEC5800D65AC16914B597B526E9C83B59CD2AEC3825A24AC8E9ACB9E80220B97881C9650C2D3E496F888265D60747AEBBDF18E7A766E042F456472C765A758B9AFADC7DE35B8F9518DF30B791F178A7F5723B32723A44FD9E241EE028260390984E116CD064323427A8B6C5522B88E4B710E8C8283EE8787183176BF4AD28F8F2EF2F01856A2EE84A9715D103158E05F00", + "c": "1598C20DEAF700AABE2592E50832B9DFC33CF78B8BC71B0A73059F3C01F8DE719F65A0623734281CDF12E1AE6284AC5668B8F0F758A1216136528C00F31810A293C05D4432BB63F3CE61239FCDD3FF45DD1A50FFD2DB04215FF566CA9E9AA9E37DA8E78BF279A08301AAC779E3752F05AB33D2DCB7751EF3A18D99B531ECDB7C0986B35C0AEF64897BF24A97E480C05988A136396F9AA29EA73DE77FF41788199C207829FCD2DA68C2DAFA3EA3A0C6783F9A1678F5E6E81E84425D0AD26A8A84FA09DBD27D3C8DF52A54721EB08ADF7DB3BA9D877A6C116C408B5C7BF9C01C0EB61DD9F02D645A4A744ED5AC75FCE2751C4253693912D3A9A71E469A3A7234CA288DE993FBDA9CAEBA8A53658EEC19D8950776FB332DD0D6F64DCCBDE238F2E7BABC82BBDE66FB202A88D22EE1C039AF0921F893689B23AD28D3BA7D8DB87F5AC229733DAF12FD5B10DE452035D7204F996AF51B0F0F7C2A13BF4255E9A37157F26B97BCE1BA50A72B9FC9FA166CC8D499A1BFA96BD4A8EB5FCC8659C8F6EAF381FB968835440ACD41D80450548DCDACAED400E0EE3FB9BC7C180B53FDEDA20F7EDD50B467ED082F408452314C42F6E3A77979379CC0DD83F1FE1A8A9DB4DBE0999365B14B9D75E9AD5533CCD519302904126C18ABF5CE0EBFF5DCB90809500F5B688A9AF48D64FEF6CC2BEE955906776F3BED1745CB8CD73063F5445F696A073C370DECE09FA071B66DE6B90C9D3B62D94E44F40DAE75562F5F722C55C13CCE6059A9156DC917A7AA2D28887C06841B01E48ED5F1E1593FE38BE165716081E5287B747DC8BB58666D65E22AC733CE770DFB835AC63E27B1B96520FA4D7C4669131132FDC92F8FB5B4562F72A93A824E3174B4A0CF04CFB1CF6D425112D7F2DB61E8C8FA6E983D1B110B1BB508A6BD37838756F9CE5063D874E7E189C9CD4222A64BD528F532255DE825CD2B954C9273F7A1EC6A85555CC13DDF16D7236C7839597D7F366CDAEEC19C62269A9D2957550D9B5D97CC3AB315353C5A5EB945DB6F9D8E7810A28669C5E4DB3ECDC657139B67477C289043024CA1B37E2305A206FE739075A562543EFE710663F7B479AC9D5642545301D41A655379B31C3CA4B178F23E12E80855176AFF78325C416EF6EE8665E5010E09DECC991C061A7BA20CB597D4D01614842CC918D0EFB314EF1793C50C11ED3D2A649007000ED87F5D76F76ED4AD3B7D218142433423AA61B548B0CE5FEE8C11F66B7712F6D26BA17292BEF6420DDEE9B11070DA1BD93A08AE092521C745B11136B4F9C6AB5ED7722236C4E776E90ADE469879B573ECB3D4EAB2520D401BDF6352C8EA959C9210E2AC7CFF50A036D77209A82843614D5870F20479FEBBF3B68CB5F4B3B6823DD3863BD92A836358FC1ADC595BA0B6376D7B1290D7EE7D615A2457901367D988BE8B5208F7179FA00C0AB64CF5ED6ABBF5FD136D6CE9E9BEFA9E8CDC1AF1F3AE9C95FF5F46F98CC6619A3A664170533A589354CC7BF24196EE361924D48F5AFE65F70779D4" + }, + { + "tcId": 94, + "dk": "0418440CC60A0D376B474C2435C349E16051F96C6F93E3B7C2EC6BFFA352B31BC6F0D23D9F592EE3CC9330B49E297A8B94DC511825BE4DF459B35173696872CCB13F78F270E35A452AC55DCB0A0E01809012539B990195CA6875660B20DCF00040048EDA934CEEC501BAF21A6E54B096C8AA93E142E98A7C6A496663DB9317585CF731644AF55DD3C34CE8988E48C27BB9B28F5270252F6A84AEBC54B0441A7099717AA68DD955B9991C533B67C6977851EDF611A844055A47B5FEA256745C34CB1C511CC934EDFC7448D5B8E0D681AD6877168815FCD4740F1228236C43A23A7C208CAC0D8BC8F4855049310B5C06A49A8706EA134B4C179823632B40489C270814D102310C35B76FA5272BE18497A7B6B5897D9FE7246D3B940E25AFB7C44C41DA25E4128948E78CA8D11F241243EDE3A691D25DBB4323A884747A8C514CA0AE4A89557AD34F92BB414840BBE7AA5E3535894BA72A9C1056A20639D7265D5199922F3C17EB7A42C879C25466BFB5D45195CC898CA8BE53A01D1864C87D548FD4E3B203E51CE8CB140F061654085CACB3CDFF778DC11212F4A50107A2C7003D67A92B859312582C3459A5B5AFC02935F8B462331A416117899C32321670710668A8D15A8B5F73CD828231446A19FAECBBA8849DD0724879D008CA87B0FB8B0152541CBA86BFC7C4251F2329569396E6C1A5AD750001117A5B3486E8F67502BCC31ED9BB28EC224CD1C7E73B6F664566ACEA3CBD7AC063B0AB8A4953A9B95D920A080AB64FEAD7C7A9B304756AB15F44C48D350C6A6A8162B95CAA698B3DF824E293B7EDA91055686F3BE25BFA4006A6AA2200D27D98E41A08382FFAEA541D34A3E63984A9287C2A540BE4401E0EDCCF29A4285313684A972032A047309729D6BA4163204F33E8A592DA824EC281CE82244D24BB883428FF9CB750816C307B6084CAB23EF6327D2233241A2B80069E520C2E6B706EAD3456312961B9167DCE049F7014460F769F22CC3CE8C05FF6D14C2209BB0C1AA0DEF85DD07303D651C5ED3277E284236BE570C3E956FC845BFEF650DD9A6015B2ABE33704C93B8DFC4C814A47AC8F79AFE4E2C51B5A4CF3C8A1C0C828E0529A6B707599B544C9336AB4005FC076182AE778E20013AB64A6F28736E47802AB63C33AD51ED994724AA472887189D579BA6BF802A670CC86210661F3A46F1C93E1EB3CC1E944F9C479E4A48F45E08F8E2753562477E9C350AE8B3E9DF32589527413D154448C1BCE4B55933B8D657885B662672C3743C0F17294276C2AB5703D0324D36AC50635424C3439DCFA7C2B3009E4B934FD866DC7454130445F1898B5DAC33DEE7A4B69BB0ECC3949108AAF59888D92358822522D8603061BA14FBBCB681FCB742DD910EAB7A4685C1968BC1C55072800625FB476B91963AFFE589168D16AF7857025B277A702634BF7A2625943A219455F0139C36102521C0F795363B2C9902BDC51517562FF541E04C12CC00C90B224C32E7BCB0DF15BDFA82F56683ABEA2C2659A35331C4625C2A5C0D1B9B036AB7C2A879E6531F8A08249795E5BF2C920639F50B74DF2F2946D1399AB18049C9107B6288DDA53371D18A18A72A66E167C14BB3D9E9CBBDA76B9073262FFF5AC037692ABB806C1B416C60926F684AB314A0C90A90B0DF1382F701349A228EAA7911E37C26C69A170782314A928C5E27445322A17C81401D71BAF1B71A63C08DD0A9842DC9A6101BCCD91C73B772CD54A3401B435FDD929C84C3A884597E15BBB47D21D4B933E86E940A554377BD90271E3B5DF0C0D06E3AC1C523CD0A36AC025CF122C619957C3DEB286A7435660D33665466644DC5F4097CFA7B256804909800B298D31993E2B89B024337D58805AA62E8454AD4099448C6C0C91E93DB3673478A35B89540D235C4D022BBEC35176A29936EB571F4660028109CDF825B979F5A6BA51023A8432BCA84A6A90CE544AC57A091055C1099C71BD6604C06C2515130C1A55D6C9D31640D4E9C2F9F1A4C74ABB6701B9EE36238D40B6D682CBB6623AE7665A0242B140F4578122BD5111197B51A7F860357EC6ACE05103A035472DA73548F51B1D887C02042600D84B9FE6BD11635AE8D3AB04B98FDB179EBD148596A3184EDC1210D888DBCBAA1131AC87555F427A86B9FA2CB3EC6F04E3C4A6738EA8E3714A0CB99E09B64697B1717C938CDA2C8E710CD380A12CD988E5CC5F571C47432007A0B3CFAB55C2CB96C948F3829505B5142B25502C7C213027E61793D34844A28A8627AC6BE9263B0EEA0A6A5CB90AA3496137A20A445B93D4605BCB83AA371C2F5730E9C20A738665007D57BB249692AB513BC66FD04486F05C749A63C5C060442B971F67BB1077A0B153986B28BB2900196753CBAE833B277268058AD9680134633BA4B7A4315344166939E9C15629B3A65649E8577289063881B4ABA3655FE8EA0BC58C7017A249EDF43C27676708411949567B53886903B8716AA65D9DB52638F893ACF261BA7868ADB10E3D57145A475C9B8613D73378F0A285D5E29D817592123BCBA8F5CE075BABB112BB0688B311F35ED6831F3F4CB062064B5CA5363267AE9AFA9818E71F6BA1987E479DAAA414C0004BF738445AF250CBFC8746E85900DBB972834F40D210672B3EDC20912961162248B084B99E649A67637A036B974B04C48D750225835C354B92939744699D3159818B54FCD844C64A5C57D3B559417C14B2276C38B122773C99682C6AF988214472399719A86362DA1B1CE6812AE1714F70C1B125BB594BD4CC55F99F3F30145CA6CB2A66235BAA381417C35003C7DE867BACC81BB3543EBD1339024C4DE8CB3B0350C98477B5B4F7AB83AC519C7438DDFA3097B70FD0F1B2E6C220F67C3CD7188678EA1B72267FFA4285D476517590BED240C0A81A97786622CF1B101B012F132CC60015A59DF3A6C4578928F6035A662EEB78CCB89552F165C137A60256464501658C1268AA70B3A3AA665825840EB4E015C558BECD923D32CB8BCC2C28A3370A4614C4335574BDF77446B34D9F5A7E9EB89738148C4AE56D9B1C829A6935209227682BBCE13522D991B4D2625DAAA679B4DC6A118A672D5C247607A9620C1C88CB7600852E0C394005F45C54175BEEBB9BCB3C3873622501F0B80523294F122C6192BF5E53894A64A733E830DCA814EF7BB62BA60B667CC169E0A165528B46ECB2980202E2AAB0EA5961168C6933C6240C85B090801CC0731A0FC70D09D83C9F2C7142F2C5ED6B7C7F553439E8E45B93898C12ACFF89DB7D67EE875DD9834F3D07B0B806AF8E3E2451BD2609D06E781E8D7782B5F5A7A3827390F89AF1144345DB681ABD75E434B9C7C69E0B9F600073E2D6761E7B33B81DD6C636EBE07641A9CC8A", + "c": "BD8C66F480EF2CCC9D3AA349F020DA9C5F36999A62EACE288AAB387A2A1A41229BCE8DC1005F3F7A703398922F86E2FC5E4A0F9799C4C11FF3DA46A165268DE2DA7E1F79CE8FF15119313942AC6DD7DC0E1B8DDAA294B6AE215C2924ABB4440DD22691490D2E02C434E30938848EAFEA25DDB13A6B6AC9675D7A55982CCD726913FC82C00952FEE976A714BA341291D7F3261A20945F1F53104D56B3919926F851FB986C1894A8106F0EE94E0374ED9FBE193AECA2B8E6EC615DD39404AB16A9E30FA66BDA5E08A395BC76157B3C3931CDFD2AB5FCC7E2C37D2288EDD7C8EEC9D2D1CACEC466CCAD615D22218C410CDBB0DE79871E5C7947203ABE704C24616749E0CC0A892FBA42EC116D956CC5A33668261D43F40D24850DB9BEBDB3FD648950C13BE2F73DB6FDD31C8DEF189BD4FDA96A5ADB19109E8BA67E8D68BD0FB9FFD94A7470D8093444D5A0682099E9A6E7149400845540A85FD82B338AE79CF695E27A055C6702755FCF928CF1B78E78D7F73446BF446641AC69B7889C9F466BC29A3C32D99BC9D1F8546EA484D11EB26222FACF825A2F96A16C12031C3B2FCE0305B0473270016CE95EBD7FA02CFA5CDFC6F8FDAD31F801AB71AEA2C6E32524F5BE77AE1DE5F33FC4E61A2685A3D4E5CAC57B6803969B8F0CD4D42042E04B38F4F1C9C1AB8A994BFE2C5EABB66E05EF343AFFA4C3500E396609C035B23D6DB7A413A59229928CDD998414E0E8DB3FF7576EB36BD7AD03EFBA30466BA6384E6744A6F568AF579C097E71AEEE0F051A138E6855FF3DE3B83556D0C7F2A859C30B5EBA57D58B3E0D996180C06619F26F557261D0F92471600A8A473F735550E9E050C96522C3A2E98EB8ED08643695188A0F3171D6246D815F33536B2711D882B0358ACD95E630BB71FABB29C9B89CFB8FD16BC5231FBCE680D607CF82F1F1C30482EC014F43DE03688022F05C71DB110163A13BF95E095DDB277CDB697E4E48C8E1DD4D1762E9D06B186C5ECC41C2687254A02FA97CA9BAFCF113B6F5D4B99BFD89032EF09D584AEFA3F5A5080A23019493973DA877FBB07F3628DE93ADFE57FB09A0B95BF19CD6D8A563ADF719BA47E2CEE325B00B5756CE39B0FC9F6DFD4B805F5B33F61180620239AEFFBCA9C211048A8AA6055356AC9C2992022F6B601A7101E1E16DFE63923F19842C4463FE0F06ECA2158D04449F10C5524727821FBC4DA70DA0F2BEA5EB0767F512EE9FFE3496EB2EDECDE2795E1EA2DBB5FEF6F8D54E54A0CF235A4E30CD64EF015FD98231148E09DD79EE949A7CD1CA7B70E704147D1976ACEBC3E4D15596D206099FC915256162ABE59542BC149DCDE807C33B89150BDC630C9C23E24F2D7EE7D49BF85FB4C2B47E2F26658FBC0B93EB56A89AFD497D7895FB76718BBCC3431A5FB5EEDFB66885BE1374B174940C55124A30233190CBE636E0418C248D4EB63251E2CD2F5B244F37A76BC9B167E50221DD826E9B1EBA00536E992574C6F84DB4D526F40D29F62476D9C41E9C9763D88EB3718B91AC53" + }, + { + "tcId": 95, + "dk": "2D13797FF507986C80E5F2B7CA112C219A73BF71C099943770668F7780A052319466C2296BF67FB71C65EE31C24027A00D3527F3B03D407CA04E43AE2E030A6009BA7B851332B4C5345B3964A8A6390395AB800B2C87AB4C852C099B950BC5324DF13230D698BBB37CD53738EB3447EBBA759C7A0FBDA746D348B0DC985BD9D7BD44482F9AE32D0F60060BE6A630BB51E32C575FC72ED3B2A1DDE00E2321961FEC50F4583B68D246AD1B91128A765F6C7BF93CA43CDB2421416C0C711334E23F32D119DDD7374718400ED8CB283B36115AAB9CD83288A817A6697C3143397C5990E4C8880806230B9361884C539A4466AE241002F7854914BD48B2A9B468238D1242EF4758708400DDD4A8FDB341DD87C7D4225E205AC88D47BED993796B239467C6A6BE986967A913AC3933CA1998371CB244711B90DA638E797E78A95CC0D230C39A1CD6282A9BAC68FE2514AE7833B412B034666538682765C424D9AB1F69578DDDF030D3734A620A4D22F24AD10692D5A08665688905639276D3C9263BBF74587816A188249010560540831AA1F438CFB156B701713EAB1C48F01148D5147A13318317A21AABA515893BA84A453F215A6C2B2C7AF219091DF5A376F8AD57825EF09896F414AA577524A0087086915E206AABB25C0DD5669444E6A1D1FBAE5CD5A490B0283D6B77DB658D54649BFB499D78B209DFEB815BEAC20B543D3F386675F253EC296634CC321983338B109BBA7B0326F766E9C90DD1C0A1916BB2D73664EDB1C6A04195A31BAC0302CB8AC9A2DBD725C579CBFB6A9344C4673380599035513586087307692EE79689D3C14A4903197B041AE98FE4643F86CC3B02D32C03231CBBA2317C16626C090FF0219FD7A1B32B5A0C6CF06CCB3341751A29E4994C9154303FA48789D8B12B773425EACAF84004BCB19B468127B492136FDB39791465090B5FBB36CFB42409CF785A5642047DBA012CE89848784A3011B68854299E2171FDD3A53B8B7C2BF3936057BED0F2067E316AD7F925FE3958C026CABF45AD10263DB78387E7C6C6CE7477FC0C95034ABA4531BE217091265CB2CDDAB742F29D21409F429C65B941AC60A7BBDDD91CAC04BE307C75F323AF8D6C155975C7C12839CBA17D22697F672C7357318E53285B19489D79ECCCE667692B116FB222A7DF8843DBA8BCA7611597E6784A8CC73456A9D297AC6D54B942BA902EE20EE8D755256717435BAB9BA336945B0E71B5986D517F02034A9E90C90307B7FEB500472A212949B0F3C5CD22C7324966CE7A10C6EA05598F22BFDBAB8E427630D2002A815B0B9626053D46BFAA65A896169FDF8CB9B763857F6999C6A7343B8BAE4208C71C600F950208068CB57A747F69A3A2215CA23F327FB648B20FD9C53E116CE58C2F4BAAA67758308708A0E14B74A548A8883599BC07173735402229196C7A269F72CF42845B0883095A57212631127010AC9E2291122B4CF416250FD01563A46031028CFF5745B475365F776841868B0FBA99C763503F337D41668131288C0CF84BA5530622F8957A56533EA53ECAB66C19C2094CE340D05A88C010A325017D91AC216A038EEBCA1892802F009561C6168777DB13FB7BCC69248761AB64FA0A403259997B18A17F48A725FB8672C4BD35699DAA1412DE7C09C0165836583CCCC03A59005CE7C890540C4B9CF05D330AA645A4BB5038672F3619DCCB427A370F437C16491A15A0C60950F19AF7599A1E299E6C40C828A2492D4474C9CC50A67C558351A8D57B4EE27A990982ABD3F935D6F31797E5A3ADD69C4C76893B569F22945B42E1413365C141A81A62ABCEAD2542837C0F1018C266605A06590C7A96296E875139FC7939CA1DF6C07A6F8271539AB8EAE8C25FEA4C313A590BC04E25E954C648732330726BCC3FEDC39F46320D82C9B20F229D211137053BA72B05CB2FC897212B184839AF8324A189B9A855C0B232447668D899EC675075D35FF5DB53E9322C3F3281622A05A7996CCB52159255AE012886B982A1E9A03CB1C3A0199A32001D75304068560162295C8AA8574ACC363D806356A9D388283CBD0D700C36DAB8B55874CDA60608FB90EF4609410459A5319A4F33AD7179329F178A6870BCD6084CD8B213A06C88934952FF75916987A738A3574C60451D70AF60C855D8F78C7E680157320938658F6A421F1B590C7BE87429B95F0B5A5178B25E3F2B61E9268D41486C05402423D12D529B2C8AD109ECC10D48E6841AAC7C2F0B22700985E21A4DEF6771F70AB01919562203925B16802824877142B93517733FE5922BE28638B728F6CBBF21D079A2A61BF1AC7995272031E076EAB6B68B12BEC782CC3C967FBC956C0F4C9345967D59C17E55C8926F342BC6067FAB55781ECA4D47016258C0B6A3A39C5EA98FB9F46745D52AB103ACF7D45D6488B91F872BBB313DF76247D297AEB8F87EE1C63A2BAB82EAC59F4F80CD9E1B845853AB0148A4F12A09FC9822180436BF7033C637CD17962B19472FAA98957B226C3A337A0489CBE3B61E2BB92DD0A390D54C5D56893529C75F956A415D3441F696B8423187C6B1C6A31C2C42F85003900540A21C00546B4AD75F1C001BC56443AE87A87B1993F5D18B4E1211100206A3665ED3868A510BBC70C6353DF89BF8B933D9762D499BA61257BF15D653EEF42CD737BAE25C03986644F9C97968CBA2BA7A8725172C78F15AFB659221115169EC08D0557C7AA996551061271747144C281C94181BA2177803BA6B671A13E406ACF5B474A0CA96D18A96997CEEE6082C218DB27C94FF4C55B31C2CD0BC4438AB719D1B1C6EF46E69298798986EDED0C83292A70CA0B061AA86B625C3803B6389021238457A9FE327957C63D7E11727D7954203C720244AA5D80F6C303DE49B73D71348DACB700B7A4BE795C5065110E59264AFCB5665442F07E14B39D591F3D56838C98C78F8A04CC1A2D1011B2D32323489CF31581E03457BD1876F6B2295F44A103F0C4ED3F939FE16C52DE113E7AC8F4C955FD88B180D8CCDFC605C13CB6657FB9E4AF7CC702B65A13B9C121536094292BDE5A7A752CEC8A2761B2CBC20E882F8B651DF73B23C4B23C3C8309A50A0AB8A7F2B43548A143C40A597D63946EFE4C9A24CAD0DC0B98C6A9129D6B2C2C18D4FA4837CE72084C514DAF3789FEC2A5098BFD2F1A9E056C0A20A03E62685E3FC6AAAB3AD3DC20FF4AC686ADAAF9D1B2FBA94B43D55984A5364B3F7B5ADE02241214AA5A663F11903E7550FD4688EE775DD2ABE3F3E5557C554567AF0405EBC8FFDD9164359FC38F5A5F2297286F62DF6AFAD2C416C876B55C9D1129505273AF92BEECEE3D1FB23F58FDF6905B494AC4D33DE50E94C0F09707654643DFBE1A36E7AAE5B9E4131CD91", + "c": "74AA5FF2D034322EBF625A73E2A0C35F38AB9C3390FDDD656309E2AE19C316AAF13F104D294B8543F24D970F122A5099FCBE0BAAC8B421779FF1CA23CC59DBE8363AAD8B73EF10EA8DDFFEA58FDD12A4D474F33447AAAC13736D34B06E4E99BB8F1C17A0F5F50D4C64007431E781A8055861AFD2CB9A390B51FC051B45B5F23389E52F7AD85756A75F0BF8421B51DE2FDD7468DDD249B0A90EE52F058FBCE99C033398C9BCB36FAC742DA0F74DE679765FF92B8F40FCA320689C3BA451252C95902EF3BA37926B2F4D12D300A5A6E49273DADB281B8CFF493B809591A60C9AB16EE406D23E5F296A7028223531EFDA923BB6CF1585D8B17EB2B73DCFAC84E282B8E00B0CEAD38679A0D7AD977427C3C7DACEEBE5B792DB0FB8295151805D2B805A53101B0CD61DA00D80E49A48792628FA1D52432CEFEF7ECB4C1AEF36BFF4220E3CCA58EC02894EF35736BBB76A73171147459DC24DCBC7F49617004737BFDD845F59EDDCE74568ED0B60BA3CFC2BF7A4FDA2C850CC6D5ACF820A9639103F33022F37AC065DA563321A5B6536B4F215C00ABEC431B5B8DE23B17709D4DFA4CB57B7790E0807D81E613921249D30477402ED3D60D35692D12EFFCD9BA96718831810AB53DD189F4C5520FE9038C7C0B5A3FC3C324AC888A189228C468C2238B722581C07B427E8799D604FE997993B6A85044B1F2BB7EA6D3B75066D07E642D108004F2E17171E4D3EAA09BAD812093B76FC8823BF1C70D0612A302D5CE25ADCFDA914DB31A10172F47FC9BCCB4F71C85DC6E15C253991A1DE91BC7286881D87BF5035DD92953B6E1E91BE2E8DD5DD495FFA6094F40BA948865457AA9E2BA36F066F8B55CB5CEDF0B6AC0D24E84DA2557D9E16D791E199F534FAAC1BACAC74E86896569EFB00CEDC3579B32C31DE1561DF54398989D7CE9956861EC70E931E5A2882B90118DD0A30A1B22A1AC08430A07277840307E7D2FA9FA9E5A617A9A13A225A0878121D1AC53C85364CC21F65EF8DB5D2E3D3280763454A91AD53C79A276BE18D86C220E15CAABF56CF05C059DF4B9120807A82934AADBFC74252585BC0A60E7D5F3A2A73EA22357ACF1B87B0208A7D989E76AA4B646CA68626768EC47C04F21AAE8B01BD5D389B8957DD870363D45C542AE316E46A02650DF060672D32A2AEF67A7455090F47ACB37F2D495D9252E1196D8905DA59A75100383F8C54F177B52F0AED711486F58D4F6F4D3D9F108467A68A7344DDF55EDB8F36C19B1CBCBA01BE3BFF34ED738F431B2C053396D82C56F5062524C089F2FEF5F6F0DF9BF3323D471201676A1FAF7A600C10DE3A8CA921F563B1B41C705EA441B677DF384EDFA1BBE9BB0A6B877624349511F2A107AB8EBD7A17D15D78B8543ECF48CCF386A341C9D3B13244D34EE93371227CCC9BB8F206C98269840660288BA4F6803D150EA0BD364747BD939E2B0F96784C12D48EF667F48F21B6AF33FF7320694E618A6D240048B43E266475617AB4EFC037B27FECB24D160C1D66FE0F9276A9780BF3" + } + ] + }, + { + "tgId": 6, + "testType": "VAL", + "parameterSet": "ML-KEM-1024", + "function": "decapsulation", + "tests": [ + { + "tcId": 96, + "dk": "F1B84483E2A3740C62F7B50CE3588848FCC3DD4851D8866250DB6EB10352C7AB582F537F25C0205CE97AF7D5A0BEA7B2230C37D496A47BE92C3657C924497C3DF90BC3B547C3A129C16532F3584620D71F99253EB0275682B75007B5A1387268615708C210B9C8F370CE8304377A535B8CCC0E550DF7521F18536A0AB4AADA863DFC81BC1044B37135B42584A8F7121DDA4036EC869566D551E3EBCA35902372580CE55A3B58934D8E445980453FCD1B9A1C85B73748A98FA837CF677C23268AB2EA42BB642198CC4631753104E9121E3832D34C7CEAB049F7D22F425C093FB6AA070ABB49781EBE1BBD55F663957341E432818169CFA8515C9F044766C397C191C129355B244730339B8E6404CC63B71A1E93349DDB5C2F995F61EB2508B96D51522A3532C14DCB095AA92F2E16404F1B2328006AE9EC5FB9627975B2C764432382A22076F701BD9A5E281909E3F8393DC3671CF26574B412A19B04D8372C5D1550961B38C6DA7B4B0538C978A4D3D8B61007193B1CC8D773777042A46BF496A1895584091B77A498D164BA4BD1C9B6D49A262AACA8CC03136389D480CA458348F9B2B67840180F014892477D1589C89D42B0097A72BFD9C215808B7317922AC360A8D5B1E3689535C45246948501DA8418D0464708CF8FE7A18566920E086EF879BFC154277E9BCE9B7906EFF0B3B7C33CCC09424C41A487B624A692805C5003B7E98058FB2C30D762981CC164D337C8B830552724AAE7B850625EF5556707520FEB633868270E0B40245FD07239B70C8FF00E9236409832551D252AFBB860739BB6F2427B42F0A08FC264EAD743F1E16E592BBB32B99308FC969980B8C4C685FCFC96E5B1BAB05A343075B327D658753B2065693FAC5258D6C149260183B7AA2F100B0564A6553836373A082D1E2843F140984B37ABC75A36A65B0162F958275ABA3A4119641709DEA1028FA620C322BEB210A68634CF93968C5B80C6AAB3A137A14440FB7E65C570CD366404853D9EDA9FD513A20332010298AC6AF9C85049B3AE4368450B02C598105EFA6B7A65820C659FE220B7B831A62DE7002719A7FCD18309AA154B2C3B28932B85822062B16189862F9E89CBF48C6FF612165F529424E34A72728DB92564F3A4135D3B35A4EB5D113890BAD49CFD4678600927C81586558818FD72CD048BB5A6682241081BE2B8B6E9077DF172363D32AA81CCCF5F4BCF2DF0324A2AAB062ABC2B2ACF591C59B56BBD10238D49202803D31A8C33B39DF9A2BD35CD6F8AB6CFAB65717B327148AAE2F598A6851FEE9A642115B7CA392DB1B273BA6A0D6EF2CFA010259B95957195BE2F93A3FAA68C703C7192AA6E7466BD766C620323662943038E349028208D1ACC70BC396D75D4526DC53CC50C4B546CA24969163E06B6246A542C1C776414058B458494F804510817F7DB8F55F9B32E85352FF6A8864359DD39621426711733A929391248D31A7110C80819795601CA211B87AE4323593A5987C89B24C55039DCA23B28A477416974699D27D6219F943937B9C44C472041BB9729624C0A2358CF908505F8C270F6CA12DCCB15A63E8BF88F4C431B5137BA0F6C90BF209832633B0CBA8BABC7617427479701287C35AFC06163B0429B155B91D414CA16D23FFCBB17FD1C3DCDA8262FC3798B1B1B0843CDAAB6C2609422419C54AD94783EEC42D06BB60F844B58F30427908156A660CC5AC63A5B0B2D8BC496BCC1AFB0CE4555C15956B134565F6C5B3386C57013074400E268CEC74A79C08112F734E316C969471389E94EBFDC14416C106CCCC8927B97DA76086B2C5FD76891A62C5521137DA3C30614361984058214B3507EE932682301F45CA20ED97BB607150AF70AD5DCAB4B5B0C3528969AC029C40CB484788A4568A654C32D4224A22E6A5D6F539F0B94AFDDA10BAC1563807686C48C07FDC622C9F153FAEBB85528C53C0ABA383BA51DB5925670BCCDB3C5B5D2C7750A2E9A83B51D1886C70534C8465E9086AB7851541AA4A6B0E96304CAB8B452C355F52034E2481F426F85B03899DA6B0546BA427AC751C84461952A9DC0A93A706B174733D7081CE724AE7CF04F08CA5B92A6CF0495A10DF2B682FB16806B9CDB6157D6FCA8C8A5A8E8970AA96434B27BBB77D41B1C4821EA6A8F870CBB7422499D44513CA81A19B9619485AF92642AC01785C277AD4DB73FE96921BF98AE77A43CBB8B576439CF73317795C7130E76851B0670C12B2BA2555CF8F0C541010C438507913609579368BD922E506869627316D3655F20A62B4C8A7BA33A21DF71A964A9225BB81FA84ABFF9B81FB26A64BD65C4EEA5C955B33D2077A3EC9BC99B6A6F9339BB0926856111910701CCC6EB7502193397AA5C3E773FC453991B444001F474CB18AC7957696A643911555DFACBB03CF9050FE86F7E30181065AA486021D4C36B4C12CF34241852FC6CD322531107B038E46760C59E112149BE905C1915B22B396F814C83A3A1A17BA9B337B0C4D3213C79400037FA80BB3143914B56A8E45DE6348325004D5BDAA461DBA04FAC2E57890F1F256D9BE984E13B3200035552ACC6FB319E756948D7363510D9813561CEF17599BBE584CBA99E3D6564D53C30482A148346BBCD1BA4F56017AADC1A6DABC127F23CB595405B930D41185E56F51418A895294C21470097DB0B1E826619D65C0DFC2123428C88EEA040F4346A83F46173D45279F239D55600F1EB105A86A1FFB61738D6283A03B889E7238A31530FF869DE598235ACCB3E50B80FE59BDB2641F2855C38C643571A629C0B2B87CBABE6C6B0BDD7B2BF415A0B90266564B183E362CD8474EDF93C2D780F69973765554B6D50C7AAF23F4B79BFD8F8973B827C9A92625779BE873A92A9D9361EE20C31559DEC154E8BB5592B85C8A1F64CC13B7058486947C1929E3C6C7AA375E6720C41E03FA43045B549A05B97027178BF7CA62EAB0B123CB232A3E4CBA2F4BB66980977A78A7202A25527325C4B5682F79B3614680D9B9370C888301B133FC7BC74441A8FA44979C311C26182E01674CAA2372C681D53A019F7E1213115257E4C9FBC90478EC760786B6770693F5EE149AE60CC7835C0844177D8C04E54096A40491F8F6352A231C8E3348F4A02558503C18E2336C982226937AF63A15693025D85422D695737D649A04BAA617B6524FF8853FD664966302E29FAC6162848503908FC0BCEAB9710A806B81536CC78A332EEA70F04F27C6DF9645EB516B7D97B8F84C8E8C2C5ED87C0678795884A893866B853A9AC0B301C0320AE07C54C9D06709E66A90D69724F4192C6859DEA8054BA294FADCA6DB075233CF8AA159144A48C0D8CF4CD51A78A9D23A805E632BFAA587D66A7DE052829FB9FC23C6F66D6572020C60166A220C5432C24886F8553BB7214676AB135535D0CF711845C0F654774F591144D498CB93013E5676146361071E047452CB31AC8CB1F19B35A009CD12C0B0A7A84B6D983C388890E64408FE68F950584A917695B3304B580B3EBE45DF29B2685B02695356CDCA01869F4BE00A9930D384C5A7C8EA17B7033382DC0DCC806DBAEE26222B94C0A775C0220BA3835659F002C09CA37A8B5870B7D2521271B643496394157C621D44276EA0CBDEB0A01C6094B0C6183C92A9638BF1694CEECF66A23CC7C6D0664D4D09B58F39E6CD1CE4D125B08C66FDF0514A3534F026CC4C2517F9C137288232B08BBAADC635EA6024A8C4667E8DBC0B56556DC565D5C08C6963A33959B67F5A32A851B621A8B31B8704C97D0499FFCB6DA2A54DAB35E2CA31C722856061B3DEEBC7D6E5BBB64A40FA5CA1AEBB928BC3437DFA449486225941948A7228D56D7A60AE535A30A7A04925733F29A3E242F99876E7981502FC00258E67A1367778539C1E8529FFB707E13C1446099C6E681380F9A2D2F90BCA121009B822C1854B185A51B0BF61BA0B56C6FA002A5B675DC0A0752451F5C92CCDE666569FBCC683379FE6A850440346A3112888548D47B0468D7481A840946E53C0293C7696BBE88A914506A49CAEB3E233BBF00CC94AC74B70BA2A57D4A032BE3C1724382FFAA002DD7C9F025189CC385C1A24C10AC716376C98B5356AE9AAF75FC931E342F5986A146E3855F6873CC8BA3CB86BAD732241C313AD17883E86C5E2F5486C092BCB4F718B83213C95272D134A2A745A4D6309C266431980C8A0F86CB0CF03247FCC25E2072D5574009D4B61DE9608B29B44488942CB27FF3749A9480408E62AA47A0425D74CDD276B26495B0956BC398AABCD1FA51D5C342C5C13677D46BBFA994FE633F2BEC53C0B6BC50090ECA590CE5F6B30A9436A741AD68C7A9966BC9E7E3D0A64ADBADDC6AB2F71F57AE0AB344F614619AA6DAAAC76772B1D32CDE082B6E240351358470809889513B4C05C4611B6C02F4E0B4AF9C2890699250EAEF4F0DD68C72720BEB1D19804203EBAE8B8903D98F25903A764877", + "c": "BF5EF354B5EE7D74188232802D1B421F0C17012ECF2364E4CB996067AB6270BF034E5FB475BD2EB17C1708E4AD606FF23D38D27C1F4E524CC9767087F7F042F09B1C080B055F27CF879779D129823E4A491DE0F9AF496F04158DE90637547262D3086778AB268665CDEBFCEB85F3C5E02ED837AB43DDD97B456921AE2E03C88CCDAE7757A4773B1A207CC0B11B170F19FD70F25350849CB6C39AD12DC69352B4C4A6A9619CFD41EBCEC4E26B3B0685EDEC45D87879940C4C6E5C43FAD20C65FFF64F676847C4A63E7AE6144404332220CCF51B84C26E726DE976A2CC3AE143BC99B657B5F16290B37E43F8680B6BAED4F033FDF189376882DFF74864E55542CAEECB0B55B3FE2BE91EE73A20F74D5AB984F868CFBBA63EA7F6086B19D624278553378C58E3394FBD1FDB7EB86D919FD99D1B79B59BBB4E5AD0EDF7474DB392F2DAEDC3910D02E636775E313E7D14014027CFA561B66D0B249B6574A35CA45F2CF9AA63C2C71B970BAA3DBC0E0AF1C429FBD8D6E91D67CCA4EF9755522CD0FD49216F8D2BEFC9E37E7066315027BE0DC35460B4DBDC64C07EAA19C5A135FE9A0CEE287CCE67A66BC8E541936477A71157180EA185165E41230DDD35408448D9EE281287D6C03A9FFF128E7B3EF71512CDFF126109392FC44977BCEEDBB12C213E4A40F37AA7559A85945E4A14F6715CAE676F07B5237EE46968AD41A6B0AB4B2A0E558688326B558E6EA8FC925080DB42629CFA1F2BC13BE050476D9F0B2614E9EB0485CBE16C678ABAEC1ECBBC82B506A183EE8B66AE938A57A36EC1023D3981A38AB7E86FB267F722479751B0D01092C3D4F267419865225B1E0FCD50DB4E92172D5BA2DFA8D27F7E7F3971C116581FFDE1EB7C97AF66448ED55101A774393159BD058BE12640AC403AC8F62289938F332206AD1C82D8E0C969D7EBD0DDDE9B6A45E3B5B1CF2A6EBA80F91EF87E347B8EF4758EE8654566BA7DB32CAA8D79C914D291EBFAF7E9C6ABA393972F09A5C8821D435EECCEE94EFB9341561E367A15F5ECF2E4758A0D3558D122907FBF1BD0CC21419C9E6D1157F2A41E3CEB5C9C5089666A81D45D28CC30053CB05EF23235C78B121C5CCBE5E72056A792721FE1427A0CAE8891FC8AD94F80A4BCD1AA1287225532C6EAD21C8332AF19F1333095901F83EAEC30BEFB9CD35F2F056452F682211F4AA7E4FD886AB72A52DA710B4B19ADD0722B8CA090C349CC20C04020AD8284D24E67038AEA537E2F42009B24474EC61223D312AC332C189A696E8047EDD788EF78C3A999BD2724F56FA0BFF16A5F4899DC401C6C55573B954DE01F6C9928E2B1504DB33822623B2CCA44D2178AED441F1F420952FE61F1161EEE907F318E1C693BED9496DCAEE654151CA576EDBA2FBDC12714FC37AA2A3EE7BB167DE1ADE78F205C9E92B4E58A2D8A3D7C8788A167AB1B0EEE549C292BFB25B847B0BB7506A69C32DE245EF8D95E625E89A5C20A3D9823C0C021F1B703F2ABD31B0ABB5912802BE89E530A021A83F65EE94A17B091841661A3B63DD2812AA85A52E7A87B497FA61AE16BE69DD68EF016FB19904E8728B8647B4CA88ED38B90870A1BA32A2014C1887BF9390196B504F950C983546C4A692BF5022BF54664328B4C82D0085C8A399C96D13780F4FF9FC11EAC78F2C689CCFAF4483195ACEE717BDEA3EC75021E1691F53878EA9CCDF1D68134C4D8AEADB1D3DFD241424B2EF0636A35173DE770D0556FDBD7852B74A2D9F0D1D8DB59B4A634B1970E3A4037794A2151970B045AAA667F50549AAF71411792D613B1424AEB3748CCB1C844109D0FE6BC9E10E50FDBEA5FEA833BDAFE4E9D9910E366BA08792ACD7B2FB525C5987E16F1A7651B591C1503C7CE66D6D1A230B90C82CD7B503C55BA9D6951FB3C9C626521EBCDAA0584A05589889D018644E6ECCCEF120BED7079C2E1C66C0975B0BA01C29C0F7FDA9E3141449A1B6548A6B7A6FAD868C0A45E7766FC2D637A2A8A3AE68EC7FF3917C512B51EE5F9D54372B42440892F3DA9E4CD713AEA0311EEF7A5CFD8E441DAC5781827D9FC2C86E09D5C680C43B997CFB2D38D2A2019DBFBC144D2C442BDDC12DEE0C6DF9DC101E6BF0EADBAF2A89CCC0FCE10ECE108ABFC2BA288E64D130B2D72642F0456EA24C8B2BA88AD24E5D71778DDF85F8C125BF4710C0D333E4F7D547CFD4C6282BBF9A81BA8707804EA" + }, + { + "tcId": 97, + "dk": "630859B0E9292AF46619B7312DE45D6D4B01D4A4BF075372B8A345E1CCC66F3257FD3A5B47EA046A168211C807672C13BA4A48AE742DEFB760CC7446F086C0A8B439641A24EAC5CAF3A730CD3215BDE8B419CA04FAABC3FF0CCB8BDCC8AF1495886B6D33B01D25B032F7C3282AA9259E5178D5841106797A5D559882CAAA17EB695C397BBDD297A5E24A9E00532D355286C09197FC0D186666C5D5360E42B1DB865B1BA950B7D1C2CE46B64AC43D89404CCEB3CEE397175237B618D4112917535F250F2AF42E1A05282CB7CE65C73117F934E1B661CEE4763C375820F09F87916615865E30E146298B525B730B1D89AF469509A0F06FCBA5CED2405DC210AA39FC55251A80A8A0037389CA7DCA5D9A10B777B6919B6C1E805588E3F20849E7B2033C5B781B0545A84E842961041891F91A5E5D4C211B86B8ECF91DE0AB42919B1A5B2245EDD54689AA169E61152DC94FD9C1B80E1602F3E69F9BC38455C93FA2757E14A6369E942E8EC9173C9BC9168B83233902EDB01FAAA66CABB796793C53DCE32C1F81C329215EE9002D8D09494C8301218A379E1B3EA221BF2C36A927E4BDE0F27CC72735FC4B3E7C181F07270A8903460C88B5BE499B5763B79BCA1FC964B75ACA1F2649AB34771D90855C03AB8262F99B7859651FC49AC5119AA48A8931E19035C011A2FA7EC4464DC35B8D7D3392EE0B710A98B3E565CEA3925FFC9202DEC07042A12C677126ADEB25EC34BB0343A1DC311D55F464263C0E32287EBD5A6735682ACA478DCC34B5BF119D153A2C26BC4A47E743B5721A0A1B3DEC00196A006DAD826849C1146D01B891F690D7F116187A966A689E4475B6724445ED17CF1FF4026C8B587B600FCCF148D47852C546A70BE6767855603C77258CB4BCFA1CA310D533171287C5166230C759430B5B1027B8F7C1BFD8051DCF29B090423C93E3301E39ABE8F3C145735D5B9A83E5DACA1E013BDFC51ED05A66DFC8CD32798C928627C98393A1DA003C797BCAC402D3F1C6AD5B8F56626D7954A7C587AD7C7223D622A58169B826456088AB50D4A48EF959124271479E6AC7D979675E222ACCB2BFB8748AA9416B0C67288BA75963196819BA8B20B116F79955AED72735C08BE4297F28ACC8DF25215765C17F9A775310699993610A490F2368A87E9019CB60370E1749721B409B398363FA49F0246C08948674E3670F32525A43C337EB9677760264A05626021C2DE7C180935D3532285905AB71F3B94A259DCAF6CBD62BA5F7129AED0270EE86483673693EF90B84AB39A3CC10FD322D7A989E527920526A94DC8CA7AFE677376625B41AAC4BC4027A316323C877C5F5811888925B81A76EBA5D496923012B37FE6C2827872B81E65339AC8BFC57AE68A3C900C026DDA6AEDB09A3CB98CC2A809A7218B190A5749C42AE4F353124809D78733DC52A89850159AB73415988320C7A093C01D03F4492293856A531A4F013950E30C7A548BFE0466987C339DBF08E9A0B4EDECA083C399F2E6971CF3AC647FB5EEF401759E6C292F038DD732847545A63E43E17579C818C3DE888895F3AC712DC6C767158BE311F24E44FCF91ADB2663BBB0B1ACE801495CC5ABCC208F0DA634046503C694646E9368E43CD98A02DA67B1138EA5FB5BAB0DDC87F85E0A2F7B7308AC26B72427BF7F07DE8B5C304A60B23AA50C2E05E68A9206C3859CA017034814242F49C91A734353C0C17D075E31412245C131CE863E654927337AC046B1BA83214336C32CA8BB179F671E010922080BF1C2891967017459788E4B69131651BCE03911AF8AEDD6570ABEB17727BA25C719E69CB226076780BE183FE705E1539480C147773E3C313C359C3B13EEED49139B27AA78736F41283005CB40375C2DBF28D2DB5A767F0814D661B7E483048E465EE012E877760CAD3A25BA95356C087E596540A603DB8BBB45CF05D0D6431E4B5646D045972FA81524B9476F07F03BBAB400150E4A840853B768B0C02B1D75EB4748E3248BCB7CC037EA70F882299EDD18470443D9FB7A479D83A239809C166B6E7BB61ABD1BDBBA7AEC9B2BC55320F17FB72BD842D52DC8315A8738875ADBC254E5AF369FE32CF8AB5CC45459D2F7433D3777312F17171E3B073F01E0D175935E7B870676D73C1015DA7A64D6333E6601A94902B5CF432212464C32C44A8CA8FA6F6620899B08E968B2F047B42B00527901974337D3613C1BC278EE8D5C254B4898E1088D4A8C09EE175969407C01B11C5F8239C4A0455DA5DD6876C18160944054F69545A5340C5E2EC8A378B1824D313D4001F20FBA7B878AC5F490E0EB65C12D0ACFF68C9F9E54170F4137A4C206834BFEF81651C61BF3A6736B981A222994D3571B1B802B5D759847E915A9BB0B1CA894E055B1DB0FC5D7EE39C5695C10A3112D4E2A0364036C1824C7F32627E81176E659AA1B6CA4EA3CD6591CB7E86CDCB57A6440B6D92B08A628C378408ABF7B93CEC59AA19EB648B39170CA87AF41389ECACBA26919DBD3C4870360A72A398DC7CBDA62C26AE6A0419E5229DA7C77C725FFE9AAFA9EB0E5BEC8B1CCA02FE97379DB20143E21E1AA8BBB55B724BB668C10932BA9C58A24536CA9CAC675350C7F72157B0AF497BA4B16425F52069EEE144FA96A40DE99A1FE10D95F71102FAADF1A8A0FE8038B5A49C04C952C97C65685965E18A0BA8B805AE2839F61278B76265082329F6CA4040242A760B6CFD683D52D6BD4E1156BCD181D4C16FDF9C75426A8000B6952E2A023D3A59844B72F3D9BEEA35BE4F70988871C6079A2F49474599C9A0BBA36B8CC41865363B42554D9722B9CF7A5BCC1812889BCEDB1B4DED8B48BB42695D83BE31A543367819EC75851E1B920BA69AABF57007CAB1426C56EDB6B6F6832C95C0834581BF6240674D336D2437B820E84040BAA93D2056C1C3B2F9A0A6536C19F43A1D0904C188421805451BB91C908F159B1D308071D3886287C2CA56263C60A43F67916A3A79B2FA0B1BF897E941514E78968276508F3135D8A9B8E0D781FD41C05EDA9F2C4A9B4FD33B1C80BB690C59BCCC8CED95C1DCE72136125128507F30A465AE10AFE44CB764697B8DC1AD2CBA07C73BB888C9A559407A3D0636A4134A3E162853493C25770D10847A72956FE3CC01778049B46142AF4B4AD1D900B44A149323190500899D2801AA5C031A0C378F5CA3A778C8B7B688EEA26CD720CD8858A07DA46C176C08278B7C5D47AA6AA92753C75BDFF72E88708E6627BEC0335331D38604E84EC712B0D3EC8714E56FFA8807F40B8CE6C3723369883EDB462AD9BC972206A16C78DAF8C1428344E9C76B161A818BF8835A0043621B3841F80CA3F02970F7882B715EFF117B80E125ABFB406BD75027F9AD34EC7E7B629C2D834C90225020017CA511C8E83CAB0F98C739EB030E172A67586D90A5827E063B9C7B0705BB61F5A6067D102776F18950C3C2540198D916B7D64C803EEC3701799DA2C176AFF38C26004F3BC18144A3501D80B580C1442AFCAB6A458C1BB49E5A5728EB2818B6EC539F5C931F9743EB34B889401D19D220CF7822DB6906006B59A5CC90992691A2071631A96B6D8617F7E863C44A610E72A34CAB05D68281D07088D23580F0A87C870684D74C66D1827BA2702024098377AB359F10CF21B7C5EA9A77ECC121B9D81E52B4CFB315CE0076757EBA100F87A3CA1B28785C46B2B2856160213B09B3B0844055515085F721EE47356E31599D0071214C8B1EA44374890838D1C6636383CD9376D131CE1139277911B221A5CFA182ABE535AFF8995F573B55CA3C08CAFBBEEBB92EC280BC351735A5891997972104993F53321E70E571E86250CCF96010FB59FED89755317A0BAA5F5AD1A6CACAC5CA4612F2B27E94D6B61DCB138A661B28B03091C173BF96CFBBE00CC94223328B55F0B848E27497BAECC6A588C24EB34BFA771C94B4C3B6F87A54458941691C6945470AA68552B77DE5245CDEDC8A457805CEA024034C5731C296E0A468BCBA19D0DC7EC3A38615B10E1D7CB9B61315786A2AD737B384E511AB0CB300976324287063A76B589B88A686A276CA770AC9B79A0B0420692AF8D28AFE392135A62ED20C953DBA3EA0B1B740715DB8084B16661CF9F497BC8BC509E9A9BF5713769CC309090ABD3BCD49E69A09B6BD01536883B5ABF87622A93566B51B1E0C8A0A191A0F90EA5995852BF0EB8B3F15BBAAF55B82D900A74507D167CED79B5D51B5A7791055AE835D79C1B0FCCC0B213664BBF35D9B604356A23E89F9510AE2B8EF6BA3FA52387AC92019A773C4F26DB9F44801F00A2BDA3C14B2953486A7E5605E1B523F894510FA8BB85A080E589A4538F3E0C08FF714113962C5A6FC29172509B3C1AEC2FA41707439B37161E8A5BD109953D75BD81E062D36D81EC8718B0FF11F835FD02EBB0E37D1AF05419B0CB3DE1B514404D1C0DB9017182CE71D7A0E69CB141A94174CC758C0", + "c": "13E45134547251CF55515976985578ABA6CA97FC3FF6DEED8E15AD947117FE7D2F2DACD7E681BB899F5F39AADCA87326085F01FBDE655E7C8A3711C9EA5F6604A547D3D019416E46EBBF851BE3C2703A3241188104EC340BB548E5E37B65F2272C104802AB743C88908D299EE6B9F1DE6F8E0038CC9C4AA567341A4984A8F101E2C2B2795D29557D84D61FE9A8CA937C2123F02BC595BEDA11431C1A2A7D45EC5730638BACCF5FE8397F8F3893C729208138912B846803DEA9D70425F52F07CA7B0BC60B09EA741BC737E60B7C27833BB1C7F2A8D650A7E5ABC1A963350CA34C852134A650254389F04EBED26D33F0BFD24877DAB9FA7173B12FDD6B52CCFD5AC840FE04E2381781A626C814B58EE149FEC67A5D978222AECF323E60AD10077FFDAA62960326191D9513F5E44B22D318D51DECDC1598CFEC5CCE77EF12114ED335837A9D999CA572A392B735A1E10808801687F66B8ED5E10D5E0E7561A1CB07E411CB1D2EAA5A55A9DDD146B661564CAE0BDC4FB175E508C43F6A41E2FB31A38F6A6750AB9B92C69B19CE9741733B77B49DCA86CA6A899D39087F285003358D5C8ADD8A8A5987B8B0AACA4661DAC7301383D80B1EBD29098BEB447E0159F06D72A414F0E28410696D71C7D717967196A22160D9B36615240D75998B0F1177332EA3EB3EB6F9B533B939494716A935DFDCC862EC0A25DA2908831A8DAF5030CFDD0262D0CB5DECDB4B468A3A75401D7878B9714F4C4D0C07538FE7DA6CA3FE9AC5FC829787CAFE2833740A6204B85E951E6AF2D5DF448F125004D85A212900DABE0361336F6284A8E3196B06AC45BFF78A10759D33307C4F6861641A8A515B2A56892B4640B0FD5622637ADD9AF0BB1C3F742A7803D2634236C69431C0A41D99E64A8B454652F3FA507CE74233CA4F49DEFFE91A16A08AAECEC3EA8DAEFE6F0981D2B4158AC43E6E10A8EDA0B112CDBF42EE0E5D552B7E523F006B04FABB3CC97D2FE955CA1A6445A017B6C434268D8E556DF27A6001B59B0ED67557B0673A3CB00959FC70ED07E9EB413BB62F05E7EE6D289215D267ED39ABD9D8D93B0AF375C308C3D08C1DA812502F79B36ACB07F0B97A6A0A127277B72C63394BF35054B9603CDEBA40D9809B8A51637D12B4CC826961B95394635843B4BC3E721670AC7E70FD6FDF9B7533E41A1674E2A189DF133441E7D09762E58B6492873CBCB3661C62C0ED26D1C4155C7DB5D24B08B85476CD9BD4139CFAE689DBF0B6DB7E1E0EA8FF81A8E506704DCF068EBF64F50A8C97D3C127CCA57EBEADAB37E2137E74C61927ECFD24897BCD207B475422AD6B68F9A6146FF320C7AA0B2BBB9C8129DB1DC03E094CEFE88E780DFBF4775E6464F77B5D2BEEE49DC074755110FEC2F43F728F866B0B51407B6AEED48DDEA08490CA786CFC1395105A13CF2A8D654AA7583786064C5AB4C3F432D1FB0E4F4F03F9E7580F839F42F1B72EFFA5DC5D0C90B2C21BD8B93AC7D1EF1603357DBF40DCA8AB551063E2F9C0600BF731BB54D21BBDF15A210EB7E5F2B8AB02468348ECAAD15992535B5EAB1E7C486B6E97968EAE3ECAD37CE9748573673381ED892627CE2F2BEC6D709390D6DA01394DF9B42AC9508C76BA57369FFF42DFFE028596651010D507AD065239E9E00E8C797ECB6ABA2B6DFE80B724B5F9826F0642E4BCA077A8A661CE86593CCF8C685FE690224E4A3F41D15115672FA485C362D641498D655A7CB1D696711DA7F77BA414D528B1BC861199BD0562832BB8032DB885786DE6C60170F33DAC20C2618945F4744F6C6FE1B10A2E24E0443BD60B1F40D39735625725FE20C18EA6C0192E9AF47ED1EE9D23DE3B83098FE40D36D2D17986FEC683FB5411CFEB8B1A5A61E990FCF6B3BC8E32E3B1F1A4BD2C3A86C089C38B3B1266A1CCEF53B663E0F1D28A2B63F11E1E2F86BF43E7542D1EBA891DD978C8F573289933A9B182FE4CD8CA072A59C4BA15D0ADAD86F7735307F24EE01D1789666A7123C25F46B38CDB72B43F86CD5A82B97EC8916ABDCB0CC03D1751106807FBEB21D1503C3D23EDAEB255F30F252A8AE83B5C02BD34DB15A34FDBAAC51D0E60B2A415E1BF0E07CD2453C9021BECFD13C73734F7F6BFBB4145B27F53847873A948977401EB8680ABAC4FDB1A5E8D1A94E6D1A8A50E4BF2CFDCF198D804B43B053276758C51E3B0A20FFFAE94B30705A66E5F586396" + }, + { + "tcId": 98, + "dk": "4659824AA22A4F3454BAD00ADB48C8CAB062A10470D83A74BD6A09441B5CB1D3AD148765ED18AA202CC5841901B929871E085F3F0B4FBCA649384176E962C9CF4022DA73A66D25ABC24CB5BB196099541F238518432955D2803E29279C7108CD2CB87832386368EC9A8F07CEFDF2B291A49B164055D78840EF6256E1E6A8E4ABB87D7137FA5A2A6082B5773C2C33241B00DBCC6C60561B3C66D3D5CA3FC66044A5AD63033011FA720425A874B805B0E9A8EFC6B0F701790975A7ADD8A3E78C7FFD872274E1CAAD0A087CDB742BD440931C5E43DC9B834A6EAC3C00E96415F0407C7E75CC9A074FE04517BA85AC694771D1457C87755DC6541E05E328F3E328EA87BDEA798506103A4F68C038827E1A357097B9330AF68D39C15FA6532943F6A8BA3ABB33738C31E0A96BE3BB353BC9C955A2E2B89692F4C4C1B520849CB762F8021A408FB6BBB9D1683D7657AFBAFB8D0E185B6BC03431C6C52BC69432FB347BECC48975A015A078CC691DED516BD5900226F2B7CDE6728608808FDC0D86F02011796E4A973A0B57A3CFF25A8EAC1CADBA93CA6397E00AA5C9E979DC90C3B7F729EF9C894A4739FF69BE65EB313DB1C1834C097F75B085C16C3AEC8FF946963312B82D6292CFD658D599410F871EDF522FCF952B6343A7EAB52C59C0B1E7822E6AF63994D3896774614E6091B6132D7F8A4F05619A4213037F6BBD5CD4466593A9BC7729929031B80A8906F031CB4C3498B93294F4B769C661D2B7330511CA43E8A87A817781729E45AC219D41306FE9B63E288D724B82B2A07ADB351108C15FF3FC67A9819403DA49F29659765B6D33D18D3F0A65CD5A4B2CB58736914DD7B74ABB85A852D1BF67A1B03DFC2B5A73710249526B5835EA7CC9F17059B761886D82B891B65844678148678876D8B9D765252E0A5E8CB18A4F9120F01954FE5208905AABC7D1163300B6B2F0BCBAD81C692808FD3793A2047C033066FB55AB924245193C68F01064EF610D7DA2CE64F474988B037FD79EAEE8554EEAA077209EC51849006886264574EAB71BCD93A2A735B44E4632C0D43F39142810D10CF58812436964D5BB4487157DE703A56186C3BDE12A5F074C6D947FEB740403C27D8BE7A2AF097F553947628851E909957E428AB6E43B5DE535F8817B234244C0930E700530BFB2827C4C1DD9570D8DD86A8CC2352F97A0E1AAC353E761CD7226D6F62EBFE95EAF280EA77A237E9063CA9718C5227A9A092587CCA109062679F84F890164BE7B1DF041969648272B21C76F78A02A7617F22CB389F9640FA75E0C957431696081E0AFF3E1B71A100FB68C0E4217A706BA06A1F52C1503AA8D06A28E67BEE5CA9F5DE5B1F4C2ABBB18BCF03694C5A70812F80982B28B7336B093C56E3C042E9551AE34980EF8C7489A541DD6F6BFBB0BA25485468AEA70AC373E3F80BA883A3346614E6BB00A64B7CF0D9BB7C1B8BD18B838757673CAC9663A88BCD3E4AEDD04945DA02AAC359E4129B42665A3C284AC94C75F97D932E442629995666D93B8C43ABA34AC420F8035D529C3FF5B04A3551EA9BB75184057F1D657A4A181655427543B7DC63546C8B0CF1FF9057336B86103239BA991102968EF841632306EFD994ADDF103D80A5FC34881AA54C217460B7A6BAA753820EE8B39C6553E88575152A103B26376C49A815FC17813EC0BC82A86668B965D641C92E02292E4065E2477D2927917A197063B9F27B0B996D90AE75314DBEAC9DBABA71A1713D616BDA831895D8A4BA187C0390A979C1A7ACAB23061B7A02192C2DB372062A42BD9BB10898571F183119D0C4E72227D2284B45390A516A23502374576C906D13509DC20AEBEE88EDE13603BB0404C52549667C0CA9BCA084837850BA4A2F93B183017E0192B76B14842644FC891279349224FC9C60F3C0595A93FD00276724493684A650FC00A9E029C2CB8900DCC363F495AF6D5A5E058CB522823D9113A68433919C5ABEE896DD0110957D7CB64858AA2C76E4CD47861C21EE65AAA38AC7B7BA262EAAB2A4311935AFA35DC31696D948964B596AE12356023835C4643F158127BD321E18B084558A607CAABA52A952EDB817C176BF1A4473E2558E23A5B7DB8781DE064D6E3BF65088BA8B20BDB0B629DCA6658309C4923398A8C82D73A9FDA7C6306725AC358433FC95A1269AA9247169504CFF462C01771B40583CFFC91162AF4062FF70B95E2C66EE373191051215B9A29222119385EDE2C514E018A52D847E0E616752A5717F9AF8FD6C5A4001FF21497EE765EC0D040A1D16CE9EC559DB5386C5C6B77B62A341B532FD13A7AD960D80B01FC2751B0398BE7147D688B7732107871E8C71EA1B8E0ACC8B93623B9E3848BF811FD25B1AB902048191BB516CCE4564CB1715C1D1BA7E3A6CA8153951C663B8772CA3058535958758461AF57805604E49114B2751EA13760E95985003AD06C86710B4E7A231D6713CACD75309077C4B92B288C109780F27663B8389594AA84C014D54AA1692C70BEA5C36685B6C66A7D11FB0B94DBABB71C1C80C95BC9277AD0871354123C0A231D255AAFE43B2E10B92FBB99390D00AE3FA68BD938954D78BEC3C08A31A1A47C03BE2C0747F4658FDE4299A58877271A0532C46DF2DBC18C655F23041BA820AA2BF37EEE304A72A587D15A1B26FABCE164B7700C09910902A87516A41054E24AA30623206FBBCDD57612B799B3DAD37D7DBB4A8C43CAD3B0C3842980C255C0C0582D685067BA837B9C2B0997A98B57B9AF212139DC4047A572484FC8106669036DB9951E460A42A581FCBB099F015705203C8E636965EA24BCE902706C3108D7B86A410A8D808544DB34E66A6417017CA41607CC938F4DF27E621C8716F834753B959FAC7D83C76CD80C167AACA2C00B794C416D4A008DECC84163522DDCC22FE5F519485AC5B2389149A694C86B08ABCB071BF50C9C93BBE7FC565D35919714336B413F08004BCCAA4E390C50559142FE35B65D56738B003E38E59712A193165C10F0B99C80C7BCDAB7102DF68085B546581852D42683D9D070AC72672CEA16CDE5C1239136D44CC1BDC92A91098CAC6C4B66B87546B71CA0B882A102CB50E0A0530C4732228508875DA38688585357ACFA74566C48641948200048B6FB59064B620A0754BC2901B4E89BD45C47E24BC9CDC7B81375324EA28429A3C2F273611A2BC2A60B773BC21AD2353F7DF804FFF062FC426E604A894532A051B13D97120DCBAA9F97588F2F96075614BFB6C78D43610A28044CB49969CE2A923D2B6845748EEB8B7E087CCC9AEB16A4F723A4C5924787AC7212C50B488CA99B99D5F90C2603073737A6A68B111D548C66EC62F79134D17C3D3F8BACB1AA22FB3C9515E423A350CC32ACA6C29CC621486CA1992D32735962C9819BF204594AC5AC92476C418E3121A187771020219551FA1BF8A9BF5373286999A7F701835C19CB4119A8B6AA7CC2323967E90721653AA9D8620378C1BC1AA205B13BD298AF5C406ECFA8061A9493FDEB69A3714196DB126277AA9BE11077E96CE196AB2C51202CC66C20F5C354A1C95B46726A6B2FE31702633200499C9AB779090B8A6E8D9B6B1A9452E94A698FB396D87978083C867D0B79B9016ACA4906EC109C1A291AAFCA8FA77C24E3A254083AA4CEA3A370A9B01D3A10D43B487E8496075840E9901E8A0845E9B550AAD7C2F7A35D56D19FB923B130574EA25B256370341D18872D158858148BC0EC3900DD3DFC1770D2D4A790307B2AD4C60B45919BAC9DCC913C66A277ADEC19197A5EB0FCA94076515A1993961322A8D82E86B286F4013F541B15AFE8BA9538B3F6F257990BB2C37901F4A961F53191B0BC4DA684C585338D2EB0B05A373BD2BB97F7B4061295C639DA13E830BAF22266C9326DEFB4BA732A392589593A31B5106C431CF5A985DC927E5567049082B62430541829C37C9A1ED968E42232EF50441B3480C3737CB0B57F2A7A5A48687F73D148FB89C7CDC95424CBB42A186FEFAA51C20C840493360EF05070454346784EEF826C34F15FCAF9B50FB47ED0467666A4BEFF465283454A24245ABF870BCAA89D70D51334A2942F774908DBC61693070D58A6997B6A1F6B2AD1D2931C27C74304321457BA3666153B169207B89786E40C2E050B560A37503141F67420A5B05C88B54F4BD2081920C314761FBB60C85D1443E93089DCA26007D3402FA918D522C85873C80F1A041AA63C0BC65C6F86178C61C5C732225980370BE51C7F065FB4C45E3C73BE30F4A3F31BA63039577E775CC0E2B62E8A1331818BB5943A637697ADB5751E16892DF3272A638051E009CFC0831632CC388D5C54CBA8FEB8607BEE47D52B8810EA13B378160BE4DB04A59B794CA918460F828896B3ABB156C26BC2E37F4C2DA1608C54971206892640A8B7FE278D8A82B65351EB0FD5E4BA7378EF3C5D2A5DD4084824D6C383D2377D36484624298A81", + "c": "5CCE7410F68738ECED68AC00E2FF78963EE06325D7E030590584A30F9B740A2F7A5CEF919F384D1801827E677C2C155089EDDDFE74471E319B7A96C74A751368354A3C5C62D517CE7C20415E6E2A9121277E039432B99244D95283B9222AAE6F675B1FEA9E9AF71D60C82B8AB74628C2C0A626E8FB7FEEB3A60B97D85EA7BBE77B3FCC85FFDCA8C4501BF7B9AF179716EC483066FA92530B63BC0FA3C296997967FA1B3D98667A350447D59B8FAD4EBDC24F80C25A525022E1CF75F497BFD0889711ACAE5B5FBA78FF0A1CBBD47A352A8709085AE4ED8D06D05A9388FDB106DB6DCD93BF21407771A66B26C1FEA1ED2D15AE345F4D8131E7F2523AD95DA91D6A143AAA08ED15577DEF0F274AE853B41AB63650E7E733D9D7E9B3643FE4CDBE607E5A7DFE75AE57BE8C91932FD5D726691FBEE44D8F83DC94A78CA87369AB35371523462D3254724CE245FA33068606AEC2B7144706A18F34793AD298229E073511EFF4062182DAA6BCEE01CD388629ABA8EEEB105BF0DAA0120BA9FF27FF95EFE6FD4842342DE27AFEBF8972CF100FC3977B2F40E851B7DD14C02E9EE9EF0A7000882718EC2055C25BED85DDDDA8FA7379A904FEB36CA89E749A54F633042FD87DD70BB261058E64F82B5DCF19CA59233EEB364BBEAEA9B71B5E475C33D811D60E7608251F2B4DFD3AF9337FF03B9956BA7F53312E1955E9A1719C3CFAA7CCEDF8AE7CD90FF4F6129967295CAABEC97644108B3C5CFFE65E55ECB93394BA5F56E94FC2720A66023A4CEF20FBE9A3B7CC6684E7ADFAC2644E7E6A735A26D5BFACB56D03BB37474DBE73E11390DA4243162EBC5F93C9CE7CD5AAAB419239C89CA62B7AB233C7688803A32751234D7313DA0A888F41C9FA98C4486AB1D474EC933993BA7C882BF6A5B459B2F8CC606C9F6445FC8DC6CEB24BC376FA9BADF1F2449346E671A584BE000278A631B42DC80A6F723F64D273BC264527247F9B6220371C05FD3F729527FFD87A7C1528A0CC6BB2E5F5E75B009B9D8F92C29CAE035CFE1C16D7B66D32CE3BFC8447BB247F62E46B96A187CCE43256C5E1A0DE4B339854D281BD0AE36D248AC25DE1419BD2E3831BD9E1F5856CED3AB7B1BC9A48B33E24DB0814AB30DB03A25BA58B4A6CC39EA45556D02C6CDF9990938C002ED43EE740E8CE2F9C9C198D287E1225A495B5A054534705D6C47E00CC997539B63433A248D6331F70888CA4FBB01084DF34A8ED1934600FF0052C2C3E25103C6B588277E0073A6DDF31772DE96C54417A75D7E1DC92821B464C5418342D96E10551C81103978D7AE960933B054B7EDEEAD4601B670B86E080B6EE898E5D225897D683AB9006F1BD97A5B99CF95A9E8EE4C7CA4078D6D31F8A3C3EE51DCAE9E87CFEFB2FBAACC39DA57579699981F637B7755393093AE7C3292B748BC26DE7B6AA6E1E06A8BA4BE5AE0D7D8EE929F533EE1306A0C59EEC0EC5A54407118E2DB2DCC2927A176B425AFC0F6AF16DC9503DFB8F66D55990FB9116E7E5EDDE67BA3F9A42746A3103BCD0E3E688639AEA6E63965524997131F9F3BEB988B1AF9D79C5948FFF35EDBB579229659F009C8E29E9ACF753907F4126FD87C8FB1395CC1F0B796E7FE67959C034030333FE6A588FBBFA4536BCA76C69C1654F1BC08914A67BFBC229D8DC1E8FCFAD86F30312F544458818335E5D912E127524905C1590E198F3474529B28F2DEF383CA2A156D808A0766CF4BC99F1730BC846DEFB1C80523639C6CCC65C252491BC37242C0DE5F1F3B0CDAFAC8438195DD2F4AD66CF7EEB47C5D37043B40B5D102BE8CEF12710EE0A3FCD3A01E30A0FBC7837E97CAE4D6AB4A57F9F126C4DE3F8FD05DF3387F3AFBC4D33AA708AE4EF76266C76B6C9C3FD7FF9205146E56CFE1BA1275D57035CCB742B4B16E52F8983AC52A7EC8736ADE8CC998B82AEA49718A9399D2F7B388D16300956ED7A42854B712BE4857FD0FB85609930106BFFD6B91989AF5CBC8A3578DBCDB43A109E0D149F54E03F5B1FE3660ADDE9B58EC6133EC3724371D1B3D356FE0B7ED1FE1E7FDAB3D1DBA4CED7527D07296E59656A678091FE69E2F569AC15DB85B47A0D8CA9F81295C96F894128C52EB1F2BA3124D4D174D58D04680EE911EAA4029CC513F80523DCA639F6AB2649B5E93ABAB36DC1B8FABE40762F842606813836C3A5C011B37FB8B77EDBC1FFB118B3AB641C0616" + }, + { + "tcId": 99, + "dk": "E3E45344B293B119586B15BBDCD8C1DE07392B64A444B7C6ADF10FF2089257471550166042016834CB592B8689B3F55E638798CA89CAE92AAB3989A24476142CD27CA4A747D134B7F8308A928890C52767D839535ED880B90C8C004C35FB5B261EB3A6B689786E044E3C470CD6A318D8AA9BC686814B655F430AAB78276BC1893ECFF095C95BA22E9B720418CDCB65A89B6C7170971C3A78CAC6B895D0BBBABC6925F0089656D6539DA9763A107C666AC7C4F01BFEE69B6B76CEF8009F8283852EDA1DFC6CBA2B053785D79E70680DAB36096B4A851EF48949297A419125C91290A105C28D8B4C33829B7075CD4FFA323E537268372E43345930D657EDBCA5760A7E67E442D284A20B1AC7003838241C26286C41EF628DEC929746A3496AF199612C42BDF17B74BCBEEF631E2E973E8A2CA3460C20220BBD7B726ACA0C89B8ABA792621FCE1C45A5C59C0D04988DE71D027209AA4C96245974E4182042E353897817C5C6309343C2E2208F6A2BC88583049E1A9596456FB81B7F67B83C8564CA78A3B0E0FA3F46517B8C63ACD3DB2F326CB8224C8740F2347CF828E1079B8041461BC209F90A7C6256CB00FA3803375EC56CA53CE81DEFD4322FC39A5740C894C31408B88DEEE21F32F42ECFC70E8C9CBB7473428FDA0AEE13A7B549861768CD1777AD08D22992FAA0CB5B9C1A16B60032028EC5055F296FD2A83D7A5583D0D5C2A8FB5BC6560F04673457214F49D715AE466F8D3C6094C676A8B38DF4F663637A472799AFFC236D3499726B6737DADAAD964351A1295193056626E182267A0FDDB85B2DA667CD4A159E592C6A83404273AFA25C398CE3BA70EC0A36249D1385052CE41625DACE34AA42B9538544B24242AA28F8D92FA0116E52F859BA4343FAB36CCCAA6FDEA1CC2928CE3C09CD121008E4B4A965C84C6073544F06D014642BB8D106D36726241197D7ABCC1D0B165FD566ED1C73AC57B10B79CCA6FB3A04691EF04465980B58BDF51E99F4BB836061A38715640C658AE55D9D08B071A566320A8E5D120BC433A873EC21DFF814D6A65D81B19BED6BBD5D52896FA4B4C532A6CE74793384A7344BCBB87720B385C87AE12E771C1152E495BFD9312872384472BF0EC39AE1E82BDA834802524630EC03810493D55C832217CF444B29FC9A5618646635EC767AF696F0F43A388CCE21B22BF13C9431406EB0C72CF7574188872A4CF553102B5353003D4CD256FFC8ABD3C59B743ABCAB18C0B31C41A277658F3478947AAB9027163F9B211C69C13E703E9F9A1CC6229501934B90B8745C8777CDD355E808CEDE632A1B009BE178454CB985597324149670FF2836A4085357776E418061488AB066868B6144CE41FCAC8F8B8C6C975078C19A9C0517047C0EB35772AE06A72A42BDF6435809823938A2C62ED00CFC78BA27F35C74F0A353D255508456D64008F62137A31B1F869C46BE6768FB47C37D542F77E28ECFC69265320679142FEDF0C870C1A8CCA981FCD3B61FA7289E9C16D8A416A86C951662AEDD096BC3475AD0C1AD82213082503D29D8AD8B71397955A3E2294B5205BB7D438F614A574C5086636049537C6CE0A24A242B54C723AD72F167C45923161193196BB0C55111F42A758A83253A396537946DB792C0D0C3647D418041A84F029107BA5171062349E0B45F9F34359E6C6E37750329B7B5069B375A147ADDACB1734C8CA0E0A6F7CB1675073209C9BCDDC8B4C8576E82E5A55B0115C18860A1939E76D8174D7960702AA381925ED9317BE85879CBA90832DA65E1D90AFEEAC77BAA46391225C910960D7262D842A4DC7A860B8C7F79E494D393C22A323A7B64604CF05C7D8907AF3B2159B70B20E83DC1D654A08641CE7566A0BA5BD9767A8583A0564808950526A9B4401667188A89604DD618EDF521DCF89063771EC3992C784C293232280CF8B68B5248066A476CA2482942BE48DC44BAF79A6DA37FE0E32744EB92B2E74B534B26D84A0E2B5073C09A0AA8810EC1204D9A02A6E4F35EB8809B67B6427D772143B91E1AEC72DB582CAC5715D0481698598E2740491451BE81EABD97F4CF838B4DC1268ACA4B8AB4CC67C8F09B8E0A0847922AD0280EF69226AEE95459010C512B6745E1C0F77A8BF315108530595503BC7A080D32A1596D7A51CE524C1023C20E2CC659E9B02355287DE1643CE2155E736FDB64213825B8C5A849E261C309B69558932170C5675A53CD4F62898593A8792535A0A06187EB688C1AC90B957719BB7B3933002A95324686741AF6998074AB9CA116ABD10D3CD482BCDA03710233FEE6296C718F3EB846E3B32FCEE59E2697ACA6C4905E86260038A0635504ABEAC8B656420DD22954A62AD05CA47BF685010CAF64A020B6782C77BC8DE7FC5BE33C119452AA518C4AE5183E6AE3AE195C07D3E4372E7B77B31A737EA6017EBAA1E9E1218970B1C26926A3F758D2301E2449B917D1192987613651B404D98E8A652ADA735E92D34192B6261A52C3A56672642757669A5716A277F7DCACC7D503007D805E950DF9765643349125310742042D4AEC4CB375C8F0C043C82A72CDC73FAE372DDB301F0C684A02C94D9C415E7830255C60CAC599392FC2A63294A2FB22B72009495E3717862AA7D37C5E8A0C0A89E990F16759C54AC9D7D6911EC0BBEF342C13CB988A12452355A8EB57734D1C5B42E485E5E70C98B792C0F0A4FB0B8DF0743CA6A94A936A80A40231FEB69F688B82692356135C45E2D6B3B346B05721BB570A9329428F86074B50930AA737BEDF2C0F3D4320BBCC4CFE2AA06E8820D38B09DC477C78385AF19595F34A807E3BC558228A06E629F479603CA8B8BE49CE24A48D68DCB2D183C83116BEAE4ACCA444A60A844749C6A76BBA67B8B60E04AA4852C56A462550A74B7A4A00CB5662B735BAB6F27157D8C1801A3963F8A1CCA0269D61D273E2B6B1527A1A0B683845E68D1E50C573C3841631300FA39336F3C9AF58A2ABBAAC45274DB4CB139FA7952D7323B658496C7584B291B58A17437EA217FD1A3720CAB173515548D045F7212A93A5033F525C6AB13FEC801ABC4B22177CC409EA1A37B10B48F29A9D631962552F35D291431C6E947B664B164317F010206BBB5023542B6A9CA1E1B877F0269A77C93B7C6E7C65755847328CE2809B74A0FFC76990055D02552919144758673D6F5090DD69ADF3A283B2E0CFDDE3460C8796E7EC4F4ACCB3A9E8872EC744D705C47D3511DDA09A7E8B3867C4385FCCCBD04855DE3619D1E20E3875861A88A40F672D12179BADF5C81FDC7A18E7A5F158866A932401D057CFA363087506C6E64DE22B1DFBE3C4E0634A3CD868389A262F1261FEF19E7B818F53D703AE9B537973849D26B97A8AB1E3B2252C0143E5B3388C577B718561F9A8C19D090D17E943A8D1503B26CB67E8A7FF6C7046F5AAA1CC33EAF011C4550ACEB88C5DD2CEBE12CC0D535E14330D2445A951FB528B108CCB7922562734C59CCB4D3552C354192E8A033DB7AA0FB89AE216689054AE0DA4A8C57A0311064E7C66C15DF19836F80B4FA23825235B6043C6B8B7937D295203B9002F697BBE8859481BCFF00C5E169030D9853EB4B2B924E657A1B424F34C36D0E29A62797A4A43282D69C30C512E6B53C4E39C55C5FB3C19106F14B06E96271CB4A6CE070964368432C721BBFBEC8375434539696322670709A832DA9CA666488C06746987B78D9F348C4B4576FC90986453BA25C7931D61BAE6A31ED5D2845E86366B0C1051233CB259720F615C22E0B62DE3C06264418E1A7DCEB10803224B0D963B3062B86453457BA804BE059499AB849DEC619C101BDEFB5CACACA5B85AB045CB21CA3528090C945D432A581CB6644B7F36D88E1E0290DFD83474B6614DB5377829A21640588FAA7F0E703D0B5651178A215753141913A62E59A61AC8522CB38A705824F2918BE534529098BBBA0760DD7689AB981AC342AB0278B109838FD798C12F71C6E5B419C261CB1AC99B173AA53C5613ACC6BC41A3CBE46CCF4EF3B7F4F49940648AD6AC21F16910FD91084B2B6590B21267002492CAB7E129C64430BD4CA911A5633364E30473B3BD86945134A93A8362C206D19AB62CC96EEB4012A8C218900576A5AC77B288124A9EFD8AB362844F7D873E21B84629B01797676D25533D0C21B4400242CF06CA4A9339E8C373E28CB2CE75B12D54CF70789F5C561A5231052149607E2C17E5D0A019B95B8AA161F39A6C93E7CAA803AA437A5F34E9962D520F49B72EF34C9D7C8015A154410C29381F417ADB2698F23734CB29570853B7A962225735A85D66C0171378E1F0A52E75251B512ED061082E959E04623B0F06A5705032C33129C953A6EC2A75CC21E114F6985BFF79837BB476B6EBC850461C28D4AE315666DDCDF4FE185EB612397E63569AFA884E6819429BB325104E4D5A8A83A27713B50E8BDC063091B606A298AD8F4DEE24EF2483", + "c": "B352D5A6E2EADC640865E102615DB648C648EA3B1646DDCEA1611FE6F08C7EE36E6A84E3B389BBC59CD67559E3D304AF8DC139CFE8C262134BEF89A8B2DA20F1FAC6F1059D7F49C7D53AAFEB1EC9D507A1CD171D129FCC74E757995B38023245AE175AD9E0DCE6407567AE0734676567C62E019E94A033BF75593BF8A58B907750C561218C15FE345FE27D0439331988BD61C2755D5147D8ADBA19E11B25B3598F512D7525694150444B714D900F85965C870DA505E087ABB2FB6FBB1439A0E74664F8087D341C7ADAA5EA54AFF98D725B235640D89119A0CDE2D2DB1E08C9DACD6365DE79B754D88EE9F75BC4E3357507AA652C84D5EEE042BCE3B250AB16C1E9995D2FC65F097FDF3F019378AE0DCED07EAA0DEFFDBEF2CF7F66C3522ECB7BF4CCDA07C354931A6DCF7F759A41C5DDC17A5927C8DD452325DB023B632D1D5478623E641C9845725E4031D777BDB3E886EFD091D2A654959EA841A394B2620166B0E39D5D53BF98F37F6EC45FDC10236B8704771E518FD0C9581D81C0A7801DF129BF7D8EAD32F9BF8290F90D3CFE1CBC0CD9CD0AEED6F37DF04ADB354DD18CCBBEF4100FDDE5102BFD9965B3A373E9CE47CD4208A1C6CDE562D20DBFABC45B553DC0411E6EBE45219B16DD0BFDE0F5BA8239923FAB5CC5F796BD563B75BC10D45217C1BFD05BDE23CEDE44304F3B4644CE3BD6719C258387D2F684758C6E2D89BDFFC498EA518CE47A7E188E87F64CBBED10D27732E651557855827BF8F5014E5AF3E4FF06510DEC0F7F48BEC66C9731AD5CA8D11D5C1B6B3E6C4D1024B41EA4899919927F3FBD8A3F8E89CE54BA83C8DA840611CB16A439E004D486E08B8FEEC8B0BA65EAED6A1A08FBFC4C2D63BB6A7EA0EED678197736877599AA96E8F27BFDBB9A217E97B694DB2B604F4F2CBDCE7DBDF349960B8E9A036317F7339DED78ECE6CBEA9148636AEA5A2BA7F2B84CDE87BCB656A0E4B8B5351407F9094686909B2E7DF85E425352B7F95F7ABEE4243863F9C134E1836AA281D70755F66E6A4A3B6E8A2F7765D436129F719599A0C01E9C9798CC778FC771ACD5067E9E9E1EFBA1F04C367EFCA76E9C32E1145E49A6AD2D9E2B025FDC0EC71F510B2D61C83CB7D215CD306D9EBF2D6083F19EF8ABB7B3E46A728C5A25A5333E48EB2192CCB026BAF143D62478E23953C131DB0FCEDFFF17637D685ADFCF3B994ACC831607516DCA2695283DAD5E10D3B20F9F7366F0076F227EC2448D840F32CCA52D364A1912D569BE14E74A6DC4B4543FB3411BC0C1A3BABDA8FC6F0C4D20BB36C8B5A7FC8F4104A10779AC8375CB174E1366DB213917DC4340570192C57431067C0740A86BB342DFFA8E36BEC9BF554B36839B7D1F572C12928A197403B6B7814D8BD83EC23FF35E4475C8198D7C8EB6B9AFDD4A9DA583F5F92C5C4F048594ECDADD26057BA4C989E08C8E800A9E8A7DBFF4494A33FBA336BD60789D6CAA3277823462421CAF63C2937E16CDDCC5CC0668E49F75BFB96E0293482ABE5FD188DA961EB1116B3B2D2155725A8E52D25EFE3C2D6965A2EB62A20BC640B4E172ACF6DCB2E85EA99A3E0AD711F0FB45084F3DC3C433179C4C6BE311A1909DC097C911C666F78678FFF71D342D1661F07A14AFA2DD8A6D66AEE7A4C5C4CA2B8B77DE19B53E31DC61415937B676A13BD1EADF11A7F7302022EB41E147DE8FD1C2D71DB80778B1DB2D378B211EA04F35087FCE5A98F3D2F40DB13132C4E1B3B50241A70A44E5829DBB562E350FD01283CEB743FA0C5B72A8A5835B9FDE77AA23FF6F016EABF57A256C572AD3727455A10311FD7D1DA6483C70810AA47860436CC4216A90460B0BFA8B98D49FDB3433D0EEE65356D00A05F027C4A0C9409AF72D0E1C3E89E12A383E2AD5956C5A7DB0164613467EE7404BE8025D99CDCB59D9D701B119B16F3E462978850E8DBA8AB08B88E2BDA07DA68ABD89711A086B825298C8AAC9166D6936D3E4F1E09452853EFE6700D126D17BCF6F0D82434CD9F153FAD3573E20D35BCDBAF35D664309A2B9FA21996CAA29C9B11FAA3A22467DC1E5C9A986E225D199732B5B248A38587B2D0E441989170509E693C1966DA3DEAEE35C927DB6EFBBD4486C6EC570437E3879596A1F7A3EC3F4879782F2F21CDFBA0945F99BACBADD25BF1F25B6C5B6BF853901DAB0793419C543CF52525D759C1B0E899EBBD0E994C39EC7" + }, + { + "tcId": 100, + "dk": "63066A49C505A3D548D5B348D4FA84E06B3CC95B8B0CB08289B28AF7AC49C7E6382779351B27616DA67D79432BAEE32595FA789E7371E6F339B22B68415B844C0074ED2279D3A22C6A62C91940760047CDCE9C71E4680472A0C12BB951E5EBA58A542F259367DB13263CC1862964B2383960D8568C692463E996665AB98C7B65C8B958BE3F26CAC855A2780B6DCB4AA49950264DCB70F35705FC28CED4DA10FD1716E0C85DCA17BA85F60BB54A514C89458ABCBFB95A131C912A4F89A3BD54CC434663F3888D8C86740B62870B07B6FAEA30C3623C8D4A677976BB7574BE32336BAE6B4210C48BE50411EEAC7D40EBA8F69A246C5489AA998B2F56C0CB8CA4DA16B1A649A41B94CC00BD6420B4CE356137B441559CCBB6B729A1912107183231D802A575D590BF6A7388E2AACD521930191237628F6F1147550B21CD574D3EBB04E5A12D5D8C2C9E223EDF66B9FDE9986503263435A070860B9E4AC5F22A0C5287A7520797D969555A70C5F54CB5AA06BC8AC253729B5BC205CD22713645455E674651CD3327680893DCD53C726B67A3806349C102C68070C5E56D8B601959FBAFDB8943E0A63C42002E3D29AE59271725F92A85A07F2F347D824C1AF68BB6E242B2466065C791903371A702C4AB99D44A79002FB8540149F6616398A3F2883D63DBB964106C828A56A4481DF1A03DB6765AE474A031787141E96ABAA02C2533826BF43861F5798D2B57D5614641993F9190910F731FE3130304E12D6F388088401BF6DB3314B2630BC322678165F1886DCA34CA81616F7FEA844C01514BA9AB42A2C23901930CC365978A9E4545776C779100784D5DA3986EE677329A4F45991A24B57C18CB7AB1187AE620761EA08F14976E320B4BBB8B1A11FCCFFD6A440FA358C395BB1BA7346B3B426821C8144A48D93A9124422154D430B4167EB09B2236B8C46557BFB545B488F80875733B013811F049642DE483303ABC8F43BB0D884CEB8C5F539C9073E488B95A19A4F107559BC056533B409B9C32EC14E35C8F05730A59272399A5626F13C2A20198F54460F8A689BFB101C3C5631F61CA8EF61774BB51EF3AC20E16BC11FC097F055B45C13911ACC37646AA5E4C3B6B98A6BD82447E83B331289797216AF4824725C7C809768C2EE56AAB991F84C1056A069255F0B8F14852F8F5C6A6F47849D7BC667A44F488B66918294A084B7A47C18433198AA24AE0B516D8CAC18BA5AB03E82F607701C53C450812947807CDCA4A088EF37AEAC3B7C3B885515BA0E34593A42C221A74720864B673E792D030BD161C86C8564D3F3C3DCB04C930EC68D42A4BFEB90270FB182A9371E6588C2457B345C1B4E139BE87008A1B572598BB5244222363B86C46095C23F4084B4B24FED715A72452D2B349EB8BA0C68B491CB371F363682BB1A237F2BB424C140A0A59D3700755520DBF6330D8025A59D69EFB698CCF99C318C44AFF16B8DBD1183EE04FD12822F3259089F1CEE382AD118972AD7C6FB6D845E781C75EC87A68905EC2257A1BAA89569A2BFBF55936781B0B3A398658085EE840D03878A447B7D9C64378EA07E5C61AF6D319BAD88503790FBB980F5BF75C114600AD267A6FA1673EB7899035A0D5AB3B34119CA919574A36AA4651192A593D62D8BE1ECA2B0AC67906F3464545C522C73E052673339901A6969933739E567C622C694176979297644E87C9701AC98473C99E17A04A93EC1EC26A6A424AB1400BBF04A7183837824963372030462E47205324CB8CEAA60A248479C633CE596A61A8CB1AA9C8C2E344BE548F4CD97DBD3A516975574BFC62E9E1383667B5FE393481A434068B0E4D800BC8207CDC7B06CBF9297A6758D7F2063ABAC2FE7652C2FA86EF995B83AC16CABCAE7DE250506A5367E9452DD548AC6A55C9F886CC8B1B9536AA14C9CBC98B7CDAF9A6AC725D258B610E10B369411BA550598C3AB928665E0F13CBEDF63F1656C2793B0C1EB9989D98ACD8D45FB29A0BA532A0B1E62292A77AC8D4BC254B1A0A87C7E961C9F7612927E514DB2AC9158A1823339415C50E6D355596B48873FC159B3C3846D211EA481E87FC2196663B5C1184717508F7A5C13F7323EF62AEF58456AC960E4E9C4BDD5670FDE441C5A6A867A216C4977CC6656BFC7C195ECB3D9D77706C0253288A856E276D2A364E5DE2ADEA9ACFF34858698C176722CC937CBD23C9500E339CD0B03E7B071790739E68566A5C045119E9C14B41693349B2A2B728E8A3410BC3B608A47C6525A680343E2A3C056B873C8B92A6993506F1E51966677218060631E11953158511721741E74EAF91B9D5279B8FE76B698800E4763D56685B5101C219D718C7B01401C85586577394C619886375781A1AB8977A3AB97A18D8C05186486C18C53490B964C21E6B5C4940251200FB79D89295FF39C903D10A710B26317B370BDAA78C0A396C5A7B312341A57B34DF7CCBEC4CCAC412C800D25317125BA00255DB3B99AE4244DEA8B395E29C55102429F1CC8BE854BB7272A1B26AEDCBC863666193DB3397C87397B744C3D9B43E58262716AEA81422D779C4FC60C0B82576D149C630AAB7429B3ECAD23F42219C7BC348F10052824C63CBB5B5F39B7919084E6C344F23B18DA3E1630C2427A7A526A0D26B57319E1870754C7854A4E2254D64AEBE8566A4FA13F890A01C046D356AC0AFCB6514E0038D47CA01D96432922379E16637798006476183F0BA5D516B6A4AA143C9484318A6D0970150D530B347BD53A0AFA587320BF1162D2B21CB4C9826942002628BD9A5699682AB56B83C4F5AB112815A8089805B305720E55E104C68CC1B7EF8C3916CA3581EE16730C786FBE35D7FF017251549EC88A5DF5A93AAE44F60962B2A2549442A2DCCA7107D96C4C0028FD32ABA32A146FFB2832CF246F66C6B3E500B2FD0886EF52ADF58B86C6C6CEF046A67F107DFB24595BC996631C81DE0684AD5A248C6A869807D460A44DBFA8A060B6A69E13EC37A0DF7A7572F573D1CCB3118A2B1D6D337EF33AFD8EC90AA08CC24B39C1B92018B7002B7A970A07A7DA1B8AB8DE1ADB01745BA159BD111421569792960394CB7AD711C941540716F6A4836AB5AC785A1297426D235CC001B35D040506A46264E92A6E47AABF23261D2A45E11516D73C5331B2A4F60E3007DC12A100C2068FC29EF5B82E4EA7239F316173B259D03B2C64254ABD52F3F498268691D0D61CAEB16CCA57929EBF88DDDC00FB632831194499CEB8231E77BE2DA5132136FFCACB633B6332AF25B224857D5B72D07922C8A5C26E6C76F31888BBF3B5F8C29AD06D57AA9841E9B22249BB1639A5243BCCA5293F2990C4C5149545D0C7C0D5F0299EB361DDB285CC577C8426565177C89BE0AA674EAB947E7257D745CC02BBFA815A34AA3155D9AB773094FC61B15E98595BA685A207A3D92902E943C585E7521B0D39450C1C812E2710048C978FA54D53A267568444F139F2D5A97BD23B12860A835E74D773B20AA668BD9E02E601CBEE8A3AA4DB119492028CAA4ABA50C1FBA3426C99BB6958A8B34A0A7B32C6668D32176B16CFBCA137F2964D56A643F888F955CC25D22103A9396CC133F01A99F29145785AC5F3BF42C7FFCADF5C30F9457012C36BBAA9C56AB917660762A7ABA25C3F1AED2EA2CB75214F1D798672A89EBD74285D8B3F51801F77693CD0C20DF48ADB38B6696A1AB4EE804D7A02A41B5928A1C2A0786B7C867493CF28AF62C927644154B1942C1880C593A4770DC303594461F583C590A9D268B4E0B671F12593227B609B07A3924FB5D439A64921821E2079D9323A977CB9C10590008FCCEB745151D4A0C9AECC62E7C6754B2887C566CBC20C004D546A01BA09F92273592AF9971B28FE5CD84974196E79D684962449A8D54560B8B57BDC386ABA1674CB3B30AB76BB0CAF135D023B20776487DFB20707636A9C21022C104DDC51D0CAA9069948AF89CBB80C90BA027BA60E319F1B7B563695197F4120A26CF81C51C208B4A7A054B03C3AE624096CA2C5CE9B20693EA0067688193EC626F39C474C9B070A3BB8414C7BD6897C9BB1489F3BFAED6461AEB3098F7CEBEDA12EF007F7F915D7374312CA581DE8524422BA2A5310E5A96003EA86826C815FDB6AB4FFA7000783A9D3A379F79B235A204B94A21499AA0C959CE3E25B7DEB9720CE97B604B2B4F31CECC75C3BCF469F61AAE553352479C8E0237A7DEFB42F349013BE6AB6CE7AF7C144E481B245FE2303FB230AE3462D4B3ABEF3AA227F4AE652AB82944444FA1389B720BED57647F93947E5886F70598B002A6E087A736576964331CFB256FF3E13AB181980F26867C0C7F094141522A3F82A9CCA8DACFFEC23BD7973211C4F6244D2D2AD2BEE8EA1D776B957BB96078F974576554C53D94D059A55CBC2D02DA6A1BF230E9B31489ED499373F94B10D8C54D1F41676E47A6C251D23C69ADABA915F4E182D6AB33E3", + "c": "848A038059ACB8EA4514933732F43E117B6320F3EB4953E27CCB3DF2A789A09264CC77577489110F2EBC6B5CBC57D2BD73891D73A3763A37E88A8D58A37D187016507C619466726974303AA72A5461B720B862F86F84124302844377588D942F74951739E9C4A8BB282520A166CB1188747FAB13F87BEDB230EB7A8820D85C995546D7C7659A5FE19894F3C59D45D4595E31F655E55190F5F31B7FD325E44A62B9388055666AFC6C918C70F5FD7F9EF50A8365EA996286CCD994E3FD8AC963E4871BE0FDE74C9F76AE07D7886E03C8A821129C6AB2AA06B2D8034846DDF12948487E5C209744F62FBF4D71BD492DBB1F8AD108AF5B117181C5BEE77C2C8D23D0BF806B367FDF051D6A569F02D07BB3580C10E582A8243EDC3C8ED4E320DD8083F88ACBEE4B4A5EFF2038568477DF25C2E38D26161A6A7FE94DD8FE6F9B7862FE5FEC4B3AFAA93F4007A7F75A2D2CF06CF700F7768F5B14A35415676B36230752546FD734FF1F512DC1852029A5F56F961BDD0E8444A800AD645A0428650416AC09399A7105B5B4D8CBD77501560048D1AD5D5EEDCF1D3FE0D756D25D82BE7F97F744764FFFE89E900D0BDFAF21A2085D560DF3B8D6FD5E19C9A5D298E1D806627E60804F5D6E61E2C241C59DA317DFC67D18AC3C62F613973526D7DFEFF7F99849BF54449941924FF8CD6CDBFDAF972F8A2B9B439BB25B7BBA1A6381515135A6728B2B2389BAFA02490E3DA005BDBC508787AE2D67D23F226A55A9504C77D0D61FF8492DE5F3B7C9E8E4340DDC8D2A9E99101A1FC85E3CA3A6AD0BAF443C7F55F1A857075367563998B0CD14FC003E970D036277F6EC62278AFC43B1D6B66C539BD8B1D6C1DE18B46CF75D124A67E4BFEF32F3D5FB70BF94CAA1FFE13D0A2023C0EA84631011B50294ACA5364AE3C95EFBD266459CF225F7494272F5487EC90D42683B45A6D4EF2327899843EC9D8C8D2D0CC1550CD0B200AC62976FD322C8830A16028680EC77D97D09AF15EE24F23D977E16E4962F42BB7C2396F6B057742435235D38C3BE0E51FA5454045245F39B7CEDBB864CDBA6A7B23EA65FD406F80A7132467A1937C4C5468C7AA52B556A9649234265A22C1867EB898A230A193E10376984CA92221783395E49A5241A5FFFE049920EAA8EE1692C9645F114992B25F912D8AC695E7AF2D737065BDEC09D0F5B5C2611017658E1E9A7B66995B672E04C8522026C94C8355D15112786213D7D56BC16243D1C642536C00DA2851A7EFD334D7494350BBDE57F2F5F6967ABB6004000747256306FCCBBB06D34289E98F066D67129F6A07C4EB45BAF3CAACBFC423A9217C8932C701CF8402BBCACDB8AAA0C67EF39688CF85B08B62F09587249891585EAFE3A7E723C21C4C23135A8961BAE67ED41615C6A32740F02BA8A419379F5C8554B8E6E4760274A2703995CB24896CC00DD2E2C8531EF56544F7A1B25E2D1BB76AC282BD116BE64562CE433B74077B376CE437E5263793EF65DE101277FAEA6CFE1CB18A5B3CC18FD03CCEBC40A74D9F46EC8B9BE0E45A417E296AB6AC1F867013AD534EFCD8805D34B99248A8B446429DEB4B45AE27822756A55166954D05765AB5D9B962E49A0EFA1EDA4FB006745B9602E1DF2F3AF22A165BCA4134CAF0D2199FD3515BEE853ED258B80B934BC94CECFA762347CE6974803BCDB360117484D04F8772D975ACB2AB025D45CD4261AA4A5608E63F1764DE6A38B107BF5DD28C2B578FE0BC9FB36DE9AD31FFE91DC21FB505A1C8511CC2B64C0F3853A3A07AB57CE2053763421153908B94DFDD3CF3E3FEE6EB382CA6B99F977A01A4B1EE53D9BE240EEB76872618C0A90DBB0A8346A63DC04AEEEEA8D6B6AAED016E0DA7D06180AE171A60541ECE6488E39DA4215DCC405A84C4B2A70572013C1A33EBC7016ADA7BECB09DA91014425CBF0DF5AA3B0F2E76CCC4CF8BB239601D4BB6AE7C60568822D963C3635B093A5263C035E446340D81D6BF3CE82672CB9F2643C0C9B12D4AD3D05F9E8567CD821A882AD6B034648AD6975A896F12BB00210D5B6591E484ED3C15DB97C869EAB167C860F03B3EDFD7AECC9FFCE49D78F68B048245B88819A9434BDDA676B0B6614C13DD5C8621F21AD1AB84AEB2F658A24BA0AC9C291BAB982EE2DEF7AFA79AD57901D36115803F04EDA0029E15BB3A16123FD74A0603EE718AB5A51E3B688E023554A1398" + }, + { + "tcId": 101, + "dk": "9DD7A8EFB207A4271BC08473293BA333543980F66EC095284CC9A36C705637CA39A42AC2D51005D58743BF00BBBEA4620AA897663B41713507BE6637A8A353A1D60E14417A9DA8B35D9471D864BC71A26061612C1A6A4DC08BC9460A1741906D19643D185A504AA3247988156ACC0FF8671E07B3C8D0BA7371046A18B7414CF8AD01E936C10610D6868C7C8B6E2BF5110DB106C81B7B3EE6BF43991050C01BE0CB3EDF349BB92887A1AA6F40D23F36DB1663706926783ABD5A8C5ED84C6138289A45BF85F782BDA86B4F81AEE5D6628591AF594738E6B539630A93FAC133CA406E4766A1A6B4C867EA580D06003579C0F875C88362278E452D349C2CDB070C877446BC18B400957CC04AB7B084B3CE28A3FA6299CB644315C1AD0D691F55B65427CA1828E8A340C5838F49090FA8B47D531081824EDF126315B90278266239B559662C9717A8A92C64293E7CCBBB98A2B3E80E5C845524AA34C7D42F1A1446BB818022142AC6113B3E7289D200698FE05CE67887C6532CD6FA5C1A295F3395572178B2E3C515701A15D40AAF77783697916594235C97FC979652242640011758AA40424821AC46F33CA43C1C5DD31614090C9BE96C7584672EFE810368A71D76403E32424F9E3197D44535EB717E2109653D3CA522A088403156F1975CB6447CA656B27461C8F5D8B77118CD7BB0130A56A3E2689687031DD18A2C99B51CCDF5621B2C684583CED0F25859118C84C9BE253603A8C627C8582FDB4BB81BB693CEA821EFD712B33730D68A0232921D202120BE959401155670F119A3990158D2C5A6EC40157287BF5B70D7699B212665248CB42BD2CC6B02BA15759BC5333A53794E51D033BAB16F59F0A284B92171017FFB00256B6C9F8311188F24B2B26671A4F1C2AAA000826926469B9336D315FD29A4C38A8491F79B1F9C3E9F653E41B0CC52A6756F80CBA4C27D82A370459426C4F5432A5696463B407DF93816711BBB54BE092793976C159856BE92183C3AE1C14A5C9C8A39AC74836752ABB09065831E22948E3929EB00BF561CC57A597530370B04E10458F34E2B7400537C73FA902B02BB13AD98908A793208842ECD27BBA4C22FA7204C8187092B1012F3001D495162FB97A4DF0B5C2B0740230B7FEF2C5D679B2541387377A99E9B3A9650E64C44300897E8961F5B65B0559952603E80105A979BA1B2F26F6103647A1123A7F830FED26139497D77D220345A620812785061334CF002E50439B0B93A803198FBD80B238C9F969C3BCE8781B1F2314AB48933628C2E6301B8FB5105299739D31EDABB5FA8CBBF8C57C764E1B04ED35379A593FB869B7AE37C0EF093A44AC1A75CBB2979776E34C00720B095328F6236664005AE6A2846A1BA7E086B19C52C91358443C395BE7603110EF6A564660009246ED4B800E77250B96C665B9CBD4B74B4154A8B98561CA4395F92D405956223294692662B46D69043353A7923D72B93BC3F1923AF70B9C1772B8AD5078686694C56C746C0378D35732161D50A6E9AC012796A4A24203D0038AA9B573193264A02BC8E41922A556770D6A2C76AC5150C1F27CC3360A384397A118ED58746B4221C84414A386711C093998C705096457FB9098786985450C645184E4A4861C4750BE91C16F9E25E42C9BC2C865FA1181477125C42C727000640ED09AA7FBC75808B0C5E3AB6004A7364D51C66B48E10A42F6B625B5FC07F0C108A15C4547DAC3E10C59F613273D437050845470AB02A95FAAADCA3B336AA96334A1C871885B7E3AC73635BDC33BE6564522B9C7D789C459E422A6DA3C333B9A4E29A792C68A6B685088176922E06C42D0C030A30C229B69945E32D7500A1754A605BF3C5F0E50C9188C7A3786926151451187CB2931F8EBB06F3D8985D8C871B02987D47CAD7C84F423CC252D2340BF90C6A58241B57220E78A20CE82D28703C0C0619095057278B128289396E08BC876B3E171A2CD231BF5BEA9042418D9B42C75E2A90416A2259EC43D105119E47695001C70E766AFB798421A931A05B455B3AA79E034014350CA7D47141F43BF90017D61139DB380D33793954A10332F37784D25AA59A3878E0B99E4CC291B657F8368D1C025217A292FA200A9CBAB8CE832EA9BC974EAA4CEE3B875D12C0BC9B9C57B56A425816D9B14C6A90974F34A78A186903DA0EAE76C0D1A903D83903BA107521096B9BBC2B82268A3D897428968216362017F967866598D8A1559D067FCDA8018A7245ECDB70BF96738EE7873E146D2E9715A6ABBA07413FF9F902A3D966D3C794FAC83D7937034DB0CE645B0CE8040AF9A5A8713503F07154945C0BA8059780557A0A1B8475681FF1B73FEE227091D377782993299C02F5E9A58291A7403C8620A401459BB01643C623590B685BC2FFF28B2806613E2926C8A802B51CB8ED1005ACB255DF5006CE373C83C54E3CE15977BC8C8E7515498A3F1B58594A2248B4F450F6879FEE66C214BA4C65D586E1EC0E44D8445DBC8A60755459D1C29D3A25D753C54D721D248102D9B171823232767C5F4CD73EDC3553F2F1BA940096EF154EBB6700F4218CA9405F918996681C59897C868BD56E5483376A89649393B7B6E3BB53C9701BA02278877A53546E6B38008555A81CA91F47E05B40348E2A16CAE03507F66BACEE8741ED1B38704267CD7C29ECF13F9BB072C81A716E89651D575D6FAB5FDEBBC0C9860FFFCAA19399C690B2184EBB8EF4F2A8FFC149B5985C7B3AA0ECF64B13EA38013B5701B49004052DCEC7BF1044C800F86B5CE1317F285673985DEB34588FEC259683C7B08382A877AAFFCCCB06B21CE7839607CC2E7A13B7B5268FD314424740864FC10B5552641FAA410FC633F9030DB1602A8487A664F252F1E1936C647912D8205DA16CFC9A6F89622F3BA4BBEF22343F408C6FB25F90037944E057925C05E7CCBCD02041E1CB9C029B9B125582E4F7B62D3243A5ACB50C50364B27341B9C2E101742CE8927BE7B8933F6027B2145DAAA311FC3C6DE80441DD47092336BD834BD77A2A5974156227ACB24252C0FB35616015D2CC6CC33E9328A49868AB630F1CC14D8530BF0A68DA1D244AD960FDE1A63BB880F5BF67A4D8889D7102851E85D80130B344181A69C23FB34620A9ACA78C124718982940AB57C570CCD7368E3B8BFE47A6ED0F838929BC68E558296FC1E0ED46B9C401F7068B1ECD28626F37779B3C950B914D7447D041C79AA1C72550B08FDB13829D05692406D57DA181E772C2C79329BE81DB20B8807CA460DBC1B68A49E4181CBCBFC1924DA167F9202A777B71E7B794B0B8FF54375FCB4231B648B3AC229CA9C1215168553A6CD1EB9AFCD299C0A96266AE09C06DA5641FB72B15B9F26D79FACE24C26E67A33B28B1A80538AC9BA943A7EE239AB6E3349D65674E9212ECF7762DBD0A23119AF810897FF331970E0667BF07999A531B596B0D4116B24476BDB9757D4B67BFC99A4D3282BF415A544753934552A1C0519A132C84804803CFC2721A62D848A07DED647B0246947D003B5D014C44BBDB4D3BFC068C099364495937224216B6DFB79DC870686E5A5CBBC366268B8CD24A3CF6101C2D6537C57252155AAE570BBCD958D25D51BE95B545A24AD29D6355C34A81E758DE7E671B932A9ABA80987E63781DB367CC0CED8987C688428416625A97C77DD3251726716D375B0FFD8836D6A606DFC7A92A727CFD0BD5179A55E6206BF83983E756BC150B9BEF52D127226A106C8076B91EBA32B4384224F970FF0393936E89AA04B864ED73572194A628A053D526F5FEB580C4270F1226D1EE907B047791210B3E388B0753970957706F1864FB7EC2A314B812494AD9A3B6F82C567ACAC2DDAD6A05D720D8EE80819CB47819A21B64C0633644CF230BAD92920B451711C286A04BBAE34E1B55E737F487B37D33274B591272F562E271A884854AC3D2C35E2949937E0550D10854B4613FED929972A240DE08A2BBC76FDFCBD13F91C3F074EA6FB814289739FFB464D7CB9CAD280DB16B35C23548D7C0C44C76541B701F99AAC04BB1743B467788A836DB96E3D530CC3929FC424705A8632F1B437DC45B86B3328B15B1CD862455D991E14699537EB94E766B509D1CEBFE411E3D14B92099A803250F5466397B2439BFA159BE250E7D14A72E4CFCCD24AA4998EC775A8E031B9691980F50A0407CA221DCBC3880C3A25A54164D6913D016B63D27B66434BEA65C80F3A753C57318EF98D36A80272A0AA7148C8761170AC97979094AFC5485FFF10493D1B1E09A7149D353B253C1B6ACC04A2D7C9C0D39F693A7573E853B55846167214C6886928CC844397503418AC414924A2FA37BAF19DD33232F9C9F9DD1AFC78318CF6A37230D9E5CC178179CFD2D08189948550B0A7516EAEB161713983097A7D58C144E1853C9ED002913413441DA27BDEAEB1EC1ABD9E2646B05A311109B11DD7EF25E93ABBA1345F106C6C", + "c": "D6659CED5978246739F1DF34E2B87199C7ED98DC02DBA276FEE6B14491F3D958DD59F9108A560B2149D0A31D0723EE21D06FE75AD924A778B2B020D5B3D675591B6C4336B81BC2A5F9A5AE5B0112685C35F3B1404ACC223AB5383E213BEC1BF9514724AFEBE69C8484C6BF287EB6FDA8681CD4552AB2E4E0C30139F435F4057BF9A8844226E4854A8D4ADC08441B71C94CDAA4054104895D096F3F0993C6E0C9FDCDFC0B9ACE1A57441910EA73F0821289DE798FDD3B01682A03E5203215E2DEA2B5766A10D6C8B5308AE9DD2A7D8408363C8802400AF21387BB9CDC850B2E7805808D4DBE3F12275B3A980DE2401B62F6CFE0C9659A9D185CE11C5EDFBAB0390B58533E46480F2055F1FDA93B6BFF0A9BF8954C72324D64D9C24FCD2B13199610E6892FE4C436A84B615A99E141895E47480B9135513C2EACC1F45881255C0FC495FA4988A02A2B62696554822D637C9AD14F4032A38E30A751B2974CA618959BD8F6C71FC35CE024D7FACECFF8511145DF9643E84774092D6BD78A3F216DFDE5E46EA1F7DED9AA7D5BBA46033ABB16D41A0FCE60E51C2CEB99448FD5B56C0AB256852AD4C223EEDD23A94312EB3168A958A143B7770A326F00D268CCA97D232A6B6C566501243F80C9BF97E9FB24AF76191D122E60B75986A32D483974724FAF5E9D4D909895E4C01C8848D7D5EED3F506F16AC1E9706C6BB3CAC5F097CAE88383BB6D9CE1FCC91E011907F7292462DA88254450D23D2AEF3EFE4C3A28C59BF9596A22A54BC5CC6BA66BC3299043D90CC0362ED4712CA9623BBC1A22BB9AF195200F60E5BF16898F48BA60681A5F2F2702413A71892AD488C689AA9D98BB013EDF091D900EAF2E6F08645A5DCD72A885F3261CB02087039D65922B650E80EC937C2E071F8E039DC61CF9C9F0EA27355B7302622A82395C4B087EAD072A27EC276C0B19976B0AA2AD76C885B8CF7759AEFFCA82CA0576DE8F86264E3F566237A436516CDA35E4F0CCB12143245138A8A0C3CBB75A330FF5EA7FD83D0BE5FA09B8C95150F4BDD2406D2155E26F082841FACCA531C0572C1F969AEF1BF22DE8C742687913BC52E880B231C097AEB92992008371DB707BCC2C912F08F196D4F36DDE0686809EE8BAB0B3AD64CA61EA8993BDB89339AAF8EA2278820FD584ED3FB2B267DC0625BA6431FE82D54AEB21EE801500CA883BA94E51550B4CE2C7BCB534586388944B5561524E0C2435330C03C735DB5A823CA05A85C38EE2FEE5833A6EA9B0331F0906CE90CC3D18A24C9E1BC0417795F9A0D1BC5F1AE1B92B58D442DEBD054ED900F24D46EDA9A5ED49C8016440343B0530D9A1148FA561EA179A55E2A8534C7F9E65C58A37FA5093626C2934C4D971CA71BCCEE4967624B58721D8422DA54F5EBF23B645B49220F66803C09C3BB726D48B2FA508CE044F8C9695F8E7A947B14863F4C3F4C7AC8964AFCB834205A06E6217E676B0D475666A4FF2579884F7B27906A420BC29D1E80035E6B12A868E90EC144B1A7C36C1EB57547920951BE4D47D7237A479BC96CADD2BBDF9AF5434DAD9527F0D13B3BB9D8C6A29318CBA882B81D621F4AE9A2FFBFF7F16986EF5A2514AB744BF92E9B55BF913AD0EE590E2065D9953BB003B35A5B8EB1B9AD65593B441DA63F206C444CE3C4A9F33B1F90EC115E7604557BDB42A5CD33CF7C54E081BC2D092229B22261F9B2FBA0EEFB354DB0D1DF54CF2AB9D747AA3BE86B2C4C3FB1A998341490C35E39D143966267EB5ACDC7DAD71AC2D72C53FF14D38A88E6014406D961A69A82DEF636D95F0A0771AC249C7D9E275C4D8C50CEB336E684D08453CD52BE6613E03909A4E7B172BB7B8B2F9458FB1526187FC80EAB53819D09F10A9BADB097C69BFA9B23EB099DC6E6167601228A18065D92F6CBDCF56A0DCB195964F33BB94EEFFAF3C986665DDE54F876BFFF0D066A648E6EEE3407BA7464D7425C212DAF9A92A1504310BC71000A64FCA459D56DBA81B6360856600CA1EC765061EC35F20D78E69160F31953B32079D0F7E6A426B19F3D6CFFE9E08672E712D76BE09F0A9F74F942247CF6D2CC24B3464D120325F405AAE7456A8F5D13FE3182FFC93F8EC64B9DB4505091F471927C5B505F79C8DC6CE3F668869CFA8A1BBD76ADB98477877EBF644A69D393782E6B06F2AE427F5EB08F2AE7DDF0202B6F080EB14F2BF97953E450CABC922D9" + }, + { + "tcId": 102, + "dk": "08265D9C0A335CEB667057C49418C445940F883A6ED314979AF08E0D9AC291F879D5B87220AA3AA752BFCDFA1D7D232179365862B351ADFA26C516C05946BDAA81914E26A2E10C453FCC29265B95BE3415F0524DC44A1855FAA33C0438B041B8D6769D62237EDFB45E4A208974806365E636C7A0AE683C363B27CDA9835A7DD911382A581FA6B227470B946611F30ABF00EA8648A9116BD522ABD6404AA8BA56C5B2E4A9B99AA4799E0B5B3C686724BC645AB4AFD72715CA5BBF3AB7210C24C41A273663489F0FE38CD426463EF54C1C8A84D6CB80B918879185AD169B5A023968CCF28ED46AA50579B1FD18CD08E210420B47E4F1B742D5A305D5C90D96528AB9758928BFE501244D63AA5B30A5FEA90A682064190139B0B23F8EE7B27D5794733C184A498B006C3B29166241FAA32A731317DC1D5B17A2F3B8CE6DD21794C86A11223E4C4316CFFB5C40A87F169C8E43D0C22AA76C08C657DFD7BF26777B47EAA93DA66CD1B669B2AB92ECBB0494709B6AC463B1843B2E4784A4C7C0CBF835CE263C2E6C921F429E8EDB8267F64E389463FA7A982FD994EA190DBD243C363B58F7B6554F862FAA6565F20174F3E27548453B146434C2F3615F0A09DEBB2A29E2C0C05856014A799950CFB1AB6E52960F7E35696ED267C0F9572AA973E020BD052B1CE1075820559F7F15A746AC6CF4F70885873F172673343127006B17CF97A7C72410D814A13B54842B1C5EF8707FDC8383054B7597C36007D442D87C1595298BFE654BEB453923CA1120B60E7F426006E4380240CD3F07663837B117A676602703AF034999600F82E1B0D8DB2AF5C80F69721804F1AB0B5940E7F781E97316AC211093C6229EE0467D77A3DFF77547D81BB758A3EDD6AC3B5081B52AC5FCD160EC22AE28703D3F7C06ACB25288D3CCCB65C440C0C04215488D731D8B705D67106D9AA19491C080B2CCC713FC598B5012134558D6E08AE45425B5210DA9F1068A7863EBE3A72F08BB93A7A7F87511B483AF22CA691149574C752FA86C3F4ACC1FF0688FD939BFFA865AD37470AD657A9A45423670205BE69D886A1AE8C9B311337D3461A28A5C5F5A66060EBC85BF464839316E1BEBA123F7CC4CE11F314A8A62D35678B2C875980CCF9260C6AB55DF0C8E8E2C2BD29768012249BB9A4750D250C8C84622F6657FAA481A7451897405C560CD7AC63C3FF0AA17154155732BBF653D7BBC055F127F043BC41226AE4E14BD5433BED32CBC05B82222245ADDB454BDE2BE67C1465E8765B865C058A5A12CE3B25FBA3CC451B04007898367B56C516F2BD9C28F56A23C3A50FC9826F6084EDCE3294F299A50498A244431515349D6809CBD7264EDC639E9DA492CA487030024D933183C803444C39094B5B882801A87D1AF9E59AC394A711E7A40F2FABC0C3B74E72551F450497F21849F5820A70246676ACEB3AA9848C980129574C86BB8BCF496218113E4372A950327F4A77A52C648171B36D4EACA63CA0B3C196F7FAA0B7AB982BE3126419899EC2618EA04A36C452555674D2AE214D20A11837A8FC80B8BF1A3050CE559CBA35FB6B0C8942761B57A0765536E44219955E33D26F32FF07B6DD9E11251695CEED594D388440A5950A55583B760363B6C17622A5DBE97A41E8177373056E999643173C453B445E3A1438C39AE21A36268B4CD71E3351AEB3AE0451A764274E9A24120635F84E345AAA2403A7885CEAB56E2795D56C29291500A09FB55B5F938095392B3D3125C556E7DEC08E295234B784C9B7A54C87C6A1810097494A2CDDA5848483C7DC120AC787C7B8C1DB2DA39EBD7509C02A7D9CC644129586FB66E4E6C2F8219A6489C02FB4B7A2A04B2427113039A24F35C8B97EA3860051A05F4132F6699D5777CBCE9253AC1B085E306189575E853CEED6423566943CA193414C47D3A55A05EC37ED38C4225EA35B9F17C5DB84D4045CC4C520C84E3338331CDB0E10251E2679ADABC8F41BAA1DA8A1908BEB2544740B92693BAA1B5FC6498280B694414A341284447C4D0606167B44B04AB5E5CCC45DEE39EFBB105D2DA41A5B4AEC247CC863B4BA91AC74BE745F6E9568515CFE266945F715E0CE5B2A595B514F532527581D83BA0E1A76D800BC237550A84CAC77B24A05E5BA148282187067ABA0B7BD98A4B34214407C69920DBA6D13C5F0C604B5C3A14706485289A59FA13347D2954BF93C6D9A8422BEA42AE03B52C93B34E4B38F2A8802D9C097DE0018A0CB3455332897559772B3DE476518BD9438A8558AD02676C387EBBE696EAEA0CA8F99ECDB3AC426A3F1DF8175D7CBBE8F7019F5C0EFC73C131299A43E3A6BFC02FB481A67DE8AA8BE507CBF60C98712D8F500E86D0B76690922E5B6D191A2A70B09C6DC7AFDB689F20627A96B41C14F687A1580BC245700E719B96F3C1701792E33C62A3AB544D01B2A080844B274BC39B289557658A886AAF029DA770BA6502857F2929B2B60A530CC6FCB247672C85B312B80ACC83DB8A689137BAD832C8CDB55152B54120E16E07A9414D651BC74AC13637B7AEC71E78F6AEF2E45C28CA9FE2BAC911327DAF628312472B2746C9DBDB35A517A3A5F65D0378BAAA4B6CEDA515FD868AE96665F624A83F0AB36825C9ED0323A825AAD64BBCB479972967C1C5ACAA7B82C2DF629974C3643FDB417321A22BD4B87DE264CD63BBF5C3C1DC6B2F202CB2680239C7135CC2D2A50398615790BEC8D556F310C72363AAD22003037706AF2A0944151868AC623348508717AF8FA65B4C01521D769F5181B820C67BA7210D62F9AB48D111FBA402E8E40D984CCD817196BD9148AE5A751751B093B1622E8A5CCDCCBB7879C4D70A01CC84267CF5463667226911B06B548448B54A44959941B6C744F1308F029AD786210877619DDC45A92A5B9989A7B939185FCA1E2715CC29B59E2D2591A8BC51D51A214CBC28DDF249F81846516410E63788C24B1B3BFA4BD7C08D38A3202DC05EA24570DBB64A9053550A495B009B2BDB142B64829CB46CAE77770C5AE40149365B70A9C65A77C354673428D42F15704E2F33255C06887B844EBB6B1AC4C3A013FC7B84A396EC9270F21BBC54201C1785B2B779442454515AA0787FF942DD8A33261B3163E13FFD9242964626C4EA38178695C3D59577C1B69899CCFAB5CAD5BA8BBCBB0F0222C552B695EDC701956874622354979C0F1FD02CEE957487B16A6B73BACF59599C84A0371573576B9557D61D702C0541B5CD3C0008867328ACC94792704439377FF516581E0BA0CC9C64E3C0C9350858FE466405633C3CF515617B5E22572202BCA4854B0EE66876342B2F0F87397305A4B8BC0D62BBB4DC821C79B232654455E1F4AE163155440297B75B01ED11A5AB0A268AF54FBB8C6F0DD190CBB78A85CB055DAC95AA893700C504CE7431CCD7331A251D0BFC0C2DA5BC5DF6407AD41E7610C165255452AC9DF79108AD48A7825ACB0A1B6A9133C02AC173458243528278411392C10A83B82744E826B444005D1A61AAC8F829CEDC4419DCB740F07FC7068FE513A00B1684847501D94411BDD715BB004AAB084BAA5B369FBC4D5289B17E3079E362944A498DB9A5544CC23BAB662C28390102BAAC6EE3C1010C8D18865C1548C18852A22D52325D752EDBB65DA1E61C62F95BB2633A9F1275693CB8F3A8CCC5D7425EC50389725C934B5A1AA3324646247C3255AC452C917B54CAE39EABBBC26A0143457957D7098F1C47B089C76D402A04B4001E4A4078C0F0CAEE6CC2E92960FF39BE90C14C45E25CBE948BB68B35EA406EFC462757D5A7D229BE9B5924087A7FDB042D4DB7962F359A4FBA01C60079157ACCE06B9779F2AF475B1E56C3A144B123EBD2B128A00CA10242748057E4B7976B68B12F4482BAE48665F3B0E9AB06AC8431B074BA790A388AEB12E2495E147B2C68A961B080B81C74B546E62D0D9355AC4C59717662DC74B620A75C7FC24B3A932AAED2BE1A4A74F250118508636BC0327455285876167ACA92C57683BB868AEAD9B789986B9BC4BE3F2C0B63C39C1A62223DE202C01A62B48172C3C461E90065138B8EDBB24A640216F5EC8D3E617F4951A09C25263E60C4BCA69688D7491CF394AEDCC814B746946396416B29A2A2C683BA1DD6E9606114BC3E0C9E0BB5A020A1771A2B7CED7A1CDFE6B4E264BE6126A30A27A4351659A827C84EDC1877023F66660AA4229B613C658D450928D10721D596A3B7A4BBCA221CA206F5250DA82B2CFF0B79BE386456746A98F37544EB67D8B291B0E862EEA231A6D048D7A737201111080979BED52BE8FCCE9BEB993D5B49EAE1B70C45593BD1381E4267BEA05B6ABD9865A8046FC716F9E7C14D6933048E1419D0D16C27E38D1D8908FF60CF2E2F8DEA3AE8653BCB9935DF628B9A6072360BB5CAC4E5971670CAF4E19AD3D7758AAC6671A36120298D71E16ABB51CABA153F9FF216BD99165F51467DD36703DD", + "c": "3EE66A1955100C98B610E6A4A18A9EEB852427CBEC4AE60539AC8553AB512D70281FE78763837C36D991B4391E67B299864CE3D10DCE75F4831DEF03E4C34C2B8EF7054DAA12C8DE0E61E67325FAC1CDBAA3108635F620F203BC0424F605E435CBC879803628DB6F4B7033097FCCA11E1AE5398C805C7C6B2F19B1ED00601F4F66B72BDB41047532225C3FAF52A64FC0D095BABAA4FA60740D96C0E0C17BBAE6B53447BDF35DEBB477E0A5FF14370F3A53441AC1E7A9B33CEC34FF41961D0C48AD86B0FAB158228A0CCA2E10639761AD8A7172AAF4469FC35FAEAD99CE8A564CB8588C4A9A177A22684FC90B0B90A0EE5F40565E2CC557092BA6770E698C2709D00E1D593F97D80CFD586BF003F2FBB1098C20D209E150389A686A00D481F976F8F38515E31C43A94936F56C4E424FF283B09E50462A550F1619DFB56EE1622DEAE4D867813DA2B057FE08A3BBEB95635186EBD38CC644327B9AD4114F88D1CD8FAE5623DE5BE95650BF56310FF9AE99032A0968EBF61B3EB51ECB3A307FDDEC5BFB4D977A82DB57FF7B2EF680124A51A6B9F9650AA0D2D64D65DF7D2FA0D10E7B6260DAAA9FEBE23975F3C8D80A90F429F64CE08593183BDA4560B81F0C14882FBD4EAD6B74E716CA829B282E516170A71A50279FE8F77656819186E2F0E4BB87CE237DD8959EA5114098480C0183616D23503C4E2775B5133A773351417AA8EF3B7176D16B2BAED0F11716C098F88DA261596436AE6DB4A8A02D0858EE0DD7B8399947C084CBA0177633BCE810557ADCEA9FB33B767E859AE90435634EA45165C190DCBC073BAA44CF653E7A1F28C9ECDCE96A5234C46A61CFEFF9032214FF5B95FAC29175F5E341218A32FE3E9580F48F38A0A73173502AF970164617EF8D8BFE74375E2E370A96C1202F7C57D91AA0392E84165BFF96DBBEC4938503C7FF072226E171DA842C09259F04D2BB7BFE9B8C575D7348756D808F66C7BA7349ECB01D771C035B49EFA010E4ED3461D33191FD66BCDF5B703D87B0EA284AA5B6C3376ABB8474410ADDC2451C2869914626087DFCCFCB934CAC02125E380F2C164089BD7965A23CC362CC5B91B8BEDB4D5DBDB704211DCAB31A2DD3C9AC507A28B6C4341E35746CB857F60B42FE80DE5DFE3B98BC9E5AF2269A4E411FB87B5BE6CCFCA65B05605A0AED7BD320A7C63C073308EAACFA0C9EF41B23FC76905C1DE314CF333D48A7D31BEB2B6077F75BA41FA1BE8066B099EB68BA343C2C7388E834BAA13300F1B732558B9F2A61B565459BF3EA4EB012F081F6EF5293E3F02F1B00582B2F1FB1F9F7618C1D712D39CBB391AEB20A17DBE1F7EF6D1124FAF725BE1B62BDDC3C213A88A882CEDE31E89F91E9728CD0040832592AA148FCF74474382DCE42C07D6884C4F806F1D67A1048B4450EC80D129375FB54115F27800E157F998E8C72D6E94C114A23A78DABAE57DDF13A478050F01406471B94CDBEB68F993CEDFCAF946F50968210E08BF3F28A6D5686B4421F0B463CA41BA6FB76045BB406B6A53111B85107278AC03B6090457953F3B28E7E31B9815AF5CF25C708ABB577A7A590CCE4CCCE086F6D29344A6B8144505AFE76275FD074916DAC0ED888213D99C8904BFFACC546F6222B3D9F7ECC811253389E814170AA372E90FC90BDFD52502BBD46237B7DBE9327EC23EC71A510D1DE47CDAC0EFC8C0F0F9DA84C6C3E03C075467C3CA1ACDDF997C940A21D2DF516CA8275580351826936454D35CA0EFAE86E6CFEE66F97035592D567E63B176D7A7C96B3881381E5F5195ABA9658C935A7FF2CB2E7CC7F2F9C1C60A4CD1C8EDFA55F6ED1FECCCA088BCC75D7C5AC42FEF26DDE63E3CF5B00409EE80CAD5AB8544757D2F1CF59207451FD8366509B620D5C14ADB500BB54B0BB8EFBA5BA4A47AA1CF7C588EAD5939BAA825D1C45519BB15935CB901177770D1C4A6D1CE11DF7037452D95C64F744690B9831985EE63FD73C73EE20EABBF349798F267ACA6A852D3FA6B108E774106D48F465D3A739554E8BEFE9BC2CE1BDFB90755482DBA8461F72F7BE1180927DD7FD8D8DCBB23AC488FF171524C0948302F81D542FEC3451E056B14D81D81EE2300133B2616823A99E42E34FE319C644D8976EA832A73951FF6528EC42B0B6960F88C384A0B85D3030ABC5FC38DF8F0D2D1E77811E8E6A4B14E8B6DF3BDE605E7B241525D5E8A5A0CF93" + }, + { + "tcId": 103, + "dk": "CBC478372B69E289C9BDD753A9A636F490B4732564D70A15D169A4961950D618210A156DB9F89F41D230668619114C92EF53AC54CB5424984CC8ABBB6E6BAF6304A67BA997E819208194CAC23B53CEB2BB41873352326FC2B4A405471B43A646E4A1924734151EE85A68C4B65C396666985205222D212B452BA3ADACF8454A42858D4690ED4A3ABC19A9F381B21A551CE4804664F644111151444C156CA1A87C6C0F9E6281F22ABB93AB32EFC77996302DA905386BA362EC709A130A1811EC8B88C4CC7D168AC0F2A24C5276BEFC1E3766CA27EA3134A55FD3B3C87CFA197F406FE14864DC628227E40A8A10B89482C7F90B008DC011523881992482F7AB2C35952BE82A0E3741CD637003FC66811F944C24207FC0684F2A39B0A8EC73EF3A3FFEB6BD4512B27362AEE5371D9107295534BFF4DC461351097B8B877114CF9C9933E27CA51F842EB81A8EA981597FB0C2EA17288B75734294302355CAF75BC9F093727DB629ADF87DEE8AA54BCC97940652A8449F5FFC2A65F031624A239B250256A7468884600B270C444362BF3569DC49146C7072E9636F4A7639626ACF3CECB796025B51959078115ABB9B8DCC469DA4C00978AC5DE418A0ADFA0FC8281324DB8472C44EC6A053A86B5EB8430BC6ABBDC8EA5099F000F24B62571C996506C3DEE1339E6CB6F968072829A99AD60733898800200E32AA5CE2F926990C1B120C3A149814C03B76759275FDB631B293A5D51A0BE2CC8B8AC513A9B950B185526A35CFDF44077B138F8FA86D5E935F0CE548041A516963C47DF6CB8A9A1D065AAD6C48CA2CC1B206375A2001071F699CE1E505C13BB589D150FE43433812B3812C50AD9956332793CC972C89DC7F376C95DBFB53F4490375B947C8E362B872327CB46F14524D65503B53E6219E3998B7F59F0259C8BA121A0AB51533389504E5227D89BF3DC71DD2BC2E105269F66111B0F15D46647DBBA27A90D2A182089B06C65FE24B5D275759215270233A74E4C455676A2A7E8C51F5170208122EB5C9714C3C23F0B88BC522B533294058CB82FB3C3272E17B3E28133EC2698E941932D66B057798E80517922016C31649328551F32A938E791650B4C34C54A5C2B295BFC67F371C84F46197890B1510BC0DB5AB17710642255C8980DAC599105A0FF848E08C629FD8935372C17AAC8469492CA27970B5C603E9191A8A172EA8A9993C5990C7129059E0248A1C178687900A797AC83406B9F95213E606CA3A8880C3273F960447BC00CA14473FF4A4E637AA0F638BD2EA502F04BA71D12AD3E8445730733F983F9BD17FF7E77B82CBB4E4FBA4766A779E50BF53AA0C9F1986CF1090331177E84A367F455081EA1E2BC96650D81B9C09B8055074F364CF7BB62A78CBC92F80A00D10CBFCA093CC57C3DA963025BC819C2CB09D33331A2B2612658E813875C6D33984B6806269B5167B7864D56CD1255B05122E17C1CB687C3164010B5ED81C7F803085469DB5B3CC0AB431CD28378A5B9BB411280627A9638C1D57F2675A6815D5934FF93B9FD347AC50EBC8D1DB723ADC9C0781033E805B663004C3143D859411AD2C23D9089248A7B000472B2D08988F61056D038272BB2215D05ABB459F0137BEDC916511D3C3A3694C3F2068F2508B44F5857D814522528AFD01CD5A26C58A3118841A80C8D649D6AAA64842676CE3C9E1072299A948C5B4C807370C9AC24E4113927D584F8EA9227ADAB5DD651A9FD237E124B9DB3B2A08315F22A954FD46B374847C465CB7DDA931BB400C66FAB97EC1355B213B03DC74D8193594B4A33F3000B8273A5F8077FCD5299F778305C4A8D0548C4EC50D31FB0CB1758BDB7B572C5913A1D4ADA94A8925D089B7CC38CCC4817CA7894E25012D897EB59276C92B9859569793B93829472FBBD317A8DB928D77C2B9A34CA31B6A3A919F9581050421030FF50D2F970E5E491EE3D9558F5847B0201CD3FA524A7B049126833AF67929CA1B3C4A145C664747A1627E40B3DD6247BD4A6595CB571405907699474D2C63080023E59888A3E5736495C8A75C8E3BFBB35787625323A583E322DA43ABA975B0B468733C6AB5B9D6148AC61245A9C1D2B880425CCDC0EB8BE4D763688B7059D404E0CC7A60FC2881EA38D19AC98A4103EBD7422C91AA1EE516CEE398B5947AC486A788C55C95633FFFC33923A051F883B68E144C1392896D065D748406C4AB71C09102730C6BAAECCB0D249CA0935A9C936233B27F941A4F1DA291B56B02629B2FF7094595962AA9BA4172578F650750A11305C7C390837A5C48A5B892962C30A38DCF1947E343CDE8E314F5816AE6E70125C2BB400BC426617954AA4437799E6EBA8605843776A4755A313C88F176B924C71FC993AFF95A0AA266813169540064AF119BC26A9074D3B6B874113A56044AE76E644A0AC7E4045A8965A4A1103011865DC153D008833C665A5B4A490068C02E979E8A4B18A43BA283B8B13A190585CC5D2F2BC9423BC1C51C0EC6344A8A675D646874E5D01B994A52834208876A2F3B2C09BB0B4D4401956208D0DB5275146305CC851BBAC31C40B5C59406251715A50C6BAAFD21A7E80C4AA90BC6708C491C3161BDB955289172E3249F81402FF9C53BBBF3A1C1C7A678F508B9789A290943FEAC2B093A3733874DA8BB00E5F81B3BF30B216B915D78A689C726CC9629B0A83987275FF065923B7060E94161E42A46D194679D6790ADA04759405D8D0A5442B1194F364969EC321BA4907AB442225A5393A3CCCD020E63184091D53DB0A21C55D6086A45939DB4A4F23C9382B2A91068662B818EB7924013141DF94947492B2BA4771D490AC210C2805445C40D5B526452349FC984C67B73D013AD3869C7570C7A160030979B6E0A293B5CB2082924865263762FB16B3F3BBE482B53DA585AB325A3E6B130D7AC337EA7AFB6502B8AB61DB9E7BCE3343708FA62F9B8C3C306AC4811A0B1B4BE853577D3382F86534192B22EFC8B6A41498670067B8D2A4A6B627610272E3C6488FB198EDD1C7300E46CA18C652F8799C2CB2D7424C1540C81A12463B16895D66B4268E03ECDDC0EF648C12434A8B8D8C580ACCD43BC979060CC14BC40514266723B7B7284A5BDB6B6F1994CD1938958B61147FB1856967EDB406D9137525FFC198D520E8706185484707CAA82B6A0A1D7C40AD0AB8198F8AFD530A398042606ECBDC380988B554B1E2C0DD4490E3DC6310F20C0D7B866A4D3439604CF695361A0002A9DE95818E50A1D614472A43559A167ACA2C75DEB0AE7082BD76373CA697E538B26B5E36BE69C6905DB5902A60EC3FA846D3A7ADEAB415766176F91316E3CCE0A03B29CBA0A1E93387299B4DD9C6281628944914B6C388046EB5199618FAC9034F38283B111CB9964CBD1A071734140BE6B4256E280418867357111D477A14313502C8719B8584385050E2735AE8E6371EF96C135F5A89FA44D71706E15441ED5C316098CB00F37174586418D340BCCF8731F33A22008C059D7289A42B4278C5499FB60AFFA58B30B7D28D72EE0433E8D6A9E5D8612271399DA7522E84187104317A13BC58DB2CB768059CEC5A0C8586A0FE0867A691F5EDAA65BC19B0A6C7F6E8247B455ADE334184A287FE8E6C9F62516400B86D1528BD13C419E80B8367CAAA7F6961B729FFA64A244D0BA2EBAAC5C291B0B745073569E6A85316B0823F73C782A59964116CEEDA9758B800CFDF78544A312E898A7019A00C36C0B4E6576F3657363DB4461504CAB162D520073D511AB1E6A49C7D2B13AE60B5DF2014B2712C872311F57CF19548A42B65951782625A68A1DAC5A70049FCCD9822A971259D255F5BA3D1C66C18758C797107771559DBC729DFAE95548E8CB95EA18E2940FB2F191A8E191B515B9C7EB775E0B4AA0E745C73A49D03389FBCC95AC769AF0BA3792B92EC42BB320B53BD18CC15A86A97DA4C8C9A339F849712975B040D283853B753831C43F13B89655363D86535AE38A1B51001FEB0CD1B05938B287217232817B33A5908CA92CBE688516E23B452D2328ED4A95112ACB8A18A8E6440A16B2CC643A9391C38C521A73783B631DD1A15E4823CB6BB7ACD12E25113266C873CE5774451605D949B75C5A38D6BA275EE6CE84619BD6CB10F4964249F60C9C062A7A52BC15A188494C132DBC36A657363117C852E113733CC208089298D5A3211904E7AC1C501A51720985DD20CD50BB07F3CC933444A79205C05FD22D1A533CFBB11D75039C17820F167A8417D029ED1BA46F086A4E39C9BEE7084D71B636F3B62AFAA64F32A0EA519CABB3519867107EA9829A245800F2A8A7278CF2E52001C63AA8E872961966FD63FF1C1284A2EC73E91DD388D5112F94F0778187C118A2B197BEA6091E1C84EC506C2DBA85F06A3C883B351B68C1F88DD22A5B8D715A31FA076D75A0A5B9CF72985A33022D52E1E6E48F9BEE0BF8BFFB7CA184579815CF8198", + "c": "879871CFD21BB57F46B6E96AF4ED88C8A5BCC36DE10D9ECFF4C43A37366092ECCA6298379E97EA3BDA1C7E2ECAD560DCD56D1C9F1E5808888D72E78CE3968F7BCD883B73AF503A4967ED7BB2158B74ADEACB327120603E8DC121C51401D61971ED85BB1EAE35A0584C9FB7BE6FBB357F36BCBD14C3979C759D4C05DCD122CE431078D067A371CB41B54A42BFB9B74556E778B4BEBFEDCF8685D848EE1A22EA758CAD402E1FD8E33D8F3726849006113F08B33A51BE65C9094EA3D1FB52E1E71BABA047F0A114DC50626689440F8303BF1A9CF1DED1C6451492D11A76F6BD438477960AB7FF2CC0673B38BA04C69973E881030CC41DFD994CFFC4CA86E0E7CE7817EB100D2637BA1DC4D54531D2AD989519401D7F776B2EB5F16430F361D93D91E1D70F376E1AE319BFABCD5785485462F39EA65D0C49E856CD7A1FA3A6143C38DDF47754717085040C1F64F6C38310549E64944B500070A478BBE6228B7AD282D408C5C759DEC7CE78FE2FFD4B721382465FF1C033C7103143922EC00FD7D2A65DDA8A1DC77E7FBC3DBC2366734085BCA80305B6BFEC5D439E4517778EAD5416A78B852816CBA245EC9BF58641BFD29A9C54FD23A37FF3F767F6B6DC4A9A63F30F9B198CF8BEAD29BF319C01096DC506EA53C21B5E8688BC4C5FC75D5D3AA3AC29C98D5C56EA8C31E90A746C6CCCF729FA8D65376D53A469D1D279861256C96233E47413F3FAC263AF542FF6CA0B82DAA2FB9362692E8BF7C135EB0709022B58513B93AE33F254D7D19667DCA97F3F015EE2D96E64C89D2F45432DDE0708533096BB6EC2E1C8F06376A86F8DA121351DAB44B3B226731520F1A7E709755F3B531CDA072B110FAB7B1D148C13113BD0457AD77CD7FADF74A437A393AFA3C93AA66E0A0A76C0019C0FCEAAB85641EC7AA05A847AFBE74F01DC686D48291E69F98DE6A1EAF56F3452C4F70D62298CC234C5F700BBE190951DADA8DBF725CB44F50394A0D3717778E0DCE7FD72FE26685236D04FC8E9EEB0EA90365D181AE90B7D0A7560DD0B00E1BD55F9F4FCEF3AB393A2AE2A13345588CA6CBAF9A30FA58E3725844F38980D689D1495D159ED5A9C4F557A728E016B87816F40CD22789784859F1FDC39FA30BA72D25B1A14E74AE35F6D52F05745E92EF64ED980F3655473B5CE84491E791A9490CD995493E9E79D9F2EAD20FD204EB67218786161D5F7E5090523FA861817377F013A131A51B3DB0FCC6A845D340E86C7B686A47EE7503A552E0FB0100A6C3DA1CFED6F8EAE04A67C479415649560289C2010B223A107A27DA2F0546EFDE378FD5503912034F6ABDBBC966A47F28A9FFBE7FFDCDB2EDFA19F4639E2FF9C1F4E448F94A8A246AAA17EA9E641E194F53AC24EE125DDF34C759DF5B057423551D3CFB9A1D7B803306E1187CD50E81B1CC4B2AAD0D753CC6319A53DA37AFD47066AA8BDE900632FD7AAB9D93B67A6589DDD14FA7B048CF5022EA51516F9D258671BF578D2E2ECBE5D46BCC165C19ACD3D17E1C923DE1F926E56DD433D861CA64D1F9F622595C42DA1A9880192125308B9A0182C068F218B8E266EEC3AA506D5D85782D6394A9A40F10C3F55B5BE3E13C6FB0B7F5BABD078632C7689F4A49A523CD1B5792F0D5BFF8CB4ABF559220788E560DBBA3C30606EAD7F11B77B5C596CAAEEB28EEEB3C6B92B077C7688229B4394F7F297F1D084BB20D600075727BCB41741580F6FFB832CAC1A91558FA6BE5BC30052AFAAB00399B67897F8208F3FD4D7D8CCDEE652612BFC8CAF4D8C9D9DA35205F599317B35E5BC41070F4E228AA1C3294EC7A2911E02190F2B6697AD05D71208794003B414C96F671350C9DB52842F20E36372646F58B02E0517035157E1C389EAA2801AA8F3B749FE6C98051EC218247071EDE5903C55627424BD4AD546135BA7BD013AA38EA8490C0CE849CB2C5F38F11306894D64419E1B3DC4E2B6B267BF10875224D7EAA7F01DB4A02CCA953282178CB1FADDBB889869BD5CA9A188BE9C01303545E11AFC47B304B175FAB76AEC5091E6C6F5C65BC90B9DC7C6F853285CE436C2AC703928D41B08BFC7B89FC4EF2C39570877A7D7E25E762CCCD09E79DD16EBBD1A50C9021931F9D84153080E8EFCA7E2EC9A8E0CA7344DB6EA1C776F996F65C232F0E6C0F0D612E40C3873456385282080D6F4DEFAE7B82C75B6826A8A9AA68E1983F7D9FEA5CF" + }, + { + "tcId": 104, + "dk": "1AC53F5F7319C8334FBF791AE9E21F339C1304A9AAA8709141BB7E1603CFB4A4C09834523CA12E5A2797B19406916B57D2309BDB023C1F650CA4CA976E3B09F4848D2D710B44EB646153898A089BC168238D6B4E3FA73FDA088DB3B9A8CCC39A5CAA646DC97FA5DCC2A8C3276B508FE5FB9931D3B6FAF35569543592AB3AEEEB614A9A4AD6B691F22530B3660C1DCA99EBCB498BFC7119A3652E9836D7440E496591C8F7BFD196643DAC4DF0F247E9AA492D23BCF8EA2774E55270919F9A15242D2762A4882F056BC5046C265BAB1031B2004B514FBB389E16C7CF6FF03E41B8674DD4847C56B5D1E9132E78BDEB84B656A9544D1B965FB739EB467810736F3A519FCDA8411BC5805FF89350C56E97BA5B2F3124567087D9C7C2C00C71898445FD15321AA7341AE70623688237931717AAA443441EF7A01DB4E29055C73D8B9526C2204B20309E7CEC507C70A15C6B028628A79735479F5B25AA08AF98615A0F4637A109B4F3C19FF0C135FB172117397FAA03CA3058CF3FF52A0C9859807131FC27C787C31AC38ACB2F470075C9746474816B8C557EB1937DEAB8D1275FB86232CF837CE7A36274435B90070BE53A02B1658E97E66D148191AF60501F1C168D31A456822951289BEC795F9497428F5552F7F95B83CB687149237B0542A8A445146B155DC062B9842A0A44BFB3304D77BC145F0B6B52576FC75AA46EB60E39593BAE35234BC91D80F2488C70670BD001A611399258CBFD247F6CAAB506AB8D64EB54C7230F86D81F25771D61F35331A421C01510A437A22FE642DF9CCC7B31C7A4196576059A83AB9C32538B171A7490011150E1CA628B1CE87AC4C99B7ADD073DDD1517004D77BA4563D55AA168F067C1EA47B673A75FFB664E443C01C1CE340B4756549C84232497279A52A42D53B5AE6F377E063C2EFE6834476739D8972F74A9B4A23A8B864211A83C48378038D5954AB6D64B7191265F0B04910A74C68A4A03EC9768211A0FA5147E20CD4CA97403B634142A62867153422CAF996B967A6B3CCBF646D4B29EA55C1B845B27DEDC65240B846DBA68B36C1C9295587C7C7DEA8610F904AFCC85988A22302CC1B495717C5E661CD8478E05271C6A500DD0543F8AF1541CE25E648B23FDD9CD44174E53858371C4A8E6705E39441148230989C40D034B3764A054A62A50CD2965A3740264C0B9FD47B44BA0224CC44EE7B4257D9A04F5B01499606BC2566F692BB2592950049607009A7734710E15437B7E3A0658D928868112C1A637FDD4089D5BBCB460B939960DF06950B905CA79D3200021533F2B1E65F3B381F512847C1B24FBC141758EE72A35BAEB0648F00798F4A0BAE858C7B71198986C5BAB15C3D04198D18DA17C58294AC9ACC489F224173EE4B6491560EB877C512694A6E90A0F23731DA18A029000B12A2DC0193CC5976365BB4D383BBD36B7A938506019782F40F0839F3C2548E60A07175FDCA336B00A4FC7276D1A72504C222741F0BC8FB94402592018068CBDEA3589715ECCA77D86B7549DE72EBC9BC1FF6AA292B351041075DF6B4EB0A04CD6BB51F968989BA9339298551FE4467BC231312A5D79326BC267B6ED567FA405660910221C0343FBB36350B4CFC923514089408B974DA1F684D659C22769584C375E1465A7265C9208924E117957418254E50572F80AA58678CAB7CA4894F20D82088CF646B5C55C0280817371469C67B09BF67AC6E5BBB0BCEB626A057710D514ACE01298C37749B2A8F04B58D0F65F914A16B5108C7D44921130CE986690B5794414F6BD5C27C03DC96878185CF88415AC3260CF41378AF8A5E4E7C7F6392E7971671A5A3E0C5748741CB10A943F49C062DEC071538ACCF36A71D7D94A22860CF9AA223F6211481369A8CC6FD97C55B690860893B8C766172630A84DABAEE2D38B2F59834ADB7E1F189D42897107C9913EF53211BB5F660B2A63D89630199CD8C241801A87ADD373B00B134FC10162CB3B61B6C284F785650000ADFB60F3432653326ABD10060496A3CE629EE0D301FE1A8B4BA82E6692221E5ACD30351CCE7A6F65B04B1666A808E59C7B2325777C1DF6A0487B266E75280EBB01367EEC05194B5A71AAA28A65CC9687295F6A77B6D3B64BBC66BA11AF7D5CA764D4567FB039EFCC0AF43447A3E1C602043AE218AF1092A508077B6CC43EADDA1C508289CA850D8DE984672587E74743B9422C3CC21998E94BA98756C34A6536989F5255C98253981B710452456217CAC68294410EAC7F463B3316C5B701E5AC79590C9D260BE3AC67534A7E89CA3F96107D3D935DD5039A429B1F0D00C9072C623E554C94C688489B0D551311CE35379394CCAD552B59276B7FF831FB2C33B5443D29E82AD052C806952584C5BDCA3C2CE871441A80AB3BB994C9FCBA502A957D3B66668A43C1E5AD48F5677823311E4117DDA822E3E775EF0165C9277084743D89912F622CAC63438375E7412F9AAE2914B7FF2B38887BA03BEB56FDF18CF4C0486EDB00353636E6F44F6D4A4E4FAC097BE141A6FAB0A773872B747F32C51D9DE257021A36F358BA6377877322820BB497C8077535360AFF6C6460B71D913C77110987D04B1B36815A231AA62866205A0C4DFCEBA5C44797BE40A8427C842FB091BAABA8F62930FCCB73506810929939904105A62A46E7B2C0A09C73C0CA8D18F6C7DB7B20A67C6C0263B54FF07A0620C998F5CF8519ABA855085705C05109CBF653A919E47140168729926AF51C37FA195060B9525C900A80B55E850598E2B5120539105E60424DB93DD0B281BF59CD627984564A48AA61CC9EFBB98AC9342C042BAE6AA49494816CC1B2E2A5A4D250A92EDB9593754CF9792C8187997C6C5DBD957BC44BAD6D21A3A3D97C16A47B677B50116313081481DFD209D7A2B63DD011F0058E4F3824F08C003E76486301C97A63522CB783C49B62FF54C746CB9DC8DCB7F7E83D6E4B88E1450A2332379A0999F5E0B93DCBA630C4A724468F61A44A627C4A99BB5B95F1603171C0703980C2607F246A2C2DB7BAD66CA27C016E1806CCC79B826054BA0F363DD0A77EAB499EF6924CE384A072CB55BE166EBD60BF680B59773597A0B8B255230911C50F160798BC0980CB7393876038F69C3358B44AD3356FF380A70193B7D10C990683CF62FC2E7EB176C2E4C365B1559CE72B03214B34DB183DBC9431AB3D41FA624A01C10E95C687D00CA994658A70CBFF83A60F057202CC61D5C659AAFC7C86021985E380E4E861517583BD71AE7A843A15586E51073FEEE8CB627B0F15130FE182B728020348F5692B84339FA1CCB7D1C85D3868943A0611B122A39AA3FB499784C8C1E3B7A64D2434B0B498320721AD0A0589CC13C89A178CD99105EA819BE904E1AC54DDB47F774CA02A514C513851A9A64E19560F9800C7C835C065D3C6FC59717F262089AACE51842F5E130041FC094D11310A79B872D63F0B58A3D0443008840E5807ABDEA0A5878C5EB0D87EA0330F27DB2470C9C511D56AB43C89E4EA14B46C229E9B2A22906C9FAC533782A632997F198854F2AABE65FCCD877165024358AD4C35B7F778B697B26D89B7F935184103C13B49AA74E7C388390340D77775F84C397645F6E863B28016052586CAF2740C491F4FE16368DB9D89120C7D1481AE647367200400FA4DACF99571E6085F59338D33753763577374C945DC9268998CD9F5BBADA64D67B201AB688DBCB34FC0C1AE05A8370BE00B4B07622A2A97EF661F8A937B5E014264B088374C91D54B72442A4DD50BA0849CA234178B8291A5E4926CAD4A9D9F966744D402CEC274CA84675A77049F822165309212926DE0E6C2D4808C502C94E0AA4851A022C72AA2E467B1298C8121A0C2D6E5BF21837B7FC45357E35580270E6FE9BF2B60553FDA4E838591F1F12DD2C64A6513B78469AEEAB29FAC8504B321855E29715DCA95BAA383B8A1B6A4936DD0524E0B0A9E622881FCB9C7AB882D339CC9DDF1CFF29225A7021FFBB43617771D26109C5B487C2F3558A9A589A8361EC5B4638F5C56BBAA0469F8572BA4BB75F77A4FBCB212D65B5AA28A5B063C8768977678B28D988D8415BF8DD63033183E2D969572779540318909F66C236341C3A1017EE1319CC30815B00543641679A6A2FD3C537B1C3C16DACED7EBACD8C37E36DC420AFC3931346FB3CA0D65787754BCBF2EB4BFD98A8496E9972E747369FB59DAE9B00CEBCDE324684A6989DCE7B5C80099A164832C9778F5C773A9E45D3087733B7A5DE045A9D1463DC8E92A39577018A6BE587C3CEA792C18BB41A6C0A2EB3AB15639C5890C6B7B84B109F04E6EE86A22874AD4457BF85AF2EEA0003CD55F3A10A5B50EC333A6F81576E4E1BD9DEC94D3D2A9E1282695171AC1199A0987DB1E120B5C26CCA663D6EC78D83739F99F33B11714984027E634149D28457E74D8FB433BFEBE4C16D56DB37AA2CD0AA5BDC813A29BBDB030", + "c": "90B7081362EDEC1698E74A36B8C07D7ED6FFE24FAC57A934EFEEC0080B617FB1FAA5A5C7CB33BB6F7D4539864EBEF1F43ED61C2FFF6512D587E0F2D185387B6A924260F45F28D3374FF4AD5090FD3E167153FA0631C84F2EF94138ED56EB606924EE50A5329C7533D56297C0AC3E67C4D03780B378B4C52AC377624D6BFB7A6BC8C4DED581CC6499B4879B2D2AA977AC9113A2AF99A4160A07BA9FC5A93EB8CD8FB242C7B00B462C696699275F70A9290D39914A1C28612161B6AC4AFED3428177789B52096E856CF28C96AF1E8DE8D6A014F14F2B6582BBB4BE5FF80F2B9E141E9D66ED203BCA9DE0CCEDC8AF0B45D602888A4A8B8568DA93C7BC532E2BBCC47E69CEE55E8E127ECEB7463A715190DDAE48853CD25F1FAA72EDAD7D8035F6DCDCC69003A421E009C194A92F7DED987728B425E2C883641E0695DD6E32BD95ED774C586B94F2A4E8E9E66CA9CEB8E71A8E126219A397E80C1039CF52A5F914D1D9DE1AE2C486ED7FE94DB84BF27ABAFB39980321D80DF7E9C7AA6FB4F4FBFFF14902A267A25FCD6EE96B6F377EB07D593C436C725FE2E587BF786B4C29247889910A3FEF19D8A2448C54D1C2720ADE7317A5406094AA9144A25B847FD1569CE8A40D31DEF65229CF0CCA5C3CC4F58BE14A97F35FD35C07687D76CECBF76D11DDE5896C9AA447F3229361863FC9E8CD2258765A00567CC696073EB66F0583341E1337F4DE2FBD46904D0812522965352191E7854A2CB2E7B8D0C2F37792A11AA86DE8F8428FD8D6AFD8285F117F653C80170C202E1D4E1FC71093FB4E21F84090FF40E9A1F7D2A314212F95F8C68E024B37B34FA1317ED134CAC60B756673BFD39E3E19CE9858B7663BD10E98D72F1868A40FB4D7965AE84E6B5AF3E7A856B2494E4FBC2547ECF915C3023467A4192EB9D86331A26610184B9E32B5F4FA0AAD84FF97E748889BCDD97C82AEFE87A2803808457E42D36F7B1DDD9CE83C7A6D758CC4A5F726D4A060B0CDD67F5B2DBD427E7509F1FF6AE1C08220EFEFE3C9803AC905BD9937D5E3C16DDBFA7E5F966FABA8932A8B3A39BB439F8D61A0DBD9BDEF86E7E00159DE66FD6BD279CAADD0904DEA27848454D924CFF42C73C05A09BDDC6697F561F2B7504E686A4BAE4421CB7535301B9E3D456FCA5E1DEF138B2D43C1F62B94EE0949F00B00A63C2FF9888CC3FC5D97571B42F39C5514647F7A64FD903424999FE861238A27F8162D98E24F158248E2366F7B79EA4CF22194AA33B6687C2760E24F506885D12C6977D644F65870BC972C06E7EF025F92934F8C436AC8C9816CDBF94F884F7CA4C77AB19AC75C97D1A39E4D8CD417577F3AD8844509E4099AC275172004ADABB12E11AF71C30DF76685FD269018091B3867C2EC2A2F1D2B094EDFE505D5DE0F7900D5C66E3E7280D608820522E19BCA736E6F719545B201270BD05D5E46B5886F8F7E488F65298E5120699585CD197955E8C2E7186E544E3C7D87A4F40192A91E49565D3C790FAC7E11D3A9723E5409C71154F6C41E62550C1DA3F025E78952569FEB4FBB9AD037E8BC7F7684379033EEB33BD8DF5C176675D0450C0D4D766E8FFB8D7061E2B28F2B63BBA5103CAD764754447497A7F96836187A74766290B5F10D3651BF2E7D0116C58324A5B8DA2E133D3C364AFD3BA9F7045935B200EF44C01BBC43C4DDF0D701517B9AA945F83068BEF1C8871D2C6FDEB3A8EFEE456BE79F2F7D87CDE8A274D43AC05F7EB44604DDF92C7263E32CFEF4FF8B249E0672B0B8A329C3ADAC1F21F77C389B011DA787E8ACFD321F9E2D3F8B81B38BBC2D69BD7921084CC9D3C51D4D44BC0B144A5766132BD612A54DF11555080FA1AF8AEB009F2A55EAB6565DCBDA7B046A02EC586CADDD4F3879CA2F7B50C8431E4E5F86A9C350ADED9D44C2BF663802E67EE48869780EC91B77CAEDBA71AC209523605FB4B3F830C2A12B5C80987025FD39805489378DF80E5422735C3F941D406CAE4DB8265E610F29AD221E7EB32CDF476F5DBA489ADF8B064B1A8CFC1707696C4ACD464C730520CA605F936EE47A671E1CD9D023853EC5AB9E354CC189D3B06F2EA227B5BC2BE6E87041519438C1555F57F8891B834B144006DCBF8FD244894CE5CC98E7BBDB9A8F3F6ABD19467AEBF16D1177DC5C2ADA47CD713A5117F00901F3B463F0DAF549575DCE610977538CCB616C9C10176DF3B89BF948" + }, + { + "tcId": 105, + "dk": "A8E9AC28865FB8B9B659A12B1FDB2A83141FF1E09DF513B835350B76D5A43AAC54500A56E42215E8A88F14F69EC1287671868D88F1BB8C9381D23C157798C62EAB48AE92694F5577984A774E6962C0717C6604B2CBD4502C627E3807AC56B6A8C876B8847368276BC19CEA8CC7E13FB479A3379959C0FC3126CA565175B2D7909C46966235866A8BE4BBF8636661CC10A7D28780A571DB9B7C82576C7901AB93F4889147CB144B546EE539A213071168BAC92C6987D26DF09A518B442449989D02B54346E2614B9256B73248CEC04C63FC6B6DAC61D3B87A25D80398E2233D383113F2AB31053973277105D02E139029FB56AF9963BBA5AB4CA29A0669F0A6D3D3283F658AB015C86FC8AECFFC91954C6A75C266D7B38D243655D4801DF4385C818764850212EEA22A3B1725CC231128428A7C48854CD815C2752D4D883E3F150FE8F9164306C3E1F6273F460EF7C9856FB53EF248BEA8912C20E1575F26A6AC19444980A6CBD988125A7CF715037DB36B0B34349E93AAD519150D983DF402CA49A41AFDE60AD23C7E19E57235D71BE73C6E61D0328560121847CE0BF66F53C76BB39ABD8ACC6A003B9F163075F056A657FA1B3864066D3CABF2F722818879DF847D2E0401F102612A2192B6856EFBF9BF68033B934502539556EEB14518303078F0399AD777FF204E8D92BBA05ABB2C95C72441183ACCCFBD71952B43970BE492EE9B6ECD811092C800A01476BFF4152760C752231662BA90AC55C705965C8BF7477AA801614BC8ABA59BA2EABC5AB8B5DCEC9335E32C079B9B6AF03735B011F8249C23F6415D9190EA070BC34041B67592B5A0995F482E17357671D122E16134E3AC42CED6CF2DC186D556B59975AF80B958A2EB672214671183132FAC465A0456725999D81B0E27F4494514B7DB76CE1C307229F4C2063584A1B4C40D07551D560228C1174BBA14BA99200402597C319BB23434203935FA9C6CB3702AF6373452BB743033CDF08301EDEB770086735AD0050D870DAB338510A20F823032522C8E66120DEDFB9962C7C661944492C029F4E97DB9B8718E04B1186ACFE18B3685A0C8EB07B5EF30B01E8A1CBE732A948B7902111D74783F5244866611231FABC92D296D4ACC57A2F52CCDA33141868F0474B42A57507165176639C300CA59E4897CBDD824E1C78614537D57941B2F950480045A9593C4A7859DF3516784FB17FA741BC6506F5CCBCAABA4C9A9F49EAFF45B69E919154B62FA41AF0D9B11C9613342A63157C67E2D7052DD997E7419660F810C27732FBDC99E9840BB2DE1678DF795681CBF81B178D94333831A27E1225EDD75B330021CB9720ABD26B554C60226995E5E63C14C5C4E8916866D571C6CE7522253565EEA6CEB95ACE11514FD08A42A349237E835723588D568A8B2B1875FAA1A8B1891CFF081D269723806339342B724E0603A7407F4A55EA85355CB89077BA06653EAAE8FD640518026F91B74D6457FC97769897ABCC750C031A74FE9F48C94B06591554167C92624636F558710CDF64FABA2A165B56605011BC1FC9ACD4976CC4697CF21B0B76168C68227CFFACB291A23EB144B95A7694C434993D8996AF46C35788639B48A084500FA27675AF35966297871A76DFCB6A70DA1C44DB37117542DC42C0EDBD60C17DB62EA3AA06C554C1B3566399B77F9EA816E6C121CB827593B42C6A12AA8491F4AA59E8976ACADE8546CE0C690D6C013975E8F2B7A6E1020CF3659D750A7B271B8C2B17D14B07E420726B93B040B300B661A7FC6B8723F4A127FD8AD0BCABF23B03FAECA7997811E14609D34A17FC0D50ECC9A4A69DA30BA440A9990470E78B8CD077D33B36B3B9AC0FB9517E73A5E2A49C650C35C2D8A9E2B961B2DBA71C8E93558300FF09584D143B0CF213629C8A5D754C712F1BB12A06C813718B26C34B495A0FABB6BD434324DF11588DA9C29A84D1295CA7475AACA63C3ABD9064D4928580A9371D6B317E5B1274A5BBF25C600637CBA9C3F8E8A805B4A5FDB240588367987389F028625B66BBFA74ABC9016BBF9EC347ED9AFCBC4073599BE40B75D43653B5404156F083441E20C8DA408EBB27FA00AB1C476586D566DC20723FAA4657C2170D6CB66A0DB8380E314B0914978D97DF974B738719E715B842CF53CB4AA98F316456D425036E686687B92FA3B5D80A5A066452B762783B3D09744B819CB8BC7A97B26AA912B533A0492451940DCAEA9A410020C55FF0984B0819BBD54C1BAD61C0E456F81F81CC4F5B181666DF091CB478909C1946DBB998FC151B8666C9181D05247143E884464B70776FDB740516412A48321DB3588418B0F43B44C889C6950CA0C746BB9D22C22884664B65A7AD8D5403E6C5871155458A8619506163F125581351EAFFC5AF3107A153A1397B07E9E817CFABA9C5F654AC27C8244E30AF94A1351F2414DF40AD8E9A24CC46E16869F61B9014E4A6B030605151624BE8ABD40540D81E232AA48A861D680D6B3950511049CB80697F0131B15C25DA2408A64044DEC856F01C6B827695EEB4D0EBA9F9F309EDB20551E9B48F1B7899ED2764C265B63668AD8E877252B53CDDA125FA603AB3C5BE9286DCB88668DA5817761B65778A68280C817A4A22B782DDEF15D6B674E19B9882CC415BB9A18175906A77428780205C01C9876D338696B310F1A7B62DA0129C4BA58289357493865F935B2F005BFEAB570C46B59C0195FD82968B7B233E086E38B28BB6B5F67E4B20B224527309F68549A9E5167842C62AA805C3A5A0194277631D36197E32F3F480F5C7B4863B5889E795C1BA6252136C2EB7289EA2781363C220364CF66D2CC7D16AE58D14F21C3BD9199669BE6B903F677ADCB3DFFE22F40911011C6BD8AFA0EF1359A6B027640C327B4C859592071480A134FC06B2D024F209561EFBC2F0A0B65D649AE0DE82F3352C4698B2F4393882403827DFB9B9F25355FDC3E2A9863E68C8B3923A821113C86348FA20B356B69C35AE0A6AF432C14F70465AC8902F44CC5D50D0F3C95982758055924A8285B23345C400B7F517B27E1A79C1F8959D027A18C75B6AB8107201BCEB8EC7D11CA26A823074BA12A05399B132BAD09B16978C5BD2DDA2CD82B0AFDDAB5A2EB6A05F31EDD35820EC839B6524256778E10D666659932125681EDB1A534094890772977A993D409626D47A78E78873401B232CC30FCA10E4B4CC1A5015DF969B04B049BD1BB181B15A8FEE5A339D41F462322077B55CC17C70259954DA4CECE3942E0D2801C4A55E64607949165DAF575A15087A358AF023440C58930EEA06C59C74473B8A85840849AE51E68449BC1788C8343193989B96BE0924CE44239D180384286FB0841D99653C16A2AA2414A6E3815B0FC4A1DF34035B2A3D85AA4A725B945904125FC5EB2EC53F6393E10C9B78C35C658A27EF8E092D20C3F5435AE21C930D3B7512E9470CCE0C11FE0091922195906BAE7069F47F6726C48ACADA6B01DEA4C29F14422D367E0E216DCA511F4F2000B1A8E04103DA9D27224C6BF77682C347A47DAF525E5C6A8728A4FBC1078E2651BA3AA250AB63AEFF6CD2D3406EBC74BBA70894A651192B7A509A26B028786FF3623082626F00CAA3B55176A24299242CD8981A102757BB29B8179B7832E8716F3CA96928C43BEC91F8546A22AD325D665499C8A5EF126A6E238847EE328AF0177EC06C3CEC931EAD96E8883702421459F633842E39E9E51A8840289D2D5C4E4DC09966441FED735C0D174DD3B68B94A9CF23A6D4DB83D625AA04034B3409870F77B8BCB362CFF7891622B2FC3D90CA9CB8084B610B1A907F4D4B0BFE24D9D24C0A053C9194A3FCFF3ADCF956540022179576B44183062937C430886934BCB34734B79E13DCCA6B1967502A132BAEF88B9A972216F488E2508464C2C6A4BE333A3397D4C9792D9091788553464229151E52A2C2604C171C5FCE0AFA139C9CEF1B453835DF6472A4B400126EAC38E96B42452187FE1C62D8B177EB97ED2281FA8632B95A71199E896679B7512A9BF3D7714176BA9C87988653BA392004516829DF8351D15157C90716AA9ABC17BA86AFB4AAA77B154B9A1B9F18BA0E75C5C9EE97097A05E7AAA243E058D19174315CAB9737532DDC50E99730F53E239094786CF726380C8894236131609CC50B441AC0B6C60512FBDE19732796F9047BFAB401E56C097D23C3CE528CE851077ED6824514AAB11302087AA22C9D13DF0F2C57FFB916B46B1FF82304756CC376647B37A25C181863CB38F04415A661B33242482A579A19B1B1E4CE98D64040283172180D609DF323D64C99BE2220B6AC16D4CEC15B72C485A529CB821197101D439BA2DB6154E6E30579E754169857091D9D7FE45F6047794947B474ACB46790D527994365E95B582F5A89A0CC64CA298A6964F498921363C94A816B646E0CAA1B5BBB32A770713E5252E5E9398734EAE0CC99BF38927036FC44A", + "c": "CC3BCA4285451200842ACFFA022C8EC7514C489D68D995187A062E12A4432C3C51E5373A5E63BBC2BA6F197E086CACE11FAE53DC7836E8E9AC389B1F4DE175D82E5C6BDD2EB3650443EB873D23BB71209CAD3A42A1EAD2C571181C1FB18F3269C671A6CBC29EB058FFD64E1C2CCE1D6946B3ADCC66DF896B11D7DF980B76B5E12CC6AA2CBD1F5489FC7F116726659C8AA3724F6D673C68B18936D0F7801E416863192DF45CA25C9A380CD9A061F58E8AEE18041732CF05A2C7BCEE0349B2020FC3FD8F55FBD0BD5321D77E7206D70AE03604F6EE3102F5EB3C5B04F63A352CBD8FBE95C915C3E47166787ACF2E7B751E626C8CFB40EABFC462A6C90409FB5CFBB36267CCEADF34809CCA3D716A15CC8C359307EE4CBFF0541ADAA9E3A36B5530D1A7CF880F78F1B46A5537994949004867385EC2536C4B77BA016416BD851F67AF6B6F822F97A8D627C45F69609C9DAF066154F1F1A759923EE26D68F141128CC125A5A91F0DC0AA084C4873A34D382CA026B2DBFC414DB7FDBE54663F8D69F9DDD84271EA27E1344B5080287E9FEF2960407100C94678260CA2D6962C7FE448EBA813FFCA34BB441C895C9514BC3EAB1B08979789FEAE3FEDCCC214073DB018FB2575B0974B3D5ACA44AD519213390EBA67E3E9C3A0325C136FA0693314938CC4373F4B5C91609437EB9F621315122C8796CF8DFA74291CDBDC2D09821C0C9F107164FF3ED66C9D5BF3FCF70FB9360C3BC1FD42E689E034E585C640139B2729032FD048C98C8B2C8D63037BB12941D61395D42BD1CB51BE5FBF1B5B07E04C21E4A9A45FC41966943F8DCBEFF1B100DE3FCD0ED8BB97CD9FA8BCA29FF487A2F4AEDAAA51CD082F60F9D66D9D12DC1E7775CEA470BD2CE7ABE2CD99C43FF16A0EE680189EFBF288F131C657587566EA75D24E921B56DCD67307F281299EBF415B871A6880E7AF7ABC108E5CB431C0E605A5D2DD7DF87E82FA1B7C4957B7EB28C2A833F37B508D2B888FD71F381B6E3225AA95201C34EA2FFB38C6B1D055062F0CFD34F285DFF7C6DF08F7705E1980B45D0DAD3464CD337916E2ADD3890D53D7C9A23C1FB3B794302925A6A9C5BAE749EDC9704E7E68CC2E952F2AD1817DC55E4199923282E691077DFD6AC9CD1DFCEBEE3810923ECD9ED1A0D4339475569147476C2C1B28FC37419B621C6FFF17F169720F80882CFE80D112BA3C16AD634494D4D598D245C328BCED946FA0F8368AF188BE37B286535ACA9739105C19D71BC60FFE03D6F4C8FE71E1BB6BFC1596827E0179E41CC6E070A02711D2D867B66F0B95099F4B0C17CADED30E008AC718DA9E8D9B8977708BEC407C05C0CAA0518511F57C9DCB952D5222952BCF777BEA53F0B290988258AC692018620FF57D894380A68F4A88DFFE8424846920332F597E3D2B35460B3DFC19569B771C4ACC12D2A45E294618C1A59C6F05355B85F0AB955AAF7F504572B0D4DDA1CB60B5D6C5A092B1BD2DABA010280FFF02B816487C7E0739287041DA5C4B11B01DD780A5975474DA56EE69F4B58542E90654A5F7782CA17C6F406D58162C77B139DF5352D1EBB118FB4E356E8AB5BFB5ADB6FFAB48ADBEEF1E8FF1BC2BB8EAB82CD82D59AAF83DDD6695475A59A26AF2105D87B4AC18ADD0E5A498C39E7F6E34E4DC083B095C3B5604FDCBEB824A3F8343CB5C8DF7894E84D67D6CE16A9D1000B2A18833DA14ADF3A15BB73BCFDC44597F1FA4EC5CA715D7C2BCB49D9DE14620D61F964FCFF47491E5E1805E3CF1ACB15E15D7454080E52F2B23A4F41A1018167A1267769D7E8100AE7D646512B9400B56FBAF796CE680A0F2F46B55223566B3A89261D4D94986E22328F20E49488B454E222D55CB012D9A6D8E02B78ADFE41658DEA2F2FF55918C5DBB28B39593DDDC9EB307DC09BA62AAF25D85208AFF056793BE6DF2A0E4BDFEA4AAC979C492F51E26DA3C762E23A834AC38A401BD806C63E457DFAC59DE940069B22240BDE06DC04412CCE8B2B363292AB61EE3958DE4E11CBB4637D0F514A11261803B1F0EEAB36B3B238AEECCF5E0DA02C415BE7D598B9D142EAA087A63B125F80F5A7AE3B94A623666EB246DDFA5D41B238A51741F441DE8386A0B5C3A52455B424F2C72A9EC647F1D2EE9452EFF078AB1FB086ACCB8F41CB34B96A555A504F607BBDCA5B95353600A0584AB0BF4534C375AA377B564422A125912D17CA0" + } + ] + }, + { + "tgId": 7, + "testType": "VAL", + "parameterSet": "ML-KEM-512", + "function": "decapsulationKeyCheck", + "tests": [ + { + "tcId": 106, + "dk": "71600028C36DDC459CE75A45073804BDA058CF330AF6E850A479C67D91855F61A37E70B34D91B47D8673AE72B0EB71ABB120057EAC611C2623E05C5998654671434CE2B758BD8025F5B05FFCA3C40C9309804C5FED4BB5CCEBBD044328520A66C195AC23651BBD872F5DCB103317B71122B390150422449543D9741CE84CF0580D4F3B48409C3949F04D5F9C9845888C300690BB5B4658D6131CEA95788B7C5F9175680673F3BA84C823A9ED6592D940239D12928E4C18979747DF438AF90CA31488B211A00E8DA950C1D7929D5276EF7A46F5B98218FA69EC379D8D96AA42B0B10D8B6CB36C3A4D6A4B32FB40D4A18CE2FCAE589CCB06ABC944B8CF012C455D43CC55C053458124C5FC2A5E733975E139A96B45666A55E220C586D17D6E3B5B9F37531DE54F2FFCAF08545E8F60A129EACB2CE83B094BA63CA547B62291D1B1641CFBBB9DD97D93853E0552BF2BF55D6A2957B9A749DF85A5CEC34F0BBC762B0A3168C381E41251303C9330889E72985A80A77CC2C97CDA1B58E657318E72A58850343A175EADA90866B80EA24C769931033EB67121B46D073BCA67D1938CB28845A4081D3A73BCCBB76A51CDF606175395C22E9ACE68F81ECC5A6AF009B0CB8854EA96959011C2D359AD57A8A864B04A9D218F57D43582CAC78C184C77A080E55C93EEFC569462CA6D1C0A528C57DD960DAFA5BC89E3B9C2CC45264868A3D10A258089A8201E793A24B0185A5F9307CE76354F4218A78ACF13A4CB6F8510F4A25DC4C2A665B046C8586E22347A6D630EBD6965B7561903D37315657545D9606D7C25264B468DC9C1E273578F494E274C5B7CF39902CB1EE748A42DB49423728ABF136625165676E4BC5661158E72C9C11749258590B286A15180A998AA2B9C691554A5C74F29B7850AACA6C811F2C768F2502416D2360FBB32DBF24EA74C9123F7AB3557C793D215481400159B0F13DC2E0C493DC778567364416D8510C8117F240C3B14272C4CEA7FE2661F22370C2FE887B495BB0FA910EE99293DB57047D386943A02ADFA048344C91DC50C71F17FB647354CB60AF83724AE31036686C276867FEB187544AC116987C7ECA8710691C5776C0BA5C93B94129C5861872FCB02285101FBC124D4A01A638C6844D4BCB1CC88B19645BCA5B49183701602A411BA76E2411DFB389B2A06B26211ADE2C8B90097BE69E44ABDAC8C3E89B2D7B29391F887086297FA8AA79159799F71B1A801A8F809C068F8BF3672C8D767242E555888718E7FC8B848C00A15AAA0ACDC8EDD183EA4F593288A0146DA455A7A7690E4C7BFAA09530842F7836E69E3136522325E372387256B053664A0F97A82A1B382AA02BD459DBA985E4FFB9443A0B37BD35D64874D2E450F09076886227CFAC34EA6A83C9FF218C280773E15C53747A6DA280FACF70017FA96CA35C88C56CA6C3495547B41F36922DE1514990C0F091C11D432B576B7859017B3E52BC2CDA48CCF19A36A4B3915F96D3977AE008318FF5801F43685BFFA27A612B74B746891216DD276253DD7C030B080CD14A07519866CB292A7782AD06615CB35B677920F95A029B0CB35EF35CB5059976B31A931946723985E88AAB6966966690C2F88CA9C0BE9B91A53C594C545B3DB8D8C9038D60266C909111B77CEA5A0333B9474989126323C9DB379BB176468B1024562596D22C8B9F2EA17A9F7B7398A29571682A41B9135BA356B28653E1902BBDC98644CBC42F3AB00FB2340E0210FCC2FCE7694ECE985E0407249A5BE2D34A3EDAACA08E09D3F9118462AAB61E94055B73394DC13AE4BC8B863AD731A949B34864A8BA25DFBC28EA10FCCDAA200434C56F3B5FC3B175A59A15ED2CE342B3C5F103EAECA3A82B042A0716D6B2A2693318AC8F4C95B567B3572492942AEF292883E4472756031228A12B0325579539A56259B43461E99F8AF5731498A936EB4A366A4480ADCA54E711AABC01A6C6EC578251919AF44388DEA13A5A928A15C846721C1CD5C54670A9ABF561D126AC269F1337BA40F3AA04F5A110A92232DD718C45D3278D1416A9CFB701840A2EBB7A3142975F9C815E3E4CDD35AB1B4655F5AF85BBF7A5C4B702382CB91A7E572D3E8A0586B50868736F6590B1292195B2454F9E66A4D067F93354F72504BF8511B57E1A9116B2210A69165145BF3BE434C6D9CDC9296AACDB2C496BFF76F44EFA356801C0193ADF0EC2CA1B5B34CB72C9592BE2E446CD842470177ABEDA749CBD10BA22F341EEB08ED39F44DB25A035ED0794B8D4654239BA7FE9A9F84D02D4EF1AE3D1FD3744E" + }, + { + "tcId": 107, + "dk": "061792607B69E2D379A3582A714AA48AE8609C6BC3DF3A077AA63D62DC166712CBE7DB9097389EC9E7CCF734B0E34B3A58921D17489A132C579E130398199881179082A1893CF9982109BBE79CA03A90B71182C6FEDCA6F13C485E66A3C87808D66A48AFC30B2B63459040233CB70A7D336EB3B5CFFFF95C79EC269BD3BDC4F338A0F2BBFF5677AD8167118AA2265C2B74F5B801294540540BEB31B1304078FE7679AD78925D4BCD41090334AC81B7D53C3665939BE9846F670DF35389E130CB1563C62930427D720628C74BB488A25BD50F459023B781A8861935FC48093989A22D96B822ABB809D528184C1A2E290B8D2A27018642601758D773188EB0BB1986158EDA6681B867C8E20144247087946D1C93653650BE16B45C8A4C3F87E9C9A1EB046A56CAFDFC17E6B8AFE1D1C53CF31968746E47D1448410C60AEB215F9018B115AAA7E13599D3C273E29B15693CC89BC670B5C7B1466B650C0EF4F646DC3885FE77A0E2BA139028740693967A46489CF89759236D0470BF1A8401F09193E27882426C28FA4733D4F18DA3BB06FAEAAD79434B1D1932C90742E2C05D0E98BB521570AB7C202CB5BABCF277A8957DFCD5A7AFF39C4A646582A5648C46541FD88F7A493B88748B3BF535B63C302A0671026C0F34C15DFB7C7FFFA16E57315CED2B7AEAA91A8CDB92B4212490A4685BEC2A185882A039A78D2CCBC077A970653740D075D3225D1A5B169DE928C8A6697C99BE09982111F4058E91BC3F541662D2180EE24252AB11C9F670706077D78A1A886659AFA46D0CCA401EE08391D45C95C39268B75D5C575335D8BE8B80727DB154F187B836EC76D7004BDED5C77E82CA671982A2225F33A64F0570CA8D326B7940078A16C6C49B18E7056C89770C1D29867FD682CCC28296BAA9CF7270553464EFCA28D4161F395B43EFBC4F943323E3A12E519A59D7B31798930D4639AFFD6C8EA97AB1C42817885A3585687211146024F87E4D3A33B48A813A567953926179370AB3412227A74C5DA19DAFBC2E71F102D2784D486120D4860216778030F29EBFF043C373C5D1116B8B0248C3882E71245832BC828B320D7964A8C46ABC4D55369B131E58610213527436B1A574FC4F80023F31837C37FA69AEF073A6957D79941D44CC394224704D3358D112C6B3D433E886948D32C4B650BB2C879478E2844B97259361279E27A878C150B48A3D5D95552043AF3E51125683C4BC60719C1770DF689698DB98C7555BE85351E86367C1818BA69014FAE437DE69A7D87A68E7C716A5894D949174E065C4149408F4083C2013247A081D20B89987FCCFEC4A6A12F6C1D27C8A0776CCD9E95FBD2909050C8DCDCA4132A362A01BBC83C848FF4133D22982CDE39580F93F31D1A48DC97EEDC2225121B5D298A8CF745604B6254C536B9CF4B82DFB3D950596E14791B7372898D69ED3500BDD133BBE6957A6469D0ED54B994987F6764DA9915486B80B0E998308E8837B49A6FF571EE5E39AB7568A5949574751437FFC691B6B0E5841130844377B0A4050386A89B90722731BE952428215424C3241C5992A8C2071D783A0544B5D7BEC8E2835CE7C725FAA4C9FFCB16EF992254E2C3E3F380A988CC7C8B54A357756D00B0B1F0A83494ABD8DD3843434995A164C13BC40E8D771498305118C51677023F41602D425325278798B2B03A02C55ED18CCACA3BEFC06576C69A187D9178981A7D64CCA3FD2A9BBEA76CAF296A98A8B4336982DA6976CE49C7D8B8C5EB6BB3B959008901CC50A7E42FB9B6FC3496D7600492649A25597CB19A6871B80570B5D5B294608EA30DB236D54A0C48A4585CC0813178B57EDAB1EDA11A85A56825B4BCEB7D8875A4752F4B901BAB60DB5EBA75B873740C3083827096B31AA3A4841FBCB33E5726FF685090FB37E5A27C4F52A171ABBA48AD8657C1A532E980EF4217D2C76BD013838019905D263AA1DA85133F49C195450325B190075CD00F10D72868AFD8BB2D3481E887C80A9985DBA414F973B8AF398316AB2631D87BDE770C401DBB4038C2479A774E3197B993093F0C2729FE4826333745DEC71AD4325AFB012609298E36C5D7C3530D35A834B720057687E92C99545F4318E737B0F816F911317B7D366F6704F56A96A7AB40305E6394EB6A7B480BE6BFA1F9BA7B88620706B8390EF183E26F33C96B7E20EC44319E1A1DC7FF323B73C627338FFD5D80DF8EAF28A190AF1B95AE130FFCD1A04140A5C74861B53DE88402A91C98C1DE4573A5DFEDC75678FB222C1D901CAA9BB24F79F56B730B1B703328783" + }, + { + "tcId": 108, + "dk": "984259E8691D1277AA78B696A9304075C18FB93293CB452CAAEBA7F41A1702B9CBB1F25107FCAB301833F80BC51583283BD95F767C73089A61BD959E7C06C24433A53D1C01D24C8B279AA3A732472BA2044A589C321A60D0424B5185AAB78A6BCC1701BEE93CF7797BB69B6404175EE87112B7E8298660347878393D298CC0AC8FE0609A3CF1998A782D136C1D0F0409752927C917B308A12A50117723F849ACF41BB25A171DD79926327852760F2B9776363AB7D16CB5287C280FD2C320F0AFEFD7560ED0BC241B4025C51594E364EA498FA59594B9445E717292924A5DBB36B47F0432FD229C3D73ADE8E217A417863A72B886082B51989E24649E5B163CD030BDD4391C9F5426761B1AD5D6CCF776343B0233C8B64A3BC6A844789B5182B19717671EA751EE2A674A213B5BC32607245FD7C347E8BC12889B6B8E117A9213A103F8272F63C0D5C00DCCCA11D173CA353A8F9CE23E0E49777DCC7E8F07597016A1CFA24FB0A48D80A9BF36716F69E10F6694637F9CC6D97404D98A452403C9A8819C605C4BFEC3663F97AEBBE5AAE923225197B7A8F68124D62E738A24D23A422EBB0A242272F9F57546800710796E4BAB15438A2FBA38BF9F8774C2FB7C511559A97C6A249BA62A013D6D95968AE76422877455A016C4470999E3730AD18E10E54241460BFDB885D709B1F00A2C248186F76368AED7B098247A6E7AB9B0D1533AE94A5232451A0646FBC828017C720AFB2D8D3261C2095BE6269BC5A0220A199C33D03E07D9CBB5E9C04C377D30A1C09A260996F744E589C9557A7F99966D9FE3A7C7A7BCD954738EF0A496CB7F59203C7722947B756D2FB8533C2287C45C9534EB7A59666176832E7173732C231A05341BD0E99E12D690307B0AD829A3AC226BAC049E4AF139F028B4C6231B4D11208D87C7B8E63F20BA4AF8B95580BCB7B208329F0B3376017ACD3613B21620AC8118C4EA2696198F7D002F8C97A74E971C48F8907219A19C9A49F52C3C073C206739BA50591CDF538A6DA97CCE109C7EB64671E739598C8547598B123197DC9A9291773737B45CF94B3A03DB20EB88C3B92C88A41ABD1F44B716E2AE9E5115324BC88835389B445C22A10D21A6C186598A4D5582CE263752508AB30B6F54EB68BD37347CB878F1928FE90162CE49395CB5625A4BC510ECCB39157EA4BA2A09A22BC90985C45BBBAD3500889925D63C9BD699A04688208BC11998C59ACD5A244CC6CDB2977D3148C222F248E53BBCE9830738B62AD7171E465C3052FB2259E709A9C4365019CE416B941E685C2BBBBDF9310B3D4370267BB5835801C5104BB9239F5FFB97A2AB99977986CF270A7AA09638391BFEE61BDD9C0C7CC1347A6AA1E5BC54E1B26CDDEC0053F503FF76885B77AB06FB2A4D542C819131E0762D3CD0B9C187AA29A7AB13479A8622400E9045818733BC107247071AB559A27843851F395AF68B3667146810F58FD84214CC792498FC0126824BF91AA455740BB853359DAC8333E6845AF80666A1209388A43C409D47113639A19586F88D2B96AFB4574CE1C5330308A521955E08A65E0D62CE4179C692508CA66995D2C08A591352EA4CA63B11043D39947060225AEA7DB37082F299C4221B01B26BBF9DD7A53BC28C51775F9D79382F785C32C66B7770198A776C8268AD0021A450A7472CE1ADAFC0A69FB3753725777020685C31398A99C6B6905A5A5868ABD237F0FB7520D17595B07C9C5AADAFF8759CE25B48F0575B46C5FD042C855C6B70920E50259D1069B75C6C0BF377947DDA6ADD380B6A70B1D7301E99D9B0D0D5110F0B62C697A2E4865986B3B69D44BCE8B36F89286F6736BA83127EFF3CB6388A0B29328BA7F291AC840FCEF2C112868E27B542FA83A6EF307C8463AE65D462000DBD293A9294B4A1880858BB703EB6133E2E6B902E79A3B11475F82C8ED9C284FCD73F052144F8788A1E973A1E75775A396656ABC8EB9319958AACDEA5BEAD1297E3C187BE99A2F8F33951966211AB38E41AAEB93B723B0C4C7D2A5A0047C4F3F144C467A4C45A70F086B36A48CC40C0C897248C78A2199D726937124EC4F0A10D4A83C23011920676EE4273B227CBD56616DE59967B691A16819FE46C11CB6315609855E01867751642872B84F8BB8F634310F2A31372A5328BD1ACD1576FDBAED92269412F51552133B5985AB30CF1E036467B1C98660EE8BEE8ED3C9E34D5B1DE9DDC53EE0B585184F723CD8736F7EE0A773947477D06C7B0C5F025BB4493CC6500EB41EB3E59AC4ACD455AC15BA67CEB7F691027B132EC" + }, + { + "tcId": 109, + "dk": "8CF4979D5576E8A3AA330644D2749CC9EB87A218B7E6A79993D0A7D6CA9C8DB2AD96408705E39DFE794B81B4CFA03871FFE00C1BE8B49F3A0229686265766E1035795566814A214A098B088AD77A6F3C2DCBA567ECC786E7FAB1E2DC54B98558A193584EA198269BBF312331FF7B4B65332A6D64CA249C72B1267F1E46614939C5015A1798932BAE24B446762114162D01AB0B2E248BD317B42E80A7D713C6D4887F917714AEEA25ECD4BDC01411A48354EFE8AA5FDA00DFEC906BA75E85DCCC651109BB9143B9B89135F75780AA6887880FB09C57C0248444368340F467CBA6CFBDDBA33B90BEAEB104840A8CD2B917FAEAB6E8A5BAF7F4BB067577D94A72339908C7E56D9C6548E6B863CCA94BD4D92CAD36CD092AAFB1352EE2F6B0AD939906342824700EF596B1CED2B1FFC58BFB1C634E7817685859163263746B03DD5B5BD5C27F8BB20A3B890C13B082B6EC4CB53386E5922B2E3AB044D10AD82C41AB76BC5AE245C678BC423064DED1588271CFDDEBBB326BB2883C8474C429A24A9C5DE1C52F709293D0AB5FD2C64967198F92B6ADB30F8CE93AF25C0763A9A581BC23293A04FE218315B00DF5695FD5F5C522EC89EE048E4AD7A193B4128757017635BC0DD2C0A60C8F865941C657A4BCD99F775134E495241D719CD5907F09164776AC945DF7AC14B9B0843253B18AB619D26C3AE267D206B21210B43FA722B158BB30B4A5C6F911EED56ED1E26835A1C18F8848D2BBC9299614BE9752451C18A264C716952781E68DCEFA2BB4316B7A8ABC8B10031F8BA609C7BD46E681B2169E263809F01AAD64A1038E03B40D89A50CC955B192CDF8D238813154804C4D3DC87B86732CF823922A658C9C1510A27CC1B9B2076B979B7B158CAC57207BF20012D430693C33912C313986C48B34123F8828954CA02CB7919E18302846156F3482DEF25D7D138CB4836DEC1A8BF7682292476822DBB197A9A9E5D572D13749133884BB5A1D94B0A651E92FC423C6AC07607FDB4DCB02BDAF29C5CD73B09625500F885FE0593748E9A936F70B58B1C3298A9565090AC015B15FB5C63D98CA675B05A16C0E58693AAEFA789460976F049614B1225DE04B236ABF09789669998200A9650C9B484FAACD91CC8A14009AC92C5665CC2EF6075EC5267BD8398BF6F9060B6438FEE3018F3054D88C08F3E470E0553114328CCBAB1C495A904D6B8B6D87706DF24CDE244C62490C5A175B2EF631C5A372B6E7B5ADF19F7FB3C5EEC22E9210BAFEA8710ED88BFC29528FE5AD044B181DB7453B91BA02F844765A3981D20ED8C5BA366C198377AFB0986B1F54CCD3B04DC0AB7897880FED93630F6919F8691730713F74D61FE04B70F4C12D4C396C4952B83B2551B7E20686B01AA0A0060F45279337B48EB4C7C00A0123AC91044B7B80A50413C66A6B536DE6AA6901F67B006BCE366581B14A0BB2109A15C4056CDB021065818F8138C1C92448E287D76308D447911A101F8630A474E80EB7A12D6D743D387783E4DC84769A1EC379A02816BB986802D60C99FA684A3DEC02FB5261715A0C22968BBD66013D052187C6550AE937A3F084EAC0781D8C40B9D8028112829210429451AA277C2AAAC0C8BA408A8685AA47071987BACD77A249AB352A67455A18EBC9B1F6AB502847F7A3197FE693AA88026F664ABBC48C294A1BE07833C0656AA0B6137EB15CE8B3695A34CAED23867874BB00AC153D1782391539147A0349855AC0567C0B9ABE991541595006A7C3A92E9265D318518809AE57329EBFE121F87C6C1BC932B3786545622D2EF06767F87435722F0D9641AA778BBBA00CBC6C610671B0D145638E575E10B374CB3C154055A553B05F98EC97AEE12456EA8C9C844CDAF8167CEAC0032C00766C5A8205434D020BEAA567BC01C354EBBA8705137EE05EE2D852D9793A596182F7796E722B8DFD98C1E411335E7B9FFBA27AD0782FAE218CB10479D0254C164A79CF8C70B77A81FFF1BCAB50A3E926C588F11D686A9614111401043910775DAA425BD3716410F84693CA6089CC4EE1A6BEC6C99622754D4CA856FC86459D284F9A1960A6B05EDBF1364171B2343816FE8544B45C9D0FE7107891947E607E2CA2A24EA58A705318B7816C9D13CC2F0019B6E31EDC69C87A6AB00251CBAC9C3F77438CBC59434E4468D56925331A798E92428A053806E4A9FE2772D1CEA92DDC9269F516437A909B3FB42973887B2373966433D1B5C964C7AD562ED37428CD0D17CB35A168B5DD5063FE7962667C6FAFB180E54537393BEE839BBF76C5EF04DCDB7E16" + }, + { + "tcId": 110, + "dk": "A843B46EE4396F78000C181A9B8B4134393DA7A516916833F1A93E3D9B36F1D71DBAE841BE8109D37348B9301A470C63F1E22F9F6CC16C38BEB3312F43576FA3042AD5B48AFB4578EB59A5673A00E278B3FF880D8CD0A4E03963BD6C6FDDACA11747C71B23AC2CA387FC32B4497157A503A413466C77C6253CC76AA6A08EF2A574EF1C518DA21152E00CF2128510F7C1ABBB90A81BCE8DA5022F8A04015780C2636A0D30997E8A3CB9056D06C7562F613F5952299B9C7ACE2086FC063481869DC5F73EFC74938D649468D1ACEF7025ED42BF898CC6D047C97A62470EAB3142185529372DDB93B81D4B6FFEBAB98D96666FC6BEE59C50457269EE96674DD872C3A182721C821A60103F4C6CE440AEE54A97B1F193CAF56BD7543EEA0B043BDC77D77C74081C11DB948C28DC6DA3BA081CE10BDEC21F92741881FB7F33316C7985C435C46EFF325119DA1E4F0B6AFED63AB4593AE75B07C2CC3FE938A02AD66DF7F7989B3B3ACA3770C8273252849057879B999B4503C04A01B73DFC5324F2E40A8B05422FA020FBE16378337D38A177FECA1EFAAA91C2B639BDE146A0541F997287347558D9FC11F43798D18559020A74934A1129719331A16C13EA689430010244C714D2308013C933D2A30015B22DD105B526C37B271CE2ACC68628B24A928E82FC7ACB8CBA8B685D5734C22320165E08470F568F7F4945403CA1E6268E7353A745367F5866314761075D8730CF3A19065AB8763617906A007DE40143124421758A894A9B9BB89269C4C87AF315F83872FC0AC8798848FF084AB710B62A7029C5625A43599AE5232D8038302397B1994CBED2688358F43245143F1F41A16069802E387B51A4B23C9B893F5333B7687960F3681AE40B628B07A96B328C8B8CF53A802D45957CE80B9AA51FB6756557B49886324640C267990754E36AC0DAB687F726637AE9CA844A9FCBD22FA6ACAA36AA416C5335386B35E072852E035F0AAA7677987C85E18BD87A860A1357490214DFC1A7077B99B40113A3C14E323241302BA46619A00787A5DF9C5BE77C9AD3933C5283BEC3E60289F061F0EC40578963680051647ABADBE78E7025475D993FA7C2A9DE3A17F33A198D5A0BCE82BC15773946D9049EF85F949577E5235BB7163434196D7893CFC72544B63C24F3718E68463365AA9427007DB4E29E272C830220B33711385AF074CD707CC17C17BE7C9EC3E44D01DB4D925495A98C1406C17C6D634214B9B404A88F6ED5792AE1328CD0265C21069C021DAF202E6FA24565343907EA9B540665254C6EBE1376418CA89213C69674B37F15A6D68331C7AA60F300C0FFB7C8DB5298A116BB376328DA0CBA72E8324BB00CDE5090C243B45B8745ADA7644F50CC4128AE95678FFF60C605C846ACEA756807BF2115AC0159B733C0AA6004BDE21CAF03738E6BC50F31777FBD09A20D655433D0A6C7182B39DC1682E8CF41D256BCB915900B18CD1225C5B0C3BF982B39683040E5BD5420585EBB2434E810F19114876120EAB8C4B2B9925524309919851F41B8FF24B65DD5BEAE21C28B4A25EB5A727FEB53FC386AE9F30564EC09E461B0419985C686125829A57F3A14FD5805CF5629C95C417CD681B5E45AE881AA7CA90AEAFBCC2E635D48206620C5108352BA3F4811A801C92CEB2CA85283DD562AA3C18A0C26CD8095C8E2B270DE27B6158600AF18AE4D3771F5F64FA58197405B76D03C176031075FA83104CBAEB117780A053006AA4783F03200904B496C9786C97B272913B874B00262BE93EC2AD671968EB36775C6A7F586A20503CBAE4A264FB8AE92D31B11DC18FB247AF759AE461076AA7A5411E559E275BC0455CC5041C13748CCB7333F623C6F8498409B3B5D03D054B23497BA508AE2C0916CE67B89818CE3B73679558DDF397653DC5D5967650A4A4E4CD33AF8C51770731611D729838A44C1D72996142C6DA09AEF624040C4606B0AAC37483998A973483B723AD968F1F265D5634C61D264ADB058A544856F805424CB478BA985BC962D407164A4DC0FF5032E368024DF60948781518136757D70605FD199DDB27A1D532FCE9422FBE3B48A4682DE4909D8A3913A980067728B5487C5D71C0614648DCBD811DA1A1E13B459C99881724B961EF537AA64623BB1B952E993583B286B4046DE0CED4EF0D3898C5EFC6B2FC2BACC248E7BEDC45F190587AE560A5C84E12A094457926B197D7690630DA52B43DA6803B9ED9CC36F437806DB1314CC761E5D2977FE09882ACE5798EE19208CFA06FFB0D0E3708C1CAAE135168ADF19C0D1D0FE" + }, + { + "tcId": 111, + "dk": "DAC09137F25D57C12D23A0181B6538FA76461C43C20FD129A8427F26238B0F47A1443B91D9E76AB96911E934A814445DD608659A9006082A12D1E15F1C424409648466A42A36576E64370A22ECBC7DFA2E73F9CCE95B8BCC4773F1B14443A014A3C8C2946575E7279E52271470B26466F55DC3F4B92483BF8CB035335C6D6F94999C15A33B90A25A19744E74BC217C0CC8C69DE3085DBA69742BF607091C48F957097A5872EE0456FC3682B841132C6471B8D769E9062ACEE103ABB541C70456168559FA43BB9990ADBEC2C8D18039F0F4341F72ACFC9405E7E287FFC2C19BB562CEAA0B2E916F68A94FEA0374EE530533A1A801E0225AF8AA09015CF39761A1C7B160BA46FE58AB231530D5038D7648B79EB9538A2BB61C8026ADE0C4576C4C10B735798C07149144D25529192827CCE38E8B46A793483263B024AA495D4757084D5530DEB8401A22AFD63112ABB671AC202150AA7231A0C5825C1A1EB71C8D73A43917839AC00DD6248226232744A2C1FFA0CDA2469BFDA057918A90B511224CFC3D9FA8CD384A694F27859C6123E4930980CC66EF9725746142A6D11AB7671F2C50AA19B58CBDC33C6F7A9F4468318F36CBAED2AF91A06D107749C60344F9B39F05C258117C88CF031587054DD4397BDBC19E7D203A142A57F76C136FA6C8C1E9393883AA0F873610315182F77AA7C5CACF550C1B1A7995F6B70F2611714822980891D3756DB7D97E54911740E665ACA76974CAB12802CC0DB6B468261BB40202872614D51BA8B791BB4EE42D27B073D7EB0E7CFACF2E85B767D1B8F1E5388B70162242273A03B9CE2B036F045CAA37B522A5B8EB969B9AA6A7988614CB2353C9D92469A602DDD5943FD45FB24A206FC0AF6FD558EF6BB4BC840CBC556D439C0591466AF329363DC9A936A179FAE7CE89B087B7A473C3C020369217A5AAB2A3B3A9C5A53B53B27BA448986DA11AF79216478B7A26A97706F59591BC284DD50C7A7567246355D274606FEC329498A441E75ABEA5383C71B24688B7254464D6D352A5398D5B510C57CB1A2F9B9AA750657E5599E4A193078CAF06841490B9C9799C0415DC2B8EF882E662B89643C284C07C07E2B715D7163DDC77D0C28E5FCB03F841C288131BAA3705C39A795DB038E1D70001E102C31283D7A45623FC42FBF651A68842C70CCFC2C6554E49BB93E4A5153C19D1D39EEF9216B4BA7839994C32DB0DBBE5BFD20912806BC56591795E35743134CB39155F548B79A1B55EB011ABEE856B6F70CC252CCC0B012ADFCB588CB4231C780A500318C1392993F4BF840BA1E012CAA44C833316CB749B35E5E65A8590442C0615AF17B2A393A1365647D458A0C419A3F6F04688C8A270465271C9CBCA1CAEDFD549FEE13989774509BC24388977CFA714BDA3C95F4A68DA039444F930737CA56208A5C566C210A5170A5563CC7B34D5D96E391C83CDFB911645B9E2F3A501CBBD710C5E36680E090A5B7E84BAD3500E539703E741169880604D0550BDF777F03B30A88720166C307D8807D834BA73F72CCF99A5C0939C5587BFB3D70A9BE38FE8693BDFAC31DD93379A829E11706DFC57BD44E13884FB5CFB5BB788A128ECB9C9B5D0030DCA35B4B286833808AE837627886D610C74CC34804753854DFC736A82390E0B89DFE13DBA31AA2FF622A6CC33E4E64CAA580992D9161DC3CE482B911A7AAB87C12C0C9B893A2C53F12C4761829AFA6A003F452C0D3C1EFBFA7DA5A89573502D46D5C6BE46104BD59D18C2AA7846C04FD77F4454CB996387C6380B49081D80A509EAE36F7378A490485EB0B86C17E6577A894E47266F4FE95A7153568713703D3C3F4936A27B678104F982CDF86810366CAF531134AC7AABB63C206827BCF44646173F5D2635492B9FD921342DC26FCAD26C2AC4475FABC4FBE196C48CAD8870260DC03D987B419B085BE92937A385CF50DC725F63420234154F392C2D8C8114F7BE3BC67834AA86AA007EDF729AF8FB7504F39733816C4AF29A99159A46907FAA24476702965305238BA87C161CBBCCF28E8A25313F7B2D87186499330F51E2396C72850D0770F3B064920A2BFC55370B3389FF8169781903B0925FBD952687BBBE2D544C8399981575595EA3B9A840400C0A5BFC53650B167FE3583FD1D59017F5497AAC109D9CD644462724DFA03A147F75BFB5D002C0B8562FD2C889275DFCBBF33206974C52DE7191AB99618A9273126268FB4BF830B394CE4A9EBB391892F1AE3B1ED5F42ED31E0EA2DD2B330E5728FD97BA12141CE24F9AFC1B2FB281F1BFEA5BE1A1" + }, + { + "tcId": 112, + "dk": "16162207B498F7D08E77166493A7C9089B3EA0F2AFA97491760737EDB697E6ABB2B01A91C3830C1243001A0476E1159259F367A24690A2CC562F0280C19811FCF1177D121CB10967E860AEB8C560D37C6B95730D2930661423686849763B8C4D3FEA75DFF8CE6A6A2C3DDA9114DB4EA6F9775C842D7629A6885113B3553F6E848A536B8E0262314D6B74F8E57019C787ACD89BE012B6FD661DD5851BF57C2E64912C97856FC2E5C53FA4898E41A09EFBBC3D3B169F85B429D55151D4852A8938589259835499CB8290E2A1C8CE72C770C166AFA35812BA7BCF1C13B4E67442672633541127B653068123F1E626453A0B630116AE15630EE10D3C4959558380A4D986A619983FB11E3E054B46B23E70459149041D003263E551A0094052D6A5CEB5C71A76A9AD93A32A03B56040498EEED522B19C9E06183C11D8534572A29023A488F453E283373AAA2CA34C599F307E2061085E9B9F0FCC8BBD767F5FE2A2CA49BFF2FA1FA5C61713525054356AAE9ABD0802905C3BC40141AE95F39A9683B67282A46AD95A4B03C03FF55077DC91C5A31D55116A96B80BFB46859266814FC9172712255C18ACC1B815983A50F079597A152E89D4C5F8E9228C786A70D52340B7B65D78B23ED966FD4361FF3B939A69925BE23A063B431D3C45898881A0CB893152BED15781B7777DD1F57C12501BFA7B4D39100B3DD80854CB723ABB5E4FE876AC0B29FDEC03248353ADA9523DF964730045C305CDCE515B4C06882842A9556781CE15976DD12F6CE56139268152CA40EA615A4D7C3299836D8FB338E0F64672520CE2B2348F51C32F365F8F1A59FD3C6482C040FA32B770560FD8512B043554D161377EB9BADDEC09AE4B6DDF258D2045453378A9C96A28949CB5FB907F6CF6B9371151523328813601A6306CFFE1962D1A1BFCD85B8E656E88399FEA94389E406B582A4B53335EDD009E53828C1890617FB7B04E05214A80AD1733B7E4392CC9D16B2282008D304AF1653B6337C71143CE4FAA0991B59846DC29AB44C2B49A1600E093B50A6C39DA7C7B039BDB191230AB1D16713E39092111962135A293F80523848251F7302D5C3B30D57547E336BA0F925CBD1301EC136BAA371DECE4038F7B36B08BC84B1863D90430CCD048A84B3CC65AA1AD90235CFB0FBFBBA958C0B672BC9356883A2436020284AA8F827B543C383D79462C606D7AB97A648C51ACD1A2D18299CDDB501F8C8F8D293A81F4996E9C8B4154BF4A363CAF0849D33B7B608598F2BB64682A136086B22D5BB243F23DC8146A0969297EE2268324986C039CC065BDA6854D3C454B57DB734829A0D7D174A697BE2A0B54A262C238611611B37F4339321B0440BB3A31B8501D39E1843DB853036B989F3BBDEFC243259438F9EA9F77458F22094AF32752AAD2B50DD10F66C4CB70FBA7D16815419C9C8A4CB6D1752924225B041594AF23C005C8BE33B9B4AC047CAE9521F6061D8B2585982280F944876C9BC0D2386C14D21460E282AEB277203C799D10B246F25F93759D3011B00073A42375A261B19F0070B77EA0A3F61C62C0032624E6BA70668A19355451009EB0E318D401B7307899E4E12043B688E77022BEB46C57C886A2C164579C6A8E089770044D64BB1D2BF381FE70B9A00A5CEA5CA53D513D23279AB6267447BCCBA4E744D1ECC7B7E20A6C5353D6435F8A8496FDFB44061A0F37908A4E662D72936E3F742978883E48097EBB2868A43461AAF5484AC5874335AB82D9456878CAF90A3840A531F2589CE8F946A194983E49238D277F63D8CDA4D24E3BE734D2F4A1B664319551B427642E7BCC3D8449BF8EE7074E3B7131656C840B1466DC8FF3B334EA9294C609132AD56C9A2AB975167848E0057EDA6FC91B04850C8F27AC0DAF242C390C7705B4AF78824F94131F9BCB916494829743ACC32043F1037016129791DA96EBCC56DC404D0DF8865DE766A9F28695AB8E4CC619E0F7C610D64F623C0688CB3536DC33C649955764989DBCA45EFAC23F3ABE2E5210B2851701B924A23175093820AD958A84B68B309365DFD487758BC79D0708F5338A7C314F517711C7F916D2EA9B3C017CFD746ED91A1F5240745884771371CFEA7BA9D9669FB367408EA35E723692D7B044BEE5C032C42BE45952A83110817C4AFC1C98A8B3B4215F7A902E812A4C56A64C0AC25382B4F50C60061DB03A9E4516ABCAA9D51DF57BDCE365A542DBB2B1826E3B14D12A5077B7BADCA4497DD03777EA42AF8102C169EBBB7871BD2FFBD7413EC2768FDC33A2F2D6EEE603D48A429C9C4EA1" + }, + { + "tcId": 113, + "dk": "02A7682B2579ACEC1B3176B6A6B08EA3D83944E8C505C35F8D13263E4C14CF270100818F9548BA565667105206A3B869020934B6692367727FD5499E375A50E8B07935475F2E390F43D516F2781809F4AC3B66B26456949B99CF5CC49B3BBA429D8C8C39A54039471BD0EB8408A233217393FDB56C15103A5EB26D394041B9D7C239A564DB3B2491C98EFEFBA321E426169A2D2FB3B79A742D7C8235053B203E025E1D35959CF578C23A0A36E12C4C4323ADA61FE0A437D57A1537C4212777C079E1764E6A37754159AAAA21DF376466B142167CB3966674D3CBCC25191C3547125D11CC02C6B5536B2B1B412814FA2F9921B944E22CF0181A2A5A07210C0BE3344BEC0A5E6C51372CFB93C4418C0635CF61D07446FA695F0256F98BAD02917A753C5EF106A51D8A778403714FC7786F732D8C74C0E9296F2F112BFE56B7B56C2F043CC8FD31B948BCBA46DABF005145FD215AFE64525E66147DDB4B7DAB5611DB766922AC6BD675D47BBC7B4839FEAC65BC7B6E06F220E9AA6913A1BE433A0712C756BEBA2307D468B8A35FBA041D79212CE686A3D488C79142C9170B992E237BA8B859B1C03E28A11B4B312C2D195BE8379F33B3CBCD1C0D8AF9A6137865F6F00CAEF934DB037E288C7A4CA8693CC700439279BB49238A4C1A240C6324076C6071925E09C1DF7917F9D0699CF69DC939014D8995EAF327BA88237C8A812FEBCB8DB98B0773AB22E50188340924AACCCBA8B732501F2D52235EC282CF8B7584B79CB171611EC30C3044C16A491ADCF92E6C3C24EB3A1369D3BFE7C9C1735163DB38675362C59928055270C667022A04DC40C8828005589270187526F06D13D78E2F25B90A170178D4CCA4747DD6D05F5ACA935B17AFB9604B388BBD4B390BC3ECC91D101965AA68AAB5B337553B06226F00B1AB2FE7031733C96E2956C1E3B13E6284F8AAC58B17C95DF6478ECBBBFF33496C46295B256A3F655998C64C97D002BCE23B48A2C5E9CA2218A101BDC48353C479114933AB48A63E79585CB17567092B4A2303FE9525630B7C5F405F63D38901B41CC9754B577C142D54621713040CC0A3B774585FD073AC79724D10CD98E576840C2F0FE82088258D048510FE4AA0C0C18C6FD6B9E800022926078DEB8D63E2947DC29126061A5471561B600D972A63FF41ADA418904251720D64134EB7CAFF70B61A59CA67758B371011095B9B216C508F7C7DDAB81E4A393AB3009C10066CA3EB249C8C7DA10B9B4B7B2BDEB34C010B6716676A19D2600BEC0E7A877D21F6A9CD749856771B6D144AD355170C4AA468AB17AED78FB3E36C9A240347E20932EC71B8A429FF29CE123C5FA2198A90917DD5F1A99FEACAC4B2CE986400B5CC2FE870843F922A81EB11B957CCB5A60A27B97A57C4C33E97AADA4C864D0B86CB4788E1C4C10792614206AA1E6709D682246860AAE1197391033D74D5526410BAA7814A5951090BD43ADAFA67E38B30E4E3CF3B7C360C758CF6A8300648B353DC4A4855A7777AC97B8A2D465104D03459114B1F0216BE1D11C280832AE60548DCCA27913093F144BE0AB9C7A3776970063EE4302EAFC67C6EA34C0EE7A8761904AF57BB27B2ABBD369DD3F5CEF4EC7F5D01424D807633779DFE4175283B62B898B80FC479EC0CA45A48C3C7216D10A327D693392B327359FC443EE1148B09352820C211B44229933DE49066B58A4D5559B19DAA9130118A23548BBAD631D5F01801BB45046021AD3C0E2A597198B180E8157052976B060AADFC205C42AC3E745672A15938A6F937EF75B521E40A26D93A60311481B2586CA77DD4A4CEB794C3941B56FF45CFFA681A95D36910D41BF3239E3EF107A2A06E258679482B5C3B0C7FECD87272FB40FDE03DEBD59A622C5EBB99A9107C71DEB3A804B63DC938224CB6313B071B3457A95C65845FFA0193E110ABC2C0E984806063705CA2C7A3AB7CD739263A44566528CCA8604E06D715597303CFA8C3C23C2939CA81A428894441CE5C769E54B6BBF7D3C5C4FB23912B62E9FC5175B20F6D30178E280B6F508A82499DDF3BBAB995CE618CABD1F788061548944048E4BC5435BAC62C52CB5E750FBF75539E6008A2F00AF2B43B24793FF8822898E6447752086BAACC062C9002A133C037560F4B925D987719B63477173F8519F15A8AD2549DFBAE7EC8BF7ADF32251722A366EB384FA70EB79BCAFEBC2B3CE2F63992331CBBBA9606E215E59623EB07FD0AEAE2F2768EC12F64882EA27A6E17163B000585DC4613C60612FF2C4DF6DF108F2479325BCC24FDA3A9077BE3" + }, + { + "tcId": 114, + "dk": "61E8A21CD53100907AEF8B83B95357B1EB62239935A4A2830C16A9CCD2C4E3F8B43C06B6217384FE13681AD04BDBB01BD4B747E7F222CD78251A230CD0175C9B216B5CF2A6EC47B1081BC0EC1111394910C23C3FE1C2519C115B69B12504670FEB7000D2519C6100CDB0872C55A1510D08A391252548613C3363AF2AD45A0B8A85FC2064AFD982F5794DF3049741F202D898BC905C6D45291CB190CD9CD5C92A5A20E98946271C7D5D486562E6AAD0A8406D3A075722C7F174B33DB516AB340C336CA0B1B8A918A17F3FD79911C5620FBCBB1EE11F555B9B6E5534B26071B76B0EAC920E33A79988820E54D02BD32B3182D998F3E3B3340146450B886FF5527C953F2635C319D77F7349085654C55954151D4C5537A983DBAC47A63A7546729376A762003CCA18C26FAC3B8269FA75F8FAB8EC130148DAABED859A40830593F99D3CF7AEB5E832DB154AD237AD03B1BD7D520504458376B2C1AD474BDB628D4301430D6AB0EA3630EFC102CD27C4D6F90BE3872B76E25757455DB8E85CD729ABC6704F903606A7CC72CE74437BFC383EAB88DD0A40CD7C7D5958AA375A8C20586DCC08465B6743710CC21BC06CDA6278F60739DA2508D8EC7E78EBB8A8A7170F2A389A23354558132984360FCC6DD08ACD3C472B1A63338A6C243524A23F5C58917556635B3EE31048B3E93A7E0672D415BEE0194912F169E084CE0CF996FF6915ADE7CA9C800E80447EF0FC8F94F95A23FB099A85365B212E3931218DD77367A498D643BE3D943048B3BF89E822D53AC38FF846FE377799B67B3BA7B2E42A3109FC5AE1CAA5B5594E9F066F61FB22C7643741B96E22C5AD5121431561B0AFB187BE176FF10A091D1B8F1EE4869EDCAFC638BCBE17563AC27FE742666C25113263413D629FE46869F6333751E21D80FC1DA921BD6A185D472A845DEB59E910A03443AC74D4A0AB279B6F035C74B39BEAC67042D8229965C1297A986382A3F35139B48683E760CDEE6697FF253B8B715D7C83B83C82A2C980294009289273A6F0DC4D174A7926B0A89794111F6B6916783DEC8C810CC299C9B85F117B52226CB61196A2E587565FE94ED96C98CED9B34506201BA3AF7568720E935ECCA7BEA898BBF9163E17AA883784797F458096085B6E0398914365A34423D941CF11C66C73A0CCF4ABA17BB94E58F61F9AC574D51C982B1A6F738029FFE24AD1C63065938F7D8CC4C3A21F61EB5B7B2B90756817A1D34B9A84A168855BD7630BA9C458C7A4BAFD73339766C31A9ACD2111556BFBA15A495C159238DB913422608CB566708822C6B9BA0871206DD63503AAE01E4E1A47C5B745C8D79641C2C25CE7A7E361BE5CF0AA0723B5CD59171D6303D6ABB0B6138E6EB0937B98A58E5A8D82A07C97D12BCCC09AC4EA8267F61EBC323A00C47858132F08C275F627C034DB3F650A030F39B0BE7A896DCC45A16A3DAB03B8E7E3A3F9B2C713B01859DB980382AF7120924AB314A319876085C9C6F3762206BADACB65B3108563664CA7BC41327C0EA09C046D264DB1538275B18DA8C4ACC898A7E675705A02906186A53023B0A08697FE8702BDD8763235B857F8AEBD58493B821707255F4503CB36B6627B5B7D1A7A6D7F73BF3C568D70B48AE437A637F378C0E0B68E35712EE948915A0DF2B8CB3DC52854B06BFCA15F24979E0936897412614E504BED6B83385A6745AC4CC0B10519F8BA1F1A2DF69A8A38734F93107CDF5B14B993523F5AC9DC522241966ECE70224F5BC183504907968CE5C79EE3309A15DBBFBDDC88B1072A87C13011098DC9D49B96543AE64BCC57B8A8B7862BDCB9C0A89C612EB8A294E4B4AB330BB0332D01BA79F6C569DBF085629506729B04A2C2BC6068BCC0697CE5493318D759134C920200AF295894BCF81660B8C0BB37981AA7B64808A9994AC5AE41C123214BF1E61E7225B54198A15FF7BE3A2088224657B5F4570AD0069F851ADB06677F5C26DEA23E5DE8A7FEA27F30440CE9D068FD3210A2210CE6C30C11850F4842259311A3089A7F1762C51CB8CDB00125459A83E471366D62269A44757C9B612024AAC12837BB845E83AC4770A756995581AFA59C7CC57CF64422D36484B6D32C8DA12B515B9ECAE2863142603CD1551B45BD3AB0B4A30118743A53B2B66CACE94F73F57A1B62AE061B09E8750412E0CABCEA6710E4C24B15EB704E4F53FED0BBCCA098ABACBA571E5CA2ABD1853DA8545681FC99F8761DCA044E117B07DEFC86E7840CF2D40764C8A083385660C495CD1A8C55FCFD74BAED0C61AF95A2B2B25A4006CC7E" + }, + { + "tcId": 115, + "dk": "5BCB2B6EB51213346B80F6C0722C37D24565B177533CD1CC5877A8EFFA0EF877CCB3866A818A1F2C49956827A9FF1053E1017035C947EAB819A6B603977249B883ACD68357E1D7B0AAF4ACC5672F435285662391894B9599462BDF3856E1D92950827D0C65BB3654837714680B0963B3E145D11222C985C848652584D8BB809B5D7CB40EE53293BC8869FE80744B657D55AB46A5153FD689320452CF133368FF32CFA96051FC85B3029671ADCB8629ECCB9451C24BBBCE76688DCD3171D013327E2B6835CA2986A54298739E2F9A328A25C172CBC15C81509358ACFE1788A12B9DEBCA809C022320FC5CE567CC926A6FFD9313990B0736704E71023A6166488D73941F43C635B5949A34829A4C6CC2768C32951FF9D520C9F7744E7158B1C64675D953CD12463062A1A00718BAA39F19125684D7A4768C661F253CC4C18DF0F7703C510A46E6339D2230E1D15A37093C8CF7127FCB84E8026BE8D35729D776F5D540ACB2A9487C63D95250C7D140971C65AED9741DC926AF18725F46732751665B618960263390E44DD5A8709469109731297628388DD45A6FD752D16BC22947523083CEDF99265327427C05893BEB10A81A18D4560BB2343CC2D02941A09E2B2CBAEE653758B705217996F7CB33BD1138734293A868565550174C49C16437AE27D08A3DAB17C10C2FEDCB5669EC83B479492A5C1EC81421C1289367537EAF071407589CFF4C7E73E05913B958D9F21CF8D95594742F407C1AF793152779B3A98B6BBFD7360E483625987EA7A23752E81962DA6ED386CA970B043BC346B90268D3EB1EE9852E6E389B7DDC914961CFF623A19550C6E56B33624CA91A57B9815B4B553034741313D43CCC0646BFB4423904A63EB8B3B809E4550FF4B33235B17853001D35962EF13E8908916B6716E8623180C0A4E30AB599FC111200B5E0930070173726D8C7165C107A007376A010D8A09EF2186B0728BFAD7BC33DE419CFAB12DFE8C89168A5AB2710FBC14B1D57CA362C40CEA6A8CA88BF3B84C48FB99C927043BF44680D32276433688B286AE7BA9A90576232A284565C9872217ACA83CD4DCA5A235884BD129DD704A02F9048E408785C0C393A745D73D037BC108B8476981C0501E8171D0C62A10C9A6AA2F7C5AC48B054DC97DFAC5237794731FB0FB948CE94651D04567CFD755EE9FBC21EB85DAD75905CA0C7B6F746D7EB0723707003676848906247ACCD72685FF27956646815C72A5043787BB1C2A0A0D66F94BAA039D1CAC9078BCDF27865715FFEFA5D956118BA5AB039975C3A2A03AB8B125B96485BD973714C4510113A7A026B55D68CE58C38CF5B44913705DDD66B7649B07A441C725ABC2A2108EC57CA8BF889CA10A5F17334289CBB109A767E2AB9A24736AB3814F7371AA5F6AEACFA639BD91691003AF52935F5E0523CC77040317B1E692974D65C6244C22F56088314370B8107D05B240DB772A46BC193913AC46CB59411431CF690E99C842CAC98746AB3A9D2753921920F2C2E7B5673AFD1C721A761C82826C0F55FA33235F676563B27CE94C246FFA9A957B34C0F4C6FCC9B0B517C5F4FE875342058BAD73104528C61F820F270954BCC4339231A61A720388B30C99BCCB1A15C690C1E62B3097D661C28B107A3D3B0B794659BD57381A9027FD7B219F42FA8561C3E20A30540C00ACA67E461A022D2B96EE5320FB4B01C060B396960E998091EEC637BB1C219978425729898D128E76B5C5C420E631912F8E396BB23A836FC16B8258FE759C37E1783FAC2852334123953A553D347F42A9F133292C17A2A129218FE13677A864B43FB09A12B4EBAA43CCDB84941C35A110A241CB99CAD01B5895A07D7C9C6F29A263704C85DEA95904CCE47BBA24CB03C5CC963E4AA5E0FE82C0CE27F37B66815F49334258183A03F487AB115829076E25567E8ACF6B32F2A09921940468C714961B44342DC23334608CDE4971DB73A3F736FECC8912AEC56FEEBB9776C3650153296A0A75E94623DD689142CB16ACC465C033AF3E8379137A94CAB62144B14DC8A1712F70AC41CA7AE986D8E9ABC15B8A162C76ED23975FF00BDB309ABBAD2A613DB5671F5B8DCE7BD76EBCF24CA35BAF2AA7682364D644DD556B7DFE95CDFF778AFF3C8B2823739A15093C55D1D12A43A7B616E0D68FF02BA56EA1DAD33D5CA30536DCDD8C0B2B8515E1D8D516CCC8BD69B3F5772C91649E2FD7CE6AFADB39D402B8097F5A5190F846E383EFB0477C8797F0DE591A8F7CC837AE438B592D085D31480983186C7C4AE10678877B4A4F20F3B79" + } + ] + }, + { + "tgId": 8, + "testType": "VAL", + "parameterSet": "ML-KEM-512", + "function": "encapsulationKeyCheck", + "tests": [ + { + "tcId": 116, + "ek": "F6BBBD8C4489ABD83482F39EEBE51B34EC95152C226775972F308C5DB2974B1171E574BC94A7B48B602F24C34C765423248906E105276A368958B257EF45B523A06EC8A87886227DEFF639454B4379437BE5C80F07EC230BD96CECD50F21A444790144E741004A1BC47370934DA7359633B90DFCB5B4B7B9FF27B3EF463AE2557BF31B590825AE0526B9003505A5F61DA9028672801537541064139C6B532E26190653ABB1D1A75ADD843AA2D53854B8B3AB0A634A78B50BBC0D0F0496AFF932AD867583A12AF4B2AB30E78E3B614E7A347CB8EAB29A2C0BD97C2DC3121822B0C4D9F68BFF8526AEE6C5F751012FF83E39C8CAA7060632C25CBD51B5EC4395AC14C62D9514D3432D75E8A6FBC48D274163FB162E755B6A50634CAA717257516E54F5655CD795C2223451E7900F26144F731EA5B8481E31ADFEB8606D52C37CC463DAE26199E174E95420498723BD33928662BF4C2A43A07C0068B68BED62B3C20A8ECEEC0F32050D57CC7ADE49A3F00B71D3F316E461482AA912A232588AE75454B60277232AB1101D2AB73CD8A87024346D5819A010F7813D84A09AD178C409BBFDEC40BB8A0500512B5DF5AE2611510BE8CE0D26BB7EF380B1885ACB7242AAE42B75043FBB165594232D295400FB26ADE25ACD1E96607B90BC368C95376CC73350AB44D733E423B52926015F1315C4E5061CB21E9353373CCA8F9738828AD233C0165E724818EC6B887440625A8A09B9AC586A770BE2050937A92CBA4065B8D52321214818B1BB2A6310DDF588D55AAAA0EBB708C39D58EB7E0ED6005FD341F5EB12C32B32E5072AF5E26FACC968140B0E2B9548F54086F3E93EFF3BA900460C5C5406DD605018063D58C13D17341181C09A1A9B6FA6E69FD9E0C361EC9992342B70C4B8E764AB3CB1123CC0395A94380CA6CBD80B37E036C82C14CA29D0CEDA724C6ADA6810CC05F67B88CACA7D34F451E65A99A526504F8A2A8E3B546749034A3AB4F6645E2F4ABD9990A694747867E3799779422A20740E877CC9D01AC2C0C248F90FB4310E71DC30BF5524BD2543EDB419B59691BF7A1D68E45BADF98FBFFBDD0A4D2806FE8609C2FD238D8EB299E3A7136164629F665053D2DC42D74B" + }, + { + "tcId": 117, + "ek": "AED13871EBB074BA3653DCB3DD9365EC928A36159F7913263DEB9C4D404F1D76BF4F122413106D0375B9A56C59DC13376BA90E44ECC94E6147108C8C44188219CB86D09B0C64CAC0FF8B02210471EC567D7C794C01187F2BC191E7013812FC9D29E30000761D7C415E2396016C956EE6648086668BCA18870D44C16492703B334279A18256411010CB716C0B05C407C8350509CE7C4F875155C0293201670ED916B41E6BA24F636647EB98334B44DFC679F112C75171684802649E3B592F83145F42920121A00113ACE6B968C952B29A90C01C286064B4987D08A9C0979FC9995A59BB253AA10A283B52E9EA9F73CAAE82F31A6CC1C30D4903D780BE610AA9084263B273555F63320F4643A76722C786C415122EEE75B7BDB909DAAA8EC29978912732322CACC3A067929A4128ABACBAF62BCF78B1D556C746FA2417BBCCB77A4EBE5A431799748EBA9E14F23FEC9311BABCC91E8A1DDB08AE19FB245D177F07B3CD3FB271736585AAB06409A36A4DAA1D4262335C9508895C205CBB9DF3705FE6A255186C8B7FFB5CF340650EE54752412A51C6B94265BCE45A7DF555586FE48EB6B08B19188E946870BF0C776B708D4E0C82142C797C40AC27A73190A23E12A37A5027214B5C4AAF64A1A39CA967DC6376E62B1B1904EE8A91E3AA0A0B692B4666BCBDAB8BCDEC77BA0157872654DED641EE9538C0749DE2861F85436B8AA56ED8C97119804CA04B17C489AF053260C8531FF3290003F952E79963EA78B809B9CDF8E4159A2944518C5F76DCBB655613EBD20C4DF659422757CF0527B5A58FA648100E430C2BF3A726C86A8F553881F103D3826D6B97948E8A14BE8951905577B9B64E489742F8CC7E43925A90EBCEAE46234CCC8648CC60025628E1A3094FD7620D60B70A68987F35BA2595ABC0309407386867798A9AE42D9BC34EF048684BF73040A964A18566D78BCAE9BCBBFAE25FE412BC67A65BAE198C79055958602204526287EA0B3E17AC52BCAD5B899BC6E6491CF3C1ACB80966B9CF3CA237CF93596796A9865B7721003936753C08421E57A8840FF7A3F9C19AA9262F4675BE8FD4FF433D084E8FAAF45DD31D7183CE65F65D6CE4CBED0FD8BBD7E03663B388E6A255186C8B7FFB5CF340650EE54752412A51C6B94265BCE45A7DF555586FE48EB6B08B19188E946870BF0C776B708D4E0C82142C797C40AC27A73190A23E12A37A5027214B5C4AAF64A1A39CA967DC6376E62B1B1904EE8A91E3AA0A0B692B4666BCBDAB8BCDEC77BA0157872654DED641EE9538C0749DE2861F85436B8AA56ED8C97119804CA04B17C489AF053260C8531FF3290003F952E79963EA78B809B9CDF8E4159A2944518C5F76DCBB655613EBD20C4DF659422757CF0527B5A58FA648100E430C2BF3A726C86A8F553881F103D3826D6B97948E8A14BE8951905577B9B64E489742F8CC7E43925A90EBCEAE46234CCC8648CC60025628E1A3094FD7620D60B70A68987F35BA2595ABC0309407386867798A9AE42D9BC34EF048684BF73040A964A18566D78BCAE9BCBBFAE25FE412BC67A65BAE198C79055958602204526287EA0B3E17AC52BCAD5B899BC6E6491CF3C1ACB80966B9CF3CA237CF93596796A9865B7721003936753C08421E57A8840FF7A3F9C19AA9262F4675BE8FD4FF433D084E8FAAF45DD31D7183CE65F65D6CE4CBED0FD8BBD7E03663B388" + }, + { + "tcId": 118, + "ek": "D8A134509B5E0C004B299C72CEA0B6318063958B206AD050F9A3C855E2B062B46DD85247433A1847A9AE468A58617C4A2AD85DD87618C729C3B7D560D31A1DBB231C66E70F02A471AC3693B7A822591152CE6919F0D45EFB9B4953D6C223117315DA2FD4A51D1FCB613DC55DFDAC6D23E2A2D261819B79985B445F63B044A9F7A1100C3D8EF52D2DE5CBC7232708628FEFBBBDB27A3813E38721389301FA96D169A2AF55BA67BAB827308C05C92B79B58F2DF13B7E845A954A6DB7C79609C17F4854BA8A96086DE16C5462AE082B1347AC3F58AA07A41BB12FA8CB1C4724F3925C28DCA9FED52BF2693CAB48965DE20DAF5BB2759194B4D21D3660B06A1CCDD546565E0C900DE16AF3446E2006933F6CB383C011D9F3A780755CC004719926A0A2912EB1B947B621C9968C5F07F1816F69B8401ACEFAE23AD4EC98A9508E677A5C182CCA15C109B28007DA6A7F5026A4BD8B36FBFCB469D49341B2CA2CD35DE28BA2CDE34A642CA6E3CBAF71278C7682A78777153A4AC89E8183D1D9061AB9068C91123F21C304A1572E124F4EBCC2EE590AFC8322737198A6232BD86C7F5D477B44A7358B8080EEB2B012F715506445A465C4F9728004A156A3586AB635247B2A41871406EF63724E71926341B3380B9046DB1136DCA5415A8B9250523D2B2A9B817201139B127ACD01339E61A6B0A69748DDD637355C54EBC1703908503FE1BA45824D0336182A8872113C7770802DBF297B6B434922B84BDFA44FEF75C2C8079DD0450BF6A838BC46B4A85A733D2008DD36CCEC8B65EB76094F1C79D4102B37CA127064A59009CC2133CF117C070986748984B99D5067B69845EB023D79E36218FB3F66D76E070835428C5E220A506270CBB8B86A13AC68CC89ADD55B3ADB99080FB4B70E3B00BAA262EB4B9555280A3746338D0242503BA312377DE77A5471BAB2BD577BA8F66E535702E7CA71171521FE47A4E1ACA8CB623A2562C93C7776C99441783930EB2A3471E941B229804C7C8211A9CD86293B70B94595050E5E954BB346BEE9D2C8B935C178709A38865B90EC5A39E6B641B804C4664CDD104B763756D17C24F26C23DE8683EBF7F276F2A15B2B96F1FDAB4FD36306D9CB8FA4" + }, + { + "tcId": 119, + "ek": "681B13426C52D61C5F1C714D0013B5BF816D5A037FB9E3AED09282E1B1B7BFFC1358D06D574A8E12914A7BA4A819088B5BA2CF9EEB03EF059FE8CBB3F5846B2CC39556F76374A38A1454A3556926D136970526AFE06C3870D27520F3B1773841DE27BBECA44D3C3290A697C07338ABE3E4673D406B75B34C8CBBCCE457AC80D67E9884CB277C06322A6D5F029998F8AF5654C129B13861B78DCB512FA8B952737776E45559B17B8492E028BD3726853C8350904588F898E1B7845DB793B325AE1EE220FEF09CA2E22D37A37D48420A345048E9E808E5DB035FD2039E844AB7A18B2AD68AC5D522C8C1865A4C21BFB430C415B54373037038321F259F53507900157BD2F6C8218026E0122D0485825F8C716DC35B1BB389F7F6499B927997648F6B57C1AC840F82FC0866FB947DA1033AD63DDE91B0B9155BA4F8A046C9195B958B2BA60A1E8BAE06E156C0D9AF8D678BC00C6FA3D88FA68398AFD61096CB2744D10BC51CCA7468AC96B7AA9D6679B717BAE43C78D08880B7653032FA24568905AB81B3E003A6A8F0CC705B18B983CBBA1A6BE957398023C19C011306D7CD81485E182038EEE33A92F36614B777BCE93E03DA1466BA4037501A0A658894270398B8581A59BB7421176FD926E10C284DC360A308142B986AB1B3338FF3B965D849DBCCA9007C53B2508A0E179EA19C0D58B72FAED6554458CFBD0627AD3AA1ED0B4C3D23B070723539371A63B50FBB93C2B4EA1E1B7BCC627118A96736A69B9B83167C1EC671F4877AEE30CC579B41CF917C9F710BE1E01C2D041E7459579EB8BBD3397E930B043679732BE6C2E54A6480E80285B45DBC11467C796D2C510A8B0156481919B3D84F5FDC5A8124C26B4BB5C29C599C5465A0B2AD1CC183DCA26B1BD9CDD1A51AB9036E689A718A73293554ADA3851EBAC2851E5B0AE5609C5528151E1546D79643545786FAB6A32E100AC388CDAA94A6552217BB67147CC6199AC3861CC54012A33D1CC70D5BD261C0171DD29776550C2E915BBF5553AC0B603ACFF09374563672B1B3A4EAC9141A0B1B7A64C2A77D05671BF16157CFD83A754292964D6E74904D28ACD51A2C306207F5C8EF5DBF008FCBCB530D4573E3FFCF8ECF" + }, + { + "tcId": 120, + "ek": "B6DB87CBF87CB235A4E6D25DA0837564922460094D707AC15C59047622382CF0B6C22005511B2C77F67C6F312F4BEBB7EBD21F0420BDEF89BCD5531CE2907AFC4076CDB5C1ED5C1B70B0A871533288D29614C4932F945F2E8BAC5089B9F88C3696295B69A19224C66237F80856D4AE81DC8D50F712DF5C413DE40EC1070CB987ABDFE3CBA1F6233E5B585A72C0C79C6D9D0C3F0B499B5744311492520D735065C75A7C7B36049C19B697BC3028A09217CB631829EC1317CB1CA0DFF78B66E9549035B11356001D972120E6B0E7F70C876CBCA96455019427E2F317C00898E02019DFB76457D3AC2DA8083324BAA58C095074A7E224B151C4AED0362973DC9526C7C14D0871161570E4905FD9EB64B891401C88444EEC8D130B6112D1828374162ADA879CC39ABBD698C2A23E4A1A408D78549894C21AF04D8292C516BA8420651546B9C45B322CF0C28113F46D0BA087D23605FB5CCE7EBC8DEC8A25A4D37EC7B74BA643088E5C8C2966790267A5A14B5FACD7568B31A96B88CEC1B62E8AE1B4F5FA97A2A158C6471C9291BE7DF29642D3B738999558E0BF1431AAF8559FC3F00C5C9CAC88A4C0AAF84671D4C027A473C67B7B30F9560AF811A9807BA4C15EF0BC1F2F039A27469499C30B92162813A9C8AFE50A92560F0D6893DDE670A2C250722C44351930304936E3F3140739A3FCE38F8614AFAD2C5CFD84748CFB7199888822B240B504543EBB1DC8C11BD198ACCDD8B12DA2311E0243735B7EE2DB157D20812940AA68D92A48294BD4DB3CC5E5AD470021C243615B07539224585EB35EF6D798578133987C6D1DD7032B296BA6E5B464C63F966244AE161EE4D6AFB8754E7FE7BB509A2FCC5826AD3122F13904AFE7130D3BABCE018B366CA7943C293CB9C24D3062042221C5EB91DC9A9423BA8F8D990764E5A3C978C39222963EE88D67610C139BB188C75D98F5554A125E0B418AA3F109E62B5C72B20607F471C316444EFC472D3051ADC999B7212504EA632B277F5E91238B0A61E0ACCBB817A970E747FD02C49C37025659657BB1A19681309258067464C972D1AB428CCA13509F48A354987B75F8D675400DDD169E2EE25A987E4094C537DB5A5829BF2616F059F5FA97A2A158C6471C9291BE7DF29642D3B738999558E0BF1431AAF8559FC3F00C5C9CAC88A4C0AAF84671D4C027A473C67B7B30F9560AF811A9807BA4C15EF0BC1F2F039A27469499C30B92162813A9C8AFE50A92560F0D6893DDE670A2C250722C44351930304936E3F3140739A3FCE38F8614AFAD2C5CFD84748CFB7199888822B240B504543EBB1DC8C11BD198ACCDD8B12DA2311E0243735B7EE2DB157D20812940AA68D92A48294BD4DB3CC5E5AD470021C243615B07539224585EB35EF6D798578133987C6D1DD7032B296BA6E5B464C63F966244AE161EE4D6AFB8754E7FE7BB509A2FCC5826AD3122F13904AFE7130D3BABCE018B366CA7943C293CB9C24D3062042221C5EB91DC9A9423BA8F8D990764E5A3C978C39222963EE88D67610C139BB188C75D98F5554A125E0B418AA3F109E62B5C72B20607F471C316444EFC472D3051ADC999B7212504EA632B277F5E91238B0A61E0ACCBB817A970E747FD02C49C37025659657BB1A19681309258067464C972D1AB428CCA13509F48A354987B75F8D675400DDD169E2EE25A987E4094C537DB5A5829BF2616F059" + }, + { + "tcId": 121, + "ek": "1127010605A456D20B990B0AB0F55B59A87E1A3BAD709147411C9DE2331ECFCC0EF42BC78AF90F5C2153EEA1966E7B07064C652FBC9F8A702D47FA0E61947AAFE2A8ED76AC70E42AFDD5C8AB643E7ED25D2A7AA6E54B4A3CC989262BCE34364E1194A6F42C80DA1B40AE63370FC90AAC9B03DD5A979F609A58DAA612B19FF338503E71C213B8CB314694E2B73D0DA2876E945ED929AE0E6719B9933A42BA8E571640EA2657D6478975892BA3FBA6CF5094D7829E5CAC107F555E474C6CB6D8C3C4FA6444DC984677755B5608B8841044D95F99520F12D634BEE5639BD94D8F890B125C53E2F0925B0C16524C087EF369F8D550FFC73F24D59D4BA555012223DDE4A866146D0D8588F2C642FA14C89D860F1CB2213BE7971F75B83B5602C20B7DB29B620E047B7C29392D448481BB14C64B7E513308C4C92FD83B558D3A22C1F83C3C698B5A8A0574E6A844E9A77970C1A6223B94FC2D38A1886A54C0C5D660C00908A2BB4F2D07C66234CB4148ACB5A04E0F718AEE8B07C928709321B7DE96BAE59433E492CADC210EB08BCD8406B2A4138D9DD36D8E523948221AB193C4FF9804DB61010E659C0248B4685AB5BE49BB1A96191E80B9A2F3751D36AB4DB36C65E702AB5554C4438D1770C72323A11A905E048A43128891ED82386048952FD89EC2B16EA575380C0C46BEF9085736A5A3D402B58612C4F0174507CDFE0744BF5B3059E4AF7BD49ACA594ADB0C8E9A1532A8A6C025EB3B3EC97107A192453C4182900D798CCE96B2993EF8CA3123656B6ACDA7611C4659068171BEFF8CCB3D7147CC5377DFF1AD04F1BC74E90BD6985852601C9082CDFC427A0A153DED11958410C00DD05042B798510877D112100E6B51EBE6A9F5205A3BCABC6287C7D03C90FFA24C27324224750B4ECB8F84B01DC0C50B9F4AC35239046B769D2FB90E1AA79F10C67321035E2B3292476358164C880F0057E1F2466BE8A6BCC57C131A3EBC28780671051FCB40E86312DF2495A5A7BEBE5B915DA317EFC5B7ECD570BEEC09A105840EF183B11789B53A336FC12011B3905E798073B8518DA5294189A60017A0FDC6F570F061C2082FD4F4D1188B9CB7785CDE0C2F17EF2DF7E2C8F538B7F51A" + }, + { + "tcId": 122, + "ek": "AE781D8063720AD4CCC01223E0F60E97984C37C294CD3713611B7386B176A59A7D7A8B6A2F238294FA9CE5A88BCA09C42B55A914C3AC0DDBBC51270E0074880748B1FAA7AB25AABA5497445091505131322090990AD43EAF26CF59907E87969170873CE7700B7FECC7FDAA02B1D72B94A55CB008099608B98E729B7ED859AD49B35231B1ACD903A2D710FE776B39B79FA693A7FC25265E41839031A04B5CC4E4E66597BC5E6DD6621D900BF3503057A9B7AF77AA413104D667B7B1697BD03205F635BF97243464CA7EB73116A69177E3CA98A36B13A80CBFCC4308C2969504BA76DEF01C168991875B3095992422EC1F0F480F9B29BCBF306977DB37145847B8EC0F5B935520D6582A226D7163C0EF3729FE88723A922450A35BC715CB13A8346408668EAB21F4083ECFA47419944CAB0A1889B04D96B27685E909ED020C4B1AB85A04B9878434EFACCD707AB81FB1C41418AD966750713A0B475110F0A9640D7A13E8F906FB586011F29A89F1BA3EFA5D8DB2B698ECA5BD70BC45C13050B7660276C1F314BF9D259E3483B503C57D4605C75D55A736B0802486946D102D2802337EB804D67BA95746825A880862FC2C4D908F5330B4A29C8BE09090CA19376AA01CB043BE91589B9C08501A834BF04CA955B1C13BC0C506A8A13120ABE5D3073012BB095738C41143E1EA1696F82E6C059255D491EBF169599B76DA4B013D3CC25A62985BF4964A53B678BA2EFA55424421185B3B89D7D507D32718A4D60B4C2378C904A39B6B5429B42469ACC77F152D15822E6C46341DDA4F841AB91679992CA937A04B3D425257FC9164BEC314B2D9828EC693D975780E0C938354CE9ACC6A849A8C456769907890D56926A19305AD99BD48597DE392AD58F8456C7A5D90DB5BAF9ACA7C766BE4ACC167C44263D94B1A1753F484816FB49416E8C9234CC53F47910F6C5BED16457E1528E902C980ABCBF6C0C398A696FCE8283CCC04866A5EFCE18608257240380D7F856C006AC360419AFEFCB5B6BB9CD8078E627275CD310D5EABC4D14C74180817E6013D3F394AAF78A68294952BAB480961B0E65700A65F45DC1B1402C6AC52F92FB241F0DA260FAEE2A4DFA2F3B676929643D56BAC0276C1F314BF9D259E3483B503C57D4605C75D55A736B0802486946D102D2802337EB804D67BA95746825A880862FC2C4D908F5330B4A29C8BE09090CA19376AA01CB043BE91589B9C08501A834BF04CA955B1C13BC0C506A8A13120ABE5D3073012BB095738C41143E1EA1696F82E6C059255D491EBF169599B76DA4B013D3CC25A62985BF4964A53B678BA2EFA55424421185B3B89D7D507D32718A4D60B4C2378C904A39B6B5429B42469ACC77F152D15822E6C46341DDA4F841AB91679992CA937A04B3D425257FC9164BEC314B2D9828EC693D975780E0C938354CE9ACC6A849A8C456769907890D56926A19305AD99BD48597DE392AD58F8456C7A5D90DB5BAF9ACA7C766BE4ACC167C44263D94B1A1753F484816FB49416E8C9234CC53F47910F6C5BED16457E1528E902C980ABCBF6C0C398A696FCE8283CCC04866A5EFCE18608257240380D7F856C006AC360419AFEFCB5B6BB9CD8078E627275CD310D5EABC4D14C74180817E6013D3F394AAF78A68294952BAB480961B0E65700A65F45DC1B1402C6AC52F92FB241F0DA260FAEE2A4DFA2F3B676929643D56BAC" + }, + { + "tcId": 123, + "ek": "308556ADD2AFBB39B5E598A3BE859919A026DF5137A8A33C7E165B0ABCB9A44704453B8C4D10B95DF79517C3AC9E424F42ECC2E3B01832536D36D461027724FAFC3A396722EE346EDFE0C527C67C38929EA3340F2A159758240B885C4AB4C38487E5CBFFC9A88C385C180395F350447A8BBE12584D5500CB21D87A47A03EA724A03ECC7C46B1529AFA343A047A36CA9FDE213F2AC51EEBC69F5EF350B95B103BF71976E34031C2409A0283ACE450C0F0146FAB95FE4AA45DE56CA468498FE4A1BFB893B7914F557CBA4ED11091A48586AC2313729E09A621E33C9851976199C141C587535CCBCB9241999B180DA212A5453B397CF1A162D2623BAAACC251C7CB8442F686152D378E15C5567F213A23A636FA3B8B0AF8A83C1A429B532B7F4819CD7836C70A8712B09C8E1936F1CB282C6A4B0527412C5B7860696E74A892C2F80A82A74316F802A5CA2900490C8A46469520B18465455C099E50D71E633ACE21F2CB83EACCE68014D1271B9E68C0A4C22F70281DC50A425F8C9B6FEC732FB5945788079E020EF5974FF8FA45B5633E38A53D0AA7B5C5856E4ADA2F31B949DE961DA705CC1EBAC409486EA0034FF7B09BB2C45478E58B3B95306C75AE9B7883207CB77E98CE54AA0C35E896BFD31BFC5829DD263292E330E647CB51A98FE39441FD556CB8C26AF4979A022471063B0E36035CF977A12A125F13B525226027F4D3170867BB988C87A9C73659309A6A55846AB8094CB8A9158A4E90B10E8D631534A103DB9BA3EF0376C819CA26F28FE51479E25986230BC50696A2BBC68EB9E5001B1C8C107824D2D79A9B3B84F3612EEE6016BC3608CD3728846A500A479CAB90CB3A27644BE1018AB11B9CA17468445D147739BF4B80BAA33BDDDC31A4F2A10E086452D78E0D863C54FAA25DD559E6DB343A8568A9900E6E2A16C1A539C882220D82C1FAC8C7B796494260636A2975E2802181462721DBC7A9700DCD0B752FA9A12BFB6CA9BC4C3BC7A26CD70D2239465E4A8921425542015EE18348B7C0A03D252F9230A6A45A80A1953D0EF06E5EE7868E1563BB894030E15636D9A324A57A8BC2018CF8E2E0D9850429F2F329BDA973C602D022D3A041C26208F9234F803A5788079E020EF5974FF8FA45B5633E38A53D0AA7B5C5856E4ADA2F31B949DE961DA705CC1EBAC409486EA0034FF7B09BB2C45478E58B3B95306C75AE9B7883207CB77E98CE54AA0C35E896BFD31BFC5829DD263292E330E647CB51A98FE39441FD556CB8C26AF4979A022471063B0E36035CF977A12A125F13B525226027F4D3170867BB988C87A9C73659309A6A55846AB8094CB8A9158A4E90B10E8D631534A103DB9BA3EF0376C819CA26F28FE51479E25986230BC50696A2BBC68EB9E5001B1C8C107824D2D79A9B3B84F3612EEE6016BC3608CD3728846A500A479CAB90CB3A27644BE1018AB11B9CA17468445D147739BF4B80BAA33BDDDC31A4F2A10E086452D78E0D863C54FAA25DD559E6DB343A8568A9900E6E2A16C1A539C882220D82C1FAC8C7B796494260636A2975E2802181462721DBC7A9700DCD0B752FA9A12BFB6CA9BC4C3BC7A26CD70D2239465E4A8921425542015EE18348B7C0A03D252F9230A6A45A80A1953D0EF06E5EE7868E1563BB894030E15636D9A324A57A8BC2018CF8E2E0D9850429F2F329BDA973C602D022D3A041C26208F9234F803A" + }, + { + "tcId": 124, + "ek": "1CE165C35B79A3B2B20E76B68BC111ABB59443F3155D732062D47D6BB24E2B066F603CB8EDB5B5E9FCB8EC8C1C156907C280759B8824FCE1478E40226463B92C994219B67976AA7E53D283B58A574D8A2505E0550E3837B0A72791972DB80842BF2B46DF18C46B8262C8C5A8C3550BAA2212A4925278F48028574005D65A9A688F31B8CB82067509730AD5C63F5AB5762E5A0CBF72CD1051C6EE36038A6B74BE0A29A85473B8CB33ECD6A0F85BCABD8BA0DDBB4A1A29BFC023734B83A2F40547A0F43888A04C73B1213549878F5796F7B68CF8F81B5F7BC516717C16FC0D23C0BCC917BF2F1C09B2B488492A18266142EB6846706463AE83904A479E51886536C18756B533009250F2278CBE259F675726A8C2B0635B5CCA4CC69BC142625A21EBB62496C09596CA6620464E3F5086288B0C0E7C628D7797C4D210DD27C350EA1313E0C814BAB616F13E4C525E9BB5BCA16681581906259465ED65516DB98460B90C757B376D4470EB03C129D6518D27B0AF15C7DF834F0756CE21F25B89709900635623A0ADBC0B412E30CCB340AB158B6E6480B798D37E33B7361D44AD9CE19E04364937011149F24BED928DBA35376BD5690BBC4E4DC9189447BECE81930B54419E444BB2A352FAF6719C145BDBB282705C551088A772F91DD8350B97E55DE5522682771E641896E7A631AE2822BA0170B6651336D87613E0C4575A1BC745B0829A10CAB7CF547463F670548565033349A842C35A8CD1CC3CC242A86352E327B983620CB3B985165377EC541EBBDA79B3676560297182A88D0B544D86354CCC055026712E5993844AD61B7DB12D6A78719D6139451605152A444FBC2D65C3BEFFDA389F96306F68672015BD5790403575B0BA7BC874159C3BA879E8F55B603154B30730AEABA0CBDCC3048A569CEC6D37402B66854C4505720080431A27B9DB29678687347697017DD0BED1E557AD1CCFD1856E6C78952ED022BD912D61A1A842CCB12D9588A97196F61C6A11F292A623A3A3B6078D69A5F7D58AC77C3AE81AA78F9687BF5785482614D2604C6B3B888758885F1CB765A57F2C684610C62A6D008D2346540CAC29C306A6566DFD39EA2146268D6BB39AFE70EAAA062AA37E00635623A0ADBC0B412E30CCB340AB158B6E6480B798D37E33B7361D44AD9CE19E04364937011149F24BED928DBA35376BD5690BBC4E4DC9189447BECE81930B54419E444BB2A352FAF6719C145BDBB282705C551088A772F91DD8350B97E55DE5522682771E641896E7A631AE2822BA0170B6651336D87613E0C4575A1BC745B0829A10CAB7CF547463F670548565033349A842C35A8CD1CC3CC242A86352E327B983620CB3B985165377EC541EBBDA79B3676560297182A88D0B544D86354CCC055026712E5993844AD61B7DB12D6A78719D6139451605152A444FBC2D65C3BEFFDA389F96306F68672015BD5790403575B0BA7BC874159C3BA879E8F55B603154B30730AEABA0CBDCC3048A569CEC6D37402B66854C4505720080431A27B9DB29678687347697017DD0BED1E557AD1CCFD1856E6C78952ED022BD912D61A1A842CCB12D9588A97196F61C6A11F292A623A3A3B6078D69A5F7D58AC77C3AE81AA78F9687BF5785482614D2604C6B3B888758885F1CB765A57F2C684610C62A6D008D2346540CAC29C306A6566DFD39EA2146268D6BB39AFE70EAAA062AA37E" + }, + { + "tcId": 125, + "ek": "E119B3A28A6562A4175EE3CBCD566710FC8F67B68B38098FD9E7A5280AB81C7C66D11768C2C01CE0D08BBCD6962FC322AB0AB394DC41E49B6A5862B37621215E4858035C9F3AF6C7772544D8E9655788618C1B730E123993C54A9B2039B7410226945A6F77366C9B2563CA189D781BB96B29A77B070CDB27A2DA691764AE3CD82175BC8B38D4781A335EB6FCCBE8E90B8504A85DB534B6005971E95EE024887FB761D3C47A811146808A23975BCD4DC6C5588193988ABA89161E73C12DC71CBCE7DAB47130C2E42064021C31458726A6C019EC249B970570C8682D57F9B3E3E0AE5D147C7F2493C92CBAB7D189C99BA00F42BE1A32A2A64C7081C1220111BAD9CA13825759F86C39583B7D15208D13E3C157F19185BA2F1EDB35AD44A080D281F858BBAC88636E6B6496ECA9AC478634207C17B19ACFB4745F275663B63D4C5AA8A38069DEA7526253C7ACD88E2F0C576C9C211A636DAFC15D6A4C51F5030AAD472BF14B9B5C33939BE93F4560864F49862CA7790230A80763B68E4133571CB79BD107D7D65EB8678F6A383C6CB9B5A3566E3181A2E5B20B662816A6D5C7C51B74D7C259F4E18606F6A314379152215A782AA4453610E1831D10D5943586B06DC12A0214C66EFB87AE354AA034AE3DFAA704D8B2DBE237C51791F0EC3F14F718CD267839503B15170CB34186C4D2356170C57BD01D121A7CE10030C386B43562AA01DB2A5C2B70A30C48FA57311830C548D0CD216891E2B99F50D50FB5C106C91C0E52B58656DAB197685E94888BD39955BD75B235A498CE72B883337EB18696AF683B38207073E36C73D002BF002E143B6397428AACE4AA3074B0CFCC612D315A528B634276444DFB676FB00AD086AA9F2C87B859BD229B52EE505B37DA41B5708586C3A525BC7C19DC7A89723A4796A6B0C276E91BA2825BBAFFE0B52AF52A906A74675829E350C53F046F265854001350F095B65835813ED9C9B02A68A0F772552610B8336E7BC0B4CE6701DE897F406783B198640F0329D4EB9A63540EA629850B218DD6D151F8777F50FC6571DC253F2747B6789F7D611AB0A000292A2D58682F02BBDB2EFD705FB9811F7F0781F0CC82076321640B70474FE5B3FA3BAE" + } + ] + }, + { + "tgId": 9, + "testType": "VAL", + "parameterSet": "ML-KEM-768", + "function": "decapsulationKeyCheck", + "tests": [ + { + "tcId": 126, + "dk": "73957CD6FB41D2C199F3714475A4A4F7471EE3B1A41F119AB7B9994CB16E54629B94B3CE78A3C02F424244F68CB89C653A1AA10BC27DC898659BD49C3BBC8AB888068199897B3C8E5D38C5380C4B8CCB4A978B90813735E24C9E5ACB1C5449C325153FD383C14B0C180ED98CE71A84A346C1AF89C1DCEACDACEB2F37D3B5BE15B42B3225962548A0E153A07B4FEDD1281A64932047308C53A19A41584CF3389E914F4ED0B2247643682695359C8326537ADE861F7E17448F4450A1F70A9846CAA6B0858F043127E0684E36C8FA91211EF03562B6218C64B41A40616F5A1B1A441DF5561456B6CCFE87C792873E0740C90236CE74221D1578BC48F7323D1BC7626A398DA6124F82041988ABCA81B932AC435D73AD3812647BA51D17562BC5578F3303AA4F85823163C650C9841417A4C0329833E473FDD03FBC13A0264B24C5D6B4464CA91ED40EF1E0127799B67A5931A5EC036407C9E490C189E610F2765CF47C604588C7A4F1C245A51B9D39611E1B3C6246A75E84A9673B2B2391A3359AA192C74BD81A9859B38121B5629A06C88DA6A2059B674594AB017668B8E0BB0B077DC93C94437C503880C94B46B337952E8283453F641751FAC1AF336232E2C9E7D42B85F813F86832C669B976835C878570135A4119547BF01C0257F43B4AFB6A8CB99D9DA204A4AB2908F113FE452926FC440E855D77CBA6883B03F18216EF184A2D3909422BCA23EA278E5869E9F6C94F341D754C1D17909940060437F48CEB958C027C8C6A5C6FD4F81F1FA595A16915C9124BA3E7908D0B84AFA47117AB71ABF57FBA96B171C912E1F628E7898CA1007DF39AB13A8082367A862159784CCB24D3E1C5635A5433F28AE33BB09E3676848024617231EE0918827683ADC04DCC519C9AE93B9B798AE81711527C8908DC5EFD4852CBF03F2852992F194C4E9705C1019AB46A7321945C797A1251C2453E95085940C2F95AA900472DE755842CE1B624F29907D56727E5A9C1640991849558D4493EF0B68AF466091578276B9DC0F08F41612088525B4FB6AEA57762B0CB8B24CA921B57801B400CC9098C2EF497D41C70DFE97E96D81F3B66119F13276352CC64831132E1602D125640A2BAC8B82F74991384B74957046048B8619A862E40315782218B3D215516AB836BF702CB003DE946735A354E932A665505A42DD1837F448BF89C5C409A9FB9B65569554DD802B1E44B644C5195343A206E72B220A62022E8258B95AB6261701510CB17C9BE3B4218320A0EC65A88C82C9E8AB0BA26F529C4B83D94920025E9A67185661E8738FF5CA1B524377259931340C3A0B1255D4422643B77BAA88E45633EAA8CCB1EB985F6F75EE6BB4B8DCB514533825247BCC553654EB7AC0AC88E1F3A776C20282D4A1CF6423985088079752754B98E0C9A525F92C5C3FB1E9C56CA6E93C1704A50B6921825A44447849594589F0D82354EB2A2B57B28340C274C80A6B8824F667B0DBA968A51270FC51296F429CA0DB115B7A1C1B3F1605D8771C7FA986F7402F8B8C409A912BDC7623EC35530820451838EB2B598F64C604301526C584F74FB5040A30B0E3415707021060CBC23E284DCA2071088A0F06C935002A751EC1EDE5531AB839CE2B04B5E886BE4181A7B1532420336DEF99FF0145A447C4701B2129C300AFAE02B925586395C83330B06EE2C2B14787FACF7696A321FFB7781C9A11E9D80447EB5CBBC40C846829819502AF0108EB08725534B2CD499831D3440E237CB4EBC3FED051F88D780C5D520E5DB88258750A40B12674A28748C4CBFC066A1626302601320A88F8B9B46122BCFE2003055D6401574500E205E64CB298647B5C1765BA86475C6A3A7BD7035C8D5120C996F981AA454F9C5846C550D83AC7D474824B836DE2C0ECB0BC1B1369F407246954A000F0B61F9B2AC538A7C96342DC6D703D18BC34B497A50748C3BB981253C141D2C68D7BC0CFAC38D8339736798CCA07C2CB7144160A991AC84B7813CAA0842526FCA3C07F7AD07DB0DA9CB2FDD14C81BAAA033B91BEFFB49D132C513FA75C07052BA3667E9C86AE00C7B07791A8910B906FCA7BA51CD129CCB73F546E517C6E6F5B03BA24321F37BEF3609A142299AB1AA2B7885D4725CAEC5193DCC5701E61C2121C44174A82C10CD22602616872BF5F585EAD81FA696058FCC1E0BF41B2F0B807AF9CC8193AD3CF123E621B8E710469D33A5697112A91188FE38B1F2705A0D465353F1687A9BB52BFC0CB7E06EA5B2AEFAF2C9C82355FFF61161E5C2E70B4B69832A9E369F861B1A0FD4C80BA83BC8E60533EA32DCC3448E1C962684218FF6CF00B67326D642EDBCAB6BB09B8BE4B87E2507361780C4DA681E89AD27C72C4FA80BAC25177BB5357DB9558105CD42A3312573CBF1078261CC5889F68D9707309C25039D9B3C6B753DF431604EA9CFC5B2BD9BDC9E40170C3BD4B001102AF0BC260ED5B54BBA5ACE010A79B91F68BB66E824A010477431E1ADFF738D3FDCBC60C3A94305A70F574BBA50348221435466B432F0AA3EBB4CA99C82D543BA5210399547445B97AAAD1992CA72989210B178878BC6FA4797C70627463194692AE73924D835C6FDA6BE9A8C0235F6B6F97B46239719A0F95D2CF28C8DB0BC92F02C9FC6789B3750275B100F473C435516D7F3CCAC5877F1A2A426B65B269059C5BBCB479A89D2706942B91EEDE5A186AB60E5C06F3268AF470B16FB5A56F77AC89BE7CB64FBAE6239B8EED9AC8CDBC219202881DCAF91D5BF24835FF938C7B2C9452B908CF95A49AC7A0090F9B35AB70C8804758DE214ABF2B073335AB1D5CAE8E1557AB01736005875E9ACB2B32D1445286EA8895D58458B038191B38DF531341524B48DF5254ACCB09FD6B45A7629B6787D6DC6AF547C34F8916291CB6C347995445B96EEF3797AF60926741E343742760A77B8340086723C237C826E64220D5C1F1C4A2528F56837E63FE97A90D3CC9647981965C52DA8F927311897978A438BC01DD6967A271771E04C10AFCBB004FBC5E4B6CD3B067F72F0646B9467E37459682A457E639A100A6657979FED9B8710548AB6302B42F2459CC6467E093FE95634634494BFE83E2B2A93D7FAA5EFCC4E879302D94A5462D639B4A774D2719A28D035EE8A7D3C5054E6158050D39C4B9796875786D0BBABFA4AABEE774F77C032E5A176CFF0A4C2719CFD246C2A71C3782982DBF709ECF16448243005DB42EDC8BAA6033E17120F9C369686C76C0A922EA7F366E4CF97E56951A3C439458F1CB92C2A49C50C62A0995176CFD98B3F2B8A3ECC81D7D5D36695626ECF408A8E3B7124045EAB7E8B61021613D993E35930F3B794F49B9DB1002CE1893F717DC3B1E9DEE68FF5302B136A1BC7F91A05" + }, + { + "tcId": 127, + "dk": "946181F65279D95AB60262BD637A84E79185F26245002B73009C8DD83B229FDB967D9054D3078FC3D61EF7FC4E49917EF7D23F2F2971889A5376A91A4B75084905CB4DC758B604B1A357178964A06E016AED1C4871EB4786A6792F8A73D538C6AE71C1AA7462EB3A81DF1379A60C2F4FBC7359CA28D2586BACFA5A02CA9B70AB655E9343C30581BB517E7F2A44098921FD573E319CB8C6EBB6AFDBCE57E04F19E44B3871A18145691C03AB7D95B54A9B4F59C3305F3A003C333807091B6CA34ACDC498AD6CCB06BBB715F717C37A31D1292308C17ABFAC60C4F5AC9090911397BA0D5A2531B41406A160FEEA172272A06C4091CA5832F937B40D6BBFFA351B33E040BB97564CFA986C016FD3CA64025B1EDFD97311995E97211CF121913E6B6693440221DB3A608C9578F8431749112CAC3891F05C593C47D82441E48A8F0A6C3A030611E823A1BEA8449D5062B572863D575D17D37D8640AA17838ADDC17FF5733969A8703F504B3E77ADF250BEB6894A8013B1EECC5082458376AA68EF854569A16B53648AF44A5104935CC51374A1277BB485C81B29B15B96B512A3992B814957C2275317B7DFAB37E5C97CDA43A31CF9B7A9E51F791B9F10144960D6511165BDB3C9A48088859D531EE2A84AA068AA1C096A65544A915AAB5EE59D3FB80FEDCA787D706F906ABCD3636F9D39CED4CA53F7947498D2CC4148913073006C37A3BFD87E9CA6C618C2A5E5B6AA7EB1A42B834486DB8DCE0A9F4BD8C9D18729D7C16E23D5BBAA7B543B17B13DA5711E27B151CA852C5A651882578812C4E511144C0225B5E50961617BCBD3AEF737BA245BA9B9168C407844DCC10DE0E29E77A79692318AE2921F1B84B13A3684E72C55CC9C363F4937F3A776F249143F0C69497647C915C3DD3071DB3B3130412A908269CD70A90D8CCDC284A898106BDDD023BED0AA8CC5A3D49CC26D11AA7C744951F95D55F2CE142C0FF079AD43E387550C35A35C45CD990A189C37B2B61E39CC7FAAD519C7C714DF68B17DD150338C7D227768FF10B5D9BA5AF13A49FB120C2C490506AA8672C63F18D38124707E702390510CC7F67B472CC51776B80049657709528AC80189B2569741B67CADC501B9B67DCC0AB873C019360AB4055C8542B549D4645D7EB9321048B37C9784307B1A921CC7FE38BDFDC5099D774D6A8B998C8B628F50932DC052F4BA680123070B1C2CFC217A997C95A6E46E43822A01AB641F833A6F0A15E4005679C47CE476B111A95D3F3A74F0F3BD66A021F6EB8B59685221968E78A67D54B86F6FFB3FB29344C46A97F15C005CABB3ED205EE5E5BF2347668E50A8D1496E44A41C4E1B24B8879058F1A33AC90782E90FE361A519614391407134B93F4688C663919F70E9950D3145EC924BF5A46677C2887D6CB42D93AAB1E0408860C07BB6A911DA3BCF0C7CADF88B722508F16B6F3A46AF679398E462A2808BB480C22CB8B2B98E9123D904103F4A146B53079F317C7F412049857B04AA7CA5731BD72A935529768C888BACEABBFBB00482D462FB335EBBF62A2DCA2287698F3273370AFC29ABEC7C02AA90B1460123C45785E128DCEA6DDC8A5E70C180B88C4E48E3B9F16B1E3F07B5DC4806BE1A777FF0A7DF60345642054A82008E6841E659CB3D631C9D85698BCC4186EAA3CC987E72E853CF329FFAF4AB1A1C2C720A9C23845F527650E2D29CCEDA4B37FA4A81B020F7759CB1A75D216B53F4B9648873C736AA562C9A89D28B7E18945277D18984E836311BC8680351837250DAD643794174FA20B7641A02D4250D952AC39200342BD29D3CE609C45404595BCD946C04D2F680339A0927574EF1C519A684B301038E0FAB173E8C4971AC86558A158EABAF28538598EBBDDEAA6C53EC81E57772761530C1637B94C38D59D1CA95E1A5558409F8013D38C3908FAB75B9A39302E21B691C76BE99742C6401D11ACEE7B29A14C94CD615CAD60B491F3821EC34154694312C19A3BBE34D55B08ED30A31B3CB4324B2083AE75E1036105796A4AF414D72D88441B67AC576839A87A8AA41931BB901668C00B0616ACD67BDDF2090CCCB699ECB7FCC64CD52D50A4936AD12571A359AB3C9A29EEE494468C609F3E1A6FFD1CE6116650CF0BA783994B0BB168C9AA600A311233CB2540349E68A3C0E42B527C5276682B15961984388AAD0B638E7AC514ED77455A5C27CC865757921DC93AF66C99E93C67810975B61BCC44A56456DF68DE55B14C13984C5A52A66C790AC6B82984873C3F9706D7229FD5BBB96E8A724DA8F980045AFA70717F3699B69C0F65B1B650C5A8652479CF05666561C046BBB1FF02BC7221FC1A9B01B87501E4362A80C68BAE43E80763E8604B9C185BEF5409685B5A67C8C3C67BC5DFF682FC1D2951077355D7120FF17B81CB58DC5B1C31A1B2F606CC72DFBA49DAC60B3598D4A291E28482D2E81B7BFF8B72E48B95DDC8EA0864F2CF37A2BA331D8CA376C42BC8F662CDDF6056DF05D688204F3B3A9E629B07DC730451941BA344269E9B30C04662D1536CEF52BA539A8BC681F0F44C2BFB45E587334EF299769A19E34B06255ACB7A01487FF80ACB00BC8CA98A74C7CB87123708CE75307039E44CA7096205276F11C38F28CB8BC2ACA35AAC7522C9CB94E054A4A12E6C6A538B19AC9C0AD4A766495105D379754232F07A71DF9D9307BF4251FB7609E910C224188E3D78EFE05B1539577CF303E04C982A2EBA43801C19A028EE40B089D495F4D068081C313B760742A0B3E88797BF83349DBE8A9E28338EDBC5174A894C2B39A9D538905665D87281C440C2D10A61F41A6604B264E435BCD4CBCA4D5D8BBFBE538CF28CB5CACA2DE7279E4C510A68471E81B02AC1101D5021BE3A86AC9BA598D22861C74B5B266188FE0163C4AAE82210DB3291B2807069E426595B7392513A9E8198FC46763B2971AA9752C2BD7B70DBB2809694438F0AFF631A1B188AF2B3735B53665BF368B16C583370613DABA0B21442DC7922176F71734F7827BE43946C0644E19AFC3301934E45011385E60D95A2937AD477016EC9645693C3556828089453739E1BE8186BEF9527DE2BC5F109228EA7B5036CB36FF08C4CD4059E8C4A5E880B28146A76D2AA6FEE61B40B602F1A955859A01AD1CCB59A7438E6646B6E1466F49CC1F21A69144A56FE27EA9934293D5CA9EC5988E5C7B854C8085A95E62029341338E28C624FEDB1AE1916E26EA89E95437E3434C5131B9009D31A702BFF81338B23E458416A173D684B92ED5C3CB2B138ACF7A0238B86452ADE9F0F850AC34BD952716E16E24B3DFC0DDA58E300F1C0EF3CDE12AB416A7927E18EC9E672CEF6873F88FC5F6F9FAEDA8EF9FD1444251178CA8ACBBFE61B329C726F72D13" + }, + { + "tcId": 128, + "dk": "71FAB16F41A04A2C9453C179D1F732D2D95FE3B16BF7D132F24A04C6C16888A85C12A88E904B3A57A6011C6372C9276E7CA8ABF6F30E19623D4F5A8A79527FA1847BAC7A80BED2B65FC26AA54C278220B82410A18D4B7DE2F82798292F39BC0F66427D80E32340C5146F66518559BF4D6C8C5B0381944B50B6DB5BB59ABF51C922D54963C69C82C4A3C8BFC9673BCC50E83B8C8A407C728735975CC27B6A73C584725C528324D88CFD94B03D2014595C239A6101FA2C3287713DD861C0D4CBA36883091E5B6D54091835638A20279FDB3C0DD7F6C315090D98F131FA203894736C9CC145055B3E6C289C921C2F9EF84176D9446F5CA65E472AC4FB4379416C7433CE564853C9F1C1D159BC5D6B014C835613555D789C4B91BAADDD7AADAD3CCA236B44A0387145640CDB833D0D4701E712CE83D8BDC6778B535398EEA2C0B7B6BF48390E92F93CDBD2459626079A36A4E6D966E0F7389EF269CF31A99FE0C90BB59D44978BC36BBBB0B667EB3A857215CC51D613DBF8C5D68AC5C34C6AA7078C16C56662E62B4CD4BE0E24BACC33B9AF88C935A2A6C4E0A8BB93CD6F47B9E98221AA583028CC890F1605812C8228DA32F046433DF322C405BB5647AE901003A9F88CBD0653E2205E5D166BC5B14E94F3426951523C727F353263E871BD74D2ACD663ADED8891C5514C49DCA63F49BE6CC0A5BC0999933188F8704BD57B40B6A26A67BB990CC632943B37A3BC555905584E73626D86BFCCD144C9A435EDFB8EEFD05B0202BFF1499F71657086A3C6E2AA1A900839F3F421CADA490A091551D5A940457E567821B11C828AEC3563B06F35210BFF66BFCCA1BB61D75D336A85C3627140E4B8EB1342ACE9518D544DCDB215E79A9A29C5195943CA1147A65112A158685A06E7CE1AE851713B77E8B34C11A23AC1D4440840C062022E701CC0912B20AA2901608A70A4C8B36006631A619420F173711B3E92328111C44934092E5527874E5C06875968D80CA23EB2A6EFF2CD8889330823547CA2660917B29BEC650DF087D901442B756000EC643A856D8D1271A491A88FA295AECAC560077C3FB5CDA2D8CAD3F8AE7A703E4DD52273A2603C29B9EC35ACA97C91D3CC966D64B8D81948438124FF5181303AA6F08C0994E63109C585700151525410AADB2035297EBEAB3D8BBB83A62B7A27DB83841A562677AB44A7B4306066904A8235391C39800B48D55ECE16A0BD69C65C444E9C5609953B524817CB1A1B8C10370864E316919224AF5B22417091EDB96D61B3AB4C4C33EE4A9BA8585800FC949AE6C4CD1C9881D08CE4437203BA24B4C5AB6B97B799635B40E6536D2B20EC7C195346BB42C95EAFFC4C17F1413C338E8B260F7EA19A15223EB9A7CBDCF584CE307616872D2ADB37D91B0724A22748869BF112C8141077B8970AC1502FFA4B5B20453A6F286CF7A51EDBBB6F14F76131727B616A70456B615028851A969526BA29CEC975F67AC2AE146DD5FC3F9833C171B029C5D044D5F617F958A400D62C3549246815AF5CB00575035934952CF622A57E60A8472B0ABAD2126C66140AA7B668025737299CEBAA2FD45BC7A0D5BA8083C0B23CB05B8C3E8DF262DD312A0C42ABB9DA0BB81A4429A43FA9369902B34477E57476961C4B54708124683E32AFCA0035E227490E3C9AD5DC0604D7A4CA04682CA79671420B75252C01B0B285E19781C65133C62244A7B927BC7C6F400314D5A77FA54B24AA2AAE296E0DB3320FA835CF1656F28AC4B2A99E87C466DFA2118DBA453E3975DCF91EDF03A956FA503423854605556D8A0A064799E2912A2C0A42BCDCBEC73C25F3D48095C58BC9883D6A12567DC541AC5B6FB5F603F53606AB686A3B370E7E78A4082822DDD91C3119C4F91A5EEAF5B3E006CB1C55CECC9C59EB0B23875160472391BF18BC7843AC6928AC003BACD8C858733389AC9595FA3625D8CB8C7B52170F97C53734797922556998A05C10789261776F9877AF2CA9C4E170B2137195BB2EFAD08577E10819E28B0B2115B29C384D4C7F7A6C3F848888BE9503977C3A1626A750504139753BEA391589C56F0341B363BB7C414B452F0858F9389F24DCA1FE4099BAC591CC61C77572357119B3335A30E2CC33FE8C1C3AE36C67865885E13CF58709AB61A68E16B7E8818A500C9E172C2ED5B694B0C83C40A76A932A5724B40280E63F327A5C99C5C5C5E94D3DA59BB202CAFF87B637C471CBBB051BD416B25368BD7ABF2CDB29E179B8E5027B3ADCA243C64F634990C2304AEA2387A62342508871351047DE7238E6348F06AA39CF5943F63165F1D8C82BE383CEB56E83732E35950D275C19A25B7FCC01CFFEB543F5A76B7B1C21B788A6616982A56C8A83746DC4650AE61B9BEAD06487BBA5206AA101917EB251167ADA5C2FD3C52CE25F4652B2EC029BE8CC1E7E6258A588B2C9370888A4198ED943FF7C048B05012DF529C9A93995CC334B0C6F2D185963C8441738BDE192C14215BB2A5BCE23D8BF753C35241602D5288123282E207C6D77C81381139D0FCB4378BA8991FC6007017E11294C15E2AF6B564B7657B1DE004FC158890140ABF7A1934B573AC39C2EAA2989C9B78867D521D8E8CCEC4033BF67086A3148EFB54E1EB28760469CEBE38D63B18FE9485487251F43E102C95A7732B075C2151334F45E89D92078C6CA2A17914E9632500C7B6F3B20803BCF046733E85549AF68619AFB6E7CCA204399637B0AA942AA9D87CA0A6CB6BC2C4CA0A11B5F0B31BE444A1DB2D52B16E2340B3A1CC39BB25C9316E51B59DAAC0800681DD41C208CB54FCEC23F33BB765CD631252455F81B6688981FFF250DD44C1A8E9701B4B29AAE74785C7B70285155920A29CCB8C5703A844F328B88D7350BB3CDF1F9B38D5CABE7376835E59AD2455CB3D01247A86F5535CB1B16369FBAAED8D16C6851862E331E423B8E10E580CBCC234E5B3D9B1496A1A0C8B1E192CA69C7D8840FFC7BB6D8627B4CF07C3F28A20068AF6C3B7D3269227226AB79A01E7B6CA627C96CDDF3538154CE192224D8605147C15689897014B477EF604B1019913D8ABCBC2A6EDCEA37519C7505AA15E215A8BB9C6F444A07AE72652EDC020D6C5CE773CFECFCCFA931B035383C7E8BB12FF4984523B715AA4294006C4AF0B0FB112516281A8414072EF2ADE16C94F165A031A733C67B98A1357FA2B21140D98003B98B5D728F4D79B6D3B40C151082B8F2318111675CDAA6884C9542709FCAD47A6AF165AF478EDD0E4EDA45869DA0088523BDCB59F02E2A6BCDC6522E7F48695811A3457831D51436EFC396996CEB85A9D2C0DC201E0A573AF586A7F360456EA0A918CFDEDE3C9B96FE6714091DDA1BC08C522F359F6724C8A72C53EB2EE6243C4F41F5" + }, + { + "tcId": 129, + "dk": "CF7987D3719D7C70A11B617C6FFC4ACF1B0E559A0C51B57D2EF5C1E404A7B5A8A534274079730D39D9B75F50A233729092A8712CA083C05C010EDC2F0C8640A5F8A4C250AB5C93B761024DD2E4967FDB08350A5385F5A2700A51CC7C464A460328F5B3F2F74C81401809D2CBD9C4BCAD15B4D4F7458F924B1DF10BFA9060A6209F25F395C7C84F57013289A813031C1C8700C8FE1718BCF379D8B929B835090399010AB378C1E385AE7769CDD91BC1527C938B0C7AAC3DC1F15965D2C34DA1A4B2C9305DC4059A128F46C96ED85C040BC98017CB27B88632F71A424993030D7C7B16A67550D2A12BB20E93EB666E53762D18718A0A7F803821A3740A5952CBA8C2CF7ABC2D90AAAFFF60ADA2284ECF5110ECACB93F9596A1714F18810F57C3345FD8C2A28276B637693E8366FD3402391A55A604BC2F76B9E7043F0923A77E7B79BE33CA759171E664AC23E0038FB76ECE7B617676B17ED9012672A2720180F8D7CA3FAC7AF1B253AF8C8F68D145CCA6A3627A6C34A17EAC5A0BDB63035463CFB8495384DCB3F151A9247133115C7947707E71A85767197701243505237AB9D21A1C30B5F63C5EC43A0E4F891DDB632D47A7876B331C12DB74ED1B1306B7127CF4C80966823DF239B91B15F3A16CD2B65563803851C3ADF4B3780CB39AAB10671A8BA00D50C4245B55C8B466419868169C25D9C68ADB272488365F1FC89004165DF2340F3C858F6220BBB2C0721CEA1B6CC37EEBA4CDC9790C030417BFE9C4A4BB511480CCEB345F0C986962557E6D000E11398841C55AAEA1BAF568CF4C7B8191A969E9E24D8E73CCF50097B741BEF339001D674FA85827A90ACF311A8B0F580FFFB98D0146AFA365B7B6613F4CDAB352866C185534B9F7BB28E41C09A134DE7BCBF6B2090C236DDAB3B8369221286A75B1036098F20CC8B993685348B79252D0614186609123339A88607B871956E0D2367103C02C24BE49308EA9EB26A345A549480EDD709C88CB3755438B3431AD9178A51AC27696623305A6848E7C9B7A974536CA88CAAB3C03F9202CA642359AC128FCB80B7AA0C69889C0EA938CA57AE63267AB2834A599A7AFF43DC7348E2DB8133BA22C95C109BA093F896C32485BC6AD1A418B6B900C4C35C6360E380C992F243C5B00B7DE41067BD92064C749A8D75266DA25C93064C33436F6DA9A9B45839AFB9AA139A2BEF2B544B6362C19BE8F00B253149824A6C073061D5F0ACEC8D7009B1971C6514D6554CCC40874463CBF3D1C25E9CB2A81868F1D4CA58FC38DA36A371959058B547ABFC842696BA22A974AA7C9ABCDC65E5D907C4411A0E8501215288922C7241AE3C2C6C8C8E03C58A2698249D0153A2A78C5C3845F0439497112EB4978B4D22510E9BC5550B281C1108C3B5118B4BCDC7408F6655B757A3008371B3BA1ADC484A92BE27872504C65DBCF2FB5B218947549D390C03334F427A596F8A6FCEA9ECB879D97E73F3300191738AA1E32ABC388049284BBAE29081D947E6C6A6B2D99962079B446FA8A08CC98EE63598F306B3E93A8DB5173DEF2B063FB50AEE9A192C6744BF4C54371A02C8573818C42628C50E460283950A1E319046A661207CC620CB24332208CEB1B0B81847B5CE70B653A15AF535928B79897B71EFEE062AAB791F21B3861D78F306B7515E010912183EC248291953479612A6C41403196A384126194306ECA5524A3E4628D6A3B3A8C86CA0247C033652F49AD68A14E19428471E920642B26720C4BED1BB9B4161A2E921F49F93F6CAC4FCF15C09694A375C446051175E84A32A4077B96478DE7E9782271805FC40291E83BEB1AABA5F60982057CC91BBF5D365CF8A4811F978B84C376B00B9E71C6328EF7A4CD34451EB9959738BF82BA5130DB3F9AE200F5F0A14209C015951216321352EA7A7B52835D866C5F053654E0757079BE95F2BB6AC073E97BBFFDF2537ED631D0E78FD378C74DB75AB5129C23389B0A789C7CD457C1D79C59A793254B4B9C5A23B80A910F448BA4343622DBA39F879707B6803A885260B11233E34D41D5047CB28DA4C74E7692B655993CB873C37D446C4C32067F234EDC06126C43022A36B782B3C0038575071A151AF9B18615660B0893D445C5E16A33CD7B80CA77B065D348435C74432B34196A3DAB0B5CF5F189F6D20B17FA1D79EA526F1C157E683F014B4863A50A7EBC661205C435E573722BB82CE13573506A4380042B914C5ED68694663F3D054F3C676441828CAA9629BEF4B7F80575AC42C6F8068E0D13622111259182876489C4320940A798313DEA5E40C385EC0BB4DB345F0F8ACC0C652EDB966BB1DBB0E20C5797433497482AA2B6BDFFD9A826116B0725C56F48C90C78745C824705C0C714450C099AA7C28314632C19ED9619C669856C96C9F91AB9F1D21129331165D50D879A460E125CB4B43517FB59BA8557003823EEFB28B3237821581A7221BD8F9335DE0308B6ABBF506A4BFD747C1CB6411AD17275DA05F69153E2901A0D491FE3D43CE54540FE906D4D894E2136294C7693A52340F46C2D7EF49BD2B824003BC80B697B846896824A93859008098B8D437354CF255E07D260B23A114F782E2D2A04619B77CC7AA62294671C88A73CD0C15433A642F1142EC010EEF9580657398FF2A3F7A466D6627CC36A56483A9A47C42046F665D3C199E6114BCD5274864A12DD8C58FA6495AAA78B1F68715C0764AFD0BD7675539F229FE93067334C9E98CB60C6B7562E7916298AB6F486905C210A6D121FCAB364125C429C234EF7D38D4B0B6EF2F63CA8E96AF9C97F7C4543C320339651B297E43EE21382F190010F94766D26CE7E95A7BA7545FD6A5054C16DD6775953F9433A8C7289D6BD105A7B6AD385867A34C7119138069089C750D41A87B8F936A04A9A4D4242CEAC2007473970DB68F79617CD012B9709B85879267DAB9C5DA0C4BB9941B8D7C163B7189FD80EC89969A9CBB6EEA07AE7054E341643BCE39A4ECAAB74442A00832297749D69D4C83C149B8FBA991D05C93D02B7B5B15D783B1F89504C52A0C297072921AC14CD5994BD930008884D66A6BCC74AC213230593EC55D040665F8213610203D2D8122083A410DCC56F86AB84525B35C13DAB9818C030A0E4BC5F4D73199402C34CEB5719A8320175A5ECE886B1F4A33E924EE4C67395398E5C6C415564319C2722DF0C014B276A4F3807F2AC046F831659A86B0B1872F5C911F4D633C1D19F24A578870A80B8F5195A682229BFA3FCE275F2E24577C51F7097728571B8889FD09D79DDE3C8292044B22719927B2101F55A8E0B6C497A345498A4757C95779C7E0E3C48C04D5212B6CDCBAE7A90E46B5B773B91DCFC9754082113A2E43503C762A12FCFC2D390067CB027A7" + }, + { + "tcId": 130, + "dk": "0D9794EFD86856A2231CB1143B340E9F6B518C2684999966B9A1A88A517A7819B7E7B50E37A908D2D65DDA51CFFA716BE723983DCBC668D8B7038A83F26C6329A63F303409E3476C9C68B2A790AEFE23069B67A4BD51B35D0BD0B3A67205C58820318C6BF056DD10925FE983C84452C9E64EE15595B67B54ED16A6466392B5F99A6867BC688076919131823A2B7641037B7542DDDB708BAB419309073250CF04F5125BEC9A2B8064C430084CF2104DF609796583532AC83B46241B3A3BA6E9C30E3B0DEA5C5ACEE8A7DD700D2526504BA251357032443A63933B0B78582E57A88E3A7C0203C38DC9A4378E1AC43D310980C3A0E79948E54C06900BC85FD464B5C1927A7967F77680DF216DD05364543A72C7A49938C8677FEA37F7129EC12A58CBD764965B53223C0851B96898F76970F2CF0069918C55155F465087D5B81CA80597E70CB7D04AD0CCC00ACA6C725126CB861CD11211FCF4337C61284E448E5D788AF1B5AC4F4895AC3A3337C883E4FBC1BF5A3A09A4B9A328307A9A01DB92C1E9C3B7DEAB48F7C1138A5685E9B246C11A4AA51A8321199CAB1C436BA8C414E8AA964C7375D086D60A3ABA2847281B0C44BBCCE1374CF758133D27C020B765C6C1321167B7EF009C2EC74A53FCA3CD8877779B444229BDEBC78A94152FC9912A525977912909573A47AF50C727262E6F67512ECC04CC186A8DAA84D2BC6450F243FD725FD785AA8D2C90030C320BD4A915466647CB0EE607A3FC13BBE851B448C41A21F6A831707DBFCB21D5043F7C12BD08A6A0EAF682347C0023D519810216D16105B9D3A38EFC2A1650A2DDF0BC34B647F5419365E54ED2D706813953CF2A43E5C65217DA5E222482249656AAE66ED89118C09C5AC37028817943A823B661E9BDCCC6381F38762556757DB88C603637BD64BBD51580D3713A1C11B33480596A0B0987D4A27EE65EA3304CE8D20E07924ED7746280CA0BFCA5CC08C77AF71B9243033105A6A2B585954DD96AC4C2956D561FC5590F6A2B057693BC968308D98BAFFAE1C4762A21DE64BC3CAB99C6128F0A7CC6359408DCE176943B354FF52C62769A6DD998BD39CFF6A375B9C1928F0815FEF93A24C395F0302A8A77A80BD6A0D0DBB472800098055F48E059C4E8C0D3154FCF10362A4B8579A8BCFDEBAE9A8879F27232F47C97BBA3CC48E7BB06D164ED04A87479AEAF4483CCE711A997BF4A2553B4954BDE0A6310B961F003C467664059723732F95A0EB17316E98F534A5F63BAA6C9237612420CCBE18F16C25599907FE0A96FD9B12577C0A5B11B28E3277CBBDA2F7385C28C02A34D11671934CD523B44CAF96319F320FC926FC40C5BECA925CECA93F73813F9854CA7561F6199AD9EE5402F83B2487591BD79B1C3BACF506C79285B840D510829A74EA7423D01197B15BB2CF7922B3FFBCB1C196262D21C8B9AC809370EF3458852462411E8A28AC4A92820BFB622C542ECB9F7C47F65311494D9989777240B229F3FC8487563A90C74C526C48292911FF633C402083C93392569D6A01DE7A9E769950A09B0062267D96B893F4583991923B9370997436526D4A573D2129B3A4435D549DCA144EEA478B7C01332ECB10239C617AA917110A9BBC26807C227AB6496AE30AE5A383C11F68E013A58CE110ADD882EA24C08B0582C51CC2FF822790AB4221BF9799934071338C7EF0B0183966422775679F21B4544326CF20C0A970516B47AB52338F10023B68102D30BC40091575D96930C38CCF7E13306A341A0536A1813151EE4510DB1961230225291553702AAFE69B527C43AFE2428B4170ED5945449787E4127C15FFB0D51465238124293313E9FF308E7E3BCD983B62E433FA4825351AB83B89C4DD958CA52B7551BD1BDE91C81134BA78C5441718599D698AB2855563B162912A0A9D3EC032EEC8D38F37FB6726A6C290C8EF3B4FF22049DCA0B53E47561C06731054DB74AA7C8E5B2AF96C46B17ADAA27906C42ACF2510DE920CD68572B02C71A6D35BB2F1AA7F95413B7830033E889D1D511EE53AE310753D1C41441A04651A7B7D75840A47CC8E7F6B99143A01348C0506B5BB03724D2597AAA44921F316153F19F64513A5345161EA53A7E05055EE57748EA3CA8021A5C1790741955D48BB173721702106111C5237B5951F5157E4B6B592B7643CF5750A0325CEB9C72FF8312721878FBA760C604AE98EB47765C3F681782E1919C5172136687B1197B4760C29997710A6C6B34508957D11BC7DE10C8E2DA22DFE0A743681ABF047F9B648093C70F122421AB87A96D03913528043BCBC9007613D1B20659A817D33192E03BA33B278A919CA04E3B5D692141B41A8F1323873FAAA97212B47F18544903A4008675ECC5791B2BBB73D273EEE807A4E3936902AB421C165943C093679827D1876E851B2D436E6A7890F12027AE73198C907E8F96B43BE49F1F1661871651C041A3CCB709BE4500F0B0C92508CCD3820E64BC77BA2541C0041C1F38CEC33680D2B487141591B03659E85C47B4664F51B85EF4C687E75B264AA3CFD3F728EBD5501BC29EFB0A41C6D5594C2960E080408468B4228466D185BC40296139B3270E63AE24E231A7F18CCD5B6A82388327790253D4697E9429B5D61C64685B3368C2435808D97B28A16C11AEE26DCF36853BD13982A332200746D8CA98C1A5B572E07BB1688237DC21C071C04EF6CB4F2221D96476D2BC127CC37EDB177190981FC1C7A7A1F4A8B93B6B3FF75E0A08A929F0A2D8012C1540AD93C767A642542D23849BC1CCF74832524A9B7DC8C0E6D575C0E67C260AB2AD3C69AF532D66AC9D4E57567C6A12342343A40AAAD5F11D03F8636959822206ACC9753F10C36C84312B6944C37E979B0C898DB1BAA41D857A6D8A023D94C588939644E26B98379B616A43C9E4515B00A67AB072587C85816714C05857E9D9A95A1338F9E9C51348568B70126BE3C44DD9071B67006473188F6B255A964A2366C9303AA0F841B362853C1A8B95BCA09C8F387F4636B68C16AACE9C536D8A736FB780CFB7971E3B815134AB897311D65B1502ACB8A890C8874367BD00CE1B2988433945B61A0EA16297625ABC1E6775BC2A169D3C946B606952A30574C2C28BA1C2929CA712F10695835BB56B5D65246BF9A4C277291DDE9A114491648ACA654C6165EC6BCDEC014D9F7BBF1D3C293328C19A090A72F32053B76EF86B3F9260B280904DE10A72A7376150D778B87986360509EE77ADDE7B2975821CDF0D4A38AA2431BDE5941547998C3ED8FF769E412622AE8411A99EFA1A44744BCC351CF920D46971495849D14A4672EEE0C6D03964C8B3C942C6A0A3CED5271E092E1AF308A2EBF70BB9A91CFE0A2FAD997CB521B94ABD2FA48F2B08ED" + }, + { + "tcId": 131, + "dk": "CC31B1238B2B6B34B0F07C289D207BEF040BA34710C1F6BE607359CF0BB3BE924FE929633758450D603A7EB8CDB3882CA8F561F4D4762551CD186029BC44C4A4A235957C674B758335D0AD81302E5881578B0CAA29D9216E4B05E51342E3041F8B828E1DB6B5F462AA73D9662120B44C887247A877610A20628B233A141CBC38C432DABB80446F605B148E018B93F78B053C91A8FC2D00FD481143870564474E626E2E24283E776A55B69CE539910A035AE3079A1FB6628FBCB4B1B53DB6431E9616220CC07486490ED8B40254A33C8BD3A19CECB620B713DD860443BAC81026BDC0F49DE7259CD4151BDFC174E3C16FBA803710F4C1F8B41F87A228C7912F69E9CE1A11C11F4254E4A62A104A434590C8A638A9A144746BECC83EC49993F3AAD48C54035C625CD7435352BDDC651C4CE71E132BA01855A8A3C27CD5A9872E309C3F3122CFAC640A690B27781ACCB37D08CC699BD97BF8162D0638745D049C5F95B2EBC2BF11C858F059BC80CC5A71369DEF011181E939E309C675B34EBE68A002D0043042B833783202835B210C7EE5D7507396C4CCAC6A9667C34BC55465CC562EA21BD968A1245B2D3C9799DEC14616A2574215AC9E3B1749216A01490A27CB9F1270979D1CC293B285773474ED7C0C205338C8C413AB665D88B9836B9CC60B89C77126BB14B7171FC36A2165C253CB44D15241F3E3AD9E444D83485A7018702A426527E7C432D836A5D5439BEB9A6D78664D008F6685477F5A48A39A2EFBCAB2678478B27231B7B39464769CBB43306CC5B58B5C9D5A6A4DE10B7BFF4AC5FA2994C5AA3C72009FE53039EFB6020DB8CA3A4075D2CB52E7B004B9453AC908CD11A10722936F4BBCB9B2411F881B18301B76DC434638267739140526F201A33605D5926B33096369B3242C241820FC4E980C00F3CA3B21AA3B47FB476215B9E8CB68EAE5C6B6740EF302AEE09449CC9B6E96417B7DEA9B0F8248D9C0BBE04993EEFBAF9B016FB0F499738287F3758FF1D3CF28DC3EBDA32CEE176767329EC44880EE54B348111FA8A257C2F75DCDCA4C8115CCB1406F4B3C5B07D46A47DABB560527A8225D80F765E8969A7D8AA941C6B3B417AB8B9B5D16A2372C726F3A800F2DF80DCA2B741900AAF5A1A8096C07227591D5E73305D1354A86A6F8C8174A3B98B174A024A79528C2643004A1435093178B4E01573A73EA9988F882E611B44A5689DC21C64A280D6BC849BC080CAD7158C079224D2B336A854C156A28A3C13FDB263D1ED0B041E243171C56FE0C4400E9BBD299AD15B106D0C199F19481F7D39CD86C5289EC9750F74A2DEA4E0190A66F075A14F1BDB1E86CB91745B3F40CE474249357696DF72789CC4166C0115C1BB93712B97BB454C128257ACAABF8C96B976622EA8AC82039424A72551347AC57C7A1D7AA947BC887887A87CD3C6E8820825D670C302A406C571018EC443C865B49239EDA14C7C99CB13DE6794E94ABCAD8833377C208925A934754453763933C9AFB402442D33E0040B8AEF1493097526767B02FA22559C370F60152DF6896B731168A91A133EA15CC44A5C55275E85486635883D6FCC94222B3A1E177B7C08665F120CE46890C38B1E4FBAEF368761872C090977E4EE644D45A1EA68013114582BE4A665AA179A5A43724A12234649863774C96C69EF94B984D08AC68799A3BA3855A03B800D78E92311084427AE7EB4BF1F62D100307B8AA01D2C4C8718B0CDA1772FF2C2B522B1EAC093E7BE195C14143D0675EE7A37F6C1679334637A0018A1853882441C353DBCC4A595FAEF982ABB07638E6305F36631C707F9EFA1EBA94BB552C7E17A14D7EFC1D854832BF689422447B5C0597F1F23EE918376E964DEF8B84B4E34F8C573136144468955FEBC946D2D3548F75AF89548DAA47C000603BD0798CEAA9CDB8D31DC76C98AEA657C9DB55374805FA72ADC26907913BBEBEBC415C7A7750F2377E8CC3CA6908C4942C71A5378DB89D6EB520732418813895903335D8C61A4ECA79D896A6D827AFE9738923825024771E9B2354628A0C8DA579B6C57EBFB575467C24A8C3C7CEA7512FC305A6A28EFDE3C4B332BB68939B3D43938A4698A60B5874FA3F51C70D6691409A5A3F01029A77B5B3C5422F8FB28E8298A28A802489A7B98EC190B7765F33889800D79912A585CEC7B8B1733124E70F7B12065447A79B260FC03932EE0183AB62AD45F64B807A362FD3AC89E7BAC2E83CB5974CB9D661B175362C477F11A063F8B14AE2039B7BA5C75D63B22410C15D9864F7B41462AA2B55BA2E0C2B215242AEEFA112B6A93DF0E5CC7EE20271236972211CFBEACE55E51D4CF8B543021FAA6603FF75BBFEB96D4FB62A9AC058CEAB9FDFFCAA7BFC0483823DA607B73710AF89F126775266BBA4B48F405A347C2B77ACC150310B48659EB86A5A3318262BF7A223DC07485672CD6A6558DA8F84FBB21699CFD3F736BFA4141CE966961B3A56127C06D15D4D05C87156AE49BA3A2DC1B413CB018AE4885208C7A01A3EC7858C2B95160F008ABC127F0D1484DB27B3FA329C6D60593DE1C14A688954A632F61705817044EE3B6F9BA08AC94603BAD1C1BB2229272A198DBB22A7F2CAEA140AE4718C317BC0894BA5424B00D5E33D51DBB597411562110EC6849CA2F88743E9579C01A4BD56B6F6551931F330E27984A9608B9731A65174319E6A4AA8C29FFA668951C12F5A826D2244200CFA7CFD354E55721541A384CDFCB197E43E9B03B8BA615CBD7B2632179607BA9C944208C706A5E83CB577E03EAB257CF74195C5A564763B6E3EA48F58B54F1D1CC2BF686137ECB4E48B4A4782AB2BB6AB7640547B682C25B62B932C88F3A0532B371DA690C7228CBB4CA741E894BEDCABB0D619AD7EE99348561782579E1D5AB5AC4282C184898A74AB2F7297A596B49D4756D138483AB8AA650578734C92BBAB229FC3B5583672EDE0CCF9221FA3A0982233BFFFDB73B66471FB977847084BE446035676AC254BB4F3B59DA8514846145240FB940F974DB67B5A2407052F24A9E8965E7061675B724AB2D29AD89B369D703449AC21D2A929DFF384AADA94BBA9CADF710E130B950C561F0071475AB37A34DC6F3B7A277DE50A4D3B3DF9FB332B59A2C1567F3D8A1D3861255AC08CC4578BA8F4A1F40C1478D14790A34317CC837D6794600A37CE1AA63E4A4AA2528B72968E71D67DF729C9E73C8B99190F306A845C904DF222B9D781A5302A4364F50026315842EA42A4BCB60DF3B68F2C583F073A0AC50BD1DCCAC48DD2B207AAC2AE77459F425C1C09DE738B5276D02FFC5EA054858D38FDC5697943EEA7BE8047FB41F8C4972128040451866721B910B97B6089071D3F728D068D928996316109B5662521" + }, + { + "tcId": 132, + "dk": "0C58683236225B2201D97C913C1C8F59E6B4DCF45CC93825A63A500CB60C19A2B766C80406DCB887340849704AE61774020C3D594897B9570424F7030EC943491234DFA2CC6A489D0ED73B5FD7666110798767BA6F136C7325AA81919DB10670A10AAADDC4B859FB74F61AA7206B92A1F9BAC2097EEB959412582EA0802BAB10C1982A9CB5812D8E6943FC78BF59B52BBF819645E8A3EBE63D38667E4B4C0EF858675F70C4905110E4969A5CF7098E679B9F1B09428257C8946F80753C9013853A05779BB8BAED064728040C9EE43BDC960F57102D3089438381A2E1B293758C9D6F2629A9750955508F6989013B449FC37364468B15D4A8705FC8C1884803DD6000AAFAB12421BDCAA00134F097A0770731712DC928254C6945D42836C85036F7EA7E91A73DC2E7B16D80B0A349A2B4084CADD78D12517AE827A20824505DA8507C785CA186773DFCC6B788347E2B589FA259A1898CCEE5A73ED467EA9684604C2C3954B2DB276901F27BE4669CAB9CB041272ED8A3228DE661AEB448C3C7C2F296481AEA1BBDF3A0F6232E9BE5570E111C53A34DAF4376E6BB9E102407F5C08A7CFB1FC17547B242237BF3344A0C5CFD4BA863073B85D3821890CF3A69A5A4C9335EE02B96A13212354E25570415C2B963A87E1F2A49A834884E96B9D9702251C78330243F0CC041D2728211F31373992516DBA8C8834ABC767D67A9C69A406059E77633247AECC4A33A0761AABB29CAF0A508A7192DA59D31205A6E51462F50CDD869BB0FAA6BA7D15E64F52D91E7BA230A50DFD86256F85717E4620E4AAE1C71021F381EBA000EC5DAB5F740671076B3A8C0512991875748953B07BDD7571D3E8763F4134B446683F4BC8911D5127A9309AC761F4DD880696BA19E7C0B2BB0A0B3E0A6EB7A2EB3E2CE08ABCEBD10A709527C0EE38980D378C0FC8B878B9A1DAC7252A432A508CCCC41398613095C3201FCB2018813170B460F4B7B3F2C165EEE42AECCB97313291E9AF07AFC41469D5B64E4A12F10DBA79BE92BBC8112C1292396D003333776D235CD10E8854211198C19CEBAF74DD7DA6844FB86ED34822F324D95037624973948EA3253F7B80C7BAE938544ED2C8FC336A973AB724FAB5A7A271B37A9167025690725405CA0024A694AF2E13FC2868343283D0CB497A6E994031594AD606C6A056F8FE0A7D69262A31A6851DA75F46C6B2310828C9CB3C8D645D9C9A3AAB4BC20B2277243037930AFA5538450336AA67369BCCB86F6751804653155D5045C1781C7B2017437422DC2C8D1747D84F5B10D332F724A099D48B72BE96446172D45D4654C16CC3D7AA4A374B99BE05A1697285B683D0026C8D29775AB4A10F8741FA6330D74EA867EB2705D24907A7BA8E6D4A77A38BA2238A0ACEC0DEF720D6C66220965BF6342A57DE0BB13313E6205A673151179A2C430C8123B913F4740995AE80F0B503653BA207F8876148CAC046B9953C769CCB33A9860B443AB3F30459ED3724019D68461A28BD523302F7B02806C9CD21A433EFA967271C22419176723C64E0BB77ACB38C47B3F9CC221FB196F89049026F16BEBC4B2669535B9DCC772661C49168EFD492470D89801F289E824798EB5434313AA8C467277F65DC44A37F8A9B2733711EA867A6C45A6E50730016804C54AAD8B96CA3EFB42E6E27332AC4C6EC19EBC80A621A18B0C79073CB294B61596D0DC53D6F9BF85AC5647B14FBEC319AAE092193887A5AC0C4B13AC02C5074BC938C076862DB00586C2017D5BC127A83F763C0AAABC61EE15460D5B907118A10DFCAC069125875A143B76930F26A2083CA12394B00385A9720A970568776F809D33891F08688E79A261006C7423294280535EB69436F348CA8A600E26CC8273DB550D1438C653472472308369C5743B24A82189DD6970433778F1A01B0C96729E95536BD1B3EDB95918A69208C4913A32C0CDBC0E67C0C43515411E01C564B34F647056CBA4594E87622CC636273144A23421B89A94E4B1AFA122B287A40D0ABACFDB013B236572C7B98B5069B977C75DC287254AD9CD98FB919C0118F598B9D45A0BEAA201076776926A17DF21063F1865A400679F6609FD274676208810513E82721439B3C808071C1A7C78913454CA569F32255E2EC44D3D978BE0C500C3DB81C54BB078F4A98E13A8A7D7958680B58940A2BAC89A340A986156009B477C0411742304780735AE0D255F0E175709BA6A46CA2C54FC493FBC5F92B9B318452D3E78AFE8937E801B73E9585DAC18335FA0749184148BE220B418CACC42314DB2B4CD310FB4881A1DA153D332CE5B6658A6A361BC777E60E67B3BA70E3013944D29150B3BB04C91C4660BB3B6DB318D6217E969B8537CC54E5770E3246D81137562354A68809B13EBC537285557000B33F20FFB494287A37262C3C3019419E0A652C0F11598AB02B8393791824ECC0B4A0E13AE00550DC156A4E8A971A8EC815D824698771E576844A7F9C95518857BA722F63AB39A67AE5E47C3A9DBBB2AE17DCA56553C1A3A7F156773E82B100BBC44704906A031E8F3B11A84707380B75004954154124F7488AC16CE832157A4132AE7FBBE52C623C478C1EC673F5308029A63CA16C6BA2A7064F9A07098A2A6DBB74CEF24C0359B35F0C00F1088932FEBB712561C60146EF56702817B49E4664A22847188D03DC87B66EC77AA00D3B535662BC45196DD30CCB8E5AE0BD41E68C501F7552D512973727456143745556495FB2513DC909E83C46946749BC5EB6CF736BB0598329FAC9F62237038FCB2103C6BD83BAB6DC04B5BA05572767C0F766D1454498DE9AD5B9B1FE4CBA0AB728A960014B746AAB1F521B94600A18B27CB6C9B7D12629809782B64A6C108C44BF792F1FB4E6C4B7F9769213745B31023ACCDD0A5D9AB4E38C8AB67E73A17C0BB9094A72702916654078A5416D22623F9228D26B010567375E85975B000C87EACB7F4BBAECAC08FC2F432C9540BA1B10F5E7210E8020A8274448D62B398390939E6B5D9EAB02D5964C1FA1582A8BADB87C2E8DC9942599CE1B98B5DE477B26C7BFEE1C3D2217384E390E9B4A6243986D66B49B98122D929C7A6137AD512B6E12431558A5F9B959221356223F8834F00C6D6377C5623AAEE2A0E193B3E79190FD4A1165100A681C32D9DBA6D0C3A21085341C85019C4A773F0E470EFE84627B810DAE01001B9524A8A58E791B089E506B41823F62B15C7F2CC5AD4ADC7D4368D2605512A52C26273CBE1D5FDB5B69F9E62AAF5E857B659E99351FA4097AF275896C3A2ADBF8C53BE160E09F7ECE7E0B4D1FD43DE26D09CFDE79F06F7CADF821CC993DDADC064D87174982DE93A3B5582F20F7E36B28CC39109FEE8E192FB1C5BCF2C9CA578742153" + }, + { + "tcId": 133, + "dk": "3E924FD52C44E3B825F65775DC2CA1719C655A255F53EB2CE62870140680D404172F767EE4F50F80ACA1DE29257F643865ACBA3D9558F7EB28AC3A5AE06B2FE19C60C104007E31C1FC4CC0AE2C4D0A774F1B80B967911A22746B336ABC9F64C0F3E42752F6A0BF7A3402AC3302E149BC9AB22C135E1B2A1547B55E6E6C12025578B4294BFFD7930E4C33DC524A0C6A9EB8E1C653632F2A004908064B03CB0D0A5024956CBFDE360E061C2781064E767C4749E87578664E29595F4C4AC5B885550BCB1C24C21EBDD51F1447065368C643A43FD67AA138F3CB8BDB36EDA21E1CC5A0EEA33B5E63A4E65B1F2655618412A49E200CE6D7CCAFD45BB1FC1EA22565FE21039931A5C38BC5FE64C3893C1C456454BF9B8A9151184EAA60E37C5701990CDDC0CAB7849923770653CC3A067A2691C28C562AA236D50565E5AFF0C84AF886B4E7B17FFC245C9784587CE9B95817721C874798806EE7F5351103AF72350082CB1CCD3047203AA21BDC7AAF967DB2D022A22697A35CC6680A11E4796F7DB957AF81280E460AE5E10FD495CB55E00EE8296735E90F7E7001DEC3AFDB45592E8916D7FB76B565C701E7CBFC193FB9B369DC0443737200739083922924267326049B4CB639065B154AF937796C1B52F42C69D33C1146E10A23231214F58828F1911D2311017206E78445DD2070664B7374E335910A0B837989AB8A9DFCB0AD02371949748808265A40518B3813B05D64052A65343DEA1C97A98624C1B11EE55F65E47FC116AF0F7B1B2BE1708F970C9DD475833C6626E3A1D044180938CB01F38EE27267E60273467C61F09363DD376DDA3A71F93223BC890C9C61CF84532CEB676FED2A842A4902A1475D66BCC2219957A1077F2B6308BFA9A388E8B81F6BB693F7088C1743042C6345ECC10B28C68F61B10E9CC76E997D7D4C980E544504C4C35D0C1D471014A74707ADA29429EB6C4BA7409937149D9728C1FB4A221C2AABB68F0BF2AC5BE8CAE8E67AD27C4B00D560BDCC39F1A881FF528944A7547853C19B9C9F93BCCFAFD8A20545AC9E7405F517CA73F2CFD711BDB93503CDE026F32062C9C34192A8C87244C5B8E137C3704BF5FA6B730CA2543B5234522CDFF53E8018C283669BF1A82F979A936D70C3F261A9E1F12CD8C412B640309F751FF34B84AC8205A9813D78160A1AE330E7C6491100AF1725CF99291BB147B75AECB0FB012E2F9056CC4859D48046EFC317ECC61D87E994F7F34DC4B4000364CED1721C056B387C904424B32218121C5A5B7A70B80C3AB2A43C3C08C9CC92BB20B4A29854AFF7852CBA48465BC1F1B3CB9B3C3944392AD08612B66C46A0A846B947C4B67861A91250D36B10AD075FFE0A8E01E20A94F93B68F91C11E2B6EE8904BF181005BCB7A429263D67AD72FBA20CF27390893DFE666D5F97487A365EA109A8F4C07DAFC010365C67D1FCBF28114C483981B3429524B93268324D325814E66080FAC5955E26709EE7B9A16A81BA5CA6A2C572BDF3C9EA00212650711DE89C430B8C0A85766A345ED7801F884C77558BCC960CB572A2B264F0A289F8A666B6BCD43AA3793CC92DB8C5DEEBC4A69019C4DB0DC88B0FFF27C7F3986FB5D5A125EBB58A9185E74AC5CD495E98F97D8F10C80A1CA09E39B06DE99A96EB95018C9FA97C292A2896EBD24B8E739BB459953D9869CD336559C02AD9594044619AFCC8755ABBADE5D151B5E0406C15352BBA786A51C805754933A5B3EC6447E82C228211604D777CE66CC868851F71EBB1E9573B7EC84E4C38C5673B850C97481614B22A6BA7462B85B98B94A8A626577A4C14A85ECFFA0004C6A54940516CD05BF2E48F96827559D63AC2D21BA7B6658FAC27FD480E4A22A010475F53D4816FD12451B1BD3A5B7CA8676C5A0B081554729E37CDB634C084682A9B44A53BF086CAC726F115148D8C92C946645BD7B0182CCD997C758F3B92A5BB2FA036678014AB11367F7F60A7FAEB3573014901EB5330202821258846127DAB637C8BF2A8BD93810264CCE9FCA73F86C56AD1AC76654798A50D0D583BF57185A1C84927F3B9698480816C83CCD7A6CB19A755F13BBC82833AD99391520E0EE41C31264712599E2C56C14ABB721E1BBF38D72A009C6FE71B545996CD609AA1640820267694BE5659963A3BC4B088D126323CFA9D77542950D595C6DAC6FC35B3DEA409C1513C929C01650459E6389C6434A1E13733DF539DD03B68A54A42299A9F1B4161E84809345CC8B241C69F1B346FDBAC76E825C2316F8DF8746FDAB860567E7C15C056FB9839579CDCF686AD6CA6D6A946DFB03F0B294B2DD8B3948CA55BA72F22008F2EBA755901020A379464A91B95908FEAF85DFA58B42959C0A300C0A9712D30625AD4E229ED18C4CFC3919A6899D5F4915555A1DCC3B8172C4D5826BEB8DCCB9482CE6CC3C1E1A6019580168DB9CA57B49DFA5CB592B2183C98382925841DD147D3B2CF875192D5042A9A535DD6093333A20FBF08A95101257323B7674015D79CBAA695604474A05D1B6222472C90A6015952141A7044B15542FBD97A98D829D98B952ECC8170D87D5B969157B86D0D4CA43304B0BC654AB1363687EB5E2E149B6F18ACC9BBA0E66354EA675DD7B6B48092208A4965A31AB8E0E91F3AC61201E8B4ED5A199B98514C72478CC36E72595AC0A80A8CA3B9CF444B32962F94E3939F6021458B6D988C9855209DDF45C818BA8ABC5916F9E80538E1629BE5B213544E99FB1AEBF96982D23CEC3CA8BED5AA8A435D7145991FEB566D5834E169068937B309FCB59C93B68470A831EBBC7FA3B8A197907A1C77CBE89A4FAB9B4CA23D7B01C4CDD5B1AB87A0968648F1D6A00D1CC5F9772AD5711874D9C6BBC466DC238A82229D0916220A7C5882997D094CCD045A829A4C959F25513AE41494096C15CBA262982BD1AA6FF8EC6BB70179054827109BA1A4666CBA4712C1419654E59D2AD22D3863864D03A4D5C210B4F42D1A105EBC70B7BA8B3F5C36C4EB955B1F7C8DF496590586085DB9A42444997D9728E42783B559C5AF1743E5E409D654CC9E8495A7E7CDDE065FA896A687449F40705FFE15B88256107A887C8CB058836C1393C50F69A937D3D64CB5163B1E11AFF3884CF35B23F1346A9B8326F30421E6623134F478D5F010E6C680D803A297B244F6C54865FB2EB38175F57C4A0D399D486984F011001FF80214575FA3534E7384BD5F5C78AF18A0C1E99F14CCAB5D13A46591935DE32794B30FDF034C2F4A24C81AE989532E5F50877738FDB5D3BBFCF7C2A539649BA7921C331A0B704D061FAD7BE4A3829C22E767644094E959F9761ED53C7742EA92B8F3A5182030C86CDD7F133D0CF53B5535F443CD8A04798D12733BAF1534383665DFFA" + }, + { + "tcId": 134, + "dk": "7C601AA9A763DEC267E18B86752284B0A2437CBC52F2278E6EA2158D751E27D342D44AAFC7804BFA9949A7A61C8A68A5150416D138116C6A8D694B424C41ABC478CCD089A44EF15DEAC24CC5791FD375760DB1213D2566BC1960EEC9A1D9C3BD97883BC66A47D3D69616BC635A442328EB4A10F26564DAA295CC4991A62C88056FABBC4A22341318CC55CEE241F90BAFC2A16C1236185090813DD332C74128ADA7057FEA1AA11902EB298487E334B3B826A762315F0A225AA24FEAC78AD037ADD571033145A5243C1FD7F81FDC26127AF46338818CBDE135FF0619EED6CED2415166531C16E877AA6BAED6A19BDCB913370839AFF087C086737D181AB1615E96568608121BEEDB92A6C132F79B84EEBB4914E554F5538B8FC97479C163B7F276252AB1D500626D330190ACC88A150A60B2A135363363E7B5DFC97F2A493829F66A69865F54887B7671BEE7FB1C09D1C1FD7529B9B81F176A932798179322B3ABF65BE1FA05C14B54E6B38094173236C428A2A84DB47C7C145540155442F8919A450686015221AA660070204689B2308AB0427846C81416A92FE696F5A51EA1ABB230405FC32070D9314820077125A94C9F9425AC867F5A499CD123A035297693B099232CB91A6B38A7CBBD38646FA9CBBFCAD8435D27A4A440A6F1026B4266C5D59372A8BB2F698CAAC34A658B09A183F51CCEFC88A99570B99BA3DB005EF70A6C359C5B549880DA5610C2D49AAD1A4683F2C3D8E2A57861A83D3B1774124A20A009001DB39E8B98E3B4969337BA7F1A98BEE89CE1F708E8FBCF03C0725EEC6508DCCE7EA1C471938536737A087971079B8DACAA20ADAB834B03112E344E23D47A40E5B35A03BB882030177320115137894CBD57706E628622472AA56747B7BAACC34D6844481C42AE485B3DC549434C3676135BA916A7B49B7C9352026C5C02E9D8AAC9836D68955B4F4986E420B3D0915B7A05233CEB78DCFB027B2516CAE8C38180203E5C944EEA3AC2375D89B3318B173BE8683866B1797DC62D0D62B214C48A68F2A95C4A214D13913C19131F33C29AB58DD1C6C8ACC413C8F62879928A43356749F10AFA8B0C71358A32F5623E5ACEB07AB7E34013293050C550B9F2F7773891283DFB9786EC67191190B4B43EFD9C8192D6758F51739564841097349B03A7778B91C784766E5CA1294C83864231C12102811A533A2824800173A97299A9F929E3E6A823661DE81CCA326368A2C664A2B4C234DC37907A7FDA67069F230181559C4E886F76E045195BC71A280A729480BE2B6EE1CCA78953C83C67105BE3ADE2B4517CD26C7AD51BBCE11C2777116DE17BC0E8517BC2B9F42731B6312E2C5B97661048698C3E4EC04E5B8299E20394BD2889F7456767053D9D9C41F685132FBB07C7382E767AC22CB94CE367741C8612DB76A4013BC042F897EDC3CC5C0C1402767E98C54C19191FF9726026D94355A04E6053007A1A1C5C9428F9A971BEB41C68682D1817AC5645B443E14080665D11029BE77825281A443C157BA5DCCDB8E944F001C05AAC5617B49A7650A9162A04687C40C164CD9FF26216717048E668DE12BC3BCC16658389E13150E4E25392ACB0C0DA307BA0433104A253735BB4552FF13917A2A13294F51B1A35AB1493004C8A005DFA7E31D82D09C5BC6DA369F7A14749F28F1F3B6DD8F56624799EBE964A25B9C2B704C2AEB21E114179D94B5F3DF2C7891722658803E5F272D799B8E3E42815B31EBCB633B782865121A228E859471C922148BD6F4196F7737A8C3B7055334670DC96DB9265EDCB5D0856B89983952320471F07984027AC0002C7F3D40D06C86C58A142EF73AF819202B4558D40764840B7CEF596BCD7B2424A252BFE14C60C743EBB819C6D63C15EB6AA4011C06358735AB01BE3C251ED6C1EEE66BF852020CE3C59FE220EB073B83EC2515D679A9F531A6D7A611F2A1A9AC16D8B3BC6142314ADD562E0CB4BAFE04047C196EF0992E6E4C3CDDA46646304224706A236881031AE78D07589767C90BBA4EE66BDC44104E1F05488C10E171017FCB7CE0A7CA18B00CC30A090B3981E0BA0CC3C504A840154D8005BB4F41AA157B07511700EA7322A69154C305289483F008D83B4FC54B595A40543051A063A94143EC85B3B94E5B44F2C32892B795070983163BB99E1932C3528BF4066524857DED777D832AADC352CEA33597E71AFF27B069CB857943A961B7535637C984294815C819E1B91AD1A70AC880174A7E01EC2AB6238A4C6A100CBDC26048B42C4204B442AB51DB448ADF57735C05C3BBA169B3985BD8661777CF712E300550425B4BCBC9A87237E5D79B308D56C93008055184F9DD3452BC591FA2333E775ADD2914F4141A196F08C7449ABFAD12451644282B9BFBA7A3F44F34A2B35CA388B1D03D23B924B3451003E9F4255D0B68E0B8B49EBB09608C83568CCBF4B86A594291D23D96444A8A46E6C1B148580FD496F962C4AF568A4EA30C4421040DD97AD3749694089449F35C11FB66754698C9C1183651676BE2349A859CAE3354205F4B349205866373C77F670B9D80E3E1CC78F92C196F464AF97BB49719B4ABA0141715334662CAD1B6034138EC95822CFA31ADEFBB6643472E49878723418AC5847EF75C06DECAD06AC8399E58C977B73EFF7B43D8A24BDEA9DDCE7B09E710C7D3544DE626144AA994C3584ABA651AE53B326C3887B4CC811F64FCA7C537445763416B9DBC483BC2018C428A7F1955F7F4013FBCA408E481BA575AC71E6477E5BB81F2858FDAB4D85C13C88670099FCB0EE141832774F07301B4E164F3546780FB0150DF168B7B624B398204D4662E4036926D5CFF8DC5C99ECCAA2044BF8D1A510DAAC0227665F68A105C34A540A936DB23CBD1B1AAA4A80B00B6057D257F4C47B9623C84878B29E3A6759C5018CD87613D60714273ACCA85C8ADAB5C6A7159D948E5EE6581574C858869E80417AF10021FC20A6E19A09CDB7BDE1EC63E02A22102379342B22CB98080C0A8D1CC99CFFA9904315BF238A0F6FAB3C4469CDF2812B6A4045BC420754A2A3F1CAC26DEA7B4CB8599EB3AEDE645C799324FC17B771584C5C71193D63C0A72C8B9120CA0D049A3F0C7DB500BCE959053F6541C8C67BDB424435AC276647061B539786FA55BC5074F1D31FBF5C157AD9406B256F5853002014C32261A9DA1487DE207EAC97B325BBA7D499588A945A19798AD87758DC546D33CA1AFDD669EF8A547137B6A65374F255499912FFE616051D316DB1D6AD983955C2577057F32EFF77D1AC2F56039EA921B3BC5D16EFD6D117A3373344CD354347CF0F27EBF76C234772540627D936A71A70CD7E13691C4AD936FEB51509E34D86B89D23CA8EF0A72466DB1FF47BDC6930E8" + }, + { + "tcId": 135, + "dk": "8A18821E3747D4173BF19A573471A179E953D613B17A6295C3A11191118AAFCCB59AEB6EAC725BB90C1012B9A4AC94B37972265C135AE55007DAD7BEED130FE52764AAAB7606D025FBD8AA1C68371A5827D2948822732B66EC4A6C030796323AF6A9091AC5581C657BC920CB302054313207C62B9936A415460BBA8923C0120BC90018401FDB2FA328911FBB45114B6ED737A010B6B23CB893D59A93C47A784C9719D0738031C07296CA4654D4417FD171DB217CBF34A709445D6412A79338AC7EB2535140955468476FD59AE7AB62AAF88478EABC67FA5307A7C86D116941E082A1940785EB2E1DC2AD47D03F3F730FC3B896E40C0533552C3D087E962BC228035C62F20979207484BB87B7A8649CB53B46118D8DB36A580CD0D03A01DFD727F5CA611ED091CFF19553F4715AF88A16478F40D4C3ACE002CDA21BCB19C4926B83ED0A201452C71A84405C66C5EBC6501308083342856DF2ADAE930BFFF9531B942AC3576D6F8698FB957B6C0605A9433930F06AC9A8BC1C32A836C224B8F432D48A4D203CA652D21253474AA718545E63A4655C9E808471CC371217AC8078F76B7A1A1F8BE66FDA2577810C85A9925FB60CC56B675952D7A36A4A8C09BA15E923BCAD0BB31E1070D2D3A6AD31665C348278AC645845B182D3C95A964B2AF60F0A3BACEBC7AF70723F802681F2415305C9975C17547606482F4B01379199336292F255130FE089E622B8EC7B81342B240EA24ABF67B718B2CCD1A1C356B02B1DF024F39A7A901A1D3E21957D950B0FD727D4F9B94B8C5CECB52D1B1957451906681B043F8618A5590B01C811CF84AB8EF4C92A54B61178866C1687FFB91CF34CB3FB773A74276C4AD244D89728D41449516A24EC839692872D6D7575FC9BB417BA5D6C07A90D728959F904540779524BCC0E425BB5B57B92D246FCD11D71F5B5FBCB5F8EF906DF0A2BED953A84C98D07D25D20E25CAFE526BABC1795F1B8F47B81CAD655F237B0EB1986893351019923CA786BC005A94E85A59E6503E276A40282C299752864A722B6683D693401C192AD8A16A9ACD289A804BFD6157522342D56B374DA98210DF34D99603D91544FCF0A2BD63AB13A0A62478666090A30A14C0FD7B1A60F662AF3314A9D03B4D6A70C92FC8DBDFC7156E9B3A032CB2D621A8D1C6F1C990245FC6F950A0378F2C44A55C719D322E801A89CAA2E2E93C3FDACAEAFF9A266AB8B37A20AEB3615BD8CC4A48432E391691AAB0C377C4AFA27256A26B2F4866284AB20E591AFD6E3AF29325C3B28A71AC74C63C06601E391457541E009B7EB299501891DE9B833E187409E7CA93F035EE264ADE78766630910D9840610C84D9B70580D8940711B72D2BC1842F523F001CE0566570CF48358C047C55A9B32FC75596157F911BDE0E4889AD806E2234CBEE6711D55977134C0A2B86AE266135F4A536563B1031BC67419AEDAF773CB64A15ED3C3ACD82D9FF3C58BA5165D51CAEB59C98E352F9C6342A052135893451CDC9421D40F01FB8DFBB11F68B50713732C6D4519B7153846C653F7391C2D2B13FD87427A928518E78594F87022615F8D9737E5B4C623B7B331007ABC345C0818C66452896AB204B5A9301F6054C6B6965EC7ACE039A10DB8B560D26DEC38002EFA99D5B92BF1755B5DFC8CDAE88C4CCC163081B7EB7174640579A71B6FABCB6893506F9B87539EB6BFDBB5A8C6B575D003910117AF57404C06902630356EF0989288D9829B10BC1D612D54C709C6FA72B496CE8D2A52286672ADA9CAA98259AD9557FF497932307F4A67994DB0BCDFE9240A071FE153A93E87931E9A3904390A0CA39AEBFC6B573813B7D2A32CB96FBFCC4C776011B3139FE27A46F1453B2A3A8A04F39BEB3ABC57F4215974500B66348B1C6D73A436F3B34158A82773A2A8B015A475919F4703177102790236602DA5CB7D4A2340B684DE15A1BF9293DEBA901DC9443EE2A829C6457D3CA6EDC53AA101ADD5F033AB1BCB8BB4ADD1C77D2E303C5745785C1C7D2DC4375EE99F86A8736A02C618290D00F5C5A8F990A8C91CB574913B65110C445CC89724D88A7F72900CC3539C8B33122C16093E963D56AA4533B722BEA44B79B8A2E40640FD352F0E2024CEC76076D0343AD199C5E1060D0388A2755A18439846DB0D9BD71BA34787FF09833C5B1244D17B09B2CB67C44485908249617A9AF6887B47630C987EBA50463D6A68BE13AA53B63E58823DC1D04040251B015713E1248A75AB8250F24E4D44A42F147FBD842AED9B6159979A302B982E5078F41965237A3BF19C1F7B9661C3C61279B63E4EA23F60E886516C556805BC364C8A8DC28CE8F3068B67A009F674E1E31A3F378C518503B0987A348C421C7BA53D2260C77CA6EF43CCB745A19DF45515856E59B48F50F2C975087E64D5217DC633A3FA6E5746444DC56DF6A536EB92162018CB99777822936F76971863F4804009AC14958B3ADC071120307F8C02FDB6B3C112307CDC0BADD8828AE61F5440CF7381618F3A6F6B59962D285134418AC277C894973454551EEFE706C7F966CCA096EF192534058D0CE87667EA9CF25225E8F33656F270577B1D4D87B7012B43F8B4C64211CB1F6057ED444D55EA8887EA026A3CA7A4A091AA584F90981F985CB21BECBF82403C7F41C313B2BF8BB32A8AB19EEE251EF9865A35688EB7966CCA043F3579C80D015FDF35CD15EC122A91CECDD550F1853B323B8481B601C6E5747D1B27B24CC12940C6C0015B0E3C9E1CA173C3B87E5B5291789C5C56A96E16D050C4F447EBA3936AE084C278BB70A524355A6E7D2490EEA732D5743C8EC734DB142545EC5147A998610829C8EC38A93457E3705BD9D43A9064250D897B79EBAF94D43E12D65625D8B761324E2C825B7B48345A1895368B191AF58434D405F0820FAEB29037B69FE7D253CBE93E5DA00CC90096E20A8686C42FB6E3AC9E372130F9B14C818EE1CA2F36BA373E6585F9E80FE0B969F11A1038CC5D55D3047646AFFB63A1670B5A551B3A5470C81F57391A89BD00641DDEBC0546A36871283EEB57A9D86B5B02734D7EE908C1A2C43A88624BDBA1417321D9F2052AC4B9B9800FB71C2C936B851BE1CF4E67593EE8C473CC20EFC4C416C7B92FB61DEEC49BFE0C4168D2234F37C161B5419BE7C577883FAA753B70F30C31C420FED99DA1D9B255296442974DB1C480D389769D562DFE4A9238DB49EDD25196B43BC8D9352EB5CC5B75BA9E744F42560828F100D0D27661D8206FA62065476A97F68835721751120A4D860AF9ED72F7A9A7B59AC1007A00BB868902A53CBFBC57F92CAEC106A253FCB8BA3570AA08B3BD7A12BFD10BB55AEED7AE19E63D9ED6A64F55B4FFAEF1361BF9B375737965509FB6E44F" + } + ] + }, + { + "tgId": 10, + "testType": "VAL", + "parameterSet": "ML-KEM-768", + "function": "encapsulationKeyCheck", + "tests": [ + { + "tcId": 136, + "ek": "E3D16B895A74E1A7B9DB20084892908C51C1CCD26BE18027AD27112FB8269115359C1A9E5D8CB467552B7A118FB15064CE0514D0874068EB29E7779E8A06C426A625DC496BDB0A627A4AC1383B90C877CC637787CBF91ACE63227F7203B6243B13D45198D171C31407967659585844AB456120C4511B364AA3671A4CF35471050C608C1378881A92B67EBD2568182734D804880074653B1AA9AC00A16A2A3018B82F36A65A2FF9047E25B1A67265145657C43AC465430839AA0D516629F769CF892CAFC9B5C6DFE489969AB209E9052B8A697DD48629CB5642461519F99EA527844F5653E3CAA54F47AFDD376EF8D04CDAD1B9F32AA9F9F56B1B11BD17054B52D8C32EBA3B2D3954F5B75E9C4BB55465391B2522BB07172466351C806E3F45995A817D469A1486790028A45342EBBEAB459D923A14D50A84334A428F3AB7FF9965BAA5C3B143185AD74DF8012CE0C16F00FD2799B094F38AA73C1C70582795E0919B1FA513430A1981B3A6942B0D550855C712B44EA49721352B0A4B6483D226746714FDE31F913A3F9DB83525393223F5B07BC20D255CC4F99423C8C9081B658E5758231BE91CA24759B52A7F77928B88F65EDC6B9B0518CF7DE8B9AB2027B3F28E863B6D56785A4F218905D11118C7B0D076A67E0B77A7F63E12264EC1F740B015AA44D89ADB924481501B11962DA6DBBB4DF66B9A20A626641397833A7CC10A43A4A74EA035ED78171E302418E1C6E1B995CA372FDC3B4C78567FD6D8330445B24F8A445C7383A39C6345F444693C15A1B8A074903EF9720B497B91CBE69E1871C936D8856C74B7647C40DDCB9695844001576581D8CE4AC823FF929F8FA4ADD0059200224854487AADC8B72EE0259E68991C0A92C71014F4F3A4505103838A90B6506C7D0AC94CD331D2B003BF688C140CC0DDC60768F55DF4DB8427A4901A61B49BA1BB5C17853B0AAA0D6B4BBE7B9229C603F62A5FA5FC96514812D4C216F1638ABD44C4677657A2AB14EFDA953AF136999710C99759C3E58644A652F2201060260C8B566EADB54E319608C6839226420E4AD379B48B742BB828F04C00D469B98836C077E14E4DE2ABDA54314BA787EB465E43A32DC60926195A8C6F139F46017D05AB9D7ED32CF0BC15EF338480B23D84F67F3AD169135CC53A2886FEEB9E0B62185116981A443C4A6C6B59DAAC7C33C58D713F843A6CADB45AA7D529EA60B05C57AC0A923A80255D29162B640BBE3BA684F449230A22791F9CC9C21212893261EA2B2AFBC39924A606712980CEA49D0CB8A8AAC6B7271C9CD3BC18BEA52C05691C45B3513B7B9B48937F3758BAA0B975BA40CF4106ADF3F076EBE5845C15828264275818317A64129FB74EFAE08C8F117CC6C35D54122C3285287376820FECA625F0486FCB38CFD773A2A61172906FBF966892265C6369210A2A7B757C41AF7C67A38339028B67A1BA90EA38100298B420819D360BA790714BEA424D2C0A6F6281BE06E9CB93FB1CDCE67B48A6406EFAB041320C9CBA55A9807D1979B7B6D6BE594051A3F9B3797A81AC1A58CA1A504B6BB4F374BDCB36CBDE1790D28A4B662668F393256E43BC99F0419FC697DCF47EEB301EF04940FB45BAEEF66CF0704856FA12D9D893567227D5BBB666EBAF56FF2F64C7A6E0F0D36992F2B250" + }, + { + "tcId": 137, + "ek": "9035480A1A025CF1162E5176F720B0939ACEF21C259A198FACD79F7FC66E6DD4503806CFBAEA3E170251DEF3276A7C6A18D72F3E472F549B7CA0B7B4AD8224CA813931891DD3949CABD67EC8727E2AF2BBC36C2809E4B4FFAC78A2A58994C094FF49A91CA1CA498C98D91C186A27BC1691BE20176AC5F5189A759DC8003D412823C5493D667A18DE9BA4D60096C4816C5D201DF3B3A2C699C2F3BB756D589B57E45D2980B1A90732ED7350C7F80B2A4A6C6C3BA87F1744CA5656047323971916B0E43F970360EEB9869412193FB549FD8C1D15293D23E396B0C31AC2FCC6833024363A755C69C85A552047F54D66411117E567DBF87780F04FD5190C27BB90BC0814B4D1A09B697C392BAF25352395FA658144584289A5D341BCCC4095FEC043A0994ACF589C2A34092C3B7300739EB6B40A71E8AA5A55CA415CBB9D395101FCCE1F79B5465518DD8484D2E32122471B45D5C2F000A00020B4925C21E7B058E72CCE1FE4AB5FE12EEE51896322CB4951BB5B3A63D26A81837B3A4D9B62452219DB31558999CD03FA144996154AFB87F20938712699983072C686A4267018CA79425D257BB04316419A14005C6933909579259A9013BF5C367C1E6504EE5BC064C65081A297961850FE053FA822CC7454C6FB50B29A444E8EE4CDAA80BB54000C3382A66A799BB31A920BE1156858BB0D07A3A26470DE97309CEA5A6E593B2FD36C91D10CDE35064548414CF4151DAC8E85A3747237CB6BA7AC98327DFE9B453FF0B7B6AA29948C178026BA01E27990D3907C991A0BC62A1D975DCEB3BD99804475F7B9024627636CBE0DF74CE4C015673236F1E7B3FB74500EC9C280243FF3D67ED445102A962DBE07C5297230E3760A38B3A12B84AD8915A55769229BB183F9B60FB3F26D6690A3D827CF31A7957B964F65C84314BA3B3A37A1549987025B4BE0538F262C81FBBBBFD612B3C3BC78E9C4A1A4519200F1451CD2C09DE76A4FE506FB52989AF883A01942FAE6B3A8504A32C83928569E487A8BCF4418FDE62278CBC81938CFB3476DECE79849AB293C2B959F5A7E8BAABB9992B8D021C00E9206F1DB1ED9A668DB9A9E5ECCB616D564253A0118138F0A79AA5AD92FD5C4294362432982C95CE689F5D80A9D8B2AD3CC3D74024B3211C0A761790E6770A6B3BA1567313D216FBADACABCA68AFEDA79BF144BF475C41CC12E45E37DB36091CB510CEDD54DCF12165CD8A2A7E00642F46D214ACC60D1C667D9B2E605555E67698381A77182CA271852D9B18C1FD286826A0B19C5530C918DB95B915DEBA8A93B6141C181EE095D8988C8E4EAA27027B9CD84236475B8860A0B9FEC532A37625E71852A166773371162E514F53AA02FC9939AF671DD338C23934A85FB89ADC4155F75CA1E7119A508A734E370EE3942DA728258213E15586E7470A89396394D1511247246F770392A66A0E841B02636173FE7525997615799BBAE806EB28B51F740844191A1C509AA72B72AA042C436D10E24B9A2F6D86F0AA05538E69530AA9840C28FB190AD82796A12D52E687901AE2AB71562B9173B14895895A4992CD6708343649B5645B8B31152EE06AE2D7199509B94900A27BA896EA52123931662C3F16E0DB074BB1FF2638F21098F2BDE71A15C90259DDCCAF221B36F12141B081E191CF1DB1ED9A668DB9A9E5ECCB616D564253A0118138F0A79AA5AD92FD5C4294362432982C95CE689F5D80A9D8B2AD3CC3D74024B3211C0A761790E6770A6B3BA1567313D216FBADACABCA68AFEDA79BF144BF475C41CC12E45E37DB36091CB510CEDD54DCF12165CD8A2A7E00642F46D214ACC60D1C667D9B2E605555E67698381A77182CA271852D9B18C1FD286826A0B19C5530C918DB95B915DEBA8A93B6141C181EE095D8988C8E4EAA27027B9CD84236475B8860A0B9FEC532A37625E71852A166773371162E514F53AA02FC9939AF671DD338C23934A85FB89ADC4155F75CA1E7119A508A734E370EE3942DA728258213E15586E7470A89396394D1511247246F770392A66A0E841B02636173FE7525997615799BBAE806EB28B51F740844191A1C509AA72B72AA042C436D10E24B9A2F6D86F0AA05538E69530AA9840C28FB190AD82796A12D52E687901AE2AB71562B9173B14895895A4992CD6708343649B5645B8B31152EE06AE2D7199509B94900A27BA896EA52123931662C3F16E0DB074BB1FF2638F21098F2BDE71A15C90259DDCCAF221B36F12141B081E191C" + }, + { + "tcId": 138, + "ek": "0108843E1277807578D6DA036327228E606C7BC98DCD0A8AB488517F2C60BAB16F0EA6AD3DFC40F6F9441190A014E41779F7A676442C5206BB03A0307F26800C72891126559975254E36C7ECFBB7C1A1A9F090278C50122BF25D09E9C80C08633C6677BD265DD6B629A773BEEF37A0287885940638D4356D89155B0D93B71C803DEF0A24CF6C547248AF39033D80FB3D330C4F26D817A5432F379A87698BA78594B952037BFD256B1DA03939C8BCA4547BF8B6408F7BA614032950687D893B8C0CE3811E699F50E607C647C70B4165230862C8970AB4266D9CB69C12E34414802ED995C2470A5A1DD00C023824B1737828E7CD9AA851CE2AB722328480009DA2C431727A7CF1463B7DB9CB632A23D816B6B1CB911CD3A532EC53ED28866D77C7FD12AEDF21C2A21355F2A994D7509638A47E082A263553B963313DE8E47C26249ACFF43CC03629BB6CC7B6A9B82FBA76BB856040C5A54836B6874864C4CCCEBB81B94CC3B3E201ABD07015BB7994B8EA66B8F03D2E5509AFCA942470A785AA38EC2A186F8721B1E9183B52515E506074800A5E55AE4C3AA671F97DC8343DD9059B30F320BBD3391F329E19470B521890109A5EF83054E43599067352E3BB57DFA850427886638859E01346B83A665A6A75B3E48DB1C5A3454C4C2FF1005F2689D6D874A344ADFE3B560C6A5CAD8CC7FA11063145994C13ADE98B179EA670564A59EF244AA7880DCB569A8B8775210416F6EB3C6C647B47B301659805E6908F1FB084DBD3883202A12A409221C8423D85757D04B3AF7A15D6A72DF910CE687410763095FDC88CD6216988A887C24CAF763533B9BC1F40510D799021F28404B675992A306F7E41ADB070021EB013F5A67AAB1BC597A1BF680B659466CA8F44078212C3A235770493B50C0B463F441F8B690490AB528ACA33A9E06A2535825C42A7CC096A127A77E7294EAE58B1EBBCA874CB3DF9AC0FEFE161288473D44C6B8E57861F00A466555D3F4C5A697772C5D5C653C33041AA19EF61A4842476F3A31E8FC600A3C54F12355D512539FB6811829B6A0FBB605C722F2B3013F88310C94485A9C029DA3A4F73D0CDAC219C4AB1850DAB3F5C491EE1E71673442732812EB1621D2473CEC46CC7D0D2163AD330F1D41EF6439F56049171034160B568BE774726DBA17A638C366079ACF44CD3AC9C0A1B94451747A3120E11737DFA9A3681439CE9B119E853A8F1258F64C2C84557ADD3574A787373493A9174942ABD50903AA261A1E055F9F08A17D059D8D0B9A092AB5D54104F88785CDA9E9D2B2CBE234511F726AC0459795C7D5702B359FB78A64868610C7942C779EDA024DD6101B7A43D27A5AE66016A88A40CBFCCA58CA7554EDC5DB74CB08B275BFFA4799846A51271B9141919A1C7BCEF9BAF1FEAA0F9FBA02D12026CC90753D444BAFA1EFCA6351A9B903793B665C0363F0C4DDBB8A26ED108A6024FD8DCBCD62CB81934C80A6CA4A292BDF5202AC7514F8EBA0E5CF00811901760B47230B2504F37022181492DA00322A49915E1AA0B602993BA33064182CCDC5BEBA9104AB88BC8069B24A44307450FFB12A9016A24D9D21610C1B1F16C2D31750917DC380FF14A73F15A025998F6851CBEDC297DA57F426DFF89FCB7C09291BF0C8A26FCAB60CB1A001C5991F5" + }, + { + "tcId": 139, + "ek": "5C67AFBF30CE9D06B6360470B088BF94F35C86584ED2162A7C312A382B6B4FF3628BD9CDE44315EDF58BA88596C3809D3E4387D7F88D05957D8C1697A37943E5049D6453A17E64AF6E92AA8C45699BF52305C5C9F835685FAC3879B530B06892A3960046741A9264050866AB362C8C6F795325F1420BB39C20F56FF895B3017B18232A1FB3F69492663D7672C50058442FE92102155F297046CF661B24A4CC53026CC6096C4EEBC28AA4328F17438371C635A022D8DC1F5F721C5DE9B5C6C63D2FB62A3F9771895C0906F3234E37A125B08550D5B8CC439903804FCA5C56EBA7225E11CF924359C0E981A0266A7E51BC9B1A5C12A5740A411014D440492905E714B59B9673747CBF6535525A603488C98A965094A969CBACF8C0AEBA048787917D6152A411300FEBB25B4CA2BA310C850951D104B1106C827486115FB7B164302F8DD047C4F34DBED9AB254638DE8C3A4E9557CAA5BDD241199A36205A0BB46DF1803CE0CBFB202AC8FC3C426C2A4C3B349B60053860BE813C4C9B81CE5EC4A35BD9C6B8410718C4B97250BBE97C209266B53B1B9B14631449955AF4C05767A28B73634EDA117D3A5A975EB1220A77C03886641C245B197260335B2420B8A4D7571E2C557A3E0266B5C839B4B14640926FA26B2088328D3DD301BD310B4FF5B2268753F12A8A003565349844A678333DF0AD3974B674E743FAB48A2B767D5AB12782CC8258FA23F4610089101F09F52D5453C4A8C402B4B93DB5E769C269870DB5B8D7F487CC01036156CFC4863EA9B69C3DC5B7133B52C4142259245E8357C5D095B114624F74238864789A9BB64ACBB8617F56A42270720F4CC078536E0B08A7593C346F56CE3BB2A69DA5497DC636A5BCBBB9E6AA86AA2E53D535AE505E8D402AC7E18829C155BD8B9D0CEC6CE0677C032C636465196250C679080ECCC02453497EE8F2CB1E9885BB522E25894172646C9E67ADF0B4675173CCEB3B1E626BABB006514AAAA4AAA9CBDC37CF81F565D9C4A6A72B2873220F36AA92AFA4931F0B6EA4D75196921EF3F4C7F71981BEC8B20D9B0FE0D0A8A1078F78DBBB6E991206EB4DE56B69FD06C810E1B37E570333486CBD9A61295B61E43837B58C6A90255CFA7A40C2717329FB795FD888A87220C1E5B8E5F0C98EF431B64970005602001C0ED172B91037A54FB9063BB69BEEEA012B75A684E0340C83044944982EB0602126295E458B7FA75F6424905CC94F69A4797991157C614C943A34D76C5A5FB4ACFE9B8DEF680890049A74D8766F69616CE055D5BA53E4E0B19366A9B9591CE1F7114486987516353BC38238698B48C11675D30ABEC19BC6857837E946CC1C339E432DC9A8030C953106D3BCBCE73E1CC127D1C68C72A3A6FA3251A3621344F1280CFA5FF4DC4FA920AEF51A3F86582259C0CAF3F9CB0CD36B6E82A74FB66DBBE58A0C96C9984AC37A581360119C6FB6AA52CB70F98A4F2F4B395F860ED1720A23B92EFF456AEFFA5A78E7CDEB57A7D3F43036F4289148B10C130E5FFB6C31BCABDD11C619C530C7B68AC0BC82AC03B6E9C47B555A5E24427F6CDA37A5143BD64B6CE8605331E38D46F3C9F73BAE392A8AAFD4000B1962D93715EAE6A23D685E4AEDB2AA2BCFF53963235248585F2D98B3E0C2A31DDA0702ACF18DBAA17F5D2C06EB4DE56B69FD06C810E1B37E570333486CBD9A61295B61E43837B58C6A90255CFA7A40C2717329FB795FD888A87220C1E5B8E5F0C98EF431B64970005602001C0ED172B91037A54FB9063BB69BEEEA012B75A684E0340C83044944982EB0602126295E458B7FA75F6424905CC94F69A4797991157C614C943A34D76C5A5FB4ACFE9B8DEF680890049A74D8766F69616CE055D5BA53E4E0B19366A9B9591CE1F7114486987516353BC38238698B48C11675D30ABEC19BC6857837E946CC1C339E432DC9A8030C953106D3BCBCE73E1CC127D1C68C72A3A6FA3251A3621344F1280CFA5FF4DC4FA920AEF51A3F86582259C0CAF3F9CB0CD36B6E82A74FB66DBBE58A0C96C9984AC37A581360119C6FB6AA52CB70F98A4F2F4B395F860ED1720A23B92EFF456AEFFA5A78E7CDEB57A7D3F43036F4289148B10C130E5FFB6C31BCABDD11C619C530C7B68AC0BC82AC03B6E9C47B555A5E24427F6CDA37A5143BD64B6CE8605331E38D46F3C9F73BAE392A8AAFD4000B1962D93715EAE6A23D685E4AEDB2AA2BCFF53963235248585F2D98B3E0C2A31DDA0702ACF18DBAA17F5D2C" + }, + { + "tcId": 140, + "ek": "B2267D8015A701130BC758336164382E345C30477257B4BC22B049424A0D40E1AFA05C2859643D27B89F2BB5A1CE2A1D73180512086D01F62D42E84A8B618C89729BB88CA11E0A13E7BB9F1F3C41EDF548D9EB94FDE290952AB06CF67A3890A8DDEAA7F689CC4CE6BF97195433D6B1CC6C2A8C66A93FD5087D5B3689B02F1C69B39A74790C949D3371A7D1CCA88476631367541CD54720F2AC73526A16607386C58EDF02CC05AA244A32362B046D5746447C383DF2D38F44570ADCFB67E0418F5A33C496F68E7D9992F9997E71F0512F9745CB9442422371E76BCBF6F0993C5BA79443029B263E62432041B3A610073750F85FBF588BB6B0866703B34F466CBB8572C80C55F23B5498573829C393D5C1BB582CC589E74D220713096C4065E43999732E543622A786CDDD262FBC1065B609046292AF4D2B4DD724189236260B3A5389D4B4F89805CA4B2738FAA1FA3197789B7347D0AD2C10AA7D98445FBB069102B13F931CB9849BD7350EF5CA1478C972981A30C44445140A77E1451DA3FCCE1FA72CD67C602EC00698953E599612C6A447F7D28359F97BDDD27E1A67031154A18A7A6D28274D02C3305CE56D8353659401769966C223894ABF070D32C685B94B8ABB7C08023BB051C2B35911B66C783465DB4985DA6BCC093C39C06AEB3CACFF013ABDF08E40983381370EAF186CA60182D05234C2C921AC9346AD205D7F7809DDBA01ACE9969B051187AA03AA8B0C1FB117B12A88CCCC774FFCC3E5CB6E7FF2060AF4903622A7C8C79385B1AEC80127F49C7654F695F2F812A1FB85ACF2879B0B1ECF4B9805DC08EB02B754176B1BD612A350C5B763B1231CAE3FA8B091A8BD04AB8CF62A4C901007E0C22757A62574F151EBF97E49D5A6CB84A41772C81477CAF181B544971203F622B2334B483C5471326A8B65250302325C26049C314DA2CAC076CC840AC12CFEF77DE7656E2D05B856C654533AA5FC8893D766A4A31544DC168FCFC94D7B3B2E183203782CA0FDD90C6D621882969CEC37594C9A8F3FE79303A049FCE3449C9368DB739D6D0858D1718D51584F69B7B5D9DAA67993086EE62B26028FA54977D6345986741405E149F1B4A5B16797F29A92A32962E7786112470E8411BF5C86C2FAFAB1836B8C436A0ED30570A1530E767597D2F499171998AC438C821AA14ED30A94329551023728E5A6C77C0884F09084D534F722C0E8FA5688DC504A08BBBA26B81A4CCC1EEC8CB9230859491E26170153D58FB7B56EF3A58C8D27380598B4C6A90CAA08834C528CAD4847BC580A369A6625F941E0208ED3E246AFB966BD50B13664478DBC9CE5A5236D28CA31537D4A713C748165956C8BE8F846DD0B37A7DC16379C416F96241FA37E0E0A720622B83DE847719B8DCC28685F841150A542B51BB0DDC35C08FA59C0591B52937F3185B8ADE9787719A032B3AFD1E30CF8F836859438327C2726B219FCAC3BDD82B5A8269F7462A905856CEF313D680A2499707462932673780F93E1AF40A0860CCB96D786A5DDF57A1E91829E5A85506709C9C447225000728A72FDE542B2DB20111355DC2520766BB97A88778BA5455DAA76D4DC4E6C97017C300ED0CAB07C7659603B553646905D176551F0783F2AC39FD1FBC3F1A34741898AF1460385F051958CB913B847C06EE62B26028FA54977D6345986741405E149F1B4A5B16797F29A92A32962E7786112470E8411BF5C86C2FAFAB1836B8C436A0ED30570A1530E767597D2F499171998AC438C821AA14ED30A94329551023728E5A6C77C0884F09084D534F722C0E8FA5688DC504A08BBBA26B81A4CCC1EEC8CB9230859491E26170153D58FB7B56EF3A58C8D27380598B4C6A90CAA08834C528CAD4847BC580A369A6625F941E0208ED3E246AFB966BD50B13664478DBC9CE5A5236D28CA31537D4A713C748165956C8BE8F846DD0B37A7DC16379C416F96241FA37E0E0A720622B83DE847719B8DCC28685F841150A542B51BB0DDC35C08FA59C0591B52937F3185B8ADE9787719A032B3AFD1E30CF8F836859438327C2726B219FCAC3BDD82B5A8269F7462A905856CEF313D680A2499707462932673780F93E1AF40A0860CCB96D786A5DDF57A1E91829E5A85506709C9C447225000728A72FDE542B2DB20111355DC2520766BB97A88778BA5455DAA76D4DC4E6C97017C300ED0CAB07C7659603B553646905D176551F0783F2AC39FD1FBC3F1A34741898AF1460385F051958CB913B847C0" + }, + { + "tcId": 141, + "ek": "CEB57B17F31D942960BE267A181ACCE5AA5203680A23793BC56A3CDC319BA270982D4C4124F3A2F00648635B3EBB464E89F789DE07B2D03CC7BF869F47E6C47AC185941A35215922485C27CDD288808150F9D30977E83C87515C1FD47B4CB178AAF63C5948B6006323775C8ACEC46AB01429B50912D01C73F2D6102F92158EA64DC9D6C4EE412D83537D873115C7E0C276300B40E2A42AE79A53F563B42AAB5F37A793656DB0D8569893CBEAE753B96314C131829E094FC3F9B6901CAB9C1B9198175C03BC28D7C48AC5B339F207CC75C0A3991C95C578A899C280A3E0200F9C3380092641BCBF62A9A343954943042E58479E0ED089C153C685107F936777C6D4449193720B30416F7B3D61C857399276ACE0CC9396B54BAC229CD82EDE554CCB9124959C62DB4890AED88D623B652C6C13A7C653F5408FF4E971BDF8289AF3683C0070F3115B0E0B8CF5A198DA306EF2783FC5687013AA55306A5F44617B09D1C44C319D3132AF682908B4814FE589071EF0C200F7A4E60B12BD7821F110967992732BEC85C4742B32C41DDC5B239C5402A93C02C879B69370B7D04C2D5CC8CD83EB821EBBA5DF72CB2D07038C60167DA3A240162BD1A587C2EA494F550AEB207DEF8B0AD92A45214BB2D7CC40C757212EA515E3154A92135C77DA64E1A718938651F5EB3DA538C004EABCEA6C99671B9F1C2B14076A3121CC5A5420C92BB869617BA9661368E5207DDDBAA6E9FA2296FB03814891D38C29655517D6615D90828199867332A00E988C0AAAD56526F52C911700E8953C9B677AAE472A20443213E08943252799424F0054AC6A7BC03C201205BA7CE79AA9B9C48E8E0131E497251B743E13F8A4D9EB3D361A3109C15D88C9CA951A97A21B8667E35AC9A83D3D278B23559C0DB6463C3060C5B3C18D86B07C822C90030EF2391DFB51CB5E5B0B6E56946F421AF48233C1B85F970B726B69B04E8A2BAC0C7825059717EA7B8541598D6CA8A8674DF750C165F0AF2F772994A50326998AB5D0A7A56A0364B398E73C64C7088CCB78CCCF3A8C6ACB746F1B988D0301671B6D90208C1FE4775B70BD8EC3CCA82C423BD81E7B7A951121ABB0C791EE4CBAFDD73A6342BC7EC656637BCDCDA82C04462DB9A64752926F6682CD9EAAB566814248F52E249405842256B74553BADBA5223B2332D6387A804DAEE9439F3074D0A4AEB8AC8AF5C3471882C9F02221A99A6772D9921D81B9C81C04734B1E5DCC1242688651845DC2D1A248A9CE95B3282B40A34C3A6330DC5DB9E508CEB3AEF358C93BD3924F4157267642BD208AF7B755D771B76AEB3673D90657E73AD224B3F650BC80D8739C399E447CA5185BCD26B5322735C492D809FC1891A0241D217833377A479E5C8BE20234123A8979F82C00A7C12C346D3173062F804887456E3E0C3784F08F6F552F041ACEE3A081F8236C566453D09C5A25B2354D849E09084316C33053B544293BBDDD4C86C44477FFFAAFA895A165261E2F2273089A89AD09CD3DD386B72072B9D25BCACAB56A02596771547FF55C365701B46C097761C043B85206C017EE4124C65043B5049FAFBA2B84C2511D7C89E7D5B2531C13EDB462D12735D33134C2674C4753CD7499F45D8D858868D9690844F45D572119CC496346B44B35CF616D424CEFFE7F" + }, + { + "tcId": 142, + "ek": "EA8B75966390F4956AE9A7B083717EFCEC537766998895AF79A2AFFF027BE73B4884F196EE12380303492D95CAA4422DDC989A549A8EE0933CC4F9C42923BECA9BA324DCC90425AD36EA2EC5497316A336098727B2C95DEFF06EB3FC5E762B1F9BC5AA21438FD6269975F07826F75DCF013EDB0224C77C87EB158FF23B2C2F14BA0BE7232E41A9C8FBCE7BDC9DB24B08A920ADBC243F776136D4A16A6BF7343F3A741CB7C66176B925F399C40752A9584203AB61AC6951492C56C51214896C7BFCCC14C58CCCBD965852963E8A058D77B342DCB008240C6867766D80C17350C276B304A4D2109F3B3B267AF14BE08259B528C39578C83FA330F23154CD608EFB267C510095BFF607FB2059E9B025C1A4C0F02CCF79E638CD520FE379BFC7BCBD26965C6E030966B4B60F644F03F2523E013FFDE82254702E0F020BFE78C37440AE0958ADC75553EAA45CB434916C014190905ADD56CF99888D43262CB0D355EF7AB95A08A6989A478B005C6A5487489115BB203F1E71C700B17520C75AA1D218390B029C102BCA482D4F900E3DA6785FC861A387A762538B6A89483DA5118E74A5333340A38C372DB4417356CA3D170F9E912D2568B9CA9890E7612EE97B6C2AF25AED70101E99B1DFF604C2454CBD768C44DC2F16D6587BFC1123F08D01493B2773118CF416F508A7618B26057B082081AF224B0A5B3B7A3288A7A8FB32D11669D3D70D493065E9B13F08B5A8AB043B331B0E1AF40239749AF9F26942469DAAB72235232F28E6B2803C11FCCB45837699C24B608DB72F0220887DCB6EBADB6D39089B2AE3667646C772C0CEA21716C9A1814A685248478CA799C066294237D32948B3919C399C9B350A67E686074CB7BC538BA017C9D975CE8A577941450599030684B657A12472926C4E583B68054B0C3C0414E9684749021D9EF860AA823DB1548C75765643D2A649C33682E0B3CD2679AAA88D31709D835753B180AB543327E3B94A1CB7C16829058CF9043673C7A3A17055DA16D6B29DD27157BCA170B9C51FAD7C397504A03E354B5301435AC79AAAAC778C7351C46624C58C60D4B12CDB2A3B0C51A3B5A52A53F386B6C5C6EC996E4F44CB41352F465CBC036356CB4868FB775B13B05978C37C2AAC7C2601438FD8C0E4A867B609A41CA31F0E150B91D986840277026364BB113761B50D51F02CFCC771F733BD49B99384BC438804455E1C4E93B2517E0446FDD71C6166C74EFCB75BB71AD7C878286C74837B9F930C1AC1818FCF566DAF83482EC8C52E09A8EA6253B4524A564A802F5770E55388A82131F4818ABBD91A1B0B0DF0013F77B30FD3E866864C13B13C649A9A01310A0D3B9133011614450CCD0D8B94D4CA8881E600794504A4667862F20809E2AD63D2231D7B28C2841BAE88B1499886413455B9D71AC1336CD9765CF077B80D056EF58631BCF311FFE498E3771CE0C100B299A5F1E42E50B364B977619C16410884064FA4B2EB5128F81A87185851D02824CB9B8299E38AE9CA86C91A5ACB14CF02A763FC87953434989DC21882867BDBE28D4F97142D75C555BC26134B0B9998318830B6E9BC7F2A2C1B7CE70D94387EED75C68B2A51A256A81DF4A85C914005C48C99BC3CB0214B3E70A7A70FB1F0D92EED69E409C65F363FE4EE8B2ED46068975CDB2A3B0C51A3B5A52A53F386B6C5C6EC996E4F44CB41352F465CBC036356CB4868FB775B13B05978C37C2AAC7C2601438FD8C0E4A867B609A41CA31F0E150B91D986840277026364BB113761B50D51F02CFCC771F733BD49B99384BC438804455E1C4E93B2517E0446FDD71C6166C74EFCB75BB71AD7C878286C74837B9F930C1AC1818FCF566DAF83482EC8C52E09A8EA6253B4524A564A802F5770E55388A82131F4818ABBD91A1B0B0DF0013F77B30FD3E866864C13B13C649A9A01310A0D3B9133011614450CCD0D8B94D4CA8881E600794504A4667862F20809E2AD63D2231D7B28C2841BAE88B1499886413455B9D71AC1336CD9765CF077B80D056EF58631BCF311FFE498E3771CE0C100B299A5F1E42E50B364B977619C16410884064FA4B2EB5128F81A87185851D02824CB9B8299E38AE9CA86C91A5ACB14CF02A763FC87953434989DC21882867BDBE28D4F97142D75C555BC26134B0B9998318830B6E9BC7F2A2C1B7CE70D94387EED75C68B2A51A256A81DF4A85C914005C48C99BC3CB0214B3E70A7A70FB1F0D92EED69E409C65F363FE4EE8B2ED46068975C" + }, + { + "tcId": 143, + "ek": "55D5BCB82657F4B107E9B5233057165347AE7301427D1ACDF104CFD5570F2E71C6DE36C343C17CDED3726667238142B6088468AB0317B005B10C6C8581F15C00EA32C863886F154F5EF75D44028C9645581C3C2CAC1A38C2703901B82F93F284A4E2B92529202A7B4DF9095B4B03AEBF0A68B576B1A756BBA1369F5DD8828B71A7A7782E8BA2896C35361F2569804276C86C470B057ABC4205BB469891EB34BADAC0918B0E8550BF53C05B84E03A1B18C41990683131880BC556B5A73650F17292618B65E7977B703F649578D39A7D7E09B8FFEA02FCEC419E44C2B540158149C62808C9C22A34254A21A671118FAB2F329C5CB8184E83F77E9A6308A7992F71971FC9BC438C72B434153A684CAE32B787028C11D023CDCE49362A17AE1F03C146F6C1C5272A320644BE230F39D2357C53C393A54A95F96972212423750372C9596A5BC8A186ACE3AACA2897C52F2A566AB2A1CF2B0BE5FA8893770A8CBB08F6DB1F4400604AB02F4E206EA7D768F7AC191FC88380A99BC89CC4FFA6214F214A3FCA2DCA7476AD6C776D76229ACC1A4A8797B0A497AB82A0ADACA0C7274FFBF730A50C194BC375614C181CBB15475188538C3B18619606EC980367406662A0203AC2365A0836770725C07C0373C85832A4B4E3586634B0A916B7A44534EEA11FA4B660E06A96423C6BC9E61D2B382CAA7922A6DC765D45AC2055A42B159CDC2B06DDF24AC0281C2BE06674C37DC91A6292EC35C8E93AE1057B936791949A68DF1472F7EB37799AC941F13A14B812868477FF569D9CE03FE10A5C3BEC9721225CAFF777FD663CB8F1A8A05A4647E2AF7D73CCD0704C4BC588A5A687CAA71C6712300D511CC82320E4069B5A034BA8E660E8957BC47BB20DD7A930E93D2C5A1ECCC296B2B75FE96117A1F182062A5058270BE0151F11263C4B12C730D8BF6CA8A6D2C572157C588977012CE03313540220A570EFFB679265C900921DB4C53B1250B2A8F58FC02B091A077864ABC9A1F7C04529CD6CD87C8A48A6583B67535B55CA60548DB35169AB3BE186842B1664D02CAA5A3173B52088D9A400D31A2259E23FB1B55D4502C76A5202649ACEA6709FB2D99ACABBC0084698FDA6ADA2C9CA25333A87F1CE916B0C68483EB0E55129E67893938A35C222534BADF4549381183FD81B098A302669C37CAC357D57B0B406E3B3C728701F85BA8A628083C597103459B0247C55660CD8D304ABF65806322872549AFD5806DF62761019B5B3E05CD4D20C956C8E8A2301FCA50FD339937E73502C631AA151B57C9B225A2CB2C7986A8AE4B2F299BDDFCB4749F3B4FCEA82C254BEBAE30DBDBB9D248C9A32E78DE79C3C39034312242A26E122EF042556BC35BE251899107F3F122C6169438BCA812E5B26B4720CEF48188308B6920462B3024413F4331BEA6B7C81361BE19E750774AFE2AD605B1FC33502B9F794C019B3BCA5644E0306EE2A0B7552C0322540F72013A995CB1E477077242E0245AECA6C058242369C2018AC7C2EF6C91F453940E3B8B06CDC8634D67D8C4AC219A08855CA197E57817A169298A5605D6C3C7A92498CD3BE12588293D18FDB72C6728B6148E82AF8944E4EA20AF4BC25B3069FFFF04C0980FFF3A16126C80C0097A0CBEDDA4422129719114215AEEFC08601B739DB62B1B55D4502C76A5202649ACEA6709FB2D99ACABBC0084698FDA6ADA2C9CA25333A87F1CE916B0C68483EB0E55129E67893938A35C222534BADF4549381183FD81B098A302669C37CAC357D57B0B406E3B3C728701F85BA8A628083C597103459B0247C55660CD8D304ABF65806322872549AFD5806DF62761019B5B3E05CD4D20C956C8E8A2301FCA50FD339937E73502C631AA151B57C9B225A2CB2C7986A8AE4B2F299BDDFCB4749F3B4FCEA82C254BEBAE30DBDBB9D248C9A32E78DE79C3C39034312242A26E122EF042556BC35BE251899107F3F122C6169438BCA812E5B26B4720CEF48188308B6920462B3024413F4331BEA6B7C81361BE19E750774AFE2AD605B1FC33502B9F794C019B3BCA5644E0306EE2A0B7552C0322540F72013A995CB1E477077242E0245AECA6C058242369C2018AC7C2EF6C91F453940E3B8B06CDC8634D67D8C4AC219A08855CA197E57817A169298A5605D6C3C7A92498CD3BE12588293D18FDB72C6728B6148E82AF8944E4EA20AF4BC25B3069FFFF04C0980FFF3A16126C80C0097A0CBEDDA4422129719114215AEEFC08601B739DB62" + }, + { + "tcId": 144, + "ek": "7CBA0DBC74015A703CFC4B0F938ACDA0380C5EDB4F0576180B00CBF0E907CB1B6C75A52847440B3E554983320BE507078B3A21B1D921DF82C58F1826FA66C1D5CABFBBA27DB30541BF9B4228E325CF7C629770BEA1D343B897C8187C14374C1D079AC757209F0EFC7789520ED5C41AF96A0EB285BE06D99553CA28923B2814881881D0B1AF1510B364AB1FA96778AC57EEE7942201682EC5045D2722497B888D7A2E6E68289A54970595712CFA487C04BCEBF082BE8187BCB0CD72831D6044B3283C238A706ED1291A74FA121ECC5646376D3681509797718DCC29CBD14A59B5611B859D58C313F1959A42ACC69D669D9CC32E567C928F3A7FC1C494909BAC68D686DC26B55A3B44C8A78347826B77A17FBC98A4CB06976721C3969151B5A321D29386F80C806BE53D6140CD63A756C3C4A3654B4D76F6C0FB874A7DD006C2AB567B2BB12EF5897563588CECCDC16C6E5B81A4E35205C445738EFA76FA45964B8836ECD55CEFE1A0CF899B8C727C6970C67CFB3AD267B385A508C805C83C96BD0C4461CED845EE9CBF0ABC7EDBBC538A53B20B4198CCF3B21894190F366429624479C64CCE6CBA6ADC63C59620A161AA292A546B7131C975985D8C2EDB07C9971A95B87244892A00C807AAB71C2ACD596E95E39A886BCFB8F2016EDB6D9D6964AA728AB6F7535A7501B17B10C6BBA6008AAA8AFB55C2D72A7CB09B00826CD5448A1573AECDC02FD2C70B395691B0D27921E13B79BA6F8DD456BD79C677900D23D4A5A4E77120402890B36679C28C9E7605E7C53C65CA1FB23158A5E5752C900BE2F9BA7682638591A596C9A424C04D22C5095F990FD34B066B12BFA2197669BB6C35306FEF36CA68080E7388C6DB5049B053C7AC78B3A462605E7695D1013D1495883B346FC0FA177C8B58D28B4C85AC50377931AAFAB2015845AE30A9D795C2D2B00021F093399501161A38E0A61A79462F69B96053C4B7BC733F83D9182F7760A4F117AD14AC34517FC3CAB987B2BFBC44A248752FA27A7B7B50B1B883A20F88110DA01E681B167A930A6E60464FD72D9A0B7697E81ABE035C1FC15432EB964FEB0634D67ADD11936B982D0CF24922DA6356F01E88E28DFBE5C1F4C2310D20BFAF8359BBC60CB0A37D84848F86F99DA80588AA8BAD86781B68C623821B178989096669CDAFC402BDCC6B818C8F61DC7AD1537E9225A96842A8AA319F3B9641F7895E86C0B937AB10C1B537EBB80580F223B6150D29600F23565725F753B8D0BFD5413188BAA6B58C6D498A48CC4199A894B847C1BB355112B4433939262471248DEAB090FA71271665BA7F0176FDD16E830027E4B0247366BB922BC3D508714FA2A6EDF65EF9E75DBCC78283FB49D96A5740E99CC2677B57573FFFD096DE854E97138E3634277482978961CB63C9B958678468A17BF9D333503946D6B024727B86F18B639C9920CC417E214A03BC9764A6780A556427D92001F1E2C624AA2C2F67436ED39A706953E52098FF1A251BE1898AC01AC462889D4B8289167244C71B6E1503A975AB0E7771E0182BB93AB6D5BA0AC8CAA2EFA5183FE7995E9B6689661E9A733B8C2C8A0FFB8C0209B89EDB1D61975F9EFBBFE46A6CB940A1DC60317C057B8EBCE698327F226F0E8D87A025E3EE57844C3F9B498DB61A90A7EBB18D" + }, + { + "tcId": 145, + "ek": "12CA83F6418082D07A7D23356D583D8191218B705BDF267B0623C435039F78F46D0198C508C5C7C8411C0E30CC5E572E2F4BC2C3B77D497C27DA067B496B045D032A94C94ED889099A2A888D98518C02B016DB87B8B542A09A5FC89B5CF510A073F707DC18C5B1C98151D14FE561421126C2E9E74FF9C52A97381E8DA168096B7937A89806C29205100FDC705D1CF61E1F4175F75C35E84C853854C1ECD80BAD59A17F16865850028093154BE1B56289C64F4B383FFA9DBA27732C231CC18A4C53207076303D0FB3C76732337701B61BBA8DB763C7D6EA75D44C8D9A36A9C76909093281135C67C4E1374FD1B3787928C6D274017CCB609342C7E4265C236341F2AA3B0A0C7E1CBCA3FC951ED3504C7B11C7861B44207C8D24C3697896DCA63D68A80DCD456C732CB6505B62027C65344513316150C9541EBE19BA9C6BBEE1C805A1879B25189BD022123C152F9BB73019FB749DE63CB4FA52BAA33246AB248021168C4AAD60577950C876B5946DDE0047A1A2AE68467FB9854617965305100042EB746F2B4353C8B35A058571E674042B1EFCBA8FE21C7678FB21BAA6080ACA331EE9212A4457AC877C14D7BCB07B4B6C836DD1421DEED8841218170D70704AC96C0D5A86D6F86B7327229EE22725785A19044010E2B9342753757357963A9E080132B377A9AD693718790D9B576E1E270095F743B078BB154A55E7B05FCF927F2D435F0FF13A19189DD74A41CA5B57CCD93131988978969A0868B8D9E1858C5834A7E7BBF2DB36C6022BA42CA0E7F138244B672DE91B8F36286BFCB29D7284DE21B17193A90FA386C5283E2A93A2B396A18977B5F1F3375EA83D50D47CC865A184043BFDC6BBDC5491EE3A74CD2CA5C6F43A4E767CCFC50208522510E85DEB9462598073E4CC632924242B4398BD115846B706AEA96C01C9288B102356081CBFE1CB5FAB880E4AA09D46CF36FCB6976962A44A5EE09C42468A480073CC93C092F5A3010EA2959464519ACB7945C47095B15EB269367C076959769891B699698CA2BC996588B587C34B9571576367E725C7D817CEA0CDFA696423429421F006A4D2279546AEBC5059CF796546DBB61D673263CB4194341F2B12662CA2A1F8B2B158F580A287081DD3653840B64A51621A2A6B3015C9C1CBA6CE7B8D3D826FAA6B57B248C1D9C187F0A20FB0276617D94A03B55025DA328901B6602A81D69C9AF73120AC37895D393A7D605FCD4B44D5856B06B09DF222510BD06521987A2B2204B5470012C89474836393F2AD31FB73DB6B2A237391B20B3548DA6065D5CDDFB25052C810522744542CC7095A404B967AB33998FFB0A8141937AEBB36E0A03EA8003FB4F634F58C1106C296D968AF8CE31A21E252E9091EC6AC2268FB30E5D50FBE3A1FF8030F7715925E3221837656AE48C582A1C0432A4BCC1A193A81290E329E3A968E07596A3976681F2715C843B34AC1C4644C59826323D2D27C5DB4854FE19C69B559A90C2ADA75776029055DE8CA41655035203F4ADA550434B7F0DC7F87B70CADEC26B1108101EB39B4181F5A325CDB82905BB8A5BA15A7CFC6804FF99D2C29616946445567C56FCAAC8A695466A928525998E53889397812E27B6C332B6748768C67937F7DB2200BC78448F07FCDABE17F1DFF4D858D6FE8A1C8E3" + } + ] + }, + { + "tgId": 11, + "testType": "VAL", + "parameterSet": "ML-KEM-1024", + "function": "decapsulationKeyCheck", + "tests": [ + { + "tcId": 146, + "dk": "1AC587B7D28667198885F038B3BC374A986104011DB6799389B93C7BE2205A464C46D75542976F2AFC0116EB44A5860B72EB7339780B1F9984CBCAA171514021E2C73C133BE6A4AF9618BC7384A3C6CB8375948AFD9C665B938438B8541F165D6CFB5E84FA0EEF49BB6DB69474664961CB1FC22893D6969DCF5012010B4385A22B3AA700758A37110A97DB7317D836045B8794EF3A4C82B41D4AF783964909E7A21ECBB4B7F33010C040A8A4616B64D015E660B8EA812655312F47297A40D026E8122DDCE9A758721EB2B9BA5B95C7EA06382CB093D5826D79F4B2194C1EB941C61D1742A48A3992C87E0A763201168DFF0874E16937B520499E2802158688938A665BA93043B8C4447AB8A2B439CA2587AE39869AF7281F7055CA8A6150BAC5F2C19B2116C07CCC542CB1BA0CB62C627946364BB032149B34F6350AE894CDB3B236C98EEA979250051A08C1AC8DD204E89242F528849DE78979761BEFDBBAC08656E5D4CFE0460045B7C9DBB7C455341A9A198BF5A179F11A1F06782F96EA7249764D4BBC6FF0F9035F7169471C8DD8B0536F60CD86CA2CFFF5C1DC432EFA958BD84568DCF97063227635C31FB227CC7360628E45BE475093A1A77D21998D1A75957218AED3B20C808833E2838B92A8CCFD3B1C43B24D95329135A03296A3267793992E96CA9E2712259380CC863F699370B4AC3050797A63A06838031365669D3C2CC8EF2C22E47494E10224D933492298A4EC1464F847529CE94818720436998C4DF27FC136C6B24463EE2057D318AD6B245568F8B3D876CA9A55A8769773ED357835B90D10140487A263B0A17136CBBD6E190371494CDB399739C4196F7B609D1033D4A25E3335079182BA2153B4B82431FA1342998867FACA85B68619CA04100AC51722B8AD2BC5BC56AA6FAB3047506A95A378A4513803430B459CA965E3A004377A5986383807E4BBEB712673BA0B6E63A4CFCC226D359739DB69B475700997C23B750F38605BCAF3C7295417F5190AFE36B4F6CC551BE588BEEC4FBF834188D4A05828090D5893CA2B090AB312DADC5BD6437CB6898E292C9CEF8A0C54CA45078C30FEBC55D461C8718405BFCC799F1324A522795CF62A02C92A8E579831D37C2C85BABCBB5082305A840A62FBB4C8C3415C9EE466CB5B2A84C93044108691789517462CF714700F932C59356830DA53C7AC46E5B3C9D5A3BCCC619D3BD02022A663D08C86CED4A14637B5C1DC04E151A74E6258E5E141CB02024CAA8E8C431FDA9507821336E265969767BB07AAB564E496FBC68E073C0EF200AC77B2489D8C2EF4FB5399B00B2FD546BE484FACE114484B6CD7441624067DB5385906EB7BBBD00ABEE4034B62C44BCA9C7B010E6CD1B516D42DDC89C07EE4CED1D8511BDC20786444893987F6762E6F083F78CB8E14A554A5C463C9BC920244876D88AF07FCA053509D22162911427453754BAE983ADA5B4CC098642F2C4E1C017DA863BC7C407F11F839EB5689DF88C87F542096D3BA902B12C78C1180C361A436B045D90ADD0253C798144CE7323874B0DA9BB7E3B753FB22311D61AFDB8648CA2507C4AB0F6F0732ED39721681083B820C83A7BE4B2861CE047F23E3B8C1E1CF7F2AC37146764651A5EBAC09EF8B6647D612CAB622A360392779796C5271116383B92AC171708EC991759F7965F7254A8199811A19340794379D46401AA0B474A7023E719D4132485AC328648464015004655272309A0F96AC4BA8D67E985CB6B1D7216DCC52CE4378C0874257C62E4DF7384363BB9DF57C160B1CA99628F761AFDFA8034B050E1C28980B79438A409D3A46A422005A9927CC72081FF144717772910F0507CC818361E9BD8A135CAAF785F686A1BA4BA637B8A31663789B2107143CB79FF67579A8AF4041A939220C99105E633A0F9688CD8E4C1F43FAB487C910FB74A333CC17E8C0BE2CE552632BA1BC3C9E113A9254495C491C6A3E549E436C5551A13C62F4BCB8F084CC526FDE01C68DCC860E3C8C9D925C8E4A8E8F67177079AA09B9BC0AE02DF1D754B587794B75066AA5BE50E3A3548ABA21925DD4450348A060D9E67BEE9B1DA90515FEC00B72FA55172C3132479725AA8A44DA687A568356D3CA8BDA3FC79B6749533B95AB2EC3AC08EA9B134477598BB782EDF7265C735623333792551CA2D722EF57467EF24EB80B54DFC4AFEDEB20C4F8770D7489C0BB3F10C9873CC92E188C5DB51B5F63BB4464F182CE40AE7CA684D1DB3EA6B90CD7F0C9C9D9ABF8ACCE399A269D233F9A888F174195B4388F61F3529642A8EEB5A6BB5B21710B6093D85F8B36A86CE4B34A1C876561CDB9005A69D4547F6767B5293BBBDB38E6F1B3C6863E1142C7BB7B4C5F4123669991E1895989C168FD5CC47EBC0014842366781C3BB3BC1D192E2A6467F3828000639AF8164D2CA3BF8100271E2692B3FC54AE2115CAE05DFB211F3CB10E47F25E8509867B2466194306813882321090BCB6B270B1AFC9B48343536A702303F4045F2D5449E1724A76865695E5667D891A9CEB11CB100C7CE7311A88462F98652334BF23D4C6C870C130E235A79AC3D24A576A20CBF7372F1F1970FA3798664A945A9824111133C42167EF640AE4C6885C638C6224A48A823E25BA931FDBAB658183F3A37530B187C010A2136A1AE8DA235209806B976846A2955DB4CF6EE93788A49F157737EA5668DFB5BF5B399386918F17216D996729F4C26D54EA5054025BAEE980FF85A2146666983388EB667C8AB193FA043B0FA4BCA91C47C7E2CE9435706979BD137B8BE789614DC15508B93463307B1EF766FC24767826804BF6C6D8D315962300B8D18C33D5177FE98F6AF131407A6BEFF468C8192FF9A4885F18410989811F0A36A80B9EEBDAB314D92E47289CC1B670D116540BCA9C47A285BED9A78731C3DDB9BAA4C49FF96941D55AAF062950EF9C263D244436D1A07DA5CE9AB2C548AA339AFA701173816D1054C5B123637AAC2AF8291AF64081F24FDBC77209C88AAB0AA7BFD28C829688E0168D4F6495EDD32AA860C6A95818D29A87C13BBEEB5A9899B98B67143069B550A2554EACAC6B64986033EBA08F7C564F323087257BD5173909E990DBD1C9B737C7022977C5C822FF571149A656AAD610C392C22A31768F11599F629725927D4A018AA469425941863AFA7C290ACAB408516343CFC770C62CA3CBF91920B8866A68EA0711B060AB487AA93B475771368767164EEC4072648BD6F2386A08AD085540751392FD41C298FBA4828588BB7C9791843E3FB43EC9FC0088D28F3661577401C00DC397CC0C5A0163ACAE5689F8F210D1366FB7324C92D082916C501F3A943D4215BB740C107B7D3DC067BD773ED4B36F966C9AA1028EC9C13BB22420F914BFB6B6058D3016AF8C59163158BA73410664C9507C663D864BDD0A307B42B15BD5C024D07C901521181B763D8ACE75F349E8742F369AAAB9309454981925088F074971AFE0A43DC588D6D1A759FC1FFA4B4BE2B8662AD58E65B9C325855EF0A76F96C64E62979EF74C559DB531AB69638B5652D92126B088460E6A35D1C3964C1C14A463154724B522AB9387E59B15031B6753B14C3868BE12AC009A424FC43982D23D4D48B50ECB885ED8131C57757023B5A8CAC0ED760EC5154F54750DBC2C854E6C62D9F0337ED395CB46A08B36981C770AB535705EF47DBD9876D26B8579E639B8C0B80CA00DE011AF09B4AC9471662802B65288A2130AB923675F547485B71C2A3D872A9698702BD87776D25EFD56B55E038CD47A75CBE26EABB3B1CA561AC8A3005A347E4C1AC67E1227224C50618C28790AC1B36B4A2979B3CC4CC1A801391BD5A2B60180BD61028DD454BCD86FC9589F696386B1B6319A059522B69FD490CCBDE28A8DC18F231CCEDF17730B30A7E04862174AB83F2AB4D02B9249FB58CB42287536530E2685C5CABAB8060051295333A7504D4889F5222B0E3B3C0AEB88AF302C33653C9B2A97713BCE97A1492A98A0696B6FBEC76D3E56563DDC0EA685B7B5A010C7826023D50EA8C5376F27602A2533A1AC88B8AA8665A7A471D8AD5CB959ACC08355558A258AB68326C08E5426FD9629E017243A5362F9F836CAD6111073174DF6663D46A3B3B234A8A7BB06E5CE81E35A09ABC6622205AA5C7B00733651EB4CBB9A3337A669A5B68AD504754BF3621BF42F6A00B4CE765D2EF9819BE2A60D76A124B18EEF6264F510CE32B32FE21657DD9176C15180011A08E8F34197140C92D7013FD274F1FBA5E68406D756CAEB621423EAA3711246CE34CFB528BCD11737E814662606B7E94BB08895A5487766FFA604D6AA947660A12F45623D843E08667AA73B9EE02304B47B360179088B950D5668B66252D2475A70DD7843D5C8FC39C59CED9E0BEE0A2EA73001DC59F642AE7CFA5403C18273F9B4F64E2ABEE3CE67E4BEFB3132C877D3D6A1C30B37399E6B930AA142EF" + }, + { + "tcId": 147, + "dk": "1B34A11A4A6971EB8872078BCEF673E785145F811DED390BC6A636AF3154CF620D2B124E94724A6E6A295669437BCC9C9EA1880CB00DBFB304F454A11EA26C0C8A7E45A73DAD1680E9F3A75ABC39B180624CB1A2DA7B111AA15676E151505C3429D59BAEA1393A267165C78839609E29A6BA8287B57E02AA964C47D361A2C480A2995791FE1A6F6B581AC3DB1A721289932A4E3E6AB36BF82EC8C99D93E7A2C6111ECA1CA171B04A6017B4212B17BE006141FC1CC0913FE1F21247CC9E954C4C59620F915CA3E53083ABD51D6FB2650AF00D01CBB963AA2231ABC4AA653024E66F6C18202822CCFF17681B5CA185F49B86C71BF23C71F7B27CB21C5D00E50F51DA11067A6942E37E71B55564B819DCE57315569303C724273296A6B282908499E9FB2170D232E0AC9CCEC32A7578C28B607E501580DB8A81AA384AD23B42E6529A05F60C42F8B9637A14DDB96BF5D6B2A06C1D22AC2A02B557C3A4592AA05A8A47762AB9969AD315987ABB2791AFB0C52730E31CCE29132D3A9F66EB772A030C919BA0FF5B2AE193244D39A77F70341045A46B4374AA6407EECA7FBE31044FA35AD03C1273D83CDAAB2743386A4F3A0CC7B96C231C577B9849A9A806FE040EBF814ECBFAB336828AC91861301235C42080D0061B22BA0FE6668415726C9EB1AB3D28C06A8659DC7C441E532217FC6ABC3C1A43913696C459CED2BAC8E63147376E062682ABD26A2B697389A85F48D58F77486240A89737168526016C21BB8D1FA90FE9859C69BC43808C7232C48971248CA58916B8891430FCBD12E667E3EA008E231B75361F49943520AA3B5B76187C9527C3C39955D2B7EDD3124DFB79F8F589401874410AC14BBA0E4BB25777C9CCC485537263B68BDC7BBA6481FE15540DBAADE78B4BCA8CA6E0693E1560ADD827A4409266829B55187853915C2F78F253EC7C5E1722B5DC2C7E325B0A42DB46CA309782C3BE7B198F1ECC6FD3145CBA74075386265239C611293DE7F3066C4536EE8A9114EB85083234BE35040724600FC950F8076C70E9CA184C030D465E252A7AE706239E62CB8375309159980C3690C73822DDE78C9644705141A3BB5C5784355998205285BCC98738B5E063401F5382470C91BD69735DDA54F39611562CB2BBA791FDE9C2CA006F5040413B416ACAD48ED9236DA10B129DF52E2E645C84F62B78DB9E1FF52D5A4ACAD55B50B564BBB8C7BAA9A997255A761DD8A52F352541197FE5225772ABCF523B8311D67F53991EE320A8D98BC300A7A791C27E70C4C0F9A28E1E3375E8EA9050383DFCAB9369FA7B074433A3C78BC90B215030BE98229185897DA06306C821603FACA6B7745E297263E2345D579B3C20F04EE1942CB8A41655806CDED02479B94DD888AC78D35274A296B53AA8862100BD06AC2142A001180A91E34B6C8C7520B6AA8616B7EB65909218177AAC01CE7770A52183C487407D9508B37C2D057C6DAE3B94875C95BC4A14D18713C29A911821C6EF37617BE1C1B225CD6168B821AC30EE46B73F127790C59492895AAC36C8E86A2299D3A61569378130C66FE9A8E17C07DCD6581B489814D75E4D15063EECCEDEBA91A3598EB004575E1124AB756AB9B472F3B8471D2B8D94D931B30424FCD0A05AABCCE73319BDF115DC921D1578895846B486F19BC766B9BA6268DEF897F4296127612BB91030432248AC0114E1509D2FC6491D3B1B86A7853217AE8D06B447E7AFCBD0B74CEB7C550342F045A8D4EB084E632430B675FC228875828D9FE51F2016034E30261A4354C7C0BA15F62BC571C81ED78372064B11C5946A4B92331833A4900B59F8788FD18BD8E9C492552AF43480F9E459C04359BEDB9A2FC6CB40299E9CDA40A2727E2F869D0FA5B5A8B61E1CCA35CB1504ECD253F46683077B4848B7CCF0E5BD38A875DF58CD899C07D3B5BDFEC0B2FBB4ACCEA28EF6C14C00E57EAAE95A9C258A5B45BE2A479755B96979584D9FF970018B58EE90379C78774A97079411C9069646476826F0CAA8CC0372E3A31977E4ADA4A4775D23C46A14160175501404B3BC43CAD40775C8F8C2556B5C3C6B04912851AD4312FBC053156122213B0B06D0ABCF643869357E74C98428245592896B858ACEDCDA4F8122930A8048C9B724C5581A21B67FA19C515D166F835416EF367F405C758AC35D8463A55D324C6FC4892EC669BC334B012A27EC474241F75E40BC19D952BC12185DD1E9553F02C74C60732722A7CA75907164332C933DD29A3241B684BE93370ED228441234C871BB746C35B941116163BFD31797A2B71D052C23E486766A8470AE148F83BCA2A0FA32A9B15859587B8E7954D7F0B90506AE48AACC4D0C1C28F99E10B0A776383E55F1186353CD0424A83447280F1093AF474080C999EE59769510649C451AF7E02DCF98A66F812E14619A20081962BC8D6F8925A0391A9BC66B77A4CF7D6CA7CA167319B9CD33FB64318622CE89AD56F424564B6B9A202BD9291F49C0349F543E17251E2671A0E38CBAD81A95AA09B4500B71E5C467765243C1377BFAC5983136C2AE4C312B7B9688DA7AAD896BA6D2651E74B946976E95039D6EF6C420F7AA0BEA94D5A3C3D791AD0BFB0D3E255FB717BC9797471DC54C1E02184632B321539237741BD9476984E28BAF980995EB18F39578C8564A9A126BF9D230CA3144004A4918102607F9129A592A2C785002202AB863C9737428B18A53F73666869B34614461827369417B76B0A9AD1B7A4C62D6A9E9525F8559245B663CCB0571D5D6CC3B09255285A483A92BAB02C1A6F75C984C034765A0FA2134DCBC7A63042AB9E72F6A109E2F6AB7DDF9CDE8411FC06C7F030A5F96135D7F663D44747556731B9A0410675812B183158F94B344B245E1B5BFB2280125D19938496BEE874AB9E9854DD43B5B35AD3A4A3871E05E7FF4B6BEF8ACA21815325667B6FB11679213D37912B2A41ADFC79FFDF487A0D189C7D12DC467165B555B95207E1BF7A578C07106B5C2C0932E3EF79F5A209A12C20DFB458C4F147A2BB98A33624072ECC0CE63BF0AF74B11A4950CB3816C1063511892DCE12E548A385E3AB85A40B383E8B6AB81B1E082312666A74B76B85E494FF4B1071FAB009BDA1E004806DC784455248CE8CB67D9D37D036736194B0BACC15559A73BEDDA1F94C8B4CED5AFBA905BBFCB8F83E362B0412C6F28A3B909B8A3A05E6E184D8E862CC77C60D7DCCFE9B62E4F44C8B9A09D17B3B9895A51D437BD7298120D8A67AF9CA6620424A04C890DFA2BA535976CA07D194B028DE1C2523B7076BA26FBE1A1133277F656AEC8EA38B2226C26202A6AFA10876ACFFC1450A3F95D221835E62320441BB1C3D4B4EC287CAD778921A4CEF89895119B85AF9AA71C63B205696676059C58BC0F31C933BC04419711B9FFD0B43972AC30969C66D260C543320D423260390B4DE598F7824BA15A6071E15DC3989E750576EB219B26A28B9CEABB32BCAB4926AE2F51AA4D9C79F1473538DB9750DB660D8936A463BAE1234CCED8777481023A94419A6379D2572734FB685C5A79A45552E46203FD317D9B34190F34840C5294F474060F6ABC2D291C580431C50575F556544EB11D79CC88EB672259798724742A9C9A924F133CBB39B05598281E3481860937246ACF79249BE5C24656D12FAF503CFC4B2C09C70CB88758ED4623BF205078D1177291C99115B3711496BC4770C3061E821977DAD2679BB6AE4AE694A165172CA015B1E4A19F2C599DE92FB7E42497170EF1EB7E6779C238E70C8E804938AB7195AA4994E326593830C79357B4883435E4AB9B501BC80A9A0C7405E0A121B93A8F3D1BB2F8E0B1DBBB7BD07BA1E3805AFA734B07F75D360567A9D63F04839534017D1351529FD1825D058A613607EF49254D870E382448ED00C2C8B683AB676518D20D82006E9F169B59E2B0AA8710802044B0D02F60765E67DA15CFBA7FDD88CE5CA2A0464BCEDCCC85E509C4E44B82B61C04056207972A9BA1499C9194CC82183FD350C721F17998C2AA5E73CECEDA9549245026A9C14EF3C32E1180B6BA06E4A4486134ABB7D3B0A331B18FC96D21374E847C2B79896490E0715BB42C1ED73737B312E674C006C9128E1BA300AAAF0A5068BD970D60E2880A2122C3C9C62824AB03224909CC91E7699CB9B63D210BC50B2A4F370424B6546DD09C5E1F77A5F4B3388A5C6084C70C5A41134A0C43B055B2EA0A5B41753E96F2A5A81992CCC82C10DA4B025C8258E6A2DE5A9104F6A546E109B87AA61E249AF04C6CA6C8B1F667917F5C26D1B484AEA086FEC054B5B0BD50F746886299E563A06DD2C8F58229A9F79EB0C153B1296B45280BEF3789E8DF315BB998B588897AC4BCF7B41E4043F96F28987E46D9DA695DC529FA2357484A654F5CF863005F28133B757966CE6D839D00A7FB6EE3E12342B12F05C6EE68FE3EF0CBC5FF3243D74720C04DCB27164CE2194D7151" + }, + { + "tcId": 148, + "dk": "5079207A9BA6B8FCC8EEF15A64961923B2930072941D757E43DA8C1CFCA511E8443D6A3AFD645419F1CEAAB53644CB923F0107A31C7743E58D0B687181A00BF4F856FF359E0DDC8EF5218846294A053992C7F80893B41C31B716E5250DABF40A39C3038DD26A11D2AE7610A0E2F5952B6CB9F5003D13846E802325DA2A36DF629ECB4B538FA8089EFA7154F6030F3B9C98310C1599A54542110AFB38162626928B7ECC762AB306500A241A93B94FA76C1DF0E31099AB710C904B61C6AF7D77AC58641CC9F327C9A500E27CB1C4398BE12B78AE387D792B2DDD56A42559A36A716A2FB1A0DDAB0903B86F01FA579E97B729927E39A4852CCA90E125971822CB26CA0E146B290467BF875362D3035CE3633AE78BAEFC15209BA54E2385917C738ED5042EDEB01ED1824D04546D838A3D853B3EC70B8E9A16960220CDC93AB0158C6AF06C0201321D386C10D459617A7BA27A16721F541D865806355B6C4D562082AC935E7CAF2E4715CB5C69FD6175745835546203DEA0BCD4A291F32CA9A7DB17FF103888968498D9277DA42A3697255F33063BB25C90100875AC856F266E1DE75627EA0872F0516E7B8E21E415518B5B52F7917C6180C87A207890B765B37D5ED987028A4FA2201D45E2A8E711A68F4B2E65E47DFA3CCD2A6889BAC2855EEB5C3E9857D6F1935B468A72393E826512AAD9CB310AB254B934B7A27CDFB7720C252D4758024C8A1F6F2A7896FA603455C26323061E172FBD32C59C7A811113113E32604E79578095B5C1354B3F423D6A1334B9E117971C61A5D90A171B440D94B1E294643BB1C0005B98152C4862222FDEAB653E2B890E1711BCC9485632A1D6725ED8C50BCBEA9211E84D869747A6A2754851A25CE9013737995F9353A04225D3E55AB349A37A277298A8706E8C5EFA074BE18B855EBCA864B90A21F958DED6341BC3773C4632B3EA35C588262207580A77CCADE919430200B25AA71026C0477A38C91A5241F88F03E124D084235A919FEA2666117705BB8C14088777CDC1C986DB9029D9250530AF22166F459B5EA16CCC7286C2AED039FADC1F94A422E091AFD5C868118C0E82A7C950F42BC8DCCC01455FD615B7D4769278772DB54C0792E4C28BA859E52939FBE85A36D923D8296F42B010062A7B16070EFA695914E17C04F76F103CB12833424FC7726F946D9AE957B523057C16CFE0F57956B73E589111C0F55DEC0B578AD4417D1922BC796184A73935544CA0806AF200A7434588970BB1CF20B1271A0548A14A723420E06B8F64F97550144F1FE4477114BC75DAAE429C2837DA3E46868C821BB32E78272859AC9C6B105DAA1A5A9C0DB7B85DA580A326995438863E7ED24DE7A4A1611C5ECF687CDD6749AE770045A9026E68110BF97ED68B8C58D3BF476C24D06443D79B57A72B421BBB60E2936AE3D3BFBCFABB070A3D069C8B6B90C85059A311275A1D385E97805D49A5CE97B027A940C5293632290C13A01AB09184005B3419F7C42DC2A8B54AB84AD0D85CF36C23794B55E2309B18A5CBF90A2A17BC2EAC19B093B1B3BA2B9EB6F33814216B4F360B48110449B6AD420B1FC3D9464C8A29CF0B946C515494107B43DCC51E5B14A36629E496901D702D231BB09C768136FB68B136740B281516742E06E32F76FB3B2801582B63ACDB554BAAD6C86DBC6E3BBAAA1554C318B255519BA4D0811E39122AFD16634DEC9F7ED9504ADC21F4398A913235F56AC1FDF7697305BA23CA0FCBB99DBE079565738B4A640407879940742760706B129A38629CAEE0478CF8D65BE9706C365630B28B6D50104B38E88B1BB16BA0E08253F36C9A30BBB6027B2B053C3105BC9BF62B5560821A1168E6EBC2536C8FBE855596EC1A82CB3492F98CCFCB394154553D711DB9B4912611148D9364EC5903184BAD6F4472299C52135BB5CC827D0DB988F61C7A06F6760879017B983CB150C8C3E47503F94EECF9CDCAC31DF5BBA1474C4279E43545EB79B051B47F97A07EF76FC605534F57B715B5A10E3385FFD4745A06A61E484BB474647DA267E1C49D694A0022E9A777796AF56700CB728393D5255A0346C4E50B5B28CA1D1736283983A5D9AA2ED7049125258338AFD02018DC3CA63BA67A1F0A66DAA898861867D6061FBC774FD65CC4048BAEF1880E423236765CA815A9B996B7CFAC76B9122B2EC2D59910148509C35821C017A528CAF7923972297C48B84E8E24264A814DDEB88587B099DA9AB9C72A502664A742C82A25CC8F87091A3C74BEBB1289A1125B2335AB69F1CC8CDB5A7669364B44644EE802306A40CADBB442C02C55A98BD5799F24A5CEEC04A82E175EE116802CD0C04EEA3AD8B5C14E45B13959BF6A5B663745B225007444199E0B848F1A061459A60E2593561EF9AA08F745C805C60B51001E669EF0A4BE0A43B1089AAFECD12C697421F289C2D64616E3E814376189AAB49C89F0654A0025077309AA411F1308BDD495158BF84BD562B3B702436CB1708FE2AC2467313644830BF28B7A26A3D283C7C8B4B0766B831EFC4C58972FACEB1445FB5CB6E76EF1AC0FDC6C6DEF1281F74AC590FB0D27B4B9443B204BF1CDFD498D57BB0F8989A68F264CCBA04AECA45A1A57B39F4BB653F39176852372C648A77C08515B9D0760A61926C0AC11864B604288B128FEC886DA72AF882B082049AF63B44F6BA7989579440DBB29B0582D5D397BB4BC1EDF7231B26642B0940132A44D18B34627922643997F06886E6B920FE0F55511B475C5D06EC1C52001C62F1A390782FCC03B8081C1401249F9192410CB172980CAA55DAEC4C836C98B2B3CA0756B3A04702DEF15A3C8F3CE8075BF2A111A83F89E88B91CDE3267A9B1AF5B9427A2E7BB13951AE76ACE31936EF35558E89724B5B48D7379C7467C4D0FEA74C7F5C41F674142A81508BCBFEF67C01FD49F12A0A2487B802D76C2E21943929185B1E9A4B463BC16B1CB44A8C4E58C398623A57600C7E3367B31ABA3A1891CE3BB44A239852F41A7FAB38AAEA9AF4E2A3484EACE6BC14A4451B0ED69B5B2B061FB4C1BD8A5BAC9955ACBE45A7B6683EC513AB5805EFCC84BB7745F4A13BD2EA57EEC3947D024C94B2B485F8A77858336D3BA144208247AC965407CC5493A8A4FB8525E42B3D178551EF08244075B553ABC956C1C0EB88983C5A6AF4799447B5A6FB382C2D47CF28065C4A59901D62C52887FA156391829816FA577FC044BAC3CCF7ACA92BA50CD4EB21C93765C4A76B013FC203A5142F79CAC95506FA1F59521C59667D252C6556195574424D65C24E517A612CF5DF805B6C5215B20988255B558622BD23B5E985201EFB0946A58B193A97AF0FC922F61C52517AA75A66592934872A49E575401365A7D25719A51419F4FA47EF5792C7C7510FC47AE3B4908CF86A2DBD55372C33F923B0C62B93AAE1577DA37138FA50E7C4ACE09EC63B505CA62908738C27D83DAA115D03F8E58A5C6E196B0997A3DBC991ECCCB17C580939B1C52B8AC37D78384F550E8305AB2A580DA3369A20300E9188CA5B7A4D754A307E99D3915931BD08475678B78C9B9CC4CB55854C6E6E48F9EC14311F2ACB94B7E8CF1CC8C8697EE9B6DAF3174382672E23843649C4132EB683D612C4D5A1A91852226A237DB7165F5292B7467C4457BC377EB2B56714516A9931D193276E59862436E2D3A201D8A62C4C11E5DA44A909888CC3CC423D037C0760B0A2A3E302A36CBB97121D19A9043410D7817E3544B0BF529EBF9858AA90FEB40B535505B8F628E39A16FACF6C676B45E5F14B1348C96F9F77FDD557CCA98131047C0DD870532AA8E76871296A9C3FBA273308CBE6D910E50DB7052B882113219B7C3CA8928670AA5B8A733760FEA27844B69E5CBA501F28BC94B3A984B45D6D2595306A53C07C0E28BC1FBDB790BD5513B428C6D3152C8B113F9267EE63A97BEF95A08F08F5DD3C37C738681DA5E4ECCC81FBB22EC67AD35118975195AA1DC352E105108DA3E807C3ABB76BE9AE2CB35A6B29FE0C911FA6E32F02C81C8AC6EB52881E8144AA5BBEDE7A4F6131875E1853BB8A70425CBA112BD0A7822691920CC4C42101A7AFBD330D16745228017915B1E5B226FF22C07AB55B8ECFA8DEAB96139E84C7DD3B90076BA85353CF9D30DCCFA5E2C170A49561FE1FCC6770A717E3A141352976CB2C87A155D36D6934A144CB4850682F8CB57D71C20F67DDE5C36E42CBE4E676F85C3A1DC54730DA125F5358367AA764318A8BB17CDCA052177D9504E7CC472631BCA4A22F91C8D7B0B4311FC0AC18697FE69225599A0AA593C28211336FA2BFDF78CC185CC44AAA6526587AFA94558239242E0649CC497DAC4FA87A7CF6D212C5E529E8D7F1D7A1300106ACE011B70B1D642F1B3B37A8A9F846544CCAE276967ADE5235ACF3FACDBFA2E1704A65D907F6F1B483306EA9088DB048D8AFF3BEFCB5391453A7CF7002D29568EA2E4C761173648F3F0" + }, + { + "tcId": 149, + "dk": "B1A0A4F15091D04CC48FE4840F37B49AF0B7ADBCACB2468824B0B09902BEBD24254E271D2E9B9AEE5BBB4805AD0A3259C7FAA24A829D02EC441195432FE496B2398DEF08428B318911A8104777772794452464BC09941742A9A9B8FC7DFBCC3BE1563CC7F93950EA099B7C5E2585C93F6AB26B0B50FBA293256612DA131EAC2680B1B7C7C4A8CA87E2A9865036F9DCA961A59BADE809A90393686B874AF4758B702065B993DA602F5EA02DF3189E57B1CAB99099105134ACD33208487B849B19054575C383279EFA9C2211BD1E76662C5608BA902BB8A490F7D8C841E8509E228DCDF7267F6CABED44BE1823CCBE550014F7BC83F881B27A14FCFAB5AFD3C5FF9C72C0531A530B01EAA944B827A759A9A46F69036FEB56A6591CC929C464A0AFE7C394D380242F779FC0F10A0C89737D877151452189D7A99D508581E4B3F24B5C78E67B67BB07E9C2A887674374D8AE4658423271BE00FB13146197267A6D19600A3A116ACBCC3E2FC43F1E592FAB06CF46B3CF0940430486A3E86589C4D68A13F63F133B74A1B0A9A0C67B0983C8B311774B6B310BC83CAFE807A693AB29A240D8B80ABD7377AAF05755875315A14D12F7C1F8603ADE8809B52413F5E02B15970A515CBB0E15BC244B2712916B483A844BC9A545354F45665A33D85E69218ADB95BCE20711FFA813842717AFA17F41B01BCA56571D0004DAB9B522467CC5E84855AC542D1605AF84CDEF712B55DC875400075EE543015A1CD96B3358C98DC79146CFB17D4D7300F34A195C805B8F1C3DBD591CD4DCB502B7305675B8EEF14A8905A1ED294050A52CF1B55C1690210D27253CF09AD4BB113DB0101EE810C45CB144CA1577612ACC24ACE29B4E0A591B551165CF524A3C7540238C10897B560E7C7FFA2909BCBA96F0FA752F7B3ECF7B0E0E5272B30616274A8A17369092E28608A0665D87895E1350D7F3AF2B269DBEBA5C0A15212C483E5F68998811AE61D49AD223970DE112F4C768E8FA1A38F4BB1C8C0E9E133E1AE8123D38CEAC5383C4EA10DF2B6AA3596C19CCCE4EC231418ACE90B15657207F70780166DB903B39C8A0D51D11B13A9842240E40BDEA70B2E364C4C874309B708628FA86D41A411AA8398CC04CB8C32178F38C7995C47E757402769C4A8194C6DC22BEE794B5781DC00633AEEC28A3D13476494D176B4D96207097476D0EE1B2995A333E9188AB4B914EA094B0303EAE8174752461E87377425A818A309845D5CF8C953AAD1514EDE931F7F394C0D99824AA6C9A530F7F6C4BE2B62C8782C703BAB573B77620B65CA8B7B376212FF1B1020A299649E84ABCEA5834947B7C055BBBCC6332237DE0B886ADB50B057C07C4903081041FBD1B3A1300169E50CF073B8A41C13A05F986E7A5B5FD8B5CD59A47AAD22AE0968A78C9C914F7A8918BC2749C5362371D0D8B5E68915E28A8750A033D3C26B6939BC3C3E2B59D009265A833A8FB58758299DF52A23F8C9041674C6C64AB8A049AC35769DF4BB828224C6A4C3AC5483CE4F8A95957C90C37703FAB1D1E7048E62AB16AA8B0234AC0197351A8400A8C1A87AEE4B2537B5B400AC4EF98240D0620A63724F6BB9856F32AFC152AACEC7480A17DF7AAB9AFF93C6B56227B3072F74B88D00937D8C4BF18C1B7C3914EF1337C06F6C0A4DC6EB788469E6CBF0DD95C90975FBD34534D3999AA22AA5498AEFBF6A31A263C5CE2A925197A2F294425178319A8B28A430A792CC4360440C602936AD55301422540D931C3975B534C048D946B5FD120903BB3C082CFB0E375A1CB204D54A02A1120E46BB221247E2718315FC75DE4823B16474E086029AA4B852CA96D89FC81A619A1A48A47551440F516B3C09054EE085E92FA531D5B341F571D16B1B0A46168F4EC80770388E602A960B8A12E02920F54CE52560DF4356FD58020964AB4DC3942F04415373C7641A7A1E47B5B81A15BC534202083BB1C8245AA186A84133E0A692207F32C63B3A6FA24014B88AFFDC5AB2637525F9B7F0C960A5CC137C3314AECD96ABAA93774B76F9ED98C987C74BF57909127AE9E985AD526AD6E12292086852C2931D828202A0B02F3564E5BD85A478728A96192AF92046C212CD10033816484940B8F9DB790FA518401B0CFDD168D339A044FD37D9C4B37FACA18A80A3E010037D9420200DBA90B1B2E432798DCDCB7A41461DD869413291EDC75193FC968C5A6A24B59AE1051CB11091615891B065B437BF264DD5092682C67BE8A2FEE6A2932E0172D44A4F906633A282576A24C994C61BB2C6256E24C3B6736730BA4996631D973013057411F8419FA635D17BB145907C870B0331EB76DCC6595072A2A69317A03B887316132D2C28F89B32280793280AB874156C8D5946C26267542AA225CB3B09528465947354B876EEFA1CE06582DA725AD1105B3AD2013F9535F053C3672636E97858A5166C70DB3A2CCF57792B99B18FA700C47756B48BDBAEA2A0001A19A9B322B717AB07B051E8A61690961CBB980BC18BC0319C0FE4B7B75349C3DF488CA068F6FF41CE97CAD45835EA6FB27F894CC22C4226870C0F7D9B9133ABE3BE248190688E8F9117A2B20505C90EF8B86AA5C8DDDD6C7C3623E360652C943670D5891CFA03DF3B9ABA489225E6A6E0CEB5777414626824D1DE5368F1971A37779E7199F0BE779B498CA23E14BBCD30BFDC9BDD12932D8F00F96E089B152BA2B1A6EB504115AF2A83206B5D848644F876A07302D6B1098FC9C24AA709507236CD0FC34067219B3E307611000D0F74545E093E210BA8D48642EDB6DE5963973120DC15407A0426FC8D1CAB6B20DC5316F9B145E35F67F781C52ED19AF1AA49B54708964AB569F174E11276A11027C30E5BFE8A60E54277401A848AD31966DABCC5BE99C19CB5D7B538B18C874EEF9B22171230C7771BCBBCEE0818CA46C8D3B6C4504430581828E17C52665C7AFC14A671B9CB222D78DA359AE958781AE346AD481B2F949360FC84736577BD6C9831D981C8E928729965D5ED81E770748C5D9025D550844A42AA452164267C7B32C6BE4F322633A51A655B00AF53A70530E2ED2A795144314902CD77AAFA7E419A17540A6267302798E488B8CCBA8A7EB40806F980B1131882E37CB7A34583B09072798A1140C61B9E53B155C9800A18A901182DCE15626C6B8B753324DA30DEF51B6C4806A9243640960BA80F0C031A99EDBC7603FECC63086255D187756A5ADF6DB5045BB723866541188CD183CAB15558C87CC322A9AC61486A5B0E8296EE21AC11073D873307FF4C443F0365DD513AE6502F2E4758D58BAC2428EE5877AA76614C48B8309919ED07B0DB20099D0AB60B50243E3839C29E16F0B34025BDA400D7C9F9BBCB592574457005325C22BD36A7EEAA0BEF7F542F4319E51A51EB8580B8DA70C4DB535F626193029983FCB91BB057E7F246A8F078FDEFC014EA79D419B5344C99C566B9A2EE91C3566A275703121382E2BD88C3186ADDF677BD0DA7A6DF5BC9324995FC0559763520D090BCF9546D8A21E8120754AE96C9F726919225D50541D973C4DB2E47CC6079451E05ED9911FEA9196B4F22E43B15919104905618171680BF9213BF670B96545BD586B63E5068A85AC87F246706A107966D9A68F0332BFD39AEF0B426A919FAB9104C9554442C0BB2479B318575959AAC66F7C9FE99850242BBC5B523B517AAC0BB1C2601160987A4B962B398E80635CA634A473BD72F7C6B066672A02B1E758C89AE11F802114B2D66E1FF833CEC5992ED4C0109A2D63363FC8270B061986858A13E28288F0D862AB27020800774E5664F7E5BFFC07779200431936723F54540DC135CE4C39A7390664456D7C98701AB11DF00C88DB5CBE4BF920B0D7BC6D007333B88F3A529CAB2166FD634EAAE394B918AFBED31DD84365097BBA04DC78FB9069BE9BA921797226EACD65D321681900DCB8731D557CA4A288287371A8E00DED3643E9A83150E15FAAA27578B24FFC8906BD168C8EB28B9EA4C2F9616C2BF5CD4D9372F9214CAE4488353C0BE99B08439CACB114662DC30C3DD6331E47A8AB9A74696A50AB296BB0C3765CCC4A8D0C9ACDC5490AB3CBC0641CEF551841C017D35AB95FA7C7ECAAC970CC0B90E66B3212C344873899C862A9D15E7B584C47C5A6F02BB2B1FA61724B84E0C2CA2DE59A6CFCA243A5A28E0B3A170A5A38C588BD24CA594255AE53C362873C9FAB975CE7BAA1B9326A363EFC927D935246ABEBCC8792BED5E44F44171CDDB6CE89168107B7BF73589E3D063FD007CE73DCC8DF473F8C57BA4833CBA618C15E9872D374C801C166D883B20BF83542881FDDAA01E9F9CF8BE538ED6181D0E0E74D7681B7714EF66BC10ED600D291FC37FA47B644973AC5E52BE416CDB0B7487678D2F69C0D00845417D0740BA7E803555E19BDB6001B74F56C3456AC65E78550BFFFC30F6EC5035175B6FF08B67107C9F852189550F953" + }, + { + "tcId": 150, + "dk": "C64B10CD4522CE7780CFA08BF741273EC70D29903C5481452A99095B7664CF64B4B349A5D84698DEA9204EFC2A6C7A12D6EB3CCC4C49AB40B8C35B684F9A224C6C0FFD7057E87A777F4A7C91AAA788C3ADF11976B33CAFF1E41E6B106FC1AB8D55906D1813BD6DC40B2B341AFA631DAFEB94486010A9D0C18E7AA0406B13DBC63C2FC3C1957607735B1F5AC42841D93E7D6C7EE1604FD8E34ECE66239A387F794B9DD0AA6DD98A05424312BED87BD2622876F9414D3AA645F19C87721F04177A5BDA2EDC87BF68EB0CB6AA17E82B4402A300B43354F9248DC91875DF740332A145565B4EB2E7BA2614C4BD39382DF84473F7A93FE4B6DFB83022B4AFDE285470664D8FCAC29827A401E79F964349CCC7972A0A157C0886D0C86D5C069EE8689CA80B51348A87794683673C8DAE929BAFD1BE9163959024AF212A97864A0A6B5684A3A21D65786E15C7327A543D1386B04399458F7935189798AC9C594044341A5B1D2A0AA6EF984C4EEAAA3FA584F3F4B750988F66981D7B0B2C0747AD6C11AC7C047BFF636773F5872C795B560CC602C84096BA257684A79685884363A7835A1F23AAC2D6A439F5EC1EFF1779E556864A749DACA6A063A63A034A223FFACF4D627BAD620FE74C3134C8801C5C3CCE7B3B5B111962664C29EA4306966D776713F72CCB6FC63ACBB2BD0909BB68952E9C203FF974C7B362A603368318D74EBC41B77538705E873E25E43EF488CCD6F21B53D1BE26F2B24200BD9C555E0E855961B556AA322896A3136A52518E937DB779AC0204339E6A463A3B9EEC496AD8CABD7BC6038AB491FA48B00B835E7530ACD2D57C28B31CFD2270E77346E39248A7DA1ECE8C94141B6E988065C467BAC144115EEBCFEB2A9F85741962E5B8C3EB91A4F24729D6B8D8A218A70016859139B4773046291678F9948A66ABFEF28A7C0B017D72722502308A6A95EEDC36437811DD1AB2A89C81AC3A303327BB04B34D20D61C810688DE661AB4187474A6686A0100081C8E9D205BABB200287C3CB0FC517061C295E524767A2CFAEBCB4A4B563FE5B406F78E6CAA5706066709E947A668B69EE4C5CD30399F318DBD46675A714E5BF90F4C6276355CA5069773414660ABF8CF3408270533CB6BF5BC06318480D0506083514EE3C3411A36DD480868B96519E38E64A4ABCE4A22688299989C67650204A92728433032A2D51382D6C0D00B9D870723C1F910292A1AF507B1AF0831426B0EDC009B5454B59220CAAA5264E783AC4548343407581DBC14BBE64B2BF96310B1520DC25671973A82C5B3237236F5D83B2FE9094A3A4FDFBB256E2AB64991C34FB90D956C7CA12912D263C92DF796F69213B54CC0E95B5543966876C2CF1E81154AB993ADD6C3231338AD0320CF829022A74AED376912929021E94FD0FA8098178741558C7397631C014DBA55A89762546642442C0CCE1744BAA4385A291CC4B54CA322A3936E0A5B8355164FE12C68135D34E5C5D5DB33BEF769BD06B986690D25806969E44241D1A1DD5B79F6390253C56FEF8A9169D01C033A71973150B738C87201AF02D307100189CDC78880309BB36720560882F3342BB2E95C314A762821471043A72DA769F273820F4582691C098144B92087BE066A2F4BC8610F43302D922FE04391B4701B7F0A6B731C31A8AC0CCCF5C3C29105E1ACBAEECB753C9BCBDEDB1284F0A3222BCE7F67BD6168A128E36801909FBEBB5E5E3A03DD8C269948699F88AAB4F225513017131231584760E9B85CD1159CCCC5157E4077669B83CD90BC2FC27194E888D5AA6D4813562C2646AC55BE297B6041E552D6269DFFF11225A2B19F7350F1692966396DA5A53F247A7DCC2C39ABAB886E5A45A9A5CB5FDC0C3FE055D1F8638C9029DC314EC78ABBFCAA0511545516D765728C034AABCFF1608DB2E52DB5C42FCB5BBBA1E3BCFCA3B09DE141DD15B832B649B2B018EF23666DF3BE62DBADBDFC798E3B24B30C055638014A3A37CA861F2B637C8AF20C8E7C7647A35979FC81B2281F81A00412D24F816C6DD7DC5006827BC2662B22F9305D61CA03B38F14A15F0B5B9582401DFEBC188E9C999C1792B96A744634C4C8D54B2E65179A937767DA77D59352C5046A294B42F23B0D485C6F374133C6060CAE80CDE55B14CF19CF6D8C7BE6F900603A61CECC3571426EE495506706B53FD52F196598E7772AD3CBCD82D291D6817B6C95249331623E3146C4987CCFB9CF62F28311C31343A1C1B82555596493132C6364D41F37EAA752709ECBF6420141441DE67DA57988FD9C9BEB948A6A89A8F8E83766896955548BD487BCB1862D004AA01CF449400A3D42E61ECB492B7E06821DFC1533F31FB7069989365BEB7C9C1325417201999D47CB51F9B6DCA1AB4E787F390C630E946BEFEA1AAA33613B440FC0160A63261215D467B8CB7637459D8BD84532575B93289D98052150730D5C110A5348B922974D062A594D81888726AD343715C7E8371F78B84AE5609B2CBB74BC3FA301BAE2E823DC6524F8C50EC587AF82E901CBB190F68C611517B31096629390A908EB24569C3B80A585D24293EC7A4D0AAC67CB6316B9A81A613B43524777CFA35F6C8A320AA33DBA66A159122E53965DA3606FD18634C2A963D39CB981F01CB357C7A6D871F04B785896826C1A4CE0E72F2F5642FA7C4A7729CD4AB568CE260767633FBBDB0A15B88D39FB0D3D944804E047F44A530225C92BD2194322825007141EC590CF84AA068057F92184F2CCB635D1743A418D1758AB837BA68F735FEAEC7F91A31FF8B67E86D44C1B9920210CA26FE48D9B1A4F5381C7FFD952D616754F288696D05683996ECAE239BF03488BA10CD17B49626344327A1B7DD93AB43CC5ABBB11942CAF0BC6B047D80D580367157C76270B83DFCB25EE56B873714EE8420497E0B19166BF0139A3CD1105A8DA5B67A757DD91ACBB91843BDBACC02159AE1A5CD2FBA71949178AE3884AC211DC1600D15A345F8C11E62C0C927304BF442B974A9C24C83DDB84073BEBA6E68A1469855ACB904D1D1585196A18A4487C71A88EC9B45349621DA35A4A72FBC8BC4B107531A1F6377E95C7768855859EF81D4DBC4C235B763DD762068A3CC0C027E4611B5C5C05548C06644823F95CAEB543550BE7C0272222240808A9887A55143E3187010F141A18C43C34844A58241F5073A9F9204337854D0343435C7599BFD51D5EC477C43A831301B8CB06A33A9B7084282D5CC425C518C4EED062F83378FA0B4B8F6BCC474C17139B5BD9F65BCBD1A4492C0E48903D592B9C0F82C9C6E19F72E0A15678795F3573D6C05C20644761B526AFD28D37C936B92A57A6323CB7E37E533417BA22328B7358EB1C150E991907967AAC01A29BE67BBC6B58E594B269967B74936AA49504DAEB2C74B31F2449162D542850956A9B53835A3AC4F4583BCD9100DD844EEF830893B32EE59358D56C82F53A453E1CA2F732367294270760ACA6DB5CFCCA6FB86892B16812F1D08EB53B881AD018513A125DD560278B6A82AB9576AAA7A55B659CE1118F137ABD4A645F9A58BB88435704554F748EA59B9D654A46F41C8E1022B8218C8E96A9C9BD335A8CE75AC712A89CF3B4E757A91768A605452E6531004538740CF19F201911BA3B255422CF2586119866A4755867FB53A38C11347FB3691018AFED875D3C1178BC520355102183D24E2D1AC0DC91189BB424EB15B187E0C4F43040C5A34CC1475FFF582AC39309F80437BE8810C62B2DB07344D7C736E31A45A68A472930CF9C8B6A3EA4A82F318C6E1497E44CB2A50A0C1A41134D8AC966821796A13B7A0AAAFD9A54365C4D8C913CEC461C20623BFB353C09B69BF457B1A4F217BABA8C08D6C573F61D06D4B2F0E1BACE9862A08391B60B0BD664BE07BC9333CC93FF63C139B0CE2C1A9770578AACC03DC0E1C15E251935C07905BB852B628DD0A02630359E05AA755EC7397B5576790489A5848DBFE7A6940420E5F33F78937DE2C46CA18415182609F3802B08959DD3417FB4C2C06710879A69C47492CF4B19750B294CCFE12394893654866BD1B259FBF30FA6E42394851EE6B442E872B36435C4A3A1462C334AEBD3844FA68D8481A49A7C58F164A094F5C0409C28F5A74ED0CAB01BA40C7CEC9D0C333E1A497EDD7251C11A5617973B3646294FF07AF04491540511A70BB40DC8CFDCF9AE35C028FEB4AC56F34F09DA6C11EC922D712AAC95BEE2799829198FA2E78E3146B7DF739753728053CB3EEAE8C147313C73259BD9BA2006C126809C744BFB39D2CC260666BAAB656A6A5266C3AA1813D464BC3C7DF8F72B7683A841AC8885D44D4F503D5B9BE13D09B98D4B2E9CAE5DBA8660A46E521CF2E156E529A4D0F28426D753FE1ADC8BB59F802CCAB5AAAE8D318C3264124B59808460C32675BF50B206A0C0A390AE1D76B914ABA605DBB78BD110430EE9A9A3F8CD97F678913566A18FD6C84E" + }, + { + "tcId": 151, + "dk": "CC09C242778A0298985B90B5CE7A2F80A3C1C7676161F3539CB09136851D487B19D1655092983FFD150890BC65356ABD4C26A4CC87BFEA1B650DD58647DB1139F5B3F458CB8446960CD9C690D84214F48AC53CB51CCB167DC4AAC45750814CA66D961D4C7312EEAA591492294132C2054377CB398E754779A02A893A4B0F50F40D42614D61D9B80526C15F89AA53B418E16266E007969B4B7927DA258DFA646FEABCE41A80F69410D17B61D4923999A6A9C2569199789B19E28B24293CB6F420CD5A7E8055A6EB4195AC9C6DD1E338ADE043576B543E2321B939B7C9E040618CB0D3D4068D90A309032183851BB2C47120828CAB50C9372C3D7252866E6BA574104826312D89C32544630B359CCCAB414C03C01CA222868A70B81898C5256A77BA070769000CAB135EAD04A99774641B76BBD8BC9CB16C79D26671A564358DBAC667C20B4F096C0249287423808629AAE799372C05237E21337E23BA2A0A77A396CCED23CE2CF431E797B69F0CAA13CB823D4639CC31C84F740A80C63B3EF9C2B8B69B42280DB02877EC3B1733E2976EF9233A9664B3FC8476E39A7557CA7BE314FE63AFBC700E0EF71D22890DB00C38AB510911120DA82CC400BA68481725F9BA6C63E55D2F073078D96FCB72912FE99753F1280E07B14E865B692818C325C363317BD397385A3565B38B0D93EA1F67091AADCBC29923432E00CCD4BABC961639813685FD8338B76BCC85F6454D124C4ED82825AC86CAF1B69C86A3DB938C5D06319E65B7071097B5442D5BEC910326105FBC4A3D26CB44CA5FCF16543FEA84FCC552501B2E699B078603C4A656971AA68D914A8D8E2820AEA3933BFB4FB642BD50539949EA86D850057246BE57BA2CCAB8B88BC7605CE211BA2177F0F72116291B702A53E6F8980E972933199003350D77819A2560349370A510F8414B64470DD5A1CFC418A85153ADA77D8D015F8629AB273500A77781C0C7B784E979C8CB085C67174320811F899705354B3B0A2A3EABC04F5AA778562DA0562F171C3D87534F50721E8553C2D9CC46481883B1D008BE8534636913002C77FB512598698044663B091545A5428D218245A0C7199E799E4E52348B4C2CADFBB54C7271B2677BC5934420F1B58FFCA747E49429C60F81931B2353CA2070ABF0D1172178AE995B292CE27C1F9C48A321A15DDA17AAB37D6489BFF9D2010F974B93925CD1FB14290C7041402510BA16FFD98D1DA03611326C1FD863E7A1627C8A795E1B77DD4963DAB0B2B3971EF2F2A0EBC40DE696BCC8D857EF201F624170BB2C7354E880312029801619DAD4A0CFF44BC6F86781988E40B02135A49A83755F4CFB7E8F430C61874DCC8CB8386B0716269404754DE6540939E7978BDCC7BEC41349983F0E047AA88C617D3792D567234289ACE5C0404CD892C8C4257A4726C8B4A63A2145E1158C1D132CE6F3B7BF02A1CB563239B9053CE23F99646AB776C4E9587A8F328346FC01B301305C139531E6518AD92B0C64C37FD292CD360CE01B99D0E9064DC269E2AC5FC63B447806CD81B15B5C97C1C6E238B4B869A24871A9E2B5797BAB0DA74B085186095CAC6BBC17BA3CBCF67061183854B1F45E611C706BE84DFBF8AD57E50E3BE33D0FD955556A872C3A689AFB0A158092FEE49BCBE2B86D1602D7EB2D7B97869726201C651D9DC4223612B2A43289B9155807960B91DB658AF85964500E6AEACE5794C5A91112098A2BFDB7598B83B92995A2B9369D87809CA9F78D80A0CF7B1C4474C7C2FFB989EA9B12892A1560C32613C5810AF472E79741A5FCB0CC33A9CF798EEF4754252A339EF269890849165AB244E795294B4EC7E38D7E1C583D3050974B1BF229628F31A742BBB5466262554777CDF57CDD26686E733DA910A96B66550220228DEB7C67B6C024B13160D99BE083322D754A44309BD4C56DBE330274F5825BB7689773C2875B4ADB4B2610A23E2CBC601CE469271ABF050A92C84296620B31CB49C050D6B890F608BD3788A30B1022301A3BF34E807263F9066E5D2C7A8947CE85E32D7EE05F8FF3C8BF9706A0E5122DDA16E4AA4553698BBD68C90CB757D9160EE19B2B12A76543C83AB5983F04714BDEF4C008A30934CB9795CCB45E0C7C46035F80C83E476781F9F60F6CC7B32537667971A5F08941FF1588FD94AF20C28341E9034D2981AD1B32A6277A52DA67091AA562298FBC16941E2AA190D2B04CAA232737690B877C74665D6B054D47B98CCA8926F2039738157BD8D73390623EC638B78FCA39D656632DE2B678C78C4FE395E3799B61215F1698B2E8BA01214849E20149009008C010ACE2F6C30B338A857293882702F6B6419C1290C378B2B77760B555BD5E874651C759CF24C6ADF3C222C44FC6803A53146939BB1E02900131274401231CD1909F8F5AAFD3E7610D10CFBC394D790CC6C4F4C4F22072AF2850925506D3CCAE537B64B4D9B5ED0086CD613CEBD25BD2F7201012481A655904AA3D254B9C0BECB4B9583D371927E4830574B5C554894B779A3622083DCCC734551116E8A1BF65D930575A7895873DA8E3441FEC6136997E7BB69D3D9820D201AE1E212F3827069116B2C3FA6A3F7B3CEF63A7E0B301E9C96BDD26663D66B78B65ADB501CB494C393C01C843B86273C772CBB1777EF3CAAF922DC1A6B698C107DD0C7194D464255C4F737ABD67F3B5C9EC299AF485515141701708B3E734FBE2011595A976867FBA127153C9A9372CBAABE6578A89416F058080230F55434986888FDE63401390C16C542BC6BBC2975C1D78821D6DB514231A8840239ED86727A3220039E8A9287496E45A1F0280508157A548E5B3866468413216809451819C4AEC7CCCEB325CA77927B9C940A639674924935F03B3B36C8DD2801082F465B0798DD87586C44A6B9E6B68576BB60B5986AB200020FA9DC2322B6A071200C52B86B8649928109BCA357223B801A637A48293F177C12FD7C57C31C20ECA05BEF12FF789B331AB893E548F6B8078E1B7538EB43DBB3C9DE45A4C4405B1AC9B781DC01A19C9A0C5C544607A0F69EB2C3437198A98B2EC440E1A48B31872653AA38C60E2A55AE4473A782DBBBC5E5A44244DF69F6F4C061B6734ACD9800835023A37C5C925AB01544A0D9B24CA908E9F72A3903389BB2B4320526981BBCC1C0B052695B9BF77551B4375B41659F26938133869801C5D892774C8C510D2E4ADDC17A3DF132FF74A72E19C6DD7274841FB40012C39AD29BF1AFB5B7A290C61106D91A48578A41989809E8FEC72BF6792178494C7CA7875753ECE74969C7A714C00633C844BC895085873692C36C7DBA55A1E12408EE39E72DC2E6EE778B48879688787B54C689200BCDFE1A218999EC285ACAE3C537134732A316772BC4D249AB2BF039D9B8A6B6D260FFAA0C2ADAC1860399BF3830E8D75B280E9CB0FB724EA0CC22883C72A072F9BF1980CD491BB8A0357344BD882AA0FA659F485438E0896F36643F5ECA70731AA414AABF21188A718572AD1A8B5D780A6A593723C2C213458CC5A89EC989FAA3C76188BA2FAD36B47F001A643BA558B81DD365FF75CBE2C61A04968533F28AF856C1051B6C296A320A62425B3DA42A88CC8DFF715A33591B381972C3C1AE1A89951C930A2FB4FC92CC438CA6C5403C53AC4A584E55F9C7B7082F2A2FF32AD5B372AD6EC6ACA155E8A32AC73912F85B277C7E227B9A0AB60F1714FA700F180A5AD153040C58CFFE9AFA4E2107C668B782671BA0C56D15A87039A0B81427BACECAB39C04811A62E058806AAD5623E8C17F4C78ABBAA117EA0A578476417F3418D781E96E2BFA8395B4854A7F4921DDA1AC766025C9E0723B114935F7CB9700897BA72C228C29CA27A94874540B88BA6533868649678ED0A731EF89DB30157FC431E27003ADDAB9A7B43445D2851DB612805D7B1B125A355A2903C2C24FEA2B526222D724B169E8B7C6D589E2CEBA3C4219595BC9EFAFA51F4F1A1C094C496F9BBE0D420ADFBBC570B9F3A3375459451E2A1A681D30E5B3CBAE2310845535DB744A756819F82C78AD432AC78D4543184BF9426704B87961CD8A2766B92A33666E2B16545CA04108C1F1A5392F94568825333E6DC0671290C3405BC7C3597087C7D8A0707BF5BC41DA0ACDAC02B4FF597FC0496B8988CCBA55384414B2B20962661BDC15A6467228656E2C89D4C5A7483133B85833F5966BFE02EB84BB5944211C7AC3F12B0800C01A28CE29788590AF48C0DE15A2F5A35B1B57452B1257827B08554BB8DE3697A396A411B70812EBA1B58A820ECE5761E96BECEE53D526445D51943E997B985D889DCC58BD2D9B5128AB15960269A3408ADE4D3B898BE4D25F6FCB05D4A84335174B15E3139BCF477A2E6D09063E418B205A435F5F1A7063505618A07370D5A77FB5CC2412D5CF30F2719379B15E3C4CB1BA878A7E56B2EA68DF4BD751C232312B9D627062638D31F6827EE35C5" + }, + { + "tcId": 152, + "dk": "67E670972A90A1D97C86B006D2EB4CDB466C8B952A33D750519B812E98778B44327038B258C815738980FA032A2AC19F73E4C85C09540B94907E55B339C40D049BAC4D64457676CADF98302364984F72A38B9B87FE5784B081835636B1F0AB7F90F6B17359379BAB35F293B96D7CBA56130786C56984066E56BB642373712E50A9867A8724262F26F15C7B299C9913B463B7877DE791FD426F31242F733C950A40CFCBA8437D40349B098AAE9353DFB40E56444F56EB64043089BF411ECE4A238229873F2317D128951C37027B19B3BFBC82D8D21CBCEBBED323741D623A382AAA3C2A03FCB51E73C2321265C6D11B0BACBBCFF8B4CE810055F0E06A1F19AA961072AC7674E0F34F04EA213C926955120927E118729276BF94B46FB36CF37A17F3433B2F134641D07DA25B3526574658602B82DACDFA4972E51A5F6C75C3319919FF400BEB75CDBCB76EC2649F1363C379C36F1FD9A284FC107CD0603AA62AEB1C7B973346DF7196E33A273A737F8E2C4BE20779896441D0E9430526768CD0971A79B535D58B3093C43178AD4DF9196337B76346492D83B7D6408F3AF99F6A46256D475F255C5246BA663BA2AD27EC4848665BE51A0AB1F8552D95537EA08595BA66A0F0162FD5870A088EB12A647E8B615289334A146391F537621412D881CB283360AC1CAC7B0A767183C284AA014FA723D8C5B44F560A5A1633A0D00832E45787E6B47C6B84798529B55604EC88B7040C56B72245964CB9FC95BD83ABA44501757FD27CB6F65FEF34746A8943BF252E57C7B5D03810D219844F483B84366394F75839950AD2C847F127A5DB447D70FA884347550D8888138548E47370FF0184111A1391F78CC9AAB5D8434429485B36539883DC1565D75099C83285762E3F375489A0285A545DEDE71758A7C7A04B39EED75730529EBF8325189253D2608701514F44CC8D1B549639A42D7F2A985437BF5BAC577C48668171C49CE7C7528468C1EAC600883C0AD4813F79BC4CACB9BC1A67B4497541369D54E7606E2191AC7C7C74F09FEF99C7C1597F1DE4310E838CCAD99B77B913B71028C0EBB89D8BCCB718135961329716CF67F107AABC504AC43ECB59BB32FC0D3093CEDF470421BC156A92CD36931E1F53256E55B99087A644F649137A17D9F851BF53967EA41905979C5657361CACB0FB2453DD939A9A6B74CD4C48C001AA64C8BAEB26AFD1C5B86661488EF3A8127A2F557165A5D63E330921375A6A4768B6A9C840263201C72C8A8AA6CF1203CC159B2C92241CA2508869AB914FB585D817AA5D88758686CD8AD886114C9433B0AACCEACE1783494CC77AE595AA997451615CBE91C96748F78AEAD5B9F1E393D4733E39FB690647B3B5244CCCC9BC42D0C1FFB77C341703FB2A66AE3686ABD53F7DC68ACDEA25A8FC389925326BB26E3E20C0C5D31A8BE1B68DB6CA7265825DB59D36FB85CF646C1FC8CAFDA82042555D6CB7A36CB0041EE6185819A9F02253D08336F4D149719B38656A8BC02C38D00630A51A4AECEA0822854E184C667041B6E1231ED7B706D9D76BBD96C382C7AE47624550E34065873C9581ABC80C386E8A34D533076952CBA494AFD0B66DFFC8C021D0BE53BAADA5DC51328226C6A90092E4B0E5985122FA065E6BB1277A9403D1032A244716031705654D513068E06B758792A6F881A188858B39479C431081AFDACCCFBB8842A6C9F2BB72E620B369115F3EA112E28CAA465613ED228DC9EB73C5ECA5925219786177FD1B3D9DCA02B643CA52F33D32A3C496D1428B4442FE0165FBF3A2449B870597205E31C5CF466C3F958BC1C33BF1CAA7660B1623A180E78655FBF75B63B668AA7685D70201EA0048BEF32D523168473C96526962C3520998D88024496A48824BD2FAA452C6805500C37C5153BBF35BF1D2C5958A01F4B74A51A429FF5B32A77AA345249A71E7982D78CDBA031828A1637B07BAA21BAF931A65636A3A3DF39B1FCC2EE9FA64308A88B0F6A513B17B1966166EA5AA3CE7093BC4C81CC6142FA6CB0D718C95293B92FA8ECFCABE9B1A82E06B71A6C692210147105A0B2CDB4C00AD7A29588F7E2089292BCCB64A18088952D2AA031B51B9F886C0CC875CD6A5081D3B58BACC043FE4176DECBAE3069DBA61788C498843452FB0D4CC3DB347D958606D8B6FBFB908BEB03740FA38AD564DDC93B470921248A29FE4107FC06A7CFB905BD795921F039A9CD6A4E114A498D35D18B28591A6AD7FC44313F9633B226E480B9504E947A85986CA9633AC920FF0B1186FC660E037841500A141F30CF0754F026A7958E3C486A00C165A27AF996B9A13CDCBD68BA022425A06BAB3F812D08150562888DFC63DEEC54D7950B9EC3A988A5814B0197E7E7358C45BCCC7B39C99B229A7B04E53510CE5775BBCEC956753B63BC252FF650265D768A2A94440F4A5BC8B6EA408206EA37C61936895E41F56F8C56712A00ED022F84C9C50DA79BA486F8DFB2811B320E35B5B0B36910EB259D8F7BF6564336477935978B770666A01F526D369AC7CB140D174A500B381FFC60C46F1B62BB84631DB321A64A25C466221950E895492876643F7762F3746A923249FE8A313E500BBB30BC811395DA2E761BB040BF8A75230085E3D64C94D40186D9371BBF1BC3CAC3BF86311F9B095A809579E83681A5A16D22CC8282119A6D61DE7C92B94D4CE7404CC2CE8137B765AFE241012D1C28DF30B23B05341116814814F55CA8D4D05728F21C0266691EC6A6CE0081176845DE53128E618988E847165D98558287B9CD406353461A96C1B6B74BF17F66E0D38A7EE6476556B0FE4AA73C2511716720BFF84194576601C427B490C463B8A879B9ACD05F0A1962682E6BB73BA2855E14A4E15CA141E23A23629667B48C619CAB4FEC499DCA072F66B69FDD447108C181D9B0EA20952DA852DFD640FA41BAD867B455830B5676A91FFA652335083B9240AE8528D40BA448E4AC3C403A7EEE42FE8E663BA4210E4595BE5B7BD71950D69838FD9903E3CE3CFB653C4E582366ED37D63297465E8A49D71CDB4869B08212ABEC8BBC4C464C9523992F0BE256A519F93CD8659A1F16B90038811DD3A1D17210AE4185F1CA09FA44359378A83E1EAB465D9CB90F91C0516B16DB92028BC20FE3466CEE40952F63592E52155F5AD5C337250C054DD7729DF552183236F4F715B65A902AFE5216187838E09469AC930DBD08A77C562ED36739A0611E63282B84A080488538214A3951B0F91D48E7FC5A87C46283FC6A6495C999D76760D1C3DCBB535BE1089090048687C99541AC783785A3680B8F8B7B4FCE2C9DD4A3036DB0BD175C716ABC4756103AE561551C62E69580412DC4F630999EA4880F56C0D51836E09AA5B5DF70C54942D0D31098AFACD52646BA5EB627B6B9C7EA1941590250E3742D0C331BFEC9108DC8A66194468D4ADDA06BE9190B77EE06F09078A07E5948C147F72DC4463C67F2986A264BA8ED505A07BC145B65603B1A847B667BC3E30BE6B2C4228E14899D82976A39E5A3353B44973BE481C3F908FEA7A28689A89593A465584AEBF73051D570A8AC202CC2993D34506C05584B9309E00B822698BCAF2693E5B9CA2F8101022417A341A334224BFF4344FB57A5F03E5B084F512032A7210C12AC1A628A0FC8B973C84A8862C2C2BB7435C4A4360B00A1B0051BB608FF3C7B86B9988945812BC4BAB801CD275A596C69334304F986B3E2EF7A66302A37D97C4C88118E978719A66A5BEECB2D137BF71343476F2368774BCB41076DFA972C8284B9220182F66C3B2DC05674C08C72B37CD35B5F5B8A02D11768A8241238757585422BE00669C91269F5579FBEABF407636D82C61650201892CADBC176E12DB330295C18728938F961C80D1468DE30586005D03D19D7058B115530F49126BA7754C11A15C4D009F3C0073D84C8772C311BEE2B291FAA824C0363333C970B3A334C51C475021E88CB37804722AA60868CA15C5A800DF9C7A33620784B56B7E352F7F227FCE1297366A2BF71C57F4174DCEA796BE13C48BA70C9C25ACC1606CF826717E6B4E34494CD05591072478290230BA17C3F43BB7B4DB19B2B6455446A0CE8C0F5D2AC08A53638D6B85320C5F4DD918B141AD50055F33E654F5134A1D3A52A187B20A8C8C511042EF89A4961C1355F50B8A85B363757ECB64991D823461F55CD16ACDF1F1C29BCB3044763DA8F38488EA68EC5857C1507E46BA4B1015576C9C3DD98860AB37375683B5803C5ADFF78AC36AC747B2B9D36B44BA883D311238ABA4ABD53295147C085A301ADA950F6F030FC9A806FBD405F35793A65164B71AB111DB895A1C33D1FCBA38A2C247BD61E3B1BF98DD36424310F074B54F1974B5C0FD6B1BA94ED43897C88E8D0CC258C0A1DA320141A3876AD2D5D353C72E9319877CF17EAB9DBA31884E9B852CE9A38CC93BBB0AEA4E673ABD80665B212FDD1BA7E7C42C8F560D" + }, + { + "tcId": 153, + "dk": "4B729C51F58981C57ADB8061BD26CAE4B6001F40A81491131BA074E516A5CD1403B4F932DBA637AF08289FB20A8171A728959C9E3C5798153BF8BA4AA48B70178453096B578432526E0ABCD618B9E3E30A80B1350D4489B2F7A833ACA6D23C26F8366FE44BAC04F433C26A09322A50DB127C13663E0DDA3D33D27680E5A95FAB1FAF02627541B721128A1923583DACA36075696C0636D4DC4CE5546829231746E776E271CF3FE327ECFB256A600E57F619EA3464245825964967C5A311596B8ECAF827C1C048AED52A7C5CCF937C59339355E6E874F958A805B4C64AEC88AF4B74D8B18823E54668214E8A17211294AA26D82BF55A1F04FC8264D86ADBB00F465368D6CBB576E192B0A92F85D8337A401F4AD1CAC2A57740958BC5D89580F7395F04323D09BE9E35CF585A6FA781180DE555A2959EED5CBB4EE1096FB0A177C7751309A0C58322F5E53EB1F594F7705E7856B59AE263F1226468E9AD5AB27FD7EBBA1764243B25B82261A4CA5C247FF7575E90C7CA7003A71C9F27C67BE9A3182057B9B9064188C902EED3582D81B8F5D622981BC696979B0EDB03BD094DA66527F4F56F4861A989C7675E2431C265481B776B555CA12C934198E360608280E4AC0A1092C52E14150E578680247805C36C88F037C8F7CB73169130DA82F001076596198168323F97B5EB9C2C8AB55B01D072B66A71006ACDDC0B6B39B30617647F9791AB24982F05953C63BB043000415840605CEB1444E6CF6BDAA9EB365EA9E9353C601E348B1C8CF3C2279BB5697AAF1223C932507EC9A7AC0BF34653357D87E510A2D9B1C01762908827BA7A4574405F38F06370961ECF311B6FE730EEC22855242F9A089E381249EF1CB88A81A4F7B00478757C6A2AABF9B1997F5347A96803252C894791A154F29917912860842ADFC1276DD52C5DA5CCA0A784BF5C903D14800C5B936B0A52ECF795F66863B38B6A75D3107097C655EB669B4B41159A34C15A811B1005EF2230446653681306DC5A52050B4A6F592DD0E62E2CF746D34B0E7BD1A57095B87E89289AD708B03841A92B49B68442BCE52300BA08F6383248AA87B5C6714A9AA73376BB016B2F1E39C1AC383C7249A5A5B1A6950329384C873E4880D153906B42799332A299754C9707C3A8D2A84F2818998A0692A6256B7B4F641429D9FB0166F46C0E59A47D11AD5831AE5333654AF256D791C0AA1636F1B6801C4877633B90F3936B543561E4282029B209BF1259CB752F6B5B202DD4C471954F84EB2637D60D6AE467F3600E1320B9014A921DD10CA3A03466B1CADE51797D560C97725E03B536B4B376E428370E93600CC351EEB27AB7F762D0A05366A60DB5A60C7CF7CB55284E96E0371F1034F850C8A4F1C0604C4FA497C9CEA71D6EDC035C46CA74F12D69E1832BDBB76E6B37D043B4D2F4266D2744D464C13EA89576DC95FBE16BBCD24EAC52B21DF006E1EC244F4B9F3B44BC9A38CCC59C38CECA9F1D2CAB13729E89A79F719A2FEEE52300096A179406C043A8C818B3E0D2CB0B093B2C510677409EDE537417DB2F24BBB484C173DFCAB12725AC46C052BEB97629A9147369C00E17712A591DD21A5F86659905559EDDCC92718885F82644657BC3274A4BC5346CB526530872222A847AA75B185F37BD2E5040A1586417F36740E91527B624D69BBF6CA33B5674C3699744D1D918F9A93065EC426353631BEA8BD920ADA952A37F90B06737CA775BC1258403729A29D5809A9873B7AC426CC9F61BCF936CC20744C5B981E82A48E0E15223AB9EDED8483DE790A1E0CCA3528B4E45ADEEC20F609AC63D48839C01B9DD7C0AB45156975C81F52ACAAC946A8F810BCAF7A58CFC82E3991FDA922651C39FBF186804222A21256C1FA766FB996EEF9288BC3909C1132F1B7C2EE06B8D93CC0878BB7930559BFDBB95154590790756DE250E27E064E3E89B0790BD37AC818F79393ABB346EF5543CC190754593E5110D0F6B16A794A621E672619321CF2B9745862E28261339939C83F8787ADB13ADA21657F787AADBBCF58BC70371B0A22C8365297F3A66B726F8C50AE59E76710BC400240B933BEB5696D15A06F5C30AA80C35A67C54D3499B72045A547862F652795C33753D79AC39319B6C77995641337666AE7BE05804E5BA7129C9B3E278364B2D7A559AB06C8E3C7054B7099E69AAB272769435532C58C5BAD3AB44CB480F68E9CF21863E7EC3A9A248A726167149A380BEBAB79CD06AB7059D9A0BB1A6334E70144ED3F0B422402F02B13A3941A53FA30147C00004703791C5C596B83EFA8C8479937FDAF5570A4BC6BB889AA19979541C5A54B5586A5B9BF3B01142A38A5BC191493A177D0871EB5852D8966A7F26616BE42912744F265659DAA289BD20A134F10D54D20CC2F6955CC5961EC65E20CA5A45FA5D2E809067517929372F42747860EC1A3A0090F610CE8B3181BD25012BC47B5F39CD8D7C255ADCB58048886D91894F06A51956181523655A45A43B176CD54845EFAB8028CA592C0050CF0840DE196F105C04D1E6B040F5CE7066386A8B9363988BC503117B0C5D88119E6D5CBE4B1403537B490BA80CD5F45439278C8335165CE92D59CAB38D70B66476286448A4D0A2C1F4BB6B7C3875A2E70DF655C31F240339252725A137A1E4355DF18AE3381577446A5F772FD53BC8BBE19C54613382018DDA39A5917C3064C709AEF8536F395D80009033B366E0979C0E084051285407FB99D14B2EEC5575AB93C3BC54348CC7A34729CFFFB2915505C3F9365F73D94BCC367336354941E058336C8AB842B808FCC279F94D732A12824BC816AAB526773D0896B64FB66E7EA5934E820570C455F541B00C953294397B257606D6215959CC2BE7C907F75780E8C126CE18A152777BC989A4EB5A7CFE74AD8AB063765486FD55026641AB86CABFF53054821A0FF1292A20CC8184E9BA75055E497917ADF33077181D2F9A2D6680102242156622C959023134B49F60054378435E22BCAE4E634C4D01598BD82A176410DE14AF62774EF1E431DF2401A1BB526FE823F5D47AE670789A4228B5D629691B2438B3AD7173BC8BA98346400459969C2FFCBAD29B87172A9807F68B004C0414D439F2F959E33ABC10F3348B8A3F747859BED25755602B6C49382241670DF96AE1B32621B74985F197FFEC0CE292668FBA66BA494D9A798A27FB0E95C7A0E4C7209895A3CA31B13F7A3C9E8B01E054A5C2D536E59326429C04267A55BC50B10946A526AC20AAC39CC265C4105ACBA6F1848D94530BA6BDA05C92C84B3C8B323A7FECCCAAA19B048AA5A01498FC01C9A4B055B25A4C96AB02C7EC252A814EA544577CDCAFE7A55976B29D03492ED6AB3813E805F501C20BCBC61AD8A0F173B602F2995C042AD2ACA9DBD9B9DC4C603CD58D83EB64CDB10F043284B83B3FAE85C032D5A99A980C26D29298C75054F57E0FF2A320D7C00C7462B19077801C5DF7B6B0DAE2A9A17284F6A0293A319546A8482FA27322844BE3D12FE69362C7374390BBAFEB4852393A23BE775310E80054443D1C26B840C15330D71BD662565182713F06D0ABBB62B826428B43C648696AEF494FE5E716975566287432AB2B817B45C0A1D91D9E755315721D2256ABAEE061D13971E277590E758998B6490C9443E1D19862A59E93E2606A715492124571921FBE3B1CFDE31FE3DC83AD18821E51B19AE20F1FD2139D1210098535C56642C28284E2346B2938175EE0921922AE53920F14167C009420057560C5E8A05C6C05698B3BD4486781910E4418C758620F593814C849235D4989AD521FEBE5915AF21A8B8458310C6D711A33C5FC0B8E26B7C1351589F7AB25B0BE4D132929D6112DE73AFA4BA82EB66AA5B92EA502280BF5289E8A3EBCA8412D8722A1CB27DA4212D888C4F959CCF50698EFA364609C18C3407B63D6C6185497174205244B9D393A260F943986019347648233435F26791C46EAAB3C3910E8F52FD8C3A89E48C4C7C39A4CFA6E87F012CD99864D4158A8A44778897CC0C720A1484DFFAB8C44264904CB6EF08A8873B8615D4689DD1A1482165B4491217BEA98215A1901C586FBD63362613039284D73C3595611C5FD68B1D9B37FCB23989C2463F88595C4FABB3BD96FAB26CC8F95C1006C2E9C394CFDC98454917FBCB6B0957304D7D47D4A3C87467144A8845035405DE2277C97C8BC3B0364D789109DD00608AC86BBC3750140342D2C29CBB1677EFC8A6F187332477727221655622FBAF6894E7BA59CA53AED6470CB38BD15E316ED28601D725407A757AAD3CBDD764FADA81E79B89EDE5A0474EC817D5CA64425C779827801585651E367A29B3E17CC40FE64311151CC3A9CD6BCB85CF5F5B27DA0D9B333FD58F68B9A042A41467D8D85A8D7F272EDABD3F6D1BB97C3C2787B328F8C0A86C107718C93E2824019E6F5197D92D21EF67BF41926909163DA6AAF9132FD4C81188143" + }, + { + "tcId": 154, + "dk": "A6F730473935DAE39954B8C0D90C7F7AFB36F92A12C6C723E605C8203BAF53270D0DF2A25F0AC75A292AFD0C637893372ED15F53B9173524687744C8DF288A0CD07B2ADAA50D595698032665D8227ED63AB4B44288D282C1FB4F47955C9D987B37913F23836593187C37B43F5FDB65BE736C4167749F3951A3E9A502179384078447FB3D19C55541D91B97857E696A0DF3E4BED4E6A900389744F492B72B0D3CD2B4B195049B824CE934425FB0899066ABC199A8CA98A6FEF85311A45B92DA1A26069082A6AE59321599807828081B3E37B87935ADB6564A830BC20CE63E02030D19DC9F8A385418E4759A4A6CC3E8A79F39C6D1564DE4E9332D5809254B73BBF052698AB29C794D3C7C3562940B1756CC5BF792B8E5837D921B5F50B52DD37F6B156FBD67BBFD21448E479F44719A4DECAE0B658A691819D1E8A70DE269511A2277264E3880C0ED20C38452B2AE860EA21B969D7344C9A365514965607890B7A5A41AC123A84BB819B7B5DB140D276890E67AA49F1679B6B0218E53C543985C6C5B715856C0D0D3670AB9BEA8A789EA83429E5034AD9451E0A28F86C8901A788CB7D6684704346A44B44B5B0E82546506114A6C1326F4231097B8A59C791F17CC1B0117586423C45B212AEF7BCEBBB091CFDA1CCE2C7C56F4C93198CC397B4D44F460ADD771202C0BA5F85EBCA261EC6807979320DD1AAEBC58641126435B0B5DBC626D487A1CD7D58051FC0534368EF40876B0B99F5724748FE28D17B41EE75900D3C2AAC5AB237EF5BDC4A477F019856ABA8EE40C7919C3A064A76B63A64430D2A65CB3117457A02135A6D8B1B888485E20F676CA87613D08C64E3874BB1652F8474D93C16B11A06A0BB18B6FBC80DD12328833AC4CEC2AD9999ED42B96DC39C679806F2234C4FE583AF5A43F744405AE8241A46CC9A0B1A156D0143BC0585965734EDAC3D745AEA8D87D73B8C0E97574C02872A5164548FA5030C9730E1C217C84300B4C11A616C62A15752165200B196A5C59C3CE610406C540B1EA1F31310428086D0DAA0DC09A2833AB309C38B22203559DC13279A34B8A5A7C338479969B33CCDA608EE77DDE5123CB949031693D9DF25A5450861C27165487346F10902C866D941B3DEAC90ED9511EBD7673AA28BA1E523FB3355D0647CA4607620F391A7FE50649EC9460CB1E5FA731A28B8606FA9EA9D7213A5461A6B693FA763C5805CECB3AAC80C40BCCBBA2E671580553579F070BF91531D41A3191D1476F392FDC653323359AFACC16410954984B692126231297B4D2778EDD2670E2578FAB287BE5A5C503D9779564A9ADD0277B26610251B69F625293B3546486A5BB23A8CB3326C4979A3C526B1B0588EB9411E7862CAEC4C0C8C55F97889EF40761B5957657183B433200EEE8009408160F0C89E1A04F03F800375674B50A7ECA087583C572F066B6C333B7BBF945F0DBBDD5C1CCE435ACD1493F586CC22A16A7423B5B1BCBBE060C644CF33CBB93922083B573804B55C86EC7F88863AB441A00BC04A52FD99B4DBB937D9E80847168735A83688513A31D25B051B7090CCB79DB39B86BFC4ED7CB5F91E149C2361BE204C432F66CA4B732D3336EB43B34C1F8943C6BA5E409C1D3E08A17AA7AA7485948F38E2B743026B10DF7598B67A95A832B01DF22B8C2132D922359BEC56B3848CD70604C602C93DAFA2AAF2A882574727FAC08927B589D4A5A03F312671B7BFE87640132C6856541CEAB87821720FC963EA336735331A0CFA2114774B866900594422E24B83628E838D909586D16A1F9AA55F14260B1749D3EC966E40447AE1610ABCC8463EC9E63C69E434214C89AC75EBC16AC493C5E0AAC58A7A713B86BA96CCC3757725C9C0AF8A7027E6A1E70613650019656A0473590629CFB857AD561163280DA107B945C2AF7335A17D65A193A4859E6A5B44C2E13A45F20CCAE1BF5B76CF2AF0EE32EF13932D50B81DC6BB5B951C57D27C0D48A18118B0453DC766EA9C3FE8CCF82D92404BA03E53C1ECCB4AB2FB34660C29B68E7812B52AE701C75AD4A117B5C4922C8CEDCD33B42732C1DD1A5A5F78C7FEC9779B73B3DC922DE974D04C4661DDAA7F00136514874D5158D71F84FBFA10CD495595CF482E8874A7CCC6F1914691DB5B05A85C6A9C77284E15CA9E91F42511852719AB1182F484066F526798C59081F2A81B0B63937FA5258A389885B905EB1252837656F578E90128CCC6314720B6E52280912946BC18C0FE2E4A07074A2373A2E115470B143AA60A9A34F4B6D717879458C532ED1790DF9CC19605A2E186B5DC3602EF2CC5EAC9B1362951041BD7B003EF46B258352BB7556A135A5071116C11B73C46B4A280C39A29A78BE3349940D9C3608A2A0565A3448B65581A826A9388C00C34F0136763E409FE2A2A3A768C3C795AD7C852AEB65055CA77120AC0FE8514669FA627D24C2A977726015C8CA001F4291CB35A1C4CEB24A449419F8E4159124585BABA37868C42D85428294AEFC309C01E1AE07E688C19B0EC2568784D2308FA2A5AA36AD653A82F4A88C2F7361A5E9390E4B147CE780E958976529603640BED2338C0BD776A18331F5D06A9E5A2C5B971FCA2010A7040018891A73565AD911A93E275BB5724A4EE24C20AA2A9FE191C5C41CDC5C02F5D8134EA5B2A501AA6A708CD125A0B8129F4F1617607812A1E113ABB77CAB197F0CF368FFBCC5A860B19E6725C9D147AB1561DE1A27EDE91D33D36F7E099AF945ADC7CC2B59021090AC84CEDC3B77F93F6051AE15ACA0FFA48666B767B72C7168E658A8664AECCB34E66B4ACF0B2D84D9BFF84A9425E59F21A4163DC54AAE907BD77A36665B5CA5279B9C352FCD804ED886BFE49C090BD16A7D147C9E7120F347BD716A4E909CC4EF8946D5188D13A58B6CC487872281C6016C5D070020B277234A03E567C0E72255D2785B45AC4795C7175D129EC9D1AF1B56848EBC243F04165DC60CE6825673278AA6D9095F7C1E1C566DF02381F031461AA826D0B3BC059BAD358CA8D4F876C24C82B7F4754DFB0D35F7A5BA4A7179D535C05991AB7CB3BF7B93BB2AA699B2C4A2570A29537C60662BAE128079AC91AF3AB7D8297D3F1499ECD0B5B6906647889313736E5EF5263FF9C5B7B4ADC62C93D6C17181D24BC0DAB26FE5A5A117C66110024D1A56DEA244DEF8080AD8A9D2E0B0EC9A7B5662A43CF00FFEF9567A7BCC49021487E547B71B591849381EC7297323200E906ADBF2540DC3538AFBAFC35CC89B0301C20332D1091C86528C2BD10ABB55A2623605E981650985B89562C85DEA1B1BA784BAA56EB742426D67A08E196FEA2AAADE87C5B52B0AA58A79CCB4AF4AD849B98CB3F9FB2F3A9B3E7DB85663550078BA6F36A850162A0ECFE6845BB58D7079698F070C7DB0686DFACF0D721E01238BF8095E57F1A0E99023A8173C97DAA871D03BC3F085EA49B2F4A462D1133594F903BD8B1E4541760C5914DB159D778877E891336A295810A871B529A2D79AAF28C33C6BB70F633A4EC1B67C70A2C60F034D8A7C73AFD182A523BFEC267327C71F1868111793B129E17F481753AA0587AC435C476895B1721F2B9815A7509126C143A4FC91BE743148B038536879586B8372646F29AC295BDA470A511EAD8AA360A2934C128A23274246B72B77D30A063CCBFF24300D1595B12093ED8973AEE27EEBFA7EFD49823380C797AB41081603A996400AC73AF4C4691AF0888414C543BC2673034C674198C1A74B32D46A3BC75DDF86385AB16166B623B2B984F51392C0C91D1C403319191D8332945EA76AA7710BACA277B5B4302CD0114C3BAA490024B0A990B15B1442304C882CB1B49B6A17B502884385C7DA2741016C184656EB141378666A5EB72ED485231EB816A2372FC0221511F4557282923403A3B546ADB460768D0012B0A30E07FC3E1B233E3D527DF13A856C4C5ABAA0CF7F3405EB76CC873A94268958CA861128360C423022CB605972332D0366CBEA721B648B2B4259B9F7C81B4396197A228638D622C321A1E99B5FA641427D01639DAB7EAEA41EB0E8A2405BC3C51225A66269C1C50814499E2F85A698319B5040442F762A878137DBD7C2D32A02AAB036C87906FB048173BC2323459292A2230247657F74A5788596AB6890906ACBA09230273A2C61682DC39B55F902C26C8553F42B6D01741DC48203949A9D71B49FBC366B47C37328455404C669CA163B6DF31CCCD82DEF1CBBC7319C89F6CE8FF6522D6883E3632F0127A9499C31E1C05D8A06298530612B0ACD0804B6E72C67577689788829E9C331F56937525096669A961DCA549F00A9FE40C4D480B56DB17131FFABAFD1DD0635942836FC2F0D95C9DC102FB89E6BEAB3E5473A16B43D6F2DA98D3A4F0000B39C34943AF8DC741BFB7B46DD7F2BD36809A452321C70E78B22772D139A27731B256C2E92F7D49A52488CDE4B4CC1B3A6EBB8686B5EEEB6D4BE" + }, + { + "tcId": 155, + "dk": "8AFB5B0AD10E26A9CE67D8011C715E95F452453C743D8744AFD72AA4459A1CD66EA1E0BD4B0C6DC4D5106E529ABA88069B7C1129964117716F9409B6A84971CEE6BD9B5275363A674051168941882365826E6312B19CAC63B7C139082C071551135726A5E3A69317B127760D4E7B283D4155109744FDF83DC9F5988570A575D5646AB25024028F3CBB84C7169770B2AC69E2B835C8BC3CD6B6FDB9652A9BA4B3C8698CA13AE23188F0EB73A303B163442057F6C2FEA586E26AC36F243A732AB5C1FB4688C3488D441727DB3C7B813552F85BC7E65E93366A1B134A8D72C69A16786E38158E038DA62A36B63942CCF96643013073AC5D0EE966A9D3C27952BED774328AAC3DC9393AF6C123819857E82C24F138B5C214131CE94C7C3B8537264193236EC541C3F3061AA8E3A85698281EFC4B63BCC27CB38F9280B73347A334F656461094D9FB5F9A584E2677C9DBF608BBBA5FFEE27D3335493D5BC613C784A8D6337AC63178A660144CBBF2FA97076C3E97E848652CBD022057B6551FB9835561B15E8869C01595A809941F6678C21C8044D70C75CB5424FD3CBBC88145808147E93858B7454F20620AB7A921D6F3A1C506545155C560018081C411438976DF805C8002357953BD9C669E4DB9C80E364A39964F7D5C8E58455E6860AAD2585D4650AA4194BC36446142EA53D5B282A61CCE45B15322D52F8572BF66EBBF9F818DC2595C796B797C380702921444AC1F2374BD14804E0DDAB4B07B1D252786F084BA22F6A34E1B35456CA063AC48D19093F8F8AB181404AA79B5559AC0A8365521E382CA64668D79635BE29FC53A4C13D0B293D95DAD96B6F4BC1DC4922561B5399E925506FB4C072416C9987CF5279FCCA91D01951FF0EAC7D2858F76124F40849C263C8C4C019C350C266B0CB8A5775AB5B804F0819187F261AABC25D2D80BD5A99331001E9C781EFBD94B64738BC9A76329372B822977E367AC0489AA88A53D705A3A0B98C0BE10A7A919BA648857B853BA6757A654ACC3BAA4802BB21497362DCB036D4A25241F298F6ADC52628B37547129CD24006B0204C24720AA0904C8921ECB0122DFB66C725A52531087CDF913D64C25D7C43BF3097BDAD09203F20138BA75E3AC17336C93643B81AB0A565B76543B37A7FFF46AE8649436640D5BA1824AA66472B04B24F7C951B3C03172B6B3E07F4FC85EB47C33DD384C87230401F6BB1D2612D548B52B8945E214C7D776011EB68E27DB2C9ACCCA2BFC2A73F35CD6D4ACBAD0A0F86A089C1ABA8D73AF3C4A6A97BB208455816230734558863428BD94C798DCE7647EC80890AA96DAB862888893C6059D1E12519B7921A4978DF4D1B46EE787B2B12736CB1CACBC41B8FAC30CA3A4C884C4D2D19D5A2613A08032E4F449A2E7A67B951CE868CDA6362255D5A2949CBC0BC7B7EAB7355D993AC46650B3F8BA9667471335ADC7B623CDD350923B852B38B62D2BBE1BE80A99CC4F61796785367BC3DA21ECF2BAF599BE31197F32C57CD8F02D3632622BEC0650E672A202CCF2DC29B0FA665508CC49E8BD84C0858AFA45B7D43B73B955D93AB8EBCB4CFF95BEBC159AC85A65C3E4755760181E4C8107B6CD947CC28254450EFA80DFD90E77C27FF2B35A2213CBFB4A5CB5D210A7A599C460455C56094236438CA7860E103FAFF29E2C004186133485874E1D9609A07A1F8CBBAECC774BA4A91B1491AD6DD4C310A68825B5A7C8E7BCA6A81541EC8439452CFA64180550C4AFBC52BE4A8AA848A77C6C5203CAA97CE8A0C9A85C5BE59B08005692B14DF5F68FBB534C08E49A2AC55DA7722514EC961363C357468A6A53A139E25F303A2CD6D897BD8B498748BB81232A2EE92706D152CAC7BBFB43A3FD8AC1AB92BA9D6917A5EB1A4C048DAFF766C9C361D9198EDC2C151CA4AF0734901775819B19626FF671A1850132922D13A2A4A1B61DF2EC842398856C670A78E17B2BA45C021C8B3FD8B21D6802BACBB741F266EE454F463351498958BB9B9CAD2BC8B0886C79787E1021112FA6CBDDD7B059D8A2C9B74D8C314DCE60C1F2B89E60B6726A5374D3C71062185BC171944F760CE45A24D89877C459AC1A64421DFA1FDCF1B442FB4A97BA406DD5128DF1C1246358E97C2ED8975045DAB815A45658226D52CB7658A99913AA766801552E929787EC5662786066E995AE109F82AB4B32296B17EC18F9D0352F77526F395191132465280FB7105CAC4C1409BB32E852935DD3A7B41C1A310AAADE88591B415FBE8124DE28292550014618B97BE1475637ACB803040024C91B9CA542527740FA7821183F6CB6C8BB69A95875B40C9B65E352CC429653958C7D9E14BDD261313ACC7302792F8E521D14BC1C697A76E0D34A4B6750304C0C6FF0AF490079D72789E3F02DB7F6C428AC9C9F1B3393651C01B55480A06F0517712F095A9B0B533BF8AEF9A0C07E511014BB2359658E1A199FA27A3A8CB7A3EC407C57A503F5926226F66B83B4550DD3722EA6BB37482E2DD617818A811C7373BCE131295A6427B00BD6D8B1AED01992583554D982D8E74036C37731004300CCB436EC7E28589970F8137A2751F958321CF4AD5499216FA48D0B33C038E63607B4C8917C419EBC79049B57C2794D4AA57B76532746801E5BA1413F786366862F0D5B75A47C8B919866A8C9810E669FC4E48EE4EAB272A56023202A234C522AEBA9066B7EEDEB3A8A325D592A3C21C738CD178BB605A9F25486F9979DF9ABA449522158C42569B7928A16104BD427530548B1C1A25CC1C31394935E898DD3E790AAF23C2EB6581CD36FD5738A634308B8F99F43579EA7911E6363A008D0B70F6426E0F13CA5008FAA4C202D7805B374520335B0DBB04F93F9436F4063A24744986116F4ECCA3DBAB1B9289C25D4BEAB8C3981BA42C87A5FBA3C8E590B8C3F6CA0B030A7D7C3C42482270D273506F342F8BC79A7B3C519F0B3B6A57956B6CF859A1264234E33A18AB4C8746B839201494EEE5BAC9FE95444506552A31E081671A17791E8E96769DA7227762AA36A1CD96845CB6548ECA3B404D631026643ECA1C55102AE7D0A6EAE263451747B62500F768414715999BA041FD500002BF40356A808FCFA2AE35AC08C6618BC05BCD207B04BB9856333988E97A082D4527DA4CC933793175C42FD4AA8F3DA834A769E32BB9E31E31D5A33CECF94C3D29C3B97342B0EFAB5B940744A02251C6518CA8BBC8E5A5739398816A1CF1B3072126575E4B75D10633025D7C36C0CA94E758A6B8728A3056B364B5693489A773766ADFA4EF18893F2A19D63E9C33E896B3B62047EA06AF0B210463ACBE005CFE09C447F11359939911D250D4A8CAEBD3474E2D11839C726E98AB47308332B2A1988EC3369FC27452992C75C50A9C903ED2949029118BD8A682FA48B9B0827BAF3478E4CC2E5178E897CC36D44ACF07B75670CC8A12427BFC02B366C8835B55688FA18A6029414E79811E79B40FA2A6B2A7EC89CA5123181A744258519BBF45B66BFDA3ACA9C4739AB6EC9F326D8F2AE54938E2DD28A9EFB442DD3B17B4A921B199D54E57796299B71622821241F3616555E827FDAB4C007F9C805E374D8611E4E8454F829863FF7C0C6115DCAB9CDF626619435058E29C19700CE9280A7CD380E332809E90704BAABC37654CD22709FA1B1AD3BC7B8144A71C1AC76FB4C685B3917704B24C4400C1F763A81F42C47686629287896A2BEDF3568ECA51244F132CD9C0EF05225045A8C9D8466C61A9E898B15F1656A10F7AE79272750018DC3E67B50B77097C7837227B3F1318036652C427702C314962A9998B2E87FB1F2C72FE5557AF76D5FF404EAE90BC35621C2126B2DACA2AD938F5D254339732E8E27942CA76C9268989CA57BBDA2517224C553EA49FFB7BAFCD0359B69774FE86BF49B4B0E738DA7542884412290F49EBC86CE5A107FA9CB8E7A77A24AC1A2B196863A37CBD9F753A249964ADA1E333C14A01A0B3E7CBD3BA623D92418276CB1A488A95FCC58EBB3683402CF8F8C6EAEE482115A034E834887567C968B55D429CDC9302D658B4B3EF48AA9D75CECC95257EC87B37864AFBA55333354862B7DD6C4C2D3155237EC157F7C39186B54CFC9567ED98D4B37C08D466F4C7536E3A945E5ECBA2CF52D6BCAA3AD3CCB64B323ABEBC0B442CC53C2C736E797FDD96168B50786B95C21307A4BF46F7CCB86F3EA0239CA22E7738B91C7AB973B53679CA62722C483C94E7CC1A88DDB75CBC535BCBB8DBC654356A00AD93972B40519BC696B3EA4AB22100596CB91A5B543C20AA5606219BCA74BC0C7A8890B7E49BB93CDCC05B6C9837E7237DDF3C93CF59E778126B17C388419A705CFE783314906C71C859D10FF5FEB5EB580CD49922B61FB1715EA9B7EC3A55C0B7D8E604225B296C0A1B6ECE99BD7C1AFF8A41EAE8C7801791A5ABA019510AF4A8367F092BBC31216A3D9ABE7B658837C2F18B216EFA7" + } + ] + }, + { + "tgId": 12, + "testType": "VAL", + "parameterSet": "ML-KEM-1024", + "function": "encapsulationKeyCheck", + "tests": [ + { + "tcId": 156, + "ek": "F0060489508F8F295F8345522636122FA368E3795D250C2734386D8AC8C925834FFCA0A12FCBA36B308139073DADB3300F64C9F2B52A21664F5817103417A5BAF9C2530CA025692DEEC7632E33C1C2E0742F047F746821B75285B4C7B150C37C8C5373B5367C37021E010900496519A78125EE930D69E22D88AB58F1A26D94255651A83E5A82CB0671028474303D1B19D738750D37300E6C0F535C8B544897135891AD372BEF9789EC8AC66AF832356272359B7EDD933765314AC6B0658CF38E9BC4BB4E5B01F9BA160A47A13601B6B94C886C8902C62093957C0EE9F0C7A3CBA865E21AED956B3FD02319A79CF6D45E1A5351E144BA59242D61F65F65C8C0DA1C2094B87B869C0F7BF98F653C2543E5348DF64C47E93B3791298A78AF66044B899A8949E1ACA3DA7435990C1A7BBF423AAEB64CBC7E3B3CF2118AF006A4CA915765C87C892A067A8CA8E176CA5CA7CC25450B5111423EFB5A6D7C3E770A543BBC422B564764D23E7F547A25093BC92030585A159D417D0B3C01D2793F8215B5448BC6D9C22DFBB3AC348325214BB8D38011DB500317738C785A7908B77D22D8BB2FC20A909130267015D2EB6851677E4A7BB989C01BC8652E797B5DC96369488433DDDA6959D46F38A20ED4514926B6970EA39920BACFA486ADE44C154A071A5872574617661D982E05B51AACB05F8C6BC0166A5CF7FA5B75EA3A35C563C795C71A444FDA7C92949B6E8885CDC0D4AE997C204E9B905FB06169AACBD8835A6B483F3D94A399407BA5E3CCD7D340306040DAF4B689A7371112C2507196DFC49281950F83C9B33B275E28F9C392E921D4C822CE7037378B9A94B2B5290A77DF41A38D894B514754D0D29829364A0B119E120A98BA070948F265B6DB544BA9A3FAF72BCAE1240DCBBF9275B859C27DEE79AA6DAC235A118573494BA3AC8788433128C668BD9C05AAB58B01CB844FC235110A5F06A1503549BABDB201F349CC81970563F29C95221C6EA86D433853B02C6D56F317E4BCB1D6AC1C8212C20B443B65FC108063B7C075312771323913B04FF804C6CB8DB8E33D5A5CCC47D002ADA1B7F8000A14A2314A175B091661CAEB47A58316BFD7938978C532A055B7518FA196A04BC0B4506338E3123C3964547A346D496382FCD83DDBA4146822C078893D177BBFE576B5B6865C14E5B82CFB3A1E26B5B357159FD8AB45081757EB8D06612647185FF7C699B4C91514C2B4BAF9AFAB4985711916E4C2B0CCEA5ADB85A191789A096C0E1E4308AA794362915FD8A894FE518E7D0A49F35164E84CCDC5DC9E04D72FCAE09AF5E1C2E781B39FB6B0F86B7AB0E5BBAEF46DE929C71F345AA6C96BB0F91CB678557C0A4BD198CFDDE11663F56FD64168116B2FE4A6872773C0BD9B1CECBA87ECC8026DC588EE3752CA65469C4034F4C684A5D8A622A9A98160AC8B5C91DC797F929A2A26B5920F9899259175645621ACE69F2E4A13E6E9B259EC457F551A197434073470A599A3BA775510E34B5237976AD96D53182DB3F5C696E93D7B3A5E2516741A504A676A3E0C8C683C63CE95C21FE12129055028A0DC0C23A97237E565207A9E4FE062E02AC47D0493AFF12AAD8C3E050A0FC371A35AD60D8E2163514AC3FE10435D7805DF7C50A9339546676B4C390726D0819D55310DB30B69952053BA57C6A878FDB2CD10C086C115C3065330213C153032761178534CB3C5A1F0C328D4B024A41A41491FBA42C5D2F3845431AF418567CF21698A430D5456CBFA10041A62AD3542B86EC0B871A4B90A127030A041B49B3744246175A792AF18BB45ABC3F25250EADA8CA4C35A2F8108D3EB4DE3E66F4636BE93BC608DC2CB5BFCA754D45A1A561E9A666E87661FC7B9A35A7851C57C7BF886172FA9364F698E1A11A9EB9A0FBE238387820C9B525F4DAB4AF95B1B719909B2A3668246AF23C80E94D91C30A78CEDE47CF6C398CCC463B3048DA5708BD44104D9A203E36711FB081FBB99BB4838AA5DE91EE4228A06C99DCAA327850B579E135D2138C1B3D06ACB7843E39A67CEFAC16A30CAC95C64940559DE1ABDA94250CB547509E27D6BBA6041E7914D97B6367C8F18F8AAF4ACCFEDA50676283F0603634966A902F261575584D137C56AE55887AC5C6F167D37F58D678AA32BB57097A6929C3256A6D2FBD47C1E31907123E0F916C368C34F7FB2E1ABE5E795DBF3BF391C30A1AF8E2163514AC3FE10435D7805DF7C50A9339546676B4C390726D0819D55310DB30B69952053BA57C6A878FDB2CD10C086C115C3065330213C153032761178534CB3C5A1F0C328D4B024A41A41491FBA42C5D2F3845431AF418567CF21698A430D5456CBFA10041A62AD3542B86EC0B871A4B90A127030A041B49B3744246175A792AF18BB45ABC3F25250EADA8CA4C35A2F8108D3EB4DE3E66F4636BE93BC608DC2CB5BFCA754D45A1A561E9A666E87661FC7B9A35A7851C57C7BF886172FA9364F698E1A11A9EB9A0FBE238387820C9B525F4DAB4AF95B1B719909B2A3668246AF23C80E94D91C30A78CEDE47CF6C398CCC463B3048DA5708BD44104D9A203E36711FB081FBB99BB4838AA5DE91EE4228A06C99DCAA327850B579E135D2138C1B3D06ACB7843E39A67CEFAC16A30CAC95C64940559DE1ABDA94250CB547509E27D6BBA6041E7914D97B6367C8F18F8AAF4ACCFEDA50676283F0603634966A902F261575584D137C56AE55887AC5C6F167D37F58D678AA32BB57097A6929C3256A6D2FBD47C1E31907123E0F916C368C34F7FB2E1ABE5E795DBF3BF391C30A1AF" + }, + { + "tcId": 157, + "ek": "3805ABFC83276517865778195978C0E4A39D5083A3CB7B6E6467BDA71B7ED73B904861799EF79D4589B3BB216C4EBA57728A147F1911FCF85519E61F83F825D4533AF15039A98B9C76709AB5766E2456A61DF654879C43D09B6DCA5014652B45C4F4B0EBB99A3E2774AF8CA601F4987675A4CF4A845650C4774B71B9C05885E13F16C51118564C69067369DA722ED9B312DC7218022C6D013B5E3BB37D285681E646136C5F6254746C9C0551F48D2A7A11B4524A3D8037C8495D68F955C882563F3584E2E47E16C950A746B08A14C7E26CC8CF83C352943BAFB1C382A15497178904110D5306A716A16AFC7A9B2CD07003FA25C9762D53324EA065B8C89BCDAFD7B87E11A10E374877015C475231B73C1C8B65C409829AFD984EDEB9BC6EE08E6C10B21179C8F76355C07B0923559CAD847234271FB1B8338D13C4A4362E056441F50B81AEA6858DC258A8A5C0C759339E485D7535B9CF8A3AA850176A324BEB9B81EF68A0447577668B8CC5C9262CCC5518597925C08AA14C992A01AFDE64718D71378A1B367DF6C8EDB944265A90D8D48BC4299EE28B822DCA26EA1C3F6BD50DCB99058A474B513B48EF578FF25A781A035B3C1C65ADE05120B71C3A65095DAA51A08A4F318AC58D001BB4441D3C86CC7E5BCE133B54B873CA1E3632C4200286D46F15F0B0FC3BBF4B24A724E498EB8C5590D7CD53B0639CB09D3CDC32436C7B4713BE3786A10DD856D125CF3A4563CC35B4B3F30C60E43DBDD6A9C7EC5A8E739367C2204B24A60A0390D04C3903AB908CB8073FCB1BFE1B36042354E6A64FAE74C8110B7021C47D64962DA0E1A483154A5F9CB21B093CFD4131BA59651B214645988101CC0F085ABF00D8AF288C474DC417FF0B56576B7B17EA8E6403C86F04969F992A414280F5BBA585D71B19CC4074429B768410A7995D74367CCA1C2DA0C20DD0739F2927034B009E0463C9A1D7CF95F608E5F55D0B948E22E02B0B4CB4645904E447A8E4FC8099375C1F78377E6483C7444EE5F378DB8A3B354C3542E68EB6CC8F2FF38E4DBB3A2B0CA1F9101417911718BA7DA4270063C06290382B0FE5774C0C8B4D29A0FA60C1B0EB8D81E9B04A4305BE09AFD7316EF227AE65C33E5F34AD3E756F6638391B05A695B23FC02B15079961DAF34CD58A02A9189F54821B757910E6F21DCF6C31279B8A4744BD5856999B060DA8B04FDB94C5599BAB87E63FDE20C10CF6012FE36C0E65A910D602417A33AA97792C3C9463B0086654B5462751AB5274787C017C697034D987ECD658B6477F4ECC35E11A8C30BB891E360ABB593A779558B3E69926E02B40A4088C082601A5AB3A6353EBEB92EC23A7F1883E80026913CCAFD57BC23D778CA23CCFBAFAC84CF632FC41099EB6B5F7702550D3C9515C67641C7DD8BAB89843BB1AA559E5450BADB49486E697C7986B3E250E912183428A2EA350214DAC6622DCC0D62348099699E9B6513793C6640C85C8729423A3429ACABDEE550CA0CC509FD621755794BFE851F7F868861143C649312E6C6553B167746C344A52B4239BCC178260B6B647D487CC6D88466CE446BE157F5F28C6D9E243A3EB9A8472743ED7061F51C618D86BE1641C8AF33C3563B413A291F1CBC4F807664F418B348C7D0A92A83D2384976BC0DBD73168857B6652B7483312B80870877C18D9C29A210110CF065A7574C120FB3F393692190C49F18ACD91C332C585338A05A6C023341C0A68E8D56AB8FA779312CAEB750A408BBA67C198287193219AAA9F10CA5C4688DA0455707392AF88A226C8572A0CC015A1A9C307A065319D68D9448463C9A0D979DFB3A77BF5C706133BE40525CF6C4B96EA0DC694217670502907500B2AAA6A18CA37D30CDD2765BBB998028B1E32615867D6C3020407064102F80C5BD05C4C8E392571A163CFAC63E40392AA246718D0A29925A958A814591682117569C1480083957971EC86A56662A5C398A6276D35E990B7002453A23A3D24920E3BAEB1C44DBF846B08CC6E71DA06C829406BA4337BA260CDB852D2551CF23B4A6551490A1105B56B9FCFD7CF1B3A9FDD64B460F716CA23A5F0C054C923C76DBBC4CFC36B82276F901253F84A1E830C89AAA138BDDBC4F0E72428FCB1D8DB5689954BBF58310DB0394899215E0889335B7366D70B3F2F6D3DF55BE5281503E494476096FC20E13832904205A67A9C2EA07460A4CD" + }, + { + "tcId": 158, + "ek": "21B44B5656652E480EF8EC3BF8D1044B2A124634A5D6B0187DAA13AD2866680BB3C0DC3CF810AD0CD13731F458DC897D57C20EBDB08B7CD896A3A54A9FBB29C4D29ED36B1F9A40AC4109C1FD98638A566C3539800E32A96728811E8C1809194CDC5A9AD3CB61072A9489B286005024C829287980B692974F36243E9916B324573DE8985A7D5B89D864BA6D4C2967134407C89F8FD368F61A9E714B23D799CEF87BC990C42B8383C044C448AF5A4B0C53BCC4B26699B777A528AF2B289B1FF143DBD12EA7CB1778F31B07EA60C74072FD139780009FDB9B6AA2CAADAAD0C4BF297484329B12F06CE2D4A1F002081C3156EC909AA99583BEF21532E48272109E1EC10FAE1A5BAAF21A8AC6C16043134A496EC873280C7326C9199E2290136086A50D342926F6A640A97D16529693DB098A291B801A418F07CAAAB91752704A382C8BF8948056803B5B5149631A352B3A50C874B04CD5257E7558F2B2CE0F197E93269432CAA03D7576B56C3A6F9965FBFB86EA2C94FD7634E4E0400249A4F5D233D7BA333E2701286C3B92121CDDD200802604443BBB5163449F300AD9AB462683612F3B6200874EF70A7417232E8E8B11D8F6859D6767EA1C827180126F0B14BC822F7C17B1B353312703564CE509D3D5315757B4CFF06AFFA7562075BF8A57201C7B0860857CF4F14C8A8BAFCDC4726B5146416146B3011DBEF469D2664AA1A23BA6B4A214A6C38918AAAB5404826391EA735A57D0C604D92FCDA10D83B96924DA176B061A13B1A1947BCEDCD03BB365B550C789737A5042B0A6991CB5CF00CAF1E68C098BA1734713A1111459FB6186821CA563894914C370F79A24DAC1CC21126AD6397D684EA02670620C1027931BEFA2071617B8169545E47C06CDFB555EE35ABD57A923B426D5D6497962742B0A6B19509CE234281250C585E775305B633DB37A1A449866B9072BC828B5D5B7CA9961FAE767B0521460494DA9FA8A35507153B033C0C87A37C25CCB3C366764B4B702B8E584BB7CC532F46CB672469CB558C5649BBC5758B3E0F98039BCA5C6171086D01ED0E625438B9C8539796A493A6360A9E43B14C6F6ACD82A09A00933E322A115873CBA1443E9BA3712002D17F8A09D44ADCAEB8C6F777E867874E49077279C7C9C069BFF22B11867AF1E0B796A4901A6517D17E011B9DA4A84BA97F991C27416963B5B16CBF8C4865ACDB38756377775C5BC8B6260C5FD4551A2218F48B58FF27341C96960BB1A25F28823E6657CC1F85D6361956DBA562D344AA217B3465442C44C3F8C63C479EA086D8398BBB2A5FAD39E416162111C367F0760508B076528692F26AF72BB8881D2BB4ACC49AE718671BB2A81482B976613C4B69AFF77591E388829B7AC7BAC06197B630CC90C8AC3355B38BE5F928A69852643D814B5051A70D31B084104287C70A9F8BF37422D14430335C766FBE534A510B68E798EA04C7482905FE3D738D5805EC8F5A99E13708D83AA14E8235943CFDC06B2AB92523DDA4A7E8B8C109AC66477297333BF7B50150BDB401FF2992822001C7ACBD55BB864939A77F6B1801606CF27C9908214F87049123A9A1378C6C64A5331680F37A9A34D37A1F64CAAD4335D189BA59909A1D9E25DD9B839DF6336D7B36E12B0141CF02F6D627DBF9B691AD85A131893C8AA8B3A6A016B58287E441D66A67A0C662FDBE32FE5192B10D37BB413498455204C702A53335F496A84B3FC5C59A8291D7801C78B0F34A9BD545435405822B8692928E81542867EAB03CDD1D75C3548BEA176674CF3CFE617BAE15A9E3615A255141E47195DFF57A31067BB5CE65099056F6A16AFE95C1A3F7AAF6FE096F60A8D736BBC7AB8BA95A3359F306A35443F79E5448F155100254232628F93285F709C97D266836AA76B94D4519872578D184A41023A2802C82E51C78621BEDE412AB0973B5F0799CA1802761948D0235A61A53749F7B6E8C14379F43D38B0A41251CA9DE17C37DA36E0038E2101CDD964BA50073900A840D660AD5E409F0DB59C37D288442AC40EF5B9D4B3711C7A0498E15DAF059D26464459BC009B410DD2659D2D92A40E0CCB3C8B94051C2B89C7C439D3CC48A16F143AAE461A5408C72C05BB5080FA1BA0918C3EA18EBE91197935B0E18AC212077166B80BFD862670C6597BBEB17D93B38EFD8B90FC3DE6657D0529B16C9077B703D9D29FC2BBC3A988E7" + }, + { + "tcId": 159, + "ek": "A3391EAA3B31C68883BBA93D05216C8FA659ABAC95CA60456095914A084487E672A308AA322A8BF5B6B1DD8788AF5561E8B53DC0C34E08AA7843E0B53F20048ECB8B9B43A1633BAFB29CAC9891B34BD6A3F407B6C6AB606FA93468FB573E8761333040814C8103929F1EB4170DF218D61B51A4E4CA0C013FD1F354FA14584081694E562B38287139560EF93B882F42A470567A4A699F7A260EEF574581266141400D22212C33A91EE91C2F0F6934A672B8EE99354522376E955219B06BF6595B8BD3434624CB8E352AC30515C91CBB3A24837D679CDE2295F4B3A3AD403317E80F485691062AB1D4303B06524EC6F0826A709C4CF961BB7812298C72A49272F2383A1DDB56CD46517CF27B6D773FC54309FA6A5415F55784C347600BA9D04807133C6CEFD60B7A65939F7296D55CB766574C516946A3632088A4591D81B1709565E0083BCC0B3BF7F11353725688C8706C548108F30FA2DC0B7E9894D2287A0E1BAA4B481714643C89ACAADAD2BE86A01DDBDA27E4354A742C6A77BA39A323C1217864F3865BF93B995C185A3E895B64D41723A150484342FF54914386A397D3181424B27E7A5D1D64A737340C9F95999DD82524C5307A0763EB5C2C30A1A39968730C650FBD89958D60A2BF653564E990819B747ADB8BBC0C6DB70376F375C747D607AD10908D38672765BEB871B1578313CC574232264BE100BDAB1757B303B853671C269A8F636B992B334E8990CAD5942E1E28C592C64A462348AE422F597C3218DB07B29707CEA91D9662197C80150D6A2F4AB6376EF01CE242AA2C1829B2248A53B1AE79AC3DD71B74B43966A02B34DC294EB4B83F2D076EC8CA082473B5681303A5244D974833FC5070223AC007C239356818ED6C5EBB265EA19C6F2541B4F48C3A04316DB1A840D6552BAAC26E39350CFF89230EC429CD563DA217187DC502E512845248A2E41132064A02595712C95476D4368B80661F8E9B848886563777657E4511B12C2F7E57C35528A61E10ADEAABB4E4CB8AF08A53AD87B357BABF57084CC2590D38551135CB5C24469D18A6952DEA1BE4E7436F6BCF23B41667157E505BA549495C1908C304077AB910BF2DB203E2373507769A2EFA5A29BA9DFF1B44F071C6783A571D337FD07CB5E489869832756883C7046C31BDF219EA296B5E518F57804D73065ECC257A7A5768CB9785486A5B6D9256A2EC152C43CC96160646C9CD3CD757C064984E3643CEB9CB4295BF594B180A0CAEABCB13DABB9F59BC43F678C45D8AA97C2003EBE5BA98E57AD8A7CB3AE13518C964DFA66BEBE05BC4A37551AB3A1528430EB25B8D58A1CF1507718471E3C0B48FB732A6C90B2BA2C7192A1CFD56454D4A066C5A35B0D8545A48571FE73F97D5A96D904D734AC1D80A11026340B632870ACC19EB2982BFD72E1367A30AA06B754885CA3B187FE337F55106E053B2BDF90BE486C855FA6D0C10308823125BBA6971086DBA83AA0AE7A438C01B95D9C3D4364FA8E47DCBDB7ACF5718C8D83BF2A4B3893BA75064C83BE65A19A672D5C6179DE289DE1AA6482CA087EA3D1DF4A76FC39F34CC02A97B8EFC41983806B7ACD45C3A01CCC74ABC1C5B65A86B0C6C03A875879595209FD392BB679AADA544AB2F9BAF1BEBA6A51478AC97C14EEC0B4FA94F153599B4D79457CA6A1E4B410888CD2FE2B8CD43604DDBB4B3F46DAB531495CCB2C0EB895EC6211479CFFA264D494552835993E4513257279654DA4AB5781EDFF79ABFC264EECB397684759B65BFFB1CAE4F9C8F0BE0877AE8BA20B56DE879305FB01FA345784DD646ACA290D722BDD4D822F7D20FAF2280670C36BA78A2EE564FF9850930B6589B809E19E362B85134A8767205197DFB7A889010C1EFB7C077A542B4B60298B85975287A141A0583D52453C15F2FA88E441C8925544DC66592383BA3E978C2574376AA42C6CD31228FE295A0D9C8025B60737AB549101B501643385A4185DB4BF2B75FB2C6AB7D23372BF860223171B7C2397E27BEE66220139C0DF4875D9D829DBCE55FBB33A4F5771860F02D7150A5AE1A0A9C5939B15510349B4BFC34A679C56F0B413A7625524CF95F701ACC95E8B257FA7102B556867B20FF237DBD51288E014EE454BC816123605568347108520015DB9B1796D65A3366B0FD0738007749DEECE16EE75EB5F46B83FF2B3DF6F44627124A2DC02832A76B4CC06DB8" + }, + { + "tcId": 160, + "ek": "FD30786F13646B607B3CE1778229775BD7C79DAA5F906817C796CF8BB64F9575AEB8A44CCB0AA6671756FB17AD7FA7821A46404B06CA8ACAC3F4F331DDB59DBF88B4D625682EAB099DD98B16704B6AD868EE4A3C61913AD51A16DA33AC76E4926123AEAFF02E0D6A299BD63BFD375CA5570FEF608AFE13BF8AA333156C8A9E6452EE130A40F338D8F83483C9C251216A1B3128DB5517E8B0A2D7541224B0796042CE73C179D6C7C5091AACDC0353C4874A37A8A41EC41E694BB9AE888244870DD634A038C99BE2E2CBC37ACEB820C366EB90784A079A777FC42426B7115B2E433ACC002FF247473E8ABB8A7A3302EA648C04C36F930F16F4A026BB9667A1B70B404A11989072187B5B3A56D1F55A0AB7AFB226A140779391E9269C42BBADFBC84E492E57D4076CC91D2E4AAF47A90A78F44A21986C844AA722E996DCF8CBE9FC71E84082A203AB5BD6CBA333C607E78F8B84111D4024C5863670A885A1CA55ED721CE5578849D3477F6650A86470D02454D211644D511A3B5BB3E13B60F6706504F4C8C53BC2EB726F926137CDE15F23CCB7B7C814F61C77943A2B2D714F211C3FCAC306263271A07774926401C4D5CF9B6551276C5D0FA245FDD8595084532AE7AD1BEC6872C57EFB204D0F66BFBCD96F80B61E34A1A4966146891A6D007ABEF0F2632EAC3042EBB115DA442491805BA074DF1AB018833A88C2480F427EB5342CDFCB46263B68AA7677D943A475A15BAB252F23F542BE85225EF91C0F737919171F08222D620046F1E041AE3726AB0A4B6363690F083941E8613B1575667CB2E69A009E703F834796C7AB7490F5BEE849676768854AB68D2637CE35D78B65E68DA9B92F8E199DC3C4994909A54EC35C95361E45884B098316548540C08854DB78C1ADF952C5F1988AB840B71A9D49CAC7C70C00EEB018F0E3CE9A5994D6228796D07B86A94303A02049F159A37B9743F678F6D20A779699B54AAB4659020FC1309A0C9BAFA35F556CBF55F718E217A8C26688A5A876C1ECA042F33E65636BE478C8840997718A0F97E4BC125ACAD8CB0451265CDD7782CAA074F0926ADC0A95FE360F84F69E27E19622B740FAA8682F44957C37928C37C9DC8C9C18A73BB0CBA0854C50087C2FA6D4B203872113B0CD24C64EFEB60244609EE7C5CC010157D1B63D75A75BAE8B41E6D499A15B8EF05B0B6484025839379944C955B458A3337B5A054DD9C5A7C136BC511A3F0E344D1E115BB89467165AC64ECC198CE7B25E2226A1F748CB116F293BACD7DC5C6C86CD65F17B667B735C4720DD06811111694B5C8875CC6F317526928B779DC6A56CF33ED4355C0668341D30B40D67A0E41907A5D05AE6088A78534DFF5C3F7D821D87592C7BF61D47743A90B5339D1A138F694E6AFC5D04E3CB90A01AE8156F27D6913D7978CFE137DFEAA0021B6BD7667AD2A6882BBAA60DCBC58E74A3ABD6B871532AE3066498F3CA5E52820916B1B9C86E52F1741C06288E9165E02563E9AB82739440E96544F785062F442F8BAB1963A7736BA4C8184C33FB47B8E3143222C8BBD45C24F695C4D3E611662A43F6F73168002765D3876C2CC648C03B08CB37C1C101BFEB4419815D5F401174D99DE0A0AB45B2B4F3608CA4ACAFD1D35A71810D40D5A9CE9937598B22F1117DFEFB117BC024EFA3BF74D962A41495D9C1A1F2B83CF55595E8991B719476882B09CE72985E380E8DC32D1253A8A37218295136BC637B66075855DCA08E61B8F3950FD318425F86647FF45EE97951A648357148C9770ACE017A3F8FE93BC26CA5C6213EEBF30D8310ADB9A26CC2C86DE1C32C5F53C922F0B6E59AC9DB6B5C31624C977954356137BF3A77C54C50A8E5340BC2443D554AAC9AB939183C16506368EB9BCCE95BFC8586F6609F4EA7BEFAF63A0BB80F62C46E57396411F6ADB9D1AC8081A6805967C2706814A97FF9328E5C416791E6AF916BC32FD969A3B7751BB1488B278804A250D66623D1924DDBEA3BAB79040344CCD99C901D981DC5B43EEE2C22E329A3BDFBCDC2D76247BC89E16349C31AC213E96CA640CCA705C74D449976CBA88191859F2B0BA91AC37F7A656CF19B3CC65A010C3E79500A97DB7D9AB0BDFD9C40FEA0703836904229A059F23535E7654B3158756761F3D7076D174B7364661DC9B538D8F083EE254D2E76E742E9D3929B4860DBDA5589A462BA481DBBA903FAD8F0" + }, + { + "tcId": 161, + "ek": "10FC88196B7F2A666ED2E4BAC29972E59B02EB082AFC4807E53B604C375072077733C40B6B85857DA212EE230785773EB14AA582B7C05D06CA72413AF9931E2602622934C04B411E9A11125E6BBED06A591CB88B8D525959B9113DC404E1C5059A73895A7753453388E9327A2AC5792ED05832E3651A99B032A2BEF56B1AA991241A4477C1C344823A1055831D3DC4607A52CC23975BD3472F62414D15CC7693AABE18A041E44AB3D3216BBFA62140B99E188642F56A5E53C84ECB2903BE82178EA957FC8BCBAA20BC793B93E6961A0550C4D396B913C6CF729AB8EC27880EBA849F295E847A1C7FAACE0F4A0C9C397E3213C13A0989E40A9BC38C87B7437A67B018AC056ABC9A45D67171FB5180EE0774B663263CB9C40E2ACE8951CFB0B8142911932900CF06731D9BBA9F7A56B1DAB06B681959D3DB026029C5A9D71352280329FAAAF33038A13879BDA7C84BB14195C761347633DE66A505179EB4E1AE1892C4143BC3CDF4203AD97A4C9AC53714295DCA322404A198B4C267B66DA162B20F18240582542B5B8890371FD0CA3C06B0900BFA159911BCEA39046E1B45264C604D997A7CA108627B8E2C76BB3E97A5B77CB4C2E44FAC859D1F5BB86B306E536B68994CCB20050A8FF04B70959AB35B42B43B5365F29C1AC6634C604A094561CBE1423D07AC1F40CAD9F4078DFB701DEABCED2BCCB89C118DA204B3F8580505422E920AEC8CAEA97521D84B51AC00A68127B071B7A1B00885E36262863435F6AB104AD90F10ACAB14156411AA15A83445E6C0417AF426E1B8A8F171240E5BAE109CAB2CF1A6392825DCD6BE786798E983338099A454E973CB70AB3FDC25AF5561721BB86CE51FA174632D89B376F71820A86496C56663276B06A2C045DB6F30C4148E6B6FC79A14F1216C322A4704BBB3B96335B1478B14F0804F81300C719309052F8D1798AEF07E597A0D737C1C4A59BAA0409271F055EFD002111646FC5008FF9B9A70D788B206187BC07D7820C95D35B14B81A9345037EC67AC8C18A1215562CB754BC9A76129A117D517991C740DD4837D7CE1827173A0022AC32E6001CB9BBDAA7CBEB36BA6DF1A4A280A42AF1956EF8ABAA955C735858498D6C1CC34CC6CE832202774B8C9437A5050EBA05875B415D584906E530191DAABFB96359C482188000768EA2E0CEC368CE51C9F724AFCD199E25C0217AA999FE6B796556350D9222A4569366C0D4388494484607604B902C286E16A80DD869E24F8C99234A2FAB44425371F8B03ADE3B1CC2FC17D0F7C20BDF763D85752F7D4A5AC344596612AEDA157B94370B0A990FAF47B0121313E7A14FBD83C0FF423308A7CCFF7531CF61CB622B9E45974760BB0A581902EFC02DB909557423FBA125EB1948E35B6148DA7218C03CBB47035BDD0B9EA0B80F78A7E0E4803FBDC6728E23B16BA43FE7746E04466E9016D9B139C04472C23E36A2A593E4AE036D9D0547914AE8EEA6CD5F39AF688496DF5CCAF2A5A010966EFA8934009A75FDB2FEB354A37436C9F888D1404611DEA91B2BC404A244160033570C04AA4A31713F15E7D8738EDF4B3D486C995CB05AEB7348937199CB3AD0F8AA0953788EFF7CAE7CA783037A87A6ABCF5613E9F5B76E8F51596BA0C7CD52E8BBAAC2647B2FE33983592AC50E6A37F03153A8C923716B3E16295DF11AF3CB9B3D35078C4DC804A799CC948A2EC492D3C1753B6771F0D8C1D2C2803E7BC2F6BBB7B759C1BEAC0B081966B63967CCFE0ADAAB864E2263DE9A3394F85631104BC242C00F6280C36F99C4F176EACA2CA8114211970187969A0ADAB28A590A13FA44165142D819068C719590B3C52BD1490DC509674641F91BCA27A45A0EDE9BFCEC72A45E868B3D8B496949E3E96813BBBAEE16718565703A864B0F46B1A97554399687B53809600830D099B59ABCC31BF05575F85489BF159251B87135700A359A174D993EE53002050ADDA47B9E635CF656334926A1CF08888F898ABACD565B15AB9349801D6B63F3F5393E905C7420A53E0325D55288078C05CA2844CF76694A64404AB40221DC081B5345BD4960E3ADA0FBB03939F04A7171C45A1C6C1FB63A1C6649E7C8343B7D98F4B1B72A409172746C06EA95477341C146B59D7E22B3B467BB0D136D0964F56AC39CE72740FA4B0A1D66C7E82B2BA3F074D577A393A4C3E6862EAB0CD2EE3465E219C9FC9E00BC2" + }, + { + "tcId": 162, + "ek": "DD45A3B398174D44121CE16CA3CB1B806644FB25535B16371631AF111693BCB4439DD73A42B9145F519FD4A80152318E24BAB2E69BCA561C55379442D09B05545C78EA5B383B48C982335B91F41B8AC8ACA1106964A52639B878C280860C816CB66480D0F8669590969394189C4C2D31A102678C646069698B736A902BBC6E5908DEF8575C6C8F44774BB52C3F4851839872746262CD669611451331B538531739255BF62D0F5217188855F293142573A9C0E73E8F437432E823AD6C939712A480C048CE94A34389A27B002A0413CECE1242D557831FA48C6CEA19E7D36D2E7C10DD725A87256D24F43B040A2B67D12A9B482C450CA91EB7ABB6863D41D09C86B46C83CB43E46802FE94B011617FAD26A1A1251933DC4B289102BBD182E754CE51EA2C857A9754EA124A64482E658DAC7118D0CB0F0D0A206F74936D40BD75CAA7761C2118ACB1E5240FE7EAC225948E9E05835745AAEBEB479345745678A6C250BD65A876EFA83D745626B5EB8E55C44CEBC74B42F307C47135A5C577104A891747B2E86477B103599B2C0A9611A3F323A3484A0578042754483777E47BC8D34DA93A2A75096EFCD38F6C002F126B6A6DEB3BEB916742CBB628CC3EB55369CA216139DB62C8557D00F0C9EFE0BE8BE221C55B7250B5B319B9B830B73A10F149BB448BEBE3026D65A1C65477F0E3AF11272B3308939539C4B286B5F8222715842E2857909E6498DFE9992444958916A871333E6C195BCAF77826347E9DFB077EB223364529AAB9596AB4541C9B2062F587841C450C2C16F72A140DDA822B2B65B1BC9370286D56925B8AB1B20DC1A2EBC287C936378F4B25C5314E8CE7786D1B51C47B348FBB30A3D3B4902B7CB34C6D90976B42C78280C0171FDB69E3E4B6057C7BF2FCB4FF7002E6E5A7FD5A87B024544788AC1567BA7111C7285A9B4374036E69B11A6530D6F029A801A2F406532BDABFEEE3B52B65CA6579B911E31ED8539CBAE855629956AEEAC618A80D100752028AB0D9E07901E3C3CC0B5025F92629CA95B432CB0F49B1A2A49AD3CB2FC82AA7263C2CBE74027E0833BD636010506B86D5196A005468498D2EA7312D721388882B5D3B9DF4771C31BA9BA34BA0B0FC2B24801AC36908F1B00AB5D911E4E61D2478C772E19DF9142D382B7AB07A3075C11FB754CA6B93435B07099831154D40C0EE989C671C5FE4161A80184C020854FA4C20A4D2B378175F5C93C861555A7AA8345EFB6DA1501ADDF25640119C265462DFB5894DF499BA5B3343A15ED1FB142F24C0096857BAB08D08246327411CCB69A77BF4181329A357A006D603ADD345B6C906614CAB49EA918077447CCD9B6D59446729A0372F7813CBC21154889C26A570838306AA4412BE5A42A15B65D6B771B18B325837172D636D08ECBE17E9AF0B343D5DF5899497092AA669372A576B9074F1C36A0F181C4E56C63A78ACDD11236C0C5D6B70C04D64C541088E667A1F09974C607742B26A45FFCA42FEAB52F4A191F265C9044B7A06E8A7C7536DAB695B99B926FC6536757917C00102009555DA35C2F05618646789B6EB41F99168E6A702BD32C02E22B348E66208C921E0C5B234738A1F9755999240EBEB1C9FE288245C3745452C24C40B7C7C7DC76356CC786B292255AEB27AF720CF49F267AFD683895B41DB165E2EEA42049021AF50C571BB90374BAB82BCC08A43790F702198F634F0319E3A15B3E5690DB7A920D9DC72C1BC117987C703E18890A0A6C8D68B6C609ABA16CDF00A040C86A09FA69AC608385F1C3546FB478893AF5F67CBCBD4B88C6A444E718B7F934747EB9413DB4BEBCB43D6C9A05BC52DB037074A50B1E6C8246F9739A4AA991047A41F845F86416228F5CFEAD1B84FB9A368F2723902ACE34CA702186D941541CB917BC913826E304C16CC4B09685CBDE021B7037A2A92A77BBC1F18775207A7A47787113DC60E3BC66CAE1B67BB5072F5EC153CCCC2FBA33FA0C9C53FF65B2E26965F23ABAEA628C6F957E5561AABC89928DB1E7AE57376CC3A4E616AC2A20016531E42A0BD9F4885B130C6C010705A63BF9B3743D7A9135CE7ACF0741396415BDDB92618E2824E03C4BC04BD9DF0277DFA164C0375F53A613A86735D5931A40B3514D65A3F8929C9F19CA1E8CC23B9CEBB1046D8FA40426649AE494C013F55176C4A9B251D0128BB2A9E6AD8B3F94613F8CDCB5AC7A1245C3745452C24C40B7C7C7DC76356CC786B292255AEB27AF720CF49F267AFD683895B41DB165E2EEA42049021AF50C571BB90374BAB82BCC08A43790F702198F634F0319E3A15B3E5690DB7A920D9DC72C1BC117987C703E18890A0A6C8D68B6C609ABA16CDF00A040C86A09FA69AC608385F1C3546FB478893AF5F67CBCBD4B88C6A444E718B7F934747EB9413DB4BEBCB43D6C9A05BC52DB037074A50B1E6C8246F9739A4AA991047A41F845F86416228F5CFEAD1B84FB9A368F2723902ACE34CA702186D941541CB917BC913826E304C16CC4B09685CBDE021B7037A2A92A77BBC1F18775207A7A47787113DC60E3BC66CAE1B67BB5072F5EC153CCCC2FBA33FA0C9C53FF65B2E26965F23ABAEA628C6F957E5561AABC89928DB1E7AE57376CC3A4E616AC2A20016531E42A0BD9F4885B130C6C010705A63BF9B3743D7A9135CE7ACF0741396415BDDB92618E2824E03C4BC04BD9DF0277DFA164C0375F53A613A86735D5931A40B3514D65A3F8929C9F19CA1E8CC23B9CEBB1046D8FA40426649AE494C013F55176C4A9B251D0128BB2A9E6AD8B3F94613F8CDCB5AC7A1" + }, + { + "tcId": 163, + "ek": "E59BC645F9A522628F13850BAA8409586B2533879AF271675B22CC98B5664856586EC172DB697C3000A15C6158063B3F88A24C4548CB4CF23795D41CD8B9C9B010381DF1611D4610A4079362724AA333ACE0D13DC1E283FABB8FF392A505785CD2F7CA624762538BBF1E7AAC299307CC658CEA3A3407C339FF161013F98B8CF2736E0C7461AB8652B6ADCF511547EB3049319B0F0A1692A0B7679671276B631F81B7ED310BB32625FA153670A923B5E558E0ABBEE0C062FE873F79824EE24195F36B0D27F49D49601BE52BAB1EF56CD69676CE2425695748B0F66C9F832A74D1926AB0B78426CAAE34C045253DE5F582FED12A41B5C71C16A2C9002FF44A7863C55F9220CD3E0B892F6447997ABA29BC014DF89BB21B37B7650B3FBA75D8D2493E733CFF5057FFD2BFDA493E6E29926EE74D325C9672C84B2B404BEAF42DF3A480536691E536C6417364E6133C4D669711E32570481E7BD5704BE890668A14AFF760D2E6495DABB427C54A15432F7D42471A214A8FEA92F1C916BAE0145DA0CBF76317924A15A92BAE02382FB452C4FE624921F0084CA65E03292A5D6882408A207358BEED34667A40A2CB1C4BE3979852099829595497A194AA5755712560218B3A71875360D7912921336D5549F685A6BFF528D6694742A1B3EE46A84BD1BFF3896E6A438C447183734B7C37F4BBD38CBF0F7757F3995294A045CF9826CE804D3092479631449D00132985135D40C0DA515FEF0030D2E297A10C0919B77EBEE3158A14BB14713CFEE2BD743782077035C42C33E0368B659C8D2390AE92700808BB8DDD31783554C3A8916A2B4AAD615239EF99BDD92399D031CF3218065B8BC525352CFC5A06FAA26A17949276934416EAA166549979B368935826838B37880B7C0B1A538099B84CC39A096246DC106B74182CF11519D402335137BD2DB18F783B40A5AB19186509B56C7D220311B3110E558B17424BB58C49CCD33B6513A063F9E4BD671C25028C784422BFF7C00899B25FC1CA5DFA5A9B8408524686A0399811A04415FAD262D1E6847069BF05294330B11EAE54321315247FC96D0B0016BB950ED5C03C6C29132DB80CAB694ACEE26A2FBA16B8A30B82157F9F3372F722A245E46D2CA97F456B1B5BD693B7A3CA572B924966714D332F9D6370DE49041045AB05AB1653200DD30353E5F83D1D351F1E7339E6125162204162367B4B055A77F5B7A0A26CD868B292E715D0050B98E8BC5B5138C7CCB544D21A33B3161196B855149668A94E0DE7135CA44C86360DE9E67A1C32CC332775D95B335CE23E1BD11ADA3C2DBCC17DC115BF2262C11DB06787B99B6F886180F7B73B723FD9EB2A0AC07930519EF7EB4C266768A25C05C68413F51C15696B7879DAB75D8466C4F04998A8CE9E6A463BA39D9A300C5B5A6C68592EDE78A566576C6E1263E7C949900C0459E0CA757CCE1F5AA86B353D5E809982C4C65E170557355EFA9B8691658161744CABD5750B25C9B4270B9F8C2F7FD3CD26321B9B9533D5D6AD88989C0B685A62302F947CBE1A24B4E5772BE9235B297C4D6DA639CDAB373194B8640B5DBDC11759DC61747C22A267170EF242707113A868029BC3CF578CCC0001B30E78AEF051987CF19CD5A4322CF11857C6C2C412B783538285A47D011743EDC0246B5ABAA9F01F64A30CA8E2A215CC29D7197DDBE0244172A95A189F612432DB963EF36590456100F2AA73589C9593E2192017B2F6E22809001469E75B66AB24109396781816B24B1F52554CEBF7BEA5AA1643D376E2F000A73655D5908E44FB19FF0959DE2502D296363725968B8BAE2E5723E48B0762697D4E6A24D8022BF338038A59B7B2B1B22C520C4334AAFC0C0551491F4292A4C0E96F5E859B3E8A1A73019355143141154CB2625F867958995722BA0A52A772AD2529B37067A5B50B40B665B386D4158AB1046D35B3A6F72844924A031BAA3C61841B1CCFD818CEF1E0AC1045970F5164F65663EE033EB97673D7464ADD94A664BB26890682224B9BF74397A70586A9EB12D309B5CAE430128B958E48671EC0063B4132A8216D834208FBDCC9F2FBBAC933ABBC18575B289829327E1B1CCFAA482E961844E0D580C4D1110CE74B2DB49AAEC9234DB804D748B758920827798269968417235B5A19C8371B82269DFDDB65C20C59E688B6D4A0E76FE261FE9BB4C3D0775EE5319FC1DB81FC57F051987CF19CD5A4322CF11857C6C2C412B783538285A47D011743EDC0246B5ABAA9F01F64A30CA8E2A215CC29D7197DDBE0244172A95A189F612432DB963EF36590456100F2AA73589C9593E2192017B2F6E22809001469E75B66AB24109396781816B24B1F52554CEBF7BEA5AA1643D376E2F000A73655D5908E44FB19FF0959DE2502D296363725968B8BAE2E5723E48B0762697D4E6A24D8022BF338038A59B7B2B1B22C520C4334AAFC0C0551491F4292A4C0E96F5E859B3E8A1A73019355143141154CB2625F867958995722BA0A52A772AD2529B37067A5B50B40B665B386D4158AB1046D35B3A6F72844924A031BAA3C61841B1CCFD818CEF1E0AC1045970F5164F65663EE033EB97673D7464ADD94A664BB26890682224B9BF74397A70586A9EB12D309B5CAE430128B958E48671EC0063B4132A8216D834208FBDCC9F2FBBAC933ABBC18575B289829327E1B1CCFAA482E961844E0D580C4D1110CE74B2DB49AAEC9234DB804D748B758920827798269968417235B5A19C8371B82269DFDDB65C20C59E688B6D4A0E76FE261FE9BB4C3D0775EE5319FC1DB81FC57" + }, + { + "tcId": 164, + "ek": "EA8469481B7E7BB54A1A9428F312804DCAC9F18222DD41791F893F6C8AA6E565748DEC690FF97F1334BC8C6A530B037621E0AB10DB0D1BB99BD9299A1553CB5494537491479330556560C4E1E883A496AC5F6455DA693150BB09A7D8B5361765F2E521996172203350FAD98730516654977B472147CFD090024364B4CBB76771C7F9B9811192B3939299DE93749AEAC4CCB8CEF090CDB555CADDB36218FC9A74212CB9745AA4EA6690871995647E82532F6CFA6D19D8541F6C663A6C38FBF78F218409B8B183AAE458C515409741585DC98F8614A3CCB54C20103E96E69DD6660C63528DFEA1C03E3B0007EB180535BDE675A582ACC24B2860F440537F73B0B492237C80382FB72620C380FE05347445A133288CE35CBB5EB46BDDF41B38884494E18CAFDB0F81359842C999D2992F8EEB0104172F0423A69063C41AD7BF1191BCE73A0EA9F74848E37E98139F7D80065F46507B662441B71A81BA79F8A0400066874DCC060EB0BEB54C52A334BF2F906EE3A2393108B422134D2883C2D8A74127934A2B27A8F576811B8786FFE52328AB4A1D01436995CC449951EA4A49F1A37D7B772309F57D102766AED64DFBF3C22C705D99237D23901FED128BAF17C410465983127C93E306C508197B06A11CABCFF7558915143C91CA0F84D07932D1AB3704736AE77DA3343114432E18385E538B08D6D848172A1F067547B560AE45F31C7BE5A42451CC12682D8EC5CC45AABB9B0B67C1187C5626C72428AA3C879F52B8CF9B0070793342E1B0454B920314E28B1DDA3B6C1201381C168D383288BA91BE008FAA936432E91BBDFC839B4815EE5B129D2639AB46CEFE61A3C805B5D496643CC1296D8143C573C6D1A941F600AE19FA231F3231A8A274A7B95F2F4290DB9C3AD536835E14BCB86CBBD61A362E836DE01C2B6507C81AD457262099A246CC3ADA58A9E2AAC8624DA1547E168CB36467C37B3464FEFA84148A26714CA0F1DA16E256A5E0B9CD241959A4BC67969B73D1D2B567DCA06606A1CE795F20E799EB198E6BF3B2C8F3A56536B030B36C57F387A3F85E102A0721881BD093657DE7CD79411228B65C14F61620AA2584E2315F451BA76A370E361601CC9547D2C6C1BB885E0A1ACB6953B0C4AA96F5262D468EA08A7C2265B8B77A9853C4739E79CD3D32A28C244F0E122A042BACE14569A06615D5706C11CC621A273B3F6B9CA9260A16385D96A9B7C3D594607B27F427CE67DA995EBB0D2EF097AB4859585514EA659803A38D9BDC0975389D1B627C689156B7B3914E0CB5E7431B9F55A8A0DA2DDDDA39CDB82BF01014E99A3988E817DD322FE1D61D16FA4A919A923B86CF6AF6A79A792B8F03B91714B6DB8C6AD3A1268F45A0E67043E1D6C5693CB4727440DF3A1206E446549BC59A43CA8469B44E04259C421EEF38C1DD8785CCB715E636CF5F997B101A67EE3B44561B85E6A19A20D10A9632AD0AC86A30477E0BF13C66E482431241C11B8F94B402B22B1AF5FC3ADC49434A9A19C343991F048779598744596A91393DC6FAC678424A7D710CDD19C3F644184EE63105B9BF9100C264BA7EDA761AA67C00FCF93717208934D884C1244CCFB18591429672484AFA54A7AC410AFC58B812E79045C202CDC9C7D993629343C624E08B25A0805FA26970E00FF8BC88509345EE02680A07D056A91123375CFA38A86FF712C63B89281CAA23EA8D6D7277E18564DC475F3A202613BC2C1C5436FEAAAFBB645029336E5F7C03BA02A2F4203BDEE599E79440566758577C9912722325A8A6E675395930B2FDC5A844753E8418639003C891C50B2F702290A3B5353CA134005FD6319760E126C5F998A8D5B54D18A756B281B216A6EB183BEB9663D4C1B87B60249113C3C64A972B46B4552A70BD658273583CAF87CDC0C7497C2211A6420649BC2ADFB31BED63608AF24CDDD4823A020AF214AACCE069884B3C8BD8899D507351B9B5DCF7C78B1138B5401C04B609DA403074A25C1F822F16AA5A2CC35D8536BD258510309235656058112C7790A67ED14448B932456DEB451B07038BFA1F533892068C2C4BC18C71589299342988C6493D2131552CC80A6073592846E12483EDC414E6051BE9646199CC2842877AB9A1292B65012D396FD7ACACAC3B252CBAC8DC7602D9C08F5374AE2CA801841E6E24CF8746EE1588D7078D87589C560EB59F16B112938115830AEDFC58B812E79045C202CDC9C7D993629343C624E08B25A0805FA26970E00FF8BC88509345EE02680A07D056A91123375CFA38A86FF712C63B89281CAA23EA8D6D7277E18564DC475F3A202613BC2C1C5436FEAAAFBB645029336E5F7C03BA02A2F4203BDEE599E79440566758577C9912722325A8A6E675395930B2FDC5A844753E8418639003C891C50B2F702290A3B5353CA134005FD6319760E126C5F998A8D5B54D18A756B281B216A6EB183BEB9663D4C1B87B60249113C3C64A972B46B4552A70BD658273583CAF87CDC0C7497C2211A6420649BC2ADFB31BED63608AF24CDDD4823A020AF214AACCE069884B3C8BD8899D507351B9B5DCF7C78B1138B5401C04B609DA403074A25C1F822F16AA5A2CC35D8536BD258510309235656058112C7790A67ED14448B932456DEB451B07038BFA1F533892068C2C4BC18C71589299342988C6493D2131552CC80A6073592846E12483EDC414E6051BE9646199CC2842877AB9A1292B65012D396FD7ACACAC3B252CBAC8DC7602D9C08F5374AE2CA801841E6E24CF8746EE1588D7078D87589C560EB59F16B112938115830AED" + }, + { + "tcId": 165, + "ek": "6C193D1542B7FFFA7F975173E0CA668D92AA73B65A1D269A1F112305F832F7A22FA1A800E197C500BA804106789B9348CA7CB63852CD8B3387380BA799DA1DFF0A7707E435E2B18E061CBF3CC6A10AE0264A683DAA973724A4A0C23CA6E3F8B1E0107C5BCB531DC87182C4804291A6F8926EBF74252C7B6E377A9BB897B67EB968D67C9023F20009E76F4053BD851424C821C2897162DB631689E6060FB72AC489CC7C5C054FF23E1E6069514651F8A718A881A68B06074C80517D375537F2A03AE64ED355B6D2B7540F49333337BF41BB76F2C526E318708D3C80A5EC18E65113B9C258C39491233445EBDB6E62F56958F51798FB17D6FA07C45993C1FACD92922F95E098B011AFC0386550083A256A2C8301242435A87253A2891576929284B9858A67F50ECAEC812734961ACA1ED69BC48344302C0BC04A9085892550AAFBCA08C4151E83919C5891979375BEF4A8333412CE3206E9FA1AFA226C81776A0BE65E84A657458C3E9FC3B9737B8CCD7B3597792C7FFA4CAA0AC2BEA9447594A82B528E7238AE3326193DA0483134B87D82AA360062D781AAB01527819125FCC57557244E5754C1C1F63B5D844613091FFBC889327A67A176809E262F5944C4D43A58CD51B7D767863494457406B191074B92CCC43BC20612D39AFEA7655253B71CB72D8EA88653897EB8D973EC47A0531AA7AAC8C84CE0B2A721CC6FA74006B65AE5E47DCC4B41407BC772B35D00726127EBB85E3318F8314E3292BEF1597DE0A064C131B30FDC6B29234DB624BDAB8312676C7D30750E1017635129293B1B530433CC1D472EC38700564406697618E3B111839C80367BBDFB8387A59B5D3B596CCE74865FCABC8B19346DE88D4DC5031ED1270148507707A024038C77D659A8159693C525C1ABB8258155A6F63C5A9756F99315A11B737D46AF01CCADC4052B2A5631B5EB8A20948CD31814E5EA669597996C38381C47149910845E354990C31C882962F2D7C50D170F00FAAD8AB5AC58D01E9A859C6F1247E554B893B0AD28B300722B79C26C4AD62A92024688CDC01E78E41EB6D02449F51023871CCC07B6626634769A6E64386A4E15699201BEA2474AD4F6260439C173C0222A340222702A9AC9482B0859D2357F2CA222EBE16D3B281EE218AE95C6BAB9F0661E60AFF61C766AC1C5BB32CDD9325E416274D36901FAD5185C1A90B7B2233EC936A671854A146DF9E4356CCBB56A8343FC7C96993106E932B4A54BA3AFB620D3C947E7CC60FDA29B83BCCC29D24AA165A831782E04F65383DC91DD455D04C45820740CB7338D8A04486EF25CCD870E25E23683487AAFF774983BA30069AFF92B9BB414B20B0ABA21665A2F025FE94A7DA6D32721505D6EF5ADB7A9383C893FC97A34C0843908203342422CBA912F05005E07A1304A8B8699A5864885C0D6D164BF9B7DC40177CB10800BD76E36B74A585836316BCDE7694CE953B75B02C4F21744FCA09C39D85C82E42B0353647553BE7E40035C84053AF4C2B727262092544F51C2A80502D135B4CCC99E33892447E0A6F3A70211E09DB8F5CA4ADA2D2F0A36FE703CB1903C5399C206111101E533B7574E9820C16DB019B01A6376E720B3BAC0621608F33883BAD96D42B87E0DC2796519B52F270D85D51ED5D34A19C6A3658B237E301D22BA0FE1C6AC7677044FA2046DBAC71FBB43207326DBD35EA1CC565A7299AB8100CB20001A51A02791286C364E96690D706363E3704976A90F2B84A3ADDC0FC71BA52158930BF416A1A42853D66D9CD8542245653256183E0B26C631CD8A25203E0507000BC23F887057B1BF1567281276169D27064AE9625FF04B5B1436C7EC9090C2A128633F71A4928BB83C2241CE5494AF873781F8E65D91A35A4A174AA1A089A7C50383B1BB1A6A500BE3266B6316794B4E84425E4F791B6467633D45A42B6ACC42F193555A86BB63955D6B50520B144CB6B484484BE0F663A7FB6B85C1A09E7885FE2539B0523EB8211FAED44446691CD504B0F1F2C0C9878E937717A4890B4E2974AC8CCC9CD69304E9BD8A6026BB5B34E3270F3E225939185910B8629420BADF721B442A55A37724C5346F1947AA4477B36107485D6B12FBA02BC1300D8A9247E8631C77F57F7103AE08D44B501B29AF72545E854EAB651ED32AC753B20C8C4BB998CE85162B46C9543EE1B6FDB59124E4D8EB2C83D00ED89507BFF33883BAD96D42B87E0DC2796519B52F270D85D51ED5D34A19C6A3658B237E301D22BA0FE1C6AC7677044FA2046DBAC71FBB43207326DBD35EA1CC565A7299AB8100CB20001A51A02791286C364E96690D706363E3704976A90F2B84A3ADDC0FC71BA52158930BF416A1A42853D66D9CD8542245653256183E0B26C631CD8A25203E0507000BC23F887057B1BF1567281276169D27064AE9625FF04B5B1436C7EC9090C2A128633F71A4928BB83C2241CE5494AF873781F8E65D91A35A4A174AA1A089A7C50383B1BB1A6A500BE3266B6316794B4E84425E4F791B6467633D45A42B6ACC42F193555A86BB63955D6B50520B144CB6B484484BE0F663A7FB6B85C1A09E7885FE2539B0523EB8211FAED44446691CD504B0F1F2C0C9878E937717A4890B4E2974AC8CCC9CD69304E9BD8A6026BB5B34E3270F3E225939185910B8629420BADF721B442A55A37724C5346F1947AA4477B36107485D6B12FBA02BC1300D8A9247E8631C77F57F7103AE08D44B501B29AF72545E854EAB651ED32AC753B20C8C4BB998CE85162B46C9543EE1B6FDB59124E4D8EB2C83D00ED89507BF" + } + ] + } + ] +} +\ No newline at end of file diff --git a/security/nss/gtests/common/nist/source_vectors/ml_kem_encap_decap_result.json b/security/nss/gtests/common/nist/source_vectors/ml_kem_encap_decap_result.json @@ -0,0 +1,804 @@ +{ + "vsId": 42, + "algorithm": "ML-KEM", + "mode": "encapDecap", + "revision": "FIPS203", + "isSample": true, + "testGroups": [ + { + "tgId": 1, + "tests": [ + { + "tcId": 1, + "c": "3244E86669E69F0F238E3CD7F03EF31C4D3CF48CEF726955F06EB5099367310D5D9FC70D48A573458837319BD1691D1A699A68F7A9A8DB73D03620E9E4BC4B088E5E9C5E3638EB3354F6EF3C5E7AE5D57D0571F078E174CFBD6EAE2FD76DC2BED5A907EBA531E89B1BA8D2A8EBE7B4CA0DE96BFF28D278A70549AA0635BE50096F297F7BEF92C6AE9C11C4204CFF07E0598F14495AEFBD207B760DAD34FC0AD8F4000A1911F89FA3B59410C8151B9A8914AA71269EB7E2C329586D3C08F3F10939A497717CCFA3EC5082D46750905CEB703106C2D3E5CD71F138704A20898B5F80F5FDA03C08F8894C2874DE32DFF5C27EA0437A44663C0D6F6B85332AD0F5A0E48D1638BBD281797AF1ADED5C5F1EB87D4723E17BCA439EC469489A371A402EEEAADF1A1BD7C7DA409E9A6414E744167DF13AA1ED9EBDB354BC0DD04190DBA3EC48E5D1DB61C54FE881F8A1DA32EB512F2423EA7F9015DC8C2C3D5B5FEA438A88E6C877A6F4ED17FAB8918E53887996D23956502ED9D3D07BBE8EC899AF55813D39CCF6C2700AC8805517317338655A221268E654839C49D83344A1DE0E75FDD63549B7D57258601C1C74B0FDEF80CAB109C54393A7669E4BDB5CDD3BC21731C1E467784DC6A165194487A94FDAA9C177A0BD4AB009B7D7BBD9EEBDA386492F7903CA7C4345A41271D8B6816B1AC0841B8DB7E2D518B3A2B70386CB5BA159A11FC50420F94C001E1F8F0268A2E0A4A12485C08D0BB696CAC92C8866DE78F18BA7C0E5C4C2F450EAB9E2B126DBA80EF70FFB611A010EC3AA9FBCFB2058C2491B331E63AE27321C0098B49C9F7BD409C70DA376A338317217AF310788772E2A95D1BCC29355B486E3B1FA11753C7D39802D183AAE86C3CAD2EB4E70B3C679E47F01D7FDA48B629E5B8AF315847D20BE7A64EA4A16AB9B237F00A9DC659E01735290902F243E866129F120CF3EC01CD668A9827AB419B7F9994A305782C6CB82801C4DA0B9032034B890A761182E4108EF016AE48AE32ED05544EFC7AADC9D219B4E2F7E892EE58130B7413AD2CD6B5E04CEB2593E06165E37BC8BE981EEE1C638", + "k": "6C832560DFE97BECADFBB340EE31AE868A73120806EED02839518E5627D32968" + }, + { + "tcId": 2, + "c": "C3D565942112A5B216850124DF528E6792119D688EC12BB9438F83AAF57DD05B1AD9DBDDF482949BB880E4F76FE77AAEB0946B4A5F5A2BBCC8E5C055360B765049D57411E2D3DC201611BEB7B665B7F92453245A668147D1308DE2991F57581E207FA8860890FE3CDB97E35482C38C2761C1CFBF1075F2DA1EEF3B93EBB98B448780183D61E1A70E6EC407669B3734907C5212C6915A368535F6D0DD5C31B0C0800E3374B69B53D2E497BCA88EA5E8A4266A31DDA6D263F7888A85E5E648E79862F0C5B4CDBBD4DAD72D758532553569E16EA6C73FC2F82B65D074F710663E5D17A5FAD1B05152F05E9005714CB395918E59B275BD90B6B9AE588C7984B481E459CDBFBC0E00F0422C7C8EECC783EA6CA1BEAF970E6BBCD54061210FF24FE504D9756C79BF746531EC958244623F89ED87AB48B6CCF28BA18E43298B7E5C3F3EC2E3B669F427762375DA779D206CC889337429DF1A1AD02E0268B8F9F479A573067C9493C1A65CDFA7E7DD2FFA7001423D39C0AFF53910C404E2334420493395EF2C8C2E1F01D2D2F82F7DB8D2FCD30ACD1679D943A9E705AC35F9D10BA9464D6EC52FF86610DE36C79B639B5634776F68203A1D6FC8FD892BDE9F59978C35446C0D4A684108ECCFFC631FD09031932C7435C5EA2E89A25FC08F0196980F2B940CD4D4429AE195ACF14AD8042C09D39A3EE7DC1D1344A8BF5A530BF7C7270482E408FE33E6584C826D2495A5379948F4E90CEACA48757572B086A02AE005EB238C28EFA1D3E9343866C2B5865565FED01CC54D1B1C16148435B0B39F73676FBA06D0FD57B287CA05C7FD0F97B69E62B1A8B2457EBBC8CC4CAAC82EE1A7FDC30649DEDC7129146C6E44E1EF1CCE2BE004E13A276F3E06E8D2801D3EC2616C81CEC6439C9A3827337E20705BAF6F30941673CC8E773188333A76C1C2B04F2D259BB61AEC2B72F846F1C7B2D50582D641F49E61AB4F0828DC732676C3208123F990B9384364A9607905FF155E0107B51624ABACF1DCF48EB93A39E117D9B802EAFD59732D6D7E94E9C7F33AB68908DC87ACAF80EF4BEEA4CCB535C3559519A7E81C", + "k": "F833AEC5841D7F3CA0B188221245745D66B374ED8C3C04AE3522ADE7F973F8D5" + }, + { + "tcId": 3, + "c": "573CED7759FA816716C2B6E4A3E0089F25CD5A8F3972932C5EC8C501BB948D7A2A126192DBBE683C64A0D8605F36100A7B4B30D54ECBA0C849FF10AE4304CC41337045E60A003AE14280235CBB0866FD0F60F7B832142A9FD2B11A884B53B144E2E4F9C8F5F95A8C19DE0E6A5413FE1CE157FCC638C02A1ACDBFF56301FBCA71F3C8EED4203E649B7764C69B9E4FBA2782F00C7DFF8E0E09E9443F3C9C48E13B4010619C570895D3870C91E87CC74792CCEC7A9463E231D01ABCC1D63A5092F59129A1393D44D811C6CCCD9084565EF031E4B30DC56F849F8F3641AB824F1A598BD7963070B334A0E1A81DE64008577E28348D3E452EA14815D52EAC8ADE4E1F1C2FA5F3B95EBCDCDAC0EFF04BE97843B130443870EEF5B4F5A11F6FC048FA7507862B4C872B133484CA639D34A27BD0C2CF9DCC63D760E27EB50B7890EDB74F8BDCB64B4AC252BFE5B4F74106823134DBB7CEF4CF29D8812B15BC82035804D7ABD0B5D88870B59337EA720035123FB5D3471C96FC8D7B386095D828D4C71D1588080242657BDF6789A7CDC227FFDF5462B59D76D8CC29B5FAFE9099638532E1FE5D3C73E1A6C0A37DD36E00CC2DAAE2EAED9EA6D3D39A7AC6522F66C27207887A447199C98A6B80E9822F0CF23F29BBC402C5C3533A0DC3DCD181613FE1367F734D25C5EEF731D069302584CFFF7DBA2F7023A216E0946EFA4ACC3969E99B022B3C56FCE869C746E0D9F4CC528306056EEB7E32CDF523C63CAA84B6E543F49791ED6A0867A7D6C62C64AE560EEFA3BE94CA3FA7F6118C6D35958E29CBD44E0AD682DFFA302EC398B1ED9D72DB649B1518A50116C70314CE4590B8004205EAB8B6AC68AF5CD932C24CFD02BF9414C3B3727E4FB138E984D0BB1E7E4CBAE823294E7DEFFA4D8CC075D2A8F9A891A31FA3D8665D029872DF083DF75D7E47BA24FB3EF7CEFD4A6B09E496661903E784C450BCAE25C15DC1BC91F75146839E884F564F5233BB5CCA8C2F723037B68F596A9DC509D40A33AB192207D53CDF22F592D7F516524A2FD474AA9D14855C4FAE1E028DEAF78237BDC8420B91035D60273385", + "k": "4161D690B5985FF27B6C385CD3810477523EC7BF1943B743224DB59F0277EF6E" + }, + { + "tcId": 4, + "c": "D2EA52F54453BCBF2DE9BC50A06B67FEE98090961FC5BCBFE683C371B5B8902DB0F4A64B309C87609562D42E04DDEF4196F0339ECB2AE2224D70FAD4134F696B538DC3FAC029C7E7F7423A0B72D65B66B1C350AE0E0F5263944E5B117B62A0AD9F55C301EA46EAD5B0F568548F4C67DB306C2DD9D7D390E60DEDABF330FF230793F18B1E8C1AB3F54B299E75F6ABB6119A38685F4C31B34559731419D978C85A8B40182C53BD0D9C26830F0EF765BD80DDD30BA2DE9CB26A7E41B94EDB69F40442371B54D35D891852B723BE176F43FE8B59E5D8EA7D7C7ED0638414D5CCE5F990D746F45331E1D80C2EF2E58086AD3D855ED717AA53C37DB52C253C124A1DC9D04AD9F126B4AF2FDED47926019B49E96842D41E77121BF977DC8728D3638FCE43BAEA29D485CD0CB6062F4EA8547E760781538523745E4477F22E4D346F07D26A5E445C55451F8440370FE2362741CBA3818B779AA5415CE934EA3D96C3A139CB76355DC84299D6795BB36402A7B964A5310B1B80A35D01CD14B7B5BC885A217D66FA94D829C724BD8939337F3FCFD899045F4C4A2AA4E3A2BED4B76436F7492C633B48F2440315B5AAD00C338D6E854B46C01D87741ADC07FF0C2E72F95FD8484CAB327F504F3FD7292070C0EBC0C4099129CBE2239B66AD4CF6A5CBD8689CD1F6C8A486BF2FDE9AC1A97FEEA82A27DF9ED44E8CBD2E727E845FDD0DFA48EE6CCD62BCB1603E48E5EC3756566EDBD1023AAF453C63053D647D77D984CC6D37FEB793B3C0602D2BD2A4ACAF67CEA9618C62ED0D70934CA63C830230D41D0D68A8FFBCB3D50330F9B0871846066F3E53846EB023E115485B3B5EB9F354191C9C310FB77D28E23FAF43EEE86DF8EECAEC1CC6DBF6E7C62DA537D2FAB0E43B21DDCF57829151FAA7F5D2004D40750DF420A96CE55DB30200FE63655777F0F6B6011B58FDD232A6B31195D367699CBFA3AA40FFEB742A8816FC83DC21379DBC001432634DD7D40F6356F2093F184E610AA6E64500D976B1FE1EF1F49DEA5B50063ADA2814840D101D3933E23AD6CD8E8910191CA4242AA91D5EB06046C7A671B19C", + "k": "7528672FF512CE81FF014D5C96834AF516FE383FA424D4F7F143310808CC7E91" + }, + { + "tcId": 5, + "c": "477E424A3CE112EDB9A33537CF7C4321F6A078824B677C9C91C6E6F1AE0C0955B28A9FBBDEB0025BB2DB01E0701723B60742649C52F12BDA849445DFCFA45F950672B9B09FE77007A81D5AA60F0C117F7F4EF3D8CA34AF38AF4737275871F27AE6EF710637FAC7891B33D8E4E907D35FF79B03DC554724D5D1C4BADC5681AC9B5CD27BB0FA97D375A6EF0D0367A2BA0E8CC1F2D7E3BD15E7AE87C5C3CC3EB639732EE2ECB3C326904B2137B7F087ED97E63FDD83AB9786CDD7F265142D0B6B9882A0E3DED0E6745001D819F592A518BA49B9DE3D0121497449DD2A8BD2D7E375F07157B001F5BA274519FF299E0392DE31146B342578AC0C46141F9C797C127E23DBDC3578F3D46FBB18C030B0708E1E6BC2B96010F63CFEE345A2C2BE7629F10197ACBD38B58FFDD25F5CE88DE8CDA66439A12AF9E2A09297CC765CE648CE6865C87C6ECFF2BB23C3200D14DD2C4B1CD1B9176AC6EF4A109FE88C4516F2A77458BA54DB84FE754F3567B3BF0E2A4E0177035733F669391FEFDE112C74234ED83CBA53B01651A74C776BC227D4DE7E9CC7C9093793D068009F452095540D41ACC86A1DF3A8A9A1CF1001753195FE486D2DED4D6C709DC18315AB8C266085306FB3D643D7F43CE8F07A8C8EF7C4A5F710C330969393B4B3E709C46D9B137136E62FC01ABE78BFDEC678B427AB78EF37E72B2933145359593BBC2DB6E6597AE8FC8F1F960DF1C9375B619917F5090268B02F261D67B477C93DFF07025BA089E1A560F05CF5C4B1BC3DD8D80596119517A8862E3B419E97123A97FF1461444B56D1AC5D2C48C812BA5AD638322625188E4413A3DC0C45D03AF5FDACFF1562BEAB6442E8428483AC4B6AF5A733459A93087A3E4A382531DDB4F0FBB2A968D547151DC5EE603A20C91B099FE68A5C89D917F7ABFB5D89E320433DE3815AA4B524D7E74489F719138FF3D5CCD6F1B9C3B762191BA62EAB8194C5B52581287F65CCA0645DCB604636C337F0F027BECB5775EB8D76A151A55302EB113816F553915CFC6B4DD440D60C3CB518A3E8AC8BB0A21726F040C89885EFD0B8310D59944FB293EA", + "k": "EA6E0700A2117139ECCB28E218AE4EE4BA928972A937D27A5FD2A1A3FB993AD7" + }, + { + "tcId": 6, + "c": "B3F1DCB08755A5F002A8174C6880A0164C0C9E78E0B9113CAEF890B44EA971113AED4022D2B616727EAD4805E26127A5784FD71A40F02D891BAF16064CB6A12D624DE8E04E031F36563FC7708FF4EE2CA43E469C8717CAA38B4BF9AD548AF24BFEE230B43AF8E1FDAA03C8F3CCA2A42E51E7314FBEDF5E40692640D101C0999808BD61DD0224E1900F5BED38B2F2A3787FEAF8402C7465FCD4A9690835261A6669BDF49C112FBCCB957162FC4673D62986420756E7BE391954BB2E1E1E478C0BB2A34B49CDED019B891F9B20318C0C1EBE45E300CB2774089D662BBD042654E0344FD4B271E6ED141BCB6FF396D1A4EFC12ABBF89E40E186E65DCB21FC2073B389205D71BD4C686627888FB2FAA3ACED5E145AE72EBF5DAA2443E1DCB1642AB1F4E4C798E70B71C415018A79A1A6F42689B875A0A7309C4AA37F47C23A613BA90AA0145F938F67CAD6E4636190D006696D76AA4CE5DAF9C8CA92450EFD3CD3A2954BCC1B32A8AFE99DABA5974DB601A4CE1F346C0D11F2768CD57D740B8E206A51062DD22170930BA10CC5A91F13DC54A53F4067524604EFE121C27834E70E97D655F2BE50FB581CDBAF6B79A16AAB518BF3C4B62920D968F6D1003D76273B6C3831308925359EC477782A9B886005B79F5A314AB5A81EF5589603ED313ED1997AAC1E8C0CA087FF9AF27C55E6ED7A11608FECCFAB3F89AF706020375F406F3B32C5C7243195CE02348ABEA9D0D6F5AEBCECE7DC8B9744E55FF14A8DDBCE051E516BC743E26C81724BFF6804EE54A235754434C823E07C92D36C74AA36E0B6F2B7DCCD665E99242C93B2D5B1009E87CE93043C2C4AA09AE9E18CD76CAF0E252157430A998BDC0D9777A70C7620EC45F1CB5E04FDB434010944FEA1A7E5C1B682B5E86DA5C1A74BE46D39BE96E3CD9233751A6287BC1FE0B0CB20FB3FA95F9FAD4C7E82F8E1387DCEAAAE951FE034F169E3C13FED5CF00C0CB810CE020D858BBE621230F5D43A800F38770601604F592D71A1571627552F1BA05E2E16322D73D1DDE00FA1E859DE5F294D18F05A9F674029A645F27475450A4C36FC16C1CD5E02", + "k": "BAD839D9E0E501C991ECBFA115D18280F3745B58AF999E5C47300FF88C36540F" + }, + { + "tcId": 7, + "c": "DEFF96EAB65CE74DACCB4628085E624541484022FD1FC4E4A5BD558DC4B792F5B3A812D3FE2CAB87288C068A7599D87D3A8A3901CEC4ECCA02AE325D1B15835B13EBB65C82B74D04F0C0FDC9E5F21C10041CBE075BB681743A4CA3D324CEBC0C2332ED13C5A82F7EABD2A43FE4B1568B5B8DB7709EC5AF152F99726EFEAC1D79A2DBD7FF934CFD8D0E90CAAA212DFA19E4F9FC549C9319285F36E300F315FE5E259D0E7C370D14ED927ACEFC7EA10E2AC7D23DA150B70762221772EDBDB2D3AD7DEEA04B398E9C6449AECE31DDC4508A3E6F9E73F0B7EFD528D094A138E101F806254566D6AB074CC04032331414814F3BEAAF510354A371FE3B590D49E3C9504F210E8ABBADDC192CB084BCD6A786A6DDAB11D500BBD56F15245A3C9A843169B1D361EFCE5CCC470AFCD2FDC6C0B7FE90ACC054B2A337AA8ED0FE83C97C4E09C16E5CEBEFFECFA89BEB4F18F10D217B47B2A547C2CF4629EAE876EC92DC8005F376DF63E31897A1217E7CC44FA1607CAD4AA9C4F813731AA9BA5E9043489A6E548555D4E7C1CA11C13850337C0C8BC6B51780BE72C2635E6435D63F9BBEFE46D141D662D07194EE988A3F9EEC7F6F8C61BFD06B6C1D4E72D7BC567A48A83011AE7CF88D53124AA9B770B72362C069DEDA8B1DF16EA668EA81E7082649290C23BE51B60383DAF887A343C23A8F5935CAE89ECF0FA46BA85AF32070CDDEB1864992CC2860BB4CA72F0043763A7B86F6B6AC6314CF0E57CAA1F594DC8B219F635399983DC6A39B6E40584E4DAC4FC8B04F929EE287232CF6629C7D900CD18577CF3D3834CABBEE749F7F6CB4B545782F72780D4D4C2DCC66329674E96CA5597104204B1961BE2B35ADEAD5AFFFE0D016B7FBC2E204629CE5E96FC35C596C192947A548B514011C23A3789F8931603F6E968EBAAB8A82A2EDA2FF1162CD67D59798C658B11BECB91C9B2EBFB54AF0C744F12400B9C0567AA692A15869B228DB6482E59349F0938F2C8212BB9667D7B97FEF61E4AA9FD371BDA6399FEE74898B695E2BAC7C04D7AE47894EC6C17CD758D1CB8FB97D4C0C35D13FD27F1A70CB069166", + "k": "25D2E766DF05F4223E0AE1C2F17082C8BCA64F64E12A8C2B3D9494FFF4146DCB" + }, + { + "tcId": 8, + "c": "F726E6B5D9790D2E791C70866DA06354F454287944DFFF4214E8493F8107396E03EDDBE19E8A7A911C3A40A78B12D807CB26572868A503CE325D8253AE4D0C9DC94185A655DA82966AE4237B9C7A5DAC09F54BA9ECD4FD2C31862733452C27DF764684C8A8FD2367E408B5C424762E1B8F6FF2DFB4EDAABDDAAB94BD95A80AC2D938125023D5433604AC859959CA20BE01D27FAEAC7025D400A7C602107EA9EB2EC5653ACE1D5C667E56AF249245C2396A8858EEFA30B66BCF159C2947F2D92BDBB3DE7903972413ED168D836453FF0223F19E7D733693D8CF04002AF2C6B4763E46EB8DBDCD2EE4A1D13CED4B53A423511919A670AC5AA75E11C17DFC70F3C8FA0B1B8A7EA90F364DFA4765C6CE21B399B560839D917BEF2DE3BEE4B03578D968DE3A0F0B1A62496DA3FB7E00F0B9F104FE9F77776616A7386A35D81A33D998EA3D33EBD1CA02E86FB33F9B2C3F5A00C9177BBFB9253722B88ED8386789135319AF1791DC0FAD883BEF9A2300EBF688E5490AB4431707EA53686B5BEA4BF32C9AA30D9C98C2EC724A53BD7410B6C9CDA2ABD9470F1F9B951311379D5FAF5EA0CA5941A42D26AEC6E4198D9D05DB6D92A6DFA15D0B2D9D4C4A166487F285063B6131FACEBD73590447CF950147F7A04141F3664369939E7BD29519F7C80C20F1154246260237778774B12B479F90E9F697C8CE2BF12EC133D1E88B7D8A6FDF0539673BFBB3009D12469DF301070498650B3A09348F81D8DCF652184B48BE768A30341055FBEDE2F5AF6822AA7AF9AC4F029A04CE1719CE580A4522041BFA913EA43F9D71F50D06C0F6B07F3E131DAC19FA3565017A641A81955080EDA5B3E7C958F8D3577BBB59E342D52C9F0CA7B8FB663EA92C41EFA1E4417E568130E5065ABBC5E0FD9AFD078F2EF1C6C4ADACA7D9F51045B411CA0B41DBD00AC78C394E377D75D9DC3C74533AF9E0DB0C6A29FEC6D6DE58531FB47C55C4B9BB1F4C49BA3BBAA94472099DAB948252B50815BD3B13F4F08A4E94E7AC21790ABB4D71B32F86C55D7836C46041289715D31976BF1F48978D6AE019348C6FDC02A60FAD21538A", + "k": "E353F509825088749CBA47D1FF5AB115E935E18E633CD748C6E0800359D9D165" + }, + { + "tcId": 9, + "c": "75CAFFC585065BE3BF224BD90B66BE3AB7F3852589C12E2793A40D0745FA320310CCC9C1599CCDC0AB2B95D20B0852709A14871E9015B649418F424F0E829C603F0B33110A108D6BB8F191F151CC2D02ED9358A65CECE8BBA43678E924C8ED0CB23D851788C503B14E0811A10210A2E7AF634D84567CD149830866AAF288756FC286D759CEF061B2C0FE2E074BDD2010AB33820EE2FA6615BA4CEE7B57EBDCE87E78F744936BD768370B2843B6692F5925FB1C0E31DD24D06E992E6907941453D711B26EDC93308E2CCDE77B2D8B96243123073FE6676EF951AE91A24682376F28355757317B2EA3A1627C00AF0E30E5C63364D64DEA31E50D774386A32EEE54BE08D9287CBD1037620F622D7BE6A5A8A575147F5207266B9816C41BF2DA876773964DC6D4A2EC332F362F65D869EA7E393ED17DAFECCEA277254FF9CE83DABF40F1ACA20144707D6DF4C28CDE0E9D0F728BBE49512F1D8B7EEC4E3A014A6E759F45B7CA195CD477AD3023AE1695EF6D5336307D6E0A7C2E69CD60E11ADC262C5B7FC221888492C7F08101CA85BF1380721D0BB4E3E870BC6ECACCFE8B4986D04120841364D587CE3FE98C63252CB35A66C0016A0223D274FFE275177AEECF396C56EE66BE1FD809B572282F84A257888541F38F7D84F9E5D1E3B8305F520D1E684DE4DA07A13D7A83419CC73C2397106EE2C07BA2A27E97C2D8289BEF33A11BA00796F6ECB35815E0D980954BECE702C22F35DF844D3253246A4ADA7E88116D5C15F109D1C064020A3761B269C73D9E90FDDBC8B8FD476122FEC093DDF3E06A383878FEEA2464259A50E532FF3470E5556EBF607D75E8CA030EBD7C56AFA3EDEE5E1CDE364D19AEBEAD48DC4F6870DC1FC95743C65A3B35A56C4AA5D18C405B83A4448BECB20A4D6F56385DAA997EF57CF63AAA6B201FD60415EABD5C1C4C122F1AB75E436BA909DB3E13BE58079D7622108CB521A73D7C183545A76C0CF922F2563A0534CBE0CD70A5431E95AE59C609AF8B1DB516A73D6E0389A9F6DE15793AD472D0862D9828ED1F94128B92DCB9E2091A5ADA6D521501E4BEA8CF9CAF92", + "k": "43275703A04AC02B42C3E7C6299CA901506E51FA53674946BDEA1AE837C31145" + }, + { + "tcId": 10, + "c": "B7A80C2E83ECC49F156D379D8C629F083C450391A1621F79FBC4919090E690C1A9674B099C5FF6F91284AD88318C09E62437BD152AD73511454471A3A19CB598A907022AB48B726129402B5E3FBCA6FE9392454C618B6FBD5844C39B73B5F2D5EAC3B179AD0FCDDBC27CED1C97C80B442CDEC19864F5872AF4C944356088CAF96879F1EEAA355C700120BDFE5D45EEC4323D7442E8C33659D100FCBBFD6893D82C64D40905D36D0D7E61DFCA60370B1EB22A16963E72829D26D4EE8C9DAC3BDF8C17105C2C21DE7732563D9B8F7019FEDC54F6C619B2F97DC4E7460DA3D0ECEB92F15073372741F81ED955B9282AE62CD178EA7ABBBB6BCE2925FA249C2E102951AFCE4EA493CC778F8B866A7388062EE142453FDC2B7C0286E33F4F2F80B97B1EA1036C03B4122792547D519F3DF3BDD2A5EF1EB3CB13907A6E023D0D87C621161648EE823F6D784E0339A47B381E4A2760055419A79FC5F852407226950A55E65C6A7667D24AF75B91F853CFB943D2DCDD5AC14A91B362053E6F6E8D2A822D3E404B46A3BD6CD5077ADB2B23E6712566E14757D8F3245D34BA2BC1AA28B411D5F78771AFB2376CD6B4F9E887972ED4D7EA77CEBF8A57B5F879EE4FEDC467D47DCC1858AC99EA44995B887F85034EFA77179F0EF4D9F084A6FA746B0BBBA1F6A54AD0B4A9093D9CC89CD7A63D03A5F3CDFACEA334B70F046AD1FE70FEDB9A84399403C8A31CE21069D071E0C0DD88317EC83D1DA37021273B2168642330C9C6467A74C74668A9D0E3B13365D1E268457D065402C9360887273C2D2F837C4D6D32E19ACF5FA86E0C59B4D56BB84CB2931BE6F3E3B98FE22184D049BAB0474AE6CF539E35D5B2E41D221C585B519992FC557BEE9AC097621E6F894A95D07E822D8B6E24F8B6DE4BF0F09D2203DC84AC6BA0B5DDCC7BDF9F33D5C1445E73DC0E1D94ED07F37D08D1BE8E67615CB3598512D2292ACBEC18E33E07F39AE7274C3E33870A333A2ADF709B3307C345DCE71B3EE67234FF9611B11AF6F8DBBEC007B5EE9C3D20368148C05D1866D85C22F61BE3962DCB9B5A4280F4C18E667935C90501", + "k": "EEA002F75F5795B267DAFAC59C1C5DEAB18F20616151C0C7329A4E77FB7F6EB9" + }, + { + "tcId": 11, + "c": "2BC758F0D65F5BC1DD359472B4E1DBA0E399CC2629C14F9B8A7FEB7D72D563A5109D08127126808F5C783C8CE751107480041F9592EACC66E6F88BBF375356D1E3618C13CE943F6103F826734BB22E74E81540F56B318FABD7A81E3497A5F88482F3543452911A3F1C8BBE799D8BD1398540956C3AB068F2C3224633988BFA0AC2D147171FF6C2F286F5D27967E5FD7D3A54B28E6742AA46E53AB4A03D1CA49D126B717869F4D16D557BDDBE10E880C6E31E22EDC38312806BAE21E810BB362E0E60B21CB49AE3D517D022EFB8D08C2CF127C5768C017DD08558C4DE40D32739A179816FF8ACB2904B058DCDAC49AE09D99028839F9B7FD635654145018C75CF584A86A8B8FD98B00B9129F2EC3B55A589C6FE04E5A32FFCB306F506EBB22E945DD3A7F026CA21415D6893EE33BC5FD6ACB22525D1BC554A7EEBD0CCFC2C921224993569B048FA238C260D5BBE748AF06F796DFCBC153743292D738715C602B084DAD81834B160683AB1421BF906D4B56D782672D599B87A3C6DB3E61D1D5DC09744936D2643DC485024B83FAED1D7EBAFC95131A70E3A51CB14296B27624AE9AE4ED8FF00E68BEF3989EA7CBCB1DA4CCAF884E403D0134D33A8F167977A1BA3A47B9C3FEB1096ACAAC73B7B60487092C98CB4E00C0FB7875985B1918DFDAAE2E9CBD6C68E32904AD0AB3BC697D1A815C6327D99E12173739579FFC5D3D25B2591D2CA109CB9B4131E40338E3D58F2C87EEF28FDCA5815015E71A0457891AB3672A5842A2ADFC267B350FFC399B7F86F73C963D0DF78F2CA48651DC88C5FBB1C154D21C527CFAA79B8F84BAB4CA6D10D61478FE8FC9BB579808BD945547A8375C1E9B24B4294BF07656FCEB3B5F9B9079DE9A9F3C40AF1E72A8760323592660A8E94B277E078E8BBB2F796DF534EEF38E0068A1033D2397998B99F19DFD1BD9382A02049CDB0B04C7B47AFF101598320300A9049F57D720CEDF0BFE2536BCA50D17EE85C0461F9D489E4CAD9A15128C609F52E9A288583FA80D0CB4B1616EBBF03554B24ABC9493F86108C8350C8B2810C45F88A65783ACF1BCC339B06125C05", + "k": "F70CB82BD95A7B296BD2F5CD515F6A043A1B85A204676C5E27DA70036A75DB80" + }, + { + "tcId": 12, + "c": "D43644DA0998B5F33873E5F8C42D25EBEB1CAA902C5F8B12132775672B381FE5F36B3F2495723CE2AF88B31CEC7F8E43B02FD931E6418FA7EB0E202344085CE7E1DDD7F1B38BF07DC0EF0F98FD7B48BAED11F40ACDAA2D1C6EE1E5EA2959260FE82518F0BE69AFE7B4A1AF9FDE91C2FC6F3E0DC9F9B5C8C556790C5A4A08D9E47997DC11C388E6479570FCD0556A97256CA0CC76BEEC779F8A9BC8A21C1F806DA506B91656A811A5E6EF1AEE1493425CC4C008C77391627F7BFA5436921C09C2678FBB36C4987CB74BBAA0515B7E006404032F5BC06C0A0496F55FA73284FD1A60D00FF03131EF8EB1AE966220C3D30568691AC42EA7AE29AA3D303F8FB6E192144CD0B389039BC71DB599FE663D8BEBAB74B3CEE15A2C433A220C0C230CF3D3D2B6A7B97107FA86285847D5B12D8D9A2201F03C227E0A961CA1A8B0CFCE233C7EFEEC8EE943F8DCAD5A3F0BB0CFA01C6BAAB81B1A01748E1EAC79667BA98B8349DF1028C131128D2409F75668D42A9A05562BE9EF44E3D5F5906241CA4DF258C68A43345FE9C11C1DD619578ACA7FBE56B0DE1EC52086492A6E360A7FCD672EA2E8DE31074F10D7A27D9BF229414861491F849084F166FC7FE850654411E0D069AC79A1EFA039656E0219F3A34634CF653628A871079DFF08C7646DE999995B1AF0CBB20FA5C246292E9AD2A029A9531553DED7CACF4F5B4FA07DEADC79E961B7F6DFCB05B58EF50D7942CC4D8AA784827530B062D0B935AFA89C0AA58242709A70BDAD3CFA14C3BE412B5AF2416A6227CA95EB07900CE166729DFFA6E3A0E5AEE5D50E5F383673FC2E18112C7B837BB72CFC725250DB2CCF4B11A9FD4AB24D2CE126D87447EFCC53FDF402F476DC7D5745840D4D053466E9780B9C2254BA0050B6A32EF2AB961519AD211B8B85B188C46D1A0955A4C04D0FF034E1903811BBC50EC34B197C88C75BD6EE3173FDDBBE5FAEBEE18B4520230C5730A462DB91335857C731F3AD06792B91C391F0D7EF5FFA446DFDB274F15F1544FA9E4EC5AC70E37D834759CFE973293F80E4A01BE42F449C3CA936DC90A178C35897F16B13D0", + "k": "014217C2DDE223233952B424F0496109D45899DA85158C6529296DECE14CFCA3" + }, + { + "tcId": 13, + "c": "FFF25EB81D62354CF271288EF6CAD32FD114BD7ABB500DBF16BAAFA465021103C8983BFB49CCB2CE7B86D467DEDF6EC9C370EC866EE5BAE356E53B2195603B65D06DF01564BF183B4830E40FFC6CC058BECA9A82DC121B614B366CA5987B52AF230ACB6DC58ED71F63E1D71CD0CF0A60C608174E3ACAC113C819E8AD199E65680BD5056F29851A889A5FB1D3950FFD80721742DF9AB278F8A148EAD5878D7D642168F99F2E62E05B39DE25A45BA159A98D2DBE69032C4B41D4958DEC6C1A757408CEB27981DEC6646E28AF9FE99698A944906409663DFF53DFFFB8FE4109757082A23884DAD63322317AF1B30C5D52FC41A9B2587E193EA579C0B9219794B48C62A6459DB0C0ED9EF71D718FE2A0F9E45D63D8E3D9604DC06324664C869FFF8D23A032A69749B3E30A9FB3F776919846D411BED513B4A58C9E3F8D72B77454857800F7BC185A97722D83C5EBE994D70F8A1E606ADF02DE7677096732D11D2A08B4D8C42EF8E4ABC942D2A5F0BE2238660C0969645BC11888E8F8C9ACC53EDB7C35A1EAD30C43F39E76F69225EAF1ED0E4B9B1392450D352790C882ABD775B8AD0C4B237AFD47E6C5034D0AA9ADF91173AE1AB76C7E8815E1C0FA6724411907EB4D04BB849E3038EE919C2B87A0EB678D93B164550E80A68F0C51AEFD15D3F98AC9780CA8A63DB5776BCCA6E854B506877358F93B0C386F12A6905EABC1E51442F4725664ABF03156B8B99BFCE001C9DC0F8BCAAC4354C168DF9291892A15BD758ED916D580FA3018D42A984F6B4ED8B837F00E3C87B4EF0ACBEF0A24309116A7154F326676DB5A96C7D005607F5BA928FBEBD25E1C4DBEA7AA15663DE9576CDD192DC8BD6048092E2F320DAF3F26E8D39AEAD3BB90006A08823CDE81FCC2D93344199664BEB8513EB096314AA85ABA9DE02D5DBAF5E628A50AE34D4910BF39A2B8EF431CB7FEAAB691E4CD5C2F42D58A795CF21DA78A029C0252527C586C47D5E46E3083A6DC354B83FF76C527106FAFD6B663610469680DE64D306E22F53A0C2C73B7295FF8C3D7F7123A88083F6FB1B2566D4E4759195A6BD3F2EB5D0EBAA9", + "k": "B1CCE555666B7105EC8C9DFD884C27DE64C8830A7D8993088F0A8B0F2870E6BD" + }, + { + "tcId": 14, + "c": "2DA24636F032C7D6CE422E7B54E84877D5F0A3EAF71293D12C2A243FA04E339217C8E52662C883EAB670B5183F590F3DC690525BE1BC4654117B5941A74161211AEE58879B75E9CEECDAFA28EC56978D8564C55E0B09F1EAC015760F4F6DE341D2528B18FA8E362CC91CC49E3AD834DA5D379A43D1001E57BE1B1688220697BAAFE36D1CC6FDF564B619CB2DDFB799155BD55B91252145CFCB00EB40B704216D61F95F72A9B8459202F196007F9CAB9245E4712F29034CBACF7449B2BB676192B4552053FA8A667BBE2F367A5AB75B4C9F503C32E9886C093D87DF2D5925EA856D26AE6EB72B00E0D1B37FF1192F7431A6CDF25D5BF59C16A22039B2082226C49DC69F3BE99BBD06F685540F8759122A176E7113BCCC67A63163FE4FE5760A2DF0F108518802286C35C2A4A4318F0B6050E4A862022FAD2DA60A75807E60087423D87A2322AF84E3655CC2D35FA76680F61B805C5F45B97034C132D56F227B3129E5E0FDCE40E107D0471E9FF49A37B0241449A5B9609C00AC5F82FCF923345F6A31FDEC695D9E975AA5DD17619245FBC7A1095DA672A940FB9A6241DC7034725AAFEBADB9EF92FA7D1ED214D896F1D8DC9FF5D821C62DDD01E0B43C5203BE8E96C7BBAECEAA18786B805CA13F0D5B627D1358C76805286D664C0BA43D75AB2E64648C6D49C134844A32ABDC3B2755D557CFE2BF5BEE2D78F1F8D45557C61925672C1097E237136D72C8004861439625ACE7AAB2B250A1BB7AACA7FCEC2D870DAF997FD25F56F79057998208D629F6B1858DD40AE06314C073213017855A4E41E16D319390A22CF606997E4B97C3E06DC9F1992B8F8C92012A46474611400218D714379EB15E8AA016ED116BF7EA6A1BA91895C2F182D96DD75973EF7036F9F31F0FA6C02088EBA8DE94EF7FC09EBBBAE7A47D54E41C9D38C5CD36979D7187408BFDD5795FF63DF0D78BC6CA7D569A8F983F61404EB58D0FACF3D1F8F29737A424447E619F983018E42B46FB4E5953819CEB4B69B3ED8760F672E231AEE61F78A076C7D0C571D9663AE7B1BCF7033E618C8742A697C6E61131DA39E02FC1EDCD", + "k": "B1539EA81D927E5E556B4185A93E9A926F7C64A008A6CE410DDE60ED417C0DC1" + }, + { + "tcId": 15, + "c": "492D5D69D1B3FA5697A92EADBEB06563CBAEFC060B0BF89DE9C48B93FFEF11E26EA5C1BBCF129479B4D04DE69725DF61C04E1AF09ABD17AEA480D20F03ABFF3CB438BD4D5C5B594D0141F77780834ECE50202EEA794690A77CDD232BFDBA8F7CBB1CD3CB617EF5F7C133B52BF9B4A3A52A93D7E3D50201A14032B2368E3B9941A762E7ECBC766ADD7BD88108FB0EF7DE1858FFEBDE67552CF99EDDD564879DFC3A6FDE26EEE625522BA90FA7D66709D1877F10EC63078AE680C730D4143C8E8D0AD15B3DECF2C5093A15F2C6DA42DADF8CE49E40FB27FB53BCBFE3AF58F77BCDDBFD435294850856A9996D9705A7C3EB6FF5ED1F77AC6766EB9294B5AF048BDED85F490B1EEF584C18DCDC64FECF344AEBA22A798673ECA32E80DDE443D405B012092C3092B77C1236293A60E1D6D17D253B7EEDE7AC5C5FBE6D7BEA724659C40B02626B05C4E230D55E9C5DA18668114D6572E0780EE73A5D125B84B406B7B8272FC51044C8B104245E31568EC05C69AEAE6AE3139061D855A0D8536459B15D375463B445668DD8A1A0E542FC187A64BD3594E5BB2A15D1EB990A08A2F5D1D8C298C0DB03CA074567635836492E2794B963BEA2805911B4448520B0BAF39259C9E300186AC5B5DE004FA221212310399FC96CCB21779FF0F1AC119ED874B4F6D92203B2A208581EA50DF419B1C6A947FE6EE95C98ECFE3CB374898D3C808AE8C9AEEFF3C76AAF6901A8E24E985DA4A57C1B885158A4C189A620BDC64A17D148BF1AA0B871784476CA1757F4EF17414A078F1D6955F31E2C712F690E5E967C124CAF1FCDC84AC3E63B5E277D718AF290898AD641F960C3C9BEAA508785AAA307B24BCA8B68B77407EA11E38353EEF543E1D714CB0D0FA746585B87FC698AA2A5D81198C565A4D2B07F9C8736D7D18E3C8D5EB1DA9721CD2C42383228DFB093548809A31FF27B69F5CC4BA6F11A8AD6CCD24EDAC1D18F05C427EDF99515D79393F097F3DE0C0B8AFCE123FD5CB25574100AA3FAD384C7B2B70A1F05080642F69BAECD6DC043AC64E1D4695913756449D44A27F4F164A2663C6B217BAB16746845", + "k": "391D24FEB3C06AB17F1F335E9FB3CD6B19C60D161852F90F823D91BFA9FC2933" + }, + { + "tcId": 16, + "c": "19B9C6B051058EB1C64954CBCFDEBAEB5A8880F6824C22101BCB7D49A3DC200BCAE17E8294728C2CE81E5838C1B167318BB0A2382C5B43517A6AB671940F3916BE50EE09653C2EB2F66646555FED0CA2B9E29A4C3F37B1C4E83677227E48B001983BB4D1A91348A465C623A7F5C15800BC1B48B184B39EDF7C73E3BB3BDCD51D7BE4F12C541893EE83BD00CE82B083E7AEA07EC0D391B2E56CD830C6D1671E37C76AB735F375378A98AE5665CE885BEAB92FF0E95921D090679DFDA967B41EC6E38616850889E2954F98FFF66AEBA5E21922A16F6A4A3E875CC2A00AADC5E268FA83E6A9BE1D9E28518EF224FD15578F6F17815E0186A60D3A2AC53E774CFB3DDBFFEA3A4D7F8345641D1269FA9032E067F1B8E9B6FE3D627C2AE24B785690E82EEA9D3F1A9DBFB96DB4EE3C2D3D99D889F5535DDAC167E6FDD7729E2522A09991BCAC4DED2FE415D720C9E7B5F1C3609DCD4EE3202550B4679B3B09B61D50AEC2E5117FB1664E10895B360F0898DC79B5EB55F920B6A7E2551D534BC7D90E88AFD293F11873FE36029FFA89C1F453A0A465F1D2A4DAF97A95044057CFF4CB24AD6FEDB02AB0E9AB6C87FA2E3689757C1D06396408CF931679D27625B6A2E70D6EFB394885E26EB0DF964F90864F82D18E29B505B2850C8D0852D064C9CB0C0057C80B019A5F54442D0552CB3A644BAB91781560A54F1FA542B676158880E034CBCB6839999F2B90E43F1C7B70C9BBE7C7B7F2AF31CD64BACE19FDA0115E70099010BE97D9AA0D57B02910209FB40432BC7C9F17A5B1C6E324B37713C16408DC4B36D74A0A97C30A149490FF41C553CAEE1CBF650F26A5F312035892433199E9BEAB81B557E3B61A2E3CE040DC37772ACF593C54698A4F97C0DF796997C06D627D32AF3BBD4EAAAE72F9EC598C3C870B60DAA4BAFCAB05600ABB6EEE727EE096F24AD39D5A9576C440E4244FA9168CC2D727C0A5EA85F15A5CA680480A0AF4CDF32BB3C516559561458E9622867E0702F23D64B56BC74C99B2D31CB11E929DBAD881DF3567F2D2ADD73CE463F815ED11D46776D6C2C3CA469C88DF7FB6BD3262", + "k": "653135852EA4F6E9A7BD77AE75D0470CDF0A4DA0863B783F1243538CA481C386" + }, + { + "tcId": 17, + "c": "C08F752233D61FD45A1E327A743488B469EC65DBA5A3DF74A69F4068C76232E7E77D95FDA298AC7C0442CCD46C9D2F46589826E52185C5280D6291193C1B9762973AB423165226E5E3871A8C4BA3CF432F5CD769D21264A03DBA29C9F29E03660358540A96C9E54099F0538CE93B0683CB4B3375D549E5705C5835F7B645699D27BEBC125E3EF95C7D0A46597A3761C3521414B2810FBCB69EB14CB1767E1D3C4E326C3BBA7E4D624E9D22D42490FF2E40F590D7A5E4B80B62B6580A2D65195E15762A45C82D754746E76081F0EB454247E4AA40C072B8BCB65AA4CA9F3ACDB218485FAFA3AD80E36C44D93CD2AA36D3C3CB47983CE3BBE2D8699F33FBFDBB2173981758E32AC297400989E86ECB024FEC8D8A3D787FF694966484AA7CA4F114457B33F2C83C4C3F9FEEC1710CBCA74749C449C5033F48EA743F83070615DC51EDAC395A7609C707B7C99C83F276E699B4B0463B0601AB2169E1971570BF1F68414EC178B4FDF2557CAA81F69404AA9997E79EC73F1E22C2FFE9328CDF82B47E32697A77350869381CCC37A07A9EAFD54CD565D11E5EEB1EC2639667C1325F8EE765AA0A3916C9C125E1691DF1301589A1FE5A39D85E784E048D6DE492A623A78700FB2BC7EFA75C074EAC7FE8B368B2BCED186D71074EB92219FEAD64E5F47C10BED331CC53E8EEFCBF239E9DDF42AC9DE25B7D16CD5EFDAF25BC79475809F8B8D88FCA3FCDFE99DA3F8ADC96E624D84D113301413F1B185D9C851129D597530C2DD64446282D20CDD2C5FE2F54118FE05FD8027CC388F05E7E9B01CC8AC3178348968AC96A51593C48478635364120CEF35F936602873879CA6D8B0C60715B19A035359F46CB8A112D26B7C742F4320E4843642D8D16F1A72B1C634605C800D12931B1220EF607A0EE24B8B02FA80D17B3F79AF377D2111B93D50982BE4186FBD30A27DFD53B0895BBF3D2CC99DF38039D05AC7C3AF905D99419B3334634FA362D6021E8937416FB9ADA731656B23D54722104DE8C3E7ED68661EE7F6311406F03074F39EC689B79255B6C163563F14B1095728B5DB168073E5F8A8A6BB5CC", + "k": "2D815B6CE154A7EC376E5D3A175631FC1604CB9E69310571A0EED1F046E77EC0" + }, + { + "tcId": 18, + "c": "68FA8EA211B02E4172223DA5913AD6D5643E08F381D66B872FC28C683877BBD344C186506FF9E54C5F02495E5A8700AC6306613F2FFF00680FC804586A3F88FD66D8C7F032BB639EA1CA140EC4B87C5512C4263A4CC6343FA2654FFB4187C75F36DB64F75D1C108BA1D3A5C4610D7C67F05AD3D48BF13218EC36568429634FAAFEC13220F233ADC72ABF9FBB9A19331B07FC0DDB6ABE0CE2260A58172BCE6D3DCF57BA18A389501714713A987840ACA1EE6A2BB79654F961ED6039894786BB76FEC6CE29A9F419966470676E536DDDFAA03FFB8AB2DF5B4CF0192371F4AD2E36A46CA9B2CEEB78552CBC4BA5588BD963CB54762012C58E6EA72E4720D898A3282811E654CA339ED8EC4795AC4E6D926F239BFC95B7AD5D8FBD9C32BCE82A503BBF2B0ADB283E1BE383BA7BDDD1E7553F5952CAC10AC6F85CC3D268B508C26E3A4E0F303BFAF489D7F9F92910433C7086A50FE3C71F07FACF2A0F814FB95ADC76D62B0524128D8835851C6CCFE141FE7955EF12D069C42A50BB3D423DF0A47E2E07276BBF4706021810659888AA7E2D184D00F3F748E1B232E7FDFA1D2B068B49B7360A8C1D85D58318B1ECF822EB7DA4737E9BED829CDD93CA1FF524F76184C7D393FBB80476552E3D019C8B05AADD3B2852A06B1C150EF129D12DB7B3D2CD4C0689BEADF568608461C94EBA11CD4D6FA45904573E9CDD54A8352F72340F4B520943E6E528EA71089FDF977C42772DE423FAA72369D37ED18AA064B4603330196CFEB56BCCF338AE7556C064FC4D6F46996031769AE8F07B14BAA0D70A997CB4C4F7E58259FF1103427BAB7EBEAFF15D4F3C93A94ED1F1D42A7FF4B6339C4D7E7A66BA34AF22F7A25AF5E032C45E11D88C18ED495D7157742AF85D2648BF3663161D0E6C8D6999BE673C24BAC2B2C48C16EC546C98AAA392744521AA448A3C3EA6998EB331D63E7BA86BCEC9BFE293E8D671B47797357E8326F4BD4B024059D647F67D9B9A8FCFEC9C155AB05B74837EE3D5448585606A503AA923B86D75EABDAAC7CBF6C057083A31BA6C108A6F51B2D6525A064DE82CB615326B6C4D03FB01", + "k": "699B26AADF043BED6A70BC8281ADA8940244F6B9A3BAE494D4FD401D519ECEAA" + }, + { + "tcId": 19, + "c": "F686F27B36C62A85CB5AA36BA6D1AED602171E11E3008A37F3AE1E35F68BC9BAB7A7814D2AC96336D03C13CE2AF082C769F91AFC65C6594ED79D0C019F0D0ACABA923102E4BC22E4735B1E96FDFD43376167715E2004047254E981AE7D53AD91C702CF6CD8C031E590C4EC998BAB564413CE2D65C69759CBD4D165F2CAEDAB670060654C8D55F0A3574E19D53A5C4E180B5ADD1E877D5DF09AD88D93E546ED24FD04C3BC78E2FC1D51F3CF8426ABA6B5624B5502EFE1E1DF17A0474469009FF1820A338C057C6545B4C46D6069CC8C14F720A6A22182A32ED6ACC91B2B1EEDC0D89AD1A816C19924D4AFA619593997BEEFF6DBC7D9D352355EFA1F6367C6CD0F1442981BD392E22EC44805BBE251DA16FEE7FCF580F1D330809EA2E7F9285FDDE7A62D82B5A0EC10925F831DB4EF0774ADC7C2F5C7312335274FED53428E749B5A019B88DF204A32E55F9D1DC0C7A5AEF1B2CA1C92E177278827551DEFB16E2442CAC88FCB7187322899A4197AD59491BD0AEA280E95C855370E4B7E7A81016701B63D3EF23EDB2D66851458757457A7D7748AC2869E8E203B05F6DA5F7E95FEA2077E46A1FDA2AFAF671C05F06C4047736CE1AA97C4E7B71DDB98ED5A94AFD5D107A8054E75A699E60A3862AE997BA035745F05687174936269A8D26B2B60FD60EB514376DA5A760AC6D26C291BDDC9A089C60DC52732EF3C3A74D0BFAA1C0C85B77610E2F9F26B5F7477691B0F9AFE05BBEA76E5F22B708A5F7B7B0CA71AD92AF18110138BB593C727A3B9406C32DE6B45AB85E2B92802328C78CEF431913326C5CC2C0FCD1C931B08F34DC012A4CE3CF96BEA5D9D95EB80A5191AF17C7D5E4B50FE8E839B7180A457799CDD5CFB4A8B9FF374E670FEADC4F87A6A3F6805815F7AB72B0FEE5FD2F261542F69B4465210C3A430DF72FC123FF72BBCAC145ACDEE068F143A91D349D43EF1F61B5817A2DB4E7E90235E1E240F53BD21CFCAE70D74FF5290EA6FB7977A27B2A34EEED8F22363E654F3674BCCCECA5044D21605F3C7914EFDC12C7C8A1286ECEF5418449C63411CDFDC36ED8C535424E7603F6620", + "k": "13F1BE71A0685B01E3071EF74748F6AF9C3A1F17F2BB2C5064E57D49B9AF481B" + }, + { + "tcId": 20, + "c": "A0678EED5CFB1E912F4191D199FEB7A0AE60B164067142A61CF73F803C119D6E92B65532E8111B3F1D5D3369511DA3BE62A8CAE723367CDEB37B36A14A788C85C7583CF4F049EC2925F1E0AC632D44BC5953D13805506D658EE98F443921668D3AD126C882D3EC71BCF3E0207A28FD692FA697B9FA11535D162C1E7262EFA1736FA1ABC1EF9AFB0924CB0A5723AF8A9A208170E923B5E56177CD8773A9766B2B4859746832A105467A122FAE2EB791C826BBA083082EF0A09C2DE07D8BC6C3F69FAC1E162B244CFC42411EC262FAFAC1482C70E1EBB9AAE6BC1C1FA7219F0BB4EDB0748B494C4AD1E43875605E8B98F4FAB0AFE438A23D6C67A5120E8F703A4CCED3A5D8C9F4425E593FA0475ECBAB1FE6A1DA8C1C0C0DD569DF69E7D8C3F17CD6CA76AD09DB3FB187DEE79E9F52EA5355E01B6AB6FB9C83E208B630CE95A81A78326002253F0747DEAD8B5AC6F6419F7A69538C5216E58ECBB4222C1B8550CD6351E091D5F0406ADB09735ECBD126C5F6D24C1CF761B5B2B956BFF2113071601FAA9E977AF948980515D3B0C6EFC46AA380B756C9C9CFD1ACD4272B6905042965993F9CAC2AEB9533887DE6B0DEF6CB0D06CBFCE70D23F021DCC0DF19413A124D564C7C1D7E31630B269941DD554F7969B1F4F8ED4D42AB029CE31BA8EBEB4B52990658BFAE494BD4ABC61ED4C523248355041AC8595F8541C579FF7A3C411D2AD51CEE9E7FA4596738703B8D83F0800FCABEF23BD4F900FCF7AD33F8A93ACC6F1D0F2DB8F3B83DCE4455E93AE07007F5141BA65594FDF28E7495BC61144491EC15B0B9146F5449185A94D980786ECF2D052AE9B4E28A32ECEA08F22FAD2634A3AFED1A410DC93F17D45D09F11319278A58897566A283FC58C1B89E866AC9762CEBD113B6D73C672A5AEB201D5644C9CAA71E70F0CB41E7A9A852A8B54A638074A384AD5A01E7FD145967AAE084B98D4E5C4C56789401DE9DC6993C01EDB5BEA885019503B2E28AE77225B2918F307E26C503F4BA5BD4B5170312920772A6F21A5EE994FDC44713C6487ABFAB75C5430E635B9CF34845C8BFD36F6CE20EAC7B", + "k": "073CF63D0A6DE1B9DBE40FA08D69BDD05CACCBB7807FD9D747E3C8800E65E8CE" + }, + { + "tcId": 21, + "c": "6890BEEBBC6482B6B438C6DAB5317AF6AA57966D2C95C2C041794CDFD45E0C75E7C8F584FC788CDAC16A74E9932B90AB8BD6CEFBFEC2AC9D4E8172BBC223962BF0CFF230F7CA7D0A723C60A97DCFA46FD7484E55DF2A85541427333D178276E93105C3C5FFACBCAC27F501630DA058EA9AAC30C9AC1073E57D76E345FDA46942D9E82C2C98E167B4D2CC5617170372774F69081B35D7937E6ECC95B9280C420D7703B498DD35D5B4E877CE5F84C13EC36048269FE94C332C1CB0BF22EBC786820E8F7EF71EA694A01B126E93D7C550F8814DDEABA6462931BF0B778CE94D8C02688E4B79B0F7B8717CF68822758F65FDA3F5D3831E13A76D120C7FF40A055EFC248AD933ADABD5ECE0BA501A422E99DE41AA73EC7338FA6E76DD139DFD9028AA6BF665D6EFC83E9C452639AB92D4203C57A95131B2955441BD4A4690670455DE3647E2537317D68AF5B5896444C4BBC6876DB337292BB0684245EBA4354FD2C21B5FDB7216AA7C7AE439AC6334AE34B91709BE07828FB87BF534B0C84E17E75522FD8EDD2036CFEDE7C7329B1CBAE836E7F4059D544C37A4E338A1884B66F7039920D080E6AC710D9F0CF4843A431372678805905A44D787FDA2988C2124D6AA3AFA1A04A6398CE85F899DC01E99F9B5EBFB49311D151EA4FC6149DAD094CAA292526A035EF6AB7E298E8029B15E066175B361A88B82C9E51C2E41644B8F7F4299BA9A06869286A853EF595DE235B9660D96BD72EE4094C1DD8F302F917B59132E82E479839518FA569089CC6A1A7E0CDBD771A098A6A5AA88F2DAAEBD5AB5077111D3F1EF311F7FB9CD17C0D9496584B09412F6B38AB79211AC498C1546DC70E3E6071E2F19E916591FC9C76C9FD2C9BDF0B975F3399A6C1DAA484B112C35BDF23D52D1686364631157558B2A2E42C09B76FCB6FED9FDA04C0D79E1338A86C59FE8F89049D7B7E0F3D0CFFBF47BF4C493B76C9CFC51F5FD34ED56F7EF411F05FBCCC1D59A648746C9147B5F9051CEE265F6EADA30C9D502EEB91A63E882EC6DFB2286A73C0F84EFA525E05DE8684C0EEB99EC60D727ED81D03B573633E3E1B5", + "k": "A4683D51ADE58929C6268FB34F750229426A02F9819A115D11D99E7ABD3CE57F" + }, + { + "tcId": 22, + "c": "CA22B2C5E53D8592BC82DE333C95E65EF9C923EB082F320866C1D4C6C44D6F9B177C373D719A6CA983D0C328104268ABB93A70C14F26ECA3A243368F6D150355E65F77A5C0716F32291E6CBD2DCA349691F02916C4F52199DF32BE78560F52BC83A831058431AE52D3B8A441883E6580DAFF3735650A2BF51BC15990B499B4215BCF2F1737605AC32FB8306520D87A333E73DC2E3B26FE204D42C123F6FA399DA304C73576F4F7FA5AA9E4B9C1182DBD2CDD176E98187FEE3CB85C9B21E93FD13631F04C72431E41D4BE0C54F1CD0028352DAF3296AD116DF265BF07AF38FF1F54D6B2D19E7E3C9D218627875EE03B2A7E83089AFA86ACCE759F9D26689029F6A4B2875711AC01D083072F16A6DC67C79AADB02C1F874E111A8733ED59A3B251A21899FC436321426817091D9D013B5761B1EB90A72285F299E46535211E4E5A16663DDC6ACD9A1E90D6A6BBEEA54B5ADD78C2AE8DDBE203F217D318764B8CE7A92EAC231A4E8DB5501B0F1D0C793910AA5EE88D0AC3D73FBDF6337495F183E15E68BCD62BAFD8EA60442C18724165C1B188B8402114E1ADFDB49E10AB3633997136A93025F39CE0FA514D53DEE10F8A107827F9F1279C1A68627131A1018E17296D25C6CE841E6806376A34DAA59EF141AFA6DA5B3E905FDC2CE45334B260520976A163BF891087F44C70621CA120EDFE8CFFA1082CED533EAFC75C01C0310260AD400A35745F8CF8C3368EA7975726CA078BD2A4DED71C960E31AAF66325CC921A7A29BBDF7771D6B3B3C22440189C4B197635C9A51C74C591B3CA4939480FE375AA0E5D3FCFE1A23DEAD2EEDD647B94DB7C47CA139F1C100D78EDD9F38B006A3977A5E23EB80BA85E32F1B7DF0DD6B7E16AEC6DD09CF75B59066E82972866C4B4246F8BC7BEFB5A1952199B6B75CCB8846D7B9D8DE8BC597FF62C30B9DE3A77A4A19085CC2E03E10E54546CE7434D39338904FE5B014F05D2F49B48446DD06849A037FB5A998B1BB85EC5F4C01E6BCEB095CA87EDB7883BB9AB199FB719F8845AC68E1216A2F0F05526A8EECBF81470855BA6FC8B49080DFF08ABD2D0DE25", + "k": "3FF81B93821DEC8E583A2BAB79E9C0097CE65F84B9B800A433B887ED31D0E266" + }, + { + "tcId": 23, + "c": "679AF7E817E7A6F321ADEFE69590BD480DDB47A631F90BD5B48DDEC7A6E7C1EF335309E41C6445538D04412572EEA1E9581D1D99E965B69C2221FB5646C491D29A0AEAD19C97E765314678A3EEE005BB02D25266CF1552282B5F84DBB9F54091A88E8E4C4B6C99786D970AD2419F9F0F49BF0A4FC530DC1297531C8B20EE74A24312887112B983339D653B954ACE5D71D41C7C58760469CD0A6F50C3A88696936717C2E139398D0BE4280135CB000F121FAF3D22AF7E7CBA412680267A0F9101ACE2C4B8217E2E3734CB1894738592ACD3631940D75F100C82F97D24073406F8A198603855C98085C2CD2BE5E96CE884B03C29AB8FEA3FC7702B98211B62121B7F51DA86A565541C963D90CDDAC397DAD28990C0AD223E8451F55395507E77871C84CB243A6A2BD62BBC9142F727155213DCA6A44BDABD9ECDA3B6BC3E03C668EDB8D022F299E30AD4632820C5D28688067AAE752106F2BEBD77D489E67F47E958605F6B9D481D53F68FB00C2F756A0A78A5434F217D44D35DF23091AE692479568B47595982A9177869879FE7A41F9898776BF2EFE15C4077F87ADEBE33928ABB3CC8B48C3362096A9BAF61D4910AFE67C9C80EED214216CF1EAAE39A3A5E3276E9DAFCD4C8139C6B001B9D998BAF16A513C9AF4532CA4FDB78D70FAECD81C8CCFEFBECDB908BC762D5723ED55300AEB6191A0ABC63490887655CBD423D19A213244F8AF0198569FE1A3EF0D37C79023A88DD17B19ADA7E8DF3976F87C4AA8D9CCFBA72D45DB7D55C246B247AC55E695660E0604738A8E07B3881636FCB1D9FC9958B4F3A44AFE4127FAB60D393AFAB4112E2C546221E2B2AFD5D2AC180DD7FF4FBE067E20BC788AA4731C3E905C4E637AA9A7435AC8732170E01222EF597A13B1F2B1CD4C98313617D30BAC368B3B8E88AB20F7272F40449080B3716D5197E7705BE31B970E522AE7829C7D8F2F3242AA81DF28710AF8B13E55B709D7AEA8B3A02BA716E70B9133A5FC8CDC648EC237312F47C0AFB8ED03E2AA4A3062676275D851FFE5D0A89EBE0EF03839F16C6C377433427E0701CFC006E96E7D2174BC0", + "k": "E4EF4E72BB7BCCE3F2A632059DF7317F5FAC63AD34C14CC95DCB767B2B2ED8A7" + }, + { + "tcId": 24, + "c": "7EFE5B0CB015EF74BE29E326993342A8FA0B207E8D08243E16BDA014AA99F964B6FCD101FF0CCA06D2D0842839B1250B32856549FF63EA67115A6BD3A9E1621C06DCAF46814456556834FF435582DD24FFD207F0AE21970DDD4DFBEF4CC7F7AB3D4B01979EE3E885F7AACABB4D55F043340B7022F9197D9A954035D529BBEA251EE9CC058E5B75EC912B464D4CE2A36423BBF5B5CDB79A0182169F0AD0963A7F66B869076C0076C5079B090D598E2430E22717242B8A1836883A8CA572D7540C7AF9A59FAA481FDD17A7819FD0370E7AEF8C8DFA7CB8296B21C2BDFF34F8515130E2293FA52FDAFA416509ECF5B461FED088F90E0D67051B5EEBA20E9D1A1A8982068927EC433DA88236F296760AD3E2AF0B57EB8926DAF0F405943BC65B818839A1D76021A3069D7FB223F5A8014C8D8C99D5CB06262B53773EE625AD61B0691757A49781526474E8A07B7DB392A8D094F54874B88DC57B1968EF7317B89B3B57178D36805230C922F9861EDFEBA899706F64DD118C319C3A81CDC733A4940F4097C2E4BB0A14E9EEF9D9DE5D8A6E91CCD6CD0F7DDE0D3E3A9F82E8CFED83B4E449BD0A92C139C5517DF996BE80B0E127E97550A1CE7228623065C42B967E4B35A13F1EAFA8A48BCE49DEB22CA72807ED7F9C66C101DD046FFA861BBD8A3821F01E4834461B07BC9D0BF4E61CEACFD2A39E8B91568D774B3BADBD352497A9AB65AD78772EE33E8032485C17166223E10C6D45F07490F274E1B35C2AF37FE8D1EB62251B67AF56ACD0AACD4745BBC1CBA7C05C9BEBBF17EA0B29A1758E2B1DE065BFE7506F4D8AA03DDE883683E91E24426F788EEAE080EE8883B1D21DC9B580A86F49A0B260C85EB029B3E11084120A1E25B79DD5D307613A0B801207985321234732C51E8B17108246DC330A0FEE3FE4F8C51CF8403460BBFA1E08D1C399B18B7E5058F234E7D569C72170D2AD80E3CEB5EEDB244EE91A9BF4962467ED75DB3E8580C7C7D1C44064A90F594D90D2786CC45D3207AE44353FF784E3406C78812200C59A33709294882A6E15C7E6BFE1B8857CEBDB6A5466FBDD5C4FDC4A1DC6", + "k": "5E159980AD88ED5D3EF2EBE034063D65CA1EF4EB972136230EC85DAC37471E15" + }, + { + "tcId": 25, + "c": "2FC1797D333F2387D76E8B6039EAB1E8FD92A308A10F9C96A1540E92899EE0A347D5DAA12163BFE54E0CFB6C0600C097AF5658E9FC2B3AF7FAE441FF57A119EB7F798AE1457FD959C53EFDF342F2680A84F153A7980876577B718B9C5A5882074E547FFEB3272B0C973B6C505F5DA66F5E4C5B731DC9A55E5610D05C99FA60A3FB120570793274E938BE8FAD976A12FAA9A3126136AD7F45A83DC344F228C86C4264B7CB29EBDF1A78FF52035A5FAA35A429B2D4F5963BA860A76A0B7D14D01E2438DDAB2A2F56616875FD8A437455D9DAC7C2C99FC54A4F45E84B5D414C826D863DD76E9775183B18DC07654AF2CB3194F20F06B9AD7EA9F4CC2A8B3E4761476DBAD2BC60262A092F74ED3C26E1443221FD7052DD9735C70F128862C8DCB503DE387EDB0820BBC12CCA5915297DED8219AD09C76929CA4EE6C3D0264D4EC419AE43CA722A174DD511B9815C9FA683C8E12697FCD8A9EEC73B4AF8C1E7E409BC3920D029C25BA4B4D324236CAC6F5CF633FAB80D083A8FDBF26D1F425BC98BE9B3784389A95DE0EA2F5F628D6C1B9A78C9CC35B8DDEC15A4F2623781B627AB256865D5CB54FCFA4A96297D89F2612EE708983A97C03837F2BFF3927A86D4C1D6D9A2CDD50374FC284E3FF2BC642CF3B3647593B9CAC615387C9B0B0CC2C57E2F0D39222784BF8364D807E7E9B0F9309CA81FCCE11A04F23988B000E042420F56B7AED5549B3AB2C4AE7730C4B7E28C3AC50DC23D09379129A52FA0069A2C9D614A47B413F95011160E942BC4CEF2B5ED6C44122BBC19F8E054FD7ACCB0C2129F9284C7BE3A80449992F305FBA66A048098B2764661636C1B8969E153191E633A4E5DD91CDFA95151C473A5CC45EBB9FDF6D3038DA1EDE510B4006DBF5685C61C47CE5E47B41C4D6394B4A6415D1623B79E3ADD55FC46F4A1408ACC0DEC7605660EE20BC59E748A54F27605627CB5A6F396E6B2D5E19EF41C2736AB2D13448CCCD78A1EE01CD57B32E2CEFB50FA8AAF23BC285136C4B440FA0167D041676F30D3557E1E62FCC6B60B6708141DE364F4CCFB045962476D167D15C658D3F3AD8C23", + "k": "DBEC30CE38AA5800F4040F1AE26EA2B71D8B1D5A86A900787665C9B5D2750577" + } + ] + }, + { + "tgId": 2, + "tests": [ + { + "tcId": 26, + "c": "4EE24D9E0858B36DC755A9389F4FDBF438DB8FBFDDD2E2A41FBFE7313693E87B2BD86A2A5C95286840A2E477F4AAC12F28319D892C30FE9A120A09713369A17D5EC459C7E5DCD402F9049BF6FF0F7D07A7F18D4C1E3E0429BF6D501EEDD33E114423A5C4692738096101EC79233F20C58A6EA7E855C4E608DA7C9EE086EEAFE296F3214BD0B9264AE18069342AB493BBEE267401FEDAE19D5F9224A11D911505CB3200C65F17C91F88FBE25621402C939F071C48D6BC6ACD207C8C215E2FF23AB5FAD94F2CE61003C99DE15195B36ADE08864043CAEA49D4EA1D550978C49455B06AFB4BA4F0C178D30F953D47F0258370FE8E686802085FDCB25598DE439CEEA186F848AE2E4ACF526E03755D0A89A941A08C5610C96DFB3F47C693E7E899E1DD38DFD9126F3D05751234ABB82D2BBA4D347823B97293AE2B58FD3C71D2216797DA1CA453D600C5A9A6B36CA23B9450894A894A42C40B38871F1E9E84B40A04112CC9A4B6E7B8DE59CAE5D8389687DBB1EA078F3CC93DC5D0788A671530D9FFDE5F2CB6A558AB38E038D59ED1EF1FEE381AFB6DE0A77E1333FC5B0FE3EA2DCDB84FB33795449AC6DC322F4E5E09B2A462D3750BA426C04271903CFE9A3F02221B69E474F24B7DB608492C01AAC3F2FA472A2469B6A8A949A67C567D139D6F40B00DF1AAC1E6456FFAA646E0DEBD79907905F28076F78ECB3DD1A6493A40F3D1F8D89C71AD15D22162264D0AA73581AF7A77EEA43B856370182348034810E60A902604B724E09EA4638AAB039982A64EF02C9C21259A381BFD3BF298EFE4285CB538F79BE01CCEE1A4A903A80132942AC6BCD4425BD197EF014E7DBEFFDFDD5AAD00DA2A5E8DE4FFF1E8E97F23F3F4BE38970AC09CB99D252CF2736059CFDE177EA6B36EA329B9DC541C3DCE61FAC504908857184C936C1A1C4AC0C8DDE9A66B4F3AAADEAB2DBEB2F2E6422A49A6B9C223DF25A34720717253DA6DCFC0A825553A1D2884E01A97060886FC30A1AD50E52C46F6F9B87274AD6369FCE4FDF3FF6A5D62D4AC82CBCECE902E4DE4214B71A2CA547C536380DCA26F63F2BE71B01EAC68F42AD1399D390404AA5539A5995254836FE6CF59C490B13CAC01C69E50CDC0EBA1C2F9978F4223AA38DA33639ABE933B40F6E2751515EFAC9896465041D3922A4B043897083F7CC6DAF1FD87B970BB6D1D5E48B599FE6CD2AFBA5FCE17E4BD4B0217E879FAE34FC227EC132D6F7141A48D14DED57729164A1D2B0BEF89A16244EE114AB4E108648B7E80A7DD502B0DBD0C38AF1D85AF6966BFB8E54237000A3F18C48EFEB93ED62B41A9B341361D0D7AE75D63A3A34DCEE329996AB0630553F38BC0DA148419162A31D386745C818E2691411A7927E49822AAE9EA918BF49D6809290B57C1BA5EC212F135AC0B8EE945C0510CFED4DB5A84B617BA1525E996486728E1DB87B6E99CC9A7EC4399B063D3943FE4EB1933E90365A4916CA8D67D064DF7D5B8DFC51E337247CAC3CFFAEDC5523276CDCB82B130D8E1C3FB6D7D69", + "k": "B2425299020BCF563B8EBE0512F0479941335A75A32B8D10BFF60E5548B64672" + }, + { + "tcId": 27, + "c": "C0B435307F5CBA65E17F2FF8B2D435874A6D44F618EC5FA2444FDDD281E5E19EF12ADBFF26371451A27E40210635659274BDAC8B6A3377DCCA959D19BB3EEFACDF814D131740F6B7EE6C97320E5E7901A55E3D274B5D5B9557274E566AAA2A8DBF9541BCA317AFF7EB383BC6B89A1A542885249A263B1F33DA8C1B2D034FB0B0E680085437733F4644B8E197C9BC25147E79080F1AFA644A507A2C0D2962B6E9A43C9DE42078AF346FB5CA30447AD74CF93A43846C1ABFABB56758C7233BD410823F88B29E6B492BEDBCF18AC3B8A6801E0C188E044E3353DD858D2E4D0D9AD90CFA137D4149C9C44176E7B2F7A38FBCDED715DE5526885ADA3717D265DE4768EC121C01997E4F9DCBE796D26D047145E24FB62EE5ED154A170624F22DBD89E01D1C7C156D4DFB2C6F6D6DFB7577F561C5D41D5E0AFB1B638B26DB8118C99AE5AC8D827AC7F5072B1EF56FB13EB070C01AFF1C92A97842C9580B7390B40D156017A85E15E7992611D980F5D6982DA0657AACAB159722AA9852833E82E7409328253E925A1E67F6925576C33AC518523AEA22283B8EB7F0C9D6BA161756DDA12052068B6016A4D553175E33D35147A12D0B058F2424B1F499DD18AC9C58EE1B037111ED00989D188871269F9C0A397A293C20BEE7BA7F09C8866152A1410482D3D7466AAAC16B73328FDA74DD670A815E1BEDAC97D90D0F6264C0CC7D10956E9D0E2640EEFD7357BA98B53EFC932B650E24FD7C43C9984545B117E1ABC15E25D72DCBCF4469596585CA642AAF1F14CE711B0360BBC5C8FA08CC092983213CD5CE94F7ECDFC438B360FC46591141B3E6DB212125306C86CD9896D251C404AEF8816DAD9A2762B4518AF3D73FE44C45CC2C85A2C695D5C7209BAA7F5B99B229C9D5B51E4C3DA8D98721951B60813CC011B6016B92CD1D835EE17FF6E4B1BA511016D5816791317BF85F410C9A753A2A31E5C60AAA85BDC0F7ABAB63114F47A3AD35D3FA4C7F3434C4D6F40DC8C5B7A328CCBC8CD7375A690A812C091B3523B0B4725B9EF932911A558470D43FCE3D74F41898C7E325FB244D1AF27803B06259C31049F45BD6AC5B4AA3266D008A56EA2F6952982CAACFB9D228560D366ADA3F30C51594B986676C014FCB09A6671003000B7613A4934CED2D5ED6FDB824CDD22333C7212FF28C03D6FEEA1B824004C0854C8AF138B6FF35CABD555894CF1052199280174BB3112762758E5C9FD235FB46F21A3DA88840B9DDD2C1A8E11B302369D7E8BE8A39246782B57DF531452F9DF9E02AF353E6860A740B983852DEE17DA7995D821F8B02935F2459FB2E0E75C86646972915849BD191C0EA731F4B21E68AA2377006CDFAC3DF9DF98E1F47B8757F2BD3AE409CD7BDF35E9813248E016D75615EFEAA2F4FFACE232AC496B6BD0F2A91641766BF3BD461EE9429A917FD49E44AEDD43E2FDFB9C20868D8B89AB288756152ABB563344A05C309B20A2EBA905D8C27518D1801F6B428109ED7922474019B44FC08E7B84E377E373174655B8F0338", + "k": "E8AF40EF16C053F4CE74A82AFD44AD3129FF72FB6CCE84A4C8F729B66133BCB7" + }, + { + "tcId": 28, + "c": "FD8CF594954FE5FC75D774B4390EC1678B676770C602B7C128070BD331D260AB21D1F99C726729B6FBF8D699EA133B1665F63DA83F737E938A41B865339D10ECD26940BE601870478E0D9E2FC2BA385BCCC0A786318D9600B5E8F269DEEAFCFCF61D5138FD905ACCB595D239F7643263DF754C55FECAB8F07DA82DFBF590EB6E175F6283879BF589B052B9CA2130B7025C47931A8AFDEF26B3843F6D2C701A7C3075EAF545D07E6280F261CE1EE3EB967F889651430C89693B6853F8B9FC32D758C6947ED409BA4FC00238E490059995A81F7013133C6BF4D508D30E3CEA08C0D84ADC2C1A465FF538405201B31CEEA71CD1568B98B17F4856571150674745C5858D770EA4D91E40148DD056C0D8C938B380FACCCB2743BB2D728C11F665717CA0C271316496331F8A2583FB1C2B3E53D668C3F485993F14DDF234B7AEFDC95FAFC99CAF0F44845E5D7F727B70036F5909C54B56B3CD842C89907408E600C14C7C00AC09540AEE9D25619CABBC3178184F2E9CDF0A3892FFDAA75C7EEB4F28CC9EA0AA8A1F63E4A9F9373075214C7B51D606B79F12E95D7645CD2D0158DF5D70C409FCB01ABDAD1FE33ADA0065F3DE67D49BFE9919C74B8941953B2864AC797A2CC5B2FD887B1C0C9FF1C9203D230EDB5A59DEF96F8BE673D1955422C7C16FB7EADB3DB33748D0413E94A5F85D9A020733629F93574D8687D78AA1D97A10D9B1392166B1E0D0B6F235CB8EB8A5CA56981511B2805D7728589F75E5065E40B911CC7253B67012B6370222BC1EEA263424C307F3F4BDE39EFF597F31787164545EBD1387BF88A717F1B5194947A5CA44BDE7A176D50D1EA7E372D95737606743A714E64CF4C1ABF8A2DF7BDC9A15A8925C502E2DEAC0CB2CF127E25DD002D4D36785A3042E8712943CF3E9441DAFF33855A8F2E1DBAFB723FC789A174ACAA808E574020B252C3E99B0B170FDF0C68AD6039D593B3B3B96E408AF85E7CBE60B275F4C0E3E1C0E793DCBEEE8B8A8BD3BAB92B263C0F6AD2971F462537ED9ABC092CE6FE617B33BF731EDD9DF66D6E626E5F173CBE0B246B3A0D977B28CAB98B5EE4857C7E620525F51D8F6A83668768CFD68E5B8EC2E0A1A17B4BA5792CBFCFECF0962DCFEE00E220B438CD75F672B2BE7E17EA85D4070E12D2EA716D9710E52F9025324BAE8A76DA34DBF531629411CACDD7D5CC982FBF2BD6D5D481CE758A431C6908092B77750DDE6859F1E09620B535857B082E72416F39B7169D57C1151593976F5782609B5CF4BDA74D9C8654E3AA8C420540ADC732593AAAAAFFDDCE25CD9B554B9EA31900A93E06C5CC761F592074425083A4C7746D05B138E234DF6AB7FE0B24A900E03DE7AC166DBEF702E5920D023DC828655609C9CC0EFA2297BB26C439889B099B3C7642323719F6B28E8C7E8D92FC92B69772ABBE5DCC47EF31C37BFCA8EED7BDEF7941A986576001009DBEA7213A096D1A51A3F27DDEB653160837914AF4F960009E541ABD0A669DCC54FD6261D4D3F3371E8BB3B59C8E38EF4EE", + "k": "D5722BD3F338D3A4AAACBDE95E2768BFDCA819F719BADD1C8FAACF859FE65EA0" + }, + { + "tcId": 29, + "c": "6E77D8BF4CD2AE8E84DE27558C41CF8B63DBF07295C86F83DCD9CF4C4E0AC14503AB3AF4491225037291A7F0BF6B51DC2E3966E093FA8B217C35407F2C5408730D2FFBA39E6DDE33150F804A36EFF671534FC99DB0A76C8516CEB28431CCCE0ECB54D66F73CB283DA9635F5E6496BA0D3BFF33F6DE9AC9F780964368E3D0175E64BFC2DAE50544789CAC7BC439642E678361D99FA6DE85252E72B39DBC5F32B3B45BBFFE90D53032B00A8E831316CB1858FF3EC0EC4E22459AF83D8AA09BBC6823DF580723466260351ACD562C9F8E8AEB82587F4DDD7D26644A990C71E2A6385F648ACCB25FBCCB31704753E9C0BFCB71A433A51C3C0DA5118A7A7E69F3C8AB0EE3F7116DD50DC5C18002AE10179093C25340B00506206443D1D8C9210CEA277F7BBAEF4BD5097237B7D0DE65D524DD6C7D467B8162EF2BE60AA304082799D4253785A65F9CC5D75413FD0ADD22E9019A9CFC7D3060DD86AA10A218B050E6C2B12EECD5646C539E3D7D87B06896D3D6AB902EDC8D162AC34C5C6C2DE155D1094BCEA464E90393C63BC6FFAB862CBC4F68E899E0872B52A403D37A21810EA9D0FE376397C6A1848D225DE562A968C16177045F86FEB2F53D19A95E674DE446FA87E0BCAC9EBF77243E4AF6C55B0585CD1ADC300888AB14CA518192F63DE4786AC9FBD83DF4D794932D5027B17F75B32941251A87CB2958B92494E33B5BAB965B212E557B0647492F361A371298FB7C4D424731C28ED389B90EF3EAF5F71E601227F8BD915EBB8063B95911EE50AC3BA994E5AD96BAABAABB32D0E7948BB91468F9C8D5EADE554728CA2794322A72CE728B80C2D8D306B6B5C7C3D867748BF413128B0AF6587CA9424226254C8D2BE7C6174038CC926FFAB6139BF1674DB51F1C86333DB231543169E12A1828D16C11C9A8040C02BFC1B92300C3FE3B38FC01AA7A0E7C73890F934A5DFDF16720A536F01AD67531049E705C2A909E7FAF4979D2E39DF685271026C6F7E91B5A891034059827FB57651F1750388C1908613A8F0E7C0BCC85291C18A52883A1A6FD65B56C8BC9A058F1031916B46AA8309C7239059179D72CD093EA624111DE89A7CED0B3C92975DB293179F6C0324E9CE674125F8B667C87812FC59683F59C07E9C4A793CD840EC6CB728DC1AA49CC78D7F1BB7D8466ED1D55AA45EACF6C6CFA250E4CB9F2B597E28D69F38F2BE852B2DB2257ACFFEE310E65A5CF90F4B3928850D5FB5B5057EDECD31F71A42AE075158C2AD90E5745712134D4232EA5054B81F4A70D3D970BDA0874449CE73A87188BC85D9EEA568C23FCBDF00B8051FFA5786D9B719B3BE00572BC994A6FAA576F283CE683434879DAEA7E9164E42E0D290532FCA15ED478BB1C4EB6D0E43801562E09292DDBBEC0B2DCA4F0F9DA0463FC81C4B2576B9900443294EA5EA8FCEB18AC3177B9F53B7FCC8B68B02BCD8AC97DCFCA990830DCA3DC473AE12CB56B634FE1D7497BC360E16922331D3266B798BFAA8AE75155837EEF39B28A42DD3F706A052292889D", + "k": "63094ADED32451C9C6EE792A7495715B0AA36191F3C0C80E92E9D2BE48301483" + }, + { + "tcId": 30, + "c": "B5FE7DAE0E5E55F3F99FD6DCB6B29F824CDB4D40109ED33C60A477A17F19021DF82DF644D83B4FC488B028C4DB0B08616E366D0C18CDBA181716108A7F6B332D490A08F99F03E67FADDB0C902CB1F2E5B0077D0CFDA3C16F44B8AE9B683C70E51F075E65E2CC221FF24EF419161B5F31F58C280467C70029BFA340D4BF1B1453346BCA0639C544FBE00240220A48B1FE9ADA4B0E1719B3F5C0300AC5885409D15CE7D61B0CF67A79F146B66A98EDEDB53E1BB31A15D439A6E1CEB9CD459946FFB55693ECA1D611D6D7FE57C4CE1E4EDFD1C807577135E6AD67ACDCB4CECFD29C07896A7F2CD07F0F87FF5BEE12BA73B7F2CBD54104353C7B9FF5F0048DB8927A8900A35349D5C66BDD4BE76BC94F0D749BA818FD96E9329E24469E070F7D30CC315AD9D9B24174FBA3506B307D914A3B3CFE3B76E6B6E84AD46331CE3728E327E18179935EA1227A3A3AF8167843FC35916571D68A33B0BC919BD7BC8FEA346A8C25833F115EBE45B00F12328F9A980F450508A419BB21A2026893BC7D5A32D5A6F2DF09BB95CB6B3D25F8CB0086DD3F0EB430D5C167986C429572D8421E03ABBD0B8F5B09BE85BAB0431B161722B21554DD8CEB97235B77AFCA43B91D6AD4BBD6A81BA42CCA1A62377C162C6E6F1DCB153818552089CBF7134B5FF5AC6BF6955367D2313A7E1014DDFD52F35D49170AD41B7458CFB77F615B5A1A9E5D43343C818791B199DFB0B37FA811D49F8B1B9288AE73E445422A044197CA17AE97E9A671DC552A011BA8A2FC2CBFB4FF4996CE20BC7A0C37C09EB0CFE41A00FC947EDAB440BA090F02D4AFD54E0F47DF41A4B0936F32B9357A39FE14AB0F393F46930EF78B5603D2BB87B5902BD263D79C3A6F9C8B7D8BC927A106BF0D363A14788A2C15FA20F98E2E5D04D47BB8BA78D85F4576A33D7390F4684E5E89386E46714737242290565A438C70533796AF80A18F8AF3FA33AB217D7EC77C641CA0168A3C4691A3C022C53D5B089B86CF8571E985F5D76E5014A6258D7A5147D7CACAF9649C97E08066AC999131C2828D6F9E92379107FD5473AF2B903026ECC5F4DC92712487A2DFF8CE7292032A783F43848B783D64A0B20EFD08A89634FA926792E9594ED6CC2ED15B8AD0C810FF111CCAE147033FA6168B15E698568A5C025555D8F14C1632787B4E45B4F7368A537B7C151E433696B0C71DCCC32707EBA64CEF1D1952BC394F3A717163F7274ADBF0CE3FABA4D84EEA601641A2FAE9FA1CD4AE15724873AD4E3A909A1DACA6C231372D0D01E9027D2BC495977F6EFEEF2E98E1090F1A478A6889B65268BA050D25D4CF3F762A8B13DEAB526A8704D4127BB3F198D2001F8714DAF6D346E6DF90420C0A1328D5A4BBBCB98DA2F5B388955512766B6C81EC609704302B50A63AE435534B4617FA8BB67E030B0359255B96E44382D9BA000D4053E69DA90980BF85494FA4F03947474BFE5A8249C8C49D6B0A0BBF34EA395006382032B2F8DABA44E678D13A0B414CA1279AE367C2B33A1127AE975CE501", + "k": "B27797F50D424D6CF29439755516525121597B51DA30815E111C28F18842B683" + }, + { + "tcId": 31, + "c": "FDD0CCF7BB6EC3504D4450EACDA3493A708E38272C3DF21192EB66064A0009219B04F34637EFAB3E4CAA91996F587EE1FB194A264FA6136BFD280A1AD0838D3FFB22E812CACD7C6B3E13DF080A19009311540884D8A4C93571C1CF1D2B5C2CF349DC44AA1B474102494B67456F321EE1F4E6DB6A97F7FB69AE0EE468FE34DE4AAD512123B2E986C2336C9574EB4655491876455E76EE96AF2C99EC5ED31DA1CDDA5AE20B38F7DB71E9BC5E465C8E0C5F3B9A9EE450EAC917DF1BEE4B5E2487B2BCF717753D9FE82A3710624B205B4C8C347BF1265B9E2D33C26D06A9868F419BD73E4A90EF180A0CE0E133F0A4BE8013E9B4B115F2972B9FE061B82DDF16343C2FCFB782CA1A577B6A882087206B2F8EF0451FE8B2CB15734C463DC556573534E1CDA6BF6C41026FC2857EB24652449C89CEDB57419E7CC76864584F10FF4C77779390F2AF8AFBFAF653DDC25737EE84779DCA908C4A92B1A9065B8389C01974DD74FF7EE7AF7C77749A95D3323F6DB65F897FE345140EDF9905E523D1DB75CEDEAD77C21528D6401A1A09A5EED88CECD9ED6ABB761ADD8B50AB7FF9C65AAB03EFFE3B13031D811C83443912524B45FEE128DEA513CDE29153CE71BDEA070C5ADC5A04AB9F488DC882384628305E3E834A9EC3E815988891B1C13BF41D4DDB120C8D3F0B9EDBB2F743992026F4E275696C5436730DFB0D20572CA8CBB4C44919EFAB1BAB6EDBC4836B456073E1CA7758E5001DC7B11F4CD64847C082A9B9AE3400BD6614DD6D69494CFB7AC3FC727943280D8A9B39DB6C8F083C2222F7E8633C081993256C03266F88E0EE32389B097E6585B83481B220D486C8C2831E0A834E572AF097591A98C15FA6053FB75FBE78204654D3187B95D9722D9C639D881E048A33DCC16948A7A02B4DB6D4C74636023585CF713F728D6DA5E67FF1A066D5DABBE627A50145BE8F1198D81632DEB25642C6135A4EB22692873600A970A808603F045B423D09D90A8EA731C6BFC3E55A33156B7598204B8DE1C42BAF87A86F511AAD37A0B4D960EAE7ED5FF6BE8F6485BF88A96684F7139EDAD4124961024340E1D73FD4111B0B3E3B00242DC14B5EBCD04D38F0B518F005B8F86D5ABA0365503426963D62CA0837A1FF6333AB37F478287436D741D5A8F6457F4D48E389A6A7960CC8454C0FC6B0202BBADCB3B55A5246AEFE7CCA964981C46BD6FCC233CF324A2D97F5A07E2B426202E930F1560162ED87BF2A6898B08E530C3AB885A6B38278E5AD8A9A479D62D1E99CE8DC328EB0EC597AA7F104DF4A5B820811AECE11524F4F1018F91C857406AA227F26EA42F84B2F8D86628EBD4E9495EBC1A33A11A063DE49B83AC9CB27864FA9AB59B122C1F0E72ED41C958F6445A92AFAD91D27734C9975CD3C7C762B670AC136FF7A3A6E11DD39CD07D9C9C12FF365EB804ADD52EBE04636AAFBE8E071C8EE37695954A5C8F87E4DAA8926AA230C0F27E8E420820E84B506D3775F3C8B43A231563FAE1056F25FD234B321CBE271F5FCFD21A5B2", + "k": "2DE879F09AA9E8F6685AB1FE4431FD0352CD99E29A49056F2D116B1E3A77B889" + }, + { + "tcId": 32, + "c": "C6DA1E193FB87E579040413B500E5AF12282DC97EFED0286221A155457DC9E1575719ACF948FE9CD10C9DBFC8E0F9C61FFC9DA62275CF0ED2CB228D2D7B5329E60D91F09277FEAEC8BFCDB57A94110ABC76339C7BB19CB39F14CD9196174327308CE4BBA99B87B641436AB59B0FF8559134DF6D03C4C8BA9027F270D77B92444F473DC2EFBBF81B9EDB4CC81801613BD47E38DD97F637B1A14ADAB92BC52A6ACDFAB7692945946C5B2C72B786445B19178F4DD1D7B2C37EFF6D160346A65F71606659FA58B1329B243BE924544354FE3928A49FC111897AC16E68EA16820BF04A0E3C05AD8F20B20A5DB3018D775847ECB96AA4D5E845DA74B93307C97A6822D474743E5EF8E528A26BD5FD1F45EB82004FAC3395F6E876CEABB3C5B50CC51FAF23F8B19504C25F306B8FA12F02798E8E3082088DF158764E7BBC59EDB6486EDFF9430FCE642303E335C2FBC5003426E5F333194B1E6B8EDE509A5A4850891B56A267A697524B0F8E48FDB5ADDBDF576600A7226E39F62FADF43356D0DA3E4A61D7C45C4224CAD23ACD4938CE13F1BCD6E60D8C93C124022E32DC5796D985D8BD6CC1C5F9B72D6ACA0A7CA15D7CFE53F676F46AC59C38A68CE93158D902A6334BF82C473DA927A0E661A77B8D2010E112935ADA9CD8FD3D2E6137AE834E49F0D50B81DF941E3FC8D4686B89E7D9A3651427E614B756ECF6CEB4F5EBF26049BF2D2DF2E286CDB7F755CD50DE699B0D1B5E0AA927D87ED33B69538A28BD24C8BDE3892B4A42FD3ECDDD7B68D4E3C3433E9C17F81AA48391668F8175B127935499FC2FE1D33B542845C66CEC63F6AD1AC4A8C22F0EB59776FE766818128043736E79FD19DB2A975CD40E5BEC057C7385E3D9FADA5D519DFA3F6C25B018C65BE0238FA27455C6051EB601CD3C6C7C5305FF6350B1FE7284D79CA8C118CE7ECFC0A86114B4E0930BA0652E2E7DF9C89F54CA1E5B3785DE8130A0F68C276EFFEDE4A735969B80124CEB1165F5C58D581A60F650D5D093E30793C5D0E2F6EA8FFAE7C21F43F92F7FF4C69ED79361EFB94E506BCA272F07BA954524E1954C23717BF6BC921620EFE4ED237A3E6FD1552499DF79AE55FFCAC55A364E710A9CCA6092C8E976396F995EF0A57DA3F888464C64431ED98815FB1E52D5A89F2721C8B62937D943ADF2F8E22E02027C574C2500D6DEED40134B435B4F068BED183B6530791063AB750BCC1D715B707795D00067D68C2CEBE3F0929DFDC8F3BC168A78F13DBC4DAB28EA04029B1F8D4BF5F5621BCDB3495C65F394F19E9FA87C8D0D1CCE4DF128E2760EF5F391A58CF719A90F3981B1390E0BB2514449DDD3A319A7B10685CCEAA1EDBBF72CF89E39957C4D34F8D8567760E866E89A1073767E22072C17983E83F825D6950FBF7074EC8CB3A2ECDB8DAA93CE6991D843098EE35B274B2405DE87655AB519D3C4D4FDA010867ADAF5F36CAFC731B94DFA0C0781748EF7DFFDD2518FD38B607E47B5051FD6834C337EA6E5C1C2643F60497BCA2097C91AA5BA16FE2", + "k": "BB2712D555BF2B2D921212EDFD9A7B38912048944721D2E235EE31E9EE13BCF8" + }, + { + "tcId": 33, + "c": "DBB307295B3C280BA1AB85C49A051E43645F0E1AC2D0BFAE160909084F2D501E41BE70217FB89A0545D35C1C18EB35CED5DD18E35A46FA578EAE084D90764DCEDF26333CEA1E4E87AD5CB71076AD1F5ED8E4F6D3CBA7BACBA9628CA05ACE39AB8830A7729E93C9443125B7F3B525D8D5BC7F52FAE296A956D838DF9B3F7AC1E0B6620FF46EE859AD772130DACD4E0F9CA421270C0A1391F75F8C50DBE6E58B04AC615D05AC683E3531ADCF5DBF48AC2F28C56B2C8AC474B3BB2A785780F12F34A471C23B6049A69C99A8B7CBC62D34E3C6CBD9FF1CD19DE1399B8BE867E6B9ED4A340AFC55E97F8819499FEB773740EF06E1966E5F337179D4E232581D7EBA5F06D4977CA802CDC5D2B7ACCB378A4E7A24165BB7F42DCEB800D80CB52D64D643D43DFB92569495A5BFF91DA9143364C0CA733AF7D9CBD897493E9C4BF76DD8C563DEB7693067F733BE050A76D7B1FFC77FF2E036085ADBF1906F553A6FEF474B06FC12E719E84219BC5233E469E77A1B8BCCE6051EF919096024B9FD51B91BCA69B9E7762C925E8166870B930D2DB55D310EB6A218A794575DD8311DAE7D987D0F5A9CB1FAE677AD5FC1951810CA84BD6CBC928630575A12FD8B53F63284CACB341BEC526CD5A5D797654A339D1029EFB5C60BFC239BE2D117BA8928600EDC7A1911B754F8DCD70A60260BAF54E6980271321EA33D8C185D0E9849FBD25A1348FD4B72851C1B509E6C00C108F14549D3DB4B8A1B6C3BE527045E4A87BF903429C7C7A321F0DD477FF686B148B2D9BCF4037A50A30DC0E2290D4A4F5CCEE55A3BEDCFB76D21AEBAEFFEB3DF6AE165B173595B7F15246225F920C299306BD66CD5449562100EEE8DB78A898DB197C4F1109AE6159F0D0B70C7A1662436F8AB69E187574234DE8CD596B668949E5778DA372B2DD0AF6949716830C3A214A1CBC3AFF79018D17A154DFE723F4C4089592A9153DCA9A09764DFBFAF104855E354815CC143F7FF3D18459E72D8537DAC419B01355B1E6C0690053D01941782F42E1DA180B7B4F54CD5C18A99E2B20A7C34D4ADAE82E501DD503AA5162B0EACF3E7850CB98E53566F07FB918F7E944B9C5D92265202BC27D1F35DC8116B2E45672B4DFF4AC1BF5868A60EFDD6A1BC34935DF05572A85354C738641F215C63479F343C2214FA3F54196CB4DD6623D3409455C8CB846E1455722F9887506889884758B2A038623D4DAD4356F2FC1CB8EE0EACAF1174796EE2F06B547C25EE5EE2A76EA99B2A66641A9174C6717DBDFC8570B37F16C248F3ADC42A61C139BE0091C0700D267AA488FD16791DB63536E98F5C166285C1262B4EC747C40269AA0F90B2B2E41FD8F0854AF01E1092A683CFB06D23CA163E1F03F05EF47DA970EFB8EFBE4FD1C77A93062E2E20449759B02A45CD5C077B098A4C8A6AC0820ACCCF0ED942779764DBE471D9E625CA2C6BF9645266E90F11F236455841EF1F8F189119C85829DEEE6BA38E48B5326CA6F3F947A2D1E8057EC1C420878927E97108AC9A7623AE4A9C", + "k": "2A98C747077495FA0449608CAC11798A5CFA13381D2578735E0B14626248264A" + }, + { + "tcId": 34, + "c": "53A8C0D39E47C50592D4DE027DB407E13FA95FF51B96F332D6EC52DDCFE26FC2EEC3CB9B3C8DB1B414A9E135160C012EA956541072EACE9479C642169DCB98E841EF3BD7427BB4E3E303948C0D1AEF002992A9CBC9A11C3456EF05D6990D6288EC32D854F6103E5A8F44933BE4A7533F7D9DD063E1F312CEF862B2D6D8DA1D9830E6889C8A2DAACE80D5A14B110CB5F47A096866F5D1AFEAE6C868B4AAECEA0E428343FDEE7B73D8A4B082D77E2033446F57B56DCAFC7752F2282E5C9AA7ACAD94EA3DAC2D164BFE50F60BDA5369025C986467F4698F294FF65BD0A885F304A32326E627BADAA9DED77B7283673FBDFF043B2198E0944632F2CB40221044ED8BD99C63FD06120A61EEB6954353DB4AB014162F8B08D114B690E37D4E996A9DDB2F7DB9CB620C8ABC0232C9CBEB80B6A9237FCB760BB87164C0112494F4DC9A127B1A00B82F7FE6DD7D6F40F7078E44AA2660F8DA72A05AC7B1AC9D6F6D816B46810C1F15DF6B708F7A9B4EA222F81D93ACAD51A1BAA9B8DD2DCDEABA3AC02A7EBFDBF3109B3F7A5B265381A2762335BA3CF987E8B35CFFA42DD9EBC3F46AF79A34C324F4140568A7C066C615B6027BCD362B60D0DAEB25EB6A456EB63DEF1266433859FF6AD6DB12C80DCEAEC0D92FA4C72060B9B30C7D9DF00BFEA8E4B7F78B60F1AE9E0E56D153456CB09524122277F9119C51CE3FBAAF61BCDBB80F0FBFE412917AB5F22FE20F7905C1608FD72DC03BB4C5FD36BD8ACB79B641461689EAF987A4033785ED7ECD1ACBF1A7A5827A87EC9BB999F38EF74F8F531E949181FCE6761AF74F4D3BC2237165F11A53FAB95919BC35AE072AC9C4799B8CEBA50518AFF70776074E49EF17A2ECADB9AD92D7E48CCC52660574ED28C77D804EB72286D6FBE13822B19B23DD4E1401663F12F5FF38ED46228A87DD33EEF30F5C54A427A234BB02E5AE9956962BB193B9501100DBCED5DD272DA898903D188F7CB4BD679A908465262A151422E295F45C39CB1224C9B3C70E9BE3160B9E008194856144652916CBCF2D30D897EACA0374D3E677FC7474D08A6615F5A1814448F12D6A0EDCEA6D244B4E077A8836900FDA04F9BD10C1F90F5DB5E5FEAF27604D95A612623DAD9488838F791ECA50D8FABF7AB0A944C6E8C4214240F6692402041C56E26EA8A18C7D773934069C94141E5AB35A7F019565D8F9754CA351358378757475C81FA8F2A82D29D8075BC1E753F538AF986F66462560559A236C2135CDBD8AD921AEDA104ED3DF11D786E212D95C2171DBB9F5829F1C738DA069DAAAC63808BAB30AF2CC8375B3B0E69933BFEA07292999BCE9FF05AF5EB44402BEFA5F4874290C5A405229D4B49D4748BEE9B74596B93424FA523D60033AD8D8EC236D33BE9328BB568658C110D7654DE1D73C6EBFDCF70012E5E174BA5AE6B4E795EE3728FB438D5150D5E7E81EBD336E2AF751B146CCD77B386EB932A8FE6796EA95A8629DEB2B66D4BD56DCF68AAA5440E16B1C1D7BDD052623F73183A32D2E1B6AEA98BCD7A9", + "k": "FCDA5E4DA13D217CE923932E145D351FB39CDC96687DBE33B43897490F7265C7" + }, + { + "tcId": 35, + "c": "1ADF26B91C73510A383D566A4FD7456FCDB3ED2D080AB29A71580B903E75F23F48445610EC14B9B605BBC50EB2F776EE9C1C2C551CF79B39CDF723A0D1EBBFD3883A88909167F02DCB9C22161DD73B68F7F2F02B93EE58E68D332065132EC2A962D674BD6FD9EE858410EB04825CDD021638DE9ED3D68D779066F89E0CA71704712D733CE6E27D9023AD237D42623FFBE4441B64BA6C44AC986DE2CB961A4BD2294F05F2182DAF76E845E143DD8846A3F31F6C15ADF0E80A2E728E0275E4811E9DCB38CFEFE8F98DB7D18A8300030631B04B0FF4B10BD2C07783923FE2C45D967A14EAF48B186BDA436C507F077D1717BC42139B69330733640A8BD4B86BA06244A4FA330EBB727DE6EF85AF2F3BD59941E12FB77BD679FD117BDC29A9A1D469D85C087890FBE205D7F21E4112C58A2FE9183749D68B58307B64D6D0B5442E380FAE893D802BDC37E0AD338307C9DC3287DCDBE37C2AC137ADE2BBA6DA58A99C3DB918E8006E9D6C5BC391F48990051638AC2CB1553487EC120A343DB969C0A1EAFB6366D340594EEDF0EF090930E99CB732A3C8C9BDA7829AC1FE2C0F34B8501B232EA69E9586D472CE9334CEA011C5C38EFC9D5122D7E485E0E8DB0E063F90F5AD1D6D27C7C09E2BA0A16154770018EB399D9EC8E37709EFA5ACF0C7DD61D9CA5093805C71151803897B79FA600D75A91EC0148A6346B350678034659089FEC922B44176DD5AF8DE8E5DAF5FD24F86E08466EB8CA093C56C59AC8595B4CD4212D07A1E4025E25833C2E6A36BC2C4A6F4F3A64260137E49C2F2FEED8B7122E493523A7A74653612E0206927C4B4E6B37693C653BB9F20C8DC5936B771B89D5BE50602DAB6BFBA865E5728980E268167E8048732F2678E73175541BFC27FA54677BBC74EBB429E3A0E2596DD3A3916D4552EBB107AAFFA73E3DE0D48EEC48A5FD97ECAAECBCE65E3B439C3BA19800F4F857A0097EEF3398FF1108EFB75B1C56832545E55D3B7F05132F1CECB951CE049291989D43010E654F523375CB78CA39EBB013780FB7E89ADF5C04FBFE3573D28D33ACDDB9F76D97241EB52B5552D4FD15B33385AC9A89992EBB060E3D493621366B8C0C31FF682B30681FA5B4827F1AE141350DE624E33CF406D3951527F65EEBB2257FDB93497AF85545C1E156D20927A89FDBDABF57340103743C05B5F198F212E01AFEC8260EC979017AFACA1183B3C2AB81D494765FBE67DB7DAA8911DBF0845987E8CBA642727F2FEACB68CF5DD8238B4AEF2069EF275D2021713EBF56E4B645B4226086365053AF26663209A32F9AAE6C69451C8E00DC9DD49115AB86F3C3597629BF9FC097CDE05424C7BC382AC7CCB7F972AF084A88125B8DADC00848826ECBE23F50411AD3E3E8BA2598E11F97966D84411CF0B5099C2066BC35291A5C8267C9BD22C52C846DCE7E2CCF7A00DA5C3EE75DF4770CD8854C524449428280774073D231E54F6B2FC1A2369DB14456531AE4082964F82EB1A9389F2044720B1D7EEFB37838453456F1A6747F104", + "k": "CF7F149E1C22F42078B37A96743571698B219ECFEF17E92830488F19D1C99D66" + }, + { + "tcId": 36, + "c": "8780528AB82D4F176B8BE76E9DCA02020D329B611A02F04490727A382D3E4F7171149D58AC4DAC7BC2FE8FE62ADA687F1B34A36B772C8FFA94D19A0E00502D6F1C452C482C8F3350F7D282E548650700504A5B9DDBF42FCB1D9F547A48F924E508A7F6A2D9CED9F45B66CDBB9CC8F0F3D1ED2B03D1C724A016FBEF82AB35A29AF064BAC3B2C0152F20B52EBE4ADC7AE1DC832491F25DCEEE6AF5B8834088217F89D0EA497691EA9395E3ACC3FFE078EF3ABBF5A2B791BA56DD8D26855AA8F0AB1FC792DFA3B1CECC8A36B8759CB4529C0DB51FE7931E6F1334A6F7B4C609A839073274DAC90C791FFD888C6B47A304E268D608491D6EB29AAC76BA5921989E2E9FF05481335C7457B222A4013868F6CFFC83C9027EC35AFE0ECAEEE6562B2D86BC30CBE4F2B40B9721ACD4404241A88011A7C5065956051FACC6CBA159DD742756A7344814BCFC5E9BBDEA2DA4481BFCD27D9FD83C4508556E4EDB26D5042A4735926E4CB510104C48F7FB284BFC73A52FF9C53C956767DF9361A689701907EE6CE69991455F7DD4721BFCC44D11DB3D0C72CC142D3126C8B4598B97236E25AF4652E48BDC1EE5E62AEC4A1F9BB1AFB45C07AEFC713D583DDC29B3B40B10C8E44BE26D4BEF5BA3DE4C0BBFD00C0465DC5FA1189F4CD14328C2EC32593A367FCDD03694DFD1D591692D961A5E94D3101544746CD22365505BA05244A4B49F57BFF970AFD8450AA2AAC497BA1CF2F1F804A01F4A5E55E6614625F01FDC84EAFC1D1828DE13D907757938F6C031D387D023D66DDC5846EF5D6249E1151A5D1DE490DFFF5DE96DE98F1F84FA130CBE47DE071C8A4243D63E7078B3382A011B5D6D2C3E7B9D13158FB8F1B68EE2FE65CF90A8F9645E20DF8107FBE735EC60A9640970DBBA478BA9B908A3E31C4D943E66DF55DA2AB55CAEC9A004EAD63BF2BFEBA6CA5892B72F533AD2C8E435843323C6362D1A7C1BF7A12175CEA8EC412DCA6404503E1C9440004AAC4290172BCA301C62CF50B8863170F62B5A1E94B0033716C5A446B688F2B25FB058AB32611C3D5769941A4A5815936E58E8F720C32661463AB90EAE025F787B75383502456312B04B7EC132687C73E758009050E55A6C8331EE3092B0D4930C8E569ACFA3D6330A7AFA5BFD5A6AF66631873408770B9AE9EB8583F930D54FC977DCE12C4D7510F05249AC09E4F5B268FF4E2CC785E0EE6371AF5320E402CA226EA00B9F1F6CB6017D14453C51F14ECBE9032281690F0D7EE11583E9E676200C372ED132A56E52ED225A30D6FB568A3B216237BFF1A807CB215EC2B68EDDFDD9CE82E4F70A9242E3F6B2A62C8F8E77797DEDBF6F6AEBB4B37EA226DA4C60D2B7029221251306630CBD821E7F0158FAEA04886B6A9B4D5A5F76088B6D1AF2ABFAE97FE400423A96BA0E9AC81737B6C12BD4F8F5F76094E06FF10FBBB89728298BD624D1266084A626E093F2FDD2F52BAC09B657B9AE45F2D0EDC166F3BB7B04EE8E756B0ED864046C5E6EB9D4638A43FDE7315B1D6BA08C8AE597", + "k": "B40F5E9DE4BC580748A0BAB895056AF914C071C6FE63BF0902093E3633B2AA5D" + }, + { + "tcId": 37, + "c": "84DD21AA6D3776CDCC0ED7E15EC0E5BA3F5CEE30EB78436B5E761E393C6D7719EAF7A296D9AB469CFC997077FBFFF05C482EC2C43B13C6A1BCA3D68D854367FCCD0984C8D5712C5F906FCE2CBB672186A76B81249D39B7BB5F4CB89369E2A7C06A5BCEB6A57D93229A100BA6B9F86B5CE2A6F38880474E0B5C24AB1D5CD6F558D2C5E572379D50ED05F78334B8EB55F0E3708A3877B081650DB021D5DF26F718513EC12A1CB8CA797DE541DC0ADC9DCBB37D5224FBBEA0B2230F9D63758E6E257AF1D0B3744341F6B4B9C4619F01C6D542E15B2A3ECDCC4111E33358930F772BE528BAD8398700AD73A07A72D76E8FC9605E56DAD7F8FAB1F6AB13B7A7415602AA28017DCD93FC0E319AB0370D8E3980ED4CDEF8E8C05A4AD55A654C46F5CBACA462FC29BADED1189EC90E62F2AC356626505E24EE3E8AF434A8FCBAB8406ED5A50F920B28567495185F6BB662881E88400E633820308DCA94DDED9D1FCE9FC8CA6CF71DD823327F9044F261621E16C92DD9B1101D8FCBED9B4E9E4956DED72B7DC541666CAA89F7F54C9B30E63A1C4AD05278B36C92BABDE2E4174123E9BEF2155B8C9B21C18B134E53C4236C91FAC8844331C7B05D4F050F3269420C8B6875EDC0193C6126E9115B3300AAE6FAB84CF73AF5DF2D57C31CB08E1C24F90E301DA8EFEC41093C2BD9EA2F8A2868305DA2D3ED8D2D740B696E368097076207207D4059DE7F92760CCB26D035C2C5A4E9CA9F56BDC2864C76284CFFCAED2C4D43944420372A6F20769B0881593EF12D57380BA49EBCE298B025C7F2EB260D27F4B475593D6B18C0B498C64D4116B280DFF29720F299CB6B5DD5393D6B4C53124255488071B54270284725E3F1A262C420BC195F267D6B7F9DAC1EADBC6AB8CFC66B4686C88364B5D4F396F4D03EC71410DD8C9AF0796BE1DB98F73AD873F126178332A94A5FC41DF40C922CA39DE3B9ABEE09EECC4985D9AF320EDA78812AF88FDA9D101DE56A897AF890BCC2933190D3BBCFBC8F62C4C2DA1C7DA3412992A426AD6ED4A7A46923E376DFED0332ED385DE131813FC3D37D722124B0CC556FAC716381760E01EAFEDAAB06A25ADFC7CE8B099AFA6280E7838C81873EE493D35C8B12F1A855A30195EF63BD75C00F8AFACF221943C1A6984385FECD60AA6CCAFA2E5CFCF12C2359BD03FB2A9DCD946F830DCD33CFDED144E33A8CA815F46B57D18EA760F5A4C2F2877944E04E311DF9C908A3C164DF2FFA9109D0ECCACF869D19128B88EE176BB048B4EFAC82E550ED47866F4F37912BE9504EBFB66011F5781E78E6EC40B3E95431D6B6FFB113D06CC66A7584E80A8CD0A78BFA0D1DFF3C9A3717369096DF62CC2194619F4B8BD07D8E9E6FAA09BDE9137410B49B4C8B26A483CC3CC8E97903396200C55C26D0DF526CDBFE0B2FD2DD204FD4596D78BCE994F2A010E81043CD480DA617CA534807BA580DCC92A13C746C4065A9DEB75B3703CBCE9B0827260D3B431C1F266C7FEA05E34F7B28BB8041B2C4F190B273ACEFFA7DB230", + "k": "8F8A48D6CC45A0CCBB62B58D267782B9022A6684FA373A1CBD38F84E5EC3D44F" + }, + { + "tcId": 38, + "c": "9392EEBB52BEDF190BFB57C4456142B491C56A59DB1A57FB69B16EF28FA04A303D4EB85A3A51BBEF5BA2928EAEE806B56D5A1FB74417D00B93A77149C486CC2A0CF7FEDDDDA37E21496087C10DA5CFEB0DE0CA1E4A24119C89BE2AACD5BE1A05A712089E7ABC6D07D71C397B6886CBB1C5A1E9B60715DF6372CF13603062B8203302D84A9400F869A7D968571998379497A2C5BB7C80E26E0EED4225E081079153D1F682314FEB5F783CC8D1D86E662086827EFC6ECE4C9C2341BC2A5E4A4AC674FBCE48072A2F603EDB31B19FF76DF916711AC73148C697F8E3E531714E8A867269D03979CC6F6B761CDABB7DFDBB06BA1AC39837ECC5F665E9E1C6E9B1A167779B0FEA07858C9386BC66BF4B486553A8D291C18562AB46EF127998B2396A7D51E81610918A31A31ED52336A8CE08904B6F0D0F629673A21997C5F8B34196B81186ED58D7A9BB9679571612CF7D2F45FECA41292FF79C8F43981A5CEF1DC823E2F5A02A2B492213AFEFDDC4629CF861E3C25214BFEEABD2773028A2C908AC92992279AA456C6D5899F5C2F6F9CF5B78F5D1C5BF7D84A4170E5A76265D899956E36A14D6B1E5329B666EC53230E76560B4682C9450B8B946E3B339871C24C5B99DB01BB55686010666FF3A42D44DD96C394E9388270771ABB34F05B5F861BD34769DBBB918FBA6841E4C30CD5CFA25661E5C96FE9CAC7D00AFC736E53342ECE8BBE2CEEC57064828059CFDD0DEF5E59F767BB410BB8017ADC5520263C6B6910E06143FDEC5E77A08941C77B0C0C615C39EAE64AA7B92BE3BFC9D3F2FD33B6FF00481109EB58C9BFBD1E3D7F39078FC7535DD512AED4105328A25B3B779E9A93E43159F175E82B837665DD35249CDC0F48441FD26F0EF50B758DB916B609D1710355D08BDE36AEB21BAF569C8EB28A2A5C1E5F3B3F24D650CD7970931044C54465FE82F41882FAD3E5C2DD7AF7352CB4265A402F680891F5EA6C2B5CE96D169A8033226740675A4823CD6AA1E10F93BD278F8BFDBD412FF7777B6A54AD53602703D5193D41EBB2F7A57758A514059B33732CECCD1E4BC77A099C9CDD9129B5511BD8970831F78AD1D40E17866BE7EE84E6265684F8D1EDAD119777C7085F37F42B4AF4D4D007B7AE3D007131E3C59EA79B8219BA333C0BCC6A878BA338F7804E1C926D7689A409F94B8C7C1A10B3CC19659F9FB26EAF0A57CB2F82AA7F88B4249FA06EC4317B9DC464C9D2F436FB9A2A93E5DF0588253A0120AAFC4080D178D21F0115622EC5ECCFAA426E3CCE259879351886884C435B95E07D9A29799753D8F7AAD2E1CE800E66752C672B0E83D4E03E503E4893EC0EF0EA098FD5A7DABCE942657AE8367885969171AA8C1CEB0AB12937A925AB9D229C21E6F7DE825717950D7ED5FAB78BA982FA445B4696C61AC757E2057C31949F3CD22A4BCFBA3F0FE15FFF885434B6FB10A0D7B3FF7AB26FFCFC3EA00A3CE1FA305DDBF181E1AB27EE9EF11DFB15B68648A592A32DBE02931FAF07A3942214D1542867B052E075DFC44", + "k": "09B6D9F1153E21B37A3AB6D3A5E32D020F144BEDB2D96DEDADEA3C8A34093BE2" + }, + { + "tcId": 39, + "c": "E7ECA5D402A61441A5AA03BDD60120A035330BECD6FB9A2D945642D78DE37B2364EC543E895D42BFF7E9D32F5DD5DA2A47691C4294EA2CB0FC4CE04EE08D06BEAF20103B2B5DCE3CB52ADDAB6A22388A8FFDB023D719CB48C121B9289086AF61B57840DB737CE348030CF2C69807B0E107F83165699B6C201F9374D0132954D82A2D874266B25E04FD3B734AF4AC2E8626B6D2665112D3A72A9631BEB06407CE4F272DFD13690FE4046E919091B6FE88B4DD937779040BB77E0769B5D81FCEB4A79FD39A7857FE78FB27133E2C8D168D788BC086135D6CE45D941A4F6811EBC23CC618D2171270D722194131184FEC6092FC44A7CB41E3410F2AE0C9DFC491BB425B492F6020194F1F4B04E97845C3DA602C8B07BE74F1CDB1F50FB364259CD9A7E86076FE8FB0364368F346C45B7EF57077BD4C0612DB2CCE3FEE588AE8B29145956D1EDBDAA86A2C3901EDD4D49E229AE9C0DF7702F87E54A93758D85DED3437F5CA3E9D03E35DD4F497C7C63C5002A95A3BE28B20DEFE0E636BEA11449766AABE5BB90C0BA035205C0282D9509097371D2939303DF6BD4BA525730E58E96A6A051E895E377F275689CE577DE09AA8C162B510D35DBBC1C3D63E737481D320A95F53B3879161AF7E49E53673635235EA7FC0B9FE33CE8E6EDBAD4A279D099648A3E82998B25EADEDCE07AF274536E0D57772659296ECFC1BF05F1C175FDC5966B6096271FD019E09F0A27A4F02DF2D3E1A7FD87EE23D2D3BCC59117CDC98D55E9479F87D592B7446107DEF563AE1DF6064F191747A5B3603B40152A1BA7D0496A7DA4813672440A268CF82E18DC6928C429308C4A7B1CFFC0EA521381A5F6C8569805FA7FAF808E298D3B4034E3DEFA2EF6E9B6EC6A8D2D1CD20B964F7CEFDE0C6894C5A2F0560458D5F891336F4DA1E11CA18C81E150A3266C0AC323294A93FCBB9C2A270CA1A879CE1A9EFACD430571CFA0113AA3AB32BF010B547F5254D493CAD1C572D3BC992A2C1014D1E6B191A641A57C4ED46656EFD4958A07A213ADB8F63C508BAAF44AA2A0CBD6A797BE53E2BE428F801C78F168206A4A18B9EE29D429E738BC099B76B6460E46D6595227AC8188D23B5D0917FEFF14AECCF268742A7AF4261F894432DE1975AD04B713E049DB55348C216D39F9908DF2EB6FB9AF46307F884F51F96D9C7C6CC2D189ECDF9CF4979D9153C35E6547886319E421FE132A7C2F7260F0E8B7F524D0E8F0B3C5420CB12A64B7E2ECC7B43F8C64DBBA42210C89ADE7ABC70D7020EEABFB70E4C206AEA5BFC6BE4BB6EDC8156735F39CA8683CDE75F0D11DE5F2BEBF892585EB18B068BABE97D70A22F2B7EF9EB082612E30E2B92F9DC7916CEFB77A691F044A13557C2B169FD03F137E1638D78A337E81142A60CA1EDB223CBBC112C41FAF4B2343F6BB8433FE91126432AC89A5DA494F93A12B27F732F8EBD566AE78532B0ED727BEF1251B8E08C6ABB9F674B206D5BA58E06FE0FD5DD95BEEDAFDA2B23DB202AE7B4CB481B53F8EFD03504F3BD5B39", + "k": "66A5966419EFC431D4AF26E82A9B7F2061C3B0EAF036512C7436139466051C43" + }, + { + "tcId": 40, + "c": "8FE143E4801CC5250A0CA297ED05A57FF2661B0EA4E17F142DFE0B88ED1F770351957DEFE22B3FCD838F4E258240465D39A8339A9E56F2ACEB61B406633091E8B64AD296E04064769B3D99913DE09CE0C23CE9335000ED9909249162957CD26F89B351C93359F6F960CCC2CF04A9BB620DD984505B88E614752C380760865BA718CF682AFF9B0D239A946E4E2D1E328B97FF01E084C60A7D71C7A2E89D84082F77167AE43725E63B87C5306B8CC180B8A89D6C81CC83B97E0C152D5FDC66A471EBEB82C4C2ED2F86487D50B69B471E6D35793EA81394605A4DD308548848CAC5D0BA516410B20DBB07110040D6828A9D14BC15F492062D7D856F42547B5789C4C0F014D1AA06A97B8AE0D9BD12B0E07DE47AA4DA6C3DB48CC0F80DB681571AB5E5BCACA962019B375EA134552B7E624DAC164A061B011D8782A818B900EA2939A1389F9D267ABBA623C89104C5F7DA8908F0AFF2124C4B6B605FC77557466CDECAAD8025F78829A254627268716A7C627337BDE3F194304FDF747D42CA90994CD2E9CE2608B4EC5A3BA7E761DBBECB47941D05AB90A9CC735A93BB1BF8B5004248AE03B00A96AED6A25242B95E87C9DDB62C9B26F071CF9A504E90B289711474F724952E08E0411C22D3CC6B30DFECE40431F6BF6A498178A7F38CA67A3F4F4A85B0236B8ADC7A7754CBC875F3D6F5A5593F65E674F4EB4013A61D8B1D895A37320B0B3AB8D2FAE68C8A3D1687A82230706DFF706F7CF736E488D3AAB5723662B96EB40E51FEC30284F8BE002C8B950B4CAD51DA243BCCC6CF2540ECDD772802C3A6D7DBF208FDA419F086370433D9E6A2876A3FA8CB5C12BBE7AB3A65CB1385352A3617888CF88CE46C8E8F46EEC222307F6C720FE0EA1DD0C1CCF591838F05571303DF87A7B9DCD803D98C50C2EBFE65E5619E5D7AAE7E5D4EB6DEF30738075A5A22E2CB58E51B933E4F46B153D5F53B9CC1FF9A5B379A528B60CE4F185D50EC8310BDA5E2CBD59A4BC691B4B0153A2EA1F42D81890C0AC36BE2A4470290CC96C800275AA8BB00098F1EF75BEE2AA03D8A23F1864E1F03ECF7CE1EC1457ADA3DCD3B5FB91E711B1B7A2C24470CD90A714294CE1FEBBF62C960E1685F8EAD742C5AF075134AE844B8B072C871AA98B2D6D89663C6CD485A776036E0B8FA202467D1CB00BD8AACFEDF5AC28811B14DB89AD24D641581BFC9B4258BAB879B5FCC76599B37754D9A873ECE0BD21B3F61FC3FDE9BC59A8C5798510895F41A957FB05DBE1FB2A130F7372A9B619744D85B302D44122C797881329FCDC70F370C816940984A61211ABCAB94765C9FDE7CE8CDF0FB37615F3D6099C1E7C882CD0CDB22AF7891AB474A7794BF617ED3C621F4600B5E9F357D72B7FDE144CE196D038541F1BB372400A29F97B8A19A9516F9E6CC13B3CC49F770B93842C63B5F5CBA376043A83E121DF32B1F21810B7A6A6D87F359D9BF50276993025F9E77AC16FD0003B7D127D8EB8F07699EA4F9B18111F254DB192B32612C70FE71FBF9447781CB94", + "k": "3E9350A1A0C1FA7B2FD66065F84EE941982B0EBA249BB7DB99C35E02F5FBE272" + }, + { + "tcId": 41, + "c": "8786F36CCDCE145EC8FB258A683958F3777369BA8F3142C82C57A9D099B948031D15657C3943050B443EE3BC9C287377FBA38BED8E3E6C1CEDBA13F5106279ABC7A4053EB6AF9FA408D8662FD5C7162572225B12F18E4EFBF77EB63C3262196B44C99D30B486F17253CB7B508D006A19096D0CA9C1091CAC12F83667B43C1D3ADD91C193CA8DEA0F709B451899F279C0DE8263A5C61A623B81E2540504CA62B67A5609C311B74F3FF81CF0CC7757FBD5A7ED1338E0618A13986EE359DBAFC5EB677FA22A857353FD644EEA7E986583F3E26C81A057EF2A4D2E73865B174E9150EC95654AC3CA55DF5326D9FEF786321DDB6AEA26C8C37C1A678974C5DA206D15164062C7D7E5B0765BE8F5771B4E1DB853DBAD1462DDB095014032AA7B82FF36EF818EF7120509CC0B8C15B212CDFA6696B3D0B745C0678E4B5827144B5706A5B60549FADB5DF158540B7C21D6B3E5DC57B238ADF766F974806E8F3900C65F1ABEDFF90F730D1A8C46BCB9357B214054CD6EC1932F7A2CE95D45AF54BAFE90D752102D9828D34A48CB4A554F29027765D3765C0378E6D59AE99BCC357CA76448B40768CE7B2DEB3371AB6C0FF4C2533B8457697D526710F63259FE5D22AB5D3D6E410F88DC4F2C5172231FAB90CCF758E198BACF7EA5D2F4045546CDED3E83653D4D463B9324D4DB59390EF5DE2491E41F7792B7568B7E51283C1FCC8C723A545AF5C2E3ABFE4A776DB94F31D3DFCC6DEA095D7B13D2EE8C7931F47DFCE2F48229660F09A7005BEF5F74E3447DF98DDC958E3758C4861E6E75D3F122440278CC368E1E913B8179B146970BB12F9973D462E456BC2A19D8A0F595B32B835D0E80B858014EDD6B4F7820C89740B76C3BD978825B28236F003C0F5451FC88EFB514DA57348B69ABB6446928FC3F3F9A00C336BED4480D7CE61A770326D7199245220D3FA96198AD56AA178AD01813D6D748093C09219D4AFBF5D5DB3C02B4F56D9EF2742BBFE49F7CCC4D04CC5C86D3B45F4CD09AE8A54B6D3CEE2EDF2FDD1306926FEE4C4F811118E93204C67F985BEA22224E63E3D117D91228F4E71E066F977E2998B590083DDD3C6196615E95AF2091F514982CC9014271FA7F01EFD0F6A125F640140E2EED70F40EDC36CCA4B94B4A1EF442F9BF5F86DC2E1E9C18DE9C3B6A3F0D2C29C94C5779473C0F3E8E51351A4FD39407128D1E9C7CACF2A86810720CEEAB5B3E5208FA892D86CB46E6BA0152170D5006AA5641B75423CCA0DE0FA2CF3DF4A0DA753A9522B047CBFBB7CF5E664548146F254467F037AE7F11D4ABA692F9206CC2CF4D896A2FA8F15CC27B0022EF90557F6A15E3F6778D7F5EB69C09618D256F3604E5EC0BF68DD54EEC6C99260B59DCEA1FA637FA09025A5D51199F1D9FCC37325DECCC60EBBF6D355C2E33401DFAD4B34C8881DA90B33F081420091B4D8292CB8C44CC37DD7BA201BD7E043C9FEBD2754B8C65C16443E05F955DEA91B194A06AC1525E97E7052777F3E978AD110ABA03838DDECA2C6FAB1AA430C0B8", + "k": "CF4DBE3A2291DF9CB4145D20A65B7670F7B0920CF42C913C559B34E968E2C8AC" + }, + { + "tcId": 42, + "c": "13690EA6E3D346B15F0DEEA81C8AAC221BD2AD2A33070413D2BC282FCC70FC25AB7F34C3F63CF6CF41E084E6D678009A76B81E4FACDC4707A335958C896CEE87FD74454D570045D95450AE6AD617FF36D4968FE47961E18AD9C7D8CDD81681E3CE9994D9E0DE6BFD9CD6304F26F189C2E85760BF6761758339B70CD8852760D78D53F5D8B33300C09DB9AB247ABBB9305FD193ECBAF4020825766A7C5FD8B1F90E9764AB9873F5F5E784246E9D604408B4A71BD36BD63B75D5948CC5CE0E8C87CC099D389D341E7D00469B19B990E4F7BD39288B23F25487052C4683E91C11E59DD7D803D793E87C8E940ABC3557793A33BF1E751BF0FC560ABFA1A517E1597AE1898B62209BE69242666C6524CBE0A60A8275FBEEED93022015849114DCE1EF930DB67F20C70DA11DB47FCFFF4543C087B3190826565F8B1E785B328DD46FCC443DDD3E6792B2B7820D5CB3F82AAB7DABA81FE1EAB1DA46935DE9D0A1F46BA9379BD221C32D5FF214FA30206D28323BF48349350B7608930E136EA28CA1D2D4A085E019BBFD52A7EFFDEB912D96895F1694D807B72999A31D738F278B7F15FF0CF4B67B2DDC416388ACA719826CDAE9768690945AA0C5FD13E20295605E529EE5C890288A1B452B56E14AD467FF3C4ADCFF262D488D8C59EEA91155F45098187B7829E8AA4560048C341C284937971D4EADCECEF74F38EE957F4647B30DACCEB49A1E08798F48B25B055822F773C6E4B903FA15198327F769DDD57BB79EB844AC94EBD063F985300A876168D7B26DFC6C4772905C006FDE859B7A040EF865E18E1212F0B4146A4CF1C38A03A7A03E23E463951B3B696EE305AA56E5E595F41B96306E0042DCE33610C4FFE09CDC5FCB1A615F2DBE98E3E94D51FDC7060BF5702BD3FCDE1F50EC3D7F5C8D10D4AA0B0E1746A7B50E225F17560CDF77C7A20525733A809E3D5AAE90BE9649E64C2BF18D0382A90ECD4A6C296006477C85D1FFA8B534272B397604B41C9C1CDFD697E9C1A16E6BA98A06ECA4F8BBC08D90C17F491D4FE7A43E28B5C72DCDE15A28F731833698F1082E0B48E8386C469A99D627F85EF17CCEABE23C4A2C01CD41B18EDA0F723284C531BDB800A0B527F01E5BF3134B636FBD9FCE0C10ED402B74293C71EA0B6E67111275351A5029DE4534DD2D00C9CBA4D0A204640A07B5D21AFE1B6F8D3A6CA1C0D252BD8716AD8B8B172F8DE3BF07CE1B6019498E7C8A9FFD12E5D5285B1A3D31D62B1700FA239F0A56D60D0EF6C0FDD4612F95DD7962EFEB698F5AC7386A3EF6DE8B95A531A5CEDE45D4AC80310C66BCC33C493915EF191A9728A5B10E1254822783EAA30465E4B98B0599BF2BEEEC7978822809090A318815FD459C31FD025FD17A8004CD343DE63F6D40F09F4F2411DB1F95D9ECA89F8CAC67D0CF9CD2B70CFA950D16B7D0CE6510C34D710D2D144B89555778F1F9F8D441C38D0D1C566B7A2B618697D4C295EA501A92379831A3B1C2A1399E63E888781CEADCC173C66F1461BF45D8122E451C408232B0", + "k": "288188F4A6AB55D36C97F58CB58CB2CCFA7BFBEFD6435B3F4DF4CDB0592D59C1" + }, + { + "tcId": 43, + "c": "38DAA1CAD9226529F3A46A96AF119E14588E5D11C20F64610042DD2752D53BE4028C64582252E2739BDD835E7A99539DF6D202745B3AF2F83E44147990893F8BBCE5481EB45005375F79F33264B970C0CF28B71875F1282E7150FF3C6159C18BC53B5CA34D72C4134EFB2DCE1DB44B59F05B07B44E6BBCC0C9B4AFC7AE2D2A021B9CDA99F868979E703EE4A57B5C13B58038CADEB30138348EE3B7C61A5B0A87C93008BCE1A9F6BBE8705D4FD8B2FA5809E4AACE0930869DCEC28B227A2080FBFD28171B82DE4EA31A9396C3B1EECD6EF8754F56D92F87D9253D6F4E002BBFDCF580A614A65C786C172AA3DCAC91AD55D493F61C07325F0C87A1217FEF1E6BB8F8CA137E2DEC63E1D6C24CFDD1F65C28117AFE5D7932617DF670983C7D0B5927283F33B9C1EB3E472E39CA651A32C72F73A9EE39516825E20922960F577664C1CDB69BFB2D628CECB0B92270AE0CA7A4FDDDF8CE127C3ED9BBE22B21822B963AD4E32DA0CC2DB5E30D25F0FA5FB5362AB45870F24E577FC42FB40D56931EA53CE923312137D2E53B389B198A7E5412D47787865FE328E3AAC597B640B9F5707DF0A89CC8E1A6FAD89C27DD8C2E1B4077A4045EF7EC15FD6318BA518A1E6BB2FEE3ABA4DB1686191BF9B91570385CCDA77F509EBA4E44FB8BEA42BDCD05466014E70F928E74843AA4A81125C61EBE1E1221770782BCDC8AD26FAF9E5E605AEAF344D6535B57347797A68289C32C5C42593297A61E5B4EAAB47FD29E1226D2A8757E04693D9648DF35FFFA7F27E39542D229A445E02D81A3EE0B76225A22C18CB03E0B309B7D2E44E79D4E6532596B26145770AD161A35D5525B0E389DFC3CA92DE25E3715387E52993361A01710A09C2AF48A36E4AB7ACBE1098DDED876D199726AB1CB98FB7884131793310FCA38B9640599A37DFB574BBBB0AA27E7A907C4BE1BA074D2559BD5F32A77E27B0D531397D80E67038EFB51D8E0753D4E5427D85723053DC3521D577356B15848D60FEEAC820D3AE90AC7AA6F2A7110326B2C2812F9BB6BA348F90D96D8D7D4FCF41EC93F2E3216FF6837667C51A89E151611DDB9DAA6CC08EE38C49261781CF27210C985F25C92F20C629613C26CF45E0DBA4F52067C488EC97A9059136EE2B954C8F94D6E17D9B895AC81927E31D388E50B2D163C42C7CB8203D229B996576AFEEAB9F7E873F74CEEE2916798506D4DACBF9C4F5453770C7BD318B6476F8B5F1B9785F54F40C31849FE90196FFD135E5D72376591B68F87F7090330722A5FA42845CE446C48B6E386652B827A367153356617D937853997FDB3FBBF42C7D59B9D8D7DF39715464D9B2789EECE4EFACDD851B6A9030E5EBB4C73C842A775A11B94EBE266F4085C2383BEE5B24732C85E331CE600C87F1D36A4EFE23CF2F4AA77C13F298938B1E5C6BC58B3386CDB854918E0DB8BFBC9395AF7EF5692BD7BAE297A68A3A1AD97B99411BD88A6F6D8270B1151FEF581B8EC7CB31A401E12548FFADEAA209DE7176F291E4B47491C9B345E32B6AD7F", + "k": "34C28E6EDF261D36DE2667E7D8087A44828EF630195F49C1118DFE4BD1697F3C" + }, + { + "tcId": 44, + "c": "C80A4591B70106578C027051715E39FC091235C52B0B93A92DF754CA07437F99C163B84D69A4C402DF9476186F3D21C69B711B9DDA456E23A6FF21F3D6695CA4473C75F7D2D1044255547082C1052495FF5E9B4FA5B80C5B446880C66732EB98708356B933CC0D996E66A097A3F5E2A72F5CB2AB1ADC2E2B8F430C333D64532E79D41339B8243AB22BDF81B4179EBBECD3FABFC766D42C9E665F80264570A806FFD55EB8041DA1425A1D6BCEAE7412B714EB2385420FBFFCE5BF11196E3316AB31747C828EB47F199D6E5EFE6BE23B1949929808FFE3D6C7A6C93E56B5FDDE459370FAC0A45A60D852F49186A4FDFDE6D12720C36DE8842A248DDEB32D53C3E9BA0A415C59397517D5A4B9BD656D4E6604575924AFF2E389EE2FAD99BCFDEABE9F97D3FDC59AC48DD37F0086EA5B99257E60BB7E9F5B7CC4755A076268E663CE7B7A92AAC476B04DDD9B07841DF0984711F96833818B5F4C4142F3F2B35589FE47E9BD719DE7DC1B51F478C86A724D06142857AAED925CCC47BC81E6400E4B899194749BA265D4F103734E5BD634ECC68ABF54F77F4C37685F6AB30434DE3422F05F76D2717043A57BF22715043CED882EA1D71F7BC91B22B009D23F97B6304988249CF534AF9D8F52242C5E168F9BBB82A0B2A277BC9B111E6741AC7D619574A3F437A8935D82F9505FFDE9B770AC2F2E58AA08616BFB246159D6E88BEC0356A7AB6E402A86517123495D077B94346C729BD0757464B6709D3EF9F68FC4257949808EC52F28815A67EA17AAA715564AF950BDBF1E5E830D754D2D929C454C2F8FD0614D673029BDBEAE50705D24A9ECAEDFE5E9ADDF4EE81FDE3DDDFBA93BAAB8056688808CCA40C8E7AC8ADF2B1D4B6B78E72A30436578A1FF1C33B38F6319739BF4044D3726D34E7EC85D3C2A8C097A55DDF10B3B951229B042A07C938F2A406E585D4750B59113F083C1493CC93FF7885515579C064407DE3594AE4751B4801C1087020C371EA73D4316DABFB7F8C4DD5C243059ED6B5AEE2C64F0CFFB2FC2854B08BDF4FA0C1A20402A6D074F89DE4AFE135B5EEDB73231886FB821B5C6CAC65ED1D3DF0D3F3137B794CEE41B7002B76DEE4BF94C2E93D7F010F6C7ABCDC706731402CC3225BE177CDE4CD685F0E1FA5ED8793080EF312F9A6960E02BC0994C175B89623A2FD1D0DB6C2ED0561E4EE15A09AE582FDD5D87E812B25FF5D80FC0D873BBD05B59CB36AA332BB68E214B71E0656F132B0EEA751E72E847F618397E3B6CB5F7E06D11B1118E9E059D38BA79B6FDDD0D90475C6EFA31A7EC02AA9BF1E555A55159E09191E3A467AD6F6A253D781157216693107680CE732006692BFC06973AF5E59E7D249C3D16278035253C7856D6F8124B71F151CCB4BA34000BB9173B35D7C11058180BEDA540EE29A79B2CDF81DB72DC92F52EA6EC32D1D304093BFEF883753E4A1551066D6F705BFA716220CC693361F3621D791651A98DA8359925484C4E55AACFA4EE83DCAC9090F7C8B1F030CDB6DCE612330D0CEE1F", + "k": "68B2080E96CC85DFDFD58B777B1A28F74FFEF9CE8AB1B9EA01490419A50A3D1E" + }, + { + "tcId": 45, + "c": "7D99714224246BB79C04D28CC953582480D4A3C6E7CB69B2736B25AD5A23C09A3682E8BBB8879CCCC16D0FD9C01B1B7E65350B59AA013349F9A39FDA3268085A13D7C7D4D61A897A60C5CDDAC19447C500084574E001B207BC60C42D714B8B5654DE0EA728B3C82384E55626624C229FC55D872B3F5862C11E511486510EB13FB396ED5370A2C2F4D0528574BDBF940FDFAD614D20F2C08F5D08A5A392A85146DD6E1C0F1A6B88CBD2392E9F672FFDBE632DAFF3FABA54C935BD5832D0C3138B08DACD27930C0857DA112DDEBADE17F3B1CBD98EB1C45A4FD55000A8DF86A12BFD5E55F41FC0343E8532E6E385B48917E0C6C46C1326463A74C3C99FFB1E6961457D509DB000C43FFCCA2525EC95AA09F1F04C38292E30AF18A634AFF0DCA15DDF4B04D3A4B77D1F56B1AA047FD73BF93842C3828A4DA9C8AC053FC11327FD8869718E8CB1B3194942B8154402D94196563F4A1556C4B2BC494CD11DFF8B9905CE2A6B14FFDA3940962BFBA8D67A647A91E218BEBF7E3F8965D05138D5365583EDB161609F8BA8D9371151FBC4D3520EE881BA98BF33DE44C500C050F623894E6A7DEB5A098888E37A4B8C6CFEC6BD7D4207B9179D98EEBB7BF60BC54D5952175765E75F1F93C01D1059F9D6FB4E0B4933DE6941AACAC48131B3E187F6DD0617ECC78E7AE62F2F60C23CA4AE4298971933401B2BBAE2762A2309031DAD159ADBAC97186A5925BCE028E53203E501D8D3EF212F2BC365C61AE7B7C74B2050E9FE662925D9E46406569A8B5CF849300FED1AA2243DAB4FF4F291F9FB37EF5E162EB2748A834DA951525F3EB8619CCC1C3ED652BCBCC30F67991B5B40509708D8B8368EE96E3BAA1148CAA1A4835995D8B4521A81BE3A26422459C9088309A2D46ADD289B03A9833712D6A7AE328429885AF09DBA8E3D7114B1BEDF1A7C831453137990FA33CB6E4268F7F3E70EC41E135303CA68F9B98F2529D248E4C62E382EB3069D1E87213274C47DE48529B8389B745BA232649F50A259F5DC36D1695072DF970A200FBC95B7D966E5DC50BCF53A3BADF8D55C3434F9CCBA5C0CD56D60284B1CDE52F99EEC4E6BA086E5ED44CE29923D31D2289F336EB79D0991728CDEC076322F9D592BA4589EAAF72CA3D34853DF7938460FFDE67976031B02CD05E6DA2291472FEA4AA1116BD14A84599DD4786827AD418BBFC10991C107AC26DE23B6877CEC60A9AFB45742934551FF28A26343ADEFF62C21459D5D719F2A9FB97155EB422FD90AE6F8161EF401441D53B9C636720A2FB3EEE266A696A5A5C5A7A1A389A480CDE4032EB56612464E4A7A99602EF4E9252E9A778EC7C061A35E914DA06DDA0899359D0CF48277B87F8674C86E24A66250A4A195A0B945C4E6EAB406F60514F1DC48B71A61E84303C52BEC9984E476B44756598A294A4E026401942AEA9B1E2A3C14A8A13E955BE1FE0DBC1ECF38AFD931FA0961D1CAC40514CACFD8417EC22EF3554B66A99BDADAC2645DDCDB2C2090B3A22CFD9FBD907B38FB59EE2F57", + "k": "06D147ADC763C145D9E05C9BB6F2254B42A6CFD02F2468B139E21F9A19EBF415" + }, + { + "tcId": 46, + "c": "FA22AED23FDAA7AD612D442E5612CEFCE53547CBE3A96EBC6F74263B2D7FAA1F17B4EC89D0BAFC3681BFC951FDF7E1BC7B707838A3D9F81A525058CB2E9765C98BF259F2A4D54556E13B2F4D8B9C9D549F67DFFD94FF8583FA71C134F776625F49BEA9AFC3C7273F6D5C9C5C32307F3ECE374A88A68A9E8BF8787AEBAEA7C5255286994D0D773CD0EFA3CD60078125711CA445E4A9D7AF4346C192A88850E129BBD158D65275D5967441056B42DBA459B129925F2C46F1E0752870D1B7704F6413F2C2A6CF6F3CC98661C848BC7253E4D0BC6981A6FB9400F9FBC0F95FD4BE9AFB5ECFA204229640437DE8A865D02BC8ECDD7C133884759895CA5CB6E6373B3CAF310A24011D1B6AF0120A309EF12B806D6AD95CB33EE651628D1D7A21E117D11A806EC6512F2CE91434466FF103DECB00ACA6A4BD34CADB3E4D58DC61F9CCE8DCA8DD8BE1A86A79E3B24D890F095E30D0EE4DB67231DA1C460684A4394B204B9C7470FAD4A578424469EF1D0613C41B71BE7C4EB0A7F613F74695C7D7A091B1480844CCB87F38A4A3F6CA8BF85C68F727EC60B4E3A10CFD080BA216A7FF8ACF0AC598AD15C901CC37EA06647835687603B05E0C77B1E243DC7D26285C1E9C5EE562ACAF5B2881E312215D239E67CB80782B33C14223CA5A831DEB637F3FD66EB9EBE2FECE1F63D6E1BD513A00A26867AFBF0A3B32C5AB54DFD5A877EBD94BE3F1E7FAD498273A7814DBF0E66B5E28D81C637EFC033222093F4B6FECA7C6A482EA69B80836CF183760C8DF98D1AF48F9BBAD456151F9C545CECA994B804838945D7BAA29696A961FCB1C08FB0291C6138C5C6E0A57B3B062BF5D44BF49E276228B398721941B565010FEB926C8C50936730EC4FAB2336E10D95EA974E3A1509AB9F656B24F5F5C216B0FEB38C4014CE70FDE3C2873669028DFCAFF4EA749719F88278A9F9832C36A177D755F78E231DE6060112C7D460350FFE1960104020FDD9B873D79E2AF4F5971493E54F01E8F6F3C78DC44217868BDCA9D84E0FA3279B927FB3A1A14BF8DA64E20F8B0CC0C5B67BF0C538FDBA183FD9D9E9DBE5594D6E218A0B41E7EFF8E30372A2562EF79636C5203E69DC2C037D27149FD249A05AD7702D89A3E25AC08010FAFE2B723D6841811CBCE2C1AD9A73FC7FF9F234C2ED67E209C041E26BB3BB6957BE99A4B8FFDE2CC7DB8B12A715D56EBEA7B126BA41A4E9B5E8F1AD18F2B963D85146B0441FB271B1F3A994FAA8875A535E43922B939030EF2C4F3F6B4E4DABED2C63D94CAB37271E35EE5601B14082876A298B3BEC4CA48C4903EFFB5A76D54B0F3AEE489C26D9AE75A3FCD79887F10A9413F0B5302FB864516541E1D30C283981AFC5248264373B925F73D187326A6CB10375317BA8A76DBA90485D53229C84ADD42EA251780D8AB9010ADD7FA7CCFC20737A59B3B15E17447E759A436DAA815F67BEA8A735EE1C601E8AB5DCE827FEADAEB7357B81B3DB8EF49E812D80B7713B44B77B66F5D8F57A27686ECEF2ACB524FB350399551", + "k": "569D7D5E4489E434F9B78676CCA8924D93DB4D45ABBE042B08CEC365A6F5192E" + }, + { + "tcId": 47, + "c": "D75035173350FE95940DBE9FE15D2A96709CFCDA8461C29498729591248FFD584BFE56F001F9E8B3BD32B742AE5AD5A16D132F54EB4278BB5E964BCB2762547D5A22D7019D98F1B634852CD7422592AC30DA88AF33BEAF3BA7C7F3A2EE863E8355C9B3F76D5D5BAC1CFF923D590EACD16870B34347F5E123E3EDCF73BA816F4AD8D91302C89CA8BC843A88E795D9F3821E925689F568C90129FB9ABBF2AE1546306DC1EB94FB0184B12800ABFD1926A83D068CFB47A59469DD05FD4C28D31B8789671B6F49A0734D1E8C9EB83883578F19CEFEDFDDC6A719F23CB9530942F51BDAC125E26801ECBDE68F593AF36C2D838267237AD5D423F7588515B100E74D3D708DBA88C4AA3B51B95F7C8D5D9556ED67A78186E71F06962ACB6E0C87C5C90DB709D1BFD39900946BA4F626F6EA6E80405BF1F5BC28FF8BD1A71B63F8E3B9513340B13B5DC36CDD68432ED4584DEB2B5A51244FAE1257D75A4ADB24CFE394D0A25A516B16D2435654B8FDE5C0A2C10909E7C5418407FA5BCA8D0AB5718C7729CBD8F1B64CE82372EEAF60A6E6550569DDF94B8947BE7BA0C3CD0C499BC48B0702AA5FAC18542E774B960330621B4C20B3D37D62089BAA5CEF9D1DDBD9779B1689AF5C2DE467E64432FE139C23629F0FCD59380F48F86C01AA52D76D697204752F6B3DDE9F8CAC563060CE4AA19BF18ED849C7B020424FAB15FB21320C808542512680E437060D67F329062526823EF6D30E41F2E1E4F2E81A81B6AF6766C1A7F774C391DAAEA507874DC9DE8C4C7A195CB40A6D182F5FC14CD3A27E67BD8E6271C0EEF7E5CE05DAC8C5ECFCCF76FBEDE8A0D2B1722E488B227FFBD8485FCCA5E13E31D97C8B8B9F5A3F072EFDB040583090990FF794DCD9A89FF3FB0FAA07EC77B3C4BD98920E9B9D9DE84AFED3462F2BC8FBBF2AFDB9D0F3169A8781CC7F393FCAC04933DDCDE029D44C8B067F78B53AF2789A597D6883D4055A3E38E51DEC2E28699B847F844C5D27D7EC36D02014C43DFD1EF1CA3D3E6F45171F2B0FFE145E41D33F28B602CFEB14D159B60A32F04DEE53CCE784D5DA5A6C62BBF4D0E30BB79A5F7A5FDEC74E749123030F28C6F408A0499A89F89C1627A0341BDC71E9B087DDF130CF2F6FD251D5944CAFE4ECC76E0B58C3F75E86B69CD0FEF94907220E7AA23F3604F14B400F43C5F182041A78554D75A9E6515C93E08D31D2CCCE8C3BF701073971E55A48EA01C51A0586E7B5A3D917B35E7A0BE13C77EEDD5663A7F7D3862171484BF7AB0968B34356A283D5D8156E8D9F80D417C70336DF32B95407E44208A2ACB1B40730DA642952D675589674BEDDA5F4BF54B79844C350B5889FB8FBA389789632A207589016EB84BEC912EAF15C5A487EB9CA25FDDF237FA0A341F538276F1DFA302E4FB55529D3680FF8982662FE49D73F136E04CE6C7672318A9B8246713D907968B8608B14FA90DC6F154B0E4F12D09E8BC546BE6308ACEA721DB34A62A3F09084D07C45ACFF2036C8E7FBBDA46B24E31D75EDAB2DAE6BA6", + "k": "846ED27D94663E20827F27C08A2ECDFE72B97CFC1840EC79C04B7E7E54CDA11E" + }, + { + "tcId": 48, + "c": "B6CBF5192E54BE80759FB4FCACB3BD41BC5CA9C57A8A71764ACC6B0FF613666A478B5E248D7636BAA8D4A83B0315F676E95C21B056D64904BBFA6330E8ACAFC86A0081BC0B8B60B315154B9A6D7D455DE610A0E2087C4632BD1E9683261BB2F2D8C03DCDEF14BF7D6FCA8BAF3A709EAEDA2DFF52C272F50359CB835FBB4CEB2715EE81AAAEDEF7DAB79E00E0580B1CB749078B7A81CE6ED391D785757445DA0DB5B3228BFAF960E7C75CDDA8E93E403515CB32698514F03121A1015F73DB4968BB4A86942D12B41B46CA4D66969F430C7A28BB519E97500DB3098B1BA76AABAC6CAAD32249FFDDEC234995C037FFA8C1B08469EE82072527A5BA8FA2E78DC0BCF6A80E6FE46BC82DA36B0AD534D6F7CADD88F6A80CF4699246E81197D65A64AFDFB9AD7CFD3E19AF03A026865DC9151681069069269019F393ED45806E2D2DA737F36F392FE5922678DE24BA52D2CABE9B0367B53DC1C1A1761A7144075046B5BE3B3CCE306E3C799D5C17C5C1ACC65DF9D5F1BF9452C21D9D1F4E74E1761BC5D8769BFAA7FD6F197124D958A5436E6E2535A457CC743E15B4480A8C1110D1BCB103F0BF409815F854B35BEB4AA71C29A90263D4674CE1F4C74367CBD952DE8071F5D9BCEAC3E259F8A81AF7C5917E6072249397813930267A1AE45CE71230B541635818E7EAF3D9EC85C96EADEE14F8873F303295380E4C3D6F2FDEB4CE245C20567DCFBABE99504385753C75C6EA3AAB1B702474B767A4D892910F7E7D4F44D00261885F9628D20AAF5C271F0352022B67E21B298FB02C3D9FDF35CA05C139395413424F53841372583962453EEEAD950CDD2A9D3DC7F09134F535709CB5EC3A9720A724FE1BEE43E32601929B2B02EF809123F904998B1473B2B7960C7524543493B8FE0214B7BF12CF20025F942AE595127D6BA24B770A437256C1260553F12EB6C66857D2AA83250F9032C5E3AB5B255CEAC1F2C363346492AE806CB507D042FD36637DD8C8127530DF8B63CA7A7D04C5DF3571BEA8530DFFAEDD9D007201770B8B3B5B0A1842ECD81092EA55E555F45F86363E307B023B024E15E226756B355D2EA110B740AD69B8C5F83B01E18EAB2F80BBEA0C9E32B6D9CB223944781228D13731A895E993D2D4D984A2F98D13F69121DBD9D225D09874C15BFE0BF336F76577AE90083D4F848BBC4B46AF4857CC492CDED66586ECAB3E1E2FD0D2A04DB305E053C9C7F8CA644119B013107D16066A410EE569A61320BFA7625131653E90330B1E48FFF7E5AE9F5D28347F22F06924E80FFA709648CEEC038F921196BD50AD882CFA0D02674DC484F9BB28C4F8CCB827FE9C64D706696CB089F98CF7F65128017216E4940A190FBA7BEB12E56B686FE5DA7E8D29686E7A1A51312E8E8F6D101779C99A1A94D1ED0A23D888160E6271456FE698A3FCC41D1349F822B5A8A2A59B9CAD6D554C79CDAF0CCB1B8A339894264A4A0BA029C960C3D610CEF47FD248725A842C9474CB615512AEC9C180F4FBBD588B2DEF91F6973DD6495BB5", + "k": "89782C13ECF998E20C2D22DFCDE774953A24161AF3C13B6A4EA2AACD29132FD5" + }, + { + "tcId": 49, + "c": "8DC7D4F120658976B15D3C35E427D16592F751214F771E678A32BDD0AE0A60C59143FA54AA101EA2757134378D5127A3D37AA814B801C6315183FA7692D0939B756D6835F847D64E8141B97F9A8AD5C028C3CC6574B2EB60C48F40FDBF0341CC2C5EAAD543D0B0881C51267E52E855414ED37924F2275E011D18DCBAEF20AD3ADAFD0F60D82083DCC352174D625C8CC1120DC1BA4D36F34206074551ADF8F4624CEB60563C6D4AC015ED814F3B520C68F650EEB02A38AE2191AFBA2D6F39E53F34EF8D6E5FA32214EE7B924BEFE1C0956EA77C00EB7178DE11DB5E8747EBE92466491133D711BD141C99549CD59A58CE30DBF759C9EC8851279514EA6F0CE209FDAF36866018E0117C3AAD232FC79615257BA51D70AE1A3B173D6F03BC3C010B6A292328B9FF67622A72DDD409FCA24F2774D7E506998DB6704C96FFEACF8961A6D0783277E076F687088C08C66CDBC34AE9E5AE13F43C81E17EDE3F2DECB2471730150E7113037F5CD20F049CC15AD918D1127DF7E9E92E794F0E90F6866033136AA5BE7A23056E0010E46C5AA30982B8F905F785FE6BEA752847D64656A34D408FC8E37216EB7CC387E0EDF1A216C015C890B5835940ACE44A3EC7FD7A832CAB354052857A4204488D78F7EA1B421A4A16C030E5B34FFB8E6EB57CB21BAF746CB1BCC6CECC9A80FF694FE9C121D611C210B15F0AE2FFE0CE2856CE469474E374E6D9924718F12F8CCEAFAF090C84B14420AB8A09CE2EF53F76FB7EBA985B812D7B54D0704169BC9EAF5DC6490FA183CA78FB2EA5F9463B6F1C7FFEDC6213AE8B813F861B130A4876F9DA32C77B819733D58B0830F49FA237099AEBF2711C6C3EAFD4846D3CDFFDFCD3D9A2AE56DBBA4D9304AEDE0F53B12451425BAB5CBB76ED79FA13E7749E1537880A951F9D803E3439F0A843C0BA26313E44D458CB68771187DCCC363555FCB18C15DDA69F39F90FF0F8588632371170ED76B398D8E36C5EBBAEE40656C241BFA47DC914B8CFB9B4011F357B667B3E7EE68B66FB006192202A3D5FF44528BF3CE81A98922980C5C81E9AC05A860C5AFC73B9AE95ED5A0DE7E2AACA24BE1FE5B81EFA2D936CE86BF846AD7C30775F7EE7E3728510754E363292CF5E68E64164A58E8C874C868AE51F5E5A9FA7BD8BA9F30585E85DD37F4BC24E87FEADA9D7277B65DD53BE0059C1E01AD40A79D95A0F99B1D7CA2A1CC87D4053692F7422036E6EFFAC4B1E691156EC1C3F5EEDC52E598A2A91CC1FE926BB4D977A8068BC5DEFD378B1C19B8B2C865D2287B9DDFAA16D37B7EFA09F8CEF1968D491702F8F4B85BA9E7EAF90C7CB634FCBA21B46F53CF02C72474F1FF8D1484CF6BDBF640B54FB86E9F2829A96DFDD8DE9C362ABEF65A6A8E619F4F70DB8B9C0B57CB904D5F4760961C911458DCFD6A9470D563DEB107DCE157747941B2A034FAFDA07F3E4237AB439C8E7D188CC360C907038EEFB0D2DB48B50F2D07D0EB5EB8A51247CDE6A0B7DEBAC3C79E0DA2B471431599396885420ABCB0306B2118C", + "k": "805D0E35A351258C79BA481973A7F21A8293FF0F11807EF1E4D33F68C8A7D103" + }, + { + "tcId": 50, + "c": "7D59EA080F78A5DD7999BD72F11C8D44EBF9DAFD5C0F5E98444C86DD5008A4EA37FB453461604E66DF2798B5E63C0116E0B6A46860CC008B5E049A5AFB316B904007CACF08175ECFCFFCC783947B33A3DE2A177F552970379760C4D29D337277A9A9EB71C463AB1B491C44CE82F825A24544938B22CBF44D317996A2B22FC0C600EC17799661EEA1A575F761E7CAEF4F61AA602C87672B531041B3BEA7D87E897B81AB09CF99A2A47BDB6DD86907E979E85379DEC0275080C66F0AA8312F65E744FA50A7FAA099355F441E4BED2AF291228E309DDFEFBAD2393FE02F25D1CEE438AB3B35B003EF5C1597A70753D60C9A1817D99405C66AF45CF65A184A78FA517E4C3B28093F1BDCB67CF209E302E78BC0236CC7D90A9EE44DDF5C32B9319DCEB800BFDFF3BBB9800A2578037172079B82FAA1B7701832BD5FB5025C46940C64FA4C041F81001511563B2DDE2AB21234EFAD6C69D6755C4440B691A6F4D9AC71E76FACEFFE0AA6F0973E07D0A244987C257A19D8CF6BC22C7A37009B4D699D285ECC23103D4ADEB77DED96C72239D0481842162EA839B3F09B2F2181479A5ADC205865ED5A28F095A70BE8438131F6C59C6128E2A6C5CF40F97068518E75AB6630D7338F9BAFA1EAAD9A4C83261851EDD6B40AF963902BD9A827AC3C99F3DCCAE5BF4357B0AC76DD52F255E975C2EA63BF0AA8232F1012473F90AB59014D8118A09BDCC6FEDAB47B6EEEC4A90EFEC15DC6CA93248E2A4FB06EAEF65FB558B5C3525FEC8F90C3CE91A74F38BD88072192A786A64D3CD4E569ACAC411E5B6DA217F1358F9F5747C53679007616633EA024C2F182E4747336D9B20D748FBBB942F7A1C2E7AC6D14ACC553B73A3E8F6A8001BDC3C10E75B3766285F747F111B9C07689F5217168DE27AD53E02AD159921E45ED7C6F0961EDEA5F2632005A5BE7E6E22C921D394940CF2FB2F146CE05EAA92E50490336B0606B5363068F9DF95A051FDFF05E97FB52688CFACDCAF1C575486079CCBDFBA86CD4473068BCED03D0BA64AD37A1F610689ABE87D98CC023A6215186C9A5B603673A675441263F8C020747D0E9C0181E1E37B29EB64D725F27E263F3C22BEEB834329C1B1607D8F00A886505B431618790C42B477E50565D9CC924B33079155DA57C697E994F8A2D6367147A81150A513F316A48BB4D712A21E54FC2E8AD2F7395B8B9C72513411CBB8B5857B1E1417280F2CA24187B89265B57DB2EA04AFF94C283B1BE43BC17035238C6C7748460FE46F743DF4327AD9F2771B6E17867E87EDF369A7B305FF056139B9AC88A27B3FE162412EB93B12E4FECC796EF71A58FA3AC7010A9692C519B493E4DFF9773E5D3FA8B8A15A74E745D3CD38EFC403AF5C4AC3B6424B86812D83ECBEACE5423515E0FEDFE109D51CE419A938FE413132ADFB10102AF85A1BC2BF2175EBBDC090ADA8584E5B5F51792BE2C54EC5A3336D233CF51AFB2E319BC5D5439599D923045F62E978F236418872FA3DAD580BB6E7118D03E114C1D49C7D2ED4B3A", + "k": "AE0663049150F3837C4420BF2D1C6445BE7AC135B37F789A670222735B00BF6B" + } + ] + }, + { + "tgId": 3, + "tests": [ + { + "tcId": 51, + "c": "FB25DBAFA2CD7DCE979BE90E31179FCCC24AED8A86D60C3B84DD6F701B249AFBEAEE926F05859F818CB356FAD2593B6340B6E59480D7E78E54C54D3178BDE122F0D3010BA5BF2B65468220088DF430E1974416E12BF5B3B3EACC2A3ABFC038460D83257A8CC7F4283C6B3D0070DA8C8BCEEB976C0D708D056F04C86E35B81E99162AC72618F3A39832FB90B378DC914E0732F3140049B149292C8D00ADDD9C0522F3BB1775074AAB4F1E279B5946E88D7C46CCFF453B55621817B8411E24BD0B90BDC275822A8164BA11F9477AE9B03DE7DEA010100B164E02A91F0A27B84B585CC48D4AB84B0A1727454BBE84B1E8B723C2BC7A4EFBFA657F08E7AD2670CDC497D534F307246265C89AB4066E2E1101282A328E00CD1B58E4D23F24CC364CD92F891F4815FFD974ED36C4D29E3C0C7F302F0E912E1080222134ED6C973C8635062F63A39762EC96C883A012F369566B62FA5AFC142E1E284675E7C1EB4744533EEC5DE95AB8ADACE27259DDF76553B482CDB83F1414C66307389F82A51B949AFACACF5E38D677456A8CA1806CC82E3BEA884EDC7B4C5ED66007B143F1A19AFE1A5540FA69F999FE86386FE1E83FC0E57423DF35E82749ACC856D3F05EFB959169CF03C9CB3D11D88FBA1F85979F213FC59F084B01F4FEBD9CB560C0F969F8F021C30644FC8721CD12E2E2BB0014B39D9FB4916FD38C6F8D9B02D67DCDA44332DC519528A86DD5161E8B4C100CDFCC58E3E05763E9FE5E69CC5D5C28E6D2AB24A4BF853264A3CBDAE0A72AA380D37CD0D306770D711BBA1D55A13EE7CA01702556B57BE5F002FDB6CE00DE00CEF2869092803CE44F4944A60CCA2B30978F39FA644A96A66156705EF1E473BF38EAB139AEC783230472CA49D071A817375191B891A9BF63723BF02830D1F443660B33C5EBCEBD8FE04BE4812409E82AD48A21C50C241CEED5126AB40148ADE08E12B381623E5471D173E2722DAAB9085915026088537EEAD054C7207FFA1B68F9CC75DC34D540B7933F78FCFE5728841AF808C0FB9D83F6A80EBCE6B51534370DB55E274B74D216C249759F80D9494EA1FE0AD058F057FE3C72759F5F787B35B13C3FBEC4B730244C0056FE694D801C021DFC1F179FF6BB8435878EAB8936FFDCAD68FFBCBEADD1BACD3A6922759DA01E72AD933F34D10F29D74470F70632A3D6DABA1B069DE9459D15E58AE12130E2414DF92C36DCBDFE2EC3EB17E37393035ED810FBB857D971ECD41347B09C5C8DEEAB060E2759549A05C37A2C93F30CF906A9C59991DA921848363CEB06CF9914E76E1635AA0337A540470C9B3E58D152FE692AB3A1AB5F3E5C72598428DFB9D46E77C32001CC1E942902A4A1CD94D526042D3C16AE79A7F440F06ACC331E445E47FBCEA3AD5B2D4237E320C3DF1FD16CBA99AD93B136D971F4D7233898F1ED5E4017E4DE5B2243E6ADD776C4591E28B6F4A5FFA4AD7D273708D2C7C82BA28A0D621E9A10FAE863750C8FCBABCCF3F1D92E9E2FBD5D3D44B6C4C1A1A73C34523356A8B8DB1B8E7E6AF8B9A02FA03C705DEC578D6ECE7F1AB9C9498FFB1E283142B258342B53959B6E60BD23FDA24A53447049A6F5BD525B6E12DD60BEB5CC7BA0E245EDAEA2489AC0ACABCDBA4C6113F35ABFE30D69332BB6B05DD1430FE9A6AAC0AAE856F0391AC30814075085F8B784439EDD1BCF55FDFA0142424F7A9E0A92142AF3979C3D608D2CE99B9F63F9B3D487471F75D2C43FFBD137487DD9D9A8931D42992261E67FB1C531BC40500711FB83B2AA84C308AD061BE639698F3F2DFDB72864D950F0888A961261BCA7C0DBB78B9BDFB8024A51E3488D87AAEF8FD703A859E538886F0DE88A16AC90D2C596622E34E2E8D9685F918B6BE86AB5E3BD73194A21C9A4DB53FE0C88E027D8FB0621592BA8A8748267CE6EBEDFA75144E2DE1C1B39FB158095F9FEA12772216A718E4729E583B1516D8BDDF13736946073AA71E72F9AA068DD6C3E6D2C7D6BC66711B94BD75AD558DCDD77A1950096BB3922A482FD03B8ED9BA53DEC0083A8B2192848CEF5092D50FF687623A2ADDCBA7D5E9B15759DBB535B6C1ABA01CFB857BCADC6506F0F3E73DD649BC83A05FAA60CBED656F545732E30A838F95C7879D63077C18584E191E2F844D44FFD63C9223D61E38136856DFEF610BD812DA0B8E18FF2465A0FE9F4658AF94ED948B13B4E710AF03D3620", + "k": "5D537CD0EF7B58F0FE95370473B96878F138ECC259ADFBF77EBD7328B822D9D9" + }, + { + "tcId": 52, + "c": "BB2BDDD3D002659A8C525821A9A61D32DBAC014DADAC8D13C129827D35F511782A3447D724DAEDB1417A3FBBC73ADAE3BF1408EE5425F554F32A4FE3617E775B890F9E4CBCC02F06A17CB0C3D4E97584C9F7FF6853EFB312B417FC85B0106204C666AF1C7952BCDC3EC880CA9EC121816C9C482E182C8378D6AF2F957995C655FEDCEC134967C74DC4E6386DC0506A6932C3DCF731E8E1754A3AD4573F2C0077A0AD6538F4277E438177F7B605A3911CF5E07255E21B4E3774454B0CBEDC6F5926C24B8CF1E2875DAE64E435CA6FC3B22B254BD33DDC2E6FC5F7AE1BDA493FE9190B476BC706853A19E65116E8FBAB9F3B1BEA59358FB1D94B117DDE84E2419F9A375041E1F71EB2CF839776DE04E1AE4615792F72CFCE668794CC0F76997C4AC1BD4DD9185CA24E7CB30CC77D35C4478A478479D839F0D0EFDC2C5698411EF243C1CF1D8A0065BF20F9C047EFAA6A7ED051EB0062E7209278501CAA40BC7154088BB9A4E154B7E91829CC4B8C4778798E06FDF0AA59788500ADEAF31B2065923B9FD9F2834822EC58F312C174BE6F4DE098118D34F694C001F4DC2C0D3E5AE232A50D688EAD87278543B76C4B092F644D30099CB6AC23F69B473B6402A987C051BC4835550C5B0537FBA9DE001C3B191C01644E54C22FA588913F657867C656FE1E9F4ED0CCA47D4B1452A2F820BB4BCFC9B017E5858BB224ECDCE1DD2F6AB43CE4A3D6FDDE89F0484F68EB5AA5584673DBB14C14366669FC473E51372103EC23E103A6591335DBCA27E8852B2C279D2589BE3AF8C6CDEDA91B3DB00AAC5222D6767A545A5257D750D535D800642CCF26FB1B6A291021F3A6615BB141C7069A3A0C2F16FC6C8AD4D593475D8088219FEEC87568FD794C56AC7DA908644AC17012D5ED7E0003DDC2C58007AC0354F068496C696B9F0A4740DDE001C92BB8A8940BEC2844B2FB37B9C4FAA3A34B43A6FE9EFA1996476ADBDE28954663FBD806A7CE1FF2C6D953F0FCE6D287FD438BECB856976EC4DB48223AD2A21A72405F261B4A25DBA7A03B18D005FEE3869DA18C521DFC2231B67FA2ACC0C1BA45EFD2F31B565000E59BCE78C1D9D06571B20659DD1A3799F778E4339E616C96E473A0424F1268AE5698AD674861677D966F1194372173E7A58062E014CAD86A48AA5FD45CC984F84366DC96A59B085206CD54471433AAD497CEE60789244B1AF32E677DBBEE60BC3C0B154B0A9AD33AC2E5814A4DF3C6DF0AC143F3024CB2C8C4CBB8EB95580D58715C9F731BBD9A064D98E69209B986B2AEE1D1A53BF64216299591FFEBD0B177E5AD01825E8637C8566069B62407DE341E18503CCBBD0687F8CCF5D39D08C87C9C66AE34E339F63F6D824BEADE8B48774D468B353E08C331BA3603539B79473D8BC11314272CAE5D7668AFEE89B6F3A81DB4237357D8A4E1A36F9C23436DA4F29FA0388D2F39E9AFC3DAA0157F9457AA3C08D1DB64A2685530F1F1012E4F5FE59FDCDB9F4D85F94940441019738BC6C35DA6D7A00C7C489504B24D8938EA475563EEF0D02799CEF48347AA738D7E604DE830433718340E1A7E895B5DD382EC69C42839284FB2BE923C695121CA9527EB02A75724BAE3913A44677D340D8132C0996FFA93E04152219471BDF0B3A0BD8C90556C95512445C6B07682E0C709BF8259DC0A53A730BC3119CA91B081C615744514E109FE3F32D48CF5CBCC30FB4EC405F88F2D5B19E4C7347D4C7A587E9FE695BC6C54C2A1727B2F82D43DFBE3D54654314A70AC628E01641A3DD5090414C15B3520E9C4C290604BF40F2A7BCF40264FFB5E8B96D012AD798BF69269E18B57EB11566A9747E25EE2FDBA9138B29E84C440F22FFE4C3FDBF92090D976FC9DFAD4AF0B9A363DE25BC04E59E5AAA40492904CB952D0E31BE0D2FE5EB5FC82C092C0E543783389137AB72114966FDDEACB31834605469F2F58381E814FBFBD5A3DB52ED341F34384C39A99D50342E0A9FA2E8FE487892895534DFDCDD4286505D1256D9CFBD332411821AF5A38B2B89BBF897A5345895865100B3473D38D30B628D8BCAF41D2F119E6DA56AF9D9286F747FE8C8866E3C153542F79113F0D18EED5D74ABFC4C151ADF4FE40C0EB1D57AB074645249E3E2B222E99A84C93BCC7C6CC695C67AFCB1530949C98F9DE537E2054F609F4CB77FA8003A870A61DFB39A62379889D7B8677CD32168C90756D", + "k": "44B82092B22C1666AC208063FA54F1D140528FBE7F27B14F559E047B07000393" + }, + { + "tcId": 53, + "c": "C3BE6ACB5EFE1049391DE9D3D706922904336603C872D82DC5DE264E6C32A12A990D73C5DBBD1D0C12ACC42CEF07A6F98245D55CC21F5A13EB097FD006E6157B93D211B758699B51AAA33706AB2E4C305E1C40D2C59121D0C4D5038E865A42408D2F9CBF7617E379E3F106CF6EEA8E74A68B6CF9B403FD1B8C4066C5C446AEB857BD09643FF76CD72DCE33B118E7108EB1956A6A39CCCAD3CC3ED11829A937675F1441D0E4D5F557C938341AF6DE79918DDFA0E344179706B260D105DB29563D3C340591369F951FB5081138A49B2FEBEE17925BD41FC06C20F030515D2F8AF7A844A0B32F2EE18EB56EB3806D84502A2C6574D98C1759496E2CBA7FE7B883ABCC3451BB5B0DB291C1D6CA8A2A56765BD7AE65836E529B496D371139DDD5ECB35DDA583346E93F9ED1723CC0B018ABBC738DE8A0BD42176F5BAA9A7C9FBF2BADDDE6EDD30FBB0D37D2DE15C51770877CE80D499D2F1110009550F84F74AAC9892741413A0E762FB4C8E8C9D9AED5397015E436BA0E0C6583B3E476C6A07ED684B9DC8CCC243984886097D9F5736EA73598BFB900A8B041551A4A5904E4E18D939A2F54A71183BD709D8D172C3F774F3AA237123703BF21A3A54A237074811CA30B8D0622D513248475411F0C6F761FA0D95F461E72BE7C1CD227198DDA88FF91538DBD77DA077C5015FD83D71F5E13FB131B43500B744D3BBF64A8AD5BDB960DA4E3DA77E34428A76BFB07D3D67204D3B4B874DA570B422600A42D9D93D9DEDEE43ECE60F14D330DF88C95434EB151AAF17334FC4D7D2E1C911AC9955004B7B2F8A1775FB48EA447677AF7EE415927B4BB16340A8119C347B7BF8D4117EB2CFFF75195F2741B3EB9A84B68666F8063AA33669E1513D4FB6158CA1A88049B644122429D9892D75FC1EC0D8CA7236FA1C6279D7BCF2BE644C2D369DB2359EF8A9D74207DD91B6C9E3871715A8EB3E218FC93F58EDA9EF5D285F2129018DF0228B0A83A3DA68E48658CE6085A7EA497E10A22E214739D4E5D429D6F320995480C3595CB5E01B2D29B51BDCD7DC40C9D1B281FCA024F2B175C9F76A5C63C3FC82B73FB4FFC2D1953749555E316B17D1B2631A33634F47F1C066C14A1046148A38C745D3D0FE29CA0F1CD296D435891470F0373A21360D5B06AD75E7BA4B52176EDC1E5799C7984001A876C1923158E66A0BA1791F8D4B9261AC92BE4A58423B6D60E4E258C9BD9F97741F9724518A5FDF4CE61ED4EF27DC98177EF530D94FD7DEB5E4CC8660E7112FB5AE34A1C4D0CBC08C2AD1A5258AFC787B095D7751E5F8B8F2547D29F21F9392007029BFC1B147300AC72BCD80CEA8DB0F1AA46B136083143A3A493CD467DB93CE8EF11F3E178845BF531DFEA1DE932689A67A02EB911AD720F52DA51AC05FF0B414EFF8FFBFEAAF308DD8553E5CDB6070A2BCF2A0DF13DCA63FB66A6F8301C43111913B18C3434121DEBA46EC9C2B0D73A6AA282B9586009718E3845B67FE22C0975555A37DB47434A26235C2002F7F773364EA36D60E00F15787AB22DC4E4209D77B32BB430355E1DA7B2965BABC70AC49FD5E420AD3EC2CB3C3D5210126CEE1B54697C3B9EF28D801D4E9A5EECF1BB774067FBF0264BDF1DD86E7A97AD35BFDF4D0E998F6F2C51F6A5D37F3EB8765EADC3C0150E21B455A13A324B29D2404FAAA145020C4274424AB856A4961C7E7CA922E26BC835251E40EA897E80229B931F9463A268E845C8F5055F78CE1BD3A0FD6FADCE10A3B2FD5E140161B076690ADEA2CA24387345FB5BED39AC5B9E08A126274E12BD3E6EA188A2EFFA005A99BE2E704310D466E909AE2ECB63776052DD1E1D1F0692E4C04AF79DCC073A4CF80966FBEA05D178A0FA6ABE55C7CE361AD6601FF18C42D5084428853563E0E4673CEE8BE6B339CE703FB8CC6CFCDC0F416B8DF8F12400691FA86F89541C654525F8B286CF06D07F43C95CC2BBFDABE9004A8B40941860318C156D0C9647C14371AEE0417754A3B7827BC83506D20BC3DED4CF53CFE8D37ECC2378CDEEFCA789F53F70A6C011FCA079BBE0F9E40CC9A781F466FDABBC7D0896E2897A06C0AAAF4A83D3D1D2D6B844A2CF1CF88C9CEABA9FF11C1B4E748067A47B5A378FFDF69C776716B7DDFB12988FC5DE30EF7162727BF3D94458BE79194C96A98007F95FC3AC1A2253D21B5EF60846F565B3AB92B8A4002394B2CD2D280F8976", + "k": "E9A618A93B7C7838F9C4A8FE92C4407D3E32ED28BE7B63ADFB9A85C8E5EAD036" + }, + { + "tcId": 54, + "c": "83828F7ED8CE90AE917CA0FA823E1C6FF2EB556D8CB35E0079839BA7301F3BAEEB76A210A0E02C9939DAE1EC693CEB1A53359D6840EAF6DB845E2E693CB4B8CC0CFA1597CE2B207A63E3AC71D8027C865665F417300592ACB7F6C9FF8C975EFE88474C1ED682DA58457004573719C966FDD0C7990B897E02803FD382BD07DBA3475BFC6084A8EACEF108E5C8BAEF614E9A100E4B25E6E3B1131197CA090288C3752D2A93A251D8B235D46750BA2DC49C3D0BFB0B945D890977490ED4EBC4508D4D94456595244E76405665081C176A0F3F227ED755E1BAA0739086424F74CE179D8FCD28852B25FD51ADED1F32775B47F6DD4CF8DF007E103BCBBDA9748E279576CAC724B02D90EE31E9C57B418DBC77456009EFF657B8C68AC2CF046598223CFCD8AD81541B08AE0DF43C91CA500AB76A2AD90B1EC235AC6261377E20A7A016F13ABE2A4778E8FEE7D2BA82A910B89A11EFCDF57399075B220CA9425BADEAA36827C8F7517788FE5B0EFE40A05678E7822B4D9EC9B9E10F57BC856C5A46484F5FD4E01206B9DF9CF0B00DFCF9B79BB1F54098D33DFDFE1F89377792FC1ACBA6B75E92F6EBCB4248451777F5EE9FE18E88A099D0E1CF25F12B8186498164A31626A934DC6286FB50099B9B9954D078D6871DFC834AE341133A5B11D8550045558F5392D802FB197C95DF29F019565503110F480F76B86F7441C05F914531AD367D0F9E98B8B45D38AAB4707A793735C7E1F73892BF98DCCA383A9A67A5F1C2B70EE545752DCDC6D713A6BE95970668589CB81FD8AE42A497BB3831048583EC6A13A7087D55D6711D6A9B3D0EC929966F88A6DBAA2984EBF94F1E867794D0A4FD1C8D1D64BDEB83D8886D55228191CE3912FB566DC3FC4426CBE875437908BD60455E9EFF6334AF6F199FAB332B78800960325F74EEA6E984AF9299A077A7786B72816C78F5E75E8674D4849D360561FC8A080B5194140BC38250BEDDCAD5A5347D1B3E8F7EC1224D8DD5D32A411377E1B7626A4FB20A2C3BECE55D8F822B833BCCEBF515B7414D2CDF62B000E9CCF44C1FC00B96EF2F2DC4CD571D4FBEB791B7D38F8AAA98D652E37922D9364D76BF39CFC689CC1C205E78ADC455AB6CFCCF7119D000462469370DB5AD81228B1590DF4496016DDDF0EE417C74A904C8AC2DDD92D60528BD1B5C213103C79E1D6BE56C323FC497A805ED8677C9BC90181B9048E2676387AE5238760A9C950D6C6A11DD87B0DC732E1B6885E67A73A4E56DD126BDA20FA3F3E3D03377060E5244355922FD6019D6B7986D5CCBAE2ECAEAD0E8ABF96F547C26E8EA2545B8B2E2B9D160BDDD1826F475F8762E581565F509BC16D1D98C80602FE584E4C1BA4CDD8CCBDDBA81DA82316C9E4EF185D6EFB837DEC43E1772D84BA4C5E162D5059BE4B0767981D7B76F6C9FCEEFEEF43E420630FBF297054CDE48F0350CA9E3CB7741534CD3BD3BC220BA5C85B7EE2A1BCC71F02A83225B1468DF77F7F91F85F86A77307F6B069C4C2215F008964A22E19B38D6652E2EECFAB164A9606CE58BD1D90050613D7838336A2283F61AFAB5CA6F5DD25524E3950E66C308A1AFE06D455A507EDC0944DF946D569CF23DF42EB7D6D622CF5220510083AF3CC5AB1E386CE114A577E48C5E328BF131672BF6D13CD4B89AEFD4E3EAF462D1C06ABAB8B45564F103C8B6CCD088994B4FF240D3CE10AAC295D353F42E0F4B045EBED695E10767B15830F71BCFB26527830F52322D1B3AAF37779B2CFDA1B1DD002F568C8901EC08C432F7089AD6F48ECDD71475E789003B45E1B42BD3D65D956A57104EAF9AD602C1416AC52BC8152FD2F109BD66A3E745F9DFEE26F46484134E959ABD78FB60D32638E9A52F8B0AD52241D38C5AB19B332672D8395A36E2B25F11F98B466214AF284A958C243B134CE90CC122AAD5F64AF9AF05C9624044B03E032561C7847800355ABD323CE63C2B0435CCA43854A30E273451CAE82D753BC0CC78344B36040A512EF5D5928B91FBFDD4BD58E4F7CEB34D8F198C507EBD94611192C0675DF40CEB683295C69EC537EB31F80B151E2D65A96AC25D110C6FF0BD92E99CA3174D5EE54D86DF3CF98B98B29EE9837344FACDA6227F809E6B70035699AB0D122EE7B84681B97899B654D85E65DFB207E816E4BE94527EC73007E54E04A3F3D6D84C737ED3A28E51E4867F219DEBE251F728DD4ED0C77F", + "k": "A67BB0D879441C09933FDADE33695D4B18B75501AF9239ABA349430DB316BE67" + }, + { + "tcId": 55, + "c": "11858DFD264FE4B86AAAF8553C8D658126DACD88FF3FD5B14CC68D3EC2A89B582814AE8403C0E9B38A706884682CE9F591083D6270A845A0656FAF228D597F0725A4B194EEDEDE5E2FD6D2A63AC3561B66E043DBCDE7488052BA8F77F765842BB9A92B7D7DED2DFE7EBB635D28B2C7C252AD54848F282B866487D6248D1DB9CE9522C5E64B3FBAF38E35596C6DB2743DC48001F4B60D99BE025088F65F636571A02DE3908D7E2ECD95DEE465BA4F711A8ADED49F223BC968921F60E84A3C5BB8839EADC6C8614C04B5F964FF33A7F60CE68207474D792644D91A56003A2927E456C912F5B48BBCE0EDAF1B34F1B925859AEADF4AB88F40566390585BC646ED1D7662145EA1EB2C4E6D0430F709CE61B2131A646A9AB1E4C42508BB06A9698F894FDCB9239607022326D3E84B56026F35D6CBF7AFCEC479F68EFB3584F667BFF8F77D9855498CD3825ED2199B9698DA56D7B830B6839AD331FB051D7124E7812D5707BDF481B5C1B080275E90D8F8424232F4E9DCAD38A21974EE6E3F402435D748B31E3350FE499A7E9A7D5DF1054E25A1FA89E95F28FC03969A2777533605FD6B3CF7C2290271A1EFD3CE552935CBB124A2A19B62A2D04F9342B13FD338BD1DD334F8536569339FAC3F282E34B0A4103C47803C6F01907295F50BEA3530990687A79F17715FD9D88F7786CA04B37F14ED58DA7507C690FB6FD10141A8E37138A85947A04ABC332D1A450780EAFE0A7E92BF4A250CB2659E9A92E3756459482A9ADE4645C7A2CBD98739E6E5957BEE39BC321AA49F413CA1EF501C9CF0F5AC4C1609DC31D2A784CC7028AAACED78F4DCBA311698900C052C416EA0AE24D62B154AE1746BFFD79A955FE3E33302212E0C71D6A4E9BDE343EA2A7F4D5F1F99296464E22FD2F3F6BA74C0FDB3DC0AD7E5829E82A69FF1FF533E3E2995462273A68D4A82D293120951096C9A99C8708D120BA355234AF40F7AB49AAF5C5D8F55A43B3A0668D6391E9B10572938A25CE45261769F7184F00FFD4A04A901A8E4033548F580E40473C3BADA634F912C4AF11F92584AAAB411AB5E0797B207A123414FF37F6CF3AA5CF473AFF739FA562AC70A6E4B5C5248CCF4D14DDE0A1391EA18D56DEEB9F167200E950383B18A04D3F844920C6106A2FEF1BE1B56FA076465027887A886463C60262DB5FCCA785AB83B4A5CD268FFDCF82C48CDCF986661F03D2266521E31962AB98AF2DC81DC5BF0C68C2414EEC4A2A1752B3EABFBFD2F06D0034202D19365F30B62C2ACE01D9DD9B92A9A8A25D9241E5346F1402D3DB020894B256053123FA3D67BF2F9AF799D6F5A2240B731BE2EE204777988F532E0B48486DD590860C15F0118ABF767AE2B55E2DB97EF09710EE0684B4E0761C494CB93F5780E8B07C87AA5150A983D9971522978002F36E8F7706CDD53C195ED5DA61912CFBBB5D4E42C6C46CC532DB8BBFBD7CB2EA31A9551579DCDB408E8EB4972A76064BFB9AB228B18D7B8314613EF7BCED857399044E24D4D07AAA27CCAAE325883E8E518EA9E8EE79E58E5A9A25CF26251B3C422ACEEC5A270C0E905798482AE631BA01DD63EFD4260E6D923F52E932B3406924B13C1FA26AC793C6BC959BC4AD5E9B55503CC16EE18246AEB2E7D9BE897BA49F1651CFFB962173AA1DB5DAA87DBEF9C8F59FB1C1F7429C9F139B3FEA911AF87D08275DFB4683CF45350B810D4F3D8CF1526D574318C0341423D508B57C51575079CCC25E06407A0AB4CE28310355E26398EE3573EB1365341E1486E8E372FA1B3B7CECC9FECE194DC5F38ADEBB7CB73E6C312B549C1EE036E2E41E34089B286D092618CF9ACE6E1079D9DC8BA1B9DE0371D0C69647D9F997010348352929A605877F9AB121A126C95DF5F46A89399B8D41AEBA9C290F99DFADB4A07DEE1B086BE595D9E0BE75B787C0166D6E2F3B529C6C309AC5BDD8396C39FF7AE3DF3AFBB9105DCD9754EF8B7D330F6A159E9FF748695662F24C7480F1D2BB0DEC0AA212B3C85F54E33E428CEA7388AFF808DB77BB11BAB657639F7EB491780C286BD93ED1257A162D9D364A07A164A2967E98A0F53AB66B98FE555262321DC3731093E7D1D713249F86997D48B18F83D355CCCDF2691757617EC3B184D9902460A8D9BD551BEDD7D92FA9BE73022FB8085EA511038692A980AA13C0C263D755A2551EAC7AF73CA5C675ADFEA6C0246CFB46DC5", + "k": "7AF1B8176E9D3731BFD67EFCA8CF1BE35728D0681E7EDDE63F74B29BD16B7640" + }, + { + "tcId": 56, + "c": "31D8FA8B3C1B90F80A5AA6737DFD92E766BD540AF0621A1EDEE83CFFDC3355D967BBFC7669A25A8A020CBB2EAE771F04BD98DBB3254AA911FD7A300DC83966D7DA1217CF2000688F5AEB2D4845AA539E9D899FE6E591AAB516B568EDEB58EA640286AF68017E22FECD684FAF13125C2DEBC336DDF215379A19B8D5D411B0FAF5C4E40FA2074B2E36AC4F67B20E464A896FE6CD77AAEA5D51A267935B7A6AFB0E1D3A03DA747CCCB436091E6404612FA92719A8447445D373AB1FA7FF7A3D66B9E99459AA08C7B876F10923765D2AE5CE3DEF455760B11F7D77F19AE537039B63A8A276692F6C699CE3CF286D5DAE6B5427BF2B0F9D5D2963C96CA60585C33F106F2964562DAE97EEA65FE4DC1536C02003480A0BCE995D7608C64EB04011376C530773EF1CD8DF2D1FB82B03D3F3795B6298A02A6058A204336154BE98AFA6D13C8B509E2AF6C94EBD5638C354573A4DD5FF45B3CA0014E13A86241D6A7C14105BEF53FF2CCD8AC4BECDA10C33A2A94414FDF524C17ADE256B5FAFD9D3474860653E50303ABCDDD737A15B25B4799465BD84D2A379932686B8DAD94C1A1195F3A69EB0510F3C2512D3DB2232AF85DF984EC05584C1F6FBFFAF0532EB80C5000549E58B792670E6A5234526B1C07C05F5927ADEA6837E610CDC9B60E9D35BCF125E2C0942D9336F85F20F98C1F8E89EE804338A13DB5CB17941261F026A737F32C2E596CF7A0225E399CC8C580E947196081A68253558295603125355F01FCB057FC06894F3380CF2E9F5CA42740881510B99F7E131B46081E7A8CBBA171F1D1FA5C40A798ACC9BC80DC80EFF3C8F8E1EA1C8BF40947025354F8818804AC85819E696B84BD8B2F6442CC9B9F0ADD1998E9F0108E66E261C0B1A7229256653BA627C3A5ACA6B3022BE3884AB1E77D38A34F1A5EFD0AA28998B5B299C710D4E3BD6CB895F9B5D2510AD8003C8F98FBB8EE7B521BF1B8317A72F175DFD61DFD2B367F72C065BD186DF38FFC0425FA0BB034B042F6A3B3ADE18AAD011B489EEC14BDA8F56909C5DAC4DA42A85F530886CA03034014BCAA3252AAC2D0D41C1CF35FE57AAFFC2C96CC636CE5A10FE65D7DB5B2A70347A76AD472A2960276320BD9C5F15BD0E127E96967230093945F5F480A7C8195CB665398186F1BDBD943DBD11CDD9F89E4115A66B86F828CBD99F911747BACBAD12FD927ED64B494A532BD2AFCEC21FB1E8B01EEF2904F90BA7E6801459257782775215252B7C9DEBC2CE96382F144D0AF37A81B6F9BD4A9C152FC16F62A74DE7F4B0151C477C1278B710749E946086BD21D686BA63A0CB9B2CD4028F9CBB99326983423E22B546BC4D3CF9E15D2614D33E00FDD35EEE58F6825F6F63B029B362CCABCDC266F50C7122DD9BCC3178C198D477B1DBAF307941710620E9EBCC1190F6997F9868FBEA42B664328BB3E3DED926DAC19BC49715CE0769D7B7E0114DB73A7FA5495562830CCFD8F9DD64D50F9874F95A2D66B514939F9C00CFA244444F898DB822414C0EED26982198508C8F8A5384783AF2467C31380C3AF36E753470EEE0170C9FD43D8969276C763ABB11392F23534A869C840664D54401F89FA76F7F83CB01EFE1A05507FAE6E9E01AD80E5177332F18AC2BC5248F8A54DE2954BCF756E52DE88B98C52CF71B7DEDEE562F8BBDFC86D445264ADB87B1AB0A0EE52D987DADEFF4DF8500316920FCAF6287AF546FEE87D650709F45255987385E09E826FEE81B82871FD3B018D574263102F3D601378504642AE234CFFA28390EBE0C08FD7AE97D5E1C66B6FEC85B1C731235DFD55986A4364F0259F0E756D10CB34B08F271A2C7E9351901AE6AAE1740BB62F0F94BB1D2160EBEB9D065407DE13990EBCC38B32493DABAD1AD780571ACEA9F9E2740321D607AF00F39AFEFDFAD1A0EAA65AD2C5FD1CD84D5777F7ECAA6D2C486AFA40D37737E61C703C9ED99DF6CEF859C568F8421FB9CEFEE6A74A5A1D6875FEED842A4BC472DC981BA12021D6958A66FD5CA84FB5E368A1B17EEAE218F3B0D1359E05DB0171AAB1C23CE4F40597AFA8ABE2C2375AE93083035D9498E4D7663F4B1BCE57770014C1E14FE1CC2468D57F2922888692B64CD6F67FDEA4ECA6963BD8F11C936D61BF257CD14FC5085066EFECC297C8954AD797875497AE022FB4EF832F4D29DF677D195B43FBB5802C37DA06B1E91ADC6F42B90D65289C2", + "k": "6D39A2EFB6DFDCD86750256B687A5CDCBC50512E2CA7AB083A8E3B1606A63DBD" + }, + { + "tcId": 57, + "c": "3165C68A77E15A0C8D6EBB655440C9E5E97267FA5A28042DD4D6006354F91FFC11AC9B1F05014AE2DA8467A757886D8A399515E19DC7BD83FFF219C11D7F5F43A250B1161C801EEE9430C24B453C69FEB8727B6307AE98E7770948517B0CB2E71CD7636271BB0E3E14CAAD12A22F1A88867B33303F9DFB7694083E4D7CCF6504F3F2A81D6B503B273585A8F3EBFF589537CAF8F856ADC700B5CCB200D60818100F7DE4E7F82632F8F8F05437C5466FB9888A7F2631BBAD343CAA58973F5B6B45D9CE89E7EDBFE1ED08728F72C65E102A8D5EDFE2DFF7E717DBA007021587ED886F4FCC2D9AA793B8459CF8F72C461FB87A5A9C2671A6E35EBDBA2B8FF9FA6186D18F95D2ACD679A8F57BDB0124D070908166C35DE6E3B6E6E456CBCB43F0074AB68CDE969BABB752F921A2048EFDA8B6682E34C24AB08916EFDDE221CF38D06B8C60B7C098D120510817640E878CA9D2691ECD3D6BCD141D717D2E8CE7DB1C5D5723BDAC9616737D01DDC9627CC2303DD069C69056C058FBE86EBD3D3B68193BD3B9F340F0F588C8F935B31F00917B3C1054B2A11E1A825F73F1086503B42BF4677AF8A9A8E948BE0EE148511C65554EAB2805A4B3E492E0C69650F9846847A77F1DCCFBC459AB70EC6033F079001D82254BE425F01654E179E54801038C8D229E42AE39ADAE5C62D5FF485A9BFFFF422EC0A6C88C52E13F8DED6DCA92D62989CD413E2D68057DB3C7A07ECD04E7D6ED4356EFB3757D23D0E4BFD6CF560A2F7580C95997CC3DDF601B8CCDB0E9A3162ED4BBB3A1C86B472FBEF69A31362829976FF768620FE0D700638D59A96E003648023D8E9BE0FCF2FAE767E9CEDB46E86B1F99975145891C7842E2FE379608F8E7908523BB3D5FF3EE8E19BA609511FA0B2E1AD13DD11204FDE9E9AB60E0955336F7F9B6538CC392AD5892D32253238BA4CD452888C3F2F20E78A70402EFFEF521183E93D2D53B3F44BED383902B049C06F16D1923E5DCE2DBA378CCD53BC7940E05B59192CDCC6182E54140F37FFB63E6261719F324B89E834804FDFD5ACB66690075EE272D65195383CD6DE568E2FD16E3EDB1673C420113BCB6EA5621B0E709BBAC21EF8226F67A202FBEA20EF5AAAE42F969E88DBC79BB3BF9C807774E1E8042339212502EE4DAB81A3D3022255458ED3D393AA68DBF29E2ADA60E6564A41D8134C6C5281389723ABE78C4CC660FF715E21FE9ED338A7BD2D3A9D72F958BF8537AA399B82090E718B2FCE93DFB7D329B5D804DF56087066764F15788F178F36B73898833CEFBCD36CE2B27A7B7799AF7BCD1358639060F40A4C881A89E01E3566BC3944F49DFE6C5D4F3C361C8832BBFA48E27AE307ACF1214E5C3071348C37BFB0B4036FB3E8DCB44F02293A9C6630C9185717EF4FEDEB5CA508107EDE4D8E1F9FED20A60E0B3BCAA19E3CB30252F5224D85422FC9BC1CB74782EAD5C13E05F867E7E644707F108B3862DD9A98EB971F512BDA7582DEF2F9515E4B91B848481DA1B9C9BEC3DDDE9C21623586F1B1F5D315DF1CDB5A1B9B321F3E1CD682F5915EF50EDE30D1FCE5BB2195A85DD72758F08942D4BA972BB9FAE555D6EDCE0C95A47CDF36FF1389AD34CD438E4B4E62605F708D1BAAEB50A1EC9513F6E686DB50A0FD7EA3754A6457278C051A05BF3AA12E3B246B871DBB0DB86A18F37C708E2BB7EB26DFE021B6EAFAA5FCAA4F34712FEB3383DDF420D5F1769D81E8D36E194903EA4EBADE36B4C8C10DD578F03922865F094A79A3FFC015654259C03C078E616B71791105A552B4008EF87B031BFA3C965F71F495923ACB02530F8A3401CCB22F7B60C3878F05BBD8D6A9A249DDB0469C059535F5681BDF24A3D88A66BCE7532C5E492DCACD850DB0F2CBF99B51C49AD1E3DE84D409AD39128BB4CF503E820F60CD1F4B8B12B6CE161458BCF1731E636C97CE2970497EC2F95DA934D2E28A8AC5C00AB9518EA0D13268A2C2A70046BC9FC1109A28E84D6EADE7DC4C38CD58E19667D3509749F33A6465B1BD9FACF8AEC08B5263FFB40E9F2BF88E58D4D6B6A81FA9C989D4F4548B95D8E49CEFABE9F994870CBBED0C99DFA648E5F21D8FABF31DC0AE2672390AC53A44080559F5B5B32FD631434543EBB3DB7ABEA91663E8D5251DA79E843B3DB8E95572D1A100EA9E1FE5D7E496BFD6393969325343858609CB0BCD63DA2FF4F47EF04C96A173C14", + "k": "838F0A65718F09CAA908B1F0BEA85FEA0B3B37BC061DCD34C2E1A64C3B1BFD8B" + }, + { + "tcId": 58, + "c": "CFBE1550CD7574168F66AEF66EC6766BF7E88F85AB46CDB37CC4859F8C1FAA8B4B80DD96E97658C7C98AD468A829D4E369E89A0F42202DF5C5E4AC4FCED7E89F85255FCF6E9209B69C54E68512116167F69A4882C069859077A82614810BD5E7A6BAD5904CD8AC7D34E927DCAA35A4B8E82BA7469679A7C2B3157634797337642CE1CB7294A13BA5799EDA585017993B1E7BC3C95312E1CCCF49D5C8C9469F4B09E4203290AE4E495B2C79E066E8DDA17BB078A0918FC52C6D6C354941AC1EEAE92063A20AE02545F306C2F1F302087F881216E24236B5C4E74C0CFFEEAFB136CF834D65E175B9F5F14AC09765088ECA3600F4A95FE91EB1DAE07344FD1CB497F0BBEE82CEC0D5811A7C5A4065A8C3C1A7528805F7E5F7014CDC6F9A35BDA7EBCE16E78B05BABEFB0A31E5CBEEA510FD3F371BA86554F5A0170D22BFB146161D8A6CF15840E69201627D2281B75BB174A83887922D5498B384BA9C7B1C1058147CAAFE01857C7F7B18361B362CA73E9E9F74DDD5AC7C4167335DF50FA39D71DB4D1E904314AACA086F53A33E1D1520ACE97028E73537B41AD1BAA5C9E16E2A77C7AAD7B58C88583CF27517428655BD01052B5093A0B381DFA9F53E2A2E6DDAB9677A4213EA4A3E97D735E30A0A868EF715B418B8560C1F0E5281BA584C4830B39481AA35D653827E363DD60F0078C305F31E90A8FC54321860A9B56D2A7125FD260D1C1F6F0C1BCA599026C2614191107840A07CFC488B27938EDE5C90AD0BAAF38A94E0C86C2EFCADF1EEDE6050C591E28F767E5BAAB61ECB51AE3435B2778D0B469A63A1989D33014D8AAF046190E2543D319D0D99C404AD349C04CAFCA890313164A8B038DFA8079B862D3C06AC11FC9C3AB997BEFE3EF6D912A9C1C6E7F00AB766C8D00D91E143D0103D22C9BCB1EA67F5D019884C4B4ACDF9478138516F319C0BDF51535B7377B39C36231A88E19E409046AAE8E35EB1A536A38EF0D9D66C0848B7B988C1EF6FBD9B64A5F47BE4E79508AC3DAD73E5343D4580D4DD512EA44687446776E700EB7DCD46217FB138B4B1B487BB143D04FD3A220C5FAE6C0E988513CF5864D0136EC80522E9818CAA1EF9BEB1B7A77F186C9185C2D449CF87ECBA318D78082EAD8783C96EC4308399153742CB619B9081C2235251CFEAF1509B6280B9039F89CBFE5FE8B3C017B6E3299DB48885FA27C2515760BC8A96DEEE80BE6E4365A96676287C6C226C224B93915F203A46DD0FECFFEFC02431A0EB5EFD7EBDB0F50BF776E0D41D1CBBD2B6AF6F2C9947E52477FF4A2774B92D5CF6679E634493B65F47404350437723DB52F7DB7491664B1A410B9D474DE22A71EE6BEC392BA191BB2EB101D9ACA1A59687233BF1FF384DFFB0E0749BC5D263993C6CDE6B4F6CCA224DCBBA4E51A09D51E95570C236BCCBAC50B5AE02629C5EB7E6A43161656BBA753DB48B6E40CEF16DAAE1000F3D9FDAC8701D3A3D573218D93CCBC9243DFAB117701BFFB837F7B32A469A243BC9F3C475B335FC13E22F7D8D83AE46F249623E0D32B0CAA34946617CD07BDA8C3D7E549B277457846AFA05BD34280949A2736EAA998D94EB6C8B30E137A3477E21AA174071D1C02B413EFFAD2BBC3830E7E8F28214C0BCB6C96F0BB2B698523BD6E5D2729E04E5A42930D4433C3DF4779328C3E2B5FCBF46F93D4E127D4B3B9A7A4F5328C3C88F4CDFA0CA28D7AB2F091422017303D00B531DA123909BB69FDCECBF7D5F947D7A6F62CDD4C8870892A3ABE36E1BBC80EEC81AA5DBF06762B42F7F0DF7BF3876C6A4332AF1CC6D560694D0545884F51DF20EEBAE8F7D4F06C5DA3B5B564564742F95E0E8D502DF6C3F007779FD2F23B52E5285D49B3644EF5563D1D90E026AC08C4C0D657A897DDDDE76B3996A174C63391A733339862D9A9612C2D5742572E92CD05A942AD0E81B2EA8BB344FF59936D77E1EA2EC9E120E09DC8A841B6855D605FD2471ABE269439998BD1EC46FC50A21FB0E826269D9F3F6E69C7002B4E4D92CAD36FF2C6754671CF05367F641181CC3CF0D0B6AAEF7AFA2A62E1997ED34A2B8F7DEF920E5D2F6600783E2BFD87473FB3913F4EE3015241DA92EED2D6139EEB4A5219FDC6CEA638EC7827EB9A070D2A26861AEE3B9409F2D30C53F882EF4D1E2FB7432AB7F5FDECA299C9AD70339E3ABAA4FF0D96DC884E94AEDA6D949A12A95BBA340AD9FFEAC", + "k": "E599159CF054848F6DC31CFB52576B05EEA25D9984589231468A642F3E59704E" + }, + { + "tcId": 59, + "c": "8845D1D0A190F66F8C7BFE07A24C34BE5837B24C75779C1E6F3C6E0ABD30BEA35D18B5BE5FB1985C1F44460B2376591AB81316A1FCF35B9E6D69BC34C358FE250D18A8EACDA0E13ECB3A6A209DAF5988D8A29A731165E495704C3CDFB96413F7FC9F29F9E073047B9590EBFFFFA86AE6641F87DEC189D252542168F84EA48FEB3CB7A3E30A82A6B2B8431FB50BE838B2B72FAE1F428F578388A807B7E57B52DC20B7FA97F88BAE590B0B9122EF19B9BDBE675C3A84435E90C0E3FB5A0A5D520DB78FB5E3E81E3EC9FB2CFD9E8935AE303B7D3C0B4FD95B54E391FA4819B52780B4DB8F36CB47707FEEC400434CC8FB9980EBB87A74A62874EDABA075B0FC372A97425AD0C965C236FC0EEBF05C5FC37DE90A5659702C19267A7A81D067663C57AFC79E64DAEAAB2F9F77C25B53536DE0A45C6971D16F503DF9F940CD6B7C98EA829D1E466CA553B8D4AAC3F0387AB715327E807D889D75C1BD71040D12AB6C7E045DD417339752595CA66AAC765E9DAB8941FDE4D048744A0EA05EB52A1A2F3210506A48C1F75D35270CFA269B056900488CEA19F2B16827B87DAD8016FE42E6E4ED5C98EC17C4FE82EFFD1668C0BCD8B641CAEF359FA9263E1F705B853A70AB0DFA7A0C631B38D1DA1E0234D089354E26B26DB5F9E4968E7FCE7E098480C52A06BB6E2AE71FAE1C1EB942EF1BD451269C269C336D6722D0C9FF71323B51F8923DAC025F7AB0B2F71C8BA16B57FF99E6994433A4DA66C87BC44A2EEFC7C8059AF4470B66BBC175DCA28A3E7B21715352381F6BAAA6246826A03A0158444D289FE00DC4DFB38BD6705C47204E9A152A49A6442ADA06F2226D1027FB361CF1B89530ACA1B588F866B9D9197830651878EC5215D4C60C764A27190103C7735D8EE946405912F184C87FA94FB8BA45530D376ECCFB5C6EE00A70644EE2E072B581B7C1FDA45DDAAFF3D776AAD6EB680CE0F9FA4FADF20B8D29D766E59419507A222927A15C4C12B85D50350F38066AD725F53824D345584351A38DA9CD99E3BBF4E535534F7D3D709BD510FCC1AC92298D0D5A813CF1F0C18B5F797AACC1498E8FC1F6913A4826B25E2E95475860A0729D268E5BE3FB2B59BEFDFEA7C7328F4E99846237DEFF4675552AB07B3A19B3B94F98E50B087D19B1AA8BF2DF77CFAF3360DA643E0380E658552133C39FC6BB2FB10ACCFBF8BC10FB3F186C6E6CFF8863567399AA726BFF73C87ED3AE9E39D498C70E057E17056EB9593605F83D20822D1CF871F97E74DAA76CC0FDB253AF1C8565439B71E99DFF7EE53487F135E3B32AD844995B2DB0FDAA28494D78CAE98DFE2A9C821F605ED9BC0F2522D9B9EE81D94E2BE8011BE30C3BF4E5484E25B5CD95A6149AF00DE77879CCDD8D274E2489F4C968A05041CA82875AA68FE7B13F35F2BDE41301A276015DD838BAE65C2A6CCACA28B3B938911FBA3FC328B185201A55AC6ACA3B93FF48A7FE1E60B35090874C2B9D995F397C56AE736EAA2FAAA4F0FAE7AD325D6223B694927AC65EC2F5CC72DFBCAE406E2A4A37AE23D4581388FED425114DDD52F4527C79655A45E8012DBBCD29613A76312B030FD51EDFF156BD1674DD84507AB96E14B830185CDDEE6C2A1302F31A38CF72C074733DE1FED46B85103B736D752444D2BBFC68AF2FD5DAD59541279015CED13DC9011EBE6B08C39BEDF21A04276AE9520C11427F0C2039058E0CC1FC32376EFE9B75267D2B9F16CA6DC636ADDD6E1C3FEB427EE411D35A26ADA712C88A64B890C328075681EB76FF68B76A91BCBF408680C92BA9DBBD918C53FD58E240949D24A2D5245AD3467D4F65B74F218734389F7C5999D959AFDBBE1582387688372FFE84035667DA4CC161B8B2C4B1A4F85486F216D253F43B525772AAD28CD439197D9BCC73FCE75199BC3E264C7EBA999C35E84D7CF2230B5BA1BF6FDB30289C9FDB9F62EAB9EF171E21334BF2C60C93D8CA1D272B50B67139D182A47ED32B12E41A13A194A451E77E588F2E045E6EE8D71CAC8FE88B8D4F5891DE732AB30F8CAC205DF17A492D38133308B73B7EA15941EA11DC59EEE8A9EE2BE68BB15B436CC5055D5AFB3D1B22CB442F23CBD56D87A981B812EECCF3FE293A2FD3EB315E28778D7DDFEF9873E2C869311C153799EA2C49A056B8AA1025C7CF088F247BF1A43C9792BE9A06405CABBF7C2C1E5940E29A049E85F0CCA62789E22310", + "k": "89B2B8721232D3DFA862500F4988C70BC09137EA744285E059746A239941E7A1" + }, + { + "tcId": 60, + "c": "2F6370F74483C5CC4692154881D22DE8ECBA6C28C72A0BE59448DA948BEBAC2A17C25B7F037B229CE44F1575FE4513C767757C608B8972CD135956E0CC93205A2B52FFE6F880FA9567BF31B4E7AEEE92688A8F1965208F521A3ABC6B00B7CF2A06B06170CD3EF2E23FCFB69E1B185A0252EBAE13D3F40CFB4DBF8E2409609C4C595176EA40BAF5A4E73B415CE28B244DDE1B87A108E0B8E49A274F1054B0D91379FAEAE42E43CDB5A794057CF9A56191E30C3C0CD5DFC8FECB493240A4073BA1A5851E2152757FAAB2823A428AEEC9CF254DBBBD9001FF1CD98134602437900E8A5EC527985A7A3199B4C98C8DC46E7D05A58BB461B64E595692C7A256F17C4730B35BDB4653C50742FAD8730C1FD8F0DAF35E063DA9FABDFC9FFCF0BA75D213392D4C6558BFE3C5485ACFED6DC62AD8498F5D279A00A76361F79B1BDC28EE2DEAC74E577CB6D47284594ECF03C3531C73B5E1618861D7389DB47F1A5338419FC2519D17A2ECFB40C6AF911691E9902D8D67ECFA5050A824F65C81B3EB281108BD7A0C356B0EFC5F28A9607335C0EA7DC12CA0F9AD24280A3A678D9A41F397F3E2868A982F019C46DA3ABD29ADF2799E919E25276E3B083C1E296E3AC2DC0F3BDE83DB8C2191B7126BA3CFABDC78BF9DC0323FB648455FF12A3FA7B9CAFCE0B34E111E0F8FC8768AA97F284823629CB7026BADC31A92F22A284488051195A4F996C2943BCF415D160CDE5F34429C5D8FCA076B32A135734E2EFA6A67832C4CD7AB5E16F1BB6F7C416FADFA0E402CE33B1794C184B3D76B662CDFC8AA61B7F8ADE4F51C8DE10DEEC00A69E6311C707F5065BBC3634D49F65551F7B5F06308FE7B47BB154D220D02EBCA0F5825B5A56325FE69CAF9F5307062953A1074E8DF7E0294FFE25DB1E743629813D2A3604CFF5E663C24A4677664E8C593E1F1A174ED16010E51574B5B3131C45F211CDF6CC726276970951644D3D12325742E003870C49095BC619B1A413BE88547FA875E9C5A75C6F89A9181369FD6146AD338FEE05944BD4096C2EF4E1C038B9B5F862BD2D0294E0C7D4963F2261B40B0F66EF87F0E571EEEBF0DE53593D85E6ECD3B36D91EF4AB15B70CAB88B7A7A288A916E6CDB013C368E7E105DC8305CFBEF0768AC30A451278FBC63D5FA55A5814A29C3853444BFB90E3F5355EC177BD8DF1D6757521ED873222BD4576D2A1500FF0DA13566F4A1466275C3867C375D6530882C49248F921F0B79A15E64C6C82DB66D6077D64D99C9FFF6BC6E87E74AB203FD06BA10E07896FB36419BAE9808ED7ADD30B0A1EBBB0AA81D0DDA6C47FE431F5E54958390388CE4061DFB5A6982191F2AF2FEB05303D321D78FA47B9D0DB21B8EED0B054F00C97F871248AFF06576042EB60FA71986D1FC49761992223C9775AADE2DD8D1B52A29DD3EAFD30DC6EA16C0E4A87FA2702D1F3F82DEF2F95003DC6EE6D5FA99BE002DA6F32C528341537C584C012159E5213736686E9868947F579DEC64ADB2E979EA2EC6D003B616BB503BB874430267D55FC77B36E6B37C9131482028AA6D43484C9D859F29491CDA3650185E40A105C8EAF34837BBBE98A8E99B8896ACA5A0B9F0DE51F4230D4C0B099C212F91857F036ACACF1DC5F217F19ED39A5E30AEA81907F4CB4A9A9A64A242CF925A0AB406ECC028B7E2F9765D6E633E16D8E6F8ACA754DF667AB1C4BFD2C8FF44E455472B0E295D016D4A7810BBAD7B27C836FB14712E0576C59214148D2B87E018B0DEA4C0995BA93DB8D56A74D2094EBA36DDA9B6E63677E48CB174DD297C31EA83C5F916FEA7FFC520E8DC4D3B3BCEC515037FEC46536D7E360ECE8968C3876AD1C50AB1908E3C8D47E9E8630EEE7A31BA69F468DCE0F6B4304F8B723F565EB1126A2BBBC38C3A79BD20697616CB8975926D600DB9D1C06C5C5030D635EE3DD31E0D51B659326F9CCCBCAADD16F17B4BCBEECB0F743586508B98A548A9CF94D47546D483B951131D5A0945E393A564EABC95EE545D6434F6B37FFE56DB36F0AC2C7646FD1C1ABBE15C1387553E5BA0042F6A8C30D25D468F4EC68C89E0FC87E1724AC6E6E4CDEEF31D7D91C8276E6150A7C6FB1C3EACE8B32B90D93310B1FE7BEAF6AEC8FFE07B77E98BFCC3057518680E9A43195F3903DF5592FFC25F16EBC9250ADF589C13F7AF87CFDD2B49A2474B1E521F1443021897AC707E60DDD4F4D7A29", + "k": "C7E6BFAD4DAE497DA861B5522894C3E387CE5AD1C38457EF81BDC7689BF2E6BE" + }, + { + "tcId": 61, + "c": "CEF8BEC5D323B66915715EA83D4C787E41929D3121B6FACA950632E215F248249245B1D2D7CC5F960A75A41B63051F32A0167435CFF71FE7A4465D9BB22A1F20F45390199A46C508243E71E06E05C4C7626DB764FC9EA5F9561B2AE4CE85181C4E714CE4866670E3D149B38F13933906871FD3DF3EF8C40C460CBAB9E4B5B449EBEB1FB413CFE9A6B8D238C369EAC6519D2B5EEA36129FD6AE291758627B6E967C31AD85D1E35CE87C995C36324E83C99F3A4387E9CF0E945D2B1837977C7542796C3F3EBE1867EF1F0A83A9E24283C2A8B49734B956981EEB513A07FF566362BFD2710B47E3115F719D737DB8E62F8D1242CC0D3F2DBE5C8A427DCD5457A1B38FD83EFFC6831953BD8756920A25895F8BB717ABF1F8DA1622AC8B608EC1C5B4C4DEE4C548B5514314D4B8F5CFFE3EBD97886DA21B051D87A8EAD5874AE4C48E0D1A0B418D27EA3454D2AA0F7DF80E16E16A7645DE87E8E84B2CAE4C08FE9B56629A9A7A12007AC878D4C645533C98E496DF69C45630C5F425BDBFB3EAB4FB39020E6CC82BEAB2519F0F3020E8C48DDF8398D5F61D2C963A91A128DA37C6526D9DF50B56104C4DD7F5BA3344BD856A9DE2071ABCFC4EF027AFA7FE3FFFB1DD123507491BDEC646599FBB13E4D7D8CC71C10EFBB57CE9C79567F51768D116CD153597719B074D8D3EFEBBF73597E64AD2476560217520227FBA6142E95C5625A2EE113CB7A0C1D4DB7ED6DB9A4BA8A344E33420A83CE66E293631537E44D3F8E3EDEFEADCA2BA7EAA593F3DB25496A5D5F32998D1B8EA61781E47025FCAF98471918CD6B26E8F445CE723B008F1D254E28FAE188352AA9F579BBFFBFD9CD802E57417E66BE72420DC5A69C04AF588128DB0182CEBC7C670CF8D55D1340B84E035AB0E9F5A1165F4C286BEA66B76090DC9487944C0BA0FBB3C49AB47FF282C12F5D92B5974E3C4424683C3536675500DFC618029A9E38298BA63B3A9A36A2BAEA3D983D1269C9BF4DEC04981EEB690B306A6FC16BFA33A01B06E1C88618E7B67D47BB179187452C95252D77CA970896BD0213457DFD74D3072E0EF1AE1B7B1F5A410543B76E30BC891C69E7C9AFCC39A645DADB8BBC75321A27F175D5324E71BE559C7E4A47F1F07FA14DAF48F8B6959BDA6D2FE656E0E8AE4BF28CDAD091512538D070E3DFC0530776A76A6CDA97B5FAD733849257225E9083E91AF16D3E54E3FF8C3B2EE3C442EE162E0EB1B2F69B4801948C9CA3D307F2A276490A2CAA4FC3BB7FD2349EB148E5BF62F63F5A4E383E83D12D13D0075906754617B0E9BEB91EEC182AD2C17890213C5DA65D01608B781894249B55F09AF6EC5EFD3B222EE45BE2A6A19570E7A933E56EFE9D8B33DDCA6211F660AC1022EC1DB4C8D0D91EB6055B48C7B3347950DBEA8A512169564258DDF2C8F68EFA81DF0EEA774BAF3D00C55613ACA81D06774DF656187E98A2258456E1270F606D589F005FE36BB28AA66E6942CE100659800E3E576DEA195994EF2F27BE2B7C6F0D7A1FA94B5A0A1A08E9F27F62EA945633943FD63EF24AD444D15E7DE8B29627992DB451E4CB3396C8F0C8D3B31676D3B0D80153C5AC47DB045207833130795ECCD778B38BBBA0686BE439810A6A54BCCDFDF198BBCF6CF61EE6FA19DF79F4C576DEDFD0CBBD076CE8056300274FB6AA33527AACB894D28110D07F1D6B357D3112D54EF22E342DC0C9B8581BFA4FD4269997E7FAE41DEA069C851660CC549B6D01A2CDBDEAFC1A6FD7B1A7A3C13E1EBBCD86CEADB8BD88E684E8F87D91CED70338F2E0D99A85D763FE9410BFA40E299D5DA9134D295ECC57F2D651834D6E5B4E41ACEC7A840991B98B4975898C064C6155BA816947075EE00D1FF00B09F2BA478141242FEB9CFAA3DA986D4E57D48A0B5115151D6B5B3144C65E9F3AD1545FDB2E391A5E082E9B9D378DA69A6F5FCAE2BB27A0E3814A0B6A7C39EC873EB2AEF28469EEABFBF3722C36E523C96A5410F760F16787E0C283EFFA5D4ADF4CB05D00990F4189114F4AB96982914C988E004D3EC48A1AC946B4DF446AB71AFE635086E920BB95B251D4A6FADB5E0A284AA839685DB270CA3950A6726FCD7BFB8E2A2DEF77E5CBBDB4089149286E5133D91F878610AAC61F4A125F21EFFDDAE48FBA5CA3EBBFFF5256A28F76297447D273D6735BA9901E142C3091BD39DE63804C2C338288A3DE07A48A1196001", + "k": "A073FF56B6D5990BD22AF155AD70AAAD735B35428EA983981B6B21E33D2E51B4" + }, + { + "tcId": 62, + "c": "A8661C2BDA6AD1587413B2CDB17328073797970CB2EAF6FEC5A6900A2FA1424A8E5A4AF210A678163E22971251752FD82ADAFDE3FB5D23558C38CA653FCE4B97D62DA1FB05DF1F0FC4FA0801E70BC3F0D62B7264E2CAA2030B199B3D036D514CD5EA84F89C89FE5CD62168705279CCD5748D5D5C85D4443AE8686ABF27FD4915CD8572C0512E61F3CAC10A1CEE7F934854FD3FFF3F5216194223BEE42D8C722DDFFAFE7D0F849EE8E630C9584BAF125915946C29E45AC7B97B32A6E64A679DF57EA458FE0C76B044DD68489E40684B07656AE21488033BA91C991039BA92FF53B4B16FA269FCB1A0E365BB827E5B26E5E8EAC5BF94FB2DA6B46097BC8A50C566D01C058F460E9C0D62653980B96660377237B07632EFA2178B45BBE44959271C12BCFA32A8736CFCAA74D69DB66A3555CD14FBD17E6C68F7956D04765E4471FBD00AD95F4E13F99C993758D65B5C8E022DB2340F1F6EEEC5A397E660B124C492302D80095902CB7E8831243DC877FD9D440D6490561477FE209993D02482B31D02800493365596677D077FB4AABB4CFDCDF91AE4154732F4C67A59269780BC963C899ADCABA3BC5A12554497E3E64ABC627FD28BACB761ADEC557EF362C91370527CD5EE214BC87CC937B0436767865E5EA685F68450A0760FDD6270AE7401B694B6EA048EABB1D24098E1A1BA071951A9791356A2794E5DD6683234E8D6E8AC9C66A04AA03A090F35974D3C1FED7FEBD92D421ABBD9E31397EC4BC52D2AED66676AEF8AABCE2BD39BE89EAF1ED480AC3B3640B3C439B5657C75FDF2FA9282E1BCCEBE88ECD8923F1AFE4BC81068ECCD6D66B0B14F28FAD248D0E557E40B8F2C91DD68A9B9DE7A3F41A54583112B287EBA35939D2070CE8DA93F3D08C2AADC5B61FE053994014698415F68A2D45E0D5756FBB22CE38DB028C44EFA9C7B36C9242FA71D468ED04D26BE5AA215C695FAD449DFE794707BCE897B56701F2CA9178496012C54C7AE735359F7B6F8E227DC9CB6254BFC40DC27B14E6B5857E6BACCCD1E288FB8013FBCB320AB389B39FFBE51307C5A8D335A4356C16B0F9C1A003308FF2446E965F726C62F41520E6D42DB5EA0375C50AD66823383E3B1B6F412D017B9EB52C87CBF5F8A8150D6DE0737050CFCE824E9E2598A81C091DFA69CAB63691019BD5741B674ABA8EE25B9B0DA5652DB65189733040AE0482566A5CF74F316E9FF3D1CDE32497B45F23E1AC6181BF000B6A377B5557672A3BD80B51A711328A928A3C719732D8D76CB2E2434936C771B063A0E777A40DE09D801F631AA595A6A3ACA54AFAED171D81C6589C64504DDDDF726F4754D88974AC75ABD4A8E90E37322AEFAB50C65739DEC681C5A73A9A194CDA82E5F7C11B0C90DE5556BE6D1DD5174C3712E1EEFD218C792DFFED596D9C1B64CA2034B456F1467CB06BD7CBC45F3E95BF84232430BD8DA1DAAEDB74A32515230C383136CEA023F9558A921A77B8C393B5DC05C190797AAD2D1E50BD7CBBAAE4FA06959601B8DE8FDC6E5921425C40E7E3485D704AA8CB3BEA4C20838A09FFF3D7BFE02AC10E3CA941CCA6017D3C8F6A07DBDEC358C4BC249A5728A821263CC22580E1F5C1BCBF41C36A78C5B73CBAF75C1C453D26F0E3F59FC927F726E581115711ED420ED257687186E4D709ED48619A62BBA3DB782CD1D81B448824A3E13A7ECE84F8021512FE750E078E735FD1379E0483FC6091DD6E8763191A8B96E0F196F598C9AB2940733540EAFED49787801B85777A3DC217B54B5F68832C38A7499B27BCDD13AB1CF5BF9FCB6BC8E51F31547F37198025F36A87F74279C9A3104D7E16032DC0D3D0FD3E2953FB2787E927A8AA684C7C7731AD4AEAE26BD7B1178BD570F89D54D7A284AF46D8DDB7D3F0A0AC519C628CE35EC7885B48DF7F109233603CBEC83F9C462D148C6A621B68ECA670B75E8896D4F7E351DF60583D661323D28F97C59F757D985B06BCBCDAFB700357F398885728B5EB795AA398561572C5F24527D6CD19B60928D21E38A90DB4E4800FEC4E2A3173FAD1BADC0B32E1F4A613782D9FEAC79E48A8115C5CE4007940AF48C4DD5E6BB84C397C5FE430581665C9040CD6F0359EB2A75B9B8C2BBD41622F271265DFA1AFABC8A518C53DFDF730F4EF0BD6C7453E6475DBFD9580EA3B71AADBC7998E3A79F2C0F64D1CB358014043EACE2F9AA830297C977BD9BBF", + "k": "20540BD59F596E7B8E7EF1072C9529352F534619DDA8F49EE42EF1F2CEE2085D" + }, + { + "tcId": 63, + "c": "557D766916B258D4B527CB395BEBAC3B049109AB9BBBFA70C9E8617C220E0B9A49A57B17307AD01D765466ED56C74D7DAC1644B9EF0B32C1A7843B0E80A00FF439EA3503D518AD8190BB92CCCFC58C390012F3AF0E3D9617770E72473F249CDA04680D64098F72B056B8BCAF8C69E5A68DA8CEDE438BB0E0609F2C470AA6768C8AC04E1DAE442BC25290C0FF53F718724BC5ED97BD995531C0A8F1658C14EE321C1FBD2883F6984E50ECDA17E14806244A6D26D753A043CAF0D518CD0C45D97787995915B56B337BD398E17D8C13764D1046ADAB51DCD89A90030B4141D6ECE8D0BB32EC82C3250327C8F3B16A23180A3E5C3F358F3DC9049D0CD5A90ABF63556DEDDB0C95B4AEDC108B95E70AC9798A7CFDC95A8A77D01F552D5FA794E456AD598DA9DF93E09FE8F8BC20F6FF39508B6F1567ED66848E0DFD3E76B5AEAC55123AD6FBBB3D294B4E9033FC04C34B72893AA54A25C573A27D2388CF7873A79B67FC459570567793DD9AB64ABF31F5798AB9355FFBED26316651040C814F2203CA26058AE0562F4E3B149343B66F693F0D7C4D8B0A9A8EB4EEB41DB440FAFC516DB779FC1B66D36DD7422FA1891F49CA7887C8B15C5D605EA0564270E7831A375153D0D6A340CB938ECD9D467DC476B1646D2B8786E577C128C15BD74010DE2CED9E7A332B33B777AB553D74C5481B6483C6ED97C84BE70700B71AA2800D9FE24B9E438CFD5726D6BB2B81828BCB1A75E9E94443F93AD8F78B8DEE017EFFC19DC327895276F250F55B686CF9DAB6278F3AC1FB43D51F9E3E7627AD052BFBDFDC8E768A9FF570B975C635E60297347A88A16FB7D806EF0705656EECCE7061907F87B6B2AD6EF8E4C98B8945C128693F68F1106075F4282137A5ED7B404577CF606B89EA8BE853B7A1D3FED3A530228C0DD2DB8D4A3BCB1DEE5005B5CB4A9885EE06F1702D338D70F339FE666BB71D67568EE17AF9FF1315608BAD2FE3DDF12A1D3950D7FD15FCA8ACB473026274B702DC70CDB4CE205367AFC4E02D78D8B47182A817FF513B72980A5F80379F34DB419F31C862D3259FD2C957EA254031C4E760FE249C9F9989BFAC0E5AC42F373253FDC48D11E87B3782A9FAD0C8405F3F09E9C17D9C717F31BB64FC0F3FE670DDC397A4F6D2E2F3259A841EC0F5E54F9340B3773EB4E9EBDD3206899D7CDE13E135FEC74670B087FEB5EEB8D958EC90194ABCABFE7255EE54F504AD2604969D2525DA07889E7DD38C3E30CEC776BE1785622FE8F0F8E8D78AC93D7BF7CFEE1155D37EBB5EAA53A54B5E8FDAF712A89542914552692AB761D6DD3E64ACD39E91E0EA009D850C235DA847E0E66A094BA5A74F47B686E23E8C51AC3C29DA6984A3B230A86F61F063AE0EA939BFD54495ECF533A4CF2B6707C49E243CE666371084D44697E89AB01193C7E9357D60EA76FD910FA6F7807042193055099D1D6310DE2F9B32A5FC268218FD29795AEE8C7B23369B0399E3EBDE684970EDDC1A5D8B17D9FBDE75A704A31A0E5CD9FF0225FEC334ECACFB798E4D6821C82D510C37B3CD9AC6F350F2630561A8000E238B83FB4EE04B272A8102756B1E6E0D8B62898F8CE27DFAB311CD2719814E4A351A5391C6EE6B6AC3AD2A365DB5733E17AC58A6B65549F4A99CA29335962E232609AADAF9B86280467B2753B8F1AD24966981D91727FD260ED8BCA119B19673FB21D44F5C24C396C7DB89A536E2E725BC79F9A167C156C6581D4D63235748FDE1ABFF1280EDB5C7451545C5691CBBA3141879328AE45AFC4B401A9A5C40EC1A49E7B8C9315024DC987AE47E37E623001F0EF08354EF730C4B0733B7CA2E7F4C45B96AB0F93B4C3FD65F78F0EA4E8F083F06750F2EF8E96D2CC3EB68E99FAEE78A840E513C3F79D47F23A721A61DF123A893B75B6E48C4934AC5EED8A40467EF1AF37A16D0640548E604A3ADF15BCBE3CBE012973D022CA84BC8DFF99426CECF354C8467BFABB1C23C20FCD61B41DA4F775D9BFBF255960B20429868A6D890751D2CFAAF0383210BEE69037B220A3E8C984C1B46B84037C73A1203B9AD07BA5C4B1100F15B8CF99F28473005B16AF306BA89BFB6B8BD15912B7651B92B96A617AD793F5DC1207EFE40661A7B5B9CD9B5D237EE87AB1034344EDFC711E77F12166707F712F1E77F370473DC4404467FC48AAC85F3A3E34D6A90AC6BF1077DA77D864F54F5D0CF3B2632", + "k": "80EB17F36625C22FD5520525FB235E5320982B1F83107E09F2158ABE7BBAD70E" + }, + { + "tcId": 64, + "c": "7EBE9B1563F0E84EE84C9BA9BE16A0C9A5468EE60B6972DC22924561B863CFA512EFBF42F727AC80735DBE860EEFEA7B867D07AFE8A4A556E4D5B15252D2D6EBFE51472444ECC3ACA0759C109D42260C776E27A5D8A38A94DFE865927CECCF482075B0779A3BDCA01CFF59F534A0ACC0B3080A13A01872626E069FD70798C4D18AFEC5397E7C13DDAB12568FBB942D534DFBC4EF31F5096E48A97A189C91AE533BC180FDD466168453C1C620EDF156096031EC830966C923358AF65CCCFF218FFD51D7D322AE3388B3CD81D12F1F4A70E76E589E8425EE0667432B742BC4E590305B4E287BD8B9C150837786506E30AA6514A98BEBD7CDAE903947454A0A65D29A35D5AEEC24B59D0E85F4A043B971226478BBF3237740643671EE6B0483BE15976A3A81BD30A5436A4AA8DCBB296CD9DBAA84CD9ED689FBF908270592F670A6BE535A1E54D328E33834CEBD02E9A80A1A93E7EE67A6341CCEA3406CD75D4E0D553C2395A9156A579BE1C9DD92F431AA77AEF0B761DE31D96C1A8A36EB0193C5F418933E7BE9C101C43ADCF51D67747B14B56060C391BC56EF22306BF49F0CBCA52CFC91829BD6DC8F602410047816548BB0FAA19FBC79DFB3F7BEAFFE3602D26FEDFBD302BD0538319F0AE2B14C5110AA97ED7E331A84034975DB36AF8DBBCD09E545F0DFC0EF50F762C6DA53F740955B9E169F5DD4EE45389675FD28FF916DAEAC24DC51687C0423FE4095D5054E1FCFCF0263D1E9AB41CD0F66250548FC4942F0899F0885E0B2A5487AC54D8F79B42D94DD27E9F50F6992C8A317274BFCB91808B5BE68F316C8D554D345210CD8255171BD73212EDA7056A9ECD6EE4DAACBEB3D3E6D5090C3B29F20143EA94D7EDAABDB97D325F57700DA9FE6DF3A2C078271328AA3A239AD30C752FD02AA9405D1FEA891034824A4D31531426D3D3C9DC881E41C1C5E3A12ABE62F8721F1CE501CF49EEABD30202B015215895A2A4FEF028F3BC8B71E300F09DC4136920B196F1EC6742130597B6AB91A7A5684B2720762C8941D63D307AA95121FFB3C3B93015687AED245479951D83D8770B8EF6F79B403FCAF9E76AB4177FFEF6F769023A76A33A8FD98914020B5861D31E1CB72EAC9140215B2F3190E690FACFC7742CA319D3D402C0CB68A18C6A1919E6CF3CCBBD30A0A163B2DD29A8E61C4D544C45AE5E3159F86D9505092A17372D1E0BB8649DA41A820F06D10B5D2A40AD331BD10BE2A8C0E294E4C18C24C9B132AF5DB8258B292DAA1FD6F8743435EC1FFD497FC16EC1769ED8530CF82B64B4E912ED4079D6DCB3F65FFA2876C723995E875CFE7F9EA6BD7C492983B4D46790106561B42D8E4B2E6AEA0B52B57069501D0BD0FDDAD3AD831B763C3F0497A75742FCC8EDD1E07086813C16CE94943F3D913181360F1010857AA7E7B5F63756CEC567170005051D7EC561D569AA9E668E7D119B935474803600DB081C2B10BE5DBB99AB856E93F265EEA219E0D5002CAE32D3907B7D278A697BF4EC174EFAFA49183BEF106EAC9470D5BA4C7007103365006EA4CB8FE3B5AE6F65DBAB46E38AB2E3B38502BA280A8DAF9393DDD530A84084C687C3E392FA5F3B0428E8E3912A9EFEA2DE3AEDE3CFA78BCD43285E5E9EB7DF897E54344E48C963C542E57BB5BEBD84FA845E13968CE29EFA259ADE6BC3E8BE8ABC385E60551B45400229572C3F9DED049058FBDC81A39EB4C6E4C31FB33287F00D129B07EAB74EC695FA34AF644A6D52279D840DF67EF4F20BF16EFAEC786AD7DB2756B8B35A266419551306B383F8176280E725D3542BE054270F920EE1F870CE2228BA360CDE41A167F385ABC87004CE1485E6D633C8A584833FD7B5C1EA34880AB31973BBEAB9EF3F5B1C257ECFA507ACB84A82B38D5A53D4AEF1243AB7E0C5FFA4AF09CD3AFC5F5E3CFA8DE0D9B309EC9C5383C89505A7B2CE16F047DE1BDB4FCEF958B9479D6BE5FD09DB6D7046F6C28C8DBABAB81AF8EBBE928BEF129627C9488E9AE6E9FBBE321214634A0BA68D939142515568F3CA7628D3C3D132B1B972E5421F8989BEFA33CA1C3829C6B6E1363EF1DC2BE831199BCF1A98B23355B8CF445E5582FF0A56C7206C3F05846C22635472FB0BD962D4622EF144FD07E634B1E272C6B25658AE6C6C6841C47B90B73241081E1EABAF5E76D144DC7BB42306D102AC91AC89C08411E4DB7540B3DC15B759E60", + "k": "F41512011C4A9D65F469D0C97DD95EC6E4F9C93ADABD4C6DF9344CB4E44C9553" + }, + { + "tcId": 65, + "c": "65002F23D04A949C9D2DCFB45ADD2BFBE4BFD4621123E8717FB143F989FB1C321F5DFB09273E60D37C4B413D6520B30B5EF452109EE1BA11862AEC64C8744FD2319D843C03F789C20DDFA8A473022895C63F64AE163126AFBC182B78C14A4262FA2FE7FE021EEF5C0EE27AD5503F08343770F8BF5E77499F23A19FAF899F4F8B2B6BB1531272A6FAF366691449A64E26A60E665A8666585D89320798B184B24D8A63C38D2E32A65BE9A09B915C5AD80F35753B5D30636002ABFFAB37DCE1217045B4277A0D8EFF219C2FE76E674A86854C1EA6887027135A1F30F4E93A69293151F7B1D799F3933A3699B7BFB2433D6B57BE781AF7E9F395CDB9BFE05ED432ED9D48E465B2FAA122605ED724208C0FBC245355176D5B111A2553AFFAB6101E171FB6F2E8414BA336B954EFE7AC2FE358A71F46F929E97665716499D06E39C55EAD2B9E4C2B2A260383B7116FE16968BEE46ACBCBD85C74F59D5066E7D4660C3FFFFE1FF741B05AB09EECD14D99259C518B23D74F1C6B7132BD5E1C5FEC5B0D9B51B7CCBC7F85B57546636A1803001358A6D6554E2CD801153ACA0B8A844E6B0CEEE3A3905B140C66D1439747291A13674D119740C0F91680E37A5650CAE168507F1D8BDC5AE79E87F2D25F716821C55BF8EA3CFD11E8027854D50A91DE70DB533C6559FBF5E80CE1C8A31D3871110025FCB131A588D3BA6475C8B9601CB18D6E5354DD0298E623D3D5EEF3D8B184475414494F5C92B14E6270DBA7F8C015375FF0A4149EC2491E17D4B8A503AE1CC717B0297BBBE3FF6D7004A578EDA2284DE026B6A976A597FCECAF9BD40893EBE2B036566111C7B3DF3BF5565DFA37CA69BE8B9D1935003241C34B1481C8798BEBB0DCF688E83F4225DA08646787A13B5B290ADC1171FF1CD5497FA7D02C6A4C7FD052A0FAD6F51C17A8E85A2E25059DD852AAC621E7AD6E3C7D94F39FCEA61EA280D47CD58B2E63E5B1223BEA0328A90747AA2FE072DDBF30D89E969FED3ED0506105CD2A2253D5A8FC02EAC42CA1F8891DB3238689A8BE5996E13DAB63F66F8612228C5911BD905F5BD3035069ABB039F89B944175DB5C731E0B528826C29261CB9045B6A08927FD52063E8F28D6528D56AC96E5D177BD5E624A02458989204FC6AEF101B43715166A992F13059A71DB21CEE2DF98538A019C4A02CC2320E16008B9337D351DEDF6D896B40FA29C2F8344EB7883577848D462659AC67CC998AB9DB4ADD0E4F801D46B6ECCC9E7117C692459A057BEEDCE913F4AE46199BD1828C7AE10ACCD88F5C0800639627F5EBCA78F554268216EDE74CD81EBF8BE5DB89E00C96F0C23BA4A84FA13861785BA8F57189D4310687CEE1A637C44A3D4CDDD963CD5E51800F24227E6C3E82A60D6DB1932A1417FE048D2366564584C4032C87BDF40E9B09D582334BD43E9E912A61C28D6333AF6559A6D3184B12AAFBFDDEC380CCC90CE6B7A3B7AF9A4AD0D4A650C1BCF874606B2BE80D41C1F09580B3CC6C0E04B87753E023D1347A2C45AFCDB1D0FFDF396D89E048A64787E631D96847882E12DBFFBF996D5B202C92FE47C8AF737D4EB6F3111614A807F1EBB90A154ED9CB4EB3184B6E9EEF9B6D65F22F2FBA71E0B01EC241B63B8ED28D5AF6D43B55E7B03DAACD66B6F05B38A1F3961B1305EEDA33CE30B3DEE6253B1ACFF2F87E7C3952EE0D3D519CDCFD30F2ADA0AAA152A15E832593106FFE6D5AFB165B5ED992BD5E5B7B985F5276BBBD0AB2FBA53C5E974C7746F4915EBB7D829189C1B5E23863EE56BA3A5F830E803B7E7D85C6EF5B3A00A8B99E485FB1740CA966B76708BF3E4131378FA82ABCB8D375E032C93E0A36E14D9B7C4E59772F6802922B89C4B959243F4844E0451BC4FB74B8EF039D1B33CB69EE1ADE2FD2C64C505260867189A76F92224E37496B678EA206764ABD95718FC97BC1FB729FAC78E194E304A671D7425343E18F0E85230456B6A7A37770B479858FDF26484600764CC4C58EFD1D58F0999C9257D8F51E9A7EE92195FF9A6A5F4BFE3ED8BC619F9F98735BD4C473A455D3EE2FF4291AD2DFA42B5EBA6F2774DE00841E8E92F10B31CE4A425BFA742BCE50A310559E729A9D97A8704B2298B01989AC327B65570283492D0FA85B166281580D00AF0FA1A3E4C99D61802768DC15C99F61423652A745EA0523FD8805FDAF3283AB32888A71D87A9AF33973A1B0902", + "k": "8CE7425F0FC46EB09989808EE500D55931CF2446593DC33BA6C421A0C45C685B" + }, + { + "tcId": 66, + "c": "EDC97FDFB49C6AF6E281FE48E0F50A261D8D98D016CACF6287DC908C636E2FC1C3B268B8E820B75C03E8FEC34E38793C4E3F5CDECE36123C7ABCF1FAD20D191AB6A0B0CB83FE15B1BD8F05E047C17783020C8CA33B252BC9518E7DDA63DEF6AD77501CDE69584A5C072320051F586D1DEC1E803521FADCA55F24BAF04B0406C769265714BC32EE9A9DA41C373F4AB6112026F56F4A606263134CF11FB48D33EF620736A2CEDEF8EC597A0AD7A91EBC13CAF7C47F56C022284A0DD133C43B323F30E55DCB462F7B80E557DDDFCBBD021197245EEEEE54F0EC1BDCFA540CDF25F301B5ACF237B5438D02E56E5841208AC34783BBDA32117AD7F333FA934D03070B72767F910EC73C628197F3AA2F921CD7FB4C13EFE71E00A5DD275B8FDC07E2192DBA7AB24BF8C0D26B85B75C89AA373F410AEA891453611A5493861E98BB47C17A79E85C2A8C904E030CF2D9ECCACB5D06C4CE6C2794F6028ED78EC730BB9E13A9A3381CA545944FF0F0039FBEC7FB334B532053C1A67B87556E9BC0FB6ED07795D2D00F5750CB05ABB05D203A530D8A7F4604210098B20776E808AB8ACE6E5D4D431FA0E0B8E37C06CB821DE1661BA495999D5752D8EAD125C1CE48ADBDE691EF823EA9C8642FEE74B87C1CFDD68804685B5F62252129110C250616BEA84E53278FD9A13C86AA0ACC280D56B9A118C6D42D4295C259C93CB6860A877A0F7D807F32E85F052A1214240DF46DAE9C0940CC57D637C2CD75E8F17E86259B61D337039B1B34BE5CA9F6BAA09906987172F739B0C5D62EBE1E85105B944DD69A25D70B5E8F9E982ED2759FE3FADE0213A5D5CCF6E6ED9D1CD0E9440F514E8028B90FDABAE09BFF984F86B233F2CFCED2ED6B0F165218025E0F635F3F0A272205180647405721AF6DD2625D46AE840BD01594B1AFDDEB502DC1986B37B306C593A6E65B5E24E816E4BA2EC3F5B164CEC402FE1979819296C8F5BDCD933BC127345B68B6B94693203783E9923EE68F989635611C8273245A328A37F8061157D7834F9B3BE85A16EB334A0D6BB6B369E967B1A5596F264008E35DAD6D790655D171B34675CDD4610878616587411761E7E4AE5D1ECFCEF70CBC4C95581A9C9A7D672A1DF5A7110DBB95399F9CA0FF20C8DD670FBF8B11671FF1CDD1816F0A85D441B9C7F26B9D1BB921868F5D659B0BBD845BAAE81EF88F72499CC8C1EC0109F92731975F4FAEA928E328D0237AB10F91E9CEB70F4513D1740739EC5A76B5237D399AA8F186A673BCD1B41D97CED5BD2E26D9F749E1FC13AF35085717F3AB5FE2D13B02DE7EB4D93008350A9AFA9AD8BDB7762D74C49D92BACFA791BD9B1FD2CEFD6CBFE7FFC268053BC10A078CD4F018FDE155F37BC7164E31DEC93D98C39C06518970EDED1BD7618E3FBD20EFB2807D9F512D244E321BE6CD86046B95D7998514B2B37898881EEBD518B41452E18DFEB440C7ED82E3B02687D4D77B2D9DFA969DA27D59E7F2140FBF0F80DABC9E524C47330B07D52E9EC5B2A6C32EE4AF6439523A3519C217D87631EBC4FFAC40F39CD95698FF2609E5C63998FEBF636CDF90F698ECC6825028CAFB35BA4B6F49449EE13EB2202FBE2B329CEE29EF7D333992405022D3B7CAA1370A90170B0720DE2BD61126C6704D476D0C05B847873376BF84D062A1F10419CA4C77FEE46A5A8935D3C7C100F1D0354081DDA046954D84033556DDABB765C09120E429170E0F2A721B5D5FFC794A15748058868C506BD6B73B5330653152333EBC60DB60BAE306363218288005D49BC1C5F5113DD54C44526B0C8BA9B2E304B8D49FDA1FCBA2018AF58AF29F8C88733BBC971C737874C1AB0583042FCE547BF9694F318DE67BC7809658DF0ED5033C903F193C3F6300B52C16C29D23DE51F325223BCB06B532D3E7F195D399098352E9DEFFE8CD523A5EC390596F7283EBFFDA34FFEBCA8B74FA40EF409D515C04F82AC9A52F647E80CE5B07139724B4961FA798E4ACA5D3FDAA5D0A8F79FCE0513C62D72F9676C407069DAC89AF1179CAB0938C94D865BCF0662626DCB233B7B473BE82982FF4BE5ED67928758E41FD278DA2A57B7C1BABD39DFF5CE1E99197624FBEE169CE331E01BDB251F53327CC2481F35FB2620479DBFBB515A46EF0F76669C150DC66F11D84AD779FAE96328CE4C5064ED69DBF963E37AD8B668A9901C6F75A906BB3AA45A66AB2BD600D", + "k": "F1F6EB76D668C4DEE49B8355504233F437C026EF26F7AFB45EAEFF8FECFC7D4F" + }, + { + "tcId": 67, + "c": "200CB11B5E64A5386BE2BD7EB40ACE60DBB79E8FAB442AFC8510640F94DCB6C4F7468D7551746007393C61B438267ED0814AF5E552F9DDB9CAB12D6FB553E844C48A9FB7C0939DB8818AEA6C8596D8E69D91146C1D8E2DDDD9CC432405B0EBFED78E8D37F0A05ED284A92FD76F804560A5DC3DA6EA770D9B010B70E5D2CD19EE2EBA708C29B12AC497B6BA167DB1D77509D8CD98A85A841AC48DC7663F04D153C1B622831520C3B144BE3FFAE99D9F2DF6010625004219DDCCCF0EDF929A916FB2D04B89FEAE13585E869D5E363218C00D02ACA06E8CBD495F0EC6ECBECBF0DDCBA89186F6182A6690706ED9A02D7F86F252FBFCB39C82BA470F2C360202764BC88518E2D12A418D23838AF3D3D3FDE434F03823A1F968D56E96A67CC157926092C7F97347DA3273BBD07B8E9AB756D17672DA0DE2CC75790DEC37B4FE0632F5849C6777606AC19B2A1500DE834FC404250D5DD3070A9A8813BD81D705E1F31DCD047A1C024C78A1735F30621207D56712C0DEE4E25E36B488E6A95FB8C06B74523C3064E86708CCCD74329628C3932B038131DD02D0F7AA06E7CACA47E786B47A6187252790143326217EC3DE847DD7FABA53921C4881D3229A08B014B51A71B404E1E8EF1F77FBD8A0B88538069060A7633D998845973C4FCB251B695A2116EF6EFBFF18927918E7283D0E4D9E19BBEC8722F00E1F70AC49F4F43E340592F270D965DE8EE77F96F38D1BA1ECCE29AC300ACA272A7C7AF4950FE05269D8B97595A6059CE71DC1E68A8D89921730DBC808AEB57CBB09F2E89B63F7740FF890EE75763377A9330346B42C2A8E9D45063F72B6B4C613FAB93DA2C6280E46846F17D47C3B72B4493E7CF1202687C736C3D3ADE3E105CDF28CC0B110823DFFE8FBD69AC9288795E33ECCA3475B74C7EF03BE18C849F69B807289D47C84813079A32E1C771E02406A18FD2624B16535FB5C7F25E4AD7919E0B8FB20E4C0113760D1A4B9F684565B8424F2673F09A185642B6B3541E2B6E224E1D3A33DB723480E2EA962B6368A2836FBEB50546A1E6FBB26A3D1F76B08D27E1949ED0D92732F8604254C93A68D35FFF0744D746A416B35AA9E95CF22441DA9C90EBB8C85156F5E18BBBADC099CDC5712545A9E39CAA29F3B570580215EAD7AED102871FBA60597ADA67E8CC4E03D935F3A74F860DCE691BBD4A6C8DF627F349884193E88059944A6985E24F72C30DD2AA8D7E92E2C16C5FFCC540B9F7325E6569B9214814C6D31719492889B89561F113889783EB5AD591DE7E21C8AB9924ACBA554D118B81C2C5231F4F58EF2A88BCEA465B17B2D5AAD1E8B965E2CFEF9E7F4B184CD3A70B81A7BDEC9645B7DDB1F2D5787D8179827F32A1F2230DB88590B8A9670322AC89A1B933BA44D6D0BD1FA03F2E2021A012F70F57BA88678D2A283BCEBD7C06EAF6113E5681D96F389529C12528E76AD8F2FB3B971AF6939ACAFEC7B56106D7779FFCED30D70577B0667C31932BA26DB874F2DF71A9471054E2A78F1F72F17FA864A20CE4642BA3AB779B8CEEAED6E79959279B28D59BC69BC0BA1713B2B4006B2BB084B0BCC0D59CB9FF9AB717E8D82F20CE9E6ECF7D993C3237FC07E27B76B982D6107D05096653CABFF52325BFC74AAC9E4655238BE0981583FB0EDE1978C5929222046B9480ADF5E3B4A890E9D454B087095B88C6AE76354D1531B7AAFF32EE8CE553658068DD3F4AFF9D3BE06B344EF793B926A79198B64146F29A9C672F524D464F9907F7C681BA0ECBD4B0E1173AA9506580DBED489438D99561C4B811D926BCDAFBDBDC883295C0D30C1B175DFF18BCFCF66D4F50B538F6C3ECF43340274D0BBB9A073B81803A9490A62182F76262E41964F8751B08130DE817C82B077099853181758599A1708F97161EA1F423A501BF1BAA6B1451B7432D0930B32344DE8A4A10E8906308CD4205D061A89746F34699FECAA8D039CD7584980F115C25CCC455F877179A37273DF725375B01FDD28DFB399F93651BEF40A71EA018365A40EC6D51AF8F081F570CBCB032DD6FF46F16E3FF4CA6A70069464F6B1D5E20BE2916807792432AABBA39B6ACC3466B1A54EFAC54BCCD3E335E99752C6CB16F68AB6DE2522915DBD3FA573939CB60E55877963C19565088D9C993ADA60D43F3EF87556F7972CA616E7F3DC1DA36B600A391282B47BFB58DF91D3D49A1D6F947268EB58FC", + "k": "E3F0FE4E7B56D16F32B6419EC700AC808CAF2090B65B3F3A1423B0FD09A43719" + }, + { + "tcId": 68, + "c": "8B97FEAA8070D6FA36F4A88B3D2FB022319D60CAAB89C1DBCA1308F9ADA1C0A55177ABD686B4546E0950FA24E4BEC5C92F355C8366CFF5FEE430FAA91166F993B818D32FB03951E6E89091A06A869D9F57C6A8F47EC53DC59044080BFA64E64326A6435D31825F0DE7CA9011634AB4A323DF679D69EFE2E6E5660246436BD942AD730E87B7D7883374D53B32A57DE20407F371EA62CAA89388C57798536EC5A86DB20C0143297ECF845B82A62A7DB30062CB5284EFB1D3C1CAE4E94628458B50B150B658F35E4B9A32DDAFBF2ED65EBD32DCC3BAFB56778392E55183E47D1809964658579D0ED383D4486F2C48B92B43F2EFF94E42D4A49CC95EBC4524ECCF2246F46F3B0C1F71DBE2F14F65C20B59BD289CA27F83E77CC18EE205E8A68EE26B50D38A809B2789507A279B3CAFD426484BAFB398DB1C3A8F696D5A22E77E98E3F3A3C36A43380C792D5A1717865B81593C1472C8F6AD1F61ACECDFC6D454135E0C93517912500C234AA0420952D8B81DEA5187D3FE47DB397B472FBFC4714631D9600B22D61521C95EABC7720FB546AAB788BA505460A24F62CE23C7CE178140174A3E178D5D53CC24E149106E76307C151982329CC9E0144A6948DB059BF80A0F82C57164D0615286CA67AF78776FB696729DBB6BC72D38997D04ADF6D59DB2F288E580B449B47AB61B02731FE1D321D5D5195E782536B3D945FC45D484BFA29BCFB03B5BF405E72655F080DA2D9033604D56C664580E7C225A2851482EE9D480DE84B64988A195AB700169334C614A833236117FB05051E477B7856D1AB74850C2B388EE70236F69A5570F3E64B5D2872D247FA07EE564EA6E32119F83C8A6D6DFB9AB66758EB9B05202BB80FCEBE91913740419E46D7D992C8F4A0A45BAD7C2B5ADCF7688715B3CECFF8C690B9286BBED8EB8A0EB6067161774F1C694F0B86F9F235879EE6C257CA460D3BB821EDED98981699B486EB9FF19393727D8ABA3EF020615852F682344DEC6D2C942E6E52B812F0BF1BE87CEEF46D4B4125012C51656C014E131E03BDF7F6DD1FB7E117379377358013417FC75AD23CD5415E2620B493678E8EA74A2A2E32D3CA6777F7953E9DE5D0EF9EE5EDBC2023487DD3C67983D02D9290D7D8879AF5EE96641EFE70D8B834010E72AB78B95B6A2F4CA03FFCB94A757AF0787174CEB800B4B6C20A49716640B82E0D1653D01898EAACAD890EB10B959293A04209ED4CB3CEEE03D3D9F8E26B76879D7A0C319B12F1BA5A6CB8DAD96541ACC610017D2EF31362488D7829A2FCBDC0506546FD520ABFD8451840D93E18F3418912839FDC1D0551D456182D72FE8B70DF3E0A3B08B8B701701720FF7BEBCE457282D90C8AB5F48813981A898D66C028EA24A6440807E4B17D6ABC8F50300E28C7EBE2023AFAA46352E89660098A242C2138903CFEE613376996E24E727E8121F1D99D9A998C6E95BEC25431623747555F8D464B7ECB335B6F30EC3F4FB89E1C3FDDEB07810A0273B1EC72E90865416A9B93DC2B38560B098E8EBA87A94927B89358C29BD3AACEA89C3E4CE0C4C827D4AF022CB48B36EAFBD4DFA7EF706E662869CF74C35A0EF5BBE5F3FB619EC71AF25AAA667F2A35BA2ADCF6C62698C6029BBEC3AE9BEB83064ABB24F439AAB6FD871B2D0A5470BDF75807CB6FA1515439874F789E0DA9964D1F3F9F14E7E3B4FB1ED1DBB931CAFB6C598EA1956987288C39E165F89FEB1AC83D17FA5AC593F9E932D8973ABC525F33C09A8722E24590106E2A12EB3851588AF85925403495AB8EB3DDDB0469173615E4FB6B591E4C8FB476E90F3051C779FA2B20F60E5479385301BF8440F30CE136C68620DA337D045615219C683CAC45F66A38256B3B6262A53CAD0A0056A1807756FF4C7A79EFB7FA3E56DC5AAB0B4349726C49429D58FCB5361B4582A1887D96A0083396FD454CE5F223713C8AA71EAFC0358BD8EB7E71230CCA89C4EB279FEDF1CAA670C7216CC2CB8575B7DEE4F5E1167B1E831A72CE82339727FEE0E9BAE3E86830E8973D92ECE2251F1679D290FB5F09313AD123FC4A380AFE29BDB80691BA29743A7F56F8F889ABF6AE1A380BDF8912BB160C6AB0FBBC669EECB5F3515D01C474DBD085161FBA538C947E8611A93BBC9CA4B369C705A5194E102031DB6A7D999E92EDEB5B35F2DC69237690927684FCF6C10608545A360948CC03992ED28F4E505", + "k": "F04D786C3B46F5503EF7FFF6EDF1B36BC923B74AFB8AC76BE2D30CCD6F3DAD04" + }, + { + "tcId": 69, + "c": "931447A855E141D804DBDE4EF7BCF1C0BB9F4BC34062C0096D1A8C86C9764021ABD05B2CD161241D868F7852866BC82C8D209C959E087623F17A33CAC58310B7757D74FE7E90E4EDD31FC4D4CFEE2F297B7BD7C8E8271EB534F6031DBA28523094A41243ED0211B12C25B44E19C0760C3377A14350FD277973334F630E89A0819A54A5455EAD997B9527255A5B5771F63E464CF9695B699DA7A0643617FFA0384017E9C2DEA15646D9A333F44E50192C806D85C1639AE431064184856E049C99E3F76EB1C1C2C6F17AD4C511015F5753D291B8D01A410463675EC2A1CA8555F4C91E543C8696E0B0B98E567587207485BC4C982063304273E9C3D967722812A10F102840C2A8CFA89230B31BC80229466AD7AB73D95FA2930A0F81D44AFB774555359D2A9BC7A4A57BE2D4C7CD371D80A0986EDB3DB54C8C693D72021263EEF461F052951BBBBFAA86B39184AAD65894AA10C464F2C71A8FD557BAF93D3F3F844D02494098F7CF0DBB307BF0B2776CC6B50F2F67B74D08F36C66EEB8D63D78814E7698723D02C0A5BD7F5EBE0853DF86DFA408B46A649890F0A8109B452CE4333190DD9013062C3AF32C5200F98EA6430EC24BA41456C61F4F798BF9C52F42E026B5CA3B65BFD496D6BEB60C0B5FE8C292822ED3EABCFD725C83ACE938C9F08EAC77C91856E0BAC0EE332D0C1A3E390928C1099AEDAC02829843FFA0BA44344225BF940A8D20AA9D3A56C7E4C7491044CBB400EA491B83D4BB1C6A33FF15095F7782C1CD7C7D3B979D55079C07F59915F2A8151E7D000332047B2061F46F063B503226E63360860A30E18B94C7A2B00B2AD5080BF3674DDF1DF3BB6B6CA555E135A68326D644E6FC2C49D5D31C96EA1D27F4404FABA4E369CC5EFA1941899803121450099B979D91F78BF9B9B57B26C1162E44DF45EBAE321C6E5EE16C92FC013E210906EA3E3EB7CE70C3F481B7B8F1E5AAA967C208F48547CA7A1662BF26E36E47BAAAEEB65A97C1F12D5D45B3DAD65E6BDCEE4ED55400E64B0C4229496B59798EBFEA81B01E83FCD2053E76082B79681C7A19F66A9DCE7E77BB81707C21E40C094326332CC93F54C50772DE8457971C0F666C049946330EB77A579B3C4F1454274C3E17BE6D8F37693384E25BAAB4DEC343CB89EEB0DACD02DE020D2F9105109F5BB47C07A0283E7E99449586650F78893519F1FDD703A01E1681F57541045ED553E2B8787719BD03B828770B2CD97E776142573EE455273DC8B7D438DA5A0722AA4705DE1BAC94F0066673660194944BB1F8297D42BAD9BCFA55E4EF1AA222190AC99300CC966171EAB490149E0F77C7D05E682195140AABAB1BDA33B068C5DA55B4D3C8CB2F74C98BFB4FD7462D85C11C132C13A4D608E1CF75BE15A5FE008BE0049464E0178F2539F3BFD76D3DD2C4C52E279AE37031148D7482F623001A07E6230EBC448A1C3887502193AA33015098F3E947074AB1D6EBC07D134AB5C773DE54534C9D45450EA8101E5C9D5D729D3EE9E45352FBD27FA4650F6C4E6799C72BC82DE07DDBC2F4E9769EAB999EE486D50BC77ACA7A84196A46BC3635ABED33C05ACD171A21028321D2E8AAF2E16BEEE0CCB16BAE581EDFE093D60940956FCF73CAC662AE308F92E6B596B74F4173216C8C87A4B1F9C855FED4C9EC4EDC6F3785D5E68CF5CFD63CD1EED89482CE69579B5AFB92DA0EE079331DFBE828CDCE0770A3237EB1B812620C31A8E525ECFCB673B9D2C38E205A01239D7B8EFE1EB43F57338D0B07D4139E384084BED09CBE53B0AEA0CA1F3B0986A53735864C677BB655111D07E2AECF9840EAA273F17D5D75499D9113CD294963C0D585E9EEA044831CF8EF60D32002A288079AB7E4975D582B84D06379BE8DC17FDCECF9664B8CC4C514F0A32BFEDF12F9B27161F68F19DBAF853A508719BEA0C23ABAEC1ACCD88C3D405DB9C4825406B91A57380E9E4F6693253733509AC994A6C89EC6BA4748C078E3053D0C9BC56C15A394B46A3B4AA4265773E4F8B61F01F133313CE56E535CB2C451C5A20062398D2CBEBFD7617E615EEB1E6602855EDCFB46782605F4835980AAC96C5B606520956440F72FE3C97C5D0AD2E52720C2D0906A7D2A7744DBE60E523F8913829221CC208505116C675438BD07C777817EA6CEF53BFA8FBCB7856BE68E9C077177A02F7FCB6E27B4F4F1792DD0CE66BFEE88C5709DBD0877", + "k": "231F9B3BD5D1B7E9770F9D7EF66D6EF0ED39D68976FF942BDF7A4E2633714A23" + }, + { + "tcId": 70, + "c": "3C098FAF0BFD56F9EDA8A4A1C2785CF414D02A09ACA6D7809C0244F052F27A5D72105F291A1593043AF91482922B33B60BB4BF822EFEF9706B63FE6B472B36D164D96090CF0B542DA2560C7A26030935E910A62BCB9C0B6332F602A8BE843C102DC43261DE7631A89B4291794B6FA091D7AE6B554BD648BF1659B9874161A63AF8BC667CECA94E8552BB920F91D607B962C83B0DA8ABF21CE27620AAA1860C19C997C223D874258A463662061B1001717FE334FF4FBB45C17C27899EBE92DE7CD7448892D8CEC0977E2C16EAD08A7A20004A98C354DB59EDF446C0AA2D76B28E1851791848E5EEC19DB52E0C9BCD39EAE006CE6F085A738D0909C8117747FA6202E109145B718F99840258CCC79FAE44C8AD6E249AE8B1CB473C91B4C3B6306613E826553E48AD6CA1F180E11C9BB4D2D6162E22D25E9ABBA980C4D8CD0C42EE428769AEEE0F0D1F521B9F6703F3B584A9BC8DFE37B3515721DE2C2D62A78D41B932DF26E1C8DD45964A527921AFB8663C9D5D024A4F0AEF9901D252BB47FB590404B941184CDB7EF0CAF004FE4DC73E8E98E562A4AF5203BF91996DC9038C634A5BEBCE3BA8DEF4D97DEE2AF4951BE2AE328CD7AD43B206AC21D0C7CAA022B699A61A2BAF6F8AD107D6E31F421EAB25B2860B8DB7BD4AAE82100D097705C79ABBF0A6F309199816618C2BAE85BA64DDA99BE0C81D4781DEC0B8579AB0F9EA6F6ACC212FAECE4F90F4656D62DB9D77F6A2BAD64229B8BA1B73D6BFF490C0722BF3205BB50B6DED79D1DD0E232F485E66ECC39023FE94421D4995165305EF09D4128283511FDED90B4B2E3DCED7584144C5AC41E77EB0826DF025510452F04BC7EE0A49E30856083087ABD2B82057BD84C2C13784435FB99EF1B9D58F826B6B820AA5B99D92A6FE4AA49B10632A3ACBE994398FFB346E7C51C1882ADA56039341154A4050CCEFB4A8ED8718D2D76095CB7B6EE89A0DA88313DCD278AEC2701ABEAA9E54E8CAF87AA702039291B5790D70A7F8949FC9758B470C3ADF46E4C2982B079C5DDDB09C8B5BD42BAD64168154B03CDEEE55BCFB8AC44110ADB9B0E3EA6B01AA8F1E3417C73A6B4F6B67DA31C5139B600AAED1FFA57F23904B4CF2EAD77F789BD68CC056652E9E5ED4738AECE305905613B5F48E671B6B0A4BB3CE00EC5857A9270993DEC80989846622EB38260DA52DC051865A725341D4A5F514987AF3102D4053089905919CCA35EB0C4B687880D2DC96D9421E8B02F8065A69C2F30A35EC8CB22D976B6E097CA158120EDB0A7DE11E5F5DE4F85385D2D97F9C1FAA8FE54D7A269566E551EACE17ECBFB21C5AB63C66A74828B95B849473650D3E21C87C8F96160B971A905AB42D28F908D15C3B5313E0FCC1D02E45A424643D9B99C7BD9177259B9C9CAEA9A880DECD74A1372F1E4016B59E6CCC5715343410BF981D27F613BE9F4261A4D1F9D25BE5C682A5065A9CFD4CF5FEB8FCC10432A2D8BFC9080C9D901A15025124F8462D37683DD32BB1ACEAE515CE9D8BEF6C6220D71E61E8A5839BC4E0E3E8777B20B62A10AA4CE4D3E1F909E02B77EF2A9368964F816A95492E06E9AD03AB996C77A9272834BE602E64FDDEA369C2663F308428EE4756AE04551482B3C6A21BED79EB59E8A1B389812484987EEEA84488D7BEB1A97962181396849CFF29C7131C8673E9B71A3CA6099F26DB203093B94C3D3570E1F0FFCBC1B85E4213A567180BA44F2872139B55CB0D0453C6A65C35B82E8288B976D22ED682C0E3A3742C357B1A2A4F6C4A4876E537F526C5F3FEBEBC4F3522259912434F28D74FB66B63D64150138BEAFDEA6D2FFA60A7260EF16CCE71609465413F9EA03E0F9D958444E5449CE23ED26FF2974D5564A5442A82914DEF55BE8527BFA2ACDA61053EF82328CDDA6209E0D912512E6A827917B1BD5787A49210064A5E380706F18CAB508A31DBED3CCAB2962CB504E84741F7D9422EED7E05DEDC69AAD2AC44D277A16E37B2D2228A8649EDD61674D227160C91ADA490C77B46363CE55AFC181CB482C6E29E5144614AFBCD5DFF8394D5187ADE91A0FA0A59DC637BDD74FAB83C6993080F0458CA62693A287EABA8488EC42B83F7349308F33B611C0F433B149CA1E02554EEEBDF2304C8FAAA45B885F397431B1C0619D9A8EC359C19285A329A6530C052A585DFFEE5B32521BDC15502E575C7B6EF27EBE641B3F9DF", + "k": "112014FDFA1AD364EAC02DBD79FD7586EC559D9724C0082A3405A9DD98B59B9F" + }, + { + "tcId": 71, + "c": "0BE6D547187C841DF9C05528432D07816CCCB8F47A1A1C46FED360CC77D7817285A207FA19062B7F2592EDB0DBA5BB65C307E6F3CF4762616923872C61B4C0FB67371DBD3712F9012B595AF99AD7F13969861C7C8383F300C99C27A5AD9F176D45E524D59C716D1C11EAA33C5746BAF9091FEDC8010A33C65164AC27D6DA71ED57A563675A535237A8706F5BA27A53ACE574A36443A7654EF71BB3CE88C37371A17A6EAAEB2509EF235FF27F132F1BEAE9163995C8C7A7847EE58CE667DE90BCF82CC3E1BB8D1176CEEB2941D6CAA0390AF5142801C6FFB201A61893F44D35E04A41DF1B95C5DB956D0EA0062BDA764AF1130F00BD6F875C8C615FC0B95F5495D6D0AB88563F17B5B6D00BC72CF437C5E1C7D6A1A3C5D1F6B920203D96FA35EF04F67C0BEAC738AF3688617816E0DA8D3017E6F1061470CFC8A11B824CC40E498B17FA874D21C7C92E935B5E3460481CEDC270927E1029DC3819761985FDE815D73C7488D02931B9C4963B5BA5C30E1DF875958D89E7D8FAA4D7369ED22A391F1E554908791F746A2BAB6C9D2655E0ADDE8199F949D7A031CD6FAD8E2B476BD646FBB29F75BEE7538799B9E5341900341DC615F046FAF42E5EECA4CFA14E79DFE3A8625E3202ABB543275614F2FA794E0AFE52681B7F739B607D0DC9C43FDE6AB10E201DCFC78630071825DC6C0DE23211D441CC1D9438AB748BAE7D571579303973F368E98135C762178644B1C1B6DA76CF6C5870D74DAB85255EE332BC38CED4545D9038AEDEADDBA563E0053728AD649834284BCAF397D8A1C57D19A81E8B1B98C98552EF42D4DE1E6DCB598AC65342FFA9F7B5437034346CE3AB6D91376F3B8C1471116861DC70B72851707F9131A61E3E18B497DFE300FAEAEF262E7A0869232758AD5BE3F67EC7C55565E0B53C75D7B504164C6B35756542625C541EBB1A1B06737A797F0BA56CE07B097024A6283F8855414938213E690C6C451B5C5DB532A95163AC3A002A4F0901AAE777C207CAF22DEA4A8435800C46C271369809B1BAA304BA1E3331A7C779C0EB762FB77715FD67BBFF6A56388B00C085C71BB46A6FD1A45C8CD94B69A8540BB7830C3005C6FC183EC7AFA345CB260D3A79A7742EBC69507601989C957C6E50A955B4C8C6641F7AA51664055F89A307DE4430F1EDE68E769AD57E4AB413B4922FB967F1005206A57A3A1F2493BF23D4397447FD17BDB17738E0AC148D24C0F1760E2B5045D2830F5C467BECA59DF1F7D8A81609FF78309B8DD4B3DCB00794712E96327EADF99407C5511230D084F7FE6825D0BCEA6A563F82F7E2443916A99BD57A729663586402E877320062FF7D5267CF87D2AA1E135259E109AED0BE8E96597E33F4D92A0E2B8CE52267548E3F687FAEDF41FD7966D61B64EFB705EB2455C6AB7410302D8994530DF38B4C3982B95474B8AF66D261F588BCBA096BC0866449CF20910F11CA0854957AD18607E305D41972E1D66042D310DC0D54F86B29E1F4DC9DBD268D4222B9090B16901C29F456154A943381DE53DEE288FFCEC47CC034812DD33125988E22109CA1CCF442746468E5F9F5FF53939547F6FFF01D91FD4BC2934B3912024FE4D328BE4F11FA51AC1E7C3961D3C2221EDDA6BD48288701061F1B6B88CECE6373BB11D2D2F3B01E84034E2B3218D30BB060437869505463BB07204CE9E2B81DA985547C8DB9EA041DA9916CF423747D70D70018CE22EAC5F81D8613B27765A06141B5BC1ABBEC0AAB5121FF90DAE6212AB3326C078D778E0C026FC38A8805D9962415C341EAD2F3F6D831D4B3BAC5060229A5CC31B3E9079E6A0CC28E38EDEA1E2894B85C0C8125BAD6BC174197A6088F6466A4E9B39B54B98AB2E8EF5CB7AC9BA5AAD4FFB0E0623B409C7C8363B82E056248C580D07A5C1EB9EF4AD68237EE57CF2BB1EF21A173E9453AD5390F40B788A6910F6DC35B6FFFBD6355F1AE1B539D74F67A8F9C97706D1940846701B6FE0DC6114C4874112E564D0F9DE385DB2456EBD1B34BEF03F14899300414339E3884C6F7B3395352D66C7906D3316A7FFA3A4CD6ED1440F1110C997F48A514D89E35F4C3487C1BA12B48B55EB69C653B6A47F8FEA985E4CBD0591837D30A098749AABE6BA802BB9A481E187A3F6A6E9CD6B0439B56977F6F139CD4EF3C0AF857DB9AF14C094A13093AB5BE9A2444EBEE9A13325B6A52FFCA3D0AA2B831", + "k": "6C56471B92A87B61F44B6A8C86778B0A363D5457B24AA1F44F8DDCDBA7D1CE58" + }, + { + "tcId": 72, + "c": "A0BEAC5CCB4B61D3FAF54D3ED4541494475C59AB2D5725CC2C39D19586AD1B6F580D7ADD138481987AF531F9D09418D17D2CFE0F2A47404158D0BE03AB50A6879DF4B50A67249D3A0249445D0DC3227FE420B97E97255C232D94BC2991634BAF3643D0A54C116EC4668F68CE0C635B61F89AE21ABF7ACB86031ED8ADAFDAEA56BCA29A39ACC0ADFC1C1BE4E4A7B7135460856161D8C06D5D271B5645307E7E9992FFAB7B0489D7B86B28E67753084B763D594DDD5FDFBCD053168986B115968B40ABA3C7608B93E345A40DDB31803E37733D56C8B3337727EC545528BEE42F5D6A3C6D32F30A3D84E72DA7E362CFAA1DB928394E51EA73C3F572049E67AF44D4CD50F92725B3CD4D6B9E312146AD512CA6A30DD418EA9AD3DE6C433BF0520BB79D900D68DB520DF0D13D31DDAD6075C1656BA2E88FCB24EF2865FE314A719C0AD92E66D5197F97B75FB499B2BF49F7E775A50315D29C82980A20B4FE895ECD75FF1965A6F254D12742CDD1588E4282D196E566F5C1B064BF4DF532F1E4C2BAF623955B39382598E7D975928B29ADB0C4EB15719EC2B494625E923D2FE96A244FFA3C6B0F45EE133D7D6920A27057BB5614CF51C17AC3DCEC71A175ED5A4E2455BB675690C97E046FF16EDFEE14786748F674019E6BF81C1F99DCD00D0E8BE6BF512FF019DA0FCBD15DAF349E57855196BE7FA1C8C2BC0546879804A63BEC61AAB2FF4CB3782447F0C3B1BC8664911BF5E8DA4746E04690D394F27052F6D0135C111AFE2A39A31FD1E54D6863C0A95B2199970907A9AD2E33E9B8A1654AAA92F13FB3D08EDAF1479A1E9682C64E9F6E8B66C55DC3DBD0EDA607BA4FECD156343579E0AA11AC6F9951B91521B45239AF0561736F6A03B710F203914DEEF3F81EF93724B272B7F0E2C627EE41AC032EFE9FDCABE74F837E0242461DDF8138B8002CD7B2595A0F3486E9C90484EDA66D8C045040DFE908A118DE557DDB1A55103408617A79C2A78E1EF75AF497DAB0ACB6D21C153E1EA8C355747A7B807C61E454F5F5644CBAEE20CBA4D813017662008CF07C3281262D4E70A82190345439BE69F4A5B7B269244487DC129700F2F869917FCB8BB2D641A155692E552AC7398B1CEC9691FBD24A649996F598BF292648DCBCBC5D078A991DE4041CA06AB2199DEFA7EAAD4D6F435573E526A8FABEFF7FD1244F6637787C30EBCD311C9F169E42A25811816D9705636C7D67A97EFE34F8F8DCD76ED56E2EAD361691A8507E90B3F3FDC98B1E5DE00BCFD934EA2AE7E4E0519E79359B2BB22743014C4E0EDDF0971A9DDB87AB2F24BD608FBB3E9F3AEF85D254A47CA968B4E1ABED8DCDD5A338ECD5210786479E8F2D769A677033CAAAA1D2D0E8503E10C6926D7D78CE1A7A2FA560072CA2D8964A217DD30B82E59BD1D71288CB47E2399EABA5E20083FE58E55DA32289EF5D742747276CD55863ABEF6DE98EBD8644C2269A809AEF4CC020A7D34FE4B9E7AE828E5D3111EA11CC82E5F4BB2962237C691F29749E339846FD7AACA22FFC6F884C4402629CB787F665EF20C783DDE7DA01D7CDD144EA49FB0F5C190B1684D3D2E9E559ED5A23526069B077BD4135334BA2D7A4F9E8F695A7FB798DCE3CA7FD35BA100313DA1CD08224366D132B620FC4DF5949B077B06E87F2651D4ED3BF509C3953863260B04481A92DADE7C4BF9659F3CCA728D5CC51489E89916DBC5503BC0885EE7530616DA59F37896464C7B888994B30C94A88AD24EA1C23B2721642DCBDD84523C3C0F3B2457C8ED3DE5BDA4A2A771AC9D0622D1CDC28150E629ADFE7B72D016A4DBA5D58CF95BD7CA44D2E422ECFA433D98E9ACD2E02444956FACDB94399094C86CA8AFC03E34045EEA4BEA201D8C2AAD3A1BDDAD5C32ED43E2F929E8DFECDBFD0302ABBFB3C3E3E3197006ECD1AAC1A5020253E5B3316A97F9897E13C50B52F3D2911D9659DB4BEFC261F479C1CFBA392C69305F88AE924BDDB0BFF1231FA612DF5A6BD5BBB930B9B0AD0FF2341FA118F9BBEACA3DC5F924E18521B84738F7F240C8777DC0930B90EEB6029FFED2CFD091EBCD6FD1CC95A226EEA923DB7C827DE0B62C519FF71869520AB57F48BC4C2A78E439372A020648A085BB02C8DD80F35A768553DB5435854B64B11480F9C0334DC5B78EB6822AE836D56D150E09D71D4579D89D6672D2BEAFF70DB831966C8729829F46D9060792E", + "k": "387A8FA63D569D7C9E6B8E05934E526FF419F9A1FAEF787721FFBB9A8C4C16C7" + }, + { + "tcId": 73, + "c": "F9BF995C02DE9667ECC8D9EE7D56610E3D26C9E20500BB9223D0FD38F7DC8FA98B7561B96F3B9608EF99BF5C72CCCDD235A5270915AF8CD6862900B7E0BD1344D50F2A1BF871A68623DC16157930F22D9ADD60D050B23271E499DF134416F9EC2551CC6E727A973D7699F01FC12533CC4DBB4A213946D279FFC548822250081F6123022DF4DDCCEA383C2CF475E87A59739842788F35730320AB893FE9BD23EC7A347794FAB885F957F4171F9953046173E9999BB3E6D347CB0019EB27B2E112B3B708B6B81F95135238682D93BCD1B97804EFF9D2011B1C6E30E1534BD75CECA9CCCF8637EBAFED8AE853057212EACBBE38A343177C1B010FDAD6173733674AC2F7CDB89F17A8F937ED21AA73E7F86EBD3EAC364F809FB6D72BE2A494C42B97863EDFB345D789142AA7011AD050059A4B6C19F72888BEA35BAC03F9F5ED971F94176A2EE9FECE885034AE5F74D16934B04406DDE09E581810A6B6BCC49388C61860FFD5C6B99487DB0372FDCA9823788C191DB98F37579BA0190B53A5FC0460BE4096E494D5B7391170C4A11372149D574FF8290665676F2D53095B6176F8B8102E5E6F26A0C7ECE1658543864CE837B7E13AC98B55FABC4D439F35DF84F9C809CD0B4E34FE21728DD11318B823DB073494B42F4546E4D2713BFF0161516367AE63994D898D445FA364B902935F70AD01686584767EFC1FAC3E413E943AC0C0804AAAD2C2A3C068BE4B415D839DCDFAD049B791438C603C3EDC29D07B56287D0AFC09B97C2283AB6104D8B32AEB3EE90DB04A8D40ECAD431424501858BD5594762B3E85F899F6C7E83AFFC96EFE86C34FFAE2F974FAF9E760B6BBE3431F8D7A67011FFB116E9EFA5A0298A41F30BC95A1593FA63E7D57247803C42E40AE2F604532B96324E03088EC17F32FCF12A1FC58CA1E7E95302EF9AF299AC50572C36F003A16BC146F4D4544D618FB4D45870EAE245B2593F8625196617F341B9B6797C35265350AAE5C1FB20046B3C3F5FE161B084E63B6807A3B5562637101BE0BC70EEDB5FDBFB3BA456C0212CDE894C8C14C1B8A0EF5101D352CD72208EFAD3E0E93FABBEA2DD5426FD67094AE3CDA8067C2EC7DF63CE2ED6AC5C03234FA98034D91DBEF0C3268640A7AD1479A40BA70539CE628A3FCA2C1E7F06429A3DC5E6F61C325B13780C56B2DEFA30AE4185A2DAA04759D94A09B352287EB0CE800D4B733FA03734DF2A920AD165D8D15252B9074388F7F18A33236E57A96B98832EE6CEF5A4E4414A6D298C50E8FB5EC84CBD7CFCB83FBDF909CFAB45E26FD0831CD6E29A6491301F1FE2974222A3BE0899FC097F7180BB6F66D0A0FD8196F1DCCDFC08746255E932C9FDA822993C3FA54633C87B643087E20A31B6FBDCC089C8360BEB3F590EB50A3EDE8DDFE839DA6592E8F407BCF769427A7505C4C6E60279ACEC1896E39173A38444CB9B4572250659D5231536E356F213046C08A9EBB5B1540C5D82DDCC49DA2FC11EE74CD62DEC52497F934A96B09DA71AE650BAA6A524303A43822222B4EB04952560AEA6541F667ECC6C89871B5795736F727F8DFD6C79DD5C4243CC27A09E511771B3BDD9BC0E2164D2384E7B9DBF0A4F9DD8262B050C68E7A4B3EAE2C458FE88196E4551061B56F39DF62175824A19DBAC19B9C9624336E6152EB4C3E03F40D3399BF4FE8CE8D474C1765FA0431D371D90F15B92D789EC9FD62B772A716E6D34DBB927BB7317714CE68040CB71769DE92DEE86A1E0DA3FA07AEA610BA9198C2D9BFD2E5844C8C9000973A7AE9D092301E79830FA0F29B07A62EE40710247B97120CB5A641BCB75D52BF7AD4CE81B4BE81517BE8B165EFC7C0D8AF083ADC8E1DE4C997C2E5938F9FB997D1017D6FA719833D29E882D88C3FC2B1C680F34616F0A54784233C3D2A396E2F2CADB1A780E97C230067E77DAC6DAEEA78445DF3DE1ADAFAE9C4585735FCAA0890ED6258AD6BABEC92C166655B95A9208319EA2B7371B22E6C848C849ADB1FE43F997F5A38FB49E2FA0A79E7F6F304BE345BEBA35227950CCA8C8F6A7718272D50B1A1EF7F5110A0D20240D16CF0CD7F962A8F32C8AA9DFE3295EAC757DC1C585099770F2C410A90AA8D3FE68B1BC47014431F031B5BC6964E9133C855457D4EC9BCFC8BB70A324ED4CDA798F16EA3C7B9DAF92BB1EAD7CA7B3E36E45C963D6CFAAB91BD2ACF525E888F9D2730ECF9", + "k": "60EAD74D0CFA77CDCA147566D838AF77CDACABA5F32718721F7C5B0464CA7638" + }, + { + "tcId": 74, + "c": "3A179FB3714BF233162DCB0D4587748AE1816E211B91379BAB8B13AD5589E5E23F9D0B6C42BE1051A77AFEDA9E656157A76F7C29DDE5D2268436311C4B7056B07967859FB95CA0F3CB639F7A63AE38571319D77129BB33D4C9A71263F9404867B299EB89647E3C1221218A4F55FC6E95382B90D0693B1752C5066752398B400A3B63CCF76F04EB47393D9BDEDEE161FD76770D7EF070F6D0E19573816C28FDDF888A2922372DF2F2DEF166F1FA72DF4C2271F517529345E0F410B077D39CB8B47E2E3A7F15122698C3CEC85C18CC8E752EC1997D54A7FF99BAA0126F5FF282D2182D22D319B6756FB723F9E7365D6EF88C1337EA2C7A05D69FF433A591CEACDE1756EB323F4BE2CD1AB682E948EE81B732B7481ECDF46944983347BE2A679D26302E8C77FFC7BFCAFE4FD28D33B89386D92740D49636DF49E5DE80F2EF5CC4BCD12AAC020FE20FECD081556DE7E97F074A9A3125928C6845A2F5B7EBB6E24A4571991662855605EF66DA31474F496320650940AA12789654E2B9B84D4C55F5DC90C20804B59D564780BAB77E1472A9BCBB97143CD7A12630FB00F2603333F86421E4BC42B5D8900B6006556490DAFB7176D5538B404867147D5D7AF3F3929727ADD788847D2A44378B4152538D0F696FB177C310A1B2269CD758343B5DAB8A938454A787C9CDB0B90E6EEECF1F92479DD75DDCD117EC899ECCF28FDEE73A5CF0D5D3362CD9E2E8A393A8D12B31AF6910451D582390F5CB0D97F0FC39D58BA24AE9BA79E52A7581D508600CC74DD02981A96C6273E107D672F501F15351C89A7485F79A7F0018569A4A81A024A7408C8D472A6EBB0B50675FBDC3E0C8CED6DCAD48EAD7495CA0014B8D934289DC89344197E53D3B53C0E61C5FF7277EC1E506712F8346A41E30D7C9B81E670F99494B6C936E6F9440824FD733CEC9938C98F993B893266FD5A911C7635B0E8FF8C558D300A128496D24B26B9D850446F4B1A12EE5B90C0A5893DF1C049D431E4089DC64EF706BF17BAA8E236F2AC7B94B744F4D6E5985ADCD69684A1909D3A1B6677488C90E58E4BE250F6B61E2F6DF8F9924D3D38D0A5CEFBBE1644AA550EC6332356E176DED7720FBA1DC45325E40061779395587CD0BC43947E83B67EE5A544B60B9F82EC75ECA440CCC5C389DD75439AB893577EE44E0357A41F2209EE7DCAD8D8BCE52AD028C46B0A55AC546CD3B426917647F6EC69E42DDEABD842886D991E77343E4129F5FCE735671CC8B24C62144957438BE6F7BA83044A53EC416BE6E93BD98DE4CFD0EB3EBC4FFDF699E98C6D8E18700D6482FDFE168C6B644525ACE4FF39F4D889FAE9835458AB3F10581EE550588973AE46FE576A8C4FDAADAC429C18E18B09E2430C38AA93FA4336153CE0139DB04BBFDE925679E0845D340615445A38236B5968FA675700FA5EB5D1ECA8E2DE543B5B0F0FADD49788DE227BE3413AD2E2468BFEFE7C31916BD871B48BE6DA8F0F23878A7263C743BA366F90F70AD9F78452A3F747BCE3F7896099C592CD9EB6A17E824DCB621896290596A9B4BE90D30269546FAD0924D43DE80CBE36D54D9C5BAFCADD30039095B26050B84BB751B6B5C0D6219698AE81EB06E282CFEB34893192896EE22F478CD5CFFA75D883666FA2E170960DDE494CC46F82883FE96C865D5B28A51D49361BB597B003E8C1E9A15DAA9F8F8A70352CAEFE5FB8B291608C3ABE2AFE752D16D1519F3A1A7D73F6B4B64FF4B17B31B78BFE5201F19E0BF234F4AA6E8CA089B56183B50CB72095694084B74C2D6166A91AA609CC5C44E4F4A0F15DBB5302825055F517F1C1A28A8845A7146B887FA4D5F37FDD3E4A10D554C8376EAC99227B5A42EC63180F30C405CD6933FCAD1480EAAA0ECC88F0ACD97997B79699ED20FE53613DEDCF94DF8B7E467747058A59CB6704A062BB9671E62BB8BBCD6624B683BBC42DEAF2F0C7F934A79DF0BCF0AD2BB3A21F36053C247E4154B9B11844C787FA07CEC773BEE4026A5D9B63B98C9BA59F058C2F4F23511205F5ADD4D998443C6FEB072C9BA3F443D3766B78168D2B382349CF51521CD259DDDDB7571C2B874C72D695726F032BBF37EC2AD93D62690B2AD7D880E473030737CD4B1B23E7820E2E084BEB0BCB1AD2A8293898A21ED2FFC968EBCF2F9895617D82C3B15F8DA4002D5F83DAD3B41E3F341B5922B54D42C1A5FFE1F000FF0E9D60E", + "k": "C03BD5A0CD51B89F99B27396B4D902EDF385EB68EE7FC5A016AA63A9A8EA364B" + }, + { + "tcId": 75, + "c": "F894F29C2D4D99220FC1C46E886F4B0FE847102B19CAF06C6A9660C07BFA8209B72B213EFB6C2CADA8EE52F764FB79D68A58647D7A9F9F9F325DA8630E26B6E572B7F6BCC35FC6FBCCAB2DCAA31BE4702C71F0015B0473C467491EBD6A28260B78FFBD28F40CFCF1E7D9C5957BDCCC110F03261BF6877E592432622D799C7CF08BC9A59A7617061D1A6E81F0C3AF2EAA7CD1AF07AE79FBEA75B08C9153FC4CF33DBC073ACDC3422DAD4A4F854D11D97AE3EBDB15BB31DF13BBFE71327D00547D8FD7B43CA62C3B9672B9F022EC9E6D1B5CC8AC8C314A048A51C7456EAE2A770B3F1CCC52A3F80EAA22C6B7A3A197E08401507E13F6D4ABE81EC5A0C38623AD4CC30E8D20266615613536BB2B75627D07EA3CC0E00B6D0C9280D46D27788463CAAED3074CC1BB95E970EA5B641983B04B7B53CBCE7FF7A06C7A1BFA89AC26266D8B4A9D11E68E9DAA8D82351A1E8B1C59CBBD03553A462EC9C82E7EAC4CB92AA6671F52310C1A55873F2516878DAF3D63D83C059266DAF8F2B4053A06BE91C189F6FB74AA2AB1F66F24AA8BFDEECE563814BB662C60B58F7548ED428AD93381F4F50AB6E64553AAC47218D1BB2553C9E9E087AF18B8C1048E0E467A552C6200DF7A89C7E854D4787514DB274A58AA1709E79F8CD3353CE65D92F8C97DB08D6E96D6FE2A6E9F71305284E854E5E95F96CD4456E4CE1B632BFD99BA4A904DD614135E64EED5B4718E2C8ADDBCF6757D1F0EF6E47A16ED68BB35F3DBD47E48968347321B76D0CEF21EBF9709E900B28FDFCDB3DF7F17AAAB13E00C981900D6A5F17213026383D6E660F63336440741F139547509B46811BA6AA234DAC45E121DE65B08661B7734AADCA3F31FFFDC73CC5EEFD167B8EBE7A38A2202184D8495F92A17BA339616531B4ADADBBDF38E6AA072B4474FA12E7ECC0C637AC963D03ED5774C7A77E2098269736A29BD6CDF15A7D8A2E4F62761DA1BA66AFAB8AC0DD7CF41FD7A1AEB55685306EFDA2EC3E43F4F4702965BBA53A7EB077F3FB4E2D725C1DAAC9A1F197A8C9B539B9B31D17C89802EBD65192E174A2A55C33C8ED5B3E8C22E53054882D8279A7FF4C85D429AEF073CF300A17B77BC91D4E0F17956B8874E8933EC4370267BD34A87758F92F00E89B359C9B10506743825A5096B3F8D663212884BAFEF0DF66CC911AC665B66CB32AC354E34611C57C6C910209CFB31FD4D2E63D1FE5A1987016D1609AFD6996F9BFAEF6D4BB01B030A04C1DC1F8517693E7234862B9A86CACCDA0368FE58FD16D06132F5251FAFE6B26E5E3099F52A2E784A843199DFDE34C7E1A3EEB99CA72FAC61141A3D527D0321C382E470A7F8FC008939E4C602A7CE10DE8EB66A59523E157B5C66A59BD068A469C8C6F3915D0764B292634616DDFB33297FAEC65D1E8A1118D2700F0072AF31E9CA83D68D7466C058C6263B94574E6FEBFE707D1230302E6380A49F5890A7C9ACD9E43D6AC8CCBCF9669826AEDBC6FD5F9806D5F10EE3089C4DBBDA45F7434450886A4E967DE618AD4D2205FB4926DFC12B5A28E12798028EFFDBF49DBD447427959A2755E75A9E4DA6E1334C9008F43855C95A6697ED4AD13661341ACA948F52371704DC440BC308D8C21FB6513F4AB92953C7E2AE979422EB510BCF7415198059F09EBF1B91956B7D5D4FBD4850FA336686DCAA62815997439915C979875A1380155265FBE26CFF35E973C71B613454BC12664E092B44279663AD5AB0469959B15EEE86BD5CE0ED736DB698D9922BBA7F57FEA6BB72A54B33F69C9823A4F6789A8AC43A798B7466AACE76167613BB13DEF9A6CE9B3BE7E06D0BF1B83881EB3C21A284EA2939BE70CB8D254595C5FD0532562856C201A9955F952807CE2DDBDB87118AFFA08A0F61E7D2C17420C0C5FE8B4CC65B3EA4C6761179EB6DE62D1D9A51433E4CDB3A9EEFDA475E4059895E257D1D40476A18D40CB54A17DC9AD79E8BCF8AC06DF3CBE08DE9E43977BA909D19839F60E61C40F4B8603049BEF58FECB5084A44CFB96355DC890D4DD7136F29A9EC59CEF8A3A8F0008BBAC2C6E16E0601628167FF661AC0A5922002B31E495C7CB71C18CD811A6DFF424EBEFE35C5EDB5F057549D09BA7B31546C0E8F0EDF2434F149948808934DAFF53CB85F75EAC4D1203BE9185DD9C0D71A98C759DE8CDC8805F442559C44785C9364794A839545E06AE1CF867FB83456CA", + "k": "5430AA47FBB7108C3EFD5E23623999163CF25B55BB214EEA3320E188C0191024" + } + ] + }, + { + "tgId": 4, + "tests": [ + { + "tcId": 76, + "k": "32FE0534E517EC8F87A25578EA047417EC479EECE897D2BA5F9D41A521FAEDCC" + }, + { + "tcId": 77, + "k": "6621D11567D58EAC3CDFBEB9C69DB0E7AFC4C97C252D98B4770C5F6AF98C83DB" + }, + { + "tcId": 78, + "k": "0F138749C455FE4615FF58200C7D4CE24FFD8709C305C53C26AA9E340E8A73EE" + }, + { + "tcId": 79, + "k": "ACB0CD384DA7C8A0E5187025297286AD154E9E37448D9D0E798BAE24FA7A6727" + }, + { + "tcId": 80, + "k": "AEDEB99B87C330FE324A79E9AB6814AF48E6B028136A0464B15350FD91220A8A" + }, + { + "tcId": 81, + "k": "D2354A942E97CFF7B5F79E6DAC7A9B178E61F889241228B94AAB2529ADEA11A1" + }, + { + "tcId": 82, + "k": "D471AB1DE1996DB78AD89F021821A9A2005CE55B6FD74D867123AD814FCA5AB9" + }, + { + "tcId": 83, + "k": "5990E7D7C98BA9433133EF4131E1803F83A071D27B5E3B28FC6C21CB6005A407" + }, + { + "tcId": 84, + "k": "6E07D03EC7EFD80F60B384F8A1AC9B19D839802A727ACFC365549A26AE29DB63" + }, + { + "tcId": 85, + "k": "405E1E3E8A545D56132D85DC38D67A0CF7ABD99D61E7C8A55D2E7260F3D96C5E" + } + ] + }, + { + "tgId": 5, + "tests": [ + { + "tcId": 86, + "k": "F8497107CE0D948FF5BF6E039E3CC4EBFDF5E9409EF77171A1E4BB2165713A3B" + }, + { + "tcId": 87, + "k": "8B6AA77088CC998C2E6B42ACA57DBF3FAB786DFF66ACB017B2ACB48FDBC73D07" + }, + { + "tcId": 88, + "k": "29759A642C4D0267BD5D96C81449F6F9B315FAA45C1D5E117362D4F096D5276E" + }, + { + "tcId": 89, + "k": "F5D303C2E38227359BA4A64727A9424DE88D41EEC961697385529C4587980D62" + }, + { + "tcId": 90, + "k": "44CC405E3BB0A9F51A180A86213D036ED58AA0D226804E717B9C2A475DE58E75" + }, + { + "tcId": 91, + "k": "0E2D4CD0C4C4C9520E5F35D12BB21A087DFBDD502BAF4CD898A31C4F16B6CA67" + }, + { + "tcId": 92, + "k": "DF79AEEB00A7005010721C0E9343ED2EC1B837DE5561D1E68CCDE437995BAF38" + }, + { + "tcId": 93, + "k": "6F46D1B0169203883DDD06BDB7F4563B53C742B2E223C2026809CD404EBA55DA" + }, + { + "tcId": 94, + "k": "9D2EAC936B7D0EF407ED5FB1448B5C511C01607A90D61FC6BE72893DBF60D120" + }, + { + "tcId": 95, + "k": "A0C2CB4A476C1F55562C7BBB80B88CC98D48E9159A110926660F7CB053FCFE08" + } + ] + }, + { + "tgId": 6, + "tests": [ + { + "tcId": 96, + "k": "74E9A374CFD12E92610591E05E80F256FA9BC85146F678C0FD538ACBBB765A6B" + }, + { + "tcId": 97, + "k": "0178BDCD5B5412B1C06884AD4CA3EB43607566114B599A22323C508578F1CCCA" + }, + { + "tcId": 98, + "k": "AC32764AABF8926EC41754181B2CFF101B907C0D60FB92638214AB9164E24F2F" + }, + { + "tcId": 99, + "k": "90DEDD24590FEDFF42A27AB44173E0711839EC9D15728D7A0C191CE6CE5CBC68" + }, + { + "tcId": 100, + "k": "F255E47BC336EEFDEC3B8871881B26A60BA848E004976F97381F5BEDB5F467DD" + }, + { + "tcId": 101, + "k": "AA820E3C3D1E72BF7A93B10D856780E853FCF098870A62C7DF07B8F0BAD93555" + }, + { + "tcId": 102, + "k": "33B4D18F7CBAE3FB6D79D39C4728C543BAB7D40B6BF20637FB27619FAD4DE514" + }, + { + "tcId": 103, + "k": "BDEF9A36C2799E4D58AFDC0509C15023398BEE0D27C1D3C9829475041B52FA1D" + }, + { + "tcId": 104, + "k": "AA6E16BEC77355AB3223DB7CCEE88983FEF389837B073567A72697BE11BA8C5A" + }, + { + "tcId": 105, + "k": "5C7B5FB8B30A4F816925C8B7038ACFCCC5C82FBF574F501FD394D0C5E2F3D9D5" + } + ] + }, + { + "tgId": 7, + "tests": [ + { + "tcId": 106, + "testPassed": true + }, + { + "tcId": 107, + "testPassed": true + }, + { + "tcId": 108, + "testPassed": true + }, + { + "tcId": 109, + "testPassed": false + }, + { + "tcId": 110, + "testPassed": true + }, + { + "tcId": 111, + "testPassed": true + }, + { + "tcId": 112, + "testPassed": false + }, + { + "tcId": 113, + "testPassed": false + }, + { + "tcId": 114, + "testPassed": false + }, + { + "tcId": 115, + "testPassed": false + } + ] + }, + { + "tgId": 8, + "tests": [ + { + "tcId": 116, + "testPassed": true + }, + { + "tcId": 117, + "testPassed": false + }, + { + "tcId": 118, + "testPassed": true + }, + { + "tcId": 119, + "testPassed": true + }, + { + "tcId": 120, + "testPassed": false + }, + { + "tcId": 121, + "testPassed": true + }, + { + "tcId": 122, + "testPassed": false + }, + { + "tcId": 123, + "testPassed": false + }, + { + "tcId": 124, + "testPassed": false + }, + { + "tcId": 125, + "testPassed": true + } + ] + }, + { + "tgId": 9, + "tests": [ + { + "tcId": 126, + "testPassed": false + }, + { + "tcId": 127, + "testPassed": false + }, + { + "tcId": 128, + "testPassed": false + }, + { + "tcId": 129, + "testPassed": true + }, + { + "tcId": 130, + "testPassed": true + }, + { + "tcId": 131, + "testPassed": true + }, + { + "tcId": 132, + "testPassed": true + }, + { + "tcId": 133, + "testPassed": false + }, + { + "tcId": 134, + "testPassed": false + }, + { + "tcId": 135, + "testPassed": true + } + ] + }, + { + "tgId": 10, + "tests": [ + { + "tcId": 136, + "testPassed": true + }, + { + "tcId": 137, + "testPassed": false + }, + { + "tcId": 138, + "testPassed": true + }, + { + "tcId": 139, + "testPassed": false + }, + { + "tcId": 140, + "testPassed": false + }, + { + "tcId": 141, + "testPassed": true + }, + { + "tcId": 142, + "testPassed": false + }, + { + "tcId": 143, + "testPassed": false + }, + { + "tcId": 144, + "testPassed": true + }, + { + "tcId": 145, + "testPassed": true + } + ] + }, + { + "tgId": 11, + "tests": [ + { + "tcId": 146, + "testPassed": true + }, + { + "tcId": 147, + "testPassed": true + }, + { + "tcId": 148, + "testPassed": true + }, + { + "tcId": 149, + "testPassed": false + }, + { + "tcId": 150, + "testPassed": true + }, + { + "tcId": 151, + "testPassed": false + }, + { + "tcId": 152, + "testPassed": false + }, + { + "tcId": 153, + "testPassed": false + }, + { + "tcId": 154, + "testPassed": false + }, + { + "tcId": 155, + "testPassed": true + } + ] + }, + { + "tgId": 12, + "tests": [ + { + "tcId": 156, + "testPassed": false + }, + { + "tcId": 157, + "testPassed": true + }, + { + "tcId": 158, + "testPassed": true + }, + { + "tcId": 159, + "testPassed": true + }, + { + "tcId": 160, + "testPassed": true + }, + { + "tcId": 161, + "testPassed": true + }, + { + "tcId": 162, + "testPassed": false + }, + { + "tcId": 163, + "testPassed": false + }, + { + "tcId": 164, + "testPassed": false + }, + { + "tcId": 165, + "testPassed": false + } + ] + } + ] +} +\ No newline at end of file diff --git a/security/nss/gtests/common/nist/source_vectors/ml_kem_keygen_prompt.json b/security/nss/gtests/common/nist/source_vectors/ml_kem_keygen_prompt.json @@ -0,0 +1,405 @@ +{ + "vsId": 42, + "algorithm": "ML-KEM", + "mode": "keyGen", + "revision": "FIPS203", + "isSample": false, + "testGroups": [ + { + "tgId": 1, + "testType": "AFT", + "parameterSet": "ML-KEM-512", + "tests": [ + { + "tcId": 1, + "z": "0A64FDD51A8D91B3166C4958A94EFC3166A4F5DF680980B878DB8371B7624C96", + "d": "BBA3C0F5DF044CDF4D9CAA53CA15FDE26F34EB3541555CFC54CA9C31B964D0C8" + }, + { + "tcId": 2, + "z": "3764A9B01F8C411BEB6DACF298CC30841FEB65A10D6DEBA9780338B4970B983E", + "d": "00C7E4AB727C202A92869BE37F8A7CBAE63A67463C3A54000F1A3290B987E96F" + }, + { + "tcId": 3, + "z": "51DA028C3ED5E25860B2F5C7334317DFB9F263FBA3C4AA9CF579F98F33706AF4", + "d": "99683B23ACDA10B8FE4A877FFDAFA3974CA82812119B26FBC3CFD8D13268BCE9" + }, + { + "tcId": 4, + "z": "5E0BCBE755FF836F8C108E9D8D56BDD3E64987DAD81555214AAAD84F11C2168F", + "d": "566254D9CCA1360500624B86E6B7D4134C4B9FEF8FCE2FD69398F01D8C8CF955" + }, + { + "tcId": 5, + "z": "E2AF0A01F772884FDB0A5D6E0993FD1BC2D70C4D1AD6E3D9D8892A447A1B226A", + "d": "CFD692B8BC2B3F180D00177A081C58DD9E1E13046CA374E70FA25BD8DDA287E3" + }, + { + "tcId": 6, + "z": "B7288EA78E624E08D422B3958F8E659C2FF3E954B95282B10343C3CA27DB3F96", + "d": "235CB4607C1F061CE2F2829470CC18D22F935E9EFAB2ECE8487709E1E7B48639" + }, + { + "tcId": 7, + "z": "69AE08163559A171605655A76D01D3E2F8B0287F094F4A0AAE52959E26176CBB", + "d": "01981D3CFDB5B715660BB267640C55C0C4ACA4292B679D024E35928AB4BB6351" + }, + { + "tcId": 8, + "z": "E51238DDD29E55589E014AFBC07494F4CC362BED096BB29E4F6DFC6D1BB7E69C", + "d": "65729A5E17C318E55106D7A8A708E880EA780147B4C5BDE8C35791ED428F6505" + }, + { + "tcId": 9, + "z": "2821E321A35822357D6F93367C4E014DA47614634008EA60CDB3643A49A13609", + "d": "7DAB0F0B171423C7762318943421A402CBC0024727C6C71E344AF5525DB9673F" + }, + { + "tcId": 10, + "z": "B721ED7B8CC80B553A2D676135C3E90432F5FCB9DB6A920A115292CBAB8E6ED8", + "d": "1C96C5C9BF56534170F9E552E277EEABE2F09B831F9D962658396CB27635110A" + }, + { + "tcId": 11, + "z": "F8FAE52ED73048D95AF11E229B29EA9055B937C46EC76B687D1C73E6A2F96B6D", + "d": "834E44439DC89F7A4F7ECF89BAF8ED9DFFE1496DFC00F7D178BBCCDE9D965360" + }, + { + "tcId": 12, + "z": "F57E160EC2A5D4C6ECA3D307510577ED5CACF8F8530C0E16E79F495F824978F9", + "d": "FFD9DDA48ABB5CD4257704E4EF79806BE801DFA31BF92F3CB055A3B2D4A8E791" + }, + { + "tcId": 13, + "z": "6E2EE2A80076EBFB8FC0C948D99A2EDE417E1658A8D922F363C38B7A5719706E", + "d": "11BBC3148E5C8AB0A4CCD6BC381B74BC5E0B429C5CCDA415EF91E8C885872537" + }, + { + "tcId": 14, + "z": "0A4B0FF092F607B1D77FBE14C8CCE32C05A892F02702296FEB39527AB1A21EF5", + "d": "60FBA65C7300CB9E3614D24B6FA176F35534A45262DCBEDC427F1EFB81382A8C" + }, + { + "tcId": 15, + "z": "9590BF9C14FE4FBB3D2B04AF54FE62C4C911D228AA2DCF37D0C3AE5E57E377E1", + "d": "7833AFAF0F9CA64BDC75B427E4CC0448CECA9B51C562A2E613B84CC5D81E909F" + }, + { + "tcId": 16, + "z": "81BACB4EE7868C970AD725141342B237CF9D80C06EB7C325E3C9BCFBE082B749", + "d": "5A94E2356E4878DF24424F122694D198853FF393C3C1D40B57516A1C384677CC" + }, + { + "tcId": 17, + "z": "A66B2D32FCBB40F2DD4EFCD9E1BBE814CBEAE94864502281712D029075A4FA50", + "d": "543F31464F83C6AC53EBB04ECA54297AC4FFA225BFE90CFC6AA2F71E09669C85" + }, + { + "tcId": 18, + "z": "2122F44C9D990E2E8A94C2EF0D709FC20766FD462CCDD1A094BA700642030B87", + "d": "AB471CD7F7147977C46AB2D44F239EF5DA1DED517CA9D7CCAA7C8F80F635AC24" + }, + { + "tcId": 19, + "z": "4EE218B91E827CDAF67CABD579C2021EE94E7D0C961DB4CAD3EEE56049C9AEDC", + "d": "B21ACF63E36FD331315F085D47E4A55DD0250FEC2F19D0AEB6D25C64280BFD5D" + }, + { + "tcId": 20, + "z": "CB045316DAD25AD918C6B1A570D5C3E8DF66AE909C90053A9AA561C115FE7353", + "d": "E683CA8F663BE5ACA235424A7DCB99075E0E37AF4832A4F70C8501E382B7014A" + }, + { + "tcId": 21, + "z": "1EAF5E197385ACF26FDB72923F304B4080D771F9913936A0105EC664E55DCD2D", + "d": "41F7EA41B8F2EDF1BBE1501FE995BE9119934FF342444291A1166EA827C839CB" + }, + { + "tcId": 22, + "z": "8D351D033F2346D5906E3FED413A306790ECF41D2BC9B02FC4761BA1700DCE71", + "d": "11C037F85A9B7D5F31960D0A133538B285315205D88A3476815E703B9E8A7CA8" + }, + { + "tcId": 23, + "z": "9B741239734D49B78BC37BB29940A15378D2DCAE4AE7A6BEC82F75CF15040575", + "d": "AC8FBC28855D7942FA7A3874AA3E479370D07439F7EBCB3AD05031C09FFB36EB" + }, + { + "tcId": 24, + "z": "E00F09AEAEEE1C73DA0A2500368074AE803A8077B74EE764C8C3BA99957CEACE", + "d": "5A1A15CB7C21A1DFA977EEB2A7A879EA051741E50D6C25CCED6A9C2EA8B5CC28" + }, + { + "tcId": 25, + "z": "CEE31E2DFF2D1358F99B5E3BECF494D279D02D7CE546DD9E84E9947B36107C58", + "d": "7F56EA6767DD17E1F933AF2A0F16DBFAB525FC4CA266E7DFE67EEBD986CEF99C" + } + ] + }, + { + "tgId": 2, + "testType": "AFT", + "parameterSet": "ML-KEM-768", + "tests": [ + { + "tcId": 26, + "z": "D6BF055CB7B375E3271ED131F1BA31F83FEF533A239878A71074578B891265D1", + "d": "A2B4BCA315A6EA4600B4A316E09A2578AA1E8BCE919C8DF3A96C71C843F5B38B" + }, + { + "tcId": 27, + "z": "360557CADDFCF5FEE7C0DE6A363F095757588C35A3FD11C58677AB5E8797C2B8", + "d": "6DBB99AE6889AF01DA387D7D99BD4E91BACB11A6051B14AECD4C96F30CD9F9D9" + }, + { + "tcId": 28, + "z": "00F6EEC72778E02ACD04BB056113C571982E45018BEAC566EC59953724F38A4B", + "d": "7725321C56F925868FF834F5D1EE90A70332AA9283434E122C60A8D474AC6C0F" + }, + { + "tcId": 29, + "z": "AFD2847B067E7042714CD2D1ADA8BEF1413817191741C622328670C79A07ABAE", + "d": "9DB780F15657965EDCD99A741906D34160AA52710E2CF017851283E5A6CDFD8F" + }, + { + "tcId": 30, + "z": "A75F5D7BBA350C587BFFC6C85BE26B18A37B982D50AE8F35D1D8B0A9BFC61B86", + "d": "D7561D7A9D674A1BC0799C08D6A04F72588E91A18FB3C3E5E16FD489D8BC024B" + }, + { + "tcId": 31, + "z": "C09F22FEC179697261D1DD53E9A68839304EA059A137804706E7C0FB3FBA72D0", + "d": "2508264691CD59A0F2467F959A72A9C217A4A950FFB5A8BBD750696D9F4102BD" + }, + { + "tcId": 32, + "z": "76E76448C7EDA5C6EDB387685C7826BE931F5C0167103F3F387CAA055943719A", + "d": "DAF0B4BC609356BE13DE9FD9EABB4863EB7F6CBA489749BFC2ADFF5C8CBE5284" + }, + { + "tcId": 33, + "z": "1C8BB09969CA5C679FA25CBDB81FE69726D92170B6627F4D212C63074FA9E1C7", + "d": "9C87C399AAE8093E6ACA9552EE4797D302F7223A5CFEEAEEC46F1AEBF73DD1CE" + }, + { + "tcId": 34, + "z": "D608A86EFD989F3254D89A316A7EDACEFE5E455689CFA3A4DCD2E81D70B5663D", + "d": "FC6ED5507D3D608DA32F1486CE03F9D489710A295A34177F2030015499D13907" + }, + { + "tcId": 35, + "z": "1B64A7B5708EF462D354E41E3364A606B3A431719D98BC16528F32DEB79E3686", + "d": "6E9C1EA4E955CAE2A1E1937F056BC97BF921E903266838ED870882C90FB53A8C" + }, + { + "tcId": 36, + "z": "141EE30D440AFFC15BB96C997B4B422AEC41BAC3568772BDC0634BB33BC9C60B", + "d": "DAB31F41B3796D0C9FD33F4E6C3E9C6E4617E1F50BDBFDEB45079047DFF9AD58" + }, + { + "tcId": 37, + "z": "CDC6F4C1E5A89B9AD19F977B21310212F8DC6C45F03982A7E24DDF8BE8428CC3", + "d": "B3206837EF4D70ED2CAE7976714C54E4D4B9A221761772D1E6F864A646CE1FD9" + }, + { + "tcId": 38, + "z": "1514D316D9AAA6C6DCA5A3F5671BE55170CDFA132B39CD78BA2DA2DE1C36784B", + "d": "A4A453F7375659D2A80C3CBF22C36A838C64C28C206BF22A6A5D14E2FBE8149A" + }, + { + "tcId": 39, + "z": "3067580B271B818EEDA0A97C004117988E6D196FF82AB71D9D31CEE982534FF1", + "d": "C49209B368F465AE480775E16A7E296C326DC303B66118AF1E9527616A88F953" + }, + { + "tcId": 40, + "z": "E10C5B948C23948B69BA4B1133E27A86B4E17989ADED93B455D1127932C592B0", + "d": "59C045EFE5A65CD764191F4D496C861B83D28402BC05E56611DAF2F9717347A9" + }, + { + "tcId": 41, + "z": "4C560AD6E70E024E7E942EBDBCCC75DC085931E0A8E8278284B2C2393C458C30", + "d": "78ADCAB336EDC6F7021065CA9934B18E887A810C83D8C1662F904098B520721D" + }, + { + "tcId": 42, + "z": "2C7D1FC6FDD615CC078187877CD2744CA2687E7F0079C83DE6FBE3F78F52C400", + "d": "1E1FFD0CE2C34A42795F06F81A19987C2D2234C8813FE59D24677EE4EA474B20" + }, + { + "tcId": 43, + "z": "02C90DC18D780F2DDDFD5A7F8E3CC0C6106DD2259CA6A4A90C0970DEFD6F9E2F", + "d": "9C4A7CF7CECF92A0D432BA1D684A873FA93297DF89273899341A0F872CC8C482" + }, + { + "tcId": 44, + "z": "9F1785BB9AA7CDEC1A3362052D80A8F2973F0048A1DFAD0CCDBD7E3633E04C4B", + "d": "871223D66947C518E818F17D64EF2B0B4231BD274A0D4CDBFEF7EE547B3620C6" + }, + { + "tcId": 45, + "z": "D67326BD88283F075E55F110AB551E4203508537033CB0873D8ED211FF9124B9", + "d": "617F05A9D1F733CFC794F9FED8F452094D7109FF0F9A86DCB17A65306767C74D" + }, + { + "tcId": 46, + "z": "2E562D81253886FAABF1A485B5ABFCB27D7716BFB87AED22D6C7FECD5E3357B8", + "d": "F554A1C64664876513543FC10DD4D7D73C549306FBC51CAC2B4339A2F3A50855" + }, + { + "tcId": 47, + "z": "9855CF40F8865EE0AFFF8E64AEBDFAF1F3C926156E2519F9DBA0FABD2E70408D", + "d": "299AA7745E4DC041FF925AF9BE541FC6834CE8D3924873743B530FA5E99B2D2C" + }, + { + "tcId": 48, + "z": "36E60B1D30E20116BABFDC6D799EA0D20C841DE156EB89630E09275AC59BF8DD", + "d": "57F0D84558AFE03901F28107BBA1F3468155BEE6C10B936CCCFB6E095A847CC3" + }, + { + "tcId": 49, + "z": "5BE89AC23532B9C243F3C8B4CCCD104D168798AF61F579611A3A3E0F3698AC9A", + "d": "C658040C567355B8D2740B0DD6938BCED0F7B8345A3C0465329C77DB7A6CB183" + }, + { + "tcId": 50, + "z": "CB235274585D12B1D557A0D80981F7414FB88E13CCE551451CACE183ACDEA9B6", + "d": "F3A8548371FA0952167B35AF4F0E330E1D401ECBFD85377C994153C47B0894CD" + } + ] + }, + { + "tgId": 3, + "testType": "AFT", + "parameterSet": "ML-KEM-1024", + "tests": [ + { + "tcId": 51, + "z": "0A064D6C06CEAB73E59CFCA9FF6402255A326AEF1E9CB678BF36929DAFE29A58", + "d": "2B5330C4F23BFDFD5C31F050BA3B38235324BF032372FC12D04DD08920F0BD59" + }, + { + "tcId": 52, + "z": "7A98EA318AD1E2705F20B0740794C3E711121A00600D00BCCCC78CCE024A9BC1", + "d": "D19A3DBAEB91EA7B11C5C7AB16F7A5EA6B4CE44CB18462B9695571B724EE13AC" + }, + { + "tcId": 53, + "z": "2D7AAF4EA98867A68BC98DE1676863B12FCCC1E5D07D16CF72CF4D4A7764EBB8", + "d": "202326C5E2D0D9212B062E622BD3863503B357A7CBD5DDF9B586596409871A00" + }, + { + "tcId": 54, + "z": "AAD0B2C3F30B2E09F24F39A475290E2E282A7D6619EB5EAACDA9C5741D82F99B", + "d": "F709B6B945138FAA6157F9AB414E1535103D16292824364F0F15538830BF38A9" + }, + { + "tcId": 55, + "z": "2B2BC532E1B9D30739CA9C680296C7654464455ED2C95A777C3BE1E49EE746F4", + "d": "B24959281197AD7C5834852DD145A3A5F80CF7CBF877CB5CF11E583BF4676162" + }, + { + "tcId": 56, + "z": "DE53EFEC91F6D99D54F19B3313C1B256CA0A4C9205CA0C2FC18526720F39CED1", + "d": "40D4F32F9871E5DC367E060EB18CA4C8E59F5A3E51172220375E16D61E5E66B6" + }, + { + "tcId": 57, + "z": "6025460386C1993D774E1207376762C2090F998BB0669B73D63A0D2BFDDE9A91", + "d": "2CD2B44C92C0664C7FBF209DAA946A461F46C4A57163BD50C0A4F9DA99C976AB" + }, + { + "tcId": 58, + "z": "2C07C5A4F04128E8AFCFA26248C8113A4216A08410F28A5440F4EBEE2B4EECB8", + "d": "8E9B03AAC5439F1C16DE8C2B1D5E2ECF3CB16D13845C4CB0DDF7730B5198D64E" + }, + { + "tcId": 59, + "z": "7EA8CAD3465D01BBB227C9D3F1E0DC794251CC8FE65F6F5121B832E0785F4B32", + "d": "874E71D5DEBDAC2468D89DDB4B0C1B27766A94D905591D8E608F5715EEC53F3C" + }, + { + "tcId": 60, + "z": "AC3231306C3482F8C101E967752104767A9B4B451597EB1AC636C407ADC2C682", + "d": "E896CA8F85B501C4992725E2A54FC803D0D0C8F53F0397F70A3404AA4D01CEB0" + }, + { + "tcId": 61, + "z": "33E7FBEADBCBD194B723B7C18FBC33BAA9352700A9A746ED934D0B34CE7F9A59", + "d": "F1A9723F633AC877A261CDF82DC176D0F4E248DB4D8338CAC7FAC4DF04A08F8F" + }, + { + "tcId": 62, + "z": "D2F0A3888AE75B13D2CA4EDBC87385B44FE3FDB7046EB2DD58CBC23ACBCF509C", + "d": "3ACF40DADEB7FD854D445AB2402E81F6237402BFB04E7BBB72C9E887572FB5BA" + }, + { + "tcId": 63, + "z": "608E79165F35C41825643F768CE1E51BB9B60ECACA0E6BAF987F7FC7A7D1B371", + "d": "35822049028FAB4E31A609E4E3A39C9C32A62ED6E732DF6F2C1B48CAD0AE8000" + }, + { + "tcId": 64, + "z": "3F8803D5BE3F59E69B8221E7CB8C9D15828B96B5B8CBB9D2F7544D6AA0833C7B", + "d": "CE21960E11BAE7BA5A2AF5AA5A4518F2C97CDD4150413EE3651B91CFC85D7873" + }, + { + "tcId": 65, + "z": "0E2832E12E9642432793ECC17DA18D61323647CC6F5E1AB65751185AFC00DFC9", + "d": "8375228217B8D94CDCBB2E6E7EB6E1ED7FA9B4BA7A7DC952E970C401675D491B" + }, + { + "tcId": 66, + "z": "5BDABB79CDE5F2B6D819441EC7991BF4354739F8D17D452A9ADCEB2AD08DC3B0", + "d": "6F200E05371AB5AA6C2DDA507D4C7039E7D6F4000CF604F1B5421CAC1CF47DB6" + }, + { + "tcId": 67, + "z": "5456E62F99C59486CC68A7EEA919D3693BD79DB9FA22845AC0E9F96AC636F334", + "d": "74905034D53F698B8CE12D78E453EF687A5305F4F6AE5C6FE33358DD1038D49D" + }, + { + "tcId": 68, + "z": "5887978A168CFE2EC23BB93A730AD6EE4BDBD53389C4F438F5CA31867019735F", + "d": "A16BB3A488425637A5B735676974EEECA26ED80903F5CBAC9E6D712E67EE918F" + }, + { + "tcId": 69, + "z": "2815CF58BA29F219971BD444404A3FD293095A1BA18DE7B6ED8B3C857EFF192D", + "d": "E695D112926567FE59AE670A449E6700F7FADAA8C79920A7D297C11FB2CF918F" + }, + { + "tcId": 70, + "z": "9793BB2B4F48F123F53BB97EA7C51EC6EF003EA5E19523AC6D5B914A1C8792F3", + "d": "F0410C4958F89156391F10BAD29068952036F804506C9977AF158ECBDE1B8F38" + }, + { + "tcId": 71, + "z": "3B5EEA98E4DA17331DB69AE7D8371E5DC7E02BF4FCADF9319435EA910FA0FF1B", + "d": "46FB511079DB834880D3CB88D7823C6CB359A0FD599880C7F8DE244B36259AB8" + }, + { + "tcId": 72, + "z": "C866D26C3EBCFB89AE9F89BD2C48DC7EC6D96F12057501FB4419A3DC2A050730", + "d": "28D7DAE6E1A15668A61A2AD49D1EA071ACAD732606DA5B36CE7B638C9A5FDC6D" + }, + { + "tcId": 73, + "z": "9486A2BF28218289412E2A6A2AEA61AB58D3FDD0D90DD2A4630329986493B5A2", + "d": "02A3DB0815DB518678EDC6EEE3AD570D3B31197434163EF01CE9F12A311FB3A3" + }, + { + "tcId": 74, + "z": "4D653FCDD55D3D5F2E3C6B30F451B3DC57574C843ED8B03D63DEF49C8804869F", + "d": "FD9509965F28D54934357D48AA3A6CC198CCC7FFF769A40A8C4DF0FDC115604B" + }, + { + "tcId": 75, + "z": "6B65BC953988E16F28DDC12AC3B927BA2BF1EA4CE52F16093723212316A9FE8F", + "d": "4CA2E99941A68120CEC57E52219ECDA06CEC3AE0A4C9584574FD204E06C07C57" + } + ] + } + ] +} +\ No newline at end of file diff --git a/security/nss/gtests/common/nist/source_vectors/ml_kem_keygen_result.json b/security/nss/gtests/common/nist/source_vectors/ml_kem_keygen_result.json @@ -0,0 +1,399 @@ +{ + "vsId": 42, + "algorithm": "ML-KEM", + "mode": "keyGen", + "revision": "FIPS203", + "isSample": false, + "testGroups": [ + { + "tgId": 1, + "tests": [ + { + "tcId": 1, + "ek": "1CAB32BE749CA76124EE19907B9CCB7FD30F8B2C38DC970E81F9956C97A8BD3C6E37B07C29E60BB2B75C5258B572626A859ABA89DB3AABC571424618B26310278B8EC4E76ED07A10B864AABF37BFC9F364731050631421BFCB1C3B9153D4316A95089197A027AB80B39C362CE6D97EFF422244FB81AAF67354F03894CC25B2707939A4A06D302C59D106EB743678DAA3F1D1C3F46B03F0DAA0641835A548363180744E6B6235B84DB9A4628279A6EF7231499208E657A3F9BB6E3F782606B79FC9A38723576FA80898E8A6887D94C3ED774E46A86CFE705B34C6B5535865329C5A4A820F9114CE9A9C68495C726368B9E073CBBE627A7DE419F7F7B4AD221576F91FB1E66CFF9651BD6C25E3CC9CA49A570CF041E457658072B684E714BD6A86B3D05C7597A729E12E512C8D7E5B5C27049EFB0AC0E085B1B88347BFD314B4E4AB4B8875A489ADB8C9AE28008BAD36AAAD24683563BFAF19BDA8677AB7BAC7E33C3087B84A45246A2AB1AEF397750D386ACDAC63C87506166A0FAE18773F530E74545D54BC670DD7353B75B16373CB8A6269AF37097EE1B1640458153132AD80AB64F7A599B8670E301205043C136C56CA5A06DBFABA3204671C1B237B18824555B5DDB206A74ACE637005B363238378BDA5E198AD69B85CBB399E8B07CB899F9E93CF6CF62FCAFC9E4D77363CA2149E92197F2133223799C182CF5F182ECD35B5FDFCBF0A93A1350198F2F244F3216B442A22FDDB2F4F3BB8CBF0168D0220AA725A0E287DF08079A1DBB8747C02F0C2C829759A5D95B6237522E7F71AB5669390377E03A93AB7FC7E9FD6BB59C1B9B8CC966141B0BA6796E66829D6A403B1F5816C8557EE8841031B2ED6C6CCFE8A55B39B9273F8BA050B1B328C7B9A238A7B8324F16A7A474C0B5721B9C8246531E19208838356F3337768BCB3397B4E01CC26175B67A66DFCD11F07B295C20AB484A60E7D086DB39B8301845B654A484462508FA78506357BBBF42DBAC157BCA7769C099A0B1894D4A17256F504EBE50BE284656F653845A26B00856D76A8A5A166CD09D04705261EBAFA20687A1068D9B9E28326848B67A0A3994D2DBA4B7A8F623B901E17CBEE610847A2903301C58287", + "dk": "C8D473A9EA0987F356FB309356A39E766633746B8FBAF03D588495E4B1CC87E4B283C871514182D3E1844D9ACB4FA5948BC38D85E05478BB699E41170FA593F7D74226D4597655C5DE80AC8C79181EE750121685C71797D3B5C240676637C7BDEBA61969508C3FABB4CD97CC53C529EBC993C4B883B2B52F42789F64C022620B624B8107E0E55FFE29280BB005DC66A83A0A219A0080F8E656729B29CBF8AA7866358694C94E477E499A055C8A8ECAC7338F461897329ED02B1EF0F0AB627B71B5322692268578B11E5EC203E674251C0182C10C775971247537358C0651EF21704CC68B57D5CF61C627C0AB30DE5743FB027B40D86071531F0C8B67092BAC18361FACEC1BFC53C65D512B3911156A991F462C8588D638526389E3CAAC808809EB7B50ACB83A10142C954B9AC938B983133D5D024303790DF848B7FB06AE4C751DAEDBAF08728A96C481B5A84B53FA37DEEAC6174C745F3C0821553CC88858C3DB392570AA388624CFA98E7232970B746BCF301642D92F3E452E3BF99E24329C470A57B31AA765C8952333A334102605BB8099555230287F07A813109C427E692393540FAD769831756701B481611472A060CA1E7C34F9412371C7658F4C69C9C0BC956404B88AB27BC89ED7F751E51781D95A1D0DCC476E7A8FD4A54272B5A9679B0227176D481035A3864FD747B52739B8FA801713BC0757347BC96A022487BFA5A3C0E30B9FBEAA6838553D9111351FF49A73970263B39CDF180F163972AB993C1630A89A06A2FF69A274F27A819C3727E2244B23163B320DD568B227B6589A402A5E16333C70C4D3264CAC8A80BDC64705675788CC20FE083635D25C89F387F5B39580737F06287F236B7CCCA4CC3A69AC0E84B33B20BA7661B8BA9B575CC555DC820481FA9941A8C259D962273536B36B0BB1E434B18A63BE405583925CCA14001FF9AA28EA7FFF525ABA151944607056F6CD5052C823D00F33651BFBF428257B388544654E9A14F2E595BB4CC5D5929A03F62BC2DC6C6B885D86969B298A06F0294CAE69337944C4AEB5B22E126AEB02BD34083637299D2C41080481C61CAB32BE749CA76124EE19907B9CCB7FD30F8B2C38DC970E81F9956C97A8BD3C6E37B07C29E60BB2B75C5258B572626A859ABA89DB3AABC571424618B26310278B8EC4E76ED07A10B864AABF37BFC9F364731050631421BFCB1C3B9153D4316A95089197A027AB80B39C362CE6D97EFF422244FB81AAF67354F03894CC25B2707939A4A06D302C59D106EB743678DAA3F1D1C3F46B03F0DAA0641835A548363180744E6B6235B84DB9A4628279A6EF7231499208E657A3F9BB6E3F782606B79FC9A38723576FA80898E8A6887D94C3ED774E46A86CFE705B34C6B5535865329C5A4A820F9114CE9A9C68495C726368B9E073CBBE627A7DE419F7F7B4AD221576F91FB1E66CFF9651BD6C25E3CC9CA49A570CF041E457658072B684E714BD6A86B3D05C7597A729E12E512C8D7E5B5C27049EFB0AC0E085B1B88347BFD314B4E4AB4B8875A489ADB8C9AE28008BAD36AAAD24683563BFAF19BDA8677AB7BAC7E33C3087B84A45246A2AB1AEF397750D386ACDAC63C87506166A0FAE18773F530E74545D54BC670DD7353B75B16373CB8A6269AF37097EE1B1640458153132AD80AB64F7A599B8670E301205043C136C56CA5A06DBFABA3204671C1B237B18824555B5DDB206A74ACE637005B363238378BDA5E198AD69B85CBB399E8B07CB899F9E93CF6CF62FCAFC9E4D77363CA2149E92197F2133223799C182CF5F182ECD35B5FDFCBF0A93A1350198F2F244F3216B442A22FDDB2F4F3BB8CBF0168D0220AA725A0E287DF08079A1DBB8747C02F0C2C829759A5D95B6237522E7F71AB5669390377E03A93AB7FC7E9FD6BB59C1B9B8CC966141B0BA6796E66829D6A403B1F5816C8557EE8841031B2ED6C6CCFE8A55B39B9273F8BA050B1B328C7B9A238A7B8324F16A7A474C0B5721B9C8246531E19208838356F3337768BCB3397B4E01CC26175B67A66DFCD11F07B295C20AB484A60E7D086DB39B8301845B654A484462508FA78506357BBBF42DBAC157BCA7769C099A0B1894D4A17256F504EBE50BE284656F653845A26B00856D76A8A5A166CD09D04705261EBAFA20687A1068D9B9E28326848B67A0A3994D2DBA4B7A8F623B901E17CBEE610847A2903301C5828747D4B351E049B7757A2545602C398D2EBCF7C28804BCC8862E270D7324AB435E0A64FDD51A8D91B3166C4958A94EFC3166A4F5DF680980B878DB8371B7624C96" + }, + { + "tcId": 2, + "ek": "C4A019A8941B1C639C0C6698AAA051E3B9C78BF7A15005A92AB3C6AB30AE974682F517B96F743889696F6F75BDDF6C9A588963AE04477FD52396C3B904459A3DAA39D5939F33817E8F20CD70860915F3B59FB088FFF98C0AFAAEFE352344681A249BCD0529B3578B4123D35C88E14F67616B1E19B28D027AB7988680CB3B1C257257D36FC3A2B81E18B1F918AB9EB650874135AAD478E3F5B34526856F81A3C32541781127F82304FE86BE29A70D489177FA5B9292882BDC58B5756043C558CC50D666D888C70762C71FAA5A0014A1E573B080016BFB17172D8B1B563C64AC39B536D568DA1853D00968334C412A26AE9272B0606A98C6199E96417A946B8780988445BC867050B5CA9904B6322DC059993068B02C09C9C9C2B00E719F45FBAF183B02CA258C95239E5A4993376B7BC47A8D2751C75C59B3AAA90640379ACB0A66B1ECA226D95E377CBC47B7210422BE338283404496D8A29C8553417E38818547ACB6213D7892248BA7746626B562CB1209871A058A92E85248B37185DD3393D7C95C9C36159CD646A7713B47A60EF33825F4F7CCBBC07B4AF88C25A553D11C3D637859818387013806D5A24914FBC7E6D58977674598CC57CF632148C6BFBE24878F318E1471B08EBC90DB01978A837A86C36C3ED14E69F7C771C32939B7AAA28498A038B558F75779D5C2C0736003C91864206E52A296F949058069ADC15033251890309A3F94D97A2716992C7745F8A991D10653E6F480F7A912C6619B0BD85926F8A2A9885112ABB1C3604EFA6B84301A2ABD0A5D6FC29C8B16C98AFA817B41ACF90C9776D603FC7A6B8DF22377E26105D159D35C1089ACAE7B7427DDB6B01E1CAE79FB8AFAA6917C16BB4DCA544B3CB121D00F4921CDF10BBF4437588351623153C916908BD5824684DCAA5B4C44EE9B1063405F723CA60EB52E0B75B7BF67BFD6D34F5AA94657B3AD1BD4CC8D0566BA35C501A78BCF8183D5A52D2E5C4E606AC09C29ABE5A539A280AB838B66A261BADE2028C1D1A9C352B4C6F1919BDA72C2C213D3EA9586C73E0E2C3486D9B199FAA0EA8B039EE9C3EE3B8E1380CE3C0E2BA2E81C9745BD63054616AD78EC8AC8C44B08CC4A217CA320DE7476805E", + "dk": "B0618E21C291A7D7228F2B5624037B382628A90A89D0213D54E20CA6989BF887A5F0E03256F660264724A5518830B5BA681153C512454CC47A3CEC3E49F3B300A928B05316155C0CF2E069BD6084B52C30422878064B6CB3535FB5485491E6874AA00D820770D0E55A6CAB40F3F4117E764EA43C62A3912943B6096CC41FF87ACA0C140AA37A8C49170E355B60CBF16399A00508989A316CB99426BCC9B9054AE7B46DD3B9CE703CA98C4E8FF6759D2006E66114027B92DCC40F9B2C7402A7C9EE7849955BA9FB35543427701F4C9267F65CD37640265192EB085AA5F02DBEB7125D77145E9B1BDD330E2E687E50789F9D814F4587C3030A5FF95724E62AA84490ACA3C2C76AEC24C29C82385597A9A4395506B21160BF5360133BF709F016817AA5CA266A9556BAA4CA71050B0A71400B97AF4C07782711EC290ED3799C91967AA5E9000BC670F295B53DA415EF8BA631F178F98C747AFC5673D61FC6C280FEB37467D09C80257FBCC02C6D14A48AFB72C7499AF802614D24352750CFD7956B9C77BF92B561AD4365E3666DCBE8033793BEFCC9C5AB572838B4BF459CB1A9822D410B0C6CFB5CA55723FFA555A197657E9A7DE72BCB76995D2E0BAA71409301B07AAAD1A092C3020C1032628109D11C1D46F50A739CB63497BA48BBA556E5A17F629E1D965C356809A3456BEF572234064EE79B9D68169628D8AF01DB25B138B27C6129F493522E40B81A91632CCC41B772CDC2211C10D07422272DD0967C9BB52C52832BA807C7642587C608A0748A32B8766A2C3345AAB527700C49AF887582A049D490B053D34B9A9B038C63AD829969FA706C93B906736A897C9C7187430CFC980116B73E018C7F3FB6420C8046EA86977FAA904597313555C4700594225CA3C9B61F789A59CC350DEEE23D37D5A585672446560C6F38278C0C595B61258BA9430393B1171AA24A530BA37999ED395FE2050A15D9AE74751177890137333B01850BD1535788946817EC1FC604AC2C01C6E23720236BB329172AEFE096B5F93252DC6BB6D82C369AA14822AA92667578CA1238958DA72188D0BBA63DD7B6C4A019A8941B1C639C0C6698AAA051E3B9C78BF7A15005A92AB3C6AB30AE974682F517B96F743889696F6F75BDDF6C9A588963AE04477FD52396C3B904459A3DAA39D5939F33817E8F20CD70860915F3B59FB088FFF98C0AFAAEFE352344681A249BCD0529B3578B4123D35C88E14F67616B1E19B28D027AB7988680CB3B1C257257D36FC3A2B81E18B1F918AB9EB650874135AAD478E3F5B34526856F81A3C32541781127F82304FE86BE29A70D489177FA5B9292882BDC58B5756043C558CC50D666D888C70762C71FAA5A0014A1E573B080016BFB17172D8B1B563C64AC39B536D568DA1853D00968334C412A26AE9272B0606A98C6199E96417A946B8780988445BC867050B5CA9904B6322DC059993068B02C09C9C9C2B00E719F45FBAF183B02CA258C95239E5A4993376B7BC47A8D2751C75C59B3AAA90640379ACB0A66B1ECA226D95E377CBC47B7210422BE338283404496D8A29C8553417E38818547ACB6213D7892248BA7746626B562CB1209871A058A92E85248B37185DD3393D7C95C9C36159CD646A7713B47A60EF33825F4F7CCBBC07B4AF88C25A553D11C3D637859818387013806D5A24914FBC7E6D58977674598CC57CF632148C6BFBE24878F318E1471B08EBC90DB01978A837A86C36C3ED14E69F7C771C32939B7AAA28498A038B558F75779D5C2C0736003C91864206E52A296F949058069ADC15033251890309A3F94D97A2716992C7745F8A991D10653E6F480F7A912C6619B0BD85926F8A2A9885112ABB1C3604EFA6B84301A2ABD0A5D6FC29C8B16C98AFA817B41ACF90C9776D603FC7A6B8DF22377E26105D159D35C1089ACAE7B7427DDB6B01E1CAE79FB8AFAA6917C16BB4DCA544B3CB121D00F4921CDF10BBF4437588351623153C916908BD5824684DCAA5B4C44EE9B1063405F723CA60EB52E0B75B7BF67BFD6D34F5AA94657B3AD1BD4CC8D0566BA35C501A78BCF8183D5A52D2E5C4E606AC09C29ABE5A539A280AB838B66A261BADE2028C1D1A9C352B4C6F1919BDA72C2C213D3EA9586C73E0E2C3486D9B199FAA0EA8B039EE9C3EE3B8E1380CE3C0E2BA2E81C9745BD63054616AD78EC8AC8C44B08CC4A217CA320DE7476805EA1CBE5BF3592B77207A8C0C8E3FAA7EF66DEB7C18CE8CCF387A76B39CB4ECB723764A9B01F8C411BEB6DACF298CC30841FEB65A10D6DEBA9780338B4970B983E" + }, + { + "tcId": 3, + "ek": "08C9A217A9BB0BB90955E2A5513488D9675316D1086C7774218649373C5EF425003EFCA50CE8B2A9349847C011CC421968F990010969BB879FD0D91A28074E9FF06988521EDC12B3AA1A466B955D481A095BBB15AD0130B11953176B5573E379D4E42609C6967A339C3B7453498CBBD4489F54DA0B8ED42A24DC6AA00515F7586703F1C612C6A57AF2B6CABB1991ACAF980104B17A5E1C097A67C46637E380DB91CE6FB612EA35C194200EFB96029B980FDF2B3D36A0561392A89C788676B48A771CA6A47229C0907355317E9EB88903F17792048FAAD182E2C065E30B63FFDA51B69554B0344E27895C4D924CA5FA80BED6AC0A372877454F98C77C4C699D9259BBE30A810BF163CB5817E9339C17151F9678BDA7E00BA1C965F1FB6193753CFC964D82EC36528490DE2539D830CA20FCB232FA3973511D40B1334FF2AC016CCB271CB06432BFD3BA5C7060785D2C3A32AAA4C0762EE873A91955657F49C7B2972106EBBCA39442A3C9490D7A4805F39DAB8A29E08B89A2F80EBE678B200A3DBB376511F62F1A77383F32B6EAB75F462030F75C95719517A4311FD25977B31537C804904B2C0297B63499A0965009B926237965158E9B7963F4A41574306EBD66C80BA4C3B5BB2BD77131C79794985B0EBF0CC351CCBE5BF92611E793C8308F0A8B5CD544556FA0C4DF25656554A1C5D43E79751200B3546929B7975538493B71B2FA40EA0747FD784D6177554D18340A940C89A40E36C84186E9748E1B478C16252E729F84536050E7C448B14FB8687696497412A5A2F8929EA6FB67FF9119331908BB24195D03ABA2C21439191E2539B0DAB826082572521181E69575AA31000FA627D3E80C5EB8BFBA688F69595AAE845AB9AA1955C01CE84674EE16682A1816725A3A8C884532BB9DBA6CACADF9C48446C2D1AA94B46930A180109D3197CC7398A7659C20ECCA63462AC508687314859C08038B5BB7FAE5C2E03AA7F348629CF423D491A5B45791A8A33BDAF101CE05A40C48CFD27930BE98762D79017E109040CB5E7CD66E49F5BFC84744627643E6EA2BEC647FE2D216663352E7D90067DB55732D97E0668D8B44A04821F740E4A04265E2A7AAA4EAB8734262008F55", + "dk": "1ABC8DB637C626CB70D4CA58323140DEFABBCE522D4F55614B512B041C98DCDA87781770279A2A63E985538CB6E1EB800637269CA0AE0AF075FE91AD25A5C264C51AA3245B987C679EFB92BD0CA6FAB6543E04513DB5777FA98FE495C8695B91BC123F86C55F9632017DC82D4AB79A67DA61B167044979CDD8C4CB57749733CC8B5C4C344F475AA949386A97C8EE666C13C53F43296AC7D76837C6C20EC28D6A550848EC67648284A479646821A66F0358B80A85C73009045C9A17F2ABC556676F838DFB250A35D1073DA307AC83B20DD7A6E3099A2CB423FD07C25619405E86C2D6C3B447EC8201572099ABC17476A2E67B4C878918FFC0A59D21175A32096247A1FBE922050A029B5A88D11430B5A02DA8864B5C637204075DE7986AEB3089F007CA3784331FF33715DB9D436C8A81B203310900192718F8E2342376C042AC92E51C86BAF22A6467332789AC7C4424E619668C57876E053EA8E0B19B78714C22B4E4F32D0F0917ECB64E8DCCB25BC5379B60A43B1AC81CB763429B0F6C89C01BB44F5B184EAED62720CBB8823C3B80A6AC4CF8047D3C625D24B36CE7C8A87A637FFC4704E7181F341477FA139314A5EC91329829C80A09C2D965108A8CAB974A297B495E0C9779E2740F94E361C9D1C4E81185EFA37BB745566797CEFD8B0834ACA9F774A13E799E61694C14EC9CEE903FEC595C4DC853740379485B8F28F04EA2304423B3C74530840F3041DF684846A89B5B8C1619F04356EB24ADB79803D0110114BE9EA962B84A0D936500B9DAC99E1A924FA1515C2CA7F3C745B922BA58458FFF71A18A990B33923C40D2359FE58ACCD6A548B62A8D26A5A50CC439E07BAEF230D2161367C3AB46619497BC5F9DA7430969BA48D9CD1DE500B9A76B017600B999CBC2A828298B94A88AB6CB3738CD6BAF3C299AC6AC6029B8289F4A276F6C6FAA20B7393940B10B7650FB430430AB12BB29EBFA6AB263A2AF1AA880C730B2D655C2C67066D7A06064B91ED90F7BBB559D0B7B20C4721EB907F469A0AC9B975816A0F3038AC53040637A9FB8276F33C93097B579E8B7CDCAF1214F175108C9A217A9BB0BB90955E2A5513488D9675316D1086C7774218649373C5EF425003EFCA50CE8B2A9349847C011CC421968F990010969BB879FD0D91A28074E9FF06988521EDC12B3AA1A466B955D481A095BBB15AD0130B11953176B5573E379D4E42609C6967A339C3B7453498CBBD4489F54DA0B8ED42A24DC6AA00515F7586703F1C612C6A57AF2B6CABB1991ACAF980104B17A5E1C097A67C46637E380DB91CE6FB612EA35C194200EFB96029B980FDF2B3D36A0561392A89C788676B48A771CA6A47229C0907355317E9EB88903F17792048FAAD182E2C065E30B63FFDA51B69554B0344E27895C4D924CA5FA80BED6AC0A372877454F98C77C4C699D9259BBE30A810BF163CB5817E9339C17151F9678BDA7E00BA1C965F1FB6193753CFC964D82EC36528490DE2539D830CA20FCB232FA3973511D40B1334FF2AC016CCB271CB06432BFD3BA5C7060785D2C3A32AAA4C0762EE873A91955657F49C7B2972106EBBCA39442A3C9490D7A4805F39DAB8A29E08B89A2F80EBE678B200A3DBB376511F62F1A77383F32B6EAB75F462030F75C95719517A4311FD25977B31537C804904B2C0297B63499A0965009B926237965158E9B7963F4A41574306EBD66C80BA4C3B5BB2BD77131C79794985B0EBF0CC351CCBE5BF92611E793C8308F0A8B5CD544556FA0C4DF25656554A1C5D43E79751200B3546929B7975538493B71B2FA40EA0747FD784D6177554D18340A940C89A40E36C84186E9748E1B478C16252E729F84536050E7C448B14FB8687696497412A5A2F8929EA6FB67FF9119331908BB24195D03ABA2C21439191E2539B0DAB826082572521181E69575AA31000FA627D3E80C5EB8BFBA688F69595AAE845AB9AA1955C01CE84674EE16682A1816725A3A8C884532BB9DBA6CACADF9C48446C2D1AA94B46930A180109D3197CC7398A7659C20ECCA63462AC508687314859C08038B5BB7FAE5C2E03AA7F348629CF423D491A5B45791A8A33BDAF101CE05A40C48CFD27930BE98762D79017E109040CB5E7CD66E49F5BFC84744627643E6EA2BEC647FE2D216663352E7D90067DB55732D97E0668D8B44A04821F740E4A04265E2A7AAA4EAB8734262008F55BA5847B144C55CB6F43370E75F26C97B32E62B786D7F0E68D590846B65A9D85551DA028C3ED5E25860B2F5C7334317DFB9F263FBA3C4AA9CF579F98F33706AF4" + }, + { + "tcId": 4, + "ek": "A669465DB7571DE9422093688519373DB340CD3A07DEFA68572CC053601C120A42425742A5004225D8A2EA2837DA1A2F3FEB979D706C4C778937A649B46833A30BAB484C021140100AA1CE2C6974C8884A1BD8C1FC7549BBA2018A2758F1E834A94A3C581719DF587DE26A2E73607F4EF15682DA8EDC50948C0181D0E5B17CAB1E09106634AA410E8A39B557413F3C3E49587EC9B9882F97B5F2C490694B87CE99C3BD7454AC2C881CD0C715C825CA1BA813EA3B98C6442E21355781079FE8875F542B5702C92690337A191CF1727ED0438A77A2003EF5418B4756CA86019CC39E73A037A963497F1BCE897A64864A718FE0C77B8A5E307801C0C8B1B7AA7BE90412C17C0490891BA9638D41B4257A239E0DE12389B4C14438A270562E51C071179006719364B75783D2496FDFB3002A6667E5496D5ABCAA64B6283740B9664A3FF28068F802C52023311AA8737C6BA81841CDAD4841A3E78EC786946D537E18D0237386855CCA2E328656012BAD7DFC1460988DE8206F94F84F3E896299509DEF16B0CF74AE8F967D5B1A4B0973BAFF4682C6B04FDE03610B0C586EC3CB352C4B62F68E0C491181C92F8A85447AFA98FA00AD4F4BB51EF98D5A9A51534B7447E9C8B81714D2722338644F8B18B5BD6A9FD9D14938735BDAF259D3393730294E1D50C7D8D77926D382F701D01A2CA302B54428B5A9FB0C95BDCC3C51611494417166925C54F5BF7DE43B9DDC8675A4BD1F12C7DCE9AC18E93C9BB881A7441EBC699FE5A94AD8FA265EC25761FBB31AD80954FB448D66AE77CA0A5B798C16D8C54F7382DE197252317DB6A2A1268C6150E3319E712E3004741E41320C201BE83BB31C5B29E595C9DF61CB962A902FD0CC2DE53656EB6E1660A36C192550B707C6F8B2ED078AC83C3B3FD98A3E0A023A20320ED34BECEB33DEC353D8DA0C52F60E3E5736FDBB1A766324050B4B25E62062404DAF2A2DDCAB962FB1573EACA86C7B01D143BA45B03F0CD15AA614326E0CC706D5AF6B8AA0CE12AAEAD817596111C8A8A26AC64FEC46C74F11131AF568FC10747A88B52D448AF659A72983C6B6405F6A3DA05C30F9053AAD6ADFE15C4EBD53842F4E52A3AD56E3B6B97A26974D89C1", + "dk": "B2D92D3B4284381811B08B429857CDF4A988349BB3E50C25A785579A747CF3769855E53283D0AF873246255C07E3E0A4AA2019419C515E004A2E606618361E360C00EDE06540EC0747EA16EB50645736BBF8B4303AD89C23CC5D0A46AF737C06D031B16A669B0DBB573555CE3C600C0168A78F6B06587978101912D5EC26A177C3A4D4CCA2480598C83FFCF6B196BBC597A6B5932139E3F411A46346B4335199EC136047A1426AA2E03B1C161103922C670CA443A99C914B225638F48F0AC1A78F7780B64A6AB6BA264FE199659749C84791C2E8C12029CEF8C907F54C92DC54325147429AF8C9309137E31194305837844755B701BA8599B4CA7520E62428FF14CF09A34BCB47A3BF6CC9353A33DF869C972556AFFA5E4E4C48AB655D250600B7D979DCC69DCAC880A0F1BB2E99BF32A07AE9D43FE2084980C79DBC03477A14980A1A71CF870923D7A42FA1565F097D7D07A30C8275D0945D2F769A1DCC785E5C29C7A10B747223A059A5C72549D68590A5D221188B92A0622F725292E5E4CEA785B8203CCC6375B101B4928B543CD407A85C85A1F0C575B6123978E1715680C9FE1AA82EA23D05932CB362128422BBB9B60AC9B109F179178A870407F70B4F29488DC0525D2B5D885C20FE8335DCA80F56814CE90624B4E1ADF39A5725505FC4A0037133485D3336D2BB615E859334A8BA850324E4D1A307B41A87EC9B240A15BA48B122452A2CB67ADA48C6F09A42CFB9C63BB93DC91674795A1CE186543F8A745BF2624A045E1C16BD9908C3FFC93B17965D4DA36777BA4942B209AB378D8F3A352B594A783B0DDC654E41B51126A151D2C71F55AA0AAEE205BC49A439780F4700652B361A19A9469CC73AABC621FBF4B11C1B9564C978CF3486E8855F8EF1A993F48B73CBC6238017E09A84ABC4A3B7C6AD1B40BCE59777CE6928C0D105769580CACB165C084BBCA0A1D8409086C83D9F3099359C4B21C625E949088966C71E449D95606C4E795A41B461FAEC6080117C0D55B75A70C28C78231D246532754B66670B52E548B7D14C625A0E9D4440FA469BAB364C0BE360A12202BCE062A669465DB7571DE9422093688519373DB340CD3A07DEFA68572CC053601C120A42425742A5004225D8A2EA2837DA1A2F3FEB979D706C4C778937A649B46833A30BAB484C021140100AA1CE2C6974C8884A1BD8C1FC7549BBA2018A2758F1E834A94A3C581719DF587DE26A2E73607F4EF15682DA8EDC50948C0181D0E5B17CAB1E09106634AA410E8A39B557413F3C3E49587EC9B9882F97B5F2C490694B87CE99C3BD7454AC2C881CD0C715C825CA1BA813EA3B98C6442E21355781079FE8875F542B5702C92690337A191CF1727ED0438A77A2003EF5418B4756CA86019CC39E73A037A963497F1BCE897A64864A718FE0C77B8A5E307801C0C8B1B7AA7BE90412C17C0490891BA9638D41B4257A239E0DE12389B4C14438A270562E51C071179006719364B75783D2496FDFB3002A6667E5496D5ABCAA64B6283740B9664A3FF28068F802C52023311AA8737C6BA81841CDAD4841A3E78EC786946D537E18D0237386855CCA2E328656012BAD7DFC1460988DE8206F94F84F3E896299509DEF16B0CF74AE8F967D5B1A4B0973BAFF4682C6B04FDE03610B0C586EC3CB352C4B62F68E0C491181C92F8A85447AFA98FA00AD4F4BB51EF98D5A9A51534B7447E9C8B81714D2722338644F8B18B5BD6A9FD9D14938735BDAF259D3393730294E1D50C7D8D77926D382F701D01A2CA302B54428B5A9FB0C95BDCC3C51611494417166925C54F5BF7DE43B9DDC8675A4BD1F12C7DCE9AC18E93C9BB881A7441EBC699FE5A94AD8FA265EC25761FBB31AD80954FB448D66AE77CA0A5B798C16D8C54F7382DE197252317DB6A2A1268C6150E3319E712E3004741E41320C201BE83BB31C5B29E595C9DF61CB962A902FD0CC2DE53656EB6E1660A36C192550B707C6F8B2ED078AC83C3B3FD98A3E0A023A20320ED34BECEB33DEC353D8DA0C52F60E3E5736FDBB1A766324050B4B25E62062404DAF2A2DDCAB962FB1573EACA86C7B01D143BA45B03F0CD15AA614326E0CC706D5AF6B8AA0CE12AAEAD817596111C8A8A26AC64FEC46C74F11131AF568FC10747A88B52D448AF659A72983C6B6405F6A3DA05C30F9053AAD6ADFE15C4EBD53842F4E52A3AD56E3B6B97A26974D89C1F15DA8FD9D82C5D37F8A0416945C7EEBE05450AC5C3D25EF23CFC1343F2E56D45E0BCBE755FF836F8C108E9D8D56BDD3E64987DAD81555214AAAD84F11C2168F" + }, + { + "tcId": 5, + "ek": "D1B90A4BB5C6E1860AA7442F96154092037FC85C67692C432A99220A1464A5007BBF9A1351BC47E26489265249F6B01726B5BD326052C4FA568CCC240A74C3E373172BC72685008880137FE01B4577C4879B1BAAF0A03EF57C36BBE327F9A6862F3321406CBDF584409505A0A92B69CED25D729C41B8F8862B219279CB845A6914C5874FE1ECCA9B507E6C4BC9A5248A4E26AC4CEB87F1D72A2ED090C7A7A3FA68430FD09607417B8E4A21AE13A921B068D1D97404C10D46F97CFB1612438A72A61C2CE355494BC218F7412583959F5977093CC420831C5DB764231BCC7A8AD564DB221309E16B1F49C12B8546A095B33A87B9BDB0C6E4197A4A5C2250F070F5DC8881BBC32F0093903C6EE1758F473942252941D80ACB386C1E8EA928CE7A84B0C58B1A422640207686D0A38D41685F561C1220A838C93A1EEC35D7E49A0F602C5942C21F45A6B814583744A3F9CB85C3625CCF08C835FAA595824032F9517433B66D0634DE45131813C478803537721A21FA349F1B7F4D8C5E752B9F0A6A3F9CA4B082B22282783D5C292CA809A10DF22582DABD8F8907877A7F5F14BAD2F4A0112352AEF18B9C8422CFC013E246732E328D36768B9CF346DA7B386072643A0CAF670A669C39B25C835C73089F0C3A9B4569BBD79C675B090FC7836A62DB5FA989C674980C75A98B939A370223535AC3343E23CCC9260FF3B93054E92A0EE86BB3993D41FBB25C74BCF38045FED50DA6F24AB02A3DA17293301912CF3B69A2B26F8E8AC26CB12A8961299009721BAC46CF795A261C244CA091CCB181681568D7D020069A7F9C40CBB0115D9CD840B8516ECEB2085A1C4ED852CB5A6C1F29648A250A71647AAC39792E5E027F28745ADA5874186B3AFF8A42A2310033278039C043A82C12D4C48F7C239FCB381F4DF0986BF6B5E16305359C9451678449D48DC76B8C0A043EF6813BBB1AAD3C34CDB8962831BC6A1DE5278405D093E982ABE9A27F8BA13C20899CE906D503B484DB9B9BDBA52B6BCDA45284049239643C75A08A8BBF448C8805B634D57A600597D46B907B0400EFC78F4B5C07445259F2B0318ADA80E8E5ADEBF7D5C6471524317614666326712977982BCCED1F5BA302B13A", + "dk": "89C397A5A2CC5B3048A080BC7F4213BDA6325223069E421161076EA732594F074D827A1014812DA52A2CCC5B3EE72A52DE1689D4433428C074F6DA534A1495046537D0779F2BFAA9213BBE6BDA0FB1764EA8DC20A6251A3C49668B15CD0B78B6E0E1CF39D6344D96020CC5A973F77DD76957008D5F5541960915B3E8709826F598F58113FCD4258D629A57614CE6179D7D0002C8750DB0299A5ABA72E5394DD1CBCFC892608AD6882E01A2E50A3802860A4BF1507DC440E104D0E8C44A2DE210D9E992C6F1801AA1A55F1539C3928420C5483F38C560059AD622BDEAB3496FF5CFCB691EB9F51921F74D8B5974C8204BB04576D677A3AB7C30D53B6C35955D7D541F25158CD426966B2814870B2B6BF86CFA701A554B20F8340789C009D7917AAADAC82953A94C7B204DD6B40E6AC939A27021F4AFABB81959226B8F26A9381A06ACA4753FE791CB89630F137D6D7C6AD0FA4CC5AA7A46CB285877207AFCACE6A371887309EC2065E4F66A672452956A0A7643751C9A3BADD3836E173045237B43AC89B17324C48451FBF2C265202F18745CA19B3222AA5B4CDA1BB1A3A38BB01CEBBB2332163735C5698B505F05049FBD923B854BBBB6999BDF24302CF35E845767B361B01616244B119E171859FF8B5E75562D807C15DF69742B624802E83C9C57041046756DDAAFECC2518E197829E170DE6431B04B4AD66000E4D3C7D346CAE0453164552073F5CC55538D8D67727A5193596C7C21C24C3C1687DC4583714042EB7ABAAE183503124DBD078E7BE7AA42F0B17F99C5920A85ACEB64505C17AEEB570B291856656005DA750C318BAC965D8543B29DB40C5335B8CFE5855F746D8718BDE9906A25268CA13426466614EFECB53AFC51EED062E1EB3FD4917BE81C61C6B3C502C8563325800A92A6FD78586853AF643B804E839D45A32CA8911FDFC7C5CA4749B4E55270F757494694EDD06D6EF3B08B319156B969B77B9658EB3AAFB28C3CD834406C0D8FA57E4B388361E090A6C9CC5CE6580317CFF0810F166782E0D617F4305D56C0A69DE96BC75304C34783641CA2CAE915EDC31C39B771D1B90A4BB5C6E1860AA7442F96154092037FC85C67692C432A99220A1464A5007BBF9A1351BC47E26489265249F6B01726B5BD326052C4FA568CCC240A74C3E373172BC72685008880137FE01B4577C4879B1BAAF0A03EF57C36BBE327F9A6862F3321406CBDF584409505A0A92B69CED25D729C41B8F8862B219279CB845A6914C5874FE1ECCA9B507E6C4BC9A5248A4E26AC4CEB87F1D72A2ED090C7A7A3FA68430FD09607417B8E4A21AE13A921B068D1D97404C10D46F97CFB1612438A72A61C2CE355494BC218F7412583959F5977093CC420831C5DB764231BCC7A8AD564DB221309E16B1F49C12B8546A095B33A87B9BDB0C6E4197A4A5C2250F070F5DC8881BBC32F0093903C6EE1758F473942252941D80ACB386C1E8EA928CE7A84B0C58B1A422640207686D0A38D41685F561C1220A838C93A1EEC35D7E49A0F602C5942C21F45A6B814583744A3F9CB85C3625CCF08C835FAA595824032F9517433B66D0634DE45131813C478803537721A21FA349F1B7F4D8C5E752B9F0A6A3F9CA4B082B22282783D5C292CA809A10DF22582DABD8F8907877A7F5F14BAD2F4A0112352AEF18B9C8422CFC013E246732E328D36768B9CF346DA7B386072643A0CAF670A669C39B25C835C73089F0C3A9B4569BBD79C675B090FC7836A62DB5FA989C674980C75A98B939A370223535AC3343E23CCC9260FF3B93054E92A0EE86BB3993D41FBB25C74BCF38045FED50DA6F24AB02A3DA17293301912CF3B69A2B26F8E8AC26CB12A8961299009721BAC46CF795A261C244CA091CCB181681568D7D020069A7F9C40CBB0115D9CD840B8516ECEB2085A1C4ED852CB5A6C1F29648A250A71647AAC39792E5E027F28745ADA5874186B3AFF8A42A2310033278039C043A82C12D4C48F7C239FCB381F4DF0986BF6B5E16305359C9451678449D48DC76B8C0A043EF6813BBB1AAD3C34CDB8962831BC6A1DE5278405D093E982ABE9A27F8BA13C20899CE906D503B484DB9B9BDBA52B6BCDA45284049239643C75A08A8BBF448C8805B634D57A600597D46B907B0400EFC78F4B5C07445259F2B0318ADA80E8E5ADEBF7D5C6471524317614666326712977982BCCED1F5BA302B13AAC8F97363E3DA56C24E9B528EF5B0F7EF3007AE1703A27F65F10BDD386C48181E2AF0A01F772884FDB0A5D6E0993FD1BC2D70C4D1AD6E3D9D8892A447A1B226A" + }, + { + "tcId": 6, + "ek": "ECBA3285988A435786FA1AA4ADF9783D5C8775D35C74885FF1034CF4F77958CC131AC3C9E85439E7947A84925241A37FDE85A90F572EFEB76692E01CDCE4858AB7A01E4364AF802385B41FBBE4A14C11544426B74EC1BD5EF1B1100AC1AB8A9BA50AAE68E28813444BC667BD22C3A472CA3451B18206B86AE5550A3C03A1C5378F0FE23795A96C0A9A2FB785C9A870599DA6659E6409F1355594968049B78C4DE1432440828A859372042060C04CFE557AFC28A41509CCDC83BE5D7A88A27B40DCC56934313308D702B66ABD04D3799C128E1CE246270499A962CA123BC47B10C5103B9C3035148750666A608D7BB05AF5F9088752B02C095BECD43D4117697C873B9F885E0EAB7F8C81C214FA138468311DFCB97125680A9C7BDC197376A207251487459015E5A44C17111C48600ACA014C8042C35F678DFB550A916B0CA179778BBC58A48AB31D529AECF0009F1C277CCC922E8899FCC9A577B53F98428A563B50A1885638803BAA2C76C70849B0EBCE15066B2AA9489572893C1B0C7BD06189C89982E50501A100A7530E49423F2C46AB8B3B5700F4989E9705EC526D647483A57BCFCF873854B31118E0BCB11BA1270086E695CE45D9B9767C3C5AD13655E0BBA07C6D9E00740BA5C3551A61050A2B48B212CA9A8FB62CC34B88585D53CAFB001CC56A3091F542E13A84BA378541404A8D076F2179A13B2423BB539D8FB18D26FCABE9D6BFEB957EFC9887468683030A00873031C1A8381A2AA85831B2527B9811D492DF88AF9457C7FBA63C1639A43112075637C9B05112CA649E86C0C89A5C89272A848B37973DB5837B695942EB2B0EF9253F892F948A4409B138DF31C8CF8937CCD0BEE8643163D66DF9CC5CB27787D00861B42A4FB5E7A40CC933081C0B4CE868E064482100C004AACEC6671FF79459E504B8D2BA451D9CC152A9C8E3F97B1EC4ABAAB94F93AA3CEE92A343295A6A242066D61CB6428C34204C804B5F4D1BC1BA7AB413744834C56AC16382CDA29AC247C15A43B5BECA4E4DC062A90428F113A4BD1CB6E78707EF8C47AABC2BC933554EF4331E0A057C8C45747C757F1EFC1AC61EBBF19FFD817CC15D3D59385D7366B33A4FE72B88B5DB263800E0", + "dk": "AEF11B22779DBFC59DD62C9A0F4144E92945310471D59055D9897C8034773AC4ADFFB1CA24418F1F7C2235E9C1695969C85375A31BBF1F30440CE878D9C3483CE4B72813A18D547BE8B274A9B301ABF165C9165C73E464A8A8569B0667B49329F81A2CEAD0CCA152574FF698CF85AC4DD5689EBA43D514B6B5C5885E76C19912CBFFF38C9AC057CD667F7823A75B8CBF3F703DFDDA5AB0515FB6257716C2742E804435189EA30952A356B33FF63833693CEE439471950C3DA23802D7CABF38606CA139A7F1536D312D66D24F68F2CFAAD23B4CE50D0096757756CFF550A01DB9344CDA061248692AF24B7488446BF06575C4AAAF67C2B14574F8393867B8131B72AA97B4A0F9E5C050D755C4B829C5A73310C05DF7E25DF7C006C234192A051A4C19591FDC4D96F7BAB2173DB777BCD1E724C2C20C288A42E9360DAA5A0F21E21568B378A8251D52E7998117CCD854638C2B831AA575B9652CFD23024C8797A92A359143743165CC3C91299475AD7B7429D1D58DC64C784AE861C0E20BB3B029D75376AA893AC0EA9F1BF53845B5C32EC853B5538F298C319C79BF3B8A98D6BCC1BB877DACC34E681A64ECBA2058F246F088A4320B3E16E81D2C7939971800352681A10C6750D74B69B40176121211656A4D57CFA7E685E6AABF9DC188B62C34ECA4C5139C645A12C0913A923A3C15FA7B01BE9459BD3186C408C2326A5D69A95D119A7756E00346183B3C61BFE3AAC546140186FB3C9F8828CC535EEA7ACC3468021FF9342733B8CEDC294E057607F8AB90D191B8A359F49B000A36451310A881DC8E7E596BCE330BEA02973CB966FC598B7CA4B5278195AA7234C868861C811443790F8EB78DE6A1AB8391BE7F37AD7716C29669742F414FCEB745CA52BDAC497E9E75007605A982C981000A08862A4358F6520470CB66A25F24B37103D13AEFF51D86088501F124176483DE10CE4AD64CBCD23F899036975AADCE46896BD57A5327B2CF442CC078C340DC1CABD3289BD11BD35C064F8558F4E1036E177BA8D553506587D3E30BD960BA61E93131F7071E3CBAB190283DF66B0F8466568895ECBA3285988A435786FA1AA4ADF9783D5C8775D35C74885FF1034CF4F77958CC131AC3C9E85439E7947A84925241A37FDE85A90F572EFEB76692E01CDCE4858AB7A01E4364AF802385B41FBBE4A14C11544426B74EC1BD5EF1B1100AC1AB8A9BA50AAE68E28813444BC667BD22C3A472CA3451B18206B86AE5550A3C03A1C5378F0FE23795A96C0A9A2FB785C9A870599DA6659E6409F1355594968049B78C4DE1432440828A859372042060C04CFE557AFC28A41509CCDC83BE5D7A88A27B40DCC56934313308D702B66ABD04D3799C128E1CE246270499A962CA123BC47B10C5103B9C3035148750666A608D7BB05AF5F9088752B02C095BECD43D4117697C873B9F885E0EAB7F8C81C214FA138468311DFCB97125680A9C7BDC197376A207251487459015E5A44C17111C48600ACA014C8042C35F678DFB550A916B0CA179778BBC58A48AB31D529AECF0009F1C277CCC922E8899FCC9A577B53F98428A563B50A1885638803BAA2C76C70849B0EBCE15066B2AA9489572893C1B0C7BD06189C89982E50501A100A7530E49423F2C46AB8B3B5700F4989E9705EC526D647483A57BCFCF873854B31118E0BCB11BA1270086E695CE45D9B9767C3C5AD13655E0BBA07C6D9E00740BA5C3551A61050A2B48B212CA9A8FB62CC34B88585D53CAFB001CC56A3091F542E13A84BA378541404A8D076F2179A13B2423BB539D8FB18D26FCABE9D6BFEB957EFC9887468683030A00873031C1A8381A2AA85831B2527B9811D492DF88AF9457C7FBA63C1639A43112075637C9B05112CA649E86C0C89A5C89272A848B37973DB5837B695942EB2B0EF9253F892F948A4409B138DF31C8CF8937CCD0BEE8643163D66DF9CC5CB27787D00861B42A4FB5E7A40CC933081C0B4CE868E064482100C004AACEC6671FF79459E504B8D2BA451D9CC152A9C8E3F97B1EC4ABAAB94F93AA3CEE92A343295A6A242066D61CB6428C34204C804B5F4D1BC1BA7AB413744834C56AC16382CDA29AC247C15A43B5BECA4E4DC062A90428F113A4BD1CB6E78707EF8C47AABC2BC933554EF4331E0A057C8C45747C757F1EFC1AC61EBBF19FFD817CC15D3D59385D7366B33A4FE72B88B5DB263800E0EAF2E80AB7075E89CF746C56561D05913BEB89BD11D573A639C1BB095F8916C6B7288EA78E624E08D422B3958F8E659C2FF3E954B95282B10343C3CA27DB3F96" + }, + { + "tcId": 7, + "ek": "BCB9BE9BC77793A32B8164332831273B3BC5F8CC18713B9B6498C4572B370609B1BBC98F27B55DE6E309F76975765B8BECCC8F02B5C9AAC76010136877D70D88F9353B45CB73127A83A1758FF2BCD1980CEEDC7860F88609DB59E2A4A6C9C32E67B7C79339CC03B3542499C1D8D7B80D4AB1B808985351BFC238CEDF55A5197761C387BEDF26A20FCA61F40034F8E2C8F4BC67F1E58DACB45E0EF72547C08972324E3E09845A9646AEC006D1977DC6E4C370B3B17E27215BBAA52718012FD1ABD11A1C974773B3193C813209EB2CAFE5A81AF569AE49F79FAD096180290A224AC8A775CDAA82B24878B9A84176AA6A355D71734C5118BD123711326F66FA14C5B6279195A9E61157C5D3B027A4486968B7A1B8B1DD7642931868B410C99A968C321C45A4562EABB32EE38641D4BB77F6DC69EC5C8EA6710C4F7503603CA80D0C9229EC3463CB85DFE67D733AAD5D1958D786BC13C5C43D111FD85192E3B382457A4A01F174A70131E3F65668985A6A7B60225C02C1B8047A4B20A6A7A9F657405B81972D56C3F4C761EF045F354C92D62491D80960829B5EB7E14B70477EA3BC64B898CFA6E2A22816A4444A477E4686F4721E125788E254A56CCACF75D17B5C58AEA8BCA78C442B2A02396CB0B79877B9E6867BAF3CC282B7C4B191383E365F84F63739E6580AA87EDFE7B3AF0538204261B29B3B27969243F36B66D54E27697F12A4A55E34C88418B651320C08B11A835A4B3B0548596A34F0F27B95269DF52C263E6C759EF5C8F83661ACCC4D6BF1B8B5F22EB7C6848E18C79955847B90C580255E6CA64A4C065D45958C5F5122C3E177BCD3747239197BF29B5D3498867097EFB30E379A2408EA6F9A4B030577B2DE002A6460318037C1436C0B90E54C2E4848A57295B4128A4BF724588CC4C1ECC20951A1AA5470FCD62662E01809D7BB3C2256AEA62ABB9805C307BC259CA20DCC1CB4BA5FA9806F66067AE3721C73707115711630010DE64C53D3BBBB1ABA681D16649C852B11B10A4E57341583770D9A3F62513D077560CF2C54B8550F0F352431920E7EB10BE62421848AC32D55815DD447395077D54FF2BE65DC182D61B139B5D8E7363C196BE1D71513CD632C79", + "dk": "AC34BA30A80D6E2C9D3CA7A9CAA387A423B68A8A6E9EA9BD40438836D4CD73428E2F5361653811FAE8B0AAA50D9C159B5B739A5118633768376E092AB9F68746B92526E40C6F3609A2019A7EF14AFE777588B06E74EB99F8DB8D93FB6EE6E855BE415118688113B277D3E265C1057A5AB2203155C0213C4D022C3D3E5155F0EC2BF7809539035DF62016546B497D699AC461499CA4BFCF4B57BE55878810060566B390A70D07CBCD34E407476A0263AB8A43DB34658037D349CE179808A7820FCE970A073CB1390272ACBC0E3DFBC2C146718610A482EB5B6DF2797C934D9B27BFCB6333632466EBC27D2C01ADD6E7CF5055A4621CBE4EAA57BA585846180C07B26B2A46BC756B7222DB5447B63F8AAC73F99B340B08A18797298000BBCDFA4BA576BCAC4A488EF3197F9C4CF7514938BACEADDABD91B3A939C14941D1BD26362042E57354228F69455490C0003D686592274668A9094DAB8EF872A27C348F2C570679246052786FF18920A8C042202CB7E546737F554525C257ED3579187BC86709157024CC7D0190FE468C6BE0679B09A905419A6338C527852082E773A0F5A8D32C8D53E78DE15825DC98C1149940CD9378E0CAAD4191C47BC2535CC93A68951548240A4916B09E3C17FC42860B450D00D0B68D757A8A52825BCB28CA283C539555FC241E9EDC8572424C9EE7CDC0F8606BD6BBCCF459B27C1A6E8B4ED7F6C38A3C3FB55C5090E20E31750ED73BB5A8BCCAF19557A6EA0C68D0B8AD56AB22537F6A0A7B7E32A4048045BDB1ADD0CC8741591A518633B3DAAB8465558BA86157C9B4026A103839C8CEF6B4CD73BF4D7755673044B0D91F7E1C40B2F2897D9812FD24211A747BB527B194A29992B39CCFD06715815B3F02A19DE15AA35737D442C864E5255DB5CEB999B2E2A5227FC401D90CC848EB33C6B0AAF17414F5874769890D7555123535570441A98FD59A05ECB75B838F9F16929434871AD45CD9C38B0101027975AA29C5A82E345A8E502D172537F50AB334F428B3752FCD0845E249760BD01A9C103DDFE67865E740F9F9A3F4710687AC55E7513A4CC1684C1428BCB9BE9BC77793A32B8164332831273B3BC5F8CC18713B9B6498C4572B370609B1BBC98F27B55DE6E309F76975765B8BECCC8F02B5C9AAC76010136877D70D88F9353B45CB73127A83A1758FF2BCD1980CEEDC7860F88609DB59E2A4A6C9C32E67B7C79339CC03B3542499C1D8D7B80D4AB1B808985351BFC238CEDF55A5197761C387BEDF26A20FCA61F40034F8E2C8F4BC67F1E58DACB45E0EF72547C08972324E3E09845A9646AEC006D1977DC6E4C370B3B17E27215BBAA52718012FD1ABD11A1C974773B3193C813209EB2CAFE5A81AF569AE49F79FAD096180290A224AC8A775CDAA82B24878B9A84176AA6A355D71734C5118BD123711326F66FA14C5B6279195A9E61157C5D3B027A4486968B7A1B8B1DD7642931868B410C99A968C321C45A4562EABB32EE38641D4BB77F6DC69EC5C8EA6710C4F7503603CA80D0C9229EC3463CB85DFE67D733AAD5D1958D786BC13C5C43D111FD85192E3B382457A4A01F174A70131E3F65668985A6A7B60225C02C1B8047A4B20A6A7A9F657405B81972D56C3F4C761EF045F354C92D62491D80960829B5EB7E14B70477EA3BC64B898CFA6E2A22816A4444A477E4686F4721E125788E254A56CCACF75D17B5C58AEA8BCA78C442B2A02396CB0B79877B9E6867BAF3CC282B7C4B191383E365F84F63739E6580AA87EDFE7B3AF0538204261B29B3B27969243F36B66D54E27697F12A4A55E34C88418B651320C08B11A835A4B3B0548596A34F0F27B95269DF52C263E6C759EF5C8F83661ACCC4D6BF1B8B5F22EB7C6848E18C79955847B90C580255E6CA64A4C065D45958C5F5122C3E177BCD3747239197BF29B5D3498867097EFB30E379A2408EA6F9A4B030577B2DE002A6460318037C1436C0B90E54C2E4848A57295B4128A4BF724588CC4C1ECC20951A1AA5470FCD62662E01809D7BB3C2256AEA62ABB9805C307BC259CA20DCC1CB4BA5FA9806F66067AE3721C73707115711630010DE64C53D3BBBB1ABA681D16649C852B11B10A4E57341583770D9A3F62513D077560CF2C54B8550F0F352431920E7EB10BE62421848AC32D55815DD447395077D54FF2BE65DC182D61B139B5D8E7363C196BE1D71513CD632C79AEC2C1DFE5BA4BC51508AA2C772A6FD2189A43E5548B0B2AABD0AEC287F466B469AE08163559A171605655A76D01D3E2F8B0287F094F4A0AAE52959E26176CBB" + }, + { + "tcId": 8, + "ek": "1BC726FDDA074A5A9FE3327F67D41CC1283C6CD920E70C4285589EE04475F1FC3066F644B465AFBDA8C081431388516AC80421249B4DAB50774F946D1C5496CC6529DBF30589E46C77040502CB590604A46DA1ADEDC39211C457065371B902A408C1097CD5129C3997DDCA8F65A12FF01694581C82437BCDBF92940C087290788873377C70214F6D4860D5351AA908751C2A6A729B633D31C61AC18524008D50B0710175718DCABE202AAD79E64BBDB610CC0A5183F1CACE8006346830AFFABD9F76A81F3C2E04115976BC2D846476FE77B167890BA74356ED75CAF36A5950AA9825B67B7B99BEF100B491C832C5264A981585411A6E6C3A9AA7488B85C5851EF02F626AB4AA8AA3E5588218A08638A3A763306FF33B18B8C11ECA5C34220CA0BC661B932A6E2C508F667C2E57543E6F952EDD76B84936788D7A62AA023A2544CDA1F5B50D7C9258E54875379199462AF3FB3A34B094D2178BBF9A7710A8238A50A6A82273F4AA5C2F2105C7382879A216D719032FD60FF6F98706593ACE8B5A7C415702B8592EA1471A308829109AB29ABCFAE710BD9686A4BAC09B8514827B479DCB8F83187C92648D8644CCBB09769292C8C89960564585293BBDB5218583D61290809DA090A6F1A043BDB38C5ED9516A2484CD7C9C13D6501BC3307C1B211A2313AB723A3717B5E9134ED388A7EC17A3D954479915A31A317A226C5DAF1CC30F97355371A520FB29B3F66400A4A3F960A70E60613BE653F36C8EFCCA111F1CBAD899338F6281AB30193F10216F83CD73505218CB3C18A8052A6047C37A068EA918E3188977199E2B40A43923A17E5CC676714CD6712AD3AB05BB879EFAB63B9D3360AE36ABFC7C530F3069B1BA399F175E0374B5E9DC02D1F374C372CF955072DE5091187870F1EC49871A4D4B39C5CD28B256FBA4C86C4771D4B5D6A5694C283780D1C1BF219615D0274B327C63E14C9A954BCEA058AC59A3F6EAB1BCC09129B5038C5427A677A65015740E09347947A4CD578F6E182F0E66A44ACC73CD7976BE491F3221C37D27CC5B049D3BFC9FB045446CEC1A0A124369042C1B0820763A31FFD7635A183D544F5BEA19BE3F393A9696E1B40D4FE3484EE4C36E3B99", + "dk": "DBB3AF305B28DD0B83A89A23B7540E8A2309884089AAF19FCF07BC9B3730E2552002E087EA980ECFEA8D68AB86AB6BB393D534D06A966A543308D254DD5B9D8C127D518A0AE9C18709082F115BCA47716664E0485825474C72CAEC04B045CA178514AAC3C87F3B072A82A6575926172E77C8B473C6FAF89BCBCB6982391F1FF83728A0C07A685AEBF883373792E8E2C21BFA17E8F80D4E430AC53243A2C4B3B1A0B0D2CC1AC9E450886C11A5173D5D501CCA8696634407DD0C86DA258E6DE27FB98436DFC020E6C590A09A527855174CF2B458E72A19A25FAE76CCD1EA45F502B36AD1300FA31E330323D48C894EB9551751C87CF8A22A10B910965FF405618022389DDB3B5F03162B321588042144E4A88DA565EC4878A167A1DE806F9E2B7ACB413C60666C18B07EADE07A31413E06633673D479FE5A05860277D7791227103B6C638BD9E5BCEAC20F988B4CCDE31FEEE9538CAC5F08B3C1CCD918A461B6A6EC80DF3B8286840253F14C4A5B06896CB67C6A8377E9C6AD251CEA8A49A1960C2692C47B48344FC8791C85B82AABA7C73811422029DF28BF7A474C1582AB83073F8362AD5608601844B06AE69775F9BBEC6AAD5933759F9A280D28AD9959C191A27648F071DCB05505A06FBACC66CD045242E291A5D24AB91578569A0E9D5486AAABAE3414C510211C352C96AE078BCAE6C0A9A09920EA39A947768F83B1FB209E27A5330AA4720A6569D8FA8F1946161D87A7D3B36AE586151B2428B41050B4A90B6932BD3CC00700B302482C046AF87D3E859DABBBA7674829A8A46BF4B31D91D3335806BEF39B82DDA81D41033DFF4C1087E639E7D804A0402BC4CCCF5A58353EE72169429DC2F60EF5A76B0836715244970F9365EBE11748812FEF42A4F119B538D36073158AF1A8883CD1A7A0A589B0C71514399B340296B1B5401FD0B82E87AAE1D77E3FC65FC8C7455CF0AA51B75588820E7564ACD244A9F0D70A01679ED4282D5543A83CF14CA167C37E23214302A6E6D97AAAFB7E401C4E8F27A15CC6A389F650071C88626146ACE48B0C14735F5C040BB64D6D504D9AB5872099C01BC726FDDA074A5A9FE3327F67D41CC1283C6CD920E70C4285589EE04475F1FC3066F644B465AFBDA8C081431388516AC80421249B4DAB50774F946D1C5496CC6529DBF30589E46C77040502CB590604A46DA1ADEDC39211C457065371B902A408C1097CD5129C3997DDCA8F65A12FF01694581C82437BCDBF92940C087290788873377C70214F6D4860D5351AA908751C2A6A729B633D31C61AC18524008D50B0710175718DCABE202AAD79E64BBDB610CC0A5183F1CACE8006346830AFFABD9F76A81F3C2E04115976BC2D846476FE77B167890BA74356ED75CAF36A5950AA9825B67B7B99BEF100B491C832C5264A981585411A6E6C3A9AA7488B85C5851EF02F626AB4AA8AA3E5588218A08638A3A763306FF33B18B8C11ECA5C34220CA0BC661B932A6E2C508F667C2E57543E6F952EDD76B84936788D7A62AA023A2544CDA1F5B50D7C9258E54875379199462AF3FB3A34B094D2178BBF9A7710A8238A50A6A82273F4AA5C2F2105C7382879A216D719032FD60FF6F98706593ACE8B5A7C415702B8592EA1471A308829109AB29ABCFAE710BD9686A4BAC09B8514827B479DCB8F83187C92648D8644CCBB09769292C8C89960564585293BBDB5218583D61290809DA090A6F1A043BDB38C5ED9516A2484CD7C9C13D6501BC3307C1B211A2313AB723A3717B5E9134ED388A7EC17A3D954479915A31A317A226C5DAF1CC30F97355371A520FB29B3F66400A4A3F960A70E60613BE653F36C8EFCCA111F1CBAD899338F6281AB30193F10216F83CD73505218CB3C18A8052A6047C37A068EA918E3188977199E2B40A43923A17E5CC676714CD6712AD3AB05BB879EFAB63B9D3360AE36ABFC7C530F3069B1BA399F175E0374B5E9DC02D1F374C372CF955072DE5091187870F1EC49871A4D4B39C5CD28B256FBA4C86C4771D4B5D6A5694C283780D1C1BF219615D0274B327C63E14C9A954BCEA058AC59A3F6EAB1BCC09129B5038C5427A677A65015740E09347947A4CD578F6E182F0E66A44ACC73CD7976BE491F3221C37D27CC5B049D3BFC9FB045446CEC1A0A124369042C1B0820763A31FFD7635A183D544F5BEA19BE3F393A9696E1B40D4FE3484EE4C36E3B991F0CEF5FE519358F58E1471ACF84D74BCD189ED723689E2DFA0E81C522D36AA6E51238DDD29E55589E014AFBC07494F4CC362BED096BB29E4F6DFC6D1BB7E69C" + }, + { + "tcId": 9, + "ek": "F3D602EB995BA6EA9F6D609EF2F21E285B2C68F3ABAF15154081CF1688B8EA891883557FCE4A104FA99D68C3A4D486CAD9D90C07129CC31704E6230BE84255B4CA3D5F1C6512608090E59C0472A39DC27BC5918303543350D3B5D45B4C94E0C9CF36CB5C8C97111387CDB812F4AA819C5813B8F838F9F9110F586A34229587D72D230438C55909EF71B96AA9C43A6B989116520107C87BA77CDAD3BB13395F825BC9622BC68E743DD452162CF51A514379E80C08004107055939DEDB85B4358876D329510109915A7179875D21B6936A01570350B1425C99C6C0B169468B0431CE05AABE9E5020645070B6B3AABF4A528B494F4BB6CC3FC64A3A83C66D15477F16BEDE4331D0D71F876138148C00443780606138B0FB883C838375A5BB1A6CAA4D2923A27BC48386A17AD956F6704607308A08E09D40B6C05EB2120C9B8F0F76B644B358EEE0AF97257A69B2CF02983128D6490ADC6FB6070F3659B37B83ACD974BFFDC43F1354159A865C444091045423911616217B2646B9337FAC112F905A32315CB1D23DF2D85B1FA74D7C9A38FF167E5AF854E18A1F258B15F7B710D7B0CB05EC818A4549EC5385F1362158A11C54AB2B85573884AB352A063268472FC0769FF27223D41B317440A634B5A6CD05240A3523564655123CC34C35757D7BA047E20B05D70F34B02A7D0C3CE2A84E62E99B7E3749D66B706AE1BB8FDB6AF5DB9888591C62A0066116CAFCE2C3CCEA2A650C09DB410408DA1189DC7B83959CD6FB55D5270A5EBA9894C556518CA3E51A65BB289C11EC00FE69ACBD153319B0C4DE6C44331C8F4DF50540F187A1BA4A698665E3C864022C934B319E672A0410E138C9839440DBB76B656CDB82B82A7744CDFA2397AA555485CFF2646DE089A8A78184F032A3B6FA975F866D76F84FF9F21E8F5B8EBD4B694100343AC033FB8C6B56A92DCB0B42B7B6313428C3A8F85347120D2A66592A3BCB055B2CEE95C1DAC6A4C715665309BD32E7140214B7569B1FC2CA7D9EC3BDAE254B5932AF21BC84085367C5CB2CA3149E2B97C29122830608B768D2B25965CE9E98BDA13BACD157272B676A9DC8C3BCD5A5A219B92166BD385788DA4795B169812F75D295161BEF85", + "dk": "86E52A37E24F08F4A309452CCBE65BAC2B57B1B3830B74B170EB7F73054CAFA9AF45B970FA782F4DC07FF2FBB539B1022C91380D54161DA4BCDB865F09593E8BB386F302AA2EC7041073216F29898C9019DA2231AC95C82EA781B3655519C05A32EB5977273539DB8DA021941FC17A530AA111497F20B8122A501A54C25FCC14B5330167938339A7080BD4719D14DA12E4714D060C7977C58C512A35ECB0807180CFD88109CB90432E696AF0839D080491F61C1A6B3B3BAB346E14AC01638A9B22B94E6644C5B3CC72EB98BFF6F94CAD1C342C2CA3B3138E9AF061B7E5258C120ED01538077013F4355EA4864E393BC4C3155516A3BE84486C7B205CCEA493160C24E760C29956B0F7BB5D7F07C9C6D424BFB0A392460A0612CB8109C29C27A17D03A0B30813BAB8356CB3986DF4C679865E9E1677278ACB8E106E67C535E71B4863C681E2270BEDE28A25133CF8F999BB15689EF3C16AF39E63F90E1FD53E554982703B6D0B01B167B9024B57C923F1BFA357A356E1B0FC9069B3617A8A6C876F599D6BFC92706780C1B824C8D8A98BD9829A56A90FBC45D9A52A122775CE3385252C937E6C107FEB3191791E04CA2EE3117EB351B1E196B6013BC10BF1ABBA0A08A4D1B8A8314977B20BDD755573EC80D17A6E40D3C5ED3435F3B78C03188CD5BBCDC61659A7B785B5F09C217C8C5A8A22CFCACE30609182141D06FA0DAA540D55589B9D74699B66B0B49C2BB69264B288A431BC0B942373DB49A84D2120DB1631BF917125F7C9314383FD0694D84B6417030F9AF7159CE21D8DAB14AF45A52A4963B874694A6B770346B87D935E3F901DFCD8A45A7C6713887BEF2C01188376DDE9148DD0647AA47D957C8A0A312CDEC0C6AE68C12C011B3DFBA2C500266ED82F2DECC2F047CAED17AA230C200A1B1A6DDC0BF2813A39923BD60B02BE9851E1F33DE41BB369F72261BA77DC295F61699536FA11B6551F0445327F655B780088AFBBC578AC1D7984812A151DBA9964AF3C735D49089B4A3E9C285F512A1C8E66CA151700D5397596DA2A49A5627462A6042C0D14CB74BDC49A1DF915160963F3D602EB995BA6EA9F6D609EF2F21E285B2C68F3ABAF15154081CF1688B8EA891883557FCE4A104FA99D68C3A4D486CAD9D90C07129CC31704E6230BE84255B4CA3D5F1C6512608090E59C0472A39DC27BC5918303543350D3B5D45B4C94E0C9CF36CB5C8C97111387CDB812F4AA819C5813B8F838F9F9110F586A34229587D72D230438C55909EF71B96AA9C43A6B989116520107C87BA77CDAD3BB13395F825BC9622BC68E743DD452162CF51A514379E80C08004107055939DEDB85B4358876D329510109915A7179875D21B6936A01570350B1425C99C6C0B169468B0431CE05AABE9E5020645070B6B3AABF4A528B494F4BB6CC3FC64A3A83C66D15477F16BEDE4331D0D71F876138148C00443780606138B0FB883C838375A5BB1A6CAA4D2923A27BC48386A17AD956F6704607308A08E09D40B6C05EB2120C9B8F0F76B644B358EEE0AF97257A69B2CF02983128D6490ADC6FB6070F3659B37B83ACD974BFFDC43F1354159A865C444091045423911616217B2646B9337FAC112F905A32315CB1D23DF2D85B1FA74D7C9A38FF167E5AF854E18A1F258B15F7B710D7B0CB05EC818A4549EC5385F1362158A11C54AB2B85573884AB352A063268472FC0769FF27223D41B317440A634B5A6CD05240A3523564655123CC34C35757D7BA047E20B05D70F34B02A7D0C3CE2A84E62E99B7E3749D66B706AE1BB8FDB6AF5DB9888591C62A0066116CAFCE2C3CCEA2A650C09DB410408DA1189DC7B83959CD6FB55D5270A5EBA9894C556518CA3E51A65BB289C11EC00FE69ACBD153319B0C4DE6C44331C8F4DF50540F187A1BA4A698665E3C864022C934B319E672A0410E138C9839440DBB76B656CDB82B82A7744CDFA2397AA555485CFF2646DE089A8A78184F032A3B6FA975F866D76F84FF9F21E8F5B8EBD4B694100343AC033FB8C6B56A92DCB0B42B7B6313428C3A8F85347120D2A66592A3BCB055B2CEE95C1DAC6A4C715665309BD32E7140214B7569B1FC2CA7D9EC3BDAE254B5932AF21BC84085367C5CB2CA3149E2B97C29122830608B768D2B25965CE9E98BDA13BACD157272B676A9DC8C3BCD5A5A219B92166BD385788DA4795B169812F75D295161BEF85A87EAB1CA6FF44027E7A79D94AA1016FAD25E5983307F33C2BA34FA0A5FD39882821E321A35822357D6F93367C4E014DA47614634008EA60CDB3643A49A13609" + }, + { + "tcId": 10, + "ek": "03C44C86184ECD2096E8A1505ADB0D1359ABF007A418C9CC06F5AB9343BA559B12BF196EAB5A403DC5CE1ED6133DB986E9E25972BCA443358715A922E3C95DAFEB101E35BAB6B4AF09830F4B2C09A4DB297BBCA678621934B753AE34BD1A471078055E2E4517FF75578D23797A784C1AA9BB0E060B21B120236131C347C4CCF78A374701F1B3CFA9389AF572723403604C9908BD605738D8C75376A0A9090D318061AF20CA6AFA38EDB593F0E44719EB2F22D5AC661C973E924B7DE6263ADBCEF9487752AB55143C1DF4F25D3A9B064E2CCC70B827AEB132A51670D9897CD21913462CA8651BBFD58B433944C7CE04A342882078C867372A4023BAC58473A1ACE239644400F9F93B64B473F5631B5B3586595584A5E74237352A47669648102E60828FCBFBC5C90537AD345516D70D6DE2C2E0A160E792022909B1ACD700D2F9578DA5C767E03F22199D207C9715107D10801D0F7283C9F40F0E623084C16A2FB7A6AA9C087868B540B35693A205AAC8B915096D3D66207B0B11938B8581860512965F67014D7C0905C3A40E30F96A64D85E0EC038CF6505274088285765D7977EBC4CB3BF3BC3E3F3328BE0526197892DFABB248B0700C17D53B61F4BE001C1BC2E53899E3ED899D8F06C70D40660735F3E821180600EE13CB189A144C60B29EB36707E04A68BF4891C5066B4519E8195C503385832582B0387136B76C76FAAA73AEBB589BC75241340C028C8B1923AEBA6AC38F58CA3014DA58981D939444A4A7C338CC9C3A0ABC9FA240DE4021B1B1A1EB17667616D29D50BB7694344B72DE87C72F486CC3816C02017652D4B089909CEDAFA767A0B2B1F4243F8000B546B43E77B36D3266732C055A7166A1019201936716B27AE419C266C37CF1800BF659BA7470791ED2C529FE53B753B8B09E3A65D52257B6CA765A26833956DF22969901B94F7B0B612070BAF3B9E9C1061C3E7C13EB0B5918B543090ADE27241F042BF316CC9DA2384214B34CCDA421846AD98A67C19E44DEE2016553830469A21B27C2F8F39710F86A23797118560C90A50CB9D8717553BA85A845F75A921AE3C6E8FA405E2E7AD776059E708942F07A8F34BB8209047CC93903ECD9E9E5B5B7EA1", + "dk": "FBA02294996BE0E0198824792128356E09ABC3139874F8473C514CA67739A66B533E4385B71C5DA9F4435776167F7175896BB71032056B28BA205255724B72CE68931B241E64684172443722884E6DE30CFCD325BA7C71919B4CE16C35E5E92065BA513725A11CC7201F4C4012A6B86CAB9EF82453AB10C9DEE6577AC567C33B9DEE48CB2BB9BC0B71281248B9525362F210B30AE31A3509246CEB226044557432A358F77054885670C881EE5CB305F584B3B2588137BE4FC6C9A48A9336DAA46C78156C357981053B1D05B98649691192A92C54798A2B85EF07994EBB100F1281AFCB9D3CF43EBB44AA42669B0F0A76572AC10A6288B5888ED3883E8006AD2059529737064FBC879396B95B306C5316CE6D28306C2CAFBA6AC3F8D96238C6A35FFC4D1F374EB4535D1133360368A06B43CAEBC5920DB1CB7A8556E63111C7E3900DDCBF4A7B3AA5962EB0EC7039372AC9B3CBC3F9521AB951048BCBAAA27B50C878D8B76D57E27BF6929CA9B751566C722E759E28101B0D7B04D15A29F9E79398D7BCDD137E68D1BFF6C75675B32695C482CD514A39810651DA679B37857A29A9E5F60ED339688E9C1C14B4CA11237D4CC8A7489121F6C4AFDBE6AB4663431EA198CA57AD188181D367875801CACD05CF324224F59B8D57202D1DC58EB18102C4856ECDE56A52541FAF993B7154ACE05B2DDD81C004CBCCBA07A1CC4104AB9A84844A10E58B2D0DEC654C0BC7EF4128B6254447A2B56A8CABFC389DEFCC4D216C46AF94A4BC8204E97ABE27B1272AEA4998198934298DF178BE51787110FA0CD2E1BA7DF26681261C98F38049E944935602290A1F006033412C1B2C364891A02C54E5A41DF7B017F7A703A14B9E9854D303B01B79518CCC7A8DA554B0E14B81565432EC3A365A56F555659C5467033BA4538ABFFA900C4F8B8157456BFFDA4F1FC3C0CC05CBB9DA34A877CB5FAA7A22589E3DE08E340094FE50936F4618D671BE85423591EB67FF05822190BBED2B2EA8638AD6526BD9544DBD1348816B4527969550A95079193F25D68ED25833A1EB4FFA21267F868C55035FFA4986FD01C803C44C86184ECD2096E8A1505ADB0D1359ABF007A418C9CC06F5AB9343BA559B12BF196EAB5A403DC5CE1ED6133DB986E9E25972BCA443358715A922E3C95DAFEB101E35BAB6B4AF09830F4B2C09A4DB297BBCA678621934B753AE34BD1A471078055E2E4517FF75578D23797A784C1AA9BB0E060B21B120236131C347C4CCF78A374701F1B3CFA9389AF572723403604C9908BD605738D8C75376A0A9090D318061AF20CA6AFA38EDB593F0E44719EB2F22D5AC661C973E924B7DE6263ADBCEF9487752AB55143C1DF4F25D3A9B064E2CCC70B827AEB132A51670D9897CD21913462CA8651BBFD58B433944C7CE04A342882078C867372A4023BAC58473A1ACE239644400F9F93B64B473F5631B5B3586595584A5E74237352A47669648102E60828FCBFBC5C90537AD345516D70D6DE2C2E0A160E792022909B1ACD700D2F9578DA5C767E03F22199D207C9715107D10801D0F7283C9F40F0E623084C16A2FB7A6AA9C087868B540B35693A205AAC8B915096D3D66207B0B11938B8581860512965F67014D7C0905C3A40E30F96A64D85E0EC038CF6505274088285765D7977EBC4CB3BF3BC3E3F3328BE0526197892DFABB248B0700C17D53B61F4BE001C1BC2E53899E3ED899D8F06C70D40660735F3E821180600EE13CB189A144C60B29EB36707E04A68BF4891C5066B4519E8195C503385832582B0387136B76C76FAAA73AEBB589BC75241340C028C8B1923AEBA6AC38F58CA3014DA58981D939444A4A7C338CC9C3A0ABC9FA240DE4021B1B1A1EB17667616D29D50BB7694344B72DE87C72F486CC3816C02017652D4B089909CEDAFA767A0B2B1F4243F8000B546B43E77B36D3266732C055A7166A1019201936716B27AE419C266C37CF1800BF659BA7470791ED2C529FE53B753B8B09E3A65D52257B6CA765A26833956DF22969901B94F7B0B612070BAF3B9E9C1061C3E7C13EB0B5918B543090ADE27241F042BF316CC9DA2384214B34CCDA421846AD98A67C19E44DEE2016553830469A21B27C2F8F39710F86A23797118560C90A50CB9D8717553BA85A845F75A921AE3C6E8FA405E2E7AD776059E708942F07A8F34BB8209047CC93903ECD9E9E5B5B7EA11D0CD996B850DD3FC54DA32C6F857FEFB6CD72F4D2524A4D73F9F1C1E8127E82B721ED7B8CC80B553A2D676135C3E90432F5FCB9DB6A920A115292CBAB8E6ED8" + }, + { + "tcId": 11, + "ek": "9E971994D60717B1BA4B505995EB970773888A7C36F9367139E1B1EA0401C1A42C09EB5ABB973A3DDACFE67760AD18C20116225D5B702494BA4D332F95A50DA680AE184038BCC2335719B6DA5871301C563EAC8EA8E644B3FC7F3B4AA8E632CCBA4738981715D0800C1F628973D8610CB98E13C389A0C176AF6617B87657635A1D0898A681A0BE94B8B1644458CA932C0F5767A917BC6AD631FA319F7BE9A97CA73821358EF6C60C5C834CD7B65539268297038653FB85C21300390241DA994819A900B8E57F76BBC607C74943AABD99B181AB2689F21CC1DF80923648C95ACAC7D782A69663CC7ABB3C2C8BC24FCB493E15691A97265796AF727A4DAD928D6AEB317E306DC9EAA9D8603F5F824DCC71717046C76C977FDFB76DC5A7A917E73663FCACDCE321E3B75E871C2090205C2148B24B7C4E9D3AAD8C32C360A3AE0979B8CBEB23C23119855443EEC2297682CCAE3A993568044EC3243BDB6E76B557CFB95FB1112345F14723337C6313545F4BB06A491C20936A39E5867E4A02ECE2637057B585BB21383CAE097A4A11827AFAF2148EA46C3753A7B1E79A745C6AEEB82D624CB6EC669A1B14018C40A8357542CAB915F78412E2470B2A268591511DC6E07F03630803A23028F4CE038490A364ABD68651A7478A1C828717631A02331A6703BEE5BC7C0B8C44BE2690278A6F53C41DAB91AD42995A4CC236EFE424C21BC6F134179BA9AB67517042A69D01378B10573FE0B8AB5921860D2477A673402AD60286A62037D12A16D9A7A1ABC8143C89BE3A61ACA833976A6066F01DDE0A84137BC664F2A4F1A5599459C141B880C9E6544982582EA19D255AA6F47311F91709310338BDD78224A2B735F81EE5B0258844A380B195DEF776F9B583A202B270D8C9A4C77C91878E7DE0576C4A2E544A12FCA90AC28647E7B9649421CF21FAB336AA325349878855AB7C1785FECB5740954635E4874C640E0A8335A3C13BE4E050C2AB2F6C642D2CD0CA14DC3568A53F59F214D7F519C27A6DFD6047F53045AD85C0E87A9A71C866CA36CE5365978453B7687C7748EB6B65ECA04571BC8ED0292D403B8C60FCEBBCEF3B303863256B37FC44FFCD97E240709D6B086148A5BEB4", + "dk": "A8D1BC23860FBFB8CD6D9621DBE45423F29D1F84BDFA1B1503940DDF375499C500F1E811E8602778D83E1D251B4D092A3DF1A7DBD488C8E770AB9BB8ADC1B72E9A1BF1D67991CC01A8E94E07872CF05249ACBACB8CAC0489B031B43AB099CB283A4B274F62CCEB635414452B0D39B2A1816664F3686C039666908CB1903267B9B1D8C52B622AA74D2B7BDB3164139AA5E86BAE2F264EF4E8125FD184B9CA57D2DCC57A93C85D851D56B1CC2A67C51FCBC8F1A0ACEF491403076D986104C76AA4E34AB4D0B668EEE29F313563E15040FD7918BA3A91D986CF51E40C0A919665DB98B6B8ABBB4ACB30F4CB79225B44D94DBD990DC4039841D97A97460AB8453422190D2B424E6F6B6A0232967F7808FE424D4D200801E4BC94C865929886FF45967E404C5574C1878A0AC8DB2D95DA75E885B6EEEA92719539860428CD4409E6334C0CB299AEFC75DF4670FFF2C4034B203AF69194FA5103B5285F8032ED184D3CD2A90677A534B35CDAB4CF51C1928DAA3A463831F9CCA051BB75E2EC2793A64688DBB9A308CE6FECAFDE875C37E89A1F2187E37092E6744897271416D78B2410596E63A9AB33BCB7DA23B88B42BB5761435B8061EC1C98076B4AAC101785C4B466099B4637930586B195449AD7BAE8E15B7C081DC4B2B991DC7001035CB38802F302B54D6B843DEBB1E1963BF09571B4BC4F94688B23DAB7B23B060CA9282CA61B1B703B7BA2C3A308703E5000C1FCA8E8C63A098702CE770E2FDA525168C5440B165D57919CC7AFD6F13DE16B4FF3600941031AC619731FD48FEFE33CCC020643A72E955C5A8DC8CABC0CA30F66C4213182E6DB033063C1417149E9672D4C3B48990C528DC40CEAF28C0EE9852C4A0519810E750C610FFC08CC546C93001C8FC04F152ACE3962B9F2227A1D707E6A0BB607D806C528C2916A200D032B1DE460F43643B3AC284115AAA1852906021D7BD16871461ACD753E24A04B66817F33908B097546EDF33645A3CE8293439DC8663259461585C39508074D10591275664B9C98784A960AC770F6243B635BA694104E69659E1A23A8E3F6026B5B56D8F2599E971994D60717B1BA4B505995EB970773888A7C36F9367139E1B1EA0401C1A42C09EB5ABB973A3DDACFE67760AD18C20116225D5B702494BA4D332F95A50DA680AE184038BCC2335719B6DA5871301C563EAC8EA8E644B3FC7F3B4AA8E632CCBA4738981715D0800C1F628973D8610CB98E13C389A0C176AF6617B87657635A1D0898A681A0BE94B8B1644458CA932C0F5767A917BC6AD631FA319F7BE9A97CA73821358EF6C60C5C834CD7B65539268297038653FB85C21300390241DA994819A900B8E57F76BBC607C74943AABD99B181AB2689F21CC1DF80923648C95ACAC7D782A69663CC7ABB3C2C8BC24FCB493E15691A97265796AF727A4DAD928D6AEB317E306DC9EAA9D8603F5F824DCC71717046C76C977FDFB76DC5A7A917E73663FCACDCE321E3B75E871C2090205C2148B24B7C4E9D3AAD8C32C360A3AE0979B8CBEB23C23119855443EEC2297682CCAE3A993568044EC3243BDB6E76B557CFB95FB1112345F14723337C6313545F4BB06A491C20936A39E5867E4A02ECE2637057B585BB21383CAE097A4A11827AFAF2148EA46C3753A7B1E79A745C6AEEB82D624CB6EC669A1B14018C40A8357542CAB915F78412E2470B2A268591511DC6E07F03630803A23028F4CE038490A364ABD68651A7478A1C828717631A02331A6703BEE5BC7C0B8C44BE2690278A6F53C41DAB91AD42995A4CC236EFE424C21BC6F134179BA9AB67517042A69D01378B10573FE0B8AB5921860D2477A673402AD60286A62037D12A16D9A7A1ABC8143C89BE3A61ACA833976A6066F01DDE0A84137BC664F2A4F1A5599459C141B880C9E6544982582EA19D255AA6F47311F91709310338BDD78224A2B735F81EE5B0258844A380B195DEF776F9B583A202B270D8C9A4C77C91878E7DE0576C4A2E544A12FCA90AC28647E7B9649421CF21FAB336AA325349878855AB7C1785FECB5740954635E4874C640E0A8335A3C13BE4E050C2AB2F6C642D2CD0CA14DC3568A53F59F214D7F519C27A6DFD6047F53045AD85C0E87A9A71C866CA36CE5365978453B7687C7748EB6B65ECA04571BC8ED0292D403B8C60FCEBBCEF3B303863256B37FC44FFCD97E240709D6B086148A5BEB480DAEA210317794AFB87A31A6365A47F8E0DB7AA8793557BBACCAE6749D832EAF8FAE52ED73048D95AF11E229B29EA9055B937C46EC76B687D1C73E6A2F96B6D" + }, + { + "tcId": 12, + "ek": "D01B5B7C2A17E24B1104342B0FD980E362692E03B95FEC002D643D6B017FD4D736694160E5E4736EA12CB93CB0D4131DCE782BDB9637AD3BACE4A42018B0B277906751B1A1EE3700E7E24E1B221CC16C18A2B031C9CC03899A7632BC6F56B39DFA4AB1D8385EA6869D2D24489DD79F27E872E8790AB4D99AC808C2FC33316F0556BEDA5D6ED404EC303F3FE04B110426FDBB02570A3CC66C871E058D75674FE5C212FDC8212F9074EE7B6B8AB1C53F06BF78589C7286004D1B6EA4D29E961163C2C939EB791AEF87347EB37353D975620566AA4B1E0BD58E2A31B893371426463EDA7A5954D98391418D9A05A7CAF07CB1D61A0BE93DE5D60F6CC566E2391C7B6C35B65735EF4291652172FCA95018345DE554352ADA934746429658954CE90D5958A996BA78FA38B8B4C416B0BAA6CE06380CD370E9682900E926091514F64342BD8532E0D6051CD397F52B61DE924C544230500B20795AAE1D7A2815923A34717AE5EC76E51C3F5255A934916A1658407FECA127FA53E1695CFD9CAD606135430000639938D021595A6B63A0E661E7448BDC235D3D020FB0767AD047CB2CA43B91FC7DADB4110420981D99BC48A42663E7A06883012EFC322CA9CAF4E39D02F69A9AF68DD0E9CFCFF695BACC66AEAA4B395414B8D5091F2400E3573A2F846BC4C7B1129C5B3B3B25AD47319D090FF1144C4F739FBF510583C1BEDC010EE1D5A8D4E2B3EF6C0F9A3957F3AA0A014C1B198A746D3A5B66EA0BDBC42CF3DB002F825B1450CDAD40BF4B92BF8CA1A1C14660CC9C90CD9BA3D47245A9287576D4852ADC87ED84B75E746746096B9E5906B5BCAAF4E15D89BB73278415A15C09CC75C4C4C598826C8D3A853EA65C7653A6C1757C682E877CE40AC237C3B6F6477DA3166D86C3707BD56AA3D55CAA094D2F776B28E2513E1941104797F322997B3387E4C7CCD20C3D8ABBCAF1DA32C7804624A3280038CD31F89570B093D866CCA438AA43B7A60C981DF1365331B928C7A8654EA34D02D9B8472B1526CB42A54724AC75868AA53F9B8C0ACEC637FD3BCB9129CC693A0D8E4AA8E9D4B4061156DE220531947EDC8DC577AC46C2736EB361497AE6EE1206837894111BF7C5410A342913", + "dk": "C513921E0715520669F34A0133126541A249F810B46528351BFCB433F652D4628BA2404CFDBB81DCABC0E7C08079D22DCF730586B06F949C4FC72BC6C7C4A98D3C432B1B5F12883EEEB4768DB1BDCF78AE90442243543702F9AB12EAA93010A201D32E06A4ADA3889A69FC2EE97AB27D8A15F89A70D2FB6656DC4ED877872F08C5CC7ABC32886E814C84708AB2DC8869A1030977C18515CC965CA52AAE9076337BCF6F009037493C753BCDA22251C5A20A973738D442800CA9BB7689BA288B178503B38B010D356311628B235A608BF984CECBD2C4277924D8C9C63584BFEDA7CD48CA2C5D28B7FA8544D1F2838243581CE45623D772FFC0C55AD810BB7831BFA79B828B5BBBEC26793C78E4E78BF20A9A2BF61C51BC7101A6BBF5211969144DC0C0AA75A96A0651A260A16192C34108BC0EFD8BB992D3BA705C30FBE06E8AC449A528110496A39A712D82353A5D4CBE2392CCF8F84A4F2235655972C64BB9CA49444E3557A5C54421C15FD4D037A8631A96209AF67417E9F20FF84513B5A8147EA3B358B0B6CBF102213CA3A768B5F2BB7D7428BEBAD1B3FAAA33FAF0CA6326C56784525DC7C49233BA35E40337A755227B9E7979C29B4ABF9F1C7FD42B8899C82E27F6BDA7B968FAB1387124ADDAC2223FF8804C9A3BAC51A93E002F62C7A9E35787B127B260A0088FC14BDFBCBD90805B41158373DCCE8B2CA6D1F15BA641A51AB90ECAB9789499C4C5C10F3B38CC69EA6FD8209C4EF68E6786A823D664EE8ACF24FC2CBAB02FAB2272BF7A18283BABCF688A9B70CF68DAABC99200FF433C4775CA13CB2DEB236F502A85AC9C8B9BE9BE70449A0C5C2D11962CC3E22A7A915286C1637BB4329376444536A6166CB2BCE69DBAC74DD1567735F32965C8183F7CA0F85231B30B125C06808A23616C27A1B4C69CF196A8BA9271F0A436E1660165E093A5F18F6203239CAA7C9A5079A41B751F56B04FD583736AC85466B1DE8A749790254C829E1C8B97EDF2A67B97A3F5E500109582519966740C4DF7B1B0E8F6033E3911A61B4F70FC3FB6EB150337A432F28962600060218594B89CE26BBDD01B5B7C2A17E24B1104342B0FD980E362692E03B95FEC002D643D6B017FD4D736694160E5E4736EA12CB93CB0D4131DCE782BDB9637AD3BACE4A42018B0B277906751B1A1EE3700E7E24E1B221CC16C18A2B031C9CC03899A7632BC6F56B39DFA4AB1D8385EA6869D2D24489DD79F27E872E8790AB4D99AC808C2FC33316F0556BEDA5D6ED404EC303F3FE04B110426FDBB02570A3CC66C871E058D75674FE5C212FDC8212F9074EE7B6B8AB1C53F06BF78589C7286004D1B6EA4D29E961163C2C939EB791AEF87347EB37353D975620566AA4B1E0BD58E2A31B893371426463EDA7A5954D98391418D9A05A7CAF07CB1D61A0BE93DE5D60F6CC566E2391C7B6C35B65735EF4291652172FCA95018345DE554352ADA934746429658954CE90D5958A996BA78FA38B8B4C416B0BAA6CE06380CD370E9682900E926091514F64342BD8532E0D6051CD397F52B61DE924C544230500B20795AAE1D7A2815923A34717AE5EC76E51C3F5255A934916A1658407FECA127FA53E1695CFD9CAD606135430000639938D021595A6B63A0E661E7448BDC235D3D020FB0767AD047CB2CA43B91FC7DADB4110420981D99BC48A42663E7A06883012EFC322CA9CAF4E39D02F69A9AF68DD0E9CFCFF695BACC66AEAA4B395414B8D5091F2400E3573A2F846BC4C7B1129C5B3B3B25AD47319D090FF1144C4F739FBF510583C1BEDC010EE1D5A8D4E2B3EF6C0F9A3957F3AA0A014C1B198A746D3A5B66EA0BDBC42CF3DB002F825B1450CDAD40BF4B92BF8CA1A1C14660CC9C90CD9BA3D47245A9287576D4852ADC87ED84B75E746746096B9E5906B5BCAAF4E15D89BB73278415A15C09CC75C4C4C598826C8D3A853EA65C7653A6C1757C682E877CE40AC237C3B6F6477DA3166D86C3707BD56AA3D55CAA094D2F776B28E2513E1941104797F322997B3387E4C7CCD20C3D8ABBCAF1DA32C7804624A3280038CD31F89570B093D866CCA438AA43B7A60C981DF1365331B928C7A8654EA34D02D9B8472B1526CB42A54724AC75868AA53F9B8C0ACEC637FD3BCB9129CC693A0D8E4AA8E9D4B4061156DE220531947EDC8DC577AC46C2736EB361497AE6EE1206837894111BF7C5410A342913FB23900E64A603EFC8E548D6F5FAE1C3CD1FE9AFFFD108363137A924A437C3DEF57E160EC2A5D4C6ECA3D307510577ED5CACF8F8530C0E16E79F495F824978F9" + }, + { + "tcId": 13, + "ek": "80304FB09B772A01B2301C31A8B44B14CB7FD9DC618F5459123418322A18867B9977E516A852CB0D786DB00C62883B059F43639FF067E922C554AB6F2CE67978E7B535A70013B5BE6F981E09F963139ACC0EDB6D54F171A6875FD29612BD3A8D4EF12C998C162E8386A72B8804CBC6E6C2ACD8977FCC64390D714A5C94A6EB194D85772CC2B35C14A346F8966EDA949D9692B621D28D65354A4F265948D6C016957F84C4AC63E219FD7A65D9753A10826DFD167814D1794D64CF39EC509E05A6BC738EA006BCCF2C0A3627B2B233534AB296BCE53EDBF56AEC1A5606703EA390439F99671BC5BCA75BAB419B1C2148BE4F1AC4A01B31A93854C6B182F7F2939544B90D230DDE088189417AB9F56F26F78AB3E74AE03ABD3EB0975A881D6B46986E00B2A8D13AB161688E7ACA1F21C4CB1ACFABDB9A5BE76843514BD3BB3D3E95CBBC6485CD4C31E7942DDB7A20E9C15711B86C89B7C605B074B25BB648D559F3451E6E5BADB00A8E7BC11F22BC355EFA404D79013CE6A915180EA8245CA1308E8BC8CB8A8909A92543B88CBC7B420FDBE242FE38B207F6336C6181BDC44CAF97C1C4C4C5CD796C04F14A6A618F845C6E002A509745130A720854820DD909AC7EE6A7377CAD6F7C12E25883A6D23CF37196A63395A73199F852339DCBA1BEE78944498190858F7B2C3220B8C934E4AE197282E1446B11063EE75B0F2883BA1EF0C079F832952172FFA0C2C667BAB3736BB854824EF403A0173DFE995895665FE8B446B2CA1ADA5A9316CC22238A604C55374E374048854926270626E9C44D0B15D4082660A54843C678D5D81601F0B3270040FF3934633C1066E424F61060A6CB86B7208A706B079D2637E8C410E6D04D6DE63CD7DA14C9382CC0F7A8EF3CA5951A5780A444C1B96A0AC2004382645922CDCBC749A1DC40FF12269B4468191369D81B29E4335708AB47ECC30A6967BFF0079D60DA9855441CE308A62B706F4C2BA2C19968D69B3F63C1970CA490D5E95797629C7E6A96F6489EB2009BAF26A670E769562B2BC804052176A6CAC7A74E3C916F3871F1CC742EB092608C3E815B30E8288A89A53AEB1A48BF8D44D87F1DD3B6944C0E7F6193092E64B78981689D01", + "dk": "FAF14AA2939C7D2C57D258CD21F696BB001F989216FF015889B46D6678B14E699E8B186717EA014D380C33A91A251567D386CDA8B255549B85FDA8C339477AB4A2BC7CF708254C14D58A0FEC3A069BDC620631BE848A4AE3F217C5318E46D18F7E6917EF9BA436C979DA35178AA4A2D6E64006333990C65CCB4A2CA47767BE522D7323572DF48DE989C4661BC949337B1AAC1A5E32364E7139014882418A53F06942BD9C05B72948B20392B034009091C563E93017496834AB4AACEA3D82E19001585384F89A30A656328559CE91CCBAC0263A969364AB469F55BB3A222D8BB91316F5AAFEF489C6C816628A7B933A20532B0210B6137F4114719B30FBDAAC2E5A4716E3460A52BD40480CEF277CDFE998691CB6F8A71849208FDFC0C33611A28C9BCE4F56C5185372DE4870EB22AB5F7C793FE918EC44386A610A77C1CA585C767F229C4635568FD2902976C32F1C8A4F9960149B0DBE24999FB785EF008C1B607F61A6231731CA1E3887DB499A487A3B1E6A8433043EFB8502FDB5CC80567454A57440761BD8710806D46F82A3883CD4A19C25819848B068498BDD5C07C59A1DCE3B2E0E2A948E3A3EE56C351F4860A0708A17135ECB5C74C56CCA366011205C42B4722A3592585D42B17A31A0C95A91ABE72359EB0C2B7541029B97D1B074B8198B26E024D8D528BFC630C0C25EEF562BF54A977DC2377EA23058A55CA91B3BEF003127468F67285715B8361C0AA2E4F88DBFF6AC5B62425B586A6B754BE483691163233CE2C664F3670D0251DE2C58FFE784A93A97EBBA84FE06C807E56A5991047B53B1D6C801D6DCB52A2091CD40BDEA558B7F0651EF875B64927A0C47ADFD42075C2A2A530B8237996E46DC81CFA143A1486F942738C4A79E0FE32CC796699F4A4FB36C4835B47D24A43597627833DB9DC11A00150881022368BB71A4B05857BCD84ACB391A9A298C211C6232753F7251CC98AACA154276371C7667C4CAF517CB28958F3DDC77B09A22B9897C2F182758240F7F5BB9C69C26C3633C83E709D9CA67A8B8994B0428319978EAB69E57BC67E414B6C8D31445C7832E560180304FB09B772A01B2301C31A8B44B14CB7FD9DC618F5459123418322A18867B9977E516A852CB0D786DB00C62883B059F43639FF067E922C554AB6F2CE67978E7B535A70013B5BE6F981E09F963139ACC0EDB6D54F171A6875FD29612BD3A8D4EF12C998C162E8386A72B8804CBC6E6C2ACD8977FCC64390D714A5C94A6EB194D85772CC2B35C14A346F8966EDA949D9692B621D28D65354A4F265948D6C016957F84C4AC63E219FD7A65D9753A10826DFD167814D1794D64CF39EC509E05A6BC738EA006BCCF2C0A3627B2B233534AB296BCE53EDBF56AEC1A5606703EA390439F99671BC5BCA75BAB419B1C2148BE4F1AC4A01B31A93854C6B182F7F2939544B90D230DDE088189417AB9F56F26F78AB3E74AE03ABD3EB0975A881D6B46986E00B2A8D13AB161688E7ACA1F21C4CB1ACFABDB9A5BE76843514BD3BB3D3E95CBBC6485CD4C31E7942DDB7A20E9C15711B86C89B7C605B074B25BB648D559F3451E6E5BADB00A8E7BC11F22BC355EFA404D79013CE6A915180EA8245CA1308E8BC8CB8A8909A92543B88CBC7B420FDBE242FE38B207F6336C6181BDC44CAF97C1C4C4C5CD796C04F14A6A618F845C6E002A509745130A720854820DD909AC7EE6A7377CAD6F7C12E25883A6D23CF37196A63395A73199F852339DCBA1BEE78944498190858F7B2C3220B8C934E4AE197282E1446B11063EE75B0F2883BA1EF0C079F832952172FFA0C2C667BAB3736BB854824EF403A0173DFE995895665FE8B446B2CA1ADA5A9316CC22238A604C55374E374048854926270626E9C44D0B15D4082660A54843C678D5D81601F0B3270040FF3934633C1066E424F61060A6CB86B7208A706B079D2637E8C410E6D04D6DE63CD7DA14C9382CC0F7A8EF3CA5951A5780A444C1B96A0AC2004382645922CDCBC749A1DC40FF12269B4468191369D81B29E4335708AB47ECC30A6967BFF0079D60DA9855441CE308A62B706F4C2BA2C19968D69B3F63C1970CA490D5E95797629C7E6A96F6489EB2009BAF26A670E769562B2BC804052176A6CAC7A74E3C916F3871F1CC742EB092608C3E815B30E8288A89A53AEB1A48BF8D44D87F1DD3B6944C0E7F6193092E64B78981689D01C911E727B858E0FEBBBDC010918AF4D5DDD581F5E738D8643107FFF88A33EF226E2EE2A80076EBFB8FC0C948D99A2EDE417E1658A8D922F363C38B7A5719706E" + }, + { + "tcId": 14, + "ek": "8D1490B8C82897CB17F6941D4CD388ABB07275CBADCE2C2E0EB6148ADA4EADA43BDEA9250DB7C1B3A49531391FB40709FF7408740A760884C9AF3719CBC523EA36860685CF71338637FB3F98859E03214D64540F26F10ED8F74BF94285A56AA845D29BD639552B2B0BC700A92C7175B3394398241D0121A2C006B4C332574C9978878ABB08037039DC21DDA09F95C51D37BA7448783FFBE64B42DA90BC89186D061CBDF17DC4E1224EA9B506D840C9D91BC2566F59912FE7A8718B0128E293458CF86BBCC477C5811087767D1B9900ABC51283E371160B99284B3FAD01B7086416663A1D8E792194A35AA469B92070A4F5FA2F33BB6457402E2BCB576B6C81E446067DB9B1E751CBE1D1946674CDAF6023666964D2A8B0BF32336CE205A3459655F8698ADB8039389CAE0881261718225733130C6BBA23722B620F8139ABB6955CE0134C7BC595D22B976B4A5FFC378D86D57657E99D2899617D04D06D7CCD3E733F81EA58C56363927633C8E695010C845043484716BC1497AAB3D3662AD16EBF9623F36A4A64395BB9DC44308013747C7674356A1FAAB43FE81FC0416DC3488D7B8681D0D05635E18E601B2B9C08236AB50F264CC6EE6962E7DCBF076C1DFCF737BD8C3D2A08C5009B960EFB346F8517389CBFA0EA59E3A39346564C0F0C21C30A901A2018D080816F8B6812E64D3F474C0E02BB003431B31A4999690B46E7723E93796EF480EF4C68FF3741EEBCCCB17C8F08798C17DC6953382CC0690A996B0D4167868B3232E8381448F28A50421FDEB26BD35A7DFEC326D9930301F96759179DEA3856D9BC292372CECF3370BCEB0BFB1598DBF1970C3058E7604B3D8A581ED81BB0CA03694ABB578332D8A519B727BB20150B0EF1184DB8163EDA2423A829C46443E685355A44C3C04A01F08B6B27B993FB6A5F9C549A985B939F66B151F1A2D2121E6FF0C8180614A7763A9AC5C0FCD10447590A53E98307CB136B0A95C1E147EF8612AC82458F6B91504A5413B7973EE91076CA6B84523ADF5204F7B6C3F13C5916B8A8542B9C19187A962230E62738E4C3AF246C6243918C69D683AC0549D7C89593F370F565E455DCF999304D709255FE0A688FA06C7562086944", + "dk": "BF227F4C5870A6815CC3DB7B82640B02AA8B2C66883FB1990FDA8052AC0C85B0C543B84A1B10687D7B28C56264E61166834A9D03E909DB7CBBBE1A2451C82B379942E7780F511CBCA72A10DD70AC2D3CCB6B9B9ED19C91D9AA132F695B4E26C3AE3B3FFB56CB400B20CB18A40FA252BC072F16BC5D28B2166B117592611120806E28B76DD87736E3E596D40CB38B435A52B9617816811B9A8E14784F53A9186B8BB63EE3CAAFC8201FAC16D40256CF336EACA49847422380F1AA97931BC59709C3E0CEF70C70605659A298BD1A448A29B521614BCD3D19BD474C644C312B68C5529CA88F1833AB51F78DA0273325C3139842989A766CF0B0BE9D5848AF6383F0327EB5370F803307C2A20F35E6269C858E90399BADB4321E7BBFBC32716133749913A3F3E509E772556E3A348C980E905ACF6B1750583396A34C38B02B03E7EC3C58C3401E0366BE19A654D77A1902894F937AA2D60D68CC2735419A6B628313A860687C0822A44F65E55BB12887F247BF44B6A7109B03287789D5EC3B78FA35E815CD2F1C472F57218BCA138809261248B6AAF86471E1C17BA75E9CB80ED985681905A23DE96503E474EE2596488BB325CC58480B3B7FD682D5472EDCF10980352C7F7AA20446556D83702236761AF0B24D82B98E5AACD2B374DE1431C0597AADCB28B8A02110519CE98AB4D40715E96258F4F249D0B8A748247F03247638312033EB2A09068C6397417D804780B307465BC1314406331B28BD5C2E8FCB010865911CB959B093B5195931530C6A06002C5636CA568C87C03897A523941C825BA5EA93B9A3C26C622EE35373DDE14FD09901F93AC1F4406D97C07300F4A3C9E7511F377A55CA4AE629B120B977A8201BEC2736FAEA0D72988B94371B076883EE396B21159B416B175403AF57A3A23DE801DAD53440701B24EA1C166C8A313119EC930AB5B7CDB55915F1C0820B6A763AA0C44D784EA636CA6451668FEB16490AAFDA5640201265FCD849757720482266FE626DFED69A98BA08F2298D72253CE8E3B4F139513A669D7A53072F083F72925CBB2C27274B65BBA39DBE505D59D8798D1490B8C82897CB17F6941D4CD388ABB07275CBADCE2C2E0EB6148ADA4EADA43BDEA9250DB7C1B3A49531391FB40709FF7408740A760884C9AF3719CBC523EA36860685CF71338637FB3F98859E03214D64540F26F10ED8F74BF94285A56AA845D29BD639552B2B0BC700A92C7175B3394398241D0121A2C006B4C332574C9978878ABB08037039DC21DDA09F95C51D37BA7448783FFBE64B42DA90BC89186D061CBDF17DC4E1224EA9B506D840C9D91BC2566F59912FE7A8718B0128E293458CF86BBCC477C5811087767D1B9900ABC51283E371160B99284B3FAD01B7086416663A1D8E792194A35AA469B92070A4F5FA2F33BB6457402E2BCB576B6C81E446067DB9B1E751CBE1D1946674CDAF6023666964D2A8B0BF32336CE205A3459655F8698ADB8039389CAE0881261718225733130C6BBA23722B620F8139ABB6955CE0134C7BC595D22B976B4A5FFC378D86D57657E99D2899617D04D06D7CCD3E733F81EA58C56363927633C8E695010C845043484716BC1497AAB3D3662AD16EBF9623F36A4A64395BB9DC44308013747C7674356A1FAAB43FE81FC0416DC3488D7B8681D0D05635E18E601B2B9C08236AB50F264CC6EE6962E7DCBF076C1DFCF737BD8C3D2A08C5009B960EFB346F8517389CBFA0EA59E3A39346564C0F0C21C30A901A2018D080816F8B6812E64D3F474C0E02BB003431B31A4999690B46E7723E93796EF480EF4C68FF3741EEBCCCB17C8F08798C17DC6953382CC0690A996B0D4167868B3232E8381448F28A50421FDEB26BD35A7DFEC326D9930301F96759179DEA3856D9BC292372CECF3370BCEB0BFB1598DBF1970C3058E7604B3D8A581ED81BB0CA03694ABB578332D8A519B727BB20150B0EF1184DB8163EDA2423A829C46443E685355A44C3C04A01F08B6B27B993FB6A5F9C549A985B939F66B151F1A2D2121E6FF0C8180614A7763A9AC5C0FCD10447590A53E98307CB136B0A95C1E147EF8612AC82458F6B91504A5413B7973EE91076CA6B84523ADF5204F7B6C3F13C5916B8A8542B9C19187A962230E62738E4C3AF246C6243918C69D683AC0549D7C89593F370F565E455DCF999304D709255FE0A688FA06C75620869447939FD13D0A39C799B16F9365EF9C9B6A55EAC23182A83DD59B6627B903BC5440A4B0FF092F607B1D77FBE14C8CCE32C05A892F02702296FEB39527AB1A21EF5" + }, + { + "tcId": 15, + "ek": "37AB55EB197E9F9262BCD24BE2070D0F70AF82B49330E61927D19C67EB23E8A13C03E0B6B36098314A4151891AE7F344F4310CCD20CF9014C678A764E9B50C032489B2057CAF139EAE987EB62C213082C02330BB01778CDB05267CC069D64B727787CC07957EC8A715688A5A170A17D96700EC452DDE11BD764BCEC81C9A88FC8C264B63C7986ACAD73E4135485B11261D981D9A4C59BCE793163A0E9972C116EC5D3015A38236AE05A72C9A28C084227247E110963774FCC5110B084CF4570E4F236E2339583E36AE93C9519DB0C5DB23268996B931F483D5C24ECF9B5A48523B10E673B931A98499C0A580B65D125B3EF3595BE74C14B5C7F8BA469DA03F06481F3237A1DE40A57A2061FFA28D8C885AD2B0755663AC8DB2902F36AB00C33996E2CEECDC5CE956A57DCC611F1A6B7EA9008C800E75F3B8E5C216880460CDD70A6551B77CC54CEFAAA1CC04A58E2CC8AA02C6F381AEB6175FEC083656A69F22B11A38E8AFEC432F324A1176B750EEEBAD1F27773FD4AF7F415DEDBB32E55678D876CBCB87CA8ADA76887406CF6C5B369C87DE208E8E894893300C9D944F713B408E206B37F30AD6FA7B0C4C8F52414B31B4507252BCFE3816EA82AE2365107916BB82C47780513FBA6C2D2908B3EB0A2C0A036BBABB33D91263C3BA90549CA22566A85B73616B8CCD6FC0B58E83C7CAA47504D5AACE29AD3563A219D4AB6FE50DC3A6BC00FAB3DCE40502F6CD1331253623591B8816E125B1981C3EF4D513F0F60A55D0A229C8915B9478FC01A561475F46064F5D67018D22B9A72C520CE257B9174902A417FAB4C92BB1C944B3B6C1BB1FF5B2567DE621F7EC7D83168F2F005498DB19C9F482B06389590A7301D6045B63B20994C7A43618EF86A90919AB839BBF964B10C3805B82C443B89B60449C2323362FE3885B5D9250E66191D22338C6D265E7C7B435E348E2CA5998D3813D887D43045FCB151169C5A274783BFA4CB7A21BB9EB229AC2EBA6EC34B26C65425268A932883F36ECBECF5787011B425C6A2B8E26814E238897115A6546C0B0AB51C1778667202D1C363EEEA224167288DE66B3C00CFA31AA98E55487E06D0F2CE9693785691E8440952D7801FFBDD559", + "dk": "EFFC54F889A3062A41AC6391E16B69A677B8FC0BA4CD97C0E50A69A1A640BFABB732E9B98B34330D656C41591AA2A76D2D0184EC2C06A4D13B8689457156194704CD338266EC1BA3F91CCBBCFBBADD1348A0A60DE17511320C3260716AE24014EB3309DF7025CAF83E1F820BF27259BB82A4B0F4ADB7322B196A8B4FD249B2C78CD392BA1317724176ADAFBB9328534F8D46764C420FDB6279D2651F5236037B273508658E03C80369855959C0B00FF8A99F96B7D2079091C514504A74E65A207882CD742B26BC558EB5D477531C74832535D28C7723927D0F088EB147AF96826D06D25140A8142E4347CBC8AA0D97C7C9DC869239164D2150C4D8B1589B14C8B37B34930F68B331DBF396FF06545CA7794B0BC96A92C986683FA1784094D22FFB78B052A503F3DC2B2229B96A3599697A44762239108CCA09BB330D56C4E82014DC3C02CDC000BC165B4CD70AF9E8889623651969534F270577BB044708B462E84504FC5838376171C9C93011381F49BED971854040CD89675A76D888D4C79BA8BB1AF145B680919ED7D778BFD89D555AC2F457B88477A847D9B401E36D0DD47201B85738AAC0D294734566385A310115BB8B96605C1ED8311AF84EE85167A379086DA2B5112186A0A00041E3607ECBC1CE222C99D250FAB32C3EFA99FC48C88921BE7CAC79DCA8ACBE19BF32F91AF59239F0A1CABE8124294B847F03297F0A71E5069842D8127BB50F6F693AE383C899519BF3AC6A1E744CB6E27DE38236B73B85B34C57B74A9FB3AA5503E28288F2812BC39FE9795C7F292C76A75CC528362E8045AE4A176ABA0AF78627233AB08F5292C9080E994AB955F046EAB27F846009D27B711546B142BCAB6692CF258270D73369C9150CDDE15F67561EDFC8A2FA74251D40C998846F21F933FF68A04CDC92D7A83FDBD0AFEF4A76CBC478841B53E5669E01E00545BAB6A801B75EC9189E64A4A6BC77AEF74C1E0A2984FC11AFF70E0DA24D72684DE4E63386AC1A146751038847392A4083799DE860B474A7644F67CEABFC6E3648B77C43A614827B86961BA1DB43F4DB23253870B6BB388BFC9437AB55EB197E9F9262BCD24BE2070D0F70AF82B49330E61927D19C67EB23E8A13C03E0B6B36098314A4151891AE7F344F4310CCD20CF9014C678A764E9B50C032489B2057CAF139EAE987EB62C213082C02330BB01778CDB05267CC069D64B727787CC07957EC8A715688A5A170A17D96700EC452DDE11BD764BCEC81C9A88FC8C264B63C7986ACAD73E4135485B11261D981D9A4C59BCE793163A0E9972C116EC5D3015A38236AE05A72C9A28C084227247E110963774FCC5110B084CF4570E4F236E2339583E36AE93C9519DB0C5DB23268996B931F483D5C24ECF9B5A48523B10E673B931A98499C0A580B65D125B3EF3595BE74C14B5C7F8BA469DA03F06481F3237A1DE40A57A2061FFA28D8C885AD2B0755663AC8DB2902F36AB00C33996E2CEECDC5CE956A57DCC611F1A6B7EA9008C800E75F3B8E5C216880460CDD70A6551B77CC54CEFAAA1CC04A58E2CC8AA02C6F381AEB6175FEC083656A69F22B11A38E8AFEC432F324A1176B750EEEBAD1F27773FD4AF7F415DEDBB32E55678D876CBCB87CA8ADA76887406CF6C5B369C87DE208E8E894893300C9D944F713B408E206B37F30AD6FA7B0C4C8F52414B31B4507252BCFE3816EA82AE2365107916BB82C47780513FBA6C2D2908B3EB0A2C0A036BBABB33D91263C3BA90549CA22566A85B73616B8CCD6FC0B58E83C7CAA47504D5AACE29AD3563A219D4AB6FE50DC3A6BC00FAB3DCE40502F6CD1331253623591B8816E125B1981C3EF4D513F0F60A55D0A229C8915B9478FC01A561475F46064F5D67018D22B9A72C520CE257B9174902A417FAB4C92BB1C944B3B6C1BB1FF5B2567DE621F7EC7D83168F2F005498DB19C9F482B06389590A7301D6045B63B20994C7A43618EF86A90919AB839BBF964B10C3805B82C443B89B60449C2323362FE3885B5D9250E66191D22338C6D265E7C7B435E348E2CA5998D3813D887D43045FCB151169C5A274783BFA4CB7A21BB9EB229AC2EBA6EC34B26C65425268A932883F36ECBECF5787011B425C6A2B8E26814E238897115A6546C0B0AB51C1778667202D1C363EEEA224167288DE66B3C00CFA31AA98E55487E06D0F2CE9693785691E8440952D7801FFBDD559F12A1B355F6E3805EDF759114A51462EACFDD72F34D4398E60AF6AA576C95E1E9590BF9C14FE4FBB3D2B04AF54FE62C4C911D228AA2DCF37D0C3AE5E57E377E1" + }, + { + "tcId": 16, + "ek": "86C48862839FDB4C834011437ACB0B1B09C3E62450E7717AF1CA0EC1679E1E72A1211768F37AC0BD3A5F0133CD0B171EC340458CBC7F9FF6499473280A86065D28C70869344F9ACB1E16C6937B99E463580DCC6209C563F75002F6D528AF3809E5699D99668658552F390515764097AEAB4FEAC50DE10C3AB9ABA45CB0C9A96AA7B87C65E413B331C87C58C003D0C75FB52A4437B0C28F450DA6344963D7B35C78AC8F9B785830766E0C2BF1566BA1971333836AF07A39328299DAF03B3C8680B8C795A9A26D7413BD7BA609B4C4B36CD80C5DEAA37D063E75617F3BA3154D9A5A9580C2BF40A139B26FBD5498C2B1A474D00A5BE1C5A9E65F3712A8B1BA24AF742A907B6789E64BDE50B9E23AA68E0CC575578ED79204A865353CC912F18655742409C347260DC4920987C6A1EA8E77736D732317FACC9E5890AA5296543CEBB8D6EBA02800A8A9512751AACEFB5208D9FCC3DCD0810AC9A740EA22024334CCDC49DDA134D6F765A54C5B3F3693A86C6F91753CFB9988BCBA45792B7587777FCA0742A2CBA5321422C1775A9826C059A91609FA537E09A1E6B16399704462EC267F98A4F5422DFD220497A6453D87C2318676B70C9A25E76F1B544B5421A003758A291035DBFA769D0229B5487524358C11543890D57764B76CF055356D2A5C13BB5224C97BEAB645A2986E032CC1BC387805F00799A7A3829A2D3EF5CA5D4C772AA27AC98B0EDDD2AE9841B1C890A1477C6DEA666C99B98888EAC1C552BDDF2064D3E57E51DB00DEF0A228636D7AA533501009DDC09B93E62DF6BC2BABA1C24E7BAC1252884B8ACE034940AD7864D4E205F4E54A191299FA5A5A5442148DDA7E0EFBA8893B46F3DA2253993BD39AA18732450B14905612610A5A665CA8691E7428F3D52C8D46CFA1A3572EE085BAB47CBC3AC11360B311BA5DD47C33736C54040A046F4283A96692A60926B90007CC0644D0B512326BC3B3448699DBA82484301FA134787C1FDEF073F2335228E97E0B99292E95455EA9B4F0793C74C154062C7445841034F6B8B1814F7589191B383A5F0BB596D15881305EFF38C3109172E763C4D7F53FACEC0F5DAA202F785ACC00A9391928364FC63913DEF45DA3154C", + "dk": "C2869EA2E66AB24946D4911218ACCE80D7CB378370852297A735A319D537ABA1B51F251AFA3140FEF8647B2145D2F7C29F7C8F14699381BB5BA410A0F9027D9F7B444079A4EA524A4B662BAAE7682F101F0D1A5BEE413CDEB065FB417B219BAB51F3059376A1883202E640A80324A51362C4ADC16B25702D8411634707BA319BC130FB6BF07CC3EF1BB3F635A1E3F55213740DADB1455E329B75C2ADD39645D240133689280AF03FDF785935D0CEEB3BCB491B803A9B1870E88CFBC6433D530EB7121791B24F8A3B7269E51F87B941953766CA2A566E7065AAE3A81A8AC129F74573C683A3A0525D3A26E4463603C9C62A4008336939FDC0B1C41244E1B1A15A86886DEA1AD702628B30616D4A227022CA70A11F6260B6BF62A263593AE59271FF5B2AD9644C4255C362883F9EC9C71F3A8731914FDA502BEB66C448604E08EA9580F42B22F846065331B6A685BA0542AC96AC138710E92126299201A06196EB1CA65B930CD1590051887D38C1467FE03EE6A1770A29C7BB1B2156C4415C0AAF364A4E0EC558F724AD5E3204AF581C2744231AEAABDD4930C7A3BE2882CD96A9C1D452ADBBF573264C38453AAE70FB05F83C72A1283BDF10B3515908D0B66D606CCE953A4792414EC413AA01193F8CF46BE46A20B849BECED19DCE5653F49A9DC1A01B35204795BA4113142C18E2AB166B3A62B2C623382DCAF555532A9BB3CC695EE2241D3C45B986188D65C042401427A3106879602E211343482CAB97C679F1C056E439301095BF0257E54C817ED2B498979D5EDC8E29E113AF37183004194A99567097585FE827AFEB4E4CACAC9FC1CCE3478DE2C0A7154C99FF9264E2A9BF194ABE00511CFAE449A8BC3692B6C53241C48C8A14E5DB6395C353380556504307D0C77E75E37D58768E91DB4734760A88D88F07B60F260B21B49313AB2037C86675068448843847673180495A8661C21190858BB4DC1457F46C782994D3FCB398480493E34C9EB67B385676EF9C7AB5BA291F8172CE71018AB22FDA178712D71380491EBD502F65649DDBB90EBBA33F4553CE7D433773434A6E969BC3224886C48862839FDB4C834011437ACB0B1B09C3E62450E7717AF1CA0EC1679E1E72A1211768F37AC0BD3A5F0133CD0B171EC340458CBC7F9FF6499473280A86065D28C70869344F9ACB1E16C6937B99E463580DCC6209C563F75002F6D528AF3809E5699D99668658552F390515764097AEAB4FEAC50DE10C3AB9ABA45CB0C9A96AA7B87C65E413B331C87C58C003D0C75FB52A4437B0C28F450DA6344963D7B35C78AC8F9B785830766E0C2BF1566BA1971333836AF07A39328299DAF03B3C8680B8C795A9A26D7413BD7BA609B4C4B36CD80C5DEAA37D063E75617F3BA3154D9A5A9580C2BF40A139B26FBD5498C2B1A474D00A5BE1C5A9E65F3712A8B1BA24AF742A907B6789E64BDE50B9E23AA68E0CC575578ED79204A865353CC912F18655742409C347260DC4920987C6A1EA8E77736D732317FACC9E5890AA5296543CEBB8D6EBA02800A8A9512751AACEFB5208D9FCC3DCD0810AC9A740EA22024334CCDC49DDA134D6F765A54C5B3F3693A86C6F91753CFB9988BCBA45792B7587777FCA0742A2CBA5321422C1775A9826C059A91609FA537E09A1E6B16399704462EC267F98A4F5422DFD220497A6453D87C2318676B70C9A25E76F1B544B5421A003758A291035DBFA769D0229B5487524358C11543890D57764B76CF055356D2A5C13BB5224C97BEAB645A2986E032CC1BC387805F00799A7A3829A2D3EF5CA5D4C772AA27AC98B0EDDD2AE9841B1C890A1477C6DEA666C99B98888EAC1C552BDDF2064D3E57E51DB00DEF0A228636D7AA533501009DDC09B93E62DF6BC2BABA1C24E7BAC1252884B8ACE034940AD7864D4E205F4E54A191299FA5A5A5442148DDA7E0EFBA8893B46F3DA2253993BD39AA18732450B14905612610A5A665CA8691E7428F3D52C8D46CFA1A3572EE085BAB47CBC3AC11360B311BA5DD47C33736C54040A046F4283A96692A60926B90007CC0644D0B512326BC3B3448699DBA82484301FA134787C1FDEF073F2335228E97E0B99292E95455EA9B4F0793C74C154062C7445841034F6B8B1814F7589191B383A5F0BB596D15881305EFF38C3109172E763C4D7F53FACEC0F5DAA202F785ACC00A9391928364FC63913DEF45DA3154CD505097DE28856C3DCE9935788C821C8D53E50EB19A4FAA504A161E871F6BD7A81BACB4EE7868C970AD725141342B237CF9D80C06EB7C325E3C9BCFBE082B749" + }, + { + "tcId": 17, + "ek": "9486BDD3C73C83547ADF230CA758461560BFBF1C58FBAA011EE4ABE0642519F0A573C497D7F756DC01C2C97661277966B22618C46A9887C858901C7BDA6312931483BAA10999925413A45B33E88CD2C613202A4C09187BCF1B2E84562EC0921B4808039476258256719E1A4308E48E629328766B6856882E668858E1151FB4C91DA1DCCDB12486416C7FD06C60A2D17406E29788956E78760AF977BFE75621BE10C35A416CF5CCBB62B2C2F43366B13939D71B7E1B36017837352DF79679C530A3BA820896BF935872251AAFC64B44CCF0BA81D270D6D30F4F848CCCF445A218CD51865389922BDC558A72E855154376B6C2705C22A151652511E78CD6690918B633ABFAA134507727071BD75208C41A2A4D8A1D2F5230296166AE427AC6F4C5E5F06AA816AAF5D96AABF12D7D954DFFB11D48E43E05B83D68F3643A9C3686D3CE85ABCEE000A0AF32A59F03CF6A539D8ACA8BA5C4AE40389253D81FCF9449DCEA0DEA58C43E6924BFDBBC64961FC9C443A554A8EB8C6C5CDB8DFF8C213379A66714A89620CB71E59C8215A4D837B058FB6476F603AD087294FCA08EAA895B8435F1E76F367480F24AAC370807EA836571E27E89F0CF41E34FA70B133EBB28C0248411C3334FCCAFBDD5CC40123AA2A37E8FA7BAD800B927D8A7FDB41C2C34B66D9398DF70106B17B5AAB9C0F8A35515E49F48786255FC416D50062ECC6919121512C76A853B0ED4685B7BAA8CE630983F10A13F798A6F36897B365E11EA06A17ACD1228B4B59CA655FBB0B14CCF7ED4B932662F07B75ACA610377B98FF95CB747831A226B339465AA1B80CB23573EDCBBC7725C002F0595DD4A4EF7D5990469184B1366B2630DE3DC1D1216CA31765B3DD9C1BF290A80198D20FBCBC4D0A63B8026123A800C214932E0B936822DFF537EE98369C5A7669EE65F45E6A690196BF264A36943C87CE1B1830C7F317102C6ACCE7ED4806C78A5BE0A5ACC91874983342EEB204B69C8FAD78A1679572197313539087B1664C8C935A4E5628DFB1A10529B72F813E5626B97AA320B71C50E751FB72463B72756DF08C08E17A820C84B0D685E5F6F43358D5455CF9E4C2C6A498BAF338CE19D138AB53B81DE6B794FAA", + "dk": "FE34C4938CB047367095067525C9246260B4C0C5AD3CDC0EF2006E7C721B4594064FCB72B839B9A7E91A463ABF5BE72E5C44BEB33BA12B2917EA53274D282B9A6BC225B468D0E0470F0179D2444AA1B27BF2B5B1E2E4440F0C899AD58AA7D06DF4C314F1382770D4032C943A32153344926499FB5259A3CF7E320BF16C42E1FB161C9097AF279E2AC4B15A7289890B8A5E6A605A9751FC7B413354BF9FCA0788F7921296201567835B4B1305C88940D8BBA4D722673C199CEC9B0B8ABBD1161963319ACD058D70E74E78282337BCAF31272D3733B23BEB791D5B3D12559729CC6066A11F94C2A7DA87871C8B443AC3113EE691C858754391045B149A39591C1C686C5EA0C4D0657FBE19BA5A8224BC976DF611C479F3302D3C12E0E30DF5C76094ECCA17923D1202435DE48867776E919430CA2901BFC12E3B52CDCAE5BF7AF150751B965E96430EBB2C585527BFB18B6FB376E9C99CDA36CDC9722F7E9985B3A59CF1919CD6A1657AB31DE4EA639062153513C322793430D306E833037C7079F40C8EDF3C42C1BA02E6349207E290CC48B88A76744D0118C9B69759DC93D292230B4310F2003DC412B8143636B25921805B7899E039D2590C556BB36763009FD790EAA9C67EAB713C591425B09F589C665194C051531ADA540586BA41A195556009A980675ECF4242E3E896A5510C7D5BBCAA653D8489A703C1C93D2C85A8393BDA8C3D905298E2950BEC4670B95A46E8D3C67885291FD599A70108C49403BAD39EAE163853534A9BEB8E98458BCF36BEB4E4C08F639C9A17262BB8B40EE73CF7EA7331E6BA36121DFAD85D1137966BDB72A4415F7D9ACCE5D364383B0CC8D55E1B674B7E2CB6E6763C4AB0BA5548192CC080D3275A1D938D0DD4036815330AF23906A812937A16124B43290A770C474C2A4C0E7B518B8B1B4025AB3D7BDA5413536E784C98D8E9B201E26B7CB96D32F3A731F8B9B4EB307681C8BDBAA567B1B006A74D2AB37428143C7304469A11187094713BD53A460A6FA8E0C9883C4379C6BF3A276C689897CA89220B809FAEF3900661054379145F3CA57679680BC3979486BDD3C73C83547ADF230CA758461560BFBF1C58FBAA011EE4ABE0642519F0A573C497D7F756DC01C2C97661277966B22618C46A9887C858901C7BDA6312931483BAA10999925413A45B33E88CD2C613202A4C09187BCF1B2E84562EC0921B4808039476258256719E1A4308E48E629328766B6856882E668858E1151FB4C91DA1DCCDB12486416C7FD06C60A2D17406E29788956E78760AF977BFE75621BE10C35A416CF5CCBB62B2C2F43366B13939D71B7E1B36017837352DF79679C530A3BA820896BF935872251AAFC64B44CCF0BA81D270D6D30F4F848CCCF445A218CD51865389922BDC558A72E855154376B6C2705C22A151652511E78CD6690918B633ABFAA134507727071BD75208C41A2A4D8A1D2F5230296166AE427AC6F4C5E5F06AA816AAF5D96AABF12D7D954DFFB11D48E43E05B83D68F3643A9C3686D3CE85ABCEE000A0AF32A59F03CF6A539D8ACA8BA5C4AE40389253D81FCF9449DCEA0DEA58C43E6924BFDBBC64961FC9C443A554A8EB8C6C5CDB8DFF8C213379A66714A89620CB71E59C8215A4D837B058FB6476F603AD087294FCA08EAA895B8435F1E76F367480F24AAC370807EA836571E27E89F0CF41E34FA70B133EBB28C0248411C3334FCCAFBDD5CC40123AA2A37E8FA7BAD800B927D8A7FDB41C2C34B66D9398DF70106B17B5AAB9C0F8A35515E49F48786255FC416D50062ECC6919121512C76A853B0ED4685B7BAA8CE630983F10A13F798A6F36897B365E11EA06A17ACD1228B4B59CA655FBB0B14CCF7ED4B932662F07B75ACA610377B98FF95CB747831A226B339465AA1B80CB23573EDCBBC7725C002F0595DD4A4EF7D5990469184B1366B2630DE3DC1D1216CA31765B3DD9C1BF290A80198D20FBCBC4D0A63B8026123A800C214932E0B936822DFF537EE98369C5A7669EE65F45E6A690196BF264A36943C87CE1B1830C7F317102C6ACCE7ED4806C78A5BE0A5ACC91874983342EEB204B69C8FAD78A1679572197313539087B1664C8C935A4E5628DFB1A10529B72F813E5626B97AA320B71C50E751FB72463B72756DF08C08E17A820C84B0D685E5F6F43358D5455CF9E4C2C6A498BAF338CE19D138AB53B81DE6B794FAAC8E000B15133775B7E3CAC2C7C818F6E0FD7C96AA43716C9219658B7AABF0F3FA66B2D32FCBB40F2DD4EFCD9E1BBE814CBEAE94864502281712D029075A4FA50" + }, + { + "tcId": 18, + "ek": "471725DFE87965ACAC94883D826161C833818877A0EC1309BCC5A09EAA59775C5915435D6F19981C22A1C72715EF19487BD6B169622461646BB755454094A205C0359F6A1EBA92C007F518717943389A886C5B57205B31D6846EE2D204886C90273C981783246656B6F9AC10E198995AA6509CCC1DBC525C76267D1EAC1923C4A595A4C80AA32AEDD59919135C943B77F1F84374D04E2FC8229B22BBAD722F41BC2BA79582F55296BB60AD45E10FC8B9AC1F4C8F36F319849A2D70D97AF133CCE3BAA6D57162B5A97BA4C3C9CF7A6B7C61BE2E2B554E7BC3D84B6459F6886223AC6F89794DE4265B0B6ECE255AC0A62454C20034A03F5507BA8BB0879A13A35499177AA76958F47B8B1B211D62AF75E88804F5CB509B8D0DC861DB763187B72FFEB642BA32C602BA05B3E2C7FC483E988B3CD32898F252462163483FC29144D1448803118D6B0FE790AEA9F125FB71133A5C75BD10C3F3B606F9F375CC781A52F18B64317E635558FD91C3D1847C564A46689B119BE736BF2903C4CB0478350A6519226622203230857EE24A34C5B45BB1BBCE733804672DB0C03C6CEC3636F8C32C718D001D96952357CA9A6024639CEC021D5553392844C2D4788668E7ADC430A24C949F88C37FF51A0DB3B5B658A4BCB4C3A828B81DE46049C3D208FAF208807757E6BC9C54B97804C129CE29175F7393129C4BB6AA0D23630DF5D98B0540A9C2C7C3E37A28F326143A631BA49B7461FC12026896FB2A0AFB75C750B26D99F224136B0D18F19BDCC31B2239C7BBFB0429B58233D325F679312D98C751609295C697DF171444F79034931CCF449F3D9C3C4450B398700097C97DA7A5A1EA2B52B450B5AAA871CF104BF7F7160742427D4420DFC7540FEC97FD3A2CA0949A0F3A7DBE1B86698592F2EC7B2845BAD8B15A91583A5868C67B19855B6381B37668ED023537D115F0ABBE2BB39311496122EB8AE3C69C483B9DAC5993E3E53DBA928AF9C43ADC1149FA4B41A05132BE3B58804CBC545C03AC266FBB819273B0C1AD7483C491CDCC2987EBD788C7BB135758B7472044DF2C1AC2816F752B32B131BC19FD90E7B0285DDCC68B5F07BC0575F8EA2B9693D013128AF4E2FDA318BD8A94", + "dk": "5F9CB69F20CAA64416BAF84EBA95BAFBB519631BA3656C9C407609DD98782195BE56B83B6E4CA8CBB7BEF2696CC8D07C4101BD75F45C0190CE9A316B49F48315F97DEF1251A9463F8B293670C98B4E43CAADF10302B07A96A534983CC251DB1FB3333064197B1FF4B5BE62A9C874C393B11336306E4EA70F72F934EC366F9F1473F86C1645534FDB1647598C16E3A91CDAFB9ECC929322C9C19986BA118A3A58673EDDC08087F11E0A95A8A2510CB1932702857CE88B1161A06258C04ACD33C7BB25BC7C8280ACDB100BBB4032D335FF8BB5117B704C06042E7C31A675B23A95BA676B6929EA47F703BE77EB6BD0968480340586E461E6D7A9ADF8B53BF94B31F222DEEC339F2757A5B2A4EB3860C5388AA34858D4515156DB3E38D3ACA70BA90B9379B3A2AAFBF4ADBBFC296A87A73ECB830D7A3EC6A83AC0E9945616BD661419FD9281A10B1042A0ABB0053341FCB7DE4395D19B1B003CAB20D38CD59667E128602FF2C2F8A6B38C54ACF9E635A4C7A975F645B7E19333E341A2B35B9569925BB987CDF7C0948205E34C643D303E03E6C9D4F81B77B406545383AF7B1209C9C3A9B2C8F9D7BFE707A45388B01B7177BEA575A1F3757D5BC74A07908888541B63A153E8CDF3D68FB0F66303C35599357CDE86B13CE316669CA5808B0BF1D6273F7555D9B3B68EF7582FAA563E862AC9F277B3B4A44F0ABC669976908B63541073A25A8D03175CE5531F2A724E150626DAD47F8F502F9498AF9C129E0393BDF1938B41AC78CA0456E0E9B4022AABCFF3709B45568F2B970446AACECA2C74C748501C31B267A7B7F23193A7CD6BB5AE393AB960362097A845C41A255FD94C3A18239B41994307808724C27C896CA09897F850A38CF915453619B0DA2BFBC23532E08ACC783F5711323D1C93653B257221A64BE31DB0B5CC274953C9D31BC39A2DA47C5A35D831807A9856B279646915DC869106159C5E7A45FD6479EDA408E3C9A3FF1B06E075292EF0012F99B03DF5B13C77BC4748C77A8A4D53B71CB8A3C862018058FB3B19DA292D837E39632B8000ABD5AC134C1370867C4B747B67DBE4C7471725DFE87965ACAC94883D826161C833818877A0EC1309BCC5A09EAA59775C5915435D6F19981C22A1C72715EF19487BD6B169622461646BB755454094A205C0359F6A1EBA92C007F518717943389A886C5B57205B31D6846EE2D204886C90273C981783246656B6F9AC10E198995AA6509CCC1DBC525C76267D1EAC1923C4A595A4C80AA32AEDD59919135C943B77F1F84374D04E2FC8229B22BBAD722F41BC2BA79582F55296BB60AD45E10FC8B9AC1F4C8F36F319849A2D70D97AF133CCE3BAA6D57162B5A97BA4C3C9CF7A6B7C61BE2E2B554E7BC3D84B6459F6886223AC6F89794DE4265B0B6ECE255AC0A62454C20034A03F5507BA8BB0879A13A35499177AA76958F47B8B1B211D62AF75E88804F5CB509B8D0DC861DB763187B72FFEB642BA32C602BA05B3E2C7FC483E988B3CD32898F252462163483FC29144D1448803118D6B0FE790AEA9F125FB71133A5C75BD10C3F3B606F9F375CC781A52F18B64317E635558FD91C3D1847C564A46689B119BE736BF2903C4CB0478350A6519226622203230857EE24A34C5B45BB1BBCE733804672DB0C03C6CEC3636F8C32C718D001D96952357CA9A6024639CEC021D5553392844C2D4788668E7ADC430A24C949F88C37FF51A0DB3B5B658A4BCB4C3A828B81DE46049C3D208FAF208807757E6BC9C54B97804C129CE29175F7393129C4BB6AA0D23630DF5D98B0540A9C2C7C3E37A28F326143A631BA49B7461FC12026896FB2A0AFB75C750B26D99F224136B0D18F19BDCC31B2239C7BBFB0429B58233D325F679312D98C751609295C697DF171444F79034931CCF449F3D9C3C4450B398700097C97DA7A5A1EA2B52B450B5AAA871CF104BF7F7160742427D4420DFC7540FEC97FD3A2CA0949A0F3A7DBE1B86698592F2EC7B2845BAD8B15A91583A5868C67B19855B6381B37668ED023537D115F0ABBE2BB39311496122EB8AE3C69C483B9DAC5993E3E53DBA928AF9C43ADC1149FA4B41A05132BE3B58804CBC545C03AC266FBB819273B0C1AD7483C491CDCC2987EBD788C7BB135758B7472044DF2C1AC2816F752B32B131BC19FD90E7B0285DDCC68B5F07BC0575F8EA2B9693D013128AF4E2FDA318BD8A94F6F951611F7D255A80B450EBB29C331E2220179A291253FFB417816DFDB661D32122F44C9D990E2E8A94C2EF0D709FC20766FD462CCDD1A094BA700642030B87" + }, + { + "tcId": 19, + "ek": "47C07C39D27CB5498CD575A38B998A9F0C5F2DE886DA48A0078BAE39717D675ACCFC1C176AA77521CC208E2A0E85716D88B78876925F3ED381731BAF29B642B17283BD950B634289E3BAA509DB5FF243B905F23C62A76A31205170F7180FE47AA068A81B697213045C7BFAAF06C83D8797A98A25B177A01C332422DDA2918999155D528806FB803001A7AE042A6649BB2D154BE93C887CAC510F1728FDF18706139B6677B3511A84404A925D267C39104AFA0B0C3067348F4266CF1267F92A91C2C05D0A5B40E6C963F27015C8964B30A04B277B7E56E648B5B551B6F16497035B981292457ABBF639BC90D6B8B5B562C4F5C381C4B2F2B755F7101B2F7704192CC38F68C0A5246D5D66B40F317CCF2A2AE6157A592B9E657A1C95127CCB957A3CC7140B384672B395329483489873E1B467CBFAB0D59959CB6A69C3A6B9597274CF35267A6B6507DA8E71C70E7A20311175774F044672D84FD5C156892838B7F508D0763734DABB8A4C695AB3CAA4047D3CD30E619B59EDAA27FFF15B7987B21BE00248228B905999262844A0B9AAFF8C3027ACB4C8873C8C1968B146A36721706CC3179486206DC6CDCE3B6602177EAD3C2EC71C6028BC268464B303902F48BA5E9542600B295B81738A22A9322B134873A4A38E91CA59DACFA5F17E80B768CA04AB1C73A01D2098FC117083306379887A43AC6A2CE06A761C2A3DA6CBB445A4EA0CAEB746A38BEA311C2619C97CB5FED65FAA71C4A8B465EF536775F398B5A249ACB736514428B8F1B146875D50B755658B951F3651C60421A59221D6CC41AA4A5EA2378BAB3B6B138398B52C315C4745F5127C61E05C4C93CB2FB8490BD1144585789D5B1DC2E581A0D13F0EBBA11AC8BAC3993858801BD5FC05CEB1BC20FA8AFD56859C089EA6C946C324243537AD61E63BF0B01420E53CE4A19550C59FC4688D2F8132DB79BEF9E98F148C964F423C5CF29DE8B3C65D75045BC49FB0B97D0BB45BB4FCC87DA90E3909571078A9DE1927D4398130B733026174F46931976ABBAED898AEC7AD83E1A00CE81BFD9B92B4637CA0B7B79F7062B75A47C6D6809BC12E12E9A2FCDA5B0F2E85FA4090168730630418C57CE84E29B91185AD9559", + "dk": "EB1126FF70C254FA1F824C7489F939D5C61AF18470A5278E18910013B19649F09C6904AB9841202760AE62D85D542547F055A60A68573BDB298DF7470B0518956A459BE5635B38BF86B43821907E45A4C204288DAD43B0A018C7BE995EA2A64561524C4F3C3CF47C28529B1810C331ACA40ECFE53DE8D301F9505A0ED5C0369BCE00759B9E01855D55A9B226C96CB69B77B94827BA8949237598D6C71B7412D791648E231B79562D8929A6FF6802CAE44913A2B82DD0C0FA35987A9A5423BC75CE89335C2A9BA8907E44D62DFBA14BC4FBC8F9906F139C755450146C0A253C286A41E71461C06BB2C96674568257BA355D0452F14082012920D43586FA0B4D8397409913A1F370BEDCE6B7C627284BB5BF5483A8AF0CBE88DB195F5A3D8C7150BE376550E36D5930020C008118AB66DEBC0E09D5A7B7D6254D1B3A865050C4A9A07B16546A7488CAA586C8A280C191A9435A1A6DF5C58A600103B218FF94C8347541CD8873943A98902CCEAB2C4BF1F6CE08CB4CAB4B1162F9AD08551246459B08E3AC4131B708900CF3BB38D6C68A48C76535FA13C24222A3870D50D50A63C8208F758B6363CCCC6BB3F0D9C5E0BA52288597FC0C23CD699D284B2714570EAB5C7DE63715306458EFC2815637BFFCF91C9162411548B96ACC545391BFF12120C268434D27C257D3431549C2E304AF031A384CC11AA2FBBDEAA8422E8B63FCB377E8175799DCA201119536A027F3DA21850AB5B6A808913B930828AEFEB7BCA06BC13C45A9F3E1CA67D27B27500F36CB9E2B7CA7AFB3ADE40CC413B340DFE60B6195775BC57F6D011A0E808323257F2B192E28A4B44DC105A7F52691080DE42111807492439661FDE26B1DACC259773B7FD34264E3071F69A586D01829F402BD20CBCF103D7F770F53659A071119919A5D1C882E9251C8A7936BCD50C43ED1BFA2B82324A281D651081973B68E5BAB17A19A7BC52A8285341304469992B0856AC4A3615DAD4C9333E0760686568CB2B9BD788AE1D68D0D9B68AB944570182236C13377CC2F647C541BBA3ADABC472170988DC5B1AF7859E3CB77370AA3A8929047C07C39D27CB5498CD575A38B998A9F0C5F2DE886DA48A0078BAE39717D675ACCFC1C176AA77521CC208E2A0E85716D88B78876925F3ED381731BAF29B642B17283BD950B634289E3BAA509DB5FF243B905F23C62A76A31205170F7180FE47AA068A81B697213045C7BFAAF06C83D8797A98A25B177A01C332422DDA2918999155D528806FB803001A7AE042A6649BB2D154BE93C887CAC510F1728FDF18706139B6677B3511A84404A925D267C39104AFA0B0C3067348F4266CF1267F92A91C2C05D0A5B40E6C963F27015C8964B30A04B277B7E56E648B5B551B6F16497035B981292457ABBF639BC90D6B8B5B562C4F5C381C4B2F2B755F7101B2F7704192CC38F68C0A5246D5D66B40F317CCF2A2AE6157A592B9E657A1C95127CCB957A3CC7140B384672B395329483489873E1B467CBFAB0D59959CB6A69C3A6B9597274CF35267A6B6507DA8E71C70E7A20311175774F044672D84FD5C156892838B7F508D0763734DABB8A4C695AB3CAA4047D3CD30E619B59EDAA27FFF15B7987B21BE00248228B905999262844A0B9AAFF8C3027ACB4C8873C8C1968B146A36721706CC3179486206DC6CDCE3B6602177EAD3C2EC71C6028BC268464B303902F48BA5E9542600B295B81738A22A9322B134873A4A38E91CA59DACFA5F17E80B768CA04AB1C73A01D2098FC117083306379887A43AC6A2CE06A761C2A3DA6CBB445A4EA0CAEB746A38BEA311C2619C97CB5FED65FAA71C4A8B465EF536775F398B5A249ACB736514428B8F1B146875D50B755658B951F3651C60421A59221D6CC41AA4A5EA2378BAB3B6B138398B52C315C4745F5127C61E05C4C93CB2FB8490BD1144585789D5B1DC2E581A0D13F0EBBA11AC8BAC3993858801BD5FC05CEB1BC20FA8AFD56859C089EA6C946C324243537AD61E63BF0B01420E53CE4A19550C59FC4688D2F8132DB79BEF9E98F148C964F423C5CF29DE8B3C65D75045BC49FB0B97D0BB45BB4FCC87DA90E3909571078A9DE1927D4398130B733026174F46931976ABBAED898AEC7AD83E1A00CE81BFD9B92B4637CA0B7B79F7062B75A47C6D6809BC12E12E9A2FCDA5B0F2E85FA4090168730630418C57CE84E29B91185AD9559CA799BED1E63AC7FE70BC26DD70E664EE3AB11E139D5A72BD34906429694A2A94EE218B91E827CDAF67CABD579C2021EE94E7D0C961DB4CAD3EEE56049C9AEDC" + }, + { + "tcId": 20, + "ek": "73AB24C1465E9176A67E23A87D451ED8CCBEA8917BB9AC7F2F5191678020957355D9C016A15594C3C91CC914825B903CBAA949D3BAAACA536690A98C166744A9D95EB29A4A93E1481260BDAED8127EB1112558A9BFB0690BE1A861DC5ED8614474A437375A4151572740101213E63822550CC9E54FE7C58CC5B44A2E590E718BBA2F100DEA9027EB48A9DE2073ADE58327BA6B36EC158E142E2A34C9CCAA9754D709196194A193C8E1313D3374A8AEC20E9A46C055CA8810E36832959AF35A1012C54A71683405819D578ACB2A782089CC713B05B47762604010BC0F8B18BEB3C578AA88C59BA620F5507181A2C9458DE7A467FA67B21516ABA7C6600AC945650A05B257CF31C98A16886238094EFE6CA4AC33708AB3BE7FA275E1A2B7F7F9A3FB34CF49C765F73970615871BD31B6CAA77B197162D312579D53A290895F78CA4B851CB5ED0C41A8FB124573C5FF89CBCD6A4E1AF45306A76D193550FB0983510ACCB8242A2E8288AC93A314D006E8E85C61A60B4B105146D6A674C054A434C284C949A3F263E7B07343872BD0952A173466FB40826DDC62B0336071A5B98280ABDCD797B98B23320C6DD1365AB98594F9C1234F5619E85202ACF88933B10253C98951B8279D12AB314296E3336802554AEDF9589F5C88597AA62D48B33BC427FAC5921B8065AEA4852B2A0E16925D4BF29E69D50DEC7934DDB592490C7546E0C265AB84E10B31228B9E0A74B5ADAC730870B4C6A95922D073D6C2689B4783D86B9106BB5E6265A1426688BA896EEBA127B819CA8C390E70B4CAE1822ECD586F3DCA32D6EC07287A647650AD53F53AB4E4CB91D13828CB1D02D8BB50523DA16617F8A6CD18BB4C963534EF2C2F4C5AAEE90A6B8663A0164943C5F16962B15020E59105B3079B616FA9B9488B5ACE0213353D857D1D55B1AF780CCA889A2A5A4E60134168DA6D99132947A5AD90721F6366BB8DF7A0EB7552D664CE6D2A4F41E25D1B34B4898545D82B3CB9A8C98C410DA7439719D9CD4BF43DF84992D1E91B37D8B3BCB90FBFC7472028A5E1EB92451A7D5F676CA8B3134FAB376A1058532C6D78006C27B055C093772AE95D38738EE9BC5035B24997F6AFA612339FA2AEB83E", + "dk": "61792FC6F28FBE09B7C86ABFE38A8AEB43A8F1EB4DBAA22FC5D4323E9BB45857AF55D2787DD81F5DB0281708A3EED3AC09F245AA480D7B897DDC02A9DA310A1BC6A03860931F20233F90C5886A4AC9718C4A7068C9B07F58CBAC8DF86B04A3C78A58BC8AEA8C82C289E4D3C8D6E79751C9384A6BCF71C543A04281CF50BCDE637039D001AB53646318078F580C1E361D6FF8CE72C56F2F868BA894552A5C7BE0B45C5765831F8178147C4AE9DC8E70A970919683F5495584D8B759B076C3A8415AD90DA769AA61EB81D2F40BE230B832E44BF622155F00B41A7A2CB30C405B6C09CFE998D7A0A50838B7DAD77BD7B70BFE2731C3DB3DA344267A315A151389BB8873A2D3690B128C8CF8B4F49A8B896772D22570D88C735149CB6E1CAB30AAB78DA9700D650258C39BC75C034E471DF90C812ED7C44A467B33F2BE0A04C2783AB6DFA731C0FC92CEF37AE1D396E6E17C29FBC2552B8D47037A5CB445E570A12761CD6A8CBA2C221FBE2207041CC74F1B136F589EDDC54AB57B058C96B25F87AADC088F4E38B0993C9B0BB83B3E21AB5613A0EE3A34528C69595306EEC70FE29396D8E977E1850BAEE4924E890C178A3C3E84B9BE519C6986654E048546466E23733C87775D2E3A78F9634D46842A6B874260C8743C028AEEE88A8ADB4A724750F7596BE7D98DF319776E96800C1860F556B77AE32C993ACBD6D94D03E3B6703822A885A5740733C1A72130DCA3DD083F98B536F203CB4A99B95AF9A42B191E7651CDE5812C46808B1A226AB73B5863B15BBBA8644A2705CDA5C855E79DEFC93163670B4A77B5D90CB45E22905B55203FBB84E3186487535D5AF30200888AD99731B8144683F9BBBA299FC921B65BAC0B2DE78563EA410088C305A76AEBB20C35428AB70903CE3C67CFF08A620B4F931860BDDB2CD4610D63A581E6089426849C17501206123B57047BE3A6B8C0E0A028735068D6130C0B4213D9AEEC4167E3534738A3C82F2A8E7F421568533392DCC57532873EE7998133CE23406C73EC4F7BD582BCC4C5EB47A1CF3100866A16EEB269D8DC3749981F8C0C5F97E054463CAC73AB24C1465E9176A67E23A87D451ED8CCBEA8917BB9AC7F2F5191678020957355D9C016A15594C3C91CC914825B903CBAA949D3BAAACA536690A98C166744A9D95EB29A4A93E1481260BDAED8127EB1112558A9BFB0690BE1A861DC5ED8614474A437375A4151572740101213E63822550CC9E54FE7C58CC5B44A2E590E718BBA2F100DEA9027EB48A9DE2073ADE58327BA6B36EC158E142E2A34C9CCAA9754D709196194A193C8E1313D3374A8AEC20E9A46C055CA8810E36832959AF35A1012C54A71683405819D578ACB2A782089CC713B05B47762604010BC0F8B18BEB3C578AA88C59BA620F5507181A2C9458DE7A467FA67B21516ABA7C6600AC945650A05B257CF31C98A16886238094EFE6CA4AC33708AB3BE7FA275E1A2B7F7F9A3FB34CF49C765F73970615871BD31B6CAA77B197162D312579D53A290895F78CA4B851CB5ED0C41A8FB124573C5FF89CBCD6A4E1AF45306A76D193550FB0983510ACCB8242A2E8288AC93A314D006E8E85C61A60B4B105146D6A674C054A434C284C949A3F263E7B07343872BD0952A173466FB40826DDC62B0336071A5B98280ABDCD797B98B23320C6DD1365AB98594F9C1234F5619E85202ACF88933B10253C98951B8279D12AB314296E3336802554AEDF9589F5C88597AA62D48B33BC427FAC5921B8065AEA4852B2A0E16925D4BF29E69D50DEC7934DDB592490C7546E0C265AB84E10B31228B9E0A74B5ADAC730870B4C6A95922D073D6C2689B4783D86B9106BB5E6265A1426688BA896EEBA127B819CA8C390E70B4CAE1822ECD586F3DCA32D6EC07287A647650AD53F53AB4E4CB91D13828CB1D02D8BB50523DA16617F8A6CD18BB4C963534EF2C2F4C5AAEE90A6B8663A0164943C5F16962B15020E59105B3079B616FA9B9488B5ACE0213353D857D1D55B1AF780CCA889A2A5A4E60134168DA6D99132947A5AD90721F6366BB8DF7A0EB7552D664CE6D2A4F41E25D1B34B4898545D82B3CB9A8C98C410DA7439719D9CD4BF43DF84992D1E91B37D8B3BCB90FBFC7472028A5E1EB92451A7D5F676CA8B3134FAB376A1058532C6D78006C27B055C093772AE95D38738EE9BC5035B24997F6AFA612339FA2AEB83E879CC451FF294E3810E15726C77A69FBADE1B496105EFADE461A0035EE79C1A6CB045316DAD25AD918C6B1A570D5C3E8DF66AE909C90053A9AA561C115FE7353" + }, + { + "tcId": 21, + "ek": "335ACE00F3706D314AD5D8257658445D4333DC51013FB46C0D1C92646C07507567234768DED857DB583E0292571F584976E0ADD5615F956A3CA9269F5C323D0F90593687C7EBAB6F713CC43D6A726E706BA455BB11910FCF62828DACC53E90257217697B001A2F3A85F27852654AA49971B8272B9BC0CAA72B6251BF272BFD5ABD0D61B1D966B7A0B78322550B7CE731B8CA9E3277B4E391AC715C3273677D544B4A5B803383E22F07F755668265FF335D7F856908022AC92C6A167648FF8456BA9A1FBE970DEE5425D18A0CD9830D32E268D96986BDBBB6BE998A0A6B334A785BDD11673AB1BE8E0860C22905C810572510A5411002615B3DE49416FA0C3564383DEB0B13CF628862023481C3CDDABC408A3941214B618F798DC3C8486042B88F13CB3FDA2F71546AA57696A05B97B443C66EE3B96BD6236A619E63334CF7815E388C393BA16FE11C7BF60A1EB1FB1BBEA9CC2BC145F30A03A96A63E034316FF251C210A2FC5A46ABE3274EDB31A01A6A00D56229418BDB456BD5B16457417F82571987A99BBC448E954435340A10BE8B6E7E786085516E49B9330030348CE16668328C61406C715B66461568ED11127E1BAEA76312B1B440EB17C142187A72283FC48330B7782DD0014E9106A752309137C2491F267F3DF800C5E1705AC875AC866180C9768F81A218D7C7F5445949D876205243EFFC9E0BAA569116A86FF4BDBE858827200E9E7C6A687A4934A942F19403CA968AED96243A4970446A58EBB865DAA9823FC859E5B853EC1A871904A326DCBA4B588772A632D1C7A62E12C82E73C004E22268667E7FE364B047B61BEBA8F62B9ADD96053B17CAE0F20B2B599812C445A0EC4A0144C6C0B9BA519048EBB596543145E948887924B05743A015D8CBBA3317F66C6D3758C5A1D41F0735ADE1A4B01ED88178FB99A90282F78780A40A812E3CB11E394C6C96A810FB58E49A874442539B6392BA5637F2F5A39270BEBD006304F67FE4B1370FF75D3A54CCC907AAA86A0571B058EEC33ECD96161E2C819A60748F346BF644A3FAE027BC892F67185964114694D8B7DBB1BAA625A7C30EC6238044427A419B339C6AA909CCC4B84AAB4DDC8479D1D6815C97779F39", + "dk": "B5E694D5F0708A914EA1CB1767D01038A3800F7AADD5001EAA9C7914D94CA9FC2EBDA3B4F6780C077226CD74283F95C88017B17EB0B0170B9761301A4C2A752234A01B22ABA2DB446682BDD31AB50AFC62A6F456D90203566C3F24971A9F384D9422429291718C33B5F9E015F4A489EAA865611623D1C9B49E9A0C01112481212FB26897EA4AB51A4158CC83C614551E9A738BADA58868628A0A299F0FE353587BC1C1CC9E4628B024B98EB990757258AAF143BF06A3551B9A1F49F1C89CC93BDDA55E9263BAC9C30A35BC8F3EB949F04501FBF383FEB1838E682804866A1102673CA8A8E622B2026A1B1EAB9E5EE616D891BD13B04C1B82AAB54CB8AE332D4BF9494DB4C6CD71A75D8B9F5FE66E91C54FF5049A9293324D8A56B80A324F670539CBBF66822F3D906BDA23B3141B4237521C066C64E521751AFA606E870173D349C8874812973F160A8CAED0B2C961B4B231C60AF9C5AFE84BBA884DA5477AF565ADB2A2381F23AC7B9C83E828194DAB70DDF470A597A98FD930DC3117B69A20536A7D0E146C7A15134965AA612C883C96B17D366E14203C257BB26624A5241921DC1006C8B27826035B41739DF23329E6653EBB6B64DA94187800361B1239A717942189C4CF37678DAA322DA874B5CB8366D79BC8F0B92877ABADBC540AB14CB45803418BA46DB7A68D725AFC9327EA28A141275E74576193E60D4D1823541C9812B31637780C15C849ADB66C45008CC28C910E23C98B726E09D93A39113D8A3810D3A095C07BB82A3AABB88233661939F47B25DA353546D39CD3EB2729650216D1C97FB07337B06755433CB756C776910378A84FE3976A3D4C5567B9C21436BA71412691080BB0185E7200394BD07D296612006BB73BE4A330249CDC93939EB1B475F05BC70432A9C7760726AA3C0BB0A02858F7458760B268A83B9EC0C430574A4682F2382C15B359B3B1E6743762B77302FB6C00A390FD7B967E39A44B0C8ED5CBC33C785A9A0BB6E3141554898424A62D9B2A588EFA9E0742A6818199DBE635DAF5373C1C599852C2C5CA6D47DA3F82630C9292940FC63424E8BB9AF109335ACE00F3706D314AD5D8257658445D4333DC51013FB46C0D1C92646C07507567234768DED857DB583E0292571F584976E0ADD5615F956A3CA9269F5C323D0F90593687C7EBAB6F713CC43D6A726E706BA455BB11910FCF62828DACC53E90257217697B001A2F3A85F27852654AA49971B8272B9BC0CAA72B6251BF272BFD5ABD0D61B1D966B7A0B78322550B7CE731B8CA9E3277B4E391AC715C3273677D544B4A5B803383E22F07F755668265FF335D7F856908022AC92C6A167648FF8456BA9A1FBE970DEE5425D18A0CD9830D32E268D96986BDBBB6BE998A0A6B334A785BDD11673AB1BE8E0860C22905C810572510A5411002615B3DE49416FA0C3564383DEB0B13CF628862023481C3CDDABC408A3941214B618F798DC3C8486042B88F13CB3FDA2F71546AA57696A05B97B443C66EE3B96BD6236A619E63334CF7815E388C393BA16FE11C7BF60A1EB1FB1BBEA9CC2BC145F30A03A96A63E034316FF251C210A2FC5A46ABE3274EDB31A01A6A00D56229418BDB456BD5B16457417F82571987A99BBC448E954435340A10BE8B6E7E786085516E49B9330030348CE16668328C61406C715B66461568ED11127E1BAEA76312B1B440EB17C142187A72283FC48330B7782DD0014E9106A752309137C2491F267F3DF800C5E1705AC875AC866180C9768F81A218D7C7F5445949D876205243EFFC9E0BAA569116A86FF4BDBE858827200E9E7C6A687A4934A942F19403CA968AED96243A4970446A58EBB865DAA9823FC859E5B853EC1A871904A326DCBA4B588772A632D1C7A62E12C82E73C004E22268667E7FE364B047B61BEBA8F62B9ADD96053B17CAE0F20B2B599812C445A0EC4A0144C6C0B9BA519048EBB596543145E948887924B05743A015D8CBBA3317F66C6D3758C5A1D41F0735ADE1A4B01ED88178FB99A90282F78780A40A812E3CB11E394C6C96A810FB58E49A874442539B6392BA5637F2F5A39270BEBD006304F67FE4B1370FF75D3A54CCC907AAA86A0571B058EEC33ECD96161E2C819A60748F346BF644A3FAE027BC892F67185964114694D8B7DBB1BAA625A7C30EC6238044427A419B339C6AA909CCC4B84AAB4DDC8479D1D6815C97779F39CCD81B6097F28926E5E13A3B9D72960F9E167383B863E39C3D89E0131C80BFC31EAF5E197385ACF26FDB72923F304B4080D771F9913936A0105EC664E55DCD2D" + }, + { + "tcId": 22, + "ek": "A999869DBC6B8C992849C787D1519069CB6927540EB87046E8664A2327132374890D466B8A4848DF5C4D5495BD87448E70C36A71D248FBD8242AD78CA78690A156461AE0C446EA24F76B61BC529B9A661F060AC505579BB222AF57D29FFC661D7599739BE729996A0ED70A6A74F2B9FB46530D1125F1F370FD6644CC5A538E8939E0133D437AAED40A763AB3180B571B435873FD174FF4A25E81493B42A689E68885E854AA4A3768A9C8BCDE298E7F08D0C283B95D862029C3939FA935213B17C3603A52858B70A077A0684762BB8951BA9462EA56C7C4009CB041C5B7B4C4959D8D126DE3B50FA1384DB6140085220F2F48ADAE4C4867627E550C1F9A313130472920E708F771281D47308FF55BFC896E6D096149D7C698186695673161B709D638C40D7893E7768CBD120AB2B1A486DA6D99B7CA0210791B327A1202941942BD4BD40F0E4A02DF530D899B7DDA988EBAD8A39CFB2AF3A4C449E203121022CEDAA7CF121F84F287DCF44D836A4CA534B1D91A8F5D8C4DECDC1693B4046652B76EBA01938AC7A8E3667EA519D3A466C116843C182043E9CC71872283059432BC96F68BBDE3B98C045720F6E9905549577C450F6AD427482492598012FB49AEC6F49089819F8B960383A96AB140B7D7773531E76174209F84EC5C97C0B84C26AB7C8C7D7596A84EABA30ACBB874C54F589A5BBAF28C2CEBB708403E59E627B7D50A040A64DA7A75A3A81B6161810143186EEC2819C167AC79A681C298931ABD0F3992A7A83A94A2A48E88A6B8D9A955F68DA60ACCFFB37B7AF00CA377B3486C596139B6E7D39441102ADEA46B0C3C7C57356C425C6EB340B03DDB86650233F4492694D23399A1AA43D19E0E6B259664CC21D7AC0A725DBF7A61601973C7991F10760D6045C178540A4E4BAED030476CAA21BD944BD795B472F3A13CDA9B9B2355F7677672771224D15C17CB4089CC744160A2F7993816191EBBC326CD2ACED8614363EC42A84626F4B47C192079D37CAADC32A2812566F082123080B24443244927B032766C0D145C59C5B6FDD32CF7851E43838FD9E43D50CBA69047722E2B0DAD2C23419A4A54A5EDD49267BA1170CE1D48597D215004D6A30B4E6B390AAC69", + "dk": "BC67819018BB89BCBBB4276A3C760404C5ACBB286D58A80A2CA95FB1F1B6E8931C3F5703E2F30BA2314EB9DA6B041CC97D73988D8B5ACE38392D6194479AB161360D4DA32FD0B59562010CFBDCBBD9777C74C46CA935289C4B4D74C8A2DB392FFD1BC22FF59CEEDC893C263089F67F33964123D23889737EF9738FD1C2A35DF1A4CB3C50E57C960A3C893FB466A8A111F9D52B00E0400C1CAB9903C60F96C21CE1ACAA9B48307A7766D8059F3B9C750099A0233FD199A423D04322815900458936B8B9786C2A5C1C78B2995B11800F3653C6E08425CC0A0E5443084FEB3264726CB7D7CE91D84E90216423FAB226246A21A00F031A48CB7676C8DA6D0C904F8F66A345540A1F3582996B254FBBAD316C027CDC0AA1479E4BC63619C7015393A9040651D392CC6F91C608E8B8C7943B564CC91ED8427C79A8DE07C895E220A9B18EC507CF5EB57EE20765D1F2AA4A21C3D1A55B8CCC2780A8CFFA900F35934DA4496D64F1820D26372B00039A93B661A36D90AC47DE0A2CD1229CB3DC6DCB57A5486BA5A5C6B205C075E6A6AF16AC91E38252B3C1928FC6B56EC3C97FD9B0B4EA957E6941549A08C6275B6385B8BCF26497B99D53F80752ECA908802173887ED1D0152339B3899B3438316FFA75B20F16B589531FB021A3C7A02E24994B55361A680652A07773D7125979306E673313630167958B13E984988FEC8D0604692C0248D01BADC2B9527E53558FE94166B690D7379581A509392643029A10D3E123AF464502E86C24BA28AEF027D2EA75234426DD05B538AC80622642DF6CA68EC21D068B92D573514E336E683BBCDC948D8FD560F9427F2D89CF4E7456DCDCB5D055480AC8436572939E2B151C183BD6E2CB9C53C22DF22900FA928B855D0D1302A87C46C8883410E90CD7D9C32EE706BEFA551D69B20AF949334821E66821E227B5FA006EE9ACCD9A45A3A90474FB70628ED3AD29E24CA9149B22E4800651CF8E806FA94782C8144D0879AACE7519EAB44E690C84324BB95516A669750FFFFC182425A0F5961016A067EB8069DE94A528A24445C63D023A52303516E0D335A6241BA999869DBC6B8C992849C787D1519069CB6927540EB87046E8664A2327132374890D466B8A4848DF5C4D5495BD87448E70C36A71D248FBD8242AD78CA78690A156461AE0C446EA24F76B61BC529B9A661F060AC505579BB222AF57D29FFC661D7599739BE729996A0ED70A6A74F2B9FB46530D1125F1F370FD6644CC5A538E8939E0133D437AAED40A763AB3180B571B435873FD174FF4A25E81493B42A689E68885E854AA4A3768A9C8BCDE298E7F08D0C283B95D862029C3939FA935213B17C3603A52858B70A077A0684762BB8951BA9462EA56C7C4009CB041C5B7B4C4959D8D126DE3B50FA1384DB6140085220F2F48ADAE4C4867627E550C1F9A313130472920E708F771281D47308FF55BFC896E6D096149D7C698186695673161B709D638C40D7893E7768CBD120AB2B1A486DA6D99B7CA0210791B327A1202941942BD4BD40F0E4A02DF530D899B7DDA988EBAD8A39CFB2AF3A4C449E203121022CEDAA7CF121F84F287DCF44D836A4CA534B1D91A8F5D8C4DECDC1693B4046652B76EBA01938AC7A8E3667EA519D3A466C116843C182043E9CC71872283059432BC96F68BBDE3B98C045720F6E9905549577C450F6AD427482492598012FB49AEC6F49089819F8B960383A96AB140B7D7773531E76174209F84EC5C97C0B84C26AB7C8C7D7596A84EABA30ACBB874C54F589A5BBAF28C2CEBB708403E59E627B7D50A040A64DA7A75A3A81B6161810143186EEC2819C167AC79A681C298931ABD0F3992A7A83A94A2A48E88A6B8D9A955F68DA60ACCFFB37B7AF00CA377B3486C596139B6E7D39441102ADEA46B0C3C7C57356C425C6EB340B03DDB86650233F4492694D23399A1AA43D19E0E6B259664CC21D7AC0A725DBF7A61601973C7991F10760D6045C178540A4E4BAED030476CAA21BD944BD795B472F3A13CDA9B9B2355F7677672771224D15C17CB4089CC744160A2F7993816191EBBC326CD2ACED8614363EC42A84626F4B47C192079D37CAADC32A2812566F082123080B24443244927B032766C0D145C59C5B6FDD32CF7851E43838FD9E43D50CBA69047722E2B0DAD2C23419A4A54A5EDD49267BA1170CE1D48597D215004D6A30B4E6B390AAC695A78804F317DD0EF9E1CE1DE11B3D05E345BAE41600D417B626DE57D58A7F3258D351D033F2346D5906E3FED413A306790ECF41D2BC9B02FC4761BA1700DCE71" + }, + { + "tcId": 23, + "ek": "FD8472EE6B912C4B490140295F5094924A9C09974B95840A0582469AE471D0B0CB35440CF8537C0442CC36F95D237527ED273C0B5C04FF9C326A2512707B4CD3E059D9178623486C25A19FB89CAE30032B42386FCCB70F51E2592E1A8A9F485C9A614A70585E5C852842EB365A085BD2F978713165D43552C76C633F130CBA4804CAA15DADA749BF50A19309B1BBB13FF449C4C7257D07F75D95E5163430CC98E0AB6FE420EBB75DCE8A8E41066A5677AD9209AAF47BA3200684D3DA2AF0D41A4227BF4596CA5774434EE682C4E19B6E479A5F2301F35CB3A87C6016895BDDA566D6E210F23B9C2CABCB5870C8589002020759C1AC488C24C2C6AB398CD84207C476E9546F6E6089C5886949804B086B6589A568FB83CC5DA642BBD959E3239CF0FCA3067129D9FA11110BA899F424E5F73C477A181886C028254BD0DBC737A4387F610712937F4C4A3F20E219715416039256CFF90FBB0B4E272801B7781A444153FB4A6894D89AC16B8142E34AED0976843A568CF6B5BEEB07C7817C479756AD55694D289A2A15B8DED634507A563927B1AEB75032F76155B476A9CB9D773778ACAB902DB7B3E6A4CD42A7A30E29266702B9F1B0B0A57296E3895EAD883086E726E5D2ADA9367989D71E57501496751A5EF265CF297970DBAA1EC1A252850BAB4AADF68211D89A00EC501DAC6C146B22898A68130030C9A0D0AECD95434D93994CA0A5A310A2EEC59656B44B6E2450E1FBCA80954A99D069A93BB53F5AA6CB7853DC26BA2F778CCD38878B2AA59BC242ADABB8241C8210F0B702D8CB84DA7B34D88702C89A19074782C5A6FC2521FCD1A3954720F0178BCBA350181AAF75CA11B2D26C81E2738EAB5CC39A1A91E8091FF073AFD99877D60725C10B81491E46918755578F9E5B49B5B68519D9804955803969B06999739ABA7872118B0BB6B0C7F64459A310E28C4DF6D1031D9572C32442ECF327AB6974EAE00AD8D545D27AB46FB45846A5786CF41174E2149D444EC2408FAD55699B925D0CD6C0EC1C89D9E22D0CCC856991670DE9BF5B100FB9F69086DB6FC9F64AFB4234D60A7C26F2251A884E7F3D66D5DE8326F770EDC682F90F05E20A955FCC14F7F246A5E41C5694", + "dk": "644B2C4195C0F966AD4D199980288DEFB019DB0853B2B5A9156B8C4B6750F43B0D14C879B3DA24BAB8B798859D120434855621AFB70DD8127444416CCF882066C47FBD9A856DF63F6A0305D3FB743B368BB70125B720AA791BC944162D6F01347B356D93D009528C473A520F805A78BE93B82E0855CDACA2FA553CDE07A5CEE12986B32FDAF2B1A9C38A61B1716B439A976319D50A1AD72392D7F2B6DA86B59FC377C3F918C0FA7A223634C7277777223054A5C9505A4A5908AA0769342EF64CC034C3177B648C25C3651A1CE0A4C76DCA4CABF15D735C885AE9AC58212883BA49B33941D8B87687B8C9E435005DE4BA35865E2F501BD8C442A6E28B492015C2611266283620B8CFEF59C78379C607854C94568586D7C804B6CAD3564383C19CAEB46AA5231FD84466134931EA2B7100F29C292419138079A8783495C87EB3FA20C4B705360880E35436EF398052303026F9A026CA98FF4054D0924B1AFAB899F0B2BBE5944F432994CA7003A876B2EA1F91AB9892A0475B1A597D3218F9B8C95C655258941EBD666F31D58FEDF275CCA73C58825A0BF93183257640495619853FCDCC5224989A7EAC594CB93FF4222E6F3874217A4F8CA9467001C322F8C1CEF2686E3736EDA538BE600CC2380715122363ACC70AF22CD2AA693E426100230F524295AFF84157DC716A779A59DAC17F6870BB97279A9028440A8C79D7420480759E7B53A8B2BFC4AA04AC052E31F84C537685447B9EC0F48F20340089F9C6CDEA89A1E476F88A8146D614F2CA45FEB98822515E342A3991F78B652A99526072A09BCB72E219876222CEC10015199C87750DAB740DB7320C7478C3DAA6B0B1D84750A9C92F50BBB262C5842A10FFD4A8D3866B1F30A619021D43BAC107B17C198C1460F548EF172A420012F855C2DDD0530333761EB9287A755F0641CC8FEA3B9ECACA4FF214A733013B816F8CE3A514140081151F1E2169E4F400E827835799B2A34BC7D2FA39B6312928E404BD1617E49104854C6016C0A8F3D2668A387AF6CBCE9688BCA518C071CC95F769B94041A95837BCA3907A275C000BD7C4DD7A54FD8472EE6B912C4B490140295F5094924A9C09974B95840A0582469AE471D0B0CB35440CF8537C0442CC36F95D237527ED273C0B5C04FF9C326A2512707B4CD3E059D9178623486C25A19FB89CAE30032B42386FCCB70F51E2592E1A8A9F485C9A614A70585E5C852842EB365A085BD2F978713165D43552C76C633F130CBA4804CAA15DADA749BF50A19309B1BBB13FF449C4C7257D07F75D95E5163430CC98E0AB6FE420EBB75DCE8A8E41066A5677AD9209AAF47BA3200684D3DA2AF0D41A4227BF4596CA5774434EE682C4E19B6E479A5F2301F35CB3A87C6016895BDDA566D6E210F23B9C2CABCB5870C8589002020759C1AC488C24C2C6AB398CD84207C476E9546F6E6089C5886949804B086B6589A568FB83CC5DA642BBD959E3239CF0FCA3067129D9FA11110BA899F424E5F73C477A181886C028254BD0DBC737A4387F610712937F4C4A3F20E219715416039256CFF90FBB0B4E272801B7781A444153FB4A6894D89AC16B8142E34AED0976843A568CF6B5BEEB07C7817C479756AD55694D289A2A15B8DED634507A563927B1AEB75032F76155B476A9CB9D773778ACAB902DB7B3E6A4CD42A7A30E29266702B9F1B0B0A57296E3895EAD883086E726E5D2ADA9367989D71E57501496751A5EF265CF297970DBAA1EC1A252850BAB4AADF68211D89A00EC501DAC6C146B22898A68130030C9A0D0AECD95434D93994CA0A5A310A2EEC59656B44B6E2450E1FBCA80954A99D069A93BB53F5AA6CB7853DC26BA2F778CCD38878B2AA59BC242ADABB8241C8210F0B702D8CB84DA7B34D88702C89A19074782C5A6FC2521FCD1A3954720F0178BCBA350181AAF75CA11B2D26C81E2738EAB5CC39A1A91E8091FF073AFD99877D60725C10B81491E46918755578F9E5B49B5B68519D9804955803969B06999739ABA7872118B0BB6B0C7F64459A310E28C4DF6D1031D9572C32442ECF327AB6974EAE00AD8D545D27AB46FB45846A5786CF41174E2149D444EC2408FAD55699B925D0CD6C0EC1C89D9E22D0CCC856991670DE9BF5B100FB9F69086DB6FC9F64AFB4234D60A7C26F2251A884E7F3D66D5DE8326F770EDC682F90F05E20A955FCC14F7F246A5E41C5694A13799EAC006995865A31D58A86CB2DF99C3AA40A1AAF4289A02D503185C85569B741239734D49B78BC37BB29940A15378D2DCAE4AE7A6BEC82F75CF15040575" + }, + { + "tcId": 24, + "ek": "A557606576772DE1AEF85B8E07E1A0FF965EC5F2C445AA5CDFB73A3D800A4F0A06E7249F8118150EBB8B32568254B21E56B664382A8D4F037C32410998BA6E82C032D07A8E69035DA96790162C692E40B70F07CCB251C768FA9753E473D679364F23454C65587F274230619E85A40F8B0CB2DD106C7EC3B1325104D469226F444C6245BCD8173488299733A2845F67579BF30D85E7384E7520A7F55997D90B8A1871CA179D6BFA341840B6D96100BE176E88577CA4B0BB6F311DFF4C1BB729BAB122B11C5377771953756A185B4454D7A0A84F087E0270A39154AD93005801ECB3DF2B6A4DB3782317783B100F48FC010483277B5039A529CF9D9BCC81BB844301457BF4A532F840DA928802D1A8B9E7AC4D5B75E95A30EC934321A09FE903181FA2650A5B0132872F6125B8555B10707C39E5C688F2E0AAA8C25B2C3B35F2A7C425A5C62C8403AF8888D0AC27D1198D9A020FE93B34E73196A380897753664FC893315C44D18715FF15CF437871FAD717729897FC275B24F25630454441598429768E8DDC0739068DAC818CAF86B83B825561A7028A02ACA8322705D88E422008D48AB9EECB2A92AB1BD9477F54985653D7590E25632030C1691732A98C2FABD1835068533BB1B7CE5913DBC741BC83425BC6410D7B9EE7245C9244BCC5C0999E491C588B3BDFEB62952B5B4D137222155FC848CA52A2BE3AF33ABC7085BF4B4F00441E77828B720925D7F26BFD548787389ACC3761338346FE0BB15CFC1A7128620EFA5EDE815CC9071CFFAA3C99040AF9C5104980118F75421EF0BD4590168D5364F2B5AE97E644055C594F30626A0708B7830EEA17007647568BE2BDF448269061B38E345F0753B5E2E9B78DDC9AF6486B71606CDB0B761F284A50F5CFF4DB1455036ECA1955F1F4BEE2D06C9C357FB8B134623B3464889F40490F100228268C11368A44A9001E0DB30DB7432A44A19910C9B064B550BDCAA95576B1A5AC50630ABA157599C7733574ABBBFBF47726F3765152A485C946EFA09D15F8B7FF1B73631992A6B4CD7599125F5C1C2666C212E97F7ADC26111BBDF501258A7972F3006E25BAEB37C8762BCD85C6F7DA975A6B26AB838B569D5C89BFC9478C31E8", + "dk": "7551A3258A0F42A566C61A7EE0907D93D02D314184BEF09B37E978986C6D339C50B9498BB3C668C324562E63641D963917EB1A58F70A7DC925E5BB0B1FE1BAF362A94DD4840E4AA9EC0390073071B3E9873F73106B206F7F6889D720B732C76E1F777278070E48D62B0CC57AFE055DC526C51A6C8FAEC9058451AC4E2396E238C0D9B0C98B974637AC7DCD701667CB20EFF69F1CE0539D97B2DE646A4249A9C83254536177F4AA886157A8DAD668ABB4C9D8AC74883635828077C0138D70890F745067970854DB623B4ADA34221B726F0B405E12032DE5C72E3633DBF94C1EF694106125F3B98110633013870EAB667CDA253A42DB4384908FD03483D76B28C365AE8E1466633C8080C547307206C77883E44138DF6CA222757B0CB93FF188468CB860AD111C15D1976A661E1B3B111441BCB0D4B552FB1CA9512E7BB40950A11BED32B8F5DCC17B5154F509A6D4EA8FC5F18AB645098442208C367180625855A788CED2ACE3D5AC47F3089ADC790A4C13A13902D42B691D773203E794B47C849A8672D1220A7F749E6D3C39A6004BD489AD82C2CEB39BC29276A85F1658A4A7639C361C23248919141432591776D1C110F7C231DB12AE037A710AC3968528B815A5BC3B01E8C9B8DA226FE827C1A6CBC775D18B049A6E5B851EE6117F9FDC4A0FE67244A50388A61819C561C6D0272E472CAF831866431B36D66794931E96463C9EB6B60267C49293B88F819FBE1BA810C8662CF2455207BA38699ED6C3A3D9D416F07A466FD075577A6E64AB4CA2017512585C3B400C4706966E31518046A4814061B199340853380BDCC5833C802E9553F65587E9330600F780FFB5BAE5C1BADA769D8198AC04B0CFF69B964AD56CD0A863B9F199D8708EEAF41111E838AD4A5BEE5A60F8412F93A829DC1257E3F0800881998766617B026CB0317B851724229845F5208C1A71810837298EECB26CC4343DA0A1465B653DA472908B91C8D486E23191B1CCCE74F6CBC5083E38DC662F25534C2B0743C23792243E594621D2AA5CBD606078379304334F424B3604E6BB30B9A7858AB15374521FE19F37356DA557606576772DE1AEF85B8E07E1A0FF965EC5F2C445AA5CDFB73A3D800A4F0A06E7249F8118150EBB8B32568254B21E56B664382A8D4F037C32410998BA6E82C032D07A8E69035DA96790162C692E40B70F07CCB251C768FA9753E473D679364F23454C65587F274230619E85A40F8B0CB2DD106C7EC3B1325104D469226F444C6245BCD8173488299733A2845F67579BF30D85E7384E7520A7F55997D90B8A1871CA179D6BFA341840B6D96100BE176E88577CA4B0BB6F311DFF4C1BB729BAB122B11C5377771953756A185B4454D7A0A84F087E0270A39154AD93005801ECB3DF2B6A4DB3782317783B100F48FC010483277B5039A529CF9D9BCC81BB844301457BF4A532F840DA928802D1A8B9E7AC4D5B75E95A30EC934321A09FE903181FA2650A5B0132872F6125B8555B10707C39E5C688F2E0AAA8C25B2C3B35F2A7C425A5C62C8403AF8888D0AC27D1198D9A020FE93B34E73196A380897753664FC893315C44D18715FF15CF437871FAD717729897FC275B24F25630454441598429768E8DDC0739068DAC818CAF86B83B825561A7028A02ACA8322705D88E422008D48AB9EECB2A92AB1BD9477F54985653D7590E25632030C1691732A98C2FABD1835068533BB1B7CE5913DBC741BC83425BC6410D7B9EE7245C9244BCC5C0999E491C588B3BDFEB62952B5B4D137222155FC848CA52A2BE3AF33ABC7085BF4B4F00441E77828B720925D7F26BFD548787389ACC3761338346FE0BB15CFC1A7128620EFA5EDE815CC9071CFFAA3C99040AF9C5104980118F75421EF0BD4590168D5364F2B5AE97E644055C594F30626A0708B7830EEA17007647568BE2BDF448269061B38E345F0753B5E2E9B78DDC9AF6486B71606CDB0B761F284A50F5CFF4DB1455036ECA1955F1F4BEE2D06C9C357FB8B134623B3464889F40490F100228268C11368A44A9001E0DB30DB7432A44A19910C9B064B550BDCAA95576B1A5AC50630ABA157599C7733574ABBBFBF47726F3765152A485C946EFA09D15F8B7FF1B73631992A6B4CD7599125F5C1C2666C212E97F7ADC26111BBDF501258A7972F3006E25BAEB37C8762BCD85C6F7DA975A6B26AB838B569D5C89BFC9478C31E8FD5480A7BD5451A64FFA029635414BFC1BCEDCE2F68110BB0FD3A8DEAC589379E00F09AEAEEE1C73DA0A2500368074AE803A8077B74EE764C8C3BA99957CEACE" + }, + { + "tcId": 25, + "ek": "C7253171069CEEE7161AC01D1B949D98AB32442201980751AA85AA6AC66AB7B7B57F54B668BC8AB59429A2032D8463C5942B391BA811D9C6BA003D6544B8B0BCD1A1D47B21CE495B3755106CBB01C424884B73234803C636A5207D17B3078908C31CAE202B9B03473E43328B20E5B27BD8ABFB6191D3324BEB98155A0C3098FB892E7199E53188E893168237A991D5C18968B360A37F261629CB6323493B9B30F82D5D9A13E1917868D98411E785B2C801E3799696D131E4EC82C821CBAEE1C83AF423D97478BAE57858A82C33399FA06252BF7C5E3ED0478CC0B26A4A8EC1D89C07A5A4C61C64A71399578152A62C18FC682CC17142AE246C58456C38276FB1D6C21799183FD990D3368DD16891C8406E559134B3580E69B75D37E0C4DF14772DAC087F170B10130AEF85115C66CD4F60333E757DD0713153ECCB9CAA0EFE9075C143C274EB97C09957F1503C4CB46CB72A25A617A2EE274514034EB60C9922800934E161E6629BA1B5125A1C0AE607842D297A560149C7844425E5CBF1237470B692E0F82F74C895A5C800D819B21662A8606A2BEE7742A7521761DA789EAB4510E6965E70CA7E9067E0E911E623BA4B925F51A3C05A052408F028C97192862982AABC1E2A35981B1560A90836F0A7B3B5125295847A061C7F55AAC61AE88513902A95266F3D988643595F218ABBDF06C91F0797C9F020287A09AFDC4112FCC26E22ABF743812F3BCBA6A01EF2F126ABAC7090D0A91073AF61E6A330881967EC396ADC8DF63B394E3710B46B88FFC3ACDB6A9B6C224AF8B566C7E72403610ED54019C0892A33821E48D136B3201C02FA7D411468DC330CC1E3CA6086268C832A683C0AF484A2C2E1814C9C9E6B27386EE1CFA1E64322098ACC7915100C3F73828102C33C48E3506D6935F99A5C8547788BD0894133C5BC781FE46C5A75433A583A9FF1F69D2FD088BCD6A340520FA9ABC998A230BAA50EDDB624A4E103EF9662F4FC97D82503EC97A98F85205CFBBB7FA0673657652B03579E7B5232BCA7028740EE8A5D86E46E16879F36103F013B30D0C03D9952917D185DE2E4141A3B085189FDD66E8DFB141F2EF60F3CA15025FC47E70D411A92ED8D5B40E4DDB9E32A", + "dk": "13AAC016984F81333E8BFBC81CD58320E50D5302AE6E593A5AE894CA692D75AB485AC092A8C8293F138E3807328D9B432A7C78C6604A0C8A0288FB78ED3333BEE845A48021F88C1E5C5768EB927C6CEC97431A0B8DAC2CD618A1C4C3CE59958C243B54C8D98EA3DB4B26954E34495D2EDB06FB228B4C1C2283526002DB157E4156FF07A3432A3441733F81D15484AC63FDD4485DCABEDAC74D72F8CD374AC75548A17C50A66D6165C872C16C5427CE16AFAE272B8FBA4E581BA69818A9DD75A568C33DA1F6BA0ED64524BA81A24B909C3184A2458F31F836A5C69F783668AB378D8F28278DE68AB3336B2E648D7DD9A6C639980830943FF164C5A06B4AA0042F7ACDA8EB5F2DB4466C6A1572209AD82967622ACB4808360724AB8B3099FFAA536BD1BB9084B0B7BC7540110E148A269DE06E49B423D2FB5319706AAC323DA10B2DC835765B557F6C759A1F95AB1EF3A2D6C0518ADB426C1513F30284C2DA8AE0296250A0A53F8B38051388EA562F36E6260EC42A27239308BC9CCBB5C0F4338923F66CACC40E8DBCB2A9F27B4AC9642BE65C32DC3435407912C39A9EB88C488877353C3DEB235A15CC52F7A39B54B00140CB70EEF320523890FCB863A82B254E402F4367AC764ABAA94113C57A61394C988F376F8929BE2FE18C0C3AABCC047D99B3C39CC273056329D5E44F5DB63E109648BC9969DBD95A4C692CDA40C379F710ABB38D900625AF686B02FC48CFA430BB6B0A1EC2414A23C69D976F3BE207567CA33248938D699E2CB748B42B1C4863C9130774C8DB5FAA23120B09C94492593A4306573B4F9CB0C3B2E45814D46325BB026A33382DF54E399620EAA3207F017C9C9C1D84026FABBC0E5975BD97C2113F81380B68C294F5ABBD6632BED14AE3E92D36D6AB7C5576EE9C04C86C3996A7CD1EE642D37788F6070832DC666F52794D07AE002352DD4A8BC5BA6F884A41A917268658C6A484778DA721C83016FB864978759248D20FA543953D9911E3EC3750DA89E6181955017653F65CE6A9B03AC7B5CFF076BBC5722940633ECA6B6DDB05F2E00B7008402916BFBD76B96EE665C7253171069CEEE7161AC01D1B949D98AB32442201980751AA85AA6AC66AB7B7B57F54B668BC8AB59429A2032D8463C5942B391BA811D9C6BA003D6544B8B0BCD1A1D47B21CE495B3755106CBB01C424884B73234803C636A5207D17B3078908C31CAE202B9B03473E43328B20E5B27BD8ABFB6191D3324BEB98155A0C3098FB892E7199E53188E893168237A991D5C18968B360A37F261629CB6323493B9B30F82D5D9A13E1917868D98411E785B2C801E3799696D131E4EC82C821CBAEE1C83AF423D97478BAE57858A82C33399FA06252BF7C5E3ED0478CC0B26A4A8EC1D89C07A5A4C61C64A71399578152A62C18FC682CC17142AE246C58456C38276FB1D6C21799183FD990D3368DD16891C8406E559134B3580E69B75D37E0C4DF14772DAC087F170B10130AEF85115C66CD4F60333E757DD0713153ECCB9CAA0EFE9075C143C274EB97C09957F1503C4CB46CB72A25A617A2EE274514034EB60C9922800934E161E6629BA1B5125A1C0AE607842D297A560149C7844425E5CBF1237470B692E0F82F74C895A5C800D819B21662A8606A2BEE7742A7521761DA789EAB4510E6965E70CA7E9067E0E911E623BA4B925F51A3C05A052408F028C97192862982AABC1E2A35981B1560A90836F0A7B3B5125295847A061C7F55AAC61AE88513902A95266F3D988643595F218ABBDF06C91F0797C9F020287A09AFDC4112FCC26E22ABF743812F3BCBA6A01EF2F126ABAC7090D0A91073AF61E6A330881967EC396ADC8DF63B394E3710B46B88FFC3ACDB6A9B6C224AF8B566C7E72403610ED54019C0892A33821E48D136B3201C02FA7D411468DC330CC1E3CA6086268C832A683C0AF484A2C2E1814C9C9E6B27386EE1CFA1E64322098ACC7915100C3F73828102C33C48E3506D6935F99A5C8547788BD0894133C5BC781FE46C5A75433A583A9FF1F69D2FD088BCD6A340520FA9ABC998A230BAA50EDDB624A4E103EF9662F4FC97D82503EC97A98F85205CFBBB7FA0673657652B03579E7B5232BCA7028740EE8A5D86E46E16879F36103F013B30D0C03D9952917D185DE2E4141A3B085189FDD66E8DFB141F2EF60F3CA15025FC47E70D411A92ED8D5B40E4DDB9E32A19C14092224DA54FDC42EBCE0169F52D6422BB26FAE949509CEA7C97507B7A95CEE31E2DFF2D1358F99B5E3BECF494D279D02D7CE546DD9E84E9947B36107C58" + } + ] + }, + { + "tgId": 2, + "tests": [ + { + "tcId": 26, + "ek": "5219C4CC17C35A828F3E21B2AB7496805C99EE041FCA0158A3314F07D053F364C887A6825958A625965D4885C2CB355E83A3C1BBB15446F891D2D24F145632CF06A5EE1A278CD3064A79AD53193853E4CEA654448A4297CEA3C9E87561629680F588953B858074292ED31C20DDD983E805D07BB9CFADD823C7900B604286C0184738CA04E0DA8289540E329605EFAA5960AAC0FD0760006C1F1993426CC7BEA22BCBB3CC02E099B828E82F94045DFACB1D9FB315582B20D1B41476FC43AC4680647259FE9B51371223446C82E0BBAEA132913E2B96EA11950C450F25854EE4FA4921193C8F1C66D61B8265C7072B046F0C532141D51D9919C80733C1BD3C5A6D77CCB3A1938C95C1E4E866D1D65C78297B3B32CA3C4143E6A215C609A36A1B13BAA17981D42B7FF4C715AC806DC491560032A5A2BB30E476A266C6E4A4A065D9698DB08132608136082689B1B648B49063C98324706A43876507FC690893900F8166E1D52ADCC44848D864B8BA0933B32DAA63435F11065915C5D5D879EDCC136FA8515B0260B9536C316120B4904921805521C0232DA126E2A9C5323976ABC73B5AB892E59B01A194B6446C1B73217FBBA855AC887AFA58A8F15A768EF968D775267E050150C7A8237C1024F9421C210D97907B2A144736E3B58E01C48947B1C62655E380256491CEBE400F52493D9033A29D6C9AE80B33E8C38584B30A31A37B15E85F5E82B73157408A5399A957190CBA905F1713C9ACA53AA32923CACB8269436A56BC02932189C7139D8463D0DC540621875E9A7DFEF020E7E83696C7612BC2A7DE7148D7075C31F257766301FA5A06E00582DCE15C6FB3195AF43078D79B110B5DC0789BE3A32132737FEB247DF8D2216F272C3D5BA700C52ED7E3A2795CCFE3072CD1D1B533939AC58A065A8A9FE85441ED291D43869E25307737A5155A095C5056A204326F944A9FC8F7035C931A61033CC2DB6ECEC08AAE0045A6542080C1A7BBD699902A2ECBE3A1F9AA95FC6222C6C6AB7BF96EDB3450E029B0CE104DBBFA0A49B8044EE1BB63B33BCFAA8A6A450194CC577D490A549B6C42D6816F444AAE8B8A4F62AFFD17664E957E2BA245A864BAB8D28E82CAB9FAC3BCD707AAC19A5EE58A3925DC7059BA1B9E7A798EC987E1924342C54E5D935A6699B6D9AA78E4738B0CEC6C57D8228C86881A14A3B57065BBE5653BD92B5BD5A9888B1B1E9B017ECA1A788CBC3A283A9F7B00D3F55B138CA26C33CD2CA3BA632A0735596162AA6C9D10968F53305D35CEC4395CA0489FF631A3EF661264A22ACB535DCC1313CD6917BFE3B5B8FC3B8016CA0DFB151623C92F95701DCC4140459B52EB796FDA60FB429651052D2C16B550FA035CC1374C87A439077713769C728B766BC75A609B70BBC14AF84A3C70519C3211ACAD58BF7C14C15F1AA86FCC1DF55580A2F9BBBC31B6B0EAAB379481CE9966F7FA6487C611BA5B3E8F8307FA35CD5248C8AB351B63ABC4BA005871A97751F01E5143302C757A65E411AF7B26F22076C7A1CF7E2B0055E80D7116CA2B3056BF8754BCFA9095D0CE99715CC4512F10125C5A500DABB7C11F5B0408377900621BE851B7A3602576650B84191749F30AC635A9E2212400769DE8E1915F26BA198AF8E53DACB598711738DA8C583A388E027A59", + "dk": "E6F634F0A3771ED789D6842321E147B6010ADA7B6B0B105949F90AEBECCA062C494743AD3BE35A23C9BAA0E4CB83E65C9EB8BBC42433F0AC671ED9544A37C0CD704D1C24343ACA7BEBB538C7051186BC624A9A98F536874C3A15E145732A591ECE600C78028426BB8A7AF22757296EB968B5E3553721DB6BD507A5BE5742F45AA3E134383499400BDAC0C8607FAD647F41A2B547A631F971224C93570141C844662F96D9A3A32B6DB1C93F2A2B82E6B370B7D91EB9F9B8D551C8C2F3CEA6C2711379969467ABF7041848BB05E619A7B63CC2F9DAC97C05457911470EC7B4CD380528D695604B6F042394524C5C77415C3CA15FA64A9E16B240ED12CFF0A48AF72743916C469593B89D8510BFEC58A0532948D80D32A11FCE265ACBE6C21751507FD72366EB5EDD650344268757A715F27B28BEB4CF80347DCFCA34BB92A046955AA39590C2397A223ACB42B94B938329CB6A9C4253137531C54D2100966B9A8C96110A412AD2DC4480FAB04D05B93087AE8E4A1616526A48F38CAA920C6F495CA9E488776551630010C46C375DE52AA5EC23CCE9BCCE6663F1678B9F4325D1A961D551A02B046320F52272382DA8D565563A4CAC7419830B6C5F95629B3441727CCCB4892BA765B212221147076872361A0A31AA7C50403976042DA5486D287D143083646A90C6F1CA4037868E8478952829FD4C7E84187894F28CCD58170CF107FE74AF5A0CCFC849A71EEA4860080100310259FAA59C477C7002BD93385B8DA14E57891585253AE0CAA66BC3A33F052512788828916F0AC3C9C4FA6E31AC4088BC6A47F29386E467FEA414EDFA9194D30CE0770D3ACB1C1162312ACC64FF2793A2AC4E990726D1739E467A4BA8221169137AD1069EED5112EFF648F2353CCA4B4F8469CD29D05F2684236AA3AB3B019E6635AB53AC456D2C9D83152554655F8D6B4F75E23870677F492A2BBA53913B535A0B54113193B4122A5331585EDCC42C9361A08C173F73E4182F85B15DFC6F795269C88A19C4FB7D7D33AEA8144000827C57E73AFE87C6D9B646B1B1BE560672C858531D835BC3DA21B1407DB74A9D6B729F5BB6CA1AD086F3C2461D78A29A21238B0434594058BCDB125EE56F3B606D8C7A17CA5C3D6F876A3061BA5B65B97F033D3889AA74302D1EA268531354A707756EB60E621AC959E5AB5875790E6477D5C91A3C06593B976010F054AC6B4D54D452E5302E8E332CA6457CF2527DDFCC3B5462C7171105F9E24C8D299CA348CE9DB678E041A135893E16AC9CCB2BACCC202F7BF7B3DB1C8C5D567FE3E3C233024C75D369D7CC1093B2C2EC9094D020A8782ABFBFB89FF199517B0A4BB81C7455A64D9C07897877422D6ACCEEFA16EA242E0CEC8B5EF20C85E82E2DCAC3A3030B211A600B520B7D66B58AC317B0F65518F20EF26AB5B7D8AA729210A92B12FF115B43540509156CC247B4BCB34C313B3A38228D4BACB7E1E934FD40CB42322B6E618670E17A725CB37CB20210E000678393DE6A5D40786CBE019DAEF867F2A0B8F1827F48C0C04305357B82BAB80CC144A6997228A846D9CB49E32B865858A7601F55CB8127DA0BEA4437F017502AC8709E428309F6A252C69042C973BA104A5219C4CC17C35A828F3E21B2AB7496805C99EE041FCA0158A3314F07D053F364C887A6825958A625965D4885C2CB355E83A3C1BBB15446F891D2D24F145632CF06A5EE1A278CD3064A79AD53193853E4CEA654448A4297CEA3C9E87561629680F588953B858074292ED31C20DDD983E805D07BB9CFADD823C7900B604286C0184738CA04E0DA8289540E329605EFAA5960AAC0FD0760006C1F1993426CC7BEA22BCBB3CC02E099B828E82F94045DFACB1D9FB315582B20D1B41476FC43AC4680647259FE9B51371223446C82E0BBAEA132913E2B96EA11950C450F25854EE4FA4921193C8F1C66D61B8265C7072B046F0C532141D51D9919C80733C1BD3C5A6D77CCB3A1938C95C1E4E866D1D65C78297B3B32CA3C4143E6A215C609A36A1B13BAA17981D42B7FF4C715AC806DC491560032A5A2BB30E476A266C6E4A4A065D9698DB08132608136082689B1B648B49063C98324706A43876507FC690893900F8166E1D52ADCC44848D864B8BA0933B32DAA63435F11065915C5D5D879EDCC136FA8515B0260B9536C316120B4904921805521C0232DA126E2A9C5323976ABC73B5AB892E59B01A194B6446C1B73217FBBA855AC887AFA58A8F15A768EF968D775267E050150C7A8237C1024F9421C210D97907B2A144736E3B58E01C48947B1C62655E380256491CEBE400F52493D9033A29D6C9AE80B33E8C38584B30A31A37B15E85F5E82B73157408A5399A957190CBA905F1713C9ACA53AA32923CACB8269436A56BC02932189C7139D8463D0DC540621875E9A7DFEF020E7E83696C7612BC2A7DE7148D7075C31F257766301FA5A06E00582DCE15C6FB3195AF43078D79B110B5DC0789BE3A32132737FEB247DF8D2216F272C3D5BA700C52ED7E3A2795CCFE3072CD1D1B533939AC58A065A8A9FE85441ED291D43869E25307737A5155A095C5056A204326F944A9FC8F7035C931A61033CC2DB6ECEC08AAE0045A6542080C1A7BBD699902A2ECBE3A1F9AA95FC6222C6C6AB7BF96EDB3450E029B0CE104DBBFA0A49B8044EE1BB63B33BCFAA8A6A450194CC577D490A549B6C42D6816F444AAE8B8A4F62AFFD17664E957E2BA245A864BAB8D28E82CAB9FAC3BCD707AAC19A5EE58A3925DC7059BA1B9E7A798EC987E1924342C54E5D935A6699B6D9AA78E4738B0CEC6C57D8228C86881A14A3B57065BBE5653BD92B5BD5A9888B1B1E9B017ECA1A788CBC3A283A9F7B00D3F55B138CA26C33CD2CA3BA632A0735596162AA6C9D10968F53305D35CEC4395CA0489FF631A3EF661264A22ACB535DCC1313CD6917BFE3B5B8FC3B8016CA0DFB151623C92F95701DCC4140459B52EB796FDA60FB429651052D2C16B550FA035CC1374C87A439077713769C728B766BC75A609B70BBC14AF84A3C70519C3211ACAD58BF7C14C15F1AA86FCC1DF55580A2F9BBBC31B6B0EAAB379481CE9966F7FA6487C611BA5B3E8F8307FA35CD5248C8AB351B63ABC4BA005871A97751F01E5143302C757A65E411AF7B26F22076C7A1CF7E2B0055E80D7116CA2B3056BF8754BCFA9095D0CE99715CC4512F10125C5A500DABB7C11F5B0408377900621BE851B7A3602576650B84191749F30AC635A9E2212400769DE8E1915F26BA198AF8E53DACB598711738DA8C583A388E027A597CA0C2CBBF4FBF28DE8C479D4473C339D96B89C34A4E5FCBCF7728BDFB43B945D6BF055CB7B375E3271ED131F1BA31F83FEF533A239878A71074578B891265D1" + }, + { + "tcId": 27, + "ek": "BC02284C2B36002A8E002311D6FA3ED17088D6157E76867ED2110B7E50A9F0380893253026D833BE84A75E745CB9291F4E513EB41C68053575FE27893159C353DA6FB2C87757476A269331BB52268F39362DE69968F410C8167FB7195B6DBC3280B9AA5E28CF60071D2DD54323897701591931B6CE4CA0B087EA160A5A067C53665EDA6019E243A86883344041E3639126A2016F4321E3F39507E55F97BA0EF5F447E707BDF62A7609922DBDFC283ADB3CB7B10A083746BDC3B077BC1CEE06CE666B027BCB6E743B974D495D2D0183ECA61369EA52DD4BCDC1A54A8A08B8286A984143559554CAB503CCA2095D5AE54782B2586A778D4D3B6631114D7F543F467076B0CA9157729871DB0BF80065B9824835143B556419AACB9D39BA836E07274D1920682592046C83A37B8795603410B360C1E6B8FAACA706F8C613F97A1A82AB0F28A6239866D834BE02680B542A84ED50B4E98586231657C97A2B3121433914A17C20928E6734B45A8622CCCE69C71D367923447264CC72C26FC4986C26882557B342229AFCF7A8A8B716FEDB2FD2060708F99B6A826CF69551D0A90B4E7B9EC96C0B01F02481804124EA56604585F2B6284C205BDB795906A5C53508BA0627611DA8656600CA36908287A00FB8228B26863570977FF958B315A867488CB142B51377199BBDC2403B3679E34CC476C8929059503CB26838958934AACD0D4B67F69807B70855538C25E246569AD400E4F276CEC425D1229A8485AC5AF650C35A2F1730876FF943A4F6AAF0918EF5B543717298D6AC2D0F08C431D5876D669E2A64A0C6658947FB682B476E2CA04DAA743188200C6F79BF9AD23D78364625CA84D73C70258183AF2CAEB483B2C1F5B24A59B57911149FFC7442B8540561433014582ED6A361210E69575555497498508B86522DF2AB3FCCF64B19A9B8C84B32B8F681F51B97965294CF400CD08643FE9551117940D12338B7E9AB47343036AAC3DA4001428629AE8C362B1977259483B4156E5EC510436158664831BABC05807883B4832D2819305AC8CAA1177115A914C789C864574974F22058F2AAA36A0A31F465B4C52F34C70C28E47D35A1255FD31511A419EA9450A3A2ABB6AB68A544CA3E58CD398129F3A275305AA76AB42643725D3AC97E20690750DA9D340739C8D00A7B710BDE654732AA7C95D3304D7445D5E16C1AE64F99EC98B886AA10B3324F61105718BE0CC25B3A4A3A41C1653C0A255001BD51724BC843A1C5DA4A1350C0A40AC5258B17D725652E6CB4B5606D3CE877FD010ACF776D8A5145ACA06EED684082368C48BBB0284B8F502569E3342AE08619649B700C343E74243DE0A18803DAA6A6D2CBFBDACBACE53A4A5C10F7E7BCD6294B388C982FD794F3377EA9414C4DE70643A82A2F7A7A1B145AF0B1394A4B9399083D0EA8A35AC2BBC5D45D3B06AEAE511DE342AF6674CFA962A1E126BEC7F1252F892CD565596B3099BF60B332D58929C7B1ABB9CCC6D315D36930CAB08527F2776F76992AB977F615CBF8C1773DF0941DA095920806D36AA0F0884256807FF10726C12128FC337B299206050626A18116FE29215DF3817F1BC9EDDBBE2CA26ECCE15A325A9E566345F32A64D868AEBE124F044B0610E9C45A440D855C8F5AAED9A5E09369935779F1B56B9E", + "dk": "54DB18751A289F68B462D90388629B33088C2AD32A834380B9E7AAE7DB510DC26747A7C958ABACC04944C0715195420DCB58BB0EB30D9C933DF4994BF242B2FB2C723AEB926A7B3700A01F0A94A50DB845D234B64D790014CB912D887FEE572558EABB46E1C11F41BBD2615BA8F75F8D3CA6611991025A3393F5AA186B809C5BC04CC59A36057A0F91CC77825025C30F9229BACF75013A586C31A124187671F15C6AEAA9A802A065223850F683638D759D2DD6C14F9C7262E9CEBFD9585284528B686400358CEB3198238AA8F8469886228D59DAAC5F9AB6CD753F3C27BB61F06D4F66C9B64BAD6BE1B461F4940802991BF07A8E9144CFD9A854469163E62FD76528CDF9CDAF559A627040CEA414208744AC8754FD8B13060A7E314B15935B5965558B85585F3AD9C2D59B1137B8B191FC5506C23568F6868586C41C22BA0712BAA24757E4E5BAA4758DA57B6C925766149B768ECACBE7391F52773CC3F89C7929AEECDCA343077584458D3A57AE43304112CB903D7A762B23C46DDC2D26394E4F2B5FA1A2416B493F44D36278009D87303BA6AB340483A5E8962C03D486E5B77EC352ABF1B3C758424165C9C696F496202A71E36105C381B4B8AB924C9AB69A01639412152FDC59B28A612B66704CC64DAB003542C541008D77EB86A7B8F1201DD77BBCDCCB37100DD7343BFD87679EF4B9C62023C186AAC7D3C235CA642B594D806B65872ABA86603D5BAC3D71C5329A89A3AE7591D8354DB5B4C354F6B0AE603BE5373E12146F25493E73A7BAE75C952EC412FEF18DF2E77A210695EC7969FE564F204C9496497F1F0968ADBA11613749EFC524BEB3519295C4A05570DE6344D9632F8FF74482A612F5E7C0463B4D6895A44E964C87B930E57B7033A253980009A6712C382CA66487902341207E2331EBC6C904E6AA53A57724633626124574E4144609CF9D5B6727877FE6C53526EC6742D889CD8B045B22C4DED3637228BF3FBC1216C750C449BA5EB0645FD8A7B9F35E45DCBC4AF4C960C522DB339E16A7881F9A551894CC19565B9F329719B9A6CD81838EF2A8ED2308148601092A20C712C3B393896E47712FA42C2B197514821DB28524AAEA7DE87229BF62401F12B99C38C8C039A7D212A5E404866D7A8288A9B1BE63A0A6C980FF39C3BB2C6DAC7464E05B657AF585C6F0620E63A640146D2E9C3C12D05328F343BB409C7CCAAEE0000C7C8921C31C2DBBC3B374A51A1B135FCD2740081740B06C413A41A519F1CE18916DA0519D132943FDD392D5B855441126EB238AEC989CC2D663B9F575D790407A5265471CC32BC6993BCBBD063C4DF69C8ECAC96B8539BA9A3BC532955825EB7F3DEB4351385EF6C53AB81CAA7A92AD1FC839C7DB1065FB5F53B17DC5C0137ED1BA6D9BCC5D037D1B96909F98CB3F74B5F4CA1AA593C50E39A55D363641453F2A7A1481D4BE66FBA27DE5088783466D0CCC82A8625C91814D966281B977276715886313A83BCFD00659A295C62AC970A904C31F118E35A900E3CC711F9C8E5D73A970E13F574A3030188B2EF9203EE6A92FF7096E97998470B77446B293AACC15432FE0F207659844C9B29C87C751D4080656B2951116317B194CB686AABC02284C2B36002A8E002311D6FA3ED17088D6157E76867ED2110B7E50A9F0380893253026D833BE84A75E745CB9291F4E513EB41C68053575FE27893159C353DA6FB2C87757476A269331BB52268F39362DE69968F410C8167FB7195B6DBC3280B9AA5E28CF60071D2DD54323897701591931B6CE4CA0B087EA160A5A067C53665EDA6019E243A86883344041E3639126A2016F4321E3F39507E55F97BA0EF5F447E707BDF62A7609922DBDFC283ADB3CB7B10A083746BDC3B077BC1CEE06CE666B027BCB6E743B974D495D2D0183ECA61369EA52DD4BCDC1A54A8A08B8286A984143559554CAB503CCA2095D5AE54782B2586A778D4D3B6631114D7F543F467076B0CA9157729871DB0BF80065B9824835143B556419AACB9D39BA836E07274D1920682592046C83A37B8795603410B360C1E6B8FAACA706F8C613F97A1A82AB0F28A6239866D834BE02680B542A84ED50B4E98586231657C97A2B3121433914A17C20928E6734B45A8622CCCE69C71D367923447264CC72C26FC4986C26882557B342229AFCF7A8A8B716FEDB2FD2060708F99B6A826CF69551D0A90B4E7B9EC96C0B01F02481804124EA56604585F2B6284C205BDB795906A5C53508BA0627611DA8656600CA36908287A00FB8228B26863570977FF958B315A867488CB142B51377199BBDC2403B3679E34CC476C8929059503CB26838958934AACD0D4B67F69807B70855538C25E246569AD400E4F276CEC425D1229A8485AC5AF650C35A2F1730876FF943A4F6AAF0918EF5B543717298D6AC2D0F08C431D5876D669E2A64A0C6658947FB682B476E2CA04DAA743188200C6F79BF9AD23D78364625CA84D73C70258183AF2CAEB483B2C1F5B24A59B57911149FFC7442B8540561433014582ED6A361210E69575555497498508B86522DF2AB3FCCF64B19A9B8C84B32B8F681F51B97965294CF400CD08643FE9551117940D12338B7E9AB47343036AAC3DA4001428629AE8C362B1977259483B4156E5EC510436158664831BABC05807883B4832D2819305AC8CAA1177115A914C789C864574974F22058F2AAA36A0A31F465B4C52F34C70C28E47D35A1255FD31511A419EA9450A3A2ABB6AB68A544CA3E58CD398129F3A275305AA76AB42643725D3AC97E20690750DA9D340739C8D00A7B710BDE654732AA7C95D3304D7445D5E16C1AE64F99EC98B886AA10B3324F61105718BE0CC25B3A4A3A41C1653C0A255001BD51724BC843A1C5DA4A1350C0A40AC5258B17D725652E6CB4B5606D3CE877FD010ACF776D8A5145ACA06EED684082368C48BBB0284B8F502569E3342AE08619649B700C343E74243DE0A18803DAA6A6D2CBFBDACBACE53A4A5C10F7E7BCD6294B388C982FD794F3377EA9414C4DE70643A82A2F7A7A1B145AF0B1394A4B9399083D0EA8A35AC2BBC5D45D3B06AEAE511DE342AF6674CFA962A1E126BEC7F1252F892CD565596B3099BF60B332D58929C7B1ABB9CCC6D315D36930CAB08527F2776F76992AB977F615CBF8C1773DF0941DA095920806D36AA0F0884256807FF10726C12128FC337B299206050626A18116FE29215DF3817F1BC9EDDBBE2CA26ECCE15A325A9E566345F32A64D868AEBE124F044B0610E9C45A440D855C8F5AAED9A5E09369935779F1B56B9E9C9032984AE72B7D5E0732A29EC29D8BBC4252A31454185710D280C223A47899360557CADDFCF5FEE7C0DE6A363F095757588C35A3FD11C58677AB5E8797C2B8" + }, + { + "tcId": 28, + "ek": "EAD840B81B03BFE75805595DCF0808B83738AF14C758920F80E209D68B9192C5CF0DA397A0BC9A702295B8AC3826DA6F427C9281D937CBE4686F70713B39021CDCB96D71405D4CAFE4068CCDB64643E7540E571DAC0019D3F1235CA8161AE68592223E674C07AC76286C95BB17E78110317840064485D7B16DDB830C807BEC506CDA14C957DAB843781B977A439C612F52A944AB2B6E6A1C221B886097EC4259B0661E550B58376A56F7A62ACCB7A8B94CA02B1797B62497B88B0035623F26086D14122CBC9EB7486B0BC2A8BE25985B2019906977CE971D928347DA5756EBB65835764EEB6B52BA123E61BBC5123645346168597C1194C80ABB26C74EF6500AC6B180C190C28C9041AAACF5371C41373BEDC686BB73B583F46217F31F01B66DCCBC9BD6627DC03250B7E52C690261BE97B42FCCC63EB443952143F5734EF4D336C5311D0B2820A1AA715CBC1A106117BC7159FDF32FDA33C82653727466BB14ECB98FF06E2808CDEC540A2276B34FD633349367576AB50360C88992A675128400DCB07999A2B3978547735BF8A202EEFACE1960AA6649CC08582E92DC928F30BC0E3CA45EF8159F928842CA75A01A013B1A5CD55554274A6D2BC39A4796A129017E7A91A79CE22665940F5F711660ECC5101C230BF927146486AB6546C4E4BB3D8C7D877769B3BA7FE0162397DA4583D30B343862205CAA6D0CBE57000D6F9384D73C6ECB3AB773599B73FAA2F9258EF467BD6266273D1214C103399019751B240C128021F1E698110559B2C56FE32223CDD90D04B766CA425AF66458D8E66BB7029D147CA11E778B5323216C3081D0A6596A7AB5FE886E9C9ACEBA705A3B751F19165916C5855AE29D34D10FBCD68A60C38023243CB1C22D30261292E01D31300569777B099C77F5351FF77C2BA5C09F584CBB6CCB84F11AA264C310FDF253B271CD6450B85F040FF8262F2113141BA3B45E1550D6084BC84A50202B19D23A92CAB5B8C6838F49D99AADD6592B1842EA251F71F3A6707C55C3EC0A3A0314C9A4530F9AC4FBF83B9B73510229B136D5989990B71954BB3889CE54944E01039AC7A9B4EBEC47805A9C51298A7F867BEBDACA71D7AE2012AE2B855CD7C97BA0E14EDE7B8508935D3B0192743B3AE7D3628166AC251A012C59034CD30B8258A159432A62DA317E8A993DC07C8DB73E5B3478D208875D6AC9B64CB36D0B1979AB9D553843BF054CA687B316414E846CB5E305B68C00A8B1C903C7C0CCD03970317C6A1F9A8646B5CABF5112BE01B868402620883E46DAA256228A8092648BA61FF57805E0D03A06C46AD1411CA8E3A95FA73904D3246AF0C4AADA2C582906B54180E9569C86A76B5F88091EB9165F3528B92A8C0549B097FC2A3398A226B224EEEBBE3B3A96066A2C0F884A60FAAAF9E97122C89582395B192172F661B775E09C6662CCB64169BEEC4924E96AB257BA514617161B8F7B316CE0512090DC627D59C4F3A39EAC068554C075E29628383477E5C493150B04D1249D61E6A09E2B323BE503A6512BB119A262B8ADDFB43612654DDF685981063E14DB0DC025520BF20FA3BBCF81D779A98300A4E0A6B6516DA6442968C7BADC129B3D458A1ED8ADA5301E5C3FAF68F13D6DBFA29987FB14563E8C6BEE4EEC9B8AB5F504A8BC1A724E6005", + "dk": "C397104AE63A279795F3243F6EAC3A74AA0B414C822A668664826003F7CEDC2667819773E4C3AF895502D22C3BC95A9887F84DE421197861964FC88E3299B16226250F701A1C1C97357884F2A20E8FBC08E84C3ED233B6B261BBD3973ABD6B1F5172C59AEC4DE0BB676417528B43A2688A831C0889AA96113640ABEF499B1AB7B67B355DA2B9A26E0CCAB9848CFDDAAB994B8E0FBB090F5C332E6CAB63D8ACD1D0B80DC68B755A2274FBC524346A93DCB5F27956CDC73B429B71410C7C75E4683440A1179851C77220354C998C47CC29EC4A87A2A44B3C69EBBBB572534B3C1B14F90041E6ECC4400041EB729E9487064E44CDFF33A352904421D8A2BBC34D1275A475C61160440DA4E2785F140B327BA35F247ED1D66EC8A05A44E4298DC72764877BD369B78A287CC7DC6B58132C43841E9B6924AAC38F6D4BC4D4FB2E32FB5E54E0963C54C8058522AF21B7FE435B5EE3801A0BBB21088DEF77B20A466A5EB8C8D3D71ABA4705C0D6C23476BBF9918B6271CC041217B41A0E0EE885EA0B5334F64A5BC0199F73675C0593A0369429818E0227B8A4556EF83AC492D8A572F126004C1E2CBABEF335312F3256A3E6B42B4150FFA21E183588664B465C5CBF14D9A8C58CB33D4955C80939351C1D8A959BBFB210730906C546C60D747AECF15DDF571769524553BCCFE6CA3422830CEBD61C5A3C541E20B8AB9C44061B4BE888A01F429C03128CCF2B2EE53555D42A3F77E04CEEE46B0BDB3A84B4CD3BBBCA9DACA71426666934095A862E94710B862C31985517A49A9C1B175E9C4A63B2C055B2548BCCFB14329B35EBA1CB302972073480E913AA1BA9399F63610220133E6ABD02E47740A56CCF16B620308261692CA0A56FD6554A59C8ABBCB26156F69034C30C2D1B89730627A8036818458D4DA70E4A954572F095BB64ACF346473481A67DAB2023539C3111B205E414A24483632C4C548B6BA9375D758C597C322DFD89288E4B676034B36CB695C571960232B94396B9E08924FDD882429A143E451855F65B3EA661B573878C083EEB20BD7F5A142E386DC8A45AFD000072B8544D74B7FA472FE03C0F36A310FC54C354B0A22F62145C5BAF1BAB5DEEC678AAB4B89F4A49012088F1307FE02421B7B2B53335871984678295C8423BA60F834BAA9642811902B91AA23344B85628C242F183AFCC27F0E18A9C683C9C7484BE82CF6E17C03DD5A558326C6D4974B28261DF45639FB15B18C9BB3F8B2CA0951C6DD2C3C6853DA8402CF1D625CE4C7D1EDC8BE31CC2C761B540F5121F739A4256A47E396C81419020C324DCB29AB577C7995850748A41D0176E7513A8FA9252F9730E44D2220A8BA3641CA4C9B5A2D193415288730D9434BD9AAD79D27B98F16217D52241D0606CF5424B27318346B954E805E0507C87A741F4FB1FDCE454DB18B845E90732724858AB02AF10B7150C3AA11C1FE4C6B836A0065FB724C1D77D1DE0BB2867B26925882B915D4928159CF421A59A4243E990C3C17E1AD792141CB3D2DBCEEA7648FB91A60D8A62C65A9B2C765F2C1582F10513485093519AAD55D2B08A18C6F29B38768859F5150CFA4537DA470B38645A4F8126BD696A6BF9715634B70F3B1DEAD840B81B03BFE75805595DCF0808B83738AF14C758920F80E209D68B9192C5CF0DA397A0BC9A702295B8AC3826DA6F427C9281D937CBE4686F70713B39021CDCB96D71405D4CAFE4068CCDB64643E7540E571DAC0019D3F1235CA8161AE68592223E674C07AC76286C95BB17E78110317840064485D7B16DDB830C807BEC506CDA14C957DAB843781B977A439C612F52A944AB2B6E6A1C221B886097EC4259B0661E550B58376A56F7A62ACCB7A8B94CA02B1797B62497B88B0035623F26086D14122CBC9EB7486B0BC2A8BE25985B2019906977CE971D928347DA5756EBB65835764EEB6B52BA123E61BBC5123645346168597C1194C80ABB26C74EF6500AC6B180C190C28C9041AAACF5371C41373BEDC686BB73B583F46217F31F01B66DCCBC9BD6627DC03250B7E52C690261BE97B42FCCC63EB443952143F5734EF4D336C5311D0B2820A1AA715CBC1A106117BC7159FDF32FDA33C82653727466BB14ECB98FF06E2808CDEC540A2276B34FD633349367576AB50360C88992A675128400DCB07999A2B3978547735BF8A202EEFACE1960AA6649CC08582E92DC928F30BC0E3CA45EF8159F928842CA75A01A013B1A5CD55554274A6D2BC39A4796A129017E7A91A79CE22665940F5F711660ECC5101C230BF927146486AB6546C4E4BB3D8C7D877769B3BA7FE0162397DA4583D30B343862205CAA6D0CBE57000D6F9384D73C6ECB3AB773599B73FAA2F9258EF467BD6266273D1214C103399019751B240C128021F1E698110559B2C56FE32223CDD90D04B766CA425AF66458D8E66BB7029D147CA11E778B5323216C3081D0A6596A7AB5FE886E9C9ACEBA705A3B751F19165916C5855AE29D34D10FBCD68A60C38023243CB1C22D30261292E01D31300569777B099C77F5351FF77C2BA5C09F584CBB6CCB84F11AA264C310FDF253B271CD6450B85F040FF8262F2113141BA3B45E1550D6084BC84A50202B19D23A92CAB5B8C6838F49D99AADD6592B1842EA251F71F3A6707C55C3EC0A3A0314C9A4530F9AC4FBF83B9B73510229B136D5989990B71954BB3889CE54944E01039AC7A9B4EBEC47805A9C51298A7F867BEBDACA71D7AE2012AE2B855CD7C97BA0E14EDE7B8508935D3B0192743B3AE7D3628166AC251A012C59034CD30B8258A159432A62DA317E8A993DC07C8DB73E5B3478D208875D6AC9B64CB36D0B1979AB9D553843BF054CA687B316414E846CB5E305B68C00A8B1C903C7C0CCD03970317C6A1F9A8646B5CABF5112BE01B868402620883E46DAA256228A8092648BA61FF57805E0D03A06C46AD1411CA8E3A95FA73904D3246AF0C4AADA2C582906B54180E9569C86A76B5F88091EB9165F3528B92A8C0549B097FC2A3398A226B224EEEBBE3B3A96066A2C0F884A60FAAAF9E97122C89582395B192172F661B775E09C6662CCB64169BEEC4924E96AB257BA514617161B8F7B316CE0512090DC627D59C4F3A39EAC068554C075E29628383477E5C493150B04D1249D61E6A09E2B323BE503A6512BB119A262B8ADDFB43612654DDF685981063E14DB0DC025520BF20FA3BBCF81D779A98300A4E0A6B6516DA6442968C7BADC129B3D458A1ED8ADA5301E5C3FAF68F13D6DBFA29987FB14563E8C6BEE4EEC9B8AB5F504A8BC1A724E600585E42177479AC364C343E26B4BDD480D14F1A7487FF4C64E37850C5D1B4EFC9600F6EEC72778E02ACD04BB056113C571982E45018BEAC566EC59953724F38A4B" + }, + { + "tcId": 29, + "ek": "290002BD174DB335BD167A42B2B802F59121C6107B1E1456B6C7634FA675BBE579DBCB05546A6EB1195C7C9B75346C9B1403D0A5FCA25DF447EF09B6DD265794587F6821A0559C9AA4C9AB54F0BF745B1DF0438F32030A7B11A7D4ECACC520506D22474658BA1CC39E503AA212343BCE63B2FBAC104BA57BA4654F04CB7158C84A1755CE080CB3F1F761EBE18499C24B2C2C5709806F8F2060DFD56EDC2913B500B8B4FA87560627680505918B2D780031FC955579E52D9F043E8D2C17BF28011515C8603868954111713733D0702BFFA91619543997686413373E04483BA3E17910248AB1B10D2ACA10FAE097EEA2B4D8B10286A18F959CC1ACE9BB478B5F671023F108BA0AAC26961B4264B81225D360F556B343CA52EC5C00EDE2B540618A33354AEA5B73E604636302BC70B0AA4A5BBF22786C59D13AAAAB2EA0544031237E57903F49BB1D1A1A269D923D508CB684F899BBE366BB76BAF8FB8135DB44FA3A71BCACB4C0B2B306C7C04C475BF4AC22CCA6BE40B1097DDC4AD543C2DF088051EB3E7E997862D318C9A8416B9B87C3A83BD578A4B7791F61E3CBCD1506E458AD7C030C6927A91E7C72F31B3EB153039F745191CC289BA17CB4866CF0866FA79AAC2DB5C167E70E4D427ADF584CDBA0C755A5B53C0A29C28169FC491DB1456D47496BCB1454A0D64129823B38D92F10CA9118B14E530112C6210ED500C71DC9C9A9B3770BB0AFEBE509749A318218BC4FC57622B0878EA16B034226D37CC130E280C4FAA4EA05849B9970C5700940861F488A14D9411BF64B23F41B7C15E7AD6A70CA90D9BA21228E1BFC1C3C577942164448161AEB3659008A1009C8582C231A5EC3154D8877C9869861F95D07805597B7537160466B5398EF8B0B6246BB88627593A5AA55CA298181CD282AA3D6249BABB03942018C9ED943330218F5A8B476171DD6285DCF18585293C9CDDC8CBBF88A0F681B7A9588030541989B4A5AA81E0D24CE77BC97CC764D3665CBFF25B38DA18F20D50CA0B216FDFBC2BD237EA646AEA108405AD7308485AD2F1C697550825FAACDC812CBE4038A75C379AE556928D496377684ED8C020335C12932B71DF647604B0E1B1B13FADAAA04E72AC7FC86E64A2D13DCB8B6336228A31D88D2C8AE54510443B94C5C30B2BC5443A75958F38D6878CAE796C0F2C6B0F6D4658129BE6D240DCB1057BA19BFF8186F89F70E06BA7A7C3664DB6A36FB1BA4C364AF35C1BA406A792AE8AACE589249D3C461B7BF15D1555ABC58E07785DA3C471DA115153038B76219D8652464284A73856ACC3B600298B7CB416D3622283439C31CBAAB84A31FB8496FC8F31656E7BBD6890F5CAA2F1FF3B4665BB943D34FACF7513E70B61E116B1FE2B2A9EB5C718887A73518FD8918DB50B946DC3AEEA18C3B078837978533C89D88B717236983E8A47457B3C3903A058DE18FB480C98F30839DF6A149F508D9C44A9BB0056EE6350F42B182660C7BA5CD86F414AE33B6B1722900F17A928CB848C15AAF175A1AC6B5F833322803CE3EA892292909B913CD4AB8C956548A4917BFE5342E1E808B7220CDB352510E1BCE747B9581C16055233DFA380E95A594F6015D343AC65DB955402620B82F1BA7372E13F74F137E2D0A997CAC3B8098ECAF91015E746FF69F895A66B9", + "dk": "7EE09B38A22CA17053D3733FE814AAD24C02D5EB2FA597C856E83793850D2C0A6706C1124312C2AD51861C3488BBA6A784E6101F4920466610CF21681F6A0BFA1C9AAFE510B2721318C957B18BBDD509513F42AF9B757957D59EE0E4090D642DA5DBC46EE9C33BCBB1059C7BECA0A880925968F53BCB9BB5EFFB6632644E1EB0201B893441366C9BBB9AF70A85120122EA579B4A05BB6B62042E35055687A58F48756A6576EB86A8FE34660583829B50A370763970D42F2AE085545304FC050551F59B634B9864619F7362C0E4409757318D71052B9505246454645506017CA64F1AE292C5E41C9CD9CBEC12062FA22184D17232F6243D66CAFA3526DD11A6C23B86D2432311D18D8D348036D7116EA09F96C7437B461D08044DB3EB285B58B0C9FA7CB0EA4955297BBCC72501D7BD6CD24DCF9008C7304BEBD6AFD60695BCCAAC6B643FCA90729EE24B887068EF04559474173E4691194B753D85408E426EAC8BA17EC3ADC264685493702B4B6C74B59BE5B0189132771F7A5B860322F8020015DA5712BB5E3D51AD5D28886DF1BA97DA62002A7828E4C5688685460223E9B7CF2A7346796A41A7094B124914C03981DE72B3749B601CC498B30BCFE5976DB6B72C6DBA55EBC14A46298B94C08ABDF1BE059B6F7B6C4CD185BE5E731FF7522A532593BB9A90C3B844D03209FE652F069C35BF5B8A7C065A62D33E4AF74CA42C145DF21009998927F69CE41262E473BAAB31762DD46AAA895DED5748264ACFA7571A11453FA245231F8A97E9A8634843183FBB13EB70076ED23ED21528C281A3CB1578F6C46395982312D3AED69A1B0262529F7AC3F6B1AA1B35677B636553CA89A2E289A7326EEB225DE7AB07BDD4C8BBA075BFE4116B4BA9B01B2A09249C2038B087992062BC6439ECCB67CA80DA6A4D2FB604A30543CC095D5EB6253E151AE458112569A9D2D016091390BF12800E365EAFC9B718979378A884BFF34A0573627F48451AD38CC0534405315F4AB13F9D4B9FA5195DAC0688E7800DE4E89DEECC539516ACD8F88B4A8B98F595B295C01BF1A03D0444CA62EB10FE658E56481583EC130E924D11C87906636CA442C65F349B86B83FFAFB865D9998517134760A46EB6051810206152BB35411771B88C65D0588041817C8C345C40C9931BB68FF28C62E28C994365BF7B91024E0B405439E68B94B9BA87EDDA87516B1888381641AE975C1539E7E61C160F50FEB309608CCCB7389BBA941ADAD39189C0B326A9A23E470302EC114B3E5CDF09C6EB5751543B0679C775F3CA322EDFC26E3D56A6B385651CBCC52F79D22527D8DC18BACF2AC956B4A43882174A3599EE249C5A65246B705FB55056693327995554ABA938A8583CBB5877BEB3124530F93A423C0962D1848676D3354FAD56F36554333BCB74AD3C7CFC221A83A2A1BE11F11BCA5FE653AFD952B7800705025C14FA7970DD53EFA626EAA92009FF210C0C97FA7D77D2AB20DB9F93FE60B08802033FD27AA8ABC8A8477A417E564C8202F17424EF751AD91FAC8F878BE2AC02F5C35033B586D79E54AB623161B731F17B0A988A68EEE746D8E43AD08D208A6CC0253284B6EF0BFC72567284837832635D2F377AA5360290002BD174DB335BD167A42B2B802F59121C6107B1E1456B6C7634FA675BBE579DBCB05546A6EB1195C7C9B75346C9B1403D0A5FCA25DF447EF09B6DD265794587F6821A0559C9AA4C9AB54F0BF745B1DF0438F32030A7B11A7D4ECACC520506D22474658BA1CC39E503AA212343BCE63B2FBAC104BA57BA4654F04CB7158C84A1755CE080CB3F1F761EBE18499C24B2C2C5709806F8F2060DFD56EDC2913B500B8B4FA87560627680505918B2D780031FC955579E52D9F043E8D2C17BF28011515C8603868954111713733D0702BFFA91619543997686413373E04483BA3E17910248AB1B10D2ACA10FAE097EEA2B4D8B10286A18F959CC1ACE9BB478B5F671023F108BA0AAC26961B4264B81225D360F556B343CA52EC5C00EDE2B540618A33354AEA5B73E604636302BC70B0AA4A5BBF22786C59D13AAAAB2EA0544031237E57903F49BB1D1A1A269D923D508CB684F899BBE366BB76BAF8FB8135DB44FA3A71BCACB4C0B2B306C7C04C475BF4AC22CCA6BE40B1097DDC4AD543C2DF088051EB3E7E997862D318C9A8416B9B87C3A83BD578A4B7791F61E3CBCD1506E458AD7C030C6927A91E7C72F31B3EB153039F745191CC289BA17CB4866CF0866FA79AAC2DB5C167E70E4D427ADF584CDBA0C755A5B53C0A29C28169FC491DB1456D47496BCB1454A0D64129823B38D92F10CA9118B14E530112C6210ED500C71DC9C9A9B3770BB0AFEBE509749A318218BC4FC57622B0878EA16B034226D37CC130E280C4FAA4EA05849B9970C5700940861F488A14D9411BF64B23F41B7C15E7AD6A70CA90D9BA21228E1BFC1C3C577942164448161AEB3659008A1009C8582C231A5EC3154D8877C9869861F95D07805597B7537160466B5398EF8B0B6246BB88627593A5AA55CA298181CD282AA3D6249BABB03942018C9ED943330218F5A8B476171DD6285DCF18585293C9CDDC8CBBF88A0F681B7A9588030541989B4A5AA81E0D24CE77BC97CC764D3665CBFF25B38DA18F20D50CA0B216FDFBC2BD237EA646AEA108405AD7308485AD2F1C697550825FAACDC812CBE4038A75C379AE556928D496377684ED8C020335C12932B71DF647604B0E1B1B13FADAAA04E72AC7FC86E64A2D13DCB8B6336228A31D88D2C8AE54510443B94C5C30B2BC5443A75958F38D6878CAE796C0F2C6B0F6D4658129BE6D240DCB1057BA19BFF8186F89F70E06BA7A7C3664DB6A36FB1BA4C364AF35C1BA406A792AE8AACE589249D3C461B7BF15D1555ABC58E07785DA3C471DA115153038B76219D8652464284A73856ACC3B600298B7CB416D3622283439C31CBAAB84A31FB8496FC8F31656E7BBD6890F5CAA2F1FF3B4665BB943D34FACF7513E70B61E116B1FE2B2A9EB5C718887A73518FD8918DB50B946DC3AEEA18C3B078837978533C89D88B717236983E8A47457B3C3903A058DE18FB480C98F30839DF6A149F508D9C44A9BB0056EE6350F42B182660C7BA5CD86F414AE33B6B1722900F17A928CB848C15AAF175A1AC6B5F833322803CE3EA892292909B913CD4AB8C956548A4917BFE5342E1E808B7220CDB352510E1BCE747B9581C16055233DFA380E95A594F6015D343AC65DB955402620B82F1BA7372E13F74F137E2D0A997CAC3B8098ECAF91015E746FF69F895A66B90AC7D5945E9F2C912B74F1F5614D275F795D3D0113C1FAB3EA760028DC76B585AFD2847B067E7042714CD2D1ADA8BEF1413817191741C622328670C79A07ABAE" + }, + { + "tcId": 30, + "ek": "1A932462758A276CA896CA47E928B6DDA59F53143975A2C7D60A0BDE7713BA41C8F1566B979019B2912DFAE1A7E84B0501A792E674596018A1BA36094EE7762AF1035D9508AA9047415A3F377153C75C372E899BF1B20C5D6A04AA1B85792C7A8C68C3FF2A17FE9ABC268222CC5051ACF713DAD59825E580C75A0F5D191D7BCB596D54865B0C142B102F66E1CB595651DEC110C0FCBA95C056B1F470C452576A688E34C41880226C0200998AF8C90A460915F75B595C7315032AE49908D201A77C5B63BC911A40065AEC8115BD6734004580054040C2F07071A58DCBF251A538A6A3409798056E470B9A64268D037B6286CC0030D9C8D76C9EF3854B544C5BE2922F3702346270738FDC5D99F68C7B704D538B81D754AE75140411DA5C9B978FBDE285EBE265C46255576497756B905B7B6A47E55D3059C420D74961D80732FB88C36592861A16CB8980570199BA089BE7D94C94596F88A0573A49C9532434181C35C1E1B4E02375F208479D194208D898BF64809B808B3737067324C12AC13F11F8BC40024B6395104FA4C54D635DF3E2CE7064B96328BED488A12A78541977C564002EEA9380702B4BE0379317B264FA896B87A07AB5B3B28BA7A8285C019807595F059A968C7353357202F96E4E6C04D3B2638CC40256158ACC949B75F74B2E256AC1C99229059CC4A5C749EC23425A8CD702C50CC93508D07879E053F51CB3B3E2C5F1478070119086D9CDCA803167138C4FB78E4CF580346C14D360C2B657B16C47BF1827824A6094E5E792DD896201EB98DAC6A116668723E66EFBC74734B020AAE99D21189D0BA6570258C784153D46AB04B2225D689543BF01333D43930E3C15B7E23946EB6C17132D3FC2C1B217CBF9787DF599086D873189055206C67893F498A8F3A2DEE60885D45BCD7C95C75726F4627D9A7937C49B4621CC0D7FEB983E22782D98A4FE409C13E4BBD2F4A91160B36FFC557750B6D45426D024C6E7DB57507282E004C55B0422958B923E394D6FFC1198258336EA0E37E76C5D41A40E886148968A45E4BD38BA7E0E0A55DF160BF6B64DEA742A1E2B5C80804D4B924DDF2532978093AEF90F2877C2FAF96FE1DCC2BC16627B680154E45BD4A47A9A11462AC0A48D211D8C75AC508AC2AC74B6595C30A79B2C6D0456700B3F21EBA7B5AA9852478EA978137B62A257EC5D80E1C07774055616CE1F008F1A3B381B408E33592D8E088CE5C48E13252A327373D092541A8251C2F9C474FAC50978BFD152B046CA611DC68DCD7117AF753CE6F969A525BF7D68C660C09D8E9A338AB5C323A5170D13549EBC71AEACCB448B80D9BA400387BF5F9C196CDA57E0C414EFB63663829258EB4327616286B99B52B0CAF938BA26756C9F0898B8EA3768759BE38B3945E1B4A0FB991A15AAE4A59D591B558DAA2C4C140D0F0B7A8B4A20111C70B5637E07C8AE71858CB8CC11A7C5C49719714FF0AA02774631138A639525A22614A1E32A965270AABC872358AF73C61038197EBA38311FF041CABA673B55C6BA54922BD28488E90E69F0B1D8A9BD5479858F70CFF9C8BF2A551D87987516309C06C004ADCB7644BA22557915AAD870C16B96E530B3AA7AB6B6E7657EEA078F2123527BDDD9F47ABB9E5FD2A3D529E899A480B087C3BC5B42F0638E4893DE", + "dk": "3F206F5EC488B674019FD2CD887410F20CB7FEE3CF7D445420F42D01B49E52E17FDB9319DAAA471BF2C64510ADABC9A15EB519929584E5A73CC9538A12CC1E7816A22BC1802A586FFADBCE531931992354B4547FA1EAB6FC7A9A2F69612180B81C7C55CF34A63A8A24BA40BE20E431C7654CE57ACA63516B004B3917113B5851872B9024284B27813562F0C92DA788AF3DD06C8004352682C212D0C279C0399541B7487ABBB0977D4E6BC453097712934912F99B6E16CCDC2C6132EA74FA464AE657A3751870C959035BC075435321FF5A0695D152F52A80A8996F42EC0419F103559480F8E685A8784E256C8167670C2151371930A03A659B0084AE29C48B5E38674BE1728765635F66030803617D3720A7C832389A7C44B4A33A383E8A93CE2AE19E46A205751A9BF2CAB4A95C7E6C5704D11A822667B92839117C729C72905D01F47A0E92912EE0A4128B4B2313784BC59767366E72308719F84939B03E33F70B8FD704592B602F802D31CA3386D234F718C38F4A11A7A824100C227AD776CCD2C8F72366DDB34F3B262CBA6A73DC91B0046574F37B87536324FD77BEDD7013AA7B080472487C235244FC01E264A552C1099125C6BE309BBB661950D0B281824FA9E752E7710E5FB1037872692F5111ECA45CBFA215C6091FCEE4AE642CAEC8259E8155177F7B648273B9670763A79907AE3381088A183DE485B78255FEE8444726CAE9F4642E0B22584334D4769B10D19B5C3C744A22A1F33B65B577C8F9267339E9CF5A5B868562413581C23918241757C4DB2AB84033463530C681C95E0E3C10A2187DE1A065D4DBAE714327EFAB2A16A83AAA515FC7AA10CDD0B8EE1A4C74FC9C4720092E2B32019305E1D20D2FAA68226C4A7B1B053F262BB8A4B7FC38052560B5BE728FD6B42906316964CC9611013ACAA88A2BA80096C362C26A72E2271A6D38190CB76256A4218ADA3C1091CF62553A1AA34EC7B66DBD87455E134E845396C9253FE2E4A0970768E7A2304F67C7E1933ABC299E61837D1AF032E0330D42E29ECA948754E3B027152ACC69C424B8CA7C3A7413F88E6C0773002163C29CCD66B9120F6CA23A8C2CC08B0181FA914CBA3E549253AF7AC8B48515A5A3415FF3B62CDA5F088A999B884439E14DD78CB7F3B91AE30416E8AAA1DAC17B9735B43253A924043B8BCB7255DCCC96C7225A91A5797A21941B125EA803BBD818473055484C825E6574E85B965DB1147A8232475735055581EE9414DBB86F76F54E55878B35BAC9F7CA337B6747D548B1C6578CE5F28E2237C3CE36170FC48CA436487B61056882605D119AB24329991881F89C76C1752E27BC7560B4525147BCE269CA254CA491669098778985A4A4882AC870F9B05AD6A40F5245DB5C3B93907CCA62246A4BB77FC8C42D12528B225FDB028AC435B59FC00B92A3CB2CEB912315A0BBAA0CA216927B1788B105B2A51393942BC20533C0DA65C4DBB352D6F80AD144821AA053EEC76976B138B97C224D158A3FDA8E92832046E015467759F17B66D206B506266653002BA9B0575441CBCBC4369A98B4C11CC5A6B6C0C6D46F6F1097ED63CE94E16CB4026F13A42A919CB799DC5F46630160B36D8FD4A0E9069B1A932462758A276CA896CA47E928B6DDA59F53143975A2C7D60A0BDE7713BA41C8F1566B979019B2912DFAE1A7E84B0501A792E674596018A1BA36094EE7762AF1035D9508AA9047415A3F377153C75C372E899BF1B20C5D6A04AA1B85792C7A8C68C3FF2A17FE9ABC268222CC5051ACF713DAD59825E580C75A0F5D191D7BCB596D54865B0C142B102F66E1CB595651DEC110C0FCBA95C056B1F470C452576A688E34C41880226C0200998AF8C90A460915F75B595C7315032AE49908D201A77C5B63BC911A40065AEC8115BD6734004580054040C2F07071A58DCBF251A538A6A3409798056E470B9A64268D037B6286CC0030D9C8D76C9EF3854B544C5BE2922F3702346270738FDC5D99F68C7B704D538B81D754AE75140411DA5C9B978FBDE285EBE265C46255576497756B905B7B6A47E55D3059C420D74961D80732FB88C36592861A16CB8980570199BA089BE7D94C94596F88A0573A49C9532434181C35C1E1B4E02375F208479D194208D898BF64809B808B3737067324C12AC13F11F8BC40024B6395104FA4C54D635DF3E2CE7064B96328BED488A12A78541977C564002EEA9380702B4BE0379317B264FA896B87A07AB5B3B28BA7A8285C019807595F059A968C7353357202F96E4E6C04D3B2638CC40256158ACC949B75F74B2E256AC1C99229059CC4A5C749EC23425A8CD702C50CC93508D07879E053F51CB3B3E2C5F1478070119086D9CDCA803167138C4FB78E4CF580346C14D360C2B657B16C47BF1827824A6094E5E792DD896201EB98DAC6A116668723E66EFBC74734B020AAE99D21189D0BA6570258C784153D46AB04B2225D689543BF01333D43930E3C15B7E23946EB6C17132D3FC2C1B217CBF9787DF599086D873189055206C67893F498A8F3A2DEE60885D45BCD7C95C75726F4627D9A7937C49B4621CC0D7FEB983E22782D98A4FE409C13E4BBD2F4A91160B36FFC557750B6D45426D024C6E7DB57507282E004C55B0422958B923E394D6FFC1198258336EA0E37E76C5D41A40E886148968A45E4BD38BA7E0E0A55DF160BF6B64DEA742A1E2B5C80804D4B924DDF2532978093AEF90F2877C2FAF96FE1DCC2BC16627B680154E45BD4A47A9A11462AC0A48D211D8C75AC508AC2AC74B6595C30A79B2C6D0456700B3F21EBA7B5AA9852478EA978137B62A257EC5D80E1C07774055616CE1F008F1A3B381B408E33592D8E088CE5C48E13252A327373D092541A8251C2F9C474FAC50978BFD152B046CA611DC68DCD7117AF753CE6F969A525BF7D68C660C09D8E9A338AB5C323A5170D13549EBC71AEACCB448B80D9BA400387BF5F9C196CDA57E0C414EFB63663829258EB4327616286B99B52B0CAF938BA26756C9F0898B8EA3768759BE38B3945E1B4A0FB991A15AAE4A59D591B558DAA2C4C140D0F0B7A8B4A20111C70B5637E07C8AE71858CB8CC11A7C5C49719714FF0AA02774631138A639525A22614A1E32A965270AABC872358AF73C61038197EBA38311FF041CABA673B55C6BA54922BD28488E90E69F0B1D8A9BD5479858F70CFF9C8BF2A551D87987516309C06C004ADCB7644BA22557915AAD870C16B96E530B3AA7AB6B6E7657EEA078F2123527BDDD9F47ABB9E5FD2A3D529E899A480B087C3BC5B42F0638E4893DE8288C6309F22B86EFAC873C679A39D2B47F86F0EA0AD95AE9FEA0DA19BD838EAA75F5D7BBA350C587BFFC6C85BE26B18A37B982D50AE8F35D1D8B0A9BFC61B86" + }, + { + "tcId": 31, + "ek": "2AE5CB5F49112D0B6F99366281F793FCE27EF6C33633D09390E76DAB705EC23B6A3AD7CC777507B644181409B9ADA4531EA1BE2E335C7C798EDAD7AFED6A6F41B104DB167B8423A071488D99CC0857F034E275723B365523453BDA36AC1130741609C12760AE7BF784D81B7B54319E02E18D13B72B34946AC19C921C4BC3FA70AFB4932F37386ACC808CA7F30051E1BC2E60308B0C753F59C5FF25119FC40FB9CA0E117CC8A3C900DA65C3427A1051FB3509D78A77DA607F0331D059990E595DAD108F9E8107BCCB793780CDC43072F1A142A7763E28863F99771259AC9FF62A37B4BC3404544E7F358B4C945373048A89795C51F26D7B3CB4B4F5639922AD52DC6BA7CB83AB1A87A3665CF42472C4B0A1B71C407F111820049BA366BE51E840A90117A7846FB3F576AC2C07CC5C46B812CC47FA3979CB39F6805C1640944B1995EEC85C94CBB8E1091D7E492D998C70346711003B775792A3A87485AF214659F9B44B17C1E230CF59FB4715164B0E2006BC8638B90929DD211598227D9351592D06840BD86748C839FA969BCCE88762BA681EB6A045E391FC325FB1F77AB6F09F70F7CD5F9422806839FAAB93156A2607A40E89A2C4D224923E567EA5A34433B91FCDA1276CDB6B5A1CBC03C3A6C0D62E30BB78FA260B56BCBB772664CF23931CA275C4118775BB920BDB93CD2671B7AB304E732A4162382FA69E88C14036787F6EA19C652A6155194377547A82662E823B52C64C819705ADB77121FDF749433826DC56BAF040235942062A668498A6300A7C7C34005E7BD0258C9A2597C9672A1C7391001C9990B384370DCF4365A2041BB8A9706F3A067BA41B73942D3FC6C5E59A4E91A43699E85D2630392E3C792CFB093553288CB4C2314750156A2F994722E4922A0B156375026FCD493DF3F37AB3CC27B9341ADA6B0E1B8138B4982DC85C776A0CA8F60B33C8612E75D0CCFAB91C750B19A58C62CB648291858DFBD98CBB1A6A47FC8DFAE28C2554293A751294F00744A2BDE10A56C3DA033FF71C4294A80731914032BAF988BD3C6812910C7AC7E03C6B98BABDC1627B874ED65B9FC02915C2D44EF1B42908770D92098A83629C6B8A9CAD34C2C0B74C56A1477EA30DAFD86B6DB6336BF03B21983C41B82391C30CA4E1230B9A22A8ECC49AB7BBAAC4297199917877324E3B0876253AC470BF89CCA461F26E305C36488443EAB219FF3B5E7F25042E1BCC652A8D69EA9E4F75499934969F31B4C2C4491CF578D1795392D41E81F527E8E2105655A289E24A3BCAB50F3506F7D0227583CAFDABB8A4DC5205595440E9B24158BDD3FB2E8FF63AAAC5282BBCA8BFE89EE7E858C6D7BDD7A1B56EB1246319193C5178245985C9C51432185B45A26369F512BD9049C00808CA000292428ACFF3385ED94D415288BA25CFBC266949B76DDC89B6359C796D0095774481232608282212643B6E30B9162E3C3199C49E1CEC4CDF193E3EC04F5A1A4F689C9C342B0601709DFAB2A9EFEC8DAB5285D815CB6ED474D6499DEE729EA8F23575B587020149843C88D573BF39E8B6D6B393FC33566E6A13C143B8099A5565B7593FC66D176A26F5385C84EA4B2B393CF20C2E2F77C2B7DC7799415867B0AFCD0D06F282F04087ED8B95DAEAB94158893CF0A647B694388CF31F388B", + "dk": "F8A83080AA5DEE0AAC402C8EFBD406E5B2B9E7206CE69CBD32C00E476A9A877652E46CCFE5F520933BCA6AA7445497886932B46B76B5B354539389476A3B9716299CA8B36B16B1AD2A14C80671C77A23CB80C3B78360B0B4CC93EAFB14BA5BA8C0A89F9EA57BEF876CF0A6096A86A2EC6AAE231AB6014603EFB916BEAC2B8FB23704C26E88FBA85CA35E5D89CE1997AFE81B0D10B114A7C0C4DFD240F862C2A41B59657000BC967DA5864CCAA4CE3BD5AE812A9333C10EAB66A403CA55FFF07C7CCA5ACAC596C9333B70937ACC15435A78524936CB1BC16F7CC249FD1AB695D79231479D51535540E1CEC6A036E4456FC9D083FFDA7E741B2B36B962FD53C429CB8785BB49515040A8A29CE1DA4AEAD0574B57756DD05B07C24AA672BF6493AFD7F53D4764B0AE82BA9171C373FB3E2AE091BA0CAB71044BF0B819A3BCAB8D584748B9B4A7E476CDE3ADAFC04B453A76BE825B6A1CC36C9250ABABBD7443336EA58BBDDA58DAAA7DA2133B2166B70273386A44CD39DB2F47194F3E2BB497E5792A0277417B91C56B79138CCA0C9BBAE09854CCC3A0647AC1D50A059C73A01815A5E0FC4739A1AEAA19C088D27944D7CD1BD549C6010D3241A30C404A01A02110A937D7E5BA13673E2C973BCE5C3A9062A8DBFB27C568A540B21DCEFA9C863A34C5E24CA7F4C0C1352B7203CA93F1A7D16940B8D16D42B09137784A1414A641D84F40A208F96530CEE5B7704B8AEFB65E4D31AF58203D73A932FFD17A4E30C21A42C63C98C7FCA38F8614A412F64E0FC2085A9991477AC4FE631FE310737C3168A4E3CFF74207C93C4B90D62C806A6DED83435A2A6501097D46ECA0E915731E048995F7949CE825421CA4F8026D9194021F26AF82929D257A1FD3382D9CDB662FA19AE8B04567A3CF2EFC19A509000EC479D5A55D52397FD8F63FE6422EC6B904FE3B0989B4ABD64A9A2FB36A83033E9ED84E8C6B45EAE10E8B621C8C4028E6F6656945093B6A7E3D45B08FE9B59E2319EEC5BACA2113AB304187B2B5A2456C91A79D8E589014B2A5B7FA11D7372828A46E2623072442776B88492EF0175752076EA281EEFC2386C6817D31CDB3C3A7CB01B710E3C4ED5B9A57669113E5B56790C9E7990042F404A55476B9415639B8AF503A74D4A1AF2FD0419A90A71BA53E71897ECA1616F504CF94B4CF17A42384E7BEE5A51FD9E7C8A8A2B676C258E7F2C271E50497863402766629EC38451C66AEA2A6F0D091E0BB4BCDF570702B4E2937C25B3749DCCA2AF7A683BD7B86F6C480A4C5AADC357E236B3A172B7EDAE4772B550A634A6EADEBA0958540770C8AE4A9AD4BA485E7A22C79CBBFBB669107E1491C9C6CB0C6137DB2458092190B81224B2A7EA1DA6EC7501832FAC27DB9C9010BC3082C7764A36D8AB44DA3660B867071A495C70D020F706233431901CD77B51D131A0E0A70AFC26CDCA7628A438E32ACA38B505E4C587752A674761916AF262714FA337F289B3245AC048C55791B1291B27EC731AF3AF6C6B82CBF09F12140A90099C427723B918184C142E61DA40C1721F634E65B58E9BB9B21BA9CB37A50FDF53F41C3610DA08A161A90D64B8E0F218FB0DA40C6565808EC79797A4E3596CC2AE5CB5F49112D0B6F99366281F793FCE27EF6C33633D09390E76DAB705EC23B6A3AD7CC777507B644181409B9ADA4531EA1BE2E335C7C798EDAD7AFED6A6F41B104DB167B8423A071488D99CC0857F034E275723B365523453BDA36AC1130741609C12760AE7BF784D81B7B54319E02E18D13B72B34946AC19C921C4BC3FA70AFB4932F37386ACC808CA7F30051E1BC2E60308B0C753F59C5FF25119FC40FB9CA0E117CC8A3C900DA65C3427A1051FB3509D78A77DA607F0331D059990E595DAD108F9E8107BCCB793780CDC43072F1A142A7763E28863F99771259AC9FF62A37B4BC3404544E7F358B4C945373048A89795C51F26D7B3CB4B4F5639922AD52DC6BA7CB83AB1A87A3665CF42472C4B0A1B71C407F111820049BA366BE51E840A90117A7846FB3F576AC2C07CC5C46B812CC47FA3979CB39F6805C1640944B1995EEC85C94CBB8E1091D7E492D998C70346711003B775792A3A87485AF214659F9B44B17C1E230CF59FB4715164B0E2006BC8638B90929DD211598227D9351592D06840BD86748C839FA969BCCE88762BA681EB6A045E391FC325FB1F77AB6F09F70F7CD5F9422806839FAAB93156A2607A40E89A2C4D224923E567EA5A34433B91FCDA1276CDB6B5A1CBC03C3A6C0D62E30BB78FA260B56BCBB772664CF23931CA275C4118775BB920BDB93CD2671B7AB304E732A4162382FA69E88C14036787F6EA19C652A6155194377547A82662E823B52C64C819705ADB77121FDF749433826DC56BAF040235942062A668498A6300A7C7C34005E7BD0258C9A2597C9672A1C7391001C9990B384370DCF4365A2041BB8A9706F3A067BA41B73942D3FC6C5E59A4E91A43699E85D2630392E3C792CFB093553288CB4C2314750156A2F994722E4922A0B156375026FCD493DF3F37AB3CC27B9341ADA6B0E1B8138B4982DC85C776A0CA8F60B33C8612E75D0CCFAB91C750B19A58C62CB648291858DFBD98CBB1A6A47FC8DFAE28C2554293A751294F00744A2BDE10A56C3DA033FF71C4294A80731914032BAF988BD3C6812910C7AC7E03C6B98BABDC1627B874ED65B9FC02915C2D44EF1B42908770D92098A83629C6B8A9CAD34C2C0B74C56A1477EA30DAFD86B6DB6336BF03B21983C41B82391C30CA4E1230B9A22A8ECC49AB7BBAAC4297199917877324E3B0876253AC470BF89CCA461F26E305C36488443EAB219FF3B5E7F25042E1BCC652A8D69EA9E4F75499934969F31B4C2C4491CF578D1795392D41E81F527E8E2105655A289E24A3BCAB50F3506F7D0227583CAFDABB8A4DC5205595440E9B24158BDD3FB2E8FF63AAAC5282BBCA8BFE89EE7E858C6D7BDD7A1B56EB1246319193C5178245985C9C51432185B45A26369F512BD9049C00808CA000292428ACFF3385ED94D415288BA25CFBC266949B76DDC89B6359C796D0095774481232608282212643B6E30B9162E3C3199C49E1CEC4CDF193E3EC04F5A1A4F689C9C342B0601709DFAB2A9EFEC8DAB5285D815CB6ED474D6499DEE729EA8F23575B587020149843C88D573BF39E8B6D6B393FC33566E6A13C143B8099A5565B7593FC66D176A26F5385C84EA4B2B393CF20C2E2F77C2B7DC7799415867B0AFCD0D06F282F04087ED8B95DAEAB94158893CF0A647B694388CF31F388B441E291C200FCFBF27046E3726DB059722175AA36EF13A26CDC41E98D102ABB1C09F22FEC179697261D1DD53E9A68839304EA059A137804706E7C0FB3FBA72D0" + }, + { + "tcId": 32, + "ek": "04D90623626294492DD32499BC80CAB46367A617173BCC6D2934246BB8977C882620AA463B8A66DCB8726CB2BB69C480EF942F85C17B96C133EDFC4464603E8D998B5A020EB5D47F40E62C1E58BCB562B904D567616265E2259C04E463E84BCCFEB78027E97B15B5AD6B923728156E516A5C72D987A7A874B5AC6376FC13F42532BD0508EC13474FA85DE3145535B5C88454A53C5B46F7F1AC55E179DFA2A836FC72A22B53FDBB3ECEC9972A2A0AA1614373A5098EA3569C1A7E6BE81651DB8ECD1023834B8AC295803831975EE376DC771C8D128E431B8B334547593A028EEB5576330AA8E4BF784B4406D869146B571BD78D7E087E13989849F3ABC778CB13F45C4152662F68CF0B3A7C92091A6A6BBF3416739E333195531CB026C9D6D7AF9E2C916D98B07E67831B243EDE8C534E367568DB8326F585CE77B6C4B6C6D774AD1C4224ECA1995CF3CC746A5BF69629BB23C7A51BBD79C40C638705751597FEE70149E6867EF7AEEBF09498C19D98B328D700CDAB09B0D864622E6786FBB4B5F823328A0B0521536E9C5985C8C1A9D44564C1B1B93CAB9434E9B4A4608645BA7F85647DB84886B3BB83952177ED4A29634A4722F9B05D16666F153346C87BF6EC6C6904A021FB75674A0B76F08DE129954079A5D64A4486E69446E4C23F6159A3261C4771B020C06E0AEC9249F4CB5CB423FE35BA523392E51967C6F711AA7A0A8829104AC28F787A60CA377B4AE7BA662B6D7177049A7063D1838ED3CCB67B706C05D6342FE6A4BBF254E9C97A32983F78369F43522CFF4BCB3F990FF4099D11AA2C92C803E93420D1819FB5B47E870684BB4074F8AA73A519CD6BB16E5557A909517315C79BA64C222E679735771439304590E65CFF6A970C5150C1F66B909AB88510507B88585978A0ED992350F486AAA114E1042B5776C9683C477A7844D9E51106A108384C487230760B0669E45A029DE42B6850C6BFB2ADD726BC137A163F981BF0918D2D765AF3055F1E9370608516A087C212316630502FD5071F419C60F4873D38533AB0331421FB13E8A428117A2485D107BF5B53070791F1603498E575373ABEA7C6CA28D65F1043C8E9787EA994750E9C3FD6A946F6158107B716205B7BF4D95FC7299DCEB73B7A00543AC5C2EEA39378172381556A1C553BEEE47290A71133C051BD4591F587C1E39CA6FDF47018BBB35F56095CB7ACFB4440EE82C108138D66AAAB5BC30EE26C71AC6539A84C764176A3548B2C0978BE7C90C314E1113A23C86C794781B1BAD9432B24DBBD4DA0BB3EFC290AEC03B676BF12A67E44A2B700F137BB4B2F8CE3A504E6982B47633B66CC113422BF68CFB483231E94068B58B809D88000676EEAA30DA8C7086354CC25389CC4D29EEA029C75330463B1A3CF09B64C5CB7649B92632A4053857152374693DCBB3322300F6CA59B582326A4426CD296116AAC7DACCFD2087DF27C072F946F068600ABC48DF5E4CF88988C10B05193018A2737B8BC672AFF44C1F63C53B3C756BECCCC3C973348C6673FE0A6724B8E2828817516635A35318BD238FD40733B2707946A533CAB450249AEB79970E75A0833C146B225357516303DC67AF3801F9DBAA6CA9AC38D3A14992337803014F132BD04C36261CA8165E2A1572B8B894ABA4C9A3F77E7B3BFC9", + "dk": "B3F0875604C6E075B11BC20EDF46472ADB8429BB7DDCB29E9531485374C538934F2B4CCA3E58C364F76A6D745B8197CB2B051CB8D2BF03832DF56251F14AC8712BB6307C69E07696DE91480203B461EABF3FB87934533EE3933169C3410D490A08B60901D904B5DB5FA6514268819D75E8B65AFB8BCD8C1EA62A642591BDBEB9BAA4A35CD93172A82B0D3824697FD843BC552CCC9005558359AACA4DE1D650F65933F639B7183B9E488B2DAD6060B9A35F97BA7ED6C427C492686DD669F557300036225C2835B2A87871254591DB9C3AFA24F606B188387F50E6828A13C5A47C2812C94D83807F7174C74876369E8C76FC796435BB7AD5309627438974C7396C2911A4572CF4C050339A4511245B789491644460E7B16A6280983627A7F1331D63D49DC4A7B997ABC987C54BC3E65193DCA40BF0A258C1BA1EFC024087A16E3C74C32015418B2B263C87C02457240874B1C1A9246021FD2248A6FC77B978B511950436D0A246E7C5FDEAA7B3655EBAAC004F721DEA9A4C7FF54D1D06A5C41BA811F9A15F26A36981C8A91BB6E6A1A67D4370982A0ED5D89ABF70BCCB0CB680E760D0CAA76A258433BC7E23A4094D349AC0C88AF8C29BBB6191EC3B9EAF10A61E115C7A20A09DA19A3FA0426B1B308520054E247393A845D2D951C205173F1C78B4511EB530594BD84435DC7FD529332DC1BE2F409A63A4B4382C7093543416702BD410A889798A80B56363C009322C55EE1510FAF2BA7D0A7F74D6135FF3738CEA7FFE97A16AD001353797971595A8D263A0DC67C1B8B927A23F4AD62E1BBA652976076D01CDFA50B6B23477994409CDC28059B97979852F50E322E3E78210D73752F5787D6B1855093AD1B0623FB87E66C35A26793426A58D15E00C4D005647A71AC4DB08D4D47CEF7B7533A76541640DFC1846EFBB49E2EB8AD82B2123895E5DA83C39354E9A524FF14294382B69EFF0362848363EB8C9AC293F40158AA721C1EB6A5547A23D5D1A420FD547A6A6AB5175C18F78A8F6626C4C448F28B93D60F5CD66542FDE84730595B338A16690387E868C871DA91E8A37AE60545DA5FCACF6AA6E230099433686B6C70770D17E8649B069C1B847980ADC016125F1B5D6BC9672996A5F9A8A648050337882E3CC6D42DB82CFDBA56F0C6496C63B2CD34483AA35BC32B850545F1B33057D308373F747AE6A112287B9CDC2BCF39738217352B13B17ADD18D69F32054F409C3B4C3AF499E6F9211A6EA582AFA0F37117590088533230FC9A423BCF97F0527BAB63C8C3DC835A50B2D84A2512C5096E346B34B3B00749A774803C7338653F376ABABF850F88460E1F76A7172145017CBABA57E73C277FC936C2D6A8DA55646B6718CC4300F70E520907A5F4C8A3D6164377E5B8D1F1AC54FF6A8283246EB74654AA1431AD1B1A88845BEE56A972466F4EB73AA20103DB36F05608551C616DF7034A8846862AB36B97172E3C56CF1A17ED684989532616C0B123FA09B0B7CB482F559F5E59A89EB1135723BECB78EAE68B47F5681359361D27CA7BF525195710F4004C9976910D104BA10740AC53027019C7F6FE249BCCAC74A2C92BAD1455EBB751A775F0F18422A64455B672E59FAA173114A04D90623626294492DD32499BC80CAB46367A617173BCC6D2934246BB8977C882620AA463B8A66DCB8726CB2BB69C480EF942F85C17B96C133EDFC4464603E8D998B5A020EB5D47F40E62C1E58BCB562B904D567616265E2259C04E463E84BCCFEB78027E97B15B5AD6B923728156E516A5C72D987A7A874B5AC6376FC13F42532BD0508EC13474FA85DE3145535B5C88454A53C5B46F7F1AC55E179DFA2A836FC72A22B53FDBB3ECEC9972A2A0AA1614373A5098EA3569C1A7E6BE81651DB8ECD1023834B8AC295803831975EE376DC771C8D128E431B8B334547593A028EEB5576330AA8E4BF784B4406D869146B571BD78D7E087E13989849F3ABC778CB13F45C4152662F68CF0B3A7C92091A6A6BBF3416739E333195531CB026C9D6D7AF9E2C916D98B07E67831B243EDE8C534E367568DB8326F585CE77B6C4B6C6D774AD1C4224ECA1995CF3CC746A5BF69629BB23C7A51BBD79C40C638705751597FEE70149E6867EF7AEEBF09498C19D98B328D700CDAB09B0D864622E6786FBB4B5F823328A0B0521536E9C5985C8C1A9D44564C1B1B93CAB9434E9B4A4608645BA7F85647DB84886B3BB83952177ED4A29634A4722F9B05D16666F153346C87BF6EC6C6904A021FB75674A0B76F08DE129954079A5D64A4486E69446E4C23F6159A3261C4771B020C06E0AEC9249F4CB5CB423FE35BA523392E51967C6F711AA7A0A8829104AC28F787A60CA377B4AE7BA662B6D7177049A7063D1838ED3CCB67B706C05D6342FE6A4BBF254E9C97A32983F78369F43522CFF4BCB3F990FF4099D11AA2C92C803E93420D1819FB5B47E870684BB4074F8AA73A519CD6BB16E5557A909517315C79BA64C222E679735771439304590E65CFF6A970C5150C1F66B909AB88510507B88585978A0ED992350F486AAA114E1042B5776C9683C477A7844D9E51106A108384C487230760B0669E45A029DE42B6850C6BFB2ADD726BC137A163F981BF0918D2D765AF3055F1E9370608516A087C212316630502FD5071F419C60F4873D38533AB0331421FB13E8A428117A2485D107BF5B53070791F1603498E575373ABEA7C6CA28D65F1043C8E9787EA994750E9C3FD6A946F6158107B716205B7BF4D95FC7299DCEB73B7A00543AC5C2EEA39378172381556A1C553BEEE47290A71133C051BD4591F587C1E39CA6FDF47018BBB35F56095CB7ACFB4440EE82C108138D66AAAB5BC30EE26C71AC6539A84C764176A3548B2C0978BE7C90C314E1113A23C86C794781B1BAD9432B24DBBD4DA0BB3EFC290AEC03B676BF12A67E44A2B700F137BB4B2F8CE3A504E6982B47633B66CC113422BF68CFB483231E94068B58B809D88000676EEAA30DA8C7086354CC25389CC4D29EEA029C75330463B1A3CF09B64C5CB7649B92632A4053857152374693DCBB3322300F6CA59B582326A4426CD296116AAC7DACCFD2087DF27C072F946F068600ABC48DF5E4CF88988C10B05193018A2737B8BC672AFF44C1F63C53B3C756BECCCC3C973348C6673FE0A6724B8E2828817516635A35318BD238FD40733B2707946A533CAB450249AEB79970E75A0833C146B225357516303DC67AF3801F9DBAA6CA9AC38D3A14992337803014F132BD04C36261CA8165E2A1572B8B894ABA4C9A3F77E7B3BFC9A9B8C7511449DCD5242F49C5AA69BE640FB1280811C087FA8902284DCF40995F76E76448C7EDA5C6EDB387685C7826BE931F5C0167103F3F387CAA055943719A" + }, + { + "tcId": 33, + "ek": "41CB11FD605C21821E355223A154A2C02364C4547B24A942F2C60A58BC04EF9A104B832BF8D35EB55771C523BDD13B33CDF02B053B1480681F6E4A87C603A4C0E25F2DC4ACCC86417C84B8381043AF084154716B0DB225BC56BC556C64D2E4985AE08BCF84B7FF058DFC6C01769B008621BF91D265FD397461520852B83A4ABAAA3CD26606DAB17360059B6B004B0C3DEC4256321A6AEB86446C4A0B9488524F8991F5C217E99588A38C316286977C354AF5568794429D3756B3D23B93EDE95FD00B6E83458F3E89BB29D79D25442807448BD247CFF037C0DB52BE1DFB6BA7D73AD1495BB72C6BE7B6629CB66F52E63B2BE798EAB917A96220068A8345EC064FDB37C641622258A28E5976D80139B87B7486B497822A58775355AB672C30FC135E8460FC13B931561A22B330FBA382CF58C8B36B0BD831419F1573BF755FB3841D8FC096C48C00B8066F78337285EA814F3C396392BD890A9585121E738911DEA82469923CE4778E05240E120C4D2432AE7C38C84C161C31B38594B60A63B383A79917F4E89EB231093D007097CA6F9CBA96C5142A9A3254A5242498A71B0CB4C308A04C065147B351BC474969DE116EE1526DEBE95DD3927D23E82225C530A9C47834F9CAC26243EF3C52CB6384834025E8B00FF15789B02ABAE7A361C86C537B1C64640382FF986C29AC3F2DD51312308B1A4689F7D2127F556780F62A85341E40F9A2D518B73DF450E1F65AEA1A6BF9E99BB7D900218BBADD9B39E3AC94F1E2A71B649226A42D6B67CCBE606832B70283540B9DB6925CA35AE2D652F36506789424DC20539E87AA52460265205371744E7EAA54C0E36E90C29B7A82174DE4A641A6C390039C13099F06D32C8D9B96243580C486AA8E78AA60355877578EE782441128C147637A0A97671A543405801551DC8DFD1401D6D3BD359168649959A23ACE0495BD92E39E799A0F491AAF3A71B656C4B624821516E8743FB300D1F9B62467BAE8F720A250BDFB101FB82688091C14F20873DBF66109225719851138A795240BC7A9AB5EF6B30B535C4932262FE0091231F372AB859F7F77032A06BDFC8173BB6592408C0A911899FCB17B80B3B0822093044186BA68BDD11CC190D51C057B6E6D4274F27C4BBD4B8404E32E23F9812B3B06AB09129C668BA18753F340CEC9CB531D9255BE548557070E9603274DD93F707ACCE4737F41713762D10139A1004334522F657181680D058AA8C0B6681B4544687A1700304CCB440EA4868FA921434DA1AEC397401BD092A5D29B5B959CD321641D90BF13B969E4EC78DBF5546FD120F24AA9CA93C930E3CF5C7B78524181D5061F9B6315110ABC5102B58A1248364174B64AA5E9827B607527831A400C35635E0388661456A092744F2928F008CEA70183825CAC03CC8C0B58CD9AD605CBC82A35219303C18A538C7FBD17BD7E888DAC2B096C23A19DD0475242670E0B1D0B3964021B5F812822395999F72970F8B164F1A684063B0C04999E4ACA6B32B49C7F078AED73718DE0780E6CCDBCC99BD51C2B5CBC79DF09A21E40AE1E729D031C344898CE3C7C6BD1D415F15AAA7845B4FDB512994159ECE84B275915F2D886B22295CCBC6FD3FBA6DFD71EC0FDD82AE87D5CEE6EB582F95382A142122BB4AC50CC14F045BEB5EFB91E84D0", + "dk": "BEC821ADB5C52BF0B4A6EBA90874095DD70A1EA66A95465E7B183748E61F8AB98472B071795B5A9733B91C3C28322B71366AA5DBE3ABCB661E8886018D0954CCD9091BD87A80B9447702BF2A344E838734334965F1A8102A0C5BDB9A99DDE2842889721C96724F6502D89AA04010468934B73B8238A943838638158A6AB847673E8EE53E7FB698BE4703ECD0BA60873844074F1E9537724CCB96D25A1039CFC64C4FFC48ABA4F2A7E8E2724672C1E9563AEE97127DD69202100CD6129530905E5F027B442C220B36636CD60DFE649944B204FB38BEAB35BB92A81017888579BAB641051D88D2B99E01B7F813531A3587C195521EA1177EFA7778A623E0595908D3A784F4628B7A8888F6251DDC329D86ACD2BAB17347C888A1325CD1BEF33766BC703373916FEECBA605E4CADC8492E8D565E1D6716DF47009B271E7C60A0930A3645632D7CC0636B6167688C55CE02E09B4A7D14915917C6FC11A34BC04553D505A5407ADDA0C2E267A15C3E386320809DE945A91A0AAF993AC175A4638F87A04101E2A1C3F651492E7642EA59C8DDBD42C09B6474E2B8DCC46B076C1834B7177ED7B67FD3547C7E676806831FCF67DA4FA0C7564C4613C506D0B122F21C28BD9A8B1D293C4425FA443303FB52A04740387D99B3C68985724ABF114C8C5C9BAA90094DB46BEC5C3315CC4610AD566B2C78B8B073381EC463BD018C49094D7390B76B504CB266E8EC7C698F55AC3AA1B695280EC438BD2D96B119209434A72D070799C2892C2367FDE591FC3B358FEF5CF5460526DA2960E67A65532AACCDA6A19637CFB382FAE9B0D763A8853A8B78B8534B9C21EDDD667E4461B5C865F7C41AB34D8BBCA6A3909D275C1488E86F92C44B233CE52921658618A6CAD039C6E2874B4D7B5151531AD0176358BD59CA0D3AFEBA1743882746F9BCCA0EC9EDC33C95DAC27E6188A16156E87F22B42819A2AE93E90A4826F606B1C34B4B12C866C75569654CA7D3CA510C20AE118C8C8C2649BBCC52A66C9BA797D2923B7BA98A261A0A86979610CC9CE7B01CE7A1C60BDE1BE08A75617DBAB67995B9D7A5A2C888E26C08DBC20C55DBCA2BD112B66859B27875AAAA69DC9BB0D5968BAD68BB405571C1211CDA4163107247F4B9734A1262CB00B462225AE45398863616197DAB514257AADB197E5712B19C2C5C1C04587890E215A4AA91A35016C358CE2B0B8115B9BAAB759D3346D5A3206259C45554F8F838F7E9415DBE67B10821945E8AF278137EA7492AD203E9268388F9CBA2B672FB1456FC08B3CF06C65401A8B049A30646985E0A322CC2868FE0B6FE21827939232A227979ADC0227224B4FC52F353CB0E49A2C3CC536D30B12A414158D1BB535A1BCA8D631D6D10D663899D0F81C6C3530806C898F1473313984DA871D1262BCB2312C8E921BE739BF84EB8850F43218FB3C0B75621ABA202A30B52F141207850CBAA834532312DC11612702A239764712101AEEE20AB2C82924568DA02AA6EEFB95CA4C94BC154A809872FEFB81149919906AACC9C39F3037269BA819D887B5435983179C74D31701ED38CE6DD4570C33C155B2787E0B132369A7013764FCD0B38CD65020D618D79AB172E651C87B1941CB11FD605C21821E355223A154A2C02364C4547B24A942F2C60A58BC04EF9A104B832BF8D35EB55771C523BDD13B33CDF02B053B1480681F6E4A87C603A4C0E25F2DC4ACCC86417C84B8381043AF084154716B0DB225BC56BC556C64D2E4985AE08BCF84B7FF058DFC6C01769B008621BF91D265FD397461520852B83A4ABAAA3CD26606DAB17360059B6B004B0C3DEC4256321A6AEB86446C4A0B9488524F8991F5C217E99588A38C316286977C354AF5568794429D3756B3D23B93EDE95FD00B6E83458F3E89BB29D79D25442807448BD247CFF037C0DB52BE1DFB6BA7D73AD1495BB72C6BE7B6629CB66F52E63B2BE798EAB917A96220068A8345EC064FDB37C641622258A28E5976D80139B87B7486B497822A58775355AB672C30FC135E8460FC13B931561A22B330FBA382CF58C8B36B0BD831419F1573BF755FB3841D8FC096C48C00B8066F78337285EA814F3C396392BD890A9585121E738911DEA82469923CE4778E05240E120C4D2432AE7C38C84C161C31B38594B60A63B383A79917F4E89EB231093D007097CA6F9CBA96C5142A9A3254A5242498A71B0CB4C308A04C065147B351BC474969DE116EE1526DEBE95DD3927D23E82225C530A9C47834F9CAC26243EF3C52CB6384834025E8B00FF15789B02ABAE7A361C86C537B1C64640382FF986C29AC3F2DD51312308B1A4689F7D2127F556780F62A85341E40F9A2D518B73DF450E1F65AEA1A6BF9E99BB7D900218BBADD9B39E3AC94F1E2A71B649226A42D6B67CCBE606832B70283540B9DB6925CA35AE2D652F36506789424DC20539E87AA52460265205371744E7EAA54C0E36E90C29B7A82174DE4A641A6C390039C13099F06D32C8D9B96243580C486AA8E78AA60355877578EE782441128C147637A0A97671A543405801551DC8DFD1401D6D3BD359168649959A23ACE0495BD92E39E799A0F491AAF3A71B656C4B624821516E8743FB300D1F9B62467BAE8F720A250BDFB101FB82688091C14F20873DBF66109225719851138A795240BC7A9AB5EF6B30B535C4932262FE0091231F372AB859F7F77032A06BDFC8173BB6592408C0A911899FCB17B80B3B0822093044186BA68BDD11CC190D51C057B6E6D4274F27C4BBD4B8404E32E23F9812B3B06AB09129C668BA18753F340CEC9CB531D9255BE548557070E9603274DD93F707ACCE4737F41713762D10139A1004334522F657181680D058AA8C0B6681B4544687A1700304CCB440EA4868FA921434DA1AEC397401BD092A5D29B5B959CD321641D90BF13B969E4EC78DBF5546FD120F24AA9CA93C930E3CF5C7B78524181D5061F9B6315110ABC5102B58A1248364174B64AA5E9827B607527831A400C35635E0388661456A092744F2928F008CEA70183825CAC03CC8C0B58CD9AD605CBC82A35219303C18A538C7FBD17BD7E888DAC2B096C23A19DD0475242670E0B1D0B3964021B5F812822395999F72970F8B164F1A684063B0C04999E4ACA6B32B49C7F078AED73718DE0780E6CCDBCC99BD51C2B5CBC79DF09A21E40AE1E729D031C344898CE3C7C6BD1D415F15AAA7845B4FDB512994159ECE84B275915F2D886B22295CCBC6FD3FBA6DFD71EC0FDD82AE87D5CEE6EB582F95382A142122BB4AC50CC14F045BEB5EFB91E84D0AB270D2864E5397E0B0D409DAF24049C35176E35A321D1C506A4A95745792D461C8BB09969CA5C679FA25CBDB81FE69726D92170B6627F4D212C63074FA9E1C7" + }, + { + "tcId": 34, + "ek": "18730A96E0BFA82A8B4839511CFB50F447CD73618CDB7597C79B039B930192CA0F163C4C794BA78876C258D472E01C2417B08F5A886088F7910DD86993647BDE5278A01065A0C589D557A3B5A4B97F7247FEAB117437CF0B64B256FA19762636FB426BA5A62D13CA0AD30B32F244A4F8B8386B930062B12267228190120229A93A718A2B40C8952F06212982C78AD5ACD31B043DB608296081CDA71681FA6237266FE1880D31AB2471EB66A4A4B158F14BF42A67BA258542805BF257A03593B66E0C38EA0CCF215A524138473441A6BCD927C7810BEA90B75635B583EBC9F31274A5A6A37F66152CCB9528B430A74CB57C230BC9451F96288F04C4414BBBC99E37141112C8B6B0A9F125632BEB721024228191B0B8753565EB2AC778B0F88394FE0ABF8CE563959A56C4BAC69C21455C7A984514BA4308C2BD5AB744390540041E29614AF35C9E4E007F6824231A66195B0158EF9769FC52312A6C369B51665C16A91686613CDB24C263A71F3CC3873B85E674AED26C330C447D8144561253B983A80D2E006BD60007FADA857EB52BEF8615D33B828A12C3FF0C2D45C196C8E1BCD892996244231FD19F7622B00734149854AF6F6A2688698ADACC4BE347B152177673D69785674B4760A32506009BF591F7934C78F1BEE4C43576411FD2883A2602CE54F21E1E89BC66066BE3B5BE3DD1208A2C197D88AC644B5DC6E105A70B97AEFC1E33563B5FD34776292A0F732628A3107DAA09B0A1C171E7305751B03F03C1D885487FF438CCA5B32B59CBD0901DCA261BA063587FD581B37B7B6657C65CBA52EEB05DB4F38FF0347C08152130511FAFAC488788B55A497D7A01342BE38D97367744D0AB304365ABC88E9D90A12F114B54105B1406CC9D123888B8A28A58AE5BA5516D459BFA91C0F53B13F4520955918369E53B98134B9B971460295CF46081EC6B26CDC24F93704C0CD03484A71330FA5E720952AA398097B0B25BB11C1E69B1E799919E439715C2481E2C3582036BFCF32117531ADBE7322664C5AC8B2CFC8391AFB496CB79212074520C63506A16CE4DBC3BE3F7483CD58A01405F4C5B5F45745CEF42365C991851042825316D1C2B8111763C78A2431E780E4A3A044E41219350C6AF2846288B5AFC657876879ADF46734BF228EAAA8E9CD4A8B648B92FC807CDD9A0F7CABD836C8B7D6823C8C52FDF95181D504943E5134B4536BF967A2D133BD9575F252C54205C0E2EB88E44C02B9AB98696722922F12D68D16160592763AB451D8814A9D78BE2019DB9FC1FC2A1379B86487FD64F286585971A094593714AA748A1A44FD5F16B6C94137C0541B80B39C6677D609937A4F86234504E0B195CD78C741216CCD2324FC71435C4D1136038027E33B31C3A53EDD5B42FD792A6D002BB879DC603AD7DD51AA808197AFB7DF282B9E68019529C61652760CFC31C22E87A71D0C91A6BCDD69C28A6D68FDAF4036B2A6C731A07F340CCEF04C228F9CA6F28265FFB07004A33BD7A2ED1F059DA60B4EA2C18BCF40257AB3D90E4AFEE44B870F74AB1DC5569020AF6F325FCAB7F7241901910439C4043F98A3ABB693A86D1C7A3C1559312A1D15B05294726E2626FD36C786B8CB10C9846A3241A59B3927E8DE6636697A4F4702C273BF271F4CA232F58C96DE5B0C12FDD", + "dk": "6E83A32B0C3FB91805C1851B7D69477B7C8DE4249CDF11C79F043D04B9159FE08BC1F61405B9CA58225A289BA87E4885F410077FCBC5788108A9298B55EC8F96EB3514193078102D3FA240F6151F5C06BB58B91FC22A7A4829655AD284C683BA7D98769CCB01F4AB1081DAC6236733189349BDE346AD87081F2349E03737CA74994039CBA3896344A4C3F101B707E7B6F7B952B62707BA10B6F76245F2428F45C06519895B820CB25DAC0270007F792AC88D939934167E5338C5FEF8CF4F59C65D54191DC86546C5BE7B4A8DDA47C8DFE2B193E692EB92C519291E29CBCA26364DB312AAA3005E72B34268D6380992687FB327A4F77D8216B23DE76D8F4A70DD5B0DDC032FD972B3A7C0B0F4056D79AC73A621A872577A64A448FB3BBF8DC9CA56E251A5379296C20A50AA488FA190BE95AE386A1AA3965871637D74DCB44FA0BE1B352F0BBAB5E556BC701C0CBD080BF8B23F3ACAA451E54ECC538347CCC42CB426086B1155015490794FE606C827072976C5C993981EAD54209FE16FA9898509866728D62F6C18240920561ED2A4FBAB9040EC080804BC0DC4AA409334007C610F394DDD0C18380377C2106E13A1888B1B3E03751330A113B131A17564B5BB996197247B0C426BBCB4A733E32064E63B4460543DB660D2A70B17207C5A8527E128BD50074F1C2A4BD8930EC87B53F6F6B73A29A722C762ADB7668D56618ECA0303B802241284E2E52EB340B375B33A56C28C18B444AD6839ADF7B7831C69B47B39BDF58938618712EC6F9072469CB2BB716601D83A4F5F645EEFA5C777998830532381910F57DA89C33B594423388660A9D005326D2B9B6C548D4A00431C60640C89B0D4B61EFBA0155C9262BEE448FD4246A786018864C3D59855D9521B5B65950410A120D6C8C165B47163B2AC8931C54ACB7825C745D60A5E37345D3B97B7CAC7FE30C6619497995082D6B977612206B04532EF191543A40610699001977E5599266123BD479C51B694689FF6CEA07A079CFC89702398537BA50C234FF9675CA45095753BA923609A38DABBF0C4B0881B406DB89BE960C537D9356998126B0AADE13B2D432B2C3E0962879157BEB2C2E91AB8C2C540DFF4121DCA7CCBBAB4DB545D2A4601DA6C5BDCFC3D6969C72F4A413E37955FB6818D4A54B9DB9BAC93BD5209A0BA52C328968386644254B8109918A56C4124C644AC967CAB4FE8B4F70178A6868D27728613400F431B60556B7964D615B8C7A64DC5496DD55F4339A982327B09CAA894E716583B991D9C556E627D72B72D0FB2014FCB39E08348651B51ED9ACF8360623B44370DE9C8266544253088D4634702539E4BCA895D033CC936A7BAF2260B573144AB4C1725560617889D468317071DD050C514B77DFC67724F94BEF78BB8A9C02A1A86CAB6E8C1BA11265B94ADDB66B051528168427E91149B6F4C3D85E41AFE3A2C1C785443A37F0A84938F407E802A2EF002356849B9339AAA4057A1C21B0A5E1135D2AA917766C7E2ACB6F171449D5B0BD3F10EC5EBAC9324AC41619766B70CF9747DC95C1A195977EC178D401B40C6B46182F7889F28B28166C316828D350B53A0E79C52F8714B40279553B77C1BA20662AD1508CD18730A96E0BFA82A8B4839511CFB50F447CD73618CDB7597C79B039B930192CA0F163C4C794BA78876C258D472E01C2417B08F5A886088F7910DD86993647BDE5278A01065A0C589D557A3B5A4B97F7247FEAB117437CF0B64B256FA19762636FB426BA5A62D13CA0AD30B32F244A4F8B8386B930062B12267228190120229A93A718A2B40C8952F06212982C78AD5ACD31B043DB608296081CDA71681FA6237266FE1880D31AB2471EB66A4A4B158F14BF42A67BA258542805BF257A03593B66E0C38EA0CCF215A524138473441A6BCD927C7810BEA90B75635B583EBC9F31274A5A6A37F66152CCB9528B430A74CB57C230BC9451F96288F04C4414BBBC99E37141112C8B6B0A9F125632BEB721024228191B0B8753565EB2AC778B0F88394FE0ABF8CE563959A56C4BAC69C21455C7A984514BA4308C2BD5AB744390540041E29614AF35C9E4E007F6824231A66195B0158EF9769FC52312A6C369B51665C16A91686613CDB24C263A71F3CC3873B85E674AED26C330C447D8144561253B983A80D2E006BD60007FADA857EB52BEF8615D33B828A12C3FF0C2D45C196C8E1BCD892996244231FD19F7622B00734149854AF6F6A2688698ADACC4BE347B152177673D69785674B4760A32506009BF591F7934C78F1BEE4C43576411FD2883A2602CE54F21E1E89BC66066BE3B5BE3DD1208A2C197D88AC644B5DC6E105A70B97AEFC1E33563B5FD34776292A0F732628A3107DAA09B0A1C171E7305751B03F03C1D885487FF438CCA5B32B59CBD0901DCA261BA063587FD581B37B7B6657C65CBA52EEB05DB4F38FF0347C08152130511FAFAC488788B55A497D7A01342BE38D97367744D0AB304365ABC88E9D90A12F114B54105B1406CC9D123888B8A28A58AE5BA5516D459BFA91C0F53B13F4520955918369E53B98134B9B971460295CF46081EC6B26CDC24F93704C0CD03484A71330FA5E720952AA398097B0B25BB11C1E69B1E799919E439715C2481E2C3582036BFCF32117531ADBE7322664C5AC8B2CFC8391AFB496CB79212074520C63506A16CE4DBC3BE3F7483CD58A01405F4C5B5F45745CEF42365C991851042825316D1C2B8111763C78A2431E780E4A3A044E41219350C6AF2846288B5AFC657876879ADF46734BF228EAAA8E9CD4A8B648B92FC807CDD9A0F7CABD836C8B7D6823C8C52FDF95181D504943E5134B4536BF967A2D133BD9575F252C54205C0E2EB88E44C02B9AB98696722922F12D68D16160592763AB451D8814A9D78BE2019DB9FC1FC2A1379B86487FD64F286585971A094593714AA748A1A44FD5F16B6C94137C0541B80B39C6677D609937A4F86234504E0B195CD78C741216CCD2324FC71435C4D1136038027E33B31C3A53EDD5B42FD792A6D002BB879DC603AD7DD51AA808197AFB7DF282B9E68019529C61652760CFC31C22E87A71D0C91A6BCDD69C28A6D68FDAF4036B2A6C731A07F340CCEF04C228F9CA6F28265FFB07004A33BD7A2ED1F059DA60B4EA2C18BCF40257AB3D90E4AFEE44B870F74AB1DC5569020AF6F325FCAB7F7241901910439C4043F98A3ABB693A86D1C7A3C1559312A1D15B05294726E2626FD36C786B8CB10C9846A3241A59B3927E8DE6636697A4F4702C273BF271F4CA232F58C96DE5B0C12FDDC6A88D35B37AE8F018675DDA3DAF7180E610E05D8303A6D88DBC5C4401E93BB8D608A86EFD989F3254D89A316A7EDACEFE5E455689CFA3A4DCD2E81D70B5663D" + }, + { + "tcId": 35, + "ek": "D60C8D26016462320B28851698B15D82A8BE27ABC80B386B76BA0192382ADC53934F23A3E58A914846419D0C7D3707169BBAB88F4550EB9167B961BC00477C6B96CDCDDAC62C133278D437BC54BAB0135E82A13083E74A4F160A7808C7E08BA485988DB9B3103DF7225320655206C74BA185031266145628FABC2D22BC5D6F704440A202AA3A646A8BBE55F3A6A5752E48F3A63DB3B35E0C56A3361232346CA5B156ACB8160FD3C6DE022DD5EB5DB8FA49CEE34736A13E24D551406A06776635A7822D77647E33900792A059A7EB4392D0026CF48EE5685C0F880D63A4AB57E8BE27499A41C39AEA37B6A2933CBF4C6F09D1BC345854B531CF0A75CA46E74D247230F9D705BDA8569CD9693DF8CDF6A71E8D702F3C0BBFBA9421F2873558B4C4E03546D453A24798B712B0305497BBDD28BF2BD1A961606AB7AC759BDB746AFB35259478EA6269E581844C268E9CFC456DDA1207D946854CBEBBD94AFE263C0D4627B0B745694517B6D68611349CB8238F4387AFB7A8987D803368331776813C4A0A4870C17D7A8967D21C40A07865FE02253668BE77A9078393B38C929D75515689E0BB2DB96CA5E44E82AACC315022A9C791885851A6E1A249062EF6AB5DF94372A14A6F10C8B2D558516A53597823ACB11A8D9A2629AA7C391A3A68F5AAB36D2A0743D4A611268440D5A821826F486055C97458096ACAD8DA50DE5125FE0C4E887B2D5AAC0E6DFB6562F5031561C5E010049C49190AD563D2E5CC09818DBE6B6246FA01E2142AA6FC9618144B139048508B2E95F8B209457339B572B96A7612C2B01FB15C19E794DB553DF26A1A8474653F63BE84343F899824246A68F050617137ABEB0C86097B7CDD2149FFF5B6E0469CDE5329F7BB4C419A3EDA9CCE3363C5B411179DF23084F53B478495B76810D9036B76033779CB0A32B430D11A3F8C807C75E38D967C4B6B7CC9ECF7B72C33B3C5B5982AAC3D0ADCA74FF1A6912529DB12397979033436A44E166853B9B8319003C29315007CC8D183BAAE84C3E0BA078E81B29DF3C2F36B025C63019F3084CC3C654C62B23D4C686AA3CD1EE75FFBBA2B0A372852F57CFD8662D99C74439300469A0257E79DC86CA26B237439D0877C41337104411FCB2EAC769BA5CA8AC9F4CC024B2AB7A577362AAE9EA7C2E4456183F70FA058176F9CCA12F778708820BD3A9577D206B66787D5CA0F3E7BBCA4059D32EB0B9B51A0B3F79FE47825E506B128A167750AB2FD286F7237B1B2288B539CB9B73B412C99C561ECAC0FB6B4923583279C17F5A58DAA8B652D219AB384703FB27AED5A5F3DB884C65038A24173E8091F5C302157327161E97577F5B5A07B530EA76E1327958DAA38CB1C98830568FF0B06A970028C2260DCA8A087BC127AD837F8A37D70385395F66E55899C46270AE4E9997F65BF62913602B238FF22B9B84806C9823A88C722A5D9C426490DB743CF12846C6747B9C8D8B27BE03D0E2A26D1907713D79BFDB612D0D0896FA2128EF9B7C4A451CABC1278225B088869DBF37158323E25E2B6677A971824AB35114560F3007BA93B54D217E6620801C35409D2261BC04CB2B264F9CC49EBD14E90973BB6760E26B39F24728DDD6488BC3B13582DFBA6EBC77062AEB0A14DB7AA42817B200F65B11E810442166344C6", + "dk": "49705C0E73A7BD790CF41B305F0C0B2F4A12989086D7324A54245291D97CCF0A0A414C787C51039B48540B88AA64E98007533096F46904732FB6983AA57244CAB99C4F82591E5CC1EB252C494C9A3857496EF0904C96C7C6163573F1670E235CE4B55CBEC900401AA224F1A65F02793D3AB8E0E67AE3224A84565BDD8424B33B6D760B2298A5C818C26B18AB06357163889687A1A67C31DC5B7750C572BA6E253C3FD1DC4E2B7BB891B55DEFB34047EB82F34045AAE601175CA3D4F82384C8A91C0A2FF3F08101641A0BC224C1343B707C8ADF999ADC864EE51AC666C9015DCC5277C35DBBA33B0DB9CEAB85168542041C70C246FA939A976EA03725A725B9F72AAE29C544A0BA0D3A287CFF2397777A3DA1678BA85C2CC83C01DFB4A919254452617973724B407C036D1C67DFFA3A17AB4DFAAB350DEBC1981716531117A3575C55511E76884BB86946929CA44AAC5196A01AD92B429C49BC20138EA40B2E784708D2E87F6414093B5B59936036EB217F9AC73EAA717FE9B867E4391306168DCCA0744B2727FAA5076478931F514434B3277F3575046A76C0755056D0AABB13487F925F2AA575A7C64E08837CBAF5591F7885AF3A27222727A3B6546CB06A5B5AB0C3634DE2A96D6F63A358DB301AAB14025616C34138FD8516B13193BFE889283722A7A2A53128312AA083F4883903DB4B89A990728453B1D9A43572025A1074AAB17EC85960CA980713930A27751AE8F9747FA60A34072BF90C485662683C7705A29196FF73AE1CB44C41E3B0A45BB8DC570FFDE86095577B5FEBBE77F815D2E430C9B204C295C8DA61590F65002F7C48FDFB26B2E03D9E05820F5C9AD5C22ED5538D3B9251A78A6A5D3A2C654AAC6188CC90F8C76C2A2D0E4AC1F83391D9A32E9E3473297C8BC76766B2653AA5946C4FCA9D24D7563659CCF6A36398D17A6EB40D5626A7836A28788AB4DF33C788042E0AC6695EEA414AE8337ED85A7FBA520B2CC93D89C9EEB768DB61CEFF715164E326F2792BD2577749C06BC28411D0D4C8C298C8FD020530188B2EFA202D683FE261BACD68CAFF987F4A89A381AB36074360048B88CE05023A323F7A91484506C56932069A88B45BD23F4843C8010681AA910F23F83063A0A7ADA98F775C9278A7622B71594295BA32C339D1CA99D6F2AB116B9E6B8458395B2ECA686C81AA7DD5FBAA2928B16511A9B1C31629A62829054CEF8A0E70122392E733F7DB45C243B81AD33C22C9B235E1416E528AF9192D16F24BEB3116611A76A2C3B5340CC8E2C561736190CB3B2950C663BE8C2851134291F27B2672A72D65C5F375553FE76B47B5C8CEA12A47E570FEF16DC3F7AA52D5B0F747565C93B0F9A67BC4A585A25A708A1C62E1DAC2F343176E04B9C35750C0C114F65CB50E324B3C340468C5B7FE6641C6E7ABFE225C476209FCCA350E0271DEA34A7D5AA31824A826765083964683425152713FB4096E25A612BE57876100226C32C6B77562B3D0754CAA190D331147E61179277F9F1B9430F626166A7BD8CB3B0E805FECB469CB801825C427ED65451B35A913948F30DB36D6468644D64A330896CBBA3543B30564B5CB16A6626071B3D8D6A87515205FF54CA42118D60C8D26016462320B28851698B15D82A8BE27ABC80B386B76BA0192382ADC53934F23A3E58A914846419D0C7D3707169BBAB88F4550EB9167B961BC00477C6B96CDCDDAC62C133278D437BC54BAB0135E82A13083E74A4F160A7808C7E08BA485988DB9B3103DF7225320655206C74BA185031266145628FABC2D22BC5D6F704440A202AA3A646A8BBE55F3A6A5752E48F3A63DB3B35E0C56A3361232346CA5B156ACB8160FD3C6DE022DD5EB5DB8FA49CEE34736A13E24D551406A06776635A7822D77647E33900792A059A7EB4392D0026CF48EE5685C0F880D63A4AB57E8BE27499A41C39AEA37B6A2933CBF4C6F09D1BC345854B531CF0A75CA46E74D247230F9D705BDA8569CD9693DF8CDF6A71E8D702F3C0BBFBA9421F2873558B4C4E03546D453A24798B712B0305497BBDD28BF2BD1A961606AB7AC759BDB746AFB35259478EA6269E581844C268E9CFC456DDA1207D946854CBEBBD94AFE263C0D4627B0B745694517B6D68611349CB8238F4387AFB7A8987D803368331776813C4A0A4870C17D7A8967D21C40A07865FE02253668BE77A9078393B38C929D75515689E0BB2DB96CA5E44E82AACC315022A9C791885851A6E1A249062EF6AB5DF94372A14A6F10C8B2D558516A53597823ACB11A8D9A2629AA7C391A3A68F5AAB36D2A0743D4A611268440D5A821826F486055C97458096ACAD8DA50DE5125FE0C4E887B2D5AAC0E6DFB6562F5031561C5E010049C49190AD563D2E5CC09818DBE6B6246FA01E2142AA6FC9618144B139048508B2E95F8B209457339B572B96A7612C2B01FB15C19E794DB553DF26A1A8474653F63BE84343F899824246A68F050617137ABEB0C86097B7CDD2149FFF5B6E0469CDE5329F7BB4C419A3EDA9CCE3363C5B411179DF23084F53B478495B76810D9036B76033779CB0A32B430D11A3F8C807C75E38D967C4B6B7CC9ECF7B72C33B3C5B5982AAC3D0ADCA74FF1A6912529DB12397979033436A44E166853B9B8319003C29315007CC8D183BAAE84C3E0BA078E81B29DF3C2F36B025C63019F3084CC3C654C62B23D4C686AA3CD1EE75FFBBA2B0A372852F57CFD8662D99C74439300469A0257E79DC86CA26B237439D0877C41337104411FCB2EAC769BA5CA8AC9F4CC024B2AB7A577362AAE9EA7C2E4456183F70FA058176F9CCA12F778708820BD3A9577D206B66787D5CA0F3E7BBCA4059D32EB0B9B51A0B3F79FE47825E506B128A167750AB2FD286F7237B1B2288B539CB9B73B412C99C561ECAC0FB6B4923583279C17F5A58DAA8B652D219AB384703FB27AED5A5F3DB884C65038A24173E8091F5C302157327161E97577F5B5A07B530EA76E1327958DAA38CB1C98830568FF0B06A970028C2260DCA8A087BC127AD837F8A37D70385395F66E55899C46270AE4E9997F65BF62913602B238FF22B9B84806C9823A88C722A5D9C426490DB743CF12846C6747B9C8D8B27BE03D0E2A26D1907713D79BFDB612D0D0896FA2128EF9B7C4A451CABC1278225B088869DBF37158323E25E2B6677A971824AB35114560F3007BA93B54D217E6620801C35409D2261BC04CB2B264F9CC49EBD14E90973BB6760E26B39F24728DDD6488BC3B13582DFBA6EBC77062AEB0A14DB7AA42817B200F65B11E810442166344C67E807BBF0AA3E1B1D39AC2F1EBBC039877ECB5FD12A2E287662D3FE777BC27581B64A7B5708EF462D354E41E3364A606B3A431719D98BC16528F32DEB79E3686" + }, + { + "tcId": 36, + "ek": "252C0F7D0735EAA9841EF2B7C136B3749475CB453C377B0E9F97C624A69C53E13DA87991A25B44287B0F78B5580F27B8A06C3AD9936FC3274F70902EA070AD2D709095A8613A844335226696EB884CA0071F804D5FE492FACA4385984322B0A4EC42247AB31D965A403B9396B15C49C6741E7B641CFB490816C39598785F977119DDE76C78650DC9464785C104A6A7799CA59B1E44980B55ADB164A8C910CDC342CD479C31B7C5111AC939FDD72FA52638CE4106CA6A713171644AEB3A8485B5357824357A6CF33BC8F4F925408A284DC361998BB8F9EA3CA4F413F20C0F699836ED6196E98256FC344205475D15D334B85C96A988B2719A1645DCBCAC10B313F2A22012509C63B9F321C6BED54FF2489ECAD501DF000B43ECB384379CAC76A3CAE4350BBC49D7912D0796B5600469CB88742BB22E10D07D45B24AC274BE76C0BA13C8319130102FC3977323A1308562F8D0043E313DFAA6864FC7222B79B430B1BCE1C6874CA5BD485B7EA5C3AEF14A0E4B83CBF1137074435F43357666B17AAE8958BE163EBD78496463501248685B529402973938D9272B639A6A638E68C508DC74B5F5560398080DC39A82A72B175DC992AFB303D4976422D631C80B83E0ECAA0274474EB5332DD635AF8278BF76A155D0894010C81E25746BD8AA03D25223EC8CFE324B85F0466E301F72BA851E0C957C5C3B75F018E5A773B763A5338A363B51B352816CBF41613D5B95B33463FD5A4707BA882B30015F41695D18C279B4C42D95C5157A5AEFB01494D90F4ADC15B5FA14377C93BB11765AC5C37E2351304234462933D5D464D315CBC76255CFC966E311460EA843FC83836F41373E964A6F45AD45A9661E065E90D9366E9347FD64CFA91BC695A63D3E23461B6725EC892894209D9265684F543281052394C9BE0B4C44C2E27146F546CDEA0E982A5C3E092488870EC89C4BED7225EE202BBADC969DC60BEA062E37028F02C0A5271CC7473A7071080DA91424D615C29BDB0E919676B1DA8477029D3CC615008DBE4FE9B96AE06682E58AF6EACD64B54E6D3C22F273CA41D4368CF428E79840C5FA87642C1EFD389DDB659958E38C697A8757C7CFB790A53A96217D58BF92408776E4BFBFF565CFE90473A54069948E39E334ABE70EFC4A44E831792604051968C29B28BF3D1850BF314E89CA8D8664ADA4AC6402A1648D307DABB30FB0D4ADB19198995A74D20918F46BB85F17294CEC1CFDB0964B95ABC0105D665C6A21E7C28DB44CA698CE134953AF55CF4A25C1B3744C3561AE0B5548390C1872ABA5C227469970C57AB5CBF8A857AF8B0499E562985B832F0B4DAEB7326E24B06C00876B785E40DA7BFC2907E32B86C466112169BDFF7A105B69899E3920A03378510337CA7B74CB663A4254BB865598891AA5F28C662682CDD770300BB445AEB4771757CD2427C044633360B423819C5D283231E4FBAABD887F710B7648BB3272F65F8DC90C19119E88060F3750922E929A42AA27CF79106FB54E16B46075C84C78864A6E4BC9185949F379282E1AAFFB854B34708CD626689C3B47A3E9623AB85473B981163C4C7C7030072B4377D2B61E85993070C22F27343DD04B2D50CE5AD28840EB0E980A4A9A262BD64257D59ADACB66C6C2CC11BED47D214021A47636AAA732164F", + "dk": "A9E128EFE7CB3E1942738A2A91E13B1275271FD4AE75C27D2A976AE5C42D1768C1F800C4391B18C136C73802A1DA122264A24FD337CAF03BAEA8C8A16F31477FF286447C18D543B19AC380D4561F8C264E9A32508C88950D99C96EA4C302EB6803E25784D19010A76B3AA2AA7CE70CC4280987D3A59CF74A69D71DD53464BC6496DA46465EE57D388A4BD3D8755E128125E8A81451114A9A35FE6165858BCA2D1C6710EA9581A753B8C6414A9C8BF0FA095FDA803BA3ABC52211313AB76DB3C8DE905AB565677850800AE76A39B34517158123779B7CD2ADF1B195A0C4B94DC8C034C06C1582B2BA72BBA99441A61017641205DB8A8CFDA536A73646999A4DC5F3ACD268AD5C63C4B5457CED6A03098B67BFDA650AE22A90B64EAA92BAFD4CCD799093B7A9B93C32C1EB3853EB6B13A3DC5E7B005E242668C01A1472C947026116C1391F184C0A1495907B38A225BB172BAC6BCC5AC1029666E9E52A689066D8144A0CFA75924C4357A7A3D7A59463701DC1359234D970A99160DC0195402316A1B8BFFF24815D91B7FC351642B0B84DB00F75E22771F63ECB3B50540479C1024432C15EB0F94FF02A18BBFA1FC2D817AB9A748D489828E6CC4FEC8AC276A7FC38299D375A44EC61D94384776364A5F9A2E9C56262E83A66E9BDC98A2C60458CA269C7AEF120A2A59DD1F14135CB5DDF41420D360B141374B786801CA46E8056A33E1C23C608186C48CA96473F1001C3D42695ECE0A279C3743FA57B3C449CC8B79B65B506C91CA486746345F0C658FC0B71502455629C6D885094059B91D2889E61890A174E002BC6AB84BBFE375CB8B830FEEBA120334A57A2A4016C25C0C05E24A046E1E900C99C31CB72CBCBF605B395C5A2A710C30A0514B60FD4AC6FBFE9613AF6B10E295CFBD76A6F11B89C794ABD8042548B4E06E10BDA356D375100E8756CDC15AC25DC1531856E64A4359A750EFAF47A07D99190586D037C18B57754543A41228B5F0C547ACE772AD5719D01668CA1A49B5D380E118127B713BBA97512CF1A5A64A666817C430AE08E3B3668CD630F0F2A461D7C3CEDB797D3C53F60292CE96132AE418AD5196FD86A3879232AF0B27DDFF6CC0B71CCADE80326A32441E9C7A7334099B18FFD349229C7295DF4209B68122AEC59C71C6A4358698795426CE8684CC2B93CC71077808D53C21415A29548E5128D075AA9078A01711400499914C5B5EC3373A51C56A534808C740D8755495AB7099C2A6EA121A8B9CA59CE3317D6F186F099AEE0635DE6FB77DF965DCB40C7EC939D9F5493CBF77D6D5449678961BAC9ACCED10207500BB56C57C2E33C253281D570B2849B8548E74831E094A5C994C0F68F6B40CECA84A0EE40B6712A1AA79BB88AAC00F7D065A659126212B98E91111F679D357BC0A9A4753F81014F7BB86749B6B7590C06A08DDC4C56D24473B9B49F6DF3AA6B0B385FDA71F9BB274CA48AC71C4EF1944BAD2241A6716540728182691CEAB5BE962843574AC209B5B419B22316E644BCC52ACCAA481D926095D625607BB5442C245B08C39B765382C1805ED6A8D0F3A7548BA64D092E78B296D5D07F6A78C21C11BA7310CD32A708AC7A3E4B7A8DF1A94645B6CD252C0F7D0735EAA9841EF2B7C136B3749475CB453C377B0E9F97C624A69C53E13DA87991A25B44287B0F78B5580F27B8A06C3AD9936FC3274F70902EA070AD2D709095A8613A844335226696EB884CA0071F804D5FE492FACA4385984322B0A4EC42247AB31D965A403B9396B15C49C6741E7B641CFB490816C39598785F977119DDE76C78650DC9464785C104A6A7799CA59B1E44980B55ADB164A8C910CDC342CD479C31B7C5111AC939FDD72FA52638CE4106CA6A713171644AEB3A8485B5357824357A6CF33BC8F4F925408A284DC361998BB8F9EA3CA4F413F20C0F699836ED6196E98256FC344205475D15D334B85C96A988B2719A1645DCBCAC10B313F2A22012509C63B9F321C6BED54FF2489ECAD501DF000B43ECB384379CAC76A3CAE4350BBC49D7912D0796B5600469CB88742BB22E10D07D45B24AC274BE76C0BA13C8319130102FC3977323A1308562F8D0043E313DFAA6864FC7222B79B430B1BCE1C6874CA5BD485B7EA5C3AEF14A0E4B83CBF1137074435F43357666B17AAE8958BE163EBD78496463501248685B529402973938D9272B639A6A638E68C508DC74B5F5560398080DC39A82A72B175DC992AFB303D4976422D631C80B83E0ECAA0274474EB5332DD635AF8278BF76A155D0894010C81E25746BD8AA03D25223EC8CFE324B85F0466E301F72BA851E0C957C5C3B75F018E5A773B763A5338A363B51B352816CBF41613D5B95B33463FD5A4707BA882B30015F41695D18C279B4C42D95C5157A5AEFB01494D90F4ADC15B5FA14377C93BB11765AC5C37E2351304234462933D5D464D315CBC76255CFC966E311460EA843FC83836F41373E964A6F45AD45A9661E065E90D9366E9347FD64CFA91BC695A63D3E23461B6725EC892894209D9265684F543281052394C9BE0B4C44C2E27146F546CDEA0E982A5C3E092488870EC89C4BED7225EE202BBADC969DC60BEA062E37028F02C0A5271CC7473A7071080DA91424D615C29BDB0E919676B1DA8477029D3CC615008DBE4FE9B96AE06682E58AF6EACD64B54E6D3C22F273CA41D4368CF428E79840C5FA87642C1EFD389DDB659958E38C697A8757C7CFB790A53A96217D58BF92408776E4BFBFF565CFE90473A54069948E39E334ABE70EFC4A44E831792604051968C29B28BF3D1850BF314E89CA8D8664ADA4AC6402A1648D307DABB30FB0D4ADB19198995A74D20918F46BB85F17294CEC1CFDB0964B95ABC0105D665C6A21E7C28DB44CA698CE134953AF55CF4A25C1B3744C3561AE0B5548390C1872ABA5C227469970C57AB5CBF8A857AF8B0499E562985B832F0B4DAEB7326E24B06C00876B785E40DA7BFC2907E32B86C466112169BDFF7A105B69899E3920A03378510337CA7B74CB663A4254BB865598891AA5F28C662682CDD770300BB445AEB4771757CD2427C044633360B423819C5D283231E4FBAABD887F710B7648BB3272F65F8DC90C19119E88060F3750922E929A42AA27CF79106FB54E16B46075C84C78864A6E4BC9185949F379282E1AAFFB854B34708CD626689C3B47A3E9623AB85473B981163C4C7C7030072B4377D2B61E85993070C22F27343DD04B2D50CE5AD28840EB0E980A4A9A262BD64257D59ADACB66C6C2CC11BED47D214021A47636AAA732164F6288E1A8F430D11D6AE589A05DE491F40BF3C303C48D3CF9C19B6709A0D5C5F2141EE30D440AFFC15BB96C997B4B422AEC41BAC3568772BDC0634BB33BC9C60B" + }, + { + "tcId": 37, + "ek": "161B429CF9622DC7597AA02D6EF110EB12A920634017C714241A8381C6A14EBB4C0E24CDDBE2101267B15AE47A402675A349C9FB0B6B879899F6B682A860B71CD1B376EB700720103BB8546DAC5939D40F0F827553C4CD50C257C71A3679A263694973E1D7880969B8A5E75F1C0B4232D339A0C915B3AC525C376EED485F4BB49007D67D646126094A18AD3126AAFACCF2A8B92FF06A5C2AB42CB83DC7558DBD71A290B3955149CEE9E833581A827EC8C5A9AAB570D118D4B94DAD8C1F56734888A65F12F78940B983374671BCDB3DA54A7F4866502C37A0EFA7A6F4646176361E38B798C4783CAA96AE5CD76B62EA7C2AB6A738F3296F324465B114D5415F29C1348F407B8B828761CC973883327CE47D44900E9531867976386660739AE96CE3ACCCAA53843431A430ECABF802C5A8B6334924038C674B3CE43720D657072CA390D57DB665BBC5A47F58B358D31AA09A2A2984C11745D2CC22F5B805357567523965F9672036859032AFA6110DF5940C447A23DB318A8D41268059BABCC726A1695DD9939C66B1CA68ECC0B1357540563065700CC5DACF4AF04C1DD27A891BAF0FBA5606F25D95FB319F09028AB3C52B1672AC4AB42CB3AE385B1B41F9A8C95002BE7924BA3435DA11221D14CE336454350CAEE726CDF5A5514F215FEA199C9DD6CE3E1B0B0E33416C7B8779EC2841104E9E5BCE8584B2FF356853456218EB58F014278C432A01FC15E9616A95800274468E89579C1C353C01086C3A599AD2DA4E0B67C88CACC43040280DA59709B298964895B551311D34107CB631C871156A86B32394A70BA33F992AC6DFF51FAF026A7AF0903F58062BE4BEE8B79C44742209F382FE4BA926109A72E812EED9474BF29FEEE7059C19584293B64F812E6D3CCE1AF550FBC970B04AB68ED7782D4A9AF1CAB8A10B1FEE92C8422A52941B8AE7D9399E276508AA106E93BB14C17BA4A266AA9B8C7FDBCCA2F870C14C0FE6B79F2478825CA32791F1BD5B4812126B1FDFA05DC5B129D0085B6546562605509F3B6CD33422A8C4A4839B2763A473CE0A6A919277F2C71D81162E14651FD9D63C8EB302E8C26DB3751E7736578F261183AB6108D66E9A2CCAAAFAB26171B56F595417B354984914D4A3871C9C80688677560690D9C514E6CAC050C81B5C8A5E443C9F47E217A6B5AE26479A9D60AF0A502D9E2407A9F60A924688FCC063C6439F83E75EC9F944D5DC3E92B36FD8057B4DE3628A61569D5275AFEB9AD579345ACA48FC2C6DABDC15A919BAFF941A77696E09F179A36884D530157B4C5D9717B14D0B4E2BE299DDAC734F557B7AF61A8AAA02697735110AC2CECB71C5C05E2A3CB86FDB4D2CC0CE97765EAF74C2D0D179F5C11F24E55457B81B935214F7FC06811346E1D92F64BBCAD60B4F7B96526C224607D03878CBA236382242595E8BD712FAA3A71AC4A4B9C79131C1A8C18837A76012CD609418B287FCB10ABB3164E357C58EC2C61B7C71E0B70A1A2CA5EE2442E43782551BCDB482413DB889E5FB6EBA0816CC603048D504EF0A9AE2A41E2E26B84D1825443A47D1519AC9E2137D6A00EB48691E35C265518C6AC97AD4D79E4A574F9F59844748367AA9927F28B47AF1907E2551513EB06ECE8269B077A35F4A0FEFC2FD65510BA577BA585D0EFA34863C", + "dk": "73E096AA6891A490C72C925D66001920A304E1133EF977A0212C8F7169440D6ABAA8BB666605BEB9375FBF6272BD0A8D84D14A585A81AD474186A5992A87389E065C22C187FE986F4B0C4243B4035E57CD99974275D92E5D1A18D5394EEFF507BCB1C5F4430F4C27A1F36B3A56AC1D47424767C30D27B53D4F122519110DCF34450F2814E6D72F29D72B50A77C4402AEBEDCB12F39CBCDD9AA031005221176F4507184A5CBFFA75B09572DBA8B92F361910C17A8870642B680916D5B4E7A04B797696F10F27E88D67C5D395995D00D40DBC6D3AA063CDC1BC6535B62B80CBED53857F9524863C83F81AB2A91A2B561C46D5B54BEDB0FD58186C6C147C21217C449294EC178BF8B7EC4083536B60566FBAA6480C2D41A22726308908A3259E218849C7229B1AE0CDBAA58694C159698B82756AF269C6EA1A8E833A8DAF6BB995C7DB1FC90F14403F4A434693CCEEB631273596163B36016F4AC866319CAA9AE4AC10419D505EC66289C562BD0FC58009779EFFB88AB583BA2F3B7EFC341FFBC854644AB52B75619D589C45320C94B2F818508C5BA28E2057318A6CEA505B023384FBE08C1977725EA39500733709B4946A8452B7CFA60A5FB92F00BC6C0390885E0717C9482AD4A485AA9B5D881AFF9518DEC4689FD256AA56B1E66C83E2F3C2F6DA0A47C8B8BC1742ADAF465FF0500ADB1A3D1D8AD1ED8A9FE158F83C899B5732C9584040C56BE4A2A06A154911804995AF314BECB4B3BD522A73C404D452231E556EBE4427CC2BE258CC599B97851E0C539BBC405D0942A74BF24599EF4AA9BAF3B9B55E96D8727B57D435F211603D19466481AC74C039823341498DBCAF48228D79715F1218FC44232069977E68232FA336DA3B60BD0812C407457B84A4B8CB8B878D27356D4C0B6CA059B831D205B23BAB6446C74C2E006CC8CD2090EE4709E61638618A7A4C75A30186B74B6642EC48F92F655C6F5A0DD1CCD778C2EA48BB8CAB12730A845828C93DDF7C423D824D3C8CDFD908F4F3C8F7E8486809517C51615D8B9019B8C07C33C46F3003548490395B8770F32AEDB31417B8AC408887E0BF91D3716473F4CA21E739ADC295E4BC931113746530309446719B13218CA665F2E2A08725A48B9589DF4593B0EF747D5F750EF96B66C1C937A3940F350C41643005B296F5D4A025A81ACCA79243A77CC4A14776AA892A045174D785AFCBC675A45CB51FB5FD4F96377478B569508B9E15F7BC585B654923390904749518A5627AD7CBFC9DB3827A919AAA98A5B086278CB29BF4442F0740C46980FD3248DB6C6BB47984C12B5CF56A25E3028A851E946B4B946305472F7A6B5EBDBB1145B860633ABAD258A29BB110F8985FFC112EBBCCA7F437BF5357358CA8855181B21846AF6A107B9DB3536D7AEB7A6414A031A1777BE27E28F5525C68EC2C67E014CF1208837F724959B21D1801132F223FEE806CC943F7F192A78DC450C84AECF5C33C9097D4240B27D7790F7837CD5B57736F83680A340B43988AF43B28D2056873722F49202B0451567C0C9974647ECA6455718CEB11851734B5AFCA3C968891D375B63F2D7AF45369605B33AEF99CAF11256EEAA19FA12B343449159B99001CC81161B429CF9622DC7597AA02D6EF110EB12A920634017C714241A8381C6A14EBB4C0E24CDDBE2101267B15AE47A402675A349C9FB0B6B879899F6B682A860B71CD1B376EB700720103BB8546DAC5939D40F0F827553C4CD50C257C71A3679A263694973E1D7880969B8A5E75F1C0B4232D339A0C915B3AC525C376EED485F4BB49007D67D646126094A18AD3126AAFACCF2A8B92FF06A5C2AB42CB83DC7558DBD71A290B3955149CEE9E833581A827EC8C5A9AAB570D118D4B94DAD8C1F56734888A65F12F78940B983374671BCDB3DA54A7F4866502C37A0EFA7A6F4646176361E38B798C4783CAA96AE5CD76B62EA7C2AB6A738F3296F324465B114D5415F29C1348F407B8B828761CC973883327CE47D44900E9531867976386660739AE96CE3ACCCAA53843431A430ECABF802C5A8B6334924038C674B3CE43720D657072CA390D57DB665BBC5A47F58B358D31AA09A2A2984C11745D2CC22F5B805357567523965F9672036859032AFA6110DF5940C447A23DB318A8D41268059BABCC726A1695DD9939C66B1CA68ECC0B1357540563065700CC5DACF4AF04C1DD27A891BAF0FBA5606F25D95FB319F09028AB3C52B1672AC4AB42CB3AE385B1B41F9A8C95002BE7924BA3435DA11221D14CE336454350CAEE726CDF5A5514F215FEA199C9DD6CE3E1B0B0E33416C7B8779EC2841104E9E5BCE8584B2FF356853456218EB58F014278C432A01FC15E9616A95800274468E89579C1C353C01086C3A599AD2DA4E0B67C88CACC43040280DA59709B298964895B551311D34107CB631C871156A86B32394A70BA33F992AC6DFF51FAF026A7AF0903F58062BE4BEE8B79C44742209F382FE4BA926109A72E812EED9474BF29FEEE7059C19584293B64F812E6D3CCE1AF550FBC970B04AB68ED7782D4A9AF1CAB8A10B1FEE92C8422A52941B8AE7D9399E276508AA106E93BB14C17BA4A266AA9B8C7FDBCCA2F870C14C0FE6B79F2478825CA32791F1BD5B4812126B1FDFA05DC5B129D0085B6546562605509F3B6CD33422A8C4A4839B2763A473CE0A6A919277F2C71D81162E14651FD9D63C8EB302E8C26DB3751E7736578F261183AB6108D66E9A2CCAAAFAB26171B56F595417B354984914D4A3871C9C80688677560690D9C514E6CAC050C81B5C8A5E443C9F47E217A6B5AE26479A9D60AF0A502D9E2407A9F60A924688FCC063C6439F83E75EC9F944D5DC3E92B36FD8057B4DE3628A61569D5275AFEB9AD579345ACA48FC2C6DABDC15A919BAFF941A77696E09F179A36884D530157B4C5D9717B14D0B4E2BE299DDAC734F557B7AF61A8AAA02697735110AC2CECB71C5C05E2A3CB86FDB4D2CC0CE97765EAF74C2D0D179F5C11F24E55457B81B935214F7FC06811346E1D92F64BBCAD60B4F7B96526C224607D03878CBA236382242595E8BD712FAA3A71AC4A4B9C79131C1A8C18837A76012CD609418B287FCB10ABB3164E357C58EC2C61B7C71E0B70A1A2CA5EE2442E43782551BCDB482413DB889E5FB6EBA0816CC603048D504EF0A9AE2A41E2E26B84D1825443A47D1519AC9E2137D6A00EB48691E35C265518C6AC97AD4D79E4A574F9F59844748367AA9927F28B47AF1907E2551513EB06ECE8269B077A35F4A0FEFC2FD65510BA577BA585D0EFA34863CFE73F5F05166F9F6E675DB43609C203F85A753657EBED7E5143083D8C0133074CDC6F4C1E5A89B9AD19F977B21310212F8DC6C45F03982A7E24DDF8BE8428CC3" + }, + { + "tcId": 38, + "ek": "186251FDA48047836295F35F74048EDBB411B9698998E225FEE838247B4E8F294560212D24C3312956CDD96374BBF2BC4613B218ABCC0A8C0E8BEA367B14A71CD2A08FC57E45F50C7716807777A4F23236F4B46D880C04DCE84CCF76A0DA4816AB0779F7A49D632A6686DA8A00119C2D0BBEB5017EB691791D2B5914170BC160A58B07ACBFBCAB403706315A439D2777F7429B35462647595024B4859917B7FDA54118B886C29BB681AAB3F8F98AC2F116D9205A99619AB5F6648D2606657476794525F6FAA80D01925ED16DD54336A3922EDE0798512501626B990C2090A0F2212D8AA6A65828CCB4AAD2324B9CE81A109AB14534284E57BDB6E0BECCCA48804A244B98667773330D50192A0587AED6223624235E5C6CC693B21D4B3119F897AD56147249A131CC6C4838C554147C14B0CFD039A21B8050C1C6A388B5B4464A5A824B99EFC4A6EA4CAE303A832E15372AA2371127B48E860637E7583F004E53F072C9C184EB79C768AC70A286C7A7754A1247A859C0576ED05F9D11B67C63CBF17A02D4EA5135AA54C158317995A2436C511C4467B390010A21C62A4BA58CDC9D32363BB933004F363D812C2DC7973031F19B1E7C3246F7846AF42A61625E742AC5AAF4040CD13DEA83909FE242A0A56EBCF27B075609B50C8CDD84704DA23E53CC3831083AE412147CE1125951497F93421F245FA2FC6CFB34353212CE5B5122D66A1F6E386D333542DE453A784505466B932A9A3A8E14284392BE27F6A39D864D51F69654BA7126A4982514A03CB6C16906693E21774E9693A889638B636A04B1964A4993E4B03D9BBBC9E5D26AFA15B8ACF232CB421B221172B8EA4A28B39834D63350F01570AA9CADF0282C537591A123461A9B417C41C2E623D5A939421A46B3688C691C52D0A53E52EA4322EA58AB90A25D03AF42F33B97D606E0F98A3E8201AF37257A95BE1485A6D432615A35B600DD0DF4BB4E27291356E4959E397A010A735ADC313941A6D6B4803997C82AA61048311335819317960D32F407401626BF58A8DE706659460E6B483FC717622DBBB77322B00B514114C4A2713A4181A79AAFD6B94DEA6BB0D341C4D88396842169F794D8DC60DED044C31B60346640D037773504079B7977A1130BCA125254C5A0A0D43041BB2106025E3B87821E98AABA803A4BB48B3E719CD62415BE2854177862D09A2F93D8386FE08332C3A8223287FE098BEC80416F723573A55DD52329F1485F231038824568B891BEF30C0868F4B7E3BC95DEFC814D7164307ABC7B972E45DB2C727C5C0E05191C3971A30C8A696B529FD71CD6F99F7DC04F89564B83F105BC4BC840A70840EB4FBA8C0956B556086642D0D8427DB02593299390AA36776031BB036C477BB5493B00C2F090F1738714CA73BFF419F837259F288C1652B76DD7C9CE554FA2540665C357FEC6C4AF31ACA98684877B6737A58D2295C31495686B78A4EAB27FFF103990545D90A99122A851B5085A1DA88F72E6B8E9DA811AFA24F00B9574B2A42AB306AF6138E191667E8C2ABE47ACE8B6C80F72AD86B36C70067782D09B5CE31221163BF0C893E6DC54E7735E3161BF77DC71E4864F74D137C9B6244ADC405B0AC8551872C5404A3DB9E142DF05620F5FCA908E5581CEC1BCF774F142953641F4B0889C66", + "dk": "7D2968ED97637E1A2A05CB7B50F2BE2F17314B486E14B42229F46BEFC92661101DF15CC1A7D4954CA256E165650F0446CB3732C5DBCB49A1167B83B64D25858E37948B01ADF7859FC6718F4535BEB908BFC8D6A999448E1EB6C7FFC225AD531CB92A1BB49A8254B73454FCB2AD77212CF0775360108BD5412CE184126530A691BBCC3139B3EBCF0C88AA167C12BA61AAEF313F59375BBB150A70883FC2531EC2ACC106C2BDAF607410F52775159D6B502B67E02CD2EB48495C2952D08A0B1825B2F276CC683397BBCE6EC7B899C94A7B4A5CA42A2EF1B6AECF4A182EDB31A467C91B6AB5FD002E3AE651D715B40DE9331050415A7AADC4485D2EE0980ACB81D9650E5CF6B7B6F1071209D0C5230164929CF9F648FA596DB1EB86120770FCA8C190416C031A9E810621A4D394FE9359F64626EE9B422E0015DEF58D12B48214F336CB137E83F49419B169267775CF528B75B0543E67271B13284FF9B7E858C52CCAB767E91B978BA57FE874C40995C644261B247FA423B1130375BDD22B4F7BB26E3C15B938167F6A9A85CB132F78803C470B13A11635606397C055A517416DD098C5C86590D655CD9231E6254912EB03B1E3C6A2A334E93154438286685B0DB8DC5193719EDABA0F12226A1283574148C3C2B942C70946CA087ACCCAA5212C8320146ED8C74E1D3093791641CBC25D378235F402AFAC7AC4D2AA2FFAA2ACA33082ABCBBB0EF91DB676AD029160C63BCA438709CFC9A7F3F96D62D674201CAE9D4CB83CD13446AC81DD653C7B9C11B42B8DAED17C28B30C356B24752035E63566A7C43609370681BA1DEAE73CC0522F2D91B91451A91EA293ED979244BBA177B01C402B40853084A272B10D44622797933B19023D04617B4A8F91883012740DC3C795F73B4F16C18A47844BC85B8EA327A9B2D03EDAD72B4B4155D0C1762936835A2567A63C917529A807EAABBCF318DEA58340B875FA404FACB58843CA6DDBA39CEF0394B31512D80B4D01F325CD4765E7A25688573DCDAB4A4EB164F38361D6C79D53022779FB837C008DC289BCC1426FF5D44978307DD1F60CE32467F814334C12A8E8F9598D815E3F0ABDFDDC4FC2A6AD4C2152290908AFCC7C1BC1548E3A861106BB8D7915149025DE036F9EA33EB4171541244FE552A26101321D5333592C0E06CA6220D2815ABA886F6968A7C2828628478CC93754506CFED04853B216480154130262560878CD0CBF96FC0ED3656AA177C5D4B0C66FD710659AB7DF55C892E8C0E89871F893AD01838981D396DF452A6CFA2BA3D082185C2163C73622B86ED192B2C02BA58D48C670B56D928478DCF539679C56011C2D6833962F892F11C08E19CA55B110470660A1752C74876C9EA30AC76B278DB6CC217DF7BB0B8C6A00A8C16E61A51DC255F04CB292692217C1A66D6529753C2E94629C0221A76EF42DB3F864F1C97D076195157C6DC3E637B535A0A195B597A7A7234A6D7AE666A3BA41A65A2A4F12CB88577A75E24164CAB589BB2BE0F9C4C844C5F48C1D215A628D324645E9C7482B75FBAA4D4366A22BB95000931F415751373491FEB058D7888B0C82BAE6A066CB25CA987957990425B96122643433565ACF1025CEC12C95186251FDA48047836295F35F74048EDBB411B9698998E225FEE838247B4E8F294560212D24C3312956CDD96374BBF2BC4613B218ABCC0A8C0E8BEA367B14A71CD2A08FC57E45F50C7716807777A4F23236F4B46D880C04DCE84CCF76A0DA4816AB0779F7A49D632A6686DA8A00119C2D0BBEB5017EB691791D2B5914170BC160A58B07ACBFBCAB403706315A439D2777F7429B35462647595024B4859917B7FDA54118B886C29BB681AAB3F8F98AC2F116D9205A99619AB5F6648D2606657476794525F6FAA80D01925ED16DD54336A3922EDE0798512501626B990C2090A0F2212D8AA6A65828CCB4AAD2324B9CE81A109AB14534284E57BDB6E0BECCCA48804A244B98667773330D50192A0587AED6223624235E5C6CC693B21D4B3119F897AD56147249A131CC6C4838C554147C14B0CFD039A21B8050C1C6A388B5B4464A5A824B99EFC4A6EA4CAE303A832E15372AA2371127B48E860637E7583F004E53F072C9C184EB79C768AC70A286C7A7754A1247A859C0576ED05F9D11B67C63CBF17A02D4EA5135AA54C158317995A2436C511C4467B390010A21C62A4BA58CDC9D32363BB933004F363D812C2DC7973031F19B1E7C3246F7846AF42A61625E742AC5AAF4040CD13DEA83909FE242A0A56EBCF27B075609B50C8CDD84704DA23E53CC3831083AE412147CE1125951497F93421F245FA2FC6CFB34353212CE5B5122D66A1F6E386D333542DE453A784505466B932A9A3A8E14284392BE27F6A39D864D51F69654BA7126A4982514A03CB6C16906693E21774E9693A889638B636A04B1964A4993E4B03D9BBBC9E5D26AFA15B8ACF232CB421B221172B8EA4A28B39834D63350F01570AA9CADF0282C537591A123461A9B417C41C2E623D5A939421A46B3688C691C52D0A53E52EA4322EA58AB90A25D03AF42F33B97D606E0F98A3E8201AF37257A95BE1485A6D432615A35B600DD0DF4BB4E27291356E4959E397A010A735ADC313941A6D6B4803997C82AA61048311335819317960D32F407401626BF58A8DE706659460E6B483FC717622DBBB77322B00B514114C4A2713A4181A79AAFD6B94DEA6BB0D341C4D88396842169F794D8DC60DED044C31B60346640D037773504079B7977A1130BCA125254C5A0A0D43041BB2106025E3B87821E98AABA803A4BB48B3E719CD62415BE2854177862D09A2F93D8386FE08332C3A8223287FE098BEC80416F723573A55DD52329F1485F231038824568B891BEF30C0868F4B7E3BC95DEFC814D7164307ABC7B972E45DB2C727C5C0E05191C3971A30C8A696B529FD71CD6F99F7DC04F89564B83F105BC4BC840A70840EB4FBA8C0956B556086642D0D8427DB02593299390AA36776031BB036C477BB5493B00C2F090F1738714CA73BFF419F837259F288C1652B76DD7C9CE554FA2540665C357FEC6C4AF31ACA98684877B6737A58D2295C31495686B78A4EAB27FFF103990545D90A99122A851B5085A1DA88F72E6B8E9DA811AFA24F00B9574B2A42AB306AF6138E191667E8C2ABE47ACE8B6C80F72AD86B36C70067782D09B5CE31221163BF0C893E6DC54E7735E3161BF77DC71E4864F74D137C9B6244ADC405B0AC8551872C5404A3DB9E142DF05620F5FCA908E5581CEC1BCF774F142953641F4B0889C66BA11CB78E47D3EA5081A3669242F1DFABE78B0C8E9265380CD827B0B43F99DD31514D316D9AAA6C6DCA5A3F5671BE55170CDFA132B39CD78BA2DA2DE1C36784B" + }, + { + "tcId": 39, + "ek": "6E1059603063A52218E1C64967270D8093B65A73A2739C97B0922C2A0A05F482568A4B364128BDF238ABDF5267995B20B3919AAF3B9DB5A2315C74429A1511C25775E4029FD1FB6626659EFB4B74013694E6B1796CE918D5CC37442B886278A96460330ED20CC7AA80CEC6CF4234414501C07A2A708651C907F56236A056E8C722BE6B2A50E36A70626B5DD456ECB1A36A2C6EEB05B9F1FA61CED6C509B5A417CBCBAB5B9A88BA4B3B55C2FC57CD47F12438CB88E38C70480C6B1993BA78B0032B3C5B5FC7650A85ADAE53BE42261695EA35E03142A14BBA4ACA9F24A72B6F3C3821AB7FD106167AFCBB0DB58D4C58A02E5B4A565074F0663C4B7408A4382A84AC2978E96A9B8705E1F7A18A61AA0215579AF52357460C1074B9CD9C3278B9A3A6505867673182214ED30517305465C1610256D57DE700A4D95549D007757FB9C110F12F87998E9AA7A8F4D6949AEA81A07BADB5B301023A071BD04934C19A2F41BFF72B3B1E5216C6D388901B1E310A131C961283B6898390CE3FA6BC255132059C5DE95B941CFB22F7E5903B114C514B06708B60DC594EE8149184E442F931887CC7C2BB3B88CB2922A7019FD5D02F9121B4A330338199752C044AAB6C9AF85866726C03CAB5AD943A43996B567E112325F576A5F0CB65A869B6F6C14D584758D90237A319E788CC8F074EF48AA092B5AFE4A22E4A2251E792C6B9731932A52B6C44B9470969A8DAA58519BBCEB53FA12851083BC0C0662F75234486118355DA5FF725C389953DDF6943B0529709B5BCF578B516396B4780AAADBA330EFCC2CAB84E29998B3270C8ECF13F9577715A248D82148E11789CE2EB085768A33EAC607764C3288C06DEFBBC0958C646D4BAC10CCC98C7816245386B88CAD7A0CB71044C5435CB42D987C9941F9D7A7CF31AA1987CB44FDB5DF2E728F3E51D46D4258C8697BCE063377202B1A9C59C2194A10392A6D79B5B5A1FD86B41164A342DF735B4A9991478A209D0793CC124C3C20CB5E7406B449001760540F2400597BB551C9FF2C259E02882F16A982B9C9D26E5AC9A10551AC78E904630E698ABB1396B8A34305DA060B20B30CC1950882C616398420A2B73B660A71C738B6A89103B17C4EA928284044C5851078B7A6842D64CF4D74816D1688DAB064DF7C6363C18549B86BE1430D7252A2C4BB9D262B130C2CF5C8708E5FC7D7137633F94850647CF4BB4081E57630D08C5D3172E7B7B8137175A6846A8130C45FE745365C15B9F644612B1C13BF69A6B1811F5442D5EAAC40E309D10BC3F4369797F95988F926972BA6555484284962E37BB9706AB64DCC63AA67C41D8C99081F5CE82EC6853F70B5508535243B6DE41AA9C068773F4461C77B701AB75D7A8B4C5659B50128E0B4B207688C466F3B81072252E61552897AC0455BFCF490F63F58519D8A74A885A9A5044BFF81E00332B4F52B3DAF75B95F22E02D7816175C59448A981835858D5B220566EFA9226E2931F38D9444000721F960E15781DEF2BA5866B4807F0516E4953DEE97BA27139C0860643B14230485BF0F50A44013B14D9C60F1029895769FB24ABC614291A978C5E5139D7AB0C11AB2919140E3B4B713D6CBFFDB4718D11CCD7A8BCA491186A6D56C5959A2F5EBA5F8E83B574F3DE88E64B69C22D5F6AA1F2", + "dk": "1BE111F8667789B6C04357C7C2472533D0C84B47931D1488342952E9E56E87309F9D328576504DF8081F0431C841A0022F9B734DE5864A572A4C7A433097BB420C0B93C9CB38161B5BA779B7F88582B13EF8364141D6C494557E6E29103727073F5882E27543D5D5C7E7A3530404CBDB00C1118780026C6021C04B2FD79D1673733661C54F6229DE6A05258554CC79506A284FE20AB5E69492D70C60250026CFC71859686F862A6AF2B4CB8FEA1D78D7B2001A4D3424A839FC524DCC1CA15025D5B87C8922300EF359456B5A5AB3A55FC4487A8CA7A68954348AB5BFDB25201142859A9962945849DC99747B0BD0A32F5F81794CD60CD9144E022C6819087FDE54833072537693404FD21727C374EF1A3D75EAA1B6340B87838441E3B30E28B0483607F8A7396926CD5E155D6278628A5600A1D00D27D3BBB9674DC1E5B331B7706DC696CED33720773152B0181407243EB1709930BF8E55C8A9D1B367DC4F92449B21366920271B22B79D8B63275A32A71EB88527733F009A88B87397F2384F5D020FA9817E6B468DFD9C378D6B37C5EBC7C37393210C77DD856C5DA0A584F7B5F9112B03C6989B9692FEF87C59A7131A0574068A9D89A724D52C9C86B82B0BCB007332759204936B8B36DFBACC0774659A40AE290B3F148685DB1854242496CC523C14DC84B2310075734809DBB63245675621700E5B7587C3694490910B550EC381289FF8A141011187C17A00529C41450CCFC75024455913049504465913BC8D43AAC4260AB1E82AB2E53A659459BCC6A11323436D13FB7E24B4A4673431AC829F9B705EE6884D809243CB2444AF9020DF9A43D5E173960BAF36C7CF4C5B42AFD04A23DBA470169DE876A451260C8C07335C075ED36C9651D71DC55370E30B9FA10477B03CCA60E0BC7014838E427DDB486E36433ECB9138CF59654171067EF4A195FB990C5B3737B51CD2869A1EF81DB07C2BC9084DAC9052932B0D9768BEF89AC7B170557FA84916A9528962256634A626069E3DDC9E604B27F8117F38F82D2872C8F7E158F8D41A86DA96C748C9818986F4F65F39707DBD38419F216762908F854AAFA479497A28C3FBF69480CA97AD09B08B03C5DC62B9457BB6AD5908F8541201E1027F24A85373A24795B2E5BC9D57D275865C4073E28EA748BEAB632E8244C88C756E8441C38E09447AF84C8B8B4F779A32AA196C657862DF059A4E97C90DC272B3041F96E760D1D2C3AD01BF8415568F7C46B7F5B279211EEFA16879D2562669CA6B5341DB466F7ADA07D4BA2D50100AD4F95113A56A947C12EA82C35B7C986B6369138A90C4CA3426A8299BBA4B1E5559FC12BF88D27C3B82C155A94FB0F96A6DF52FE0913CDB3B775B3513891B5D35653FFA8878F3D09BA3F4CF6CE587DCC28721FA40201ABA1E63144B71088650254237CEB32395050B14F97347748A9CF8508884F3213302C38F2BA4CB1647406380FB58970143854687AE3B0C0F6D373926C0B9392976A6F6A22B9CC60732B4EBA37F27843A4B905DE6E72C0EB568774188C9BC160BB67BA3573D6D443B810634DD455E7C8334A419077CD2B3FD5C999CB5101D021D8C682F1702CF3336C1A73A3B9B8A0EDD7818AF6B9D6E1059603063A52218E1C64967270D8093B65A73A2739C97B0922C2A0A05F482568A4B364128BDF238ABDF5267995B20B3919AAF3B9DB5A2315C74429A1511C25775E4029FD1FB6626659EFB4B74013694E6B1796CE918D5CC37442B886278A96460330ED20CC7AA80CEC6CF4234414501C07A2A708651C907F56236A056E8C722BE6B2A50E36A70626B5DD456ECB1A36A2C6EEB05B9F1FA61CED6C509B5A417CBCBAB5B9A88BA4B3B55C2FC57CD47F12438CB88E38C70480C6B1993BA78B0032B3C5B5FC7650A85ADAE53BE42261695EA35E03142A14BBA4ACA9F24A72B6F3C3821AB7FD106167AFCBB0DB58D4C58A02E5B4A565074F0663C4B7408A4382A84AC2978E96A9B8705E1F7A18A61AA0215579AF52357460C1074B9CD9C3278B9A3A6505867673182214ED30517305465C1610256D57DE700A4D95549D007757FB9C110F12F87998E9AA7A8F4D6949AEA81A07BADB5B301023A071BD04934C19A2F41BFF72B3B1E5216C6D388901B1E310A131C961283B6898390CE3FA6BC255132059C5DE95B941CFB22F7E5903B114C514B06708B60DC594EE8149184E442F931887CC7C2BB3B88CB2922A7019FD5D02F9121B4A330338199752C044AAB6C9AF85866726C03CAB5AD943A43996B567E112325F576A5F0CB65A869B6F6C14D584758D90237A319E788CC8F074EF48AA092B5AFE4A22E4A2251E792C6B9731932A52B6C44B9470969A8DAA58519BBCEB53FA12851083BC0C0662F75234486118355DA5FF725C389953DDF6943B0529709B5BCF578B516396B4780AAADBA330EFCC2CAB84E29998B3270C8ECF13F9577715A248D82148E11789CE2EB085768A33EAC607764C3288C06DEFBBC0958C646D4BAC10CCC98C7816245386B88CAD7A0CB71044C5435CB42D987C9941F9D7A7CF31AA1987CB44FDB5DF2E728F3E51D46D4258C8697BCE063377202B1A9C59C2194A10392A6D79B5B5A1FD86B41164A342DF735B4A9991478A209D0793CC124C3C20CB5E7406B449001760540F2400597BB551C9FF2C259E02882F16A982B9C9D26E5AC9A10551AC78E904630E698ABB1396B8A34305DA060B20B30CC1950882C616398420A2B73B660A71C738B6A89103B17C4EA928284044C5851078B7A6842D64CF4D74816D1688DAB064DF7C6363C18549B86BE1430D7252A2C4BB9D262B130C2CF5C8708E5FC7D7137633F94850647CF4BB4081E57630D08C5D3172E7B7B8137175A6846A8130C45FE745365C15B9F644612B1C13BF69A6B1811F5442D5EAAC40E309D10BC3F4369797F95988F926972BA6555484284962E37BB9706AB64DCC63AA67C41D8C99081F5CE82EC6853F70B5508535243B6DE41AA9C068773F4461C77B701AB75D7A8B4C5659B50128E0B4B207688C466F3B81072252E61552897AC0455BFCF490F63F58519D8A74A885A9A5044BFF81E00332B4F52B3DAF75B95F22E02D7816175C59448A981835858D5B220566EFA9226E2931F38D9444000721F960E15781DEF2BA5866B4807F0516E4953DEE97BA27139C0860643B14230485BF0F50A44013B14D9C60F1029895769FB24ABC614291A978C5E5139D7AB0C11AB2919140E3B4B713D6CBFFDB4718D11CCD7A8BCA491186A6D56C5959A2F5EBA5F8E83B574F3DE88E64B69C22D5F6AA1F2C56D6D9FD34C4AF5A9F9B96FBC6E2D536CA5B5D013ED48634306FFEF6CAD97A43067580B271B818EEDA0A97C004117988E6D196FF82AB71D9D31CEE982534FF1" + }, + { + "tcId": 40, + "ek": "930B9A45D3343D357A5AA0341042862B25016A915C54C47D5EB6BE9008B6374CC5AD2800D9026308BABA22AC3D2361AA21328E007D705BC7CE668282D095980551404356AE36AC517695B9B98A7CECC6BE43B1A68FEA95D364BFCE1662D343B2487C0B0592532DF9540CD49CE12425A3E658697A94CE5B802FA2897F149A10AAB567846EE3673360528095D78A00E5BA2FA2658540C6FF17AD830923A4B7226BA82082D662C0BA76912A40C12C824BCB1ECFAC66E9F25425536381108C3A2883D8822EF7036A11C42B17D68CBAE700B27BC0CCE54935B1AAB299A944E31E346003FD113AA6B984D9B4186F9389FB588A9DB64EB137028382480C264385351E1558497A777896EB1DF383151BE0A1F903A1090A3601812983F26E2EFAB1BA05CBE4CA65C00CAC54BA549E00124113598A785058B06C3DA0606C0808E6575217AC47FF4CA67F31AAAE40656418B424A741CEA7AFE8F3A5C6370056EA052206153DAB448F24CD49383CBEB372F8AB7D6A46BCCC3774D9263E0FC61832CBBF37FC263BAB325A099F4637C50F24962ED4C6BE178F3605C7F4C12447C05F2A710D2522B410719A5FE4A5A782B4DC2A917D1CC7345478D348303DF03B90A2CCD7B56AB72B8A10840538BA7B27B144227215E04A464E68934AB77A90F304FDD7A111D7A0EFA1719386AD80F9226C22A05E10A561830F3D719288F4CA2BE92B7BB3AE5AD90A3D80BD9B490B24A43AE2CA8558F18FADA81EFD1A6271CC320968CE9F19937079A6EB0C5503253E5E30267742ABE745A650C812BBE6501C2970B13ACC0682493F6C6626FB9200FAC73622773A33537AE0CA47F6576C9863B533406D7231E50B44D20905819013CDE4A81A2933622309631A6BA9942281B96C7DAB3A4E6A86B9EA93D25234BFD5A8520861B471455404373BB5BE16487F85D915DD20A4E207CBC41B393A3C36655632C12B69674267606104FF5B2105C696103113133AA55A0777F78A8BDE89174985A71BE79807919E4BB67C10F337B15A2E6D0468FA3B6861EA6C2777614E388FBE6619CB714D2AA59AD3CBAE42FAA719D88AEC1273489026AC6CB3B8E67E74D059983AC8A2F284BD509DC5CAC661EB33B9317938C4CE17F24A719581B108A6D7D22135E409FE681085B84693914178BA5D9A153FB8B47CC2E59115F72496D66E5B81AB7DF45FDB9897BA05C39C018C6D3435A5E38F7A22AD5C18B5C0AA036D3940D68BCBD3761F83AA19435464BA28BB2963CD09B2919814CC0C43366C7B77DBD64B67111D9D3532A2C3BE6CD87F3CD4C1AD8159392A63A9C6AAD6291E26C7AD529C82968771AFC8173E525ACF885FB56C5376DB0F5BB9984F64A8E4796C0F123BB04B1E09B9B8CCA74F263B580DA4CDAA935FA49016C5D8491B918CF2DACA55632DFB22B926E8458687656267599F100F975362687584DF876273B5558C72A7178B8463F018BB646C5EA623ABCA501E739129475971D0180727956C8824D0976D9C5013EAB7CC00B0C241113ED6EC0E95F2A0D8A14F80430AC5570755689A450A21986A3154374E2F369B97BC620AA28CFC055FDB672582991D2ED41427B26A510882C4F24CA92CA87E13C4FD457683509315C49C864CA70FF604DE9F46118BFBF372AC1DA15F0E5AB560231AF19C5306989D7BD3F736EF", + "dk": "E4C0AA1A05577A70A2D717002F920B169BA0A54267C9097058BB68A4C836582C0E8BC22EFD70073A392641C753E39B8D028BA109358170C25A0B7A4556EA7202EA8F2EA6BC91D5C5905AB96BEABCE13C51CDB28173172278F45D44312AA1D131DE989B925608EBA89BB87909D9D39F88DB4AB4993886379EB2F5A2DD6B11FB6590544CC89E0391214C85577791B4E827A9803774F8778B43BBFB98643CCA9267A6ADDBE17F0A5A29A530AFAF180BFC187BEE522D1A012D4C7192C2DA3C089A51A6FC77482914D7D25EDDE423E09A7A2A70010D601B27966CBB805C3715A0F68B57EB176DBEEB4868A009578B678A727C7638594B70963C3846F176CAC4F808F5B66739F533395B0A6CBA0B693AAE61D149B93C544F5B694A096826E840E7511ED6C450DD5B124991A6828115FC6347EC2C08C351913568B37108BFFAB70BBFD44C92537597355FC45C34E2640B726933FC03C02CCBC1176B5512BC11483041C5E9A38FA30C78A0B5847135D6D031ED01A8267B1B6AB57E2CF51168448300C63049F608691C55F27367E133BBEB63B43988B1E4502268313029352F5075CFCBBA5896190E1EC68AC31BC9B379792B506A81852FD8472798F280396351CCC765E4DBB936B9B44DA84DC955AF5CB584FCA1175F7B8B5058432A04CA144539BF071D38579F067319CCA94BB04798FA179CA224C075983EFB26227F196FADDA39F70C589F2B26928BB6AFCB317F12A4F52A53CBB20FD0A55C8F6A3772C129C3680EA608B80317AFAA934D40120F74908F6EC0B690339E26695588205322C9781652A9B1CBCB712C79D968C77277AB06EC37DE1190FFFBA4E6F687FEBC9300B175E4AA9315C15FD1D9AB109B0FD0C12084193DDE0666C9166DD49C6D9495669E21872E21451FA6564EABA4A6B101D9A0B96B94C3FF5B4E27E53B74609E6F956D6484B58EF320EB804827608F8E144545394EA524BC49B62D20217AAE9A49D1182F456075A5579E560A67B994C61AAB65F5C80E9F068DB194133EE86FAA11C7230BB09424180AD7101BA623F0AAB204BBC569516F390A970E8849F0FB2EE5C3A96C671B6226095F555D6A130CCCFC30010792FAA16BB337C935BC84658AA696D70F344B208ACB01C8B0B3B5C1195E83AEF210B86BC517A91B308DC4321EDC742D869C8545261E6700DFCC523688BF9663B7D3C2722E083E018415746A242FE41A2AD73F71EC25A54A36BEFA411672BF65D1447310A154CC78E8EA19A7C8B4469B3D89CA103BC012085457BCEC916AD909373B8B853BB4753501454A39BEFAB66FA385B6300DCCDA6E8F81C28DF17B10D6AD43CA26B1B17E362901C5F0240174537C93464FD1A48CB78CD2868D705AC2E9513F756292044AB9619A79122933AB8433EAF53CDA373306D59527855C5FE27B5A63967AD0339DE54110796CC2C7480C049CA906C5864C5C426247DCC34D61FB336B2405DA62B7C0A258171642352A2C4B7B187007021BF55F06430E729B637F99B5C87B66F4E1CF1133B8DF14BDA18843C8904D918C1F21E517BF1CCE21943DCD9BCD91403BFEF61FB1DC3B7F62286DD95313C509E4A5B3FA767401D54476734AE3198AE0AA29E4C21C83BA64D291C83282A5930B9A45D3343D357A5AA0341042862B25016A915C54C47D5EB6BE9008B6374CC5AD2800D9026308BABA22AC3D2361AA21328E007D705BC7CE668282D095980551404356AE36AC517695B9B98A7CECC6BE43B1A68FEA95D364BFCE1662D343B2487C0B0592532DF9540CD49CE12425A3E658697A94CE5B802FA2897F149A10AAB567846EE3673360528095D78A00E5BA2FA2658540C6FF17AD830923A4B7226BA82082D662C0BA76912A40C12C824BCB1ECFAC66E9F25425536381108C3A2883D8822EF7036A11C42B17D68CBAE700B27BC0CCE54935B1AAB299A944E31E346003FD113AA6B984D9B4186F9389FB588A9DB64EB137028382480C264385351E1558497A777896EB1DF383151BE0A1F903A1090A3601812983F26E2EFAB1BA05CBE4CA65C00CAC54BA549E00124113598A785058B06C3DA0606C0808E6575217AC47FF4CA67F31AAAE40656418B424A741CEA7AFE8F3A5C6370056EA052206153DAB448F24CD49383CBEB372F8AB7D6A46BCCC3774D9263E0FC61832CBBF37FC263BAB325A099F4637C50F24962ED4C6BE178F3605C7F4C12447C05F2A710D2522B410719A5FE4A5A782B4DC2A917D1CC7345478D348303DF03B90A2CCD7B56AB72B8A10840538BA7B27B144227215E04A464E68934AB77A90F304FDD7A111D7A0EFA1719386AD80F9226C22A05E10A561830F3D719288F4CA2BE92B7BB3AE5AD90A3D80BD9B490B24A43AE2CA8558F18FADA81EFD1A6271CC320968CE9F19937079A6EB0C5503253E5E30267742ABE745A650C812BBE6501C2970B13ACC0682493F6C6626FB9200FAC73622773A33537AE0CA47F6576C9863B533406D7231E50B44D20905819013CDE4A81A2933622309631A6BA9942281B96C7DAB3A4E6A86B9EA93D25234BFD5A8520861B471455404373BB5BE16487F85D915DD20A4E207CBC41B393A3C36655632C12B69674267606104FF5B2105C696103113133AA55A0777F78A8BDE89174985A71BE79807919E4BB67C10F337B15A2E6D0468FA3B6861EA6C2777614E388FBE6619CB714D2AA59AD3CBAE42FAA719D88AEC1273489026AC6CB3B8E67E74D059983AC8A2F284BD509DC5CAC661EB33B9317938C4CE17F24A719581B108A6D7D22135E409FE681085B84693914178BA5D9A153FB8B47CC2E59115F72496D66E5B81AB7DF45FDB9897BA05C39C018C6D3435A5E38F7A22AD5C18B5C0AA036D3940D68BCBD3761F83AA19435464BA28BB2963CD09B2919814CC0C43366C7B77DBD64B67111D9D3532A2C3BE6CD87F3CD4C1AD8159392A63A9C6AAD6291E26C7AD529C82968771AFC8173E525ACF885FB56C5376DB0F5BB9984F64A8E4796C0F123BB04B1E09B9B8CCA74F263B580DA4CDAA935FA49016C5D8491B918CF2DACA55632DFB22B926E8458687656267599F100F975362687584DF876273B5558C72A7178B8463F018BB646C5EA623ABCA501E739129475971D0180727956C8824D0976D9C5013EAB7CC00B0C241113ED6EC0E95F2A0D8A14F80430AC5570755689A450A21986A3154374E2F369B97BC620AA28CFC055FDB672582991D2ED41427B26A510882C4F24CA92CA87E13C4FD457683509315C49C864CA70FF604DE9F46118BFBF372AC1DA15F0E5AB560231AF19C5306989D7BD3F736EFB33FB83BE33D15217CF265E0FA7164855101E2F2FC8DB1D0D1B4822F9DED92EBE10C5B948C23948B69BA4B1133E27A86B4E17989ADED93B455D1127932C592B0" + }, + { + "tcId": 41, + "ek": "27406F57603AAEA27C542B4CD6A4395320153E062FD442BEFCD4B3117018AE654EC5E5C2132C1725DC0C09F44AB2D141036A6B6F372AD4A4A0EA71916CD5510DB7843649BD4C162BC8D4740F72CBC29765F62AA22BE1975447BE0D479BE499BDBED98E1B141B93F213C9153870F7CA48801E98801B39402CD979318652AC2434BA1F331C928844BF6143E1FC079F337B91CA9296BAC0073C29BCC82C4DAB6633CA112EBA9F45EA886885BB50180A2EB437AB48A0C4C914E4E897C66C5A3B190EBAFACDA43A4698E0AAA7BA0FC46AB2633191644772532748F66BC3D45BB0EF587DE2107021F13387791EBD656B245C5B7786BA51FC72180453B20A0352AC9632B2A5DA4368E1B35E21C908E975CB67003B53C24E260C88D456516DB09290F14D63F73993FB98FB2703A3B89FF2F76F2AF4B1E917720D2CCF17A3BAC9E821D8444C683C3010413473028672CB4CDEC4B688B8CA99050ACE06A1E0A36FA8584B749710D0E1C4C15C091A7714AC2616F58805EB4023674BB1763936EB394142B589EB245414B4376A061D8A02C5E6B808808C19C910C5199773CF75A66CB349C668345E07B66D291D94842BBD535FE04B424744212B5B3BA6F97958627A3D11845BA207A2A71A99441542482FC4E960051B3EC223AB4A80B46FF93B3D386B4E621F5DC57BA5848F6718197C390D38FB507788613C8799538933769984F04B4CA5112C4DD009655B5450F7326D1999ED17C998565E6BB568E0565F651551213272195BCA1A690E5A6930FE679424717176B807EDFB50148A37AE74C0D28568AD16BEE807C6E6DA0C51828EC3ABA59266CF52409CE50808FA54CDED8123008B3B9D46C4356263BA946225AA6C0E7B7BA9399369110EED524FC447B2D41901B53363BD216E89D5108365431AF621425B63A50741CB0C8B16F006E67AC4D9C568FBBA7A51C70D970B2E106C50E13C5C00B04C27DACC171B8A80E010B085A3589B6271EA6BAA369510BC648CE41BA2D1C46B756DDAB2836944B31D733388A3CD22533E87F736CBD3A6BC3ACE1C508C739541178087D990308C30A9F52C3273764AA474874A461D58CA32345CA8F5D897E2E766FD88A060C592B9C56478057AF1F06D8AA44D2E130F118C2B51F9BD909717E661CEC8F7881371C7398C01D45570DC1B72C876198C5A488D5CBF118577897978FC976EA4E01845AA1CFD0632E4840DB6906C4A80990BF256ED48370C51B843C0273112803E2911222077786322CA466F959B85A09BC17E5286BD9C173DB2333AA577F6B6ABC9E79CCDF0A39E8383EFC410E3745380E11EF5B174D77C19B9207D2DB418FDA5296E4692B34A211FB1ADF5B530913B4608B8788441A332BB474DC50D8F034B7471B554075487D320FB0618BCB94AB1950EA0720E7C1719612A58801C729D7A84EDCAA4D852B6CB6991DC485AB3096C59C868EAB940A072385F854DC74C5819F618388B07B4081CA9A7CDCF36950CCB140C821153F73077097AD84BC0B4EA26052506C0F6763C012120017D536417DC3438DD20708A201B77565BEAACC2CCAA0888126A98D6670C417FC61631E263988189469E4AC8683BC00DF337DCE70A269CA6ED594F47D7407DB9746AF099C3C8AC0E0159B4F032102D66BA8769A6DCA6EDB3D07C5D191F1C9B3B0ED96FEB", + "dk": "B6D5C60C4A0E15E1B184708E397742F0922246A96066F9AC91152A8DFC1B7CB6A6919B5344D58D9A8B96F2F284F0C649E4214147DC7756F221110620529B0B48B8125005A922CB4DBFE8145CB16AB6747981C9B7579CC9CA3783622603A3573A91809D8DB6C811F43816D6038A3694436719A55C000EF53051EC8D20C8C35D54374E5558B93C4304A3B7FF468986905581A5C07A40C0D2277C4EC0226FDC6777256CB3D166D7D37121969CCB056BFE236B1025129FA50CC54BC688267F9B35502EC37B1C24856D090B7A894969D922D10595CF2B87C7A10EBF3B9AED87052E182893C6C7C7A94A46D39CB0C77A04169A6468426606BA6A7586048575AADC9368F5A692F82940F7C09AC648700639304A0DB3E18C46AABE85D5CC94027D33A55BEF45228784848370AFE68CA11CC9114A9259BB993471FB0D66794F8228399B1301399663E11ACDF25388DA19B3E3398C30650DD17CCCF9F0AAAD9B7274C3759CEB777BC68B0E10978C46642E58980E1CC210599D2A294424F0978DE6A4E9B89D499257C02B8EB80BB749D9AAADA67C54C2265EAB074DB6CE695A521B32CA7B86C09CCB95AA913E0EE1B9E7D9065716CC1B032E6AAC18614B73D27693CB97529C6695C2E582E82450FAC485D76BB322450605C3BB8D3501A2ACAEEB544000DDB59BE7BC65DA9AC710B7A2264F0E319E038187581931F23A2DD7C1192CB1030DB71A13127CFC836DF3A97387D5B6A2E1CCB3A07A5A012C5FCC6BD4708B8A3A8D3E966D703CA9BF9927F4A5C5C0324C244084C2F522642148C9414EB02A3D71E53A7C0A839210029CC24E7FD9B98B99182A2A52782B1E52C42015B78405262992E605D327835F338E4D6513029C439BEB842D9BCAA49302978BAEE823B50CE32565E27348B210E3AAB6EB85C135F1BE773B79F4DBAFE3A1C47554270D68248DF6B2514A6FD98B6ECE3B3F5BA1C1EDAA90A8821ED7C14D93D5439DA03EB41C1EE01327744C40C2C5C5EECCA6A34A98806A7D00114D82FB9B9FF83BD027671522BD3E6B98EE83209E64AB4592C9F206A0B2D9C657973EA51B6500B7494EB66EDC7B2A62B285006CA3202A2048527BA32B11BFAA77BF15B81FB86BA98720B19479D52528FECCAAD2CA822EA831058A9CAE79679D22CA4B20B6EA9BC1E5AC194263291CE18EC067B47B293B5A63520DB294762B90C7D8405B924D8A081196C670B968B64D06040EB108235767344AADC922BAEFE1577B798D2629CECBDA46996C650A440A39F180850324A2C32A22F07384EB9AB2E8AEF75BC009564A82B3425D56559C178672A02C3D11CAAB8C6B454164D7AAB264858298C042D6D698005AB61B36783B404FDA49A7A140A93D94BC2462560169160D3A683E241951948A33651D94780CA8D94ED52946C9A8B3F30A34A2199CFC7922F0B518B52690F266AEE1ABA36B6A5423DC26714B7E45E186E418CB7C08A50DAC2F7DF1B902B962AEA8756A213B81D129CAB65CEDE73657BB4081408B6FD7C6C44573FEB6B2CB6A2B7E2B7AE22A1CDF4B6437791DA27A4D88C99255C50B1B67A4DD881031EC752398B898F9AFAA1A5FE943712273ACC284608B806D347A02B7F821F82957F821663F732E11A34E27406F57603AAEA27C542B4CD6A4395320153E062FD442BEFCD4B3117018AE654EC5E5C2132C1725DC0C09F44AB2D141036A6B6F372AD4A4A0EA71916CD5510DB7843649BD4C162BC8D4740F72CBC29765F62AA22BE1975447BE0D479BE499BDBED98E1B141B93F213C9153870F7CA48801E98801B39402CD979318652AC2434BA1F331C928844BF6143E1FC079F337B91CA9296BAC0073C29BCC82C4DAB6633CA112EBA9F45EA886885BB50180A2EB437AB48A0C4C914E4E897C66C5A3B190EBAFACDA43A4698E0AAA7BA0FC46AB2633191644772532748F66BC3D45BB0EF587DE2107021F13387791EBD656B245C5B7786BA51FC72180453B20A0352AC9632B2A5DA4368E1B35E21C908E975CB67003B53C24E260C88D456516DB09290F14D63F73993FB98FB2703A3B89FF2F76F2AF4B1E917720D2CCF17A3BAC9E821D8444C683C3010413473028672CB4CDEC4B688B8CA99050ACE06A1E0A36FA8584B749710D0E1C4C15C091A7714AC2616F58805EB4023674BB1763936EB394142B589EB245414B4376A061D8A02C5E6B808808C19C910C5199773CF75A66CB349C668345E07B66D291D94842BBD535FE04B424744212B5B3BA6F97958627A3D11845BA207A2A71A99441542482FC4E960051B3EC223AB4A80B46FF93B3D386B4E621F5DC57BA5848F6718197C390D38FB507788613C8799538933769984F04B4CA5112C4DD009655B5450F7326D1999ED17C998565E6BB568E0565F651551213272195BCA1A690E5A6930FE679424717176B807EDFB50148A37AE74C0D28568AD16BEE807C6E6DA0C51828EC3ABA59266CF52409CE50808FA54CDED8123008B3B9D46C4356263BA946225AA6C0E7B7BA9399369110EED524FC447B2D41901B53363BD216E89D5108365431AF621425B63A50741CB0C8B16F006E67AC4D9C568FBBA7A51C70D970B2E106C50E13C5C00B04C27DACC171B8A80E010B085A3589B6271EA6BAA369510BC648CE41BA2D1C46B756DDAB2836944B31D733388A3CD22533E87F736CBD3A6BC3ACE1C508C739541178087D990308C30A9F52C3273764AA474874A461D58CA32345CA8F5D897E2E766FD88A060C592B9C56478057AF1F06D8AA44D2E130F118C2B51F9BD909717E661CEC8F7881371C7398C01D45570DC1B72C876198C5A488D5CBF118577897978FC976EA4E01845AA1CFD0632E4840DB6906C4A80990BF256ED48370C51B843C0273112803E2911222077786322CA466F959B85A09BC17E5286BD9C173DB2333AA577F6B6ABC9E79CCDF0A39E8383EFC410E3745380E11EF5B174D77C19B9207D2DB418FDA5296E4692B34A211FB1ADF5B530913B4608B8788441A332BB474DC50D8F034B7471B554075487D320FB0618BCB94AB1950EA0720E7C1719612A58801C729D7A84EDCAA4D852B6CB6991DC485AB3096C59C868EAB940A072385F854DC74C5819F618388B07B4081CA9A7CDCF36950CCB140C821153F73077097AD84BC0B4EA26052506C0F6763C012120017D536417DC3438DD20708A201B77565BEAACC2CCAA0888126A98D6670C417FC61631E263988189469E4AC8683BC00DF337DCE70A269CA6ED594F47D7407DB9746AF099C3C8AC0E0159B4F032102D66BA8769A6DCA6EDB3D07C5D191F1C9B3B0ED96FEB828A71FC7EA1BE91AA8AE16F67933DD8897363B73173B34558944B47E1F2846D4C560AD6E70E024E7E942EBDBCCC75DC085931E0A8E8278284B2C2393C458C30" + }, + { + "tcId": 42, + "ek": "DF78A4D0E49D8E3A347EE49FFE4A4F6D9A9BC9396F60B16E44B3508EF7B42BB34316DA7DD382BBA2200E4A038F94D5A4770533B8E13BD4640BF39A72B240B47552BC9DCB47675A208992A775B44E922B20EB49B8FAAC1ED73C9751C0C44AEA2561C497DB6964106927E74824E5A3B032B3224D2C5397E75FC64621FE4B9DF3F88AFA2958E5536121A01A42D969581B596F77743FB6A345CC4227666D3716A16A418349FA1E6AE73126ECAC1CE598D9F0A1D8E21E1AB6A15154AACDA0BD8268A2A3184EEDBC05E7A85BCAD88F73E4B7A44C74FA671A3C660C6A3A6A7A7C55C3390F41B646BFEB3B63442B05BB0A3D79276859B63DEB1A0CF67FDCD3BA3905B4B40C59257C38515B3C22F3863DBC61AC920B9EF586C4E94721C4AB5A6620B7973B2EB8099C610300208FDF2201FB3785A6D0428BA1753C691CC64985FB356029234B703B9C805A7B53A985D8737A0B998A81A684D1176F0AF7892E3788F710B60BB25898C5167301AA7ACB2D8EC61920E83169AAA62FB6B37F102BEBB90E76FA0350F69DAF7AB92E249764C02B9B8913758CA2E18B4DC9669147B88269C07E00C1278DB003678793AD1A0272AA5BF4B6307D2690E47ABE712AC590B8007FC534221968F9F033723551547557CD982604A95D9A83720B2A5438D29E22729A772C1BA5837BA394CF89D04D5B740BEA8B80760B2AD6E0BCCAC21A6BE329A4ACCA3B7A4694DA06C713139BAC4DAB408722303D75296CD1947A9B5C9DCB6C1A72044AD3C061D3E09CE7DA79BD2CAF16470810E7A4DE92A313058F189426BD7991C0279ADD7CB6364CAD6C6A0FEAB8806EE8BD6B3818D47A92E30783875909E5CA900199CA60DA9A80F0BF7B7340D26C67F51B255678A106F021E2D3514C014BAF1BACD6CCA02226AD45A676934C393575C3F8FA7A5F5B10DE941C282B88EE2B0DAF5256C922C378EC5528991A7014A7B9B3CE75C48A3AF8AD28792F810457B409C90ADA7531B29F079442F39B0A9A9C48C3B720B112129E414000905CC6FBB04A7CC8D1090431054B43F38FCF5339D5340DC84A7616387A382553D68376719325914B701A128E8BA23DDC2C2ACFB976902CB60ADC2AA1094745A6078660266E0A6DB3910BA072822EA636918BB3872272EBE2588B5ABD13AA3EA7688BF67B83DBA5062BC63E0E3A2949058ECC4C1826C13D306B8B863276F6174A22E5BE7B40B9BBDB8A471A0F4B2533AFF9815D5582A3243B04D62378730118A319DDD1938DF91530A6282A12043889395DE82BD9B913D3D49F35BC8AAE5180A53004DBE78356435D9E5B81BA53936DBA454ED4C616A30FAFF94875027CC822C6340C07B8A43C2EB6B32DEA4245E1A161C48246140119144062D841D2001DAF00CB6838388BC714236A92C4926686D430BC092D9A17B0C1C2AC27102BEEF62D0895663ED3C8234AB1ADA39FE04C8996C7A99A3AB469A02CAB302DE851A956D957F32A334348B133459696D2734C093E25681ABA26B2433CBFB7A8BD41C72BE5B1CFF0A17C9A46576A5C0C39054BCD30C29AA302CF02AB81A58EDF4199A85456FC98285A5BA5DC06B988386EAFB7535D84C2F2AC2ECA6C8C8EE7CCA978C7F72C1B4313810C8A21F1B13357A8366EF993EF9868BD6215E2C05EF52EF47A5D3F1C4698B7B78669E03E3586", + "dk": "5592BE59455FAA5B0454295CD1A84EF4434E2AFCC76A982FCB336B1E817617670B9D165BB674B2F7C344FE56355DC577176431DD5A2EBA2A7DA7C272CA2A4C7CB25803030443E677B4B3447CB47806F815D0E114FBBC01D205151545589C6AC8595B5A294111F608BE44C4BA5A069C2212C24B47A20455866ADB5EC2CA515D13A70CBA22EA81322D56BFB249A32728A0F1E7B3874A25C98B4FA901396C8C214B9500CB93818B0AAE7E412B2BF55E0AD948D80A9C01605EE139CB7468642EA7AAE074B3053137A56A4CE3E7822E4A73CDC5BFE7CC181643CE02869C38EB7E15A491A4AC7FA8B722968B55A731B94375A14DD0632C9C53EAC26A4961967E2CC9FCF36E2CD94C1CAA29073B844889C22BC940660C95FF9A553A77BABEE7C67F922684E097A175C9BC9516025855EBC6C5387A3A47C3397E07A6AE2B67E76B4690C0962282101D1565E9266F1719526504145E3BA82D3CA31AF63761D5902A3C2E69615CE05C2450F32BBC82A750A74A2267C9417401F5210D3F1C3CC53AAC1A85A6926213FA84ACAEB1CD8751B588995E938855E7095FB581096E14C348079802C5390EF218164042EE0649FDA045564ABD9AA7C95B40C9C0E96A6B6CC1F51C86F1886164684D867A8C5DB1BEE29BA59BF5B043F8913240B2D2E70C4938B47892AF2D9539AA2A64C3E595C44420FE9C744AE71052E324EF2A5D6F279FEB621F77E3AC5F108A7341B8989A7F9C26C472CA13AC5B79B677C2258825659B4052C8B675F98AC54BACBAB7C0B9F85D0E757B6577A9B26C571D069BBFB54B8F125B8FD525F8E964229B0A4E303C6C3BC2DE829B5AC3982A256DAF8633AC66CD8DE50D65B75F1FA3BFA0C4056FB304A15032F05391FAD20142D6A6978413505781689272F4727A83A99CCC7C46761BAEDA1719BCC0C36DE91AB8E86E25130EDE6B44BC03AEF288878C22938EDC8D86910B67E47794617B3003190E7C8893C06D5642054F511B83BA5A41A56CC923B1DA59B59BD73F80AA219E5231EC927F0FD96CAF9CA60F60985BFB926A93352FFCBFF866A6C94A86DEE734AD7C281B5B225589C6140C705972AE30C8C4135089A18537E611319CF2C1CAFBCE3CF86DCCD69C67F8070C9783F5D217570776F9392228436014CA3EF3FB7A91530AF8C5AE05301E56F7827D92077795A246905977469F20C306ABC9C58FA494C3A2471CE07609C7B648E4CDF41992F7028C2CC3B349913C1B9874FD0B8D5A854EBCD24271077B27C1470AC07912D4109633C13207A41C107B77693B6E9508E90207CF243C51A3866F241283E49339594737B6192D7BB941B366A8C1A954C794359C064DB014FCF79206301A74DA1B05062BDD7BC5835B99C8EC7160CCB8298293FF3131D77BB454A95CB888AD7FEB1260482349BA08518320F00B9A494842F785B7C6211CE18129AECC38480CBB01C99311466BE1035ED7828068D16FB1025EFB2515EC935317FCA356C9A259F968EB84C154BA6F3B9229ED3CA99F27BBB84A45191C619F343D775C8BEE4BBD71EB48AB4080806B878379A49DD2B087191836B708F9E201E5B51F1739B2B56A77BE69572ACB17C846A2A87B1F7E8135C10576FA4313B321AE2A74BCF6A267DF78A4D0E49D8E3A347EE49FFE4A4F6D9A9BC9396F60B16E44B3508EF7B42BB34316DA7DD382BBA2200E4A038F94D5A4770533B8E13BD4640BF39A72B240B47552BC9DCB47675A208992A775B44E922B20EB49B8FAAC1ED73C9751C0C44AEA2561C497DB6964106927E74824E5A3B032B3224D2C5397E75FC64621FE4B9DF3F88AFA2958E5536121A01A42D969581B596F77743FB6A345CC4227666D3716A16A418349FA1E6AE73126ECAC1CE598D9F0A1D8E21E1AB6A15154AACDA0BD8268A2A3184EEDBC05E7A85BCAD88F73E4B7A44C74FA671A3C660C6A3A6A7A7C55C3390F41B646BFEB3B63442B05BB0A3D79276859B63DEB1A0CF67FDCD3BA3905B4B40C59257C38515B3C22F3863DBC61AC920B9EF586C4E94721C4AB5A6620B7973B2EB8099C610300208FDF2201FB3785A6D0428BA1753C691CC64985FB356029234B703B9C805A7B53A985D8737A0B998A81A684D1176F0AF7892E3788F710B60BB25898C5167301AA7ACB2D8EC61920E83169AAA62FB6B37F102BEBB90E76FA0350F69DAF7AB92E249764C02B9B8913758CA2E18B4DC9669147B88269C07E00C1278DB003678793AD1A0272AA5BF4B6307D2690E47ABE712AC590B8007FC534221968F9F033723551547557CD982604A95D9A83720B2A5438D29E22729A772C1BA5837BA394CF89D04D5B740BEA8B80760B2AD6E0BCCAC21A6BE329A4ACCA3B7A4694DA06C713139BAC4DAB408722303D75296CD1947A9B5C9DCB6C1A72044AD3C061D3E09CE7DA79BD2CAF16470810E7A4DE92A313058F189426BD7991C0279ADD7CB6364CAD6C6A0FEAB8806EE8BD6B3818D47A92E30783875909E5CA900199CA60DA9A80F0BF7B7340D26C67F51B255678A106F021E2D3514C014BAF1BACD6CCA02226AD45A676934C393575C3F8FA7A5F5B10DE941C282B88EE2B0DAF5256C922C378EC5528991A7014A7B9B3CE75C48A3AF8AD28792F810457B409C90ADA7531B29F079442F39B0A9A9C48C3B720B112129E414000905CC6FBB04A7CC8D1090431054B43F38FCF5339D5340DC84A7616387A382553D68376719325914B701A128E8BA23DDC2C2ACFB976902CB60ADC2AA1094745A6078660266E0A6DB3910BA072822EA636918BB3872272EBE2588B5ABD13AA3EA7688BF67B83DBA5062BC63E0E3A2949058ECC4C1826C13D306B8B863276F6174A22E5BE7B40B9BBDB8A471A0F4B2533AFF9815D5582A3243B04D62378730118A319DDD1938DF91530A6282A12043889395DE82BD9B913D3D49F35BC8AAE5180A53004DBE78356435D9E5B81BA53936DBA454ED4C616A30FAFF94875027CC822C6340C07B8A43C2EB6B32DEA4245E1A161C48246140119144062D841D2001DAF00CB6838388BC714236A92C4926686D430BC092D9A17B0C1C2AC27102BEEF62D0895663ED3C8234AB1ADA39FE04C8996C7A99A3AB469A02CAB302DE851A956D957F32A334348B133459696D2734C093E25681ABA26B2433CBFB7A8BD41C72BE5B1CFF0A17C9A46576A5C0C39054BCD30C29AA302CF02AB81A58EDF4199A85456FC98285A5BA5DC06B988386EAFB7535D84C2F2AC2ECA6C8C8EE7CCA978C7F72C1B4313810C8A21F1B13357A8366EF993EF9868BD6215E2C05EF52EF47A5D3F1C4698B7B78669E03E358631BF3AD56A7EB986694A3256A2D4F5F638D3C7AC6F91C0C04E4F68D146F48D2D2C7D1FC6FDD615CC078187877CD2744CA2687E7F0079C83DE6FBE3F78F52C400" + }, + { + "tcId": 43, + "ek": "7D1A5727D4A361109E5B62381AD4876444CB00E133B8CC86915C8013159785383E5CE61ADF761F6C65CFBC0507F0A2CA8CD966F6897C8651C597B386B5CA2478571F5F3202C3FA4F00B1988FE009635046F5A67EB8E279FC4336A61C207443C245950ED47C8EC4EB35D9E9C594894FC6D47431C142C84B0A6D64902C4A78F2AA1D76FA9D0ED207664997417A35BC907896255B2C0965E49A89D9672AF8E74E12E233EDD9128E2187E5D67660C167BAC1C76A30B88BDBAA1A8B218D15AD1CB446C9A87EB3A09A533625F0619229900C1F3621235BC7563339F2D2A41E9A994961ACED4354C0E5399788B216917482C25F8087ACB280276B5603A1C50AB3321AB335221A747027141DF1B477E004819E07399ED41F98BA3493028AADD3C107A791EA63372AC6B55C282F96A65376202159F745C499214940BFC1305B7427B0741C04F2FA09FB3CCDDAD751ECE926B2050D1F3A672B99682E7907C975C8DBA6C649C088C25A0C21D238D4C6A80896690417CCBD54B4BF88B2AF5ACBA6386B254192305C82402B19B2C463B85270CA780E9CE345350AB325C548EDC9015A9B791FFB9AAAB74D532B13D7F54013D745A2E57F4D78BB63E820427A1AA1A6365C5831DC3C330712C670B59AFC9A245428488B2913C2F0BD706A8EB255949F64C9C37107ABE3B1318499B09921233839ED1A586231400BDA9313B456FCC11FFC9C6F113B37C77AB28B72181E64A5EF361158943086ABBDE29C7C4F981266A9602BE478D3F96738D90B7812A70FC434174C4719464A4E2674734C4D7BD67E4F2957F8349A69AB02C9D09E6BA6BFE25976835627C5343488C5521799564629762600563028CC0DB4AA0D67CE5C3951A11553AD842867F4824B56AAACBA236672BC83F4C633509FBDE6638D17006EB52C9D4C6E7C70BAEFFB8F10F0BBB015756A9751D77B8EF0821259897A07960B489414A38B2F0CD5B5E418965F753FF2979386628325E5BCE4A13BACDB9A3862BE7552B120C6B26521A3B2EC1B31221B73B265D8287051093E6CC963697C655B9A22CE43014F5132BCE1CA80D34302506052E61928FC2E4CB23424809F1FE30562443862243C6D38B14EB3A86B4682DEA810E1231F1E030F70E75F75050069E83E63C1C9BBF7C92F38BA423CC1C4F5A81AA979846260DFE70A2CB406E4B79762F39E9768CE16450F625050C59A6183445BF97C07468CCF33B48EAF09070BABB2D8A1A472927BBCE13D8E595C4463400075C2B337130376BE55DC78CC51BC0728C16D5695DF278C96B33D2A50605BD88E24200F842452569C4135FCBDDD5769C3C22BAB09C3D38C07FFD9B9828706697B75266C82BD677D3A5A9B1F37B22FE89BF65C537F8C65E7A4AA6FEA0582597AC261A54BE8128894CB7B8607C638AB0B021837A32A6E97250503444EC069EED82BB8A0B8F6A28759074D333215CC1C1B83CC48BAE01BF4CA3910A26A8F3C7DFAD4A77607C307382C5C304E25496B8E78C54FA5A1317C8FEE2A8C34A6BD97ABB6D56310EB89464784CA2CBA89B9B00A0AD8C7BB383C6C648F26048EAFD93C7969070EE3C05CEC2D37595950C8BDBB2A0D6689ADE2982C8E61CD77FC7E37A43CC1A1137C1081CE9A4AD95A0606F1C677788D5049EE106F4C7A1D69BA3B1988BEA8827346425BF37A39", + "dk": "03B064DA53237A8A10A79955271976E6C3545901B0B8DBABC7D3C59A548BC392981BEBC7CC280F65C7AADB4B22610C9BDCC940BBA476661561F8E08ACB094510A46CF303BAB2C6A64D288A684AA524D570CBD18C1A17178B76BE07A3800A0A576006AC17C86EFAEA9B68E698A8118482460E3A200AF3748DEA776D9AB8A23A194F776338A4C8A92CCB5C94967023BA40722281FAB1B3D1E78C21ECB61C1ABE1DC175B77BB049CCA3554C3B351B9E710B28894A421CDA44F8A9290F94B8A24439E93A28E418259163AFC7266DB2BB59F45278CDF53C689838B6C80DADEBBC15F1714DAB48F64202215000EB8A7FFBF3B30EE7C7D940B1F47514ED12AE01E7415D2417A613B10B7637C36294BB17AC4069218E898C59C458C0F94DB870BF12E16B4F54AD0AE93BCFB91D67C2C340A2471C886A041A194BC3CDF9F800A4628D365297F28335E7265E68B5A52A286C66B7695CA5275C0A4A84E12BDC333FFCB37E4503CAA132238D4B8600EB5AA8399EF212B30A7312BBC59DE3D5B3807CCE6F790AC13CCFF1C7B00AC65E2B0C0FC35A03DA1617899A294AA2CD9ECB456166BDC7F898DB2B3A81982532B22FEDBB510B5446229970C14B5E6D4A634C147B05D2B2E88037AC115DA397A38DC44B064326FD1C32B64A5B2AE5955A4B5C352C5A3E021281DBBD9067C9269B165896B1C330710281CBED3A0D062AC4E2A55A8BF03240864125977B1CACBBBA022D2FA512FD47AD25A9906FB0883F6A1302F94FA58419832236C3639A922499FE42B47CD0A14C08D02C605DCA76B8B0A27761A4A3AC60A4469443B4F3A8F181C25320046C6769092547F4507BD495513917BF7074CD604C80A6248E05D50B0F0C60A012AA3A47C4E02221D90C6A81ABC19A477FB4556E938B36660465CD89C2759B0A4ED7A3372A132DC98271E6886BC4956AF28470927A9AFA8055F05126A0CEB9FA051ABB49C827331F3810381AA3BF814BAB527693276EC8E453FFF5201951064EA0A1AF39251E17201D82B12305A92E749D6BB73C3B4C1182312DF545AAA3A06DDD099D1EE69DB710C9C0B4097285428EC20E3EBAAC2DF9480D47C330E96DA5A0C9C751041A84C67FD07C27F38851E342D8EC0DFC404D7412AC2FF9B7B3B67BB6F8A9123B81C67791E81CCE94F2A00389BE4953651D0B37ED614FF1CA2082115514522A2AE98046112A0CB73F7F1880436B69E94646E9732CC2388FA578CC8C81B30818A6717BB515EC9C5AFA8E11967DD0B67417E59E234CC03B6490491B519E60552F53C8D86B817B851042D0A6969CCB543B28D4109D3D28B798339F4A2A8C394843383C5EDAB3C167A125DDA0B9F4FA8CFBB403D04B34BDE59159019E229CC05E854E19573D97E28C00647131834B734C4C107392864ACA52D09CD9020EDD14A876B67CACB9C7E7CB889477A64FF822DCACA714178DFF23B4B0B07E0F36938D69632A03531315190B370DE02464D71A06EA0786823926E016BDAE0438FD52C0D972C35033B02FF3B8FF554ECC2722E6C9458F717F9BF51B7AF65525CC2FC5524B07AA60737BA4CAF47CA19756FB61CB044B737BF35D2D62AC436941FD70648102040E852AAFA2334728679CE701F0EB3A17F3BB7D1A5727D4A361109E5B62381AD4876444CB00E133B8CC86915C8013159785383E5CE61ADF761F6C65CFBC0507F0A2CA8CD966F6897C8651C597B386B5CA2478571F5F3202C3FA4F00B1988FE009635046F5A67EB8E279FC4336A61C207443C245950ED47C8EC4EB35D9E9C594894FC6D47431C142C84B0A6D64902C4A78F2AA1D76FA9D0ED207664997417A35BC907896255B2C0965E49A89D9672AF8E74E12E233EDD9128E2187E5D67660C167BAC1C76A30B88BDBAA1A8B218D15AD1CB446C9A87EB3A09A533625F0619229900C1F3621235BC7563339F2D2A41E9A994961ACED4354C0E5399788B216917482C25F8087ACB280276B5603A1C50AB3321AB335221A747027141DF1B477E004819E07399ED41F98BA3493028AADD3C107A791EA63372AC6B55C282F96A65376202159F745C499214940BFC1305B7427B0741C04F2FA09FB3CCDDAD751ECE926B2050D1F3A672B99682E7907C975C8DBA6C649C088C25A0C21D238D4C6A80896690417CCBD54B4BF88B2AF5ACBA6386B254192305C82402B19B2C463B85270CA780E9CE345350AB325C548EDC9015A9B791FFB9AAAB74D532B13D7F54013D745A2E57F4D78BB63E820427A1AA1A6365C5831DC3C330712C670B59AFC9A245428488B2913C2F0BD706A8EB255949F64C9C37107ABE3B1318499B09921233839ED1A586231400BDA9313B456FCC11FFC9C6F113B37C77AB28B72181E64A5EF361158943086ABBDE29C7C4F981266A9602BE478D3F96738D90B7812A70FC434174C4719464A4E2674734C4D7BD67E4F2957F8349A69AB02C9D09E6BA6BFE25976835627C5343488C5521799564629762600563028CC0DB4AA0D67CE5C3951A11553AD842867F4824B56AAACBA236672BC83F4C633509FBDE6638D17006EB52C9D4C6E7C70BAEFFB8F10F0BBB015756A9751D77B8EF0821259897A07960B489414A38B2F0CD5B5E418965F753FF2979386628325E5BCE4A13BACDB9A3862BE7552B120C6B26521A3B2EC1B31221B73B265D8287051093E6CC963697C655B9A22CE43014F5132BCE1CA80D34302506052E61928FC2E4CB23424809F1FE30562443862243C6D38B14EB3A86B4682DEA810E1231F1E030F70E75F75050069E83E63C1C9BBF7C92F38BA423CC1C4F5A81AA979846260DFE70A2CB406E4B79762F39E9768CE16450F625050C59A6183445BF97C07468CCF33B48EAF09070BABB2D8A1A472927BBCE13D8E595C4463400075C2B337130376BE55DC78CC51BC0728C16D5695DF278C96B33D2A50605BD88E24200F842452569C4135FCBDDD5769C3C22BAB09C3D38C07FFD9B9828706697B75266C82BD677D3A5A9B1F37B22FE89BF65C537F8C65E7A4AA6FEA0582597AC261A54BE8128894CB7B8607C638AB0B021837A32A6E97250503444EC069EED82BB8A0B8F6A28759074D333215CC1C1B83CC48BAE01BF4CA3910A26A8F3C7DFAD4A77607C307382C5C304E25496B8E78C54FA5A1317C8FEE2A8C34A6BD97ABB6D56310EB89464784CA2CBA89B9B00A0AD8C7BB383C6C648F26048EAFD93C7969070EE3C05CEC2D37595950C8BDBB2A0D6689ADE2982C8E61CD77FC7E37A43CC1A1137C1081CE9A4AD95A0606F1C677788D5049EE106F4C7A1D69BA3B1988BEA8827346425BF37A39A1970E5D3DCE7B32C0B6240137754C85D5B325ED53824BD4BD1BEDB4014D7A7E02C90DC18D780F2DDDFD5A7F8E3CC0C6106DD2259CA6A4A90C0970DEFD6F9E2F" + }, + { + "tcId": 44, + "ek": "D3C02B2F757E37A5CFB9BC0719940A9688882311A6A0F28B930016862A2CD39A03EA942EBAD5CD9B85666B81C6260CC632B95A52162A46210B6C3392CEB2947151A6AE103205F088D5C38578160572993136A0C8203662AAEA086354A5EA62C443482409EBA116F29201ACA81DF18208AB69FB7368BE02CEA20C9F890321798421735571DE355ACB772D39A998A7D725C5C6A5250783625399EFA1C1D0A068FE639C5A1200F43BCF2674B6DC2A4FAFC76C31353F7DB727F6EA6BF2D530515629C1E06DBB26593FC67B52B4C5E45C497437B8795730657A1E189B352EE11E7F3A66C4A5C47AC7B5FC4783B6FC0985978ECCA8C54743AA6B0029E42BA4D8D3C5B02722FA8A785864B5947457C7C98EA36524A65A06EFD6CB7203888717421229BBD30A601BA8ABB9208FDA3A1EAC64281DDAC381A7A63CB55B49CB9A71D83AE9F197D8C88B91EC528CC6513B381CFA7187C31A93B960C3F40B8143244C8D4CCA29069DB3DC743769529EC05CB4E1205516683133274349784EA18014B53D9DF98F956720F8562F37C16729350B5FB518849805723313EC371FA851A0C174822F4C6984DB1E518B6714A520C29764E7B38DA99972307CBE898010680326C3C12E6B40AF6D27BD6D3657778A5C9616B1681572E7978070D21F2522C74125A8E2D702D6F5C831B2CDEF888F91448E2AD71983C027DEB1BA1BBC22C03923D91358894312FDBA34C20288105CB92E2C3F9BBC9F226BC1FB5976BB827BA35921188A35AE062A5C1A5BF5F82D8B1B084BFA254A9172CCCC22FA515ED71C1801127BB215509C74AFFF2C67E9908696C173DC09576C990ED79822A1B7A075F15E43346B52D2974AB810EA914DFC806E8D9437F0147D45FB6E65F9AD59FC5A68C1BF7458087714B2EE0B16A3D133E6B9B80E3934A72B1713050C26A03B15E90FEEA0640DD4A6B5B9BC86A7148554893B5045B0305523964C30525173D8762A4A99D1B39B359323B573B3FBC41333A0B249D6764AF980C5A4857CF6A80609B6BF88B5DF0A5D4AF43B61E6BBBE210B9211C0749181B73597712A86E227AF5F89A5F5651A81095F32C122E2CCB221C5905F55AFFBDBAB9685661FC683B9537B51F7589C6419D4F9BBFA8925FC62BD23D00B8935AD27F74EDD16594EFC5B8893CB7134799C389BD5A71A982B1983048789D58DCF8101CAE543AF317256F4CA525A0F978A984BA471764320BE97806B35719272B2C78A910CB336CF590346795FDB17424800872B41C536F2C2C833636D3567F3A99CAE390FFFAA8385B91A3A52CA5D6908E741BDBEBBC9BCC1060F012F66AC54C945296A5365E66271120CBEA7214B37F27CE5308680710212B8279958BDF5916D68E5CBA91C4CFA10A266569F028A781449C88D894CE0E198CC027A3FCA9663D2A17E6B8F65E6AAC09A2E8C47B28FFC20C7B97CC347A742027707577597F70E5744785EAB189CD1B8BFEC530AF3A29B210058B171EAF641B2B88376F5B54657619362A6D14C1117772D6323AB0E08874ED551A5A6893EC32D84318E71D54BB3B949BE989332A0A921F5985788A018C6BDCDF5594A203785B021102A0F77110BB604CA47F8CBA8609E3D617EDE9419539406D02A7D1C99706A35405E7988CBCF6D5BA2151A14B54FA73C590983F2A78CC42B708FF6", + "dk": "B560C546C034E8992A00582E0EEC3591122EC0F535C7F5950E03ABDF060463A583449ACA9D3241693925A85B5209A65DF25122F3F598BD3494004A8AB9265AF5BCC0669306B3C546B8E75D18361F37D54D591ABEA7E331E8B49B262135B5C975A891BFAE59B2F2416E94C72BCBA8808E9AC8DA14AA710A435CF3B10CE7387CF9B705DB1167044030FA962EBB7ED0649BEF7070ADC2C82BF6B44EF37B921C1B4329AC9CC4A28C00A018E6086BAB7B0F02712C592EE552278F0602448074D05CA96C425BC1C4A6C3559C9B41B96BF6341EF0924E188C44652D02E2B9F2954F7D83CA4C9257C0508114EC0862743BFAC399855844284726F4854EB6E34C6EC487909B5C4D882E82C076A2D9C54BB361F1AA514C6638A9F93871C79ADF8445D50B445C531AC4E293BD472097F802788A7FB5CC837E09CC86F7163504775817941E76B6E3C8900B828C10D6333572A0622BA34C3044B32CC26210928572C3FC120C8453269BD05DEF566922388E4140CE101B22CF4A71CD066E642336B64504B3EC36D591B4CF9A81AB4608032CCC2512C9BD826177C036C541C81B51293622B8AB5951D908B5CDE0C53193B6253B3D1BE23122A41B9AA55EC7E179EB195CE20C68380C97BD6C9F82CCC84097CAF739166B4070FCACA0D8D194495A2B0525A0F18A0E1B614825E8C4A0BA2DDE9C34DBC75B0C7CAF1F14C78F6367FD7AC109761009E9432DA01429ACB8EEE30C0791592894856EBB6E0369C893D175668288B7F3C4CF26785A805B4CB03D12FA3685E4A224E42324A81E3A858ECA4B8CB4563FFD038B6F478EE6B23A421C603D5A37F1B436BD45964F5B3ACD9A25F295BCDB7A0F544304C68160548AB1B42546EACA2DF56C98D88777466C32BCB09D32029B2663A281165BAC7A14EE473B9036B2ADD74E66B66DAC7B82D28606499B8420239039F951376A78603B5230BC42B6B56431D74164DBBC4A039E4D71AB0744CE4F78045E9B8ED7907140B34BB9F76FFB31353EB52D1609CF16C5BC65349FED221555421F32E906876907FB6C85CD1636FCDCB11B36B23F97976E375F8C63482E4BB811D7968BE88D489ACAE5FC6ACF03BFC39BAC783096091325074C01EBD109D9685EFA7C8ABA8678476C9258A563F5978CB5E98B02F9823104565AECADF52CA11E266B2BC72A604707ECE48646F88A7F39064EBA7409C89D9F38AC3D37394B0A7F4755660DD83847A6995C4A1C76921E3BB51D3C6255491478B33B35CA3B5788B55DF9607CCFA01C13588B3C36265A0440B70369DA3A138C03A79FC46D19143C61382075F70540BCB8D383562399A8373614B53109E5181B341A43B7BB60E7A9C9503321EB12AB03D7134E0252A8A641460B9637D88D7331AEF1477AC465654ECA3679151F30B9350FF54729AC8F1D081757F9B74F6A490050598361988F822E22C23E773BCF9596A5DF9820C5CCAAD97AB4723BA59607A708A224FFA30E0FC542DB4A7444C497E17A0F4818B2B23174825399F119771AD90D0139ACC6A747B7B22050B52E2AB367C0BB51FCF64486537DD5654605311337353E25400881F04B4A19196B22303AA1C63DF7B58683B416ACAAEF2441A39109BD6B1E68C7BCED15B7254424D3C02B2F757E37A5CFB9BC0719940A9688882311A6A0F28B930016862A2CD39A03EA942EBAD5CD9B85666B81C6260CC632B95A52162A46210B6C3392CEB2947151A6AE103205F088D5C38578160572993136A0C8203662AAEA086354A5EA62C443482409EBA116F29201ACA81DF18208AB69FB7368BE02CEA20C9F890321798421735571DE355ACB772D39A998A7D725C5C6A5250783625399EFA1C1D0A068FE639C5A1200F43BCF2674B6DC2A4FAFC76C31353F7DB727F6EA6BF2D530515629C1E06DBB26593FC67B52B4C5E45C497437B8795730657A1E189B352EE11E7F3A66C4A5C47AC7B5FC4783B6FC0985978ECCA8C54743AA6B0029E42BA4D8D3C5B02722FA8A785864B5947457C7C98EA36524A65A06EFD6CB7203888717421229BBD30A601BA8ABB9208FDA3A1EAC64281DDAC381A7A63CB55B49CB9A71D83AE9F197D8C88B91EC528CC6513B381CFA7187C31A93B960C3F40B8143244C8D4CCA29069DB3DC743769529EC05CB4E1205516683133274349784EA18014B53D9DF98F956720F8562F37C16729350B5FB518849805723313EC371FA851A0C174822F4C6984DB1E518B6714A520C29764E7B38DA99972307CBE898010680326C3C12E6B40AF6D27BD6D3657778A5C9616B1681572E7978070D21F2522C74125A8E2D702D6F5C831B2CDEF888F91448E2AD71983C027DEB1BA1BBC22C03923D91358894312FDBA34C20288105CB92E2C3F9BBC9F226BC1FB5976BB827BA35921188A35AE062A5C1A5BF5F82D8B1B084BFA254A9172CCCC22FA515ED71C1801127BB215509C74AFFF2C67E9908696C173DC09576C990ED79822A1B7A075F15E43346B52D2974AB810EA914DFC806E8D9437F0147D45FB6E65F9AD59FC5A68C1BF7458087714B2EE0B16A3D133E6B9B80E3934A72B1713050C26A03B15E90FEEA0640DD4A6B5B9BC86A7148554893B5045B0305523964C30525173D8762A4A99D1B39B359323B573B3FBC41333A0B249D6764AF980C5A4857CF6A80609B6BF88B5DF0A5D4AF43B61E6BBBE210B9211C0749181B73597712A86E227AF5F89A5F5651A81095F32C122E2CCB221C5905F55AFFBDBAB9685661FC683B9537B51F7589C6419D4F9BBFA8925FC62BD23D00B8935AD27F74EDD16594EFC5B8893CB7134799C389BD5A71A982B1983048789D58DCF8101CAE543AF317256F4CA525A0F978A984BA471764320BE97806B35719272B2C78A910CB336CF590346795FDB17424800872B41C536F2C2C833636D3567F3A99CAE390FFFAA8385B91A3A52CA5D6908E741BDBEBBC9BCC1060F012F66AC54C945296A5365E66271120CBEA7214B37F27CE5308680710212B8279958BDF5916D68E5CBA91C4CFA10A266569F028A781449C88D894CE0E198CC027A3FCA9663D2A17E6B8F65E6AAC09A2E8C47B28FFC20C7B97CC347A742027707577597F70E5744785EAB189CD1B8BFEC530AF3A29B210058B171EAF641B2B88376F5B54657619362A6D14C1117772D6323AB0E08874ED551A5A6893EC32D84318E71D54BB3B949BE989332A0A921F5985788A018C6BDCDF5594A203785B021102A0F77110BB604CA47F8CBA8609E3D617EDE9419539406D02A7D1C99706A35405E7988CBCF6D5BA2151A14B54FA73C590983F2A78CC42B708FF63A60C5BBE076CA5683B29978F68EC6559E4A5F2EF54FAE3CA87C2CC24B7FE44B9F1785BB9AA7CDEC1A3362052D80A8F2973F0048A1DFAD0CCDBD7E3633E04C4B" + }, + { + "tcId": 45, + "ek": "F1399BFB732251C654128ABB63B3BE9E3B8CDA761FB1B36795163E2C69B6BC507714F12116C64E548415143640427AA8CBBCA41A6A51DAA33F03A3930E277A238C5E0D959CE1FB3171D04095C7070122BAB610B18B599A3BACBE21958EF6F86E1272087FC67B4EE4748C490DAAF5BC59C4AF9E51CB08280B200B0DF6022148767738DA766827CB00F21FD80A56F6F121AFDA366A577F2934290E928F04E10D92936AE14A91BF830434557E87226D3B375B3E79588FA08EB1D4A7904197F2E4786498B5FD0C1668135718B61CBA2C2CFCA11B1047C3440068D27816DB2606F2F70AA17C5AFF3C32A8298876EC3670F3857CA5262398B0CFA74F149C9F25E946B9A1356F024A199144A9B595E9C46F3C820832D0CB095148FF6B4225408441861FA4702249E42ADCF727739C5A4DDCB00A215783AB46F5B8768B901C9BBB14A32B71F3CAB999104041D50EB2476A80041620A57A919938F709C3E60ABC14561A9ED0C935BC8C666A2446EBAB6D827642A064DAAB032C8A201AE0965DFAC9DC75C6CE582E85C5CEF4865F24CABE09A5B92CC99D22517058C8B984860835211F9C9A6515875EB0B7132DEB9CA0035A2586999E37751E6A64D133AF76C33507F0566F0A72B6B30DDE024214DB977D3827E4764D9EC15C48E9BDEE9C5B173042CF88AEE4B8150DFA5848EA4116334F93157318DA895238C6E6C40D1E6222406C74BE71B832E25893B5A5E1C77A410C9E27B9C027D065C51A91CE0B140DC674BCCA4804788C58A30A439308D584427E0575CD631EA9ABCF177B3D12FC347C851CB85924EB325E9E800BF20BB82C53C42788C410970B79395605F38C2ED866EAA13C6F4B50EBF01512A8745DA4197693BFDDDC09BFE77774FC0F05C225E54B9BBA98004A143D6EC911BA5C5E21958441776E9B1B11C46A17886A8BEAD7B31CA4332DFC7AFBBC64D202BFBC353DDA44C52FB56A08DA4373F6AF17A2AC8C744FC9B1787139656349A77CB638061B5D0C542C72DB3C9792938D12346129C9C37AC5FD0C43D7455E67006BEDB340E1626C6C696134396269C12A1D2C85611728AB066659D5C364057C0F8111D600C72B79074F898FD98037498330F4F02FF65CAD2F38AACC43C7898BB3EAC78BA6191A3A486C0CCC0BB21A117D09869EFA6DD2F2C6899B92ACC07F682223BC6085D3F44C22772A63735B8DF73591308EB3211776319B183B271AABCFC1931BE1A8A08097BF1CF14D28D63D80F178EBFC924450B78E067D41BB2FF922B6B2048FC6AA2A1AF97B1BD4868CCABC303A8EC3555F396CC5A814563B556101D026C6361F2143149C364CCE67991A9A487D41175AC039F4851ECB224837E33256374C5119CF05C5958BC125E991A5C0C139B671C4AFDBBE078704CBE9B035C28E76761322BB6CEE781E9BB3C93380B8D2A201AE377908BB716B2C45CAC10F46DC68FEDC8C3902172B27CE4695AD5404BA36E04538E90BBC6691230A3887757C48A641C7A66CD8C2AD0236937B7046782592D8154464776138D043D1F179E01C843FAC23E1BA2C99DA1C00CC08062105376627FF0A9289A36ED9CB968B5B1CE44793957705377014BA8B2E841BCF6385A9FD6C2E96AA2A1F538E68E983E77D547D227D8A2AC78E36127FC2064C5246E955A0D855A9B2386BEADFB71C71", + "dk": "41C78DE6D9B320FC474163B6D0E41B3E9AB4F246AE3B557B50858F5C0B73F266AFDB5424ECF0C9A2C172BFF2B428551ED9194BA6957975F9793EE4B21C921200EA1D18E73A7EF7CE749970C0D57008FC13F6383BA05A8F6CC309F163105E7C5D6FB12995220362C18A199C84C8F1A32FA440C493B14453AE6817B781317AAC817FBDC275C4BB63A92C926D544E2D5C98D0183DBC9A6D5ABC845921132540BD8421453C70A6AC397D20A05621593B314A1C49A39C4CBB3FD4AB8ABED60CDF29457D0073F150A4F14A8437703717528D5DE2856F62ACD5B37394601600D04FFF4A2CFAE3A14EC3A9C7E9B239169E1C59181D6461396AA1F2E71D681991BE6AA175F30B41F5B686BC1F500582A5B78BC505552C1B468F2028E8D748911B2AC886122C4CBE91123FC91A0C3BC450BFC85B4A9BC875ACBC6C2672D0540B2BFA3F40C5013D49764916A859823E0B49656D745C2020130274BD56D68D53817F82C6768F29245BB3CC2AD71C5BD58552CC5464D1BF4B887F274C551FC527C9E6A4D0E8756AA762BE8C9E74162AACF86AB9E838072A4153EC0B660557360C4C99F168DC320CB2DAA0FBC75437C609C34A1A2CB861121316B6A56939B842B1DB287144B0E9A62C69F0850229A44C541CBB88A2016850D4002037B34189824049E41DED9179A3064EB985315FF394CF3C972A1506139C63D9199AB558873E642D68681C17494DD3551C11E74DE3E05BB0744BD0A1C36597AFB229A32550251999C20EB9ACE3D8CDFB113B38CC705B50BAF5E5992D87004C015D41DA7B33567DE24550C9D8A88C3227E4845B0F800553119E1326BD09992A30F7975326C1D20759412B5EBA28878D7AB21A49AE431CC0FCCA4B5C51BA01E46AD1D2CCA2616DDD6C40346B4A0F68250815A295AC0A9057B225841D55B58826A454A449AD42B028AE522864CCA7938104B5C49C04CB8741D005E45B8974B08F80180D5C9B015F075603CC48D4B74E052B1507A185550C04647721BB663E1FCB31F8467BB4851B29A59A4223CE29D5282D631439816730512F06F938102B1853F45CB3F45723C2212B617FCF0182BD4B5DF4108E9EFB2E7D5555389204AF603A20C90A17B1677BB9B5654CC0E6394895C4C1E06A1FD5889C7592CC11A6A3EAC811E34B4F20BBB31989C24DFAC62887A3F73A38222BA3AA581613368C75855FD99CA6D649BB924B049CE53A9AF63705F594CC0B9A476431508080B1D22FA0148EC2A9C3C1941FB40C913E67ABE2F83724302F14C760E7E1B84DE46FDAA2C495006A5EC0124331287C5B1096B9588A227E8CB091CEB72562C1A4D448C696001D2A9C0872ACB7CDACA075F8335AE59DD8B8B4349B48305B816ED81004DA2C0FFC600A727FE290415D930CE43689529B74363BBB32FA6D006855AF78054AD02C3A56328536C6C0BA7B12AAB8B4F68E9C2472A37AB71D2445A1531AB1394CE2966B77443977974A9805572338BB2634838F7C5A2E96B9A1C41F69A26C7DF96F8AB59A1C3729E81907A1455CF8320470B210C88C30B6F92092E168F3FA093B0044DA94AE1EB431FDC8B8760012D94BA231A828A327898AE8B835EA29B400AF62686AFADA26BA0A0B2CCB885D397CFE53B8F1399BFB732251C654128ABB63B3BE9E3B8CDA761FB1B36795163E2C69B6BC507714F12116C64E548415143640427AA8CBBCA41A6A51DAA33F03A3930E277A238C5E0D959CE1FB3171D04095C7070122BAB610B18B599A3BACBE21958EF6F86E1272087FC67B4EE4748C490DAAF5BC59C4AF9E51CB08280B200B0DF6022148767738DA766827CB00F21FD80A56F6F121AFDA366A577F2934290E928F04E10D92936AE14A91BF830434557E87226D3B375B3E79588FA08EB1D4A7904197F2E4786498B5FD0C1668135718B61CBA2C2CFCA11B1047C3440068D27816DB2606F2F70AA17C5AFF3C32A8298876EC3670F3857CA5262398B0CFA74F149C9F25E946B9A1356F024A199144A9B595E9C46F3C820832D0CB095148FF6B4225408441861FA4702249E42ADCF727739C5A4DDCB00A215783AB46F5B8768B901C9BBB14A32B71F3CAB999104041D50EB2476A80041620A57A919938F709C3E60ABC14561A9ED0C935BC8C666A2446EBAB6D827642A064DAAB032C8A201AE0965DFAC9DC75C6CE582E85C5CEF4865F24CABE09A5B92CC99D22517058C8B984860835211F9C9A6515875EB0B7132DEB9CA0035A2586999E37751E6A64D133AF76C33507F0566F0A72B6B30DDE024214DB977D3827E4764D9EC15C48E9BDEE9C5B173042CF88AEE4B8150DFA5848EA4116334F93157318DA895238C6E6C40D1E6222406C74BE71B832E25893B5A5E1C77A410C9E27B9C027D065C51A91CE0B140DC674BCCA4804788C58A30A439308D584427E0575CD631EA9ABCF177B3D12FC347C851CB85924EB325E9E800BF20BB82C53C42788C410970B79395605F38C2ED866EAA13C6F4B50EBF01512A8745DA4197693BFDDDC09BFE77774FC0F05C225E54B9BBA98004A143D6EC911BA5C5E21958441776E9B1B11C46A17886A8BEAD7B31CA4332DFC7AFBBC64D202BFBC353DDA44C52FB56A08DA4373F6AF17A2AC8C744FC9B1787139656349A77CB638061B5D0C542C72DB3C9792938D12346129C9C37AC5FD0C43D7455E67006BEDB340E1626C6C696134396269C12A1D2C85611728AB066659D5C364057C0F8111D600C72B79074F898FD98037498330F4F02FF65CAD2F38AACC43C7898BB3EAC78BA6191A3A486C0CCC0BB21A117D09869EFA6DD2F2C6899B92ACC07F682223BC6085D3F44C22772A63735B8DF73591308EB3211776319B183B271AABCFC1931BE1A8A08097BF1CF14D28D63D80F178EBFC924450B78E067D41BB2FF922B6B2048FC6AA2A1AF97B1BD4868CCABC303A8EC3555F396CC5A814563B556101D026C6361F2143149C364CCE67991A9A487D41175AC039F4851ECB224837E33256374C5119CF05C5958BC125E991A5C0C139B671C4AFDBBE078704CBE9B035C28E76761322BB6CEE781E9BB3C93380B8D2A201AE377908BB716B2C45CAC10F46DC68FEDC8C3902172B27CE4695AD5404BA36E04538E90BBC6691230A3887757C48A641C7A66CD8C2AD0236937B7046782592D8154464776138D043D1F179E01C843FAC23E1BA2C99DA1C00CC08062105376627FF0A9289A36ED9CB968B5B1CE44793957705377014BA8B2E841BCF6385A9FD6C2E96AA2A1F538E68E983E77D547D227D8A2AC78E36127FC2064C5246E955A0D855A9B2386BEADFB71C71C1057E62C1D68CD00B6817C0DED21BDD710EC086DB10DA26815B3C172EB5D0AFD67326BD88283F075E55F110AB551E4203508537033CB0873D8ED211FF9124B9" + }, + { + "tcId": 46, + "ek": "C7BA7789F673CF1B93A5962AFA70373F604BE73BCBAFAB34FE044F32215802645B45E61FE89725782132DAB98D3EEB5AFCD28D47C97466070D53EA6982999D35F4549E77AAE2810CB09AA4A6E607D7C6394583A4F6A15E0517470185402E006CD9A741F6057CCA2080D775B66B925AE01BA74968BA34D2A04C5BB2A68C484DEAAB16B54C4D404923E937FFCA4CA6FBCA4B7B5D14629C0232ABC314AE4F607B0FBC9E85975FB9F5853591CFE7AC95BC064E4CD50B034060CA954103592D63A7528A4279ABFAB617BCAC6D86CFDC8C300ED4CA68F1A642363D2A5649BFA389E85611D0C74178C47B2327C4B83205EFA558922878952850B9B4A138B1435DB594C64198CB20406E8542B92C17507A626AD87B56D47C3D70C716783567E18D9CFB45ECF75628230AA43997FB888A9BFA4DDE4677EBD233EA2B7A2FDBCDFBA539EF563D17FC837F3555BDFC874A632461A7BA4B2B909AF8C16A52C60700BA65027C97172CB743252C0B5F7FF88E39E3A6A9F95EAA6438C9E094BDB2CA2FD334FC274BAA40466C80559BE7431753C0F2B610F8C1AC363B7D3AB2CBE89C344CA0AE08418F4709212B42B810056E4EDC20DF21A65D833260BB76C3D7B7200728624717514B9B68272B32D351EF882646D3353BF096881A5878C4AFF26748AAC20352C6CA2F8924659326062470CFB3850F677D07131A6CE50B58773709F8879952A702A68118B52D8A109BB97164515C83A287B9E3EB9AD6951E76302EF79B55FDD49B54883228DA73BB2B95D4646343721A9B11641D944B81472B51170906669246A5C267B7587BF9AAD78C714419619CE85E7A55CC24E1333EAA8278E8A826A3A72EB78B54F3BF2EE8C9D9F55A7DA014E39B1DAE4B037A545902A299ABB2399D26A4E1E9914366BAE316A18F9B6C06F69C93DC67B86B30B16C56EE9B4AA122778289650F9535E2F42D6CB516A0A2A6A097137AFB4C4D8A0AFB96439F805E5B8A8350284014306BFB198D07C809170B589F0925AA774356F8A41CF21390EB07DA76B364F4C9DF7A81390B6125B2449E5B6B52D8B314A37BC40A523E915C0E036B8A81BEBDD205CEF376AF355A8298254CE05FA070217FB9614805CE7FEB9D6D5B1ADBD40458198D0BD28E43A4B9415B9446C5A477E04007B7813FEA5137F95CD0A555C707543E6276D659365654933A6933BCE7782A4448586903079C77DBD0CEC58CC18993C6EB4B6F65809FBBC2B87531AB25A88B4AEA7E48261940C18C771A4BB154A303B0892F47CB4C07900B748636132E38295996216E8317369AB244A897AE02B50034EA2E39A4943157962CC5CB1365224809BFC5F42D135A79CB2907EB9B81B6F99D32738610BA4D34CA5ECFA37978868D062678634C3984E6B1D3BA64ED61BCAF449C89C4A2216769664B39E4084515D43CAF09CC8AC951BC3C13D2C7B7646A87A58C85AD3373404736220185774C37C0B8C44B2C5D2E8A7FBB213E51038857DA59F18B6F04321AF098A05849B4F9649861597514217606DAC4A580BA3062B2432010804387AC534966F0BD952486C935BFF98A869ACA9673637DCAA807C5638025A14B250CB64365756AC49E47EB37A3A764D0114493601E6EB9A6EA9365B43A31AFBCB2792084D26A06DDBC479B62899D0B1B4FD84DCE4D52A3EB63684E", + "dk": "52077F2DCC42C6D59E5057CDF9123E7B16AD53C52A759016544B6892411D0ED2B8F10BB8179993A6A94734D624760A3254185E9C398EA7E637236008B3C755FB6A49A196BBCFF4AD0F3A65CDF599C7F08ED5D40D865354E293273A31AF87E7AD6CEC1FC63B1DFA9BB519FCC7B6B4908205C4E52853BF53207BC6A54C753DB165A46397C68CD6C7DC152860663CD22B2935E08729F7C5FFC35CA26653D611274111375F0698E0644F744847B4D579BAB84A30D264BF6856DE87158704B0A978B3D2466BB0365DAD05CE3ABAAF292B7AD2731E1BDA4A07C43521CCA50839B807A725428B616600C4ACD154D6F496842B63DF5778F8D60E32427CF76250FA948D80EB11F7D62166F7B69AF13DAF30139ADCA3012A4DEE448DAB3CA01C812B8FEA944834101184AE15978675FB9822CCB2151B493914C2A3FB527E9294E9318E006918753B891F243CEB893B17406E03475AF38CBE4DC21AF1753FE475935A36C49C617B7FB97C6EF38C9FAC948A04C7B81294AC37A98824978549008711A8EF2462C6245D94367FE558300728B272582FE40548FC389D0C4B074DC4A11D32C4081019462B030DA39CB29407251A75EE7C9328EC6695B13CA6DCC5713397922CB912A4CD2EA56572B612D3297005798F3316085FB566201344A4D360909815BE553122720D3F0B6D8911CE0A0B9490B82FA63C84655B8C5AE4A8B5697F19C24F31CA3F40BC6717C21CB334AAEE6B3BAC638A27D74168929ED264360038B0E30345F96410C8D39F1F89C69060122821AF04422569938285D8A1502700EF06C6275B8657A0414D8A65F3B49B4A027B064A4AB71659C6202B88C97E0D70676CF9854DBC0409DA9533976A51C43EB9022F0F22A895F3B407F1B60B4A8494081F9EDA6F8EE58DD365914F8CB8D365A06591C7FF259B42B3682B12003EA4208ADB5549B2335FE3352119CD35FA5C8D946B404C6D50055393C8AAB2C2A489007311A44B8863191AC5A9C512B5937991339A0A2D18368C82BD698C5C8550B6FCD69B351361B4600D9AB25DEF248E9A7780C8B9031F705672900432EB79ABB2A97F66B134B7C72E266BFBE48917CC558D31CE8D02B551779E87D21C1A5018990840896BA5EE4C88555012DC142DE0329D5AB25FD1AC70CB125AC9C06480EA61CFFB000DA444AA95C9CAC6CD8D498B0B807B3A87C1D0053610A4BF7BF09710195FBA1B36730B826106A38E13B70C4C1FACEC8408753288D1A783028F12233E31638032309B699886D6960B75087C58F5CDC7493C16FA780B6A33EFB7A7F46028FAF96D79942ABEBB1339EBA5FCB0B17BAB2BDFC38422DB94B5A5B27620B4B55C997EB40D5224CDF149C45BBA0BB18062AF820F1A3C15E46855654B91A7776DC287188BE14596BC21C81B86D2301B0BC5080878025AD178FB677B15E63F6CF877E69848E040B4E68C4D20D7BBBD88CD8E238D651ACE3A94571B55580077612EB9494BA087E3E4983D580D69948471CB6781101C281735A4C9123A608841B9582CC5A07300B195D48B9326386FA94D0CD125B02625A41AB422580CC513A6CF9A9E978C48114766307887F1C8A06F8B3D01409A66A75BFA39B95714C6DAB057F5D2154CC93C4366A8C7BA7789F673CF1B93A5962AFA70373F604BE73BCBAFAB34FE044F32215802645B45E61FE89725782132DAB98D3EEB5AFCD28D47C97466070D53EA6982999D35F4549E77AAE2810CB09AA4A6E607D7C6394583A4F6A15E0517470185402E006CD9A741F6057CCA2080D775B66B925AE01BA74968BA34D2A04C5BB2A68C484DEAAB16B54C4D404923E937FFCA4CA6FBCA4B7B5D14629C0232ABC314AE4F607B0FBC9E85975FB9F5853591CFE7AC95BC064E4CD50B034060CA954103592D63A7528A4279ABFAB617BCAC6D86CFDC8C300ED4CA68F1A642363D2A5649BFA389E85611D0C74178C47B2327C4B83205EFA558922878952850B9B4A138B1435DB594C64198CB20406E8542B92C17507A626AD87B56D47C3D70C716783567E18D9CFB45ECF75628230AA43997FB888A9BFA4DDE4677EBD233EA2B7A2FDBCDFBA539EF563D17FC837F3555BDFC874A632461A7BA4B2B909AF8C16A52C60700BA65027C97172CB743252C0B5F7FF88E39E3A6A9F95EAA6438C9E094BDB2CA2FD334FC274BAA40466C80559BE7431753C0F2B610F8C1AC363B7D3AB2CBE89C344CA0AE08418F4709212B42B810056E4EDC20DF21A65D833260BB76C3D7B7200728624717514B9B68272B32D351EF882646D3353BF096881A5878C4AFF26748AAC20352C6CA2F8924659326062470CFB3850F677D07131A6CE50B58773709F8879952A702A68118B52D8A109BB97164515C83A287B9E3EB9AD6951E76302EF79B55FDD49B54883228DA73BB2B95D4646343721A9B11641D944B81472B51170906669246A5C267B7587BF9AAD78C714419619CE85E7A55CC24E1333EAA8278E8A826A3A72EB78B54F3BF2EE8C9D9F55A7DA014E39B1DAE4B037A545902A299ABB2399D26A4E1E9914366BAE316A18F9B6C06F69C93DC67B86B30B16C56EE9B4AA122778289650F9535E2F42D6CB516A0A2A6A097137AFB4C4D8A0AFB96439F805E5B8A8350284014306BFB198D07C809170B589F0925AA774356F8A41CF21390EB07DA76B364F4C9DF7A81390B6125B2449E5B6B52D8B314A37BC40A523E915C0E036B8A81BEBDD205CEF376AF355A8298254CE05FA070217FB9614805CE7FEB9D6D5B1ADBD40458198D0BD28E43A4B9415B9446C5A477E04007B7813FEA5137F95CD0A555C707543E6276D659365654933A6933BCE7782A4448586903079C77DBD0CEC58CC18993C6EB4B6F65809FBBC2B87531AB25A88B4AEA7E48261940C18C771A4BB154A303B0892F47CB4C07900B748636132E38295996216E8317369AB244A897AE02B50034EA2E39A4943157962CC5CB1365224809BFC5F42D135A79CB2907EB9B81B6F99D32738610BA4D34CA5ECFA37978868D062678634C3984E6B1D3BA64ED61BCAF449C89C4A2216769664B39E4084515D43CAF09CC8AC951BC3C13D2C7B7646A87A58C85AD3373404736220185774C37C0B8C44B2C5D2E8A7FBB213E51038857DA59F18B6F04321AF098A05849B4F9649861597514217606DAC4A580BA3062B2432010804387AC534966F0BD952486C935BFF98A869ACA9673637DCAA807C5638025A14B250CB64365756AC49E47EB37A3A764D0114493601E6EB9A6EA9365B43A31AFBCB2792084D26A06DDBC479B62899D0B1B4FD84DCE4D52A3EB63684E3BE4827CC1436055E3CCA495ADB312BE5A35BC6D6DF13F43D643D961DF40A6092E562D81253886FAABF1A485B5ABFCB27D7716BFB87AED22D6C7FECD5E3357B8" + }, + { + "tcId": 47, + "ek": "55B264E14B9669845718622ED2C17E873098467592C5A92873F872F1CC4A5B4A9916594288D91AD282621065B65DAB96DD74A627E02B1B9323F4C6C91D051B06F2454F599D56B03F6646526DE2C6F4968D5F626320532EBD5B8E4EABB020AB0120717CCE9C7926F232C9425FFD0BA446503F4B6B14C22455B9ABB7F6905BEBD149F5FA4F1AC0BB6E359C8B4737CF4261FE0948022B9FC5132390C655C1145DFF4BB51E92B9B02A06BA39388D64CF49161BE756737CE86475220DF0E4235E58468EF7C46DFB9E41296AFD233B67D0646716272FC69D3FC88A2DC92907EC4F30A27EC349B9A20C662B020C368C1AA91C243F871A1146C7AF44C788B519A787A101E1C48CA3972E975EB020BEB506145C89B0F372810A96714D541B867368B5E09748B6AF7C5B316C58BA2B61887FA481B5E84599E518D8C496A35AA6622B733BCC3D78632710AA5BAED8CC86754E0BA96721E26615D8044DD1CF7EB02CB2E670106473D5361854061311835CE2B48076385A4247114A053B458C01693585E4E437D1FA577FF8CEEC2412D8E9332888979A452A26E8265784057082098370ABEE474F174A1B169703CA5C12A2463A118734C8571987AC7FE99254D4A17891B51A38198B02693E483085B4D28F1841111C12210C9B938EB9C39FE959A4981F0E0A1DE156850C2A53D0D800D781272626494EB08E0CAC40E984017193C80EF854C2755E3F4AC0CF2167B0F65D758AB69D745A3F930839BCCB574000CCB47B8223B98F0C998EAB57017B2703614B74D16281729F52E17D0FCBCD5AF0CB12E4241B425F95796146043D8DB2994D671F7A8306C2B2C58D2A0EE2F844714654371254C6AA5370253B7372C0D1BC8CC99B7F0CF298C4504F90E9C32EABBEC68993142AAA9FE820EB276876018832F194CA8B3D02D1640C256EC3B76B4FF7057854B493952E80B6CF4BB3AC9446B160156ECB5129F101CACE214C44C3B7A7BC5F56582651649289D090F8EC86C459A8D1EC0DF4D74A19E40D4A653B529038BDA59794F573A41076EC6C4D3DD08B21F69A7E189746D5367A9A9626854DDCB66185E2524B56BC2E2058E3D5B20A6A0729823CE9465C3938410C79681A69169790CF1B71CAF7B3CCDA0B37B165BDE4D05027460851DCCEE0692EF2F04FC1A9530252C4BE83744D2409FFA2B615E197C946A65FB42FF7642E157C5DCB80CEECA4CBCC86A87F0281A099CD08F05522045C251C260EBC74C515578619ABE8617EA0D9BC8856AB84CB8980D8C42300290DAA665F88B1E3C416684274D755CF451205DDE8B47046AF01A9296A4ABBD3F79126C08AA7B6AE68E499CD222F64EAC42BE280FF3A15B69A226E7B7687A07F162C288F2C4404A5894772CCA27C85F88A57F7896DACE6B313C186946A5B991B1DC2CC97A194A474596A46D17F522B0D15A42B1C86CDB47193713215CE17381457BF12516710C5AE8662CA83024421F9AA1874777EB85053E39C6A5B3CB34C4179808EAE55C81A767EE201026F604960B9B9A8F44228387B514B783040000F59059F8C35A7EAA73AF36EA93B2DEE562F2688C19D60B6A93CCFE284754764241E39CA561A40C86A04731CBB63C88074923C72D2C6B19C909F0231D4D13C4A093407EFBE7B2E3D6AD802D0F02EFAB77922F38E3DD642225DFFA630", + "dk": "CBD5799A1142F876AA695C296EDC0E8667843A0A1B1557C66E9452A466B7A2B6503FD61BB6AC9CE034BE5F5B31FA92236E9BC42D9C30A0E7856E337BC415B5D62590E931BEE1EB270B6427881213D9679A841A2D0C982BF98805B3E77F54743429D0537735187356769C7101E08A5ECD92523527460006B5CBE89C469BCF723BBB13240646CB5173D6CBC7169F6ECB1C5A3388C004BFB550B631A34CD1E4580706BA03B3796F671FDCAC3BB553939528C2F5EC786216BC31041387C8185D3C5412E4B4AAE5C023C5A08084080B419BB53A610BAA85C37A229B0CD07F3523D265135395210CECC2AD2020AC15610A782BE240B27A1967F905B2CFAC140C988D4C200A83F1515CFA02DDCAC08AE95D42E59C803B51A6F82633D051A66BCE609487591278DDE9CFCC8403CAAC129AC383782A227735CCE32529FD310421F1BE0A175FBF7CB0FE9903C5110CD2D353ED1A8C6D74374A13CFE1A1545FF34D726917D31B01E22B0DEC032252E5C3E5C306ED2761C7B58CBE8A2B3FFB83A6114B27E23330F186F5A9B063A9CEE1F64AF6058241B137AA07C33E22839A7B6586E85ACD89AD95EB647F005350451A888C0276186EA04B8C5BFA27752761710C89B583B9A370C668500F074B61E9566071F386606B0BCC727EC4857A70958C427136F42391FC29C988045146567236F56C8D1A0458C65ED8A034BA85C2973C9C1973BCF801A09C906D78B1B8D6E80CDC2149EB5378BDC50A892381ECD4C3A5041703C14555B38CD06381066A6A23534521454348807D04DA751DE7635193B242913E56F89F9ABBBB27767B9B239309ECC1E0340986F7918484B14DD83FA782B6EE8C65CCD2A841E6184E494C5221686DC38B26A05A8D751A511C84FC95858BF9553B9B8ED2839D4683B05B16C56280C167520D523C6A80093B2F969A5DB2BDD234C6B4CB8D35663D5FB841D6E83FB03C30AFD2B801E22229C69B953484F7CC727865956230B1D71C70BB3A487468AD1D99232A0576645557262C0ED42308EA367591881B8C85173F55666D109FF068788579ADBB4199BAE3BC98261FE5035B3ECAC2D638322473394381CE1C663F179738E9543C5E94550F98999ED05B2E0176D5F10EECD80015B08C09656377345687764C49A5BC66F88E8311BAEE7CC404A38804E9076FB50D9BD0C2F125941AF428349A35F662A005A038407C5284A69E0FD391CD6846E3DB98A3F5973A511F4B3B3C4093C6B281896D630631B586D31C38788ABC0CA57E4506AC9B981D321BA0D87618B2B14515B59352146000C885B2FA959C1341ECCBBD27FC8ED5AB9ABC9A471F233931E6213BF928A5285656348B653897A7513C59C56325C47742D7B698E57C9438B1C2549AD5A7ACE96A7ABB11058CF6830E464D1541AA411C00E1B00340B5BB598A0683761F580912D3450F69313DA3A35537A74B6C27001E4B1669B4AD47D72F7B08BC23162BD381B367429947E1B3CC2641C3F54F70B233358B2F47B74465785D958A85F9818F53864DF4DA264946A82D50305CE6C754137F0D96B565772FC6737365AC6A39B73E47A22D03F919DBE5187CF482CCA4CBDA00CE1B029C98AC1377EC9E3C85A8B5478B2FC73FF8E75709606D55B264E14B9669845718622ED2C17E873098467592C5A92873F872F1CC4A5B4A9916594288D91AD282621065B65DAB96DD74A627E02B1B9323F4C6C91D051B06F2454F599D56B03F6646526DE2C6F4968D5F626320532EBD5B8E4EABB020AB0120717CCE9C7926F232C9425FFD0BA446503F4B6B14C22455B9ABB7F6905BEBD149F5FA4F1AC0BB6E359C8B4737CF4261FE0948022B9FC5132390C655C1145DFF4BB51E92B9B02A06BA39388D64CF49161BE756737CE86475220DF0E4235E58468EF7C46DFB9E41296AFD233B67D0646716272FC69D3FC88A2DC92907EC4F30A27EC349B9A20C662B020C368C1AA91C243F871A1146C7AF44C788B519A787A101E1C48CA3972E975EB020BEB506145C89B0F372810A96714D541B867368B5E09748B6AF7C5B316C58BA2B61887FA481B5E84599E518D8C496A35AA6622B733BCC3D78632710AA5BAED8CC86754E0BA96721E26615D8044DD1CF7EB02CB2E670106473D5361854061311835CE2B48076385A4247114A053B458C01693585E4E437D1FA577FF8CEEC2412D8E9332888979A452A26E8265784057082098370ABEE474F174A1B169703CA5C12A2463A118734C8571987AC7FE99254D4A17891B51A38198B02693E483085B4D28F1841111C12210C9B938EB9C39FE959A4981F0E0A1DE156850C2A53D0D800D781272626494EB08E0CAC40E984017193C80EF854C2755E3F4AC0CF2167B0F65D758AB69D745A3F930839BCCB574000CCB47B8223B98F0C998EAB57017B2703614B74D16281729F52E17D0FCBCD5AF0CB12E4241B425F95796146043D8DB2994D671F7A8306C2B2C58D2A0EE2F844714654371254C6AA5370253B7372C0D1BC8CC99B7F0CF298C4504F90E9C32EABBEC68993142AAA9FE820EB276876018832F194CA8B3D02D1640C256EC3B76B4FF7057854B493952E80B6CF4BB3AC9446B160156ECB5129F101CACE214C44C3B7A7BC5F56582651649289D090F8EC86C459A8D1EC0DF4D74A19E40D4A653B529038BDA59794F573A41076EC6C4D3DD08B21F69A7E189746D5367A9A9626854DDCB66185E2524B56BC2E2058E3D5B20A6A0729823CE9465C3938410C79681A69169790CF1B71CAF7B3CCDA0B37B165BDE4D05027460851DCCEE0692EF2F04FC1A9530252C4BE83744D2409FFA2B615E197C946A65FB42FF7642E157C5DCB80CEECA4CBCC86A87F0281A099CD08F05522045C251C260EBC74C515578619ABE8617EA0D9BC8856AB84CB8980D8C42300290DAA665F88B1E3C416684274D755CF451205DDE8B47046AF01A9296A4ABBD3F79126C08AA7B6AE68E499CD222F64EAC42BE280FF3A15B69A226E7B7687A07F162C288F2C4404A5894772CCA27C85F88A57F7896DACE6B313C186946A5B991B1DC2CC97A194A474596A46D17F522B0D15A42B1C86CDB47193713215CE17381457BF12516710C5AE8662CA83024421F9AA1874777EB85053E39C6A5B3CB34C4179808EAE55C81A767EE201026F604960B9B9A8F44228387B514B783040000F59059F8C35A7EAA73AF36EA93B2DEE562F2688C19D60B6A93CCFE284754764241E39CA561A40C86A04731CBB63C88074923C72D2C6B19C909F0231D4D13C4A093407EFBE7B2E3D6AD802D0F02EFAB77922F38E3DD642225DFFA630746986C00B969300DACF52F142078004C16CF073912B4807A18099B4C73EC9799855CF40F8865EE0AFFF8E64AEBDFAF1F3C926156E2519F9DBA0FABD2E70408D" + }, + { + "tcId": 48, + "ek": "A183967BB93CD2EBB6E5F38898B4ABD854AE964632C9890B8BD2985BC53BB45B36AD745B1DD66B083A21F7C76FEE97C1276256FB96BF9847BBEBF70965E2A3EEFB65B15CB0659A1495580994D96323732BD9438ADE651652151AFE01BE6E942A33F2CBA0E41F0B82379193A81240B7BA060CEEB9C82BEA804BC03BEB62AD1863C4844CBD5454CBF8F3740BE32FB7E4697CD536A0420E37E2BF4330A7767395F0824E4E2567D57873B509C8E0443519FC5720AAA218696CF0C2B3B3A20F6755B9051B7BFA6115B77719203BAC9634BA0D31A719B77A2C1B8EB1A08F8FD73A943CBD39279C164963590665B2617AAE52A2D2C7BCC440BFD4487688A984EDEB1E35869C940095CF21686DE047E8660DA63186D1B99F1B82CFB2B150A75C3F47378BE5A543D0593D3BC6329F5A293F8B0717683065AC41E6095C85155CB16279DDC279E6BCC4B375088C4A132F247E3EE8B22B2447B6A53BCC8CC82A00A25A108394584F3EF2389EE23E2B23029D9C20D16457BBE3A1D5B599952750AD2C5A11C77C492082254B5B19309C2488B897762178827AF645A972B55466AAA980626C095ABF48222D06B1076CE581016A11828BCD0AA25F03B0AD24E38442188BEC56683C596C70837E0FAC41A9815DE099875A824F332C4CE099752CF642C2D42477488578A31159F5427A7CBEF4619DF8F26104D1AD11A13EF3C3954BDB74E2156C31429FD7895F7F7672EC897DDDCB38D7300C88F96E93969317A23FB4929EC4EC016459857878308175BAD55668C10C8A3212BC141955B5320A97238E9135310740AF4597864B83C16F0029E4908B38C1A2E873ACA875CFA7194DA7E53E0EA7C853E18BB4F7B525493DDDF6BD565B5BFF9B6F10C9222396A02C01BB65620816CA0F58843B144150B36ABB3443349C4C52B5F0081976801A5A972D829CDC450D064CAD6FDC789E9AAFAF34C23F652C49A18FD7E025A944146D1A18BF99B441E201F40AA77BB2AD1E04A316CA4816C93EC5FC2D59596CC9241F5764066213206C7812DB336B54762B46112A4F585E6C91196FC46E0BB30138BC95C7330A8846ADA58A1116553BFD6B60951AB209931921F4512D516BE699836807CBADA57183C98455A226CB8B8C91C51F6AB59590B1B6812C598EA4A970906FA9194F7A1889E317955549BBAE35C1C0046C3B749DC157693C669DAF4414BBD4BC29E3B29A35C83B412B11654DB8541374E6502BB4556AE33309FC1D504C921E44B95E335335D045A7EB5FCD6849AE908C23E2BF4833B67900CFF433A8F004473EE88335C72CDF16508995636001CAECF8112607CD1FC062F0642C6DC1CBA4575843B26FF6350EBAD0CDC1590A13179065757A868B78FA18AC7A0A60707BB74618306D1C73CDCBCAAB0834921420A7944151C440C14936D043AC70452C60163CCD94B25406A050C66928828552DC682C80B47C73374DCABD85F3C6D413CB2FE54A7E6C136D507B68794D7C828499D1206A4B22965C24C344926B77066B37110829C160456A34EB744E1A7F064B90CFAC5859C25BA1E69EEC3136E0B96AEE347D4B179CCA80954FE8AEA24634EDAA0D70017D89D590A6908095411CC8F977DEE6C1CA5100B285C573B51266EBE72D4D6DBF8E2370B6419512166933C9E3A3E1552CDA95E6E1D6B029024D", + "dk": "7FD31BFE73ADD895B464C03049BC7D7EE4034520C241E629907475C259A8DE90765305267C02314483BE16F54D6BF85DE3C8CF61A14A94AB979AAB9DD38C51FB21CA1395A78B45AB746C21A7721BC813B3CE2541A2D150850627B1A6CD65D45F2FE59ED95289E5E7CC33401B3A6B7292100E8E24711A21A5051C0560417D5B1126443705833A3EABB5833227C93A884AA5FAB93E91BCD66C2CCBD6098831206FC1C199620ECAB67D23C64F144B575C29CDC7DC542EAC9A827C76060720470B21BE83B03D25684E27757429C26C444E6D41C074DC1567998443516A2EA97107C200D05A244DB108C4254922AC7B8426C3DFD31B83555B6EABB4DFC0C40FE200BF0A1E02C09761215E3584581AAAA09A0594C3A1A917D0352C312C0143B29DF16AD63B217C69AB46383A9B6619E5C348FF7052AC56C29E80B905A263490A45BE130B3AD38134F3C7EA783DBAEB16F1B59320836935140B93236461440B94BB24FFF44F092CC6FFB1A9436667A2F1BBD66CB32870019FB7101870023246C4BF33C421176AF94B8B16AC7D63C062D1C22990B04E15D37680087BE48B388706769C188E422B1278830010013319B718BC2610CBE531FFAB1CA7A45817A955BE6225255027553875E66B8C39C8CDC22847ABD15C71C2558234A271FC0246F3908353B95479367FC8AD7A320428144C0435B21570276348C3705C33CA87C45A700D7FE7B57621705E62BDDB17AA04DAA726C966C0C9CDEFA751621679C13B3CD228509199C436489EEA75428084CF5BF8BED368BE691A5B68430BB9D68C12D257FCE36E365178006151783B3C6FF49EF4C639B9AB2E7E8411A6434B8534289324470DD6B10AB33018BCAC79D2AF99B17808500CF06C2B33B53C65FAC58A6B2F10C56E9F38C0A7B02287EAB17F7618D06014A0441836C4A107F36905C15CDB1A835C315C209B2C426849A9826388D4687C118B40A6199291BC084C2868F351F3B133CCD747EB97368E726686B98075279D953C9DA018731A074024B662870C583C23530F89B730F3ACC62022BD54AD660254AB1316349BA11A7126E398A701C75AB8C986866247888AA48D50691383A2385856DFE838FBF417D560B1817764A054B880DCCE4BB6B09B25C92E299AA539387704798D3130BB2B79DA3483CF6161E3F26E848719DC8A389C812F59C5979399B127BA2D472B15D91C60D5823A1A061DCA961480D1A7F909A6765B229A2500D6680E32A476E85154BD09881D423CB2EB789FD46407E8B279E1CB6562498578C61F8AAC85C56236D30241EC4669805315776EFDF4448AE9717B878EC599A826D53803AA38666515A4E3BCD0811EEB191E647457975765F4AA79A6975C3F571C4D22B85EFC112EEA2B19825EF37265F1224DADD441E7FCA772F439CB68321260BED6D62BDE99A2AFD4CBD166BB6E21AF7364CEF7723D80A78C3C0354B6166E4A2BA8184437D31AB90AC227ED0111DC971FB0EABDF36066D4194596199A18E220F258B68B1137DB07301422125B31205488BECF48CC62AAA1C7C3483150812D1041B379C9EC76843FD38DBB1348BD627A3A52A0478416501419724146EE662D48D4C5066272A36C926E695A4AAA5925370AC00229A183967BB93CD2EBB6E5F38898B4ABD854AE964632C9890B8BD2985BC53BB45B36AD745B1DD66B083A21F7C76FEE97C1276256FB96BF9847BBEBF70965E2A3EEFB65B15CB0659A1495580994D96323732BD9438ADE651652151AFE01BE6E942A33F2CBA0E41F0B82379193A81240B7BA060CEEB9C82BEA804BC03BEB62AD1863C4844CBD5454CBF8F3740BE32FB7E4697CD536A0420E37E2BF4330A7767395F0824E4E2567D57873B509C8E0443519FC5720AAA218696CF0C2B3B3A20F6755B9051B7BFA6115B77719203BAC9634BA0D31A719B77A2C1B8EB1A08F8FD73A943CBD39279C164963590665B2617AAE52A2D2C7BCC440BFD4487688A984EDEB1E35869C940095CF21686DE047E8660DA63186D1B99F1B82CFB2B150A75C3F47378BE5A543D0593D3BC6329F5A293F8B0717683065AC41E6095C85155CB16279DDC279E6BCC4B375088C4A132F247E3EE8B22B2447B6A53BCC8CC82A00A25A108394584F3EF2389EE23E2B23029D9C20D16457BBE3A1D5B599952750AD2C5A11C77C492082254B5B19309C2488B897762178827AF645A972B55466AAA980626C095ABF48222D06B1076CE581016A11828BCD0AA25F03B0AD24E38442188BEC56683C596C70837E0FAC41A9815DE099875A824F332C4CE099752CF642C2D42477488578A31159F5427A7CBEF4619DF8F26104D1AD11A13EF3C3954BDB74E2156C31429FD7895F7F7672EC897DDDCB38D7300C88F96E93969317A23FB4929EC4EC016459857878308175BAD55668C10C8A3212BC141955B5320A97238E9135310740AF4597864B83C16F0029E4908B38C1A2E873ACA875CFA7194DA7E53E0EA7C853E18BB4F7B525493DDDF6BD565B5BFF9B6F10C9222396A02C01BB65620816CA0F58843B144150B36ABB3443349C4C52B5F0081976801A5A972D829CDC450D064CAD6FDC789E9AAFAF34C23F652C49A18FD7E025A944146D1A18BF99B441E201F40AA77BB2AD1E04A316CA4816C93EC5FC2D59596CC9241F5764066213206C7812DB336B54762B46112A4F585E6C91196FC46E0BB30138BC95C7330A8846ADA58A1116553BFD6B60951AB209931921F4512D516BE699836807CBADA57183C98455A226CB8B8C91C51F6AB59590B1B6812C598EA4A970906FA9194F7A1889E317955549BBAE35C1C0046C3B749DC157693C669DAF4414BBD4BC29E3B29A35C83B412B11654DB8541374E6502BB4556AE33309FC1D504C921E44B95E335335D045A7EB5FCD6849AE908C23E2BF4833B67900CFF433A8F004473EE88335C72CDF16508995636001CAECF8112607CD1FC062F0642C6DC1CBA4575843B26FF6350EBAD0CDC1590A13179065757A868B78FA18AC7A0A60707BB74618306D1C73CDCBCAAB0834921420A7944151C440C14936D043AC70452C60163CCD94B25406A050C66928828552DC682C80B47C73374DCABD85F3C6D413CB2FE54A7E6C136D507B68794D7C828499D1206A4B22965C24C344926B77066B37110829C160456A34EB744E1A7F064B90CFAC5859C25BA1E69EEC3136E0B96AEE347D4B179CCA80954FE8AEA24634EDAA0D70017D89D590A6908095411CC8F977DEE6C1CA5100B285C573B51266EBE72D4D6DBF8E2370B6419512166933C9E3A3E1552CDA95E6E1D6B029024DC46EA1D2EA904EAD95305CF8AB0A4EAE7125481014CE4388A85E50EE0FB56F3B36E60B1D30E20116BABFDC6D799EA0D20C841DE156EB89630E09275AC59BF8DD" + }, + { + "tcId": 49, + "ek": "09F906CE124AD6725D7E948FBBB599A52469D31584010A26F1C69B24AC6491E19AA25972276327053B6861376BA2A10DDD123AFACA84D2104E821859E8D098EF9A245931B6C6F4218E68CF66090EF02404CBC39EBDC8AABC37C83388AD3FC5B212A48377BB774EB2B9A0AB991DD9767380CDE47B4B492CCC1B8C1DF0B0949C157715B75AB2B50BF731C5D4E82941897D90A421BB3009DFB5773BD25E4690C85C0CBFBABB5EEB73428810A84904CE3E52273C09B1C5444C88290439C0A72FC517602259D08B08A067AB81CC9A191773A564A05D1B2D9CE4A27C48C139320B56C660894A7A1A02A581A937CFD171DF6A76C5E2CC463A383FF5AF97CA87DC55604C5198798706DC226479B1019A592C868405B35B4A526A0378E3283A7A867531487129B368B4B471574F8CF16BA251B26AF647E0B237BFA489D8189244833B4F2A5E839519579403B8B04A0FB0A527FAC5C441BF13A0340D187F4EA4A6CAAB7191496065EC17D2C25342328C68DA2B6DB45AC49C10AB789B28A6021086ABC5E8A301B1AC60B8481323B73EB150F3C71882B74E6C24980A26AC0CA67075202E2EF033FAA32BEC56290861A50ACBB2A272AE6068C0575940B8E986BA393446578131CB24D103AC372560A8D4C4C1EC8F0C801F0B7B0656264F6B9C758AFCC528E36FCB6741898317C752397E2A0823E15191A3584F0647845516EF671847970EF25493FF1C9AFCCB5BBFEA2E501A4441B27B7ED4B6521A6D48874FB2291BA1AA47A90B149303CB7E17656262C6EF2198EB3A14E8C5CF24EBA0A2C0C58FA32FEE5591E9F263E6D892989C9FD1C4721EFC558359A81D22C115C86E051142EC655BE121BEE8871DA16788B84BACEFE92DACD36029B12B9D0061729A44F0888674E67A4EA817DED530F2F95E9F85A02FCCB8AFD823B2022F5F1053187A3826887B12F59D174C3991413CA9675ED2B71F8815B1DD23AE7C13402FC7109409CF7D558E9BFC87AFB58A165C139399B82E2BA1DAA5CFC1595FBE5952B5388C8FF31A064A31C4C179954061ABB89F1BD6CD80950A2A51AAE4E15DEACC7154FA0A5E8567752054DCA5C54D42A7761C88AA302C43F1B52F9C110448CD1EF5B6F18C4D49806BDE63361225A44CB49F9046A861F49C46C24EBC29A38C77B262DC02B16BA11C75A56F6840F146B0CC817BA5F147766C5270E89DFCA1B5EFA103B5B793163795608C7DDCF1B099010FFDCAB709C783A1519E11560B146547ECA838D681662C840E3957899CF89F9F5BAD997C0918F890D59B54D8E6B3F3D82BDC14714760B8FD2B34479359F7BA215EAB9E55E73F7963807B40093DB7AB96BC5E17C22A0F361B46A04886D336CB462EC478064555B3103066E02A0C1B0954F527704275232D71520C17BED3539787E0C1A899A8470B6D10C18D2D17C2D3EA3BDB43C04FAA9A6711A732C755C3165435CC9EB36AB8D37B7387B9922460CDBEC0C38453AD84976729108715E4867085BBD09B7F6DB856CAD7200315AA8693746A54B3E460694F9890C2CA49B3D9717E87B3AB3657DD517888D94B48CBAEA9383BFEA69F6252428C332FDB8A91E35B5A41EAB3119B469501BB520134D5956EE3425E2A70157130243235903C586C2862626AD6289C67F284D697F6C61C912EE573BEE3CF62785663404BC8", + "dk": "C3D5560796AD384B9913F2AC26B6B9E429577837770BA90FF2D599017C2770A02211892387CAC49F32C8697693BBAB0C8F63289D168B99E616DD167BEACA796B32452BD53F067611EB490262A4A4CC4B0D7C38AC9A3868EFC61D8FF28D342C76A8B2050D314BFE6404844864F818C4421C65B21365E0E73289243012339435E1A544A6C1FC685332A0A36A679D0F3C6EFCD39F3E2B9F9D227773107A7EF3109FB4574CD4520A33B1FD062401C102D3C742A9E8A4D4E741CD0AC48A20B375956C5F03AB10625AF1919595C3AACD5890ADABBCF7429BC8C426C0C24CCB7B90B59891E4D6B62DBB892A95ACEF856B32B2CBDDE9B4F51512B0004A28269BA4D995125BA925A95645F90A5A88C9AC0856CFE66C0171537897B03D14B560AB5E31DC991CA7AA6029853DB78696FCB01D0905C1C9C44895ABA80BC3513524F6B0660C1B1AA64637276CBA54525C179AC68E158BCD32AD1CF94DF1C29FA5434CD5419F9E1A61C51C12F3691576888636DBB978956D40A9A6E5821ED66C48440532D1A0C1B55194343187712379FAA3525B0B92C8D482BA57710AC218E54A19652B17541A1698607934579B1FC9102AEA6268338EE7C9B7736739AA39254F37C0DA91B4310944609310CB041D4EE2702DE2C5E63A7EC6F345F241465292871AA60443820D907097178A97ABF4B533B05CE89B15CADC5244A5C8997B73F48AC05E8C56D794B7F3745E5BD6CC07D992F2D272673B4D6C987E53F72A6105322BC4CB82EA0BA6E4812595C9BFAC6FC8D8ACD0B0274FC10D5F6A9127E45A9FC2BFBA586D70337BE958C24DE92F00EC191D593BC583BE8CBCA67853ADB085676BB33CAF19C5C8F2CE309339872A894201036565CA182A1DA443CC44788DAF41938875A8702080DC5A1190D4654FBC131104316DC6398FB52FD092333C531F073206EB99809647AA0799530FD92A655765F46212701BB4592C43214776F34BC69C94149EA87EF22B1AEF6775F3C4065670A1CFC407CE19CE1B14B9ACD9C2CCF8832B15580D32A99311A873C76197FA93A831691F1A3C9B0A2A7F7B8226175C50DB4BFF469308190E91D311736A7CBB19289623BA629A744A31AEB869AAAF450FE478110BEC5AB5615F399CB72AE753085B703DAB1273F2517AB37C4E866CBD0374A52855178A1EAECC3DDA793761D72EC41623F517AE42DC15C919340012ADF3536C8CBCB7354BA9DAA94AC0D291AE1B6213801A203728AC443451889033F792E168165C7091F8ECB56BEC8C37CB8916B100089B7DE9458ED192362DEA641C9CC44C98BBFF828D51080E6D76B1655B1B9F38BC47224CFDA2259246C34F7024E2FA733E114105FB8A94597E2739AA2D0B88317CA2C5832125B5613706899160750A0135A179256327BA15285C84515830466DABF4B47D7A822AC800B63002FE96ABCE0238FA8794CE874C56680F78609179D832AAA671A9461087D5C497C80933AA39E019A86AC7762F48C840E85789679E9D994CC76C2793E69399F7848F4461EC904A4B3C65DDBA187DA5C38BEBB00E88AC237B80D3109D8DE37E5F55A7B4D9B27E69441CB706EDB42A3A7C6DAE5BB3AA378627C3767287919E48A65AD95E45BA71161BCA36E42D09F906CE124AD6725D7E948FBBB599A52469D31584010A26F1C69B24AC6491E19AA25972276327053B6861376BA2A10DDD123AFACA84D2104E821859E8D098EF9A245931B6C6F4218E68CF66090EF02404CBC39EBDC8AABC37C83388AD3FC5B212A48377BB774EB2B9A0AB991DD9767380CDE47B4B492CCC1B8C1DF0B0949C157715B75AB2B50BF731C5D4E82941897D90A421BB3009DFB5773BD25E4690C85C0CBFBABB5EEB73428810A84904CE3E52273C09B1C5444C88290439C0A72FC517602259D08B08A067AB81CC9A191773A564A05D1B2D9CE4A27C48C139320B56C660894A7A1A02A581A937CFD171DF6A76C5E2CC463A383FF5AF97CA87DC55604C5198798706DC226479B1019A592C868405B35B4A526A0378E3283A7A867531487129B368B4B471574F8CF16BA251B26AF647E0B237BFA489D8189244833B4F2A5E839519579403B8B04A0FB0A527FAC5C441BF13A0340D187F4EA4A6CAAB7191496065EC17D2C25342328C68DA2B6DB45AC49C10AB789B28A6021086ABC5E8A301B1AC60B8481323B73EB150F3C71882B74E6C24980A26AC0CA67075202E2EF033FAA32BEC56290861A50ACBB2A272AE6068C0575940B8E986BA393446578131CB24D103AC372560A8D4C4C1EC8F0C801F0B7B0656264F6B9C758AFCC528E36FCB6741898317C752397E2A0823E15191A3584F0647845516EF671847970EF25493FF1C9AFCCB5BBFEA2E501A4441B27B7ED4B6521A6D48874FB2291BA1AA47A90B149303CB7E17656262C6EF2198EB3A14E8C5CF24EBA0A2C0C58FA32FEE5591E9F263E6D892989C9FD1C4721EFC558359A81D22C115C86E051142EC655BE121BEE8871DA16788B84BACEFE92DACD36029B12B9D0061729A44F0888674E67A4EA817DED530F2F95E9F85A02FCCB8AFD823B2022F5F1053187A3826887B12F59D174C3991413CA9675ED2B71F8815B1DD23AE7C13402FC7109409CF7D558E9BFC87AFB58A165C139399B82E2BA1DAA5CFC1595FBE5952B5388C8FF31A064A31C4C179954061ABB89F1BD6CD80950A2A51AAE4E15DEACC7154FA0A5E8567752054DCA5C54D42A7761C88AA302C43F1B52F9C110448CD1EF5B6F18C4D49806BDE63361225A44CB49F9046A861F49C46C24EBC29A38C77B262DC02B16BA11C75A56F6840F146B0CC817BA5F147766C5270E89DFCA1B5EFA103B5B793163795608C7DDCF1B099010FFDCAB709C783A1519E11560B146547ECA838D681662C840E3957899CF89F9F5BAD997C0918F890D59B54D8E6B3F3D82BDC14714760B8FD2B34479359F7BA215EAB9E55E73F7963807B40093DB7AB96BC5E17C22A0F361B46A04886D336CB462EC478064555B3103066E02A0C1B0954F527704275232D71520C17BED3539787E0C1A899A8470B6D10C18D2D17C2D3EA3BDB43C04FAA9A6711A732C755C3165435CC9EB36AB8D37B7387B9922460CDBEC0C38453AD84976729108715E4867085BBD09B7F6DB856CAD7200315AA8693746A54B3E460694F9890C2CA49B3D9717E87B3AB3657DD517888D94B48CBAEA9383BFEA69F6252428C332FDB8A91E35B5A41EAB3119B469501BB520134D5956EE3425E2A70157130243235903C586C2862626AD6289C67F284D697F6C61C912EE573BEE3CF62785663404BC8BF3379D38E80D3DBA16D87F1C34B3205BFB0B0C25629BC2D3C42EF418B50E3645BE89AC23532B9C243F3C8B4CCCD104D168798AF61F579611A3A3E0F3698AC9A" + }, + { + "tcId": 50, + "ek": "1AE91AC81A536E560E717859F7906F42CA21B92113BAE6A126652246720998EB16E456BE8F4108322B38D1D39226600230991D5AD9677E1BC10EF81CA24728163778A84A5E954CC9BDD23263A1C106640F2CE795869038C98884067B45C8ACCB79F08995E254204B0F6FE25320CC4B041A040F35A639768CE9266760E7BC55455B0D9589043C2A87F10D41F020FB03CD7D97579C204CB444CD4F7A82BE43B2ABE015FBD05F2DC28D3B6A020D745EC775912E80A6167792B9565B14304F0C78AD94B4B25B4A821E3A972666355A28904BDB1AB20C59FF55C05723CD5DB88FAC08A26B1C2C198C362EB3AAA526B14CC7BF0E14440076A49686C55E418A1C48AF17D8C374A6A985C843B099027144BB1A5A3D7C188CA9F855FA4C49140ACB74B79341B865DE714C1EB42855154C1835AC0FDC25C1F25256C08806C92DD522112F923785CB0AB1B36AC5168F80B4637400A24E3B702CECA522E835F9F496CCD6460FA85F5D7163C537A6D4460F5E28CCBA9399D219CFD177CF271728D8FA43B029A321A05BC0C8AD70C0C4A5138C29619FA8143077F5A6032B309B2C0785CC6126F7262B247BE04A3B9DE8C0A2B573EB934088D7CB6847537BD8A860B47B03C28DF9242CD920B80E20522198254BC3CBBF4C28E15501E727C3983344A2684E8CA80902B11FF18370B7EA58F6600B9E30B8DB87A4676449F5AB4A42D268D2C51BDF45130F8603FD5C000991A883AB6D48960188704C89D3C08169965EF961F1B58B911193297AA20617306662B04484A9E304884C770FAB924DF817BD48F66BBE9428EEE4AC1D1B54B99B7760250DAE025DC6593EA0886353B04088AAAC2335A9C4A34B11412A88E9CE63C2C1DEE21454C28925C883E04B86857B6ED479465324AEBA604E1FDA6E5D0A232D63834EF1B3ED40B00EA91E4E714E907A534C1CB0DB0131C4A494727A363CB61220602DF215BF9B35AAAF82B07D6925A484CD6B77B653583406D9A64A12B335081A1D9579F12147687AC7555C6478F2873FE3274262288C776831899ED960BD96F94C10BC7B24002B91E80B21516CDDC13794836AA035816876C99F594636FB74FED05C91C66AAE2ABE3130B29D3112721C503F5B1CDBA756793488E005754563273B8415AEE3CABEF1AA211B931D6896E0717C8C9288620322ED305375D9792ABC62A76423CA999693357FCF76B0C688BA1BE27D84A57AEC29112DCC20D88CCC0B9895E6BC769F47110B6693DF058C67FB177CF003216B31AC3466DC6863B2337CB62A399CD0A12D51A10C7897C9151D004685E9666345ABC65B2BA2C9F079CDE58B5866AA47301EE889768C3AB8AC608D1C5998050AC8D7929A03FC0F3100478FF11256E94197B99DE14539A3DB4191C1AB9FCA54AE2139D1D7CF765089E843CD1872597444BF76A5BD9396402723C47F4934EFC3526A9A5CADC1C2061529AF4C1DA41041F3E915E6A23AB4F30A0E283A93FB71C0B072CA040921120CD23B7CABC76711A9A282029AC5569CACD957D5A88D8F59BD5EC151C9025E1D16BD01F178D6814BAC125455D34251B7A826190154F1200E5B58DBB6048E8C6CF28371AF416D3EE63952AC7B96B5303C86085BA3CB43608939B7412015DE07D0AA38EA8F68A64978B2A9BA8346A1E4E81C29F2784619342EAE2993", + "dk": "B6C9BFC69A10EF7A921E3571DDB3C7A8CC9DD34A4987539CB5DCC1D0F1758DF8A15495868FFB99829B94AB4BA34008CBCFC7BB74193C96222414212A28B67F9DBB32940BD0134A34DB905D9DF2C6D534535BBA439E6658288627D45399AF29359D104300498A616C4FC41C8D1620A97213A26852249C14C8AA8676799888A62475AF95B835417E4FB95DDCE32CF4930CC248C796014B6E736F2CCC276F5A0721F26ED9215D20599258C04895E557A1836D9FC958C4D6450870BB624C991FF2170E02AA1C891AAAC70E51579F4BF7C33BD5A3441C805B675C51E8722B36856A6014AB82B3D48864AB9653CD0594EEF8C5FF9928A489A23BF14830014F39A47CF21B0DFB6406EBD420DF204D4B55B188828A3F647408866C2F8946747AB17E954D0335A69692282D415584264C100AA8B39223F5C5525C13904E086FBEB5A684706D8839AB4FC82289127F148B7506CC06E893AD88FC303F85BD8691539AE041784AB38390606D73323C451FC76356ADF8B02D0584AE043B47C0B2C5016816599F60074312D3CF9C5B27D9EB8EE0A0AF4C664A5D5C8DF046A6C4B94A4336362C03085DE7A886149E1491C7F2F93B587476D339B32E34323F722908726303FCAB9E419647D959A53B4252CCB4DE34CC15327B5D167C70846370DB70BA544DA2A777DD2B94B49544DB44C0007D1708938E8C103E914B5F8F525846BBC0B2E180068CBD04639B17FC8AE8F905E58611A925B2B0AB6ACB9B2ABF8226F6D30D5B68475FE670DE2042B998C240861E9FD82C670B0ABD6591E2E6A89937C8A222606A3C7024331DB56BB455F15135EA641B729FA392B7D9DBA32B1467A85B9368E6720394B7656A64CABC46E1243B8C7999EA0014EA3CCD6B8A6CF7923288E32F9ED77C870BB0A1982DE3B6A96D139D6A20834B964A7D500D5D39047950185F8A01F28418AED895DBF616C56900E0A5B6EADC62303A93254B1C22E076F652BD982326DDA4CA7FE761061383D6B617B702C8004A05BE4C75F062405852541727942E5C33BFA9186CE49DE6000D183A4561560941D5AF8515AE0FBB0703D0487F6607C8703FD13C06AC241C915361FCA57944213A2A1C9640F6C38FD864100131380B473B97519B0C3EA0B5A9C2821C8854B1BD4293ED7C24AB044A9F784BD576ADD7B1C077C7041E7C81AE36531FC4293A8358F8E9947DD75085C31C0D969AF1A7598DA1829569715A128F5B37A6B2E0456703B1A1F07C4F7063D8C144C3B6CF43FA0684800AD866A6E3670123D4BB028178EA5CBB0E1182892538F68CAFA487A500C2CEF575CD31AACB2382798E162423C94A51577450E43F7E167D1A8BB9621C19C9702A8EE953ED234BB468472D324507477A3CF113F12617BACC058DE941EEA6903BD97686EB0849528258B6A5B1A7C4D44A62CC60629CC0045680A9DB627DBC4B568E46562DF15450D34F6789737FDCB129F40DCD6833AED97B9CD6C5169858C83487332B5751CA7B35E761B5D5A5FA2198E1A766ECB14DB174C3FBB31C8BA488AC508ABD5421EC08B0CA134D9C07A3CD99B443C471070517AFD263B9096500BD90FAD0488F21C7CBA52A2BD4853F5CBBE12244E391920F731F9895C54C701CF200591AE91AC81A536E560E717859F7906F42CA21B92113BAE6A126652246720998EB16E456BE8F4108322B38D1D39226600230991D5AD9677E1BC10EF81CA24728163778A84A5E954CC9BDD23263A1C106640F2CE795869038C98884067B45C8ACCB79F08995E254204B0F6FE25320CC4B041A040F35A639768CE9266760E7BC55455B0D9589043C2A87F10D41F020FB03CD7D97579C204CB444CD4F7A82BE43B2ABE015FBD05F2DC28D3B6A020D745EC775912E80A6167792B9565B14304F0C78AD94B4B25B4A821E3A972666355A28904BDB1AB20C59FF55C05723CD5DB88FAC08A26B1C2C198C362EB3AAA526B14CC7BF0E14440076A49686C55E418A1C48AF17D8C374A6A985C843B099027144BB1A5A3D7C188CA9F855FA4C49140ACB74B79341B865DE714C1EB42855154C1835AC0FDC25C1F25256C08806C92DD522112F923785CB0AB1B36AC5168F80B4637400A24E3B702CECA522E835F9F496CCD6460FA85F5D7163C537A6D4460F5E28CCBA9399D219CFD177CF271728D8FA43B029A321A05BC0C8AD70C0C4A5138C29619FA8143077F5A6032B309B2C0785CC6126F7262B247BE04A3B9DE8C0A2B573EB934088D7CB6847537BD8A860B47B03C28DF9242CD920B80E20522198254BC3CBBF4C28E15501E727C3983344A2684E8CA80902B11FF18370B7EA58F6600B9E30B8DB87A4676449F5AB4A42D268D2C51BDF45130F8603FD5C000991A883AB6D48960188704C89D3C08169965EF961F1B58B911193297AA20617306662B04484A9E304884C770FAB924DF817BD48F66BBE9428EEE4AC1D1B54B99B7760250DAE025DC6593EA0886353B04088AAAC2335A9C4A34B11412A88E9CE63C2C1DEE21454C28925C883E04B86857B6ED479465324AEBA604E1FDA6E5D0A232D63834EF1B3ED40B00EA91E4E714E907A534C1CB0DB0131C4A494727A363CB61220602DF215BF9B35AAAF82B07D6925A484CD6B77B653583406D9A64A12B335081A1D9579F12147687AC7555C6478F2873FE3274262288C776831899ED960BD96F94C10BC7B24002B91E80B21516CDDC13794836AA035816876C99F594636FB74FED05C91C66AAE2ABE3130B29D3112721C503F5B1CDBA756793488E005754563273B8415AEE3CABEF1AA211B931D6896E0717C8C9288620322ED305375D9792ABC62A76423CA999693357FCF76B0C688BA1BE27D84A57AEC29112DCC20D88CCC0B9895E6BC769F47110B6693DF058C67FB177CF003216B31AC3466DC6863B2337CB62A399CD0A12D51A10C7897C9151D004685E9666345ABC65B2BA2C9F079CDE58B5866AA47301EE889768C3AB8AC608D1C5998050AC8D7929A03FC0F3100478FF11256E94197B99DE14539A3DB4191C1AB9FCA54AE2139D1D7CF765089E843CD1872597444BF76A5BD9396402723C47F4934EFC3526A9A5CADC1C2061529AF4C1DA41041F3E915E6A23AB4F30A0E283A93FB71C0B072CA040921120CD23B7CABC76711A9A282029AC5569CACD957D5A88D8F59BD5EC151C9025E1D16BD01F178D6814BAC125455D34251B7A826190154F1200E5B58DBB6048E8C6CF28371AF416D3EE63952AC7B96B5303C86085BA3CB43608939B7412015DE07D0AA38EA8F68A64978B2A9BA8346A1E4E81C29F2784619342EAE29933F9ED70FDA269C81645670479ED998BEB9C72BE4A7D5854A70232B291B592B65CB235274585D12B1D557A0D80981F7414FB88E13CCE551451CACE183ACDEA9B6" + } + ] + }, + { + "tgId": 3, + "tests": [ + { + "tcId": 51, + "ek": "B24174A5B00DBF520CB9E3783D482E03CA3166D40D082A7BAB664845B617ADD98C07C6A3C3204F812035683A1D4F10AC1DE764706CCE96D75832A462A8B1B82CF471CBF808A26508D9FAA543F2CD980377D6F794367938064B6DD388C529756963B12CA594B306AB3F0EBBB6ED47601AEC1074A2B0D1B41717F8C695F174EF734052077E53DC9F47316B6608B7EDB54EA3631A36BB8D842CAF27367C15C18DDBA7AFE62AA572133384CB872555948A165F204C2CB4503C9D8ACE5F5217194A67EBD2A72F99562F98B2B773B6965C071BF11DEED395BC153ED6967492D88D5EF32D05E008B7958A2F36B9DB06CCDC52A626417966B19C5079A9892BA426A0362FB18E7EC07FFDC0C5DBE264DEEC41BC83A573599A25A8909B2476682336CEC9A396201A000A9C1BE792D9988FBC03C24855C1B242AE27A127CD36415CFB0D98CCBB9BD83AF5988D743773ACEA4201AC935E7CCC46E92D8E84A9D70CC626965429450980E0782EE11CD91169CE94BF89C14EC10B900EB4B77129A859039AD1253E5657B261E9855BC4B0F504C478D58F4A388215A0715168109526C2DAC555007C66E10B79EB92471ACC9A640805BD947EEA45B66A2C02D5B7C9029945B581666D470CD2654EB51C3304AC52CB11382B8628553B63742C41B293467B754DF8F52A7B9A5EF2359BF34025A9318DF92B1471EC529E895814999C551356ECC9CA945641067B16AC04B4169CC2F8A3B9A005047AC1AA4DF27FF284C7AB19A800629B5A85B06834623AC018D2E4CA1CA197D7B458C185BE0BA9B4703811F8628D13B690602544BD69AFAE215F5BDB51315CB570D48D8B55120D50560E59594C8B5603FBCC7E484EAF591070865FADD495C4D67BFC67CF1CB94ACD50C8970A226C0BC0FFA186BDC51DD235AC8D085F348374C88C6206E147233104306916E30635F0AB1B956644E02A4EE2BCC3246088D3D570A617A63150B32BD50DAA555DD6BB8B6D34C0CBA83A41C23B48B39708D7578D33C5A60AA28430CB10BA264D158ABFF301A00732BD95539190436AD02F89315CE921499C04305D81CFB7997ABA4B2D65639A34901B67972C9A2355B5A10E91F955E0A95FF33A21FA4A8B8E018EA6E43F34462DAF95A29DCC719C2B7EEAE50350497006F6AC53D28FCBF90845B02A8846C58D6494C0C603283476AF121767A9600C83A9E92B8D7B19C2680B1948044B807C9EA7EC94BE30CF3AEA676D16159FA3BC97C055ED0A439AF5C2F085BC0680A5DED6820843C3D3F65138E5ACE48C7A0C11037161674826084FD9BA3113223F18564A9B8DD98472D1837AB85B66E2C2638A4A8D9DD6C361BA6B86629FED9B6E76DC75B258908B750117E8A4763A1C0C0BBE5E2616C5D55B60720371F06D63893061FA6B3C76A600179B52F0C319F47A10189A0F566A7292C40CD9980C0112F265660C3B4F60736A9693454A7B861F834D35B838F8A647771630BCBC1F23F6AA887CB6CBD582CC2240CDBA864167506A43C434C27EAD754484D232A83BC40C2218306816030A20765A5470217E5B2C90846344CD8BC2C498B770E83CD1959DC152BCCB4ACEAB36ABF7F3618C1247F5DB201310C0A1E574FA547C398CC5A44AC23685B64D07B8F6614016C4271B71C650A8B520A5AFA08BA04EE51646B8A7FB652D3AF57A4010558F856FACC9911E09B332C5870EDB61E8E850BB1949AE5755C1FBA2CC472073029FD6542BCDA71B7952BCF811608F2A88291A04F2664BB1112E27B1235B16C19203214E79145A318C5110152DA36BB21ACA73801185D6B8B1F6A344B33B3E550FB5DC29BCD19846E84074BBC8F7580CD347B52F12A7D1616C55A2CD1F5C4AA86702DD530FA05A641302A16127468E85522E567570B65FC3F834D85A20973A0EB2B210D5812CFDFB881CC3AA06AB4CB77BBA7CDC6BCEE53C020B3343B9BD9A8298AD2055EE1A6070849140A86288721815C79734773F4097CF4741CC9635A30C8100B20733D3980B350393FAAC4CD0E66E4737C681DBBCC8D7953FA77454C422AD870E278B1121C33C8273370E5B686A6AAB17FCA3B67A3040D6491241BF5E3072FBDC1E422413FA5B4E9EE91EB3C936E21A5C7856942F44A55670A688A69E91A9A80BF4094C301DF705334DACB0CD929473829F34F37947D22B55C062F4CCF703EE3C1CC0BA7316DD658E6B6E0815F8FC9A70B1BBA325EC32E2930916", + "dk": "F7517C1258A61E1936F15B11DBBB33A7F7733CCCB2D9493CBF29945C751E2519347AA3894541CC2F1010D590447872547238C2FDEA5764BA0D098030962A0EC6BB816B077FF4EC2EF1E6B4AB45B21DC99EA433B4B8F4CB36A41D1497A06BDC43CB79AA0F739E6286AFA063B908138FE837330E48A47A097EFADC3AACBAA059B320B2B81DAD5A9C27B24A66D74B3AAB48E6E355AAF18074DA3E9BE2418CC143388153DF649572036ABCA2096C85839E034D34FCA6B9530B07E80534479A3BB6B7B09922FB4058A20B2585A74C45C14FFE076BF8D40CF5C922E14A3D34325B5909729C870B36BCC17964590E51CCDE66B1425ACFAFBC5CECD10FB168005C04C65654B7574150F18C2362F18136A09CF12029BA371E008029B4B631021A252E756E3BC40E41030A3A2A52205A917EF4B0A66A8279A8B67309A2D35460085BBE18F221BB72409F004A894BA1AE2A31141389FB963DB3F0C0DA0A179FA30926DA2D817AA6FFF02BF656716AA87F7273B747741CBAB3ACFC112D3942C193DC32A31A2A0425854206B51807C960D93D6E361A5F29A6F15A417FD01D25E264C322C8696369FF5397EDC52D6D388BBAD6206729BA14D7855DF4424AE9C48AD11A19AAA2F8FBBE50BB6AC1208385E80C740C916AB540504758F7879B0D0B5B36C0053E564E15017E563966EF0162966B0A6A330A4079C9D01A89B43893E38C4064A247B1F98627EAAB80A1603A43C01FFC5D63DCA4DAEA501379CAAFF77BBF0C238B091318548168F4033B83A2D2C6026AD2973BA43C01914B27DC248805C762D980E7B427252B222DE59698BAAD02936E1135704CF80F531C13FB9828D1199762794B69762BFA3134BCA20AD4F799CE0B5F27586654D981598172E191B4B556457B27C1CDE17B2A9A4752466439693622C68DF2608CA84B86BC553CCCAB9D9C842387B8764C946917E26409DA1C92122273AB6124784D8B1475287A3492E2A90D770BDD116BF0FC0460C56A07D86DB686983A052D7E01392C5B34F8DB41D339808D2A9AEF44C845A6B67688AB74FB1218E7AF9D172DE406BE0A32CB40710FC33098B82A21AA719124EA3D12A28E87043AFE9B56CDC58534BB38E497512CB939CC3CB4D7D3ADFB2C9F4DB11100D76A77BB2CFAD308F3171AD0478411009B11E964D1721A1225A90A285073445B9E389F72B46AACF08EC5DB33F7E038D4CB4C8FF023A5D8BBFD543BED672ED38927807B285B0C3635A1BF554729EA595595C1A1718122821C446E72BA7C5C95F3CAB365B27CE4A283C745386F260320F56815A9704F4C2718D89F60754BD65434A65063665B723033AD8E2213B1562EC9296A370B0C8D5497691718BFFA1F65E26B3709B7A632945B592FBEA90588B0BEF3877630212DFE76792B40A0B4E173161AA641119FAF78905A7C3E59E3686A0B1654E48AB9C22D18BCA456D553DAB3436EE677AB7AB9ECE7416B7A90921A8742A9269742616BF22572A2C8FABBAFCCD1441E87C9AB64593AE50A5C9564834A08851462AFA41A3DB586D49835CBB8A5CF5950B85ABE5D1A64F8C82129AC488000474E5386B3429ADE528345582A8185010DC39D0DA6873D29BEBF3954A56902AC623ED9577103164A839B89BE158CA639C1EF483902A3A1AB1513CCEB62DEF158D0078593321EFFA057B0A17C854956A73C48D55C3B1511C4B43316C95C18FB784452DC4D2C904D30206F17B4644A755344462A034C3D55F04DE42843CAD248E256C2616A98D61024B1D9547C86B37625484C3373E0B786B1220C7EC1A3E75715277C014AC81FFC7A80135B90A9D65DFBDCB03050756ADC26949B1644BBA4EFF133BECB67FBA996C4958DC49C5824B8824433AECBE468DBFB3D46289F65B6528204BE31A8A22B828EA30766CE086E380A6A94EC119C3AC9005D2B8BE47AF0FA2E7C008B06C7CA9827B7E6A247A75717954726E4D96EC82B7EBD469F9C646612C2A785EC3EF1CB5CD5A76F7D006418B19FB3C8254A381320984D03F62244C72A55AA19F60A63EE0B900BA56287235D1D480E752AC905A57D3C99B7C3210E103C50FEC53E430926CC108F0240CE4E3A5116645B5BE79F03AC0D378B00FDA6206C5C5CBC551851243E8EAC7C7B28AA13592FF38065D6F8B73A66812AA415CE44162476008288AFAF1A02B24174A5B00DBF520CB9E3783D482E03CA3166D40D082A7BAB664845B617ADD98C07C6A3C3204F812035683A1D4F10AC1DE764706CCE96D75832A462A8B1B82CF471CBF808A26508D9FAA543F2CD980377D6F794367938064B6DD388C529756963B12CA594B306AB3F0EBBB6ED47601AEC1074A2B0D1B41717F8C695F174EF734052077E53DC9F47316B6608B7EDB54EA3631A36BB8D842CAF27367C15C18DDBA7AFE62AA572133384CB872555948A165F204C2CB4503C9D8ACE5F5217194A67EBD2A72F99562F98B2B773B6965C071BF11DEED395BC153ED6967492D88D5EF32D05E008B7958A2F36B9DB06CCDC52A626417966B19C5079A9892BA426A0362FB18E7EC07FFDC0C5DBE264DEEC41BC83A573599A25A8909B2476682336CEC9A396201A000A9C1BE792D9988FBC03C24855C1B242AE27A127CD36415CFB0D98CCBB9BD83AF5988D743773ACEA4201AC935E7CCC46E92D8E84A9D70CC626965429450980E0782EE11CD91169CE94BF89C14EC10B900EB4B77129A859039AD1253E5657B261E9855BC4B0F504C478D58F4A388215A0715168109526C2DAC555007C66E10B79EB92471ACC9A640805BD947EEA45B66A2C02D5B7C9029945B581666D470CD2654EB51C3304AC52CB11382B8628553B63742C41B293467B754DF8F52A7B9A5EF2359BF34025A9318DF92B1471EC529E895814999C551356ECC9CA945641067B16AC04B4169CC2F8A3B9A005047AC1AA4DF27FF284C7AB19A800629B5A85B06834623AC018D2E4CA1CA197D7B458C185BE0BA9B4703811F8628D13B690602544BD69AFAE215F5BDB51315CB570D48D8B55120D50560E59594C8B5603FBCC7E484EAF591070865FADD495C4D67BFC67CF1CB94ACD50C8970A226C0BC0FFA186BDC51DD235AC8D085F348374C88C6206E147233104306916E30635F0AB1B956644E02A4EE2BCC3246088D3D570A617A63150B32BD50DAA555DD6BB8B6D34C0CBA83A41C23B48B39708D7578D33C5A60AA28430CB10BA264D158ABFF301A00732BD95539190436AD02F89315CE921499C04305D81CFB7997ABA4B2D65639A34901B67972C9A2355B5A10E91F955E0A95FF33A21FA4A8B8E018EA6E43F34462DAF95A29DCC719C2B7EEAE50350497006F6AC53D28FCBF90845B02A8846C58D6494C0C603283476AF121767A9600C83A9E92B8D7B19C2680B1948044B807C9EA7EC94BE30CF3AEA676D16159FA3BC97C055ED0A439AF5C2F085BC0680A5DED6820843C3D3F65138E5ACE48C7A0C11037161674826084FD9BA3113223F18564A9B8DD98472D1837AB85B66E2C2638A4A8D9DD6C361BA6B86629FED9B6E76DC75B258908B750117E8A4763A1C0C0BBE5E2616C5D55B60720371F06D63893061FA6B3C76A600179B52F0C319F47A10189A0F566A7292C40CD9980C0112F265660C3B4F60736A9693454A7B861F834D35B838F8A647771630BCBC1F23F6AA887CB6CBD582CC2240CDBA864167506A43C434C27EAD754484D232A83BC40C2218306816030A20765A5470217E5B2C90846344CD8BC2C498B770E83CD1959DC152BCCB4ACEAB36ABF7F3618C1247F5DB201310C0A1E574FA547C398CC5A44AC23685B64D07B8F6614016C4271B71C650A8B520A5AFA08BA04EE51646B8A7FB652D3AF57A4010558F856FACC9911E09B332C5870EDB61E8E850BB1949AE5755C1FBA2CC472073029FD6542BCDA71B7952BCF811608F2A88291A04F2664BB1112E27B1235B16C19203214E79145A318C5110152DA36BB21ACA73801185D6B8B1F6A344B33B3E550FB5DC29BCD19846E84074BBC8F7580CD347B52F12A7D1616C55A2CD1F5C4AA86702DD530FA05A641302A16127468E85522E567570B65FC3F834D85A20973A0EB2B210D5812CFDFB881CC3AA06AB4CB77BBA7CDC6BCEE53C020B3343B9BD9A8298AD2055EE1A6070849140A86288721815C79734773F4097CF4741CC9635A30C8100B20733D3980B350393FAAC4CD0E66E4737C681DBBCC8D7953FA77454C422AD870E278B1121C33C8273370E5B686A6AAB17FCA3B67A3040D6491241BF5E3072FBDC1E422413FA5B4E9EE91EB3C936E21A5C7856942F44A55670A688A69E91A9A80BF4094C301DF705334DACB0CD929473829F34F37947D22B55C062F4CCF703EE3C1CC0BA7316DD658E6B6E0815F8FC9A70B1BBA325EC32E293091688A8FD05CD6DA066D2BAB105299B3EE66605BD5A803760AF56A6033CB9D3B9240A064D6C06CEAB73E59CFCA9FF6402255A326AEF1E9CB678BF36929DAFE29A58" + }, + { + "tcId": 52, + "ek": "FEC8058988374DCA0726E72BB0237C5E59B7AE13C1DC34187062AF43877016F6272E370C1AAB06E12C1C18ABB01B2012F0E79849B802DFB8A4D713991D1575D301B605E048DFE96ED7759216C4BF379B8B6605603409210A809F01EA4A8C83ACE95C7EA6B6917D67810E22156C94705D1004D16492552713917830D9FB1571AC07264354A6A1B295221B7674138E011D27B4448A8822B7600DDF2B1CB2B6622BF506D19061C7A68661329AB095A525CC415006BAE29CBDF549423411B8A2113153155B3F12169952C9300A8C45A942DBDC9F27AA45711A26CDF702BCB3130E48A23EFC0BA9CA12F5F907B0274C3AA23F129A231E1549106204BEB88D74E35120568562D66140538B61520A8ABB410669B290A3B15249BDBE14A962144FE579572F109F23F04A54E87A79E74199717FBA90213CC38A6E854ECC14640376ACE0AB8D24799115B54CCBE4A3ECB51A7EE101921BA1F9C374D90188BE79016111108999AF0904CFD221496E6991780B9C50733021D5844E4207CA8227EA6C6F8B14B92538CC6192159031B53F9896A239A5F3954FCA6C3B15A84949703EC720462371985B13BC12945824DB5CAAD17C92CB97C9048C83854113B0112FC641CE1157872703B519276AC50D2BB146A85A41A529137386AA0103BD7E5856CA06950A398B07B974CBD44030559B8C9CA1BA12387726278E09C9CE5A201DF6A9B0811249A6B7914C45D6B3A8ED7436AED3CEFDAC91EE8568988C0BB61AA7A4C6B245B6478718A90EA007E4D9C1E4654AD8BC6DE7F0BB5A7695C2076EB9F56E4C338ED02229719A9D8ED53E983B6A797372D9478D1534AC10B92373CA240D5060136356D72A5296A88F78303199F28EB635BF33B9C92DF074E2B9670EDC86E46380EB98BB6EBA5FCF282425062A97A579FAE6BC86C92931F531B9B98EA806671AFAC44EDB65EF7B4DB4894AA2B64052E30346E80E9E34C567E36361129281A25524BB6FC865A2BB0076F5CB7038C2B9AE6BC7012729C2476887467DA5E60958C384452703C8550413C141CEF9882F37C893664DFA32232532C431DAB69A3767A3810E3F778185E396EFC8B02DD3158A0354F5499783A01AAD4455D9915AC1D20F8AB56037356AB7C51DF4B52E3F6B3EB713A3FEE23888FC9D9096AA9E4884F4E9BEA8F33BAB6BC6D8764C88D84B9CDC88AED4B335660823E14FC90467B995094014A2F5FB6A6DF76B8011BACCE86450CC46FC6779E763BFACE069E5327F994618EA23AFE05338F02885FB4524E2D47EDFBBC890514165F39FBB72286E8CC2D3624655F194812B790D714A2E833B82C4037EAC8698ACADC3B2A2815C15329707F205BC3B7C71D864839BF406F24B9371C9A63664C39A03202D630A5D1762C16642E874CCAEB90E6F312822085DB8B7831291563C1C4A4131543C014EA8F3092AC2877CFB72B67AC1493C4439379306F601A2ABBBAECAB12CA83931C8363EEA04043790DD429D16874C4EE0351B482C85C893C9C9363FB81A4AB8C49426B8396A1D2AB331E7A4B5C20A5224E1791AD9059F78778517537C4115D9F7609C956765DA280A03864582C9355584042ABBA986B3703248F2C183F27560E265318F3A7C6395C8CD35B515661CBD697039992627E4404862469592B71D9069A1AA8F72176A311A241AA9493CDA2F0B5373BA78345E11B396863892EB5F13DB117E1B12162A082D53789005164D082CF2227956C3B7D9F61494859A7D255E9A415F878CBACF73606F03C6E3D92C29D261E96C4A71AC1C78E93E47E2B803883E1E2B1CBD89159D95A979F72DB5BB39E41666F4E255453B3977361809A10F700039C1F3C1B503AF2E3639DE78B7E309B7310A8E5C9817CD963F1F38C1F5B5A696384F54307E9E60C45B2C14BFC9BE2172907B15068D918EA919626484A12F3C865DC2C7C7F30BF6FA8C3C80992ACA71F1C8A10FE5C586F68F99D2BA5F18C1125A11EBE4C4A8B2B93366805547CA22D1C8E5E6446A77C5BF9170A572AFE74677711CB7A7E85C0D177E2C5017E6E9C028B34B93ACACE87172A4BCC61F30C9265994AB511D8ACC97CEC1B3CD66C477EB91CDA5896A09130FA69C9662B48C16672B3725BE5762D2B1C5904A08F161C27934AC37D4761247A618EB58737AB56B55A5A335704526BC4991433DC88020C41E21A206EAC92788BBAAB1F8D016DF4AB5C27AB85ACC48A190F33FEE0F2F", + "dk": "CC4B670E6ABFBBA78B4B20B58DC5027147398C54737D15CB0538BD326C80D8491EB8AC09C9470C67D1B31F098364D2AC0E3028410BBF01783A36202C9F305829D7A9BC3122F7D9990D28C239920FFFC66969F2AC43F38E8341869551811D6B0F5EF7B62498371C4666DD63A45F181E772113D81203348351B00956A9614ADAA04BAF62423745576F833B22FB95F2F67F0F92C67AB48C2BD9753B157EE4B8C44B2A5EFB8B70832511BB50196D921D5753962A2587484A66B1B791C095615EB84179B410BF7388506A895FC7B44F29B1CB50AE206B08BE3AB7C2B6B16FC466A8F8ADABF0C1330C67438018DAF169C5F6CC3DBA31C6C0B786B1AC083484A8E785337A009F082C316C58D2B105ED79211E360B015C770E1586812C500CDC0A2B791CA8995922C90A3017661BB15718B0A79BF69A41C94A2BB1BF9551CADFD85F308738D0361B37EB515B315546E1AA9949BC93F5ACD1365A26B1467B857F92E462C4D6402200C43A5BC6706C09F1550248696425373AE5A5BBC5E3C5D9B51E6738902C19945760C0AB64B6A09984E689C43F1C5BBE795BE1A0A72AB39EC5614814A409D5A82D148BAE4EF8AD3DA19441FC149EA6A658574472DAA76AC97E537A152DA84BE2A8B3F3E66FFAEC3EE9323BC8FBC8F80214A4D692C972421E1452630B8E687931D6DAB0996B60FEF0A3B801ACBFF2CF3E68A85664B5E2E85546041AA76758EC877EF1D2B376BA77329A1C1A95C64C8C2F23558B696B833BE912AE3C81C3D6896B662C2C1A79E914B8C4D3557E40557749C834B20B49BB50E1736D9943B9F8C4CD0D7C6C7426BFCBD05E9DA326ECF094D4F4754A003F3848AB7D83BF045A7B767912F90492A9847A9DD7098CDB4DF98A2C742668BC47B0597409AA11A311794D9CD7145189351FA9385E694B4C336FF482CD00FA35F8A0C670ECBF8406CA9082429ABA053E717700DC5F09E65748072CBB612C0B4261A9568E409958AD3BA77DF60FD55649FEB6C2EF7937611C7D3C6A8FA293A55F0B8CB5F1A5262B35A437B467132142431B908C77ADB09592F9CF58E428B21652DFB18A51E373640866FDAB7677E84BF1D84B733C258A812A0D82B841C232DD2460BF8003CE0990DF60A32E90783BBA556EC7802B3162FE98A070398E6B6A1D2EBC81B0D3639A817D353A349A4C4ED9CA8E8E357A2E081D5F9A8B17A711A1522DCE09822999349C6C7C92CB3058B516423CBC6D878A770BA695A54CF3E63911D62923AA07DB098E8DB8789E1720F8A5856468943309BFAD2BCB9E23863DB21D9901751DC0B612E123E9BB00C63152E601D007212E78763D949199C9A67A1526CE244276600533CE22B539F96E759ABAA9F11AFC75C1EA0CBCAAD0AABB3ACF34A258FEF020F5E3309E513A05A859694C605938ADB501B96179349BC037038B8B6FAC4700C38BFD5A3F439370EB0B28D4F0418FD08F604697BD7710BAC01CAA7BC75F76C01432045B2375E2A5B499E1A79FE511527279C6A17DFE0AAD9CA354970A3CB67AC584C53635DB672835936EB63DCF827EA762781616822E7C18FFF03643F8C1A4453509A492B91C80CF15A4DAD95AB149714372B6DE2741C88B296859B7B4D187B64B36508940CB415B0C187AF5A924F968579194BE19B637A1A359F4382A04DB2365FC6091F288D7C41031B64C8CC5825CC92C7A38964251B638E315BF85389483A3D750992AF99457AB6320E0B50116B59B039361685825BCA01CB1983BC3A48C43C73BB7C50E43B15F82521505708A2CAA3129486A36A793138C7E4B41DF019CC8BB1C55F3B23BDA2161119941D08636EA2AABBB2EDCA880E36362B1A597C8372602D1103F930362FC76B7561FA72096ACB75533E360758515260827AFF58E214C6B5B2304BC12A3F6B69093536E82C7A510411E54C64BEC75C4B25114F0784D34BB9115B77AB6348B8D4A8921D4A1AF4137A993586AB600C809C3DD71770422B1210AB915D5316E345692F17AE11A4139ABBDA35609902BC94DF50973441BFB789659BC3CE8206F0367230E3864B8F5621A3C25D31B31F8B531B0517D408BB1B97A045AF9686A1B80B329C97BEB14780BACA9CC3BC8C51C3F604062983C7961934C29011999BE803C47CEE4C52CF7996936B903F31C3AF62120251833E0B7687A8027378CFEC8058988374DCA0726E72BB0237C5E59B7AE13C1DC34187062AF43877016F6272E370C1AAB06E12C1C18ABB01B2012F0E79849B802DFB8A4D713991D1575D301B605E048DFE96ED7759216C4BF379B8B6605603409210A809F01EA4A8C83ACE95C7EA6B6917D67810E22156C94705D1004D16492552713917830D9FB1571AC07264354A6A1B295221B7674138E011D27B4448A8822B7600DDF2B1CB2B6622BF506D19061C7A68661329AB095A525CC415006BAE29CBDF549423411B8A2113153155B3F12169952C9300A8C45A942DBDC9F27AA45711A26CDF702BCB3130E48A23EFC0BA9CA12F5F907B0274C3AA23F129A231E1549106204BEB88D74E35120568562D66140538B61520A8ABB410669B290A3B15249BDBE14A962144FE579572F109F23F04A54E87A79E74199717FBA90213CC38A6E854ECC14640376ACE0AB8D24799115B54CCBE4A3ECB51A7EE101921BA1F9C374D90188BE79016111108999AF0904CFD221496E6991780B9C50733021D5844E4207CA8227EA6C6F8B14B92538CC6192159031B53F9896A239A5F3954FCA6C3B15A84949703EC720462371985B13BC12945824DB5CAAD17C92CB97C9048C83854113B0112FC641CE1157872703B519276AC50D2BB146A85A41A529137386AA0103BD7E5856CA06950A398B07B974CBD44030559B8C9CA1BA12387726278E09C9CE5A201DF6A9B0811249A6B7914C45D6B3A8ED7436AED3CEFDAC91EE8568988C0BB61AA7A4C6B245B6478718A90EA007E4D9C1E4654AD8BC6DE7F0BB5A7695C2076EB9F56E4C338ED02229719A9D8ED53E983B6A797372D9478D1534AC10B92373CA240D5060136356D72A5296A88F78303199F28EB635BF33B9C92DF074E2B9670EDC86E46380EB98BB6EBA5FCF282425062A97A579FAE6BC86C92931F531B9B98EA806671AFAC44EDB65EF7B4DB4894AA2B64052E30346E80E9E34C567E36361129281A25524BB6FC865A2BB0076F5CB7038C2B9AE6BC7012729C2476887467DA5E60958C384452703C8550413C141CEF9882F37C893664DFA32232532C431DAB69A3767A3810E3F778185E396EFC8B02DD3158A0354F5499783A01AAD4455D9915AC1D20F8AB56037356AB7C51DF4B52E3F6B3EB713A3FEE23888FC9D9096AA9E4884F4E9BEA8F33BAB6BC6D8764C88D84B9CDC88AED4B335660823E14FC90467B995094014A2F5FB6A6DF76B8011BACCE86450CC46FC6779E763BFACE069E5327F994618EA23AFE05338F02885FB4524E2D47EDFBBC890514165F39FBB72286E8CC2D3624655F194812B790D714A2E833B82C4037EAC8698ACADC3B2A2815C15329707F205BC3B7C71D864839BF406F24B9371C9A63664C39A03202D630A5D1762C16642E874CCAEB90E6F312822085DB8B7831291563C1C4A4131543C014EA8F3092AC2877CFB72B67AC1493C4439379306F601A2ABBBAECAB12CA83931C8363EEA04043790DD429D16874C4EE0351B482C85C893C9C9363FB81A4AB8C49426B8396A1D2AB331E7A4B5C20A5224E1791AD9059F78778517537C4115D9F7609C956765DA280A03864582C9355584042ABBA986B3703248F2C183F27560E265318F3A7C6395C8CD35B515661CBD697039992627E4404862469592B71D9069A1AA8F72176A311A241AA9493CDA2F0B5373BA78345E11B396863892EB5F13DB117E1B12162A082D53789005164D082CF2227956C3B7D9F61494859A7D255E9A415F878CBACF73606F03C6E3D92C29D261E96C4A71AC1C78E93E47E2B803883E1E2B1CBD89159D95A979F72DB5BB39E41666F4E255453B3977361809A10F700039C1F3C1B503AF2E3639DE78B7E309B7310A8E5C9817CD963F1F38C1F5B5A696384F54307E9E60C45B2C14BFC9BE2172907B15068D918EA919626484A12F3C865DC2C7C7F30BF6FA8C3C80992ACA71F1C8A10FE5C586F68F99D2BA5F18C1125A11EBE4C4A8B2B93366805547CA22D1C8E5E6446A77C5BF9170A572AFE74677711CB7A7E85C0D177E2C5017E6E9C028B34B93ACACE87172A4BCC61F30C9265994AB511D8ACC97CEC1B3CD66C477EB91CDA5896A09130FA69C9662B48C16672B3725BE5762D2B1C5904A08F161C27934AC37D4761247A618EB58737AB56B55A5A335704526BC4991433DC88020C41E21A206EAC92788BBAAB1F8D016DF4AB5C27AB85ACC48A190F33FEE0F2F09D07691027DA18E9497800533B1C0E26B57DB34AB40EEB9DBB282827564EABE7A98EA318AD1E2705F20B0740794C3E711121A00600D00BCCCC78CCE024A9BC1" + }, + { + "tcId": 53, + "ek": "A14B70C6FC3A4B77556A222EC5050D387C2852AA3BD06058A38877A581CD4BB425A7190C11D28F1FE63630165AA1743380F77B194905F2023EC86444C51971337A113022122472394028C7E6B51D0DB4762445513ACC7579E2AD69EA634C21162F5B2F3EE29460E70753B397176853CF9A12922B55DACC0CD8067667B76D60042E915B2E9B0C0AA76A87F7CB477A56144A77647BE293F27191BA78BF201B3EB5502318ECC78B29C07BB3012B530395DA719DA70DBF28B18070B0E5FBB0B1DB6E0592C0176397E67C23DBCB9CB78731F3871A4346B5F8737ABE820E18FAB17CD781EB96899F10602C63BF654C0CEE287697D6B4D8AC1116D2831EA194966500B9A4730874A0A9C26956D0848970666FE315820BB5B07741C6B4542CB1B0ED412653C11DB57474F7B70A79A1749BC72E29EBC6FCF09811A260C931AD9782B2BCFA967FF58946F961D5B29151BA148744C128752605FCAEAD65C878F004388B13EDC7542AC094B2FAC8DA68233F5653D7405F403545878738AD6A90B41028A4E6C23D37A046EC53DFB49D94FC9751C23245F9C5D076B6697C3131125ED8C68BDCFA65DEFCB67037C342C7C41C9CB318BC0C23A28E4DC819163B4746D416A719017979ADA696631AA09E4795514F70B52EA65B569B2D0CF02E3CF7452166864B440726D23411607E3991332AA91287D62AA8743FDC28AC13AA34BC6ABB4331CF4600971FF093428817B030364E504F61023BA29B4CC545547F517EAC19C8EFA57087887913A5923C1A597741BFBC119383E90324728147A1251645847AD647609427F9862D2C870DBF655C138C5047C2AF1AA37986608A483717EBDAAE7DBBAE928A15B920C8EF5453CE1821369985F3AB77539A922214367E3A6764C72BD4B555F9155BB29C3F2F6AB77DA92211F45D77EBB58C421D7AE6AD634BA82B6534E5B1C561AC2C540C0259CC8A28492CB8453DC761C3CB2864DB546FEA749E2FEC06DEC0694FFB6590CC5C95A9C5A326C4C70330A07B5E07726D1F5ACCA90A2948194E047997856402BBD357D5D0ABA97CB910E393AA90068ED2A81E02A99D5849F5275C7D6C061BEB364E0B8FDCB2235472AAB8F88CCE557D1EDAAB38830857B60F18F328A4A2A75B281D7D377B0807B6D7A4997696419F166F13CB6D30D5403ADC0C40E0C635588E1608CF747573FFF2020FA612A625B890A840A993067A2A7B658C2AE04223A31244B9574CA983A8350578D3F0A2B1F86F78E714F25B9ED2690039840BEEDB03EB70474E627A589199E7F7B1B4794DCFF308688993087AC149DC2FE7C246C0A0733EE2B39A68A624F79E8BC8CD588917F6266E77E71DBADA77D4698EEBD4AE225BC53B7494C71581131040BEC4218BF6CAED437E7E815D71C95420D82A92305040CC9F24160F14C1859B55855E6178881202AD96CFA9D0893B4CA762C3475792AD49D792FA265DBAB62E95B532C8C35104B170B7A29BC6F6443F060C06B231C0A10FBEDAA5DD63B79DA8AA1563CF450C83AD0BA370CB5D787A0B84D64A456A9F14A06D7FB0893E2892C3E6BD011A6321E62F43184BC040B124E808C6684DBA6434B1745BAD85B5F80C26908800EE43C87787C16BD868C5532064138B0BDB367DB15D1B783859D8932BC4649D7019AC405F4C15ADBBF7227241618B6089A7410CD35A19BAD6C24E3B2B29F134A7F527CB88992A78A08A034B90146B4221BC50E634809B57FD67CB920704CEF590C336BC6194361413CC2D970B07F84247612A8796A5DD5C0BDB445596E7889CF28F954B1190599101B32DF8CA773869AC79D6C9B3082C9D51722BB5B328F674E61B0782FCAF08FC5223BC974A4A545217A1D24B3D10226084F0B978E39F53357988656EED1300AE7A31F8D26150AAC34D46A51D08B80AC4ACF4EA8002A5932B7B9F90E99EAF53CBE1EA8D8B1C6342C3A6CF915296A27869A425B6B20C2C534221799F267A628FF98C389514845C87C19C8A343A25835619EDA20EF8C46C6BF08FF052BA6179AC54824E65190A1662827C1C4CD7B253CFC884408796C607B44AA61D15E989EB479169E980DC920D89FA4F63329D62A4150B1BCC89A88688EACF91568F71A0CAC33138340B2BB31B4BBBEA750313B00F0634B1D97F1686826B12581D415E8A534C41962C15C272045995CBFF625F9D08C8E6848123A612A9C865BC2BC9EB0623E331C99B359E8C084310", + "dk": "EF7412A2D3B13CD3828AAB65A57A308FE675FD3420F9F3AACE358487ABB55AE8AA6D7BB7D326055F387A2C6546FC172285EBB672AB67CCA32EBD005971660EFB4330ACD5672610B6B010C57E242D8FB8ADA752A8D644A34630A655C11F439A9E66426DDB617602F84A46190F031AA4A1A168D943645D0A77C66921A5455B5AE91F2DA47FA99750771331A727AF74CB916E8984CE9440DC74671B3A609F828F8D983BC5F06512883221B5AA7F8812EB5A774B272689493DAFE89C5C78AF0407CF351453C8D1C4B3E076AE462882A4828047C5E55582DA512BC20B0E0D261ABB8080658B9A6BA294251C7CC266527B2B4BF1652566EC5A320812EC77870BFC6F7954C3BCC979FEF761E8ECC59E306D1EBC955EE93759609A43B23BAD38CC79C0968FDB1BC95575D3E2113CF940FE2C211B75373570CC826C8FB77BBDED7545F7F16ACD0703E15A513A9986286ACFCCC02897DA4B399852D3E915C7634CEE146B1CD0645F9ACC0AAB55941B69E00878CF93C2CDD96FD4C6C816A73ED236A298217761800B896829BEC212366258B6C12520E11CA9578655EC36F0281F6A456116801806AA06F0EC124811345C6967F7D21E8A950CE8D7047A28A5B892BF07416C4222824C821464063A4BEC5040C7ADE1A5520C493EE14145E73C8AEEF53BE1DA6DA8D1B73B1A1FE7689DE7521965944A61352C17C2A4FB506B2012559DBC5D87F74189C962C433782BFB1FCB02B3E7F85DF9898DBCF5AF804CCDE76CAA19E28949B910F91B3AD608A9FC707D481B3CA0C05DB38C9DCD6C8DC279CAC38A76D20461985C2F2C73B833122F52FC8B793A4CA2D8C3FF021B8ACC1379818300F08977154866DC5C85B5C03B17056432373461288F647BBD88C98CEB5C0AFB745D7A45A7397BABA1321710133F2CAD797B01A265166651537EEC5A1F349690E77CC1312D0F8456E2ACB1204281BD058DD2BA83FF7848535B60AC8B64E1D3AF46B62B4181368DF198B68A2CAA7A953C014AB7A40A9E789B17A62DB6AB39EB2BBF26433694A576041453DB63B92739CC318A9312644484E834DC0C6A59637A4D0CBFAF4A16FB73C5BBEBC787A02856D487807925C4054FE74787F02147D349AB5A0C1BD2B0950B7B92B8D1AACF371C19D98DC215CD429374DF85151764B24820BD974B9219592AD9262550AA65B27C60BFE63359FC195036387344940B9112903661C77C1C069972E8A503B53770DA419475746E6C8A3413B854F6474F02BB0A024A2B0106AA36041AAC94290FDB398567636437839C39012603355DACAC286B00B0248B4B9ABFB6C11ADDEC734613A87B65846BE1AD9B5649EE4B3770D42BF84241C8742FCBFA7A8F686913C4907459A57F81ADBE121097D5911070415D6B078A4A49218AA2FCB617880A061DE9B6B94B1F5C80A401A91C409439EF6891153A0AE6877F375A436327AD5095BD57BCACC9294389A31F959250EFDCBDA72C5DD5A8488AF73F08838B54A14E9DC22B9CD6725E803810B3B771872F00A4CFD9B1BF62D235B3E2B210B8A08E51C4EAB56C33D22951E1C08BA30C133B0774CC3CC5348521D492CA779EE98B1275A17CD7692FC843C17EFB29357185AD0C54C193140D58353AD73B74A8256D566173472854A2066B886C59D350F1605589B1914EF97FB34C2539C7995C5C759C5CBF589B263F839041A88C37933C251B15469B4DF5797E7B7B603078C063C996DABBCBA4CB24B29596FEC030E46BCF17B44E78F68FFF16B77709838B5C56D079CABE851DAA94B28D304DC251847F474ECFE72A2A66CBAE063BFB198D847C20B296008A822317B56665B2A15476CD98FC25834A4E1D424B717562C0D12B776148BD6B7D9BB36C676C2F88A6AE0CF1AE027ABC672729A6D45372D579F98C23EE698ACA08535189C21A9B855EE7B8423371E87B1099566480F15D5AB95BB8E9740C43AEBBBA99F4DCAC05A7B1FA901A9250147BA446D0B9718FA72ADB73640522586719C16E503E1B85CC315972F378CB9DBCAF8E8942FCAA1402A8AF888ABD7C253B74E829DA036B66DC33DE55B82AB606B8E6225C0C7D396C919FFC3357C781A746B590E0C66F7952A80879B34B88AC6663E6979DC3573BCF651F42840ECCE036DF843734704B7FD59A2ABC0C2EE63138206660980429824630729BA14B70C6FC3A4B77556A222EC5050D387C2852AA3BD06058A38877A581CD4BB425A7190C11D28F1FE63630165AA1743380F77B194905F2023EC86444C51971337A113022122472394028C7E6B51D0DB4762445513ACC7579E2AD69EA634C21162F5B2F3EE29460E70753B397176853CF9A12922B55DACC0CD8067667B76D60042E915B2E9B0C0AA76A87F7CB477A56144A77647BE293F27191BA78BF201B3EB5502318ECC78B29C07BB3012B530395DA719DA70DBF28B18070B0E5FBB0B1DB6E0592C0176397E67C23DBCB9CB78731F3871A4346B5F8737ABE820E18FAB17CD781EB96899F10602C63BF654C0CEE287697D6B4D8AC1116D2831EA194966500B9A4730874A0A9C26956D0848970666FE315820BB5B07741C6B4542CB1B0ED412653C11DB57474F7B70A79A1749BC72E29EBC6FCF09811A260C931AD9782B2BCFA967FF58946F961D5B29151BA148744C128752605FCAEAD65C878F004388B13EDC7542AC094B2FAC8DA68233F5653D7405F403545878738AD6A90B41028A4E6C23D37A046EC53DFB49D94FC9751C23245F9C5D076B6697C3131125ED8C68BDCFA65DEFCB67037C342C7C41C9CB318BC0C23A28E4DC819163B4746D416A719017979ADA696631AA09E4795514F70B52EA65B569B2D0CF02E3CF7452166864B440726D23411607E3991332AA91287D62AA8743FDC28AC13AA34BC6ABB4331CF4600971FF093428817B030364E504F61023BA29B4CC545547F517EAC19C8EFA57087887913A5923C1A597741BFBC119383E90324728147A1251645847AD647609427F9862D2C870DBF655C138C5047C2AF1AA37986608A483717EBDAAE7DBBAE928A15B920C8EF5453CE1821369985F3AB77539A922214367E3A6764C72BD4B555F9155BB29C3F2F6AB77DA92211F45D77EBB58C421D7AE6AD634BA82B6534E5B1C561AC2C540C0259CC8A28492CB8453DC761C3CB2864DB546FEA749E2FEC06DEC0694FFB6590CC5C95A9C5A326C4C70330A07B5E07726D1F5ACCA90A2948194E047997856402BBD357D5D0ABA97CB910E393AA90068ED2A81E02A99D5849F5275C7D6C061BEB364E0B8FDCB2235472AAB8F88CCE557D1EDAAB38830857B60F18F328A4A2A75B281D7D377B0807B6D7A4997696419F166F13CB6D30D5403ADC0C40E0C635588E1608CF747573FFF2020FA612A625B890A840A993067A2A7B658C2AE04223A31244B9574CA983A8350578D3F0A2B1F86F78E714F25B9ED2690039840BEEDB03EB70474E627A589199E7F7B1B4794DCFF308688993087AC149DC2FE7C246C0A0733EE2B39A68A624F79E8BC8CD588917F6266E77E71DBADA77D4698EEBD4AE225BC53B7494C71581131040BEC4218BF6CAED437E7E815D71C95420D82A92305040CC9F24160F14C1859B55855E6178881202AD96CFA9D0893B4CA762C3475792AD49D792FA265DBAB62E95B532C8C35104B170B7A29BC6F6443F060C06B231C0A10FBEDAA5DD63B79DA8AA1563CF450C83AD0BA370CB5D787A0B84D64A456A9F14A06D7FB0893E2892C3E6BD011A6321E62F43184BC040B124E808C6684DBA6434B1745BAD85B5F80C26908800EE43C87787C16BD868C5532064138B0BDB367DB15D1B783859D8932BC4649D7019AC405F4C15ADBBF7227241618B6089A7410CD35A19BAD6C24E3B2B29F134A7F527CB88992A78A08A034B90146B4221BC50E634809B57FD67CB920704CEF590C336BC6194361413CC2D970B07F84247612A8796A5DD5C0BDB445596E7889CF28F954B1190599101B32DF8CA773869AC79D6C9B3082C9D51722BB5B328F674E61B0782FCAF08FC5223BC974A4A545217A1D24B3D10226084F0B978E39F53357988656EED1300AE7A31F8D26150AAC34D46A51D08B80AC4ACF4EA8002A5932B7B9F90E99EAF53CBE1EA8D8B1C6342C3A6CF915296A27869A425B6B20C2C534221799F267A628FF98C389514845C87C19C8A343A25835619EDA20EF8C46C6BF08FF052BA6179AC54824E65190A1662827C1C4CD7B253CFC884408796C607B44AA61D15E989EB479169E980DC920D89FA4F63329D62A4150B1BCC89A88688EACF91568F71A0CAC33138340B2BB31B4BBBEA750313B00F0634B1D97F1686826B12581D415E8A534C41962C15C272045995CBFF625F9D08C8E6848123A612A9C865BC2BC9EB0623E331C99B359E8C084310AA4160315EA4DFA5FD51510A38B58E651C146580B75CBD45DBF7DA19DA6E48FA2D7AAF4EA98867A68BC98DE1676863B12FCCC1E5D07D16CF72CF4D4A7764EBB8" + }, + { + "tcId": 54, + "ek": "50DA839184770772B1283C8F59E32E13D78DDB3733183580D2659F5E38C42C9C5EDBE490D29C1362304CBF902AEC39B305D0C98683504960918D5784A845B0C731550EF0CBF5355A052A0089D685F237885F0539AF59BAD6687BD0F11335F86BA9A02662FC0A80E54A34B19CBC9AAF57FC796D1CB55D6CB796C831B3B9AF56697F011126094594B40A9C8A971EA348A2E4C358C260095075C6E73672A4AABAAA365FE0468AB4C9B9B4C68FD724299F2BBA3BB6530C401A7AB73C386367D8A504ADD98BCE629EF5D40F484707F7502E6C969DED8061A8B430DCE9BB59919AC425C031A34B70D5A77CFC37AF0BCC0F5A652C4A4DC3534A9514B79859725F9474B12612AC0C8AFA7C601B7480D16C9A40CB6298B818E5028645D542161950BDE36BC401435A186634D59AA10B9F404BC60033139FD43CCB001EE1E4CB5911510783983409B1F317433C2CA4B1F72DAFA8135D734A2DC9137E7CCDADBA0AC790516D905D9ACA3B1904BFD96C6294EA671F9153FCC29E0BF5B5ECE91BB8CC8788AB145C85186BF856D41AC33C356A18706603C9B9B3FB6DC2A089A82280BEA70742A2C142CB3FA7214345B738B5E22C5C8B93FB13BAB27420CA6B80989BB0F3AC6F3CF09A1EC8BB421030481AAB10200043624D8C58CC194835312B087285B61D8CCE5BB322BB8965CA5A69BE8CABF42C0E4FF50CB222BD09E1144B281F3BFB47F45C7BE53512FF555EF2B421A2EA5C2E7C18AE9B4776528AD7BB7E0699ABEC8AACB2FA532F6C42071B104CF9CD8D18B66F767AFB712445C636B0D8336DC9B692A835A2483E5FF60CAB253672F2A2E4CAB2044CBE74AB09F91851875A1DA7E8018F86A68FB8B6F580CC1BBCA4D2C9B362F06A2755723DE7230D593F221CA69D333D17B54A88C8C8CFD881BB664A29AC3EBCF8B7BEABCB246947898385B2F2353979C8FBF851DAD7B9B03898DB68324A3CABB9913458274980343990243CA145893F45A6F664080727ADD54844F4CA0FC404911FC2C5300BAFAD04CB4296BD83526155D2346666A591CC4AE871A38245BD769B5F7F96A4300B60F25A0EDD46A6B8C044A0FB8705BAAB033B080D45913EFA0DFFC2C6C9D87288567B3DA6B7C4F046D0048C84A5B05EB15493025A209597CDB22E117A4009842B8AFA8A0018CE7E02B90E872F65D2C73CD950EE2430983C52A0FC32CF0141D9D612284AA6E85C9414EC126F2726978C9CE05ACF2D982EE43CB8F05A0B0EE30AE898768B9C1CD01990B2B029886A48D5100221375D6385A4F115CC7EBA3C8902C230E15C0808390FD5B18A345C09B77178CA715389642A0659C5548AB27B460F293D6A4970FC22CA027C5E0B93346E3088A5C5C2EB394EE72676B53097BDD55E20E17255690F5BA57268B2C06EB04FFC1A6900EC58B9EC8AB351B0C7340370933D35137887572876B901C2BACB08470EAD58221C9B026A0310B00C93BF086CC1166A0D8AB311475D325ABF71698A28B132847A2EC5CBC25C75B47DAB4F2ABCBC998263372A2883089A42919A1FB7B49CE3A579E887231540FFD27CFA989E0B03AE8955343F30C65164A0061C7415173321F1202FF130560A37275895ECB63FFC3456E67A7A493B944C97BEF3857D8E83145CB7C2B97386777124FFE53C6362CF1A2836A4CB08BF780629B7B156B19A756629BEE50C10A86357A6BED33A72FBB7B66CCA36503CA1D1AC64F38986DF6C3435771CD3F8BBA1941A26046373E31D609464B17852C0957525B8B1C282B76FC43C5A8B5C4B32BEE1B1B421804C2311C4E8303A926C29E081B8D6936002445EEC5964CAC8B37768B2CCD736E4E2303C779FFD91CF7F2C6CB17B966D7C3C842B5E453BC7FDD405A770507BD708426775CD8758CEACBBBAEB8FF5673FD14BBCBC5B446014CDF0B442EAB98DCA487A7268C27146751B319BF070AE92B4C623AA06C39804812643270073E9996D95C33FAAD5ABF6F81FD8CB37CF886A1BE2231CC98C4223BE292630D3843FA2A06E8920C949912943059EC3C20EEAD9BCB50C91C2555BB9A51CFF17B799968E27660F20D68DFCB9906D4406C8938E712A2C61237CF63B056E89CA9B5878EF64260D194163EAA635455DB025504D98644D56B38EFBB3613857365417734865B3E1C8DE9047A60CB4D6B9C711E72BFE249B7157CF6BC4EC746E3B397CFF1F7364B13226A40AB3D2639F4000373EEF6B5953", + "dk": "7F30172FE9115609A3AB7059FE73A908D06CA06096F713C9209BC4BA416508E40ACBD2797E44C5F062B6B2820FDEB65FF8086960C25EAB5A16AE644CE11A48B450560C528C8CD4B35B69B80E508761B883747820FFDC86AEDCA55275630DDC70BA874BB707CE72D95E3DD53E782483F5B13B6D72A05EF29BBE3A1EF88909597615CA77A905836C9F5720E8A8A068E8AE395810D2DC14B9518694305ABF91A7D3594B0A9780C9EA0E316AB438FC3EDCD34DE9102617582891678C1425C4F3E5A4875725AD6053FDC916786B85E20B6430B293E4C661D50715C9E182D440BBEA8001DE6639B61402AD9B88397544EDD9573FC47898F8A0BD354FA4509FD3B99640958CC3147D16148993F55792051DCC1CA2FC8C8201F297FC06101A747DFD60A0D15C139133C684682BBF65B6863191FA6AC04669A97D8905A61AB6EB344C7AFA4542701E9B30097CA817FC85460A83668B7B9A70067A4D976CEFA12BF0ACBB7FA4B72D7A1E67E0AC7EB8873F0A8F01FC57F21B429E65B6627A0F038A6A1BB4C7EF1558050B0C6618994C17BE93A951A04CB8918B8EF9955930CA725490B2F12CAA0D972FF3210659BA2236BA955E0A800F443DD3F83A48E4BC06F03977047A68378219AA6077471514F65143691B974A601F0C89C54ACEA443991FB14F4C2B8442EB16B5474B64471988F6BA6D4C641B43830F1059910A2E70D6AC7BC9A316530EA12084594A56A8B645A94851D064AF1B53ADCB6C4B619CCA05C7CB23F243B88215FCC8C5377B0636726D51552F5E6076C4FA5001C8585CA90E1A724D3D6018C1D4655938B189183DFEDA9EE1D09E8F35174F118D25B0A67EB4BF967640F62646D52A19E1601761D55EA06B4FE6A751E4BB891B46518AF6BF61DAB0BC65C08D3575FA98C206C5443A66AC0F286C31D70059146C798B9726E774BB8341EB9B996941B01E97367E6A51F5A827B6382C6C9C0B07A303D5AB586B2B12140B39995885A55A1E1831A08E4744D2CC26CE0735F301108E526C96835B6A835E50BC9683993C594900B2DA184C57765525BCD7988685182251948A84A945EB93A7953353D3A8B4AA8AC3B6FB262B6C6C6B8A1B4699B726E173B88937D584205AEBC13CA66DCAF0BAF5B99705D896E01C0835BC5B1B6C62549C6C937524CE53656FC24EB20662A7341EFD79514D31C69A17650BEB96C415358F3B7CDEF1C31FD430F96B236ED2C37771C3D22596E2557212EBBBB9173033158A79DA1907D412E9E010A41CA8BC1C6E337384F4F180369848DFD71AEDE48929858A9F012D37808A777C60D077684D59B2699CCADA4BAFE3134509E49EBB76C9A7C0CD197C7109626A91CB3E56FC23E4FCC7F751A487E997CF0B21270CA97843B5D2F9BABF99708C0A89B1530FDFE323DF17993B695884CB82548352B1247F7BC27368DC3F8FF29F16AA273E59ADF615AB4103710B8B995BAB89602767D2522C60620F0394A1542C0E9A881BF0390F725A4A9CD2BB5C69806DA6154B5558B567A734366C05989979ACBD90C824F016C121C6356DD7BB1A723E3D6BA257F25E114C056BEA5F9990B719CC6463D32FE8BC009B19C494C2B281F502D8551539118D7044387826A1A7B6A28CF08D98E79D67C40DC79C11B45C55FB4992CF20167DE87991322F432C9E9E02A7A4CAAD2758138FE62D1CE8C5C4AC4267816352DA0F1224192B6B28DB993963963F6CC57AA5E833F717B7903A9FDB6036DA7C06601467C6280227439C8345946C9412556A3F12E70340EBA4B47048239CC792155D935B145FA172BABA40967059BBE4B42C800798387DFC30538D83B2654B4C7293A0B47608C95496964B9146AC217D750BC541874DC1A640A3060A1815AD82C5CD07A54A9BC9AE837ED5B400AF1C0DEDD9AA3F8AA8E90A28C7462FACD008CFD72BF7FC92F6D2755BE27EB658CDFA84A9A95680800B054D863543E2B556F76E6CB0A16139149BC9C615A57E545947C5F73A93F3242E83BAC1E494CEBB6B203338C2C28C2015649202BDB8F16A4F65B732C1030C929A8136518831686E86077917682F0B9F14D0875CE95F1BD18F9A3C3947255D45F43DE2A91F1796BEA9D870180224E8F6394F241F2906AF6BC515666C235F2997C8C84872718DFC7290A7D64D65D3B1ECB7089AF5A9BDECA201E52950DA839184770772B1283C8F59E32E13D78DDB3733183580D2659F5E38C42C9C5EDBE490D29C1362304CBF902AEC39B305D0C98683504960918D5784A845B0C731550EF0CBF5355A052A0089D685F237885F0539AF59BAD6687BD0F11335F86BA9A02662FC0A80E54A34B19CBC9AAF57FC796D1CB55D6CB796C831B3B9AF56697F011126094594B40A9C8A971EA348A2E4C358C260095075C6E73672A4AABAAA365FE0468AB4C9B9B4C68FD724299F2BBA3BB6530C401A7AB73C386367D8A504ADD98BCE629EF5D40F484707F7502E6C969DED8061A8B430DCE9BB59919AC425C031A34B70D5A77CFC37AF0BCC0F5A652C4A4DC3534A9514B79859725F9474B12612AC0C8AFA7C601B7480D16C9A40CB6298B818E5028645D542161950BDE36BC401435A186634D59AA10B9F404BC60033139FD43CCB001EE1E4CB5911510783983409B1F317433C2CA4B1F72DAFA8135D734A2DC9137E7CCDADBA0AC790516D905D9ACA3B1904BFD96C6294EA671F9153FCC29E0BF5B5ECE91BB8CC8788AB145C85186BF856D41AC33C356A18706603C9B9B3FB6DC2A089A82280BEA70742A2C142CB3FA7214345B738B5E22C5C8B93FB13BAB27420CA6B80989BB0F3AC6F3CF09A1EC8BB421030481AAB10200043624D8C58CC194835312B087285B61D8CCE5BB322BB8965CA5A69BE8CABF42C0E4FF50CB222BD09E1144B281F3BFB47F45C7BE53512FF555EF2B421A2EA5C2E7C18AE9B4776528AD7BB7E0699ABEC8AACB2FA532F6C42071B104CF9CD8D18B66F767AFB712445C636B0D8336DC9B692A835A2483E5FF60CAB253672F2A2E4CAB2044CBE74AB09F91851875A1DA7E8018F86A68FB8B6F580CC1BBCA4D2C9B362F06A2755723DE7230D593F221CA69D333D17B54A88C8C8CFD881BB664A29AC3EBCF8B7BEABCB246947898385B2F2353979C8FBF851DAD7B9B03898DB68324A3CABB9913458274980343990243CA145893F45A6F664080727ADD54844F4CA0FC404911FC2C5300BAFAD04CB4296BD83526155D2346666A591CC4AE871A38245BD769B5F7F96A4300B60F25A0EDD46A6B8C044A0FB8705BAAB033B080D45913EFA0DFFC2C6C9D87288567B3DA6B7C4F046D0048C84A5B05EB15493025A209597CDB22E117A4009842B8AFA8A0018CE7E02B90E872F65D2C73CD950EE2430983C52A0FC32CF0141D9D612284AA6E85C9414EC126F2726978C9CE05ACF2D982EE43CB8F05A0B0EE30AE898768B9C1CD01990B2B029886A48D5100221375D6385A4F115CC7EBA3C8902C230E15C0808390FD5B18A345C09B77178CA715389642A0659C5548AB27B460F293D6A4970FC22CA027C5E0B93346E3088A5C5C2EB394EE72676B53097BDD55E20E17255690F5BA57268B2C06EB04FFC1A6900EC58B9EC8AB351B0C7340370933D35137887572876B901C2BACB08470EAD58221C9B026A0310B00C93BF086CC1166A0D8AB311475D325ABF71698A28B132847A2EC5CBC25C75B47DAB4F2ABCBC998263372A2883089A42919A1FB7B49CE3A579E887231540FFD27CFA989E0B03AE8955343F30C65164A0061C7415173321F1202FF130560A37275895ECB63FFC3456E67A7A493B944C97BEF3857D8E83145CB7C2B97386777124FFE53C6362CF1A2836A4CB08BF780629B7B156B19A756629BEE50C10A86357A6BED33A72FBB7B66CCA36503CA1D1AC64F38986DF6C3435771CD3F8BBA1941A26046373E31D609464B17852C0957525B8B1C282B76FC43C5A8B5C4B32BEE1B1B421804C2311C4E8303A926C29E081B8D6936002445EEC5964CAC8B37768B2CCD736E4E2303C779FFD91CF7F2C6CB17B966D7C3C842B5E453BC7FDD405A770507BD708426775CD8758CEACBBBAEB8FF5673FD14BBCBC5B446014CDF0B442EAB98DCA487A7268C27146751B319BF070AE92B4C623AA06C39804812643270073E9996D95C33FAAD5ABF6F81FD8CB37CF886A1BE2231CC98C4223BE292630D3843FA2A06E8920C949912943059EC3C20EEAD9BCB50C91C2555BB9A51CFF17B799968E27660F20D68DFCB9906D4406C8938E712A2C61237CF63B056E89CA9B5878EF64260D194163EAA635455DB025504D98644D56B38EFBB3613857365417734865B3E1C8DE9047A60CB4D6B9C711E72BFE249B7157CF6BC4EC746E3B397CFF1F7364B13226A40AB3D2639F4000373EEF6B595335684FBD441A53DF57AC9A23ACAB3975E5A93B98C57A8EA448234C45C4CB09E4AAD0B2C3F30B2E09F24F39A475290E2E282A7D6619EB5EAACDA9C5741D82F99B" + }, + { + "tcId": 55, + "ek": "5080C6154706AD0819FC352BEB0747F728B96C8AC02E599764CC43B646BB978069E29B4527860F2A746071C392B2284F42E3582341587C320997F06E07E07F9BC3932AAAC4149768BA26A086878A804979AEBB84C747416B4B17C020975B459432640B137A74388B068DAA2F22D2C19DD259646887AF99334E37CB76399C4A83973A3A08BD37CA197A474B1902A9BBCFD86B65EA138FEF199D5649865C8590EB866D1F5792D316BC84750314075DB96977928131B868C3046202051A7F0C05AAF74C5535B401D75A243AC9596574CDAADCC9FDDBC4B77C3EC93630EBF4635E34B50E7371AAE50E0085BB67C055FACA394DCA9E13F74048170520919A96911C76D19F77564B4B9C361C706A528741D463C468342171A48EBAFAC52FF36EA6544A29B1762AFA6114995E6A223535A70B2F6B3D88772FBDC512EBC1A790D8995E710C68C9BA7F1C6DE25BC9258A9368FA41C0150B4C629C0F738B3AE056E8C678CDC2B623F3BA450C5DC4DBA6861102BFF93C9CE0909BF21CE5E6B0D4A095088525B15CAFE3630CAA434995291246A4370D1220CCF717CF7BBA1550C36A55A4319B080A6B28BE784A3CF1AD1AB3CC85472ED4BA88DFC818FA465C7A4B5B1D1A6B6A1A90EDC74E63891B482A3AA1A238997C845C0B8B5974C68668B36D0187F19955AEBC873A9685F4A5380B597821180AA26748A466989F7AA4A8F982252CB9BBF6A79EC16E5A671185D7AD97B91E0D161E1C6343C80801302053A295B6DF78531C3753F464594F2142FBE4CAB6D44C5B431E3318CDFD1B80DD2C6A0E93719B0813E299860A04AFC6715EA088A8AF15A5382B3CDB1BC73F923B2273B6DB9425E1290036F966BAE631A94C81C49C90482B3BDEA102361A8C33AB29443509CDEA3FC8A358FE8563365AB5DF442F95361D4CCCB9802046A3042F139346F891B0C8A348078508CF8985A521B062266AA2F10E6F8336BBE36580BCB0E1C690CE15521A7382CC66A39E1A922271A6B4F25690F37981D610B8FB63E1A3A19B935DD2215B1A42AC8EC22EFE0940666A9F1CF89168426E0BF57D649B47382405949AA331D401015070268C484DEB1BA629CAEEB30A33A831F4909C5951C46C49361FB20AFEA05FBC24691B87738601723A730106AB2EDC1250838964BBC435478B20707CBEEF1106A81CCFB819A3CBBC401030019D1C1CD0C0824E0224B058567860B3BC7382876948E13696D9391993C319D6F135AE8366E36C16D9028E320B39EA94A60E1573886C9B669896EE070F84A59C9F51298552C82C78C9B88238D064CE1686A55D9B7A39E2398AB0235F2A389C640BCE99C69F7603E2A6222148007D29AE12C554C65103494B40E02613907C467A2696114632BF1A67B2B708E0349082F84859921DBD83CB223410032A20F6370381B28692FA2AFF40C3BDD133019894BE117330CC8A61418C890B821D82011D6A48789949FC851CE5570411D576A4D794571B2BD0756CBB35A5C21655C2C7CBAB57A6BE7B675DD4B294E5BD8705AFEE8C8BA6BB3FBE1B4D6ED6002E8B3944F4A7ACCC6651D16E5EB957EE43CAEA48BC7C3B862796A709C95B953CC095306E275119C7F23F85E79EA37B28F6579E4BC99A9B82B86EFB1909892906098B2196A9157437A6EC62F0E5CFC29394F1D43E05734FFCC262D2503527937896E9BBC394123C1BB08E5514BCC4AF1C49A6CC408B3BC93502A0AAF6A67E8F2616E0E389BC8B7B646164D68156E0D8627DDABC97759A0C9C87728814DABB959D39A239A376D0232BFADB8DD1512389C5051E1920A7E43E22B5B00B8974D7B690CEBA1A729366DB0508E8E660559351DD929BB0734EEAABAF42744CA1838F83F7000A0BD057819D51EC601179880BB9C47C01A5C002B31FB3B47BDB207644A75FFC713DEC4A1EE1A743C628B2DA48A369750A80A8571757E12546241A5408D63F53E86BA3F403FB93C0D9749F78E1B4D1802DCBAA8DD6AB3446FB615EF2C00646B605BA117C666F19DBA196036329767293561D5FC0C648C280E6E00242452A3702CC2EE9C94CE269E27A4FF8464EC2D50957AB7CF6829B3F6C9598379985D66989984834164AFA794D0C6A126B774F97107EDCEAB95347BF89234B2446B2CD4232A39A95E0932E07A1BE1646B789527661442563155853218DD9B942BD7436B9153F1E8971AEECF473E37E5AA32806ED14AC214E005F0BDDF3", + "dk": "C37255A4218100D51B10510E1DF6AD6E3AAB6285046EC40D66174EA1C1A82B210D08AC71F1132666518B296A55720BC712202A694ACCB2E5BA19F831A12730F8D00752A71279A7C588E086F80215945719671840037C70D3179B93988E424086D7E322E87C24987C0325DC70A7B72D3762948A749E5EAB953A5C383415BFA9B72B3CBA4ADA73AF7D39AE4CF85088F4BC2B91ABFF19B0539A0DE80288E2D33D3D9486C4FB1E794953863B90287A0400E5B8841B836BE0CDB06087751AB48F011F1AC27C116093FF9592F47237B0BB1BB75489A3058C46EAA4F9976967D985C604B8D878B9150648F8294E8590CD134112051CB9D4E2BABB31218B07CD24520EF1C1036DA786C5671DBED54AC60A3CC7591E5E34029EC0B5055A68B3C34158015ABF5B6D479504E3E62ECC9868DF0578BF0677CC22B037BA50088C0374561A90B08DC93A621EC668F8F1AC391C845740453020BDD180A653B6C67057CDFB33762226254CDC054AE92B3F388FF8715EA5913D05405824A80DAE89138F316845C8484AD21F8400336EE449CFEB4C42662676C279C9572650EA71B7029729D254CF230A75D52690AB0271275D02949DE7951F3026BC9FC947DC2903E8B79201235D1DF22D86B60099B54EAE061584F959C2F977E30CA6A1554DE357349EF9B9F52B4D4B49CA1C76522AE26432B145B9D1AC8FF38EE25C7A40340889DCCAF977BF067669210BC2C2E07D5E13A1248CBEF7177AA5B3A6CE2594ED4013A9CC0DAA994436B0606195C8D31C3BEE363EE91BBA75A3CF082C2D68E8B21924092592664ED599A4851573147FBBC31CD599BF4D14C8FD25439E73894E022C84D266A8F93720A8BF883847B0B162EA6BA4D069467717CE9B1550ABB783755715F5F59CC7FACBC769020A738B9DA68F96B594EBBA3E01211ECFB24CCF174FD1CB5F92D715D7D573A80A4544A239A67368CA805ABDDCA798FC51E0730A8912AFCA9C90EFF6A0A5925223C795EA010327E20C903A4715F5953AA6A776812673152D41B66AA99960F5666FB6981F55035DFD6423F758343FD7A3CFA80205C69E8F49670B617FD2D65332D57C42B0918B097C3EE76D257C8966A9BFCB547C81987A7C751D74372435C68927D57C2376A5712A815B679468729E421992EA989BD3556741E15721F55535C74F6F23BFDCD09B64B78ABF9BB0ACCA3F53E29BD5A8A9E0295FFC2A80FE2B2BDA352F8E805970E43AB0D51D07B9A4673900CB1678D7C2BD5FE4086459738516BC37A66D91950BE2DA965D9BCD71B9342002C74D6A70B30A25D0FC1949A64106F018451A7D38837DAEC8A6FC6688B28A820F385FC3FA9932033338282BEF2707EAC64427B70A9E39B970D8C0C39374D381624F2B058EDB6FA31CB22A632FE939880CAB94AC0590E990B99AC51E573049ED1CBEC78A5CFCDA33BAD55489CAB062A7ADF517140FC40947F333FC893DA1F41C403C4231977AAAF4A1631CC78D626ECB979C981B17B5FA78A85829C679B361E270F4EC9010BC143E0A596E98B0E1784D314B119C330A9C9593C2885E5F104E54059E60A123DEB636B1F1078A0619F95A9027BABFF6148FA3A7910DDC525248C556882214F90610397C50A5837146C3F5C5619ED87EE7726B07F9B138681C64CAC2EBC32B4FCBA3593C0716F1624A38A454669BAC50AEDD76139F0468714A102D3248664397D1B17A4BBAC8000C28ECA20908B32D6A501552FCC805E655BE05C004134AB2D27C2225424499B98DF63773547351078BBE003105F60502306BD3A190DCE9BC83CA41321CB41E01C32E4736ED20C7F0BBCEBEA01B364B58D758827878A8265446F021C014F5493EC4535438139FE9A0AD702FF7C1A61537B1EF85707AA5A96B071AF3629B5B86380625A8E5A93B7BCB937CF4A1CCD1A2DF4B4B5699672C1013708A8F333B51F7E23125DA51FBB47ACE42275A36BFE2B70B381B0B8FD19DCCE7B9A33C9097827899483893C30C40B16799651092E8C3E8C051AF8303CA931F33998A097C58528BC410137DA0797C9B05BA4F954125435E9DB766A9E780CD4C316B823567E70B2DE2864FE7480DC6597984BBE89458C4B0198508BA5538385C1B10E746B9AB26C857616FAEC33BE89CA551A8CACF43236CE1CEB13B1CE18BB2E15A0504B92C9708CFA093185080C6154706AD0819FC352BEB0747F728B96C8AC02E599764CC43B646BB978069E29B4527860F2A746071C392B2284F42E3582341587C320997F06E07E07F9BC3932AAAC4149768BA26A086878A804979AEBB84C747416B4B17C020975B459432640B137A74388B068DAA2F22D2C19DD259646887AF99334E37CB76399C4A83973A3A08BD37CA197A474B1902A9BBCFD86B65EA138FEF199D5649865C8590EB866D1F5792D316BC84750314075DB96977928131B868C3046202051A7F0C05AAF74C5535B401D75A243AC9596574CDAADCC9FDDBC4B77C3EC93630EBF4635E34B50E7371AAE50E0085BB67C055FACA394DCA9E13F74048170520919A96911C76D19F77564B4B9C361C706A528741D463C468342171A48EBAFAC52FF36EA6544A29B1762AFA6114995E6A223535A70B2F6B3D88772FBDC512EBC1A790D8995E710C68C9BA7F1C6DE25BC9258A9368FA41C0150B4C629C0F738B3AE056E8C678CDC2B623F3BA450C5DC4DBA6861102BFF93C9CE0909BF21CE5E6B0D4A095088525B15CAFE3630CAA434995291246A4370D1220CCF717CF7BBA1550C36A55A4319B080A6B28BE784A3CF1AD1AB3CC85472ED4BA88DFC818FA465C7A4B5B1D1A6B6A1A90EDC74E63891B482A3AA1A238997C845C0B8B5974C68668B36D0187F19955AEBC873A9685F4A5380B597821180AA26748A466989F7AA4A8F982252CB9BBF6A79EC16E5A671185D7AD97B91E0D161E1C6343C80801302053A295B6DF78531C3753F464594F2142FBE4CAB6D44C5B431E3318CDFD1B80DD2C6A0E93719B0813E299860A04AFC6715EA088A8AF15A5382B3CDB1BC73F923B2273B6DB9425E1290036F966BAE631A94C81C49C90482B3BDEA102361A8C33AB29443509CDEA3FC8A358FE8563365AB5DF442F95361D4CCCB9802046A3042F139346F891B0C8A348078508CF8985A521B062266AA2F10E6F8336BBE36580BCB0E1C690CE15521A7382CC66A39E1A922271A6B4F25690F37981D610B8FB63E1A3A19B935DD2215B1A42AC8EC22EFE0940666A9F1CF89168426E0BF57D649B47382405949AA331D401015070268C484DEB1BA629CAEEB30A33A831F4909C5951C46C49361FB20AFEA05FBC24691B87738601723A730106AB2EDC1250838964BBC435478B20707CBEEF1106A81CCFB819A3CBBC401030019D1C1CD0C0824E0224B058567860B3BC7382876948E13696D9391993C319D6F135AE8366E36C16D9028E320B39EA94A60E1573886C9B669896EE070F84A59C9F51298552C82C78C9B88238D064CE1686A55D9B7A39E2398AB0235F2A389C640BCE99C69F7603E2A6222148007D29AE12C554C65103494B40E02613907C467A2696114632BF1A67B2B708E0349082F84859921DBD83CB223410032A20F6370381B28692FA2AFF40C3BDD133019894BE117330CC8A61418C890B821D82011D6A48789949FC851CE5570411D576A4D794571B2BD0756CBB35A5C21655C2C7CBAB57A6BE7B675DD4B294E5BD8705AFEE8C8BA6BB3FBE1B4D6ED6002E8B3944F4A7ACCC6651D16E5EB957EE43CAEA48BC7C3B862796A709C95B953CC095306E275119C7F23F85E79EA37B28F6579E4BC99A9B82B86EFB1909892906098B2196A9157437A6EC62F0E5CFC29394F1D43E05734FFCC262D2503527937896E9BBC394123C1BB08E5514BCC4AF1C49A6CC408B3BC93502A0AAF6A67E8F2616E0E389BC8B7B646164D68156E0D8627DDABC97759A0C9C87728814DABB959D39A239A376D0232BFADB8DD1512389C5051E1920A7E43E22B5B00B8974D7B690CEBA1A729366DB0508E8E660559351DD929BB0734EEAABAF42744CA1838F83F7000A0BD057819D51EC601179880BB9C47C01A5C002B31FB3B47BDB207644A75FFC713DEC4A1EE1A743C628B2DA48A369750A80A8571757E12546241A5408D63F53E86BA3F403FB93C0D9749F78E1B4D1802DCBAA8DD6AB3446FB615EF2C00646B605BA117C666F19DBA196036329767293561D5FC0C648C280E6E00242452A3702CC2EE9C94CE269E27A4FF8464EC2D50957AB7CF6829B3F6C9598379985D66989984834164AFA794D0C6A126B774F97107EDCEAB95347BF89234B2446B2CD4232A39A95E0932E07A1BE1646B789527661442563155853218DD9B942BD7436B9153F1E8971AEECF473E37E5AA32806ED14AC214E005F0BDDF3284F5922E1FADB421CC725F649A466A7AA9D04C09F8C42EAF6CB63A3632150032B2BC532E1B9D30739CA9C680296C7654464455ED2C95A777C3BE1E49EE746F4" + }, + { + "tcId": 56, + "ek": "74E9BB74500A47A16ADB6924035C0A162B234B394FAEE407B9A04A421587C1F4A6E090066B995D39E51212703D2C244C0D824436620ABD89BAB380CA1D89A36FD44BB6620E1D10A2EB2868074449DD137D5BB54FA051C3E9E63BC15BAE5EEACF28290484F45826AC0E6D424B97055A1AB9ABADC79A22FA09056C6F5EF02CECFB96ABFCC9444C303FA8C78F794B1C88BD05059D1C24A8DF14C438465FCBA901B15B0B5ABAC8B8933B8369930EAABF66727E8B7C49A9486148DA9C10E0627AF952AA7CC335C2BB3F7A5D60B10052280882E50FA23483E9B11B5A906023AA4D7A9982EE63949346B5CB4CCE8A352D303185A7A3121ECBC003EA967F668F333CCAF8B809973A16BC519555C56816825454A611E288654C929589EB3921AAC5E01650CCB4487463B7C59077FC9212081879437162EBA2218A9062CFC412625927447085016C3A2B81B5C5177C9F83A55C7581C748089F218B3EB81AA001322565276DD75FA4636056409C629238529012081B77B4913B70663A18282F88B798C503268325263990129AA466A5644CE811CF3804787E279E81D5C1BAA951415A04B3D76FDA6AA20F4167E88A080C7C94F7C280305156BAB3B9A4061B338B641B7C123E7855DA80C12364C6E453044FD91A8C68492BE55DEA6200DCC0BF606C970E0271690C953BDA65BC90BB71F9A1DC603DF0A88AD8BA4A5B90ADD31A6E44608056F607242539D4B2722A4023A2509EC6319C1872518DD9A6033A71894610473B8C2F3C0097D1628670A28D278FC7C8BDDA25995E280F8FE935CE5847AA8203E1C2B0F3E6248FB122C4D645EA961261D638771AB978F1B57C69775415C9203B596E58CCF0F2877C698C08B17761DA9621E40A68F0990D6C2B3007AEA9D88923B9B6B11B5D83C80FEFC1A0D4686527C7A9BE4A9665820310D89D1B770857695368D17FC9A0CB0BF1621F3501A4184DA5AAB3608B6962DA4B4B4134EBDBA59DF23EAB522F6348880F79BFFCD220BD736628507C16F74D37B7691A553594AA85CEF832F8B35CEDB24832201D622B0D58E6AC62664624B23FBB97A551C74E89283E9A96B98B31B0BC404936380FFFE0000B107A2541357C521C48F9B8F50795892AC82041334FB450F4F9159FCA7B0BF715C407CD3C713A18B1306BE21A4BE9AC5E15B4432775DDFB0E06A2C502011B73D360FA398661F2C504D5CBA9B6BCF4F990E08883D63B7E23C18B2729C21984AF0CC3AD75DCA3131949D4043878C5665BB06C995350BF2944F7807CE913BC6ED55F3B5B7B122900C86237D1846D86503C66C0B8290461CF64267B38467C202B1F06A1D57B0AB252ADE4234822496673FC9EAC832DC85A11B8FC6E1B178644D10D2EF842E702974C882820AC4171A8B1F81B273AC847CE4C234215AD3054A729998127A633502BC0FAAB4D640624F861AB58D953867283481A99A5668D0B24B1EA9C9944E427E9A63E48DC60D4E72EFD4009685B839AF384E4045FFAB5BDDC523C5684B8BC912EDE54CF2E9C4A6D05B820363C42C76DC4E58F71D10719D143513704F70137F9497F095938B4EAC411D31DD9A56309D312040C521EC15807568F5DD98349960CFE96C9E0C379D2CC6850A373923C86A5B4840A9C35FCC1773829643443AE94919E04BC0C303033DD000BCBB523B7B827D64A2697E60DE2E17113EA7A87AB2C3F090D6DC97FBF9A53668507BA609B6784241248AD618776D381A2260594889804941A12A0F12666F7883D29403E5816044B76A22A48A9AC6F2F9125132CC86BA23B41523E1FC1642129C55F3598BDBC592DB62FF5076E11933236D330B9705C7D976E81887A6A7045D9D5B0F8BC2092E9B502B287114B16335873F682A42EC015A5803306E0083D479C2698021B8BC59C485DD508A066782C44F22BC92B15A2373D641C8FDF92BA52D31C8AC7AF4170C387C006ED934CD3531B5A431B4AB78C89F98304574815D620B7D5721A032887960CAFCB91137632AFE1927405C8D1F7C71C826A0035CA7CD87D129B5CA4C3C3C3C7BD84896E8194B504B0C408118EAE3014066A2EA002ABA6411DABF99CC7456569D37BC585A78069B357320495847476041549B531A54880D00313397162F71098FDE8CE9A1CC3AA778DD8B301D8E36BDCE069158866446ACDCE527CEEA596B0FC71A41AB4106CC9AF6850F284D0D4EBF724B7C6E3B7A4D1E0B978BC477992", + "dk": "8C656020F357C1AA3C452A920A217D1213ACC1130A9E1647A299984091B51EFA957FA36D04B8325DC498D5DA4359642BEEC6C145C2154CA417156320C8E594EFDB7AFBA1A61215115BD68712907E905A90950C2246B86E0935A26A64B26824955C495F91002AD3DB9F626C7A0BBB4DF81B46A1B02198AA2A5AB8B26596678C97712273979758B22DD382E3683275091795BCA647130E0CE909C18019776AB1B46B022BD996F2C86C78323690B7AA3A7B7E2A781686452079E5A43C3B5FFEA73363C45C2CB15DCFBC3F4E927E51E09CCD064124628A7602B0D932733AF52101C82C887879EA2C2991F4AA07C10584EA3B10D67A9A07C7DB3B790E41434693B43C0587CA45BC4203655FDC5BCEA826F1781781721483A707F89A071B2ACA3C49697446AEE4B56E35FC242439AAABE14118DA53834B51EE8B5390B77296DC26C8B43851576FFF278AF7C78B1BAC7AD7D4193765650742C4F2C1BBE393C658FC7B6F06B28E1A6F85C099C097903A55A2FE9290ECBC8640D1773C1139FBDAB3145C2AB7E8A52CA29E3DB8B9719C3508E2397B680ABD621ED24A606A458DCFCC69B1D26D87D0688BA5AAD408C817BC9C2C9779157CCF3CB96C9AC4750348B54EFA3EC926B8E2C448C9133DB3511FCD4616F9F55503633D112B2672F887430B1A69F2BFC6071FC239118B834BD776AE7BC6AB4B388AFD2B67B984B568320801676A4B027B0A8C3FAB441DDA223642E811DBE41CF207CC15764A615947A1E53576674E56B4CFD0065C3009806D4B8552D7246319AD436C8CD4B5C0AF761CF01B549FA81391D36136713BB1878F291B3B3CA01A7DF3CDA5497C5845C434DC0BA935859DB35AA1D55C14A34145D40F955B45A249C82FC19446D45B1349AD5E28CECC37410F8351C4110ADA980D3F7C2DE9511A6E580E1186BF9BDC877858C24AA224AA10AD99D4CC810B6FCAEBC20369CD9C44238327513CF4ABEE66501C810E0C6CB893919F76982ED4B82C502B33789A0161754AE6611EED83C92F7B62E088B787C2CCE1919AE445A98FC4A90F148571A1263597CCCA0541571444C029BA628429FD8A05AAAC9A40A22EE8196F3F5340A6C6114C11AA9E6776C5818CA407060627030A748D29DB828E154FB5B881AA856A6543973520A8812C53330A1D80007C76B967BD7C90CA90460BA5884CC006D90087721B1D52A8381F23BFDCA5BB0B99C283F504FB117B2F64C012432A00F75051675B18EA78D9A99B86973F7C060CA4521EECD52D431CC46EBA194A7C53E2AA3E2C29518D899C189544BF80108A02A89462017ED384BE146CECC926E6F55DB487BE83CC3321B860FBA1612F0555CAB82154A8CC82B221F78A61D54241213A02DC86C4BD3B4458267C951517A42595274A91160A558082335E70916E0C0185035C06336C735082BD2A943236076D3CA738C181E6BC2DE6F9C0BB3C9311915BCAB363589A765AB7B5A473494909942DFC97B754C4ABB0BD4CE9261E643F99F4BE047392ECE1C3BF05775645896D330168C6C239F6A838AC9425F02A954CC039EC8261273A7234C747CB6D2856632EC146D9196D19BC1821CC8ED1DC6C43A279AB6C6EB73853A398533B010E071623B6E098E7520AF4A27CC218B1CA935EA5634D87E572639A6AB3F0CA9FCB7829E520F138C2DBE9018F246C7334AE2B2B8C3072992294C884EA494AD21D1966366CD923F97550869CBD223CA39DF6C17B775F68133BE86606F634934E413118463062AC6231B5BCCAB247B8769419BC9718A32B09525DDC2ACCDFD128176CAA3C3A25A3E898D27440478822D1A81954A749305612CC197853B22467E66418FA2A60660F0F178381B2BA77B12F82F48CE6099B614C776333BCCD5479AFA3880C15C3E22C1EAA7C47694803A5A61E16F34C4A24C17DD89CDF700C87D49FFC95794CA7B9F5448F80C56F5876C204D9031F33CBD245C5B2C56C9968903F78C699FA041EF4382E8941E931860C63ABE53BC0AE930FA048A62EB154E4658E70E265821B3864745C0DEC7F0267BB60B756C86B06F384170D291859D4A1C7B75DF5133DE98949352876D8C5CB4CF9C722053624BA262DB22678FA9652BCC045AB15BC11177C77558E1343708B3CCAA8BF5FC845B8B550B3EB7820B8BFE91C213A671CE1711EA9967102B57574E9BB74500A47A16ADB6924035C0A162B234B394FAEE407B9A04A421587C1F4A6E090066B995D39E51212703D2C244C0D824436620ABD89BAB380CA1D89A36FD44BB6620E1D10A2EB2868074449DD137D5BB54FA051C3E9E63BC15BAE5EEACF28290484F45826AC0E6D424B97055A1AB9ABADC79A22FA09056C6F5EF02CECFB96ABFCC9444C303FA8C78F794B1C88BD05059D1C24A8DF14C438465FCBA901B15B0B5ABAC8B8933B8369930EAABF66727E8B7C49A9486148DA9C10E0627AF952AA7CC335C2BB3F7A5D60B10052280882E50FA23483E9B11B5A906023AA4D7A9982EE63949346B5CB4CCE8A352D303185A7A3121ECBC003EA967F668F333CCAF8B809973A16BC519555C56816825454A611E288654C929589EB3921AAC5E01650CCB4487463B7C59077FC9212081879437162EBA2218A9062CFC412625927447085016C3A2B81B5C5177C9F83A55C7581C748089F218B3EB81AA001322565276DD75FA4636056409C629238529012081B77B4913B70663A18282F88B798C503268325263990129AA466A5644CE811CF3804787E279E81D5C1BAA951415A04B3D76FDA6AA20F4167E88A080C7C94F7C280305156BAB3B9A4061B338B641B7C123E7855DA80C12364C6E453044FD91A8C68492BE55DEA6200DCC0BF606C970E0271690C953BDA65BC90BB71F9A1DC603DF0A88AD8BA4A5B90ADD31A6E44608056F607242539D4B2722A4023A2509EC6319C1872518DD9A6033A71894610473B8C2F3C0097D1628670A28D278FC7C8BDDA25995E280F8FE935CE5847AA8203E1C2B0F3E6248FB122C4D645EA961261D638771AB978F1B57C69775415C9203B596E58CCF0F2877C698C08B17761DA9621E40A68F0990D6C2B3007AEA9D88923B9B6B11B5D83C80FEFC1A0D4686527C7A9BE4A9665820310D89D1B770857695368D17FC9A0CB0BF1621F3501A4184DA5AAB3608B6962DA4B4B4134EBDBA59DF23EAB522F6348880F79BFFCD220BD736628507C16F74D37B7691A553594AA85CEF832F8B35CEDB24832201D622B0D58E6AC62664624B23FBB97A551C74E89283E9A96B98B31B0BC404936380FFFE0000B107A2541357C521C48F9B8F50795892AC82041334FB450F4F9159FCA7B0BF715C407CD3C713A18B1306BE21A4BE9AC5E15B4432775DDFB0E06A2C502011B73D360FA398661F2C504D5CBA9B6BCF4F990E08883D63B7E23C18B2729C21984AF0CC3AD75DCA3131949D4043878C5665BB06C995350BF2944F7807CE913BC6ED55F3B5B7B122900C86237D1846D86503C66C0B8290461CF64267B38467C202B1F06A1D57B0AB252ADE4234822496673FC9EAC832DC85A11B8FC6E1B178644D10D2EF842E702974C882820AC4171A8B1F81B273AC847CE4C234215AD3054A729998127A633502BC0FAAB4D640624F861AB58D953867283481A99A5668D0B24B1EA9C9944E427E9A63E48DC60D4E72EFD4009685B839AF384E4045FFAB5BDDC523C5684B8BC912EDE54CF2E9C4A6D05B820363C42C76DC4E58F71D10719D143513704F70137F9497F095938B4EAC411D31DD9A56309D312040C521EC15807568F5DD98349960CFE96C9E0C379D2CC6850A373923C86A5B4840A9C35FCC1773829643443AE94919E04BC0C303033DD000BCBB523B7B827D64A2697E60DE2E17113EA7A87AB2C3F090D6DC97FBF9A53668507BA609B6784241248AD618776D381A2260594889804941A12A0F12666F7883D29403E5816044B76A22A48A9AC6F2F9125132CC86BA23B41523E1FC1642129C55F3598BDBC592DB62FF5076E11933236D330B9705C7D976E81887A6A7045D9D5B0F8BC2092E9B502B287114B16335873F682A42EC015A5803306E0083D479C2698021B8BC59C485DD508A066782C44F22BC92B15A2373D641C8FDF92BA52D31C8AC7AF4170C387C006ED934CD3531B5A431B4AB78C89F98304574815D620B7D5721A032887960CAFCB91137632AFE1927405C8D1F7C71C826A0035CA7CD87D129B5CA4C3C3C3C7BD84896E8194B504B0C408118EAE3014066A2EA002ABA6411DABF99CC7456569D37BC585A78069B357320495847476041549B531A54880D00313397162F71098FDE8CE9A1CC3AA778DD8B301D8E36BDCE069158866446ACDCE527CEEA596B0FC71A41AB4106CC9AF6850F284D0D4EBF724B7C6E3B7A4D1E0B978BC477992099AB72F8FC520FDCA2A080097EC6FA027049E7A9ADA0A0620317DAAC40780AEDE53EFEC91F6D99D54F19B3313C1B256CA0A4C9205CA0C2FC18526720F39CED1" + }, + { + "tcId": 57, + "ek": "F86BC457B4CC8B949B80AA0AC822574C54A037F1352CB843AA9225E7F0C70FD2C9ADD69C7E5C1E42E44A60B98DADB4399885C2698CBC9A93A146687CBBD213F26C0357F855CD02B51CC28192778EDD0BB139A70C4B1BC2ECD805632B14E2CBB338D09A0C347F4EA3056FC11DC05B18F198C37F6A904D990EB2403C21239685EB6D69EA97A2411DC15C933B102905D664F9231034C87472DA2857B54816D9CA70763020BC477AA78CC7DB7F4BCCB7B828A6593C3E9E74C19C790B6588318558726C66A4CE728D1FAA1500CBCC95C1CEF315A2A05CB6C738A211472B7A31347082946DF0826D6437F481207E27A7BB58253F545D8B815F5124637C17CF1D05BA35D889B136BCF14B54AC0A017A873D15C294A0B24604199C766C56D6652AE1E56E03EB5CE4900E2F59013E23C5750534B25191F9A9C9298887FF23A885C701E5481BA48A4BBBA514E59951D9637A6D11C737247413D5BD40702B8B342B8B15253A0318BF4A146522CDE162A9BF18001A529587162359B85917800D8D4C21E3BB0CEB0A4CA55C503A26AF80BC6089D12DFA259A4B53550A94ADEA92A854A4780207CC16A1A4A83C6B39E25AED7023AD526E747A891BF1C1E30CC136C90C93314599E77B9A10A2BA0046F9B50244C63BD0E16DD7163B1168B626D94BBB3B5B03C11970921E06383951F22954542CB980724CC3AC4FC5A62CF66736D0B0888BA41F65083F86162DE13CA3B60175707F64D944B54987C9540C02060CEDCC75CCE390EF57A90E67B81A55A407327659650D02356A758B876CC8B65C355E5A263E16F2B3A3D5A75B0ABE6362BEDF35CFCE0726813C1D86A228FDBC086C8A000761B4C4892E1E1C5BBBC36A4D56BFF85C29552314E32C174E15CA3941286551C71E9C61A868264C16B9827C5CFAE3102B4843F205B30469851720814ADA1D72A5039613C8F00060A53C726019592E54B2BF07B2177C44B013CA0F8684F3A05D2891028E9A8776599B1CEC4B50F444EF315F747B600553AE14174EBCA58DF3547FDD799C6500029E8B99DF5034A75231941BA7EDB2CE780C1CC80B371B5486D4E9133EFA037CC99B6DC7839C3A9D9FA135D1D45A688AA742206D87CA948AA5857F838FF5E0014426919AA57337D299B0ACAF54F232945C5B27FC8438618CEF18040DAC624025530C603BE5800F951862F29B7F13CB1CB94A79E56A2D485ABD43BB105024537F73BCD5818E35841D039A7C46A608A7B45DAE91A57F703DBF08C5C50CA41B2178B432A70A99BFF6F81794402930736BF348BCA4178D55599F8B790882F5689FB844BE6BB6369183D2423EA6729E12EC5FFDB8C5AA4B4C66E10C269B8713C31475B1CFE796078AE009D375AC9E0C7A37F825AB35C3BA082ECD7BBFB86167F15141ECF66168D7804B19260B5A87600AAF1507B53B149D76C153DD2B3D47E45DB356206CE90C1986A80CF681DF075E92C4318C18137DB4C56BD43E64051E47A2208EAC37A638683028A942AC4E645262BC264996FCB47CF684A2EA4A0ED15BE1A5277E88358A7BB5549838B5D58E2F8C8B3D241963580D0B0A898E9CB3A5C3CEA07682924B4022A1AA8030AFB362CE31D9AD5DD8042ACBBCA42853447782B7A13A57543462B2C5C61338DFA812C4695237D3143FD041615AA9D9D32084E370321376EBC07CCAC612B8683B2A7602B948287843490D465C6D71841140AE43109432EB078B228F79B98FB1DCBA8811CBDA8A7E0C748BF4D1A4ACBA920CA6B5083BC523B1AFE1E28FE0C1B93D8A8A04490D0A853B67E2C0ADF5BB2BEA886F8692A7767671D383556CCC0A466B4499C65F55431080A4FCEC5FBA1359D50ACA6F0979F6F97D783BC529C26464180F1242B8C6D7C28A7CB5291A11F41206E69A66011172368328BF1C37A18C6E7252ABB12C1781D621FB1108924963828422A545A329BB9D3B3B3D0ED33FF4A7CD3B4C9025598828F8973E42C2240A0ED98C04D32163035C7FE26B50A419BEB08244C8125822500D06D05A8CE199D7C0B0665428643A0DCBF9BC4DCCA2408B8BD51C26EB3A332D20371FC482AAAB833853797F60BF2179A1566CBA32A899F09A314C131678EB7138FC8C17C54558B8AB214BC34991990F008DE976AEB09A0DB4139F952C04095AB8537298713005B5A77424615351868E0DC7C3837B42A09584D2F8E9C7D4AFADCE829E973F5F1A94E54599BE25CC6BCE", + "dk": "E40CB2A1C040549BC25C441BAA0A7A2C8B57847B0F288A31B1D20C27B09F295416355854393B3600311B3B5B241933AD28177EC6A3005EE595CEC4CBCC14008E65C2BFD929D23B63B5B23505C7AAE2D36DB6D60856520CEE13B4F498783F970A9941A4E6D938C4118E30C9AA26DB1500B598340A6098DB10A791C3F75269C4F377653C0CBFD6731986C28B630D3814AB38493455ACC4DD54112DC8B0E57CB2B98BC098672E92A220283920C0B27ACB63A7DCA15EEA39C4FEB21B05E249D82B5EE9A2C0E4ECA58B60BB9EC449AD715CD245327D929F85C50C013245B3D1635C80C4E73827E93272457235A2174D1BB81D83391481095D4EB4186A204FFAF98090F92B8D653211573B83053296B1C64E856EEE496C2F728718E896C0C76064A523F213CFB9F79B88686D3C082BA4D2C0ACF87ED7D8AD6C756A608398C541230EA9823E919D9D28CDADF82C382C4A8C15331D562398C0B8D8DA013AD08F66F665BBAC6DE2C70BB80B7C52FCB8DD4052EE555251AB032E354CAED9C74ED1B86420A575B69504A16539F217DB541131C9C2FB03088936C888596DAE88601DE90BC5AB69BB462279C9275D1798339808B53A66F8A2722CC23466BA2B18118B09832DD12187E3944DDA177FD72980C373BADA408193C54860D8C697969EE03B1A575BA79EEC068B750DCAE57F8C6B1F913CC4D15185D735A4F2D81653F2654C743B03E0746BA307D98B8E1DF4641115B9DC9B560316A6231BB956C8099ED08C9C673401FCB182A15BD65B948358107001C2CFD7CC0F27A062401F9D96A313B46EB4F263E529440B059422244A81E530A30C661861723B015DEA1A5934698779481342C6C07BF1422543446A285D0F2B81F9812958CCBC688B47F2C659435B76898940239180CACC8F348759E1B529CDB6611B64AD3AD5350B8854DEE019D4ABACF5EA8DA4133E5225C9C3CCAAAC651BDD24CE2FEC9587984F06D29A16D891DE2572C6977973188F7A23483ED7306A318D0BFCB41B580561672A1B8BAB2B1294DEB78F33686C8A903F347363F35B0D85F291045C523DE57F51151E23FB538996BF5A663DA7A376F8C6C7D038A28DA1AC6F19B45D2B15AB2A94DAC58A6D1B74C8707732F638DC78C88CC0003DFB6E88150B338313788B3F85571173A1390FF299EBBB766CDA1ED7AB3C86349FA7CB85CE2A5C406286E990B33045880BA38635D9C9BC05ADCBD0671AB1BBBC5B681B3C2861F4A269C6B9DC9918FD7734E915B4507858AE9B213A700662D4A742272BD73C66CBFBC2EF574C3DD780D620AB53F190B21634D12985F8C847AA7B879D73C5B02C9D489897FFF831AA3474EF980F6CE954391B56F4B081F08959B91B46750A09A16C8F8BECB0E4834C1992CC2559737EA060983A1574650ECED58923C03E81D978B223C71FB11CEF476855527DD472045489685519B7A073CE77584DD0893961563F57B53CA4AA984758819633033555AC34F2423D0571738BC5CB4C1648310536010272A80EC70B93F8E20A39871538906CC1C1822DA957D2A20FD7AA43E9B40849F034510C111933790F90BA5A60405E58C3BE048EAF3B16ED9AACDDE84CA84096FA211668B9BA59D916A7317B6DA80564D06759C16D01D59532B25920124ABF562F0FF881110B8C051308683C0FC9517E6CA3793B1086AA555BDDF06F10CA324D67078621A4F9508B727B8B369533A2472F2DA86ACCE27566E064EA4145D643988CC34BAB205691B75B681653156A1CB2A5A756D0122A12450A3C601921729DD57DC6568A14EBABF80689EF786A7E694D3E702863BBBD84582BAC0616D64B91253C7926AB8DEC4A58BDFB3538965CAB5CB9D3D7C101363B45A2C63C7CBE7A16242CF14E30779029D32B2F389B48A03468F123E4921AA44CA9A2C952FE58C4AB7668BA47175978506B6750305BAB121B0C64278E27E8153C31503FFCB70F563849F95CD5C972FBE68BACA28CDC41AA52302E047623DF3388444487DBA17AE4E03FA3AC8FD4D46713B84C396095AA94AA035590D6BA3205C29E248BB0E8BAA8AF3B0170D082445151899670EAB5C6E5FB313413893848BBBF1AC533F283F0830398374E8C61AFA9325AFA6060C9755D76A69918100938813E38475FC904AB13338C60317200989C40305487A680CB93A9A24362F86BC457B4CC8B949B80AA0AC822574C54A037F1352CB843AA9225E7F0C70FD2C9ADD69C7E5C1E42E44A60B98DADB4399885C2698CBC9A93A146687CBBD213F26C0357F855CD02B51CC28192778EDD0BB139A70C4B1BC2ECD805632B14E2CBB338D09A0C347F4EA3056FC11DC05B18F198C37F6A904D990EB2403C21239685EB6D69EA97A2411DC15C933B102905D664F9231034C87472DA2857B54816D9CA70763020BC477AA78CC7DB7F4BCCB7B828A6593C3E9E74C19C790B6588318558726C66A4CE728D1FAA1500CBCC95C1CEF315A2A05CB6C738A211472B7A31347082946DF0826D6437F481207E27A7BB58253F545D8B815F5124637C17CF1D05BA35D889B136BCF14B54AC0A017A873D15C294A0B24604199C766C56D6652AE1E56E03EB5CE4900E2F59013E23C5750534B25191F9A9C9298887FF23A885C701E5481BA48A4BBBA514E59951D9637A6D11C737247413D5BD40702B8B342B8B15253A0318BF4A146522CDE162A9BF18001A529587162359B85917800D8D4C21E3BB0CEB0A4CA55C503A26AF80BC6089D12DFA259A4B53550A94ADEA92A854A4780207CC16A1A4A83C6B39E25AED7023AD526E747A891BF1C1E30CC136C90C93314599E77B9A10A2BA0046F9B50244C63BD0E16DD7163B1168B626D94BBB3B5B03C11970921E06383951F22954542CB980724CC3AC4FC5A62CF66736D0B0888BA41F65083F86162DE13CA3B60175707F64D944B54987C9540C02060CEDCC75CCE390EF57A90E67B81A55A407327659650D02356A758B876CC8B65C355E5A263E16F2B3A3D5A75B0ABE6362BEDF35CFCE0726813C1D86A228FDBC086C8A000761B4C4892E1E1C5BBBC36A4D56BFF85C29552314E32C174E15CA3941286551C71E9C61A868264C16B9827C5CFAE3102B4843F205B30469851720814ADA1D72A5039613C8F00060A53C726019592E54B2BF07B2177C44B013CA0F8684F3A05D2891028E9A8776599B1CEC4B50F444EF315F747B600553AE14174EBCA58DF3547FDD799C6500029E8B99DF5034A75231941BA7EDB2CE780C1CC80B371B5486D4E9133EFA037CC99B6DC7839C3A9D9FA135D1D45A688AA742206D87CA948AA5857F838FF5E0014426919AA57337D299B0ACAF54F232945C5B27FC8438618CEF18040DAC624025530C603BE5800F951862F29B7F13CB1CB94A79E56A2D485ABD43BB105024537F73BCD5818E35841D039A7C46A608A7B45DAE91A57F703DBF08C5C50CA41B2178B432A70A99BFF6F81794402930736BF348BCA4178D55599F8B790882F5689FB844BE6BB6369183D2423EA6729E12EC5FFDB8C5AA4B4C66E10C269B8713C31475B1CFE796078AE009D375AC9E0C7A37F825AB35C3BA082ECD7BBFB86167F15141ECF66168D7804B19260B5A87600AAF1507B53B149D76C153DD2B3D47E45DB356206CE90C1986A80CF681DF075E92C4318C18137DB4C56BD43E64051E47A2208EAC37A638683028A942AC4E645262BC264996FCB47CF684A2EA4A0ED15BE1A5277E88358A7BB5549838B5D58E2F8C8B3D241963580D0B0A898E9CB3A5C3CEA07682924B4022A1AA8030AFB362CE31D9AD5DD8042ACBBCA42853447782B7A13A57543462B2C5C61338DFA812C4695237D3143FD041615AA9D9D32084E370321376EBC07CCAC612B8683B2A7602B948287843490D465C6D71841140AE43109432EB078B228F79B98FB1DCBA8811CBDA8A7E0C748BF4D1A4ACBA920CA6B5083BC523B1AFE1E28FE0C1B93D8A8A04490D0A853B67E2C0ADF5BB2BEA886F8692A7767671D383556CCC0A466B4499C65F55431080A4FCEC5FBA1359D50ACA6F0979F6F97D783BC529C26464180F1242B8C6D7C28A7CB5291A11F41206E69A66011172368328BF1C37A18C6E7252ABB12C1781D621FB1108924963828422A545A329BB9D3B3B3D0ED33FF4A7CD3B4C9025598828F8973E42C2240A0ED98C04D32163035C7FE26B50A419BEB08244C8125822500D06D05A8CE199D7C0B0665428643A0DCBF9BC4DCCA2408B8BD51C26EB3A332D20371FC482AAAB833853797F60BF2179A1566CBA32A899F09A314C131678EB7138FC8C17C54558B8AB214BC34991990F008DE976AEB09A0DB4139F952C04095AB8537298713005B5A77424615351868E0DC7C3837B42A09584D2F8E9C7D4AFADCE829E973F5F1A94E54599BE25CC6BCE36548A718A2F379C867022CFEFB7B228B48B57E61E6CA3489226CAB968FB30216025460386C1993D774E1207376762C2090F998BB0669B73D63A0D2BFDDE9A91" + }, + { + "tcId": 58, + "ek": "8767B6A1C8CAA0F3625E11512DD9BC9D9B250F2B4C810179184338857C331CA87474F046B62AA2E089620DB30042C3B600C41D70261FF238A0FD73099A9BAE34F33D8CA4A722403DC4E954A2E2AA331C015F00811B20A6BCC35D29E25FDDE4B6A1CC3EBF109C4F77A7CF653F38E006B95B9223D80592B7AB53A2276428B87B2CC8C7C05AE6C15448E082AD40A179D1B8B83C03C009BFAE312C570633B6E3A60803BD92011355849F8C912089099136A055A5169CA36348B73B062870B821A15FCD010E509B8AFDF1B1F5EA7B64F5B154FC95304096FD8B6026500D195A5B6A9CA6B8B1AF20B40274DB7638A541B084CB8129130E349395EAC2B0754FF3339D4E035EE6324248F6BC2E60909AB626F40171CA37AC2CB5870EA29200E096D8C0BA73092F55B0125814B7A2B571E36750FE6CA94555C10528856853AA72A50DD0B3471F85528E07C0BB57213A89CF06F41A45D34779B42B1BC63F73E2703EC382E9A9C2BF247F53B865EA22360945377AA57322A747435933CCB74659840B91702E56184E9213BA3EA5A066B3A968968F899A2FA569582B3817621769202176E6335077C96C00E4C5B88ACAC86A1D3A21B96CD243B5877A6C5861AC0B3408A74D0ACC780D28213C7C33343103CAE7575BAC745F573E64C112AD40C6D049074C76958F652669442DD9711E159C18E3885BE1980C2BB64D21A4C6351168E0D37C4A6798F4F74DE099146DD1A34B184652E940B2B89EFC6608C12230206C3F0B25A9113A5749E997213A7A30E974E84A0604F11576C537A9826F4F3564FE803C852B35A0AC47C7DB1FA17B8259EC896D0C1A382844B5827EF15BB08B6CC8D02769A189B044E001106AB182AB315EC687462617E448AE7EE88CD3F37EE16A07D8EAC7FBC1B7056904B07562C261896C670EF14743C5C3A588719FAC5C47E323358AD6AEB6A1459DEAA97A122B6A0B4D3991814AE52D60EB25E8D93A3276018EFA9A3E0B7A869765B1629739F36C512C09B4B098B2E81B2F905486EA0CB78A7F4E03229C19884C3B03173646777B1B8881577808A834B18BB8F10E7429C370FB6C2AB58A04EC6BFF21B5017C624F0BD05119957098667998572CF83CBAC3B7700C9DDD0668649C47B014C219EA48BDA37FDAC7487B94CD41A753358A6DE6060EF869617FE50868A77E93A587905A35EEF4ADA7DB75C49923B982B1B0C274814920FF046008E922F9E0C5D46C27BC09220EC91BA9DB5CA95CC737D43D395B5399E365471ABC98346C9DE0BE44FA38856B17FDF119C6B6A1231770A1888C673A3A551BBB66D57DAAE01537357418FBC90624869076652ECB958DEC92908312D20C361E18675AFCABCC1B1D069C10FDE08F7CF7B3B3D49EEFACB75FDA995EB8C7EC2C5CA184BB1A6B78D3B0A0CF6A9961F15F1B0AC668FC3775D4000E502EDD90260730906F762A050CBE49E234E00339A1C380DF83ACE68B20D6646A6D82924AD5B9B1E65D5A962E155BBC3CC9B9E16A344B43825D0430348C0C6CD2CC89FC7813AC032AC5CD32954180DA2F9DAAA231D91C4F434AD8641BD4158F44346D0942BED7818927191C3FDA971F1B47741A66CA02280815BB2F448710773CAD9A236CCA4D2F91AF436B5AF77443905A1BC310BEF772505F14BE6A9CAA216769A5619E53612788D715C75BB1D4283F8BA282F89B00BE6119C3356D00496BFA098DA15819B8C5152CE2A99F3B4183F3B1BC1270348234FF6793EE633AB087B2CF11095BD62D319506C70745F8B2C728624380FCA05C9565D15B336A3AB4D8FA5C2FEA81344071A1732DA9D9647791812C4B799548BB33AC97F41127F03ACD2A851A2EC304AE58BDFBD96C31775098B5BC4FE8B6FDF3800ABC09516272B063508B097EF834267DCB706C355A00C269E8C250D4A92D097C90CCB89907D1A3C571619FC740977B4EC379A22D488C70D99A76F6972F4A1809A4A32069CA22D79EF33875D3320FA9F6210FE5C8AD416AE546BCFB7529D9B465C30BB4D248C1599818DA3A809D4559A278AADDA831D1FB4037828A1B316219257AF0932A16C3B15F97CA695119708123839358195CB07BF4CCD13A4571531A6FA30C43F2B96BA3B54783C825B5AE574669F1D90FFC6016C8194B96374F141B800630CE6D1B2458C45B770723945B18068B17F9FEA3FE47613F2DD3D54BF9E60B79A19EE60000BC1014825E2468B11819C5C3", + "dk": "E3A5CBF14621298CA837C9A3E5B68A40A83A5F588350712EB853856FB95563C770DF4267020A42A13470328BCD0D9772EB649D00EDC0D805390FB5244B97B467C479E087C62A162604A25A54426750516C6AF0C12621669650239467B0F3F14E8D9161A4608C8B2CAFED476C3344AC6E962E4065CAFD6064030AB6064B0ADB389471A8631DE97AA852A93F5840C53C8CF70833B1B4C55A869DC1759C9F036117C560FE38B74BB661175455B2E335779386A7EB54E2D096EB64B9720A29DB82CC65D854FFD9B9D5292722F1CF68E8275D578212866F7A57B6DE7311A113BB872A49B011265C7497D13BA55231B63D209714FC08542355E3B6657DCC05E279163F24A7F138B9A7ACB172B9AEF0E71A8D7C4204BB870BF25BA6E54086057F70659842234B9D3A69D6938DACC902708802BC571CB358781DF2709A39B0BB433AA74CBEC42B420AEC27C9B420CB1950F0773E019C9D0D05C23D18AA1077AB3748C0FA1CA9116B00A341A05CF2A605B1834A8C2E3E5C963E137E32A7B3E959473E109FEB3833E93624B6342F1950C9F68150B654B8D3C807661A8A900AC104445BB8CA5B9F93983F94C510CAA4D04324097002BFEB6B4DB404F81752C1396777796374176807C446934BBBFEF41F18880201C241E7119D5B572EE249CA2717B7C966C4B34C7DEEA134626C28EEE743931C568DC73A4277B78198CB6A285C9CDA8469D889D83632D070B86FA5CB870B9F58514982EC63678A32C2B999D35982BDC4C07945382801187EF10756EB43167B59C6F316B360C4C9A8514A81588877B5FFD9963D4A697289852452CF036B8FAA69B2B3655B9BC0553AD2B237D712F009492C209EE18325A1946CACF7AEADAA54EA073C98133AFAF91ACE20258C6B8A1BC549DF193453D351CB076BB5F5B49E26224B619EB2076F0030943062ABE7319383515D1163C5D65B97C70C2F1E3B9DF9103408743C41C11D12EB6BA7FB76AA146BFDB70278E00040F5513DEB5530FB42E04907943338208087B334621FDB55955875D07B97E55326FFE148EB91B1AAA69C838060AEDA76752864B296ABB928402860AFCEE2B1EC7BC5E2A3186325AF1C224B30690B272664B58AB90BFA10A27B0F3C815A96A795FDC0B0F5585EAB06AA7501AF7E3231C47A4C681564BE08153118026B541025FC86A460CCB1EA31EA30BCF52083F2DABD78D716846A40A36C3F0373B6F5E439C7099FBBDCCDF69B27EB5B53BEEB68EED4191CFA6016019E9F136709108C74655900A8BAC4C049F62B0021D3806CA48469E8939B8015D5F96417E62F0D824A1246723E8409CAE92112D9A4477733C83B4F234B3BCC6147B12B9207A201528188A5A694D5B34364C762DC0B9372DC4AFB9079631A17D8737CD90466DA9856EEF5C2783494AD0268FF6768FF721805B40A8A6830C106B3B476B285D79DB6C0123CCC1727A9B18B25941B970631753AC653565BB339AAE2AAADEB85A6284C55E01E1EF667AA629DB7138D72B8957E799124818015C03D552773DAF5B90250A996524ED72B4B001425E63C81E93016B595028DD2B6D74C40AD0A544D804C7FE1C59CFA651C32517A69A71AA1A491989C85461455F16EC5F972E9FA46AD055B7C9303E3B2B36DEB72D0394D8F779D79960EF5906293678E6BE11513D17C27FA79C1514E5C380F78524959DB1007E0710F3A0F5E34C39EB84D2070CA42B700FFE7905AB3568DF2AA7E29189B7156E5435379FC504E8683B73B5064B49BC4C8B7955B8A6AB06E1B921D55FB409755385E33252B8A3E42661409A5638E85660CEB67F0D02DBB124BF7AC9590193342E2BA7AC31BA556C2EFB02E43354D3E87CA700AB782A30CBDA0C07F1C7EACD558C5F750F2C142CE70C17AC62A62C8C66E8435ADC746EDDCCDB1F31710022AFB34CD56F25237CA8B8EB7A11FAB35A0909BE0B88928677CADE38E34A094A03643847A6F91E7B27634A390F21AE2977B0D45587B948DDB4A9568830D331A69F5218EF62A801C568D8571B793D373B649976707C083DA34DBB17FF8381598FB9B6AD7AA0DFA77A031630054A2F3991AC303929134648BD3B1F943196137A066CB250A23647BC640513CB5DDB205A39175E676812FF8C28AAACA4AFA90D705B802F40CCE9C2F7C985BAB9089F44A15DB502C7D6B9A8767B6A1C8CAA0F3625E11512DD9BC9D9B250F2B4C810179184338857C331CA87474F046B62AA2E089620DB30042C3B600C41D70261FF238A0FD73099A9BAE34F33D8CA4A722403DC4E954A2E2AA331C015F00811B20A6BCC35D29E25FDDE4B6A1CC3EBF109C4F77A7CF653F38E006B95B9223D80592B7AB53A2276428B87B2CC8C7C05AE6C15448E082AD40A179D1B8B83C03C009BFAE312C570633B6E3A60803BD92011355849F8C912089099136A055A5169CA36348B73B062870B821A15FCD010E509B8AFDF1B1F5EA7B64F5B154FC95304096FD8B6026500D195A5B6A9CA6B8B1AF20B40274DB7638A541B084CB8129130E349395EAC2B0754FF3339D4E035EE6324248F6BC2E60909AB626F40171CA37AC2CB5870EA29200E096D8C0BA73092F55B0125814B7A2B571E36750FE6CA94555C10528856853AA72A50DD0B3471F85528E07C0BB57213A89CF06F41A45D34779B42B1BC63F73E2703EC382E9A9C2BF247F53B865EA22360945377AA57322A747435933CCB74659840B91702E56184E9213BA3EA5A066B3A968968F899A2FA569582B3817621769202176E6335077C96C00E4C5B88ACAC86A1D3A21B96CD243B5877A6C5861AC0B3408A74D0ACC780D28213C7C33343103CAE7575BAC745F573E64C112AD40C6D049074C76958F652669442DD9711E159C18E3885BE1980C2BB64D21A4C6351168E0D37C4A6798F4F74DE099146DD1A34B184652E940B2B89EFC6608C12230206C3F0B25A9113A5749E997213A7A30E974E84A0604F11576C537A9826F4F3564FE803C852B35A0AC47C7DB1FA17B8259EC896D0C1A382844B5827EF15BB08B6CC8D02769A189B044E001106AB182AB315EC687462617E448AE7EE88CD3F37EE16A07D8EAC7FBC1B7056904B07562C261896C670EF14743C5C3A588719FAC5C47E323358AD6AEB6A1459DEAA97A122B6A0B4D3991814AE52D60EB25E8D93A3276018EFA9A3E0B7A869765B1629739F36C512C09B4B098B2E81B2F905486EA0CB78A7F4E03229C19884C3B03173646777B1B8881577808A834B18BB8F10E7429C370FB6C2AB58A04EC6BFF21B5017C624F0BD05119957098667998572CF83CBAC3B7700C9DDD0668649C47B014C219EA48BDA37FDAC7487B94CD41A753358A6DE6060EF869617FE50868A77E93A587905A35EEF4ADA7DB75C49923B982B1B0C274814920FF046008E922F9E0C5D46C27BC09220EC91BA9DB5CA95CC737D43D395B5399E365471ABC98346C9DE0BE44FA38856B17FDF119C6B6A1231770A1888C673A3A551BBB66D57DAAE01537357418FBC90624869076652ECB958DEC92908312D20C361E18675AFCABCC1B1D069C10FDE08F7CF7B3B3D49EEFACB75FDA995EB8C7EC2C5CA184BB1A6B78D3B0A0CF6A9961F15F1B0AC668FC3775D4000E502EDD90260730906F762A050CBE49E234E00339A1C380DF83ACE68B20D6646A6D82924AD5B9B1E65D5A962E155BBC3CC9B9E16A344B43825D0430348C0C6CD2CC89FC7813AC032AC5CD32954180DA2F9DAAA231D91C4F434AD8641BD4158F44346D0942BED7818927191C3FDA971F1B47741A66CA02280815BB2F448710773CAD9A236CCA4D2F91AF436B5AF77443905A1BC310BEF772505F14BE6A9CAA216769A5619E53612788D715C75BB1D4283F8BA282F89B00BE6119C3356D00496BFA098DA15819B8C5152CE2A99F3B4183F3B1BC1270348234FF6793EE633AB087B2CF11095BD62D319506C70745F8B2C728624380FCA05C9565D15B336A3AB4D8FA5C2FEA81344071A1732DA9D9647791812C4B799548BB33AC97F41127F03ACD2A851A2EC304AE58BDFBD96C31775098B5BC4FE8B6FDF3800ABC09516272B063508B097EF834267DCB706C355A00C269E8C250D4A92D097C90CCB89907D1A3C571619FC740977B4EC379A22D488C70D99A76F6972F4A1809A4A32069CA22D79EF33875D3320FA9F6210FE5C8AD416AE546BCFB7529D9B465C30BB4D248C1599818DA3A809D4559A278AADDA831D1FB4037828A1B316219257AF0932A16C3B15F97CA695119708123839358195CB07BF4CCD13A4571531A6FA30C43F2B96BA3B54783C825B5AE574669F1D90FFC6016C8194B96374F141B800630CE6D1B2458C45B770723945B18068B17F9FEA3FE47613F2DD3D54BF9E60B79A19EE60000BC1014825E2468B11819C5C3FD71017D481AE6731308A1987A3CBC2C9D1B9C3AC5D2CAA2E33E031E94B5AAAE2C07C5A4F04128E8AFCFA26248C8113A4216A08410F28A5440F4EBEE2B4EECB8" + }, + { + "tcId": 59, + "ek": "2E2C6288040BD6D8300B761BA2F8B4CCF65975382FE2F514E5B550C843BA66C85B70900EE5D973C9297A8AC84A82F21648A49C44D731D9088DB7A843311350011B1CB957C758DA99894C2C72B76D5F168147B4C0268267B3F36C04E549819901FDF7A93A10977293CBD52B662CF77D90205EF34CB62A885F610C5D2868A9BF6A730A88300C6A527442121C226E8AB4141D885AF0B1AAFF4251C0D7C3EB893844D4B5699B4ADE3BA9575B458DC308EABC0C545C10029B7270CA8284D30333C6219C1514A3910A82CC8073B727C7D9047092498F38024CFC79F3347B58AAAC8340777CDA1A5E65216FB4A5521577798030FCB142CD733839A6C1A2484DE211A1D0696A415CAA113934B97428BEE96C74470732610927F02EB64B1C3254B9D1050A22D27731066C14633BBC24063A7A149BC9088D2B73F67A87244437B0218B371B4AE18B40B0C238A78B666DC8C9C0F0BD38901AFBE77E67914D4ED70F7CF4B81FE08B562ABCDE55CD58F95792921B5E758E65938E47F8016C4ACF01BB60D60690632A07515930518944171405B0ECAFC7767183F99ECAA51E6017C805737347C019AC91C3AB3C5FC57AC5EF1246225C23CF8B43CE7CC574A1AE49693413270ADB0498D6609EED80432C6C5E1327934F168582D9863D112CAAF74D0A20B9A579AC9D77376F8C12D630AD1494296F99223ADC46BD5AA1C91CA9965C72F3330CC3E500AE7802DD1647147577A9F18E74F7B022E72E9DC227C53B758E8616BCF7AC6A0C21FD96679E65456CCBC882914C358C99D7BC2B555A1903968B5A2364EB1B28CFFB37CD6BC3E34569F8B0B88DD184912493F263059BE4A6E132B4C2DB37655150EF2223B0464B8C443D9CBB9983B73A68CBB08A968B77487153D973070354D928A85AA8C8AA6643E9B06A60A842BA7863DF8C26FE09A998D753C2B2AF25C29DFD458C03338FB818846A5257D82AA9C2421BF2B4427DB934B0B08ADCA04D10E054744CC6BE68BA771120D663AFC22018A0E2C475702A29B825057381267555FAFAA4716CCB3AD95F4F627767B3301388A0870038CC580BD36A8C406CA3ADE3430F415F79C43D80C0B82AD8696BF6088F25BBEA36AC7DDBBBC5E653F7A21A10E54ACE0714B9A2584060C4F0432CC5EA0785BB955D7B7563CB15CD609F9D974E9799B4F1752FC9F1693150B8B5127CFD410C5BB7B9784B0F8A42B7B1EB5478A4B5EBCB77E3D48E073806E3C4A71636446B4137B392902813A2CD474191C221BC4BC7B02570B9F40A287B598C6682B499B9F7B220AD19B2979299DD536B7A8578982791DD39223FF357A2B0CAC8DC73AA1C981AB099E298A2A9399113E5A4FA33BA11C5388AD0A8A7031F40C4AAC1B27D9BD8A9AEA26D42C205D446568914CD31A866368782DDDBC441A2A6EE7558ACE6B9F14818586A5E3A1188E405CA2120A4E5082955837EEB807815A6424C814E543251DCB26171997D4DC7201E984B83D49F27C9997F24A76C62495BE0B2AC1210099C3BBDC690C8826BDD209C724B6CA8B7C98D2006E9E9C49E960044F1AD39B76FDAB1B59421583FF2CEC7F6322D323D86A415C146421B2949372B52A62B272F353DADCB238C77C16424464067831679B6B29AAA69480956C06D42B264F7FCBA85E09D54B9C3DBF44FA828111209C58C7A222CC93BAE3B4919A2AA2028B2EF3C1EED5670049BCCFDC5227070237849A802422430E396E49290BE1A0844BB8B64C47184B7238FA42CCCE2A97E2558F83614BCE67A88C380EA53A8DCB1ABF31461DE125B7950743113A5A9CC1AD4DC3179EB8CA6C3712942892FC50FEA048493A07F61207B358419DE599FD2911BED84C4DC3837AA671EAE250CB90426869C3EF1DC787BD63723E4277CD86A0B5C072501B4F5E813774CAE0538889F9523B21CC1778A5738A3418EDB1CFA270F6964CA6A383BC0A9CB9A25995E67C058843AC2A168AD772DE28302C2D29193A82702AAC134680DB153C22B409DDA56B5CCB624ECB57390C862B15565CA53398F092A7B61C0F24A8703F29A8B32A0A0570F5102B008D4C457A572601399E46B0C6370BA94213613CB6600736E85427EED05671B163B39E1C9239CA69874811BC8701173414B246820CB6B81F38B1DF76C80E887C7131A947976CAE213DBE95BD11B24850935E52E034FF586AF42923201AE5A7A33419EB09C47FEE085026996B92EB356A177", + "dk": "18EB63EF9B8DE02420D4D89041C12F0D4A0C1FC67E927B104A001016F9489370CCED1519B781075762CE8964B1788351FEE8B562AA7B1AE7C3F6E8A88D03BCF0EA146F811F69C6369482926484871A17BE9CC068CEB861E3E144FF2893BBD98F35009295DA23C2E86932C05356928BE632C1AA466C89E1B9F6652E1B0A7589952C59922101B4CBC0C54E8DF889DA15718CF161E0692E8DEB0D888980D3B11B34B1573431409FB17870F2082E200B136C151A70B272F72D6A77123CDA5BCC21874599A206F2CC1460699985A277D30B21DA6D8DC6157DD37C85EBB96619460AFB2224AC81F39AA1E1B45A428B5151DCBADCF9B9DAA0921B8B50DED816F1FC5F1D944CCCC6035CCB52E3A452BBD5424D323977832252963614742E011544525BA61B034318E796E32702A8315A374BBA7A39245708707598243BE92CDDC6BE2B40A027A28AE058219E1C1431C1B37891AABD12009F08AA66D6978EC435A7112AC4177CDFC1868456A1BDB18F0EF021C8B110DB92A8B7548C889605F6028EBA12A817748F8236AE7D5206BF692D7CA94E2EF347EBD49519E88D895A080C296A95987638D707AA44B884044CC29747673565F1306D8137878535809975BC9F105F335A7CAA520FACA142ED348365051760EAC02E7C5284204E1724B5655C80A3C8CCA4FB5BE6FB265F42B670092EC63295073691D8E93A4EEBB467299EC07B69488217E1842077E74A7FEA8874D19AD1BB97E3371B87A82DAD62070EE6497C268EFC212619458F7E350260626E13B31E87047EEB020860218C442B09DEFB783944A2FB818D3E4AB267300A2912A1C2E9666B9025495A8B9C37A451A12C4869C256A077A2075CDA0A2AB3804437F61E0FC755FF92A46CE0AF9486236C6A944C415583D64D326222D9887434B271DC37606CAB794BCA99F5AA8AF831A1276396203C8D4BA0285DDA37B7CACD8153C761517395168ADB36CCF208B39617A8C6F5ACCD1933D2777D4BFC77B6052B87F4C4E9996F2D4AA19FD110254C82536A4D64E72D4F783A93479DCEB62515AB2398A52445F79C56F68F8CC872E590488006487E313034100DB4F59E601219D559190CEC24AFE25808F4A5737B84B71600237C2B60374F31B6BE4C854FC3693B2E8432FE8C9A4C1653163247DE1CB93C23092E9A6EB3100BB4956ADC10C23F4395B6E46553D465D625B78C778004598162F34CD926B869311939714FCB85590034557F2B5E8FA62066264AF54C1A1E41CD08BC40353B7FD7119800BB5C604674DD87A7F6CC92B3618C7F172DEE42752391872F3B8F1F2C8057888568255EA4F1100AE333E9430742FB1F3C00C69D7A017515491EE26BEE1361607990AE7BC438AA2FD27B37D15228011063C760312FFB4E8FD683A4C10320139967B055EF47328746BEF3174F79E45BBF864A2EA737E5F8BF402A2D91EBCF47A748CC952EED2BAAFA269415E8ABBDE998C30195A383117BBBA9B04B8BFE7759993C83E2A2A1B07BAEC2C7092ECCC3A54C5156949114AC6189135C362707508931EEF1C49F6772819C5E64C04D9F16A62A4389E6DC8E1FA663B863CF4DB1B51135CB144576E9443EB1D813789CC8727198397854C3A813966C218273133FC8CF275B3E3D1B911FC33F8437996595C086695043F027A2B802D2573275063AC43A351FC3626EC517462114D9410EA49C7F38B77706029F1C277FC367897198B317820E2242950D2AA6C3A277E67001C115A99BDA83CC801CBE772CC3D71477902DBF5CC985CB52EC76B4D52A039446C27A3C3814966F6512AC328B5DFAF72ABC6AB3B15813DA164DF281703BF41B3A6639496697BC85B78AD48D552C85B04070E2073AE87C3F57E15EE4996437B14073E83BFF56B2E1309540EB4628D36E3FE7C790AC0815F95B2A32BB244B17D4E06CAAD9A95151268FFB9DBAD211D1AA6FE251A8C6173FF10688FC4C0CE7394F40580E4D07BE78A1AFF894792ABB771353982F949DE79557445B7E43EBB7DDB2C911469CF009C7A6A3582D5A3D5BE0ACC3B848679548E0FC0A2CD794E24A5DBB416E571BC6292558EE344D8588B87244A2EF937636B4A0A6E0201CC84F024C0A59587487A4840F50A9C2196F25273A5813B1B583A37B0B3E8DC75021AA60D0C073CE481AF548A8CA472CDF1755E0E70D2E2C6288040BD6D8300B761BA2F8B4CCF65975382FE2F514E5B550C843BA66C85B70900EE5D973C9297A8AC84A82F21648A49C44D731D9088DB7A843311350011B1CB957C758DA99894C2C72B76D5F168147B4C0268267B3F36C04E549819901FDF7A93A10977293CBD52B662CF77D90205EF34CB62A885F610C5D2868A9BF6A730A88300C6A527442121C226E8AB4141D885AF0B1AAFF4251C0D7C3EB893844D4B5699B4ADE3BA9575B458DC308EABC0C545C10029B7270CA8284D30333C6219C1514A3910A82CC8073B727C7D9047092498F38024CFC79F3347B58AAAC8340777CDA1A5E65216FB4A5521577798030FCB142CD733839A6C1A2484DE211A1D0696A415CAA113934B97428BEE96C74470732610927F02EB64B1C3254B9D1050A22D27731066C14633BBC24063A7A149BC9088D2B73F67A87244437B0218B371B4AE18B40B0C238A78B666DC8C9C0F0BD38901AFBE77E67914D4ED70F7CF4B81FE08B562ABCDE55CD58F95792921B5E758E65938E47F8016C4ACF01BB60D60690632A07515930518944171405B0ECAFC7767183F99ECAA51E6017C805737347C019AC91C3AB3C5FC57AC5EF1246225C23CF8B43CE7CC574A1AE49693413270ADB0498D6609EED80432C6C5E1327934F168582D9863D112CAAF74D0A20B9A579AC9D77376F8C12D630AD1494296F99223ADC46BD5AA1C91CA9965C72F3330CC3E500AE7802DD1647147577A9F18E74F7B022E72E9DC227C53B758E8616BCF7AC6A0C21FD96679E65456CCBC882914C358C99D7BC2B555A1903968B5A2364EB1B28CFFB37CD6BC3E34569F8B0B88DD184912493F263059BE4A6E132B4C2DB37655150EF2223B0464B8C443D9CBB9983B73A68CBB08A968B77487153D973070354D928A85AA8C8AA6643E9B06A60A842BA7863DF8C26FE09A998D753C2B2AF25C29DFD458C03338FB818846A5257D82AA9C2421BF2B4427DB934B0B08ADCA04D10E054744CC6BE68BA771120D663AFC22018A0E2C475702A29B825057381267555FAFAA4716CCB3AD95F4F627767B3301388A0870038CC580BD36A8C406CA3ADE3430F415F79C43D80C0B82AD8696BF6088F25BBEA36AC7DDBBBC5E653F7A21A10E54ACE0714B9A2584060C4F0432CC5EA0785BB955D7B7563CB15CD609F9D974E9799B4F1752FC9F1693150B8B5127CFD410C5BB7B9784B0F8A42B7B1EB5478A4B5EBCB77E3D48E073806E3C4A71636446B4137B392902813A2CD474191C221BC4BC7B02570B9F40A287B598C6682B499B9F7B220AD19B2979299DD536B7A8578982791DD39223FF357A2B0CAC8DC73AA1C981AB099E298A2A9399113E5A4FA33BA11C5388AD0A8A7031F40C4AAC1B27D9BD8A9AEA26D42C205D446568914CD31A866368782DDDBC441A2A6EE7558ACE6B9F14818586A5E3A1188E405CA2120A4E5082955837EEB807815A6424C814E543251DCB26171997D4DC7201E984B83D49F27C9997F24A76C62495BE0B2AC1210099C3BBDC690C8826BDD209C724B6CA8B7C98D2006E9E9C49E960044F1AD39B76FDAB1B59421583FF2CEC7F6322D323D86A415C146421B2949372B52A62B272F353DADCB238C77C16424464067831679B6B29AAA69480956C06D42B264F7FCBA85E09D54B9C3DBF44FA828111209C58C7A222CC93BAE3B4919A2AA2028B2EF3C1EED5670049BCCFDC5227070237849A802422430E396E49290BE1A0844BB8B64C47184B7238FA42CCCE2A97E2558F83614BCE67A88C380EA53A8DCB1ABF31461DE125B7950743113A5A9CC1AD4DC3179EB8CA6C3712942892FC50FEA048493A07F61207B358419DE599FD2911BED84C4DC3837AA671EAE250CB90426869C3EF1DC787BD63723E4277CD86A0B5C072501B4F5E813774CAE0538889F9523B21CC1778A5738A3418EDB1CFA270F6964CA6A383BC0A9CB9A25995E67C058843AC2A168AD772DE28302C2D29193A82702AAC134680DB153C22B409DDA56B5CCB624ECB57390C862B15565CA53398F092A7B61C0F24A8703F29A8B32A0A0570F5102B008D4C457A572601399E46B0C6370BA94213613CB6600736E85427EED05671B163B39E1C9239CA69874811BC8701173414B246820CB6B81F38B1DF76C80E887C7131A947976CAE213DBE95BD11B24850935E52E034FF586AF42923201AE5A7A33419EB09C47FEE085026996B92EB356A177ACC844B3F887F1E5B7BFBA0732A4BC4751FA3943D4317CDB2E7E55E29AA51F207EA8CAD3465D01BBB227C9D3F1E0DC794251CC8FE65F6F5121B832E0785F4B32" + }, + { + "tcId": 60, + "ek": "604B79B57830E26865029657EFB444E781A6DCF141AEBA910047832EA2C787D524B1FA8F43F0AECFA4BCF1D6BEEC3A1AE42B6182178AD9D740F695100FCCB6994A1812B47F7A423D220897D00736D19C34722850442839E84AB04A263F850656139A421FCB2366B24D1BBB9ED241277D81B983E44FD7714B4A0627C1240E32C895A675C6104B3A0043BE7983AFB8DBB867DBAAA7521CD4C8C8F4262CEC7CBA27E0B6EAE57F090C63290C288039147A896E23502CB7F580E4071CD274948CB014B6CA7FCF7470DD5B20F7D21AC226C32067CB73901030854A915584D9725A66961B709B1B2F3B75531B0E4D98C9548B4003E8BFED11BA4BA54B033964D6C3C003220B6817C0DBC8C8BD0017048BA200D13BB9A7BD519962745993F4448082B448DF2773FD12AEAAD0898FE41D5B30A979A4AA5DEBB461F4843C9C3A30928E555760E7D762C7E98E21F147210999C0947BD7208052459402E63D4B66A427A49AB793C0015A7DDD4018DA5A0CA0C49427CC9E39F866FA442980B638D918502C421F59551B2787BC97142E2C505B90B8248E2649E5097D36AA06CF4B36D5C3814AA97CB3F1A130781E4E8A949E07BB60523C64D73A8F8AC88BD97687B3BF84A35593E767F6399BD2B851A16BC53E02CB4872C97D5BC46EAA598A588AC7D955EA7970F4633E858A1DB6976682C92951B4C266D133AFD7AE9BD734A9405A34E42A6F69BF05905E80393A6F3931242173D663195A2194DF327EA935923A1126AF7490751229F1C166E2DB04CE029DD41477FC792C5311C566D4C0E169CF97D902475763FA80A8F3949F13D46BE68658AD502F7A0B24F519267304441A0C37918267968B7EC9292C9053B6D787B27DC069B6E7BAC29851EBB7241768CAAC87999DD71C50D96B0D671B407ABACD255E6F428E3E541ADAD6671422A7B79B765ED37DC3315B985CB0931BB7565524707344979B3C7C742151DC39CEC630E7ACC472159522BBC64E96012179643EFCCBE94736ACBBAB2F4B3D244B72CFB5CC3D726DDBA595EE9594539A9F1B435B767CA2F209BB8A4C47A1A3848F70161F059B7845178A835BA8E56F7C671576F182E714948EE110F6556680A1B74154B3B17ACFE52792E6FC7270629C09E996DF90C291437A51B47F4EC14C24010B5CB299F0583D5AD82F86D1C239157D11A56D9DB1341E65A68DF9B0D16B450DFCA3B479453E2C1566070821F48069FC4939694F69D4330FC554B6F212D1967079561F58E44687FB51C053C0E8CCCB15763CF6037B94F1357CB48F6288CE97B883D0534EB4E8701F2676D0E19DB7143ECD790A2E5641A862A040D242D50B98DE895618C82ABC20119F635C66052EEB938BCD740DBC9C7AFCF03AF772CD5A78AA1D7C140F3A67D58A0C4CA7B8BE999907D59B15B724EA8B76949B6138FC23F33BCB8F762E6B959021138EA91B35DF4806910131B2D9143F8758C92C128A13871CD9C3673C06050709D79615006CB875D778FABCBABE615F23B991A699704439AC3B46B9052C85412B5615B4B7829B56E82989841140463CC6E97BBEE5820F3E875DD975075EBA3856075A19BB36E6F9CEB3DC7EB248124C3ACFAC41CE8AE1B646580426FC031C922081F5CBC6C86ABD40207C304F94F1616452586124A36A6862A3489D3886CDD9E2BECBAA0E4178929BA96FDF727906B0270201A9A6F08A4C7162F3AB74C388AB6A7154F5FB0E59A7B75CBBBCE899CA5572601CE09CFC6BCD870C0D9E6B9895040AB46A112A8570F8D7B110663AF7BC64982A22E4092342369F910B145755B64E71BA7FE3B18EE342DD79C6F68A442581C0FE4096054B8E07476E9DFA8A156A6CE311B6D27B8D730778E4D56158098876533FA7B2697F7293F8079A28832DA17B9B434ACF25C1A525D9A08FC2627B4A665DE032631A4C49A769BDE45E85EC7024E792F9C18004F2AC47128F2903BD43B50200C05A0AC44D46A19A85115FD1C37159E7B3AC892BBD3298F0C399B2166DE2F28856695AD0113596B7218E607EF661A8A4E15F4B6339139B4232395BAB8B9319E26DD9F1BCCB3C27990422CB2463A1D432289841232C7F9041768945CE93806097B67F7412831AC5056C412DA0753F2A144F407408AA82490D769D6B9C078E578924EB72B4FA6F159757F133C45DE703E39B50C74296FDCD22444153D5A8363BAF5FACDBABFB4B800D463164185216ED822C01", + "dk": "B8580AEDD8CCB37584503AA85B8A8F68D7AECCE71A8AB3BBFCE40395F8B5A0C07A07B7C99E51125CA3597F9686A6D81FFD9595E3C4B62B622D2AC3577BB83F304497590B8CC870BF4FE304169A1DF4DC71CDB9B7ABE7326347089537584EF427DC3579AFF93FF9CC7594C21B7D26AABEB29331D309CA0A01DBE1153AA93F109164D1221A271311E555B920D343A70973283691BB47BA5B27C0BAD496ECB8C28285B12773775D74AE06BC91F7617680775A1EA5C69CA9AC6B2636B3506BD9DC81559A138FB1244492184357B709A85D9C4B16FEA7B9BD3C7BBE0244827075F2960EA397871B311FB1E79535631E775CC0FBD49450004929CC722B102973846E58A6555E071FAF838B60E219A0A4820806A315374ED8489E98F0B1ACE31766B5C2C5B10C5570ABE675AFFE935FC91545A0D02EA1D434121959243C7829F1BDD4504524803E8A01B3DE36B6521AC0FD8C35C2F544D585175F6630343B561DC99506308DF758CC7C0791AFECB176A58AF85433A5A19DB4670D3873439D31440DCC7DD6544FBF75AA2EC5104D212D2B117EAD8B1CB0167596C3807798C68BDA7391005717804A0FE883CEFA5D508BC19917508AB45777E1CB5ECCC990F64EDB0AB7F7B198E546093283063D33C47E543A8E1B76B0A01061C27CB66C9A8E157E1AC60237D8BC8C0118AF1A1469A41122D6C9C89A8C1F272017D1CC7056CA22452C3831C4340640CC073CC931C41067337E6C8EF34435C4C38DB6594EC32078107950D07C09CC013BC2F4C62EE0420C06010BB104BA3B782D901820F7B3192A1610D32C3190886D317902D7CAABC7C65EA377D9890081C04895128F6303773D75A4CB82A6D52397610B509ED45378609F4CF73700F6B3BA4712051974D03965E7903A090199FE7A9F954029D0BBC4035486CAF5B2EB903C9E693C0908101DEA766636611937A938C1256AF21E1CA7A8C1A86F966578A9044E0F3984E7859CFF26C2260C35ED07A0E1F73038D7CA73B51C71521A7B8485E2012EE93B80D2082A9C700C9A697CEEEA452C47809686549CD0915D429C280C421AE8023850B26611654A716F2F8B9508891E776A1D699B3D69B3AFA16C3D8C5161BCC99403A49FD60316C61A56D3A2279211032DBABF284B46ACC0C16CA3237C78AC84E14BB8B57D6E8B02FBB13B4A3C5103F95A8A269ABC4332E2961781AB5FB46A8DD1E64D65505AADABA07B6B257F4B5E64E91BFB9AC869AA3CE64B59E77C70DFC77B8423286D15C970EC284362684AD5C468E45153C184DEE2CFC206C00964B4EC248AC5EC32DA7C83BA38859D39BF60A072DF175B1928B32805A316634145A6C4E00C805133740C315595170C8CE3618DD6485493495D89B6F0F93F3E30ACE33C3D04F42E88BBAD7AF8B706CCBA3FA4BB80481751BBA4DE41C5FA7C90DB4354811C98EE09C8E1C625A9DA2AF88433FB0C8E15EB2ABE28A6C0D2A5BB1B42C3E7B4D302A74AA744AB348B83947381498AF31BAA73DCAA19CB47938500C4280EE77B6C50421C75710EAF4B57D2AB8F22A43203E58D49FB7BE37359ECD83809648CAC91BE1948729B29643D534C608CA6A952929AD7BA83B330BC7BC1AE23B89E2B3A88CBC435B72D2EC99CBAF1AF5B6733AA9CA043E6A8A22461D5D03BC758AF3E0B41C196BCF4C5502F1315049463D48CBEEB264BD5B34A7E90BE8B0A152CB6386060A2C7F6C7477265086822B7E042AC29B6FB3445E0379D5AAB0A42D4ABF8823B102004001DB2205394034266D56B7A9DEC3D97F413169705C85C15650A18658723FC404482D6A00441871F26BC62B58AB9E62AB0246C9DF02AE55854F7C64C2E10736213A640A693EE774EA0617B7318A9934C0703FB7C867AA4DC8AA539AB7643807A49555E5167B1AA8B908D05AB208BC0E62040E0C78F35DA157410A36C003654C654E8FA6D0B098395349B266121EA1436138A0E78528AE0B7C37ED0BEF43BC825BC9314225B2A36AA89BC6C7C1B4E659C9E9EF7C791DBADA04C883C375938634C883156172A09F221623C2287294A17725BCB7D58CABB908D8E71BCCCA6B5C597736868C0CE088CFB06A659D514F3486C30572FE4F289236900620590CA8B432F679E870B62AC80A90849941F9A8DD6637C85D9613A95492EF69500E8A3036828818785A8A033604B79B57830E26865029657EFB444E781A6DCF141AEBA910047832EA2C787D524B1FA8F43F0AECFA4BCF1D6BEEC3A1AE42B6182178AD9D740F695100FCCB6994A1812B47F7A423D220897D00736D19C34722850442839E84AB04A263F850656139A421FCB2366B24D1BBB9ED241277D81B983E44FD7714B4A0627C1240E32C895A675C6104B3A0043BE7983AFB8DBB867DBAAA7521CD4C8C8F4262CEC7CBA27E0B6EAE57F090C63290C288039147A896E23502CB7F580E4071CD274948CB014B6CA7FCF7470DD5B20F7D21AC226C32067CB73901030854A915584D9725A66961B709B1B2F3B75531B0E4D98C9548B4003E8BFED11BA4BA54B033964D6C3C003220B6817C0DBC8C8BD0017048BA200D13BB9A7BD519962745993F4448082B448DF2773FD12AEAAD0898FE41D5B30A979A4AA5DEBB461F4843C9C3A30928E555760E7D762C7E98E21F147210999C0947BD7208052459402E63D4B66A427A49AB793C0015A7DDD4018DA5A0CA0C49427CC9E39F866FA442980B638D918502C421F59551B2787BC97142E2C505B90B8248E2649E5097D36AA06CF4B36D5C3814AA97CB3F1A130781E4E8A949E07BB60523C64D73A8F8AC88BD97687B3BF84A35593E767F6399BD2B851A16BC53E02CB4872C97D5BC46EAA598A588AC7D955EA7970F4633E858A1DB6976682C92951B4C266D133AFD7AE9BD734A9405A34E42A6F69BF05905E80393A6F3931242173D663195A2194DF327EA935923A1126AF7490751229F1C166E2DB04CE029DD41477FC792C5311C566D4C0E169CF97D902475763FA80A8F3949F13D46BE68658AD502F7A0B24F519267304441A0C37918267968B7EC9292C9053B6D787B27DC069B6E7BAC29851EBB7241768CAAC87999DD71C50D96B0D671B407ABACD255E6F428E3E541ADAD6671422A7B79B765ED37DC3315B985CB0931BB7565524707344979B3C7C742151DC39CEC630E7ACC472159522BBC64E96012179643EFCCBE94736ACBBAB2F4B3D244B72CFB5CC3D726DDBA595EE9594539A9F1B435B767CA2F209BB8A4C47A1A3848F70161F059B7845178A835BA8E56F7C671576F182E714948EE110F6556680A1B74154B3B17ACFE52792E6FC7270629C09E996DF90C291437A51B47F4EC14C24010B5CB299F0583D5AD82F86D1C239157D11A56D9DB1341E65A68DF9B0D16B450DFCA3B479453E2C1566070821F48069FC4939694F69D4330FC554B6F212D1967079561F58E44687FB51C053C0E8CCCB15763CF6037B94F1357CB48F6288CE97B883D0534EB4E8701F2676D0E19DB7143ECD790A2E5641A862A040D242D50B98DE895618C82ABC20119F635C66052EEB938BCD740DBC9C7AFCF03AF772CD5A78AA1D7C140F3A67D58A0C4CA7B8BE999907D59B15B724EA8B76949B6138FC23F33BCB8F762E6B959021138EA91B35DF4806910131B2D9143F8758C92C128A13871CD9C3673C06050709D79615006CB875D778FABCBABE615F23B991A699704439AC3B46B9052C85412B5615B4B7829B56E82989841140463CC6E97BBEE5820F3E875DD975075EBA3856075A19BB36E6F9CEB3DC7EB248124C3ACFAC41CE8AE1B646580426FC031C922081F5CBC6C86ABD40207C304F94F1616452586124A36A6862A3489D3886CDD9E2BECBAA0E4178929BA96FDF727906B0270201A9A6F08A4C7162F3AB74C388AB6A7154F5FB0E59A7B75CBBBCE899CA5572601CE09CFC6BCD870C0D9E6B9895040AB46A112A8570F8D7B110663AF7BC64982A22E4092342369F910B145755B64E71BA7FE3B18EE342DD79C6F68A442581C0FE4096054B8E07476E9DFA8A156A6CE311B6D27B8D730778E4D56158098876533FA7B2697F7293F8079A28832DA17B9B434ACF25C1A525D9A08FC2627B4A665DE032631A4C49A769BDE45E85EC7024E792F9C18004F2AC47128F2903BD43B50200C05A0AC44D46A19A85115FD1C37159E7B3AC892BBD3298F0C399B2166DE2F28856695AD0113596B7218E607EF661A8A4E15F4B6339139B4232395BAB8B9319E26DD9F1BCCB3C27990422CB2463A1D432289841232C7F9041768945CE93806097B67F7412831AC5056C412DA0753F2A144F407408AA82490D769D6B9C078E578924EB72B4FA6F159757F133C45DE703E39B50C74296FDCD22444153D5A8363BAF5FACDBABFB4B800D463164185216ED822C01B4806B961336510A82259B1B5BC71773AD66DF979B924B4A1231468E8933391FAC3231306C3482F8C101E967752104767A9B4B451597EB1AC636C407ADC2C682" + }, + { + "tcId": 61, + "ek": "04A6A42433B45E0A38D276208F6A1F8B923279D86D0E452A11105901D70B829719D4913B79106CE6F57072816E1F8A27B26C8089AC38863B015C74120854CD674B118CA8625CBC1CC0BA7033F44FC1E1BAF580408FAC1B5EDB6308C29B4E83B101396A4133072CCA8FF9175D0763C4FD72388586A81DDB237823860733618E6B7272EB7C4C791FC8C29241ECB41B0C3997577A29C6BAC68486B136886BD11DED566B39E80B61939AE4F28C7C1A9AC5D5B3F3800750AB7E1C16AA4D713E261C135E4591BBF99198880483F465907332771C69DEDCC43872B44D50AC902620F5038D3215C8944657BD7910539CB5B284CB8A9A2073E947AFD273BAB07F1F9773C0F251DB00526D6C17B46C9AB23234BAEB7558D115004C8DCFA790AF2A523E8212661551F3A27166D4598AA73FDCE41423256B72FBAE8F590E908063290C05D0404482D80734EBC954E8025AF60EEB82379480559421A5418168872B00C8C6556C67CD340B379623336CA776E585B72F409BF850AFF192A435341292DB59ABDA09DA137CA4FA191671A3A3009D2EC8836516926DEB23E0690A1599A100D820B870C40D31777445A921BA9D8615780B14019FB30ABCEC3A53B323A3526FC40CBE390508BC4AAF86870C11B78832105B45549160D8951DD194D0B4787FF30B8DC58CC61836A92233B8333644720AB36151ACA24786B50541B72BBEEBC230C77C89F1C2A2915F30E911EEE56FC43854796C894F35765EC3AF03511D36E49D20CC3F7E232238AB1A8D08433286B4C79024924B5D2742AE3ACA10746C7389770CE4F79A913C4ACDA678CD433BE2611D17A45215B4C905043E499C87C300B8465B1950572216502582C4AC099ACEE718B38A028DDE45ADB2B4B6B2C44FC1296EBCD28214157E439AC97791C89CF76BDC937487C744C90C41D6A925C859757F7B436E5792B3EA4DEE0A6F131A31523736F2061A3C65297306AD0438CDC1B40EFC3AA423D4C67DF4CC04E39E826148E088341284815F1727AFCA97CF40B11FA85A923C8D47A53A40A448223867BDE9A7F4886000D67BF4238BC3C3C18EE4A8F5E66AF5F00A86CB2A20911C533BA9805C3A1448414FA172039A22BC278C31CC482B20568A70677A660683830EF1F0AE32CC1004649E769AC377B28071C0882A1A2CF01631B3489DAF678B74945E8EA056DE1763F1A2204559A845EC805A3785F5A22F27B4B3203001B7F42AB2C61EAC773EA7987178CC3E4A5A7C5326C7FB6C9FFA440E8B5912A39B311C91BD46154167B38630F56606EB3FF3E7BD44849C5EF57FC3B10828607EBA868BDEB7AB6EE64AFF626D1EE546A9E25A47DA3D3F23B5D9CA2C9816B154F19AC46106CC323738B195DE2ACCC3D6952A4916E66B19454511594A34EA7BA5FE077CFA41C13CF6044F20878981A468B73FFDF95B44BAC6ECEC8A3CA57D6CB7C4E990158C71B06C472CF5B682B4708C1C186C7598450073A7430B4C19334B3E4974E9B3959A04897ED52205FA146365061F541F6D26C42F9B55DBE573073A1AC328945FE01CEAA1164BB0A7B5B08BF0C46FAE0C3BC56B2AFC60C068E6396629C0CDB465ED21AC11E90FF4B072260A34FA31A790F85483734BF7471DF188437F231BCF309493386EADAC19BA70BDD3FAA89CF95A15F31D940657AE3A05D689B98A3B17869B3E66ACB9FE0B4BDEE5B142C39BABA9C5079A74BF04B0DE6A314909BCB8F95AE1C856CA84B75B9C8A70EA78DA35456B6042FFE115C91869B0C3967A04607CC36DD798420E7A048E13644AC2B08B7B0AF4827727E5A134662277896EC621CD0E4B5774F743E2D7C93CC8A2DF80B6D5D164E84CC622680AB8957619C996F0B026ACD64BDAD233CFF5C114C3A12DD9229EA416E7084336F985DBD12BB93815E2AAA587EA1B5BEB5A9228AA928A108839CE18C705AEB862822A014790CD2D4872169A9EC2BB0F3849A6FA5507A4B91AC0321471D6A2421A443EB429208763ED938FC03A7C8882A5675C10DBEC84D597947B32C2E63004C823306432596E0922AC41BD0C048783D6C3DC781346C15589DA2620421579D131FDA8BEA625985D6182D55C961344C32F5BC2F8586CF40332AD6C85B8274F8F091C05A90D13F3367B8092DD19C66AD53307F4C3BF64723916A1E0C61B8FD2C264A166A3349DB3D5992DD02DA4880889FC705E75859EFBC931464AD6B1765E45B220195C3B93", + "dk": "CC28823D947643450DCB5419CF9544FB7C08A6AC129EB11354BAA603A1BB75AABB8E681C930BCA04835CE1260DC61C29E663C8F90431741351606C1974E30757C069CE08A520A7ACD7EAC812209E86E88CC3D66C0BFA9CC82309896A2E6B2A5C2526789C110A2D760007416E4DB189DC38C44A21BFA6744BE5F55755F6B07B0C2614B433A3D731302A95AB188370F6A27BBBC36D5C3413A93858962C88F9C691C55D6C3351519A7251717C090C232CE462EDBB1C27043DBF1B686F864E6BF0C0D86A7EB48C4172E07990607029945417DBBA38579E2F02BB34B825F002CDDF485FC2AAC8D0D2902D57A4FA0A7096AC4624883A6AF9ACBD3919B1643214E414EE8006CADB74981B8B0F58C2A8237A105C858D477F7334AAD621AB2B597D9238757C6165A08B4FCE29ABC4CB227400B24EC4757C63A11B66AC27908090225456B845EB3BB01366B3776BAEDC55BD00E842B58034740019EFB3C18883990AB9B115E22628627ACD250A94F6133B8004926CB3FE695B9E759748CCC7B8864428C52AB6C260DE0BCCE383754751780ED0749E9782986805B9E60683061F17A37326A28F954056A788B9893810E3A52CAA888E77309FCDECC258A8AB960CB88474CF0CB8226A08451FC2A21C73BE73225338A83FD69A64A0024690403C88E8290927B825BC56B78B726BE900CE963E63F4043FA0C9DC48356CF84F6196CB74461B4AA3BBEC763EBDDC68FF9C05C775840A877F26BA5051B2844ADB47BC531944DB9FBAD20DFE630419F84DBDF430CEB69AE779CB8C77491EF0049171857CE91F581B24B449A3A80BA5B874B9A1218AEEBC1AFA2955469001C8011E89BC8B2A63AB91F7290882C019FB1FD5D72332300063A00504402D2A58CBF37BC27147A2E7A18726677287660C08D6B278BC3DE1623C9D37302206A5BFD8BBFEA00AD9904E20013491B93A1967744C12604B975D55D307DD58794C5B5028CA3D5AB35813DACEA49944E4EC5960646CC7356B22A15E1D31830F01B0968B1209632D14EAB43A636080828D48616D9C4C6347863698A0070E606B7F63AA945918028A008D100876B5910569485BF219C8E99B9720A17CC12C51C69E678953830C6C24830DA3D272E5773D2F9A7239B0BF24384AB5B818050B793FE4810A6090C49829767077DA1C22FF8179018371CE14B007D237891A9ACF5ABEB274B9E8522EDA5C81352C0C16941F23E23C8C2B24A4447045821E8FDCB993C21CCEC6723038584AC9C8F90B9D1BD6CE962261C15C880A7565FF65BFC7A8C56EB505D53C9937E8663FD7310924A70F3165BB1A16A898A511301C0494841A20CC61999F7EB8563DA10B9179C76425A99F9A180DD0750143370402B0A5D7609BC2BF69C2B6AC7C90FEB781DE477ED5010DBCF83D7578777FDB57AAC607FEDB037B4A63306355D1804AE1C77772700FCC5989C94C870D59B701294E69139D1258C0A6E22CC33C9856F50F6FD5B82CE1174BB529F0055A5249265BEC3F995193664B4301B0935CC63106307B3B09139759CDF9658B75F548E6D1769DA53FC56065E3E4184372AAC7A1993EC484A5219085E30EC8678EE5500929D10B3B4CB55CE98362CA6F357A140D5C9F9836B6B62751F5076DA8105699AA9359D72D67F02CDD91940F518859501E14192B4F426FEB8912D81B1860F0CD86959216842CE60AA0EF9001984CB1D12C0CE363BB82093C28A8A2190A7DB182162959ACCA5685E5EAB1C817C95B74BAF72C4F72392E63CCC9ABBA37CA7C93338B609E113A8E4A2DB5A067A808080AA32B412A712843680F705A1FC68FD36AC750987EB4E64ED7431F0F1CCE77D0B223025AF9D97F81D5512E45A156A57904C933DC0413D469C4519B015691464A5157F92AAFF74C59CBF22E7B68C28F3B9A77B8C7E16348F3BB03CBDB47D9E183F308BE5193477D01652893094D15202B8B8B1440622E5C890A0C41F455817DACAAD9DBAFDF64B4D98A0A842693BDAC09287635EBAB89DEF25B9FA83637A88233B5415F5636A475711D283774150A51474513006AF4AC2B17604E14F64EA05216E292608CAAA8C87B995FD4BF8616C10EC029FFE241487253B6F18B935C4DF20C1189B44849CAAB58C816174100DA7373BFF5916E474394E2B3B636431916AA42524927328CF57388B3E01E04A6A42433B45E0A38D276208F6A1F8B923279D86D0E452A11105901D70B829719D4913B79106CE6F57072816E1F8A27B26C8089AC38863B015C74120854CD674B118CA8625CBC1CC0BA7033F44FC1E1BAF580408FAC1B5EDB6308C29B4E83B101396A4133072CCA8FF9175D0763C4FD72388586A81DDB237823860733618E6B7272EB7C4C791FC8C29241ECB41B0C3997577A29C6BAC68486B136886BD11DED566B39E80B61939AE4F28C7C1A9AC5D5B3F3800750AB7E1C16AA4D713E261C135E4591BBF99198880483F465907332771C69DEDCC43872B44D50AC902620F5038D3215C8944657BD7910539CB5B284CB8A9A2073E947AFD273BAB07F1F9773C0F251DB00526D6C17B46C9AB23234BAEB7558D115004C8DCFA790AF2A523E8212661551F3A27166D4598AA73FDCE41423256B72FBAE8F590E908063290C05D0404482D80734EBC954E8025AF60EEB82379480559421A5418168872B00C8C6556C67CD340B379623336CA776E585B72F409BF850AFF192A435341292DB59ABDA09DA137CA4FA191671A3A3009D2EC8836516926DEB23E0690A1599A100D820B870C40D31777445A921BA9D8615780B14019FB30ABCEC3A53B323A3526FC40CBE390508BC4AAF86870C11B78832105B45549160D8951DD194D0B4787FF30B8DC58CC61836A92233B8333644720AB36151ACA24786B50541B72BBEEBC230C77C89F1C2A2915F30E911EEE56FC43854796C894F35765EC3AF03511D36E49D20CC3F7E232238AB1A8D08433286B4C79024924B5D2742AE3ACA10746C7389770CE4F79A913C4ACDA678CD433BE2611D17A45215B4C905043E499C87C300B8465B1950572216502582C4AC099ACEE718B38A028DDE45ADB2B4B6B2C44FC1296EBCD28214157E439AC97791C89CF76BDC937487C744C90C41D6A925C859757F7B436E5792B3EA4DEE0A6F131A31523736F2061A3C65297306AD0438CDC1B40EFC3AA423D4C67DF4CC04E39E826148E088341284815F1727AFCA97CF40B11FA85A923C8D47A53A40A448223867BDE9A7F4886000D67BF4238BC3C3C18EE4A8F5E66AF5F00A86CB2A20911C533BA9805C3A1448414FA172039A22BC278C31CC482B20568A70677A660683830EF1F0AE32CC1004649E769AC377B28071C0882A1A2CF01631B3489DAF678B74945E8EA056DE1763F1A2204559A845EC805A3785F5A22F27B4B3203001B7F42AB2C61EAC773EA7987178CC3E4A5A7C5326C7FB6C9FFA440E8B5912A39B311C91BD46154167B38630F56606EB3FF3E7BD44849C5EF57FC3B10828607EBA868BDEB7AB6EE64AFF626D1EE546A9E25A47DA3D3F23B5D9CA2C9816B154F19AC46106CC323738B195DE2ACCC3D6952A4916E66B19454511594A34EA7BA5FE077CFA41C13CF6044F20878981A468B73FFDF95B44BAC6ECEC8A3CA57D6CB7C4E990158C71B06C472CF5B682B4708C1C186C7598450073A7430B4C19334B3E4974E9B3959A04897ED52205FA146365061F541F6D26C42F9B55DBE573073A1AC328945FE01CEAA1164BB0A7B5B08BF0C46FAE0C3BC56B2AFC60C068E6396629C0CDB465ED21AC11E90FF4B072260A34FA31A790F85483734BF7471DF188437F231BCF309493386EADAC19BA70BDD3FAA89CF95A15F31D940657AE3A05D689B98A3B17869B3E66ACB9FE0B4BDEE5B142C39BABA9C5079A74BF04B0DE6A314909BCB8F95AE1C856CA84B75B9C8A70EA78DA35456B6042FFE115C91869B0C3967A04607CC36DD798420E7A048E13644AC2B08B7B0AF4827727E5A134662277896EC621CD0E4B5774F743E2D7C93CC8A2DF80B6D5D164E84CC622680AB8957619C996F0B026ACD64BDAD233CFF5C114C3A12DD9229EA416E7084336F985DBD12BB93815E2AAA587EA1B5BEB5A9228AA928A108839CE18C705AEB862822A014790CD2D4872169A9EC2BB0F3849A6FA5507A4B91AC0321471D6A2421A443EB429208763ED938FC03A7C8882A5675C10DBEC84D597947B32C2E63004C823306432596E0922AC41BD0C048783D6C3DC781346C15589DA2620421579D131FDA8BEA625985D6182D55C961344C32F5BC2F8586CF40332AD6C85B8274F8F091C05A90D13F3367B8092DD19C66AD53307F4C3BF64723916A1E0C61B8FD2C264A166A3349DB3D5992DD02DA4880889FC705E75859EFBC931464AD6B1765E45B220195C3B93D3D97C3338FD138720932C67AF45854B9196DF6F928DAC1B4ABD361FD57EFA9233E7FBEADBCBD194B723B7C18FBC33BAA9352700A9A746ED934D0B34CE7F9A59" + }, + { + "tcId": 62, + "ek": "C5D92FD79CAF672C757ED20C6EFBBDD25406BF12BA4FD46C45285EE6101333612972D908F21476914C3C73A4288997BF064182D13767E1A147E2B6459E184D9FC2329DB5863F9188F5B42C2969C71FD764286C28BD54376777C850B7B892E52942B21C55D281BF95773B60626279C65A44B2E7621ACB94AD1A0A2CCF8B6FA373BCFFF50E72351202496584F8C4D83590B35825E4A93E5424C214E926B661C335B096D3F652FD7C0DC44BBE26BBC987F48796091F1F08202CD9B3453B732B5210F6AB9C00DBA93E3A3F56C28BCAF53A467105EC66B16CB9729BBA2F4646BC5E44CF2F41035D1C84643292D791294C4C031B4848924448A45C6FC83AA02B488A658935A269554527957BFC0A0A4AC3A0267A44F9946D3151BC65A1532AC50F9757B32B9DB7376F466B317771AA906520E0B85F78586139E248B64732D2D1B3EC14B65D226DD233BE7E662F832A4821237A342B457AF8CC7A8A1B6B98AAC8534E08AA34B16992D914807AB970BB527FEFD8A6648349D81741627B174B1B89D116159C0B83FDC8BFF7A2C45078AD149611F2C988B3581FD119426E5A24B8E82812C16FD314C613717247FB759D31228457939D55599C9C0D0CAC9B17666C39B661837B59B98A0D6A949225587C90A32A0656AAEA78711FF958BAD415C968C2CCCA84B198A89A575986662B65C9602594B7935782BC5353E5C9105B7B025DC079AA9A4439800E65B53A09A9149DE3A24B425267E390AD71C666C3CAD9ABB0CEF07F402660511246A5D5054D711B108130E312ACFB6B6340E409FF51298EC17612F3AB6266808F06AF9E75517D6A067A9A474240B13EE0A3D1621A47F4184FFA2DEB4035A46A37839AB9445101A572A6FD37C6E1593B6793A8057C7C9227182D2A4A32B9CC10D187AF2886E2DA9338CA3842D1A4ACC31019F28747AB56353C2B0764C21704148D611AD9BA2F1BD097A208CDC2E11CD9733BF59CAF85E28068F99F9E321EF06278A5542296B19CAFE86CB484C762B1BAED258F122329C3445E62B9CBECDA711A7494CE4A9107E1527E6CC82AF553327671A6520A30799BEE49B7C2712B4B546CC26141FAFACC34D90CF98745C66C4AD77984EB73AD5402A435664FDD3306C277992F825669E1C8EB73B57A5366C3DC30692167BC164565FA671549420D7570E76395129BACF4BB3F42D8BCAD73A64ED246368B85DA214A72D210C70383C18A112C8B128EA3ACD9DB01658128641693C1941F307A70AD996AF5C847C61A454A530799B52E16B8197BC9262F000654B585EE750B1E24BA9884B1301B6EB198C274F1605B4B94F83385BF373578992D27E57E76575C02A73957CBA473A63C68EC4966265BEF4C2442B33B96B4CA3B739D463C690DE543C63864D5AA67B86B349B07BB3A6035A1178A7C9256FC9A06B30382C7FB8873D47BBEA59738888C504A7D4FA25AB9CA87EA7A1FB0E766084B01DA79C15EF3890D7344704455C37585A8B6A87913C10213BA708458C834CC78A86D0717A5946A3AB4814CD3DBBAF50259F82B8E7FD8C1E9A6A1DE8A1F61B025ED5417DC027FA9DC396E9484328780E82C2D782AA14BF3819D897C54A99DAF407CF0A217444401550C29C0E956AF2501ABBC1FB7E60337847AC9B265CC91169AB809E3708066B283DE36299C79858530B47AEB8233354E28FC905951861CA26F45E8737DCA1B3FCCCA2B8C458BF4A594A66E408C5EC5B529DFA66F0E3B6AC66CA9FD6AC2C20B3AF85C0DF84AB7908978E42633C63950ADE83441248FEEAA168554A54587CE1BA5158E7912E55A8638FC6F8FC68FC5E1B25CCA307CAA4446C202A7B2052695A2652928F9F49432A627D73BCD878289995623AC01715F8C1C7413C529E254B0E390ECA22CEC76AB1AC828B8134063CCC402415B07B0072BC7479C4219A57C76A2F140EF8C9D810836B8DA6264CC91F816858943331C08C1B2150AA3F60EE3A29DC13BBB5184B8E54A965A549E25426258A59FEEAB61E473813DE78451DCBE43A90C7F764EC22509B10B04A4A29CF7E84D90B549708C069A368894325EA6227C6A5466C947BAB636AD7AA6AAB6A7382F87303619583509000F95A6008ACEEE123BA3FA3E93D0156FD16AD55641D713CD44463052F39C3F145F9A2A989AA083EFEA42C77753661A72181A12EFF5999A0DAFC515CA2DFAAFB5AE0B3592086FA1DBF09F0C29819AC1BAB42CB7", + "dk": "3A7951F0D813AEAB2AFE2A76976798ED367A97E30E4FE40088E74E5E42A6AF7C12A9E85ACCEB9E5A560A86C63E38A2A479D62AAA7527B5B138B38CA49A3040C725AF4C951C73A92ED0944F5673ADAB4C2736E988C9C5BC94487D49FB9577110E4BA82A47CBC842542ABB3AB5A87336641017D6486BCAFCB51E635B172738B4762133159AE7C4601A23A3B9B10338A20889AB6FE5AA1463650147B4570F13AED6180390E2B946D830A7655AEBAB3131F779D89584A15A0BA1BBA820C90418358C36B08F2EA6833E91C7061787FCD9C629D71151568F924B6921720E1604050B93CA1F9A2D6E2A7BA7B617AFC3B850F20772C90F14AB4D8F229B3F57B28A5101C2198602E96C23567D70954DFFC948CD91BAA7A791754296516C239C1BB79ADA7A011B90E0EC7DEC3445B1BB04F58B689F38336FBC09BD95AB01A66FE88692BD770042A8B52917C13B907600C7422646707C0106BF5453965783F7A6981BD2B54872C9B9B4B007C81D9F394B6BD5CACA9B3A0B3B43A1B64F7B2454E2B41A21BB288DA1619CF2425384BED51052450368CDA38FC7473084783D5BB12327A925FA48555B38808CA06A871B871D430D1D8B0F17F24D7867AD6022A60424417BA0802824A95CE6CADD3CAE9F35AE5D76ACEDB71DCB2095BFB4907D865BCFD282F57164B65842CE3AC7B8F1A4657C87EED18830B2851A883497823690165CB77C2F8FB4875BC428139049B038A4D1A4981C186BC0619A73898355016867A368A266BFC03123958CA45F3311619B13A49B3194E64716D83BA9C14281547E40CC53DBEC72901921B2531EA6D44B3DCBAC6973B637D06203B691D9E4488942905D060958F71E08CC0724695D1851C39A5951798503FA97484BB29890C15E7CE9CF288ACA7F3B7ADF7B991DA71F894481108C6605AAA07A7C846999BE64395A9630438B912591704F71691F458A637F9522538861AD44B03E21B9B4D3C573910F88292958385F74C91CC7675E0D817A3A23C66F268673E49825F5454BC156C719669E27AB74C8BD7E067BC626CDC2B143032865BFB66113DC360132317FBB49CCFC2A4FF7095A611E44B14ACFE0B1F4267724FC3B21DB8DBC0245CBD51B16F5C8CB340B7F502B3BF86EB0128E149C3A3EB66934CA018EAA62EA1C8A00E2800FD255E17A59F9AC99AEB1BD44B635F8AA8F369516E904BA913B3BEA70335D341654239F7DEC04C8A9B7BA70B20CE265720097F2A55F6635B4E67732C98C0040FA6364FBCF27042CC8F297CB427500357B2BE60FE958A7A2E2C8BA46369888548FD78F390963DDA0089F006703F9A81A097B0742780262650ED3A700327B9FCBAF9874C0F3220A95A603339CAEA73429E580B32282A32197C730D73188FA65285082BB93522A087993BB8F19309F2DD7BFD7F30AE43415DCD32F57B64512586E44B85DADF65FB9C4C964530F202872DB6A3E72610E0B3B60B5D90D473B953C1164291C6F326058604B7CBBE23457150806F1CAF26301827CB15B0CC376FA08C00C611AEA71BF777E0A8B04B80CB17FC3AC4A88AF7B72732E6C5C63631C94046E58E4221037BA7F037821466983481C6AB78E5F692C612474FABB235A238F8F35476DCCADCBF437EC5055AB5CB51B3004BEE867DFF30CD33159B288AD9B9CAD48099849254FE7856F269056EFA43EB9FA9F82B9B741319096B737C78A65C1D4A69770701DA4AB22D328FCCB4A92C72BD41A5FC37BCDAF65484B7734FE9CBD35BA59A8A348AA031FE92601E3F27AE258383174A7328252A4935C57E63793916C801BAAD12A5CF980890BDBA2BC68C66AA8BEAEC808DC923B25521263D3C033C612DF9812FFD3A82456C1759CB636705726A191C73BC1A864CA7592BFA0283ED8D8407C70B70549446638AC4E5731D72B207F2B62A516CE533005F815A7ED0303E1F94C76663DCE75CD06BB43C1088790544BBA5A93D5698FBEAC6F51DB1E4FBB288F6B46BA47367C475D52026B7DD33D9706537C2B4D298B68F900BC2C2BB9756616860B606D6C4421853299FC6FE5EC6738070F64DA17167A18D04043B752CF85B2AEE311339DAA7B67307F9D68CA14E85A4A80AAED644B64635D2A51987A881E99686DF4B7C39F7A01E5EC4D2449303E939534FA3177DC759373A223A289AC47796CD97A580810C5D92FD79CAF672C757ED20C6EFBBDD25406BF12BA4FD46C45285EE6101333612972D908F21476914C3C73A4288997BF064182D13767E1A147E2B6459E184D9FC2329DB5863F9188F5B42C2969C71FD764286C28BD54376777C850B7B892E52942B21C55D281BF95773B60626279C65A44B2E7621ACB94AD1A0A2CCF8B6FA373BCFFF50E72351202496584F8C4D83590B35825E4A93E5424C214E926B661C335B096D3F652FD7C0DC44BBE26BBC987F48796091F1F08202CD9B3453B732B5210F6AB9C00DBA93E3A3F56C28BCAF53A467105EC66B16CB9729BBA2F4646BC5E44CF2F41035D1C84643292D791294C4C031B4848924448A45C6FC83AA02B488A658935A269554527957BFC0A0A4AC3A0267A44F9946D3151BC65A1532AC50F9757B32B9DB7376F466B317771AA906520E0B85F78586139E248B64732D2D1B3EC14B65D226DD233BE7E662F832A4821237A342B457AF8CC7A8A1B6B98AAC8534E08AA34B16992D914807AB970BB527FEFD8A6648349D81741627B174B1B89D116159C0B83FDC8BFF7A2C45078AD149611F2C988B3581FD119426E5A24B8E82812C16FD314C613717247FB759D31228457939D55599C9C0D0CAC9B17666C39B661837B59B98A0D6A949225587C90A32A0656AAEA78711FF958BAD415C968C2CCCA84B198A89A575986662B65C9602594B7935782BC5353E5C9105B7B025DC079AA9A4439800E65B53A09A9149DE3A24B425267E390AD71C666C3CAD9ABB0CEF07F402660511246A5D5054D711B108130E312ACFB6B6340E409FF51298EC17612F3AB6266808F06AF9E75517D6A067A9A474240B13EE0A3D1621A47F4184FFA2DEB4035A46A37839AB9445101A572A6FD37C6E1593B6793A8057C7C9227182D2A4A32B9CC10D187AF2886E2DA9338CA3842D1A4ACC31019F28747AB56353C2B0764C21704148D611AD9BA2F1BD097A208CDC2E11CD9733BF59CAF85E28068F99F9E321EF06278A5542296B19CAFE86CB484C762B1BAED258F122329C3445E62B9CBECDA711A7494CE4A9107E1527E6CC82AF553327671A6520A30799BEE49B7C2712B4B546CC26141FAFACC34D90CF98745C66C4AD77984EB73AD5402A435664FDD3306C277992F825669E1C8EB73B57A5366C3DC30692167BC164565FA671549420D7570E76395129BACF4BB3F42D8BCAD73A64ED246368B85DA214A72D210C70383C18A112C8B128EA3ACD9DB01658128641693C1941F307A70AD996AF5C847C61A454A530799B52E16B8197BC9262F000654B585EE750B1E24BA9884B1301B6EB198C274F1605B4B94F83385BF373578992D27E57E76575C02A73957CBA473A63C68EC4966265BEF4C2442B33B96B4CA3B739D463C690DE543C63864D5AA67B86B349B07BB3A6035A1178A7C9256FC9A06B30382C7FB8873D47BBEA59738888C504A7D4FA25AB9CA87EA7A1FB0E766084B01DA79C15EF3890D7344704455C37585A8B6A87913C10213BA708458C834CC78A86D0717A5946A3AB4814CD3DBBAF50259F82B8E7FD8C1E9A6A1DE8A1F61B025ED5417DC027FA9DC396E9484328780E82C2D782AA14BF3819D897C54A99DAF407CF0A217444401550C29C0E956AF2501ABBC1FB7E60337847AC9B265CC91169AB809E3708066B283DE36299C79858530B47AEB8233354E28FC905951861CA26F45E8737DCA1B3FCCCA2B8C458BF4A594A66E408C5EC5B529DFA66F0E3B6AC66CA9FD6AC2C20B3AF85C0DF84AB7908978E42633C63950ADE83441248FEEAA168554A54587CE1BA5158E7912E55A8638FC6F8FC68FC5E1B25CCA307CAA4446C202A7B2052695A2652928F9F49432A627D73BCD878289995623AC01715F8C1C7413C529E254B0E390ECA22CEC76AB1AC828B8134063CCC402415B07B0072BC7479C4219A57C76A2F140EF8C9D810836B8DA6264CC91F816858943331C08C1B2150AA3F60EE3A29DC13BBB5184B8E54A965A549E25426258A59FEEAB61E473813DE78451DCBE43A90C7F764EC22509B10B04A4A29CF7E84D90B549708C069A368894325EA6227C6A5466C947BAB636AD7AA6AAB6A7382F87303619583509000F95A6008ACEEE123BA3FA3E93D0156FD16AD55641D713CD44463052F39C3F145F9A2A989AA083EFEA42C77753661A72181A12EFF5999A0DAFC515CA2DFAAFB5AE0B3592086FA1DBF09F0C29819AC1BAB42CB7180A9DAC2073097C7BD0B1CD7E2160AC7CCCF93297146980561A539BC80C0AC1D2F0A3888AE75B13D2CA4EDBC87385B44FE3FDB7046EB2DD58CBC23ACBCF509C" + }, + { + "tcId": 63, + "ek": "2106AB8D7A23A1392C385AA326706A91EC75C2527E5321A7A2692021D71C5EF271D4815102450F4E8B8271141CC9F5AF6876A77D8930FFD97D4BDB23C9150303C68E62A49D245ABF2DC807FF4173614768322602B592C016922CB32B75AF7380FF16B9DA75A6C03A101D396BB1D79ED61155CC173FA76320C5912ADAD946D68A7E4094A38465AEE94C51B7B254125B589D37694F34120E442872DAC112DC7C4453CB665A63800BBA5F9B2998CC72822348E90B9F3CFC0E09129AFA94A7A4592A41C46852F1BBF0F72EABA3693A54C4170B7F5E0AA5EAEB77345895B5AC36136206FA6612CFA394D946C83B51BCED2C119F0089E0095B1DFCA02D7261B14C14B4C9A4EA825389042373BC0B248B26CE3C8FA958C05A167FD1A294F870AE2D1269620A7B2E6CA62F162EA7A1C855A656A4F2412C783C805C763B35C383A0B1E389BD509A4C745473D8E9157CD77C94A13AA5EB96708A23A010558DF83BC121A79F3554CB3B5C22D6035ED5B6F07712CB3A6B70A775E9A7C4925188E508191EA189562274ADDA1EDB5856299285C70A525242AA7F599621734EF6172823BC2771A052B900705DC739ADD8167448BE38162F4AC75DB795497FC66BFCF53990877427F2154DE31588F5629022A8E73602DC8756D068C3FC238431D93C79A9B43B7AB8CDE39341FACE8B522DB140B037D85010347F6CE5B3898A964D52CCED985F6F2375117B38EC385EECE0013918A64627878537A4E034A41148CD2A78733AAC7DA11689F9931464CB21AC874F0DB839CDCC2B3A5441BDF05D6040900237AEEDB93B0E3C683D36AFF7E86E4EE4B0163886DC3409E041A82FCC1DE7E02A3FF0C6FECC25BD4215C0F9177AC98EDFD7037397453F06813F9419B5910ADC3C03053B510EA1179970392562CD3007156B903D48120F3F257BBEC02FB8961D2533AF38B88625DCC894425F301C00352224F172C1C1668F879212FBB433C3B7377B25CE731A253E47366177C9F32955F78B43B3E853D5355BBF75BEB5C79D0ED8133EFC1FFB627CE9149D404C3D51C8C1371522E81675156C8BB18989288C70CEB371D2E8C21B146D945870895A605CA1677D02A97C408471D95A981102C66B56F113110F3503C589C9030367A6B5AFF295971121955AB141213362CB6262FB82CE8F5B05876215ED235281F06BE3476B788B8ECF4BCBEAA83828D2A6191A5C50A2A06D4B7B21940D936119401C010902223620A144DA263D56749516A12C0059D4572CFCF7CF7032BB462C06A742818B69575054B4AE6007FC7C8B6043AE42E7194FE96E0AD808E536A0A2A03568C15A83F0252A2CAB6457B74E295EF7C80B5B52CF27A4C575C8A382475E3C3A97F4D615ABEB9A15504F8D40A01CC4BCC3C04D400839F1384F978224B5969168870B09BA2817EA52ED648F90C55E278B4A804231B551C52A513ED3B181430043C23B1DC498202C00AF074C35B97C69316BB013EB5E3B945255FA087166070BFABFE6C193169B2141A26D4FF07520BAC4B868A42D728FA6DC10BE895ECA230153367C2A460739F22B98B4239445A8BA448176076C9B5763AC19119858110F768E1BA9BBF6284D02DC3577C7BA65E770CDA63FA67BA10D931CC847743F07C15E259527C89301D54ADCF2B911791FE795131F719B0AEAAF5AD60DB8D194647871B447CBB8978EBF3C34702933F5E50E140CA54E4C9FB7FB5B54B331CE769E6795840C727443F43B48743F257947B1B8958620747FF395F7E93CEC083A66EC6AD7F715EDCA456F4357D9BB6D86957E2BE0CF09876365976CE41A98872C202EA65CAA55AE8AA6BE90BAC7151CCA55C293C76211522B77BC3106CCFB39F6575DD24A3FCE39349F232DC9D8CFA5606A9D668EBCBB63794A44EFC069C3581FF9062B3D4A961E975BFDDA4C2BB6312F603594225ECC617B8E47478DE5008FB210A42976A5974173E28F3AF5CB27772330C7211F249706825958CB73AA532C1604880041652A544901F79BED0A5EF49416730B49E5387C3F4881E225C3B9012A16F411F7C39E9940AE67471696935C4D25206DCB211D44CC2DBC4740F72EF00838D499210CB421FA188B4870A175B04438A153F15CA7C4D7A967B863D3C45C1D0A1C0A5892EA7BBCA3AA28158B2C88D8100FFC4BB9B5C8A09790ED63A9DD6019EDE00135F87F9F067D07BDF444009C5D3C7B8A23A02A7B3D5D2AE636BF", + "dk": "E72469CE05A047E54F03645161567BAE15C73BEB575E8B2BF902C35C0B3218148C232A0DB487C2C58A1929856B08962C6BA7B2C8D8C3A1CA78A311AC11BCC68D5200443358FDC002441511F54A7032099F872CAB8C80686BCC3AF6E67D93650D4E67989318B54D828A7C817598FAA0F9754295A2C4D9D598D010B495F645AB48B4D203238ADA1ED2278FAF2996AFE34D207A871819AC94AA2EC04B3B23FA8DFB1AB1691547E84B2146604251060069767F70748986502252C2ABC7B2968A73C098842E851C8FB3143BECB216F971750BA624E1C1BCF5B5AAB86A4CD3E236A7C846E090442A114C8F85C08D32A45A54BFB7A1C9A2722E11AC62D42A64FCCB20BBB81C63B0B8478B4F78963B99C00A9E502318E1C0C9085A37CB41F0AB7CC0C750E18B1332C453EBC559E52124296A7619F928CC33B5C26034E824A247A4771B848CF6D1128747553412625A609145EC7BD7CA9B0CCA4A790BA3B592A0DBBCBA14B77827B8B6A2B4AD0C728AAA15819A68C9A45271FF78B9C5289757E8923AAA6DF194B3141BCCC8615A59E9B385F8BB7EEABC8FBBA1F2D0620A1A5C27A424F8D279AB784854BA7255865417BAB16E0661046C70430AC2AFB99F7831A31FDCBDC8980C8896583004483139CE28663B5709AFF4DA87227BCF2FCB9AF75525C51A6413F91429251BE303BFC09C8B7099BAD575313E03547E03CB5C2059095875EE16874FE4A119E20339D6840DD8697841BBC135969C97414E8778436918AB542B68881D32F98BCD7567381A1AFBC59E34CAB8AD4046B4611DF85B5968516017CAA3882981F1BC3CB4C05F366BC13D620105170DB0929A2806CBB0A916661980B5C82DD513067FC4A2A6A26624253A91E9905761C55AF519397C8013021D1BF6C9955B0723806BDD208780229CA89674EEFB5C1FF392CBB86B5C76860FC3CD6AC965344C3A2BB39DA0A6918240A3C1D33F043374B12413D84184ACE042F657496F930CF8EAB1FDF99E65468286BB2909C00D78F27A21E5371BD54DA6B955F919356435B3E33048529CA7DDB911D7EB09A1D00C0B8AC057991E84DA0B54163F033689BC4990E5BB1AADE004FC8CBCB59C876AE496AAB2AEAA28943CB62AAB875736631C56D5B1D377C0ED9B020A025CAD73B59192B3A92B926A16A72B2310AEE3048220219EE41457DA165AF6968A43737F97BBCD087E4C668FEECBB0353931E7848200F69196C610D3F18C6AE10C843A0ED5D190E0B327978936C2EAC9BBEC4DA496C06C02BBD93361F56C6152AC81A90AA795902F77C2A2F2FC041C20AE1A337A2AA6B3863A4DA1F63692BC04B0A9253F089EFEA2CB0E6731CAE42DEEC4755E260353E191B35A9B4393BC6209BDF9935121740F0500AA1DB06E95720B1C2811FE7393AF080D750190B8E90B8790A3F586A8288BA6192CCC67AC3933346BDC28CE3E11472DE16BCA36B13B1713A806361309ADA58B895C089DE5E02E25C49A636938FC86966F6C1E5864ADA9B0357A943857AB1DA2719248D86E15C872B6452580E9CE40EA78241AB25DDA4E6217A0F8D6784103C3E2D8684EB6345567229C5007E0910092941F95AC05CF463CBED646C63756F1BC291276BFAFB72C2494AB21D0062EA8A6FEC013F9F13FBF299289140FA8A37ED90ACEFA8C68681667C1E518B009768588BAF787C6BCD3A53F378DE7E3549DDB40D6163537068B00C67498F9A6F04645B0C24EA1A05A33F17D18BA4CB13A0F37C998D5B241D9F6A18C0A38EA5099A7923AFD271501D18063873E820A1FBBE917BC3ABDADA978D3731CC22A78F943A903A84AFA5B89C6459264368317EB8A11972B3385783DB322004C1FA1C897795344F22C938D56446BC257A2F9B674F7C89F7A9D537060B710CAF92A5110116A4215CBB5C24748E5ADB3F8B8D26A5C301746CD1B43C569979EB3327A52C688C1AE2F55BD407AC63F370CE7404379D596DD0642CF701A1E2B3B45D4732B168B96E593B6D03E75B5C01AE35B63276CA6E7C5A2184C3CAB7973407964585106D1800FB31324C68DA514C158348CDAE80022ABCD7A3770CB2C1CD1859740689B6904886F797263B39ED2243C402325B76B58828C5C4C7C88D58941A4966A9B148647586BF0EB1AF282A715D1CD797AB689B24A27A820B113973C175BA9E7880FB7582106AB8D7A23A1392C385AA326706A91EC75C2527E5321A7A2692021D71C5EF271D4815102450F4E8B8271141CC9F5AF6876A77D8930FFD97D4BDB23C9150303C68E62A49D245ABF2DC807FF4173614768322602B592C016922CB32B75AF7380FF16B9DA75A6C03A101D396BB1D79ED61155CC173FA76320C5912ADAD946D68A7E4094A38465AEE94C51B7B254125B589D37694F34120E442872DAC112DC7C4453CB665A63800BBA5F9B2998CC72822348E90B9F3CFC0E09129AFA94A7A4592A41C46852F1BBF0F72EABA3693A54C4170B7F5E0AA5EAEB77345895B5AC36136206FA6612CFA394D946C83B51BCED2C119F0089E0095B1DFCA02D7261B14C14B4C9A4EA825389042373BC0B248B26CE3C8FA958C05A167FD1A294F870AE2D1269620A7B2E6CA62F162EA7A1C855A656A4F2412C783C805C763B35C383A0B1E389BD509A4C745473D8E9157CD77C94A13AA5EB96708A23A010558DF83BC121A79F3554CB3B5C22D6035ED5B6F07712CB3A6B70A775E9A7C4925188E508191EA189562274ADDA1EDB5856299285C70A525242AA7F599621734EF6172823BC2771A052B900705DC739ADD8167448BE38162F4AC75DB795497FC66BFCF53990877427F2154DE31588F5629022A8E73602DC8756D068C3FC238431D93C79A9B43B7AB8CDE39341FACE8B522DB140B037D85010347F6CE5B3898A964D52CCED985F6F2375117B38EC385EECE0013918A64627878537A4E034A41148CD2A78733AAC7DA11689F9931464CB21AC874F0DB839CDCC2B3A5441BDF05D6040900237AEEDB93B0E3C683D36AFF7E86E4EE4B0163886DC3409E041A82FCC1DE7E02A3FF0C6FECC25BD4215C0F9177AC98EDFD7037397453F06813F9419B5910ADC3C03053B510EA1179970392562CD3007156B903D48120F3F257BBEC02FB8961D2533AF38B88625DCC894425F301C00352224F172C1C1668F879212FBB433C3B7377B25CE731A253E47366177C9F32955F78B43B3E853D5355BBF75BEB5C79D0ED8133EFC1FFB627CE9149D404C3D51C8C1371522E81675156C8BB18989288C70CEB371D2E8C21B146D945870895A605CA1677D02A97C408471D95A981102C66B56F113110F3503C589C9030367A6B5AFF295971121955AB141213362CB6262FB82CE8F5B05876215ED235281F06BE3476B788B8ECF4BCBEAA83828D2A6191A5C50A2A06D4B7B21940D936119401C010902223620A144DA263D56749516A12C0059D4572CFCF7CF7032BB462C06A742818B69575054B4AE6007FC7C8B6043AE42E7194FE96E0AD808E536A0A2A03568C15A83F0252A2CAB6457B74E295EF7C80B5B52CF27A4C575C8A382475E3C3A97F4D615ABEB9A15504F8D40A01CC4BCC3C04D400839F1384F978224B5969168870B09BA2817EA52ED648F90C55E278B4A804231B551C52A513ED3B181430043C23B1DC498202C00AF074C35B97C69316BB013EB5E3B945255FA087166070BFABFE6C193169B2141A26D4FF07520BAC4B868A42D728FA6DC10BE895ECA230153367C2A460739F22B98B4239445A8BA448176076C9B5763AC19119858110F768E1BA9BBF6284D02DC3577C7BA65E770CDA63FA67BA10D931CC847743F07C15E259527C89301D54ADCF2B911791FE795131F719B0AEAAF5AD60DB8D194647871B447CBB8978EBF3C34702933F5E50E140CA54E4C9FB7FB5B54B331CE769E6795840C727443F43B48743F257947B1B8958620747FF395F7E93CEC083A66EC6AD7F715EDCA456F4357D9BB6D86957E2BE0CF09876365976CE41A98872C202EA65CAA55AE8AA6BE90BAC7151CCA55C293C76211522B77BC3106CCFB39F6575DD24A3FCE39349F232DC9D8CFA5606A9D668EBCBB63794A44EFC069C3581FF9062B3D4A961E975BFDDA4C2BB6312F603594225ECC617B8E47478DE5008FB210A42976A5974173E28F3AF5CB27772330C7211F249706825958CB73AA532C1604880041652A544901F79BED0A5EF49416730B49E5387C3F4881E225C3B9012A16F411F7C39E9940AE67471696935C4D25206DCB211D44CC2DBC4740F72EF00838D499210CB421FA188B4870A175B04438A153F15CA7C4D7A967B863D3C45C1D0A1C0A5892EA7BBCA3AA28158B2C88D8100FFC4BB9B5C8A09790ED63A9DD6019EDE00135F87F9F067D07BDF444009C5D3C7B8A23A02A7B3D5D2AE636BF7388C553959666BDF23CB10CDA4C37F9D9CAB1710A7A8202A7FE1BB4376CC059608E79165F35C41825643F768CE1E51BB9B60ECACA0E6BAF987F7FC7A7D1B371" + }, + { + "tcId": 64, + "ek": "6D7802ACD9196207C7ED127D8F58090A539E0EB36B773097B9E6950A19A408612DE4197C972561C424B1335720DF5A028F615CCE4704034657FD42C402014EAA332F8413B30F52057EA54099C0743AECBD04261689F12FD1DA632D896F442ABC21A41D9A08CB08C3840301547AC91D5D680E8DBA581F80C57CD7CB55FB0A0118CD33A7AA18C43E286B047D972333107D0FB56F4E9C4DE2FC811539A10EBA39EA555EE07966623124A38AB6678698278188064177898AAF045C6184247456A623C4D309EDE553E1795CE7D08DC8818FF7D760E31BCDCC9316FE96C519962B96CB98B60BBB8530A586F810DAB6752E086FF6574D89821C26A32DD4B0920B012DCA8CBAC87B1676CCB36EC4CB7FC46D3D336E403472C1F383A3C975A5F9C17061282AE351BA631F18A5569D7058E6222D0997C2D7868034F98BB1E416E58B8DF5981ADC3559AB31391847372DD8C103281966655F00C4C86A7A9AD5D494088C07ECF65EDF5C8ECAC128713841C1E5075825B85CC65A68144B6F661DA6B29D140B169085290B164E7581810282A0AC5A823830605B6474A8C75900AB911E7C50590AAF0CC6963CCB664019046809820AD3204A6576D9A550AE74247CB02E33A4AA64824602CB5687136DA8590020317A1ED36474870FD89CACC8502ED5F47795780C023941123A2D0D3658853B13C612115443CEBD328AC1C405254A63FD3C0149D939EBF3226D5794FE638F80060369E6900AD2307376C148F91330EB2CBC9CB389E73DA8C257D34352D5A39E2D8C6B5EA9446CA9B30B590D8B158859C588A0EBC060003BF9729B5CCB4734BA92F57CBEB2E6C467B6B78C276FA7D5A1AEE99A0DECC1C0750C98796844B60AC9B20A20A092D2812760872EE66A89DC2A2E1F267B75AC6C0F949BAB471305658224C2A4FCA28FCC2CC044092F50A07D6901870780816BA7C9CC2B1A37DA12D192424CEB3CD657AAFA082ED7D902DED08F2C5CB61011ACDBC44D7BEA628DA085F46431DD53C4F2A9C46BA470A897B45AD0AA3D822C9ABC5E932CAF9005C8EA56589E909F83D13A5057280FE005BD165DC30689EFC61987458C10847ED618819219BBC444C176D8A28CCB210A6B39F606413835733F5BC0E1AAC58A5A8EEB29772BE922378289A30CC95497B1B2DC68B103C9E7278EB98A3ABF94BB0EF5399CD12531078C9E7636F3D1C448018A350CAD3EAAB61B18C59D564C5C5AB0DB7B549BEB5C58371CB1558FBCCC9EE1427ABF394637489245E5367A3B5FB8769B3142A20E4551053629E82630B8842B1FFA7D8CD4979FE16B443B78DCF7BDCEE5CCFE8ABC3F46155305554D23509E64B6ED8C2F6AF76723CAB1069CACF1E3728FF9563D865207EA3BFC70ACC4D93355F73E4A950E206A591CEB8C0718C0D1D4A6C52B17C25144FD272B195A3F4AF5436FF90FA47C6082B9B6AF443D943B4CE2FB095388859F51B14914114CAB080EAA5DB6B60265A708A5C625ECD65EFF642F5F437EE49BB364D6B0759533F4A3CFCE256CEE13378AD1A18005055916A464846E6D7235BA6B4118115E713716E7DB504DD536C329683A683F4C46CD9A50C8DEA2628FA1511F61332262654060758928B84B0A5F87568D4C57043F0A6300511556E08C4D09CED0A801C2AA388C5A38BFB868BA174232D05C7573410B35164C859AE6D114F63ABA91E808EC8A6C72B5CC3F0B96FB37853445CD1AB71F3C174B6B00627AD288D4A33E3B98CCD6CB9B2A67413125CDFCC9BAB8660D91141F2008824635A370373A5D722D9FC0825285055C2829D218351B894F8B54124F485E864CC52B843F7939B86C539169C2527EE388A60759D5197D6DE5508D45225AA57747138ED480AD3AC9223E1C61AF56A4A0A38F814711CB87319586744811410385C34E5B0CA0536303983976E8CFC9F72C519CAC84C415DEB45C4720A6469A91BE25B94AA43DB0D2B4E943B4AEA99685C7229BA6AEE2AC2E53E95E758A3F56565A75136EC3C8ADD1609F48596667D6CE6C12B9BF67C66EE9507DF71CC48ABA28238B7562141DBCC8E2412D3837276CE456BC406D25022932B9A3E8D720072684AE2A9B311AB51D093774265849655569423D3311096A295B2C9A61BD3831B74A3F74777AF03369A8312F0AD24F8AA4C734628F8D01393049364387CF430D1D1E8780ED3D38B5BC9150349C79172314B1182B9067339E0684AF9DB8BB", + "dk": "E260B0B4FB5015A9B287E6832A1765DD2AB05B17660EB62BA158508C13AF9D77679E31178A78691E119E051A45260ACA04BACCECF0888273931769BB5AA05324467CA31CC58BE14AF6977897F25C1E31079E5CBBA518A5131A9673AC71F26C08BCE736D418CF64A8C0F90C25E0B594025C4C69C938ECCA47E0B834BFA70B47C52F461BCAF8478906518F6F3975FF458A9CC673261982A219B9F5B98203B20D28F352C7B206AE92BA91345DD60CA05A8682EA840A25F8BE1A23B3E183C72B481198AB9FC7B08BCA63C9AFF143B8593B1D265984762CF980679DA8923F6248D3917E5467AFC39203A2659458850EC924021A446843129DF656C31B2A54EF33133A12221B68CE532C9A5E0315E7314C1CF736206A9F42D16FF5009C83A2B4B389412357136E87C0ACF093A95985F3D611ED30CDC2F03AE076C77897102C96758AA79F5A4101A97A7A38F3594367405C6362A08BC45BCC092C150FCCB6B472F95302763F45E56733BA7775A81C8A9095E4A36F88950CA4B34DA48A4813E25C6188C6D07644DF997DFC6B934FDA58F618A5E1FBCBC12882ACC579F8832AE364BAD8FBC453617D24B455CC08A7BD001ED7033D7700B6215CB0EF5C6FCF5031E3BAA1C84A2F1FC881484A6C2351B4CB38A70786131BA251C184A8AB129CD1D0062B89893C47728F6426AED7C018105BC176317597BB963B11549B66C4820142D23A35848DD0652BB398AF20800A36C2BC8B511600926C57C610D351B172C2AB83C4170695867FC60285507EE5C731013B807E5906D12AA39C422E528BC382E027B984A49B2C5F93D50BDF116006C186ADEB29A4A55884452BA8AB8DF4B5397A18CBB81193C820508C9A939A12C3E5E636E583951FB30CA905B436943A38200809F65BB484B978029649E87278E0B620A1488481A187AC4B46378F12F1B4A74B9632B879F9C925F2F47B14BB54083532EAF4ADD4357CFE265607A4CB0D945766A10CC2DAC35CF05D48A5A295D5BCF8FB61FA199AA515634EBA4F493A47F2A72C77376D51A8578792044EAC8BD3325ED2ACAED8C9B4BD95BF4F27376737460B9C72D8469BBE6B1BA60961A1DA8CE5217A05B9CFFF721B44E6CD69E2C3A2F44C16998E903A177DF4791802AE63387EE0C6222A1759C0E27F0B860DC51A1DCC9C341B7750C4A394D6679B937044E5900269F2C0A097386D39037A161052095EA8371F9824C31F888849B8328F275140163316A46B81A71D771461C1E95A96CAC28ACA09B7041457EBB8034256109A3EBDD48198F69CB84277F62B7A80168AA078C3CB4C77679A7A8AD890F130057D15C71C7A080C59B583E1CE625506188C6D4A0620EFD40B2B359AD3948BC6D178D5425BEB9572FEB88BC5D9B0D8CA61356B69EB19B28EA10549A91CA3EC3AB584B06643C49E4C47E9678387DB57EBD97D94978204A37E7EF85C3704785700127CBA7FB9B19384F4C1544082CE4728E758C0F44027C904121029AA5C6099D5FC91AAD543EE42CE7C322E6FFC297B0B440BD55648E788BC1902D6B887F15A84249C6A4D7C4A78D55AC058570C72BADB28892F4185AF1C43ACEB5A6DA68251624B8C34CB116666B5CBC87B0040E8855B2D8555F457A42FB9A9AFC66633B226C3F52BE8F5920BC75E8CE1A1D504CD2E76CA77620F8D52A6F20C9DD32765851039E96B21AA7458BD00B1F50A0F46E60F03A191BE56251F4227346C34134A9A6AE16EAC9641FAF77CE7B9A5DAE08CD53300ABE17D584157A5FC00B25C68808580BB6A143DD402D092184380AD0B210C613701F4601701054B3F862E7BD6BCE5645B2E39A1D223CE13D2A18B5B024DE330A8C5B9DA324D94E480AF4512ACE6B87314CBD98B07BA984289D61869377F4111CFF1E54660010E83307DECA193605047F605A20C68BCA6EB8D68308C26617CA784B87054B665D94D55D685D873920F6A280449CC20F710B9676DD6FA68AB314691BC82865A8758B833D500C61E894842335192288EB3F280D3ABBE59512E99CA2062B59D6CA73BFC85237A94228519874F8821CC138772AB433F77B88646AE4FC20C045B7286538BB96ABD3E851AA6B928A446775FAC45091BA969E1095B5817B6D3661808455A0B4BF54798E918C272B48A21D675AC76881B541BDE950D44439B0ACA03CDC6362115536D7802ACD9196207C7ED127D8F58090A539E0EB36B773097B9E6950A19A408612DE4197C972561C424B1335720DF5A028F615CCE4704034657FD42C402014EAA332F8413B30F52057EA54099C0743AECBD04261689F12FD1DA632D896F442ABC21A41D9A08CB08C3840301547AC91D5D680E8DBA581F80C57CD7CB55FB0A0118CD33A7AA18C43E286B047D972333107D0FB56F4E9C4DE2FC811539A10EBA39EA555EE07966623124A38AB6678698278188064177898AAF045C6184247456A623C4D309EDE553E1795CE7D08DC8818FF7D760E31BCDCC9316FE96C519962B96CB98B60BBB8530A586F810DAB6752E086FF6574D89821C26A32DD4B0920B012DCA8CBAC87B1676CCB36EC4CB7FC46D3D336E403472C1F383A3C975A5F9C17061282AE351BA631F18A5569D7058E6222D0997C2D7868034F98BB1E416E58B8DF5981ADC3559AB31391847372DD8C103281966655F00C4C86A7A9AD5D494088C07ECF65EDF5C8ECAC128713841C1E5075825B85CC65A68144B6F661DA6B29D140B169085290B164E7581810282A0AC5A823830605B6474A8C75900AB911E7C50590AAF0CC6963CCB664019046809820AD3204A6576D9A550AE74247CB02E33A4AA64824602CB5687136DA8590020317A1ED36474870FD89CACC8502ED5F47795780C023941123A2D0D3658853B13C612115443CEBD328AC1C405254A63FD3C0149D939EBF3226D5794FE638F80060369E6900AD2307376C148F91330EB2CBC9CB389E73DA8C257D34352D5A39E2D8C6B5EA9446CA9B30B590D8B158859C588A0EBC060003BF9729B5CCB4734BA92F57CBEB2E6C467B6B78C276FA7D5A1AEE99A0DECC1C0750C98796844B60AC9B20A20A092D2812760872EE66A89DC2A2E1F267B75AC6C0F949BAB471305658224C2A4FCA28FCC2CC044092F50A07D6901870780816BA7C9CC2B1A37DA12D192424CEB3CD657AAFA082ED7D902DED08F2C5CB61011ACDBC44D7BEA628DA085F46431DD53C4F2A9C46BA470A897B45AD0AA3D822C9ABC5E932CAF9005C8EA56589E909F83D13A5057280FE005BD165DC30689EFC61987458C10847ED618819219BBC444C176D8A28CCB210A6B39F606413835733F5BC0E1AAC58A5A8EEB29772BE922378289A30CC95497B1B2DC68B103C9E7278EB98A3ABF94BB0EF5399CD12531078C9E7636F3D1C448018A350CAD3EAAB61B18C59D564C5C5AB0DB7B549BEB5C58371CB1558FBCCC9EE1427ABF394637489245E5367A3B5FB8769B3142A20E4551053629E82630B8842B1FFA7D8CD4979FE16B443B78DCF7BDCEE5CCFE8ABC3F46155305554D23509E64B6ED8C2F6AF76723CAB1069CACF1E3728FF9563D865207EA3BFC70ACC4D93355F73E4A950E206A591CEB8C0718C0D1D4A6C52B17C25144FD272B195A3F4AF5436FF90FA47C6082B9B6AF443D943B4CE2FB095388859F51B14914114CAB080EAA5DB6B60265A708A5C625ECD65EFF642F5F437EE49BB364D6B0759533F4A3CFCE256CEE13378AD1A18005055916A464846E6D7235BA6B4118115E713716E7DB504DD536C329683A683F4C46CD9A50C8DEA2628FA1511F61332262654060758928B84B0A5F87568D4C57043F0A6300511556E08C4D09CED0A801C2AA388C5A38BFB868BA174232D05C7573410B35164C859AE6D114F63ABA91E808EC8A6C72B5CC3F0B96FB37853445CD1AB71F3C174B6B00627AD288D4A33E3B98CCD6CB9B2A67413125CDFCC9BAB8660D91141F2008824635A370373A5D722D9FC0825285055C2829D218351B894F8B54124F485E864CC52B843F7939B86C539169C2527EE388A60759D5197D6DE5508D45225AA57747138ED480AD3AC9223E1C61AF56A4A0A38F814711CB87319586744811410385C34E5B0CA0536303983976E8CFC9F72C519CAC84C415DEB45C4720A6469A91BE25B94AA43DB0D2B4E943B4AEA99685C7229BA6AEE2AC2E53E95E758A3F56565A75136EC3C8ADD1609F48596667D6CE6C12B9BF67C66EE9507DF71CC48ABA28238B7562141DBCC8E2412D3837276CE456BC406D25022932B9A3E8D720072684AE2A9B311AB51D093774265849655569423D3311096A295B2C9A61BD3831B74A3F74777AF03369A8312F0AD24F8AA4C734628F8D01393049364387CF430D1D1E8780ED3D38B5BC9150349C79172314B1182B9067339E0684AF9DB8BBE2A366F8F21CB4F5CE244C187196319435F289F7FEA610B18591F002B980EB723F8803D5BE3F59E69B8221E7CB8C9D15828B96B5B8CBB9D2F7544D6AA0833C7B" + }, + { + "tcId": 65, + "ek": "6D84CFE24862489333FD461150B9A0DFC74CFB1B7D07583B284878EC68286EB3724AEB511BE25010F4CEA138B09A095D8F792D4FE118F14702E4DA3D54E026C74194413347299880A692AB63510BB3D7581BA30BD719852318A66C22031C834FDD115628FB4C5BB0B126684E04AC2C61C6312D31715722454CE4508053151E0A1ED4C3203E3835EA84751194B1267A785A239F41CA0237FB815AE572950B9E8E037A22667A2315C39F5274A63200E2E341A47C2206AC657E34132FC6A39C1C1EED9B5FE5878763592BEB0958F03860192C74FF202FEC83A2CBFA83B1F5900D32602BE0AF0718988BE4A3408A188E1C8835E408117B3A9459786AC09890885C8C6C3C3099A9CE2C494D00958042BE2A829EEC055ECB6462DC52B7647928410887BA5220DDA72CD58539F19314FD088AD570572E052043DC567F1A7129918D8E9076D3995A25F69B72BB3E73645D64C143B5695560C281009B0C0C008523B5741144246FBB395C3207D234A5E4F730E37730F521125CA7326E82B3EE13A16592CCFB53C5E9348813318E35D15C63CC12B71C70CB9300FBE191C851A1ACA988C9F409FE306ADAE5BC0B10640AFB88EF0C9E08429B2D268CC1036AF681B4A8635F53F09438B812D7C5AD4B1210B4E8879F106A1F3C9503910582922BD71B4281EB94E4E952DBE8107DF16ADD634BD42465BFD68CF9492BD0A3171481C8BC88768BF1A8612B7C6E9C9BF9BC61DAF04BED90165E85B991494A3C2191C02566ADB705A604461A7855D5C0AB58623458467AB736C347B84EAD1408EE887B8152B7FAAB07F5C2B9333580430449A11B142EC5B91C720DE5AA7CA11B14609AC69795407E8B3E0FC41427C3C4D45380EB720506CBC826A2C0D60759A6A843F0C35EA8BA85CBD1C2E386B36985905D157A77473BAC6A5BE66266E780C7B3675F58010239B756121377DD973D6CE186B8A286F3B27071FC2E591452428C638C69850E674E83BBA410491EB9E270F954618D0B0F84C95215F49CE62636FAAC43BB65A18405C035A3AB0D925F8226CB18C9636F3C444B152BFF2C97C9AC4FF003985171A7492B2A9E1093AC270D3834A6C8D98B8CB1B9EB43B05A7B99CAD36CB9606E2179BA43D79A85ACBED99A919F773EEC7C64287290FB827312E8BAE07096B238A0A331839DE1240E93266AFA153D8C94F40A12A700837CE9B1E3844CEB4036508B28FE11B7F9969DF885523C2A576E53C799FC9346005C83120E2885902AFA50023007B3C4985C942A82F83AB8599C67F2A09C3A3CE8D84A4A7B31D07968719CBC9A1B63E0DCA517D8624A15457927795CE7B55F22A5C09434BC10ABC271270F38BA7A7B7345C41DC645B556248408559417B1C224D902D16AA8725609EF513251E59344154412111A2BE5CDD7B0483D4CA80932BB38BBAEA27499598B8B7257A604BB19C7C61302976CF159CFF4C61C3DD3B147766A0052B8683603CD31CCA0BB17F9768105B860D737145C65512BC60412EA9328707FC56C7F8CD94B39F7BEAEF3B319D8B619F0ABC19804C189B5DBB4A7B3D97EACEA8596CA8058C40E1EE870D964BCDAA5B83F2240D54425E96C493D13C3D4BC9155F4C899AA7A232C4D499AC7AEE64226B29F9C9219418B4DAA86CA07BB7815677EB15A4D88FB1C59E67068896F0799CB9DBB30D682AA03322CE0033D38007CD922786453AFC2C9B7426A21BCF55B4EEA4EE2E114D9E29D66DB6DC0D415DAA98C984B04F8D377119A8FE23B3E1571AFEBF9A822AB68E5668F4C399C8EB06F10061A194866C01153F945C34737BD09E58FB6D8A11EA23B63795EC2E29F56F921F53114C109713882209060A0B629CAD4D7437BDB8C0DA2CACE438CF9904349494F6966B49BE15AAD6285703529BCC68030320F31B7A40207A167EA9867E293C89118DCB46B084494DCAB24B3CA75D82865B5A7101ACA8A1F92866DEA8EE5F197F4C7203BCBC4D6B55E0581C895E435E77B1586EB2ABC95C4E9E49FD07BA9FD71BCF0219D4C57268752939AB19C8064384C9A9E17230CC0B7A1711C53257C2919878CE6D422EE14C02AA323A575AF805BAB2B51C7B6613F63587481279BB0167EF9FC451BF041E70B548A3A46BFB96D9D7BA994C1C3317924CD68A59ACB724FD68FE8B9A11C59AF4DAB90B0037EDD4A14EC2276126BA1B89063F4FDFEF09AD1E768B9B60D03C1443C7B5DD1EF3F9EC285", + "dk": "A9C14F4FB84EDEB96CBD007DD3865CBC64528BD04EEDEA6D3CF67997B5C5ECDBB0BF18B37B629C2A666D6F4241A6C85509C43664734DB9ABC160EC11A7FA5562EA7CAEE25E6249B53BC4687334AEEDF3CEFC4304C7F4B17738BC5B5082D793C96F44149013BCF8BC025397555076742C6947C425158E66B8DB278EB0B75CE2A33A4F405DE5417B250CBFFF8240AFEAAD53D7ABECD205F5267834C10CF509A7C6F35CF59CC70FE7AD84DBAE9B46019A431B0C306D4CEBB581072F67D80D9C304FE1B9C0E8B49C86F440F5EA2DCD934DB618662888C9CCD024884731E655B9B3127ACDFB692EE891C6942C54028E2BB31A82A18E27F938A85261942B7CC53586296B302064B792E7134601402429AAF8A896434808D5821F82A3640B2215EFA9BD840944E887AD54F171A99931352657018C165F2A85191290DC43A18EF84843059CC542740CB174ADE2A81F727EBEF9BABB91A446B7B0C491B232B65BB2C87452A58EB225486E174BD091CEC7045EA8E9A5C7C26F23529D355C366542BB6867930291C91A57212F271EAD1259F40162296622531A9D6FF61A38A13A5AC145C23774D0109A727B2B2666A473A33D90E22E94BA384FF038728BC6AACAAEEDA24911644D8B6B2793CA65D2622EC4C76AA2C89289027BE90A729858B85EFA8FCD0B06C32B1CAE77651C438E7BB9904BE29E70B1729D610BAC51CDC8070F53824DC3F1BAD1D9CDB006AECE7659A9C07B8FB21A99E5009A49CFEFC3C5B0284F0E6CA3BE00370550029B0CA2F95568839359AE208490151411989B11C554DCB79718F7A4A7416DF88B6C16A410A3913C54569A9DC5C8E79B8972724B4FC370C7DC13727306B8E96CEDF2B7A6C0C19EA7659D7858A3BCC92317500599BC073791700559599C91EBC8B0EB6484047709C5B28FFE0A2113686E5BDCB46CD751A501AEEB2BB1B0B41A2133AA7FE47806B738EE2B07C2C432616BA297A7C9C68711FBB491E76734C1B195127110B1C929BA60B86324A3A42669B3DC6BAB4BC84D68723C962951707362513ACA182F1F8408D3140846015715057A1FD4626E976989710E9B51A230FC00ADC92AF7392914381D430ACEEE12A84F90667F026C3F3437411BA7629491B6F0BE0827ACF88CBFD0A8715861CEB74275E26277A4E7C5AB444860CB20879B250359A92B749578D5751FFB5E8F6411958164F303287A9031C2A5471AE7C76C23610028443EF23A30BC4B42E925C909127370C30C722E35F5C2068343F39B101183C2C2A03C10A92EEF5377C9D274EA567760915FC5D54FB798A4010701AED25915A9366DF6CC22C68FBB66587310A6FFDCA52AAAAC7F13A5E76A93D4503C089668319168463C7EEDDB8F760B8C98F583E9E00FC1643B2FF1A92EF64DCD72C5E6FC6A3357C4C9386B8282946AB07787E8A054A88ECEB77F183A4E40EA23C947CDB35BA3C06296B6348D78631EC7148A19AB207E905F8BC895372A96882C9ADC53BA0E86BEE6E4476658735B1B6A295A392D036343312CE4294B24D00679596EC0892C6FC4914A3458E0C5B7EF04A217F3208755BDB3ACA143B0043CE3A220E2A36790C45CA9533EBA37BC886BE93704DC7C11C3133678964E8575C76B9AAC24B499B7B157F5B152EFE51FFC44CD519C48231688EB47B059A146EC094D06370551CC34CAF51903ACAA18CC838F054374A1BB0D588D332AAE10255A1D581BE6963D61E57AA6C3C1EA25428E043B969800FD5A23077076FA0C5F44143C21D33E2823C7F8F621D436817945C28DF170E240884B0881F0043BBAE8393EE0C90E80C8B050B06F4607DD8968FA516C89A62C02B22AE0FBB97D29AB46EA301170946F3B354A5006EB60B9E594609E3C1D596511219735A66BAD7BF72081778EA0B380EF4C4BF8FA601C87BD281146EC153C3387A1A1627B78C6030D6B4A85063BAF990ABEB0A28B6BCCEDF0741758B2E8BCB41BF37D5FB99DF28384BA133EC16676E5034F2D3060AADC3A6426188DE93AF8D298C642B496031FC72848D804426F516A15C9C3E3B89C0B61492A638F62037E2532AD1314C7B48C209B26763BDAC773618A6C1676E68BCEC0F964968085B2C5A9BB183EDAC3B6039A1B572C65F7F69BB02899C5A65DE20175C17748BBD83276D098B19958A1918B01259E11E8661F65356D84CFE24862489333FD461150B9A0DFC74CFB1B7D07583B284878EC68286EB3724AEB511BE25010F4CEA138B09A095D8F792D4FE118F14702E4DA3D54E026C74194413347299880A692AB63510BB3D7581BA30BD719852318A66C22031C834FDD115628FB4C5BB0B126684E04AC2C61C6312D31715722454CE4508053151E0A1ED4C3203E3835EA84751194B1267A785A239F41CA0237FB815AE572950B9E8E037A22667A2315C39F5274A63200E2E341A47C2206AC657E34132FC6A39C1C1EED9B5FE5878763592BEB0958F03860192C74FF202FEC83A2CBFA83B1F5900D32602BE0AF0718988BE4A3408A188E1C8835E408117B3A9459786AC09890885C8C6C3C3099A9CE2C494D00958042BE2A829EEC055ECB6462DC52B7647928410887BA5220DDA72CD58539F19314FD088AD570572E052043DC567F1A7129918D8E9076D3995A25F69B72BB3E73645D64C143B5695560C281009B0C0C008523B5741144246FBB395C3207D234A5E4F730E37730F521125CA7326E82B3EE13A16592CCFB53C5E9348813318E35D15C63CC12B71C70CB9300FBE191C851A1ACA988C9F409FE306ADAE5BC0B10640AFB88EF0C9E08429B2D268CC1036AF681B4A8635F53F09438B812D7C5AD4B1210B4E8879F106A1F3C9503910582922BD71B4281EB94E4E952DBE8107DF16ADD634BD42465BFD68CF9492BD0A3171481C8BC88768BF1A8612B7C6E9C9BF9BC61DAF04BED90165E85B991494A3C2191C02566ADB705A604461A7855D5C0AB58623458467AB736C347B84EAD1408EE887B8152B7FAAB07F5C2B9333580430449A11B142EC5B91C720DE5AA7CA11B14609AC69795407E8B3E0FC41427C3C4D45380EB720506CBC826A2C0D60759A6A843F0C35EA8BA85CBD1C2E386B36985905D157A77473BAC6A5BE66266E780C7B3675F58010239B756121377DD973D6CE186B8A286F3B27071FC2E591452428C638C69850E674E83BBA410491EB9E270F954618D0B0F84C95215F49CE62636FAAC43BB65A18405C035A3AB0D925F8226CB18C9636F3C444B152BFF2C97C9AC4FF003985171A7492B2A9E1093AC270D3834A6C8D98B8CB1B9EB43B05A7B99CAD36CB9606E2179BA43D79A85ACBED99A919F773EEC7C64287290FB827312E8BAE07096B238A0A331839DE1240E93266AFA153D8C94F40A12A700837CE9B1E3844CEB4036508B28FE11B7F9969DF885523C2A576E53C799FC9346005C83120E2885902AFA50023007B3C4985C942A82F83AB8599C67F2A09C3A3CE8D84A4A7B31D07968719CBC9A1B63E0DCA517D8624A15457927795CE7B55F22A5C09434BC10ABC271270F38BA7A7B7345C41DC645B556248408559417B1C224D902D16AA8725609EF513251E59344154412111A2BE5CDD7B0483D4CA80932BB38BBAEA27499598B8B7257A604BB19C7C61302976CF159CFF4C61C3DD3B147766A0052B8683603CD31CCA0BB17F9768105B860D737145C65512BC60412EA9328707FC56C7F8CD94B39F7BEAEF3B319D8B619F0ABC19804C189B5DBB4A7B3D97EACEA8596CA8058C40E1EE870D964BCDAA5B83F2240D54425E96C493D13C3D4BC9155F4C899AA7A232C4D499AC7AEE64226B29F9C9219418B4DAA86CA07BB7815677EB15A4D88FB1C59E67068896F0799CB9DBB30D682AA03322CE0033D38007CD922786453AFC2C9B7426A21BCF55B4EEA4EE2E114D9E29D66DB6DC0D415DAA98C984B04F8D377119A8FE23B3E1571AFEBF9A822AB68E5668F4C399C8EB06F10061A194866C01153F945C34737BD09E58FB6D8A11EA23B63795EC2E29F56F921F53114C109713882209060A0B629CAD4D7437BDB8C0DA2CACE438CF9904349494F6966B49BE15AAD6285703529BCC68030320F31B7A40207A167EA9867E293C89118DCB46B084494DCAB24B3CA75D82865B5A7101ACA8A1F92866DEA8EE5F197F4C7203BCBC4D6B55E0581C895E435E77B1586EB2ABC95C4E9E49FD07BA9FD71BCF0219D4C57268752939AB19C8064384C9A9E17230CC0B7A1711C53257C2919878CE6D422EE14C02AA323A575AF805BAB2B51C7B6613F63587481279BB0167EF9FC451BF041E70B548A3A46BFB96D9D7BA994C1C3317924CD68A59ACB724FD68FE8B9A11C59AF4DAB90B0037EDD4A14EC2276126BA1B89063F4FDFEF09AD1E768B9B60D03C1443C7B5DD1EF3F9EC2850DFEAF9EB1EA5E8882719918CABE6AC0C15FE3587E3E7BE53392EDEC5F7D95F00E2832E12E9642432793ECC17DA18D61323647CC6F5E1AB65751185AFC00DFC9" + }, + { + "tcId": 66, + "ek": "11E3B359E8375B4CC9ABF9C917944AEB68223C4935B4991F242526CCA427FFD13E8FB811644B87394B717D9A6E8EF5445739AFE14704FE601081877BC0FB42E50A0613FA846FA8CC47377D73B2B42D68B083991CEED9B493A86FB9A81FF53330DDC195DABA18B35B74077121166C8C2F8467ED0121DF5246F950A3BB25C72A63CBC27C0A6191CCA56A342CB2A8DC8988D82B708560B6175A75904A5FD6406B7D5C60B533615423A4BB852BDE303D4413092595682782BC1814B15C286EA01315E0CCB9BE849F73A5B8AD6297D32588995AC13FDBBC441ABA9DC553E0BC14D019BA797541CE622B159441870C448B37520B39AF10401E889920DE27CF6E743A6B473373332ADFF47B2EA6319E875F70E95888558DD40B5803D05F4A356C23D411C2046CFDBB8DBF9330732CA2A731BE20A5BFD2370E91580F8D11BDFD6223FC244BE80319A8F42924EC78BF0896080768B3C700BEE28BA44C712FA971D5ECA19D78BB2FA80E0F118171A48B2267A9C1D72FFB18AC4BB12EB7A107448B8B7C4C4400AB493C4CC6B299CF408AC72A49633ACA312176BA0604C634654C4311C3368B333A055DD0B2385FCA3025A105CA29A39E3087B0BB388E2B8F08B7B34F1B6332EA0B33794F8E7B00A85518AE199AA8F5AD04EB8A58714778BBBD386899DD17714FA80CA7E75B53109F4178A46910B765724D48F8AB3BCA16D3FC2A858C103941C68B14B0041278A0940ADF085EC5270FC1560651DBA55EF68B3746A6B194C00AFC4AA27BC1FEABC17955A9F69591827493F5504C7AFBAA20655DDFEB5855151B6981AB17587AAC833FD0ACC21A9C7204C32DAA1782317404911493761921C425BC2EA2C299E8AA269B1D0E202342986A77F9B1F7553551482A8ECBC6130466721A9D41E14FCCA7C6DCA00728A85D66E607E1656F63C496AD1AA92B3608047CB432804A29C0A9313C27592C2031E0AE2073317F40BDC2EA46A4F2865CE688C6583F9100342335736C98545BC85F084ACD12633BF2308287F80CEA81896398399075B936320BB4966344B178F5D716EED101488B1F61067A25E8491649450AE54B6D4C4D3E35A69A0B5C8FCCBD5D26856716678D739654779B26F51D7C36AC5FE9453C242CE2A1C0BACB0DCB73A844F7C1E9AB0861322358D831DACAA9E704A50446A08C78B63990B1E49667698708C5C24733E40E9860706D2A2B2A6CCFBCA6419B2644C6027175B023D94B297FC14E1D72B193425D3A54A217B85ED4DC93B47AC523F029D3B3BCAEC6363BA359E2EA29E0A230A3F51134CA0086E476DDAA87C8E15660E307EC8C6B82BB79FA876F3A030C584071B37B52BC733698C862E3FAC0AD92AB14F9A60427A742C7A8A7029F86733B206C548CA6C896380C38505320E91DE10C64386B1AF3B63D8ED2BAAD6A2CECD9641F05B32DF00BD67893E4F7A5F770940F74983A335494459ED2D55855782AC16ACCDFB1B144C1ADE8B72E9ADC4AC4954800FC5F380695B6F415B8690554B5C887951AA52120B6CB6F36FB654861987194484354442DE78DB5170C661B7D25F857CDF73505DA7899A2C034367B7166626EFB4F8B9A95A3FB78C9EB53ACFB12F160A97C3B84BA667E6CCC3F2C163A26C89CE3663C764206D2F574C1D799DBE7B5F59BB427F28C44C63D35C937756C6C30B2A7620B8B75885C68FA73376C3F9F3A81A2C08F6EA165911A8BEDBAA7887078DA77B63C2C5B97308F0EAC89B3031528125BE3AA4BF1A9BB8AD98821714F0415570C847C62138A3F7575003671935B048BD00BF8B9AFC7E65EAE89157F0C0EC30C6F96C96ADD317B406606CD119B15E73B58C69FBCB32FF209256123A2CDD392B5E95E8E3266022C90AC56C738CA2CAC494DEA4AB38F9B62A3D11649A66657A572DE55BB6AD00FFE9000543912730011C8EC6C5E05CD030C407A933171790EAE5B4C05C10DB663392C836BADB81CE7B07F0E1399C8A7183DA18195D36D5D8923B6A1AA91A66520895A7AAB4A05970C1AE6B4BFF1A8482B71F88B8F7889B28C8A98180644FD743C5505C00B54561FAAA4611CB7CD57B82CA16BF879C03B092883A49388D91B65013F6589018F02694B198D280683EA394688D07ECC8A3EA60BCD9A0B7A6D7B84CE2C56DF35906D48BEE99008B89770F9A1AD2B050C7E598566924D4E3538B129403323AAB7CE0E33C845BF3CEAC1E57E352A000820170676", + "dk": "FBC8BBEB0CAB6E923C075A70685CB6D2D6420184817F0255EDD3B7FEC42AD5F05FAAE28733935C1864CFDA029C00D070CE2914DF57AAF9634B405772467762F7944740B30386A8B27C1342FAB32E9E1966C3593B6C1A887328094420C3016B00978411F826861D753317119757C71076F6753A48CF328941451CB89B8BB0D95B8B02A7B96995003A65C6346C01854C39CB3391AB14595AC2B00E590B8281437602721D5058E80C1B5F56C7A561593A50BC28506A47D00595F7C64D7B57D94593EDB62AB43C7B4E5060C41167DD7244261427CA66C0D82087AD21CCD8319DDFA1B316785176ABA09D24CC28226C4373B742056F83941BA018B348A04F2000BA779610DD050F52EC410897301F721913E63CF9E101AF7044CFF2C8F66B22E94A5806884B0D107A283AAF71BC8209652A06E99519546696D670650A760229001541660B83B46EC65FD2B59650C03B377A42DE61854BAC63418B5AE3A72FC0CCCB0420AF166193F1A867D0F4ACB1E77662C5CE4242330CA7924797470F779832E61532F33807620E0F008EAB5896D72625D68CA0632B1038E0C08717B26A34082C472B845CB45E74A4DA0C71A791611F42AC7EA18A282329E13287BF4CBD6E458DF502A1A5334FD835A79EE9BD297373682C8EF1A189050283F4F5C5B51256E6A8835C92895D4353D927157EEA5EEF8A034EEB092C56CD0DA22AAD93910D151361A0C70E27B3C92CAB8961172A2742F6F73DF8D1A3EFC8A70B3A50264AC3754700B03633D8F4901325A22C84979E48321F3209E035867D479EF4A8083C374028A166D755A197A04E3C220B80EA4E386B09BB0C3A01149698E19153A10A2B763D84B4B8FE71000C631A10759A644408C09788E36529F8EB46009A9B9D75B7B84452B2123781863A6499B39006B715B7B0DAAA7581FB2F447293D17613A6658299996FE13A871BF7206A61CB875A10C74192EA051F75D497FBA09C4E21AC90E8BEBE003470F8338BFC208E2537B4F83833399310186F63279C27669F93A61B7B59B01FB2110EDB0C85E83374B43071AB18B906910C779FE95B0B81B36A71BC7F19184A3954AAC1FA1059884FAE611DE4960A27D1C137D309FF09B47DD8CFCA825C7A28065588A69C8A94D94B0265395F448BB79F068AEC819511104E11037E10A37EA526047BAC750C1B046EB982DA3112E6E97746ACB492493747F5310D545A78563AB90C5E8D4AB991B17198B6C0D643C3BE91CDBA1A8F4515B3294C2145747828033B3D38C74DE69328C05F8FBB452C3942DF0C9CCB8B38C5D91CE7C549F9E63D111A30C9E86007F07D4D9530AB26CCF04BB70BA4012BE45B9B6B862F8C9415046892E23D8ABC58066C38424A3FA1E3561CD93A5B080684934C7443C139D69C749BCE1313ACF60198F6D0B5B0E7044C561E39FB6BC7C84DE850A2A7571BEC52068F7A7BB3A51A936B60F4B0B623D8A22CE2AEE2CA9C8248346D35B93427327C220943B44948D973D351ACDB3ABA562426F161246A2BC79C741E3C39597CE9320C7981654357AE75CC14A578F5539D39EB0CDBE01CE23C22F9D18ED2A59E62248D2C5B67BA467C0B57816EECB5FFD48303465DB08A30B4254554890EBEEC9ED1928D6A72C785A43CDE58C778820E4AB31B667B512749082685825D1874CDC75FF92B8C5BE9606AC1B49702830024448C722A9E18134AF81124A35F68DC89A6309988AB57B1FB52CA6A5B9894AED2F4C4BFE78F5E5186CE375CB8498B7C634DEEA0B6F805759AA688E9EB9F31681334550E774BC30F00C16F632ED8553D015091DAF1449608325DC0356CA05314AA84E06227202B2FDDE926F37591C254B3A5B52A16FC5C43CC08939702DEDC3516D91630262F7C259E5518445338B0A67788D54C87B541071C06386397C108FC2BCC527AD2059F8E7686504CA58160BC3586734642C7AA526ACB650EB49C59397C2B55A797F56066F2B98723E63A18797E129782CB1A7B53337E6880BCFB52570CDA786F2AB3847B46961CB15D978BE3D366DAACCBA3B915D349CA283B8AF0B2498F984D72F4BDC53822ED80BC3EC85EC9D2BCCCE67975A825125AB7C1854DDCF8B4E814BD6250CB5EB077152614C9707513EB1590B3BBBB380D3E408E280B6049420826729956638D13BBC1CFC6C3CABCC83D32B311E3B359E8375B4CC9ABF9C917944AEB68223C4935B4991F242526CCA427FFD13E8FB811644B87394B717D9A6E8EF5445739AFE14704FE601081877BC0FB42E50A0613FA846FA8CC47377D73B2B42D68B083991CEED9B493A86FB9A81FF53330DDC195DABA18B35B74077121166C8C2F8467ED0121DF5246F950A3BB25C72A63CBC27C0A6191CCA56A342CB2A8DC8988D82B708560B6175A75904A5FD6406B7D5C60B533615423A4BB852BDE303D4413092595682782BC1814B15C286EA01315E0CCB9BE849F73A5B8AD6297D32588995AC13FDBBC441ABA9DC553E0BC14D019BA797541CE622B159441870C448B37520B39AF10401E889920DE27CF6E743A6B473373332ADFF47B2EA6319E875F70E95888558DD40B5803D05F4A356C23D411C2046CFDBB8DBF9330732CA2A731BE20A5BFD2370E91580F8D11BDFD6223FC244BE80319A8F42924EC78BF0896080768B3C700BEE28BA44C712FA971D5ECA19D78BB2FA80E0F118171A48B2267A9C1D72FFB18AC4BB12EB7A107448B8B7C4C4400AB493C4CC6B299CF408AC72A49633ACA312176BA0604C634654C4311C3368B333A055DD0B2385FCA3025A105CA29A39E3087B0BB388E2B8F08B7B34F1B6332EA0B33794F8E7B00A85518AE199AA8F5AD04EB8A58714778BBBD386899DD17714FA80CA7E75B53109F4178A46910B765724D48F8AB3BCA16D3FC2A858C103941C68B14B0041278A0940ADF085EC5270FC1560651DBA55EF68B3746A6B194C00AFC4AA27BC1FEABC17955A9F69591827493F5504C7AFBAA20655DDFEB5855151B6981AB17587AAC833FD0ACC21A9C7204C32DAA1782317404911493761921C425BC2EA2C299E8AA269B1D0E202342986A77F9B1F7553551482A8ECBC6130466721A9D41E14FCCA7C6DCA00728A85D66E607E1656F63C496AD1AA92B3608047CB432804A29C0A9313C27592C2031E0AE2073317F40BDC2EA46A4F2865CE688C6583F9100342335736C98545BC85F084ACD12633BF2308287F80CEA81896398399075B936320BB4966344B178F5D716EED101488B1F61067A25E8491649450AE54B6D4C4D3E35A69A0B5C8FCCBD5D26856716678D739654779B26F51D7C36AC5FE9453C242CE2A1C0BACB0DCB73A844F7C1E9AB0861322358D831DACAA9E704A50446A08C78B63990B1E49667698708C5C24733E40E9860706D2A2B2A6CCFBCA6419B2644C6027175B023D94B297FC14E1D72B193425D3A54A217B85ED4DC93B47AC523F029D3B3BCAEC6363BA359E2EA29E0A230A3F51134CA0086E476DDAA87C8E15660E307EC8C6B82BB79FA876F3A030C584071B37B52BC733698C862E3FAC0AD92AB14F9A60427A742C7A8A7029F86733B206C548CA6C896380C38505320E91DE10C64386B1AF3B63D8ED2BAAD6A2CECD9641F05B32DF00BD67893E4F7A5F770940F74983A335494459ED2D55855782AC16ACCDFB1B144C1ADE8B72E9ADC4AC4954800FC5F380695B6F415B8690554B5C887951AA52120B6CB6F36FB654861987194484354442DE78DB5170C661B7D25F857CDF73505DA7899A2C034367B7166626EFB4F8B9A95A3FB78C9EB53ACFB12F160A97C3B84BA667E6CCC3F2C163A26C89CE3663C764206D2F574C1D799DBE7B5F59BB427F28C44C63D35C937756C6C30B2A7620B8B75885C68FA73376C3F9F3A81A2C08F6EA165911A8BEDBAA7887078DA77B63C2C5B97308F0EAC89B3031528125BE3AA4BF1A9BB8AD98821714F0415570C847C62138A3F7575003671935B048BD00BF8B9AFC7E65EAE89157F0C0EC30C6F96C96ADD317B406606CD119B15E73B58C69FBCB32FF209256123A2CDD392B5E95E8E3266022C90AC56C738CA2CAC494DEA4AB38F9B62A3D11649A66657A572DE55BB6AD00FFE9000543912730011C8EC6C5E05CD030C407A933171790EAE5B4C05C10DB663392C836BADB81CE7B07F0E1399C8A7183DA18195D36D5D8923B6A1AA91A66520895A7AAB4A05970C1AE6B4BFF1A8482B71F88B8F7889B28C8A98180644FD743C5505C00B54561FAAA4611CB7CD57B82CA16BF879C03B092883A49388D91B65013F6589018F02694B198D280683EA394688D07ECC8A3EA60BCD9A0B7A6D7B84CE2C56DF35906D48BEE99008B89770F9A1AD2B050C7E598566924D4E3538B129403323AAB7CE0E33C845BF3CEAC1E57E352A000820170676E8E03CC3DC394E2D3B2BD6FE15A037B508B2A3FB9D0F182F308DCB192B503FAF5BDABB79CDE5F2B6D819441EC7991BF4354739F8D17D452A9ADCEB2AD08DC3B0" + }, + { + "tcId": 67, + "ek": "089335177C7B0A0A7D2AEB990767CD85577CE08BADD554A7BC729909EA65F77C8DE7028CF0F87B3512AA94A5614CB38DCD9B80A117758E69B78197578D940A7AC47998549CB731A80BD33F651BA76D8C143FA2997D75013AA724F248653B86CD79B1BAB8F350E41460A1B3C4D43A4DC43388F9A4BC352C1EE84004F4EA6EAC6C6365DC9AE311B67EA15D10F881909B0DDB7B5F3F4B810C8C54EFA10FCEA02A9BB293CA306042147CF810B2E84619F8D671C8883A0660AA5F2A2EC3B75268D1488E0B6E1A95752C8B44EF16A610666F01B95B1A74BEC2A83E1AF27F4727ACE5A9878732075F2217C2095F65CA8B48F39911418DF0A7456949142FC1765790BC4C24A2FEF04C44F970E58888175A535645A0F6FA0C497A6D25E82137497705CA6830C654CE709B7CD0437ADA5622146F438CAD85C59FE8579FE885B1C42178AF1345FF9C76512668B8C53047E885ADEA20E7253F6ED46DB9A7CB38F8A0A6E777CE275EB0E23BC7585A49967436F397AE7A3ACD8BC8DA20B19BE6B7FDB996A313A47E6865E9F0752E28A9E0711C3EE549209B2B4768C0C89B06EE53715D75A8DDA238356516C3EC0F7D7689627A62ADA8732CA23A07610FF6592FFAB2A360EC6CCB342F243159AE1047722BC55EE177DF086F41112FBB21401B827F5DF0902FA7AD9C8463B9BC4C9F6B97A2B6B6B974A3EAD5CA118A797F9C7B9AE28630E3A68F92465E52003ADA886A4A3213201428458A42FB26DB5577E4321E80F7A26ADA27E027072AC27DB52822819AAA165078C4B86F4F90344F1414F7068A47E5814FF0BFE5251964AA0E07E813C0099AA0478F6A85663379CEC93C6834AC2E5E9BCEDBB2033CFC7D405B98BB520A2922B815F18F73336CC9916A44F1546F69BAFAD434F0667355F7CBA58088CA0A7E74479E4A2551277CAB3BD137B25B743C127825B577B8818C7BA53D55803E2D459800F76BE4F983DAFA3EB742BFEB061541397CA73860C5A70FC3C276EA39771B4313AE89547A3B3AE0CA0A20F72CF6D579FB7467C8357288748CB556BDAC5B8669955097B2553A35C81EF1C9ADA00F45FB56F541BB93C9B1DD8C745BF592D3C48CC0596BE2C447AD84B1037CC823040FE746384A715E562CBFD1C66ADCA0CE29410A4041A07A0250C578213C598E6C816645E71298FB6F6A8A15B2648FFFABC2ED26304237BD9FA10B370C4E25E98231C813302B85F273054EA2A73B8084950013F6619489A525B78B89359A8B88CA9A9774B89F6596538B30758CCA0D59CBE218B1E50B38A05C657AE64C9BE69EBCF4189AAC587DD1CF8DE67F4D4853EA0C498D0166FDEBA93E3634AF4AB9B04CC54B924C781667DFD9714BB31708D3CC11A81E677996ACF81001D243EB4BB28A50758B7CC3791609EF783C3F1A3B12B2C738B207A22935568578429740686697CC8045D380AC46D9540A531DE285111147491CE233CB7B0B6C1154A523A9E9792EC1024C90D3A1FDF70EC6D573E78413CAFA3EC400731A210E2653853E8350BE6C0AB1A12B13358B9C872C56D99884F39B1CD0AC5A9C3247743C47161874F01333879AAAC10E0CE17027F19EB2FAC213ACBD4F8473C84123537097FABC5F5F743E09E39527B97DDA0AA5B6DA8B128C0E1098C32883B4DF227FA4A7BF072397853754862B739A281714024A47794679BC8C0827B30A6B3309F71D8396A2DF1B84CAD72572E902B51BA03E040AF86630008600AAA7BF1AE87662C407324885048CA700C64478F99E2F85B0F3B142D9D13801D158AF27B355474EC8FCC3DBE66E5F71991CA312F6E81EC81AC74553288832B318598094F28CDB657A85A04602579A34F8C98BF954585216635CADF4478097F81ED1B3B98872B4B529BE96D87DE5B62948A16B9B1A8B81A3947233CFAB071822C807CC4A18CD4493317A890145539D06C06A974AF769CEF3FA848F5670EEBB547EB2B15ACB60F55149EF5B167333657F22250D70A43892AD5CBC97C43B2B6B049953D286447C11993728D4E533E92C612BC84ED18A1228827583072A378A06E8D102333C5817A9AF2D25A72B3A36884772A81388A391910EF2516ED09EB324C4CE379144D0BCDB226E18CC33C16598BC142E1952186F29B6C8D62134C9A76E88BDCE1890BE30CB8D534737D44CC2E27A7D1C21B9F4ACA129D41FF732E130215BDA8A69C524FFA12E40B5E788E2EBC36DCD0EEE20831D", + "dk": "CA0520D801CA8552CB9C5AC81E3571A4E06456306294E58E8E5B228D3B272F738E22FB4FC19352CF82C4A853A7540C9038813209659A7B496B845B637A519A89C90687CB4B46983C60C51F75505D78F16F1B3895767A391EEBC85CC46DD9105E7322A1EAA8B9BC7308E1821E1DA37EE9767142D7AE44DC9F5C563267E3936058072FEBACDE630766EAA6EBF7451120A20868A1288527337876AFE0732D77B51EA37994B3629DB3C0AEC13332525996DC77C8F0C0C5F9B772A96F1A8533409478757255BB501421AB4F2C3CABC1B64747BB8E6E99279BF37FF06C4137732FA27912C42714FB407A4CC8A629D575B847AC64B29350B83C720C0F5DB00A4471CFABA64BD5F15B18E39895E1293512C3BDE49A486541A1A1B2E16A2E5E59A4251C8307C8442834B95B2B645EF91D2F74AAAD8069F6AA5748EA47C8436E6AEBA08DE79DA9C5C71C94775B04BB55D5371B79579BA500A1B97E870C8A7317481ECC6BE6839E34798AD860A4A32C6135D8C8991AB713E106D850174EAC94834910E714134F0646470845EFE83BBB3976D5761B26595EB43374664C0696EB44B1A07ED0C93CE0EA607A838895F3B4508959CF705AB8CC4E5D443DE49229203696180C7BF28B80F3D8B6C802B64BB5640F20CA117CCA10619B4830CD9ADB729E806234009256269967B9655F60CB6865C9651B975F106915639A36993A706620FCAC4EBE123A5F773DE9A2A51DFB2995632F558964AD520F4F7608CC608695E8688A8260B97C2EF384BAEA628D5F515EB9F640257B69523A8B5258B4570866F684340003946C7A31F1A86D66275A9BD04A6D728C9D9939D6F81A996700BFE2BABB0C89124626BBD45BFAD00CC4B10656E380C287C95C2C18D7284F9B6420E58937646A5E2EA3BAB51C1EFE5413A87979DF92CB00324A23C646873AA25D1123F733B9F7F56A3360AE601753D37511A0EB1CD9636EEEB49848BBCDE02A38EDF7ABE11785B58CB7FA8317F66506E4CC576EF19CC2AB50D767600F78C1041C664835B5689ACC6AD78FBD612709B305B23ABB261AB546909C80093C18197161CA900F2841308C172CE8AEA136BA2A1B0E84693C82612C56D916A35A028F302D1D1A0235E62D90B573CA9C9C976492DB996FCF840A4D5AB09B3C94C375CFFB308379ACA5A6A3675135BD4AB5BCCE42CBF1615B8ADC6DF65ACA82394F45D4C13122C4877714A156BEB0267F72358C9E65A70517B959999C9138986F822DDA56409E874048865BDD01A4BB33A3308012EACB34C6759DE008990A429D6D602F3E439520574476204D1E233484D4087162AF440958F45CC893C7AFE3D97A5D10C271980FB1DA636E89A580D3191C160978B870CA135720024122456F087018CCF11FC3ECB09173C488D00BC882AC55FC797BF83CD08B62F1E721A85970361223FBC10040767B1D50BED51B0AC59B165A40B5E114BA222B82347661FDB05A43D4A8BE9A7A85FC35BBEB570C57BEAB210B5AE213ADD765CA551ACED9C461D1BBBA266D4E1B70B29C057CE953C010228848B634605DBD1C760FC68826D19EB6336466382DAD589D73A0AF4A3A7C1F716214001E01D5638179A0BC591244573BD73383A9D9C25629132A80988ABC72C0145C33E67EA6C78EBBA3CA08A3C49D144049569A02098E0609A1F4950DC9D592617856420176AB6488E319B9403BCD7A0983B55C7844A9CA18D85FD430A0DB72B38354C7C72842D7E66C32BC793AAC7A32C32CB3204DB04841FB260CD994BCC307152940C645AA4928243AC6A04486129EB84B2C4C879B55D3B81B137562D22ACFD5BC4E77A6F4498C46AA2C18C530090A1AC644A0233306CF3A97111212F4B00A12134FE5A99DA5075A94D2459AC5356BBC5DE93C76F586A6EBD41B28C78BA6B556BAA6C32BF64CA896A661E047DB01A943610DF07B1C8D5015D43CA3FBB50E481B06A353C0B3742FEBF4548AD53AF041354CEA40BF873D5196C809931DE2A685C1DB9DB81C36D25CBC361B1E42B22F89A6136B208D8D38410B3B79EC03216F2096896040DA03A8F33156E6DB09972A2BE1F5BE939345002D9FE42822342B1F7F082FA170A7B6286FEDCC58213C8AE5677935A74B78D70D4A99156BEB1D15B96918DA613B282235FA4795C50CF20B58CC81909CD29E8090A132F98C089335177C7B0A0A7D2AEB990767CD85577CE08BADD554A7BC729909EA65F77C8DE7028CF0F87B3512AA94A5614CB38DCD9B80A117758E69B78197578D940A7AC47998549CB731A80BD33F651BA76D8C143FA2997D75013AA724F248653B86CD79B1BAB8F350E41460A1B3C4D43A4DC43388F9A4BC352C1EE84004F4EA6EAC6C6365DC9AE311B67EA15D10F881909B0DDB7B5F3F4B810C8C54EFA10FCEA02A9BB293CA306042147CF810B2E84619F8D671C8883A0660AA5F2A2EC3B75268D1488E0B6E1A95752C8B44EF16A610666F01B95B1A74BEC2A83E1AF27F4727ACE5A9878732075F2217C2095F65CA8B48F39911418DF0A7456949142FC1765790BC4C24A2FEF04C44F970E58888175A535645A0F6FA0C497A6D25E82137497705CA6830C654CE709B7CD0437ADA5622146F438CAD85C59FE8579FE885B1C42178AF1345FF9C76512668B8C53047E885ADEA20E7253F6ED46DB9A7CB38F8A0A6E777CE275EB0E23BC7585A49967436F397AE7A3ACD8BC8DA20B19BE6B7FDB996A313A47E6865E9F0752E28A9E0711C3EE549209B2B4768C0C89B06EE53715D75A8DDA238356516C3EC0F7D7689627A62ADA8732CA23A07610FF6592FFAB2A360EC6CCB342F243159AE1047722BC55EE177DF086F41112FBB21401B827F5DF0902FA7AD9C8463B9BC4C9F6B97A2B6B6B974A3EAD5CA118A797F9C7B9AE28630E3A68F92465E52003ADA886A4A3213201428458A42FB26DB5577E4321E80F7A26ADA27E027072AC27DB52822819AAA165078C4B86F4F90344F1414F7068A47E5814FF0BFE5251964AA0E07E813C0099AA0478F6A85663379CEC93C6834AC2E5E9BCEDBB2033CFC7D405B98BB520A2922B815F18F73336CC9916A44F1546F69BAFAD434F0667355F7CBA58088CA0A7E74479E4A2551277CAB3BD137B25B743C127825B577B8818C7BA53D55803E2D459800F76BE4F983DAFA3EB742BFEB061541397CA73860C5A70FC3C276EA39771B4313AE89547A3B3AE0CA0A20F72CF6D579FB7467C8357288748CB556BDAC5B8669955097B2553A35C81EF1C9ADA00F45FB56F541BB93C9B1DD8C745BF592D3C48CC0596BE2C447AD84B1037CC823040FE746384A715E562CBFD1C66ADCA0CE29410A4041A07A0250C578213C598E6C816645E71298FB6F6A8A15B2648FFFABC2ED26304237BD9FA10B370C4E25E98231C813302B85F273054EA2A73B8084950013F6619489A525B78B89359A8B88CA9A9774B89F6596538B30758CCA0D59CBE218B1E50B38A05C657AE64C9BE69EBCF4189AAC587DD1CF8DE67F4D4853EA0C498D0166FDEBA93E3634AF4AB9B04CC54B924C781667DFD9714BB31708D3CC11A81E677996ACF81001D243EB4BB28A50758B7CC3791609EF783C3F1A3B12B2C738B207A22935568578429740686697CC8045D380AC46D9540A531DE285111147491CE233CB7B0B6C1154A523A9E9792EC1024C90D3A1FDF70EC6D573E78413CAFA3EC400731A210E2653853E8350BE6C0AB1A12B13358B9C872C56D99884F39B1CD0AC5A9C3247743C47161874F01333879AAAC10E0CE17027F19EB2FAC213ACBD4F8473C84123537097FABC5F5F743E09E39527B97DDA0AA5B6DA8B128C0E1098C32883B4DF227FA4A7BF072397853754862B739A281714024A47794679BC8C0827B30A6B3309F71D8396A2DF1B84CAD72572E902B51BA03E040AF86630008600AAA7BF1AE87662C407324885048CA700C64478F99E2F85B0F3B142D9D13801D158AF27B355474EC8FCC3DBE66E5F71991CA312F6E81EC81AC74553288832B318598094F28CDB657A85A04602579A34F8C98BF954585216635CADF4478097F81ED1B3B98872B4B529BE96D87DE5B62948A16B9B1A8B81A3947233CFAB071822C807CC4A18CD4493317A890145539D06C06A974AF769CEF3FA848F5670EEBB547EB2B15ACB60F55149EF5B167333657F22250D70A43892AD5CBC97C43B2B6B049953D286447C11993728D4E533E92C612BC84ED18A1228827583072A378A06E8D102333C5817A9AF2D25A72B3A36884772A81388A391910EF2516ED09EB324C4CE379144D0BCDB226E18CC33C16598BC142E1952186F29B6C8D62134C9A76E88BDCE1890BE30CB8D534737D44CC2E27A7D1C21B9F4ACA129D41FF732E130215BDA8A69C524FFA12E40B5E788E2EBC36DCD0EEE20831D4C9FB276636D32E6D2AC2D034671B703848A87E2C752EA69079A45C0EBF370595456E62F99C59486CC68A7EEA919D3693BD79DB9FA22845AC0E9F96AC636F334" + }, + { + "tcId": 68, + "ek": "119CCCB659302CF4A6E3CC3C3BC20B0F5BC806616D87E8B1CD2B3C27AC01F1EA54034A6A2CE3B804C18101BA280539BE1CB610F6BB3364676B7068C3F107051FB82E9F242150243D98B881B0EC5359733CB61BB05F118967D9A48C41C463BC056D926AAA32334D37341596B00D7153FD155A72B1883FF68B4FB4AA65E3CEA4D78C4EF3802FE91E2E5B8723F8624EDA5187F024F61B8E4F50378147202E3C24BD937CF9A20C8180B881A80415E50328E3593C78115E2B9230673B4D2C4578030816616C5513601CBB0E1B0C6C6C68BAC4D691A0733928578899AA9787C35E37F49DB3C1242BE57DF78A4FF9AC095BF8169B4AB6627095D3FA11AD4C4569EBA4D1195BFCD6BBB3E20144040D5917675478A5ECA83C292951D06C94234309AF49A624D68FECC3AF757B083BB30DDCC54AE34C94CBB8346B9623C8B803FA9A8DB7E820D8E5CA8BA26875EC7EF2365B1CA1719BCC2D42D31CFBEB8E67C66E13D55650A638E9905C11B131CB518B247475AC0830B84366178533CC115F97C79178CCCBFCAAC4711B7ABBE7079CD75E88938DD48A4CE3185016F5530E368EBE3162CD2BBB8D287367045654C54256A622ECA8C99A9C631DA231C4305611608A2D31B56AB45F41DA4203401E765167901C0D5904BB80695E65044354E860A5A649F0A28F8DBB1D7A998AA18A507C52B04D4086A8678F6DF68FEEA3CC2AE863534178AB179DB23CB41AE6C64A3C3D5D36BF23215F007910E9B8C1DC7B18A48246FFE82366185481C679EB33BFE9F9A04ED08FFDD082CA823C61902F181881EF444509B10733654C21AB54EA496B14304403613317B046C8902D262B38DD46209C45A88AA201A0F2354D97832B855CEBA96334B79BBEB375F8B0A6BB64B48B06A010487D5B0C69041AAB90A4189F025A07333E2AF6BA1DA0122E42127EE239212636BE4A2469114CF868C52B1690BED0A5DC31B58F90154E74987F373BF25C241779B275915187C4B6AFA1A4B80138C9544F180590A6C583E45BAF40C7BB34704F30F301FD794EB8B33433D9707601CC00FD748CF86014C3B9E9D6BA9AE63BEA648D814848945B175CE90F6BAA95E5AB7D60175405C248EE248F8C849967E29CEE2802E8B9C757483E24108C009BA2C398904D4601D2023EAA211A52CC4A14CAB54CF2A037D82E9F58C8F919AD4DFA39CE653F43CA92BF191872E04031049A2321A7D4EB7AC109087927A7CD2A65BC884C49E0B3C3265EA9212469C51B48502B2294276E54014FD36F9B2A8273E1CD9FA37A43D0484D4205BD141290182A892A6647E26308B674977C5642007013D26EE722AD5361100B235354D4206308D0C5B173BF726D207A6D3C8A476F16471FF0CA74E64B3DF21FD4730376055548D092DCE053AEC80CF1ABABCD5673F41C86981721DDC9807AE89ADA298A7B90B62EBA4D28891A39B911DA4BAFAFB87A573B87D312A4EEA9A4811615F419CF602895AFE07378D5522AF910ACDC3F31C3BAC7630627746110A2960D6CB5B9707E17D26C44E00B6A70C0F6444FA43899D1017F7EF60EAD152D76B8821A6920BED3BC0831AC17C6BA2A4261E397AD3A8C9B19C79CC238CF39630401194912B3C193E710EC54C030E945B262A2977173222C63DA75B08F57CDA6DC195D0A06825698FBE1287236B1989B28399846EEF5316856B11080A0C6B3A664D1C03B61C56FD68B9853AF99EB33DBDC128E6B1F813927060C5C1C5B0CC22A1ED59683BBC13D6A22C88C547C31013213B7C392C12735C9492FB70CDCF979A6245D029C757418AFE7F5BC9D21C44A82BEE9631597CC98AE6C414D0003E5B0A76887922AAB0EE8D188BCF2960F36C846C63595922781CB4FE71148DBC66DDFD00463CC9343350C21BB59757869E97115F9618AE6B79292F5A48B4B86A099205CBA417AF1A9CA7CAC347018D630A5B0CA25F580A82EE26D910A9C91CB9BCE725ABC7740856483FA7B9D88248E45013D39010F3B0930680765C08C916816B1C0D983D48A3E9957152F6B6BFEE86102AC8DE8CA7053FA32E6850B6300BE84C09284360611E0C7DAF4884F037848839673FB32DD2572D16176C0EA7F4E1852A4F31D20213A24B0B215E86858129B985A30A27447055CAD8270C8A440594D696225501514DC99424A3C42F0470409017634680701787FBBEAC59A890CAF91D1FED6F273F3BF298775B54AF0731898FF194484", + "dk": "F197A9A2B74F5B0C40F4C67DF6316BFD87C634B36E2181A64F7C239B2733EAC9861359558F10643E3976CBC303A7DB621ED50E31E9899AD62E46350D8AB604554B449C88C035A72E360814C0C75A452AA5AA4352BC1BA2721623BA035F9C0381FF484C09F4715960086048C3F6DA0C258C007632356BC6225581B78507AC0BB631A75B59CA84CA875CA21DD1BBA71639B81105AEE09B39C409F546067EE9B3C105231E31236B317D91C50B20C110D8C24D826329DE0892CCC60E8ED991CBCC3E4855C4F00BA72E7CBF4D476FA037CAF5120B3AF640C465B62B4838C6F9A306FBB2E63625AE198D3605B485B83E4AABB39893B3B2E1AC6AC65F6F400CB86331664517C5630C3E41B08D14088FBB96543370DF3C64B3996B20D23308E5CB1E637E12BA83C8F069D733184B8B18F21529CF46ADC823B5A88024A3D93290EC0A11A208668A4AAD5406AD76A9AF5A160C287089F116706964CAE00F7210A963A319E198832C1A624BCBB5E55A4F49C052D67CAD0D6AA12CC391F9E04D1CBB93D0A4A6EA92AF21D46A605C489CC55A529B92376096E81AB461D6557F421CED65975C9380443225A054B218AB995FA13D700CA13099ACAAB92B42AC3AE82B687C5344BFD441C09A96D7E492F16C6FF0DC247234BA0B34A4C7532370FC3E018447D08C1C23A9C12A759ABEE48EFD17923C82677DD840B5030B313A8407A5A170B5B024ACC94FB51643E409AD74158CD90CA54A7C65520683D73EB0BB7181A88479135664383DD245B780F6B18102772B865C34397F063947A4179BA569A62D382B848B065DF91EC9D0639E7C67EBBC4CCB249A77548DFBC1A000094742F58D9D8253313BA44F98595C3452D2A7313BA8245569863B51C56A6A0BBA8160BC195D97B8A9D7F4CEEC2687BAB2B5CA662846C31141D9B2B3E200AFEC36FA6060AA74252B3B60BB7A2F67039FD2D9308942299480CE549105A3FA8E004B822F33B2A9F2B68A723BAAD37A9246B72DE3C5FE16CB3CCAC1FCC322A2F99532E384F4944D12356A765B398900B12DCC95526638E7E3A4C8E403692134BF5AC4C221203DA2274EF527B2B43385975185DC31E02A5D20A1C67758049DA7B5514CB6AE175FEBC285C1C40E256373B280785C3B3AB8CCCF7282590E5B5907894BB2DBCD292C32A09558DC7218BA884778E1787BC37BFB3169586B4665C86B1AE1C1E9E14F6C129C3016579FE0A6D6079B38E6CD7DE1180964A6C1B435E5E59A68001ADC09C1BE101940E8383FB26C4E23A3F1FC6E52920E77C0BAF4F2AFB61966B28B5FAAC8BDEE558C4A29348FA11517097063B50FCD6C61D8D9757630C824DB48E7EC690AA15A9FD5B58278B2D49C35817CAA568B62747B812A53A2D430874545926F970C1187A656A92A173CC21DC513E0B99C979601CACC98CF78B1EDD7C658395E7C58CBB5B188FFEA19C4B7B9A951ADDC5BC809F899E60B1B41A29F853C723823A8E19A937A09555021B3211908F5F2052ED4C60F995F32EA9522332A0CABA0BA2B7CAD43C76E543B743647E0497EC0AB96EBD8A9C855738F3A9E369249930924DDEA81A3A850AFF70D98F7C2B53B31A2EB9EF6CA4F366B85CBE43A63E603DCB3027352814360CD4CB6880CFB36402237E56A97099168DD2955E76011944353D7A408034547D83654730CA686D9480D032ED26A5DEFA8BB120A6D29B97C343589AB7884C8C164DA633E371329C1A3538D57C9B0A4BDA79501FC057434E847B8C20BAA85252D014EE7465E92B226356129547020B1959B45881EDE7192B4DBA0C29215EE5C0144591A0F7048B98547E003B7697339DDE8B32FA21B33D65174DA835AF2263A03892767B072948E1D260B64E326CDBBB1331AA2C18B229BA55F3F0A36906895F6E25978652E07C379FD030DCF445424704E0CB0887AC946CE55B80254CA2C4081ED1547AA606EFD1ABDEBDA5F9F09002754CD94276938165BD4B0052DC25E8378BF96B8A83CA899C436481F7035B3D5697A2876F0D5099CD827F783012A6B9AE99710EB22CE7BC51911B671CA9186E4564541FC3ED2067324431BF53397F3D8303D282E8889557B174232EB455F942FDCD637BDD8400AA459225700C12732B3B2BF0A459C8A8311F44A71C67A18A586061BE6C7BDE004D21440332BC7BDB7362449C4119CCCB659302CF4A6E3CC3C3BC20B0F5BC806616D87E8B1CD2B3C27AC01F1EA54034A6A2CE3B804C18101BA280539BE1CB610F6BB3364676B7068C3F107051FB82E9F242150243D98B881B0EC5359733CB61BB05F118967D9A48C41C463BC056D926AAA32334D37341596B00D7153FD155A72B1883FF68B4FB4AA65E3CEA4D78C4EF3802FE91E2E5B8723F8624EDA5187F024F61B8E4F50378147202E3C24BD937CF9A20C8180B881A80415E50328E3593C78115E2B9230673B4D2C4578030816616C5513601CBB0E1B0C6C6C68BAC4D691A0733928578899AA9787C35E37F49DB3C1242BE57DF78A4FF9AC095BF8169B4AB6627095D3FA11AD4C4569EBA4D1195BFCD6BBB3E20144040D5917675478A5ECA83C292951D06C94234309AF49A624D68FECC3AF757B083BB30DDCC54AE34C94CBB8346B9623C8B803FA9A8DB7E820D8E5CA8BA26875EC7EF2365B1CA1719BCC2D42D31CFBEB8E67C66E13D55650A638E9905C11B131CB518B247475AC0830B84366178533CC115F97C79178CCCBFCAAC4711B7ABBE7079CD75E88938DD48A4CE3185016F5530E368EBE3162CD2BBB8D287367045654C54256A622ECA8C99A9C631DA231C4305611608A2D31B56AB45F41DA4203401E765167901C0D5904BB80695E65044354E860A5A649F0A28F8DBB1D7A998AA18A507C52B04D4086A8678F6DF68FEEA3CC2AE863534178AB179DB23CB41AE6C64A3C3D5D36BF23215F007910E9B8C1DC7B18A48246FFE82366185481C679EB33BFE9F9A04ED08FFDD082CA823C61902F181881EF444509B10733654C21AB54EA496B14304403613317B046C8902D262B38DD46209C45A88AA201A0F2354D97832B855CEBA96334B79BBEB375F8B0A6BB64B48B06A010487D5B0C69041AAB90A4189F025A07333E2AF6BA1DA0122E42127EE239212636BE4A2469114CF868C52B1690BED0A5DC31B58F90154E74987F373BF25C241779B275915187C4B6AFA1A4B80138C9544F180590A6C583E45BAF40C7BB34704F30F301FD794EB8B33433D9707601CC00FD748CF86014C3B9E9D6BA9AE63BEA648D814848945B175CE90F6BAA95E5AB7D60175405C248EE248F8C849967E29CEE2802E8B9C757483E24108C009BA2C398904D4601D2023EAA211A52CC4A14CAB54CF2A037D82E9F58C8F919AD4DFA39CE653F43CA92BF191872E04031049A2321A7D4EB7AC109087927A7CD2A65BC884C49E0B3C3265EA9212469C51B48502B2294276E54014FD36F9B2A8273E1CD9FA37A43D0484D4205BD141290182A892A6647E26308B674977C5642007013D26EE722AD5361100B235354D4206308D0C5B173BF726D207A6D3C8A476F16471FF0CA74E64B3DF21FD4730376055548D092DCE053AEC80CF1ABABCD5673F41C86981721DDC9807AE89ADA298A7B90B62EBA4D28891A39B911DA4BAFAFB87A573B87D312A4EEA9A4811615F419CF602895AFE07378D5522AF910ACDC3F31C3BAC7630627746110A2960D6CB5B9707E17D26C44E00B6A70C0F6444FA43899D1017F7EF60EAD152D76B8821A6920BED3BC0831AC17C6BA2A4261E397AD3A8C9B19C79CC238CF39630401194912B3C193E710EC54C030E945B262A2977173222C63DA75B08F57CDA6DC195D0A06825698FBE1287236B1989B28399846EEF5316856B11080A0C6B3A664D1C03B61C56FD68B9853AF99EB33DBDC128E6B1F813927060C5C1C5B0CC22A1ED59683BBC13D6A22C88C547C31013213B7C392C12735C9492FB70CDCF979A6245D029C757418AFE7F5BC9D21C44A82BEE9631597CC98AE6C414D0003E5B0A76887922AAB0EE8D188BCF2960F36C846C63595922781CB4FE71148DBC66DDFD00463CC9343350C21BB59757869E97115F9618AE6B79292F5A48B4B86A099205CBA417AF1A9CA7CAC347018D630A5B0CA25F580A82EE26D910A9C91CB9BCE725ABC7740856483FA7B9D88248E45013D39010F3B0930680765C08C916816B1C0D983D48A3E9957152F6B6BFEE86102AC8DE8CA7053FA32E6850B6300BE84C09284360611E0C7DAF4884F037848839673FB32DD2572D16176C0EA7F4E1852A4F31D20213A24B0B215E86858129B985A30A27447055CAD8270C8A440594D696225501514DC99424A3C42F0470409017634680701787FBBEAC59A890CAF91D1FED6F273F3BF298775B54AF0731898FF1944840DF22A4CA662652834402F87001DB07A900E8841D5A7AF293C7B3901FC2B88A25887978A168CFE2EC23BB93A730AD6EE4BDBD53389C4F438F5CA31867019735F" + }, + { + "tcId": 69, + "ek": "86004E3F2B15EA26BBAB085D9378502229BCCE8ACCD1860F5D820EADB048A3BB650B9C897196A66D0057B6F80E62A991B8C42AA4B7023FF99229422FF6CCBCD0F5C83EB51F4A81BA04777495665A1C192F56DB1C33905E7AAC88D01025CA0A43A77107E7396439B894A514998A99BF0E03863698AB40FB35D2B0B35C4828B7F39B4BDBCEB77A993B535D693CCB00263EAD7C112775761D3C125E468D285C3C2C0C9E87C49E058C5366C737E240065FC85B9B32A336F29637421F66A0C36C79857B4C00A7C1A60B956712DC5CE3121AEA4584039177E536C3523367844173FDE69A26815782D24FF261336EE460AAB69555AA9F67B97D402C6B32335C6D8B38EFD4B488BCB0785970FF77012780395E40BF9BD48E7E58BF1443749A545F0EC1B62A975E70468CB5537B2F72999D3366AE18BD9C79A1B40281EDD52D20401029C84F8525B9A7D5BF29F71D82A2661E61297375A09399286C54BB467735C0D239DB9243835910F1033CB0A20276CB4139C87271065FC601886DCB4F7CD07F106075C760CDE7D59558A77FAC72CFAFE69C96011243C99229930DC7A90969A398357B6C762554BD4250AEAA94EE94C7BAA566081AAFF9558880DA6559193A2A5B7AD2B3BB05DC74F2A0BF9B892997343AB6B3459C7A2A6BA2C606831723BA0ABFD00225801983F95403C230BEB77D47523CEE921F3F5C6301E3050D7A65D481C623E3A8B9748567FCBA59E09DACE1B3BA8812DF13C716E8710AE5168F56A2BFF95FC4562D9D3593024BCFE7D021A4AB3178C126698B2F106C7924915A9C0C41756973AC5018A001CA675741CA5C1A9F54812C90AE6AA00873AB8F9451BBFCC2B04EF755C8AC8D8C266973C4451AF6B73FB5CB9B92245CE41EB6F5C548428EA818231F04CEB9769E37A1CEF2B1C131C2BC8BBB01D71C51FAF736BBE5967340430FF936FF285BCC881416949F69A65D178AB8EB46C0DC54AD25A2CDC64C886DBCB0948BC414E20836B7188CCA9F26E69C33866983A429277075DF295439A0C95405113154A14FC2085181229852A1A6447022513714B93F29180B525111E4C1B8BCD43D3D509D83906FDFA7853FD95298710DA34B3A8A06B5905B4913647AF0821AD9CB2387DA0742217B0FE06CCBB8B4074C1F0D505F5D5C3A9EC6A6984CAB73EB7AC57C4ED638A72B962BC4A2940C38A1CBAC547556CC4AFC1C7A8424072A8013C016045C9124D499F3CC74B8B6CEFDCC8220EB2BD4E79C231099C249C1BC8AC09EA1ABDA3B53F0FB7C03F43231460BE584CE32F714376C7BE243B18FEA48B0A16947CA92CF5B940B81CF1AA038006377DBA83DB9684CA0489774256041DBC47BA1B22B885DE5BC07616BBA2FC650710C00AF554BC1356141BC6098C363136318FD9B2FBF399EA3996B359995AF735C21D4B1A1E030C7CA48A118A215A92053789610AA2442B542C5631BE9F0CF1C0A7B11A63991AB0EB0B1B275C2719E37A65123B716334C10A13004558A75B238C5F8B6E8A9240364663D392863A36E6804B43DF528E3CCAAF334645408BEA1BB1AE3EC2C206C432455671A0B26F4E1232AFB2819019EE2BC3401514A86D91B147136BE4C58D2D57C94419E9EA72FC584577346B14A506CC33A9088AB207AB095811C0FF65312AB4712E3FC3E33516374A674F266723CC1053CC237DED17F301511A6B0544B79875A0897978302830437FAE821B387388B4AC7AB347DA13B79421AA588B96538538D5C995A46B04C29785EF5B96336D54F57AAAB32B4AE65261FF47226D2E066241400CFA58284C8C6D3D8B468344055BC86B7C97D0FB07E41105E57F8725B4725ACB53EEF377D91918137A163467A23AF10A18A91810F538E22F65529300249388749F749C2929532C82B4CE42AF5B21244C011DF5290B0B855321A711E18C22DE5A1A5F61DC48C7210A47B91CCC59607261BBA3D82530D6E190C59721E6EFA9DD7C31BC2999CE6430E190691338550B12C47D6865B01C583FDD8B3DF208BD1B24ACD3A394E73CB97207CF8F196D90176F2B8C430A8CB3C4182280B9DC430BBFA5B71FAFA48B757C1DC2B91AB57BD26016099E600065B8E044CB3402615B9C52764837413E51F1C037B652A75FAF67063122182F3B8B7737E6C67AA49E8035EDAC74C1B7EFA2785476C0E6E088ED7EE0C8EEF70C7BEF3F7C433D2803B65EBB720A736D5EF6715F7EECE68970E97", + "dk": "66034D011C9BB7D5C5AA9011267207B2BB394F5C48DCAA50A85C79828BA7F69179E96A9439ECBB8D821D86F4C5B006309EC01E1D3BAE52DC54405AA5D37603144A0A45089D26010B476CB6C632C664E74FAD0315F2F1BEAA7B442301CF0DD83BF4204EC3A440B17387535441B1B84DFCD314B84105BD39394C41BD01BB8ED1317D630C030EB82DE0185A2E519A5DAC0785A72DECA735022B04CFC1161D20B5D1C81572D292063B12AC7B161D873B3E4C6543B08E201123B594B95DE15E8C2096E617394DFB25DA15375A74B8900425C97837073B7CAFAB1545C6AAB5286CC427916EB633DE31AEB058B072B3B0D35665D7437CE7D466F72674F2539D631C903890B060FCC8EFD7437EA24DED60C36714198E3B18203997361308785569BD0A625F4633C73491AF386130E317D27CC04393679E90B0A9687E6508A9866562BF500866A8502E26080189C2A92855A8495C6C51AA040C29D6C07C4427255C292CAF4084BE4488E3961A4CAC95C5F778B21B31B223C14F806238F5C472E40E5A56B4F822BF1C8ABED58903BFE57B78985F3CB2C23DD0926AA881F432B78FDA3D83855A010237EC7B98A4B200582CAB6C55262EC199C3AB3B824C34C01865A67232DB52382A261444F54C27C3133912B6CD858BE4CA2D9ECC22DB9157B01348EFCC5F0188BD243009C567C4A0C76BD21C53972AA48CDB592792A88954CAB7EB6E8B9B00E736894AA07044A2C0B30709F1166F4310B36EF88100D86407C71D55D4787389365A749767B9BD2BF9267FC3A1E388152D04776C156A1F5A0F0533156242CBA7701F79C7C63188584D0118FD5356E19917F2F8CE5ECAB48746156AA8CE80B008956483BB6A068C6BB98BD9C76872B52216193243AC584443AD117005BC2DCA8C4DE178B80ED1BCB791963F528E927A7E0B738660382EEF7760495B74299A4B362A8CFC3047198B393B259D48FBA93D7596F0477A7C038F0CE222CD3020AEC41A2B5971306265D161CF3233A126882227B0203060539BBB1B07C50D8EB272EBE93DFD412E523B79354154103832D78C88C7C193491CADBE82B048A75832F34FCF7937BEC3AB4CA6AB15C21B3ABBAB8CB12687962F55F5A31D7714A5504F5C64C07932BC308B51E205BAB5E6382E7894AD04AE2CA79E20834692E70984843B0C10ACCC474DD03C26B8969D2452A154FC41FD06276A886FC9722926C28E7BEA30F1A8192B17CE26DB78748472F1E8CA6E402CDF299249683EF3C0721EF64371B54E3931453CBB0FF4772ED7F761FDDC0E619AC979969933F078B45BCDA4A12A24A742FAA667647A42075CACEF1900C3FC3B59A9AE9CB898D9917B9C136004F401F026C55996BEAF131F5017CC8F11C335F65DD7F92F9E167E9F205B10F31F590C0DFA745694F039A32540F2C7BF64321F40427F24E1B611224D6250425AC8244048038602759452A2A41B3CF72B998A711ED65A76C2670AF9053140325DCFD05C0323B10CC6070F09537DE56A8BD7156DB36B29A537004D5B7E02B0873518E16487EEFA8244280B0AA9394B2A435FB0AFF3D19283EA40DEDA6B40081647691B0EC761A0BA8D1F2123B663388B7786E1786CDB5222BBE4AFA33A63B7C911BE552B5D1A15FA29BDA7308B1653903BEA8A6DBB0BBBC1531943470639232EC66D4F88A96C5ACE9654A7168B4B70B34DB4EA9A6E0862FAF55B7F5341309674DA90A0B4D61E7EC12D20511EED0447E745552BF42C842450CD76724336257F293704D29D05E57D83331342B495D6787D2894B4D8047A8FB8157E0517B0B00D8F5241B0C6B6CA63884A988D54DCB42F14C1568A4BB178873F037B82A1C1E756A6CA3373FEA5421FE65B4D362F40C79FDFE388B9189D25F6A16949791B389AFEF3BFE0D002D07B1E972223A88343AF8055FE860D7E4967C05C8108706C22AABF6EA0873C8A5717606F4AD39B86C63A788AA332334732BCC697EA2303C1C7F6221D62C309FA697374F82C3E402C95567C2B6838D39214C9752778776697A08F64373D7734AF0889C2FA411903A53E42C3C21BEB11626B7ED5FAB4012459DED3AB0F6794F09B2EEC35928324426458CE2E3B3AEF6C3C8601798030A96C8A7800A8A0380AB665DA00B26B903D3BAD12610D094B987D585AEF44C514C0420D5480CCE864D2865886004E3F2B15EA26BBAB085D9378502229BCCE8ACCD1860F5D820EADB048A3BB650B9C897196A66D0057B6F80E62A991B8C42AA4B7023FF99229422FF6CCBCD0F5C83EB51F4A81BA04777495665A1C192F56DB1C33905E7AAC88D01025CA0A43A77107E7396439B894A514998A99BF0E03863698AB40FB35D2B0B35C4828B7F39B4BDBCEB77A993B535D693CCB00263EAD7C112775761D3C125E468D285C3C2C0C9E87C49E058C5366C737E240065FC85B9B32A336F29637421F66A0C36C79857B4C00A7C1A60B956712DC5CE3121AEA4584039177E536C3523367844173FDE69A26815782D24FF261336EE460AAB69555AA9F67B97D402C6B32335C6D8B38EFD4B488BCB0785970FF77012780395E40BF9BD48E7E58BF1443749A545F0EC1B62A975E70468CB5537B2F72999D3366AE18BD9C79A1B40281EDD52D20401029C84F8525B9A7D5BF29F71D82A2661E61297375A09399286C54BB467735C0D239DB9243835910F1033CB0A20276CB4139C87271065FC601886DCB4F7CD07F106075C760CDE7D59558A77FAC72CFAFE69C96011243C99229930DC7A90969A398357B6C762554BD4250AEAA94EE94C7BAA566081AAFF9558880DA6559193A2A5B7AD2B3BB05DC74F2A0BF9B892997343AB6B3459C7A2A6BA2C606831723BA0ABFD00225801983F95403C230BEB77D47523CEE921F3F5C6301E3050D7A65D481C623E3A8B9748567FCBA59E09DACE1B3BA8812DF13C716E8710AE5168F56A2BFF95FC4562D9D3593024BCFE7D021A4AB3178C126698B2F106C7924915A9C0C41756973AC5018A001CA675741CA5C1A9F54812C90AE6AA00873AB8F9451BBFCC2B04EF755C8AC8D8C266973C4451AF6B73FB5CB9B92245CE41EB6F5C548428EA818231F04CEB9769E37A1CEF2B1C131C2BC8BBB01D71C51FAF736BBE5967340430FF936FF285BCC881416949F69A65D178AB8EB46C0DC54AD25A2CDC64C886DBCB0948BC414E20836B7188CCA9F26E69C33866983A429277075DF295439A0C95405113154A14FC2085181229852A1A6447022513714B93F29180B525111E4C1B8BCD43D3D509D83906FDFA7853FD95298710DA34B3A8A06B5905B4913647AF0821AD9CB2387DA0742217B0FE06CCBB8B4074C1F0D505F5D5C3A9EC6A6984CAB73EB7AC57C4ED638A72B962BC4A2940C38A1CBAC547556CC4AFC1C7A8424072A8013C016045C9124D499F3CC74B8B6CEFDCC8220EB2BD4E79C231099C249C1BC8AC09EA1ABDA3B53F0FB7C03F43231460BE584CE32F714376C7BE243B18FEA48B0A16947CA92CF5B940B81CF1AA038006377DBA83DB9684CA0489774256041DBC47BA1B22B885DE5BC07616BBA2FC650710C00AF554BC1356141BC6098C363136318FD9B2FBF399EA3996B359995AF735C21D4B1A1E030C7CA48A118A215A92053789610AA2442B542C5631BE9F0CF1C0A7B11A63991AB0EB0B1B275C2719E37A65123B716334C10A13004558A75B238C5F8B6E8A9240364663D392863A36E6804B43DF528E3CCAAF334645408BEA1BB1AE3EC2C206C432455671A0B26F4E1232AFB2819019EE2BC3401514A86D91B147136BE4C58D2D57C94419E9EA72FC584577346B14A506CC33A9088AB207AB095811C0FF65312AB4712E3FC3E33516374A674F266723CC1053CC237DED17F301511A6B0544B79875A0897978302830437FAE821B387388B4AC7AB347DA13B79421AA588B96538538D5C995A46B04C29785EF5B96336D54F57AAAB32B4AE65261FF47226D2E066241400CFA58284C8C6D3D8B468344055BC86B7C97D0FB07E41105E57F8725B4725ACB53EEF377D91918137A163467A23AF10A18A91810F538E22F65529300249388749F749C2929532C82B4CE42AF5B21244C011DF5290B0B855321A711E18C22DE5A1A5F61DC48C7210A47B91CCC59607261BBA3D82530D6E190C59721E6EFA9DD7C31BC2999CE6430E190691338550B12C47D6865B01C583FDD8B3DF208BD1B24ACD3A394E73CB97207CF8F196D90176F2B8C430A8CB3C4182280B9DC430BBFA5B71FAFA48B757C1DC2B91AB57BD26016099E600065B8E044CB3402615B9C52764837413E51F1C037B652A75FAF67063122182F3B8B7737E6C67AA49E8035EDAC74C1B7EFA2785476C0E6E088ED7EE0C8EEF70C7BEF3F7C433D2803B65EBB720A736D5EF6715F7EECE68970E972135F15C6870283CEF75AF56A932D13FE59227E77B178A6E3DB945FD0FB5749E2815CF58BA29F219971BD444404A3FD293095A1BA18DE7B6ED8B3C857EFF192D" + }, + { + "tcId": 70, + "ek": "7E9BA5D512BC6DD416F9442005443108205B72A331034A9576F5804FF33ACB5983712B3428843349B967858129C7A7BC9CE3A293BBCB2784612242B75688450D48C3EBE368F2DAADC969B7BC156125392093B0BD4F221753F274A6D9AB64C30458DA9CC3EABE0D8997239414E28A9D80BC329B3B50E1D6A52A2B9824969BA8D68577D71D9619077F0C3D0B029B22965CF9DA0C9AE644DF98468CA96AF43466DC80A7903C39D3632B2590ADDAD691CDC512221570F89678EDE73CF8694D95768A73DA26AFF0283346CDB90376B572830D77053D2002798A985CA520CB28A3711824FCA0CD111C766FF058E22792140339BE186FAB3853BAC72225B488ECB6724AD79E46763AF6A80AFD559413697CCF75A5A284B96E1C8A89A9C149447F3982281CC36B1352142CF1606457748DE3CE54A8A27E00538CA509D90914AFB5B7755CBC28CCBEA3B892BC312169C152F54749B0878C716044A9022012995E9CB2C873A0566A8CC6DF5A0377337966D2CE7BE12A69589BEA765F61E715B7CC05C616AB0D08B35089423F69072CA61795779A91E419DCACC16471201CA6C59F3A2A5D932EC684934CC30B9437622F84C8FD8BC0BFB4BE864BA439114D917290E728B58BE851DE22A5DF1985BEEBC0FE5219E01CC69F3921CE9AC80AB715ED745C126BCD59B8A9DDD54C33EC9A599944BFC7583A13B5C5E0B523FACD27059A2C3CB200BAB744CB9EDD229152251EE9C329BE6CA27A7C6309E18C9C7B475157CF57030BB0908C45C80E8366329780CA7B3A5556E2A22E44AA97D1B3F1CA97D9F0A9C1A7661DB37F9372AFDC60804297123F3118B06C81A3C31E680177E30311D6F08CC0EA08DACA4364616640C3AF7811CD8C9BCBEC110DEF0CC414F1C182E82A7F3082A8E4672C999CA16567E625BD1547409FB9B2ABE5518A48298DA27179ECA867EABDAB5750DA09C308DACD34E20CC04383CBDAAEF942BAD8542107673EEF18664BA28F5DB835A3104AB83BBBCCB65869286F77053FDFE79E08D43700B547B1139567028DBF829D69F2147266B6EC8235CF2746309365F8279F797AB01D35A7EE510DC626433F925A667AC7232C6A0B15A3F7AA477E930118262557F40D04E40E60C4306F14A82402BAAC88C797C93897A3AB8453CC5F3BBE433267D906ABBF5C80E134394A0C84FC784E9903A9A30378ED514198C70D206243B640393C28B78D2B49880265B82015E18A85E026292E2BA8E7A12F9E6CA084F09703C0C1DF82713E2699517C288FCA43AC70C59D77072901BE03553DF3857F8A6B2B8103781AF0453FE1948D749B8ED14506450E479967838B73BC3B53F5599A41FBBEFC1CB31DD574CC58623FA20868D9BE80787CF7F0212DDB4B27A8ADDE0253685B089B39BA3F43BC178AA8969B1E7FF1441EABBB62C3C8A6EA11BB82468E14AE1E287DA18581BC7A693C0B7F7DF51353305970B78062E316A6686BB7187128F291CC31172E371F831081D6304F842B5AD5013B6191BC3751529DF7B415D27D2F5A4565D34B4DAAC0E6890F2E042DABB8755DE054E815729EC596DA2C95D1D894EABABB828CAE12D67F0BE8BFEB64A0CDD76A4E2831AAC58741520BFA9228C2287B9C244E33E918E485C1C422938617080B27209F4A95228C294F3B399E697F696A4C5988C226AB53BCE2AED7761AE59C6A3B4645A594B01496ABE5B94397170119A62D52172B4334069A06671338BC4CE49F52B2812C154C254B6C4CA42F54440D4DFB44D0809FCE0C50504C2012DBC53A057376FB012EB99DC3D40147D98777E50CB7A84FA07A3A136C72781B16ECDA69911B15F5DB271B0954E7DC1022829930C0275DCC7382203F2913AE7DF9C187D66E000078F6355736A56643B7C6D2F15B00AD8FD34203C4F5601057B14839048323800D1A6C972C5042C2A232E5B0762BC02922C17505381900290670581B4945DEB5A0DA4050EDD05DA4D1C603FA91FDB263A73A3B2BC3047E81CA179185D1C0A9D96B2D190997E733A308A11C929C409A1049CDA10B412B588C308C86D0B7C43A865CF6AF18253624F61959FBC881020698E39C51F1A12E9C7B20919923788A5D4393BEEC2F97169DE155AE03D15738C89BF31A2B0F97025C1A8102D46C361B647774A0644138723A00345269FD72227B906BBD41A55A1A5782585CA83E6F738E743F2246276C9241C010E144ABA73736283A1D30D7", + "dk": "5871025EA9AED925B5CA853BFB22B16569747A997189B251F5F2CC07572337541CC42A99E2100A19CC43F4B86B8A978B3FA30E9C34900B305929E0312D449490D4061A8AB994C65A713C43630155CD89CEFAA9430E1BAB3323B7F311BD9A901301DB9145622C30B95B5008C1DDBA56B4A456EF2B406C1B082193826B9B1D44CBCB1977A1612AAFC511C37E8421BCC9AF4BE8C2C7276454BB074B3580CA041978F6844E31467524AC9CB809C775CE0C07C1AC716371208C74473D94F231CB65803029BF92C098031044EBF523C3A0B2D52B9C88B3BD997B72A5D81CCC6847DB0A5D67962B1B642C9401CC546A86881C827743CA1BA28D87D24A6806A08B5444A17B0A3C0138501A748A8AB655E7BB9F1243C25933D43A55035BC7013C0FE7624BA99C1240D874AF995C536755EC375299325E2639A5C1715DDB903C7565A60061A8E897A9E0190AB811055F7053BC7C4531607BDC2C2E45C741AC0B2A05F06FEC58331535B3596581444214D850510AAB1263E96607E21AAB6C4747695120621DDB228F7894B021343703E7500B92497AC54E858C1D752069612A11D7672765690E37B983D4890B903C540EB8A3EAB35802C78DA29945360C0F515903FB9B586E4A0B797B53BC0037BF420048454D211C9E3D941968F05D1C179E39161857D59A12E281F88C3569B180F95BC33B51721EA7934788127D1A16EC12CF2C444E79D94BA6AB49A720AFD8E8900B89C87A9277FE0CBAA6087986436C93F2537FF751C0DBC11756BDE187C7E33B611772A5B2915ADEDC2D2BBB768D7809E6F126B932AA10DA39E66C8889D51EF16C4FF63CB812A327BB084789EB7F60881F157C169F59A2E898BE90F86174B58F90889E4EA25D29F9BB23E5C3492122B944ABD343B7ABB48170BC840C6C490FB172911773632AC231AA64BFFB9F5B2B17DFC89FD6033C834426C389BC01E93FEEC041379B93BFF44058208D4E04C43840C84A284DE5F90631E833D1BA199E4A630382CCDB061947B7A9AD52B39D38A4CC27AC54345E5E5BCABF83030488531285AF7D099F469CC11DC99557F9656F672BD1D140D0B73DA7448C479566EE9A9145941F11493B60A1CD9CFBC09EDACFBF55B181E68865F6B71050AD24D6448C722F029A0A25C734D4FB3253F7B374044582F53FD5D102F84397A0B85CB91922B2F429AD29BB7CF8A59DA1407A559F9B20AEB4800FAD6C1235584537C43C5B51685FC8465B259DFD360FA320A0C492620403199AEACCB127AC5E2678A6A8857452A6B60036A618C9389394C0952F3356472CEAB802627BC9E0981B07051B158938229844356C9FD07E0A470D1A536CE0255656B7738090371BA6C0C5A33E0DB606BFD69409B1B75C1962206B3073C5B911F76610B3643B0663790823AAC152AFE63C6D4AC6AB34C723DA774B84C15D40CCBA1C11DE7A38D198CE3C8780791C1D64D91A06793355E198FAF7BD9949B49D348C23C288E35936FB96AE775680292CA59D904FFCECACA1A59C88325500E8A1AD47AD2484A209C34AA6A24172FCAD54116AE861B73BE1947711C8803A4913DB1F8FA22C0E4CBA50328864F9560CB959B934CD0E714E70D56767A4BDDBD83684F85F879042E4A88DBA9486F004B6A57754D4782DAA7337800849D5D1C28BFC2ED3369A93C45634C3A2ABD76037AA3103086E76087664C9387086013DC3A535928130157E7B6B854D8A51CD80124DBB2EE8F7C40C94029226B639D2CC87138997275010818790059D860292B8A7C39F0B747EE27A59679E07048F499C8B084CABB871B462D233E50A2CEA6BBB2484137B1958A67547AB9B7F9076497510C28D664FE719A90833C5851C52A189B57FF164E6E34F1F7678DE1A11AF26A19AC8B000462A0613346C928D64E94865F0606AAB52E7173C00FC19F1286BE22B1306276B46D89F43DA2D1C15C27C13B423F8BB92F4408C86B6E561515E488004E49442471C6CF50139786E69A84BC8B1C240732BB5EC6DFAEC42A23A939D6788B75972A95A7452788FE652083A01C27E211676164A527C9B97E995295434AC16BE85F3594AE80F72D9AD3A2811BADC89A2F8597E27C6B8A7A0E7E610F0C96E20C15DAAD872909906B39912B2529DCFA9C426F247E305013A586A9B8840946B9DB903425370CC30EC689EB9CA7E9BA5D512BC6DD416F9442005443108205B72A331034A9576F5804FF33ACB5983712B3428843349B967858129C7A7BC9CE3A293BBCB2784612242B75688450D48C3EBE368F2DAADC969B7BC156125392093B0BD4F221753F274A6D9AB64C30458DA9CC3EABE0D8997239414E28A9D80BC329B3B50E1D6A52A2B9824969BA8D68577D71D9619077F0C3D0B029B22965CF9DA0C9AE644DF98468CA96AF43466DC80A7903C39D3632B2590ADDAD691CDC512221570F89678EDE73CF8694D95768A73DA26AFF0283346CDB90376B572830D77053D2002798A985CA520CB28A3711824FCA0CD111C766FF058E22792140339BE186FAB3853BAC72225B488ECB6724AD79E46763AF6A80AFD559413697CCF75A5A284B96E1C8A89A9C149447F3982281CC36B1352142CF1606457748DE3CE54A8A27E00538CA509D90914AFB5B7755CBC28CCBEA3B892BC312169C152F54749B0878C716044A9022012995E9CB2C873A0566A8CC6DF5A0377337966D2CE7BE12A69589BEA765F61E715B7CC05C616AB0D08B35089423F69072CA61795779A91E419DCACC16471201CA6C59F3A2A5D932EC684934CC30B9437622F84C8FD8BC0BFB4BE864BA439114D917290E728B58BE851DE22A5DF1985BEEBC0FE5219E01CC69F3921CE9AC80AB715ED745C126BCD59B8A9DDD54C33EC9A599944BFC7583A13B5C5E0B523FACD27059A2C3CB200BAB744CB9EDD229152251EE9C329BE6CA27A7C6309E18C9C7B475157CF57030BB0908C45C80E8366329780CA7B3A5556E2A22E44AA97D1B3F1CA97D9F0A9C1A7661DB37F9372AFDC60804297123F3118B06C81A3C31E680177E30311D6F08CC0EA08DACA4364616640C3AF7811CD8C9BCBEC110DEF0CC414F1C182E82A7F3082A8E4672C999CA16567E625BD1547409FB9B2ABE5518A48298DA27179ECA867EABDAB5750DA09C308DACD34E20CC04383CBDAAEF942BAD8542107673EEF18664BA28F5DB835A3104AB83BBBCCB65869286F77053FDFE79E08D43700B547B1139567028DBF829D69F2147266B6EC8235CF2746309365F8279F797AB01D35A7EE510DC626433F925A667AC7232C6A0B15A3F7AA477E930118262557F40D04E40E60C4306F14A82402BAAC88C797C93897A3AB8453CC5F3BBE433267D906ABBF5C80E134394A0C84FC784E9903A9A30378ED514198C70D206243B640393C28B78D2B49880265B82015E18A85E026292E2BA8E7A12F9E6CA084F09703C0C1DF82713E2699517C288FCA43AC70C59D77072901BE03553DF3857F8A6B2B8103781AF0453FE1948D749B8ED14506450E479967838B73BC3B53F5599A41FBBEFC1CB31DD574CC58623FA20868D9BE80787CF7F0212DDB4B27A8ADDE0253685B089B39BA3F43BC178AA8969B1E7FF1441EABBB62C3C8A6EA11BB82468E14AE1E287DA18581BC7A693C0B7F7DF51353305970B78062E316A6686BB7187128F291CC31172E371F831081D6304F842B5AD5013B6191BC3751529DF7B415D27D2F5A4565D34B4DAAC0E6890F2E042DABB8755DE054E815729EC596DA2C95D1D894EABABB828CAE12D67F0BE8BFEB64A0CDD76A4E2831AAC58741520BFA9228C2287B9C244E33E918E485C1C422938617080B27209F4A95228C294F3B399E697F696A4C5988C226AB53BCE2AED7761AE59C6A3B4645A594B01496ABE5B94397170119A62D52172B4334069A06671338BC4CE49F52B2812C154C254B6C4CA42F54440D4DFB44D0809FCE0C50504C2012DBC53A057376FB012EB99DC3D40147D98777E50CB7A84FA07A3A136C72781B16ECDA69911B15F5DB271B0954E7DC1022829930C0275DCC7382203F2913AE7DF9C187D66E000078F6355736A56643B7C6D2F15B00AD8FD34203C4F5601057B14839048323800D1A6C972C5042C2A232E5B0762BC02922C17505381900290670581B4945DEB5A0DA4050EDD05DA4D1C603FA91FDB263A73A3B2BC3047E81CA179185D1C0A9D96B2D190997E733A308A11C929C409A1049CDA10B412B588C308C86D0B7C43A865CF6AF18253624F61959FBC881020698E39C51F1A12E9C7B20919923788A5D4393BEEC2F97169DE155AE03D15738C89BF31A2B0F97025C1A8102D46C361B647774A0644138723A00345269FD72227B906BBD41A55A1A5782585CA83E6F738E743F2246276C9241C010E144ABA73736283A1D30D77711D550B52DEC8EDB2B8CF266C47CB0DA8BF2C5EAAE0EBE746ACEC9946E0B1B9793BB2B4F48F123F53BB97EA7C51EC6EF003EA5E19523AC6D5B914A1C8792F3" + }, + { + "tcId": 71, + "ek": "84136CF44B63B8C453EF06C52DE0AFE1D4CC00981030C370B18602B6AA026189116A6556954B504210BDEC4B6ECBDB4BB511225A51667A989D0BD77D1B955D5BEA147D649C7F5160F36148B87B9F693B1D692983DD147A14763D0F75681C1903CBBA901E239770202F946C8EB1E75A462873D71C94E919BE0800187C347D11074462156FE1015D6FAA27955617838646FA15BF6EA97C14B21EF1A3A88C67430094C2671B7AD0D4B1B182C990A20B25F356041B53F082426F8981470494B2D6799D378183BAAA93795679291414D33C10533F6D8ACF74F82913A298FC19C0C8280CB45BC70E85149340B8F208929A79729083B074226C3657BDDFB55C56965D8F581948BB70B1B67C1726AD27B6B05A50C0FD59894FFC963573AADE06653866A0E8F63867347BE61BA55E0659F677726221BE87C31EA447799D6B1B01725323FCC429417D80B25842B53042FB6B8B074BFC347139748D9A029D8FF633E8845855458B96DAACD31C0599696B97F17949F4C816653FAC3AA2ACE8BEFD1BB4F8DC29BD32652AFBCE87AA7D3EA5BA06EA9BFF9A0AC9CC714B5BBBBE4BA659F794DFE4AD14F6839BBB215D9A8116A44C28F1513783C589C6318AC6BCA2647B4B20A286656351D284FAF511D3D357245BCA3DC8789B0C4850169A39A580371581C651C5240305F02025C40C4BC0A92A99F663BCA68C58896DE0CB0300AAA4A6A1658202087E107A483004398A097C8721B9881464EBAC2EB30565E222C20605BE7438291C635A316EB302C05AAB489F790463A10F9B942E81AA1BD5C04E34A39DEEFA2D365A33BF37A6357382F62C694EE0B66F760B5D54524FA17BDA83182720B5291B611D116808AC427CF2356A707EEC5772E20074CF72B225D2858D0BD0CB33719E2B43A7D42EB0D050CCFCBCE62A266E00C49915688E859C9AF4B46409C714106BC18558B4C62B0D9BC1AAD874639769FD8C6A5FF51C3138748F95BB066223E51676F5A440ACE8CDD0614C79E252FED791FEB14493B3186A58573C0039F12A656158370E549BD3844D1C23473864ABFD108F25A04B09C82E7BC0A67808553F0A2958FAB1DCB76C2F45612D69A093636E3FEC5514A43B80615C45E4A7BBA80684A2226ACC6718C76BDD77056108563C6480F6E02035C3140063191599B3AEC0AC4C94C93B34480FCB4E1CD550C4E8C57AE43C3E018D792298EF607F81047CDC38CE9B742B46F95B6C9C98E60A0D614C4CDFAB3142023FBB97B084F88D85D0781154910F064508146065F3AE5580C4B7479C514280F1DA1240CCB72FC554C0634F1A5ABB262896B00A15522795B1430EAEEC4D54D230A7437E5C15B3E7398D54F38A18517192E37244A669F62A6AA3247D9E0400C85A9537E084B70450701993400A95A5A549E43216B5B000B13B676286296F1489BC8813AE8976883B00DB639ECCF2BD005D443897C731C71F6AD447C3962F1D4497C4FBA5B99354B49B2703A74FACD2C082CC747D408B9A011A024C2FBC867AFF1142326AC8735B4771BC89E2C1CA03E42518801E2E03C74DF313499C841519A930568C816CCE3BF6325CF71F3B438E9107697F11CBADDC226C3A4F8C5832EF0A986573A087024A21485654149F80B795D3AA24BB36AED7F074C146B43ACABF7747AEBFCA5F910168CB213F3B4CA01E285FA0D3342DAC91D7B1727A1C2F586BA3A6F117658A872509B7F764706C854900A66400363926790F7A4CCA16040283E21675FB6747D43AA51BB91EC09DC76CA148FC8250617BE8BB7687722EA4870A63711B369C0722749FF0C6361CCA49DCFAABE0F0C10D9A74E7A523A7101EB020A092303A72D794C2778C7138831D679DC061CE92783E9C4B7F6859B8B3B2AABF25A8B1779460835C92EA90D49159FC69B05EC13D1B8C16498045443A95C9F8983CECC27B6246AA8A47F5C539AF785D90903C4CFA6FA8883080FCAE97D8B024663FE5A34E8BF7473E110B9F04820D700C85B47D927BC139C60CC458080CB5983A6C73147854694488F43202F873C0B2A48B9FD5C0546373A7EBC16234B157C53ED808392EC368E0190E6AB0C338B2B2111B5FD31CAD4B971560E45630991F9FBBCF85198D8FB58BD876B16CA5AED6BA39C9C5CEDB7863DE0572E975725AE13E5E7631058AABF1929DBDF557D54525DE6B775D23041D84ED0EAA86AC785414D7CEEFC6F4701DEC4174F449EE97C3B1", + "dk": "1CF45EF94560F8939F6DA97E4C970EB4004281529414A1CF2ADA59C9267F81BA06B3B5C397C431C99CC8890C22A68A8802210BEB3526B2E8865DF66F18370D80822BC55676D4F0AB22F9202863B9B7895251D47C0C68139AE4045407898A838DF26C2DD5208729177E38343D39C398967248EF13C4AD111F161A3FE66CACA3A5B663723A6E3AC937E31D421982571ABDEB9C26FAD33BA1E991C668B7598C80EC65471587BD0456425574885CD8B1B7D58B81270DC57134DAC4CE196C577AD6C0E3DA8F1D94C6048692E7626A76F56F829819F105B63CC10A6AE61C9F256FEE83C59DC022DDB7528E7258B519BA3E76AD7A3B0F223C26CDE5384A2908CFA00AB73576AECC1DF9A16DD45650724CBABCF15CD7428681EC9105075C99A45155B487B09090B626A157430A72C99D617638E52BAFEEEA60D8E89EF2A8188DEC6FA6FBA661C501CDD40E0C5AA244B33D071B161DB96A59A8C0C2282FC402138C1510776A3C15A4352CE0A0399443CEA74411406E7F167D8BC0C497C654DE5989754564DEA1A0DF71098C1A7E8EEBA469309400E24BC77B23C932C628C88DC50138395268C0B316B7783DB9197856181B4DFC22F2737D1F2A90E46B9757B99EF1380FF704AB7103C55096823B35623D2550FDB6131C03085C3C4C39E2996A3392D24483371C3622D133B911BDB0A7240105B2AB7476AFD345DDC028D6CB1C49C77FEE599E8802193A549559BA79C751A0E435539EDABBE8A03413F82D933B38320B38ACC72A9D661713B0A8E7240A904545FA5C0C417B2614E4A446E7CF1BCAAE73198C3E0A949E83CEAA6AAB8D7343D731BF973765A1858CCBF965A9B1A4C41A826C6C792014C36EDBAB66025D2A86947CB63B233C54909C38AFD2368B5C40408133D5260DC528CDE0CCAE08388C49FC72BEE989736B82E5320ECFB3A544E08EC082BAA076273DC12B9BF76C7DCB169AC4269A0625239C4B5D6192D2265081155B8F1C72C460691027BDC6320C5386C0A73A15F6C1A79C7B9084B95F4893CCB3A4ACF2DA8C305AA9A6A0ACEEE4939CCB1E213C4E73707124A00017744256C51898F7B44536902A1C17FCA5824ED55BBFBC6236BBC077BC335708CAC40A424E302430550F95505BABF271D5195A4440BA5C90CE197B8C558A4FA95A527FF81B8933827456266D2A2F7A538CB7593E69A3522C5C1B2873A16B585CF061C050057D348374B278CC35B08A3D379F785C7EB60035506859B9B86F08499873F8080A00B3BC440090F325E9F3558B010E25C75EB71159B250608880C0A2CB8AEF7579E8D070AA16A1F2F5AA275336678A8129A09CD58780EFDA6EF2C9CD3064636700376E2B93662AB206880C328CC23073872421315511CD7A23C20B2A55711334B891C26407325E54AFE3E02A495A586F589A8B648C59C15717697E5A35191501A6F0C6BF58E78C005791B398702D1977315865DCFAAB5FA29A77AABCD25740DE1AC0A94234531BB73735630E84C5FB778CC0E70A1E8750DA78922CBB2AC392849205BB7E882AED7506E68B60D8C569738B91632208889B10046B34088A681A7862D1E5144876730B458BACA11550950DAC6553D5A88E4A7178FD402CD2397F8482396A4125363597CC60507FD19ACB8B7CDB226CD9788C13B565BA054E7502C8885A2FC9137925E701C5B7190BB75C7BB699C604BF0D1A6454CA959FBAA943561E2556261818ABA25B7378BBABF1F44422C8A203442EDA789AF48A25715AB313E5CF7FEC2D0EB44D5C0057CF9AB0C9A565EC6921A6627A07F70BC5EB1212C548D2A74EADE22E4EB7901EB21BFDB9CC4A020936A45907DB5B3EB147832843FF613B488111E4934F796A97DF0168ECB3967DB547BF1913BED125C681CEF87C7A3235B07C365ED3917D05A66D83B89E8AEA729E44C01AE2A46D14B1B9769FBDC252F088A5E0872ECF7521E32765ED97550685B0046C457B44151C407E99DB318EF555DB290307F00CC85CACC8C61FFBC16EA40B623A7A1B1D835C39BCBDA3EB254758662668502DB178ED9540F201C9B58A5368F6185AA36F2C5C3D9261A57C335783800B623A3456898C02E368856592250A459011CC00E885B2618A0AF9B720C605765ACCB2A9703B7B78E803AEC0F6170F34C285271FC7289F44E866BBB7C198B47A8A026B84136CF44B63B8C453EF06C52DE0AFE1D4CC00981030C370B18602B6AA026189116A6556954B504210BDEC4B6ECBDB4BB511225A51667A989D0BD77D1B955D5BEA147D649C7F5160F36148B87B9F693B1D692983DD147A14763D0F75681C1903CBBA901E239770202F946C8EB1E75A462873D71C94E919BE0800187C347D11074462156FE1015D6FAA27955617838646FA15BF6EA97C14B21EF1A3A88C67430094C2671B7AD0D4B1B182C990A20B25F356041B53F082426F8981470494B2D6799D378183BAAA93795679291414D33C10533F6D8ACF74F82913A298FC19C0C8280CB45BC70E85149340B8F208929A79729083B074226C3657BDDFB55C56965D8F581948BB70B1B67C1726AD27B6B05A50C0FD59894FFC963573AADE06653866A0E8F63867347BE61BA55E0659F677726221BE87C31EA447799D6B1B01725323FCC429417D80B25842B53042FB6B8B074BFC347139748D9A029D8FF633E8845855458B96DAACD31C0599696B97F17949F4C816653FAC3AA2ACE8BEFD1BB4F8DC29BD32652AFBCE87AA7D3EA5BA06EA9BFF9A0AC9CC714B5BBBBE4BA659F794DFE4AD14F6839BBB215D9A8116A44C28F1513783C589C6318AC6BCA2647B4B20A286656351D284FAF511D3D357245BCA3DC8789B0C4850169A39A580371581C651C5240305F02025C40C4BC0A92A99F663BCA68C58896DE0CB0300AAA4A6A1658202087E107A483004398A097C8721B9881464EBAC2EB30565E222C20605BE7438291C635A316EB302C05AAB489F790463A10F9B942E81AA1BD5C04E34A39DEEFA2D365A33BF37A6357382F62C694EE0B66F760B5D54524FA17BDA83182720B5291B611D116808AC427CF2356A707EEC5772E20074CF72B225D2858D0BD0CB33719E2B43A7D42EB0D050CCFCBCE62A266E00C49915688E859C9AF4B46409C714106BC18558B4C62B0D9BC1AAD874639769FD8C6A5FF51C3138748F95BB066223E51676F5A440ACE8CDD0614C79E252FED791FEB14493B3186A58573C0039F12A656158370E549BD3844D1C23473864ABFD108F25A04B09C82E7BC0A67808553F0A2958FAB1DCB76C2F45612D69A093636E3FEC5514A43B80615C45E4A7BBA80684A2226ACC6718C76BDD77056108563C6480F6E02035C3140063191599B3AEC0AC4C94C93B34480FCB4E1CD550C4E8C57AE43C3E018D792298EF607F81047CDC38CE9B742B46F95B6C9C98E60A0D614C4CDFAB3142023FBB97B084F88D85D0781154910F064508146065F3AE5580C4B7479C514280F1DA1240CCB72FC554C0634F1A5ABB262896B00A15522795B1430EAEEC4D54D230A7437E5C15B3E7398D54F38A18517192E37244A669F62A6AA3247D9E0400C85A9537E084B70450701993400A95A5A549E43216B5B000B13B676286296F1489BC8813AE8976883B00DB639ECCF2BD005D443897C731C71F6AD447C3962F1D4497C4FBA5B99354B49B2703A74FACD2C082CC747D408B9A011A024C2FBC867AFF1142326AC8735B4771BC89E2C1CA03E42518801E2E03C74DF313499C841519A930568C816CCE3BF6325CF71F3B438E9107697F11CBADDC226C3A4F8C5832EF0A986573A087024A21485654149F80B795D3AA24BB36AED7F074C146B43ACABF7747AEBFCA5F910168CB213F3B4CA01E285FA0D3342DAC91D7B1727A1C2F586BA3A6F117658A872509B7F764706C854900A66400363926790F7A4CCA16040283E21675FB6747D43AA51BB91EC09DC76CA148FC8250617BE8BB7687722EA4870A63711B369C0722749FF0C6361CCA49DCFAABE0F0C10D9A74E7A523A7101EB020A092303A72D794C2778C7138831D679DC061CE92783E9C4B7F6859B8B3B2AABF25A8B1779460835C92EA90D49159FC69B05EC13D1B8C16498045443A95C9F8983CECC27B6246AA8A47F5C539AF785D90903C4CFA6FA8883080FCAE97D8B024663FE5A34E8BF7473E110B9F04820D700C85B47D927BC139C60CC458080CB5983A6C73147854694488F43202F873C0B2A48B9FD5C0546373A7EBC16234B157C53ED808392EC368E0190E6AB0C338B2B2111B5FD31CAD4B971560E45630991F9FBBCF85198D8FB58BD876B16CA5AED6BA39C9C5CEDB7863DE0572E975725AE13E5E7631058AABF1929DBDF557D54525DE6B775D23041D84ED0EAA86AC785414D7CEEFC6F4701DEC4174F449EE97C3B14C7D8552A43D0D569E747334CEED1877DADDDECB6AED060723FBA4C6142ED9B53B5EEA98E4DA17331DB69AE7D8371E5DC7E02BF4FCADF9319435EA910FA0FF1B" + }, + { + "tcId": 72, + "ek": "B0D09961169EB4B9C7AFC8BA050988E5A13404A95884D9C4517450945B495242BDD7100444B8048BF880BE987A0829CC8414A4C4F15BD24451C8096EA932CC1D9C98F7CC840074591D87BE41C51925CACE4DB453CDFB18F19A88BA326CB5E0CA7C01728C58536252C9929217C6F810919A8FD766AECC75B66B5B0407CC085ADC63B445C895B54060E881359ACD26B77E00302F7A862D02D7C7FCB443011C7BC333364FD34154FAB44A64C5AE634E63951EF5C3B33B43C274F6AB6FC68539481A4D774981B10170021BDE0645856C996941C509001818E9247F105BDA0113C97C588C24A3815001CE055F83C685BEA9822687148BDB79A673620C8708E2D90E1B650BA2C52016C5B2951CA349C83DFB0B73519A22FEB8B456632F339369250056BB2BB436C66EB26A2F765708560A4620C6727014221BB439BC9519FE42BEC1F213820787D04B9D28B450A53717F921540B738464A6B84C136B4BE1CE274C8B27C229324629A989BF986A71F4908BF277A0A70B664F6075B6FC20B15AA95DA17A04BA4F300C28F76A9F3AD6676C008DB7A1B62E6A3EB84C11FC11BEB4025A6AE2B2F7CC1105196701D95EF4AB11EE3B549DD1363C4A2083B0C120813731B897EC8A9EFEA6359E100C39F2455A3596562BA54C7364FCC798B9274EE3249B67637CE9649DB6313598B676E6F136CD17C656A60645B9601920A05D8234DC1715E4D70C77C27676EA927019B8952978A1EB3214DCC118A7B7EA5512BF654D84A36A242B6D47F256776184F6902F02948577ABBEA111AD09200DBC482387F16DE5D38B36ACCF4EDBA6887B6D0E88CBAE437FEF771059669E1A3AB76DE335D5F703E039457123203890917C0B5478DA186ADC0E4D2329A8381ED3731E0205700F585A20459952B3C59FF33E6BF3CA6F6130DF815159A6BC814534188B136AEA22D472C721D897D6D1A1F776278015B2C94CB8651809B399A62CFA750977A51529A841FC3E91DB1549B28F3F13612ABB5B58452A9092056E43620FE2816A099C01709E9DEA7016249A81416516B28B2AE956F52050466BB8DC8736B93509F84982D739552969765130245E406152917F48E740C8A5C27500CC9AA691D9BC4A4F3524A57C5B28B84C95A405DDC2BD988B2AF116B8BE38ABC5818FDBD27B9E826AD72483562A64D46347E6668E7EB5519D462DB5953CC502AF1DFB8405E620995A809FE32DF9B6AF01941D0DB51AC1A778D7B5A5719839E9996B060825C4C68C376A24F5D3C1FCF3C7D179B545F294B7324AA3347F99F8BFE4C6C1A7E116667A6E0E22063456AF8DB9BA2C960C33414141C310900012997793C7842A09993F176A508AA200CB3A79CDFC8BEAD352B66458F8B6AB3302AA9002B17FC9CA10203FF753C6F576535A1B2604E148826C2C801A15C4315C36365C60EAC6E1401E5A0B634143AFA29415D1CA0083538429791C36928360FA1F0EB0A4AA351DC39C32C754A556F488B910740917B634A20D9A61240407996F905A45FBADFE0467A37BAE36999057F9C5AD09C99CABA8C745734DB1B5E67499807BA0ABF867D3A4793BC2732BA650676CB2901358BFA979B7D8C422BB8917E2CF8965999F5B2136D51B9079B40B9A67F8739BFFA67C0AF19966067752D19C22A5CBEE278998C15F4009B748A4630418A337129FA93131A4B81BB3D98E69EC34301CC2F17A4D09558BB9FB4F440BAD6C158466C8971F4B58AA8682838702F4D5821F4AA740F726FEF38EE5E70C57C1786D879DA387BF63062EC2839945F39C976566B47C98DF051354E1BC0422697D5208C811C639114F66300913D23EEEE1A8755A52C82912E89B708926526DB39899084A9F773A83B0A4ECD6AD9FA338832263C813AC3EF520433349BAF5084BBB90E3C5179F6A775A72473BDC4C0426C8BD14560169866CF1128A7870864C08AAC98974F193210C4C72307C25D4BD83C2CB91E164AF1BC682839E0134A12B2959CF88B6152C63BF5850C751319739832761504EBCA126F8920741A181B5512A0222EE2761567519EF0A91CD36AED025898E41BB81F19432919CE7B5B8C4507D77D5CFCD78348FD41796D531186774AE11439DE82EBFC160DD36900FFA863D58616F9C89FB9BB070764DA9B090DCC5B5A10860133A5CEA47C3F1A42012DC3D0AC57735A4D593D24588B33E8B4074698EFE3630B41CA907897D9F3522E6EBB68AAC69", + "dk": "A9F0AC70F8BF8BFAA03D868D38C72C79850778B902AF357A1F8C30146C8A86FB730CF2BC87C4AEA97893C6BC66693336DA3C51708C8BC2B57728EBBE878967ADE413F323A191F64FB4B05CAFE9197BCA9347D1010C8698C5A45D63A7C69730203CD713ABF17327ABC43A38159970116D312044B650876094F9A8C7FC0A4C082A3A6CDC4FD16A09C4C7B4BF14826E65840FB086224917DBD7C2F76994E775AC9B4B9D5FA644D7E5C6373C442C96880075B0E98C2E2EF9614A314B02076FC48A93D193371F1AAE882AB121888742301C31976F88772F7C276248205CB8C37914FB5664C8B1440B158DE97A61206B5F4550E5F1CB73C0277B529D3697A186A792E370437B275C96092346A675BDE729A494276072325A61523F965A5B0B0A9961101BC34EC9D5A79625168BF99DDFC9B532E2A96D73C65FC60BB60715D4CBB5BD8401C5D160EB62087275B612E5CE8AF96D633A7A5222010E99B6614AB077839F6EA6CA5C3C48A015910A5A8F6EAA8FA9D41B5190B436295908C993E6E23B4D81ABEFF5C021A1C05766B05F471553305BCED404EA334352A65F5BD11BAD1B20AC904CA857017F712E254B1FDE2789AF0A69C6A9C1247C12E01AC5AE8BC1051A8315697F075A845C471A001431396188D508C7D3731FA7214EEFE7094F77BC755697C47524E7F6BEC3E6C43ED258AB160AFF693123C333DBC86A73101811F2BF16C4CAD5A24E9CC460D64887EFA40937908985C628A54027EDFC157028C697E5B386B1737F11186C47917E7A2A5314AC84057E48231F11A9A818B34182FBB9ABBBA4E24AAD4B41441BFA51E14537BDA202732B77778BA6E188BF87F7A3AF6CA2F6FCAADC85C991C28915CA26259338A4F6BE3ECB101FAAC842B2944B4B3243FC2C45094F93434417828FCC575507C8CC7508C5ADBA1795A31B51225E00B7C00BD2658081AA80BB3E7016309BDA809AF215938C183B563CCC651E19EC39FE9AA30A1533B3EA9DEFB42ADCA79054252F3B2A50ABB78630D3B4FDE427269C207FB766617590F1C12900DC864B0000E1123C2F919F4E8AC4FCE39B6C0753B4F6B4593300BF9A05C45993B839CEA0C246CE736DE1364E84869357B7AC52FB2759071EED551CA4FB20366A8B8C997C39D56CC757749078A4AE64ACF44358EBE7001AAA85CC14755182A7E106748612BD44B93A6E3A2FB4909523C549A8E92A45E1C99C93058AC35CF7B649C8EB2B633C683BC1C6EDD5CDB2685ED4D03AD0627788DB6BB129128C83B17DC6AA98B7387BF77229C245234348C17C0810C0AF74295B357CAD9DD5B0093A998B87400853538BB13CB502CCA50A9C513C16877B9C4A0920AD291AF1689A662713804A3DB223BBCE21750892B692B91255FA552A814D99F94D2029B6645044B8B6B97F28AFDD55358D180A745AB46D484DBE85090518C1A3BB78C8926BC8D2491B323F3C50B44E3C42B3D2AC43D3ADAFF808C0A7625B0BA4F82A112550A81F319574EC55D46A8DA182C438180101162311933950E5544F65ACF871B50F838802D64A7DB224DCA89E917B3021580479D860774B2792CA60792937DC561776697F16C2666744C0CF81997D073DE893473F22CCCC4C4178572B53270D589C5B87529FCDBBC66B1582B15207F83B7C21C02E50114950C6C6E2BC3CFB3B09CD1A0B125A1496AB45E9E2079E423C22265E9AF17C9929585D32BC04970324B275E01154A261A326D62CC1EA7BF2B5AE9AC2BDFD494DF7593BBD6161DEB33542180B21E485B461750B74056298AB2FA062D22C9E82E32B4222AA17F8AB48AB8EE9B54DF0B4482D9C0587AB2F310957D65735DC26A3C8E816032184BD7B545BF1C50D554E002533889A8308612DE3CA103CEA6AAB1CA647512666160C78E9064E3980C4D250F838A48703003EDA1A07809874F6BA42DA7DA43AB1CEC91608781C7615131C67C913C640D532A55934640FE6A06855662EB70A5E0224A014B5EEE21827D4363C818268FA5F80822F9C4A9B95252E056B4AF1787BF45253971A6D7E78756B0857BF3A017DA3C203E00966E331DD314B5C1C216A983F28C0400B86509AD79A15B350341B8F38BA8FF06C62FF8C53DADA593BC06A8CE97E78302899821348292F28E3BED65C4D79857794AB0EF2BB1678D52A5F9238CD86BC9219ABB0D09961169EB4B9C7AFC8BA050988E5A13404A95884D9C4517450945B495242BDD7100444B8048BF880BE987A0829CC8414A4C4F15BD24451C8096EA932CC1D9C98F7CC840074591D87BE41C51925CACE4DB453CDFB18F19A88BA326CB5E0CA7C01728C58536252C9929217C6F810919A8FD766AECC75B66B5B0407CC085ADC63B445C895B54060E881359ACD26B77E00302F7A862D02D7C7FCB443011C7BC333364FD34154FAB44A64C5AE634E63951EF5C3B33B43C274F6AB6FC68539481A4D774981B10170021BDE0645856C996941C509001818E9247F105BDA0113C97C588C24A3815001CE055F83C685BEA9822687148BDB79A673620C8708E2D90E1B650BA2C52016C5B2951CA349C83DFB0B73519A22FEB8B456632F339369250056BB2BB436C66EB26A2F765708560A4620C6727014221BB439BC9519FE42BEC1F213820787D04B9D28B450A53717F921540B738464A6B84C136B4BE1CE274C8B27C229324629A989BF986A71F4908BF277A0A70B664F6075B6FC20B15AA95DA17A04BA4F300C28F76A9F3AD6676C008DB7A1B62E6A3EB84C11FC11BEB4025A6AE2B2F7CC1105196701D95EF4AB11EE3B549DD1363C4A2083B0C120813731B897EC8A9EFEA6359E100C39F2455A3596562BA54C7364FCC798B9274EE3249B67637CE9649DB6313598B676E6F136CD17C656A60645B9601920A05D8234DC1715E4D70C77C27676EA927019B8952978A1EB3214DCC118A7B7EA5512BF654D84A36A242B6D47F256776184F6902F02948577ABBEA111AD09200DBC482387F16DE5D38B36ACCF4EDBA6887B6D0E88CBAE437FEF771059669E1A3AB76DE335D5F703E039457123203890917C0B5478DA186ADC0E4D2329A8381ED3731E0205700F585A20459952B3C59FF33E6BF3CA6F6130DF815159A6BC814534188B136AEA22D472C721D897D6D1A1F776278015B2C94CB8651809B399A62CFA750977A51529A841FC3E91DB1549B28F3F13612ABB5B58452A9092056E43620FE2816A099C01709E9DEA7016249A81416516B28B2AE956F52050466BB8DC8736B93509F84982D739552969765130245E406152917F48E740C8A5C27500CC9AA691D9BC4A4F3524A57C5B28B84C95A405DDC2BD988B2AF116B8BE38ABC5818FDBD27B9E826AD72483562A64D46347E6668E7EB5519D462DB5953CC502AF1DFB8405E620995A809FE32DF9B6AF01941D0DB51AC1A778D7B5A5719839E9996B060825C4C68C376A24F5D3C1FCF3C7D179B545F294B7324AA3347F99F8BFE4C6C1A7E116667A6E0E22063456AF8DB9BA2C960C33414141C310900012997793C7842A09993F176A508AA200CB3A79CDFC8BEAD352B66458F8B6AB3302AA9002B17FC9CA10203FF753C6F576535A1B2604E148826C2C801A15C4315C36365C60EAC6E1401E5A0B634143AFA29415D1CA0083538429791C36928360FA1F0EB0A4AA351DC39C32C754A556F488B910740917B634A20D9A61240407996F905A45FBADFE0467A37BAE36999057F9C5AD09C99CABA8C745734DB1B5E67499807BA0ABF867D3A4793BC2732BA650676CB2901358BFA979B7D8C422BB8917E2CF8965999F5B2136D51B9079B40B9A67F8739BFFA67C0AF19966067752D19C22A5CBEE278998C15F4009B748A4630418A337129FA93131A4B81BB3D98E69EC34301CC2F17A4D09558BB9FB4F440BAD6C158466C8971F4B58AA8682838702F4D5821F4AA740F726FEF38EE5E70C57C1786D879DA387BF63062EC2839945F39C976566B47C98DF051354E1BC0422697D5208C811C639114F66300913D23EEEE1A8755A52C82912E89B708926526DB39899084A9F773A83B0A4ECD6AD9FA338832263C813AC3EF520433349BAF5084BBB90E3C5179F6A775A72473BDC4C0426C8BD14560169866CF1128A7870864C08AAC98974F193210C4C72307C25D4BD83C2CB91E164AF1BC682839E0134A12B2959CF88B6152C63BF5850C751319739832761504EBCA126F8920741A181B5512A0222EE2761567519EF0A91CD36AED025898E41BB81F19432919CE7B5B8C4507D77D5CFCD78348FD41796D531186774AE11439DE82EBFC160DD36900FFA863D58616F9C89FB9BB070764DA9B090DCC5B5A10860133A5CEA47C3F1A42012DC3D0AC57735A4D593D24588B33E8B4074698EFE3630B41CA907897D9F3522E6EBB68AAC6918DD4C48498DC09B2CE95D956DDA724AD44CF09396D0F26D99EE2DC3E2E1BC7EC866D26C3EBCFB89AE9F89BD2C48DC7EC6D96F12057501FB4419A3DC2A050730" + }, + { + "tcId": 73, + "ek": "5862A43C300920997530B1789ADB1623C23355A7942A433608314EDAFA0CE5A38F19AA91B5670106B575BDD199C534141A7A4312322CFBB8A9EB0C9D1AA4AB598CB097187F48385E7535BDC386764B040A7EE976E306A137BC3EED363BDA1284A1C2280B9B273371BAB0320E2BB195546B7635623769E0B320156E3ED934EA93CAA6CBB8F3B9AB6694184D517C66A711F2220F575C4503D601E148902E72310AA2416C974F90DB370E6A35243C8C142553F0A294CE915A264C00E9D4A72FA334A17098DA5910FE6611988C145983BF83312825809173715413FB4A36BCA5171691125A58B04522E2C4ACFB04696FA5BC5356AF3761C9B4F659F6D9070BDC4825A62E47255D5E69C9489AA17B547540EC95987AC4C031A624E7845504B0DAAB2C4C0445159542A3E920A0336CDD5284B1D48BAA0127C0820E1974BC0C0841066B6B71C13800F08AF3EA639D3AB4BDA0B27D08A46E21B2F3448D4EF0B98C7B168E000E838A0831F58FB0392D7AC8C77A18B8CE523CC964C4E0469D2DE02F40F14B944BC5CF1344395BA66BF1CFB48A57BAA758BFECCA7A1AA0E4D8C700D3C22C10B2A08A94B44B232CF0505D0B33D0A15AC1557164A98A125440920CB0413704FCC17EFEAC88DE8B8250C78DB1876ECBA914C6B22B30137FC3A84D91928353127B2A601F11327A92524ED5C24BA63A2C64896C298B43B7931460288C5A55BBF0B07C0C99A79C8AB45CD2C10F87466D679E9A31C1D2D2413EF933888B683BA5717508C37837AA9DAC4E58659D1B2B49BBB1BFC7E4C73D46CFF67A01563587B455785B28CC91A0B0C8586D0CFBCA909821808A390C1A9D35D81A802836044B94B676C22F4CC2730052C1D52B09124AE42AAC22B705C147CE7A35A7D5B54C1B2A34B82A7282D9BC883A53F4883297C98D42E1BEA540C2B65CA7FAF4287D40279CB63381EB493AD7C6FF3454F8672AA89AB0F14565EB5A87B7F56A9FC455B8116D2860422FC6A60118648498BE02E122C166096EFA1B978189431286E4B93036E167015CACF46C402347589B5C046A25184AA383B16BB5017BC0525B9B6324B0B2344AA1F59E4202C6D6521CF0A5639046892AB2C468375CA348160690690B74280A9727A3B50834780990725148AC2FE46AB93D9530A5876DC8607F8AAC5FA48752D9491282CB46C029164C0B78CA7192F0E52EF2451CA275C8F1C7412EA65F9C5490637A919A766AF17973DAD6A140DB0EF9E73878E67B0AF9C781C57B7203611354B4FD755C5095B9CCC7826DB03D43E53FE2B05419DA8B26C827263009A6A38A0A38281A0862102BB959776F5352105A8907DEB36D6C248178E2BFA88792B1817B716643B104B3E4607CD4F9B2AF2A84ED50A90E80796EFABC0F06A8DAAB39BED937B2493DDAD0BDED9861AA78B57DB2845FC6A66C2905D9E0B07DD3690CBA39D019C06C87BAD9B819424A4DF580AFBF2C6ACAE1CBDE248E48310A2FD3BE00872D447AB292D266ABA36AEC268F96ACBE687529D4D48B5B3348D2265DCA482FD345B730E490559A295F1A49711C24BE228C7FB38CD49743FE8A85BB30765F719AF5B3CB34BB9F8E3586088B5F49713552B07ACCE0487C29793421B817FB83E03C6F96A960F0E87B4FC158192599FB661E27B074DA0A53E09829EE3444848420889145305AC30F182BC5631B0ED4ABF2DC8842F7729BBB428D0C172532CE6021552D6ABAAC182AA13C52B7008582D156F88742CD59A047B59BFF5B5003D07FE523C8AFF0B3BDEA6546E9C6BA838100B98895A6CDC3319262AC99487831C615833604A643A0A8DB847CA899495A9C7DF73B87C778154C63AF34AC59FC0120FCAC1DA0E504806622E9E856087C5059E8BD07A34858EC13AE81B99DD6C320870F6E9568440B1618B8ADF61A6E4B9291B7CC70034C7A79526C55596C96948B13C74659EC4BE7B592AEB470AE6A3EFFD647EF9C7B55A2A53783709849A06A901AFF788A2F69781E5A8614C26DC458563A6A23D202CD6E775C6404149047C9F8E981687BB8145012BEB2422174A3917000F7B75B2C5B80F1FC9BE6FA91FAFA419ABC3008035DA10131D3CA63CF714B5DD6941AD741AC87A728AB241214484EC744E81CBFA56C833EF4454249225F6CB8D201014EF44F50A230E49932963603F9E4CCC5E94B9ED68422AD989F35B08CB3BC28A5613D823D60D321DFC0B8B776B8423A4A2E7E", + "dk": "CCF934F74602E41559B35A9C4C05C0637C64EEA419E60576BCE55750B6A7F896227441A17EE1CC28DC31C5F5002FB6670963BEF85150350B944F2591E59CAD9F6B1A48A21F00402B55A7C683103153C169F7F3CC03D69A60E08FE5374EDB735FE2E4CD53856B6770A81A2365780C983EA2A44FB328888B4EC552903061914713C442C532D9FA19BA199F67E894D67A7357DC15B39323BD5CAA16643E33E67FBE6169B1D349C722171529B476D8951CD17854F84C90808E19F17314C07227D87FEB852032B4748FF89C408346F6402DB4D9C377E35BE8B18FC8D49F8E946185C7236A37A12150913E8A33AF48599E1826DC6275FE8A895F14C78FB27ED707B538613412D52D97B584C9DBA3A603837E1ABC3C7A7335C0870F816F8D78529FD5BB2BF97278F485E49B7F644904F481AA89A61913C3BAF514A0B292BB074A716337A2AC9614A5F36495A3974BBAA208C2610613835974564006C5496263749B52EFE9A1A6687B65778FC21B3187ABB1F2A45C5BD1CF90E543577BB52E55453A42A38F53283A7A8267919BC32C804C5A19795631F9583E5B3C0867E6C5213C7E0B01454F8098D004478A6C39B7259AE3121E44095E4D661AD4924BE0F02505750B1CFA3B79A46E4E6574348BBD2D557259323840B90BA4777528A2C73DA6C1DE9728CBAB269C3278857028BF666282E63A1F22B059F986C6C3794FDC04FE572440948507AB76EB636D1DB76030184D078B5C42C469521A2203FC756420A5CA54502DC79616307D8E110532B559D2C7877F7BC739A3CF75C141A7F663E654685D14B8FAD721B2B174D6920C704ACD2582A6D5D4CE61FA01D11032E21C1392154EB16A0C94DA539533C53DC115D8F383153B5373539890A206C4409A6AAC2BE3A4B66D9B6777EB657CFA200925257940A9D210C98957CD3BD7412B17C94191C26107385EEA548124294F29C643DA5DDFD602283A58DBD2150D24BDDA990720D1211BBCBE1BD50768A13347C027F1C19EEDB25AEEB3BF6DF312F649341B7899FA159116D342F4F938B5D3CC2341887DF274FB91245805765EB26616E07058FC0AEC2158C4476840ECB1261155C2B79162341BB320209C3636AA801186F08978433CAC8A51155353A90C5DD9EC6A5E21069DF00F292B84F8F526BADAA256C985A51929E9E63DCF585C6C200EB1E1971DF9814498845A1A107FA854E549094705A19E32C8949B35DD46B7A9908A8F9198E7319618E26E81919802D73566654FCDA3AD864A8F19A614E28990CF4800B64BCDCAE3485037A5D1B77615B428A996A9427C46D6A336A4434024076B2101393ED75DB4147A6AAB53CD045899B55B41484EBD850257D5405BEC89BF6274DAF65E3E50AE870A98E8885704E252C85B2FB84846EAD992E90C98151B47CB50245F69BCF1636DD227961B9A96309AA827501AA6A75623796DE60CA7E80371BB09252DDCBD48279B7A681EE678807F1A4E3CF92F7DF62C5D287DED6B598D51B3FA6B024ED0012CC5C4595B328BC07BE919CB22D3842102BF26D7534149260B2B346B3A7E87F1284DB41597E63DEA470B1D726B63045A802928F4B632800487D04C719E0A17C40251A3427862D8253A8C5CB0E91AFFA7B097FC384D33AC89E167F6FAC3AF180B9D183124CB72CB5A7DA84A077C843F72084AA0729609EC0E10A6CADB341DFB3149ED6377D2A3AA4B974033CAC5701120DB272EA414220CCA81C7CA0DD2F68F239B1DECB6A63118AE041A73A8E9A64B05A2B2A44C3821AE4D2994F32830FDE06589063DC30A99C47B9D943A64F6E33DC3D913D699AE0D1655BA18A4CC7A481F068AAFA13CB2CA90A02570BA8C4B59A25038036319D63506039ED9285184F0C906F1C797131A8E677D62E450B0C79686A69C05C64616663FF8716B28C0476A4AAEF7D9403539375F374B29D50447146359D75F7BA10C556530B8B51310C05C9B396F7DA348D0441C900C86EEEC90C1869F5A2A5835B3245F700A7D68991BE70EEF87B716EC8862E3B077B73B8BB36888753DE6F9B80F219A5C69B653F246A2AA6B1A728F2F8C393E65307C367C546796448AB8E1250CD9BC258DD7243CD4172AE90FC324ADC250CDA10598D45B06B47B4A85641F2BEA2711A90D0E88279B801A2AF906CF407B8C223FFCCC43EF01391B25A65862A43C300920997530B1789ADB1623C23355A7942A433608314EDAFA0CE5A38F19AA91B5670106B575BDD199C534141A7A4312322CFBB8A9EB0C9D1AA4AB598CB097187F48385E7535BDC386764B040A7EE976E306A137BC3EED363BDA1284A1C2280B9B273371BAB0320E2BB195546B7635623769E0B320156E3ED934EA93CAA6CBB8F3B9AB6694184D517C66A711F2220F575C4503D601E148902E72310AA2416C974F90DB370E6A35243C8C142553F0A294CE915A264C00E9D4A72FA334A17098DA5910FE6611988C145983BF83312825809173715413FB4A36BCA5171691125A58B04522E2C4ACFB04696FA5BC5356AF3761C9B4F659F6D9070BDC4825A62E47255D5E69C9489AA17B547540EC95987AC4C031A624E7845504B0DAAB2C4C0445159542A3E920A0336CDD5284B1D48BAA0127C0820E1974BC0C0841066B6B71C13800F08AF3EA639D3AB4BDA0B27D08A46E21B2F3448D4EF0B98C7B168E000E838A0831F58FB0392D7AC8C77A18B8CE523CC964C4E0469D2DE02F40F14B944BC5CF1344395BA66BF1CFB48A57BAA758BFECCA7A1AA0E4D8C700D3C22C10B2A08A94B44B232CF0505D0B33D0A15AC1557164A98A125440920CB0413704FCC17EFEAC88DE8B8250C78DB1876ECBA914C6B22B30137FC3A84D91928353127B2A601F11327A92524ED5C24BA63A2C64896C298B43B7931460288C5A55BBF0B07C0C99A79C8AB45CD2C10F87466D679E9A31C1D2D2413EF933888B683BA5717508C37837AA9DAC4E58659D1B2B49BBB1BFC7E4C73D46CFF67A01563587B455785B28CC91A0B0C8586D0CFBCA909821808A390C1A9D35D81A802836044B94B676C22F4CC2730052C1D52B09124AE42AAC22B705C147CE7A35A7D5B54C1B2A34B82A7282D9BC883A53F4883297C98D42E1BEA540C2B65CA7FAF4287D40279CB63381EB493AD7C6FF3454F8672AA89AB0F14565EB5A87B7F56A9FC455B8116D2860422FC6A60118648498BE02E122C166096EFA1B978189431286E4B93036E167015CACF46C402347589B5C046A25184AA383B16BB5017BC0525B9B6324B0B2344AA1F59E4202C6D6521CF0A5639046892AB2C468375CA348160690690B74280A9727A3B50834780990725148AC2FE46AB93D9530A5876DC8607F8AAC5FA48752D9491282CB46C029164C0B78CA7192F0E52EF2451CA275C8F1C7412EA65F9C5490637A919A766AF17973DAD6A140DB0EF9E73878E67B0AF9C781C57B7203611354B4FD755C5095B9CCC7826DB03D43E53FE2B05419DA8B26C827263009A6A38A0A38281A0862102BB959776F5352105A8907DEB36D6C248178E2BFA88792B1817B716643B104B3E4607CD4F9B2AF2A84ED50A90E80796EFABC0F06A8DAAB39BED937B2493DDAD0BDED9861AA78B57DB2845FC6A66C2905D9E0B07DD3690CBA39D019C06C87BAD9B819424A4DF580AFBF2C6ACAE1CBDE248E48310A2FD3BE00872D447AB292D266ABA36AEC268F96ACBE687529D4D48B5B3348D2265DCA482FD345B730E490559A295F1A49711C24BE228C7FB38CD49743FE8A85BB30765F719AF5B3CB34BB9F8E3586088B5F49713552B07ACCE0487C29793421B817FB83E03C6F96A960F0E87B4FC158192599FB661E27B074DA0A53E09829EE3444848420889145305AC30F182BC5631B0ED4ABF2DC8842F7729BBB428D0C172532CE6021552D6ABAAC182AA13C52B7008582D156F88742CD59A047B59BFF5B5003D07FE523C8AFF0B3BDEA6546E9C6BA838100B98895A6CDC3319262AC99487831C615833604A643A0A8DB847CA899495A9C7DF73B87C778154C63AF34AC59FC0120FCAC1DA0E504806622E9E856087C5059E8BD07A34858EC13AE81B99DD6C320870F6E9568440B1618B8ADF61A6E4B9291B7CC70034C7A79526C55596C96948B13C74659EC4BE7B592AEB470AE6A3EFFD647EF9C7B55A2A53783709849A06A901AFF788A2F69781E5A8614C26DC458563A6A23D202CD6E775C6404149047C9F8E981687BB8145012BEB2422174A3917000F7B75B2C5B80F1FC9BE6FA91FAFA419ABC3008035DA10131D3CA63CF714B5DD6941AD741AC87A728AB241214484EC744E81CBFA56C833EF4454249225F6CB8D201014EF44F50A230E49932963603F9E4CCC5E94B9ED68422AD989F35B08CB3BC28A5613D823D60D321DFC0B8B776B8423A4A2E7E082C4958F06DEB19CFAE2A6467AD067D070F6EB3A5DA7A7FB9F99B7295758BF89486A2BF28218289412E2A6A2AEA61AB58D3FDD0D90DD2A4630329986493B5A2" + }, + { + "tcId": 74, + "ek": "A402772823816B75096D2566E4B75A5014A2B1496F7FA92381011786586DCEB1ACDAEB4E6AFAAC2B0C7225BC10D8151E711B1ADFB8AA37A24385958549E1C62179042523A03C045791F1247C486848A81F9F5839BA2ACD8D34861F432576FC0CDF31B14A0261F1F9B6228650FAD269A4B3775195777E67150366BBF0525461D5A875C33CCAEA5FD5F53D175C554B0035037B5646629AD550C9272894639003BE800022B826EC1B99F3C40FDD658361B7B32EB9066A78898A6738023502F5E8281F63008C003EBEB39C4D8100DD9A9EA90A35D90C2040432D2D794BFD8A322092CDB3B176A4F5CA6E40C7718B5FDE0590F4CA1215532BBDB5105706BEAF96B16AE31119DB220E717F014553C36C9CE1F712E0B444647071001610512A9404B2A65B773E8662BAB883C48168A33F9B97E61C1AD3D888E300635BC86BA5CA5BF1368C85295D3BD767D5B6CDDFF211A63809188A88718A2231880E51649AF51053689284ED1577FFE497623826137478621401ADF96C5D810BD108916CEC12DC6045B2D2A8957B37C5173A74B06537D658382CAF8883891CDCA484B55D4393615BB2C206695DF337B7721C8DCEB646819C8142524079DCB31F31455FD475027B1C0D3B7F6527AF15A44A368169821274A9797E3266629A3A6CBB6558FC6A3BA52216BA166D3DE215FF91A4EAC5756A81176DAB74C5CB617E4CB9F1DA3CA9E1A83DDC1888F302347C4EF2290F0153919AFBB7AD43B5E4A6279A465C2064C47089C35CD06576006BEC33898BF18CA6750132136D13D45E62E41A9C9952D6C79A56A585F824A8AB1A025F7327E571501BF47E9F9C00291C7885656976C14801B529D2E2307E1C1D44048A301508C5E20A13B626E53C6A021BB5B5F9AB946A606300A551413267D7CD14C28D8A57CD10717BB0492F140A65169BC89DE41D65A37F069CC830D90A784AB5DAC5746540BF7D8C56950CB80D67BC94754627F59BA8B20811131C175082A2C3857466A447F706FCB5181FC660402888793BC8DA492128946A2DB4BCDE31378CFB18ED499FDB51C7BCD3645A57BC94114FCAA94C3E73A50B74C19977CF74087989B2489FFC3FD7111C2D9121E80439DFEBC4E9E62240C2C9C73AA291D02B05A608C87B78727B6ACDF268F2CB7FDD59227B03ABF1132AE4A5915C73AD428787F7C3030D348057F1529CC1A6892C5799B1231FDB8C9508709227AC3A868924A3449228064E0A55A72270DD44B0BBF72F4705386B3C3A541244D7E20948305154B84A1C230C465A02F5CC57DFEC010C988E94B2AC13531659538BDD912D4173B4EDE5718FF09E0327CF06591EE6619F64562A4A20028D13219F5575A1300A32E60E546BBB0F51A01087097360CAE4F55C31E503AADCCEC5BA54DBFA18C664073B3C0F8ED06D6EDC619E1B1EFF9A54AA165E49D5478F5492F2A71EEBC268BC9744AEEB1E2CF27A13D27F0C2A2F4C6609162C8A278C8AC23504D4659ED0366D1AF0A37B9C710822AFA28BC8FD86ACF36C48B9B7849CD95AAB139C19D05C9FE9AB59B80C62D398DBE865DB9A4C10528EDD9231E8A7A5D8F4A1EAC46C66A75E89CC159284603617015AD60F76E6CA223B29B8911A217A1D0792482CCAB8F0067BA8A0220BA929D9B8A877B4772706A40953CB4576353B7B99DF821806384AE4683A03B42BE2F57219C02F5B385B4B6624D662BC7B2A543028B1DFF6BC1B5ACBDB503881E1B22356489281C113C46F61888FD5958419683430DB21A9C6AFF6C83B25795C7B53A2CA6C7456E527265AB27F1178D401742729869879CE0D9B4AFC694AF6B0081AC119EFCC7F15957F8A54B2A4D50566E479A16992051BA5D653A608A6075AB96F02336FECBBCDFAB42A1FE16EA8055787EA1DDFD48841A77794929AA19361281919C9744B24C51E5693B966010B9CC5CEE7356A92DCC148981B97A888E7C6548A1603B4B1C9A5CB4BA7A6C8408227CF207508B145FC073A347666DF0C6F1F8B5F8CC53CA49561C557A0F1166BB42140AFEC308DFC58B8A01B1BE8C560F8224D81C33F42A1536B2C09140AE58911DF829414C5814ADCC784949F9330BFA2FC0B4D907C1D297E5675B9887C6A24188FA4B0468C6B07C5BBB447DAA2E85291DB617B12D0381B2C50B0A9C9F782B955C71D370B1D4C4B34058C45338FF987007E97F8CA564511A6DDA682BEC225749CC570EADC3F868D87F8180C", + "dk": "261C3DC472A579194AA2572AB61000A7F67667D67AAAF26019541C825C657A15BEF0A075DD661DCEE0BC77251857C22F795B529B9BCB9D572143799D7A058F92D63FD517A4AB6C2B53A7044A7963E7000DF0B96043B8BF2170996E2BA4E02817851CB91E61CB759343DBB7AA763991810C7604C797F534CB73977A341771ED2C31AFD557E5A9A79E07352A041D9F605322225E1CB797E2896C384473BDACB05DD1382E186BA6338D5F28C920658C8720BBC5822F36FAB9485C714E116E7B0991274B8688AB95B80420EE2B428A07C15CB9C38127859CDA7AFDCACFF2872BC658A3CE1B9C4F629A63B32CA6E3239F473AA7180DDB2521D2DB3A362A0F62FBB372B34FE2580F172C39A5D78DFD9566C8FB71CD116879ACBCF3DA5B2E56CB6C20777ED9B9A085BBE640953D5637927914E71B95063C2A2940C25701AB89A8B2B174A7D3C0ADA72AC4103614D907B9888A36BA3C818B11418A3B7633D34B6C81B07877A866DC5366B9338D57263EC98622835D99132E14A82DDC306E0C54B5656515055960020CBFC90B4451EA0FCF7B526BB1B11AA3114CA836EFFA15473B6F25531101C5829FF9C9B6691C7AE0B1FEFBB9681367E594230299C1C65853F9F4488FB0769F06C435850C2CD117F7761418343BFAFA7F601A26CC392B1BEBB0E2E36E2994A9ED27CC46442FBDF83BC3B31B21CC9B99937482BAB93E906170D71564719D149A1F36682DE1A1443DE677BB5920E8BC6F5D0C61F203AB692A4B7AA13D7733CE5D3ACA9318CBEAD29AA1B52AD5E15866E9B4F8F198382C984F9B3FD641A2F5CB25067477C8986CCA9A4F2DC7A233A234FB3AA6489040059B8846F979E6EAA21FE9680F735EDCB14AA4C0C334EAA1D87A0531930B9BF6213A33CEEF0C86F57325F79B5585FCB730F111915A9361B1B0FEE4A6C70C96D6E64A4C625FC80B012AA42CD6BABD38A3796C96A6B21899F313B757063600AC9E24539D4BC64702174C61E2646AE14C357089ABF36889F17DA48870BD85B514937682E3046C68B46E460CACC68A83B6744C9A83444592E28968E99932A3CA125086C95231BA69534E0D918E4AB7C404274A3A53A2229465664278B30435F41A83B99817A2781EB32B9C0EE969C858383E8B4A21C0C2BE94B731E17516F4258D0A0067E51E111184DA820785F312094B1B33850D38F7A5C388BE0EFB6F9B7A0E4933386F51BC07694E1464BE69660A8315156FB7202FA1BC68C8A5F934C76BEC0C4333C06981225B79CED3F2138B2492DFEA93B349309B94AFEB6434F6C69177762846206BF6F61C6467B62F96264FEC209A46517A93628F46C22C95BE151AA2DD280EC9789A1415B6509B4B8E66CC8F3A87EF742F989391AA13424259922C947DC9D0256B659ACCF34CC2788C49A6A2311332BEE6813D3331D16A27A932677764C837E46BF9095A57D51057C379E7652C908BC3BC8052F0C70053499E9B1CB382494F7858BA8C6BB5BFB31EDDB31DCA5480EAB0519D831198B36E4913CC9678168151A4D8FC872052BBF315A05DE098A2FC19DF70785DD15E05432764E857183B33BBDC9EBB6B832477904E8C628FC41A79F879FE153F91196CC11BAD5BE356A02503D303B1DCF28B13F54FE1D18C87850630276A42923E38B4257CE4A987B97BD05BCE7AA345D2023F44A769CD5AA9BA408100E2537020566CD4597CC361898C357596C070A530416543CDCA29E8E798E4F2043B45018A36AF74860144623FBC885587901C38E02A10B1B3780B27011C20CFD39DE7A400D773AB6FD72FB86B3C404603FF25B7FCA24022044B9C214E323BB5C5E899D5E91732CA58F3C6277A2B69126694E0AA3B841C4DDD1C1CDFEA905327255BA1CFBD491D4764BCB5E0815D99AB6D99C9772ABF507BCEFC6177B118762B391D23072F421CAF0060156762BE4BB9CA38D2BA990668F7E37B418100EEF621CED56E27E95D66769FC16B71F91B04115C664D59C8DB440AEB51814D813BB08097A8F7783998BA00DD1D33E9185E6039F4659E7CC00D40F0BC359815B2C27C3A3B10A4E3ACD2B3560480B0279A491D92691471A68FE29C9CF99FC408CF0E31A98C7BB283929D1C671659B91820D86C4043C9D5071861EA6810FA7470C1504BF67013296DC78993934202C3394AF0E961FFB0191AB877A402772823816B75096D2566E4B75A5014A2B1496F7FA92381011786586DCEB1ACDAEB4E6AFAAC2B0C7225BC10D8151E711B1ADFB8AA37A24385958549E1C62179042523A03C045791F1247C486848A81F9F5839BA2ACD8D34861F432576FC0CDF31B14A0261F1F9B6228650FAD269A4B3775195777E67150366BBF0525461D5A875C33CCAEA5FD5F53D175C554B0035037B5646629AD550C9272894639003BE800022B826EC1B99F3C40FDD658361B7B32EB9066A78898A6738023502F5E8281F63008C003EBEB39C4D8100DD9A9EA90A35D90C2040432D2D794BFD8A322092CDB3B176A4F5CA6E40C7718B5FDE0590F4CA1215532BBDB5105706BEAF96B16AE31119DB220E717F014553C36C9CE1F712E0B444647071001610512A9404B2A65B773E8662BAB883C48168A33F9B97E61C1AD3D888E300635BC86BA5CA5BF1368C85295D3BD767D5B6CDDFF211A63809188A88718A2231880E51649AF51053689284ED1577FFE497623826137478621401ADF96C5D810BD108916CEC12DC6045B2D2A8957B37C5173A74B06537D658382CAF8883891CDCA484B55D4393615BB2C206695DF337B7721C8DCEB646819C8142524079DCB31F31455FD475027B1C0D3B7F6527AF15A44A368169821274A9797E3266629A3A6CBB6558FC6A3BA52216BA166D3DE215FF91A4EAC5756A81176DAB74C5CB617E4CB9F1DA3CA9E1A83DDC1888F302347C4EF2290F0153919AFBB7AD43B5E4A6279A465C2064C47089C35CD06576006BEC33898BF18CA6750132136D13D45E62E41A9C9952D6C79A56A585F824A8AB1A025F7327E571501BF47E9F9C00291C7885656976C14801B529D2E2307E1C1D44048A301508C5E20A13B626E53C6A021BB5B5F9AB946A606300A551413267D7CD14C28D8A57CD10717BB0492F140A65169BC89DE41D65A37F069CC830D90A784AB5DAC5746540BF7D8C56950CB80D67BC94754627F59BA8B20811131C175082A2C3857466A447F706FCB5181FC660402888793BC8DA492128946A2DB4BCDE31378CFB18ED499FDB51C7BCD3645A57BC94114FCAA94C3E73A50B74C19977CF74087989B2489FFC3FD7111C2D9121E80439DFEBC4E9E62240C2C9C73AA291D02B05A608C87B78727B6ACDF268F2CB7FDD59227B03ABF1132AE4A5915C73AD428787F7C3030D348057F1529CC1A6892C5799B1231FDB8C9508709227AC3A868924A3449228064E0A55A72270DD44B0BBF72F4705386B3C3A541244D7E20948305154B84A1C230C465A02F5CC57DFEC010C988E94B2AC13531659538BDD912D4173B4EDE5718FF09E0327CF06591EE6619F64562A4A20028D13219F5575A1300A32E60E546BBB0F51A01087097360CAE4F55C31E503AADCCEC5BA54DBFA18C664073B3C0F8ED06D6EDC619E1B1EFF9A54AA165E49D5478F5492F2A71EEBC268BC9744AEEB1E2CF27A13D27F0C2A2F4C6609162C8A278C8AC23504D4659ED0366D1AF0A37B9C710822AFA28BC8FD86ACF36C48B9B7849CD95AAB139C19D05C9FE9AB59B80C62D398DBE865DB9A4C10528EDD9231E8A7A5D8F4A1EAC46C66A75E89CC159284603617015AD60F76E6CA223B29B8911A217A1D0792482CCAB8F0067BA8A0220BA929D9B8A877B4772706A40953CB4576353B7B99DF821806384AE4683A03B42BE2F57219C02F5B385B4B6624D662BC7B2A543028B1DFF6BC1B5ACBDB503881E1B22356489281C113C46F61888FD5958419683430DB21A9C6AFF6C83B25795C7B53A2CA6C7456E527265AB27F1178D401742729869879CE0D9B4AFC694AF6B0081AC119EFCC7F15957F8A54B2A4D50566E479A16992051BA5D653A608A6075AB96F02336FECBBCDFAB42A1FE16EA8055787EA1DDFD48841A77794929AA19361281919C9744B24C51E5693B966010B9CC5CEE7356A92DCC148981B97A888E7C6548A1603B4B1C9A5CB4BA7A6C8408227CF207508B145FC073A347666DF0C6F1F8B5F8CC53CA49561C557A0F1166BB42140AFEC308DFC58B8A01B1BE8C560F8224D81C33F42A1536B2C09140AE58911DF829414C5814ADCC784949F9330BFA2FC0B4D907C1D297E5675B9887C6A24188FA4B0468C6B07C5BBB447DAA2E85291DB617B12D0381B2C50B0A9C9F782B955C71D370B1D4C4B34058C45338FF987007E97F8CA564511A6DDA682BEC225749CC570EADC3F868D87F8180C58EF799642D81D1484E448728DD347B7BF16C8B8D8A521F91421518B17E033A44D653FCDD55D3D5F2E3C6B30F451B3DC57574C843ED8B03D63DEF49C8804869F" + }, + { + "tcId": 75, + "ek": "8B37B63DEB2BB6C198185B873917249DAA465BC4092BD889D3E517148B2A0208575F41751CB6A75FAB3832E1640043BB1E20B374B7ADC3E4974C7B12A2B117541C00E22A3EAC96CAF0A9C7657399554B3EE87AC3411C424D0340F629658172CE5F929EC24B235518C68B7878FAC8C7EA689DBF75097673BA892877A3CA2A983674A9CCB779E4B2DD30A6FA138DECC65EB843127C50682812C56281CEA5A01A6651A136D01CE29C14398399043708A8D2170573333D93535B339F10796E3908BEDEC4481F1A79AED53F802A2220A73EA9F59D12A04922C634E315B45E8794B4A3111375C2DA3CBD334B6E8043AED1F1423AB693218C8F6EC88796A087B48A63DD294F66A20C5306BFE7B75C32E125B7AA6EC255C4F1F950BA45A9A9A3A3ABA76C562BCFEE0A7C2B2522B9512E19BC0651914363540BA3E16BDED6369B2412E26A4A9AF4854994917C778037D70D610C79FE7C2612C0086900848BF7BBAFCA135497B99676930327790A31C1F059093849419AD7588A2342C074604E3119DAE62952A6B515127C680098A674C4AC69AC204A20C915ACB81BAC30C89479128C19896828B335C5E932714B2E6F23861C349EF96539A5CA9F40782FA3402933C80EF71648A581B76A198EA62650BBCA9860077A3D715D6F238EE374CFCC3A92BE5511333B7F03981A08873D968B619DE6983FA42E4411A290D56F0C0A231A83C29A7557E3D2681A9A7DD8903D3FC8C2AA866810F475872755146CBA11183181246B1BEBBEA745A46672644BBAAF8EE702ED66081F635D1A126886F75B537B9004684D8A791874B29A268C04988ABAA3C51E2CC9A51D5069C60B0E6FF77E3D22A3EA39B74F328399B41C00782035AA6F94D866F5C6755600ABCD333C8F7545B4F9BD91B2CB5D4C63172454F4F3AA761C0D93279566CAC2CAA27227289FEAB49D08E5CDFF54B055846D9BC224A3F376FF763449D40D3DB4CBF02B55808A0B431606747399D3B76800555F1CF01A08EC5FCE2AB5C7318661135CFAD867AEE907F7C9793171BDD42B8B4A58B7B9066C523453DF5C451B7079DBA4685E02BC7101BAFFF47EC7124BF6BC929A9B8DBA318451607D497B0160BB255A36B89CF18B69474E2B7970339B879FAA47B00BC3F7AB5A8470AA803A4D57DCCB08D243BFF50A54742E12DA7CC209C610D68071A09BD3625376E2A03874B75E8214E60818F4DB4DE676B20762B03E94A0B3A3C252137E36A095F84387F6CB91A2A383416A54E9ABB7CC080131136D5A66BC03E59F3A46C5AD1821D2DAA21C75B68B7B437EEB4AD496AB8E013221BA529E7306398A5E767A3A99856E1A136EFDD67B4F6B60E3CC88AA836FA84562B731A7C61A4927BC3477F4423D9C24A38373DB214D022CB55596704F280371611EE7057245868D04D2494F7421D853683E6B4856C2931F2CBEA737107DA30E6E323D7FF381F2966809269C87D407860C47AE20583183322D4ABA238B84BD4909A41342D00AC9D9659AF6469700491346FA78C4FC5FEA08346A90B9E2B03DEBF833BE152178E006576022C69C366DAB29EBA43C2400B3C497086937655A34CE82F757FFB47042721595EB1EF2D998A4E10C4904146A306F7E593A3F348BBB7B201A244635B02D0B574B1027C823971A55833F07440AB43B489E179BADD816AFD6936FAB442882631BC86545062F7F497E3BB1AFB33137B72A33E10C9663237AE109A27C728692BC072F39BC631C74E03704BE6764B762CCEFA21FF15335C7910EB049339CA40243F8A9F0AAADF9B56D81DB8303713D69368DD623A5ABD5C1772231D9873AADBC2BE637C05E79B0ABE77EDBC20A49E17742F72E1F0678EAD19D805097D7BB8EF64735C239CC2B854AF9F08CCB9B0A6F2834DC165A05FA4BD0483164039E8284573273469ECCB53FCAC0A6D22FB8D8609C3A03BF555BAC30C6868219EE0936E1E257A0D2CC9C890DB7D5687D135102054FB6B0C225CCC184463B767BC0432CC02E2B077F9C4A98F8A4EEE10A9338A00184C91CCB12202299D76B7A0E7B649CE9A272758B12D95E983CABC41966D166CD3D2BB9E515A678338D725B89274306BC544959965487606F758699323C9034518EEF06394CD574592B99AB3A6255C8C0B1F0B711B9425C74A39923C1B3295D12BC72063AB16106518EA615DA7AEB8C69CD9DD6314F95043CEE6D1083A15E61AFAFF521C8BDEA985D", + "dk": "34D9AEB7F942339966E8FA85E150ACBBF04782600B292048E57A583E8AAC07761102CB02444C8230EB78E4F46DA412CF2D0123D4FBC2037631EE461D1657551CC46FA8524560B9C3C55A6312B4B3D6855C7D8700A2DB988574C86D2777B1911CAAD83299956186C19BB186A78158476DBC4BF3765675A98ED8833466C216E986974E151C03994B864079C5591598A38A4742360109C231EA0BAEA9CF653C2724AB763AE389CC3959CA4831B7354CD1310F88C51703230BE2BC3688AC83EA3977D1A7C7536B696AE94E2C4C98DD821BD59259DD2B40C4B73F54F18784779B19DC7F2E6CA04817523DC4638C68A012D45EF69B9FC0518E4062BC7CF63A22898A13754FF4A1227414CC07F887DF680E79B113B9F01E20601793153826781F5A5B5F1DC186846A9519D7AB05E70A73A876AE895E45E10DAB23BB3BC54931171B71A8383ECCC27EB077F2D2001F2541C574CCE73A9E01A6791CD720D517A18F161B225B277F58CCBA27225ED7A367353E5A3910AF1BAF3EF652DB862B7EE3C011473B21A1B58C9624FAC19141A994F36C4668446CF209A56A46BE3DD95ED9F285F4E186AA975669603D62E87422273731606E830B53EA1100CC034F502352ECC757ACA64E38F766E7A0B8621A025373C3B301CD685737F1974DA7832E83D2700859830C82194A25162B505B0799C04C174166A35D09DBCF89D58A7AE59841E9386AD1A012B1A4AB51114B3444AE015B5D73642398234F72CC48526A3F508965343D48A8112B0964B3ACC0807683ACD02AE84B639BCC7C7361C07FB91E69440D44F864DAC4699CC72F48130D9AD08785AB56328009EB1C3E5C2991473CC64F22341817BA9E857D477BA62D7B1971E52A2F21232A41C71B4B261D004A7B986C187233AB47CDCAEC848B21438B925950C9CBA404207E92C4DB425B096B00AF62987EEA57CFB4C1718C68E03A29E52C2D2F2683F87BCEA2685A9C453A752A57451437116C34ACE02BDBA141168BB9E1505A9E201264D2AA85614E506185F8377B6E6969C8F5B08960B390C7C942C350C208ACB03A07241B7B83B463AEE3C444B01369E8C61211BCFADA8DAA0B27B8A38A8381BEC7A5C3BFA7A14132CC3E17913FD52A362998D0C421257296365A64A717AAEC848C2999CB1F90AC77EB65E9C00756099221911B1A99A5048B81F5F622CE11582494B674E75FCD2680BC056DE747B4CD00697D791F42285484201826259414A80221D46F742B78D67C191F4CAA2311657F16765A629FF62949A361859DE7B7DE3119A8E99E59832F39432353E0BEE273AE909C0848390C1F472D44425D19D96A8C7C8CEEEAB4B8F9AABD3C1530D850083BB8F8296EF8718CDEBA879BDB28E34C2EFC7A3D1B669246B635F070B2E5D94703C4086F508FE008042D364FFBB742E2481EC58441A81C82C0534D1357C89419CF6B17287460AD509C4D91517FB1F0B117AB7B1EC0A3FEE857090998B007A3D79A89020568CBB01E23DB62DCF08D1379AFC36CA5EDF8051E66C462739C7EE65F8FB6928A9042B4490B79D5A384027B6FB956F1235647C23269206293DAAE52022545735845C32353AC70E9D451D297B2502A9993328D1210512C012DB450AF25E9BD5E9B8B76810C3C6A462285453EDCC3FE71241070B3ABDBB480775C036A99F798B27CD03751F9309247AE0C0A922F4B529FA4327896673846BE6B914FED2667A8EC7E82B11C5965BB0B021AFC45A1B9138A5B251DC159C64F8A4FF5A2CD58A6B04614A305D5AA0D4A82267A51071159F1C76B1938A10131C22D0C386ED743FA66CE763B243C40CEAC78CFBD939339782B1B019174F1B795E496CC75B45D37A6CC0450C5FC31AEA769007A7DAF84221F498CA9751A31199AC920844CEAC07F43075D634B885A53A93586C8520CB1B626A081C39A28ADBDCA0BE02B060999CB305C0E601601975C8E9C7B6D58D1768FDA9F0DBB041DF58C690C1A8ABB3A5DBB5584125FF9EC88EAB00984743413F53305F86FA0EB3780A25BFB3113B41A1B9ED9368A9B944DC387F6A096DAA460C24556A5B38191C8C856C55EA193AEA497A8AFBCC785C683B2B4935D646544801DF3A30EB9E2C6D4643D872BB284554706F583B55B0CE8293B26211981B9837D49896AA13EA5E85DA13452573936EE1B6EA0CC9C8B37B63DEB2BB6C198185B873917249DAA465BC4092BD889D3E517148B2A0208575F41751CB6A75FAB3832E1640043BB1E20B374B7ADC3E4974C7B12A2B117541C00E22A3EAC96CAF0A9C7657399554B3EE87AC3411C424D0340F629658172CE5F929EC24B235518C68B7878FAC8C7EA689DBF75097673BA892877A3CA2A983674A9CCB779E4B2DD30A6FA138DECC65EB843127C50682812C56281CEA5A01A6651A136D01CE29C14398399043708A8D2170573333D93535B339F10796E3908BEDEC4481F1A79AED53F802A2220A73EA9F59D12A04922C634E315B45E8794B4A3111375C2DA3CBD334B6E8043AED1F1423AB693218C8F6EC88796A087B48A63DD294F66A20C5306BFE7B75C32E125B7AA6EC255C4F1F950BA45A9A9A3A3ABA76C562BCFEE0A7C2B2522B9512E19BC0651914363540BA3E16BDED6369B2412E26A4A9AF4854994917C778037D70D610C79FE7C2612C0086900848BF7BBAFCA135497B99676930327790A31C1F059093849419AD7588A2342C074604E3119DAE62952A6B515127C680098A674C4AC69AC204A20C915ACB81BAC30C89479128C19896828B335C5E932714B2E6F23861C349EF96539A5CA9F40782FA3402933C80EF71648A581B76A198EA62650BBCA9860077A3D715D6F238EE374CFCC3A92BE5511333B7F03981A08873D968B619DE6983FA42E4411A290D56F0C0A231A83C29A7557E3D2681A9A7DD8903D3FC8C2AA866810F475872755146CBA11183181246B1BEBBEA745A46672644BBAAF8EE702ED66081F635D1A126886F75B537B9004684D8A791874B29A268C04988ABAA3C51E2CC9A51D5069C60B0E6FF77E3D22A3EA39B74F328399B41C00782035AA6F94D866F5C6755600ABCD333C8F7545B4F9BD91B2CB5D4C63172454F4F3AA761C0D93279566CAC2CAA27227289FEAB49D08E5CDFF54B055846D9BC224A3F376FF763449D40D3DB4CBF02B55808A0B431606747399D3B76800555F1CF01A08EC5FCE2AB5C7318661135CFAD867AEE907F7C9793171BDD42B8B4A58B7B9066C523453DF5C451B7079DBA4685E02BC7101BAFFF47EC7124BF6BC929A9B8DBA318451607D497B0160BB255A36B89CF18B69474E2B7970339B879FAA47B00BC3F7AB5A8470AA803A4D57DCCB08D243BFF50A54742E12DA7CC209C610D68071A09BD3625376E2A03874B75E8214E60818F4DB4DE676B20762B03E94A0B3A3C252137E36A095F84387F6CB91A2A383416A54E9ABB7CC080131136D5A66BC03E59F3A46C5AD1821D2DAA21C75B68B7B437EEB4AD496AB8E013221BA529E7306398A5E767A3A99856E1A136EFDD67B4F6B60E3CC88AA836FA84562B731A7C61A4927BC3477F4423D9C24A38373DB214D022CB55596704F280371611EE7057245868D04D2494F7421D853683E6B4856C2931F2CBEA737107DA30E6E323D7FF381F2966809269C87D407860C47AE20583183322D4ABA238B84BD4909A41342D00AC9D9659AF6469700491346FA78C4FC5FEA08346A90B9E2B03DEBF833BE152178E006576022C69C366DAB29EBA43C2400B3C497086937655A34CE82F757FFB47042721595EB1EF2D998A4E10C4904146A306F7E593A3F348BBB7B201A244635B02D0B574B1027C823971A55833F07440AB43B489E179BADD816AFD6936FAB442882631BC86545062F7F497E3BB1AFB33137B72A33E10C9663237AE109A27C728692BC072F39BC631C74E03704BE6764B762CCEFA21FF15335C7910EB049339CA40243F8A9F0AAADF9B56D81DB8303713D69368DD623A5ABD5C1772231D9873AADBC2BE637C05E79B0ABE77EDBC20A49E17742F72E1F0678EAD19D805097D7BB8EF64735C239CC2B854AF9F08CCB9B0A6F2834DC165A05FA4BD0483164039E8284573273469ECCB53FCAC0A6D22FB8D8609C3A03BF555BAC30C6868219EE0936E1E257A0D2CC9C890DB7D5687D135102054FB6B0C225CCC184463B767BC0432CC02E2B077F9C4A98F8A4EEE10A9338A00184C91CCB12202299D76B7A0E7B649CE9A272758B12D95E983CABC41966D166CD3D2BB9E515A678338D725B89274306BC544959965487606F758699323C9034518EEF06394CD574592B99AB3A6255C8C0B1F0B711B9425C74A39923C1B3295D12BC72063AB16106518EA615DA7AEB8C69CD9DD6314F95043CEE6D1083A15E61AFAFF521C8BDEA985D184A9F14DF0EE3E47F1FD4DEB95E1EDEF1DD69819EBC819C8ACE92C35185AAD66B65BC953988E16F28DDC12AC3B927BA2BF1EA4CE52F16093723212316A9FE8F" + } + ] + } + ] +} +\ No newline at end of file diff --git a/security/nss/gtests/common/testvectors/ml-kem-decap-vectors.h b/security/nss/gtests/common/testvectors/ml-kem-decap-vectors.h @@ -0,0 +1,7077 @@ +/* vim: set ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* This file is generated from sources in nss/gtests/common/wycheproof + * automatically and should not be touched manually. + * Generation is trigged by calling python3 genTestVectors.py */ + +#ifndef mlkem_decap_vectors_h__ +#define mlkem_decap_vectors_h__ + +#include "testvectors_base/test-structs.h" + +const std::vector<MlKemDecapTestVector> MlKemDecapTests = { + // tcID: 86 + {86, + params_ml_kem768_test_mode, + // privateKey + {0xbd, 0xb6, 0x14, 0xff, 0xc9, 0xba, 0x80, 0xa3, 0xbb, 0xc1, 0x89, 0x9e, + 0xc8, 0x55, 0x44, 0x8e, 0x27, 0x34, 0xbb, 0xa7, 0x41, 0x16, 0x18, 0x1d, + 0x15, 0x03, 0xcf, 0xf0, 0xb4, 0x97, 0xc8, 0x32, 0xb7, 0x59, 0x98, 0xa5, + 0xcb, 0xa9, 0x4c, 0x76, 0xc2, 0xcc, 0xa2, 0x59, 0x04, 0xf5, 0x74, 0x08, + 0x0d, 0xfc, 0xb7, 0xb4, 0xe6, 0x4d, 0x5d, 0x75, 0x47, 0xb2, 0xc2, 0xc5, + 0xe4, 0xca, 0xae, 0x55, 0x00, 0x98, 0xba, 0x50, 0xbd, 0x6d, 0xa4, 0x7e, + 0xfd, 0x10, 0xa6, 0x7c, 0x25, 0x02, 0xa8, 0xc7, 0xb4, 0x2f, 0x4b, 0x26, + 0x96, 0x84, 0x6f, 0xd8, 0x49, 0x70, 0x6c, 0x01, 0x4a, 0x6c, 0xd8, 0xb8, + 0x28, 0x01, 0x2b, 0x4b, 0xf4, 0x1b, 0xce, 0x00, 0x41, 0xe2, 0x7a, 0x42, + 0x45, 0x23, 0x1b, 0x95, 0x4b, 0x95, 0x8b, 0x14, 0x00, 0xa7, 0x72, 0x1f, + 0xdd, 0xe3, 0x69, 0xc4, 0x88, 0xbe, 0x6a, 0xf0, 0x43, 0xa8, 0xc0, 0xa9, + 0xcd, 0x0c, 0xbb, 0xe1, 0x32, 0xa2, 0xf3, 0x03, 0xbb, 0x57, 0xa4, 0xad, + 0xfa, 0x02, 0xcb, 0x12, 0x71, 0x7b, 0x2e, 0xea, 0x90, 0x53, 0x81, 0xb1, + 0x10, 0xe6, 0x1a, 0x6b, 0x50, 0x6b, 0x45, 0x39, 0x2f, 0x45, 0x31, 0x3c, + 0x51, 0x75, 0x6d, 0x80, 0xb2, 0x7b, 0x93, 0x98, 0xc1, 0xf3, 0xf1, 0xa7, + 0x46, 0x55, 0xac, 0x08, 0xab, 0x68, 0x01, 0xf6, 0x51, 0xa1, 0xa3, 0x78, + 0xde, 0x12, 0x8f, 0x63, 0xd4, 0xba, 0xce, 0x13, 0x83, 0x30, 0x02, 0x5f, + 0xa3, 0x88, 0x2b, 0xaa, 0x63, 0x0c, 0x98, 0xa0, 0x70, 0x39, 0x56, 0x97, + 0xd4, 0x75, 0x6d, 0x7f, 0x05, 0x21, 0xed, 0xfa, 0x06, 0x5d, 0x36, 0xa7, + 0x49, 0x1b, 0x53, 0xa3, 0x71, 0x08, 0x0f, 0x97, 0xca, 0x1f, 0xa0, 0xb9, + 0x3e, 0x54, 0x4d, 0xbe, 0xe4, 0x81, 0x5b, 0x92, 0xac, 0x2e, 0xfb, 0x90, + 0x05, 0x11, 0x3d, 0x58, 0x3a, 0x73, 0x1e, 0x17, 0xb7, 0x13, 0xa6, 0x83, + 0x73, 0xd5, 0xaf, 0x07, 0xe3, 0x25, 0x20, 0xb1, 0x95, 0x8f, 0xd9, 0x64, + 0x3b, 0x4c, 0xa7, 0x0e, 0x60, 0x14, 0x72, 0x00, 0x21, 0x41, 0xa1, 0x24, + 0x24, 0x72, 0x61, 0x14, 0xac, 0x1f, 0xa6, 0x58, 0x01, 0xc8, 0x65, 0x98, + 0x46, 0xe8, 0xa1, 0xd4, 0x2c, 0x53, 0xbb, 0x0a, 0x3b, 0xec, 0xac, 0xb4, + 0x31, 0x61, 0xc7, 0xdb, 0x70, 0x73, 0x51, 0x48, 0x52, 0x58, 0xc4, 0xc3, + 0x73, 0x75, 0x4e, 0x97, 0x74, 0xac, 0x09, 0x48, 0x2c, 0xe9, 0x2a, 0x24, + 0xeb, 0xe9, 0x59, 0x97, 0x3a, 0x5e, 0x12, 0x60, 0x64, 0x40, 0x77, 0x7b, + 0x22, 0x47, 0x1c, 0x3e, 0xc0, 0x15, 0xf2, 0x67, 0x3e, 0xa3, 0xb4, 0xab, + 0x84, 0x47, 0x78, 0xea, 0xea, 0x88, 0x30, 0x24, 0x46, 0xee, 0x79, 0x0c, + 0x2e, 0x95, 0x4b, 0x29, 0x73, 0x8a, 0x90, 0x28, 0x7e, 0xfd, 0xa1, 0x13, + 0x12, 0x51, 0x70, 0x48, 0x89, 0x64, 0xea, 0x55, 0x14, 0x51, 0x95, 0x56, + 0x56, 0xa7, 0x88, 0xbf, 0xe4, 0xc5, 0x8a, 0x7a, 0xc4, 0xa9, 0xf2, 0xbf, + 0xa2, 0xdb, 0x2c, 0x91, 0xc6, 0x9d, 0xbb, 0x33, 0x2f, 0xc4, 0xb2, 0x31, + 0xdb, 0xf1, 0xb4, 0xaa, 0x91, 0x4b, 0xc6, 0x3c, 0x1c, 0x37, 0x38, 0x0c, + 0x23, 0x95, 0x87, 0x4e, 0xc1, 0xc5, 0x17, 0xf0, 0xc7, 0x9d, 0xd0, 0xb8, + 0x50, 0x54, 0x66, 0x8d, 0x93, 0xcb, 0x29, 0x22, 0x91, 0x7f, 0x95, 0x93, + 0xd4, 0x92, 0x92, 0x35, 0x3c, 0x8a, 0x02, 0x08, 0xa2, 0x6c, 0x37, 0x73, + 0x8e, 0xf1, 0x46, 0xe9, 0x2a, 0x2e, 0x10, 0xc4, 0x99, 0x04, 0xf3, 0x24, + 0xaf, 0xe1, 0x82, 0x0e, 0xfa, 0x0a, 0xc5, 0xe5, 0xa4, 0xab, 0x35, 0x85, + 0xa0, 0x97, 0xb6, 0xd3, 0x5c, 0x88, 0xdd, 0x57, 0xb5, 0xac, 0x02, 0x41, + 0xc2, 0x1a, 0x5d, 0xe1, 0xa5, 0x81, 0xd5, 0x41, 0x6c, 0x11, 0xcb, 0x1a, + 0xf1, 0xb7, 0x93, 0x74, 0xc7, 0x46, 0xff, 0xfa, 0x4d, 0xf6, 0x58, 0xcc, + 0x68, 0x81, 0xbc, 0xd5, 0xc8, 0x75, 0xe9, 0x25, 0x22, 0x3a, 0xe8, 0xa5, + 0x69, 0x24, 0x42, 0x2e, 0xe9, 0x09, 0x1b, 0x21, 0xbe, 0xbe, 0x84, 0x1c, + 0x37, 0xb8, 0x50, 0x6b, 0x09, 0x7e, 0x3f, 0x3b, 0xc2, 0x03, 0x42, 0xae, + 0x00, 0x30, 0x77, 0x45, 0xaa, 0xce, 0xd7, 0x09, 0x05, 0x47, 0xc1, 0x88, + 0x2d, 0x32, 0xc6, 0x0b, 0xda, 0x72, 0x4c, 0xd1, 0x56, 0xab, 0xf8, 0xa1, + 0x1d, 0xa1, 0xbb, 0x05, 0x4a, 0x8b, 0xab, 0x5c, 0x44, 0xb4, 0x74, 0x08, + 0x4f, 0xa1, 0x3f, 0xe2, 0x94, 0x93, 0x10, 0xeb, 0x64, 0x23, 0x93, 0x38, + 0xbe, 0xb3, 0x6b, 0xd8, 0x6a, 0xcc, 0x92, 0x3c, 0x43, 0x20, 0x51, 0x02, + 0x20, 0x54, 0x5d, 0x8e, 0xec, 0x2f, 0x77, 0xea, 0x36, 0x48, 0x70, 0xb5, + 0x84, 0x04, 0x12, 0x6b, 0x50, 0x1c, 0xab, 0x23, 0x8b, 0xac, 0xa5, 0x20, + 0x40, 0xda, 0x20, 0x37, 0xd5, 0x41, 0xd5, 0x74, 0xa6, 0xe7, 0xc3, 0x0b, + 0x98, 0x77, 0xad, 0x54, 0x05, 0x12, 0xbe, 0x2b, 0x41, 0xaa, 0xf8, 0x88, + 0x29, 0x5b, 0x1a, 0x38, 0xc0, 0xcc, 0xe4, 0xf0, 0x23, 0xbf, 0xea, 0x82, + 0xec, 0x02, 0x17, 0xbe, 0x5a, 0x7d, 0x6a, 0x65, 0x15, 0xc3, 0x99, 0xad, + 0xe1, 0xaa, 0x91, 0x13, 0x36, 0x71, 0x85, 0x24, 0xad, 0x91, 0x6a, 0x18, + 0x6f, 0xb4, 0x88, 0xda, 0x79, 0x3d, 0x21, 0x44, 0x86, 0xf0, 0xe2, 0x31, + 0xaa, 0xb6, 0x07, 0x5c, 0x0a, 0x04, 0xd6, 0x40, 0x62, 0x86, 0x68, 0x4d, + 0x65, 0x48, 0x4b, 0x85, 0x20, 0x43, 0x8f, 0x02, 0x1f, 0xb4, 0xc5, 0x5a, + 0xfc, 0x5a, 0x4c, 0x35, 0xd9, 0x7f, 0x00, 0x36, 0x48, 0x0e, 0x65, 0xa8, + 0xef, 0x89, 0x4c, 0x93, 0x8b, 0x42, 0xed, 0x02, 0x3a, 0x4b, 0x96, 0x6d, + 0x23, 0x54, 0x79, 0x01, 0x25, 0x94, 0xba, 0xea, 0x06, 0xe6, 0xe8, 0x6d, + 0xf7, 0x3c, 0x9d, 0xfb, 0x00, 0x0f, 0x74, 0x8c, 0x81, 0x40, 0xab, 0x49, + 0x34, 0x1b, 0x59, 0x52, 0xf5, 0x86, 0x2e, 0xb7, 0x3e, 0x85, 0x03, 0xb4, + 0x12, 0x59, 0x97, 0x38, 0x4b, 0x11, 0x20, 0x89, 0x72, 0xd1, 0xda, 0x3d, + 0x32, 0x00, 0x64, 0x45, 0x9b, 0x6d, 0x71, 0x4a, 0x41, 0x51, 0x69, 0x6a, + 0x84, 0x3b, 0x87, 0x26, 0x26, 0xb0, 0x51, 0xd2, 0x19, 0xf8, 0x23, 0x8b, + 0xfe, 0x48, 0x01, 0x82, 0xd9, 0x3f, 0x70, 0x75, 0x23, 0x19, 0xb8, 0xaa, + 0xf7, 0x36, 0x04, 0x94, 0x03, 0x8b, 0xe5, 0x70, 0x0f, 0x2e, 0x9b, 0x86, + 0xe8, 0x38, 0x12, 0x74, 0x49, 0x89, 0xb4, 0x92, 0x14, 0x69, 0xf8, 0xa4, + 0xb4, 0x1c, 0x68, 0x2e, 0xd3, 0x29, 0x20, 0x3b, 0x00, 0x25, 0x7a, 0x95, + 0x0b, 0xd5, 0x43, 0x5b, 0x22, 0x4e, 0x46, 0x99, 0x72, 0x9c, 0xe5, 0x8d, + 0x38, 0x55, 0x29, 0x3c, 0x62, 0xc4, 0x4e, 0xea, 0x5d, 0x2c, 0xf9, 0x6b, + 0x40, 0x63, 0xa1, 0x0c, 0x8a, 0xce, 0x2d, 0xeb, 0x53, 0xfa, 0x79, 0xb8, + 0xa1, 0xe7, 0x7f, 0x95, 0x5a, 0x6a, 0x48, 0xb3, 0x81, 0x19, 0xfa, 0x6b, + 0x81, 0x06, 0x30, 0x1a, 0x25, 0x84, 0x9f, 0x90, 0x30, 0xc8, 0x6a, 0x28, + 0x89, 0xbc, 0x75, 0xc1, 0x47, 0xc9, 0x0d, 0x65, 0x25, 0xdc, 0x53, 0x27, + 0x45, 0x39, 0x1e, 0x71, 0x7c, 0x70, 0xdb, 0x15, 0x00, 0x74, 0x23, 0xc0, + 0x6e, 0x8b, 0xaa, 0x23, 0x27, 0x7f, 0xc8, 0x96, 0xb7, 0x57, 0x53, 0x6c, + 0x2b, 0xa5, 0xa2, 0x60, 0x53, 0x97, 0xe0, 0x15, 0xa8, 0x4a, 0xb2, 0x16, + 0x63, 0x5b, 0x23, 0x66, 0xc7, 0xbf, 0x13, 0x64, 0xcf, 0x87, 0xd3, 0xcc, + 0x61, 0xa3, 0x1a, 0x57, 0xa6, 0x94, 0x9a, 0xf7, 0x7a, 0xd5, 0x99, 0x0e, + 0xd5, 0x41, 0x22, 0xd4, 0x08, 0x28, 0x13, 0x75, 0x40, 0x79, 0x76, 0x5c, + 0x99, 0x92, 0x66, 0xc3, 0xe9, 0x61, 0xe6, 0x74, 0xc1, 0xf7, 0xd0, 0x3f, + 0x9d, 0x25, 0x8c, 0x19, 0x76, 0x95, 0x0a, 0x12, 0x0e, 0x0e, 0x31, 0xcf, + 0x62, 0x39, 0x36, 0x2f, 0xf3, 0x8e, 0x39, 0x59, 0x35, 0xb5, 0xe2, 0x9d, + 0x40, 0xc5, 0xbf, 0xbb, 0xdc, 0x63, 0xc2, 0x58, 0x55, 0xa3, 0x72, 0xc3, + 0x65, 0x6c, 0x24, 0x3a, 0xa1, 0x35, 0xe8, 0x49, 0x2f, 0x38, 0x90, 0x61, + 0x5c, 0xc7, 0x5b, 0x3a, 0x25, 0x22, 0x1d, 0xb7, 0x26, 0x70, 0xe4, 0x65, + 0xe1, 0xb4, 0x51, 0x28, 0xb1, 0x31, 0x39, 0x5b, 0x4f, 0x0a, 0xe3, 0xbb, + 0x09, 0xe9, 0x49, 0x65, 0x98, 0x3f, 0xdf, 0x6a, 0x54, 0xaf, 0x08, 0x7a, + 0xe4, 0xf3, 0x2d, 0xd7, 0x83, 0x7a, 0xeb, 0xf8, 0x93, 0x21, 0x23, 0x06, + 0xd8, 0xb6, 0xac, 0x17, 0x65, 0x75, 0x84, 0x66, 0x90, 0x8a, 0x3a, 0x64, + 0x1f, 0x29, 0x62, 0xec, 0xa9, 0x7f, 0xe4, 0xa6, 0x3d, 0x64, 0x80, 0x4b, + 0x5b, 0x25, 0x9f, 0x20, 0x25, 0x19, 0x7f, 0x0b, 0x0e, 0xa9, 0x99, 0x63, + 0x26, 0xd2, 0x47, 0x36, 0x55, 0x3a, 0xbf, 0x11, 0x35, 0x94, 0xe1, 0x22, + 0xaa, 0xc2, 0xc6, 0x29, 0x36, 0xc1, 0xbd, 0x75, 0x68, 0x9e, 0x24, 0x0c, + 0xed, 0x9b, 0xce, 0x09, 0x82, 0x12, 0x06, 0x77, 0x76, 0x02, 0x3a, 0x49, + 0x54, 0x37, 0x6e, 0xaa, 0x34, 0x26, 0x87, 0x19, 0x5e, 0x54, 0x81, 0x60, + 0x83, 0x52, 0x24, 0x28, 0x3a, 0x46, 0x06, 0x20, 0x7c, 0x6c, 0x93, 0x93, + 0x76, 0x03, 0x0c, 0x91, 0xbc, 0x3f, 0xcd, 0x64, 0x66, 0x81, 0x0c, 0x5f, + 0xa3, 0x61, 0x48, 0x88, 0x24, 0xb3, 0x5c, 0x69, 0x3d, 0xd8, 0xfb, 0x56, + 0xde, 0x24, 0x12, 0xb8, 0x6a, 0x9a, 0xdb, 0x28, 0x38, 0x4f, 0x90, 0x8b, + 0x23, 0xab, 0xbd, 0x28, 0x30, 0x7c, 0xcf, 0x83, 0x4d, 0x3c, 0xb2, 0x9f, + 0x3e, 0x1a, 0xac, 0x65, 0x80, 0x6f, 0x40, 0x84, 0x97, 0x4c, 0xd7, 0x03, + 0x7e, 0x2b, 0x84, 0xf6, 0x45, 0x73, 0x3f, 0xd6, 0x60, 0xd3, 0xc2, 0x46, + 0x07, 0x67, 0x06, 0x85, 0x6b, 0x24, 0x15, 0xb0, 0xa2, 0x34, 0xa2, 0x9a, + 0x76, 0x53, 0x2d, 0xd6, 0xd6, 0x32, 0x0b, 0xd0, 0x6a, 0xa4, 0x59, 0x76, + 0x8f, 0xb0, 0x67, 0xc7, 0xb2, 0x8b, 0x8c, 0x89, 0x25, 0x8c, 0x23, 0x54, + 0xec, 0x59, 0x26, 0xd2, 0x3b, 0xa3, 0x88, 0xc1, 0x4e, 0x39, 0xa6, 0x3f, + 0x61, 0xd2, 0x3d, 0x70, 0x5b, 0x1b, 0x85, 0x0c, 0x58, 0x80, 0x48, 0x56, + 0x93, 0x48, 0x92, 0xda, 0xa4, 0x52, 0x00, 0x7b, 0x2e, 0xd0, 0x1c, 0x61, + 0x96, 0x99, 0x5c, 0x55, 0xc6, 0x47, 0xf3, 0xf5, 0x8b, 0xe2, 0xd2, 0x7a, + 0xf8, 0x84, 0x5c, 0x23, 0x34, 0xad, 0x27, 0x68, 0x7a, 0x25, 0xe5, 0x0b, + 0xb6, 0xbc, 0x90, 0x05, 0x8b, 0x18, 0x1d, 0x71, 0x97, 0xc5, 0x33, 0x10, + 0x88, 0xb7, 0xac, 0x1d, 0x18, 0x03, 0x8a, 0xa9, 0x92, 0x01, 0x45, 0x88, + 0x72, 0x47, 0xc8, 0x05, 0x10, 0x2b, 0x95, 0xf5, 0x72, 0x35, 0x78, 0x3a, + 0x48, 0x47, 0x13, 0x0e, 0x47, 0x56, 0x6a, 0x60, 0x46, 0x95, 0x75, 0x65, + 0x1f, 0x01, 0x37, 0x60, 0x83, 0x95, 0xd0, 0x10, 0x56, 0x7b, 0x78, 0x66, + 0xc8, 0x50, 0x5e, 0x6d, 0xbb, 0x6f, 0x67, 0x28, 0x95, 0x9c, 0x12, 0x8c, + 0x38, 0x24, 0x14, 0xfa, 0x53, 0xc4, 0x61, 0x85, 0x0e, 0x77, 0x83, 0xcc, + 0xa1, 0xb4, 0x26, 0x50, 0x08, 0x64, 0x25, 0x81, 0xa0, 0x6b, 0xb0, 0xc4, + 0x10, 0xd2, 0xa7, 0x91, 0xd0, 0x97, 0x76, 0x69, 0x18, 0x8c, 0x62, 0x31, + 0xa4, 0xa3, 0x39, 0x0d, 0xac, 0x1b, 0x15, 0x24, 0x3e, 0x41, 0xd5, 0x78, + 0x43, 0xc5, 0x3e, 0x30, 0x9a, 0x3d, 0xee, 0x5b, 0xb0, 0x99, 0x1a, 0x85, + 0x10, 0x9a, 0x71, 0x68, 0x00, 0x86, 0x62, 0x59, 0x05, 0x4f, 0xe1, 0xcc, + 0x59, 0xfb, 0x6a, 0x96, 0xa7, 0x5c, 0x85, 0x03, 0x51, 0x7e, 0xfb, 0x55, + 0x17, 0xe8, 0x17, 0x03, 0x76, 0x51, 0x2a, 0x53, 0xc8, 0x61, 0xfa, 0x35, + 0xac, 0x8c, 0x4b, 0x5e, 0x63, 0x75, 0x62, 0x47, 0x04, 0x26, 0x90, 0xbd, + 0x67, 0xbb, 0x8e, 0x0c, 0x7c, 0x9e, 0x8f, 0x05, 0xc5, 0xce, 0x48, 0xca, + 0xb0, 0xf1, 0x42, 0x5e, 0x32, 0x90, 0x72, 0xf8, 0x74, 0x01, 0x63, 0x42, + 0x11, 0x24, 0x17, 0x38, 0xc2, 0xce, 0x97, 0x20, 0x8c, 0x6a, 0x6a, 0xb6, + 0x09, 0xf0, 0x3e, 0xf1, 0x33, 0x87, 0xac, 0x6c, 0x08, 0xa3, 0xfa, 0x61, + 0xe5, 0x36, 0x32, 0x67, 0x75, 0x07, 0x71, 0x1a, 0x25, 0xc1, 0xfa, 0x34, + 0x54, 0xd8, 0x6d, 0x7b, 0xfc, 0x75, 0xe6, 0x68, 0x10, 0x0d, 0x6a, 0x6a, + 0x03, 0x08, 0x61, 0x42, 0x27, 0x53, 0x83, 0xe2, 0x91, 0x09, 0x71, 0x04, + 0x35, 0x6a, 0x08, 0x48, 0x72, 0x4b, 0xd9, 0x5c, 0x3c, 0xd8, 0x9c, 0xce, + 0xce, 0x97, 0x42, 0x1b, 0xdc, 0x67, 0xb0, 0xfc, 0x8a, 0xa0, 0xe0, 0xc2, + 0x46, 0x0b, 0x4a, 0xad, 0xd9, 0x03, 0x3c, 0xfc, 0x60, 0xef, 0x04, 0xaa, + 0x6f, 0x39, 0x56, 0x6e, 0x89, 0x79, 0x3d, 0xdc, 0x04, 0x81, 0x10, 0x9e, + 0x53, 0x25, 0x66, 0xd9, 0x05, 0x25, 0xed, 0xe5, 0x7e, 0x8b, 0x75, 0x6f, + 0xda, 0x71, 0x90, 0xbb, 0x89, 0x93, 0x7d, 0xab, 0xbe, 0x2a, 0xf4, 0x23, + 0x99, 0x61, 0xcf, 0xda, 0xd3, 0x7f, 0x1e, 0x4b, 0x5b, 0xed, 0x5a, 0x4c, + 0xb5, 0x63, 0x71, 0x63, 0x84, 0x07, 0x16, 0xa1, 0xce, 0x2f, 0x20, 0x36, + 0x97, 0x5a, 0x64, 0x0b, 0x6a, 0x7e, 0xf3, 0x08, 0x69, 0x0d, 0x66, 0x75, + 0x0c, 0xa0, 0x5b, 0x90, 0x58, 0x77, 0x28, 0x28, 0xbc, 0x45, 0x8a, 0xa9, + 0xce, 0x47, 0x11, 0x6e, 0xf4, 0x59, 0xb0, 0x1c, 0x29, 0x20, 0x10, 0xb7, + 0x44, 0x92, 0x07, 0xed, 0xe7, 0xaa, 0x38, 0xab, 0x20, 0xf1, 0x02, 0x80, + 0xe3, 0x16, 0x29, 0x8e, 0x9c, 0x86, 0xb3, 0xb4, 0xb9, 0x4e, 0x71, 0x8b, + 0x85, 0x79, 0x8d, 0x55, 0x67, 0xc9, 0x65, 0x31, 0xa6, 0xcf, 0x84, 0xbc, + 0x80, 0x6a, 0xb8, 0x5e, 0x15, 0x6a, 0x34, 0x44, 0x7b, 0x15, 0xfa, 0x9f, + 0xa5, 0xbb, 0xa5, 0xf1, 0x08, 0x71, 0x89, 0xbb, 0x9d, 0x45, 0x61, 0x88, + 0x5b, 0x25, 0x47, 0xdb, 0xc5, 0xbc, 0x08, 0x1c, 0x1a, 0x26, 0x8a, 0x9e, + 0xbe, 0xe5, 0xcb, 0x1d, 0x41, 0x47, 0x54, 0x50, 0x44, 0xd1, 0x19, 0x33, + 0xf4, 0x38, 0x71, 0xad, 0xa5, 0x49, 0x5c, 0x89, 0x47, 0x93, 0x64, 0x5b, + 0x0b, 0xc4, 0x72, 0x40, 0x7b, 0xcd, 0xc5, 0xec, 0xce, 0x19, 0xf2, 0x19, + 0xc9, 0x85, 0x32, 0x88, 0x23, 0x81, 0x73, 0x9b, 0x94, 0xe2, 0x36, 0x6b, + 0xae, 0x2c, 0x54, 0x3e, 0x68, 0x11, 0x6b, 0xc3, 0x09, 0x74, 0x14, 0x9e, + 0x59, 0x31, 0x8d, 0xf3, 0x33, 0x62, 0x04, 0xc2, 0x20, 0x63, 0xe4, 0x48, + 0x1e, 0x68, 0x8f, 0xe2, 0x63, 0x4d, 0x79, 0x07, 0x73, 0xe2, 0x43, 0xa3, + 0x25, 0xaa, 0xca, 0x07, 0xac, 0x65, 0xee, 0xd5, 0xbb, 0xb0, 0x92, 0xb6, + 0x37, 0x1b, 0x51, 0x9b, 0xc0, 0x10, 0x67, 0x84, 0x9e, 0x6b, 0xa3, 0xc5, + 0xd9, 0xb4, 0xaf, 0x5d, 0x07, 0x3b, 0xc8, 0x4b, 0xb4, 0x72, 0xc1, 0x23, + 0xf2, 0xc7, 0x2c, 0x4b, 0x19, 0x1c, 0x85, 0x40, 0x5d, 0x63, 0xc1, 0x48, + 0xb3, 0x68, 0x39, 0x9e, 0xcc, 0xc4, 0x2f, 0x20, 0x8f, 0x62, 0xe7, 0x5e, + 0x14, 0x40, 0x8b, 0xeb, 0x14, 0x10, 0x1e, 0xe4, 0x24, 0x9d, 0x24, 0x18, + 0xc3, 0x59, 0xab, 0x05, 0xe5, 0xa3, 0xb6, 0x0a, 0x54, 0x65, 0x63, 0x7e, + 0xc6, 0xa3, 0x14, 0x19, 0xea, 0xab, 0x94, 0x58, 0xa2, 0x85, 0xf6, 0x84, + 0x40, 0x4c, 0x4a, 0x94, 0x42, 0x5f, 0xf6, 0x80, 0x61, 0x50, 0xc7, 0x11, + 0x1a, 0xd2, 0xa7, 0x7c, 0x06, 0x16, 0xd4, 0x5c, 0xae, 0x90, 0x24, 0xbe, + 0x5d, 0xe2, 0x59, 0xff, 0xd6, 0xc3, 0xc0, 0xe5, 0x09, 0xdf, 0x48, 0x4f, + 0x2d, 0x21, 0x9d, 0x5f, 0x3c, 0xb5, 0x96, 0xbb, 0x76, 0x3d, 0x4b, 0xa6, + 0xc3, 0x52, 0x17, 0x89, 0xfc, 0x84, 0x01, 0x42, 0xa4, 0x2d, 0x51, 0x0f, + 0x14, 0xea, 0x44, 0xb3, 0xe9, 0xb5, 0x73, 0xa4, 0x9f, 0x9b, 0x08, 0x79, + 0xca, 0x5a, 0x5e, 0x06, 0x06, 0x63, 0x9a, 0x7c, 0x67, 0xa7, 0x67, 0x41, + 0x24, 0xe2, 0x42, 0x33, 0x39, 0x12, 0x6f, 0xb0, 0x19, 0xe0, 0x0b, 0xbb, + 0x50, 0x31, 0xa1, 0xab, 0x9b, 0x3a, 0x71, 0x19, 0x04, 0x59, 0xa1, 0x6e, + 0xbb, 0x0a, 0x19, 0x6d, 0xd9, 0xcd, 0x5a, 0x15, 0x21, 0x79, 0x08, 0x2a, + 0xfa, 0x94, 0x36, 0xb6, 0x47, 0xa6, 0x81, 0x11, 0x43, 0x9d, 0xc3, 0x25, + 0xea, 0x77, 0x7b, 0xca, 0x84, 0xad, 0xdb, 0xd6, 0x2f, 0xdf, 0xb6, 0x10, + 0x09, 0xa5, 0x4f, 0xeb, 0x49, 0x5a, 0x16, 0x6b, 0xb3, 0x5c, 0x9c, 0x42, + 0x6a, 0x67, 0x8e, 0x6e, 0x29, 0x58, 0xbf, 0x52, 0x13, 0x8f, 0x68, 0x71, + 0x1d, 0x62, 0x3b, 0x41, 0xc7, 0xb4, 0xa9, 0x7a, 0x24, 0x1b, 0x17, 0xb3, + 0xc3, 0x77, 0x20, 0xfb, 0xf0, 0x4b, 0xa3, 0xc1, 0x75, 0xc9, 0x6a, 0x4c, + 0xed, 0x4c, 0x3f, 0xd0, 0xe4, 0xcf, 0xbb, 0x34, 0x5a, 0x0c, 0xf4, 0x8a, + 0x7c, 0x08, 0x70, 0xe4, 0x35, 0x3c, 0xa0, 0x2b, 0x92, 0xa2, 0x04, 0xa9, + 0xc0, 0x3a, 0x62, 0x87, 0xba, 0x8e, 0x1c, 0xfa, 0x50, 0xb9, 0x1c, 0x2e, + 0x26, 0x74, 0xcf, 0x93, 0x38, 0x2a, 0x72, 0xe8, 0xb9, 0xe0, 0x21, 0x45, + 0x04, 0xb9, 0x7c, 0x18, 0xd6, 0x03, 0x51, 0xf6, 0x89, 0x39, 0x2a, 0x8e, + 0x44, 0xaa, 0x2c, 0x57, 0xda, 0xaa, 0xbe, 0x4c, 0xe5, 0x2e, 0x3c, 0xdc, + 0x2b, 0xb4, 0x36, 0xdc, 0xbd, 0xec, 0xeb, 0xae, 0x89, 0xbd, 0x2e, 0x39, + 0x2f, 0x03, 0x70, 0x09, 0x2a, 0x66, 0xb4, 0xf0, 0x2a, 0xc3, 0xfd, 0xad, + 0x8d, 0x8f, 0x21, 0x0a, 0x27, 0x16, 0x03, 0xd0, 0x45, 0xf9, 0x5e, 0xc9, + 0x4c, 0x2a, 0x38, 0xef, 0x49, 0x85, 0xf2, 0xe7, 0x2e, 0xdd, 0xf9, 0xee, + 0xa9, 0x0c, 0xa3, 0xf0, 0xfd, 0xe3, 0xf9, 0xd4, 0x9f, 0xa9, 0x8b, 0x44, + 0xba, 0x6d, 0x37, 0xfc, 0x13, 0x52, 0x4b, 0x7f, 0xf2, 0x43, 0x5b, 0x88, + 0x41, 0x02, 0x55, 0x34, 0x55, 0x90, 0xda, 0x78, 0x70, 0x81, 0x38, 0x73}, + // ciphertext + {0xe3, 0xc5, 0x63, 0xf0, 0xe5, 0xa3, 0xe2, 0xa6, 0xff, 0x16, 0xec, 0x36, + 0x30, 0xea, 0x56, 0xba, 0x17, 0x64, 0x7e, 0xd1, 0x23, 0x6b, 0xd9, 0x57, + 0x02, 0x15, 0x49, 0x82, 0x5e, 0x80, 0x6d, 0xe8, 0x92, 0x4e, 0x3a, 0xf2, + 0x98, 0xf5, 0xd3, 0xcf, 0x2d, 0x46, 0x2e, 0x31, 0x08, 0x21, 0x80, 0xd2, + 0xc2, 0x96, 0x4e, 0xd8, 0x0d, 0x3e, 0x7d, 0x92, 0xe5, 0x22, 0x7e, 0x01, + 0xb9, 0xb7, 0x40, 0xf1, 0xe2, 0xd1, 0x11, 0xfb, 0x37, 0x9a, 0xf7, 0xa9, + 0x23, 0x20, 0xef, 0x8b, 0xac, 0x44, 0xa2, 0x59, 0x1c, 0x74, 0x38, 0xb7, + 0xf9, 0x16, 0xc1, 0x50, 0x8c, 0x45, 0x10, 0x6e, 0x2e, 0xe3, 0x62, 0x9f, + 0x28, 0xfd, 0x28, 0x0d, 0x72, 0x5c, 0x38, 0x2d, 0x64, 0x7c, 0x89, 0x4e, + 0x60, 0xc2, 0xb1, 0x09, 0x84, 0x3d, 0x5d, 0xb5, 0x9a, 0xbf, 0xd5, 0x2b, + 0x4b, 0x98, 0xe8, 0x67, 0x73, 0xcb, 0xc7, 0x5c, 0x89, 0x89, 0x23, 0x9c, + 0x28, 0x8a, 0x79, 0xab, 0x1d, 0x66, 0x08, 0xfa, 0x6e, 0xf2, 0x87, 0xbb, + 0x04, 0x31, 0x39, 0x1c, 0x0c, 0xfd, 0x73, 0x50, 0x4a, 0xb2, 0x4d, 0x10, + 0xa2, 0xf8, 0xfa, 0x5f, 0x3c, 0x3f, 0x38, 0xd9, 0xbd, 0x48, 0x60, 0x78, + 0x89, 0xe1, 0x60, 0xca, 0xa0, 0x98, 0x18, 0x83, 0x04, 0x72, 0x03, 0x8f, + 0x9f, 0x6c, 0xc2, 0xf7, 0xaf, 0xdb, 0xc4, 0x58, 0x70, 0xb4, 0x34, 0xf4, + 0x21, 0x74, 0x3e, 0x1e, 0x0f, 0xd0, 0x19, 0xd5, 0xc4, 0x11, 0x01, 0xd9, + 0xda, 0xc0, 0x14, 0x47, 0x2c, 0x4f, 0xee, 0xf0, 0xa9, 0xef, 0x98, 0x0e, + 0x7f, 0x27, 0x6c, 0xc7, 0xf1, 0xe1, 0x51, 0x3a, 0x64, 0x17, 0x24, 0x28, + 0xa4, 0xa0, 0x91, 0xa4, 0xc9, 0xa6, 0xa0, 0x09, 0xee, 0x56, 0x21, 0xe3, + 0x7b, 0x17, 0x9e, 0xba, 0xac, 0x0d, 0x12, 0x2a, 0x8b, 0xf4, 0x2a, 0xe8, + 0x61, 0xea, 0x42, 0x04, 0x73, 0xd2, 0xc8, 0xf9, 0xef, 0x3f, 0x4e, 0xec, + 0xa1, 0x1a, 0xaf, 0x88, 0x63, 0xbc, 0x66, 0x31, 0x0e, 0xe5, 0x23, 0x37, + 0x97, 0x13, 0x4e, 0x84, 0x9a, 0x01, 0x99, 0x21, 0x49, 0xcd, 0xf6, 0x37, + 0xbe, 0x74, 0xf0, 0x29, 0x29, 0x88, 0x57, 0x2a, 0x38, 0xac, 0x86, 0x95, + 0x9c, 0xb6, 0x7d, 0xec, 0xf3, 0xb3, 0xc3, 0xbc, 0xcc, 0xf1, 0x86, 0xf9, + 0x17, 0x47, 0x6d, 0xee, 0x06, 0x72, 0x7e, 0xa8, 0x19, 0xa5, 0x1e, 0xd1, + 0xee, 0x6f, 0x32, 0x28, 0xf4, 0xa0, 0x32, 0x20, 0x32, 0x75, 0x9d, 0x74, + 0xbe, 0xf9, 0x70, 0x3b, 0xc1, 0x85, 0xa5, 0x94, 0x92, 0xa7, 0x9a, 0x67, + 0x10, 0x9f, 0xd6, 0x78, 0x61, 0x30, 0xab, 0x0d, 0x41, 0xf3, 0x46, 0xd5, + 0x9f, 0xea, 0xb3, 0xf3, 0xfe, 0xec, 0x12, 0x70, 0x90, 0x4b, 0x15, 0x04, + 0xfc, 0xf4, 0x63, 0xe9, 0xb4, 0xb4, 0x0f, 0xa9, 0xb5, 0x26, 0x65, 0x82, + 0xa8, 0x03, 0x1f, 0x0b, 0x20, 0x09, 0x54, 0xfd, 0x08, 0x0e, 0x20, 0x7c, + 0x9b, 0x40, 0x60, 0x8c, 0x49, 0x9d, 0x49, 0xff, 0x75, 0x2d, 0x9d, 0x1a, + 0x4f, 0xb5, 0xf9, 0x12, 0x64, 0x08, 0x5d, 0x9e, 0x1a, 0x4a, 0x1a, 0x1f, + 0xc9, 0x1b, 0x5c, 0x5b, 0x3d, 0xbf, 0xa5, 0xd1, 0xef, 0x5f, 0xcd, 0xf2, + 0x89, 0x20, 0x6f, 0x61, 0x16, 0x10, 0xb9, 0x48, 0x64, 0x4c, 0xff, 0x36, + 0x32, 0x22, 0x9a, 0xf4, 0x4d, 0x29, 0x71, 0xe3, 0xfd, 0x85, 0xe8, 0x8e, + 0x69, 0x36, 0xda, 0x82, 0xdd, 0xd8, 0x81, 0x5e, 0xa1, 0xa5, 0xdd, 0x6d, + 0xd3, 0xdf, 0xc0, 0x32, 0x59, 0xf6, 0x04, 0xfe, 0xfc, 0x59, 0xcd, 0x4f, + 0x9f, 0xc6, 0xab, 0x4e, 0x9d, 0x80, 0x01, 0xa7, 0x47, 0x54, 0x64, 0x55, + 0xb9, 0x62, 0x9c, 0xcd, 0xcf, 0x5c, 0x40, 0x58, 0xd5, 0x7c, 0x20, 0xdb, + 0x6c, 0x9e, 0xeb, 0xf7, 0xc4, 0xec, 0xbf, 0x76, 0x78, 0x4f, 0xc2, 0xc9, + 0xa0, 0x8b, 0x54, 0x14, 0xf0, 0x2e, 0xe7, 0xc9, 0x3a, 0x38, 0x20, 0x1b, + 0xdf, 0xf3, 0x10, 0x68, 0x78, 0x6f, 0xbf, 0x98, 0x65, 0x4f, 0x0a, 0x32, + 0xb1, 0x88, 0xb8, 0x91, 0xbc, 0x59, 0xd6, 0x83, 0xe0, 0x8b, 0xb2, 0xd6, + 0x90, 0x65, 0x94, 0xcd, 0x02, 0xb2, 0x32, 0xda, 0xe1, 0x79, 0xbd, 0x5c, + 0x10, 0xca, 0x0f, 0x73, 0x23, 0xa0, 0x01, 0x68, 0x76, 0xbd, 0x80, 0xae, + 0x16, 0x26, 0x5a, 0xe3, 0xa9, 0x62, 0x04, 0x66, 0x5a, 0x01, 0x75, 0x8f, + 0xfa, 0x9e, 0xad, 0x68, 0x6d, 0x3b, 0xc2, 0x2d, 0x92, 0x89, 0x96, 0x33, + 0x52, 0x04, 0x37, 0x99, 0x4d, 0x73, 0xee, 0xac, 0x9a, 0x2e, 0x55, 0xc1, + 0xeb, 0xcc, 0x3d, 0x07, 0x22, 0x9b, 0x2e, 0x52, 0x02, 0xda, 0xc0, 0x28, + 0x5b, 0x2b, 0xd6, 0x00, 0x43, 0x7c, 0xfe, 0xfe, 0x98, 0xec, 0x02, 0xb1, + 0x39, 0x77, 0x35, 0x9f, 0xe4, 0xe5, 0x1e, 0xa9, 0xff, 0xcc, 0x28, 0x7c, + 0x88, 0x21, 0x1b, 0xb2, 0x20, 0xa3, 0xf0, 0xe5, 0x2d, 0x5d, 0x97, 0xb5, + 0x47, 0xb2, 0x36, 0x9c, 0xbb, 0xf4, 0x65, 0x12, 0xdf, 0xc3, 0x04, 0xd7, + 0x2e, 0xe1, 0x66, 0x4c, 0x91, 0xba, 0x5e, 0x75, 0xb2, 0xb1, 0xd0, 0x89, + 0xea, 0x9c, 0x02, 0xbb, 0xb7, 0xe3, 0x90, 0xfc, 0xb2, 0xee, 0x60, 0xe5, + 0x6f, 0xca, 0xff, 0xc3, 0xe3, 0xfe, 0xea, 0x01, 0xfd, 0x8d, 0x52, 0x12, + 0x78, 0x3b, 0xf7, 0x1a, 0xa9, 0x4b, 0xa9, 0x48, 0x13, 0x32, 0x5a, 0x02, + 0x49, 0xe5, 0x5b, 0xd4, 0x33, 0x7b, 0x7b, 0xd6, 0x62, 0xd6, 0x64, 0x1d, + 0xea, 0x48, 0x49, 0x62, 0xe0, 0x4d, 0xb7, 0xb4, 0x25, 0x22, 0x83, 0x79, + 0x91, 0xd1, 0x04, 0x8e, 0x97, 0x85, 0xe3, 0xbc, 0x29, 0x7b, 0x21, 0x06, + 0xac, 0xa4, 0x96, 0x8d, 0xdc, 0x1d, 0x05, 0xbe, 0xd8, 0x1d, 0xcd, 0x06, + 0x1d, 0x21, 0xdc, 0xfd, 0xb8, 0x2d, 0x79, 0xce, 0x38, 0x53, 0xe8, 0xb2, + 0x08, 0x9a, 0x8f, 0xe1, 0x50, 0xf3, 0xf3, 0x4c, 0xa7, 0xbf, 0x54, 0x0d, + 0x80, 0x44, 0xd8, 0xe4, 0x0c, 0xa3, 0xef, 0xc6, 0x6f, 0x17, 0x78, 0xec, + 0x0e, 0x13, 0x1f, 0x92, 0x2e, 0x28, 0xd8, 0xb6, 0x2b, 0x40, 0x50, 0x04, + 0x20, 0x64, 0x36, 0x05, 0x15, 0xb5, 0xa8, 0x80, 0x32, 0xf8, 0x2a, 0xc6, + 0x18, 0xc9, 0x35, 0x66, 0x78, 0xcc, 0x77, 0xf3, 0xc4, 0xb3, 0x45, 0x6c, + 0x61, 0x46, 0x22, 0x32, 0xd9, 0x20, 0x94, 0xb2, 0x9a, 0x13, 0x9e, 0x97, + 0x5d, 0x1d, 0xbd, 0x2b, 0x2e, 0x5a, 0x8b, 0xd6, 0xad, 0x7a, 0x3c, 0xb9, + 0xeb, 0x9b, 0xc0, 0xc0, 0x14, 0x4b, 0x21, 0x78, 0xee, 0x70, 0x9b, 0x2d, + 0x8e, 0xfd, 0xe6, 0x5f, 0xdf, 0x36, 0x30, 0x56, 0x5f, 0xa8, 0x39, 0x10, + 0xc9, 0xc3, 0xcc, 0x17, 0x9f, 0x46, 0x13, 0x46, 0x72, 0x94, 0xfe, 0x77, + 0x8a, 0x33, 0x63, 0x6a, 0xe2, 0x6a, 0xa9, 0xc2, 0xef, 0x2d, 0x0f, 0xf2, + 0xd6, 0x48, 0xd3, 0xf8, 0xe2, 0xb9, 0xe2, 0x0d, 0x43, 0x4e, 0xb8, 0xbe, + 0x0a, 0xd4, 0xb5, 0x7e, 0x87, 0xb9, 0x2a, 0x6d, 0x35, 0x72, 0xd8, 0xdf, + 0xcd, 0x38, 0xb2, 0xdf, 0x6d, 0x77, 0xc5, 0xc8, 0xc2, 0x56, 0x12, 0xeb, + 0x7a, 0x3e, 0x0c, 0x07, 0x91, 0x00, 0x3d, 0xdd, 0xcf, 0xa7, 0x23, 0x84, + 0x17, 0x49, 0xa6, 0xab, 0x9a, 0x9a, 0x5a, 0xfb, 0x09, 0x8e, 0x1a, 0x82, + 0x39, 0x0f, 0xef, 0x7a, 0x0f, 0xed, 0x28, 0x1d, 0x7d, 0xa1, 0x16, 0xb8, + 0x30, 0x52, 0x4b, 0x5b, 0x43, 0x19, 0xf9, 0x3d, 0xb1, 0x50, 0x81, 0x13, + 0x6b, 0x5b, 0x06, 0xf8, 0xfb, 0x28, 0x90, 0x18, 0xb4, 0x7b, 0xe3, 0x30, + 0x2c, 0x19, 0x3c, 0x82, 0x36, 0x01, 0x5c, 0xea, 0xc9, 0x69, 0x16, 0xe3, + 0x9e, 0x4e, 0x8c, 0x03, 0x23, 0x98, 0x05, 0x6d, 0xa8, 0xc5, 0x7f, 0x7d, + 0x0f, 0x0a, 0x0a, 0x88, 0xb8, 0xb9, 0x1d, 0x5d, 0x4d, 0x2a, 0x37, 0xcc, + 0x5f, 0x0b, 0x89, 0x35, 0xba, 0x7f, 0xa7, 0xac, 0x4a, 0x0e, 0x0d, 0x87, + 0xed, 0x50, 0x1b, 0x61, 0x96, 0xb7, 0xa4, 0x01, 0x42, 0x26, 0x66, 0x7f, + 0x0f, 0x0e, 0xbc, 0x22, 0x1b, 0xae, 0xb6, 0x3c, 0x79, 0x47, 0xd8, 0x67, + 0x7b, 0xfd, 0x62, 0x54, 0x03, 0xf9, 0x9f, 0x74}, + // secret + {0xf8, 0x49, 0x71, 0x07, 0xce, 0x0d, 0x94, 0x8f, 0xf5, 0xbf, 0x6e, + 0x03, 0x9e, 0x3c, 0xc4, 0xeb, 0xfd, 0xf5, 0xe9, 0x40, 0x9e, 0xf7, + 0x71, 0x71, 0xa1, 0xe4, 0xbb, 0x21, 0x65, 0x71, 0x3a, 0x3b}, + true}, + // tcID: 87 + {87, + params_ml_kem768_test_mode, + // privateKey + {0xdd, 0x30, 0xba, 0xcf, 0xe5, 0x25, 0x65, 0x34, 0x5b, 0xdb, 0x21, 0x57, + 0x88, 0x8b, 0x56, 0x94, 0x43, 0x82, 0x42, 0xe2, 0xa2, 0x79, 0x2b, 0x5e, + 0x36, 0x96, 0xc5, 0x16, 0xf8, 0xad, 0x1d, 0x89, 0x3d, 0xa3, 0xfa, 0x19, + 0x07, 0xab, 0xc9, 0xf0, 0xe6, 0x27, 0x86, 0x6c, 0x30, 0xb1, 0xbc, 0xb4, + 0x88, 0x7c, 0x72, 0x91, 0xd0, 0x38, 0x1f, 0x29, 0x76, 0xc6, 0x90, 0xac, + 0xfa, 0x57, 0x11, 0x84, 0x11, 0x2f, 0x11, 0x25, 0x1e, 0x38, 0xc6, 0x1d, + 0xe8, 0xe7, 0x27, 0x19, 0x85, 0x15, 0xff, 0x26, 0x96, 0xbc, 0x80, 0x02, + 0x00, 0x0d, 0x0c, 0x1a, 0xd5, 0x42, 0x36, 0x06, 0x52, 0xeb, 0xba, 0x33, + 0xf5, 0xf8, 0xa0, 0x37, 0xf5, 0x0e, 0x14, 0x64, 0x00, 0xbf, 0x12, 0x24, + 0x7b, 0x73, 0xa7, 0x04, 0x53, 0x69, 0x27, 0x27, 0x53, 0xb2, 0xdb, 0x9a, + 0x5b, 0x13, 0x61, 0x4c, 0xa4, 0x46, 0x63, 0x4b, 0x95, 0x13, 0xd3, 0xa0, + 0x50, 0xc1, 0x55, 0xe8, 0x79, 0x53, 0x7c, 0xec, 0x6e, 0x93, 0x63, 0x4b, + 0x3d, 0xc0, 0x67, 0xde, 0xdb, 0x1a, 0x6a, 0x37, 0x8d, 0xc9, 0x67, 0x4a, + 0xf3, 0xf0, 0x9a, 0x67, 0x26, 0xb3, 0x46, 0xf5, 0xa1, 0xee, 0x06, 0x9c, + 0x13, 0x56, 0x62, 0x6d, 0x71, 0x26, 0x38, 0x07, 0x45, 0xc7, 0xb0, 0x65, + 0xd5, 0x52, 0x87, 0x35, 0xb3, 0x63, 0x55, 0xa8, 0x26, 0x0f, 0x32, 0x16, + 0xde, 0xd3, 0xcd, 0xb1, 0xf6, 0x78, 0x0b, 0x8b, 0xbf, 0xa4, 0x09, 0xb6, + 0x7a, 0x26, 0x6f, 0x09, 0x74, 0x29, 0xc0, 0xe8, 0x08, 0xd1, 0xf2, 0x47, + 0x96, 0x17, 0xaf, 0x9a, 0x05, 0x71, 0x2e, 0x77, 0x31, 0x29, 0x84, 0x55, + 0x61, 0x1a, 0x66, 0xc2, 0x58, 0x4c, 0x88, 0x88, 0xb6, 0x91, 0xf2, 0x3b, + 0x57, 0x4a, 0x46, 0x3f, 0xa8, 0xcd, 0xad, 0x28, 0x02, 0xcb, 0x14, 0xbf, + 0x83, 0xaa, 0x31, 0xd5, 0xd9, 0x46, 0xed, 0x55, 0x09, 0x7a, 0x24, 0xca, + 0x02, 0x46, 0x96, 0x14, 0x8a, 0x31, 0x26, 0xdb, 0x4e, 0x69, 0xab, 0x82, + 0xed, 0xc9, 0x02, 0x4c, 0x47, 0x34, 0xfe, 0x18, 0x2e, 0x45, 0xe8, 0x76, + 0x67, 0x32, 0x75, 0x0e, 0xd4, 0x43, 0x72, 0x6a, 0x57, 0x8e, 0x39, 0x48, + 0x4a, 0x90, 0x72, 0x1a, 0x28, 0xcb, 0xb0, 0xe0, 0x3d, 0xd7, 0x29, 0x31, + 0x40, 0x55, 0x16, 0xf5, 0x30, 0x01, 0xd5, 0x7c, 0x4c, 0xa4, 0xea, 0x2e, + 0x17, 0x1c, 0xc2, 0x7a, 0xd8, 0x96, 0xf2, 0xa8, 0xc6, 0xa5, 0x87, 0x7c, + 0x53, 0x38, 0x37, 0x4d, 0xac, 0x8d, 0xf4, 0xd7, 0x62, 0xc1, 0xd9, 0x7b, + 0xc7, 0x35, 0x43, 0x0b, 0x33, 0xcf, 0x62, 0xbb, 0xc2, 0xd0, 0xa0, 0xa3, + 0xfa, 0x84, 0x01, 0xb5, 0x4c, 0x0b, 0xb7, 0x7a, 0x46, 0xff, 0xe5, 0xad, + 0x73, 0xfc, 0x2a, 0x5d, 0x28, 0x5a, 0x11, 0x37, 0x05, 0x2e, 0xd0, 0x28, + 0xdb, 0x79, 0x98, 0x8a, 0x43, 0x23, 0xd0, 0xf8, 0x10, 0x5c, 0x58, 0xad, + 0x9f, 0xb4, 0x7b, 0xed, 0x3a, 0x60, 0xa8, 0x81, 0x1f, 0xa2, 0xc5, 0x5b, + 0x18, 0x7a, 0xc7, 0xda, 0xdc, 0xc4, 0x2a, 0xc0, 0x9b, 0x2e, 0xea, 0x36, + 0x09, 0xa0, 0x6a, 0x68, 0xeb, 0x47, 0xb2, 0x80, 0x25, 0x41, 0x9b, 0x9c, + 0x70, 0x2b, 0xca, 0xf0, 0x6c, 0x38, 0xc8, 0x6c, 0x76, 0x40, 0x62, 0x9c, + 0x89, 0xd7, 0xa4, 0x86, 0x99, 0x0d, 0x62, 0x43, 0x3a, 0x66, 0x32, 0x7a, + 0x68, 0x7a, 0x4c, 0xcc, 0xfb, 0xbe, 0xf4, 0xc0, 0x94, 0x79, 0x66, 0xc9, + 0x91, 0x57, 0x35, 0x92, 0xb7, 0x8e, 0x54, 0xe7, 0xab, 0xd5, 0xa9, 0xcd, + 0x17, 0xd6, 0x93, 0x09, 0x33, 0x93, 0x6e, 0x04, 0x91, 0x21, 0xc5, 0x68, + 0xcc, 0x01, 0x3d, 0x41, 0x5c, 0x23, 0xcb, 0xb2, 0x12, 0x5f, 0x5a, 0x3b, + 0x1f, 0xf5, 0x8f, 0xa7, 0x95, 0xb4, 0xe1, 0x6b, 0x8c, 0x44, 0xa9, 0x4f, + 0xfc, 0xc3, 0x44, 0xd0, 0x35, 0xbd, 0xed, 0xc4, 0x56, 0x98, 0xa2, 0xa2, + 0x05, 0x41, 0x44, 0x16, 0xa4, 0x9f, 0x4e, 0x2a, 0x06, 0x28, 0x1c, 0x9d, + 0x25, 0x44, 0x62, 0xc0, 0x70, 0xaa, 0x8b, 0x79, 0x74, 0x18, 0x0b, 0x3f, + 0xaf, 0x81, 0xa7, 0x25, 0x70, 0x34, 0xb7, 0x75, 0x2e, 0xa3, 0x15, 0xa1, + 0xf4, 0xdc, 0x64, 0x41, 0x84, 0x70, 0xef, 0xba, 0x37, 0xb2, 0x28, 0xc0, + 0xe5, 0x82, 0x6c, 0x40, 0xd3, 0x15, 0x19, 0x86, 0x5d, 0x0d, 0xd0, 0x70, + 0x04, 0xb2, 0x1b, 0x0d, 0x57, 0x87, 0x2f, 0xba, 0x2a, 0x00, 0x24, 0x5c, + 0x27, 0x02, 0xcf, 0x2c, 0x8a, 0xb9, 0x1c, 0x5a, 0x5a, 0xf8, 0xf4, 0x06, + 0x14, 0xfb, 0xb1, 0x27, 0x9c, 0x66, 0xc4, 0xf2, 0x40, 0x5b, 0x42, 0x21, + 0xed, 0xbb, 0x8b, 0x35, 0xfc, 0x5e, 0xb6, 0x57, 0x07, 0x55, 0x9a, 0x29, + 0xa0, 0x49, 0x39, 0xc5, 0x99, 0x06, 0x33, 0x68, 0x07, 0x71, 0xd7, 0x6e, + 0x30, 0x26, 0x16, 0xda, 0x2a, 0x53, 0x84, 0xd8, 0x75, 0xe5, 0xf2, 0xc3, + 0xac, 0xd4, 0xc9, 0x6f, 0xa7, 0x4c, 0xf8, 0x80, 0x90, 0xb2, 0x25, 0x40, + 0x47, 0x81, 0x61, 0xbb, 0xc1, 0x4b, 0x8b, 0x61, 0x21, 0x60, 0x72, 0x39, + 0x05, 0x60, 0x22, 0xea, 0x39, 0x47, 0xef, 0x66, 0x1d, 0x72, 0xb1, 0x22, + 0x27, 0x88, 0x9c, 0x2e, 0x1c, 0x26, 0x6a, 0x7a, 0x60, 0xc0, 0x14, 0xbe, + 0x19, 0xe0, 0x32, 0x88, 0x17, 0x10, 0x40, 0x27, 0x47, 0x5c, 0xbc, 0x78, + 0xce, 0x2c, 0x85, 0x01, 0x20, 0x17, 0xed, 0xdc, 0x0f, 0x7c, 0xea, 0x11, + 0xc8, 0xea, 0x72, 0xad, 0x33, 0x38, 0x49, 0x82, 0x92, 0xbe, 0xea, 0x4b, + 0x8a, 0x71, 0x29, 0xd7, 0x1b, 0x19, 0x27, 0xfa, 0xc2, 0xa6, 0x92, 0x1d, + 0xfb, 0x87, 0xc4, 0x25, 0xf9, 0xcc, 0xbd, 0xe2, 0xbd, 0xd0, 0x1c, 0x68, + 0x5e, 0x3c, 0xae, 0x52, 0x42, 0x50, 0x70, 0xc5, 0xc0, 0x0e, 0xc8, 0x74, + 0x5f, 0xa5, 0x38, 0xe4, 0xf9, 0x6f, 0x72, 0xd8, 0x92, 0x14, 0xe0, 0x42, + 0xf1, 0x97, 0x34, 0xd7, 0xe5, 0x79, 0x52, 0xd0, 0x83, 0x3c, 0x72, 0x27, + 0x6c, 0xc9, 0x3d, 0x99, 0x91, 0xa1, 0xad, 0x99, 0xae, 0x0c, 0xb5, 0x88, + 0x6f, 0xb8, 0x33, 0x67, 0xc9, 0x67, 0xca, 0x65, 0xa7, 0xaf, 0xd0, 0x22, + 0xdf, 0x40, 0x4d, 0xb0, 0x62, 0x5f, 0xbf, 0x2c, 0x50, 0xf0, 0xd8, 0x81, + 0x2f, 0xe2, 0xbb, 0x1d, 0xb4, 0x35, 0x1c, 0x7c, 0xca, 0x96, 0x01, 0x8a, + 0x07, 0xa6, 0xaa, 0x62, 0x25, 0x56, 0x55, 0xa5, 0x93, 0x19, 0xaa, 0x9a, + 0x0f, 0x13, 0x03, 0x87, 0xac, 0x5e, 0xb3, 0xba, 0x45, 0x91, 0xa6, 0x81, + 0x30, 0x52, 0x3a, 0x6d, 0x02, 0x3f, 0x57, 0xd7, 0x80, 0x1c, 0x71, 0xbf, + 0x22, 0x37, 0xa1, 0x7f, 0xb3, 0x59, 0x0b, 0x24, 0x0f, 0xb0, 0x30, 0x37, + 0x67, 0x5a, 0x56, 0xcb, 0x85, 0xa6, 0x8e, 0xc0, 0xc4, 0xfb, 0xec, 0x98, + 0xa1, 0xc5, 0x34, 0xea, 0xa4, 0xc1, 0xaf, 0xa1, 0xb7, 0xa0, 0x12, 0xae, + 0x87, 0x1c, 0x2e, 0xa6, 0xb3, 0x4b, 0x3e, 0x66, 0x1a, 0x90, 0x71, 0x3c, + 0x66, 0xa0, 0xa5, 0x27, 0x67, 0x61, 0x43, 0xca, 0xb4, 0x65, 0x20, 0x5e, + 0xd2, 0x1b, 0x1e, 0x82, 0x05, 0x03, 0x43, 0xb6, 0x2c, 0xcb, 0xf8, 0x75, + 0xa2, 0xb1, 0x3d, 0x75, 0x2a, 0xa9, 0x00, 0x74, 0x26, 0xd5, 0x26, 0x61, + 0xe6, 0xe1, 0xc4, 0x24, 0x46, 0xb7, 0xfa, 0x63, 0x23, 0x32, 0x49, 0x8b, + 0x53, 0xdc, 0x68, 0xd7, 0x80, 0x26, 0x4e, 0x16, 0x38, 0xbe, 0x1b, 0x24, + 0xc6, 0x32, 0x3b, 0xff, 0x42, 0x70, 0x30, 0x13, 0x0a, 0x30, 0x91, 0x77, + 0x29, 0x88, 0x78, 0x9c, 0xfc, 0x65, 0x36, 0x9c, 0x98, 0xcf, 0x6a, 0x6b, + 0xcf, 0xdc, 0x99, 0xcb, 0x47, 0x7d, 0x0d, 0x12, 0x05, 0x31, 0xc8, 0xaf, + 0x46, 0x61, 0x32, 0x28, 0xcc, 0x68, 0x7d, 0xb3, 0x8e, 0x98, 0x4c, 0x26, + 0x9f, 0xa2, 0x25, 0xe6, 0x1b, 0x4b, 0x5e, 0xdc, 0x42, 0x46, 0x84, 0x9c, + 0xe2, 0x57, 0x8b, 0xc7, 0x51, 0x98, 0x81, 0x05, 0x5d, 0x00, 0x29, 0x5d, + 0xfb, 0x56, 0x01, 0x52, 0xf4, 0x35, 0xe7, 0xa8, 0x00, 0xf5, 0xe2, 0xbf, + 0x22, 0x99, 0xa2, 0xbe, 0xba, 0x0f, 0x0e, 0xa6, 0x3d, 0x2b, 0x35, 0x50, + 0xaa, 0xe2, 0x51, 0x8e, 0xe8, 0x09, 0x48, 0xe9, 0x96, 0x1b, 0xb7, 0x4d, + 0x5b, 0x5b, 0x8c, 0x65, 0xc2, 0xc7, 0xc2, 0x22, 0x91, 0x58, 0xb0, 0x17, + 0xb9, 0x25, 0x0b, 0x22, 0x00, 0x80, 0x9c, 0x84, 0x66, 0x38, 0x78, 0x31, + 0xc0, 0x8b, 0x79, 0x1f, 0xca, 0x10, 0xd2, 0xdb, 0x38, 0x00, 0x42, 0x9b, + 0x35, 0x27, 0x93, 0x10, 0x40, 0x35, 0x66, 0x93, 0x4b, 0xab, 0xe1, 0x77, + 0x6a, 0x3a, 0x01, 0xea, 0x24, 0xae, 0x60, 0x3a, 0x99, 0x61, 0x3b, 0x63, + 0x59, 0x63, 0x60, 0x74, 0x83, 0x86, 0xc8, 0xf3, 0x3e, 0xda, 0xd3, 0xad, + 0x33, 0xc5, 0x62, 0x0d, 0xbb, 0x58, 0xfe, 0x81, 0xb7, 0x6b, 0x96, 0x0a, + 0x28, 0xc8, 0xa8, 0x93, 0xf7, 0x93, 0x0f, 0x25, 0x83, 0xab, 0x04, 0x31, + 0xcb, 0x15, 0xb6, 0xd0, 0xea, 0x97, 0xee, 0x76, 0x04, 0x5f, 0xec, 0xb2, + 0xfe, 0xe0, 0x9b, 0xe4, 0x11, 0xb8, 0xab, 0x82, 0x72, 0x36, 0xc6, 0x7d, + 0x65, 0xc4, 0xb5, 0x48, 0xa4, 0x39, 0x99, 0x13, 0x4d, 0x4f, 0xa3, 0x73, + 0x56, 0x29, 0xcf, 0xbf, 0x33, 0x14, 0xec, 0x95, 0x51, 0x94, 0xc8, 0xbd, + 0xae, 0x1b, 0x6b, 0x32, 0x63, 0x5f, 0x27, 0x42, 0x7d, 0xf0, 0xc8, 0x10, + 0x36, 0x39, 0xcb, 0xf7, 0x30, 0x1c, 0x4c, 0x36, 0xb8, 0x96, 0xe8, 0x53, + 0xc2, 0x37, 0x7c, 0x5c, 0x15, 0x5c, 0x9d, 0xec, 0x61, 0x1d, 0x1b, 0x6b, + 0xba, 0xbb, 0x67, 0x77, 0xb6, 0xa9, 0x5d, 0xa7, 0x9b, 0x54, 0x56, 0x00, + 0x7b, 0x30, 0xce, 0xd6, 0xbb, 0x45, 0x47, 0x05, 0x6c, 0x7b, 0x08, 0xb7, + 0x03, 0xa7, 0x74, 0x11, 0x4b, 0x03, 0x6d, 0xc0, 0x81, 0xbc, 0x89, 0x6b, + 0xed, 0x96, 0xc8, 0xf7, 0xc8, 0xbe, 0xc4, 0xec, 0x94, 0x5c, 0xb7, 0x8e, + 0x21, 0x50, 0x3f, 0x04, 0xf8, 0x49, 0xc0, 0x53, 0xa9, 0xb7, 0xe1, 0xca, + 0x5e, 0x08, 0x03, 0x25, 0x97, 0x2f, 0xf9, 0x31, 0x0b, 0x12, 0xb0, 0x4b, + 0xfd, 0xda, 0x31, 0xae, 0xe5, 0xc4, 0x5e, 0x7b, 0xa0, 0x24, 0x13, 0x3b, + 0xe2, 0xb7, 0xb3, 0x89, 0xd2, 0x2d, 0x3c, 0x9a, 0xb4, 0xca, 0x34, 0xa3, + 0x1f, 0xa9, 0x02, 0x57, 0x1a, 0xbd, 0x0c, 0x26, 0x7d, 0xc2, 0x31, 0x57, + 0x78, 0x7b, 0x36, 0x8f, 0x13, 0x52, 0xba, 0x6a, 0x0f, 0x9d, 0x04, 0x18, + 0x7a, 0xd2, 0x9c, 0xdc, 0xbc, 0x38, 0x2d, 0xca, 0xce, 0x8e, 0x31, 0x86, + 0x9c, 0xc2, 0xc7, 0xa5, 0x50, 0x97, 0xae, 0xcc, 0x21, 0x8f, 0xa6, 0x85, + 0x09, 0xd2, 0x89, 0x83, 0x39, 0x88, 0xed, 0xc2, 0x6b, 0x23, 0xb4, 0xce, + 0x26, 0x95, 0x4a, 0x15, 0x04, 0x14, 0x65, 0xa7, 0x28, 0x7e, 0x37, 0x2c, + 0xc6, 0x21, 0x3f, 0x79, 0x88, 0x76, 0x8d, 0x10, 0x50, 0x30, 0xda, 0xcd, + 0x01, 0xb7, 0x3b, 0x5f, 0x21, 0x45, 0x02, 0x02, 0x87, 0xad, 0xb9, 0x2d, + 0x63, 0xdb, 0x8d, 0x8e, 0x16, 0xa2, 0x31, 0x61, 0x8d, 0x4d, 0xd9, 0x78, + 0x51, 0x33, 0x5c, 0x68, 0x81, 0x17, 0x89, 0x42, 0x8e, 0x8a, 0x82, 0x80, + 0x51, 0x9a, 0x81, 0xa2, 0x15, 0x77, 0x4b, 0x10, 0x39, 0x81, 0x61, 0x42, + 0x24, 0xe3, 0x55, 0x92, 0x64, 0x78, 0x23, 0xe6, 0x33, 0xe9, 0x51, 0x64, + 0x6a, 0x19, 0x12, 0x72, 0x1c, 0x0a, 0xd5, 0xbc, 0x21, 0xde, 0x84, 0x73, + 0x4e, 0x28, 0x56, 0x53, 0xb0, 0x85, 0x8e, 0x5b, 0x32, 0x56, 0x99, 0xb5, + 0xe3, 0x1c, 0x02, 0x7b, 0x26, 0x6e, 0x7e, 0x82, 0xc6, 0x47, 0x30, 0x72, + 0xa9, 0xe4, 0x9b, 0x0b, 0x8c, 0x28, 0xbc, 0xd1, 0x63, 0xab, 0xcc, 0x7a, + 0x3f, 0x32, 0x51, 0x60, 0x1b, 0x47, 0x19, 0xf2, 0x89, 0x4f, 0x10, 0x89, + 0xfb, 0xb3, 0x7f, 0x1f, 0x76, 0x00, 0x79, 0xc6, 0x28, 0x65, 0x25, 0x55, + 0x1b, 0xe7, 0xac, 0x73, 0xe5, 0x29, 0x26, 0xb2, 0x8f, 0xf3, 0xf8, 0x9a, + 0x66, 0x30, 0x43, 0xcc, 0x3c, 0x5f, 0xe2, 0xbc, 0x03, 0x12, 0xc3, 0xa0, + 0xe1, 0x20, 0x65, 0x83, 0x63, 0x3f, 0x07, 0x47, 0x01, 0x3c, 0x42, 0xa5, + 0x41, 0xe5, 0xcd, 0x53, 0x14, 0x2d, 0x19, 0xd0, 0x6b, 0x7e, 0x93, 0x0c, + 0xe1, 0xf6, 0x84, 0x85, 0xd7, 0x00, 0xbf, 0xac, 0x9a, 0x71, 0x97, 0x7c, + 0x37, 0xa2, 0x8c, 0xb1, 0x1c, 0x70, 0x3a, 0xa0, 0x4f, 0xe5, 0x33, 0xb5, + 0x8f, 0x68, 0x26, 0xac, 0xc1, 0xaf, 0xbf, 0x25, 0xcb, 0x7b, 0x0a, 0x78, + 0x90, 0xc4, 0x27, 0xfe, 0x70, 0x69, 0x12, 0x03, 0x15, 0x31, 0x3c, 0x0a, + 0x45, 0xc1, 0x8c, 0x2e, 0xea, 0x86, 0x82, 0x43, 0xb4, 0xf4, 0x6a, 0x03, + 0x62, 0x2c, 0x91, 0x1a, 0x98, 0xab, 0xbd, 0x7c, 0x2e, 0xa3, 0x30, 0x5a, + 0x52, 0x37, 0xae, 0x76, 0x83, 0x83, 0x50, 0xec, 0x15, 0x12, 0x31, 0x4a, + 0x7c, 0xfb, 0x19, 0x54, 0x92, 0x83, 0xcf, 0x28, 0x66, 0xf3, 0xfc, 0x3f, + 0x42, 0x91, 0x68, 0xa4, 0x61, 0x03, 0x48, 0x30, 0xbc, 0x4f, 0xcc, 0x2a, + 0x72, 0x59, 0xba, 0x6a, 0x49, 0xb2, 0x56, 0xca, 0x90, 0x66, 0x08, 0x6a, + 0x1b, 0xfa, 0x64, 0x71, 0x2a, 0x7e, 0x5e, 0xf4, 0x0b, 0xcc, 0x75, 0x8b, + 0x5a, 0x60, 0x0c, 0x27, 0x17, 0x21, 0x68, 0x39, 0xbe, 0xbe, 0xf9, 0x00, + 0xed, 0xfb, 0xa4, 0x12, 0x6c, 0x89, 0x04, 0x73, 0x28, 0xa9, 0x84, 0x9e, + 0x80, 0xa5, 0x96, 0xfa, 0x93, 0x0d, 0x66, 0x60, 0x99, 0xa9, 0x97, 0x80, + 0x85, 0x50, 0x8f, 0x9a, 0xe8, 0xcd, 0x1a, 0x13, 0x25, 0xb4, 0x08, 0x24, + 0x57, 0x04, 0x5a, 0x92, 0x34, 0x10, 0xc8, 0x4a, 0x0e, 0xf3, 0x82, 0xbe, + 0xa7, 0x54, 0x20, 0x88, 0x3c, 0x4e, 0x3e, 0x43, 0x18, 0x3e, 0x8b, 0x9b, + 0xb0, 0x2a, 0x70, 0x30, 0x05, 0x15, 0x26, 0x05, 0x59, 0x10, 0xa8, 0x35, + 0xaf, 0x90, 0x53, 0xbf, 0xd6, 0x6b, 0x37, 0x8c, 0xb9, 0x78, 0xaa, 0xb1, + 0x4b, 0x62, 0x9f, 0x88, 0x83, 0x9f, 0x3a, 0x4a, 0x7f, 0x98, 0x5b, 0xcf, + 0xee, 0x44, 0x09, 0x39, 0x35, 0x9c, 0x7f, 0xf9, 0x8b, 0x66, 0x82, 0x02, + 0x14, 0x90, 0x45, 0xf6, 0x84, 0x18, 0x46, 0x6c, 0x45, 0xe7, 0x65, 0x17, + 0xf9, 0xf7, 0x38, 0x9a, 0x68, 0x3b, 0x47, 0x89, 0x7a, 0x60, 0x8a, 0x2f, + 0x85, 0x80, 0x0f, 0x77, 0x95, 0xbe, 0x75, 0x79, 0x9d, 0xfd, 0x59, 0x70, + 0x57, 0xfa, 0x3f, 0x86, 0xc8, 0x4c, 0xd5, 0x2a, 0x41, 0x40, 0x75, 0x8a, + 0xe4, 0x5b, 0x51, 0xf8, 0x02, 0x62, 0xdd, 0x56, 0x33, 0x75, 0x62, 0xa9, + 0x74, 0xb9, 0x42, 0xdc, 0xd2, 0x0e, 0xa2, 0xbc, 0x5c, 0x52, 0xf2, 0x25, + 0xda, 0xf5, 0xa8, 0x0b, 0xe0, 0xae, 0xd0, 0x45, 0xa7, 0xe8, 0x12, 0x81, + 0x9f, 0x64, 0x6d, 0x28, 0xb0, 0x57, 0x8d, 0x04, 0x2c, 0x8b, 0x77, 0xc8, + 0x34, 0x1b, 0x46, 0x10, 0x2b, 0xc8, 0x81, 0xa7, 0x38, 0xdd, 0xbb, 0x43, + 0x41, 0x1b, 0x43, 0xc4, 0x18, 0x13, 0xc4, 0xc2, 0x8d, 0x75, 0x40, 0x0b, + 0xad, 0x49, 0x02, 0xec, 0xe7, 0xc8, 0x99, 0xfc, 0x7f, 0xee, 0xe3, 0x2c, + 0x78, 0xd7, 0x01, 0x65, 0xdb, 0xbd, 0xd1, 0x39, 0xba, 0x3e, 0xb2, 0x21, + 0x0e, 0xe3, 0xc1, 0xf6, 0xbc, 0x2b, 0x31, 0xc8, 0xc7, 0x3b, 0x1a, 0x54, + 0x65, 0x73, 0x46, 0xc3, 0xd3, 0x22, 0xb2, 0x43, 0xaf, 0x79, 0x7a, 0x93, + 0xe7, 0x12, 0x9b, 0x17, 0xfb, 0xcd, 0x3c, 0x7b, 0x9c, 0xe4, 0x92, 0x16, + 0x47, 0x2b, 0xb6, 0xdf, 0x1b, 0x2f, 0x41, 0xba, 0x4e, 0xc3, 0x81, 0x3e, + 0xe6, 0xdb, 0x38, 0x98, 0xf1, 0x96, 0x43, 0xc3, 0x8f, 0xfa, 0xf3, 0x88, + 0x01, 0x01, 0xb0, 0x8d, 0xe8, 0x37, 0x0a, 0xba, 0xa8, 0x2d, 0x91, 0xbf, + 0xde, 0x31, 0xb8, 0xf7, 0x8c, 0xb8, 0x54, 0x74, 0xa3, 0xbf, 0x06, 0x84, + 0x4a, 0x23, 0x3e, 0x65, 0x88, 0x43, 0x03, 0xca, 0xbd, 0xd1, 0xbb, 0x52, + 0xf2, 0x3c, 0x01, 0x51, 0x28, 0x71, 0xa6, 0xfb, 0x50, 0xdc, 0xd3, 0xa2, + 0x41, 0x71, 0x40, 0xda, 0xb0, 0x19, 0xa1, 0x1b, 0xc1, 0x01, 0x76, 0xc5, + 0xc8, 0x3b, 0xb1, 0x38, 0xcc, 0x2b, 0xb4, 0x53, 0x69, 0xfb, 0x74, 0x99, + 0x56, 0x13, 0xcc, 0xf7, 0x14, 0x26, 0xcc, 0x45, 0x53, 0x65, 0x86, 0xa9, + 0xec, 0xeb, 0x63, 0x87, 0x74, 0x94, 0xc4, 0x78, 0x9e, 0x62, 0xb3, 0x3b, + 0xe1, 0x9b, 0x87, 0xac, 0x40, 0x35, 0x7d, 0xe5, 0x84, 0xf1, 0x1b, 0x23, + 0x6e, 0x38, 0x9b, 0x26, 0xa5, 0x57, 0x82, 0x32, 0x47, 0x8e, 0x56, 0xb7, + 0x98, 0xfa, 0x77, 0xe6, 0x36, 0x6e, 0xc1, 0x50, 0x46, 0xb3, 0x8b, 0x4b, + 0xee, 0x02, 0x55, 0xfb, 0x6a, 0xc0, 0xb8, 0xb9, 0x28, 0xf9, 0xf3, 0x84, + 0x94, 0x17, 0xb7, 0xc7, 0x6a, 0x39, 0x6d, 0x0b, 0x58, 0xde, 0x16, 0xc7, + 0x09, 0xe5, 0x8d, 0x5c, 0x52, 0x3d, 0xcb, 0x6c, 0x7e, 0xf7, 0x4c, 0x60, + 0x96, 0x08, 0x86, 0x92, 0x6b, 0x4f, 0x5b, 0x47, 0x2a, 0x7d, 0x2b, 0x41, + 0x9d, 0xb0, 0x65, 0x92, 0x69, 0x1b, 0x0f, 0x72, 0x99, 0xee, 0x97, 0x0b, + 0x8e, 0xca, 0x7f, 0x74, 0xb1, 0x25, 0x8a, 0xd1, 0x7c, 0x08, 0x7c, 0x8e, + 0xa0, 0xf1, 0xaa, 0x37, 0xc4, 0x0c, 0x63, 0x1c, 0xfc, 0x95, 0xab, 0xcc, + 0x46, 0x5f, 0x63, 0x15, 0xc5, 0x4c, 0x75, 0x31, 0xff, 0x55, 0x9f, 0x19, + 0xb9, 0x52, 0x40, 0x6f, 0xf1, 0xbe, 0x2c, 0x2c, 0x55, 0xa5, 0x81, 0x7f, + 0x1a, 0x9b, 0x11, 0xaa, 0xec, 0x31, 0x12, 0x02, 0x98, 0x60, 0xe6, 0x40, + 0x0d, 0x99, 0xe5, 0x7d, 0xf7, 0x96, 0xa8, 0xb7, 0x75, 0xc8, 0xc5, 0x06, + 0x0d, 0x4c, 0x3d, 0xf4, 0x5b, 0xa1, 0x40, 0x5a, 0x29, 0x36, 0x56, 0x50, + 0x7d, 0x39, 0xc8, 0xfc, 0x39, 0x90, 0xbd, 0x23, 0xe6, 0x73, 0x57, 0x15, + 0x79, 0x2e, 0xff, 0x44, 0x0a, 0x9b, 0xec, 0x79, 0xc7, 0xf5, 0xfd, 0xe9}, + // ciphertext + {0x69, 0x0d, 0x3d, 0xa5, 0x1b, 0x1d, 0x22, 0xba, 0x09, 0xaa, 0x62, 0xb4, + 0xfd, 0x6e, 0xad, 0xfb, 0x4c, 0x58, 0x7c, 0x34, 0xfc, 0x43, 0x4c, 0x62, + 0x22, 0x5b, 0x9d, 0x13, 0x2d, 0xed, 0xfa, 0x57, 0x74, 0xb4, 0xad, 0xfa, + 0x21, 0x3e, 0xdb, 0x32, 0x8d, 0xfd, 0x60, 0x56, 0xce, 0xe8, 0xf9, 0x6e, + 0xc1, 0x45, 0x4c, 0x85, 0xf8, 0x03, 0x70, 0x21, 0xf2, 0x28, 0x79, 0xff, + 0x0b, 0xd7, 0xfe, 0x13, 0x86, 0xbf, 0x27, 0x20, 0x21, 0x52, 0x2f, 0x77, + 0x4f, 0x10, 0xc4, 0xc9, 0xf7, 0xa5, 0x3e, 0x18, 0xe3, 0xa7, 0x02, 0x3d, + 0xea, 0x1c, 0x3b, 0xc8, 0xbc, 0x76, 0xea, 0x8f, 0xcd, 0x2b, 0xe2, 0x44, + 0x2a, 0x65, 0x5f, 0x2e, 0x34, 0xf3, 0xf1, 0x02, 0x91, 0x9b, 0x4c, 0x33, + 0x6b, 0x17, 0x7b, 0x03, 0x8a, 0x0c, 0xde, 0x0a, 0x2a, 0x49, 0x78, 0x7e, + 0x89, 0xab, 0x00, 0x59, 0x99, 0xf1, 0xac, 0x73, 0x3a, 0x04, 0xb8, 0x67, + 0xd5, 0x57, 0xaf, 0xec, 0x75, 0x02, 0x36, 0x8c, 0xf8, 0xde, 0xd9, 0x6c, + 0xda, 0x58, 0xfd, 0x0c, 0x04, 0x26, 0x76, 0x7a, 0xc2, 0xed, 0xf8, 0x08, + 0xf8, 0xa0, 0x3b, 0x45, 0xd7, 0x2b, 0x30, 0xd3, 0x54, 0xc9, 0x79, 0x2f, + 0xef, 0x52, 0x13, 0xe7, 0x92, 0x83, 0x99, 0xf0, 0x9e, 0x2d, 0xe5, 0x40, + 0xf4, 0x82, 0x6e, 0xd7, 0x2f, 0x86, 0xc0, 0x26, 0x37, 0x73, 0x8a, 0xcf, + 0x28, 0xb2, 0x8c, 0xbc, 0x8d, 0x45, 0xd5, 0xa7, 0xa0, 0xf4, 0xac, 0x5a, + 0x1b, 0x7c, 0xda, 0x2f, 0xe6, 0xae, 0x38, 0x72, 0xc6, 0x98, 0x5e, 0x61, + 0xe2, 0x59, 0x31, 0x1d, 0x52, 0x01, 0xa5, 0x40, 0xb4, 0x35, 0x1d, 0xa0, + 0xe7, 0x94, 0xf3, 0xbb, 0xaa, 0xb9, 0x16, 0xe2, 0x60, 0x36, 0x33, 0x74, + 0x1a, 0x78, 0x78, 0xbf, 0x61, 0xb3, 0xb3, 0x44, 0x71, 0x5d, 0x6d, 0xcd, + 0x61, 0x4e, 0xcd, 0xe5, 0xed, 0xed, 0xab, 0x3d, 0xcf, 0x4d, 0xb0, 0x35, + 0x82, 0xcf, 0x12, 0xb7, 0x64, 0x17, 0x9e, 0xd8, 0x8f, 0xcf, 0x5f, 0xdb, + 0x0a, 0x55, 0x05, 0x22, 0x46, 0x8e, 0x04, 0xa5, 0xfc, 0xb2, 0x97, 0xea, + 0x78, 0xc1, 0xdc, 0x6d, 0xb4, 0xcb, 0x86, 0x8f, 0x7b, 0x1d, 0x0b, 0x19, + 0x5a, 0x16, 0xca, 0xdb, 0x15, 0xc2, 0x8d, 0xfe, 0x7d, 0x2a, 0xcd, 0x9c, + 0x23, 0x99, 0xb6, 0x46, 0x1e, 0xd2, 0x2d, 0x00, 0x0f, 0x33, 0x68, 0xe8, + 0x8b, 0xf1, 0x2f, 0x32, 0xbf, 0xe6, 0xb7, 0x49, 0xb4, 0x66, 0x59, 0x78, + 0xc2, 0x97, 0x31, 0x4d, 0xb3, 0x51, 0x22, 0xc7, 0xd0, 0x47, 0x38, 0xe3, + 0x8f, 0x7b, 0x4c, 0xd8, 0x24, 0x6f, 0xd3, 0x6b, 0x93, 0x62, 0x4c, 0xdc, + 0x7f, 0x0b, 0xb1, 0x0f, 0xb4, 0x82, 0x47, 0x9e, 0xf1, 0xe1, 0xff, 0xb2, + 0xf8, 0x50, 0x94, 0xc9, 0x80, 0x6d, 0x16, 0x04, 0x67, 0x83, 0x2d, 0x60, + 0x4f, 0xf7, 0x94, 0x5c, 0xe2, 0xd6, 0xbc, 0xdf, 0x15, 0x80, 0x2b, 0xc2, + 0xce, 0xcb, 0x90, 0xfa, 0x3f, 0x10, 0x99, 0x87, 0xbb, 0xb3, 0x77, 0xb4, + 0xe0, 0xb0, 0x92, 0xb6, 0x4f, 0x71, 0x2e, 0x36, 0x05, 0xb3, 0xb1, 0x1e, + 0x33, 0x77, 0x45, 0x35, 0x38, 0xeb, 0x28, 0x40, 0x62, 0x43, 0xc9, 0xc1, + 0x82, 0x85, 0x86, 0x50, 0xf7, 0x0c, 0xa9, 0xaa, 0xe1, 0xb8, 0xe0, 0x0e, + 0x36, 0x99, 0xd2, 0xc4, 0x70, 0x38, 0xf2, 0xaf, 0x70, 0x76, 0xca, 0x6c, + 0x23, 0x30, 0x54, 0x2f, 0xe6, 0x80, 0xd7, 0x9c, 0x46, 0x3f, 0x60, 0xf8, + 0x01, 0x92, 0xf8, 0x5f, 0x6b, 0xfa, 0x0a, 0xd4, 0x55, 0x71, 0x28, 0x40, + 0xf0, 0xe2, 0x5d, 0xfd, 0xe2, 0x9c, 0xb9, 0x8a, 0x68, 0xfd, 0x2e, 0xb4, + 0xda, 0xe3, 0xc5, 0x36, 0x96, 0x7d, 0x5c, 0x46, 0x15, 0x78, 0x8a, 0xd7, + 0x0a, 0x54, 0x51, 0xac, 0xc7, 0x8a, 0x54, 0x19, 0x97, 0x9e, 0xb3, 0x5f, + 0x83, 0xe2, 0xde, 0xc8, 0xa9, 0xef, 0x3d, 0xf1, 0x9a, 0x73, 0x22, 0x58, + 0x32, 0xfc, 0x6e, 0xf7, 0x6a, 0x19, 0x15, 0x9e, 0x38, 0xde, 0x1b, 0xd1, + 0x5b, 0x69, 0x31, 0xf4, 0xd4, 0x7c, 0x25, 0x02, 0x4a, 0xb2, 0xdf, 0xb0, + 0xa8, 0x00, 0xed, 0xb9, 0xe0, 0x70, 0xe1, 0xfb, 0x36, 0x28, 0xb8, 0x23, + 0x6a, 0xd2, 0x27, 0xac, 0x3f, 0x66, 0x03, 0xf1, 0x86, 0x6c, 0x4c, 0xfd, + 0x66, 0x9f, 0x99, 0x2c, 0x50, 0xc0, 0x6c, 0x19, 0x86, 0x86, 0x83, 0x30, + 0xc4, 0x88, 0x9b, 0x3a, 0x9f, 0x77, 0xde, 0xbc, 0x70, 0x2f, 0x3a, 0x63, + 0x37, 0xa5, 0x49, 0xb1, 0xf5, 0x1f, 0xfb, 0xb7, 0x20, 0x1b, 0x04, 0x28, + 0x7d, 0xfa, 0x6b, 0xf3, 0x14, 0x41, 0x60, 0xde, 0xd6, 0x20, 0x6b, 0x5a, + 0xa1, 0xf9, 0xa0, 0x3c, 0xc0, 0xd5, 0x6f, 0xc5, 0x3e, 0xe5, 0x5c, 0x8c, + 0xd9, 0xa2, 0x33, 0x44, 0xbc, 0xfb, 0xe1, 0x43, 0x99, 0x04, 0xa3, 0xfe, + 0x6a, 0x22, 0x5d, 0x3d, 0xc1, 0x6b, 0xf0, 0xbd, 0xe2, 0xb5, 0x3f, 0x90, + 0xcc, 0x00, 0x64, 0xc4, 0xa7, 0xda, 0x29, 0xe9, 0x3a, 0x84, 0x58, 0x51, + 0x61, 0xd6, 0xb3, 0x67, 0x06, 0x3d, 0xf1, 0xad, 0x26, 0x39, 0xe9, 0x4f, + 0x0f, 0x61, 0x45, 0x52, 0x25, 0xaa, 0x72, 0xc2, 0x94, 0x93, 0x62, 0x93, + 0x83, 0x1b, 0x7f, 0x22, 0x1d, 0x20, 0x9d, 0x30, 0x31, 0x7f, 0xe4, 0xd6, + 0x85, 0x07, 0x82, 0x2b, 0xf6, 0x67, 0xc8, 0x17, 0x5f, 0x23, 0xac, 0xdb, + 0x14, 0x00, 0x07, 0x15, 0xd2, 0x6a, 0xb3, 0x30, 0x3c, 0x46, 0xd2, 0xe9, + 0x74, 0x1f, 0x03, 0xa7, 0x3c, 0x5f, 0xf8, 0x0b, 0x50, 0xe2, 0x75, 0x07, + 0x44, 0xd7, 0x47, 0xe2, 0x95, 0xa6, 0xdc, 0x2d, 0x6b, 0x9c, 0x5d, 0x12, + 0xf0, 0xd7, 0x11, 0x26, 0x7f, 0x46, 0xe6, 0x1d, 0x25, 0x38, 0x8a, 0x5a, + 0xd5, 0x7f, 0x8e, 0xd0, 0xef, 0x9c, 0xf9, 0x93, 0x11, 0xa6, 0xa1, 0x4d, + 0x0e, 0xc5, 0xaa, 0x5b, 0xd8, 0x04, 0x67, 0x55, 0x92, 0x19, 0x30, 0x40, + 0x6b, 0x78, 0x6b, 0xb0, 0x15, 0xf4, 0xc5, 0xb1, 0x32, 0x66, 0x50, 0xcf, + 0x8a, 0x6e, 0xa2, 0xff, 0xa7, 0x58, 0xc4, 0xf3, 0x25, 0x0f, 0x23, 0x5c, + 0xf4, 0xa8, 0x24, 0x80, 0x7b, 0xff, 0x10, 0xbf, 0x54, 0x91, 0x0a, 0x61, + 0x0b, 0x13, 0x61, 0xb1, 0x56, 0x98, 0x0a, 0xbd, 0xe8, 0x6d, 0x08, 0x7f, + 0xa1, 0x33, 0xca, 0xbe, 0x34, 0xfc, 0x5e, 0xed, 0x86, 0xc3, 0x33, 0x2b, + 0x86, 0xa8, 0x47, 0x42, 0xab, 0xf3, 0x31, 0x44, 0xb8, 0xb0, 0x8e, 0x3e, + 0x22, 0xc8, 0x45, 0xa5, 0xe0, 0xc2, 0xab, 0xd7, 0x86, 0xda, 0x7a, 0x7e, + 0x01, 0xde, 0xe4, 0x55, 0x83, 0x65, 0x85, 0x7b, 0x38, 0x4c, 0xc3, 0xf3, + 0x98, 0xd7, 0x4e, 0x15, 0x7c, 0xcd, 0xbe, 0xbf, 0x8a, 0xba, 0x82, 0xab, + 0x78, 0x04, 0x30, 0x3e, 0xd2, 0x7e, 0x28, 0x0b, 0xf6, 0x8a, 0xc3, 0x12, + 0x2f, 0x68, 0x81, 0xb3, 0xf7, 0x5c, 0x0f, 0x5b, 0xbb, 0x69, 0xf6, 0xc0, + 0x2c, 0x47, 0x12, 0xff, 0x8b, 0x9d, 0x18, 0x22, 0x68, 0x6c, 0xbc, 0x44, + 0x1a, 0x4c, 0x81, 0xbb, 0x54, 0xdf, 0x79, 0xc9, 0x0e, 0x32, 0xa2, 0xc5, + 0x46, 0x4c, 0x04, 0x53, 0x95, 0x4d, 0xe2, 0x31, 0xaa, 0x0d, 0x01, 0xa0, + 0xfb, 0xb8, 0x68, 0xb4, 0x46, 0x7d, 0x1a, 0xb6, 0x03, 0x5a, 0x9f, 0x0c, + 0x85, 0xc1, 0xc4, 0x01, 0x6f, 0x58, 0x6b, 0x7b, 0x6e, 0x65, 0x36, 0x89, + 0x33, 0x19, 0x49, 0x38, 0x0a, 0x00, 0xcc, 0x8a, 0xbb, 0xb2, 0x65, 0x08, + 0x96, 0x06, 0xf6, 0x5e, 0x32, 0x4f, 0xee, 0x9a, 0xf4, 0xcd, 0xf0, 0x2b, + 0x1f, 0x66, 0x85, 0xaf, 0xaa, 0x05, 0xe2, 0xdc, 0x9a, 0xa1, 0x7a, 0xf7, + 0xe8, 0x13, 0x1d, 0x1f, 0x1e, 0x3d, 0x2f, 0xfd, 0xb9, 0x59, 0x2c, 0x9c, + 0x57, 0xcc, 0xdd, 0x61, 0x92, 0x74, 0xd5, 0x47, 0xfe, 0x22, 0x85, 0xa8, + 0x98, 0x9d, 0xe7, 0x92, 0x6c, 0x65, 0x4d, 0xca, 0xed, 0x56, 0x13, 0xcb, + 0x4d, 0xd4, 0xa2, 0xe0, 0xbb, 0xf9, 0xba, 0xa7, 0xda, 0x1a, 0x0f, 0x76, + 0x28, 0xc9, 0x24, 0x92, 0x7e, 0xc3, 0xc3, 0x39, 0xa3, 0x8e, 0x73, 0xc2, + 0x19, 0xcc, 0x79, 0xed, 0xb4, 0x90, 0x4f, 0x97}, + // secret + {0x8b, 0x6a, 0xa7, 0x70, 0x88, 0xcc, 0x99, 0x8c, 0x2e, 0x6b, 0x42, + 0xac, 0xa5, 0x7d, 0xbf, 0x3f, 0xab, 0x78, 0x6d, 0xff, 0x66, 0xac, + 0xb0, 0x17, 0xb2, 0xac, 0xb4, 0x8f, 0xdb, 0xc7, 0x3d, 0x07}, + true}, + // tcID: 88 + {88, + params_ml_kem768_test_mode, + // privateKey + {0x19, 0x50, 0x06, 0xa3, 0x55, 0x0b, 0x23, 0x1c, 0x83, 0x48, 0xe6, 0xb3, + 0xb5, 0xb3, 0x86, 0xe9, 0xe3, 0x10, 0x8a, 0xeb, 0xbc, 0x8f, 0x83, 0x63, + 0x06, 0x06, 0x58, 0x6e, 0xc2, 0x86, 0x35, 0xe5, 0x88, 0x78, 0x80, 0x9a, + 0x5a, 0x53, 0x36, 0x32, 0x14, 0xaa, 0x48, 0xc3, 0x50, 0x8c, 0x32, 0x92, + 0x90, 0x90, 0x28, 0x0c, 0x36, 0x6c, 0xbc, 0xe2, 0x97, 0x13, 0x32, 0xc9, + 0x6f, 0x05, 0x55, 0x1f, 0x06, 0x81, 0x4f, 0x34, 0x0b, 0x54, 0x90, 0xbe, + 0x54, 0x54, 0x48, 0xea, 0x60, 0x3b, 0xdb, 0x94, 0x5b, 0x5b, 0x77, 0x81, + 0x30, 0xca, 0x72, 0xad, 0x49, 0x0e, 0x3f, 0xdc, 0xcd, 0x19, 0x04, 0x48, + 0x7e, 0x12, 0x84, 0xee, 0x39, 0x29, 0x41, 0x97, 0x0d, 0x44, 0xca, 0x31, + 0x4f, 0x38, 0xbf, 0x6a, 0x22, 0x41, 0x41, 0x92, 0xa1, 0x37, 0x25, 0x36, + 0xcf, 0x1c, 0x55, 0x9a, 0x48, 0xa5, 0xa8, 0x90, 0x11, 0xd9, 0x35, 0x78, + 0x1c, 0xc5, 0x4e, 0x6b, 0xd4, 0x3f, 0x8c, 0xd3, 0xa9, 0x52, 0xc6, 0x38, + 0x62, 0x65, 0x97, 0x12, 0x12, 0xc2, 0x1d, 0x8b, 0x6b, 0xf0, 0xcc, 0x0b, + 0x72, 0xd5, 0x60, 0xdb, 0xb7, 0x9c, 0x00, 0x92, 0xbc, 0x05, 0x96, 0xba, + 0x5d, 0x5b, 0x70, 0xa1, 0xc4, 0x8c, 0x7e, 0x47, 0x41, 0x63, 0xb0, 0x0c, + 0xde, 0x38, 0x9a, 0xdc, 0x88, 0x1b, 0xd5, 0x80, 0x75, 0xc5, 0xc4, 0x3d, + 0x22, 0xa2, 0x8e, 0x1e, 0xc5, 0x10, 0x23, 0xb2, 0x70, 0x24, 0x24, 0x9c, + 0x33, 0x82, 0xa2, 0x5e, 0x26, 0xc5, 0x6d, 0xd6, 0x51, 0xe9, 0x2b, 0x45, + 0xbc, 0xb9, 0x6f, 0x8b, 0x41, 0xc6, 0x71, 0xc4, 0x73, 0x08, 0x47, 0x25, + 0x3a, 0x15, 0xc1, 0xc2, 0x06, 0x1a, 0x05, 0x56, 0x03, 0x39, 0x7c, 0x39, + 0x41, 0x57, 0x57, 0x08, 0x48, 0xa8, 0x8d, 0x22, 0xc4, 0xb1, 0xfa, 0x08, + 0x08, 0xf6, 0x5c, 0xf4, 0x7a, 0x7c, 0xb5, 0xb0, 0x6e, 0x14, 0x99, 0x00, + 0xa1, 0xdc, 0x9e, 0x8c, 0x4c, 0x58, 0xbe, 0x1b, 0x08, 0x2a, 0xb3, 0xb9, + 0x9a, 0xc3, 0x4e, 0xef, 0x85, 0x52, 0x16, 0xf4, 0xb4, 0xd9, 0xd2, 0x76, + 0xa6, 0x87, 0x63, 0x6d, 0xa8, 0x93, 0x80, 0x56, 0xaf, 0xb7, 0x64, 0xc5, + 0x54, 0xd0, 0x7a, 0x9a, 0x72, 0x41, 0xaf, 0xf5, 0x1b, 0x05, 0x2a, 0x47, + 0x5e, 0x37, 0x52, 0x13, 0x90, 0x90, 0x6a, 0x24, 0x1b, 0x73, 0xf7, 0x1f, + 0x5e, 0x89, 0x13, 0x35, 0x7c, 0x82, 0x57, 0x39, 0x2b, 0x17, 0x43, 0x0c, + 0xf7, 0x61, 0x54, 0xab, 0x6c, 0xaa, 0x1a, 0xa2, 0x55, 0x77, 0x19, 0x54, + 0xca, 0x3c, 0xaf, 0x73, 0x17, 0x48, 0xd8, 0x70, 0xa9, 0x9a, 0xa4, 0x09, + 0x71, 0x83, 0xbe, 0x10, 0x13, 0xc9, 0xbf, 0xc7, 0xcd, 0x78, 0xb8, 0xc7, + 0x7c, 0x44, 0x12, 0xd6, 0x9a, 0x51, 0x8b, 0xe9, 0x1c, 0x2d, 0xbc, 0x72, + 0xc2, 0x65, 0x6a, 0x2f, 0xb1, 0x82, 0x31, 0xb9, 0x58, 0x71, 0x45, 0x13, + 0xc5, 0x1c, 0x71, 0xcc, 0x00, 0x21, 0x39, 0x93, 0x6f, 0x64, 0xb8, 0xc6, + 0x87, 0x9c, 0x78, 0xbe, 0xa3, 0x52, 0xac, 0x82, 0x69, 0x10, 0x41, 0xc5, + 0x26, 0xcc, 0x97, 0xbe, 0x79, 0x0d, 0x07, 0xda, 0x9a, 0xde, 0x6b, 0x4d, + 0xb2, 0x89, 0x53, 0xa2, 0x33, 0xb0, 0xb7, 0xf0, 0xae, 0x0e, 0x08, 0xae, + 0xc8, 0x22, 0x56, 0xb7, 0x0a, 0x51, 0xbf, 0x89, 0x3c, 0x1d, 0x64, 0x3e, + 0x66, 0x29, 0x01, 0x15, 0x37, 0xb8, 0x45, 0x05, 0x02, 0x57, 0x18, 0x4e, + 0x36, 0xb3, 0xa9, 0x0b, 0x00, 0x83, 0x82, 0x52, 0x8f, 0x0f, 0xe2, 0x68, + 0xd3, 0x64, 0x53, 0xb0, 0x88, 0x94, 0x11, 0x5b, 0x3c, 0x10, 0x61, 0x7f, + 0x4a, 0x8a, 0x3c, 0x63, 0xe7, 0x48, 0xaf, 0xf0, 0x7b, 0x60, 0xb7, 0x61, + 0x79, 0x57, 0x2d, 0xec, 0x95, 0x85, 0x31, 0xdb, 0x5c, 0x90, 0x3c, 0x2e, + 0xe8, 0x26, 0xc1, 0x8f, 0xcc, 0x40, 0x63, 0x6b, 0x28, 0xe5, 0xb3, 0x7c, + 0x0b, 0x47, 0x34, 0x9c, 0x44, 0x09, 0xc5, 0x99, 0x61, 0x4d, 0x1b, 0x5e, + 0x66, 0x4b, 0x12, 0xb9, 0x5b, 0x71, 0xc4, 0x6a, 0x2d, 0xc7, 0x69, 0x79, + 0xb2, 0x3b, 0x88, 0x96, 0x73, 0xb0, 0xcb, 0x86, 0x04, 0x80, 0x59, 0x89, + 0x84, 0xa7, 0x8b, 0xdd, 0xec, 0x5d, 0xbd, 0xdb, 0x84, 0x63, 0xe7, 0x94, + 0x15, 0x15, 0xb8, 0x04, 0x15, 0x9d, 0x46, 0xe8, 0xb5, 0x1e, 0x24, 0x13, + 0x9d, 0x55, 0x7a, 0x5e, 0x84, 0x50, 0xeb, 0x84, 0xa3, 0x89, 0x81, 0x53, + 0x56, 0x86, 0x09, 0xd3, 0x82, 0x28, 0x76, 0x51, 0x00, 0x35, 0x28, 0x23, + 0x73, 0x25, 0xb2, 0x91, 0xd2, 0x8b, 0xb4, 0x35, 0x6a, 0xfe, 0xf1, 0xa9, + 0x03, 0xd9, 0x00, 0x6b, 0xb2, 0x4f, 0x9a, 0xfa, 0x4c, 0xe0, 0xe4, 0xa4, + 0x90, 0xac, 0x32, 0xfe, 0xe2, 0x47, 0x5a, 0x86, 0x4e, 0x2b, 0x74, 0xbc, + 0xbf, 0x78, 0x08, 0x27, 0xca, 0x2f, 0x94, 0xd8, 0x55, 0xe0, 0x11, 0x7a, + 0x64, 0x44, 0xbb, 0x31, 0xb4, 0x38, 0x3b, 0x25, 0x66, 0xb2, 0x14, 0x08, + 0x25, 0x02, 0x53, 0x75, 0xac, 0x17, 0xda, 0x53, 0x50, 0x31, 0x45, 0x6e, + 0x5e, 0xf9, 0x5c, 0xf7, 0xe9, 0x53, 0x55, 0xd1, 0x1c, 0x7e, 0x3c, 0x11, + 0x3e, 0x58, 0x93, 0x42, 0xaa, 0xcc, 0xcf, 0xe5, 0x76, 0x1d, 0xc2, 0x18, + 0x37, 0xbb, 0x8e, 0x51, 0xba, 0x94, 0x15, 0xc2, 0xaf, 0x3f, 0x35, 0x2b, + 0x5a, 0xd5, 0x7c, 0xd9, 0x28, 0x8d, 0xe0, 0x64, 0x3e, 0x0e, 0xe7, 0x5d, + 0x90, 0x19, 0xc3, 0xe7, 0xc8, 0xbd, 0xa6, 0xb6, 0x64, 0x5b, 0xe6, 0x3e, + 0x20, 0x69, 0x25, 0x55, 0x4b, 0x34, 0xb9, 0x5b, 0x34, 0xd3, 0x3c, 0x05, + 0xdb, 0x59, 0x70, 0xfe, 0x01, 0x6a, 0x6a, 0x51, 0xc8, 0x60, 0x51, 0xb6, + 0xc3, 0x64, 0xa8, 0x0e, 0x83, 0x2e, 0x01, 0x56, 0xad, 0x68, 0x8a, 0x42, + 0xe7, 0x3a, 0x6d, 0x20, 0x42, 0x0c, 0xdf, 0xdb, 0xba, 0x7b, 0x70, 0xc4, + 0x04, 0x36, 0x66, 0x8b, 0xda, 0xb6, 0xa0, 0x14, 0xca, 0x92, 0x0b, 0x2a, + 0x4c, 0x34, 0x59, 0x5c, 0x18, 0x7b, 0x20, 0xd4, 0x30, 0x85, 0x12, 0x65, + 0xc3, 0xc8, 0x58, 0x21, 0x3c, 0x57, 0xb2, 0x9c, 0x01, 0xad, 0x82, 0x23, + 0x73, 0xa2, 0x31, 0x59, 0x86, 0x33, 0xfb, 0x02, 0x7e, 0xab, 0xf4, 0x0c, + 0x7c, 0x15, 0x88, 0x48, 0x13, 0xab, 0x59, 0xa3, 0x9d, 0x18, 0x73, 0x5e, + 0x64, 0xf4, 0x62, 0x2b, 0x38, 0x4c, 0x73, 0xd4, 0x33, 0xc1, 0x50, 0x51, + 0x83, 0x24, 0x90, 0x44, 0xb6, 0x18, 0x57, 0x84, 0x6f, 0x9a, 0x54, 0xc3, + 0xd3, 0xa2, 0x13, 0xfa, 0xf2, 0xcd, 0x9a, 0x33, 0x19, 0x46, 0x48, 0x37, + 0x5f, 0xaa, 0x08, 0xa0, 0x5a, 0xb9, 0x6e, 0x52, 0x46, 0x4b, 0x91, 0x08, + 0x3e, 0x60, 0xc7, 0x36, 0x69, 0x81, 0xf8, 0xc0, 0x18, 0x1c, 0xb8, 0xb4, + 0xa6, 0x34, 0x2a, 0x08, 0x61, 0x4a, 0x41, 0x23, 0x28, 0x5c, 0x85, 0x95, + 0xeb, 0x1b, 0x1f, 0x2b, 0x13, 0x98, 0xee, 0x67, 0x03, 0x93, 0x11, 0x7a, + 0x26, 0x10, 0x3b, 0x41, 0xc7, 0xc7, 0x28, 0x21, 0x66, 0xb7, 0xe4, 0x9f, + 0x74, 0x5a, 0x93, 0x69, 0x81, 0xae, 0x9f, 0x0b, 0xc7, 0x3c, 0xd7, 0x4f, + 0x97, 0xf6, 0xab, 0x13, 0x32, 0x50, 0xdc, 0x08, 0x1d, 0xf8, 0x8b, 0x1e, + 0x47, 0x71, 0xa3, 0x9c, 0xf3, 0xbe, 0x8f, 0x64, 0xce, 0x72, 0x1b, 0x5a, + 0x82, 0x85, 0x28, 0x28, 0x9a, 0xa5, 0xd4, 0xec, 0x6f, 0xf0, 0x46, 0x31, + 0x91, 0xd3, 0xbc, 0x62, 0x21, 0x12, 0x4b, 0x52, 0xc4, 0x05, 0xe8, 0x8e, + 0x96, 0xea, 0xb4, 0x9b, 0x43, 0x5b, 0xe9, 0x41, 0x5a, 0x91, 0xa6, 0x81, + 0x17, 0xc5, 0x65, 0x0e, 0x53, 0x61, 0x3a, 0x78, 0xab, 0x2b, 0x09, 0x15, + 0xa4, 0xfa, 0xca, 0x65, 0x45, 0xb9, 0x62, 0x89, 0x99, 0xa3, 0xa4, 0x6a, + 0xc5, 0x85, 0x5f, 0xf2, 0x40, 0x66, 0x13, 0x10, 0x1b, 0x36, 0xa1, 0x3a, + 0xc3, 0x1b, 0x55, 0xe8, 0xd1, 0x18, 0xf4, 0x05, 0x60, 0x74, 0xc7, 0x82, + 0x75, 0xc8, 0x0d, 0x57, 0xd9, 0x79, 0x88, 0x19, 0xb3, 0xf8, 0x36, 0x8f, + 0x19, 0x82, 0x6a, 0x72, 0x8a, 0x9c, 0xf0, 0x5c, 0xc6, 0x37, 0x69, 0x0b, + 0xc9, 0x71, 0xa8, 0x61, 0x86, 0xa9, 0x7a, 0x28, 0x89, 0xf9, 0x76, 0xbb, + 0x46, 0x54, 0xa7, 0x78, 0x25, 0x8d, 0x91, 0xd3, 0x7e, 0x2e, 0x7b, 0x13, + 0xb5, 0x84, 0x81, 0x7b, 0x6c, 0x22, 0xaf, 0x49, 0x20, 0x79, 0x97, 0xba, + 0xba, 0xab, 0xa5, 0xb7, 0xf8, 0x66, 0x5a, 0x71, 0x05, 0x74, 0xa2, 0x2e, + 0xa4, 0x2b, 0x47, 0x36, 0xe7, 0x20, 0xe5, 0x7c, 0x47, 0x0a, 0x27, 0x42, + 0x11, 0xd1, 0x4d, 0x80, 0x32, 0x90, 0xbb, 0x20, 0xbd, 0x02, 0x69, 0x06, + 0xb8, 0x69, 0xc1, 0xb8, 0x78, 0x0e, 0x3e, 0xd2, 0x3f, 0x3f, 0x4a, 0xbd, + 0xbd, 0xd3, 0x87, 0x3b, 0xe9, 0x19, 0x1c, 0xb6, 0x7e, 0x8c, 0x54, 0x63, + 0xb3, 0xa2, 0x1c, 0x5b, 0x6c, 0x43, 0x69, 0x94, 0x50, 0xc6, 0xb4, 0xca, + 0x2a, 0x30, 0x24, 0x9e, 0xba, 0x1d, 0x51, 0x33, 0x88, 0x7e, 0x9a, 0x4f, + 0x00, 0x5c, 0x47, 0x24, 0xd4, 0x65, 0x33, 0xa4, 0x99, 0x1a, 0x12, 0xaa, + 0x90, 0x55, 0x88, 0xa4, 0x84, 0x47, 0x1f, 0x76, 0xaa, 0x7f, 0x38, 0x51, + 0x2e, 0xd2, 0x0b, 0x4e, 0xec, 0x05, 0xdb, 0x87, 0x34, 0xe3, 0x40, 0x79, + 0x9a, 0xc2, 0x35, 0x46, 0xd9, 0xc8, 0x14, 0x2c, 0x27, 0x6a, 0x46, 0xb5, + 0x88, 0x74, 0xac, 0x6f, 0x56, 0x41, 0xc6, 0xdb, 0x2a, 0x29, 0x81, 0xc4, + 0x5c, 0x31, 0x0e, 0x21, 0x71, 0xc3, 0xd6, 0xb7, 0x93, 0xcf, 0x4b, 0x2b, + 0x6f, 0x0b, 0x30, 0xe0, 0x12, 0xc2, 0xff, 0x32, 0x34, 0xd0, 0x7c, 0x91, + 0x05, 0xd9, 0x67, 0x3e, 0xd3, 0xc9, 0x43, 0x39, 0x18, 0xf7, 0x07, 0x38, + 0xe1, 0x0a, 0x9f, 0x3e, 0xd7, 0xc4, 0xcf, 0x50, 0x6b, 0x1b, 0x60, 0x50, + 0x1b, 0xc8, 0x33, 0xbf, 0xa3, 0xa0, 0x01, 0xc3, 0x6c, 0x9f, 0xbb, 0x9d, + 0x9b, 0x11, 0x8c, 0xb4, 0x44, 0xb5, 0x75, 0xa7, 0x68, 0xf5, 0x43, 0x79, + 0xe8, 0xc2, 0x5e, 0x48, 0x83, 0xa2, 0x09, 0xe3, 0xb6, 0x8e, 0x14, 0x16, + 0x79, 0x34, 0x9c, 0xad, 0x62, 0x77, 0x1a, 0x0b, 0x85, 0x5f, 0x77, 0x22, + 0xc2, 0x7b, 0xbf, 0xe4, 0xb5, 0x4f, 0x5e, 0x55, 0x3d, 0xc4, 0x48, 0x5e, + 0x18, 0xa0, 0x85, 0x98, 0xc3, 0x2a, 0xe0, 0x57, 0xc2, 0xa2, 0x41, 0x27, + 0x3f, 0x11, 0x63, 0x66, 0xfa, 0x94, 0x30, 0x39, 0xb1, 0x9f, 0x0b, 0x81, + 0x7c, 0xe6, 0x69, 0x15, 0x33, 0x12, 0x0a, 0x60, 0xac, 0xcd, 0x62, 0xac, + 0xf6, 0xb5, 0x86, 0x8b, 0xe0, 0x5c, 0xdc, 0x9a, 0x08, 0xef, 0x47, 0xcc, + 0x1c, 0xb3, 0x58, 0x7a, 0x82, 0xb6, 0x99, 0x33, 0x42, 0x54, 0xf6, 0x79, + 0x6c, 0x53, 0x84, 0x65, 0x12, 0x08, 0x24, 0xbb, 0x2f, 0xab, 0x31, 0x72, + 0xaa, 0xb9, 0x04, 0xf9, 0x76, 0x86, 0x93, 0x30, 0x63, 0x01, 0x62, 0x7f, + 0x87, 0x38, 0x2e, 0x8d, 0x77, 0xb3, 0xd6, 0x9a, 0x22, 0xcf, 0x87, 0x8e, + 0x79, 0x98, 0xb3, 0x22, 0x6a, 0x14, 0xec, 0x19, 0xaf, 0xc8, 0x84, 0x45, + 0xa7, 0x24, 0x3f, 0xcf, 0x83, 0x08, 0xdc, 0x8b, 0x35, 0x1d, 0x40, 0x2a, + 0xff, 0x98, 0xb1, 0x48, 0x40, 0xad, 0xbb, 0xf5, 0x0f, 0x49, 0xa1, 0x4f, + 0x01, 0x8a, 0x95, 0xe3, 0x87, 0x1c, 0xf7, 0xc7, 0x5e, 0xbc, 0x1c, 0x26, + 0x71, 0x7c, 0x20, 0xf8, 0xbb, 0xc8, 0x7c, 0xd2, 0x90, 0x0d, 0xd6, 0x51, + 0x81, 0x29, 0x78, 0x9c, 0xf8, 0x3d, 0x9f, 0xb0, 0x66, 0x4b, 0x96, 0x6b, + 0xf3, 0x94, 0xbf, 0x21, 0x3a, 0x0f, 0x2f, 0xd7, 0xc0, 0xdb, 0x49, 0x3a, + 0x13, 0xa2, 0xb8, 0xb5, 0xac, 0xc5, 0xb1, 0x89, 0x29, 0xca, 0x32, 0x5f, + 0x1c, 0x51, 0xb0, 0x37, 0x14, 0x8c, 0xa0, 0xe8, 0xa4, 0x01, 0x58, 0x7d, + 0x57, 0x0b, 0x06, 0x7f, 0xd1, 0x4b, 0x52, 0x62, 0x0d, 0x16, 0xe4, 0xbb, + 0xb7, 0x4c, 0x2e, 0xf1, 0xe7, 0xb4, 0xcd, 0x74, 0xb1, 0x5d, 0xfb, 0x08, + 0x99, 0x6a, 0xb8, 0x3d, 0x83, 0x96, 0xda, 0x99, 0x04, 0x94, 0x77, 0x45, + 0x0c, 0x93, 0xb2, 0x4c, 0x05, 0x30, 0xad, 0x5b, 0x2e, 0x9a, 0x30, 0x5e, + 0xc6, 0xb6, 0x3a, 0x09, 0x95, 0x4d, 0x1e, 0x96, 0x1b, 0x20, 0x52, 0xa6, + 0xfa, 0x49, 0xc4, 0xa5, 0x5c, 0xca, 0x4d, 0xa1, 0xc4, 0x71, 0x13, 0x83, + 0x55, 0x2c, 0xce, 0xa5, 0x3c, 0xc5, 0x72, 0xb6, 0x48, 0x16, 0x86, 0xb7, + 0x1f, 0x12, 0x32, 0x5c, 0x03, 0x80, 0x9a, 0x36, 0xc0, 0x2b, 0xc0, 0x83, + 0x5d, 0x28, 0x76, 0x8d, 0x42, 0xc9, 0x42, 0xe9, 0x7a, 0x9a, 0xf1, 0xc0, + 0x07, 0x31, 0x2f, 0xc0, 0x56, 0x0e, 0xe1, 0x01, 0x09, 0x38, 0xe1, 0x46, + 0xfc, 0x9c, 0x07, 0xa8, 0x51, 0xc7, 0xe0, 0x7b, 0x65, 0x5e, 0xa2, 0xa8, + 0x5e, 0x77, 0x7d, 0xb3, 0x52, 0x6f, 0x08, 0x82, 0xac, 0x8b, 0x01, 0x18, + 0x79, 0xa0, 0x15, 0xcb, 0xcc, 0x81, 0xf2, 0xba, 0x22, 0x19, 0x36, 0x40, + 0xa5, 0xa0, 0x45, 0xd5, 0xb6, 0x50, 0x25, 0x09, 0x92, 0x99, 0x5c, 0xac, + 0x5e, 0x90, 0x58, 0xe8, 0xea, 0x5e, 0xd1, 0xd4, 0x1f, 0x8f, 0x47, 0x9e, + 0x45, 0x09, 0x02, 0x5e, 0x3c, 0xbe, 0x83, 0xf5, 0x67, 0xe2, 0x93, 0x2d, + 0x2b, 0xf3, 0x3a, 0xf7, 0x73, 0xc5, 0xbe, 0xdb, 0x8e, 0xba, 0x9a, 0x22, + 0x40, 0xc5, 0x30, 0xa7, 0xeb, 0x61, 0x38, 0x0a, 0xb5, 0xae, 0xa9, 0x6d, + 0x1f, 0x04, 0xaf, 0xcd, 0x0a, 0xca, 0x9f, 0x04, 0x43, 0x8c, 0x74, 0x3c, + 0xdb, 0xa1, 0x28, 0xf7, 0xf7, 0x0b, 0x7c, 0x79, 0x01, 0xd9, 0x86, 0x16, + 0xb6, 0xc4, 0x9c, 0x5c, 0xf5, 0x57, 0x32, 0x65, 0x52, 0xf9, 0xb1, 0xcf, + 0x8f, 0xf0, 0x19, 0xbb, 0x38, 0xcf, 0x52, 0x7b, 0x84, 0xaf, 0x40, 0x55, + 0xec, 0x18, 0x0c, 0xcd, 0x50, 0x66, 0xce, 0x96, 0xca, 0x82, 0x12, 0x1e, + 0x0c, 0xcc, 0x3c, 0x61, 0x23, 0x2b, 0x10, 0xc5, 0x32, 0x35, 0x9a, 0xcc, + 0x24, 0x06, 0xce, 0xe3, 0x79, 0x45, 0xda, 0x11, 0xcc, 0xb0, 0xa6, 0x91, + 0x02, 0xaa, 0x51, 0x0e, 0x55, 0x19, 0x5c, 0xeb, 0xbd, 0xcd, 0x77, 0x70, + 0x5d, 0x2b, 0xbe, 0x77, 0xf3, 0x7b, 0x86, 0x57, 0x65, 0x50, 0x48, 0xac, + 0xf0, 0x65, 0x19, 0xb4, 0x7b, 0x2f, 0xe4, 0x69, 0x89, 0x1c, 0x83, 0x03, + 0x93, 0x9a, 0x3f, 0x4b, 0x68, 0xb9, 0x51, 0x6b, 0x38, 0x43, 0x0a, 0x62, + 0x16, 0xac, 0xce, 0xee, 0xd0, 0x49, 0xfa, 0xa4, 0x4f, 0xe2, 0xd1, 0x7d, + 0x6f, 0xd1, 0x57, 0x97, 0x63, 0x0c, 0xaa, 0x00, 0x15, 0x95, 0xcc, 0xb3, + 0x93, 0x41, 0x95, 0xb1, 0x36, 0x52, 0x63, 0xd8, 0x61, 0xbf, 0x4b, 0x27, + 0xf1, 0xc7, 0x0a, 0x50, 0x0b, 0xbd, 0x82, 0x05, 0x4b, 0x81, 0x92, 0x41, + 0x7e, 0xd0, 0x62, 0x6f, 0x07, 0x7a, 0xe6, 0x70, 0xb2, 0x3c, 0xa3, 0x7f, + 0x8a, 0xe6, 0x4b, 0x8d, 0xe4, 0x9a, 0x3a, 0x3a, 0x70, 0xc0, 0x81, 0xcf, + 0x58, 0x10, 0x41, 0x84, 0x68, 0x61, 0x05, 0x00, 0x88, 0xfa, 0xe3, 0x5f, + 0x44, 0x03, 0x75, 0x49, 0xe5, 0x24, 0x4f, 0x38, 0x5b, 0x88, 0x99, 0x7e, + 0xe5, 0xfa, 0x70, 0x09, 0x4b, 0x4f, 0xf5, 0x0b, 0x53, 0x1c, 0x87, 0xae, + 0xf1, 0x30, 0x8a, 0xf9, 0x17, 0x31, 0x05, 0x67, 0x42, 0xf9, 0x69, 0x67, + 0xc2, 0x20, 0x6b, 0x07, 0x6a, 0x1f, 0xb2, 0x19, 0xc2, 0x43, 0xa7, 0x4a, + 0xa0, 0xe6, 0x07, 0xcf, 0xeb, 0x96, 0x04, 0xd0, 0x4a, 0xdc, 0xa3, 0x90, + 0x4d, 0xc3, 0x97, 0xe1, 0x77, 0x7d, 0x3b, 0x58, 0x19, 0x7e, 0xc5, 0x4d, + 0x37, 0x79, 0x5c, 0xcb, 0xb4, 0xca, 0xf2, 0x3a, 0x5a, 0x54, 0x66, 0x72, + 0xb0, 0xc2, 0x28, 0x3a, 0xe7, 0xaa, 0x5c, 0x91, 0x40, 0x09, 0xa5, 0x11, + 0xed, 0xa2, 0x93, 0xce, 0x06, 0xaf, 0x18, 0x2a, 0x60, 0x6c, 0x23, 0xa5, + 0xee, 0x44, 0x58, 0x67, 0x41, 0x70, 0xb2, 0x07, 0x12, 0xc5, 0x8c, 0x8c, + 0xa8, 0x7c, 0xad, 0x4a, 0x87, 0x39, 0xb1, 0xe3, 0x20, 0x92, 0xf9, 0xaf, + 0xa2, 0x4b, 0x8d, 0xe6, 0xca, 0x70, 0x04, 0x0a, 0xa7, 0x69, 0xf9, 0x25, + 0x8a, 0xd1, 0x44, 0xe1, 0xca, 0x8d, 0x63, 0x50, 0x31, 0xfa, 0x70, 0xa7, + 0x10, 0xb3, 0xb7, 0x17, 0xfb, 0x65, 0x30, 0x4c, 0x7b, 0x23, 0xc5, 0x53, + 0x06, 0x76, 0x88, 0xc8, 0x65, 0x8f, 0x94, 0x15, 0x4c, 0xe7, 0x90, 0x83, + 0xb9, 0xa1, 0xbd, 0xbc, 0xc3, 0x35, 0xa5, 0x25, 0x91, 0x2a, 0xe0, 0x46, + 0x6a, 0xa9, 0xb9, 0xe3, 0xd9, 0x26, 0xc2, 0x1a, 0x25, 0xfa, 0xcc, 0x56, + 0xbb, 0x73, 0x89, 0x49, 0x36, 0x6c, 0xdd, 0xa3, 0x1c, 0xf3, 0x85, 0x51, + 0xe1, 0x04, 0xba, 0xd0, 0x4c, 0x3c, 0xd3, 0x86, 0x6d, 0xf0, 0x28, 0xab, + 0x7c, 0x06, 0x7a, 0xeb, 0xa1, 0x0e, 0x75, 0x1c, 0x53, 0x4e, 0xd8, 0x86, + 0xfb, 0x5c, 0x4b, 0xfa, 0x00, 0x51, 0xfa, 0x7b, 0x23, 0xd5, 0x0b, 0x80, + 0xc1, 0xa8, 0x48, 0x51, 0x84, 0x7d, 0x42, 0x70, 0x09, 0x76, 0x77, 0x96, + 0x59, 0x2a, 0x79, 0x95, 0x7b, 0x25, 0x80, 0x6a, 0x61, 0x3e, 0x39, 0x07, + 0x8c, 0xa8, 0xc3, 0x0e, 0xe1, 0x86, 0x88, 0x70, 0x4f, 0xaf, 0xe5, 0x87, + 0x9d, 0xf6, 0x3a, 0x3e, 0x78, 0xfe, 0xab, 0xf4, 0x58, 0x23, 0xc3, 0xa2, + 0x3e, 0x8a, 0x4f, 0xa5, 0x8f, 0xfa, 0xca, 0x18, 0xfe, 0xe9, 0x25, 0x3c, + 0xbf, 0xd6, 0x2a, 0x05, 0xff, 0x71, 0xcc, 0x07, 0xb5, 0x68, 0xcb, 0x4d, + 0x83, 0x79, 0x41, 0xcb, 0x1e, 0xca, 0xe7, 0xd1, 0x81, 0x64, 0x14, 0xbd, + 0x4c, 0x30, 0x87, 0x04, 0x2f, 0xde, 0x39, 0x20, 0x61, 0x60, 0x02, 0xf9, + 0xcc, 0x6f, 0x94, 0xff, 0xe4, 0xf7, 0xe0, 0x20, 0x22, 0xa7, 0x00, 0x25, + 0x86, 0x99, 0x03, 0x49, 0xf6, 0x8f, 0xb6, 0x8a, 0x93, 0xa3, 0x02, 0xe8, + 0xc2, 0x1c, 0x6a, 0x38, 0x57, 0x19, 0xfd, 0x89, 0x87, 0xe9, 0xb9, 0x02}, + // ciphertext + {0x66, 0x18, 0x48, 0x7f, 0x98, 0x3b, 0xa7, 0x88, 0x3b, 0x55, 0xef, 0x19, + 0x2a, 0xa5, 0xab, 0x01, 0x32, 0xf0, 0x48, 0x93, 0x34, 0xf6, 0x75, 0x62, + 0x86, 0x64, 0x3e, 0x4c, 0x1c, 0x33, 0xcc, 0xc2, 0xc3, 0x95, 0xb9, 0x0b, + 0xe4, 0x32, 0x02, 0xfc, 0x5e, 0x00, 0x07, 0x3a, 0x35, 0xc3, 0xd0, 0x8c, + 0x37, 0x8f, 0xca, 0xb6, 0xe2, 0xf0, 0xce, 0x0f, 0xcc, 0xdf, 0x4f, 0x68, + 0x4b, 0x55, 0xda, 0xf3, 0x03, 0x28, 0x18, 0x71, 0x2e, 0x42, 0x6f, 0x3e, + 0x1f, 0x57, 0xbb, 0xe8, 0x13, 0xd6, 0x7e, 0x51, 0x5e, 0x7c, 0x34, 0x36, + 0x73, 0x46, 0x43, 0x22, 0xe7, 0xb6, 0x3e, 0x30, 0x60, 0x4a, 0x10, 0x15, + 0x6d, 0x1f, 0x79, 0xec, 0xc5, 0x7d, 0x05, 0xbd, 0xc5, 0x5e, 0xeb, 0x7a, + 0xf2, 0x3c, 0x99, 0x02, 0xef, 0xd4, 0xf3, 0xbb, 0xe2, 0xa7, 0x9a, 0x1a, + 0x9c, 0xb4, 0x21, 0xd0, 0x15, 0x82, 0x97, 0xf5, 0x84, 0x0d, 0x02, 0xad, + 0x28, 0x6c, 0x40, 0xd6, 0x07, 0x05, 0x9d, 0x3c, 0x92, 0x66, 0x47, 0xbe, + 0x16, 0x2b, 0x33, 0x39, 0x73, 0xd6, 0xf8, 0x9b, 0x6c, 0xe4, 0x02, 0x8c, + 0x7b, 0x34, 0x82, 0xec, 0x6b, 0xb2, 0xa6, 0xfc, 0xb9, 0x7e, 0xf5, 0x9b, + 0xc1, 0x55, 0x6d, 0x29, 0x40, 0x67, 0x5c, 0x58, 0x7e, 0xb2, 0x44, 0x62, + 0xe7, 0xd0, 0xd0, 0x58, 0x4c, 0x6f, 0xc2, 0xe9, 0xfd, 0xba, 0xe3, 0xa7, + 0xbb, 0xe6, 0xca, 0x74, 0xd6, 0xd3, 0xbe, 0xf8, 0xe0, 0x5f, 0x30, 0x8a, + 0x7f, 0x6a, 0x51, 0xac, 0x1a, 0xa9, 0x55, 0x6e, 0xd7, 0xe8, 0xa7, 0x52, + 0x99, 0x94, 0xc4, 0x1b, 0x34, 0xf3, 0x63, 0x14, 0xcd, 0xf0, 0xad, 0x9f, + 0x07, 0xe1, 0xec, 0xe1, 0x02, 0x14, 0xcf, 0xbf, 0xa6, 0x56, 0xd1, 0xd4, + 0x92, 0x81, 0x0a, 0x66, 0xec, 0xef, 0xac, 0x96, 0x0d, 0x13, 0x77, 0xdd, + 0x1d, 0xda, 0x18, 0xbf, 0xde, 0x0e, 0x83, 0x63, 0xa1, 0x61, 0xb6, 0x21, + 0xba, 0x8c, 0x37, 0xaf, 0x3e, 0xea, 0x65, 0x49, 0x1f, 0x40, 0x63, 0x98, + 0x23, 0xb5, 0x55, 0x13, 0x4d, 0x92, 0xdd, 0x62, 0x2a, 0x36, 0x7e, 0xf7, + 0xcc, 0x54, 0x08, 0xf2, 0xce, 0x18, 0xef, 0x9b, 0x17, 0x0b, 0xa2, 0xfc, + 0x62, 0x00, 0x4f, 0xb7, 0x6b, 0x25, 0x45, 0xa5, 0x4f, 0x68, 0x45, 0x0c, + 0xbd, 0x92, 0x21, 0xcc, 0x89, 0xa6, 0x41, 0x3b, 0x0b, 0x1a, 0x80, 0xd3, + 0xc6, 0xc0, 0x39, 0xdb, 0xd1, 0xee, 0xf8, 0x5f, 0x4e, 0xdb, 0x01, 0x8c, + 0xaa, 0xd0, 0x7c, 0xd1, 0x7e, 0x33, 0xb4, 0x4c, 0xe4, 0x18, 0x36, 0x80, + 0x00, 0xfc, 0x00, 0x0a, 0x10, 0xf8, 0x2c, 0xa4, 0xf0, 0xeb, 0x86, 0x0b, + 0x46, 0xce, 0x1b, 0xd1, 0x0c, 0xb7, 0x06, 0xde, 0x02, 0x63, 0x66, 0x0e, + 0xb0, 0xbc, 0xfa, 0x07, 0x37, 0x70, 0x0d, 0xe3, 0x6e, 0x2c, 0x2f, 0x34, + 0x9a, 0xb8, 0xde, 0xee, 0x35, 0xda, 0xaa, 0x5b, 0x98, 0x32, 0x15, 0xd9, + 0xe8, 0xb8, 0x01, 0x37, 0x0b, 0x93, 0xfd, 0x11, 0x6a, 0x40, 0x4b, 0xab, + 0x78, 0x3c, 0x6e, 0x37, 0x32, 0x1c, 0x8a, 0xb8, 0x6e, 0xed, 0x41, 0x07, + 0x23, 0x15, 0xce, 0x27, 0x1d, 0xd4, 0xb5, 0x2b, 0xba, 0x7d, 0x96, 0x8f, + 0xea, 0x1e, 0xd6, 0x93, 0xbc, 0xea, 0xca, 0xf6, 0xe2, 0x0f, 0x3f, 0x4a, + 0xa9, 0xfc, 0xba, 0xb6, 0xe7, 0xd1, 0x6d, 0x3c, 0xbf, 0x35, 0xb6, 0xce, + 0xa8, 0x6c, 0xf6, 0xa1, 0xa8, 0x8a, 0xfe, 0x50, 0xab, 0x49, 0x0f, 0x35, + 0x93, 0x61, 0x31, 0xf4, 0x54, 0x25, 0xb9, 0x4a, 0xac, 0x5a, 0x83, 0xd1, + 0x61, 0x64, 0xd3, 0x48, 0x08, 0x98, 0x20, 0xe7, 0xad, 0xf5, 0x25, 0x32, + 0x13, 0x29, 0x3d, 0x05, 0xda, 0x97, 0x0a, 0x1b, 0x40, 0x50, 0x6c, 0x76, + 0xe6, 0x5e, 0xf4, 0xa5, 0x93, 0x45, 0xd0, 0x0d, 0xa5, 0x46, 0x1d, 0x4e, + 0x18, 0x8c, 0x9e, 0xef, 0x0d, 0xab, 0x41, 0xe7, 0x68, 0x4e, 0x31, 0xf3, + 0xe2, 0x0a, 0xdc, 0x71, 0xd6, 0xff, 0xd8, 0x95, 0x52, 0x93, 0x1f, 0xc6, + 0x34, 0xbf, 0x91, 0xf4, 0x65, 0xe3, 0x8d, 0xbc, 0xae, 0x1f, 0xbb, 0x49, + 0x1a, 0xfb, 0xf1, 0x53, 0x0d, 0xae, 0xed, 0x2c, 0x68, 0x98, 0x44, 0x35, + 0x26, 0x22, 0x80, 0xe8, 0x31, 0xc1, 0xe9, 0xc9, 0xf8, 0x1a, 0xa0, 0xc8, + 0x0d, 0x91, 0xbd, 0x57, 0xec, 0xc0, 0x2a, 0x18, 0x73, 0xa2, 0x7e, 0xc3, + 0xf0, 0x9e, 0x99, 0x65, 0x66, 0x87, 0x99, 0x7b, 0x9e, 0x05, 0x46, 0x0a, + 0x06, 0x1f, 0x39, 0x20, 0x57, 0x20, 0x78, 0xec, 0xf4, 0xbf, 0x32, 0xe6, + 0xc4, 0x2e, 0x06, 0xad, 0x27, 0xea, 0x06, 0x42, 0x5d, 0x09, 0xf5, 0x89, + 0x07, 0xec, 0xae, 0x51, 0x83, 0x48, 0x64, 0xac, 0xad, 0x3f, 0xab, 0x37, + 0x2a, 0xfc, 0x0e, 0x1a, 0x78, 0x9a, 0x1e, 0x98, 0xc2, 0x7d, 0x52, 0x3c, + 0x2f, 0x50, 0x68, 0xe8, 0x8e, 0x53, 0x72, 0xfc, 0xc8, 0xfb, 0xf4, 0xe5, + 0xe7, 0xed, 0x76, 0x6c, 0x56, 0x1c, 0xfe, 0xec, 0x2b, 0x6d, 0x1a, 0xf2, + 0x96, 0x07, 0xca, 0x7c, 0x4b, 0xca, 0x48, 0x36, 0x5a, 0x15, 0xb0, 0xc3, + 0xc6, 0xba, 0x58, 0x56, 0x08, 0xdc, 0x68, 0x98, 0xfc, 0xf4, 0xc1, 0x44, + 0x14, 0x35, 0x1c, 0x8a, 0xd2, 0xab, 0x6f, 0xae, 0x6c, 0x02, 0x8b, 0x88, + 0x3e, 0x27, 0xe9, 0x68, 0xa2, 0x7e, 0xd7, 0x93, 0x67, 0xed, 0xba, 0x6b, + 0x11, 0x55, 0xa3, 0x01, 0x0d, 0x42, 0xa7, 0x7c, 0xa7, 0xec, 0x2f, 0x25, + 0x25, 0x93, 0x66, 0x48, 0x67, 0x1d, 0x95, 0x01, 0x1b, 0x5b, 0xf0, 0x19, + 0xbb, 0x54, 0x66, 0xc8, 0x81, 0xae, 0xf3, 0x8c, 0x75, 0xe1, 0xd6, 0xcf, + 0x77, 0x5a, 0xb2, 0x33, 0x6c, 0xce, 0xf8, 0x34, 0x6d, 0x6b, 0x55, 0xb5, + 0x8f, 0x7f, 0x63, 0x02, 0x6e, 0x9c, 0x9d, 0xc3, 0x8a, 0x0e, 0x6e, 0x2b, + 0xd5, 0x50, 0xdb, 0x4c, 0xac, 0xf6, 0x43, 0x3d, 0xad, 0x62, 0x94, 0xee, + 0xe8, 0x25, 0x92, 0x8d, 0xc7, 0x1e, 0xd0, 0x03, 0xa6, 0x85, 0x9c, 0x16, + 0xcd, 0xe0, 0x83, 0x5f, 0xbe, 0xea, 0x44, 0x63, 0x94, 0x42, 0x4f, 0xd5, + 0x17, 0xe9, 0x4a, 0x7d, 0x37, 0x30, 0xec, 0x90, 0x29, 0x35, 0x7a, 0x54, + 0xa4, 0xed, 0x34, 0xeb, 0x62, 0xa9, 0x4a, 0x58, 0xd9, 0x90, 0x97, 0xc5, + 0x16, 0x1c, 0xe5, 0xcb, 0xc6, 0xce, 0x31, 0x2a, 0xa6, 0x25, 0xa0, 0xef, + 0x83, 0xec, 0x51, 0x90, 0x2a, 0x49, 0x59, 0xcb, 0xcd, 0x9a, 0x05, 0x6d, + 0xad, 0xdf, 0x7e, 0x2b, 0x26, 0x03, 0x64, 0x53, 0xbe, 0x57, 0x98, 0x4c, + 0x65, 0xd6, 0x88, 0x59, 0xc0, 0x0d, 0xf8, 0xe1, 0xc1, 0x70, 0x15, 0x95, + 0xca, 0x2d, 0xd5, 0xcb, 0xe3, 0xff, 0x31, 0x50, 0xc6, 0x7f, 0xcc, 0xfe, + 0x76, 0x5d, 0xfe, 0xb2, 0xa2, 0x0b, 0x7b, 0xf1, 0x73, 0x2f, 0xd0, 0x83, + 0xc1, 0x43, 0x46, 0xff, 0x2f, 0x75, 0x01, 0xda, 0xaf, 0x6f, 0x6b, 0x77, + 0x95, 0x4a, 0x59, 0xf7, 0x38, 0x9a, 0x74, 0x69, 0xf7, 0x12, 0x48, 0xa2, + 0xc7, 0x0c, 0x02, 0xeb, 0x05, 0x33, 0xa0, 0x99, 0x16, 0x77, 0x13, 0x18, + 0x0a, 0x74, 0xef, 0x90, 0xd5, 0xef, 0x3f, 0x67, 0x2b, 0xaf, 0x5c, 0x47, + 0x73, 0x5c, 0xdf, 0x9a, 0x02, 0x5d, 0x11, 0x4a, 0x06, 0x2d, 0x30, 0x20, + 0xed, 0x12, 0xf0, 0xee, 0x1c, 0x1a, 0xfa, 0xcd, 0xbd, 0xbf, 0x08, 0xa3, + 0xe5, 0x47, 0x3a, 0xcd, 0x47, 0xc8, 0xd4, 0x5b, 0x3f, 0x25, 0x05, 0x60, + 0x33, 0x7b, 0xa9, 0x24, 0xee, 0xed, 0x08, 0xd5, 0xd6, 0xbd, 0x8a, 0xd6, + 0x84, 0xab, 0xd1, 0x8b, 0x44, 0x2f, 0x8a, 0xf9, 0xe1, 0x25, 0xf2, 0x48, + 0x6c, 0xeb, 0x81, 0xc9, 0x50, 0x08, 0x05, 0x05, 0xa0, 0x44, 0x69, 0x95, + 0xb7, 0x96, 0x06, 0xd4, 0x70, 0x6c, 0x06, 0x6c, 0x6a, 0xde, 0x8e, 0xbc, + 0xda, 0xda, 0x3d, 0x62, 0x27, 0x89, 0x0d, 0xb2, 0x4d, 0xc7, 0xd1, 0xa3, + 0x3b, 0xbc, 0xd1, 0x72, 0x2f, 0x8f, 0xa7, 0xa6, 0xb5, 0xe8, 0xcc, 0x37, + 0x97, 0x1f, 0xad, 0x3f, 0x87, 0x8d, 0x2c, 0xe2, 0x15, 0xa0, 0x55, 0x77, + 0x9f, 0xf5, 0x52, 0x2e, 0x9c, 0xbc, 0x95, 0xb7}, + // secret + {0x29, 0x75, 0x9a, 0x64, 0x2c, 0x4d, 0x02, 0x67, 0xbd, 0x5d, 0x96, + 0xc8, 0x14, 0x49, 0xf6, 0xf9, 0xb3, 0x15, 0xfa, 0xa4, 0x5c, 0x1d, + 0x5e, 0x11, 0x73, 0x62, 0xd4, 0xf0, 0x96, 0xd5, 0x27, 0x6e}, + true}, + // tcID: 89 + {89, + params_ml_kem768_test_mode, + // privateKey + {0xa7, 0xf6, 0x8b, 0x43, 0x89, 0x8f, 0x73, 0x83, 0xb0, 0x9f, 0x0c, 0x6e, + 0xe0, 0xd9, 0x73, 0x77, 0xd4, 0x54, 0xd5, 0x28, 0x13, 0x2d, 0xa9, 0x0a, + 0xc5, 0x58, 0x19, 0xa4, 0x61, 0xb5, 0x84, 0x24, 0xbb, 0x95, 0xc7, 0xc0, + 0x0a, 0x24, 0x6f, 0x04, 0xf8, 0xb0, 0x3d, 0x3c, 0x9d, 0x62, 0x38, 0x9a, + 0xc2, 0xb4, 0x5d, 0xd6, 0xd4, 0x3f, 0x32, 0x07, 0x2c, 0x86, 0xe0, 0x38, + 0x12, 0x90, 0x96, 0x50, 0xc5, 0x2a, 0x01, 0x04, 0xa4, 0x26, 0x96, 0xc5, + 0xe1, 0xf3, 0x89, 0xee, 0x4a, 0x87, 0x75, 0xa9, 0xa0, 0x63, 0x73, 0x7a, + 0x5a, 0xb4, 0x1d, 0x8c, 0x0c, 0x0b, 0x8c, 0x49, 0xc8, 0x22, 0xd7, 0x35, + 0x1c, 0x1a, 0x63, 0xbe, 0x67, 0x7d, 0x49, 0x01, 0x8c, 0xf1, 0x83, 0x11, + 0x77, 0x59, 0x26, 0x74, 0x65, 0x20, 0xd6, 0x50, 0xc1, 0xc3, 0x1c, 0x0b, + 0xdb, 0x6b, 0x57, 0x0c, 0x96, 0xba, 0x6b, 0x06, 0x91, 0x58, 0x15, 0xc0, + 0xfc, 0xf6, 0xb3, 0x2f, 0x58, 0x3e, 0x80, 0xc2, 0xb7, 0xa8, 0x4b, 0x80, + 0x5a, 0xca, 0x39, 0xf6, 0x76, 0x42, 0x6a, 0x46, 0x3e, 0x59, 0xd6, 0xc9, + 0x04, 0x04, 0x27, 0x61, 0x83, 0x3c, 0xd4, 0xc0, 0xc0, 0x33, 0x6b, 0x00, + 0xd7, 0xe1, 0x58, 0xdc, 0x77, 0x4c, 0x5c, 0x58, 0xbd, 0x71, 0x45, 0x8c, + 0x7c, 0x74, 0x45, 0x96, 0x82, 0x24, 0x5a, 0x03, 0xb3, 0xc8, 0xb8, 0x52, + 0x2b, 0x74, 0x48, 0xc3, 0xa9, 0x84, 0x32, 0xc4, 0x84, 0x95, 0xe5, 0x1e, + 0x7b, 0x40, 0x1e, 0xaa, 0x86, 0x69, 0x70, 0x7c, 0x16, 0xf3, 0x6b, 0x72, + 0xff, 0x21, 0x62, 0x38, 0x38, 0xb3, 0x1b, 0x49, 0x6d, 0x56, 0xb1, 0x2c, + 0x07, 0x47, 0x58, 0x73, 0x25, 0xa5, 0x95, 0x09, 0x37, 0x9d, 0x27, 0x06, + 0x67, 0x0c, 0x57, 0x3f, 0x85, 0xac, 0xa0, 0xf4, 0x26, 0x11, 0x92, 0x54, + 0xd5, 0x51, 0x9d, 0x75, 0x92, 0x32, 0xc5, 0x08, 0x7b, 0x84, 0x52, 0x0f, + 0x24, 0x59, 0x14, 0x8d, 0xc6, 0xa8, 0x61, 0x84, 0x66, 0x2b, 0xc3, 0x68, + 0xbc, 0x2c, 0x83, 0xfe, 0x0c, 0xa7, 0xbe, 0x15, 0x6c, 0x67, 0xc0, 0x50, + 0x25, 0xa1, 0x16, 0x1b, 0xd1, 0x38, 0x0d, 0xa3, 0x9b, 0xca, 0x2c, 0x99, + 0xef, 0x72, 0x7b, 0x4d, 0xd9, 0x0d, 0x99, 0xc2, 0x12, 0x09, 0xb5, 0x73, + 0x80, 0x39, 0x53, 0x12, 0x9c, 0x4d, 0xc8, 0x2a, 0x27, 0x9a, 0xca, 0x0a, + 0x73, 0x83, 0x3c, 0x5b, 0xe1, 0x89, 0x18, 0x75, 0x46, 0x51, 0x9c, 0x2e, + 0x17, 0xea, 0x89, 0x5c, 0xec, 0x1e, 0xa7, 0xd4, 0x65, 0x94, 0x29, 0x7f, + 0xf4, 0x3c, 0xbf, 0xb7, 0xd5, 0x44, 0x66, 0xb2, 0x1f, 0x1d, 0xd4, 0xb7, + 0x21, 0x16, 0xc1, 0x0b, 0x61, 0x98, 0x55, 0x3a, 0xa0, 0x27, 0x3c, 0xc6, + 0xf3, 0x8c, 0xa9, 0xf9, 0x01, 0x19, 0x85, 0x01, 0x2a, 0xb4, 0xf4, 0x4c, + 0x7d, 0xc1, 0x3b, 0x00, 0xa1, 0x0f, 0x64, 0x64, 0x56, 0xd9, 0xb2, 0x9c, + 0xfd, 0xc3, 0x68, 0xfa, 0x61, 0x0c, 0x49, 0xf1, 0xbb, 0xf7, 0x5b, 0x57, + 0x59, 0x48, 0x0a, 0x43, 0xca, 0xca, 0xf9, 0x9c, 0x8b, 0xbc, 0xb5, 0x87, + 0x3c, 0xe1, 0xcc, 0x0d, 0x09, 0x1f, 0x62, 0x82, 0xcb, 0x6d, 0x1a, 0x9f, + 0xc3, 0x44, 0x59, 0xad, 0x03, 0x33, 0xc8, 0x8a, 0x1c, 0x7f, 0xa3, 0x13, + 0x2d, 0xd2, 0xb4, 0x15, 0xf8, 0x09, 0x23, 0x5a, 0x10, 0x11, 0x62, 0x12, + 0x0c, 0xe0, 0xbb, 0x53, 0xc4, 0x35, 0xee, 0xd5, 0x95, 0xe0, 0x12, 0x73, + 0x62, 0x2c, 0xb6, 0xa3, 0x32, 0x22, 0x47, 0x76, 0x34, 0x10, 0x4a, 0x64, + 0x90, 0x9a, 0x2c, 0xa1, 0x99, 0x56, 0xd0, 0xe0, 0xcb, 0xdc, 0x6a, 0x8a, + 0x61, 0x11, 0x28, 0xdf, 0x16, 0x12, 0x17, 0x85, 0x67, 0x37, 0x10, 0x02, + 0x05, 0xe1, 0xb1, 0xe9, 0xec, 0x84, 0x4c, 0x44, 0x7e, 0x4a, 0x4b, 0xc5, + 0x38, 0x15, 0x7d, 0x5e, 0xf3, 0x7a, 0x81, 0xf3, 0xbf, 0xc0, 0xf3, 0x47, + 0xcf, 0x14, 0xbd, 0x3f, 0x75, 0xc1, 0x8f, 0x53, 0xa7, 0x77, 0xcb, 0x0d, + 0x38, 0x1b, 0x0a, 0xec, 0xcc, 0xab, 0xe4, 0x00, 0x55, 0x15, 0xc9, 0x11, + 0xa2, 0xc4, 0xc7, 0x12, 0x34, 0x47, 0xdf, 0xc9, 0x39, 0x64, 0x26, 0x2f, + 0xf0, 0x5a, 0x45, 0xd9, 0x69, 0x55, 0x12, 0x40, 0xba, 0xe6, 0x0b, 0x41, + 0xed, 0x69, 0x8a, 0xf8, 0xe5, 0x19, 0x3b, 0xf4, 0x09, 0x86, 0x27, 0x59, + 0x59, 0x9c, 0x59, 0x8a, 0xc6, 0x34, 0x60, 0xf9, 0x91, 0xd4, 0x7a, 0x18, + 0xa7, 0xe7, 0xa1, 0x01, 0x96, 0x4e, 0x75, 0x66, 0x03, 0xd3, 0xa4, 0x74, + 0x7a, 0x10, 0x17, 0x9c, 0xd7, 0x7f, 0xfc, 0x16, 0x14, 0xb5, 0xb1, 0x5d, + 0x02, 0x8b, 0x7f, 0x57, 0x94, 0xbf, 0x7e, 0x46, 0xb0, 0x9d, 0xf6, 0x8e, + 0xea, 0x67, 0x44, 0xed, 0x11, 0x7e, 0xb2, 0x41, 0xb5, 0x90, 0x95, 0x17, + 0x73, 0x14, 0x19, 0x4e, 0x6c, 0x9b, 0xfb, 0x30, 0x49, 0xaf, 0x1c, 0xce, + 0x26, 0x78, 0x80, 0xe8, 0x10, 0xa8, 0x55, 0xbc, 0x5a, 0x30, 0x17, 0x79, + 0x96, 0xc2, 0x2c, 0xeb, 0xfb, 0x58, 0xa9, 0x33, 0x31, 0x39, 0x5c, 0x52, + 0xc0, 0x80, 0x98, 0x13, 0xa2, 0x60, 0x0e, 0xb2, 0xce, 0x35, 0x84, 0x73, + 0xdd, 0x9a, 0x25, 0xd8, 0xc1, 0x49, 0xf5, 0x15, 0xa5, 0xce, 0x10, 0x33, + 0x5e, 0x0a, 0x71, 0x6d, 0x1a, 0x09, 0xaa, 0x81, 0x7e, 0xd6, 0x95, 0x9e, + 0x18, 0xb7, 0x9a, 0xba, 0x93, 0xa7, 0xca, 0x25, 0x56, 0x2e, 0x45, 0x8a, + 0x29, 0x4b, 0x76, 0x7a, 0xc5, 0xbc, 0x86, 0x07, 0x56, 0xe2, 0x39, 0x3d, + 0xaf, 0x05, 0x07, 0xf1, 0x85, 0xc7, 0xde, 0x83, 0x9d, 0x2e, 0x70, 0x88, + 0x58, 0x85, 0x97, 0x3b, 0x56, 0x1a, 0x66, 0x0a, 0x8e, 0x49, 0x7c, 0x09, + 0x99, 0xf9, 0x9d, 0x6c, 0x7c, 0x66, 0xaf, 0xa2, 0xc1, 0xa0, 0x98, 0xa5, + 0x08, 0x86, 0x85, 0xf3, 0x30, 0x96, 0x9b, 0x35, 0x26, 0xd0, 0x97, 0x58, + 0xcc, 0x89, 0x64, 0xe3, 0xb5, 0x43, 0xdd, 0xa6, 0x17, 0x73, 0x12, 0x50, + 0x77, 0x30, 0xae, 0xb9, 0x8c, 0x3e, 0xa4, 0xe4, 0xc9, 0x47, 0x84, 0x99, + 0xdd, 0x67, 0x6d, 0x26, 0x34, 0xa7, 0xbd, 0x69, 0xbc, 0x2f, 0xf8, 0xca, + 0xec, 0x43, 0x4b, 0xe2, 0xf5, 0x84, 0x28, 0x33, 0x4b, 0x40, 0x14, 0x25, + 0x5c, 0x46, 0x54, 0xbc, 0xc3, 0xa4, 0x6b, 0x73, 0x7e, 0x48, 0x6c, 0x42, + 0x4d, 0xc0, 0x19, 0xef, 0x07, 0x1f, 0xdf, 0xc8, 0x17, 0xab, 0x7b, 0x35, + 0x36, 0x23, 0x13, 0xd7, 0x78, 0x7c, 0x73, 0xea, 0x9b, 0x41, 0x1c, 0xba, + 0xbb, 0x55, 0x26, 0x44, 0x19, 0x99, 0xc6, 0xe9, 0xac, 0xdb, 0xd5, 0x81, + 0x98, 0x7a, 0x4a, 0x88, 0xa4, 0x21, 0xfb, 0xf4, 0x26, 0x91, 0xa3, 0x66, + 0x29, 0xa3, 0x7e, 0x7a, 0xca, 0x12, 0x6a, 0x7b, 0xc6, 0x8a, 0x9b, 0xbd, + 0xcf, 0x27, 0x0f, 0x2e, 0xfc, 0x8e, 0x12, 0xc3, 0x28, 0xb3, 0x9a, 0x6c, + 0x80, 0xd2, 0x44, 0x96, 0x93, 0x1c, 0x01, 0x27, 0x69, 0x55, 0x9a, 0x80, + 0x42, 0xf0, 0xc2, 0xb8, 0x11, 0x58, 0xad, 0x77, 0x49, 0x39, 0x49, 0x98, + 0x72, 0x95, 0x94, 0x7a, 0xb5, 0xca, 0x8e, 0xb1, 0x3b, 0x2d, 0x66, 0x89, + 0x90, 0x29, 0x1c, 0xcd, 0xd0, 0x70, 0x3f, 0xc0, 0x46, 0xc3, 0x83, 0x01, + 0xcf, 0xc3, 0x50, 0xea, 0xb9, 0x2b, 0x93, 0x07, 0xa6, 0x85, 0xd9, 0xbc, + 0x43, 0xe4, 0x10, 0x5f, 0x8b, 0xb2, 0x86, 0x74, 0x5e, 0x60, 0xa4, 0xa3, + 0x7e, 0x69, 0x66, 0xf2, 0xf7, 0xb5, 0x58, 0xf8, 0x42, 0x7d, 0xc1, 0x7a, + 0x12, 0x21, 0x43, 0xc1, 0x22, 0x71, 0xa2, 0x76, 0xa0, 0xc6, 0xd2, 0x8f, + 0xf8, 0x41, 0x0c, 0x23, 0x6b, 0x68, 0xc8, 0xcc, 0x75, 0xd4, 0x6b, 0x40, + 0x3f, 0x43, 0x07, 0x16, 0x19, 0x2a, 0x47, 0xfc, 0x7a, 0x8b, 0xc2, 0xcd, + 0x11, 0x52, 0x88, 0x70, 0xf7, 0xa5, 0xab, 0x52, 0xa7, 0x52, 0x60, 0x9d, + 0x42, 0xa0, 0x52, 0x50, 0x53, 0x8e, 0x1c, 0xc0, 0x7b, 0x4e, 0x27, 0x8c, + 0xf2, 0x97, 0x7d, 0x14, 0xf9, 0xbb, 0x1b, 0xa7, 0x01, 0xd7, 0x71, 0x91, + 0x5e, 0xd6, 0x59, 0x03, 0xbb, 0x5c, 0xdb, 0xc5, 0xc1, 0xfc, 0xfa, 0x1d, + 0x4b, 0x04, 0xa4, 0x3a, 0xa4, 0xb4, 0x8d, 0x94, 0x6a, 0x5b, 0x12, 0x4e, + 0x37, 0x89, 0xaf, 0x2c, 0x34, 0xbb, 0xad, 0x31, 0xa1, 0x78, 0x39, 0x65, + 0x3e, 0x84, 0x9e, 0x2b, 0x91, 0x72, 0x30, 0x82, 0x48, 0x87, 0x19, 0x35, + 0x68, 0xfa, 0xac, 0x42, 0xf5, 0x33, 0xcd, 0xf4, 0xb3, 0x10, 0x09, 0x95, + 0x0e, 0xdb, 0x06, 0x5c, 0xdc, 0x49, 0x85, 0x36, 0xa3, 0x10, 0x18, 0x76, + 0xbe, 0x04, 0x12, 0xd9, 0x9a, 0x23, 0xcb, 0x20, 0x70, 0x74, 0xf8, 0xa2, + 0x03, 0xa4, 0x42, 0x16, 0x78, 0xac, 0xfa, 0x3a, 0x22, 0x5f, 0xa5, 0xc5, + 0x60, 0x05, 0x5e, 0x8d, 0x38, 0x01, 0x87, 0xec, 0x68, 0x45, 0xda, 0x3b, + 0xd3, 0x61, 0x1f, 0xd6, 0xe9, 0x17, 0xde, 0xe3, 0xcf, 0x28, 0x30, 0xc5, + 0x2c, 0x02, 0x6b, 0xba, 0x8a, 0x6a, 0x31, 0x57, 0x8b, 0x94, 0x24, 0x84, + 0xf0, 0x07, 0x9e, 0x88, 0xb2, 0xac, 0x05, 0xd7, 0xc4, 0x53, 0xd7, 0x3d, + 0x37, 0x16, 0xbe, 0xe8, 0x0c, 0x69, 0x8a, 0x32, 0x3d, 0x2d, 0x53, 0x31, + 0xb0, 0x46, 0xb8, 0x6a, 0xe0, 0x07, 0xad, 0x40, 0xcc, 0xe3, 0x92, 0x7a, + 0x75, 0xf4, 0x89, 0x44, 0x32, 0xc7, 0xd2, 0x35, 0xb4, 0xb6, 0x61, 0x0a, + 0x79, 0x29, 0x20, 0xd5, 0xf0, 0xcb, 0xea, 0x38, 0x92, 0x35, 0x78, 0x4e, + 0xa9, 0x1b, 0xa0, 0x2b, 0xfb, 0xa2, 0x38, 0xa7, 0x9f, 0xa2, 0xac, 0xb6, + 0xb2, 0xa9, 0x1d, 0xba, 0x4b, 0xcd, 0x06, 0x78, 0x79, 0x6d, 0x0b, 0xb4, + 0x35, 0x7b, 0x4b, 0xdd, 0x84, 0x97, 0x62, 0xf4, 0xa7, 0xcb, 0xc6, 0x9d, + 0x16, 0x3c, 0x78, 0x74, 0xc9, 0xad, 0xc9, 0x2b, 0x01, 0xea, 0xe8, 0xae, + 0x61, 0x64, 0x61, 0xcc, 0x89, 0xad, 0xf4, 0x1c, 0x41, 0x5e, 0x48, 0x4b, + 0x94, 0xba, 0x43, 0xfc, 0xe7, 0xaf, 0x7b, 0x52, 0x0a, 0x59, 0x8b, 0x35, + 0x42, 0x98, 0x09, 0xc1, 0x09, 0xcd, 0x7c, 0x04, 0x8b, 0x9c, 0x67, 0xc7, + 0x01, 0x24, 0xb5, 0x97, 0xc1, 0x97, 0x9a, 0x7a, 0x31, 0xb7, 0x15, 0x6c, + 0xee, 0xf8, 0x49, 0xc7, 0x20, 0xb3, 0x94, 0x06, 0xa3, 0x2d, 0x1b, 0x63, + 0x9d, 0x18, 0xa1, 0xd0, 0xe4, 0x62, 0x69, 0x91, 0x81, 0xb9, 0x52, 0x3f, + 0xff, 0x36, 0x1a, 0xc9, 0x95, 0xbf, 0x11, 0x27, 0xa4, 0xe5, 0x04, 0x6c, + 0x32, 0xf1, 0xa1, 0xe1, 0x02, 0xcd, 0xfc, 0x43, 0x1b, 0x06, 0x09, 0x75, + 0xa7, 0x43, 0x7e, 0xb7, 0x65, 0xbf, 0xe9, 0xa4, 0x86, 0xce, 0x6a, 0x52, + 0xe3, 0xe3, 0x3c, 0xea, 0x47, 0x76, 0x6e, 0xaa, 0x9b, 0xaf, 0xc8, 0x19, + 0xf2, 0x48, 0xb0, 0x52, 0x03, 0x13, 0xed, 0xeb, 0x52, 0x4c, 0xc6, 0xbe, + 0x77, 0x71, 0xc7, 0x5e, 0x96, 0xaa, 0x10, 0x96, 0x50, 0x7c, 0xb1, 0x8e, + 0x9b, 0x10, 0x1c, 0xbc, 0x21, 0x13, 0x2a, 0x73, 0x37, 0xd7, 0x8c, 0x06, + 0x84, 0xe0, 0x7c, 0x3a, 0xb8, 0x26, 0x0e, 0x20, 0x70, 0xa3, 0x82, 0x5e, + 0xbc, 0x62, 0x5f, 0x88, 0x51, 0xcc, 0x3e, 0x65, 0x30, 0x11, 0xdb, 0x01, + 0xdb, 0x07, 0xcc, 0x6b, 0x35, 0x0a, 0x68, 0x65, 0x2e, 0x31, 0xab, 0x63, + 0x0f, 0xd3, 0x73, 0xb7, 0x5a, 0x10, 0x99, 0xa7, 0x2c, 0x35, 0x44, 0x1b, + 0x9b, 0x61, 0x27, 0xb9, 0x94, 0x69, 0xf9, 0x5b, 0x50, 0x3c, 0x66, 0x3c, + 0x9b, 0x36, 0x34, 0xa2, 0x12, 0x93, 0x6b, 0x30, 0x23, 0xfb, 0x4b, 0x50, + 0xe8, 0x18, 0x66, 0x19, 0xb0, 0x09, 0x25, 0x63, 0x9f, 0x52, 0x45, 0x39, + 0x79, 0xdb, 0x24, 0xd2, 0xb8, 0xca, 0xac, 0xd6, 0x10, 0x94, 0xd1, 0xb1, + 0x4c, 0x95, 0x97, 0xdf, 0x53, 0x33, 0x91, 0x05, 0xc1, 0xa6, 0xd8, 0x9b, + 0xd6, 0xd6, 0x26, 0xbd, 0x6c, 0x5d, 0x0e, 0x1b, 0xab, 0xf9, 0x03, 0xca, + 0x8b, 0x4b, 0x48, 0x42, 0x0a, 0x13, 0x7b, 0x72, 0x9a, 0x2e, 0xba, 0xb1, + 0x7f, 0xb4, 0x34, 0xee, 0x25, 0x8e, 0xa5, 0xf4, 0xcf, 0x9b, 0x9b, 0x1f, + 0x58, 0xe8, 0x5e, 0x34, 0x32, 0x92, 0x98, 0x1c, 0x0d, 0x02, 0xc4, 0x00, + 0x3f, 0x52, 0xb2, 0xf3, 0x7c, 0xb3, 0xe7, 0xca, 0x65, 0xae, 0xb8, 0xa7, + 0xf2, 0xea, 0xc0, 0x56, 0x34, 0x45, 0x75, 0x81, 0xa9, 0xec, 0xdc, 0x48, + 0x72, 0x23, 0x69, 0x12, 0x63, 0xb6, 0x96, 0xf8, 0xbd, 0x1d, 0x68, 0x57, + 0x70, 0x25, 0x6a, 0xea, 0x5a, 0x94, 0xdb, 0x60, 0xae, 0x05, 0xa5, 0x01, + 0x83, 0x58, 0x48, 0xe2, 0xf8, 0xce, 0x8b, 0xd7, 0xcf, 0x5d, 0x13, 0x65, + 0xe6, 0x12, 0x0e, 0x18, 0xd4, 0x56, 0x36, 0x6b, 0x19, 0xe9, 0xf1, 0xad, + 0xe4, 0xc5, 0x52, 0x05, 0x0a, 0x02, 0xce, 0xa8, 0x9b, 0x8f, 0x99, 0xbf, + 0x89, 0xb3, 0x6c, 0x08, 0x23, 0x2e, 0x13, 0xf7, 0x9a, 0x25, 0x31, 0x09, + 0x34, 0xe2, 0x3f, 0xa4, 0xac, 0xa7, 0x24, 0x76, 0x1e, 0x12, 0xb3, 0x23, + 0x22, 0xf2, 0x74, 0x4d, 0x93, 0xa6, 0xe4, 0xb0, 0x99, 0x7b, 0x01, 0x9c, + 0x68, 0x57, 0x95, 0x23, 0x69, 0x03, 0x5f, 0x28, 0x4d, 0x60, 0xd7, 0x05, + 0x81, 0xc5, 0x93, 0xbf, 0x4b, 0x57, 0x49, 0x98, 0x7b, 0x2e, 0x56, 0x99, + 0x41, 0x86, 0x0e, 0x16, 0x19, 0xad, 0x1d, 0x52, 0x44, 0x69, 0xe9, 0x87, + 0xb7, 0x26, 0x1f, 0x22, 0x74, 0x73, 0x96, 0x99, 0x93, 0x52, 0x91, 0x65, + 0x6d, 0x11, 0x45, 0x25, 0x40, 0x09, 0x84, 0x86, 0x5b, 0x91, 0x89, 0x5e, + 0xc6, 0xc3, 0x9e, 0xc5, 0x49, 0x25, 0xbe, 0x25, 0x81, 0xd2, 0x4a, 0x62, + 0xd7, 0xb2, 0x78, 0x5c, 0x2c, 0x69, 0x7f, 0xd6, 0x1c, 0x14, 0xc2, 0x8d, + 0x1a, 0x95, 0x68, 0xc9, 0xc3, 0x31, 0xe3, 0xd7, 0x49, 0xba, 0x65, 0x97, + 0xd9, 0xbc, 0x94, 0xcf, 0x39, 0x1a, 0x7e, 0x3a, 0xa5, 0x7c, 0x52, 0xc7, + 0xac, 0xba, 0x8a, 0x6a, 0x85, 0x94, 0x1b, 0xdc, 0x59, 0xcf, 0x57, 0xca, + 0x46, 0x33, 0x6b, 0x25, 0xfb, 0x9b, 0xa9, 0x3c, 0xcf, 0x87, 0x19, 0xa0, + 0x05, 0x79, 0x69, 0xa7, 0x64, 0x39, 0x9e, 0xf2, 0xcc, 0x3a, 0x81, 0xaa, + 0x1c, 0x45, 0x34, 0xe1, 0x95, 0x15, 0x13, 0x89, 0x43, 0x2b, 0xb4, 0x3e, + 0xc5, 0x4a, 0x2d, 0xb2, 0xda, 0xae, 0xe0, 0x68, 0x92, 0x1a, 0x6a, 0x27, + 0x53, 0x33, 0xaf, 0x3a, 0x66, 0xc2, 0x2e, 0x92, 0x4c, 0x9c, 0xcb, 0xcd, + 0x29, 0x86, 0x63, 0xd6, 0xc4, 0x04, 0x8b, 0xb0, 0x9e, 0x87, 0x85, 0x38, + 0x7f, 0x8a, 0x29, 0x1b, 0x3c, 0x15, 0xe7, 0x2c, 0xac, 0x44, 0xc6, 0x36, + 0x0e, 0xab, 0x29, 0x0f, 0x63, 0x3f, 0xaa, 0xf4, 0xb0, 0x23, 0xd0, 0x00, + 0xb0, 0x33, 0x71, 0xec, 0x88, 0x5e, 0xbe, 0xe4, 0x68, 0x4e, 0xd3, 0x9a, + 0x3b, 0xd0, 0x3a, 0x39, 0x0a, 0x0f, 0x7f, 0xc7, 0x2f, 0x5e, 0x9b, 0x85, + 0x74, 0xa2, 0x30, 0x98, 0x40, 0x4e, 0x7f, 0x46, 0x20, 0xc7, 0xa8, 0x41, + 0x13, 0x70, 0xb2, 0xad, 0x88, 0x13, 0xdc, 0xc9, 0x10, 0x11, 0x67, 0x0f, + 0xd3, 0xa2, 0x9c, 0x08, 0x83, 0x03, 0x72, 0x5c, 0xb2, 0x42, 0x5c, 0x78, + 0x3a, 0xe7, 0x15, 0x39, 0xc7, 0x5f, 0x96, 0xc1, 0xb1, 0xb3, 0x95, 0xbd, + 0x93, 0x6c, 0x11, 0x8b, 0x0b, 0xca, 0x99, 0x46, 0x27, 0xf3, 0x2a, 0x6b, + 0x53, 0xa1, 0x87, 0x88, 0x44, 0x53, 0xca, 0xc6, 0x06, 0xc3, 0x9b, 0x81, + 0x93, 0x76, 0x70, 0xfa, 0x91, 0x5a, 0x36, 0xf4, 0x4f, 0xdf, 0x00, 0xd0, + 0xaf, 0x0c, 0xba, 0xba, 0x70, 0x7a, 0x9f, 0xcc, 0x36, 0x72, 0x12, 0x3d, + 0x4e, 0xdb, 0xc1, 0xe7, 0xf3, 0x06, 0x92, 0x40, 0x0c, 0xe8, 0xe8, 0x3e, + 0x19, 0x8a, 0x5c, 0xb6, 0x92, 0xce, 0xd4, 0x36, 0x3d, 0x77, 0x81, 0x09, + 0x5e, 0x12, 0x96, 0x1b, 0xd2, 0x7a, 0xfe, 0x19, 0x48, 0xc8, 0xf7, 0x25, + 0x9e, 0x33, 0x6a, 0x25, 0x31, 0x08, 0x2a, 0x29, 0x78, 0xc7, 0x2b, 0xc6, + 0x7a, 0xd3, 0x0b, 0xca, 0x08, 0x6c, 0x51, 0xa7, 0xbc, 0xd5, 0x7b, 0x7b, + 0x15, 0xf6, 0x4e, 0x33, 0x2c, 0x1f, 0x91, 0xab, 0x60, 0x15, 0x10, 0x58, + 0x93, 0x91, 0x71, 0x02, 0x53, 0x04, 0x59, 0xc2, 0x18, 0xde, 0xeb, 0x58, + 0xf5, 0xdc, 0x9d, 0xa5, 0x26, 0x2b, 0x7d, 0x8a, 0x31, 0x59, 0xb4, 0x31, + 0x54, 0xf8, 0x59, 0x7e, 0x5c, 0x57, 0xcf, 0x37, 0x40, 0x0a, 0x2c, 0x56, + 0x00, 0x81, 0xb0, 0x98, 0xdc, 0x2c, 0x20, 0xf6, 0xb5, 0xcc, 0xec, 0xc6, + 0xbc, 0xf5, 0xb9, 0x61, 0x84, 0xb0, 0xf7, 0x47, 0x50, 0x76, 0x31, 0x7c, + 0x2e, 0xe5, 0x48, 0x2e, 0xd8, 0x3f, 0xe0, 0x58, 0x10, 0x8f, 0x76, 0x29, + 0x58, 0xe6, 0x10, 0x04, 0x19, 0x63, 0x93, 0x79, 0x30, 0xc3, 0xaa, 0x3e, + 0x69, 0x85, 0x42, 0x3a, 0x33, 0xa0, 0x7e, 0x77, 0x61, 0x3f, 0x72, 0x36, + 0xf0, 0xd9, 0x91, 0x1a, 0xf4, 0x93, 0x44, 0xa1, 0x5d, 0x77, 0xc0, 0x2a, + 0x68, 0xf1, 0x9c, 0x66, 0x17, 0x04, 0xef, 0x51, 0x58, 0x71, 0x65, 0x9f, + 0x05, 0x02, 0x51, 0xbf, 0x4c, 0xa9, 0x07, 0x4a, 0x1a, 0x2b, 0x1a, 0x02, + 0x8f, 0xcb, 0x92, 0xe8, 0x05, 0x3d, 0xfc, 0xaa, 0x31, 0x93, 0x34, 0xc6, + 0x44, 0x3f, 0xdc, 0x1f, 0x8e, 0xad, 0xe4, 0xef, 0x0c, 0x36, 0x94, 0x9a, + 0x1d, 0x36, 0xb4, 0x40, 0x74, 0x7c, 0x8d, 0x27, 0xde, 0xf2, 0xfe, 0x62, + 0xc0, 0x33, 0xd6, 0xc1, 0x7c, 0xbc, 0xc8, 0xc6, 0x0d, 0xf1, 0x0a, 0x55, + 0xb7, 0x3e, 0x72, 0x13, 0x50, 0xff, 0x5f, 0xfd, 0xf8, 0xc9, 0x71, 0x71, + 0x03, 0xb3, 0xf2, 0x42, 0xf1, 0x2f, 0xcf, 0x29, 0x2d, 0xe0, 0xce, 0x75, + 0x19, 0x4e, 0x2e, 0x59, 0x67, 0x82, 0x18, 0xbe, 0x4e, 0xaa, 0x47, 0x76, + 0x2d, 0x1a, 0xbe, 0x76, 0xc7, 0x55, 0xc7, 0x62, 0x49, 0xbc, 0x0d, 0xea, + 0x1c, 0x5c, 0x16, 0x25, 0x53, 0x1b, 0xd1, 0xf8, 0x6f, 0xa0, 0xaf, 0xda}, + // ciphertext + {0x6c, 0x69, 0xeb, 0x30, 0xd9, 0x63, 0x6e, 0xba, 0x9e, 0xe1, 0x4b, 0xc9, + 0x2e, 0xe7, 0x30, 0x72, 0x0d, 0x39, 0xe1, 0x89, 0xae, 0x3a, 0xbd, 0x96, + 0x36, 0x75, 0x80, 0x84, 0x5a, 0x82, 0xf2, 0x7c, 0x6c, 0x85, 0xf7, 0x13, + 0x5b, 0xc2, 0x47, 0x15, 0x53, 0xcf, 0x1b, 0x0e, 0x0f, 0x09, 0x2d, 0x87, + 0xae, 0xe9, 0xae, 0x24, 0x64, 0x9d, 0x6b, 0xc9, 0x10, 0xa6, 0xc6, 0xb4, + 0x32, 0xf2, 0x09, 0x93, 0xe5, 0x62, 0xc5, 0xa1, 0x77, 0x7b, 0xd8, 0x01, + 0xa7, 0xf1, 0xc0, 0x5f, 0xd3, 0xa9, 0xe8, 0xdf, 0x57, 0xa1, 0x87, 0xcf, + 0x26, 0x37, 0xf9, 0x9c, 0x6e, 0x24, 0xb5, 0xdc, 0xea, 0xa6, 0x4d, 0xb8, + 0x92, 0x79, 0x68, 0x03, 0xde, 0x9c, 0x1b, 0x6e, 0xb9, 0xe2, 0x97, 0x44, + 0x0f, 0x70, 0x51, 0xd6, 0x68, 0xf4, 0x78, 0x17, 0x64, 0xf8, 0x4c, 0xe4, + 0x99, 0xd6, 0xe7, 0xf6, 0xe4, 0x08, 0x6c, 0x1f, 0x9b, 0x86, 0x22, 0x60, + 0x63, 0x0e, 0x1b, 0x3e, 0x6c, 0x4b, 0xe5, 0x2e, 0xc4, 0xfd, 0x99, 0x67, + 0x0a, 0x34, 0x56, 0x59, 0xe4, 0xd8, 0x65, 0xe5, 0xdb, 0xfd, 0x19, 0xd6, + 0x41, 0x2b, 0x4c, 0x9d, 0x31, 0x00, 0x3d, 0x36, 0xeb, 0x9a, 0x1d, 0xe2, + 0xec, 0xd3, 0xa4, 0x95, 0xb9, 0xe5, 0xa4, 0x4d, 0x51, 0xbf, 0x85, 0x61, + 0x0e, 0xa8, 0x67, 0xc9, 0xf4, 0xf1, 0xf0, 0x9e, 0x10, 0x66, 0x7a, 0x49, + 0x19, 0x20, 0x76, 0x28, 0xb2, 0xfd, 0x91, 0x33, 0x0b, 0xad, 0xfd, 0x44, + 0xcf, 0x49, 0x1c, 0xad, 0xa6, 0xfa, 0x9a, 0xec, 0xde, 0x5e, 0x20, 0xce, + 0x8a, 0xec, 0xc2, 0x98, 0x66, 0x47, 0xf2, 0x65, 0x68, 0x69, 0xe6, 0x20, + 0x1d, 0x85, 0x1a, 0xc8, 0x17, 0x6d, 0x98, 0xdc, 0xad, 0xc5, 0xab, 0xd3, + 0x96, 0xb0, 0xc4, 0xb4, 0x68, 0x87, 0x1d, 0x0e, 0xb9, 0x33, 0x2c, 0x26, + 0x4a, 0xc7, 0x55, 0x0c, 0xba, 0x62, 0xf7, 0x76, 0x55, 0x11, 0x0c, 0x4d, + 0x15, 0xda, 0x73, 0xa6, 0x41, 0xf6, 0x7a, 0x78, 0x21, 0xd7, 0xc7, 0xea, + 0x81, 0xcd, 0x4d, 0xd1, 0xbe, 0xfc, 0x5c, 0xc0, 0x56, 0x88, 0x3e, 0x74, + 0xeb, 0x8d, 0xc9, 0x85, 0xca, 0x19, 0x3a, 0xbe, 0xb3, 0x08, 0x65, 0xa5, + 0x9c, 0x86, 0x16, 0x7d, 0xfb, 0x51, 0xf9, 0x68, 0x91, 0xd6, 0x04, 0x57, + 0x75, 0x72, 0xd6, 0x16, 0x23, 0x95, 0x0d, 0x5c, 0xbc, 0x20, 0xf2, 0x75, + 0x2e, 0x6c, 0x65, 0x66, 0x29, 0x50, 0xf7, 0xd6, 0x9c, 0x4e, 0x6d, 0x88, + 0x38, 0x30, 0x32, 0x65, 0x39, 0xdb, 0xee, 0x1a, 0x1e, 0x68, 0x3d, 0x74, + 0xe1, 0xb2, 0x61, 0xad, 0x1d, 0x82, 0x5d, 0x57, 0xfa, 0xbc, 0x35, 0x12, + 0xa4, 0x05, 0xb1, 0x72, 0xbe, 0x7a, 0xc2, 0x24, 0x79, 0xe4, 0xd2, 0xf8, + 0x34, 0x00, 0x93, 0x37, 0x72, 0x67, 0x51, 0xca, 0x61, 0x7a, 0x95, 0xa6, + 0xe9, 0x15, 0xe5, 0x07, 0x55, 0xfd, 0x64, 0x4d, 0x60, 0x0a, 0xb6, 0x70, + 0xee, 0xb5, 0xf1, 0xcf, 0x09, 0x7c, 0xc5, 0x21, 0xa7, 0xef, 0xe8, 0xa7, + 0x12, 0xe5, 0x2f, 0xc9, 0x16, 0x34, 0xef, 0x0a, 0x3b, 0x87, 0xb9, 0x13, + 0x70, 0x44, 0x46, 0x61, 0x67, 0x4d, 0x9f, 0x1d, 0x07, 0x66, 0xde, 0x59, + 0xce, 0xdc, 0x70, 0xce, 0x0e, 0x78, 0xec, 0x06, 0x2f, 0x7a, 0x50, 0xdf, + 0xa5, 0x75, 0x89, 0x7b, 0xb4, 0xa7, 0x58, 0xfc, 0x7d, 0x49, 0xa9, 0x2c, + 0x6c, 0xdc, 0xa5, 0x02, 0x0c, 0x04, 0x08, 0xa7, 0x83, 0x01, 0x06, 0x52, + 0x9c, 0xcd, 0x6c, 0xbe, 0xd3, 0x4b, 0x0d, 0x5c, 0xa2, 0xab, 0x68, 0xf2, + 0x7c, 0xa8, 0x69, 0xac, 0xcf, 0xf3, 0x63, 0xbd, 0x54, 0x6c, 0xd6, 0xeb, + 0x6e, 0xd3, 0x58, 0x9b, 0xba, 0xe0, 0xd7, 0xe3, 0x10, 0x1c, 0x71, 0xd6, + 0x32, 0x20, 0x14, 0x0c, 0xe0, 0x14, 0x6d, 0xc2, 0xa0, 0x38, 0xb4, 0xc3, + 0x27, 0x49, 0xa4, 0xb9, 0x9c, 0x3d, 0x96, 0x66, 0x68, 0x85, 0x82, 0x98, + 0x4f, 0xbc, 0xc8, 0x2f, 0x79, 0xfe, 0xf7, 0x46, 0x18, 0x0d, 0x05, 0xb8, + 0x57, 0x4f, 0xc4, 0x2b, 0xe2, 0x6e, 0x35, 0x96, 0x1e, 0x01, 0xf2, 0xeb, + 0x63, 0x4c, 0xac, 0x23, 0xbd, 0xa5, 0xd7, 0x98, 0xc7, 0x26, 0x42, 0x23, + 0x52, 0x4a, 0x04, 0x0c, 0x9e, 0xf7, 0xd4, 0x26, 0x73, 0xc7, 0xf6, 0xb0, + 0xf2, 0x61, 0x14, 0x67, 0x58, 0x0e, 0xaa, 0xd9, 0xff, 0xca, 0xe0, 0x29, + 0x19, 0x62, 0xa9, 0x8e, 0xc2, 0x3c, 0x73, 0x51, 0xd6, 0x20, 0xea, 0x02, + 0x72, 0x3a, 0x64, 0x93, 0xe6, 0x35, 0x4a, 0xbe, 0x03, 0x73, 0xfb, 0xc7, + 0x7d, 0xcd, 0xd0, 0x22, 0x02, 0x5f, 0x8c, 0x7f, 0x94, 0xc3, 0x47, 0x6a, + 0x0e, 0x40, 0x0a, 0xa7, 0x41, 0x4f, 0x6e, 0x50, 0x58, 0x4e, 0x14, 0xb7, + 0xde, 0x84, 0x96, 0x8f, 0x47, 0x08, 0x3c, 0xb2, 0x28, 0x92, 0x45, 0x51, + 0x19, 0x1f, 0xa1, 0x03, 0x1f, 0xee, 0x39, 0xcf, 0x9a, 0x04, 0x94, 0xa1, + 0x8e, 0x34, 0xfe, 0x26, 0x9f, 0x98, 0x0a, 0x15, 0x59, 0x4a, 0x6f, 0x68, + 0x49, 0x9f, 0xb0, 0x1b, 0xce, 0xd9, 0xda, 0xd1, 0x87, 0xdb, 0x29, 0x84, + 0x2d, 0x92, 0x87, 0x55, 0xf6, 0x18, 0xd0, 0x8b, 0x3f, 0x44, 0xa2, 0x43, + 0x25, 0x7d, 0x7e, 0xbe, 0xca, 0xde, 0x36, 0x1d, 0x47, 0x75, 0x8a, 0x3e, + 0x3b, 0x6e, 0x06, 0x60, 0x1e, 0x4f, 0x40, 0x9d, 0x22, 0x08, 0xf3, 0x63, + 0x97, 0x30, 0x09, 0x78, 0xfe, 0x81, 0x73, 0x08, 0x28, 0x51, 0xde, 0xc3, + 0x28, 0x32, 0x5b, 0xa0, 0x56, 0x76, 0x84, 0x8b, 0x91, 0x98, 0xe4, 0x69, + 0x66, 0xee, 0xfd, 0xe2, 0xdc, 0x72, 0x41, 0x78, 0x41, 0xe8, 0x2f, 0x98, + 0x48, 0xff, 0xf6, 0xbe, 0x52, 0x8f, 0x14, 0x76, 0x48, 0xf8, 0x81, 0xcf, + 0x97, 0x18, 0xe6, 0xb1, 0xf7, 0xe0, 0xe2, 0x0c, 0x6a, 0x1b, 0x37, 0xc5, + 0xee, 0xd4, 0x2d, 0xc6, 0xb9, 0x82, 0xcb, 0x22, 0x32, 0x80, 0x2c, 0xb7, + 0x1e, 0x83, 0x12, 0x3d, 0xb1, 0x05, 0xe6, 0xdd, 0x06, 0x8b, 0xcb, 0xbd, + 0xfa, 0x96, 0x4c, 0x99, 0x55, 0xb2, 0xd9, 0x3b, 0x77, 0x76, 0xee, 0xba, + 0x03, 0xc5, 0x65, 0x0c, 0x63, 0x1d, 0x8f, 0x05, 0xad, 0x84, 0xad, 0x7d, + 0x81, 0x90, 0xac, 0xff, 0xba, 0x49, 0x77, 0x60, 0x7a, 0xb8, 0xcb, 0x19, + 0x78, 0x8b, 0xdc, 0x73, 0x23, 0xa7, 0xa1, 0xd9, 0x1b, 0x7a, 0xf8, 0xbe, + 0x6a, 0x43, 0x86, 0xad, 0xb4, 0x7b, 0xea, 0x4b, 0x4d, 0x93, 0xc0, 0x16, + 0x65, 0xcd, 0x60, 0x5d, 0x56, 0x77, 0xb9, 0xa2, 0xb7, 0x5a, 0x7b, 0xee, + 0x38, 0x6f, 0xb1, 0xda, 0xba, 0x09, 0xed, 0x20, 0x99, 0x15, 0x61, 0x6b, + 0xc5, 0x44, 0x16, 0x7b, 0x97, 0xc9, 0xe2, 0x3d, 0xe7, 0x7b, 0x75, 0x7d, + 0x5b, 0x98, 0xe6, 0x3c, 0xca, 0x90, 0x51, 0xb6, 0xd8, 0x82, 0x31, 0x3b, + 0x44, 0x77, 0xd1, 0x0b, 0x04, 0x12, 0x8e, 0x6f, 0xba, 0x7e, 0x1e, 0xae, + 0x23, 0xfb, 0xfb, 0x64, 0xc8, 0xd0, 0x91, 0xee, 0x23, 0x3f, 0xcd, 0xee, + 0x91, 0xa0, 0xea, 0x19, 0x5c, 0xe5, 0x11, 0xc3, 0xdf, 0x4b, 0x24, 0xc1, + 0x7b, 0x9d, 0x36, 0x38, 0x9e, 0xf5, 0xce, 0xb3, 0xbe, 0xe6, 0xd9, 0xa5, + 0x0e, 0xd3, 0x5e, 0x3b, 0xb7, 0x2e, 0x95, 0x04, 0x08, 0x51, 0xa4, 0xad, + 0x29, 0x10, 0xce, 0x6e, 0xc3, 0x5a, 0x17, 0xad, 0x17, 0x15, 0xda, 0x7b, + 0xd1, 0x21, 0x19, 0x08, 0x76, 0x20, 0x34, 0x57, 0x83, 0x68, 0x38, 0xb0, + 0x41, 0x5a, 0x53, 0xf6, 0x2f, 0x9a, 0x6c, 0x4c, 0xb2, 0xb1, 0xb8, 0xe8, + 0x11, 0xfd, 0x78, 0x02, 0x3f, 0xb5, 0xa1, 0x19, 0x21, 0x4d, 0x19, 0x2b, + 0x81, 0x3e, 0x9b, 0x82, 0xb8, 0x25, 0x74, 0xd3, 0x6a, 0x5d, 0xfb, 0x1e, + 0xa9, 0xa0, 0x3d, 0x20, 0xed, 0x2d, 0xf1, 0x2a, 0x04, 0x94, 0x4f, 0xb9, + 0xba, 0x28, 0x3e, 0x0b, 0x29, 0x0b, 0xa7, 0x37, 0x0b, 0x50, 0x98, 0xa3, + 0x28, 0xaa, 0x70, 0xa1, 0x45, 0x5c, 0xf1, 0x66, 0xec, 0x6a, 0x6d, 0xdc, + 0x07, 0x04, 0xfc, 0xde, 0x25, 0x8e, 0x1f, 0x73, 0x63, 0xb4, 0xa4, 0x6b, + 0x4a, 0xd1, 0xb6, 0xe7, 0x49, 0xd7, 0xcb, 0x8f}, + // secret + {0xf5, 0xd3, 0x03, 0xc2, 0xe3, 0x82, 0x27, 0x35, 0x9b, 0xa4, 0xa6, + 0x47, 0x27, 0xa9, 0x42, 0x4d, 0xe8, 0x8d, 0x41, 0xee, 0xc9, 0x61, + 0x69, 0x73, 0x85, 0x52, 0x9c, 0x45, 0x87, 0x98, 0x0d, 0x62}, + true}, + // tcID: 90 + {90, + params_ml_kem768_test_mode, + // privateKey + {0x37, 0x78, 0x2d, 0x0b, 0x89, 0x34, 0x17, 0x26, 0x61, 0x5d, 0x95, 0x24, + 0x6d, 0xa6, 0x33, 0xe2, 0xbc, 0xa9, 0xd7, 0x1b, 0x47, 0x7b, 0x77, 0x15, + 0x0c, 0xac, 0xb7, 0xbb, 0x5a, 0x0e, 0xd4, 0x56, 0x56, 0x44, 0xa2, 0x56, + 0x5e, 0xbb, 0xc4, 0xad, 0x74, 0x2a, 0xc5, 0x71, 0x8f, 0x3a, 0x63, 0x51, + 0x8d, 0x38, 0x18, 0xa3, 0xfc, 0x31, 0xdc, 0x55, 0x52, 0xee, 0x03, 0x35, + 0x22, 0x62, 0x2a, 0xb7, 0x50, 0x27, 0xbc, 0xc3, 0x9c, 0x74, 0x1b, 0x35, + 0x24, 0xe5, 0x1a, 0x26, 0xd1, 0x2c, 0x02, 0x62, 0x8b, 0xc3, 0x63, 0xaa, + 0x0d, 0x90, 0x83, 0x30, 0xb3, 0x56, 0xa4, 0x12, 0x91, 0x1b, 0xdb, 0x80, + 0x42, 0x76, 0x8f, 0xac, 0xe3, 0x6b, 0x02, 0xe5, 0x12, 0x6d, 0xeb, 0x65, + 0x92, 0x59, 0x0a, 0xc5, 0xd8, 0x67, 0xef, 0x93, 0x7a, 0x2b, 0xdc, 0x3a, + 0x74, 0x93, 0x0c, 0x18, 0x34, 0x11, 0x34, 0x2a, 0xb5, 0xd0, 0xe7, 0x70, + 0x31, 0x85, 0x9f, 0x38, 0x77, 0xa1, 0xe7, 0x1b, 0x9c, 0x50, 0x20, 0x0e, + 0xfa, 0x04, 0x73, 0x0d, 0x5a, 0x22, 0x37, 0x60, 0xa6, 0x2b, 0xd4, 0xb1, + 0xf0, 0x61, 0x5a, 0x0e, 0xa9, 0x02, 0x49, 0x24, 0x04, 0x52, 0x3a, 0xc1, + 0xf4, 0x85, 0x25, 0x3c, 0xc1, 0x0b, 0xab, 0x97, 0x50, 0x38, 0x08, 0xc5, + 0x65, 0x80, 0x8d, 0xeb, 0x9b, 0x31, 0x76, 0x53, 0x29, 0x75, 0x63, 0x89, + 0x23, 0x67, 0x80, 0x02, 0xe2, 0x32, 0xad, 0x68, 0x66, 0x65, 0x39, 0x40, + 0x7a, 0xe1, 0xce, 0xf8, 0x12, 0x97, 0x02, 0xc8, 0xb5, 0x8e, 0x69, 0x06, + 0x0d, 0xb4, 0x22, 0xc4, 0x9b, 0x67, 0x42, 0x62, 0x14, 0xf7, 0xdb, 0x20, + 0xc2, 0xfc, 0x85, 0x7f, 0x52, 0xb1, 0x74, 0xd6, 0xc9, 0x3b, 0xe9, 0x0b, + 0x4a, 0x58, 0x81, 0x1e, 0xe2, 0x7e, 0x45, 0x33, 0x82, 0xe1, 0x29, 0x18, + 0x65, 0x2c, 0xa9, 0xf0, 0x31, 0x3a, 0x8b, 0xec, 0xb7, 0xd8, 0xd7, 0xc9, + 0xec, 0x48, 0x30, 0x14, 0x25, 0x39, 0xbd, 0xd9, 0x25, 0x82, 0xd0, 0x02, + 0x34, 0x50, 0x3d, 0x6f, 0xd8, 0xce, 0x12, 0xf8, 0x06, 0xa5, 0x38, 0x12, + 0x32, 0xd6, 0xbf, 0x0f, 0x03, 0x91, 0xef, 0x8a, 0x1b, 0x28, 0x80, 0x38, + 0xfc, 0xaa, 0x98, 0x95, 0x6c, 0x54, 0x6a, 0xf4, 0x73, 0x27, 0x00, 0x9c, + 0xa6, 0x53, 0x26, 0x52, 0x1a, 0x55, 0x3f, 0x2a, 0x4e, 0x39, 0x83, 0xb0, + 0x52, 0xb3, 0x42, 0x0d, 0x20, 0x30, 0x3d, 0x37, 0x8c, 0x6a, 0xf1, 0x10, + 0xb3, 0x45, 0x1c, 0xcd, 0x5a, 0x4a, 0xe4, 0xaa, 0x83, 0xf7, 0xb2, 0xc2, + 0x0b, 0xc2, 0x75, 0x42, 0x31, 0x86, 0x90, 0xfb, 0xb2, 0xf5, 0x42, 0xa3, + 0xa5, 0x19, 0x30, 0xe0, 0x4b, 0x9f, 0xb6, 0x10, 0x9c, 0x15, 0xf7, 0x2b, + 0x82, 0x56, 0x56, 0x58, 0x6c, 0x8b, 0x76, 0xf5, 0x4f, 0x53, 0x82, 0xab, + 0xfe, 0x34, 0xcf, 0x91, 0x47, 0x19, 0x22, 0xc9, 0xbd, 0x2d, 0x60, 0x00, + 0x03, 0x15, 0x6c, 0x62, 0x15, 0x79, 0xa0, 0xc6, 0x16, 0x26, 0xa7, 0xc2, + 0xd0, 0xbb, 0x7a, 0xff, 0x95, 0x86, 0x3a, 0x89, 0xc3, 0xd4, 0x72, 0x29, + 0x16, 0x39, 0x76, 0x01, 0x63, 0x0d, 0xe0, 0xe1, 0x58, 0xaa, 0x9b, 0x59, + 0x74, 0xa9, 0x51, 0x07, 0xe0, 0xab, 0xb6, 0xa6, 0x63, 0x08, 0x12, 0x32, + 0x41, 0x27, 0x56, 0x13, 0xc2, 0x10, 0x49, 0x5c, 0xad, 0x01, 0x72, 0x02, + 0x50, 0x84, 0x64, 0x84, 0x7b, 0x4b, 0xe8, 0x79, 0x2d, 0x4d, 0xc9, 0x01, + 0x7b, 0xd9, 0x4f, 0xce, 0x87, 0x3a, 0x30, 0xc0, 0xa5, 0x87, 0xa1, 0x6c, + 0xc7, 0x94, 0x14, 0x13, 0x78, 0x5a, 0xb6, 0x96, 0x9c, 0xc9, 0x0c, 0x47, + 0x23, 0x58, 0x47, 0xad, 0x4c, 0xb1, 0x76, 0x98, 0x35, 0xf1, 0x95, 0x87, + 0x17, 0x12, 0xaa, 0x46, 0x7c, 0x5d, 0xf1, 0xb3, 0x0d, 0x06, 0xbb, 0x90, + 0x7c, 0x65, 0x19, 0xca, 0x4a, 0xa3, 0xdc, 0x98, 0x84, 0x26, 0x23, 0x39, + 0xd4, 0x44, 0x1c, 0x07, 0x80, 0x49, 0x99, 0x5b, 0xad, 0x49, 0xfb, 0x8f, + 0xd9, 0x52, 0x19, 0xea, 0x3c, 0xcf, 0x17, 0xc1, 0x7f, 0x97, 0x21, 0x3a, + 0xd8, 0x62, 0x71, 0x0a, 0x60, 0xca, 0xed, 0x99, 0x0d, 0x5c, 0xf0, 0x19, + 0x19, 0x76, 0x42, 0x18, 0xd6, 0x72, 0xd9, 0xb5, 0x05, 0x0a, 0xf0, 0x52, + 0x4a, 0x7a, 0xc6, 0x7b, 0x8a, 0x38, 0xa4, 0xfa, 0x5c, 0x75, 0x50, 0x50, + 0xf9, 0x43, 0x15, 0x84, 0x97, 0x0b, 0xf6, 0x77, 0x5f, 0x26, 0x09, 0x55, + 0x9f, 0x38, 0x07, 0xfb, 0xca, 0x6e, 0xb6, 0x7b, 0x9c, 0x67, 0xf6, 0xb0, + 0xa0, 0xb4, 0xb5, 0x27, 0xd5, 0x63, 0xbe, 0xb4, 0x15, 0xac, 0x49, 0x89, + 0x47, 0x37, 0x58, 0xe3, 0x1b, 0xbd, 0xc8, 0xf5, 0x17, 0x91, 0x1b, 0x1e, + 0x43, 0x1b, 0x88, 0xb7, 0xe8, 0x71, 0xea, 0x33, 0xa0, 0x52, 0xfb, 0x1d, + 0x25, 0x36, 0x03, 0x2c, 0x56, 0x1d, 0xde, 0xb6, 0x52, 0x6e, 0x65, 0x2e, + 0x1d, 0xf3, 0x38, 0xe9, 0xc1, 0x79, 0x53, 0x9c, 0x89, 0x14, 0x21, 0xaa, + 0xf6, 0x06, 0x7f, 0x55, 0x00, 0x52, 0x14, 0x0b, 0x89, 0xe5, 0x94, 0x2e, + 0x42, 0x33, 0x7a, 0x1d, 0xb8, 0xcc, 0x3d, 0x88, 0x76, 0x0a, 0x14, 0x98, + 0xd5, 0xf4, 0x07, 0x49, 0x79, 0x25, 0x23, 0x8a, 0x79, 0xa0, 0xb4, 0x69, + 0xfb, 0x2b, 0xba, 0x70, 0xd9, 0x31, 0x95, 0xf4, 0x01, 0x7e, 0x00, 0x08, + 0xfc, 0xc6, 0x5d, 0x06, 0x35, 0xc9, 0xfd, 0xbb, 0x74, 0xec, 0x4c, 0x4c, + 0x50, 0x45, 0x5e, 0x1e, 0x5b, 0x89, 0x3d, 0x03, 0x76, 0x48, 0x61, 0x96, + 0x4a, 0x9c, 0x37, 0x03, 0xfb, 0xc6, 0xa6, 0xfa, 0x55, 0x7d, 0x34, 0xaa, + 0x5c, 0x35, 0x2d, 0x67, 0xc3, 0x70, 0xde, 0x76, 0x08, 0xe8, 0x36, 0x70, + 0xa4, 0x86, 0x92, 0xfe, 0xb4, 0xca, 0x17, 0xb8, 0x42, 0xbc, 0xc8, 0xaa, + 0xc7, 0xb0, 0xaa, 0x45, 0x46, 0xa6, 0x07, 0x15, 0x7d, 0xd2, 0x52, 0x91, + 0x82, 0x70, 0x3e, 0x8a, 0xf6, 0x81, 0x8e, 0x83, 0x66, 0x35, 0xc4, 0x28, + 0xe1, 0x36, 0xbd, 0xee, 0xd6, 0x67, 0x8f, 0x96, 0x2b, 0x1c, 0xe8, 0x47, + 0xd9, 0x93, 0xb5, 0xf7, 0xb5, 0x73, 0x70, 0x39, 0x0b, 0x74, 0x26, 0x19, + 0x09, 0xa3, 0x96, 0x32, 0x64, 0xa2, 0x1d, 0xd4, 0x88, 0x6a, 0x81, 0x2a, + 0x44, 0xca, 0x2c, 0xb8, 0x2a, 0x06, 0xeb, 0xd7, 0xc1, 0x28, 0x0c, 0xa9, + 0x93, 0xf5, 0x42, 0xeb, 0x36, 0xcb, 0x65, 0x6a, 0x14, 0x04, 0x71, 0x19, + 0x5a, 0x56, 0xc7, 0x50, 0x07, 0x39, 0x06, 0xb6, 0x11, 0x5d, 0xc1, 0x7a, + 0x93, 0xe7, 0x9d, 0x7e, 0x60, 0x37, 0x88, 0x33, 0x49, 0xef, 0x3b, 0x04, + 0x69, 0xe9, 0x84, 0xb8, 0xd6, 0x3b, 0xa9, 0x32, 0xbc, 0x59, 0x2a, 0x09, + 0x64, 0x3b, 0x7c, 0x67, 0x55, 0x67, 0xb6, 0x76, 0xb2, 0x5e, 0x46, 0xae, + 0xbc, 0x61, 0x26, 0x58, 0x72, 0xce, 0x01, 0xf6, 0x1f, 0x75, 0xe4, 0xaa, + 0x08, 0x6b, 0x82, 0xb2, 0xf5, 0x13, 0x64, 0xc3, 0x06, 0x5c, 0xd8, 0x80, + 0x07, 0x89, 0x33, 0xf6, 0x06, 0xb1, 0x14, 0xda, 0xce, 0xb9, 0x7a, 0xc9, + 0xb5, 0x35, 0x11, 0x5f, 0x81, 0x66, 0xb5, 0xe9, 0xc1, 0xe2, 0x3c, 0x1b, + 0xd6, 0x40, 0x65, 0x34, 0xa0, 0x20, 0x9d, 0xc9, 0x60, 0x63, 0x63, 0x26, + 0x82, 0x18, 0x5e, 0x8e, 0x8c, 0x6b, 0x86, 0xfa, 0x3b, 0x07, 0x3a, 0xa7, + 0x65, 0x71, 0x8c, 0x8e, 0x42, 0xbb, 0xcc, 0xc1, 0x6d, 0x11, 0x37, 0x27, + 0x03, 0x74, 0xc1, 0x2a, 0x07, 0x62, 0x95, 0xb0, 0xb6, 0x10, 0x60, 0x34, + 0x11, 0x48, 0xbd, 0x64, 0xbb, 0x55, 0x53, 0xd2, 0xae, 0x93, 0x32, 0x74, + 0xa0, 0x34, 0xce, 0x5c, 0xd6, 0x2d, 0xe9, 0x61, 0x18, 0x94, 0x78, 0x77, + 0xa9, 0x34, 0xa2, 0x8a, 0xf2, 0x2f, 0x5f, 0x34, 0x10, 0x72, 0x2c, 0x22, + 0xb4, 0x83, 0x9d, 0xc7, 0x2a, 0xc2, 0xdd, 0x82, 0x22, 0xfc, 0xfb, 0x91, + 0x8a, 0x81, 0xab, 0xb2, 0x42, 0x2b, 0x30, 0x31, 0x34, 0x84, 0x29, 0x26, + 0x95, 0x47, 0x8f, 0x52, 0x13, 0x96, 0x11, 0x4a, 0x8f, 0xf0, 0xfb, 0xcc, + 0xfe, 0x94, 0xa0, 0x28, 0x74, 0x3a, 0x7f, 0xc3, 0x4e, 0xb9, 0xdb, 0xad, + 0x28, 0x3c, 0x89, 0x1e, 0x6a, 0x18, 0x76, 0x58, 0x12, 0xff, 0xb6, 0x58, + 0xea, 0x58, 0x84, 0x2b, 0xbb, 0x12, 0x32, 0xea, 0xab, 0xdb, 0x33, 0x2b, + 0xa1, 0x11, 0xbe, 0x36, 0x10, 0x07, 0x45, 0xa8, 0x42, 0xf8, 0xf3, 0xb1, + 0x98, 0x09, 0xc2, 0xe3, 0xc5, 0x54, 0xba, 0x3b, 0x31, 0x20, 0x42, 0xc1, + 0x7f, 0x29, 0x8f, 0xe7, 0xc1, 0x91, 0x0e, 0x67, 0x74, 0xb9, 0x34, 0xc2, + 0x83, 0xe7, 0x68, 0x06, 0x80, 0x8a, 0xca, 0xaa, 0x12, 0x02, 0x86, 0x65, + 0x0f, 0x96, 0x5d, 0xed, 0xbc, 0x6e, 0x00, 0xe1, 0x35, 0x63, 0xb5, 0x54, + 0x7a, 0x34, 0x59, 0x81, 0xfb, 0xb1, 0x77, 0xa6, 0xcd, 0x65, 0x98, 0xb3, + 0x58, 0xf5, 0x6c, 0x3b, 0x27, 0x2a, 0xa2, 0x10, 0x6f, 0xc8, 0x90, 0x1f, + 0xec, 0x06, 0x33, 0x39, 0x1b, 0xa7, 0x8d, 0xd3, 0x44, 0xd1, 0x7a, 0x21, + 0x9c, 0x3a, 0xa1, 0x03, 0xa8, 0xb0, 0x78, 0xbb, 0x34, 0x51, 0xd6, 0x90, + 0xd8, 0x1a, 0xb2, 0x2b, 0x85, 0x82, 0x31, 0x85, 0x06, 0x72, 0xa9, 0x22, + 0x70, 0xd9, 0x52, 0x09, 0xf0, 0x11, 0x23, 0xe6, 0x62, 0x0b, 0x04, 0x3f, + 0x8b, 0x64, 0xab, 0xf9, 0x25, 0x20, 0x87, 0x36, 0x5e, 0x51, 0xb8, 0x78, + 0x9b, 0x76, 0x99, 0x5e, 0xe0, 0x09, 0x8c, 0xb2, 0xaa, 0xee, 0xa6, 0x76, + 0x09, 0x35, 0xa9, 0x39, 0x07, 0x46, 0xea, 0xd0, 0x42, 0x70, 0xb9, 0x1c, + 0xb0, 0x8b, 0x87, 0xed, 0x19, 0x05, 0x33, 0x58, 0x95, 0xd7, 0x66, 0xcb, + 0x8d, 0x22, 0x9a, 0xe9, 0x39, 0xa1, 0x54, 0xa0, 0x68, 0x0c, 0x58, 0x3f, + 0xd2, 0xd0, 0xcd, 0x71, 0x00, 0x9d, 0x8d, 0x26, 0xa9, 0xb6, 0xf9, 0x0c, + 0x5a, 0x46, 0x31, 0x25, 0xbc, 0x63, 0xed, 0x21, 0x65, 0xbb, 0xc1, 0x2a, + 0xfd, 0x58, 0x66, 0x51, 0x81, 0x10, 0xc4, 0xe8, 0x09, 0xce, 0xd8, 0x93, + 0x2f, 0x51, 0x49, 0xee, 0xa5, 0x9f, 0xe8, 0x06, 0x09, 0x19, 0x06, 0xce, + 0x6d, 0x53, 0xaa, 0xd7, 0x04, 0x5a, 0x69, 0xa7, 0x45, 0x40, 0xc7, 0x38, + 0xb4, 0xe9, 0x48, 0xfb, 0x47, 0x00, 0x73, 0xd3, 0x5d, 0xc6, 0xa5, 0x36, + 0x47, 0x5a, 0xc8, 0xa0, 0x37, 0xa1, 0xdb, 0x84, 0x2d, 0x74, 0x2a, 0x2d, + 0x2a, 0x41, 0xc7, 0x08, 0xc9, 0x12, 0x5e, 0xa7, 0x46, 0xd3, 0x09, 0x98, + 0x1b, 0x51, 0x71, 0x9c, 0xb3, 0x1a, 0x7b, 0xa4, 0x12, 0xdd, 0x11, 0xad, + 0x1c, 0x1c, 0x33, 0xc7, 0x81, 0x0f, 0x01, 0x64, 0x98, 0xed, 0xba, 0x69, + 0x38, 0xd0, 0x0b, 0xe7, 0x90, 0x2e, 0x20, 0xac, 0x9e, 0xfa, 0xc7, 0xc8, + 0xe0, 0xa2, 0x2f, 0xa5, 0xea, 0x71, 0x1b, 0x0a, 0xbb, 0xa1, 0x3b, 0xbe, + 0x51, 0x38, 0xa1, 0x12, 0x44, 0xb8, 0x1a, 0xe0, 0x4c, 0x65, 0x98, 0x7b, + 0x7a, 0x54, 0x28, 0x43, 0x09, 0x80, 0xbe, 0x57, 0x57, 0x58, 0x81, 0x26, + 0x0b, 0x17, 0x80, 0xda, 0xf3, 0x08, 0x6c, 0x94, 0xae, 0xdd, 0x02, 0x95, + 0xa7, 0x93, 0x41, 0x45, 0x52, 0xb2, 0x16, 0x83, 0x00, 0xa5, 0xa9, 0xb0, + 0x77, 0xf8, 0x2f, 0xb8, 0xa2, 0xb6, 0x97, 0xc7, 0xca, 0xd0, 0x60, 0x78, + 0x18, 0x48, 0x96, 0xc0, 0xd8, 0x7b, 0xd5, 0xf8, 0xa6, 0xa9, 0x67, 0x26, + 0x6e, 0x05, 0x1a, 0x2e, 0x98, 0x4b, 0x33, 0x5a, 0x88, 0xd5, 0x92, 0x85, + 0xd0, 0x67, 0x75, 0xb7, 0xf2, 0x5c, 0x48, 0xf4, 0x31, 0xa7, 0x35, 0xbc, + 0x98, 0x37, 0xaf, 0x83, 0x83, 0x36, 0x5d, 0x8c, 0xc0, 0x60, 0x52, 0x41, + 0x6b, 0x82, 0x6b, 0x3a, 0x88, 0x83, 0x14, 0x69, 0x6b, 0x7c, 0xf6, 0x7f, + 0x20, 0xc2, 0x34, 0x5c, 0xf1, 0x11, 0x3a, 0x66, 0x6a, 0x1a, 0x63, 0xb8, + 0x78, 0x61, 0x0d, 0x24, 0x74, 0x4f, 0xfd, 0x9b, 0x8f, 0x8a, 0x88, 0x9f, + 0x3e, 0x06, 0x5e, 0xce, 0x25, 0x82, 0x7e, 0x13, 0x7e, 0x33, 0xe5, 0x69, + 0x56, 0xfc, 0x60, 0xcc, 0x24, 0x23, 0xcc, 0x6a, 0xb8, 0xf2, 0x72, 0xaf, + 0x00, 0x17, 0x9d, 0x98, 0xe0, 0x14, 0xbe, 0x1a, 0x2d, 0x6d, 0xb2, 0x02, + 0x39, 0x9b, 0x27, 0x2c, 0xc3, 0x3a, 0xfb, 0x2b, 0x0f, 0x1f, 0x50, 0x26, + 0x36, 0xcb, 0x1c, 0xb7, 0x42, 0x79, 0xd6, 0x68, 0x84, 0xf0, 0x16, 0x9e, + 0x2f, 0xe3, 0x34, 0xf2, 0x68, 0xab, 0xdc, 0xa3, 0x72, 0xb3, 0x60, 0x84, + 0xa7, 0x84, 0xb3, 0x4a, 0xd0, 0x99, 0x8b, 0xd7, 0x42, 0x26, 0x3b, 0x21, + 0x19, 0xc6, 0x55, 0x27, 0xf6, 0x1c, 0x11, 0x81, 0x67, 0x24, 0xd5, 0x77, + 0xb1, 0xe7, 0x7a, 0x91, 0x1a, 0x5d, 0x9c, 0x00, 0x5f, 0x10, 0x10, 0x6a, + 0x7e, 0x8c, 0x62, 0x92, 0x71, 0x6e, 0x27, 0xb5, 0x5e, 0xda, 0x33, 0x9a, + 0x7a, 0x88, 0xc6, 0x2a, 0xe1, 0x66, 0xfc, 0x32, 0x4b, 0xcb, 0x85, 0x29, + 0xc4, 0x11, 0x59, 0x69, 0xe1, 0xc2, 0x82, 0x37, 0x97, 0x7d, 0x70, 0xc9, + 0x50, 0xb3, 0x1c, 0x50, 0xd0, 0x36, 0xb0, 0xb5, 0x58, 0x42, 0x73, 0xcc, + 0xf9, 0xb8, 0x72, 0x50, 0x66, 0x63, 0x65, 0x02, 0x9f, 0x32, 0x87, 0x42, + 0x9c, 0x69, 0x94, 0x3e, 0x48, 0x8c, 0x05, 0x32, 0x40, 0xb2, 0x70, 0x7e, + 0xf6, 0xca, 0x58, 0xd8, 0xc8, 0x40, 0x76, 0x62, 0x50, 0x85, 0x3a, 0x4b, + 0xdb, 0x93, 0x8a, 0x25, 0x8b, 0x00, 0x4f, 0x07, 0x05, 0xf0, 0xda, 0x8d, + 0x2d, 0x97, 0xc7, 0x53, 0x88, 0x43, 0x19, 0xd7, 0xa2, 0xcb, 0xbc, 0xb3, + 0x57, 0xdb, 0xcc, 0x11, 0x34, 0x03, 0x9d, 0x20, 0x5b, 0xfd, 0xa3, 0x30, + 0x6f, 0x61, 0xc4, 0xe2, 0x8c, 0x12, 0x71, 0x11, 0x23, 0x53, 0xb8, 0x27, + 0xa2, 0xa9, 0x89, 0x96, 0x13, 0x5d, 0xbd, 0x76, 0xb0, 0x4d, 0x45, 0x45, + 0xdd, 0xd4, 0xb1, 0x11, 0x18, 0x4b, 0x2a, 0x78, 0x7b, 0x32, 0x6a, 0x3c, + 0x04, 0x66, 0x15, 0x91, 0x14, 0xa9, 0xbf, 0x6c, 0x80, 0x17, 0x80, 0xba, + 0xab, 0xfb, 0xb5, 0x78, 0x09, 0x6b, 0x73, 0x24, 0x5b, 0x3e, 0xaa, 0x17, + 0x16, 0x15, 0x30, 0xda, 0x77, 0x73, 0x06, 0xba, 0x61, 0x4a, 0xec, 0x5d, + 0x60, 0x37, 0x62, 0x88, 0xac, 0x7f, 0x0e, 0x66, 0xa4, 0x98, 0x9b, 0x93, + 0x92, 0x0c, 0x37, 0xf1, 0x8a, 0x2f, 0x91, 0xf0, 0x45, 0xda, 0x13, 0xa2, + 0xe7, 0x77, 0x7f, 0xb3, 0x92, 0x2a, 0x48, 0xe9, 0x21, 0x19, 0x62, 0xa4, + 0xe9, 0xa4, 0x7b, 0xfe, 0x46, 0x7b, 0x70, 0x70, 0x91, 0xaf, 0x86, 0xbf, + 0x8c, 0xeb, 0x11, 0x1e, 0xfc, 0x97, 0x45, 0xba, 0xa2, 0x23, 0x00, 0xc4, + 0x47, 0xc2, 0x81, 0x81, 0x72, 0x1a, 0xc8, 0xa7, 0xb5, 0x1c, 0x94, 0x70, + 0xa8, 0xf9, 0x99, 0xb7, 0xe2, 0x26, 0x8a, 0xdc, 0x32, 0x7c, 0x16, 0x0a, + 0x3f, 0x42, 0xcc, 0xa0, 0xc9, 0x09, 0x4d, 0xfb, 0x65, 0xbb, 0xaa, 0x5c, + 0xb0, 0x15, 0x3f, 0x85, 0x22, 0x5e, 0x5c, 0x83, 0xae, 0xac, 0x55, 0x93, + 0x2f, 0x19, 0xb6, 0xa9, 0xe0, 0x77, 0xe2, 0xbc, 0xa1, 0xe0, 0x22, 0x1e, + 0xf4, 0x19, 0x1d, 0xd5, 0x39, 0x40, 0x06, 0x37, 0x99, 0xbe, 0xe5, 0xb0, + 0xa5, 0x33, 0x6b, 0x6d, 0x83, 0x24, 0xa1, 0xa6, 0xac, 0x5a, 0x86, 0x50, + 0x71, 0xca, 0xc3, 0x3c, 0x69, 0x30, 0x97, 0x4c, 0x0a, 0x54, 0x67, 0x5b, + 0xe7, 0x39, 0x2b, 0x82, 0x27, 0xc0, 0x9e, 0xb5, 0x97, 0x06, 0x44, 0x26, + 0x18, 0xf6, 0x8f, 0xcf, 0x59, 0x77, 0xd1, 0x9c, 0x06, 0xb5, 0xec, 0x6a, + 0xb8, 0xd5, 0xc3, 0xf5, 0x71, 0x2b, 0x96, 0xf2, 0x0e, 0xd1, 0x6a, 0x1e, + 0x17, 0x0b, 0x40, 0x21, 0x9b, 0x00, 0x3a, 0x5a, 0x45, 0x3e, 0x5b, 0x58, + 0xab, 0x92, 0xa7, 0x86, 0xfc, 0xaf, 0xae, 0x85, 0x5d, 0x3f, 0xa6, 0x67, + 0x24, 0x12, 0x5d, 0x06, 0x92, 0x51, 0xcd, 0x04, 0x27, 0x7c, 0xb1, 0xb2, + 0x06, 0x57, 0x28, 0xe7, 0xb4, 0x43, 0x7a, 0x99, 0x54, 0xcf, 0x71, 0x16, + 0x16, 0xc2, 0x51, 0x56, 0x35, 0x31, 0x94, 0xd3, 0x36, 0xf7, 0x50, 0x80, + 0xbd, 0x70, 0x6a, 0xdf, 0xfc, 0x51, 0xd1, 0xf7, 0x16, 0x36, 0x62, 0xb0, + 0xf8, 0x4b, 0x62, 0x52, 0x26, 0x24, 0x9d, 0x15, 0xcf, 0x7c, 0x33, 0x20, + 0x6f, 0x52, 0x49, 0xe7, 0x32, 0x55, 0x48, 0x14, 0x94, 0x21, 0x62, 0x08, + 0x52, 0xf2, 0xbe, 0xce, 0xc6, 0xba, 0x28, 0x47, 0x69, 0x35, 0xbb, 0x0f, + 0x27, 0xe1, 0x81, 0xe9, 0x50, 0x8b, 0x98, 0x38, 0xa5, 0x1d, 0xc6, 0x8e, + 0xbc, 0x70, 0x65, 0x3e, 0xd8, 0xb5, 0xe2, 0xd6, 0x8d, 0xd9, 0x89, 0x5f, + 0x52, 0x23, 0xa4, 0x18, 0xc4, 0x99, 0x51, 0xb5, 0xcc, 0xca, 0x84, 0x94, + 0xd8, 0x6a, 0xb2, 0xe6, 0xd7, 0x73, 0xfb, 0xb5, 0x58, 0x84, 0xe2, 0xac, + 0x16, 0xdc, 0x94, 0x18, 0x10, 0x0a, 0x77, 0x45, 0x48, 0xe4, 0xa9, 0x5a, + 0xf4, 0x26, 0x57, 0x72, 0xe9, 0xa3, 0xa0, 0x82, 0xce, 0xd7, 0x8a, 0xb8, + 0x1c, 0xf1, 0x5d, 0xcc, 0x1c, 0x24, 0xf7, 0xd4, 0x88, 0x9c, 0xc6, 0x06, + 0xa1, 0x37, 0xb2, 0x9c, 0x31, 0xa1, 0xbd, 0xac, 0x4f, 0xb0, 0x50, 0xac, + 0xb1, 0xd2, 0x8d, 0x9c, 0x07, 0xb3, 0xd9, 0x97, 0x3d, 0xb9, 0xa7, 0x63, + 0x04, 0x4a, 0x6f, 0x13, 0xaf, 0x75, 0xa4, 0x6d, 0xc7, 0xd4, 0x80, 0x38, + 0x09, 0x40, 0xf9, 0xd6, 0x88, 0xde, 0x68, 0x4b, 0xdf, 0x86, 0x7c, 0x21, + 0xef, 0x4b, 0xdb, 0xf5, 0x09, 0x08, 0xdb, 0x04, 0x62, 0x0c, 0x3b, 0xa3, + 0x11, 0x2d, 0x18, 0xc0, 0xb3, 0x47, 0xc5, 0xa0, 0xcf, 0xe5, 0x6e, 0x72, + 0x06, 0x93, 0x64, 0x56, 0x41, 0x00, 0x96, 0x74, 0xe2, 0xe2, 0xf6, 0xe5, + 0xda, 0x04, 0x47, 0xa7, 0x98, 0x02, 0x8e, 0x81, 0x57, 0xdb, 0xaa, 0xfd, + 0x5b, 0x93, 0x70, 0x22, 0x7c, 0x9d, 0x87, 0x68, 0x18, 0xa9, 0xa4, 0xf7, + 0xd2, 0x3d, 0x95, 0x67, 0xbf, 0x41, 0x3f, 0x33, 0x83, 0xf8, 0xf1, 0xab}, + // ciphertext + {0xf5, 0x8d, 0x54, 0x2a, 0x5d, 0x03, 0xdd, 0x8d, 0x62, 0x2d, 0x2d, 0x61, + 0xe9, 0xcc, 0x75, 0x98, 0x73, 0x47, 0x9d, 0xb6, 0x73, 0x59, 0xda, 0xb4, + 0x71, 0xde, 0x0c, 0x69, 0x45, 0x50, 0x5e, 0xf8, 0xef, 0x61, 0x73, 0x4e, + 0x84, 0xef, 0x78, 0xd5, 0xa3, 0x6e, 0xea, 0x0f, 0xe8, 0xe6, 0x00, 0x6b, + 0x07, 0x41, 0xc4, 0x15, 0xa2, 0x25, 0x83, 0x4c, 0x64, 0x4a, 0xfb, 0x29, + 0xe4, 0xcb, 0xf2, 0x07, 0xc2, 0x4f, 0x77, 0x60, 0x02, 0x4b, 0xa2, 0x7f, + 0x1b, 0xfa, 0xb5, 0xa9, 0xec, 0x71, 0x2c, 0x3a, 0x81, 0xfc, 0x2f, 0x23, + 0x27, 0x36, 0xba, 0x2c, 0xa6, 0x9a, 0xa2, 0xf9, 0xca, 0x7a, 0xc1, 0x7e, + 0xeb, 0x89, 0xa1, 0x93, 0x49, 0x38, 0x00, 0x95, 0x1c, 0x71, 0x81, 0x2e, + 0x4e, 0x21, 0x34, 0x68, 0x0b, 0x3b, 0xe6, 0xff, 0xce, 0x95, 0x08, 0xc7, + 0x91, 0xeb, 0x19, 0x49, 0x4d, 0x86, 0xf9, 0x19, 0x29, 0x90, 0xd0, 0x74, + 0x5a, 0xef, 0xed, 0x3a, 0x83, 0xb2, 0x4a, 0x6e, 0x7c, 0x8c, 0x2b, 0xa6, + 0xcb, 0x53, 0x6d, 0x27, 0x10, 0xc4, 0x9d, 0x2c, 0x31, 0x22, 0xd0, 0x90, + 0xb9, 0x5e, 0x57, 0xc8, 0xe1, 0xde, 0xcd, 0xba, 0xd5, 0x4b, 0xf7, 0xcc, + 0x1e, 0x76, 0xe7, 0x94, 0x48, 0xeb, 0xaa, 0xd7, 0x72, 0x84, 0xe3, 0x5f, + 0xa0, 0x35, 0x67, 0xfc, 0x69, 0x2d, 0x2d, 0x8e, 0x67, 0x4d, 0x7d, 0x80, + 0x58, 0x99, 0xbd, 0x00, 0xc3, 0x56, 0x15, 0xfa, 0xc5, 0x22, 0x98, 0xba, + 0xe7, 0xd8, 0x7c, 0x7c, 0xaf, 0xa3, 0x73, 0x4e, 0x95, 0xfc, 0x8c, 0x7e, + 0xab, 0xd0, 0xc3, 0x22, 0x4b, 0xbd, 0xf0, 0xf3, 0x2b, 0x61, 0x49, 0x1c, + 0x1c, 0x06, 0x0d, 0xcd, 0xd2, 0x49, 0x25, 0x16, 0xcc, 0x44, 0x19, 0xda, + 0xd6, 0xaf, 0xef, 0x3b, 0x96, 0xa1, 0x50, 0x4a, 0x9f, 0x0c, 0xe0, 0x9f, + 0x17, 0x74, 0xe6, 0x07, 0xf3, 0xe9, 0xac, 0x44, 0x84, 0xf4, 0x1b, 0x7a, + 0xf8, 0xbe, 0x40, 0x2e, 0xfb, 0x12, 0x68, 0x0a, 0xe9, 0x8b, 0x71, 0x55, + 0x75, 0x62, 0xa8, 0xc1, 0xd3, 0x48, 0x6c, 0x59, 0x98, 0x51, 0x5d, 0x9b, + 0xf8, 0x7c, 0xd1, 0x73, 0xf5, 0xa7, 0x9b, 0xa9, 0x0e, 0xee, 0xdd, 0xff, + 0x7e, 0x0f, 0x32, 0x3d, 0x89, 0x20, 0xc4, 0x1a, 0x80, 0x32, 0x0c, 0xcf, + 0xb2, 0x15, 0x7a, 0x0e, 0x91, 0x48, 0xfa, 0xfd, 0xa7, 0xfd, 0x68, 0x82, + 0x8e, 0x5b, 0x61, 0x2b, 0x37, 0x33, 0x42, 0x87, 0x2f, 0x3f, 0xdb, 0x0f, + 0x77, 0xf2, 0x33, 0x9d, 0x96, 0xbb, 0x49, 0xd2, 0xf5, 0xe1, 0x72, 0xe0, + 0x52, 0x3c, 0x04, 0xde, 0x0e, 0x3c, 0x80, 0xc8, 0x9f, 0x56, 0x40, 0xb8, + 0x4f, 0xd8, 0xb3, 0x72, 0xaf, 0xb3, 0x31, 0x91, 0x50, 0xd7, 0x05, 0x7a, + 0x92, 0x93, 0xea, 0x36, 0xa5, 0x32, 0x75, 0xfc, 0x77, 0x8b, 0xe7, 0x36, + 0xf4, 0x68, 0xab, 0x4f, 0xdd, 0xce, 0xf2, 0xcb, 0x40, 0xd4, 0x2a, 0xb8, + 0xc8, 0x34, 0xb5, 0xdc, 0x08, 0xc1, 0xe3, 0xb9, 0xe7, 0xcf, 0xea, 0x61, + 0x37, 0x3a, 0x46, 0x59, 0x5f, 0xd2, 0xe3, 0xdc, 0xc1, 0x64, 0xc7, 0xb5, + 0x21, 0x2f, 0x98, 0xd3, 0xaa, 0xd9, 0xfe, 0x7e, 0x08, 0x58, 0x5e, 0x01, + 0x11, 0x26, 0x5e, 0xd7, 0x1f, 0x94, 0x72, 0x5e, 0x3e, 0x4d, 0x98, 0x73, + 0x48, 0x7c, 0x40, 0x7c, 0x74, 0xb0, 0x3e, 0xe2, 0x54, 0xec, 0x8d, 0x9b, + 0x04, 0x1d, 0x81, 0x7e, 0x6e, 0x9d, 0x08, 0x27, 0x62, 0x64, 0x38, 0x82, + 0x25, 0x95, 0xff, 0x14, 0x50, 0x3d, 0x02, 0x57, 0xf0, 0x4d, 0x99, 0x35, + 0x2c, 0x5b, 0xb0, 0x9d, 0xec, 0x06, 0x96, 0x80, 0x42, 0x60, 0x51, 0x66, + 0x84, 0x30, 0x8c, 0x1b, 0x7b, 0x60, 0xd8, 0x6a, 0x27, 0xf7, 0x24, 0xd1, + 0x00, 0x80, 0xfa, 0x4a, 0x2b, 0x70, 0xc9, 0x00, 0x90, 0xc9, 0xd3, 0xdb, + 0xbb, 0x2d, 0x68, 0x1e, 0xa2, 0xed, 0xf3, 0x5a, 0x73, 0xae, 0xb3, 0xa7, + 0x7e, 0x43, 0x38, 0xc5, 0x63, 0x1e, 0x08, 0x42, 0xac, 0x53, 0x13, 0x73, + 0x79, 0xe8, 0xa6, 0x53, 0x29, 0x1c, 0xde, 0x9c, 0xc3, 0x42, 0x1b, 0x24, + 0x17, 0xa0, 0xc5, 0x9a, 0x1a, 0x3e, 0x4a, 0xf6, 0x0f, 0x45, 0x5f, 0xb0, + 0x1a, 0x65, 0xe9, 0xbc, 0xd4, 0x15, 0xb7, 0x7d, 0x64, 0x86, 0x49, 0x5d, + 0x45, 0x3b, 0xa9, 0xed, 0x0c, 0x79, 0x23, 0x73, 0x13, 0xd8, 0x90, 0x19, + 0xfa, 0xa1, 0xbf, 0x89, 0xef, 0x84, 0x9a, 0x75, 0x23, 0x89, 0xcc, 0x2a, + 0x8d, 0x1e, 0x67, 0x7d, 0xb6, 0x8a, 0x4e, 0x4c, 0xd8, 0x1a, 0x2c, 0xb9, + 0xf0, 0x9e, 0x05, 0x31, 0xc1, 0x1b, 0xb6, 0xfc, 0xf0, 0xfa, 0xd6, 0x75, + 0x07, 0xa8, 0x6b, 0x17, 0x4f, 0x45, 0xc0, 0x33, 0xb1, 0x98, 0x8c, 0x6b, + 0x43, 0x3e, 0x9e, 0x66, 0xca, 0x7c, 0xa6, 0x9a, 0x39, 0x44, 0x6f, 0xfe, + 0x2b, 0x21, 0x9c, 0x9a, 0x9b, 0x3c, 0xb8, 0x08, 0xc0, 0x67, 0xe7, 0x81, + 0x76, 0x59, 0x91, 0x66, 0x5f, 0xb4, 0x0b, 0x57, 0x80, 0xe3, 0x07, 0xb3, + 0x9c, 0x37, 0x0e, 0xf0, 0x1c, 0x60, 0x00, 0x66, 0x08, 0x27, 0xd5, 0xca, + 0xd3, 0xe1, 0xbb, 0xd2, 0x8b, 0xce, 0x05, 0xac, 0x04, 0x43, 0xa2, 0x80, + 0x6e, 0xfb, 0x93, 0xcc, 0xa9, 0xc7, 0xed, 0x3c, 0x18, 0xfa, 0x6d, 0x58, + 0xc9, 0x9c, 0x5e, 0x6b, 0x6a, 0xf7, 0x85, 0x63, 0x63, 0x84, 0x64, 0x3b, + 0xd2, 0xe2, 0x4f, 0x6a, 0x70, 0x50, 0x12, 0xad, 0x7a, 0x4d, 0x2e, 0x6b, + 0x94, 0xcc, 0x99, 0x08, 0xc0, 0x86, 0xf1, 0x35, 0x15, 0xc4, 0x2e, 0xfc, + 0x4c, 0xde, 0xfe, 0xb2, 0x64, 0x5d, 0x10, 0x6a, 0xe3, 0x85, 0xd4, 0x01, + 0x4b, 0x98, 0x3d, 0xf6, 0xa0, 0x99, 0x43, 0x89, 0x54, 0x58, 0x69, 0x28, + 0xd4, 0x64, 0x76, 0xa2, 0xe7, 0x0e, 0x36, 0x14, 0x7b, 0x8f, 0x57, 0xdc, + 0x49, 0x8d, 0xc5, 0x64, 0xc6, 0x2c, 0xab, 0x6c, 0x00, 0x63, 0x88, 0x95, + 0xd8, 0x64, 0x43, 0x8e, 0x8c, 0x3f, 0xb0, 0x75, 0x44, 0x9a, 0x76, 0x36, + 0xba, 0xd2, 0x0a, 0x0c, 0x8b, 0xd4, 0x33, 0xba, 0x1c, 0x6b, 0x4e, 0x3e, + 0x8e, 0x42, 0xab, 0xd6, 0xaf, 0xd2, 0x3c, 0xd6, 0xd7, 0x6a, 0x4d, 0xee, + 0xbf, 0x89, 0x8f, 0x69, 0x90, 0x94, 0xf1, 0xe2, 0xec, 0x5e, 0x85, 0x71, + 0x42, 0xc0, 0xec, 0x0f, 0xe7, 0x24, 0xf0, 0x40, 0xa0, 0x2c, 0xf1, 0x91, + 0xd2, 0xdd, 0xc0, 0xa4, 0x88, 0x0d, 0x89, 0xa0, 0xec, 0xaf, 0xf0, 0x0b, + 0xfd, 0x2e, 0x26, 0x58, 0x81, 0x80, 0xec, 0x93, 0xb6, 0xe3, 0xac, 0xe0, + 0xd4, 0x55, 0x73, 0xcb, 0xe0, 0xb8, 0x36, 0xa9, 0x54, 0x7d, 0x12, 0xf0, + 0x0b, 0xe7, 0x7b, 0x05, 0x9b, 0x0f, 0x73, 0xff, 0x36, 0x82, 0x70, 0x33, + 0x79, 0x5f, 0x87, 0x7c, 0xd3, 0x47, 0xab, 0xee, 0x72, 0x22, 0x69, 0x74, + 0x40, 0xa8, 0xee, 0x6f, 0x9f, 0x9d, 0x47, 0x47, 0xc7, 0xdf, 0x26, 0xc9, + 0x2c, 0xad, 0x12, 0x74, 0x7a, 0xc6, 0x44, 0x20, 0x66, 0xcb, 0xee, 0xe4, + 0xb0, 0x72, 0xf5, 0xe1, 0x80, 0x97, 0x24, 0xb4, 0x62, 0xbd, 0xd8, 0x63, + 0x09, 0xa0, 0x8c, 0x96, 0xe2, 0x3d, 0x8b, 0xdc, 0x70, 0x06, 0x12, 0x9c, + 0x41, 0xcd, 0x15, 0x24, 0xe9, 0xdb, 0x13, 0x47, 0x5f, 0x8d, 0xbb, 0x58, + 0xb9, 0xf8, 0xee, 0x72, 0x2f, 0xfe, 0xfe, 0x06, 0x28, 0xaf, 0xd7, 0x11, + 0xa1, 0xa6, 0x6c, 0xc0, 0x3f, 0x7a, 0x1d, 0x26, 0xa3, 0x21, 0x09, 0x31, + 0x79, 0x87, 0x7a, 0x1e, 0x9c, 0xb2, 0x23, 0xcd, 0x68, 0x8f, 0x65, 0x77, + 0x2c, 0x1f, 0x55, 0x0c, 0x86, 0xfd, 0x90, 0x25, 0xb5, 0x8f, 0x6a, 0x1d, + 0xc9, 0xce, 0xc6, 0x58, 0x16, 0xeb, 0xfb, 0x2c, 0xb4, 0x05, 0x52, 0x6f, + 0x79, 0x7a, 0x50, 0x0b, 0x52, 0xea, 0x73, 0xaf, 0xe5, 0x92, 0xe7, 0xa6, + 0x3b, 0xe7, 0x9d, 0x6e, 0x2a, 0xbf, 0xe0, 0x3d, 0x52, 0x81, 0x54, 0xc0, + 0xe8, 0xd2, 0x77, 0xc8, 0x44, 0xef, 0xa3, 0x98, 0xb3, 0x46, 0xd9, 0x6f, + 0x41, 0x37, 0x6f, 0xd9, 0x69, 0x35, 0x61, 0x14, 0x85, 0x4c, 0x19, 0x97, + 0xd5, 0x31, 0x89, 0x40, 0x4f, 0x49, 0x91, 0x65}, + // secret + {0x44, 0xcc, 0x40, 0x5e, 0x3b, 0xb0, 0xa9, 0xf5, 0x1a, 0x18, 0x0a, + 0x86, 0x21, 0x3d, 0x03, 0x6e, 0xd5, 0x8a, 0xa0, 0xd2, 0x26, 0x80, + 0x4e, 0x71, 0x7b, 0x9c, 0x2a, 0x47, 0x5d, 0xe5, 0x8e, 0x75}, + true}, + // tcID: 91 + {91, + params_ml_kem768_test_mode, + // privateKey + {0x46, 0x81, 0x9a, 0xfc, 0x7c, 0x03, 0x2a, 0x80, 0xbb, 0x83, 0x03, 0x61, + 0xf0, 0x54, 0x7c, 0x20, 0xcb, 0xa4, 0xb4, 0x40, 0xab, 0xde, 0xc7, 0x23, + 0xc0, 0x03, 0xb2, 0x69, 0xb2, 0x2b, 0x6e, 0xd8, 0x4f, 0x15, 0x9a, 0x2d, + 0x69, 0x1a, 0xc0, 0x14, 0xe3, 0xcb, 0xbd, 0xf4, 0x1f, 0x6e, 0x6b, 0x57, + 0x03, 0x1a, 0xbd, 0xa1, 0xc6, 0x07, 0x5d, 0x78, 0x6b, 0x95, 0x7a, 0x95, + 0xeb, 0xc6, 0x5e, 0x6f, 0x6b, 0x12, 0x57, 0x63, 0x71, 0x86, 0x70, 0x3e, + 0x5b, 0xca, 0x5f, 0x80, 0x56, 0x06, 0x13, 0xfc, 0x31, 0x92, 0xa4, 0x02, + 0x47, 0xb6, 0x2c, 0x1d, 0x8c, 0x3a, 0x15, 0xf0, 0x4d, 0x36, 0xc1, 0x25, + 0xb0, 0xd7, 0x4e, 0xc6, 0xb0, 0x87, 0xa1, 0x40, 0x1a, 0x69, 0xb6, 0xa0, + 0x07, 0x85, 0x72, 0x9c, 0x58, 0x2c, 0x11, 0x94, 0x19, 0x57, 0x92, 0xc1, + 0x64, 0xa6, 0x5e, 0xcb, 0xa8, 0x07, 0x7b, 0x78, 0x47, 0xda, 0x02, 0x2b, + 0x1c, 0xa1, 0x05, 0xd0, 0x7b, 0xb6, 0x8a, 0x58, 0x84, 0x6d, 0xf8, 0x01, + 0x0c, 0xea, 0xc9, 0x60, 0xa7, 0x83, 0xdc, 0x48, 0xa4, 0x6b, 0xe3, 0x33, + 0x94, 0x40, 0x2a, 0x1d, 0xb5, 0x89, 0xc5, 0x0a, 0x04, 0x45, 0x75, 0x96, + 0x32, 0xa2, 0x24, 0x1a, 0xf9, 0x05, 0xff, 0xb0, 0x59, 0xdc, 0x0c, 0x8d, + 0x9b, 0x58, 0x9a, 0x1e, 0xd3, 0x0a, 0xba, 0x26, 0x5b, 0xe5, 0xd4, 0x12, + 0xfb, 0xca, 0x0c, 0xaa, 0x52, 0xc6, 0x62, 0xa0, 0x09, 0xd2, 0x1a, 0x9f, + 0x00, 0xc7, 0xb4, 0xac, 0xfb, 0x09, 0x17, 0x51, 0x07, 0x08, 0x44, 0x56, + 0xfb, 0x92, 0xa7, 0x4e, 0x90, 0x31, 0x76, 0x77, 0x7c, 0xba, 0xf0, 0x5a, + 0x70, 0x83, 0x34, 0x48, 0x23, 0xac, 0x6a, 0x84, 0x77, 0x63, 0x6c, 0x4e, + 0x6a, 0xd5, 0x73, 0x91, 0x89, 0xa2, 0xc1, 0xa1, 0x1a, 0x21, 0xc9, 0xb4, + 0xd7, 0x0b, 0x6d, 0x40, 0xc3, 0x7b, 0xc7, 0xb6, 0x93, 0x7a, 0x24, 0xc2, + 0x0d, 0xa4, 0x6d, 0x64, 0x87, 0x7f, 0x16, 0x7c, 0xbc, 0x9f, 0xf5, 0xc0, + 0xb8, 0x48, 0xb5, 0x22, 0x5b, 0x7f, 0x24, 0xd5, 0xa7, 0x6b, 0x0a, 0x66, + 0xfc, 0x57, 0xa3, 0x94, 0x83, 0x23, 0x91, 0xd8, 0xba, 0xe9, 0xc4, 0xcd, + 0xb5, 0x93, 0x0c, 0xeb, 0x66, 0xb0, 0x3f, 0x52, 0x61, 0x3e, 0xf4, 0x0c, + 0xed, 0xd8, 0x10, 0xcf, 0x2c, 0x45, 0xd0, 0xa6, 0x21, 0x44, 0x22, 0x74, + 0x96, 0x87, 0x5d, 0xc6, 0x82, 0xcf, 0xad, 0x4a, 0x4e, 0x82, 0xc4, 0x2c, + 0x73, 0xc6, 0xb8, 0x30, 0x76, 0x2d, 0x06, 0x8b, 0x96, 0xb2, 0xc8, 0x1b, + 0xf1, 0x25, 0x0f, 0x9f, 0x47, 0x7b, 0x9a, 0x0a, 0x31, 0x8e, 0x13, 0x4d, + 0x22, 0xe0, 0x4a, 0xe7, 0x9b, 0x4b, 0x46, 0x79, 0x8c, 0x37, 0xd4, 0x7e, + 0x7b, 0x63, 0xb2, 0xd2, 0xf5, 0x8e, 0x95, 0x84, 0x1a, 0x9b, 0x67, 0x33, + 0x72, 0xac, 0x61, 0x90, 0x51, 0xb2, 0xbf, 0xac, 0x4a, 0x65, 0x4c, 0x07, + 0xe7, 0xc7, 0x14, 0xc8, 0x82, 0x07, 0x24, 0xac, 0x29, 0x94, 0xec, 0xa3, + 0xc1, 0x33, 0x91, 0x52, 0x15, 0x52, 0x93, 0x51, 0xa6, 0x6b, 0x29, 0xcd, + 0x7a, 0xa9, 0xab, 0xb3, 0x19, 0x86, 0xb1, 0x67, 0x7d, 0x3d, 0xe4, 0x90, + 0x07, 0xc3, 0xc3, 0xc3, 0xf9, 0xa1, 0xc4, 0xe5, 0x2a, 0xab, 0x10, 0x23, + 0xea, 0xe3, 0x83, 0x96, 0xc3, 0x01, 0xf1, 0xf5, 0x7c, 0xf6, 0x53, 0xc0, + 0x65, 0xba, 0x74, 0x39, 0xf5, 0x97, 0xd3, 0xd6, 0xbb, 0xe4, 0x39, 0x59, + 0x82, 0xe3, 0x69, 0xdc, 0x61, 0x80, 0x52, 0xb5, 0x5b, 0x19, 0x45, 0x33, + 0x52, 0xfb, 0x60, 0x3a, 0x07, 0xa2, 0x41, 0x64, 0xb6, 0x3f, 0xc7, 0x97, + 0x01, 0xa2, 0x7b, 0xcd, 0x22, 0xc8, 0x13, 0xd5, 0x8e, 0xf8, 0x67, 0x97, + 0x43, 0x9b, 0x0e, 0xe4, 0xcc, 0x79, 0xc9, 0x45, 0x2b, 0xf1, 0xd2, 0xb7, + 0x1e, 0x10, 0x1f, 0xa2, 0xb0, 0xbb, 0x39, 0x2a, 0x66, 0x1c, 0xf6, 0xb6, + 0x8b, 0x4b, 0xa0, 0xda, 0x3a, 0x52, 0xc6, 0x31, 0x1e, 0x70, 0x64, 0x62, + 0x84, 0x52, 0x55, 0xae, 0xb5, 0x6c, 0x2e, 0x32, 0x4c, 0xad, 0xba, 0x74, + 0xaf, 0x47, 0xcf, 0x7a, 0x0c, 0x5f, 0x23, 0x73, 0x5a, 0x51, 0x85, 0xaa, + 0xdb, 0xca, 0x26, 0xc1, 0x63, 0x82, 0x75, 0xd0, 0x45, 0x77, 0x81, 0x44, + 0xc6, 0xf7, 0x1c, 0x5f, 0xd5, 0x9b, 0x24, 0x7a, 0xcc, 0x0a, 0x4b, 0x22, + 0x04, 0x04, 0x68, 0xda, 0x16, 0x2e, 0xe6, 0xb1, 0x30, 0x05, 0x59, 0x4b, + 0x07, 0x5c, 0x82, 0x3f, 0xfb, 0xbe, 0xbf, 0x1b, 0x1e, 0xa7, 0x2a, 0x86, + 0x6b, 0x87, 0x65, 0xc9, 0x80, 0x6a, 0x37, 0x42, 0x50, 0x80, 0x0a, 0x50, + 0xd6, 0xea, 0x4f, 0xdf, 0x42, 0x1f, 0x87, 0x28, 0x62, 0x05, 0xb8, 0xc3, + 0x46, 0xd2, 0x34, 0x8a, 0x2a, 0x22, 0x29, 0xb2, 0x34, 0xb7, 0x69, 0x7e, + 0x18, 0xc5, 0xbf, 0xa6, 0xa9, 0x68, 0xe0, 0xba, 0x4f, 0xc6, 0x55, 0x37, + 0x52, 0x57, 0x1d, 0x88, 0x0c, 0x6c, 0x62, 0x4b, 0xa3, 0x68, 0x74, 0x80, + 0xcd, 0xe2, 0x0c, 0x01, 0x84, 0x75, 0x72, 0x2c, 0x8e, 0x09, 0xe3, 0x3a, + 0xea, 0x03, 0x20, 0x70, 0x09, 0xcf, 0x3a, 0xe6, 0x2a, 0xc2, 0x16, 0xa8, + 0x4b, 0xc3, 0xaf, 0xdd, 0xa8, 0x13, 0xc7, 0xe3, 0x71, 0x36, 0x80, 0x16, + 0xd8, 0x62, 0x81, 0x9a, 0xc6, 0x8e, 0x5f, 0xa8, 0xaa, 0x39, 0x4c, 0x3e, + 0x3b, 0x94, 0xcb, 0x9a, 0x9a, 0xab, 0xab, 0xac, 0xbf, 0xa4, 0x5b, 0x2f, + 0x39, 0xf6, 0x9c, 0xaf, 0xf3, 0x54, 0xf2, 0x87, 0xa0, 0xb6, 0xec, 0x15, + 0x44, 0x9b, 0x82, 0xce, 0xe7, 0xa1, 0xa9, 0x04, 0x1d, 0x9d, 0x53, 0xa8, + 0x79, 0x53, 0xa1, 0xd4, 0x52, 0x17, 0x18, 0x4b, 0x22, 0x38, 0x71, 0x02, + 0x91, 0x77, 0x7b, 0xe0, 0xc7, 0x13, 0xd6, 0xf2, 0x00, 0xc6, 0x7b, 0x16, + 0x58, 0xd8, 0x48, 0x1f, 0xd8, 0x8e, 0x8e, 0x33, 0xbd, 0xcf, 0xea, 0xa8, + 0x8c, 0x0b, 0xbe, 0x53, 0x12, 0x51, 0x6c, 0x90, 0x42, 0x3d, 0xfa, 0x92, + 0xe8, 0xaa, 0x92, 0x73, 0x30, 0xa4, 0xa1, 0x0b, 0x88, 0x46, 0x85, 0x16, + 0x3c, 0xb0, 0xa9, 0x08, 0x49, 0x90, 0xd8, 0x32, 0xc6, 0xaf, 0xa9, 0x60, + 0x22, 0x3a, 0x14, 0xd8, 0x08, 0x5d, 0x07, 0xeb, 0x29, 0x58, 0x7c, 0xc2, + 0x3b, 0x50, 0xa5, 0x89, 0x7b, 0x96, 0x9c, 0x47, 0x17, 0x03, 0xda, 0xc3, + 0xc2, 0xd6, 0x62, 0xfd, 0x1c, 0x8c, 0xa5, 0x68, 0x67, 0x4d, 0x23, 0x0c, + 0xc9, 0x94, 0x85, 0x7a, 0xd5, 0xc6, 0x18, 0x0b, 0x10, 0xd3, 0x51, 0x0c, + 0xbd, 0x01, 0x89, 0x66, 0x65, 0x4e, 0x31, 0x4c, 0x6c, 0xfc, 0xc9, 0x79, + 0xd0, 0xb4, 0x28, 0xef, 0x68, 0x2d, 0xe2, 0x70, 0x81, 0xe0, 0x66, 0x3b, + 0xb1, 0xa5, 0xb8, 0xa1, 0x1a, 0xa9, 0xd7, 0x49, 0x5b, 0xa2, 0x67, 0x4c, + 0xce, 0x86, 0x98, 0x70, 0x51, 0x42, 0xb7, 0x62, 0x7c, 0xd3, 0x4a, 0xbd, + 0x81, 0xfa, 0x96, 0xc4, 0x38, 0x29, 0xaa, 0xe8, 0x7f, 0xda, 0xd3, 0xc2, + 0x51, 0x8b, 0x81, 0x89, 0xeb, 0x8a, 0xdd, 0x0b, 0x24, 0xc4, 0x30, 0x2b, + 0x66, 0xf9, 0xc8, 0x51, 0x43, 0x61, 0x94, 0x70, 0x86, 0xc0, 0xe2, 0x62, + 0x63, 0xe6, 0x59, 0xef, 0x44, 0x6a, 0xac, 0x41, 0x79, 0xf4, 0xac, 0x4a, + 0xe0, 0x8b, 0xcd, 0x71, 0x0c, 0x63, 0xb1, 0xb1, 0x8a, 0xff, 0x40, 0x5e, + 0x2b, 0x79, 0x3b, 0xcb, 0x8a, 0x6d, 0xfb, 0x95, 0xad, 0xbe, 0x52, 0xab, + 0x00, 0x09, 0x10, 0x6b, 0x05, 0x96, 0xab, 0x72, 0xbb, 0x50, 0xb7, 0xaf, + 0xf2, 0x5a, 0x18, 0x22, 0xc6, 0x93, 0x87, 0x6c, 0xc5, 0x42, 0x92, 0xac, + 0xe2, 0xb2, 0x5c, 0x50, 0x18, 0x36, 0x41, 0x4c, 0x08, 0x32, 0x45, 0x08, + 0x86, 0x1a, 0x06, 0xab, 0x40, 0x77, 0x84, 0x12, 0xa6, 0x5f, 0x66, 0x99, + 0xe5, 0x48, 0x91, 0x6e, 0x9c, 0xa3, 0xa8, 0xab, 0x4d, 0x68, 0x39, 0x47, + 0x99, 0x65, 0x3a, 0x99, 0x78, 0x5d, 0x11, 0xda, 0xb1, 0x51, 0xe4, 0xa4, + 0x33, 0xc1, 0xc6, 0xd6, 0xcb, 0x79, 0x73, 0x16, 0x8a, 0xb4, 0xa0, 0x27, + 0xdd, 0x06, 0x39, 0x38, 0x13, 0x06, 0xbe, 0xb5, 0x24, 0x20, 0xf7, 0x00, + 0x0d, 0x81, 0xaa, 0x1e, 0x01, 0x72, 0x12, 0x8b, 0x50, 0x18, 0xb0, 0x40, + 0x20, 0x21, 0xb4, 0x9c, 0xc7, 0x08, 0xfd, 0x5a, 0x00, 0xcf, 0xa9, 0x55, + 0x03, 0xda, 0x95, 0xf9, 0x85, 0xa4, 0xcb, 0xe6, 0x0f, 0xbe, 0xe8, 0xc9, + 0x64, 0x40, 0x74, 0x3e, 0xd4, 0x9c, 0xf8, 0xdb, 0xb0, 0x17, 0x81, 0x5e, + 0xf1, 0x75, 0x61, 0xe5, 0x6b, 0x04, 0xd7, 0xe0, 0x3b, 0x87, 0x07, 0x26, + 0xde, 0x13, 0x50, 0x10, 0x52, 0x70, 0xba, 0x1c, 0xc9, 0x05, 0xf9, 0x16, + 0x4a, 0xf4, 0x4d, 0x1f, 0x68, 0x21, 0x5a, 0x0a, 0x33, 0x3b, 0xa4, 0xbd, + 0x03, 0xaa, 0x6a, 0x2c, 0xcb, 0xa6, 0x0d, 0x0b, 0x7e, 0x74, 0xa4, 0xa4, + 0x1e, 0x67, 0xbd, 0xdc, 0x74, 0xa1, 0x18, 0x24, 0x6e, 0x48, 0x45, 0x78, + 0x9f, 0xd4, 0x30, 0xf5, 0xbc, 0xa2, 0x9c, 0xdc, 0xa9, 0xa1, 0xe4, 0x7e, + 0x0b, 0x42, 0x31, 0xf6, 0x6a, 0x4f, 0xe9, 0x02, 0x9d, 0x69, 0x33, 0x74, + 0x15, 0x41, 0x22, 0x86, 0xbc, 0xa0, 0xb8, 0xb3, 0x8b, 0xf1, 0x4a, 0xad, + 0xc7, 0x19, 0x7b, 0x13, 0x7c, 0x10, 0xb0, 0xb1, 0x7e, 0x2a, 0x40, 0xcf, + 0xf8, 0x43, 0x0d, 0x80, 0x21, 0x8f, 0x8b, 0xfa, 0x28, 0x38, 0x2a, 0x02, + 0x6b, 0xeb, 0xaf, 0x08, 0x38, 0x16, 0x33, 0x5b, 0x88, 0x24, 0xa4, 0x7d, + 0x01, 0x64, 0x7b, 0x1a, 0xba, 0x5a, 0x8d, 0x8c, 0x2a, 0x95, 0x2c, 0xca, + 0xa3, 0x04, 0x2a, 0xfa, 0x9a, 0xb5, 0x21, 0x66, 0x83, 0xdf, 0xc8, 0x3d, + 0x03, 0x41, 0x9b, 0xe4, 0x66, 0x2a, 0xde, 0xb4, 0x4c, 0xcb, 0xc3, 0x27, + 0xf0, 0x38, 0xa3, 0xe2, 0xac, 0x70, 0x93, 0x72, 0xc5, 0xbf, 0x74, 0x73, + 0x21, 0x54, 0x53, 0x19, 0x83, 0x2e, 0x74, 0x12, 0x23, 0xaa, 0x7a, 0xad, + 0x98, 0x27, 0xa2, 0x88, 0xb5, 0x69, 0x1e, 0xea, 0x37, 0xdd, 0x78, 0x5e, + 0xd1, 0x22, 0x2f, 0x07, 0x43, 0xc6, 0x64, 0xcb, 0xb4, 0x96, 0x8a, 0x3c, + 0x3d, 0xd7, 0x4a, 0xf0, 0xd3, 0x1a, 0xd2, 0x6a, 0x2b, 0xc9, 0xec, 0xb9, + 0x3e, 0xec, 0x96, 0x8b, 0xb6, 0x69, 0xeb, 0x76, 0xb9, 0x00, 0x5b, 0x7d, + 0xe9, 0xe5, 0x61, 0xc0, 0xe6, 0xc7, 0x5f, 0xd6, 0x07, 0x49, 0x99, 0xce, + 0x1a, 0xa7, 0x9a, 0x9f, 0xd8, 0xc1, 0x28, 0xb8, 0x53, 0xdf, 0x72, 0x74, + 0x0e, 0x00, 0x94, 0xe5, 0xe7, 0x7f, 0x84, 0x99, 0x6b, 0xce, 0xa4, 0x50, + 0xb8, 0x02, 0x65, 0x4f, 0x55, 0x5f, 0x38, 0xd1, 0x19, 0x99, 0x45, 0x6a, + 0xee, 0x81, 0x74, 0x56, 0xc4, 0x1d, 0x8a, 0xca, 0x02, 0x4a, 0x0c, 0x6d, + 0x31, 0x78, 0x6d, 0x73, 0x8a, 0x0a, 0x38, 0x74, 0x88, 0xe2, 0x44, 0x85, + 0xb1, 0x82, 0x36, 0x24, 0x38, 0x75, 0xa9, 0x24, 0x1a, 0x32, 0x58, 0x50, + 0xa6, 0x68, 0x71, 0x84, 0x32, 0xb0, 0x2b, 0x91, 0xa8, 0x72, 0x25, 0x0c, + 0xf1, 0xca, 0x7b, 0xb3, 0xd6, 0x86, 0x18, 0x45, 0x0d, 0xb7, 0x27, 0x91, + 0x69, 0x61, 0x57, 0x8c, 0x50, 0xaa, 0x5c, 0x8a, 0x5b, 0xe8, 0x87, 0x3e, + 0x88, 0x77, 0xc9, 0xa2, 0x41, 0xb9, 0x4b, 0x35, 0xaa, 0x6b, 0x57, 0x42, + 0x1c, 0x5c, 0xbd, 0x75, 0x00, 0xb1, 0x80, 0x38, 0x9e, 0xf7, 0xf3, 0x26, + 0xb2, 0x7b, 0x63, 0xe9, 0xdb, 0xaa, 0x5c, 0xa8, 0xae, 0xd2, 0x15, 0x78, + 0x20, 0x33, 0x59, 0x5f, 0x79, 0xcd, 0x25, 0x5b, 0xa8, 0x23, 0xcb, 0x39, + 0xd1, 0x10, 0xae, 0xb1, 0x30, 0x7c, 0xfd, 0xa3, 0x3d, 0x2b, 0x19, 0x3e, + 0x7d, 0x57, 0x8a, 0xf7, 0x3b, 0x88, 0x88, 0xb6, 0x01, 0x70, 0x0b, 0x1e, + 0x6e, 0x74, 0x2c, 0x25, 0x20, 0xc0, 0x3d, 0xa0, 0x59, 0x01, 0xc2, 0x99, + 0x93, 0xe4, 0x23, 0x45, 0x52, 0x98, 0x1c, 0x69, 0xcb, 0x23, 0x2b, 0xa5, + 0xf2, 0xe2, 0x29, 0xc5, 0x23, 0x1d, 0x84, 0x0b, 0x1f, 0x8f, 0x66, 0x75, + 0x90, 0xb8, 0x9a, 0x9b, 0x0c, 0x00, 0x30, 0x76, 0x02, 0x93, 0x23, 0x02, + 0xad, 0xb8, 0x09, 0x13, 0xa3, 0x5d, 0xa7, 0x11, 0xa4, 0xee, 0x5c, 0x5f, + 0xcf, 0x68, 0x2f, 0x6b, 0x90, 0x48, 0x6f, 0xa0, 0xb7, 0x28, 0x63, 0x8b, + 0x98, 0x60, 0x6c, 0x3d, 0xda, 0xba, 0xfa, 0xa1, 0x69, 0xb3, 0x56, 0x54, + 0x80, 0x27, 0x8f, 0x6b, 0x4b, 0x64, 0xb0, 0x7a, 0xa0, 0x3f, 0x09, 0x02, + 0xf4, 0x09, 0x77, 0x2e, 0xe2, 0x42, 0xe1, 0x91, 0x29, 0x1a, 0x06, 0xb5, + 0x09, 0x87, 0xcd, 0x58, 0xc1, 0x6a, 0xe5, 0x98, 0x3b, 0x47, 0xea, 0x40, + 0x0c, 0x53, 0xb2, 0x95, 0xfb, 0x8e, 0x32, 0x06, 0xab, 0xf1, 0xb2, 0xca, + 0xa9, 0xc4, 0x6c, 0x34, 0x3a, 0x73, 0x40, 0x27, 0xc6, 0xf2, 0x21, 0xba, + 0x68, 0xb4, 0x2c, 0x6b, 0xf4, 0x4d, 0x80, 0x6c, 0x7a, 0x72, 0x80, 0x64, + 0xe6, 0x8b, 0xbf, 0x35, 0xf7, 0xc0, 0x13, 0x83, 0xcb, 0x25, 0xea, 0x90, + 0x61, 0x26, 0x62, 0x38, 0x55, 0xa3, 0x1a, 0x06, 0x89, 0x1e, 0xa4, 0xc2, + 0x31, 0x30, 0x0d, 0xf5, 0x93, 0x3b, 0xc3, 0x12, 0x43, 0x0a, 0xb6, 0x1f, + 0x0e, 0x53, 0x6e, 0x5e, 0x13, 0x1e, 0xb5, 0x25, 0x1c, 0x83, 0x09, 0x04, + 0x7f, 0x40, 0xb3, 0x6f, 0x34, 0x27, 0x7a, 0x31, 0x16, 0x13, 0x84, 0xc9, + 0x0f, 0xf4, 0x7e, 0xd9, 0x56, 0xb0, 0xf3, 0xb6, 0x6a, 0x78, 0x55, 0x0f, + 0xd0, 0xba, 0xa3, 0x2e, 0xa7, 0x1b, 0xc4, 0xf8, 0x83, 0xcd, 0x21, 0x65, + 0xee, 0xe4, 0x4f, 0x81, 0xe4, 0x7f, 0xb9, 0x80, 0x7b, 0xe8, 0x97, 0x36, + 0x25, 0x14, 0x8e, 0xf6, 0x22, 0xb0, 0xdb, 0xc4, 0x43, 0x40, 0x3c, 0x04, + 0x10, 0x00, 0x7c, 0x99, 0xd6, 0x73, 0x16, 0xa5, 0x17, 0xdb, 0xe2, 0x02, + 0xdf, 0x80, 0x4f, 0xf1, 0x13, 0x3b, 0x32, 0xa9, 0x83, 0x3a, 0x21, 0x16, + 0x82, 0x95, 0x25, 0xfb, 0x68, 0xbd, 0x2e, 0x6a, 0x7e, 0x93, 0x8c, 0xb4, + 0x09, 0xe3, 0x87, 0x8d, 0x13, 0x95, 0x5b, 0x01, 0xb9, 0x3d, 0x3a, 0x74, + 0xa7, 0xfc, 0xae, 0xc6, 0xa7, 0xaa, 0x67, 0x52, 0xc7, 0xb0, 0xb0, 0xb1, + 0xf8, 0xc7, 0x0d, 0x0a, 0x33, 0x38, 0x3a, 0x3c, 0x3a, 0xcb, 0x23, 0x32, + 0x03, 0x62, 0x8a, 0xea, 0x70, 0xb6, 0xea, 0x64, 0x51, 0x08, 0x2b, 0x7c, + 0x6e, 0xb6, 0x83, 0x32, 0x32, 0x4a, 0xe4, 0x11, 0xb3, 0x1f, 0x12, 0x0a, + 0x10, 0x78, 0x1d, 0xb4, 0x56, 0x30, 0x85, 0x43, 0x77, 0x13, 0x10, 0xa2, + 0xf8, 0x51, 0xad, 0xaa, 0x12, 0x5b, 0xe7, 0x03, 0x7d, 0xbb, 0x18, 0x6e, + 0xb4, 0xca, 0xbd, 0xc8, 0x9b, 0xad, 0xb4, 0x01, 0x23, 0x64, 0xda, 0x1f, + 0xd6, 0x3b, 0xa5, 0x8c, 0xaa, 0x91, 0x12, 0xfa, 0x2f, 0xf5, 0xac, 0x36, + 0x42, 0x31, 0x9e, 0x7a, 0x96, 0xc9, 0xcb, 0xc1, 0x3c, 0x00, 0xa2, 0x88, + 0xde, 0x39, 0x8d, 0x55, 0xb2, 0xa0, 0x6c, 0xb7, 0x11, 0x87, 0x44, 0x24, + 0x76, 0x96, 0x4d, 0x90, 0x2b, 0x42, 0x2b, 0x24, 0xb6, 0x26, 0x74, 0xa4, + 0xff, 0xa9, 0x79, 0x40, 0x09, 0x86, 0x6c, 0x46, 0x97, 0x81, 0x33, 0x08, + 0x86, 0x96, 0xa0, 0x84, 0xd6, 0x0a, 0x91, 0x61, 0x00, 0x3b, 0x0a, 0x3f, + 0x61, 0x74, 0xb7, 0xcf, 0x58, 0x36, 0xf7, 0x66, 0x7a, 0xd9, 0x69, 0x59, + 0xf3, 0x51, 0x41, 0x69, 0x18, 0x3d, 0xf2, 0x00, 0xcc, 0xf6, 0xf5, 0x41, + 0xc3, 0xac, 0x40, 0x66, 0x12, 0x99, 0x90, 0xac, 0xac, 0xf7, 0xac, 0x02, + 0x32, 0x27, 0x9b, 0x21, 0x75, 0x26, 0x39, 0x56, 0x6a, 0xbf, 0xa7, 0x03, + 0xd8, 0x53, 0x74, 0x1c, 0x26, 0x28, 0xc6, 0x28, 0x96, 0x49, 0x7b, 0x57, + 0x59, 0x78, 0xcf, 0xb7, 0xda, 0x37, 0xc0, 0x26, 0xb1, 0x23, 0x6b, 0x0f, + 0x1e, 0xea, 0x03, 0x45, 0x07, 0x36, 0xae, 0x73, 0xad, 0x20, 0xf8, 0x85, + 0x3e, 0x33, 0xb9, 0x0f, 0x40, 0xcf, 0xc0, 0x58, 0xbd, 0xfc, 0xfa, 0x00, + 0x37, 0x9a, 0x20, 0x80, 0xe0, 0xb8, 0x18, 0x40, 0x99, 0x3c, 0x25, 0x05, + 0xd9, 0xca, 0x5a, 0x3e, 0x59, 0xac, 0x13, 0x77, 0xc4, 0xc1, 0x76, 0xbc, + 0x7e, 0xa5, 0x12, 0xfe, 0xe7, 0xa1, 0xd8, 0x54, 0x06, 0xa3, 0x06, 0x8e, + 0xcf, 0x91, 0xb0, 0xf6, 0x7c, 0x79, 0xb4, 0x24, 0x95, 0x84, 0x21, 0xab, + 0x5e, 0x41, 0x14, 0x76, 0x01, 0x5c, 0x31, 0x9a, 0xcf, 0xff, 0x69, 0x2d, + 0x67, 0xf9, 0x27, 0x53, 0xbc, 0x43, 0x1b, 0x9c, 0xaf, 0x00, 0xa6, 0xb0, + 0x00, 0xf5, 0x26, 0xd5, 0x73, 0x51, 0xd6, 0xa6, 0xa6, 0x3e, 0x76, 0xaa, + 0x5b, 0x50, 0x21, 0x2a, 0x23, 0xc6, 0x4e, 0x56, 0x2e, 0x8d, 0x66, 0xc7, + 0xab, 0x30, 0x84, 0x3d, 0x50, 0x3f, 0xbb, 0x89, 0x41, 0xe0, 0x64, 0x55, + 0x52, 0x03, 0xac, 0xb3, 0xc8, 0x86, 0x4d, 0x0a, 0x42, 0x7b, 0xf1, 0x50, + 0x48, 0x56, 0x68, 0x80, 0x74, 0x28, 0x1c, 0x66, 0xc3, 0xa7, 0xa2, 0xb0, + 0xcf, 0x58, 0x2e, 0x2c, 0x22, 0x93, 0x96, 0x2c, 0x20, 0x22, 0xa0, 0xa2, + 0x6f, 0x33, 0x52, 0x9e, 0x96, 0x3d, 0x7c, 0x72, 0x48, 0x6b, 0x24, 0x97, + 0x79, 0x48, 0x73, 0x0c, 0xc9, 0xa8, 0x9f, 0xea, 0x71, 0x4a, 0x49, 0x42, + 0x66, 0x69, 0x89, 0x78, 0x42, 0xf4, 0xe2, 0x3d, 0x9d, 0xe1, 0x57, 0x50, + 0x14, 0x67, 0x1b, 0xa3, 0x80, 0x12, 0x85, 0x56, 0x32, 0x13, 0xa3, 0xfa, + 0xb2, 0xd0, 0x0f, 0x0d, 0x26, 0xcd, 0x45, 0x3d, 0xf0, 0x55, 0x7b, 0x41, + 0x90, 0xf8, 0x12, 0x98, 0xe4, 0x4f, 0x5a, 0x57, 0xb3, 0x5d, 0xa4, 0xe3, + 0x8a, 0x8d, 0x97, 0x0a, 0x89, 0xe0, 0x82, 0x0a, 0x5a, 0xe3, 0x0e, 0x7f, + 0x77, 0xce, 0x28, 0x24, 0x25, 0xca, 0x39, 0xf4, 0xa6, 0x91, 0x8f, 0x5b, + 0x97, 0xb9, 0x58, 0x0a, 0xa6, 0x01, 0x9c, 0xdf, 0xc5, 0x60, 0x4a, 0x13, + 0xb2, 0xee, 0x4d, 0x72, 0xf5, 0xd0, 0x89, 0x6f, 0x0c, 0x33, 0x5d, 0x20}, + // ciphertext + {0x49, 0xc7, 0x7e, 0xb0, 0x19, 0xfa, 0x3d, 0x00, 0x7e, 0xc4, 0x26, 0xc7, + 0x59, 0xe0, 0x7a, 0x77, 0x40, 0xe5, 0xc6, 0x3a, 0xe8, 0xd0, 0xde, 0xb9, + 0x05, 0xbe, 0xab, 0xf4, 0x53, 0x1b, 0xce, 0x76, 0x2a, 0x7a, 0x45, 0x5d, + 0x45, 0xf5, 0x71, 0x21, 0x8c, 0x23, 0xa4, 0x34, 0x05, 0x4d, 0xce, 0x1d, + 0x7c, 0x65, 0xd3, 0x55, 0x7c, 0x3d, 0x43, 0x01, 0x68, 0x8d, 0x72, 0xd9, + 0x5a, 0x14, 0xe0, 0x52, 0xeb, 0xbe, 0x6a, 0xf4, 0xc2, 0xd8, 0x78, 0x83, + 0x72, 0x40, 0xbb, 0x84, 0x73, 0xd4, 0x02, 0x3b, 0x5b, 0x0e, 0x74, 0xda, + 0x7a, 0xe7, 0xb6, 0xab, 0xba, 0xe0, 0x62, 0x14, 0x2b, 0x8b, 0x06, 0xc1, + 0x95, 0x62, 0x3b, 0x88, 0x75, 0x75, 0x64, 0xd6, 0xc5, 0x8c, 0x0f, 0x92, + 0x9a, 0x96, 0xe4, 0x3d, 0xa3, 0x45, 0x0b, 0x08, 0xe0, 0xda, 0x71, 0x6f, + 0xe5, 0x2c, 0xdd, 0x51, 0xca, 0x58, 0x83, 0x54, 0x8b, 0x61, 0x23, 0x52, + 0x89, 0xa2, 0xe0, 0xf6, 0x57, 0xb2, 0x50, 0x23, 0x3e, 0xf8, 0x63, 0x9d, + 0xa0, 0x8e, 0x6e, 0x10, 0xe4, 0xa6, 0xe7, 0x52, 0x91, 0x85, 0x1f, 0x72, + 0x9f, 0x89, 0xdc, 0x37, 0x60, 0x1c, 0x52, 0x0d, 0x5a, 0x19, 0x04, 0xca, + 0x9d, 0x75, 0x2e, 0xb6, 0x55, 0xf9, 0xa7, 0x31, 0x90, 0xe7, 0x35, 0x0a, + 0xb4, 0x10, 0x34, 0x85, 0x12, 0xbf, 0x9c, 0xe6, 0x50, 0x94, 0x3f, 0xe4, + 0x1c, 0x03, 0xbe, 0xd2, 0x2d, 0xf4, 0x5c, 0xe1, 0xb0, 0x95, 0x85, 0xe2, + 0x0c, 0x67, 0xdf, 0x55, 0x6b, 0x05, 0xd6, 0x8b, 0xf6, 0x42, 0x51, 0x50, + 0x8f, 0xe8, 0x01, 0x2e, 0xb8, 0x45, 0x72, 0x0e, 0x2a, 0xaf, 0x15, 0x8f, + 0x1b, 0x06, 0x93, 0x74, 0xff, 0x3f, 0xe7, 0x29, 0x3a, 0x0d, 0xeb, 0x05, + 0xcf, 0x91, 0x4e, 0xc5, 0xc2, 0x31, 0x1e, 0xcd, 0x46, 0x57, 0xa4, 0xbf, + 0x55, 0xb7, 0xdc, 0x94, 0x53, 0x07, 0x03, 0xa6, 0x0e, 0xec, 0x3b, 0xfa, + 0xf7, 0x0c, 0xc0, 0xcc, 0x1a, 0x2c, 0xc1, 0xc1, 0x47, 0xe3, 0x5a, 0xf6, + 0x07, 0x37, 0x16, 0xf4, 0xbe, 0x54, 0x0d, 0xb1, 0xfe, 0x13, 0xbe, 0xa2, + 0x2b, 0x71, 0x75, 0xbb, 0x50, 0xd7, 0xc1, 0x5f, 0x04, 0x4a, 0xa5, 0x4b, + 0x12, 0x6c, 0x69, 0xe5, 0x7c, 0x1d, 0x4c, 0x5c, 0x5a, 0x9c, 0xa9, 0x47, + 0xae, 0xd4, 0xfd, 0x27, 0x9d, 0xcb, 0x95, 0x0d, 0x64, 0x08, 0xb6, 0x2e, + 0x79, 0x40, 0xae, 0x12, 0x07, 0x67, 0x02, 0xe5, 0x53, 0xe6, 0x04, 0x34, + 0x07, 0x68, 0xa8, 0x70, 0x93, 0x1f, 0xf3, 0xcc, 0x5c, 0x0f, 0x4c, 0x15, + 0x8f, 0x13, 0x22, 0xba, 0x6f, 0xb6, 0xe3, 0xed, 0x4b, 0x54, 0x21, 0xed, + 0x5a, 0x2f, 0x59, 0x49, 0x00, 0x4e, 0x88, 0x5e, 0x08, 0xe7, 0xf8, 0x7e, + 0x63, 0x1c, 0x86, 0x74, 0xec, 0x73, 0x10, 0x24, 0x0c, 0x16, 0xf2, 0x4b, + 0x2b, 0x5a, 0x91, 0x75, 0xdb, 0x72, 0x46, 0x28, 0xf1, 0xf0, 0xcf, 0x76, + 0x08, 0x8e, 0xd5, 0xed, 0xda, 0x98, 0x56, 0x35, 0xc6, 0x14, 0xbb, 0x0d, + 0xdb, 0xd7, 0x9d, 0x3c, 0xcb, 0xde, 0x0c, 0xad, 0x1c, 0xeb, 0x9a, 0x3f, + 0xb5, 0x36, 0xf7, 0x1f, 0xb5, 0xdd, 0x09, 0x79, 0xfb, 0x87, 0xf0, 0xa8, + 0xd4, 0xe3, 0x3e, 0xa1, 0x1a, 0xb1, 0x9a, 0x98, 0xf3, 0x6a, 0xee, 0x54, + 0xbf, 0x78, 0x70, 0xcc, 0x22, 0xdd, 0x4d, 0x4a, 0x2c, 0x37, 0x5c, 0xfe, + 0x9a, 0x68, 0xfe, 0x64, 0x77, 0x6e, 0x61, 0x29, 0x99, 0xbc, 0xd5, 0x43, + 0x34, 0xb6, 0x01, 0x93, 0x44, 0x59, 0xd0, 0xfc, 0x18, 0xf7, 0x82, 0x59, + 0xfc, 0x4e, 0x5a, 0x03, 0xe6, 0xa4, 0x99, 0x6b, 0xc6, 0x6e, 0xc0, 0x48, + 0x9c, 0x1c, 0x01, 0x2b, 0x43, 0x19, 0x5d, 0xd2, 0xeb, 0xc6, 0xc9, 0xa4, + 0x5c, 0xfc, 0xf2, 0xe3, 0xab, 0x61, 0x1e, 0x98, 0x7a, 0x9b, 0xd5, 0x27, + 0xfd, 0x89, 0xff, 0xbc, 0xaf, 0x78, 0xa2, 0xa8, 0xe0, 0x3f, 0x1f, 0xf0, + 0x73, 0x78, 0x72, 0x2c, 0x9e, 0x62, 0x4a, 0x06, 0x6f, 0x16, 0x14, 0x66, + 0xd4, 0x40, 0x5e, 0x85, 0x1e, 0x70, 0x75, 0x2b, 0x7a, 0x96, 0x31, 0x95, + 0xdf, 0xb8, 0xcc, 0x8d, 0xd4, 0x51, 0x0f, 0xa6, 0x99, 0xcd, 0x0b, 0x0b, + 0xc0, 0x21, 0x3e, 0xc6, 0x66, 0x2c, 0xdc, 0x92, 0x73, 0xa8, 0xf2, 0x64, + 0x8d, 0x4f, 0x68, 0xce, 0x6e, 0xaa, 0xd0, 0x09, 0x34, 0xce, 0xfb, 0xbf, + 0x80, 0x72, 0xd0, 0x81, 0x46, 0x34, 0x44, 0x45, 0x34, 0xad, 0xb4, 0xcc, + 0xfb, 0x36, 0xe5, 0x06, 0x75, 0x94, 0xe5, 0x72, 0x38, 0x93, 0xde, 0x05, + 0xf7, 0x31, 0x2b, 0x38, 0x0d, 0xc0, 0x84, 0x86, 0x56, 0x3a, 0x04, 0x96, + 0xaf, 0xf6, 0xf2, 0x34, 0x9b, 0xed, 0x9e, 0x44, 0xe0, 0x93, 0x99, 0xe1, + 0xf7, 0x69, 0x44, 0x07, 0x40, 0xa7, 0xe5, 0x20, 0x97, 0xb6, 0x16, 0xe5, + 0x8a, 0x85, 0x9a, 0x5d, 0x3c, 0x71, 0x68, 0x36, 0x4c, 0xb0, 0xc7, 0x46, + 0xb5, 0x24, 0xea, 0xbe, 0x1e, 0x51, 0xbe, 0x8d, 0x4c, 0xfd, 0xaf, 0x80, + 0xa7, 0x3b, 0x8c, 0x67, 0x79, 0xb7, 0x0b, 0x89, 0x90, 0x86, 0xd1, 0x2a, + 0xe3, 0x66, 0x2d, 0x0b, 0xc1, 0x96, 0x15, 0x1f, 0x77, 0x24, 0x19, 0x4b, + 0x2e, 0x01, 0x29, 0x5e, 0x08, 0xfc, 0xf3, 0xc9, 0xfa, 0xb4, 0x6c, 0xba, + 0xe3, 0xf9, 0x6b, 0x3b, 0xbd, 0x6a, 0x66, 0xd5, 0x1a, 0xee, 0xad, 0x6c, + 0x4f, 0xc2, 0x87, 0x5c, 0x5c, 0x22, 0x27, 0xf1, 0x2e, 0x22, 0x76, 0x33, + 0x26, 0x4b, 0x8c, 0x65, 0x8d, 0x86, 0x7a, 0xd6, 0x7a, 0x85, 0xeb, 0xf8, + 0xb9, 0x73, 0x2f, 0xbb, 0xeb, 0x08, 0x10, 0x3c, 0x73, 0x3e, 0x7a, 0xbf, + 0xe7, 0xf6, 0x92, 0x8f, 0x41, 0x4c, 0x9f, 0x78, 0x0f, 0x2c, 0x9f, 0x80, + 0xbf, 0xd2, 0x7e, 0x21, 0x2e, 0xb0, 0x07, 0xda, 0x10, 0x32, 0x20, 0x34, + 0x02, 0x13, 0x01, 0x49, 0x7d, 0x5f, 0x79, 0x11, 0xc1, 0x1f, 0x64, 0x88, + 0x96, 0x85, 0xb6, 0xb6, 0xa7, 0xc5, 0x15, 0x62, 0xce, 0x13, 0xc6, 0xe8, + 0x90, 0x8b, 0x6f, 0x62, 0x24, 0x6f, 0xe6, 0xa2, 0xa4, 0x85, 0xc0, 0xb1, + 0xbb, 0x00, 0x38, 0xbd, 0xf3, 0xfa, 0xa4, 0xcd, 0x22, 0xfa, 0x45, 0x0e, + 0x37, 0x5b, 0x04, 0x49, 0x80, 0x2d, 0x8d, 0x96, 0xdd, 0x33, 0xa6, 0xa5, + 0xeb, 0xb5, 0x8e, 0xe7, 0x8a, 0x25, 0xaa, 0x33, 0xe8, 0xf7, 0x37, 0xc5, + 0x34, 0x6f, 0xe1, 0x35, 0x32, 0x41, 0x46, 0x83, 0x02, 0x59, 0xe9, 0x27, + 0xbd, 0x1e, 0x72, 0xfd, 0x20, 0x8f, 0x2c, 0x90, 0x67, 0x92, 0xc6, 0x0d, + 0xf1, 0x61, 0x44, 0x8e, 0xdf, 0x57, 0xe6, 0xbf, 0x77, 0xd6, 0xb9, 0xda, + 0xc2, 0x4a, 0x17, 0x69, 0x4c, 0x99, 0x6e, 0x92, 0x89, 0x4b, 0x9f, 0x35, + 0x07, 0x99, 0xbb, 0xdd, 0x7e, 0x86, 0xf3, 0x08, 0x18, 0x96, 0x0b, 0xa5, + 0x6f, 0xd2, 0x3b, 0x07, 0xdb, 0x26, 0x05, 0x39, 0x2c, 0x0a, 0x9e, 0x15, + 0x2e, 0x25, 0x5c, 0xb4, 0xff, 0x6f, 0xfe, 0x3b, 0x5b, 0xb5, 0x15, 0x3e, + 0x0a, 0xae, 0x28, 0x8c, 0x97, 0xfc, 0xc0, 0x47, 0x9f, 0x38, 0x67, 0xfc, + 0x52, 0x47, 0xe8, 0x50, 0xa9, 0xf9, 0x40, 0x6a, 0xef, 0xcb, 0x87, 0xeb, + 0x28, 0x2f, 0xc4, 0x64, 0x27, 0xac, 0x43, 0x32, 0xd6, 0x99, 0x40, 0x15, + 0x3b, 0x1b, 0x86, 0x07, 0xe9, 0xea, 0x3f, 0x56, 0x81, 0xc9, 0xef, 0x1e, + 0x9e, 0x0c, 0xd0, 0x64, 0x57, 0x18, 0x7a, 0x72, 0xc2, 0xa1, 0x0c, 0x61, + 0xc7, 0xf3, 0x97, 0x86, 0xc7, 0x60, 0x8a, 0xfb, 0x0d, 0x19, 0x85, 0x7a, + 0x1e, 0xbb, 0xd3, 0x33, 0xd1, 0x48, 0xff, 0x23, 0xbf, 0x54, 0xad, 0x18, + 0xcd, 0x21, 0x01, 0x9c, 0x13, 0x4b, 0xd5, 0x96, 0x0a, 0x96, 0x4a, 0xbc, + 0xfd, 0x43, 0x64, 0xac, 0xeb, 0xc6, 0x4f, 0x09, 0x24, 0x3e, 0x25, 0xa9, + 0xb5, 0xe3, 0x3a, 0x2a, 0xe5, 0x1b, 0xb0, 0x52, 0x3d, 0x59, 0x90, 0x1a, + 0xe4, 0xfd, 0x94, 0x6d, 0xd0, 0x97, 0x7f, 0x6f, 0xf4, 0x6c, 0xca, 0x2f, + 0xe7, 0x00, 0x3c, 0xc3, 0xae, 0x90, 0xfb, 0x85, 0xa3, 0x70, 0x8f, 0x0c, + 0x0d, 0xf6, 0xa2, 0xe5, 0xfc, 0xa2, 0xbd, 0x46}, + // secret + {0x0e, 0x2d, 0x4c, 0xd0, 0xc4, 0xc4, 0xc9, 0x52, 0x0e, 0x5f, 0x35, + 0xd1, 0x2b, 0xb2, 0x1a, 0x08, 0x7d, 0xfb, 0xdd, 0x50, 0x2b, 0xaf, + 0x4c, 0xd8, 0x98, 0xa3, 0x1c, 0x4f, 0x16, 0xb6, 0xca, 0x67}, + true}, + // tcID: 92 + {92, + params_ml_kem768_test_mode, + // privateKey + {0x5c, 0xb4, 0xc2, 0xe4, 0x7c, 0x20, 0xd4, 0xd9, 0x68, 0xa9, 0xe5, 0x5d, + 0x1a, 0x4a, 0x1c, 0xa1, 0x72, 0xa1, 0x54, 0x97, 0x3c, 0x60, 0xf1, 0xbd, + 0x55, 0xfc, 0x3a, 0x6d, 0xc8, 0x18, 0x4a, 0x17, 0x15, 0x3a, 0xd0, 0x05, + 0x9e, 0x08, 0x24, 0xea, 0x12, 0x23, 0x8c, 0x30, 0x68, 0xd6, 0x55, 0x36, + 0x36, 0xf1, 0x9d, 0xca, 0x49, 0x5e, 0xe2, 0x06, 0x47, 0x62, 0x29, 0x2b, + 0xc3, 0x18, 0xb1, 0x44, 0x66, 0x7c, 0xd9, 0x43, 0x8a, 0x2c, 0x32, 0x90, + 0x4d, 0xf0, 0x1a, 0xe9, 0x0a, 0x11, 0xfb, 0x08, 0x28, 0xf0, 0xdc, 0xc1, + 0x50, 0xa0, 0x2f, 0x7e, 0x75, 0x8b, 0xb9, 0x5c, 0x3b, 0x64, 0xf0, 0x93, + 0xab, 0xdc, 0x9d, 0x57, 0x69, 0x15, 0x10, 0x39, 0x54, 0xe6, 0x7b, 0x7a, + 0xb5, 0xd2, 0x71, 0xf1, 0x60, 0x32, 0x48, 0xb1, 0x6b, 0x15, 0xc8, 0xb9, + 0x13, 0x20, 0x2e, 0x85, 0x46, 0x1a, 0x4e, 0x9c, 0xc5, 0x89, 0xc5, 0x4a, + 0x0d, 0x30, 0x41, 0xc2, 0xb6, 0x95, 0x3e, 0x73, 0xc2, 0x4c, 0x5c, 0x6f, + 0x0b, 0x9b, 0x6b, 0xaa, 0xf6, 0x3c, 0xa1, 0x18, 0x63, 0xa2, 0xe4, 0x74, + 0x20, 0xd7, 0x90, 0xae, 0xd7, 0xcf, 0xc8, 0x3c, 0x6b, 0xf5, 0xc1, 0x5a, + 0xb4, 0xda, 0xc0, 0x0f, 0x92, 0x39, 0xb7, 0x84, 0x82, 0x31, 0x65, 0x24, + 0x73, 0x32, 0x22, 0x82, 0xca, 0x0f, 0x34, 0xf7, 0x3c, 0x6d, 0x9c, 0x25, + 0x04, 0x0c, 0xb2, 0x07, 0x60, 0x85, 0xd8, 0x51, 0x86, 0x34, 0x9b, 0x03, + 0xa5, 0x18, 0xcc, 0x72, 0x0c, 0x0a, 0xff, 0xd3, 0x7e, 0x61, 0xb5, 0x6b, + 0x39, 0x4c, 0xaa, 0x20, 0x07, 0x4a, 0xc8, 0x61, 0x95, 0xe7, 0x81, 0x6a, + 0xb0, 0x37, 0xab, 0x3d, 0x30, 0x0b, 0x9f, 0xfb, 0x68, 0x92, 0x19, 0x91, + 0x22, 0xe7, 0x03, 0xfa, 0xa7, 0xc6, 0xb9, 0xc3, 0x4d, 0x84, 0x45, 0x59, + 0x3b, 0xdc, 0x00, 0xfc, 0x78, 0x6c, 0x7c, 0xc2, 0x06, 0x89, 0x83, 0x25, + 0xe4, 0x43, 0x38, 0xe7, 0x4b, 0x02, 0xae, 0x93, 0x1d, 0x95, 0xac, 0x50, + 0xdf, 0xd4, 0x2f, 0xe6, 0xc1, 0x6e, 0xa7, 0xa3, 0x44, 0xa4, 0x30, 0x4f, + 0xad, 0x54, 0x83, 0x8a, 0xa9, 0xb7, 0x81, 0x01, 0xb7, 0xe8, 0x03, 0xa3, + 0x3e, 0xd6, 0x82, 0x2e, 0x7c, 0x8f, 0xdd, 0x69, 0x3a, 0x5b, 0x3c, 0x9f, + 0x45, 0xab, 0xb3, 0x89, 0x3c, 0x66, 0x80, 0xc7, 0x65, 0x14, 0x92, 0x66, + 0xc1, 0x61, 0x05, 0x73, 0x5a, 0x9f, 0x94, 0xb4, 0xb6, 0xe0, 0xa7, 0x8a, + 0x94, 0xb5, 0x37, 0xd3, 0x7a, 0x7e, 0xec, 0x13, 0x1a, 0xe3, 0x25, 0x45, + 0xbe, 0x14, 0xbf, 0x6c, 0x42, 0x38, 0x4c, 0x9b, 0x9c, 0x75, 0x77, 0x00, + 0x14, 0x92, 0x25, 0x4b, 0x7a, 0x85, 0xa6, 0x95, 0x55, 0x51, 0xe5, 0x20, + 0x11, 0x65, 0x6d, 0x95, 0xb2, 0x36, 0xb3, 0xc1, 0x0b, 0x7c, 0xc7, 0x91, + 0x19, 0xe5, 0x22, 0x35, 0x62, 0xc3, 0xbe, 0x2a, 0x5d, 0xbb, 0x52, 0x71, + 0x10, 0xba, 0x54, 0xb8, 0x52, 0xc9, 0x9f, 0x76, 0x07, 0xae, 0xf6, 0x6a, + 0xc7, 0x30, 0x00, 0x3e, 0xa0, 0xa1, 0x70, 0x83, 0x6b, 0x22, 0x28, 0x9f, + 0xcd, 0x39, 0xa2, 0xf5, 0x47, 0x8f, 0xee, 0xf3, 0x87, 0x99, 0xa2, 0x81, + 0x14, 0xf3, 0x87, 0x5a, 0x7a, 0x22, 0x6f, 0xf7, 0xa2, 0x29, 0x58, 0x58, + 0xec, 0xa9, 0x53, 0xf7, 0x26, 0x2a, 0x6a, 0x88, 0x60, 0x87, 0xfa, 0xb0, + 0x84, 0xb7, 0xbc, 0xec, 0x46, 0x63, 0x48, 0x60, 0x77, 0xb7, 0xe7, 0xa2, + 0x04, 0xeb, 0x4a, 0x9a, 0x73, 0x74, 0xce, 0x07, 0xd0, 0x9e, 0x61, 0xc5, + 0xcd, 0x6b, 0x16, 0x8b, 0xe5, 0x84, 0xf1, 0x9c, 0x51, 0x3c, 0x35, 0xa2, + 0x95, 0x10, 0x33, 0x44, 0x52, 0x51, 0xcf, 0x6b, 0xc8, 0x5d, 0xf8, 0x72, + 0xb8, 0xda, 0x47, 0xf0, 0xb0, 0x0c, 0x17, 0x39, 0x1f, 0x66, 0x70, 0x6d, + 0x2b, 0xc6, 0x5b, 0x69, 0x8a, 0xc8, 0x5b, 0x36, 0xad, 0xbf, 0x16, 0x6f, + 0xa6, 0xa2, 0x37, 0x64, 0x56, 0x2c, 0x69, 0xfa, 0x57, 0xa5, 0xf2, 0xb6, + 0xeb, 0x83, 0x68, 0x83, 0x79, 0x6d, 0xd6, 0x71, 0xa9, 0x5a, 0xe4, 0xb4, + 0x4a, 0x47, 0xbe, 0x78, 0xb2, 0x2e, 0x77, 0x5c, 0x23, 0x31, 0x44, 0xa0, + 0xd9, 0x5b, 0x6c, 0x83, 0x93, 0xad, 0x16, 0xf3, 0x9e, 0x21, 0x7c, 0x9f, + 0xc5, 0x9c, 0x77, 0x86, 0x6b, 0x12, 0xe0, 0x03, 0x9c, 0x48, 0x09, 0x45, + 0xd9, 0x8b, 0x6a, 0x25, 0xfb, 0x9f, 0x0d, 0x4a, 0xce, 0x6f, 0x10, 0x20, + 0x39, 0x17, 0x19, 0x32, 0xf2, 0x7b, 0x7d, 0xb1, 0x0c, 0xf0, 0x23, 0x97, + 0x07, 0xd4, 0x5a, 0x2b, 0xc8, 0x4c, 0x4a, 0x00, 0x05, 0x82, 0x1a, 0x3b, + 0x43, 0x0b, 0x12, 0x5d, 0x02, 0x93, 0x4e, 0x36, 0x01, 0x93, 0x41, 0x4a, + 0xd8, 0x51, 0x51, 0xe1, 0xf4, 0xa7, 0x18, 0xa6, 0x4c, 0xea, 0xd1, 0x12, + 0xab, 0x5a, 0x42, 0x06, 0xcc, 0xaf, 0x71, 0xb9, 0xad, 0x91, 0xeb, 0x5b, + 0x20, 0x68, 0xc1, 0xad, 0x04, 0xca, 0xaa, 0x32, 0x38, 0xe7, 0x73, 0x55, + 0xce, 0x71, 0x22, 0x8d, 0x96, 0x2e, 0xb4, 0xe4, 0xae, 0x7b, 0x49, 0x90, + 0x19, 0xc1, 0xca, 0x15, 0x17, 0x90, 0x27, 0x10, 0x3e, 0xf8, 0x5a, 0xb1, + 0x6b, 0x0b, 0xbc, 0x53, 0x8a, 0x95, 0x51, 0x00, 0xc3, 0x28, 0x84, 0x5b, + 0xfe, 0x51, 0x99, 0x68, 0x08, 0x61, 0xf6, 0xc8, 0x65, 0x04, 0x69, 0x28, + 0x26, 0x40, 0x12, 0xa7, 0x52, 0x9c, 0x6b, 0x55, 0xb7, 0x9b, 0xe2, 0x7c, + 0xf4, 0x97, 0x30, 0x84, 0x08, 0xa1, 0xa8, 0x21, 0x65, 0x8d, 0x8a, 0xb1, + 0x46, 0x14, 0x6f, 0x32, 0x77, 0x0b, 0x5b, 0x17, 0x3e, 0x2b, 0x45, 0xb9, + 0x7b, 0xca, 0xa0, 0xb8, 0x33, 0xb6, 0x8c, 0x59, 0x81, 0x64, 0x6b, 0x3a, + 0x9c, 0x26, 0x30, 0xd9, 0x8b, 0x41, 0x93, 0xf6, 0x23, 0x1c, 0xe3, 0xc6, + 0x8e, 0xe1, 0xc3, 0xf8, 0xb5, 0xc4, 0xed, 0xac, 0x40, 0x63, 0xd7, 0x58, + 0x5a, 0x12, 0x7c, 0x22, 0x86, 0x6e, 0x96, 0xb6, 0x98, 0x4b, 0x71, 0x13, + 0x2c, 0xc9, 0x0f, 0x38, 0x44, 0x04, 0x6c, 0xc7, 0xc2, 0x3a, 0x49, 0x8b, + 0x65, 0xe4, 0x34, 0x9e, 0x97, 0x37, 0x36, 0x39, 0x46, 0xbe, 0x78, 0x2b, + 0xa8, 0x11, 0xcc, 0x67, 0xb8, 0x23, 0x80, 0xdb, 0x87, 0xc5, 0xf7, 0x1f, + 0xed, 0x95, 0x87, 0xd2, 0xe4, 0xc3, 0x7e, 0xf2, 0x11, 0xad, 0xbb, 0x39, + 0xc9, 0x73, 0xb0, 0x72, 0x66, 0x84, 0x1b, 0xf2, 0xa0, 0xe4, 0xf8, 0xcf, + 0x40, 0xe6, 0x2b, 0x9f, 0xb6, 0x47, 0x23, 0x2a, 0x11, 0x1d, 0xc5, 0x60, + 0x28, 0xa7, 0x3b, 0x43, 0x14, 0x3e, 0x7d, 0x67, 0x1a, 0xc1, 0xb9, 0x64, + 0xeb, 0x48, 0x8e, 0xf9, 0x32, 0x51, 0x0e, 0x23, 0x1b, 0x08, 0xa6, 0x4d, + 0xd8, 0x3c, 0x3a, 0x3f, 0xe1, 0xc2, 0xc1, 0xa2, 0x64, 0x4a, 0xea, 0x55, + 0x4e, 0xe8, 0x52, 0x64, 0xf4, 0x76, 0x82, 0x26, 0x38, 0x2b, 0xc5, 0x50, + 0x26, 0x05, 0x51, 0x9b, 0x91, 0x56, 0x6e, 0x9c, 0x7d, 0x52, 0xd1, 0x92, + 0x2d, 0x87, 0xbd, 0xf1, 0xe3, 0x64, 0x05, 0x45, 0xc7, 0x0b, 0x9c, 0x61, + 0xd4, 0x02, 0x67, 0x02, 0x98, 0x11, 0x9e, 0xc2, 0x65, 0x69, 0x63, 0x2a, + 0x71, 0xa3, 0x62, 0xcd, 0x15, 0x10, 0x92, 0xf2, 0x18, 0x92, 0xbc, 0xc1, + 0x79, 0x25, 0x23, 0x91, 0xf0, 0x12, 0x2e, 0xea, 0x25, 0xce, 0x20, 0x59, + 0x0e, 0x56, 0x05, 0x58, 0x3c, 0x28, 0xa6, 0xf3, 0x0e, 0x26, 0x98, 0x7c, + 0x23, 0xd5, 0x6f, 0xef, 0xd4, 0x9d, 0x8d, 0xdb, 0xb0, 0xc2, 0x76, 0x84, + 0x71, 0x3c, 0x4b, 0xcd, 0xf4, 0x41, 0x1f, 0x66, 0xb5, 0x41, 0x99, 0x6d, + 0xab, 0x70, 0x25, 0xc3, 0xac, 0x1e, 0x0e, 0x42, 0x4d, 0x11, 0x2a, 0x9d, + 0x27, 0xa5, 0x8c, 0xa7, 0x8b, 0x6f, 0xaa, 0x00, 0x61, 0x67, 0x94, 0x49, + 0x28, 0x08, 0xb5, 0xe2, 0xb4, 0x8a, 0x05, 0x24, 0x0a, 0xbc, 0x3a, 0x6f, + 0x7e, 0xf5, 0x33, 0x9e, 0x7a, 0x53, 0x0f, 0x70, 0x35, 0x54, 0x02, 0x4d, + 0x89, 0xf0, 0xc1, 0x35, 0x14, 0x66, 0x8c, 0xf8, 0x86, 0x49, 0x47, 0xbb, + 0xf3, 0x72, 0x13, 0x25, 0x41, 0x5c, 0x7b, 0xe7, 0x38, 0xc3, 0x21, 0x48, + 0x2d, 0xea, 0x34, 0x78, 0xd0, 0x19, 0xd2, 0xf2, 0x98, 0xaa, 0x7b, 0x31, + 0x5a, 0x46, 0x8d, 0xc1, 0x3c, 0xc3, 0x9c, 0xc0, 0xb6, 0x7f, 0xb2, 0x9c, + 0x72, 0x61, 0x10, 0x51, 0x26, 0x9b, 0x42, 0x27, 0x9a, 0xa2, 0x5b, 0x94, + 0x2c, 0x61, 0x52, 0x20, 0x9c, 0xa1, 0x68, 0x02, 0x62, 0x88, 0xf7, 0x75, + 0x15, 0xe9, 0xbb, 0x05, 0x4c, 0xc1, 0xb5, 0xa3, 0x43, 0x5d, 0x57, 0x71, + 0xd9, 0xe7, 0xba, 0x6e, 0x19, 0x43, 0x7b, 0xcc, 0xc9, 0x47, 0xeb, 0xc3, + 0xde, 0x0b, 0x9b, 0x87, 0xe2, 0x02, 0x9e, 0x58, 0xc4, 0xaa, 0x2b, 0xb7, + 0x75, 0x0b, 0x78, 0x0c, 0x20, 0xc5, 0x33, 0x0c, 0xcf, 0x83, 0xf0, 0x17, + 0x60, 0xd5, 0x61, 0x97, 0x6a, 0xba, 0xce, 0x15, 0x6f, 0x14, 0x48, 0xc3, + 0x97, 0x16, 0x79, 0xdb, 0x52, 0x9e, 0x28, 0x0a, 0xc4, 0xe1, 0x7b, 0x67, + 0xa5, 0xf5, 0x4b, 0x7e, 0x50, 0x72, 0xac, 0xd4, 0xbd, 0x1f, 0x4b, 0x2c, + 0x4c, 0xc1, 0x33, 0xe6, 0x48, 0x05, 0x69, 0xac, 0x86, 0xfb, 0xe3, 0x68, + 0xd1, 0x02, 0xcc, 0x26, 0x33, 0x8a, 0xcd, 0x89, 0x92, 0xdc, 0x60, 0xb8, + 0x0a, 0xf8, 0x34, 0xdd, 0xf1, 0xb6, 0x15, 0xa2, 0x3b, 0x97, 0x45, 0x3c, + 0x5e, 0x8a, 0x5c, 0x70, 0x5b, 0x5c, 0xf1, 0x91, 0xb7, 0x9c, 0xd3, 0x2f, + 0x30, 0x71, 0x1b, 0xb0, 0x7c, 0x34, 0x1c, 0xf7, 0xc9, 0x3f, 0xc0, 0x55, + 0xb4, 0x85, 0x05, 0x81, 0x16, 0x7f, 0x7a, 0x18, 0x0b, 0xd4, 0x48, 0xc0, + 0xf1, 0x58, 0x58, 0xd0, 0x03, 0x53, 0xb3, 0x90, 0x3c, 0x98, 0x41, 0x69, + 0xa5, 0x24, 0xac, 0x74, 0x64, 0x0f, 0x71, 0x69, 0xc3, 0xc6, 0x91, 0xc0, + 0xe9, 0xfb, 0x36, 0x2c, 0xcc, 0xb6, 0x28, 0x3c, 0x94, 0x03, 0x61, 0x3b, + 0xf5, 0x45, 0xc2, 0x0d, 0xb6, 0xc2, 0x1a, 0xd9, 0x66, 0x15, 0x42, 0x2a, + 0x79, 0xfa, 0x48, 0x10, 0xf5, 0x96, 0x91, 0xf1, 0x6a, 0xbb, 0xb0, 0xac, + 0x18, 0xc0, 0x35, 0xcb, 0x22, 0x33, 0xa8, 0x0a, 0xa7, 0xcb, 0x05, 0x0f, + 0x44, 0x28, 0x3f, 0x01, 0x27, 0x9f, 0x9d, 0xba, 0x4a, 0xc2, 0xd7, 0x12, + 0xa0, 0x73, 0x9d, 0xa5, 0xb5, 0x67, 0x57, 0x76, 0xc2, 0xba, 0xe3, 0x7c, + 0x6d, 0x4c, 0x17, 0xa5, 0x72, 0x30, 0xa3, 0x35, 0x6d, 0xd6, 0x91, 0xb8, + 0x72, 0x78, 0xcb, 0x85, 0x67, 0x3d, 0xcf, 0x0c, 0x13, 0x5c, 0xd6, 0xca, + 0x40, 0x69, 0x72, 0x15, 0x39, 0x6a, 0x67, 0xb0, 0x33, 0x45, 0xb5, 0xaf, + 0x53, 0x71, 0xb7, 0x4e, 0x10, 0x1d, 0x8d, 0x28, 0x42, 0x21, 0xf0, 0x8e, + 0x39, 0x77, 0x0a, 0x86, 0x13, 0x0c, 0xf1, 0x0b, 0x32, 0x74, 0x11, 0xbc, + 0xac, 0x3c, 0xb2, 0x0f, 0x23, 0x4f, 0x26, 0x0a, 0xad, 0x1a, 0x12, 0x20, + 0x87, 0x3b, 0xbd, 0xa9, 0x65, 0x8b, 0x98, 0x23, 0x7e, 0xda, 0x14, 0x06, + 0x5a, 0x48, 0xc7, 0x7f, 0xc2, 0x35, 0x1e, 0x8a, 0xb0, 0x99, 0x5c, 0xc4, + 0x28, 0xc5, 0x81, 0xd4, 0x00, 0x14, 0x1c, 0x1b, 0x6f, 0x31, 0x55, 0x5c, + 0x42, 0xfb, 0x64, 0x9f, 0x89, 0x3c, 0x93, 0x57, 0x0c, 0x8b, 0xc0, 0x05, + 0x85, 0xaa, 0x21, 0x32, 0x76, 0x66, 0xaa, 0x5c, 0x86, 0x1b, 0xa0, 0x1f, + 0xb9, 0x1a, 0x60, 0x62, 0x5b, 0x81, 0x67, 0xc6, 0x63, 0xd6, 0xb8, 0xcc, + 0xb9, 0x38, 0x51, 0xc7, 0x23, 0x6c, 0x88, 0xd8, 0x35, 0x3a, 0x25, 0x02, + 0x6c, 0x87, 0xac, 0xd2, 0xa1, 0x63, 0x74, 0xf2, 0x13, 0xd3, 0x7b, 0x10, + 0xa9, 0x14, 0x3c, 0x7c, 0xca, 0x4c, 0x73, 0xf8, 0x81, 0x92, 0x6c, 0x89, + 0xbc, 0x31, 0xc6, 0x2a, 0xc2, 0xb6, 0x43, 0x85, 0x68, 0x77, 0x60, 0x3d, + 0xd2, 0x4c, 0x03, 0x2b, 0x6a, 0x90, 0xcf, 0x66, 0x10, 0x23, 0xfb, 0x44, + 0x41, 0x98, 0x97, 0xe2, 0x21, 0x68, 0x55, 0x3a, 0x4f, 0xb0, 0x46, 0xa2, + 0xe5, 0xba, 0x78, 0x89, 0x51, 0xce, 0xe1, 0x2c, 0x3d, 0x50, 0x15, 0x56, + 0xca, 0x87, 0x44, 0xfd, 0x47, 0x24, 0x54, 0x46, 0x91, 0x6d, 0x88, 0x06, + 0x5a, 0x52, 0x2c, 0x91, 0x58, 0xa8, 0x2b, 0xf1, 0xb4, 0x95, 0xa9, 0x15, + 0x04, 0xab, 0xcd, 0xe6, 0x77, 0x4f, 0x51, 0xb4, 0x05, 0xd9, 0x94, 0x33, + 0x2b, 0x57, 0x35, 0xd9, 0x25, 0x87, 0x5a, 0xc7, 0xbd, 0xe2, 0x69, 0x27, + 0xfc, 0x90, 0x92, 0x81, 0x1c, 0xaf, 0x61, 0x43, 0x72, 0xb3, 0x57, 0xb8, + 0x8b, 0x3c, 0x23, 0xbb, 0xbc, 0x44, 0xe8, 0x80, 0xb9, 0x8d, 0x79, 0x81, + 0xee, 0xe3, 0x6f, 0x25, 0x5a, 0x46, 0x83, 0xe8, 0x6e, 0xd3, 0xa0, 0x34, + 0x34, 0xe1, 0xc0, 0x75, 0xb3, 0x34, 0x84, 0x29, 0x80, 0x40, 0x95, 0xa6, + 0x47, 0xd5, 0x34, 0x00, 0xd4, 0x80, 0xfd, 0xa3, 0x38, 0x1d, 0xe8, 0x97, + 0xee, 0xc0, 0x82, 0x43, 0xe8, 0xa2, 0xcb, 0x2c, 0x17, 0x4b, 0xf7, 0x9e, + 0xb4, 0xea, 0x3c, 0x76, 0xc4, 0x2d, 0xe8, 0xda, 0x9e, 0xd1, 0xe3, 0x73, + 0x0b, 0xbb, 0x65, 0x59, 0x42, 0xa4, 0x52, 0x40, 0x4a, 0x0e, 0x04, 0x6d, + 0xa8, 0xb0, 0x6f, 0x29, 0xfb, 0x51, 0xb6, 0x90, 0x58, 0xd8, 0xb2, 0x41, + 0x3c, 0x79, 0xc3, 0xdd, 0x8c, 0x8e, 0xf7, 0x53, 0x8f, 0x35, 0xe8, 0xc0, + 0x07, 0xaa, 0x58, 0x67, 0xb8, 0x07, 0x66, 0x02, 0x71, 0x5f, 0xa9, 0x8f, + 0xd7, 0xb8, 0x9c, 0xca, 0x97, 0x64, 0xdb, 0x94, 0xcd, 0xb6, 0x57, 0x41, + 0x34, 0x45, 0xbd, 0x93, 0xe0, 0x95, 0xd7, 0x0b, 0x2e, 0x0e, 0x39, 0x77, + 0x88, 0x02, 0x0a, 0x0f, 0x38, 0xb4, 0x66, 0x77, 0x27, 0x39, 0x21, 0x14, + 0x36, 0x72, 0x73, 0x16, 0x44, 0x7f, 0xe7, 0x46, 0x9d, 0x90, 0xd2, 0x1e, + 0x26, 0x97, 0xc5, 0xd9, 0x61, 0x4a, 0xa6, 0x92, 0x7e, 0xe6, 0x8b, 0x36, + 0x85, 0x73, 0xb1, 0xdd, 0x2b, 0x26, 0xaa, 0x0b, 0x97, 0x06, 0x59, 0x8d, + 0x86, 0x3b, 0x3a, 0xa5, 0xd7, 0x48, 0x58, 0xd5, 0x44, 0x5a, 0x59, 0xb3, + 0x82, 0x98, 0x77, 0xe2, 0x61, 0x78, 0x51, 0x11, 0x15, 0x92, 0x5b, 0x65, + 0xbd, 0x36, 0x72, 0x03, 0xb8, 0x59, 0x2c, 0xe3, 0x4a, 0xcf, 0x2a, 0x67, + 0xcf, 0x80, 0x77, 0x7f, 0xf5, 0xa8, 0xe8, 0x8b, 0x7e, 0x2d, 0xd2, 0x73, + 0x83, 0xf8, 0xc6, 0x65, 0x7a, 0x01, 0x27, 0x04, 0xbd, 0x55, 0x63, 0x74, + 0x31, 0x3c, 0x3d, 0x4f, 0x25, 0x7f, 0x1d, 0x10, 0x4e, 0x2b, 0x5b, 0x63, + 0x1f, 0x41, 0xc5, 0xd8, 0x99, 0x23, 0x44, 0xd8, 0xc9, 0x40, 0x8b, 0x8f, + 0x63, 0xa5, 0xc5, 0xe4, 0x79, 0xb4, 0x32, 0xdc, 0x5c, 0x12, 0x95, 0xc0, + 0x75, 0x94, 0x06, 0x48, 0x26, 0x89, 0xf6, 0x2c, 0x47, 0xf3, 0x0b, 0x29, + 0x1e, 0x3a, 0xa5, 0xa0, 0x4a, 0xb7, 0x62, 0x66, 0x3b, 0x5d, 0xb3, 0x60, + 0xc7, 0x48, 0x1f, 0xe2, 0x90, 0x02, 0xcf, 0xb1, 0x66, 0x16, 0xf5, 0x0c, + 0x1f, 0x1c, 0xb9, 0x3b, 0xb8, 0x82, 0x8d, 0xb2, 0x2a, 0x02, 0xe2, 0xbd, + 0x2e, 0x16, 0x64, 0x33, 0x39, 0x84, 0x36, 0xcb, 0x92, 0x16, 0x19, 0x74, + 0xa6, 0x4c, 0x73, 0xd5, 0x68, 0x57, 0xca, 0xe5, 0xbf, 0x7e, 0xa0, 0x7b, + 0x5a, 0xe9, 0xc9, 0x4d, 0xcb, 0xca, 0xfd, 0xa8, 0x1a, 0xf4, 0xbb, 0x6b, + 0xb2, 0x3a, 0x88, 0x1e, 0x18, 0x1b, 0xb6, 0x90, 0x2b, 0x93, 0x60, 0xbb, + 0xc4, 0xb4, 0x73, 0x0a, 0x6c, 0xaf, 0x51, 0xb7, 0x81, 0x90, 0x91, 0x6e, + 0x50, 0x50, 0x3e, 0x57, 0x29, 0x51, 0x55, 0x55, 0x85, 0x15, 0x67, 0x62, + 0xc5, 0x47, 0xb1, 0x7d, 0x19, 0xb4, 0xe5, 0xd8, 0xc4, 0x3a, 0xa6, 0x3c, + 0xb3, 0x31, 0xa7, 0xe4, 0x4b, 0x21, 0x51, 0xb0, 0xb3, 0x1f, 0x61, 0xa1, + 0xc7, 0x62, 0x86, 0x48, 0xd0, 0x38, 0x1a, 0x7a, 0x9c, 0x4f, 0xdb, 0x2b, + 0x9e, 0x29, 0x98, 0xcb, 0x71, 0x21, 0xac, 0xf2, 0x80, 0xfe, 0xc3, 0x0a, + 0xd6, 0x57, 0x61, 0x95, 0x94, 0xa9, 0xa6, 0xa8, 0x10, 0x61, 0x58, 0xa4, + 0x37, 0x9b, 0x3f, 0xc8, 0x45, 0xa2, 0xf3, 0x69, 0x26, 0x7e, 0x41, 0xc8, + 0x4d, 0x83, 0x09, 0xfb, 0xea, 0x7b, 0xfe, 0x92, 0x01, 0xb6, 0xf2, 0x51, + 0x25, 0x32, 0x6f, 0xa1, 0x0a, 0x19, 0x88, 0x18, 0xad, 0xd1, 0xaa, 0xb6, + 0x01, 0x0a, 0x7d, 0xc2, 0x20, 0xa1, 0x9c, 0x49, 0x0c, 0xc5, 0xcc, 0x24, + 0x78, 0x97, 0x0f, 0x18, 0x3c, 0x2f, 0xeb, 0xd3, 0x46, 0xb3, 0x5c, 0xc6, + 0xa3, 0xa3, 0x99, 0xb2, 0x9b, 0xbc, 0x99, 0xe7, 0xc6, 0x61, 0xd2, 0x7e, + 0xa6, 0x61, 0x20, 0x68, 0x60, 0x9c, 0xfd, 0x91, 0xb8, 0x90, 0xa9, 0xc0, + 0x92, 0xaa, 0xa6, 0x38, 0xc9, 0x23, 0xb1, 0x82, 0x00, 0x1d, 0x54, 0xc8, + 0x7d, 0x09, 0xa4, 0x5e, 0x5b, 0x58, 0xfd, 0x11, 0xbd, 0x39, 0x65, 0xb6, + 0x21, 0xf4, 0x26, 0xf9, 0xc0, 0x9a, 0x79, 0xa3, 0x97, 0x75, 0xd4, 0x14, + 0x4a, 0x64, 0xcf, 0x01, 0x42, 0xc8, 0x58, 0x51, 0x20, 0x55, 0x26, 0x92, + 0xdd, 0x50, 0x3f, 0xa9, 0x9c, 0x20, 0x6f, 0x72, 0x03, 0xfb, 0xd7, 0x65, + 0xe5, 0xe0, 0x94, 0xf4, 0x66, 0x68, 0x91, 0x31, 0x0c, 0xac, 0x0c, 0xb6, + 0xd8, 0xda, 0x16, 0xde, 0x0d, 0x7b, 0x40, 0x79, 0xbb, 0x46, 0x29, 0x63, + 0xd3, 0xbb, 0x50, 0xdb, 0xd7, 0x99, 0x82, 0x5a, 0x89, 0xfc, 0x96, 0x51, + 0x30, 0xc4, 0x29, 0xfc, 0x78, 0xde, 0xc0, 0xbe, 0x87, 0x91, 0xa5, 0xfc, + 0x5c, 0x32, 0x56, 0x09, 0x3b, 0x6a, 0x27, 0x71, 0xb7, 0x4b, 0xaa, 0x0e, + 0x7a, 0x39, 0x2b, 0xe9, 0x78, 0x65, 0x39, 0xc7, 0xd7, 0x79, 0x96, 0x7e, + 0x1c, 0x80, 0x83, 0x59, 0xe6, 0x80, 0x78, 0x65, 0x7c, 0x84, 0x2e, 0x8d, + 0xab, 0x13, 0xcb, 0xdf, 0x6f, 0x7f, 0x8a, 0xdd, 0x04, 0x7f, 0xd5, 0x59, + 0xd7, 0x30, 0x1c, 0x13, 0xf6, 0x01, 0x24, 0x18, 0xda, 0x0e, 0x08, 0x89}, + // ciphertext + {0xf4, 0x99, 0x25, 0x01, 0xcf, 0x2f, 0x2e, 0xae, 0xe6, 0xd1, 0x41, 0x7d, + 0x8d, 0x17, 0x31, 0x7d, 0x61, 0xa3, 0x3d, 0x8c, 0x3b, 0xd6, 0xe8, 0xe8, + 0x5a, 0xba, 0x5e, 0xa7, 0x84, 0x70, 0x77, 0xb3, 0x67, 0x5f, 0x64, 0xc9, + 0xeb, 0x4b, 0xe0, 0x36, 0xbe, 0xe7, 0x2c, 0x51, 0xe1, 0x24, 0xfe, 0x95, + 0x59, 0x4b, 0x97, 0x40, 0x40, 0x1f, 0xb0, 0x90, 0x25, 0xd3, 0xd2, 0xbd, + 0x5e, 0x27, 0x7d, 0x56, 0x25, 0x16, 0xf2, 0xae, 0x98, 0xf0, 0xdd, 0x83, + 0x01, 0xc3, 0xe0, 0x69, 0xa8, 0x1e, 0x39, 0x5b, 0x89, 0x06, 0xb5, 0xee, + 0x05, 0x4f, 0x09, 0x29, 0xc6, 0xc1, 0x12, 0x7b, 0x36, 0x18, 0x6c, 0xd1, + 0x21, 0xb9, 0x60, 0xc5, 0x82, 0xce, 0xf4, 0xbc, 0xa2, 0x4f, 0xd7, 0x0d, + 0x55, 0xa3, 0x38, 0x51, 0xbe, 0xce, 0xdb, 0x0b, 0xe2, 0x36, 0x60, 0x8b, + 0x4a, 0xeb, 0x1a, 0x28, 0xde, 0xd9, 0x73, 0x0b, 0x28, 0xf3, 0xb3, 0xda, + 0x55, 0x33, 0x7f, 0x12, 0xb8, 0x8c, 0xcd, 0x70, 0x73, 0xc1, 0x4e, 0x4d, + 0x81, 0x33, 0xbb, 0x94, 0x9f, 0x65, 0x6a, 0x91, 0x6a, 0x5b, 0xd6, 0x61, + 0xff, 0xd7, 0x32, 0x08, 0x18, 0x31, 0x6d, 0xc6, 0x95, 0xdd, 0x7d, 0x26, + 0xf8, 0xcd, 0xa1, 0x8c, 0x7f, 0x75, 0x22, 0x4d, 0x63, 0x5a, 0xce, 0x8e, + 0x27, 0x6f, 0x74, 0x7e, 0x73, 0xd7, 0x8d, 0x42, 0xec, 0xbf, 0xbc, 0xf8, + 0xd5, 0x4d, 0x5b, 0x54, 0x83, 0xf8, 0x57, 0x41, 0x21, 0xc4, 0x22, 0xe9, + 0x4a, 0x72, 0xe9, 0xba, 0xc3, 0x6d, 0x5c, 0x2f, 0xdd, 0xca, 0xf8, 0xf5, + 0xae, 0xe6, 0xff, 0xbd, 0x4d, 0x29, 0xc1, 0x1e, 0x2f, 0xd2, 0xf2, 0x6e, + 0x93, 0xcb, 0xed, 0x40, 0x57, 0x3f, 0x0d, 0x3a, 0xf8, 0xac, 0x3c, 0xa5, + 0x6f, 0x82, 0x26, 0xd4, 0xfc, 0x5a, 0x17, 0x81, 0x8c, 0x10, 0x87, 0x44, + 0x9b, 0x74, 0x24, 0x8c, 0x2c, 0x9a, 0xd5, 0x2c, 0xc2, 0x79, 0xca, 0xb0, + 0xd2, 0x4c, 0xc7, 0xef, 0xc6, 0x04, 0x99, 0xf9, 0x27, 0xf7, 0xa8, 0x89, + 0x8c, 0x93, 0xe4, 0x2c, 0x08, 0x59, 0xf9, 0xe7, 0x6e, 0xde, 0xe5, 0x39, + 0xf7, 0x37, 0xbc, 0x04, 0x7e, 0x5d, 0xbb, 0xc9, 0xe0, 0xa9, 0x48, 0xec, + 0xec, 0x3d, 0x6c, 0x99, 0x8c, 0xd2, 0xf8, 0x70, 0xc7, 0x85, 0x8a, 0xdf, + 0xc4, 0x95, 0xc8, 0x3c, 0x65, 0xcb, 0x06, 0x9d, 0xf5, 0x57, 0xe2, 0x6e, + 0x6b, 0x0f, 0xa3, 0xf2, 0x18, 0x2b, 0x33, 0xe9, 0x3f, 0xe2, 0xab, 0xe2, + 0xca, 0x6f, 0x55, 0xb3, 0x02, 0x2a, 0x51, 0x8b, 0x7e, 0x88, 0x85, 0xbf, + 0x73, 0x57, 0xd9, 0x9c, 0x5a, 0x8c, 0x49, 0xd1, 0x3d, 0x9d, 0x31, 0xe3, + 0xb8, 0x45, 0xf4, 0x64, 0x1c, 0x8c, 0x18, 0xf4, 0xad, 0x79, 0xc2, 0x5e, + 0x2f, 0x85, 0x45, 0x66, 0xdb, 0x4e, 0xa2, 0x08, 0xcb, 0x0a, 0xf3, 0x30, + 0x27, 0x93, 0xaf, 0x0c, 0xa7, 0x78, 0x49, 0x1c, 0x66, 0x6c, 0x06, 0x64, + 0xea, 0x0f, 0xf3, 0xcc, 0x79, 0xea, 0x6f, 0xf2, 0xf4, 0xdd, 0xa3, 0xa5, + 0x22, 0x8a, 0xbf, 0x63, 0x5e, 0x80, 0x02, 0xfe, 0xc9, 0xeb, 0x37, 0x6b, + 0x7f, 0x70, 0x9e, 0x73, 0xa9, 0xa1, 0x62, 0xab, 0xa9, 0xe1, 0x48, 0x98, + 0xc3, 0xdd, 0xd9, 0x99, 0xf5, 0xd3, 0xec, 0x14, 0xb2, 0x4c, 0xe7, 0x33, + 0xa3, 0x0b, 0x05, 0x29, 0xfa, 0x6b, 0x82, 0x74, 0x82, 0xd3, 0x20, 0x31, + 0x83, 0x2a, 0x90, 0x7f, 0x28, 0x89, 0x25, 0x1b, 0x9a, 0x54, 0xb7, 0x05, + 0xa1, 0x90, 0x97, 0xf7, 0xd8, 0x3f, 0x0e, 0xf1, 0x80, 0x25, 0x1b, 0xd2, + 0xa4, 0x39, 0x8d, 0xd5, 0x00, 0x82, 0x08, 0x63, 0xd0, 0x51, 0xc2, 0xf6, + 0xdf, 0xc1, 0x4d, 0x4e, 0x71, 0x29, 0x39, 0xdc, 0xf9, 0x3d, 0x2a, 0x79, + 0xdd, 0x98, 0x5b, 0x22, 0x02, 0x51, 0x12, 0xcd, 0xbc, 0xbf, 0x2f, 0x29, + 0x31, 0x49, 0xe3, 0x43, 0x99, 0x35, 0x46, 0xfc, 0x8b, 0x5d, 0xc9, 0xcf, + 0xb7, 0x24, 0x4c, 0x9c, 0xdf, 0xae, 0x81, 0x34, 0xfe, 0x71, 0xf1, 0xeb, + 0x60, 0xda, 0xcf, 0xea, 0xa6, 0x3a, 0x61, 0xe8, 0x0e, 0xc0, 0x2b, 0x94, + 0xac, 0xd3, 0xbd, 0xaa, 0x73, 0x05, 0x1a, 0xbc, 0xc5, 0x4d, 0x09, 0x48, + 0x6e, 0x6f, 0xd3, 0xed, 0x32, 0x7a, 0x94, 0x79, 0x26, 0xcb, 0xc2, 0x6b, + 0x18, 0x5f, 0x7f, 0x06, 0x20, 0xed, 0xb7, 0x73, 0xdc, 0x5a, 0xea, 0x75, + 0x71, 0x1b, 0x94, 0xa0, 0x76, 0xe3, 0x06, 0xce, 0xee, 0x1d, 0xa7, 0xae, + 0xec, 0x03, 0xc7, 0x13, 0xd1, 0x93, 0x28, 0x1f, 0x62, 0x10, 0x78, 0x77, + 0xeb, 0x6c, 0x22, 0x38, 0xfc, 0x42, 0x30, 0xd2, 0x63, 0xf3, 0x0c, 0xcd, + 0x17, 0xbf, 0x3d, 0x23, 0x13, 0x80, 0x55, 0x87, 0x4b, 0x3e, 0xd4, 0x41, + 0x52, 0x03, 0xa9, 0xae, 0x36, 0x7f, 0x9a, 0xe5, 0xb2, 0x35, 0xb5, 0xa2, + 0x89, 0x57, 0xee, 0x12, 0xd8, 0xf2, 0x56, 0xac, 0x6f, 0x7b, 0x1f, 0x71, + 0x68, 0xc6, 0x28, 0x1e, 0xe9, 0xaa, 0xba, 0xba, 0xef, 0xf5, 0xed, 0xf2, + 0x4f, 0x9e, 0x4f, 0x11, 0x59, 0x8a, 0xdd, 0xdf, 0x15, 0xe6, 0x2b, 0xc1, + 0xa7, 0x06, 0xa1, 0x9c, 0xf6, 0xe8, 0x27, 0xf0, 0x49, 0xa7, 0xb6, 0x2f, + 0x18, 0x5d, 0x2d, 0x02, 0xd9, 0x23, 0x59, 0xa7, 0x6d, 0x53, 0xc7, 0x68, + 0x52, 0x30, 0x93, 0x4b, 0xcc, 0xf1, 0xd9, 0x9f, 0x49, 0x96, 0x6b, 0xbc, + 0xbf, 0x57, 0x53, 0x95, 0x31, 0x74, 0x9e, 0x79, 0xa3, 0xb1, 0x94, 0xbc, + 0x0a, 0xa6, 0xa4, 0xa1, 0x39, 0xbd, 0x5c, 0x62, 0x2f, 0x65, 0x15, 0x8b, + 0x2c, 0x1e, 0xb1, 0x88, 0x87, 0xf9, 0x98, 0xa9, 0x36, 0x62, 0x77, 0x73, + 0x6c, 0xe4, 0x7f, 0x7b, 0xa7, 0xa2, 0x55, 0xf6, 0xb4, 0x95, 0x3e, 0x32, + 0xe8, 0xe7, 0x0a, 0x18, 0xd1, 0xd1, 0x89, 0x14, 0xd4, 0x95, 0xcc, 0x93, + 0x88, 0x7d, 0x52, 0x3b, 0xa1, 0xd4, 0x83, 0x0a, 0x6c, 0x71, 0xcb, 0x25, + 0x33, 0x23, 0x88, 0x19, 0x51, 0x1d, 0x4e, 0x4a, 0xc6, 0xbc, 0xf7, 0x36, + 0x55, 0x76, 0x59, 0x90, 0x8d, 0x49, 0xaa, 0x58, 0xa2, 0x9a, 0x5e, 0x66, + 0xe4, 0xa1, 0x01, 0x39, 0xf1, 0xa8, 0x83, 0xcd, 0xad, 0xda, 0x4f, 0x2b, + 0x87, 0x4f, 0x89, 0xda, 0xc2, 0xe9, 0xb8, 0x11, 0x03, 0x47, 0xe6, 0x2d, + 0xe7, 0x5c, 0x6b, 0x5d, 0x9d, 0x64, 0xee, 0x11, 0x50, 0x55, 0x4d, 0x3a, + 0xc4, 0x0e, 0xb0, 0xef, 0x49, 0xbe, 0x3d, 0x21, 0xc3, 0xfe, 0x2c, 0x3c, + 0x6a, 0xba, 0x7b, 0xe5, 0x55, 0x03, 0xf9, 0x33, 0x86, 0x4b, 0x8d, 0x0c, + 0x68, 0xc3, 0x8a, 0xe6, 0xe0, 0xac, 0x92, 0xfb, 0xe3, 0x1e, 0xb2, 0xa8, + 0xf5, 0xae, 0x3f, 0x03, 0x1b, 0x1a, 0x20, 0x14, 0x73, 0xb3, 0xed, 0x05, + 0xfb, 0x29, 0x1e, 0x97, 0x38, 0x6e, 0xcf, 0x56, 0xcc, 0xab, 0x59, 0x7f, + 0xa4, 0xcd, 0x43, 0xb0, 0x9e, 0x6d, 0xae, 0xce, 0x3b, 0x24, 0x84, 0x0a, + 0x45, 0x9b, 0xc6, 0x04, 0x55, 0x43, 0xf1, 0x40, 0xe5, 0x2b, 0x98, 0xae, + 0xdf, 0x21, 0xdc, 0x5f, 0x14, 0x07, 0x4f, 0x2e, 0xb6, 0x73, 0x80, 0x06, + 0x04, 0xa5, 0x88, 0xdc, 0x0f, 0x0d, 0x13, 0xa4, 0x82, 0x46, 0xff, 0x3b, + 0xd3, 0x1d, 0x3e, 0xb9, 0xc6, 0xf1, 0x10, 0x39, 0x19, 0x27, 0x32, 0x2f, + 0xc8, 0xf4, 0xc9, 0x60, 0x29, 0x35, 0x43, 0x0d, 0x94, 0xcc, 0x90, 0x33, + 0xbf, 0x18, 0x81, 0xc1, 0xef, 0x80, 0x53, 0x77, 0xc7, 0xd1, 0x0c, 0x55, + 0xa5, 0xaf, 0x25, 0x20, 0xa0, 0xa9, 0xd4, 0x59, 0xec, 0x13, 0xe4, 0xc5, + 0x9c, 0xb8, 0x0c, 0xcf, 0x0a, 0x64, 0xb0, 0x92, 0x85, 0x1d, 0xdc, 0x7d, + 0x41, 0x8a, 0xdd, 0x1c, 0x8b, 0xf9, 0x1e, 0x45, 0x62, 0x34, 0x11, 0xb4, + 0x39, 0x0c, 0xb8, 0x70, 0xf6, 0x3d, 0xbb, 0x9a, 0x01, 0x4e, 0x98, 0xff, + 0x19, 0xd5, 0xc8, 0xf5, 0x4b, 0x64, 0xeb, 0xf9, 0x31, 0xa4, 0x12, 0x4d, + 0x81, 0x33, 0xd7, 0xa9, 0xcb, 0x5a, 0x7d, 0xcf, 0xf8, 0x93, 0x13, 0xf3, + 0x9a, 0x13, 0x07, 0x5c, 0x70, 0xe6, 0x8c, 0xa8, 0xd8, 0x2f, 0x9e, 0x9a, + 0x0e, 0x4e, 0xac, 0x76, 0xab, 0xd1, 0x48, 0xda}, + // secret + {0xdf, 0x79, 0xae, 0xeb, 0x00, 0xa7, 0x00, 0x50, 0x10, 0x72, 0x1c, + 0x0e, 0x93, 0x43, 0xed, 0x2e, 0xc1, 0xb8, 0x37, 0xde, 0x55, 0x61, + 0xd1, 0xe6, 0x8c, 0xcd, 0xe4, 0x37, 0x99, 0x5b, 0xaf, 0x38}, + true}, + // tcID: 93 + {93, + params_ml_kem768_test_mode, + // privateKey + {0xe8, 0x95, 0xb8, 0xdd, 0x5c, 0x29, 0x7c, 0x81, 0x1d, 0x01, 0x28, 0x14, + 0x46, 0xc4, 0x4c, 0x18, 0x27, 0x38, 0xcc, 0x58, 0x50, 0x83, 0xb0, 0x68, + 0xa5, 0xdb, 0xcd, 0x53, 0x68, 0xc8, 0x2e, 0xab, 0x21, 0x41, 0xa1, 0x1b, + 0x01, 0xc2, 0x8b, 0xe8, 0x00, 0xca, 0x93, 0x23, 0x56, 0x37, 0x48, 0x13, + 0x06, 0x4c, 0xc1, 0xa6, 0x0a, 0x72, 0xe5, 0xf4, 0x95, 0x5e, 0xb2, 0x0d, + 0xf1, 0x9c, 0x90, 0x60, 0xc9, 0xbf, 0x2b, 0x0b, 0x4e, 0x05, 0x11, 0x11, + 0x6f, 0x4a, 0x49, 0xee, 0xa6, 0x04, 0xd6, 0x63, 0x38, 0x48, 0xd2, 0x64, + 0xbe, 0xf7, 0x7a, 0x35, 0xf6, 0x43, 0xcb, 0xac, 0x92, 0xf5, 0xb2, 0x5f, + 0x68, 0x60, 0x11, 0xba, 0xa8, 0x75, 0xdf, 0x33, 0x12, 0x1e, 0x84, 0xcd, + 0x6e, 0xf5, 0x1f, 0x09, 0x27, 0xb3, 0xef, 0x4a, 0x2a, 0xfd, 0xc1, 0xbb, + 0x07, 0x12, 0x22, 0xbc, 0xec, 0x47, 0x83, 0x98, 0x75, 0x37, 0x97, 0x41, + 0xee, 0xf2, 0x09, 0xd3, 0xf5, 0x11, 0x8c, 0xa7, 0xaa, 0x10, 0x3a, 0x11, + 0xe7, 0x38, 0xc5, 0xf8, 0x81, 0xbc, 0x60, 0xa6, 0x7f, 0x88, 0xb6, 0xb4, + 0x7e, 0x75, 0x7a, 0x32, 0x34, 0x0e, 0xb6, 0x53, 0xc2, 0xcf, 0x3c, 0x66, + 0x73, 0xcb, 0x41, 0xe8, 0x43, 0xcb, 0x4a, 0x08, 0x75, 0xa2, 0x49, 0x85, + 0x1c, 0xb7, 0xcd, 0xe5, 0xd8, 0x7a, 0x49, 0x17, 0xa5, 0xf0, 0x3c, 0x55, + 0x8f, 0x44, 0x45, 0x1e, 0x43, 0x82, 0xd4, 0xe0, 0x08, 0x2f, 0x48, 0xb4, + 0xde, 0x50, 0x1b, 0x81, 0x32, 0x70, 0xdd, 0xa8, 0x09, 0x03, 0xc8, 0x14, + 0x09, 0xeb, 0x84, 0x70, 0xd1, 0x6b, 0x52, 0xaa, 0xbd, 0x0e, 0xaa, 0x8a, + 0xda, 0x7a, 0xae, 0x24, 0xb9, 0x19, 0xca, 0x95, 0x45, 0x83, 0x34, 0xa4, + 0xab, 0x56, 0x6b, 0x44, 0xf8, 0x65, 0xcc, 0x78, 0xc9, 0xcf, 0xb8, 0x21, + 0x4d, 0x48, 0x85, 0x5d, 0x04, 0x13, 0xf2, 0xeb, 0xc5, 0x13, 0x02, 0x01, + 0x4c, 0xd9, 0x91, 0x29, 0xb6, 0xbd, 0x8a, 0xe1, 0x19, 0x83, 0x60, 0x2d, + 0x1f, 0x05, 0xc4, 0x25, 0x13, 0x8d, 0x6d, 0xe1, 0x7a, 0xa1, 0xf8, 0x70, + 0x04, 0x89, 0x48, 0x3d, 0x20, 0x6b, 0xac, 0xfa, 0x4e, 0x57, 0x46, 0xa6, + 0xce, 0xd9, 0xb6, 0x40, 0x67, 0x85, 0xbf, 0x85, 0xc7, 0x25, 0x26, 0x41, + 0x56, 0x65, 0x11, 0xdb, 0x8c, 0x0f, 0x72, 0xab, 0x75, 0x23, 0x82, 0x37, + 0x4c, 0x72, 0x36, 0x5e, 0x0a, 0x95, 0x48, 0x16, 0x97, 0x18, 0xa9, 0x10, + 0xb2, 0x9b, 0x66, 0x87, 0xaa, 0x99, 0x66, 0x50, 0x5e, 0x86, 0x13, 0x7f, + 0xe8, 0x45, 0xa9, 0x4f, 0x74, 0xbc, 0x01, 0x44, 0x3d, 0xc9, 0xf8, 0x1b, + 0x43, 0xe1, 0x0e, 0x1d, 0x7a, 0x72, 0x65, 0xe0, 0x4b, 0xa4, 0xf7, 0xa7, + 0x33, 0xab, 0xac, 0x6f, 0x63, 0x16, 0xbe, 0x92, 0x29, 0x2b, 0x94, 0x2e, + 0x74, 0xd0, 0x4d, 0xc3, 0x41, 0x93, 0x85, 0xec, 0x3a, 0xd1, 0xc3, 0xa1, + 0x0b, 0xf9, 0x7d, 0xc2, 0xb2, 0x59, 0xde, 0xd6, 0x65, 0xda, 0x72, 0x58, + 0x34, 0x20, 0x59, 0xc2, 0xf1, 0x22, 0x26, 0xd4, 0x65, 0x72, 0xea, 0xb9, + 0xac, 0xd9, 0x74, 0x0e, 0x77, 0x94, 0x06, 0xa7, 0x3c, 0x78, 0x93, 0xaf, + 0x3f, 0x1c, 0x02, 0x7a, 0xc3, 0x7c, 0x5a, 0x74, 0x51, 0xa6, 0xa8, 0x77, + 0x30, 0xb1, 0x05, 0xe0, 0xac, 0x96, 0x45, 0xbb, 0x2c, 0xd1, 0xd2, 0x18, + 0x8b, 0xe4, 0xbe, 0x3f, 0xfc, 0x9b, 0xe5, 0xb9, 0x56, 0xca, 0x46, 0x0b, + 0x50, 0xa4, 0x0d, 0x0c, 0xfa, 0x6b, 0xb6, 0x91, 0x07, 0xdd, 0x17, 0x36, + 0x49, 0x4c, 0x7a, 0xf5, 0x91, 0x48, 0xc2, 0x96, 0x65, 0x5f, 0xd0, 0x63, + 0x0b, 0xb1, 0x44, 0x29, 0xb8, 0x3f, 0x1f, 0x05, 0x7a, 0xa9, 0x20, 0x8b, + 0x3f, 0x11, 0xc0, 0x5b, 0x29, 0xcb, 0x1e, 0xb1, 0x04, 0x4f, 0xd7, 0x3a, + 0xee, 0x65, 0x9c, 0x20, 0x40, 0xc2, 0xf4, 0xdc, 0x8a, 0xb9, 0xf0, 0x66, + 0x41, 0x22, 0x79, 0x3f, 0xe8, 0x9c, 0x25, 0x36, 0x86, 0x9e, 0xf7, 0x1f, + 0x80, 0x62, 0x9e, 0xa0, 0x12, 0x30, 0xec, 0x76, 0x48, 0x97, 0x77, 0x40, + 0xd6, 0xb1, 0x1a, 0x01, 0xfb, 0x88, 0xf8, 0xf9, 0x97, 0x66, 0x69, 0x2a, + 0xdd, 0x58, 0x8c, 0x55, 0x59, 0x1a, 0x61, 0x63, 0x4b, 0x52, 0x79, 0x09, + 0xda, 0x61, 0x78, 0x2e, 0x99, 0x57, 0x18, 0x76, 0x7d, 0x20, 0x61, 0x41, + 0x75, 0xbb, 0x1c, 0x6f, 0xf3, 0x60, 0x37, 0x1a, 0x13, 0x34, 0xd5, 0xb8, + 0x20, 0xab, 0x33, 0xa0, 0x3c, 0x58, 0x2a, 0xc5, 0x16, 0x3f, 0xb6, 0x06, + 0xaa, 0x48, 0x9c, 0x29, 0x38, 0x5d, 0xbe, 0x2b, 0x20, 0x69, 0x93, 0x39, + 0x1f, 0xf3, 0x7f, 0x7c, 0x3b, 0x8b, 0x26, 0x59, 0x39, 0x48, 0x0a, 0xa0, + 0x1a, 0x45, 0x1a, 0xf4, 0x0c, 0x60, 0x7c, 0x18, 0x95, 0x88, 0x91, 0xcd, + 0x8c, 0xc2, 0x19, 0x84, 0xf0, 0x94, 0x26, 0xb2, 0x05, 0x70, 0x89, 0x1e, + 0x3e, 0x09, 0x0d, 0xb6, 0x42, 0x21, 0x74, 0xa0, 0x3f, 0x8d, 0x15, 0x17, + 0x25, 0x12, 0x6d, 0x6c, 0x24, 0x6f, 0xe0, 0xab, 0x02, 0x32, 0x27, 0x9f, + 0xce, 0xc2, 0x74, 0x15, 0xa4, 0x17, 0xce, 0x64, 0x24, 0xb7, 0x0b, 0x32, + 0x01, 0xab, 0x3e, 0x6f, 0x14, 0xae, 0xdc, 0x9a, 0x06, 0x93, 0x30, 0xab, + 0x09, 0x49, 0xa3, 0x0f, 0xda, 0xbc, 0x6c, 0x05, 0x1f, 0xea, 0xd7, 0x37, + 0x05, 0xf2, 0x64, 0x56, 0x84, 0xb7, 0xa7, 0x86, 0x54, 0xe0, 0xcb, 0x53, + 0x12, 0x05, 0xc3, 0xf0, 0x07, 0x80, 0xf2, 0x18, 0x39, 0x2c, 0x33, 0x8d, + 0xec, 0x85, 0x66, 0x25, 0x41, 0x17, 0xcc, 0x18, 0x6a, 0x34, 0x12, 0xab, + 0x43, 0xa2, 0x37, 0xf4, 0x30, 0x6d, 0x68, 0x63, 0x4d, 0x8e, 0xe6, 0x24, + 0xb5, 0x92, 0x83, 0x5a, 0x37, 0x75, 0x7b, 0xd6, 0x45, 0xc7, 0x9c, 0x8e, + 0xdd, 0xdc, 0x5a, 0x33, 0x77, 0x3b, 0x6b, 0x08, 0x60, 0x03, 0x65, 0x48, + 0x94, 0x57, 0x7f, 0x59, 0xf6, 0xbc, 0xb4, 0x67, 0x31, 0xef, 0x66, 0xa9, + 0xa1, 0xb9, 0x60, 0x16, 0xe9, 0x4f, 0x87, 0xf4, 0x19, 0x93, 0x84, 0x46, + 0x0e, 0x02, 0xa4, 0xec, 0x37, 0xa1, 0xba, 0x15, 0x46, 0x10, 0x6b, 0x25, + 0x4e, 0xa5, 0x3a, 0xd6, 0xb4, 0x78, 0x69, 0xf5, 0x56, 0xbb, 0x88, 0xbf, + 0x50, 0x12, 0xce, 0xed, 0xf6, 0x1c, 0x69, 0xf3, 0x55, 0x14, 0x65, 0x22, + 0x2c, 0xb7, 0x58, 0xfe, 0x61, 0xbb, 0x28, 0xb5, 0x41, 0xea, 0x4c, 0xc2, + 0x8f, 0x71, 0xaf, 0x5d, 0x11, 0x5b, 0x7f, 0xa2, 0x56, 0x12, 0x6b, 0x03, + 0x29, 0xc5, 0x79, 0xe8, 0x54, 0x25, 0xb3, 0xc9, 0xa9, 0x42, 0xb8, 0x1f, + 0xf8, 0x66, 0x6c, 0x57, 0xd2, 0x0f, 0xc1, 0x44, 0x3a, 0xa6, 0xb5, 0x40, + 0x4b, 0x47, 0x72, 0x40, 0x27, 0x1a, 0xbe, 0x35, 0x66, 0xcd, 0x28, 0xc0, + 0xaf, 0x52, 0x03, 0xe6, 0x98, 0x1d, 0x18, 0x2b, 0x10, 0x33, 0x3b, 0xc0, + 0xcc, 0x62, 0xce, 0x7f, 0x12, 0x4c, 0xa3, 0x45, 0xa0, 0xcf, 0x55, 0x60, + 0x1e, 0xc9, 0x2a, 0x14, 0xd7, 0x78, 0x3a, 0x56, 0x71, 0x05, 0x4c, 0x14, + 0xc2, 0x45, 0x33, 0x75, 0x4b, 0xbb, 0x12, 0x94, 0x7d, 0x2a, 0x4b, 0x24, + 0x16, 0x89, 0x32, 0xce, 0xd4, 0x8e, 0x69, 0xe6, 0x19, 0xa8, 0x06, 0xc3, + 0xc1, 0xdc, 0xae, 0x30, 0x49, 0x50, 0x18, 0xf0, 0x8b, 0x02, 0xe6, 0x67, + 0x49, 0xe3, 0xb8, 0x0f, 0x68, 0x6c, 0x32, 0xa9, 0x83, 0x3f, 0x37, 0x37, + 0x15, 0x48, 0x54, 0x47, 0x88, 0x39, 0xb1, 0x7a, 0xca, 0xa4, 0xeb, 0xa9, + 0x8a, 0xc5, 0x7b, 0x18, 0x79, 0xbc, 0x1e, 0x34, 0x8c, 0xdd, 0x46, 0x31, + 0x09, 0x13, 0x86, 0xda, 0xa3, 0x8e, 0x12, 0xeb, 0x1d, 0xb6, 0x4a, 0xaa, + 0xb1, 0x7c, 0x44, 0x1c, 0x8a, 0x15, 0x59, 0x49, 0xc2, 0x33, 0x57, 0x55, + 0x2e, 0xc1, 0xa4, 0xe7, 0xe5, 0x68, 0x82, 0x38, 0x04, 0xa0, 0xc0, 0xb3, + 0x5a, 0xab, 0x09, 0x02, 0xaa, 0x3e, 0x5e, 0x18, 0xc4, 0x78, 0xd4, 0x8f, + 0x24, 0xa2, 0xb4, 0xe2, 0x05, 0x33, 0x1f, 0x25, 0xad, 0x50, 0x69, 0xae, + 0xad, 0xf6, 0xc2, 0x93, 0xd6, 0x89, 0x33, 0xe8, 0x5b, 0x27, 0xe2, 0x15, + 0x8f, 0xbc, 0x48, 0x41, 0xbb, 0x87, 0x3a, 0x75, 0x89, 0x99, 0xd1, 0x51, + 0x7a, 0x87, 0xa4, 0xdc, 0x89, 0xc4, 0x2d, 0xcc, 0x69, 0xc2, 0xd1, 0x8f, + 0x8c, 0x09, 0x0d, 0x1b, 0x34, 0x52, 0x41, 0x14, 0x51, 0x30, 0x7b, 0xa7, + 0xc0, 0x8c, 0x60, 0x2f, 0x97, 0x54, 0xf1, 0xc4, 0x5b, 0x6a, 0x37, 0x6a, + 0xf3, 0x5b, 0x36, 0xcf, 0x32, 0x7f, 0xfb, 0x95, 0x86, 0xa8, 0xd2, 0x3e, + 0xdc, 0xf4, 0xc1, 0x73, 0x9c, 0x96, 0x43, 0xe9, 0x6a, 0x61, 0x34, 0x96, + 0xbe, 0xf0, 0xa4, 0x77, 0xb0, 0x97, 0xd6, 0x2a, 0x9e, 0x4e, 0x93, 0xb0, + 0x27, 0x4b, 0x50, 0x3e, 0x5a, 0x32, 0x2f, 0x10, 0xc4, 0xc0, 0x19, 0xae, + 0x18, 0xeb, 0x80, 0xc1, 0x36, 0xad, 0xfb, 0xc9, 0x54, 0x89, 0xec, 0x34, + 0x0e, 0x59, 0x22, 0x1c, 0x12, 0x01, 0x3a, 0x05, 0x25, 0xbc, 0x3c, 0x5c, + 0x7c, 0xb5, 0x6c, 0x62, 0x83, 0xaa, 0x12, 0xe2, 0xb0, 0x58, 0xb9, 0xa1, + 0x6e, 0xe7, 0x48, 0xc1, 0xe6, 0x13, 0xa2, 0xc0, 0x38, 0x01, 0xe4, 0x4e, + 0x39, 0xc6, 0x98, 0x94, 0x21, 0xa6, 0x52, 0x92, 0x27, 0xbc, 0x81, 0x1a, + 0x73, 0xb2, 0x30, 0x1d, 0x98, 0x11, 0x52, 0x47, 0x6f, 0xf6, 0x63, 0x24, + 0x11, 0x61, 0x7e, 0xed, 0x11, 0x0c, 0x5d, 0xc4, 0x48, 0xc8, 0xb7, 0x06, + 0xac, 0xb4, 0x8d, 0x4e, 0x27, 0x81, 0xc3, 0x90, 0x40, 0x53, 0x81, 0x7d, + 0x07, 0xb5, 0x6e, 0x9a, 0x2c, 0x24, 0xa3, 0x10, 0x97, 0x10, 0x20, 0x88, + 0x42, 0x79, 0x2b, 0x67, 0xe2, 0xb5, 0xe2, 0xb5, 0x76, 0x66, 0x79, 0x85, + 0x15, 0x96, 0x94, 0xca, 0x05, 0x90, 0xaa, 0x4b, 0x0c, 0x89, 0x78, 0xbf, + 0x5f, 0xca, 0x96, 0xa7, 0x25, 0xcd, 0xd1, 0x02, 0x12, 0xae, 0x92, 0x55, + 0x6b, 0xdc, 0x00, 0x0b, 0xc7, 0x74, 0x14, 0xd2, 0x0b, 0xda, 0x25, 0x7e, + 0x5d, 0x55, 0x9a, 0xeb, 0x4b, 0xc7, 0x5c, 0x06, 0x52, 0xf8, 0xc5, 0x83, + 0x41, 0x67, 0x74, 0x9e, 0x58, 0x9f, 0x29, 0x15, 0xa4, 0xf9, 0xc4, 0x06, + 0xf5, 0x20, 0x86, 0x9f, 0x23, 0x4b, 0xc3, 0x2b, 0x6c, 0x72, 0xc5, 0x7e, + 0x72, 0x97, 0xb1, 0xc5, 0xa6, 0x84, 0x97, 0xa4, 0xc1, 0x3b, 0x53, 0x25, + 0x59, 0x15, 0xb3, 0x72, 0x40, 0x6a, 0xee, 0x46, 0xb3, 0xa7, 0xb4, 0x18, + 0xfd, 0xd4, 0x39, 0xcc, 0xe0, 0x23, 0x22, 0x2b, 0xca, 0xe7, 0x8c, 0x9b, + 0x40, 0x5a, 0x39, 0x6d, 0x66, 0x56, 0x89, 0x17, 0x7a, 0x7a, 0xd3, 0x60, + 0x73, 0x0b, 0x37, 0x0e, 0x69, 0xa7, 0x6a, 0x56, 0xc4, 0x22, 0x8a, 0x90, + 0x89, 0x69, 0x5d, 0x0d, 0x7c, 0x43, 0xc6, 0xd0, 0x42, 0xaa, 0x01, 0xaa, + 0x2f, 0xea, 0x70, 0x25, 0xc3, 0x91, 0x25, 0x39, 0x06, 0xfa, 0xa9, 0x7a, + 0xcc, 0xb7, 0x41, 0x49, 0xf4, 0xc4, 0x4c, 0x90, 0x2c, 0x0a, 0x63, 0x36, + 0xdd, 0x76, 0x34, 0x75, 0x78, 0xc8, 0x80, 0x58, 0xc4, 0xae, 0x7a, 0x54, + 0x90, 0x8a, 0x85, 0x37, 0x45, 0x97, 0x1c, 0x7a, 0x03, 0x65, 0xdb, 0x8c, + 0xe9, 0x43, 0x3a, 0x16, 0x86, 0xc7, 0xc7, 0xd1, 0x68, 0x40, 0xf6, 0x72, + 0x5b, 0x25, 0x4a, 0x51, 0xd2, 0xa8, 0xdc, 0x65, 0x9b, 0x6a, 0x92, 0x7b, + 0x5e, 0xc0, 0x74, 0x35, 0x2b, 0xab, 0x3f, 0x55, 0x9d, 0xb7, 0x18, 0x12, + 0xe2, 0xda, 0x04, 0x5d, 0x9c, 0x10, 0xb1, 0x3a, 0x17, 0x84, 0xe4, 0x6b, + 0xc7, 0xe9, 0x26, 0xd0, 0x18, 0x14, 0x5d, 0x78, 0x9b, 0x78, 0xa7, 0xc6, + 0x5b, 0x61, 0xcd, 0xd1, 0x32, 0x48, 0x59, 0xf3, 0x0a, 0x42, 0xa1, 0x68, + 0x21, 0x9b, 0x1d, 0x55, 0x00, 0x52, 0x7d, 0xf2, 0x05, 0x00, 0x1d, 0x4d, + 0x5e, 0xc6, 0x65, 0x34, 0xfb, 0x33, 0xb8, 0x41, 0x0c, 0x5e, 0xb0, 0xcc, + 0x0e, 0xf1, 0x5f, 0xa3, 0x44, 0x72, 0x3b, 0x2a, 0x7b, 0x4c, 0x0a, 0x52, + 0x0b, 0x60, 0x56, 0x2d, 0x34, 0x14, 0x86, 0xc3, 0x10, 0x3a, 0x32, 0x93, + 0x32, 0x98, 0x90, 0x57, 0xda, 0x75, 0x27, 0x45, 0x79, 0xf7, 0xa6, 0xaa, + 0x62, 0xd5, 0x1e, 0xf9, 0x8a, 0x9e, 0x93, 0x1c, 0x56, 0x54, 0xab, 0x12, + 0x61, 0x04, 0x87, 0x92, 0x31, 0xc4, 0xc1, 0xb4, 0x3e, 0x2f, 0x37, 0xb3, + 0xe7, 0xe1, 0x8a, 0xb1, 0x3a, 0x35, 0x2d, 0xb6, 0x53, 0x67, 0xc3, 0x92, + 0xca, 0x67, 0x21, 0xa4, 0x3a, 0x2c, 0x1d, 0x2b, 0x8e, 0xcf, 0xdc, 0x5f, + 0x59, 0x15, 0x04, 0x73, 0xe2, 0x65, 0x9f, 0xc0, 0xc5, 0x7c, 0xdb, 0x91, + 0x68, 0x1c, 0x28, 0xde, 0xb5, 0x29, 0x2c, 0x37, 0x66, 0x08, 0x49, 0x7d, + 0x87, 0x11, 0x9f, 0x85, 0xd2, 0xa9, 0x94, 0xc4, 0x8a, 0xeb, 0xc8, 0x16, + 0x65, 0x89, 0x12, 0x4d, 0x6b, 0x5e, 0x20, 0xe3, 0x5e, 0x4e, 0x52, 0x27, + 0x51, 0x38, 0xaf, 0x51, 0x8b, 0x19, 0xc3, 0x7a, 0xa8, 0xb0, 0x67, 0x9b, + 0x5d, 0xe9, 0x8e, 0xa6, 0x13, 0x81, 0xbd, 0x51, 0x35, 0x35, 0xe7, 0x84, + 0x7d, 0x6c, 0x9c, 0x3f, 0xc5, 0x8a, 0x6a, 0x48, 0x9f, 0xde, 0x1c, 0x33, + 0x45, 0x6a, 0xaa, 0xea, 0xe9, 0x24, 0x59, 0xb5, 0xbb, 0x40, 0x73, 0x80, + 0x8f, 0x4c, 0x51, 0x2c, 0xd8, 0xc0, 0x6f, 0x99, 0x32, 0x6a, 0xc2, 0x70, + 0x10, 0x85, 0xc7, 0x11, 0xd7, 0x8d, 0x8d, 0x41, 0x91, 0x6a, 0xd9, 0x3f, + 0x63, 0x62, 0x6d, 0x27, 0x15, 0xc1, 0x88, 0x18, 0x54, 0x53, 0x04, 0x53, + 0xd6, 0x9b, 0x9a, 0x86, 0x44, 0x8a, 0x50, 0xf1, 0x80, 0x93, 0x70, 0xb6, + 0x9b, 0x64, 0x5d, 0xb9, 0x0b, 0x04, 0xaa, 0x27, 0xa9, 0x97, 0xa9, 0xbf, + 0x1c, 0x00, 0x93, 0x74, 0x04, 0x9f, 0x55, 0xb7, 0x74, 0x97, 0xe6, 0xaf, + 0x62, 0x25, 0x65, 0x68, 0x68, 0x25, 0xdd, 0xa3, 0x21, 0xd6, 0x40, 0x05, + 0xd4, 0xd4, 0x57, 0x30, 0x88, 0x64, 0xe3, 0x52, 0xc6, 0xff, 0x34, 0x5b, + 0x17, 0xa5, 0x7f, 0xda, 0x64, 0x02, 0x2f, 0x05, 0xa8, 0x0c, 0xa6, 0x1a, + 0x64, 0x4b, 0xaf, 0xb7, 0x90, 0x6b, 0x38, 0xf1, 0x25, 0x5a, 0x67, 0x73, + 0x00, 0x73, 0x9a, 0x85, 0xdb, 0xb1, 0xc0, 0xec, 0xc0, 0xc3, 0x49, 0x3f, + 0xfa, 0xcc, 0x02, 0x3f, 0x3b, 0x95, 0x41, 0xd2, 0x17, 0xdd, 0x82, 0xa4, + 0x18, 0x5c, 0x6b, 0xd1, 0xb0, 0x11, 0xe8, 0xb9, 0xc4, 0xec, 0xa7, 0x18, + 0x24, 0x65, 0x1b, 0x1a, 0xa4, 0x1e, 0xb0, 0x7a, 0xc5, 0xeb, 0x07, 0xb9, + 0x11, 0x93, 0x74, 0x98, 0x4b, 0x99, 0xa5, 0x73, 0x07, 0xc5, 0xe6, 0x08, + 0x98, 0x9a, 0x20, 0x1a, 0xd1, 0x18, 0xc1, 0xa0, 0x6f, 0xbc, 0xa6, 0x14, + 0x14, 0x4c, 0x84, 0x81, 0x71, 0x4b, 0x77, 0xd5, 0xb8, 0x21, 0xcc, 0x0b, + 0x50, 0xf8, 0x0c, 0x91, 0x44, 0x3a, 0x92, 0x42, 0x0d, 0xb8, 0x10, 0x9e, + 0xce, 0x06, 0x86, 0xe0, 0x0a, 0xb1, 0x30, 0xdc, 0x67, 0xc7, 0xa8, 0x67, + 0xcd, 0x3a, 0x27, 0xa7, 0xbc, 0x27, 0xf3, 0xac, 0x19, 0xd6, 0x15, 0x9f, + 0x3d, 0x00, 0x63, 0xf8, 0xdc, 0x11, 0xfb, 0x84, 0x1a, 0xd8, 0x3b, 0xbd, + 0xc8, 0xa1, 0x58, 0x1c, 0x69, 0xc5, 0xf9, 0xd0, 0x18, 0x05, 0x50, 0x09, + 0x18, 0xc4, 0x96, 0xf3, 0xe4, 0x8f, 0x52, 0x91, 0x12, 0xf0, 0xbb, 0x89, + 0xc4, 0x95, 0x59, 0x9e, 0x14, 0xb0, 0xd2, 0x7b, 0x1d, 0x68, 0xc7, 0x7a, + 0x7f, 0xd2, 0x4e, 0x44, 0x02, 0xa5, 0xc9, 0x3c, 0x9f, 0x81, 0x04, 0x04, + 0x48, 0xb6, 0x7a, 0x92, 0x6c, 0x88, 0x05, 0xf9, 0xac, 0x34, 0x99, 0x0f, + 0x0b, 0x13, 0x1f, 0x5e, 0x8a, 0x4a, 0x09, 0xe7, 0x7e, 0x9f, 0xb3, 0x80, + 0xb6, 0x2a, 0x52, 0x24, 0x03, 0x0e, 0xd0, 0x66, 0x3e, 0x05, 0xab, 0xac, + 0xb6, 0x43, 0x32, 0xab, 0xbb, 0x4d, 0x88, 0x16, 0x45, 0x6e, 0x57, 0x80, + 0xf6, 0x99, 0x30, 0xc5, 0x13, 0x55, 0xa3, 0xf7, 0x0b, 0xae, 0xe8, 0x96, + 0xcd, 0xfa, 0x61, 0xa1, 0x41, 0x95, 0x70, 0xc3, 0x13, 0x41, 0xdb, 0xa6, + 0x62, 0x65, 0x5d, 0x92, 0xb5, 0x07, 0xfe, 0x33, 0x6d, 0x1a, 0x58, 0xb0, + 0x70, 0x2c, 0x4a, 0x98, 0xc2, 0x96, 0x5e, 0x43, 0x62, 0xfd, 0x56, 0x14, + 0x7b, 0x29, 0x9e, 0x5a, 0x0b, 0x20, 0xde, 0xc6, 0x15, 0x8e, 0xc8, 0x87, + 0x4c, 0x25, 0x57, 0x8e, 0xfa, 0x4f, 0x22, 0x8b, 0xb7, 0x39, 0x79, 0x20, + 0x8a, 0xc0, 0xa4, 0xff, 0x12, 0x88, 0x28, 0x8a, 0xa3, 0xb2, 0xf5, 0x7c, + 0x69, 0xd3, 0x37, 0x90, 0xf7, 0x22, 0x4e, 0xe7, 0x69, 0xab, 0xa0, 0x40, + 0x6b, 0x03, 0x5a, 0x9a, 0x4c, 0x8c, 0x28, 0x12, 0xcd, 0xf3, 0x21, 0xb7, + 0x4a, 0x87, 0x5b, 0xb0, 0xb9, 0x04, 0x1e, 0xf9, 0x2e, 0x0d, 0x27, 0xb7, + 0x1a, 0x36, 0x02, 0xd6, 0xcc, 0xad, 0xd8, 0x82, 0x56, 0x81, 0x35, 0xae, + 0xc5, 0x80, 0x0d, 0x65, 0xac, 0x16, 0x91, 0x4b, 0x59, 0x7b, 0x52, 0x6e, + 0x9c, 0x83, 0xb5, 0x9c, 0xd2, 0xae, 0xc3, 0x82, 0x5a, 0x24, 0xac, 0x8e, + 0x9a, 0xcb, 0x9e, 0x80, 0x22, 0x0b, 0x97, 0x88, 0x1c, 0x96, 0x50, 0xc2, + 0xd3, 0xe4, 0x96, 0xf8, 0x88, 0x26, 0x5d, 0x60, 0x74, 0x7a, 0xeb, 0xbd, + 0xf1, 0x8e, 0x7a, 0x76, 0x6e, 0x04, 0x2f, 0x45, 0x64, 0x72, 0xc7, 0x65, + 0xa7, 0x58, 0xb9, 0xaf, 0xad, 0xc7, 0xde, 0x35, 0xb8, 0xf9, 0x51, 0x8d, + 0xf3, 0x0b, 0x79, 0x1f, 0x17, 0x8a, 0x7f, 0x57, 0x23, 0xb3, 0x27, 0x23, + 0xa4, 0x4f, 0xd9, 0xe2, 0x41, 0xee, 0x02, 0x82, 0x60, 0x39, 0x09, 0x84, + 0xe1, 0x16, 0xcd, 0x06, 0x43, 0x23, 0x42, 0x7a, 0x8b, 0x6c, 0x55, 0x22, + 0xb8, 0x8e, 0x4b, 0x71, 0x0e, 0x8c, 0x82, 0x83, 0xee, 0x87, 0x87, 0x18, + 0x31, 0x76, 0xbf, 0x4a, 0xd2, 0x8f, 0x8f, 0x2e, 0xf2, 0xf0, 0x18, 0x56, + 0xa2, 0xee, 0x84, 0xa9, 0x71, 0x5d, 0x10, 0x31, 0x58, 0xe0, 0x5f, 0x00}, + // ciphertext + {0x15, 0x98, 0xc2, 0x0d, 0xea, 0xf7, 0x00, 0xaa, 0xbe, 0x25, 0x92, 0xe5, + 0x08, 0x32, 0xb9, 0xdf, 0xc3, 0x3c, 0xf7, 0x8b, 0x8b, 0xc7, 0x1b, 0x0a, + 0x73, 0x05, 0x9f, 0x3c, 0x01, 0xf8, 0xde, 0x71, 0x9f, 0x65, 0xa0, 0x62, + 0x37, 0x34, 0x28, 0x1c, 0xdf, 0x12, 0xe1, 0xae, 0x62, 0x84, 0xac, 0x56, + 0x68, 0xb8, 0xf0, 0xf7, 0x58, 0xa1, 0x21, 0x61, 0x36, 0x52, 0x8c, 0x00, + 0xf3, 0x18, 0x10, 0xa2, 0x93, 0xc0, 0x5d, 0x44, 0x32, 0xbb, 0x63, 0xf3, + 0xce, 0x61, 0x23, 0x9f, 0xcd, 0xd3, 0xff, 0x45, 0xdd, 0x1a, 0x50, 0xff, + 0xd2, 0xdb, 0x04, 0x21, 0x5f, 0xf5, 0x66, 0xca, 0x9e, 0x9a, 0xa9, 0xe3, + 0x7d, 0xa8, 0xe7, 0x8b, 0xf2, 0x79, 0xa0, 0x83, 0x01, 0xaa, 0xc7, 0x79, + 0xe3, 0x75, 0x2f, 0x05, 0xab, 0x33, 0xd2, 0xdc, 0xb7, 0x75, 0x1e, 0xf3, + 0xa1, 0x8d, 0x99, 0xb5, 0x31, 0xec, 0xdb, 0x7c, 0x09, 0x86, 0xb3, 0x5c, + 0x0a, 0xef, 0x64, 0x89, 0x7b, 0xf2, 0x4a, 0x97, 0xe4, 0x80, 0xc0, 0x59, + 0x88, 0xa1, 0x36, 0x39, 0x6f, 0x9a, 0xa2, 0x9e, 0xa7, 0x3d, 0xe7, 0x7f, + 0xf4, 0x17, 0x88, 0x19, 0x9c, 0x20, 0x78, 0x29, 0xfc, 0xd2, 0xda, 0x68, + 0xc2, 0xda, 0xfa, 0x3e, 0xa3, 0xa0, 0xc6, 0x78, 0x3f, 0x9a, 0x16, 0x78, + 0xf5, 0xe6, 0xe8, 0x1e, 0x84, 0x42, 0x5d, 0x0a, 0xd2, 0x6a, 0x8a, 0x84, + 0xfa, 0x09, 0xdb, 0xd2, 0x7d, 0x3c, 0x8d, 0xf5, 0x2a, 0x54, 0x72, 0x1e, + 0xb0, 0x8a, 0xdf, 0x7d, 0xb3, 0xba, 0x9d, 0x87, 0x7a, 0x6c, 0x11, 0x6c, + 0x40, 0x8b, 0x5c, 0x7b, 0xf9, 0xc0, 0x1c, 0x0e, 0xb6, 0x1d, 0xd9, 0xf0, + 0x2d, 0x64, 0x5a, 0x4a, 0x74, 0x4e, 0xd5, 0xac, 0x75, 0xfc, 0xe2, 0x75, + 0x1c, 0x42, 0x53, 0x69, 0x39, 0x12, 0xd3, 0xa9, 0xa7, 0x1e, 0x46, 0x9a, + 0x3a, 0x72, 0x34, 0xca, 0x28, 0x8d, 0xe9, 0x93, 0xfb, 0xda, 0x9c, 0xae, + 0xba, 0x8a, 0x53, 0x65, 0x8e, 0xec, 0x19, 0xd8, 0x95, 0x07, 0x76, 0xfb, + 0x33, 0x2d, 0xd0, 0xd6, 0xf6, 0x4d, 0xcc, 0xbd, 0xe2, 0x38, 0xf2, 0xe7, + 0xba, 0xbc, 0x82, 0xbb, 0xde, 0x66, 0xfb, 0x20, 0x2a, 0x88, 0xd2, 0x2e, + 0xe1, 0xc0, 0x39, 0xaf, 0x09, 0x21, 0xf8, 0x93, 0x68, 0x9b, 0x23, 0xad, + 0x28, 0xd3, 0xba, 0x7d, 0x8d, 0xb8, 0x7f, 0x5a, 0xc2, 0x29, 0x73, 0x3d, + 0xaf, 0x12, 0xfd, 0x5b, 0x10, 0xde, 0x45, 0x20, 0x35, 0xd7, 0x20, 0x4f, + 0x99, 0x6a, 0xf5, 0x1b, 0x0f, 0x0f, 0x7c, 0x2a, 0x13, 0xbf, 0x42, 0x55, + 0xe9, 0xa3, 0x71, 0x57, 0xf2, 0x6b, 0x97, 0xbc, 0xe1, 0xba, 0x50, 0xa7, + 0x2b, 0x9f, 0xc9, 0xfa, 0x16, 0x6c, 0xc8, 0xd4, 0x99, 0xa1, 0xbf, 0xa9, + 0x6b, 0xd4, 0xa8, 0xeb, 0x5f, 0xcc, 0x86, 0x59, 0xc8, 0xf6, 0xea, 0xf3, + 0x81, 0xfb, 0x96, 0x88, 0x35, 0x44, 0x0a, 0xcd, 0x41, 0xd8, 0x04, 0x50, + 0x54, 0x8d, 0xcd, 0xac, 0xae, 0xd4, 0x00, 0xe0, 0xee, 0x3f, 0xb9, 0xbc, + 0x7c, 0x18, 0x0b, 0x53, 0xfd, 0xed, 0xa2, 0x0f, 0x7e, 0xdd, 0x50, 0xb4, + 0x67, 0xed, 0x08, 0x2f, 0x40, 0x84, 0x52, 0x31, 0x4c, 0x42, 0xf6, 0xe3, + 0xa7, 0x79, 0x79, 0x37, 0x9c, 0xc0, 0xdd, 0x83, 0xf1, 0xfe, 0x1a, 0x8a, + 0x9d, 0xb4, 0xdb, 0xe0, 0x99, 0x93, 0x65, 0xb1, 0x4b, 0x9d, 0x75, 0xe9, + 0xad, 0x55, 0x33, 0xcc, 0xd5, 0x19, 0x30, 0x29, 0x04, 0x12, 0x6c, 0x18, + 0xab, 0xf5, 0xce, 0x0e, 0xbf, 0xf5, 0xdc, 0xb9, 0x08, 0x09, 0x50, 0x0f, + 0x5b, 0x68, 0x8a, 0x9a, 0xf4, 0x8d, 0x64, 0xfe, 0xf6, 0xcc, 0x2b, 0xee, + 0x95, 0x59, 0x06, 0x77, 0x6f, 0x3b, 0xed, 0x17, 0x45, 0xcb, 0x8c, 0xd7, + 0x30, 0x63, 0xf5, 0x44, 0x5f, 0x69, 0x6a, 0x07, 0x3c, 0x37, 0x0d, 0xec, + 0xe0, 0x9f, 0xa0, 0x71, 0xb6, 0x6d, 0xe6, 0xb9, 0x0c, 0x9d, 0x3b, 0x62, + 0xd9, 0x4e, 0x44, 0xf4, 0x0d, 0xae, 0x75, 0x56, 0x2f, 0x5f, 0x72, 0x2c, + 0x55, 0xc1, 0x3c, 0xce, 0x60, 0x59, 0xa9, 0x15, 0x6d, 0xc9, 0x17, 0xa7, + 0xaa, 0x2d, 0x28, 0x88, 0x7c, 0x06, 0x84, 0x1b, 0x01, 0xe4, 0x8e, 0xd5, + 0xf1, 0xe1, 0x59, 0x3f, 0xe3, 0x8b, 0xe1, 0x65, 0x71, 0x60, 0x81, 0xe5, + 0x28, 0x7b, 0x74, 0x7d, 0xc8, 0xbb, 0x58, 0x66, 0x6d, 0x65, 0xe2, 0x2a, + 0xc7, 0x33, 0xce, 0x77, 0x0d, 0xfb, 0x83, 0x5a, 0xc6, 0x3e, 0x27, 0xb1, + 0xb9, 0x65, 0x20, 0xfa, 0x4d, 0x7c, 0x46, 0x69, 0x13, 0x11, 0x32, 0xfd, + 0xc9, 0x2f, 0x8f, 0xb5, 0xb4, 0x56, 0x2f, 0x72, 0xa9, 0x3a, 0x82, 0x4e, + 0x31, 0x74, 0xb4, 0xa0, 0xcf, 0x04, 0xcf, 0xb1, 0xcf, 0x6d, 0x42, 0x51, + 0x12, 0xd7, 0xf2, 0xdb, 0x61, 0xe8, 0xc8, 0xfa, 0x6e, 0x98, 0x3d, 0x1b, + 0x11, 0x0b, 0x1b, 0xb5, 0x08, 0xa6, 0xbd, 0x37, 0x83, 0x87, 0x56, 0xf9, + 0xce, 0x50, 0x63, 0xd8, 0x74, 0xe7, 0xe1, 0x89, 0xc9, 0xcd, 0x42, 0x22, + 0xa6, 0x4b, 0xd5, 0x28, 0xf5, 0x32, 0x25, 0x5d, 0xe8, 0x25, 0xcd, 0x2b, + 0x95, 0x4c, 0x92, 0x73, 0xf7, 0xa1, 0xec, 0x6a, 0x85, 0x55, 0x5c, 0xc1, + 0x3d, 0xdf, 0x16, 0xd7, 0x23, 0x6c, 0x78, 0x39, 0x59, 0x7d, 0x7f, 0x36, + 0x6c, 0xda, 0xee, 0xc1, 0x9c, 0x62, 0x26, 0x9a, 0x9d, 0x29, 0x57, 0x55, + 0x0d, 0x9b, 0x5d, 0x97, 0xcc, 0x3a, 0xb3, 0x15, 0x35, 0x3c, 0x5a, 0x5e, + 0xb9, 0x45, 0xdb, 0x6f, 0x9d, 0x8e, 0x78, 0x10, 0xa2, 0x86, 0x69, 0xc5, + 0xe4, 0xdb, 0x3e, 0xcd, 0xc6, 0x57, 0x13, 0x9b, 0x67, 0x47, 0x7c, 0x28, + 0x90, 0x43, 0x02, 0x4c, 0xa1, 0xb3, 0x7e, 0x23, 0x05, 0xa2, 0x06, 0xfe, + 0x73, 0x90, 0x75, 0xa5, 0x62, 0x54, 0x3e, 0xfe, 0x71, 0x06, 0x63, 0xf7, + 0xb4, 0x79, 0xac, 0x9d, 0x56, 0x42, 0x54, 0x53, 0x01, 0xd4, 0x1a, 0x65, + 0x53, 0x79, 0xb3, 0x1c, 0x3c, 0xa4, 0xb1, 0x78, 0xf2, 0x3e, 0x12, 0xe8, + 0x08, 0x55, 0x17, 0x6a, 0xff, 0x78, 0x32, 0x5c, 0x41, 0x6e, 0xf6, 0xee, + 0x86, 0x65, 0xe5, 0x01, 0x0e, 0x09, 0xde, 0xcc, 0x99, 0x1c, 0x06, 0x1a, + 0x7b, 0xa2, 0x0c, 0xb5, 0x97, 0xd4, 0xd0, 0x16, 0x14, 0x84, 0x2c, 0xc9, + 0x18, 0xd0, 0xef, 0xb3, 0x14, 0xef, 0x17, 0x93, 0xc5, 0x0c, 0x11, 0xed, + 0x3d, 0x2a, 0x64, 0x90, 0x07, 0x00, 0x0e, 0xd8, 0x7f, 0x5d, 0x76, 0xf7, + 0x6e, 0xd4, 0xad, 0x3b, 0x7d, 0x21, 0x81, 0x42, 0x43, 0x34, 0x23, 0xaa, + 0x61, 0xb5, 0x48, 0xb0, 0xce, 0x5f, 0xee, 0x8c, 0x11, 0xf6, 0x6b, 0x77, + 0x12, 0xf6, 0xd2, 0x6b, 0xa1, 0x72, 0x92, 0xbe, 0xf6, 0x42, 0x0d, 0xde, + 0xe9, 0xb1, 0x10, 0x70, 0xda, 0x1b, 0xd9, 0x3a, 0x08, 0xae, 0x09, 0x25, + 0x21, 0xc7, 0x45, 0xb1, 0x11, 0x36, 0xb4, 0xf9, 0xc6, 0xab, 0x5e, 0xd7, + 0x72, 0x22, 0x36, 0xc4, 0xe7, 0x76, 0xe9, 0x0a, 0xde, 0x46, 0x98, 0x79, + 0xb5, 0x73, 0xec, 0xb3, 0xd4, 0xea, 0xb2, 0x52, 0x0d, 0x40, 0x1b, 0xdf, + 0x63, 0x52, 0xc8, 0xea, 0x95, 0x9c, 0x92, 0x10, 0xe2, 0xac, 0x7c, 0xff, + 0x50, 0xa0, 0x36, 0xd7, 0x72, 0x09, 0xa8, 0x28, 0x43, 0x61, 0x4d, 0x58, + 0x70, 0xf2, 0x04, 0x79, 0xfe, 0xbb, 0xf3, 0xb6, 0x8c, 0xb5, 0xf4, 0xb3, + 0xb6, 0x82, 0x3d, 0xd3, 0x86, 0x3b, 0xd9, 0x2a, 0x83, 0x63, 0x58, 0xfc, + 0x1a, 0xdc, 0x59, 0x5b, 0xa0, 0xb6, 0x37, 0x6d, 0x7b, 0x12, 0x90, 0xd7, + 0xee, 0x7d, 0x61, 0x5a, 0x24, 0x57, 0x90, 0x13, 0x67, 0xd9, 0x88, 0xbe, + 0x8b, 0x52, 0x08, 0xf7, 0x17, 0x9f, 0xa0, 0x0c, 0x0a, 0xb6, 0x4c, 0xf5, + 0xed, 0x6a, 0xbb, 0xf5, 0xfd, 0x13, 0x6d, 0x6c, 0xe9, 0xe9, 0xbe, 0xfa, + 0x9e, 0x8c, 0xdc, 0x1a, 0xf1, 0xf3, 0xae, 0x9c, 0x95, 0xff, 0x5f, 0x46, + 0xf9, 0x8c, 0xc6, 0x61, 0x9a, 0x3a, 0x66, 0x41, 0x70, 0x53, 0x3a, 0x58, + 0x93, 0x54, 0xcc, 0x7b, 0xf2, 0x41, 0x96, 0xee, 0x36, 0x19, 0x24, 0xd4, + 0x8f, 0x5a, 0xfe, 0x65, 0xf7, 0x07, 0x79, 0xd4}, + // secret + {0x6f, 0x46, 0xd1, 0xb0, 0x16, 0x92, 0x03, 0x88, 0x3d, 0xdd, 0x06, + 0xbd, 0xb7, 0xf4, 0x56, 0x3b, 0x53, 0xc7, 0x42, 0xb2, 0xe2, 0x23, + 0xc2, 0x02, 0x68, 0x09, 0xcd, 0x40, 0x4e, 0xba, 0x55, 0xda}, + true}, + // tcID: 94 + {94, + params_ml_kem768_test_mode, + // privateKey + {0x04, 0x18, 0x44, 0x0c, 0xc6, 0x0a, 0x0d, 0x37, 0x6b, 0x47, 0x4c, 0x24, + 0x35, 0xc3, 0x49, 0xe1, 0x60, 0x51, 0xf9, 0x6c, 0x6f, 0x93, 0xe3, 0xb7, + 0xc2, 0xec, 0x6b, 0xff, 0xa3, 0x52, 0xb3, 0x1b, 0xc6, 0xf0, 0xd2, 0x3d, + 0x9f, 0x59, 0x2e, 0xe3, 0xcc, 0x93, 0x30, 0xb4, 0x9e, 0x29, 0x7a, 0x8b, + 0x94, 0xdc, 0x51, 0x18, 0x25, 0xbe, 0x4d, 0xf4, 0x59, 0xb3, 0x51, 0x73, + 0x69, 0x68, 0x72, 0xcc, 0xb1, 0x3f, 0x78, 0xf2, 0x70, 0xe3, 0x5a, 0x45, + 0x2a, 0xc5, 0x5d, 0xcb, 0x0a, 0x0e, 0x01, 0x80, 0x90, 0x12, 0x53, 0x9b, + 0x99, 0x01, 0x95, 0xca, 0x68, 0x75, 0x66, 0x0b, 0x20, 0xdc, 0xf0, 0x00, + 0x40, 0x04, 0x8e, 0xda, 0x93, 0x4c, 0xee, 0xc5, 0x01, 0xba, 0xf2, 0x1a, + 0x6e, 0x54, 0xb0, 0x96, 0xc8, 0xaa, 0x93, 0xe1, 0x42, 0xe9, 0x8a, 0x7c, + 0x6a, 0x49, 0x66, 0x63, 0xdb, 0x93, 0x17, 0x58, 0x5c, 0xf7, 0x31, 0x64, + 0x4a, 0xf5, 0x5d, 0xd3, 0xc3, 0x4c, 0xe8, 0x98, 0x8e, 0x48, 0xc2, 0x7b, + 0xb9, 0xb2, 0x8f, 0x52, 0x70, 0x25, 0x2f, 0x6a, 0x84, 0xae, 0xbc, 0x54, + 0xb0, 0x44, 0x1a, 0x70, 0x99, 0x71, 0x7a, 0xa6, 0x8d, 0xd9, 0x55, 0xb9, + 0x99, 0x1c, 0x53, 0x3b, 0x67, 0xc6, 0x97, 0x78, 0x51, 0xed, 0xf6, 0x11, + 0xa8, 0x44, 0x05, 0x5a, 0x47, 0xb5, 0xfe, 0xa2, 0x56, 0x74, 0x5c, 0x34, + 0xcb, 0x1c, 0x51, 0x1c, 0xc9, 0x34, 0xed, 0xfc, 0x74, 0x48, 0xd5, 0xb8, + 0xe0, 0xd6, 0x81, 0xad, 0x68, 0x77, 0x16, 0x88, 0x15, 0xfc, 0xd4, 0x74, + 0x0f, 0x12, 0x28, 0x23, 0x6c, 0x43, 0xa2, 0x3a, 0x7c, 0x20, 0x8c, 0xac, + 0x0d, 0x8b, 0xc8, 0xf4, 0x85, 0x50, 0x49, 0x31, 0x0b, 0x5c, 0x06, 0xa4, + 0x9a, 0x87, 0x06, 0xea, 0x13, 0x4b, 0x4c, 0x17, 0x98, 0x23, 0x63, 0x2b, + 0x40, 0x48, 0x9c, 0x27, 0x08, 0x14, 0xd1, 0x02, 0x31, 0x0c, 0x35, 0xb7, + 0x6f, 0xa5, 0x27, 0x2b, 0xe1, 0x84, 0x97, 0xa7, 0xb6, 0xb5, 0x89, 0x7d, + 0x9f, 0xe7, 0x24, 0x6d, 0x3b, 0x94, 0x0e, 0x25, 0xaf, 0xb7, 0xc4, 0x4c, + 0x41, 0xda, 0x25, 0xe4, 0x12, 0x89, 0x48, 0xe7, 0x8c, 0xa8, 0xd1, 0x1f, + 0x24, 0x12, 0x43, 0xed, 0xe3, 0xa6, 0x91, 0xd2, 0x5d, 0xbb, 0x43, 0x23, + 0xa8, 0x84, 0x74, 0x7a, 0x8c, 0x51, 0x4c, 0xa0, 0xae, 0x4a, 0x89, 0x55, + 0x7a, 0xd3, 0x4f, 0x92, 0xbb, 0x41, 0x48, 0x40, 0xbb, 0xe7, 0xaa, 0x5e, + 0x35, 0x35, 0x89, 0x4b, 0xa7, 0x2a, 0x9c, 0x10, 0x56, 0xa2, 0x06, 0x39, + 0xd7, 0x26, 0x5d, 0x51, 0x99, 0x92, 0x2f, 0x3c, 0x17, 0xeb, 0x7a, 0x42, + 0xc8, 0x79, 0xc2, 0x54, 0x66, 0xbf, 0xb5, 0xd4, 0x51, 0x95, 0xcc, 0x89, + 0x8c, 0xa8, 0xbe, 0x53, 0xa0, 0x1d, 0x18, 0x64, 0xc8, 0x7d, 0x54, 0x8f, + 0xd4, 0xe3, 0xb2, 0x03, 0xe5, 0x1c, 0xe8, 0xcb, 0x14, 0x0f, 0x06, 0x16, + 0x54, 0x08, 0x5c, 0xac, 0xb3, 0xcd, 0xff, 0x77, 0x8d, 0xc1, 0x12, 0x12, + 0xf4, 0xa5, 0x01, 0x07, 0xa2, 0xc7, 0x00, 0x3d, 0x67, 0xa9, 0x2b, 0x85, + 0x93, 0x12, 0x58, 0x2c, 0x34, 0x59, 0xa5, 0xb5, 0xaf, 0xc0, 0x29, 0x35, + 0xf8, 0xb4, 0x62, 0x33, 0x1a, 0x41, 0x61, 0x17, 0x89, 0x9c, 0x32, 0x32, + 0x16, 0x70, 0x71, 0x06, 0x68, 0xa8, 0xd1, 0x5a, 0x8b, 0x5f, 0x73, 0xcd, + 0x82, 0x82, 0x31, 0x44, 0x6a, 0x19, 0xfa, 0xec, 0xbb, 0xa8, 0x84, 0x9d, + 0xd0, 0x72, 0x48, 0x79, 0xd0, 0x08, 0xca, 0x87, 0xb0, 0xfb, 0x8b, 0x01, + 0x52, 0x54, 0x1c, 0xba, 0x86, 0xbf, 0xc7, 0xc4, 0x25, 0x1f, 0x23, 0x29, + 0x56, 0x93, 0x96, 0xe6, 0xc1, 0xa5, 0xad, 0x75, 0x00, 0x01, 0x11, 0x7a, + 0x5b, 0x34, 0x86, 0xe8, 0xf6, 0x75, 0x02, 0xbc, 0xc3, 0x1e, 0xd9, 0xbb, + 0x28, 0xec, 0x22, 0x4c, 0xd1, 0xc7, 0xe7, 0x3b, 0x6f, 0x66, 0x45, 0x66, + 0xac, 0xea, 0x3c, 0xbd, 0x7a, 0xc0, 0x63, 0xb0, 0xab, 0x8a, 0x49, 0x53, + 0xa9, 0xb9, 0x5d, 0x92, 0x0a, 0x08, 0x0a, 0xb6, 0x4f, 0xea, 0xd7, 0xc7, + 0xa9, 0xb3, 0x04, 0x75, 0x6a, 0xb1, 0x5f, 0x44, 0xc4, 0x8d, 0x35, 0x0c, + 0x6a, 0x6a, 0x81, 0x62, 0xb9, 0x5c, 0xaa, 0x69, 0x8b, 0x3d, 0xf8, 0x24, + 0xe2, 0x93, 0xb7, 0xed, 0xa9, 0x10, 0x55, 0x68, 0x6f, 0x3b, 0xe2, 0x5b, + 0xfa, 0x40, 0x06, 0xa6, 0xaa, 0x22, 0x00, 0xd2, 0x7d, 0x98, 0xe4, 0x1a, + 0x08, 0x38, 0x2f, 0xfa, 0xea, 0x54, 0x1d, 0x34, 0xa3, 0xe6, 0x39, 0x84, + 0xa9, 0x28, 0x7c, 0x2a, 0x54, 0x0b, 0xe4, 0x40, 0x1e, 0x0e, 0xdc, 0xcf, + 0x29, 0xa4, 0x28, 0x53, 0x13, 0x68, 0x4a, 0x97, 0x20, 0x32, 0xa0, 0x47, + 0x30, 0x97, 0x29, 0xd6, 0xba, 0x41, 0x63, 0x20, 0x4f, 0x33, 0xe8, 0xa5, + 0x92, 0xda, 0x82, 0x4e, 0xc2, 0x81, 0xce, 0x82, 0x24, 0x4d, 0x24, 0xbb, + 0x88, 0x34, 0x28, 0xff, 0x9c, 0xb7, 0x50, 0x81, 0x6c, 0x30, 0x7b, 0x60, + 0x84, 0xca, 0xb2, 0x3e, 0xf6, 0x32, 0x7d, 0x22, 0x33, 0x24, 0x1a, 0x2b, + 0x80, 0x06, 0x9e, 0x52, 0x0c, 0x2e, 0x6b, 0x70, 0x6e, 0xad, 0x34, 0x56, + 0x31, 0x29, 0x61, 0xb9, 0x16, 0x7d, 0xce, 0x04, 0x9f, 0x70, 0x14, 0x46, + 0x0f, 0x76, 0x9f, 0x22, 0xcc, 0x3c, 0xe8, 0xc0, 0x5f, 0xf6, 0xd1, 0x4c, + 0x22, 0x09, 0xbb, 0x0c, 0x1a, 0xa0, 0xde, 0xf8, 0x5d, 0xd0, 0x73, 0x03, + 0xd6, 0x51, 0xc5, 0xed, 0x32, 0x77, 0xe2, 0x84, 0x23, 0x6b, 0xe5, 0x70, + 0xc3, 0xe9, 0x56, 0xfc, 0x84, 0x5b, 0xfe, 0xf6, 0x50, 0xdd, 0x9a, 0x60, + 0x15, 0xb2, 0xab, 0xe3, 0x37, 0x04, 0xc9, 0x3b, 0x8d, 0xfc, 0x4c, 0x81, + 0x4a, 0x47, 0xac, 0x8f, 0x79, 0xaf, 0xe4, 0xe2, 0xc5, 0x1b, 0x5a, 0x4c, + 0xf3, 0xc8, 0xa1, 0xc0, 0xc8, 0x28, 0xe0, 0x52, 0x9a, 0x6b, 0x70, 0x75, + 0x99, 0xb5, 0x44, 0xc9, 0x33, 0x6a, 0xb4, 0x00, 0x5f, 0xc0, 0x76, 0x18, + 0x2a, 0xe7, 0x78, 0xe2, 0x00, 0x13, 0xab, 0x64, 0xa6, 0xf2, 0x87, 0x36, + 0xe4, 0x78, 0x02, 0xab, 0x63, 0xc3, 0x3a, 0xd5, 0x1e, 0xd9, 0x94, 0x72, + 0x4a, 0xa4, 0x72, 0x88, 0x71, 0x89, 0xd5, 0x79, 0xba, 0x6b, 0xf8, 0x02, + 0xa6, 0x70, 0xcc, 0x86, 0x21, 0x06, 0x61, 0xf3, 0xa4, 0x6f, 0x1c, 0x93, + 0xe1, 0xeb, 0x3c, 0xc1, 0xe9, 0x44, 0xf9, 0xc4, 0x79, 0xe4, 0xa4, 0x8f, + 0x45, 0xe0, 0x8f, 0x8e, 0x27, 0x53, 0x56, 0x24, 0x77, 0xe9, 0xc3, 0x50, + 0xae, 0x8b, 0x3e, 0x9d, 0xf3, 0x25, 0x89, 0x52, 0x74, 0x13, 0xd1, 0x54, + 0x44, 0x8c, 0x1b, 0xce, 0x4b, 0x55, 0x93, 0x3b, 0x8d, 0x65, 0x78, 0x85, + 0xb6, 0x62, 0x67, 0x2c, 0x37, 0x43, 0xc0, 0xf1, 0x72, 0x94, 0x27, 0x6c, + 0x2a, 0xb5, 0x70, 0x3d, 0x03, 0x24, 0xd3, 0x6a, 0xc5, 0x06, 0x35, 0x42, + 0x4c, 0x34, 0x39, 0xdc, 0xfa, 0x7c, 0x2b, 0x30, 0x09, 0xe4, 0xb9, 0x34, + 0xfd, 0x86, 0x6d, 0xc7, 0x45, 0x41, 0x30, 0x44, 0x5f, 0x18, 0x98, 0xb5, + 0xda, 0xc3, 0x3d, 0xee, 0x7a, 0x4b, 0x69, 0xbb, 0x0e, 0xcc, 0x39, 0x49, + 0x10, 0x8a, 0xaf, 0x59, 0x88, 0x8d, 0x92, 0x35, 0x88, 0x22, 0x52, 0x2d, + 0x86, 0x03, 0x06, 0x1b, 0xa1, 0x4f, 0xbb, 0xcb, 0x68, 0x1f, 0xcb, 0x74, + 0x2d, 0xd9, 0x10, 0xea, 0xb7, 0xa4, 0x68, 0x5c, 0x19, 0x68, 0xbc, 0x1c, + 0x55, 0x07, 0x28, 0x00, 0x62, 0x5f, 0xb4, 0x76, 0xb9, 0x19, 0x63, 0xaf, + 0xfe, 0x58, 0x91, 0x68, 0xd1, 0x6a, 0xf7, 0x85, 0x70, 0x25, 0xb2, 0x77, + 0xa7, 0x02, 0x63, 0x4b, 0xf7, 0xa2, 0x62, 0x59, 0x43, 0xa2, 0x19, 0x45, + 0x5f, 0x01, 0x39, 0xc3, 0x61, 0x02, 0x52, 0x1c, 0x0f, 0x79, 0x53, 0x63, + 0xb2, 0xc9, 0x90, 0x2b, 0xdc, 0x51, 0x51, 0x75, 0x62, 0xff, 0x54, 0x1e, + 0x04, 0xc1, 0x2c, 0xc0, 0x0c, 0x90, 0xb2, 0x24, 0xc3, 0x2e, 0x7b, 0xcb, + 0x0d, 0xf1, 0x5b, 0xdf, 0xa8, 0x2f, 0x56, 0x68, 0x3a, 0xbe, 0xa2, 0xc2, + 0x65, 0x9a, 0x35, 0x33, 0x1c, 0x46, 0x25, 0xc2, 0xa5, 0xc0, 0xd1, 0xb9, + 0xb0, 0x36, 0xab, 0x7c, 0x2a, 0x87, 0x9e, 0x65, 0x31, 0xf8, 0xa0, 0x82, + 0x49, 0x79, 0x5e, 0x5b, 0xf2, 0xc9, 0x20, 0x63, 0x9f, 0x50, 0xb7, 0x4d, + 0xf2, 0xf2, 0x94, 0x6d, 0x13, 0x99, 0xab, 0x18, 0x04, 0x9c, 0x91, 0x07, + 0xb6, 0x28, 0x8d, 0xda, 0x53, 0x37, 0x1d, 0x18, 0xa1, 0x8a, 0x72, 0xa6, + 0x6e, 0x16, 0x7c, 0x14, 0xbb, 0x3d, 0x9e, 0x9c, 0xbb, 0xda, 0x76, 0xb9, + 0x07, 0x32, 0x62, 0xff, 0xf5, 0xac, 0x03, 0x76, 0x92, 0xab, 0xb8, 0x06, + 0xc1, 0xb4, 0x16, 0xc6, 0x09, 0x26, 0xf6, 0x84, 0xab, 0x31, 0x4a, 0x0c, + 0x90, 0xa9, 0x0b, 0x0d, 0xf1, 0x38, 0x2f, 0x70, 0x13, 0x49, 0xa2, 0x28, + 0xea, 0xa7, 0x91, 0x1e, 0x37, 0xc2, 0x6c, 0x69, 0xa1, 0x70, 0x78, 0x23, + 0x14, 0xa9, 0x28, 0xc5, 0xe2, 0x74, 0x45, 0x32, 0x2a, 0x17, 0xc8, 0x14, + 0x01, 0xd7, 0x1b, 0xaf, 0x1b, 0x71, 0xa6, 0x3c, 0x08, 0xdd, 0x0a, 0x98, + 0x42, 0xdc, 0x9a, 0x61, 0x01, 0xbc, 0xcd, 0x91, 0xc7, 0x3b, 0x77, 0x2c, + 0xd5, 0x4a, 0x34, 0x01, 0xb4, 0x35, 0xfd, 0xd9, 0x29, 0xc8, 0x4c, 0x3a, + 0x88, 0x45, 0x97, 0xe1, 0x5b, 0xbb, 0x47, 0xd2, 0x1d, 0x4b, 0x93, 0x3e, + 0x86, 0xe9, 0x40, 0xa5, 0x54, 0x37, 0x7b, 0xd9, 0x02, 0x71, 0xe3, 0xb5, + 0xdf, 0x0c, 0x0d, 0x06, 0xe3, 0xac, 0x1c, 0x52, 0x3c, 0xd0, 0xa3, 0x6a, + 0xc0, 0x25, 0xcf, 0x12, 0x2c, 0x61, 0x99, 0x57, 0xc3, 0xde, 0xb2, 0x86, + 0xa7, 0x43, 0x56, 0x60, 0xd3, 0x36, 0x65, 0x46, 0x66, 0x44, 0xdc, 0x5f, + 0x40, 0x97, 0xcf, 0xa7, 0xb2, 0x56, 0x80, 0x49, 0x09, 0x80, 0x0b, 0x29, + 0x8d, 0x31, 0x99, 0x3e, 0x2b, 0x89, 0xb0, 0x24, 0x33, 0x7d, 0x58, 0x80, + 0x5a, 0xa6, 0x2e, 0x84, 0x54, 0xad, 0x40, 0x99, 0x44, 0x8c, 0x6c, 0x0c, + 0x91, 0xe9, 0x3d, 0xb3, 0x67, 0x34, 0x78, 0xa3, 0x5b, 0x89, 0x54, 0x0d, + 0x23, 0x5c, 0x4d, 0x02, 0x2b, 0xbe, 0xc3, 0x51, 0x76, 0xa2, 0x99, 0x36, + 0xeb, 0x57, 0x1f, 0x46, 0x60, 0x02, 0x81, 0x09, 0xcd, 0xf8, 0x25, 0xb9, + 0x79, 0xf5, 0xa6, 0xba, 0x51, 0x02, 0x3a, 0x84, 0x32, 0xbc, 0xa8, 0x4a, + 0x6a, 0x90, 0xce, 0x54, 0x4a, 0xc5, 0x7a, 0x09, 0x10, 0x55, 0xc1, 0x09, + 0x9c, 0x71, 0xbd, 0x66, 0x04, 0xc0, 0x6c, 0x25, 0x15, 0x13, 0x0c, 0x1a, + 0x55, 0xd6, 0xc9, 0xd3, 0x16, 0x40, 0xd4, 0xe9, 0xc2, 0xf9, 0xf1, 0xa4, + 0xc7, 0x4a, 0xbb, 0x67, 0x01, 0xb9, 0xee, 0x36, 0x23, 0x8d, 0x40, 0xb6, + 0xd6, 0x82, 0xcb, 0xb6, 0x62, 0x3a, 0xe7, 0x66, 0x5a, 0x02, 0x42, 0xb1, + 0x40, 0xf4, 0x57, 0x81, 0x22, 0xbd, 0x51, 0x11, 0x19, 0x7b, 0x51, 0xa7, + 0xf8, 0x60, 0x35, 0x7e, 0xc6, 0xac, 0xe0, 0x51, 0x03, 0xa0, 0x35, 0x47, + 0x2d, 0xa7, 0x35, 0x48, 0xf5, 0x1b, 0x1d, 0x88, 0x7c, 0x02, 0x04, 0x26, + 0x00, 0xd8, 0x4b, 0x9f, 0xe6, 0xbd, 0x11, 0x63, 0x5a, 0xe8, 0xd3, 0xab, + 0x04, 0xb9, 0x8f, 0xdb, 0x17, 0x9e, 0xbd, 0x14, 0x85, 0x96, 0xa3, 0x18, + 0x4e, 0xdc, 0x12, 0x10, 0xd8, 0x88, 0xdb, 0xcb, 0xaa, 0x11, 0x31, 0xac, + 0x87, 0x55, 0x5f, 0x42, 0x7a, 0x86, 0xb9, 0xfa, 0x2c, 0xb3, 0xec, 0x6f, + 0x04, 0xe3, 0xc4, 0xa6, 0x73, 0x8e, 0xa8, 0xe3, 0x71, 0x4a, 0x0c, 0xb9, + 0x9e, 0x09, 0xb6, 0x46, 0x97, 0xb1, 0x71, 0x7c, 0x93, 0x8c, 0xda, 0x2c, + 0x8e, 0x71, 0x0c, 0xd3, 0x80, 0xa1, 0x2c, 0xd9, 0x88, 0xe5, 0xcc, 0x5f, + 0x57, 0x1c, 0x47, 0x43, 0x20, 0x07, 0xa0, 0xb3, 0xcf, 0xab, 0x55, 0xc2, + 0xcb, 0x96, 0xc9, 0x48, 0xf3, 0x82, 0x95, 0x05, 0xb5, 0x14, 0x2b, 0x25, + 0x50, 0x2c, 0x7c, 0x21, 0x30, 0x27, 0xe6, 0x17, 0x93, 0xd3, 0x48, 0x44, + 0xa2, 0x8a, 0x86, 0x27, 0xac, 0x6b, 0xe9, 0x26, 0x3b, 0x0e, 0xea, 0x0a, + 0x6a, 0x5c, 0xb9, 0x0a, 0xa3, 0x49, 0x61, 0x37, 0xa2, 0x0a, 0x44, 0x5b, + 0x93, 0xd4, 0x60, 0x5b, 0xcb, 0x83, 0xaa, 0x37, 0x1c, 0x2f, 0x57, 0x30, + 0xe9, 0xc2, 0x0a, 0x73, 0x86, 0x65, 0x00, 0x7d, 0x57, 0xbb, 0x24, 0x96, + 0x92, 0xab, 0x51, 0x3b, 0xc6, 0x6f, 0xd0, 0x44, 0x86, 0xf0, 0x5c, 0x74, + 0x9a, 0x63, 0xc5, 0xc0, 0x60, 0x44, 0x2b, 0x97, 0x1f, 0x67, 0xbb, 0x10, + 0x77, 0xa0, 0xb1, 0x53, 0x98, 0x6b, 0x28, 0xbb, 0x29, 0x00, 0x19, 0x67, + 0x53, 0xcb, 0xae, 0x83, 0x3b, 0x27, 0x72, 0x68, 0x05, 0x8a, 0xd9, 0x68, + 0x01, 0x34, 0x63, 0x3b, 0xa4, 0xb7, 0xa4, 0x31, 0x53, 0x44, 0x16, 0x69, + 0x39, 0xe9, 0xc1, 0x56, 0x29, 0xb3, 0xa6, 0x56, 0x49, 0xe8, 0x57, 0x72, + 0x89, 0x06, 0x38, 0x81, 0xb4, 0xab, 0xa3, 0x65, 0x5f, 0xe8, 0xea, 0x0b, + 0xc5, 0x8c, 0x70, 0x17, 0xa2, 0x49, 0xed, 0xf4, 0x3c, 0x27, 0x67, 0x67, + 0x08, 0x41, 0x19, 0x49, 0x56, 0x7b, 0x53, 0x88, 0x69, 0x03, 0xb8, 0x71, + 0x6a, 0xa6, 0x5d, 0x9d, 0xb5, 0x26, 0x38, 0xf8, 0x93, 0xac, 0xf2, 0x61, + 0xba, 0x78, 0x68, 0xad, 0xb1, 0x0e, 0x3d, 0x57, 0x14, 0x5a, 0x47, 0x5c, + 0x9b, 0x86, 0x13, 0xd7, 0x33, 0x78, 0xf0, 0xa2, 0x85, 0xd5, 0xe2, 0x9d, + 0x81, 0x75, 0x92, 0x12, 0x3b, 0xcb, 0xa8, 0xf5, 0xce, 0x07, 0x5b, 0xab, + 0xb1, 0x12, 0xbb, 0x06, 0x88, 0xb3, 0x11, 0xf3, 0x5e, 0xd6, 0x83, 0x1f, + 0x3f, 0x4c, 0xb0, 0x62, 0x06, 0x4b, 0x5c, 0xa5, 0x36, 0x32, 0x67, 0xae, + 0x9a, 0xfa, 0x98, 0x18, 0xe7, 0x1f, 0x6b, 0xa1, 0x98, 0x7e, 0x47, 0x9d, + 0xaa, 0xa4, 0x14, 0xc0, 0x00, 0x4b, 0xf7, 0x38, 0x44, 0x5a, 0xf2, 0x50, + 0xcb, 0xfc, 0x87, 0x46, 0xe8, 0x59, 0x00, 0xdb, 0xb9, 0x72, 0x83, 0x4f, + 0x40, 0xd2, 0x10, 0x67, 0x2b, 0x3e, 0xdc, 0x20, 0x91, 0x29, 0x61, 0x16, + 0x22, 0x48, 0xb0, 0x84, 0xb9, 0x9e, 0x64, 0x9a, 0x67, 0x63, 0x7a, 0x03, + 0x6b, 0x97, 0x4b, 0x04, 0xc4, 0x8d, 0x75, 0x02, 0x25, 0x83, 0x5c, 0x35, + 0x4b, 0x92, 0x93, 0x97, 0x44, 0x69, 0x9d, 0x31, 0x59, 0x81, 0x8b, 0x54, + 0xfc, 0xd8, 0x44, 0xc6, 0x4a, 0x5c, 0x57, 0xd3, 0xb5, 0x59, 0x41, 0x7c, + 0x14, 0xb2, 0x27, 0x6c, 0x38, 0xb1, 0x22, 0x77, 0x3c, 0x99, 0x68, 0x2c, + 0x6a, 0xf9, 0x88, 0x21, 0x44, 0x72, 0x39, 0x97, 0x19, 0xa8, 0x63, 0x62, + 0xda, 0x1b, 0x1c, 0xe6, 0x81, 0x2a, 0xe1, 0x71, 0x4f, 0x70, 0xc1, 0xb1, + 0x25, 0xbb, 0x59, 0x4b, 0xd4, 0xcc, 0x55, 0xf9, 0x9f, 0x3f, 0x30, 0x14, + 0x5c, 0xa6, 0xcb, 0x2a, 0x66, 0x23, 0x5b, 0xaa, 0x38, 0x14, 0x17, 0xc3, + 0x50, 0x03, 0xc7, 0xde, 0x86, 0x7b, 0xac, 0xc8, 0x1b, 0xb3, 0x54, 0x3e, + 0xbd, 0x13, 0x39, 0x02, 0x4c, 0x4d, 0xe8, 0xcb, 0x3b, 0x03, 0x50, 0xc9, + 0x84, 0x77, 0xb5, 0xb4, 0xf7, 0xab, 0x83, 0xac, 0x51, 0x9c, 0x74, 0x38, + 0xdd, 0xfa, 0x30, 0x97, 0xb7, 0x0f, 0xd0, 0xf1, 0xb2, 0xe6, 0xc2, 0x20, + 0xf6, 0x7c, 0x3c, 0xd7, 0x18, 0x86, 0x78, 0xea, 0x1b, 0x72, 0x26, 0x7f, + 0xfa, 0x42, 0x85, 0xd4, 0x76, 0x51, 0x75, 0x90, 0xbe, 0xd2, 0x40, 0xc0, + 0xa8, 0x1a, 0x97, 0x78, 0x66, 0x22, 0xcf, 0x1b, 0x10, 0x1b, 0x01, 0x2f, + 0x13, 0x2c, 0xc6, 0x00, 0x15, 0xa5, 0x9d, 0xf3, 0xa6, 0xc4, 0x57, 0x89, + 0x28, 0xf6, 0x03, 0x5a, 0x66, 0x2e, 0xeb, 0x78, 0xcc, 0xb8, 0x95, 0x52, + 0xf1, 0x65, 0xc1, 0x37, 0xa6, 0x02, 0x56, 0x46, 0x45, 0x01, 0x65, 0x8c, + 0x12, 0x68, 0xaa, 0x70, 0xb3, 0xa3, 0xaa, 0x66, 0x58, 0x25, 0x84, 0x0e, + 0xb4, 0xe0, 0x15, 0xc5, 0x58, 0xbe, 0xcd, 0x92, 0x3d, 0x32, 0xcb, 0x8b, + 0xcc, 0x2c, 0x28, 0xa3, 0x37, 0x0a, 0x46, 0x14, 0xc4, 0x33, 0x55, 0x74, + 0xbd, 0xf7, 0x74, 0x46, 0xb3, 0x4d, 0x9f, 0x5a, 0x7e, 0x9e, 0xb8, 0x97, + 0x38, 0x14, 0x8c, 0x4a, 0xe5, 0x6d, 0x9b, 0x1c, 0x82, 0x9a, 0x69, 0x35, + 0x20, 0x92, 0x27, 0x68, 0x2b, 0xbc, 0xe1, 0x35, 0x22, 0xd9, 0x91, 0xb4, + 0xd2, 0x62, 0x5d, 0xaa, 0xa6, 0x79, 0xb4, 0xdc, 0x6a, 0x11, 0x8a, 0x67, + 0x2d, 0x5c, 0x24, 0x76, 0x07, 0xa9, 0x62, 0x0c, 0x1c, 0x88, 0xcb, 0x76, + 0x00, 0x85, 0x2e, 0x0c, 0x39, 0x40, 0x05, 0xf4, 0x5c, 0x54, 0x17, 0x5b, + 0xee, 0xbb, 0x9b, 0xcb, 0x3c, 0x38, 0x73, 0x62, 0x25, 0x01, 0xf0, 0xb8, + 0x05, 0x23, 0x29, 0x4f, 0x12, 0x2c, 0x61, 0x92, 0xbf, 0x5e, 0x53, 0x89, + 0x4a, 0x64, 0xa7, 0x33, 0xe8, 0x30, 0xdc, 0xa8, 0x14, 0xef, 0x7b, 0xb6, + 0x2b, 0xa6, 0x0b, 0x66, 0x7c, 0xc1, 0x69, 0xe0, 0xa1, 0x65, 0x52, 0x8b, + 0x46, 0xec, 0xb2, 0x98, 0x02, 0x02, 0xe2, 0xaa, 0xb0, 0xea, 0x59, 0x61, + 0x16, 0x8c, 0x69, 0x33, 0xc6, 0x24, 0x0c, 0x85, 0xb0, 0x90, 0x80, 0x1c, + 0xc0, 0x73, 0x1a, 0x0f, 0xc7, 0x0d, 0x09, 0xd8, 0x3c, 0x9f, 0x2c, 0x71, + 0x42, 0xf2, 0xc5, 0xed, 0x6b, 0x7c, 0x7f, 0x55, 0x34, 0x39, 0xe8, 0xe4, + 0x5b, 0x93, 0x89, 0x8c, 0x12, 0xac, 0xff, 0x89, 0xdb, 0x7d, 0x67, 0xee, + 0x87, 0x5d, 0xd9, 0x83, 0x4f, 0x3d, 0x07, 0xb0, 0xb8, 0x06, 0xaf, 0x8e, + 0x3e, 0x24, 0x51, 0xbd, 0x26, 0x09, 0xd0, 0x6e, 0x78, 0x1e, 0x8d, 0x77, + 0x82, 0xb5, 0xf5, 0xa7, 0xa3, 0x82, 0x73, 0x90, 0xf8, 0x9a, 0xf1, 0x14, + 0x43, 0x45, 0xdb, 0x68, 0x1a, 0xbd, 0x75, 0xe4, 0x34, 0xb9, 0xc7, 0xc6, + 0x9e, 0x0b, 0x9f, 0x60, 0x00, 0x73, 0xe2, 0xd6, 0x76, 0x1e, 0x7b, 0x33, + 0xb8, 0x1d, 0xd6, 0xc6, 0x36, 0xeb, 0xe0, 0x76, 0x41, 0xa9, 0xcc, 0x8a}, + // ciphertext + {0xbd, 0x8c, 0x66, 0xf4, 0x80, 0xef, 0x2c, 0xcc, 0x9d, 0x3a, 0xa3, 0x49, + 0xf0, 0x20, 0xda, 0x9c, 0x5f, 0x36, 0x99, 0x9a, 0x62, 0xea, 0xce, 0x28, + 0x8a, 0xab, 0x38, 0x7a, 0x2a, 0x1a, 0x41, 0x22, 0x9b, 0xce, 0x8d, 0xc1, + 0x00, 0x5f, 0x3f, 0x7a, 0x70, 0x33, 0x98, 0x92, 0x2f, 0x86, 0xe2, 0xfc, + 0x5e, 0x4a, 0x0f, 0x97, 0x99, 0xc4, 0xc1, 0x1f, 0xf3, 0xda, 0x46, 0xa1, + 0x65, 0x26, 0x8d, 0xe2, 0xda, 0x7e, 0x1f, 0x79, 0xce, 0x8f, 0xf1, 0x51, + 0x19, 0x31, 0x39, 0x42, 0xac, 0x6d, 0xd7, 0xdc, 0x0e, 0x1b, 0x8d, 0xda, + 0xa2, 0x94, 0xb6, 0xae, 0x21, 0x5c, 0x29, 0x24, 0xab, 0xb4, 0x44, 0x0d, + 0xd2, 0x26, 0x91, 0x49, 0x0d, 0x2e, 0x02, 0xc4, 0x34, 0xe3, 0x09, 0x38, + 0x84, 0x8e, 0xaf, 0xea, 0x25, 0xdd, 0xb1, 0x3a, 0x6b, 0x6a, 0xc9, 0x67, + 0x5d, 0x7a, 0x55, 0x98, 0x2c, 0xcd, 0x72, 0x69, 0x13, 0xfc, 0x82, 0xc0, + 0x09, 0x52, 0xfe, 0xe9, 0x76, 0xa7, 0x14, 0xba, 0x34, 0x12, 0x91, 0xd7, + 0xf3, 0x26, 0x1a, 0x20, 0x94, 0x5f, 0x1f, 0x53, 0x10, 0x4d, 0x56, 0xb3, + 0x91, 0x99, 0x26, 0xf8, 0x51, 0xfb, 0x98, 0x6c, 0x18, 0x94, 0xa8, 0x10, + 0x6f, 0x0e, 0xe9, 0x4e, 0x03, 0x74, 0xed, 0x9f, 0xbe, 0x19, 0x3a, 0xec, + 0xa2, 0xb8, 0xe6, 0xec, 0x61, 0x5d, 0xd3, 0x94, 0x04, 0xab, 0x16, 0xa9, + 0xe3, 0x0f, 0xa6, 0x6b, 0xda, 0x5e, 0x08, 0xa3, 0x95, 0xbc, 0x76, 0x15, + 0x7b, 0x3c, 0x39, 0x31, 0xcd, 0xfd, 0x2a, 0xb5, 0xfc, 0xc7, 0xe2, 0xc3, + 0x7d, 0x22, 0x88, 0xed, 0xd7, 0xc8, 0xee, 0xc9, 0xd2, 0xd1, 0xca, 0xce, + 0xc4, 0x66, 0xcc, 0xad, 0x61, 0x5d, 0x22, 0x21, 0x8c, 0x41, 0x0c, 0xdb, + 0xb0, 0xde, 0x79, 0x87, 0x1e, 0x5c, 0x79, 0x47, 0x20, 0x3a, 0xbe, 0x70, + 0x4c, 0x24, 0x61, 0x67, 0x49, 0xe0, 0xcc, 0x0a, 0x89, 0x2f, 0xba, 0x42, + 0xec, 0x11, 0x6d, 0x95, 0x6c, 0xc5, 0xa3, 0x36, 0x68, 0x26, 0x1d, 0x43, + 0xf4, 0x0d, 0x24, 0x85, 0x0d, 0xb9, 0xbe, 0xbd, 0xb3, 0xfd, 0x64, 0x89, + 0x50, 0xc1, 0x3b, 0xe2, 0xf7, 0x3d, 0xb6, 0xfd, 0xd3, 0x1c, 0x8d, 0xef, + 0x18, 0x9b, 0xd4, 0xfd, 0xa9, 0x6a, 0x5a, 0xdb, 0x19, 0x10, 0x9e, 0x8b, + 0xa6, 0x7e, 0x8d, 0x68, 0xbd, 0x0f, 0xb9, 0xff, 0xd9, 0x4a, 0x74, 0x70, + 0xd8, 0x09, 0x34, 0x44, 0xd5, 0xa0, 0x68, 0x20, 0x99, 0xe9, 0xa6, 0xe7, + 0x14, 0x94, 0x00, 0x84, 0x55, 0x40, 0xa8, 0x5f, 0xd8, 0x2b, 0x33, 0x8a, + 0xe7, 0x9c, 0xf6, 0x95, 0xe2, 0x7a, 0x05, 0x5c, 0x67, 0x02, 0x75, 0x5f, + 0xcf, 0x92, 0x8c, 0xf1, 0xb7, 0x8e, 0x78, 0xd7, 0xf7, 0x34, 0x46, 0xbf, + 0x44, 0x66, 0x41, 0xac, 0x69, 0xb7, 0x88, 0x9c, 0x9f, 0x46, 0x6b, 0xc2, + 0x9a, 0x3c, 0x32, 0xd9, 0x9b, 0xc9, 0xd1, 0xf8, 0x54, 0x6e, 0xa4, 0x84, + 0xd1, 0x1e, 0xb2, 0x62, 0x22, 0xfa, 0xcf, 0x82, 0x5a, 0x2f, 0x96, 0xa1, + 0x6c, 0x12, 0x03, 0x1c, 0x3b, 0x2f, 0xce, 0x03, 0x05, 0xb0, 0x47, 0x32, + 0x70, 0x01, 0x6c, 0xe9, 0x5e, 0xbd, 0x7f, 0xa0, 0x2c, 0xfa, 0x5c, 0xdf, + 0xc6, 0xf8, 0xfd, 0xad, 0x31, 0xf8, 0x01, 0xab, 0x71, 0xae, 0xa2, 0xc6, + 0xe3, 0x25, 0x24, 0xf5, 0xbe, 0x77, 0xae, 0x1d, 0xe5, 0xf3, 0x3f, 0xc4, + 0xe6, 0x1a, 0x26, 0x85, 0xa3, 0xd4, 0xe5, 0xca, 0xc5, 0x7b, 0x68, 0x03, + 0x96, 0x9b, 0x8f, 0x0c, 0xd4, 0xd4, 0x20, 0x42, 0xe0, 0x4b, 0x38, 0xf4, + 0xf1, 0xc9, 0xc1, 0xab, 0x8a, 0x99, 0x4b, 0xfe, 0x2c, 0x5e, 0xab, 0xb6, + 0x6e, 0x05, 0xef, 0x34, 0x3a, 0xff, 0xa4, 0xc3, 0x50, 0x0e, 0x39, 0x66, + 0x09, 0xc0, 0x35, 0xb2, 0x3d, 0x6d, 0xb7, 0xa4, 0x13, 0xa5, 0x92, 0x29, + 0x92, 0x8c, 0xdd, 0x99, 0x84, 0x14, 0xe0, 0xe8, 0xdb, 0x3f, 0xf7, 0x57, + 0x6e, 0xb3, 0x6b, 0xd7, 0xad, 0x03, 0xef, 0xba, 0x30, 0x46, 0x6b, 0xa6, + 0x38, 0x4e, 0x67, 0x44, 0xa6, 0xf5, 0x68, 0xaf, 0x57, 0x9c, 0x09, 0x7e, + 0x71, 0xae, 0xee, 0x0f, 0x05, 0x1a, 0x13, 0x8e, 0x68, 0x55, 0xff, 0x3d, + 0xe3, 0xb8, 0x35, 0x56, 0xd0, 0xc7, 0xf2, 0xa8, 0x59, 0xc3, 0x0b, 0x5e, + 0xba, 0x57, 0xd5, 0x8b, 0x3e, 0x0d, 0x99, 0x61, 0x80, 0xc0, 0x66, 0x19, + 0xf2, 0x6f, 0x55, 0x72, 0x61, 0xd0, 0xf9, 0x24, 0x71, 0x60, 0x0a, 0x8a, + 0x47, 0x3f, 0x73, 0x55, 0x50, 0xe9, 0xe0, 0x50, 0xc9, 0x65, 0x22, 0xc3, + 0xa2, 0xe9, 0x8e, 0xb8, 0xed, 0x08, 0x64, 0x36, 0x95, 0x18, 0x8a, 0x0f, + 0x31, 0x71, 0xd6, 0x24, 0x6d, 0x81, 0x5f, 0x33, 0x53, 0x6b, 0x27, 0x11, + 0xd8, 0x82, 0xb0, 0x35, 0x8a, 0xcd, 0x95, 0xe6, 0x30, 0xbb, 0x71, 0xfa, + 0xbb, 0x29, 0xc9, 0xb8, 0x9c, 0xfb, 0x8f, 0xd1, 0x6b, 0xc5, 0x23, 0x1f, + 0xbc, 0xe6, 0x80, 0xd6, 0x07, 0xcf, 0x82, 0xf1, 0xf1, 0xc3, 0x04, 0x82, + 0xec, 0x01, 0x4f, 0x43, 0xde, 0x03, 0x68, 0x80, 0x22, 0xf0, 0x5c, 0x71, + 0xdb, 0x11, 0x01, 0x63, 0xa1, 0x3b, 0xf9, 0x5e, 0x09, 0x5d, 0xdb, 0x27, + 0x7c, 0xdb, 0x69, 0x7e, 0x4e, 0x48, 0xc8, 0xe1, 0xdd, 0x4d, 0x17, 0x62, + 0xe9, 0xd0, 0x6b, 0x18, 0x6c, 0x5e, 0xcc, 0x41, 0xc2, 0x68, 0x72, 0x54, + 0xa0, 0x2f, 0xa9, 0x7c, 0xa9, 0xba, 0xfc, 0xf1, 0x13, 0xb6, 0xf5, 0xd4, + 0xb9, 0x9b, 0xfd, 0x89, 0x03, 0x2e, 0xf0, 0x9d, 0x58, 0x4a, 0xef, 0xa3, + 0xf5, 0xa5, 0x08, 0x0a, 0x23, 0x01, 0x94, 0x93, 0x97, 0x3d, 0xa8, 0x77, + 0xfb, 0xb0, 0x7f, 0x36, 0x28, 0xde, 0x93, 0xad, 0xfe, 0x57, 0xfb, 0x09, + 0xa0, 0xb9, 0x5b, 0xf1, 0x9c, 0xd6, 0xd8, 0xa5, 0x63, 0xad, 0xf7, 0x19, + 0xba, 0x47, 0xe2, 0xce, 0xe3, 0x25, 0xb0, 0x0b, 0x57, 0x56, 0xce, 0x39, + 0xb0, 0xfc, 0x9f, 0x6d, 0xfd, 0x4b, 0x80, 0x5f, 0x5b, 0x33, 0xf6, 0x11, + 0x80, 0x62, 0x02, 0x39, 0xae, 0xff, 0xbc, 0xa9, 0xc2, 0x11, 0x04, 0x8a, + 0x8a, 0xa6, 0x05, 0x53, 0x56, 0xac, 0x9c, 0x29, 0x92, 0x02, 0x2f, 0x6b, + 0x60, 0x1a, 0x71, 0x01, 0xe1, 0xe1, 0x6d, 0xfe, 0x63, 0x92, 0x3f, 0x19, + 0x84, 0x2c, 0x44, 0x63, 0xfe, 0x0f, 0x06, 0xec, 0xa2, 0x15, 0x8d, 0x04, + 0x44, 0x9f, 0x10, 0xc5, 0x52, 0x47, 0x27, 0x82, 0x1f, 0xbc, 0x4d, 0xa7, + 0x0d, 0xa0, 0xf2, 0xbe, 0xa5, 0xeb, 0x07, 0x67, 0xf5, 0x12, 0xee, 0x9f, + 0xfe, 0x34, 0x96, 0xeb, 0x2e, 0xde, 0xcd, 0xe2, 0x79, 0x5e, 0x1e, 0xa2, + 0xdb, 0xb5, 0xfe, 0xf6, 0xf8, 0xd5, 0x4e, 0x54, 0xa0, 0xcf, 0x23, 0x5a, + 0x4e, 0x30, 0xcd, 0x64, 0xef, 0x01, 0x5f, 0xd9, 0x82, 0x31, 0x14, 0x8e, + 0x09, 0xdd, 0x79, 0xee, 0x94, 0x9a, 0x7c, 0xd1, 0xca, 0x7b, 0x70, 0xe7, + 0x04, 0x14, 0x7d, 0x19, 0x76, 0xac, 0xeb, 0xc3, 0xe4, 0xd1, 0x55, 0x96, + 0xd2, 0x06, 0x09, 0x9f, 0xc9, 0x15, 0x25, 0x61, 0x62, 0xab, 0xe5, 0x95, + 0x42, 0xbc, 0x14, 0x9d, 0xcd, 0xe8, 0x07, 0xc3, 0x3b, 0x89, 0x15, 0x0b, + 0xdc, 0x63, 0x0c, 0x9c, 0x23, 0xe2, 0x4f, 0x2d, 0x7e, 0xe7, 0xd4, 0x9b, + 0xf8, 0x5f, 0xb4, 0xc2, 0xb4, 0x7e, 0x2f, 0x26, 0x65, 0x8f, 0xbc, 0x0b, + 0x93, 0xeb, 0x56, 0xa8, 0x9a, 0xfd, 0x49, 0x7d, 0x78, 0x95, 0xfb, 0x76, + 0x71, 0x8b, 0xbc, 0xc3, 0x43, 0x1a, 0x5f, 0xb5, 0xee, 0xdf, 0xb6, 0x68, + 0x85, 0xbe, 0x13, 0x74, 0xb1, 0x74, 0x94, 0x0c, 0x55, 0x12, 0x4a, 0x30, + 0x23, 0x31, 0x90, 0xcb, 0xe6, 0x36, 0xe0, 0x41, 0x8c, 0x24, 0x8d, 0x4e, + 0xb6, 0x32, 0x51, 0xe2, 0xcd, 0x2f, 0x5b, 0x24, 0x4f, 0x37, 0xa7, 0x6b, + 0xc9, 0xb1, 0x67, 0xe5, 0x02, 0x21, 0xdd, 0x82, 0x6e, 0x9b, 0x1e, 0xba, + 0x00, 0x53, 0x6e, 0x99, 0x25, 0x74, 0xc6, 0xf8, 0x4d, 0xb4, 0xd5, 0x26, + 0xf4, 0x0d, 0x29, 0xf6, 0x24, 0x76, 0xd9, 0xc4, 0x1e, 0x9c, 0x97, 0x63, + 0xd8, 0x8e, 0xb3, 0x71, 0x8b, 0x91, 0xac, 0x53}, + // secret + {0x9d, 0x2e, 0xac, 0x93, 0x6b, 0x7d, 0x0e, 0xf4, 0x07, 0xed, 0x5f, + 0xb1, 0x44, 0x8b, 0x5c, 0x51, 0x1c, 0x01, 0x60, 0x7a, 0x90, 0xd6, + 0x1f, 0xc6, 0xbe, 0x72, 0x89, 0x3d, 0xbf, 0x60, 0xd1, 0x20}, + true}, + // tcID: 95 + {95, + params_ml_kem768_test_mode, + // privateKey + {0x2d, 0x13, 0x79, 0x7f, 0xf5, 0x07, 0x98, 0x6c, 0x80, 0xe5, 0xf2, 0xb7, + 0xca, 0x11, 0x2c, 0x21, 0x9a, 0x73, 0xbf, 0x71, 0xc0, 0x99, 0x94, 0x37, + 0x70, 0x66, 0x8f, 0x77, 0x80, 0xa0, 0x52, 0x31, 0x94, 0x66, 0xc2, 0x29, + 0x6b, 0xf6, 0x7f, 0xb7, 0x1c, 0x65, 0xee, 0x31, 0xc2, 0x40, 0x27, 0xa0, + 0x0d, 0x35, 0x27, 0xf3, 0xb0, 0x3d, 0x40, 0x7c, 0xa0, 0x4e, 0x43, 0xae, + 0x2e, 0x03, 0x0a, 0x60, 0x09, 0xba, 0x7b, 0x85, 0x13, 0x32, 0xb4, 0xc5, + 0x34, 0x5b, 0x39, 0x64, 0xa8, 0xa6, 0x39, 0x03, 0x95, 0xab, 0x80, 0x0b, + 0x2c, 0x87, 0xab, 0x4c, 0x85, 0x2c, 0x09, 0x9b, 0x95, 0x0b, 0xc5, 0x32, + 0x4d, 0xf1, 0x32, 0x30, 0xd6, 0x98, 0xbb, 0xb3, 0x7c, 0xd5, 0x37, 0x38, + 0xeb, 0x34, 0x47, 0xeb, 0xba, 0x75, 0x9c, 0x7a, 0x0f, 0xbd, 0xa7, 0x46, + 0xd3, 0x48, 0xb0, 0xdc, 0x98, 0x5b, 0xd9, 0xd7, 0xbd, 0x44, 0x48, 0x2f, + 0x9a, 0xe3, 0x2d, 0x0f, 0x60, 0x06, 0x0b, 0xe6, 0xa6, 0x30, 0xbb, 0x51, + 0xe3, 0x2c, 0x57, 0x5f, 0xc7, 0x2e, 0xd3, 0xb2, 0xa1, 0xdd, 0xe0, 0x0e, + 0x23, 0x21, 0x96, 0x1f, 0xec, 0x50, 0xf4, 0x58, 0x3b, 0x68, 0xd2, 0x46, + 0xad, 0x1b, 0x91, 0x12, 0x8a, 0x76, 0x5f, 0x6c, 0x7b, 0xf9, 0x3c, 0xa4, + 0x3c, 0xdb, 0x24, 0x21, 0x41, 0x6c, 0x0c, 0x71, 0x13, 0x34, 0xe2, 0x3f, + 0x32, 0xd1, 0x19, 0xdd, 0xd7, 0x37, 0x47, 0x18, 0x40, 0x0e, 0xd8, 0xcb, + 0x28, 0x3b, 0x36, 0x11, 0x5a, 0xab, 0x9c, 0xd8, 0x32, 0x88, 0xa8, 0x17, + 0xa6, 0x69, 0x7c, 0x31, 0x43, 0x39, 0x7c, 0x59, 0x90, 0xe4, 0xc8, 0x88, + 0x08, 0x06, 0x23, 0x0b, 0x93, 0x61, 0x88, 0x4c, 0x53, 0x9a, 0x44, 0x66, + 0xae, 0x24, 0x10, 0x02, 0xf7, 0x85, 0x49, 0x14, 0xbd, 0x48, 0xb2, 0xa9, + 0xb4, 0x68, 0x23, 0x8d, 0x12, 0x42, 0xef, 0x47, 0x58, 0x70, 0x84, 0x00, + 0xdd, 0xd4, 0xa8, 0xfd, 0xb3, 0x41, 0xdd, 0x87, 0xc7, 0xd4, 0x22, 0x5e, + 0x20, 0x5a, 0xc8, 0x8d, 0x47, 0xbe, 0xd9, 0x93, 0x79, 0x6b, 0x23, 0x94, + 0x67, 0xc6, 0xa6, 0xbe, 0x98, 0x69, 0x67, 0xa9, 0x13, 0xac, 0x39, 0x33, + 0xca, 0x19, 0x98, 0x37, 0x1c, 0xb2, 0x44, 0x71, 0x1b, 0x90, 0xda, 0x63, + 0x8e, 0x79, 0x7e, 0x78, 0xa9, 0x5c, 0xc0, 0xd2, 0x30, 0xc3, 0x9a, 0x1c, + 0xd6, 0x28, 0x2a, 0x9b, 0xac, 0x68, 0xfe, 0x25, 0x14, 0xae, 0x78, 0x33, + 0xb4, 0x12, 0xb0, 0x34, 0x66, 0x65, 0x38, 0x68, 0x27, 0x65, 0xc4, 0x24, + 0xd9, 0xab, 0x1f, 0x69, 0x57, 0x8d, 0xdd, 0xf0, 0x30, 0xd3, 0x73, 0x4a, + 0x62, 0x0a, 0x4d, 0x22, 0xf2, 0x4a, 0xd1, 0x06, 0x92, 0xd5, 0xa0, 0x86, + 0x65, 0x68, 0x89, 0x05, 0x63, 0x92, 0x76, 0xd3, 0xc9, 0x26, 0x3b, 0xbf, + 0x74, 0x58, 0x78, 0x16, 0xa1, 0x88, 0x24, 0x90, 0x10, 0x56, 0x05, 0x40, + 0x83, 0x1a, 0xa1, 0xf4, 0x38, 0xcf, 0xb1, 0x56, 0xb7, 0x01, 0x71, 0x3e, + 0xab, 0x1c, 0x48, 0xf0, 0x11, 0x48, 0xd5, 0x14, 0x7a, 0x13, 0x31, 0x83, + 0x17, 0xa2, 0x1a, 0xab, 0xa5, 0x15, 0x89, 0x3b, 0xa8, 0x4a, 0x45, 0x3f, + 0x21, 0x5a, 0x6c, 0x2b, 0x2c, 0x7a, 0xf2, 0x19, 0x09, 0x1d, 0xf5, 0xa3, + 0x76, 0xf8, 0xad, 0x57, 0x82, 0x5e, 0xf0, 0x98, 0x96, 0xf4, 0x14, 0xaa, + 0x57, 0x75, 0x24, 0xa0, 0x08, 0x70, 0x86, 0x91, 0x5e, 0x20, 0x6a, 0xab, + 0xb2, 0x5c, 0x0d, 0xd5, 0x66, 0x94, 0x44, 0xe6, 0xa1, 0xd1, 0xfb, 0xae, + 0x5c, 0xd5, 0xa4, 0x90, 0xb0, 0x28, 0x3d, 0x6b, 0x77, 0xdb, 0x65, 0x8d, + 0x54, 0x64, 0x9b, 0xfb, 0x49, 0x9d, 0x78, 0xb2, 0x09, 0xdf, 0xeb, 0x81, + 0x5b, 0xea, 0xc2, 0x0b, 0x54, 0x3d, 0x3f, 0x38, 0x66, 0x75, 0xf2, 0x53, + 0xec, 0x29, 0x66, 0x34, 0xcc, 0x32, 0x19, 0x83, 0x33, 0x8b, 0x10, 0x9b, + 0xba, 0x7b, 0x03, 0x26, 0xf7, 0x66, 0xe9, 0xc9, 0x0d, 0xd1, 0xc0, 0xa1, + 0x91, 0x6b, 0xb2, 0xd7, 0x36, 0x64, 0xed, 0xb1, 0xc6, 0xa0, 0x41, 0x95, + 0xa3, 0x1b, 0xac, 0x03, 0x02, 0xcb, 0x8a, 0xc9, 0xa2, 0xdb, 0xd7, 0x25, + 0xc5, 0x79, 0xcb, 0xfb, 0x6a, 0x93, 0x44, 0xc4, 0x67, 0x33, 0x80, 0x59, + 0x90, 0x35, 0x51, 0x35, 0x86, 0x08, 0x73, 0x07, 0x69, 0x2e, 0xe7, 0x96, + 0x89, 0xd3, 0xc1, 0x4a, 0x49, 0x03, 0x19, 0x7b, 0x04, 0x1a, 0xe9, 0x8f, + 0xe4, 0x64, 0x3f, 0x86, 0xcc, 0x3b, 0x02, 0xd3, 0x2c, 0x03, 0x23, 0x1c, + 0xbb, 0xa2, 0x31, 0x7c, 0x16, 0x62, 0x6c, 0x09, 0x0f, 0xf0, 0x21, 0x9f, + 0xd7, 0xa1, 0xb3, 0x2b, 0x5a, 0x0c, 0x6c, 0xf0, 0x6c, 0xcb, 0x33, 0x41, + 0x75, 0x1a, 0x29, 0xe4, 0x99, 0x4c, 0x91, 0x54, 0x30, 0x3f, 0xa4, 0x87, + 0x89, 0xd8, 0xb1, 0x2b, 0x77, 0x34, 0x25, 0xea, 0xca, 0xf8, 0x40, 0x04, + 0xbc, 0xb1, 0x9b, 0x46, 0x81, 0x27, 0xb4, 0x92, 0x13, 0x6f, 0xdb, 0x39, + 0x79, 0x14, 0x65, 0x09, 0x0b, 0x5f, 0xbb, 0x36, 0xcf, 0xb4, 0x24, 0x09, + 0xcf, 0x78, 0x5a, 0x56, 0x42, 0x04, 0x7d, 0xba, 0x01, 0x2c, 0xe8, 0x98, + 0x48, 0x78, 0x4a, 0x30, 0x11, 0xb6, 0x88, 0x54, 0x29, 0x9e, 0x21, 0x71, + 0xfd, 0xd3, 0xa5, 0x3b, 0x8b, 0x7c, 0x2b, 0xf3, 0x93, 0x60, 0x57, 0xbe, + 0xd0, 0xf2, 0x06, 0x7e, 0x31, 0x6a, 0xd7, 0xf9, 0x25, 0xfe, 0x39, 0x58, + 0xc0, 0x26, 0xca, 0xbf, 0x45, 0xad, 0x10, 0x26, 0x3d, 0xb7, 0x83, 0x87, + 0xe7, 0xc6, 0xc6, 0xce, 0x74, 0x77, 0xfc, 0x0c, 0x95, 0x03, 0x4a, 0xba, + 0x45, 0x31, 0xbe, 0x21, 0x70, 0x91, 0x26, 0x5c, 0xb2, 0xcd, 0xda, 0xb7, + 0x42, 0xf2, 0x9d, 0x21, 0x40, 0x9f, 0x42, 0x9c, 0x65, 0xb9, 0x41, 0xac, + 0x60, 0xa7, 0xbb, 0xdd, 0xd9, 0x1c, 0xac, 0x04, 0xbe, 0x30, 0x7c, 0x75, + 0xf3, 0x23, 0xaf, 0x8d, 0x6c, 0x15, 0x59, 0x75, 0xc7, 0xc1, 0x28, 0x39, + 0xcb, 0xa1, 0x7d, 0x22, 0x69, 0x7f, 0x67, 0x2c, 0x73, 0x57, 0x31, 0x8e, + 0x53, 0x28, 0x5b, 0x19, 0x48, 0x9d, 0x79, 0xec, 0xcc, 0xe6, 0x67, 0x69, + 0x2b, 0x11, 0x6f, 0xb2, 0x22, 0xa7, 0xdf, 0x88, 0x43, 0xdb, 0xa8, 0xbc, + 0xa7, 0x61, 0x15, 0x97, 0xe6, 0x78, 0x4a, 0x8c, 0xc7, 0x34, 0x56, 0xa9, + 0xd2, 0x97, 0xac, 0x6d, 0x54, 0xb9, 0x42, 0xba, 0x90, 0x2e, 0xe2, 0x0e, + 0xe8, 0xd7, 0x55, 0x25, 0x67, 0x17, 0x43, 0x5b, 0xab, 0x9b, 0xa3, 0x36, + 0x94, 0x5b, 0x0e, 0x71, 0xb5, 0x98, 0x6d, 0x51, 0x7f, 0x02, 0x03, 0x4a, + 0x9e, 0x90, 0xc9, 0x03, 0x07, 0xb7, 0xfe, 0xb5, 0x00, 0x47, 0x2a, 0x21, + 0x29, 0x49, 0xb0, 0xf3, 0xc5, 0xcd, 0x22, 0xc7, 0x32, 0x49, 0x66, 0xce, + 0x7a, 0x10, 0xc6, 0xea, 0x05, 0x59, 0x8f, 0x22, 0xbf, 0xdb, 0xab, 0x8e, + 0x42, 0x76, 0x30, 0xd2, 0x00, 0x2a, 0x81, 0x5b, 0x0b, 0x96, 0x26, 0x05, + 0x3d, 0x46, 0xbf, 0xaa, 0x65, 0xa8, 0x96, 0x16, 0x9f, 0xdf, 0x8c, 0xb9, + 0xb7, 0x63, 0x85, 0x7f, 0x69, 0x99, 0xc6, 0xa7, 0x34, 0x3b, 0x8b, 0xae, + 0x42, 0x08, 0xc7, 0x1c, 0x60, 0x0f, 0x95, 0x02, 0x08, 0x06, 0x8c, 0xb5, + 0x7a, 0x74, 0x7f, 0x69, 0xa3, 0xa2, 0x21, 0x5c, 0xa2, 0x3f, 0x32, 0x7f, + 0xb6, 0x48, 0xb2, 0x0f, 0xd9, 0xc5, 0x3e, 0x11, 0x6c, 0xe5, 0x8c, 0x2f, + 0x4b, 0xaa, 0xa6, 0x77, 0x58, 0x30, 0x87, 0x08, 0xa0, 0xe1, 0x4b, 0x74, + 0xa5, 0x48, 0xa8, 0x88, 0x35, 0x99, 0xbc, 0x07, 0x17, 0x37, 0x35, 0x40, + 0x22, 0x29, 0x19, 0x6c, 0x7a, 0x26, 0x9f, 0x72, 0xcf, 0x42, 0x84, 0x5b, + 0x08, 0x83, 0x09, 0x5a, 0x57, 0x21, 0x26, 0x31, 0x12, 0x70, 0x10, 0xac, + 0x9e, 0x22, 0x91, 0x12, 0x2b, 0x4c, 0xf4, 0x16, 0x25, 0x0f, 0xd0, 0x15, + 0x63, 0xa4, 0x60, 0x31, 0x02, 0x8c, 0xff, 0x57, 0x45, 0xb4, 0x75, 0x36, + 0x5f, 0x77, 0x68, 0x41, 0x86, 0x8b, 0x0f, 0xba, 0x99, 0xc7, 0x63, 0x50, + 0x3f, 0x33, 0x7d, 0x41, 0x66, 0x81, 0x31, 0x28, 0x8c, 0x0c, 0xf8, 0x4b, + 0xa5, 0x53, 0x06, 0x22, 0xf8, 0x95, 0x7a, 0x56, 0x53, 0x3e, 0xa5, 0x3e, + 0xca, 0xb6, 0x6c, 0x19, 0xc2, 0x09, 0x4c, 0xe3, 0x40, 0xd0, 0x5a, 0x88, + 0xc0, 0x10, 0xa3, 0x25, 0x01, 0x7d, 0x91, 0xac, 0x21, 0x6a, 0x03, 0x8e, + 0xeb, 0xca, 0x18, 0x92, 0x80, 0x2f, 0x00, 0x95, 0x61, 0xc6, 0x16, 0x87, + 0x77, 0xdb, 0x13, 0xfb, 0x7b, 0xcc, 0x69, 0x24, 0x87, 0x61, 0xab, 0x64, + 0xfa, 0x0a, 0x40, 0x32, 0x59, 0x99, 0x7b, 0x18, 0xa1, 0x7f, 0x48, 0xa7, + 0x25, 0xfb, 0x86, 0x72, 0xc4, 0xbd, 0x35, 0x69, 0x9d, 0xaa, 0x14, 0x12, + 0xde, 0x7c, 0x09, 0xc0, 0x16, 0x58, 0x36, 0x58, 0x3c, 0xcc, 0xc0, 0x3a, + 0x59, 0x00, 0x5c, 0xe7, 0xc8, 0x90, 0x54, 0x0c, 0x4b, 0x9c, 0xf0, 0x5d, + 0x33, 0x0a, 0xa6, 0x45, 0xa4, 0xbb, 0x50, 0x38, 0x67, 0x2f, 0x36, 0x19, + 0xdc, 0xcb, 0x42, 0x7a, 0x37, 0x0f, 0x43, 0x7c, 0x16, 0x49, 0x1a, 0x15, + 0xa0, 0xc6, 0x09, 0x50, 0xf1, 0x9a, 0xf7, 0x59, 0x9a, 0x1e, 0x29, 0x9e, + 0x6c, 0x40, 0xc8, 0x28, 0xa2, 0x49, 0x2d, 0x44, 0x74, 0xc9, 0xcc, 0x50, + 0xa6, 0x7c, 0x55, 0x83, 0x51, 0xa8, 0xd5, 0x7b, 0x4e, 0xe2, 0x7a, 0x99, + 0x09, 0x82, 0xab, 0xd3, 0xf9, 0x35, 0xd6, 0xf3, 0x17, 0x97, 0xe5, 0xa3, + 0xad, 0xd6, 0x9c, 0x4c, 0x76, 0x89, 0x3b, 0x56, 0x9f, 0x22, 0x94, 0x5b, + 0x42, 0xe1, 0x41, 0x33, 0x65, 0xc1, 0x41, 0xa8, 0x1a, 0x62, 0xab, 0xce, + 0xad, 0x25, 0x42, 0x83, 0x7c, 0x0f, 0x10, 0x18, 0xc2, 0x66, 0x60, 0x5a, + 0x06, 0x59, 0x0c, 0x7a, 0x96, 0x29, 0x6e, 0x87, 0x51, 0x39, 0xfc, 0x79, + 0x39, 0xca, 0x1d, 0xf6, 0xc0, 0x7a, 0x6f, 0x82, 0x71, 0x53, 0x9a, 0xb8, + 0xea, 0xe8, 0xc2, 0x5f, 0xea, 0x4c, 0x31, 0x3a, 0x59, 0x0b, 0xc0, 0x4e, + 0x25, 0xe9, 0x54, 0xc6, 0x48, 0x73, 0x23, 0x30, 0x72, 0x6b, 0xcc, 0x3f, + 0xed, 0xc3, 0x9f, 0x46, 0x32, 0x0d, 0x82, 0xc9, 0xb2, 0x0f, 0x22, 0x9d, + 0x21, 0x11, 0x37, 0x05, 0x3b, 0xa7, 0x2b, 0x05, 0xcb, 0x2f, 0xc8, 0x97, + 0x21, 0x2b, 0x18, 0x48, 0x39, 0xaf, 0x83, 0x24, 0xa1, 0x89, 0xb9, 0xa8, + 0x55, 0xc0, 0xb2, 0x32, 0x44, 0x76, 0x68, 0xd8, 0x99, 0xec, 0x67, 0x50, + 0x75, 0xd3, 0x5f, 0xf5, 0xdb, 0x53, 0xe9, 0x32, 0x2c, 0x3f, 0x32, 0x81, + 0x62, 0x2a, 0x05, 0xa7, 0x99, 0x6c, 0xcb, 0x52, 0x15, 0x92, 0x55, 0xae, + 0x01, 0x28, 0x86, 0xb9, 0x82, 0xa1, 0xe9, 0xa0, 0x3c, 0xb1, 0xc3, 0xa0, + 0x19, 0x9a, 0x32, 0x00, 0x1d, 0x75, 0x30, 0x40, 0x68, 0x56, 0x01, 0x62, + 0x29, 0x5c, 0x8a, 0xa8, 0x57, 0x4a, 0xcc, 0x36, 0x3d, 0x80, 0x63, 0x56, + 0xa9, 0xd3, 0x88, 0x28, 0x3c, 0xbd, 0x0d, 0x70, 0x0c, 0x36, 0xda, 0xb8, + 0xb5, 0x58, 0x74, 0xcd, 0xa6, 0x06, 0x08, 0xfb, 0x90, 0xef, 0x46, 0x09, + 0x41, 0x04, 0x59, 0xa5, 0x31, 0x9a, 0x4f, 0x33, 0xad, 0x71, 0x79, 0x32, + 0x9f, 0x17, 0x8a, 0x68, 0x70, 0xbc, 0xd6, 0x08, 0x4c, 0xd8, 0xb2, 0x13, + 0xa0, 0x6c, 0x88, 0x93, 0x49, 0x52, 0xff, 0x75, 0x91, 0x69, 0x87, 0xa7, + 0x38, 0xa3, 0x57, 0x4c, 0x60, 0x45, 0x1d, 0x70, 0xaf, 0x60, 0xc8, 0x55, + 0xd8, 0xf7, 0x8c, 0x7e, 0x68, 0x01, 0x57, 0x32, 0x09, 0x38, 0x65, 0x8f, + 0x6a, 0x42, 0x1f, 0x1b, 0x59, 0x0c, 0x7b, 0xe8, 0x74, 0x29, 0xb9, 0x5f, + 0x0b, 0x5a, 0x51, 0x78, 0xb2, 0x5e, 0x3f, 0x2b, 0x61, 0xe9, 0x26, 0x8d, + 0x41, 0x48, 0x6c, 0x05, 0x40, 0x24, 0x23, 0xd1, 0x2d, 0x52, 0x9b, 0x2c, + 0x8a, 0xd1, 0x09, 0xec, 0xc1, 0x0d, 0x48, 0xe6, 0x84, 0x1a, 0xac, 0x7c, + 0x2f, 0x0b, 0x22, 0x70, 0x09, 0x85, 0xe2, 0x1a, 0x4d, 0xef, 0x67, 0x71, + 0xf7, 0x0a, 0xb0, 0x19, 0x19, 0x56, 0x22, 0x03, 0x92, 0x5b, 0x16, 0x80, + 0x28, 0x24, 0x87, 0x71, 0x42, 0xb9, 0x35, 0x17, 0x73, 0x3f, 0xe5, 0x92, + 0x2b, 0xe2, 0x86, 0x38, 0xb7, 0x28, 0xf6, 0xcb, 0xbf, 0x21, 0xd0, 0x79, + 0xa2, 0xa6, 0x1b, 0xf1, 0xac, 0x79, 0x95, 0x27, 0x20, 0x31, 0xe0, 0x76, + 0xea, 0xb6, 0xb6, 0x8b, 0x12, 0xbe, 0xc7, 0x82, 0xcc, 0x3c, 0x96, 0x7f, + 0xbc, 0x95, 0x6c, 0x0f, 0x4c, 0x93, 0x45, 0x96, 0x7d, 0x59, 0xc1, 0x7e, + 0x55, 0xc8, 0x92, 0x6f, 0x34, 0x2b, 0xc6, 0x06, 0x7f, 0xab, 0x55, 0x78, + 0x1e, 0xca, 0x4d, 0x47, 0x01, 0x62, 0x58, 0xc0, 0xb6, 0xa3, 0xa3, 0x9c, + 0x5e, 0xa9, 0x8f, 0xb9, 0xf4, 0x67, 0x45, 0xd5, 0x2a, 0xb1, 0x03, 0xac, + 0xf7, 0xd4, 0x5d, 0x64, 0x88, 0xb9, 0x1f, 0x87, 0x2b, 0xbb, 0x31, 0x3d, + 0xf7, 0x62, 0x47, 0xd2, 0x97, 0xae, 0xb8, 0xf8, 0x7e, 0xe1, 0xc6, 0x3a, + 0x2b, 0xab, 0x82, 0xea, 0xc5, 0x9f, 0x4f, 0x80, 0xcd, 0x9e, 0x1b, 0x84, + 0x58, 0x53, 0xab, 0x01, 0x48, 0xa4, 0xf1, 0x2a, 0x09, 0xfc, 0x98, 0x22, + 0x18, 0x04, 0x36, 0xbf, 0x70, 0x33, 0xc6, 0x37, 0xcd, 0x17, 0x96, 0x2b, + 0x19, 0x47, 0x2f, 0xaa, 0x98, 0x95, 0x7b, 0x22, 0x6c, 0x3a, 0x33, 0x7a, + 0x04, 0x89, 0xcb, 0xe3, 0xb6, 0x1e, 0x2b, 0xb9, 0x2d, 0xd0, 0xa3, 0x90, + 0xd5, 0x4c, 0x5d, 0x56, 0x89, 0x35, 0x29, 0xc7, 0x5f, 0x95, 0x6a, 0x41, + 0x5d, 0x34, 0x41, 0xf6, 0x96, 0xb8, 0x42, 0x31, 0x87, 0xc6, 0xb1, 0xc6, + 0xa3, 0x1c, 0x2c, 0x42, 0xf8, 0x50, 0x03, 0x90, 0x05, 0x40, 0xa2, 0x1c, + 0x00, 0x54, 0x6b, 0x4a, 0xd7, 0x5f, 0x1c, 0x00, 0x1b, 0xc5, 0x64, 0x43, + 0xae, 0x87, 0xa8, 0x7b, 0x19, 0x93, 0xf5, 0xd1, 0x8b, 0x4e, 0x12, 0x11, + 0x10, 0x02, 0x06, 0xa3, 0x66, 0x5e, 0xd3, 0x86, 0x8a, 0x51, 0x0b, 0xbc, + 0x70, 0xc6, 0x35, 0x3d, 0xf8, 0x9b, 0xf8, 0xb9, 0x33, 0xd9, 0x76, 0x2d, + 0x49, 0x9b, 0xa6, 0x12, 0x57, 0xbf, 0x15, 0xd6, 0x53, 0xee, 0xf4, 0x2c, + 0xd7, 0x37, 0xba, 0xe2, 0x5c, 0x03, 0x98, 0x66, 0x44, 0xf9, 0xc9, 0x79, + 0x68, 0xcb, 0xa2, 0xba, 0x7a, 0x87, 0x25, 0x17, 0x2c, 0x78, 0xf1, 0x5a, + 0xfb, 0x65, 0x92, 0x21, 0x11, 0x51, 0x69, 0xec, 0x08, 0xd0, 0x55, 0x7c, + 0x7a, 0xa9, 0x96, 0x55, 0x10, 0x61, 0x27, 0x17, 0x47, 0x14, 0x4c, 0x28, + 0x1c, 0x94, 0x18, 0x1b, 0xa2, 0x17, 0x78, 0x03, 0xba, 0x6b, 0x67, 0x1a, + 0x13, 0xe4, 0x06, 0xac, 0xf5, 0xb4, 0x74, 0xa0, 0xca, 0x96, 0xd1, 0x8a, + 0x96, 0x99, 0x7c, 0xee, 0xe6, 0x08, 0x2c, 0x21, 0x8d, 0xb2, 0x7c, 0x94, + 0xff, 0x4c, 0x55, 0xb3, 0x1c, 0x2c, 0xd0, 0xbc, 0x44, 0x38, 0xab, 0x71, + 0x9d, 0x1b, 0x1c, 0x6e, 0xf4, 0x6e, 0x69, 0x29, 0x87, 0x98, 0x98, 0x6e, + 0xde, 0xd0, 0xc8, 0x32, 0x92, 0xa7, 0x0c, 0xa0, 0xb0, 0x61, 0xaa, 0x86, + 0xb6, 0x25, 0xc3, 0x80, 0x3b, 0x63, 0x89, 0x02, 0x12, 0x38, 0x45, 0x7a, + 0x9f, 0xe3, 0x27, 0x95, 0x7c, 0x63, 0xd7, 0xe1, 0x17, 0x27, 0xd7, 0x95, + 0x42, 0x03, 0xc7, 0x20, 0x24, 0x4a, 0xa5, 0xd8, 0x0f, 0x6c, 0x30, 0x3d, + 0xe4, 0x9b, 0x73, 0xd7, 0x13, 0x48, 0xda, 0xcb, 0x70, 0x0b, 0x7a, 0x4b, + 0xe7, 0x95, 0xc5, 0x06, 0x51, 0x10, 0xe5, 0x92, 0x64, 0xaf, 0xcb, 0x56, + 0x65, 0x44, 0x2f, 0x07, 0xe1, 0x4b, 0x39, 0xd5, 0x91, 0xf3, 0xd5, 0x68, + 0x38, 0xc9, 0x8c, 0x78, 0xf8, 0xa0, 0x4c, 0xc1, 0xa2, 0xd1, 0x01, 0x1b, + 0x2d, 0x32, 0x32, 0x34, 0x89, 0xcf, 0x31, 0x58, 0x1e, 0x03, 0x45, 0x7b, + 0xd1, 0x87, 0x6f, 0x6b, 0x22, 0x95, 0xf4, 0x4a, 0x10, 0x3f, 0x0c, 0x4e, + 0xd3, 0xf9, 0x39, 0xfe, 0x16, 0xc5, 0x2d, 0xe1, 0x13, 0xe7, 0xac, 0x8f, + 0x4c, 0x95, 0x5f, 0xd8, 0x8b, 0x18, 0x0d, 0x8c, 0xcd, 0xfc, 0x60, 0x5c, + 0x13, 0xcb, 0x66, 0x57, 0xfb, 0x9e, 0x4a, 0xf7, 0xcc, 0x70, 0x2b, 0x65, + 0xa1, 0x3b, 0x9c, 0x12, 0x15, 0x36, 0x09, 0x42, 0x92, 0xbd, 0xe5, 0xa7, + 0xa7, 0x52, 0xce, 0xc8, 0xa2, 0x76, 0x1b, 0x2c, 0xbc, 0x20, 0xe8, 0x82, + 0xf8, 0xb6, 0x51, 0xdf, 0x73, 0xb2, 0x3c, 0x4b, 0x23, 0xc3, 0xc8, 0x30, + 0x9a, 0x50, 0xa0, 0xab, 0x8a, 0x7f, 0x2b, 0x43, 0x54, 0x8a, 0x14, 0x3c, + 0x40, 0xa5, 0x97, 0xd6, 0x39, 0x46, 0xef, 0xe4, 0xc9, 0xa2, 0x4c, 0xad, + 0x0d, 0xc0, 0xb9, 0x8c, 0x6a, 0x91, 0x29, 0xd6, 0xb2, 0xc2, 0xc1, 0x8d, + 0x4f, 0xa4, 0x83, 0x7c, 0xe7, 0x20, 0x84, 0xc5, 0x14, 0xda, 0xf3, 0x78, + 0x9f, 0xec, 0x2a, 0x50, 0x98, 0xbf, 0xd2, 0xf1, 0xa9, 0xe0, 0x56, 0xc0, + 0xa2, 0x0a, 0x03, 0xe6, 0x26, 0x85, 0xe3, 0xfc, 0x6a, 0xaa, 0xb3, 0xad, + 0x3d, 0xc2, 0x0f, 0xf4, 0xac, 0x68, 0x6a, 0xda, 0xaf, 0x9d, 0x1b, 0x2f, + 0xba, 0x94, 0xb4, 0x3d, 0x55, 0x98, 0x4a, 0x53, 0x64, 0xb3, 0xf7, 0xb5, + 0xad, 0xe0, 0x22, 0x41, 0x21, 0x4a, 0xa5, 0xa6, 0x63, 0xf1, 0x19, 0x03, + 0xe7, 0x55, 0x0f, 0xd4, 0x68, 0x8e, 0xe7, 0x75, 0xdd, 0x2a, 0xbe, 0x3f, + 0x3e, 0x55, 0x57, 0xc5, 0x54, 0x56, 0x7a, 0xf0, 0x40, 0x5e, 0xbc, 0x8f, + 0xfd, 0xd9, 0x16, 0x43, 0x59, 0xfc, 0x38, 0xf5, 0xa5, 0xf2, 0x29, 0x72, + 0x86, 0xf6, 0x2d, 0xf6, 0xaf, 0xad, 0x2c, 0x41, 0x6c, 0x87, 0x6b, 0x55, + 0xc9, 0xd1, 0x12, 0x95, 0x05, 0x27, 0x3a, 0xf9, 0x2b, 0xee, 0xce, 0xe3, + 0xd1, 0xfb, 0x23, 0xf5, 0x8f, 0xdf, 0x69, 0x05, 0xb4, 0x94, 0xac, 0x4d, + 0x33, 0xde, 0x50, 0xe9, 0x4c, 0x0f, 0x09, 0x70, 0x76, 0x54, 0x64, 0x3d, + 0xfb, 0xe1, 0xa3, 0x6e, 0x7a, 0xae, 0x5b, 0x9e, 0x41, 0x31, 0xcd, 0x91}, + // ciphertext + {0x74, 0xaa, 0x5f, 0xf2, 0xd0, 0x34, 0x32, 0x2e, 0xbf, 0x62, 0x5a, 0x73, + 0xe2, 0xa0, 0xc3, 0x5f, 0x38, 0xab, 0x9c, 0x33, 0x90, 0xfd, 0xdd, 0x65, + 0x63, 0x09, 0xe2, 0xae, 0x19, 0xc3, 0x16, 0xaa, 0xf1, 0x3f, 0x10, 0x4d, + 0x29, 0x4b, 0x85, 0x43, 0xf2, 0x4d, 0x97, 0x0f, 0x12, 0x2a, 0x50, 0x99, + 0xfc, 0xbe, 0x0b, 0xaa, 0xc8, 0xb4, 0x21, 0x77, 0x9f, 0xf1, 0xca, 0x23, + 0xcc, 0x59, 0xdb, 0xe8, 0x36, 0x3a, 0xad, 0x8b, 0x73, 0xef, 0x10, 0xea, + 0x8d, 0xdf, 0xfe, 0xa5, 0x8f, 0xdd, 0x12, 0xa4, 0xd4, 0x74, 0xf3, 0x34, + 0x47, 0xaa, 0xac, 0x13, 0x73, 0x6d, 0x34, 0xb0, 0x6e, 0x4e, 0x99, 0xbb, + 0x8f, 0x1c, 0x17, 0xa0, 0xf5, 0xf5, 0x0d, 0x4c, 0x64, 0x00, 0x74, 0x31, + 0xe7, 0x81, 0xa8, 0x05, 0x58, 0x61, 0xaf, 0xd2, 0xcb, 0x9a, 0x39, 0x0b, + 0x51, 0xfc, 0x05, 0x1b, 0x45, 0xb5, 0xf2, 0x33, 0x89, 0xe5, 0x2f, 0x7a, + 0xd8, 0x57, 0x56, 0xa7, 0x5f, 0x0b, 0xf8, 0x42, 0x1b, 0x51, 0xde, 0x2f, + 0xdd, 0x74, 0x68, 0xdd, 0xd2, 0x49, 0xb0, 0xa9, 0x0e, 0xe5, 0x2f, 0x05, + 0x8f, 0xbc, 0xe9, 0x9c, 0x03, 0x33, 0x98, 0xc9, 0xbc, 0xb3, 0x6f, 0xac, + 0x74, 0x2d, 0xa0, 0xf7, 0x4d, 0xe6, 0x79, 0x76, 0x5f, 0xf9, 0x2b, 0x8f, + 0x40, 0xfc, 0xa3, 0x20, 0x68, 0x9c, 0x3b, 0xa4, 0x51, 0x25, 0x2c, 0x95, + 0x90, 0x2e, 0xf3, 0xba, 0x37, 0x92, 0x6b, 0x2f, 0x4d, 0x12, 0xd3, 0x00, + 0xa5, 0xa6, 0xe4, 0x92, 0x73, 0xda, 0xdb, 0x28, 0x1b, 0x8c, 0xff, 0x49, + 0x3b, 0x80, 0x95, 0x91, 0xa6, 0x0c, 0x9a, 0xb1, 0x6e, 0xe4, 0x06, 0xd2, + 0x3e, 0x5f, 0x29, 0x6a, 0x70, 0x28, 0x22, 0x35, 0x31, 0xef, 0xda, 0x92, + 0x3b, 0xb6, 0xcf, 0x15, 0x85, 0xd8, 0xb1, 0x7e, 0xb2, 0xb7, 0x3d, 0xcf, + 0xac, 0x84, 0xe2, 0x82, 0xb8, 0xe0, 0x0b, 0x0c, 0xea, 0xd3, 0x86, 0x79, + 0xa0, 0xd7, 0xad, 0x97, 0x74, 0x27, 0xc3, 0xc7, 0xda, 0xce, 0xeb, 0xe5, + 0xb7, 0x92, 0xdb, 0x0f, 0xb8, 0x29, 0x51, 0x51, 0x80, 0x5d, 0x2b, 0x80, + 0x5a, 0x53, 0x10, 0x1b, 0x0c, 0xd6, 0x1d, 0xa0, 0x0d, 0x80, 0xe4, 0x9a, + 0x48, 0x79, 0x26, 0x28, 0xfa, 0x1d, 0x52, 0x43, 0x2c, 0xef, 0xef, 0x7e, + 0xcb, 0x4c, 0x1a, 0xef, 0x36, 0xbf, 0xf4, 0x22, 0x0e, 0x3c, 0xca, 0x58, + 0xec, 0x02, 0x89, 0x4e, 0xf3, 0x57, 0x36, 0xbb, 0xb7, 0x6a, 0x73, 0x17, + 0x11, 0x47, 0x45, 0x9d, 0xc2, 0x4d, 0xcb, 0xc7, 0xf4, 0x96, 0x17, 0x00, + 0x47, 0x37, 0xbf, 0xdd, 0x84, 0x5f, 0x59, 0xed, 0xdc, 0xe7, 0x45, 0x68, + 0xed, 0x0b, 0x60, 0xba, 0x3c, 0xfc, 0x2b, 0xf7, 0xa4, 0xfd, 0xa2, 0xc8, + 0x50, 0xcc, 0x6d, 0x5a, 0xcf, 0x82, 0x0a, 0x96, 0x39, 0x10, 0x3f, 0x33, + 0x02, 0x2f, 0x37, 0xac, 0x06, 0x5d, 0xa5, 0x63, 0x32, 0x1a, 0x5b, 0x65, + 0x36, 0xb4, 0xf2, 0x15, 0xc0, 0x0a, 0xbe, 0xc4, 0x31, 0xb5, 0xb8, 0xde, + 0x23, 0xb1, 0x77, 0x09, 0xd4, 0xdf, 0xa4, 0xcb, 0x57, 0xb7, 0x79, 0x0e, + 0x08, 0x07, 0xd8, 0x1e, 0x61, 0x39, 0x21, 0x24, 0x9d, 0x30, 0x47, 0x74, + 0x02, 0xed, 0x3d, 0x60, 0xd3, 0x56, 0x92, 0xd1, 0x2e, 0xff, 0xcd, 0x9b, + 0xa9, 0x67, 0x18, 0x83, 0x18, 0x10, 0xab, 0x53, 0xdd, 0x18, 0x9f, 0x4c, + 0x55, 0x20, 0xfe, 0x90, 0x38, 0xc7, 0xc0, 0xb5, 0xa3, 0xfc, 0x3c, 0x32, + 0x4a, 0xc8, 0x88, 0xa1, 0x89, 0x22, 0x8c, 0x46, 0x8c, 0x22, 0x38, 0xb7, + 0x22, 0x58, 0x1c, 0x07, 0xb4, 0x27, 0xe8, 0x79, 0x9d, 0x60, 0x4f, 0xe9, + 0x97, 0x99, 0x3b, 0x6a, 0x85, 0x04, 0x4b, 0x1f, 0x2b, 0xb7, 0xea, 0x6d, + 0x3b, 0x75, 0x06, 0x6d, 0x07, 0xe6, 0x42, 0xd1, 0x08, 0x00, 0x4f, 0x2e, + 0x17, 0x17, 0x1e, 0x4d, 0x3e, 0xaa, 0x09, 0xba, 0xd8, 0x12, 0x09, 0x3b, + 0x76, 0xfc, 0x88, 0x23, 0xbf, 0x1c, 0x70, 0xd0, 0x61, 0x2a, 0x30, 0x2d, + 0x5c, 0xe2, 0x5a, 0xdc, 0xfd, 0xa9, 0x14, 0xdb, 0x31, 0xa1, 0x01, 0x72, + 0xf4, 0x7f, 0xc9, 0xbc, 0xcb, 0x4f, 0x71, 0xc8, 0x5d, 0xc6, 0xe1, 0x5c, + 0x25, 0x39, 0x91, 0xa1, 0xde, 0x91, 0xbc, 0x72, 0x86, 0x88, 0x1d, 0x87, + 0xbf, 0x50, 0x35, 0xdd, 0x92, 0x95, 0x3b, 0x6e, 0x1e, 0x91, 0xbe, 0x2e, + 0x8d, 0xd5, 0xdd, 0x49, 0x5f, 0xfa, 0x60, 0x94, 0xf4, 0x0b, 0xa9, 0x48, + 0x86, 0x54, 0x57, 0xaa, 0x9e, 0x2b, 0xa3, 0x6f, 0x06, 0x6f, 0x8b, 0x55, + 0xcb, 0x5c, 0xed, 0xf0, 0xb6, 0xac, 0x0d, 0x24, 0xe8, 0x4d, 0xa2, 0x55, + 0x7d, 0x9e, 0x16, 0xd7, 0x91, 0xe1, 0x99, 0xf5, 0x34, 0xfa, 0xac, 0x1b, + 0xac, 0xac, 0x74, 0xe8, 0x68, 0x96, 0x56, 0x9e, 0xfb, 0x00, 0xce, 0xdc, + 0x35, 0x79, 0xb3, 0x2c, 0x31, 0xde, 0x15, 0x61, 0xdf, 0x54, 0x39, 0x89, + 0x89, 0xd7, 0xce, 0x99, 0x56, 0x86, 0x1e, 0xc7, 0x0e, 0x93, 0x1e, 0x5a, + 0x28, 0x82, 0xb9, 0x01, 0x18, 0xdd, 0x0a, 0x30, 0xa1, 0xb2, 0x2a, 0x1a, + 0xc0, 0x84, 0x30, 0xa0, 0x72, 0x77, 0x84, 0x03, 0x07, 0xe7, 0xd2, 0xfa, + 0x9f, 0xa9, 0xe5, 0xa6, 0x17, 0xa9, 0xa1, 0x3a, 0x22, 0x5a, 0x08, 0x78, + 0x12, 0x1d, 0x1a, 0xc5, 0x3c, 0x85, 0x36, 0x4c, 0xc2, 0x1f, 0x65, 0xef, + 0x8d, 0xb5, 0xd2, 0xe3, 0xd3, 0x28, 0x07, 0x63, 0x45, 0x4a, 0x91, 0xad, + 0x53, 0xc7, 0x9a, 0x27, 0x6b, 0xe1, 0x8d, 0x86, 0xc2, 0x20, 0xe1, 0x5c, + 0xaa, 0xbf, 0x56, 0xcf, 0x05, 0xc0, 0x59, 0xdf, 0x4b, 0x91, 0x20, 0x80, + 0x7a, 0x82, 0x93, 0x4a, 0xad, 0xbf, 0xc7, 0x42, 0x52, 0x58, 0x5b, 0xc0, + 0xa6, 0x0e, 0x7d, 0x5f, 0x3a, 0x2a, 0x73, 0xea, 0x22, 0x35, 0x7a, 0xcf, + 0x1b, 0x87, 0xb0, 0x20, 0x8a, 0x7d, 0x98, 0x9e, 0x76, 0xaa, 0x4b, 0x64, + 0x6c, 0xa6, 0x86, 0x26, 0x76, 0x8e, 0xc4, 0x7c, 0x04, 0xf2, 0x1a, 0xae, + 0x8b, 0x01, 0xbd, 0x5d, 0x38, 0x9b, 0x89, 0x57, 0xdd, 0x87, 0x03, 0x63, + 0xd4, 0x5c, 0x54, 0x2a, 0xe3, 0x16, 0xe4, 0x6a, 0x02, 0x65, 0x0d, 0xf0, + 0x60, 0x67, 0x2d, 0x32, 0xa2, 0xae, 0xf6, 0x7a, 0x74, 0x55, 0x09, 0x0f, + 0x47, 0xac, 0xb3, 0x7f, 0x2d, 0x49, 0x5d, 0x92, 0x52, 0xe1, 0x19, 0x6d, + 0x89, 0x05, 0xda, 0x59, 0xa7, 0x51, 0x00, 0x38, 0x3f, 0x8c, 0x54, 0xf1, + 0x77, 0xb5, 0x2f, 0x0a, 0xed, 0x71, 0x14, 0x86, 0xf5, 0x8d, 0x4f, 0x6f, + 0x4d, 0x3d, 0x9f, 0x10, 0x84, 0x67, 0xa6, 0x8a, 0x73, 0x44, 0xdd, 0xf5, + 0x5e, 0xdb, 0x8f, 0x36, 0xc1, 0x9b, 0x1c, 0xbc, 0xba, 0x01, 0xbe, 0x3b, + 0xff, 0x34, 0xed, 0x73, 0x8f, 0x43, 0x1b, 0x2c, 0x05, 0x33, 0x96, 0xd8, + 0x2c, 0x56, 0xf5, 0x06, 0x25, 0x24, 0xc0, 0x89, 0xf2, 0xfe, 0xf5, 0xf6, + 0xf0, 0xdf, 0x9b, 0xf3, 0x32, 0x3d, 0x47, 0x12, 0x01, 0x67, 0x6a, 0x1f, + 0xaf, 0x7a, 0x60, 0x0c, 0x10, 0xde, 0x3a, 0x8c, 0xa9, 0x21, 0xf5, 0x63, + 0xb1, 0xb4, 0x1c, 0x70, 0x5e, 0xa4, 0x41, 0xb6, 0x77, 0xdf, 0x38, 0x4e, + 0xdf, 0xa1, 0xbb, 0xe9, 0xbb, 0x0a, 0x6b, 0x87, 0x76, 0x24, 0x34, 0x95, + 0x11, 0xf2, 0xa1, 0x07, 0xab, 0x8e, 0xbd, 0x7a, 0x17, 0xd1, 0x5d, 0x78, + 0xb8, 0x54, 0x3e, 0xcf, 0x48, 0xcc, 0xf3, 0x86, 0xa3, 0x41, 0xc9, 0xd3, + 0xb1, 0x32, 0x44, 0xd3, 0x4e, 0xe9, 0x33, 0x71, 0x22, 0x7c, 0xcc, 0x9b, + 0xb8, 0xf2, 0x06, 0xc9, 0x82, 0x69, 0x84, 0x06, 0x60, 0x28, 0x8b, 0xa4, + 0xf6, 0x80, 0x3d, 0x15, 0x0e, 0xa0, 0xbd, 0x36, 0x47, 0x47, 0xbd, 0x93, + 0x9e, 0x2b, 0x0f, 0x96, 0x78, 0x4c, 0x12, 0xd4, 0x8e, 0xf6, 0x67, 0xf4, + 0x8f, 0x21, 0xb6, 0xaf, 0x33, 0xff, 0x73, 0x20, 0x69, 0x4e, 0x61, 0x8a, + 0x6d, 0x24, 0x00, 0x48, 0xb4, 0x3e, 0x26, 0x64, 0x75, 0x61, 0x7a, 0xb4, + 0xef, 0xc0, 0x37, 0xb2, 0x7f, 0xec, 0xb2, 0x4d, 0x16, 0x0c, 0x1d, 0x66, + 0xfe, 0x0f, 0x92, 0x76, 0xa9, 0x78, 0x0b, 0xf3}, + // secret + {0xa0, 0xc2, 0xcb, 0x4a, 0x47, 0x6c, 0x1f, 0x55, 0x56, 0x2c, 0x7b, + 0xbb, 0x80, 0xb8, 0x8c, 0xc9, 0x8d, 0x48, 0xe9, 0x15, 0x9a, 0x11, + 0x09, 0x26, 0x66, 0x0f, 0x7c, 0xb0, 0x53, 0xfc, 0xfe, 0x08}, + true}, + // tcID: 96 + {96, + params_ml_kem1024_test_mode, + // privateKey + {0xf1, 0xb8, 0x44, 0x83, 0xe2, 0xa3, 0x74, 0x0c, 0x62, 0xf7, 0xb5, 0x0c, + 0xe3, 0x58, 0x88, 0x48, 0xfc, 0xc3, 0xdd, 0x48, 0x51, 0xd8, 0x86, 0x62, + 0x50, 0xdb, 0x6e, 0xb1, 0x03, 0x52, 0xc7, 0xab, 0x58, 0x2f, 0x53, 0x7f, + 0x25, 0xc0, 0x20, 0x5c, 0xe9, 0x7a, 0xf7, 0xd5, 0xa0, 0xbe, 0xa7, 0xb2, + 0x23, 0x0c, 0x37, 0xd4, 0x96, 0xa4, 0x7b, 0xe9, 0x2c, 0x36, 0x57, 0xc9, + 0x24, 0x49, 0x7c, 0x3d, 0xf9, 0x0b, 0xc3, 0xb5, 0x47, 0xc3, 0xa1, 0x29, + 0xc1, 0x65, 0x32, 0xf3, 0x58, 0x46, 0x20, 0xd7, 0x1f, 0x99, 0x25, 0x3e, + 0xb0, 0x27, 0x56, 0x82, 0xb7, 0x50, 0x07, 0xb5, 0xa1, 0x38, 0x72, 0x68, + 0x61, 0x57, 0x08, 0xc2, 0x10, 0xb9, 0xc8, 0xf3, 0x70, 0xce, 0x83, 0x04, + 0x37, 0x7a, 0x53, 0x5b, 0x8c, 0xcc, 0x0e, 0x55, 0x0d, 0xf7, 0x52, 0x1f, + 0x18, 0x53, 0x6a, 0x0a, 0xb4, 0xaa, 0xda, 0x86, 0x3d, 0xfc, 0x81, 0xbc, + 0x10, 0x44, 0xb3, 0x71, 0x35, 0xb4, 0x25, 0x84, 0xa8, 0xf7, 0x12, 0x1d, + 0xda, 0x40, 0x36, 0xec, 0x86, 0x95, 0x66, 0xd5, 0x51, 0xe3, 0xeb, 0xca, + 0x35, 0x90, 0x23, 0x72, 0x58, 0x0c, 0xe5, 0x5a, 0x3b, 0x58, 0x93, 0x4d, + 0x8e, 0x44, 0x59, 0x80, 0x45, 0x3f, 0xcd, 0x1b, 0x9a, 0x1c, 0x85, 0xb7, + 0x37, 0x48, 0xa9, 0x8f, 0xa8, 0x37, 0xcf, 0x67, 0x7c, 0x23, 0x26, 0x8a, + 0xb2, 0xea, 0x42, 0xbb, 0x64, 0x21, 0x98, 0xcc, 0x46, 0x31, 0x75, 0x31, + 0x04, 0xe9, 0x12, 0x1e, 0x38, 0x32, 0xd3, 0x4c, 0x7c, 0xea, 0xb0, 0x49, + 0xf7, 0xd2, 0x2f, 0x42, 0x5c, 0x09, 0x3f, 0xb6, 0xaa, 0x07, 0x0a, 0xbb, + 0x49, 0x78, 0x1e, 0xbe, 0x1b, 0xbd, 0x55, 0xf6, 0x63, 0x95, 0x73, 0x41, + 0xe4, 0x32, 0x81, 0x81, 0x69, 0xcf, 0xa8, 0x51, 0x5c, 0x9f, 0x04, 0x47, + 0x66, 0xc3, 0x97, 0xc1, 0x91, 0xc1, 0x29, 0x35, 0x5b, 0x24, 0x47, 0x30, + 0x33, 0x9b, 0x8e, 0x64, 0x04, 0xcc, 0x63, 0xb7, 0x1a, 0x1e, 0x93, 0x34, + 0x9d, 0xdb, 0x5c, 0x2f, 0x99, 0x5f, 0x61, 0xeb, 0x25, 0x08, 0xb9, 0x6d, + 0x51, 0x52, 0x2a, 0x35, 0x32, 0xc1, 0x4d, 0xcb, 0x09, 0x5a, 0xa9, 0x2f, + 0x2e, 0x16, 0x40, 0x4f, 0x1b, 0x23, 0x28, 0x00, 0x6a, 0xe9, 0xec, 0x5f, + 0xb9, 0x62, 0x79, 0x75, 0xb2, 0xc7, 0x64, 0x43, 0x23, 0x82, 0xa2, 0x20, + 0x76, 0xf7, 0x01, 0xbd, 0x9a, 0x5e, 0x28, 0x19, 0x09, 0xe3, 0xf8, 0x39, + 0x3d, 0xc3, 0x67, 0x1c, 0xf2, 0x65, 0x74, 0xb4, 0x12, 0xa1, 0x9b, 0x04, + 0xd8, 0x37, 0x2c, 0x5d, 0x15, 0x50, 0x96, 0x1b, 0x38, 0xc6, 0xda, 0x7b, + 0x4b, 0x05, 0x38, 0xc9, 0x78, 0xa4, 0xd3, 0xd8, 0xb6, 0x10, 0x07, 0x19, + 0x3b, 0x1c, 0xc8, 0xd7, 0x73, 0x77, 0x70, 0x42, 0xa4, 0x6b, 0xf4, 0x96, + 0xa1, 0x89, 0x55, 0x84, 0x09, 0x1b, 0x77, 0xa4, 0x98, 0xd1, 0x64, 0xba, + 0x4b, 0xd1, 0xc9, 0xb6, 0xd4, 0x9a, 0x26, 0x2a, 0xac, 0xa8, 0xcc, 0x03, + 0x13, 0x63, 0x89, 0xd4, 0x80, 0xca, 0x45, 0x83, 0x48, 0xf9, 0xb2, 0xb6, + 0x78, 0x40, 0x18, 0x0f, 0x01, 0x48, 0x92, 0x47, 0x7d, 0x15, 0x89, 0xc8, + 0x9d, 0x42, 0xb0, 0x09, 0x7a, 0x72, 0xbf, 0xd9, 0xc2, 0x15, 0x80, 0x8b, + 0x73, 0x17, 0x92, 0x2a, 0xc3, 0x60, 0xa8, 0xd5, 0xb1, 0xe3, 0x68, 0x95, + 0x35, 0xc4, 0x52, 0x46, 0x94, 0x85, 0x01, 0xda, 0x84, 0x18, 0xd0, 0x46, + 0x47, 0x08, 0xcf, 0x8f, 0xe7, 0xa1, 0x85, 0x66, 0x92, 0x0e, 0x08, 0x6e, + 0xf8, 0x79, 0xbf, 0xc1, 0x54, 0x27, 0x7e, 0x9b, 0xce, 0x9b, 0x79, 0x06, + 0xef, 0xf0, 0xb3, 0xb7, 0xc3, 0x3c, 0xcc, 0x09, 0x42, 0x4c, 0x41, 0xa4, + 0x87, 0xb6, 0x24, 0xa6, 0x92, 0x80, 0x5c, 0x50, 0x03, 0xb7, 0xe9, 0x80, + 0x58, 0xfb, 0x2c, 0x30, 0xd7, 0x62, 0x98, 0x1c, 0xc1, 0x64, 0xd3, 0x37, + 0xc8, 0xb8, 0x30, 0x55, 0x27, 0x24, 0xaa, 0xe7, 0xb8, 0x50, 0x62, 0x5e, + 0xf5, 0x55, 0x67, 0x07, 0x52, 0x0f, 0xeb, 0x63, 0x38, 0x68, 0x27, 0x0e, + 0x0b, 0x40, 0x24, 0x5f, 0xd0, 0x72, 0x39, 0xb7, 0x0c, 0x8f, 0xf0, 0x0e, + 0x92, 0x36, 0x40, 0x98, 0x32, 0x55, 0x1d, 0x25, 0x2a, 0xfb, 0xb8, 0x60, + 0x73, 0x9b, 0xb6, 0xf2, 0x42, 0x7b, 0x42, 0xf0, 0xa0, 0x8f, 0xc2, 0x64, + 0xea, 0xd7, 0x43, 0xf1, 0xe1, 0x6e, 0x59, 0x2b, 0xbb, 0x32, 0xb9, 0x93, + 0x08, 0xfc, 0x96, 0x99, 0x80, 0xb8, 0xc4, 0xc6, 0x85, 0xfc, 0xfc, 0x96, + 0xe5, 0xb1, 0xba, 0xb0, 0x5a, 0x34, 0x30, 0x75, 0xb3, 0x27, 0xd6, 0x58, + 0x75, 0x3b, 0x20, 0x65, 0x69, 0x3f, 0xac, 0x52, 0x58, 0xd6, 0xc1, 0x49, + 0x26, 0x01, 0x83, 0xb7, 0xaa, 0x2f, 0x10, 0x0b, 0x05, 0x64, 0xa6, 0x55, + 0x38, 0x36, 0x37, 0x3a, 0x08, 0x2d, 0x1e, 0x28, 0x43, 0xf1, 0x40, 0x98, + 0x4b, 0x37, 0xab, 0xc7, 0x5a, 0x36, 0xa6, 0x5b, 0x01, 0x62, 0xf9, 0x58, + 0x27, 0x5a, 0xba, 0x3a, 0x41, 0x19, 0x64, 0x17, 0x09, 0xde, 0xa1, 0x02, + 0x8f, 0xa6, 0x20, 0xc3, 0x22, 0xbe, 0xb2, 0x10, 0xa6, 0x86, 0x34, 0xcf, + 0x93, 0x96, 0x8c, 0x5b, 0x80, 0xc6, 0xaa, 0xb3, 0xa1, 0x37, 0xa1, 0x44, + 0x40, 0xfb, 0x7e, 0x65, 0xc5, 0x70, 0xcd, 0x36, 0x64, 0x04, 0x85, 0x3d, + 0x9e, 0xda, 0x9f, 0xd5, 0x13, 0xa2, 0x03, 0x32, 0x01, 0x02, 0x98, 0xac, + 0x6a, 0xf9, 0xc8, 0x50, 0x49, 0xb3, 0xae, 0x43, 0x68, 0x45, 0x0b, 0x02, + 0xc5, 0x98, 0x10, 0x5e, 0xfa, 0x6b, 0x7a, 0x65, 0x82, 0x0c, 0x65, 0x9f, + 0xe2, 0x20, 0xb7, 0xb8, 0x31, 0xa6, 0x2d, 0xe7, 0x00, 0x27, 0x19, 0xa7, + 0xfc, 0xd1, 0x83, 0x09, 0xaa, 0x15, 0x4b, 0x2c, 0x3b, 0x28, 0x93, 0x2b, + 0x85, 0x82, 0x20, 0x62, 0xb1, 0x61, 0x89, 0x86, 0x2f, 0x9e, 0x89, 0xcb, + 0xf4, 0x8c, 0x6f, 0xf6, 0x12, 0x16, 0x5f, 0x52, 0x94, 0x24, 0xe3, 0x4a, + 0x72, 0x72, 0x8d, 0xb9, 0x25, 0x64, 0xf3, 0xa4, 0x13, 0x5d, 0x3b, 0x35, + 0xa4, 0xeb, 0x5d, 0x11, 0x38, 0x90, 0xba, 0xd4, 0x9c, 0xfd, 0x46, 0x78, + 0x60, 0x09, 0x27, 0xc8, 0x15, 0x86, 0x55, 0x88, 0x18, 0xfd, 0x72, 0xcd, + 0x04, 0x8b, 0xb5, 0xa6, 0x68, 0x22, 0x41, 0x08, 0x1b, 0xe2, 0xb8, 0xb6, + 0xe9, 0x07, 0x7d, 0xf1, 0x72, 0x36, 0x3d, 0x32, 0xaa, 0x81, 0xcc, 0xcf, + 0x5f, 0x4b, 0xcf, 0x2d, 0xf0, 0x32, 0x4a, 0x2a, 0xab, 0x06, 0x2a, 0xbc, + 0x2b, 0x2a, 0xcf, 0x59, 0x1c, 0x59, 0xb5, 0x6b, 0xbd, 0x10, 0x23, 0x8d, + 0x49, 0x20, 0x28, 0x03, 0xd3, 0x1a, 0x8c, 0x33, 0xb3, 0x9d, 0xf9, 0xa2, + 0xbd, 0x35, 0xcd, 0x6f, 0x8a, 0xb6, 0xcf, 0xab, 0x65, 0x71, 0x7b, 0x32, + 0x71, 0x48, 0xaa, 0xe2, 0xf5, 0x98, 0xa6, 0x85, 0x1f, 0xee, 0x9a, 0x64, + 0x21, 0x15, 0xb7, 0xca, 0x39, 0x2d, 0xb1, 0xb2, 0x73, 0xba, 0x6a, 0x0d, + 0x6e, 0xf2, 0xcf, 0xa0, 0x10, 0x25, 0x9b, 0x95, 0x95, 0x71, 0x95, 0xbe, + 0x2f, 0x93, 0xa3, 0xfa, 0xa6, 0x8c, 0x70, 0x3c, 0x71, 0x92, 0xaa, 0x6e, + 0x74, 0x66, 0xbd, 0x76, 0x6c, 0x62, 0x03, 0x23, 0x66, 0x29, 0x43, 0x03, + 0x8e, 0x34, 0x90, 0x28, 0x20, 0x8d, 0x1a, 0xcc, 0x70, 0xbc, 0x39, 0x6d, + 0x75, 0xd4, 0x52, 0x6d, 0xc5, 0x3c, 0xc5, 0x0c, 0x4b, 0x54, 0x6c, 0xa2, + 0x49, 0x69, 0x16, 0x3e, 0x06, 0xb6, 0x24, 0x6a, 0x54, 0x2c, 0x1c, 0x77, + 0x64, 0x14, 0x05, 0x8b, 0x45, 0x84, 0x94, 0xf8, 0x04, 0x51, 0x08, 0x17, + 0xf7, 0xdb, 0x8f, 0x55, 0xf9, 0xb3, 0x2e, 0x85, 0x35, 0x2f, 0xf6, 0xa8, + 0x86, 0x43, 0x59, 0xdd, 0x39, 0x62, 0x14, 0x26, 0x71, 0x17, 0x33, 0xa9, + 0x29, 0x39, 0x12, 0x48, 0xd3, 0x1a, 0x71, 0x10, 0xc8, 0x08, 0x19, 0x79, + 0x56, 0x01, 0xca, 0x21, 0x1b, 0x87, 0xae, 0x43, 0x23, 0x59, 0x3a, 0x59, + 0x87, 0xc8, 0x9b, 0x24, 0xc5, 0x50, 0x39, 0xdc, 0xa2, 0x3b, 0x28, 0xa4, + 0x77, 0x41, 0x69, 0x74, 0x69, 0x9d, 0x27, 0xd6, 0x21, 0x9f, 0x94, 0x39, + 0x37, 0xb9, 0xc4, 0x4c, 0x47, 0x20, 0x41, 0xbb, 0x97, 0x29, 0x62, 0x4c, + 0x0a, 0x23, 0x58, 0xcf, 0x90, 0x85, 0x05, 0xf8, 0xc2, 0x70, 0xf6, 0xca, + 0x12, 0xdc, 0xcb, 0x15, 0xa6, 0x3e, 0x8b, 0xf8, 0x8f, 0x4c, 0x43, 0x1b, + 0x51, 0x37, 0xba, 0x0f, 0x6c, 0x90, 0xbf, 0x20, 0x98, 0x32, 0x63, 0x3b, + 0x0c, 0xba, 0x8b, 0xab, 0xc7, 0x61, 0x74, 0x27, 0x47, 0x97, 0x01, 0x28, + 0x7c, 0x35, 0xaf, 0xc0, 0x61, 0x63, 0xb0, 0x42, 0x9b, 0x15, 0x5b, 0x91, + 0xd4, 0x14, 0xca, 0x16, 0xd2, 0x3f, 0xfc, 0xbb, 0x17, 0xfd, 0x1c, 0x3d, + 0xcd, 0xa8, 0x26, 0x2f, 0xc3, 0x79, 0x8b, 0x1b, 0x1b, 0x08, 0x43, 0xcd, + 0xaa, 0xb6, 0xc2, 0x60, 0x94, 0x22, 0x41, 0x9c, 0x54, 0xad, 0x94, 0x78, + 0x3e, 0xec, 0x42, 0xd0, 0x6b, 0xb6, 0x0f, 0x84, 0x4b, 0x58, 0xf3, 0x04, + 0x27, 0x90, 0x81, 0x56, 0xa6, 0x60, 0xcc, 0x5a, 0xc6, 0x3a, 0x5b, 0x0b, + 0x2d, 0x8b, 0xc4, 0x96, 0xbc, 0xc1, 0xaf, 0xb0, 0xce, 0x45, 0x55, 0xc1, + 0x59, 0x56, 0xb1, 0x34, 0x56, 0x5f, 0x6c, 0x5b, 0x33, 0x86, 0xc5, 0x70, + 0x13, 0x07, 0x44, 0x00, 0xe2, 0x68, 0xce, 0xc7, 0x4a, 0x79, 0xc0, 0x81, + 0x12, 0xf7, 0x34, 0xe3, 0x16, 0xc9, 0x69, 0x47, 0x13, 0x89, 0xe9, 0x4e, + 0xbf, 0xdc, 0x14, 0x41, 0x6c, 0x10, 0x6c, 0xcc, 0xc8, 0x92, 0x7b, 0x97, + 0xda, 0x76, 0x08, 0x6b, 0x2c, 0x5f, 0xd7, 0x68, 0x91, 0xa6, 0x2c, 0x55, + 0x21, 0x13, 0x7d, 0xa3, 0xc3, 0x06, 0x14, 0x36, 0x19, 0x84, 0x05, 0x82, + 0x14, 0xb3, 0x50, 0x7e, 0xe9, 0x32, 0x68, 0x23, 0x01, 0xf4, 0x5c, 0xa2, + 0x0e, 0xd9, 0x7b, 0xb6, 0x07, 0x15, 0x0a, 0xf7, 0x0a, 0xd5, 0xdc, 0xab, + 0x4b, 0x5b, 0x0c, 0x35, 0x28, 0x96, 0x9a, 0xc0, 0x29, 0xc4, 0x0c, 0xb4, + 0x84, 0x78, 0x8a, 0x45, 0x68, 0xa6, 0x54, 0xc3, 0x2d, 0x42, 0x24, 0xa2, + 0x2e, 0x6a, 0x5d, 0x6f, 0x53, 0x9f, 0x0b, 0x94, 0xaf, 0xdd, 0xa1, 0x0b, + 0xac, 0x15, 0x63, 0x80, 0x76, 0x86, 0xc4, 0x8c, 0x07, 0xfd, 0xc6, 0x22, + 0xc9, 0xf1, 0x53, 0xfa, 0xeb, 0xb8, 0x55, 0x28, 0xc5, 0x3c, 0x0a, 0xba, + 0x38, 0x3b, 0xa5, 0x1d, 0xb5, 0x92, 0x56, 0x70, 0xbc, 0xcd, 0xb3, 0xc5, + 0xb5, 0xd2, 0xc7, 0x75, 0x0a, 0x2e, 0x9a, 0x83, 0xb5, 0x1d, 0x18, 0x86, + 0xc7, 0x05, 0x34, 0xc8, 0x46, 0x5e, 0x90, 0x86, 0xab, 0x78, 0x51, 0x54, + 0x1a, 0xa4, 0xa6, 0xb0, 0xe9, 0x63, 0x04, 0xca, 0xb8, 0xb4, 0x52, 0xc3, + 0x55, 0xf5, 0x20, 0x34, 0xe2, 0x48, 0x1f, 0x42, 0x6f, 0x85, 0xb0, 0x38, + 0x99, 0xda, 0x6b, 0x05, 0x46, 0xba, 0x42, 0x7a, 0xc7, 0x51, 0xc8, 0x44, + 0x61, 0x95, 0x2a, 0x9d, 0xc0, 0xa9, 0x3a, 0x70, 0x6b, 0x17, 0x47, 0x33, + 0xd7, 0x08, 0x1c, 0xe7, 0x24, 0xae, 0x7c, 0xf0, 0x4f, 0x08, 0xca, 0x5b, + 0x92, 0xa6, 0xcf, 0x04, 0x95, 0xa1, 0x0d, 0xf2, 0xb6, 0x82, 0xfb, 0x16, + 0x80, 0x6b, 0x9c, 0xdb, 0x61, 0x57, 0xd6, 0xfc, 0xa8, 0xc8, 0xa5, 0xa8, + 0xe8, 0x97, 0x0a, 0xa9, 0x64, 0x34, 0xb2, 0x7b, 0xbb, 0x77, 0xd4, 0x1b, + 0x1c, 0x48, 0x21, 0xea, 0x6a, 0x8f, 0x87, 0x0c, 0xbb, 0x74, 0x22, 0x49, + 0x9d, 0x44, 0x51, 0x3c, 0xa8, 0x1a, 0x19, 0xb9, 0x61, 0x94, 0x85, 0xaf, + 0x92, 0x64, 0x2a, 0xc0, 0x17, 0x85, 0xc2, 0x77, 0xad, 0x4d, 0xb7, 0x3f, + 0xe9, 0x69, 0x21, 0xbf, 0x98, 0xae, 0x77, 0xa4, 0x3c, 0xbb, 0x8b, 0x57, + 0x64, 0x39, 0xcf, 0x73, 0x31, 0x77, 0x95, 0xc7, 0x13, 0x0e, 0x76, 0x85, + 0x1b, 0x06, 0x70, 0xc1, 0x2b, 0x2b, 0xa2, 0x55, 0x5c, 0xf8, 0xf0, 0xc5, + 0x41, 0x01, 0x0c, 0x43, 0x85, 0x07, 0x91, 0x36, 0x09, 0x57, 0x93, 0x68, + 0xbd, 0x92, 0x2e, 0x50, 0x68, 0x69, 0x62, 0x73, 0x16, 0xd3, 0x65, 0x5f, + 0x20, 0xa6, 0x2b, 0x4c, 0x8a, 0x7b, 0xa3, 0x3a, 0x21, 0xdf, 0x71, 0xa9, + 0x64, 0xa9, 0x22, 0x5b, 0xb8, 0x1f, 0xa8, 0x4a, 0xbf, 0xf9, 0xb8, 0x1f, + 0xb2, 0x6a, 0x64, 0xbd, 0x65, 0xc4, 0xee, 0xa5, 0xc9, 0x55, 0xb3, 0x3d, + 0x20, 0x77, 0xa3, 0xec, 0x9b, 0xc9, 0x9b, 0x6a, 0x6f, 0x93, 0x39, 0xbb, + 0x09, 0x26, 0x85, 0x61, 0x11, 0x91, 0x07, 0x01, 0xcc, 0xc6, 0xeb, 0x75, + 0x02, 0x19, 0x33, 0x97, 0xaa, 0x5c, 0x3e, 0x77, 0x3f, 0xc4, 0x53, 0x99, + 0x1b, 0x44, 0x40, 0x01, 0xf4, 0x74, 0xcb, 0x18, 0xac, 0x79, 0x57, 0x69, + 0x6a, 0x64, 0x39, 0x11, 0x55, 0x5d, 0xfa, 0xcb, 0xb0, 0x3c, 0xf9, 0x05, + 0x0f, 0xe8, 0x6f, 0x7e, 0x30, 0x18, 0x10, 0x65, 0xaa, 0x48, 0x60, 0x21, + 0xd4, 0xc3, 0x6b, 0x4c, 0x12, 0xcf, 0x34, 0x24, 0x18, 0x52, 0xfc, 0x6c, + 0xd3, 0x22, 0x53, 0x11, 0x07, 0xb0, 0x38, 0xe4, 0x67, 0x60, 0xc5, 0x9e, + 0x11, 0x21, 0x49, 0xbe, 0x90, 0x5c, 0x19, 0x15, 0xb2, 0x2b, 0x39, 0x6f, + 0x81, 0x4c, 0x83, 0xa3, 0xa1, 0xa1, 0x7b, 0xa9, 0xb3, 0x37, 0xb0, 0xc4, + 0xd3, 0x21, 0x3c, 0x79, 0x40, 0x00, 0x37, 0xfa, 0x80, 0xbb, 0x31, 0x43, + 0x91, 0x4b, 0x56, 0xa8, 0xe4, 0x5d, 0xe6, 0x34, 0x83, 0x25, 0x00, 0x4d, + 0x5b, 0xda, 0xa4, 0x61, 0xdb, 0xa0, 0x4f, 0xac, 0x2e, 0x57, 0x89, 0x0f, + 0x1f, 0x25, 0x6d, 0x9b, 0xe9, 0x84, 0xe1, 0x3b, 0x32, 0x00, 0x03, 0x55, + 0x52, 0xac, 0xc6, 0xfb, 0x31, 0x9e, 0x75, 0x69, 0x48, 0xd7, 0x36, 0x35, + 0x10, 0xd9, 0x81, 0x35, 0x61, 0xce, 0xf1, 0x75, 0x99, 0xbb, 0xe5, 0x84, + 0xcb, 0xa9, 0x9e, 0x3d, 0x65, 0x64, 0xd5, 0x3c, 0x30, 0x48, 0x2a, 0x14, + 0x83, 0x46, 0xbb, 0xcd, 0x1b, 0xa4, 0xf5, 0x60, 0x17, 0xaa, 0xdc, 0x1a, + 0x6d, 0xab, 0xc1, 0x27, 0xf2, 0x3c, 0xb5, 0x95, 0x40, 0x5b, 0x93, 0x0d, + 0x41, 0x18, 0x5e, 0x56, 0xf5, 0x14, 0x18, 0xa8, 0x95, 0x29, 0x4c, 0x21, + 0x47, 0x00, 0x97, 0xdb, 0x0b, 0x1e, 0x82, 0x66, 0x19, 0xd6, 0x5c, 0x0d, + 0xfc, 0x21, 0x23, 0x42, 0x8c, 0x88, 0xee, 0xa0, 0x40, 0xf4, 0x34, 0x6a, + 0x83, 0xf4, 0x61, 0x73, 0xd4, 0x52, 0x79, 0xf2, 0x39, 0xd5, 0x56, 0x00, + 0xf1, 0xeb, 0x10, 0x5a, 0x86, 0xa1, 0xff, 0xb6, 0x17, 0x38, 0xd6, 0x28, + 0x3a, 0x03, 0xb8, 0x89, 0xe7, 0x23, 0x8a, 0x31, 0x53, 0x0f, 0xf8, 0x69, + 0xde, 0x59, 0x82, 0x35, 0xac, 0xcb, 0x3e, 0x50, 0xb8, 0x0f, 0xe5, 0x9b, + 0xdb, 0x26, 0x41, 0xf2, 0x85, 0x5c, 0x38, 0xc6, 0x43, 0x57, 0x1a, 0x62, + 0x9c, 0x0b, 0x2b, 0x87, 0xcb, 0xab, 0xe6, 0xc6, 0xb0, 0xbd, 0xd7, 0xb2, + 0xbf, 0x41, 0x5a, 0x0b, 0x90, 0x26, 0x65, 0x64, 0xb1, 0x83, 0xe3, 0x62, + 0xcd, 0x84, 0x74, 0xed, 0xf9, 0x3c, 0x2d, 0x78, 0x0f, 0x69, 0x97, 0x37, + 0x65, 0x55, 0x4b, 0x6d, 0x50, 0xc7, 0xaa, 0xf2, 0x3f, 0x4b, 0x79, 0xbf, + 0xd8, 0xf8, 0x97, 0x3b, 0x82, 0x7c, 0x9a, 0x92, 0x62, 0x57, 0x79, 0xbe, + 0x87, 0x3a, 0x92, 0xa9, 0xd9, 0x36, 0x1e, 0xe2, 0x0c, 0x31, 0x55, 0x9d, + 0xec, 0x15, 0x4e, 0x8b, 0xb5, 0x59, 0x2b, 0x85, 0xc8, 0xa1, 0xf6, 0x4c, + 0xc1, 0x3b, 0x70, 0x58, 0x48, 0x69, 0x47, 0xc1, 0x92, 0x9e, 0x3c, 0x6c, + 0x7a, 0xa3, 0x75, 0xe6, 0x72, 0x0c, 0x41, 0xe0, 0x3f, 0xa4, 0x30, 0x45, + 0xb5, 0x49, 0xa0, 0x5b, 0x97, 0x02, 0x71, 0x78, 0xbf, 0x7c, 0xa6, 0x2e, + 0xab, 0x0b, 0x12, 0x3c, 0xb2, 0x32, 0xa3, 0xe4, 0xcb, 0xa2, 0xf4, 0xbb, + 0x66, 0x98, 0x09, 0x77, 0xa7, 0x8a, 0x72, 0x02, 0xa2, 0x55, 0x27, 0x32, + 0x5c, 0x4b, 0x56, 0x82, 0xf7, 0x9b, 0x36, 0x14, 0x68, 0x0d, 0x9b, 0x93, + 0x70, 0xc8, 0x88, 0x30, 0x1b, 0x13, 0x3f, 0xc7, 0xbc, 0x74, 0x44, 0x1a, + 0x8f, 0xa4, 0x49, 0x79, 0xc3, 0x11, 0xc2, 0x61, 0x82, 0xe0, 0x16, 0x74, + 0xca, 0xa2, 0x37, 0x2c, 0x68, 0x1d, 0x53, 0xa0, 0x19, 0xf7, 0xe1, 0x21, + 0x31, 0x15, 0x25, 0x7e, 0x4c, 0x9f, 0xbc, 0x90, 0x47, 0x8e, 0xc7, 0x60, + 0x78, 0x6b, 0x67, 0x70, 0x69, 0x3f, 0x5e, 0xe1, 0x49, 0xae, 0x60, 0xcc, + 0x78, 0x35, 0xc0, 0x84, 0x41, 0x77, 0xd8, 0xc0, 0x4e, 0x54, 0x09, 0x6a, + 0x40, 0x49, 0x1f, 0x8f, 0x63, 0x52, 0xa2, 0x31, 0xc8, 0xe3, 0x34, 0x8f, + 0x4a, 0x02, 0x55, 0x85, 0x03, 0xc1, 0x8e, 0x23, 0x36, 0xc9, 0x82, 0x22, + 0x69, 0x37, 0xaf, 0x63, 0xa1, 0x56, 0x93, 0x02, 0x5d, 0x85, 0x42, 0x2d, + 0x69, 0x57, 0x37, 0xd6, 0x49, 0xa0, 0x4b, 0xaa, 0x61, 0x7b, 0x65, 0x24, + 0xff, 0x88, 0x53, 0xfd, 0x66, 0x49, 0x66, 0x30, 0x2e, 0x29, 0xfa, 0xc6, + 0x16, 0x28, 0x48, 0x50, 0x39, 0x08, 0xfc, 0x0b, 0xce, 0xab, 0x97, 0x10, + 0xa8, 0x06, 0xb8, 0x15, 0x36, 0xcc, 0x78, 0xa3, 0x32, 0xee, 0xa7, 0x0f, + 0x04, 0xf2, 0x7c, 0x6d, 0xf9, 0x64, 0x5e, 0xb5, 0x16, 0xb7, 0xd9, 0x7b, + 0x8f, 0x84, 0xc8, 0xe8, 0xc2, 0xc5, 0xed, 0x87, 0xc0, 0x67, 0x87, 0x95, + 0x88, 0x4a, 0x89, 0x38, 0x66, 0xb8, 0x53, 0xa9, 0xac, 0x0b, 0x30, 0x1c, + 0x03, 0x20, 0xae, 0x07, 0xc5, 0x4c, 0x9d, 0x06, 0x70, 0x9e, 0x66, 0xa9, + 0x0d, 0x69, 0x72, 0x4f, 0x41, 0x92, 0xc6, 0x85, 0x9d, 0xea, 0x80, 0x54, + 0xba, 0x29, 0x4f, 0xad, 0xca, 0x6d, 0xb0, 0x75, 0x23, 0x3c, 0xf8, 0xaa, + 0x15, 0x91, 0x44, 0xa4, 0x8c, 0x0d, 0x8c, 0xf4, 0xcd, 0x51, 0xa7, 0x8a, + 0x9d, 0x23, 0xa8, 0x05, 0xe6, 0x32, 0xbf, 0xaa, 0x58, 0x7d, 0x66, 0xa7, + 0xde, 0x05, 0x28, 0x29, 0xfb, 0x9f, 0xc2, 0x3c, 0x6f, 0x66, 0xd6, 0x57, + 0x20, 0x20, 0xc6, 0x01, 0x66, 0xa2, 0x20, 0xc5, 0x43, 0x2c, 0x24, 0x88, + 0x6f, 0x85, 0x53, 0xbb, 0x72, 0x14, 0x67, 0x6a, 0xb1, 0x35, 0x53, 0x5d, + 0x0c, 0xf7, 0x11, 0x84, 0x5c, 0x0f, 0x65, 0x47, 0x74, 0xf5, 0x91, 0x14, + 0x4d, 0x49, 0x8c, 0xb9, 0x30, 0x13, 0xe5, 0x67, 0x61, 0x46, 0x36, 0x10, + 0x71, 0xe0, 0x47, 0x45, 0x2c, 0xb3, 0x1a, 0xc8, 0xcb, 0x1f, 0x19, 0xb3, + 0x5a, 0x00, 0x9c, 0xd1, 0x2c, 0x0b, 0x0a, 0x7a, 0x84, 0xb6, 0xd9, 0x83, + 0xc3, 0x88, 0x89, 0x0e, 0x64, 0x40, 0x8f, 0xe6, 0x8f, 0x95, 0x05, 0x84, + 0xa9, 0x17, 0x69, 0x5b, 0x33, 0x04, 0xb5, 0x80, 0xb3, 0xeb, 0xe4, 0x5d, + 0xf2, 0x9b, 0x26, 0x85, 0xb0, 0x26, 0x95, 0x35, 0x6c, 0xdc, 0xa0, 0x18, + 0x69, 0xf4, 0xbe, 0x00, 0xa9, 0x93, 0x0d, 0x38, 0x4c, 0x5a, 0x7c, 0x8e, + 0xa1, 0x7b, 0x70, 0x33, 0x38, 0x2d, 0xc0, 0xdc, 0xc8, 0x06, 0xdb, 0xae, + 0xe2, 0x62, 0x22, 0xb9, 0x4c, 0x0a, 0x77, 0x5c, 0x02, 0x20, 0xba, 0x38, + 0x35, 0x65, 0x9f, 0x00, 0x2c, 0x09, 0xca, 0x37, 0xa8, 0xb5, 0x87, 0x0b, + 0x7d, 0x25, 0x21, 0x27, 0x1b, 0x64, 0x34, 0x96, 0x39, 0x41, 0x57, 0xc6, + 0x21, 0xd4, 0x42, 0x76, 0xea, 0x0c, 0xbd, 0xeb, 0x0a, 0x01, 0xc6, 0x09, + 0x4b, 0x0c, 0x61, 0x83, 0xc9, 0x2a, 0x96, 0x38, 0xbf, 0x16, 0x94, 0xce, + 0xec, 0xf6, 0x6a, 0x23, 0xcc, 0x7c, 0x6d, 0x06, 0x64, 0xd4, 0xd0, 0x9b, + 0x58, 0xf3, 0x9e, 0x6c, 0xd1, 0xce, 0x4d, 0x12, 0x5b, 0x08, 0xc6, 0x6f, + 0xdf, 0x05, 0x14, 0xa3, 0x53, 0x4f, 0x02, 0x6c, 0xc4, 0xc2, 0x51, 0x7f, + 0x9c, 0x13, 0x72, 0x88, 0x23, 0x2b, 0x08, 0xbb, 0xaa, 0xdc, 0x63, 0x5e, + 0xa6, 0x02, 0x4a, 0x8c, 0x46, 0x67, 0xe8, 0xdb, 0xc0, 0xb5, 0x65, 0x56, + 0xdc, 0x56, 0x5d, 0x5c, 0x08, 0xc6, 0x96, 0x3a, 0x33, 0x95, 0x9b, 0x67, + 0xf5, 0xa3, 0x2a, 0x85, 0x1b, 0x62, 0x1a, 0x8b, 0x31, 0xb8, 0x70, 0x4c, + 0x97, 0xd0, 0x49, 0x9f, 0xfc, 0xb6, 0xda, 0x2a, 0x54, 0xda, 0xb3, 0x5e, + 0x2c, 0xa3, 0x1c, 0x72, 0x28, 0x56, 0x06, 0x1b, 0x3d, 0xee, 0xbc, 0x7d, + 0x6e, 0x5b, 0xbb, 0x64, 0xa4, 0x0f, 0xa5, 0xca, 0x1a, 0xeb, 0xb9, 0x28, + 0xbc, 0x34, 0x37, 0xdf, 0xa4, 0x49, 0x48, 0x62, 0x25, 0x94, 0x19, 0x48, + 0xa7, 0x22, 0x8d, 0x56, 0xd7, 0xa6, 0x0a, 0xe5, 0x35, 0xa3, 0x0a, 0x7a, + 0x04, 0x92, 0x57, 0x33, 0xf2, 0x9a, 0x3e, 0x24, 0x2f, 0x99, 0x87, 0x6e, + 0x79, 0x81, 0x50, 0x2f, 0xc0, 0x02, 0x58, 0xe6, 0x7a, 0x13, 0x67, 0x77, + 0x85, 0x39, 0xc1, 0xe8, 0x52, 0x9f, 0xfb, 0x70, 0x7e, 0x13, 0xc1, 0x44, + 0x60, 0x99, 0xc6, 0xe6, 0x81, 0x38, 0x0f, 0x9a, 0x2d, 0x2f, 0x90, 0xbc, + 0xa1, 0x21, 0x00, 0x9b, 0x82, 0x2c, 0x18, 0x54, 0xb1, 0x85, 0xa5, 0x1b, + 0x0b, 0xf6, 0x1b, 0xa0, 0xb5, 0x6c, 0x6f, 0xa0, 0x02, 0xa5, 0xb6, 0x75, + 0xdc, 0x0a, 0x07, 0x52, 0x45, 0x1f, 0x5c, 0x92, 0xcc, 0xde, 0x66, 0x65, + 0x69, 0xfb, 0xcc, 0x68, 0x33, 0x79, 0xfe, 0x6a, 0x85, 0x04, 0x40, 0x34, + 0x6a, 0x31, 0x12, 0x88, 0x85, 0x48, 0xd4, 0x7b, 0x04, 0x68, 0xd7, 0x48, + 0x1a, 0x84, 0x09, 0x46, 0xe5, 0x3c, 0x02, 0x93, 0xc7, 0x69, 0x6b, 0xbe, + 0x88, 0xa9, 0x14, 0x50, 0x6a, 0x49, 0xca, 0xeb, 0x3e, 0x23, 0x3b, 0xbf, + 0x00, 0xcc, 0x94, 0xac, 0x74, 0xb7, 0x0b, 0xa2, 0xa5, 0x7d, 0x4a, 0x03, + 0x2b, 0xe3, 0xc1, 0x72, 0x43, 0x82, 0xff, 0xaa, 0x00, 0x2d, 0xd7, 0xc9, + 0xf0, 0x25, 0x18, 0x9c, 0xc3, 0x85, 0xc1, 0xa2, 0x4c, 0x10, 0xac, 0x71, + 0x63, 0x76, 0xc9, 0x8b, 0x53, 0x56, 0xae, 0x9a, 0xaf, 0x75, 0xfc, 0x93, + 0x1e, 0x34, 0x2f, 0x59, 0x86, 0xa1, 0x46, 0xe3, 0x85, 0x5f, 0x68, 0x73, + 0xcc, 0x8b, 0xa3, 0xcb, 0x86, 0xba, 0xd7, 0x32, 0x24, 0x1c, 0x31, 0x3a, + 0xd1, 0x78, 0x83, 0xe8, 0x6c, 0x5e, 0x2f, 0x54, 0x86, 0xc0, 0x92, 0xbc, + 0xb4, 0xf7, 0x18, 0xb8, 0x32, 0x13, 0xc9, 0x52, 0x72, 0xd1, 0x34, 0xa2, + 0xa7, 0x45, 0xa4, 0xd6, 0x30, 0x9c, 0x26, 0x64, 0x31, 0x98, 0x0c, 0x8a, + 0x0f, 0x86, 0xcb, 0x0c, 0xf0, 0x32, 0x47, 0xfc, 0xc2, 0x5e, 0x20, 0x72, + 0xd5, 0x57, 0x40, 0x09, 0xd4, 0xb6, 0x1d, 0xe9, 0x60, 0x8b, 0x29, 0xb4, + 0x44, 0x88, 0x94, 0x2c, 0xb2, 0x7f, 0xf3, 0x74, 0x9a, 0x94, 0x80, 0x40, + 0x8e, 0x62, 0xaa, 0x47, 0xa0, 0x42, 0x5d, 0x74, 0xcd, 0xd2, 0x76, 0xb2, + 0x64, 0x95, 0xb0, 0x95, 0x6b, 0xc3, 0x98, 0xaa, 0xbc, 0xd1, 0xfa, 0x51, + 0xd5, 0xc3, 0x42, 0xc5, 0xc1, 0x36, 0x77, 0xd4, 0x6b, 0xbf, 0xa9, 0x94, + 0xfe, 0x63, 0x3f, 0x2b, 0xec, 0x53, 0xc0, 0xb6, 0xbc, 0x50, 0x09, 0x0e, + 0xca, 0x59, 0x0c, 0xe5, 0xf6, 0xb3, 0x0a, 0x94, 0x36, 0xa7, 0x41, 0xad, + 0x68, 0xc7, 0xa9, 0x96, 0x6b, 0xc9, 0xe7, 0xe3, 0xd0, 0xa6, 0x4a, 0xdb, + 0xad, 0xdc, 0x6a, 0xb2, 0xf7, 0x1f, 0x57, 0xae, 0x0a, 0xb3, 0x44, 0xf6, + 0x14, 0x61, 0x9a, 0xa6, 0xda, 0xaa, 0xc7, 0x67, 0x72, 0xb1, 0xd3, 0x2c, + 0xde, 0x08, 0x2b, 0x6e, 0x24, 0x03, 0x51, 0x35, 0x84, 0x70, 0x80, 0x98, + 0x89, 0x51, 0x3b, 0x4c, 0x05, 0xc4, 0x61, 0x1b, 0x6c, 0x02, 0xf4, 0xe0, + 0xb4, 0xaf, 0x9c, 0x28, 0x90, 0x69, 0x92, 0x50, 0xea, 0xef, 0x4f, 0x0d, + 0xd6, 0x8c, 0x72, 0x72, 0x0b, 0xeb, 0x1d, 0x19, 0x80, 0x42, 0x03, 0xeb, + 0xae, 0x8b, 0x89, 0x03, 0xd9, 0x8f, 0x25, 0x90, 0x3a, 0x76, 0x48, 0x77}, + // ciphertext + {0xbf, 0x5e, 0xf3, 0x54, 0xb5, 0xee, 0x7d, 0x74, 0x18, 0x82, 0x32, 0x80, + 0x2d, 0x1b, 0x42, 0x1f, 0x0c, 0x17, 0x01, 0x2e, 0xcf, 0x23, 0x64, 0xe4, + 0xcb, 0x99, 0x60, 0x67, 0xab, 0x62, 0x70, 0xbf, 0x03, 0x4e, 0x5f, 0xb4, + 0x75, 0xbd, 0x2e, 0xb1, 0x7c, 0x17, 0x08, 0xe4, 0xad, 0x60, 0x6f, 0xf2, + 0x3d, 0x38, 0xd2, 0x7c, 0x1f, 0x4e, 0x52, 0x4c, 0xc9, 0x76, 0x70, 0x87, + 0xf7, 0xf0, 0x42, 0xf0, 0x9b, 0x1c, 0x08, 0x0b, 0x05, 0x5f, 0x27, 0xcf, + 0x87, 0x97, 0x79, 0xd1, 0x29, 0x82, 0x3e, 0x4a, 0x49, 0x1d, 0xe0, 0xf9, + 0xaf, 0x49, 0x6f, 0x04, 0x15, 0x8d, 0xe9, 0x06, 0x37, 0x54, 0x72, 0x62, + 0xd3, 0x08, 0x67, 0x78, 0xab, 0x26, 0x86, 0x65, 0xcd, 0xeb, 0xfc, 0xeb, + 0x85, 0xf3, 0xc5, 0xe0, 0x2e, 0xd8, 0x37, 0xab, 0x43, 0xdd, 0xd9, 0x7b, + 0x45, 0x69, 0x21, 0xae, 0x2e, 0x03, 0xc8, 0x8c, 0xcd, 0xae, 0x77, 0x57, + 0xa4, 0x77, 0x3b, 0x1a, 0x20, 0x7c, 0xc0, 0xb1, 0x1b, 0x17, 0x0f, 0x19, + 0xfd, 0x70, 0xf2, 0x53, 0x50, 0x84, 0x9c, 0xb6, 0xc3, 0x9a, 0xd1, 0x2d, + 0xc6, 0x93, 0x52, 0xb4, 0xc4, 0xa6, 0xa9, 0x61, 0x9c, 0xfd, 0x41, 0xeb, + 0xce, 0xc4, 0xe2, 0x6b, 0x3b, 0x06, 0x85, 0xed, 0xec, 0x45, 0xd8, 0x78, + 0x79, 0x94, 0x0c, 0x4c, 0x6e, 0x5c, 0x43, 0xfa, 0xd2, 0x0c, 0x65, 0xff, + 0xf6, 0x4f, 0x67, 0x68, 0x47, 0xc4, 0xa6, 0x3e, 0x7a, 0xe6, 0x14, 0x44, + 0x04, 0x33, 0x22, 0x20, 0xcc, 0xf5, 0x1b, 0x84, 0xc2, 0x6e, 0x72, 0x6d, + 0xe9, 0x76, 0xa2, 0xcc, 0x3a, 0xe1, 0x43, 0xbc, 0x99, 0xb6, 0x57, 0xb5, + 0xf1, 0x62, 0x90, 0xb3, 0x7e, 0x43, 0xf8, 0x68, 0x0b, 0x6b, 0xae, 0xd4, + 0xf0, 0x33, 0xfd, 0xf1, 0x89, 0x37, 0x68, 0x82, 0xdf, 0xf7, 0x48, 0x64, + 0xe5, 0x55, 0x42, 0xca, 0xee, 0xcb, 0x0b, 0x55, 0xb3, 0xfe, 0x2b, 0xe9, + 0x1e, 0xe7, 0x3a, 0x20, 0xf7, 0x4d, 0x5a, 0xb9, 0x84, 0xf8, 0x68, 0xcf, + 0xbb, 0xa6, 0x3e, 0xa7, 0xf6, 0x08, 0x6b, 0x19, 0xd6, 0x24, 0x27, 0x85, + 0x53, 0x37, 0x8c, 0x58, 0xe3, 0x39, 0x4f, 0xbd, 0x1f, 0xdb, 0x7e, 0xb8, + 0x6d, 0x91, 0x9f, 0xd9, 0x9d, 0x1b, 0x79, 0xb5, 0x9b, 0xbb, 0x4e, 0x5a, + 0xd0, 0xed, 0xf7, 0x47, 0x4d, 0xb3, 0x92, 0xf2, 0xda, 0xed, 0xc3, 0x91, + 0x0d, 0x02, 0xe6, 0x36, 0x77, 0x5e, 0x31, 0x3e, 0x7d, 0x14, 0x01, 0x40, + 0x27, 0xcf, 0xa5, 0x61, 0xb6, 0x6d, 0x0b, 0x24, 0x9b, 0x65, 0x74, 0xa3, + 0x5c, 0xa4, 0x5f, 0x2c, 0xf9, 0xaa, 0x63, 0xc2, 0xc7, 0x1b, 0x97, 0x0b, + 0xaa, 0x3d, 0xbc, 0x0e, 0x0a, 0xf1, 0xc4, 0x29, 0xfb, 0xd8, 0xd6, 0xe9, + 0x1d, 0x67, 0xcc, 0xa4, 0xef, 0x97, 0x55, 0x52, 0x2c, 0xd0, 0xfd, 0x49, + 0x21, 0x6f, 0x8d, 0x2b, 0xef, 0xc9, 0xe3, 0x7e, 0x70, 0x66, 0x31, 0x50, + 0x27, 0xbe, 0x0d, 0xc3, 0x54, 0x60, 0xb4, 0xdb, 0xdc, 0x64, 0xc0, 0x7e, + 0xaa, 0x19, 0xc5, 0xa1, 0x35, 0xfe, 0x9a, 0x0c, 0xee, 0x28, 0x7c, 0xce, + 0x67, 0xa6, 0x6b, 0xc8, 0xe5, 0x41, 0x93, 0x64, 0x77, 0xa7, 0x11, 0x57, + 0x18, 0x0e, 0xa1, 0x85, 0x16, 0x5e, 0x41, 0x23, 0x0d, 0xdd, 0x35, 0x40, + 0x84, 0x48, 0xd9, 0xee, 0x28, 0x12, 0x87, 0xd6, 0xc0, 0x3a, 0x9f, 0xff, + 0x12, 0x8e, 0x7b, 0x3e, 0xf7, 0x15, 0x12, 0xcd, 0xff, 0x12, 0x61, 0x09, + 0x39, 0x2f, 0xc4, 0x49, 0x77, 0xbc, 0xee, 0xdb, 0xb1, 0x2c, 0x21, 0x3e, + 0x4a, 0x40, 0xf3, 0x7a, 0xa7, 0x55, 0x9a, 0x85, 0x94, 0x5e, 0x4a, 0x14, + 0xf6, 0x71, 0x5c, 0xae, 0x67, 0x6f, 0x07, 0xb5, 0x23, 0x7e, 0xe4, 0x69, + 0x68, 0xad, 0x41, 0xa6, 0xb0, 0xab, 0x4b, 0x2a, 0x0e, 0x55, 0x86, 0x88, + 0x32, 0x6b, 0x55, 0x8e, 0x6e, 0xa8, 0xfc, 0x92, 0x50, 0x80, 0xdb, 0x42, + 0x62, 0x9c, 0xfa, 0x1f, 0x2b, 0xc1, 0x3b, 0xe0, 0x50, 0x47, 0x6d, 0x9f, + 0x0b, 0x26, 0x14, 0xe9, 0xeb, 0x04, 0x85, 0xcb, 0xe1, 0x6c, 0x67, 0x8a, + 0xba, 0xec, 0x1e, 0xcb, 0xbc, 0x82, 0xb5, 0x06, 0xa1, 0x83, 0xee, 0x8b, + 0x66, 0xae, 0x93, 0x8a, 0x57, 0xa3, 0x6e, 0xc1, 0x02, 0x3d, 0x39, 0x81, + 0xa3, 0x8a, 0xb7, 0xe8, 0x6f, 0xb2, 0x67, 0xf7, 0x22, 0x47, 0x97, 0x51, + 0xb0, 0xd0, 0x10, 0x92, 0xc3, 0xd4, 0xf2, 0x67, 0x41, 0x98, 0x65, 0x22, + 0x5b, 0x1e, 0x0f, 0xcd, 0x50, 0xdb, 0x4e, 0x92, 0x17, 0x2d, 0x5b, 0xa2, + 0xdf, 0xa8, 0xd2, 0x7f, 0x7e, 0x7f, 0x39, 0x71, 0xc1, 0x16, 0x58, 0x1f, + 0xfd, 0xe1, 0xeb, 0x7c, 0x97, 0xaf, 0x66, 0x44, 0x8e, 0xd5, 0x51, 0x01, + 0xa7, 0x74, 0x39, 0x31, 0x59, 0xbd, 0x05, 0x8b, 0xe1, 0x26, 0x40, 0xac, + 0x40, 0x3a, 0xc8, 0xf6, 0x22, 0x89, 0x93, 0x8f, 0x33, 0x22, 0x06, 0xad, + 0x1c, 0x82, 0xd8, 0xe0, 0xc9, 0x69, 0xd7, 0xeb, 0xd0, 0xdd, 0xde, 0x9b, + 0x6a, 0x45, 0xe3, 0xb5, 0xb1, 0xcf, 0x2a, 0x6e, 0xba, 0x80, 0xf9, 0x1e, + 0xf8, 0x7e, 0x34, 0x7b, 0x8e, 0xf4, 0x75, 0x8e, 0xe8, 0x65, 0x45, 0x66, + 0xba, 0x7d, 0xb3, 0x2c, 0xaa, 0x8d, 0x79, 0xc9, 0x14, 0xd2, 0x91, 0xeb, + 0xfa, 0xf7, 0xe9, 0xc6, 0xab, 0xa3, 0x93, 0x97, 0x2f, 0x09, 0xa5, 0xc8, + 0x82, 0x1d, 0x43, 0x5e, 0xec, 0xce, 0xe9, 0x4e, 0xfb, 0x93, 0x41, 0x56, + 0x1e, 0x36, 0x7a, 0x15, 0xf5, 0xec, 0xf2, 0xe4, 0x75, 0x8a, 0x0d, 0x35, + 0x58, 0xd1, 0x22, 0x90, 0x7f, 0xbf, 0x1b, 0xd0, 0xcc, 0x21, 0x41, 0x9c, + 0x9e, 0x6d, 0x11, 0x57, 0xf2, 0xa4, 0x1e, 0x3c, 0xeb, 0x5c, 0x9c, 0x50, + 0x89, 0x66, 0x6a, 0x81, 0xd4, 0x5d, 0x28, 0xcc, 0x30, 0x05, 0x3c, 0xb0, + 0x5e, 0xf2, 0x32, 0x35, 0xc7, 0x8b, 0x12, 0x1c, 0x5c, 0xcb, 0xe5, 0xe7, + 0x20, 0x56, 0xa7, 0x92, 0x72, 0x1f, 0xe1, 0x42, 0x7a, 0x0c, 0xae, 0x88, + 0x91, 0xfc, 0x8a, 0xd9, 0x4f, 0x80, 0xa4, 0xbc, 0xd1, 0xaa, 0x12, 0x87, + 0x22, 0x55, 0x32, 0xc6, 0xea, 0xd2, 0x1c, 0x83, 0x32, 0xaf, 0x19, 0xf1, + 0x33, 0x30, 0x95, 0x90, 0x1f, 0x83, 0xea, 0xec, 0x30, 0xbe, 0xfb, 0x9c, + 0xd3, 0x5f, 0x2f, 0x05, 0x64, 0x52, 0xf6, 0x82, 0x21, 0x1f, 0x4a, 0xa7, + 0xe4, 0xfd, 0x88, 0x6a, 0xb7, 0x2a, 0x52, 0xda, 0x71, 0x0b, 0x4b, 0x19, + 0xad, 0xd0, 0x72, 0x2b, 0x8c, 0xa0, 0x90, 0xc3, 0x49, 0xcc, 0x20, 0xc0, + 0x40, 0x20, 0xad, 0x82, 0x84, 0xd2, 0x4e, 0x67, 0x03, 0x8a, 0xea, 0x53, + 0x7e, 0x2f, 0x42, 0x00, 0x9b, 0x24, 0x47, 0x4e, 0xc6, 0x12, 0x23, 0xd3, + 0x12, 0xac, 0x33, 0x2c, 0x18, 0x9a, 0x69, 0x6e, 0x80, 0x47, 0xed, 0xd7, + 0x88, 0xef, 0x78, 0xc3, 0xa9, 0x99, 0xbd, 0x27, 0x24, 0xf5, 0x6f, 0xa0, + 0xbf, 0xf1, 0x6a, 0x5f, 0x48, 0x99, 0xdc, 0x40, 0x1c, 0x6c, 0x55, 0x57, + 0x3b, 0x95, 0x4d, 0xe0, 0x1f, 0x6c, 0x99, 0x28, 0xe2, 0xb1, 0x50, 0x4d, + 0xb3, 0x38, 0x22, 0x62, 0x3b, 0x2c, 0xca, 0x44, 0xd2, 0x17, 0x8a, 0xed, + 0x44, 0x1f, 0x1f, 0x42, 0x09, 0x52, 0xfe, 0x61, 0xf1, 0x16, 0x1e, 0xee, + 0x90, 0x7f, 0x31, 0x8e, 0x1c, 0x69, 0x3b, 0xed, 0x94, 0x96, 0xdc, 0xae, + 0xe6, 0x54, 0x15, 0x1c, 0xa5, 0x76, 0xed, 0xba, 0x2f, 0xbd, 0xc1, 0x27, + 0x14, 0xfc, 0x37, 0xaa, 0x2a, 0x3e, 0xe7, 0xbb, 0x16, 0x7d, 0xe1, 0xad, + 0xe7, 0x8f, 0x20, 0x5c, 0x9e, 0x92, 0xb4, 0xe5, 0x8a, 0x2d, 0x8a, 0x3d, + 0x7c, 0x87, 0x88, 0xa1, 0x67, 0xab, 0x1b, 0x0e, 0xee, 0x54, 0x9c, 0x29, + 0x2b, 0xfb, 0x25, 0xb8, 0x47, 0xb0, 0xbb, 0x75, 0x06, 0xa6, 0x9c, 0x32, + 0xde, 0x24, 0x5e, 0xf8, 0xd9, 0x5e, 0x62, 0x5e, 0x89, 0xa5, 0xc2, 0x0a, + 0x3d, 0x98, 0x23, 0xc0, 0xc0, 0x21, 0xf1, 0xb7, 0x03, 0xf2, 0xab, 0xd3, + 0x1b, 0x0a, 0xbb, 0x59, 0x12, 0x80, 0x2b, 0xe8, 0x9e, 0x53, 0x0a, 0x02, + 0x1a, 0x83, 0xf6, 0x5e, 0xe9, 0x4a, 0x17, 0xb0, 0x91, 0x84, 0x16, 0x61, + 0xa3, 0xb6, 0x3d, 0xd2, 0x81, 0x2a, 0xa8, 0x5a, 0x52, 0xe7, 0xa8, 0x7b, + 0x49, 0x7f, 0xa6, 0x1a, 0xe1, 0x6b, 0xe6, 0x9d, 0xd6, 0x8e, 0xf0, 0x16, + 0xfb, 0x19, 0x90, 0x4e, 0x87, 0x28, 0xb8, 0x64, 0x7b, 0x4c, 0xa8, 0x8e, + 0xd3, 0x8b, 0x90, 0x87, 0x0a, 0x1b, 0xa3, 0x2a, 0x20, 0x14, 0xc1, 0x88, + 0x7b, 0xf9, 0x39, 0x01, 0x96, 0xb5, 0x04, 0xf9, 0x50, 0xc9, 0x83, 0x54, + 0x6c, 0x4a, 0x69, 0x2b, 0xf5, 0x02, 0x2b, 0xf5, 0x46, 0x64, 0x32, 0x8b, + 0x4c, 0x82, 0xd0, 0x08, 0x5c, 0x8a, 0x39, 0x9c, 0x96, 0xd1, 0x37, 0x80, + 0xf4, 0xff, 0x9f, 0xc1, 0x1e, 0xac, 0x78, 0xf2, 0xc6, 0x89, 0xcc, 0xfa, + 0xf4, 0x48, 0x31, 0x95, 0xac, 0xee, 0x71, 0x7b, 0xde, 0xa3, 0xec, 0x75, + 0x02, 0x1e, 0x16, 0x91, 0xf5, 0x38, 0x78, 0xea, 0x9c, 0xcd, 0xf1, 0xd6, + 0x81, 0x34, 0xc4, 0xd8, 0xae, 0xad, 0xb1, 0xd3, 0xdf, 0xd2, 0x41, 0x42, + 0x4b, 0x2e, 0xf0, 0x63, 0x6a, 0x35, 0x17, 0x3d, 0xe7, 0x70, 0xd0, 0x55, + 0x6f, 0xdb, 0xd7, 0x85, 0x2b, 0x74, 0xa2, 0xd9, 0xf0, 0xd1, 0xd8, 0xdb, + 0x59, 0xb4, 0xa6, 0x34, 0xb1, 0x97, 0x0e, 0x3a, 0x40, 0x37, 0x79, 0x4a, + 0x21, 0x51, 0x97, 0x0b, 0x04, 0x5a, 0xaa, 0x66, 0x7f, 0x50, 0x54, 0x9a, + 0xaf, 0x71, 0x41, 0x17, 0x92, 0xd6, 0x13, 0xb1, 0x42, 0x4a, 0xeb, 0x37, + 0x48, 0xcc, 0xb1, 0xc8, 0x44, 0x10, 0x9d, 0x0f, 0xe6, 0xbc, 0x9e, 0x10, + 0xe5, 0x0f, 0xdb, 0xea, 0x5f, 0xea, 0x83, 0x3b, 0xda, 0xfe, 0x4e, 0x9d, + 0x99, 0x10, 0xe3, 0x66, 0xba, 0x08, 0x79, 0x2a, 0xcd, 0x7b, 0x2f, 0xb5, + 0x25, 0xc5, 0x98, 0x7e, 0x16, 0xf1, 0xa7, 0x65, 0x1b, 0x59, 0x1c, 0x15, + 0x03, 0xc7, 0xce, 0x66, 0xd6, 0xd1, 0xa2, 0x30, 0xb9, 0x0c, 0x82, 0xcd, + 0x7b, 0x50, 0x3c, 0x55, 0xba, 0x9d, 0x69, 0x51, 0xfb, 0x3c, 0x9c, 0x62, + 0x65, 0x21, 0xeb, 0xcd, 0xaa, 0x05, 0x84, 0xa0, 0x55, 0x89, 0x88, 0x9d, + 0x01, 0x86, 0x44, 0xe6, 0xec, 0xcc, 0xef, 0x12, 0x0b, 0xed, 0x70, 0x79, + 0xc2, 0xe1, 0xc6, 0x6c, 0x09, 0x75, 0xb0, 0xba, 0x01, 0xc2, 0x9c, 0x0f, + 0x7f, 0xda, 0x9e, 0x31, 0x41, 0x44, 0x9a, 0x1b, 0x65, 0x48, 0xa6, 0xb7, + 0xa6, 0xfa, 0xd8, 0x68, 0xc0, 0xa4, 0x5e, 0x77, 0x66, 0xfc, 0x2d, 0x63, + 0x7a, 0x2a, 0x8a, 0x3a, 0xe6, 0x8e, 0xc7, 0xff, 0x39, 0x17, 0xc5, 0x12, + 0xb5, 0x1e, 0xe5, 0xf9, 0xd5, 0x43, 0x72, 0xb4, 0x24, 0x40, 0x89, 0x2f, + 0x3d, 0xa9, 0xe4, 0xcd, 0x71, 0x3a, 0xea, 0x03, 0x11, 0xee, 0xf7, 0xa5, + 0xcf, 0xd8, 0xe4, 0x41, 0xda, 0xc5, 0x78, 0x18, 0x27, 0xd9, 0xfc, 0x2c, + 0x86, 0xe0, 0x9d, 0x5c, 0x68, 0x0c, 0x43, 0xb9, 0x97, 0xcf, 0xb2, 0xd3, + 0x8d, 0x2a, 0x20, 0x19, 0xdb, 0xfb, 0xc1, 0x44, 0xd2, 0xc4, 0x42, 0xbd, + 0xdc, 0x12, 0xde, 0xe0, 0xc6, 0xdf, 0x9d, 0xc1, 0x01, 0xe6, 0xbf, 0x0e, + 0xad, 0xba, 0xf2, 0xa8, 0x9c, 0xcc, 0x0f, 0xce, 0x10, 0xec, 0xe1, 0x08, + 0xab, 0xfc, 0x2b, 0xa2, 0x88, 0xe6, 0x4d, 0x13, 0x0b, 0x2d, 0x72, 0x64, + 0x2f, 0x04, 0x56, 0xea, 0x24, 0xc8, 0xb2, 0xba, 0x88, 0xad, 0x24, 0xe5, + 0xd7, 0x17, 0x78, 0xdd, 0xf8, 0x5f, 0x8c, 0x12, 0x5b, 0xf4, 0x71, 0x0c, + 0x0d, 0x33, 0x3e, 0x4f, 0x7d, 0x54, 0x7c, 0xfd, 0x4c, 0x62, 0x82, 0xbb, + 0xf9, 0xa8, 0x1b, 0xa8, 0x70, 0x78, 0x04, 0xea}, + // secret + {0x74, 0xe9, 0xa3, 0x74, 0xcf, 0xd1, 0x2e, 0x92, 0x61, 0x05, 0x91, + 0xe0, 0x5e, 0x80, 0xf2, 0x56, 0xfa, 0x9b, 0xc8, 0x51, 0x46, 0xf6, + 0x78, 0xc0, 0xfd, 0x53, 0x8a, 0xcb, 0xbb, 0x76, 0x5a, 0x6b}, + true}, + // tcID: 97 + {97, + params_ml_kem1024_test_mode, + // privateKey + {0x63, 0x08, 0x59, 0xb0, 0xe9, 0x29, 0x2a, 0xf4, 0x66, 0x19, 0xb7, 0x31, + 0x2d, 0xe4, 0x5d, 0x6d, 0x4b, 0x01, 0xd4, 0xa4, 0xbf, 0x07, 0x53, 0x72, + 0xb8, 0xa3, 0x45, 0xe1, 0xcc, 0xc6, 0x6f, 0x32, 0x57, 0xfd, 0x3a, 0x5b, + 0x47, 0xea, 0x04, 0x6a, 0x16, 0x82, 0x11, 0xc8, 0x07, 0x67, 0x2c, 0x13, + 0xba, 0x4a, 0x48, 0xae, 0x74, 0x2d, 0xef, 0xb7, 0x60, 0xcc, 0x74, 0x46, + 0xf0, 0x86, 0xc0, 0xa8, 0xb4, 0x39, 0x64, 0x1a, 0x24, 0xea, 0xc5, 0xca, + 0xf3, 0xa7, 0x30, 0xcd, 0x32, 0x15, 0xbd, 0xe8, 0xb4, 0x19, 0xca, 0x04, + 0xfa, 0xab, 0xc3, 0xff, 0x0c, 0xcb, 0x8b, 0xdc, 0xc8, 0xaf, 0x14, 0x95, + 0x88, 0x6b, 0x6d, 0x33, 0xb0, 0x1d, 0x25, 0xb0, 0x32, 0xf7, 0xc3, 0x28, + 0x2a, 0xa9, 0x25, 0x9e, 0x51, 0x78, 0xd5, 0x84, 0x11, 0x06, 0x79, 0x7a, + 0x5d, 0x55, 0x98, 0x82, 0xca, 0xaa, 0x17, 0xeb, 0x69, 0x5c, 0x39, 0x7b, + 0xbd, 0xd2, 0x97, 0xa5, 0xe2, 0x4a, 0x9e, 0x00, 0x53, 0x2d, 0x35, 0x52, + 0x86, 0xc0, 0x91, 0x97, 0xfc, 0x0d, 0x18, 0x66, 0x66, 0xc5, 0xd5, 0x36, + 0x0e, 0x42, 0xb1, 0xdb, 0x86, 0x5b, 0x1b, 0xa9, 0x50, 0xb7, 0xd1, 0xc2, + 0xce, 0x46, 0xb6, 0x4a, 0xc4, 0x3d, 0x89, 0x40, 0x4c, 0xce, 0xb3, 0xce, + 0xe3, 0x97, 0x17, 0x52, 0x37, 0xb6, 0x18, 0xd4, 0x11, 0x29, 0x17, 0x53, + 0x5f, 0x25, 0x0f, 0x2a, 0xf4, 0x2e, 0x1a, 0x05, 0x28, 0x2c, 0xb7, 0xce, + 0x65, 0xc7, 0x31, 0x17, 0xf9, 0x34, 0xe1, 0xb6, 0x61, 0xce, 0xe4, 0x76, + 0x3c, 0x37, 0x58, 0x20, 0xf0, 0x9f, 0x87, 0x91, 0x66, 0x15, 0x86, 0x5e, + 0x30, 0xe1, 0x46, 0x29, 0x8b, 0x52, 0x5b, 0x73, 0x0b, 0x1d, 0x89, 0xaf, + 0x46, 0x95, 0x09, 0xa0, 0xf0, 0x6f, 0xcb, 0xa5, 0xce, 0xd2, 0x40, 0x5d, + 0xc2, 0x10, 0xaa, 0x39, 0xfc, 0x55, 0x25, 0x1a, 0x80, 0xa8, 0xa0, 0x03, + 0x73, 0x89, 0xca, 0x7d, 0xca, 0x5d, 0x9a, 0x10, 0xb7, 0x77, 0xb6, 0x91, + 0x9b, 0x6c, 0x1e, 0x80, 0x55, 0x88, 0xe3, 0xf2, 0x08, 0x49, 0xe7, 0xb2, + 0x03, 0x3c, 0x5b, 0x78, 0x1b, 0x05, 0x45, 0xa8, 0x4e, 0x84, 0x29, 0x61, + 0x04, 0x18, 0x91, 0xf9, 0x1a, 0x5e, 0x5d, 0x4c, 0x21, 0x1b, 0x86, 0xb8, + 0xec, 0xf9, 0x1d, 0xe0, 0xab, 0x42, 0x91, 0x9b, 0x1a, 0x5b, 0x22, 0x45, + 0xed, 0xd5, 0x46, 0x89, 0xaa, 0x16, 0x9e, 0x61, 0x15, 0x2d, 0xc9, 0x4f, + 0xd9, 0xc1, 0xb8, 0x0e, 0x16, 0x02, 0xf3, 0xe6, 0x9f, 0x9b, 0xc3, 0x84, + 0x55, 0xc9, 0x3f, 0xa2, 0x75, 0x7e, 0x14, 0xa6, 0x36, 0x9e, 0x94, 0x2e, + 0x8e, 0xc9, 0x17, 0x3c, 0x9b, 0xc9, 0x16, 0x8b, 0x83, 0x23, 0x39, 0x02, + 0xed, 0xb0, 0x1f, 0xaa, 0xa6, 0x6c, 0xab, 0xb7, 0x96, 0x79, 0x3c, 0x53, + 0xdc, 0xe3, 0x2c, 0x1f, 0x81, 0xc3, 0x29, 0x21, 0x5e, 0xe9, 0x00, 0x2d, + 0x8d, 0x09, 0x49, 0x4c, 0x83, 0x01, 0x21, 0x8a, 0x37, 0x9e, 0x1b, 0x3e, + 0xa2, 0x21, 0xbf, 0x2c, 0x36, 0xa9, 0x27, 0xe4, 0xbd, 0xe0, 0xf2, 0x7c, + 0xc7, 0x27, 0x35, 0xfc, 0x4b, 0x3e, 0x7c, 0x18, 0x1f, 0x07, 0x27, 0x0a, + 0x89, 0x03, 0x46, 0x0c, 0x88, 0xb5, 0xbe, 0x49, 0x9b, 0x57, 0x63, 0xb7, + 0x9b, 0xca, 0x1f, 0xc9, 0x64, 0xb7, 0x5a, 0xca, 0x1f, 0x26, 0x49, 0xab, + 0x34, 0x77, 0x1d, 0x90, 0x85, 0x5c, 0x03, 0xab, 0x82, 0x62, 0xf9, 0x9b, + 0x78, 0x59, 0x65, 0x1f, 0xc4, 0x9a, 0xc5, 0x11, 0x9a, 0xa4, 0x8a, 0x89, + 0x31, 0xe1, 0x90, 0x35, 0xc0, 0x11, 0xa2, 0xfa, 0x7e, 0xc4, 0x46, 0x4d, + 0xc3, 0x5b, 0x8d, 0x7d, 0x33, 0x92, 0xee, 0x0b, 0x71, 0x0a, 0x98, 0xb3, + 0xe5, 0x65, 0xce, 0xa3, 0x92, 0x5f, 0xfc, 0x92, 0x02, 0xde, 0xc0, 0x70, + 0x42, 0xa1, 0x2c, 0x67, 0x71, 0x26, 0xad, 0xeb, 0x25, 0xec, 0x34, 0xbb, + 0x03, 0x43, 0xa1, 0xdc, 0x31, 0x1d, 0x55, 0xf4, 0x64, 0x26, 0x3c, 0x0e, + 0x32, 0x28, 0x7e, 0xbd, 0x5a, 0x67, 0x35, 0x68, 0x2a, 0xca, 0x47, 0x8d, + 0xcc, 0x34, 0xb5, 0xbf, 0x11, 0x9d, 0x15, 0x3a, 0x2c, 0x26, 0xbc, 0x4a, + 0x47, 0xe7, 0x43, 0xb5, 0x72, 0x1a, 0x0a, 0x1b, 0x3d, 0xec, 0x00, 0x19, + 0x6a, 0x00, 0x6d, 0xad, 0x82, 0x68, 0x49, 0xc1, 0x14, 0x6d, 0x01, 0xb8, + 0x91, 0xf6, 0x90, 0xd7, 0xf1, 0x16, 0x18, 0x7a, 0x96, 0x6a, 0x68, 0x9e, + 0x44, 0x75, 0xb6, 0x72, 0x44, 0x45, 0xed, 0x17, 0xcf, 0x1f, 0xf4, 0x02, + 0x6c, 0x8b, 0x58, 0x7b, 0x60, 0x0f, 0xcc, 0xf1, 0x48, 0xd4, 0x78, 0x52, + 0xc5, 0x46, 0xa7, 0x0b, 0xe6, 0x76, 0x78, 0x55, 0x60, 0x3c, 0x77, 0x25, + 0x8c, 0xb4, 0xbc, 0xfa, 0x1c, 0xa3, 0x10, 0xd5, 0x33, 0x17, 0x12, 0x87, + 0xc5, 0x16, 0x62, 0x30, 0xc7, 0x59, 0x43, 0x0b, 0x5b, 0x10, 0x27, 0xb8, + 0xf7, 0xc1, 0xbf, 0xd8, 0x05, 0x1d, 0xcf, 0x29, 0xb0, 0x90, 0x42, 0x3c, + 0x93, 0xe3, 0x30, 0x1e, 0x39, 0xab, 0xe8, 0xf3, 0xc1, 0x45, 0x73, 0x5d, + 0x5b, 0x9a, 0x83, 0xe5, 0xda, 0xca, 0x1e, 0x01, 0x3b, 0xdf, 0xc5, 0x1e, + 0xd0, 0x5a, 0x66, 0xdf, 0xc8, 0xcd, 0x32, 0x79, 0x8c, 0x92, 0x86, 0x27, + 0xc9, 0x83, 0x93, 0xa1, 0xda, 0x00, 0x3c, 0x79, 0x7b, 0xca, 0xc4, 0x02, + 0xd3, 0xf1, 0xc6, 0xad, 0x5b, 0x8f, 0x56, 0x62, 0x6d, 0x79, 0x54, 0xa7, + 0xc5, 0x87, 0xad, 0x7c, 0x72, 0x23, 0xd6, 0x22, 0xa5, 0x81, 0x69, 0xb8, + 0x26, 0x45, 0x60, 0x88, 0xab, 0x50, 0xd4, 0xa4, 0x8e, 0xf9, 0x59, 0x12, + 0x42, 0x71, 0x47, 0x9e, 0x6a, 0xc7, 0xd9, 0x79, 0x67, 0x5e, 0x22, 0x2a, + 0xcc, 0xb2, 0xbf, 0xb8, 0x74, 0x8a, 0xa9, 0x41, 0x6b, 0x0c, 0x67, 0x28, + 0x8b, 0xa7, 0x59, 0x63, 0x19, 0x68, 0x19, 0xba, 0x8b, 0x20, 0xb1, 0x16, + 0xf7, 0x99, 0x55, 0xae, 0xd7, 0x27, 0x35, 0xc0, 0x8b, 0xe4, 0x29, 0x7f, + 0x28, 0xac, 0xc8, 0xdf, 0x25, 0x21, 0x57, 0x65, 0xc1, 0x7f, 0x9a, 0x77, + 0x53, 0x10, 0x69, 0x99, 0x93, 0x61, 0x0a, 0x49, 0x0f, 0x23, 0x68, 0xa8, + 0x7e, 0x90, 0x19, 0xcb, 0x60, 0x37, 0x0e, 0x17, 0x49, 0x72, 0x1b, 0x40, + 0x9b, 0x39, 0x83, 0x63, 0xfa, 0x49, 0xf0, 0x24, 0x6c, 0x08, 0x94, 0x86, + 0x74, 0xe3, 0x67, 0x0f, 0x32, 0x52, 0x5a, 0x43, 0xc3, 0x37, 0xeb, 0x96, + 0x77, 0x76, 0x02, 0x64, 0xa0, 0x56, 0x26, 0x02, 0x1c, 0x2d, 0xe7, 0xc1, + 0x80, 0x93, 0x5d, 0x35, 0x32, 0x28, 0x59, 0x05, 0xab, 0x71, 0xf3, 0xb9, + 0x4a, 0x25, 0x9d, 0xca, 0xf6, 0xcb, 0xd6, 0x2b, 0xa5, 0xf7, 0x12, 0x9a, + 0xed, 0x02, 0x70, 0xee, 0x86, 0x48, 0x36, 0x73, 0x69, 0x3e, 0xf9, 0x0b, + 0x84, 0xab, 0x39, 0xa3, 0xcc, 0x10, 0xfd, 0x32, 0x2d, 0x7a, 0x98, 0x9e, + 0x52, 0x79, 0x20, 0x52, 0x6a, 0x94, 0xdc, 0x8c, 0xa7, 0xaf, 0xe6, 0x77, + 0x37, 0x66, 0x25, 0xb4, 0x1a, 0xac, 0x4b, 0xc4, 0x02, 0x7a, 0x31, 0x63, + 0x23, 0xc8, 0x77, 0xc5, 0xf5, 0x81, 0x18, 0x88, 0x92, 0x5b, 0x81, 0xa7, + 0x6e, 0xba, 0x5d, 0x49, 0x69, 0x23, 0x01, 0x2b, 0x37, 0xfe, 0x6c, 0x28, + 0x27, 0x87, 0x2b, 0x81, 0xe6, 0x53, 0x39, 0xac, 0x8b, 0xfc, 0x57, 0xae, + 0x68, 0xa3, 0xc9, 0x00, 0xc0, 0x26, 0xdd, 0xa6, 0xae, 0xdb, 0x09, 0xa3, + 0xcb, 0x98, 0xcc, 0x2a, 0x80, 0x9a, 0x72, 0x18, 0xb1, 0x90, 0xa5, 0x74, + 0x9c, 0x42, 0xae, 0x4f, 0x35, 0x31, 0x24, 0x80, 0x9d, 0x78, 0x73, 0x3d, + 0xc5, 0x2a, 0x89, 0x85, 0x01, 0x59, 0xab, 0x73, 0x41, 0x59, 0x88, 0x32, + 0x0c, 0x7a, 0x09, 0x3c, 0x01, 0xd0, 0x3f, 0x44, 0x92, 0x29, 0x38, 0x56, + 0xa5, 0x31, 0xa4, 0xf0, 0x13, 0x95, 0x0e, 0x30, 0xc7, 0xa5, 0x48, 0xbf, + 0xe0, 0x46, 0x69, 0x87, 0xc3, 0x39, 0xdb, 0xf0, 0x8e, 0x9a, 0x0b, 0x4e, + 0xde, 0xca, 0x08, 0x3c, 0x39, 0x9f, 0x2e, 0x69, 0x71, 0xcf, 0x3a, 0xc6, + 0x47, 0xfb, 0x5e, 0xef, 0x40, 0x17, 0x59, 0xe6, 0xc2, 0x92, 0xf0, 0x38, + 0xdd, 0x73, 0x28, 0x47, 0x54, 0x5a, 0x63, 0xe4, 0x3e, 0x17, 0x57, 0x9c, + 0x81, 0x8c, 0x3d, 0xe8, 0x88, 0x89, 0x5f, 0x3a, 0xc7, 0x12, 0xdc, 0x6c, + 0x76, 0x71, 0x58, 0xbe, 0x31, 0x1f, 0x24, 0xe4, 0x4f, 0xcf, 0x91, 0xad, + 0xb2, 0x66, 0x3b, 0xbb, 0x0b, 0x1a, 0xce, 0x80, 0x14, 0x95, 0xcc, 0x5a, + 0xbc, 0xc2, 0x08, 0xf0, 0xda, 0x63, 0x40, 0x46, 0x50, 0x3c, 0x69, 0x46, + 0x46, 0xe9, 0x36, 0x8e, 0x43, 0xcd, 0x98, 0xa0, 0x2d, 0xa6, 0x7b, 0x11, + 0x38, 0xea, 0x5f, 0xb5, 0xba, 0xb0, 0xdd, 0xc8, 0x7f, 0x85, 0xe0, 0xa2, + 0xf7, 0xb7, 0x30, 0x8a, 0xc2, 0x6b, 0x72, 0x42, 0x7b, 0xf7, 0xf0, 0x7d, + 0xe8, 0xb5, 0xc3, 0x04, 0xa6, 0x0b, 0x23, 0xaa, 0x50, 0xc2, 0xe0, 0x5e, + 0x68, 0xa9, 0x20, 0x6c, 0x38, 0x59, 0xca, 0x01, 0x70, 0x34, 0x81, 0x42, + 0x42, 0xf4, 0x9c, 0x91, 0xa7, 0x34, 0x35, 0x3c, 0x0c, 0x17, 0xd0, 0x75, + 0xe3, 0x14, 0x12, 0x24, 0x5c, 0x13, 0x1c, 0xe8, 0x63, 0xe6, 0x54, 0x92, + 0x73, 0x37, 0xac, 0x04, 0x6b, 0x1b, 0xa8, 0x32, 0x14, 0x33, 0x6c, 0x32, + 0xca, 0x8b, 0xb1, 0x79, 0xf6, 0x71, 0xe0, 0x10, 0x92, 0x20, 0x80, 0xbf, + 0x1c, 0x28, 0x91, 0x96, 0x70, 0x17, 0x45, 0x97, 0x88, 0xe4, 0xb6, 0x91, + 0x31, 0x65, 0x1b, 0xce, 0x03, 0x91, 0x1a, 0xf8, 0xae, 0xdd, 0x65, 0x70, + 0xab, 0xeb, 0x17, 0x72, 0x7b, 0xa2, 0x5c, 0x71, 0x9e, 0x69, 0xcb, 0x22, + 0x60, 0x76, 0x78, 0x0b, 0xe1, 0x83, 0xfe, 0x70, 0x5e, 0x15, 0x39, 0x48, + 0x0c, 0x14, 0x77, 0x73, 0xe3, 0xc3, 0x13, 0xc3, 0x59, 0xc3, 0xb1, 0x3e, + 0xee, 0xd4, 0x91, 0x39, 0xb2, 0x7a, 0xa7, 0x87, 0x36, 0xf4, 0x12, 0x83, + 0x00, 0x5c, 0xb4, 0x03, 0x75, 0xc2, 0xdb, 0xf2, 0x8d, 0x2d, 0xb5, 0xa7, + 0x67, 0xf0, 0x81, 0x4d, 0x66, 0x1b, 0x7e, 0x48, 0x30, 0x48, 0xe4, 0x65, + 0xee, 0x01, 0x2e, 0x87, 0x77, 0x60, 0xca, 0xd3, 0xa2, 0x5b, 0xa9, 0x53, + 0x56, 0xc0, 0x87, 0xe5, 0x96, 0x54, 0x0a, 0x60, 0x3d, 0xb8, 0xbb, 0xb4, + 0x5c, 0xf0, 0x5d, 0x0d, 0x64, 0x31, 0xe4, 0xb5, 0x64, 0x6d, 0x04, 0x59, + 0x72, 0xfa, 0x81, 0x52, 0x4b, 0x94, 0x76, 0xf0, 0x7f, 0x03, 0xbb, 0xab, + 0x40, 0x01, 0x50, 0xe4, 0xa8, 0x40, 0x85, 0x3b, 0x76, 0x8b, 0x0c, 0x02, + 0xb1, 0xd7, 0x5e, 0xb4, 0x74, 0x8e, 0x32, 0x48, 0xbc, 0xb7, 0xcc, 0x03, + 0x7e, 0xa7, 0x0f, 0x88, 0x22, 0x99, 0xed, 0xd1, 0x84, 0x70, 0x44, 0x3d, + 0x9f, 0xb7, 0xa4, 0x79, 0xd8, 0x3a, 0x23, 0x98, 0x09, 0xc1, 0x66, 0xb6, + 0xe7, 0xbb, 0x61, 0xab, 0xd1, 0xbd, 0xbb, 0xa7, 0xae, 0xc9, 0xb2, 0xbc, + 0x55, 0x32, 0x0f, 0x17, 0xfb, 0x72, 0xbd, 0x84, 0x2d, 0x52, 0xdc, 0x83, + 0x15, 0xa8, 0x73, 0x88, 0x75, 0xad, 0xbc, 0x25, 0x4e, 0x5a, 0xf3, 0x69, + 0xfe, 0x32, 0xcf, 0x8a, 0xb5, 0xcc, 0x45, 0x45, 0x9d, 0x2f, 0x74, 0x33, + 0xd3, 0x77, 0x73, 0x12, 0xf1, 0x71, 0x71, 0xe3, 0xb0, 0x73, 0xf0, 0x1e, + 0x0d, 0x17, 0x59, 0x35, 0xe7, 0xb8, 0x70, 0x67, 0x6d, 0x73, 0xc1, 0x01, + 0x5d, 0xa7, 0xa6, 0x4d, 0x63, 0x33, 0xe6, 0x60, 0x1a, 0x94, 0x90, 0x2b, + 0x5c, 0xf4, 0x32, 0x21, 0x24, 0x64, 0xc3, 0x2c, 0x44, 0xa8, 0xca, 0x8f, + 0xa6, 0xf6, 0x62, 0x08, 0x99, 0xb0, 0x8e, 0x96, 0x8b, 0x2f, 0x04, 0x7b, + 0x42, 0xb0, 0x05, 0x27, 0x90, 0x19, 0x74, 0x33, 0x7d, 0x36, 0x13, 0xc1, + 0xbc, 0x27, 0x8e, 0xe8, 0xd5, 0xc2, 0x54, 0xb4, 0x89, 0x8e, 0x10, 0x88, + 0xd4, 0xa8, 0xc0, 0x9e, 0xe1, 0x75, 0x96, 0x94, 0x07, 0xc0, 0x1b, 0x11, + 0xc5, 0xf8, 0x23, 0x9c, 0x4a, 0x04, 0x55, 0xda, 0x5d, 0xd6, 0x87, 0x6c, + 0x18, 0x16, 0x09, 0x44, 0x05, 0x4f, 0x69, 0x54, 0x5a, 0x53, 0x40, 0xc5, + 0xe2, 0xec, 0x8a, 0x37, 0x8b, 0x18, 0x24, 0xd3, 0x13, 0xd4, 0x00, 0x1f, + 0x20, 0xfb, 0xa7, 0xb8, 0x78, 0xac, 0x5f, 0x49, 0x0e, 0x0e, 0xb6, 0x5c, + 0x12, 0xd0, 0xac, 0xff, 0x68, 0xc9, 0xf9, 0xe5, 0x41, 0x70, 0xf4, 0x13, + 0x7a, 0x4c, 0x20, 0x68, 0x34, 0xbf, 0xef, 0x81, 0x65, 0x1c, 0x61, 0xbf, + 0x3a, 0x67, 0x36, 0xb9, 0x81, 0xa2, 0x22, 0x99, 0x4d, 0x35, 0x71, 0xb1, + 0xb8, 0x02, 0xb5, 0xd7, 0x59, 0x84, 0x7e, 0x91, 0x5a, 0x9b, 0xb0, 0xb1, + 0xca, 0x89, 0x4e, 0x05, 0x5b, 0x1d, 0xb0, 0xfc, 0x5d, 0x7e, 0xe3, 0x9c, + 0x56, 0x95, 0xc1, 0x0a, 0x31, 0x12, 0xd4, 0xe2, 0xa0, 0x36, 0x40, 0x36, + 0xc1, 0x82, 0x4c, 0x7f, 0x32, 0x62, 0x7e, 0x81, 0x17, 0x6e, 0x65, 0x9a, + 0xa1, 0xb6, 0xca, 0x4e, 0xa3, 0xcd, 0x65, 0x91, 0xcb, 0x7e, 0x86, 0xcd, + 0xcb, 0x57, 0xa6, 0x44, 0x0b, 0x6d, 0x92, 0xb0, 0x8a, 0x62, 0x8c, 0x37, + 0x84, 0x08, 0xab, 0xf7, 0xb9, 0x3c, 0xec, 0x59, 0xaa, 0x19, 0xeb, 0x64, + 0x8b, 0x39, 0x17, 0x0c, 0xa8, 0x7a, 0xf4, 0x13, 0x89, 0xec, 0xac, 0xba, + 0x26, 0x91, 0x9d, 0xbd, 0x3c, 0x48, 0x70, 0x36, 0x0a, 0x72, 0xa3, 0x98, + 0xdc, 0x7c, 0xbd, 0xa6, 0x2c, 0x26, 0xae, 0x6a, 0x04, 0x19, 0xe5, 0x22, + 0x9d, 0xa7, 0xc7, 0x7c, 0x72, 0x5f, 0xfe, 0x9a, 0xaf, 0xa9, 0xeb, 0x0e, + 0x5b, 0xec, 0x8b, 0x1c, 0xca, 0x02, 0xfe, 0x97, 0x37, 0x9d, 0xb2, 0x01, + 0x43, 0xe2, 0x1e, 0x1a, 0xa8, 0xbb, 0xb5, 0x5b, 0x72, 0x4b, 0xb6, 0x68, + 0xc1, 0x09, 0x32, 0xba, 0x9c, 0x58, 0xa2, 0x45, 0x36, 0xca, 0x9c, 0xac, + 0x67, 0x53, 0x50, 0xc7, 0xf7, 0x21, 0x57, 0xb0, 0xaf, 0x49, 0x7b, 0xa4, + 0xb1, 0x64, 0x25, 0xf5, 0x20, 0x69, 0xee, 0xe1, 0x44, 0xfa, 0x96, 0xa4, + 0x0d, 0xe9, 0x9a, 0x1f, 0xe1, 0x0d, 0x95, 0xf7, 0x11, 0x02, 0xfa, 0xad, + 0xf1, 0xa8, 0xa0, 0xfe, 0x80, 0x38, 0xb5, 0xa4, 0x9c, 0x04, 0xc9, 0x52, + 0xc9, 0x7c, 0x65, 0x68, 0x59, 0x65, 0xe1, 0x8a, 0x0b, 0xa8, 0xb8, 0x05, + 0xae, 0x28, 0x39, 0xf6, 0x12, 0x78, 0xb7, 0x62, 0x65, 0x08, 0x23, 0x29, + 0xf6, 0xca, 0x40, 0x40, 0x24, 0x2a, 0x76, 0x0b, 0x6c, 0xfd, 0x68, 0x3d, + 0x52, 0xd6, 0xbd, 0x4e, 0x11, 0x56, 0xbc, 0xd1, 0x81, 0xd4, 0xc1, 0x6f, + 0xdf, 0x9c, 0x75, 0x42, 0x6a, 0x80, 0x00, 0xb6, 0x95, 0x2e, 0x2a, 0x02, + 0x3d, 0x3a, 0x59, 0x84, 0x4b, 0x72, 0xf3, 0xd9, 0xbe, 0xea, 0x35, 0xbe, + 0x4f, 0x70, 0x98, 0x88, 0x71, 0xc6, 0x07, 0x9a, 0x2f, 0x49, 0x47, 0x45, + 0x99, 0xc9, 0xa0, 0xbb, 0xa3, 0x6b, 0x8c, 0xc4, 0x18, 0x65, 0x36, 0x3b, + 0x42, 0x55, 0x4d, 0x97, 0x22, 0xb9, 0xcf, 0x7a, 0x5b, 0xcc, 0x18, 0x12, + 0x88, 0x9b, 0xce, 0xdb, 0x1b, 0x4d, 0xed, 0x8b, 0x48, 0xbb, 0x42, 0x69, + 0x5d, 0x83, 0xbe, 0x31, 0xa5, 0x43, 0x36, 0x78, 0x19, 0xec, 0x75, 0x85, + 0x1e, 0x1b, 0x92, 0x0b, 0xa6, 0x9a, 0xab, 0xf5, 0x70, 0x07, 0xca, 0xb1, + 0x42, 0x6c, 0x56, 0xed, 0xb6, 0xb6, 0xf6, 0x83, 0x2c, 0x95, 0xc0, 0x83, + 0x45, 0x81, 0xbf, 0x62, 0x40, 0x67, 0x4d, 0x33, 0x6d, 0x24, 0x37, 0xb8, + 0x20, 0xe8, 0x40, 0x40, 0xba, 0xa9, 0x3d, 0x20, 0x56, 0xc1, 0xc3, 0xb2, + 0xf9, 0xa0, 0xa6, 0x53, 0x6c, 0x19, 0xf4, 0x3a, 0x1d, 0x09, 0x04, 0xc1, + 0x88, 0x42, 0x18, 0x05, 0x45, 0x1b, 0xb9, 0x1c, 0x90, 0x8f, 0x15, 0x9b, + 0x1d, 0x30, 0x80, 0x71, 0xd3, 0x88, 0x62, 0x87, 0xc2, 0xca, 0x56, 0x26, + 0x3c, 0x60, 0xa4, 0x3f, 0x67, 0x91, 0x6a, 0x3a, 0x79, 0xb2, 0xfa, 0x0b, + 0x1b, 0xf8, 0x97, 0xe9, 0x41, 0x51, 0x4e, 0x78, 0x96, 0x82, 0x76, 0x50, + 0x8f, 0x31, 0x35, 0xd8, 0xa9, 0xb8, 0xe0, 0xd7, 0x81, 0xfd, 0x41, 0xc0, + 0x5e, 0xda, 0x9f, 0x2c, 0x4a, 0x9b, 0x4f, 0xd3, 0x3b, 0x1c, 0x80, 0xbb, + 0x69, 0x0c, 0x59, 0xbc, 0xcc, 0x8c, 0xed, 0x95, 0xc1, 0xdc, 0xe7, 0x21, + 0x36, 0x12, 0x51, 0x28, 0x50, 0x7f, 0x30, 0xa4, 0x65, 0xae, 0x10, 0xaf, + 0xe4, 0x4c, 0xb7, 0x64, 0x69, 0x7b, 0x8d, 0xc1, 0xad, 0x2c, 0xba, 0x07, + 0xc7, 0x3b, 0xb8, 0x88, 0xc9, 0xa5, 0x59, 0x40, 0x7a, 0x3d, 0x06, 0x36, + 0xa4, 0x13, 0x4a, 0x3e, 0x16, 0x28, 0x53, 0x49, 0x3c, 0x25, 0x77, 0x0d, + 0x10, 0x84, 0x7a, 0x72, 0x95, 0x6f, 0xe3, 0xcc, 0x01, 0x77, 0x80, 0x49, + 0xb4, 0x61, 0x42, 0xaf, 0x4b, 0x4a, 0xd1, 0xd9, 0x00, 0xb4, 0x4a, 0x14, + 0x93, 0x23, 0x19, 0x05, 0x00, 0x89, 0x9d, 0x28, 0x01, 0xaa, 0x5c, 0x03, + 0x1a, 0x0c, 0x37, 0x8f, 0x5c, 0xa3, 0xa7, 0x78, 0xc8, 0xb7, 0xb6, 0x88, + 0xee, 0xa2, 0x6c, 0xd7, 0x20, 0xcd, 0x88, 0x58, 0xa0, 0x7d, 0xa4, 0x6c, + 0x17, 0x6c, 0x08, 0x27, 0x8b, 0x7c, 0x5d, 0x47, 0xaa, 0x6a, 0xa9, 0x27, + 0x53, 0xc7, 0x5b, 0xdf, 0xf7, 0x2e, 0x88, 0x70, 0x8e, 0x66, 0x27, 0xbe, + 0xc0, 0x33, 0x53, 0x31, 0xd3, 0x86, 0x04, 0xe8, 0x4e, 0xc7, 0x12, 0xb0, + 0xd3, 0xec, 0x87, 0x14, 0xe5, 0x6f, 0xfa, 0x88, 0x07, 0xf4, 0x0b, 0x8c, + 0xe6, 0xc3, 0x72, 0x33, 0x69, 0x88, 0x3e, 0xdb, 0x46, 0x2a, 0xd9, 0xbc, + 0x97, 0x22, 0x06, 0xa1, 0x6c, 0x78, 0xda, 0xf8, 0xc1, 0x42, 0x83, 0x44, + 0xe9, 0xc7, 0x6b, 0x16, 0x1a, 0x81, 0x8b, 0xf8, 0x83, 0x5a, 0x00, 0x43, + 0x62, 0x1b, 0x38, 0x41, 0xf8, 0x0c, 0xa3, 0xf0, 0x29, 0x70, 0xf7, 0x88, + 0x2b, 0x71, 0x5e, 0xff, 0x11, 0x7b, 0x80, 0xe1, 0x25, 0xab, 0xfb, 0x40, + 0x6b, 0xd7, 0x50, 0x27, 0xf9, 0xad, 0x34, 0xec, 0x7e, 0x7b, 0x62, 0x9c, + 0x2d, 0x83, 0x4c, 0x90, 0x22, 0x50, 0x20, 0x01, 0x7c, 0xa5, 0x11, 0xc8, + 0xe8, 0x3c, 0xab, 0x0f, 0x98, 0xc7, 0x39, 0xeb, 0x03, 0x0e, 0x17, 0x2a, + 0x67, 0x58, 0x6d, 0x90, 0xa5, 0x82, 0x7e, 0x06, 0x3b, 0x9c, 0x7b, 0x07, + 0x05, 0xbb, 0x61, 0xf5, 0xa6, 0x06, 0x7d, 0x10, 0x27, 0x76, 0xf1, 0x89, + 0x50, 0xc3, 0xc2, 0x54, 0x01, 0x98, 0xd9, 0x16, 0xb7, 0xd6, 0x4c, 0x80, + 0x3e, 0xec, 0x37, 0x01, 0x79, 0x9d, 0xa2, 0xc1, 0x76, 0xaf, 0xf3, 0x8c, + 0x26, 0x00, 0x4f, 0x3b, 0xc1, 0x81, 0x44, 0xa3, 0x50, 0x1d, 0x80, 0xb5, + 0x80, 0xc1, 0x44, 0x2a, 0xfc, 0xab, 0x6a, 0x45, 0x8c, 0x1b, 0xb4, 0x9e, + 0x5a, 0x57, 0x28, 0xeb, 0x28, 0x18, 0xb6, 0xec, 0x53, 0x9f, 0x5c, 0x93, + 0x1f, 0x97, 0x43, 0xeb, 0x34, 0xb8, 0x89, 0x40, 0x1d, 0x19, 0xd2, 0x20, + 0xcf, 0x78, 0x22, 0xdb, 0x69, 0x06, 0x00, 0x6b, 0x59, 0xa5, 0xcc, 0x90, + 0x99, 0x26, 0x91, 0xa2, 0x07, 0x16, 0x31, 0xa9, 0x6b, 0x6d, 0x86, 0x17, + 0xf7, 0xe8, 0x63, 0xc4, 0x4a, 0x61, 0x0e, 0x72, 0xa3, 0x4c, 0xab, 0x05, + 0xd6, 0x82, 0x81, 0xd0, 0x70, 0x88, 0xd2, 0x35, 0x80, 0xf0, 0xa8, 0x7c, + 0x87, 0x06, 0x84, 0xd7, 0x4c, 0x66, 0xd1, 0x82, 0x7b, 0xa2, 0x70, 0x20, + 0x24, 0x09, 0x83, 0x77, 0xab, 0x35, 0x9f, 0x10, 0xcf, 0x21, 0xb7, 0xc5, + 0xea, 0x9a, 0x77, 0xec, 0xc1, 0x21, 0xb9, 0xd8, 0x1e, 0x52, 0xb4, 0xcf, + 0xb3, 0x15, 0xce, 0x00, 0x76, 0x75, 0x7e, 0xba, 0x10, 0x0f, 0x87, 0xa3, + 0xca, 0x1b, 0x28, 0x78, 0x5c, 0x46, 0xb2, 0xb2, 0x85, 0x61, 0x60, 0x21, + 0x3b, 0x09, 0xb3, 0xb0, 0x84, 0x40, 0x55, 0x51, 0x50, 0x85, 0xf7, 0x21, + 0xee, 0x47, 0x35, 0x6e, 0x31, 0x59, 0x9d, 0x00, 0x71, 0x21, 0x4c, 0x8b, + 0x1e, 0xa4, 0x43, 0x74, 0x89, 0x08, 0x38, 0xd1, 0xc6, 0x63, 0x63, 0x83, + 0xcd, 0x93, 0x76, 0xd1, 0x31, 0xce, 0x11, 0x39, 0x27, 0x79, 0x11, 0xb2, + 0x21, 0xa5, 0xcf, 0xa1, 0x82, 0xab, 0xe5, 0x35, 0xaf, 0xf8, 0x99, 0x5f, + 0x57, 0x3b, 0x55, 0xca, 0x3c, 0x08, 0xca, 0xfb, 0xbe, 0xeb, 0xb9, 0x2e, + 0xc2, 0x80, 0xbc, 0x35, 0x17, 0x35, 0xa5, 0x89, 0x19, 0x97, 0x97, 0x21, + 0x04, 0x99, 0x3f, 0x53, 0x32, 0x1e, 0x70, 0xe5, 0x71, 0xe8, 0x62, 0x50, + 0xcc, 0xf9, 0x60, 0x10, 0xfb, 0x59, 0xfe, 0xd8, 0x97, 0x55, 0x31, 0x7a, + 0x0b, 0xaa, 0x5f, 0x5a, 0xd1, 0xa6, 0xca, 0xca, 0xc5, 0xca, 0x46, 0x12, + 0xf2, 0xb2, 0x7e, 0x94, 0xd6, 0xb6, 0x1d, 0xcb, 0x13, 0x8a, 0x66, 0x1b, + 0x28, 0xb0, 0x30, 0x91, 0xc1, 0x73, 0xbf, 0x96, 0xcf, 0xbb, 0xe0, 0x0c, + 0xc9, 0x42, 0x23, 0x32, 0x8b, 0x55, 0xf0, 0xb8, 0x48, 0xe2, 0x74, 0x97, + 0xba, 0xec, 0xc6, 0xa5, 0x88, 0xc2, 0x4e, 0xb3, 0x4b, 0xfa, 0x77, 0x1c, + 0x94, 0xb4, 0xc3, 0xb6, 0xf8, 0x7a, 0x54, 0x45, 0x89, 0x41, 0x69, 0x1c, + 0x69, 0x45, 0x47, 0x0a, 0xa6, 0x85, 0x52, 0xb7, 0x7d, 0xe5, 0x24, 0x5c, + 0xde, 0xdc, 0x8a, 0x45, 0x78, 0x05, 0xce, 0xa0, 0x24, 0x03, 0x4c, 0x57, + 0x31, 0xc2, 0x96, 0xe0, 0xa4, 0x68, 0xbc, 0xba, 0x19, 0xd0, 0xdc, 0x7e, + 0xc3, 0xa3, 0x86, 0x15, 0xb1, 0x0e, 0x1d, 0x7c, 0xb9, 0xb6, 0x13, 0x15, + 0x78, 0x6a, 0x2a, 0xd7, 0x37, 0xb3, 0x84, 0xe5, 0x11, 0xab, 0x0c, 0xb3, + 0x00, 0x97, 0x63, 0x24, 0x28, 0x70, 0x63, 0xa7, 0x6b, 0x58, 0x9b, 0x88, + 0xa6, 0x86, 0xa2, 0x76, 0xca, 0x77, 0x0a, 0xc9, 0xb7, 0x9a, 0x0b, 0x04, + 0x20, 0x69, 0x2a, 0xf8, 0xd2, 0x8a, 0xfe, 0x39, 0x21, 0x35, 0xa6, 0x2e, + 0xd2, 0x0c, 0x95, 0x3d, 0xba, 0x3e, 0xa0, 0xb1, 0xb7, 0x40, 0x71, 0x5d, + 0xb8, 0x08, 0x4b, 0x16, 0x66, 0x1c, 0xf9, 0xf4, 0x97, 0xbc, 0x8b, 0xc5, + 0x09, 0xe9, 0xa9, 0xbf, 0x57, 0x13, 0x76, 0x9c, 0xc3, 0x09, 0x09, 0x0a, + 0xbd, 0x3b, 0xcd, 0x49, 0xe6, 0x9a, 0x09, 0xb6, 0xbd, 0x01, 0x53, 0x68, + 0x83, 0xb5, 0xab, 0xf8, 0x76, 0x22, 0xa9, 0x35, 0x66, 0xb5, 0x1b, 0x1e, + 0x0c, 0x8a, 0x0a, 0x19, 0x1a, 0x0f, 0x90, 0xea, 0x59, 0x95, 0x85, 0x2b, + 0xf0, 0xeb, 0x8b, 0x3f, 0x15, 0xbb, 0xaa, 0xf5, 0x5b, 0x82, 0xd9, 0x00, + 0xa7, 0x45, 0x07, 0xd1, 0x67, 0xce, 0xd7, 0x9b, 0x5d, 0x51, 0xb5, 0xa7, + 0x79, 0x10, 0x55, 0xae, 0x83, 0x5d, 0x79, 0xc1, 0xb0, 0xfc, 0xcc, 0x0b, + 0x21, 0x36, 0x64, 0xbb, 0xf3, 0x5d, 0x9b, 0x60, 0x43, 0x56, 0xa2, 0x3e, + 0x89, 0xf9, 0x51, 0x0a, 0xe2, 0xb8, 0xef, 0x6b, 0xa3, 0xfa, 0x52, 0x38, + 0x7a, 0xc9, 0x20, 0x19, 0xa7, 0x73, 0xc4, 0xf2, 0x6d, 0xb9, 0xf4, 0x48, + 0x01, 0xf0, 0x0a, 0x2b, 0xda, 0x3c, 0x14, 0xb2, 0x95, 0x34, 0x86, 0xa7, + 0xe5, 0x60, 0x5e, 0x1b, 0x52, 0x3f, 0x89, 0x45, 0x10, 0xfa, 0x8b, 0xb8, + 0x5a, 0x08, 0x0e, 0x58, 0x9a, 0x45, 0x38, 0xf3, 0xe0, 0xc0, 0x8f, 0xf7, + 0x14, 0x11, 0x39, 0x62, 0xc5, 0xa6, 0xfc, 0x29, 0x17, 0x25, 0x09, 0xb3, + 0xc1, 0xae, 0xc2, 0xfa, 0x41, 0x70, 0x74, 0x39, 0xb3, 0x71, 0x61, 0xe8, + 0xa5, 0xbd, 0x10, 0x99, 0x53, 0xd7, 0x5b, 0xd8, 0x1e, 0x06, 0x2d, 0x36, + 0xd8, 0x1e, 0xc8, 0x71, 0x8b, 0x0f, 0xf1, 0x1f, 0x83, 0x5f, 0xd0, 0x2e, + 0xbb, 0x0e, 0x37, 0xd1, 0xaf, 0x05, 0x41, 0x9b, 0x0c, 0xb3, 0xde, 0x1b, + 0x51, 0x44, 0x04, 0xd1, 0xc0, 0xdb, 0x90, 0x17, 0x18, 0x2c, 0xe7, 0x1d, + 0x7a, 0x0e, 0x69, 0xcb, 0x14, 0x1a, 0x94, 0x17, 0x4c, 0xc7, 0x58, 0xc0}, + // ciphertext + {0x13, 0xe4, 0x51, 0x34, 0x54, 0x72, 0x51, 0xcf, 0x55, 0x51, 0x59, 0x76, + 0x98, 0x55, 0x78, 0xab, 0xa6, 0xca, 0x97, 0xfc, 0x3f, 0xf6, 0xde, 0xed, + 0x8e, 0x15, 0xad, 0x94, 0x71, 0x17, 0xfe, 0x7d, 0x2f, 0x2d, 0xac, 0xd7, + 0xe6, 0x81, 0xbb, 0x89, 0x9f, 0x5f, 0x39, 0xaa, 0xdc, 0xa8, 0x73, 0x26, + 0x08, 0x5f, 0x01, 0xfb, 0xde, 0x65, 0x5e, 0x7c, 0x8a, 0x37, 0x11, 0xc9, + 0xea, 0x5f, 0x66, 0x04, 0xa5, 0x47, 0xd3, 0xd0, 0x19, 0x41, 0x6e, 0x46, + 0xeb, 0xbf, 0x85, 0x1b, 0xe3, 0xc2, 0x70, 0x3a, 0x32, 0x41, 0x18, 0x81, + 0x04, 0xec, 0x34, 0x0b, 0xb5, 0x48, 0xe5, 0xe3, 0x7b, 0x65, 0xf2, 0x27, + 0x2c, 0x10, 0x48, 0x02, 0xab, 0x74, 0x3c, 0x88, 0x90, 0x8d, 0x29, 0x9e, + 0xe6, 0xb9, 0xf1, 0xde, 0x6f, 0x8e, 0x00, 0x38, 0xcc, 0x9c, 0x4a, 0xa5, + 0x67, 0x34, 0x1a, 0x49, 0x84, 0xa8, 0xf1, 0x01, 0xe2, 0xc2, 0xb2, 0x79, + 0x5d, 0x29, 0x55, 0x7d, 0x84, 0xd6, 0x1f, 0xe9, 0xa8, 0xca, 0x93, 0x7c, + 0x21, 0x23, 0xf0, 0x2b, 0xc5, 0x95, 0xbe, 0xda, 0x11, 0x43, 0x1c, 0x1a, + 0x2a, 0x7d, 0x45, 0xec, 0x57, 0x30, 0x63, 0x8b, 0xac, 0xcf, 0x5f, 0xe8, + 0x39, 0x7f, 0x8f, 0x38, 0x93, 0xc7, 0x29, 0x20, 0x81, 0x38, 0x91, 0x2b, + 0x84, 0x68, 0x03, 0xde, 0xa9, 0xd7, 0x04, 0x25, 0xf5, 0x2f, 0x07, 0xca, + 0x7b, 0x0b, 0xc6, 0x0b, 0x09, 0xea, 0x74, 0x1b, 0xc7, 0x37, 0xe6, 0x0b, + 0x7c, 0x27, 0x83, 0x3b, 0xb1, 0xc7, 0xf2, 0xa8, 0xd6, 0x50, 0xa7, 0xe5, + 0xab, 0xc1, 0xa9, 0x63, 0x35, 0x0c, 0xa3, 0x4c, 0x85, 0x21, 0x34, 0xa6, + 0x50, 0x25, 0x43, 0x89, 0xf0, 0x4e, 0xbe, 0xd2, 0x6d, 0x33, 0xf0, 0xbf, + 0xd2, 0x48, 0x77, 0xda, 0xb9, 0xfa, 0x71, 0x73, 0xb1, 0x2f, 0xdd, 0x6b, + 0x52, 0xcc, 0xfd, 0x5a, 0xc8, 0x40, 0xfe, 0x04, 0xe2, 0x38, 0x17, 0x81, + 0xa6, 0x26, 0xc8, 0x14, 0xb5, 0x8e, 0xe1, 0x49, 0xfe, 0xc6, 0x7a, 0x5d, + 0x97, 0x82, 0x22, 0xae, 0xcf, 0x32, 0x3e, 0x60, 0xad, 0x10, 0x07, 0x7f, + 0xfd, 0xaa, 0x62, 0x96, 0x03, 0x26, 0x19, 0x1d, 0x95, 0x13, 0xf5, 0xe4, + 0x4b, 0x22, 0xd3, 0x18, 0xd5, 0x1d, 0xec, 0xdc, 0x15, 0x98, 0xcf, 0xec, + 0x5c, 0xce, 0x77, 0xef, 0x12, 0x11, 0x4e, 0xd3, 0x35, 0x83, 0x7a, 0x9d, + 0x99, 0x9c, 0xa5, 0x72, 0xa3, 0x92, 0xb7, 0x35, 0xa1, 0xe1, 0x08, 0x08, + 0x80, 0x16, 0x87, 0xf6, 0x6b, 0x8e, 0xd5, 0xe1, 0x0d, 0x5e, 0x0e, 0x75, + 0x61, 0xa1, 0xcb, 0x07, 0xe4, 0x11, 0xcb, 0x1d, 0x2e, 0xaa, 0x5a, 0x55, + 0xa9, 0xdd, 0xd1, 0x46, 0xb6, 0x61, 0x56, 0x4c, 0xae, 0x0b, 0xdc, 0x4f, + 0xb1, 0x75, 0xe5, 0x08, 0xc4, 0x3f, 0x6a, 0x41, 0xe2, 0xfb, 0x31, 0xa3, + 0x8f, 0x6a, 0x67, 0x50, 0xab, 0x9b, 0x92, 0xc6, 0x9b, 0x19, 0xce, 0x97, + 0x41, 0x73, 0x3b, 0x77, 0xb4, 0x9d, 0xca, 0x86, 0xca, 0x6a, 0x89, 0x9d, + 0x39, 0x08, 0x7f, 0x28, 0x50, 0x03, 0x35, 0x8d, 0x5c, 0x8a, 0xdd, 0x8a, + 0x8a, 0x59, 0x87, 0xb8, 0xb0, 0xaa, 0xca, 0x46, 0x61, 0xda, 0xc7, 0x30, + 0x13, 0x83, 0xd8, 0x0b, 0x1e, 0xbd, 0x29, 0x09, 0x8b, 0xeb, 0x44, 0x7e, + 0x01, 0x59, 0xf0, 0x6d, 0x72, 0xa4, 0x14, 0xf0, 0xe2, 0x84, 0x10, 0x69, + 0x6d, 0x71, 0xc7, 0xd7, 0x17, 0x96, 0x71, 0x96, 0xa2, 0x21, 0x60, 0xd9, + 0xb3, 0x66, 0x15, 0x24, 0x0d, 0x75, 0x99, 0x8b, 0x0f, 0x11, 0x77, 0x33, + 0x2e, 0xa3, 0xeb, 0x3e, 0xb6, 0xf9, 0xb5, 0x33, 0xb9, 0x39, 0x49, 0x47, + 0x16, 0xa9, 0x35, 0xdf, 0xdc, 0xc8, 0x62, 0xec, 0x0a, 0x25, 0xda, 0x29, + 0x08, 0x83, 0x1a, 0x8d, 0xaf, 0x50, 0x30, 0xcf, 0xdd, 0x02, 0x62, 0xd0, + 0xcb, 0x5d, 0xec, 0xdb, 0x4b, 0x46, 0x8a, 0x3a, 0x75, 0x40, 0x1d, 0x78, + 0x78, 0xb9, 0x71, 0x4f, 0x4c, 0x4d, 0x0c, 0x07, 0x53, 0x8f, 0xe7, 0xda, + 0x6c, 0xa3, 0xfe, 0x9a, 0xc5, 0xfc, 0x82, 0x97, 0x87, 0xca, 0xfe, 0x28, + 0x33, 0x74, 0x0a, 0x62, 0x04, 0xb8, 0x5e, 0x95, 0x1e, 0x6a, 0xf2, 0xd5, + 0xdf, 0x44, 0x8f, 0x12, 0x50, 0x04, 0xd8, 0x5a, 0x21, 0x29, 0x00, 0xda, + 0xbe, 0x03, 0x61, 0x33, 0x6f, 0x62, 0x84, 0xa8, 0xe3, 0x19, 0x6b, 0x06, + 0xac, 0x45, 0xbf, 0xf7, 0x8a, 0x10, 0x75, 0x9d, 0x33, 0x30, 0x7c, 0x4f, + 0x68, 0x61, 0x64, 0x1a, 0x8a, 0x51, 0x5b, 0x2a, 0x56, 0x89, 0x2b, 0x46, + 0x40, 0xb0, 0xfd, 0x56, 0x22, 0x63, 0x7a, 0xdd, 0x9a, 0xf0, 0xbb, 0x1c, + 0x3f, 0x74, 0x2a, 0x78, 0x03, 0xd2, 0x63, 0x42, 0x36, 0xc6, 0x94, 0x31, + 0xc0, 0xa4, 0x1d, 0x99, 0xe6, 0x4a, 0x8b, 0x45, 0x46, 0x52, 0xf3, 0xfa, + 0x50, 0x7c, 0xe7, 0x42, 0x33, 0xca, 0x4f, 0x49, 0xde, 0xff, 0xe9, 0x1a, + 0x16, 0xa0, 0x8a, 0xae, 0xce, 0xc3, 0xea, 0x8d, 0xae, 0xfe, 0x6f, 0x09, + 0x81, 0xd2, 0xb4, 0x15, 0x8a, 0xc4, 0x3e, 0x6e, 0x10, 0xa8, 0xed, 0xa0, + 0xb1, 0x12, 0xcd, 0xbf, 0x42, 0xee, 0x0e, 0x5d, 0x55, 0x2b, 0x7e, 0x52, + 0x3f, 0x00, 0x6b, 0x04, 0xfa, 0xbb, 0x3c, 0xc9, 0x7d, 0x2f, 0xe9, 0x55, + 0xca, 0x1a, 0x64, 0x45, 0xa0, 0x17, 0xb6, 0xc4, 0x34, 0x26, 0x8d, 0x8e, + 0x55, 0x6d, 0xf2, 0x7a, 0x60, 0x01, 0xb5, 0x9b, 0x0e, 0xd6, 0x75, 0x57, + 0xb0, 0x67, 0x3a, 0x3c, 0xb0, 0x09, 0x59, 0xfc, 0x70, 0xed, 0x07, 0xe9, + 0xeb, 0x41, 0x3b, 0xb6, 0x2f, 0x05, 0xe7, 0xee, 0x6d, 0x28, 0x92, 0x15, + 0xd2, 0x67, 0xed, 0x39, 0xab, 0xd9, 0xd8, 0xd9, 0x3b, 0x0a, 0xf3, 0x75, + 0xc3, 0x08, 0xc3, 0xd0, 0x8c, 0x1d, 0xa8, 0x12, 0x50, 0x2f, 0x79, 0xb3, + 0x6a, 0xcb, 0x07, 0xf0, 0xb9, 0x7a, 0x6a, 0x0a, 0x12, 0x72, 0x77, 0xb7, + 0x2c, 0x63, 0x39, 0x4b, 0xf3, 0x50, 0x54, 0xb9, 0x60, 0x3c, 0xde, 0xba, + 0x40, 0xd9, 0x80, 0x9b, 0x8a, 0x51, 0x63, 0x7d, 0x12, 0xb4, 0xcc, 0x82, + 0x69, 0x61, 0xb9, 0x53, 0x94, 0x63, 0x58, 0x43, 0xb4, 0xbc, 0x3e, 0x72, + 0x16, 0x70, 0xac, 0x7e, 0x70, 0xfd, 0x6f, 0xdf, 0x9b, 0x75, 0x33, 0xe4, + 0x1a, 0x16, 0x74, 0xe2, 0xa1, 0x89, 0xdf, 0x13, 0x34, 0x41, 0xe7, 0xd0, + 0x97, 0x62, 0xe5, 0x8b, 0x64, 0x92, 0x87, 0x3c, 0xbc, 0xb3, 0x66, 0x1c, + 0x62, 0xc0, 0xed, 0x26, 0xd1, 0xc4, 0x15, 0x5c, 0x7d, 0xb5, 0xd2, 0x4b, + 0x08, 0xb8, 0x54, 0x76, 0xcd, 0x9b, 0xd4, 0x13, 0x9c, 0xfa, 0xe6, 0x89, + 0xdb, 0xf0, 0xb6, 0xdb, 0x7e, 0x1e, 0x0e, 0xa8, 0xff, 0x81, 0xa8, 0xe5, + 0x06, 0x70, 0x4d, 0xcf, 0x06, 0x8e, 0xbf, 0x64, 0xf5, 0x0a, 0x8c, 0x97, + 0xd3, 0xc1, 0x27, 0xcc, 0xa5, 0x7e, 0xbe, 0xad, 0xab, 0x37, 0xe2, 0x13, + 0x7e, 0x74, 0xc6, 0x19, 0x27, 0xec, 0xfd, 0x24, 0x89, 0x7b, 0xcd, 0x20, + 0x7b, 0x47, 0x54, 0x22, 0xad, 0x6b, 0x68, 0xf9, 0xa6, 0x14, 0x6f, 0xf3, + 0x20, 0xc7, 0xaa, 0x0b, 0x2b, 0xbb, 0x9c, 0x81, 0x29, 0xdb, 0x1d, 0xc0, + 0x3e, 0x09, 0x4c, 0xef, 0xe8, 0x8e, 0x78, 0x0d, 0xfb, 0xf4, 0x77, 0x5e, + 0x64, 0x64, 0xf7, 0x7b, 0x5d, 0x2b, 0xee, 0xe4, 0x9d, 0xc0, 0x74, 0x75, + 0x51, 0x10, 0xfe, 0xc2, 0xf4, 0x3f, 0x72, 0x8f, 0x86, 0x6b, 0x0b, 0x51, + 0x40, 0x7b, 0x6a, 0xee, 0xd4, 0x8d, 0xde, 0xa0, 0x84, 0x90, 0xca, 0x78, + 0x6c, 0xfc, 0x13, 0x95, 0x10, 0x5a, 0x13, 0xcf, 0x2a, 0x8d, 0x65, 0x4a, + 0xa7, 0x58, 0x37, 0x86, 0x06, 0x4c, 0x5a, 0xb4, 0xc3, 0xf4, 0x32, 0xd1, + 0xfb, 0x0e, 0x4f, 0x4f, 0x03, 0xf9, 0xe7, 0x58, 0x0f, 0x83, 0x9f, 0x42, + 0xf1, 0xb7, 0x2e, 0xff, 0xa5, 0xdc, 0x5d, 0x0c, 0x90, 0xb2, 0xc2, 0x1b, + 0xd8, 0xb9, 0x3a, 0xc7, 0xd1, 0xef, 0x16, 0x03, 0x35, 0x7d, 0xbf, 0x40, + 0xdc, 0xa8, 0xab, 0x55, 0x10, 0x63, 0xe2, 0xf9, 0xc0, 0x60, 0x0b, 0xf7, + 0x31, 0xbb, 0x54, 0xd2, 0x1b, 0xbd, 0xf1, 0x5a, 0x21, 0x0e, 0xb7, 0xe5, + 0xf2, 0xb8, 0xab, 0x02, 0x46, 0x83, 0x48, 0xec, 0xaa, 0xd1, 0x59, 0x92, + 0x53, 0x5b, 0x5e, 0xab, 0x1e, 0x7c, 0x48, 0x6b, 0x6e, 0x97, 0x96, 0x8e, + 0xae, 0x3e, 0xca, 0xd3, 0x7c, 0xe9, 0x74, 0x85, 0x73, 0x67, 0x33, 0x81, + 0xed, 0x89, 0x26, 0x27, 0xce, 0x2f, 0x2b, 0xec, 0x6d, 0x70, 0x93, 0x90, + 0xd6, 0xda, 0x01, 0x39, 0x4d, 0xf9, 0xb4, 0x2a, 0xc9, 0x50, 0x8c, 0x76, + 0xba, 0x57, 0x36, 0x9f, 0xff, 0x42, 0xdf, 0xfe, 0x02, 0x85, 0x96, 0x65, + 0x10, 0x10, 0xd5, 0x07, 0xad, 0x06, 0x52, 0x39, 0xe9, 0xe0, 0x0e, 0x8c, + 0x79, 0x7e, 0xcb, 0x6a, 0xba, 0x2b, 0x6d, 0xfe, 0x80, 0xb7, 0x24, 0xb5, + 0xf9, 0x82, 0x6f, 0x06, 0x42, 0xe4, 0xbc, 0xa0, 0x77, 0xa8, 0xa6, 0x61, + 0xce, 0x86, 0x59, 0x3c, 0xcf, 0x8c, 0x68, 0x5f, 0xe6, 0x90, 0x22, 0x4e, + 0x4a, 0x3f, 0x41, 0xd1, 0x51, 0x15, 0x67, 0x2f, 0xa4, 0x85, 0xc3, 0x62, + 0xd6, 0x41, 0x49, 0x8d, 0x65, 0x5a, 0x7c, 0xb1, 0xd6, 0x96, 0x71, 0x1d, + 0xa7, 0xf7, 0x7b, 0xa4, 0x14, 0xd5, 0x28, 0xb1, 0xbc, 0x86, 0x11, 0x99, + 0xbd, 0x05, 0x62, 0x83, 0x2b, 0xb8, 0x03, 0x2d, 0xb8, 0x85, 0x78, 0x6d, + 0xe6, 0xc6, 0x01, 0x70, 0xf3, 0x3d, 0xac, 0x20, 0xc2, 0x61, 0x89, 0x45, + 0xf4, 0x74, 0x4f, 0x6c, 0x6f, 0xe1, 0xb1, 0x0a, 0x2e, 0x24, 0xe0, 0x44, + 0x3b, 0xd6, 0x0b, 0x1f, 0x40, 0xd3, 0x97, 0x35, 0x62, 0x57, 0x25, 0xfe, + 0x20, 0xc1, 0x8e, 0xa6, 0xc0, 0x19, 0x2e, 0x9a, 0xf4, 0x7e, 0xd1, 0xee, + 0x9d, 0x23, 0xde, 0x3b, 0x83, 0x09, 0x8f, 0xe4, 0x0d, 0x36, 0xd2, 0xd1, + 0x79, 0x86, 0xfe, 0xc6, 0x83, 0xfb, 0x54, 0x11, 0xcf, 0xeb, 0x8b, 0x1a, + 0x5a, 0x61, 0xe9, 0x90, 0xfc, 0xf6, 0xb3, 0xbc, 0x8e, 0x32, 0xe3, 0xb1, + 0xf1, 0xa4, 0xbd, 0x2c, 0x3a, 0x86, 0xc0, 0x89, 0xc3, 0x8b, 0x3b, 0x12, + 0x66, 0xa1, 0xcc, 0xef, 0x53, 0xb6, 0x63, 0xe0, 0xf1, 0xd2, 0x8a, 0x2b, + 0x63, 0xf1, 0x1e, 0x1e, 0x2f, 0x86, 0xbf, 0x43, 0xe7, 0x54, 0x2d, 0x1e, + 0xba, 0x89, 0x1d, 0xd9, 0x78, 0xc8, 0xf5, 0x73, 0x28, 0x99, 0x33, 0xa9, + 0xb1, 0x82, 0xfe, 0x4c, 0xd8, 0xca, 0x07, 0x2a, 0x59, 0xc4, 0xba, 0x15, + 0xd0, 0xad, 0xad, 0x86, 0xf7, 0x73, 0x53, 0x07, 0xf2, 0x4e, 0xe0, 0x1d, + 0x17, 0x89, 0x66, 0x6a, 0x71, 0x23, 0xc2, 0x5f, 0x46, 0xb3, 0x8c, 0xdb, + 0x72, 0xb4, 0x3f, 0x86, 0xcd, 0x5a, 0x82, 0xb9, 0x7e, 0xc8, 0x91, 0x6a, + 0xbd, 0xcb, 0x0c, 0xc0, 0x3d, 0x17, 0x51, 0x10, 0x68, 0x07, 0xfb, 0xeb, + 0x21, 0xd1, 0x50, 0x3c, 0x3d, 0x23, 0xed, 0xae, 0xb2, 0x55, 0xf3, 0x0f, + 0x25, 0x2a, 0x8a, 0xe8, 0x3b, 0x5c, 0x02, 0xbd, 0x34, 0xdb, 0x15, 0xa3, + 0x4f, 0xdb, 0xaa, 0xc5, 0x1d, 0x0e, 0x60, 0xb2, 0xa4, 0x15, 0xe1, 0xbf, + 0x0e, 0x07, 0xcd, 0x24, 0x53, 0xc9, 0x02, 0x1b, 0xec, 0xfd, 0x13, 0xc7, + 0x37, 0x34, 0xf7, 0xf6, 0xbf, 0xbb, 0x41, 0x45, 0xb2, 0x7f, 0x53, 0x84, + 0x78, 0x73, 0xa9, 0x48, 0x97, 0x74, 0x01, 0xeb, 0x86, 0x80, 0xab, 0xac, + 0x4f, 0xdb, 0x1a, 0x5e, 0x8d, 0x1a, 0x94, 0xe6, 0xd1, 0xa8, 0xa5, 0x0e, + 0x4b, 0xf2, 0xcf, 0xdc, 0xf1, 0x98, 0xd8, 0x04, 0xb4, 0x3b, 0x05, 0x32, + 0x76, 0x75, 0x8c, 0x51, 0xe3, 0xb0, 0xa2, 0x0f, 0xff, 0xae, 0x94, 0xb3, + 0x07, 0x05, 0xa6, 0x6e, 0x5f, 0x58, 0x63, 0x96}, + // secret + {0x01, 0x78, 0xbd, 0xcd, 0x5b, 0x54, 0x12, 0xb1, 0xc0, 0x68, 0x84, + 0xad, 0x4c, 0xa3, 0xeb, 0x43, 0x60, 0x75, 0x66, 0x11, 0x4b, 0x59, + 0x9a, 0x22, 0x32, 0x3c, 0x50, 0x85, 0x78, 0xf1, 0xcc, 0xca}, + true}, + // tcID: 98 + {98, + params_ml_kem1024_test_mode, + // privateKey + {0x46, 0x59, 0x82, 0x4a, 0xa2, 0x2a, 0x4f, 0x34, 0x54, 0xba, 0xd0, 0x0a, + 0xdb, 0x48, 0xc8, 0xca, 0xb0, 0x62, 0xa1, 0x04, 0x70, 0xd8, 0x3a, 0x74, + 0xbd, 0x6a, 0x09, 0x44, 0x1b, 0x5c, 0xb1, 0xd3, 0xad, 0x14, 0x87, 0x65, + 0xed, 0x18, 0xaa, 0x20, 0x2c, 0xc5, 0x84, 0x19, 0x01, 0xb9, 0x29, 0x87, + 0x1e, 0x08, 0x5f, 0x3f, 0x0b, 0x4f, 0xbc, 0xa6, 0x49, 0x38, 0x41, 0x76, + 0xe9, 0x62, 0xc9, 0xcf, 0x40, 0x22, 0xda, 0x73, 0xa6, 0x6d, 0x25, 0xab, + 0xc2, 0x4c, 0xb5, 0xbb, 0x19, 0x60, 0x99, 0x54, 0x1f, 0x23, 0x85, 0x18, + 0x43, 0x29, 0x55, 0xd2, 0x80, 0x3e, 0x29, 0x27, 0x9c, 0x71, 0x08, 0xcd, + 0x2c, 0xb8, 0x78, 0x32, 0x38, 0x63, 0x68, 0xec, 0x9a, 0x8f, 0x07, 0xce, + 0xfd, 0xf2, 0xb2, 0x91, 0xa4, 0x9b, 0x16, 0x40, 0x55, 0xd7, 0x88, 0x40, + 0xef, 0x62, 0x56, 0xe1, 0xe6, 0xa8, 0xe4, 0xab, 0xb8, 0x7d, 0x71, 0x37, + 0xfa, 0x5a, 0x2a, 0x60, 0x82, 0xb5, 0x77, 0x3c, 0x2c, 0x33, 0x24, 0x1b, + 0x00, 0xdb, 0xcc, 0x6c, 0x60, 0x56, 0x1b, 0x3c, 0x66, 0xd3, 0xd5, 0xca, + 0x3f, 0xc6, 0x60, 0x44, 0xa5, 0xad, 0x63, 0x03, 0x30, 0x11, 0xfa, 0x72, + 0x04, 0x25, 0xa8, 0x74, 0xb8, 0x05, 0xb0, 0xe9, 0xa8, 0xef, 0xc6, 0xb0, + 0xf7, 0x01, 0x79, 0x09, 0x75, 0xa7, 0xad, 0xd8, 0xa3, 0xe7, 0x8c, 0x7f, + 0xfd, 0x87, 0x22, 0x74, 0xe1, 0xca, 0xad, 0x0a, 0x08, 0x7c, 0xdb, 0x74, + 0x2b, 0xd4, 0x40, 0x93, 0x1c, 0x5e, 0x43, 0xdc, 0x9b, 0x83, 0x4a, 0x6e, + 0xac, 0x3c, 0x00, 0xe9, 0x64, 0x15, 0xf0, 0x40, 0x7c, 0x7e, 0x75, 0xcc, + 0x9a, 0x07, 0x4f, 0xe0, 0x45, 0x17, 0xba, 0x85, 0xac, 0x69, 0x47, 0x71, + 0xd1, 0x45, 0x7c, 0x87, 0x75, 0x5d, 0xc6, 0x54, 0x1e, 0x05, 0xe3, 0x28, + 0xf3, 0xe3, 0x28, 0xea, 0x87, 0xbd, 0xea, 0x79, 0x85, 0x06, 0x10, 0x3a, + 0x4f, 0x68, 0xc0, 0x38, 0x82, 0x7e, 0x1a, 0x35, 0x70, 0x97, 0xb9, 0x33, + 0x0a, 0xf6, 0x8d, 0x39, 0xc1, 0x5f, 0xa6, 0x53, 0x29, 0x43, 0xf6, 0xa8, + 0xba, 0x3a, 0xbb, 0x33, 0x73, 0x8c, 0x31, 0xe0, 0xa9, 0x6b, 0xe3, 0xbb, + 0x35, 0x3b, 0xc9, 0xc9, 0x55, 0xa2, 0xe2, 0xb8, 0x96, 0x92, 0xf4, 0xc4, + 0xc1, 0xb5, 0x20, 0x84, 0x9c, 0xb7, 0x62, 0xf8, 0x02, 0x1a, 0x40, 0x8f, + 0xb6, 0xbb, 0xb9, 0xd1, 0x68, 0x3d, 0x76, 0x57, 0xaf, 0xba, 0xfb, 0x8d, + 0x0e, 0x18, 0x5b, 0x6b, 0xc0, 0x34, 0x31, 0xc6, 0xc5, 0x2b, 0xc6, 0x94, + 0x32, 0xfb, 0x34, 0x7b, 0xec, 0xc4, 0x89, 0x75, 0xa0, 0x15, 0xa0, 0x78, + 0xcc, 0x69, 0x1d, 0xed, 0x51, 0x6b, 0xd5, 0x90, 0x02, 0x26, 0xf2, 0xb7, + 0xcd, 0xe6, 0x72, 0x86, 0x08, 0x80, 0x8f, 0xdc, 0x0d, 0x86, 0xf0, 0x20, + 0x11, 0x79, 0x6e, 0x4a, 0x97, 0x3a, 0x0b, 0x57, 0xa3, 0xcf, 0xf2, 0x5a, + 0x8e, 0xac, 0x1c, 0xad, 0xba, 0x93, 0xca, 0x63, 0x97, 0xe0, 0x0a, 0xa5, + 0xc9, 0xe9, 0x79, 0xdc, 0x90, 0xc3, 0xb7, 0xf7, 0x29, 0xef, 0x9c, 0x89, + 0x4a, 0x47, 0x39, 0xff, 0x69, 0xbe, 0x65, 0xeb, 0x31, 0x3d, 0xb1, 0xc1, + 0x83, 0x4c, 0x09, 0x7f, 0x75, 0xb0, 0x85, 0xc1, 0x6c, 0x3a, 0xec, 0x8f, + 0xf9, 0x46, 0x96, 0x33, 0x12, 0xb8, 0x2d, 0x62, 0x92, 0xcf, 0xd6, 0x58, + 0xd5, 0x99, 0x41, 0x0f, 0x87, 0x1e, 0xdf, 0x52, 0x2f, 0xcf, 0x95, 0x2b, + 0x63, 0x43, 0xa7, 0xea, 0xb5, 0x2c, 0x59, 0xc0, 0xb1, 0xe7, 0x82, 0x2e, + 0x6a, 0xf6, 0x39, 0x94, 0xd3, 0x89, 0x67, 0x74, 0x61, 0x4e, 0x60, 0x91, + 0xb6, 0x13, 0x2d, 0x7f, 0x8a, 0x4f, 0x05, 0x61, 0x9a, 0x42, 0x13, 0x03, + 0x7f, 0x6b, 0xbd, 0x5c, 0xd4, 0x46, 0x65, 0x93, 0xa9, 0xbc, 0x77, 0x29, + 0x92, 0x90, 0x31, 0xb8, 0x0a, 0x89, 0x06, 0xf0, 0x31, 0xcb, 0x4c, 0x34, + 0x98, 0xb9, 0x32, 0x94, 0xf4, 0xb7, 0x69, 0xc6, 0x61, 0xd2, 0xb7, 0x33, + 0x05, 0x11, 0xca, 0x43, 0xe8, 0xa8, 0x7a, 0x81, 0x77, 0x81, 0x72, 0x9e, + 0x45, 0xac, 0x21, 0x9d, 0x41, 0x30, 0x6f, 0xe9, 0xb6, 0x3e, 0x28, 0x8d, + 0x72, 0x4b, 0x82, 0xb2, 0xa0, 0x7a, 0xdb, 0x35, 0x11, 0x08, 0xc1, 0x5f, + 0xf3, 0xfc, 0x67, 0xa9, 0x81, 0x94, 0x03, 0xda, 0x49, 0xf2, 0x96, 0x59, + 0x76, 0x5b, 0x6d, 0x33, 0xd1, 0x8d, 0x3f, 0x0a, 0x65, 0xcd, 0x5a, 0x4b, + 0x2c, 0xb5, 0x87, 0x36, 0x91, 0x4d, 0xd7, 0xb7, 0x4a, 0xbb, 0x85, 0xa8, + 0x52, 0xd1, 0xbf, 0x67, 0xa1, 0xb0, 0x3d, 0xfc, 0x2b, 0x5a, 0x73, 0x71, + 0x02, 0x49, 0x52, 0x6b, 0x58, 0x35, 0xea, 0x7c, 0xc9, 0xf1, 0x70, 0x59, + 0xb7, 0x61, 0x88, 0x6d, 0x82, 0xb8, 0x91, 0xb6, 0x58, 0x44, 0x67, 0x81, + 0x48, 0x67, 0x88, 0x76, 0xd8, 0xb9, 0xd7, 0x65, 0x25, 0x2e, 0x0a, 0x5e, + 0x8c, 0xb1, 0x8a, 0x4f, 0x91, 0x20, 0xf0, 0x19, 0x54, 0xfe, 0x52, 0x08, + 0x90, 0x5a, 0xab, 0xc7, 0xd1, 0x16, 0x33, 0x00, 0xb6, 0xb2, 0xf0, 0xbc, + 0xba, 0xd8, 0x1c, 0x69, 0x28, 0x08, 0xfd, 0x37, 0x93, 0xa2, 0x04, 0x7c, + 0x03, 0x30, 0x66, 0xfb, 0x55, 0xab, 0x92, 0x42, 0x45, 0x19, 0x3c, 0x68, + 0xf0, 0x10, 0x64, 0xef, 0x61, 0x0d, 0x7d, 0xa2, 0xce, 0x64, 0xf4, 0x74, + 0x98, 0x8b, 0x03, 0x7f, 0xd7, 0x9e, 0xae, 0xe8, 0x55, 0x4e, 0xea, 0xa0, + 0x77, 0x20, 0x9e, 0xc5, 0x18, 0x49, 0x00, 0x68, 0x86, 0x26, 0x45, 0x74, + 0xea, 0xb7, 0x1b, 0xcd, 0x93, 0xa2, 0xa7, 0x35, 0xb4, 0x4e, 0x46, 0x32, + 0xc0, 0xd4, 0x3f, 0x39, 0x14, 0x28, 0x10, 0xd1, 0x0c, 0xf5, 0x88, 0x12, + 0x43, 0x69, 0x64, 0xd5, 0xbb, 0x44, 0x87, 0x15, 0x7d, 0xe7, 0x03, 0xa5, + 0x61, 0x86, 0xc3, 0xbd, 0xe1, 0x2a, 0x5f, 0x07, 0x4c, 0x6d, 0x94, 0x7f, + 0xeb, 0x74, 0x04, 0x03, 0xc2, 0x7d, 0x8b, 0xe7, 0xa2, 0xaf, 0x09, 0x7f, + 0x55, 0x39, 0x47, 0x62, 0x88, 0x51, 0xe9, 0x09, 0x95, 0x7e, 0x42, 0x8a, + 0xb6, 0xe4, 0x3b, 0x5d, 0xe5, 0x35, 0xf8, 0x81, 0x7b, 0x23, 0x42, 0x44, + 0xc0, 0x93, 0x0e, 0x70, 0x05, 0x30, 0xbf, 0xb2, 0x82, 0x7c, 0x4c, 0x1d, + 0xd9, 0x57, 0x0d, 0x8d, 0xd8, 0x6a, 0x8c, 0xc2, 0x35, 0x2f, 0x97, 0xa0, + 0xe1, 0xaa, 0xc3, 0x53, 0xe7, 0x61, 0xcd, 0x72, 0x26, 0xd6, 0xf6, 0x2e, + 0xbf, 0xe9, 0x5e, 0xaf, 0x28, 0x0e, 0xa7, 0x7a, 0x23, 0x7e, 0x90, 0x63, + 0xca, 0x97, 0x18, 0xc5, 0x22, 0x7a, 0x9a, 0x09, 0x25, 0x87, 0xcc, 0xa1, + 0x09, 0x06, 0x26, 0x79, 0xf8, 0x4f, 0x89, 0x01, 0x64, 0xbe, 0x7b, 0x1d, + 0xf0, 0x41, 0x96, 0x96, 0x48, 0x27, 0x2b, 0x21, 0xc7, 0x6f, 0x78, 0xa0, + 0x2a, 0x76, 0x17, 0xf2, 0x2c, 0xb3, 0x89, 0xf9, 0x64, 0x0f, 0xa7, 0x5e, + 0x0c, 0x95, 0x74, 0x31, 0x69, 0x60, 0x81, 0xe0, 0xaf, 0xf3, 0xe1, 0xb7, + 0x1a, 0x10, 0x0f, 0xb6, 0x8c, 0x0e, 0x42, 0x17, 0xa7, 0x06, 0xba, 0x06, + 0xa1, 0xf5, 0x2c, 0x15, 0x03, 0xaa, 0x8d, 0x06, 0xa2, 0x8e, 0x67, 0xbe, + 0xe5, 0xca, 0x9f, 0x5d, 0xe5, 0xb1, 0xf4, 0xc2, 0xab, 0xbb, 0x18, 0xbc, + 0xf0, 0x36, 0x94, 0xc5, 0xa7, 0x08, 0x12, 0xf8, 0x09, 0x82, 0xb2, 0x8b, + 0x73, 0x36, 0xb0, 0x93, 0xc5, 0x6e, 0x3c, 0x04, 0x2e, 0x95, 0x51, 0xae, + 0x34, 0x98, 0x0e, 0xf8, 0xc7, 0x48, 0x9a, 0x54, 0x1d, 0xd6, 0xf6, 0xbf, + 0xbb, 0x0b, 0xa2, 0x54, 0x85, 0x46, 0x8a, 0xea, 0x70, 0xac, 0x37, 0x3e, + 0x3f, 0x80, 0xba, 0x88, 0x3a, 0x33, 0x46, 0x61, 0x4e, 0x6b, 0xb0, 0x0a, + 0x64, 0xb7, 0xcf, 0x0d, 0x9b, 0xb7, 0xc1, 0xb8, 0xbd, 0x18, 0xb8, 0x38, + 0x75, 0x76, 0x73, 0xca, 0xc9, 0x66, 0x3a, 0x88, 0xbc, 0xd3, 0xe4, 0xae, + 0xdd, 0x04, 0x94, 0x5d, 0xa0, 0x2a, 0xac, 0x35, 0x9e, 0x41, 0x29, 0xb4, + 0x26, 0x65, 0xa3, 0xc2, 0x84, 0xac, 0x94, 0xc7, 0x5f, 0x97, 0xd9, 0x32, + 0xe4, 0x42, 0x62, 0x99, 0x95, 0x66, 0x6d, 0x93, 0xb8, 0xc4, 0x3a, 0xba, + 0x34, 0xac, 0x42, 0x0f, 0x80, 0x35, 0xd5, 0x29, 0xc3, 0xff, 0x5b, 0x04, + 0xa3, 0x55, 0x1e, 0xa9, 0xbb, 0x75, 0x18, 0x40, 0x57, 0xf1, 0xd6, 0x57, + 0xa4, 0xa1, 0x81, 0x65, 0x54, 0x27, 0x54, 0x3b, 0x7d, 0xc6, 0x35, 0x46, + 0xc8, 0xb0, 0xcf, 0x1f, 0xf9, 0x05, 0x73, 0x36, 0xb8, 0x61, 0x03, 0x23, + 0x9b, 0xa9, 0x91, 0x10, 0x29, 0x68, 0xef, 0x84, 0x16, 0x32, 0x30, 0x6e, + 0xfd, 0x99, 0x4a, 0xdd, 0xf1, 0x03, 0xd8, 0x0a, 0x5f, 0xc3, 0x48, 0x81, + 0xaa, 0x54, 0xc2, 0x17, 0x46, 0x0b, 0x7a, 0x6b, 0xaa, 0x75, 0x38, 0x20, + 0xee, 0x8b, 0x39, 0xc6, 0x55, 0x3e, 0x88, 0x57, 0x51, 0x52, 0xa1, 0x03, + 0xb2, 0x63, 0x76, 0xc4, 0x9a, 0x81, 0x5f, 0xc1, 0x78, 0x13, 0xec, 0x0b, + 0xc8, 0x2a, 0x86, 0x66, 0x8b, 0x96, 0x5d, 0x64, 0x1c, 0x92, 0xe0, 0x22, + 0x92, 0xe4, 0x06, 0x5e, 0x24, 0x77, 0xd2, 0x92, 0x79, 0x17, 0xa1, 0x97, + 0x06, 0x3b, 0x9f, 0x27, 0xb0, 0xb9, 0x96, 0xd9, 0x0a, 0xe7, 0x53, 0x14, + 0xdb, 0xea, 0xc9, 0xdb, 0xab, 0xa7, 0x1a, 0x17, 0x13, 0xd6, 0x16, 0xbd, + 0xa8, 0x31, 0x89, 0x5d, 0x8a, 0x4b, 0xa1, 0x87, 0xc0, 0x39, 0x0a, 0x97, + 0x9c, 0x1a, 0x7a, 0xca, 0xb2, 0x30, 0x61, 0xb7, 0xa0, 0x21, 0x92, 0xc2, + 0xdb, 0x37, 0x20, 0x62, 0xa4, 0x2b, 0xd9, 0xbb, 0x10, 0x89, 0x85, 0x71, + 0xf1, 0x83, 0x11, 0x9d, 0x0c, 0x4e, 0x72, 0x22, 0x7d, 0x22, 0x84, 0xb4, + 0x53, 0x90, 0xa5, 0x16, 0xa2, 0x35, 0x02, 0x37, 0x45, 0x76, 0xc9, 0x06, + 0xd1, 0x35, 0x09, 0xdc, 0x20, 0xae, 0xbe, 0xe8, 0x8e, 0xde, 0x13, 0x60, + 0x3b, 0xb0, 0x40, 0x4c, 0x52, 0x54, 0x96, 0x67, 0xc0, 0xca, 0x9b, 0xca, + 0x08, 0x48, 0x37, 0x85, 0x0b, 0xa4, 0xa2, 0xf9, 0x3b, 0x18, 0x30, 0x17, + 0xe0, 0x19, 0x2b, 0x76, 0xb1, 0x48, 0x42, 0x64, 0x4f, 0xc8, 0x91, 0x27, + 0x93, 0x49, 0x22, 0x4f, 0xc9, 0xc6, 0x0f, 0x3c, 0x05, 0x95, 0xa9, 0x3f, + 0xd0, 0x02, 0x76, 0x72, 0x44, 0x93, 0x68, 0x4a, 0x65, 0x0f, 0xc0, 0x0a, + 0x9e, 0x02, 0x9c, 0x2c, 0xb8, 0x90, 0x0d, 0xcc, 0x36, 0x3f, 0x49, 0x5a, + 0xf6, 0xd5, 0xa5, 0xe0, 0x58, 0xcb, 0x52, 0x28, 0x23, 0xd9, 0x11, 0x3a, + 0x68, 0x43, 0x39, 0x19, 0xc5, 0xab, 0xee, 0x89, 0x6d, 0xd0, 0x11, 0x09, + 0x57, 0xd7, 0xcb, 0x64, 0x85, 0x8a, 0xa2, 0xc7, 0x6e, 0x4c, 0xd4, 0x78, + 0x61, 0xc2, 0x1e, 0xe6, 0x5a, 0xaa, 0x38, 0xac, 0x7b, 0x7b, 0xa2, 0x62, + 0xea, 0xab, 0x2a, 0x43, 0x11, 0x93, 0x5a, 0xfa, 0x35, 0xdc, 0x31, 0x69, + 0x6d, 0x94, 0x89, 0x64, 0xb5, 0x96, 0xae, 0x12, 0x35, 0x60, 0x23, 0x83, + 0x5c, 0x46, 0x43, 0xf1, 0x58, 0x12, 0x7b, 0xd3, 0x21, 0xe1, 0x8b, 0x08, + 0x45, 0x58, 0xa6, 0x07, 0xca, 0xab, 0xa5, 0x2a, 0x95, 0x2e, 0xdb, 0x81, + 0x7c, 0x17, 0x6b, 0xf1, 0xa4, 0x47, 0x3e, 0x25, 0x58, 0xe2, 0x3a, 0x5b, + 0x7d, 0xb8, 0x78, 0x1d, 0xe0, 0x64, 0xd6, 0xe3, 0xbf, 0x65, 0x08, 0x8b, + 0xa8, 0xb2, 0x0b, 0xdb, 0x0b, 0x62, 0x9d, 0xca, 0x66, 0x58, 0x30, 0x9c, + 0x49, 0x23, 0x39, 0x8a, 0x8c, 0x82, 0xd7, 0x3a, 0x9f, 0xda, 0x7c, 0x63, + 0x06, 0x72, 0x5a, 0xc3, 0x58, 0x43, 0x3f, 0xc9, 0x5a, 0x12, 0x69, 0xaa, + 0x92, 0x47, 0x16, 0x95, 0x04, 0xcf, 0xf4, 0x62, 0xc0, 0x17, 0x71, 0xb4, + 0x05, 0x83, 0xcf, 0xfc, 0x91, 0x16, 0x2a, 0xf4, 0x06, 0x2f, 0xf7, 0x0b, + 0x95, 0xe2, 0xc6, 0x6e, 0xe3, 0x73, 0x19, 0x10, 0x51, 0x21, 0x5b, 0x9a, + 0x29, 0x22, 0x21, 0x19, 0x38, 0x5e, 0xde, 0x2c, 0x51, 0x4e, 0x01, 0x8a, + 0x52, 0xd8, 0x47, 0xe0, 0xe6, 0x16, 0x75, 0x2a, 0x57, 0x17, 0xf9, 0xaf, + 0x8f, 0xd6, 0xc5, 0xa4, 0x00, 0x1f, 0xf2, 0x14, 0x97, 0xee, 0x76, 0x5e, + 0xc0, 0xd0, 0x40, 0xa1, 0xd1, 0x6c, 0xe9, 0xec, 0x55, 0x9d, 0xb5, 0x38, + 0x6c, 0x5c, 0x6b, 0x77, 0xb6, 0x2a, 0x34, 0x1b, 0x53, 0x2f, 0xd1, 0x3a, + 0x7a, 0xd9, 0x60, 0xd8, 0x0b, 0x01, 0xfc, 0x27, 0x51, 0xb0, 0x39, 0x8b, + 0xe7, 0x14, 0x7d, 0x68, 0x8b, 0x77, 0x32, 0x10, 0x78, 0x71, 0xe8, 0xc7, + 0x1e, 0xa1, 0xb8, 0xe0, 0xac, 0xc8, 0xb9, 0x36, 0x23, 0xb9, 0xe3, 0x84, + 0x8b, 0xf8, 0x11, 0xfd, 0x25, 0xb1, 0xab, 0x90, 0x20, 0x48, 0x19, 0x1b, + 0xb5, 0x16, 0xcc, 0xe4, 0x56, 0x4c, 0xb1, 0x71, 0x5c, 0x1d, 0x1b, 0xa7, + 0xe3, 0xa6, 0xca, 0x81, 0x53, 0x95, 0x1c, 0x66, 0x3b, 0x87, 0x72, 0xca, + 0x30, 0x58, 0x53, 0x59, 0x58, 0x75, 0x84, 0x61, 0xaf, 0x57, 0x80, 0x56, + 0x04, 0xe4, 0x91, 0x14, 0xb2, 0x75, 0x1e, 0xa1, 0x37, 0x60, 0xe9, 0x59, + 0x85, 0x00, 0x3a, 0xd0, 0x6c, 0x86, 0x71, 0x0b, 0x4e, 0x7a, 0x23, 0x1d, + 0x67, 0x13, 0xca, 0xcd, 0x75, 0x30, 0x90, 0x77, 0xc4, 0xb9, 0x2b, 0x28, + 0x8c, 0x10, 0x97, 0x80, 0xf2, 0x76, 0x63, 0xb8, 0x38, 0x95, 0x94, 0xaa, + 0x84, 0xc0, 0x14, 0xd5, 0x4a, 0xa1, 0x69, 0x2c, 0x70, 0xbe, 0xa5, 0xc3, + 0x66, 0x85, 0xb6, 0xc6, 0x6a, 0x7d, 0x11, 0xfb, 0x0b, 0x94, 0xdb, 0xab, + 0xb7, 0x1c, 0x1c, 0x80, 0xc9, 0x5b, 0xc9, 0x27, 0x7a, 0xd0, 0x87, 0x13, + 0x54, 0x12, 0x3c, 0x0a, 0x23, 0x1d, 0x25, 0x5a, 0xaf, 0xe4, 0x3b, 0x2e, + 0x10, 0xb9, 0x2f, 0xbb, 0x99, 0x39, 0x0d, 0x00, 0xae, 0x3f, 0xa6, 0x8b, + 0xd9, 0x38, 0x95, 0x4d, 0x78, 0xbe, 0xc3, 0xc0, 0x8a, 0x31, 0xa1, 0xa4, + 0x7c, 0x03, 0xbe, 0x2c, 0x07, 0x47, 0xf4, 0x65, 0x8f, 0xde, 0x42, 0x99, + 0xa5, 0x88, 0x77, 0x27, 0x1a, 0x05, 0x32, 0xc4, 0x6d, 0xf2, 0xdb, 0xc1, + 0x8c, 0x65, 0x5f, 0x23, 0x04, 0x1b, 0xa8, 0x20, 0xaa, 0x2b, 0xf3, 0x7e, + 0xee, 0x30, 0x4a, 0x72, 0xa5, 0x87, 0xd1, 0x5a, 0x1b, 0x26, 0xfa, 0xbc, + 0xe1, 0x64, 0xb7, 0x70, 0x0c, 0x09, 0x91, 0x09, 0x02, 0xa8, 0x75, 0x16, + 0xa4, 0x10, 0x54, 0xe2, 0x4a, 0xa3, 0x06, 0x23, 0x20, 0x6f, 0xbb, 0xcd, + 0xd5, 0x76, 0x12, 0xb7, 0x99, 0xb3, 0xda, 0xd3, 0x7d, 0x7d, 0xbb, 0x4a, + 0x8c, 0x43, 0xca, 0xd3, 0xb0, 0xc3, 0x84, 0x29, 0x80, 0xc2, 0x55, 0xc0, + 0xc0, 0x58, 0x2d, 0x68, 0x50, 0x67, 0xba, 0x83, 0x7b, 0x9c, 0x2b, 0x09, + 0x97, 0xa9, 0x8b, 0x57, 0xb9, 0xaf, 0x21, 0x21, 0x39, 0xdc, 0x40, 0x47, + 0xa5, 0x72, 0x48, 0x4f, 0xc8, 0x10, 0x66, 0x69, 0x03, 0x6d, 0xb9, 0x95, + 0x1e, 0x46, 0x0a, 0x42, 0xa5, 0x81, 0xfc, 0xbb, 0x09, 0x9f, 0x01, 0x57, + 0x05, 0x20, 0x3c, 0x8e, 0x63, 0x69, 0x65, 0xea, 0x24, 0xbc, 0xe9, 0x02, + 0x70, 0x6c, 0x31, 0x08, 0xd7, 0xb8, 0x6a, 0x41, 0x0a, 0x8d, 0x80, 0x85, + 0x44, 0xdb, 0x34, 0xe6, 0x6a, 0x64, 0x17, 0x01, 0x7c, 0xa4, 0x16, 0x07, + 0xcc, 0x93, 0x8f, 0x4d, 0xf2, 0x7e, 0x62, 0x1c, 0x87, 0x16, 0xf8, 0x34, + 0x75, 0x3b, 0x95, 0x9f, 0xac, 0x7d, 0x83, 0xc7, 0x6c, 0xd8, 0x0c, 0x16, + 0x7a, 0xac, 0xa2, 0xc0, 0x0b, 0x79, 0x4c, 0x41, 0x6d, 0x4a, 0x00, 0x8d, + 0xec, 0xc8, 0x41, 0x63, 0x52, 0x2d, 0xdc, 0xc2, 0x2f, 0xe5, 0xf5, 0x19, + 0x48, 0x5a, 0xc5, 0xb2, 0x38, 0x91, 0x49, 0xa6, 0x94, 0xc8, 0x6b, 0x08, + 0xab, 0xcb, 0x07, 0x1b, 0xf5, 0x0c, 0x9c, 0x93, 0xbb, 0xe7, 0xfc, 0x56, + 0x5d, 0x35, 0x91, 0x97, 0x14, 0x33, 0x6b, 0x41, 0x3f, 0x08, 0x00, 0x4b, + 0xcc, 0xaa, 0x4e, 0x39, 0x0c, 0x50, 0x55, 0x91, 0x42, 0xfe, 0x35, 0xb6, + 0x5d, 0x56, 0x73, 0x8b, 0x00, 0x3e, 0x38, 0xe5, 0x97, 0x12, 0xa1, 0x93, + 0x16, 0x5c, 0x10, 0xf0, 0xb9, 0x9c, 0x80, 0xc7, 0xbc, 0xda, 0xb7, 0x10, + 0x2d, 0xf6, 0x80, 0x85, 0xb5, 0x46, 0x58, 0x18, 0x52, 0xd4, 0x26, 0x83, + 0xd9, 0xd0, 0x70, 0xac, 0x72, 0x67, 0x2c, 0xea, 0x16, 0xcd, 0xe5, 0xc1, + 0x23, 0x91, 0x36, 0xd4, 0x4c, 0xc1, 0xbd, 0xc9, 0x2a, 0x91, 0x09, 0x8c, + 0xac, 0x6c, 0x4b, 0x66, 0xb8, 0x75, 0x46, 0xb7, 0x1c, 0xa0, 0xb8, 0x82, + 0xa1, 0x02, 0xcb, 0x50, 0xe0, 0xa0, 0x53, 0x0c, 0x47, 0x32, 0x22, 0x85, + 0x08, 0x87, 0x5d, 0xa3, 0x86, 0x88, 0x58, 0x53, 0x57, 0xac, 0xfa, 0x74, + 0x56, 0x6c, 0x48, 0x64, 0x19, 0x48, 0x20, 0x00, 0x48, 0xb6, 0xfb, 0x59, + 0x06, 0x4b, 0x62, 0x0a, 0x07, 0x54, 0xbc, 0x29, 0x01, 0xb4, 0xe8, 0x9b, + 0xd4, 0x5c, 0x47, 0xe2, 0x4b, 0xc9, 0xcd, 0xc7, 0xb8, 0x13, 0x75, 0x32, + 0x4e, 0xa2, 0x84, 0x29, 0xa3, 0xc2, 0xf2, 0x73, 0x61, 0x1a, 0x2b, 0xc2, + 0xa6, 0x0b, 0x77, 0x3b, 0xc2, 0x1a, 0xd2, 0x35, 0x3f, 0x7d, 0xf8, 0x04, + 0xff, 0xf0, 0x62, 0xfc, 0x42, 0x6e, 0x60, 0x4a, 0x89, 0x45, 0x32, 0xa0, + 0x51, 0xb1, 0x3d, 0x97, 0x12, 0x0d, 0xcb, 0xaa, 0x9f, 0x97, 0x58, 0x8f, + 0x2f, 0x96, 0x07, 0x56, 0x14, 0xbf, 0xb6, 0xc7, 0x8d, 0x43, 0x61, 0x0a, + 0x28, 0x04, 0x4c, 0xb4, 0x99, 0x69, 0xce, 0x2a, 0x92, 0x3d, 0x2b, 0x68, + 0x45, 0x74, 0x8e, 0xeb, 0x8b, 0x7e, 0x08, 0x7c, 0xcc, 0x9a, 0xeb, 0x16, + 0xa4, 0xf7, 0x23, 0xa4, 0xc5, 0x92, 0x47, 0x87, 0xac, 0x72, 0x12, 0xc5, + 0x0b, 0x48, 0x8c, 0xa9, 0x9b, 0x99, 0xd5, 0xf9, 0x0c, 0x26, 0x03, 0x07, + 0x37, 0x37, 0xa6, 0xa6, 0x8b, 0x11, 0x1d, 0x54, 0x8c, 0x66, 0xec, 0x62, + 0xf7, 0x91, 0x34, 0xd1, 0x7c, 0x3d, 0x3f, 0x8b, 0xac, 0xb1, 0xaa, 0x22, + 0xfb, 0x3c, 0x95, 0x15, 0xe4, 0x23, 0xa3, 0x50, 0xcc, 0x32, 0xac, 0xa6, + 0xc2, 0x9c, 0xc6, 0x21, 0x48, 0x6c, 0xa1, 0x99, 0x2d, 0x32, 0x73, 0x59, + 0x62, 0xc9, 0x81, 0x9b, 0xf2, 0x04, 0x59, 0x4a, 0xc5, 0xac, 0x92, 0x47, + 0x6c, 0x41, 0x8e, 0x31, 0x21, 0xa1, 0x87, 0x77, 0x10, 0x20, 0x21, 0x95, + 0x51, 0xfa, 0x1b, 0xf8, 0xa9, 0xbf, 0x53, 0x73, 0x28, 0x69, 0x99, 0xa7, + 0xf7, 0x01, 0x83, 0x5c, 0x19, 0xcb, 0x41, 0x19, 0xa8, 0xb6, 0xaa, 0x7c, + 0xc2, 0x32, 0x39, 0x67, 0xe9, 0x07, 0x21, 0x65, 0x3a, 0xa9, 0xd8, 0x62, + 0x03, 0x78, 0xc1, 0xbc, 0x1a, 0xa2, 0x05, 0xb1, 0x3b, 0xd2, 0x98, 0xaf, + 0x5c, 0x40, 0x6e, 0xcf, 0xa8, 0x06, 0x1a, 0x94, 0x93, 0xfd, 0xeb, 0x69, + 0xa3, 0x71, 0x41, 0x96, 0xdb, 0x12, 0x62, 0x77, 0xaa, 0x9b, 0xe1, 0x10, + 0x77, 0xe9, 0x6c, 0xe1, 0x96, 0xab, 0x2c, 0x51, 0x20, 0x2c, 0xc6, 0x6c, + 0x20, 0xf5, 0xc3, 0x54, 0xa1, 0xc9, 0x5b, 0x46, 0x72, 0x6a, 0x6b, 0x2f, + 0xe3, 0x17, 0x02, 0x63, 0x32, 0x00, 0x49, 0x9c, 0x9a, 0xb7, 0x79, 0x09, + 0x0b, 0x8a, 0x6e, 0x8d, 0x9b, 0x6b, 0x1a, 0x94, 0x52, 0xe9, 0x4a, 0x69, + 0x8f, 0xb3, 0x96, 0xd8, 0x79, 0x78, 0x08, 0x3c, 0x86, 0x7d, 0x0b, 0x79, + 0xb9, 0x01, 0x6a, 0xca, 0x49, 0x06, 0xec, 0x10, 0x9c, 0x1a, 0x29, 0x1a, + 0xaf, 0xca, 0x8f, 0xa7, 0x7c, 0x24, 0xe3, 0xa2, 0x54, 0x08, 0x3a, 0xa4, + 0xce, 0xa3, 0xa3, 0x70, 0xa9, 0xb0, 0x1d, 0x3a, 0x10, 0xd4, 0x3b, 0x48, + 0x7e, 0x84, 0x96, 0x07, 0x58, 0x40, 0xe9, 0x90, 0x1e, 0x8a, 0x08, 0x45, + 0xe9, 0xb5, 0x50, 0xaa, 0xd7, 0xc2, 0xf7, 0xa3, 0x5d, 0x56, 0xd1, 0x9f, + 0xb9, 0x23, 0xb1, 0x30, 0x57, 0x4e, 0xa2, 0x5b, 0x25, 0x63, 0x70, 0x34, + 0x1d, 0x18, 0x87, 0x2d, 0x15, 0x88, 0x58, 0x14, 0x8b, 0xc0, 0xec, 0x39, + 0x00, 0xdd, 0x3d, 0xfc, 0x17, 0x70, 0xd2, 0xd4, 0xa7, 0x90, 0x30, 0x7b, + 0x2a, 0xd4, 0xc6, 0x0b, 0x45, 0x91, 0x9b, 0xac, 0x9d, 0xcc, 0x91, 0x3c, + 0x66, 0xa2, 0x77, 0xad, 0xec, 0x19, 0x19, 0x7a, 0x5e, 0xb0, 0xfc, 0xa9, + 0x40, 0x76, 0x51, 0x5a, 0x19, 0x93, 0x96, 0x13, 0x22, 0xa8, 0xd8, 0x2e, + 0x86, 0xb2, 0x86, 0xf4, 0x01, 0x3f, 0x54, 0x1b, 0x15, 0xaf, 0xe8, 0xba, + 0x95, 0x38, 0xb3, 0xf6, 0xf2, 0x57, 0x99, 0x0b, 0xb2, 0xc3, 0x79, 0x01, + 0xf4, 0xa9, 0x61, 0xf5, 0x31, 0x91, 0xb0, 0xbc, 0x4d, 0xa6, 0x84, 0xc5, + 0x85, 0x33, 0x8d, 0x2e, 0xb0, 0xb0, 0x5a, 0x37, 0x3b, 0xd2, 0xbb, 0x97, + 0xf7, 0xb4, 0x06, 0x12, 0x95, 0xc6, 0x39, 0xda, 0x13, 0xe8, 0x30, 0xba, + 0xf2, 0x22, 0x66, 0xc9, 0x32, 0x6d, 0xef, 0xb4, 0xba, 0x73, 0x2a, 0x39, + 0x25, 0x89, 0x59, 0x3a, 0x31, 0xb5, 0x10, 0x6c, 0x43, 0x1c, 0xf5, 0xa9, + 0x85, 0xdc, 0x92, 0x7e, 0x55, 0x67, 0x04, 0x90, 0x82, 0xb6, 0x24, 0x30, + 0x54, 0x18, 0x29, 0xc3, 0x7c, 0x9a, 0x1e, 0xd9, 0x68, 0xe4, 0x22, 0x32, + 0xef, 0x50, 0x44, 0x1b, 0x34, 0x80, 0xc3, 0x73, 0x7c, 0xb0, 0xb5, 0x7f, + 0x2a, 0x7a, 0x5a, 0x48, 0x68, 0x7f, 0x73, 0xd1, 0x48, 0xfb, 0x89, 0xc7, + 0xcd, 0xc9, 0x54, 0x24, 0xcb, 0xb4, 0x2a, 0x18, 0x6f, 0xef, 0xaa, 0x51, + 0xc2, 0x0c, 0x84, 0x04, 0x93, 0x36, 0x0e, 0xf0, 0x50, 0x70, 0x45, 0x43, + 0x46, 0x78, 0x4e, 0xef, 0x82, 0x6c, 0x34, 0xf1, 0x5f, 0xca, 0xf9, 0xb5, + 0x0f, 0xb4, 0x7e, 0xd0, 0x46, 0x76, 0x66, 0xa4, 0xbe, 0xff, 0x46, 0x52, + 0x83, 0x45, 0x4a, 0x24, 0x24, 0x5a, 0xbf, 0x87, 0x0b, 0xca, 0xa8, 0x9d, + 0x70, 0xd5, 0x13, 0x34, 0xa2, 0x94, 0x2f, 0x77, 0x49, 0x08, 0xdb, 0xc6, + 0x16, 0x93, 0x07, 0x0d, 0x58, 0xa6, 0x99, 0x7b, 0x6a, 0x1f, 0x6b, 0x2a, + 0xd1, 0xd2, 0x93, 0x1c, 0x27, 0xc7, 0x43, 0x04, 0x32, 0x14, 0x57, 0xba, + 0x36, 0x66, 0x15, 0x3b, 0x16, 0x92, 0x07, 0xb8, 0x97, 0x86, 0xe4, 0x0c, + 0x2e, 0x05, 0x0b, 0x56, 0x0a, 0x37, 0x50, 0x31, 0x41, 0xf6, 0x74, 0x20, + 0xa5, 0xb0, 0x5c, 0x88, 0xb5, 0x4f, 0x4b, 0xd2, 0x08, 0x19, 0x20, 0xc3, + 0x14, 0x76, 0x1f, 0xbb, 0x60, 0xc8, 0x5d, 0x14, 0x43, 0xe9, 0x30, 0x89, + 0xdc, 0xa2, 0x60, 0x07, 0xd3, 0x40, 0x2f, 0xa9, 0x18, 0xd5, 0x22, 0xc8, + 0x58, 0x73, 0xc8, 0x0f, 0x1a, 0x04, 0x1a, 0xa6, 0x3c, 0x0b, 0xc6, 0x5c, + 0x6f, 0x86, 0x17, 0x8c, 0x61, 0xc5, 0xc7, 0x32, 0x22, 0x59, 0x80, 0x37, + 0x0b, 0xe5, 0x1c, 0x7f, 0x06, 0x5f, 0xb4, 0xc4, 0x5e, 0x3c, 0x73, 0xbe, + 0x30, 0xf4, 0xa3, 0xf3, 0x1b, 0xa6, 0x30, 0x39, 0x57, 0x7e, 0x77, 0x5c, + 0xc0, 0xe2, 0xb6, 0x2e, 0x8a, 0x13, 0x31, 0x81, 0x8b, 0xb5, 0x94, 0x3a, + 0x63, 0x76, 0x97, 0xad, 0xb5, 0x75, 0x1e, 0x16, 0x89, 0x2d, 0xf3, 0x27, + 0x2a, 0x63, 0x80, 0x51, 0xe0, 0x09, 0xcf, 0xc0, 0x83, 0x16, 0x32, 0xcc, + 0x38, 0x8d, 0x5c, 0x54, 0xcb, 0xa8, 0xfe, 0xb8, 0x60, 0x7b, 0xee, 0x47, + 0xd5, 0x2b, 0x88, 0x10, 0xea, 0x13, 0xb3, 0x78, 0x16, 0x0b, 0xe4, 0xdb, + 0x04, 0xa5, 0x9b, 0x79, 0x4c, 0xa9, 0x18, 0x46, 0x0f, 0x82, 0x88, 0x96, + 0xb3, 0xab, 0xb1, 0x56, 0xc2, 0x6b, 0xc2, 0xe3, 0x7f, 0x4c, 0x2d, 0xa1, + 0x60, 0x8c, 0x54, 0x97, 0x12, 0x06, 0x89, 0x26, 0x40, 0xa8, 0xb7, 0xfe, + 0x27, 0x8d, 0x8a, 0x82, 0xb6, 0x53, 0x51, 0xeb, 0x0f, 0xd5, 0xe4, 0xba, + 0x73, 0x78, 0xef, 0x3c, 0x5d, 0x2a, 0x5d, 0xd4, 0x08, 0x48, 0x24, 0xd6, + 0xc3, 0x83, 0xd2, 0x37, 0x7d, 0x36, 0x48, 0x46, 0x24, 0x29, 0x8a, 0x81}, + // ciphertext + {0x5c, 0xce, 0x74, 0x10, 0xf6, 0x87, 0x38, 0xec, 0xed, 0x68, 0xac, 0x00, + 0xe2, 0xff, 0x78, 0x96, 0x3e, 0xe0, 0x63, 0x25, 0xd7, 0xe0, 0x30, 0x59, + 0x05, 0x84, 0xa3, 0x0f, 0x9b, 0x74, 0x0a, 0x2f, 0x7a, 0x5c, 0xef, 0x91, + 0x9f, 0x38, 0x4d, 0x18, 0x01, 0x82, 0x7e, 0x67, 0x7c, 0x2c, 0x15, 0x50, + 0x89, 0xed, 0xdd, 0xfe, 0x74, 0x47, 0x1e, 0x31, 0x9b, 0x7a, 0x96, 0xc7, + 0x4a, 0x75, 0x13, 0x68, 0x35, 0x4a, 0x3c, 0x5c, 0x62, 0xd5, 0x17, 0xce, + 0x7c, 0x20, 0x41, 0x5e, 0x6e, 0x2a, 0x91, 0x21, 0x27, 0x7e, 0x03, 0x94, + 0x32, 0xb9, 0x92, 0x44, 0xd9, 0x52, 0x83, 0xb9, 0x22, 0x2a, 0xae, 0x6f, + 0x67, 0x5b, 0x1f, 0xea, 0x9e, 0x9a, 0xf7, 0x1d, 0x60, 0xc8, 0x2b, 0x8a, + 0xb7, 0x46, 0x28, 0xc2, 0xc0, 0xa6, 0x26, 0xe8, 0xfb, 0x7f, 0xee, 0xb3, + 0xa6, 0x0b, 0x97, 0xd8, 0x5e, 0xa7, 0xbb, 0xe7, 0x7b, 0x3f, 0xcc, 0x85, + 0xff, 0xdc, 0xa8, 0xc4, 0x50, 0x1b, 0xf7, 0xb9, 0xaf, 0x17, 0x97, 0x16, + 0xec, 0x48, 0x30, 0x66, 0xfa, 0x92, 0x53, 0x0b, 0x63, 0xbc, 0x0f, 0xa3, + 0xc2, 0x96, 0x99, 0x79, 0x67, 0xfa, 0x1b, 0x3d, 0x98, 0x66, 0x7a, 0x35, + 0x04, 0x47, 0xd5, 0x9b, 0x8f, 0xad, 0x4e, 0xbd, 0xc2, 0x4f, 0x80, 0xc2, + 0x5a, 0x52, 0x50, 0x22, 0xe1, 0xcf, 0x75, 0xf4, 0x97, 0xbf, 0xd0, 0x88, + 0x97, 0x11, 0xac, 0xae, 0x5b, 0x5f, 0xba, 0x78, 0xff, 0x0a, 0x1c, 0xbb, + 0xd4, 0x7a, 0x35, 0x2a, 0x87, 0x09, 0x08, 0x5a, 0xe4, 0xed, 0x8d, 0x06, + 0xd0, 0x5a, 0x93, 0x88, 0xfd, 0xb1, 0x06, 0xdb, 0x6d, 0xcd, 0x93, 0xbf, + 0x21, 0x40, 0x77, 0x71, 0xa6, 0x6b, 0x26, 0xc1, 0xfe, 0xa1, 0xed, 0x2d, + 0x15, 0xae, 0x34, 0x5f, 0x4d, 0x81, 0x31, 0xe7, 0xf2, 0x52, 0x3a, 0xd9, + 0x5d, 0xa9, 0x1d, 0x6a, 0x14, 0x3a, 0xaa, 0x08, 0xed, 0x15, 0x57, 0x7d, + 0xef, 0x0f, 0x27, 0x4a, 0xe8, 0x53, 0xb4, 0x1a, 0xb6, 0x36, 0x50, 0xe7, + 0xe7, 0x33, 0xd9, 0xd7, 0xe9, 0xb3, 0x64, 0x3f, 0xe4, 0xcd, 0xbe, 0x60, + 0x7e, 0x5a, 0x7d, 0xfe, 0x75, 0xae, 0x57, 0xbe, 0x8c, 0x91, 0x93, 0x2f, + 0xd5, 0xd7, 0x26, 0x69, 0x1f, 0xbe, 0xe4, 0x4d, 0x8f, 0x83, 0xdc, 0x94, + 0xa7, 0x8c, 0xa8, 0x73, 0x69, 0xab, 0x35, 0x37, 0x15, 0x23, 0x46, 0x2d, + 0x32, 0x54, 0x72, 0x4c, 0xe2, 0x45, 0xfa, 0x33, 0x06, 0x86, 0x06, 0xae, + 0xc2, 0xb7, 0x14, 0x47, 0x06, 0xa1, 0x8f, 0x34, 0x79, 0x3a, 0xd2, 0x98, + 0x22, 0x9e, 0x07, 0x35, 0x11, 0xef, 0xf4, 0x06, 0x21, 0x82, 0xda, 0xa6, + 0xbc, 0xee, 0x01, 0xcd, 0x38, 0x86, 0x29, 0xab, 0xa8, 0xee, 0xeb, 0x10, + 0x5b, 0xf0, 0xda, 0xa0, 0x12, 0x0b, 0xa9, 0xff, 0x27, 0xff, 0x95, 0xef, + 0xe6, 0xfd, 0x48, 0x42, 0x34, 0x2d, 0xe2, 0x7a, 0xfe, 0xbf, 0x89, 0x72, + 0xcf, 0x10, 0x0f, 0xc3, 0x97, 0x7b, 0x2f, 0x40, 0xe8, 0x51, 0xb7, 0xdd, + 0x14, 0xc0, 0x2e, 0x9e, 0xe9, 0xef, 0x0a, 0x70, 0x00, 0x88, 0x27, 0x18, + 0xec, 0x20, 0x55, 0xc2, 0x5b, 0xed, 0x85, 0xdd, 0xdd, 0xa8, 0xfa, 0x73, + 0x79, 0xa9, 0x04, 0xfe, 0xb3, 0x6c, 0xa8, 0x9e, 0x74, 0x9a, 0x54, 0xf6, + 0x33, 0x04, 0x2f, 0xd8, 0x7d, 0xd7, 0x0b, 0xb2, 0x61, 0x05, 0x8e, 0x64, + 0xf8, 0x2b, 0x5d, 0xcf, 0x19, 0xca, 0x59, 0x23, 0x3e, 0xeb, 0x36, 0x4b, + 0xbe, 0xae, 0xa9, 0xb7, 0x1b, 0x5e, 0x47, 0x5c, 0x33, 0xd8, 0x11, 0xd6, + 0x0e, 0x76, 0x08, 0x25, 0x1f, 0x2b, 0x4d, 0xfd, 0x3a, 0xf9, 0x33, 0x7f, + 0xf0, 0x3b, 0x99, 0x56, 0xba, 0x7f, 0x53, 0x31, 0x2e, 0x19, 0x55, 0xe9, + 0xa1, 0x71, 0x9c, 0x3c, 0xfa, 0xa7, 0xcc, 0xed, 0xf8, 0xae, 0x7c, 0xd9, + 0x0f, 0xf4, 0xf6, 0x12, 0x99, 0x67, 0x29, 0x5c, 0xaa, 0xbe, 0xc9, 0x76, + 0x44, 0x10, 0x8b, 0x3c, 0x5c, 0xff, 0xe6, 0x5e, 0x55, 0xec, 0xb9, 0x33, + 0x94, 0xba, 0x5f, 0x56, 0xe9, 0x4f, 0xc2, 0x72, 0x0a, 0x66, 0x02, 0x3a, + 0x4c, 0xef, 0x20, 0xfb, 0xe9, 0xa3, 0xb7, 0xcc, 0x66, 0x84, 0xe7, 0xad, + 0xfa, 0xc2, 0x64, 0x4e, 0x7e, 0x6a, 0x73, 0x5a, 0x26, 0xd5, 0xbf, 0xac, + 0xb5, 0x6d, 0x03, 0xbb, 0x37, 0x47, 0x4d, 0xbe, 0x73, 0xe1, 0x13, 0x90, + 0xda, 0x42, 0x43, 0x16, 0x2e, 0xbc, 0x5f, 0x93, 0xc9, 0xce, 0x7c, 0xd5, + 0xaa, 0xab, 0x41, 0x92, 0x39, 0xc8, 0x9c, 0xa6, 0x2b, 0x7a, 0xb2, 0x33, + 0xc7, 0x68, 0x88, 0x03, 0xa3, 0x27, 0x51, 0x23, 0x4d, 0x73, 0x13, 0xda, + 0x0a, 0x88, 0x8f, 0x41, 0xc9, 0xfa, 0x98, 0xc4, 0x48, 0x6a, 0xb1, 0xd4, + 0x74, 0xec, 0x93, 0x39, 0x93, 0xba, 0x7c, 0x88, 0x2b, 0xf6, 0xa5, 0xb4, + 0x59, 0xb2, 0xf8, 0xcc, 0x60, 0x6c, 0x9f, 0x64, 0x45, 0xfc, 0x8d, 0xc6, + 0xce, 0xb2, 0x4b, 0xc3, 0x76, 0xfa, 0x9b, 0xad, 0xf1, 0xf2, 0x44, 0x93, + 0x46, 0xe6, 0x71, 0xa5, 0x84, 0xbe, 0x00, 0x02, 0x78, 0xa6, 0x31, 0xb4, + 0x2d, 0xc8, 0x0a, 0x6f, 0x72, 0x3f, 0x64, 0xd2, 0x73, 0xbc, 0x26, 0x45, + 0x27, 0x24, 0x7f, 0x9b, 0x62, 0x20, 0x37, 0x1c, 0x05, 0xfd, 0x3f, 0x72, + 0x95, 0x27, 0xff, 0xd8, 0x7a, 0x7c, 0x15, 0x28, 0xa0, 0xcc, 0x6b, 0xb2, + 0xe5, 0xf5, 0xe7, 0x5b, 0x00, 0x9b, 0x9d, 0x8f, 0x92, 0xc2, 0x9c, 0xae, + 0x03, 0x5c, 0xfe, 0x1c, 0x16, 0xd7, 0xb6, 0x6d, 0x32, 0xce, 0x3b, 0xfc, + 0x84, 0x47, 0xbb, 0x24, 0x7f, 0x62, 0xe4, 0x6b, 0x96, 0xa1, 0x87, 0xcc, + 0xe4, 0x32, 0x56, 0xc5, 0xe1, 0xa0, 0xde, 0x4b, 0x33, 0x98, 0x54, 0xd2, + 0x81, 0xbd, 0x0a, 0xe3, 0x6d, 0x24, 0x8a, 0xc2, 0x5d, 0xe1, 0x41, 0x9b, + 0xd2, 0xe3, 0x83, 0x1b, 0xd9, 0xe1, 0xf5, 0x85, 0x6c, 0xed, 0x3a, 0xb7, + 0xb1, 0xbc, 0x9a, 0x48, 0xb3, 0x3e, 0x24, 0xdb, 0x08, 0x14, 0xab, 0x30, + 0xdb, 0x03, 0xa2, 0x5b, 0xa5, 0x8b, 0x4a, 0x6c, 0xc3, 0x9e, 0xa4, 0x55, + 0x56, 0xd0, 0x2c, 0x6c, 0xdf, 0x99, 0x90, 0x93, 0x8c, 0x00, 0x2e, 0xd4, + 0x3e, 0xe7, 0x40, 0xe8, 0xce, 0x2f, 0x9c, 0x9c, 0x19, 0x8d, 0x28, 0x7e, + 0x12, 0x25, 0xa4, 0x95, 0xb5, 0xa0, 0x54, 0x53, 0x47, 0x05, 0xd6, 0xc4, + 0x7e, 0x00, 0xcc, 0x99, 0x75, 0x39, 0xb6, 0x34, 0x33, 0xa2, 0x48, 0xd6, + 0x33, 0x1f, 0x70, 0x88, 0x8c, 0xa4, 0xfb, 0xb0, 0x10, 0x84, 0xdf, 0x34, + 0xa8, 0xed, 0x19, 0x34, 0x60, 0x0f, 0xf0, 0x05, 0x2c, 0x2c, 0x3e, 0x25, + 0x10, 0x3c, 0x6b, 0x58, 0x82, 0x77, 0xe0, 0x07, 0x3a, 0x6d, 0xdf, 0x31, + 0x77, 0x2d, 0xe9, 0x6c, 0x54, 0x41, 0x7a, 0x75, 0xd7, 0xe1, 0xdc, 0x92, + 0x82, 0x1b, 0x46, 0x4c, 0x54, 0x18, 0x34, 0x2d, 0x96, 0xe1, 0x05, 0x51, + 0xc8, 0x11, 0x03, 0x97, 0x8d, 0x7a, 0xe9, 0x60, 0x93, 0x3b, 0x05, 0x4b, + 0x7e, 0xde, 0xea, 0xd4, 0x60, 0x1b, 0x67, 0x0b, 0x86, 0xe0, 0x80, 0xb6, + 0xee, 0x89, 0x8e, 0x5d, 0x22, 0x58, 0x97, 0xd6, 0x83, 0xab, 0x90, 0x06, + 0xf1, 0xbd, 0x97, 0xa5, 0xb9, 0x9c, 0xf9, 0x5a, 0x9e, 0x8e, 0xe4, 0xc7, + 0xca, 0x40, 0x78, 0xd6, 0xd3, 0x1f, 0x8a, 0x3c, 0x3e, 0xe5, 0x1d, 0xca, + 0xe9, 0xe8, 0x7c, 0xfe, 0xfb, 0x2f, 0xba, 0xac, 0xc3, 0x9d, 0xa5, 0x75, + 0x79, 0x69, 0x99, 0x81, 0xf6, 0x37, 0xb7, 0x75, 0x53, 0x93, 0x09, 0x3a, + 0xe7, 0xc3, 0x29, 0x2b, 0x74, 0x8b, 0xc2, 0x6d, 0xe7, 0xb6, 0xaa, 0x6e, + 0x1e, 0x06, 0xa8, 0xba, 0x4b, 0xe5, 0xae, 0x0d, 0x7d, 0x8e, 0xe9, 0x29, + 0xf5, 0x33, 0xee, 0x13, 0x06, 0xa0, 0xc5, 0x9e, 0xec, 0x0e, 0xc5, 0xa5, + 0x44, 0x07, 0x11, 0x8e, 0x2d, 0xb2, 0xdc, 0xc2, 0x92, 0x7a, 0x17, 0x6b, + 0x42, 0x5a, 0xfc, 0x0f, 0x6a, 0xf1, 0x6d, 0xc9, 0x50, 0x3d, 0xfb, 0x8f, + 0x66, 0xd5, 0x59, 0x90, 0xfb, 0x91, 0x16, 0xe7, 0xe5, 0xed, 0xde, 0x67, + 0xba, 0x3f, 0x9a, 0x42, 0x74, 0x6a, 0x31, 0x03, 0xbc, 0xd0, 0xe3, 0xe6, + 0x88, 0x63, 0x9a, 0xea, 0x6e, 0x63, 0x96, 0x55, 0x24, 0x99, 0x71, 0x31, + 0xf9, 0xf3, 0xbe, 0xb9, 0x88, 0xb1, 0xaf, 0x9d, 0x79, 0xc5, 0x94, 0x8f, + 0xff, 0x35, 0xed, 0xbb, 0x57, 0x92, 0x29, 0x65, 0x9f, 0x00, 0x9c, 0x8e, + 0x29, 0xe9, 0xac, 0xf7, 0x53, 0x90, 0x7f, 0x41, 0x26, 0xfd, 0x87, 0xc8, + 0xfb, 0x13, 0x95, 0xcc, 0x1f, 0x0b, 0x79, 0x6e, 0x7f, 0xe6, 0x79, 0x59, + 0xc0, 0x34, 0x03, 0x03, 0x33, 0xfe, 0x6a, 0x58, 0x8f, 0xbb, 0xfa, 0x45, + 0x36, 0xbc, 0xa7, 0x6c, 0x69, 0xc1, 0x65, 0x4f, 0x1b, 0xc0, 0x89, 0x14, + 0xa6, 0x7b, 0xfb, 0xc2, 0x29, 0xd8, 0xdc, 0x1e, 0x8f, 0xcf, 0xad, 0x86, + 0xf3, 0x03, 0x12, 0xf5, 0x44, 0x45, 0x88, 0x18, 0x33, 0x5e, 0x5d, 0x91, + 0x2e, 0x12, 0x75, 0x24, 0x90, 0x5c, 0x15, 0x90, 0xe1, 0x98, 0xf3, 0x47, + 0x45, 0x29, 0xb2, 0x8f, 0x2d, 0xef, 0x38, 0x3c, 0xa2, 0xa1, 0x56, 0xd8, + 0x08, 0xa0, 0x76, 0x6c, 0xf4, 0xbc, 0x99, 0xf1, 0x73, 0x0b, 0xc8, 0x46, + 0xde, 0xfb, 0x1c, 0x80, 0x52, 0x36, 0x39, 0xc6, 0xcc, 0xc6, 0x5c, 0x25, + 0x24, 0x91, 0xbc, 0x37, 0x24, 0x2c, 0x0d, 0xe5, 0xf1, 0xf3, 0xb0, 0xcd, + 0xaf, 0xac, 0x84, 0x38, 0x19, 0x5d, 0xd2, 0xf4, 0xad, 0x66, 0xcf, 0x7e, + 0xeb, 0x47, 0xc5, 0xd3, 0x70, 0x43, 0xb4, 0x0b, 0x5d, 0x10, 0x2b, 0xe8, + 0xce, 0xf1, 0x27, 0x10, 0xee, 0x0a, 0x3f, 0xcd, 0x3a, 0x01, 0xe3, 0x0a, + 0x0f, 0xbc, 0x78, 0x37, 0xe9, 0x7c, 0xae, 0x4d, 0x6a, 0xb4, 0xa5, 0x7f, + 0x9f, 0x12, 0x6c, 0x4d, 0xe3, 0xf8, 0xfd, 0x05, 0xdf, 0x33, 0x87, 0xf3, + 0xaf, 0xbc, 0x4d, 0x33, 0xaa, 0x70, 0x8a, 0xe4, 0xef, 0x76, 0x26, 0x6c, + 0x76, 0xb6, 0xc9, 0xc3, 0xfd, 0x7f, 0xf9, 0x20, 0x51, 0x46, 0xe5, 0x6c, + 0xfe, 0x1b, 0xa1, 0x27, 0x5d, 0x57, 0x03, 0x5c, 0xcb, 0x74, 0x2b, 0x4b, + 0x16, 0xe5, 0x2f, 0x89, 0x83, 0xac, 0x52, 0xa7, 0xec, 0x87, 0x36, 0xad, + 0xe8, 0xcc, 0x99, 0x8b, 0x82, 0xae, 0xa4, 0x97, 0x18, 0xa9, 0x39, 0x9d, + 0x2f, 0x7b, 0x38, 0x8d, 0x16, 0x30, 0x09, 0x56, 0xed, 0x7a, 0x42, 0x85, + 0x4b, 0x71, 0x2b, 0xe4, 0x85, 0x7f, 0xd0, 0xfb, 0x85, 0x60, 0x99, 0x30, + 0x10, 0x6b, 0xff, 0xd6, 0xb9, 0x19, 0x89, 0xaf, 0x5c, 0xbc, 0x8a, 0x35, + 0x78, 0xdb, 0xcd, 0xb4, 0x3a, 0x10, 0x9e, 0x0d, 0x14, 0x9f, 0x54, 0xe0, + 0x3f, 0x5b, 0x1f, 0xe3, 0x66, 0x0a, 0xdd, 0xe9, 0xb5, 0x8e, 0xc6, 0x13, + 0x3e, 0xc3, 0x72, 0x43, 0x71, 0xd1, 0xb3, 0xd3, 0x56, 0xfe, 0x0b, 0x7e, + 0xd1, 0xfe, 0x1e, 0x7f, 0xda, 0xb3, 0xd1, 0xdb, 0xa4, 0xce, 0xd7, 0x52, + 0x7d, 0x07, 0x29, 0x6e, 0x59, 0x65, 0x6a, 0x67, 0x80, 0x91, 0xfe, 0x69, + 0xe2, 0xf5, 0x69, 0xac, 0x15, 0xdb, 0x85, 0xb4, 0x7a, 0x0d, 0x8c, 0xa9, + 0xf8, 0x12, 0x95, 0xc9, 0x6f, 0x89, 0x41, 0x28, 0xc5, 0x2e, 0xb1, 0xf2, + 0xba, 0x31, 0x24, 0xd4, 0xd1, 0x74, 0xd5, 0x8d, 0x04, 0x68, 0x0e, 0xe9, + 0x11, 0xea, 0xa4, 0x02, 0x9c, 0xc5, 0x13, 0xf8, 0x05, 0x23, 0xdc, 0xa6, + 0x39, 0xf6, 0xab, 0x26, 0x49, 0xb5, 0xe9, 0x3a, 0xba, 0xb3, 0x6d, 0xc1, + 0xb8, 0xfa, 0xbe, 0x40, 0x76, 0x2f, 0x84, 0x26, 0x06, 0x81, 0x38, 0x36, + 0xc3, 0xa5, 0xc0, 0x11, 0xb3, 0x7f, 0xb8, 0xb7, 0x7e, 0xdb, 0xc1, 0xff, + 0xb1, 0x18, 0xb3, 0xab, 0x64, 0x1c, 0x06, 0x16}, + // secret + {0xac, 0x32, 0x76, 0x4a, 0xab, 0xf8, 0x92, 0x6e, 0xc4, 0x17, 0x54, + 0x18, 0x1b, 0x2c, 0xff, 0x10, 0x1b, 0x90, 0x7c, 0x0d, 0x60, 0xfb, + 0x92, 0x63, 0x82, 0x14, 0xab, 0x91, 0x64, 0xe2, 0x4f, 0x2f}, + true}, + // tcID: 99 + {99, + params_ml_kem1024_test_mode, + // privateKey + {0xe3, 0xe4, 0x53, 0x44, 0xb2, 0x93, 0xb1, 0x19, 0x58, 0x6b, 0x15, 0xbb, + 0xdc, 0xd8, 0xc1, 0xde, 0x07, 0x39, 0x2b, 0x64, 0xa4, 0x44, 0xb7, 0xc6, + 0xad, 0xf1, 0x0f, 0xf2, 0x08, 0x92, 0x57, 0x47, 0x15, 0x50, 0x16, 0x60, + 0x42, 0x01, 0x68, 0x34, 0xcb, 0x59, 0x2b, 0x86, 0x89, 0xb3, 0xf5, 0x5e, + 0x63, 0x87, 0x98, 0xca, 0x89, 0xca, 0xe9, 0x2a, 0xab, 0x39, 0x89, 0xa2, + 0x44, 0x76, 0x14, 0x2c, 0xd2, 0x7c, 0xa4, 0xa7, 0x47, 0xd1, 0x34, 0xb7, + 0xf8, 0x30, 0x8a, 0x92, 0x88, 0x90, 0xc5, 0x27, 0x67, 0xd8, 0x39, 0x53, + 0x5e, 0xd8, 0x80, 0xb9, 0x0c, 0x8c, 0x00, 0x4c, 0x35, 0xfb, 0x5b, 0x26, + 0x1e, 0xb3, 0xa6, 0xb6, 0x89, 0x78, 0x6e, 0x04, 0x4e, 0x3c, 0x47, 0x0c, + 0xd6, 0xa3, 0x18, 0xd8, 0xaa, 0x9b, 0xc6, 0x86, 0x81, 0x4b, 0x65, 0x5f, + 0x43, 0x0a, 0xab, 0x78, 0x27, 0x6b, 0xc1, 0x89, 0x3e, 0xcf, 0xf0, 0x95, + 0xc9, 0x5b, 0xa2, 0x2e, 0x9b, 0x72, 0x04, 0x18, 0xcd, 0xcb, 0x65, 0xa8, + 0x9b, 0x6c, 0x71, 0x70, 0x97, 0x1c, 0x3a, 0x78, 0xca, 0xc6, 0xb8, 0x95, + 0xd0, 0xbb, 0xba, 0xbc, 0x69, 0x25, 0xf0, 0x08, 0x96, 0x56, 0xd6, 0x53, + 0x9d, 0xa9, 0x76, 0x3a, 0x10, 0x7c, 0x66, 0x6a, 0xc7, 0xc4, 0xf0, 0x1b, + 0xfe, 0xe6, 0x9b, 0x6b, 0x76, 0xce, 0xf8, 0x00, 0x9f, 0x82, 0x83, 0x85, + 0x2e, 0xda, 0x1d, 0xfc, 0x6c, 0xba, 0x2b, 0x05, 0x37, 0x85, 0xd7, 0x9e, + 0x70, 0x68, 0x0d, 0xab, 0x36, 0x09, 0x6b, 0x4a, 0x85, 0x1e, 0xf4, 0x89, + 0x49, 0x29, 0x7a, 0x41, 0x91, 0x25, 0xc9, 0x12, 0x90, 0xa1, 0x05, 0xc2, + 0x8d, 0x8b, 0x4c, 0x33, 0x82, 0x9b, 0x70, 0x75, 0xcd, 0x4f, 0xfa, 0x32, + 0x3e, 0x53, 0x72, 0x68, 0x37, 0x2e, 0x43, 0x34, 0x59, 0x30, 0xd6, 0x57, + 0xed, 0xbc, 0xa5, 0x76, 0x0a, 0x7e, 0x67, 0xe4, 0x42, 0xd2, 0x84, 0xa2, + 0x0b, 0x1a, 0xc7, 0x00, 0x38, 0x38, 0x24, 0x1c, 0x26, 0x28, 0x6c, 0x41, + 0xef, 0x62, 0x8d, 0xec, 0x92, 0x97, 0x46, 0xa3, 0x49, 0x6a, 0xf1, 0x99, + 0x61, 0x2c, 0x42, 0xbd, 0xf1, 0x7b, 0x74, 0xbc, 0xbe, 0xef, 0x63, 0x1e, + 0x2e, 0x97, 0x3e, 0x8a, 0x2c, 0xa3, 0x46, 0x0c, 0x20, 0x22, 0x0b, 0xbd, + 0x7b, 0x72, 0x6a, 0xca, 0x0c, 0x89, 0xb8, 0xab, 0xa7, 0x92, 0x62, 0x1f, + 0xce, 0x1c, 0x45, 0xa5, 0xc5, 0x9c, 0x0d, 0x04, 0x98, 0x8d, 0xe7, 0x1d, + 0x02, 0x72, 0x09, 0xaa, 0x4c, 0x96, 0x24, 0x59, 0x74, 0xe4, 0x18, 0x20, + 0x42, 0xe3, 0x53, 0x89, 0x78, 0x17, 0xc5, 0xc6, 0x30, 0x93, 0x43, 0xc2, + 0xe2, 0x20, 0x8f, 0x6a, 0x2b, 0xc8, 0x85, 0x83, 0x04, 0x9e, 0x1a, 0x95, + 0x96, 0x45, 0x6f, 0xb8, 0x1b, 0x7f, 0x67, 0xb8, 0x3c, 0x85, 0x64, 0xca, + 0x78, 0xa3, 0xb0, 0xe0, 0xfa, 0x3f, 0x46, 0x51, 0x7b, 0x8c, 0x63, 0xac, + 0xd3, 0xdb, 0x2f, 0x32, 0x6c, 0xb8, 0x22, 0x4c, 0x87, 0x40, 0xf2, 0x34, + 0x7c, 0xf8, 0x28, 0xe1, 0x07, 0x9b, 0x80, 0x41, 0x46, 0x1b, 0xc2, 0x09, + 0xf9, 0x0a, 0x7c, 0x62, 0x56, 0xcb, 0x00, 0xfa, 0x38, 0x03, 0x37, 0x5e, + 0xc5, 0x6c, 0xa5, 0x3c, 0xe8, 0x1d, 0xef, 0xd4, 0x32, 0x2f, 0xc3, 0x9a, + 0x57, 0x40, 0xc8, 0x94, 0xc3, 0x14, 0x08, 0xb8, 0x8d, 0xee, 0xe2, 0x1f, + 0x32, 0xf4, 0x2e, 0xcf, 0xc7, 0x0e, 0x8c, 0x9c, 0xbb, 0x74, 0x73, 0x42, + 0x8f, 0xda, 0x0a, 0xee, 0x13, 0xa7, 0xb5, 0x49, 0x86, 0x17, 0x68, 0xcd, + 0x17, 0x77, 0xad, 0x08, 0xd2, 0x29, 0x92, 0xfa, 0xa0, 0xcb, 0x5b, 0x9c, + 0x1a, 0x16, 0xb6, 0x00, 0x32, 0x02, 0x8e, 0xc5, 0x05, 0x5f, 0x29, 0x6f, + 0xd2, 0xa8, 0x3d, 0x7a, 0x55, 0x83, 0xd0, 0xd5, 0xc2, 0xa8, 0xfb, 0x5b, + 0xc6, 0x56, 0x0f, 0x04, 0x67, 0x34, 0x57, 0x21, 0x4f, 0x49, 0xd7, 0x15, + 0xae, 0x46, 0x6f, 0x8d, 0x3c, 0x60, 0x94, 0xc6, 0x76, 0xa8, 0xb3, 0x8d, + 0xf4, 0xf6, 0x63, 0x63, 0x7a, 0x47, 0x27, 0x99, 0xaf, 0xfc, 0x23, 0x6d, + 0x34, 0x99, 0x72, 0x6b, 0x67, 0x37, 0xda, 0xda, 0xad, 0x96, 0x43, 0x51, + 0xa1, 0x29, 0x51, 0x93, 0x05, 0x66, 0x26, 0xe1, 0x82, 0x26, 0x7a, 0x0f, + 0xdd, 0xb8, 0x5b, 0x2d, 0xa6, 0x67, 0xcd, 0x4a, 0x15, 0x9e, 0x59, 0x2c, + 0x6a, 0x83, 0x40, 0x42, 0x73, 0xaf, 0xa2, 0x5c, 0x39, 0x8c, 0xe3, 0xba, + 0x70, 0xec, 0x0a, 0x36, 0x24, 0x9d, 0x13, 0x85, 0x05, 0x2c, 0xe4, 0x16, + 0x25, 0xda, 0xce, 0x34, 0xaa, 0x42, 0xb9, 0x53, 0x85, 0x44, 0xb2, 0x42, + 0x42, 0xaa, 0x28, 0xf8, 0xd9, 0x2f, 0xa0, 0x11, 0x6e, 0x52, 0xf8, 0x59, + 0xba, 0x43, 0x43, 0xfa, 0xb3, 0x6c, 0xcc, 0xaa, 0x6f, 0xde, 0xa1, 0xcc, + 0x29, 0x28, 0xce, 0x3c, 0x09, 0xcd, 0x12, 0x10, 0x08, 0xe4, 0xb4, 0xa9, + 0x65, 0xc8, 0x4c, 0x60, 0x73, 0x54, 0x4f, 0x06, 0xd0, 0x14, 0x64, 0x2b, + 0xb8, 0xd1, 0x06, 0xd3, 0x67, 0x26, 0x24, 0x11, 0x97, 0xd7, 0xab, 0xcc, + 0x1d, 0x0b, 0x16, 0x5f, 0xd5, 0x66, 0xed, 0x1c, 0x73, 0xac, 0x57, 0xb1, + 0x0b, 0x79, 0xcc, 0xa6, 0xfb, 0x3a, 0x04, 0x69, 0x1e, 0xf0, 0x44, 0x65, + 0x98, 0x0b, 0x58, 0xbd, 0xf5, 0x1e, 0x99, 0xf4, 0xbb, 0x83, 0x60, 0x61, + 0xa3, 0x87, 0x15, 0x64, 0x0c, 0x65, 0x8a, 0xe5, 0x5d, 0x9d, 0x08, 0xb0, + 0x71, 0xa5, 0x66, 0x32, 0x0a, 0x8e, 0x5d, 0x12, 0x0b, 0xc4, 0x33, 0xa8, + 0x73, 0xec, 0x21, 0xdf, 0xf8, 0x14, 0xd6, 0xa6, 0x5d, 0x81, 0xb1, 0x9b, + 0xed, 0x6b, 0xbd, 0x5d, 0x52, 0x89, 0x6f, 0xa4, 0xb4, 0xc5, 0x32, 0xa6, + 0xce, 0x74, 0x79, 0x33, 0x84, 0xa7, 0x34, 0x4b, 0xcb, 0xb8, 0x77, 0x20, + 0xb3, 0x85, 0xc8, 0x7a, 0xe1, 0x2e, 0x77, 0x1c, 0x11, 0x52, 0xe4, 0x95, + 0xbf, 0xd9, 0x31, 0x28, 0x72, 0x38, 0x44, 0x72, 0xbf, 0x0e, 0xc3, 0x9a, + 0xe1, 0xe8, 0x2b, 0xda, 0x83, 0x48, 0x02, 0x52, 0x46, 0x30, 0xec, 0x03, + 0x81, 0x04, 0x93, 0xd5, 0x5c, 0x83, 0x22, 0x17, 0xcf, 0x44, 0x4b, 0x29, + 0xfc, 0x9a, 0x56, 0x18, 0x64, 0x66, 0x35, 0xec, 0x76, 0x7a, 0xf6, 0x96, + 0xf0, 0xf4, 0x3a, 0x38, 0x8c, 0xce, 0x21, 0xb2, 0x2b, 0xf1, 0x3c, 0x94, + 0x31, 0x40, 0x6e, 0xb0, 0xc7, 0x2c, 0xf7, 0x57, 0x41, 0x88, 0x87, 0x2a, + 0x4c, 0xf5, 0x53, 0x10, 0x2b, 0x53, 0x53, 0x00, 0x3d, 0x4c, 0xd2, 0x56, + 0xff, 0xc8, 0xab, 0xd3, 0xc5, 0x9b, 0x74, 0x3a, 0xbc, 0xab, 0x18, 0xc0, + 0xb3, 0x1c, 0x41, 0xa2, 0x77, 0x65, 0x8f, 0x34, 0x78, 0x94, 0x7a, 0xab, + 0x90, 0x27, 0x16, 0x3f, 0x9b, 0x21, 0x1c, 0x69, 0xc1, 0x3e, 0x70, 0x3e, + 0x9f, 0x9a, 0x1c, 0xc6, 0x22, 0x95, 0x01, 0x93, 0x4b, 0x90, 0xb8, 0x74, + 0x5c, 0x87, 0x77, 0xcd, 0xd3, 0x55, 0xe8, 0x08, 0xce, 0xde, 0x63, 0x2a, + 0x1b, 0x00, 0x9b, 0xe1, 0x78, 0x45, 0x4c, 0xb9, 0x85, 0x59, 0x73, 0x24, + 0x14, 0x96, 0x70, 0xff, 0x28, 0x36, 0xa4, 0x08, 0x53, 0x57, 0x77, 0x6e, + 0x41, 0x80, 0x61, 0x48, 0x8a, 0xb0, 0x66, 0x86, 0x8b, 0x61, 0x44, 0xce, + 0x41, 0xfc, 0xac, 0x8f, 0x8b, 0x8c, 0x6c, 0x97, 0x50, 0x78, 0xc1, 0x9a, + 0x9c, 0x05, 0x17, 0x04, 0x7c, 0x0e, 0xb3, 0x57, 0x72, 0xae, 0x06, 0xa7, + 0x2a, 0x42, 0xbd, 0xf6, 0x43, 0x58, 0x09, 0x82, 0x39, 0x38, 0xa2, 0xc6, + 0x2e, 0xd0, 0x0c, 0xfc, 0x78, 0xba, 0x27, 0xf3, 0x5c, 0x74, 0xf0, 0xa3, + 0x53, 0xd2, 0x55, 0x50, 0x84, 0x56, 0xd6, 0x40, 0x08, 0xf6, 0x21, 0x37, + 0xa3, 0x1b, 0x1f, 0x86, 0x9c, 0x46, 0xbe, 0x67, 0x68, 0xfb, 0x47, 0xc3, + 0x7d, 0x54, 0x2f, 0x77, 0xe2, 0x8e, 0xcf, 0xc6, 0x92, 0x65, 0x32, 0x06, + 0x79, 0x14, 0x2f, 0xed, 0xf0, 0xc8, 0x70, 0xc1, 0xa8, 0xcc, 0xa9, 0x81, + 0xfc, 0xd3, 0xb6, 0x1f, 0xa7, 0x28, 0x9e, 0x9c, 0x16, 0xd8, 0xa4, 0x16, + 0xa8, 0x6c, 0x95, 0x16, 0x62, 0xae, 0xdd, 0x09, 0x6b, 0xc3, 0x47, 0x5a, + 0xd0, 0xc1, 0xad, 0x82, 0x21, 0x30, 0x82, 0x50, 0x3d, 0x29, 0xd8, 0xad, + 0x8b, 0x71, 0x39, 0x79, 0x55, 0xa3, 0xe2, 0x29, 0x4b, 0x52, 0x05, 0xbb, + 0x7d, 0x43, 0x8f, 0x61, 0x4a, 0x57, 0x4c, 0x50, 0x86, 0x63, 0x60, 0x49, + 0x53, 0x7c, 0x6c, 0xe0, 0xa2, 0x4a, 0x24, 0x2b, 0x54, 0xc7, 0x23, 0xad, + 0x72, 0xf1, 0x67, 0xc4, 0x59, 0x23, 0x16, 0x11, 0x93, 0x19, 0x6b, 0xb0, + 0xc5, 0x51, 0x11, 0xf4, 0x2a, 0x75, 0x8a, 0x83, 0x25, 0x3a, 0x39, 0x65, + 0x37, 0x94, 0x6d, 0xb7, 0x92, 0xc0, 0xd0, 0xc3, 0x64, 0x7d, 0x41, 0x80, + 0x41, 0xa8, 0x4f, 0x02, 0x91, 0x07, 0xba, 0x51, 0x71, 0x06, 0x23, 0x49, + 0xe0, 0xb4, 0x5f, 0x9f, 0x34, 0x35, 0x9e, 0x6c, 0x6e, 0x37, 0x75, 0x03, + 0x29, 0xb7, 0xb5, 0x06, 0x9b, 0x37, 0x5a, 0x14, 0x7a, 0xdd, 0xac, 0xb1, + 0x73, 0x4c, 0x8c, 0xa0, 0xe0, 0xa6, 0xf7, 0xcb, 0x16, 0x75, 0x07, 0x32, + 0x09, 0xc9, 0xbc, 0xdd, 0xc8, 0xb4, 0xc8, 0x57, 0x6e, 0x82, 0xe5, 0xa5, + 0x5b, 0x01, 0x15, 0xc1, 0x88, 0x60, 0xa1, 0x93, 0x9e, 0x76, 0xd8, 0x17, + 0x4d, 0x79, 0x60, 0x70, 0x2a, 0xa3, 0x81, 0x92, 0x5e, 0xd9, 0x31, 0x7b, + 0xe8, 0x58, 0x79, 0xcb, 0xa9, 0x08, 0x32, 0xda, 0x65, 0xe1, 0xd9, 0x0a, + 0xfe, 0xea, 0xc7, 0x7b, 0xaa, 0x46, 0x39, 0x12, 0x25, 0xc9, 0x10, 0x96, + 0x0d, 0x72, 0x62, 0xd8, 0x42, 0xa4, 0xdc, 0x7a, 0x86, 0x0b, 0x8c, 0x7f, + 0x79, 0xe4, 0x94, 0xd3, 0x93, 0xc2, 0x2a, 0x32, 0x3a, 0x7b, 0x64, 0x60, + 0x4c, 0xf0, 0x5c, 0x7d, 0x89, 0x07, 0xaf, 0x3b, 0x21, 0x59, 0xb7, 0x0b, + 0x20, 0xe8, 0x3d, 0xc1, 0xd6, 0x54, 0xa0, 0x86, 0x41, 0xce, 0x75, 0x66, + 0xa0, 0xba, 0x5b, 0xd9, 0x76, 0x7a, 0x85, 0x83, 0xa0, 0x56, 0x48, 0x08, + 0x95, 0x05, 0x26, 0xa9, 0xb4, 0x40, 0x16, 0x67, 0x18, 0x8a, 0x89, 0x60, + 0x4d, 0xd6, 0x18, 0xed, 0xf5, 0x21, 0xdc, 0xf8, 0x90, 0x63, 0x77, 0x1e, + 0xc3, 0x99, 0x2c, 0x78, 0x4c, 0x29, 0x32, 0x32, 0x28, 0x0c, 0xf8, 0xb6, + 0x8b, 0x52, 0x48, 0x06, 0x6a, 0x47, 0x6c, 0xa2, 0x48, 0x29, 0x42, 0xbe, + 0x48, 0xdc, 0x44, 0xba, 0xf7, 0x9a, 0x6d, 0xa3, 0x7f, 0xe0, 0xe3, 0x27, + 0x44, 0xeb, 0x92, 0xb2, 0xe7, 0x4b, 0x53, 0x4b, 0x26, 0xd8, 0x4a, 0x0e, + 0x2b, 0x50, 0x73, 0xc0, 0x9a, 0x0a, 0xa8, 0x81, 0x0e, 0xc1, 0x20, 0x4d, + 0x9a, 0x02, 0xa6, 0xe4, 0xf3, 0x5e, 0xb8, 0x80, 0x9b, 0x67, 0xb6, 0x42, + 0x7d, 0x77, 0x21, 0x43, 0xb9, 0x1e, 0x1a, 0xec, 0x72, 0xdb, 0x58, 0x2c, + 0xac, 0x57, 0x15, 0xd0, 0x48, 0x16, 0x98, 0x59, 0x8e, 0x27, 0x40, 0x49, + 0x14, 0x51, 0xbe, 0x81, 0xea, 0xbd, 0x97, 0xf4, 0xcf, 0x83, 0x8b, 0x4d, + 0xc1, 0x26, 0x8a, 0xca, 0x4b, 0x8a, 0xb4, 0xcc, 0x67, 0xc8, 0xf0, 0x9b, + 0x8e, 0x0a, 0x08, 0x47, 0x92, 0x2a, 0xd0, 0x28, 0x0e, 0xf6, 0x92, 0x26, + 0xae, 0xe9, 0x54, 0x59, 0x01, 0x0c, 0x51, 0x2b, 0x67, 0x45, 0xe1, 0xc0, + 0xf7, 0x7a, 0x8b, 0xf3, 0x15, 0x10, 0x85, 0x30, 0x59, 0x55, 0x03, 0xbc, + 0x7a, 0x08, 0x0d, 0x32, 0xa1, 0x59, 0x6d, 0x7a, 0x51, 0xce, 0x52, 0x4c, + 0x10, 0x23, 0xc2, 0x0e, 0x2c, 0xc6, 0x59, 0xe9, 0xb0, 0x23, 0x55, 0x28, + 0x7d, 0xe1, 0x64, 0x3c, 0xe2, 0x15, 0x5e, 0x73, 0x6f, 0xdb, 0x64, 0x21, + 0x38, 0x25, 0xb8, 0xc5, 0xa8, 0x49, 0xe2, 0x61, 0xc3, 0x09, 0xb6, 0x95, + 0x58, 0x93, 0x21, 0x70, 0xc5, 0x67, 0x5a, 0x53, 0xcd, 0x4f, 0x62, 0x89, + 0x85, 0x93, 0xa8, 0x79, 0x25, 0x35, 0xa0, 0xa0, 0x61, 0x87, 0xeb, 0x68, + 0x8c, 0x1a, 0xc9, 0x0b, 0x95, 0x77, 0x19, 0xbb, 0x7b, 0x39, 0x33, 0x00, + 0x2a, 0x95, 0x32, 0x46, 0x86, 0x74, 0x1a, 0xf6, 0x99, 0x80, 0x74, 0xab, + 0x9c, 0xa1, 0x16, 0xab, 0xd1, 0x0d, 0x3c, 0xd4, 0x82, 0xbc, 0xda, 0x03, + 0x71, 0x02, 0x33, 0xfe, 0xe6, 0x29, 0x6c, 0x71, 0x8f, 0x3e, 0xb8, 0x46, + 0xe3, 0xb3, 0x2f, 0xce, 0xe5, 0x9e, 0x26, 0x97, 0xac, 0xa6, 0xc4, 0x90, + 0x5e, 0x86, 0x26, 0x00, 0x38, 0xa0, 0x63, 0x55, 0x04, 0xab, 0xea, 0xc8, + 0xb6, 0x56, 0x42, 0x0d, 0xd2, 0x29, 0x54, 0xa6, 0x2a, 0xd0, 0x5c, 0xa4, + 0x7b, 0xf6, 0x85, 0x01, 0x0c, 0xaf, 0x64, 0xa0, 0x20, 0xb6, 0x78, 0x2c, + 0x77, 0xbc, 0x8d, 0xe7, 0xfc, 0x5b, 0xe3, 0x3c, 0x11, 0x94, 0x52, 0xaa, + 0x51, 0x8c, 0x4a, 0xe5, 0x18, 0x3e, 0x6a, 0xe3, 0xae, 0x19, 0x5c, 0x07, + 0xd3, 0xe4, 0x37, 0x2e, 0x7b, 0x77, 0xb3, 0x1a, 0x73, 0x7e, 0xa6, 0x01, + 0x7e, 0xba, 0xa1, 0xe9, 0xe1, 0x21, 0x89, 0x70, 0xb1, 0xc2, 0x69, 0x26, + 0xa3, 0xf7, 0x58, 0xd2, 0x30, 0x1e, 0x24, 0x49, 0xb9, 0x17, 0xd1, 0x19, + 0x29, 0x87, 0x61, 0x36, 0x51, 0xb4, 0x04, 0xd9, 0x8e, 0x8a, 0x65, 0x2a, + 0xda, 0x73, 0x5e, 0x92, 0xd3, 0x41, 0x92, 0xb6, 0x26, 0x1a, 0x52, 0xc3, + 0xa5, 0x66, 0x72, 0x64, 0x27, 0x57, 0x66, 0x9a, 0x57, 0x16, 0xa2, 0x77, + 0xf7, 0xdc, 0xac, 0xc7, 0xd5, 0x03, 0x00, 0x7d, 0x80, 0x5e, 0x95, 0x0d, + 0xf9, 0x76, 0x56, 0x43, 0x34, 0x91, 0x25, 0x31, 0x07, 0x42, 0x04, 0x2d, + 0x4a, 0xec, 0x4c, 0xb3, 0x75, 0xc8, 0xf0, 0xc0, 0x43, 0xc8, 0x2a, 0x72, + 0xcd, 0xc7, 0x3f, 0xae, 0x37, 0x2d, 0xdb, 0x30, 0x1f, 0x0c, 0x68, 0x4a, + 0x02, 0xc9, 0x4d, 0x9c, 0x41, 0x5e, 0x78, 0x30, 0x25, 0x5c, 0x60, 0xca, + 0xc5, 0x99, 0x39, 0x2f, 0xc2, 0xa6, 0x32, 0x94, 0xa2, 0xfb, 0x22, 0xb7, + 0x20, 0x09, 0x49, 0x5e, 0x37, 0x17, 0x86, 0x2a, 0xa7, 0xd3, 0x7c, 0x5e, + 0x8a, 0x0c, 0x0a, 0x89, 0xe9, 0x90, 0xf1, 0x67, 0x59, 0xc5, 0x4a, 0xc9, + 0xd7, 0xd6, 0x91, 0x1e, 0xc0, 0xbb, 0xef, 0x34, 0x2c, 0x13, 0xcb, 0x98, + 0x8a, 0x12, 0x45, 0x23, 0x55, 0xa8, 0xeb, 0x57, 0x73, 0x4d, 0x1c, 0x5b, + 0x42, 0xe4, 0x85, 0xe5, 0xe7, 0x0c, 0x98, 0xb7, 0x92, 0xc0, 0xf0, 0xa4, + 0xfb, 0x0b, 0x8d, 0xf0, 0x74, 0x3c, 0xa6, 0xa9, 0x4a, 0x93, 0x6a, 0x80, + 0xa4, 0x02, 0x31, 0xfe, 0xb6, 0x9f, 0x68, 0x8b, 0x82, 0x69, 0x23, 0x56, + 0x13, 0x5c, 0x45, 0xe2, 0xd6, 0xb3, 0xb3, 0x46, 0xb0, 0x57, 0x21, 0xbb, + 0x57, 0x0a, 0x93, 0x29, 0x42, 0x8f, 0x86, 0x07, 0x4b, 0x50, 0x93, 0x0a, + 0xa7, 0x37, 0xbe, 0xdf, 0x2c, 0x0f, 0x3d, 0x43, 0x20, 0xbb, 0xcc, 0x4c, + 0xfe, 0x2a, 0xa0, 0x6e, 0x88, 0x20, 0xd3, 0x8b, 0x09, 0xdc, 0x47, 0x7c, + 0x78, 0x38, 0x5a, 0xf1, 0x95, 0x95, 0xf3, 0x4a, 0x80, 0x7e, 0x3b, 0xc5, + 0x58, 0x22, 0x8a, 0x06, 0xe6, 0x29, 0xf4, 0x79, 0x60, 0x3c, 0xa8, 0xb8, + 0xbe, 0x49, 0xce, 0x24, 0xa4, 0x8d, 0x68, 0xdc, 0xb2, 0xd1, 0x83, 0xc8, + 0x31, 0x16, 0xbe, 0xae, 0x4a, 0xcc, 0xa4, 0x44, 0xa6, 0x0a, 0x84, 0x47, + 0x49, 0xc6, 0xa7, 0x6b, 0xba, 0x67, 0xb8, 0xb6, 0x0e, 0x04, 0xaa, 0x48, + 0x52, 0xc5, 0x6a, 0x46, 0x25, 0x50, 0xa7, 0x4b, 0x7a, 0x4a, 0x00, 0xcb, + 0x56, 0x62, 0xb7, 0x35, 0xba, 0xb6, 0xf2, 0x71, 0x57, 0xd8, 0xc1, 0x80, + 0x1a, 0x39, 0x63, 0xf8, 0xa1, 0xcc, 0xa0, 0x26, 0x9d, 0x61, 0xd2, 0x73, + 0xe2, 0xb6, 0xb1, 0x52, 0x7a, 0x1a, 0x0b, 0x68, 0x38, 0x45, 0xe6, 0x8d, + 0x1e, 0x50, 0xc5, 0x73, 0xc3, 0x84, 0x16, 0x31, 0x30, 0x0f, 0xa3, 0x93, + 0x36, 0xf3, 0xc9, 0xaf, 0x58, 0xa2, 0xab, 0xba, 0xac, 0x45, 0x27, 0x4d, + 0xb4, 0xcb, 0x13, 0x9f, 0xa7, 0x95, 0x2d, 0x73, 0x23, 0xb6, 0x58, 0x49, + 0x6c, 0x75, 0x84, 0xb2, 0x91, 0xb5, 0x8a, 0x17, 0x43, 0x7e, 0xa2, 0x17, + 0xfd, 0x1a, 0x37, 0x20, 0xca, 0xb1, 0x73, 0x51, 0x55, 0x48, 0xd0, 0x45, + 0xf7, 0x21, 0x2a, 0x93, 0xa5, 0x03, 0x3f, 0x52, 0x5c, 0x6a, 0xb1, 0x3f, + 0xec, 0x80, 0x1a, 0xbc, 0x4b, 0x22, 0x17, 0x7c, 0xc4, 0x09, 0xea, 0x1a, + 0x37, 0xb1, 0x0b, 0x48, 0xf2, 0x9a, 0x9d, 0x63, 0x19, 0x62, 0x55, 0x2f, + 0x35, 0xd2, 0x91, 0x43, 0x1c, 0x6e, 0x94, 0x7b, 0x66, 0x4b, 0x16, 0x43, + 0x17, 0xf0, 0x10, 0x20, 0x6b, 0xbb, 0x50, 0x23, 0x54, 0x2b, 0x6a, 0x9c, + 0xa1, 0xe1, 0xb8, 0x77, 0xf0, 0x26, 0x9a, 0x77, 0xc9, 0x3b, 0x7c, 0x6e, + 0x7c, 0x65, 0x75, 0x58, 0x47, 0x32, 0x8c, 0xe2, 0x80, 0x9b, 0x74, 0xa0, + 0xff, 0xc7, 0x69, 0x90, 0x05, 0x5d, 0x02, 0x55, 0x29, 0x19, 0x14, 0x47, + 0x58, 0x67, 0x3d, 0x6f, 0x50, 0x90, 0xdd, 0x69, 0xad, 0xf3, 0xa2, 0x83, + 0xb2, 0xe0, 0xcf, 0xdd, 0xe3, 0x46, 0x0c, 0x87, 0x96, 0xe7, 0xec, 0x4f, + 0x4a, 0xcc, 0xb3, 0xa9, 0xe8, 0x87, 0x2e, 0xc7, 0x44, 0xd7, 0x05, 0xc4, + 0x7d, 0x35, 0x11, 0xdd, 0xa0, 0x9a, 0x7e, 0x8b, 0x38, 0x67, 0xc4, 0x38, + 0x5f, 0xcc, 0xcb, 0xd0, 0x48, 0x55, 0xde, 0x36, 0x19, 0xd1, 0xe2, 0x0e, + 0x38, 0x75, 0x86, 0x1a, 0x88, 0xa4, 0x0f, 0x67, 0x2d, 0x12, 0x17, 0x9b, + 0xad, 0xf5, 0xc8, 0x1f, 0xdc, 0x7a, 0x18, 0xe7, 0xa5, 0xf1, 0x58, 0x86, + 0x6a, 0x93, 0x24, 0x01, 0xd0, 0x57, 0xcf, 0xa3, 0x63, 0x08, 0x75, 0x06, + 0xc6, 0xe6, 0x4d, 0xe2, 0x2b, 0x1d, 0xfb, 0xe3, 0xc4, 0xe0, 0x63, 0x4a, + 0x3c, 0xd8, 0x68, 0x38, 0x9a, 0x26, 0x2f, 0x12, 0x61, 0xfe, 0xf1, 0x9e, + 0x7b, 0x81, 0x8f, 0x53, 0xd7, 0x03, 0xae, 0x9b, 0x53, 0x79, 0x73, 0x84, + 0x9d, 0x26, 0xb9, 0x7a, 0x8a, 0xb1, 0xe3, 0xb2, 0x25, 0x2c, 0x01, 0x43, + 0xe5, 0xb3, 0x38, 0x8c, 0x57, 0x7b, 0x71, 0x85, 0x61, 0xf9, 0xa8, 0xc1, + 0x9d, 0x09, 0x0d, 0x17, 0xe9, 0x43, 0xa8, 0xd1, 0x50, 0x3b, 0x26, 0xcb, + 0x67, 0xe8, 0xa7, 0xff, 0x6c, 0x70, 0x46, 0xf5, 0xaa, 0xa1, 0xcc, 0x33, + 0xea, 0xf0, 0x11, 0xc4, 0x55, 0x0a, 0xce, 0xb8, 0x8c, 0x5d, 0xd2, 0xce, + 0xbe, 0x12, 0xcc, 0x0d, 0x53, 0x5e, 0x14, 0x33, 0x0d, 0x24, 0x45, 0xa9, + 0x51, 0xfb, 0x52, 0x8b, 0x10, 0x8c, 0xcb, 0x79, 0x22, 0x56, 0x27, 0x34, + 0xc5, 0x9c, 0xcb, 0x4d, 0x35, 0x52, 0xc3, 0x54, 0x19, 0x2e, 0x8a, 0x03, + 0x3d, 0xb7, 0xaa, 0x0f, 0xb8, 0x9a, 0xe2, 0x16, 0x68, 0x90, 0x54, 0xae, + 0x0d, 0xa4, 0xa8, 0xc5, 0x7a, 0x03, 0x11, 0x06, 0x4e, 0x7c, 0x66, 0xc1, + 0x5d, 0xf1, 0x98, 0x36, 0xf8, 0x0b, 0x4f, 0xa2, 0x38, 0x25, 0x23, 0x5b, + 0x60, 0x43, 0xc6, 0xb8, 0xb7, 0x93, 0x7d, 0x29, 0x52, 0x03, 0xb9, 0x00, + 0x2f, 0x69, 0x7b, 0xbe, 0x88, 0x59, 0x48, 0x1b, 0xcf, 0xf0, 0x0c, 0x5e, + 0x16, 0x90, 0x30, 0xd9, 0x85, 0x3e, 0xb4, 0xb2, 0xb9, 0x24, 0xe6, 0x57, + 0xa1, 0xb4, 0x24, 0xf3, 0x4c, 0x36, 0xd0, 0xe2, 0x9a, 0x62, 0x79, 0x7a, + 0x4a, 0x43, 0x28, 0x2d, 0x69, 0xc3, 0x0c, 0x51, 0x2e, 0x6b, 0x53, 0xc4, + 0xe3, 0x9c, 0x55, 0xc5, 0xfb, 0x3c, 0x19, 0x10, 0x6f, 0x14, 0xb0, 0x6e, + 0x96, 0x27, 0x1c, 0xb4, 0xa6, 0xce, 0x07, 0x09, 0x64, 0x36, 0x84, 0x32, + 0xc7, 0x21, 0xbb, 0xfb, 0xec, 0x83, 0x75, 0x43, 0x45, 0x39, 0x69, 0x63, + 0x22, 0x67, 0x07, 0x09, 0xa8, 0x32, 0xda, 0x9c, 0xa6, 0x66, 0x48, 0x8c, + 0x06, 0x74, 0x69, 0x87, 0xb7, 0x8d, 0x9f, 0x34, 0x8c, 0x4b, 0x45, 0x76, + 0xfc, 0x90, 0x98, 0x64, 0x53, 0xba, 0x25, 0xc7, 0x93, 0x1d, 0x61, 0xba, + 0xe6, 0xa3, 0x1e, 0xd5, 0xd2, 0x84, 0x5e, 0x86, 0x36, 0x6b, 0x0c, 0x10, + 0x51, 0x23, 0x3c, 0xb2, 0x59, 0x72, 0x0f, 0x61, 0x5c, 0x22, 0xe0, 0xb6, + 0x2d, 0xe3, 0xc0, 0x62, 0x64, 0x41, 0x8e, 0x1a, 0x7d, 0xce, 0xb1, 0x08, + 0x03, 0x22, 0x4b, 0x0d, 0x96, 0x3b, 0x30, 0x62, 0xb8, 0x64, 0x53, 0x45, + 0x7b, 0xa8, 0x04, 0xbe, 0x05, 0x94, 0x99, 0xab, 0x84, 0x9d, 0xec, 0x61, + 0x9c, 0x10, 0x1b, 0xde, 0xfb, 0x5c, 0xac, 0xac, 0xa5, 0xb8, 0x5a, 0xb0, + 0x45, 0xcb, 0x21, 0xca, 0x35, 0x28, 0x09, 0x0c, 0x94, 0x5d, 0x43, 0x2a, + 0x58, 0x1c, 0xb6, 0x64, 0x4b, 0x7f, 0x36, 0xd8, 0x8e, 0x1e, 0x02, 0x90, + 0xdf, 0xd8, 0x34, 0x74, 0xb6, 0x61, 0x4d, 0xb5, 0x37, 0x78, 0x29, 0xa2, + 0x16, 0x40, 0x58, 0x8f, 0xaa, 0x7f, 0x0e, 0x70, 0x3d, 0x0b, 0x56, 0x51, + 0x17, 0x8a, 0x21, 0x57, 0x53, 0x14, 0x19, 0x13, 0xa6, 0x2e, 0x59, 0xa6, + 0x1a, 0xc8, 0x52, 0x2c, 0xb3, 0x8a, 0x70, 0x58, 0x24, 0xf2, 0x91, 0x8b, + 0xe5, 0x34, 0x52, 0x90, 0x98, 0xbb, 0xba, 0x07, 0x60, 0xdd, 0x76, 0x89, + 0xab, 0x98, 0x1a, 0xc3, 0x42, 0xab, 0x02, 0x78, 0xb1, 0x09, 0x83, 0x8f, + 0xd7, 0x98, 0xc1, 0x2f, 0x71, 0xc6, 0xe5, 0xb4, 0x19, 0xc2, 0x61, 0xcb, + 0x1a, 0xc9, 0x9b, 0x17, 0x3a, 0xa5, 0x3c, 0x56, 0x13, 0xac, 0xc6, 0xbc, + 0x41, 0xa3, 0xcb, 0xe4, 0x6c, 0xcf, 0x4e, 0xf3, 0xb7, 0xf4, 0xf4, 0x99, + 0x40, 0x64, 0x8a, 0xd6, 0xac, 0x21, 0xf1, 0x69, 0x10, 0xfd, 0x91, 0x08, + 0x4b, 0x2b, 0x65, 0x90, 0xb2, 0x12, 0x67, 0x00, 0x24, 0x92, 0xca, 0xb7, + 0xe1, 0x29, 0xc6, 0x44, 0x30, 0xbd, 0x4c, 0xa9, 0x11, 0xa5, 0x63, 0x33, + 0x64, 0xe3, 0x04, 0x73, 0xb3, 0xbd, 0x86, 0x94, 0x51, 0x34, 0xa9, 0x3a, + 0x83, 0x62, 0xc2, 0x06, 0xd1, 0x9a, 0xb6, 0x2c, 0xc9, 0x6e, 0xeb, 0x40, + 0x12, 0xa8, 0xc2, 0x18, 0x90, 0x05, 0x76, 0xa5, 0xac, 0x77, 0xb2, 0x88, + 0x12, 0x4a, 0x9e, 0xfd, 0x8a, 0xb3, 0x62, 0x84, 0x4f, 0x7d, 0x87, 0x3e, + 0x21, 0xb8, 0x46, 0x29, 0xb0, 0x17, 0x97, 0x67, 0x6d, 0x25, 0x53, 0x3d, + 0x0c, 0x21, 0xb4, 0x40, 0x02, 0x42, 0xcf, 0x06, 0xca, 0x4a, 0x93, 0x39, + 0xe8, 0xc3, 0x73, 0xe2, 0x8c, 0xb2, 0xce, 0x75, 0xb1, 0x2d, 0x54, 0xcf, + 0x70, 0x78, 0x9f, 0x5c, 0x56, 0x1a, 0x52, 0x31, 0x05, 0x21, 0x49, 0x60, + 0x7e, 0x2c, 0x17, 0xe5, 0xd0, 0xa0, 0x19, 0xb9, 0x5b, 0x8a, 0xa1, 0x61, + 0xf3, 0x9a, 0x6c, 0x93, 0xe7, 0xca, 0xa8, 0x03, 0xaa, 0x43, 0x7a, 0x5f, + 0x34, 0xe9, 0x96, 0x2d, 0x52, 0x0f, 0x49, 0xb7, 0x2e, 0xf3, 0x4c, 0x9d, + 0x7c, 0x80, 0x15, 0xa1, 0x54, 0x41, 0x0c, 0x29, 0x38, 0x1f, 0x41, 0x7a, + 0xdb, 0x26, 0x98, 0xf2, 0x37, 0x34, 0xcb, 0x29, 0x57, 0x08, 0x53, 0xb7, + 0xa9, 0x62, 0x22, 0x57, 0x35, 0xa8, 0x5d, 0x66, 0xc0, 0x17, 0x13, 0x78, + 0xe1, 0xf0, 0xa5, 0x2e, 0x75, 0x25, 0x1b, 0x51, 0x2e, 0xd0, 0x61, 0x08, + 0x2e, 0x95, 0x9e, 0x04, 0x62, 0x3b, 0x0f, 0x06, 0xa5, 0x70, 0x50, 0x32, + 0xc3, 0x31, 0x29, 0xc9, 0x53, 0xa6, 0xec, 0x2a, 0x75, 0xcc, 0x21, 0xe1, + 0x14, 0xf6, 0x98, 0x5b, 0xff, 0x79, 0x83, 0x7b, 0xb4, 0x76, 0xb6, 0xeb, + 0xc8, 0x50, 0x46, 0x1c, 0x28, 0xd4, 0xae, 0x31, 0x56, 0x66, 0xdd, 0xcd, + 0xf4, 0xfe, 0x18, 0x5e, 0xb6, 0x12, 0x39, 0x7e, 0x63, 0x56, 0x9a, 0xfa, + 0x88, 0x4e, 0x68, 0x19, 0x42, 0x9b, 0xb3, 0x25, 0x10, 0x4e, 0x4d, 0x5a, + 0x8a, 0x83, 0xa2, 0x77, 0x13, 0xb5, 0x0e, 0x8b, 0xdc, 0x06, 0x30, 0x91, + 0xb6, 0x06, 0xa2, 0x98, 0xad, 0x8f, 0x4d, 0xee, 0x24, 0xef, 0x24, 0x83}, + // ciphertext + {0xb3, 0x52, 0xd5, 0xa6, 0xe2, 0xea, 0xdc, 0x64, 0x08, 0x65, 0xe1, 0x02, + 0x61, 0x5d, 0xb6, 0x48, 0xc6, 0x48, 0xea, 0x3b, 0x16, 0x46, 0xdd, 0xce, + 0xa1, 0x61, 0x1f, 0xe6, 0xf0, 0x8c, 0x7e, 0xe3, 0x6e, 0x6a, 0x84, 0xe3, + 0xb3, 0x89, 0xbb, 0xc5, 0x9c, 0xd6, 0x75, 0x59, 0xe3, 0xd3, 0x04, 0xaf, + 0x8d, 0xc1, 0x39, 0xcf, 0xe8, 0xc2, 0x62, 0x13, 0x4b, 0xef, 0x89, 0xa8, + 0xb2, 0xda, 0x20, 0xf1, 0xfa, 0xc6, 0xf1, 0x05, 0x9d, 0x7f, 0x49, 0xc7, + 0xd5, 0x3a, 0xaf, 0xeb, 0x1e, 0xc9, 0xd5, 0x07, 0xa1, 0xcd, 0x17, 0x1d, + 0x12, 0x9f, 0xcc, 0x74, 0xe7, 0x57, 0x99, 0x5b, 0x38, 0x02, 0x32, 0x45, + 0xae, 0x17, 0x5a, 0xd9, 0xe0, 0xdc, 0xe6, 0x40, 0x75, 0x67, 0xae, 0x07, + 0x34, 0x67, 0x65, 0x67, 0xc6, 0x2e, 0x01, 0x9e, 0x94, 0xa0, 0x33, 0xbf, + 0x75, 0x59, 0x3b, 0xf8, 0xa5, 0x8b, 0x90, 0x77, 0x50, 0xc5, 0x61, 0x21, + 0x8c, 0x15, 0xfe, 0x34, 0x5f, 0xe2, 0x7d, 0x04, 0x39, 0x33, 0x19, 0x88, + 0xbd, 0x61, 0xc2, 0x75, 0x5d, 0x51, 0x47, 0xd8, 0xad, 0xba, 0x19, 0xe1, + 0x1b, 0x25, 0xb3, 0x59, 0x8f, 0x51, 0x2d, 0x75, 0x25, 0x69, 0x41, 0x50, + 0x44, 0x4b, 0x71, 0x4d, 0x90, 0x0f, 0x85, 0x96, 0x5c, 0x87, 0x0d, 0xa5, + 0x05, 0xe0, 0x87, 0xab, 0xb2, 0xfb, 0x6f, 0xbb, 0x14, 0x39, 0xa0, 0xe7, + 0x46, 0x64, 0xf8, 0x08, 0x7d, 0x34, 0x1c, 0x7a, 0xda, 0xa5, 0xea, 0x54, + 0xaf, 0xf9, 0x8d, 0x72, 0x5b, 0x23, 0x56, 0x40, 0xd8, 0x91, 0x19, 0xa0, + 0xcd, 0xe2, 0xd2, 0xdb, 0x1e, 0x08, 0xc9, 0xda, 0xcd, 0x63, 0x65, 0xde, + 0x79, 0xb7, 0x54, 0xd8, 0x8e, 0xe9, 0xf7, 0x5b, 0xc4, 0xe3, 0x35, 0x75, + 0x07, 0xaa, 0x65, 0x2c, 0x84, 0xd5, 0xee, 0xe0, 0x42, 0xbc, 0xe3, 0xb2, + 0x50, 0xab, 0x16, 0xc1, 0xe9, 0x99, 0x5d, 0x2f, 0xc6, 0x5f, 0x09, 0x7f, + 0xdf, 0x3f, 0x01, 0x93, 0x78, 0xae, 0x0d, 0xce, 0xd0, 0x7e, 0xaa, 0x0d, + 0xef, 0xfd, 0xbe, 0xf2, 0xcf, 0x7f, 0x66, 0xc3, 0x52, 0x2e, 0xcb, 0x7b, + 0xf4, 0xcc, 0xda, 0x07, 0xc3, 0x54, 0x93, 0x1a, 0x6d, 0xcf, 0x7f, 0x75, + 0x9a, 0x41, 0xc5, 0xdd, 0xc1, 0x7a, 0x59, 0x27, 0xc8, 0xdd, 0x45, 0x23, + 0x25, 0xdb, 0x02, 0x3b, 0x63, 0x2d, 0x1d, 0x54, 0x78, 0x62, 0x3e, 0x64, + 0x1c, 0x98, 0x45, 0x72, 0x5e, 0x40, 0x31, 0xd7, 0x77, 0xbd, 0xb3, 0xe8, + 0x86, 0xef, 0xd0, 0x91, 0xd2, 0xa6, 0x54, 0x95, 0x9e, 0xa8, 0x41, 0xa3, + 0x94, 0xb2, 0x62, 0x01, 0x66, 0xb0, 0xe3, 0x9d, 0x5d, 0x53, 0xbf, 0x98, + 0xf3, 0x7f, 0x6e, 0xc4, 0x5f, 0xdc, 0x10, 0x23, 0x6b, 0x87, 0x04, 0x77, + 0x1e, 0x51, 0x8f, 0xd0, 0xc9, 0x58, 0x1d, 0x81, 0xc0, 0xa7, 0x80, 0x1d, + 0xf1, 0x29, 0xbf, 0x7d, 0x8e, 0xad, 0x32, 0xf9, 0xbf, 0x82, 0x90, 0xf9, + 0x0d, 0x3c, 0xfe, 0x1c, 0xbc, 0x0c, 0xd9, 0xcd, 0x0a, 0xee, 0xd6, 0xf3, + 0x7d, 0xf0, 0x4a, 0xdb, 0x35, 0x4d, 0xd1, 0x8c, 0xcb, 0xbe, 0xf4, 0x10, + 0x0f, 0xdd, 0xe5, 0x10, 0x2b, 0xfd, 0x99, 0x65, 0xb3, 0xa3, 0x73, 0xe9, + 0xce, 0x47, 0xcd, 0x42, 0x08, 0xa1, 0xc6, 0xcd, 0xe5, 0x62, 0xd2, 0x0d, + 0xbf, 0xab, 0xc4, 0x5b, 0x55, 0x3d, 0xc0, 0x41, 0x1e, 0x6e, 0xbe, 0x45, + 0x21, 0x9b, 0x16, 0xdd, 0x0b, 0xfd, 0xe0, 0xf5, 0xba, 0x82, 0x39, 0x92, + 0x3f, 0xab, 0x5c, 0xc5, 0xf7, 0x96, 0xbd, 0x56, 0x3b, 0x75, 0xbc, 0x10, + 0xd4, 0x52, 0x17, 0xc1, 0xbf, 0xd0, 0x5b, 0xde, 0x23, 0xce, 0xde, 0x44, + 0x30, 0x4f, 0x3b, 0x46, 0x44, 0xce, 0x3b, 0xd6, 0x71, 0x9c, 0x25, 0x83, + 0x87, 0xd2, 0xf6, 0x84, 0x75, 0x8c, 0x6e, 0x2d, 0x89, 0xbd, 0xff, 0xc4, + 0x98, 0xea, 0x51, 0x8c, 0xe4, 0x7a, 0x7e, 0x18, 0x8e, 0x87, 0xf6, 0x4c, + 0xbb, 0xed, 0x10, 0xd2, 0x77, 0x32, 0xe6, 0x51, 0x55, 0x78, 0x55, 0x82, + 0x7b, 0xf8, 0xf5, 0x01, 0x4e, 0x5a, 0xf3, 0xe4, 0xff, 0x06, 0x51, 0x0d, + 0xec, 0x0f, 0x7f, 0x48, 0xbe, 0xc6, 0x6c, 0x97, 0x31, 0xad, 0x5c, 0xa8, + 0xd1, 0x1d, 0x5c, 0x1b, 0x6b, 0x3e, 0x6c, 0x4d, 0x10, 0x24, 0xb4, 0x1e, + 0xa4, 0x89, 0x99, 0x19, 0x92, 0x7f, 0x3f, 0xbd, 0x8a, 0x3f, 0x8e, 0x89, + 0xce, 0x54, 0xba, 0x83, 0xc8, 0xda, 0x84, 0x06, 0x11, 0xcb, 0x16, 0xa4, + 0x39, 0xe0, 0x04, 0xd4, 0x86, 0xe0, 0x8b, 0x8f, 0xee, 0xc8, 0xb0, 0xba, + 0x65, 0xea, 0xed, 0x6a, 0x1a, 0x08, 0xfb, 0xfc, 0x4c, 0x2d, 0x63, 0xbb, + 0x6a, 0x7e, 0xa0, 0xee, 0xd6, 0x78, 0x19, 0x77, 0x36, 0x87, 0x75, 0x99, + 0xaa, 0x96, 0xe8, 0xf2, 0x7b, 0xfd, 0xbb, 0x9a, 0x21, 0x7e, 0x97, 0xb6, + 0x94, 0xdb, 0x2b, 0x60, 0x4f, 0x4f, 0x2c, 0xbd, 0xce, 0x7d, 0xbd, 0xf3, + 0x49, 0x96, 0x0b, 0x8e, 0x9a, 0x03, 0x63, 0x17, 0xf7, 0x33, 0x9d, 0xed, + 0x78, 0xec, 0xe6, 0xcb, 0xea, 0x91, 0x48, 0x63, 0x6a, 0xea, 0x5a, 0x2b, + 0xa7, 0xf2, 0xb8, 0x4c, 0xde, 0x87, 0xbc, 0xb6, 0x56, 0xa0, 0xe4, 0xb8, + 0xb5, 0x35, 0x14, 0x07, 0xf9, 0x09, 0x46, 0x86, 0x90, 0x9b, 0x2e, 0x7d, + 0xf8, 0x5e, 0x42, 0x53, 0x52, 0xb7, 0xf9, 0x5f, 0x7a, 0xbe, 0xe4, 0x24, + 0x38, 0x63, 0xf9, 0xc1, 0x34, 0xe1, 0x83, 0x6a, 0xa2, 0x81, 0xd7, 0x07, + 0x55, 0xf6, 0x6e, 0x6a, 0x4a, 0x3b, 0x6e, 0x8a, 0x2f, 0x77, 0x65, 0xd4, + 0x36, 0x12, 0x9f, 0x71, 0x95, 0x99, 0xa0, 0xc0, 0x1e, 0x9c, 0x97, 0x98, + 0xcc, 0x77, 0x8f, 0xc7, 0x71, 0xac, 0xd5, 0x06, 0x7e, 0x9e, 0x9e, 0x1e, + 0xfb, 0xa1, 0xf0, 0x4c, 0x36, 0x7e, 0xfc, 0xa7, 0x6e, 0x9c, 0x32, 0xe1, + 0x14, 0x5e, 0x49, 0xa6, 0xad, 0x2d, 0x9e, 0x2b, 0x02, 0x5f, 0xdc, 0x0e, + 0xc7, 0x1f, 0x51, 0x0b, 0x2d, 0x61, 0xc8, 0x3c, 0xb7, 0xd2, 0x15, 0xcd, + 0x30, 0x6d, 0x9e, 0xbf, 0x2d, 0x60, 0x83, 0xf1, 0x9e, 0xf8, 0xab, 0xb7, + 0xb3, 0xe4, 0x6a, 0x72, 0x8c, 0x5a, 0x25, 0xa5, 0x33, 0x3e, 0x48, 0xeb, + 0x21, 0x92, 0xcc, 0xb0, 0x26, 0xba, 0xf1, 0x43, 0xd6, 0x24, 0x78, 0xe2, + 0x39, 0x53, 0xc1, 0x31, 0xdb, 0x0f, 0xce, 0xdf, 0xff, 0x17, 0x63, 0x7d, + 0x68, 0x5a, 0xdf, 0xcf, 0x3b, 0x99, 0x4a, 0xcc, 0x83, 0x16, 0x07, 0x51, + 0x6d, 0xca, 0x26, 0x95, 0x28, 0x3d, 0xad, 0x5e, 0x10, 0xd3, 0xb2, 0x0f, + 0x9f, 0x73, 0x66, 0xf0, 0x07, 0x6f, 0x22, 0x7e, 0xc2, 0x44, 0x8d, 0x84, + 0x0f, 0x32, 0xcc, 0xa5, 0x2d, 0x36, 0x4a, 0x19, 0x12, 0xd5, 0x69, 0xbe, + 0x14, 0xe7, 0x4a, 0x6d, 0xc4, 0xb4, 0x54, 0x3f, 0xb3, 0x41, 0x1b, 0xc0, + 0xc1, 0xa3, 0xba, 0xbd, 0xa8, 0xfc, 0x6f, 0x0c, 0x4d, 0x20, 0xbb, 0x36, + 0xc8, 0xb5, 0xa7, 0xfc, 0x8f, 0x41, 0x04, 0xa1, 0x07, 0x79, 0xac, 0x83, + 0x75, 0xcb, 0x17, 0x4e, 0x13, 0x66, 0xdb, 0x21, 0x39, 0x17, 0xdc, 0x43, + 0x40, 0x57, 0x01, 0x92, 0xc5, 0x74, 0x31, 0x06, 0x7c, 0x07, 0x40, 0xa8, + 0x6b, 0xb3, 0x42, 0xdf, 0xfa, 0x8e, 0x36, 0xbe, 0xc9, 0xbf, 0x55, 0x4b, + 0x36, 0x83, 0x9b, 0x7d, 0x1f, 0x57, 0x2c, 0x12, 0x92, 0x8a, 0x19, 0x74, + 0x03, 0xb6, 0xb7, 0x81, 0x4d, 0x8b, 0xd8, 0x3e, 0xc2, 0x3f, 0xf3, 0x5e, + 0x44, 0x75, 0xc8, 0x19, 0x8d, 0x7c, 0x8e, 0xb6, 0xb9, 0xaf, 0xdd, 0x4a, + 0x9d, 0xa5, 0x83, 0xf5, 0xf9, 0x2c, 0x5c, 0x4f, 0x04, 0x85, 0x94, 0xec, + 0xda, 0xdd, 0x26, 0x05, 0x7b, 0xa4, 0xc9, 0x89, 0xe0, 0x8c, 0x8e, 0x80, + 0x0a, 0x9e, 0x8a, 0x7d, 0xbf, 0xf4, 0x49, 0x4a, 0x33, 0xfb, 0xa3, 0x36, + 0xbd, 0x60, 0x78, 0x9d, 0x6c, 0xaa, 0x32, 0x77, 0x82, 0x34, 0x62, 0x42, + 0x1c, 0xaf, 0x63, 0xc2, 0x93, 0x7e, 0x16, 0xcd, 0xdc, 0xc5, 0xcc, 0x06, + 0x68, 0xe4, 0x9f, 0x75, 0xbf, 0xb9, 0x6e, 0x02, 0x93, 0x48, 0x2a, 0xbe, + 0x5f, 0xd1, 0x88, 0xda, 0x96, 0x1e, 0xb1, 0x11, 0x6b, 0x3b, 0x2d, 0x21, + 0x55, 0x72, 0x5a, 0x8e, 0x52, 0xd2, 0x5e, 0xfe, 0x3c, 0x2d, 0x69, 0x65, + 0xa2, 0xeb, 0x62, 0xa2, 0x0b, 0xc6, 0x40, 0xb4, 0xe1, 0x72, 0xac, 0xf6, + 0xdc, 0xb2, 0xe8, 0x5e, 0xa9, 0x9a, 0x3e, 0x0a, 0xd7, 0x11, 0xf0, 0xfb, + 0x45, 0x08, 0x4f, 0x3d, 0xc3, 0xc4, 0x33, 0x17, 0x9c, 0x4c, 0x6b, 0xe3, + 0x11, 0xa1, 0x90, 0x9d, 0xc0, 0x97, 0xc9, 0x11, 0xc6, 0x66, 0xf7, 0x86, + 0x78, 0xff, 0xf7, 0x1d, 0x34, 0x2d, 0x16, 0x61, 0xf0, 0x7a, 0x14, 0xaf, + 0xa2, 0xdd, 0x8a, 0x6d, 0x66, 0xae, 0xe7, 0xa4, 0xc5, 0xc4, 0xca, 0x2b, + 0x8b, 0x77, 0xde, 0x19, 0xb5, 0x3e, 0x31, 0xdc, 0x61, 0x41, 0x59, 0x37, + 0xb6, 0x76, 0xa1, 0x3b, 0xd1, 0xea, 0xdf, 0x11, 0xa7, 0xf7, 0x30, 0x20, + 0x22, 0xeb, 0x41, 0xe1, 0x47, 0xde, 0x8f, 0xd1, 0xc2, 0xd7, 0x1d, 0xb8, + 0x07, 0x78, 0xb1, 0xdb, 0x2d, 0x37, 0x8b, 0x21, 0x1e, 0xa0, 0x4f, 0x35, + 0x08, 0x7f, 0xce, 0x5a, 0x98, 0xf3, 0xd2, 0xf4, 0x0d, 0xb1, 0x31, 0x32, + 0xc4, 0xe1, 0xb3, 0xb5, 0x02, 0x41, 0xa7, 0x0a, 0x44, 0xe5, 0x82, 0x9d, + 0xbb, 0x56, 0x2e, 0x35, 0x0f, 0xd0, 0x12, 0x83, 0xce, 0xb7, 0x43, 0xfa, + 0x0c, 0x5b, 0x72, 0xa8, 0xa5, 0x83, 0x5b, 0x9f, 0xde, 0x77, 0xaa, 0x23, + 0xff, 0x6f, 0x01, 0x6e, 0xab, 0xf5, 0x7a, 0x25, 0x6c, 0x57, 0x2a, 0xd3, + 0x72, 0x74, 0x55, 0xa1, 0x03, 0x11, 0xfd, 0x7d, 0x1d, 0xa6, 0x48, 0x3c, + 0x70, 0x81, 0x0a, 0xa4, 0x78, 0x60, 0x43, 0x6c, 0xc4, 0x21, 0x6a, 0x90, + 0x46, 0x0b, 0x0b, 0xfa, 0x8b, 0x98, 0xd4, 0x9f, 0xdb, 0x34, 0x33, 0xd0, + 0xee, 0xe6, 0x53, 0x56, 0xd0, 0x0a, 0x05, 0xf0, 0x27, 0xc4, 0xa0, 0xc9, + 0x40, 0x9a, 0xf7, 0x2d, 0x0e, 0x1c, 0x3e, 0x89, 0xe1, 0x2a, 0x38, 0x3e, + 0x2a, 0xd5, 0x95, 0x6c, 0x5a, 0x7d, 0xb0, 0x16, 0x46, 0x13, 0x46, 0x7e, + 0xe7, 0x40, 0x4b, 0xe8, 0x02, 0x5d, 0x99, 0xcd, 0xcb, 0x59, 0xd9, 0xd7, + 0x01, 0xb1, 0x19, 0xb1, 0x6f, 0x3e, 0x46, 0x29, 0x78, 0x85, 0x0e, 0x8d, + 0xba, 0x8a, 0xb0, 0x8b, 0x88, 0xe2, 0xbd, 0xa0, 0x7d, 0xa6, 0x8a, 0xbd, + 0x89, 0x71, 0x1a, 0x08, 0x6b, 0x82, 0x52, 0x98, 0xc8, 0xaa, 0xc9, 0x16, + 0x6d, 0x69, 0x36, 0xd3, 0xe4, 0xf1, 0xe0, 0x94, 0x52, 0x85, 0x3e, 0xfe, + 0x67, 0x00, 0xd1, 0x26, 0xd1, 0x7b, 0xcf, 0x6f, 0x0d, 0x82, 0x43, 0x4c, + 0xd9, 0xf1, 0x53, 0xfa, 0xd3, 0x57, 0x3e, 0x20, 0xd3, 0x5b, 0xcd, 0xba, + 0xf3, 0x5d, 0x66, 0x43, 0x09, 0xa2, 0xb9, 0xfa, 0x21, 0x99, 0x6c, 0xaa, + 0x29, 0xc9, 0xb1, 0x1f, 0xaa, 0x3a, 0x22, 0x46, 0x7d, 0xc1, 0xe5, 0xc9, + 0xa9, 0x86, 0xe2, 0x25, 0xd1, 0x99, 0x73, 0x2b, 0x5b, 0x24, 0x8a, 0x38, + 0x58, 0x7b, 0x2d, 0x0e, 0x44, 0x19, 0x89, 0x17, 0x05, 0x09, 0xe6, 0x93, + 0xc1, 0x96, 0x6d, 0xa3, 0xde, 0xae, 0xe3, 0x5c, 0x92, 0x7d, 0xb6, 0xef, + 0xbb, 0xd4, 0x48, 0x6c, 0x6e, 0xc5, 0x70, 0x43, 0x7e, 0x38, 0x79, 0x59, + 0x6a, 0x1f, 0x7a, 0x3e, 0xc3, 0xf4, 0x87, 0x97, 0x82, 0xf2, 0xf2, 0x1c, + 0xdf, 0xba, 0x09, 0x45, 0xf9, 0x9b, 0xac, 0xba, 0xdd, 0x25, 0xbf, 0x1f, + 0x25, 0xb6, 0xc5, 0xb6, 0xbf, 0x85, 0x39, 0x01, 0xda, 0xb0, 0x79, 0x34, + 0x19, 0xc5, 0x43, 0xcf, 0x52, 0x52, 0x5d, 0x75, 0x9c, 0x1b, 0x0e, 0x89, + 0x9e, 0xbb, 0xd0, 0xe9, 0x94, 0xc3, 0x9e, 0xc7}, + // secret + {0x90, 0xde, 0xdd, 0x24, 0x59, 0x0f, 0xed, 0xff, 0x42, 0xa2, 0x7a, + 0xb4, 0x41, 0x73, 0xe0, 0x71, 0x18, 0x39, 0xec, 0x9d, 0x15, 0x72, + 0x8d, 0x7a, 0x0c, 0x19, 0x1c, 0xe6, 0xce, 0x5c, 0xbc, 0x68}, + true}, + // tcID: 100 + {100, + params_ml_kem1024_test_mode, + // privateKey + {0x63, 0x06, 0x6a, 0x49, 0xc5, 0x05, 0xa3, 0xd5, 0x48, 0xd5, 0xb3, 0x48, + 0xd4, 0xfa, 0x84, 0xe0, 0x6b, 0x3c, 0xc9, 0x5b, 0x8b, 0x0c, 0xb0, 0x82, + 0x89, 0xb2, 0x8a, 0xf7, 0xac, 0x49, 0xc7, 0xe6, 0x38, 0x27, 0x79, 0x35, + 0x1b, 0x27, 0x61, 0x6d, 0xa6, 0x7d, 0x79, 0x43, 0x2b, 0xae, 0xe3, 0x25, + 0x95, 0xfa, 0x78, 0x9e, 0x73, 0x71, 0xe6, 0xf3, 0x39, 0xb2, 0x2b, 0x68, + 0x41, 0x5b, 0x84, 0x4c, 0x00, 0x74, 0xed, 0x22, 0x79, 0xd3, 0xa2, 0x2c, + 0x6a, 0x62, 0xc9, 0x19, 0x40, 0x76, 0x00, 0x47, 0xcd, 0xce, 0x9c, 0x71, + 0xe4, 0x68, 0x04, 0x72, 0xa0, 0xc1, 0x2b, 0xb9, 0x51, 0xe5, 0xeb, 0xa5, + 0x8a, 0x54, 0x2f, 0x25, 0x93, 0x67, 0xdb, 0x13, 0x26, 0x3c, 0xc1, 0x86, + 0x29, 0x64, 0xb2, 0x38, 0x39, 0x60, 0xd8, 0x56, 0x8c, 0x69, 0x24, 0x63, + 0xe9, 0x96, 0x66, 0x5a, 0xb9, 0x8c, 0x7b, 0x65, 0xc8, 0xb9, 0x58, 0xbe, + 0x3f, 0x26, 0xca, 0xc8, 0x55, 0xa2, 0x78, 0x0b, 0x6d, 0xcb, 0x4a, 0xa4, + 0x99, 0x50, 0x26, 0x4d, 0xcb, 0x70, 0xf3, 0x57, 0x05, 0xfc, 0x28, 0xce, + 0xd4, 0xda, 0x10, 0xfd, 0x17, 0x16, 0xe0, 0xc8, 0x5d, 0xca, 0x17, 0xba, + 0x85, 0xf6, 0x0b, 0xb5, 0x4a, 0x51, 0x4c, 0x89, 0x45, 0x8a, 0xbc, 0xbf, + 0xb9, 0x5a, 0x13, 0x1c, 0x91, 0x2a, 0x4f, 0x89, 0xa3, 0xbd, 0x54, 0xcc, + 0x43, 0x46, 0x63, 0xf3, 0x88, 0x8d, 0x8c, 0x86, 0x74, 0x0b, 0x62, 0x87, + 0x0b, 0x07, 0xb6, 0xfa, 0xea, 0x30, 0xc3, 0x62, 0x3c, 0x8d, 0x4a, 0x67, + 0x79, 0x76, 0xbb, 0x75, 0x74, 0xbe, 0x32, 0x33, 0x6b, 0xae, 0x6b, 0x42, + 0x10, 0xc4, 0x8b, 0xe5, 0x04, 0x11, 0xee, 0xac, 0x7d, 0x40, 0xeb, 0xa8, + 0xf6, 0x9a, 0x24, 0x6c, 0x54, 0x89, 0xaa, 0x99, 0x8b, 0x2f, 0x56, 0xc0, + 0xcb, 0x8c, 0xa4, 0xda, 0x16, 0xb1, 0xa6, 0x49, 0xa4, 0x1b, 0x94, 0xcc, + 0x00, 0xbd, 0x64, 0x20, 0xb4, 0xce, 0x35, 0x61, 0x37, 0xb4, 0x41, 0x55, + 0x9c, 0xcb, 0xb6, 0xb7, 0x29, 0xa1, 0x91, 0x21, 0x07, 0x18, 0x32, 0x31, + 0xd8, 0x02, 0xa5, 0x75, 0xd5, 0x90, 0xbf, 0x6a, 0x73, 0x88, 0xe2, 0xaa, + 0xcd, 0x52, 0x19, 0x30, 0x19, 0x12, 0x37, 0x62, 0x8f, 0x6f, 0x11, 0x47, + 0x55, 0x0b, 0x21, 0xcd, 0x57, 0x4d, 0x3e, 0xbb, 0x04, 0xe5, 0xa1, 0x2d, + 0x5d, 0x8c, 0x2c, 0x9e, 0x22, 0x3e, 0xdf, 0x66, 0xb9, 0xfd, 0xe9, 0x98, + 0x65, 0x03, 0x26, 0x34, 0x35, 0xa0, 0x70, 0x86, 0x0b, 0x9e, 0x4a, 0xc5, + 0xf2, 0x2a, 0x0c, 0x52, 0x87, 0xa7, 0x52, 0x07, 0x97, 0xd9, 0x69, 0x55, + 0x5a, 0x70, 0xc5, 0xf5, 0x4c, 0xb5, 0xaa, 0x06, 0xbc, 0x8a, 0xc2, 0x53, + 0x72, 0x9b, 0x5b, 0xc2, 0x05, 0xcd, 0x22, 0x71, 0x36, 0x45, 0x45, 0x5e, + 0x67, 0x46, 0x51, 0xcd, 0x33, 0x27, 0x68, 0x08, 0x93, 0xdc, 0xd5, 0x3c, + 0x72, 0x6b, 0x67, 0xa3, 0x80, 0x63, 0x49, 0xc1, 0x02, 0xc6, 0x80, 0x70, + 0xc5, 0xe5, 0x6d, 0x8b, 0x60, 0x19, 0x59, 0xfb, 0xaf, 0xdb, 0x89, 0x43, + 0xe0, 0xa6, 0x3c, 0x42, 0x00, 0x2e, 0x3d, 0x29, 0xae, 0x59, 0x27, 0x17, + 0x25, 0xf9, 0x2a, 0x85, 0xa0, 0x7f, 0x2f, 0x34, 0x7d, 0x82, 0x4c, 0x1a, + 0xf6, 0x8b, 0xb6, 0xe2, 0x42, 0xb2, 0x46, 0x60, 0x65, 0xc7, 0x91, 0x90, + 0x33, 0x71, 0xa7, 0x02, 0xc4, 0xab, 0x99, 0xd4, 0x4a, 0x79, 0x00, 0x2f, + 0xb8, 0x54, 0x01, 0x49, 0xf6, 0x61, 0x63, 0x98, 0xa3, 0xf2, 0x88, 0x3d, + 0x63, 0xdb, 0xb9, 0x64, 0x10, 0x6c, 0x82, 0x8a, 0x56, 0xa4, 0x48, 0x1d, + 0xf1, 0xa0, 0x3d, 0xb6, 0x76, 0x5a, 0xe4, 0x74, 0xa0, 0x31, 0x78, 0x71, + 0x41, 0xe9, 0x6a, 0xba, 0xa0, 0x2c, 0x25, 0x33, 0x82, 0x6b, 0xf4, 0x38, + 0x61, 0xf5, 0x79, 0x8d, 0x2b, 0x57, 0xd5, 0x61, 0x46, 0x41, 0x99, 0x3f, + 0x91, 0x90, 0x91, 0x0f, 0x73, 0x1f, 0xe3, 0x13, 0x03, 0x04, 0xe1, 0x2d, + 0x6f, 0x38, 0x80, 0x88, 0x40, 0x1b, 0xf6, 0xdb, 0x33, 0x14, 0xb2, 0x63, + 0x0b, 0xc3, 0x22, 0x67, 0x81, 0x65, 0xf1, 0x88, 0x6d, 0xca, 0x34, 0xca, + 0x81, 0x61, 0x6f, 0x7f, 0xea, 0x84, 0x4c, 0x01, 0x51, 0x4b, 0xa9, 0xab, + 0x42, 0xa2, 0xc2, 0x39, 0x01, 0x93, 0x0c, 0xc3, 0x65, 0x97, 0x8a, 0x9e, + 0x45, 0x45, 0x77, 0x6c, 0x77, 0x91, 0x00, 0x78, 0x4d, 0x5d, 0xa3, 0x98, + 0x6e, 0xe6, 0x77, 0x32, 0x9a, 0x4f, 0x45, 0x99, 0x1a, 0x24, 0xb5, 0x7c, + 0x18, 0xcb, 0x7a, 0xb1, 0x18, 0x7a, 0xe6, 0x20, 0x76, 0x1e, 0xa0, 0x8f, + 0x14, 0x97, 0x6e, 0x32, 0x0b, 0x4b, 0xbb, 0x8b, 0x1a, 0x11, 0xfc, 0xcf, + 0xfd, 0x6a, 0x44, 0x0f, 0xa3, 0x58, 0xc3, 0x95, 0xbb, 0x1b, 0xa7, 0x34, + 0x6b, 0x3b, 0x42, 0x68, 0x21, 0xc8, 0x14, 0x4a, 0x48, 0xd9, 0x3a, 0x91, + 0x24, 0x42, 0x21, 0x54, 0xd4, 0x30, 0xb4, 0x16, 0x7e, 0xb0, 0x9b, 0x22, + 0x36, 0xb8, 0xc4, 0x65, 0x57, 0xbf, 0xb5, 0x45, 0xb4, 0x88, 0xf8, 0x08, + 0x75, 0x73, 0x3b, 0x01, 0x38, 0x11, 0xf0, 0x49, 0x64, 0x2d, 0xe4, 0x83, + 0x30, 0x3a, 0xbc, 0x8f, 0x43, 0xbb, 0x0d, 0x88, 0x4c, 0xeb, 0x8c, 0x5f, + 0x53, 0x9c, 0x90, 0x73, 0xe4, 0x88, 0xb9, 0x5a, 0x19, 0xa4, 0xf1, 0x07, + 0x55, 0x9b, 0xc0, 0x56, 0x53, 0x3b, 0x40, 0x9b, 0x9c, 0x32, 0xec, 0x14, + 0xe3, 0x5c, 0x8f, 0x05, 0x73, 0x0a, 0x59, 0x27, 0x23, 0x99, 0xa5, 0x62, + 0x6f, 0x13, 0xc2, 0xa2, 0x01, 0x98, 0xf5, 0x44, 0x60, 0xf8, 0xa6, 0x89, + 0xbf, 0xb1, 0x01, 0xc3, 0xc5, 0x63, 0x1f, 0x61, 0xca, 0x8e, 0xf6, 0x17, + 0x74, 0xbb, 0x51, 0xef, 0x3a, 0xc2, 0x0e, 0x16, 0xbc, 0x11, 0xfc, 0x09, + 0x7f, 0x05, 0x5b, 0x45, 0xc1, 0x39, 0x11, 0xac, 0xc3, 0x76, 0x46, 0xaa, + 0x5e, 0x4c, 0x3b, 0x6b, 0x98, 0xa6, 0xbd, 0x82, 0x44, 0x7e, 0x83, 0xb3, + 0x31, 0x28, 0x97, 0x97, 0x21, 0x6a, 0xf4, 0x82, 0x47, 0x25, 0xc7, 0xc8, + 0x09, 0x76, 0x8c, 0x2e, 0xe5, 0x6a, 0xab, 0x99, 0x1f, 0x84, 0xc1, 0x05, + 0x6a, 0x06, 0x92, 0x55, 0xf0, 0xb8, 0xf1, 0x48, 0x52, 0xf8, 0xf5, 0xc6, + 0xa6, 0xf4, 0x78, 0x49, 0xd7, 0xbc, 0x66, 0x7a, 0x44, 0xf4, 0x88, 0xb6, + 0x69, 0x18, 0x29, 0x4a, 0x08, 0x4b, 0x7a, 0x47, 0xc1, 0x84, 0x33, 0x19, + 0x8a, 0xa2, 0x4a, 0xe0, 0xb5, 0x16, 0xd8, 0xca, 0xc1, 0x8b, 0xa5, 0xab, + 0x03, 0xe8, 0x2f, 0x60, 0x77, 0x01, 0xc5, 0x3c, 0x45, 0x08, 0x12, 0x94, + 0x78, 0x07, 0xcd, 0xca, 0x4a, 0x08, 0x8e, 0xf3, 0x7a, 0xea, 0xc3, 0xb7, + 0xc3, 0xb8, 0x85, 0x51, 0x5b, 0xa0, 0xe3, 0x45, 0x93, 0xa4, 0x2c, 0x22, + 0x1a, 0x74, 0x72, 0x08, 0x64, 0xb6, 0x73, 0xe7, 0x92, 0xd0, 0x30, 0xbd, + 0x16, 0x1c, 0x86, 0xc8, 0x56, 0x4d, 0x3f, 0x3c, 0x3d, 0xcb, 0x04, 0xc9, + 0x30, 0xec, 0x68, 0xd4, 0x2a, 0x4b, 0xfe, 0xb9, 0x02, 0x70, 0xfb, 0x18, + 0x2a, 0x93, 0x71, 0xe6, 0x58, 0x8c, 0x24, 0x57, 0xb3, 0x45, 0xc1, 0xb4, + 0xe1, 0x39, 0xbe, 0x87, 0x00, 0x8a, 0x1b, 0x57, 0x25, 0x98, 0xbb, 0x52, + 0x44, 0x22, 0x23, 0x63, 0xb8, 0x6c, 0x46, 0x09, 0x5c, 0x23, 0xf4, 0x08, + 0x4b, 0x4b, 0x24, 0xfe, 0xd7, 0x15, 0xa7, 0x24, 0x52, 0xd2, 0xb3, 0x49, + 0xeb, 0x8b, 0xa0, 0xc6, 0x8b, 0x49, 0x1c, 0xb3, 0x71, 0xf3, 0x63, 0x68, + 0x2b, 0xb1, 0xa2, 0x37, 0xf2, 0xbb, 0x42, 0x4c, 0x14, 0x0a, 0x0a, 0x59, + 0xd3, 0x70, 0x07, 0x55, 0x52, 0x0d, 0xbf, 0x63, 0x30, 0xd8, 0x02, 0x5a, + 0x59, 0xd6, 0x9e, 0xfb, 0x69, 0x8c, 0xcf, 0x99, 0xc3, 0x18, 0xc4, 0x4a, + 0xff, 0x16, 0xb8, 0xdb, 0xd1, 0x18, 0x3e, 0xe0, 0x4f, 0xd1, 0x28, 0x22, + 0xf3, 0x25, 0x90, 0x89, 0xf1, 0xce, 0xe3, 0x82, 0xad, 0x11, 0x89, 0x72, + 0xad, 0x7c, 0x6f, 0xb6, 0xd8, 0x45, 0xe7, 0x81, 0xc7, 0x5e, 0xc8, 0x7a, + 0x68, 0x90, 0x5e, 0xc2, 0x25, 0x7a, 0x1b, 0xaa, 0x89, 0x56, 0x9a, 0x2b, + 0xfb, 0xf5, 0x59, 0x36, 0x78, 0x1b, 0x0b, 0x3a, 0x39, 0x86, 0x58, 0x08, + 0x5e, 0xe8, 0x40, 0xd0, 0x38, 0x78, 0xa4, 0x47, 0xb7, 0xd9, 0xc6, 0x43, + 0x78, 0xea, 0x07, 0xe5, 0xc6, 0x1a, 0xf6, 0xd3, 0x19, 0xba, 0xd8, 0x85, + 0x03, 0x79, 0x0f, 0xbb, 0x98, 0x0f, 0x5b, 0xf7, 0x5c, 0x11, 0x46, 0x00, + 0xad, 0x26, 0x7a, 0x6f, 0xa1, 0x67, 0x3e, 0xb7, 0x89, 0x90, 0x35, 0xa0, + 0xd5, 0xab, 0x3b, 0x34, 0x11, 0x9c, 0xa9, 0x19, 0x57, 0x4a, 0x36, 0xaa, + 0x46, 0x51, 0x19, 0x2a, 0x59, 0x3d, 0x62, 0xd8, 0xbe, 0x1e, 0xca, 0x2b, + 0x0a, 0xc6, 0x79, 0x06, 0xf3, 0x46, 0x45, 0x45, 0xc5, 0x22, 0xc7, 0x3e, + 0x05, 0x26, 0x73, 0x33, 0x99, 0x01, 0xa6, 0x96, 0x99, 0x33, 0x73, 0x9e, + 0x56, 0x7c, 0x62, 0x2c, 0x69, 0x41, 0x76, 0x97, 0x92, 0x97, 0x64, 0x4e, + 0x87, 0xc9, 0x70, 0x1a, 0xc9, 0x84, 0x73, 0xc9, 0x9e, 0x17, 0xa0, 0x4a, + 0x93, 0xec, 0x1e, 0xc2, 0x6a, 0x6a, 0x42, 0x4a, 0xb1, 0x40, 0x0b, 0xbf, + 0x04, 0xa7, 0x18, 0x38, 0x37, 0x82, 0x49, 0x63, 0x37, 0x20, 0x30, 0x46, + 0x2e, 0x47, 0x20, 0x53, 0x24, 0xcb, 0x8c, 0xea, 0xa6, 0x0a, 0x24, 0x84, + 0x79, 0xc6, 0x33, 0xce, 0x59, 0x6a, 0x61, 0xa8, 0xcb, 0x1a, 0xa9, 0xc8, + 0xc2, 0xe3, 0x44, 0xbe, 0x54, 0x8f, 0x4c, 0xd9, 0x7d, 0xbd, 0x3a, 0x51, + 0x69, 0x75, 0x57, 0x4b, 0xfc, 0x62, 0xe9, 0xe1, 0x38, 0x36, 0x67, 0xb5, + 0xfe, 0x39, 0x34, 0x81, 0xa4, 0x34, 0x06, 0x8b, 0x0e, 0x4d, 0x80, 0x0b, + 0xc8, 0x20, 0x7c, 0xdc, 0x7b, 0x06, 0xcb, 0xf9, 0x29, 0x7a, 0x67, 0x58, + 0xd7, 0xf2, 0x06, 0x3a, 0xba, 0xc2, 0xfe, 0x76, 0x52, 0xc2, 0xfa, 0x86, + 0xef, 0x99, 0x5b, 0x83, 0xac, 0x16, 0xca, 0xbc, 0xae, 0x7d, 0xe2, 0x50, + 0x50, 0x6a, 0x53, 0x67, 0xe9, 0x45, 0x2d, 0xd5, 0x48, 0xac, 0x6a, 0x55, + 0xc9, 0xf8, 0x86, 0xcc, 0x8b, 0x1b, 0x95, 0x36, 0xaa, 0x14, 0xc9, 0xcb, + 0xc9, 0x8b, 0x7c, 0xda, 0xf9, 0xa6, 0xac, 0x72, 0x5d, 0x25, 0x8b, 0x61, + 0x0e, 0x10, 0xb3, 0x69, 0x41, 0x1b, 0xa5, 0x50, 0x59, 0x8c, 0x3a, 0xb9, + 0x28, 0x66, 0x5e, 0x0f, 0x13, 0xcb, 0xed, 0xf6, 0x3f, 0x16, 0x56, 0xc2, + 0x79, 0x3b, 0x0c, 0x1e, 0xb9, 0x98, 0x9d, 0x98, 0xac, 0xd8, 0xd4, 0x5f, + 0xb2, 0x9a, 0x0b, 0xa5, 0x32, 0xa0, 0xb1, 0xe6, 0x22, 0x92, 0xa7, 0x7a, + 0xc8, 0xd4, 0xbc, 0x25, 0x4b, 0x1a, 0x0a, 0x87, 0xc7, 0xe9, 0x61, 0xc9, + 0xf7, 0x61, 0x29, 0x27, 0xe5, 0x14, 0xdb, 0x2a, 0xc9, 0x15, 0x8a, 0x18, + 0x23, 0x33, 0x94, 0x15, 0xc5, 0x0e, 0x6d, 0x35, 0x55, 0x96, 0xb4, 0x88, + 0x73, 0xfc, 0x15, 0x9b, 0x3c, 0x38, 0x46, 0xd2, 0x11, 0xea, 0x48, 0x1e, + 0x87, 0xfc, 0x21, 0x96, 0x66, 0x3b, 0x5c, 0x11, 0x84, 0x71, 0x75, 0x08, + 0xf7, 0xa5, 0xc1, 0x3f, 0x73, 0x23, 0xef, 0x62, 0xae, 0xf5, 0x84, 0x56, + 0xac, 0x96, 0x0e, 0x4e, 0x9c, 0x4b, 0xdd, 0x56, 0x70, 0xfd, 0xe4, 0x41, + 0xc5, 0xa6, 0xa8, 0x67, 0xa2, 0x16, 0xc4, 0x97, 0x7c, 0xc6, 0x65, 0x6b, + 0xfc, 0x7c, 0x19, 0x5e, 0xcb, 0x3d, 0x9d, 0x77, 0x70, 0x6c, 0x02, 0x53, + 0x28, 0x8a, 0x85, 0x6e, 0x27, 0x6d, 0x2a, 0x36, 0x4e, 0x5d, 0xe2, 0xad, + 0xea, 0x9a, 0xcf, 0xf3, 0x48, 0x58, 0x69, 0x8c, 0x17, 0x67, 0x22, 0xcc, + 0x93, 0x7c, 0xbd, 0x23, 0xc9, 0x50, 0x0e, 0x33, 0x9c, 0xd0, 0xb0, 0x3e, + 0x7b, 0x07, 0x17, 0x90, 0x73, 0x9e, 0x68, 0x56, 0x6a, 0x5c, 0x04, 0x51, + 0x19, 0xe9, 0xc1, 0x4b, 0x41, 0x69, 0x33, 0x49, 0xb2, 0xa2, 0xb7, 0x28, + 0xe8, 0xa3, 0x41, 0x0b, 0xc3, 0xb6, 0x08, 0xa4, 0x7c, 0x65, 0x25, 0xa6, + 0x80, 0x34, 0x3e, 0x2a, 0x3c, 0x05, 0x6b, 0x87, 0x3c, 0x8b, 0x92, 0xa6, + 0x99, 0x35, 0x06, 0xf1, 0xe5, 0x19, 0x66, 0x67, 0x72, 0x18, 0x06, 0x06, + 0x31, 0xe1, 0x19, 0x53, 0x15, 0x85, 0x11, 0x72, 0x17, 0x41, 0xe7, 0x4e, + 0xaf, 0x91, 0xb9, 0xd5, 0x27, 0x9b, 0x8f, 0xe7, 0x6b, 0x69, 0x88, 0x00, + 0xe4, 0x76, 0x3d, 0x56, 0x68, 0x5b, 0x51, 0x01, 0xc2, 0x19, 0xd7, 0x18, + 0xc7, 0xb0, 0x14, 0x01, 0xc8, 0x55, 0x86, 0x57, 0x73, 0x94, 0xc6, 0x19, + 0x88, 0x63, 0x75, 0x78, 0x1a, 0x1a, 0xb8, 0x97, 0x7a, 0x3a, 0xb9, 0x7a, + 0x18, 0xd8, 0xc0, 0x51, 0x86, 0x48, 0x6c, 0x18, 0xc5, 0x34, 0x90, 0xb9, + 0x64, 0xc2, 0x1e, 0x6b, 0x5c, 0x49, 0x40, 0x25, 0x12, 0x00, 0xfb, 0x79, + 0xd8, 0x92, 0x95, 0xff, 0x39, 0xc9, 0x03, 0xd1, 0x0a, 0x71, 0x0b, 0x26, + 0x31, 0x7b, 0x37, 0x0b, 0xda, 0xa7, 0x8c, 0x0a, 0x39, 0x6c, 0x5a, 0x7b, + 0x31, 0x23, 0x41, 0xa5, 0x7b, 0x34, 0xdf, 0x7c, 0xcb, 0xec, 0x4c, 0xca, + 0xc4, 0x12, 0xc8, 0x00, 0xd2, 0x53, 0x17, 0x12, 0x5b, 0xa0, 0x02, 0x55, + 0xdb, 0x3b, 0x99, 0xae, 0x42, 0x44, 0xde, 0xa8, 0xb3, 0x95, 0xe2, 0x9c, + 0x55, 0x10, 0x24, 0x29, 0xf1, 0xcc, 0x8b, 0xe8, 0x54, 0xbb, 0x72, 0x72, + 0xa1, 0xb2, 0x6a, 0xed, 0xcb, 0xc8, 0x63, 0x66, 0x61, 0x93, 0xdb, 0x33, + 0x97, 0xc8, 0x73, 0x97, 0xb7, 0x44, 0xc3, 0xd9, 0xb4, 0x3e, 0x58, 0x26, + 0x27, 0x16, 0xae, 0xa8, 0x14, 0x22, 0xd7, 0x79, 0xc4, 0xfc, 0x60, 0xc0, + 0xb8, 0x25, 0x76, 0xd1, 0x49, 0xc6, 0x30, 0xaa, 0xb7, 0x42, 0x9b, 0x3e, + 0xca, 0xd2, 0x3f, 0x42, 0x21, 0x9c, 0x7b, 0xc3, 0x48, 0xf1, 0x00, 0x52, + 0x82, 0x4c, 0x63, 0xcb, 0xb5, 0xb5, 0xf3, 0x9b, 0x79, 0x19, 0x08, 0x4e, + 0x6c, 0x34, 0x4f, 0x23, 0xb1, 0x8d, 0xa3, 0xe1, 0x63, 0x0c, 0x24, 0x27, + 0xa7, 0xa5, 0x26, 0xa0, 0xd2, 0x6b, 0x57, 0x31, 0x9e, 0x18, 0x70, 0x75, + 0x4c, 0x78, 0x54, 0xa4, 0xe2, 0x25, 0x4d, 0x64, 0xae, 0xbe, 0x85, 0x66, + 0xa4, 0xfa, 0x13, 0xf8, 0x90, 0xa0, 0x1c, 0x04, 0x6d, 0x35, 0x6a, 0xc0, + 0xaf, 0xcb, 0x65, 0x14, 0xe0, 0x03, 0x8d, 0x47, 0xca, 0x01, 0xd9, 0x64, + 0x32, 0x92, 0x23, 0x79, 0xe1, 0x66, 0x37, 0x79, 0x80, 0x06, 0x47, 0x61, + 0x83, 0xf0, 0xba, 0x5d, 0x51, 0x6b, 0x6a, 0x4a, 0xa1, 0x43, 0xc9, 0x48, + 0x43, 0x18, 0xa6, 0xd0, 0x97, 0x01, 0x50, 0xd5, 0x30, 0xb3, 0x47, 0xbd, + 0x53, 0xa0, 0xaf, 0xa5, 0x87, 0x32, 0x0b, 0xf1, 0x16, 0x2d, 0x2b, 0x21, + 0xcb, 0x4c, 0x98, 0x26, 0x94, 0x20, 0x02, 0x62, 0x8b, 0xd9, 0xa5, 0x69, + 0x96, 0x82, 0xab, 0x56, 0xb8, 0x3c, 0x4f, 0x5a, 0xb1, 0x12, 0x81, 0x5a, + 0x80, 0x89, 0x80, 0x5b, 0x30, 0x57, 0x20, 0xe5, 0x5e, 0x10, 0x4c, 0x68, + 0xcc, 0x1b, 0x7e, 0xf8, 0xc3, 0x91, 0x6c, 0xa3, 0x58, 0x1e, 0xe1, 0x67, + 0x30, 0xc7, 0x86, 0xfb, 0xe3, 0x5d, 0x7f, 0xf0, 0x17, 0x25, 0x15, 0x49, + 0xec, 0x88, 0xa5, 0xdf, 0x5a, 0x93, 0xaa, 0xe4, 0x4f, 0x60, 0x96, 0x2b, + 0x2a, 0x25, 0x49, 0x44, 0x2a, 0x2d, 0xcc, 0xa7, 0x10, 0x7d, 0x96, 0xc4, + 0xc0, 0x02, 0x8f, 0xd3, 0x2a, 0xba, 0x32, 0xa1, 0x46, 0xff, 0xb2, 0x83, + 0x2c, 0xf2, 0x46, 0xf6, 0x6c, 0x6b, 0x3e, 0x50, 0x0b, 0x2f, 0xd0, 0x88, + 0x6e, 0xf5, 0x2a, 0xdf, 0x58, 0xb8, 0x6c, 0x6c, 0x6c, 0xef, 0x04, 0x6a, + 0x67, 0xf1, 0x07, 0xdf, 0xb2, 0x45, 0x95, 0xbc, 0x99, 0x66, 0x31, 0xc8, + 0x1d, 0xe0, 0x68, 0x4a, 0xd5, 0xa2, 0x48, 0xc6, 0xa8, 0x69, 0x80, 0x7d, + 0x46, 0x0a, 0x44, 0xdb, 0xfa, 0x8a, 0x06, 0x0b, 0x6a, 0x69, 0xe1, 0x3e, + 0xc3, 0x7a, 0x0d, 0xf7, 0xa7, 0x57, 0x2f, 0x57, 0x3d, 0x1c, 0xcb, 0x31, + 0x18, 0xa2, 0xb1, 0xd6, 0xd3, 0x37, 0xef, 0x33, 0xaf, 0xd8, 0xec, 0x90, + 0xaa, 0x08, 0xcc, 0x24, 0xb3, 0x9c, 0x1b, 0x92, 0x01, 0x8b, 0x70, 0x02, + 0xb7, 0xa9, 0x70, 0xa0, 0x7a, 0x7d, 0xa1, 0xb8, 0xab, 0x8d, 0xe1, 0xad, + 0xb0, 0x17, 0x45, 0xba, 0x15, 0x9b, 0xd1, 0x11, 0x42, 0x15, 0x69, 0x79, + 0x29, 0x60, 0x39, 0x4c, 0xb7, 0xad, 0x71, 0x1c, 0x94, 0x15, 0x40, 0x71, + 0x6f, 0x6a, 0x48, 0x36, 0xab, 0x5a, 0xc7, 0x85, 0xa1, 0x29, 0x74, 0x26, + 0xd2, 0x35, 0xcc, 0x00, 0x1b, 0x35, 0xd0, 0x40, 0x50, 0x6a, 0x46, 0x26, + 0x4e, 0x92, 0xa6, 0xe4, 0x7a, 0xab, 0xf2, 0x32, 0x61, 0xd2, 0xa4, 0x5e, + 0x11, 0x51, 0x6d, 0x73, 0xc5, 0x33, 0x1b, 0x2a, 0x4f, 0x60, 0xe3, 0x00, + 0x7d, 0xc1, 0x2a, 0x10, 0x0c, 0x20, 0x68, 0xfc, 0x29, 0xef, 0x5b, 0x82, + 0xe4, 0xea, 0x72, 0x39, 0xf3, 0x16, 0x17, 0x3b, 0x25, 0x9d, 0x03, 0xb2, + 0xc6, 0x42, 0x54, 0xab, 0xd5, 0x2f, 0x3f, 0x49, 0x82, 0x68, 0x69, 0x1d, + 0x0d, 0x61, 0xca, 0xeb, 0x16, 0xcc, 0xa5, 0x79, 0x29, 0xeb, 0xf8, 0x8d, + 0xdd, 0xc0, 0x0f, 0xb6, 0x32, 0x83, 0x11, 0x94, 0x49, 0x9c, 0xeb, 0x82, + 0x31, 0xe7, 0x7b, 0xe2, 0xda, 0x51, 0x32, 0x13, 0x6f, 0xfc, 0xac, 0xb6, + 0x33, 0xb6, 0x33, 0x2a, 0xf2, 0x5b, 0x22, 0x48, 0x57, 0xd5, 0xb7, 0x2d, + 0x07, 0x92, 0x2c, 0x8a, 0x5c, 0x26, 0xe6, 0xc7, 0x6f, 0x31, 0x88, 0x8b, + 0xbf, 0x3b, 0x5f, 0x8c, 0x29, 0xad, 0x06, 0xd5, 0x7a, 0xa9, 0x84, 0x1e, + 0x9b, 0x22, 0x24, 0x9b, 0xb1, 0x63, 0x9a, 0x52, 0x43, 0xbc, 0xca, 0x52, + 0x93, 0xf2, 0x99, 0x0c, 0x4c, 0x51, 0x49, 0x54, 0x5d, 0x0c, 0x7c, 0x0d, + 0x5f, 0x02, 0x99, 0xeb, 0x36, 0x1d, 0xdb, 0x28, 0x5c, 0xc5, 0x77, 0xc8, + 0x42, 0x65, 0x65, 0x17, 0x7c, 0x89, 0xbe, 0x0a, 0xa6, 0x74, 0xea, 0xb9, + 0x47, 0xe7, 0x25, 0x7d, 0x74, 0x5c, 0xc0, 0x2b, 0xbf, 0xa8, 0x15, 0xa3, + 0x4a, 0xa3, 0x15, 0x5d, 0x9a, 0xb7, 0x73, 0x09, 0x4f, 0xc6, 0x1b, 0x15, + 0xe9, 0x85, 0x95, 0xba, 0x68, 0x5a, 0x20, 0x7a, 0x3d, 0x92, 0x90, 0x2e, + 0x94, 0x3c, 0x58, 0x5e, 0x75, 0x21, 0xb0, 0xd3, 0x94, 0x50, 0xc1, 0xc8, + 0x12, 0xe2, 0x71, 0x00, 0x48, 0xc9, 0x78, 0xfa, 0x54, 0xd5, 0x3a, 0x26, + 0x75, 0x68, 0x44, 0x4f, 0x13, 0x9f, 0x2d, 0x5a, 0x97, 0xbd, 0x23, 0xb1, + 0x28, 0x60, 0xa8, 0x35, 0xe7, 0x4d, 0x77, 0x3b, 0x20, 0xaa, 0x66, 0x8b, + 0xd9, 0xe0, 0x2e, 0x60, 0x1c, 0xbe, 0xe8, 0xa3, 0xaa, 0x4d, 0xb1, 0x19, + 0x49, 0x20, 0x28, 0xca, 0xa4, 0xab, 0xa5, 0x0c, 0x1f, 0xba, 0x34, 0x26, + 0xc9, 0x9b, 0xb6, 0x95, 0x8a, 0x8b, 0x34, 0xa0, 0xa7, 0xb3, 0x2c, 0x66, + 0x68, 0xd3, 0x21, 0x76, 0xb1, 0x6c, 0xfb, 0xca, 0x13, 0x7f, 0x29, 0x64, + 0xd5, 0x6a, 0x64, 0x3f, 0x88, 0x8f, 0x95, 0x5c, 0xc2, 0x5d, 0x22, 0x10, + 0x3a, 0x93, 0x96, 0xcc, 0x13, 0x3f, 0x01, 0xa9, 0x9f, 0x29, 0x14, 0x57, + 0x85, 0xac, 0x5f, 0x3b, 0xf4, 0x2c, 0x7f, 0xfc, 0xad, 0xf5, 0xc3, 0x0f, + 0x94, 0x57, 0x01, 0x2c, 0x36, 0xbb, 0xaa, 0x9c, 0x56, 0xab, 0x91, 0x76, + 0x60, 0x76, 0x2a, 0x7a, 0xba, 0x25, 0xc3, 0xf1, 0xae, 0xd2, 0xea, 0x2c, + 0xb7, 0x52, 0x14, 0xf1, 0xd7, 0x98, 0x67, 0x2a, 0x89, 0xeb, 0xd7, 0x42, + 0x85, 0xd8, 0xb3, 0xf5, 0x18, 0x01, 0xf7, 0x76, 0x93, 0xcd, 0x0c, 0x20, + 0xdf, 0x48, 0xad, 0xb3, 0x8b, 0x66, 0x96, 0xa1, 0xab, 0x4e, 0xe8, 0x04, + 0xd7, 0xa0, 0x2a, 0x41, 0xb5, 0x92, 0x8a, 0x1c, 0x2a, 0x07, 0x86, 0xb7, + 0xc8, 0x67, 0x49, 0x3c, 0xf2, 0x8a, 0xf6, 0x2c, 0x92, 0x76, 0x44, 0x15, + 0x4b, 0x19, 0x42, 0xc1, 0x88, 0x0c, 0x59, 0x3a, 0x47, 0x70, 0xdc, 0x30, + 0x35, 0x94, 0x46, 0x1f, 0x58, 0x3c, 0x59, 0x0a, 0x9d, 0x26, 0x8b, 0x4e, + 0x0b, 0x67, 0x1f, 0x12, 0x59, 0x32, 0x27, 0xb6, 0x09, 0xb0, 0x7a, 0x39, + 0x24, 0xfb, 0x5d, 0x43, 0x9a, 0x64, 0x92, 0x18, 0x21, 0xe2, 0x07, 0x9d, + 0x93, 0x23, 0xa9, 0x77, 0xcb, 0x9c, 0x10, 0x59, 0x00, 0x08, 0xfc, 0xce, + 0xb7, 0x45, 0x15, 0x1d, 0x4a, 0x0c, 0x9a, 0xec, 0xc6, 0x2e, 0x7c, 0x67, + 0x54, 0xb2, 0x88, 0x7c, 0x56, 0x6c, 0xbc, 0x20, 0xc0, 0x04, 0xd5, 0x46, + 0xa0, 0x1b, 0xa0, 0x9f, 0x92, 0x27, 0x35, 0x92, 0xaf, 0x99, 0x71, 0xb2, + 0x8f, 0xe5, 0xcd, 0x84, 0x97, 0x41, 0x96, 0xe7, 0x9d, 0x68, 0x49, 0x62, + 0x44, 0x9a, 0x8d, 0x54, 0x56, 0x0b, 0x8b, 0x57, 0xbd, 0xc3, 0x86, 0xab, + 0xa1, 0x67, 0x4c, 0xb3, 0xb3, 0x0a, 0xb7, 0x6b, 0xb0, 0xca, 0xf1, 0x35, + 0xd0, 0x23, 0xb2, 0x07, 0x76, 0x48, 0x7d, 0xfb, 0x20, 0x70, 0x76, 0x36, + 0xa9, 0xc2, 0x10, 0x22, 0xc1, 0x04, 0xdd, 0xc5, 0x1d, 0x0c, 0xaa, 0x90, + 0x69, 0x94, 0x8a, 0xf8, 0x9c, 0xbb, 0x80, 0xc9, 0x0b, 0xa0, 0x27, 0xba, + 0x60, 0xe3, 0x19, 0xf1, 0xb7, 0xb5, 0x63, 0x69, 0x51, 0x97, 0xf4, 0x12, + 0x0a, 0x26, 0xcf, 0x81, 0xc5, 0x1c, 0x20, 0x8b, 0x4a, 0x7a, 0x05, 0x4b, + 0x03, 0xc3, 0xae, 0x62, 0x40, 0x96, 0xca, 0x2c, 0x5c, 0xe9, 0xb2, 0x06, + 0x93, 0xea, 0x00, 0x67, 0x68, 0x81, 0x93, 0xec, 0x62, 0x6f, 0x39, 0xc4, + 0x74, 0xc9, 0xb0, 0x70, 0xa3, 0xbb, 0x84, 0x14, 0xc7, 0xbd, 0x68, 0x97, + 0xc9, 0xbb, 0x14, 0x89, 0xf3, 0xbf, 0xae, 0xd6, 0x46, 0x1a, 0xeb, 0x30, + 0x98, 0xf7, 0xce, 0xbe, 0xda, 0x12, 0xef, 0x00, 0x7f, 0x7f, 0x91, 0x5d, + 0x73, 0x74, 0x31, 0x2c, 0xa5, 0x81, 0xde, 0x85, 0x24, 0x42, 0x2b, 0xa2, + 0xa5, 0x31, 0x0e, 0x5a, 0x96, 0x00, 0x3e, 0xa8, 0x68, 0x26, 0xc8, 0x15, + 0xfd, 0xb6, 0xab, 0x4f, 0xfa, 0x70, 0x00, 0x78, 0x3a, 0x9d, 0x3a, 0x37, + 0x9f, 0x79, 0xb2, 0x35, 0xa2, 0x04, 0xb9, 0x4a, 0x21, 0x49, 0x9a, 0xa0, + 0xc9, 0x59, 0xce, 0x3e, 0x25, 0xb7, 0xde, 0xb9, 0x72, 0x0c, 0xe9, 0x7b, + 0x60, 0x4b, 0x2b, 0x4f, 0x31, 0xce, 0xcc, 0x75, 0xc3, 0xbc, 0xf4, 0x69, + 0xf6, 0x1a, 0xae, 0x55, 0x33, 0x52, 0x47, 0x9c, 0x8e, 0x02, 0x37, 0xa7, + 0xde, 0xfb, 0x42, 0xf3, 0x49, 0x01, 0x3b, 0xe6, 0xab, 0x6c, 0xe7, 0xaf, + 0x7c, 0x14, 0x4e, 0x48, 0x1b, 0x24, 0x5f, 0xe2, 0x30, 0x3f, 0xb2, 0x30, + 0xae, 0x34, 0x62, 0xd4, 0xb3, 0xab, 0xef, 0x3a, 0xa2, 0x27, 0xf4, 0xae, + 0x65, 0x2a, 0xb8, 0x29, 0x44, 0x44, 0x4f, 0xa1, 0x38, 0x9b, 0x72, 0x0b, + 0xed, 0x57, 0x64, 0x7f, 0x93, 0x94, 0x7e, 0x58, 0x86, 0xf7, 0x05, 0x98, + 0xb0, 0x02, 0xa6, 0xe0, 0x87, 0xa7, 0x36, 0x57, 0x69, 0x64, 0x33, 0x1c, + 0xfb, 0x25, 0x6f, 0xf3, 0xe1, 0x3a, 0xb1, 0x81, 0x98, 0x0f, 0x26, 0x86, + 0x7c, 0x0c, 0x7f, 0x09, 0x41, 0x41, 0x52, 0x2a, 0x3f, 0x82, 0xa9, 0xcc, + 0xa8, 0xda, 0xcf, 0xfe, 0xc2, 0x3b, 0xd7, 0x97, 0x32, 0x11, 0xc4, 0xf6, + 0x24, 0x4d, 0x2d, 0x2a, 0xd2, 0xbe, 0xe8, 0xea, 0x1d, 0x77, 0x6b, 0x95, + 0x7b, 0xb9, 0x60, 0x78, 0xf9, 0x74, 0x57, 0x65, 0x54, 0xc5, 0x3d, 0x94, + 0xd0, 0x59, 0xa5, 0x5c, 0xbc, 0x2d, 0x02, 0xda, 0x6a, 0x1b, 0xf2, 0x30, + 0xe9, 0xb3, 0x14, 0x89, 0xed, 0x49, 0x93, 0x73, 0xf9, 0x4b, 0x10, 0xd8, + 0xc5, 0x4d, 0x1f, 0x41, 0x67, 0x6e, 0x47, 0xa6, 0xc2, 0x51, 0xd2, 0x3c, + 0x69, 0xad, 0xab, 0xa9, 0x15, 0xf4, 0xe1, 0x82, 0xd6, 0xab, 0x33, 0xe3}, + // ciphertext + {0x84, 0x8a, 0x03, 0x80, 0x59, 0xac, 0xb8, 0xea, 0x45, 0x14, 0x93, 0x37, + 0x32, 0xf4, 0x3e, 0x11, 0x7b, 0x63, 0x20, 0xf3, 0xeb, 0x49, 0x53, 0xe2, + 0x7c, 0xcb, 0x3d, 0xf2, 0xa7, 0x89, 0xa0, 0x92, 0x64, 0xcc, 0x77, 0x57, + 0x74, 0x89, 0x11, 0x0f, 0x2e, 0xbc, 0x6b, 0x5c, 0xbc, 0x57, 0xd2, 0xbd, + 0x73, 0x89, 0x1d, 0x73, 0xa3, 0x76, 0x3a, 0x37, 0xe8, 0x8a, 0x8d, 0x58, + 0xa3, 0x7d, 0x18, 0x70, 0x16, 0x50, 0x7c, 0x61, 0x94, 0x66, 0x72, 0x69, + 0x74, 0x30, 0x3a, 0xa7, 0x2a, 0x54, 0x61, 0xb7, 0x20, 0xb8, 0x62, 0xf8, + 0x6f, 0x84, 0x12, 0x43, 0x02, 0x84, 0x43, 0x77, 0x58, 0x8d, 0x94, 0x2f, + 0x74, 0x95, 0x17, 0x39, 0xe9, 0xc4, 0xa8, 0xbb, 0x28, 0x25, 0x20, 0xa1, + 0x66, 0xcb, 0x11, 0x88, 0x74, 0x7f, 0xab, 0x13, 0xf8, 0x7b, 0xed, 0xb2, + 0x30, 0xeb, 0x7a, 0x88, 0x20, 0xd8, 0x5c, 0x99, 0x55, 0x46, 0xd7, 0xc7, + 0x65, 0x9a, 0x5f, 0xe1, 0x98, 0x94, 0xf3, 0xc5, 0x9d, 0x45, 0xd4, 0x59, + 0x5e, 0x31, 0xf6, 0x55, 0xe5, 0x51, 0x90, 0xf5, 0xf3, 0x1b, 0x7f, 0xd3, + 0x25, 0xe4, 0x4a, 0x62, 0xb9, 0x38, 0x80, 0x55, 0x66, 0x6a, 0xfc, 0x6c, + 0x91, 0x8c, 0x70, 0xf5, 0xfd, 0x7f, 0x9e, 0xf5, 0x0a, 0x83, 0x65, 0xea, + 0x99, 0x62, 0x86, 0xcc, 0xd9, 0x94, 0xe3, 0xfd, 0x8a, 0xc9, 0x63, 0xe4, + 0x87, 0x1b, 0xe0, 0xfd, 0xe7, 0x4c, 0x9f, 0x76, 0xae, 0x07, 0xd7, 0x88, + 0x6e, 0x03, 0xc8, 0xa8, 0x21, 0x12, 0x9c, 0x6a, 0xb2, 0xaa, 0x06, 0xb2, + 0xd8, 0x03, 0x48, 0x46, 0xdd, 0xf1, 0x29, 0x48, 0x48, 0x7e, 0x5c, 0x20, + 0x97, 0x44, 0xf6, 0x2f, 0xbf, 0x4d, 0x71, 0xbd, 0x49, 0x2d, 0xbb, 0x1f, + 0x8a, 0xd1, 0x08, 0xaf, 0x5b, 0x11, 0x71, 0x81, 0xc5, 0xbe, 0xe7, 0x7c, + 0x2c, 0x8d, 0x23, 0xd0, 0xbf, 0x80, 0x6b, 0x36, 0x7f, 0xdf, 0x05, 0x1d, + 0x6a, 0x56, 0x9f, 0x02, 0xd0, 0x7b, 0xb3, 0x58, 0x0c, 0x10, 0xe5, 0x82, + 0xa8, 0x24, 0x3e, 0xdc, 0x3c, 0x8e, 0xd4, 0xe3, 0x20, 0xdd, 0x80, 0x83, + 0xf8, 0x8a, 0xcb, 0xee, 0x4b, 0x4a, 0x5e, 0xff, 0x20, 0x38, 0x56, 0x84, + 0x77, 0xdf, 0x25, 0xc2, 0xe3, 0x8d, 0x26, 0x16, 0x1a, 0x6a, 0x7f, 0xe9, + 0x4d, 0xd8, 0xfe, 0x6f, 0x9b, 0x78, 0x62, 0xfe, 0x5f, 0xec, 0x4b, 0x3a, + 0xfa, 0xa9, 0x3f, 0x40, 0x07, 0xa7, 0xf7, 0x5a, 0x2d, 0x2c, 0xf0, 0x6c, + 0xf7, 0x00, 0xf7, 0x76, 0x8f, 0x5b, 0x14, 0xa3, 0x54, 0x15, 0x67, 0x6b, + 0x36, 0x23, 0x07, 0x52, 0x54, 0x6f, 0xd7, 0x34, 0xff, 0x1f, 0x51, 0x2d, + 0xc1, 0x85, 0x20, 0x29, 0xa5, 0xf5, 0x6f, 0x96, 0x1b, 0xdd, 0x0e, 0x84, + 0x44, 0xa8, 0x00, 0xad, 0x64, 0x5a, 0x04, 0x28, 0x65, 0x04, 0x16, 0xac, + 0x09, 0x39, 0x9a, 0x71, 0x05, 0xb5, 0xb4, 0xd8, 0xcb, 0xd7, 0x75, 0x01, + 0x56, 0x00, 0x48, 0xd1, 0xad, 0x5d, 0x5e, 0xed, 0xcf, 0x1d, 0x3f, 0xe0, + 0xd7, 0x56, 0xd2, 0x5d, 0x82, 0xbe, 0x7f, 0x97, 0xf7, 0x44, 0x76, 0x4f, + 0xff, 0xe8, 0x9e, 0x90, 0x0d, 0x0b, 0xdf, 0xaf, 0x21, 0xa2, 0x08, 0x5d, + 0x56, 0x0d, 0xf3, 0xb8, 0xd6, 0xfd, 0x5e, 0x19, 0xc9, 0xa5, 0xd2, 0x98, + 0xe1, 0xd8, 0x06, 0x62, 0x7e, 0x60, 0x80, 0x4f, 0x5d, 0x6e, 0x61, 0xe2, + 0xc2, 0x41, 0xc5, 0x9d, 0xa3, 0x17, 0xdf, 0xc6, 0x7d, 0x18, 0xac, 0x3c, + 0x62, 0xf6, 0x13, 0x97, 0x35, 0x26, 0xd7, 0xdf, 0xef, 0xf7, 0xf9, 0x98, + 0x49, 0xbf, 0x54, 0x44, 0x99, 0x41, 0x92, 0x4f, 0xf8, 0xcd, 0x6c, 0xdb, + 0xfd, 0xaf, 0x97, 0x2f, 0x8a, 0x2b, 0x9b, 0x43, 0x9b, 0xb2, 0x5b, 0x7b, + 0xba, 0x1a, 0x63, 0x81, 0x51, 0x51, 0x35, 0xa6, 0x72, 0x8b, 0x2b, 0x23, + 0x89, 0xba, 0xfa, 0x02, 0x49, 0x0e, 0x3d, 0xa0, 0x05, 0xbd, 0xbc, 0x50, + 0x87, 0x87, 0xae, 0x2d, 0x67, 0xd2, 0x3f, 0x22, 0x6a, 0x55, 0xa9, 0x50, + 0x4c, 0x77, 0xd0, 0xd6, 0x1f, 0xf8, 0x49, 0x2d, 0xe5, 0xf3, 0xb7, 0xc9, + 0xe8, 0xe4, 0x34, 0x0d, 0xdc, 0x8d, 0x2a, 0x9e, 0x99, 0x10, 0x1a, 0x1f, + 0xc8, 0x5e, 0x3c, 0xa3, 0xa6, 0xad, 0x0b, 0xaf, 0x44, 0x3c, 0x7f, 0x55, + 0xf1, 0xa8, 0x57, 0x07, 0x53, 0x67, 0x56, 0x39, 0x98, 0xb0, 0xcd, 0x14, + 0xfc, 0x00, 0x3e, 0x97, 0x0d, 0x03, 0x62, 0x77, 0xf6, 0xec, 0x62, 0x27, + 0x8a, 0xfc, 0x43, 0xb1, 0xd6, 0xb6, 0x6c, 0x53, 0x9b, 0xd8, 0xb1, 0xd6, + 0xc1, 0xde, 0x18, 0xb4, 0x6c, 0xf7, 0x5d, 0x12, 0x4a, 0x67, 0xe4, 0xbf, + 0xef, 0x32, 0xf3, 0xd5, 0xfb, 0x70, 0xbf, 0x94, 0xca, 0xa1, 0xff, 0xe1, + 0x3d, 0x0a, 0x20, 0x23, 0xc0, 0xea, 0x84, 0x63, 0x10, 0x11, 0xb5, 0x02, + 0x94, 0xac, 0xa5, 0x36, 0x4a, 0xe3, 0xc9, 0x5e, 0xfb, 0xd2, 0x66, 0x45, + 0x9c, 0xf2, 0x25, 0xf7, 0x49, 0x42, 0x72, 0xf5, 0x48, 0x7e, 0xc9, 0x0d, + 0x42, 0x68, 0x3b, 0x45, 0xa6, 0xd4, 0xef, 0x23, 0x27, 0x89, 0x98, 0x43, + 0xec, 0x9d, 0x8c, 0x8d, 0x2d, 0x0c, 0xc1, 0x55, 0x0c, 0xd0, 0xb2, 0x00, + 0xac, 0x62, 0x97, 0x6f, 0xd3, 0x22, 0xc8, 0x83, 0x0a, 0x16, 0x02, 0x86, + 0x80, 0xec, 0x77, 0xd9, 0x7d, 0x09, 0xaf, 0x15, 0xee, 0x24, 0xf2, 0x3d, + 0x97, 0x7e, 0x16, 0xe4, 0x96, 0x2f, 0x42, 0xbb, 0x7c, 0x23, 0x96, 0xf6, + 0xb0, 0x57, 0x74, 0x24, 0x35, 0x23, 0x5d, 0x38, 0xc3, 0xbe, 0x0e, 0x51, + 0xfa, 0x54, 0x54, 0x04, 0x52, 0x45, 0xf3, 0x9b, 0x7c, 0xed, 0xbb, 0x86, + 0x4c, 0xdb, 0xa6, 0xa7, 0xb2, 0x3e, 0xa6, 0x5f, 0xd4, 0x06, 0xf8, 0x0a, + 0x71, 0x32, 0x46, 0x7a, 0x19, 0x37, 0xc4, 0xc5, 0x46, 0x8c, 0x7a, 0xa5, + 0x2b, 0x55, 0x6a, 0x96, 0x49, 0x23, 0x42, 0x65, 0xa2, 0x2c, 0x18, 0x67, + 0xeb, 0x89, 0x8a, 0x23, 0x0a, 0x19, 0x3e, 0x10, 0x37, 0x69, 0x84, 0xca, + 0x92, 0x22, 0x17, 0x83, 0x39, 0x5e, 0x49, 0xa5, 0x24, 0x1a, 0x5f, 0xff, + 0xe0, 0x49, 0x92, 0x0e, 0xaa, 0x8e, 0xe1, 0x69, 0x2c, 0x96, 0x45, 0xf1, + 0x14, 0x99, 0x2b, 0x25, 0xf9, 0x12, 0xd8, 0xac, 0x69, 0x5e, 0x7a, 0xf2, + 0xd7, 0x37, 0x06, 0x5b, 0xde, 0xc0, 0x9d, 0x0f, 0x5b, 0x5c, 0x26, 0x11, + 0x01, 0x76, 0x58, 0xe1, 0xe9, 0xa7, 0xb6, 0x69, 0x95, 0xb6, 0x72, 0xe0, + 0x4c, 0x85, 0x22, 0x02, 0x6c, 0x94, 0xc8, 0x35, 0x5d, 0x15, 0x11, 0x27, + 0x86, 0x21, 0x3d, 0x7d, 0x56, 0xbc, 0x16, 0x24, 0x3d, 0x1c, 0x64, 0x25, + 0x36, 0xc0, 0x0d, 0xa2, 0x85, 0x1a, 0x7e, 0xfd, 0x33, 0x4d, 0x74, 0x94, + 0x35, 0x0b, 0xbd, 0xe5, 0x7f, 0x2f, 0x5f, 0x69, 0x67, 0xab, 0xb6, 0x00, + 0x40, 0x00, 0x74, 0x72, 0x56, 0x30, 0x6f, 0xcc, 0xbb, 0xb0, 0x6d, 0x34, + 0x28, 0x9e, 0x98, 0xf0, 0x66, 0xd6, 0x71, 0x29, 0xf6, 0xa0, 0x7c, 0x4e, + 0xb4, 0x5b, 0xaf, 0x3c, 0xaa, 0xcb, 0xfc, 0x42, 0x3a, 0x92, 0x17, 0xc8, + 0x93, 0x2c, 0x70, 0x1c, 0xf8, 0x40, 0x2b, 0xbc, 0xac, 0xdb, 0x8a, 0xaa, + 0x0c, 0x67, 0xef, 0x39, 0x68, 0x8c, 0xf8, 0x5b, 0x08, 0xb6, 0x2f, 0x09, + 0x58, 0x72, 0x49, 0x89, 0x15, 0x85, 0xea, 0xfe, 0x3a, 0x7e, 0x72, 0x3c, + 0x21, 0xc4, 0xc2, 0x31, 0x35, 0xa8, 0x96, 0x1b, 0xae, 0x67, 0xed, 0x41, + 0x61, 0x5c, 0x6a, 0x32, 0x74, 0x0f, 0x02, 0xba, 0x8a, 0x41, 0x93, 0x79, + 0xf5, 0xc8, 0x55, 0x4b, 0x8e, 0x6e, 0x47, 0x60, 0x27, 0x4a, 0x27, 0x03, + 0x99, 0x5c, 0xb2, 0x48, 0x96, 0xcc, 0x00, 0xdd, 0x2e, 0x2c, 0x85, 0x31, + 0xef, 0x56, 0x54, 0x4f, 0x7a, 0x1b, 0x25, 0xe2, 0xd1, 0xbb, 0x76, 0xac, + 0x28, 0x2b, 0xd1, 0x16, 0xbe, 0x64, 0x56, 0x2c, 0xe4, 0x33, 0xb7, 0x40, + 0x77, 0xb3, 0x76, 0xce, 0x43, 0x7e, 0x52, 0x63, 0x79, 0x3e, 0xf6, 0x5d, + 0xe1, 0x01, 0x27, 0x7f, 0xae, 0xa6, 0xcf, 0xe1, 0xcb, 0x18, 0xa5, 0xb3, + 0xcc, 0x18, 0xfd, 0x03, 0xcc, 0xeb, 0xc4, 0x0a, 0x74, 0xd9, 0xf4, 0x6e, + 0xc8, 0xb9, 0xbe, 0x0e, 0x45, 0xa4, 0x17, 0xe2, 0x96, 0xab, 0x6a, 0xc1, + 0xf8, 0x67, 0x01, 0x3a, 0xd5, 0x34, 0xef, 0xcd, 0x88, 0x05, 0xd3, 0x4b, + 0x99, 0x24, 0x8a, 0x8b, 0x44, 0x64, 0x29, 0xde, 0xb4, 0xb4, 0x5a, 0xe2, + 0x78, 0x22, 0x75, 0x6a, 0x55, 0x16, 0x69, 0x54, 0xd0, 0x57, 0x65, 0xab, + 0x5d, 0x9b, 0x96, 0x2e, 0x49, 0xa0, 0xef, 0xa1, 0xed, 0xa4, 0xfb, 0x00, + 0x67, 0x45, 0xb9, 0x60, 0x2e, 0x1d, 0xf2, 0xf3, 0xaf, 0x22, 0xa1, 0x65, + 0xbc, 0xa4, 0x13, 0x4c, 0xaf, 0x0d, 0x21, 0x99, 0xfd, 0x35, 0x15, 0xbe, + 0xe8, 0x53, 0xed, 0x25, 0x8b, 0x80, 0xb9, 0x34, 0xbc, 0x94, 0xce, 0xcf, + 0xa7, 0x62, 0x34, 0x7c, 0xe6, 0x97, 0x48, 0x03, 0xbc, 0xdb, 0x36, 0x01, + 0x17, 0x48, 0x4d, 0x04, 0xf8, 0x77, 0x2d, 0x97, 0x5a, 0xcb, 0x2a, 0xb0, + 0x25, 0xd4, 0x5c, 0xd4, 0x26, 0x1a, 0xa4, 0xa5, 0x60, 0x8e, 0x63, 0xf1, + 0x76, 0x4d, 0xe6, 0xa3, 0x8b, 0x10, 0x7b, 0xf5, 0xdd, 0x28, 0xc2, 0xb5, + 0x78, 0xfe, 0x0b, 0xc9, 0xfb, 0x36, 0xde, 0x9a, 0xd3, 0x1f, 0xfe, 0x91, + 0xdc, 0x21, 0xfb, 0x50, 0x5a, 0x1c, 0x85, 0x11, 0xcc, 0x2b, 0x64, 0xc0, + 0xf3, 0x85, 0x3a, 0x3a, 0x07, 0xab, 0x57, 0xce, 0x20, 0x53, 0x76, 0x34, + 0x21, 0x15, 0x39, 0x08, 0xb9, 0x4d, 0xfd, 0xd3, 0xcf, 0x3e, 0x3f, 0xee, + 0x6e, 0xb3, 0x82, 0xca, 0x6b, 0x99, 0xf9, 0x77, 0xa0, 0x1a, 0x4b, 0x1e, + 0xe5, 0x3d, 0x9b, 0xe2, 0x40, 0xee, 0xb7, 0x68, 0x72, 0x61, 0x8c, 0x0a, + 0x90, 0xdb, 0xb0, 0xa8, 0x34, 0x6a, 0x63, 0xdc, 0x04, 0xae, 0xee, 0xea, + 0x8d, 0x6b, 0x6a, 0xae, 0xd0, 0x16, 0xe0, 0xda, 0x7d, 0x06, 0x18, 0x0a, + 0xe1, 0x71, 0xa6, 0x05, 0x41, 0xec, 0xe6, 0x48, 0x8e, 0x39, 0xda, 0x42, + 0x15, 0xdc, 0xc4, 0x05, 0xa8, 0x4c, 0x4b, 0x2a, 0x70, 0x57, 0x20, 0x13, + 0xc1, 0xa3, 0x3e, 0xbc, 0x70, 0x16, 0xad, 0xa7, 0xbe, 0xcb, 0x09, 0xda, + 0x91, 0x01, 0x44, 0x25, 0xcb, 0xf0, 0xdf, 0x5a, 0xa3, 0xb0, 0xf2, 0xe7, + 0x6c, 0xcc, 0x4c, 0xf8, 0xbb, 0x23, 0x96, 0x01, 0xd4, 0xbb, 0x6a, 0xe7, + 0xc6, 0x05, 0x68, 0x82, 0x2d, 0x96, 0x3c, 0x36, 0x35, 0xb0, 0x93, 0xa5, + 0x26, 0x3c, 0x03, 0x5e, 0x44, 0x63, 0x40, 0xd8, 0x1d, 0x6b, 0xf3, 0xce, + 0x82, 0x67, 0x2c, 0xb9, 0xf2, 0x64, 0x3c, 0x0c, 0x9b, 0x12, 0xd4, 0xad, + 0x3d, 0x05, 0xf9, 0xe8, 0x56, 0x7c, 0xd8, 0x21, 0xa8, 0x82, 0xad, 0x6b, + 0x03, 0x46, 0x48, 0xad, 0x69, 0x75, 0xa8, 0x96, 0xf1, 0x2b, 0xb0, 0x02, + 0x10, 0xd5, 0xb6, 0x59, 0x1e, 0x48, 0x4e, 0xd3, 0xc1, 0x5d, 0xb9, 0x7c, + 0x86, 0x9e, 0xab, 0x16, 0x7c, 0x86, 0x0f, 0x03, 0xb3, 0xed, 0xfd, 0x7a, + 0xec, 0xc9, 0xff, 0xce, 0x49, 0xd7, 0x8f, 0x68, 0xb0, 0x48, 0x24, 0x5b, + 0x88, 0x81, 0x9a, 0x94, 0x34, 0xbd, 0xda, 0x67, 0x6b, 0x0b, 0x66, 0x14, + 0xc1, 0x3d, 0xd5, 0xc8, 0x62, 0x1f, 0x21, 0xad, 0x1a, 0xb8, 0x4a, 0xeb, + 0x2f, 0x65, 0x8a, 0x24, 0xba, 0x0a, 0xc9, 0xc2, 0x91, 0xba, 0xb9, 0x82, + 0xee, 0x2d, 0xef, 0x7a, 0xfa, 0x79, 0xad, 0x57, 0x90, 0x1d, 0x36, 0x11, + 0x58, 0x03, 0xf0, 0x4e, 0xda, 0x00, 0x29, 0xe1, 0x5b, 0xb3, 0xa1, 0x61, + 0x23, 0xfd, 0x74, 0xa0, 0x60, 0x3e, 0xe7, 0x18, 0xab, 0x5a, 0x51, 0xe3, + 0xb6, 0x88, 0xe0, 0x23, 0x55, 0x4a, 0x13, 0x98}, + // secret + {0xf2, 0x55, 0xe4, 0x7b, 0xc3, 0x36, 0xee, 0xfd, 0xec, 0x3b, 0x88, + 0x71, 0x88, 0x1b, 0x26, 0xa6, 0x0b, 0xa8, 0x48, 0xe0, 0x04, 0x97, + 0x6f, 0x97, 0x38, 0x1f, 0x5b, 0xed, 0xb5, 0xf4, 0x67, 0xdd}, + true}, + // tcID: 101 + {101, + params_ml_kem1024_test_mode, + // privateKey + {0x9d, 0xd7, 0xa8, 0xef, 0xb2, 0x07, 0xa4, 0x27, 0x1b, 0xc0, 0x84, 0x73, + 0x29, 0x3b, 0xa3, 0x33, 0x54, 0x39, 0x80, 0xf6, 0x6e, 0xc0, 0x95, 0x28, + 0x4c, 0xc9, 0xa3, 0x6c, 0x70, 0x56, 0x37, 0xca, 0x39, 0xa4, 0x2a, 0xc2, + 0xd5, 0x10, 0x05, 0xd5, 0x87, 0x43, 0xbf, 0x00, 0xbb, 0xbe, 0xa4, 0x62, + 0x0a, 0xa8, 0x97, 0x66, 0x3b, 0x41, 0x71, 0x35, 0x07, 0xbe, 0x66, 0x37, + 0xa8, 0xa3, 0x53, 0xa1, 0xd6, 0x0e, 0x14, 0x41, 0x7a, 0x9d, 0xa8, 0xb3, + 0x5d, 0x94, 0x71, 0xd8, 0x64, 0xbc, 0x71, 0xa2, 0x60, 0x61, 0x61, 0x2c, + 0x1a, 0x6a, 0x4d, 0xc0, 0x8b, 0xc9, 0x46, 0x0a, 0x17, 0x41, 0x90, 0x6d, + 0x19, 0x64, 0x3d, 0x18, 0x5a, 0x50, 0x4a, 0xa3, 0x24, 0x79, 0x88, 0x15, + 0x6a, 0xcc, 0x0f, 0xf8, 0x67, 0x1e, 0x07, 0xb3, 0xc8, 0xd0, 0xba, 0x73, + 0x71, 0x04, 0x6a, 0x18, 0xb7, 0x41, 0x4c, 0xf8, 0xad, 0x01, 0xe9, 0x36, + 0xc1, 0x06, 0x10, 0xd6, 0x86, 0x8c, 0x7c, 0x8b, 0x6e, 0x2b, 0xf5, 0x11, + 0x0d, 0xb1, 0x06, 0xc8, 0x1b, 0x7b, 0x3e, 0xe6, 0xbf, 0x43, 0x99, 0x10, + 0x50, 0xc0, 0x1b, 0xe0, 0xcb, 0x3e, 0xdf, 0x34, 0x9b, 0xb9, 0x28, 0x87, + 0xa1, 0xaa, 0x6f, 0x40, 0xd2, 0x3f, 0x36, 0xdb, 0x16, 0x63, 0x70, 0x69, + 0x26, 0x78, 0x3a, 0xbd, 0x5a, 0x8c, 0x5e, 0xd8, 0x4c, 0x61, 0x38, 0x28, + 0x9a, 0x45, 0xbf, 0x85, 0xf7, 0x82, 0xbd, 0xa8, 0x6b, 0x4f, 0x81, 0xae, + 0xe5, 0xd6, 0x62, 0x85, 0x91, 0xaf, 0x59, 0x47, 0x38, 0xe6, 0xb5, 0x39, + 0x63, 0x0a, 0x93, 0xfa, 0xc1, 0x33, 0xca, 0x40, 0x6e, 0x47, 0x66, 0xa1, + 0xa6, 0xb4, 0xc8, 0x67, 0xea, 0x58, 0x0d, 0x06, 0x00, 0x35, 0x79, 0xc0, + 0xf8, 0x75, 0xc8, 0x83, 0x62, 0x27, 0x8e, 0x45, 0x2d, 0x34, 0x9c, 0x2c, + 0xdb, 0x07, 0x0c, 0x87, 0x74, 0x46, 0xbc, 0x18, 0xb4, 0x00, 0x95, 0x7c, + 0xc0, 0x4a, 0xb7, 0xb0, 0x84, 0xb3, 0xce, 0x28, 0xa3, 0xfa, 0x62, 0x99, + 0xcb, 0x64, 0x43, 0x15, 0xc1, 0xad, 0x0d, 0x69, 0x1f, 0x55, 0xb6, 0x54, + 0x27, 0xca, 0x18, 0x28, 0xe8, 0xa3, 0x40, 0xc5, 0x83, 0x8f, 0x49, 0x09, + 0x0f, 0xa8, 0xb4, 0x7d, 0x53, 0x10, 0x81, 0x82, 0x4e, 0xdf, 0x12, 0x63, + 0x15, 0xb9, 0x02, 0x78, 0x26, 0x62, 0x39, 0xb5, 0x59, 0x66, 0x2c, 0x97, + 0x17, 0xa8, 0xa9, 0x2c, 0x64, 0x29, 0x3e, 0x7c, 0xcb, 0xbb, 0x98, 0xa2, + 0xb3, 0xe8, 0x0e, 0x5c, 0x84, 0x55, 0x24, 0xaa, 0x34, 0xc7, 0xd4, 0x2f, + 0x1a, 0x14, 0x46, 0xbb, 0x81, 0x80, 0x22, 0x14, 0x2a, 0xc6, 0x11, 0x3b, + 0x3e, 0x72, 0x89, 0xd2, 0x00, 0x69, 0x8f, 0xe0, 0x5c, 0xe6, 0x78, 0x87, + 0xc6, 0x53, 0x2c, 0xd6, 0xfa, 0x5c, 0x1a, 0x29, 0x5f, 0x33, 0x95, 0x57, + 0x21, 0x78, 0xb2, 0xe3, 0xc5, 0x15, 0x70, 0x1a, 0x15, 0xd4, 0x0a, 0xaf, + 0x77, 0x78, 0x36, 0x97, 0x91, 0x65, 0x94, 0x23, 0x5c, 0x97, 0xfc, 0x97, + 0x96, 0x52, 0x24, 0x26, 0x40, 0x01, 0x17, 0x58, 0xaa, 0x40, 0x42, 0x48, + 0x21, 0xac, 0x46, 0xf3, 0x3c, 0xa4, 0x3c, 0x1c, 0x5d, 0xd3, 0x16, 0x14, + 0x09, 0x0c, 0x9b, 0xe9, 0x6c, 0x75, 0x84, 0x67, 0x2e, 0xfe, 0x81, 0x03, + 0x68, 0xa7, 0x1d, 0x76, 0x40, 0x3e, 0x32, 0x42, 0x4f, 0x9e, 0x31, 0x97, + 0xd4, 0x45, 0x35, 0xeb, 0x71, 0x7e, 0x21, 0x09, 0x65, 0x3d, 0x3c, 0xa5, + 0x22, 0xa0, 0x88, 0x40, 0x31, 0x56, 0xf1, 0x97, 0x5c, 0xb6, 0x44, 0x7c, + 0xa6, 0x56, 0xb2, 0x74, 0x61, 0xc8, 0xf5, 0xd8, 0xb7, 0x71, 0x18, 0xcd, + 0x7b, 0xb0, 0x13, 0x0a, 0x56, 0xa3, 0xe2, 0x68, 0x96, 0x87, 0x03, 0x1d, + 0xd1, 0x8a, 0x2c, 0x99, 0xb5, 0x1c, 0xcd, 0xf5, 0x62, 0x1b, 0x2c, 0x68, + 0x45, 0x83, 0xce, 0xd0, 0xf2, 0x58, 0x59, 0x11, 0x8c, 0x84, 0xc9, 0xbe, + 0x25, 0x36, 0x03, 0xa8, 0xc6, 0x27, 0xc8, 0x58, 0x2f, 0xdb, 0x4b, 0xb8, + 0x1b, 0xb6, 0x93, 0xce, 0xa8, 0x21, 0xef, 0xd7, 0x12, 0xb3, 0x37, 0x30, + 0xd6, 0x8a, 0x02, 0x32, 0x92, 0x1d, 0x20, 0x21, 0x20, 0xbe, 0x95, 0x94, + 0x01, 0x15, 0x56, 0x70, 0xf1, 0x19, 0xa3, 0x99, 0x01, 0x58, 0xd2, 0xc5, + 0xa6, 0xec, 0x40, 0x15, 0x72, 0x87, 0xbf, 0x5b, 0x70, 0xd7, 0x69, 0x9b, + 0x21, 0x26, 0x65, 0x24, 0x8c, 0xb4, 0x2b, 0xd2, 0xcc, 0x6b, 0x02, 0xba, + 0x15, 0x75, 0x9b, 0xc5, 0x33, 0x3a, 0x53, 0x79, 0x4e, 0x51, 0xd0, 0x33, + 0xba, 0xb1, 0x6f, 0x59, 0xf0, 0xa2, 0x84, 0xb9, 0x21, 0x71, 0x01, 0x7f, + 0xfb, 0x00, 0x25, 0x6b, 0x6c, 0x9f, 0x83, 0x11, 0x18, 0x8f, 0x24, 0xb2, + 0xb2, 0x66, 0x71, 0xa4, 0xf1, 0xc2, 0xaa, 0xa0, 0x00, 0x82, 0x69, 0x26, + 0x46, 0x9b, 0x93, 0x36, 0xd3, 0x15, 0xfd, 0x29, 0xa4, 0xc3, 0x8a, 0x84, + 0x91, 0xf7, 0x9b, 0x1f, 0x9c, 0x3e, 0x9f, 0x65, 0x3e, 0x41, 0xb0, 0xcc, + 0x52, 0xa6, 0x75, 0x6f, 0x80, 0xcb, 0xa4, 0xc2, 0x7d, 0x82, 0xa3, 0x70, + 0x45, 0x94, 0x26, 0xc4, 0xf5, 0x43, 0x2a, 0x56, 0x96, 0x46, 0x3b, 0x40, + 0x7d, 0xf9, 0x38, 0x16, 0x71, 0x1b, 0xbb, 0x54, 0xbe, 0x09, 0x27, 0x93, + 0x97, 0x6c, 0x15, 0x98, 0x56, 0xbe, 0x92, 0x18, 0x3c, 0x3a, 0xe1, 0xc1, + 0x4a, 0x5c, 0x9c, 0x8a, 0x39, 0xac, 0x74, 0x83, 0x67, 0x52, 0xab, 0xb0, + 0x90, 0x65, 0x83, 0x1e, 0x22, 0x94, 0x8e, 0x39, 0x29, 0xeb, 0x00, 0xbf, + 0x56, 0x1c, 0xc5, 0x7a, 0x59, 0x75, 0x30, 0x37, 0x0b, 0x04, 0xe1, 0x04, + 0x58, 0xf3, 0x4e, 0x2b, 0x74, 0x00, 0x53, 0x7c, 0x73, 0xfa, 0x90, 0x2b, + 0x02, 0xbb, 0x13, 0xad, 0x98, 0x90, 0x8a, 0x79, 0x32, 0x08, 0x84, 0x2e, + 0xcd, 0x27, 0xbb, 0xa4, 0xc2, 0x2f, 0xa7, 0x20, 0x4c, 0x81, 0x87, 0x09, + 0x2b, 0x10, 0x12, 0xf3, 0x00, 0x1d, 0x49, 0x51, 0x62, 0xfb, 0x97, 0xa4, + 0xdf, 0x0b, 0x5c, 0x2b, 0x07, 0x40, 0x23, 0x0b, 0x7f, 0xef, 0x2c, 0x5d, + 0x67, 0x9b, 0x25, 0x41, 0x38, 0x73, 0x77, 0xa9, 0x9e, 0x9b, 0x3a, 0x96, + 0x50, 0xe6, 0x4c, 0x44, 0x30, 0x08, 0x97, 0xe8, 0x96, 0x1f, 0x5b, 0x65, + 0xb0, 0x55, 0x99, 0x52, 0x60, 0x3e, 0x80, 0x10, 0x5a, 0x97, 0x9b, 0xa1, + 0xb2, 0xf2, 0x6f, 0x61, 0x03, 0x64, 0x7a, 0x11, 0x23, 0xa7, 0xf8, 0x30, + 0xfe, 0xd2, 0x61, 0x39, 0x49, 0x7d, 0x77, 0xd2, 0x20, 0x34, 0x5a, 0x62, + 0x08, 0x12, 0x78, 0x50, 0x61, 0x33, 0x4c, 0xf0, 0x02, 0xe5, 0x04, 0x39, + 0xb0, 0xb9, 0x3a, 0x80, 0x31, 0x98, 0xfb, 0xd8, 0x0b, 0x23, 0x8c, 0x9f, + 0x96, 0x9c, 0x3b, 0xce, 0x87, 0x81, 0xb1, 0xf2, 0x31, 0x4a, 0xb4, 0x89, + 0x33, 0x62, 0x8c, 0x2e, 0x63, 0x01, 0xb8, 0xfb, 0x51, 0x05, 0x29, 0x97, + 0x39, 0xd3, 0x1e, 0xda, 0xbb, 0x5f, 0xa8, 0xcb, 0xbf, 0x8c, 0x57, 0xc7, + 0x64, 0xe1, 0xb0, 0x4e, 0xd3, 0x53, 0x79, 0xa5, 0x93, 0xfb, 0x86, 0x9b, + 0x7a, 0xe3, 0x7c, 0x0e, 0xf0, 0x93, 0xa4, 0x4a, 0xc1, 0xa7, 0x5c, 0xbb, + 0x29, 0x79, 0x77, 0x6e, 0x34, 0xc0, 0x07, 0x20, 0xb0, 0x95, 0x32, 0x8f, + 0x62, 0x36, 0x66, 0x40, 0x05, 0xae, 0x6a, 0x28, 0x46, 0xa1, 0xba, 0x7e, + 0x08, 0x6b, 0x19, 0xc5, 0x2c, 0x91, 0x35, 0x84, 0x43, 0xc3, 0x95, 0xbe, + 0x76, 0x03, 0x11, 0x0e, 0xf6, 0xa5, 0x64, 0x66, 0x00, 0x09, 0x24, 0x6e, + 0xd4, 0xb8, 0x00, 0xe7, 0x72, 0x50, 0xb9, 0x6c, 0x66, 0x5b, 0x9c, 0xbd, + 0x4b, 0x74, 0xb4, 0x15, 0x4a, 0x8b, 0x98, 0x56, 0x1c, 0xa4, 0x39, 0x5f, + 0x92, 0xd4, 0x05, 0x95, 0x62, 0x23, 0x29, 0x46, 0x92, 0x66, 0x2b, 0x46, + 0xd6, 0x90, 0x43, 0x35, 0x3a, 0x79, 0x23, 0xd7, 0x2b, 0x93, 0xbc, 0x3f, + 0x19, 0x23, 0xaf, 0x70, 0xb9, 0xc1, 0x77, 0x2b, 0x8a, 0xd5, 0x07, 0x86, + 0x86, 0x69, 0x4c, 0x56, 0xc7, 0x46, 0xc0, 0x37, 0x8d, 0x35, 0x73, 0x21, + 0x61, 0xd5, 0x0a, 0x6e, 0x9a, 0xc0, 0x12, 0x79, 0x6a, 0x4a, 0x24, 0x20, + 0x3d, 0x00, 0x38, 0xaa, 0x9b, 0x57, 0x31, 0x93, 0x26, 0x4a, 0x02, 0xbc, + 0x8e, 0x41, 0x92, 0x2a, 0x55, 0x67, 0x70, 0xd6, 0xa2, 0xc7, 0x6a, 0xc5, + 0x15, 0x0c, 0x1f, 0x27, 0xcc, 0x33, 0x60, 0xa3, 0x84, 0x39, 0x7a, 0x11, + 0x8e, 0xd5, 0x87, 0x46, 0xb4, 0x22, 0x1c, 0x84, 0x41, 0x4a, 0x38, 0x67, + 0x11, 0xc0, 0x93, 0x99, 0x8c, 0x70, 0x50, 0x96, 0x45, 0x7f, 0xb9, 0x09, + 0x87, 0x86, 0x98, 0x54, 0x50, 0xc6, 0x45, 0x18, 0x4e, 0x4a, 0x48, 0x61, + 0xc4, 0x75, 0x0b, 0xe9, 0x1c, 0x16, 0xf9, 0xe2, 0x5e, 0x42, 0xc9, 0xbc, + 0x2c, 0x86, 0x5f, 0xa1, 0x18, 0x14, 0x77, 0x12, 0x5c, 0x42, 0xc7, 0x27, + 0x00, 0x06, 0x40, 0xed, 0x09, 0xaa, 0x7f, 0xbc, 0x75, 0x80, 0x8b, 0x0c, + 0x5e, 0x3a, 0xb6, 0x00, 0x4a, 0x73, 0x64, 0xd5, 0x1c, 0x66, 0xb4, 0x8e, + 0x10, 0xa4, 0x2f, 0x6b, 0x62, 0x5b, 0x5f, 0xc0, 0x7f, 0x0c, 0x10, 0x8a, + 0x15, 0xc4, 0x54, 0x7d, 0xac, 0x3e, 0x10, 0xc5, 0x9f, 0x61, 0x32, 0x73, + 0xd4, 0x37, 0x05, 0x08, 0x45, 0x47, 0x0a, 0xb0, 0x2a, 0x95, 0xfa, 0xaa, + 0xdc, 0xa3, 0xb3, 0x36, 0xaa, 0x96, 0x33, 0x4a, 0x1c, 0x87, 0x18, 0x85, + 0xb7, 0xe3, 0xac, 0x73, 0x63, 0x5b, 0xdc, 0x33, 0xbe, 0x65, 0x64, 0x52, + 0x2b, 0x9c, 0x7d, 0x78, 0x9c, 0x45, 0x9e, 0x42, 0x2a, 0x6d, 0xa3, 0xc3, + 0x33, 0xb9, 0xa4, 0xe2, 0x9a, 0x79, 0x2c, 0x68, 0xa6, 0xb6, 0x85, 0x08, + 0x81, 0x76, 0x92, 0x2e, 0x06, 0xc4, 0x2d, 0x0c, 0x03, 0x0a, 0x30, 0xc2, + 0x29, 0xb6, 0x99, 0x45, 0xe3, 0x2d, 0x75, 0x00, 0xa1, 0x75, 0x4a, 0x60, + 0x5b, 0xf3, 0xc5, 0xf0, 0xe5, 0x0c, 0x91, 0x88, 0xc7, 0xa3, 0x78, 0x69, + 0x26, 0x15, 0x14, 0x51, 0x18, 0x7c, 0xb2, 0x93, 0x1f, 0x8e, 0xbb, 0x06, + 0xf3, 0xd8, 0x98, 0x5d, 0x8c, 0x87, 0x1b, 0x02, 0x98, 0x7d, 0x47, 0xca, + 0xd7, 0xc8, 0x4f, 0x42, 0x3c, 0xc2, 0x52, 0xd2, 0x34, 0x0b, 0xf9, 0x0c, + 0x6a, 0x58, 0x24, 0x1b, 0x57, 0x22, 0x0e, 0x78, 0xa2, 0x0c, 0xe8, 0x2d, + 0x28, 0x70, 0x3c, 0x0c, 0x06, 0x19, 0x09, 0x50, 0x57, 0x27, 0x8b, 0x12, + 0x82, 0x89, 0x39, 0x6e, 0x08, 0xbc, 0x87, 0x6b, 0x3e, 0x17, 0x1a, 0x2c, + 0xd2, 0x31, 0xbf, 0x5b, 0xea, 0x90, 0x42, 0x41, 0x8d, 0x9b, 0x42, 0xc7, + 0x5e, 0x2a, 0x90, 0x41, 0x6a, 0x22, 0x59, 0xec, 0x43, 0xd1, 0x05, 0x11, + 0x9e, 0x47, 0x69, 0x50, 0x01, 0xc7, 0x0e, 0x76, 0x6a, 0xfb, 0x79, 0x84, + 0x21, 0xa9, 0x31, 0xa0, 0x5b, 0x45, 0x5b, 0x3a, 0xa7, 0x9e, 0x03, 0x40, + 0x14, 0x35, 0x0c, 0xa7, 0xd4, 0x71, 0x41, 0xf4, 0x3b, 0xf9, 0x00, 0x17, + 0xd6, 0x11, 0x39, 0xdb, 0x38, 0x0d, 0x33, 0x79, 0x39, 0x54, 0xa1, 0x03, + 0x32, 0xf3, 0x77, 0x84, 0xd2, 0x5a, 0xa5, 0x9a, 0x38, 0x78, 0xe0, 0xb9, + 0x9e, 0x4c, 0xc2, 0x91, 0xb6, 0x57, 0xf8, 0x36, 0x8d, 0x1c, 0x02, 0x52, + 0x17, 0xa2, 0x92, 0xfa, 0x20, 0x0a, 0x9c, 0xba, 0xb8, 0xce, 0x83, 0x2e, + 0xa9, 0xbc, 0x97, 0x4e, 0xaa, 0x4c, 0xee, 0x3b, 0x87, 0x5d, 0x12, 0xc0, + 0xbc, 0x9b, 0x9c, 0x57, 0xb5, 0x6a, 0x42, 0x58, 0x16, 0xd9, 0xb1, 0x4c, + 0x6a, 0x90, 0x97, 0x4f, 0x34, 0xa7, 0x8a, 0x18, 0x69, 0x03, 0xda, 0x0e, + 0xae, 0x76, 0xc0, 0xd1, 0xa9, 0x03, 0xd8, 0x39, 0x03, 0xba, 0x10, 0x75, + 0x21, 0x09, 0x6b, 0x9b, 0xbc, 0x2b, 0x82, 0x26, 0x8a, 0x3d, 0x89, 0x74, + 0x28, 0x96, 0x82, 0x16, 0x36, 0x20, 0x17, 0xf9, 0x67, 0x86, 0x65, 0x98, + 0xd8, 0xa1, 0x55, 0x9d, 0x06, 0x7f, 0xcd, 0xa8, 0x01, 0x8a, 0x72, 0x45, + 0xec, 0xdb, 0x70, 0xbf, 0x96, 0x73, 0x8e, 0xe7, 0x87, 0x3e, 0x14, 0x6d, + 0x2e, 0x97, 0x15, 0xa6, 0xab, 0xba, 0x07, 0x41, 0x3f, 0xf9, 0xf9, 0x02, + 0xa3, 0xd9, 0x66, 0xd3, 0xc7, 0x94, 0xfa, 0xc8, 0x3d, 0x79, 0x37, 0x03, + 0x4d, 0xb0, 0xce, 0x64, 0x5b, 0x0c, 0xe8, 0x04, 0x0a, 0xf9, 0xa5, 0xa8, + 0x71, 0x35, 0x03, 0xf0, 0x71, 0x54, 0x94, 0x5c, 0x0b, 0xa8, 0x05, 0x97, + 0x80, 0x55, 0x7a, 0x0a, 0x1b, 0x84, 0x75, 0x68, 0x1f, 0xf1, 0xb7, 0x3f, + 0xee, 0x22, 0x70, 0x91, 0xd3, 0x77, 0x78, 0x29, 0x93, 0x29, 0x9c, 0x02, + 0xf5, 0xe9, 0xa5, 0x82, 0x91, 0xa7, 0x40, 0x3c, 0x86, 0x20, 0xa4, 0x01, + 0x45, 0x9b, 0xb0, 0x16, 0x43, 0xc6, 0x23, 0x59, 0x0b, 0x68, 0x5b, 0xc2, + 0xff, 0xf2, 0x8b, 0x28, 0x06, 0x61, 0x3e, 0x29, 0x26, 0xc8, 0xa8, 0x02, + 0xb5, 0x1c, 0xb8, 0xed, 0x10, 0x05, 0xac, 0xb2, 0x55, 0xdf, 0x50, 0x06, + 0xce, 0x37, 0x3c, 0x83, 0xc5, 0x4e, 0x3c, 0xe1, 0x59, 0x77, 0xbc, 0x8c, + 0x8e, 0x75, 0x15, 0x49, 0x8a, 0x3f, 0x1b, 0x58, 0x59, 0x4a, 0x22, 0x48, + 0xb4, 0xf4, 0x50, 0xf6, 0x87, 0x9f, 0xee, 0x66, 0xc2, 0x14, 0xba, 0x4c, + 0x65, 0xd5, 0x86, 0xe1, 0xec, 0x0e, 0x44, 0xd8, 0x44, 0x5d, 0xbc, 0x8a, + 0x60, 0x75, 0x54, 0x59, 0xd1, 0xc2, 0x9d, 0x3a, 0x25, 0xd7, 0x53, 0xc5, + 0x4d, 0x72, 0x1d, 0x24, 0x81, 0x02, 0xd9, 0xb1, 0x71, 0x82, 0x32, 0x32, + 0x76, 0x7c, 0x5f, 0x4c, 0xd7, 0x3e, 0xdc, 0x35, 0x53, 0xf2, 0xf1, 0xba, + 0x94, 0x00, 0x96, 0xef, 0x15, 0x4e, 0xbb, 0x67, 0x00, 0xf4, 0x21, 0x8c, + 0xa9, 0x40, 0x5f, 0x91, 0x89, 0x96, 0x68, 0x1c, 0x59, 0x89, 0x7c, 0x86, + 0x8b, 0xd5, 0x6e, 0x54, 0x83, 0x37, 0x6a, 0x89, 0x64, 0x93, 0x93, 0xb7, + 0xb6, 0xe3, 0xbb, 0x53, 0xc9, 0x70, 0x1b, 0xa0, 0x22, 0x78, 0x87, 0x7a, + 0x53, 0x54, 0x6e, 0x6b, 0x38, 0x00, 0x85, 0x55, 0xa8, 0x1c, 0xa9, 0x1f, + 0x47, 0xe0, 0x5b, 0x40, 0x34, 0x8e, 0x2a, 0x16, 0xca, 0xe0, 0x35, 0x07, + 0xf6, 0x6b, 0xac, 0xee, 0x87, 0x41, 0xed, 0x1b, 0x38, 0x70, 0x42, 0x67, + 0xcd, 0x7c, 0x29, 0xec, 0xf1, 0x3f, 0x9b, 0xb0, 0x72, 0xc8, 0x1a, 0x71, + 0x6e, 0x89, 0x65, 0x1d, 0x57, 0x5d, 0x6f, 0xab, 0x5f, 0xde, 0xbb, 0xc0, + 0xc9, 0x86, 0x0f, 0xff, 0xca, 0xa1, 0x93, 0x99, 0xc6, 0x90, 0xb2, 0x18, + 0x4e, 0xbb, 0x8e, 0xf4, 0xf2, 0xa8, 0xff, 0xc1, 0x49, 0xb5, 0x98, 0x5c, + 0x7b, 0x3a, 0xa0, 0xec, 0xf6, 0x4b, 0x13, 0xea, 0x38, 0x01, 0x3b, 0x57, + 0x01, 0xb4, 0x90, 0x04, 0x05, 0x2d, 0xce, 0xc7, 0xbf, 0x10, 0x44, 0xc8, + 0x00, 0xf8, 0x6b, 0x5c, 0xe1, 0x31, 0x7f, 0x28, 0x56, 0x73, 0x98, 0x5d, + 0xeb, 0x34, 0x58, 0x8f, 0xec, 0x25, 0x96, 0x83, 0xc7, 0xb0, 0x83, 0x82, + 0xa8, 0x77, 0xaa, 0xff, 0xcc, 0xcb, 0x06, 0xb2, 0x1c, 0xe7, 0x83, 0x96, + 0x07, 0xcc, 0x2e, 0x7a, 0x13, 0xb7, 0xb5, 0x26, 0x8f, 0xd3, 0x14, 0x42, + 0x47, 0x40, 0x86, 0x4f, 0xc1, 0x0b, 0x55, 0x52, 0x64, 0x1f, 0xaa, 0x41, + 0x0f, 0xc6, 0x33, 0xf9, 0x03, 0x0d, 0xb1, 0x60, 0x2a, 0x84, 0x87, 0xa6, + 0x64, 0xf2, 0x52, 0xf1, 0xe1, 0x93, 0x6c, 0x64, 0x79, 0x12, 0xd8, 0x20, + 0x5d, 0xa1, 0x6c, 0xfc, 0x9a, 0x6f, 0x89, 0x62, 0x2f, 0x3b, 0xa4, 0xbb, + 0xef, 0x22, 0x34, 0x3f, 0x40, 0x8c, 0x6f, 0xb2, 0x5f, 0x90, 0x03, 0x79, + 0x44, 0xe0, 0x57, 0x92, 0x5c, 0x05, 0xe7, 0xcc, 0xbc, 0xd0, 0x20, 0x41, + 0xe1, 0xcb, 0x9c, 0x02, 0x9b, 0x9b, 0x12, 0x55, 0x82, 0xe4, 0xf7, 0xb6, + 0x2d, 0x32, 0x43, 0xa5, 0xac, 0xb5, 0x0c, 0x50, 0x36, 0x4b, 0x27, 0x34, + 0x1b, 0x9c, 0x2e, 0x10, 0x17, 0x42, 0xce, 0x89, 0x27, 0xbe, 0x7b, 0x89, + 0x33, 0xf6, 0x02, 0x7b, 0x21, 0x45, 0xda, 0xaa, 0x31, 0x1f, 0xc3, 0xc6, + 0xde, 0x80, 0x44, 0x1d, 0xd4, 0x70, 0x92, 0x33, 0x6b, 0xd8, 0x34, 0xbd, + 0x77, 0xa2, 0xa5, 0x97, 0x41, 0x56, 0x22, 0x7a, 0xcb, 0x24, 0x25, 0x2c, + 0x0f, 0xb3, 0x56, 0x16, 0x01, 0x5d, 0x2c, 0xc6, 0xcc, 0x33, 0xe9, 0x32, + 0x8a, 0x49, 0x86, 0x8a, 0xb6, 0x30, 0xf1, 0xcc, 0x14, 0xd8, 0x53, 0x0b, + 0xf0, 0xa6, 0x8d, 0xa1, 0xd2, 0x44, 0xad, 0x96, 0x0f, 0xde, 0x1a, 0x63, + 0xbb, 0x88, 0x0f, 0x5b, 0xf6, 0x7a, 0x4d, 0x88, 0x89, 0xd7, 0x10, 0x28, + 0x51, 0xe8, 0x5d, 0x80, 0x13, 0x0b, 0x34, 0x41, 0x81, 0xa6, 0x9c, 0x23, + 0xfb, 0x34, 0x62, 0x0a, 0x9a, 0xca, 0x78, 0xc1, 0x24, 0x71, 0x89, 0x82, + 0x94, 0x0a, 0xb5, 0x7c, 0x57, 0x0c, 0xcd, 0x73, 0x68, 0xe3, 0xb8, 0xbf, + 0xe4, 0x7a, 0x6e, 0xd0, 0xf8, 0x38, 0x92, 0x9b, 0xc6, 0x8e, 0x55, 0x82, + 0x96, 0xfc, 0x1e, 0x0e, 0xd4, 0x6b, 0x9c, 0x40, 0x1f, 0x70, 0x68, 0xb1, + 0xec, 0xd2, 0x86, 0x26, 0xf3, 0x77, 0x79, 0xb3, 0xc9, 0x50, 0xb9, 0x14, + 0xd7, 0x44, 0x7d, 0x04, 0x1c, 0x79, 0xaa, 0x1c, 0x72, 0x55, 0x0b, 0x08, + 0xfd, 0xb1, 0x38, 0x29, 0xd0, 0x56, 0x92, 0x40, 0x6d, 0x57, 0xda, 0x18, + 0x1e, 0x77, 0x2c, 0x2c, 0x79, 0x32, 0x9b, 0xe8, 0x1d, 0xb2, 0x0b, 0x88, + 0x07, 0xca, 0x46, 0x0d, 0xbc, 0x1b, 0x68, 0xa4, 0x9e, 0x41, 0x81, 0xcb, + 0xcb, 0xfc, 0x19, 0x24, 0xda, 0x16, 0x7f, 0x92, 0x02, 0xa7, 0x77, 0xb7, + 0x1e, 0x7b, 0x79, 0x4b, 0x0b, 0x8f, 0xf5, 0x43, 0x75, 0xfc, 0xb4, 0x23, + 0x1b, 0x64, 0x8b, 0x3a, 0xc2, 0x29, 0xca, 0x9c, 0x12, 0x15, 0x16, 0x85, + 0x53, 0xa6, 0xcd, 0x1e, 0xb9, 0xaf, 0xcd, 0x29, 0x9c, 0x0a, 0x96, 0x26, + 0x6a, 0xe0, 0x9c, 0x06, 0xda, 0x56, 0x41, 0xfb, 0x72, 0xb1, 0x5b, 0x9f, + 0x26, 0xd7, 0x9f, 0xac, 0xe2, 0x4c, 0x26, 0xe6, 0x7a, 0x33, 0xb2, 0x8b, + 0x1a, 0x80, 0x53, 0x8a, 0xc9, 0xba, 0x94, 0x3a, 0x7e, 0xe2, 0x39, 0xab, + 0x6e, 0x33, 0x49, 0xd6, 0x56, 0x74, 0xe9, 0x21, 0x2e, 0xcf, 0x77, 0x62, + 0xdb, 0xd0, 0xa2, 0x31, 0x19, 0xaf, 0x81, 0x08, 0x97, 0xff, 0x33, 0x19, + 0x70, 0xe0, 0x66, 0x7b, 0xf0, 0x79, 0x99, 0xa5, 0x31, 0xb5, 0x96, 0xb0, + 0xd4, 0x11, 0x6b, 0x24, 0x47, 0x6b, 0xdb, 0x97, 0x57, 0xd4, 0xb6, 0x7b, + 0xfc, 0x99, 0xa4, 0xd3, 0x28, 0x2b, 0xf4, 0x15, 0xa5, 0x44, 0x75, 0x39, + 0x34, 0x55, 0x2a, 0x1c, 0x05, 0x19, 0xa1, 0x32, 0xc8, 0x48, 0x04, 0x80, + 0x3c, 0xfc, 0x27, 0x21, 0xa6, 0x2d, 0x84, 0x8a, 0x07, 0xde, 0xd6, 0x47, + 0xb0, 0x24, 0x69, 0x47, 0xd0, 0x03, 0xb5, 0xd0, 0x14, 0xc4, 0x4b, 0xbd, + 0xb4, 0xd3, 0xbf, 0xc0, 0x68, 0xc0, 0x99, 0x36, 0x44, 0x95, 0x93, 0x72, + 0x24, 0x21, 0x6b, 0x6d, 0xfb, 0x79, 0xdc, 0x87, 0x06, 0x86, 0xe5, 0xa5, + 0xcb, 0xbc, 0x36, 0x62, 0x68, 0xb8, 0xcd, 0x24, 0xa3, 0xcf, 0x61, 0x01, + 0xc2, 0xd6, 0x53, 0x7c, 0x57, 0x25, 0x21, 0x55, 0xaa, 0xe5, 0x70, 0xbb, + 0xcd, 0x95, 0x8d, 0x25, 0xd5, 0x1b, 0xe9, 0x5b, 0x54, 0x5a, 0x24, 0xad, + 0x29, 0xd6, 0x35, 0x5c, 0x34, 0xa8, 0x1e, 0x75, 0x8d, 0xe7, 0xe6, 0x71, + 0xb9, 0x32, 0xa9, 0xab, 0xa8, 0x09, 0x87, 0xe6, 0x37, 0x81, 0xdb, 0x36, + 0x7c, 0xc0, 0xce, 0xd8, 0x98, 0x7c, 0x68, 0x84, 0x28, 0x41, 0x66, 0x25, + 0xa9, 0x7c, 0x77, 0xdd, 0x32, 0x51, 0x72, 0x67, 0x16, 0xd3, 0x75, 0xb0, + 0xff, 0xd8, 0x83, 0x6d, 0x6a, 0x60, 0x6d, 0xfc, 0x7a, 0x92, 0xa7, 0x27, + 0xcf, 0xd0, 0xbd, 0x51, 0x79, 0xa5, 0x5e, 0x62, 0x06, 0xbf, 0x83, 0x98, + 0x3e, 0x75, 0x6b, 0xc1, 0x50, 0xb9, 0xbe, 0xf5, 0x2d, 0x12, 0x72, 0x26, + 0xa1, 0x06, 0xc8, 0x07, 0x6b, 0x91, 0xeb, 0xa3, 0x2b, 0x43, 0x84, 0x22, + 0x4f, 0x97, 0x0f, 0xf0, 0x39, 0x39, 0x36, 0xe8, 0x9a, 0xa0, 0x4b, 0x86, + 0x4e, 0xd7, 0x35, 0x72, 0x19, 0x4a, 0x62, 0x8a, 0x05, 0x3d, 0x52, 0x6f, + 0x5f, 0xeb, 0x58, 0x0c, 0x42, 0x70, 0xf1, 0x22, 0x6d, 0x1e, 0xe9, 0x07, + 0xb0, 0x47, 0x79, 0x12, 0x10, 0xb3, 0xe3, 0x88, 0xb0, 0x75, 0x39, 0x70, + 0x95, 0x77, 0x06, 0xf1, 0x86, 0x4f, 0xb7, 0xec, 0x2a, 0x31, 0x4b, 0x81, + 0x24, 0x94, 0xad, 0x9a, 0x3b, 0x6f, 0x82, 0xc5, 0x67, 0xac, 0xac, 0x2d, + 0xda, 0xd6, 0xa0, 0x5d, 0x72, 0x0d, 0x8e, 0xe8, 0x08, 0x19, 0xcb, 0x47, + 0x81, 0x9a, 0x21, 0xb6, 0x4c, 0x06, 0x33, 0x64, 0x4c, 0xf2, 0x30, 0xba, + 0xd9, 0x29, 0x20, 0xb4, 0x51, 0x71, 0x1c, 0x28, 0x6a, 0x04, 0xbb, 0xae, + 0x34, 0xe1, 0xb5, 0x5e, 0x73, 0x7f, 0x48, 0x7b, 0x37, 0xd3, 0x32, 0x74, + 0xb5, 0x91, 0x27, 0x2f, 0x56, 0x2e, 0x27, 0x1a, 0x88, 0x48, 0x54, 0xac, + 0x3d, 0x2c, 0x35, 0xe2, 0x94, 0x99, 0x37, 0xe0, 0x55, 0x0d, 0x10, 0x85, + 0x4b, 0x46, 0x13, 0xfe, 0xd9, 0x29, 0x97, 0x2a, 0x24, 0x0d, 0xe0, 0x8a, + 0x2b, 0xbc, 0x76, 0xfd, 0xfc, 0xbd, 0x13, 0xf9, 0x1c, 0x3f, 0x07, 0x4e, + 0xa6, 0xfb, 0x81, 0x42, 0x89, 0x73, 0x9f, 0xfb, 0x46, 0x4d, 0x7c, 0xb9, + 0xca, 0xd2, 0x80, 0xdb, 0x16, 0xb3, 0x5c, 0x23, 0x54, 0x8d, 0x7c, 0x0c, + 0x44, 0xc7, 0x65, 0x41, 0xb7, 0x01, 0xf9, 0x9a, 0xac, 0x04, 0xbb, 0x17, + 0x43, 0xb4, 0x67, 0x78, 0x8a, 0x83, 0x6d, 0xb9, 0x6e, 0x3d, 0x53, 0x0c, + 0xc3, 0x92, 0x9f, 0xc4, 0x24, 0x70, 0x5a, 0x86, 0x32, 0xf1, 0xb4, 0x37, + 0xdc, 0x45, 0xb8, 0x6b, 0x33, 0x28, 0xb1, 0x5b, 0x1c, 0xd8, 0x62, 0x45, + 0x5d, 0x99, 0x1e, 0x14, 0x69, 0x95, 0x37, 0xeb, 0x94, 0xe7, 0x66, 0xb5, + 0x09, 0xd1, 0xce, 0xbf, 0xe4, 0x11, 0xe3, 0xd1, 0x4b, 0x92, 0x09, 0x9a, + 0x80, 0x32, 0x50, 0xf5, 0x46, 0x63, 0x97, 0xb2, 0x43, 0x9b, 0xfa, 0x15, + 0x9b, 0xe2, 0x50, 0xe7, 0xd1, 0x4a, 0x72, 0xe4, 0xcf, 0xcc, 0xd2, 0x4a, + 0xa4, 0x99, 0x8e, 0xc7, 0x75, 0xa8, 0xe0, 0x31, 0xb9, 0x69, 0x19, 0x80, + 0xf5, 0x0a, 0x04, 0x07, 0xca, 0x22, 0x1d, 0xcb, 0xc3, 0x88, 0x0c, 0x3a, + 0x25, 0xa5, 0x41, 0x64, 0xd6, 0x91, 0x3d, 0x01, 0x6b, 0x63, 0xd2, 0x7b, + 0x66, 0x43, 0x4b, 0xea, 0x65, 0xc8, 0x0f, 0x3a, 0x75, 0x3c, 0x57, 0x31, + 0x8e, 0xf9, 0x8d, 0x36, 0xa8, 0x02, 0x72, 0xa0, 0xaa, 0x71, 0x48, 0xc8, + 0x76, 0x11, 0x70, 0xac, 0x97, 0x97, 0x90, 0x94, 0xaf, 0xc5, 0x48, 0x5f, + 0xff, 0x10, 0x49, 0x3d, 0x1b, 0x1e, 0x09, 0xa7, 0x14, 0x9d, 0x35, 0x3b, + 0x25, 0x3c, 0x1b, 0x6a, 0xcc, 0x04, 0xa2, 0xd7, 0xc9, 0xc0, 0xd3, 0x9f, + 0x69, 0x3a, 0x75, 0x73, 0xe8, 0x53, 0xb5, 0x58, 0x46, 0x16, 0x72, 0x14, + 0xc6, 0x88, 0x69, 0x28, 0xcc, 0x84, 0x43, 0x97, 0x50, 0x34, 0x18, 0xac, + 0x41, 0x49, 0x24, 0xa2, 0xfa, 0x37, 0xba, 0xf1, 0x9d, 0xd3, 0x32, 0x32, + 0xf9, 0xc9, 0xf9, 0xdd, 0x1a, 0xfc, 0x78, 0x31, 0x8c, 0xf6, 0xa3, 0x72, + 0x30, 0xd9, 0xe5, 0xcc, 0x17, 0x81, 0x79, 0xcf, 0xd2, 0xd0, 0x81, 0x89, + 0x94, 0x85, 0x50, 0xb0, 0xa7, 0x51, 0x6e, 0xae, 0xb1, 0x61, 0x71, 0x39, + 0x83, 0x09, 0x7a, 0x7d, 0x58, 0xc1, 0x44, 0xe1, 0x85, 0x3c, 0x9e, 0xd0, + 0x02, 0x91, 0x34, 0x13, 0x44, 0x1d, 0xa2, 0x7b, 0xde, 0xae, 0xb1, 0xec, + 0x1a, 0xbd, 0x9e, 0x26, 0x46, 0xb0, 0x5a, 0x31, 0x11, 0x09, 0xb1, 0x1d, + 0xd7, 0xef, 0x25, 0xe9, 0x3a, 0xbb, 0xa1, 0x34, 0x5f, 0x10, 0x6c, 0x6c}, + // ciphertext + {0xd6, 0x65, 0x9c, 0xed, 0x59, 0x78, 0x24, 0x67, 0x39, 0xf1, 0xdf, 0x34, + 0xe2, 0xb8, 0x71, 0x99, 0xc7, 0xed, 0x98, 0xdc, 0x02, 0xdb, 0xa2, 0x76, + 0xfe, 0xe6, 0xb1, 0x44, 0x91, 0xf3, 0xd9, 0x58, 0xdd, 0x59, 0xf9, 0x10, + 0x8a, 0x56, 0x0b, 0x21, 0x49, 0xd0, 0xa3, 0x1d, 0x07, 0x23, 0xee, 0x21, + 0xd0, 0x6f, 0xe7, 0x5a, 0xd9, 0x24, 0xa7, 0x78, 0xb2, 0xb0, 0x20, 0xd5, + 0xb3, 0xd6, 0x75, 0x59, 0x1b, 0x6c, 0x43, 0x36, 0xb8, 0x1b, 0xc2, 0xa5, + 0xf9, 0xa5, 0xae, 0x5b, 0x01, 0x12, 0x68, 0x5c, 0x35, 0xf3, 0xb1, 0x40, + 0x4a, 0xcc, 0x22, 0x3a, 0xb5, 0x38, 0x3e, 0x21, 0x3b, 0xec, 0x1b, 0xf9, + 0x51, 0x47, 0x24, 0xaf, 0xeb, 0xe6, 0x9c, 0x84, 0x84, 0xc6, 0xbf, 0x28, + 0x7e, 0xb6, 0xfd, 0xa8, 0x68, 0x1c, 0xd4, 0x55, 0x2a, 0xb2, 0xe4, 0xe0, + 0xc3, 0x01, 0x39, 0xf4, 0x35, 0xf4, 0x05, 0x7b, 0xf9, 0xa8, 0x84, 0x42, + 0x26, 0xe4, 0x85, 0x4a, 0x8d, 0x4a, 0xdc, 0x08, 0x44, 0x1b, 0x71, 0xc9, + 0x4c, 0xda, 0xa4, 0x05, 0x41, 0x04, 0x89, 0x5d, 0x09, 0x6f, 0x3f, 0x09, + 0x93, 0xc6, 0xe0, 0xc9, 0xfd, 0xcd, 0xfc, 0x0b, 0x9a, 0xce, 0x1a, 0x57, + 0x44, 0x19, 0x10, 0xea, 0x73, 0xf0, 0x82, 0x12, 0x89, 0xde, 0x79, 0x8f, + 0xdd, 0x3b, 0x01, 0x68, 0x2a, 0x03, 0xe5, 0x20, 0x32, 0x15, 0xe2, 0xde, + 0xa2, 0xb5, 0x76, 0x6a, 0x10, 0xd6, 0xc8, 0xb5, 0x30, 0x8a, 0xe9, 0xdd, + 0x2a, 0x7d, 0x84, 0x08, 0x36, 0x3c, 0x88, 0x02, 0x40, 0x0a, 0xf2, 0x13, + 0x87, 0xbb, 0x9c, 0xdc, 0x85, 0x0b, 0x2e, 0x78, 0x05, 0x80, 0x8d, 0x4d, + 0xbe, 0x3f, 0x12, 0x27, 0x5b, 0x3a, 0x98, 0x0d, 0xe2, 0x40, 0x1b, 0x62, + 0xf6, 0xcf, 0xe0, 0xc9, 0x65, 0x9a, 0x9d, 0x18, 0x5c, 0xe1, 0x1c, 0x5e, + 0xdf, 0xba, 0xb0, 0x39, 0x0b, 0x58, 0x53, 0x3e, 0x46, 0x48, 0x0f, 0x20, + 0x55, 0xf1, 0xfd, 0xa9, 0x3b, 0x6b, 0xff, 0x0a, 0x9b, 0xf8, 0x95, 0x4c, + 0x72, 0x32, 0x4d, 0x64, 0xd9, 0xc2, 0x4f, 0xcd, 0x2b, 0x13, 0x19, 0x96, + 0x10, 0xe6, 0x89, 0x2f, 0xe4, 0xc4, 0x36, 0xa8, 0x4b, 0x61, 0x5a, 0x99, + 0xe1, 0x41, 0x89, 0x5e, 0x47, 0x48, 0x0b, 0x91, 0x35, 0x51, 0x3c, 0x2e, + 0xac, 0xc1, 0xf4, 0x58, 0x81, 0x25, 0x5c, 0x0f, 0xc4, 0x95, 0xfa, 0x49, + 0x88, 0xa0, 0x2a, 0x2b, 0x62, 0x69, 0x65, 0x54, 0x82, 0x2d, 0x63, 0x7c, + 0x9a, 0xd1, 0x4f, 0x40, 0x32, 0xa3, 0x8e, 0x30, 0xa7, 0x51, 0xb2, 0x97, + 0x4c, 0xa6, 0x18, 0x95, 0x9b, 0xd8, 0xf6, 0xc7, 0x1f, 0xc3, 0x5c, 0xe0, + 0x24, 0xd7, 0xfa, 0xce, 0xcf, 0xf8, 0x51, 0x11, 0x45, 0xdf, 0x96, 0x43, + 0xe8, 0x47, 0x74, 0x09, 0x2d, 0x6b, 0xd7, 0x8a, 0x3f, 0x21, 0x6d, 0xfd, + 0xe5, 0xe4, 0x6e, 0xa1, 0xf7, 0xde, 0xd9, 0xaa, 0x7d, 0x5b, 0xba, 0x46, + 0x03, 0x3a, 0xbb, 0x16, 0xd4, 0x1a, 0x0f, 0xce, 0x60, 0xe5, 0x1c, 0x2c, + 0xeb, 0x99, 0x44, 0x8f, 0xd5, 0xb5, 0x6c, 0x0a, 0xb2, 0x56, 0x85, 0x2a, + 0xd4, 0xc2, 0x23, 0xee, 0xdd, 0x23, 0xa9, 0x43, 0x12, 0xeb, 0x31, 0x68, + 0xa9, 0x58, 0xa1, 0x43, 0xb7, 0x77, 0x0a, 0x32, 0x6f, 0x00, 0xd2, 0x68, + 0xcc, 0xa9, 0x7d, 0x23, 0x2a, 0x6b, 0x6c, 0x56, 0x65, 0x01, 0x24, 0x3f, + 0x80, 0xc9, 0xbf, 0x97, 0xe9, 0xfb, 0x24, 0xaf, 0x76, 0x19, 0x1d, 0x12, + 0x2e, 0x60, 0xb7, 0x59, 0x86, 0xa3, 0x2d, 0x48, 0x39, 0x74, 0x72, 0x4f, + 0xaf, 0x5e, 0x9d, 0x4d, 0x90, 0x98, 0x95, 0xe4, 0xc0, 0x1c, 0x88, 0x48, + 0xd7, 0xd5, 0xee, 0xd3, 0xf5, 0x06, 0xf1, 0x6a, 0xc1, 0xe9, 0x70, 0x6c, + 0x6b, 0xb3, 0xca, 0xc5, 0xf0, 0x97, 0xca, 0xe8, 0x83, 0x83, 0xbb, 0x6d, + 0x9c, 0xe1, 0xfc, 0xc9, 0x1e, 0x01, 0x19, 0x07, 0xf7, 0x29, 0x24, 0x62, + 0xda, 0x88, 0x25, 0x44, 0x50, 0xd2, 0x3d, 0x2a, 0xef, 0x3e, 0xfe, 0x4c, + 0x3a, 0x28, 0xc5, 0x9b, 0xf9, 0x59, 0x6a, 0x22, 0xa5, 0x4b, 0xc5, 0xcc, + 0x6b, 0xa6, 0x6b, 0xc3, 0x29, 0x90, 0x43, 0xd9, 0x0c, 0xc0, 0x36, 0x2e, + 0xd4, 0x71, 0x2c, 0xa9, 0x62, 0x3b, 0xbc, 0x1a, 0x22, 0xbb, 0x9a, 0xf1, + 0x95, 0x20, 0x0f, 0x60, 0xe5, 0xbf, 0x16, 0x89, 0x8f, 0x48, 0xba, 0x60, + 0x68, 0x1a, 0x5f, 0x2f, 0x27, 0x02, 0x41, 0x3a, 0x71, 0x89, 0x2a, 0xd4, + 0x88, 0xc6, 0x89, 0xaa, 0x9d, 0x98, 0xbb, 0x01, 0x3e, 0xdf, 0x09, 0x1d, + 0x90, 0x0e, 0xaf, 0x2e, 0x6f, 0x08, 0x64, 0x5a, 0x5d, 0xcd, 0x72, 0xa8, + 0x85, 0xf3, 0x26, 0x1c, 0xb0, 0x20, 0x87, 0x03, 0x9d, 0x65, 0x92, 0x2b, + 0x65, 0x0e, 0x80, 0xec, 0x93, 0x7c, 0x2e, 0x07, 0x1f, 0x8e, 0x03, 0x9d, + 0xc6, 0x1c, 0xf9, 0xc9, 0xf0, 0xea, 0x27, 0x35, 0x5b, 0x73, 0x02, 0x62, + 0x2a, 0x82, 0x39, 0x5c, 0x4b, 0x08, 0x7e, 0xad, 0x07, 0x2a, 0x27, 0xec, + 0x27, 0x6c, 0x0b, 0x19, 0x97, 0x6b, 0x0a, 0xa2, 0xad, 0x76, 0xc8, 0x85, + 0xb8, 0xcf, 0x77, 0x59, 0xae, 0xff, 0xca, 0x82, 0xca, 0x05, 0x76, 0xde, + 0x8f, 0x86, 0x26, 0x4e, 0x3f, 0x56, 0x62, 0x37, 0xa4, 0x36, 0x51, 0x6c, + 0xda, 0x35, 0xe4, 0xf0, 0xcc, 0xb1, 0x21, 0x43, 0x24, 0x51, 0x38, 0xa8, + 0xa0, 0xc3, 0xcb, 0xb7, 0x5a, 0x33, 0x0f, 0xf5, 0xea, 0x7f, 0xd8, 0x3d, + 0x0b, 0xe5, 0xfa, 0x09, 0xb8, 0xc9, 0x51, 0x50, 0xf4, 0xbd, 0xd2, 0x40, + 0x6d, 0x21, 0x55, 0xe2, 0x6f, 0x08, 0x28, 0x41, 0xfa, 0xcc, 0xa5, 0x31, + 0xc0, 0x57, 0x2c, 0x1f, 0x96, 0x9a, 0xef, 0x1b, 0xf2, 0x2d, 0xe8, 0xc7, + 0x42, 0x68, 0x79, 0x13, 0xbc, 0x52, 0xe8, 0x80, 0xb2, 0x31, 0xc0, 0x97, + 0xae, 0xb9, 0x29, 0x92, 0x00, 0x83, 0x71, 0xdb, 0x70, 0x7b, 0xcc, 0x2c, + 0x91, 0x2f, 0x08, 0xf1, 0x96, 0xd4, 0xf3, 0x6d, 0xde, 0x06, 0x86, 0x80, + 0x9e, 0xe8, 0xba, 0xb0, 0xb3, 0xad, 0x64, 0xca, 0x61, 0xea, 0x89, 0x93, + 0xbd, 0xb8, 0x93, 0x39, 0xaa, 0xf8, 0xea, 0x22, 0x78, 0x82, 0x0f, 0xd5, + 0x84, 0xed, 0x3f, 0xb2, 0xb2, 0x67, 0xdc, 0x06, 0x25, 0xba, 0x64, 0x31, + 0xfe, 0x82, 0xd5, 0x4a, 0xeb, 0x21, 0xee, 0x80, 0x15, 0x00, 0xca, 0x88, + 0x3b, 0xa9, 0x4e, 0x51, 0x55, 0x0b, 0x4c, 0xe2, 0xc7, 0xbc, 0xb5, 0x34, + 0x58, 0x63, 0x88, 0x94, 0x4b, 0x55, 0x61, 0x52, 0x4e, 0x0c, 0x24, 0x35, + 0x33, 0x0c, 0x03, 0xc7, 0x35, 0xdb, 0x5a, 0x82, 0x3c, 0xa0, 0x5a, 0x85, + 0xc3, 0x8e, 0xe2, 0xfe, 0xe5, 0x83, 0x3a, 0x6e, 0xa9, 0xb0, 0x33, 0x1f, + 0x09, 0x06, 0xce, 0x90, 0xcc, 0x3d, 0x18, 0xa2, 0x4c, 0x9e, 0x1b, 0xc0, + 0x41, 0x77, 0x95, 0xf9, 0xa0, 0xd1, 0xbc, 0x5f, 0x1a, 0xe1, 0xb9, 0x2b, + 0x58, 0xd4, 0x42, 0xde, 0xbd, 0x05, 0x4e, 0xd9, 0x00, 0xf2, 0x4d, 0x46, + 0xed, 0xa9, 0xa5, 0xed, 0x49, 0xc8, 0x01, 0x64, 0x40, 0x34, 0x3b, 0x05, + 0x30, 0xd9, 0xa1, 0x14, 0x8f, 0xa5, 0x61, 0xea, 0x17, 0x9a, 0x55, 0xe2, + 0xa8, 0x53, 0x4c, 0x7f, 0x9e, 0x65, 0xc5, 0x8a, 0x37, 0xfa, 0x50, 0x93, + 0x62, 0x6c, 0x29, 0x34, 0xc4, 0xd9, 0x71, 0xca, 0x71, 0xbc, 0xce, 0xe4, + 0x96, 0x76, 0x24, 0xb5, 0x87, 0x21, 0xd8, 0x42, 0x2d, 0xa5, 0x4f, 0x5e, + 0xbf, 0x23, 0xb6, 0x45, 0xb4, 0x92, 0x20, 0xf6, 0x68, 0x03, 0xc0, 0x9c, + 0x3b, 0xb7, 0x26, 0xd4, 0x8b, 0x2f, 0xa5, 0x08, 0xce, 0x04, 0x4f, 0x8c, + 0x96, 0x95, 0xf8, 0xe7, 0xa9, 0x47, 0xb1, 0x48, 0x63, 0xf4, 0xc3, 0xf4, + 0xc7, 0xac, 0x89, 0x64, 0xaf, 0xcb, 0x83, 0x42, 0x05, 0xa0, 0x6e, 0x62, + 0x17, 0xe6, 0x76, 0xb0, 0xd4, 0x75, 0x66, 0x6a, 0x4f, 0xf2, 0x57, 0x98, + 0x84, 0xf7, 0xb2, 0x79, 0x06, 0xa4, 0x20, 0xbc, 0x29, 0xd1, 0xe8, 0x00, + 0x35, 0xe6, 0xb1, 0x2a, 0x86, 0x8e, 0x90, 0xec, 0x14, 0x4b, 0x1a, 0x7c, + 0x36, 0xc1, 0xeb, 0x57, 0x54, 0x79, 0x20, 0x95, 0x1b, 0xe4, 0xd4, 0x7d, + 0x72, 0x37, 0xa4, 0x79, 0xbc, 0x96, 0xca, 0xdd, 0x2b, 0xbd, 0xf9, 0xaf, + 0x54, 0x34, 0xda, 0xd9, 0x52, 0x7f, 0x0d, 0x13, 0xb3, 0xbb, 0x9d, 0x8c, + 0x6a, 0x29, 0x31, 0x8c, 0xba, 0x88, 0x2b, 0x81, 0xd6, 0x21, 0xf4, 0xae, + 0x9a, 0x2f, 0xfb, 0xff, 0x7f, 0x16, 0x98, 0x6e, 0xf5, 0xa2, 0x51, 0x4a, + 0xb7, 0x44, 0xbf, 0x92, 0xe9, 0xb5, 0x5b, 0xf9, 0x13, 0xad, 0x0e, 0xe5, + 0x90, 0xe2, 0x06, 0x5d, 0x99, 0x53, 0xbb, 0x00, 0x3b, 0x35, 0xa5, 0xb8, + 0xeb, 0x1b, 0x9a, 0xd6, 0x55, 0x93, 0xb4, 0x41, 0xda, 0x63, 0xf2, 0x06, + 0xc4, 0x44, 0xce, 0x3c, 0x4a, 0x9f, 0x33, 0xb1, 0xf9, 0x0e, 0xc1, 0x15, + 0xe7, 0x60, 0x45, 0x57, 0xbd, 0xb4, 0x2a, 0x5c, 0xd3, 0x3c, 0xf7, 0xc5, + 0x4e, 0x08, 0x1b, 0xc2, 0xd0, 0x92, 0x22, 0x9b, 0x22, 0x26, 0x1f, 0x9b, + 0x2f, 0xba, 0x0e, 0xef, 0xb3, 0x54, 0xdb, 0x0d, 0x1d, 0xf5, 0x4c, 0xf2, + 0xab, 0x9d, 0x74, 0x7a, 0xa3, 0xbe, 0x86, 0xb2, 0xc4, 0xc3, 0xfb, 0x1a, + 0x99, 0x83, 0x41, 0x49, 0x0c, 0x35, 0xe3, 0x9d, 0x14, 0x39, 0x66, 0x26, + 0x7e, 0xb5, 0xac, 0xdc, 0x7d, 0xad, 0x71, 0xac, 0x2d, 0x72, 0xc5, 0x3f, + 0xf1, 0x4d, 0x38, 0xa8, 0x8e, 0x60, 0x14, 0x40, 0x6d, 0x96, 0x1a, 0x69, + 0xa8, 0x2d, 0xef, 0x63, 0x6d, 0x95, 0xf0, 0xa0, 0x77, 0x1a, 0xc2, 0x49, + 0xc7, 0xd9, 0xe2, 0x75, 0xc4, 0xd8, 0xc5, 0x0c, 0xeb, 0x33, 0x6e, 0x68, + 0x4d, 0x08, 0x45, 0x3c, 0xd5, 0x2b, 0xe6, 0x61, 0x3e, 0x03, 0x90, 0x9a, + 0x4e, 0x7b, 0x17, 0x2b, 0xb7, 0xb8, 0xb2, 0xf9, 0x45, 0x8f, 0xb1, 0x52, + 0x61, 0x87, 0xfc, 0x80, 0xea, 0xb5, 0x38, 0x19, 0xd0, 0x9f, 0x10, 0xa9, + 0xba, 0xdb, 0x09, 0x7c, 0x69, 0xbf, 0xa9, 0xb2, 0x3e, 0xb0, 0x99, 0xdc, + 0x6e, 0x61, 0x67, 0x60, 0x12, 0x28, 0xa1, 0x80, 0x65, 0xd9, 0x2f, 0x6c, + 0xbd, 0xcf, 0x56, 0xa0, 0xdc, 0xb1, 0x95, 0x96, 0x4f, 0x33, 0xbb, 0x94, + 0xee, 0xff, 0xaf, 0x3c, 0x98, 0x66, 0x65, 0xdd, 0xe5, 0x4f, 0x87, 0x6b, + 0xff, 0xf0, 0xd0, 0x66, 0xa6, 0x48, 0xe6, 0xee, 0xe3, 0x40, 0x7b, 0xa7, + 0x46, 0x4d, 0x74, 0x25, 0xc2, 0x12, 0xda, 0xf9, 0xa9, 0x2a, 0x15, 0x04, + 0x31, 0x0b, 0xc7, 0x10, 0x00, 0xa6, 0x4f, 0xca, 0x45, 0x9d, 0x56, 0xdb, + 0xa8, 0x1b, 0x63, 0x60, 0x85, 0x66, 0x00, 0xca, 0x1e, 0xc7, 0x65, 0x06, + 0x1e, 0xc3, 0x5f, 0x20, 0xd7, 0x8e, 0x69, 0x16, 0x0f, 0x31, 0x95, 0x3b, + 0x32, 0x07, 0x9d, 0x0f, 0x7e, 0x6a, 0x42, 0x6b, 0x19, 0xf3, 0xd6, 0xcf, + 0xfe, 0x9e, 0x08, 0x67, 0x2e, 0x71, 0x2d, 0x76, 0xbe, 0x09, 0xf0, 0xa9, + 0xf7, 0x4f, 0x94, 0x22, 0x47, 0xcf, 0x6d, 0x2c, 0xc2, 0x4b, 0x34, 0x64, + 0xd1, 0x20, 0x32, 0x5f, 0x40, 0x5a, 0xae, 0x74, 0x56, 0xa8, 0xf5, 0xd1, + 0x3f, 0xe3, 0x18, 0x2f, 0xfc, 0x93, 0xf8, 0xec, 0x64, 0xb9, 0xdb, 0x45, + 0x05, 0x09, 0x1f, 0x47, 0x19, 0x27, 0xc5, 0xb5, 0x05, 0xf7, 0x9c, 0x8d, + 0xc6, 0xce, 0x3f, 0x66, 0x88, 0x69, 0xcf, 0xa8, 0xa1, 0xbb, 0xd7, 0x6a, + 0xdb, 0x98, 0x47, 0x78, 0x77, 0xeb, 0xf6, 0x44, 0xa6, 0x9d, 0x39, 0x37, + 0x82, 0xe6, 0xb0, 0x6f, 0x2a, 0xe4, 0x27, 0xf5, 0xeb, 0x08, 0xf2, 0xae, + 0x7d, 0xdf, 0x02, 0x02, 0xb6, 0xf0, 0x80, 0xeb, 0x14, 0xf2, 0xbf, 0x97, + 0x95, 0x3e, 0x45, 0x0c, 0xab, 0xc9, 0x22, 0xd9}, + // secret + {0xaa, 0x82, 0x0e, 0x3c, 0x3d, 0x1e, 0x72, 0xbf, 0x7a, 0x93, 0xb1, + 0x0d, 0x85, 0x67, 0x80, 0xe8, 0x53, 0xfc, 0xf0, 0x98, 0x87, 0x0a, + 0x62, 0xc7, 0xdf, 0x07, 0xb8, 0xf0, 0xba, 0xd9, 0x35, 0x55}, + true}, + // tcID: 102 + {102, + params_ml_kem1024_test_mode, + // privateKey + {0x08, 0x26, 0x5d, 0x9c, 0x0a, 0x33, 0x5c, 0xeb, 0x66, 0x70, 0x57, 0xc4, + 0x94, 0x18, 0xc4, 0x45, 0x94, 0x0f, 0x88, 0x3a, 0x6e, 0xd3, 0x14, 0x97, + 0x9a, 0xf0, 0x8e, 0x0d, 0x9a, 0xc2, 0x91, 0xf8, 0x79, 0xd5, 0xb8, 0x72, + 0x20, 0xaa, 0x3a, 0xa7, 0x52, 0xbf, 0xcd, 0xfa, 0x1d, 0x7d, 0x23, 0x21, + 0x79, 0x36, 0x58, 0x62, 0xb3, 0x51, 0xad, 0xfa, 0x26, 0xc5, 0x16, 0xc0, + 0x59, 0x46, 0xbd, 0xaa, 0x81, 0x91, 0x4e, 0x26, 0xa2, 0xe1, 0x0c, 0x45, + 0x3f, 0xcc, 0x29, 0x26, 0x5b, 0x95, 0xbe, 0x34, 0x15, 0xf0, 0x52, 0x4d, + 0xc4, 0x4a, 0x18, 0x55, 0xfa, 0xa3, 0x3c, 0x04, 0x38, 0xb0, 0x41, 0xb8, + 0xd6, 0x76, 0x9d, 0x62, 0x23, 0x7e, 0xdf, 0xb4, 0x5e, 0x4a, 0x20, 0x89, + 0x74, 0x80, 0x63, 0x65, 0xe6, 0x36, 0xc7, 0xa0, 0xae, 0x68, 0x3c, 0x36, + 0x3b, 0x27, 0xcd, 0xa9, 0x83, 0x5a, 0x7d, 0xd9, 0x11, 0x38, 0x2a, 0x58, + 0x1f, 0xa6, 0xb2, 0x27, 0x47, 0x0b, 0x94, 0x66, 0x11, 0xf3, 0x0a, 0xbf, + 0x00, 0xea, 0x86, 0x48, 0xa9, 0x11, 0x6b, 0xd5, 0x22, 0xab, 0xd6, 0x40, + 0x4a, 0xa8, 0xba, 0x56, 0xc5, 0xb2, 0xe4, 0xa9, 0xb9, 0x9a, 0xa4, 0x79, + 0x9e, 0x0b, 0x5b, 0x3c, 0x68, 0x67, 0x24, 0xbc, 0x64, 0x5a, 0xb4, 0xaf, + 0xd7, 0x27, 0x15, 0xca, 0x5b, 0xbf, 0x3a, 0xb7, 0x21, 0x0c, 0x24, 0xc4, + 0x1a, 0x27, 0x36, 0x63, 0x48, 0x9f, 0x0f, 0xe3, 0x8c, 0xd4, 0x26, 0x46, + 0x3e, 0xf5, 0x4c, 0x1c, 0x8a, 0x84, 0xd6, 0xcb, 0x80, 0xb9, 0x18, 0x87, + 0x91, 0x85, 0xad, 0x16, 0x9b, 0x5a, 0x02, 0x39, 0x68, 0xcc, 0xf2, 0x8e, + 0xd4, 0x6a, 0xa5, 0x05, 0x79, 0xb1, 0xfd, 0x18, 0xcd, 0x08, 0xe2, 0x10, + 0x42, 0x0b, 0x47, 0xe4, 0xf1, 0xb7, 0x42, 0xd5, 0xa3, 0x05, 0xd5, 0xc9, + 0x0d, 0x96, 0x52, 0x8a, 0xb9, 0x75, 0x89, 0x28, 0xbf, 0xe5, 0x01, 0x24, + 0x4d, 0x63, 0xaa, 0x5b, 0x30, 0xa5, 0xfe, 0xa9, 0x0a, 0x68, 0x20, 0x64, + 0x19, 0x01, 0x39, 0xb0, 0xb2, 0x3f, 0x8e, 0xe7, 0xb2, 0x7d, 0x57, 0x94, + 0x73, 0x3c, 0x18, 0x4a, 0x49, 0x8b, 0x00, 0x6c, 0x3b, 0x29, 0x16, 0x62, + 0x41, 0xfa, 0xa3, 0x2a, 0x73, 0x13, 0x17, 0xdc, 0x1d, 0x5b, 0x17, 0xa2, + 0xf3, 0xb8, 0xce, 0x6d, 0xd2, 0x17, 0x94, 0xc8, 0x6a, 0x11, 0x22, 0x3e, + 0x4c, 0x43, 0x16, 0xcf, 0xfb, 0x5c, 0x40, 0xa8, 0x7f, 0x16, 0x9c, 0x8e, + 0x43, 0xd0, 0xc2, 0x2a, 0xa7, 0x6c, 0x08, 0xc6, 0x57, 0xdf, 0xd7, 0xbf, + 0x26, 0x77, 0x7b, 0x47, 0xea, 0xa9, 0x3d, 0xa6, 0x6c, 0xd1, 0xb6, 0x69, + 0xb2, 0xab, 0x92, 0xec, 0xbb, 0x04, 0x94, 0x70, 0x9b, 0x6a, 0xc4, 0x63, + 0xb1, 0x84, 0x3b, 0x2e, 0x47, 0x84, 0xa4, 0xc7, 0xc0, 0xcb, 0xf8, 0x35, + 0xce, 0x26, 0x3c, 0x2e, 0x6c, 0x92, 0x1f, 0x42, 0x9e, 0x8e, 0xdb, 0x82, + 0x67, 0xf6, 0x4e, 0x38, 0x94, 0x63, 0xfa, 0x7a, 0x98, 0x2f, 0xd9, 0x94, + 0xea, 0x19, 0x0d, 0xbd, 0x24, 0x3c, 0x36, 0x3b, 0x58, 0xf7, 0xb6, 0x55, + 0x4f, 0x86, 0x2f, 0xaa, 0x65, 0x65, 0xf2, 0x01, 0x74, 0xf3, 0xe2, 0x75, + 0x48, 0x45, 0x3b, 0x14, 0x64, 0x34, 0xc2, 0xf3, 0x61, 0x5f, 0x0a, 0x09, + 0xde, 0xbb, 0x2a, 0x29, 0xe2, 0xc0, 0xc0, 0x58, 0x56, 0x01, 0x4a, 0x79, + 0x99, 0x50, 0xcf, 0xb1, 0xab, 0x6e, 0x52, 0x96, 0x0f, 0x7e, 0x35, 0x69, + 0x6e, 0xd2, 0x67, 0xc0, 0xf9, 0x57, 0x2a, 0xa9, 0x73, 0xe0, 0x20, 0xbd, + 0x05, 0x2b, 0x1c, 0xe1, 0x07, 0x58, 0x20, 0x55, 0x9f, 0x7f, 0x15, 0xa7, + 0x46, 0xac, 0x6c, 0xf4, 0xf7, 0x08, 0x85, 0x87, 0x3f, 0x17, 0x26, 0x73, + 0x34, 0x31, 0x27, 0x00, 0x6b, 0x17, 0xcf, 0x97, 0xa7, 0xc7, 0x24, 0x10, + 0xd8, 0x14, 0xa1, 0x3b, 0x54, 0x84, 0x2b, 0x1c, 0x5e, 0xf8, 0x70, 0x7f, + 0xdc, 0x83, 0x83, 0x05, 0x4b, 0x75, 0x97, 0xc3, 0x60, 0x07, 0xd4, 0x42, + 0xd8, 0x7c, 0x15, 0x95, 0x29, 0x8b, 0xfe, 0x65, 0x4b, 0xeb, 0x45, 0x39, + 0x23, 0xca, 0x11, 0x20, 0xb6, 0x0e, 0x7f, 0x42, 0x60, 0x06, 0xe4, 0x38, + 0x02, 0x40, 0xcd, 0x3f, 0x07, 0x66, 0x38, 0x37, 0xb1, 0x17, 0xa6, 0x76, + 0x60, 0x27, 0x03, 0xaf, 0x03, 0x49, 0x99, 0x60, 0x0f, 0x82, 0xe1, 0xb0, + 0xd8, 0xdb, 0x2a, 0xf5, 0xc8, 0x0f, 0x69, 0x72, 0x18, 0x04, 0xf1, 0xab, + 0x0b, 0x59, 0x40, 0xe7, 0xf7, 0x81, 0xe9, 0x73, 0x16, 0xac, 0x21, 0x10, + 0x93, 0xc6, 0x22, 0x9e, 0xe0, 0x46, 0x7d, 0x77, 0xa3, 0xdf, 0xf7, 0x75, + 0x47, 0xd8, 0x1b, 0xb7, 0x58, 0xa3, 0xed, 0xd6, 0xac, 0x3b, 0x50, 0x81, + 0xb5, 0x2a, 0xc5, 0xfc, 0xd1, 0x60, 0xec, 0x22, 0xae, 0x28, 0x70, 0x3d, + 0x3f, 0x7c, 0x06, 0xac, 0xb2, 0x52, 0x88, 0xd3, 0xcc, 0xcb, 0x65, 0xc4, + 0x40, 0xc0, 0xc0, 0x42, 0x15, 0x48, 0x8d, 0x73, 0x1d, 0x8b, 0x70, 0x5d, + 0x67, 0x10, 0x6d, 0x9a, 0xa1, 0x94, 0x91, 0xc0, 0x80, 0xb2, 0xcc, 0xc7, + 0x13, 0xfc, 0x59, 0x8b, 0x50, 0x12, 0x13, 0x45, 0x58, 0xd6, 0xe0, 0x8a, + 0xe4, 0x54, 0x25, 0xb5, 0x21, 0x0d, 0xa9, 0xf1, 0x06, 0x8a, 0x78, 0x63, + 0xeb, 0xe3, 0xa7, 0x2f, 0x08, 0xbb, 0x93, 0xa7, 0xa7, 0xf8, 0x75, 0x11, + 0xb4, 0x83, 0xaf, 0x22, 0xca, 0x69, 0x11, 0x49, 0x57, 0x4c, 0x75, 0x2f, + 0xa8, 0x6c, 0x3f, 0x4a, 0xcc, 0x1f, 0xf0, 0x68, 0x8f, 0xd9, 0x39, 0xbf, + 0xfa, 0x86, 0x5a, 0xd3, 0x74, 0x70, 0xad, 0x65, 0x7a, 0x9a, 0x45, 0x42, + 0x36, 0x70, 0x20, 0x5b, 0xe6, 0x9d, 0x88, 0x6a, 0x1a, 0xe8, 0xc9, 0xb3, + 0x11, 0x33, 0x7d, 0x34, 0x61, 0xa2, 0x8a, 0x5c, 0x5f, 0x5a, 0x66, 0x06, + 0x0e, 0xbc, 0x85, 0xbf, 0x46, 0x48, 0x39, 0x31, 0x6e, 0x1b, 0xeb, 0xa1, + 0x23, 0xf7, 0xcc, 0x4c, 0xe1, 0x1f, 0x31, 0x4a, 0x8a, 0x62, 0xd3, 0x56, + 0x78, 0xb2, 0xc8, 0x75, 0x98, 0x0c, 0xcf, 0x92, 0x60, 0xc6, 0xab, 0x55, + 0xdf, 0x0c, 0x8e, 0x8e, 0x2c, 0x2b, 0xd2, 0x97, 0x68, 0x01, 0x22, 0x49, + 0xbb, 0x9a, 0x47, 0x50, 0xd2, 0x50, 0xc8, 0xc8, 0x46, 0x22, 0xf6, 0x65, + 0x7f, 0xaa, 0x48, 0x1a, 0x74, 0x51, 0x89, 0x74, 0x05, 0xc5, 0x60, 0xcd, + 0x7a, 0xc6, 0x3c, 0x3f, 0xf0, 0xaa, 0x17, 0x15, 0x41, 0x55, 0x73, 0x2b, + 0xbf, 0x65, 0x3d, 0x7b, 0xbc, 0x05, 0x5f, 0x12, 0x7f, 0x04, 0x3b, 0xc4, + 0x12, 0x26, 0xae, 0x4e, 0x14, 0xbd, 0x54, 0x33, 0xbe, 0xd3, 0x2c, 0xbc, + 0x05, 0xb8, 0x22, 0x22, 0x24, 0x5a, 0xdd, 0xb4, 0x54, 0xbd, 0xe2, 0xbe, + 0x67, 0xc1, 0x46, 0x5e, 0x87, 0x65, 0xb8, 0x65, 0xc0, 0x58, 0xa5, 0xa1, + 0x2c, 0xe3, 0xb2, 0x5f, 0xba, 0x3c, 0xc4, 0x51, 0xb0, 0x40, 0x07, 0x89, + 0x83, 0x67, 0xb5, 0x6c, 0x51, 0x6f, 0x2b, 0xd9, 0xc2, 0x8f, 0x56, 0xa2, + 0x3c, 0x3a, 0x50, 0xfc, 0x98, 0x26, 0xf6, 0x08, 0x4e, 0xdc, 0xe3, 0x29, + 0x4f, 0x29, 0x9a, 0x50, 0x49, 0x8a, 0x24, 0x44, 0x31, 0x51, 0x53, 0x49, + 0xd6, 0x80, 0x9c, 0xbd, 0x72, 0x64, 0xed, 0xc6, 0x39, 0xe9, 0xda, 0x49, + 0x2c, 0xa4, 0x87, 0x03, 0x00, 0x24, 0xd9, 0x33, 0x18, 0x3c, 0x80, 0x34, + 0x44, 0xc3, 0x90, 0x94, 0xb5, 0xb8, 0x82, 0x80, 0x1a, 0x87, 0xd1, 0xaf, + 0x9e, 0x59, 0xac, 0x39, 0x4a, 0x71, 0x1e, 0x7a, 0x40, 0xf2, 0xfa, 0xbc, + 0x0c, 0x3b, 0x74, 0xe7, 0x25, 0x51, 0xf4, 0x50, 0x49, 0x7f, 0x21, 0x84, + 0x9f, 0x58, 0x20, 0xa7, 0x02, 0x46, 0x67, 0x6a, 0xce, 0xb3, 0xaa, 0x98, + 0x48, 0xc9, 0x80, 0x12, 0x95, 0x74, 0xc8, 0x6b, 0xb8, 0xbc, 0xf4, 0x96, + 0x21, 0x81, 0x13, 0xe4, 0x37, 0x2a, 0x95, 0x03, 0x27, 0xf4, 0xa7, 0x7a, + 0x52, 0xc6, 0x48, 0x17, 0x1b, 0x36, 0xd4, 0xea, 0xca, 0x63, 0xca, 0x0b, + 0x3c, 0x19, 0x6f, 0x7f, 0xaa, 0x0b, 0x7a, 0xb9, 0x82, 0xbe, 0x31, 0x26, + 0x41, 0x98, 0x99, 0xec, 0x26, 0x18, 0xea, 0x04, 0xa3, 0x6c, 0x45, 0x25, + 0x55, 0x67, 0x4d, 0x2a, 0xe2, 0x14, 0xd2, 0x0a, 0x11, 0x83, 0x7a, 0x8f, + 0xc8, 0x0b, 0x8b, 0xf1, 0xa3, 0x05, 0x0c, 0xe5, 0x59, 0xcb, 0xa3, 0x5f, + 0xb6, 0xb0, 0xc8, 0x94, 0x27, 0x61, 0xb5, 0x7a, 0x07, 0x65, 0x53, 0x6e, + 0x44, 0x21, 0x99, 0x55, 0xe3, 0x3d, 0x26, 0xf3, 0x2f, 0xf0, 0x7b, 0x6d, + 0xd9, 0xe1, 0x12, 0x51, 0x69, 0x5c, 0xee, 0xd5, 0x94, 0xd3, 0x88, 0x44, + 0x0a, 0x59, 0x50, 0xa5, 0x55, 0x83, 0xb7, 0x60, 0x36, 0x3b, 0x6c, 0x17, + 0x62, 0x2a, 0x5d, 0xbe, 0x97, 0xa4, 0x1e, 0x81, 0x77, 0x37, 0x30, 0x56, + 0xe9, 0x99, 0x64, 0x31, 0x73, 0xc4, 0x53, 0xb4, 0x45, 0xe3, 0xa1, 0x43, + 0x8c, 0x39, 0xae, 0x21, 0xa3, 0x62, 0x68, 0xb4, 0xcd, 0x71, 0xe3, 0x35, + 0x1a, 0xeb, 0x3a, 0xe0, 0x45, 0x1a, 0x76, 0x42, 0x74, 0xe9, 0xa2, 0x41, + 0x20, 0x63, 0x5f, 0x84, 0xe3, 0x45, 0xaa, 0xa2, 0x40, 0x3a, 0x78, 0x85, + 0xce, 0xab, 0x56, 0xe2, 0x79, 0x5d, 0x56, 0xc2, 0x92, 0x91, 0x50, 0x0a, + 0x09, 0xfb, 0x55, 0xb5, 0xf9, 0x38, 0x09, 0x53, 0x92, 0xb3, 0xd3, 0x12, + 0x5c, 0x55, 0x6e, 0x7d, 0xec, 0x08, 0xe2, 0x95, 0x23, 0x4b, 0x78, 0x4c, + 0x9b, 0x7a, 0x54, 0xc8, 0x7c, 0x6a, 0x18, 0x10, 0x09, 0x74, 0x94, 0xa2, + 0xcd, 0xda, 0x58, 0x48, 0x48, 0x3c, 0x7d, 0xc1, 0x20, 0xac, 0x78, 0x7c, + 0x7b, 0x8c, 0x1d, 0xb2, 0xda, 0x39, 0xeb, 0xd7, 0x50, 0x9c, 0x02, 0xa7, + 0xd9, 0xcc, 0x64, 0x41, 0x29, 0x58, 0x6f, 0xb6, 0x6e, 0x4e, 0x6c, 0x2f, + 0x82, 0x19, 0xa6, 0x48, 0x9c, 0x02, 0xfb, 0x4b, 0x7a, 0x2a, 0x04, 0xb2, + 0x42, 0x71, 0x13, 0x03, 0x9a, 0x24, 0xf3, 0x5c, 0x8b, 0x97, 0xea, 0x38, + 0x60, 0x05, 0x1a, 0x05, 0xf4, 0x13, 0x2f, 0x66, 0x99, 0xd5, 0x77, 0x7c, + 0xbc, 0xe9, 0x25, 0x3a, 0xc1, 0xb0, 0x85, 0xe3, 0x06, 0x18, 0x95, 0x75, + 0xe8, 0x53, 0xce, 0xed, 0x64, 0x23, 0x56, 0x69, 0x43, 0xca, 0x19, 0x34, + 0x14, 0xc4, 0x7d, 0x3a, 0x55, 0xa0, 0x5e, 0xc3, 0x7e, 0xd3, 0x8c, 0x42, + 0x25, 0xea, 0x35, 0xb9, 0xf1, 0x7c, 0x5d, 0xb8, 0x4d, 0x40, 0x45, 0xcc, + 0x4c, 0x52, 0x0c, 0x84, 0xe3, 0x33, 0x83, 0x31, 0xcd, 0xb0, 0xe1, 0x02, + 0x51, 0xe2, 0x67, 0x9a, 0xda, 0xbc, 0x8f, 0x41, 0xba, 0xa1, 0xda, 0x8a, + 0x19, 0x08, 0xbe, 0xb2, 0x54, 0x47, 0x40, 0xb9, 0x26, 0x93, 0xba, 0xa1, + 0xb5, 0xfc, 0x64, 0x98, 0x28, 0x0b, 0x69, 0x44, 0x14, 0xa3, 0x41, 0x28, + 0x44, 0x47, 0xc4, 0xd0, 0x60, 0x61, 0x67, 0xb4, 0x4b, 0x04, 0xab, 0x5e, + 0x5c, 0xcc, 0x45, 0xde, 0xe3, 0x9e, 0xfb, 0xb1, 0x05, 0xd2, 0xda, 0x41, + 0xa5, 0xb4, 0xae, 0xc2, 0x47, 0xcc, 0x86, 0x3b, 0x4b, 0xa9, 0x1a, 0xc7, + 0x4b, 0xe7, 0x45, 0xf6, 0xe9, 0x56, 0x85, 0x15, 0xcf, 0xe2, 0x66, 0x94, + 0x5f, 0x71, 0x5e, 0x0c, 0xe5, 0xb2, 0xa5, 0x95, 0xb5, 0x14, 0xf5, 0x32, + 0x52, 0x75, 0x81, 0xd8, 0x3b, 0xa0, 0xe1, 0xa7, 0x6d, 0x80, 0x0b, 0xc2, + 0x37, 0x55, 0x0a, 0x84, 0xca, 0xc7, 0x7b, 0x24, 0xa0, 0x5e, 0x5b, 0xa1, + 0x48, 0x28, 0x21, 0x87, 0x06, 0x7a, 0xba, 0x0b, 0x7b, 0xd9, 0x8a, 0x4b, + 0x34, 0x21, 0x44, 0x07, 0xc6, 0x99, 0x20, 0xdb, 0xa6, 0xd1, 0x3c, 0x5f, + 0x0c, 0x60, 0x4b, 0x5c, 0x3a, 0x14, 0x70, 0x64, 0x85, 0x28, 0x9a, 0x59, + 0xfa, 0x13, 0x34, 0x7d, 0x29, 0x54, 0xbf, 0x93, 0xc6, 0xd9, 0xa8, 0x42, + 0x2b, 0xea, 0x42, 0xae, 0x03, 0xb5, 0x2c, 0x93, 0xb3, 0x4e, 0x4b, 0x38, + 0xf2, 0xa8, 0x80, 0x2d, 0x9c, 0x09, 0x7d, 0xe0, 0x01, 0x8a, 0x0c, 0xb3, + 0x45, 0x53, 0x32, 0x89, 0x75, 0x59, 0x77, 0x2b, 0x3d, 0xe4, 0x76, 0x51, + 0x8b, 0xd9, 0x43, 0x8a, 0x85, 0x58, 0xad, 0x02, 0x67, 0x6c, 0x38, 0x7e, + 0xbb, 0xe6, 0x96, 0xea, 0xea, 0x0c, 0xa8, 0xf9, 0x9e, 0xcd, 0xb3, 0xac, + 0x42, 0x6a, 0x3f, 0x1d, 0xf8, 0x17, 0x5d, 0x7c, 0xbb, 0xe8, 0xf7, 0x01, + 0x9f, 0x5c, 0x0e, 0xfc, 0x73, 0xc1, 0x31, 0x29, 0x9a, 0x43, 0xe3, 0xa6, + 0xbf, 0xc0, 0x2f, 0xb4, 0x81, 0xa6, 0x7d, 0xe8, 0xaa, 0x8b, 0xe5, 0x07, + 0xcb, 0xf6, 0x0c, 0x98, 0x71, 0x2d, 0x8f, 0x50, 0x0e, 0x86, 0xd0, 0xb7, + 0x66, 0x90, 0x92, 0x2e, 0x5b, 0x6d, 0x19, 0x1a, 0x2a, 0x70, 0xb0, 0x9c, + 0x6d, 0xc7, 0xaf, 0xdb, 0x68, 0x9f, 0x20, 0x62, 0x7a, 0x96, 0xb4, 0x1c, + 0x14, 0xf6, 0x87, 0xa1, 0x58, 0x0b, 0xc2, 0x45, 0x70, 0x0e, 0x71, 0x9b, + 0x96, 0xf3, 0xc1, 0x70, 0x17, 0x92, 0xe3, 0x3c, 0x62, 0xa3, 0xab, 0x54, + 0x4d, 0x01, 0xb2, 0xa0, 0x80, 0x84, 0x4b, 0x27, 0x4b, 0xc3, 0x9b, 0x28, + 0x95, 0x57, 0x65, 0x8a, 0x88, 0x6a, 0xaf, 0x02, 0x9d, 0xa7, 0x70, 0xba, + 0x65, 0x02, 0x85, 0x7f, 0x29, 0x29, 0xb2, 0xb6, 0x0a, 0x53, 0x0c, 0xc6, + 0xfc, 0xb2, 0x47, 0x67, 0x2c, 0x85, 0xb3, 0x12, 0xb8, 0x0a, 0xcc, 0x83, + 0xdb, 0x8a, 0x68, 0x91, 0x37, 0xba, 0xd8, 0x32, 0xc8, 0xcd, 0xb5, 0x51, + 0x52, 0xb5, 0x41, 0x20, 0xe1, 0x6e, 0x07, 0xa9, 0x41, 0x4d, 0x65, 0x1b, + 0xc7, 0x4a, 0xc1, 0x36, 0x37, 0xb7, 0xae, 0xc7, 0x1e, 0x78, 0xf6, 0xae, + 0xf2, 0xe4, 0x5c, 0x28, 0xca, 0x9f, 0xe2, 0xba, 0xc9, 0x11, 0x32, 0x7d, + 0xaf, 0x62, 0x83, 0x12, 0x47, 0x2b, 0x27, 0x46, 0xc9, 0xdb, 0xdb, 0x35, + 0xa5, 0x17, 0xa3, 0xa5, 0xf6, 0x5d, 0x03, 0x78, 0xba, 0xaa, 0x4b, 0x6c, + 0xed, 0xa5, 0x15, 0xfd, 0x86, 0x8a, 0xe9, 0x66, 0x65, 0xf6, 0x24, 0xa8, + 0x3f, 0x0a, 0xb3, 0x68, 0x25, 0xc9, 0xed, 0x03, 0x23, 0xa8, 0x25, 0xaa, + 0xd6, 0x4b, 0xbc, 0xb4, 0x79, 0x97, 0x29, 0x67, 0xc1, 0xc5, 0xac, 0xaa, + 0x7b, 0x82, 0xc2, 0xdf, 0x62, 0x99, 0x74, 0xc3, 0x64, 0x3f, 0xdb, 0x41, + 0x73, 0x21, 0xa2, 0x2b, 0xd4, 0xb8, 0x7d, 0xe2, 0x64, 0xcd, 0x63, 0xbb, + 0xf5, 0xc3, 0xc1, 0xdc, 0x6b, 0x2f, 0x20, 0x2c, 0xb2, 0x68, 0x02, 0x39, + 0xc7, 0x13, 0x5c, 0xc2, 0xd2, 0xa5, 0x03, 0x98, 0x61, 0x57, 0x90, 0xbe, + 0xc8, 0xd5, 0x56, 0xf3, 0x10, 0xc7, 0x23, 0x63, 0xaa, 0xd2, 0x20, 0x03, + 0x03, 0x77, 0x06, 0xaf, 0x2a, 0x09, 0x44, 0x15, 0x18, 0x68, 0xac, 0x62, + 0x33, 0x48, 0x50, 0x87, 0x17, 0xaf, 0x8f, 0xa6, 0x5b, 0x4c, 0x01, 0x52, + 0x1d, 0x76, 0x9f, 0x51, 0x81, 0xb8, 0x20, 0xc6, 0x7b, 0xa7, 0x21, 0x0d, + 0x62, 0xf9, 0xab, 0x48, 0xd1, 0x11, 0xfb, 0xa4, 0x02, 0xe8, 0xe4, 0x0d, + 0x98, 0x4c, 0xcd, 0x81, 0x71, 0x96, 0xbd, 0x91, 0x48, 0xae, 0x5a, 0x75, + 0x17, 0x51, 0xb0, 0x93, 0xb1, 0x62, 0x2e, 0x8a, 0x5c, 0xcd, 0xcc, 0xbb, + 0x78, 0x79, 0xc4, 0xd7, 0x0a, 0x01, 0xcc, 0x84, 0x26, 0x7c, 0xf5, 0x46, + 0x36, 0x67, 0x22, 0x69, 0x11, 0xb0, 0x6b, 0x54, 0x84, 0x48, 0xb5, 0x4a, + 0x44, 0x95, 0x99, 0x41, 0xb6, 0xc7, 0x44, 0xf1, 0x30, 0x8f, 0x02, 0x9a, + 0xd7, 0x86, 0x21, 0x08, 0x77, 0x61, 0x9d, 0xdc, 0x45, 0xa9, 0x2a, 0x5b, + 0x99, 0x89, 0xa7, 0xb9, 0x39, 0x18, 0x5f, 0xca, 0x1e, 0x27, 0x15, 0xcc, + 0x29, 0xb5, 0x9e, 0x2d, 0x25, 0x91, 0xa8, 0xbc, 0x51, 0xd5, 0x1a, 0x21, + 0x4c, 0xbc, 0x28, 0xdd, 0xf2, 0x49, 0xf8, 0x18, 0x46, 0x51, 0x64, 0x10, + 0xe6, 0x37, 0x88, 0xc2, 0x4b, 0x1b, 0x3b, 0xfa, 0x4b, 0xd7, 0xc0, 0x8d, + 0x38, 0xa3, 0x20, 0x2d, 0xc0, 0x5e, 0xa2, 0x45, 0x70, 0xdb, 0xb6, 0x4a, + 0x90, 0x53, 0x55, 0x0a, 0x49, 0x5b, 0x00, 0x9b, 0x2b, 0xdb, 0x14, 0x2b, + 0x64, 0x82, 0x9c, 0xb4, 0x6c, 0xae, 0x77, 0x77, 0x0c, 0x5a, 0xe4, 0x01, + 0x49, 0x36, 0x5b, 0x70, 0xa9, 0xc6, 0x5a, 0x77, 0xc3, 0x54, 0x67, 0x34, + 0x28, 0xd4, 0x2f, 0x15, 0x70, 0x4e, 0x2f, 0x33, 0x25, 0x5c, 0x06, 0x88, + 0x7b, 0x84, 0x4e, 0xbb, 0x6b, 0x1a, 0xc4, 0xc3, 0xa0, 0x13, 0xfc, 0x7b, + 0x84, 0xa3, 0x96, 0xec, 0x92, 0x70, 0xf2, 0x1b, 0xbc, 0x54, 0x20, 0x1c, + 0x17, 0x85, 0xb2, 0xb7, 0x79, 0x44, 0x24, 0x54, 0x51, 0x5a, 0xa0, 0x78, + 0x7f, 0xf9, 0x42, 0xdd, 0x8a, 0x33, 0x26, 0x1b, 0x31, 0x63, 0xe1, 0x3f, + 0xfd, 0x92, 0x42, 0x96, 0x46, 0x26, 0xc4, 0xea, 0x38, 0x17, 0x86, 0x95, + 0xc3, 0xd5, 0x95, 0x77, 0xc1, 0xb6, 0x98, 0x99, 0xcc, 0xfa, 0xb5, 0xca, + 0xd5, 0xba, 0x8b, 0xbc, 0xbb, 0x0f, 0x02, 0x22, 0xc5, 0x52, 0xb6, 0x95, + 0xed, 0xc7, 0x01, 0x95, 0x68, 0x74, 0x62, 0x23, 0x54, 0x97, 0x9c, 0x0f, + 0x1f, 0xd0, 0x2c, 0xee, 0x95, 0x74, 0x87, 0xb1, 0x6a, 0x6b, 0x73, 0xba, + 0xcf, 0x59, 0x59, 0x9c, 0x84, 0xa0, 0x37, 0x15, 0x73, 0x57, 0x6b, 0x95, + 0x57, 0xd6, 0x1d, 0x70, 0x2c, 0x05, 0x41, 0xb5, 0xcd, 0x3c, 0x00, 0x08, + 0x86, 0x73, 0x28, 0xac, 0xc9, 0x47, 0x92, 0x70, 0x44, 0x39, 0x37, 0x7f, + 0xf5, 0x16, 0x58, 0x1e, 0x0b, 0xa0, 0xcc, 0x9c, 0x64, 0xe3, 0xc0, 0xc9, + 0x35, 0x08, 0x58, 0xfe, 0x46, 0x64, 0x05, 0x63, 0x3c, 0x3c, 0xf5, 0x15, + 0x61, 0x7b, 0x5e, 0x22, 0x57, 0x22, 0x02, 0xbc, 0xa4, 0x85, 0x4b, 0x0e, + 0xe6, 0x68, 0x76, 0x34, 0x2b, 0x2f, 0x0f, 0x87, 0x39, 0x73, 0x05, 0xa4, + 0xb8, 0xbc, 0x0d, 0x62, 0xbb, 0xb4, 0xdc, 0x82, 0x1c, 0x79, 0xb2, 0x32, + 0x65, 0x44, 0x55, 0xe1, 0xf4, 0xae, 0x16, 0x31, 0x55, 0x44, 0x02, 0x97, + 0xb7, 0x5b, 0x01, 0xed, 0x11, 0xa5, 0xab, 0x0a, 0x26, 0x8a, 0xf5, 0x4f, + 0xbb, 0x8c, 0x6f, 0x0d, 0xd1, 0x90, 0xcb, 0xb7, 0x8a, 0x85, 0xcb, 0x05, + 0x5d, 0xac, 0x95, 0xaa, 0x89, 0x37, 0x00, 0xc5, 0x04, 0xce, 0x74, 0x31, + 0xcc, 0xd7, 0x33, 0x1a, 0x25, 0x1d, 0x0b, 0xfc, 0x0c, 0x2d, 0xa5, 0xbc, + 0x5d, 0xf6, 0x40, 0x7a, 0xd4, 0x1e, 0x76, 0x10, 0xc1, 0x65, 0x25, 0x54, + 0x52, 0xac, 0x9d, 0xf7, 0x91, 0x08, 0xad, 0x48, 0xa7, 0x82, 0x5a, 0xcb, + 0x0a, 0x1b, 0x6a, 0x91, 0x33, 0xc0, 0x2a, 0xc1, 0x73, 0x45, 0x82, 0x43, + 0x52, 0x82, 0x78, 0x41, 0x13, 0x92, 0xc1, 0x0a, 0x83, 0xb8, 0x27, 0x44, + 0xe8, 0x26, 0xb4, 0x44, 0x00, 0x5d, 0x1a, 0x61, 0xaa, 0xc8, 0xf8, 0x29, + 0xce, 0xdc, 0x44, 0x19, 0xdc, 0xb7, 0x40, 0xf0, 0x7f, 0xc7, 0x06, 0x8f, + 0xe5, 0x13, 0xa0, 0x0b, 0x16, 0x84, 0x84, 0x75, 0x01, 0xd9, 0x44, 0x11, + 0xbd, 0xd7, 0x15, 0xbb, 0x00, 0x4a, 0xab, 0x08, 0x4b, 0xaa, 0x5b, 0x36, + 0x9f, 0xbc, 0x4d, 0x52, 0x89, 0xb1, 0x7e, 0x30, 0x79, 0xe3, 0x62, 0x94, + 0x4a, 0x49, 0x8d, 0xb9, 0xa5, 0x54, 0x4c, 0xc2, 0x3b, 0xab, 0x66, 0x2c, + 0x28, 0x39, 0x01, 0x02, 0xba, 0xac, 0x6e, 0xe3, 0xc1, 0x01, 0x0c, 0x8d, + 0x18, 0x86, 0x5c, 0x15, 0x48, 0xc1, 0x88, 0x52, 0xa2, 0x2d, 0x52, 0x32, + 0x5d, 0x75, 0x2e, 0xdb, 0xb6, 0x5d, 0xa1, 0xe6, 0x1c, 0x62, 0xf9, 0x5b, + 0xb2, 0x63, 0x3a, 0x9f, 0x12, 0x75, 0x69, 0x3c, 0xb8, 0xf3, 0xa8, 0xcc, + 0xc5, 0xd7, 0x42, 0x5e, 0xc5, 0x03, 0x89, 0x72, 0x5c, 0x93, 0x4b, 0x5a, + 0x1a, 0xa3, 0x32, 0x46, 0x46, 0x24, 0x7c, 0x32, 0x55, 0xac, 0x45, 0x2c, + 0x91, 0x7b, 0x54, 0xca, 0xe3, 0x9e, 0xab, 0xbb, 0xc2, 0x6a, 0x01, 0x43, + 0x45, 0x79, 0x57, 0xd7, 0x09, 0x8f, 0x1c, 0x47, 0xb0, 0x89, 0xc7, 0x6d, + 0x40, 0x2a, 0x04, 0xb4, 0x00, 0x1e, 0x4a, 0x40, 0x78, 0xc0, 0xf0, 0xca, + 0xee, 0x6c, 0xc2, 0xe9, 0x29, 0x60, 0xff, 0x39, 0xbe, 0x90, 0xc1, 0x4c, + 0x45, 0xe2, 0x5c, 0xbe, 0x94, 0x8b, 0xb6, 0x8b, 0x35, 0xea, 0x40, 0x6e, + 0xfc, 0x46, 0x27, 0x57, 0xd5, 0xa7, 0xd2, 0x29, 0xbe, 0x9b, 0x59, 0x24, + 0x08, 0x7a, 0x7f, 0xdb, 0x04, 0x2d, 0x4d, 0xb7, 0x96, 0x2f, 0x35, 0x9a, + 0x4f, 0xba, 0x01, 0xc6, 0x00, 0x79, 0x15, 0x7a, 0xcc, 0xe0, 0x6b, 0x97, + 0x79, 0xf2, 0xaf, 0x47, 0x5b, 0x1e, 0x56, 0xc3, 0xa1, 0x44, 0xb1, 0x23, + 0xeb, 0xd2, 0xb1, 0x28, 0xa0, 0x0c, 0xa1, 0x02, 0x42, 0x74, 0x80, 0x57, + 0xe4, 0xb7, 0x97, 0x6b, 0x68, 0xb1, 0x2f, 0x44, 0x82, 0xba, 0xe4, 0x86, + 0x65, 0xf3, 0xb0, 0xe9, 0xab, 0x06, 0xac, 0x84, 0x31, 0xb0, 0x74, 0xba, + 0x79, 0x0a, 0x38, 0x8a, 0xeb, 0x12, 0xe2, 0x49, 0x5e, 0x14, 0x7b, 0x2c, + 0x68, 0xa9, 0x61, 0xb0, 0x80, 0xb8, 0x1c, 0x74, 0xb5, 0x46, 0xe6, 0x2d, + 0x0d, 0x93, 0x55, 0xac, 0x4c, 0x59, 0x71, 0x76, 0x62, 0xdc, 0x74, 0xb6, + 0x20, 0xa7, 0x5c, 0x7f, 0xc2, 0x4b, 0x3a, 0x93, 0x2a, 0xae, 0xd2, 0xbe, + 0x1a, 0x4a, 0x74, 0xf2, 0x50, 0x11, 0x85, 0x08, 0x63, 0x6b, 0xc0, 0x32, + 0x74, 0x55, 0x28, 0x58, 0x76, 0x16, 0x7a, 0xca, 0x92, 0xc5, 0x76, 0x83, + 0xbb, 0x86, 0x8a, 0xea, 0xd9, 0xb7, 0x89, 0x98, 0x6b, 0x9b, 0xc4, 0xbe, + 0x3f, 0x2c, 0x0b, 0x63, 0xc3, 0x9c, 0x1a, 0x62, 0x22, 0x3d, 0xe2, 0x02, + 0xc0, 0x1a, 0x62, 0xb4, 0x81, 0x72, 0xc3, 0xc4, 0x61, 0xe9, 0x00, 0x65, + 0x13, 0x8b, 0x8e, 0xdb, 0xb2, 0x4a, 0x64, 0x02, 0x16, 0xf5, 0xec, 0x8d, + 0x3e, 0x61, 0x7f, 0x49, 0x51, 0xa0, 0x9c, 0x25, 0x26, 0x3e, 0x60, 0xc4, + 0xbc, 0xa6, 0x96, 0x88, 0xd7, 0x49, 0x1c, 0xf3, 0x94, 0xae, 0xdc, 0xc8, + 0x14, 0xb7, 0x46, 0x94, 0x63, 0x96, 0x41, 0x6b, 0x29, 0xa2, 0xa2, 0xc6, + 0x83, 0xba, 0x1d, 0xd6, 0xe9, 0x60, 0x61, 0x14, 0xbc, 0x3e, 0x0c, 0x9e, + 0x0b, 0xb5, 0xa0, 0x20, 0xa1, 0x77, 0x1a, 0x2b, 0x7c, 0xed, 0x7a, 0x1c, + 0xdf, 0xe6, 0xb4, 0xe2, 0x64, 0xbe, 0x61, 0x26, 0xa3, 0x0a, 0x27, 0xa4, + 0x35, 0x16, 0x59, 0xa8, 0x27, 0xc8, 0x4e, 0xdc, 0x18, 0x77, 0x02, 0x3f, + 0x66, 0x66, 0x0a, 0xa4, 0x22, 0x9b, 0x61, 0x3c, 0x65, 0x8d, 0x45, 0x09, + 0x28, 0xd1, 0x07, 0x21, 0xd5, 0x96, 0xa3, 0xb7, 0xa4, 0xbb, 0xca, 0x22, + 0x1c, 0xa2, 0x06, 0xf5, 0x25, 0x0d, 0xa8, 0x2b, 0x2c, 0xff, 0x0b, 0x79, + 0xbe, 0x38, 0x64, 0x56, 0x74, 0x6a, 0x98, 0xf3, 0x75, 0x44, 0xeb, 0x67, + 0xd8, 0xb2, 0x91, 0xb0, 0xe8, 0x62, 0xee, 0xa2, 0x31, 0xa6, 0xd0, 0x48, + 0xd7, 0xa7, 0x37, 0x20, 0x11, 0x11, 0x08, 0x09, 0x79, 0xbe, 0xd5, 0x2b, + 0xe8, 0xfc, 0xce, 0x9b, 0xeb, 0x99, 0x3d, 0x5b, 0x49, 0xea, 0xe1, 0xb7, + 0x0c, 0x45, 0x59, 0x3b, 0xd1, 0x38, 0x1e, 0x42, 0x67, 0xbe, 0xa0, 0x5b, + 0x6a, 0xbd, 0x98, 0x65, 0xa8, 0x04, 0x6f, 0xc7, 0x16, 0xf9, 0xe7, 0xc1, + 0x4d, 0x69, 0x33, 0x04, 0x8e, 0x14, 0x19, 0xd0, 0xd1, 0x6c, 0x27, 0xe3, + 0x8d, 0x1d, 0x89, 0x08, 0xff, 0x60, 0xcf, 0x2e, 0x2f, 0x8d, 0xea, 0x3a, + 0xe8, 0x65, 0x3b, 0xcb, 0x99, 0x35, 0xdf, 0x62, 0x8b, 0x9a, 0x60, 0x72, + 0x36, 0x0b, 0xb5, 0xca, 0xc4, 0xe5, 0x97, 0x16, 0x70, 0xca, 0xf4, 0xe1, + 0x9a, 0xd3, 0xd7, 0x75, 0x8a, 0xac, 0x66, 0x71, 0xa3, 0x61, 0x20, 0x29, + 0x8d, 0x71, 0xe1, 0x6a, 0xbb, 0x51, 0xca, 0xba, 0x15, 0x3f, 0x9f, 0xf2, + 0x16, 0xbd, 0x99, 0x16, 0x5f, 0x51, 0x46, 0x7d, 0xd3, 0x67, 0x03, 0xdd}, + // ciphertext + {0x3e, 0xe6, 0x6a, 0x19, 0x55, 0x10, 0x0c, 0x98, 0xb6, 0x10, 0xe6, 0xa4, + 0xa1, 0x8a, 0x9e, 0xeb, 0x85, 0x24, 0x27, 0xcb, 0xec, 0x4a, 0xe6, 0x05, + 0x39, 0xac, 0x85, 0x53, 0xab, 0x51, 0x2d, 0x70, 0x28, 0x1f, 0xe7, 0x87, + 0x63, 0x83, 0x7c, 0x36, 0xd9, 0x91, 0xb4, 0x39, 0x1e, 0x67, 0xb2, 0x99, + 0x86, 0x4c, 0xe3, 0xd1, 0x0d, 0xce, 0x75, 0xf4, 0x83, 0x1d, 0xef, 0x03, + 0xe4, 0xc3, 0x4c, 0x2b, 0x8e, 0xf7, 0x05, 0x4d, 0xaa, 0x12, 0xc8, 0xde, + 0x0e, 0x61, 0xe6, 0x73, 0x25, 0xfa, 0xc1, 0xcd, 0xba, 0xa3, 0x10, 0x86, + 0x35, 0xf6, 0x20, 0xf2, 0x03, 0xbc, 0x04, 0x24, 0xf6, 0x05, 0xe4, 0x35, + 0xcb, 0xc8, 0x79, 0x80, 0x36, 0x28, 0xdb, 0x6f, 0x4b, 0x70, 0x33, 0x09, + 0x7f, 0xcc, 0xa1, 0x1e, 0x1a, 0xe5, 0x39, 0x8c, 0x80, 0x5c, 0x7c, 0x6b, + 0x2f, 0x19, 0xb1, 0xed, 0x00, 0x60, 0x1f, 0x4f, 0x66, 0xb7, 0x2b, 0xdb, + 0x41, 0x04, 0x75, 0x32, 0x22, 0x5c, 0x3f, 0xaf, 0x52, 0xa6, 0x4f, 0xc0, + 0xd0, 0x95, 0xba, 0xba, 0xa4, 0xfa, 0x60, 0x74, 0x0d, 0x96, 0xc0, 0xe0, + 0xc1, 0x7b, 0xba, 0xe6, 0xb5, 0x34, 0x47, 0xbd, 0xf3, 0x5d, 0xeb, 0xb4, + 0x77, 0xe0, 0xa5, 0xff, 0x14, 0x37, 0x0f, 0x3a, 0x53, 0x44, 0x1a, 0xc1, + 0xe7, 0xa9, 0xb3, 0x3c, 0xec, 0x34, 0xff, 0x41, 0x96, 0x1d, 0x0c, 0x48, + 0xad, 0x86, 0xb0, 0xfa, 0xb1, 0x58, 0x22, 0x8a, 0x0c, 0xca, 0x2e, 0x10, + 0x63, 0x97, 0x61, 0xad, 0x8a, 0x71, 0x72, 0xaa, 0xf4, 0x46, 0x9f, 0xc3, + 0x5f, 0xae, 0xad, 0x99, 0xce, 0x8a, 0x56, 0x4c, 0xb8, 0x58, 0x8c, 0x4a, + 0x9a, 0x17, 0x7a, 0x22, 0x68, 0x4f, 0xc9, 0x0b, 0x0b, 0x90, 0xa0, 0xee, + 0x5f, 0x40, 0x56, 0x5e, 0x2c, 0xc5, 0x57, 0x09, 0x2b, 0xa6, 0x77, 0x0e, + 0x69, 0x8c, 0x27, 0x09, 0xd0, 0x0e, 0x1d, 0x59, 0x3f, 0x97, 0xd8, 0x0c, + 0xfd, 0x58, 0x6b, 0xf0, 0x03, 0xf2, 0xfb, 0xb1, 0x09, 0x8c, 0x20, 0xd2, + 0x09, 0xe1, 0x50, 0x38, 0x9a, 0x68, 0x6a, 0x00, 0xd4, 0x81, 0xf9, 0x76, + 0xf8, 0xf3, 0x85, 0x15, 0xe3, 0x1c, 0x43, 0xa9, 0x49, 0x36, 0xf5, 0x6c, + 0x4e, 0x42, 0x4f, 0xf2, 0x83, 0xb0, 0x9e, 0x50, 0x46, 0x2a, 0x55, 0x0f, + 0x16, 0x19, 0xdf, 0xb5, 0x6e, 0xe1, 0x62, 0x2d, 0xea, 0xe4, 0xd8, 0x67, + 0x81, 0x3d, 0xa2, 0xb0, 0x57, 0xfe, 0x08, 0xa3, 0xbb, 0xeb, 0x95, 0x63, + 0x51, 0x86, 0xeb, 0xd3, 0x8c, 0xc6, 0x44, 0x32, 0x7b, 0x9a, 0xd4, 0x11, + 0x4f, 0x88, 0xd1, 0xcd, 0x8f, 0xae, 0x56, 0x23, 0xde, 0x5b, 0xe9, 0x56, + 0x50, 0xbf, 0x56, 0x31, 0x0f, 0xf9, 0xae, 0x99, 0x03, 0x2a, 0x09, 0x68, + 0xeb, 0xf6, 0x1b, 0x3e, 0xb5, 0x1e, 0xcb, 0x3a, 0x30, 0x7f, 0xdd, 0xec, + 0x5b, 0xfb, 0x4d, 0x97, 0x7a, 0x82, 0xdb, 0x57, 0xff, 0x7b, 0x2e, 0xf6, + 0x80, 0x12, 0x4a, 0x51, 0xa6, 0xb9, 0xf9, 0x65, 0x0a, 0xa0, 0xd2, 0xd6, + 0x4d, 0x65, 0xdf, 0x7d, 0x2f, 0xa0, 0xd1, 0x0e, 0x7b, 0x62, 0x60, 0xda, + 0xaa, 0x9f, 0xeb, 0xe2, 0x39, 0x75, 0xf3, 0xc8, 0xd8, 0x0a, 0x90, 0xf4, + 0x29, 0xf6, 0x4c, 0xe0, 0x85, 0x93, 0x18, 0x3b, 0xda, 0x45, 0x60, 0xb8, + 0x1f, 0x0c, 0x14, 0x88, 0x2f, 0xbd, 0x4e, 0xad, 0x6b, 0x74, 0xe7, 0x16, + 0xca, 0x82, 0x9b, 0x28, 0x2e, 0x51, 0x61, 0x70, 0xa7, 0x1a, 0x50, 0x27, + 0x9f, 0xe8, 0xf7, 0x76, 0x56, 0x81, 0x91, 0x86, 0xe2, 0xf0, 0xe4, 0xbb, + 0x87, 0xce, 0x23, 0x7d, 0xd8, 0x95, 0x9e, 0xa5, 0x11, 0x40, 0x98, 0x48, + 0x0c, 0x01, 0x83, 0x61, 0x6d, 0x23, 0x50, 0x3c, 0x4e, 0x27, 0x75, 0xb5, + 0x13, 0x3a, 0x77, 0x33, 0x51, 0x41, 0x7a, 0xa8, 0xef, 0x3b, 0x71, 0x76, + 0xd1, 0x6b, 0x2b, 0xae, 0xd0, 0xf1, 0x17, 0x16, 0xc0, 0x98, 0xf8, 0x8d, + 0xa2, 0x61, 0x59, 0x64, 0x36, 0xae, 0x6d, 0xb4, 0xa8, 0xa0, 0x2d, 0x08, + 0x58, 0xee, 0x0d, 0xd7, 0xb8, 0x39, 0x99, 0x47, 0xc0, 0x84, 0xcb, 0xa0, + 0x17, 0x76, 0x33, 0xbc, 0xe8, 0x10, 0x55, 0x7a, 0xdc, 0xea, 0x9f, 0xb3, + 0x3b, 0x76, 0x7e, 0x85, 0x9a, 0xe9, 0x04, 0x35, 0x63, 0x4e, 0xa4, 0x51, + 0x65, 0xc1, 0x90, 0xdc, 0xbc, 0x07, 0x3b, 0xaa, 0x44, 0xcf, 0x65, 0x3e, + 0x7a, 0x1f, 0x28, 0xc9, 0xec, 0xdc, 0xe9, 0x6a, 0x52, 0x34, 0xc4, 0x6a, + 0x61, 0xcf, 0xef, 0xf9, 0x03, 0x22, 0x14, 0xff, 0x5b, 0x95, 0xfa, 0xc2, + 0x91, 0x75, 0xf5, 0xe3, 0x41, 0x21, 0x8a, 0x32, 0xfe, 0x3e, 0x95, 0x80, + 0xf4, 0x8f, 0x38, 0xa0, 0xa7, 0x31, 0x73, 0x50, 0x2a, 0xf9, 0x70, 0x16, + 0x46, 0x17, 0xef, 0x8d, 0x8b, 0xfe, 0x74, 0x37, 0x5e, 0x2e, 0x37, 0x0a, + 0x96, 0xc1, 0x20, 0x2f, 0x7c, 0x57, 0xd9, 0x1a, 0xa0, 0x39, 0x2e, 0x84, + 0x16, 0x5b, 0xff, 0x96, 0xdb, 0xbe, 0xc4, 0x93, 0x85, 0x03, 0xc7, 0xff, + 0x07, 0x22, 0x26, 0xe1, 0x71, 0xda, 0x84, 0x2c, 0x09, 0x25, 0x9f, 0x04, + 0xd2, 0xbb, 0x7b, 0xfe, 0x9b, 0x8c, 0x57, 0x5d, 0x73, 0x48, 0x75, 0x6d, + 0x80, 0x8f, 0x66, 0xc7, 0xba, 0x73, 0x49, 0xec, 0xb0, 0x1d, 0x77, 0x1c, + 0x03, 0x5b, 0x49, 0xef, 0xa0, 0x10, 0xe4, 0xed, 0x34, 0x61, 0xd3, 0x31, + 0x91, 0xfd, 0x66, 0xbc, 0xdf, 0x5b, 0x70, 0x3d, 0x87, 0xb0, 0xea, 0x28, + 0x4a, 0xa5, 0xb6, 0xc3, 0x37, 0x6a, 0xbb, 0x84, 0x74, 0x41, 0x0a, 0xdd, + 0xc2, 0x45, 0x1c, 0x28, 0x69, 0x91, 0x46, 0x26, 0x08, 0x7d, 0xfc, 0xcf, + 0xcb, 0x93, 0x4c, 0xac, 0x02, 0x12, 0x5e, 0x38, 0x0f, 0x2c, 0x16, 0x40, + 0x89, 0xbd, 0x79, 0x65, 0xa2, 0x3c, 0xc3, 0x62, 0xcc, 0x5b, 0x91, 0xb8, + 0xbe, 0xdb, 0x4d, 0x5d, 0xbd, 0xb7, 0x04, 0x21, 0x1d, 0xca, 0xb3, 0x1a, + 0x2d, 0xd3, 0xc9, 0xac, 0x50, 0x7a, 0x28, 0xb6, 0xc4, 0x34, 0x1e, 0x35, + 0x74, 0x6c, 0xb8, 0x57, 0xf6, 0x0b, 0x42, 0xfe, 0x80, 0xde, 0x5d, 0xfe, + 0x3b, 0x98, 0xbc, 0x9e, 0x5a, 0xf2, 0x26, 0x9a, 0x4e, 0x41, 0x1f, 0xb8, + 0x7b, 0x5b, 0xe6, 0xcc, 0xfc, 0xa6, 0x5b, 0x05, 0x60, 0x5a, 0x0a, 0xed, + 0x7b, 0xd3, 0x20, 0xa7, 0xc6, 0x3c, 0x07, 0x33, 0x08, 0xea, 0xac, 0xfa, + 0x0c, 0x9e, 0xf4, 0x1b, 0x23, 0xfc, 0x76, 0x90, 0x5c, 0x1d, 0xe3, 0x14, + 0xcf, 0x33, 0x3d, 0x48, 0xa7, 0xd3, 0x1b, 0xeb, 0x2b, 0x60, 0x77, 0xf7, + 0x5b, 0xa4, 0x1f, 0xa1, 0xbe, 0x80, 0x66, 0xb0, 0x99, 0xeb, 0x68, 0xba, + 0x34, 0x3c, 0x2c, 0x73, 0x88, 0xe8, 0x34, 0xba, 0xa1, 0x33, 0x00, 0xf1, + 0xb7, 0x32, 0x55, 0x8b, 0x9f, 0x2a, 0x61, 0xb5, 0x65, 0x45, 0x9b, 0xf3, + 0xea, 0x4e, 0xb0, 0x12, 0xf0, 0x81, 0xf6, 0xef, 0x52, 0x93, 0xe3, 0xf0, + 0x2f, 0x1b, 0x00, 0x58, 0x2b, 0x2f, 0x1f, 0xb1, 0xf9, 0xf7, 0x61, 0x8c, + 0x1d, 0x71, 0x2d, 0x39, 0xcb, 0xb3, 0x91, 0xae, 0xb2, 0x0a, 0x17, 0xdb, + 0xe1, 0xf7, 0xef, 0x6d, 0x11, 0x24, 0xfa, 0xf7, 0x25, 0xbe, 0x1b, 0x62, + 0xbd, 0xdc, 0x3c, 0x21, 0x3a, 0x88, 0xa8, 0x82, 0xce, 0xde, 0x31, 0xe8, + 0x9f, 0x91, 0xe9, 0x72, 0x8c, 0xd0, 0x04, 0x08, 0x32, 0x59, 0x2a, 0xa1, + 0x48, 0xfc, 0xf7, 0x44, 0x74, 0x38, 0x2d, 0xce, 0x42, 0xc0, 0x7d, 0x68, + 0x84, 0xc4, 0xf8, 0x06, 0xf1, 0xd6, 0x7a, 0x10, 0x48, 0xb4, 0x45, 0x0e, + 0xc8, 0x0d, 0x12, 0x93, 0x75, 0xfb, 0x54, 0x11, 0x5f, 0x27, 0x80, 0x0e, + 0x15, 0x7f, 0x99, 0x8e, 0x8c, 0x72, 0xd6, 0xe9, 0x4c, 0x11, 0x4a, 0x23, + 0xa7, 0x8d, 0xab, 0xae, 0x57, 0xdd, 0xf1, 0x3a, 0x47, 0x80, 0x50, 0xf0, + 0x14, 0x06, 0x47, 0x1b, 0x94, 0xcd, 0xbe, 0xb6, 0x8f, 0x99, 0x3c, 0xed, + 0xfc, 0xaf, 0x94, 0x6f, 0x50, 0x96, 0x82, 0x10, 0xe0, 0x8b, 0xf3, 0xf2, + 0x8a, 0x6d, 0x56, 0x86, 0xb4, 0x42, 0x1f, 0x0b, 0x46, 0x3c, 0xa4, 0x1b, + 0xa6, 0xfb, 0x76, 0x04, 0x5b, 0xb4, 0x06, 0xb6, 0xa5, 0x31, 0x11, 0xb8, + 0x51, 0x07, 0x27, 0x8a, 0xc0, 0x3b, 0x60, 0x90, 0x45, 0x79, 0x53, 0xf3, + 0xb2, 0x8e, 0x7e, 0x31, 0xb9, 0x81, 0x5a, 0xf5, 0xcf, 0x25, 0xc7, 0x08, + 0xab, 0xb5, 0x77, 0xa7, 0xa5, 0x90, 0xcc, 0xe4, 0xcc, 0xce, 0x08, 0x6f, + 0x6d, 0x29, 0x34, 0x4a, 0x6b, 0x81, 0x44, 0x50, 0x5a, 0xfe, 0x76, 0x27, + 0x5f, 0xd0, 0x74, 0x91, 0x6d, 0xac, 0x0e, 0xd8, 0x88, 0x21, 0x3d, 0x99, + 0xc8, 0x90, 0x4b, 0xff, 0xac, 0xc5, 0x46, 0xf6, 0x22, 0x2b, 0x3d, 0x9f, + 0x7e, 0xcc, 0x81, 0x12, 0x53, 0x38, 0x9e, 0x81, 0x41, 0x70, 0xaa, 0x37, + 0x2e, 0x90, 0xfc, 0x90, 0xbd, 0xfd, 0x52, 0x50, 0x2b, 0xbd, 0x46, 0x23, + 0x7b, 0x7d, 0xbe, 0x93, 0x27, 0xec, 0x23, 0xec, 0x71, 0xa5, 0x10, 0xd1, + 0xde, 0x47, 0xcd, 0xac, 0x0e, 0xfc, 0x8c, 0x0f, 0x0f, 0x9d, 0xa8, 0x4c, + 0x6c, 0x3e, 0x03, 0xc0, 0x75, 0x46, 0x7c, 0x3c, 0xa1, 0xac, 0xdd, 0xf9, + 0x97, 0xc9, 0x40, 0xa2, 0x1d, 0x2d, 0xf5, 0x16, 0xca, 0x82, 0x75, 0x58, + 0x03, 0x51, 0x82, 0x69, 0x36, 0x45, 0x4d, 0x35, 0xca, 0x0e, 0xfa, 0xe8, + 0x6e, 0x6c, 0xfe, 0xe6, 0x6f, 0x97, 0x03, 0x55, 0x92, 0xd5, 0x67, 0xe6, + 0x3b, 0x17, 0x6d, 0x7a, 0x7c, 0x96, 0xb3, 0x88, 0x13, 0x81, 0xe5, 0xf5, + 0x19, 0x5a, 0xba, 0x96, 0x58, 0xc9, 0x35, 0xa7, 0xff, 0x2c, 0xb2, 0xe7, + 0xcc, 0x7f, 0x2f, 0x9c, 0x1c, 0x60, 0xa4, 0xcd, 0x1c, 0x8e, 0xdf, 0xa5, + 0x5f, 0x6e, 0xd1, 0xfe, 0xcc, 0xca, 0x08, 0x8b, 0xcc, 0x75, 0xd7, 0xc5, + 0xac, 0x42, 0xfe, 0xf2, 0x6d, 0xde, 0x63, 0xe3, 0xcf, 0x5b, 0x00, 0x40, + 0x9e, 0xe8, 0x0c, 0xad, 0x5a, 0xb8, 0x54, 0x47, 0x57, 0xd2, 0xf1, 0xcf, + 0x59, 0x20, 0x74, 0x51, 0xfd, 0x83, 0x66, 0x50, 0x9b, 0x62, 0x0d, 0x5c, + 0x14, 0xad, 0xb5, 0x00, 0xbb, 0x54, 0xb0, 0xbb, 0x8e, 0xfb, 0xa5, 0xba, + 0x4a, 0x47, 0xaa, 0x1c, 0xf7, 0xc5, 0x88, 0xea, 0xd5, 0x93, 0x9b, 0xaa, + 0x82, 0x5d, 0x1c, 0x45, 0x51, 0x9b, 0xb1, 0x59, 0x35, 0xcb, 0x90, 0x11, + 0x77, 0x77, 0x0d, 0x1c, 0x4a, 0x6d, 0x1c, 0xe1, 0x1d, 0xf7, 0x03, 0x74, + 0x52, 0xd9, 0x5c, 0x64, 0xf7, 0x44, 0x69, 0x0b, 0x98, 0x31, 0x98, 0x5e, + 0xe6, 0x3f, 0xd7, 0x3c, 0x73, 0xee, 0x20, 0xea, 0xbb, 0xf3, 0x49, 0x79, + 0x8f, 0x26, 0x7a, 0xca, 0x6a, 0x85, 0x2d, 0x3f, 0xa6, 0xb1, 0x08, 0xe7, + 0x74, 0x10, 0x6d, 0x48, 0xf4, 0x65, 0xd3, 0xa7, 0x39, 0x55, 0x4e, 0x8b, + 0xef, 0xe9, 0xbc, 0x2c, 0xe1, 0xbd, 0xfb, 0x90, 0x75, 0x54, 0x82, 0xdb, + 0xa8, 0x46, 0x1f, 0x72, 0xf7, 0xbe, 0x11, 0x80, 0x92, 0x7d, 0xd7, 0xfd, + 0x8d, 0x8d, 0xcb, 0xb2, 0x3a, 0xc4, 0x88, 0xff, 0x17, 0x15, 0x24, 0xc0, + 0x94, 0x83, 0x02, 0xf8, 0x1d, 0x54, 0x2f, 0xec, 0x34, 0x51, 0xe0, 0x56, + 0xb1, 0x4d, 0x81, 0xd8, 0x1e, 0xe2, 0x30, 0x01, 0x33, 0xb2, 0x61, 0x68, + 0x23, 0xa9, 0x9e, 0x42, 0xe3, 0x4f, 0xe3, 0x19, 0xc6, 0x44, 0xd8, 0x97, + 0x6e, 0xa8, 0x32, 0xa7, 0x39, 0x51, 0xff, 0x65, 0x28, 0xec, 0x42, 0xb0, + 0xb6, 0x96, 0x0f, 0x88, 0xc3, 0x84, 0xa0, 0xb8, 0x5d, 0x30, 0x30, 0xab, + 0xc5, 0xfc, 0x38, 0xdf, 0x8f, 0x0d, 0x2d, 0x1e, 0x77, 0x81, 0x1e, 0x8e, + 0x6a, 0x4b, 0x14, 0xe8, 0xb6, 0xdf, 0x3b, 0xde, 0x60, 0x5e, 0x7b, 0x24, + 0x15, 0x25, 0xd5, 0xe8, 0xa5, 0xa0, 0xcf, 0x93}, + // secret + {0x33, 0xb4, 0xd1, 0x8f, 0x7c, 0xba, 0xe3, 0xfb, 0x6d, 0x79, 0xd3, + 0x9c, 0x47, 0x28, 0xc5, 0x43, 0xba, 0xb7, 0xd4, 0x0b, 0x6b, 0xf2, + 0x06, 0x37, 0xfb, 0x27, 0x61, 0x9f, 0xad, 0x4d, 0xe5, 0x14}, + true}, + // tcID: 103 + {103, + params_ml_kem1024_test_mode, + // privateKey + {0xcb, 0xc4, 0x78, 0x37, 0x2b, 0x69, 0xe2, 0x89, 0xc9, 0xbd, 0xd7, 0x53, + 0xa9, 0xa6, 0x36, 0xf4, 0x90, 0xb4, 0x73, 0x25, 0x64, 0xd7, 0x0a, 0x15, + 0xd1, 0x69, 0xa4, 0x96, 0x19, 0x50, 0xd6, 0x18, 0x21, 0x0a, 0x15, 0x6d, + 0xb9, 0xf8, 0x9f, 0x41, 0xd2, 0x30, 0x66, 0x86, 0x19, 0x11, 0x4c, 0x92, + 0xef, 0x53, 0xac, 0x54, 0xcb, 0x54, 0x24, 0x98, 0x4c, 0xc8, 0xab, 0xbb, + 0x6e, 0x6b, 0xaf, 0x63, 0x04, 0xa6, 0x7b, 0xa9, 0x97, 0xe8, 0x19, 0x20, + 0x81, 0x94, 0xca, 0xc2, 0x3b, 0x53, 0xce, 0xb2, 0xbb, 0x41, 0x87, 0x33, + 0x52, 0x32, 0x6f, 0xc2, 0xb4, 0xa4, 0x05, 0x47, 0x1b, 0x43, 0xa6, 0x46, + 0xe4, 0xa1, 0x92, 0x47, 0x34, 0x15, 0x1e, 0xe8, 0x5a, 0x68, 0xc4, 0xb6, + 0x5c, 0x39, 0x66, 0x66, 0x98, 0x52, 0x05, 0x22, 0x2d, 0x21, 0x2b, 0x45, + 0x2b, 0xa3, 0xad, 0xac, 0xf8, 0x45, 0x4a, 0x42, 0x85, 0x8d, 0x46, 0x90, + 0xed, 0x4a, 0x3a, 0xbc, 0x19, 0xa9, 0xf3, 0x81, 0xb2, 0x1a, 0x55, 0x1c, + 0xe4, 0x80, 0x46, 0x64, 0xf6, 0x44, 0x11, 0x11, 0x51, 0x44, 0x4c, 0x15, + 0x6c, 0xa1, 0xa8, 0x7c, 0x6c, 0x0f, 0x9e, 0x62, 0x81, 0xf2, 0x2a, 0xbb, + 0x93, 0xab, 0x32, 0xef, 0xc7, 0x79, 0x96, 0x30, 0x2d, 0xa9, 0x05, 0x38, + 0x6b, 0xa3, 0x62, 0xec, 0x70, 0x9a, 0x13, 0x0a, 0x18, 0x11, 0xec, 0x8b, + 0x88, 0xc4, 0xcc, 0x7d, 0x16, 0x8a, 0xc0, 0xf2, 0xa2, 0x4c, 0x52, 0x76, + 0xbe, 0xfc, 0x1e, 0x37, 0x66, 0xca, 0x27, 0xea, 0x31, 0x34, 0xa5, 0x5f, + 0xd3, 0xb3, 0xc8, 0x7c, 0xfa, 0x19, 0x7f, 0x40, 0x6f, 0xe1, 0x48, 0x64, + 0xdc, 0x62, 0x82, 0x27, 0xe4, 0x0a, 0x8a, 0x10, 0xb8, 0x94, 0x82, 0xc7, + 0xf9, 0x0b, 0x00, 0x8d, 0xc0, 0x11, 0x52, 0x38, 0x81, 0x99, 0x24, 0x82, + 0xf7, 0xab, 0x2c, 0x35, 0x95, 0x2b, 0xe8, 0x2a, 0x0e, 0x37, 0x41, 0xcd, + 0x63, 0x70, 0x03, 0xfc, 0x66, 0x81, 0x1f, 0x94, 0x4c, 0x24, 0x20, 0x7f, + 0xc0, 0x68, 0x4f, 0x2a, 0x39, 0xb0, 0xa8, 0xec, 0x73, 0xef, 0x3a, 0x3f, + 0xfe, 0xb6, 0xbd, 0x45, 0x12, 0xb2, 0x73, 0x62, 0xae, 0xe5, 0x37, 0x1d, + 0x91, 0x07, 0x29, 0x55, 0x34, 0xbf, 0xf4, 0xdc, 0x46, 0x13, 0x51, 0x09, + 0x7b, 0x8b, 0x87, 0x71, 0x14, 0xcf, 0x9c, 0x99, 0x33, 0xe2, 0x7c, 0xa5, + 0x1f, 0x84, 0x2e, 0xb8, 0x1a, 0x8e, 0xa9, 0x81, 0x59, 0x7f, 0xb0, 0xc2, + 0xea, 0x17, 0x28, 0x8b, 0x75, 0x73, 0x42, 0x94, 0x30, 0x23, 0x55, 0xca, + 0xf7, 0x5b, 0xc9, 0xf0, 0x93, 0x72, 0x7d, 0xb6, 0x29, 0xad, 0xf8, 0x7d, + 0xee, 0x8a, 0xa5, 0x4b, 0xcc, 0x97, 0x94, 0x06, 0x52, 0xa8, 0x44, 0x9f, + 0x5f, 0xfc, 0x2a, 0x65, 0xf0, 0x31, 0x62, 0x4a, 0x23, 0x9b, 0x25, 0x02, + 0x56, 0xa7, 0x46, 0x88, 0x84, 0x60, 0x0b, 0x27, 0x0c, 0x44, 0x43, 0x62, + 0xbf, 0x35, 0x69, 0xdc, 0x49, 0x14, 0x6c, 0x70, 0x72, 0xe9, 0x63, 0x6f, + 0x4a, 0x76, 0x39, 0x62, 0x6a, 0xcf, 0x3c, 0xec, 0xb7, 0x96, 0x02, 0x5b, + 0x51, 0x95, 0x90, 0x78, 0x11, 0x5a, 0xbb, 0x9b, 0x8d, 0xcc, 0x46, 0x9d, + 0xa4, 0xc0, 0x09, 0x78, 0xac, 0x5d, 0xe4, 0x18, 0xa0, 0xad, 0xfa, 0x0f, + 0xc8, 0x28, 0x13, 0x24, 0xdb, 0x84, 0x72, 0xc4, 0x4e, 0xc6, 0xa0, 0x53, + 0xa8, 0x6b, 0x5e, 0xb8, 0x43, 0x0b, 0xc6, 0xab, 0xbd, 0xc8, 0xea, 0x50, + 0x99, 0xf0, 0x00, 0xf2, 0x4b, 0x62, 0x57, 0x1c, 0x99, 0x65, 0x06, 0xc3, + 0xde, 0xe1, 0x33, 0x9e, 0x6c, 0xb6, 0xf9, 0x68, 0x07, 0x28, 0x29, 0xa9, + 0x9a, 0xd6, 0x07, 0x33, 0x89, 0x88, 0x00, 0x20, 0x0e, 0x32, 0xaa, 0x5c, + 0xe2, 0xf9, 0x26, 0x99, 0x0c, 0x1b, 0x12, 0x0c, 0x3a, 0x14, 0x98, 0x14, + 0xc0, 0x3b, 0x76, 0x75, 0x92, 0x75, 0xfd, 0xb6, 0x31, 0xb2, 0x93, 0xa5, + 0xd5, 0x1a, 0x0b, 0xe2, 0xcc, 0x8b, 0x8a, 0xc5, 0x13, 0xa9, 0xb9, 0x50, + 0xb1, 0x85, 0x52, 0x6a, 0x35, 0xcf, 0xdf, 0x44, 0x07, 0x7b, 0x13, 0x8f, + 0x8f, 0xa8, 0x6d, 0x5e, 0x93, 0x5f, 0x0c, 0xe5, 0x48, 0x04, 0x1a, 0x51, + 0x69, 0x63, 0xc4, 0x7d, 0xf6, 0xcb, 0x8a, 0x9a, 0x1d, 0x06, 0x5a, 0xad, + 0x6c, 0x48, 0xca, 0x2c, 0xc1, 0xb2, 0x06, 0x37, 0x5a, 0x20, 0x01, 0x07, + 0x1f, 0x69, 0x9c, 0xe1, 0xe5, 0x05, 0xc1, 0x3b, 0xb5, 0x89, 0xd1, 0x50, + 0xfe, 0x43, 0x43, 0x38, 0x12, 0xb3, 0x81, 0x2c, 0x50, 0xad, 0x99, 0x56, + 0x33, 0x27, 0x93, 0xcc, 0x97, 0x2c, 0x89, 0xdc, 0x7f, 0x37, 0x6c, 0x95, + 0xdb, 0xfb, 0x53, 0xf4, 0x49, 0x03, 0x75, 0xb9, 0x47, 0xc8, 0xe3, 0x62, + 0xb8, 0x72, 0x32, 0x7c, 0xb4, 0x6f, 0x14, 0x52, 0x4d, 0x65, 0x50, 0x3b, + 0x53, 0xe6, 0x21, 0x9e, 0x39, 0x98, 0xb7, 0xf5, 0x9f, 0x02, 0x59, 0xc8, + 0xba, 0x12, 0x1a, 0x0a, 0xb5, 0x15, 0x33, 0x38, 0x95, 0x04, 0xe5, 0x22, + 0x7d, 0x89, 0xbf, 0x3d, 0xc7, 0x1d, 0xd2, 0xbc, 0x2e, 0x10, 0x52, 0x69, + 0xf6, 0x61, 0x11, 0xb0, 0xf1, 0x5d, 0x46, 0x64, 0x7d, 0xbb, 0xa2, 0x7a, + 0x90, 0xd2, 0xa1, 0x82, 0x08, 0x9b, 0x06, 0xc6, 0x5f, 0xe2, 0x4b, 0x5d, + 0x27, 0x57, 0x59, 0x21, 0x52, 0x70, 0x23, 0x3a, 0x74, 0xe4, 0xc4, 0x55, + 0x67, 0x6a, 0x2a, 0x7e, 0x8c, 0x51, 0xf5, 0x17, 0x02, 0x08, 0x12, 0x2e, + 0xb5, 0xc9, 0x71, 0x4c, 0x3c, 0x23, 0xf0, 0xb8, 0x8b, 0xc5, 0x22, 0xb5, + 0x33, 0x29, 0x40, 0x58, 0xcb, 0x82, 0xfb, 0x3c, 0x32, 0x72, 0xe1, 0x7b, + 0x3e, 0x28, 0x13, 0x3e, 0xc2, 0x69, 0x8e, 0x94, 0x19, 0x32, 0xd6, 0x6b, + 0x05, 0x77, 0x98, 0xe8, 0x05, 0x17, 0x92, 0x20, 0x16, 0xc3, 0x16, 0x49, + 0x32, 0x85, 0x51, 0xf3, 0x2a, 0x93, 0x8e, 0x79, 0x16, 0x50, 0xb4, 0xc3, + 0x4c, 0x54, 0xa5, 0xc2, 0xb2, 0x95, 0xbf, 0xc6, 0x7f, 0x37, 0x1c, 0x84, + 0xf4, 0x61, 0x97, 0x89, 0x0b, 0x15, 0x10, 0xbc, 0x0d, 0xb5, 0xab, 0x17, + 0x71, 0x06, 0x42, 0x25, 0x5c, 0x89, 0x80, 0xda, 0xc5, 0x99, 0x10, 0x5a, + 0x0f, 0xf8, 0x48, 0xe0, 0x8c, 0x62, 0x9f, 0xd8, 0x93, 0x53, 0x72, 0xc1, + 0x7a, 0xac, 0x84, 0x69, 0x49, 0x2c, 0xa2, 0x79, 0x70, 0xb5, 0xc6, 0x03, + 0xe9, 0x19, 0x1a, 0x8a, 0x17, 0x2e, 0xa8, 0xa9, 0x99, 0x3c, 0x59, 0x90, + 0xc7, 0x12, 0x90, 0x59, 0xe0, 0x24, 0x8a, 0x1c, 0x17, 0x86, 0x87, 0x90, + 0x0a, 0x79, 0x7a, 0xc8, 0x34, 0x06, 0xb9, 0xf9, 0x52, 0x13, 0xe6, 0x06, + 0xca, 0x3a, 0x88, 0x80, 0xc3, 0x27, 0x3f, 0x96, 0x04, 0x47, 0xbc, 0x00, + 0xca, 0x14, 0x47, 0x3f, 0xf4, 0xa4, 0xe6, 0x37, 0xaa, 0x0f, 0x63, 0x8b, + 0xd2, 0xea, 0x50, 0x2f, 0x04, 0xba, 0x71, 0xd1, 0x2a, 0xd3, 0xe8, 0x44, + 0x57, 0x30, 0x73, 0x3f, 0x98, 0x3f, 0x9b, 0xd1, 0x7f, 0xf7, 0xe7, 0x7b, + 0x82, 0xcb, 0xb4, 0xe4, 0xfb, 0xa4, 0x76, 0x6a, 0x77, 0x9e, 0x50, 0xbf, + 0x53, 0xaa, 0x0c, 0x9f, 0x19, 0x86, 0xcf, 0x10, 0x90, 0x33, 0x11, 0x77, + 0xe8, 0x4a, 0x36, 0x7f, 0x45, 0x50, 0x81, 0xea, 0x1e, 0x2b, 0xc9, 0x66, + 0x50, 0xd8, 0x1b, 0x9c, 0x09, 0xb8, 0x05, 0x50, 0x74, 0xf3, 0x64, 0xcf, + 0x7b, 0xb6, 0x2a, 0x78, 0xcb, 0xc9, 0x2f, 0x80, 0xa0, 0x0d, 0x10, 0xcb, + 0xfc, 0xa0, 0x93, 0xcc, 0x57, 0xc3, 0xda, 0x96, 0x30, 0x25, 0xbc, 0x81, + 0x9c, 0x2c, 0xb0, 0x9d, 0x33, 0x33, 0x1a, 0x2b, 0x26, 0x12, 0x65, 0x8e, + 0x81, 0x38, 0x75, 0xc6, 0xd3, 0x39, 0x84, 0xb6, 0x80, 0x62, 0x69, 0xb5, + 0x16, 0x7b, 0x78, 0x64, 0xd5, 0x6c, 0xd1, 0x25, 0x5b, 0x05, 0x12, 0x2e, + 0x17, 0xc1, 0xcb, 0x68, 0x7c, 0x31, 0x64, 0x01, 0x0b, 0x5e, 0xd8, 0x1c, + 0x7f, 0x80, 0x30, 0x85, 0x46, 0x9d, 0xb5, 0xb3, 0xcc, 0x0a, 0xb4, 0x31, + 0xcd, 0x28, 0x37, 0x8a, 0x5b, 0x9b, 0xb4, 0x11, 0x28, 0x06, 0x27, 0xa9, + 0x63, 0x8c, 0x1d, 0x57, 0xf2, 0x67, 0x5a, 0x68, 0x15, 0xd5, 0x93, 0x4f, + 0xf9, 0x3b, 0x9f, 0xd3, 0x47, 0xac, 0x50, 0xeb, 0xc8, 0xd1, 0xdb, 0x72, + 0x3a, 0xdc, 0x9c, 0x07, 0x81, 0x03, 0x3e, 0x80, 0x5b, 0x66, 0x30, 0x04, + 0xc3, 0x14, 0x3d, 0x85, 0x94, 0x11, 0xad, 0x2c, 0x23, 0xd9, 0x08, 0x92, + 0x48, 0xa7, 0xb0, 0x00, 0x47, 0x2b, 0x2d, 0x08, 0x98, 0x8f, 0x61, 0x05, + 0x6d, 0x03, 0x82, 0x72, 0xbb, 0x22, 0x15, 0xd0, 0x5a, 0xbb, 0x45, 0x9f, + 0x01, 0x37, 0xbe, 0xdc, 0x91, 0x65, 0x11, 0xd3, 0xc3, 0xa3, 0x69, 0x4c, + 0x3f, 0x20, 0x68, 0xf2, 0x50, 0x8b, 0x44, 0xf5, 0x85, 0x7d, 0x81, 0x45, + 0x22, 0x52, 0x8a, 0xfd, 0x01, 0xcd, 0x5a, 0x26, 0xc5, 0x8a, 0x31, 0x18, + 0x84, 0x1a, 0x80, 0xc8, 0xd6, 0x49, 0xd6, 0xaa, 0xa6, 0x48, 0x42, 0x67, + 0x6c, 0xe3, 0xc9, 0xe1, 0x07, 0x22, 0x99, 0xa9, 0x48, 0xc5, 0xb4, 0xc8, + 0x07, 0x37, 0x0c, 0x9a, 0xc2, 0x4e, 0x41, 0x13, 0x92, 0x7d, 0x58, 0x4f, + 0x8e, 0xa9, 0x22, 0x7a, 0xda, 0xb5, 0xdd, 0x65, 0x1a, 0x9f, 0xd2, 0x37, + 0xe1, 0x24, 0xb9, 0xdb, 0x3b, 0x2a, 0x08, 0x31, 0x5f, 0x22, 0xa9, 0x54, + 0xfd, 0x46, 0xb3, 0x74, 0x84, 0x7c, 0x46, 0x5c, 0xb7, 0xdd, 0xa9, 0x31, + 0xbb, 0x40, 0x0c, 0x66, 0xfa, 0xb9, 0x7e, 0xc1, 0x35, 0x5b, 0x21, 0x3b, + 0x03, 0xdc, 0x74, 0xd8, 0x19, 0x35, 0x94, 0xb4, 0xa3, 0x3f, 0x30, 0x00, + 0xb8, 0x27, 0x3a, 0x5f, 0x80, 0x77, 0xfc, 0xd5, 0x29, 0x9f, 0x77, 0x83, + 0x05, 0xc4, 0xa8, 0xd0, 0x54, 0x8c, 0x4e, 0xc5, 0x0d, 0x31, 0xfb, 0x0c, + 0xb1, 0x75, 0x8b, 0xdb, 0x7b, 0x57, 0x2c, 0x59, 0x13, 0xa1, 0xd4, 0xad, + 0xa9, 0x4a, 0x89, 0x25, 0xd0, 0x89, 0xb7, 0xcc, 0x38, 0xcc, 0xc4, 0x81, + 0x7c, 0xa7, 0x89, 0x4e, 0x25, 0x01, 0x2d, 0x89, 0x7e, 0xb5, 0x92, 0x76, + 0xc9, 0x2b, 0x98, 0x59, 0x56, 0x97, 0x93, 0xb9, 0x38, 0x29, 0x47, 0x2f, + 0xbb, 0xd3, 0x17, 0xa8, 0xdb, 0x92, 0x8d, 0x77, 0xc2, 0xb9, 0xa3, 0x4c, + 0xa3, 0x1b, 0x6a, 0x3a, 0x91, 0x9f, 0x95, 0x81, 0x05, 0x04, 0x21, 0x03, + 0x0f, 0xf5, 0x0d, 0x2f, 0x97, 0x0e, 0x5e, 0x49, 0x1e, 0xe3, 0xd9, 0x55, + 0x8f, 0x58, 0x47, 0xb0, 0x20, 0x1c, 0xd3, 0xfa, 0x52, 0x4a, 0x7b, 0x04, + 0x91, 0x26, 0x83, 0x3a, 0xf6, 0x79, 0x29, 0xca, 0x1b, 0x3c, 0x4a, 0x14, + 0x5c, 0x66, 0x47, 0x47, 0xa1, 0x62, 0x7e, 0x40, 0xb3, 0xdd, 0x62, 0x47, + 0xbd, 0x4a, 0x65, 0x95, 0xcb, 0x57, 0x14, 0x05, 0x90, 0x76, 0x99, 0x47, + 0x4d, 0x2c, 0x63, 0x08, 0x00, 0x23, 0xe5, 0x98, 0x88, 0xa3, 0xe5, 0x73, + 0x64, 0x95, 0xc8, 0xa7, 0x5c, 0x8e, 0x3b, 0xfb, 0xb3, 0x57, 0x87, 0x62, + 0x53, 0x23, 0xa5, 0x83, 0xe3, 0x22, 0xda, 0x43, 0xab, 0xa9, 0x75, 0xb0, + 0xb4, 0x68, 0x73, 0x3c, 0x6a, 0xb5, 0xb9, 0xd6, 0x14, 0x8a, 0xc6, 0x12, + 0x45, 0xa9, 0xc1, 0xd2, 0xb8, 0x80, 0x42, 0x5c, 0xcd, 0xc0, 0xeb, 0x8b, + 0xe4, 0xd7, 0x63, 0x68, 0x8b, 0x70, 0x59, 0xd4, 0x04, 0xe0, 0xcc, 0x7a, + 0x60, 0xfc, 0x28, 0x81, 0xea, 0x38, 0xd1, 0x9a, 0xc9, 0x8a, 0x41, 0x03, + 0xeb, 0xd7, 0x42, 0x2c, 0x91, 0xaa, 0x1e, 0xe5, 0x16, 0xce, 0xe3, 0x98, + 0xb5, 0x94, 0x7a, 0xc4, 0x86, 0xa7, 0x88, 0xc5, 0x5c, 0x95, 0x63, 0x3f, + 0xff, 0xc3, 0x39, 0x23, 0xa0, 0x51, 0xf8, 0x83, 0xb6, 0x8e, 0x14, 0x4c, + 0x13, 0x92, 0x89, 0x6d, 0x06, 0x5d, 0x74, 0x84, 0x06, 0xc4, 0xab, 0x71, + 0xc0, 0x91, 0x02, 0x73, 0x0c, 0x6b, 0xaa, 0xec, 0xcb, 0x0d, 0x24, 0x9c, + 0xa0, 0x93, 0x5a, 0x9c, 0x93, 0x62, 0x33, 0xb2, 0x7f, 0x94, 0x1a, 0x4f, + 0x1d, 0xa2, 0x91, 0xb5, 0x6b, 0x02, 0x62, 0x9b, 0x2f, 0xf7, 0x09, 0x45, + 0x95, 0x96, 0x2a, 0xa9, 0xba, 0x41, 0x72, 0x57, 0x8f, 0x65, 0x07, 0x50, + 0xa1, 0x13, 0x05, 0xc7, 0xc3, 0x90, 0x83, 0x7a, 0x5c, 0x48, 0xa5, 0xb8, + 0x92, 0x96, 0x2c, 0x30, 0xa3, 0x8d, 0xcf, 0x19, 0x47, 0xe3, 0x43, 0xcd, + 0xe8, 0xe3, 0x14, 0xf5, 0x81, 0x6a, 0xe6, 0xe7, 0x01, 0x25, 0xc2, 0xbb, + 0x40, 0x0b, 0xc4, 0x26, 0x61, 0x79, 0x54, 0xaa, 0x44, 0x37, 0x79, 0x9e, + 0x6e, 0xba, 0x86, 0x05, 0x84, 0x37, 0x76, 0xa4, 0x75, 0x5a, 0x31, 0x3c, + 0x88, 0xf1, 0x76, 0xb9, 0x24, 0xc7, 0x1f, 0xc9, 0x93, 0xaf, 0xf9, 0x5a, + 0x0a, 0xa2, 0x66, 0x81, 0x31, 0x69, 0x54, 0x00, 0x64, 0xaf, 0x11, 0x9b, + 0xc2, 0x6a, 0x90, 0x74, 0xd3, 0xb6, 0xb8, 0x74, 0x11, 0x3a, 0x56, 0x04, + 0x4a, 0xe7, 0x6e, 0x64, 0x4a, 0x0a, 0xc7, 0xe4, 0x04, 0x5a, 0x89, 0x65, + 0xa4, 0xa1, 0x10, 0x30, 0x11, 0x86, 0x5d, 0xc1, 0x53, 0xd0, 0x08, 0x83, + 0x3c, 0x66, 0x5a, 0x5b, 0x4a, 0x49, 0x00, 0x68, 0xc0, 0x2e, 0x97, 0x9e, + 0x8a, 0x4b, 0x18, 0xa4, 0x3b, 0xa2, 0x83, 0xb8, 0xb1, 0x3a, 0x19, 0x05, + 0x85, 0xcc, 0x5d, 0x2f, 0x2b, 0xc9, 0x42, 0x3b, 0xc1, 0xc5, 0x1c, 0x0e, + 0xc6, 0x34, 0x4a, 0x8a, 0x67, 0x5d, 0x64, 0x68, 0x74, 0xe5, 0xd0, 0x1b, + 0x99, 0x4a, 0x52, 0x83, 0x42, 0x08, 0x87, 0x6a, 0x2f, 0x3b, 0x2c, 0x09, + 0xbb, 0x0b, 0x4d, 0x44, 0x01, 0x95, 0x62, 0x08, 0xd0, 0xdb, 0x52, 0x75, + 0x14, 0x63, 0x05, 0xcc, 0x85, 0x1b, 0xba, 0xc3, 0x1c, 0x40, 0xb5, 0xc5, + 0x94, 0x06, 0x25, 0x17, 0x15, 0xa5, 0x0c, 0x6b, 0xaa, 0xfd, 0x21, 0xa7, + 0xe8, 0x0c, 0x4a, 0xa9, 0x0b, 0xc6, 0x70, 0x8c, 0x49, 0x1c, 0x31, 0x61, + 0xbd, 0xb9, 0x55, 0x28, 0x91, 0x72, 0xe3, 0x24, 0x9f, 0x81, 0x40, 0x2f, + 0xf9, 0xc5, 0x3b, 0xbb, 0xf3, 0xa1, 0xc1, 0xc7, 0xa6, 0x78, 0xf5, 0x08, + 0xb9, 0x78, 0x9a, 0x29, 0x09, 0x43, 0xfe, 0xac, 0x2b, 0x09, 0x3a, 0x37, + 0x33, 0x87, 0x4d, 0xa8, 0xbb, 0x00, 0xe5, 0xf8, 0x1b, 0x3b, 0xf3, 0x0b, + 0x21, 0x6b, 0x91, 0x5d, 0x78, 0xa6, 0x89, 0xc7, 0x26, 0xcc, 0x96, 0x29, + 0xb0, 0xa8, 0x39, 0x87, 0x27, 0x5f, 0xf0, 0x65, 0x92, 0x3b, 0x70, 0x60, + 0xe9, 0x41, 0x61, 0xe4, 0x2a, 0x46, 0xd1, 0x94, 0x67, 0x9d, 0x67, 0x90, + 0xad, 0xa0, 0x47, 0x59, 0x40, 0x5d, 0x8d, 0x0a, 0x54, 0x42, 0xb1, 0x19, + 0x4f, 0x36, 0x49, 0x69, 0xec, 0x32, 0x1b, 0xa4, 0x90, 0x7a, 0xb4, 0x42, + 0x22, 0x5a, 0x53, 0x93, 0xa3, 0xcc, 0xcd, 0x02, 0x0e, 0x63, 0x18, 0x40, + 0x91, 0xd5, 0x3d, 0xb0, 0xa2, 0x1c, 0x55, 0xd6, 0x08, 0x6a, 0x45, 0x93, + 0x9d, 0xb4, 0xa4, 0xf2, 0x3c, 0x93, 0x82, 0xb2, 0xa9, 0x10, 0x68, 0x66, + 0x2b, 0x81, 0x8e, 0xb7, 0x92, 0x40, 0x13, 0x14, 0x1d, 0xf9, 0x49, 0x47, + 0x49, 0x2b, 0x2b, 0xa4, 0x77, 0x1d, 0x49, 0x0a, 0xc2, 0x10, 0xc2, 0x80, + 0x54, 0x45, 0xc4, 0x0d, 0x5b, 0x52, 0x64, 0x52, 0x34, 0x9f, 0xc9, 0x84, + 0xc6, 0x7b, 0x73, 0xd0, 0x13, 0xad, 0x38, 0x69, 0xc7, 0x57, 0x0c, 0x7a, + 0x16, 0x00, 0x30, 0x97, 0x9b, 0x6e, 0x0a, 0x29, 0x3b, 0x5c, 0xb2, 0x08, + 0x29, 0x24, 0x86, 0x52, 0x63, 0x76, 0x2f, 0xb1, 0x6b, 0x3f, 0x3b, 0xbe, + 0x48, 0x2b, 0x53, 0xda, 0x58, 0x5a, 0xb3, 0x25, 0xa3, 0xe6, 0xb1, 0x30, + 0xd7, 0xac, 0x33, 0x7e, 0xa7, 0xaf, 0xb6, 0x50, 0x2b, 0x8a, 0xb6, 0x1d, + 0xb9, 0xe7, 0xbc, 0xe3, 0x34, 0x37, 0x08, 0xfa, 0x62, 0xf9, 0xb8, 0xc3, + 0xc3, 0x06, 0xac, 0x48, 0x11, 0xa0, 0xb1, 0xb4, 0xbe, 0x85, 0x35, 0x77, + 0xd3, 0x38, 0x2f, 0x86, 0x53, 0x41, 0x92, 0xb2, 0x2e, 0xfc, 0x8b, 0x6a, + 0x41, 0x49, 0x86, 0x70, 0x06, 0x7b, 0x8d, 0x2a, 0x4a, 0x6b, 0x62, 0x76, + 0x10, 0x27, 0x2e, 0x3c, 0x64, 0x88, 0xfb, 0x19, 0x8e, 0xdd, 0x1c, 0x73, + 0x00, 0xe4, 0x6c, 0xa1, 0x8c, 0x65, 0x2f, 0x87, 0x99, 0xc2, 0xcb, 0x2d, + 0x74, 0x24, 0xc1, 0x54, 0x0c, 0x81, 0xa1, 0x24, 0x63, 0xb1, 0x68, 0x95, + 0xd6, 0x6b, 0x42, 0x68, 0xe0, 0x3e, 0xcd, 0xdc, 0x0e, 0xf6, 0x48, 0xc1, + 0x24, 0x34, 0xa8, 0xb8, 0xd8, 0xc5, 0x80, 0xac, 0xcd, 0x43, 0xbc, 0x97, + 0x90, 0x60, 0xcc, 0x14, 0xbc, 0x40, 0x51, 0x42, 0x66, 0x72, 0x3b, 0x7b, + 0x72, 0x84, 0xa5, 0xbd, 0xb6, 0xb6, 0xf1, 0x99, 0x4c, 0xd1, 0x93, 0x89, + 0x58, 0xb6, 0x11, 0x47, 0xfb, 0x18, 0x56, 0x96, 0x7e, 0xdb, 0x40, 0x6d, + 0x91, 0x37, 0x52, 0x5f, 0xfc, 0x19, 0x8d, 0x52, 0x0e, 0x87, 0x06, 0x18, + 0x54, 0x84, 0x70, 0x7c, 0xaa, 0x82, 0xb6, 0xa0, 0xa1, 0xd7, 0xc4, 0x0a, + 0xd0, 0xab, 0x81, 0x98, 0xf8, 0xaf, 0xd5, 0x30, 0xa3, 0x98, 0x04, 0x26, + 0x06, 0xec, 0xbd, 0xc3, 0x80, 0x98, 0x8b, 0x55, 0x4b, 0x1e, 0x2c, 0x0d, + 0xd4, 0x49, 0x0e, 0x3d, 0xc6, 0x31, 0x0f, 0x20, 0xc0, 0xd7, 0xb8, 0x66, + 0xa4, 0xd3, 0x43, 0x96, 0x04, 0xcf, 0x69, 0x53, 0x61, 0xa0, 0x00, 0x2a, + 0x9d, 0xe9, 0x58, 0x18, 0xe5, 0x0a, 0x1d, 0x61, 0x44, 0x72, 0xa4, 0x35, + 0x59, 0xa1, 0x67, 0xac, 0xa2, 0xc7, 0x5d, 0xeb, 0x0a, 0xe7, 0x08, 0x2b, + 0xd7, 0x63, 0x73, 0xca, 0x69, 0x7e, 0x53, 0x8b, 0x26, 0xb5, 0xe3, 0x6b, + 0xe6, 0x9c, 0x69, 0x05, 0xdb, 0x59, 0x02, 0xa6, 0x0e, 0xc3, 0xfa, 0x84, + 0x6d, 0x3a, 0x7a, 0xde, 0xab, 0x41, 0x57, 0x66, 0x17, 0x6f, 0x91, 0x31, + 0x6e, 0x3c, 0xce, 0x0a, 0x03, 0xb2, 0x9c, 0xba, 0x0a, 0x1e, 0x93, 0x38, + 0x72, 0x99, 0xb4, 0xdd, 0x9c, 0x62, 0x81, 0x62, 0x89, 0x44, 0x91, 0x4b, + 0x6c, 0x38, 0x80, 0x46, 0xeb, 0x51, 0x99, 0x61, 0x8f, 0xac, 0x90, 0x34, + 0xf3, 0x82, 0x83, 0xb1, 0x11, 0xcb, 0x99, 0x64, 0xcb, 0xd1, 0xa0, 0x71, + 0x73, 0x41, 0x40, 0xbe, 0x6b, 0x42, 0x56, 0xe2, 0x80, 0x41, 0x88, 0x67, + 0x35, 0x71, 0x11, 0xd4, 0x77, 0xa1, 0x43, 0x13, 0x50, 0x2c, 0x87, 0x19, + 0xb8, 0x58, 0x43, 0x85, 0x05, 0x0e, 0x27, 0x35, 0xae, 0x8e, 0x63, 0x71, + 0xef, 0x96, 0xc1, 0x35, 0xf5, 0xa8, 0x9f, 0xa4, 0x4d, 0x71, 0x70, 0x6e, + 0x15, 0x44, 0x1e, 0xd5, 0xc3, 0x16, 0x09, 0x8c, 0xb0, 0x0f, 0x37, 0x17, + 0x45, 0x86, 0x41, 0x8d, 0x34, 0x0b, 0xcc, 0xf8, 0x73, 0x1f, 0x33, 0xa2, + 0x20, 0x08, 0xc0, 0x59, 0xd7, 0x28, 0x9a, 0x42, 0xb4, 0x27, 0x8c, 0x54, + 0x99, 0xfb, 0x60, 0xaf, 0xfa, 0x58, 0xb3, 0x0b, 0x7d, 0x28, 0xd7, 0x2e, + 0xe0, 0x43, 0x3e, 0x8d, 0x6a, 0x9e, 0x5d, 0x86, 0x12, 0x27, 0x13, 0x99, + 0xda, 0x75, 0x22, 0xe8, 0x41, 0x87, 0x10, 0x43, 0x17, 0xa1, 0x3b, 0xc5, + 0x8d, 0xb2, 0xcb, 0x76, 0x80, 0x59, 0xce, 0xc5, 0xa0, 0xc8, 0x58, 0x6a, + 0x0f, 0xe0, 0x86, 0x7a, 0x69, 0x1f, 0x5e, 0xda, 0xa6, 0x5b, 0xc1, 0x9b, + 0x0a, 0x6c, 0x7f, 0x6e, 0x82, 0x47, 0xb4, 0x55, 0xad, 0xe3, 0x34, 0x18, + 0x4a, 0x28, 0x7f, 0xe8, 0xe6, 0xc9, 0xf6, 0x25, 0x16, 0x40, 0x0b, 0x86, + 0xd1, 0x52, 0x8b, 0xd1, 0x3c, 0x41, 0x9e, 0x80, 0xb8, 0x36, 0x7c, 0xaa, + 0xa7, 0xf6, 0x96, 0x1b, 0x72, 0x9f, 0xfa, 0x64, 0xa2, 0x44, 0xd0, 0xba, + 0x2e, 0xba, 0xac, 0x5c, 0x29, 0x1b, 0x0b, 0x74, 0x50, 0x73, 0x56, 0x9e, + 0x6a, 0x85, 0x31, 0x6b, 0x08, 0x23, 0xf7, 0x3c, 0x78, 0x2a, 0x59, 0x96, + 0x41, 0x16, 0xce, 0xed, 0xa9, 0x75, 0x8b, 0x80, 0x0c, 0xfd, 0xf7, 0x85, + 0x44, 0xa3, 0x12, 0xe8, 0x98, 0xa7, 0x01, 0x9a, 0x00, 0xc3, 0x6c, 0x0b, + 0x4e, 0x65, 0x76, 0xf3, 0x65, 0x73, 0x63, 0xdb, 0x44, 0x61, 0x50, 0x4c, + 0xab, 0x16, 0x2d, 0x52, 0x00, 0x73, 0xd5, 0x11, 0xab, 0x1e, 0x6a, 0x49, + 0xc7, 0xd2, 0xb1, 0x3a, 0xe6, 0x0b, 0x5d, 0xf2, 0x01, 0x4b, 0x27, 0x12, + 0xc8, 0x72, 0x31, 0x1f, 0x57, 0xcf, 0x19, 0x54, 0x8a, 0x42, 0xb6, 0x59, + 0x51, 0x78, 0x26, 0x25, 0xa6, 0x8a, 0x1d, 0xac, 0x5a, 0x70, 0x04, 0x9f, + 0xcc, 0xd9, 0x82, 0x2a, 0x97, 0x12, 0x59, 0xd2, 0x55, 0xf5, 0xba, 0x3d, + 0x1c, 0x66, 0xc1, 0x87, 0x58, 0xc7, 0x97, 0x10, 0x77, 0x71, 0x55, 0x9d, + 0xbc, 0x72, 0x9d, 0xfa, 0xe9, 0x55, 0x48, 0xe8, 0xcb, 0x95, 0xea, 0x18, + 0xe2, 0x94, 0x0f, 0xb2, 0xf1, 0x91, 0xa8, 0xe1, 0x91, 0xb5, 0x15, 0xb9, + 0xc7, 0xeb, 0x77, 0x5e, 0x0b, 0x4a, 0xa0, 0xe7, 0x45, 0xc7, 0x3a, 0x49, + 0xd0, 0x33, 0x89, 0xfb, 0xcc, 0x95, 0xac, 0x76, 0x9a, 0xf0, 0xba, 0x37, + 0x92, 0xb9, 0x2e, 0xc4, 0x2b, 0xb3, 0x20, 0xb5, 0x3b, 0xd1, 0x8c, 0xc1, + 0x5a, 0x86, 0xa9, 0x7d, 0xa4, 0xc8, 0xc9, 0xa3, 0x39, 0xf8, 0x49, 0x71, + 0x29, 0x75, 0xb0, 0x40, 0xd2, 0x83, 0x85, 0x3b, 0x75, 0x38, 0x31, 0xc4, + 0x3f, 0x13, 0xb8, 0x96, 0x55, 0x36, 0x3d, 0x86, 0x53, 0x5a, 0xe3, 0x8a, + 0x1b, 0x51, 0x00, 0x1f, 0xeb, 0x0c, 0xd1, 0xb0, 0x59, 0x38, 0xb2, 0x87, + 0x21, 0x72, 0x32, 0x81, 0x7b, 0x33, 0xa5, 0x90, 0x8c, 0xa9, 0x2c, 0xbe, + 0x68, 0x85, 0x16, 0xe2, 0x3b, 0x45, 0x2d, 0x23, 0x28, 0xed, 0x4a, 0x95, + 0x11, 0x2a, 0xcb, 0x8a, 0x18, 0xa8, 0xe6, 0x44, 0x0a, 0x16, 0xb2, 0xcc, + 0x64, 0x3a, 0x93, 0x91, 0xc3, 0x8c, 0x52, 0x1a, 0x73, 0x78, 0x3b, 0x63, + 0x1d, 0xd1, 0xa1, 0x5e, 0x48, 0x23, 0xcb, 0x6b, 0xb7, 0xac, 0xd1, 0x2e, + 0x25, 0x11, 0x32, 0x66, 0xc8, 0x73, 0xce, 0x57, 0x74, 0x45, 0x16, 0x05, + 0xd9, 0x49, 0xb7, 0x5c, 0x5a, 0x38, 0xd6, 0xba, 0x27, 0x5e, 0xe6, 0xce, + 0x84, 0x61, 0x9b, 0xd6, 0xcb, 0x10, 0xf4, 0x96, 0x42, 0x49, 0xf6, 0x0c, + 0x9c, 0x06, 0x2a, 0x7a, 0x52, 0xbc, 0x15, 0xa1, 0x88, 0x49, 0x4c, 0x13, + 0x2d, 0xbc, 0x36, 0xa6, 0x57, 0x36, 0x31, 0x17, 0xc8, 0x52, 0xe1, 0x13, + 0x73, 0x3c, 0xc2, 0x08, 0x08, 0x92, 0x98, 0xd5, 0xa3, 0x21, 0x19, 0x04, + 0xe7, 0xac, 0x1c, 0x50, 0x1a, 0x51, 0x72, 0x09, 0x85, 0xdd, 0x20, 0xcd, + 0x50, 0xbb, 0x07, 0xf3, 0xcc, 0x93, 0x34, 0x44, 0xa7, 0x92, 0x05, 0xc0, + 0x5f, 0xd2, 0x2d, 0x1a, 0x53, 0x3c, 0xfb, 0xb1, 0x1d, 0x75, 0x03, 0x9c, + 0x17, 0x82, 0x0f, 0x16, 0x7a, 0x84, 0x17, 0xd0, 0x29, 0xed, 0x1b, 0xa4, + 0x6f, 0x08, 0x6a, 0x4e, 0x39, 0xc9, 0xbe, 0xe7, 0x08, 0x4d, 0x71, 0xb6, + 0x36, 0xf3, 0xb6, 0x2a, 0xfa, 0xa6, 0x4f, 0x32, 0xa0, 0xea, 0x51, 0x9c, + 0xab, 0xb3, 0x51, 0x98, 0x67, 0x10, 0x7e, 0xa9, 0x82, 0x9a, 0x24, 0x58, + 0x00, 0xf2, 0xa8, 0xa7, 0x27, 0x8c, 0xf2, 0xe5, 0x20, 0x01, 0xc6, 0x3a, + 0xa8, 0xe8, 0x72, 0x96, 0x19, 0x66, 0xfd, 0x63, 0xff, 0x1c, 0x12, 0x84, + 0xa2, 0xec, 0x73, 0xe9, 0x1d, 0xd3, 0x88, 0xd5, 0x11, 0x2f, 0x94, 0xf0, + 0x77, 0x81, 0x87, 0xc1, 0x18, 0xa2, 0xb1, 0x97, 0xbe, 0xa6, 0x09, 0x1e, + 0x1c, 0x84, 0xec, 0x50, 0x6c, 0x2d, 0xba, 0x85, 0xf0, 0x6a, 0x3c, 0x88, + 0x3b, 0x35, 0x1b, 0x68, 0xc1, 0xf8, 0x8d, 0xd2, 0x2a, 0x5b, 0x8d, 0x71, + 0x5a, 0x31, 0xfa, 0x07, 0x6d, 0x75, 0xa0, 0xa5, 0xb9, 0xcf, 0x72, 0x98, + 0x5a, 0x33, 0x02, 0x2d, 0x52, 0xe1, 0xe6, 0xe4, 0x8f, 0x9b, 0xee, 0x0b, + 0xf8, 0xbf, 0xfb, 0x7c, 0xa1, 0x84, 0x57, 0x98, 0x15, 0xcf, 0x81, 0x98}, + // ciphertext + {0x87, 0x98, 0x71, 0xcf, 0xd2, 0x1b, 0xb5, 0x7f, 0x46, 0xb6, 0xe9, 0x6a, + 0xf4, 0xed, 0x88, 0xc8, 0xa5, 0xbc, 0xc3, 0x6d, 0xe1, 0x0d, 0x9e, 0xcf, + 0xf4, 0xc4, 0x3a, 0x37, 0x36, 0x60, 0x92, 0xec, 0xca, 0x62, 0x98, 0x37, + 0x9e, 0x97, 0xea, 0x3b, 0xda, 0x1c, 0x7e, 0x2e, 0xca, 0xd5, 0x60, 0xdc, + 0xd5, 0x6d, 0x1c, 0x9f, 0x1e, 0x58, 0x08, 0x88, 0x8d, 0x72, 0xe7, 0x8c, + 0xe3, 0x96, 0x8f, 0x7b, 0xcd, 0x88, 0x3b, 0x73, 0xaf, 0x50, 0x3a, 0x49, + 0x67, 0xed, 0x7b, 0xb2, 0x15, 0x8b, 0x74, 0xad, 0xea, 0xcb, 0x32, 0x71, + 0x20, 0x60, 0x3e, 0x8d, 0xc1, 0x21, 0xc5, 0x14, 0x01, 0xd6, 0x19, 0x71, + 0xed, 0x85, 0xbb, 0x1e, 0xae, 0x35, 0xa0, 0x58, 0x4c, 0x9f, 0xb7, 0xbe, + 0x6f, 0xbb, 0x35, 0x7f, 0x36, 0xbc, 0xbd, 0x14, 0xc3, 0x97, 0x9c, 0x75, + 0x9d, 0x4c, 0x05, 0xdc, 0xd1, 0x22, 0xce, 0x43, 0x10, 0x78, 0xd0, 0x67, + 0xa3, 0x71, 0xcb, 0x41, 0xb5, 0x4a, 0x42, 0xbf, 0xb9, 0xb7, 0x45, 0x56, + 0xe7, 0x78, 0xb4, 0xbe, 0xbf, 0xed, 0xcf, 0x86, 0x85, 0xd8, 0x48, 0xee, + 0x1a, 0x22, 0xea, 0x75, 0x8c, 0xad, 0x40, 0x2e, 0x1f, 0xd8, 0xe3, 0x3d, + 0x8f, 0x37, 0x26, 0x84, 0x90, 0x06, 0x11, 0x3f, 0x08, 0xb3, 0x3a, 0x51, + 0xbe, 0x65, 0xc9, 0x09, 0x4e, 0xa3, 0xd1, 0xfb, 0x52, 0xe1, 0xe7, 0x1b, + 0xab, 0xa0, 0x47, 0xf0, 0xa1, 0x14, 0xdc, 0x50, 0x62, 0x66, 0x89, 0x44, + 0x0f, 0x83, 0x03, 0xbf, 0x1a, 0x9c, 0xf1, 0xde, 0xd1, 0xc6, 0x45, 0x14, + 0x92, 0xd1, 0x1a, 0x76, 0xf6, 0xbd, 0x43, 0x84, 0x77, 0x96, 0x0a, 0xb7, + 0xff, 0x2c, 0xc0, 0x67, 0x3b, 0x38, 0xba, 0x04, 0xc6, 0x99, 0x73, 0xe8, + 0x81, 0x03, 0x0c, 0xc4, 0x1d, 0xfd, 0x99, 0x4c, 0xff, 0xc4, 0xca, 0x86, + 0xe0, 0xe7, 0xce, 0x78, 0x17, 0xeb, 0x10, 0x0d, 0x26, 0x37, 0xba, 0x1d, + 0xc4, 0xd5, 0x45, 0x31, 0xd2, 0xad, 0x98, 0x95, 0x19, 0x40, 0x1d, 0x7f, + 0x77, 0x6b, 0x2e, 0xb5, 0xf1, 0x64, 0x30, 0xf3, 0x61, 0xd9, 0x3d, 0x91, + 0xe1, 0xd7, 0x0f, 0x37, 0x6e, 0x1a, 0xe3, 0x19, 0xbf, 0xab, 0xcd, 0x57, + 0x85, 0x48, 0x54, 0x62, 0xf3, 0x9e, 0xa6, 0x5d, 0x0c, 0x49, 0xe8, 0x56, + 0xcd, 0x7a, 0x1f, 0xa3, 0xa6, 0x14, 0x3c, 0x38, 0xdd, 0xf4, 0x77, 0x54, + 0x71, 0x70, 0x85, 0x04, 0x0c, 0x1f, 0x64, 0xf6, 0xc3, 0x83, 0x10, 0x54, + 0x9e, 0x64, 0x94, 0x4b, 0x50, 0x00, 0x70, 0xa4, 0x78, 0xbb, 0xe6, 0x22, + 0x8b, 0x7a, 0xd2, 0x82, 0xd4, 0x08, 0xc5, 0xc7, 0x59, 0xde, 0xc7, 0xce, + 0x78, 0xfe, 0x2f, 0xfd, 0x4b, 0x72, 0x13, 0x82, 0x46, 0x5f, 0xf1, 0xc0, + 0x33, 0xc7, 0x10, 0x31, 0x43, 0x92, 0x2e, 0xc0, 0x0f, 0xd7, 0xd2, 0xa6, + 0x5d, 0xda, 0x8a, 0x1d, 0xc7, 0x7e, 0x7f, 0xbc, 0x3d, 0xbc, 0x23, 0x66, + 0x73, 0x40, 0x85, 0xbc, 0xa8, 0x03, 0x05, 0xb6, 0xbf, 0xec, 0x5d, 0x43, + 0x9e, 0x45, 0x17, 0x77, 0x8e, 0xad, 0x54, 0x16, 0xa7, 0x8b, 0x85, 0x28, + 0x16, 0xcb, 0xa2, 0x45, 0xec, 0x9b, 0xf5, 0x86, 0x41, 0xbf, 0xd2, 0x9a, + 0x9c, 0x54, 0xfd, 0x23, 0xa3, 0x7f, 0xf3, 0xf7, 0x67, 0xf6, 0xb6, 0xdc, + 0x4a, 0x9a, 0x63, 0xf3, 0x0f, 0x9b, 0x19, 0x8c, 0xf8, 0xbe, 0xad, 0x29, + 0xbf, 0x31, 0x9c, 0x01, 0x09, 0x6d, 0xc5, 0x06, 0xea, 0x53, 0xc2, 0x1b, + 0x5e, 0x86, 0x88, 0xbc, 0x4c, 0x5f, 0xc7, 0x5d, 0x5d, 0x3a, 0xa3, 0xac, + 0x29, 0xc9, 0x8d, 0x5c, 0x56, 0xea, 0x8c, 0x31, 0xe9, 0x0a, 0x74, 0x6c, + 0x6c, 0xcc, 0xf7, 0x29, 0xfa, 0x8d, 0x65, 0x37, 0x6d, 0x53, 0xa4, 0x69, + 0xd1, 0xd2, 0x79, 0x86, 0x12, 0x56, 0xc9, 0x62, 0x33, 0xe4, 0x74, 0x13, + 0xf3, 0xfa, 0xc2, 0x63, 0xaf, 0x54, 0x2f, 0xf6, 0xca, 0x0b, 0x82, 0xda, + 0xa2, 0xfb, 0x93, 0x62, 0x69, 0x2e, 0x8b, 0xf7, 0xc1, 0x35, 0xeb, 0x07, + 0x09, 0x02, 0x2b, 0x58, 0x51, 0x3b, 0x93, 0xae, 0x33, 0xf2, 0x54, 0xd7, + 0xd1, 0x96, 0x67, 0xdc, 0xa9, 0x7f, 0x3f, 0x01, 0x5e, 0xe2, 0xd9, 0x6e, + 0x64, 0xc8, 0x9d, 0x2f, 0x45, 0x43, 0x2d, 0xde, 0x07, 0x08, 0x53, 0x30, + 0x96, 0xbb, 0x6e, 0xc2, 0xe1, 0xc8, 0xf0, 0x63, 0x76, 0xa8, 0x6f, 0x8d, + 0xa1, 0x21, 0x35, 0x1d, 0xab, 0x44, 0xb3, 0xb2, 0x26, 0x73, 0x15, 0x20, + 0xf1, 0xa7, 0xe7, 0x09, 0x75, 0x5f, 0x3b, 0x53, 0x1c, 0xda, 0x07, 0x2b, + 0x11, 0x0f, 0xab, 0x7b, 0x1d, 0x14, 0x8c, 0x13, 0x11, 0x3b, 0xd0, 0x45, + 0x7a, 0xd7, 0x7c, 0xd7, 0xfa, 0xdf, 0x74, 0xa4, 0x37, 0xa3, 0x93, 0xaf, + 0xa3, 0xc9, 0x3a, 0xa6, 0x6e, 0x0a, 0x0a, 0x76, 0xc0, 0x01, 0x9c, 0x0f, + 0xce, 0xaa, 0xb8, 0x56, 0x41, 0xec, 0x7a, 0xa0, 0x5a, 0x84, 0x7a, 0xfb, + 0xe7, 0x4f, 0x01, 0xdc, 0x68, 0x6d, 0x48, 0x29, 0x1e, 0x69, 0xf9, 0x8d, + 0xe6, 0xa1, 0xea, 0xf5, 0x6f, 0x34, 0x52, 0xc4, 0xf7, 0x0d, 0x62, 0x29, + 0x8c, 0xc2, 0x34, 0xc5, 0xf7, 0x00, 0xbb, 0xe1, 0x90, 0x95, 0x1d, 0xad, + 0xa8, 0xdb, 0xf7, 0x25, 0xcb, 0x44, 0xf5, 0x03, 0x94, 0xa0, 0xd3, 0x71, + 0x77, 0x78, 0xe0, 0xdc, 0xe7, 0xfd, 0x72, 0xfe, 0x26, 0x68, 0x52, 0x36, + 0xd0, 0x4f, 0xc8, 0xe9, 0xee, 0xb0, 0xea, 0x90, 0x36, 0x5d, 0x18, 0x1a, + 0xe9, 0x0b, 0x7d, 0x0a, 0x75, 0x60, 0xdd, 0x0b, 0x00, 0xe1, 0xbd, 0x55, + 0xf9, 0xf4, 0xfc, 0xef, 0x3a, 0xb3, 0x93, 0xa2, 0xae, 0x2a, 0x13, 0x34, + 0x55, 0x88, 0xca, 0x6c, 0xba, 0xf9, 0xa3, 0x0f, 0xa5, 0x8e, 0x37, 0x25, + 0x84, 0x4f, 0x38, 0x98, 0x0d, 0x68, 0x9d, 0x14, 0x95, 0xd1, 0x59, 0xed, + 0x5a, 0x9c, 0x4f, 0x55, 0x7a, 0x72, 0x8e, 0x01, 0x6b, 0x87, 0x81, 0x6f, + 0x40, 0xcd, 0x22, 0x78, 0x97, 0x84, 0x85, 0x9f, 0x1f, 0xdc, 0x39, 0xfa, + 0x30, 0xba, 0x72, 0xd2, 0x5b, 0x1a, 0x14, 0xe7, 0x4a, 0xe3, 0x5f, 0x6d, + 0x52, 0xf0, 0x57, 0x45, 0xe9, 0x2e, 0xf6, 0x4e, 0xd9, 0x80, 0xf3, 0x65, + 0x54, 0x73, 0xb5, 0xce, 0x84, 0x49, 0x1e, 0x79, 0x1a, 0x94, 0x90, 0xcd, + 0x99, 0x54, 0x93, 0xe9, 0xe7, 0x9d, 0x9f, 0x2e, 0xad, 0x20, 0xfd, 0x20, + 0x4e, 0xb6, 0x72, 0x18, 0x78, 0x61, 0x61, 0xd5, 0xf7, 0xe5, 0x09, 0x05, + 0x23, 0xfa, 0x86, 0x18, 0x17, 0x37, 0x7f, 0x01, 0x3a, 0x13, 0x1a, 0x51, + 0xb3, 0xdb, 0x0f, 0xcc, 0x6a, 0x84, 0x5d, 0x34, 0x0e, 0x86, 0xc7, 0xb6, + 0x86, 0xa4, 0x7e, 0xe7, 0x50, 0x3a, 0x55, 0x2e, 0x0f, 0xb0, 0x10, 0x0a, + 0x6c, 0x3d, 0xa1, 0xcf, 0xed, 0x6f, 0x8e, 0xae, 0x04, 0xa6, 0x7c, 0x47, + 0x94, 0x15, 0x64, 0x95, 0x60, 0x28, 0x9c, 0x20, 0x10, 0xb2, 0x23, 0xa1, + 0x07, 0xa2, 0x7d, 0xa2, 0xf0, 0x54, 0x6e, 0xfd, 0xe3, 0x78, 0xfd, 0x55, + 0x03, 0x91, 0x20, 0x34, 0xf6, 0xab, 0xdb, 0xbc, 0x96, 0x6a, 0x47, 0xf2, + 0x8a, 0x9f, 0xfb, 0xe7, 0xff, 0xdc, 0xdb, 0x2e, 0xdf, 0xa1, 0x9f, 0x46, + 0x39, 0xe2, 0xff, 0x9c, 0x1f, 0x4e, 0x44, 0x8f, 0x94, 0xa8, 0xa2, 0x46, + 0xaa, 0xa1, 0x7e, 0xa9, 0xe6, 0x41, 0xe1, 0x94, 0xf5, 0x3a, 0xc2, 0x4e, + 0xe1, 0x25, 0xdd, 0xf3, 0x4c, 0x75, 0x9d, 0xf5, 0xb0, 0x57, 0x42, 0x35, + 0x51, 0xd3, 0xcf, 0xb9, 0xa1, 0xd7, 0xb8, 0x03, 0x30, 0x6e, 0x11, 0x87, + 0xcd, 0x50, 0xe8, 0x1b, 0x1c, 0xc4, 0xb2, 0xaa, 0xd0, 0xd7, 0x53, 0xcc, + 0x63, 0x19, 0xa5, 0x3d, 0xa3, 0x7a, 0xfd, 0x47, 0x06, 0x6a, 0xa8, 0xbd, + 0xe9, 0x00, 0x63, 0x2f, 0xd7, 0xaa, 0xb9, 0xd9, 0x3b, 0x67, 0xa6, 0x58, + 0x9d, 0xdd, 0x14, 0xfa, 0x7b, 0x04, 0x8c, 0xf5, 0x02, 0x2e, 0xa5, 0x15, + 0x16, 0xf9, 0xd2, 0x58, 0x67, 0x1b, 0xf5, 0x78, 0xd2, 0xe2, 0xec, 0xbe, + 0x5d, 0x46, 0xbc, 0xc1, 0x65, 0xc1, 0x9a, 0xcd, 0x3d, 0x17, 0xe1, 0xc9, + 0x23, 0xde, 0x1f, 0x92, 0x6e, 0x56, 0xdd, 0x43, 0x3d, 0x86, 0x1c, 0xa6, + 0x4d, 0x1f, 0x9f, 0x62, 0x25, 0x95, 0xc4, 0x2d, 0xa1, 0xa9, 0x88, 0x01, + 0x92, 0x12, 0x53, 0x08, 0xb9, 0xa0, 0x18, 0x2c, 0x06, 0x8f, 0x21, 0x8b, + 0x8e, 0x26, 0x6e, 0xec, 0x3a, 0xa5, 0x06, 0xd5, 0xd8, 0x57, 0x82, 0xd6, + 0x39, 0x4a, 0x9a, 0x40, 0xf1, 0x0c, 0x3f, 0x55, 0xb5, 0xbe, 0x3e, 0x13, + 0xc6, 0xfb, 0x0b, 0x7f, 0x5b, 0xab, 0xd0, 0x78, 0x63, 0x2c, 0x76, 0x89, + 0xf4, 0xa4, 0x9a, 0x52, 0x3c, 0xd1, 0xb5, 0x79, 0x2f, 0x0d, 0x5b, 0xff, + 0x8c, 0xb4, 0xab, 0xf5, 0x59, 0x22, 0x07, 0x88, 0xe5, 0x60, 0xdb, 0xba, + 0x3c, 0x30, 0x60, 0x6e, 0xad, 0x7f, 0x11, 0xb7, 0x7b, 0x5c, 0x59, 0x6c, + 0xaa, 0xee, 0xb2, 0x8e, 0xee, 0xb3, 0xc6, 0xb9, 0x2b, 0x07, 0x7c, 0x76, + 0x88, 0x22, 0x9b, 0x43, 0x94, 0xf7, 0xf2, 0x97, 0xf1, 0xd0, 0x84, 0xbb, + 0x20, 0xd6, 0x00, 0x07, 0x57, 0x27, 0xbc, 0xb4, 0x17, 0x41, 0x58, 0x0f, + 0x6f, 0xfb, 0x83, 0x2c, 0xac, 0x1a, 0x91, 0x55, 0x8f, 0xa6, 0xbe, 0x5b, + 0xc3, 0x00, 0x52, 0xaf, 0xaa, 0xb0, 0x03, 0x99, 0xb6, 0x78, 0x97, 0xf8, + 0x20, 0x8f, 0x3f, 0xd4, 0xd7, 0xd8, 0xcc, 0xde, 0xe6, 0x52, 0x61, 0x2b, + 0xfc, 0x8c, 0xaf, 0x4d, 0x8c, 0x9d, 0x9d, 0xa3, 0x52, 0x05, 0xf5, 0x99, + 0x31, 0x7b, 0x35, 0xe5, 0xbc, 0x41, 0x07, 0x0f, 0x4e, 0x22, 0x8a, 0xa1, + 0xc3, 0x29, 0x4e, 0xc7, 0xa2, 0x91, 0x1e, 0x02, 0x19, 0x0f, 0x2b, 0x66, + 0x97, 0xad, 0x05, 0xd7, 0x12, 0x08, 0x79, 0x40, 0x03, 0xb4, 0x14, 0xc9, + 0x6f, 0x67, 0x13, 0x50, 0xc9, 0xdb, 0x52, 0x84, 0x2f, 0x20, 0xe3, 0x63, + 0x72, 0x64, 0x6f, 0x58, 0xb0, 0x2e, 0x05, 0x17, 0x03, 0x51, 0x57, 0xe1, + 0xc3, 0x89, 0xea, 0xa2, 0x80, 0x1a, 0xa8, 0xf3, 0xb7, 0x49, 0xfe, 0x6c, + 0x98, 0x05, 0x1e, 0xc2, 0x18, 0x24, 0x70, 0x71, 0xed, 0xe5, 0x90, 0x3c, + 0x55, 0x62, 0x74, 0x24, 0xbd, 0x4a, 0xd5, 0x46, 0x13, 0x5b, 0xa7, 0xbd, + 0x01, 0x3a, 0xa3, 0x8e, 0xa8, 0x49, 0x0c, 0x0c, 0xe8, 0x49, 0xcb, 0x2c, + 0x5f, 0x38, 0xf1, 0x13, 0x06, 0x89, 0x4d, 0x64, 0x41, 0x9e, 0x1b, 0x3d, + 0xc4, 0xe2, 0xb6, 0xb2, 0x67, 0xbf, 0x10, 0x87, 0x52, 0x24, 0xd7, 0xea, + 0xa7, 0xf0, 0x1d, 0xb4, 0xa0, 0x2c, 0xca, 0x95, 0x32, 0x82, 0x17, 0x8c, + 0xb1, 0xfa, 0xdd, 0xbb, 0x88, 0x98, 0x69, 0xbd, 0x5c, 0xa9, 0xa1, 0x88, + 0xbe, 0x9c, 0x01, 0x30, 0x35, 0x45, 0xe1, 0x1a, 0xfc, 0x47, 0xb3, 0x04, + 0xb1, 0x75, 0xfa, 0xb7, 0x6a, 0xec, 0x50, 0x91, 0xe6, 0xc6, 0xf5, 0xc6, + 0x5b, 0xc9, 0x0b, 0x9d, 0xc7, 0xc6, 0xf8, 0x53, 0x28, 0x5c, 0xe4, 0x36, + 0xc2, 0xac, 0x70, 0x39, 0x28, 0xd4, 0x1b, 0x08, 0xbf, 0xc7, 0xb8, 0x9f, + 0xc4, 0xef, 0x2c, 0x39, 0x57, 0x08, 0x77, 0xa7, 0xd7, 0xe2, 0x5e, 0x76, + 0x2c, 0xcc, 0xd0, 0x9e, 0x79, 0xdd, 0x16, 0xeb, 0xbd, 0x1a, 0x50, 0xc9, + 0x02, 0x19, 0x31, 0xf9, 0xd8, 0x41, 0x53, 0x08, 0x0e, 0x8e, 0xfc, 0xa7, + 0xe2, 0xec, 0x9a, 0x8e, 0x0c, 0xa7, 0x34, 0x4d, 0xb6, 0xea, 0x1c, 0x77, + 0x6f, 0x99, 0x6f, 0x65, 0xc2, 0x32, 0xf0, 0xe6, 0xc0, 0xf0, 0xd6, 0x12, + 0xe4, 0x0c, 0x38, 0x73, 0x45, 0x63, 0x85, 0x28, 0x20, 0x80, 0xd6, 0xf4, + 0xde, 0xfa, 0xe7, 0xb8, 0x2c, 0x75, 0xb6, 0x82, 0x6a, 0x8a, 0x9a, 0xa6, + 0x8e, 0x19, 0x83, 0xf7, 0xd9, 0xfe, 0xa5, 0xcf}, + // secret + {0xbd, 0xef, 0x9a, 0x36, 0xc2, 0x79, 0x9e, 0x4d, 0x58, 0xaf, 0xdc, + 0x05, 0x09, 0xc1, 0x50, 0x23, 0x39, 0x8b, 0xee, 0x0d, 0x27, 0xc1, + 0xd3, 0xc9, 0x82, 0x94, 0x75, 0x04, 0x1b, 0x52, 0xfa, 0x1d}, + true}, + // tcID: 104 + {104, + params_ml_kem1024_test_mode, + // privateKey + {0x1a, 0xc5, 0x3f, 0x5f, 0x73, 0x19, 0xc8, 0x33, 0x4f, 0xbf, 0x79, 0x1a, + 0xe9, 0xe2, 0x1f, 0x33, 0x9c, 0x13, 0x04, 0xa9, 0xaa, 0xa8, 0x70, 0x91, + 0x41, 0xbb, 0x7e, 0x16, 0x03, 0xcf, 0xb4, 0xa4, 0xc0, 0x98, 0x34, 0x52, + 0x3c, 0xa1, 0x2e, 0x5a, 0x27, 0x97, 0xb1, 0x94, 0x06, 0x91, 0x6b, 0x57, + 0xd2, 0x30, 0x9b, 0xdb, 0x02, 0x3c, 0x1f, 0x65, 0x0c, 0xa4, 0xca, 0x97, + 0x6e, 0x3b, 0x09, 0xf4, 0x84, 0x8d, 0x2d, 0x71, 0x0b, 0x44, 0xeb, 0x64, + 0x61, 0x53, 0x89, 0x8a, 0x08, 0x9b, 0xc1, 0x68, 0x23, 0x8d, 0x6b, 0x4e, + 0x3f, 0xa7, 0x3f, 0xda, 0x08, 0x8d, 0xb3, 0xb9, 0xa8, 0xcc, 0xc3, 0x9a, + 0x5c, 0xaa, 0x64, 0x6d, 0xc9, 0x7f, 0xa5, 0xdc, 0xc2, 0xa8, 0xc3, 0x27, + 0x6b, 0x50, 0x8f, 0xe5, 0xfb, 0x99, 0x31, 0xd3, 0xb6, 0xfa, 0xf3, 0x55, + 0x69, 0x54, 0x35, 0x92, 0xab, 0x3a, 0xee, 0xeb, 0x61, 0x4a, 0x9a, 0x4a, + 0xd6, 0xb6, 0x91, 0xf2, 0x25, 0x30, 0xb3, 0x66, 0x0c, 0x1d, 0xca, 0x99, + 0xeb, 0xcb, 0x49, 0x8b, 0xfc, 0x71, 0x19, 0xa3, 0x65, 0x2e, 0x98, 0x36, + 0xd7, 0x44, 0x0e, 0x49, 0x65, 0x91, 0xc8, 0xf7, 0xbf, 0xd1, 0x96, 0x64, + 0x3d, 0xac, 0x4d, 0xf0, 0xf2, 0x47, 0xe9, 0xaa, 0x49, 0x2d, 0x23, 0xbc, + 0xf8, 0xea, 0x27, 0x74, 0xe5, 0x52, 0x70, 0x91, 0x9f, 0x9a, 0x15, 0x24, + 0x2d, 0x27, 0x62, 0xa4, 0x88, 0x2f, 0x05, 0x6b, 0xc5, 0x04, 0x6c, 0x26, + 0x5b, 0xab, 0x10, 0x31, 0xb2, 0x00, 0x4b, 0x51, 0x4f, 0xbb, 0x38, 0x9e, + 0x16, 0xc7, 0xcf, 0x6f, 0xf0, 0x3e, 0x41, 0xb8, 0x67, 0x4d, 0xd4, 0x84, + 0x7c, 0x56, 0xb5, 0xd1, 0xe9, 0x13, 0x2e, 0x78, 0xbd, 0xeb, 0x84, 0xb6, + 0x56, 0xa9, 0x54, 0x4d, 0x1b, 0x96, 0x5f, 0xb7, 0x39, 0xeb, 0x46, 0x78, + 0x10, 0x73, 0x6f, 0x3a, 0x51, 0x9f, 0xcd, 0xa8, 0x41, 0x1b, 0xc5, 0x80, + 0x5f, 0xf8, 0x93, 0x50, 0xc5, 0x6e, 0x97, 0xba, 0x5b, 0x2f, 0x31, 0x24, + 0x56, 0x70, 0x87, 0xd9, 0xc7, 0xc2, 0xc0, 0x0c, 0x71, 0x89, 0x84, 0x45, + 0xfd, 0x15, 0x32, 0x1a, 0xa7, 0x34, 0x1a, 0xe7, 0x06, 0x23, 0x68, 0x82, + 0x37, 0x93, 0x17, 0x17, 0xaa, 0xa4, 0x43, 0x44, 0x1e, 0xf7, 0xa0, 0x1d, + 0xb4, 0xe2, 0x90, 0x55, 0xc7, 0x3d, 0x8b, 0x95, 0x26, 0xc2, 0x20, 0x4b, + 0x20, 0x30, 0x9e, 0x7c, 0xec, 0x50, 0x7c, 0x70, 0xa1, 0x5c, 0x6b, 0x02, + 0x86, 0x28, 0xa7, 0x97, 0x35, 0x47, 0x9f, 0x5b, 0x25, 0xaa, 0x08, 0xaf, + 0x98, 0x61, 0x5a, 0x0f, 0x46, 0x37, 0xa1, 0x09, 0xb4, 0xf3, 0xc1, 0x9f, + 0xf0, 0xc1, 0x35, 0xfb, 0x17, 0x21, 0x17, 0x39, 0x7f, 0xaa, 0x03, 0xca, + 0x30, 0x58, 0xcf, 0x3f, 0xf5, 0x2a, 0x0c, 0x98, 0x59, 0x80, 0x71, 0x31, + 0xfc, 0x27, 0xc7, 0x87, 0xc3, 0x1a, 0xc3, 0x8a, 0xcb, 0x2f, 0x47, 0x00, + 0x75, 0xc9, 0x74, 0x64, 0x74, 0x81, 0x6b, 0x8c, 0x55, 0x7e, 0xb1, 0x93, + 0x7d, 0xea, 0xb8, 0xd1, 0x27, 0x5f, 0xb8, 0x62, 0x32, 0xcf, 0x83, 0x7c, + 0xe7, 0xa3, 0x62, 0x74, 0x43, 0x5b, 0x90, 0x07, 0x0b, 0xe5, 0x3a, 0x02, + 0xb1, 0x65, 0x8e, 0x97, 0xe6, 0x6d, 0x14, 0x81, 0x91, 0xaf, 0x60, 0x50, + 0x1f, 0x1c, 0x16, 0x8d, 0x31, 0xa4, 0x56, 0x82, 0x29, 0x51, 0x28, 0x9b, + 0xec, 0x79, 0x5f, 0x94, 0x97, 0x42, 0x8f, 0x55, 0x52, 0xf7, 0xf9, 0x5b, + 0x83, 0xcb, 0x68, 0x71, 0x49, 0x23, 0x7b, 0x05, 0x42, 0xa8, 0xa4, 0x45, + 0x14, 0x6b, 0x15, 0x5d, 0xc0, 0x62, 0xb9, 0x84, 0x2a, 0x0a, 0x44, 0xbf, + 0xb3, 0x30, 0x4d, 0x77, 0xbc, 0x14, 0x5f, 0x0b, 0x6b, 0x52, 0x57, 0x6f, + 0xc7, 0x5a, 0xa4, 0x6e, 0xb6, 0x0e, 0x39, 0x59, 0x3b, 0xae, 0x35, 0x23, + 0x4b, 0xc9, 0x1d, 0x80, 0xf2, 0x48, 0x8c, 0x70, 0x67, 0x0b, 0xd0, 0x01, + 0xa6, 0x11, 0x39, 0x92, 0x58, 0xcb, 0xfd, 0x24, 0x7f, 0x6c, 0xaa, 0xb5, + 0x06, 0xab, 0x8d, 0x64, 0xeb, 0x54, 0xc7, 0x23, 0x0f, 0x86, 0xd8, 0x1f, + 0x25, 0x77, 0x1d, 0x61, 0xf3, 0x53, 0x31, 0xa4, 0x21, 0xc0, 0x15, 0x10, + 0xa4, 0x37, 0xa2, 0x2f, 0xe6, 0x42, 0xdf, 0x9c, 0xcc, 0x7b, 0x31, 0xc7, + 0xa4, 0x19, 0x65, 0x76, 0x05, 0x9a, 0x83, 0xab, 0x9c, 0x32, 0x53, 0x8b, + 0x17, 0x1a, 0x74, 0x90, 0x01, 0x11, 0x50, 0xe1, 0xca, 0x62, 0x8b, 0x1c, + 0xe8, 0x7a, 0xc4, 0xc9, 0x9b, 0x7a, 0xdd, 0x07, 0x3d, 0xdd, 0x15, 0x17, + 0x00, 0x4d, 0x77, 0xba, 0x45, 0x63, 0xd5, 0x5a, 0xa1, 0x68, 0xf0, 0x67, + 0xc1, 0xea, 0x47, 0xb6, 0x73, 0xa7, 0x5f, 0xfb, 0x66, 0x4e, 0x44, 0x3c, + 0x01, 0xc1, 0xce, 0x34, 0x0b, 0x47, 0x56, 0x54, 0x9c, 0x84, 0x23, 0x24, + 0x97, 0x27, 0x9a, 0x52, 0xa4, 0x2d, 0x53, 0xb5, 0xae, 0x6f, 0x37, 0x7e, + 0x06, 0x3c, 0x2e, 0xfe, 0x68, 0x34, 0x47, 0x67, 0x39, 0xd8, 0x97, 0x2f, + 0x74, 0xa9, 0xb4, 0xa2, 0x3a, 0x8b, 0x86, 0x42, 0x11, 0xa8, 0x3c, 0x48, + 0x37, 0x80, 0x38, 0xd5, 0x95, 0x4a, 0xb6, 0xd6, 0x4b, 0x71, 0x91, 0x26, + 0x5f, 0x0b, 0x04, 0x91, 0x0a, 0x74, 0xc6, 0x8a, 0x4a, 0x03, 0xec, 0x97, + 0x68, 0x21, 0x1a, 0x0f, 0xa5, 0x14, 0x7e, 0x20, 0xcd, 0x4c, 0xa9, 0x74, + 0x03, 0xb6, 0x34, 0x14, 0x2a, 0x62, 0x86, 0x71, 0x53, 0x42, 0x2c, 0xaf, + 0x99, 0x6b, 0x96, 0x7a, 0x6b, 0x3c, 0xcb, 0xf6, 0x46, 0xd4, 0xb2, 0x9e, + 0xa5, 0x5c, 0x1b, 0x84, 0x5b, 0x27, 0xde, 0xdc, 0x65, 0x24, 0x0b, 0x84, + 0x6d, 0xba, 0x68, 0xb3, 0x6c, 0x1c, 0x92, 0x95, 0x58, 0x7c, 0x7c, 0x7d, + 0xea, 0x86, 0x10, 0xf9, 0x04, 0xaf, 0xcc, 0x85, 0x98, 0x8a, 0x22, 0x30, + 0x2c, 0xc1, 0xb4, 0x95, 0x71, 0x7c, 0x5e, 0x66, 0x1c, 0xd8, 0x47, 0x8e, + 0x05, 0x27, 0x1c, 0x6a, 0x50, 0x0d, 0xd0, 0x54, 0x3f, 0x8a, 0xf1, 0x54, + 0x1c, 0xe2, 0x5e, 0x64, 0x8b, 0x23, 0xfd, 0xd9, 0xcd, 0x44, 0x17, 0x4e, + 0x53, 0x85, 0x83, 0x71, 0xc4, 0xa8, 0xe6, 0x70, 0x5e, 0x39, 0x44, 0x11, + 0x48, 0x23, 0x09, 0x89, 0xc4, 0x0d, 0x03, 0x4b, 0x37, 0x64, 0xa0, 0x54, + 0xa6, 0x2a, 0x50, 0xcd, 0x29, 0x65, 0xa3, 0x74, 0x02, 0x64, 0xc0, 0xb9, + 0xfd, 0x47, 0xb4, 0x4b, 0xa0, 0x22, 0x4c, 0xc4, 0x4e, 0xe7, 0xb4, 0x25, + 0x7d, 0x9a, 0x04, 0xf5, 0xb0, 0x14, 0x99, 0x60, 0x6b, 0xc2, 0x56, 0x6f, + 0x69, 0x2b, 0xb2, 0x59, 0x29, 0x50, 0x04, 0x96, 0x07, 0x00, 0x9a, 0x77, + 0x34, 0x71, 0x0e, 0x15, 0x43, 0x7b, 0x7e, 0x3a, 0x06, 0x58, 0xd9, 0x28, + 0x86, 0x81, 0x12, 0xc1, 0xa6, 0x37, 0xfd, 0xd4, 0x08, 0x9d, 0x5b, 0xbc, + 0xb4, 0x60, 0xb9, 0x39, 0x96, 0x0d, 0xf0, 0x69, 0x50, 0xb9, 0x05, 0xca, + 0x79, 0xd3, 0x20, 0x00, 0x21, 0x53, 0x3f, 0x2b, 0x1e, 0x65, 0xf3, 0xb3, + 0x81, 0xf5, 0x12, 0x84, 0x7c, 0x1b, 0x24, 0xfb, 0xc1, 0x41, 0x75, 0x8e, + 0xe7, 0x2a, 0x35, 0xba, 0xeb, 0x06, 0x48, 0xf0, 0x07, 0x98, 0xf4, 0xa0, + 0xba, 0xe8, 0x58, 0xc7, 0xb7, 0x11, 0x98, 0x98, 0x6c, 0x5b, 0xab, 0x15, + 0xc3, 0xd0, 0x41, 0x98, 0xd1, 0x8d, 0xa1, 0x7c, 0x58, 0x29, 0x4a, 0xc9, + 0xac, 0xc4, 0x89, 0xf2, 0x24, 0x17, 0x3e, 0xe4, 0xb6, 0x49, 0x15, 0x60, + 0xeb, 0x87, 0x7c, 0x51, 0x26, 0x94, 0xa6, 0xe9, 0x0a, 0x0f, 0x23, 0x73, + 0x1d, 0xa1, 0x8a, 0x02, 0x90, 0x00, 0xb1, 0x2a, 0x2d, 0xc0, 0x19, 0x3c, + 0xc5, 0x97, 0x63, 0x65, 0xbb, 0x4d, 0x38, 0x3b, 0xbd, 0x36, 0xb7, 0xa9, + 0x38, 0x50, 0x60, 0x19, 0x78, 0x2f, 0x40, 0xf0, 0x83, 0x9f, 0x3c, 0x25, + 0x48, 0xe6, 0x0a, 0x07, 0x17, 0x5f, 0xdc, 0xa3, 0x36, 0xb0, 0x0a, 0x4f, + 0xc7, 0x27, 0x6d, 0x1a, 0x72, 0x50, 0x4c, 0x22, 0x27, 0x41, 0xf0, 0xbc, + 0x8f, 0xb9, 0x44, 0x02, 0x59, 0x20, 0x18, 0x06, 0x8c, 0xbd, 0xea, 0x35, + 0x89, 0x71, 0x5e, 0xcc, 0xa7, 0x7d, 0x86, 0xb7, 0x54, 0x9d, 0xe7, 0x2e, + 0xbc, 0x9b, 0xc1, 0xff, 0x6a, 0xa2, 0x92, 0xb3, 0x51, 0x04, 0x10, 0x75, + 0xdf, 0x6b, 0x4e, 0xb0, 0xa0, 0x4c, 0xd6, 0xbb, 0x51, 0xf9, 0x68, 0x98, + 0x9b, 0xa9, 0x33, 0x92, 0x98, 0x55, 0x1f, 0xe4, 0x46, 0x7b, 0xc2, 0x31, + 0x31, 0x2a, 0x5d, 0x79, 0x32, 0x6b, 0xc2, 0x67, 0xb6, 0xed, 0x56, 0x7f, + 0xa4, 0x05, 0x66, 0x09, 0x10, 0x22, 0x1c, 0x03, 0x43, 0xfb, 0xb3, 0x63, + 0x50, 0xb4, 0xcf, 0xc9, 0x23, 0x51, 0x40, 0x89, 0x40, 0x8b, 0x97, 0x4d, + 0xa1, 0xf6, 0x84, 0xd6, 0x59, 0xc2, 0x27, 0x69, 0x58, 0x4c, 0x37, 0x5e, + 0x14, 0x65, 0xa7, 0x26, 0x5c, 0x92, 0x08, 0x92, 0x4e, 0x11, 0x79, 0x57, + 0x41, 0x82, 0x54, 0xe5, 0x05, 0x72, 0xf8, 0x0a, 0xa5, 0x86, 0x78, 0xca, + 0xb7, 0xca, 0x48, 0x94, 0xf2, 0x0d, 0x82, 0x08, 0x8c, 0xf6, 0x46, 0xb5, + 0xc5, 0x5c, 0x02, 0x80, 0x81, 0x73, 0x71, 0x46, 0x9c, 0x67, 0xb0, 0x9b, + 0xf6, 0x7a, 0xc6, 0xe5, 0xbb, 0xb0, 0xbc, 0xeb, 0x62, 0x6a, 0x05, 0x77, + 0x10, 0xd5, 0x14, 0xac, 0xe0, 0x12, 0x98, 0xc3, 0x77, 0x49, 0xb2, 0xa8, + 0xf0, 0x4b, 0x58, 0xd0, 0xf6, 0x5f, 0x91, 0x4a, 0x16, 0xb5, 0x10, 0x8c, + 0x7d, 0x44, 0x92, 0x11, 0x30, 0xce, 0x98, 0x66, 0x90, 0xb5, 0x79, 0x44, + 0x14, 0xf6, 0xbd, 0x5c, 0x27, 0xc0, 0x3d, 0xc9, 0x68, 0x78, 0x18, 0x5c, + 0xf8, 0x84, 0x15, 0xac, 0x32, 0x60, 0xcf, 0x41, 0x37, 0x8a, 0xf8, 0xa5, + 0xe4, 0xe7, 0xc7, 0xf6, 0x39, 0x2e, 0x79, 0x71, 0x67, 0x1a, 0x5a, 0x3e, + 0x0c, 0x57, 0x48, 0x74, 0x1c, 0xb1, 0x0a, 0x94, 0x3f, 0x49, 0xc0, 0x62, + 0xde, 0xc0, 0x71, 0x53, 0x8a, 0xcc, 0xf3, 0x6a, 0x71, 0xd7, 0xd9, 0x4a, + 0x22, 0x86, 0x0c, 0xf9, 0xaa, 0x22, 0x3f, 0x62, 0x11, 0x48, 0x13, 0x69, + 0xa8, 0xcc, 0x6f, 0xd9, 0x7c, 0x55, 0xb6, 0x90, 0x86, 0x08, 0x93, 0xb8, + 0xc7, 0x66, 0x17, 0x26, 0x30, 0xa8, 0x4d, 0xab, 0xae, 0xe2, 0xd3, 0x8b, + 0x2f, 0x59, 0x83, 0x4a, 0xdb, 0x7e, 0x1f, 0x18, 0x9d, 0x42, 0x89, 0x71, + 0x07, 0xc9, 0x91, 0x3e, 0xf5, 0x32, 0x11, 0xbb, 0x5f, 0x66, 0x0b, 0x2a, + 0x63, 0xd8, 0x96, 0x30, 0x19, 0x9c, 0xd8, 0xc2, 0x41, 0x80, 0x1a, 0x87, + 0xad, 0xd3, 0x73, 0xb0, 0x0b, 0x13, 0x4f, 0xc1, 0x01, 0x62, 0xcb, 0x3b, + 0x61, 0xb6, 0xc2, 0x84, 0xf7, 0x85, 0x65, 0x00, 0x00, 0xad, 0xfb, 0x60, + 0xf3, 0x43, 0x26, 0x53, 0x32, 0x6a, 0xbd, 0x10, 0x06, 0x04, 0x96, 0xa3, + 0xce, 0x62, 0x9e, 0xe0, 0xd3, 0x01, 0xfe, 0x1a, 0x8b, 0x4b, 0xa8, 0x2e, + 0x66, 0x92, 0x22, 0x1e, 0x5a, 0xcd, 0x30, 0x35, 0x1c, 0xce, 0x7a, 0x6f, + 0x65, 0xb0, 0x4b, 0x16, 0x66, 0xa8, 0x08, 0xe5, 0x9c, 0x7b, 0x23, 0x25, + 0x77, 0x7c, 0x1d, 0xf6, 0xa0, 0x48, 0x7b, 0x26, 0x6e, 0x75, 0x28, 0x0e, + 0xbb, 0x01, 0x36, 0x7e, 0xec, 0x05, 0x19, 0x4b, 0x5a, 0x71, 0xaa, 0xa2, + 0x8a, 0x65, 0xcc, 0x96, 0x87, 0x29, 0x5f, 0x6a, 0x77, 0xb6, 0xd3, 0xb6, + 0x4b, 0xbc, 0x66, 0xba, 0x11, 0xaf, 0x7d, 0x5c, 0xa7, 0x64, 0xd4, 0x56, + 0x7f, 0xb0, 0x39, 0xef, 0xcc, 0x0a, 0xf4, 0x34, 0x47, 0xa3, 0xe1, 0xc6, + 0x02, 0x04, 0x3a, 0xe2, 0x18, 0xaf, 0x10, 0x92, 0xa5, 0x08, 0x07, 0x7b, + 0x6c, 0xc4, 0x3e, 0xad, 0xda, 0x1c, 0x50, 0x82, 0x89, 0xca, 0x85, 0x0d, + 0x8d, 0xe9, 0x84, 0x67, 0x25, 0x87, 0xe7, 0x47, 0x43, 0xb9, 0x42, 0x2c, + 0x3c, 0xc2, 0x19, 0x98, 0xe9, 0x4b, 0xa9, 0x87, 0x56, 0xc3, 0x4a, 0x65, + 0x36, 0x98, 0x9f, 0x52, 0x55, 0xc9, 0x82, 0x53, 0x98, 0x1b, 0x71, 0x04, + 0x52, 0x45, 0x62, 0x17, 0xca, 0xc6, 0x82, 0x94, 0x41, 0x0e, 0xac, 0x7f, + 0x46, 0x3b, 0x33, 0x16, 0xc5, 0xb7, 0x01, 0xe5, 0xac, 0x79, 0x59, 0x0c, + 0x9d, 0x26, 0x0b, 0xe3, 0xac, 0x67, 0x53, 0x4a, 0x7e, 0x89, 0xca, 0x3f, + 0x96, 0x10, 0x7d, 0x3d, 0x93, 0x5d, 0xd5, 0x03, 0x9a, 0x42, 0x9b, 0x1f, + 0x0d, 0x00, 0xc9, 0x07, 0x2c, 0x62, 0x3e, 0x55, 0x4c, 0x94, 0xc6, 0x88, + 0x48, 0x9b, 0x0d, 0x55, 0x13, 0x11, 0xce, 0x35, 0x37, 0x93, 0x94, 0xcc, + 0xad, 0x55, 0x2b, 0x59, 0x27, 0x6b, 0x7f, 0xf8, 0x31, 0xfb, 0x2c, 0x33, + 0xb5, 0x44, 0x3d, 0x29, 0xe8, 0x2a, 0xd0, 0x52, 0xc8, 0x06, 0x95, 0x25, + 0x84, 0xc5, 0xbd, 0xca, 0x3c, 0x2c, 0xe8, 0x71, 0x44, 0x1a, 0x80, 0xab, + 0x3b, 0xb9, 0x94, 0xc9, 0xfc, 0xba, 0x50, 0x2a, 0x95, 0x7d, 0x3b, 0x66, + 0x66, 0x8a, 0x43, 0xc1, 0xe5, 0xad, 0x48, 0xf5, 0x67, 0x78, 0x23, 0x31, + 0x1e, 0x41, 0x17, 0xdd, 0xa8, 0x22, 0xe3, 0xe7, 0x75, 0xef, 0x01, 0x65, + 0xc9, 0x27, 0x70, 0x84, 0x74, 0x3d, 0x89, 0x91, 0x2f, 0x62, 0x2c, 0xac, + 0x63, 0x43, 0x83, 0x75, 0xe7, 0x41, 0x2f, 0x9a, 0xae, 0x29, 0x14, 0xb7, + 0xff, 0x2b, 0x38, 0x88, 0x7b, 0xa0, 0x3b, 0xeb, 0x56, 0xfd, 0xf1, 0x8c, + 0xf4, 0xc0, 0x48, 0x6e, 0xdb, 0x00, 0x35, 0x36, 0x36, 0xe6, 0xf4, 0x4f, + 0x6d, 0x4a, 0x4e, 0x4f, 0xac, 0x09, 0x7b, 0xe1, 0x41, 0xa6, 0xfa, 0xb0, + 0xa7, 0x73, 0x87, 0x2b, 0x74, 0x7f, 0x32, 0xc5, 0x1d, 0x9d, 0xe2, 0x57, + 0x02, 0x1a, 0x36, 0xf3, 0x58, 0xba, 0x63, 0x77, 0x87, 0x73, 0x22, 0x82, + 0x0b, 0xb4, 0x97, 0xc8, 0x07, 0x75, 0x35, 0x36, 0x0a, 0xff, 0x6c, 0x64, + 0x60, 0xb7, 0x1d, 0x91, 0x3c, 0x77, 0x11, 0x09, 0x87, 0xd0, 0x4b, 0x1b, + 0x36, 0x81, 0x5a, 0x23, 0x1a, 0xa6, 0x28, 0x66, 0x20, 0x5a, 0x0c, 0x4d, + 0xfc, 0xeb, 0xa5, 0xc4, 0x47, 0x97, 0xbe, 0x40, 0xa8, 0x42, 0x7c, 0x84, + 0x2f, 0xb0, 0x91, 0xba, 0xab, 0xa8, 0xf6, 0x29, 0x30, 0xfc, 0xcb, 0x73, + 0x50, 0x68, 0x10, 0x92, 0x99, 0x39, 0x90, 0x41, 0x05, 0xa6, 0x2a, 0x46, + 0xe7, 0xb2, 0xc0, 0xa0, 0x9c, 0x73, 0xc0, 0xca, 0x8d, 0x18, 0xf6, 0xc7, + 0xdb, 0x7b, 0x20, 0xa6, 0x7c, 0x6c, 0x02, 0x63, 0xb5, 0x4f, 0xf0, 0x7a, + 0x06, 0x20, 0xc9, 0x98, 0xf5, 0xcf, 0x85, 0x19, 0xab, 0xa8, 0x55, 0x08, + 0x57, 0x05, 0xc0, 0x51, 0x09, 0xcb, 0xf6, 0x53, 0xa9, 0x19, 0xe4, 0x71, + 0x40, 0x16, 0x87, 0x29, 0x92, 0x6a, 0xf5, 0x1c, 0x37, 0xfa, 0x19, 0x50, + 0x60, 0xb9, 0x52, 0x5c, 0x90, 0x0a, 0x80, 0xb5, 0x5e, 0x85, 0x05, 0x98, + 0xe2, 0xb5, 0x12, 0x05, 0x39, 0x10, 0x5e, 0x60, 0x42, 0x4d, 0xb9, 0x3d, + 0xd0, 0xb2, 0x81, 0xbf, 0x59, 0xcd, 0x62, 0x79, 0x84, 0x56, 0x4a, 0x48, + 0xaa, 0x61, 0xcc, 0x9e, 0xfb, 0xb9, 0x8a, 0xc9, 0x34, 0x2c, 0x04, 0x2b, + 0xae, 0x6a, 0xa4, 0x94, 0x94, 0x81, 0x6c, 0xc1, 0xb2, 0xe2, 0xa5, 0xa4, + 0xd2, 0x50, 0xa9, 0x2e, 0xdb, 0x95, 0x93, 0x75, 0x4c, 0xf9, 0x79, 0x2c, + 0x81, 0x87, 0x99, 0x7c, 0x6c, 0x5d, 0xbd, 0x95, 0x7b, 0xc4, 0x4b, 0xad, + 0x6d, 0x21, 0xa3, 0xa3, 0xd9, 0x7c, 0x16, 0xa4, 0x7b, 0x67, 0x7b, 0x50, + 0x11, 0x63, 0x13, 0x08, 0x14, 0x81, 0xdf, 0xd2, 0x09, 0xd7, 0xa2, 0xb6, + 0x3d, 0xd0, 0x11, 0xf0, 0x05, 0x8e, 0x4f, 0x38, 0x24, 0xf0, 0x8c, 0x00, + 0x3e, 0x76, 0x48, 0x63, 0x01, 0xc9, 0x7a, 0x63, 0x52, 0x2c, 0xb7, 0x83, + 0xc4, 0x9b, 0x62, 0xff, 0x54, 0xc7, 0x46, 0xcb, 0x9d, 0xc8, 0xdc, 0xb7, + 0xf7, 0xe8, 0x3d, 0x6e, 0x4b, 0x88, 0xe1, 0x45, 0x0a, 0x23, 0x32, 0x37, + 0x9a, 0x09, 0x99, 0xf5, 0xe0, 0xb9, 0x3d, 0xcb, 0xa6, 0x30, 0xc4, 0xa7, + 0x24, 0x46, 0x8f, 0x61, 0xa4, 0x4a, 0x62, 0x7c, 0x4a, 0x99, 0xbb, 0x5b, + 0x95, 0xf1, 0x60, 0x31, 0x71, 0xc0, 0x70, 0x39, 0x80, 0xc2, 0x60, 0x7f, + 0x24, 0x6a, 0x2c, 0x2d, 0xb7, 0xba, 0xd6, 0x6c, 0xa2, 0x7c, 0x01, 0x6e, + 0x18, 0x06, 0xcc, 0xc7, 0x9b, 0x82, 0x60, 0x54, 0xba, 0x0f, 0x36, 0x3d, + 0xd0, 0xa7, 0x7e, 0xab, 0x49, 0x9e, 0xf6, 0x92, 0x4c, 0xe3, 0x84, 0xa0, + 0x72, 0xcb, 0x55, 0xbe, 0x16, 0x6e, 0xbd, 0x60, 0xbf, 0x68, 0x0b, 0x59, + 0x77, 0x35, 0x97, 0xa0, 0xb8, 0xb2, 0x55, 0x23, 0x09, 0x11, 0xc5, 0x0f, + 0x16, 0x07, 0x98, 0xbc, 0x09, 0x80, 0xcb, 0x73, 0x93, 0x87, 0x60, 0x38, + 0xf6, 0x9c, 0x33, 0x58, 0xb4, 0x4a, 0xd3, 0x35, 0x6f, 0xf3, 0x80, 0xa7, + 0x01, 0x93, 0xb7, 0xd1, 0x0c, 0x99, 0x06, 0x83, 0xcf, 0x62, 0xfc, 0x2e, + 0x7e, 0xb1, 0x76, 0xc2, 0xe4, 0xc3, 0x65, 0xb1, 0x55, 0x9c, 0xe7, 0x2b, + 0x03, 0x21, 0x4b, 0x34, 0xdb, 0x18, 0x3d, 0xbc, 0x94, 0x31, 0xab, 0x3d, + 0x41, 0xfa, 0x62, 0x4a, 0x01, 0xc1, 0x0e, 0x95, 0xc6, 0x87, 0xd0, 0x0c, + 0xa9, 0x94, 0x65, 0x8a, 0x70, 0xcb, 0xff, 0x83, 0xa6, 0x0f, 0x05, 0x72, + 0x02, 0xcc, 0x61, 0xd5, 0xc6, 0x59, 0xaa, 0xfc, 0x7c, 0x86, 0x02, 0x19, + 0x85, 0xe3, 0x80, 0xe4, 0xe8, 0x61, 0x51, 0x75, 0x83, 0xbd, 0x71, 0xae, + 0x7a, 0x84, 0x3a, 0x15, 0x58, 0x6e, 0x51, 0x07, 0x3f, 0xee, 0xe8, 0xcb, + 0x62, 0x7b, 0x0f, 0x15, 0x13, 0x0f, 0xe1, 0x82, 0xb7, 0x28, 0x02, 0x03, + 0x48, 0xf5, 0x69, 0x2b, 0x84, 0x33, 0x9f, 0xa1, 0xcc, 0xb7, 0xd1, 0xc8, + 0x5d, 0x38, 0x68, 0x94, 0x3a, 0x06, 0x11, 0xb1, 0x22, 0xa3, 0x9a, 0xa3, + 0xfb, 0x49, 0x97, 0x84, 0xc8, 0xc1, 0xe3, 0xb7, 0xa6, 0x4d, 0x24, 0x34, + 0xb0, 0xb4, 0x98, 0x32, 0x07, 0x21, 0xad, 0x0a, 0x05, 0x89, 0xcc, 0x13, + 0xc8, 0x9a, 0x17, 0x8c, 0xd9, 0x91, 0x05, 0xea, 0x81, 0x9b, 0xe9, 0x04, + 0xe1, 0xac, 0x54, 0xdd, 0xb4, 0x7f, 0x77, 0x4c, 0xa0, 0x2a, 0x51, 0x4c, + 0x51, 0x38, 0x51, 0xa9, 0xa6, 0x4e, 0x19, 0x56, 0x0f, 0x98, 0x00, 0xc7, + 0xc8, 0x35, 0xc0, 0x65, 0xd3, 0xc6, 0xfc, 0x59, 0x71, 0x7f, 0x26, 0x20, + 0x89, 0xaa, 0xce, 0x51, 0x84, 0x2f, 0x5e, 0x13, 0x00, 0x41, 0xfc, 0x09, + 0x4d, 0x11, 0x31, 0x0a, 0x79, 0xb8, 0x72, 0xd6, 0x3f, 0x0b, 0x58, 0xa3, + 0xd0, 0x44, 0x30, 0x08, 0x84, 0x0e, 0x58, 0x07, 0xab, 0xde, 0xa0, 0xa5, + 0x87, 0x8c, 0x5e, 0xb0, 0xd8, 0x7e, 0xa0, 0x33, 0x0f, 0x27, 0xdb, 0x24, + 0x70, 0xc9, 0xc5, 0x11, 0xd5, 0x6a, 0xb4, 0x3c, 0x89, 0xe4, 0xea, 0x14, + 0xb4, 0x6c, 0x22, 0x9e, 0x9b, 0x2a, 0x22, 0x90, 0x6c, 0x9f, 0xac, 0x53, + 0x37, 0x82, 0xa6, 0x32, 0x99, 0x7f, 0x19, 0x88, 0x54, 0xf2, 0xaa, 0xbe, + 0x65, 0xfc, 0xcd, 0x87, 0x71, 0x65, 0x02, 0x43, 0x58, 0xad, 0x4c, 0x35, + 0xb7, 0xf7, 0x78, 0xb6, 0x97, 0xb2, 0x6d, 0x89, 0xb7, 0xf9, 0x35, 0x18, + 0x41, 0x03, 0xc1, 0x3b, 0x49, 0xaa, 0x74, 0xe7, 0xc3, 0x88, 0x39, 0x03, + 0x40, 0xd7, 0x77, 0x75, 0xf8, 0x4c, 0x39, 0x76, 0x45, 0xf6, 0xe8, 0x63, + 0xb2, 0x80, 0x16, 0x05, 0x25, 0x86, 0xca, 0xf2, 0x74, 0x0c, 0x49, 0x1f, + 0x4f, 0xe1, 0x63, 0x68, 0xdb, 0x9d, 0x89, 0x12, 0x0c, 0x7d, 0x14, 0x81, + 0xae, 0x64, 0x73, 0x67, 0x20, 0x04, 0x00, 0xfa, 0x4d, 0xac, 0xf9, 0x95, + 0x71, 0xe6, 0x08, 0x5f, 0x59, 0x33, 0x8d, 0x33, 0x75, 0x37, 0x63, 0x57, + 0x73, 0x74, 0xc9, 0x45, 0xdc, 0x92, 0x68, 0x99, 0x8c, 0xd9, 0xf5, 0xbb, + 0xad, 0xa6, 0x4d, 0x67, 0xb2, 0x01, 0xab, 0x68, 0x8d, 0xbc, 0xb3, 0x4f, + 0xc0, 0xc1, 0xae, 0x05, 0xa8, 0x37, 0x0b, 0xe0, 0x0b, 0x4b, 0x07, 0x62, + 0x2a, 0x2a, 0x97, 0xef, 0x66, 0x1f, 0x8a, 0x93, 0x7b, 0x5e, 0x01, 0x42, + 0x64, 0xb0, 0x88, 0x37, 0x4c, 0x91, 0xd5, 0x4b, 0x72, 0x44, 0x2a, 0x4d, + 0xd5, 0x0b, 0xa0, 0x84, 0x9c, 0xa2, 0x34, 0x17, 0x8b, 0x82, 0x91, 0xa5, + 0xe4, 0x92, 0x6c, 0xad, 0x4a, 0x9d, 0x9f, 0x96, 0x67, 0x44, 0xd4, 0x02, + 0xce, 0xc2, 0x74, 0xca, 0x84, 0x67, 0x5a, 0x77, 0x04, 0x9f, 0x82, 0x21, + 0x65, 0x30, 0x92, 0x12, 0x92, 0x6d, 0xe0, 0xe6, 0xc2, 0xd4, 0x80, 0x8c, + 0x50, 0x2c, 0x94, 0xe0, 0xaa, 0x48, 0x51, 0xa0, 0x22, 0xc7, 0x2a, 0xa2, + 0xe4, 0x67, 0xb1, 0x29, 0x8c, 0x81, 0x21, 0xa0, 0xc2, 0xd6, 0xe5, 0xbf, + 0x21, 0x83, 0x7b, 0x7f, 0xc4, 0x53, 0x57, 0xe3, 0x55, 0x80, 0x27, 0x0e, + 0x6f, 0xe9, 0xbf, 0x2b, 0x60, 0x55, 0x3f, 0xda, 0x4e, 0x83, 0x85, 0x91, + 0xf1, 0xf1, 0x2d, 0xd2, 0xc6, 0x4a, 0x65, 0x13, 0xb7, 0x84, 0x69, 0xae, + 0xea, 0xb2, 0x9f, 0xac, 0x85, 0x04, 0xb3, 0x21, 0x85, 0x5e, 0x29, 0x71, + 0x5d, 0xca, 0x95, 0xba, 0xa3, 0x83, 0xb8, 0xa1, 0xb6, 0xa4, 0x93, 0x6d, + 0xd0, 0x52, 0x4e, 0x0b, 0x0a, 0x9e, 0x62, 0x28, 0x81, 0xfc, 0xb9, 0xc7, + 0xab, 0x88, 0x2d, 0x33, 0x9c, 0xc9, 0xdd, 0xf1, 0xcf, 0xf2, 0x92, 0x25, + 0xa7, 0x02, 0x1f, 0xfb, 0xb4, 0x36, 0x17, 0x77, 0x1d, 0x26, 0x10, 0x9c, + 0x5b, 0x48, 0x7c, 0x2f, 0x35, 0x58, 0xa9, 0xa5, 0x89, 0xa8, 0x36, 0x1e, + 0xc5, 0xb4, 0x63, 0x8f, 0x5c, 0x56, 0xbb, 0xaa, 0x04, 0x69, 0xf8, 0x57, + 0x2b, 0xa4, 0xbb, 0x75, 0xf7, 0x7a, 0x4f, 0xbc, 0xb2, 0x12, 0xd6, 0x5b, + 0x5a, 0xa2, 0x8a, 0x5b, 0x06, 0x3c, 0x87, 0x68, 0x97, 0x76, 0x78, 0xb2, + 0x8d, 0x98, 0x8d, 0x84, 0x15, 0xbf, 0x8d, 0xd6, 0x30, 0x33, 0x18, 0x3e, + 0x2d, 0x96, 0x95, 0x72, 0x77, 0x95, 0x40, 0x31, 0x89, 0x09, 0xf6, 0x6c, + 0x23, 0x63, 0x41, 0xc3, 0xa1, 0x01, 0x7e, 0xe1, 0x31, 0x9c, 0xc3, 0x08, + 0x15, 0xb0, 0x05, 0x43, 0x64, 0x16, 0x79, 0xa6, 0xa2, 0xfd, 0x3c, 0x53, + 0x7b, 0x1c, 0x3c, 0x16, 0xda, 0xce, 0xd7, 0xeb, 0xac, 0xd8, 0xc3, 0x7e, + 0x36, 0xdc, 0x42, 0x0a, 0xfc, 0x39, 0x31, 0x34, 0x6f, 0xb3, 0xca, 0x0d, + 0x65, 0x78, 0x77, 0x54, 0xbc, 0xbf, 0x2e, 0xb4, 0xbf, 0xd9, 0x8a, 0x84, + 0x96, 0xe9, 0x97, 0x2e, 0x74, 0x73, 0x69, 0xfb, 0x59, 0xda, 0xe9, 0xb0, + 0x0c, 0xeb, 0xcd, 0xe3, 0x24, 0x68, 0x4a, 0x69, 0x89, 0xdc, 0xe7, 0xb5, + 0xc8, 0x00, 0x99, 0xa1, 0x64, 0x83, 0x2c, 0x97, 0x78, 0xf5, 0xc7, 0x73, + 0xa9, 0xe4, 0x5d, 0x30, 0x87, 0x73, 0x3b, 0x7a, 0x5d, 0xe0, 0x45, 0xa9, + 0xd1, 0x46, 0x3d, 0xc8, 0xe9, 0x2a, 0x39, 0x57, 0x70, 0x18, 0xa6, 0xbe, + 0x58, 0x7c, 0x3c, 0xea, 0x79, 0x2c, 0x18, 0xbb, 0x41, 0xa6, 0xc0, 0xa2, + 0xeb, 0x3a, 0xb1, 0x56, 0x39, 0xc5, 0x89, 0x0c, 0x6b, 0x7b, 0x84, 0xb1, + 0x09, 0xf0, 0x4e, 0x6e, 0xe8, 0x6a, 0x22, 0x87, 0x4a, 0xd4, 0x45, 0x7b, + 0xf8, 0x5a, 0xf2, 0xee, 0xa0, 0x00, 0x3c, 0xd5, 0x5f, 0x3a, 0x10, 0xa5, + 0xb5, 0x0e, 0xc3, 0x33, 0xa6, 0xf8, 0x15, 0x76, 0xe4, 0xe1, 0xbd, 0x9d, + 0xec, 0x94, 0xd3, 0xd2, 0xa9, 0xe1, 0x28, 0x26, 0x95, 0x17, 0x1a, 0xc1, + 0x19, 0x9a, 0x09, 0x87, 0xdb, 0x1e, 0x12, 0x0b, 0x5c, 0x26, 0xcc, 0xa6, + 0x63, 0xd6, 0xec, 0x78, 0xd8, 0x37, 0x39, 0xf9, 0x9f, 0x33, 0xb1, 0x17, + 0x14, 0x98, 0x40, 0x27, 0xe6, 0x34, 0x14, 0x9d, 0x28, 0x45, 0x7e, 0x74, + 0xd8, 0xfb, 0x43, 0x3b, 0xfe, 0xbe, 0x4c, 0x16, 0xd5, 0x6d, 0xb3, 0x7a, + 0xa2, 0xcd, 0x0a, 0xa5, 0xbd, 0xc8, 0x13, 0xa2, 0x9b, 0xbd, 0xb0, 0x30}, + // ciphertext + {0x90, 0xb7, 0x08, 0x13, 0x62, 0xed, 0xec, 0x16, 0x98, 0xe7, 0x4a, 0x36, + 0xb8, 0xc0, 0x7d, 0x7e, 0xd6, 0xff, 0xe2, 0x4f, 0xac, 0x57, 0xa9, 0x34, + 0xef, 0xee, 0xc0, 0x08, 0x0b, 0x61, 0x7f, 0xb1, 0xfa, 0xa5, 0xa5, 0xc7, + 0xcb, 0x33, 0xbb, 0x6f, 0x7d, 0x45, 0x39, 0x86, 0x4e, 0xbe, 0xf1, 0xf4, + 0x3e, 0xd6, 0x1c, 0x2f, 0xff, 0x65, 0x12, 0xd5, 0x87, 0xe0, 0xf2, 0xd1, + 0x85, 0x38, 0x7b, 0x6a, 0x92, 0x42, 0x60, 0xf4, 0x5f, 0x28, 0xd3, 0x37, + 0x4f, 0xf4, 0xad, 0x50, 0x90, 0xfd, 0x3e, 0x16, 0x71, 0x53, 0xfa, 0x06, + 0x31, 0xc8, 0x4f, 0x2e, 0xf9, 0x41, 0x38, 0xed, 0x56, 0xeb, 0x60, 0x69, + 0x24, 0xee, 0x50, 0xa5, 0x32, 0x9c, 0x75, 0x33, 0xd5, 0x62, 0x97, 0xc0, + 0xac, 0x3e, 0x67, 0xc4, 0xd0, 0x37, 0x80, 0xb3, 0x78, 0xb4, 0xc5, 0x2a, + 0xc3, 0x77, 0x62, 0x4d, 0x6b, 0xfb, 0x7a, 0x6b, 0xc8, 0xc4, 0xde, 0xd5, + 0x81, 0xcc, 0x64, 0x99, 0xb4, 0x87, 0x9b, 0x2d, 0x2a, 0xa9, 0x77, 0xac, + 0x91, 0x13, 0xa2, 0xaf, 0x99, 0xa4, 0x16, 0x0a, 0x07, 0xba, 0x9f, 0xc5, + 0xa9, 0x3e, 0xb8, 0xcd, 0x8f, 0xb2, 0x42, 0xc7, 0xb0, 0x0b, 0x46, 0x2c, + 0x69, 0x66, 0x99, 0x27, 0x5f, 0x70, 0xa9, 0x29, 0x0d, 0x39, 0x91, 0x4a, + 0x1c, 0x28, 0x61, 0x21, 0x61, 0xb6, 0xac, 0x4a, 0xfe, 0xd3, 0x42, 0x81, + 0x77, 0x78, 0x9b, 0x52, 0x09, 0x6e, 0x85, 0x6c, 0xf2, 0x8c, 0x96, 0xaf, + 0x1e, 0x8d, 0xe8, 0xd6, 0xa0, 0x14, 0xf1, 0x4f, 0x2b, 0x65, 0x82, 0xbb, + 0xb4, 0xbe, 0x5f, 0xf8, 0x0f, 0x2b, 0x9e, 0x14, 0x1e, 0x9d, 0x66, 0xed, + 0x20, 0x3b, 0xca, 0x9d, 0xe0, 0xcc, 0xed, 0xc8, 0xaf, 0x0b, 0x45, 0xd6, + 0x02, 0x88, 0x8a, 0x4a, 0x8b, 0x85, 0x68, 0xda, 0x93, 0xc7, 0xbc, 0x53, + 0x2e, 0x2b, 0xbc, 0xc4, 0x7e, 0x69, 0xce, 0xe5, 0x5e, 0x8e, 0x12, 0x7e, + 0xce, 0xb7, 0x46, 0x3a, 0x71, 0x51, 0x90, 0xdd, 0xae, 0x48, 0x85, 0x3c, + 0xd2, 0x5f, 0x1f, 0xaa, 0x72, 0xed, 0xad, 0x7d, 0x80, 0x35, 0xf6, 0xdc, + 0xdc, 0xc6, 0x90, 0x03, 0xa4, 0x21, 0xe0, 0x09, 0xc1, 0x94, 0xa9, 0x2f, + 0x7d, 0xed, 0x98, 0x77, 0x28, 0xb4, 0x25, 0xe2, 0xc8, 0x83, 0x64, 0x1e, + 0x06, 0x95, 0xdd, 0x6e, 0x32, 0xbd, 0x95, 0xed, 0x77, 0x4c, 0x58, 0x6b, + 0x94, 0xf2, 0xa4, 0xe8, 0xe9, 0xe6, 0x6c, 0xa9, 0xce, 0xb8, 0xe7, 0x1a, + 0x8e, 0x12, 0x62, 0x19, 0xa3, 0x97, 0xe8, 0x0c, 0x10, 0x39, 0xcf, 0x52, + 0xa5, 0xf9, 0x14, 0xd1, 0xd9, 0xde, 0x1a, 0xe2, 0xc4, 0x86, 0xed, 0x7f, + 0xe9, 0x4d, 0xb8, 0x4b, 0xf2, 0x7a, 0xba, 0xfb, 0x39, 0x98, 0x03, 0x21, + 0xd8, 0x0d, 0xf7, 0xe9, 0xc7, 0xaa, 0x6f, 0xb4, 0xf4, 0xfb, 0xff, 0xf1, + 0x49, 0x02, 0xa2, 0x67, 0xa2, 0x5f, 0xcd, 0x6e, 0xe9, 0x6b, 0x6f, 0x37, + 0x7e, 0xb0, 0x7d, 0x59, 0x3c, 0x43, 0x6c, 0x72, 0x5f, 0xe2, 0xe5, 0x87, + 0xbf, 0x78, 0x6b, 0x4c, 0x29, 0x24, 0x78, 0x89, 0x91, 0x0a, 0x3f, 0xef, + 0x19, 0xd8, 0xa2, 0x44, 0x8c, 0x54, 0xd1, 0xc2, 0x72, 0x0a, 0xde, 0x73, + 0x17, 0xa5, 0x40, 0x60, 0x94, 0xaa, 0x91, 0x44, 0xa2, 0x5b, 0x84, 0x7f, + 0xd1, 0x56, 0x9c, 0xe8, 0xa4, 0x0d, 0x31, 0xde, 0xf6, 0x52, 0x29, 0xcf, + 0x0c, 0xca, 0x5c, 0x3c, 0xc4, 0xf5, 0x8b, 0xe1, 0x4a, 0x97, 0xf3, 0x5f, + 0xd3, 0x5c, 0x07, 0x68, 0x7d, 0x76, 0xce, 0xcb, 0xf7, 0x6d, 0x11, 0xdd, + 0xe5, 0x89, 0x6c, 0x9a, 0xa4, 0x47, 0xf3, 0x22, 0x93, 0x61, 0x86, 0x3f, + 0xc9, 0xe8, 0xcd, 0x22, 0x58, 0x76, 0x5a, 0x00, 0x56, 0x7c, 0xc6, 0x96, + 0x07, 0x3e, 0xb6, 0x6f, 0x05, 0x83, 0x34, 0x1e, 0x13, 0x37, 0xf4, 0xde, + 0x2f, 0xbd, 0x46, 0x90, 0x4d, 0x08, 0x12, 0x52, 0x29, 0x65, 0x35, 0x21, + 0x91, 0xe7, 0x85, 0x4a, 0x2c, 0xb2, 0xe7, 0xb8, 0xd0, 0xc2, 0xf3, 0x77, + 0x92, 0xa1, 0x1a, 0xa8, 0x6d, 0xe8, 0xf8, 0x42, 0x8f, 0xd8, 0xd6, 0xaf, + 0xd8, 0x28, 0x5f, 0x11, 0x7f, 0x65, 0x3c, 0x80, 0x17, 0x0c, 0x20, 0x2e, + 0x1d, 0x4e, 0x1f, 0xc7, 0x10, 0x93, 0xfb, 0x4e, 0x21, 0xf8, 0x40, 0x90, + 0xff, 0x40, 0xe9, 0xa1, 0xf7, 0xd2, 0xa3, 0x14, 0x21, 0x2f, 0x95, 0xf8, + 0xc6, 0x8e, 0x02, 0x4b, 0x37, 0xb3, 0x4f, 0xa1, 0x31, 0x7e, 0xd1, 0x34, + 0xca, 0xc6, 0x0b, 0x75, 0x66, 0x73, 0xbf, 0xd3, 0x9e, 0x3e, 0x19, 0xce, + 0x98, 0x58, 0xb7, 0x66, 0x3b, 0xd1, 0x0e, 0x98, 0xd7, 0x2f, 0x18, 0x68, + 0xa4, 0x0f, 0xb4, 0xd7, 0x96, 0x5a, 0xe8, 0x4e, 0x6b, 0x5a, 0xf3, 0xe7, + 0xa8, 0x56, 0xb2, 0x49, 0x4e, 0x4f, 0xbc, 0x25, 0x47, 0xec, 0xf9, 0x15, + 0xc3, 0x02, 0x34, 0x67, 0xa4, 0x19, 0x2e, 0xb9, 0xd8, 0x63, 0x31, 0xa2, + 0x66, 0x10, 0x18, 0x4b, 0x9e, 0x32, 0xb5, 0xf4, 0xfa, 0x0a, 0xad, 0x84, + 0xff, 0x97, 0xe7, 0x48, 0x88, 0x9b, 0xcd, 0xd9, 0x7c, 0x82, 0xae, 0xfe, + 0x87, 0xa2, 0x80, 0x38, 0x08, 0x45, 0x7e, 0x42, 0xd3, 0x6f, 0x7b, 0x1d, + 0xdd, 0x9c, 0xe8, 0x3c, 0x7a, 0x6d, 0x75, 0x8c, 0xc4, 0xa5, 0xf7, 0x26, + 0xd4, 0xa0, 0x60, 0xb0, 0xcd, 0xd6, 0x7f, 0x5b, 0x2d, 0xbd, 0x42, 0x7e, + 0x75, 0x09, 0xf1, 0xff, 0x6a, 0xe1, 0xc0, 0x82, 0x20, 0xef, 0xef, 0xe3, + 0xc9, 0x80, 0x3a, 0xc9, 0x05, 0xbd, 0x99, 0x37, 0xd5, 0xe3, 0xc1, 0x6d, + 0xdb, 0xfa, 0x7e, 0x5f, 0x96, 0x6f, 0xab, 0xa8, 0x93, 0x2a, 0x8b, 0x3a, + 0x39, 0xbb, 0x43, 0x9f, 0x8d, 0x61, 0xa0, 0xdb, 0xd9, 0xbd, 0xef, 0x86, + 0xe7, 0xe0, 0x01, 0x59, 0xde, 0x66, 0xfd, 0x6b, 0xd2, 0x79, 0xca, 0xad, + 0xd0, 0x90, 0x4d, 0xea, 0x27, 0x84, 0x84, 0x54, 0xd9, 0x24, 0xcf, 0xf4, + 0x2c, 0x73, 0xc0, 0x5a, 0x09, 0xbd, 0xdc, 0x66, 0x97, 0xf5, 0x61, 0xf2, + 0xb7, 0x50, 0x4e, 0x68, 0x6a, 0x4b, 0xae, 0x44, 0x21, 0xcb, 0x75, 0x35, + 0x30, 0x1b, 0x9e, 0x3d, 0x45, 0x6f, 0xca, 0x5e, 0x1d, 0xef, 0x13, 0x8b, + 0x2d, 0x43, 0xc1, 0xf6, 0x2b, 0x94, 0xee, 0x09, 0x49, 0xf0, 0x0b, 0x00, + 0xa6, 0x3c, 0x2f, 0xf9, 0x88, 0x8c, 0xc3, 0xfc, 0x5d, 0x97, 0x57, 0x1b, + 0x42, 0xf3, 0x9c, 0x55, 0x14, 0x64, 0x7f, 0x7a, 0x64, 0xfd, 0x90, 0x34, + 0x24, 0x99, 0x9f, 0xe8, 0x61, 0x23, 0x8a, 0x27, 0xf8, 0x16, 0x2d, 0x98, + 0xe2, 0x4f, 0x15, 0x82, 0x48, 0xe2, 0x36, 0x6f, 0x7b, 0x79, 0xea, 0x4c, + 0xf2, 0x21, 0x94, 0xaa, 0x33, 0xb6, 0x68, 0x7c, 0x27, 0x60, 0xe2, 0x4f, + 0x50, 0x68, 0x85, 0xd1, 0x2c, 0x69, 0x77, 0xd6, 0x44, 0xf6, 0x58, 0x70, + 0xbc, 0x97, 0x2c, 0x06, 0xe7, 0xef, 0x02, 0x5f, 0x92, 0x93, 0x4f, 0x8c, + 0x43, 0x6a, 0xc8, 0xc9, 0x81, 0x6c, 0xdb, 0xf9, 0x4f, 0x88, 0x4f, 0x7c, + 0xa4, 0xc7, 0x7a, 0xb1, 0x9a, 0xc7, 0x5c, 0x97, 0xd1, 0xa3, 0x9e, 0x4d, + 0x8c, 0xd4, 0x17, 0x57, 0x7f, 0x3a, 0xd8, 0x84, 0x45, 0x09, 0xe4, 0x09, + 0x9a, 0xc2, 0x75, 0x17, 0x20, 0x04, 0xad, 0xab, 0xb1, 0x2e, 0x11, 0xaf, + 0x71, 0xc3, 0x0d, 0xf7, 0x66, 0x85, 0xfd, 0x26, 0x90, 0x18, 0x09, 0x1b, + 0x38, 0x67, 0xc2, 0xec, 0x2a, 0x2f, 0x1d, 0x2b, 0x09, 0x4e, 0xdf, 0xe5, + 0x05, 0xd5, 0xde, 0x0f, 0x79, 0x00, 0xd5, 0xc6, 0x6e, 0x3e, 0x72, 0x80, + 0xd6, 0x08, 0x82, 0x05, 0x22, 0xe1, 0x9b, 0xca, 0x73, 0x6e, 0x6f, 0x71, + 0x95, 0x45, 0xb2, 0x01, 0x27, 0x0b, 0xd0, 0x5d, 0x5e, 0x46, 0xb5, 0x88, + 0x6f, 0x8f, 0x7e, 0x48, 0x8f, 0x65, 0x29, 0x8e, 0x51, 0x20, 0x69, 0x95, + 0x85, 0xcd, 0x19, 0x79, 0x55, 0xe8, 0xc2, 0xe7, 0x18, 0x6e, 0x54, 0x4e, + 0x3c, 0x7d, 0x87, 0xa4, 0xf4, 0x01, 0x92, 0xa9, 0x1e, 0x49, 0x56, 0x5d, + 0x3c, 0x79, 0x0f, 0xac, 0x7e, 0x11, 0xd3, 0xa9, 0x72, 0x3e, 0x54, 0x09, + 0xc7, 0x11, 0x54, 0xf6, 0xc4, 0x1e, 0x62, 0x55, 0x0c, 0x1d, 0xa3, 0xf0, + 0x25, 0xe7, 0x89, 0x52, 0x56, 0x9f, 0xeb, 0x4f, 0xbb, 0x9a, 0xd0, 0x37, + 0xe8, 0xbc, 0x7f, 0x76, 0x84, 0x37, 0x90, 0x33, 0xee, 0xb3, 0x3b, 0xd8, + 0xdf, 0x5c, 0x17, 0x66, 0x75, 0xd0, 0x45, 0x0c, 0x0d, 0x4d, 0x76, 0x6e, + 0x8f, 0xfb, 0x8d, 0x70, 0x61, 0xe2, 0xb2, 0x8f, 0x2b, 0x63, 0xbb, 0xa5, + 0x10, 0x3c, 0xad, 0x76, 0x47, 0x54, 0x44, 0x74, 0x97, 0xa7, 0xf9, 0x68, + 0x36, 0x18, 0x7a, 0x74, 0x76, 0x62, 0x90, 0xb5, 0xf1, 0x0d, 0x36, 0x51, + 0xbf, 0x2e, 0x7d, 0x01, 0x16, 0xc5, 0x83, 0x24, 0xa5, 0xb8, 0xda, 0x2e, + 0x13, 0x3d, 0x3c, 0x36, 0x4a, 0xfd, 0x3b, 0xa9, 0xf7, 0x04, 0x59, 0x35, + 0xb2, 0x00, 0xef, 0x44, 0xc0, 0x1b, 0xbc, 0x43, 0xc4, 0xdd, 0xf0, 0xd7, + 0x01, 0x51, 0x7b, 0x9a, 0xa9, 0x45, 0xf8, 0x30, 0x68, 0xbe, 0xf1, 0xc8, + 0x87, 0x1d, 0x2c, 0x6f, 0xde, 0xb3, 0xa8, 0xef, 0xee, 0x45, 0x6b, 0xe7, + 0x9f, 0x2f, 0x7d, 0x87, 0xcd, 0xe8, 0xa2, 0x74, 0xd4, 0x3a, 0xc0, 0x5f, + 0x7e, 0xb4, 0x46, 0x04, 0xdd, 0xf9, 0x2c, 0x72, 0x63, 0xe3, 0x2c, 0xfe, + 0xf4, 0xff, 0x8b, 0x24, 0x9e, 0x06, 0x72, 0xb0, 0xb8, 0xa3, 0x29, 0xc3, + 0xad, 0xac, 0x1f, 0x21, 0xf7, 0x7c, 0x38, 0x9b, 0x01, 0x1d, 0xa7, 0x87, + 0xe8, 0xac, 0xfd, 0x32, 0x1f, 0x9e, 0x2d, 0x3f, 0x8b, 0x81, 0xb3, 0x8b, + 0xbc, 0x2d, 0x69, 0xbd, 0x79, 0x21, 0x08, 0x4c, 0xc9, 0xd3, 0xc5, 0x1d, + 0x4d, 0x44, 0xbc, 0x0b, 0x14, 0x4a, 0x57, 0x66, 0x13, 0x2b, 0xd6, 0x12, + 0xa5, 0x4d, 0xf1, 0x15, 0x55, 0x08, 0x0f, 0xa1, 0xaf, 0x8a, 0xeb, 0x00, + 0x9f, 0x2a, 0x55, 0xea, 0xb6, 0x56, 0x5d, 0xcb, 0xda, 0x7b, 0x04, 0x6a, + 0x02, 0xec, 0x58, 0x6c, 0xad, 0xdd, 0x4f, 0x38, 0x79, 0xca, 0x2f, 0x7b, + 0x50, 0xc8, 0x43, 0x1e, 0x4e, 0x5f, 0x86, 0xa9, 0xc3, 0x50, 0xad, 0xed, + 0x9d, 0x44, 0xc2, 0xbf, 0x66, 0x38, 0x02, 0xe6, 0x7e, 0xe4, 0x88, 0x69, + 0x78, 0x0e, 0xc9, 0x1b, 0x77, 0xca, 0xed, 0xba, 0x71, 0xac, 0x20, 0x95, + 0x23, 0x60, 0x5f, 0xb4, 0xb3, 0xf8, 0x30, 0xc2, 0xa1, 0x2b, 0x5c, 0x80, + 0x98, 0x70, 0x25, 0xfd, 0x39, 0x80, 0x54, 0x89, 0x37, 0x8d, 0xf8, 0x0e, + 0x54, 0x22, 0x73, 0x5c, 0x3f, 0x94, 0x1d, 0x40, 0x6c, 0xae, 0x4d, 0xb8, + 0x26, 0x5e, 0x61, 0x0f, 0x29, 0xad, 0x22, 0x1e, 0x7e, 0xb3, 0x2c, 0xdf, + 0x47, 0x6f, 0x5d, 0xba, 0x48, 0x9a, 0xdf, 0x8b, 0x06, 0x4b, 0x1a, 0x8c, + 0xfc, 0x17, 0x07, 0x69, 0x6c, 0x4a, 0xcd, 0x46, 0x4c, 0x73, 0x05, 0x20, + 0xca, 0x60, 0x5f, 0x93, 0x6e, 0xe4, 0x7a, 0x67, 0x1e, 0x1c, 0xd9, 0xd0, + 0x23, 0x85, 0x3e, 0xc5, 0xab, 0x9e, 0x35, 0x4c, 0xc1, 0x89, 0xd3, 0xb0, + 0x6f, 0x2e, 0xa2, 0x27, 0xb5, 0xbc, 0x2b, 0xe6, 0xe8, 0x70, 0x41, 0x51, + 0x94, 0x38, 0xc1, 0x55, 0x5f, 0x57, 0xf8, 0x89, 0x1b, 0x83, 0x4b, 0x14, + 0x40, 0x06, 0xdc, 0xbf, 0x8f, 0xd2, 0x44, 0x89, 0x4c, 0xe5, 0xcc, 0x98, + 0xe7, 0xbb, 0xdb, 0x9a, 0x8f, 0x3f, 0x6a, 0xbd, 0x19, 0x46, 0x7a, 0xeb, + 0xf1, 0x6d, 0x11, 0x77, 0xdc, 0x5c, 0x2a, 0xda, 0x47, 0xcd, 0x71, 0x3a, + 0x51, 0x17, 0xf0, 0x09, 0x01, 0xf3, 0xb4, 0x63, 0xf0, 0xda, 0xf5, 0x49, + 0x57, 0x5d, 0xce, 0x61, 0x09, 0x77, 0x53, 0x8c, 0xcb, 0x61, 0x6c, 0x9c, + 0x10, 0x17, 0x6d, 0xf3, 0xb8, 0x9b, 0xf9, 0x48}, + // secret + {0xaa, 0x6e, 0x16, 0xbe, 0xc7, 0x73, 0x55, 0xab, 0x32, 0x23, 0xdb, + 0x7c, 0xce, 0xe8, 0x89, 0x83, 0xfe, 0xf3, 0x89, 0x83, 0x7b, 0x07, + 0x35, 0x67, 0xa7, 0x26, 0x97, 0xbe, 0x11, 0xba, 0x8c, 0x5a}, + true}, + // tcID: 105 + {105, + params_ml_kem1024_test_mode, + // privateKey + {0xa8, 0xe9, 0xac, 0x28, 0x86, 0x5f, 0xb8, 0xb9, 0xb6, 0x59, 0xa1, 0x2b, + 0x1f, 0xdb, 0x2a, 0x83, 0x14, 0x1f, 0xf1, 0xe0, 0x9d, 0xf5, 0x13, 0xb8, + 0x35, 0x35, 0x0b, 0x76, 0xd5, 0xa4, 0x3a, 0xac, 0x54, 0x50, 0x0a, 0x56, + 0xe4, 0x22, 0x15, 0xe8, 0xa8, 0x8f, 0x14, 0xf6, 0x9e, 0xc1, 0x28, 0x76, + 0x71, 0x86, 0x8d, 0x88, 0xf1, 0xbb, 0x8c, 0x93, 0x81, 0xd2, 0x3c, 0x15, + 0x77, 0x98, 0xc6, 0x2e, 0xab, 0x48, 0xae, 0x92, 0x69, 0x4f, 0x55, 0x77, + 0x98, 0x4a, 0x77, 0x4e, 0x69, 0x62, 0xc0, 0x71, 0x7c, 0x66, 0x04, 0xb2, + 0xcb, 0xd4, 0x50, 0x2c, 0x62, 0x7e, 0x38, 0x07, 0xac, 0x56, 0xb6, 0xa8, + 0xc8, 0x76, 0xb8, 0x84, 0x73, 0x68, 0x27, 0x6b, 0xc1, 0x9c, 0xea, 0x8c, + 0xc7, 0xe1, 0x3f, 0xb4, 0x79, 0xa3, 0x37, 0x99, 0x59, 0xc0, 0xfc, 0x31, + 0x26, 0xca, 0x56, 0x51, 0x75, 0xb2, 0xd7, 0x90, 0x9c, 0x46, 0x96, 0x62, + 0x35, 0x86, 0x6a, 0x8b, 0xe4, 0xbb, 0xf8, 0x63, 0x66, 0x61, 0xcc, 0x10, + 0xa7, 0xd2, 0x87, 0x80, 0xa5, 0x71, 0xdb, 0x9b, 0x7c, 0x82, 0x57, 0x6c, + 0x79, 0x01, 0xab, 0x93, 0xf4, 0x88, 0x91, 0x47, 0xcb, 0x14, 0x4b, 0x54, + 0x6e, 0xe5, 0x39, 0xa2, 0x13, 0x07, 0x11, 0x68, 0xba, 0xc9, 0x2c, 0x69, + 0x87, 0xd2, 0x6d, 0xf0, 0x9a, 0x51, 0x8b, 0x44, 0x24, 0x49, 0x98, 0x9d, + 0x02, 0xb5, 0x43, 0x46, 0xe2, 0x61, 0x4b, 0x92, 0x56, 0xb7, 0x32, 0x48, + 0xce, 0xc0, 0x4c, 0x63, 0xfc, 0x6b, 0x6d, 0xac, 0x61, 0xd3, 0xb8, 0x7a, + 0x25, 0xd8, 0x03, 0x98, 0xe2, 0x23, 0x3d, 0x38, 0x31, 0x13, 0xf2, 0xab, + 0x31, 0x05, 0x39, 0x73, 0x27, 0x71, 0x05, 0xd0, 0x2e, 0x13, 0x90, 0x29, + 0xfb, 0x56, 0xaf, 0x99, 0x63, 0xbb, 0xa5, 0xab, 0x4c, 0xa2, 0x9a, 0x06, + 0x69, 0xf0, 0xa6, 0xd3, 0xd3, 0x28, 0x3f, 0x65, 0x8a, 0xb0, 0x15, 0xc8, + 0x6f, 0xc8, 0xae, 0xcf, 0xfc, 0x91, 0x95, 0x4c, 0x6a, 0x75, 0xc2, 0x66, + 0xd7, 0xb3, 0x8d, 0x24, 0x36, 0x55, 0xd4, 0x80, 0x1d, 0xf4, 0x38, 0x5c, + 0x81, 0x87, 0x64, 0x85, 0x02, 0x12, 0xee, 0xa2, 0x2a, 0x3b, 0x17, 0x25, + 0xcc, 0x23, 0x11, 0x28, 0x42, 0x8a, 0x7c, 0x48, 0x85, 0x4c, 0xd8, 0x15, + 0xc2, 0x75, 0x2d, 0x4d, 0x88, 0x3e, 0x3f, 0x15, 0x0f, 0xe8, 0xf9, 0x16, + 0x43, 0x06, 0xc3, 0xe1, 0xf6, 0x27, 0x3f, 0x46, 0x0e, 0xf7, 0xc9, 0x85, + 0x6f, 0xb5, 0x3e, 0xf2, 0x48, 0xbe, 0xa8, 0x91, 0x2c, 0x20, 0xe1, 0x57, + 0x5f, 0x26, 0xa6, 0xac, 0x19, 0x44, 0x49, 0x80, 0xa6, 0xcb, 0xd9, 0x88, + 0x12, 0x5a, 0x7c, 0xf7, 0x15, 0x03, 0x7d, 0xb3, 0x6b, 0x0b, 0x34, 0x34, + 0x9e, 0x93, 0xaa, 0xd5, 0x19, 0x15, 0x0d, 0x98, 0x3d, 0xf4, 0x02, 0xca, + 0x49, 0xa4, 0x1a, 0xfd, 0xe6, 0x0a, 0xd2, 0x3c, 0x7e, 0x19, 0xe5, 0x72, + 0x35, 0xd7, 0x1b, 0xe7, 0x3c, 0x6e, 0x61, 0xd0, 0x32, 0x85, 0x60, 0x12, + 0x18, 0x47, 0xce, 0x0b, 0xf6, 0x6f, 0x53, 0xc7, 0x6b, 0xb3, 0x9a, 0xbd, + 0x8a, 0xcc, 0x6a, 0x00, 0x3b, 0x9f, 0x16, 0x30, 0x75, 0xf0, 0x56, 0xa6, + 0x57, 0xfa, 0x1b, 0x38, 0x64, 0x06, 0x6d, 0x3c, 0xab, 0xf2, 0xf7, 0x22, + 0x81, 0x88, 0x79, 0xdf, 0x84, 0x7d, 0x2e, 0x04, 0x01, 0xf1, 0x02, 0x61, + 0x2a, 0x21, 0x92, 0xb6, 0x85, 0x6e, 0xfb, 0xf9, 0xbf, 0x68, 0x03, 0x3b, + 0x93, 0x45, 0x02, 0x53, 0x95, 0x56, 0xee, 0xb1, 0x45, 0x18, 0x30, 0x30, + 0x78, 0xf0, 0x39, 0x9a, 0xd7, 0x77, 0xff, 0x20, 0x4e, 0x8d, 0x92, 0xbb, + 0xa0, 0x5a, 0xbb, 0x2c, 0x95, 0xc7, 0x24, 0x41, 0x18, 0x3a, 0xcc, 0xcf, + 0xbd, 0x71, 0x95, 0x2b, 0x43, 0x97, 0x0b, 0xe4, 0x92, 0xee, 0x9b, 0x6e, + 0xcd, 0x81, 0x10, 0x92, 0xc8, 0x00, 0xa0, 0x14, 0x76, 0xbf, 0xf4, 0x15, + 0x27, 0x60, 0xc7, 0x52, 0x23, 0x16, 0x62, 0xba, 0x90, 0xac, 0x55, 0xc7, + 0x05, 0x96, 0x5c, 0x8b, 0xf7, 0x47, 0x7a, 0xa8, 0x01, 0x61, 0x4b, 0xc8, + 0xab, 0xa5, 0x9b, 0xa2, 0xea, 0xbc, 0x5a, 0xb8, 0xb5, 0xdc, 0xec, 0x93, + 0x35, 0xe3, 0x2c, 0x07, 0x9b, 0x9b, 0x6a, 0xf0, 0x37, 0x35, 0xb0, 0x11, + 0xf8, 0x24, 0x9c, 0x23, 0xf6, 0x41, 0x5d, 0x91, 0x90, 0xea, 0x07, 0x0b, + 0xc3, 0x40, 0x41, 0xb6, 0x75, 0x92, 0xb5, 0xa0, 0x99, 0x5f, 0x48, 0x2e, + 0x17, 0x35, 0x76, 0x71, 0xd1, 0x22, 0xe1, 0x61, 0x34, 0xe3, 0xac, 0x42, + 0xce, 0xd6, 0xcf, 0x2d, 0xc1, 0x86, 0xd5, 0x56, 0xb5, 0x99, 0x75, 0xaf, + 0x80, 0xb9, 0x58, 0xa2, 0xeb, 0x67, 0x22, 0x14, 0x67, 0x11, 0x83, 0x13, + 0x2f, 0xac, 0x46, 0x5a, 0x04, 0x56, 0x72, 0x59, 0x99, 0xd8, 0x1b, 0x0e, + 0x27, 0xf4, 0x49, 0x45, 0x14, 0xb7, 0xdb, 0x76, 0xce, 0x1c, 0x30, 0x72, + 0x29, 0xf4, 0xc2, 0x06, 0x35, 0x84, 0xa1, 0xb4, 0xc4, 0x0d, 0x07, 0x55, + 0x1d, 0x56, 0x02, 0x28, 0xc1, 0x17, 0x4b, 0xba, 0x14, 0xba, 0x99, 0x20, + 0x04, 0x02, 0x59, 0x7c, 0x31, 0x9b, 0xb2, 0x34, 0x34, 0x20, 0x39, 0x35, + 0xfa, 0x9c, 0x6c, 0xb3, 0x70, 0x2a, 0xf6, 0x37, 0x34, 0x52, 0xbb, 0x74, + 0x30, 0x33, 0xcd, 0xf0, 0x83, 0x01, 0xed, 0xeb, 0x77, 0x00, 0x86, 0x73, + 0x5a, 0xd0, 0x05, 0x0d, 0x87, 0x0d, 0xab, 0x33, 0x85, 0x10, 0xa2, 0x0f, + 0x82, 0x30, 0x32, 0x52, 0x2c, 0x8e, 0x66, 0x12, 0x0d, 0xed, 0xfb, 0x99, + 0x62, 0xc7, 0xc6, 0x61, 0x94, 0x44, 0x92, 0xc0, 0x29, 0xf4, 0xe9, 0x7d, + 0xb9, 0xb8, 0x71, 0x8e, 0x04, 0xb1, 0x18, 0x6a, 0xcf, 0xe1, 0x8b, 0x36, + 0x85, 0xa0, 0xc8, 0xeb, 0x07, 0xb5, 0xef, 0x30, 0xb0, 0x1e, 0x8a, 0x1c, + 0xbe, 0x73, 0x2a, 0x94, 0x8b, 0x79, 0x02, 0x11, 0x1d, 0x74, 0x78, 0x3f, + 0x52, 0x44, 0x86, 0x66, 0x11, 0x23, 0x1f, 0xab, 0xc9, 0x2d, 0x29, 0x6d, + 0x4a, 0xcc, 0x57, 0xa2, 0xf5, 0x2c, 0xcd, 0xa3, 0x31, 0x41, 0x86, 0x8f, + 0x04, 0x74, 0xb4, 0x2a, 0x57, 0x50, 0x71, 0x65, 0x17, 0x66, 0x39, 0xc3, + 0x00, 0xca, 0x59, 0xe4, 0x89, 0x7c, 0xbd, 0xd8, 0x24, 0xe1, 0xc7, 0x86, + 0x14, 0x53, 0x7d, 0x57, 0x94, 0x1b, 0x2f, 0x95, 0x04, 0x80, 0x04, 0x5a, + 0x95, 0x93, 0xc4, 0xa7, 0x85, 0x9d, 0xf3, 0x51, 0x67, 0x84, 0xfb, 0x17, + 0xfa, 0x74, 0x1b, 0xc6, 0x50, 0x6f, 0x5c, 0xcb, 0xca, 0xab, 0xa4, 0xc9, + 0xa9, 0xf4, 0x9e, 0xaf, 0xf4, 0x5b, 0x69, 0xe9, 0x19, 0x15, 0x4b, 0x62, + 0xfa, 0x41, 0xaf, 0x0d, 0x9b, 0x11, 0xc9, 0x61, 0x33, 0x42, 0xa6, 0x31, + 0x57, 0xc6, 0x7e, 0x2d, 0x70, 0x52, 0xdd, 0x99, 0x7e, 0x74, 0x19, 0x66, + 0x0f, 0x81, 0x0c, 0x27, 0x73, 0x2f, 0xbd, 0xc9, 0x9e, 0x98, 0x40, 0xbb, + 0x2d, 0xe1, 0x67, 0x8d, 0xf7, 0x95, 0x68, 0x1c, 0xbf, 0x81, 0xb1, 0x78, + 0xd9, 0x43, 0x33, 0x83, 0x1a, 0x27, 0xe1, 0x22, 0x5e, 0xdd, 0x75, 0xb3, + 0x30, 0x02, 0x1c, 0xb9, 0x72, 0x0a, 0xbd, 0x26, 0xb5, 0x54, 0xc6, 0x02, + 0x26, 0x99, 0x5e, 0x5e, 0x63, 0xc1, 0x4c, 0x5c, 0x4e, 0x89, 0x16, 0x86, + 0x6d, 0x57, 0x1c, 0x6c, 0xe7, 0x52, 0x22, 0x53, 0x56, 0x5e, 0xea, 0x6c, + 0xeb, 0x95, 0xac, 0xe1, 0x15, 0x14, 0xfd, 0x08, 0xa4, 0x2a, 0x34, 0x92, + 0x37, 0xe8, 0x35, 0x72, 0x35, 0x88, 0xd5, 0x68, 0xa8, 0xb2, 0xb1, 0x87, + 0x5f, 0xaa, 0x1a, 0x8b, 0x18, 0x91, 0xcf, 0xf0, 0x81, 0xd2, 0x69, 0x72, + 0x38, 0x06, 0x33, 0x93, 0x42, 0xb7, 0x24, 0xe0, 0x60, 0x3a, 0x74, 0x07, + 0xf4, 0xa5, 0x5e, 0xa8, 0x53, 0x55, 0xcb, 0x89, 0x07, 0x7b, 0xa0, 0x66, + 0x53, 0xea, 0xae, 0x8f, 0xd6, 0x40, 0x51, 0x80, 0x26, 0xf9, 0x1b, 0x74, + 0xd6, 0x45, 0x7f, 0xc9, 0x77, 0x69, 0x89, 0x7a, 0xbc, 0xc7, 0x50, 0xc0, + 0x31, 0xa7, 0x4f, 0xe9, 0xf4, 0x8c, 0x94, 0xb0, 0x65, 0x91, 0x55, 0x41, + 0x67, 0xc9, 0x26, 0x24, 0x63, 0x6f, 0x55, 0x87, 0x10, 0xcd, 0xf6, 0x4f, + 0xab, 0xa2, 0xa1, 0x65, 0xb5, 0x66, 0x05, 0x01, 0x1b, 0xc1, 0xfc, 0x9a, + 0xcd, 0x49, 0x76, 0xcc, 0x46, 0x97, 0xcf, 0x21, 0xb0, 0xb7, 0x61, 0x68, + 0xc6, 0x82, 0x27, 0xcf, 0xfa, 0xcb, 0x29, 0x1a, 0x23, 0xeb, 0x14, 0x4b, + 0x95, 0xa7, 0x69, 0x4c, 0x43, 0x49, 0x93, 0xd8, 0x99, 0x6a, 0xf4, 0x6c, + 0x35, 0x78, 0x86, 0x39, 0xb4, 0x8a, 0x08, 0x45, 0x00, 0xfa, 0x27, 0x67, + 0x5a, 0xf3, 0x59, 0x66, 0x29, 0x78, 0x71, 0xa7, 0x6d, 0xfc, 0xb6, 0xa7, + 0x0d, 0xa1, 0xc4, 0x4d, 0xb3, 0x71, 0x17, 0x54, 0x2d, 0xc4, 0x2c, 0x0e, + 0xdb, 0xd6, 0x0c, 0x17, 0xdb, 0x62, 0xea, 0x3a, 0xa0, 0x6c, 0x55, 0x4c, + 0x1b, 0x35, 0x66, 0x39, 0x9b, 0x77, 0xf9, 0xea, 0x81, 0x6e, 0x6c, 0x12, + 0x1c, 0xb8, 0x27, 0x59, 0x3b, 0x42, 0xc6, 0xa1, 0x2a, 0xa8, 0x49, 0x1f, + 0x4a, 0xa5, 0x9e, 0x89, 0x76, 0xac, 0xad, 0xe8, 0x54, 0x6c, 0xe0, 0xc6, + 0x90, 0xd6, 0xc0, 0x13, 0x97, 0x5e, 0x8f, 0x2b, 0x7a, 0x6e, 0x10, 0x20, + 0xcf, 0x36, 0x59, 0xd7, 0x50, 0xa7, 0xb2, 0x71, 0xb8, 0xc2, 0xb1, 0x7d, + 0x14, 0xb0, 0x7e, 0x42, 0x07, 0x26, 0xb9, 0x3b, 0x04, 0x0b, 0x30, 0x0b, + 0x66, 0x1a, 0x7f, 0xc6, 0xb8, 0x72, 0x3f, 0x4a, 0x12, 0x7f, 0xd8, 0xad, + 0x0b, 0xca, 0xbf, 0x23, 0xb0, 0x3f, 0xae, 0xca, 0x79, 0x97, 0x81, 0x1e, + 0x14, 0x60, 0x9d, 0x34, 0xa1, 0x7f, 0xc0, 0xd5, 0x0e, 0xcc, 0x9a, 0x4a, + 0x69, 0xda, 0x30, 0xba, 0x44, 0x0a, 0x99, 0x90, 0x47, 0x0e, 0x78, 0xb8, + 0xcd, 0x07, 0x7d, 0x33, 0xb3, 0x6b, 0x3b, 0x9a, 0xc0, 0xfb, 0x95, 0x17, + 0xe7, 0x3a, 0x5e, 0x2a, 0x49, 0xc6, 0x50, 0xc3, 0x5c, 0x2d, 0x8a, 0x9e, + 0x2b, 0x96, 0x1b, 0x2d, 0xba, 0x71, 0xc8, 0xe9, 0x35, 0x58, 0x30, 0x0f, + 0xf0, 0x95, 0x84, 0xd1, 0x43, 0xb0, 0xcf, 0x21, 0x36, 0x29, 0xc8, 0xa5, + 0xd7, 0x54, 0xc7, 0x12, 0xf1, 0xbb, 0x12, 0xa0, 0x6c, 0x81, 0x37, 0x18, + 0xb2, 0x6c, 0x34, 0xb4, 0x95, 0xa0, 0xfa, 0xbb, 0x6b, 0xd4, 0x34, 0x32, + 0x4d, 0xf1, 0x15, 0x88, 0xda, 0x9c, 0x29, 0xa8, 0x4d, 0x12, 0x95, 0xca, + 0x74, 0x75, 0xaa, 0xca, 0x63, 0xc3, 0xab, 0xd9, 0x06, 0x4d, 0x49, 0x28, + 0x58, 0x0a, 0x93, 0x71, 0xd6, 0xb3, 0x17, 0xe5, 0xb1, 0x27, 0x4a, 0x5b, + 0xbf, 0x25, 0xc6, 0x00, 0x63, 0x7c, 0xba, 0x9c, 0x3f, 0x8e, 0x8a, 0x80, + 0x5b, 0x4a, 0x5f, 0xdb, 0x24, 0x05, 0x88, 0x36, 0x79, 0x87, 0x38, 0x9f, + 0x02, 0x86, 0x25, 0xb6, 0x6b, 0xbf, 0xa7, 0x4a, 0xbc, 0x90, 0x16, 0xbb, + 0xf9, 0xec, 0x34, 0x7e, 0xd9, 0xaf, 0xcb, 0xc4, 0x07, 0x35, 0x99, 0xbe, + 0x40, 0xb7, 0x5d, 0x43, 0x65, 0x3b, 0x54, 0x04, 0x15, 0x6f, 0x08, 0x34, + 0x41, 0xe2, 0x0c, 0x8d, 0xa4, 0x08, 0xeb, 0xb2, 0x7f, 0xa0, 0x0a, 0xb1, + 0xc4, 0x76, 0x58, 0x6d, 0x56, 0x6d, 0xc2, 0x07, 0x23, 0xfa, 0xa4, 0x65, + 0x7c, 0x21, 0x70, 0xd6, 0xcb, 0x66, 0xa0, 0xdb, 0x83, 0x80, 0xe3, 0x14, + 0xb0, 0x91, 0x49, 0x78, 0xd9, 0x7d, 0xf9, 0x74, 0xb7, 0x38, 0x71, 0x9e, + 0x71, 0x5b, 0x84, 0x2c, 0xf5, 0x3c, 0xb4, 0xaa, 0x98, 0xf3, 0x16, 0x45, + 0x6d, 0x42, 0x50, 0x36, 0xe6, 0x86, 0x68, 0x7b, 0x92, 0xfa, 0x3b, 0x5d, + 0x80, 0xa5, 0xa0, 0x66, 0x45, 0x2b, 0x76, 0x27, 0x83, 0xb3, 0xd0, 0x97, + 0x44, 0xb8, 0x19, 0xcb, 0x8b, 0xc7, 0xa9, 0x7b, 0x26, 0xaa, 0x91, 0x2b, + 0x53, 0x3a, 0x04, 0x92, 0x45, 0x19, 0x40, 0xdc, 0xae, 0xa9, 0xa4, 0x10, + 0x02, 0x0c, 0x55, 0xff, 0x09, 0x84, 0xb0, 0x81, 0x9b, 0xbd, 0x54, 0xc1, + 0xba, 0xd6, 0x1c, 0x0e, 0x45, 0x6f, 0x81, 0xf8, 0x1c, 0xc4, 0xf5, 0xb1, + 0x81, 0x66, 0x6d, 0xf0, 0x91, 0xcb, 0x47, 0x89, 0x09, 0xc1, 0x94, 0x6d, + 0xbb, 0x99, 0x8f, 0xc1, 0x51, 0xb8, 0x66, 0x6c, 0x91, 0x81, 0xd0, 0x52, + 0x47, 0x14, 0x3e, 0x88, 0x44, 0x64, 0xb7, 0x07, 0x76, 0xfd, 0xb7, 0x40, + 0x51, 0x64, 0x12, 0xa4, 0x83, 0x21, 0xdb, 0x35, 0x88, 0x41, 0x8b, 0x0f, + 0x43, 0xb4, 0x4c, 0x88, 0x9c, 0x69, 0x50, 0xca, 0x0c, 0x74, 0x6b, 0xb9, + 0xd2, 0x2c, 0x22, 0x88, 0x46, 0x64, 0xb6, 0x5a, 0x7a, 0xd8, 0xd5, 0x40, + 0x3e, 0x6c, 0x58, 0x71, 0x15, 0x54, 0x58, 0xa8, 0x61, 0x95, 0x06, 0x16, + 0x3f, 0x12, 0x55, 0x81, 0x35, 0x1e, 0xaf, 0xfc, 0x5a, 0xf3, 0x10, 0x7a, + 0x15, 0x3a, 0x13, 0x97, 0xb0, 0x7e, 0x9e, 0x81, 0x7c, 0xfa, 0xba, 0x9c, + 0x5f, 0x65, 0x4a, 0xc2, 0x7c, 0x82, 0x44, 0xe3, 0x0a, 0xf9, 0x4a, 0x13, + 0x51, 0xf2, 0x41, 0x4d, 0xf4, 0x0a, 0xd8, 0xe9, 0xa2, 0x4c, 0xc4, 0x6e, + 0x16, 0x86, 0x9f, 0x61, 0xb9, 0x01, 0x4e, 0x4a, 0x6b, 0x03, 0x06, 0x05, + 0x15, 0x16, 0x24, 0xbe, 0x8a, 0xbd, 0x40, 0x54, 0x0d, 0x81, 0xe2, 0x32, + 0xaa, 0x48, 0xa8, 0x61, 0xd6, 0x80, 0xd6, 0xb3, 0x95, 0x05, 0x11, 0x04, + 0x9c, 0xb8, 0x06, 0x97, 0xf0, 0x13, 0x1b, 0x15, 0xc2, 0x5d, 0xa2, 0x40, + 0x8a, 0x64, 0x04, 0x4d, 0xec, 0x85, 0x6f, 0x01, 0xc6, 0xb8, 0x27, 0x69, + 0x5e, 0xeb, 0x4d, 0x0e, 0xba, 0x9f, 0x9f, 0x30, 0x9e, 0xdb, 0x20, 0x55, + 0x1e, 0x9b, 0x48, 0xf1, 0xb7, 0x89, 0x9e, 0xd2, 0x76, 0x4c, 0x26, 0x5b, + 0x63, 0x66, 0x8a, 0xd8, 0xe8, 0x77, 0x25, 0x2b, 0x53, 0xcd, 0xda, 0x12, + 0x5f, 0xa6, 0x03, 0xab, 0x3c, 0x5b, 0xe9, 0x28, 0x6d, 0xcb, 0x88, 0x66, + 0x8d, 0xa5, 0x81, 0x77, 0x61, 0xb6, 0x57, 0x78, 0xa6, 0x82, 0x80, 0xc8, + 0x17, 0xa4, 0xa2, 0x2b, 0x78, 0x2d, 0xde, 0xf1, 0x5d, 0x6b, 0x67, 0x4e, + 0x19, 0xb9, 0x88, 0x2c, 0xc4, 0x15, 0xbb, 0x9a, 0x18, 0x17, 0x59, 0x06, + 0xa7, 0x74, 0x28, 0x78, 0x02, 0x05, 0xc0, 0x1c, 0x98, 0x76, 0xd3, 0x38, + 0x69, 0x6b, 0x31, 0x0f, 0x1a, 0x7b, 0x62, 0xda, 0x01, 0x29, 0xc4, 0xba, + 0x58, 0x28, 0x93, 0x57, 0x49, 0x38, 0x65, 0xf9, 0x35, 0xb2, 0xf0, 0x05, + 0xbf, 0xea, 0xb5, 0x70, 0xc4, 0x6b, 0x59, 0xc0, 0x19, 0x5f, 0xd8, 0x29, + 0x68, 0xb7, 0xb2, 0x33, 0xe0, 0x86, 0xe3, 0x8b, 0x28, 0xbb, 0x6b, 0x5f, + 0x67, 0xe4, 0xb2, 0x0b, 0x22, 0x45, 0x27, 0x30, 0x9f, 0x68, 0x54, 0x9a, + 0x9e, 0x51, 0x67, 0x84, 0x2c, 0x62, 0xaa, 0x80, 0x5c, 0x3a, 0x5a, 0x01, + 0x94, 0x27, 0x76, 0x31, 0xd3, 0x61, 0x97, 0xe3, 0x2f, 0x3f, 0x48, 0x0f, + 0x5c, 0x7b, 0x48, 0x63, 0xb5, 0x88, 0x9e, 0x79, 0x5c, 0x1b, 0xa6, 0x25, + 0x21, 0x36, 0xc2, 0xeb, 0x72, 0x89, 0xea, 0x27, 0x81, 0x36, 0x3c, 0x22, + 0x03, 0x64, 0xcf, 0x66, 0xd2, 0xcc, 0x7d, 0x16, 0xae, 0x58, 0xd1, 0x4f, + 0x21, 0xc3, 0xbd, 0x91, 0x99, 0x66, 0x9b, 0xe6, 0xb9, 0x03, 0xf6, 0x77, + 0xad, 0xcb, 0x3d, 0xff, 0xe2, 0x2f, 0x40, 0x91, 0x10, 0x11, 0xc6, 0xbd, + 0x8a, 0xfa, 0x0e, 0xf1, 0x35, 0x9a, 0x6b, 0x02, 0x76, 0x40, 0xc3, 0x27, + 0xb4, 0xc8, 0x59, 0x59, 0x20, 0x71, 0x48, 0x0a, 0x13, 0x4f, 0xc0, 0x6b, + 0x2d, 0x02, 0x4f, 0x20, 0x95, 0x61, 0xef, 0xbc, 0x2f, 0x0a, 0x0b, 0x65, + 0xd6, 0x49, 0xae, 0x0d, 0xe8, 0x2f, 0x33, 0x52, 0xc4, 0x69, 0x8b, 0x2f, + 0x43, 0x93, 0x88, 0x24, 0x03, 0x82, 0x7d, 0xfb, 0x9b, 0x9f, 0x25, 0x35, + 0x5f, 0xdc, 0x3e, 0x2a, 0x98, 0x63, 0xe6, 0x8c, 0x8b, 0x39, 0x23, 0xa8, + 0x21, 0x11, 0x3c, 0x86, 0x34, 0x8f, 0xa2, 0x0b, 0x35, 0x6b, 0x69, 0xc3, + 0x5a, 0xe0, 0xa6, 0xaf, 0x43, 0x2c, 0x14, 0xf7, 0x04, 0x65, 0xac, 0x89, + 0x02, 0xf4, 0x4c, 0xc5, 0xd5, 0x0d, 0x0f, 0x3c, 0x95, 0x98, 0x27, 0x58, + 0x05, 0x59, 0x24, 0xa8, 0x28, 0x5b, 0x23, 0x34, 0x5c, 0x40, 0x0b, 0x7f, + 0x51, 0x7b, 0x27, 0xe1, 0xa7, 0x9c, 0x1f, 0x89, 0x59, 0xd0, 0x27, 0xa1, + 0x8c, 0x75, 0xb6, 0xab, 0x81, 0x07, 0x20, 0x1b, 0xce, 0xb8, 0xec, 0x7d, + 0x11, 0xca, 0x26, 0xa8, 0x23, 0x07, 0x4b, 0xa1, 0x2a, 0x05, 0x39, 0x9b, + 0x13, 0x2b, 0xad, 0x09, 0xb1, 0x69, 0x78, 0xc5, 0xbd, 0x2d, 0xda, 0x2c, + 0xd8, 0x2b, 0x0a, 0xfd, 0xda, 0xb5, 0xa2, 0xeb, 0x6a, 0x05, 0xf3, 0x1e, + 0xdd, 0x35, 0x82, 0x0e, 0xc8, 0x39, 0xb6, 0x52, 0x42, 0x56, 0x77, 0x8e, + 0x10, 0xd6, 0x66, 0x65, 0x99, 0x32, 0x12, 0x56, 0x81, 0xed, 0xb1, 0xa5, + 0x34, 0x09, 0x48, 0x90, 0x77, 0x29, 0x77, 0xa9, 0x93, 0xd4, 0x09, 0x62, + 0x6d, 0x47, 0xa7, 0x8e, 0x78, 0x87, 0x34, 0x01, 0xb2, 0x32, 0xcc, 0x30, + 0xfc, 0xa1, 0x0e, 0x4b, 0x4c, 0xc1, 0xa5, 0x01, 0x5d, 0xf9, 0x69, 0xb0, + 0x4b, 0x04, 0x9b, 0xd1, 0xbb, 0x18, 0x1b, 0x15, 0xa8, 0xfe, 0xe5, 0xa3, + 0x39, 0xd4, 0x1f, 0x46, 0x23, 0x22, 0x07, 0x7b, 0x55, 0xcc, 0x17, 0xc7, + 0x02, 0x59, 0x95, 0x4d, 0xa4, 0xce, 0xce, 0x39, 0x42, 0xe0, 0xd2, 0x80, + 0x1c, 0x4a, 0x55, 0xe6, 0x46, 0x07, 0x94, 0x91, 0x65, 0xda, 0xf5, 0x75, + 0xa1, 0x50, 0x87, 0xa3, 0x58, 0xaf, 0x02, 0x34, 0x40, 0xc5, 0x89, 0x30, + 0xee, 0xa0, 0x6c, 0x59, 0xc7, 0x44, 0x73, 0xb8, 0xa8, 0x58, 0x40, 0x84, + 0x9a, 0xe5, 0x1e, 0x68, 0x44, 0x9b, 0xc1, 0x78, 0x8c, 0x83, 0x43, 0x19, + 0x39, 0x89, 0xb9, 0x6b, 0xe0, 0x92, 0x4c, 0xe4, 0x42, 0x39, 0xd1, 0x80, + 0x38, 0x42, 0x86, 0xfb, 0x08, 0x41, 0xd9, 0x96, 0x53, 0xc1, 0x6a, 0x2a, + 0xa2, 0x41, 0x4a, 0x6e, 0x38, 0x15, 0xb0, 0xfc, 0x4a, 0x1d, 0xf3, 0x40, + 0x35, 0xb2, 0xa3, 0xd8, 0x5a, 0xa4, 0xa7, 0x25, 0xb9, 0x45, 0x90, 0x41, + 0x25, 0xfc, 0x5e, 0xb2, 0xec, 0x53, 0xf6, 0x39, 0x3e, 0x10, 0xc9, 0xb7, + 0x8c, 0x35, 0xc6, 0x58, 0xa2, 0x7e, 0xf8, 0xe0, 0x92, 0xd2, 0x0c, 0x3f, + 0x54, 0x35, 0xae, 0x21, 0xc9, 0x30, 0xd3, 0xb7, 0x51, 0x2e, 0x94, 0x70, + 0xcc, 0xe0, 0xc1, 0x1f, 0xe0, 0x09, 0x19, 0x22, 0x19, 0x59, 0x06, 0xba, + 0xe7, 0x06, 0x9f, 0x47, 0xf6, 0x72, 0x6c, 0x48, 0xac, 0xad, 0xa6, 0xb0, + 0x1d, 0xea, 0x4c, 0x29, 0xf1, 0x44, 0x22, 0xd3, 0x67, 0xe0, 0xe2, 0x16, + 0xdc, 0xa5, 0x11, 0xf4, 0xf2, 0x00, 0x0b, 0x1a, 0x8e, 0x04, 0x10, 0x3d, + 0xa9, 0xd2, 0x72, 0x24, 0xc6, 0xbf, 0x77, 0x68, 0x2c, 0x34, 0x7a, 0x47, + 0xda, 0xf5, 0x25, 0xe5, 0xc6, 0xa8, 0x72, 0x8a, 0x4f, 0xbc, 0x10, 0x78, + 0xe2, 0x65, 0x1b, 0xa3, 0xaa, 0x25, 0x0a, 0xb6, 0x3a, 0xef, 0xf6, 0xcd, + 0x2d, 0x34, 0x06, 0xeb, 0xc7, 0x4b, 0xba, 0x70, 0x89, 0x4a, 0x65, 0x11, + 0x92, 0xb7, 0xa5, 0x09, 0xa2, 0x6b, 0x02, 0x87, 0x86, 0xff, 0x36, 0x23, + 0x08, 0x26, 0x26, 0xf0, 0x0c, 0xaa, 0x3b, 0x55, 0x17, 0x6a, 0x24, 0x29, + 0x92, 0x42, 0xcd, 0x89, 0x81, 0xa1, 0x02, 0x75, 0x7b, 0xb2, 0x9b, 0x81, + 0x79, 0xb7, 0x83, 0x2e, 0x87, 0x16, 0xf3, 0xca, 0x96, 0x92, 0x8c, 0x43, + 0xbe, 0xc9, 0x1f, 0x85, 0x46, 0xa2, 0x2a, 0xd3, 0x25, 0xd6, 0x65, 0x49, + 0x9c, 0x8a, 0x5e, 0xf1, 0x26, 0xa6, 0xe2, 0x38, 0x84, 0x7e, 0xe3, 0x28, + 0xaf, 0x01, 0x77, 0xec, 0x06, 0xc3, 0xce, 0xc9, 0x31, 0xea, 0xd9, 0x6e, + 0x88, 0x83, 0x70, 0x24, 0x21, 0x45, 0x9f, 0x63, 0x38, 0x42, 0xe3, 0x9e, + 0x9e, 0x51, 0xa8, 0x84, 0x02, 0x89, 0xd2, 0xd5, 0xc4, 0xe4, 0xdc, 0x09, + 0x96, 0x64, 0x41, 0xfe, 0xd7, 0x35, 0xc0, 0xd1, 0x74, 0xdd, 0x3b, 0x68, + 0xb9, 0x4a, 0x9c, 0xf2, 0x3a, 0x6d, 0x4d, 0xb8, 0x3d, 0x62, 0x5a, 0xa0, + 0x40, 0x34, 0xb3, 0x40, 0x98, 0x70, 0xf7, 0x7b, 0x8b, 0xcb, 0x36, 0x2c, + 0xff, 0x78, 0x91, 0x62, 0x2b, 0x2f, 0xc3, 0xd9, 0x0c, 0xa9, 0xcb, 0x80, + 0x84, 0xb6, 0x10, 0xb1, 0xa9, 0x07, 0xf4, 0xd4, 0xb0, 0xbf, 0xe2, 0x4d, + 0x9d, 0x24, 0xc0, 0xa0, 0x53, 0xc9, 0x19, 0x4a, 0x3f, 0xcf, 0xf3, 0xad, + 0xcf, 0x95, 0x65, 0x40, 0x02, 0x21, 0x79, 0x57, 0x6b, 0x44, 0x18, 0x30, + 0x62, 0x93, 0x7c, 0x43, 0x08, 0x86, 0x93, 0x4b, 0xcb, 0x34, 0x73, 0x4b, + 0x79, 0xe1, 0x3d, 0xcc, 0xa6, 0xb1, 0x96, 0x75, 0x02, 0xa1, 0x32, 0xba, + 0xef, 0x88, 0xb9, 0xa9, 0x72, 0x21, 0x6f, 0x48, 0x8e, 0x25, 0x08, 0x46, + 0x4c, 0x2c, 0x6a, 0x4b, 0xe3, 0x33, 0xa3, 0x39, 0x7d, 0x4c, 0x97, 0x92, + 0xd9, 0x09, 0x17, 0x88, 0x55, 0x34, 0x64, 0x22, 0x91, 0x51, 0xe5, 0x2a, + 0x2c, 0x26, 0x04, 0xc1, 0x71, 0xc5, 0xfc, 0xe0, 0xaf, 0xa1, 0x39, 0xc9, + 0xce, 0xf1, 0xb4, 0x53, 0x83, 0x5d, 0xf6, 0x47, 0x2a, 0x4b, 0x40, 0x01, + 0x26, 0xea, 0xc3, 0x8e, 0x96, 0xb4, 0x24, 0x52, 0x18, 0x7f, 0xe1, 0xc6, + 0x2d, 0x8b, 0x17, 0x7e, 0xb9, 0x7e, 0xd2, 0x28, 0x1f, 0xa8, 0x63, 0x2b, + 0x95, 0xa7, 0x11, 0x99, 0xe8, 0x96, 0x67, 0x9b, 0x75, 0x12, 0xa9, 0xbf, + 0x3d, 0x77, 0x14, 0x17, 0x6b, 0xa9, 0xc8, 0x79, 0x88, 0x65, 0x3b, 0xa3, + 0x92, 0x00, 0x45, 0x16, 0x82, 0x9d, 0xf8, 0x35, 0x1d, 0x15, 0x15, 0x7c, + 0x90, 0x71, 0x6a, 0xa9, 0xab, 0xc1, 0x7b, 0xa8, 0x6a, 0xfb, 0x4a, 0xaa, + 0x77, 0xb1, 0x54, 0xb9, 0xa1, 0xb9, 0xf1, 0x8b, 0xa0, 0xe7, 0x5c, 0x5c, + 0x9e, 0xe9, 0x70, 0x97, 0xa0, 0x5e, 0x7a, 0xaa, 0x24, 0x3e, 0x05, 0x8d, + 0x19, 0x17, 0x43, 0x15, 0xca, 0xb9, 0x73, 0x75, 0x32, 0xdd, 0xc5, 0x0e, + 0x99, 0x73, 0x0f, 0x53, 0xe2, 0x39, 0x09, 0x47, 0x86, 0xcf, 0x72, 0x63, + 0x80, 0xc8, 0x89, 0x42, 0x36, 0x13, 0x16, 0x09, 0xcc, 0x50, 0xb4, 0x41, + 0xac, 0x0b, 0x6c, 0x60, 0x51, 0x2f, 0xbd, 0xe1, 0x97, 0x32, 0x79, 0x6f, + 0x90, 0x47, 0xbf, 0xab, 0x40, 0x1e, 0x56, 0xc0, 0x97, 0xd2, 0x3c, 0x3c, + 0xe5, 0x28, 0xce, 0x85, 0x10, 0x77, 0xed, 0x68, 0x24, 0x51, 0x4a, 0xab, + 0x11, 0x30, 0x20, 0x87, 0xaa, 0x22, 0xc9, 0xd1, 0x3d, 0xf0, 0xf2, 0xc5, + 0x7f, 0xfb, 0x91, 0x6b, 0x46, 0xb1, 0xff, 0x82, 0x30, 0x47, 0x56, 0xcc, + 0x37, 0x66, 0x47, 0xb3, 0x7a, 0x25, 0xc1, 0x81, 0x86, 0x3c, 0xb3, 0x8f, + 0x04, 0x41, 0x5a, 0x66, 0x1b, 0x33, 0x24, 0x24, 0x82, 0xa5, 0x79, 0xa1, + 0x9b, 0x1b, 0x1e, 0x4c, 0xe9, 0x8d, 0x64, 0x04, 0x02, 0x83, 0x17, 0x21, + 0x80, 0xd6, 0x09, 0xdf, 0x32, 0x3d, 0x64, 0xc9, 0x9b, 0xe2, 0x22, 0x0b, + 0x6a, 0xc1, 0x6d, 0x4c, 0xec, 0x15, 0xb7, 0x2c, 0x48, 0x5a, 0x52, 0x9c, + 0xb8, 0x21, 0x19, 0x71, 0x01, 0xd4, 0x39, 0xba, 0x2d, 0xb6, 0x15, 0x4e, + 0x6e, 0x30, 0x57, 0x9e, 0x75, 0x41, 0x69, 0x85, 0x70, 0x91, 0xd9, 0xd7, + 0xfe, 0x45, 0xf6, 0x04, 0x77, 0x94, 0x94, 0x7b, 0x47, 0x4a, 0xcb, 0x46, + 0x79, 0x0d, 0x52, 0x79, 0x94, 0x36, 0x5e, 0x95, 0xb5, 0x82, 0xf5, 0xa8, + 0x9a, 0x0c, 0xc6, 0x4c, 0xa2, 0x98, 0xa6, 0x96, 0x4f, 0x49, 0x89, 0x21, + 0x36, 0x3c, 0x94, 0xa8, 0x16, 0xb6, 0x46, 0xe0, 0xca, 0xa1, 0xb5, 0xbb, + 0xb3, 0x2a, 0x77, 0x07, 0x13, 0xe5, 0x25, 0x2e, 0x5e, 0x93, 0x98, 0x73, + 0x4e, 0xae, 0x0c, 0xc9, 0x9b, 0xf3, 0x89, 0x27, 0x03, 0x6f, 0xc4, 0x4a}, + // ciphertext + {0xcc, 0x3b, 0xca, 0x42, 0x85, 0x45, 0x12, 0x00, 0x84, 0x2a, 0xcf, 0xfa, + 0x02, 0x2c, 0x8e, 0xc7, 0x51, 0x4c, 0x48, 0x9d, 0x68, 0xd9, 0x95, 0x18, + 0x7a, 0x06, 0x2e, 0x12, 0xa4, 0x43, 0x2c, 0x3c, 0x51, 0xe5, 0x37, 0x3a, + 0x5e, 0x63, 0xbb, 0xc2, 0xba, 0x6f, 0x19, 0x7e, 0x08, 0x6c, 0xac, 0xe1, + 0x1f, 0xae, 0x53, 0xdc, 0x78, 0x36, 0xe8, 0xe9, 0xac, 0x38, 0x9b, 0x1f, + 0x4d, 0xe1, 0x75, 0xd8, 0x2e, 0x5c, 0x6b, 0xdd, 0x2e, 0xb3, 0x65, 0x04, + 0x43, 0xeb, 0x87, 0x3d, 0x23, 0xbb, 0x71, 0x20, 0x9c, 0xad, 0x3a, 0x42, + 0xa1, 0xea, 0xd2, 0xc5, 0x71, 0x18, 0x1c, 0x1f, 0xb1, 0x8f, 0x32, 0x69, + 0xc6, 0x71, 0xa6, 0xcb, 0xc2, 0x9e, 0xb0, 0x58, 0xff, 0xd6, 0x4e, 0x1c, + 0x2c, 0xce, 0x1d, 0x69, 0x46, 0xb3, 0xad, 0xcc, 0x66, 0xdf, 0x89, 0x6b, + 0x11, 0xd7, 0xdf, 0x98, 0x0b, 0x76, 0xb5, 0xe1, 0x2c, 0xc6, 0xaa, 0x2c, + 0xbd, 0x1f, 0x54, 0x89, 0xfc, 0x7f, 0x11, 0x67, 0x26, 0x65, 0x9c, 0x8a, + 0xa3, 0x72, 0x4f, 0x6d, 0x67, 0x3c, 0x68, 0xb1, 0x89, 0x36, 0xd0, 0xf7, + 0x80, 0x1e, 0x41, 0x68, 0x63, 0x19, 0x2d, 0xf4, 0x5c, 0xa2, 0x5c, 0x9a, + 0x38, 0x0c, 0xd9, 0xa0, 0x61, 0xf5, 0x8e, 0x8a, 0xee, 0x18, 0x04, 0x17, + 0x32, 0xcf, 0x05, 0xa2, 0xc7, 0xbc, 0xee, 0x03, 0x49, 0xb2, 0x02, 0x0f, + 0xc3, 0xfd, 0x8f, 0x55, 0xfb, 0xd0, 0xbd, 0x53, 0x21, 0xd7, 0x7e, 0x72, + 0x06, 0xd7, 0x0a, 0xe0, 0x36, 0x04, 0xf6, 0xee, 0x31, 0x02, 0xf5, 0xeb, + 0x3c, 0x5b, 0x04, 0xf6, 0x3a, 0x35, 0x2c, 0xbd, 0x8f, 0xbe, 0x95, 0xc9, + 0x15, 0xc3, 0xe4, 0x71, 0x66, 0x78, 0x7a, 0xcf, 0x2e, 0x7b, 0x75, 0x1e, + 0x62, 0x6c, 0x8c, 0xfb, 0x40, 0xea, 0xbf, 0xc4, 0x62, 0xa6, 0xc9, 0x04, + 0x09, 0xfb, 0x5c, 0xfb, 0xb3, 0x62, 0x67, 0xcc, 0xea, 0xdf, 0x34, 0x80, + 0x9c, 0xca, 0x3d, 0x71, 0x6a, 0x15, 0xcc, 0x8c, 0x35, 0x93, 0x07, 0xee, + 0x4c, 0xbf, 0xf0, 0x54, 0x1a, 0xda, 0xa9, 0xe3, 0xa3, 0x6b, 0x55, 0x30, + 0xd1, 0xa7, 0xcf, 0x88, 0x0f, 0x78, 0xf1, 0xb4, 0x6a, 0x55, 0x37, 0x99, + 0x49, 0x49, 0x00, 0x48, 0x67, 0x38, 0x5e, 0xc2, 0x53, 0x6c, 0x4b, 0x77, + 0xba, 0x01, 0x64, 0x16, 0xbd, 0x85, 0x1f, 0x67, 0xaf, 0x6b, 0x6f, 0x82, + 0x2f, 0x97, 0xa8, 0xd6, 0x27, 0xc4, 0x5f, 0x69, 0x60, 0x9c, 0x9d, 0xaf, + 0x06, 0x61, 0x54, 0xf1, 0xf1, 0xa7, 0x59, 0x92, 0x3e, 0xe2, 0x6d, 0x68, + 0xf1, 0x41, 0x12, 0x8c, 0xc1, 0x25, 0xa5, 0xa9, 0x1f, 0x0d, 0xc0, 0xaa, + 0x08, 0x4c, 0x48, 0x73, 0xa3, 0x4d, 0x38, 0x2c, 0xa0, 0x26, 0xb2, 0xdb, + 0xfc, 0x41, 0x4d, 0xb7, 0xfd, 0xbe, 0x54, 0x66, 0x3f, 0x8d, 0x69, 0xf9, + 0xdd, 0xd8, 0x42, 0x71, 0xea, 0x27, 0xe1, 0x34, 0x4b, 0x50, 0x80, 0x28, + 0x7e, 0x9f, 0xef, 0x29, 0x60, 0x40, 0x71, 0x00, 0xc9, 0x46, 0x78, 0x26, + 0x0c, 0xa2, 0xd6, 0x96, 0x2c, 0x7f, 0xe4, 0x48, 0xeb, 0xa8, 0x13, 0xff, + 0xca, 0x34, 0xbb, 0x44, 0x1c, 0x89, 0x5c, 0x95, 0x14, 0xbc, 0x3e, 0xab, + 0x1b, 0x08, 0x97, 0x97, 0x89, 0xfe, 0xae, 0x3f, 0xed, 0xcc, 0xc2, 0x14, + 0x07, 0x3d, 0xb0, 0x18, 0xfb, 0x25, 0x75, 0xb0, 0x97, 0x4b, 0x3d, 0x5a, + 0xca, 0x44, 0xad, 0x51, 0x92, 0x13, 0x39, 0x0e, 0xba, 0x67, 0xe3, 0xe9, + 0xc3, 0xa0, 0x32, 0x5c, 0x13, 0x6f, 0xa0, 0x69, 0x33, 0x14, 0x93, 0x8c, + 0xc4, 0x37, 0x3f, 0x4b, 0x5c, 0x91, 0x60, 0x94, 0x37, 0xeb, 0x9f, 0x62, + 0x13, 0x15, 0x12, 0x2c, 0x87, 0x96, 0xcf, 0x8d, 0xfa, 0x74, 0x29, 0x1c, + 0xdb, 0xdc, 0x2d, 0x09, 0x82, 0x1c, 0x0c, 0x9f, 0x10, 0x71, 0x64, 0xff, + 0x3e, 0xd6, 0x6c, 0x9d, 0x5b, 0xf3, 0xfc, 0xf7, 0x0f, 0xb9, 0x36, 0x0c, + 0x3b, 0xc1, 0xfd, 0x42, 0xe6, 0x89, 0xe0, 0x34, 0xe5, 0x85, 0xc6, 0x40, + 0x13, 0x9b, 0x27, 0x29, 0x03, 0x2f, 0xd0, 0x48, 0xc9, 0x8c, 0x8b, 0x2c, + 0x8d, 0x63, 0x03, 0x7b, 0xb1, 0x29, 0x41, 0xd6, 0x13, 0x95, 0xd4, 0x2b, + 0xd1, 0xcb, 0x51, 0xbe, 0x5f, 0xbf, 0x1b, 0x5b, 0x07, 0xe0, 0x4c, 0x21, + 0xe4, 0xa9, 0xa4, 0x5f, 0xc4, 0x19, 0x66, 0x94, 0x3f, 0x8d, 0xcb, 0xef, + 0xf1, 0xb1, 0x00, 0xde, 0x3f, 0xcd, 0x0e, 0xd8, 0xbb, 0x97, 0xcd, 0x9f, + 0xa8, 0xbc, 0xa2, 0x9f, 0xf4, 0x87, 0xa2, 0xf4, 0xae, 0xda, 0xaa, 0x51, + 0xcd, 0x08, 0x2f, 0x60, 0xf9, 0xd6, 0x6d, 0x9d, 0x12, 0xdc, 0x1e, 0x77, + 0x75, 0xce, 0xa4, 0x70, 0xbd, 0x2c, 0xe7, 0xab, 0xe2, 0xcd, 0x99, 0xc4, + 0x3f, 0xf1, 0x6a, 0x0e, 0xe6, 0x80, 0x18, 0x9e, 0xfb, 0xf2, 0x88, 0xf1, + 0x31, 0xc6, 0x57, 0x58, 0x75, 0x66, 0xea, 0x75, 0xd2, 0x4e, 0x92, 0x1b, + 0x56, 0xdc, 0xd6, 0x73, 0x07, 0xf2, 0x81, 0x29, 0x9e, 0xbf, 0x41, 0x5b, + 0x87, 0x1a, 0x68, 0x80, 0xe7, 0xaf, 0x7a, 0xbc, 0x10, 0x8e, 0x5c, 0xb4, + 0x31, 0xc0, 0xe6, 0x05, 0xa5, 0xd2, 0xdd, 0x7d, 0xf8, 0x7e, 0x82, 0xfa, + 0x1b, 0x7c, 0x49, 0x57, 0xb7, 0xeb, 0x28, 0xc2, 0xa8, 0x33, 0xf3, 0x7b, + 0x50, 0x8d, 0x2b, 0x88, 0x8f, 0xd7, 0x1f, 0x38, 0x1b, 0x6e, 0x32, 0x25, + 0xaa, 0x95, 0x20, 0x1c, 0x34, 0xea, 0x2f, 0xfb, 0x38, 0xc6, 0xb1, 0xd0, + 0x55, 0x06, 0x2f, 0x0c, 0xfd, 0x34, 0xf2, 0x85, 0xdf, 0xf7, 0xc6, 0xdf, + 0x08, 0xf7, 0x70, 0x5e, 0x19, 0x80, 0xb4, 0x5d, 0x0d, 0xad, 0x34, 0x64, + 0xcd, 0x33, 0x79, 0x16, 0xe2, 0xad, 0xd3, 0x89, 0x0d, 0x53, 0xd7, 0xc9, + 0xa2, 0x3c, 0x1f, 0xb3, 0xb7, 0x94, 0x30, 0x29, 0x25, 0xa6, 0xa9, 0xc5, + 0xba, 0xe7, 0x49, 0xed, 0xc9, 0x70, 0x4e, 0x7e, 0x68, 0xcc, 0x2e, 0x95, + 0x2f, 0x2a, 0xd1, 0x81, 0x7d, 0xc5, 0x5e, 0x41, 0x99, 0x92, 0x32, 0x82, + 0xe6, 0x91, 0x07, 0x7d, 0xfd, 0x6a, 0xc9, 0xcd, 0x1d, 0xfc, 0xeb, 0xee, + 0x38, 0x10, 0x92, 0x3e, 0xcd, 0x9e, 0xd1, 0xa0, 0xd4, 0x33, 0x94, 0x75, + 0x56, 0x91, 0x47, 0x47, 0x6c, 0x2c, 0x1b, 0x28, 0xfc, 0x37, 0x41, 0x9b, + 0x62, 0x1c, 0x6f, 0xff, 0x17, 0xf1, 0x69, 0x72, 0x0f, 0x80, 0x88, 0x2c, + 0xfe, 0x80, 0xd1, 0x12, 0xba, 0x3c, 0x16, 0xad, 0x63, 0x44, 0x94, 0xd4, + 0xd5, 0x98, 0xd2, 0x45, 0xc3, 0x28, 0xbc, 0xed, 0x94, 0x6f, 0xa0, 0xf8, + 0x36, 0x8a, 0xf1, 0x88, 0xbe, 0x37, 0xb2, 0x86, 0x53, 0x5a, 0xca, 0x97, + 0x39, 0x10, 0x5c, 0x19, 0xd7, 0x1b, 0xc6, 0x0f, 0xfe, 0x03, 0xd6, 0xf4, + 0xc8, 0xfe, 0x71, 0xe1, 0xbb, 0x6b, 0xfc, 0x15, 0x96, 0x82, 0x7e, 0x01, + 0x79, 0xe4, 0x1c, 0xc6, 0xe0, 0x70, 0xa0, 0x27, 0x11, 0xd2, 0xd8, 0x67, + 0xb6, 0x6f, 0x0b, 0x95, 0x09, 0x9f, 0x4b, 0x0c, 0x17, 0xca, 0xde, 0xd3, + 0x0e, 0x00, 0x8a, 0xc7, 0x18, 0xda, 0x9e, 0x8d, 0x9b, 0x89, 0x77, 0x70, + 0x8b, 0xec, 0x40, 0x7c, 0x05, 0xc0, 0xca, 0xa0, 0x51, 0x85, 0x11, 0xf5, + 0x7c, 0x9d, 0xcb, 0x95, 0x2d, 0x52, 0x22, 0x95, 0x2b, 0xcf, 0x77, 0x7b, + 0xea, 0x53, 0xf0, 0xb2, 0x90, 0x98, 0x82, 0x58, 0xac, 0x69, 0x20, 0x18, + 0x62, 0x0f, 0xf5, 0x7d, 0x89, 0x43, 0x80, 0xa6, 0x8f, 0x4a, 0x88, 0xdf, + 0xfe, 0x84, 0x24, 0x84, 0x69, 0x20, 0x33, 0x2f, 0x59, 0x7e, 0x3d, 0x2b, + 0x35, 0x46, 0x0b, 0x3d, 0xfc, 0x19, 0x56, 0x9b, 0x77, 0x1c, 0x4a, 0xcc, + 0x12, 0xd2, 0xa4, 0x5e, 0x29, 0x46, 0x18, 0xc1, 0xa5, 0x9c, 0x6f, 0x05, + 0x35, 0x5b, 0x85, 0xf0, 0xab, 0x95, 0x5a, 0xaf, 0x7f, 0x50, 0x45, 0x72, + 0xb0, 0xd4, 0xdd, 0xa1, 0xcb, 0x60, 0xb5, 0xd6, 0xc5, 0xa0, 0x92, 0xb1, + 0xbd, 0x2d, 0xab, 0xa0, 0x10, 0x28, 0x0f, 0xff, 0x02, 0xb8, 0x16, 0x48, + 0x7c, 0x7e, 0x07, 0x39, 0x28, 0x70, 0x41, 0xda, 0x5c, 0x4b, 0x11, 0xb0, + 0x1d, 0xd7, 0x80, 0xa5, 0x97, 0x54, 0x74, 0xda, 0x56, 0xee, 0x69, 0xf4, + 0xb5, 0x85, 0x42, 0xe9, 0x06, 0x54, 0xa5, 0xf7, 0x78, 0x2c, 0xa1, 0x7c, + 0x6f, 0x40, 0x6d, 0x58, 0x16, 0x2c, 0x77, 0xb1, 0x39, 0xdf, 0x53, 0x52, + 0xd1, 0xeb, 0xb1, 0x18, 0xfb, 0x4e, 0x35, 0x6e, 0x8a, 0xb5, 0xbf, 0xb5, + 0xad, 0xb6, 0xff, 0xab, 0x48, 0xad, 0xbe, 0xef, 0x1e, 0x8f, 0xf1, 0xbc, + 0x2b, 0xb8, 0xea, 0xb8, 0x2c, 0xd8, 0x2d, 0x59, 0xaa, 0xf8, 0x3d, 0xdd, + 0x66, 0x95, 0x47, 0x5a, 0x59, 0xa2, 0x6a, 0xf2, 0x10, 0x5d, 0x87, 0xb4, + 0xac, 0x18, 0xad, 0xd0, 0xe5, 0xa4, 0x98, 0xc3, 0x9e, 0x7f, 0x6e, 0x34, + 0xe4, 0xdc, 0x08, 0x3b, 0x09, 0x5c, 0x3b, 0x56, 0x04, 0xfd, 0xcb, 0xeb, + 0x82, 0x4a, 0x3f, 0x83, 0x43, 0xcb, 0x5c, 0x8d, 0xf7, 0x89, 0x4e, 0x84, + 0xd6, 0x7d, 0x6c, 0xe1, 0x6a, 0x9d, 0x10, 0x00, 0xb2, 0xa1, 0x88, 0x33, + 0xda, 0x14, 0xad, 0xf3, 0xa1, 0x5b, 0xb7, 0x3b, 0xcf, 0xdc, 0x44, 0x59, + 0x7f, 0x1f, 0xa4, 0xec, 0x5c, 0xa7, 0x15, 0xd7, 0xc2, 0xbc, 0xb4, 0x9d, + 0x9d, 0xe1, 0x46, 0x20, 0xd6, 0x1f, 0x96, 0x4f, 0xcf, 0xf4, 0x74, 0x91, + 0xe5, 0xe1, 0x80, 0x5e, 0x3c, 0xf1, 0xac, 0xb1, 0x5e, 0x15, 0xd7, 0x45, + 0x40, 0x80, 0xe5, 0x2f, 0x2b, 0x23, 0xa4, 0xf4, 0x1a, 0x10, 0x18, 0x16, + 0x7a, 0x12, 0x67, 0x76, 0x9d, 0x7e, 0x81, 0x00, 0xae, 0x7d, 0x64, 0x65, + 0x12, 0xb9, 0x40, 0x0b, 0x56, 0xfb, 0xaf, 0x79, 0x6c, 0xe6, 0x80, 0xa0, + 0xf2, 0xf4, 0x6b, 0x55, 0x22, 0x35, 0x66, 0xb3, 0xa8, 0x92, 0x61, 0xd4, + 0xd9, 0x49, 0x86, 0xe2, 0x23, 0x28, 0xf2, 0x0e, 0x49, 0x48, 0x8b, 0x45, + 0x4e, 0x22, 0x2d, 0x55, 0xcb, 0x01, 0x2d, 0x9a, 0x6d, 0x8e, 0x02, 0xb7, + 0x8a, 0xdf, 0xe4, 0x16, 0x58, 0xde, 0xa2, 0xf2, 0xff, 0x55, 0x91, 0x8c, + 0x5d, 0xbb, 0x28, 0xb3, 0x95, 0x93, 0xdd, 0xdc, 0x9e, 0xb3, 0x07, 0xdc, + 0x09, 0xba, 0x62, 0xaa, 0xf2, 0x5d, 0x85, 0x20, 0x8a, 0xff, 0x05, 0x67, + 0x93, 0xbe, 0x6d, 0xf2, 0xa0, 0xe4, 0xbd, 0xfe, 0xa4, 0xaa, 0xc9, 0x79, + 0xc4, 0x92, 0xf5, 0x1e, 0x26, 0xda, 0x3c, 0x76, 0x2e, 0x23, 0xa8, 0x34, + 0xac, 0x38, 0xa4, 0x01, 0xbd, 0x80, 0x6c, 0x63, 0xe4, 0x57, 0xdf, 0xac, + 0x59, 0xde, 0x94, 0x00, 0x69, 0xb2, 0x22, 0x40, 0xbd, 0xe0, 0x6d, 0xc0, + 0x44, 0x12, 0xcc, 0xe8, 0xb2, 0xb3, 0x63, 0x29, 0x2a, 0xb6, 0x1e, 0xe3, + 0x95, 0x8d, 0xe4, 0xe1, 0x1c, 0xbb, 0x46, 0x37, 0xd0, 0xf5, 0x14, 0xa1, + 0x12, 0x61, 0x80, 0x3b, 0x1f, 0x0e, 0xea, 0xb3, 0x6b, 0x3b, 0x23, 0x8a, + 0xee, 0xcc, 0xf5, 0xe0, 0xda, 0x02, 0xc4, 0x15, 0xbe, 0x7d, 0x59, 0x8b, + 0x9d, 0x14, 0x2e, 0xaa, 0x08, 0x7a, 0x63, 0xb1, 0x25, 0xf8, 0x0f, 0x5a, + 0x7a, 0xe3, 0xb9, 0x4a, 0x62, 0x36, 0x66, 0xeb, 0x24, 0x6d, 0xdf, 0xa5, + 0xd4, 0x1b, 0x23, 0x8a, 0x51, 0x74, 0x1f, 0x44, 0x1d, 0xe8, 0x38, 0x6a, + 0x0b, 0x5c, 0x3a, 0x52, 0x45, 0x5b, 0x42, 0x4f, 0x2c, 0x72, 0xa9, 0xec, + 0x64, 0x7f, 0x1d, 0x2e, 0xe9, 0x45, 0x2e, 0xff, 0x07, 0x8a, 0xb1, 0xfb, + 0x08, 0x6a, 0xcc, 0xb8, 0xf4, 0x1c, 0xb3, 0x4b, 0x96, 0xa5, 0x55, 0xa5, + 0x04, 0xf6, 0x07, 0xbb, 0xdc, 0xa5, 0xb9, 0x53, 0x53, 0x60, 0x0a, 0x05, + 0x84, 0xab, 0x0b, 0xf4, 0x53, 0x4c, 0x37, 0x5a, 0xa3, 0x77, 0xb5, 0x64, + 0x42, 0x2a, 0x12, 0x59, 0x12, 0xd1, 0x7c, 0xa0}, + // secret + {0x5c, 0x7b, 0x5f, 0xb8, 0xb3, 0x0a, 0x4f, 0x81, 0x69, 0x25, 0xc8, + 0xb7, 0x03, 0x8a, 0xcf, 0xcc, 0xc5, 0xc8, 0x2f, 0xbf, 0x57, 0x4f, + 0x50, 0x1f, 0xd3, 0x94, 0xd0, 0xc5, 0xe2, 0xf3, 0xd9, 0xd5}, + true}}; + +#endif // mlkem_decap_vectors_h__ diff --git a/security/nss/gtests/common/testvectors/ml-kem-encap-vectors.h b/security/nss/gtests/common/testvectors/ml-kem-encap-vectors.h @@ -0,0 +1,6617 @@ +/* vim: set ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* This file is generated from sources in nss/gtests/common/wycheproof + * automatically and should not be touched manually. + * Generation is trigged by calling python3 genTestVectors.py */ + +#ifndef mlkem_encap_vectors_h__ +#define mlkem_encap_vectors_h__ + +#include "testvectors_base/test-structs.h" + +const std::vector<MlKemEncapTestVector> MlKemEncapTests = { + // tcID: 26 + {26, + params_ml_kem768_test_mode, + // entropy + {0x5b, 0xd9, 0x22, 0xaf, 0x34, 0x5a, 0xb9, 0x0f, 0x29, 0x7d, 0x0a, + 0x82, 0xea, 0x39, 0x52, 0x7a, 0x64, 0x8e, 0x49, 0x77, 0xab, 0x56, + 0x24, 0x2e, 0x2a, 0xc0, 0xed, 0x9a, 0x2c, 0xc6, 0x6f, 0x10}, + // publicKey + {0xf2, 0x55, 0xce, 0x47, 0x33, 0x42, 0x83, 0xb8, 0x62, 0x2b, 0xe7, 0xce, + 0x76, 0xd7, 0x35, 0x4e, 0x3c, 0x4f, 0xe3, 0xf6, 0xc4, 0x4f, 0x6b, 0xb2, + 0x5c, 0x98, 0x64, 0xee, 0x0b, 0xae, 0xb5, 0x76, 0x59, 0x50, 0xd8, 0x8f, + 0x43, 0x82, 0x63, 0xce, 0x8b, 0x5a, 0x7a, 0x4c, 0x0f, 0xc4, 0xc9, 0x5f, + 0x10, 0xc4, 0x77, 0xa7, 0x52, 0x1f, 0x9b, 0xb4, 0x58, 0xb8, 0xaa, 0x55, + 0xd2, 0xe4, 0x3b, 0xdc, 0x86, 0xb7, 0x2f, 0x09, 0x30, 0xee, 0x42, 0x8b, + 0x4c, 0x5a, 0x9c, 0x71, 0x16, 0x31, 0x0f, 0x2a, 0xa5, 0xcb, 0x03, 0xac, + 0x16, 0x03, 0xc8, 0x11, 0x95, 0x9e, 0xa9, 0x01, 0x2d, 0x69, 0xcb, 0xce, + 0x40, 0xb3, 0x7c, 0xd8, 0x90, 0x99, 0x9c, 0xc7, 0x4f, 0xf3, 0x75, 0xc6, + 0x6f, 0x04, 0x8b, 0x24, 0x03, 0x63, 0x34, 0x3c, 0xb7, 0x95, 0x99, 0x88, + 0x56, 0xd5, 0x60, 0xf4, 0xc7, 0x12, 0x93, 0x8c, 0x79, 0x46, 0x68, 0x64, + 0xd2, 0x0b, 0x0b, 0xe9, 0x54, 0x19, 0xc9, 0xea, 0x6a, 0x8e, 0x72, 0x03, + 0xa1, 0x98, 0x6d, 0x10, 0xb6, 0x06, 0x69, 0x12, 0x42, 0xce, 0xf6, 0x30, + 0x94, 0x1b, 0x11, 0x64, 0x58, 0xa4, 0x1c, 0x83, 0xb7, 0xdc, 0x5b, 0x06, + 0xa9, 0x7c, 0x84, 0x0b, 0x11, 0x6f, 0x2c, 0xe9, 0xcf, 0xa8, 0x7a, 0x1c, + 0x1a, 0xa8, 0xc4, 0xfa, 0xc1, 0x37, 0xde, 0x84, 0x98, 0xe8, 0x74, 0x9b, + 0x36, 0x38, 0x40, 0x42, 0x71, 0x53, 0x9b, 0x24, 0x71, 0x83, 0xa3, 0x2e, + 0x7e, 0x44, 0x13, 0xb6, 0x40, 0x0e, 0x0f, 0x29, 0x57, 0x88, 0x08, 0x4e, + 0xea, 0x93, 0xb4, 0xa7, 0x65, 0x33, 0x41, 0x00, 0x56, 0x72, 0xd9, 0x08, + 0xc6, 0x2b, 0x64, 0xb1, 0x1b, 0x48, 0x41, 0x4b, 0x50, 0x5f, 0x30, 0x36, + 0xee, 0x56, 0xcc, 0x4d, 0xa8, 0x8f, 0xef, 0x27, 0xb2, 0xda, 0x97, 0x4c, + 0x9d, 0xd3, 0x8c, 0x15, 0x00, 0x90, 0xb5, 0xb8, 0xa2, 0x9b, 0xd7, 0xc5, + 0x97, 0x5a, 0x8a, 0x95, 0x95, 0x49, 0x04, 0x4b, 0x4d, 0xae, 0xd5, 0x2a, + 0x7f, 0xa6, 0x83, 0x35, 0x30, 0x8f, 0x40, 0xc9, 0xb7, 0x68, 0xc5, 0x82, + 0x1f, 0x78, 0xcf, 0x06, 0x8a, 0x69, 0x49, 0x78, 0x96, 0x4f, 0x59, 0x74, + 0x08, 0xd0, 0x97, 0x59, 0xa1, 0x95, 0x78, 0x62, 0x4c, 0x64, 0xdc, 0x18, + 0xea, 0xb2, 0x30, 0x82, 0xe5, 0x99, 0xec, 0x48, 0x8d, 0xfe, 0x01, 0x6e, + 0x4b, 0xa5, 0x89, 0x77, 0xe1, 0x5b, 0x71, 0x5c, 0x61, 0x24, 0x96, 0x31, + 0x02, 0x19, 0xb9, 0xb4, 0x77, 0x5c, 0xb5, 0x1c, 0x5d, 0xf0, 0x3b, 0x93, + 0x4f, 0x74, 0x73, 0xaa, 0x58, 0xa5, 0x7c, 0x60, 0x2c, 0xf1, 0x7c, 0x59, + 0x93, 0xd3, 0x0f, 0x52, 0xd7, 0x53, 0xac, 0x56, 0xba, 0xca, 0x1a, 0x99, + 0x47, 0x42, 0xbc, 0x50, 0x43, 0x5e, 0x17, 0x9a, 0x26, 0x2b, 0x3c, 0x8e, + 0xec, 0xe1, 0x51, 0x39, 0x55, 0xc5, 0x93, 0xe7, 0x50, 0x8b, 0x94, 0x5f, + 0x6e, 0x95, 0xcc, 0x42, 0x68, 0xcb, 0xd4, 0x5b, 0x25, 0x04, 0x08, 0x2f, + 0xb8, 0xb2, 0x3d, 0x89, 0x06, 0x94, 0x6a, 0x74, 0xac, 0x2f, 0xb6, 0x76, + 0xbd, 0xbc, 0x39, 0xdf, 0x76, 0xb9, 0xb8, 0x45, 0x0f, 0x49, 0xd2, 0x83, + 0xc6, 0x22, 0x78, 0x45, 0x65, 0xb7, 0x6b, 0x96, 0x08, 0x4d, 0xfc, 0x09, + 0x9e, 0xc2, 0x27, 0x9e, 0x5b, 0xc1, 0x34, 0x92, 0x56, 0x1b, 0x44, 0x39, + 0xe3, 0x23, 0x24, 0xb0, 0x05, 0x0c, 0x5f, 0xe6, 0x45, 0x19, 0x74, 0xbf, + 0x0d, 0x72, 0x75, 0x0a, 0xc5, 0x8b, 0xac, 0x04, 0x6d, 0x21, 0x8a, 0xc3, + 0x97, 0xf6, 0x55, 0x32, 0xac, 0xc7, 0x80, 0x02, 0x46, 0xed, 0x1c, 0x80, + 0x94, 0xfc, 0x80, 0x73, 0x06, 0xbf, 0x88, 0xe2, 0x81, 0x6a, 0xd1, 0x3b, + 0x06, 0xf2, 0x89, 0x8c, 0xa8, 0x7c, 0x48, 0x6a, 0x12, 0x4b, 0x61, 0x81, + 0x56, 0xa0, 0x90, 0xb1, 0x05, 0x87, 0x22, 0xab, 0xae, 0x38, 0x9a, 0xb5, + 0x61, 0x2c, 0xa2, 0xc2, 0x76, 0x6d, 0xde, 0xf9, 0x82, 0x02, 0xa6, 0xab, + 0x10, 0x97, 0xb3, 0x92, 0x40, 0x4e, 0xa1, 0x51, 0x78, 0x85, 0x28, 0xb0, + 0x75, 0x44, 0x32, 0x5f, 0x85, 0x1b, 0x4d, 0xea, 0xa2, 0x49, 0x51, 0x38, + 0xf9, 0x29, 0xbb, 0xb4, 0x02, 0x60, 0x42, 0xb0, 0xa8, 0xcd, 0x3c, 0xb0, + 0xa7, 0xd0, 0x61, 0x92, 0x7a, 0x71, 0x7d, 0x48, 0x77, 0xe0, 0xd9, 0xa4, + 0x09, 0xd6, 0xb1, 0x25, 0x36, 0x1c, 0x99, 0x09, 0x0a, 0xfd, 0xf9, 0x22, + 0xa7, 0x76, 0xac, 0xad, 0xa2, 0xb6, 0xa8, 0x45, 0x22, 0x13, 0x4b, 0x08, + 0x9d, 0x4b, 0x42, 0x80, 0x20, 0xc8, 0x30, 0x61, 0xa8, 0x78, 0x16, 0xc6, + 0xa5, 0x92, 0x63, 0xe6, 0x36, 0xb5, 0xb2, 0xec, 0xbc, 0xa6, 0xa6, 0x4e, + 0x29, 0x60, 0x09, 0x48, 0xd5, 0xb0, 0xb4, 0x56, 0x00, 0xb8, 0xd4, 0x73, + 0xa6, 0x5b, 0x45, 0x0b, 0x76, 0x6d, 0x02, 0x51, 0xb6, 0x91, 0x58, 0x98, + 0xbc, 0x3c, 0x1c, 0x2c, 0x53, 0xb9, 0x67, 0x91, 0x21, 0xf1, 0xf0, 0x6c, + 0xfb, 0x96, 0x04, 0xde, 0x00, 0x51, 0xff, 0x4b, 0x09, 0x39, 0x39, 0xc9, + 0x07, 0xab, 0x18, 0xc2, 0x98, 0x86, 0x46, 0xa9, 0x04, 0x81, 0xbb, 0x99, + 0xf4, 0x15, 0x36, 0x11, 0xc1, 0x38, 0xbe, 0x34, 0xbe, 0x16, 0x3b, 0x3a, + 0xba, 0xc4, 0x43, 0x54, 0xa7, 0x74, 0xe9, 0xcb, 0x54, 0xfb, 0x29, 0x90, + 0x33, 0x67, 0xc7, 0x8d, 0x27, 0x54, 0x67, 0x49, 0x9d, 0x22, 0xe8, 0x3a, + 0x11, 0xca, 0x9b, 0x84, 0x45, 0xbe, 0x9d, 0xf3, 0xcb, 0x61, 0x20, 0x69, + 0x22, 0x2a, 0x87, 0x15, 0xa4, 0x95, 0xd1, 0x15, 0xb4, 0xbc, 0x24, 0x57, + 0xab, 0x73, 0x1a, 0xe7, 0xec, 0x1b, 0xd8, 0xec, 0x97, 0x22, 0xca, 0x98, + 0x09, 0x58, 0x18, 0x0a, 0xc2, 0xbd, 0x67, 0x89, 0x8f, 0x4a, 0x72, 0xa6, + 0x75, 0x10, 0x6d, 0x66, 0x98, 0x1b, 0x2e, 0x92, 0x3c, 0x0b, 0xa4, 0x0e, + 0x32, 0x34, 0x65, 0x5d, 0x00, 0xb2, 0x5d, 0x64, 0x62, 0x59, 0x1c, 0x9c, + 0x9c, 0x7a, 0x53, 0x49, 0x14, 0x89, 0xd5, 0x7a, 0x77, 0xb2, 0x51, 0x0d, + 0x08, 0xb9, 0x5b, 0x9c, 0x61, 0xc1, 0x78, 0x4b, 0xa7, 0x52, 0xf4, 0xa7, + 0x30, 0x23, 0x74, 0x2e, 0xcb, 0x98, 0x5d, 0xfb, 0x37, 0x80, 0x8b, 0x16, + 0xd6, 0xc2, 0x83, 0xcd, 0x4a, 0x06, 0xc5, 0xa3, 0xac, 0x40, 0x18, 0x55, + 0xe1, 0xda, 0xbe, 0x63, 0xf9, 0x66, 0x8b, 0xf7, 0xa6, 0x61, 0x94, 0x6b, + 0x18, 0x23, 0x0a, 0x1a, 0x5a, 0x7c, 0x19, 0xda, 0x66, 0xed, 0x08, 0x15, + 0x1e, 0x77, 0xa6, 0x24, 0xf5, 0x79, 0xd4, 0xe4, 0x4a, 0xbe, 0x02, 0x3a, + 0x1c, 0xd3, 0x34, 0x59, 0xfc, 0xc3, 0xf1, 0xa6, 0x58, 0x94, 0x26, 0x63, + 0x4d, 0x06, 0x2d, 0x0a, 0x75, 0xa3, 0x87, 0xa0, 0xb7, 0xb8, 0xd8, 0x02, + 0xa6, 0x6b, 0x21, 0x06, 0xe0, 0x12, 0x64, 0x50, 0x09, 0x15, 0xb9, 0x73, + 0x07, 0xc8, 0x5e, 0xcf, 0x33, 0x1b, 0xca, 0xc3, 0x5e, 0x4a, 0xa2, 0x43, + 0xc8, 0x37, 0x87, 0x6d, 0x85, 0x8a, 0xfa, 0x8b, 0x51, 0x0c, 0x34, 0x27, + 0x08, 0xb3, 0x80, 0x93, 0xb2, 0xcd, 0x35, 0xd1, 0xba, 0x68, 0xda, 0x05, + 0x44, 0x79, 0x4d, 0x17, 0x2c, 0x6c, 0xa8, 0x85, 0x0a, 0x7f, 0x84, 0x7b, + 0x56, 0x99, 0x8d, 0x8e, 0x0b, 0x0a, 0x17, 0x14, 0x4f, 0xb6, 0xf4, 0x43, + 0xe3, 0x67, 0x97, 0x67, 0xca, 0x91, 0xb8, 0x0a, 0x6c, 0xaa, 0x8b, 0xb0, + 0xe2, 0x2b, 0xba, 0xc0, 0x1c, 0x0e, 0xae, 0x16, 0x04, 0xb8, 0xa2, 0x43, + 0x91, 0x16, 0x72, 0xb3, 0x74, 0x8c, 0x7f, 0x18, 0xc5, 0x31, 0xe3, 0x78, + 0x3d, 0x52, 0x20, 0x39, 0x13, 0x00, 0x57, 0x19, 0x8d, 0x6f, 0x09, 0x89, + 0xe9, 0x96, 0x41, 0xab, 0x71, 0x8d, 0xa1, 0x23, 0x71, 0x0b, 0xdb, 0x67, + 0xb3, 0xb7, 0x5e, 0xc6, 0x6b, 0xa9, 0xcf, 0x45, 0x9f, 0xe0, 0x6c, 0x7c, + 0x4f, 0x79, 0x59, 0xdd, 0x72, 0x81, 0xff, 0x15, 0x59, 0x40, 0xb0, 0x9f, + 0xb1, 0x4a, 0xa5, 0x5c, 0xd4, 0x0b, 0x96, 0x3c, 0xa3, 0x31, 0x2c, 0x05, + 0xb3, 0x6a, 0x52, 0x07, 0xc9, 0x89, 0x42, 0x8c, 0x16, 0xe5, 0xd2, 0x88, + 0xad, 0xb1, 0x8a, 0x66, 0xf7, 0x46, 0x17, 0xca, 0x39, 0xdb, 0x8a, 0xa6, + 0x12, 0xd7, 0x06, 0xdf, 0xec, 0x88, 0x4c, 0x45, 0x7a, 0xec, 0xd1, 0xaa, + 0xb5, 0x98, 0x19, 0x5b, 0x4a, 0xc9, 0x71, 0x52, 0x9f, 0xb7, 0xa8, 0x83, + 0x49, 0x22, 0x35, 0xe6, 0x21, 0x12, 0x06, 0x4a, 0x0f, 0x6f, 0xf5, 0xbf, + 0x4f, 0x16, 0x19, 0xa0, 0xd0, 0x3b, 0x96, 0xb5, 0x11, 0x20, 0x09, 0x96, + 0x6b, 0x2d, 0xf7, 0xc2, 0xf3, 0x00, 0xb6, 0xf2, 0x95, 0xdf, 0x7f, 0xa2, + 0xc4, 0x53, 0xe1, 0x94, 0x9d, 0xf6, 0x40, 0x53, 0x09, 0xdf, 0x75, 0x75, + 0xc7, 0x65, 0x6c, 0x24, 0x5e, 0xdc, 0xa9, 0xf6}, + // cipherTextDigest + {0xce, 0x62, 0x27, 0x64, 0x14, 0xee, 0x67, 0x7c, 0x76, 0x26, 0x32, + 0xb7, 0x20, 0xf3, 0x66, 0xd5, 0x8e, 0x0e, 0x2f, 0xf4, 0x7b, 0x03, + 0x62, 0x7e, 0x69, 0x0f, 0x43, 0x92, 0x67, 0x80, 0x74, 0xde}, + // secret + {0xb2, 0x42, 0x52, 0x99, 0x02, 0x0b, 0xcf, 0x56, 0x3b, 0x8e, 0xbe, + 0x05, 0x12, 0xf0, 0x47, 0x99, 0x41, 0x33, 0x5a, 0x75, 0xa3, 0x2b, + 0x8d, 0x10, 0xbf, 0xf6, 0x0e, 0x55, 0x48, 0xb6, 0x46, 0x72}, + true}, + // tcID: 27 + {27, + params_ml_kem768_test_mode, + // entropy + {0xf3, 0x43, 0x0d, 0xae, 0x17, 0xce, 0xde, 0xf4, 0xbb, 0xac, 0xbd, + 0xec, 0xde, 0x7f, 0xee, 0x05, 0x22, 0xd6, 0xa9, 0xaf, 0x90, 0xed, + 0x76, 0xb1, 0x3b, 0x31, 0x2e, 0x7a, 0x86, 0xe5, 0x31, 0x0f}, + // publicKey + {0x8e, 0x81, 0x07, 0xf8, 0xf9, 0x70, 0x1a, 0x9b, 0x6b, 0x01, 0xf0, 0x5d, + 0x96, 0x45, 0x39, 0x60, 0x5b, 0x87, 0xca, 0xd3, 0x6a, 0x27, 0x97, 0x60, + 0x4d, 0x39, 0x83, 0xd0, 0x60, 0x3f, 0x75, 0x22, 0x65, 0x03, 0x12, 0xa8, + 0x70, 0x7b, 0x64, 0xf1, 0xf4, 0xcb, 0x12, 0xd8, 0x88, 0x63, 0x21, 0xbf, + 0x7e, 0xa1, 0xcc, 0x28, 0xf3, 0x98, 0x25, 0x54, 0xa3, 0xff, 0xc6, 0x64, + 0xb7, 0x06, 0xc7, 0x6c, 0x42, 0x97, 0x85, 0xea, 0xc0, 0x8d, 0x89, 0x54, + 0x51, 0x73, 0x15, 0xa4, 0x18, 0xa5, 0x18, 0x1a, 0x2d, 0x88, 0x2c, 0x51, + 0x62, 0x3c, 0x9e, 0x36, 0x23, 0x54, 0x5b, 0xba, 0x85, 0x11, 0xc8, 0xbc, + 0x09, 0x93, 0x88, 0x03, 0x91, 0xbc, 0xef, 0xf8, 0x6a, 0x1a, 0x07, 0x17, + 0xd0, 0x90, 0x79, 0xa1, 0xc3, 0x3c, 0x8e, 0x9c, 0x97, 0xbb, 0x52, 0x0f, + 0x27, 0x36, 0x84, 0xb2, 0xaa, 0xc1, 0xd4, 0xd1, 0x8a, 0x70, 0xd4, 0x90, + 0xad, 0x0a, 0x66, 0x27, 0xf0, 0x53, 0x74, 0x60, 0xc0, 0x95, 0x36, 0x4a, + 0x42, 0xfa, 0x08, 0xa2, 0x1a, 0xa6, 0xd2, 0x42, 0x55, 0xf6, 0xb2, 0x66, + 0x0b, 0x1b, 0x64, 0x83, 0x98, 0x46, 0xf6, 0xe0, 0x30, 0x81, 0x4c, 0xc5, + 0x8b, 0x18, 0x8f, 0xd1, 0xd1, 0x42, 0xd4, 0xdc, 0x3e, 0xc5, 0x31, 0x97, + 0x73, 0x81, 0x72, 0x87, 0xbb, 0x82, 0xee, 0x54, 0x79, 0xe0, 0xa1, 0xa4, + 0x98, 0xe1, 0x67, 0x1d, 0x61, 0x51, 0x62, 0xd8, 0xc5, 0xb3, 0x80, 0x68, + 0xb6, 0x16, 0x43, 0x83, 0x23, 0x00, 0xfd, 0xa1, 0xb4, 0x1e, 0xab, 0xa3, + 0x1c, 0x5b, 0x98, 0x54, 0xa0, 0x7b, 0x62, 0xd8, 0xb2, 0xc5, 0x91, 0x89, + 0x8d, 0x92, 0xbe, 0xe3, 0xcc, 0x01, 0x71, 0x08, 0x10, 0xee, 0xf3, 0x28, + 0x8f, 0xeb, 0x3a, 0xd9, 0xfb, 0x58, 0xf8, 0xd3, 0x9f, 0x76, 0xa1, 0x28, + 0xef, 0xc7, 0x64, 0xfe, 0x26, 0x93, 0x45, 0xec, 0x76, 0x61, 0x3a, 0xb0, + 0xa4, 0x1a, 0x74, 0x64, 0x96, 0x44, 0x5f, 0xa7, 0x05, 0xae, 0xa7, 0x09, + 0x4a, 0x45, 0x42, 0xa8, 0xe5, 0x9f, 0x83, 0xb3, 0x80, 0xe0, 0xbc, 0x66, + 0x32, 0x47, 0x76, 0x5c, 0x3b, 0x68, 0x5b, 0x33, 0xc0, 0x1c, 0xe7, 0x80, + 0x6c, 0x80, 0xb0, 0x37, 0xd2, 0x20, 0x53, 0xe6, 0xb1, 0x55, 0xd5, 0x16, + 0xcc, 0xf2, 0xc0, 0x10, 0xf9, 0x75, 0x75, 0x52, 0x7a, 0xc7, 0xa5, 0xc3, + 0xd1, 0xaa, 0x65, 0x90, 0x63, 0xaf, 0x2d, 0x0b, 0x0d, 0x91, 0x5a, 0x1b, + 0x57, 0xc7, 0x5c, 0x70, 0x7a, 0x17, 0x9d, 0xa0, 0x35, 0xa9, 0xe1, 0xca, + 0x39, 0x77, 0xb9, 0x1b, 0x83, 0x30, 0x93, 0x0c, 0x4d, 0xb5, 0xbb, 0x25, + 0x01, 0x30, 0x87, 0x47, 0xc0, 0xa7, 0x09, 0xc3, 0x41, 0x42, 0xa3, 0x62, + 0x7b, 0xcc, 0x29, 0x52, 0xfc, 0xa7, 0x04, 0xd7, 0x49, 0xe3, 0x72, 0x32, + 0x31, 0x67, 0x21, 0x87, 0xdc, 0x1c, 0xf6, 0x1c, 0x08, 0x7a, 0x23, 0x84, + 0xfe, 0x72, 0x7b, 0xe3, 0xaa, 0x7b, 0xb0, 0x02, 0x40, 0xe2, 0x39, 0x5b, + 0x97, 0x9b, 0x0d, 0xfb, 0x94, 0x2d, 0x38, 0xf3, 0x82, 0x5e, 0x72, 0x13, + 0x23, 0x95, 0x34, 0x8f, 0x7c, 0x6c, 0xbb, 0xb8, 0x00, 0xc3, 0xc3, 0x6f, + 0x8d, 0x48, 0x18, 0xd5, 0x84, 0xc1, 0x9b, 0x12, 0x4a, 0xc9, 0xa7, 0x28, + 0xf7, 0x71, 0x47, 0x60, 0x62, 0x5b, 0x5f, 0xe8, 0x77, 0xc8, 0x55, 0xbe, + 0x65, 0xb0, 0x1b, 0xbc, 0xe1, 0x06, 0xa2, 0x4a, 0x2f, 0x72, 0x08, 0x69, + 0x6e, 0x73, 0xa2, 0x2a, 0x27, 0x52, 0x25, 0x66, 0xaa, 0xdd, 0x8a, 0x73, + 0xa0, 0x50, 0x91, 0x4d, 0x36, 0x29, 0x32, 0x90, 0x2b, 0x8e, 0xc8, 0x42, + 0x9e, 0x5c, 0x15, 0xcb, 0x42, 0x79, 0x65, 0xa8, 0x7f, 0x19, 0x06, 0x25, + 0xb6, 0x45, 0x2c, 0x32, 0x89, 0x6f, 0x57, 0x76, 0x31, 0x8b, 0x15, 0xce, + 0x2f, 0x30, 0x60, 0xb2, 0x96, 0xa1, 0xbb, 0x72, 0xa4, 0xc3, 0x6b, 0x5c, + 0xfc, 0xc9, 0x7b, 0x96, 0x68, 0x71, 0x3f, 0x85, 0x57, 0x52, 0x80, 0xc1, + 0x08, 0x5b, 0x20, 0xd8, 0xb3, 0x5d, 0x99, 0x3a, 0x27, 0xdb, 0xec, 0xb9, + 0x7d, 0xb2, 0x18, 0xb3, 0xc2, 0x97, 0xb2, 0xe6, 0x0c, 0x83, 0x84, 0xb0, + 0x5d, 0xf2, 0xc7, 0x23, 0x4c, 0x75, 0x06, 0x69, 0x86, 0x4a, 0x5b, 0xbf, + 0x76, 0xb9, 0x90, 0x2f, 0x00, 0xa0, 0x5b, 0xd7, 0x44, 0x29, 0xe5, 0x7c, + 0x1b, 0x24, 0xc6, 0xbc, 0x28, 0xb6, 0xbe, 0x2c, 0x9e, 0xa5, 0xc4, 0x62, + 0x13, 0xd9, 0x2c, 0x4e, 0x29, 0x82, 0x8d, 0xc1, 0xb1, 0x0d, 0xa7, 0x86, + 0x10, 0x61, 0x06, 0xc7, 0x68, 0x90, 0x14, 0x00, 0x9b, 0x1b, 0x1c, 0x02, + 0x20, 0x93, 0xab, 0x7c, 0xec, 0xb4, 0x4d, 0x49, 0x98, 0xb0, 0x83, 0x8b, + 0xbf, 0x91, 0x2c, 0x81, 0x26, 0x90, 0x51, 0x65, 0x56, 0x91, 0x13, 0x5b, + 0x5c, 0xd4, 0x5f, 0x84, 0xd7, 0x15, 0xf3, 0xc7, 0xb5, 0x6d, 0xa3, 0x31, + 0x4d, 0x87, 0x83, 0xbd, 0x02, 0x13, 0xc0, 0xc3, 0x30, 0x38, 0x11, 0x60, + 0x42, 0xd1, 0x16, 0xdc, 0xa4, 0x12, 0x26, 0x97, 0x44, 0x83, 0xc6, 0xa4, + 0xb8, 0xa2, 0xa3, 0x19, 0x69, 0x0f, 0xc0, 0xb1, 0xbe, 0xdc, 0xa3, 0xb0, + 0x29, 0x25, 0xa0, 0x1c, 0x13, 0x47, 0x2a, 0xb9, 0xa5, 0x65, 0x77, 0x8d, + 0x44, 0x24, 0x2d, 0x3b, 0x17, 0x76, 0xfd, 0xfc, 0x15, 0xc4, 0xf1, 0x89, + 0x69, 0x62, 0x3e, 0x01, 0xa4, 0x53, 0xaf, 0xbc, 0x6f, 0x2c, 0x26, 0x4c, + 0xfe, 0xaa, 0x8a, 0xd1, 0x4b, 0x39, 0xf9, 0x6b, 0x55, 0xee, 0xda, 0x5c, + 0xb8, 0xc3, 0x91, 0xa3, 0x17, 0x73, 0xcb, 0xaa, 0x77, 0xe8, 0x48, 0x1b, + 0x5e, 0x26, 0xab, 0xc8, 0xd5, 0x31, 0x43, 0x0b, 0x09, 0x31, 0xf3, 0x6b, + 0xaf, 0x28, 0xb9, 0x6f, 0xd6, 0x46, 0xaf, 0xb7, 0x11, 0x95, 0xd5, 0x8b, + 0xfa, 0x16, 0x86, 0xa7, 0x24, 0x7f, 0x9a, 0x69, 0xa5, 0xd2, 0x0c, 0x05, + 0x16, 0x69, 0x4e, 0x76, 0x04, 0x51, 0x19, 0x9a, 0x25, 0xa5, 0x54, 0x57, + 0xbd, 0x17, 0x67, 0x4b, 0x4c, 0xbf, 0xc5, 0xaa, 0x20, 0x1e, 0xd0, 0xcc, + 0xe7, 0x71, 0x72, 0x95, 0x11, 0x70, 0x34, 0x2b, 0x30, 0x91, 0x18, 0x1d, + 0xc2, 0x2b, 0x7c, 0xa7, 0x02, 0x13, 0xd1, 0xa3, 0x8b, 0x9d, 0x75, 0x7e, + 0x87, 0x96, 0x1a, 0x4c, 0xa7, 0xbc, 0x18, 0xe2, 0x2f, 0x06, 0x26, 0x85, + 0x0a, 0x79, 0x4e, 0x3c, 0x2a, 0x5d, 0x5b, 0x50, 0x01, 0xb1, 0x94, 0x48, + 0x6c, 0xc0, 0xcc, 0x88, 0x04, 0x67, 0xfc, 0xf3, 0xb5, 0x5b, 0x34, 0x92, + 0x64, 0x89, 0x80, 0xc9, 0x61, 0x33, 0x3e, 0x6c, 0x51, 0x6e, 0xc4, 0x29, + 0x8a, 0x71, 0x12, 0xef, 0xe4, 0x59, 0xe1, 0xe9, 0x2e, 0x82, 0x1c, 0x74, + 0xd5, 0x89, 0x6c, 0xdf, 0x22, 0x9a, 0x79, 0x85, 0x29, 0xeb, 0x50, 0x48, + 0x08, 0x8a, 0x4d, 0x9b, 0xb1, 0x05, 0xe5, 0x4c, 0x00, 0x6a, 0x5c, 0x15, + 0xa4, 0x69, 0x23, 0x90, 0x92, 0x72, 0xaf, 0xa9, 0xb6, 0xd5, 0x66, 0x1f, + 0x7a, 0xf1, 0x6d, 0x15, 0xa6, 0x98, 0xd2, 0x13, 0xc5, 0x1d, 0x77, 0x1a, + 0xd0, 0xb1, 0x4b, 0xa6, 0x41, 0xc7, 0x62, 0xa2, 0x92, 0xec, 0x5a, 0x03, + 0x72, 0xd6, 0x35, 0x01, 0xb5, 0xbe, 0xcb, 0xf2, 0x47, 0x31, 0xe2, 0x83, + 0xdc, 0x42, 0x46, 0xe3, 0x65, 0x2a, 0x55, 0x44, 0xbf, 0xe9, 0x9a, 0x71, + 0xd0, 0x59, 0x74, 0xcc, 0x2b, 0x9d, 0xdc, 0xb3, 0x4c, 0x0a, 0xd9, 0xa0, + 0x57, 0xba, 0x0d, 0xf0, 0x5c, 0x56, 0xb8, 0x85, 0x4e, 0x01, 0x65, 0x5b, + 0xaf, 0x21, 0xc9, 0xa5, 0x07, 0x99, 0x83, 0xd3, 0x22, 0x52, 0x50, 0x49, + 0xe0, 0x81, 0x11, 0x03, 0xa1, 0x01, 0xbb, 0x51, 0x63, 0x53, 0x8c, 0x6d, + 0x27, 0xa4, 0x77, 0xb4, 0xf9, 0x56, 0xf1, 0x96, 0x7f, 0x44, 0x5a, 0x22, + 0x01, 0xd9, 0x90, 0xd3, 0x04, 0x75, 0x5e, 0xea, 0x54, 0x82, 0x81, 0x30, + 0x89, 0xa3, 0xc4, 0x91, 0x10, 0x31, 0xfb, 0x49, 0xb3, 0x80, 0xd1, 0x3f, + 0xa2, 0xc8, 0xa9, 0xba, 0x7b, 0x43, 0x9b, 0x3b, 0x51, 0x02, 0xb8, 0x32, + 0xdc, 0x65, 0x38, 0x7f, 0xa4, 0x1b, 0x4e, 0x79, 0x59, 0xbc, 0xb7, 0x90, + 0xab, 0xc5, 0x1b, 0xc3, 0x06, 0x08, 0x55, 0x5a, 0x80, 0xc4, 0x98, 0x4a, + 0xf0, 0xb8, 0x0c, 0xbd, 0x18, 0x29, 0xfa, 0xb6, 0xc7, 0xba, 0xf8, 0x70, + 0xd7, 0xb7, 0x6d, 0x55, 0x67, 0x24, 0x56, 0xfc, 0x3a, 0xae, 0x7a, 0x4f, + 0xa4, 0x66, 0xcf, 0x64, 0xb4, 0x34, 0x82, 0xe5, 0x3d, 0xff, 0xd1, 0x86, + 0x2f, 0x32, 0xbe, 0x37, 0x18, 0xce, 0x4d, 0x21, 0xc5, 0x7b, 0x89, 0x4a, + 0x31, 0x93, 0xc3, 0xdc, 0x8a, 0x03, 0xa3, 0x4a, 0xa3, 0x78, 0x06, 0xb6, + 0xa3, 0x59, 0x25, 0xc3, 0x65, 0xeb, 0x01, 0xb4, 0x83, 0x5f, 0x4a, 0xe9, + 0x8a, 0xc6, 0x90, 0x80, 0x87, 0x0e, 0x7c, 0xc1}, + // cipherTextDigest + {0x7a, 0x7a, 0xca, 0x7f, 0xca, 0xbc, 0x88, 0x74, 0xfc, 0xf4, 0x14, + 0xdf, 0xbd, 0xd6, 0xcb, 0x38, 0x3a, 0xe8, 0x2f, 0x88, 0xa7, 0x09, + 0x71, 0x2a, 0xa5, 0x95, 0x25, 0x03, 0xe2, 0xde, 0x17, 0x30}, + // secret + {0xe8, 0xaf, 0x40, 0xef, 0x16, 0xc0, 0x53, 0xf4, 0xce, 0x74, 0xa8, + 0x2a, 0xfd, 0x44, 0xad, 0x31, 0x29, 0xff, 0x72, 0xfb, 0x6c, 0xce, + 0x84, 0xa4, 0xc8, 0xf7, 0x29, 0xb6, 0x61, 0x33, 0xbc, 0xb7}, + true}, + // tcID: 28 + {28, + params_ml_kem768_test_mode, + // entropy + {0xde, 0xae, 0x13, 0xa4, 0x0f, 0x06, 0x0c, 0x5a, 0x15, 0x48, 0x26, + 0xd5, 0xfd, 0xac, 0x7c, 0x27, 0x1e, 0x2a, 0x7c, 0x8b, 0xd3, 0xfc, + 0xc2, 0x11, 0x02, 0x7f, 0x4b, 0x7c, 0x2e, 0x67, 0xc0, 0xfc}, + // publicKey + {0x62, 0x38, 0x7a, 0x61, 0x99, 0x93, 0xb5, 0xd9, 0x56, 0x7c, 0xe8, 0x36, + 0x76, 0x99, 0x4d, 0xc5, 0x4c, 0x46, 0xd6, 0xe3, 0x80, 0xa8, 0x94, 0x4e, + 0x0d, 0xc6, 0x0d, 0xd6, 0x31, 0x24, 0x60, 0xe6, 0x98, 0xcf, 0xa6, 0xae, + 0xc0, 0xab, 0x44, 0x0c, 0x3a, 0x3d, 0x93, 0xf2, 0x1f, 0x65, 0xa0, 0x5b, + 0x42, 0x93, 0x3c, 0xa5, 0x38, 0x10, 0x8b, 0xe5, 0x23, 0x5f, 0x8a, 0x69, + 0xb5, 0x05, 0xcc, 0x2e, 0xd8, 0x4c, 0xc0, 0x60, 0x6e, 0xec, 0x5b, 0x14, + 0x49, 0xbc, 0x5f, 0x12, 0x04, 0x80, 0x74, 0xf0, 0x59, 0x85, 0x42, 0x9a, + 0xfb, 0x6c, 0x9f, 0xbb, 0x71, 0x40, 0xc2, 0x80, 0x19, 0xbf, 0x78, 0x3c, + 0xe9, 0x87, 0x77, 0x49, 0x51, 0x6c, 0xfc, 0x76, 0x96, 0x99, 0x25, 0xa0, + 0x94, 0x51, 0xa2, 0x77, 0x89, 0x3c, 0xe3, 0x28, 0x0a, 0xd7, 0xda, 0xce, + 0xd8, 0xc6, 0x66, 0x15, 0xe0, 0x74, 0xd4, 0x71, 0x61, 0x03, 0xca, 0x5c, + 0x10, 0x75, 0x70, 0x27, 0x99, 0x5f, 0x8f, 0x98, 0xac, 0xd1, 0x41, 0xaf, + 0xdb, 0x4c, 0xb1, 0x53, 0x10, 0x89, 0x52, 0x5b, 0xaa, 0x01, 0xb9, 0x06, + 0xba, 0x4a, 0xbd, 0x0d, 0x6c, 0x18, 0x6a, 0xdc, 0x3b, 0x96, 0x69, 0x19, + 0x65, 0xa8, 0x83, 0x03, 0x4c, 0x53, 0xe5, 0x02, 0x68, 0xbf, 0x8a, 0x6c, + 0xd9, 0x54, 0x11, 0x5f, 0xf6, 0x4d, 0x6c, 0x96, 0x30, 0xce, 0xf8, 0x28, + 0x8e, 0x63, 0x95, 0xc2, 0xea, 0x01, 0x1c, 0xbb, 0x31, 0x70, 0xf7, 0x9d, + 0xfa, 0x07, 0x59, 0xf1, 0xd1, 0xcd, 0xc4, 0x75, 0x05, 0x9f, 0xfc, 0xc3, + 0x75, 0xdb, 0xa3, 0xad, 0x9b, 0x06, 0x42, 0x30, 0x83, 0x30, 0x60, 0xc8, + 0x03, 0x18, 0x29, 0x57, 0xf8, 0x0e, 0xc9, 0x77, 0x2d, 0xc2, 0x35, 0xa5, + 0x8b, 0x16, 0xc3, 0x8a, 0x36, 0x51, 0x76, 0xf3, 0x14, 0x7c, 0x5b, 0x52, + 0x4a, 0xa1, 0x3e, 0x22, 0x96, 0xa3, 0x6f, 0x29, 0x64, 0xc1, 0x63, 0x8f, + 0xd8, 0xf7, 0x57, 0x0c, 0xc5, 0x72, 0xd7, 0xd6, 0x9e, 0x2b, 0x81, 0x98, + 0x5c, 0x58, 0x0a, 0x9b, 0x8b, 0xbf, 0xf0, 0x8a, 0x3f, 0xcc, 0x75, 0x7f, + 0xee, 0x60, 0x40, 0xfd, 0xec, 0x78, 0x52, 0xa3, 0x2a, 0x05, 0xd5, 0x1d, + 0x8f, 0xf3, 0x38, 0xc0, 0x73, 0x02, 0x42, 0xca, 0x6d, 0xb2, 0xa4, 0xba, + 0xee, 0x99, 0xc2, 0x97, 0x49, 0xa3, 0x3e, 0x13, 0x96, 0xfc, 0x68, 0x0b, + 0x6a, 0x75, 0x89, 0x08, 0x94, 0x77, 0xdc, 0xf4, 0x4f, 0xea, 0x18, 0xaa, + 0x2c, 0x92, 0x59, 0x00, 0x20, 0x32, 0x00, 0xad, 0x14, 0x58, 0x52, 0x39, + 0xf0, 0x72, 0x7b, 0x43, 0x87, 0x53, 0x0b, 0xf6, 0x8f, 0x7e, 0x07, 0x7e, + 0x62, 0xa1, 0x08, 0x58, 0x1c, 0x81, 0x27, 0xfb, 0x1c, 0x5d, 0xbb, 0x5e, + 0x04, 0x58, 0x2e, 0x74, 0x68, 0x94, 0xd2, 0x51, 0x69, 0x95, 0x43, 0x4d, + 0x81, 0x38, 0x0f, 0xfd, 0x37, 0x4a, 0x06, 0x41, 0x77, 0x6b, 0x21, 0x8e, + 0x38, 0xc9, 0x78, 0x62, 0x2a, 0x5b, 0xe4, 0xec, 0x60, 0x72, 0xe3, 0x8a, + 0x1f, 0x02, 0x89, 0xb0, 0x60, 0xc2, 0xde, 0xc9, 0x1e, 0x7f, 0x76, 0x37, + 0x02, 0xf1, 0x78, 0x03, 0xa5, 0x8f, 0x09, 0x42, 0x50, 0xd2, 0xe1, 0x67, + 0x0c, 0x7b, 0x90, 0xf0, 0x77, 0x83, 0x65, 0xe8, 0xbf, 0xeb, 0x2b, 0x35, + 0x56, 0xb1, 0x68, 0xfe, 0x55, 0xb8, 0x54, 0x08, 0x9e, 0x52, 0xe0, 0xa2, + 0xb8, 0xd8, 0x32, 0xda, 0x57, 0xae, 0x35, 0x50, 0x91, 0xc8, 0x76, 0xae, + 0x67, 0xb3, 0x67, 0xca, 0x86, 0x6a, 0x1c, 0x35, 0x97, 0xad, 0x4c, 0xcf, + 0x4e, 0x5b, 0x2f, 0xce, 0x07, 0x88, 0x59, 0x31, 0x41, 0xd2, 0xc0, 0xcb, + 0x6b, 0x3c, 0x9b, 0x80, 0xd3, 0x44, 0x5f, 0x99, 0x2e, 0xbf, 0xe9, 0x8f, + 0x26, 0xda, 0x68, 0xd0, 0x36, 0x69, 0x50, 0x3a, 0x0e, 0xc6, 0x96, 0xb4, + 0x30, 0xb2, 0x21, 0x7e, 0xd9, 0xc4, 0xb6, 0xcb, 0x22, 0xbb, 0x3a, 0x91, + 0xd6, 0xaa, 0x6c, 0x1a, 0x2a, 0x3f, 0x36, 0x15, 0xbf, 0x67, 0xc5, 0xb4, + 0x20, 0xea, 0xbe, 0x71, 0x59, 0x36, 0x3f, 0x52, 0x5e, 0x5a, 0xf9, 0x04, + 0x9d, 0x4c, 0x0c, 0x9e, 0xd1, 0x97, 0xdd, 0x7b, 0x6f, 0x8b, 0x4c, 0x2f, + 0x66, 0x04, 0xc8, 0xce, 0xa7, 0x57, 0x71, 0xa3, 0xae, 0xec, 0x0c, 0x0e, + 0x8d, 0x1c, 0x8a, 0x6a, 0xe9, 0x4f, 0xc8, 0x48, 0x52, 0x06, 0x21, 0x7c, + 0xf7, 0x85, 0x67, 0x7e, 0x34, 0xc4, 0x58, 0x79, 0x5d, 0x63, 0x03, 0x40, + 0x3f, 0x7a, 0xa4, 0x27, 0x76, 0x3c, 0x5a, 0xdc, 0x4d, 0xff, 0xc8, 0xc2, + 0xfd, 0x42, 0x28, 0x70, 0xb8, 0x76, 0xfa, 0xac, 0x6d, 0x33, 0x49, 0x31, + 0xf0, 0xd7, 0x60, 0xac, 0xf4, 0x09, 0x2a, 0x07, 0x27, 0xf1, 0x93, 0x58, + 0x55, 0xb2, 0x06, 0x98, 0xb5, 0xc8, 0xb2, 0x87, 0x95, 0x76, 0xa2, 0x5d, + 0x9a, 0x9b, 0x93, 0x86, 0x20, 0x79, 0xdc, 0x02, 0xcc, 0x30, 0xc7, 0x31, + 0xfd, 0xb7, 0x02, 0x1c, 0x96, 0x31, 0xc4, 0x32, 0x30, 0xa6, 0xfc, 0x6d, + 0xda, 0x19, 0x56, 0xf3, 0xea, 0x01, 0xdc, 0xaa, 0x64, 0x35, 0x40, 0x60, + 0xcd, 0x4c, 0x67, 0xe1, 0x14, 0x99, 0x15, 0xa4, 0x23, 0xfc, 0xe3, 0x16, + 0x62, 0x72, 0xb2, 0xe3, 0xb7, 0x1e, 0x3b, 0xb5, 0x09, 0xae, 0x97, 0x8d, + 0x88, 0x85, 0x9b, 0x55, 0xe5, 0x0d, 0x33, 0x8b, 0x70, 0x3e, 0x1b, 0x1d, + 0x77, 0xd4, 0x42, 0x12, 0xe0, 0x0d, 0x51, 0x06, 0x95, 0x97, 0x4a, 0x07, + 0xb8, 0x25, 0x00, 0x53, 0xb7, 0x12, 0x98, 0x89, 0x76, 0x9b, 0x49, 0x91, + 0xb5, 0x08, 0x3e, 0x05, 0xd0, 0x05, 0x4f, 0xc4, 0xce, 0xa1, 0x8c, 0x0a, + 0x42, 0x91, 0x29, 0x85, 0x78, 0xbd, 0x53, 0xb1, 0x1d, 0x17, 0x4c, 0x6f, + 0xae, 0xbb, 0x6e, 0x59, 0x19, 0xb2, 0xe7, 0xbb, 0x7a, 0x4c, 0xa9, 0xc9, + 0x4e, 0x45, 0xac, 0xc1, 0x67, 0x4d, 0x5d, 0x99, 0x4d, 0x2a, 0xf8, 0x1c, + 0xaa, 0xc6, 0xa1, 0x53, 0x33, 0x4a, 0x1b, 0x77, 0x09, 0x37, 0xf1, 0x4d, + 0xc2, 0x69, 0x67, 0x21, 0x66, 0x5f, 0x87, 0x75, 0x1b, 0x60, 0x8c, 0x92, + 0x1b, 0x98, 0x52, 0x15, 0xf4, 0x0e, 0xb2, 0x8b, 0xa6, 0x32, 0x53, 0x31, + 0x19, 0x61, 0x8a, 0x97, 0xd0, 0x76, 0x6f, 0xd7, 0x80, 0x73, 0x18, 0x57, + 0x1e, 0xf8, 0x30, 0x51, 0x75, 0x72, 0x4e, 0x54, 0xca, 0x26, 0x1a, 0x03, + 0xb8, 0x24, 0x3b, 0x7d, 0x10, 0x87, 0xf7, 0x0a, 0x39, 0xa7, 0xfc, 0xbb, + 0x0b, 0x22, 0x3c, 0xbd, 0x11, 0xae, 0xfe, 0xa9, 0xbb, 0xa4, 0x83, 0x3f, + 0xbe, 0xd9, 0x8e, 0xd4, 0x81, 0x20, 0xb3, 0xcb, 0x50, 0x7c, 0x2c, 0x27, + 0x2e, 0x7a, 0x6e, 0xe6, 0xc9, 0x2e, 0xe5, 0x40, 0x1b, 0x65, 0x34, 0x51, + 0x82, 0xc3, 0x19, 0x01, 0xf1, 0xc0, 0xa8, 0x27, 0x43, 0xc2, 0x51, 0x2a, + 0x39, 0x2c, 0x3b, 0x6b, 0xb7, 0x3f, 0xad, 0xd8, 0x91, 0x31, 0xfb, 0xb6, + 0x56, 0x10, 0xc9, 0x40, 0x7c, 0x62, 0x86, 0x0b, 0x7e, 0xf8, 0x94, 0xcd, + 0x35, 0x3c, 0x02, 0xe3, 0x47, 0x42, 0x41, 0x85, 0xc2, 0x7a, 0x06, 0x20, + 0x99, 0x14, 0x44, 0x4f, 0xba, 0x9c, 0x75, 0x1c, 0xc2, 0x7d, 0x50, 0x52, + 0x75, 0x31, 0xb2, 0x82, 0xa6, 0xc5, 0x03, 0x59, 0x45, 0x71, 0xca, 0x89, + 0x75, 0x9c, 0x34, 0x56, 0x32, 0xad, 0x2a, 0xc2, 0x4d, 0xae, 0x86, 0x2e, + 0xe0, 0x91, 0xc4, 0xf4, 0x21, 0x19, 0x4a, 0xcc, 0xc9, 0xf4, 0x57, 0x92, + 0xb6, 0x9c, 0x12, 0x21, 0x5b, 0x87, 0x8a, 0x4a, 0xce, 0x97, 0x5b, 0x29, + 0x5c, 0x67, 0x22, 0x88, 0x47, 0x2a, 0x2b, 0x5c, 0xb3, 0x86, 0x5c, 0x78, + 0x7f, 0x7a, 0x3d, 0xb6, 0x06, 0x08, 0xe6, 0x48, 0xa1, 0x1e, 0x6b, 0xbc, + 0xa3, 0x84, 0x56, 0xf9, 0x3c, 0xb4, 0xce, 0x2c, 0x31, 0xff, 0x1b, 0x66, + 0x0a, 0x09, 0x68, 0x32, 0xe5, 0x18, 0xb6, 0xb7, 0x03, 0x2c, 0x20, 0xad, + 0xb3, 0x83, 0x0e, 0x98, 0x24, 0x30, 0xef, 0xe6, 0x61, 0xc3, 0xe5, 0x08, + 0x02, 0x48, 0x7c, 0xee, 0xdb, 0x0f, 0xd8, 0xa0, 0x04, 0xa7, 0x26, 0x34, + 0x83, 0xf1, 0xb4, 0x12, 0x27, 0xb9, 0x6c, 0x20, 0x7e, 0xb1, 0xb2, 0x13, + 0x10, 0x82, 0xcd, 0x85, 0x24, 0x43, 0x10, 0xab, 0x6d, 0x09, 0xd4, 0xa7, + 0x3d, 0x43, 0x6b, 0xf3, 0xe8, 0xa2, 0x75, 0xab, 0xbe, 0xad, 0x80, 0x49, + 0x68, 0xf9, 0xa5, 0xad, 0xf2, 0x26, 0x4f, 0x89, 0x74, 0x63, 0xd7, 0x1f, + 0xb0, 0x9a, 0x79, 0x7e, 0xa5, 0x00, 0xb6, 0x71, 0xc0, 0x06, 0x2c, 0x04, + 0xb9, 0x11, 0x60, 0x62, 0x93, 0xb8, 0xc7, 0xba, 0x61, 0x86, 0xc2, 0xa2, + 0xdd, 0xf0, 0x74, 0xc2, 0xa6, 0xf3, 0x6d, 0x35, 0x79, 0x6e, 0xf0, 0xff, + 0x1c, 0xf8, 0xe4, 0x72, 0x73, 0x04, 0x8f, 0x82, 0xa8, 0xf0, 0x0a, 0xa9, + 0x04, 0x0d, 0x87, 0xcb, 0x05, 0x86, 0xd9, 0x68}, + // cipherTextDigest + {0x21, 0x8f, 0x60, 0x7e, 0xc3, 0xc7, 0x22, 0x05, 0x3a, 0x22, 0x98, + 0x78, 0x25, 0xc0, 0x1f, 0xf5, 0x6b, 0x95, 0x83, 0xe6, 0xef, 0x62, + 0x74, 0xfb, 0xd0, 0xef, 0x34, 0xc6, 0x7d, 0xe6, 0x64, 0xb3}, + // secret + {0xd5, 0x72, 0x2b, 0xd3, 0xf3, 0x38, 0xd3, 0xa4, 0xaa, 0xac, 0xbd, + 0xe9, 0x5e, 0x27, 0x68, 0xbf, 0xdc, 0xa8, 0x19, 0xf7, 0x19, 0xba, + 0xdd, 0x1c, 0x8f, 0xaa, 0xcf, 0x85, 0x9f, 0xe6, 0x5e, 0xa0}, + true}, + // tcID: 29 + {29, + params_ml_kem768_test_mode, + // entropy + {0xc4, 0x31, 0x6d, 0xd2, 0x6d, 0xf6, 0x72, 0xf2, 0xc7, 0x33, 0xaf, + 0xa7, 0x59, 0x04, 0x22, 0x9b, 0x72, 0x2c, 0xec, 0x9c, 0x4a, 0x5a, + 0xda, 0xa2, 0x4c, 0x6d, 0xaa, 0x6d, 0x6f, 0xa5, 0x71, 0x94}, + // publicKey + {0xc1, 0x72, 0x92, 0xbc, 0x11, 0x74, 0x76, 0xf8, 0x1c, 0x31, 0x9c, 0xc2, + 0x52, 0x38, 0x75, 0xf5, 0x30, 0x97, 0x94, 0xd2, 0xb7, 0xaa, 0x85, 0xac, + 0x7a, 0xfc, 0x08, 0xae, 0xd5, 0xb2, 0x83, 0xf5, 0xa1, 0x6a, 0x72, 0x74, + 0xf8, 0x0a, 0x48, 0x4d, 0x92, 0x92, 0xd4, 0x40, 0xb4, 0xdd, 0x45, 0x37, + 0xc0, 0xe3, 0x70, 0x40, 0x83, 0x5a, 0xba, 0x55, 0x62, 0x31, 0x40, 0x69, + 0xe5, 0x26, 0x2e, 0x82, 0x18, 0xc1, 0x91, 0x68, 0x64, 0x59, 0xe8, 0x02, + 0x01, 0x37, 0x97, 0x60, 0xd5, 0x50, 0x54, 0xf1, 0x1d, 0x53, 0x64, 0x71, + 0x35, 0xa5, 0xa6, 0x29, 0x72, 0xc7, 0xec, 0x5c, 0x9a, 0x42, 0x6a, 0x8d, + 0x8f, 0xd9, 0xc7, 0x12, 0xb4, 0xb5, 0x10, 0xa6, 0x70, 0xcf, 0x54, 0xa1, + 0xce, 0x31, 0x27, 0xea, 0xb8, 0x0a, 0x3f, 0x8b, 0xb0, 0xaa, 0x22, 0x8e, + 0x5c, 0x22, 0xa3, 0x79, 0x47, 0x67, 0xcc, 0x04, 0x0d, 0xf1, 0x37, 0x64, + 0xcb, 0x69, 0x53, 0xfe, 0xa7, 0x62, 0x26, 0x9b, 0xc8, 0xd5, 0xd1, 0x69, + 0x61, 0x9c, 0x80, 0xe0, 0x16, 0x0d, 0x99, 0x0a, 0x3b, 0xb4, 0x12, 0x97, + 0x08, 0x61, 0x10, 0x05, 0x01, 0x45, 0xd8, 0xea, 0x48, 0xbf, 0x50, 0x3c, + 0x4c, 0x64, 0x14, 0xbe, 0x73, 0x2b, 0x2b, 0xa8, 0x3f, 0x58, 0x3b, 0x3e, + 0xde, 0x75, 0xc4, 0x86, 0xd5, 0x69, 0x49, 0xa2, 0xae, 0xbc, 0x82, 0x45, + 0x95, 0x26, 0xbb, 0xa7, 0x15, 0x25, 0x30, 0x1c, 0x17, 0x8b, 0x2b, 0x0f, + 0xb5, 0xa7, 0xc2, 0xca, 0xc4, 0x80, 0x47, 0x32, 0x80, 0xd5, 0x0b, 0xcb, + 0xdd, 0xa2, 0x1c, 0x87, 0x6b, 0x3a, 0x6b, 0x99, 0xbd, 0x32, 0xc2, 0x7a, + 0x1a, 0x08, 0x1e, 0x36, 0xba, 0x72, 0xde, 0xc5, 0x99, 0xfa, 0x97, 0x6d, + 0xa3, 0x18, 0x0d, 0xec, 0x4a, 0x8b, 0x13, 0x41, 0x96, 0xe5, 0xe0, 0x11, + 0x22, 0xa2, 0x66, 0xcf, 0xd7, 0x9a, 0xab, 0xba, 0x26, 0xf1, 0x83, 0x36, + 0xdf, 0x74, 0x59, 0x3e, 0x29, 0x6c, 0xdc, 0x0a, 0x77, 0x0e, 0xb8, 0x0f, + 0x08, 0xd3, 0x29, 0x06, 0x07, 0xae, 0x95, 0x86, 0x7d, 0x1f, 0xa5, 0xa0, + 0x5e, 0x45, 0x21, 0x91, 0x03, 0x04, 0xd2, 0x03, 0x20, 0x14, 0x52, 0x19, + 0xf3, 0x73, 0x7a, 0xee, 0xa8, 0xc5, 0xa9, 0x4a, 0x63, 0xaa, 0xdc, 0x06, + 0xec, 0xe1, 0xaa, 0xd7, 0x14, 0xc2, 0x5c, 0x24, 0x43, 0x60, 0xdc, 0x49, + 0xfd, 0x79, 0x84, 0x7f, 0xfb, 0x2d, 0x0b, 0xa2, 0x0d, 0xe3, 0x74, 0xa1, + 0xb5, 0xf5, 0x4d, 0xa9, 0xb3, 0xa0, 0xef, 0x58, 0x24, 0xe3, 0x39, 0xbc, + 0x58, 0xb5, 0x52, 0xfd, 0xdc, 0x72, 0x04, 0x5b, 0x1f, 0xd8, 0xfb, 0xa9, + 0x20, 0x87, 0x4d, 0xb5, 0x09, 0x61, 0xc3, 0xd4, 0xbf, 0x0d, 0x1a, 0x12, + 0x12, 0xec, 0x58, 0xc9, 0x72, 0x0d, 0xa1, 0xfc, 0xcf, 0x3d, 0x77, 0x11, + 0xeb, 0x4a, 0x5c, 0x20, 0x57, 0x44, 0xb3, 0xac, 0x0a, 0xd5, 0x71, 0xac, + 0x8d, 0x9c, 0x34, 0x5a, 0xbc, 0x57, 0x1e, 0x65, 0x11, 0x26, 0x86, 0x36, + 0x14, 0x02, 0x39, 0x3f, 0xea, 0x67, 0x12, 0xdc, 0x32, 0x3d, 0x88, 0x13, + 0x26, 0x99, 0x73, 0x8b, 0x89, 0x28, 0x73, 0x88, 0x38, 0x8a, 0x14, 0x96, + 0x38, 0x99, 0x36, 0x29, 0xf8, 0xb5, 0x9a, 0xe6, 0x23, 0xab, 0xc3, 0x7f, + 0xab, 0xc3, 0x85, 0xd3, 0x6c, 0xad, 0xbd, 0x6c, 0x6f, 0x54, 0xb9, 0x73, + 0x10, 0xa0, 0x6b, 0xb5, 0x32, 0x3c, 0x42, 0xa6, 0x6f, 0x97, 0x32, 0x37, + 0xa6, 0x26, 0xaf, 0xce, 0x62, 0x0d, 0xcb, 0x88, 0x96, 0x7b, 0xe7, 0xc8, + 0xba, 0xc4, 0x79, 0xd6, 0xc1, 0x88, 0x72, 0x01, 0xbb, 0x44, 0xe1, 0xa7, + 0x5a, 0xc3, 0x51, 0x75, 0x41, 0x35, 0xa8, 0x1c, 0x79, 0x9f, 0x26, 0x35, + 0x8b, 0x9c, 0x79, 0x48, 0xb5, 0x64, 0xd6, 0xc8, 0x8d, 0xcc, 0x07, 0x5e, + 0xee, 0x7a, 0x25, 0x6e, 0xc4, 0x98, 0x61, 0xcb, 0x2e, 0x8f, 0x28, 0x42, + 0x2e, 0x36, 0x2f, 0x4d, 0x6a, 0xce, 0x1e, 0x94, 0xaa, 0x6c, 0xaa, 0x1e, + 0x15, 0xda, 0xc4, 0xd6, 0xf0, 0x68, 0x3b, 0x15, 0x6a, 0x71, 0x80, 0x7c, + 0xee, 0x81, 0x09, 0x15, 0xf4, 0xad, 0xf6, 0x87, 0x36, 0x38, 0x7c, 0x70, + 0x89, 0xb2, 0x43, 0x55, 0xd2, 0x14, 0x65, 0xa7, 0xbb, 0x71, 0xb3, 0xcc, + 0xc5, 0x98, 0x9c, 0x54, 0xc9, 0xb7, 0xc5, 0xb2, 0x82, 0x3b, 0x49, 0x6a, + 0x2f, 0xd2, 0x3a, 0x7a, 0x99, 0x4a, 0x77, 0x88, 0xb9, 0x1f, 0xa1, 0x4d, + 0x05, 0x30, 0x6d, 0x86, 0x12, 0x5f, 0x33, 0xf3, 0x42, 0xa1, 0x1a, 0xc5, + 0x3c, 0xc8, 0x83, 0x88, 0x59, 0xcc, 0x07, 0x40, 0xb6, 0xcd, 0xdb, 0x9b, + 0x2e, 0x53, 0xc4, 0xa2, 0xd1, 0x33, 0x91, 0x96, 0x7a, 0x5e, 0x31, 0x97, + 0x99, 0x84, 0x94, 0x69, 0x9a, 0xc8, 0x40, 0x28, 0xb7, 0x51, 0x39, 0x9a, + 0xce, 0x99, 0x8e, 0x26, 0xb8, 0x18, 0xb9, 0x4c, 0xbe, 0xf7, 0x8a, 0xc9, + 0x71, 0x70, 0x99, 0x04, 0x31, 0xba, 0x7b, 0xa2, 0x2b, 0x88, 0x91, 0xcd, + 0xcb, 0xf6, 0x24, 0x13, 0xd5, 0x85, 0xad, 0x64, 0x88, 0xcc, 0xda, 0x19, + 0x4d, 0xf8, 0x92, 0x22, 0x69, 0x9b, 0xc7, 0x7a, 0x71, 0xb4, 0x3a, 0x80, + 0xa9, 0x53, 0x36, 0xf9, 0x78, 0x96, 0x71, 0x16, 0xb7, 0x05, 0x91, 0x53, + 0xcf, 0x34, 0x4b, 0x02, 0xb0, 0xcf, 0xd7, 0x8b, 0xae, 0x75, 0x47, 0x84, + 0x9d, 0xd1, 0x06, 0xa3, 0x17, 0x0a, 0x99, 0xfb, 0xce, 0x07, 0x06, 0x7d, + 0x06, 0x35, 0x4a, 0x0e, 0x86, 0xc6, 0xd1, 0x06, 0xa2, 0xf5, 0x13, 0xa8, + 0x39, 0x66, 0x0c, 0xa2, 0x94, 0x2a, 0x51, 0xd9, 0xa4, 0x63, 0x02, 0x7e, + 0xc2, 0xe5, 0xb5, 0x74, 0xb7, 0x95, 0xd5, 0x9b, 0xc3, 0xbf, 0xa4, 0x06, + 0xb6, 0xa9, 0x9b, 0xed, 0x62, 0xa6, 0x3b, 0x37, 0xb2, 0x7c, 0x5b, 0x40, + 0xc4, 0x58, 0x71, 0xc5, 0xcb, 0x50, 0x3d, 0x06, 0x2e, 0x25, 0x5c, 0x48, + 0xd2, 0x83, 0x5f, 0xdf, 0x89, 0x46, 0x72, 0x50, 0xcc, 0xc4, 0xea, 0xa3, + 0x2d, 0xec, 0x2b, 0x05, 0xc0, 0x4e, 0x55, 0x5c, 0x5f, 0xbc, 0xe3, 0xcd, + 0xc6, 0xc8, 0x55, 0xe6, 0x54, 0x50, 0x62, 0xb4, 0xc8, 0xd4, 0x59, 0x9d, + 0x83, 0x71, 0x7f, 0x03, 0x12, 0x47, 0x27, 0xe4, 0x5b, 0x53, 0x83, 0xbd, + 0x3a, 0xf0, 0x81, 0x44, 0xe7, 0xba, 0xdf, 0x06, 0x2f, 0x1f, 0x20, 0x09, + 0x33, 0x60, 0x78, 0xa7, 0xa6, 0x2c, 0xf2, 0x70, 0x66, 0x42, 0xb2, 0xbd, + 0xa3, 0x23, 0xc4, 0x34, 0x95, 0xcd, 0x8c, 0x06, 0x7d, 0x89, 0x14, 0x64, + 0x0c, 0xb8, 0x66, 0x07, 0x59, 0x97, 0x0f, 0x66, 0x5f, 0x8e, 0x28, 0x2c, + 0x9c, 0xac, 0x64, 0x7d, 0x70, 0x9a, 0xd6, 0x00, 0xab, 0x8b, 0x67, 0xc9, + 0xde, 0x7a, 0x36, 0xa1, 0x48, 0x2c, 0x2a, 0x94, 0xaa, 0x1e, 0x21, 0x4c, + 0xee, 0x1a, 0x68, 0x56, 0x66, 0x49, 0xca, 0x5b, 0x85, 0x53, 0xa6, 0x40, + 0x49, 0x34, 0x21, 0x9b, 0xf1, 0xc0, 0x76, 0x57, 0xc8, 0x2f, 0x48, 0xc3, + 0xbd, 0xb0, 0x0b, 0xc0, 0xb3, 0x94, 0x32, 0x7c, 0x75, 0x10, 0x2b, 0xc1, + 0x0b, 0x57, 0x56, 0xad, 0x40, 0x49, 0x30, 0xca, 0x4d, 0xc8, 0xab, 0xa2, + 0x48, 0x68, 0x75, 0xaf, 0xa5, 0x8b, 0xd8, 0x1b, 0x83, 0xf0, 0x8b, 0x9f, + 0xed, 0xf8, 0x02, 0x62, 0x65, 0x18, 0xb9, 0x44, 0x1c, 0x00, 0x49, 0xa9, + 0x8c, 0xb0, 0xc8, 0xe5, 0xf1, 0x32, 0xa0, 0x73, 0x8a, 0xcb, 0xf3, 0x23, + 0xb3, 0x57, 0x7e, 0xc9, 0x06, 0x94, 0x08, 0x71, 0x94, 0x7f, 0x85, 0x6c, + 0x59, 0x10, 0x47, 0xc1, 0xc6, 0x68, 0x83, 0xf0, 0x40, 0xa6, 0x99, 0x51, + 0x17, 0xb8, 0xab, 0x51, 0xe5, 0xb8, 0x82, 0x07, 0xa8, 0x4e, 0x3c, 0x72, + 0x39, 0x26, 0x6b, 0x13, 0x79, 0x0c, 0x56, 0x18, 0x76, 0xc9, 0x9c, 0x64, + 0xda, 0x8b, 0x94, 0x65, 0x62, 0x7c, 0x59, 0xfb, 0x1f, 0x74, 0x09, 0x51, + 0xc9, 0x06, 0xb5, 0x40, 0xb5, 0x92, 0xbd, 0x64, 0x67, 0xe1, 0x63, 0x24, + 0x59, 0x49, 0x74, 0xe6, 0x93, 0x3c, 0x6e, 0x50, 0x97, 0x08, 0xb5, 0x6d, + 0x41, 0x76, 0x6d, 0x4a, 0x59, 0x59, 0x7b, 0xcb, 0x5a, 0xb9, 0x02, 0xb8, + 0x6c, 0xa3, 0xb4, 0xf8, 0xac, 0x29, 0xdd, 0x4c, 0xa3, 0x59, 0xa8, 0xc3, + 0xcc, 0x70, 0x56, 0x3b, 0x0c, 0xab, 0x3e, 0x55, 0x9c, 0x3f, 0x15, 0x07, + 0xf5, 0x4c, 0x2f, 0xa6, 0x1a, 0x38, 0x3d, 0x21, 0x70, 0x71, 0xc4, 0xc7, + 0x04, 0x51, 0x41, 0x50, 0xaa, 0xcb, 0xd9, 0xb0, 0x20, 0x00, 0xa4, 0x8d, + 0xe2, 0x60, 0x5a, 0xfc, 0x8a, 0x14, 0x2b, 0x49, 0xb9, 0x5c, 0xca, 0x44, + 0xa9, 0xce, 0xde, 0x03, 0x53, 0x27, 0xb2, 0xbc, 0x1b, 0x77, 0x0b, 0xc0, + 0xc3, 0xee, 0x6d, 0xbd, 0x74, 0xfc, 0x9d, 0x39, 0x48, 0xa4, 0x6e, 0x44, + 0x29, 0xff, 0x6d, 0x3b, 0x5c, 0xc6, 0xa0, 0x18}, + // cipherTextDigest + {0x65, 0xac, 0x60, 0xd9, 0x1b, 0x49, 0xc4, 0x81, 0x5f, 0xa5, 0xb6, + 0x3b, 0x07, 0x2b, 0xd0, 0x64, 0x5d, 0x48, 0xd2, 0x22, 0x72, 0xd1, + 0xbd, 0x12, 0x52, 0x9f, 0x7c, 0x76, 0xbb, 0x01, 0x89, 0xa2}, + // secret + {0x63, 0x09, 0x4a, 0xde, 0xd3, 0x24, 0x51, 0xc9, 0xc6, 0xee, 0x79, + 0x2a, 0x74, 0x95, 0x71, 0x5b, 0x0a, 0xa3, 0x61, 0x91, 0xf3, 0xc0, + 0xc8, 0x0e, 0x92, 0xe9, 0xd2, 0xbe, 0x48, 0x30, 0x14, 0x83}, + true}, + // tcID: 30 + {30, + params_ml_kem768_test_mode, + // entropy + {0x7d, 0x08, 0xcc, 0x01, 0x42, 0x54, 0xed, 0x16, 0xb7, 0x78, 0x4e, + 0xef, 0x00, 0x45, 0xfa, 0xbe, 0xdc, 0xaf, 0xb0, 0xe1, 0xea, 0x6f, + 0xa3, 0xcb, 0x3b, 0xf9, 0xb0, 0x1f, 0x84, 0x7a, 0x97, 0xcd}, + // publicKey + {0xfd, 0x82, 0x1e, 0x5a, 0xa3, 0x60, 0xb3, 0x1c, 0xc3, 0xe4, 0x98, 0xaa, + 0x04, 0x72, 0x06, 0x48, 0x23, 0x75, 0x97, 0x5b, 0x62, 0x9e, 0xd6, 0xaa, + 0x5c, 0x7a, 0x1e, 0x20, 0x51, 0xa7, 0xa7, 0xb9, 0xb2, 0xbb, 0xfa, 0x92, + 0xc0, 0x32, 0xc2, 0xc0, 0x24, 0x5d, 0x75, 0x04, 0xaf, 0x81, 0x19, 0x7e, + 0x80, 0x87, 0x7a, 0x29, 0x65, 0x6e, 0xef, 0x67, 0x54, 0x12, 0x21, 0xba, + 0x52, 0x65, 0x2d, 0x48, 0xe8, 0x2d, 0x01, 0x30, 0x24, 0xda, 0x57, 0x8c, + 0x2d, 0x51, 0x44, 0xdc, 0x9b, 0x1c, 0x32, 0xc4, 0xc8, 0x40, 0xca, 0xca, + 0x52, 0x66, 0x32, 0x7d, 0xb1, 0x25, 0xda, 0x10, 0xb9, 0x78, 0xa1, 0x51, + 0x41, 0x8a, 0x30, 0x0c, 0xb4, 0x72, 0xd6, 0x95, 0x38, 0x6d, 0x78, 0x42, + 0x62, 0x22, 0x2e, 0x2c, 0xb5, 0x4f, 0x81, 0xb6, 0x2f, 0x39, 0xb4, 0xa8, + 0xfb, 0xa8, 0x21, 0x69, 0x9b, 0x7e, 0xe7, 0xb6, 0x54, 0x09, 0xb5, 0x7e, + 0x2c, 0x99, 0x0d, 0x90, 0x99, 0x1f, 0xe7, 0x12, 0x48, 0x44, 0x53, 0x70, + 0x47, 0xd2, 0xcc, 0x5d, 0x99, 0x46, 0xe6, 0xe5, 0x7b, 0x2f, 0x54, 0x8d, + 0x3c, 0xa6, 0x30, 0x6a, 0x28, 0xa9, 0x2c, 0x3a, 0x29, 0xd5, 0x54, 0x37, + 0x58, 0xa4, 0x1a, 0xbf, 0x7a, 0x08, 0x7f, 0xa7, 0x34, 0xf0, 0xc2, 0x16, + 0x3a, 0x4b, 0x4c, 0x1e, 0x09, 0xc6, 0x4a, 0x6b, 0xa3, 0x9b, 0x1a, 0xcc, + 0x09, 0xeb, 0x48, 0x89, 0xc9, 0x13, 0x66, 0xdb, 0xce, 0xf7, 0x36, 0x99, + 0xa7, 0x21, 0x00, 0xf2, 0x9a, 0x56, 0x6e, 0x14, 0x3a, 0xb2, 0x67, 0xc3, + 0x70, 0xc6, 0x5e, 0x3a, 0x26, 0x8c, 0xbf, 0xf3, 0x50, 0x58, 0x19, 0x57, + 0x3a, 0xe6, 0x95, 0xda, 0x65, 0x5f, 0xf8, 0xf5, 0x0e, 0xcd, 0x86, 0x32, + 0x14, 0x1c, 0x53, 0x22, 0x8a, 0xc4, 0x08, 0xcb, 0x68, 0xa5, 0x64, 0x3a, + 0x44, 0xe1, 0xb2, 0x3a, 0xac, 0x0e, 0x73, 0x10, 0x08, 0xcf, 0xf4, 0x0c, + 0xda, 0x87, 0xa6, 0xfa, 0xfa, 0x19, 0x7d, 0x12, 0xcc, 0x56, 0x5a, 0xad, + 0xfb, 0x72, 0x2a, 0x7b, 0xc7, 0x9a, 0xcd, 0x39, 0x9a, 0x08, 0x74, 0x08, + 0x80, 0x58, 0x99, 0x91, 0xb1, 0x32, 0xa8, 0x06, 0xbd, 0x8f, 0xb4, 0x7e, + 0xc0, 0xc7, 0x54, 0xba, 0x7b, 0x62, 0x08, 0x7a, 0x59, 0xde, 0xb3, 0xbe, + 0x47, 0x89, 0xba, 0x11, 0x00, 0x1c, 0x11, 0x31, 0x77, 0x42, 0x4b, 0x57, + 0x29, 0x01, 0x98, 0xf6, 0xeb, 0x1e, 0x61, 0x82, 0x1e, 0x20, 0xa4, 0xbd, + 0x8c, 0x1a, 0x4c, 0xb2, 0xd9, 0x45, 0xf6, 0x01, 0x37, 0x55, 0x71, 0x35, + 0xdb, 0x45, 0x88, 0xa8, 0x70, 0x58, 0x05, 0x6a, 0x1e, 0xf4, 0x3a, 0x76, + 0xc6, 0xc4, 0xb8, 0x26, 0x86, 0xcc, 0x43, 0x1a, 0x1f, 0x67, 0x11, 0x06, + 0x41, 0x29, 0x07, 0x32, 0x56, 0x96, 0x2a, 0x2a, 0x55, 0x6b, 0x5c, 0x9d, + 0x70, 0x76, 0x5c, 0xce, 0x65, 0x77, 0xff, 0xf0, 0x0e, 0x04, 0xba, 0x52, + 0x8b, 0xf4, 0x67, 0x50, 0x6c, 0x40, 0xea, 0x21, 0x1a, 0x86, 0xf3, 0x78, + 0x88, 0xca, 0x5d, 0x37, 0x59, 0x4a, 0xd0, 0xd8, 0x72, 0xbc, 0xe4, 0x7d, + 0x0d, 0xd8, 0x14, 0x83, 0x9a, 0x80, 0xaa, 0x86, 0xc1, 0xde, 0x00, 0x84, + 0x2a, 0x41, 0x8f, 0xfa, 0x50, 0xc2, 0x33, 0xb4, 0x27, 0xf5, 0x97, 0xb0, + 0x72, 0xd0, 0x8c, 0x41, 0xe5, 0x94, 0x6d, 0x9c, 0x78, 0xb4, 0x56, 0x18, + 0xbe, 0x94, 0x3d, 0xe0, 0xf4, 0xcc, 0xab, 0x7a, 0xb7, 0x83, 0x17, 0x57, + 0x4b, 0x27, 0x85, 0x8f, 0xf9, 0x04, 0x7a, 0xeb, 0xa1, 0x33, 0x68, 0x5b, + 0x7e, 0xd4, 0x55, 0x2a, 0x96, 0x44, 0x51, 0xcc, 0x12, 0x36, 0x69, 0x9c, + 0x2a, 0x45, 0x8a, 0x02, 0xa1, 0xa9, 0xa7, 0x10, 0x75, 0xf2, 0xe0, 0x60, + 0x3f, 0x70, 0x8a, 0xed, 0x15, 0xc5, 0x12, 0x23, 0xb0, 0x50, 0x49, 0x57, + 0xa2, 0x3c, 0xc8, 0xfa, 0xd2, 0x13, 0x5d, 0x96, 0xbb, 0x1f, 0x34, 0x0b, + 0x25, 0xb0, 0x01, 0x46, 0xd1, 0x62, 0xa3, 0x4b, 0xb0, 0xfc, 0x12, 0x7b, + 0x80, 0xb7, 0xab, 0x8e, 0x23, 0x52, 0x6c, 0xc9, 0x67, 0x7e, 0x58, 0x7b, + 0x67, 0xa9, 0x54, 0xc5, 0x30, 0x3e, 0x99, 0x13, 0x6a, 0xcd, 0x85, 0x04, + 0x52, 0x21, 0xcf, 0x3a, 0xca, 0x26, 0x10, 0x09, 0x87, 0x19, 0x98, 0x38, + 0x9b, 0x86, 0xc8, 0x77, 0x13, 0x8f, 0x3e, 0xe4, 0x17, 0x34, 0xf4, 0x31, + 0x17, 0xf2, 0xcb, 0xe0, 0x83, 0x9b, 0x05, 0xb1, 0x29, 0x15, 0x17, 0x4b, + 0xb8, 0x82, 0x64, 0x67, 0xbb, 0x9e, 0x22, 0xfc, 0xa9, 0x2b, 0x27, 0xa9, + 0x9b, 0xd0, 0xcf, 0xe1, 0x37, 0xc0, 0x6e, 0xa0, 0x6c, 0x5e, 0xc6, 0x07, + 0x3c, 0x55, 0xb1, 0x82, 0x38, 0x5f, 0xc5, 0xfb, 0x48, 0x3e, 0xfa, 0xb7, + 0x8d, 0x69, 0x24, 0x74, 0xb6, 0xac, 0x87, 0x17, 0x95, 0x76, 0xa3, 0xc8, + 0x46, 0xa6, 0x2f, 0x4a, 0xa6, 0x42, 0xcc, 0xc9, 0x1f, 0x42, 0x4b, 0x6c, + 0x84, 0x77, 0xbe, 0x20, 0x1a, 0x0b, 0xaf, 0xf5, 0x8c, 0x77, 0x72, 0x0a, + 0xbb, 0x34, 0x27, 0x4a, 0x7b, 0x0d, 0x51, 0x0c, 0xb9, 0x8f, 0x99, 0xb9, + 0xaf, 0x78, 0x6c, 0x8e, 0x76, 0x2e, 0xf9, 0x77, 0x20, 0x5b, 0xb3, 0x46, + 0xf1, 0x32, 0x0a, 0xeb, 0x37, 0x48, 0x16, 0x34, 0xa2, 0x0e, 0xa4, 0x95, + 0x03, 0x22, 0x9a, 0xa6, 0xb5, 0xc0, 0x04, 0x49, 0xcc, 0x6d, 0x0b, 0x63, + 0x5f, 0xc6, 0x6b, 0x65, 0x67, 0xb0, 0x47, 0xb9, 0x67, 0x9d, 0x13, 0xc7, + 0xcb, 0xf1, 0x90, 0x87, 0xac, 0x5c, 0xd4, 0xbb, 0x82, 0xbc, 0x98, 0xb1, + 0x45, 0x30, 0xc5, 0xfb, 0x16, 0x84, 0x4c, 0x31, 0x1f, 0x67, 0x61, 0x95, + 0x6c, 0x51, 0xc1, 0x95, 0x9a, 0xb2, 0x05, 0xac, 0xa8, 0xec, 0x92, 0x74, + 0x15, 0x23, 0x08, 0x38, 0x45, 0xae, 0xea, 0x1b, 0x1f, 0x61, 0x52, 0x71, + 0x09, 0xf4, 0x76, 0x11, 0x99, 0xcb, 0xb8, 0xf3, 0x5e, 0x31, 0x1c, 0x91, + 0x32, 0x51, 0xa7, 0x07, 0x08, 0x36, 0x18, 0xe9, 0xb6, 0x30, 0x8a, 0x72, + 0x70, 0x45, 0x23, 0x0f, 0xac, 0xb9, 0xa7, 0x89, 0x54, 0xe2, 0x5c, 0x18, + 0x3f, 0x2b, 0x9e, 0x00, 0xa5, 0x65, 0xad, 0xf7, 0x53, 0x10, 0x1a, 0x7b, + 0xd2, 0x82, 0x6a, 0xf4, 0x90, 0x25, 0x58, 0x55, 0x75, 0xe0, 0xb6, 0xa3, + 0xf0, 0x36, 0x58, 0xd3, 0xc2, 0x45, 0x05, 0xc2, 0x22, 0xba, 0xe3, 0x0e, + 0x51, 0xa6, 0xcd, 0x55, 0x55, 0x9c, 0x9b, 0x76, 0xc2, 0xa2, 0x23, 0x67, + 0x41, 0x2a, 0xb8, 0x83, 0x63, 0x4c, 0xa7, 0xac, 0x6b, 0x65, 0x53, 0x51, + 0xe3, 0xe9, 0x54, 0x67, 0x1a, 0x1f, 0x7a, 0xac, 0x4b, 0x1c, 0x38, 0x72, + 0x89, 0xf0, 0x51, 0x79, 0x08, 0x3d, 0xe2, 0x4b, 0x30, 0x1e, 0xf6, 0x60, + 0xd6, 0x63, 0x39, 0xec, 0x72, 0x85, 0xd6, 0x7b, 0x49, 0x4d, 0x40, 0x3b, + 0x35, 0xd0, 0x3f, 0x7e, 0x89, 0x1d, 0x51, 0x4b, 0x2f, 0x3a, 0x28, 0x06, + 0xa0, 0x66, 0x98, 0xda, 0x03, 0x01, 0xd2, 0x07, 0xaf, 0xbe, 0xd7, 0x8e, + 0x77, 0x97, 0xb6, 0xb7, 0xd4, 0x24, 0x01, 0x74, 0xb0, 0x7b, 0x51, 0x49, + 0x09, 0xac, 0x4a, 0x4c, 0x99, 0x90, 0x5f, 0x9b, 0x7e, 0x56, 0xa0, 0x74, + 0xe5, 0x14, 0x05, 0x84, 0x63, 0x23, 0xeb, 0xea, 0x69, 0xc4, 0x9c, 0xca, + 0xc8, 0x0a, 0x57, 0x32, 0x54, 0x83, 0x76, 0xfa, 0x30, 0x84, 0x07, 0x75, + 0x56, 0x8a, 0x59, 0x71, 0x13, 0xa0, 0x86, 0x14, 0x04, 0x3b, 0x23, 0x40, + 0x24, 0x77, 0x70, 0x5f, 0xd2, 0x41, 0x42, 0xc6, 0x42, 0x74, 0x29, 0xa0, + 0x8d, 0xb3, 0x07, 0xc5, 0xb6, 0x35, 0x13, 0x07, 0x07, 0xc0, 0x02, 0x72, + 0xad, 0x8b, 0xbe, 0xb3, 0x4a, 0x0d, 0x10, 0x64, 0x82, 0x54, 0xf0, 0x31, + 0x27, 0x25, 0xba, 0x84, 0xc9, 0x38, 0x07, 0xc7, 0x93, 0x2e, 0x60, 0x5c, + 0x03, 0x2c, 0xa1, 0x1f, 0x39, 0xb2, 0xa7, 0xd4, 0xa7, 0x81, 0xd9, 0x28, + 0x68, 0x22, 0x91, 0xe0, 0x4b, 0x96, 0x66, 0x62, 0x24, 0x9c, 0xf2, 0x72, + 0x7b, 0x57, 0x0f, 0x5b, 0x64, 0x07, 0xd3, 0x31, 0x28, 0x26, 0x47, 0x3f, + 0xf5, 0x49, 0x20, 0x9b, 0x30, 0xcb, 0x1e, 0x75, 0xce, 0x07, 0xd5, 0xc5, + 0x61, 0x08, 0xa5, 0xba, 0x46, 0x8c, 0x5d, 0xb4, 0x57, 0xf4, 0x47, 0x06, + 0x15, 0xb9, 0x06, 0x24, 0x96, 0x75, 0x90, 0x1a, 0x4e, 0xd5, 0x91, 0x55, + 0x04, 0xda, 0x86, 0x55, 0x01, 0x84, 0x9b, 0xf7, 0x7b, 0xa4, 0x80, 0x9d, + 0x38, 0xb5, 0x0d, 0xbe, 0x0c, 0xc3, 0xfe, 0x91, 0x77, 0x1f, 0x90, 0xb5, + 0x61, 0xf9, 0x6a, 0xbe, 0xc4, 0xc0, 0x67, 0x6b, 0x1f, 0xdc, 0x5b, 0x5f, + 0x65, 0xde, 0x5d, 0x2e, 0x1d, 0x79, 0x2c, 0x6a, 0xa3, 0x30, 0x32, 0x4c, + 0xa3, 0x29, 0xeb, 0x00, 0xa6, 0x7f, 0x77, 0x71, 0x90, 0x7a, 0xdd, 0x30, + 0x1f, 0x84, 0x93, 0xca, 0xc1, 0xf5, 0xc5, 0x79}, + // cipherTextDigest + {0x13, 0x0e, 0xe6, 0xdd, 0xb7, 0x09, 0x27, 0xfa, 0xf7, 0xdf, 0xa8, + 0x8e, 0x1a, 0x7d, 0xde, 0x33, 0x11, 0x42, 0x15, 0xb0, 0x8a, 0x63, + 0x86, 0x28, 0xbc, 0x3f, 0x13, 0x6f, 0x3d, 0xff, 0xc1, 0xdd}, + // secret + {0xb2, 0x77, 0x97, 0xf5, 0x0d, 0x42, 0x4d, 0x6c, 0xf2, 0x94, 0x39, + 0x75, 0x55, 0x16, 0x52, 0x51, 0x21, 0x59, 0x7b, 0x51, 0xda, 0x30, + 0x81, 0x5e, 0x11, 0x1c, 0x28, 0xf1, 0x88, 0x42, 0xb6, 0x83}, + true}, + // tcID: 31 + {31, + params_ml_kem768_test_mode, + // entropy + {0xcf, 0x4c, 0x77, 0x02, 0x3e, 0xad, 0xb9, 0x22, 0x9e, 0x47, 0xb1, + 0x7a, 0x97, 0xae, 0xaf, 0xc8, 0x74, 0x65, 0x89, 0xd9, 0x10, 0x63, + 0x34, 0xa9, 0x51, 0x89, 0x89, 0xe3, 0x79, 0x47, 0x68, 0xe6}, + // publicKey + {0xf5, 0x64, 0xc5, 0xf0, 0xe7, 0xcb, 0xc1, 0x30, 0x2b, 0x8a, 0x46, 0x70, + 0x0f, 0x99, 0x17, 0x00, 0x20, 0x43, 0x5a, 0xb6, 0x56, 0x81, 0xc8, 0x46, + 0x3e, 0x3c, 0x7b, 0xd5, 0x81, 0x31, 0x29, 0x35, 0x7c, 0xe6, 0xd5, 0x5f, + 0xea, 0x5b, 0xab, 0x90, 0x84, 0x5e, 0x89, 0x30, 0x02, 0x50, 0xca, 0xb1, + 0x1a, 0x12, 0x15, 0x03, 0x21, 0xb9, 0x2c, 0xc6, 0xa9, 0x5c, 0x3a, 0x36, + 0xcb, 0x0a, 0x60, 0x64, 0x7c, 0x14, 0x1f, 0xe7, 0x8c, 0x10, 0xa6, 0xb4, + 0xc1, 0x49, 0x6f, 0xd1, 0x64, 0xc0, 0x45, 0x42, 0x88, 0x44, 0x97, 0x93, + 0xf1, 0x82, 0x79, 0xb7, 0x1a, 0xad, 0x0e, 0x4c, 0x5c, 0x61, 0x91, 0x84, + 0x5c, 0x81, 0xa1, 0xb5, 0x6c, 0x28, 0xc3, 0x86, 0x72, 0x1a, 0x53, 0xb5, + 0x66, 0x42, 0x6a, 0x73, 0x2b, 0x42, 0x5f, 0xd9, 0x7b, 0xf6, 0x84, 0x9e, + 0xac, 0xa5, 0xa8, 0x32, 0x6b, 0x99, 0xef, 0xab, 0xc4, 0x53, 0x68, 0x8f, + 0x6b, 0xb7, 0x75, 0x45, 0x9a, 0x77, 0x4d, 0x9b, 0xc4, 0xc2, 0xd7, 0x32, + 0x15, 0x62, 0xb9, 0x3d, 0x0b, 0x53, 0x76, 0x06, 0xca, 0x73, 0x55, 0x98, + 0xee, 0x06, 0xa3, 0x42, 0x29, 0x44, 0x81, 0x8c, 0x8b, 0xc7, 0x65, 0xa0, + 0x83, 0x76, 0xc1, 0xd1, 0x72, 0xa7, 0x4a, 0x16, 0x9e, 0x92, 0x53, 0x94, + 0xc8, 0xa0, 0x39, 0x71, 0x6b, 0x29, 0xe6, 0xa8, 0xbe, 0x14, 0x2a, 0xaa, + 0x0e, 0xb5, 0x56, 0x4d, 0x6a, 0x2c, 0x51, 0x35, 0x72, 0xf8, 0xf8, 0x97, + 0xc7, 0x4c, 0x62, 0x3c, 0xd4, 0xb2, 0x2e, 0x6a, 0x2e, 0xac, 0x14, 0x99, + 0xfc, 0xa6, 0x79, 0x08, 0x93, 0x11, 0xae, 0x50, 0xb2, 0xf6, 0xa4, 0xa7, + 0x54, 0xd4, 0x6c, 0x02, 0x33, 0x04, 0xd4, 0xc5, 0x1e, 0xf6, 0x69, 0x96, + 0xde, 0xea, 0x11, 0x5b, 0xe4, 0x7d, 0x33, 0x99, 0xb6, 0x8b, 0xb5, 0xc3, + 0x74, 0x8b, 0x28, 0x99, 0x86, 0x3e, 0x28, 0xa9, 0xb8, 0x3e, 0x5b, 0xcb, + 0xa5, 0x26, 0xb7, 0xad, 0xfb, 0xcc, 0xd0, 0x10, 0xa8, 0xd5, 0xa5, 0x23, + 0x3e, 0x83, 0x56, 0xc5, 0xaa, 0x49, 0xb6, 0x25, 0x22, 0x8c, 0x21, 0x7b, + 0xd0, 0x11, 0xa1, 0x70, 0xd9, 0x19, 0xbe, 0xd0, 0x07, 0x12, 0xa1, 0x56, + 0x23, 0x63, 0xb0, 0x23, 0xb6, 0x08, 0xac, 0xb6, 0xc4, 0x62, 0x6b, 0xba, + 0x77, 0x74, 0xa5, 0x63, 0x43, 0xbf, 0x16, 0x30, 0x64, 0x7b, 0xa2, 0xc9, + 0xff, 0xa8, 0xb0, 0xa3, 0x30, 0x65, 0xa5, 0xd8, 0xc3, 0xfe, 0x04, 0x9b, + 0x04, 0x07, 0xa0, 0xd6, 0x70, 0x16, 0x86, 0x1c, 0xb5, 0x6c, 0x95, 0x68, + 0xae, 0x46, 0xa0, 0xa3, 0x2a, 0x4a, 0xbd, 0x1a, 0xc6, 0xa1, 0xcc, 0x18, + 0xe7, 0x45, 0x53, 0xe3, 0x59, 0x3f, 0x95, 0x69, 0x50, 0x2f, 0x42, 0xc6, + 0x6e, 0x1a, 0x73, 0xcc, 0xa4, 0xb2, 0x4e, 0xfb, 0x31, 0xa0, 0xe8, 0xa9, + 0x06, 0x89, 0x7e, 0x48, 0x83, 0xa9, 0xd3, 0xc2, 0x89, 0xf3, 0xb2, 0x4a, + 0x35, 0xf3, 0x92, 0x55, 0x12, 0x94, 0x16, 0x90, 0x29, 0xaa, 0x13, 0x9e, + 0x8f, 0x39, 0x55, 0x1c, 0x73, 0xc5, 0x55, 0x86, 0x5d, 0xf5, 0xe4, 0x36, + 0xff, 0x0c, 0x9f, 0x3f, 0x91, 0x60, 0x80, 0xd9, 0xcc, 0x22, 0x7a, 0x61, + 0xe5, 0x23, 0x40, 0x72, 0x7b, 0x71, 0x8a, 0x6c, 0x81, 0xfa, 0xe1, 0x4a, + 0x6c, 0xb1, 0x6c, 0xd0, 0x18, 0x92, 0x88, 0x63, 0x5a, 0x42, 0x75, 0x1d, + 0x7a, 0xa4, 0x8f, 0xdf, 0xeb, 0x52, 0xf1, 0xa7, 0x9e, 0x44, 0x86, 0xbb, + 0x14, 0x36, 0xaa, 0x95, 0x26, 0x3b, 0xfd, 0x62, 0x77, 0x6d, 0x0b, 0x74, + 0x92, 0x5a, 0x9f, 0x35, 0xd1, 0xcc, 0x82, 0xd3, 0x71, 0xd4, 0x28, 0xae, + 0x4a, 0x19, 0xbc, 0x01, 0xb3, 0x18, 0xd8, 0x99, 0x30, 0x8f, 0xc5, 0x69, + 0xf5, 0xf0, 0x48, 0x25, 0x79, 0x75, 0x5c, 0x8a, 0x05, 0xe0, 0x8b, 0x3e, + 0x64, 0x6a, 0x4c, 0x8b, 0xa3, 0x99, 0x3d, 0xdc, 0x4e, 0x1d, 0x84, 0x77, + 0x58, 0xc8, 0x09, 0x7b, 0x52, 0x35, 0x45, 0xe0, 0x49, 0x8b, 0x5b, 0x12, + 0x32, 0x58, 0x7e, 0x83, 0xc5, 0x14, 0xe3, 0x85, 0xca, 0x05, 0x2b, 0x53, + 0xed, 0xdc, 0xb0, 0x7e, 0x48, 0x12, 0x0c, 0x28, 0x6a, 0xd3, 0xa3, 0x2c, + 0xa6, 0xc1, 0xb6, 0x96, 0x62, 0x81, 0x96, 0xc4, 0x4f, 0xff, 0xec, 0x3e, + 0x71, 0x2a, 0x52, 0xc8, 0x98, 0x7b, 0xce, 0xc9, 0x2b, 0x7a, 0x24, 0x9f, + 0x87, 0x43, 0x49, 0x97, 0x91, 0xb9, 0x0a, 0xdb, 0x0d, 0x4a, 0xb3, 0x81, + 0x4d, 0x61, 0x12, 0x68, 0x78, 0x85, 0x71, 0x0a, 0x6f, 0x2b, 0xc3, 0x25, + 0x0c, 0x72, 0x7d, 0xec, 0x5a, 0x10, 0xe4, 0x12, 0x27, 0x03, 0x79, 0x33, + 0x75, 0xe1, 0x71, 0x61, 0x41, 0x09, 0x44, 0x42, 0x8e, 0x76, 0xbb, 0x37, + 0x4b, 0x08, 0x54, 0x0b, 0x26, 0xc8, 0x57, 0x96, 0x81, 0x4e, 0xfb, 0x08, + 0x5c, 0x44, 0x91, 0xbf, 0x75, 0xc1, 0x9d, 0x18, 0x4e, 0x7e, 0x56, 0x02, + 0xf1, 0x74, 0xab, 0x10, 0x68, 0xa8, 0x74, 0x08, 0x6c, 0x30, 0x49, 0x10, + 0x51, 0xda, 0x1b, 0x19, 0x74, 0x23, 0xda, 0x67, 0x00, 0xde, 0xa3, 0xc4, + 0xa3, 0x05, 0x48, 0xfe, 0x38, 0x18, 0x7d, 0x6a, 0x39, 0x19, 0xdc, 0xb3, + 0xa2, 0x61, 0x61, 0x14, 0xa9, 0x3e, 0x32, 0xf1, 0x19, 0xa4, 0x15, 0xcd, + 0x98, 0x71, 0x34, 0x10, 0xf7, 0x6b, 0xba, 0x04, 0x3d, 0x79, 0x75, 0x3f, + 0xd4, 0xa9, 0x33, 0xd7, 0x27, 0x39, 0x1f, 0x51, 0x8a, 0x3e, 0xbb, 0xc9, + 0xa2, 0x04, 0x71, 0x48, 0x72, 0x19, 0xea, 0x00, 0xa5, 0xa6, 0xa2, 0xcb, + 0xfc, 0x28, 0x87, 0x77, 0x09, 0x78, 0x3a, 0x7b, 0x30, 0x13, 0xe9, 0x17, + 0x97, 0x78, 0x37, 0x4e, 0xb8, 0x21, 0xa5, 0x50, 0x5b, 0x01, 0xc8, 0x72, + 0x7b, 0xcc, 0x25, 0xf2, 0xa3, 0x59, 0x91, 0x01, 0x72, 0x0d, 0x77, 0x03, + 0x4a, 0x06, 0x93, 0xf1, 0x76, 0x18, 0x24, 0x58, 0x41, 0x2f, 0xca, 0x4a, + 0x4b, 0x11, 0x27, 0x81, 0xb1, 0x9d, 0x82, 0x85, 0x7a, 0x27, 0x87, 0x28, + 0xbe, 0x73, 0x6f, 0xb0, 0x05, 0x2f, 0xf0, 0x9a, 0xca, 0xf2, 0xf2, 0x36, + 0x9d, 0xa8, 0xb5, 0x09, 0x05, 0xc0, 0xe7, 0x42, 0xb1, 0xfa, 0x33, 0xb6, + 0xe5, 0x02, 0x92, 0xed, 0xf0, 0xb4, 0x5a, 0xd6, 0x17, 0xf5, 0xc3, 0x7c, + 0xa3, 0xe7, 0xa3, 0x5a, 0xc6, 0x37, 0xc7, 0x4b, 0x15, 0xfb, 0xcb, 0x1c, + 0xa1, 0x66, 0x83, 0x0c, 0xeb, 0x22, 0x17, 0x63, 0x28, 0x3b, 0xd6, 0x89, + 0x21, 0xc4, 0x88, 0x0c, 0x34, 0x34, 0x6c, 0x77, 0x60, 0x73, 0x8a, 0xb2, + 0x9b, 0x52, 0xc6, 0x51, 0x51, 0x10, 0xe2, 0x19, 0x3e, 0x84, 0x40, 0x9c, + 0x00, 0x97, 0x63, 0xea, 0x36, 0x48, 0x54, 0x2a, 0xcc, 0x67, 0xb8, 0x05, + 0x65, 0xcb, 0x4c, 0x86, 0xd3, 0xa8, 0xaa, 0x52, 0xba, 0x44, 0x42, 0x8c, + 0x97, 0xbb, 0x63, 0xcb, 0x71, 0x1b, 0xe7, 0xc7, 0x92, 0xd9, 0x0b, 0x02, + 0xca, 0x51, 0x35, 0x2d, 0xfb, 0x7c, 0xed, 0x4c, 0x2d, 0xe0, 0x28, 0x6b, + 0xf0, 0xe1, 0x49, 0x3e, 0x9a, 0x02, 0x73, 0x0c, 0x05, 0x4c, 0x69, 0xa4, + 0x35, 0x68, 0x6f, 0x9e, 0x48, 0x3c, 0x27, 0xd0, 0xc9, 0x1d, 0x09, 0x8e, + 0x77, 0xe5, 0x6a, 0xca, 0x29, 0x87, 0x4b, 0xa9, 0x26, 0x00, 0x27, 0x3b, + 0xc7, 0x66, 0x93, 0xb2, 0x19, 0x36, 0x84, 0xac, 0xad, 0x7b, 0xd5, 0xc1, + 0xa1, 0x07, 0x78, 0x18, 0x54, 0x8c, 0x19, 0x73, 0x3a, 0xcc, 0x19, 0x4b, + 0xf6, 0x16, 0x4e, 0xf9, 0x62, 0x92, 0xea, 0xdc, 0x33, 0x85, 0xc4, 0x04, + 0xbf, 0x12, 0x00, 0x4d, 0x91, 0xb3, 0x79, 0xd2, 0x40, 0xcc, 0xd2, 0x97, + 0x28, 0xc8, 0x21, 0x34, 0xeb, 0x40, 0xce, 0x7a, 0xa1, 0xfe, 0x48, 0x06, + 0xf0, 0x76, 0xc5, 0x67, 0x86, 0x89, 0x78, 0xbb, 0x8b, 0x8a, 0x39, 0x1b, + 0x59, 0x71, 0x28, 0x01, 0x07, 0xb9, 0xd9, 0xc9, 0x22, 0x22, 0x84, 0x35, + 0xcc, 0x76, 0x03, 0x53, 0xb0, 0x78, 0xb6, 0x09, 0x2f, 0x9b, 0xa8, 0x0e, + 0xdd, 0x49, 0x20, 0x4b, 0x79, 0xbd, 0x66, 0x72, 0x5e, 0x36, 0xdc, 0x2f, + 0xe3, 0x74, 0x2c, 0x12, 0x62, 0x10, 0x2b, 0x70, 0xbd, 0x73, 0xc2, 0x67, + 0x15, 0x28, 0x37, 0x89, 0x61, 0x60, 0x39, 0x31, 0xbb, 0x7b, 0xa9, 0xc8, + 0x12, 0xd3, 0xb1, 0x7c, 0x36, 0x49, 0xb1, 0x0c, 0x7e, 0x83, 0xa3, 0x47, + 0xf7, 0x24, 0x6c, 0xf0, 0xc0, 0x6a, 0xba, 0xf1, 0xc1, 0x2d, 0x23, 0x2d, + 0x51, 0x32, 0x73, 0xe8, 0x3c, 0x43, 0x24, 0xa2, 0x3b, 0xd1, 0xd5, 0xad, + 0xd5, 0x85, 0x10, 0x22, 0x03, 0x33, 0x72, 0xca, 0x45, 0x37, 0x0c, 0x9f, + 0x7e, 0x13, 0x1d, 0xee, 0xa6, 0x63, 0x81, 0x22, 0xd1, 0x28, 0xed, 0xa8, + 0x23, 0x93, 0x14, 0x76, 0xa1, 0x03, 0x35, 0x38, 0x18, 0xa8, 0xd2, 0xb0, + 0x63, 0x58, 0x3e, 0x5e, 0xf9, 0xa9, 0x1e, 0x55}, + // cipherTextDigest + {0xa8, 0x0b, 0x76, 0xff, 0x90, 0x50, 0x88, 0x31, 0xb6, 0x62, 0x04, + 0x88, 0xeb, 0x75, 0x83, 0x10, 0xbe, 0x55, 0x2e, 0x0b, 0x6d, 0xac, + 0x4a, 0x34, 0xbd, 0xd7, 0xdb, 0xa0, 0x8f, 0x7a, 0xec, 0x97}, + // secret + {0x2d, 0xe8, 0x79, 0xf0, 0x9a, 0xa9, 0xe8, 0xf6, 0x68, 0x5a, 0xb1, + 0xfe, 0x44, 0x31, 0xfd, 0x03, 0x52, 0xcd, 0x99, 0xe2, 0x9a, 0x49, + 0x05, 0x6f, 0x2d, 0x11, 0x6b, 0x1e, 0x3a, 0x77, 0xb8, 0x89}, + true}, + // tcID: 32 + {32, + params_ml_kem768_test_mode, + // entropy + {0x01, 0x53, 0xbf, 0x0f, 0x4e, 0x8d, 0xe8, 0x9d, 0xf3, 0xda, 0x16, + 0x7c, 0xc9, 0x8d, 0x7f, 0xc3, 0xac, 0x13, 0x00, 0xf0, 0xce, 0xd9, + 0xe7, 0x4e, 0xd5, 0xd4, 0x60, 0x31, 0x82, 0x0d, 0x4d, 0x18}, + // publicKey + {0x6d, 0xa5, 0x74, 0x08, 0xe3, 0xbd, 0x5f, 0x03, 0x67, 0x66, 0x7c, 0x3e, + 0x95, 0x0b, 0x80, 0xc4, 0xa4, 0xa5, 0x41, 0xf3, 0xc9, 0x7b, 0xe9, 0x94, + 0x2f, 0xfb, 0x7b, 0xdc, 0xc0, 0x13, 0x33, 0xd1, 0x75, 0x4d, 0x6b, 0x28, + 0x02, 0x08, 0x88, 0x9c, 0x94, 0x57, 0xaa, 0x9b, 0x56, 0xef, 0x90, 0x4a, + 0xc2, 0x79, 0x4e, 0x52, 0x10, 0x5c, 0x0b, 0x23, 0x21, 0x2a, 0xeb, 0x1e, + 0x6a, 0xdc, 0x49, 0xfa, 0x5a, 0x5c, 0x38, 0x37, 0x26, 0xb8, 0x56, 0x3e, + 0x6e, 0x91, 0x29, 0xac, 0x50, 0x73, 0x53, 0x96, 0x0c, 0x4a, 0x64, 0x1d, + 0x7e, 0x69, 0x94, 0x15, 0x18, 0xcc, 0xc1, 0x06, 0x50, 0x0e, 0xab, 0x7e, + 0xba, 0x41, 0x2e, 0x3c, 0x4c, 0xc9, 0x03, 0x64, 0x0e, 0x0e, 0x51, 0x08, + 0x2c, 0x85, 0xb0, 0xca, 0x31, 0x08, 0xae, 0xfa, 0x6c, 0x3e, 0x38, 0x02, + 0x9a, 0x97, 0x31, 0xa3, 0xd8, 0x31, 0xb8, 0x02, 0x55, 0xf9, 0x09, 0x7f, + 0x0a, 0x35, 0xa2, 0x60, 0xe8, 0x58, 0x5e, 0xe1, 0x8d, 0xa4, 0x60, 0x59, + 0x8f, 0x63, 0xc0, 0xe9, 0xb3, 0xc4, 0x5d, 0x7c, 0x37, 0x28, 0xd2, 0x54, + 0x35, 0x08, 0x8c, 0x30, 0x9c, 0x27, 0x15, 0x86, 0x25, 0xe7, 0xa8, 0x12, + 0xe4, 0xa2, 0x09, 0xa5, 0x71, 0x66, 0x89, 0x64, 0xcd, 0x21, 0x0c, 0x7a, + 0xe2, 0xda, 0x07, 0x75, 0xe4, 0x85, 0x6f, 0xc7, 0x5e, 0x8c, 0xd9, 0x01, + 0x87, 0x92, 0x6d, 0x1a, 0x94, 0x9c, 0xae, 0xb2, 0x11, 0x07, 0x2b, 0x23, + 0x32, 0x07, 0x11, 0xbd, 0x26, 0x23, 0xaa, 0x00, 0xbc, 0xb1, 0x42, 0xb7, + 0x20, 0x46, 0x60, 0x9e, 0x56, 0x22, 0x77, 0x0c, 0xc8, 0x9b, 0x4b, 0x93, + 0xf5, 0xc0, 0xcd, 0xaa, 0x07, 0x89, 0xfb, 0x11, 0xb2, 0x35, 0x34, 0x92, + 0xda, 0x34, 0x41, 0xfd, 0x50, 0x61, 0xac, 0xd5, 0x1a, 0x9a, 0xd7, 0x56, + 0x9c, 0x80, 0x5e, 0x22, 0x15, 0x86, 0x3c, 0x09, 0x4b, 0xcd, 0x31, 0x19, + 0x41, 0x74, 0x71, 0x5c, 0x33, 0xb1, 0xa2, 0x47, 0x99, 0xbd, 0x33, 0x15, + 0x92, 0x40, 0x15, 0xe4, 0x51, 0xc5, 0x86, 0x3a, 0xab, 0xb9, 0xb9, 0x51, + 0xb1, 0xf8, 0x25, 0xaf, 0x09, 0x06, 0xfe, 0xc1, 0x69, 0xad, 0xb6, 0x8b, + 0xee, 0x67, 0xa9, 0x23, 0xe3, 0x71, 0xc9, 0x20, 0x50, 0xfa, 0x59, 0x4d, + 0x1a, 0x27, 0x6a, 0x02, 0xb2, 0xaf, 0xe1, 0x03, 0x40, 0x5c, 0x6a, 0x85, + 0x71, 0x70, 0xa8, 0xcf, 0x67, 0x18, 0x39, 0x31, 0xcd, 0xe8, 0xa9, 0x2f, + 0xae, 0x05, 0x67, 0xeb, 0xfc, 0x5e, 0xae, 0x54, 0x3a, 0x97, 0x74, 0xa1, + 0x6f, 0x18, 0x5a, 0xac, 0x00, 0x3e, 0x2f, 0x84, 0x9f, 0x20, 0xf3, 0xc9, + 0x7d, 0xa5, 0x7b, 0x8f, 0x92, 0x02, 0x06, 0x72, 0x66, 0x6f, 0x78, 0xc1, + 0x92, 0x40, 0xa5, 0x93, 0xd6, 0x7c, 0xfa, 0x86, 0x1d, 0x98, 0x59, 0x20, + 0x33, 0xc7, 0x8e, 0x04, 0x58, 0x2f, 0xde, 0xa5, 0x5c, 0x0b, 0x25, 0x1d, + 0xc9, 0x92, 0x04, 0x13, 0x73, 0xb7, 0xd4, 0x9c, 0x7c, 0x1d, 0xa5, 0x23, + 0xf3, 0xe7, 0x83, 0xe5, 0x39, 0x67, 0xed, 0x8c, 0x12, 0xcb, 0xc0, 0x2c, + 0x59, 0x47, 0x29, 0x76, 0x64, 0x43, 0x4e, 0xac, 0x11, 0x7f, 0x75, 0x02, + 0xf3, 0x83, 0x64, 0xf3, 0x7c, 0x89, 0x31, 0xb4, 0x31, 0x7f, 0x00, 0xc6, + 0x1d, 0x44, 0x5a, 0x58, 0x02, 0xa2, 0x62, 0x62, 0xc7, 0x29, 0x11, 0x67, + 0xa1, 0x9c, 0x96, 0xc5, 0xec, 0x30, 0x92, 0x9c, 0x48, 0xd2, 0x63, 0x66, + 0x9c, 0x0b, 0x4a, 0x23, 0x98, 0xae, 0xbb, 0xca, 0x7e, 0x74, 0x65, 0x91, + 0x59, 0xac, 0x42, 0x0e, 0x0b, 0x78, 0xf2, 0x2a, 0x11, 0x0d, 0x11, 0x80, + 0x32, 0x4c, 0x3a, 0x18, 0xe4, 0x12, 0xb1, 0xa4, 0xa2, 0x5f, 0x83, 0x3f, + 0x4d, 0xc1, 0x0f, 0x9e, 0xc4, 0x9e, 0x6e, 0x36, 0x8a, 0xf8, 0x09, 0x09, + 0x4f, 0xa6, 0x30, 0x19, 0x81, 0x85, 0xa9, 0x80, 0x07, 0x29, 0x59, 0xbf, + 0xad, 0xca, 0x83, 0x6a, 0x98, 0x74, 0x94, 0x84, 0x91, 0x31, 0xe8, 0xa5, + 0x25, 0x8c, 0x00, 0x37, 0x34, 0x8a, 0xe7, 0x15, 0x69, 0x89, 0x63, 0x31, + 0x0c, 0xd7, 0x92, 0x70, 0x31, 0x4d, 0xcb, 0x01, 0x7e, 0xe8, 0xa8, 0x2b, + 0x68, 0xd6, 0x61, 0x26, 0x13, 0x31, 0x3d, 0x4c, 0x39, 0x13, 0x4b, 0x66, + 0x3e, 0xa5, 0x91, 0x68, 0x1b, 0x4f, 0x77, 0x4b, 0x61, 0x47, 0x26, 0xc8, + 0x1a, 0xb2, 0xb9, 0xfd, 0x59, 0xbb, 0xb5, 0x91, 0x00, 0x37, 0x12, 0x67, + 0xe9, 0x10, 0x13, 0x9c, 0x95, 0x9e, 0xd3, 0xa2, 0xb2, 0x20, 0x78, 0x4d, + 0x96, 0x42, 0x14, 0x6a, 0x79, 0x04, 0xa5, 0x07, 0xb1, 0xd2, 0x68, 0xac, + 0x2b, 0xfa, 0xab, 0xb6, 0x00, 0x31, 0x2f, 0xc1, 0x55, 0xa6, 0xc0, 0x81, + 0x55, 0x4a, 0xb7, 0x72, 0xe7, 0x39, 0x86, 0x29, 0xa4, 0xdc, 0x66, 0x8a, + 0x03, 0xa4, 0x4e, 0x32, 0xe0, 0xce, 0xfe, 0xcb, 0x42, 0xba, 0xd2, 0x65, + 0x31, 0x33, 0x3d, 0xb4, 0xcc, 0xa4, 0x7b, 0xe7, 0x21, 0x99, 0xb7, 0xa6, + 0x78, 0xe4, 0x4d, 0x5d, 0x1c, 0x7c, 0x45, 0x20, 0xb6, 0x6f, 0xb6, 0x3b, + 0x87, 0x23, 0xa0, 0x9c, 0xd3, 0x73, 0xc0, 0x57, 0x91, 0xca, 0x8b, 0xce, + 0x4a, 0xe2, 0xbf, 0x85, 0x81, 0x1f, 0x22, 0x16, 0x18, 0xc7, 0x92, 0x93, + 0xce, 0xfb, 0x11, 0x5f, 0x77, 0x78, 0x91, 0x5b, 0x0c, 0x0a, 0x56, 0x57, + 0xf0, 0xc1, 0x29, 0x8c, 0x5c, 0x6c, 0xd8, 0x35, 0x70, 0xba, 0x4b, 0x32, + 0xd2, 0x85, 0x81, 0x32, 0xd6, 0x0e, 0xc9, 0x53, 0x9d, 0x47, 0xbb, 0xce, + 0xf1, 0x0b, 0x1d, 0xda, 0x16, 0xb5, 0xe3, 0xc9, 0x37, 0x0e, 0x9a, 0xc8, + 0x8b, 0x28, 0x6e, 0x71, 0x78, 0x18, 0xdd, 0xf0, 0xb9, 0x12, 0x93, 0xbc, + 0xfc, 0x91, 0x73, 0x3c, 0xb9, 0x46, 0xec, 0xcc, 0x68, 0x90, 0xd9, 0x36, + 0x37, 0x0a, 0x12, 0xd2, 0xc1, 0x2f, 0x60, 0x1b, 0x51, 0x5b, 0xa8, 0x8f, + 0x47, 0x32, 0x6a, 0x8b, 0x12, 0x32, 0xfc, 0x8a, 0x5d, 0xde, 0x47, 0x7c, + 0xfe, 0xc9, 0xc7, 0xa5, 0x0c, 0x73, 0x4c, 0xac, 0x08, 0xbc, 0xc6, 0xc9, + 0x24, 0x05, 0xc3, 0x58, 0x51, 0x86, 0xe5, 0xc0, 0xae, 0xa4, 0xba, 0xb3, + 0xa9, 0x56, 0xa2, 0x7f, 0x36, 0x9b, 0x8d, 0x61, 0x4c, 0x30, 0x15, 0xa5, + 0xdc, 0x98, 0x1b, 0x62, 0x67, 0xb6, 0xd7, 0xd8, 0x12, 0xd6, 0xd6, 0x57, + 0x4e, 0x96, 0xb1, 0x42, 0x15, 0xb6, 0x1c, 0xba, 0x7f, 0x05, 0x32, 0x1d, + 0x8a, 0xb7, 0xa1, 0xb5, 0x39, 0x49, 0x3e, 0xfc, 0x0f, 0xa7, 0x2b, 0x00, + 0xc5, 0x55, 0x06, 0xdc, 0x13, 0x90, 0x7b, 0x0c, 0x4a, 0xef, 0xcc, 0x10, + 0xfb, 0xeb, 0x72, 0x70, 0x9b, 0x4b, 0x00, 0xeb, 0x7c, 0xb0, 0x0c, 0x32, + 0x00, 0xc8, 0xa7, 0x93, 0x56, 0x6c, 0x82, 0xa6, 0x2b, 0x86, 0x98, 0x29, + 0xd5, 0x5a, 0x68, 0xb6, 0x75, 0xb7, 0xcd, 0xf3, 0xa5, 0xc5, 0x56, 0x0a, + 0xfd, 0xc9, 0xc9, 0xc3, 0x43, 0x55, 0x56, 0xe4, 0x80, 0xb2, 0xc6, 0x64, + 0x68, 0x34, 0x17, 0x3b, 0xe5, 0x4b, 0xa7, 0x10, 0x53, 0xd9, 0x35, 0x16, + 0x31, 0xa3, 0x51, 0x05, 0xe4, 0x03, 0x69, 0x74, 0x0f, 0x30, 0x76, 0xb6, + 0x64, 0x92, 0x17, 0xcd, 0xfc, 0x54, 0x4f, 0x50, 0xc6, 0xaf, 0xa8, 0xa9, + 0xc9, 0xcc, 0x2c, 0xc6, 0xd6, 0x84, 0x29, 0x11, 0x2a, 0x63, 0x14, 0x61, + 0xb9, 0xe9, 0x5b, 0x76, 0x76, 0xae, 0x3e, 0xc6, 0x14, 0xb6, 0x50, 0x51, + 0x2f, 0xb3, 0xb1, 0x8d, 0x4a, 0x60, 0x22, 0xb0, 0x77, 0xe0, 0x04, 0x47, + 0xb0, 0xb4, 0xad, 0xb8, 0xda, 0x59, 0xc1, 0xa4, 0xc7, 0x32, 0x6a, 0x27, + 0xb7, 0xb7, 0x91, 0x68, 0x87, 0xba, 0x30, 0x28, 0x5d, 0x0f, 0x66, 0x2d, + 0x36, 0xb8, 0xac, 0xc4, 0x63, 0x6d, 0x4f, 0x80, 0x88, 0x28, 0xa2, 0x89, + 0x19, 0xf2, 0x5f, 0xbd, 0xb7, 0x43, 0x7f, 0x8c, 0x7b, 0x8f, 0x54, 0xc8, + 0x06, 0x02, 0x56, 0x49, 0xd9, 0x9c, 0x25, 0x5b, 0xc6, 0xb3, 0xc8, 0x53, + 0xae, 0x89, 0x17, 0x1b, 0xa9, 0x04, 0x3f, 0xd6, 0x9b, 0xa8, 0xd6, 0x19, + 0xd8, 0x51, 0x79, 0x9b, 0xf7, 0x6f, 0x8c, 0x99, 0xbf, 0x91, 0x9b, 0xb7, + 0xf7, 0xa1, 0x40, 0xf0, 0x54, 0x84, 0x46, 0x55, 0xb4, 0x14, 0x9b, 0x47, + 0xdd, 0xa1, 0x96, 0x78, 0x1b, 0x3a, 0x34, 0x6c, 0x75, 0x7a, 0x34, 0x39, + 0x2f, 0x52, 0x87, 0x1c, 0x8c, 0x09, 0xe9, 0x70, 0xcf, 0xa5, 0xb4, 0x05, + 0xee, 0xa2, 0xaa, 0x27, 0x53, 0x7f, 0x57, 0x41, 0x2d, 0xd9, 0xe4, 0x07, + 0xc4, 0xa8, 0xaf, 0xcd, 0x2c, 0xc9, 0xfe, 0xa7, 0x20, 0xd1, 0xf8, 0x08, + 0x5c, 0x23, 0x6c, 0x9c, 0x50, 0xa9, 0x52, 0x7f, 0xa2, 0x27, 0x15, 0xe9, + 0x77, 0xb0, 0x30, 0x93, 0xd8, 0xad, 0x5a, 0x7f, 0xd8, 0x1e, 0xe1, 0xba, + 0xd2, 0x3b, 0xf1, 0x27, 0xba, 0xcc, 0x3f, 0xff}, + // cipherTextDigest + {0x2d, 0x42, 0xef, 0x19, 0x5d, 0xc2, 0xb9, 0x35, 0xa0, 0xe1, 0x3e, + 0x46, 0xdf, 0xf9, 0x96, 0x40, 0x0d, 0xfa, 0xff, 0xa3, 0xba, 0x7d, + 0x9f, 0xa7, 0xce, 0x54, 0x60, 0xbb, 0x0c, 0xf5, 0x98, 0x55}, + // secret + {0xbb, 0x27, 0x12, 0xd5, 0x55, 0xbf, 0x2b, 0x2d, 0x92, 0x12, 0x12, + 0xed, 0xfd, 0x9a, 0x7b, 0x38, 0x91, 0x20, 0x48, 0x94, 0x47, 0x21, + 0xd2, 0xe2, 0x35, 0xee, 0x31, 0xe9, 0xee, 0x13, 0xbc, 0xf8}, + true}, + // tcID: 33 + {33, + params_ml_kem768_test_mode, + // entropy + {0xc0, 0xa2, 0x5f, 0x23, 0x9a, 0x31, 0x5d, 0xff, 0x60, 0xa6, 0xb9, + 0x8f, 0x47, 0x23, 0x22, 0xf4, 0x34, 0x26, 0xa7, 0xdb, 0xc3, 0x04, + 0x7c, 0x52, 0x37, 0x5c, 0x4e, 0x13, 0x89, 0x9a, 0xcf, 0xbe}, + // publicKey + {0xe0, 0xf3, 0x05, 0x2d, 0x66, 0x50, 0x9e, 0xec, 0x07, 0xc7, 0x98, 0x38, + 0xb4, 0x92, 0x42, 0xb6, 0x0c, 0x4a, 0x97, 0x7c, 0x7f, 0x09, 0x41, 0xb7, + 0xf0, 0x85, 0xc7, 0x3d, 0xf2, 0x58, 0xa1, 0x57, 0x51, 0x14, 0xd7, 0xb4, + 0xe3, 0x1a, 0x32, 0xe5, 0x54, 0x62, 0x04, 0x8b, 0x6a, 0x93, 0x7a, 0x01, + 0xd3, 0x11, 0x43, 0x1f, 0xda, 0x28, 0x18, 0x44, 0x66, 0x25, 0x22, 0x97, + 0x60, 0xcb, 0x53, 0xe7, 0x56, 0x71, 0xb9, 0xe7, 0x3c, 0x05, 0x87, 0x5d, + 0xab, 0x9a, 0x6a, 0x9a, 0xbb, 0xae, 0x05, 0x42, 0x52, 0x89, 0xd6, 0x03, + 0x32, 0x2a, 0x36, 0x85, 0x00, 0xb7, 0xd7, 0xd8, 0x3f, 0x65, 0xd6, 0xbb, + 0x5d, 0x2a, 0xc7, 0xb0, 0xc6, 0x0e, 0x49, 0x02, 0x1a, 0x91, 0x67, 0x2f, + 0x02, 0x62, 0x1c, 0x29, 0x14, 0x12, 0x88, 0x5c, 0x68, 0x8a, 0xf7, 0x6e, + 0xb8, 0x42, 0xb3, 0xf6, 0xeb, 0xcf, 0x92, 0x77, 0x51, 0xe4, 0xab, 0xb0, + 0xe3, 0xb7, 0x80, 0x8e, 0xdc, 0xa3, 0xa7, 0x11, 0x21, 0xb5, 0x16, 0x77, + 0x76, 0xd6, 0x75, 0x49, 0x11, 0xbe, 0xaf, 0xb8, 0x39, 0xe2, 0x88, 0xb2, + 0xd2, 0xaa, 0x37, 0x87, 0x12, 0x20, 0x6f, 0xdc, 0x2d, 0xb6, 0xe8, 0x07, + 0x75, 0x52, 0x28, 0x8c, 0x82, 0x11, 0x16, 0xd3, 0x13, 0xdf, 0xb4, 0xa3, + 0x87, 0xca, 0xbf, 0x08, 0xac, 0x4b, 0x6d, 0x9a, 0xc4, 0x2a, 0x34, 0x49, + 0x77, 0x3b, 0xc2, 0x2b, 0xb6, 0x9a, 0xae, 0xb9, 0x42, 0x48, 0xb8, 0x8f, + 0x5d, 0xf5, 0x67, 0xb7, 0x85, 0x3a, 0xe3, 0xf7, 0xad, 0x1f, 0x21, 0x8f, + 0xa1, 0x83, 0x56, 0xc2, 0xe3, 0xb3, 0xc6, 0x26, 0x51, 0x37, 0x5a, 0x8c, + 0x64, 0xb9, 0x1e, 0x11, 0xa0, 0x03, 0xd4, 0x97, 0xb2, 0x12, 0xb7, 0xcf, + 0xdf, 0xc7, 0x65, 0xb1, 0xe2, 0xaa, 0xb2, 0x59, 0x64, 0x93, 0xe4, 0x69, + 0x3f, 0x12, 0x20, 0x2d, 0x2b, 0x68, 0x51, 0x88, 0x03, 0x6d, 0x85, 0x53, + 0xbc, 0x7a, 0x0d, 0xd9, 0x76, 0xa9, 0xe8, 0xbb, 0x8d, 0xd6, 0xc6, 0xb7, + 0xfc, 0xb3, 0x8d, 0x60, 0x74, 0xaf, 0xb2, 0x6c, 0x0e, 0x2b, 0x96, 0x44, + 0x5d, 0x14, 0x2b, 0x6d, 0x74, 0x7e, 0xbb, 0x2b, 0x31, 0x4e, 0x17, 0x07, + 0xf3, 0x5c, 0x56, 0x3a, 0x28, 0x71, 0x02, 0xf8, 0x41, 0x21, 0xca, 0xb8, + 0x14, 0x28, 0xb1, 0x58, 0x55, 0xc4, 0xb9, 0xc8, 0x43, 0xb0, 0x63, 0x8a, + 0x1e, 0x1b, 0x00, 0x5c, 0xb1, 0x29, 0x0c, 0x36, 0x9e, 0x59, 0x05, 0xc3, + 0x12, 0x95, 0x1a, 0x39, 0xeb, 0x84, 0x64, 0x64, 0xb4, 0xa9, 0x10, 0x3f, + 0x27, 0x23, 0x19, 0x5f, 0xf2, 0x64, 0x44, 0x23, 0xa9, 0x0e, 0x60, 0xa7, + 0xaf, 0x53, 0x33, 0xe2, 0xba, 0x4d, 0x1a, 0x8b, 0x87, 0x65, 0x53, 0x8b, + 0x85, 0xe2, 0x4d, 0x0e, 0x0b, 0x11, 0x7a, 0x88, 0x3b, 0x13, 0xd9, 0xbd, + 0xf8, 0x3b, 0xc6, 0xe5, 0xf2, 0x8a, 0xb1, 0xa1, 0x0a, 0x40, 0xc1, 0x81, + 0xf0, 0x18, 0x61, 0x79, 0x96, 0x41, 0x54, 0x43, 0x8e, 0xfc, 0x11, 0x7e, + 0x40, 0xf7, 0x38, 0x5f, 0x07, 0x62, 0x0f, 0x33, 0x70, 0x41, 0x11, 0x1b, + 0x66, 0xc5, 0x0e, 0x69, 0x2c, 0x56, 0xab, 0x6b, 0x6c, 0x37, 0x81, 0x48, + 0x19, 0xe7, 0x2d, 0x2d, 0xcb, 0x21, 0x3c, 0xa3, 0x5a, 0x8f, 0xe6, 0x13, + 0xb6, 0x1a, 0x35, 0xcf, 0x09, 0xc4, 0x4d, 0xc4, 0xbb, 0x4b, 0x06, 0x5b, + 0xd0, 0x28, 0x5d, 0x52, 0xe6, 0xcd, 0xaa, 0x4a, 0x4d, 0xb2, 0x96, 0x13, + 0x87, 0x96, 0x4e, 0x07, 0x13, 0xb3, 0x78, 0x78, 0x15, 0x93, 0xa7, 0xba, + 0x25, 0x60, 0x4d, 0x24, 0x38, 0x64, 0xea, 0x33, 0x79, 0x1c, 0x94, 0x62, + 0x5a, 0xd0, 0x5a, 0x91, 0x3c, 0x0f, 0x09, 0x3a, 0x2c, 0xac, 0x53, 0x0c, + 0xea, 0x52, 0x66, 0xab, 0xc4, 0x83, 0x3a, 0xb7, 0x28, 0xaa, 0xb9, 0x7d, + 0xbf, 0x03, 0x6b, 0x90, 0x29, 0xc0, 0xdc, 0x08, 0x96, 0x13, 0x97, 0x9c, + 0xbc, 0xb1, 0xa6, 0x00, 0xe4, 0x84, 0x1a, 0x31, 0x84, 0x2e, 0xf1, 0xce, + 0x12, 0x74, 0x2b, 0x5a, 0x2b, 0x97, 0xa1, 0x37, 0x80, 0xeb, 0xea, 0xbd, + 0xaa, 0x40, 0x85, 0xc2, 0xfb, 0x2e, 0x8a, 0x14, 0x8a, 0xd3, 0x31, 0x7a, + 0x57, 0x6b, 0x4a, 0xf1, 0x19, 0x2c, 0x04, 0xf5, 0x2d, 0x11, 0x08, 0xb1, + 0x75, 0x55, 0xc6, 0x8f, 0x69, 0x4f, 0x0a, 0xf9, 0x49, 0xce, 0x70, 0x77, + 0xdb, 0x36, 0xa6, 0xdf, 0x05, 0x25, 0x85, 0x96, 0x30, 0x19, 0x4a, 0x5a, + 0x89, 0x20, 0xa0, 0x7b, 0xc9, 0x88, 0xb1, 0x74, 0xa7, 0xb4, 0xbb, 0x80, + 0xb5, 0xf2, 0x6e, 0x06, 0xa0, 0xac, 0xbe, 0xa8, 0x00, 0x06, 0x04, 0x5e, + 0x7f, 0x42, 0x7f, 0x00, 0x9a, 0x79, 0xe5, 0xc9, 0x5d, 0xa8, 0x85, 0xbe, + 0x28, 0x2c, 0xc0, 0xb1, 0x07, 0x42, 0xf0, 0x0c, 0x94, 0xa6, 0x70, 0x48, + 0x22, 0xc1, 0x98, 0x3a, 0xca, 0x5c, 0x05, 0x14, 0x7b, 0x0e, 0xd2, 0xc0, + 0x13, 0x0b, 0xcb, 0x61, 0x83, 0x59, 0xa8, 0x07, 0x1f, 0x43, 0x42, 0x23, + 0xc7, 0x32, 0x67, 0x69, 0x99, 0xbd, 0x18, 0xbb, 0xc9, 0x50, 0x21, 0x70, + 0x22, 0x7b, 0x1d, 0xa4, 0xfa, 0xb5, 0x83, 0x73, 0x75, 0x8a, 0xc2, 0x62, + 0x5f, 0x48, 0x2f, 0x5d, 0xa6, 0xb8, 0x9e, 0x73, 0x06, 0x0c, 0xe5, 0x71, + 0x5b, 0xb1, 0xaf, 0xf1, 0x16, 0xb6, 0xa9, 0x65, 0x02, 0xce, 0x39, 0x9d, + 0x0d, 0x12, 0x7e, 0xc2, 0x83, 0x90, 0xa5, 0xb1, 0x28, 0x50, 0xfc, 0x0c, + 0xf6, 0x7b, 0x90, 0xcc, 0x75, 0x03, 0x52, 0xe6, 0x04, 0xcc, 0xf6, 0x9d, + 0x6e, 0xe7, 0x61, 0x01, 0xf9, 0x82, 0x4b, 0x78, 0xb0, 0xfa, 0xd5, 0xc5, + 0x9f, 0x6a, 0x01, 0xcf, 0x1a, 0x82, 0xb5, 0xbc, 0x1a, 0x69, 0x0c, 0x9f, + 0x43, 0x02, 0x8b, 0x9f, 0xb5, 0x2f, 0x49, 0x54, 0x54, 0x9a, 0x2a, 0xb3, + 0x2f, 0xaa, 0x1a, 0xf3, 0x36, 0x4a, 0xed, 0x5c, 0x30, 0xe6, 0x8b, 0x30, + 0x38, 0x5a, 0x50, 0x01, 0x66, 0x2b, 0xb0, 0x97, 0xb9, 0x3b, 0x3b, 0x55, + 0x36, 0x6a, 0x44, 0x51, 0x85, 0x09, 0x9e, 0x00, 0xab, 0x9a, 0x87, 0xa7, + 0xa7, 0x41, 0x75, 0xe3, 0x55, 0xbc, 0x72, 0xf3, 0x31, 0x5d, 0x88, 0x80, + 0x19, 0x23, 0xa1, 0x1f, 0x97, 0xce, 0x0a, 0xa5, 0x37, 0x0c, 0x14, 0x5d, + 0x46, 0x36, 0x96, 0x54, 0x41, 0x9d, 0x49, 0x27, 0x26, 0x99, 0x65, 0x31, + 0x18, 0xec, 0x3a, 0x9e, 0xe5, 0x1e, 0xcc, 0x12, 0xcf, 0x10, 0x47, 0x34, + 0xe7, 0xb4, 0x8b, 0x7c, 0xdb, 0x9a, 0xd6, 0xe1, 0xab, 0xea, 0x67, 0x09, + 0x24, 0xa7, 0xc7, 0x4b, 0x2b, 0xcd, 0xe0, 0x3b, 0x6f, 0x26, 0xd9, 0xbc, + 0x9b, 0x86, 0x61, 0xd4, 0x81, 0xc7, 0x38, 0xe4, 0x3a, 0x41, 0x93, 0x18, + 0xe1, 0x82, 0x66, 0x2f, 0x37, 0xb4, 0xa6, 0xb3, 0xa2, 0x2b, 0x7b, 0x86, + 0x3a, 0x31, 0x71, 0xcb, 0xa4, 0xa3, 0x39, 0xc2, 0x0d, 0xee, 0x83, 0xb9, + 0x62, 0x47, 0x1c, 0xc6, 0x11, 0x3a, 0x7a, 0x43, 0xca, 0x7c, 0xa8, 0x21, + 0xe9, 0x39, 0xa2, 0x7b, 0x73, 0xa1, 0xc7, 0xb3, 0x84, 0x5b, 0xfb, 0x55, + 0x12, 0x0c, 0x03, 0xf0, 0xb8, 0xba, 0xd7, 0xd3, 0x7a, 0xb8, 0x96, 0xc4, + 0x64, 0xb2, 0x8a, 0x3c, 0xa0, 0x9d, 0x03, 0x49, 0xbc, 0x01, 0x3c, 0x85, + 0xdf, 0x05, 0xae, 0x9f, 0x4a, 0x15, 0xfb, 0xe9, 0x18, 0xb9, 0x20, 0x96, + 0x74, 0x04, 0x4b, 0x66, 0x0c, 0xc5, 0x89, 0x27, 0x29, 0xcc, 0xf4, 0xc9, + 0xec, 0x09, 0x00, 0x8e, 0x36, 0x45, 0x06, 0x36, 0x1b, 0x3f, 0x39, 0x62, + 0x07, 0xe4, 0x9f, 0x6a, 0xc3, 0x1b, 0xae, 0x99, 0x1e, 0xda, 0xd7, 0x08, + 0x12, 0x64, 0x79, 0x5f, 0x05, 0x65, 0x40, 0xd1, 0x61, 0xf3, 0xb7, 0x98, + 0x14, 0x13, 0xc6, 0x49, 0x76, 0x42, 0xa4, 0x78, 0xb6, 0x59, 0x75, 0x40, + 0xdd, 0xb5, 0xba, 0x8f, 0xd2, 0x23, 0x82, 0xc8, 0x04, 0x5f, 0x13, 0xbd, + 0x74, 0xc3, 0xc5, 0xb8, 0x1b, 0x7b, 0xca, 0x9b, 0x99, 0x49, 0x22, 0x32, + 0xb2, 0xd7, 0x5e, 0xee, 0x65, 0xc1, 0xad, 0xca, 0x0e, 0xb2, 0x72, 0x7b, + 0xcf, 0x9b, 0x1f, 0xf4, 0x81, 0x8c, 0x9b, 0x1b, 0x12, 0x05, 0x44, 0x92, + 0x46, 0x95, 0xa2, 0x3a, 0x8b, 0x53, 0x8c, 0x6c, 0x83, 0x44, 0xb4, 0x1e, + 0xf7, 0x94, 0x0e, 0xfd, 0xf7, 0x3f, 0xb1, 0x68, 0xb2, 0x29, 0x5c, 0x78, + 0xa7, 0x60, 0x40, 0x17, 0x14, 0xb1, 0x6c, 0x46, 0xa1, 0x84, 0x95, 0x02, + 0x8c, 0xe4, 0xad, 0xdc, 0x21, 0xc3, 0x40, 0xb8, 0x7e, 0x9e, 0xb1, 0x7d, + 0x55, 0x41, 0x20, 0x77, 0x70, 0x0e, 0x47, 0x0b, 0xad, 0x2e, 0xb7, 0xb5, + 0xeb, 0xec, 0x60, 0x3c, 0x09, 0xe6, 0xc2, 0x8c, 0xb6, 0x74, 0xfa, 0x32, + 0xdc, 0x5b, 0x96, 0x25, 0xef, 0x73, 0x67, 0xa5, 0xb1, 0x06, 0xe8, 0x8b, + 0x0c, 0x73, 0xa2, 0x2e, 0x9e, 0x32, 0x00, 0x17}, + // cipherTextDigest + {0xcf, 0x38, 0x98, 0x08, 0x22, 0x77, 0x0b, 0x09, 0x95, 0x44, 0x66, + 0x4b, 0x5d, 0xf9, 0xa5, 0xc8, 0x54, 0x2c, 0xc8, 0x8f, 0xb7, 0xe6, + 0x40, 0x48, 0xb7, 0x5d, 0x02, 0x6a, 0x19, 0x1e, 0x00, 0x36}, + // secret + {0x2a, 0x98, 0xc7, 0x47, 0x07, 0x74, 0x95, 0xfa, 0x04, 0x49, 0x60, + 0x8c, 0xac, 0x11, 0x79, 0x8a, 0x5c, 0xfa, 0x13, 0x38, 0x1d, 0x25, + 0x78, 0x73, 0x5e, 0x0b, 0x14, 0x62, 0x62, 0x48, 0x26, 0x4a}, + true}, + // tcID: 34 + {34, + params_ml_kem768_test_mode, + // entropy + {0x87, 0xd6, 0xa4, 0x6d, 0x4a, 0x11, 0xbd, 0xdd, 0x27, 0xd0, 0x1f, + 0x96, 0xee, 0xa1, 0x85, 0xf4, 0xf1, 0x29, 0xa2, 0xf2, 0x52, 0x49, + 0x9e, 0x4e, 0x4f, 0x14, 0xbb, 0x75, 0x0f, 0xa7, 0x5b, 0x71}, + // publicKey + {0x1d, 0x11, 0x41, 0xd5, 0x8b, 0x68, 0x01, 0xb3, 0xce, 0x4a, 0x78, 0xa7, + 0x40, 0x77, 0xa7, 0xd5, 0xe4, 0x64, 0xf9, 0xd7, 0x10, 0x1c, 0xb2, 0x47, + 0x20, 0xd0, 0xa9, 0x22, 0xb2, 0x61, 0xb1, 0x73, 0x81, 0xc0, 0x82, 0x2c, + 0x46, 0x3c, 0xcd, 0xe0, 0x82, 0x2f, 0x45, 0xf5, 0x73, 0x4b, 0x71, 0x82, + 0x0b, 0x8c, 0x45, 0xef, 0x93, 0x3a, 0x0e, 0x63, 0x29, 0xf7, 0x81, 0x30, + 0x1b, 0xd7, 0xb8, 0xa2, 0x70, 0xb5, 0x87, 0x07, 0x04, 0xee, 0x15, 0x0f, + 0x57, 0x09, 0xa4, 0xf0, 0x98, 0xc4, 0x12, 0x83, 0x98, 0x30, 0xb9, 0xbd, + 0xdc, 0xcb, 0x4e, 0x1d, 0xdc, 0x5c, 0x13, 0x0b, 0x27, 0x22, 0x80, 0x89, + 0xe3, 0xd3, 0x86, 0xa3, 0x64, 0x0f, 0xea, 0x08, 0xb5, 0xdc, 0x13, 0x05, + 0x19, 0xe6, 0x6f, 0xee, 0x56, 0x02, 0xab, 0x78, 0x37, 0x16, 0xa9, 0x80, + 0x00, 0xad, 0x2c, 0xb7, 0xc9, 0x3d, 0x75, 0x6c, 0x2d, 0xa4, 0xbc, 0xbc, + 0xed, 0x94, 0x58, 0x87, 0xf9, 0x78, 0x17, 0x07, 0x16, 0xec, 0x76, 0x2c, + 0x01, 0x30, 0x09, 0xcb, 0x57, 0x2e, 0xd9, 0xec, 0x09, 0x64, 0x7c, 0x0f, + 0x1c, 0x9b, 0x86, 0x1e, 0x14, 0xb2, 0x66, 0xf2, 0x06, 0x9e, 0x74, 0x0b, + 0xac, 0x33, 0xbf, 0xe8, 0xe7, 0xb6, 0x2e, 0x57, 0x05, 0x97, 0x00, 0x82, + 0xc1, 0xdc, 0xaf, 0xa3, 0x19, 0xcb, 0x94, 0x86, 0x7d, 0x63, 0x16, 0x79, + 0xde, 0x49, 0x4d, 0x03, 0x89, 0x09, 0x5d, 0x00, 0x49, 0xff, 0xb9, 0x00, + 0x01, 0x46, 0x8c, 0x6f, 0x2c, 0x8d, 0x1b, 0xe2, 0x69, 0x2c, 0x34, 0x64, + 0x7b, 0xf6, 0x38, 0x0d, 0x8a, 0x23, 0xc4, 0xd1, 0x2f, 0xc9, 0x5c, 0x71, + 0xac, 0x39, 0x4e, 0x2c, 0xe1, 0x63, 0x24, 0xa9, 0x26, 0xd5, 0x7a, 0xb4, + 0x1c, 0x65, 0x65, 0x63, 0x37, 0x92, 0x28, 0x01, 0x27, 0x39, 0x09, 0xd0, + 0xb5, 0x6a, 0x84, 0x8a, 0x7a, 0xcc, 0x38, 0x38, 0x48, 0xa8, 0x6a, 0x56, + 0x75, 0xec, 0x96, 0x78, 0x1a, 0xc9, 0x0d, 0x92, 0x88, 0x56, 0x0b, 0x45, + 0x22, 0x29, 0x5b, 0x5b, 0x5a, 0x86, 0x9b, 0xa0, 0x5b, 0x5b, 0x30, 0x92, + 0x77, 0x72, 0x54, 0x9b, 0x03, 0x13, 0xc6, 0x09, 0xa3, 0x91, 0xb3, 0x7f, + 0xf3, 0x96, 0x6c, 0x24, 0x84, 0x86, 0x6d, 0x88, 0x57, 0xc1, 0x17, 0x83, + 0x33, 0x2b, 0x7f, 0xaf, 0x98, 0x60, 0x00, 0xf5, 0xb8, 0x16, 0xa0, 0xc5, + 0xd9, 0xd1, 0xab, 0xa7, 0xac, 0x11, 0x42, 0x5b, 0xa2, 0x49, 0xb8, 0x66, + 0x43, 0xf1, 0x00, 0xf0, 0x25, 0x22, 0x86, 0xb4, 0x7c, 0xdd, 0x6b, 0x6b, + 0x07, 0x26, 0x27, 0x94, 0xe1, 0x35, 0xa0, 0x79, 0x45, 0x13, 0x98, 0xbb, + 0x58, 0x27, 0x2a, 0xa7, 0xb6, 0x8f, 0x8a, 0x29, 0x79, 0xf5, 0x80, 0x7d, + 0xbc, 0x9b, 0x82, 0xd3, 0xe1, 0xb3, 0x12, 0xd0, 0xbc, 0x98, 0x44, 0x9a, + 0x58, 0x88, 0x92, 0x26, 0xe4, 0xa3, 0x0c, 0x19, 0x08, 0x7b, 0x16, 0x8c, + 0x6d, 0x21, 0xc6, 0xa2, 0x5a, 0xc6, 0xd6, 0xa5, 0x33, 0xa0, 0xe7, 0x46, + 0x4e, 0x2a, 0x71, 0xa8, 0x0b, 0xcd, 0xdd, 0x51, 0x66, 0x4e, 0xc4, 0xc8, + 0x2b, 0x46, 0x3e, 0x39, 0xf8, 0x41, 0xde, 0x46, 0x4d, 0x13, 0xd5, 0x53, + 0x1d, 0xd6, 0x28, 0xcb, 0xa0, 0x41, 0x4c, 0xa5, 0x63, 0x06, 0xa6, 0x9d, + 0xbd, 0x2c, 0x6b, 0xc6, 0x89, 0x27, 0x53, 0xb0, 0x34, 0x18, 0x2c, 0x10, + 0x81, 0x9b, 0x92, 0xa7, 0x34, 0x52, 0xf2, 0x18, 0xb8, 0x06, 0xca, 0x9c, + 0xba, 0xbc, 0x1e, 0xd4, 0x63, 0x7a, 0x00, 0x6a, 0x58, 0x80, 0xbb, 0x6e, + 0xb6, 0xf7, 0xb7, 0x57, 0x33, 0x39, 0x23, 0x84, 0xc2, 0xd6, 0xa4, 0x97, + 0xf3, 0x26, 0x33, 0x84, 0xf8, 0x47, 0xca, 0x10, 0x39, 0xf9, 0x0c, 0x63, + 0x87, 0xd6, 0x88, 0xd1, 0xda, 0xc3, 0x65, 0x3a, 0x46, 0x0f, 0x61, 0x74, + 0xf2, 0x58, 0x2f, 0x53, 0x78, 0x66, 0x6a, 0xe7, 0x0f, 0x87, 0x5c, 0x16, + 0x30, 0xca, 0x35, 0x5e, 0x9c, 0x48, 0x00, 0x22, 0x59, 0xdb, 0x01, 0x42, + 0xe1, 0xb9, 0x12, 0xa7, 0xc3, 0xbb, 0xa9, 0x76, 0x14, 0xa2, 0xf2, 0x91, + 0x35, 0x74, 0x5f, 0x02, 0x33, 0xab, 0xb8, 0x31, 0x88, 0x36, 0x41, 0x1a, + 0x1a, 0xb5, 0xa5, 0x9e, 0x95, 0x15, 0x0e, 0xfa, 0xb1, 0xed, 0x4c, 0x8e, + 0x90, 0x63, 0x95, 0x24, 0x94, 0xc4, 0xb6, 0xfc, 0x8e, 0xde, 0x56, 0x8c, + 0x53, 0x4a, 0x78, 0xa3, 0x39, 0x44, 0xa3, 0xb5, 0x23, 0x70, 0x88, 0xcb, + 0x23, 0x15, 0x33, 0x9e, 0xfc, 0x77, 0xa9, 0xd2, 0x7f, 0x62, 0x25, 0x36, + 0xd7, 0x0b, 0xab, 0x5c, 0xb2, 0x6c, 0x99, 0xc6, 0x08, 0x5e, 0x78, 0x20, + 0x4f, 0xa5, 0x86, 0x53, 0xf5, 0x94, 0x05, 0x41, 0x46, 0x3d, 0x19, 0x8b, + 0xfb, 0xa4, 0x88, 0x1e, 0x05, 0x17, 0xd6, 0xbb, 0xb5, 0xa0, 0x31, 0x17, + 0x20, 0xf6, 0x12, 0x11, 0xfc, 0x3b, 0x33, 0x71, 0x71, 0x20, 0x5a, 0x59, + 0xf5, 0x47, 0x4d, 0x25, 0x3b, 0x71, 0x83, 0x5a, 0x5b, 0xc4, 0xdc, 0x41, + 0xec, 0xc7, 0x4e, 0x24, 0xb3, 0xa8, 0x73, 0x3b, 0x93, 0xbd, 0x1b, 0x7e, + 0x4a, 0x58, 0xb3, 0x80, 0xc2, 0x45, 0x9d, 0x78, 0x80, 0xf4, 0x49, 0x9b, + 0x0b, 0xb9, 0xcc, 0x4d, 0xfb, 0x9f, 0x02, 0x1a, 0xbb, 0x96, 0xd4, 0xbb, + 0xaa, 0xa6, 0x0c, 0xca, 0x97, 0xbc, 0x3e, 0x09, 0x76, 0x82, 0x25, 0x5a, + 0xe3, 0xb2, 0x31, 0x62, 0xf2, 0xb1, 0x63, 0x1c, 0x59, 0x88, 0x27, 0x54, + 0x20, 0x89, 0xb2, 0x84, 0xc0, 0x9d, 0xe2, 0xc8, 0x8f, 0xe5, 0x46, 0xc2, + 0x73, 0x57, 0x47, 0xda, 0x94, 0x2c, 0x83, 0x39, 0x0f, 0x48, 0xbc, 0x7d, + 0xee, 0x80, 0x16, 0x35, 0x47, 0x41, 0x7b, 0xd6, 0x02, 0x15, 0x59, 0x9c, + 0xb8, 0x52, 0x73, 0x2d, 0x12, 0x75, 0x5f, 0x54, 0x8c, 0x69, 0xf7, 0x1b, + 0x8e, 0x52, 0x1f, 0xa4, 0x49, 0x29, 0xb2, 0x38, 0x77, 0x6b, 0x22, 0xc0, + 0xdc, 0x07, 0x1e, 0xf8, 0x29, 0x55, 0x76, 0xf6, 0x34, 0xc7, 0xb3, 0xc4, + 0x52, 0x33, 0xc3, 0x09, 0xb8, 0x3a, 0x5c, 0x2b, 0x89, 0x5d, 0x80, 0x4d, + 0x7c, 0x19, 0x36, 0xfb, 0x2a, 0x63, 0x18, 0xf8, 0xab, 0xf3, 0x02, 0x6b, + 0x75, 0x6a, 0x4f, 0x4f, 0xa9, 0x8e, 0x41, 0x52, 0x6f, 0x09, 0x24, 0x68, + 0xbe, 0x9a, 0x92, 0xa5, 0xdb, 0x3b, 0xe0, 0x2c, 0x74, 0x40, 0x67, 0x0a, + 0x4a, 0xc2, 0x74, 0xbf, 0x7a, 0xc1, 0xc5, 0x79, 0x1e, 0x9d, 0x45, 0xab, + 0xfa, 0xb0, 0xbb, 0xc5, 0x93, 0xc7, 0x5f, 0xd0, 0xa9, 0xe7, 0xc0, 0xbb, + 0xe8, 0x99, 0x77, 0x0d, 0xe6, 0xa9, 0xd7, 0xa4, 0x8d, 0x0a, 0x3b, 0x3a, + 0x55, 0x47, 0x1a, 0x1c, 0x65, 0x9f, 0x89, 0xa4, 0x0f, 0x78, 0x16, 0x17, + 0x83, 0xac, 0x65, 0xc7, 0x64, 0xcd, 0x9e, 0x39, 0x57, 0x9b, 0xb9, 0x46, + 0x94, 0xf2, 0x62, 0xce, 0xcc, 0x8b, 0x24, 0xb0, 0xce, 0x23, 0x38, 0x1e, + 0x40, 0x91, 0x8b, 0x57, 0x28, 0x44, 0xf9, 0x36, 0xa6, 0x87, 0xe0, 0x09, + 0xef, 0x12, 0x80, 0xc9, 0x9b, 0x4e, 0x86, 0xc1, 0xbf, 0xa5, 0x22, 0xbf, + 0xd0, 0xb7, 0xc9, 0x0e, 0x11, 0x87, 0x37, 0x84, 0x37, 0x7e, 0x21, 0xcb, + 0x42, 0x72, 0x19, 0x2e, 0x54, 0x5e, 0xdb, 0x2b, 0xb0, 0xc2, 0x11, 0x51, + 0x98, 0x14, 0x65, 0x48, 0x92, 0x99, 0x12, 0x3b, 0x5e, 0xc1, 0x10, 0x1b, + 0x02, 0xbc, 0x30, 0x34, 0x6c, 0x76, 0x07, 0x99, 0xcc, 0x0e, 0xd6, 0x17, + 0x3b, 0xac, 0x22, 0x2b, 0x8a, 0x40, 0xbf, 0x94, 0x01, 0x7e, 0x24, 0xa1, + 0xaf, 0xdc, 0x59, 0x75, 0x5a, 0x3e, 0x16, 0xb4, 0xbb, 0x0b, 0x73, 0x18, + 0x57, 0x57, 0x2f, 0x12, 0xe3, 0x16, 0x08, 0x12, 0x72, 0x3e, 0x77, 0x4e, + 0x6f, 0x3a, 0xcd, 0x6c, 0xc3, 0x22, 0x16, 0xb0, 0x8d, 0xbd, 0xf6, 0x16, + 0xae, 0x84, 0x3c, 0xe4, 0xb6, 0x6c, 0xd0, 0xa7, 0xc4, 0x0f, 0x2b, 0x3d, + 0x8d, 0xb1, 0x4e, 0x52, 0x6a, 0x9b, 0xa5, 0x0c, 0x7e, 0x2a, 0x35, 0x13, + 0x64, 0x65, 0x0e, 0xfd, 0x76, 0xc9, 0x13, 0x36, 0xa2, 0x3f, 0x70, 0x30, + 0xc7, 0xc7, 0x5c, 0x0a, 0x57, 0x62, 0x41, 0x73, 0x81, 0xc8, 0x18, 0x74, + 0x03, 0x0b, 0x02, 0xc1, 0x0b, 0xad, 0x2c, 0x67, 0x51, 0x76, 0x44, 0x20, + 0x08, 0x84, 0x63, 0xb2, 0x73, 0xc4, 0xe4, 0xc3, 0x68, 0xa4, 0x83, 0x06, + 0x4d, 0x5b, 0x69, 0x90, 0x09, 0x92, 0xa0, 0xe8, 0x1f, 0x70, 0xa5, 0xa9, + 0xec, 0x74, 0x33, 0xa0, 0x32, 0x80, 0x61, 0x64, 0xb7, 0x91, 0xe3, 0x52, + 0xf4, 0x11, 0x42, 0x37, 0x9b, 0x89, 0x13, 0x91, 0x90, 0xea, 0x55, 0xca, + 0x88, 0x4d, 0x33, 0x39, 0xcc, 0x03, 0x88, 0x6b, 0x5c, 0xd7, 0x70, 0x3c, + 0x6b, 0x5c, 0xae, 0xf8, 0xb4, 0x50, 0x0e, 0xf4, 0x30, 0x76, 0xf2, 0xad, + 0x22, 0x56, 0x0f, 0xf0, 0x4b, 0xfb, 0x21, 0x15}, + // cipherTextDigest + {0x64, 0x22, 0x5b, 0x18, 0xd0, 0x62, 0x21, 0x87, 0xa5, 0x95, 0xc4, + 0x6b, 0xca, 0x58, 0x62, 0x2c, 0xd3, 0x31, 0xca, 0x6d, 0xe8, 0x2a, + 0x44, 0x76, 0x66, 0x6b, 0xe0, 0xd5, 0x26, 0xf0, 0xa4, 0x41}, + // secret + {0xfc, 0xda, 0x5e, 0x4d, 0xa1, 0x3d, 0x21, 0x7c, 0xe9, 0x23, 0x93, + 0x2e, 0x14, 0x5d, 0x35, 0x1f, 0xb3, 0x9c, 0xdc, 0x96, 0x68, 0x7d, + 0xbe, 0x33, 0xb4, 0x38, 0x97, 0x49, 0x0f, 0x72, 0x65, 0xc7}, + true}, + // tcID: 35 + {35, + params_ml_kem768_test_mode, + // entropy + {0xb6, 0xa0, 0xfb, 0x8d, 0x2a, 0xd2, 0x62, 0x77, 0x70, 0x59, 0xd2, + 0x7c, 0xc3, 0x49, 0x1c, 0xbf, 0x43, 0x4e, 0x5b, 0x78, 0xcc, 0x53, + 0xb5, 0x76, 0x1a, 0xdb, 0xda, 0x2c, 0x10, 0xb9, 0x73, 0x85}, + // publicKey + {0xc9, 0xe8, 0xa0, 0x7c, 0xf6, 0x12, 0x83, 0x97, 0xb5, 0xe3, 0x86, 0x29, + 0x9c, 0xf8, 0x31, 0xde, 0x98, 0x15, 0x1a, 0x1b, 0x18, 0x07, 0x2a, 0xae, + 0x04, 0x97, 0xbd, 0xbd, 0x7c, 0xb9, 0x66, 0x95, 0x87, 0x76, 0x71, 0x0a, + 0xbb, 0xe3, 0x18, 0xd2, 0x8b, 0x3e, 0xb0, 0x96, 0x72, 0x1d, 0x44, 0x90, + 0x80, 0x2b, 0xc3, 0x6a, 0xd1, 0xca, 0x27, 0x9b, 0x92, 0x6d, 0x55, 0x88, + 0xfb, 0x56, 0x8d, 0xc7, 0xba, 0x3d, 0x91, 0x2a, 0x2e, 0x27, 0x25, 0x5b, + 0x4b, 0xeb, 0x87, 0xdc, 0xab, 0xbf, 0x44, 0x8b, 0x0d, 0x82, 0xd5, 0x12, + 0x0e, 0xeb, 0x31, 0xba, 0xb4, 0xbb, 0xf4, 0x30, 0x1f, 0xe0, 0xdc, 0x97, + 0xb0, 0xa2, 0x41, 0xb6, 0xc8, 0x62, 0x49, 0x1b, 0x6f, 0x3c, 0x03, 0x69, + 0xa2, 0xab, 0xbd, 0x59, 0xea, 0x6a, 0xe9, 0x61, 0x1b, 0xb8, 0xa0, 0xab, + 0xa5, 0x24, 0x26, 0xdd, 0xc2, 0x28, 0x2a, 0xfb, 0x01, 0xb7, 0x0b, 0x43, + 0x03, 0x09, 0x29, 0x4e, 0xca, 0x78, 0xca, 0x58, 0x9b, 0xc9, 0x60, 0xb9, + 0x22, 0x95, 0x45, 0x4d, 0xcc, 0x9b, 0x2c, 0x30, 0x59, 0x6c, 0x14, 0x93, + 0xe6, 0x72, 0x21, 0x92, 0xd2, 0x78, 0x8c, 0xea, 0x76, 0x1e, 0xd2, 0x4c, + 0x19, 0xb9, 0x32, 0x25, 0x14, 0xc1, 0x4e, 0x84, 0x8e, 0x59, 0x25, 0x1c, + 0x79, 0x67, 0x80, 0x4b, 0x65, 0x63, 0x8d, 0xe0, 0x6e, 0x35, 0x1b, 0x93, + 0xef, 0x92, 0xbb, 0xfa, 0xd0, 0x6e, 0xe2, 0x8b, 0x4f, 0xb7, 0xf5, 0xbb, + 0xe3, 0xd8, 0xca, 0xa9, 0xd4, 0x87, 0x3d, 0xa1, 0x1d, 0x87, 0xe9, 0x7b, + 0x99, 0x0a, 0x25, 0x5d, 0x34, 0xb8, 0xe6, 0xd8, 0x40, 0x8f, 0x55, 0x36, + 0x88, 0xf4, 0xb4, 0xcb, 0x9a, 0xa3, 0x1b, 0x22, 0xab, 0xbf, 0x18, 0xb0, + 0xb1, 0x14, 0x2b, 0xcb, 0xb2, 0x23, 0x56, 0xf5, 0x20, 0xee, 0x68, 0x8c, + 0x4b, 0xd5, 0x6c, 0x65, 0xeb, 0xa6, 0x8f, 0x23, 0x54, 0x94, 0xfb, 0x71, + 0x12, 0xa2, 0x56, 0x23, 0xc7, 0x5c, 0xb5, 0xb9, 0x94, 0x54, 0x0a, 0x1e, + 0xea, 0xfb, 0xcc, 0x43, 0x92, 0x29, 0xab, 0x69, 0x07, 0xed, 0x05, 0x94, + 0x31, 0xf5, 0x99, 0xe0, 0x69, 0x7b, 0x97, 0x90, 0x72, 0xb6, 0x09, 0x2a, + 0x85, 0x39, 0x4b, 0x98, 0x96, 0xc4, 0xe9, 0x66, 0xac, 0xa5, 0x13, 0xbe, + 0xcd, 0x92, 0x02, 0xa2, 0x04, 0x7d, 0x21, 0x3b, 0x2f, 0x95, 0x90, 0x26, + 0x36, 0x63, 0x36, 0x38, 0x80, 0xb1, 0xd2, 0xf2, 0xac, 0xf7, 0x74, 0xcd, + 0xee, 0x48, 0x4d, 0x1e, 0x41, 0x94, 0x0f, 0x64, 0x29, 0xa7, 0x68, 0x10, + 0x25, 0xe2, 0x34, 0xbc, 0x11, 0xae, 0xc7, 0x8c, 0x77, 0x8d, 0x67, 0x17, + 0x53, 0xe9, 0x51, 0xa6, 0x66, 0x5b, 0x9e, 0x94, 0x97, 0xe4, 0x30, 0x24, + 0x96, 0xe3, 0xc2, 0x5c, 0x0a, 0x7f, 0x0d, 0x80, 0x3f, 0xb0, 0x72, 0x26, + 0x49, 0x41, 0x46, 0xc1, 0x0a, 0x96, 0x1e, 0x47, 0xa2, 0xc6, 0xaa, 0x8f, + 0xdb, 0xf8, 0xb9, 0x05, 0x4c, 0x21, 0x7b, 0xcb, 0x37, 0xa0, 0x18, 0x97, + 0x35, 0x97, 0x05, 0x68, 0x01, 0xa6, 0x53, 0x26, 0x99, 0xd8, 0xca, 0x06, + 0x91, 0x82, 0x45, 0x20, 0x01, 0xc2, 0xa7, 0xc3, 0xa3, 0x4a, 0xc8, 0x3c, + 0x80, 0xd5, 0x54, 0xa9, 0x48, 0x88, 0x84, 0x45, 0x5b, 0x50, 0x15, 0x86, + 0x14, 0x24, 0x4e, 0x82, 0xe0, 0xb5, 0x9c, 0x98, 0xbf, 0x61, 0x03, 0x2f, + 0xd4, 0xd0, 0x5c, 0xbe, 0xa2, 0x3f, 0xe5, 0x78, 0x12, 0x04, 0xb9, 0xb0, + 0xb6, 0x05, 0x35, 0x41, 0x05, 0x9e, 0x94, 0xf2, 0x35, 0x5d, 0x35, 0xbb, + 0x4d, 0x81, 0x53, 0x00, 0x6d, 0x20, 0x8f, 0x10, 0xb2, 0xf2, 0xa4, 0x39, + 0xec, 0x12, 0x30, 0x7d, 0x60, 0x3d, 0xd4, 0x43, 0xc9, 0x55, 0x62, 0x62, + 0x29, 0x99, 0x2b, 0xc6, 0x99, 0x3c, 0x14, 0x2c, 0xb9, 0x2b, 0xc6, 0xca, + 0x94, 0x19, 0x66, 0xb9, 0xc0, 0x24, 0xe9, 0x46, 0xa1, 0xbd, 0x3b, 0x68, + 0xf0, 0x61, 0x6e, 0x06, 0x15, 0x1e, 0xec, 0x24, 0x21, 0xc5, 0x19, 0x79, + 0xe1, 0xd7, 0x8a, 0x02, 0x66, 0x94, 0xab, 0x1b, 0x44, 0xf3, 0xf9, 0x40, + 0x4f, 0x77, 0x0c, 0x6e, 0x50, 0x9f, 0xf4, 0xdb, 0x35, 0x4c, 0x9b, 0x74, + 0x82, 0x87, 0x19, 0xbe, 0x03, 0x82, 0xfc, 0xec, 0xa0, 0x8e, 0x7c, 0xaf, + 0x79, 0x26, 0x85, 0xb1, 0xbb, 0x68, 0xfe, 0x02, 0x1b, 0x59, 0xb1, 0x36, + 0xb5, 0xaa, 0xa6, 0x35, 0x12, 0x91, 0x37, 0x9a, 0x8a, 0x7e, 0x0c, 0x25, + 0x3a, 0xeb, 0x17, 0xeb, 0xe8, 0xaa, 0x2d, 0xd2, 0x8d, 0x1f, 0x90, 0x5a, + 0xb5, 0x28, 0x29, 0x77, 0x84, 0xca, 0xa5, 0xf3, 0x3e, 0x90, 0xeb, 0xcf, + 0x1d, 0xb0, 0x05, 0xbe, 0x65, 0x01, 0xd1, 0xf3, 0x06, 0xd7, 0xb8, 0x95, + 0x8e, 0xa1, 0x63, 0x2a, 0x62, 0xb8, 0x9c, 0xa9, 0x11, 0x48, 0xc1, 0x19, + 0x48, 0xd8, 0xa8, 0xb0, 0x53, 0x22, 0x30, 0xa2, 0x48, 0x1e, 0xd2, 0xa3, + 0xab, 0x1a, 0xb2, 0xde, 0x52, 0x5b, 0xa9, 0x25, 0x80, 0x0b, 0x5a, 0x9b, + 0x90, 0x37, 0xc1, 0x16, 0x38, 0x7c, 0x1b, 0x92, 0x1e, 0x66, 0x49, 0x96, + 0xde, 0xcb, 0x00, 0xe9, 0x88, 0x7b, 0x4f, 0x89, 0x6f, 0x2b, 0x57, 0x93, + 0x98, 0xc6, 0x08, 0x84, 0x38, 0x54, 0x90, 0xe2, 0x16, 0xcf, 0xcc, 0x0b, + 0x3a, 0x06, 0x28, 0x69, 0x69, 0xb7, 0x1e, 0x0c, 0x29, 0xb0, 0x38, 0x76, + 0x20, 0xa4, 0x8b, 0x78, 0xe1, 0x04, 0x54, 0xc9, 0x81, 0xdc, 0x35, 0x7e, + 0x48, 0x08, 0xbc, 0xe4, 0x66, 0x64, 0xec, 0xe1, 0x3c, 0x8d, 0x3b, 0x46, + 0xe0, 0x38, 0x8f, 0x99, 0x33, 0x7b, 0x0d, 0x48, 0x19, 0xe4, 0x76, 0x4a, + 0x62, 0x6c, 0x97, 0x1b, 0xd6, 0x81, 0xe3, 0x4a, 0xb1, 0x3c, 0x53, 0xa8, + 0xaa, 0x81, 0x92, 0xf0, 0xb8, 0x44, 0xc8, 0x82, 0x12, 0x5c, 0x62, 0x8d, + 0xcf, 0xa3, 0x7d, 0x36, 0xf3, 0xbf, 0xe3, 0x47, 0x88, 0x8c, 0xba, 0xbc, + 0x60, 0x83, 0xa7, 0x05, 0x34, 0x9a, 0x8c, 0xa9, 0xbc, 0xc8, 0x45, 0x07, + 0x62, 0x26, 0xb1, 0x66, 0xf0, 0x4b, 0x5f, 0x78, 0xb4, 0x72, 0x2a, 0x5f, + 0x6f, 0xeb, 0x3d, 0x98, 0x04, 0x9a, 0xec, 0x34, 0x2e, 0x7e, 0xd6, 0x53, + 0x5a, 0x90, 0x79, 0x84, 0xeb, 0x5d, 0xdc, 0x0b, 0x30, 0xd8, 0xfc, 0xa5, + 0x10, 0xd7, 0x4c, 0x29, 0xf5, 0x7e, 0x18, 0xe1, 0x0e, 0x9d, 0xa3, 0x26, + 0x31, 0xa5, 0xc4, 0x7e, 0x99, 0x38, 0x20, 0xe6, 0x95, 0x1b, 0xab, 0x3b, + 0x0f, 0x07, 0x48, 0x6b, 0x56, 0xc9, 0x2a, 0x48, 0x5f, 0x3e, 0x57, 0x2b, + 0x41, 0x25, 0x27, 0xe4, 0xaa, 0x01, 0x20, 0x4a, 0xc7, 0x76, 0xb7, 0x07, + 0xd0, 0x73, 0xb8, 0x9f, 0x69, 0x56, 0xeb, 0xc8, 0x5f, 0xd8, 0x35, 0x70, + 0x5a, 0x01, 0xa5, 0x52, 0xd4, 0xcc, 0x5f, 0x50, 0x34, 0x13, 0x63, 0x1a, + 0x4b, 0x06, 0x63, 0xd2, 0x96, 0x85, 0x6c, 0x0b, 0x60, 0x79, 0xe4, 0x22, + 0xd1, 0xb2, 0xb1, 0xde, 0x6c, 0x40, 0xa4, 0xcc, 0x03, 0x36, 0x13, 0x74, + 0xd7, 0x29, 0x63, 0xf1, 0xa5, 0x45, 0x9e, 0x95, 0x1b, 0xdb, 0xfa, 0x3a, + 0x37, 0x51, 0x6e, 0x10, 0xb9, 0x67, 0xef, 0x94, 0x19, 0x22, 0x06, 0xbf, + 0x47, 0x55, 0xb1, 0x52, 0x30, 0x66, 0x8c, 0xb7, 0xa7, 0x50, 0xe9, 0x54, + 0xba, 0xe7, 0xbb, 0xaa, 0xca, 0x86, 0x0a, 0xd3, 0x08, 0x23, 0xc3, 0x6a, + 0x21, 0xec, 0xb7, 0x17, 0x28, 0xa4, 0x52, 0x53, 0x9e, 0x98, 0x26, 0x7e, + 0x89, 0x1a, 0xba, 0xd1, 0xe8, 0x4a, 0xd4, 0x73, 0x2e, 0x96, 0x90, 0x39, + 0xf9, 0xb3, 0x2f, 0xf5, 0xe5, 0x36, 0x84, 0x0a, 0x9d, 0x68, 0x6b, 0x5b, + 0xdb, 0x13, 0x7a, 0xde, 0xf8, 0xa6, 0xbb, 0x3a, 0xc5, 0xa4, 0xa3, 0x20, + 0x7b, 0x3a, 0x29, 0xd4, 0x19, 0x00, 0x4c, 0xe4, 0x7a, 0x8d, 0xd6, 0x5d, + 0xbe, 0xf2, 0x69, 0x36, 0x56, 0xb8, 0x1d, 0x1a, 0x2c, 0x9c, 0x7a, 0x1d, + 0x46, 0xf7, 0x4c, 0x8d, 0x5b, 0xad, 0xb4, 0x35, 0xab, 0xb0, 0x17, 0x99, + 0xb6, 0x28, 0x74, 0x6f, 0x01, 0x94, 0x2b, 0x28, 0xa5, 0xa7, 0x70, 0xbe, + 0x30, 0x53, 0x8e, 0xe2, 0xe3, 0x2f, 0x78, 0xd8, 0x69, 0x22, 0x5c, 0x17, + 0xa0, 0x49, 0xbe, 0x13, 0x43, 0xb0, 0x4e, 0x93, 0x45, 0xdb, 0xea, 0x9b, + 0x82, 0x16, 0x7b, 0xf2, 0x85, 0xb4, 0xda, 0x19, 0x47, 0x57, 0x74, 0xc6, + 0xbe, 0x1c, 0xbb, 0x4f, 0xc3, 0x5d, 0x46, 0x90, 0x30, 0x03, 0x25, 0x51, + 0x44, 0xca, 0x54, 0x11, 0x5c, 0x8d, 0xad, 0x1a, 0x69, 0x81, 0x19, 0x8f, + 0xdf, 0x64, 0x12, 0x1a, 0xb4, 0xb6, 0x76, 0x49, 0x5b, 0x2d, 0xd4, 0x41, + 0x15, 0x2a, 0x57, 0x74, 0x44, 0x7d, 0xd6, 0xf8, 0x0e, 0xdc, 0xa1, 0x4d, + 0xdf, 0xe7, 0xa0, 0x31, 0x43, 0x9a, 0xfe, 0xdc, 0x6b, 0x87, 0xc4, 0xbc, + 0xa0, 0xa7, 0xf6, 0xfb, 0x58, 0x98, 0x06, 0x78}, + // cipherTextDigest + {0xbc, 0x2a, 0xa0, 0xd9, 0x08, 0x35, 0xa1, 0x9d, 0xd7, 0x75, 0xdd, + 0x93, 0x99, 0x50, 0x1d, 0x27, 0x0c, 0x24, 0x25, 0x1d, 0x00, 0x19, + 0xfa, 0xad, 0x3f, 0xda, 0xa6, 0x9a, 0x79, 0xf0, 0xea, 0x52}, + // secret + {0xcf, 0x7f, 0x14, 0x9e, 0x1c, 0x22, 0xf4, 0x20, 0x78, 0xb3, 0x7a, + 0x96, 0x74, 0x35, 0x71, 0x69, 0x8b, 0x21, 0x9e, 0xcf, 0xef, 0x17, + 0xe9, 0x28, 0x30, 0x48, 0x8f, 0x19, 0xd1, 0xc9, 0x9d, 0x66}, + true}, + // tcID: 36 + {36, + params_ml_kem768_test_mode, + // entropy + {0x95, 0x32, 0xc8, 0xe2, 0x0f, 0xe6, 0x34, 0x39, 0x51, 0x97, 0xf4, + 0xce, 0x87, 0xc6, 0x9b, 0xcf, 0x6e, 0xa6, 0x6f, 0x60, 0x3e, 0x60, + 0x59, 0x7d, 0x79, 0x7d, 0x56, 0xa2, 0x4c, 0xd3, 0x37, 0xc7}, + // publicKey + {0x7c, 0xb9, 0x62, 0x28, 0xe1, 0xca, 0xf4, 0x17, 0x94, 0xd3, 0x05, 0x3f, + 0xa3, 0x30, 0x20, 0x98, 0x11, 0x07, 0xd4, 0x47, 0x53, 0x2d, 0xe6, 0x94, + 0xe2, 0xe5, 0x2e, 0xfe, 0x34, 0x05, 0xe8, 0x4b, 0x75, 0x2e, 0x16, 0x83, + 0x5a, 0x71, 0x38, 0x2a, 0xe0, 0x7d, 0x6f, 0x1c, 0xa9, 0x73, 0x45, 0x55, + 0x80, 0xa3, 0x44, 0xe8, 0x47, 0x94, 0x7b, 0x81, 0x74, 0x52, 0x88, 0xc3, + 0xee, 0x3b, 0x77, 0xb5, 0x78, 0x83, 0x52, 0xd8, 0x5e, 0x12, 0x1b, 0x4a, + 0xf8, 0x82, 0x26, 0x33, 0xd8, 0xc9, 0xf5, 0x77, 0xb7, 0x0f, 0x84, 0x4a, + 0xdf, 0x11, 0x8f, 0xb2, 0xc7, 0x2d, 0x33, 0x42, 0x72, 0x70, 0xb0, 0x2c, + 0x79, 0xb3, 0x80, 0xe8, 0xb3, 0x9a, 0xbb, 0x82, 0x20, 0xcc, 0xd5, 0x9a, + 0x35, 0x66, 0x67, 0x7c, 0xc9, 0x89, 0x7a, 0x54, 0xbb, 0x30, 0x2b, 0x67, + 0x48, 0xb5, 0x97, 0xdd, 0x78, 0x4e, 0xe0, 0xc8, 0x4d, 0xa1, 0xa7, 0xc0, + 0xd3, 0xd8, 0x74, 0x26, 0x53, 0x41, 0xe6, 0x96, 0xb6, 0x0f, 0xe3, 0x62, + 0x58, 0xd5, 0x93, 0xf2, 0xa2, 0xae, 0x57, 0x08, 0x14, 0xca, 0x52, 0x9e, + 0x89, 0xfb, 0xad, 0x1a, 0x03, 0x54, 0x16, 0x6b, 0x9f, 0x75, 0xc6, 0x18, + 0xfd, 0xe2, 0x2b, 0x00, 0x44, 0x7c, 0x06, 0x3a, 0xca, 0x9d, 0x12, 0x16, + 0x97, 0xbc, 0x06, 0xda, 0x67, 0xb9, 0x17, 0x0b, 0xb9, 0x24, 0xc3, 0xad, + 0x48, 0x8a, 0x75, 0x80, 0x12, 0x82, 0x4f, 0xd0, 0x98, 0x98, 0x35, 0x43, + 0x86, 0xaa, 0x02, 0x3e, 0x94, 0x62, 0x28, 0x7c, 0xc4, 0x48, 0x64, 0x40, + 0x7d, 0xfb, 0x69, 0x0f, 0xbb, 0x11, 0x78, 0x63, 0x77, 0x39, 0x4a, 0x91, + 0xe4, 0x37, 0x87, 0x02, 0x50, 0x97, 0xe5, 0x34, 0x69, 0x14, 0x87, 0x90, + 0xbd, 0xdc, 0x94, 0xe4, 0x3b, 0x5b, 0x28, 0xda, 0xc4, 0x4e, 0x25, 0x10, + 0xc7, 0x91, 0x2d, 0x6a, 0x64, 0x3b, 0xa1, 0xa6, 0x31, 0x63, 0xb0, 0x7f, + 0x26, 0x82, 0x40, 0x4c, 0xdb, 0x18, 0x94, 0xdb, 0x15, 0x91, 0x66, 0x95, + 0x7b, 0xa2, 0x02, 0x0c, 0x67, 0xaa, 0x62, 0x32, 0x13, 0xc1, 0x45, 0xc6, + 0x80, 0xd6, 0x24, 0x52, 0x7c, 0x89, 0x62, 0x67, 0x80, 0x98, 0x27, 0x91, + 0x2f, 0xf2, 0x01, 0x21, 0xf6, 0x9b, 0x39, 0xab, 0x5e, 0x96, 0x68, 0x92, + 0x10, 0xa8, 0xa8, 0x90, 0x96, 0x90, 0x4a, 0xb4, 0x7d, 0xcf, 0x73, 0x15, + 0xdc, 0x0b, 0x46, 0x22, 0xa4, 0x29, 0xe7, 0xf4, 0x81, 0x9b, 0x5b, 0xaa, + 0xd1, 0x9c, 0x83, 0x6d, 0xc4, 0x51, 0x64, 0x81, 0xac, 0xc6, 0xca, 0x65, + 0xa0, 0xb3, 0xba, 0x30, 0x79, 0xb5, 0x8c, 0x9c, 0xb5, 0xb8, 0xeb, 0x60, + 0xc8, 0xd6, 0xc3, 0x35, 0xa3, 0x07, 0xc4, 0x54, 0xb4, 0x43, 0x07, 0xab, + 0x64, 0x9b, 0x7d, 0x2a, 0xf2, 0x12, 0xe6, 0x35, 0x84, 0xee, 0x59, 0xc5, + 0x31, 0x8b, 0x1e, 0x2a, 0x06, 0x35, 0x6f, 0x30, 0xb9, 0xd7, 0xe4, 0x40, + 0x37, 0x60, 0x18, 0x2a, 0x68, 0x23, 0x8d, 0xbb, 0xcf, 0x56, 0xf5, 0x16, + 0x56, 0x92, 0x23, 0xca, 0x31, 0x8e, 0xdb, 0xe3, 0xa3, 0x2e, 0xac, 0x45, + 0xe4, 0x6c, 0x46, 0x67, 0x16, 0xcb, 0x14, 0xaa, 0x00, 0xc4, 0x82, 0x60, + 0x18, 0xa4, 0x60, 0xd0, 0x96, 0x9f, 0xd3, 0x36, 0x8a, 0x3f, 0x68, 0x1f, + 0x5e, 0x52, 0xc7, 0xd2, 0x36, 0x48, 0x05, 0x1b, 0x84, 0x7d, 0x30, 0x93, + 0x0a, 0xe0, 0x9e, 0x04, 0x71, 0xc1, 0xb9, 0xa7, 0x72, 0xca, 0x42, 0x96, + 0x92, 0x28, 0x71, 0x0e, 0x55, 0x68, 0x1e, 0x15, 0x5e, 0xd6, 0x9c, 0x40, + 0xec, 0x09, 0x74, 0xa3, 0x66, 0x63, 0x5a, 0x5b, 0x24, 0x96, 0x51, 0x15, + 0x49, 0x72, 0x34, 0xed, 0x09, 0x97, 0xed, 0x17, 0x65, 0xea, 0x12, 0x1e, + 0x92, 0xfb, 0x5c, 0xb5, 0x5a, 0x4f, 0xdb, 0x6c, 0xa3, 0x59, 0x2a, 0x11, + 0x02, 0x0b, 0x54, 0x4a, 0x17, 0x6d, 0x23, 0xe7, 0x99, 0xe1, 0xa8, 0x27, + 0xc8, 0x53, 0x9d, 0xf4, 0x4b, 0x81, 0x43, 0xc5, 0x5f, 0xa8, 0xa1, 0xb7, + 0x8d, 0xf4, 0x77, 0x3f, 0xda, 0x1e, 0x54, 0xe1, 0x52, 0xc1, 0xba, 0x29, + 0x4a, 0x81, 0x88, 0xb2, 0x5c, 0x50, 0xcb, 0xf5, 0x01, 0x71, 0x98, 0x25, + 0x26, 0x01, 0x07, 0xdc, 0x61, 0xbf, 0x77, 0x76, 0x5a, 0x70, 0x68, 0xc7, + 0x62, 0x2b, 0x9f, 0x47, 0x88, 0x25, 0x38, 0x60, 0x09, 0x8d, 0x32, 0x18, + 0x65, 0x6a, 0x84, 0x15, 0xb1, 0x84, 0x5b, 0x34, 0x5c, 0xa2, 0x38, 0x05, + 0x09, 0x60, 0x39, 0xe0, 0x49, 0x88, 0x5f, 0x29, 0xab, 0x96, 0x47, 0xb7, + 0x94, 0x16, 0xba, 0xb4, 0xb1, 0x8e, 0x69, 0x96, 0xb0, 0xf0, 0xdb, 0x98, + 0x75, 0xea, 0x00, 0x52, 0x05, 0x1c, 0x76, 0xdc, 0x81, 0xdf, 0xf8, 0x70, + 0x68, 0x69, 0xbf, 0x88, 0x06, 0x40, 0x20, 0x60, 0x4e, 0xfb, 0x32, 0x96, + 0x3e, 0x51, 0x77, 0xa0, 0x87, 0x7f, 0x6b, 0xab, 0x00, 0x98, 0x76, 0x66, + 0x6b, 0x77, 0x66, 0x9f, 0xe8, 0x0e, 0x59, 0xb4, 0x56, 0x6c, 0x08, 0x5e, + 0xfa, 0x9b, 0x71, 0x1c, 0x4c, 0x2d, 0x0b, 0x91, 0xc1, 0x0e, 0xc2, 0x2d, + 0x09, 0x78, 0x3e, 0x56, 0x82, 0x88, 0x2e, 0xd0, 0x4a, 0xcd, 0x3b, 0x81, + 0xe7, 0x7c, 0x00, 0x17, 0x72, 0xb6, 0x37, 0x9b, 0xb8, 0x54, 0x45, 0x04, + 0x25, 0x7b, 0xbe, 0x0e, 0x9a, 0x96, 0x36, 0x50, 0x52, 0x59, 0xd4, 0x43, + 0xc3, 0x82, 0x31, 0x49, 0xc4, 0x9c, 0x84, 0x48, 0x29, 0x93, 0x88, 0x5b, + 0x1f, 0x50, 0x7f, 0x3c, 0xa9, 0x89, 0x04, 0x84, 0xc8, 0xd7, 0x54, 0x58, + 0x28, 0x6b, 0x07, 0xdd, 0xfa, 0x08, 0x10, 0x61, 0x67, 0x7d, 0x5b, 0x70, + 0x73, 0x7c, 0x37, 0xe4, 0xe2, 0xa3, 0x51, 0x06, 0x60, 0xe8, 0x57, 0x35, + 0x4d, 0x25, 0xbe, 0x81, 0xf5, 0xcf, 0x1b, 0x17, 0x5e, 0x47, 0x04, 0x56, + 0x00, 0xe4, 0x43, 0xea, 0xa5, 0x3f, 0x37, 0x32, 0x6c, 0x60, 0x8a, 0x63, + 0x36, 0x16, 0x92, 0xe8, 0xa3, 0x9b, 0xb4, 0xb8, 0x9d, 0x3c, 0x59, 0x68, + 0xeb, 0xea, 0x63, 0xe3, 0x7b, 0x27, 0x2e, 0xb5, 0x42, 0xcd, 0xb0, 0x88, + 0x2b, 0x27, 0x7e, 0x87, 0xc9, 0x5d, 0xb8, 0xb3, 0xb9, 0xf2, 0x8a, 0xbd, + 0x3b, 0x32, 0x97, 0x35, 0x10, 0x11, 0x9e, 0x22, 0xa5, 0xc7, 0x05, 0x80, + 0xc8, 0x03, 0x76, 0x88, 0xb4, 0xcb, 0x9b, 0xda, 0x78, 0xdf, 0xda, 0xae, + 0x99, 0x08, 0xb9, 0x10, 0x86, 0x2a, 0xc8, 0xd1, 0x00, 0x23, 0xd4, 0x61, + 0x22, 0xf7, 0x69, 0x63, 0x24, 0x9e, 0x90, 0x46, 0x0c, 0x42, 0x70, 0x83, + 0x36, 0xfa, 0x7a, 0x25, 0x07, 0x7d, 0x23, 0x5c, 0xc2, 0x03, 0x12, 0x1f, + 0x34, 0x1a, 0x7f, 0x73, 0x84, 0x62, 0xc1, 0x67, 0xa5, 0x81, 0xf1, 0x47, + 0x72, 0xb0, 0x06, 0x36, 0xdb, 0x3a, 0x3d, 0xc8, 0x7e, 0x30, 0x25, 0x59, + 0x08, 0x4a, 0x36, 0x6c, 0x07, 0x79, 0x9b, 0x7c, 0xbd, 0x1b, 0xf4, 0x7c, + 0x35, 0x88, 0x91, 0xdf, 0x38, 0x77, 0x9f, 0x00, 0x04, 0x29, 0x6a, 0xb1, + 0xd0, 0x39, 0x40, 0xfa, 0x5a, 0xb9, 0x5c, 0xd9, 0x15, 0x60, 0xc3, 0x5c, + 0x18, 0x45, 0xbd, 0x74, 0x96, 0x82, 0xab, 0x30, 0xc8, 0x97, 0x4a, 0x2a, + 0xc4, 0x32, 0xa4, 0xa6, 0xc7, 0x8f, 0x41, 0xa1, 0xb8, 0xd4, 0x29, 0x0f, + 0xd3, 0x50, 0x35, 0xaf, 0xc1, 0x44, 0x2b, 0x83, 0xc7, 0x34, 0xec, 0x7e, + 0xd8, 0x37, 0x80, 0x8e, 0xe7, 0x75, 0x88, 0xb6, 0xa2, 0x16, 0xbc, 0xab, + 0x4e, 0x45, 0x79, 0xf7, 0xe9, 0x6d, 0xb9, 0xac, 0x38, 0x4c, 0xf7, 0xcf, + 0x97, 0x97, 0x50, 0xae, 0xdc, 0x7e, 0x6b, 0xd6, 0xb8, 0x19, 0xdb, 0x48, + 0x76, 0xf3, 0x91, 0x32, 0x05, 0x60, 0x8a, 0x8a, 0x4b, 0xaa, 0x8c, 0xb8, + 0x7f, 0x45, 0x47, 0x41, 0xe3, 0x22, 0x54, 0x81, 0xb3, 0x49, 0x83, 0xb0, + 0x84, 0x30, 0x9f, 0xdf, 0x14, 0x02, 0x50, 0xc1, 0x40, 0x53, 0x3c, 0x64, + 0xf5, 0x14, 0xba, 0x95, 0xd6, 0x14, 0xe0, 0xfc, 0x5b, 0x6d, 0x52, 0xa2, + 0xa9, 0xb8, 0x0b, 0x0a, 0xb2, 0xb8, 0x69, 0x95, 0x0f, 0xa2, 0xe2, 0x85, + 0x5a, 0x9a, 0xa2, 0x63, 0xea, 0x49, 0x1e, 0x26, 0x3d, 0x8d, 0x0c, 0x56, + 0x1d, 0x81, 0x94, 0x76, 0x05, 0x87, 0x60, 0x1b, 0x31, 0x95, 0xe8, 0x4f, + 0x14, 0xfc, 0x55, 0x2f, 0xda, 0xc6, 0x4c, 0x46, 0xbd, 0xc2, 0xe2, 0x7d, + 0x93, 0x40, 0x98, 0x77, 0x69, 0x81, 0x2d, 0xac, 0x0e, 0xcd, 0xe2, 0x66, + 0x31, 0x2b, 0x7e, 0x13, 0x8b, 0x43, 0x7b, 0x95, 0xa1, 0xa2, 0xbb, 0x4e, + 0xd6, 0x60, 0x3a, 0x99, 0x98, 0xca, 0x7b, 0x83, 0x7f, 0x1c, 0x35, 0x33, + 0x2e, 0xc0, 0xd2, 0x2f, 0x34, 0x9e, 0xc2, 0x72, 0xca, 0x89, 0x39, 0xae, + 0xc8, 0x88, 0xea, 0x66, 0xc0, 0x43, 0xc5, 0x53, 0x13, 0x3a, 0x62, 0x65, + 0x21, 0x6e, 0x42, 0xf4, 0xff, 0x65, 0x59, 0xd0}, + // cipherTextDigest + {0x9f, 0xc7, 0x94, 0x10, 0xcf, 0xcb, 0x1e, 0x50, 0x81, 0x2b, 0xe1, + 0x61, 0xae, 0x7e, 0x8a, 0x1a, 0x3f, 0xd0, 0x0a, 0x47, 0xd2, 0x6f, + 0xfc, 0x3f, 0x36, 0xc6, 0x2c, 0x59, 0x62, 0x3e, 0xac, 0xe6}, + // secret + {0xb4, 0x0f, 0x5e, 0x9d, 0xe4, 0xbc, 0x58, 0x07, 0x48, 0xa0, 0xba, + 0xb8, 0x95, 0x05, 0x6a, 0xf9, 0x14, 0xc0, 0x71, 0xc6, 0xfe, 0x63, + 0xbf, 0x09, 0x02, 0x09, 0x3e, 0x36, 0x33, 0xb2, 0xaa, 0x5d}, + true}, + // tcID: 37 + {37, + params_ml_kem768_test_mode, + // entropy + {0x88, 0xa3, 0x01, 0xc8, 0x4d, 0x61, 0xb6, 0x4c, 0xb9, 0x8a, 0xaa, + 0xd8, 0x07, 0x46, 0x4c, 0xde, 0x49, 0xfe, 0x10, 0x8c, 0x42, 0x06, + 0x70, 0x3c, 0xcd, 0x24, 0x80, 0x26, 0xc1, 0xec, 0xc0, 0x2a}, + // publicKey + {0xa0, 0xe7, 0x45, 0x23, 0x90, 0x15, 0x5a, 0x63, 0x9b, 0xcc, 0xd6, 0x00, + 0xc5, 0x14, 0x50, 0x4e, 0xa3, 0x74, 0x6a, 0xc5, 0x87, 0xe0, 0xa0, 0x42, + 0x2b, 0x20, 0x34, 0x2d, 0x70, 0x2d, 0xa3, 0x90, 0x6e, 0xc7, 0x24, 0x15, + 0xf2, 0xc1, 0x4d, 0xcf, 0xe2, 0x12, 0xa0, 0x89, 0x5a, 0x14, 0x42, 0xc8, + 0x97, 0x28, 0x38, 0xb0, 0x68, 0x82, 0xb7, 0xa9, 0x3a, 0x15, 0xa4, 0xa1, + 0xd0, 0xb8, 0x2e, 0x56, 0xe7, 0x40, 0x68, 0x60, 0xc9, 0x48, 0x4a, 0x78, + 0xd6, 0x58, 0xaf, 0x02, 0x47, 0x4f, 0xbd, 0x22, 0x4a, 0x0f, 0xf2, 0x9e, + 0x7b, 0xea, 0x45, 0xd3, 0xf5, 0x20, 0xb5, 0x98, 0x2c, 0x6d, 0x8a, 0xab, + 0x76, 0x29, 0x81, 0x56, 0xb6, 0x2f, 0xd4, 0x6b, 0x0d, 0x95, 0x34, 0x51, + 0xf6, 0xe6, 0xa8, 0x87, 0x58, 0x56, 0xf7, 0x5c, 0x0f, 0x7a, 0x34, 0x9a, + 0xb0, 0x48, 0x80, 0x54, 0x6c, 0xb7, 0x82, 0x04, 0x1f, 0xac, 0xcc, 0x22, + 0xeb, 0x37, 0x13, 0x52, 0xa8, 0x37, 0xa2, 0x0b, 0x2e, 0x55, 0x99, 0x0f, + 0x00, 0xd1, 0x97, 0x45, 0xbc, 0xb5, 0x07, 0x50, 0x8a, 0x33, 0x43, 0x06, + 0xbe, 0x3b, 0xb1, 0x38, 0xaa, 0x91, 0x2f, 0x5a, 0x0f, 0x15, 0xb9, 0xc1, + 0xd0, 0x10, 0x22, 0x05, 0x78, 0xc4, 0x56, 0x82, 0x3c, 0x10, 0x73, 0x01, + 0xe4, 0x3c, 0x52, 0xa4, 0xfa, 0x6b, 0x92, 0x10, 0xcb, 0x22, 0xf8, 0x7d, + 0x04, 0xe7, 0xc5, 0x7e, 0xcc, 0x13, 0x4a, 0x48, 0x71, 0xc6, 0x36, 0xb1, + 0xc6, 0x1b, 0x4e, 0x81, 0x46, 0x58, 0x98, 0x41, 0x2e, 0x39, 0x49, 0xa0, + 0x7c, 0xb7, 0x65, 0xbf, 0x12, 0x3b, 0xd3, 0xb7, 0xcf, 0x13, 0x01, 0x41, + 0xf0, 0x60, 0x10, 0x82, 0xdc, 0x37, 0x11, 0x08, 0x7f, 0x50, 0xa6, 0x5a, + 0x48, 0x5a, 0x52, 0x0e, 0xc6, 0x33, 0x7a, 0xab, 0xa7, 0x26, 0x75, 0xae, + 0xff, 0xf9, 0xab, 0x72, 0x30, 0x3e, 0xd9, 0x83, 0x15, 0xfe, 0x67, 0xa1, + 0x1a, 0xa0, 0x8f, 0xed, 0x9a, 0xc9, 0x84, 0x30, 0x36, 0xdc, 0x96, 0x69, + 0xf9, 0xf6, 0x17, 0x31, 0x51, 0x3c, 0x53, 0xd4, 0xb2, 0x0c, 0x36, 0x2b, + 0x95, 0xaa, 0x03, 0x8b, 0x54, 0x54, 0xdb, 0x8c, 0xa2, 0xbd, 0xcb, 0x53, + 0x0e, 0x6a, 0xcf, 0xc4, 0x0c, 0x3c, 0x51, 0x3c, 0x3d, 0x25, 0xba, 0x7f, + 0xe3, 0x04, 0x37, 0x4d, 0x97, 0x27, 0x07, 0x60, 0x06, 0x33, 0xa9, 0x3a, + 0x55, 0x7b, 0x65, 0x5d, 0x7a, 0x2f, 0x5b, 0xa3, 0x69, 0x43, 0x69, 0xad, + 0x74, 0xca, 0x65, 0x8a, 0x33, 0x81, 0x5f, 0x4a, 0x29, 0xf7, 0xba, 0x8d, + 0xee, 0x35, 0xce, 0x0a, 0x79, 0x07, 0xfd, 0xb4, 0x26, 0xbc, 0x8b, 0x85, + 0x7d, 0x30, 0x88, 0xe4, 0xb0, 0x4f, 0x14, 0x04, 0x8d, 0x96, 0xd2, 0x75, + 0xe3, 0x35, 0x9c, 0x2f, 0x28, 0x44, 0xee, 0x51, 0xa3, 0xdf, 0x78, 0xc0, + 0xdb, 0x22, 0x39, 0x18, 0x36, 0x5c, 0x38, 0x4a, 0x4b, 0x59, 0x0c, 0x31, + 0x57, 0xa6, 0x98, 0x38, 0x44, 0x65, 0xae, 0x16, 0xc7, 0xd1, 0xb7, 0x0f, + 0xc0, 0xd2, 0x0f, 0x88, 0x50, 0x36, 0xb7, 0x8c, 0x93, 0xa4, 0x37, 0xcd, + 0x3e, 0x7b, 0x9c, 0xae, 0x40, 0xbc, 0x00, 0xbb, 0x2a, 0xe1, 0x19, 0x70, + 0x32, 0x19, 0x42, 0x7d, 0x9c, 0x29, 0x6e, 0xf7, 0xb1, 0x65, 0xa5, 0x22, + 0x94, 0x84, 0x58, 0x6a, 0x83, 0x75, 0xda, 0xd4, 0xa6, 0xcb, 0xa9, 0x37, + 0xda, 0x19, 0x8b, 0xa1, 0x3a, 0x26, 0xd4, 0xf4, 0x25, 0x1f, 0x2b, 0x3b, + 0x06, 0x57, 0x47, 0x02, 0xfa, 0x93, 0x65, 0x4a, 0x90, 0x91, 0xa8, 0x0b, + 0x36, 0x47, 0x06, 0x09, 0x09, 0x74, 0xa8, 0xe0, 0x35, 0xc0, 0xb3, 0xc9, + 0x72, 0x3a, 0xad, 0xe2, 0x79, 0xa4, 0x0e, 0xdb, 0xcc, 0x23, 0x3b, 0xa2, + 0x7a, 0x81, 0x43, 0xe1, 0x70, 0x52, 0x95, 0x10, 0x43, 0x8f, 0x18, 0x15, + 0x51, 0x08, 0x0b, 0xdc, 0x39, 0x4b, 0x18, 0xdb, 0xcf, 0x02, 0x03, 0xb5, + 0x6e, 0x1a, 0x5a, 0x52, 0xb2, 0x10, 0x9d, 0xcc, 0x13, 0x15, 0x0b, 0x15, + 0x11, 0x34, 0x13, 0x27, 0xf8, 0x11, 0x28, 0x7a, 0x50, 0x29, 0xf5, 0x1e, + 0xe5, 0x7a, 0x28, 0x6c, 0x18, 0xb2, 0x77, 0x82, 0x7d, 0xc9, 0xfb, 0x43, + 0x2d, 0x17, 0x85, 0x43, 0xd8, 0xb1, 0xf0, 0x75, 0x7b, 0x03, 0x68, 0x36, + 0x7d, 0x41, 0x77, 0x66, 0x22, 0x19, 0xc0, 0x07, 0x21, 0xfa, 0xa7, 0x8e, + 0x0f, 0x03, 0x7a, 0xda, 0x38, 0x16, 0x25, 0xd3, 0x62, 0xb6, 0xdc, 0x9a, + 0x7e, 0x5c, 0xa4, 0x36, 0x2a, 0x78, 0x7f, 0xf6, 0xb7, 0x24, 0x74, 0x1e, + 0xc9, 0xc7, 0x61, 0xd0, 0x22, 0xa9, 0xd9, 0x28, 0x7b, 0x37, 0x15, 0x8f, + 0xc9, 0x76, 0x4a, 0xa6, 0x99, 0x15, 0xec, 0xf3, 0xc1, 0xc6, 0x89, 0x90, + 0xad, 0xc0, 0x8f, 0xd1, 0xe6, 0x70, 0x5c, 0xd1, 0x15, 0xd0, 0xc7, 0x9a, + 0x26, 0x02, 0x30, 0x8b, 0x8c, 0x2d, 0xb5, 0x29, 0x98, 0x57, 0xc1, 0xa7, + 0x93, 0x6a, 0x7f, 0x05, 0xf2, 0x45, 0x67, 0x35, 0x6f, 0x78, 0x57, 0x0a, + 0x94, 0x02, 0x6f, 0x3a, 0xc7, 0x78, 0xf0, 0xb2, 0xc1, 0x62, 0x39, 0x46, + 0x56, 0x3b, 0x80, 0x8b, 0x4a, 0x48, 0xfe, 0xd2, 0x36, 0x62, 0xe2, 0x41, + 0x31, 0xf3, 0x7b, 0x1c, 0x77, 0xbc, 0x82, 0xfb, 0x4a, 0xf8, 0x8a, 0xbb, + 0xcf, 0x23, 0x9d, 0x31, 0x65, 0x19, 0x84, 0x1b, 0x88, 0xdc, 0x6c, 0x75, + 0x11, 0x61, 0x15, 0x5b, 0xeb, 0xc1, 0xaf, 0x66, 0xae, 0xba, 0x91, 0xb3, + 0x26, 0xb5, 0x96, 0xf7, 0x53, 0x74, 0xa3, 0xb7, 0xc6, 0xba, 0xd9, 0xce, + 0xc1, 0xd7, 0x96, 0xab, 0x91, 0xa2, 0x74, 0x73, 0xbd, 0xfc, 0xaa, 0x35, + 0xee, 0x66, 0xa9, 0x69, 0x43, 0xbb, 0xfb, 0x9c, 0x5e, 0xb0, 0x45, 0x41, + 0x52, 0x78, 0x9c, 0xdc, 0x70, 0x3c, 0x6b, 0x87, 0x21, 0x51, 0xc9, 0x41, + 0xce, 0x5a, 0x3b, 0xda, 0x52, 0xbe, 0xb4, 0xd4, 0x2c, 0x5d, 0xa9, 0x6b, + 0xf5, 0x8c, 0x31, 0x01, 0x27, 0x96, 0xdb, 0x44, 0x30, 0x76, 0xf8, 0xb1, + 0x06, 0x67, 0xb5, 0xab, 0x35, 0x8b, 0x56, 0x73, 0xc6, 0x5a, 0x28, 0xab, + 0x29, 0xe4, 0xac, 0xbb, 0xb0, 0x2a, 0xed, 0xb2, 0x46, 0xc2, 0x45, 0xce, + 0xfa, 0xa8, 0x87, 0x7a, 0xa1, 0x02, 0x80, 0x35, 0xba, 0xc3, 0x36, 0x14, + 0x78, 0x23, 0xcc, 0xa9, 0x57, 0x4c, 0x23, 0xab, 0xa0, 0xef, 0xbc, 0xb2, + 0xc1, 0xa7, 0x0a, 0xbd, 0x0a, 0x5c, 0xc4, 0x74, 0x97, 0x96, 0x13, 0x88, + 0xe6, 0xd3, 0x14, 0x36, 0x76, 0x7a, 0x08, 0x74, 0x89, 0xee, 0xf7, 0x34, + 0x4e, 0xdb, 0x4d, 0x20, 0xc9, 0x19, 0xf6, 0xc3, 0xca, 0xb1, 0xea, 0x18, + 0xd2, 0x55, 0xc0, 0x9e, 0xc2, 0xc3, 0xbe, 0x04, 0x82, 0x1d, 0x81, 0xb5, + 0x28, 0x12, 0x8e, 0xdd, 0xd9, 0x04, 0xae, 0x83, 0x74, 0x3b, 0xa5, 0x41, + 0xa5, 0xbc, 0x71, 0x52, 0x60, 0x92, 0xe4, 0x90, 0xa2, 0x6d, 0x04, 0x74, + 0xe3, 0x44, 0x11, 0x77, 0x89, 0x39, 0xc6, 0x21, 0x15, 0x4e, 0xe3, 0x1d, + 0xe4, 0xc9, 0x47, 0xfc, 0xe0, 0x91, 0xac, 0xbb, 0x5c, 0xc3, 0xa2, 0x84, + 0x03, 0xba, 0x30, 0xde, 0xb4, 0x64, 0xcf, 0xe3, 0x04, 0x13, 0x8a, 0x1f, + 0x01, 0xca, 0x2f, 0xd4, 0xe8, 0x8c, 0x99, 0x24, 0x64, 0x6b, 0x67, 0x49, + 0x9a, 0x2a, 0x73, 0x8a, 0xa6, 0x56, 0xe8, 0x2c, 0x0a, 0xcf, 0xfb, 0xa6, + 0xa2, 0xfb, 0x0d, 0x88, 0x0a, 0xa3, 0xcd, 0x67, 0x7b, 0x86, 0x56, 0x35, + 0x92, 0x97, 0x70, 0xc0, 0x65, 0x5a, 0x03, 0x09, 0x97, 0x61, 0xd4, 0x9e, + 0x37, 0x99, 0x00, 0x59, 0xd9, 0x85, 0x7f, 0xb7, 0x73, 0x61, 0x99, 0x4f, + 0xb9, 0xfa, 0xa9, 0x77, 0x0a, 0xc4, 0x19, 0xe6, 0x4d, 0x31, 0xe8, 0x1b, + 0x8b, 0x81, 0x4f, 0xc1, 0x01, 0x04, 0xd1, 0x14, 0x4f, 0xf7, 0x0b, 0x59, + 0x3b, 0x42, 0x10, 0x4b, 0xb1, 0x24, 0x45, 0x9c, 0x9d, 0xad, 0x80, 0x16, + 0x2c, 0xf0, 0x05, 0x4d, 0x13, 0x1e, 0xd9, 0x06, 0xb5, 0xc1, 0x75, 0x98, + 0xa7, 0x31, 0x39, 0x54, 0xec, 0xa5, 0xbc, 0x22, 0x1e, 0x6f, 0xa4, 0x91, + 0x0d, 0xdc, 0x2f, 0x85, 0x5c, 0x73, 0xb8, 0xe1, 0x30, 0x43, 0x60, 0x1e, + 0xa7, 0xf1, 0xc8, 0x84, 0x64, 0x2c, 0x37, 0xd4, 0xbe, 0x87, 0x31, 0x43, + 0xa5, 0xf6, 0x4d, 0x95, 0x6b, 0x6c, 0x96, 0xe9, 0x78, 0xa4, 0x68, 0xa6, + 0x10, 0x58, 0x75, 0x06, 0x48, 0xb0, 0xfa, 0xc7, 0x83, 0x47, 0x00, 0x3b, + 0xa5, 0x70, 0xb2, 0xbb, 0xb4, 0xb8, 0xe1, 0xf7, 0x42, 0xde, 0x3c, 0x54, + 0xfb, 0x14, 0x5d, 0x37, 0xbb, 0x0d, 0xab, 0x70, 0x0f, 0x1d, 0xe5, 0x50, + 0x29, 0x08, 0x68, 0x31, 0x19, 0xd1, 0xe7, 0xf8, 0xcb, 0xcf, 0x12, 0x46, + 0x0b, 0xc7, 0x33, 0x78, 0x43, 0x16, 0x2b, 0xd3, 0x22, 0x2c, 0x35, 0xe2, + 0x69, 0xad, 0x2e, 0x7d, 0x22, 0x7c, 0x9a, 0xe0}, + // cipherTextDigest + {0x7b, 0x6d, 0xdd, 0x25, 0xb2, 0x41, 0x9a, 0xe5, 0xa4, 0x5e, 0x8b, + 0x5b, 0xe1, 0xe8, 0x79, 0xd3, 0x27, 0xb6, 0x48, 0xbd, 0x33, 0x1a, + 0x3e, 0xaf, 0xdd, 0xe3, 0x4f, 0x65, 0xfb, 0x4d, 0x77, 0xa2}, + // secret + {0x8f, 0x8a, 0x48, 0xd6, 0xcc, 0x45, 0xa0, 0xcc, 0xbb, 0x62, 0xb5, + 0x8d, 0x26, 0x77, 0x82, 0xb9, 0x02, 0x2a, 0x66, 0x84, 0xfa, 0x37, + 0x3a, 0x1c, 0xbd, 0x38, 0xf8, 0x4e, 0x5e, 0xc3, 0xd4, 0x4f}, + true}, + // tcID: 38 + {38, + params_ml_kem768_test_mode, + // entropy + {0x80, 0x2d, 0x8f, 0xa5, 0xf0, 0x3b, 0x3c, 0xfa, 0x45, 0xf8, 0x03, + 0x0c, 0x78, 0xff, 0x8c, 0x03, 0x52, 0x92, 0x25, 0xf9, 0xf9, 0x76, + 0xbc, 0x50, 0x99, 0x10, 0xd5, 0x6d, 0x79, 0x5f, 0x10, 0xf8}, + // publicKey + {0x5f, 0x27, 0x43, 0x22, 0x74, 0x61, 0x8e, 0xa5, 0x4d, 0xa2, 0xab, 0x73, + 0x5f, 0xb3, 0x7c, 0xd7, 0x5b, 0x2e, 0xcb, 0x59, 0x5b, 0x79, 0xa5, 0x00, + 0xf2, 0x54, 0xa1, 0xc1, 0x12, 0x50, 0xe0, 0xd4, 0x6c, 0x6b, 0xcb, 0x4c, + 0x49, 0x98, 0x40, 0x56, 0xe6, 0x0d, 0x19, 0xba, 0xce, 0x63, 0x98, 0x4f, + 0x57, 0x1c, 0x6c, 0x19, 0x4a, 0x32, 0x4c, 0x25, 0xc2, 0xf5, 0x06, 0x4c, + 0x2c, 0x06, 0x95, 0x33, 0x3b, 0x3e, 0xc1, 0x50, 0x1c, 0xf6, 0x5a, 0x45, + 0xf6, 0xe8, 0x90, 0x4a, 0xc4, 0x0f, 0x81, 0xc8, 0x4e, 0x49, 0x30, 0x95, + 0x36, 0x15, 0x55, 0xba, 0x22, 0x1a, 0x59, 0xdc, 0xb0, 0x08, 0x79, 0x6e, + 0x0d, 0xe2, 0x5c, 0x3f, 0x62, 0x1a, 0xbb, 0x83, 0x4d, 0x7b, 0xe2, 0x48, + 0x0a, 0xb9, 0xcc, 0xb2, 0xd5, 0x1e, 0x46, 0x78, 0xb3, 0x58, 0x50, 0x3b, + 0x64, 0xc3, 0xac, 0xf1, 0x69, 0xb1, 0xa2, 0x78, 0x10, 0x7a, 0xe4, 0x5d, + 0xa9, 0xa7, 0x6c, 0x40, 0x33, 0x21, 0x46, 0x11, 0x4f, 0x63, 0x17, 0x4e, + 0x65, 0x46, 0x22, 0xff, 0x9b, 0x78, 0xf9, 0xc5, 0xa4, 0x9f, 0xb4, 0x40, + 0x16, 0x46, 0x22, 0xb7, 0xd5, 0x1a, 0x68, 0x40, 0x79, 0x39, 0x9c, 0x08, + 0x5c, 0x11, 0x7c, 0x29, 0xb9, 0x3a, 0xdd, 0xd9, 0xa4, 0xad, 0x85, 0x15, + 0x4d, 0x1c, 0x63, 0x82, 0xf1, 0xa2, 0x41, 0xb2, 0xc1, 0x61, 0xd5, 0xbb, + 0x96, 0x07, 0x57, 0xa3, 0x43, 0x7a, 0x82, 0x27, 0xb9, 0xf9, 0x5c, 0x6a, + 0x2f, 0x58, 0x96, 0x62, 0x68, 0x08, 0x18, 0xc7, 0x34, 0x2d, 0x80, 0x12, + 0xff, 0x0b, 0x94, 0x95, 0xd4, 0x98, 0xc8, 0x99, 0x35, 0x86, 0x76, 0xb5, + 0xa2, 0x76, 0x53, 0xbd, 0x0b, 0x1f, 0xcc, 0x99, 0x5e, 0xfd, 0x2a, 0x80, + 0xe8, 0x52, 0x18, 0x7b, 0xab, 0x67, 0x21, 0xeb, 0xbb, 0xf6, 0x31, 0x86, + 0x8d, 0x71, 0x02, 0xb2, 0x58, 0x0a, 0x61, 0x92, 0xcd, 0x86, 0x2b, 0xc3, + 0x7d, 0x29, 0x70, 0xe5, 0xc1, 0xc2, 0xd7, 0xd2, 0x17, 0xe1, 0x3b, 0xc7, + 0x18, 0x20, 0x15, 0xb9, 0x98, 0xa8, 0x7c, 0xac, 0x89, 0x21, 0xb4, 0x26, + 0x11, 0x88, 0xc7, 0x29, 0xa3, 0x4a, 0xa7, 0x1a, 0x7d, 0x9c, 0xac, 0x93, + 0x76, 0x96, 0x94, 0x06, 0x62, 0x7a, 0xd7, 0x81, 0xaf, 0xb6, 0x59, 0x50, + 0x2e, 0xba, 0x1b, 0xe8, 0xbb, 0x0b, 0x92, 0x55, 0x92, 0xee, 0xda, 0x6a, + 0x73, 0x29, 0x5a, 0x8b, 0x8b, 0x8b, 0xa8, 0x0b, 0x4c, 0x00, 0x5a, 0x70, + 0x8c, 0x98, 0x3a, 0x95, 0x22, 0x9f, 0xee, 0x14, 0xa4, 0xe5, 0x72, 0x23, + 0x1e, 0x13, 0x26, 0xb4, 0xab, 0x0b, 0x56, 0x94, 0x04, 0x36, 0xaa, 0x75, + 0x0c, 0xb2, 0x1d, 0xe5, 0xf6, 0xc2, 0x36, 0x40, 0x42, 0xaf, 0xa2, 0x5a, + 0x3e, 0x12, 0x4d, 0x85, 0xcc, 0x29, 0x79, 0xb6, 0x7d, 0x31, 0x58, 0x08, + 0xa3, 0x13, 0x86, 0x53, 0x62, 0x93, 0xcf, 0x4a, 0x7a, 0x8a, 0xd8, 0xbb, + 0xc4, 0x79, 0x82, 0xbf, 0xc6, 0xad, 0x2d, 0x32, 0xcc, 0x4e, 0xcb, 0x58, + 0x2d, 0x49, 0x88, 0x4e, 0xb8, 0x9f, 0x8e, 0x70, 0xb5, 0x4c, 0xe7, 0x2e, + 0x32, 0x24, 0x6e, 0xa6, 0xa6, 0x43, 0x50, 0x81, 0xca, 0x95, 0x91, 0xc2, + 0x7c, 0xe0, 0x37, 0x29, 0x27, 0x21, 0x25, 0xac, 0x24, 0x17, 0xac, 0x47, + 0x6d, 0x80, 0x8a, 0xec, 0xb6, 0x4e, 0xeb, 0xb9, 0x74, 0x9b, 0xfa, 0x96, + 0x84, 0x2a, 0x53, 0x2a, 0x8c, 0x30, 0xbc, 0x70, 0x82, 0x0f, 0x84, 0x2e, + 0xe9, 0x14, 0x86, 0xde, 0x12, 0xa2, 0xf6, 0x54, 0x9e, 0x08, 0x32, 0xa0, + 0x2f, 0x78, 0xc0, 0xd7, 0x48, 0x62, 0xf3, 0x57, 0xc0, 0xf0, 0x4a, 0x9d, + 0x58, 0xfb, 0x1b, 0x6a, 0x95, 0x35, 0xea, 0x76, 0xcf, 0x35, 0x22, 0x63, + 0x35, 0x9c, 0x4b, 0x85, 0x73, 0xb8, 0x0c, 0x30, 0x95, 0x95, 0x00, 0x53, + 0x8d, 0xb9, 0x0f, 0x81, 0xd5, 0x05, 0xe9, 0x2c, 0xc3, 0x3c, 0x61, 0x81, + 0xe2, 0x82, 0x4b, 0x7f, 0x45, 0xce, 0xfc, 0x5b, 0xb3, 0x70, 0x02, 0xba, + 0x46, 0xc7, 0x7e, 0x31, 0xd3, 0x60, 0x41, 0xd5, 0x4c, 0x03, 0x9b, 0xbe, + 0xec, 0x86, 0x8c, 0xb2, 0xec, 0x39, 0x70, 0x16, 0x6d, 0xfe, 0xa7, 0x93, + 0x7b, 0xd6, 0x3e, 0x8d, 0x4b, 0x48, 0xd3, 0xd5, 0xa1, 0x92, 0xd7, 0x0c, + 0x03, 0xf3, 0x37, 0xcf, 0xf1, 0x2f, 0x21, 0x38, 0x4b, 0x82, 0x33, 0x03, + 0x22, 0x4a, 0xa4, 0xb2, 0x16, 0xa3, 0xec, 0x09, 0x07, 0xde, 0xb6, 0x97, + 0x91, 0xe0, 0x4c, 0x2c, 0x78, 0xb3, 0x98, 0x75, 0x06, 0x1d, 0xa6, 0x7b, + 0x0e, 0xd7, 0xc6, 0x68, 0x3c, 0x7f, 0xe0, 0xc8, 0x90, 0x6a, 0x8a, 0xa6, + 0x8f, 0xd6, 0xb3, 0x94, 0xda, 0x2d, 0xd3, 0x7a, 0xa5, 0x24, 0x31, 0x0d, + 0xda, 0xf7, 0x42, 0xb5, 0xfc, 0xb7, 0x07, 0x0b, 0x3b, 0xaf, 0xb1, 0x5d, + 0xa5, 0x34, 0x55, 0xac, 0x41, 0x6a, 0x21, 0xb8, 0xc0, 0x93, 0xc6, 0xc5, + 0x75, 0x07, 0x79, 0x19, 0x37, 0x6a, 0xc2, 0xac, 0xa1, 0x96, 0x14, 0xb0, + 0x26, 0x2a, 0x61, 0x07, 0x72, 0xc6, 0x56, 0xb3, 0xa2, 0xfc, 0x43, 0xac, + 0x95, 0x66, 0xc1, 0xc7, 0x01, 0x5a, 0x9a, 0x8c, 0xc2, 0xa5, 0x18, 0xce, + 0x46, 0xa0, 0xb6, 0xbd, 0x40, 0x3a, 0x44, 0x0b, 0x76, 0xd9, 0x7b, 0x20, + 0x03, 0xac, 0x90, 0x91, 0xa0, 0x2f, 0x45, 0x8a, 0x4d, 0xe5, 0xcc, 0x54, + 0xfc, 0xdb, 0xa5, 0x6a, 0x43, 0x03, 0x19, 0x36, 0xa1, 0x33, 0x8b, 0x13, + 0xe3, 0x59, 0x69, 0xb0, 0x67, 0x47, 0x73, 0x88, 0x8e, 0xad, 0x8a, 0x00, + 0x08, 0x6a, 0x9f, 0x35, 0xd1, 0xa0, 0x73, 0xe0, 0x75, 0x77, 0x76, 0x54, + 0xb2, 0x37, 0x07, 0xb7, 0x69, 0x0a, 0x13, 0xc6, 0x97, 0xb3, 0xb4, 0xbc, + 0xb4, 0x97, 0x01, 0x53, 0x1b, 0xae, 0x65, 0x3a, 0xa5, 0x51, 0x0b, 0x86, + 0x76, 0xd0, 0xad, 0xc5, 0xe7, 0x12, 0x77, 0x23, 0x92, 0x22, 0x95, 0x94, + 0xf6, 0x3c, 0x85, 0xf2, 0x85, 0x2c, 0x8c, 0x27, 0x35, 0x30, 0x44, 0x49, + 0x37, 0x5c, 0x9b, 0x41, 0x03, 0x1d, 0xe6, 0xca, 0x16, 0x4d, 0x07, 0xc9, + 0x56, 0x3c, 0x0c, 0xf0, 0x42, 0x09, 0xf2, 0x8c, 0xc8, 0x2b, 0xb7, 0x45, + 0xa6, 0xf4, 0x67, 0x8d, 0x02, 0x89, 0xbf, 0xa7, 0x01, 0x82, 0x46, 0x34, + 0x77, 0xc9, 0xce, 0x0c, 0x40, 0x89, 0x10, 0xeb, 0x9e, 0xa4, 0x0a, 0x59, + 0x87, 0x84, 0x8f, 0xb0, 0x91, 0x8c, 0x20, 0xf5, 0x67, 0xc5, 0xb0, 0x71, + 0xea, 0xca, 0xc8, 0x5d, 0x6a, 0xc2, 0x29, 0xca, 0x75, 0x32, 0x29, 0xbf, + 0xfd, 0x23, 0x1e, 0xce, 0x29, 0x24, 0x68, 0x8c, 0x7e, 0x04, 0x15, 0xc5, + 0xed, 0x7b, 0x4e, 0x53, 0xf9, 0x56, 0xb7, 0xbc, 0x36, 0x56, 0x11, 0x33, + 0xd2, 0xb6, 0x2d, 0x15, 0x86, 0x73, 0xff, 0x75, 0xa7, 0x4a, 0x71, 0x96, + 0x9d, 0xd4, 0x1a, 0x88, 0xd7, 0x1e, 0x54, 0xd1, 0x3e, 0xca, 0xa4, 0xb2, + 0x7c, 0xfc, 0xb1, 0x9d, 0x69, 0x9b, 0xb1, 0xba, 0x0a, 0x05, 0x67, 0x10, + 0x27, 0x92, 0x30, 0xe4, 0x20, 0x70, 0x80, 0x98, 0x65, 0x40, 0x60, 0x26, + 0x6a, 0xf4, 0x2a, 0xc4, 0x1b, 0x98, 0xe0, 0xe4, 0x0b, 0xe6, 0xa0, 0x9c, + 0x77, 0xa4, 0xa5, 0xff, 0x91, 0x16, 0xe6, 0x50, 0x26, 0xb8, 0x96, 0x05, + 0xf4, 0xe9, 0x3d, 0xe5, 0xd0, 0x64, 0xda, 0x1b, 0x49, 0x9f, 0x35, 0x7e, + 0xa2, 0x6c, 0xa0, 0x5d, 0xa0, 0xbf, 0x0c, 0x1a, 0x09, 0x3c, 0x03, 0x6e, + 0x6d, 0x0c, 0x79, 0x5b, 0xeb, 0x15, 0x4c, 0xe8, 0x06, 0x87, 0x69, 0x2d, + 0xaa, 0xc4, 0x70, 0x8c, 0x71, 0x4c, 0xab, 0x45, 0x8c, 0x55, 0x92, 0xc3, + 0x2d, 0xc1, 0x4d, 0x8e, 0x8c, 0x1c, 0xa0, 0x92, 0x8d, 0xdf, 0x5b, 0x9a, + 0xe9, 0x01, 0xa9, 0x64, 0xec, 0xb7, 0xde, 0xf1, 0x5f, 0xc3, 0x5a, 0xa0, + 0x33, 0xe2, 0x20, 0x51, 0xa8, 0xa7, 0xca, 0xfc, 0xc8, 0x67, 0x70, 0x7b, + 0xdf, 0xc2, 0x88, 0x87, 0x33, 0x12, 0xba, 0xcb, 0x55, 0x03, 0xf0, 0x83, + 0x3c, 0x96, 0xb0, 0x03, 0x67, 0x81, 0x8e, 0x0b, 0x05, 0xdc, 0x38, 0x65, + 0x6e, 0xf3, 0x58, 0xf2, 0xe0, 0x51, 0x4c, 0x16, 0x17, 0x99, 0xdc, 0x82, + 0x8c, 0x61, 0xc3, 0x1a, 0xc1, 0x85, 0x31, 0xd4, 0x87, 0xed, 0x73, 0x37, + 0x2e, 0x23, 0x43, 0x02, 0x12, 0x18, 0x72, 0x16, 0x14, 0x48, 0xf5, 0x25, + 0xf8, 0x73, 0x61, 0xa2, 0xc9, 0x8d, 0xef, 0xfa, 0x29, 0xf2, 0xb8, 0xc9, + 0x74, 0xe1, 0xba, 0x33, 0xc5, 0x6e, 0xcc, 0xaa, 0xb3, 0x18, 0x38, 0xbf, + 0x77, 0xeb, 0x2c, 0x24, 0x7b, 0xca, 0xde, 0x56, 0x7e, 0x06, 0xa0, 0x58, + 0xce, 0x85, 0xbb, 0xad, 0x35, 0x5f, 0xb0, 0x48, 0x7b, 0x4d, 0x57, 0x57, + 0x5f, 0x2a, 0x7b, 0xe8, 0xb7, 0x14, 0x0e, 0xd8, 0x13, 0x7f, 0xda, 0x5a, + 0x42, 0xdf, 0xab, 0xef, 0xeb, 0x57, 0x5f, 0x4a}, + // cipherTextDigest + {0xd2, 0xd9, 0xf6, 0xf6, 0x15, 0xd5, 0xe6, 0x2f, 0x82, 0xde, 0xdd, + 0x18, 0xf8, 0x0d, 0x78, 0x15, 0xaa, 0xd1, 0x9e, 0xcb, 0xe7, 0x1f, + 0x14, 0x97, 0x09, 0x83, 0x5d, 0x83, 0x6e, 0x93, 0x70, 0x13}, + // secret + {0x09, 0xb6, 0xd9, 0xf1, 0x15, 0x3e, 0x21, 0xb3, 0x7a, 0x3a, 0xb6, + 0xd3, 0xa5, 0xe3, 0x2d, 0x02, 0x0f, 0x14, 0x4b, 0xed, 0xb2, 0xd9, + 0x6d, 0xed, 0xad, 0xea, 0x3c, 0x8a, 0x34, 0x09, 0x3b, 0xe2}, + true}, + // tcID: 39 + {39, + params_ml_kem768_test_mode, + // entropy + {0xc6, 0x58, 0x54, 0x31, 0x31, 0x67, 0x9a, 0x2d, 0x56, 0x34, 0x61, + 0x3d, 0xd2, 0x73, 0x09, 0x85, 0xef, 0xea, 0x13, 0xd4, 0x55, 0x98, + 0x4d, 0x1e, 0x2b, 0x96, 0x35, 0xa9, 0xed, 0x86, 0xfa, 0x4a}, + // publicKey + {0x72, 0x9c, 0x4e, 0xb6, 0xf8, 0xc3, 0x0a, 0x61, 0x4f, 0x31, 0x68, 0x0c, + 0x5b, 0xb6, 0x5e, 0x1d, 0x23, 0x8b, 0xc1, 0xca, 0x8a, 0x5f, 0xe7, 0x3e, + 0xdc, 0x45, 0x27, 0x32, 0x44, 0xba, 0x8b, 0xb2, 0x62, 0x55, 0x65, 0x39, + 0x1c, 0xb3, 0x1b, 0xbb, 0x46, 0xc2, 0x56, 0xe7, 0x8f, 0x0e, 0x14, 0x97, + 0x8f, 0xfc, 0x1b, 0xe4, 0x54, 0x7f, 0x57, 0xd0, 0x8f, 0x97, 0xd0, 0x07, + 0xf7, 0x49, 0x01, 0xa7, 0xeb, 0x65, 0x0c, 0xba, 0x00, 0xcd, 0x6a, 0x56, + 0x2b, 0xd6, 0x3f, 0x5e, 0x39, 0x83, 0xd3, 0x03, 0x57, 0xab, 0xe2, 0xc1, + 0x98, 0x02, 0xcc, 0x05, 0x23, 0x1d, 0x30, 0x51, 0x48, 0x61, 0xc9, 0x47, + 0x47, 0xd9, 0x05, 0x33, 0x11, 0xa1, 0x9e, 0x6a, 0x39, 0xa5, 0xcb, 0x6b, + 0x10, 0xe7, 0x53, 0x28, 0xc5, 0x9f, 0x49, 0xe3, 0x7b, 0x95, 0x31, 0xc4, + 0x78, 0xc7, 0xb6, 0x06, 0x5a, 0x1b, 0x66, 0x43, 0x03, 0x65, 0x30, 0x9a, + 0xf9, 0xa4, 0x8d, 0xf4, 0xc0, 0x7b, 0x1b, 0x46, 0x3c, 0x20, 0x5c, 0x1e, + 0x3d, 0xa5, 0x62, 0xa3, 0x02, 0x38, 0x94, 0x32, 0xc6, 0xe4, 0x28, 0xac, + 0xd5, 0x81, 0x27, 0x2f, 0x68, 0xbf, 0x90, 0x80, 0xc4, 0x93, 0xf6, 0xa7, + 0x33, 0x35, 0xb0, 0x23, 0xd8, 0x3f, 0x42, 0x18, 0x90, 0xdf, 0x56, 0x52, + 0x8e, 0xf6, 0xce, 0xcd, 0x68, 0x0b, 0xdb, 0x35, 0x68, 0xdd, 0x17, 0x0f, + 0x4f, 0x86, 0x01, 0x18, 0xec, 0x71, 0xd1, 0x6c, 0x68, 0x7a, 0xf4, 0x7f, + 0x2e, 0x31, 0x03, 0x94, 0x89, 0x37, 0xc5, 0x9b, 0x3e, 0x16, 0x6a, 0x96, + 0x97, 0x26, 0xb3, 0xdc, 0x8b, 0xcc, 0x32, 0x31, 0x7b, 0xe8, 0x68, 0x62, + 0x7f, 0x02, 0x65, 0x29, 0xa9, 0x3e, 0x11, 0x73, 0x8e, 0xe1, 0xb1, 0x9f, + 0xe4, 0xc7, 0x52, 0x5a, 0xf5, 0x28, 0x72, 0xd2, 0xac, 0x4c, 0xe4, 0x80, + 0x75, 0x73, 0x2e, 0x22, 0xf1, 0x42, 0xe8, 0x78, 0xbe, 0x08, 0x84, 0x87, + 0xe1, 0x1b, 0xb3, 0xbc, 0xc5, 0x2d, 0x91, 0x80, 0xac, 0xba, 0xa3, 0x95, + 0xa8, 0xe1, 0x4e, 0x35, 0x10, 0x1f, 0x77, 0x59, 0x96, 0xa5, 0x88, 0x64, + 0x6f, 0xd9, 0x7f, 0x02, 0xa7, 0xbe, 0x76, 0x71, 0x0e, 0x23, 0x15, 0x98, + 0x32, 0x23, 0x8f, 0x52, 0x7b, 0x51, 0x80, 0x6a, 0xb9, 0x20, 0xc5, 0x26, + 0x6f, 0xb8, 0x9c, 0xc4, 0x1a, 0x87, 0xf6, 0xd3, 0x76, 0x0c, 0xca, 0xaa, + 0xae, 0x01, 0x9f, 0xd2, 0x07, 0x13, 0xaa, 0x23, 0x02, 0xbf, 0xa7, 0x88, + 0x69, 0xc1, 0x98, 0x5e, 0x79, 0x13, 0x51, 0xf0, 0x25, 0x78, 0xba, 0x59, + 0x3f, 0x52, 0x1f, 0x56, 0xf0, 0x96, 0xb0, 0x43, 0x29, 0xbc, 0x3b, 0x49, + 0x2f, 0x87, 0x67, 0x86, 0xfb, 0x55, 0xcf, 0x69, 0x6d, 0x15, 0x54, 0x9c, + 0x50, 0xdb, 0xaa, 0xbc, 0x16, 0x5b, 0xeb, 0xcc, 0x98, 0xca, 0x78, 0x93, + 0x64, 0x95, 0x18, 0xe7, 0x57, 0xa4, 0x4a, 0xb5, 0x4d, 0xca, 0x8a, 0x4a, + 0xf9, 0xab, 0xb4, 0x85, 0x3c, 0x47, 0xf9, 0x12, 0x7e, 0xba, 0x75, 0x5d, + 0x2b, 0x0c, 0x4b, 0xd8, 0xc2, 0x7f, 0x5a, 0x74, 0x44, 0x91, 0x8a, 0x10, + 0x66, 0x68, 0x6d, 0xae, 0x72, 0x63, 0x62, 0x5c, 0x21, 0xff, 0x41, 0x74, + 0xf6, 0x63, 0xae, 0x58, 0x06, 0x59, 0x77, 0xe9, 0xba, 0xe1, 0x00, 0x29, + 0x71, 0xb6, 0x32, 0x57, 0x23, 0x43, 0x3b, 0x63, 0x6e, 0x66, 0x22, 0x47, + 0xd0, 0xcc, 0x33, 0xca, 0x8c, 0x6b, 0xb8, 0xa3, 0x5b, 0xb4, 0xfb, 0x67, + 0x24, 0x18, 0x9e, 0x31, 0xd3, 0x57, 0x2a, 0x68, 0x4c, 0x21, 0x02, 0x82, + 0x99, 0xf9, 0xc7, 0x4d, 0x80, 0x34, 0x6e, 0x09, 0x48, 0xbb, 0xfa, 0x2f, + 0x7a, 0x94, 0xb2, 0x98, 0xb2, 0xc9, 0x96, 0x3b, 0x56, 0x01, 0x8c, 0x07, + 0xf6, 0xcb, 0x87, 0xcb, 0xb6, 0x63, 0xb3, 0x52, 0x3c, 0x9a, 0x30, 0x33, + 0x2a, 0x42, 0x3e, 0x3b, 0x41, 0x6f, 0x29, 0xc9, 0x80, 0x98, 0xd4, 0x7d, + 0x05, 0x2c, 0x81, 0x70, 0x8c, 0x31, 0xe1, 0x96, 0x2a, 0x17, 0xa1, 0xa1, + 0x16, 0xac, 0xb2, 0x03, 0x70, 0x1f, 0x58, 0xa5, 0x2a, 0x08, 0xc8, 0xc7, + 0x3e, 0xd7, 0xc3, 0x07, 0xa4, 0xac, 0x42, 0xe2, 0x0c, 0x80, 0xe9, 0x00, + 0x2c, 0xdc, 0x8d, 0x82, 0x13, 0x8c, 0xca, 0xc3, 0x00, 0xd7, 0x6a, 0xb9, + 0x8a, 0x07, 0xcc, 0x1b, 0x43, 0x59, 0xf2, 0xa5, 0xcb, 0x78, 0x79, 0x19, + 0x31, 0x15, 0x33, 0xe4, 0x32, 0xae, 0x9d, 0x5b, 0xa6, 0x18, 0xd4, 0x53, + 0x77, 0xeb, 0x18, 0xbd, 0xfc, 0x06, 0x79, 0x51, 0xb8, 0xea, 0x57, 0x45, + 0x80, 0x1b, 0x05, 0xba, 0xd1, 0xaa, 0x52, 0xa4, 0x28, 0x4a, 0x97, 0x7e, + 0x84, 0x54, 0x19, 0x06, 0x9a, 0xb2, 0x66, 0xf2, 0x9e, 0x35, 0x16, 0x8a, + 0xf3, 0xc5, 0x45, 0xc8, 0xf8, 0x37, 0xb9, 0x7b, 0x47, 0x59, 0x89, 0x81, + 0x2f, 0x48, 0x52, 0xfc, 0xc9, 0x57, 0xce, 0xab, 0x14, 0x4c, 0xb9, 0x49, + 0xed, 0x52, 0x50, 0x51, 0x65, 0x13, 0xd0, 0xc8, 0x16, 0xff, 0x1b, 0x17, + 0x0d, 0xbb, 0x7d, 0xb0, 0xfa, 0x1c, 0xea, 0x52, 0xaa, 0xef, 0xfa, 0x6e, + 0x74, 0x85, 0x3a, 0xec, 0x9a, 0xb2, 0x06, 0x6c, 0x76, 0x06, 0x99, 0x09, + 0x3f, 0xbb, 0x73, 0x1a, 0xd1, 0x6a, 0xa3, 0xb1, 0x63, 0x2e, 0x19, 0x10, + 0xb4, 0x93, 0x1b, 0x6e, 0xc4, 0x71, 0x1d, 0x2a, 0x0b, 0xd9, 0x50, 0x9b, + 0x65, 0x55, 0xbb, 0x61, 0x17, 0xca, 0x6d, 0x09, 0x86, 0x01, 0xb9, 0xc0, + 0x0a, 0x87, 0x61, 0x5c, 0xca, 0x6b, 0xc5, 0x52, 0x28, 0x54, 0x38, 0x02, + 0x04, 0x08, 0x26, 0x02, 0x8c, 0x32, 0x2c, 0xc4, 0xc8, 0x1b, 0xb7, 0x5a, + 0x4e, 0xb3, 0x66, 0xed, 0xe0, 0x97, 0xe1, 0xc1, 0x22, 0xa9, 0x57, 0x03, + 0x4a, 0x75, 0xc1, 0x04, 0x08, 0x48, 0x01, 0x00, 0x32, 0x04, 0xb9, 0x7f, + 0x6c, 0xd6, 0x48, 0xfd, 0x55, 0xa7, 0xec, 0xf7, 0x2c, 0xee, 0x58, 0x7e, + 0xf7, 0xa4, 0xb4, 0x05, 0x7b, 0x58, 0x13, 0x62, 0xa4, 0x52, 0x96, 0x4d, + 0xe5, 0xb0, 0x57, 0x4b, 0x69, 0x24, 0x52, 0xc4, 0xc1, 0x88, 0x04, 0xb4, + 0xb2, 0x79, 0x24, 0x45, 0x56, 0x56, 0x63, 0x30, 0x24, 0xa3, 0xd8, 0x7e, + 0x88, 0x35, 0xbf, 0xea, 0x67, 0x35, 0x21, 0xfb, 0x64, 0xa0, 0x18, 0x67, + 0xa9, 0xd9, 0x7f, 0xb2, 0x36, 0x26, 0x33, 0xa6, 0x36, 0xdf, 0x64, 0x96, + 0xcb, 0xe6, 0x5c, 0xaf, 0x2a, 0x77, 0xc6, 0xa7, 0xc8, 0xda, 0xfc, 0x40, + 0xd4, 0x2a, 0x77, 0xb8, 0x76, 0x3c, 0x49, 0x15, 0xc3, 0x6d, 0x43, 0x95, + 0x59, 0x15, 0x5a, 0xce, 0xd0, 0xb1, 0xa2, 0x15, 0x32, 0x7c, 0x06, 0x80, + 0xde, 0x0a, 0x76, 0xc8, 0xaa, 0x85, 0x53, 0x98, 0x86, 0xb8, 0xca, 0x10, + 0x53, 0xe5, 0x9d, 0xf1, 0xfc, 0x2a, 0x23, 0x30, 0x10, 0x00, 0x15, 0x0b, + 0x71, 0xfb, 0x96, 0x9a, 0xf0, 0x08, 0x25, 0x27, 0x87, 0xb9, 0xc2, 0x3b, + 0xe2, 0xb8, 0x6c, 0xd6, 0xa5, 0xa7, 0x07, 0xbc, 0x1d, 0x35, 0x89, 0x13, + 0x3f, 0xf7, 0xa2, 0x68, 0x6a, 0x91, 0xb0, 0x15, 0xb9, 0x4b, 0x56, 0x8a, + 0x97, 0xc0, 0x7e, 0x53, 0xc7, 0xb9, 0x3e, 0x9b, 0x81, 0xe8, 0xf5, 0x53, + 0x57, 0xdb, 0xaf, 0x64, 0x70, 0x4d, 0x8b, 0x3c, 0x49, 0xfd, 0x83, 0x11, + 0x89, 0x00, 0x0d, 0xfb, 0x9c, 0x40, 0xb2, 0x36, 0x50, 0xfc, 0xd8, 0x97, + 0x97, 0x03, 0x41, 0xaa, 0x90, 0x05, 0x0c, 0x27, 0x20, 0x1f, 0xd3, 0x28, + 0x66, 0xa9, 0x61, 0x4c, 0x54, 0x41, 0x92, 0x38, 0x61, 0xbf, 0x0b, 0xc6, + 0x53, 0xa2, 0x77, 0x99, 0xf8, 0x35, 0x75, 0xa8, 0xa3, 0x86, 0x3a, 0x05, + 0x18, 0x54, 0x2c, 0xc7, 0x3c, 0x13, 0x64, 0xd7, 0x94, 0xa4, 0x55, 0xc3, + 0xd1, 0x49, 0x27, 0xf6, 0xe0, 0xb8, 0xcf, 0x13, 0x1a, 0x22, 0xdc, 0x85, + 0x30, 0x66, 0x0b, 0x06, 0xb9, 0x9a, 0xb4, 0x41, 0xaf, 0x6e, 0x0a, 0x4f, + 0xfa, 0xd4, 0xb1, 0x03, 0x4c, 0x6f, 0xd0, 0x2b, 0x22, 0x3a, 0x43, 0x4e, + 0xc7, 0x92, 0x4a, 0xb7, 0x14, 0x87, 0x4c, 0x58, 0xce, 0x62, 0x44, 0x03, + 0x03, 0x27, 0x68, 0xfb, 0x36, 0x5e, 0x9e, 0xe0, 0x60, 0xd4, 0xe0, 0x9b, + 0x56, 0xf6, 0x11, 0x59, 0x95, 0x6f, 0xf2, 0x50, 0x09, 0xd0, 0x40, 0x3e, + 0xd6, 0x91, 0x5f, 0x6b, 0x32, 0x56, 0x23, 0x43, 0x44, 0x66, 0xcc, 0xc2, + 0x23, 0x46, 0x53, 0x16, 0xcc, 0x02, 0x09, 0x2c, 0x75, 0x2c, 0xa6, 0xab, + 0x70, 0x36, 0x16, 0x21, 0x72, 0x87, 0xa7, 0x9b, 0x68, 0xe0, 0x89, 0x4a, + 0x44, 0x00, 0x5a, 0xb4, 0xf1, 0x38, 0xd2, 0x1b, 0xbf, 0x4a, 0x24, 0xa0, + 0x91, 0xd7, 0x11, 0x8a, 0xee, 0xb8, 0x42, 0xab, 0x5d, 0xe7, 0x3e, 0xff, + 0xd7, 0x22, 0xdc, 0x39, 0x61, 0xca, 0x1b, 0x07, 0x8d, 0x18, 0x9c, 0x14, + 0xd2, 0xaf, 0xd7, 0x9f, 0x0a, 0x03, 0xb8, 0xea}, + // cipherTextDigest + {0x00, 0x57, 0xe4, 0x34, 0x51, 0x68, 0xa6, 0x31, 0xc6, 0x6d, 0x53, + 0x67, 0x42, 0xe1, 0x5a, 0x3a, 0xc9, 0x82, 0x6d, 0x55, 0x47, 0x7a, + 0xb5, 0x02, 0xbe, 0xc3, 0x19, 0x88, 0x5b, 0x38, 0xe7, 0xff}, + // secret + {0x66, 0xa5, 0x96, 0x64, 0x19, 0xef, 0xc4, 0x31, 0xd4, 0xaf, 0x26, + 0xe8, 0x2a, 0x9b, 0x7f, 0x20, 0x61, 0xc3, 0xb0, 0xea, 0xf0, 0x36, + 0x51, 0x2c, 0x74, 0x36, 0x13, 0x94, 0x66, 0x05, 0x1c, 0x43}, + true}, + // tcID: 40 + {40, + params_ml_kem768_test_mode, + // entropy + {0x19, 0xd0, 0xa7, 0x24, 0xbf, 0x0f, 0xa6, 0xee, 0x8a, 0xdc, 0x0c, + 0x64, 0xf7, 0xa1, 0x66, 0x5d, 0x96, 0x9f, 0x92, 0x7d, 0xbd, 0x16, + 0x56, 0x34, 0x45, 0x56, 0xb8, 0xea, 0xa7, 0x3e, 0x7e, 0xcc}, + // publicKey + {0x18, 0xe9, 0xcf, 0x4a, 0xab, 0x83, 0x8e, 0xe7, 0x61, 0x7a, 0x14, 0x42, + 0x4e, 0x37, 0x35, 0xa6, 0x52, 0x92, 0xd3, 0xd6, 0x93, 0xd6, 0x30, 0x5d, + 0x44, 0x41, 0x69, 0x68, 0xd6, 0x15, 0xd0, 0xc4, 0x81, 0x83, 0x73, 0x67, + 0x84, 0x33, 0xbd, 0x4f, 0xe2, 0x31, 0x37, 0x09, 0x83, 0x93, 0xb9, 0x59, + 0x1c, 0x1a, 0x80, 0xbb, 0x0c, 0x7f, 0xe3, 0xc4, 0x92, 0x1e, 0x0a, 0xa6, + 0xa2, 0xd8, 0x92, 0x41, 0x2a, 0xa2, 0xb1, 0x9a, 0x8e, 0x46, 0x34, 0x0e, + 0x6a, 0x74, 0x3a, 0xd1, 0x99, 0xae, 0xe8, 0x68, 0x1b, 0x4c, 0x37, 0x0a, + 0x30, 0x41, 0x91, 0xcc, 0xc6, 0xa0, 0xf7, 0x77, 0x8d, 0x2a, 0x00, 0xc8, + 0xe0, 0xe2, 0x0e, 0xd0, 0x37, 0x95, 0x35, 0x42, 0x21, 0xdf, 0x2c, 0x31, + 0x6d, 0xcc, 0x29, 0x89, 0x2a, 0xa4, 0x3f, 0xea, 0x6e, 0x8d, 0x3b, 0x0f, + 0x8c, 0xf4, 0x31, 0xda, 0x67, 0x20, 0xe9, 0xf5, 0xbc, 0xd9, 0x5a, 0x6f, + 0x1f, 0x95, 0x1a, 0x4c, 0xab, 0x9f, 0x07, 0xec, 0x50, 0x96, 0xe1, 0x52, + 0x4a, 0x48, 0x22, 0xaa, 0xb2, 0xbc, 0x11, 0xea, 0x75, 0x92, 0xbc, 0x9f, + 0xbb, 0xe6, 0xbb, 0xf7, 0xd4, 0x88, 0xd6, 0xb6, 0xae, 0x43, 0xb0, 0x38, + 0xac, 0x72, 0xb9, 0x4f, 0x35, 0x7a, 0x8d, 0xf9, 0x4e, 0x02, 0x33, 0xc6, + 0x92, 0x99, 0x46, 0xb3, 0x17, 0xb2, 0xa9, 0x7c, 0xa2, 0xc9, 0x87, 0x9b, + 0x72, 0x8a, 0x70, 0xca, 0x15, 0x77, 0x0c, 0xe5, 0x2c, 0xce, 0x9b, 0x08, + 0x82, 0x3a, 0x77, 0xeb, 0x36, 0x67, 0x4a, 0x44, 0x6b, 0x7a, 0xf3, 0x93, + 0x05, 0xbc, 0x18, 0x30, 0x10, 0x97, 0xde, 0x00, 0xc8, 0xcc, 0xc6, 0x4b, + 0x9c, 0xea, 0xa3, 0xc5, 0x70, 0x24, 0x09, 0xc4, 0x4c, 0x77, 0x44, 0x49, + 0xa9, 0xe4, 0x12, 0x6c, 0x1c, 0x8c, 0x8d, 0xb6, 0x63, 0x83, 0x48, 0x2c, + 0x50, 0x88, 0x45, 0x06, 0x9a, 0x26, 0x4d, 0x12, 0x63, 0xfc, 0x19, 0x9f, + 0x55, 0xf1, 0xc3, 0xd7, 0x19, 0x28, 0x99, 0x42, 0x01, 0x79, 0x7a, 0x9c, + 0x54, 0x01, 0x4e, 0xe3, 0x9a, 0x3a, 0xd6, 0x02, 0x55, 0xba, 0xe8, 0x46, + 0xe1, 0x68, 0x79, 0xb5, 0xc2, 0xb3, 0x1f, 0x30, 0x4a, 0xa7, 0x10, 0xc8, + 0x92, 0x87, 0x4e, 0x16, 0x55, 0x06, 0xa2, 0xcc, 0x38, 0xbc, 0x05, 0x19, + 0xfc, 0x03, 0xb3, 0xc1, 0x00, 0x09, 0x58, 0x7c, 0xa9, 0x27, 0x13, 0x37, + 0xc3, 0x99, 0x38, 0xf1, 0x83, 0x48, 0x04, 0x99, 0x3c, 0xcc, 0x13, 0x60, + 0x55, 0xd3, 0x90, 0xae, 0x99, 0x49, 0xc6, 0x22, 0x99, 0x17, 0x1c, 0xb2, + 0x73, 0x59, 0x34, 0xd8, 0x9b, 0x3f, 0x45, 0xb8, 0x1c, 0xc9, 0xcc, 0x4c, + 0xaa, 0x66, 0x55, 0x11, 0x83, 0xa0, 0x9f, 0xb5, 0x83, 0x56, 0xf8, 0x4e, + 0xa2, 0x5a, 0x1d, 0x7d, 0x98, 0x11, 0x38, 0xe5, 0xb3, 0x89, 0x49, 0x70, + 0x3c, 0xaa, 0x4d, 0x91, 0x4c, 0xca, 0x9f, 0xd1, 0xce, 0x43, 0x56, 0x51, + 0xe4, 0x22, 0x4e, 0x60, 0x0b, 0x89, 0x81, 0xe6, 0x8b, 0x54, 0xfb, 0x91, + 0xc3, 0x41, 0x93, 0x5c, 0xb0, 0x15, 0xc9, 0x97, 0xce, 0x5e, 0xb5, 0x3d, + 0x24, 0xf4, 0x4e, 0x34, 0xc3, 0x39, 0xba, 0x72, 0xa5, 0x23, 0x32, 0x32, + 0x96, 0x76, 0x1b, 0x75, 0xec, 0x4d, 0x02, 0x41, 0x33, 0x24, 0x33, 0x60, + 0x09, 0xc7, 0x59, 0xbd, 0x6b, 0x3e, 0x73, 0x7b, 0x68, 0x1a, 0x40, 0x95, + 0x49, 0xe8, 0x47, 0xed, 0x66, 0x7a, 0xab, 0x58, 0x1b, 0x43, 0x4b, 0x8d, + 0xc9, 0x59, 0x95, 0xfa, 0x14, 0x83, 0x67, 0x4b, 0xbd, 0x0e, 0x55, 0xce, + 0x93, 0x09, 0x9f, 0x65, 0x09, 0xbb, 0xe8, 0x01, 0x63, 0xce, 0xd2, 0xae, + 0x4b, 0xf7, 0xa6, 0x7c, 0x38, 0x0c, 0x93, 0xa5, 0x31, 0x94, 0xe2, 0x25, + 0x57, 0xc7, 0x8e, 0xe4, 0x68, 0xca, 0x85, 0x14, 0x4f, 0xc5, 0xb3, 0x8a, + 0x5a, 0xc8, 0x0e, 0x2f, 0xc4, 0x44, 0x36, 0x71, 0x05, 0xbd, 0x06, 0x47, + 0xec, 0xa5, 0x6c, 0x95, 0x72, 0x9f, 0xf1, 0xc8, 0xc9, 0xff, 0x3a, 0x32, + 0xc1, 0xe5, 0x09, 0x45, 0x94, 0x9b, 0x9f, 0xf6, 0x71, 0xc6, 0x95, 0x0a, + 0xb6, 0x52, 0x6e, 0x4e, 0x23, 0x96, 0xff, 0x5a, 0x91, 0x58, 0x05, 0xa6, + 0x63, 0xb9, 0x2e, 0x2d, 0xb2, 0x63, 0x8e, 0x65, 0x52, 0x37, 0x99, 0x0e, + 0x8e, 0x37, 0x00, 0x07, 0xda, 0xb1, 0x14, 0x87, 0x4d, 0x8d, 0x89, 0x9e, + 0xbc, 0xe2, 0xaa, 0xea, 0x89, 0x05, 0xe9, 0x55, 0x7b, 0xec, 0xe1, 0x5b, + 0x3b, 0xec, 0x13, 0x6b, 0xf9, 0x11, 0xe4, 0xc8, 0x7c, 0x88, 0x44, 0xcb, + 0x55, 0xa5, 0x53, 0x75, 0xfa, 0x4e, 0xcc, 0x44, 0x90, 0xef, 0x61, 0x4c, + 0xaf, 0x83, 0x40, 0x9e, 0x86, 0x1e, 0x01, 0x72, 0x20, 0x25, 0xb3, 0x40, + 0x95, 0x14, 0x1e, 0xcc, 0xa6, 0x60, 0x0b, 0x1b, 0x35, 0xf1, 0x4c, 0xbe, + 0x43, 0x15, 0x2b, 0x77, 0x49, 0x8e, 0x05, 0x3a, 0x49, 0xe1, 0xf8, 0x15, + 0x18, 0xec, 0x23, 0xec, 0x12, 0x6c, 0x87, 0xb5, 0xcc, 0x7b, 0x24, 0x40, + 0x36, 0x84, 0x18, 0xe2, 0xc8, 0x3b, 0xc7, 0x97, 0x1d, 0xe2, 0xbc, 0x24, + 0xa8, 0xf3, 0xc7, 0x72, 0xbb, 0x7d, 0xf9, 0x4b, 0x25, 0xe3, 0x55, 0x6e, + 0x26, 0x21, 0x8c, 0xdb, 0x44, 0x32, 0x03, 0xa3, 0x8f, 0xec, 0xe8, 0x6d, + 0xb7, 0xd5, 0x1e, 0xed, 0xb0, 0x09, 0x51, 0x94, 0x8d, 0x80, 0x57, 0x02, + 0x33, 0x8a, 0x25, 0x6d, 0x39, 0x6f, 0x42, 0xeb, 0x9a, 0x29, 0xd9, 0xa6, + 0x72, 0xe7, 0x8e, 0x60, 0xe6, 0x37, 0x46, 0xd7, 0x96, 0x27, 0xfa, 0x30, + 0x87, 0x16, 0xa5, 0x68, 0x18, 0x35, 0x68, 0x6b, 0xb9, 0x94, 0x6c, 0x8f, + 0x7f, 0x49, 0x92, 0x5d, 0x63, 0x8c, 0x76, 0xa7, 0x1d, 0xe4, 0xc1, 0x23, + 0x6f, 0xec, 0x42, 0x16, 0xc3, 0x4a, 0xef, 0x16, 0x0d, 0xd4, 0x74, 0xc6, + 0xd2, 0x1b, 0x20, 0x84, 0xa6, 0xb0, 0x14, 0x06, 0x40, 0x83, 0x05, 0x8e, + 0x6e, 0xab, 0x34, 0xa0, 0xd3, 0x6f, 0x03, 0xfb, 0xa9, 0x78, 0x95, 0xb7, + 0x40, 0x21, 0x87, 0xa4, 0x36, 0x1e, 0xd0, 0xc4, 0x60, 0xd6, 0x7a, 0xa4, + 0xb3, 0x9b, 0x3f, 0x17, 0xd8, 0x15, 0xd8, 0x93, 0x64, 0x40, 0x89, 0x9b, + 0xe3, 0x09, 0x20, 0xc8, 0xc9, 0x25, 0xfc, 0x9b, 0x93, 0x60, 0x4b, 0x58, + 0xc0, 0x94, 0x42, 0x40, 0x25, 0x34, 0x91, 0x64, 0x81, 0x03, 0x99, 0xbb, + 0xc1, 0x6b, 0x58, 0x27, 0xe7, 0x9b, 0xde, 0x6c, 0x7e, 0x3f, 0x1a, 0xbe, + 0x17, 0x23, 0x4b, 0xcd, 0xab, 0x25, 0x1e, 0xc0, 0x42, 0x30, 0xb0, 0x81, + 0xe7, 0x4b, 0x64, 0x75, 0xe6, 0x94, 0x06, 0x56, 0x3a, 0xff, 0xec, 0x91, + 0x9d, 0x40, 0x28, 0x5e, 0x94, 0xbf, 0x5a, 0xba, 0xa5, 0xbd, 0x0a, 0x90, + 0x82, 0xc3, 0x83, 0x52, 0x38, 0x82, 0xd0, 0x36, 0x45, 0x6b, 0xf5, 0x44, + 0x59, 0x31, 0x74, 0xb1, 0x80, 0xa6, 0x51, 0x9b, 0x24, 0x2e, 0x69, 0x22, + 0x0c, 0x35, 0x2b, 0xdb, 0x67, 0x5f, 0x11, 0xa1, 0xc3, 0x5f, 0x31, 0x49, + 0x90, 0x61, 0xc3, 0xdd, 0x27, 0x39, 0x0d, 0x8a, 0xa9, 0x7e, 0xf0, 0x69, + 0xc3, 0x11, 0x05, 0xa3, 0x0b, 0x33, 0xa9, 0xdb, 0x66, 0x37, 0x01, 0x92, + 0x8b, 0x11, 0x29, 0x75, 0xaa, 0x07, 0xb2, 0x10, 0x25, 0xd8, 0x30, 0x28, + 0xae, 0x0c, 0xbf, 0xbf, 0xda, 0x26, 0x2f, 0xa7, 0x80, 0x58, 0x70, 0xa7, + 0x0c, 0xd5, 0xa3, 0x40, 0xc7, 0x71, 0x1e, 0x1a, 0x34, 0x5b, 0xd6, 0x1f, + 0x7e, 0xb1, 0x63, 0x32, 0xda, 0x41, 0x82, 0xa0, 0x44, 0xd0, 0x47, 0x51, + 0xfe, 0x11, 0xbd, 0x2d, 0x2a, 0xac, 0x7f, 0x64, 0x59, 0x6d, 0x80, 0x83, + 0x7d, 0xe6, 0x45, 0x8b, 0x8c, 0x88, 0x79, 0x31, 0x8a, 0x34, 0x50, 0xb1, + 0x78, 0x98, 0x98, 0x50, 0xd4, 0xc4, 0x64, 0x39, 0x8d, 0x78, 0xb2, 0x22, + 0xd1, 0xa6, 0x1c, 0x14, 0x45, 0xad, 0x5d, 0x02, 0xa4, 0x1c, 0x15, 0x2d, + 0x75, 0x8a, 0x72, 0x95, 0xb9, 0x23, 0x71, 0xe5, 0x73, 0xfe, 0x26, 0xcf, + 0x11, 0x90, 0x2e, 0xb7, 0x77, 0x01, 0x1c, 0xf4, 0xb8, 0x9b, 0xe8, 0x07, + 0x3f, 0xe7, 0x7c, 0xbd, 0xb3, 0x55, 0x89, 0x21, 0xc9, 0x04, 0xc5, 0x28, + 0xb4, 0x66, 0x05, 0x60, 0x72, 0x71, 0x97, 0x66, 0x3d, 0x25, 0xaa, 0x50, + 0x64, 0x77, 0x86, 0x70, 0x53, 0x22, 0xdd, 0xa2, 0xbc, 0x1e, 0x5a, 0x56, + 0x70, 0x72, 0xbf, 0x23, 0xbc, 0x14, 0xc7, 0x72, 0x1b, 0xf6, 0x2a, 0x89, + 0xff, 0x66, 0x61, 0xad, 0xc1, 0xcc, 0x26, 0x9c, 0xb2, 0xa1, 0x0a, 0x23, + 0x29, 0x87, 0x87, 0x92, 0xe0, 0xc7, 0x32, 0x7b, 0x6a, 0x79, 0xf5, 0x67, + 0xdd, 0x87, 0x3e, 0x89, 0xd0, 0xe0, 0x48, 0xc6, 0xf3, 0xb8, 0x0c, 0x69, + 0x34, 0x5c, 0x88, 0xd2, 0x11, 0x13, 0x7b, 0x33, 0x11, 0xf0, 0xc1, 0x0f, + 0xe7, 0x9d, 0x03, 0xaf, 0x4f, 0x4e, 0x05, 0xc9}, + // cipherTextDigest + {0x3c, 0x65, 0x27, 0x9a, 0x39, 0x3d, 0xee, 0xdc, 0x4d, 0x38, 0x58, + 0x47, 0xa5, 0xf0, 0x32, 0x35, 0x0a, 0x82, 0x16, 0xcd, 0x14, 0xa6, + 0x30, 0xc8, 0x44, 0xa2, 0x51, 0xe5, 0x5f, 0x79, 0xd9, 0xa4}, + // secret + {0x3e, 0x93, 0x50, 0xa1, 0xa0, 0xc1, 0xfa, 0x7b, 0x2f, 0xd6, 0x60, + 0x65, 0xf8, 0x4e, 0xe9, 0x41, 0x98, 0x2b, 0x0e, 0xba, 0x24, 0x9b, + 0xb7, 0xdb, 0x99, 0xc3, 0x5e, 0x02, 0xf5, 0xfb, 0xe2, 0x72}, + true}, + // tcID: 41 + {41, + params_ml_kem768_test_mode, + // entropy + {0x27, 0x5e, 0xa1, 0xb2, 0xe8, 0x10, 0xdb, 0xdf, 0x04, 0x53, 0x80, + 0x8d, 0x53, 0x7c, 0xce, 0xb9, 0xda, 0xca, 0xbe, 0x25, 0x06, 0x30, + 0x07, 0xba, 0xd1, 0x4f, 0x69, 0x54, 0x8f, 0x51, 0xf5, 0x8e}, + // publicKey + {0x32, 0xa5, 0x29, 0xac, 0x15, 0x09, 0xba, 0x83, 0x3c, 0x6e, 0x55, 0x7b, + 0x67, 0x13, 0x86, 0x45, 0x56, 0x92, 0x15, 0x76, 0x16, 0x6e, 0x48, 0x9c, + 0xdc, 0x95, 0x57, 0x46, 0x7c, 0x97, 0xbc, 0x51, 0xa7, 0x85, 0xb2, 0xad, + 0xeb, 0xbb, 0xa8, 0x85, 0x07, 0x4d, 0x91, 0xa5, 0x82, 0xe0, 0x02, 0x1d, + 0x83, 0xfb, 0xbb, 0x27, 0xb8, 0x2c, 0xb4, 0x94, 0x74, 0xf0, 0xc4, 0x73, + 0x14, 0x18, 0x34, 0x51, 0x03, 0x46, 0x7c, 0xfc, 0x26, 0x47, 0x63, 0x8b, + 0xbc, 0x91, 0x50, 0x8e, 0x80, 0x04, 0x37, 0xfc, 0x41, 0x99, 0x92, 0x5b, + 0x49, 0x39, 0xc1, 0xdf, 0x64, 0x83, 0x24, 0x0c, 0xcc, 0x22, 0x69, 0x37, + 0x3c, 0x29, 0xad, 0xdb, 0xc6, 0x70, 0x15, 0x10, 0x1f, 0x45, 0x07, 0xbd, + 0x2d, 0x37, 0x55, 0x76, 0x28, 0xb6, 0xca, 0x70, 0x2d, 0x26, 0x1c, 0x40, + 0x7e, 0x64, 0x05, 0xf5, 0x79, 0x27, 0x84, 0xd0, 0x5c, 0xf4, 0x82, 0xa1, + 0xfd, 0x70, 0x6e, 0xb6, 0x03, 0x68, 0x8e, 0x78, 0x0b, 0x5b, 0xc4, 0xbc, + 0x4b, 0xf5, 0x19, 0x76, 0x36, 0x6f, 0x53, 0x71, 0x5c, 0xad, 0x84, 0x24, + 0xd7, 0xc9, 0x24, 0x6a, 0x5b, 0xb6, 0x94, 0x03, 0x63, 0x7b, 0xa2, 0x9b, + 0x74, 0x5b, 0x4e, 0x85, 0x01, 0x7f, 0x0d, 0xec, 0xc1, 0x1d, 0x09, 0x5a, + 0xde, 0x80, 0x2d, 0x6b, 0x89, 0xc5, 0x3c, 0x8c, 0x12, 0x90, 0x70, 0xbc, + 0x27, 0x45, 0x71, 0xd6, 0xd4, 0x76, 0x31, 0x73, 0x26, 0x9a, 0x03, 0x48, + 0x72, 0x23, 0x3b, 0x97, 0x85, 0x3e, 0xdf, 0x29, 0xa6, 0xd4, 0x09, 0x9e, + 0x97, 0x96, 0x4b, 0x93, 0xa8, 0x2d, 0x61, 0x69, 0x76, 0x15, 0x66, 0x39, + 0x04, 0x48, 0x74, 0x4c, 0x23, 0x1f, 0x5c, 0x59, 0x6c, 0x19, 0xf1, 0xbc, + 0xaa, 0x90, 0x3a, 0xdc, 0xf1, 0xa6, 0x0f, 0x43, 0x16, 0x24, 0x73, 0xa2, + 0x90, 0x62, 0xbc, 0x91, 0x44, 0x01, 0x50, 0x11, 0x57, 0x18, 0xd4, 0x2a, + 0xc1, 0xcb, 0x0d, 0x7e, 0xf5, 0x41, 0x1e, 0xc3, 0x74, 0x1e, 0x53, 0x27, + 0xb9, 0xc5, 0x5a, 0x28, 0x92, 0x98, 0x19, 0x26, 0xa4, 0xa1, 0xa2, 0x03, + 0xf0, 0x63, 0x71, 0x75, 0x53, 0x12, 0xa1, 0x35, 0x8d, 0x93, 0xea, 0x5c, + 0x27, 0x5a, 0xa1, 0x61, 0xdc, 0x27, 0xbd, 0x52, 0x46, 0xa8, 0xe4, 0x37, + 0x81, 0xca, 0x5e, 0xcf, 0x35, 0x5d, 0x2b, 0x97, 0xae, 0x6e, 0xd9, 0x8e, + 0x31, 0xba, 0x19, 0xc6, 0xaa, 0xb8, 0xee, 0x70, 0x63, 0x0a, 0x01, 0x9c, + 0xda, 0x92, 0x4b, 0x5d, 0x53, 0x9b, 0xe0, 0xb3, 0xb1, 0x63, 0xe8, 0xc6, + 0x62, 0x92, 0x30, 0x6e, 0x67, 0x79, 0xa1, 0xcc, 0x2c, 0x28, 0xfc, 0xb3, + 0x77, 0x25, 0x50, 0xcf, 0x83, 0xa2, 0xe1, 0x8c, 0x0a, 0x27, 0x46, 0x16, + 0xdd, 0x85, 0x2a, 0x35, 0xb6, 0x82, 0xd2, 0xdb, 0x56, 0x3d, 0x73, 0x0c, + 0xcf, 0xab, 0xc9, 0xa5, 0x66, 0x20, 0x87, 0x19, 0x4e, 0x68, 0x87, 0x4a, + 0x68, 0x43, 0x00, 0x06, 0x53, 0x00, 0x5e, 0x33, 0x0c, 0xb6, 0x98, 0x64, + 0xd7, 0xf7, 0xa4, 0x34, 0x0c, 0x66, 0x3a, 0x45, 0x66, 0xa6, 0x7b, 0x7c, + 0x52, 0xaa, 0x38, 0x86, 0x54, 0x4c, 0x96, 0xd5, 0x43, 0xb7, 0xb6, 0x83, + 0xce, 0xcc, 0x48, 0x3c, 0x20, 0x76, 0xba, 0x61, 0xc1, 0x86, 0x94, 0x5c, + 0x7e, 0x15, 0xb4, 0x43, 0x50, 0x6a, 0x41, 0xd2, 0x3a, 0xfc, 0xf1, 0x69, + 0x9a, 0xb1, 0x21, 0xda, 0x3c, 0x42, 0x10, 0x9c, 0x6b, 0x6d, 0x72, 0xb8, + 0x91, 0x00, 0xc5, 0x9f, 0xac, 0x29, 0x55, 0xb7, 0x87, 0x93, 0x9a, 0x70, + 0xf6, 0xb2, 0x7e, 0x89, 0x57, 0xba, 0xf2, 0x36, 0xa1, 0x20, 0xb2, 0x48, + 0x09, 0xaa, 0x4b, 0x7c, 0x74, 0xaa, 0x26, 0x38, 0x31, 0x53, 0xc8, 0x7c, + 0x05, 0xe2, 0xca, 0x7c, 0x9b, 0x70, 0xa4, 0x25, 0x4c, 0xb0, 0x81, 0xb7, + 0xd5, 0xf4, 0xa0, 0x3b, 0xb5, 0xcc, 0xc2, 0xb4, 0x24, 0x15, 0xfa, 0x4e, + 0x2b, 0xfc, 0x70, 0x2b, 0xc4, 0x20, 0xb8, 0xbb, 0xb9, 0x17, 0xbb, 0xc1, + 0xfb, 0xb8, 0x99, 0x35, 0x4c, 0x42, 0xd2, 0xb2, 0x8d, 0xf9, 0xf8, 0x34, + 0xac, 0x45, 0xa4, 0x60, 0x6c, 0x6f, 0x2a, 0xe5, 0xb3, 0x13, 0xc2, 0x82, + 0x15, 0x63, 0x72, 0x1d, 0xc1, 0x15, 0x8c, 0x6c, 0x23, 0xc7, 0xba, 0x2d, + 0xe3, 0xa2, 0x61, 0x12, 0xa9, 0x02, 0x13, 0xe2, 0x7a, 0x9d, 0x32, 0x44, + 0x7e, 0x90, 0x57, 0x7b, 0x69, 0x3f, 0x8b, 0x1a, 0x64, 0x29, 0x0a, 0x85, + 0x32, 0x80, 0x6f, 0x2e, 0x1b, 0x01, 0x41, 0x12, 0x7b, 0x76, 0xd3, 0x19, + 0xd4, 0x8c, 0x3a, 0x2a, 0xac, 0x13, 0x6a, 0x50, 0x2f, 0xea, 0xb9, 0x78, + 0x92, 0xc8, 0x98, 0xd2, 0x21, 0x0a, 0xad, 0x13, 0x37, 0xdc, 0xf7, 0x05, + 0x62, 0x27, 0xc2, 0x1c, 0xb9, 0x79, 0x07, 0xba, 0x0a, 0x46, 0x92, 0x9b, + 0xc2, 0x45, 0x6e, 0x41, 0x70, 0x5a, 0x50, 0xb7, 0xa1, 0x09, 0x12, 0x80, + 0x7c, 0xc9, 0xb2, 0xe0, 0x41, 0x4d, 0x10, 0x1a, 0x7d, 0x58, 0xdb, 0x68, + 0xd7, 0xc5, 0xb2, 0x2e, 0x17, 0x48, 0x36, 0x17, 0x89, 0x19, 0x9a, 0x25, + 0x49, 0x0c, 0x4b, 0xf4, 0xea, 0x32, 0x05, 0x3b, 0xc5, 0xa9, 0x49, 0x24, + 0x6f, 0xc2, 0xb8, 0xaa, 0xa5, 0xbf, 0x0b, 0x45, 0x00, 0x74, 0x4a, 0x87, + 0x5f, 0x08, 0x54, 0x30, 0x18, 0x25, 0x03, 0x97, 0xa6, 0x76, 0x33, 0x3f, + 0xbe, 0x12, 0xcb, 0x7a, 0xe3, 0x82, 0xff, 0xb6, 0x3f, 0x9f, 0xb0, 0x7e, + 0x27, 0x72, 0x98, 0xf1, 0x47, 0x45, 0xa3, 0xca, 0x6e, 0x33, 0xf6, 0x2b, + 0xa0, 0x94, 0x5b, 0xaf, 0x93, 0x5c, 0x38, 0x06, 0x47, 0x3d, 0x20, 0x46, + 0xa7, 0x68, 0xc2, 0xd8, 0x17, 0x4b, 0xe7, 0x62, 0xbc, 0x8e, 0x9a, 0x63, + 0xb0, 0x07, 0x91, 0x68, 0xcc, 0x1f, 0x9a, 0xe7, 0x6e, 0x97, 0x00, 0xce, + 0x27, 0xea, 0x88, 0x79, 0x45, 0x61, 0x06, 0xc1, 0x7d, 0x6c, 0x71, 0x16, + 0xf2, 0x47, 0x6d, 0xbe, 0x66, 0x24, 0xaa, 0x73, 0x5e, 0x2f, 0x04, 0x8d, + 0x6e, 0xda, 0x46, 0x43, 0xc2, 0x3a, 0xf7, 0xd7, 0x45, 0x78, 0x45, 0xbf, + 0x6a, 0x93, 0x3e, 0x2d, 0x02, 0x64, 0x00, 0xc5, 0x54, 0x88, 0x60, 0x02, + 0xe6, 0x21, 0x3e, 0x27, 0x71, 0x00, 0x34, 0x45, 0x1f, 0xd2, 0x7c, 0xad, + 0x97, 0x90, 0x45, 0x30, 0x1c, 0x55, 0xd6, 0x72, 0x55, 0x61, 0x6b, 0x9f, + 0x6a, 0x55, 0x88, 0xf2, 0x0c, 0x6f, 0xbd, 0x07, 0xae, 0x73, 0xc8, 0xad, + 0xb8, 0xd7, 0xa9, 0xf3, 0x93, 0x1b, 0xa7, 0x37, 0x32, 0xe5, 0x35, 0x4d, + 0x16, 0x23, 0x33, 0xb5, 0xe6, 0x39, 0xc9, 0x38, 0xc3, 0x02, 0xc6, 0xab, + 0xc0, 0x7a, 0x34, 0x5d, 0x52, 0xa3, 0xdf, 0x1a, 0x8c, 0x53, 0x22, 0x53, + 0x10, 0x69, 0x78, 0x42, 0x72, 0xa4, 0xa5, 0x75, 0x74, 0x9a, 0x62, 0x8c, + 0xc6, 0xc5, 0x19, 0xcc, 0x8b, 0x7d, 0xd0, 0x14, 0x14, 0xb0, 0x4a, 0x5c, + 0x35, 0xd4, 0xc9, 0x30, 0xf9, 0xb5, 0xa7, 0xcb, 0x68, 0x0c, 0x30, 0x6d, + 0x95, 0x54, 0xb1, 0xd9, 0x5c, 0x65, 0x99, 0x73, 0x4d, 0xdb, 0x12, 0x45, + 0xed, 0xb3, 0xa2, 0xee, 0x77, 0x54, 0xef, 0xb4, 0x97, 0xa8, 0x68, 0x66, + 0xa1, 0xc1, 0x47, 0xde, 0x01, 0x65, 0x74, 0xa5, 0x1e, 0x9a, 0xe9, 0x04, + 0xd3, 0x13, 0x07, 0xaf, 0x14, 0x50, 0x24, 0xf1, 0x4e, 0x77, 0x36, 0x70, + 0xdb, 0x37, 0x9a, 0x3f, 0x06, 0xb7, 0x2b, 0xba, 0x25, 0xca, 0x38, 0x72, + 0x89, 0xe9, 0x3b, 0x20, 0xea, 0xa0, 0xa6, 0xd2, 0x22, 0xb7, 0xf9, 0x2d, + 0xd1, 0xd3, 0xb0, 0x42, 0xb4, 0xca, 0x27, 0xa2, 0x62, 0x6f, 0x14, 0x84, + 0x74, 0xb2, 0x17, 0x4b, 0x81, 0xa2, 0xc7, 0x54, 0x6f, 0x7b, 0xf2, 0xb3, + 0x4a, 0x58, 0x58, 0xa6, 0xd5, 0x98, 0x7d, 0x00, 0xce, 0x5c, 0x04, 0x31, + 0x43, 0x9a, 0x56, 0x2a, 0xdb, 0x31, 0x95, 0xb1, 0x2b, 0x49, 0x5a, 0x50, + 0xb3, 0x91, 0xaa, 0xec, 0x7b, 0xb8, 0xf8, 0x51, 0x2c, 0xe7, 0x85, 0x9a, + 0x3d, 0xd3, 0x85, 0x74, 0xd1, 0x1f, 0x08, 0xab, 0xc7, 0x22, 0xfa, 0x67, + 0x47, 0xb6, 0x7a, 0x81, 0xa7, 0x41, 0x68, 0xd7, 0x81, 0xb0, 0x77, 0x10, + 0x40, 0x84, 0x79, 0x4e, 0xe5, 0x96, 0xc6, 0xe1, 0x5f, 0x5a, 0xfb, 0x35, + 0x2b, 0x3c, 0x9c, 0x3e, 0xd0, 0x6f, 0xb9, 0x51, 0x37, 0x5b, 0x81, 0x41, + 0xcd, 0xac, 0x6f, 0xaa, 0x23, 0x61, 0xcc, 0x6c, 0xbe, 0x7e, 0x82, 0x87, + 0x43, 0x02, 0xbb, 0x1a, 0xf9, 0x96, 0xe1, 0x72, 0x10, 0xb0, 0x9c, 0x98, + 0xeb, 0xa8, 0x49, 0xb2, 0xba, 0x9d, 0x87, 0x14, 0x52, 0x19, 0xa8, 0xa0, + 0x73, 0xe7, 0x38, 0x7d, 0x40, 0xc6, 0x57, 0x72, 0x52, 0xa4, 0x1f, 0xde, + 0xe7, 0x0d, 0xdd, 0x5f, 0x7e, 0x3b, 0x4b, 0xa4, 0xdd, 0x20, 0xf1, 0xcd, + 0x7c, 0xfa, 0x66, 0xce, 0xc7, 0x2f, 0x35, 0xe5}, + // cipherTextDigest + {0xbb, 0x50, 0x1f, 0x81, 0xac, 0x69, 0xc2, 0x51, 0xc3, 0x44, 0xf6, + 0xff, 0xd9, 0x5f, 0x5e, 0xa9, 0x0f, 0xd5, 0x38, 0x13, 0xb7, 0x62, + 0xd2, 0x9b, 0x37, 0x75, 0xd5, 0x62, 0x8e, 0x93, 0xb0, 0xec}, + // secret + {0xcf, 0x4d, 0xbe, 0x3a, 0x22, 0x91, 0xdf, 0x9c, 0xb4, 0x14, 0x5d, + 0x20, 0xa6, 0x5b, 0x76, 0x70, 0xf7, 0xb0, 0x92, 0x0c, 0xf4, 0x2c, + 0x91, 0x3c, 0x55, 0x9b, 0x34, 0xe9, 0x68, 0xe2, 0xc8, 0xac}, + true}, + // tcID: 42 + {42, + params_ml_kem768_test_mode, + // entropy + {0xc9, 0xfa, 0x64, 0xcd, 0x0f, 0xc0, 0x30, 0xc6, 0xe8, 0xce, 0xa9, + 0x18, 0x89, 0x5a, 0x2e, 0xb2, 0xde, 0x30, 0x06, 0x35, 0xd8, 0x59, + 0xb8, 0x46, 0x8c, 0xa6, 0x46, 0x98, 0x44, 0x1f, 0x29, 0xb1}, + // publicKey + {0x4d, 0x79, 0x0b, 0x63, 0xb2, 0x71, 0xbe, 0x00, 0x1c, 0x2f, 0x7a, 0xbb, + 0x8e, 0x17, 0x30, 0x57, 0x04, 0x6a, 0xd2, 0x3a, 0x9b, 0xe0, 0xda, 0x18, + 0x42, 0x86, 0xcf, 0xf9, 0xe4, 0x50, 0x87, 0xb1, 0x66, 0x55, 0xd6, 0x6d, + 0xbe, 0x31, 0x37, 0x6a, 0x52, 0x9e, 0x33, 0x7c, 0x6e, 0xbe, 0xb0, 0x8b, + 0x58, 0x28, 0x0b, 0xea, 0x90, 0x30, 0xa4, 0xe6, 0x1c, 0x72, 0x8c, 0x60, + 0x1c, 0xc4, 0x2a, 0xec, 0x80, 0x2f, 0x19, 0x4b, 0x6a, 0xa1, 0xb7, 0x7e, + 0x3e, 0xb8, 0x62, 0x20, 0xf6, 0x11, 0xa6, 0x04, 0x4a, 0xff, 0xf9, 0x58, + 0xcf, 0xb0, 0x55, 0x27, 0x44, 0x5f, 0x6a, 0x19, 0x81, 0x54, 0xa2, 0x06, + 0xe9, 0x3a, 0x69, 0xdd, 0x4b, 0x70, 0xbc, 0xd4, 0xc5, 0x0f, 0x4a, 0x21, + 0x75, 0x4b, 0x68, 0x47, 0x2c, 0x45, 0xb3, 0x79, 0x15, 0xe3, 0xc0, 0x11, + 0xd4, 0x39, 0x37, 0x52, 0xe2, 0xa2, 0x6f, 0x60, 0x50, 0x09, 0xa4, 0x3c, + 0x2c, 0xb9, 0xb7, 0x2d, 0xb6, 0xbc, 0xa1, 0x46, 0x89, 0x43, 0xf6, 0x04, + 0x9c, 0x00, 0x7f, 0x82, 0x21, 0xb6, 0xe0, 0xb9, 0x8d, 0x51, 0xb1, 0x04, + 0xa5, 0x21, 0x8d, 0x43, 0x38, 0x60, 0xcc, 0xd1, 0x12, 0xba, 0x3c, 0xbe, + 0x09, 0xf7, 0xa2, 0x65, 0x99, 0xac, 0x3e, 0x98, 0x68, 0x5e, 0x08, 0x68, + 0x43, 0x74, 0x45, 0x0b, 0xd3, 0x39, 0xc3, 0xd5, 0x79, 0xd7, 0x26, 0x57, + 0x48, 0xa0, 0xa3, 0x1c, 0xe2, 0x5d, 0xf2, 0xb5, 0x0b, 0x39, 0x2c, 0xa3, + 0x41, 0xf9, 0xb8, 0x05, 0x80, 0x55, 0xab, 0x7a, 0xa6, 0x16, 0x71, 0x06, + 0x95, 0xdb, 0x2d, 0x7e, 0x74, 0x36, 0xd1, 0x45, 0x15, 0xea, 0xc2, 0xc6, + 0x1e, 0x05, 0x26, 0x12, 0x48, 0x10, 0xfc, 0x54, 0x44, 0xc0, 0x64, 0x66, + 0x5f, 0xa8, 0x8f, 0xd1, 0x84, 0xba, 0xbd, 0xd3, 0x75, 0xef, 0xeb, 0x37, + 0xc8, 0xe6, 0xb0, 0x4b, 0x85, 0x46, 0xfc, 0xb8, 0x2a, 0xae, 0xc9, 0xb1, + 0x2c, 0x60, 0xa0, 0xa6, 0x99, 0x89, 0x3e, 0xbb, 0x2f, 0x30, 0x9c, 0xc8, + 0x10, 0x10, 0x44, 0xd7, 0x50, 0xce, 0x88, 0xa5, 0xaa, 0x54, 0xbb, 0x08, + 0xb4, 0xf7, 0x67, 0x46, 0xca, 0x12, 0x0a, 0x9c, 0x1d, 0xcb, 0x35, 0xb5, + 0x07, 0x21, 0xcb, 0xfe, 0x13, 0x20, 0xc0, 0x96, 0xa5, 0x86, 0xd9, 0x54, + 0xa7, 0x17, 0x93, 0xc5, 0x79, 0xa5, 0xee, 0xb7, 0xb3, 0xe3, 0xf7, 0x34, + 0xd0, 0x45, 0x0c, 0x2c, 0x81, 0xaa, 0x30, 0xd0, 0x51, 0xc7, 0x0a, 0x67, + 0xda, 0x97, 0x9a, 0x94, 0x34, 0x14, 0x27, 0xe7, 0x13, 0x31, 0x8a, 0x60, + 0xf9, 0x23, 0x42, 0x80, 0x16, 0xba, 0x25, 0x23, 0x8d, 0x55, 0x19, 0xb6, + 0x33, 0x60, 0x80, 0xc0, 0x3b, 0x91, 0x5c, 0x85, 0xaa, 0xa8, 0xd2, 0x3a, + 0x2d, 0x60, 0x01, 0xf0, 0xb3, 0x0f, 0xc2, 0x58, 0x4b, 0xb9, 0xb3, 0xc0, + 0x6e, 0x88, 0x30, 0x1e, 0xea, 0xa9, 0x04, 0x22, 0x18, 0x0e, 0x09, 0x1c, + 0xf8, 0x18, 0x6b, 0xe8, 0x55, 0xb4, 0xe8, 0x14, 0x21, 0xf5, 0xb0, 0x76, + 0xcf, 0x20, 0x24, 0x24, 0xe4, 0xba, 0xee, 0xfa, 0x6d, 0xed, 0x22, 0x0d, + 0x1c, 0x52, 0x52, 0x51, 0xb6, 0xbc, 0x68, 0x1a, 0xc7, 0x3e, 0xba, 0x07, + 0xe1, 0x34, 0x01, 0x29, 0xc4, 0xb9, 0x31, 0x8a, 0x0b, 0x4f, 0xe4, 0x14, + 0x55, 0x06, 0x81, 0xc4, 0xb0, 0x03, 0xad, 0x1c, 0xb4, 0xc6, 0x0c, 0x63, + 0x5f, 0x34, 0x2e, 0x8f, 0x34, 0x2f, 0x2c, 0x33, 0x20, 0x61, 0xab, 0x3f, + 0x00, 0x89, 0xc3, 0x4e, 0x52, 0x9b, 0x70, 0x19, 0x8b, 0xbf, 0xf7, 0x2d, + 0x45, 0x61, 0x51, 0xcb, 0x52, 0x70, 0x40, 0xa3, 0x8a, 0x24, 0x58, 0x7c, + 0xdd, 0xc3, 0x2f, 0x4a, 0x55, 0xc4, 0x8d, 0x01, 0x3c, 0xcd, 0xba, 0xca, + 0x21, 0x17, 0x9f, 0x0c, 0x0a, 0x44, 0x00, 0xf5, 0x62, 0xc4, 0x5a, 0xaa, + 0x0a, 0x81, 0x1b, 0x32, 0x1a, 0x45, 0x40, 0xbc, 0x21, 0x03, 0xe8, 0x28, + 0x7a, 0xa9, 0x62, 0x5a, 0x25, 0x43, 0x3b, 0xd0, 0x64, 0x1b, 0x56, 0x3a, + 0x29, 0xd9, 0x50, 0x95, 0xa0, 0x9e, 0xcf, 0xa0, 0x95, 0x77, 0xe5, 0x0f, + 0x09, 0x28, 0x95, 0x64, 0xd0, 0x59, 0x07, 0xf1, 0x8f, 0x83, 0x9b, 0x2b, + 0x8b, 0x69, 0x4d, 0x41, 0xbc, 0x7d, 0xb0, 0x0a, 0x94, 0x88, 0xa0, 0xa4, + 0xc6, 0xd6, 0x5c, 0x5d, 0xa7, 0x53, 0xe2, 0xe9, 0x40, 0xb9, 0xd7, 0x0e, + 0x66, 0x29, 0x6b, 0xaf, 0x9b, 0xbe, 0x34, 0xac, 0x7f, 0x6b, 0x07, 0x7a, + 0x5a, 0x9b, 0xbb, 0x4e, 0x6a, 0xbf, 0x1a, 0xab, 0xb1, 0x92, 0xf0, 0x98, + 0xe0, 0xf1, 0x69, 0x64, 0x58, 0xc2, 0x0c, 0x61, 0x0f, 0x7f, 0x50, 0x97, + 0xde, 0x2c, 0xbd, 0xe3, 0xe7, 0x2d, 0x78, 0x12, 0x2a, 0xa9, 0xa4, 0x83, + 0x39, 0xf4, 0x77, 0x42, 0x86, 0x42, 0x2a, 0x17, 0x47, 0x6c, 0x48, 0x1e, + 0xd3, 0x4c, 0x2d, 0xf0, 0x64, 0x4f, 0x91, 0x12, 0x08, 0x5e, 0x0b, 0x03, + 0x6d, 0x23, 0xb9, 0x54, 0x4c, 0x3a, 0xc6, 0x75, 0xbe, 0x3b, 0xe4, 0xaa, + 0x7e, 0x24, 0x60, 0xb6, 0xfc, 0x1c, 0x80, 0x38, 0x9c, 0x67, 0x21, 0x29, + 0x82, 0x12, 0x6b, 0x92, 0x37, 0xa3, 0x51, 0xb3, 0x40, 0xa8, 0x76, 0x93, + 0xae, 0x0c, 0x35, 0xe9, 0x01, 0x1d, 0xaa, 0xc9, 0xcc, 0x4a, 0xca, 0x96, + 0xf4, 0xa7, 0x0e, 0xa6, 0x49, 0x4e, 0x49, 0xc6, 0x54, 0xa3, 0xaa, 0xc8, + 0x30, 0x25, 0xc4, 0x0b, 0x52, 0xb9, 0x90, 0x2c, 0xb4, 0x76, 0x5a, 0x89, + 0xe2, 0xdc, 0xc7, 0x12, 0x97, 0x74, 0xd6, 0x60, 0x4e, 0xbe, 0xab, 0x8a, + 0xc4, 0x61, 0x1c, 0xd5, 0x6a, 0x3e, 0x62, 0xc8, 0x49, 0x7e, 0x9b, 0x3f, + 0xf5, 0xd3, 0x3a, 0xcf, 0x50, 0xb0, 0x59, 0x56, 0x38, 0xce, 0xab, 0x5a, + 0x00, 0xd1, 0x31, 0x29, 0x8a, 0x18, 0xa2, 0x97, 0xa6, 0xbd, 0x16, 0x19, + 0x63, 0x4b, 0x75, 0x90, 0xe5, 0x4f, 0x72, 0xac, 0x60, 0x21, 0x92, 0x71, + 0x5a, 0xc2, 0x68, 0x0f, 0x30, 0xa0, 0x0e, 0x84, 0x08, 0xb2, 0x1b, 0x5a, + 0x01, 0x22, 0xcf, 0xdb, 0x7b, 0xb3, 0x87, 0x12, 0x8f, 0x08, 0xa3, 0x12, + 0xfe, 0xa9, 0xc6, 0xb6, 0xbc, 0xae, 0x31, 0x59, 0x85, 0x9b, 0x51, 0x70, + 0xf4, 0x59, 0xb4, 0x42, 0xc3, 0xaf, 0xeb, 0x45, 0x19, 0x27, 0xf0, 0xab, + 0xf1, 0x4a, 0x2f, 0x6b, 0x4b, 0xa3, 0x6a, 0x3b, 0x6e, 0x58, 0x4b, 0x0c, + 0x8c, 0x4c, 0x5e, 0x71, 0x65, 0x89, 0x7d, 0x8c, 0x01, 0x7c, 0xe4, 0x1f, + 0xad, 0x61, 0x74, 0x08, 0x63, 0x83, 0x9b, 0x1b, 0x9e, 0xb2, 0xab, 0x9c, + 0x54, 0x92, 0x24, 0xcd, 0xe4, 0x67, 0x63, 0xa4, 0x96, 0x9a, 0x3b, 0x2b, + 0x98, 0xb9, 0x5a, 0x90, 0x11, 0x80, 0x85, 0x18, 0x89, 0xdb, 0xe1, 0xaa, + 0x1e, 0x88, 0x64, 0x9a, 0x77, 0x76, 0x46, 0xf4, 0x4b, 0x1b, 0x90, 0x1b, + 0x49, 0x07, 0x8a, 0x5d, 0xb4, 0x14, 0x89, 0xd0, 0xa9, 0xac, 0x26, 0x32, + 0x57, 0x69, 0x8c, 0x03, 0x5c, 0x24, 0xcc, 0xca, 0x03, 0xe8, 0x16, 0xa4, + 0xca, 0x39, 0x53, 0xa5, 0x18, 0xad, 0xfe, 0xd3, 0x02, 0xc7, 0xb3, 0xbb, + 0x62, 0x14, 0x93, 0xbe, 0x46, 0x8e, 0xd7, 0xf1, 0x92, 0xee, 0xfb, 0xae, + 0x71, 0x26, 0x8f, 0x82, 0xf4, 0x83, 0x20, 0x29, 0x45, 0x50, 0x26, 0x9b, + 0x6f, 0x1c, 0x2d, 0xc7, 0x56, 0x8e, 0xd8, 0xa9, 0x1a, 0x97, 0x8b, 0xa4, + 0x6f, 0xd3, 0x2e, 0xf2, 0x61, 0x8a, 0x15, 0xbb, 0x6d, 0xbe, 0xb4, 0x07, + 0x45, 0x68, 0xa8, 0x34, 0x65, 0x33, 0x04, 0xd0, 0x07, 0xe4, 0xe6, 0x7f, + 0x9d, 0x01, 0x20, 0x88, 0x66, 0x04, 0x5b, 0x34, 0x22, 0xb6, 0x54, 0x8d, + 0xb4, 0xb8, 0x30, 0x99, 0x74, 0xc1, 0x41, 0x93, 0x59, 0x86, 0x47, 0x35, + 0xf8, 0x51, 0x07, 0xe1, 0x91, 0x37, 0x59, 0xdc, 0x5c, 0x5f, 0x72, 0x95, + 0x0c, 0x7b, 0x29, 0x98, 0x87, 0x4a, 0x5d, 0xe7, 0x5e, 0xca, 0xbc, 0xa9, + 0xea, 0x27, 0xad, 0x78, 0x56, 0x6b, 0xb7, 0xcb, 0x87, 0x1d, 0xac, 0x16, + 0x2e, 0xc0, 0x5b, 0x0c, 0x94, 0x42, 0x15, 0x06, 0x69, 0x17, 0x36, 0x3c, + 0x58, 0xe7, 0x19, 0x7a, 0xf7, 0xba, 0x89, 0x12, 0x5c, 0xd2, 0x52, 0xb4, + 0x1f, 0x55, 0x1e, 0x79, 0x34, 0x8a, 0x39, 0xb5, 0x65, 0x60, 0xe2, 0xaa, + 0x6a, 0x85, 0x6d, 0x00, 0x82, 0x64, 0xaf, 0x82, 0x50, 0x81, 0x10, 0x51, + 0x20, 0x3c, 0xb5, 0x30, 0xf4, 0xbb, 0x1a, 0x1a, 0x87, 0x05, 0x62, 0x63, + 0x60, 0x8b, 0x72, 0x74, 0xd8, 0x90, 0xed, 0x2a, 0x13, 0x4b, 0x0b, 0xb5, + 0x2b, 0x57, 0x2c, 0x66, 0xbc, 0x3d, 0x26, 0x19, 0x01, 0x80, 0x1c, 0x2a, + 0x29, 0x73, 0xde, 0x53, 0x63, 0xcc, 0xc7, 0x77, 0x4f, 0xc2, 0x1b, 0xe0, + 0xc6, 0x64, 0x7d, 0x59, 0x47, 0x81, 0x67, 0x1e, 0xd4, 0x37, 0xdc, 0xd5, + 0xa8, 0x17, 0x55, 0xa9, 0xa0, 0xff, 0xf0, 0x52}, + // cipherTextDigest + {0x3c, 0xd0, 0xf1, 0x47, 0xc5, 0xca, 0xf0, 0x57, 0x80, 0x22, 0xa4, + 0xed, 0xfb, 0x68, 0x68, 0x11, 0x09, 0x93, 0x71, 0x31, 0x83, 0x9e, + 0x08, 0xce, 0x24, 0x73, 0xef, 0x06, 0xe2, 0x87, 0xcf, 0x01}, + // secret + {0x28, 0x81, 0x88, 0xf4, 0xa6, 0xab, 0x55, 0xd3, 0x6c, 0x97, 0xf5, + 0x8c, 0xb5, 0x8c, 0xb2, 0xcc, 0xfa, 0x7b, 0xfb, 0xef, 0xd6, 0x43, + 0x5b, 0x3f, 0x4d, 0xf4, 0xcd, 0xb0, 0x59, 0x2d, 0x59, 0xc1}, + true}, + // tcID: 43 + {43, + params_ml_kem768_test_mode, + // entropy + {0xfd, 0x5e, 0x70, 0x45, 0x70, 0xd3, 0x52, 0x78, 0xd5, 0x3e, 0xf9, + 0xfc, 0x3b, 0xaa, 0x34, 0xd3, 0xdf, 0xea, 0x09, 0x2c, 0x17, 0x09, + 0xbd, 0xfc, 0x36, 0x3b, 0x19, 0x05, 0xde, 0x4e, 0xa8, 0x40}, + // publicKey + {0x57, 0x49, 0xa6, 0x4a, 0x6b, 0x17, 0xc7, 0xc0, 0x78, 0x67, 0x22, 0x64, + 0xdb, 0xdc, 0x27, 0xda, 0xa0, 0xc6, 0x0c, 0x8a, 0x0b, 0x8f, 0x6b, 0x5f, + 0x16, 0xf3, 0xbd, 0x7d, 0x3a, 0x5d, 0x07, 0xf5, 0x65, 0xbd, 0xe7, 0x28, + 0x1e, 0xe7, 0x6e, 0x6e, 0xf7, 0x6f, 0x04, 0x25, 0x0e, 0x75, 0x17, 0x41, + 0xba, 0x90, 0x7f, 0xd9, 0x7c, 0x22, 0x20, 0x0b, 0x21, 0x1a, 0x40, 0x69, + 0x3d, 0x70, 0x0c, 0x92, 0x31, 0x3e, 0xed, 0x0a, 0x00, 0x6c, 0xc8, 0xc4, + 0xa1, 0xf4, 0x77, 0x05, 0x38, 0xa9, 0xa2, 0x66, 0x8d, 0x6b, 0xc9, 0x9a, + 0x19, 0x1b, 0xc0, 0x41, 0xc6, 0x6d, 0xd2, 0x99, 0x6d, 0xe3, 0xdb, 0x9b, + 0x02, 0x48, 0x9e, 0xdf, 0x06, 0x1f, 0xe3, 0xd1, 0xa8, 0x89, 0x4c, 0x62, + 0x95, 0xbb, 0x24, 0x68, 0xda, 0xa5, 0xca, 0x9a, 0x76, 0x0e, 0xb5, 0x11, + 0x47, 0x47, 0x13, 0x05, 0x88, 0x43, 0xd0, 0x19, 0x95, 0xbf, 0x62, 0xa4, + 0xc7, 0xab, 0xb9, 0x31, 0x13, 0x3e, 0xff, 0xe9, 0x80, 0xc4, 0x47, 0x61, + 0x18, 0xb7, 0x44, 0x2c, 0x53, 0x66, 0xa1, 0x04, 0x34, 0x1c, 0xd3, 0x10, + 0x91, 0xe0, 0xcc, 0x6d, 0x40, 0xc5, 0xcc, 0x8c, 0x1a, 0x27, 0x6c, 0x0d, + 0xd4, 0x8b, 0xac, 0xbc, 0x54, 0x98, 0x11, 0x65, 0x2a, 0x3a, 0xdc, 0xcd, + 0xed, 0x7b, 0x81, 0xc5, 0x63, 0x94, 0x97, 0xe8, 0x0d, 0xa7, 0x01, 0x7e, + 0x8f, 0x94, 0xb3, 0x49, 0xab, 0x9c, 0x6b, 0x5b, 0x90, 0x33, 0x59, 0x4f, + 0xfb, 0x2c, 0x39, 0x92, 0x86, 0x4e, 0x8b, 0xf9, 0x83, 0xf0, 0x56, 0x78, + 0x52, 0xcb, 0x77, 0x0d, 0xf2, 0x06, 0x29, 0x6a, 0x8f, 0x1c, 0x4c, 0x56, + 0x1a, 0x29, 0xab, 0x70, 0x82, 0x7a, 0x77, 0xd7, 0x24, 0x46, 0x02, 0x1d, + 0x39, 0xd9, 0xbc, 0xac, 0x57, 0x4e, 0x94, 0xdb, 0x89, 0xa2, 0xb9, 0xb8, + 0xd2, 0x3a, 0xc1, 0x44, 0x49, 0x53, 0x5d, 0x8c, 0x3d, 0xe4, 0xe2, 0x6e, + 0x3f, 0xec, 0xc6, 0x94, 0xe5, 0x45, 0x21, 0x4a, 0xc5, 0x9d, 0x46, 0x65, + 0xb2, 0x83, 0xae, 0xfc, 0xc0, 0x29, 0x03, 0x46, 0x33, 0xa7, 0xfa, 0x93, + 0xbf, 0x73, 0x8f, 0x73, 0x33, 0xa5, 0x61, 0xf9, 0x7c, 0xab, 0x82, 0x8f, + 0x87, 0x0c, 0xc9, 0xd0, 0xab, 0x94, 0xa0, 0xc7, 0xc9, 0x35, 0xba, 0x55, + 0xb8, 0x45, 0x7d, 0xe9, 0x2b, 0x2d, 0x18, 0x58, 0x09, 0x2c, 0xa2, 0x0e, + 0x17, 0xd6, 0x0b, 0x8e, 0x52, 0x05, 0x2e, 0x30, 0xb6, 0xcb, 0xd4, 0x72, + 0x44, 0x82, 0x26, 0x38, 0x32, 0x26, 0xd8, 0x17, 0x31, 0x3a, 0xdb, 0x3c, + 0x59, 0x49, 0x90, 0x99, 0x61, 0x40, 0xe5, 0xd7, 0x22, 0x6e, 0x06, 0x0e, + 0xaa, 0x51, 0x4a, 0x81, 0x29, 0x91, 0xe3, 0x29, 0x5b, 0x09, 0x49, 0xb3, + 0xaf, 0xc2, 0x72, 0x8b, 0x0c, 0xab, 0x58, 0x71, 0xb5, 0x9b, 0xb0, 0x38, + 0xbe, 0xdc, 0xc0, 0xd4, 0x58, 0xa6, 0xc3, 0x63, 0x9b, 0x7d, 0x91, 0x80, + 0x50, 0xa2, 0x7f, 0xdf, 0x68, 0x6e, 0x80, 0x19, 0xaa, 0x99, 0xf6, 0x66, + 0x33, 0x1b, 0xa4, 0x53, 0x71, 0xcc, 0xe8, 0x38, 0x79, 0x3f, 0xe0, 0x78, + 0x9a, 0x7c, 0xca, 0x21, 0x49, 0xc1, 0x10, 0xa7, 0x85, 0x58, 0xa1, 0xc8, + 0x08, 0x71, 0x7a, 0x52, 0xc5, 0x08, 0x1d, 0x51, 0x41, 0xff, 0x46, 0x3b, + 0x0a, 0x22, 0x25, 0x67, 0x34, 0xa0, 0xef, 0xe8, 0x37, 0x74, 0x05, 0x46, + 0x07, 0xe6, 0xcf, 0x23, 0x88, 0x4c, 0xaa, 0x05, 0x20, 0x95, 0x71, 0x85, + 0xa9, 0x39, 0x9c, 0x4c, 0x8a, 0xc9, 0xab, 0xc8, 0x3a, 0x75, 0xe9, 0x30, + 0x80, 0x51, 0x2e, 0x34, 0xc7, 0xb2, 0x6c, 0x2a, 0x87, 0x61, 0xb5, 0x9a, + 0xb2, 0x2a, 0xc8, 0x9a, 0xe0, 0x40, 0xce, 0x67, 0x9e, 0x9f, 0x45, 0x5f, + 0x0e, 0x89, 0x4d, 0x9e, 0xf7, 0xa4, 0x06, 0x07, 0x4f, 0x17, 0x93, 0x04, + 0xf1, 0xb2, 0x4f, 0x7c, 0x36, 0x44, 0x90, 0xf9, 0xb4, 0x58, 0xd7, 0x6f, + 0x81, 0xe9, 0x06, 0x67, 0xd8, 0x47, 0x80, 0x31, 0x97, 0xe6, 0xbb, 0xcb, + 0xc6, 0x2b, 0x6b, 0x7e, 0x61, 0x0c, 0x49, 0x11, 0x32, 0x41, 0x83, 0x76, + 0x14, 0x29, 0x5f, 0x65, 0xe9, 0x0c, 0x95, 0x79, 0x58, 0x28, 0xba, 0x66, + 0x57, 0x9c, 0xbb, 0xee, 0x11, 0x48, 0x6b, 0x72, 0x79, 0xc8, 0x73, 0xce, + 0xf3, 0xca, 0x3c, 0xb7, 0x57, 0x3e, 0x46, 0x36, 0x8a, 0xa9, 0x13, 0x72, + 0xbb, 0x59, 0x91, 0x05, 0x7b, 0x92, 0xa5, 0xa0, 0x9a, 0xea, 0xf5, 0x1e, + 0xf3, 0x57, 0x85, 0xe2, 0xd7, 0x85, 0xa9, 0xc8, 0xb9, 0x52, 0xe9, 0x99, + 0x24, 0xd1, 0x98, 0xd2, 0x60, 0x84, 0x1a, 0xa6, 0x05, 0x63, 0xcb, 0xac, + 0xab, 0xdb, 0x65, 0xa7, 0xc9, 0x63, 0x65, 0x04, 0xbe, 0xee, 0xe7, 0x27, + 0x0f, 0x84, 0x76, 0x69, 0xca, 0x4d, 0xbb, 0x98, 0x60, 0xc7, 0x82, 0xbd, + 0xf6, 0x0b, 0x17, 0x5f, 0xd8, 0x53, 0x22, 0xf2, 0x00, 0x32, 0xc2, 0x18, + 0x3e, 0xa8, 0x1e, 0x0f, 0x85, 0x3b, 0x63, 0x09, 0x5d, 0xf2, 0xf4, 0x20, + 0x79, 0x88, 0x49, 0x99, 0x76, 0x9d, 0xab, 0x0c, 0xc3, 0x80, 0x5b, 0xaf, + 0x63, 0xf4, 0xc1, 0xa5, 0x29, 0x97, 0x47, 0xf4, 0x12, 0x74, 0x35, 0x02, + 0xaa, 0xac, 0x88, 0x19, 0x6c, 0xbc, 0xa2, 0x50, 0x6b, 0xb2, 0x3b, 0x73, + 0xa1, 0x78, 0x8b, 0x01, 0x82, 0x05, 0x4b, 0x4a, 0x40, 0x23, 0x88, 0x91, + 0x04, 0x3c, 0x24, 0xc0, 0x59, 0x49, 0xc4, 0xa8, 0x3a, 0xc7, 0xf8, 0x87, + 0x45, 0xb3, 0x7b, 0x23, 0x48, 0xa0, 0xeb, 0xa5, 0x7c, 0x79, 0x15, 0x51, + 0x7e, 0x9a, 0x96, 0x75, 0x9a, 0xc0, 0x02, 0x24, 0x0a, 0xd0, 0x74, 0x7e, + 0xa7, 0xe0, 0x9e, 0x0d, 0x59, 0x84, 0xae, 0x18, 0xc7, 0x4e, 0xe1, 0x63, + 0xe7, 0x3c, 0x28, 0x0c, 0xd3, 0x3b, 0x7a, 0xd1, 0x26, 0x3b, 0x72, 0x0d, + 0xb7, 0x1c, 0x3c, 0xbd, 0x0a, 0x0d, 0xa4, 0x1a, 0xbe, 0x88, 0x29, 0x34, + 0x5e, 0xd7, 0xb7, 0x3d, 0x2b, 0x95, 0x36, 0x40, 0xca, 0xf6, 0x3a, 0x17, + 0xb8, 0x23, 0x31, 0xa1, 0x78, 0x78, 0xf6, 0x28, 0x6e, 0x56, 0x4b, 0x94, + 0x57, 0xe2, 0x2f, 0x16, 0x43, 0xa8, 0x6a, 0xf6, 0xc5, 0xef, 0x6b, 0x69, + 0xbf, 0xf5, 0x93, 0x64, 0x40, 0x60, 0x4d, 0x43, 0x27, 0xac, 0x42, 0x75, + 0x3e, 0x51, 0xac, 0x15, 0x86, 0x07, 0x41, 0x69, 0x3e, 0xc3, 0x89, 0x77, + 0x8a, 0xda, 0x74, 0xe9, 0x2c, 0x0a, 0x1a, 0x74, 0xb4, 0xb2, 0x0a, 0x10, + 0xdf, 0x28, 0x8f, 0x6e, 0x10, 0xa7, 0x83, 0x90, 0x8d, 0x5b, 0xc4, 0xa5, + 0x24, 0xc7, 0xc4, 0xa0, 0xb6, 0xb7, 0x1f, 0x01, 0x51, 0xfc, 0xf4, 0x99, + 0x4f, 0x61, 0x0b, 0x8c, 0x5a, 0xa5, 0x30, 0xab, 0xa7, 0xb9, 0x2a, 0x90, + 0xc8, 0xd6, 0x2a, 0x68, 0xd6, 0x58, 0x5b, 0x24, 0x8c, 0x57, 0x03, 0x22, + 0xde, 0xb9, 0x65, 0x33, 0x01, 0x28, 0x8d, 0x7a, 0x4a, 0x63, 0x08, 0xb9, + 0xe9, 0xc1, 0x04, 0xa9, 0xb2, 0x67, 0x7a, 0xaa, 0xb7, 0x73, 0x51, 0xa1, + 0x9f, 0x3c, 0x0e, 0xf7, 0x23, 0x23, 0x05, 0x58, 0x9a, 0x2b, 0x7b, 0x55, + 0x9c, 0xf1, 0x9a, 0xb5, 0xc4, 0xa4, 0x48, 0xd0, 0x1f, 0x84, 0x12, 0xb1, + 0x84, 0xa1, 0x77, 0x68, 0x8b, 0xbb, 0xca, 0xc6, 0xbb, 0x56, 0x61, 0x52, + 0x8f, 0xe6, 0x7b, 0x5e, 0xa6, 0x56, 0x65, 0xf0, 0xbd, 0x5d, 0x35, 0x53, + 0x52, 0xd1, 0x9e, 0x58, 0x42, 0xa6, 0xcf, 0x33, 0xbb, 0x28, 0x07, 0x53, + 0xd4, 0x69, 0x80, 0x26, 0x26, 0x83, 0x9c, 0x3a, 0x47, 0xfb, 0xcb, 0x85, + 0x61, 0x4b, 0x91, 0x7f, 0x40, 0x23, 0xc4, 0x17, 0xc7, 0x5a, 0x68, 0x89, + 0xbf, 0x4b, 0x59, 0x46, 0xe2, 0x39, 0xb0, 0x48, 0xcd, 0x10, 0xb4, 0x29, + 0xfe, 0xac, 0x70, 0xa1, 0xc2, 0x7a, 0x3a, 0x84, 0x25, 0x9f, 0xb0, 0xbe, + 0x83, 0x3c, 0x3b, 0xdc, 0xf6, 0x4f, 0x66, 0x99, 0x67, 0xe9, 0x01, 0xcb, + 0x23, 0x22, 0x58, 0xe3, 0xf3, 0xa3, 0x02, 0x9a, 0xb4, 0x48, 0xf4, 0x45, + 0xb3, 0xe1, 0x86, 0x70, 0x51, 0x78, 0xcf, 0x39, 0x1a, 0x51, 0x28, 0xb6, + 0x8a, 0xe3, 0x7c, 0x8f, 0x23, 0x69, 0x28, 0xc7, 0x58, 0x25, 0xd8, 0x8c, + 0x54, 0x8b, 0x6a, 0x26, 0x48, 0xc8, 0x72, 0x09, 0x42, 0x07, 0x79, 0x7f, + 0x2b, 0xf7, 0x5a, 0x2d, 0xc1, 0x59, 0xa3, 0x56, 0x94, 0xcd, 0xa7, 0xa1, + 0xee, 0xd5, 0xab, 0x27, 0xc4, 0x83, 0x09, 0x2c, 0x49, 0x8b, 0xb5, 0x9e, + 0xb1, 0xa2, 0x5e, 0xfc, 0xb8, 0x07, 0xeb, 0x5b, 0x71, 0xfc, 0x60, 0x2a, + 0x20, 0x04, 0x03, 0x2d, 0x45, 0x3a, 0x49, 0xc9, 0x3f, 0x66, 0xbb, 0x6b, + 0x9c, 0x8e, 0x21, 0x66, 0xb3, 0xa1, 0x6a, 0xa0, 0x18, 0x45, 0x4b, 0x67, + 0xea, 0x44, 0x36, 0x0d, 0x97, 0x12, 0xf6, 0xf9, 0xf4, 0x1d, 0x3e, 0x72, + 0xda, 0x52, 0xb0, 0xcd, 0xd8, 0x6c, 0x47, 0x65}, + // cipherTextDigest + {0x36, 0x4a, 0xa4, 0xf8, 0xa5, 0x99, 0x57, 0x86, 0x6a, 0xe3, 0x9c, + 0x4b, 0x37, 0xbe, 0xfb, 0x98, 0x5a, 0x7d, 0x59, 0xd4, 0x01, 0x30, + 0xc8, 0x2d, 0x51, 0x95, 0xf3, 0x31, 0xc5, 0x09, 0x73, 0xb6}, + // secret + {0x34, 0xc2, 0x8e, 0x6e, 0xdf, 0x26, 0x1d, 0x36, 0xde, 0x26, 0x67, + 0xe7, 0xd8, 0x08, 0x7a, 0x44, 0x82, 0x8e, 0xf6, 0x30, 0x19, 0x5f, + 0x49, 0xc1, 0x11, 0x8d, 0xfe, 0x4b, 0xd1, 0x69, 0x7f, 0x3c}, + true}, + // tcID: 44 + {44, + params_ml_kem768_test_mode, + // entropy + {0x6d, 0xc3, 0xdf, 0xae, 0x71, 0x56, 0x82, 0xf3, 0xbc, 0x56, 0x36, + 0x5c, 0xe0, 0xac, 0xdf, 0x6c, 0x7d, 0x5a, 0x9b, 0xab, 0xc4, 0xb1, + 0x96, 0xbe, 0xa2, 0x80, 0xde, 0x4f, 0x29, 0xbc, 0x1f, 0x4e}, + // publicKey + {0x0c, 0xc3, 0x12, 0x8c, 0x78, 0x05, 0xf6, 0xfa, 0x61, 0x20, 0x4a, 0xa9, + 0xd0, 0xf6, 0x43, 0x08, 0x49, 0x10, 0xcb, 0xb1, 0x99, 0x5c, 0x42, 0x30, + 0x29, 0x44, 0x99, 0x83, 0x22, 0x86, 0x28, 0xe2, 0x35, 0xb6, 0xb0, 0xc4, + 0x76, 0x77, 0x18, 0x23, 0xb6, 0x6f, 0xbd, 0x75, 0x1e, 0xe2, 0xc5, 0xb2, + 0xbe, 0x5b, 0x68, 0x00, 0xb5, 0x19, 0x80, 0xb9, 0x1f, 0x92, 0x32, 0x99, + 0x1d, 0x18, 0x52, 0xa8, 0x72, 0xcf, 0xd8, 0x73, 0xcf, 0x8c, 0x24, 0xb6, + 0xe1, 0xe7, 0x95, 0xce, 0x23, 0x26, 0x56, 0x0c, 0x4c, 0xd0, 0x47, 0xb4, + 0x79, 0xa7, 0xa7, 0xc6, 0xf9, 0x21, 0x19, 0x7b, 0x4b, 0xd6, 0x62, 0x96, + 0xfe, 0xe3, 0xcd, 0xbf, 0x79, 0x26, 0x2a, 0xfc, 0x2c, 0x33, 0x99, 0xb6, + 0x0e, 0xe1, 0x1b, 0x0a, 0xab, 0x0c, 0x80, 0x97, 0x1a, 0x4a, 0xeb, 0x52, + 0x4c, 0x91, 0xce, 0xa5, 0x33, 0xbc, 0x64, 0x28, 0xc6, 0x07, 0xa2, 0x5e, + 0xcf, 0x3a, 0xb3, 0xa9, 0xd3, 0x6c, 0x13, 0x55, 0x2b, 0xf9, 0x22, 0x16, + 0x9b, 0x52, 0xac, 0x0b, 0x59, 0x89, 0x7f, 0xd1, 0x50, 0x42, 0x68, 0x3b, + 0xb9, 0xfb, 0xb5, 0x25, 0x96, 0x11, 0x05, 0xaa, 0xaa, 0x34, 0x91, 0x16, + 0xea, 0xe3, 0x94, 0xd2, 0xb4, 0x8a, 0x74, 0xa9, 0x43, 0x7d, 0x5a, 0x57, + 0x2c, 0xe3, 0x33, 0x80, 0x99, 0x47, 0xf8, 0x4c, 0xab, 0xe4, 0x26, 0x90, + 0x68, 0x94, 0xc9, 0xde, 0xdc, 0xce, 0xaa, 0x36, 0xb7, 0x78, 0x97, 0xcc, + 0xd5, 0xc5, 0xc0, 0x97, 0xe5, 0xb2, 0x25, 0xab, 0xad, 0xc4, 0x43, 0x9e, + 0x8c, 0x31, 0x65, 0x95, 0x26, 0x3c, 0xb5, 0xb4, 0x3c, 0x52, 0xb5, 0x8c, + 0x44, 0xf8, 0x51, 0xfa, 0x45, 0x01, 0xe5, 0x9b, 0x2d, 0x09, 0x21, 0x14, + 0xf4, 0xa9, 0x96, 0x84, 0x51, 0x92, 0xf6, 0x46, 0x46, 0x3e, 0x67, 0x63, + 0xa8, 0x26, 0x6c, 0x16, 0xc4, 0x28, 0xce, 0xcc, 0xcf, 0xf3, 0xb8, 0x69, + 0x05, 0xcc, 0x34, 0x98, 0xb5, 0x96, 0x83, 0x99, 0x36, 0x73, 0xe6, 0x3c, + 0x33, 0x73, 0x0c, 0x7e, 0x87, 0x24, 0xfc, 0x75, 0xa9, 0xd6, 0x5a, 0xcc, + 0x97, 0x86, 0x87, 0x23, 0x20, 0x1d, 0xaa, 0x84, 0x4e, 0x2e, 0xd2, 0x19, + 0x34, 0xe2, 0x39, 0x02, 0x60, 0x89, 0x4a, 0xab, 0x80, 0x19, 0x06, 0x2e, + 0xf8, 0xdb, 0x63, 0xc0, 0xd9, 0x1c, 0x69, 0xc5, 0x6f, 0x3a, 0xea, 0x80, + 0xd1, 0x63, 0x79, 0x20, 0x07, 0xbb, 0x81, 0x27, 0x1e, 0x7f, 0x83, 0x97, + 0x7f, 0x87, 0x5c, 0xbc, 0x37, 0x00, 0x5a, 0xca, 0xcc, 0x03, 0x49, 0x70, + 0x68, 0x58, 0x31, 0x39, 0x1b, 0x2c, 0x9d, 0x5a, 0xbc, 0xb9, 0x96, 0x39, + 0x94, 0x99, 0x59, 0x6b, 0x60, 0x04, 0xea, 0xfb, 0x2d, 0x85, 0x81, 0x10, + 0x1f, 0x54, 0x1b, 0x08, 0x38, 0x7f, 0x30, 0xc5, 0x3e, 0x2c, 0x7b, 0xc4, + 0x1c, 0x25, 0x38, 0xa6, 0x81, 0x32, 0x67, 0x07, 0x8f, 0x04, 0x62, 0x0f, + 0x5a, 0x95, 0x73, 0xdf, 0xf0, 0xca, 0x85, 0xcb, 0x41, 0xf1, 0x13, 0xb0, + 0x42, 0x6a, 0x86, 0x3c, 0x42, 0x14, 0xb1, 0xf2, 0x86, 0x1f, 0x82, 0x36, + 0xfc, 0xeb, 0x9a, 0x46, 0x38, 0x61, 0xd6, 0xf0, 0x36, 0x7e, 0xa7, 0x0a, + 0xbe, 0x16, 0xbe, 0x83, 0x6a, 0xa5, 0xdf, 0x34, 0xb1, 0x28, 0xd7, 0xa9, + 0x0e, 0x64, 0x68, 0x4b, 0x40, 0x91, 0x23, 0x2b, 0x46, 0x27, 0x67, 0xaf, + 0xfa, 0x2a, 0x98, 0x9b, 0x90, 0x0f, 0x36, 0x6b, 0x2a, 0xb7, 0x68, 0xae, + 0x04, 0x91, 0x1f, 0xbf, 0x79, 0x6d, 0xaa, 0xd6, 0x6b, 0x1b, 0xec, 0x88, + 0x3d, 0x24, 0x51, 0x78, 0xbb, 0x42, 0xa2, 0x51, 0x76, 0x3a, 0xe5, 0x88, + 0x11, 0xd7, 0x56, 0x04, 0xb0, 0x71, 0xc7, 0xaa, 0x09, 0x25, 0xe8, 0x13, + 0x50, 0xb9, 0x3c, 0x4b, 0x04, 0x8a, 0x0e, 0xd3, 0x67, 0x66, 0xeb, 0x98, + 0x6e, 0xdb, 0x5c, 0xb4, 0xe5, 0xae, 0x01, 0x15, 0x83, 0x2d, 0x9c, 0x8e, + 0x39, 0xf2, 0x41, 0x04, 0x94, 0xcb, 0xdd, 0xc2, 0xa8, 0x9b, 0xc6, 0xab, + 0x4e, 0x9b, 0x48, 0xcc, 0x54, 0x55, 0x26, 0x7c, 0x2c, 0x86, 0xa1, 0x23, + 0xe5, 0x42, 0xc5, 0x4a, 0xc1, 0x18, 0x5e, 0xd2, 0x88, 0xa2, 0x07, 0x39, + 0x73, 0x11, 0xc4, 0xa6, 0xe7, 0xa7, 0xf5, 0xc3, 0xb3, 0x45, 0x30, 0x4c, + 0xcf, 0x90, 0x8a, 0x1d, 0x38, 0x53, 0x89, 0x09, 0xb9, 0xba, 0x39, 0xb2, + 0xae, 0x0b, 0x4a, 0x9c, 0xe6, 0x12, 0x1f, 0x5a, 0x59, 0xcf, 0xb8, 0x32, + 0xc7, 0x3c, 0x76, 0xd4, 0x6a, 0x91, 0x03, 0x66, 0x4b, 0xf6, 0x56, 0x8a, + 0x11, 0x59, 0xc1, 0x4a, 0x59, 0x5e, 0x1a, 0x64, 0x17, 0x43, 0xf6, 0x66, + 0x9e, 0x0c, 0xbb, 0x37, 0x4b, 0x7d, 0x59, 0xfa, 0x0b, 0x0d, 0x41, 0x99, + 0x75, 0x20, 0x57, 0x5b, 0xa8, 0x51, 0x95, 0xa4, 0xc9, 0xd2, 0x54, 0x09, + 0xc3, 0x38, 0x23, 0x07, 0x77, 0xab, 0xf2, 0x59, 0xa4, 0xfc, 0xf9, 0x4a, + 0xcb, 0xc1, 0x48, 0xf6, 0xc3, 0x61, 0xb8, 0x9c, 0x9c, 0x6d, 0xeb, 0x63, + 0xac, 0x52, 0x0e, 0x1c, 0x71, 0x68, 0xee, 0x9b, 0x45, 0x08, 0xc6, 0x38, + 0x59, 0x91, 0x1c, 0x15, 0xdc, 0x6b, 0x3d, 0xc0, 0x9a, 0x7f, 0xb4, 0x62, + 0x02, 0x48, 0xa2, 0xc0, 0x84, 0x43, 0x28, 0x6b, 0x1c, 0x63, 0x0a, 0x90, + 0xea, 0x39, 0x89, 0x74, 0x28, 0x03, 0x76, 0x52, 0x40, 0x6c, 0x73, 0x0c, + 0x1e, 0xd4, 0x48, 0xe5, 0x77, 0x39, 0xdc, 0x99, 0xa1, 0xa0, 0xa7, 0x0f, + 0x69, 0x72, 0x24, 0x7d, 0x47, 0x2c, 0xad, 0x05, 0x63, 0x24, 0x1a, 0xb6, + 0x28, 0x98, 0xa4, 0x1d, 0xac, 0x22, 0x52, 0xb4, 0x9e, 0x11, 0x7a, 0x1d, + 0x2c, 0xd5, 0xba, 0xd9, 0x17, 0x1c, 0x33, 0x7a, 0x13, 0x7d, 0x53, 0x75, + 0xa6, 0xd7, 0x39, 0x13, 0xf6, 0x8e, 0x7f, 0x46, 0x95, 0x04, 0x42, 0x4f, + 0xb6, 0x87, 0x7b, 0x53, 0xba, 0x00, 0x44, 0xd2, 0x04, 0xc6, 0x74, 0xcc, + 0xd0, 0xe3, 0x58, 0x85, 0x62, 0x05, 0x6a, 0x80, 0x27, 0x9a, 0x90, 0xbc, + 0xff, 0xe7, 0xad, 0x12, 0x62, 0x9a, 0xcc, 0xc9, 0xa3, 0xb7, 0x4a, 0x4e, + 0x4b, 0x97, 0x42, 0x5f, 0xd4, 0x6d, 0x76, 0xb0, 0xad, 0xe5, 0xdc, 0xa5, + 0xc3, 0xa0, 0x7a, 0x18, 0x0b, 0x2e, 0x3c, 0xdb, 0x02, 0x79, 0xf4, 0x19, + 0xdf, 0xac, 0xa2, 0x91, 0xd4, 0xc0, 0xa2, 0x8a, 0x73, 0x46, 0xac, 0x09, + 0x16, 0x83, 0x92, 0x40, 0x83, 0xc0, 0x5a, 0xa6, 0x6b, 0x20, 0xcb, 0x16, + 0xe1, 0xf8, 0x8b, 0xc4, 0x4b, 0x97, 0x6d, 0x13, 0x4e, 0x5d, 0x87, 0x0a, + 0xae, 0x59, 0xa4, 0xf5, 0xc9, 0xc4, 0xfc, 0x9a, 0x1c, 0x5f, 0xb3, 0x8b, + 0x0f, 0xc8, 0xad, 0x85, 0xb4, 0x8f, 0x5f, 0x39, 0xc9, 0xd2, 0x89, 0x38, + 0x1c, 0xc4, 0x43, 0x8b, 0x67, 0x38, 0xfe, 0xb9, 0x9b, 0x8f, 0xf7, 0x15, + 0x45, 0x66, 0x24, 0x5b, 0xf8, 0x49, 0x29, 0xb2, 0x76, 0xe0, 0xf1, 0x17, + 0x2c, 0x6a, 0x39, 0xeb, 0xd3, 0x6f, 0xb8, 0x2c, 0x64, 0xd7, 0x84, 0x10, + 0x9b, 0x6b, 0x3d, 0xe8, 0xd9, 0x16, 0xf1, 0x47, 0x12, 0x35, 0x14, 0x1d, + 0xa2, 0x23, 0x1f, 0xf2, 0x22, 0x43, 0x66, 0xd8, 0x77, 0x19, 0xe5, 0x06, + 0xa7, 0x14, 0x34, 0x3a, 0xd9, 0xba, 0x40, 0x14, 0x30, 0x19, 0x96, 0x17, + 0xda, 0x35, 0xc9, 0x6e, 0xb0, 0x96, 0x39, 0xd4, 0x86, 0xdf, 0xb3, 0xca, + 0x45, 0x8c, 0xaa, 0x56, 0xe5, 0x51, 0x07, 0x69, 0x86, 0xcc, 0x34, 0x68, + 0x5f, 0xb7, 0xc0, 0x4e, 0x47, 0x56, 0xf5, 0xd8, 0x79, 0x78, 0x58, 0x6b, + 0x65, 0x6c, 0x7f, 0x32, 0x9c, 0xcf, 0xa1, 0xd2, 0xbf, 0x2a, 0x3a, 0x7c, + 0x3c, 0xa5, 0xc5, 0x6d, 0x66, 0x2c, 0xba, 0x57, 0x01, 0x24, 0xe4, 0x09, + 0x35, 0x2b, 0x64, 0xd8, 0x9b, 0x91, 0x06, 0x92, 0xb5, 0x65, 0xc8, 0xc1, + 0x09, 0xca, 0x13, 0xe8, 0xb2, 0x35, 0xdd, 0x2a, 0x99, 0x6c, 0xe0, 0x4b, + 0xb2, 0xc0, 0xc6, 0x81, 0x7c, 0xae, 0x7a, 0xc9, 0xc9, 0x11, 0x8a, 0x56, + 0x53, 0x57, 0x2c, 0xb1, 0x0c, 0x33, 0x4e, 0x06, 0x55, 0x3b, 0x21, 0x07, + 0xe5, 0x72, 0x7c, 0x1e, 0x78, 0x35, 0x6b, 0xf8, 0x41, 0xd5, 0x2b, 0x23, + 0xee, 0xf9, 0x47, 0xde, 0x60, 0xb4, 0x7e, 0x81, 0x4f, 0x58, 0xf6, 0xa1, + 0x40, 0xa6, 0x01, 0xb7, 0x23, 0x34, 0x2f, 0xda, 0x13, 0x21, 0xc9, 0x43, + 0xe8, 0xfb, 0x34, 0xd9, 0x77, 0x46, 0xea, 0x75, 0x5a, 0x01, 0x28, 0x56, + 0x7c, 0x30, 0xc4, 0xe0, 0x33, 0x08, 0xc0, 0x4b, 0x29, 0x8e, 0xe5, 0x6a, + 0x73, 0x5c, 0x8e, 0x74, 0xf6, 0xb5, 0x6b, 0x80, 0x05, 0x5d, 0xa3, 0x09, + 0x51, 0x54, 0xf9, 0x76, 0x34, 0x6f, 0x9b, 0x3c, 0x6b, 0xd3, 0x38, 0x68, + 0x23, 0xa2, 0x21, 0x8a, 0xe8, 0x01, 0x08, 0xdb, 0x53, 0xae, 0x2a, 0x35, + 0x3e, 0xd9, 0xbe, 0x21, 0x69, 0x00, 0xd9, 0x5e}, + // cipherTextDigest + {0x46, 0xc6, 0xb8, 0xda, 0x33, 0xf5, 0xd0, 0x98, 0xb6, 0x9f, 0x6b, + 0xf0, 0x7b, 0xc3, 0xb5, 0x05, 0x41, 0x14, 0x1a, 0x16, 0xeb, 0xbe, + 0xb7, 0x63, 0x37, 0xf9, 0x09, 0x66, 0x25, 0x55, 0x1e, 0xe9}, + // secret + {0x68, 0xb2, 0x08, 0x0e, 0x96, 0xcc, 0x85, 0xdf, 0xdf, 0xd5, 0x8b, + 0x77, 0x7b, 0x1a, 0x28, 0xf7, 0x4f, 0xfe, 0xf9, 0xce, 0x8a, 0xb1, + 0xb9, 0xea, 0x01, 0x49, 0x04, 0x19, 0xa5, 0x0a, 0x3d, 0x1e}, + true}, + // tcID: 45 + {45, + params_ml_kem768_test_mode, + // entropy + {0xf9, 0x21, 0xae, 0x54, 0xe0, 0x12, 0x2c, 0xed, 0xa0, 0x43, 0xcb, + 0x37, 0x96, 0x99, 0x0f, 0x63, 0x43, 0xa7, 0x63, 0xd1, 0x92, 0x09, + 0x62, 0x43, 0x86, 0xa8, 0xf4, 0x3c, 0xd4, 0xd5, 0x7d, 0x1d}, + // publicKey + {0x58, 0x73, 0x7f, 0x23, 0xb6, 0x88, 0xd0, 0xc6, 0xa7, 0xbd, 0xb6, 0xbd, + 0x1d, 0x58, 0xae, 0xa1, 0xc1, 0x9a, 0x5e, 0x97, 0x74, 0xc4, 0x50, 0x51, + 0x7a, 0xfc, 0x7e, 0x6c, 0xc3, 0x92, 0xd5, 0x04, 0x63, 0x41, 0xa4, 0x6e, + 0x00, 0xc2, 0x18, 0xf7, 0x54, 0x96, 0x15, 0x59, 0x9b, 0x85, 0xdb, 0x99, + 0x72, 0x09, 0x26, 0xfc, 0xa0, 0x42, 0x3a, 0xd3, 0x51, 0xf8, 0x88, 0x20, + 0x68, 0x87, 0xab, 0xc5, 0xa6, 0x45, 0xcf, 0x5b, 0x1e, 0x0c, 0x11, 0x04, + 0x05, 0xc3, 0x1b, 0xfd, 0xf0, 0x31, 0x2b, 0x6a, 0x8d, 0x29, 0x46, 0xcd, + 0xac, 0xf6, 0x4f, 0x98, 0x73, 0x23, 0x84, 0x4c, 0x12, 0x36, 0x08, 0x6f, + 0x3d, 0x58, 0x3c, 0x07, 0xcc, 0x4d, 0xc8, 0x88, 0x76, 0xb9, 0xf0, 0xa6, + 0x5c, 0x73, 0x47, 0x14, 0x33, 0xb6, 0xbd, 0xa2, 0x87, 0x4f, 0xc0, 0x08, + 0x6f, 0x22, 0xc0, 0xd4, 0x5b, 0xc4, 0x1b, 0x94, 0x54, 0x1d, 0x11, 0x92, + 0xa8, 0xbb, 0x7d, 0x02, 0xe1, 0x02, 0xe1, 0xd6, 0xb7, 0x16, 0x66, 0x00, + 0x88, 0x51, 0x28, 0x78, 0x21, 0xc5, 0x46, 0x2a, 0x60, 0x08, 0x55, 0x28, + 0xdc, 0x2c, 0x9e, 0xae, 0x6c, 0xa5, 0x9a, 0x6c, 0x92, 0x53, 0x72, 0x5c, + 0x50, 0x49, 0xc1, 0xc7, 0xb2, 0x07, 0xde, 0x87, 0x01, 0xc6, 0x8b, 0xce, + 0xcf, 0xfc, 0xb7, 0xe8, 0xb4, 0xa1, 0x24, 0x58, 0x37, 0xe6, 0x7b, 0xa4, + 0x87, 0xab, 0xc7, 0x85, 0x7c, 0x0a, 0xb6, 0x45, 0x6e, 0x44, 0x8b, 0x81, + 0x1d, 0x63, 0x45, 0xd9, 0x50, 0xa1, 0xd6, 0xe6, 0xb4, 0xf3, 0x53, 0xbc, + 0xc1, 0x2c, 0x01, 0xf1, 0xf7, 0xaa, 0xf0, 0xa4, 0xb5, 0x19, 0x01, 0x93, + 0x07, 0x41, 0x30, 0x5d, 0x50, 0xaa, 0xff, 0x93, 0x18, 0x20, 0xf5, 0x30, + 0xb3, 0x23, 0x0b, 0x25, 0x7b, 0xb7, 0x23, 0xb7, 0x8f, 0x79, 0xc4, 0x5e, + 0x95, 0x17, 0x2f, 0xb8, 0xf6, 0x34, 0xdd, 0xcb, 0x37, 0x45, 0x03, 0x52, + 0x77, 0xb3, 0x61, 0x78, 0x52, 0x20, 0xc1, 0xa6, 0x4a, 0x36, 0x0b, 0x98, + 0x9c, 0x63, 0xb0, 0x07, 0xa7, 0x3d, 0xc7, 0x9b, 0x85, 0x19, 0x31, 0x92, + 0xe0, 0x00, 0x74, 0x72, 0x01, 0x1b, 0xae, 0x3b, 0x2c, 0x08, 0x32, 0xca, + 0x88, 0xe6, 0x90, 0x86, 0xe6, 0x9c, 0x44, 0x83, 0x83, 0xdd, 0x91, 0x7e, + 0x47, 0x94, 0x70, 0xa3, 0xdc, 0x0f, 0x6e, 0xd6, 0xa1, 0xbf, 0x11, 0x10, + 0x07, 0xa4, 0x0f, 0x36, 0x86, 0x96, 0x08, 0x8a, 0x3b, 0x6d, 0x45, 0x7a, + 0xf6, 0x38, 0xa0, 0xa8, 0x39, 0x7e, 0x15, 0x8b, 0xab, 0x67, 0x4a, 0x03, + 0x7d, 0xeb, 0x59, 0x68, 0x73, 0x8b, 0xd8, 0x5a, 0x1e, 0x0d, 0x76, 0x56, + 0x6c, 0xa3, 0x74, 0xbd, 0x61, 0x16, 0xd6, 0x11, 0x99, 0x6c, 0x03, 0xb9, + 0x0c, 0xa6, 0x2e, 0x1c, 0xe0, 0x3e, 0xc5, 0xb6, 0x50, 0xc8, 0xd7, 0x99, + 0xa9, 0xb6, 0x78, 0xdc, 0x6c, 0x97, 0x0d, 0xb2, 0xbc, 0xec, 0x85, 0xbc, + 0x73, 0x13, 0x6a, 0xe1, 0x0b, 0x20, 0xaf, 0x50, 0x26, 0x00, 0x4d, 0xb8, + 0x45, 0xc9, 0x3c, 0x97, 0x9b, 0xa6, 0x70, 0x1c, 0xab, 0x4b, 0x0c, 0x99, + 0xc8, 0xc6, 0x0e, 0x64, 0xf4, 0xad, 0x83, 0x60, 0xa6, 0x67, 0x98, 0x6e, + 0xba, 0xa3, 0xac, 0x65, 0xe2, 0x56, 0x41, 0x97, 0x99, 0xba, 0x1a, 0x79, + 0xe2, 0x48, 0x13, 0x93, 0xf3, 0x1c, 0x67, 0x09, 0x50, 0xa0, 0x92, 0xbd, + 0xc0, 0x2a, 0xce, 0x40, 0x93, 0x43, 0x89, 0x56, 0x85, 0x69, 0x65, 0xbd, + 0x8e, 0xac, 0x07, 0x29, 0x58, 0x60, 0x6a, 0xda, 0xae, 0x24, 0x9c, 0x91, + 0x66, 0xb9, 0x9b, 0x27, 0x62, 0x4e, 0xe1, 0x61, 0xb7, 0x4d, 0xf9, 0x42, + 0x2b, 0x87, 0x75, 0x05, 0x69, 0x8b, 0x27, 0x37, 0x7d, 0xbf, 0xb1, 0x1f, + 0xa2, 0x57, 0x2e, 0x69, 0x70, 0x4e, 0x61, 0xb7, 0x88, 0xde, 0x7b, 0xbc, + 0x86, 0x2b, 0x1d, 0x50, 0xb1, 0x19, 0x06, 0x15, 0x23, 0xc3, 0x28, 0x1a, + 0x4b, 0x0b, 0x0a, 0x88, 0x86, 0xcc, 0x89, 0x76, 0x3a, 0x86, 0xeb, 0x05, + 0x33, 0x11, 0x8b, 0x6f, 0x90, 0x83, 0xdb, 0xb8, 0xa5, 0x6f, 0x33, 0x88, + 0x0b, 0x3c, 0x42, 0x1e, 0x60, 0x54, 0x1c, 0xb2, 0x7a, 0x0a, 0x89, 0x17, + 0x78, 0x68, 0xc7, 0x65, 0x40, 0x9a, 0xe5, 0x95, 0x92, 0xa0, 0xb9, 0x5e, + 0x1f, 0x84, 0xbc, 0xb8, 0xe6, 0x63, 0xdf, 0x25, 0x60, 0x66, 0xfc, 0xc0, + 0x41, 0xc8, 0x63, 0x2a, 0x66, 0x49, 0xd0, 0xe3, 0x9b, 0x12, 0x42, 0x86, + 0x6a, 0x15, 0x9a, 0x9e, 0x71, 0x50, 0x60, 0xe7, 0xa4, 0x11, 0x85, 0x09, + 0xf2, 0xe7, 0xb9, 0x7d, 0xa5, 0x34, 0x36, 0x81, 0xbb, 0x89, 0x68, 0x67, + 0x26, 0x21, 0x0c, 0xf7, 0x45, 0x24, 0xdb, 0x68, 0x1a, 0x6e, 0x3c, 0xbe, + 0xcf, 0xb2, 0x30, 0xc3, 0x2a, 0x60, 0x74, 0x00, 0x38, 0xdc, 0x45, 0xb8, + 0x07, 0x21, 0x0d, 0x89, 0xfa, 0x67, 0x17, 0x08, 0xd0, 0x9a, 0x2b, 0x21, + 0xf9, 0xcc, 0xc4, 0x2b, 0x60, 0x00, 0x50, 0x39, 0x0e, 0xbf, 0xa3, 0x12, + 0xa3, 0x38, 0x7f, 0x74, 0xe0, 0x3b, 0x48, 0x96, 0x46, 0xd0, 0x60, 0x18, + 0xe1, 0x18, 0x2d, 0xd3, 0x72, 0xc6, 0x46, 0xf0, 0x93, 0x0d, 0x41, 0x2d, + 0x4d, 0xf4, 0x46, 0xe3, 0xe2, 0x14, 0x06, 0x39, 0x0a, 0x3e, 0x28, 0x01, + 0x70, 0x29, 0x8b, 0xd9, 0xfc, 0x17, 0xb6, 0x2b, 0x00, 0x3f, 0xb4, 0x28, + 0x6f, 0x16, 0x46, 0x4d, 0x09, 0xc1, 0x15, 0xa7, 0x86, 0xf0, 0x90, 0x13, + 0xf7, 0x72, 0xbd, 0x0e, 0x60, 0x4f, 0xe8, 0x3a, 0x59, 0x10, 0x77, 0x14, + 0x05, 0xeb, 0x91, 0xcc, 0xf7, 0x97, 0xbd, 0xec, 0xcc, 0xf0, 0x89, 0xc1, + 0xcb, 0x8c, 0xb4, 0x38, 0x82, 0x0a, 0x4e, 0x29, 0xa9, 0xd7, 0x6b, 0x3d, + 0x11, 0x08, 0x12, 0xff, 0x97, 0x26, 0xa1, 0xe3, 0x36, 0xfe, 0x70, 0x3a, + 0xa7, 0x0b, 0x61, 0x79, 0xb1, 0x90, 0xe7, 0x5b, 0x7d, 0x87, 0x99, 0xb0, + 0x7c, 0x78, 0x77, 0xa1, 0xf9, 0x37, 0xe2, 0x7b, 0x1b, 0x10, 0xfb, 0xbf, + 0xaf, 0x29, 0xc0, 0xcb, 0x44, 0x39, 0xfc, 0xf4, 0xcf, 0x03, 0x07, 0x1c, + 0xbc, 0xd3, 0x2a, 0xcc, 0x24, 0x08, 0xc8, 0x89, 0x46, 0x9e, 0x3a, 0x32, + 0x92, 0x43, 0x9f, 0x8b, 0x24, 0x70, 0xac, 0xbc, 0xa7, 0x14, 0xb9, 0xb4, + 0x2f, 0x63, 0x24, 0xab, 0x1c, 0x2c, 0xcf, 0xe1, 0x6e, 0xc5, 0x2c, 0x6d, + 0x57, 0x17, 0x5b, 0xe1, 0xa0, 0x97, 0x86, 0xd6, 0x2f, 0xe5, 0x2a, 0x50, + 0x72, 0xb6, 0x5e, 0xf7, 0x53, 0x63, 0x2a, 0x98, 0x2d, 0xe3, 0xb9, 0xaa, + 0xfe, 0x06, 0x0a, 0xdd, 0xc9, 0x55, 0x72, 0x18, 0x70, 0xde, 0x80, 0xad, + 0xb0, 0x00, 0x1f, 0x5d, 0x24, 0x42, 0xe8, 0x71, 0xa3, 0x9e, 0xf6, 0x2c, + 0x14, 0x19, 0x6f, 0x29, 0x05, 0x17, 0xff, 0xa1, 0x36, 0xdb, 0x21, 0x1a, + 0xef, 0xea, 0x36, 0x0d, 0xb9, 0xc5, 0x19, 0x96, 0x54, 0xac, 0x75, 0x90, + 0xb7, 0x58, 0x0f, 0xbd, 0x24, 0x3c, 0x84, 0x62, 0x4f, 0x04, 0xa4, 0x66, + 0x6e, 0x64, 0xcc, 0xd1, 0x3b, 0xb9, 0xd1, 0xb3, 0x44, 0xc1, 0x64, 0x60, + 0xd8, 0x50, 0x0b, 0xf9, 0xf0, 0x4b, 0xfd, 0x97, 0x8e, 0x54, 0xc1, 0xb0, + 0x1b, 0x08, 0x51, 0xb8, 0xf9, 0x41, 0xf4, 0xac, 0x57, 0x4e, 0x88, 0x32, + 0xc7, 0xf2, 0x91, 0x7a, 0x23, 0x7c, 0x6e, 0xa5, 0xc1, 0xfe, 0x1a, 0xc4, + 0x6a, 0x01, 0xc1, 0x55, 0x39, 0x10, 0x9c, 0xa2, 0x04, 0xcc, 0xc4, 0x3a, + 0x63, 0x86, 0x9a, 0x6b, 0x8a, 0x6a, 0xe9, 0x93, 0x07, 0xe5, 0xfb, 0x8a, + 0xe2, 0xcb, 0x9c, 0xc7, 0x14, 0x5f, 0x2a, 0xd6, 0x48, 0x5b, 0x09, 0x39, + 0xd9, 0xa7, 0xaa, 0xcb, 0xcb, 0x04, 0x99, 0x63, 0xba, 0x6f, 0x91, 0x53, + 0xc8, 0xb8, 0x33, 0xdb, 0xf4, 0x72, 0x3d, 0x8a, 0xaa, 0xbd, 0x30, 0x4e, + 0x7b, 0x69, 0xac, 0x50, 0x5b, 0x4b, 0xd6, 0xac, 0x6c, 0x67, 0xd9, 0xce, + 0x03, 0x1a, 0x18, 0xc5, 0x8c, 0x1d, 0x14, 0x15, 0xc1, 0xd2, 0x64, 0x30, + 0x8a, 0xb4, 0x81, 0xd2, 0xd9, 0x92, 0xb6, 0x85, 0x40, 0x44, 0x12, 0x1c, + 0x02, 0x3a, 0x16, 0x0f, 0xf1, 0x2b, 0x32, 0x89, 0xa1, 0xa6, 0x2c, 0xb3, + 0x7c, 0x04, 0xc4, 0x5b, 0x92, 0x47, 0x21, 0x57, 0xc0, 0xfd, 0xaa, 0x0c, + 0x05, 0xc6, 0x28, 0x47, 0x07, 0x3a, 0x87, 0x4c, 0xcf, 0x90, 0x8c, 0xb9, + 0x9a, 0x24, 0x33, 0xb4, 0xa9, 0x0b, 0xe6, 0x93, 0xbe, 0x57, 0x08, 0x81, + 0x46, 0x5a, 0x9a, 0x45, 0xcb, 0x9f, 0xec, 0x47, 0x89, 0xa6, 0x03, 0xc6, + 0xf4, 0x35, 0x1b, 0xec, 0xbc, 0xc2, 0xc3, 0xab, 0x56, 0x43, 0xa5, 0x3b, + 0x4a, 0xc9, 0xc4, 0x69, 0x5e, 0x86, 0x0f, 0x48, 0x16, 0x72, 0xee, 0x1e, + 0x58, 0x16, 0x25, 0xdd, 0xa8, 0x77, 0x49, 0xea, 0xe4, 0x23, 0xf8, 0x95, + 0x39, 0x24, 0x1a, 0x4c, 0xb1, 0xbe, 0xe6, 0x77}, + // cipherTextDigest + {0x4a, 0x8a, 0xef, 0xdc, 0xd8, 0x65, 0x07, 0xc8, 0x9a, 0xc8, 0x2d, + 0x8c, 0xcf, 0x50, 0x8c, 0xff, 0xc0, 0x88, 0x0e, 0xc6, 0x31, 0xa8, + 0x3a, 0x53, 0xa3, 0x0e, 0x0b, 0xdd, 0x95, 0x89, 0x13, 0x81}, + // secret + {0x06, 0xd1, 0x47, 0xad, 0xc7, 0x63, 0xc1, 0x45, 0xd9, 0xe0, 0x5c, + 0x9b, 0xb6, 0xf2, 0x25, 0x4b, 0x42, 0xa6, 0xcf, 0xd0, 0x2f, 0x24, + 0x68, 0xb1, 0x39, 0xe2, 0x1f, 0x9a, 0x19, 0xeb, 0xf4, 0x15}, + true}, + // tcID: 46 + {46, + params_ml_kem768_test_mode, + // entropy + {0xa9, 0x65, 0xcd, 0x4b, 0x05, 0x43, 0x2e, 0x20, 0xec, 0xa0, 0xc3, + 0xe8, 0x48, 0xbd, 0xfc, 0x66, 0x0b, 0xba, 0x4d, 0xea, 0xa1, 0x99, + 0x54, 0x68, 0x92, 0x8c, 0x5d, 0xcf, 0x62, 0x37, 0xd8, 0x93}, + // publicKey + {0x69, 0x9a, 0x68, 0x19, 0x1b, 0x41, 0x65, 0xf9, 0x24, 0x70, 0xe0, 0x7b, + 0x4d, 0x07, 0x8f, 0xbd, 0xb4, 0x68, 0xad, 0x06, 0x45, 0xb8, 0x78, 0x34, + 0x87, 0x8b, 0x98, 0x7f, 0xa1, 0xc0, 0xf7, 0xfb, 0x9a, 0xc1, 0x46, 0x5b, + 0x02, 0x24, 0x96, 0x5d, 0x45, 0xba, 0x36, 0xa4, 0x12, 0x85, 0xb2, 0x0d, + 0x5b, 0x74, 0x6d, 0x79, 0x29, 0x8a, 0xb3, 0x29, 0x87, 0x9e, 0x86, 0x48, + 0x04, 0x16, 0x08, 0x82, 0xdb, 0xa2, 0x21, 0x8b, 0xce, 0x58, 0x11, 0x91, + 0x40, 0xba, 0x48, 0x03, 0xd2, 0x09, 0xd9, 0x76, 0xa6, 0x06, 0x35, 0xc4, + 0x98, 0xea, 0x3e, 0x4e, 0x66, 0xb4, 0xc7, 0xc6, 0xbb, 0xf7, 0x88, 0x0e, + 0xb8, 0x25, 0x8e, 0x8d, 0xd6, 0x25, 0x5d, 0xcb, 0x14, 0x81, 0x01, 0x64, + 0x52, 0xe8, 0x80, 0xef, 0x4c, 0x57, 0xe1, 0x74, 0xc6, 0x05, 0x91, 0x72, + 0x28, 0x85, 0x36, 0x36, 0x63, 0x4f, 0xd4, 0x66, 0x80, 0xb8, 0xd8, 0x92, + 0x22, 0x05, 0x50, 0x86, 0x00, 0xbe, 0xc5, 0x15, 0x86, 0x32, 0xd4, 0x16, + 0xc3, 0x61, 0x30, 0x82, 0x63, 0x8b, 0xe2, 0x05, 0x11, 0x4b, 0x11, 0x00, + 0x2a, 0x21, 0x40, 0x2f, 0xa2, 0x1e, 0x10, 0x50, 0xaf, 0x78, 0xb9, 0x59, + 0x89, 0x95, 0x40, 0xbc, 0xf1, 0x68, 0xad, 0xc3, 0x8e, 0xe5, 0x84, 0x23, + 0xe2, 0x69, 0xc6, 0x4f, 0x5a, 0x92, 0x1d, 0xe8, 0x0e, 0x1a, 0x44, 0x4f, + 0x7d, 0xd9, 0xaa, 0x02, 0xd8, 0xb7, 0xdb, 0x89, 0xae, 0x8c, 0x3b, 0x22, + 0x8a, 0x71, 0x63, 0x7e, 0x95, 0x48, 0xa2, 0x93, 0x90, 0xd6, 0xf4, 0x28, + 0x27, 0xe2, 0xc1, 0x17, 0x49, 0x61, 0x5d, 0x73, 0xb1, 0xce, 0xcb, 0x5a, + 0xe5, 0xb0, 0x74, 0xae, 0x38, 0x7e, 0x33, 0x25, 0x50, 0x33, 0xbc, 0x20, + 0xf8, 0xe7, 0x18, 0x5b, 0x28, 0x78, 0xe1, 0xfc, 0x79, 0xe8, 0x40, 0xcc, + 0xad, 0x7a, 0x7e, 0x99, 0x15, 0x29, 0xde, 0x38, 0x99, 0x70, 0xc0, 0x30, + 0xca, 0x4a, 0x7c, 0x89, 0xda, 0x0d, 0x16, 0xb4, 0x2d, 0x6a, 0x28, 0x40, + 0x4a, 0xdc, 0x25, 0x9d, 0x4c, 0x60, 0xd7, 0x51, 0x2f, 0x04, 0x79, 0xab, + 0xef, 0x18, 0x06, 0xf2, 0x33, 0x0d, 0xab, 0x63, 0xc9, 0x55, 0x59, 0x07, + 0x54, 0x93, 0x0e, 0x65, 0x73, 0x3c, 0x78, 0xb4, 0x73, 0xc3, 0x56, 0xaa, + 0xad, 0xb0, 0x9d, 0x4b, 0x94, 0xaf, 0x73, 0x15, 0xbc, 0xaa, 0xf4, 0x2f, + 0xd3, 0x91, 0x6a, 0xfa, 0xd9, 0x5d, 0xad, 0x87, 0x73, 0x28, 0x04, 0x50, + 0x3f, 0xda, 0x6c, 0xc6, 0xa2, 0x34, 0x7b, 0x22, 0x00, 0x8d, 0x60, 0xa8, + 0x63, 0x26, 0x97, 0xb1, 0xf7, 0x9b, 0x19, 0xf7, 0xc6, 0x90, 0x90, 0x18, + 0x59, 0x1a, 0x2f, 0xa4, 0x64, 0x9e, 0xc9, 0xd6, 0x9a, 0x38, 0x86, 0x31, + 0xfb, 0x43, 0xac, 0xac, 0x97, 0xbc, 0x1c, 0xe2, 0x78, 0xbe, 0xa8, 0x8a, + 0xb2, 0xec, 0x97, 0x42, 0x3a, 0x7c, 0xa2, 0xa2, 0x68, 0x3e, 0x07, 0x22, + 0xff, 0x25, 0x49, 0x79, 0x78, 0x3f, 0x4e, 0xdb, 0xb1, 0xb0, 0x84, 0x67, + 0xdc, 0x1a, 0x4a, 0x04, 0xb0, 0x43, 0xc9, 0x80, 0x5c, 0xf7, 0x19, 0x6c, + 0x2d, 0x15, 0x3d, 0x9c, 0xfb, 0x5e, 0x1f, 0xe4, 0x06, 0xf5, 0x5b, 0xc4, + 0x63, 0x50, 0xb1, 0x62, 0xbc, 0x9a, 0xdc, 0x88, 0x88, 0x51, 0x4a, 0x14, + 0x3f, 0xa9, 0x32, 0xbe, 0x0c, 0x1d, 0x69, 0x2b, 0x40, 0xb0, 0xb5, 0x27, + 0x02, 0xe6, 0xc6, 0xdf, 0x7a, 0x8b, 0xea, 0x33, 0x25, 0x46, 0xb3, 0x40, + 0x04, 0x59, 0x3e, 0x56, 0x73, 0x63, 0x40, 0x54, 0x2b, 0x25, 0xdb, 0x4a, + 0x0a, 0x62, 0xc5, 0x2f, 0x34, 0x81, 0x69, 0x0a, 0xb5, 0x92, 0x9a, 0x6a, + 0x75, 0xd2, 0x0b, 0x64, 0x58, 0x3c, 0xb2, 0x04, 0x8f, 0xb0, 0xbc, 0x5d, + 0x05, 0xfa, 0x33, 0xa0, 0x94, 0x03, 0x0e, 0xc5, 0x3f, 0x96, 0x41, 0x45, + 0x78, 0x2a, 0x05, 0xf1, 0x06, 0x88, 0xb1, 0xfc, 0x37, 0xb0, 0x92, 0xa2, + 0x1b, 0xfc, 0xbe, 0x56, 0x83, 0xb8, 0x2f, 0x55, 0xca, 0x1e, 0x5b, 0x80, + 0x91, 0x46, 0x7a, 0xe7, 0xd7, 0x8e, 0xbc, 0xe4, 0xca, 0xde, 0xdb, 0x17, + 0x73, 0xbb, 0x01, 0xc4, 0xac, 0x1a, 0xfc, 0xfa, 0x39, 0xb8, 0x73, 0x74, + 0x2c, 0xe9, 0x25, 0x14, 0x96, 0x5b, 0x07, 0x2a, 0x1d, 0xbc, 0x89, 0x2e, + 0x48, 0xe6, 0x85, 0x5e, 0xb8, 0x9d, 0x75, 0x25, 0x0c, 0x34, 0xc0, 0x93, + 0x99, 0xc1, 0x7e, 0x56, 0x88, 0xc0, 0x14, 0x46, 0x1b, 0xab, 0xa2, 0x83, + 0x0f, 0x0b, 0x78, 0x3c, 0x48, 0x0c, 0x7b, 0xf2, 0x65, 0xf4, 0x96, 0xc8, + 0xd3, 0x10, 0x5d, 0x35, 0x76, 0x27, 0xd5, 0xc4, 0x8b, 0xda, 0x66, 0x80, + 0xe2, 0x91, 0x46, 0x9c, 0x88, 0x55, 0x2f, 0x46, 0x72, 0x92, 0xea, 0xae, + 0xde, 0x85, 0x99, 0x86, 0x84, 0x34, 0xe1, 0xf4, 0x22, 0x57, 0xc4, 0xc1, + 0x92, 0x83, 0x2d, 0x1f, 0xaa, 0x48, 0xac, 0x84, 0xb5, 0xc1, 0x02, 0x76, + 0x49, 0x99, 0x56, 0xbe, 0x1b, 0x3b, 0x57, 0x23, 0x68, 0x5b, 0x84, 0x29, + 0x42, 0x61, 0x41, 0xb4, 0x4b, 0x45, 0xaa, 0x18, 0x0f, 0x07, 0x55, 0xcc, + 0xa4, 0x4c, 0x36, 0xab, 0x8c, 0x6f, 0x18, 0x43, 0x73, 0xb1, 0xec, 0x3c, + 0xe1, 0x64, 0xad, 0x13, 0xb0, 0x10, 0x0e, 0x68, 0x4d, 0x42, 0x42, 0xbd, + 0x75, 0xe8, 0x1b, 0xe6, 0xd7, 0x27, 0x7a, 0x9b, 0xce, 0x52, 0xcb, 0x7b, + 0x77, 0x65, 0x96, 0x5e, 0xbc, 0x6f, 0x0d, 0x77, 0x39, 0x61, 0x93, 0x0c, + 0xbf, 0xb1, 0x68, 0x43, 0x91, 0x7d, 0xcf, 0x54, 0x5d, 0x9f, 0x16, 0x52, + 0x95, 0xd7, 0x06, 0xe3, 0x22, 0xa8, 0x3f, 0x78, 0x30, 0x13, 0xb9, 0xa7, + 0x2f, 0x80, 0x45, 0x70, 0xc1, 0x9f, 0x4f, 0x25, 0x0b, 0x6a, 0xd5, 0x7c, + 0x66, 0xe6, 0xb1, 0xdb, 0x9b, 0x1d, 0x8f, 0xc0, 0x16, 0x33, 0xd8, 0x38, + 0x77, 0xe2, 0xc9, 0x3b, 0xab, 0xc7, 0x04, 0x62, 0x4f, 0xf5, 0x26, 0xbe, + 0xc5, 0x93, 0x97, 0x96, 0x97, 0x1e, 0xd1, 0xd8, 0x07, 0x55, 0x6c, 0x64, + 0x5f, 0xd4, 0x38, 0x2d, 0xcc, 0xa1, 0x91, 0x28, 0xbc, 0xac, 0x18, 0x05, + 0x3f, 0x10, 0xa1, 0xe9, 0x05, 0x4f, 0xe3, 0x6c, 0x9f, 0xd5, 0xb9, 0x03, + 0x44, 0x74, 0x1d, 0xb7, 0x44, 0x78, 0xde, 0x23, 0xc7, 0x42, 0x59, 0xb9, + 0xa7, 0x4a, 0x2a, 0xa1, 0x0c, 0x78, 0x7f, 0x37, 0x86, 0xc7, 0xe7, 0xae, + 0x11, 0x67, 0x5d, 0x60, 0xb8, 0x48, 0xfc, 0x43, 0x85, 0xd2, 0x9c, 0xc5, + 0x40, 0x07, 0x32, 0xfd, 0x0a, 0x88, 0xda, 0x49, 0x8f, 0xad, 0xa3, 0x36, + 0xa8, 0x47, 0x72, 0x9d, 0x54, 0x39, 0x3f, 0x0a, 0x6b, 0x9b, 0xc7, 0x79, + 0x64, 0xd2, 0xaf, 0xdb, 0x05, 0x19, 0xbb, 0x62, 0x9d, 0x91, 0xb3, 0x33, + 0x2d, 0x80, 0xc5, 0xc2, 0x4b, 0x47, 0x17, 0x38, 0xb1, 0x74, 0xb9, 0xc4, + 0x5a, 0xac, 0x57, 0xe7, 0x97, 0x3c, 0x32, 0x17, 0xcf, 0x2e, 0xe2, 0x68, + 0x75, 0x36, 0xce, 0x00, 0x00, 0x19, 0x37, 0xd4, 0x9e, 0x4c, 0xa9, 0x5a, + 0x37, 0xa1, 0x1f, 0x8b, 0x53, 0x74, 0x5b, 0xb7, 0x17, 0x30, 0x31, 0xb1, + 0xe7, 0xf6, 0x8e, 0x6e, 0x3b, 0x5d, 0x1c, 0x82, 0x49, 0x86, 0x37, 0xb4, + 0x1b, 0xb5, 0x92, 0x96, 0xc1, 0xbe, 0x61, 0x87, 0x5c, 0x78, 0x58, 0xc6, + 0x13, 0x82, 0x6c, 0xb2, 0x75, 0x62, 0xda, 0x12, 0x77, 0x97, 0x29, 0xc3, + 0x2f, 0x72, 0x62, 0x5a, 0x45, 0x1d, 0x5a, 0xd4, 0xc2, 0xda, 0x44, 0x69, + 0x3c, 0x82, 0xa5, 0xc5, 0xd4, 0x6d, 0x03, 0xfa, 0x03, 0xce, 0x33, 0x74, + 0x7a, 0x3a, 0x57, 0xdf, 0x18, 0xaa, 0x78, 0xea, 0x9c, 0x9b, 0xc1, 0xca, + 0x82, 0x26, 0x5b, 0xb6, 0x03, 0x97, 0x6e, 0x16, 0xb9, 0x38, 0xb1, 0x43, + 0x67, 0x46, 0x5f, 0x75, 0xdc, 0x9b, 0xdf, 0xf7, 0x67, 0xe1, 0xcc, 0x91, + 0x80, 0x92, 0x84, 0x71, 0x36, 0x1e, 0x52, 0x23, 0x73, 0x25, 0x38, 0x6e, + 0x62, 0x29, 0xcc, 0xfd, 0xa2, 0x55, 0x6f, 0xa4, 0x35, 0x1c, 0x28, 0x9d, + 0x8e, 0x51, 0xc2, 0x3c, 0xf1, 0xba, 0xb7, 0x95, 0x33, 0x24, 0x56, 0x46, + 0x65, 0x70, 0x9e, 0xf0, 0x8b, 0x75, 0x0f, 0xd1, 0x05, 0xd8, 0x96, 0x84, + 0x08, 0x37, 0x2f, 0x5c, 0x2a, 0x48, 0x0d, 0x27, 0xa2, 0x41, 0x44, 0x57, + 0x54, 0x4b, 0xb1, 0x6e, 0x0c, 0x4d, 0xf0, 0x9c, 0x1e, 0x39, 0x5c, 0xa6, + 0x37, 0xb2, 0x43, 0x6f, 0x93, 0x6a, 0xd4, 0x71, 0x45, 0x26, 0x06, 0x71, + 0x19, 0x78, 0x09, 0x59, 0x9a, 0x2f, 0x86, 0xb7, 0x20, 0x66, 0x99, 0xb8, + 0x8c, 0x97, 0x89, 0x22, 0xf6, 0x56, 0x71, 0xa1, 0x5e, 0x47, 0xb0, 0x2c, + 0x73, 0xca, 0x2c, 0xdd, 0xcd, 0xa6, 0xa5, 0x03, 0xce, 0xa0, 0xbb, 0xdc, + 0x46, 0xda, 0xb5, 0xfe, 0x68, 0xde, 0xa4, 0xdf, 0x37, 0xbb, 0x31, 0x06, + 0x2c, 0x5c, 0x6a, 0x00, 0xef, 0xf5, 0x7e, 0x66}, + // cipherTextDigest + {0x39, 0x15, 0x3c, 0x85, 0xe0, 0x68, 0x7b, 0x37, 0xb6, 0xdd, 0xf2, + 0x7b, 0x70, 0xa0, 0x63, 0x1d, 0x62, 0x62, 0xf0, 0xbf, 0x4c, 0x61, + 0xd9, 0x53, 0xb6, 0xd8, 0xb0, 0x31, 0x2c, 0x0d, 0x78, 0x84}, + // secret + {0x56, 0x9d, 0x7d, 0x5e, 0x44, 0x89, 0xe4, 0x34, 0xf9, 0xb7, 0x86, + 0x76, 0xcc, 0xa8, 0x92, 0x4d, 0x93, 0xdb, 0x4d, 0x45, 0xab, 0xbe, + 0x04, 0x2b, 0x08, 0xce, 0xc3, 0x65, 0xa6, 0xf5, 0x19, 0x2e}, + true}, + // tcID: 47 + {47, + params_ml_kem768_test_mode, + // entropy + {0xe4, 0x70, 0x18, 0xbc, 0x07, 0xc9, 0x8e, 0xbb, 0x71, 0x54, 0xd8, + 0xe6, 0x6b, 0x1a, 0x1b, 0xba, 0xff, 0xd8, 0xe1, 0xc3, 0xe0, 0x61, + 0x8d, 0xe8, 0x48, 0x70, 0x60, 0xb8, 0x99, 0xe8, 0x26, 0x50}, + // publicKey + {0xab, 0x8c, 0x61, 0x13, 0x22, 0xb8, 0xc8, 0x5c, 0x78, 0xac, 0x49, 0x75, + 0x47, 0x36, 0x64, 0x8a, 0x3c, 0x2f, 0xb7, 0x1c, 0x87, 0xa0, 0xb5, 0x79, + 0x31, 0xc3, 0x23, 0x6e, 0x64, 0x15, 0xf4, 0x31, 0x6e, 0x7d, 0x22, 0xcc, + 0xf3, 0xfc, 0xb0, 0x63, 0xa0, 0x49, 0x6e, 0xdb, 0xb2, 0x3b, 0x64, 0xb0, + 0x04, 0xa4, 0x13, 0x00, 0xac, 0x1c, 0x26, 0x73, 0x3d, 0xfa, 0x86, 0x87, + 0x8d, 0x46, 0x77, 0xac, 0xd3, 0x06, 0x0c, 0x51, 0x5e, 0xc2, 0xb7, 0xa7, + 0x37, 0x28, 0x02, 0xe3, 0xf8, 0x98, 0xf2, 0x88, 0x12, 0x38, 0xec, 0x36, + 0xcb, 0x64, 0x15, 0x1b, 0x55, 0x0a, 0x56, 0x91, 0x65, 0x25, 0xf7, 0x6f, + 0x0b, 0x3b, 0x58, 0x8b, 0xa4, 0x8d, 0xb3, 0x91, 0xac, 0xfe, 0x59, 0x67, + 0xff, 0xd0, 0xad, 0x08, 0xe0, 0x16, 0xa4, 0x28, 0x73, 0x2f, 0x60, 0xa1, + 0xfc, 0x13, 0x08, 0x3f, 0x08, 0x75, 0xbb, 0xc8, 0x7e, 0x8f, 0x83, 0x32, + 0xac, 0x87, 0x84, 0xc5, 0x60, 0x2e, 0x10, 0xe4, 0x24, 0x0c, 0x34, 0x82, + 0xe4, 0xe1, 0x0c, 0xd4, 0xc2, 0x1b, 0x5e, 0x64, 0x16, 0x78, 0x70, 0x90, + 0x8f, 0x51, 0x0f, 0xd5, 0xa8, 0x28, 0xa8, 0xcb, 0x97, 0xc0, 0x15, 0x03, + 0x51, 0xd1, 0x24, 0xc4, 0x2a, 0x11, 0xb8, 0x00, 0x07, 0x5d, 0x78, 0x6c, + 0x2d, 0x92, 0x2c, 0xda, 0xa2, 0x34, 0x22, 0xc6, 0x92, 0x03, 0x0b, 0x4b, + 0xf5, 0x8a, 0x07, 0x3d, 0xd3, 0x56, 0x37, 0xf2, 0x67, 0xb6, 0xf8, 0x29, + 0xe6, 0xec, 0x44, 0x27, 0xd5, 0xac, 0xe5, 0x69, 0x55, 0x3a, 0x97, 0x18, + 0xdd, 0x93, 0xaa, 0x47, 0xf3, 0xca, 0xa4, 0xfa, 0xa2, 0xf1, 0x30, 0xcc, + 0xc2, 0xd6, 0x28, 0x9c, 0xc9, 0x04, 0x11, 0x3b, 0x54, 0x30, 0x17, 0x8b, + 0x64, 0x15, 0x61, 0xbe, 0x46, 0x63, 0x2b, 0x97, 0xcc, 0x2f, 0x40, 0x7e, + 0x17, 0xd7, 0x2d, 0xba, 0xd4, 0x0a, 0xd6, 0x47, 0xcb, 0x04, 0x3c, 0x60, + 0x37, 0x12, 0x41, 0xde, 0x8c, 0x57, 0xb0, 0x4b, 0x54, 0x17, 0x85, 0xcf, + 0x00, 0xfb, 0x53, 0x31, 0x79, 0xaa, 0x17, 0xa6, 0xaf, 0x1e, 0xfa, 0xcc, + 0x5f, 0x55, 0x63, 0x46, 0x63, 0xbc, 0x31, 0xfb, 0xba, 0xfe, 0x8c, 0x87, + 0x1b, 0xa2, 0x3a, 0x67, 0x59, 0xbd, 0xea, 0xcc, 0x94, 0x7e, 0x20, 0x78, + 0x62, 0x32, 0x47, 0x07, 0x08, 0xb6, 0xcb, 0x1b, 0xcf, 0x02, 0xe7, 0xce, + 0xfb, 0x8c, 0x9b, 0x25, 0x41, 0x55, 0x4d, 0xc1, 0x8e, 0x3d, 0x26, 0x44, + 0x75, 0x86, 0xc7, 0x0d, 0xd4, 0xcb, 0x19, 0x16, 0x6e, 0x13, 0x48, 0x6f, + 0xf1, 0x1c, 0x37, 0xee, 0x5a, 0x77, 0x9d, 0x0c, 0x95, 0xf4, 0xbc, 0x38, + 0xc3, 0x6c, 0x23, 0x7b, 0x13, 0x82, 0x24, 0xe5, 0x7b, 0x68, 0xb1, 0x90, + 0x87, 0x87, 0x92, 0x5a, 0xba, 0xc8, 0xf8, 0xa2, 0x10, 0xe8, 0x05, 0x42, + 0xbf, 0x77, 0x5b, 0x6b, 0xf6, 0x68, 0x36, 0xfb, 0x01, 0xf4, 0xc6, 0x00, + 0x41, 0xe9, 0xc5, 0x62, 0x28, 0x2a, 0xe6, 0xc4, 0x98, 0x81, 0x08, 0x7c, + 0x17, 0x85, 0x68, 0xfc, 0x04, 0x13, 0x34, 0x62, 0xa9, 0x8f, 0x30, 0x3e, + 0x61, 0xe5, 0x9e, 0x16, 0xd0, 0xa7, 0x98, 0x91, 0x2f, 0x9c, 0x36, 0x16, + 0xd2, 0xf8, 0x91, 0x8a, 0x05, 0xbe, 0xd9, 0xca, 0x0a, 0xd3, 0x75, 0x56, + 0xfe, 0x23, 0x49, 0x3f, 0xe7, 0xa4, 0xb3, 0xec, 0x71, 0x6c, 0xb6, 0xcb, + 0x6f, 0x88, 0xad, 0x58, 0xd4, 0x3e, 0x77, 0xac, 0xa9, 0x4a, 0x6c, 0x70, + 0xad, 0x87, 0xcc, 0x62, 0xf3, 0x60, 0xcd, 0xd5, 0xa4, 0x39, 0xf5, 0xb2, + 0xd5, 0x36, 0x0b, 0xfe, 0x81, 0x00, 0xd5, 0x08, 0x9c, 0xed, 0x32, 0x4d, + 0x7b, 0xac, 0xa3, 0x6c, 0xf5, 0x78, 0x03, 0xc2, 0x68, 0x88, 0xe3, 0x66, + 0x6b, 0x52, 0x6b, 0x45, 0x55, 0x9c, 0x4f, 0xb7, 0x61, 0x80, 0x22, 0x66, + 0x3b, 0x7a, 0x07, 0xf2, 0x5a, 0x4e, 0x67, 0xa8, 0xc2, 0x4f, 0x96, 0x3a, + 0xbf, 0x66, 0x9b, 0x84, 0xe3, 0x3f, 0x42, 0xa3, 0x95, 0x23, 0x08, 0x45, + 0xbc, 0x39, 0xb1, 0x4a, 0x78, 0x74, 0xfb, 0xc1, 0x42, 0x8d, 0x45, 0x0e, + 0x2e, 0x56, 0x09, 0x89, 0xd9, 0x7f, 0x1a, 0xba, 0x3e, 0x88, 0xc2, 0x04, + 0xdb, 0x27, 0x32, 0xb1, 0x8c, 0xa9, 0xfb, 0x22, 0x16, 0xe0, 0xf1, 0x26, + 0x2e, 0x03, 0xca, 0x23, 0x1c, 0x19, 0xcd, 0xc4, 0x00, 0xde, 0x90, 0x2b, + 0x0c, 0xc7, 0x2a, 0xbc, 0xb5, 0x54, 0x23, 0x1a, 0xa3, 0x61, 0xe6, 0xab, + 0xca, 0x59, 0x23, 0xc1, 0xd1, 0x0d, 0x1d, 0xd3, 0x00, 0x47, 0x56, 0xa0, + 0x57, 0x11, 0x50, 0x4a, 0x5b, 0xae, 0x2c, 0x13, 0x8e, 0x4f, 0xda, 0x43, + 0xa2, 0xfc, 0x17, 0x14, 0xea, 0x1c, 0x87, 0xda, 0x4d, 0xac, 0x0a, 0x56, + 0x49, 0x2b, 0x92, 0x96, 0x81, 0xaa, 0x78, 0xcb, 0x0d, 0xb0, 0x10, 0x34, + 0xc7, 0x30, 0x16, 0xb6, 0x01, 0x14, 0xc0, 0xd4, 0x81, 0x51, 0xe3, 0x2c, + 0x26, 0x92, 0xad, 0x32, 0x58, 0x84, 0x0f, 0x01, 0x59, 0xf7, 0xc8, 0x30, + 0x55, 0x62, 0x33, 0x47, 0x56, 0x8c, 0xcd, 0xf3, 0x84, 0x97, 0x44, 0x03, + 0x36, 0x4a, 0x03, 0x49, 0x32, 0xac, 0xb7, 0x97, 0xb2, 0x0c, 0x19, 0x14, + 0xf2, 0x4a, 0xbd, 0xd0, 0xcc, 0xc3, 0xd3, 0x41, 0x55, 0xe4, 0x22, 0xbd, + 0xc7, 0x47, 0x72, 0xb7, 0x1a, 0x5e, 0x91, 0x7a, 0x79, 0xbf, 0x21, 0x6c, + 0x71, 0x0b, 0x59, 0x6f, 0xbb, 0x88, 0xec, 0x3a, 0x1d, 0x32, 0xf5, 0xb5, + 0x91, 0x30, 0x35, 0xcc, 0x94, 0x06, 0x44, 0x37, 0x8a, 0xa7, 0xa5, 0x10, + 0x2a, 0x98, 0x25, 0xdd, 0xd1, 0xab, 0xd5, 0x78, 0x71, 0x4a, 0xe4, 0x63, + 0xe6, 0xb0, 0xb6, 0xb3, 0x60, 0x9e, 0xf0, 0x70, 0xa5, 0x58, 0x08, 0x8b, + 0x1a, 0x89, 0x35, 0xb8, 0xd2, 0x4d, 0x91, 0xd9, 0x71, 0xca, 0x50, 0x65, + 0x7c, 0x55, 0x8c, 0x6e, 0xb2, 0x8b, 0x21, 0x5b, 0xaf, 0x36, 0x47, 0xc7, + 0xc7, 0x99, 0x5e, 0xbd, 0xd4, 0x27, 0xb9, 0xc3, 0xc9, 0xe5, 0x71, 0x6a, + 0xeb, 0x8c, 0x64, 0x55, 0xa1, 0x0a, 0x03, 0x98, 0xcb, 0x04, 0x59, 0x72, + 0xe7, 0xd1, 0x0a, 0x2b, 0x69, 0xb6, 0x0d, 0x84, 0x15, 0x0b, 0x47, 0x76, + 0xc7, 0x56, 0x22, 0x0d, 0x70, 0xb0, 0xac, 0x20, 0x7b, 0x84, 0x73, 0x7f, + 0x44, 0xfc, 0x1f, 0xa9, 0x70, 0x86, 0x66, 0x2c, 0x44, 0xe1, 0xeb, 0x80, + 0x13, 0x2c, 0x52, 0x1d, 0xe2, 0xcc, 0x42, 0xc7, 0x22, 0xf0, 0x77, 0x01, + 0xab, 0x89, 0xcc, 0x25, 0xc5, 0x30, 0xec, 0x47, 0x72, 0x91, 0xe4, 0x4f, + 0xc9, 0xcc, 0xb7, 0x5d, 0x02, 0x78, 0x40, 0x22, 0x9a, 0x9c, 0x97, 0x18, + 0xec, 0xf9, 0x7b, 0xa0, 0x40, 0xb6, 0xaf, 0x5c, 0x27, 0xf0, 0x2c, 0x86, + 0x3d, 0x16, 0x3a, 0x25, 0xb7, 0x1c, 0x35, 0x44, 0x60, 0x8a, 0x78, 0x5b, + 0x22, 0xb2, 0x1e, 0x56, 0x09, 0x25, 0x62, 0xc6, 0x7b, 0x27, 0x5c, 0x88, + 0x26, 0x03, 0x1f, 0xdf, 0x43, 0x4b, 0x37, 0x98, 0x38, 0x74, 0x99, 0x38, + 0x36, 0xba, 0x79, 0x58, 0x55, 0xb7, 0x13, 0xb5, 0xc4, 0xfa, 0x06, 0xcf, + 0x54, 0x3b, 0x70, 0xfd, 0x2a, 0x2d, 0x0e, 0x94, 0x2e, 0x72, 0xa3, 0x47, + 0x76, 0xda, 0xbd, 0xd4, 0xe7, 0xc3, 0x82, 0x8c, 0x21, 0xe0, 0x9c, 0xce, + 0xf5, 0x23, 0x73, 0xf5, 0x7b, 0x94, 0x16, 0xd4, 0x1a, 0x98, 0x7c, 0xa1, + 0x1f, 0xb6, 0x71, 0x5f, 0xd4, 0x5c, 0x2f, 0xe9, 0xab, 0x41, 0x6c, 0x39, + 0x00, 0xa1, 0x0f, 0xde, 0x3a, 0x12, 0xda, 0xf6, 0xbb, 0x3a, 0x39, 0x9a, + 0x94, 0x63, 0xbc, 0x94, 0x45, 0x91, 0x41, 0xb8, 0x8e, 0x28, 0x24, 0x85, + 0x22, 0x0a, 0xbe, 0x52, 0xb8, 0x51, 0x58, 0x8b, 0x7f, 0xb1, 0x1a, 0x9c, + 0xf6, 0x23, 0x10, 0x6d, 0xb9, 0xc1, 0xf1, 0x77, 0x65, 0x6c, 0x29, 0x3f, + 0x85, 0xf9, 0x59, 0xf6, 0x79, 0x88, 0xc5, 0x56, 0x80, 0x01, 0x87, 0x2b, + 0xff, 0x54, 0x99, 0xb1, 0x86, 0xae, 0x10, 0x10, 0x0d, 0xad, 0x9a, 0x5f, + 0x48, 0xa7, 0x11, 0x86, 0x67, 0x3a, 0x41, 0xd7, 0x0e, 0xf2, 0xb2, 0x47, + 0xf6, 0x78, 0xc7, 0x32, 0x72, 0x7b, 0xd2, 0xf0, 0xb8, 0x5c, 0xa3, 0x63, + 0xa6, 0xda, 0x31, 0x37, 0x17, 0x3f, 0x0d, 0xd9, 0x31, 0x02, 0xe3, 0xc0, + 0x61, 0x63, 0x05, 0x4f, 0xd2, 0x6e, 0x81, 0x42, 0x13, 0x5f, 0x92, 0x65, + 0x60, 0x82, 0x74, 0x5f, 0xcc, 0x58, 0xa6, 0x80, 0x2d, 0xfc, 0x3b, 0xb1, + 0x36, 0x06, 0xd0, 0xc4, 0x66, 0xad, 0xaa, 0xf6, 0x53, 0xf2, 0x19, 0x9e, + 0xf3, 0x68, 0xa9, 0xd2, 0xa7, 0xa7, 0x46, 0x08, 0x9d, 0xf2, 0x98, 0x29, + 0x49, 0x03, 0x09, 0x07, 0xd2, 0x72, 0x02, 0xfe, 0xe9, 0xe8, 0x80, 0xcc, + 0x75, 0x51, 0x20, 0x28, 0xf8, 0x1d, 0xea, 0xd7, 0x1a, 0x2e, 0x1d, 0xa9, + 0x57, 0x77, 0x82, 0x8d, 0x6e, 0x7c, 0x2e, 0x14}, + // cipherTextDigest + {0x8d, 0x6a, 0x1b, 0x2a, 0x88, 0xf7, 0x58, 0xee, 0x5c, 0x25, 0x7b, + 0x47, 0x4d, 0x03, 0xee, 0x20, 0xb7, 0x4c, 0x85, 0x1d, 0x8f, 0x12, + 0x45, 0x69, 0x95, 0xa6, 0x2c, 0x52, 0xa3, 0xfd, 0x49, 0x23}, + // secret + {0x84, 0x6e, 0xd2, 0x7d, 0x94, 0x66, 0x3e, 0x20, 0x82, 0x7f, 0x27, + 0xc0, 0x8a, 0x2e, 0xcd, 0xfe, 0x72, 0xb9, 0x7c, 0xfc, 0x18, 0x40, + 0xec, 0x79, 0xc0, 0x4b, 0x7e, 0x7e, 0x54, 0xcd, 0xa1, 0x1e}, + true}, + // tcID: 48 + {48, + params_ml_kem768_test_mode, + // entropy + {0x0c, 0x6f, 0xd9, 0xfd, 0x11, 0x21, 0xf5, 0xf9, 0x57, 0xf9, 0xdf, + 0x88, 0x10, 0xc7, 0xaf, 0x1b, 0x44, 0xe0, 0xff, 0x06, 0x86, 0x7b, + 0x7f, 0xb8, 0xb5, 0x70, 0xea, 0x54, 0x3b, 0xa7, 0x93, 0x8a}, + // publicKey + {0x45, 0xc4, 0xc2, 0x37, 0x71, 0xbe, 0x5e, 0x05, 0x3d, 0x9d, 0x59, 0x35, + 0x0d, 0x86, 0xaf, 0x19, 0x40, 0x94, 0x8a, 0x8c, 0xc5, 0x83, 0xa6, 0x10, + 0x99, 0x66, 0x8e, 0xb7, 0x75, 0x56, 0xd1, 0x42, 0xa6, 0x1a, 0xd2, 0x32, + 0x66, 0x49, 0x7c, 0x6d, 0x96, 0x47, 0x27, 0xec, 0xa5, 0x0b, 0x3b, 0x43, + 0x21, 0xf6, 0x4e, 0x73, 0xbc, 0x8a, 0xb0, 0x96, 0x78, 0xe1, 0x93, 0xa7, + 0x56, 0x70, 0xc1, 0x9c, 0x11, 0x36, 0xd3, 0xa4, 0x8f, 0x14, 0x53, 0x25, + 0x62, 0x9c, 0x8e, 0xce, 0x8b, 0x1d, 0x9a, 0xe0, 0x87, 0x49, 0xf5, 0x7e, + 0x09, 0x3a, 0xa0, 0xed, 0xcc, 0x58, 0x4d, 0xe1, 0x03, 0xf6, 0xb3, 0x8a, + 0x6d, 0xf7, 0x33, 0xac, 0x9a, 0x4f, 0xde, 0xd7, 0x53, 0x88, 0xa9, 0xa2, + 0xb4, 0xa2, 0x2f, 0x8b, 0x21, 0x52, 0x86, 0x43, 0x04, 0x63, 0x96, 0x8a, + 0x1f, 0xd3, 0x17, 0x92, 0xda, 0x68, 0x38, 0x97, 0x21, 0x1f, 0x47, 0x45, + 0x7d, 0xb9, 0x1d, 0xa6, 0x50, 0x82, 0x6e, 0x75, 0x06, 0xc0, 0x2c, 0xc8, + 0xab, 0x10, 0x04, 0x4f, 0xec, 0x31, 0xb2, 0xb5, 0x2d, 0x22, 0xa7, 0x05, + 0xcf, 0xd4, 0x0e, 0x30, 0x8b, 0x26, 0x43, 0xa4, 0x27, 0xf0, 0x80, 0x33, + 0xa0, 0x35, 0x0d, 0xe5, 0x00, 0x65, 0xb5, 0xc3, 0x95, 0xdc, 0x18, 0x08, + 0x2a, 0x94, 0xce, 0xda, 0x71, 0x69, 0xf9, 0x95, 0x7d, 0x32, 0xf8, 0x6e, + 0x78, 0x40, 0x96, 0x2e, 0x22, 0xbf, 0x36, 0x72, 0x4c, 0x39, 0x43, 0xc3, + 0xfe, 0xf9, 0x23, 0x65, 0xd1, 0x8a, 0xb9, 0x95, 0x7f, 0xf4, 0x68, 0x03, + 0xd5, 0x18, 0x0f, 0xdd, 0x73, 0xb1, 0x9d, 0x7a, 0x18, 0x8c, 0xb3, 0x06, + 0xf8, 0x1b, 0x70, 0x87, 0x22, 0x75, 0x82, 0x28, 0x9e, 0x6d, 0xf2, 0xc4, + 0x7a, 0x4a, 0x5d, 0xc8, 0x00, 0xad, 0x0f, 0xab, 0x3b, 0xa2, 0x2b, 0x5d, + 0xf4, 0xa4, 0xca, 0xb0, 0x93, 0x21, 0x06, 0x99, 0x53, 0x48, 0x89, 0xb4, + 0x78, 0xf9, 0x7f, 0xb9, 0x98, 0x8e, 0x39, 0x5b, 0x8a, 0x03, 0x06, 0xaa, + 0x88, 0x0a, 0x2a, 0x20, 0x41, 0x2a, 0x39, 0xa3, 0xa2, 0x5f, 0x10, 0xc5, + 0xfd, 0x97, 0x33, 0x68, 0x52, 0x7b, 0xca, 0x27, 0x17, 0x6b, 0x41, 0xaa, + 0x73, 0x9c, 0xba, 0xe5, 0x8a, 0x9d, 0x08, 0x50, 0x13, 0x28, 0x97, 0x2a, + 0x66, 0x5a, 0x17, 0x60, 0x78, 0x09, 0x7b, 0x30, 0x39, 0x4e, 0xe1, 0x25, + 0xb0, 0xac, 0x1e, 0x9c, 0x65, 0x05, 0xc4, 0x87, 0x4e, 0x7a, 0xa4, 0x16, + 0x71, 0xe6, 0x42, 0xeb, 0xd5, 0x68, 0xc0, 0x94, 0x3f, 0x00, 0xbc, 0x25, + 0xd7, 0x66, 0xbc, 0x00, 0x0c, 0x21, 0x4f, 0xcb, 0x5f, 0x59, 0x68, 0x32, + 0xc3, 0x52, 0x8f, 0x1e, 0x00, 0x49, 0x26, 0x12, 0x08, 0x07, 0xc5, 0x4e, + 0x73, 0x25, 0x32, 0x7f, 0x82, 0x0a, 0xa8, 0xe7, 0x24, 0xd6, 0xf0, 0x7a, + 0xba, 0x21, 0x12, 0x4c, 0xfb, 0x3c, 0xfa, 0x8a, 0x7b, 0xa7, 0xaa, 0x2a, + 0x17, 0x10, 0x36, 0xc8, 0xe1, 0x56, 0xee, 0xf5, 0xc0, 0xd2, 0x82, 0x0f, + 0x18, 0xc7, 0xc9, 0x7d, 0x3b, 0x7e, 0x68, 0x48, 0x07, 0x63, 0xe9, 0x87, + 0xf9, 0xb3, 0x19, 0x04, 0xc8, 0xc0, 0x3f, 0xd2, 0x0c, 0x41, 0x2c, 0x51, + 0xb5, 0xa7, 0xbd, 0xb0, 0xb3, 0xce, 0x84, 0x19, 0x2f, 0x0d, 0xfc, 0x40, + 0xe5, 0x7c, 0xba, 0xc3, 0x85, 0x3a, 0xdc, 0x01, 0x5f, 0x4d, 0x3b, 0x3e, + 0x6a, 0xb1, 0x10, 0xe5, 0x3a, 0x6b, 0xad, 0xe9, 0x62, 0x41, 0xd0, 0x80, + 0x14, 0x11, 0x5d, 0x12, 0xd1, 0x36, 0x22, 0x83, 0x51, 0x51, 0x8b, 0x9e, + 0xd0, 0xca, 0x83, 0xcb, 0x74, 0x0c, 0x5b, 0xd1, 0x45, 0xbe, 0x09, 0x16, + 0xb0, 0x78, 0x72, 0xe0, 0x96, 0x17, 0xe4, 0xd2, 0x21, 0xcb, 0xd8, 0xb8, + 0x51, 0x80, 0xb6, 0x66, 0x6b, 0xb5, 0x52, 0x60, 0x3b, 0x22, 0xa0, 0x74, + 0xba, 0xf5, 0xc9, 0x3c, 0x73, 0x93, 0xd8, 0x01, 0x4a, 0x36, 0xa7, 0x57, + 0xb7, 0xd6, 0x0f, 0xb5, 0xc6, 0x12, 0x8d, 0x53, 0x76, 0x99, 0xac, 0x8e, + 0xe4, 0xf8, 0x75, 0xea, 0x09, 0x72, 0xdc, 0x5b, 0xb4, 0x6e, 0xd3, 0x9f, + 0x5d, 0x35, 0x18, 0x37, 0xbc, 0x91, 0x00, 0x26, 0x18, 0x2e, 0x91, 0x50, + 0xea, 0xfa, 0x7f, 0x00, 0x41, 0x8d, 0x6f, 0x4a, 0x9a, 0x4e, 0xa5, 0x22, + 0x2a, 0x98, 0x66, 0x94, 0x79, 0x8c, 0x04, 0x0a, 0xbe, 0x8a, 0x89, 0x30, + 0x28, 0x10, 0x3b, 0x2b, 0x37, 0xc0, 0x28, 0xdc, 0x61, 0x8e, 0x30, 0x05, + 0xc1, 0x2b, 0xab, 0xe6, 0xb3, 0x92, 0x56, 0xa3, 0x0f, 0x80, 0x7c, 0x85, + 0xc3, 0x8c, 0x28, 0x07, 0x65, 0xa7, 0xa1, 0xbb, 0x1d, 0x11, 0x01, 0x37, + 0xaf, 0x1b, 0x18, 0xc3, 0x16, 0x6a, 0x9d, 0xba, 0x2d, 0x4e, 0xa1, 0x8f, + 0xc9, 0x74, 0xcd, 0x51, 0xd2, 0x17, 0x74, 0xba, 0x51, 0x42, 0xba, 0x1d, + 0xbb, 0xf9, 0x7d, 0x1d, 0x84, 0x2c, 0x96, 0xdc, 0x87, 0x75, 0xe3, 0x40, + 0x03, 0xe3, 0xbc, 0x89, 0x35, 0x0d, 0x2e, 0xac, 0x93, 0xdc, 0x25, 0x59, + 0x42, 0x2a, 0x9c, 0x88, 0x94, 0x47, 0x02, 0x17, 0x0a, 0xec, 0xd7, 0xca, + 0x6e, 0x90, 0xa4, 0x13, 0x44, 0x4f, 0x09, 0x31, 0x33, 0x03, 0x14, 0x79, + 0x70, 0xf5, 0x38, 0x22, 0xb3, 0x5c, 0x17, 0xe8, 0xbe, 0xda, 0x36, 0x17, + 0x30, 0xc5, 0x20, 0x13, 0xec, 0x2d, 0x6e, 0x47, 0xa5, 0x9d, 0x78, 0x41, + 0xeb, 0x45, 0x82, 0x44, 0xa2, 0x79, 0x03, 0x41, 0x4a, 0xc1, 0x09, 0x97, + 0xb2, 0x70, 0x76, 0xa6, 0xcb, 0xc5, 0x05, 0xa2, 0x7d, 0x45, 0x43, 0x80, + 0x2f, 0x93, 0x11, 0x61, 0xfa, 0x22, 0xa1, 0x3c, 0x1d, 0x1f, 0xf3, 0x62, + 0xa2, 0x92, 0x9a, 0x95, 0x2b, 0x5c, 0x0c, 0x16, 0x68, 0x2e, 0xb6, 0xcb, + 0xaa, 0x3b, 0x2a, 0x0c, 0xd6, 0x31, 0x62, 0x07, 0xa9, 0xdf, 0xba, 0x95, + 0x7e, 0xca, 0x4a, 0x5b, 0x9c, 0xaf, 0xd4, 0xcb, 0xb1, 0xd6, 0xeb, 0x88, + 0xbb, 0x9a, 0x8a, 0x74, 0x54, 0x43, 0x2d, 0x86, 0x6e, 0xec, 0x0a, 0x82, + 0x29, 0x80, 0xc2, 0xcc, 0x38, 0x3b, 0x61, 0xd7, 0x94, 0x0e, 0x81, 0x9c, + 0x42, 0xd6, 0x63, 0xfe, 0xab, 0x48, 0x47, 0xc0, 0x96, 0x63, 0x42, 0x4d, + 0x3e, 0x29, 0x0c, 0x28, 0xa7, 0x93, 0x4e, 0x0c, 0xb6, 0x71, 0x95, 0x38, + 0xf4, 0xa9, 0x15, 0xfe, 0x48, 0x24, 0x5f, 0xca, 0x46, 0xf7, 0x47, 0x63, + 0x9d, 0x17, 0x69, 0x1e, 0xeb, 0xc4, 0x1c, 0xeb, 0x75, 0x8e, 0xc2, 0x41, + 0x56, 0xe1, 0xae, 0x93, 0x50, 0x9e, 0x0f, 0x95, 0x94, 0x0b, 0xc0, 0x25, + 0xbe, 0xf3, 0x48, 0x85, 0x34, 0x34, 0x00, 0xec, 0x26, 0x04, 0xec, 0x16, + 0x65, 0x71, 0x98, 0xce, 0x42, 0x81, 0x17, 0x88, 0x1a, 0x37, 0xc8, 0x16, + 0xbd, 0x38, 0x40, 0x5d, 0x5a, 0x34, 0xec, 0xf2, 0xcb, 0x1e, 0x5c, 0x7a, + 0x83, 0x00, 0x2a, 0x22, 0x63, 0x60, 0x6b, 0xa9, 0x56, 0xc3, 0xc1, 0x80, + 0xef, 0xc2, 0x82, 0x05, 0xeb, 0xa0, 0xff, 0x2c, 0xc7, 0x2e, 0xf4, 0x38, + 0xcb, 0x8a, 0x0a, 0x87, 0x23, 0x90, 0x9c, 0x70, 0x6b, 0x01, 0x0a, 0x7b, + 0x9f, 0x09, 0xba, 0xa5, 0x98, 0xb2, 0xd4, 0x72, 0x93, 0x79, 0xf2, 0xa9, + 0x89, 0x13, 0x27, 0xfc, 0x23, 0xc6, 0x95, 0x56, 0xbd, 0x5d, 0x74, 0x3b, + 0x4f, 0x12, 0x74, 0xae, 0xc4, 0x3b, 0x59, 0x59, 0x0f, 0xbd, 0x32, 0x47, + 0x66, 0x99, 0xce, 0xd3, 0x83, 0x95, 0xc6, 0x21, 0x46, 0xb5, 0xea, 0x57, + 0x6a, 0x88, 0xb1, 0x59, 0x04, 0x3b, 0x11, 0x48, 0x38, 0x1b, 0xf6, 0x69, + 0xed, 0x31, 0x7a, 0x47, 0x10, 0xcc, 0x54, 0x69, 0x49, 0x44, 0x82, 0x14, + 0x9e, 0x64, 0xb2, 0xa1, 0xdb, 0x84, 0x19, 0xd8, 0xce, 0xf0, 0xcc, 0x08, + 0x1a, 0xea, 0x29, 0xe3, 0x62, 0xb0, 0x10, 0xd3, 0x9a, 0x19, 0x52, 0x72, + 0xb4, 0xbb, 0x1c, 0x87, 0xda, 0x13, 0xde, 0xdb, 0x6d, 0x99, 0xc5, 0x1e, + 0x4a, 0xb8, 0x90, 0x88, 0x16, 0xb9, 0xb0, 0x66, 0x19, 0x43, 0x1c, 0x21, + 0xfa, 0xd8, 0x0d, 0x23, 0x46, 0x77, 0x96, 0x1c, 0xb7, 0x02, 0x0a, 0xae, + 0xa1, 0x00, 0xbc, 0x18, 0xc5, 0x1b, 0x93, 0xe0, 0xa0, 0xf5, 0xf6, 0x66, + 0x2a, 0x40, 0x38, 0x8c, 0xd2, 0x74, 0x62, 0xb4, 0x69, 0xc6, 0x0c, 0xc3, + 0xb3, 0x7b, 0xaf, 0xc3, 0x54, 0x2f, 0xd6, 0xd1, 0x1c, 0x88, 0xcc, 0x33, + 0x6e, 0xd1, 0x46, 0xe7, 0xca, 0x38, 0xab, 0x9c, 0x0c, 0x47, 0x4b, 0x36, + 0x31, 0x61, 0x1c, 0xd4, 0xcb, 0xbc, 0x29, 0x36, 0x05, 0x81, 0x34, 0xaf, + 0xed, 0xba, 0x46, 0x71, 0x6b, 0x54, 0x12, 0x36, 0x20, 0x55, 0xb9, 0x8d, + 0xb3, 0x58, 0x36, 0x40, 0x11, 0x02, 0xbb, 0x35, 0x59, 0xe2, 0x53, 0xac, + 0x4d, 0xda, 0xcd, 0x9b, 0x9f, 0xb1, 0xa3, 0x05, 0x57, 0xe3, 0x62, 0xf4, + 0x46, 0xbd, 0x2b, 0xf6, 0x70, 0x21, 0x16, 0x8a}, + // cipherTextDigest + {0x73, 0xb9, 0xca, 0x02, 0x6c, 0xe1, 0x03, 0x5e, 0x2a, 0x43, 0x61, + 0xc6, 0xe2, 0xcf, 0x6b, 0xe6, 0x97, 0x6b, 0x6f, 0x08, 0x69, 0xc4, + 0xaa, 0x61, 0x98, 0x00, 0xec, 0xb3, 0x96, 0x6e, 0xb4, 0x8e}, + // secret + {0x89, 0x78, 0x2c, 0x13, 0xec, 0xf9, 0x98, 0xe2, 0x0c, 0x2d, 0x22, + 0xdf, 0xcd, 0xe7, 0x74, 0x95, 0x3a, 0x24, 0x16, 0x1a, 0xf3, 0xc1, + 0x3b, 0x6a, 0x4e, 0xa2, 0xaa, 0xcd, 0x29, 0x13, 0x2f, 0xd5}, + true}, + // tcID: 49 + {49, + params_ml_kem768_test_mode, + // entropy + {0x87, 0xb2, 0x5e, 0x0a, 0xfc, 0x6e, 0x9d, 0x18, 0x6d, 0xf7, 0xda, + 0x6c, 0x3d, 0x9e, 0x04, 0x8e, 0x1b, 0x16, 0xc9, 0x90, 0x86, 0x63, + 0x67, 0xbd, 0x90, 0x3c, 0x77, 0x92, 0x66, 0xcf, 0xd5, 0x37}, + // publicKey + {0x35, 0x43, 0xce, 0xd7, 0xc2, 0x15, 0x9f, 0x77, 0x34, 0xc9, 0xc5, 0x23, + 0x4b, 0x00, 0x50, 0x17, 0x7b, 0x8e, 0x5d, 0x40, 0x22, 0xf4, 0x0b, 0x3d, + 0x2b, 0xbc, 0x8d, 0xe8, 0xb9, 0xa2, 0x42, 0x2c, 0x71, 0x1f, 0xe9, 0x7c, + 0x17, 0xbb, 0x70, 0x78, 0x32, 0x1e, 0xc8, 0x1c, 0x82, 0x04, 0xf6, 0x82, + 0xfa, 0xbc, 0x36, 0x14, 0x12, 0x08, 0x53, 0xd2, 0x9a, 0xe9, 0xc1, 0xa3, + 0x81, 0x1b, 0x4e, 0x42, 0x28, 0x36, 0xbc, 0x02, 0x1a, 0x4f, 0x6a, 0xcc, + 0x9f, 0x06, 0xbc, 0x38, 0x67, 0xb5, 0x5d, 0x98, 0x58, 0x9a, 0xf5, 0x1a, + 0x9f, 0x64, 0x10, 0x3e, 0xd2, 0x44, 0xa1, 0x2b, 0x82, 0xbe, 0xfa, 0xbe, + 0xd5, 0x8a, 0xa1, 0x15, 0x11, 0xaf, 0xe7, 0x11, 0xaf, 0x87, 0xf0, 0x6d, + 0xe3, 0x46, 0x3e, 0x5a, 0xac, 0x6e, 0xed, 0xea, 0xae, 0xb0, 0x12, 0xcf, + 0x77, 0x12, 0x84, 0x61, 0xcb, 0x5b, 0x38, 0x84, 0x03, 0x81, 0xa0, 0x8e, + 0x0a, 0x81, 0x19, 0xa0, 0xea, 0x93, 0x02, 0xd4, 0x84, 0x88, 0x05, 0x3d, + 0xd7, 0x55, 0x0f, 0x7d, 0x3c, 0xb2, 0x50, 0x7a, 0x6f, 0x69, 0xe1, 0x86, + 0xbe, 0xd5, 0x3d, 0x72, 0x27, 0x6c, 0x51, 0x7b, 0x3a, 0x4a, 0xe9, 0x0e, + 0x74, 0xc2, 0x4c, 0xfb, 0x09, 0xc7, 0x9e, 0x72, 0xbc, 0x18, 0x83, 0x89, + 0xf6, 0x57, 0xb9, 0xf9, 0xc6, 0xbb, 0x8e, 0x5a, 0x7a, 0xe3, 0x83, 0x2a, + 0xf4, 0x45, 0x3c, 0xdc, 0x43, 0x37, 0xca, 0x9b, 0x02, 0x9f, 0x91, 0xbd, + 0x6f, 0x47, 0x35, 0xe5, 0xba, 0x6f, 0xaa, 0xe8, 0x05, 0xf1, 0x17, 0x79, + 0xdd, 0xa1, 0x9b, 0xb1, 0xe8, 0x1b, 0xc9, 0xf7, 0x20, 0x7f, 0x9c, 0x4f, + 0x58, 0xa7, 0x95, 0x60, 0x0c, 0x2a, 0x8e, 0xd0, 0x38, 0x76, 0xd3, 0x72, + 0x96, 0x22, 0x60, 0x5b, 0x2c, 0x13, 0xae, 0x72, 0x06, 0x5d, 0x07, 0x76, + 0x31, 0xc7, 0xae, 0xab, 0x22, 0x6b, 0x71, 0x11, 0xc9, 0x26, 0xa7, 0xc0, + 0xb3, 0x5a, 0xa9, 0xce, 0x20, 0x8f, 0x30, 0x20, 0x11, 0x1c, 0xa6, 0x26, + 0x6c, 0x91, 0xa1, 0x38, 0xa9, 0xce, 0x79, 0x11, 0xbd, 0x64, 0x16, 0x21, + 0xe9, 0xcb, 0x3c, 0xb0, 0x94, 0x1e, 0x34, 0x35, 0x88, 0x06, 0x8a, 0x49, + 0x92, 0xb0, 0xa6, 0x95, 0x4b, 0xa5, 0xd4, 0x98, 0x54, 0x5c, 0xf6, 0x2c, + 0x5a, 0x20, 0x15, 0x58, 0xcc, 0xa2, 0xfe, 0x95, 0x14, 0xec, 0x92, 0x04, + 0x3d, 0x2b, 0x01, 0x3e, 0x25, 0x4f, 0xc5, 0xf3, 0xa1, 0x88, 0x80, 0x12, + 0x09, 0x01, 0xb6, 0x32, 0x73, 0xbf, 0x99, 0x81, 0x0d, 0xa4, 0x9a, 0x56, + 0x78, 0x06, 0x12, 0xdb, 0x98, 0x89, 0x43, 0x96, 0xc4, 0x49, 0xf0, 0xcc, + 0xfd, 0xa9, 0x15, 0xba, 0xe8, 0x29, 0x97, 0x4a, 0x15, 0x7d, 0x09, 0x72, + 0x9a, 0xd9, 0x09, 0x18, 0xfa, 0xbe, 0x51, 0xb7, 0x2d, 0x49, 0x13, 0x47, + 0x41, 0xb0, 0xc9, 0x74, 0x29, 0xa5, 0x58, 0x35, 0x9e, 0x06, 0x42, 0x38, + 0x8a, 0x50, 0x3d, 0x5e, 0x30, 0x9e, 0x23, 0x71, 0xb2, 0x66, 0x33, 0x27, + 0xb1, 0xa7, 0x49, 0x83, 0x76, 0xaa, 0x4f, 0x1a, 0xb0, 0xd3, 0x20, 0xb4, + 0xd2, 0x85, 0x2e, 0xe9, 0xec, 0x28, 0x82, 0x5c, 0x9c, 0x9f, 0x42, 0x87, + 0xa1, 0x90, 0xbc, 0xcb, 0x17, 0x0c, 0xca, 0x89, 0x7d, 0x08, 0xc9, 0x0b, + 0x2c, 0x18, 0x6a, 0xb7, 0xf2, 0x33, 0x09, 0xf2, 0x74, 0xd7, 0x95, 0x9d, + 0x2c, 0x10, 0x03, 0xfa, 0x83, 0x33, 0xa1, 0x49, 0x1c, 0x5c, 0x64, 0x5f, + 0x34, 0xc0, 0x94, 0xfe, 0xfa, 0x10, 0x4e, 0x55, 0x4c, 0xdf, 0xf6, 0x3e, + 0xf9, 0x55, 0xad, 0xd5, 0x5a, 0x9c, 0xe5, 0x75, 0x3a, 0x15, 0x0c, 0x6d, + 0x9b, 0xfa, 0x38, 0x25, 0x41, 0xb9, 0x84, 0x10, 0x3d, 0xc7, 0x8b, 0x66, + 0x2d, 0x11, 0x4b, 0xea, 0x83, 0x0e, 0x95, 0x13, 0x41, 0x58, 0xcb, 0xb8, + 0x54, 0x31, 0x0c, 0xae, 0x40, 0x6b, 0xbc, 0xe4, 0xce, 0x82, 0xb7, 0x25, + 0x7c, 0x33, 0x0e, 0x8b, 0x11, 0x37, 0x90, 0x95, 0x4b, 0xf1, 0x9c, 0xba, + 0x1f, 0xc2, 0x58, 0x28, 0xec, 0x06, 0xe1, 0x7c, 0x73, 0xe1, 0x35, 0xcd, + 0xf5, 0x74, 0x84, 0x90, 0x68, 0x1f, 0x7b, 0xe0, 0x52, 0xea, 0xb1, 0x49, + 0x91, 0x25, 0x28, 0xb2, 0x00, 0x4b, 0x2b, 0x02, 0x72, 0x58, 0x52, 0xc2, + 0x8e, 0x8b, 0x56, 0x62, 0x91, 0xaa, 0x02, 0xc1, 0xa4, 0x10, 0x71, 0x79, + 0x87, 0xb2, 0x2b, 0x3d, 0x29, 0xb5, 0xda, 0x93, 0x63, 0xb6, 0x3b, 0x33, + 0xf4, 0x10, 0x8c, 0x67, 0x83, 0x18, 0x62, 0x36, 0x28, 0x8a, 0x31, 0xbf, + 0xf0, 0x74, 0x82, 0xc1, 0x89, 0xaa, 0x4c, 0x4c, 0x5f, 0x4b, 0x60, 0x24, + 0xc3, 0x88, 0xcb, 0xe0, 0x49, 0xa0, 0x2c, 0xc0, 0xa6, 0xcb, 0x52, 0x88, + 0x6a, 0x25, 0xb9, 0xb9, 0x42, 0x3a, 0xa4, 0x71, 0x6d, 0x0f, 0x65, 0x30, + 0x8d, 0x61, 0xca, 0x33, 0x64, 0x98, 0x84, 0xca, 0x49, 0x10, 0xa0, 0x0d, + 0x9f, 0x8b, 0x6d, 0x56, 0xdb, 0x71, 0x9e, 0x47, 0x02, 0x91, 0xda, 0x68, + 0x02, 0xf5, 0x7d, 0x45, 0x25, 0x31, 0xfd, 0xe3, 0x6a, 0xda, 0xb0, 0x04, + 0x50, 0xc3, 0x73, 0x5c, 0xb8, 0xc0, 0x48, 0x4b, 0xa8, 0xf6, 0xe8, 0xa9, + 0x39, 0x81, 0x9f, 0xbb, 0x9a, 0xc5, 0x48, 0x90, 0x5e, 0x13, 0x45, 0x8a, + 0x27, 0x85, 0x79, 0xa6, 0xe5, 0x16, 0x09, 0x50, 0x84, 0x6b, 0xa1, 0xa9, + 0xe4, 0xd6, 0x2e, 0xbd, 0xeb, 0x8c, 0x8f, 0x9b, 0x1c, 0xa2, 0x6c, 0x20, + 0xf7, 0x6b, 0xa9, 0x0c, 0x56, 0x79, 0xb2, 0xba, 0x4d, 0x8e, 0xe4, 0xb9, + 0x63, 0x55, 0x7d, 0xb1, 0xe8, 0xc8, 0x91, 0x72, 0x9d, 0xa1, 0xf4, 0x21, + 0xff, 0x20, 0xc4, 0x22, 0x61, 0x65, 0x4e, 0x75, 0x3c, 0x63, 0xa3, 0x9d, + 0xc7, 0xb9, 0x09, 0x4a, 0x20, 0xaa, 0xa3, 0xe2, 0x9d, 0xf2, 0x93, 0x27, + 0xaf, 0x31, 0x45, 0x76, 0xa8, 0xcb, 0xdc, 0x5a, 0xb5, 0x5b, 0x8c, 0x4b, + 0x91, 0xdb, 0x1d, 0xf2, 0x53, 0x04, 0xe8, 0x08, 0xb6, 0x77, 0xfb, 0x9f, + 0xa2, 0xf8, 0x2d, 0x15, 0xa9, 0x57, 0xcd, 0x84, 0x85, 0xdd, 0x5a, 0x35, + 0x99, 0x9b, 0x99, 0x2c, 0xe4, 0x28, 0x79, 0x58, 0x97, 0xc1, 0xbb, 0x18, + 0xdf, 0x01, 0xc0, 0xde, 0x2b, 0x0d, 0x45, 0x62, 0x0f, 0x31, 0xd8, 0x20, + 0xb4, 0x12, 0x82, 0xc4, 0xd9, 0x8d, 0x95, 0x82, 0x5a, 0xc5, 0x2b, 0x11, + 0x31, 0x0a, 0x1e, 0xeb, 0xcc, 0x67, 0x24, 0xd4, 0xbd, 0xf7, 0xa3, 0xb6, + 0x9a, 0x1c, 0x1d, 0x63, 0x04, 0x79, 0x69, 0xa0, 0x58, 0xfb, 0xeb, 0x92, + 0x6f, 0x68, 0x69, 0x6b, 0x67, 0x61, 0xf4, 0xf6, 0x6b, 0x3d, 0x7a, 0x31, + 0x87, 0x80, 0x06, 0x90, 0x18, 0x53, 0xc5, 0x81, 0x28, 0xc9, 0xca, 0x6a, + 0x91, 0x17, 0x64, 0xa2, 0x44, 0xa2, 0x90, 0xf9, 0x6d, 0x00, 0xdc, 0x38, + 0x34, 0x32, 0x44, 0x80, 0x3b, 0xc6, 0x47, 0xc6, 0x15, 0x2f, 0xe9, 0xbb, + 0xd0, 0xcb, 0x82, 0xa4, 0x46, 0x7a, 0xa4, 0xd2, 0x5c, 0xe1, 0x75, 0xc0, + 0x80, 0x09, 0xb8, 0x67, 0xf6, 0x0d, 0x9a, 0x32, 0x13, 0x8d, 0x38, 0x64, + 0xf7, 0x19, 0xa2, 0xb7, 0x98, 0x98, 0x74, 0x30, 0xc0, 0xc7, 0x32, 0x6d, + 0x3b, 0xeb, 0x3f, 0x89, 0x54, 0x72, 0xb2, 0xd0, 0x54, 0x03, 0x03, 0x66, + 0x11, 0x1c, 0xc2, 0xde, 0xf6, 0x0c, 0x78, 0x00, 0xce, 0x3b, 0xda, 0x02, + 0x3a, 0x06, 0x2b, 0xc2, 0x35, 0x13, 0x93, 0xac, 0x44, 0xdf, 0xf3, 0x0b, + 0x49, 0xe6, 0x0f, 0x90, 0x74, 0x04, 0x56, 0x21, 0x59, 0xb5, 0x07, 0x7b, + 0x31, 0xe6, 0x67, 0x5d, 0x90, 0x5c, 0xc7, 0xc1, 0xcb, 0x4c, 0xd6, 0x4b, + 0x2a, 0xf5, 0xaf, 0xa5, 0x0c, 0xc3, 0x87, 0xc3, 0x33, 0xae, 0xc7, 0xca, + 0xba, 0x21, 0x9c, 0xb4, 0xc8, 0xa8, 0x95, 0x2b, 0x42, 0x9a, 0x1b, 0xcf, + 0x05, 0xd7, 0x8e, 0xc6, 0x5a, 0x90, 0x84, 0x36, 0x25, 0x6f, 0x46, 0x11, + 0x4a, 0x19, 0xaf, 0x2f, 0x1a, 0x0e, 0xad, 0x0c, 0x12, 0xae, 0xd4, 0x17, + 0x1e, 0xf6, 0x53, 0xf3, 0xd2, 0x80, 0x27, 0x49, 0xc6, 0x18, 0xd7, 0x00, + 0x06, 0xd6, 0x86, 0x64, 0xea, 0xb3, 0xb8, 0x76, 0xb4, 0x8f, 0xc2, 0x98, + 0x25, 0x65, 0x77, 0xce, 0x34, 0xab, 0x51, 0x27, 0xce, 0xe0, 0x34, 0x33, + 0xb2, 0xca, 0x9b, 0x40, 0x3c, 0x0a, 0x39, 0xb0, 0x26, 0x57, 0x18, 0x0c, + 0x82, 0x96, 0x84, 0xa7, 0xa5, 0x84, 0x58, 0x48, 0x7e, 0x00, 0x14, 0x3c, + 0xef, 0xd5, 0xaf, 0xfe, 0xf3, 0x16, 0xf2, 0xe7, 0x16, 0xb0, 0xb4, 0x24, + 0x16, 0x97, 0x5e, 0x44, 0xa6, 0x3e, 0xc6, 0x22, 0x69, 0x96, 0x6c, 0x6c, + 0x71, 0xf9, 0xb0, 0x1c, 0x5c, 0x83, 0x9b, 0xc3, 0xe7, 0x78, 0xad, 0xd8, + 0x80, 0xe2, 0x12, 0x6f, 0x87, 0x76, 0xb0, 0x26, 0x47, 0x07, 0x61, 0x7c, + 0xd4, 0x67, 0xe9, 0x82, 0xe2, 0xde, 0xf5, 0xe1}, + // cipherTextDigest + {0x70, 0x64, 0x2a, 0x7e, 0x96, 0xc0, 0xd9, 0xd7, 0x37, 0x43, 0x51, + 0xca, 0xf2, 0x84, 0x82, 0xea, 0xd5, 0xca, 0x53, 0x87, 0x8b, 0x51, + 0x81, 0x14, 0x0b, 0xf1, 0x19, 0x4e, 0x95, 0xab, 0x92, 0x75}, + // secret + {0x80, 0x5d, 0x0e, 0x35, 0xa3, 0x51, 0x25, 0x8c, 0x79, 0xba, 0x48, + 0x19, 0x73, 0xa7, 0xf2, 0x1a, 0x82, 0x93, 0xff, 0x0f, 0x11, 0x80, + 0x7e, 0xf1, 0xe4, 0xd3, 0x3f, 0x68, 0xc8, 0xa7, 0xd1, 0x03}, + true}, + // tcID: 50 + {50, + params_ml_kem768_test_mode, + // entropy + {0xf1, 0x88, 0xec, 0xa4, 0xec, 0xee, 0xd7, 0xc3, 0xc9, 0x86, 0x0a, + 0x43, 0x05, 0x75, 0xef, 0xec, 0xbb, 0xf6, 0x50, 0x12, 0x6e, 0x5f, + 0xaf, 0xac, 0x46, 0x4b, 0x12, 0x72, 0xf4, 0x27, 0x86, 0x6b}, + // publicKey + {0xf5, 0xba, 0xa7, 0x4b, 0x78, 0x63, 0x4a, 0xc8, 0x45, 0xb3, 0x5c, 0x58, + 0xc2, 0x90, 0xc2, 0xc6, 0xb0, 0x49, 0x5e, 0x79, 0x7f, 0x1a, 0x92, 0x4f, + 0x57, 0x4a, 0xa8, 0x43, 0x22, 0x18, 0xf8, 0x9a, 0x8c, 0xf4, 0x79, 0x28, + 0xf1, 0xf5, 0xa7, 0x2b, 0x43, 0x04, 0xb6, 0x79, 0x8b, 0x3b, 0x1a, 0x08, + 0xad, 0xa4, 0xcb, 0x70, 0x40, 0x6f, 0x91, 0x81, 0x52, 0x69, 0x30, 0x87, + 0x61, 0xf2, 0xbf, 0x70, 0x60, 0x29, 0xba, 0x71, 0x8e, 0xa4, 0xf6, 0xcc, + 0x8d, 0x2a, 0x63, 0x25, 0x98, 0xa2, 0x48, 0xb2, 0xbf, 0xd0, 0xf3, 0x3c, + 0xa5, 0x12, 0x38, 0x37, 0x93, 0xcb, 0x20, 0x4c, 0xa8, 0x08, 0xd1, 0x35, + 0x25, 0x74, 0x83, 0x4d, 0x81, 0x6b, 0x85, 0x7a, 0x89, 0xf3, 0x53, 0x97, + 0x79, 0xe5, 0x3d, 0xc5, 0x83, 0x73, 0xc9, 0xb9, 0x4f, 0x87, 0x94, 0x0c, + 0x1e, 0x3b, 0x9d, 0xee, 0xf0, 0xba, 0x4c, 0xf6, 0x9f, 0x83, 0x77, 0x81, + 0xf1, 0x3c, 0x2a, 0xed, 0x42, 0x3b, 0x9f, 0x64, 0xc8, 0xe3, 0x84, 0xc3, + 0xee, 0x70, 0x88, 0x8c, 0xc7, 0x4a, 0xe0, 0x06, 0x53, 0x1a, 0x05, 0x44, + 0xec, 0x70, 0x2a, 0x2d, 0x19, 0x27, 0xb5, 0x5c, 0x0d, 0x36, 0x53, 0x05, + 0x8f, 0xf6, 0xb2, 0xeb, 0x68, 0x27, 0x95, 0x41, 0xbb, 0xdb, 0x34, 0x30, + 0xe4, 0x12, 0x3a, 0xfc, 0x50, 0x5d, 0xc6, 0x2c, 0x66, 0x6c, 0xa5, 0xb6, + 0xc7, 0x51, 0xc1, 0x44, 0x83, 0x20, 0xb0, 0xf0, 0x7f, 0xde, 0x43, 0xb2, + 0x0f, 0x7a, 0x50, 0xc6, 0x31, 0xca, 0x75, 0x4c, 0x70, 0x03, 0xb3, 0xb4, + 0x85, 0xc1, 0xbf, 0xaf, 0xe8, 0x41, 0x28, 0x87, 0x16, 0xcb, 0x38, 0xb9, + 0xb5, 0xfb, 0x3e, 0x5b, 0x7a, 0xc5, 0x9f, 0x0a, 0x57, 0x59, 0xac, 0x95, + 0x03, 0x40, 0x39, 0x1d, 0x62, 0x99, 0x4c, 0xcb, 0x27, 0xe2, 0x57, 0x5d, + 0x2f, 0x1a, 0xad, 0xdb, 0x42, 0x78, 0xd3, 0xea, 0x10, 0x98, 0xf4, 0x6c, + 0x10, 0xf4, 0x3a, 0x46, 0x38, 0x27, 0x73, 0x83, 0x36, 0x3e, 0xf0, 0xa2, + 0xf7, 0x42, 0x27, 0xc5, 0xd1, 0xc3, 0xe0, 0xf8, 0x69, 0x88, 0x69, 0xc9, + 0x43, 0x23, 0xc6, 0x12, 0x46, 0x6c, 0x8d, 0x72, 0x37, 0xef, 0x73, 0x34, + 0x45, 0x73, 0x21, 0x5e, 0x31, 0xbd, 0x39, 0x24, 0x46, 0x8e, 0x33, 0x70, + 0x0f, 0xe0, 0xb8, 0x7f, 0x5a, 0x90, 0x27, 0xdc, 0xa2, 0x2a, 0xa3, 0x7e, + 0xf9, 0xd3, 0xc7, 0x44, 0xbc, 0x89, 0xc2, 0x36, 0xcd, 0xe0, 0xb2, 0x34, + 0x6a, 0xa4, 0xcb, 0x87, 0x45, 0xb6, 0x99, 0xf1, 0x92, 0x5a, 0x23, 0x53, + 0xfc, 0x48, 0x90, 0x40, 0x45, 0x17, 0xed, 0xd9, 0xcf, 0x42, 0x63, 0x2d, + 0xd5, 0x99, 0x13, 0x3f, 0xc8, 0xce, 0xca, 0x33, 0x45, 0xde, 0x74, 0x7f, + 0x2f, 0xe5, 0x5f, 0x1e, 0xfb, 0xba, 0x2e, 0x11, 0x4e, 0xd1, 0x84, 0x52, + 0xbc, 0x84, 0x63, 0x14, 0xa7, 0x89, 0x4a, 0x24, 0x9f, 0x05, 0x65, 0xc2, + 0x28, 0x11, 0x8b, 0x9c, 0x95, 0x6b, 0xad, 0xc0, 0x6f, 0xd4, 0xf3, 0x6d, + 0x4e, 0x43, 0x3b, 0x56, 0xa1, 0x99, 0xb9, 0x24, 0x5d, 0x80, 0x25, 0x81, + 0xdd, 0xb9, 0xaa, 0x7a, 0xc2, 0x56, 0x64, 0x0a, 0x55, 0x4e, 0x86, 0x14, + 0xda, 0x82, 0x43, 0xf5, 0xd4, 0xca, 0x7f, 0x48, 0x60, 0xf4, 0xbc, 0x04, + 0xe6, 0xeb, 0xac, 0xbd, 0x31, 0x20, 0x87, 0x25, 0xcc, 0x12, 0xa8, 0x27, + 0x87, 0x97, 0x50, 0xd2, 0xe5, 0x2d, 0xdf, 0xfb, 0x9c, 0xe2, 0xa3, 0x8b, + 0x63, 0xd1, 0x1e, 0x7a, 0xd0, 0xa0, 0xac, 0xf7, 0x71, 0x51, 0xd0, 0x32, + 0x85, 0x72, 0xa4, 0x6e, 0x46, 0x0d, 0x65, 0x39, 0x5b, 0x94, 0x4c, 0x8a, + 0x1c, 0x72, 0x0d, 0x85, 0xd7, 0x37, 0xf5, 0xc6, 0x3f, 0xa7, 0xab, 0x91, + 0x94, 0x96, 0x15, 0xf9, 0xf3, 0x32, 0xf1, 0x74, 0x84, 0x9c, 0x13, 0x83, + 0x32, 0xc5, 0x09, 0xd0, 0x0b, 0xab, 0x5c, 0xc7, 0x14, 0x61, 0x53, 0x5a, + 0xbf, 0xa8, 0x69, 0x67, 0x18, 0x4d, 0x2b, 0xd8, 0x46, 0xf1, 0xc1, 0x01, + 0x04, 0xea, 0x28, 0x34, 0xea, 0x0c, 0x7a, 0x73, 0x4a, 0x93, 0x5c, 0x66, + 0x6c, 0x7a, 0x22, 0x1a, 0xa0, 0x29, 0x39, 0xe4, 0xbb, 0x87, 0x33, 0x2a, + 0x75, 0xc9, 0x83, 0xde, 0x14, 0xc5, 0x75, 0xf8, 0x79, 0x4e, 0xea, 0xbd, + 0xbb, 0x11, 0x3a, 0x75, 0x94, 0x0f, 0x9a, 0x31, 0x1d, 0x89, 0x86, 0x61, + 0x48, 0x23, 0x8c, 0x5d, 0x3c, 0x55, 0x00, 0x35, 0x81, 0x21, 0x25, 0x40, + 0x7c, 0x46, 0xc1, 0x76, 0x7a, 0x60, 0xa0, 0xe0, 0xbb, 0x44, 0xc9, 0xce, + 0xd3, 0x96, 0x49, 0xbf, 0x18, 0x50, 0x0a, 0xec, 0x0b, 0x43, 0x71, 0x8e, + 0xab, 0xba, 0xb3, 0xa5, 0xd0, 0xac, 0x51, 0xb2, 0xa4, 0xae, 0x86, 0x1f, + 0xdc, 0xb5, 0x46, 0xa6, 0x89, 0x3f, 0x58, 0xd8, 0x2c, 0x91, 0xb7, 0x4b, + 0x58, 0xc1, 0x8d, 0x0b, 0xbb, 0x7d, 0x54, 0xf3, 0x6d, 0x35, 0x1b, 0x8b, + 0x84, 0xcc, 0x27, 0x0e, 0xe4, 0xce, 0xee, 0x9b, 0x1a, 0x2d, 0xbc, 0x39, + 0xbc, 0xac, 0x5e, 0x15, 0x07, 0x02, 0x41, 0xa9, 0xa2, 0x76, 0x62, 0xaf, + 0x8f, 0x97, 0xab, 0x64, 0xea, 0x87, 0x41, 0xc3, 0x2e, 0x71, 0x17, 0x60, + 0xee, 0x46, 0xca, 0xce, 0x56, 0x0e, 0xf4, 0xa2, 0x5b, 0xb8, 0x24, 0x63, + 0x90, 0xfc, 0xcd, 0xa4, 0x19, 0x7f, 0x68, 0x24, 0x95, 0xf0, 0xa4, 0x6c, + 0x38, 0xfc, 0xbd, 0xfa, 0x81, 0xa5, 0x24, 0x65, 0x73, 0xfc, 0xa9, 0x74, + 0xbd, 0x62, 0x3d, 0xa8, 0x07, 0x36, 0xd5, 0x98, 0xb0, 0x69, 0x09, 0x3e, + 0xcb, 0xdc, 0x75, 0x9a, 0xf1, 0x22, 0xdd, 0x97, 0x7c, 0x83, 0x40, 0x7e, + 0x37, 0x29, 0x78, 0xc1, 0x35, 0x98, 0x07, 0x72, 0xb6, 0xa1, 0x08, 0x6f, + 0xe3, 0x46, 0x0f, 0x6f, 0xd9, 0x2c, 0xc5, 0xf2, 0xaa, 0xd0, 0x37, 0x2d, + 0xe7, 0x86, 0x6b, 0x0c, 0x51, 0x7e, 0x17, 0x93, 0x1c, 0xd1, 0x68, 0x77, + 0x73, 0x30, 0x7d, 0xf4, 0x24, 0x3e, 0x1c, 0xb0, 0x06, 0x91, 0xc8, 0x74, + 0x2a, 0x82, 0x73, 0x2f, 0xb7, 0x91, 0x4b, 0x9c, 0x7c, 0xb4, 0xc9, 0x29, + 0x53, 0xec, 0x4f, 0x7b, 0x1a, 0x9c, 0xbd, 0xf0, 0x66, 0xcf, 0x49, 0x9a, + 0xbb, 0x65, 0xa0, 0x43, 0x65, 0x90, 0x04, 0x9a, 0x4d, 0x0a, 0xd5, 0x66, + 0x42, 0x1b, 0xc0, 0x71, 0x2b, 0x2f, 0x64, 0xf8, 0x02, 0xd0, 0xdc, 0x36, + 0x70, 0x77, 0x1a, 0x72, 0x7c, 0x62, 0xd9, 0x19, 0xa0, 0xf9, 0x69, 0xa4, + 0xe4, 0x22, 0x8c, 0xa3, 0x34, 0x48, 0x34, 0x99, 0x3c, 0xf4, 0x74, 0x72, + 0x8d, 0x26, 0x49, 0xc3, 0xc3, 0xa3, 0x7c, 0x85, 0xab, 0x51, 0xd9, 0x5d, + 0x96, 0x47, 0x10, 0xd7, 0x3c, 0x63, 0xc5, 0x41, 0xb5, 0xee, 0x09, 0x85, + 0xca, 0x63, 0xcc, 0x55, 0xc0, 0x37, 0xf6, 0x2a, 0x69, 0x62, 0x47, 0xcb, + 0x00, 0x1d, 0x54, 0x41, 0xc3, 0x30, 0x03, 0x18, 0x56, 0x29, 0x51, 0x31, + 0x80, 0xa3, 0xc1, 0xec, 0x02, 0x38, 0xcf, 0xcb, 0xab, 0x40, 0x04, 0xa0, + 0x88, 0xc1, 0xc1, 0xc9, 0xd2, 0x3d, 0x06, 0x8a, 0x09, 0xce, 0xa1, 0x6a, + 0x42, 0xf0, 0x93, 0x6e, 0xec, 0x7f, 0x6d, 0x53, 0x93, 0x72, 0xbb, 0x2c, + 0x87, 0x79, 0xc9, 0x19, 0x09, 0x9d, 0xf1, 0x87, 0x20, 0xdb, 0x07, 0x62, + 0x24, 0xf8, 0xba, 0xec, 0xab, 0x14, 0xed, 0x28, 0xa9, 0x80, 0xc0, 0x07, + 0x71, 0xb7, 0x2c, 0xf3, 0x58, 0x95, 0xff, 0x90, 0x82, 0x10, 0xca, 0xcb, + 0x77, 0x5c, 0x9f, 0x8f, 0xa6, 0x58, 0x55, 0x79, 0xa0, 0x0d, 0xb0, 0x96, + 0x67, 0xb5, 0x18, 0x51, 0x97, 0xc4, 0x5b, 0xa2, 0x67, 0xca, 0x04, 0x0d, + 0xfb, 0xf2, 0x96, 0x66, 0x25, 0x0a, 0x18, 0x7c, 0x51, 0x51, 0x86, 0x4b, + 0x43, 0x44, 0x1e, 0x7a, 0x40, 0x02, 0x28, 0x52, 0xa1, 0xee, 0xb8, 0x41, + 0xd5, 0x50, 0x00, 0xb4, 0x23, 0x08, 0x87, 0x66, 0x55, 0x55, 0xf8, 0x79, + 0x3a, 0x46, 0xb7, 0x80, 0x15, 0x8b, 0x74, 0x4c, 0x88, 0x0f, 0xb9, 0x47, + 0xd2, 0x03, 0x23, 0x9d, 0x09, 0x0f, 0x8c, 0x53, 0xa1, 0xba, 0xc4, 0x7d, + 0xe0, 0xf0, 0x19, 0x6f, 0x42, 0x45, 0xa2, 0x38, 0xc4, 0xd9, 0xa0, 0x95, + 0x9d, 0xf2, 0x2c, 0xc1, 0x6b, 0x88, 0xbb, 0xb5, 0x32, 0x70, 0xb3, 0x35, + 0x53, 0x3c, 0x36, 0x87, 0x89, 0xc6, 0xcc, 0x20, 0x86, 0x60, 0x40, 0x6b, + 0x1a, 0x68, 0x66, 0x16, 0xd9, 0x2c, 0xec, 0x02, 0x49, 0x3f, 0x44, 0xbd, + 0xba, 0xbc, 0x86, 0xcf, 0xb2, 0x11, 0x9b, 0x8a, 0x18, 0xb2, 0xbb, 0x4e, + 0x7b, 0x66, 0x0d, 0x3a, 0x65, 0xa2, 0xf0, 0xfc, 0xaa, 0xa8, 0xa0, 0x18, + 0xef, 0x5f, 0x0b, 0xb1, 0xfb, 0x08, 0x80, 0xe9, 0xb9, 0x5e, 0x50, 0xd6, + 0x57, 0xe5, 0x61, 0x52, 0x0e, 0x90, 0xb5, 0x59, 0x00, 0x05, 0xc8, 0x6d, + 0xcd, 0x76, 0x39, 0xe3, 0x30, 0x64, 0xab, 0xbb}, + // cipherTextDigest + {0xca, 0x6e, 0x12, 0xe9, 0x3d, 0x18, 0x0c, 0x12, 0x9b, 0xea, 0x6c, + 0x58, 0x18, 0x38, 0x2c, 0xf3, 0x2b, 0x34, 0x25, 0x94, 0x40, 0x74, + 0x6c, 0xad, 0xe3, 0xe6, 0x7c, 0x7f, 0xeb, 0xce, 0x8d, 0x48}, + // secret + {0xae, 0x06, 0x63, 0x04, 0x91, 0x50, 0xf3, 0x83, 0x7c, 0x44, 0x20, + 0xbf, 0x2d, 0x1c, 0x64, 0x45, 0xbe, 0x7a, 0xc1, 0x35, 0xb3, 0x7f, + 0x78, 0x9a, 0x67, 0x02, 0x22, 0x73, 0x5b, 0x00, 0xbf, 0x6b}, + true}, + // tcID: 51 + {51, + params_ml_kem1024_test_mode, + // entropy + {0x81, 0x99, 0xcf, 0x92, 0x3c, 0xe1, 0x21, 0x26, 0x92, 0x01, 0x08, + 0x56, 0x9c, 0x11, 0xcb, 0xf9, 0x7c, 0xf0, 0x3f, 0x44, 0xaf, 0x5c, + 0xfa, 0x7d, 0x55, 0x0e, 0x9b, 0x2a, 0xc7, 0x43, 0x19, 0x82}, + // publicKey + {0x39, 0x69, 0x08, 0x70, 0xb7, 0x65, 0xdd, 0xf5, 0xa0, 0xb7, 0x09, 0x27, + 0x73, 0xec, 0x19, 0x11, 0x63, 0x7e, 0x8a, 0x80, 0x30, 0x7a, 0x86, 0x5a, + 0x24, 0xe3, 0x01, 0x2f, 0xba, 0xcc, 0x0f, 0xd4, 0x31, 0xd1, 0x2a, 0x44, + 0xb3, 0x8c, 0xc6, 0x85, 0x33, 0x5c, 0x85, 0x87, 0x14, 0x02, 0x61, 0x87, + 0xe8, 0xf6, 0x41, 0x93, 0x32, 0x91, 0xcb, 0xe0, 0xb6, 0x78, 0xd7, 0x89, + 0x44, 0xb1, 0x7d, 0x7d, 0xa6, 0x05, 0xde, 0xc0, 0x11, 0xb8, 0x68, 0x1e, + 0x11, 0x37, 0x01, 0xc0, 0x07, 0x45, 0x53, 0x15, 0x6e, 0xe1, 0x15, 0x30, + 0xa4, 0xb6, 0x3b, 0x8f, 0xe8, 0x86, 0x63, 0x7b, 0x52, 0x4d, 0xe2, 0x73, + 0x3d, 0x03, 0x95, 0x91, 0x23, 0x0c, 0xd9, 0x0c, 0x1e, 0xba, 0xb6, 0x1e, + 0x3a, 0x57, 0x62, 0xe4, 0x6b, 0x4e, 0x60, 0x67, 0xc6, 0xc4, 0xb2, 0x80, + 0xf3, 0x71, 0xa3, 0xd8, 0xbb, 0x68, 0x39, 0x24, 0x2d, 0xd3, 0xe3, 0x81, + 0xb4, 0x1a, 0x36, 0x24, 0x39, 0x6c, 0x2c, 0x55, 0x7d, 0x18, 0x09, 0x93, + 0x4a, 0x90, 0x1d, 0x80, 0x91, 0x73, 0x1a, 0x43, 0xa3, 0x2d, 0xa3, 0x2e, + 0xc9, 0xfa, 0x86, 0x0f, 0xfc, 0x4a, 0xd0, 0x90, 0x22, 0xb9, 0x44, 0xc6, + 0x54, 0x98, 0x0d, 0x2f, 0x92, 0x87, 0x73, 0xb5, 0xbb, 0xbe, 0x04, 0x8a, + 0x21, 0xdb, 0x3f, 0x67, 0x16, 0x7e, 0xa7, 0xf2, 0xb1, 0x56, 0x24, 0x60, + 0x14, 0xac, 0xcd, 0xc2, 0x44, 0x55, 0xf5, 0xd1, 0xb0, 0xf7, 0x17, 0x1d, + 0x29, 0xca, 0xa4, 0x3d, 0xeb, 0x1c, 0xe3, 0x25, 0x13, 0x07, 0x8b, 0x49, + 0x5a, 0xc0, 0x9c, 0x9b, 0x67, 0x93, 0x49, 0x7b, 0xb5, 0x93, 0x57, 0x0c, + 0xf8, 0xaa, 0x2d, 0x1f, 0x75, 0x49, 0xe5, 0xd5, 0x4f, 0xa5, 0xa3, 0x39, + 0xb4, 0x28, 0x1c, 0x90, 0xd7, 0x5a, 0x9d, 0x01, 0x86, 0xb7, 0x32, 0x21, + 0x29, 0xb9, 0x0b, 0x1d, 0xf6, 0xa3, 0x98, 0x92, 0xc6, 0x0a, 0x61, 0x3d, + 0x55, 0xe4, 0xa4, 0x6e, 0xc0, 0x7b, 0x69, 0xb6, 0xaf, 0x96, 0x25, 0x56, + 0x17, 0xc7, 0x79, 0x51, 0x95, 0x8a, 0x15, 0xb7, 0x1d, 0xc4, 0x80, 0x75, + 0x56, 0x2a, 0x23, 0x6a, 0xa3, 0x25, 0x00, 0x89, 0x09, 0xcf, 0x75, 0x99, + 0x3c, 0xd5, 0x8a, 0xa8, 0x16, 0x58, 0x75, 0x09, 0x85, 0xfa, 0x59, 0x3e, + 0xf6, 0xc0, 0x40, 0x0b, 0xa0, 0x7b, 0xf1, 0x19, 0xc7, 0x38, 0x0b, 0x1d, + 0x61, 0x75, 0x1a, 0x43, 0x90, 0xa3, 0x98, 0xb6, 0x20, 0x5a, 0x68, 0x95, + 0xa8, 0x57, 0xa4, 0x63, 0xec, 0x93, 0x1f, 0xc2, 0x62, 0xd8, 0x9b, 0x06, + 0x9d, 0x6c, 0xb3, 0xac, 0x9b, 0xb4, 0xe5, 0x27, 0x2f, 0x35, 0xca, 0x61, + 0x2d, 0x83, 0x46, 0xb6, 0x54, 0x27, 0x70, 0x81, 0x86, 0xc9, 0x42, 0x2a, + 0x37, 0x33, 0x2b, 0x99, 0x55, 0xbf, 0xba, 0x70, 0x80, 0x45, 0x4c, 0xb5, + 0x97, 0x23, 0x97, 0x83, 0x9b, 0x54, 0x65, 0x21, 0x9e, 0xc6, 0x02, 0x4d, + 0x08, 0xa4, 0x6e, 0xc4, 0xb2, 0x9a, 0x15, 0x24, 0x96, 0x53, 0xf4, 0x13, + 0xfd, 0xa1, 0xc9, 0x9e, 0x82, 0xc1, 0x44, 0xe7, 0xbc, 0xd9, 0xe1, 0x7c, + 0x19, 0xc2, 0xc3, 0xd4, 0x3c, 0x47, 0x92, 0xf9, 0x1e, 0xa4, 0xd8, 0x48, + 0x75, 0x67, 0x39, 0x2a, 0xf4, 0x3a, 0x51, 0x34, 0x80, 0x97, 0x59, 0x59, + 0xe5, 0x0c, 0xca, 0x55, 0xdc, 0x89, 0xab, 0x0a, 0x19, 0xa3, 0x13, 0xb1, + 0xb7, 0xe6, 0xad, 0xbd, 0x7a, 0x14, 0x77, 0x28, 0x1b, 0xd1, 0x28, 0xb2, + 0xc0, 0xf8, 0x67, 0xcc, 0xd1, 0x38, 0x77, 0x24, 0x8e, 0x58, 0x44, 0x88, + 0x2f, 0x48, 0xb8, 0x78, 0xe5, 0x36, 0xd5, 0x20, 0x87, 0x16, 0xf1, 0x1b, + 0x75, 0x05, 0x10, 0x33, 0xe9, 0xa3, 0x0d, 0xe9, 0xaf, 0xbb, 0xa6, 0x63, + 0x05, 0xe1, 0xba, 0x26, 0x56, 0x86, 0xb2, 0x9c, 0x31, 0x86, 0xfb, 0x3c, + 0xa1, 0x95, 0x29, 0x36, 0xfa, 0xbd, 0x2e, 0xa9, 0x31, 0xe0, 0xd7, 0x4e, + 0x4d, 0x84, 0x9c, 0xb6, 0x85, 0xbf, 0xfc, 0x38, 0xc9, 0xe2, 0x95, 0x59, + 0xde, 0x6a, 0xaf, 0x2e, 0xb4, 0x01, 0x7c, 0x54, 0x3e, 0xb9, 0xd5, 0x97, + 0x32, 0xb4, 0x21, 0xc3, 0xa5, 0xcb, 0x57, 0x81, 0xbb, 0x60, 0xf1, 0xa9, + 0x53, 0xf0, 0x7d, 0x79, 0x37, 0xb3, 0x65, 0x13, 0x05, 0xe1, 0xd4, 0x6e, + 0x15, 0x56, 0x93, 0x21, 0x72, 0x1e, 0x31, 0x04, 0x94, 0xc2, 0xec, 0x16, + 0xc8, 0x43, 0xb3, 0xb4, 0xd9, 0x83, 0x18, 0x09, 0x06, 0x5b, 0xda, 0x8f, + 0x4e, 0x5a, 0x17, 0xe8, 0x01, 0x23, 0x31, 0x2c, 0x06, 0x5c, 0x03, 0xac, + 0xe6, 0x23, 0xaf, 0x55, 0x89, 0xce, 0x36, 0x1c, 0x91, 0x3b, 0xda, 0x35, + 0x5a, 0x03, 0x1e, 0x42, 0xc5, 0x4e, 0xab, 0xa2, 0x4a, 0xf3, 0xf6, 0x84, + 0x8e, 0x6c, 0x49, 0x32, 0x42, 0x7a, 0xe2, 0xa0, 0x9d, 0x25, 0x80, 0x8b, + 0xdf, 0x02, 0x88, 0xd4, 0xc2, 0x45, 0xea, 0x29, 0x73, 0xc2, 0x61, 0xcb, + 0x29, 0xa6, 0xaf, 0xb1, 0x3c, 0x60, 0x58, 0xa3, 0xa1, 0x9f, 0x11, 0x67, + 0x3a, 0x19, 0x8f, 0x86, 0xa2, 0x51, 0x11, 0x38, 0x37, 0xcd, 0xa2, 0x7f, + 0x23, 0x04, 0xa1, 0xe3, 0xd7, 0x5c, 0x8b, 0xb8, 0x8e, 0x6c, 0x67, 0xa0, + 0x06, 0xcc, 0x63, 0xda, 0xc9, 0x00, 0x17, 0xb8, 0x65, 0xdc, 0x02, 0x68, + 0xef, 0xc5, 0x3e, 0x2c, 0xb7, 0x5c, 0xc6, 0xf1, 0x00, 0x8b, 0x34, 0x83, + 0x9c, 0xc8, 0x0b, 0x26, 0xa0, 0x19, 0x44, 0x0c, 0x0d, 0x34, 0x13, 0x2b, + 0xc4, 0x69, 0x05, 0x19, 0x13, 0x1d, 0xe1, 0x54, 0x34, 0xb7, 0x30, 0xb3, + 0xa2, 0x49, 0x2f, 0x6e, 0xf6, 0x47, 0x1c, 0xf1, 0xc5, 0x56, 0x84, 0x63, + 0xa3, 0x38, 0x71, 0x02, 0x13, 0x5e, 0xb1, 0xa8, 0x63, 0x5f, 0x0a, 0x63, + 0xe3, 0x31, 0x76, 0x91, 0x4b, 0x40, 0xcc, 0x24, 0x94, 0x00, 0x2c, 0x0e, + 0x19, 0xc3, 0x8a, 0x0d, 0x97, 0xc0, 0xca, 0x56, 0x32, 0x26, 0x15, 0x19, + 0x19, 0x30, 0x30, 0xf3, 0x3a, 0xce, 0xc6, 0x81, 0x25, 0xd3, 0x3c, 0x5a, + 0xf2, 0x6a, 0x9f, 0x97, 0xb1, 0xb1, 0x81, 0xa0, 0x0e, 0x4e, 0x91, 0x44, + 0xa2, 0xd4, 0x81, 0x1d, 0x76, 0x54, 0xf9, 0xb9, 0x58, 0xcc, 0xe1, 0x26, + 0xe0, 0x30, 0xa7, 0xfe, 0xc0, 0x45, 0xa0, 0xbc, 0xb8, 0x2e, 0xd4, 0x05, + 0x09, 0x64, 0x3f, 0x3f, 0x57, 0x36, 0xb6, 0x52, 0x11, 0x6a, 0x40, 0x08, + 0xed, 0xa6, 0x5f, 0xa1, 0x89, 0x5e, 0xc8, 0x23, 0x90, 0xc2, 0x71, 0x3b, + 0x43, 0x03, 0xbb, 0x6e, 0x7b, 0x4b, 0x41, 0x64, 0x29, 0xd8, 0xab, 0xbc, + 0x49, 0x7b, 0x98, 0x90, 0x72, 0x24, 0xd0, 0x65, 0xb3, 0xdc, 0x5a, 0x01, + 0x79, 0x07, 0xbb, 0xf7, 0x07, 0x9e, 0x08, 0xb7, 0x70, 0xaf, 0xd0, 0x59, + 0xa3, 0x1a, 0x30, 0x93, 0x35, 0x80, 0xef, 0x49, 0xb5, 0xc4, 0x8b, 0x0a, + 0xce, 0x67, 0x56, 0x97, 0xd6, 0xb1, 0x04, 0x19, 0x92, 0xdb, 0x62, 0x24, + 0x60, 0x92, 0x37, 0x69, 0x54, 0x98, 0x0a, 0xa0, 0x3d, 0xcf, 0xcb, 0x5a, + 0xde, 0xa3, 0x6b, 0x0b, 0x21, 0x38, 0xae, 0x34, 0x9d, 0x5e, 0x27, 0x0f, + 0x0d, 0x83, 0x64, 0x0b, 0xe9, 0x88, 0x5c, 0xc9, 0x37, 0x1c, 0x64, 0x90, + 0xc1, 0xf3, 0x99, 0x59, 0xc9, 0xa1, 0x92, 0xe5, 0x84, 0xdf, 0xf9, 0xcb, + 0x2d, 0x8c, 0x22, 0x97, 0xb1, 0x17, 0xb9, 0xd7, 0x62, 0x7a, 0xc5, 0xb2, + 0xd2, 0x93, 0x35, 0x55, 0x87, 0x18, 0xa5, 0xa7, 0xc3, 0x45, 0x64, 0xb0, + 0xc0, 0xa1, 0x10, 0x5f, 0x0a, 0x00, 0xe0, 0x08, 0x4a, 0xca, 0x18, 0x5c, + 0x5a, 0x54, 0x74, 0x1e, 0x4b, 0x40, 0x53, 0xa4, 0x31, 0x71, 0x36, 0x78, + 0xf5, 0x95, 0x1d, 0x3f, 0xe4, 0x7e, 0x07, 0x19, 0xa0, 0x82, 0x01, 0x7a, + 0xb7, 0x3b, 0x89, 0x2e, 0xf3, 0xc7, 0x7e, 0xcb, 0x17, 0x0b, 0xf3, 0x86, + 0xab, 0x36, 0xc8, 0x98, 0x76, 0xbc, 0x8a, 0xe6, 0x7b, 0x0c, 0xb8, 0x2e, + 0xe4, 0x27, 0x93, 0xd9, 0xd7, 0x43, 0x51, 0x72, 0x04, 0x3e, 0x8c, 0xa3, + 0xa8, 0xe1, 0xa8, 0x31, 0x97, 0x89, 0x11, 0x21, 0x93, 0x2a, 0x0a, 0xb2, + 0xef, 0x46, 0x78, 0x9e, 0xab, 0x0b, 0xed, 0xf5, 0xa5, 0x70, 0x7a, 0x4b, + 0x10, 0x03, 0x5b, 0xd3, 0x31, 0xb0, 0x1e, 0x29, 0x83, 0x70, 0xe1, 0x12, + 0x44, 0x3a, 0x48, 0xd9, 0x6c, 0xa9, 0x50, 0x38, 0x32, 0xe3, 0x49, 0x5d, + 0xd2, 0xe5, 0x71, 0x37, 0x4c, 0x1f, 0x57, 0xb6, 0xb9, 0xa0, 0xa0, 0x74, + 0xaa, 0x29, 0x73, 0x6c, 0x48, 0x8f, 0xe1, 0xd8, 0x23, 0x66, 0x2a, 0xbd, + 0x3a, 0x37, 0x9c, 0xa4, 0x30, 0x07, 0xde, 0x31, 0x73, 0x92, 0xd3, 0x32, + 0xa6, 0x82, 0x6a, 0xce, 0x38, 0x1a, 0xf4, 0xc8, 0x2c, 0x31, 0xf7, 0xc7, + 0x81, 0x78, 0x8c, 0x70, 0x5c, 0x4e, 0x6f, 0x06, 0xb1, 0x48, 0x88, 0x50, + 0xaa, 0xe5, 0x5b, 0x68, 0x72, 0x73, 0x15, 0x70, 0x44, 0x4d, 0xb4, 0x9a, + 0xc9, 0xa5, 0x3e, 0x96, 0x35, 0x81, 0x6c, 0x1c, 0x53, 0x7d, 0x24, 0x30, + 0xf9, 0x22, 0x12, 0x43, 0x17, 0x59, 0x2b, 0x36, 0xa6, 0x86, 0x85, 0x85, + 0x9e, 0xf3, 0x34, 0xb2, 0x78, 0x2a, 0x50, 0x72, 0xa6, 0x61, 0xc5, 0x5c, + 0x39, 0x29, 0x49, 0x75, 0x57, 0x23, 0x19, 0x47, 0x4d, 0xb4, 0xe3, 0x3d, + 0xff, 0xdc, 0x5e, 0x88, 0xab, 0xa8, 0x3b, 0x6b, 0x8d, 0x46, 0x87, 0x53, + 0xc8, 0x8b, 0xa8, 0x98, 0xdb, 0x11, 0x6c, 0xf0, 0x41, 0x5d, 0xb4, 0x1c, + 0x17, 0xd3, 0x46, 0x46, 0x2b, 0xba, 0xc4, 0xa4, 0x42, 0x07, 0xd0, 0xc9, + 0x3a, 0x4b, 0x71, 0xc8, 0xd0, 0x0d, 0x47, 0xb9, 0x69, 0xc6, 0x90, 0xab, + 0xb3, 0x71, 0xc0, 0xbb, 0xe1, 0xa3, 0x67, 0xa3, 0x04, 0x66, 0x43, 0xc4, + 0x66, 0xc8, 0x67, 0xe3, 0x41, 0x80, 0x5e, 0xb4, 0x35, 0xf8, 0x31, 0x63, + 0x58, 0xf6, 0x9e, 0x6a, 0x49, 0x76, 0xbb, 0x54, 0xab, 0xd9, 0x0a, 0xa9, + 0x63, 0xb5, 0x2b, 0xdf, 0xc9, 0x3b, 0xa2, 0x7c, 0x83, 0x3b, 0xf5, 0xcc, + 0xb4, 0xa2, 0xca, 0x5b, 0xab, 0xa1, 0x2d, 0x70, 0x01, 0x6a, 0xcb, 0x87, + 0x55, 0x82, 0x41, 0x6b, 0xa1, 0xa8, 0x22, 0x46, 0xca, 0xe8, 0x48, 0x96, + 0x47, 0xb3, 0x69, 0x90, 0xf9, 0x12, 0x8e, 0x35, 0x04, 0x07, 0xcb, 0x61, + 0x4c, 0x92, 0x6e, 0x49, 0x2b, 0xb6, 0xd7, 0x80, 0x21, 0xe7, 0x3c, 0xb5, + 0x46, 0x41, 0x31, 0x7f, 0xf2, 0x82, 0xb9, 0x43, 0x64, 0x62, 0x18, 0x3b, + 0x93, 0x75, 0xa5, 0xd3, 0x28, 0x79, 0x35, 0x5a, 0x96, 0x21, 0x5b, 0x31, + 0xac, 0xe0, 0x9c, 0x93, 0x77, 0x92, 0x40, 0x26, 0x0e, 0xb8, 0xb9, 0x74, + 0xfe, 0x04, 0x94, 0x07, 0x22, 0x9b, 0x80, 0x8b, 0x78, 0x18, 0x14, 0x2c, + 0x3a, 0x07, 0x1c, 0xc5, 0x56, 0x1f, 0x56, 0x59, 0x3e, 0x76, 0x05, 0x34, + 0x6c, 0x63, 0x81, 0x7f, 0xeb, 0x0b, 0x83, 0x6a, 0xbb, 0x78, 0x60, 0x77, + 0xbc, 0x7a, 0x7e, 0x35, 0x11, 0x27, 0x5c, 0x16, 0x0b, 0xa9, 0x01, 0x7c, + 0x57, 0x77, 0x4e, 0x95, 0x03, 0x04, 0x8c, 0x29, 0xb9, 0x59, 0xf5, 0xc9, + 0xe3, 0x54, 0xa8, 0xe1, 0x37, 0xcd, 0x72, 0xc8, 0x73, 0xad, 0x19, 0x78, + 0xf6, 0x93, 0x24, 0xdc, 0x28, 0x25, 0x04, 0xe0, 0xa2, 0x21, 0xfb, 0x1b, + 0x74, 0x00, 0x04, 0xa6, 0x3a, 0xa7, 0xa2, 0xd3, 0x3e, 0x00, 0xbd, 0x0d, + 0xa2, 0x99, 0x62, 0xb8, 0xf3, 0x02, 0x33, 0xc7, 0x83, 0x17, 0xf2, 0x2c, + 0xe7, 0xd0, 0x68, 0xf1, 0x6c, 0x17, 0x22, 0x99, 0x42, 0x25, 0xe8, 0x00, + 0x49, 0x1e, 0x05, 0x72, 0x32, 0x01, 0xd8, 0x1b, 0xe6, 0x3e, 0x10, 0xd0, + 0x55, 0x02, 0xe1, 0xff, 0x54, 0x58, 0x04, 0x92, 0xd7, 0xdc, 0x56, 0x82, + 0xeb, 0xf0, 0x9e, 0x85, 0x77, 0x3b, 0x4e, 0x61}, + // cipherTextDigest + {0xea, 0xe9, 0xf8, 0x7a, 0x58, 0x6b, 0xc4, 0x96, 0xd3, 0xb7, 0x21, + 0xda, 0xef, 0x06, 0xdb, 0xda, 0x5a, 0x66, 0x01, 0xa9, 0x53, 0xb0, + 0x57, 0x37, 0xb6, 0xe2, 0x2a, 0x74, 0x0c, 0x22, 0xf7, 0xa2}, + // secret + {0x5d, 0x53, 0x7c, 0xd0, 0xef, 0x7b, 0x58, 0xf0, 0xfe, 0x95, 0x37, + 0x04, 0x73, 0xb9, 0x68, 0x78, 0xf1, 0x38, 0xec, 0xc2, 0x59, 0xad, + 0xfb, 0xf7, 0x7e, 0xbd, 0x73, 0x28, 0xb8, 0x22, 0xd9, 0xd9}, + true}, + // tcID: 52 + {52, + params_ml_kem1024_test_mode, + // entropy + {0xfd, 0xe0, 0x93, 0xf2, 0x3a, 0xa3, 0xe2, 0x70, 0x45, 0xe3, 0x0e, + 0x08, 0x24, 0xa7, 0x7e, 0xf0, 0x15, 0x18, 0xbf, 0xb7, 0xb9, 0xf6, + 0xe3, 0x0e, 0xe2, 0xe2, 0x75, 0xf2, 0xfc, 0xcc, 0xdc, 0x81}, + // publicKey + {0x6f, 0xb1, 0xb3, 0x51, 0x42, 0x51, 0xdd, 0x37, 0x41, 0x01, 0xe8, 0xcc, + 0x62, 0xdc, 0x4c, 0x20, 0x89, 0x9a, 0xd4, 0xd5, 0x72, 0x2b, 0x12, 0x32, + 0xa0, 0xb3, 0x29, 0x07, 0x72, 0x6d, 0xb6, 0x13, 0x9a, 0xb6, 0x56, 0x88, + 0xff, 0x9c, 0x28, 0xdd, 0xc1, 0x38, 0x7f, 0x65, 0x37, 0xe2, 0xe8, 0x45, + 0x9c, 0x09, 0x61, 0x76, 0xa3, 0x1f, 0xf8, 0xfc, 0x09, 0x16, 0x17, 0x00, + 0x6b, 0x1c, 0x68, 0x52, 0x0a, 0xb4, 0x64, 0x11, 0x3f, 0xa3, 0x30, 0x68, + 0x48, 0x49, 0x41, 0xb7, 0x99, 0x22, 0x29, 0x1c, 0xc1, 0x4f, 0x12, 0x3b, + 0x49, 0xd7, 0xbc, 0x75, 0x90, 0x2b, 0x4a, 0x16, 0x34, 0xa0, 0x99, 0x0f, + 0xcb, 0x66, 0x12, 0xc8, 0xd0, 0x7f, 0x2a, 0xb8, 0xca, 0xce, 0x92, 0x14, + 0xbb, 0x91, 0x45, 0xca, 0xcb, 0xbc, 0xc6, 0xf5, 0x48, 0xcd, 0x97, 0xac, + 0x4d, 0xf9, 0x28, 0xea, 0x45, 0x9e, 0x81, 0xc2, 0x4c, 0xe1, 0xf8, 0xc0, + 0x68, 0x65, 0x3a, 0xa4, 0xa2, 0x9b, 0x9d, 0x23, 0xa7, 0xa4, 0x8b, 0x9b, + 0xca, 0xf9, 0x9a, 0x2c, 0xcc, 0x0a, 0x57, 0x27, 0x45, 0x6d, 0x84, 0xad, + 0xbf, 0xa7, 0x9e, 0xe5, 0x8a, 0xa6, 0xcf, 0xe4, 0x98, 0x7a, 0x2b, 0x1d, + 0x2e, 0x20, 0x16, 0x15, 0x32, 0x8f, 0xd5, 0xaa, 0x92, 0xfe, 0x3b, 0x22, + 0xf2, 0x38, 0x23, 0xe9, 0x9b, 0x1f, 0x4a, 0xfb, 0x7c, 0x69, 0x74, 0x8a, + 0xbf, 0xb1, 0x24, 0x68, 0xd6, 0x24, 0xbc, 0x67, 0x73, 0x19, 0xc8, 0x76, + 0x16, 0x07, 0x11, 0x36, 0xa5, 0x60, 0x14, 0x79, 0x68, 0x63, 0xd5, 0x1f, + 0x3d, 0x91, 0x31, 0x35, 0x87, 0x7d, 0xfc, 0xe7, 0x65, 0x1f, 0x75, 0xab, + 0x1b, 0xa1, 0xc0, 0x00, 0x66, 0x57, 0x8b, 0x5c, 0xc0, 0x7d, 0xe6, 0x12, + 0xe1, 0x9a, 0x54, 0xfe, 0x06, 0x21, 0x82, 0xc4, 0xb1, 0xe1, 0x9b, 0x1f, + 0x0a, 0x42, 0x11, 0xa9, 0xda, 0x40, 0x1e, 0x12, 0xc0, 0x40, 0x7b, 0x89, + 0x7f, 0x37, 0x76, 0x69, 0x0a, 0x45, 0xed, 0xc5, 0x78, 0x83, 0x06, 0x09, + 0xe3, 0x1b, 0x4a, 0xd9, 0xd5, 0xa5, 0x17, 0x22, 0xa2, 0x21, 0xe3, 0x3e, + 0x74, 0xd1, 0xb5, 0xbc, 0x64, 0xc5, 0xee, 0xba, 0x66, 0x43, 0xeb, 0x9b, + 0x32, 0xe5, 0x4a, 0x1d, 0x4b, 0x77, 0x0d, 0xe8, 0xc2, 0x01, 0xc2, 0x91, + 0xd2, 0xe7, 0x98, 0x1e, 0x1b, 0x9b, 0xda, 0x14, 0xbf, 0x26, 0x75, 0x52, + 0x7c, 0x70, 0x66, 0x4a, 0x94, 0x1e, 0x4f, 0x48, 0x05, 0xaf, 0x02, 0x5a, + 0x06, 0x9c, 0x03, 0x68, 0x73, 0x68, 0x99, 0xf0, 0xa2, 0xd5, 0xfa, 0x24, + 0xd8, 0x67, 0x2a, 0x70, 0x15, 0x28, 0xe3, 0x38, 0x17, 0xa1, 0x89, 0xb1, + 0xce, 0x65, 0x53, 0x33, 0xd8, 0x44, 0x81, 0x90, 0x3a, 0xa3, 0x44, 0x1a, + 0xe4, 0x25, 0x7b, 0xe7, 0x68, 0x37, 0x35, 0xcb, 0x98, 0xd0, 0x39, 0x58, + 0x5f, 0x4c, 0x6d, 0x84, 0x23, 0x21, 0x83, 0x68, 0x75, 0xc1, 0xa7, 0x8f, + 0x24, 0x7b, 0x3d, 0x27, 0x78, 0x18, 0x26, 0xfc, 0xce, 0x47, 0xf7, 0x53, + 0xc8, 0x8a, 0x57, 0xa8, 0xf3, 0x9e, 0x87, 0x66, 0x71, 0x1a, 0xd5, 0x75, + 0x3c, 0x06, 0x0b, 0x7a, 0xe5, 0xb7, 0xea, 0xe8, 0x50, 0x21, 0x04, 0x13, + 0x06, 0xa7, 0x09, 0x60, 0xfc, 0xb5, 0xcd, 0x64, 0xa6, 0x55, 0xd3, 0x66, + 0xd5, 0x9b, 0x70, 0x3b, 0x52, 0xa5, 0xb4, 0x10, 0x2c, 0x5c, 0x78, 0xb2, + 0x98, 0x59, 0x5f, 0x1d, 0x7a, 0x8a, 0x28, 0x54, 0x0c, 0x40, 0x60, 0x3f, + 0x2b, 0x42, 0xb7, 0x90, 0x52, 0xa4, 0x56, 0xe1, 0x14, 0x60, 0x2a, 0x94, + 0x8d, 0xf4, 0x25, 0x2c, 0x17, 0xcc, 0x66, 0x70, 0x07, 0x28, 0xd6, 0x07, + 0x2b, 0xa4, 0x41, 0x61, 0xb0, 0x52, 0x38, 0x64, 0x1e, 0xda, 0x15, 0xcf, + 0xf9, 0x2c, 0x4c, 0x89, 0xc7, 0x54, 0x59, 0x86, 0x15, 0x61, 0x9b, 0x4e, + 0xb2, 0x83, 0x8f, 0x64, 0xc6, 0x57, 0xa2, 0x78, 0xbf, 0x4c, 0xa1, 0x22, + 0x24, 0x71, 0x7e, 0xbb, 0xa1, 0xa8, 0x63, 0x50, 0xbf, 0xa2, 0xa0, 0x55, + 0x94, 0xa8, 0x85, 0xb3, 0xe6, 0x1d, 0x9c, 0xa4, 0xbc, 0xe5, 0xd6, 0xb6, + 0x32, 0xe2, 0x14, 0xf3, 0xb1, 0x2b, 0x65, 0x89, 0x15, 0xd2, 0xe4, 0x23, + 0xfd, 0x46, 0x68, 0x6f, 0x03, 0x1d, 0x29, 0xfa, 0xab, 0x04, 0x68, 0x83, + 0x88, 0x45, 0x6c, 0xf5, 0x8a, 0x0b, 0xee, 0x7a, 0x73, 0xcd, 0x01, 0x6c, + 0xe8, 0xb6, 0xbe, 0x1b, 0x76, 0x2f, 0x16, 0x08, 0x94, 0xf6, 0xd6, 0x1f, + 0xab, 0x48, 0x91, 0x5e, 0x54, 0xb1, 0xf9, 0x19, 0x03, 0x1a, 0x29, 0x32, + 0x11, 0xf4, 0xce, 0x07, 0xb5, 0x4c, 0x74, 0x65, 0x39, 0x91, 0xd4, 0xa7, + 0x6e, 0x2c, 0xb6, 0x84, 0x76, 0xcd, 0x7b, 0x12, 0x1f, 0xe7, 0xcb, 0x80, + 0xdc, 0x44, 0xa0, 0x92, 0x86, 0x4a, 0xad, 0x8a, 0x12, 0xc8, 0xd3, 0x86, + 0x04, 0x73, 0xb6, 0x0a, 0x37, 0x0a, 0xdd, 0x8b, 0x25, 0xe3, 0x15, 0xa9, + 0x9b, 0x70, 0x8f, 0x80, 0xb4, 0x4a, 0x7d, 0x01, 0xbc, 0x3e, 0xd4, 0xbe, + 0x77, 0x19, 0xbf, 0xcc, 0x50, 0x94, 0xb9, 0xca, 0x47, 0x0b, 0xc0, 0xce, + 0x9d, 0x1a, 0x45, 0xcc, 0x99, 0x25, 0xbf, 0x43, 0xb9, 0xfc, 0x47, 0x5a, + 0xbc, 0x97, 0x3d, 0xdc, 0x15, 0x3f, 0xbb, 0x56, 0x89, 0xd6, 0x24, 0x19, + 0x88, 0x16, 0x14, 0x3c, 0x05, 0x4d, 0x76, 0x7c, 0xc7, 0xfa, 0xa0, 0x84, + 0x8f, 0xa3, 0x9d, 0x0f, 0x82, 0x52, 0x33, 0xeb, 0x24, 0x22, 0x29, 0x25, + 0x87, 0x23, 0x61, 0x69, 0xc7, 0x9f, 0x2c, 0x71, 0x37, 0x5a, 0xe4, 0x36, + 0x82, 0xfc, 0x52, 0xaa, 0x75, 0xc8, 0x15, 0x18, 0x40, 0x28, 0xfa, 0xbb, + 0xc6, 0x63, 0x9b, 0xde, 0x6b, 0xa4, 0x16, 0x09, 0xc2, 0x72, 0x90, 0xa1, + 0x95, 0x48, 0x9c, 0x81, 0xc6, 0x4a, 0x41, 0x29, 0x25, 0x2b, 0xb0, 0x56, + 0x65, 0x4c, 0xc6, 0x70, 0x72, 0xbc, 0xce, 0x96, 0x75, 0x39, 0x55, 0x4e, + 0x34, 0x38, 0x3a, 0xc5, 0x6b, 0x3f, 0xf7, 0x8a, 0xa8, 0xa9, 0x32, 0x5b, + 0xb9, 0x31, 0x4b, 0x16, 0x79, 0x5a, 0xf5, 0xf2, 0x54, 0x86, 0xca, 0x21, + 0x4a, 0x41, 0xb7, 0xc3, 0x83, 0x65, 0x53, 0x03, 0xce, 0x73, 0xf4, 0x9a, + 0x83, 0x19, 0x07, 0x94, 0x91, 0x41, 0xc2, 0x94, 0x4e, 0xc8, 0x41, 0x5e, + 0xe4, 0x66, 0x6f, 0x4f, 0xbc, 0x85, 0xe6, 0x7c, 0xa3, 0xf1, 0x5c, 0x68, + 0xb4, 0xd2, 0x3b, 0xb0, 0x88, 0x7c, 0x2d, 0xda, 0x81, 0x35, 0x3c, 0x6f, + 0x21, 0x74, 0x0c, 0x08, 0xdb, 0x18, 0x7a, 0xaa, 0xa8, 0x8e, 0xd5, 0xb5, + 0xe6, 0x18, 0x01, 0x19, 0x13, 0x53, 0x4a, 0x33, 0x2d, 0xc7, 0x4c, 0x81, + 0x0c, 0x47, 0x60, 0x1a, 0x49, 0x53, 0xfd, 0xf2, 0x6d, 0xc7, 0x73, 0x8e, + 0x2b, 0xa5, 0xa5, 0x6f, 0x45, 0x36, 0x68, 0x40, 0xbe, 0xfe, 0x36, 0xca, + 0x04, 0xd2, 0x01, 0x25, 0x85, 0x6f, 0x98, 0xf2, 0x88, 0x30, 0x47, 0x32, + 0x03, 0x72, 0x8c, 0x4b, 0x90, 0x38, 0xe5, 0xca, 0x72, 0x91, 0x07, 0x45, + 0x08, 0xcc, 0x55, 0x99, 0x78, 0x96, 0xdb, 0x93, 0x53, 0xce, 0xca, 0x7c, + 0x76, 0x00, 0x3d, 0x91, 0xe2, 0xbd, 0x8a, 0xab, 0xa8, 0xec, 0x70, 0x6f, + 0x6a, 0xf3, 0xc9, 0xc3, 0xba, 0x88, 0x82, 0x27, 0x8e, 0x60, 0x97, 0xbe, + 0xcf, 0x17, 0x99, 0x46, 0xfc, 0x3d, 0xc3, 0x1a, 0xc8, 0xec, 0x36, 0x22, + 0x8f, 0x49, 0xb9, 0x35, 0xa5, 0x7b, 0x1d, 0x7b, 0x2c, 0x16, 0x06, 0x8f, + 0xd9, 0x77, 0x65, 0x6d, 0x71, 0x22, 0x73, 0x79, 0x33, 0xe8, 0x4b, 0x1f, + 0xa5, 0x4a, 0xc1, 0x79, 0x2c, 0x72, 0x19, 0x88, 0x96, 0x81, 0x98, 0x5a, + 0x16, 0x01, 0x2b, 0x52, 0x4b, 0x4a, 0x92, 0xe4, 0x99, 0xb5, 0x28, 0x4e, + 0xbe, 0x09, 0x3d, 0x4d, 0xaa, 0x8d, 0x90, 0xb0, 0x47, 0x14, 0xcc, 0x62, + 0xe1, 0x0c, 0x68, 0x8f, 0x83, 0x8e, 0x9c, 0x02, 0x8c, 0x4d, 0x72, 0x8b, + 0x1d, 0x1a, 0xbf, 0x9f, 0x42, 0x40, 0xb4, 0x63, 0xbb, 0x58, 0x8b, 0xc4, + 0xbf, 0x1a, 0xce, 0x20, 0xf2, 0xc2, 0x44, 0xec, 0xa9, 0x41, 0xb2, 0xa4, + 0x91, 0x00, 0x09, 0x27, 0x67, 0x03, 0x50, 0xb8, 0x15, 0x49, 0x51, 0x78, + 0x66, 0xe4, 0x71, 0x18, 0x46, 0x74, 0xef, 0x13, 0x69, 0x57, 0x70, 0x44, + 0x0e, 0xb1, 0xbd, 0x49, 0xf5, 0x51, 0x3c, 0x10, 0xaf, 0x57, 0x02, 0xab, + 0xd2, 0x91, 0x92, 0x5b, 0xc6, 0xb5, 0x14, 0x96, 0x39, 0x80, 0xc3, 0x3d, + 0x06, 0xfc, 0x13, 0x0b, 0xa9, 0x0b, 0xea, 0x70, 0xcd, 0xfc, 0xb9, 0xbe, + 0x6c, 0x07, 0x63, 0x59, 0xd8, 0x2a, 0x7f, 0xe1, 0xca, 0x8e, 0xda, 0xae, + 0xb1, 0xdb, 0x31, 0x30, 0x15, 0x0a, 0x6f, 0xc7, 0xad, 0x89, 0x44, 0x26, + 0x10, 0x8b, 0x4f, 0xd7, 0x62, 0x4e, 0x43, 0xfc, 0x3d, 0xc4, 0x1a, 0x98, + 0xd2, 0xe0, 0x47, 0x5f, 0x16, 0x6e, 0xbc, 0x8a, 0x9b, 0xd4, 0x32, 0x93, + 0xfe, 0xc1, 0x4a, 0xd1, 0xe1, 0x92, 0x73, 0x43, 0x0f, 0xdf, 0x87, 0x7c, + 0x59, 0x61, 0x3e, 0xa5, 0xd8, 0x27, 0x82, 0x21, 0x2f, 0x6b, 0xb9, 0x88, + 0x6c, 0xdc, 0x3c, 0x51, 0xe8, 0x7d, 0xfd, 0xeb, 0x23, 0x6d, 0xc9, 0x0b, + 0xe5, 0x54, 0xc9, 0xad, 0xa4, 0x8d, 0x1e, 0x21, 0xa7, 0xba, 0xc9, 0x1d, + 0x91, 0xc8, 0x4c, 0xda, 0x66, 0x95, 0x71, 0x58, 0x2b, 0x4f, 0xc1, 0x7c, + 0xda, 0xcb, 0xae, 0xa9, 0xb0, 0x9b, 0x6a, 0x4a, 0xc6, 0x64, 0x05, 0x25, + 0x42, 0x77, 0xc9, 0x5d, 0xc9, 0x57, 0xab, 0x24, 0xac, 0x91, 0xc6, 0x5d, + 0xde, 0xd3, 0xc0, 0x5f, 0x9b, 0x08, 0xf9, 0x79, 0x47, 0x0d, 0xa0, 0x5e, + 0x65, 0x2a, 0x01, 0x55, 0xc7, 0x33, 0x45, 0x27, 0x47, 0xb8, 0x94, 0x6e, + 0x81, 0x18, 0xab, 0x4c, 0xf3, 0x54, 0x49, 0x25, 0x86, 0x06, 0x2c, 0x56, + 0xbd, 0x2c, 0x9a, 0xee, 0xd1, 0x33, 0xe5, 0xbb, 0x62, 0xd7, 0xd7, 0xc9, + 0x60, 0xd0, 0x04, 0x44, 0xba, 0xc4, 0xc7, 0x54, 0x52, 0xae, 0x0a, 0x89, + 0x80, 0x7c, 0xc4, 0x50, 0x88, 0x9d, 0xa8, 0xd9, 0x6f, 0xb5, 0x0c, 0x31, + 0xc2, 0x3b, 0x05, 0xcb, 0x8c, 0x83, 0x9b, 0x01, 0x6d, 0x3d, 0x98, 0x00, + 0x28, 0x2c, 0x0a, 0x79, 0x17, 0x05, 0xbd, 0xf6, 0xbd, 0x98, 0xd8, 0xb5, + 0xbf, 0xa9, 0x4c, 0x3e, 0xbc, 0xb4, 0x0f, 0x76, 0x4d, 0x82, 0xc0, 0x90, + 0xd9, 0xf1, 0x48, 0xb9, 0xd4, 0x7e, 0x9b, 0xc7, 0x90, 0x5a, 0xa3, 0xa8, + 0xb8, 0xf1, 0x22, 0xbb, 0xc4, 0x66, 0x0d, 0x83, 0x2e, 0x4a, 0x65, 0x84, + 0x30, 0xf9, 0x64, 0x23, 0x90, 0x6e, 0xcf, 0xe6, 0xa9, 0x86, 0x6a, 0xc1, + 0x34, 0xb1, 0xca, 0xfa, 0xdc, 0x85, 0x89, 0xb1, 0x32, 0x7d, 0x1c, 0xbe, + 0xd2, 0x0a, 0x21, 0x94, 0xda, 0x90, 0xe6, 0x96, 0x25, 0x06, 0x92, 0xb5, + 0x52, 0x2a, 0xbd, 0x7a, 0x93, 0x8b, 0x98, 0x57, 0x32, 0x85, 0x01, 0xc2, + 0xdb, 0xf0, 0x5c, 0x72, 0x45, 0x65, 0x60, 0xe5, 0xc9, 0x25, 0xfa, 0xc4, + 0xfa, 0xc2, 0xbe, 0xa3, 0x3a, 0x6a, 0xb5, 0x88, 0x38, 0x16, 0x84, 0x24, + 0x4b, 0x58, 0xc5, 0xd3, 0xe7, 0xc9, 0xd1, 0x17, 0x0c, 0x20, 0xfb, 0xca, + 0xe4, 0xd6, 0x41, 0x5e, 0xf4, 0x5d, 0x87, 0x4c, 0xc3, 0x01, 0xc3, 0xa1, + 0x5e, 0x11, 0xbb, 0xac, 0xe3, 0x70, 0x82, 0xf6, 0x32, 0xeb, 0xea, 0x76, + 0xd8, 0x32, 0x3e, 0x4b, 0xf5, 0x4a, 0x63, 0x88, 0x06, 0x36, 0xe1, 0x99, + 0x7a, 0x47, 0x47, 0x6e, 0x81, 0x72, 0xf8, 0xc0, 0x14, 0xdf, 0x7b, 0x47, + 0x7a, 0x63, 0x1f, 0x10, 0xeb, 0x61, 0x0c, 0xa9, 0xd6, 0x03, 0xb7, 0x3f, + 0x36, 0x3a, 0xf2, 0x0b, 0xb6, 0x5d, 0x6d, 0xae, 0xc6, 0x32, 0x8b, 0xa1, + 0x49, 0x5d, 0x7a, 0xff, 0x28, 0xd8, 0xe2, 0xb2}, + // cipherTextDigest + {0xc1, 0x3f, 0x63, 0x3c, 0x71, 0xdf, 0xd2, 0x90, 0x17, 0x1f, 0x5f, + 0xb0, 0xd0, 0x2b, 0x81, 0xd5, 0x74, 0xb1, 0x28, 0x51, 0x0d, 0x0e, + 0xc1, 0xf5, 0x24, 0x37, 0xc8, 0x25, 0x2c, 0xbc, 0x4f, 0xf0}, + // secret + {0x44, 0xb8, 0x20, 0x92, 0xb2, 0x2c, 0x16, 0x66, 0xac, 0x20, 0x80, + 0x63, 0xfa, 0x54, 0xf1, 0xd1, 0x40, 0x52, 0x8f, 0xbe, 0x7f, 0x27, + 0xb1, 0x4f, 0x55, 0x9e, 0x04, 0x7b, 0x07, 0x00, 0x03, 0x93}, + true}, + // tcID: 53 + {53, + params_ml_kem1024_test_mode, + // entropy + {0xb3, 0x19, 0x20, 0xdc, 0x10, 0x29, 0x28, 0xf4, 0x97, 0xe0, 0x8e, + 0xeb, 0x72, 0xa4, 0x1f, 0x17, 0x53, 0xdb, 0x93, 0x9c, 0xa3, 0x0e, + 0x8a, 0x3b, 0x48, 0xb0, 0x59, 0x54, 0x4f, 0x8d, 0xf0, 0xee}, + // publicKey + {0xf0, 0x6b, 0x1c, 0x4c, 0xf6, 0xa5, 0xac, 0x4b, 0x62, 0xa7, 0xf9, 0xb2, + 0x0c, 0xd5, 0x97, 0x7e, 0xc7, 0x2e, 0xeb, 0x57, 0x3a, 0xff, 0x6a, 0x8b, + 0xa3, 0xe9, 0x18, 0xe2, 0xa6, 0x19, 0x6a, 0x8b, 0xb1, 0x06, 0xa0, 0x8c, + 0xe0, 0x9c, 0x49, 0x63, 0xd3, 0x9f, 0x3e, 0x30, 0x56, 0x2d, 0x71, 0x9a, + 0xd9, 0x23, 0x04, 0x6f, 0x89, 0x88, 0x2d, 0x66, 0xce, 0xac, 0xc0, 0x57, + 0x4e, 0xb7, 0xb5, 0x45, 0x60, 0x4a, 0xec, 0xb6, 0x36, 0x4d, 0x92, 0x08, + 0x4b, 0xf8, 0x14, 0x86, 0xe9, 0x34, 0xcb, 0xdb, 0x36, 0xe7, 0xa3, 0x55, + 0x8d, 0x61, 0x8d, 0xa6, 0xc7, 0x38, 0x0b, 0xa4, 0x75, 0x26, 0x9a, 0x1e, + 0x5f, 0x1a, 0x87, 0x20, 0x77, 0x4a, 0x6f, 0x45, 0x1d, 0x97, 0x32, 0x89, + 0xab, 0x74, 0x6f, 0x57, 0xc0, 0x06, 0x63, 0x3c, 0x5c, 0x5a, 0xc6, 0x91, + 0x60, 0xf4, 0x01, 0xa2, 0xb1, 0xce, 0x17, 0xa0, 0x2f, 0x57, 0xc8, 0x1d, + 0x88, 0x25, 0x8d, 0xc3, 0xb0, 0x7f, 0xe9, 0x93, 0x82, 0x9e, 0x24, 0x2d, + 0xbf, 0xa7, 0x34, 0x9b, 0x97, 0x83, 0xae, 0x34, 0xb6, 0x3f, 0x1c, 0xab, + 0xe5, 0x77, 0xca, 0xd7, 0xa1, 0x6b, 0x84, 0x5a, 0x66, 0x2f, 0x3b, 0x11, + 0x72, 0xa2, 0x33, 0x79, 0xb1, 0xa1, 0x35, 0x06, 0x9a, 0x29, 0x2a, 0x5d, + 0x14, 0x83, 0x77, 0x6b, 0xf2, 0x38, 0x6a, 0x81, 0x94, 0x62, 0xcb, 0x02, + 0x13, 0x13, 0x8b, 0x1e, 0x76, 0x49, 0xc2, 0x55, 0x63, 0x9d, 0xd1, 0xc2, + 0x50, 0x75, 0xa8, 0xb1, 0x05, 0x7d, 0x68, 0x85, 0x18, 0xbc, 0x08, 0x5e, + 0x48, 0x3a, 0x4d, 0x16, 0x37, 0x33, 0x5e, 0xf2, 0x8d, 0x9a, 0x52, 0x54, + 0xc8, 0x3a, 0x08, 0xae, 0xd9, 0x87, 0x32, 0xa1, 0x5e, 0x46, 0x83, 0x8e, + 0xd2, 0xfb, 0x21, 0x69, 0x17, 0x6f, 0xaf, 0x92, 0xc3, 0x09, 0xd9, 0x47, + 0x3b, 0xb1, 0xba, 0x1d, 0x1a, 0x2a, 0x12, 0x0b, 0x71, 0x4f, 0xc6, 0xa1, + 0xab, 0x0c, 0x60, 0xb8, 0x5c, 0x00, 0x3f, 0x37, 0x8f, 0x97, 0x59, 0x9d, + 0x92, 0x9a, 0xb9, 0x3d, 0xcb, 0x73, 0x5f, 0x0c, 0xb1, 0x08, 0x08, 0x4d, + 0x2a, 0x23, 0x9a, 0x1b, 0x17, 0x20, 0xf2, 0x92, 0x01, 0xa7, 0xaa, 0x24, + 0x7e, 0x3b, 0x23, 0xe8, 0x24, 0x4f, 0x1a, 0x94, 0x14, 0x5f, 0xa6, 0x3e, + 0x18, 0xc4, 0x41, 0x6b, 0x82, 0x34, 0x4d, 0xcc, 0x7b, 0xb6, 0x14, 0x20, + 0xa7, 0xdb, 0xc5, 0x93, 0xe2, 0x64, 0x30, 0xd4, 0x92, 0x61, 0x76, 0x18, + 0x0b, 0xcc, 0x2b, 0x59, 0xe7, 0xab, 0xec, 0x82, 0x46, 0x05, 0x4c, 0xb7, + 0x07, 0xc8, 0xb1, 0x6e, 0x31, 0x4d, 0x9c, 0xe2, 0x46, 0xa7, 0xdc, 0x04, + 0x75, 0xd1, 0x9b, 0x20, 0x35, 0x64, 0x1a, 0xbb, 0x5d, 0x13, 0x1b, 0xcf, + 0xf1, 0x02, 0x5b, 0xb5, 0x16, 0x17, 0x86, 0x72, 0x12, 0x0c, 0x45, 0x2d, + 0x48, 0x44, 0x1b, 0x5c, 0xc1, 0x7e, 0x75, 0xf7, 0xa3, 0xde, 0x20, 0x9a, + 0x21, 0x61, 0x1e, 0x07, 0x23, 0xac, 0xf7, 0x81, 0x5f, 0x0c, 0x41, 0xab, + 0x9e, 0x85, 0x99, 0x4a, 0xd8, 0x15, 0x09, 0x84, 0x10, 0x41, 0xca, 0x54, + 0x73, 0x60, 0x6c, 0x20, 0x0a, 0x55, 0xad, 0x88, 0x76, 0x37, 0x87, 0x01, + 0x24, 0x88, 0x8a, 0x1c, 0x17, 0xa3, 0xfc, 0xd6, 0xbf, 0x01, 0x70, 0xac, + 0x32, 0x62, 0x41, 0x45, 0xc1, 0x2a, 0xa1, 0x82, 0x83, 0x93, 0x24, 0x65, + 0xe7, 0x79, 0xc7, 0x58, 0x89, 0x06, 0x07, 0x3c, 0x2d, 0x7a, 0x7c, 0xbc, + 0x1c, 0xb8, 0x03, 0x6e, 0x39, 0x03, 0x62, 0x35, 0x2b, 0x16, 0x64, 0x38, + 0x76, 0x10, 0x4b, 0xd5, 0x44, 0x89, 0x2a, 0x05, 0x14, 0xc6, 0xcb, 0x1c, + 0x19, 0x14, 0x0b, 0x60, 0xe2, 0x5b, 0x6f, 0x01, 0xac, 0xc7, 0x6b, 0x6d, + 0x6d, 0xf7, 0xc1, 0x21, 0xf5, 0xa9, 0x45, 0x07, 0x3f, 0xca, 0xc6, 0x11, + 0xba, 0x5c, 0x41, 0xfe, 0x1c, 0x06, 0x4c, 0xfc, 0x02, 0x87, 0x24, 0x97, + 0x84, 0x46, 0x44, 0x0d, 0xb7, 0x5b, 0xef, 0xc3, 0x8b, 0xf6, 0xc8, 0x03, + 0xf0, 0x69, 0x8f, 0x7e, 0xf2, 0x4c, 0x27, 0xc6, 0x22, 0xcc, 0x55, 0x0f, + 0x5e, 0xfc, 0x86, 0x29, 0x0c, 0x46, 0xd2, 0x5a, 0x5f, 0x49, 0xf3, 0xc8, + 0x12, 0xc5, 0x16, 0x56, 0x79, 0x47, 0x94, 0x2b, 0x93, 0xe7, 0x34, 0x14, + 0x68, 0x2c, 0x31, 0xda, 0x22, 0x29, 0x7a, 0x16, 0x97, 0x23, 0xc5, 0x65, + 0x1b, 0x8c, 0x0a, 0x26, 0x97, 0xaa, 0x56, 0x0b, 0x4a, 0x65, 0xd8, 0xa9, + 0xe6, 0xf0, 0x39, 0x8c, 0x0c, 0x2f, 0xa5, 0x5c, 0x3a, 0x96, 0x4c, 0xcf, + 0x32, 0xf1, 0x60, 0x21, 0xfc, 0x5d, 0x87, 0xe2, 0x79, 0xb9, 0x23, 0xa6, + 0xd0, 0x54, 0x19, 0xb7, 0x41, 0x61, 0x63, 0x43, 0xbb, 0xe0, 0xc2, 0xbc, + 0x19, 0x83, 0x08, 0x7a, 0x73, 0x1f, 0x90, 0xeb, 0x4c, 0x33, 0xa8, 0x2c, + 0xbc, 0x37, 0xc0, 0x9e, 0x58, 0x74, 0x42, 0x67, 0x6d, 0x29, 0x71, 0x2a, + 0x72, 0xb0, 0x6b, 0x79, 0xdc, 0x1d, 0x55, 0x54, 0xc9, 0x8b, 0x24, 0x64, + 0x3a, 0x05, 0x78, 0x0f, 0xfb, 0xaf, 0x5a, 0xb8, 0x9d, 0x28, 0xd6, 0x55, + 0x76, 0x10, 0xbc, 0xf1, 0x44, 0x80, 0x80, 0xa6, 0x40, 0x53, 0x3a, 0x56, + 0xfb, 0xf5, 0xc4, 0x22, 0xea, 0x20, 0x0b, 0x65, 0xaa, 0x29, 0xc3, 0x88, + 0xfe, 0xe3, 0xcc, 0x3c, 0xd0, 0x15, 0xa1, 0xcb, 0x2b, 0xe4, 0xc6, 0x31, + 0x5e, 0xf9, 0x49, 0xfb, 0xd3, 0x88, 0x86, 0x07, 0x87, 0x7b, 0x08, 0x69, + 0x80, 0x21, 0x8f, 0x1e, 0xa6, 0x50, 0xbe, 0x30, 0xc6, 0xfb, 0xfb, 0xb1, + 0x7a, 0x87, 0x9a, 0x45, 0x03, 0x3e, 0xf7, 0x63, 0x1e, 0xec, 0xb2, 0x43, + 0xb7, 0x2c, 0x43, 0x06, 0x9c, 0x46, 0x89, 0xf5, 0xbf, 0x9d, 0xc7, 0x8a, + 0x1d, 0x60, 0xa3, 0x78, 0x54, 0x16, 0xaa, 0x6c, 0x3b, 0xa9, 0xec, 0x63, + 0x40, 0xa5, 0xb0, 0xc4, 0x04, 0x50, 0xa8, 0x99, 0x22, 0xc3, 0x6c, 0x02, + 0xf3, 0xb9, 0x6f, 0xfb, 0xf4, 0x63, 0x68, 0x97, 0xc6, 0x22, 0xe3, 0x8b, + 0x26, 0x82, 0x76, 0xe4, 0x28, 0xc5, 0x22, 0x91, 0x1c, 0x8b, 0x7c, 0x01, + 0x5d, 0xd5, 0x7b, 0x35, 0x71, 0x74, 0xb4, 0x09, 0x68, 0xf2, 0x0b, 0x98, + 0xc8, 0x72, 0x16, 0xb4, 0x20, 0x8b, 0xef, 0x2b, 0x4f, 0x26, 0x47, 0x33, + 0x6d, 0x1a, 0xbf, 0xcc, 0xb9, 0x39, 0xf3, 0xa6, 0xa4, 0xb5, 0xb5, 0x10, + 0x92, 0xf7, 0x60, 0xd3, 0xc2, 0x7f, 0x98, 0xe3, 0xcd, 0xc1, 0xaa, 0x4e, + 0xa1, 0x15, 0x15, 0xda, 0x64, 0x25, 0x13, 0xf4, 0xc2, 0xb3, 0x09, 0x35, + 0x84, 0x1a, 0x7d, 0xe6, 0x93, 0x2e, 0xb4, 0xea, 0x78, 0x20, 0xc7, 0x93, + 0x58, 0xa7, 0x76, 0x60, 0x21, 0xb6, 0x0e, 0xd2, 0x07, 0x1f, 0x54, 0x7a, + 0x13, 0x70, 0xb7, 0x89, 0xa0, 0xad, 0x09, 0x29, 0xac, 0xde, 0x75, 0x06, + 0x84, 0x9b, 0x49, 0xf7, 0xd1, 0x20, 0x53, 0x55, 0x4d, 0xa2, 0x27, 0x15, + 0x7c, 0x7c, 0x25, 0x29, 0x55, 0x55, 0xfa, 0x2a, 0xb9, 0x3f, 0x16, 0x70, + 0x43, 0xc8, 0x30, 0x09, 0xf4, 0x55, 0x82, 0x4a, 0x1e, 0xb8, 0x1a, 0x27, + 0xda, 0x8b, 0x39, 0xb0, 0x15, 0xb7, 0x24, 0x7c, 0x4f, 0xef, 0x34, 0x3e, + 0x35, 0x85, 0xb5, 0x19, 0x22, 0x1a, 0xa2, 0x05, 0x2c, 0x93, 0xc1, 0xc4, + 0x86, 0x3b, 0x0f, 0x94, 0x0c, 0x8e, 0x76, 0xc0, 0xce, 0x56, 0x2a, 0xcb, + 0xc7, 0xf0, 0x29, 0xfc, 0x1c, 0x54, 0x72, 0x62, 0x61, 0xe6, 0xf6, 0x6c, + 0x63, 0x36, 0x09, 0x56, 0xe0, 0x6e, 0xc6, 0x31, 0x60, 0x47, 0x24, 0x10, + 0x0a, 0x86, 0x1c, 0x22, 0x90, 0xbe, 0x29, 0x6a, 0x91, 0xf5, 0xe8, 0x8b, + 0xf6, 0x94, 0x20, 0x04, 0xe9, 0xb6, 0x01, 0x3b, 0x4a, 0xeb, 0xc4, 0x4b, + 0x05, 0xcb, 0x9e, 0x08, 0x11, 0x4b, 0xcf, 0x9a, 0x92, 0x80, 0x6c, 0x79, + 0x34, 0xb3, 0x73, 0xfc, 0x44, 0x4f, 0x88, 0xd9, 0x66, 0xd1, 0xe4, 0x3c, + 0xfa, 0xd3, 0x39, 0xf1, 0xd2, 0x17, 0xbd, 0xaa, 0x8c, 0xe4, 0xcc, 0x93, + 0xa5, 0x55, 0x41, 0x52, 0x09, 0x1c, 0x2c, 0x0c, 0x59, 0x61, 0xf5, 0xcd, + 0xf7, 0x1a, 0x5f, 0x8a, 0xf0, 0x56, 0xd1, 0x05, 0x91, 0x87, 0x78, 0x4c, + 0x15, 0x30, 0x56, 0x68, 0x01, 0x74, 0x56, 0x74, 0x36, 0xd8, 0x62, 0x28, + 0xdb, 0x3b, 0x39, 0x97, 0x69, 0xbf, 0xca, 0xec, 0x1a, 0x3f, 0x8b, 0xbf, + 0xd6, 0x90, 0x84, 0x10, 0x60, 0x8b, 0xd1, 0x1a, 0xb2, 0xdd, 0x9a, 0x40, + 0xa4, 0xc4, 0x77, 0x34, 0xe5, 0x79, 0xca, 0x70, 0xcd, 0x18, 0xb3, 0x04, + 0xd8, 0xd7, 0x21, 0x61, 0xab, 0x4d, 0xdc, 0xc7, 0xb7, 0x18, 0x36, 0xaa, + 0x01, 0xa8, 0x70, 0xfb, 0x87, 0xaa, 0xf9, 0x52, 0x6d, 0x09, 0x02, 0x32, + 0x95, 0x49, 0x8f, 0x15, 0x05, 0x1c, 0x81, 0x59, 0x16, 0x8a, 0xf6, 0x74, + 0x60, 0x20, 0x10, 0xed, 0x21, 0x82, 0x30, 0x3c, 0x8d, 0x8c, 0x39, 0x19, + 0x1b, 0x2c, 0x73, 0x74, 0x96, 0x1e, 0x4b, 0x83, 0x8b, 0x38, 0x1c, 0x15, + 0xf3, 0xe5, 0xa3, 0x39, 0xd7, 0x98, 0x83, 0xf3, 0x5e, 0x99, 0x18, 0x44, + 0x72, 0x3c, 0x4f, 0x47, 0xd9, 0x9a, 0xac, 0x51, 0x73, 0x17, 0xb6, 0x9b, + 0x0c, 0x09, 0x87, 0x2f, 0xf3, 0x00, 0xb6, 0x02, 0xc4, 0xa6, 0x38, 0x33, + 0xed, 0xd7, 0xce, 0x27, 0x5a, 0x80, 0x4e, 0xb1, 0xc1, 0x86, 0xea, 0x7e, + 0x8c, 0xa7, 0xb6, 0x3c, 0x2c, 0x90, 0xb7, 0x50, 0x33, 0x78, 0xf4, 0x85, + 0x3b, 0xac, 0x5d, 0x9b, 0x93, 0x34, 0xe7, 0x4a, 0x68, 0xcf, 0xe8, 0x68, + 0xa3, 0xd4, 0xa1, 0xfc, 0x4a, 0x89, 0xbd, 0x96, 0x7f, 0x12, 0x7c, 0xc0, + 0xee, 0x0a, 0x17, 0x4f, 0x42, 0xbb, 0xf4, 0x34, 0x30, 0xb7, 0xa8, 0x49, + 0xaf, 0x37, 0xc1, 0xec, 0x1a, 0xc7, 0xdf, 0x9c, 0x3f, 0x9d, 0x51, 0x47, + 0x56, 0x43, 0x4e, 0xf8, 0xd6, 0x1b, 0x3a, 0x0c, 0x54, 0x39, 0xa3, 0x94, + 0xba, 0x97, 0x48, 0x30, 0xc3, 0x56, 0x6b, 0xb4, 0x10, 0xec, 0x97, 0x97, + 0xc8, 0x3b, 0x9b, 0xe7, 0xa1, 0x14, 0x18, 0x58, 0xa3, 0xab, 0xe9, 0x01, + 0x4e, 0xba, 0x1b, 0xb3, 0x56, 0x29, 0xe6, 0x7b, 0xcb, 0xaf, 0x95, 0x92, + 0xd9, 0xd6, 0xb8, 0xc2, 0x87, 0x9b, 0x06, 0xd4, 0x4e, 0xa5, 0xb3, 0xad, + 0x31, 0x21, 0xb8, 0x3d, 0x55, 0x06, 0x45, 0xc0, 0x79, 0xd8, 0xe1, 0x54, + 0xfa, 0xe2, 0xb2, 0x87, 0xa7, 0xbd, 0xda, 0x94, 0x37, 0xe4, 0xcc, 0x57, + 0xcf, 0xb4, 0xc9, 0xcf, 0xf1, 0xc3, 0xfd, 0x98, 0xb2, 0xbf, 0x82, 0x9b, + 0xd7, 0x82, 0x9b, 0x88, 0xe4, 0x7a, 0x60, 0x57, 0xad, 0x7f, 0x36, 0x5e, + 0xbd, 0xb5, 0x48, 0xc2, 0x3c, 0x3a, 0xb4, 0xdb, 0xc0, 0xcf, 0xd7, 0xc3, + 0xb3, 0xc8, 0xae, 0xce, 0xb9, 0x83, 0x4d, 0x9b, 0x6c, 0x4f, 0x32, 0x5e, + 0x44, 0x62, 0x8c, 0xfe, 0x3b, 0xad, 0x02, 0xbb, 0xb6, 0x87, 0xe5, 0x7b, + 0x21, 0x68, 0x21, 0x1d, 0xf4, 0x4b, 0x9b, 0xeb, 0xa5, 0x20, 0x46, 0x78, + 0xbb, 0xcc, 0x91, 0x57, 0x27, 0x40, 0x89, 0xd3, 0x0a, 0x59, 0x37, 0x9f, + 0xe4, 0xc0, 0xc3, 0x43, 0xcb, 0xb8, 0xe1, 0xd0, 0x1b, 0xb2, 0xc3, 0x88, + 0xf4, 0x20, 0x53, 0xf9, 0xa3, 0x04, 0xfb, 0xcb, 0x1e, 0x59, 0x4c, 0x4a, + 0x0e, 0x7b, 0xc6, 0xb8, 0x60, 0x97, 0xad, 0x1a, 0x95, 0x05, 0x46, 0x26, + 0x26, 0x81, 0x0e, 0xd6, 0x44, 0x2f, 0xc9, 0x13, 0x2d, 0x2d, 0xe9, 0x5a, + 0x26, 0x4a, 0xa5, 0xcc, 0x96, 0x67, 0x48, 0xeb, 0x76, 0xe5, 0x37, 0x30, + 0x62, 0x78, 0x1f, 0x2b, 0x75, 0x66, 0xcf, 0x65, 0xda, 0xee, 0xf2, 0x34, + 0x8d, 0x39, 0x77, 0x7b, 0x41, 0x26, 0xb6, 0x02, 0x7c, 0x68, 0x0b, 0x02, + 0x66, 0xea, 0x29, 0xb5, 0x5e, 0x58, 0x61, 0x56}, + // cipherTextDigest + {0x3d, 0x4d, 0x4c, 0x17, 0xe9, 0x3c, 0xeb, 0x47, 0xba, 0x67, 0xcd, + 0x95, 0x30, 0x23, 0xb7, 0x4f, 0x6e, 0x44, 0x04, 0xd3, 0xa3, 0x7c, + 0xde, 0xc4, 0xde, 0x8f, 0xe4, 0x91, 0xd3, 0x96, 0xdc, 0xa0}, + // secret + {0xe9, 0xa6, 0x18, 0xa9, 0x3b, 0x7c, 0x78, 0x38, 0xf9, 0xc4, 0xa8, + 0xfe, 0x92, 0xc4, 0x40, 0x7d, 0x3e, 0x32, 0xed, 0x28, 0xbe, 0x7b, + 0x63, 0xad, 0xfb, 0x9a, 0x85, 0xc8, 0xe5, 0xea, 0xd0, 0x36}, + true}, + // tcID: 54 + {54, + params_ml_kem1024_test_mode, + // entropy + {0xc1, 0xf3, 0x20, 0x99, 0x30, 0x7f, 0x1a, 0x17, 0xf5, 0x8b, 0xa3, + 0x2d, 0xad, 0x01, 0x51, 0x73, 0x6d, 0x83, 0x1f, 0x7a, 0x3a, 0xdd, + 0x06, 0x47, 0xf7, 0xd2, 0x32, 0x02, 0x28, 0xd0, 0x6a, 0xa7}, + // publicKey + {0x6f, 0x17, 0x77, 0xb3, 0x67, 0x3c, 0x3d, 0x5b, 0xc2, 0xd5, 0x82, 0x93, + 0x04, 0x67, 0x81, 0x5b, 0x74, 0x57, 0x00, 0x74, 0xbd, 0x92, 0x0c, 0xb1, + 0x69, 0x88, 0x93, 0x67, 0x01, 0x6b, 0xd9, 0x56, 0x98, 0xff, 0x9c, 0x51, + 0xa2, 0xe8, 0xa9, 0x7f, 0xac, 0xb8, 0x2c, 0x74, 0x94, 0x37, 0x95, 0x3a, + 0x5e, 0xb2, 0xb1, 0xe0, 0xb3, 0x84, 0x75, 0x74, 0x5b, 0xdd, 0x77, 0x19, + 0xc6, 0x4c, 0x7d, 0x9a, 0x9c, 0x92, 0x74, 0x74, 0xb9, 0x73, 0xc5, 0xb5, + 0xa0, 0x58, 0x17, 0xc0, 0x98, 0x6c, 0x32, 0x1a, 0x1e, 0x49, 0x2c, 0x4a, + 0xfb, 0xa5, 0xb8, 0x07, 0x7b, 0x26, 0x92, 0xc7, 0x14, 0xbd, 0x61, 0x47, + 0x73, 0x34, 0xaa, 0x19, 0x47, 0x66, 0x1d, 0x15, 0x83, 0xd8, 0x32, 0x69, + 0x51, 0x36, 0x39, 0x9f, 0xeb, 0x4f, 0xaa, 0xc9, 0x90, 0x33, 0x60, 0x1e, + 0x3b, 0xb5, 0x9b, 0xf1, 0xd4, 0x2c, 0x7d, 0x6b, 0x60, 0xfb, 0x05, 0x66, + 0xdf, 0x90, 0x32, 0x71, 0xd4, 0x1e, 0x46, 0x39, 0x23, 0xee, 0xa3, 0x80, + 0x0f, 0x3b, 0x35, 0xd9, 0x99, 0x86, 0x69, 0xf9, 0x44, 0x77, 0xb5, 0x7a, + 0xc3, 0xd6, 0x8a, 0x02, 0xc4, 0x9a, 0x4d, 0x82, 0x1b, 0x15, 0x93, 0x3b, + 0xa6, 0x7b, 0x8d, 0x19, 0xba, 0x52, 0x01, 0x98, 0x3a, 0xe3, 0xf3, 0x9b, + 0x02, 0x49, 0xc5, 0xb8, 0x67, 0x63, 0xfc, 0xab, 0x12, 0xca, 0xb5, 0x87, + 0x4f, 0x0b, 0x18, 0x5e, 0xd6, 0x45, 0x2b, 0x7b, 0x12, 0xf4, 0x90, 0xae, + 0x26, 0x78, 0x18, 0x11, 0x43, 0x16, 0x64, 0x36, 0x1d, 0xc5, 0xf5, 0xc8, + 0x80, 0xc6, 0xa1, 0xfa, 0xfa, 0x10, 0x3d, 0xb6, 0x63, 0xf0, 0xa8, 0x93, + 0x4a, 0x94, 0x65, 0x93, 0x1c, 0x39, 0x76, 0x49, 0xa6, 0x62, 0xd2, 0x2a, + 0x85, 0xfa, 0x32, 0xf3, 0xb6, 0x38, 0xbf, 0x7b, 0x53, 0x73, 0xd6, 0xc2, + 0x42, 0x37, 0x2b, 0x48, 0x7c, 0x9b, 0xf0, 0x89, 0xb7, 0x2d, 0xc3, 0x56, + 0xfa, 0x29, 0x05, 0xc5, 0x43, 0x2d, 0x37, 0x02, 0x02, 0x91, 0xa5, 0x1d, + 0xef, 0x99, 0x90, 0x9a, 0xb7, 0x90, 0x9b, 0xbc, 0x2c, 0x95, 0xb7, 0x48, + 0xfb, 0xe5, 0xad, 0xf3, 0x6a, 0xa8, 0x4a, 0x72, 0x66, 0xa6, 0x19, 0x56, + 0xfd, 0x26, 0x9f, 0x37, 0x2a, 0x45, 0x4e, 0xfc, 0x76, 0xff, 0x87, 0x0b, + 0x6a, 0xc6, 0xb5, 0x8f, 0xb0, 0x33, 0x88, 0x26, 0x3a, 0x19, 0x8a, 0xc7, + 0x67, 0x74, 0x1b, 0x04, 0xc8, 0x04, 0x35, 0x77, 0x65, 0xeb, 0xfa, 0x0e, + 0x8a, 0xf6, 0xc2, 0xd8, 0xa0, 0x72, 0x9e, 0x93, 0x92, 0x86, 0x96, 0x73, + 0x73, 0x79, 0x2f, 0x4e, 0x8b, 0x38, 0xb3, 0xb3, 0x40, 0x74, 0xbb, 0xa0, + 0x5e, 0x09, 0x50, 0x83, 0xb4, 0xa6, 0xeb, 0xb0, 0x89, 0xc5, 0x34, 0xbe, + 0x59, 0x90, 0x3a, 0xfc, 0x23, 0x70, 0x08, 0xe8, 0x8d, 0x49, 0x92, 0x29, + 0x9d, 0x71, 0x8e, 0xa9, 0xeb, 0xcf, 0x06, 0x4b, 0xcf, 0x26, 0x33, 0x92, + 0x20, 0x5a, 0x31, 0x02, 0x06, 0x05, 0x33, 0x54, 0x52, 0x9c, 0x74, 0x2d, + 0x45, 0xb5, 0x34, 0xa4, 0xea, 0x9b, 0xf2, 0x65, 0x27, 0xf2, 0x25, 0x8e, + 0xc7, 0x2a, 0x9a, 0xb8, 0xbc, 0x28, 0x4f, 0x9a, 0x7f, 0x22, 0xa7, 0x71, + 0x01, 0x74, 0x45, 0x8a, 0xaa, 0xb0, 0x7b, 0x1a, 0x88, 0x16, 0xba, 0x08, + 0xab, 0xf8, 0x40, 0xea, 0x62, 0xb9, 0x7a, 0x4a, 0x6f, 0x05, 0xe3, 0x9c, + 0xb1, 0x89, 0x01, 0xda, 0x62, 0x6c, 0x38, 0xe8, 0x09, 0x4f, 0x87, 0x18, + 0xf5, 0xa3, 0x4d, 0x00, 0x90, 0x13, 0xf9, 0xc2, 0x7d, 0xd0, 0x73, 0x91, + 0x42, 0xd1, 0xa1, 0x9c, 0xe0, 0x82, 0x6d, 0xeb, 0x5e, 0x99, 0xd2, 0x02, + 0x3a, 0x01, 0x65, 0xe5, 0xf5, 0xae, 0x5d, 0x68, 0x78, 0x93, 0xa2, 0x47, + 0x7d, 0xb6, 0x63, 0xa5, 0x76, 0x8a, 0xee, 0xf5, 0x3d, 0xec, 0xac, 0x82, + 0x52, 0xaa, 0x5f, 0xd7, 0x11, 0x68, 0x38, 0x40, 0xc3, 0x7a, 0xf7, 0x1f, + 0xe6, 0x56, 0xb0, 0x6b, 0x0b, 0x6f, 0xf9, 0x95, 0x85, 0xf7, 0xdc, 0x51, + 0x90, 0x8b, 0xc2, 0x53, 0xe0, 0x47, 0x10, 0x17, 0x56, 0xd9, 0xc2, 0x8d, + 0x0b, 0x8c, 0x98, 0x5a, 0x90, 0xaf, 0xed, 0x06, 0x42, 0x8f, 0xc6, 0x65, + 0xa2, 0x2c, 0x8f, 0x72, 0xc8, 0x2e, 0x4c, 0x64, 0xbb, 0x53, 0xfc, 0xab, + 0x51, 0x87, 0x7d, 0x12, 0x19, 0x63, 0x1a, 0xe2, 0x15, 0x12, 0x97, 0x30, + 0x27, 0x45, 0x68, 0xd5, 0xa7, 0x45, 0xd9, 0x61, 0x46, 0xc5, 0x5a, 0x81, + 0xa2, 0xcc, 0x4d, 0x59, 0xf4, 0xc1, 0x2e, 0x23, 0x98, 0x76, 0x69, 0x93, + 0x9e, 0x83, 0xa0, 0x3c, 0x87, 0xbd, 0x84, 0x7c, 0xa7, 0x83, 0x18, 0x25, + 0x17, 0xb2, 0x54, 0xce, 0x14, 0x0b, 0xe1, 0xda, 0x3a, 0xf8, 0x92, 0x2f, + 0x55, 0x74, 0x2c, 0x5d, 0x7c, 0x0c, 0x00, 0x2c, 0x05, 0xc1, 0xda, 0x85, + 0x28, 0xe3, 0x9b, 0x02, 0x8b, 0x52, 0x6f, 0x1c, 0x5d, 0x5e, 0x88, 0x80, + 0xf7, 0x75, 0x1c, 0x4f, 0xb6, 0x19, 0x65, 0x9b, 0x36, 0x9e, 0x89, 0x3e, + 0x86, 0xe4, 0xb4, 0x85, 0x3a, 0x62, 0xf6, 0x4a, 0x7f, 0x05, 0x12, 0x1c, + 0x7c, 0x48, 0x6e, 0x39, 0x56, 0xb6, 0x76, 0xb3, 0xbf, 0x94, 0x11, 0xa7, + 0x9c, 0x9c, 0x1b, 0xe5, 0xa5, 0xb9, 0x2b, 0x71, 0x01, 0xab, 0x16, 0x85, + 0xaf, 0xc8, 0x8b, 0xc6, 0xe4, 0x55, 0x14, 0x7a, 0x16, 0xaa, 0x93, 0x01, + 0x2d, 0xa7, 0x35, 0x5c, 0x4b, 0xb5, 0x25, 0x40, 0xce, 0x47, 0xe3, 0xc7, + 0xd8, 0x70, 0x5a, 0xd7, 0x67, 0x78, 0x9c, 0x5a, 0x09, 0xe7, 0xf8, 0x56, + 0x53, 0x5b, 0x39, 0xda, 0x06, 0xb9, 0xb8, 0xa9, 0x84, 0xf2, 0xcb, 0xcd, + 0xcc, 0x08, 0x3b, 0x4b, 0x60, 0x07, 0x63, 0x37, 0x6a, 0xce, 0x71, 0xba, + 0xd9, 0xfb, 0x2f, 0x0e, 0x1c, 0x2c, 0xbc, 0x0c, 0xce, 0x77, 0xb7, 0x5c, + 0xdb, 0x51, 0x4b, 0xa7, 0x97, 0xa6, 0xc3, 0x90, 0x46, 0xb5, 0x7b, 0x97, + 0x3b, 0xec, 0x53, 0xf9, 0x4b, 0x88, 0x5d, 0xc9, 0x37, 0x82, 0x4a, 0x78, + 0xac, 0xd0, 0x6b, 0x13, 0x5a, 0x9d, 0x67, 0x99, 0xcf, 0x38, 0xcb, 0xa5, + 0xb9, 0xc5, 0xcf, 0xd6, 0xfc, 0x7c, 0xdd, 0xcb, 0x91, 0x10, 0xd9, 0xa4, + 0x7f, 0xc9, 0xca, 0xb4, 0x41, 0x31, 0x80, 0xd3, 0x8a, 0xe8, 0x58, 0x82, + 0x05, 0x5a, 0x9b, 0xe7, 0x36, 0x0e, 0x16, 0xf4, 0xc4, 0x75, 0x1a, 0x2b, + 0xa2, 0xec, 0x98, 0xbe, 0xdc, 0xb9, 0x2e, 0x89, 0x7f, 0xca, 0xa4, 0xc9, + 0xc9, 0xe0, 0x6d, 0xd8, 0x2c, 0x90, 0xd1, 0xca, 0x77, 0x6c, 0x1a, 0x27, + 0x6a, 0x08, 0x99, 0x87, 0xac, 0x99, 0x83, 0xf1, 0x14, 0xe0, 0x23, 0x9f, + 0xa7, 0xf0, 0x3e, 0x49, 0x12, 0x3d, 0x0c, 0x74, 0x7e, 0x03, 0x44, 0x0e, + 0xa5, 0x6b, 0x77, 0x44, 0x0b, 0x89, 0xee, 0xe0, 0x31, 0x8d, 0xf5, 0x4b, + 0xce, 0x10, 0x92, 0xa7, 0xc3, 0x52, 0xdb, 0x29, 0x91, 0x6e, 0xa2, 0x5c, + 0x79, 0x06, 0x28, 0xdc, 0xa4, 0x15, 0xbe, 0x42, 0x10, 0xa2, 0x62, 0x74, + 0x46, 0xec, 0x27, 0x24, 0xb3, 0x2c, 0x3c, 0x33, 0xc5, 0x2d, 0x23, 0x0d, + 0x24, 0x44, 0x9d, 0x78, 0x7b, 0xb1, 0xbf, 0xe1, 0x62, 0x76, 0xea, 0x3b, + 0x95, 0xf2, 0x2d, 0x8e, 0x18, 0x0e, 0xc4, 0x06, 0xb7, 0x26, 0xb2, 0x2e, + 0x3c, 0xb9, 0x0a, 0x9b, 0x67, 0xa6, 0xd0, 0x67, 0x4e, 0x65, 0xa1, 0x8a, + 0x43, 0x1c, 0x6c, 0x74, 0xd4, 0x94, 0x0b, 0xbc, 0x3e, 0x20, 0xb5, 0x88, + 0xc5, 0xa7, 0xc0, 0x97, 0x8c, 0x6d, 0xe4, 0xc3, 0x8e, 0x44, 0xd6, 0x9d, + 0x4c, 0xd0, 0xad, 0xa2, 0xa5, 0xa9, 0x01, 0xc7, 0x80, 0x75, 0xe9, 0xae, + 0x11, 0x33, 0x50, 0x53, 0x5b, 0x35, 0x18, 0x43, 0x43, 0xb3, 0xc1, 0x58, + 0xfb, 0x95, 0x84, 0x99, 0x53, 0x33, 0x35, 0x80, 0xa1, 0xdb, 0xd4, 0x2a, + 0xf1, 0xf2, 0x44, 0x96, 0x72, 0x94, 0xd3, 0x18, 0xaa, 0x6c, 0x41, 0xa0, + 0x6e, 0x1b, 0x94, 0x4d, 0xf3, 0x84, 0x1a, 0xa7, 0x03, 0x9c, 0xb5, 0x03, + 0xb9, 0x44, 0x28, 0xdf, 0xdc, 0x09, 0x36, 0xcc, 0xcd, 0x4d, 0xba, 0xc4, + 0x65, 0x33, 0xb7, 0x82, 0x54, 0x52, 0xc8, 0x02, 0x0d, 0x03, 0xb1, 0x54, + 0x0f, 0x66, 0x0f, 0x08, 0x94, 0x8e, 0x1f, 0xd0, 0xc4, 0x53, 0xe7, 0x89, + 0x9a, 0x4c, 0x36, 0x8f, 0xa0, 0x7b, 0xb6, 0x35, 0xb3, 0x41, 0xa2, 0x34, + 0xca, 0xa6, 0x07, 0xe4, 0x52, 0x0d, 0x4e, 0xb8, 0x3d, 0x0e, 0x74, 0x8e, + 0xa7, 0xd7, 0x3b, 0xa7, 0x18, 0x6f, 0x9a, 0x51, 0x78, 0x0c, 0xe8, 0x1e, + 0x90, 0x57, 0x4c, 0x44, 0xb5, 0x5e, 0x57, 0xe4, 0x48, 0xa6, 0x38, 0x68, + 0xa8, 0xa7, 0x40, 0xd2, 0x90, 0x2d, 0xaa, 0x3c, 0xbd, 0x15, 0xb2, 0x88, + 0x3b, 0x01, 0x2f, 0xcb, 0xbc, 0xc7, 0x9c, 0x71, 0xb3, 0x80, 0xf2, 0x04, + 0x2a, 0x92, 0xc4, 0x87, 0x96, 0x5e, 0x3a, 0x58, 0xbf, 0x53, 0xa2, 0x0c, + 0xc8, 0x78, 0xbb, 0x34, 0xf4, 0x74, 0xa5, 0xe1, 0x49, 0x3c, 0x23, 0xb1, + 0x19, 0x96, 0xb8, 0xab, 0xb2, 0xbb, 0xd8, 0x40, 0x24, 0xd0, 0x6a, 0x2b, + 0x70, 0x90, 0x59, 0x1c, 0x82, 0x86, 0x76, 0x70, 0x36, 0x86, 0x58, 0x8f, + 0xf1, 0xe9, 0x47, 0x3b, 0xe2, 0xcc, 0xd5, 0xc7, 0x3c, 0x55, 0x31, 0x8e, + 0x12, 0xc8, 0x92, 0xc1, 0x5a, 0x4c, 0x25, 0xa9, 0xb2, 0xd9, 0x69, 0x65, + 0xa4, 0x48, 0x80, 0xfe, 0x7a, 0xc5, 0x89, 0xe8, 0xc8, 0x39, 0x37, 0x7b, + 0x79, 0x2b, 0x0d, 0x3e, 0x6c, 0x88, 0x57, 0x49, 0x26, 0x43, 0x28, 0xba, + 0xc0, 0x75, 0x0c, 0xab, 0x9c, 0xa9, 0x5a, 0xc3, 0x12, 0x45, 0x01, 0xc6, + 0x6d, 0x3a, 0xac, 0x4b, 0x88, 0x33, 0xcf, 0xa6, 0x2a, 0xc8, 0x29, 0x30, + 0xb5, 0x5c, 0x6f, 0xc8, 0x1c, 0xa9, 0xeb, 0x98, 0x30, 0xbd, 0xc8, 0x21, + 0xa8, 0xb0, 0x9b, 0x36, 0x96, 0x37, 0x92, 0x88, 0x76, 0x94, 0x99, 0x7a, + 0x57, 0x3a, 0xb2, 0x5a, 0x58, 0x7a, 0x66, 0x29, 0x40, 0x7f, 0x29, 0x02, + 0xa2, 0x57, 0xa2, 0x29, 0xe6, 0x4f, 0x66, 0x43, 0x43, 0x51, 0x92, 0x3c, + 0xae, 0xe3, 0x2b, 0xf0, 0xac, 0x00, 0x44, 0xb1, 0x29, 0x1b, 0x01, 0x5c, + 0xa7, 0x0b, 0xc8, 0xb1, 0x9c, 0xcb, 0xec, 0x83, 0x36, 0x87, 0x53, 0xa2, + 0xf6, 0x48, 0xa7, 0x4f, 0xba, 0xa2, 0x41, 0x76, 0x64, 0x19, 0x51, 0xad, + 0xaf, 0x56, 0x12, 0x86, 0xca, 0x03, 0x60, 0xc4, 0x11, 0xd1, 0xe7, 0xb4, + 0x37, 0x11, 0x0d, 0x55, 0xc4, 0x2e, 0xbb, 0x08, 0x53, 0xda, 0x52, 0x51, + 0x1d, 0x91, 0x8e, 0x28, 0xe9, 0x75, 0x86, 0xac, 0x1d, 0xbd, 0x4a, 0x5c, + 0x01, 0xda, 0xc2, 0x72, 0xfc, 0xa4, 0x13, 0x45, 0x82, 0xe9, 0x41, 0xa4, + 0x4c, 0xa1, 0x79, 0xe4, 0xc4, 0x77, 0x51, 0x11, 0x51, 0x51, 0xd7, 0x28, + 0x46, 0x45, 0x1c, 0x36, 0xe7, 0x49, 0x21, 0xbb, 0x76, 0xf0, 0xfb, 0xa7, + 0xbb, 0xb5, 0xcd, 0x1d, 0xa6, 0x92, 0x9c, 0x17, 0x02, 0xb6, 0xa7, 0x55, + 0x64, 0xcb, 0xbf, 0x8d, 0x26, 0xa2, 0x6a, 0xfa, 0x92, 0x09, 0x5c, 0x58, + 0xe7, 0x00, 0x91, 0xa5, 0xa3, 0xae, 0x82, 0x8a, 0x38, 0x20, 0xb0, 0xa6, + 0xcf, 0x52, 0xac, 0x55, 0xd3, 0x84, 0xba, 0x1b, 0x8f, 0x39, 0xb7, 0x68, + 0x2e, 0x99, 0x47, 0x2f, 0xc7, 0x9a, 0x52, 0x6a, 0x96, 0xdc, 0xd6, 0x19, + 0x78, 0x27, 0xbe, 0x23, 0x93, 0x0f, 0xe9, 0xd3, 0x57, 0xff, 0xf7, 0x90, + 0x4f, 0xd4, 0x00, 0x02, 0x04, 0x3b, 0xac, 0x3a, 0xc5, 0x85, 0xf1, 0xcd, + 0xa4, 0xeb, 0x7f, 0x95, 0xc7, 0x84, 0x7e, 0x0c, 0xf9, 0x62, 0x67, 0x59, + 0x47, 0x37, 0x20, 0x8e, 0x49, 0x6a, 0x28, 0x72, 0xad, 0xf1, 0xae, 0x51, + 0x5b, 0xde, 0xa8, 0x73, 0xd9, 0x87, 0x44, 0x4a}, + // cipherTextDigest + {0x50, 0xc5, 0x1b, 0x0b, 0xb9, 0xd2, 0x40, 0xc8, 0x98, 0x8a, 0x7c, + 0xbf, 0x87, 0xbf, 0xc2, 0x4d, 0x19, 0xc7, 0xd0, 0x88, 0xb1, 0x40, + 0xe0, 0x58, 0xda, 0x8f, 0x04, 0xda, 0xbc, 0x0f, 0x05, 0xd2}, + // secret + {0xa6, 0x7b, 0xb0, 0xd8, 0x79, 0x44, 0x1c, 0x09, 0x93, 0x3f, 0xda, + 0xde, 0x33, 0x69, 0x5d, 0x4b, 0x18, 0xb7, 0x55, 0x01, 0xaf, 0x92, + 0x39, 0xab, 0xa3, 0x49, 0x43, 0x0d, 0xb3, 0x16, 0xbe, 0x67}, + true}, + // tcID: 55 + {55, + params_ml_kem1024_test_mode, + // entropy + {0xcf, 0x8b, 0x68, 0x96, 0x29, 0xde, 0x77, 0xd2, 0x77, 0x02, 0x6a, + 0xa0, 0xa4, 0xe0, 0x25, 0x6d, 0xba, 0x2a, 0x78, 0xc9, 0xf0, 0x06, + 0x53, 0x62, 0xb7, 0xd8, 0x33, 0x57, 0xe4, 0xa4, 0xef, 0x0b}, + // publicKey + {0x00, 0x73, 0x63, 0x36, 0x1c, 0x85, 0xd8, 0x57, 0x53, 0x77, 0x9a, 0xc2, + 0x17, 0x56, 0x9e, 0xdf, 0xf5, 0x46, 0x44, 0x10, 0x9b, 0xe7, 0xf2, 0x52, + 0xd3, 0xa5, 0x9b, 0x40, 0x50, 0x74, 0xa7, 0x72, 0x4f, 0xdb, 0x40, 0x87, + 0x36, 0xb5, 0xb4, 0x59, 0xe7, 0x15, 0x1b, 0x05, 0x05, 0x7c, 0xac, 0xb5, + 0xfc, 0x93, 0xa5, 0x90, 0x78, 0xa0, 0xd4, 0x98, 0x53, 0x27, 0x97, 0x3a, + 0x26, 0xab, 0x05, 0x8b, 0xc4, 0x1c, 0xde, 0xb8, 0x57, 0x31, 0x1c, 0x30, + 0x1e, 0xfb, 0x06, 0x53, 0x81, 0x7a, 0x3e, 0xd8, 0xa4, 0x8e, 0x29, 0x86, + 0x5d, 0xfc, 0x22, 0x70, 0x77, 0x60, 0xd3, 0x11, 0x17, 0xf5, 0xd1, 0x40, + 0x70, 0x55, 0x22, 0x95, 0xf3, 0x61, 0xb7, 0x57, 0x06, 0x00, 0x83, 0x9a, + 0xb4, 0xc2, 0x3b, 0x4b, 0xfb, 0x32, 0xff, 0x7b, 0x0d, 0x00, 0x59, 0x12, + 0x80, 0x12, 0xa1, 0x15, 0x52, 0xa2, 0xc7, 0x36, 0x33, 0x90, 0x9b, 0x68, + 0xd7, 0x66, 0x65, 0x12, 0x59, 0x72, 0xb6, 0x6b, 0xb7, 0x3f, 0x60, 0x53, + 0xda, 0x0c, 0x10, 0x7e, 0x98, 0x9f, 0x50, 0xa4, 0x72, 0x43, 0xf9, 0x34, + 0xa5, 0x31, 0x3c, 0xce, 0x49, 0x78, 0x61, 0x47, 0x94, 0xae, 0x95, 0x62, + 0x93, 0xe1, 0x65, 0xd2, 0x21, 0x98, 0xa3, 0x22, 0x08, 0x26, 0x36, 0x72, + 0x99, 0x52, 0x40, 0x58, 0x59, 0x18, 0x41, 0xfc, 0x20, 0x91, 0x23, 0xa3, + 0x6e, 0x49, 0x25, 0x56, 0xc2, 0x00, 0x39, 0xa0, 0x96, 0x04, 0x83, 0x4e, + 0x90, 0x73, 0x2d, 0x34, 0x1c, 0x7c, 0xf7, 0x79, 0x25, 0x57, 0xd3, 0xc0, + 0x5d, 0xca, 0x2c, 0x5c, 0x66, 0x13, 0x9c, 0x1a, 0x51, 0x92, 0xb2, 0x61, + 0x24, 0x6c, 0x33, 0x47, 0xa9, 0x5a, 0xeb, 0xe2, 0x27, 0xde, 0x27, 0x47, + 0xb2, 0xfc, 0x3c, 0x36, 0x50, 0x8b, 0xb8, 0x22, 0x48, 0xe6, 0x04, 0xce, + 0x4d, 0x13, 0x57, 0x0f, 0x45, 0x2d, 0xc3, 0x6a, 0x28, 0x5a, 0xc4, 0x65, + 0xd9, 0xb9, 0x79, 0x1f, 0x4a, 0x52, 0xdc, 0x57, 0x01, 0x3e, 0x44, 0x9f, + 0x9f, 0x09, 0x8a, 0xfd, 0xab, 0x74, 0x0d, 0xe4, 0xb8, 0x67, 0x6a, 0x5d, + 0x3d, 0x23, 0x8c, 0xd1, 0x54, 0xad, 0xe2, 0xb9, 0x8e, 0xee, 0x09, 0xb1, + 0xbf, 0x5c, 0x1f, 0xbe, 0xe7, 0x0d, 0x49, 0x5b, 0x5a, 0x08, 0xd5, 0xa7, + 0x74, 0x42, 0x48, 0xc9, 0x0a, 0x0a, 0x5f, 0x9b, 0x87, 0x60, 0x2c, 0x3a, + 0x6e, 0x6c, 0x5e, 0x00, 0x44, 0xc3, 0xb2, 0x26, 0x32, 0xa2, 0xc3, 0x21, + 0x91, 0xca, 0x0d, 0xa0, 0xac, 0xcd, 0x91, 0xb5, 0x88, 0x58, 0xea, 0x23, + 0x9c, 0x70, 0x35, 0x3e, 0x8c, 0x57, 0x6e, 0x38, 0x34, 0x92, 0x20, 0x4a, + 0xd3, 0xbb, 0x14, 0x1a, 0xab, 0xba, 0x2f, 0xa1, 0x99, 0xe2, 0xec, 0x94, + 0xa9, 0xb8, 0x7e, 0x24, 0xb4, 0x24, 0xa5, 0xf9, 0xcf, 0xc2, 0x26, 0x74, + 0x1e, 0x00, 0xac, 0x0b, 0xf0, 0xa6, 0x48, 0xda, 0xaa, 0x39, 0xa7, 0x57, + 0x1f, 0x22, 0x13, 0xf8, 0x9a, 0x93, 0xbe, 0x88, 0xaf, 0x6d, 0xb8, 0x0e, + 0x74, 0x59, 0xca, 0x75, 0x4a, 0x0a, 0x9c, 0xd0, 0x91, 0x2d, 0xd5, 0x0f, + 0xe3, 0xaa, 0xc4, 0x2d, 0x14, 0x41, 0x6b, 0xa5, 0x9e, 0xbf, 0xab, 0xab, + 0xe0, 0x05, 0x7a, 0x98, 0x48, 0x49, 0xdd, 0xfb, 0x16, 0x2c, 0x26, 0x6c, + 0x75, 0x44, 0xb4, 0x2c, 0x43, 0xaa, 0x09, 0x93, 0x0d, 0x7e, 0x76, 0x87, + 0x3f, 0xe8, 0x79, 0x43, 0x3b, 0x3e, 0xec, 0x00, 0x98, 0xfa, 0x5b, 0x43, + 0x19, 0xd4, 0x71, 0x18, 0x4a, 0xb9, 0x4c, 0x84, 0x74, 0xe5, 0x08, 0xa0, + 0x60, 0x32, 0xbf, 0xc6, 0x61, 0x2a, 0x87, 0x84, 0x19, 0x9b, 0x48, 0x37, + 0x41, 0xc0, 0xb9, 0x29, 0x19, 0x5f, 0x00, 0xf3, 0x95, 0xcc, 0x79, 0xbb, + 0xe0, 0x58, 0x73, 0x64, 0x39, 0x83, 0x0f, 0xcc, 0x96, 0xbc, 0x5a, 0x2f, + 0xd8, 0xa8, 0x78, 0xc8, 0xb0, 0x73, 0x55, 0xc0, 0x2b, 0x46, 0xbb, 0x68, + 0x33, 0x74, 0x11, 0x87, 0x14, 0x6f, 0x30, 0x52, 0x5a, 0x7a, 0x14, 0x9e, + 0x52, 0xf3, 0xc8, 0x7c, 0x86, 0xc4, 0x89, 0x65, 0x55, 0x89, 0xd0, 0x67, + 0x67, 0xeb, 0xce, 0xb1, 0x13, 0x45, 0x38, 0x83, 0x9d, 0xf2, 0xf8, 0x1c, + 0xf8, 0x97, 0x72, 0x01, 0x29, 0x6b, 0x96, 0x70, 0x9d, 0x2e, 0x57, 0xaa, + 0xf8, 0x21, 0x5a, 0x07, 0x41, 0x0c, 0x92, 0x58, 0x54, 0xe9, 0x15, 0x67, + 0xbd, 0x78, 0xa0, 0x9b, 0xd8, 0x15, 0xe6, 0xf9, 0x54, 0xfc, 0x93, 0x2c, + 0x44, 0x44, 0x93, 0xf2, 0xcb, 0x80, 0x15, 0x12, 0xc5, 0xae, 0xdc, 0x8a, + 0xce, 0x9b, 0x1f, 0x0a, 0x02, 0xad, 0xd6, 0x58, 0x08, 0x85, 0x03, 0x8f, + 0xb3, 0x51, 0x9f, 0x85, 0xa4, 0xc8, 0xb4, 0x73, 0xc2, 0xdb, 0xbc, 0x5f, + 0x49, 0x13, 0x58, 0xd9, 0x07, 0xad, 0xbe, 0x96, 0x95, 0x8a, 0x18, 0x39, + 0xbf, 0x37, 0x14, 0x28, 0xbb, 0x59, 0xda, 0x13, 0xa1, 0x96, 0x80, 0x39, + 0x58, 0x0a, 0x30, 0xf5, 0x1c, 0x68, 0x46, 0xb0, 0x30, 0x66, 0xc6, 0x24, + 0xa4, 0x0c, 0x02, 0x36, 0x52, 0x9c, 0x59, 0x64, 0x3a, 0xe7, 0x41, 0xc0, + 0xff, 0x5c, 0x5e, 0xa4, 0xb3, 0xb5, 0x27, 0xc5, 0x3d, 0xbe, 0x26, 0x88, + 0x3e, 0xd8, 0x4f, 0x3f, 0xf0, 0x9f, 0x47, 0xeb, 0x5d, 0xcf, 0x2a, 0x2a, + 0xfa, 0x1b, 0xb5, 0x98, 0x96, 0x4e, 0x89, 0xcc, 0xab, 0xda, 0xb7, 0x5e, + 0x5a, 0xa6, 0x3a, 0xd9, 0xd4, 0x2c, 0xbf, 0x56, 0xab, 0xbd, 0x45, 0x79, + 0x8f, 0x12, 0x32, 0xc2, 0x34, 0x62, 0xd2, 0xfb, 0x86, 0xff, 0x06, 0x6c, + 0x28, 0x82, 0x8f, 0xc1, 0x01, 0x29, 0x41, 0x33, 0x35, 0x52, 0xd8, 0x7d, + 0x8a, 0xca, 0xb6, 0x4e, 0x82, 0xc1, 0xe3, 0x23, 0x1c, 0x48, 0x34, 0xbc, + 0x0d, 0x26, 0x50, 0xd4, 0xa9, 0x6f, 0xf2, 0xc2, 0x7d, 0x83, 0xd8, 0x8f, + 0xdf, 0x45, 0x7b, 0x26, 0xb7, 0x78, 0x95, 0x46, 0x9a, 0xc1, 0xa0, 0xa9, + 0x78, 0xc7, 0x63, 0xde, 0x93, 0x08, 0x61, 0x36, 0xb1, 0x92, 0x1a, 0xab, + 0x99, 0x47, 0x69, 0xfb, 0x06, 0x97, 0x93, 0x74, 0x20, 0xd1, 0xa3, 0x98, + 0x43, 0x1c, 0x21, 0xe9, 0x11, 0x37, 0x96, 0x61, 0x2f, 0x7a, 0x2a, 0x89, + 0x3d, 0xfa, 0xa0, 0x9a, 0xd1, 0x2f, 0x0d, 0xac, 0x55, 0x3f, 0x09, 0xc8, + 0x7c, 0x25, 0xa0, 0x9d, 0xcc, 0x2b, 0xde, 0xdb, 0xcb, 0xcc, 0x61, 0x50, + 0x8e, 0x26, 0xa0, 0xdc, 0x10, 0x99, 0xc2, 0xf5, 0x30, 0xbc, 0x87, 0x56, + 0xd8, 0xcc, 0x7c, 0x6f, 0x13, 0x4c, 0xe0, 0x10, 0x38, 0x1f, 0x16, 0xae, + 0x4f, 0x6a, 0x9e, 0x7e, 0x62, 0x90, 0x7b, 0xf2, 0x89, 0xc0, 0xb1, 0x68, + 0x82, 0xd7, 0x1e, 0xeb, 0xe3, 0x1b, 0xbd, 0xe1, 0xa4, 0x5e, 0x0c, 0x69, + 0x57, 0x85, 0x48, 0xe3, 0xd5, 0x4e, 0x4a, 0x36, 0x2e, 0x2c, 0x3a, 0x8e, + 0x3f, 0xd5, 0xaf, 0x20, 0x11, 0x5c, 0xfe, 0xb0, 0x42, 0x58, 0xfc, 0x72, + 0x8c, 0x4b, 0xcc, 0x16, 0xd4, 0xc6, 0x55, 0xcb, 0x7d, 0x0a, 0x78, 0x3e, + 0xc6, 0xda, 0xad, 0x33, 0x50, 0xbb, 0xae, 0x53, 0x00, 0x9c, 0x60, 0x87, + 0x84, 0x74, 0x23, 0x03, 0xf9, 0x55, 0x99, 0xab, 0x19, 0x19, 0x72, 0x36, + 0x69, 0x10, 0x56, 0xe9, 0x68, 0x7b, 0x0b, 0xc6, 0x23, 0xb4, 0x9a, 0x78, + 0x2e, 0x85, 0x5d, 0xa6, 0xc8, 0xaf, 0x56, 0x95, 0xb2, 0xd1, 0xb6, 0x05, + 0x60, 0xb2, 0xc1, 0x2c, 0x09, 0x39, 0xf6, 0xe7, 0x45, 0xf1, 0x38, 0x95, + 0xe3, 0xc6, 0x72, 0xaa, 0x98, 0x41, 0x83, 0xba, 0x7b, 0x47, 0xab, 0x70, + 0xb2, 0x66, 0x03, 0xfd, 0x84, 0x21, 0x26, 0x02, 0x37, 0x2d, 0xd4, 0x9a, + 0x99, 0x34, 0x2d, 0x48, 0xe0, 0xb5, 0x73, 0x11, 0x3f, 0xd2, 0xcc, 0xba, + 0x3e, 0xc5, 0x7c, 0x79, 0x77, 0x0f, 0xb2, 0x23, 0x98, 0x53, 0x32, 0x29, + 0xb6, 0x0b, 0x93, 0xc7, 0x23, 0x97, 0xc1, 0xd1, 0xb3, 0x4a, 0xc0, 0x3e, + 0x2b, 0xda, 0x48, 0x83, 0x6b, 0x49, 0xae, 0x42, 0xc5, 0x27, 0x17, 0x86, + 0xa6, 0x3b, 0x9f, 0x54, 0x2b, 0x9e, 0x64, 0xd1, 0x06, 0xec, 0xac, 0x63, + 0x74, 0x0c, 0xb2, 0xe1, 0x8b, 0xbc, 0x14, 0x1b, 0x76, 0x4a, 0xd5, 0xa6, + 0xee, 0x00, 0x4a, 0xb8, 0x01, 0x87, 0xa3, 0x90, 0x4f, 0xd8, 0x93, 0x24, + 0x97, 0xab, 0x46, 0xc9, 0x30, 0x29, 0x35, 0x45, 0xa1, 0x97, 0x50, 0xb6, + 0xfc, 0x6c, 0x02, 0x6e, 0x8c, 0x3b, 0x6b, 0x76, 0x77, 0x95, 0xeb, 0x41, + 0xd6, 0x80, 0x0a, 0xdd, 0x79, 0x1d, 0xb3, 0x87, 0x1b, 0x6d, 0xe8, 0x5b, + 0xc3, 0x9b, 0x5d, 0xda, 0xfb, 0x09, 0xbd, 0x45, 0x9f, 0x6e, 0x3c, 0x32, + 0x29, 0xa6, 0x7a, 0x96, 0xf2, 0x88, 0xa7, 0xb9, 0x82, 0xb3, 0x26, 0x30, + 0xc9, 0x00, 0x90, 0x09, 0xc2, 0xa0, 0xc6, 0xb2, 0xb1, 0xea, 0xd4, 0x7a, + 0x03, 0x3c, 0xab, 0xcd, 0xd6, 0x87, 0x97, 0x9c, 0xcd, 0xb2, 0x16, 0x0c, + 0xb3, 0x65, 0x3d, 0xb6, 0xb9, 0xb7, 0x35, 0x31, 0x7a, 0xee, 0xd7, 0x8f, + 0xcb, 0xb1, 0x3e, 0x7b, 0xd3, 0x8d, 0x05, 0x35, 0xb8, 0xd8, 0x37, 0x65, + 0x3d, 0x91, 0xaf, 0xc7, 0x07, 0x16, 0xbd, 0xc6, 0x69, 0x33, 0x3c, 0x36, + 0x3e, 0x43, 0x03, 0xa8, 0x18, 0xb2, 0xfd, 0xc6, 0x6a, 0x16, 0x72, 0x70, + 0x8c, 0xf9, 0x67, 0x68, 0x32, 0x25, 0x4c, 0x04, 0x35, 0x35, 0x33, 0x44, + 0x08, 0x22, 0x2a, 0x12, 0x32, 0xa6, 0xd9, 0x24, 0x59, 0xe2, 0x50, 0x04, + 0x14, 0x83, 0x22, 0x08, 0x0a, 0xad, 0x50, 0xb9, 0xbc, 0xd7, 0x6b, 0x24, + 0xd8, 0x49, 0xc0, 0x5e, 0x68, 0x25, 0xba, 0x49, 0xb1, 0x35, 0xc1, 0x36, + 0xef, 0x8b, 0x45, 0x52, 0xa2, 0x9d, 0xe0, 0x18, 0x4b, 0xb9, 0xe6, 0xb5, + 0x04, 0x30, 0x89, 0x2c, 0x0a, 0x08, 0x54, 0xf5, 0x7a, 0xdc, 0x01, 0x7e, + 0x68, 0x44, 0x89, 0x3f, 0x75, 0x02, 0x59, 0x41, 0x12, 0x3c, 0xcc, 0x83, + 0xe4, 0x03, 0x0d, 0xe4, 0x81, 0x48, 0x4e, 0xc0, 0xa1, 0xa9, 0xf8, 0x96, + 0xdd, 0x34, 0x4a, 0x6c, 0x6b, 0xbc, 0x85, 0x9b, 0x85, 0x3a, 0xb4, 0x7a, + 0x5b, 0xb5, 0x1e, 0x97, 0xd0, 0x4e, 0x39, 0x13, 0x12, 0xa1, 0x42, 0x68, + 0xb6, 0x6b, 0x6d, 0xea, 0xd8, 0xa9, 0x07, 0x73, 0x18, 0xdc, 0x88, 0x44, + 0xf3, 0xf5, 0xb9, 0xd1, 0x7a, 0x75, 0x9e, 0x86, 0x4f, 0x62, 0x09, 0xd0, + 0xa9, 0x5c, 0x3c, 0x34, 0x51, 0x83, 0xeb, 0x50, 0x25, 0xaa, 0x64, 0x76, + 0x21, 0x07, 0x10, 0xff, 0x57, 0x77, 0xd4, 0x59, 0x24, 0xd3, 0x02, 0xbf, + 0x29, 0x8a, 0x7f, 0xb3, 0xa5, 0x4a, 0x40, 0x22, 0x78, 0xe5, 0x27, 0xad, + 0x94, 0x6a, 0x6d, 0x74, 0x5b, 0x5f, 0x58, 0xb8, 0x86, 0xe3, 0xf4, 0x8a, + 0xc9, 0xea, 0xbb, 0x92, 0xcb, 0x84, 0x0b, 0xf5, 0xcf, 0x90, 0x7c, 0x6b, + 0xa4, 0x43, 0x42, 0x99, 0xc9, 0x19, 0x65, 0x9b, 0x6e, 0x47, 0x11, 0x72, + 0x5b, 0x47, 0x91, 0x57, 0x20, 0xc7, 0xad, 0x4a, 0x8d, 0xd5, 0xf1, 0x6a, + 0xf6, 0x53, 0xb7, 0x42, 0xf6, 0x19, 0x9a, 0xd9, 0x4e, 0x21, 0x27, 0x74, + 0x8c, 0xe5, 0xba, 0xb6, 0x85, 0xcd, 0x23, 0xcc, 0x51, 0x56, 0xe8, 0xbe, + 0x17, 0xf8, 0x78, 0x6b, 0xf3, 0x41, 0xa4, 0xd1, 0xa1, 0xa6, 0xd9, 0x9c, + 0xe9, 0x89, 0x4a, 0x6b, 0xe5, 0x76, 0xc7, 0xdb, 0x7b, 0xcd, 0xfa, 0x6e, + 0x5b, 0x95, 0xac, 0xe6, 0xdb, 0x6a, 0x38, 0xbc, 0x51, 0xee, 0xdb, 0xae, + 0x49, 0xd6, 0x1a, 0xdb, 0xe4, 0x3b, 0x63, 0x35, 0x6c, 0x4b, 0x26, 0x04, + 0x81, 0x36, 0x0b, 0x28, 0x5a, 0x4b, 0x26, 0x50, 0x1f, 0xc8, 0xb6, 0xe5, + 0x70, 0x9e, 0x59, 0x97, 0xee, 0xb2, 0x35, 0x93, 0x82, 0xfe, 0x94, 0x9a, + 0xd5, 0x34, 0x90, 0xa5, 0xb2, 0xed, 0x10, 0x93}, + // cipherTextDigest + {0x98, 0x2d, 0xcf, 0x8b, 0x35, 0x3e, 0x16, 0x1f, 0x25, 0x9d, 0xc1, + 0xff, 0x59, 0x98, 0x35, 0x76, 0xed, 0xcf, 0x5d, 0xe4, 0x49, 0xf8, + 0x65, 0xe0, 0x3f, 0x98, 0x93, 0x6e, 0xdb, 0x04, 0x71, 0xa6}, + // secret + {0x7a, 0xf1, 0xb8, 0x17, 0x6e, 0x9d, 0x37, 0x31, 0xbf, 0xd6, 0x7e, + 0xfc, 0xa8, 0xcf, 0x1b, 0xe3, 0x57, 0x28, 0xd0, 0x68, 0x1e, 0x7e, + 0xdd, 0xe6, 0x3f, 0x74, 0xb2, 0x9b, 0xd1, 0x6b, 0x76, 0x40}, + true}, + // tcID: 56 + {56, + params_ml_kem1024_test_mode, + // entropy + {0x9a, 0x47, 0x87, 0x19, 0xa0, 0x42, 0x4a, 0x37, 0xd0, 0xa7, 0x7d, + 0xc8, 0xd7, 0xe1, 0xd9, 0x60, 0x24, 0x17, 0xcc, 0x10, 0x0c, 0x27, + 0x44, 0x3a, 0x33, 0xc1, 0x1e, 0x5a, 0x60, 0xf9, 0x9b, 0x14}, + // publicKey + {0x20, 0xb8, 0xad, 0x94, 0x3c, 0x5b, 0x0b, 0xd3, 0x0b, 0x07, 0x60, 0xac, + 0xac, 0x5b, 0x04, 0x37, 0x9a, 0xa6, 0xc1, 0xa5, 0xca, 0x64, 0x44, 0x15, + 0xf0, 0x93, 0xcb, 0x94, 0x03, 0x43, 0xa5, 0x7b, 0x5a, 0xcf, 0x54, 0x3f, + 0xb6, 0x60, 0x89, 0xc9, 0x70, 0x6e, 0xd3, 0x13, 0xcd, 0x06, 0xcb, 0x4b, + 0x56, 0x83, 0x7c, 0x0a, 0x97, 0x16, 0xb3, 0x1a, 0xbb, 0x2e, 0x1c, 0xbc, + 0xc1, 0x8c, 0x50, 0xa1, 0xf1, 0xcd, 0x8c, 0x48, 0x0a, 0xe3, 0x0b, 0x60, + 0x95, 0xf4, 0x3b, 0x45, 0x3b, 0x65, 0x89, 0xf6, 0x2c, 0xd4, 0x0a, 0x34, + 0xb8, 0xb4, 0x4b, 0x8b, 0xdb, 0x92, 0x77, 0x22, 0x86, 0x8b, 0xe2, 0x21, + 0x4a, 0x19, 0x7b, 0xa6, 0x34, 0x09, 0x86, 0x6c, 0xc9, 0x61, 0xec, 0x7d, + 0xa8, 0x18, 0x16, 0x6c, 0x97, 0x48, 0x97, 0x6c, 0xba, 0xcc, 0xb9, 0x5d, + 0xf2, 0xd1, 0x55, 0x97, 0x95, 0x8a, 0xce, 0x18, 0x96, 0xef, 0x60, 0x9b, + 0x1d, 0x27, 0x2c, 0xc7, 0xd3, 0xb8, 0xcb, 0xe8, 0xb1, 0x38, 0xfb, 0xb0, + 0x53, 0xb3, 0x11, 0x30, 0xb8, 0x21, 0x59, 0xa4, 0x6e, 0x8b, 0x3a, 0x2d, + 0x87, 0x56, 0x22, 0x54, 0x88, 0x3c, 0x2c, 0x1b, 0x5b, 0x78, 0xe9, 0x8a, + 0x8d, 0x84, 0x6d, 0x3d, 0xc7, 0x0f, 0x0d, 0x08, 0xbb, 0x9e, 0x23, 0x77, + 0x94, 0x78, 0x38, 0xc7, 0xd7, 0x4b, 0x94, 0xeb, 0x4f, 0xad, 0x9b, 0x70, + 0x4a, 0x68, 0xa1, 0x83, 0x48, 0x84, 0x7b, 0xc4, 0xbf, 0x08, 0x42, 0x90, + 0xeb, 0xc0, 0x7b, 0x09, 0x47, 0xcf, 0x1a, 0xdc, 0x32, 0xf9, 0x95, 0x0c, + 0x34, 0xb3, 0x3a, 0x0a, 0x34, 0x0c, 0xc0, 0x26, 0x9e, 0xd3, 0xc8, 0x52, + 0x0f, 0xe9, 0x71, 0x78, 0x19, 0xa8, 0xef, 0x81, 0x73, 0xdf, 0x9a, 0x29, + 0x24, 0xc2, 0x2e, 0x0e, 0xab, 0x6f, 0x60, 0x22, 0x0d, 0x5d, 0xb1, 0xbf, + 0x7e, 0x98, 0xa4, 0xd6, 0xa5, 0xc2, 0xd4, 0xa6, 0xc3, 0xd0, 0xdc, 0x2e, + 0x8e, 0x48, 0x5d, 0xd2, 0x67, 0x8c, 0x96, 0x81, 0x24, 0x81, 0x3a, 0x23, + 0x5d, 0xa4, 0x12, 0x50, 0xe5, 0xc5, 0x80, 0x29, 0xbe, 0x7f, 0xd4, 0x2c, + 0xa6, 0x88, 0x3a, 0xd4, 0x60, 0xcd, 0xd3, 0xc0, 0xb2, 0xb3, 0xf2, 0x81, + 0x17, 0xb9, 0xcf, 0x63, 0x83, 0x8b, 0xca, 0xc0, 0x18, 0x98, 0xc6, 0x4c, + 0x1d, 0xb5, 0x30, 0xc3, 0x18, 0xa3, 0x75, 0x06, 0x3b, 0xf3, 0x67, 0x7e, + 0xdb, 0xa3, 0x16, 0x9c, 0x88, 0x43, 0xf0, 0xf4, 0x78, 0xa8, 0x69, 0x4f, + 0x28, 0x52, 0x12, 0x62, 0xf2, 0xb4, 0xc5, 0xd4, 0x07, 0x32, 0x03, 0x98, + 0x69, 0xc6, 0x74, 0x18, 0x25, 0x69, 0xe2, 0x26, 0x40, 0x41, 0xe8, 0xa3, + 0xf5, 0x53, 0xbb, 0xf1, 0xe9, 0x4f, 0xb0, 0xc7, 0x60, 0x08, 0x90, 0x61, + 0x52, 0x66, 0x67, 0x11, 0x03, 0xc6, 0xe2, 0x02, 0x51, 0xdc, 0xa9, 0x52, + 0xda, 0x94, 0x3e, 0xff, 0xc1, 0x0b, 0xa5, 0x6a, 0xc5, 0x63, 0xd3, 0x9f, + 0x3f, 0xb1, 0x45, 0x14, 0xcb, 0x3d, 0x0a, 0x6a, 0x28, 0x9c, 0x37, 0x65, + 0x47, 0x32, 0x22, 0xa0, 0x58, 0x08, 0xb2, 0x45, 0x9a, 0x03, 0xd5, 0xbd, + 0x0c, 0x20, 0x22, 0x41, 0xd5, 0x5f, 0x20, 0x22, 0xcd, 0xf8, 0xca, 0xc4, + 0x39, 0xa4, 0x4d, 0xef, 0x49, 0x51, 0x40, 0x34, 0x16, 0xa1, 0x38, 0x67, + 0xac, 0xd3, 0x73, 0x56, 0x84, 0xb2, 0x59, 0xb8, 0xae, 0x79, 0x3b, 0x7b, + 0x0d, 0x99, 0x63, 0x7c, 0xb8, 0xca, 0x0d, 0x77, 0x21, 0xde, 0x69, 0xbf, + 0x93, 0xf2, 0x17, 0xd8, 0x86, 0x6a, 0x0e, 0x54, 0xae, 0x84, 0x20, 0x92, + 0x8a, 0xc4, 0x0d, 0xd5, 0xaa, 0x30, 0xb3, 0x24, 0x95, 0x97, 0x19, 0x38, + 0x07, 0x66, 0x3a, 0xc0, 0xfb, 0x95, 0x0f, 0x06, 0xba, 0xd6, 0x95, 0xb6, + 0xbc, 0x3b, 0xb5, 0x7c, 0xa4, 0x4a, 0xd2, 0x66, 0x6f, 0x0c, 0x03, 0x67, + 0x10, 0x21, 0xc7, 0xce, 0x3c, 0xb0, 0xde, 0xd0, 0x38, 0x0e, 0xda, 0x24, + 0x0f, 0x76, 0x3a, 0x81, 0x47, 0xca, 0x3b, 0x07, 0x0e, 0x53, 0x85, 0x3e, + 0xd1, 0xf3, 0xa4, 0x04, 0xb1, 0xbd, 0xf6, 0xba, 0xcc, 0x9b, 0xf7, 0x7e, + 0x74, 0x5a, 0x65, 0xf4, 0xc3, 0x7b, 0x9b, 0xd6, 0xce, 0xc0, 0x7a, 0xbd, + 0xe4, 0xec, 0xb0, 0x15, 0x70, 0xc7, 0xa4, 0x71, 0x5f, 0x39, 0x75, 0x37, + 0x08, 0x49, 0x76, 0x4e, 0x31, 0x3f, 0xac, 0x2c, 0x51, 0xf8, 0x50, 0xa7, + 0x20, 0x5c, 0x29, 0x20, 0x52, 0x77, 0xc1, 0x35, 0x02, 0xd1, 0x75, 0x35, + 0x80, 0xa6, 0x58, 0x35, 0x39, 0xc8, 0x3a, 0x77, 0x64, 0x74, 0xd5, 0xa3, + 0x97, 0x22, 0x56, 0x6e, 0x3a, 0x6e, 0x92, 0xa9, 0x3f, 0x5b, 0x66, 0xc9, + 0x15, 0xf0, 0xbe, 0x2f, 0xac, 0x75, 0x23, 0xa1, 0x05, 0x5d, 0x79, 0xc8, + 0x5b, 0x81, 0x8a, 0xda, 0xe1, 0x42, 0xeb, 0x80, 0x3c, 0xb7, 0x59, 0xaf, + 0xfa, 0x9c, 0x52, 0xbc, 0xb3, 0x67, 0x7e, 0x19, 0xaa, 0xa0, 0x4a, 0xc8, + 0x16, 0x06, 0xa9, 0xb5, 0x37, 0x76, 0x88, 0x96, 0x2b, 0x4c, 0x09, 0xbc, + 0x42, 0xf5, 0x63, 0xd0, 0x11, 0x38, 0x78, 0x86, 0xbb, 0xf2, 0xbb, 0x30, + 0x99, 0x68, 0xc3, 0xaf, 0xb3, 0x95, 0xf6, 0x01, 0xb4, 0x92, 0x71, 0x22, + 0xe5, 0x51, 0x97, 0x07, 0x92, 0x62, 0x72, 0x92, 0x5e, 0xc1, 0x61, 0x35, + 0x55, 0xc9, 0x84, 0xae, 0xac, 0x70, 0x83, 0xa1, 0x38, 0xe8, 0x37, 0x11, + 0x6f, 0x83, 0x53, 0xda, 0x80, 0x5d, 0x07, 0xd0, 0xbe, 0xa0, 0x3b, 0xc5, + 0x98, 0x64, 0x45, 0x48, 0x42, 0x1e, 0x70, 0xb4, 0x3c, 0xc6, 0x2c, 0x82, + 0x6c, 0xe2, 0x57, 0xdc, 0x42, 0x0d, 0x06, 0x75, 0x76, 0x52, 0x9c, 0x24, + 0xf9, 0x13, 0xa4, 0x54, 0xe7, 0xaf, 0xa2, 0x84, 0x51, 0x21, 0x42, 0x9b, + 0x1c, 0x19, 0xb2, 0x0e, 0x75, 0x1d, 0x97, 0x80, 0x4a, 0xc7, 0x68, 0x28, + 0xc7, 0x05, 0x4f, 0xba, 0x09, 0x1e, 0xab, 0x1c, 0x5c, 0x9e, 0x40, 0x71, + 0x50, 0x92, 0xc8, 0x24, 0xdb, 0x69, 0xd5, 0xc7, 0xca, 0xd1, 0xec, 0x19, + 0x59, 0xfc, 0x1c, 0x68, 0xab, 0x8a, 0x9a, 0x92, 0x8f, 0x50, 0xd8, 0x16, + 0x61, 0x0b, 0x38, 0xed, 0x72, 0x02, 0x77, 0x47, 0x79, 0x89, 0x14, 0x71, + 0xbe, 0x16, 0x7b, 0xf5, 0x3a, 0xb3, 0x98, 0xf2, 0x9b, 0xaf, 0x12, 0x24, + 0x4b, 0xdb, 0x56, 0xa8, 0x17, 0xa2, 0xa8, 0x13, 0x35, 0x31, 0xf1, 0x72, + 0xc6, 0x17, 0x8f, 0x19, 0x05, 0x5e, 0x53, 0xc1, 0x48, 0x69, 0x23, 0xab, + 0x1a, 0xdc, 0x06, 0xca, 0x53, 0xbf, 0x7c, 0xd2, 0x07, 0xf3, 0x4a, 0xb0, + 0xdb, 0x10, 0x65, 0xb0, 0x51, 0x52, 0x31, 0x56, 0xa2, 0xbf, 0x82, 0xb9, + 0x1b, 0xf0, 0x9e, 0x65, 0xb1, 0x06, 0x6c, 0x65, 0xa7, 0xbd, 0x61, 0xa1, + 0xf3, 0x95, 0x61, 0xc5, 0x55, 0x77, 0xe1, 0xb9, 0xa5, 0xed, 0x78, 0x1b, + 0x52, 0x12, 0x56, 0x9e, 0x79, 0x9c, 0x6c, 0xb3, 0x43, 0x92, 0x82, 0xa0, + 0x6b, 0x38, 0xcc, 0xb0, 0x64, 0xab, 0xd1, 0xf4, 0xbb, 0xa8, 0x0c, 0x73, + 0xe8, 0x48, 0x76, 0x2f, 0x8c, 0x9c, 0xe9, 0x4b, 0x49, 0x9c, 0x50, 0x2a, + 0xbe, 0x4b, 0x67, 0x27, 0xec, 0x7b, 0x55, 0xe4, 0xa5, 0xc0, 0x43, 0xa0, + 0x45, 0x77, 0xc4, 0xed, 0x86, 0x5c, 0x53, 0x47, 0x61, 0x1e, 0xe3, 0xb0, + 0xe5, 0xec, 0x93, 0x0c, 0x91, 0xbe, 0x57, 0xf6, 0x8e, 0x47, 0xe9, 0xa0, + 0x74, 0xe4, 0x5f, 0xe0, 0x48, 0x61, 0xff, 0x42, 0x38, 0xb8, 0x16, 0x58, + 0xd0, 0x17, 0x2e, 0x27, 0x7b, 0x22, 0xad, 0x97, 0xb0, 0x26, 0x3c, 0xa8, + 0x1c, 0xc3, 0x38, 0x37, 0x90, 0xb5, 0x77, 0xb3, 0xcf, 0xed, 0x06, 0x8b, + 0x10, 0x20, 0x3e, 0xd4, 0x71, 0x94, 0x5f, 0x42, 0x47, 0xb5, 0xd2, 0x32, + 0x65, 0xe9, 0x36, 0xa8, 0x60, 0xcd, 0xed, 0xb4, 0xa9, 0x53, 0x00, 0x04, + 0x2b, 0x41, 0x9e, 0x4c, 0x2c, 0x3b, 0x55, 0xe1, 0x2f, 0x00, 0xda, 0xb1, + 0xdb, 0xb2, 0x89, 0x96, 0x5b, 0x9d, 0xfa, 0xda, 0x8e, 0x36, 0x27, 0x2f, + 0x4d, 0x16, 0xa0, 0x5a, 0x43, 0xae, 0xa2, 0x58, 0xb1, 0x17, 0x3a, 0x9a, + 0x27, 0x34, 0x17, 0xd7, 0x56, 0x27, 0xfa, 0x83, 0x24, 0x26, 0xcb, 0x21, + 0xb7, 0x41, 0x80, 0x3f, 0x1a, 0x38, 0xb7, 0xab, 0x7e, 0x4b, 0x39, 0x81, + 0x83, 0x24, 0x68, 0xa0, 0x59, 0x4a, 0x06, 0x26, 0xbe, 0xa1, 0xc4, 0x8f, + 0x67, 0x58, 0x13, 0x05, 0x6a, 0x49, 0xcf, 0x98, 0x81, 0x8f, 0xc9, 0x7e, + 0x79, 0xe1, 0x25, 0xfd, 0x53, 0x5a, 0xaf, 0x80, 0xa5, 0xf1, 0x7b, 0x69, + 0xbc, 0xca, 0xb1, 0x1d, 0x39, 0x31, 0xe7, 0x6c, 0x01, 0x0c, 0xc3, 0x78, + 0x2f, 0x86, 0x94, 0xc3, 0x89, 0xa8, 0x9f, 0x8b, 0x02, 0xc5, 0x93, 0x2d, + 0xa1, 0xfc, 0x50, 0x09, 0x30, 0x80, 0x74, 0x64, 0x90, 0x88, 0x05, 0x33, + 0x19, 0x97, 0xa8, 0x2c, 0x87, 0x84, 0xcb, 0xa5, 0x68, 0x67, 0x54, 0xa3, + 0xce, 0xf9, 0xa3, 0x36, 0xac, 0x59, 0xf0, 0xf9, 0xc0, 0x2d, 0x29, 0x61, + 0xf3, 0x23, 0x4f, 0x70, 0xb1, 0x4e, 0x8f, 0xe2, 0x9a, 0x68, 0x6a, 0x22, + 0x9c, 0x91, 0x55, 0x26, 0x32, 0x6b, 0xce, 0x62, 0x75, 0x5a, 0xf0, 0xb3, + 0x07, 0x98, 0x99, 0x76, 0x99, 0x9a, 0x79, 0xb2, 0x4e, 0x8b, 0x70, 0x2a, + 0x53, 0x71, 0x50, 0x50, 0x38, 0x13, 0xca, 0x21, 0x74, 0x6c, 0xe5, 0x7e, + 0xbc, 0x5c, 0x82, 0xd4, 0x53, 0x44, 0x47, 0x47, 0xa2, 0xc2, 0x62, 0x19, + 0xf3, 0xf8, 0x6c, 0x9a, 0xb8, 0xc1, 0x32, 0x02, 0x86, 0x8d, 0x38, 0x45, + 0x5b, 0x36, 0x0e, 0xe3, 0x07, 0x24, 0x56, 0x19, 0x1f, 0xb6, 0x15, 0x73, + 0x34, 0xf6, 0x62, 0x58, 0x98, 0x39, 0x6f, 0x31, 0x61, 0xab, 0x2c, 0xa0, + 0xfa, 0x51, 0x3e, 0xf7, 0x78, 0x60, 0x22, 0x28, 0x6e, 0x7b, 0x8a, 0x6f, + 0xd5, 0x3b, 0x62, 0x83, 0xa1, 0x3a, 0xcb, 0x0b, 0x3a, 0xb2, 0x17, 0x39, + 0x30, 0x17, 0xc8, 0xc3, 0xe3, 0x2e, 0xb3, 0x66, 0xbb, 0xb9, 0x2b, 0x89, + 0x04, 0x47, 0x27, 0x8b, 0xcb, 0xbd, 0xf9, 0xe0, 0x53, 0xc2, 0xe8, 0x0f, + 0x73, 0x44, 0xc2, 0xd8, 0x11, 0x44, 0x6b, 0xba, 0x48, 0x75, 0x14, 0x15, + 0xad, 0x92, 0x5a, 0x61, 0xba, 0x15, 0x3b, 0x36, 0x37, 0x10, 0x04, 0x03, + 0xd8, 0x14, 0x60, 0xa3, 0x70, 0x87, 0x5f, 0x44, 0x24, 0x34, 0xd8, 0x40, + 0xc7, 0xbb, 0x6a, 0x6e, 0x90, 0x98, 0x23, 0xa5, 0x4b, 0x31, 0x48, 0x74, + 0xca, 0x2c, 0xc3, 0x04, 0x52, 0x6a, 0xf9, 0xd0, 0x91, 0x1f, 0xc0, 0xac, + 0xb3, 0x7c, 0x38, 0xe3, 0x5a, 0xae, 0xe5, 0x9b, 0xbc, 0x3f, 0x48, 0x51, + 0x4f, 0x60, 0x2a, 0xba, 0xfc, 0x83, 0x37, 0xc5, 0xcc, 0x91, 0xeb, 0x8c, + 0x9c, 0x25, 0x6e, 0xb3, 0x67, 0x62, 0x96, 0x56, 0xc1, 0x05, 0xe9, 0xc5, + 0x86, 0x97, 0x5e, 0x23, 0xe6, 0x9c, 0x18, 0x52, 0x7f, 0xa1, 0xf0, 0x63, + 0x35, 0x8b, 0x80, 0xb6, 0xfa, 0x88, 0x80, 0xb3, 0x99, 0x1f, 0xf6, 0xa4, + 0x20, 0x25, 0x86, 0xd4, 0xd8, 0x72, 0xf7, 0x37, 0xa3, 0x86, 0xb7, 0xa8, + 0x40, 0x51, 0x7c, 0x6b, 0x87, 0x95, 0x08, 0xd5, 0x50, 0x79, 0xda, 0x21, + 0x01, 0xc7, 0x81, 0xf0, 0x4a, 0x80, 0x58, 0x37, 0xac, 0x3e, 0xfb, 0x55, + 0x0d, 0x57, 0x1e, 0xf6, 0x0c, 0x15, 0x3d, 0x98, 0xaa, 0xd5, 0x8b, 0x1e, + 0xb6, 0xe7, 0x5d, 0xc5, 0xe5, 0x26, 0xe1, 0x12, 0x5a, 0xcf, 0xf8, 0x46, + 0xbc, 0x37, 0x20, 0xbb, 0x92, 0xac, 0x06, 0x6b, 0x24, 0xf6, 0xb9, 0x7c, + 0x96, 0xdd, 0xb5, 0x58, 0x1e, 0x16, 0x0b, 0x75, 0x2c, 0x4e, 0xa8, 0xf1, + 0x18, 0xcc, 0xc6, 0xd7, 0x89, 0xb8, 0x71, 0xc6, 0xd2, 0x3f, 0x1e, 0x09, + 0x74, 0xd0, 0x7b, 0xf2, 0x73, 0x3c, 0x48, 0xec}, + // cipherTextDigest + {0xba, 0x16, 0x25, 0xca, 0xc0, 0xcb, 0xf3, 0xde, 0x35, 0xf9, 0x9e, + 0x96, 0xa4, 0x03, 0x7e, 0xf7, 0xc2, 0xd5, 0x8a, 0x17, 0xad, 0xee, + 0x22, 0xab, 0x3b, 0x61, 0x60, 0x3d, 0x43, 0x12, 0x4c, 0x4d}, + // secret + {0x6d, 0x39, 0xa2, 0xef, 0xb6, 0xdf, 0xdc, 0xd8, 0x67, 0x50, 0x25, + 0x6b, 0x68, 0x7a, 0x5c, 0xdc, 0xbc, 0x50, 0x51, 0x2e, 0x2c, 0xa7, + 0xab, 0x08, 0x3a, 0x8e, 0x3b, 0x16, 0x06, 0xa6, 0x3d, 0xbd}, + true}, + // tcID: 57 + {57, + params_ml_kem1024_test_mode, + // entropy + {0x93, 0x68, 0xdf, 0x91, 0x15, 0x45, 0x9a, 0xfc, 0x4b, 0x66, 0x2c, + 0x4a, 0xba, 0x99, 0x39, 0x71, 0xe4, 0xa9, 0x0f, 0x59, 0xe4, 0x9c, + 0x54, 0xdc, 0x72, 0xa9, 0x38, 0xd4, 0xa0, 0x2d, 0xd6, 0x72}, + // publicKey + {0xca, 0xe5, 0x26, 0xc6, 0x72, 0xa1, 0xd6, 0x86, 0x0c, 0xfa, 0x76, 0x82, + 0xda, 0x53, 0x49, 0xa2, 0xfc, 0x68, 0x31, 0xf0, 0x14, 0x91, 0x02, 0x1c, + 0x8d, 0xc4, 0x81, 0x3b, 0x94, 0xab, 0x2e, 0x5a, 0x87, 0x5d, 0x9b, 0x9c, + 0x57, 0xa5, 0x92, 0xdb, 0xb5, 0x4d, 0xcb, 0x63, 0x17, 0x00, 0x59, 0x72, + 0x80, 0x42, 0x37, 0xf3, 0xf6, 0xb1, 0x7c, 0x1a, 0xae, 0x9b, 0x67, 0xa6, + 0xbf, 0x23, 0xb3, 0xfb, 0x71, 0x44, 0xd0, 0x94, 0xa4, 0xdd, 0x97, 0x4f, + 0xec, 0x50, 0x60, 0x03, 0x45, 0x73, 0x14, 0xc3, 0xb3, 0x69, 0x29, 0x84, + 0xda, 0x2b, 0x44, 0xe5, 0x84, 0x94, 0x78, 0x50, 0xcf, 0x53, 0x02, 0xb5, + 0x59, 0xfb, 0x12, 0xc5, 0xbb, 0x11, 0xb0, 0x89, 0x67, 0xfa, 0x03, 0xa0, + 0xd1, 0x90, 0x77, 0x28, 0x38, 0x2b, 0x9b, 0x9b, 0xbe, 0x83, 0x85, 0x14, + 0x25, 0xea, 0x8e, 0xb7, 0x66, 0xb2, 0x4b, 0x73, 0xcb, 0x89, 0x87, 0xbb, + 0x34, 0x4b, 0x3c, 0x32, 0x46, 0x84, 0x81, 0x71, 0xb2, 0x6c, 0x77, 0x64, + 0xbf, 0x6c, 0xbc, 0xd3, 0xfc, 0xb6, 0xe4, 0x68, 0x0e, 0x8f, 0x89, 0x5a, + 0x7a, 0xc3, 0x57, 0xca, 0x6c, 0x14, 0x94, 0x8a, 0xab, 0x5d, 0x2b, 0xbc, + 0xd2, 0xc7, 0x7b, 0x20, 0x65, 0xbd, 0xab, 0x83, 0x72, 0x11, 0x17, 0x75, + 0x0d, 0xe6, 0x68, 0x43, 0x83, 0x0e, 0xcd, 0xd4, 0x7b, 0x3d, 0xe3, 0xcc, + 0x0d, 0xe3, 0xb6, 0x98, 0x20, 0x41, 0x79, 0xf3, 0x9a, 0xd3, 0xd3, 0x49, + 0xf8, 0x6a, 0x01, 0x24, 0xb4, 0x92, 0xab, 0xd6, 0xbe, 0xad, 0x77, 0x13, + 0xeb, 0x59, 0x3f, 0x3f, 0xeb, 0x98, 0x70, 0xf5, 0xa6, 0xea, 0x72, 0x1f, + 0xdd, 0x06, 0x21, 0xb9, 0xb4, 0x87, 0xcf, 0x1c, 0xa9, 0xae, 0x56, 0xb7, + 0xde, 0x02, 0x2b, 0xc6, 0x76, 0x16, 0xb2, 0xdc, 0x03, 0xe6, 0xf2, 0x3c, + 0x0e, 0xa1, 0x35, 0x00, 0x95, 0x1c, 0x2e, 0xf6, 0x98, 0xf6, 0xbb, 0x8b, + 0x28, 0x43, 0x2a, 0x87, 0x5b, 0x67, 0x73, 0xca, 0x15, 0x59, 0x47, 0x75, + 0x96, 0xc6, 0xc5, 0xc7, 0x21, 0x95, 0x24, 0xc5, 0x54, 0x7e, 0x36, 0xcf, + 0x91, 0x43, 0x7e, 0x25, 0x72, 0x93, 0x94, 0x60, 0x74, 0xa3, 0xba, 0x6a, + 0x62, 0xa7, 0x27, 0x8b, 0xd5, 0xba, 0x0c, 0x3c, 0x5d, 0x33, 0x67, 0x1e, + 0xfc, 0xec, 0x4c, 0x04, 0xd2, 0x1d, 0x50, 0x36, 0xb4, 0xd5, 0xf9, 0x2a, + 0xb9, 0x96, 0xa5, 0xcd, 0x93, 0x21, 0x10, 0xa6, 0x01, 0x9e, 0xb4, 0x04, + 0x0c, 0xfb, 0xce, 0xcf, 0x75, 0x7e, 0x48, 0x11, 0x39, 0x3c, 0x8b, 0x48, + 0xca, 0x32, 0x19, 0x02, 0x19, 0x21, 0xa6, 0x2b, 0x19, 0xa3, 0x66, 0x63, + 0x6c, 0x75, 0x6a, 0xaa, 0x04, 0x3a, 0x6c, 0x2c, 0x1e, 0x41, 0x74, 0x00, + 0xda, 0x04, 0xa7, 0x3b, 0xdc, 0x1a, 0x41, 0x10, 0xc5, 0x19, 0x7b, 0x1e, + 0x2a, 0x89, 0x0a, 0xcb, 0x20, 0xb2, 0xcc, 0x57, 0x7c, 0xd6, 0xd3, 0x44, + 0x67, 0x56, 0xba, 0xe2, 0xe5, 0x6e, 0xf0, 0xda, 0xbb, 0xdf, 0x39, 0x19, + 0x0a, 0x3b, 0xb6, 0x00, 0x59, 0x4c, 0xe0, 0xf2, 0x55, 0x14, 0x01, 0x49, + 0x1c, 0x98, 0xcb, 0xe8, 0x8a, 0x48, 0x6d, 0x95, 0x9b, 0x1d, 0x03, 0x8a, + 0x10, 0xa2, 0xca, 0x87, 0x5a, 0x10, 0x56, 0x65, 0x07, 0xc8, 0x28, 0x49, + 0xca, 0x72, 0xa3, 0x11, 0xb2, 0x23, 0x9a, 0xd3, 0x94, 0x38, 0x98, 0xcc, + 0xd1, 0xbb, 0x4f, 0x55, 0x45, 0x1b, 0x06, 0xda, 0xb3, 0x30, 0x52, 0xc6, + 0xee, 0x25, 0x21, 0x99, 0x80, 0xc4, 0x3d, 0x81, 0xc9, 0x76, 0x42, 0x85, + 0x02, 0xb9, 0x5f, 0xdc, 0x9b, 0xaf, 0x7d, 0x3b, 0x41, 0x47, 0x21, 0x21, + 0x4a, 0x0a, 0x36, 0xb5, 0xec, 0x2b, 0x20, 0x27, 0xc5, 0x4a, 0xf7, 0xb8, + 0x17, 0xb3, 0x20, 0xe5, 0x23, 0x9f, 0x20, 0xf0, 0xb1, 0xd0, 0x6b, 0x7d, + 0x60, 0x10, 0x03, 0x04, 0xf2, 0x2a, 0x43, 0x0c, 0xac, 0x64, 0xc9, 0x79, + 0xa3, 0xc1, 0xa7, 0x4c, 0x87, 0x31, 0xce, 0xd6, 0x70, 0x83, 0xf6, 0x1b, + 0xe0, 0xaa, 0x5c, 0x58, 0x27, 0x57, 0x21, 0xb2, 0x9e, 0xc7, 0x7a, 0xb2, + 0x73, 0x6a, 0x60, 0x6a, 0xa7, 0xa7, 0xf8, 0x14, 0x48, 0x47, 0xc9, 0x3e, + 0xad, 0x1c, 0x60, 0x6c, 0x30, 0x24, 0x59, 0xd5, 0x75, 0x7e, 0x32, 0x8a, + 0xd7, 0x53, 0x20, 0xda, 0x83, 0x0a, 0xd5, 0xcb, 0x52, 0xfb, 0x49, 0x6b, + 0x7c, 0x65, 0x79, 0xe1, 0x24, 0xbc, 0x15, 0x54, 0x2c, 0xc1, 0x13, 0x28, + 0xa2, 0x2b, 0x67, 0x64, 0x66, 0x4b, 0x5e, 0x65, 0x06, 0xcd, 0x07, 0x92, + 0xeb, 0xdc, 0xbe, 0x4a, 0x37, 0x23, 0x49, 0x47, 0x3b, 0xf6, 0xeb, 0xc3, + 0xc1, 0xa9, 0x7c, 0xea, 0xd0, 0xc4, 0xbc, 0x04, 0xca, 0x07, 0x4b, 0x06, + 0xcf, 0x20, 0x4d, 0xe0, 0xb8, 0x5c, 0x41, 0x64, 0xcb, 0xf9, 0x94, 0xc9, + 0xb5, 0xba, 0x1e, 0xd6, 0x05, 0x5a, 0x40, 0xea, 0xbd, 0x91, 0xe9, 0x1f, + 0x79, 0x70, 0x8e, 0x25, 0xa4, 0xb0, 0x9b, 0x4c, 0x88, 0xae, 0x2c, 0x44, + 0x7b, 0x30, 0xbe, 0x86, 0x46, 0x46, 0xd4, 0xfc, 0x01, 0x01, 0xbc, 0x87, + 0xc8, 0xd4, 0x9f, 0x29, 0xf8, 0x2d, 0x88, 0xa7, 0x11, 0x0d, 0xd9, 0x14, + 0x3a, 0x0a, 0xaa, 0xe6, 0x61, 0x48, 0x88, 0x97, 0x71, 0x3b, 0x12, 0x49, + 0x99, 0x05, 0x1e, 0x97, 0x1a, 0x0e, 0xc2, 0xb8, 0x96, 0x82, 0x70, 0x74, + 0x6d, 0x07, 0x18, 0xf2, 0xa3, 0xa9, 0x27, 0x4c, 0x20, 0xfd, 0x46, 0x67, + 0x6a, 0xa3, 0x6a, 0x91, 0x92, 0xb2, 0xe8, 0x91, 0x2f, 0x38, 0xd5, 0xb1, + 0x20, 0x87, 0x67, 0x3b, 0x9a, 0x52, 0x8a, 0xd8, 0x41, 0xd6, 0x23, 0x0f, + 0xe6, 0x14, 0xb3, 0xf5, 0x40, 0x4e, 0x0d, 0xd8, 0x81, 0x07, 0xeb, 0x9b, + 0x6f, 0xa2, 0x41, 0xf9, 0xcc, 0x00, 0x3d, 0xbb, 0x40, 0x06, 0x41, 0x3c, + 0x6d, 0x57, 0x4d, 0x78, 0x34, 0xce, 0x94, 0x98, 0x06, 0x39, 0xd2, 0xca, + 0x63, 0x06, 0x3f, 0xae, 0x6a, 0x0a, 0xc0, 0xb2, 0x0b, 0xb4, 0x24, 0x86, + 0x58, 0x25, 0xc2, 0x02, 0x53, 0x86, 0x60, 0xf1, 0x67, 0xeb, 0x3c, 0x7e, + 0xbd, 0x56, 0xc2, 0x08, 0x34, 0x47, 0xa0, 0x97, 0x11, 0x79, 0x71, 0xbe, + 0xc5, 0x9b, 0x3a, 0x12, 0xa2, 0x2e, 0x62, 0x23, 0x7d, 0xec, 0x1b, 0x5d, + 0xcc, 0x89, 0x34, 0x6d, 0x21, 0x1e, 0x05, 0xc3, 0x14, 0x9d, 0xc3, 0x1c, + 0x42, 0x37, 0x72, 0xfd, 0x84, 0x56, 0x30, 0x32, 0x08, 0x0b, 0x28, 0x42, + 0x14, 0x71, 0x27, 0x83, 0x90, 0x39, 0x31, 0xd2, 0x0f, 0xb8, 0x32, 0x8a, + 0xfe, 0xd6, 0x48, 0x48, 0xf6, 0xcc, 0x16, 0x29, 0x75, 0x82, 0x67, 0xcc, + 0x3d, 0x04, 0x1b, 0x2a, 0x68, 0x64, 0xc8, 0x75, 0x59, 0xdf, 0xb5, 0x41, + 0x94, 0x49, 0xb0, 0x55, 0x15, 0x3f, 0xdd, 0xab, 0xc5, 0xa1, 0x42, 0x4c, + 0xb4, 0x69, 0x56, 0xc5, 0xb8, 0x11, 0x35, 0x07, 0x78, 0x7e, 0xb0, 0xc7, + 0x62, 0x3c, 0xb7, 0xfa, 0x75, 0xa1, 0x76, 0xd0, 0x33, 0x3b, 0x64, 0xb2, + 0xb4, 0x24, 0x18, 0xba, 0x87, 0xbb, 0x44, 0xc0, 0x73, 0x63, 0xa7, 0x8d, + 0x0f, 0xdb, 0x24, 0x72, 0x85, 0x59, 0x5b, 0xac, 0x27, 0x44, 0x2a, 0x1b, + 0xf2, 0x24, 0x9c, 0x6f, 0xa9, 0x0f, 0x9a, 0xb1, 0x09, 0x64, 0xda, 0x29, + 0x52, 0x02, 0x8b, 0xd9, 0x12, 0x78, 0x64, 0xc5, 0xc3, 0x66, 0x48, 0x75, + 0x97, 0xd9, 0x14, 0x35, 0xa6, 0x4b, 0xa0, 0xc2, 0x4c, 0x25, 0xd2, 0x59, + 0xb8, 0x63, 0xa4, 0x17, 0x47, 0x75, 0x62, 0xe5, 0x77, 0x27, 0xe3, 0x83, + 0x4d, 0x59, 0x48, 0x50, 0x77, 0xaf, 0xfc, 0xf7, 0x91, 0x84, 0x10, 0x9b, + 0x6d, 0x65, 0x64, 0xef, 0x81, 0x80, 0xf6, 0x50, 0x8f, 0xcf, 0x60, 0xa0, + 0xa9, 0x13, 0xa6, 0x40, 0x9a, 0x34, 0xef, 0xe3, 0xc7, 0xab, 0x18, 0x1d, + 0x24, 0x6b, 0x0a, 0x29, 0x7b, 0xcd, 0x4a, 0x42, 0xba, 0x13, 0xc2, 0x42, + 0x9c, 0xc9, 0x13, 0x3d, 0x19, 0x13, 0xb7, 0xf9, 0xae, 0x1c, 0x97, 0x83, + 0x65, 0x65, 0xc7, 0x5b, 0x7c, 0x17, 0xdf, 0x7c, 0x0b, 0xf7, 0x24, 0x9b, + 0xb6, 0x29, 0x9e, 0x91, 0x13, 0x4f, 0xf7, 0xb9, 0x9c, 0xe8, 0x73, 0x38, + 0x74, 0x16, 0x4a, 0xa7, 0x4a, 0x70, 0x98, 0xa1, 0x13, 0x47, 0xa1, 0xb9, + 0x03, 0x6c, 0x8b, 0xcf, 0xe1, 0xb6, 0x3a, 0x5a, 0x86, 0x98, 0x6a, 0x98, + 0x6c, 0xf5, 0x36, 0x19, 0xe6, 0x13, 0x87, 0xa0, 0x95, 0x82, 0x31, 0xc5, + 0x1c, 0xc7, 0x0f, 0xaf, 0x14, 0xb2, 0x35, 0x97, 0xae, 0x58, 0x04, 0x78, + 0x82, 0x72, 0x1c, 0xab, 0x24, 0x4f, 0x82, 0x09, 0x03, 0xc2, 0xbc, 0xb3, + 0x8b, 0xb7, 0xb7, 0x19, 0xe0, 0x28, 0xd1, 0xd4, 0x6b, 0xa6, 0xf2, 0x6a, + 0x7d, 0xba, 0x61, 0x80, 0x96, 0x73, 0xe8, 0xa0, 0xad, 0x37, 0xe7, 0xba, + 0x32, 0x78, 0x74, 0xdc, 0xe3, 0x8a, 0xc8, 0x86, 0x3c, 0x0c, 0xa6, 0x88, + 0x30, 0x14, 0x8f, 0x3c, 0x5c, 0x45, 0x05, 0xd5, 0x79, 0x00, 0x72, 0x22, + 0xed, 0x67, 0x7d, 0x25, 0x68, 0x59, 0xae, 0x95, 0x9f, 0x4a, 0x7c, 0x19, + 0x08, 0x58, 0x7e, 0x84, 0xc1, 0x05, 0xc6, 0x71, 0x76, 0x86, 0xfc, 0x62, + 0x5d, 0xb1, 0x1b, 0x21, 0xcb, 0x19, 0x83, 0xc2, 0x96, 0x11, 0x6b, 0x68, + 0xd0, 0xa4, 0xc9, 0xa0, 0xd7, 0x1f, 0x45, 0x7b, 0x34, 0x8a, 0xf7, 0x01, + 0x69, 0x71, 0xbc, 0xed, 0x2a, 0x4b, 0x81, 0x87, 0x2b, 0xe7, 0x44, 0xa7, + 0x99, 0xdb, 0x3c, 0x7f, 0x8a, 0x04, 0x4c, 0xe8, 0x95, 0xc4, 0x54, 0x9a, + 0xfc, 0x50, 0x66, 0xc6, 0x57, 0x32, 0xf0, 0xcb, 0x5f, 0x1e, 0xba, 0xad, + 0x86, 0x49, 0x1f, 0xdf, 0x60, 0x51, 0x1b, 0xc2, 0x99, 0x44, 0x74, 0x47, + 0xaf, 0x78, 0xb4, 0xa8, 0x72, 0x64, 0x3a, 0x51, 0x68, 0x32, 0xa8, 0x48, + 0xc9, 0x97, 0xcf, 0xbe, 0xec, 0xaa, 0x9f, 0x63, 0x0e, 0xb4, 0x00, 0x67, + 0x83, 0xa7, 0x7b, 0x52, 0xd8, 0x63, 0x2f, 0xec, 0x45, 0x51, 0xe6, 0x2d, + 0x62, 0xa2, 0x5d, 0x3f, 0x2a, 0x50, 0xf6, 0x4a, 0x79, 0xb7, 0xc0, 0x07, + 0x9f, 0x33, 0xba, 0x2b, 0x0a, 0x4d, 0x4c, 0xf9, 0x61, 0x1a, 0x8b, 0x0b, + 0xbd, 0x05, 0x3a, 0x28, 0xc1, 0xcf, 0xe3, 0xaa, 0x83, 0x59, 0xba, 0x07, + 0x09, 0x23, 0x2a, 0x18, 0x0b, 0x56, 0xb5, 0xdc, 0x56, 0x53, 0x00, 0x41, + 0x89, 0xac, 0x19, 0x29, 0x05, 0x4b, 0x31, 0x23, 0xbb, 0x30, 0x86, 0x08, + 0xdf, 0x15, 0xba, 0x6f, 0xd6, 0x56, 0xd4, 0x66, 0x45, 0x7c, 0xf5, 0x9e, + 0xfa, 0x33, 0x0e, 0x8a, 0x34, 0x53, 0xc5, 0xa2, 0x7f, 0x03, 0x1c, 0x64, + 0x74, 0xa7, 0x32, 0x00, 0xf6, 0xa8, 0x52, 0xdb, 0xc6, 0xe8, 0x77, 0x1e, + 0x3b, 0x71, 0x4a, 0x18, 0xc1, 0x16, 0x6c, 0x94, 0x3d, 0x14, 0x48, 0xb1, + 0x64, 0xd8, 0x18, 0x55, 0xec, 0x20, 0x92, 0x8a, 0x65, 0xad, 0xf9, 0x7a, + 0x11, 0x74, 0x24, 0x90, 0x74, 0xb9, 0x70, 0x53, 0x0a, 0x6d, 0x12, 0x99, + 0x5e, 0x8c, 0x96, 0xf3, 0xe2, 0x18, 0x51, 0xec, 0x10, 0xe0, 0xbb, 0x41, + 0x52, 0x09, 0x1a, 0xec, 0x15, 0x66, 0x11, 0x49, 0x28, 0x0b, 0x12, 0x85, + 0x6e, 0x29, 0x4f, 0x81, 0xd7, 0x4e, 0xef, 0xf9, 0x06, 0x3b, 0xa3, 0x24, + 0x95, 0xb1, 0xb3, 0x7d, 0x29, 0x3a, 0x58, 0xf4, 0x63, 0x27, 0x25, 0x8d, + 0xbc, 0x62, 0xcc, 0xd0, 0x3b, 0x96, 0x39, 0x29, 0x36, 0xed, 0xa7, 0x6b, + 0x0c, 0x2b, 0x61, 0x9d, 0x71, 0x6a, 0x56, 0xe0, 0xaa, 0xb7, 0x67, 0xa4, + 0x3d, 0x69, 0xa9, 0x1d, 0x04, 0x1d, 0xf2, 0xa9, 0x37, 0x22, 0x94, 0xf2, + 0xad, 0x97, 0x95, 0xfb, 0xaf, 0xd3, 0x66, 0x56, 0xa6, 0x47, 0xd9, 0xbd, + 0x52, 0x66, 0x72, 0x67, 0x1e, 0x3e, 0x8b, 0x9c}, + // cipherTextDigest + {0x37, 0xa7, 0xa2, 0xcf, 0x67, 0x43, 0x99, 0xc3, 0x81, 0x39, 0xaa, + 0x1a, 0xdb, 0x54, 0xa1, 0x87, 0xe7, 0xb2, 0x3f, 0xa0, 0x29, 0xca, + 0x64, 0x18, 0xe3, 0xc9, 0x20, 0xa2, 0x7b, 0x31, 0xff, 0x22}, + // secret + {0x83, 0x8f, 0x0a, 0x65, 0x71, 0x8f, 0x09, 0xca, 0xa9, 0x08, 0xb1, + 0xf0, 0xbe, 0xa8, 0x5f, 0xea, 0x0b, 0x3b, 0x37, 0xbc, 0x06, 0x1d, + 0xcd, 0x34, 0xc2, 0xe1, 0xa6, 0x4c, 0x3b, 0x1b, 0xfd, 0x8b}, + true}, + // tcID: 58 + {58, + params_ml_kem1024_test_mode, + // entropy + {0x74, 0x00, 0xa0, 0x71, 0xb4, 0xf0, 0x87, 0x05, 0x7c, 0x4d, 0x63, + 0x30, 0xd1, 0x1b, 0xd4, 0x66, 0x58, 0xa2, 0xe0, 0x40, 0xcc, 0x4b, + 0x72, 0xcd, 0x3b, 0x56, 0x4e, 0xa0, 0x68, 0x16, 0x72, 0xd4}, + // publicKey + {0x8f, 0x7b, 0x5b, 0x00, 0xd2, 0xba, 0xef, 0x17, 0x42, 0xcf, 0x63, 0xaf, + 0x67, 0xa2, 0x09, 0x30, 0x3b, 0x09, 0xa4, 0x36, 0x7d, 0x71, 0xf4, 0x45, + 0x15, 0x5c, 0xc2, 0x78, 0xc0, 0x77, 0x7a, 0x01, 0x7b, 0xdf, 0x69, 0xab, + 0x84, 0x00, 0x09, 0x1d, 0x58, 0xb3, 0xff, 0xd9, 0x19, 0xb3, 0x06, 0x18, + 0x86, 0xd7, 0x28, 0xdd, 0xe7, 0x8a, 0xc9, 0xd9, 0x57, 0xab, 0x9b, 0xb6, + 0x86, 0xbc, 0x2e, 0x56, 0x73, 0x3a, 0xa2, 0x53, 0x20, 0x04, 0xcc, 0xca, + 0xb9, 0x59, 0x37, 0x4e, 0x14, 0x22, 0xc7, 0x21, 0x48, 0xd3, 0xc5, 0x04, + 0x75, 0x55, 0xbd, 0x83, 0x98, 0x43, 0xfc, 0x94, 0x87, 0x2a, 0x90, 0x1a, + 0x48, 0x38, 0x39, 0xfd, 0xb7, 0xb8, 0x1d, 0x16, 0x16, 0xc7, 0x44, 0xa4, + 0x73, 0x40, 0x4e, 0x53, 0xd0, 0x3e, 0xea, 0x7a, 0x09, 0x75, 0x39, 0x4a, + 0xac, 0xab, 0x29, 0x58, 0x05, 0x87, 0x61, 0x71, 0x1e, 0xae, 0xd6, 0x4f, + 0x62, 0x42, 0xca, 0x2d, 0x88, 0x04, 0xc8, 0x37, 0x50, 0xf7, 0xe0, 0x36, + 0xac, 0x33, 0x96, 0x2b, 0xd2, 0x85, 0x7e, 0xa7, 0x58, 0xbb, 0xa1, 0x04, + 0x89, 0x49, 0x05, 0xd8, 0xd5, 0x88, 0x3e, 0x96, 0x47, 0x8e, 0xf3, 0xcb, + 0x4c, 0xb2, 0x7b, 0xb8, 0x81, 0x49, 0xcf, 0xb1, 0x1c, 0x32, 0xaa, 0x80, + 0xf5, 0x9b, 0x05, 0x1e, 0xc3, 0x49, 0xb4, 0xc5, 0xb7, 0x8f, 0xf6, 0x30, + 0x33, 0x75, 0x0c, 0x9f, 0x07, 0x51, 0xf8, 0x4b, 0x13, 0xd2, 0x26, 0x93, + 0xba, 0x6c, 0x2d, 0x6c, 0x76, 0x3a, 0xf8, 0xa2, 0x58, 0xb7, 0x45, 0x1e, + 0x7f, 0x4c, 0x5e, 0x3c, 0x19, 0x85, 0xa9, 0x17, 0xba, 0xb2, 0x04, 0x37, + 0xb7, 0xc0, 0xcf, 0x08, 0x48, 0x6b, 0xd0, 0xcc, 0x94, 0x5f, 0x45, 0x2b, + 0x7f, 0x97, 0x8e, 0xbf, 0x3c, 0xb6, 0xeb, 0xd8, 0xc8, 0x7f, 0x85, 0x1b, + 0x2e, 0xe2, 0x0a, 0xef, 0x35, 0x1f, 0xa3, 0xc3, 0x4b, 0xd6, 0x55, 0x5b, + 0xb5, 0x74, 0x3b, 0x01, 0x8b, 0x95, 0x2b, 0x81, 0x9f, 0x68, 0x30, 0x0e, + 0xda, 0x35, 0x5e, 0x3e, 0xa0, 0x91, 0x22, 0xc0, 0x67, 0x6d, 0xeb, 0x3c, + 0x54, 0x63, 0x45, 0xde, 0x74, 0x1e, 0x16, 0x89, 0x2e, 0xd4, 0xe5, 0xb1, + 0xe1, 0xa8, 0xcb, 0xfd, 0xf3, 0x3d, 0x8f, 0x37, 0xca, 0x8b, 0xf9, 0x67, + 0xd5, 0x1c, 0x0a, 0xe3, 0xab, 0xb2, 0xe5, 0x37, 0x62, 0xf5, 0x96, 0x05, + 0xb5, 0x32, 0x3c, 0xc0, 0x30, 0xad, 0x1b, 0x29, 0x5d, 0xa8, 0x19, 0xbe, + 0x4e, 0xba, 0x75, 0x30, 0xc7, 0x1f, 0xd0, 0x72, 0x99, 0x0d, 0xa5, 0x81, + 0xdb, 0x70, 0xa7, 0xcf, 0x06, 0x26, 0x02, 0xd9, 0x3b, 0xab, 0x03, 0xa1, + 0x87, 0x55, 0x2d, 0x1c, 0x72, 0x00, 0x79, 0x01, 0x0b, 0x74, 0x3b, 0x2c, + 0xc4, 0x40, 0xab, 0x08, 0x75, 0x59, 0x45, 0xdb, 0x1d, 0x7a, 0x67, 0xa7, + 0x13, 0x51, 0x84, 0x12, 0xc8, 0xaa, 0x9a, 0x0a, 0x31, 0x0c, 0x80, 0x22, + 0x4a, 0x73, 0x52, 0x37, 0x72, 0x2f, 0xe2, 0x53, 0x27, 0x11, 0xa9, 0xa4, + 0x6d, 0x12, 0x0a, 0x3d, 0x3b, 0x4f, 0xc9, 0x31, 0xba, 0x20, 0x89, 0x24, + 0x6e, 0x0a, 0x2b, 0x71, 0xf7, 0xb5, 0x33, 0xb0, 0x0e, 0xda, 0xd1, 0x81, + 0x78, 0xb1, 0xce, 0xc0, 0x45, 0x7c, 0x66, 0x80, 0x7e, 0x22, 0xa5, 0xb8, + 0x40, 0xd5, 0x36, 0x3f, 0x3c, 0x03, 0x14, 0xd4, 0xcd, 0x86, 0x02, 0x49, + 0x4c, 0x05, 0x6b, 0xb4, 0xba, 0x12, 0xbf, 0x5b, 0x57, 0x87, 0x25, 0x89, + 0x9d, 0xf3, 0x8d, 0xdb, 0x53, 0x3e, 0xbb, 0x53, 0x53, 0x74, 0xa9, 0x98, + 0x35, 0x24, 0x2f, 0x51, 0xf8, 0x0e, 0x45, 0xf0, 0x64, 0x21, 0xb2, 0x70, + 0x88, 0xa7, 0x14, 0x70, 0x5a, 0x83, 0x3f, 0x89, 0x99, 0x5d, 0xb1, 0x4a, + 0xe0, 0xb3, 0x13, 0x61, 0xe1, 0x1e, 0xfb, 0xf3, 0xb2, 0x6b, 0x1a, 0x5b, + 0x2a, 0x9c, 0x58, 0x61, 0x17, 0xcd, 0x7c, 0x98, 0x27, 0x51, 0x92, 0x1f, + 0xa3, 0x12, 0xa7, 0xf3, 0x21, 0x74, 0xae, 0x62, 0x32, 0x27, 0x50, 0x82, + 0xbf, 0x35, 0x16, 0x1c, 0xe6, 0xb9, 0xdf, 0x66, 0x14, 0x15, 0x69, 0x32, + 0xa5, 0x27, 0xc5, 0xa5, 0x37, 0x01, 0x68, 0xb2, 0xc3, 0xa9, 0xf4, 0x19, + 0xb6, 0xfb, 0x2f, 0xee, 0xca, 0x59, 0xf5, 0xa8, 0x47, 0xa3, 0x67, 0x03, + 0x77, 0x04, 0x93, 0x5a, 0xe4, 0x53, 0x37, 0xa1, 0xba, 0x0f, 0xd3, 0x14, + 0x06, 0x5a, 0x0d, 0x99, 0x43, 0x3e, 0x70, 0xf4, 0x11, 0x6d, 0xc3, 0x4e, + 0xc8, 0xf1, 0x46, 0x12, 0xd6, 0x1f, 0xcc, 0xc2, 0xbf, 0x04, 0x8a, 0x7e, + 0xf8, 0x86, 0xb6, 0xc1, 0xe0, 0xba, 0x5d, 0xb5, 0x5c, 0xd5, 0x32, 0x41, + 0xfb, 0x9a, 0x8f, 0x6a, 0x50, 0x07, 0xeb, 0x46, 0x87, 0xd9, 0x55, 0xcb, + 0xe6, 0x8b, 0x08, 0x38, 0x2a, 0x91, 0x9b, 0x02, 0x58, 0x3a, 0x30, 0xc4, + 0x26, 0xac, 0x05, 0x2c, 0xb9, 0x17, 0x7f, 0x2c, 0x13, 0x13, 0xd4, 0x17, + 0x07, 0x39, 0x75, 0x6f, 0x77, 0x77, 0xf2, 0x57, 0x03, 0xca, 0x54, 0x08, + 0x65, 0xd9, 0xb7, 0xf8, 0x93, 0xc2, 0x0c, 0x40, 0x51, 0x72, 0x93, 0x1e, + 0x6d, 0x12, 0xc3, 0xda, 0xa8, 0x92, 0xb0, 0xc0, 0xb1, 0xb6, 0xb6, 0xab, + 0xec, 0x5a, 0x2a, 0xa1, 0x22, 0x3e, 0xba, 0x24, 0x98, 0xb6, 0x98, 0x26, + 0xb4, 0x1b, 0x8b, 0x22, 0x22, 0x57, 0x90, 0x1b, 0xc4, 0x49, 0x02, 0x02, + 0xda, 0xc7, 0x91, 0x8b, 0xca, 0x6b, 0xc1, 0x67, 0x34, 0x5a, 0x59, 0xa2, + 0xb5, 0xd0, 0x3e, 0xc2, 0xca, 0x0b, 0x60, 0x6c, 0x90, 0x26, 0x59, 0x7d, + 0x36, 0xb6, 0xa0, 0xd4, 0xf3, 0x49, 0x5b, 0xc6, 0x08, 0xe5, 0x3a, 0x6e, + 0x5c, 0xe6, 0xb0, 0xe9, 0x2c, 0x20, 0x6c, 0xc7, 0xc8, 0x85, 0xcc, 0x55, + 0x46, 0xda, 0x8f, 0xe5, 0xf2, 0xca, 0x20, 0x61, 0x55, 0xc6, 0x67, 0x23, + 0xad, 0x50, 0xa8, 0x4f, 0xd9, 0x22, 0xf9, 0xac, 0xa8, 0xe5, 0xe6, 0xaa, + 0xeb, 0x04, 0x14, 0x1c, 0xf3, 0x36, 0x6e, 0x0a, 0x31, 0x83, 0xac, 0x4b, + 0x09, 0x68, 0x06, 0x5f, 0x84, 0x57, 0x29, 0xc2, 0xcb, 0x9c, 0x6a, 0x01, + 0x6b, 0xb5, 0x9c, 0xbc, 0xb8, 0x74, 0x5a, 0xd7, 0xa4, 0x5b, 0x70, 0x4a, + 0x15, 0x09, 0x9c, 0xe3, 0xd8, 0xa6, 0xe4, 0xc3, 0x04, 0xd2, 0x92, 0x4d, + 0x06, 0xc5, 0x19, 0xa2, 0xeb, 0x2c, 0xb8, 0x52, 0x2c, 0x76, 0xe4, 0x26, + 0xb7, 0xfc, 0x99, 0x4c, 0x4b, 0x7c, 0x98, 0x37, 0x26, 0xac, 0x61, 0x7e, + 0xa1, 0x37, 0x4a, 0x5e, 0xb8, 0x19, 0xb6, 0x6b, 0xab, 0x2b, 0xc8, 0x3b, + 0x38, 0xb1, 0x34, 0x82, 0x91, 0x49, 0x7e, 0xc1, 0xa8, 0xc7, 0x90, 0x49, + 0x07, 0x07, 0x7e, 0xd0, 0xbc, 0x13, 0xb0, 0x49, 0x52, 0x0a, 0xe5, 0x04, + 0x4d, 0xcb, 0xb3, 0x43, 0xeb, 0x7c, 0x62, 0x13, 0x4b, 0x39, 0x26, 0x18, + 0x83, 0x26, 0xac, 0x29, 0x55, 0x0a, 0xa1, 0xd8, 0x86, 0xe2, 0xcb, 0x3d, + 0x3e, 0xa3, 0xae, 0xa7, 0xd7, 0x54, 0x97, 0x79, 0xcc, 0x44, 0x4a, 0x4f, + 0x7c, 0xb5, 0x9b, 0x29, 0x07, 0x84, 0x10, 0xca, 0x81, 0x63, 0x0c, 0x71, + 0xe2, 0x65, 0x0a, 0xa9, 0x9b, 0x60, 0xf9, 0xf9, 0x6c, 0xf2, 0x6c, 0xb3, + 0xbe, 0x33, 0xa2, 0xd8, 0xa1, 0x84, 0x51, 0xf9, 0x4f, 0x7c, 0x9a, 0xa0, + 0xce, 0x51, 0x1c, 0x0f, 0x15, 0x8d, 0x69, 0x3b, 0x8b, 0xcf, 0xf5, 0xb2, + 0x47, 0x44, 0x54, 0x6c, 0x43, 0xc9, 0x8c, 0x49, 0x60, 0xb7, 0xa5, 0x8e, + 0xd0, 0xd6, 0x3e, 0x33, 0x61, 0x1a, 0x20, 0xa0, 0xc8, 0xcc, 0x21, 0x25, + 0x33, 0x32, 0x05, 0x8d, 0x29, 0xad, 0x8c, 0x3a, 0x60, 0xa0, 0x7c, 0x07, + 0x7b, 0x44, 0x19, 0x5d, 0x87, 0x29, 0xee, 0x72, 0xb0, 0x4f, 0xa7, 0x58, + 0x95, 0x75, 0x62, 0x59, 0xb4, 0x4d, 0xf2, 0x8b, 0x0b, 0x28, 0xd4, 0x5e, + 0x8a, 0xb1, 0x5f, 0x79, 0x64, 0xbe, 0x23, 0x76, 0x57, 0xf6, 0x3a, 0x71, + 0x26, 0x46, 0x73, 0x6c, 0xdb, 0x05, 0xf9, 0xc9, 0x24, 0x16, 0xe4, 0x6f, + 0x5f, 0x11, 0x88, 0x26, 0x78, 0x23, 0xab, 0xf1, 0x27, 0x83, 0xec, 0x3d, + 0xd9, 0x09, 0x14, 0x88, 0xeb, 0x82, 0x7e, 0xb3, 0xbe, 0x58, 0x61, 0x42, + 0x5b, 0x88, 0x0a, 0x15, 0x4c, 0x14, 0x61, 0x33, 0x0d, 0x3d, 0xda, 0x9d, + 0xd9, 0xd6, 0x3a, 0x7b, 0xb1, 0xbc, 0x16, 0xa8, 0x59, 0xc3, 0xf9, 0x60, + 0x41, 0xf6, 0x79, 0xfd, 0xdb, 0x91, 0x04, 0x87, 0xc6, 0xb5, 0x79, 0x1c, + 0xda, 0x56, 0x46, 0xc1, 0x02, 0x4d, 0xae, 0x53, 0xc5, 0x31, 0xa7, 0x07, + 0x31, 0x5a, 0x0d, 0x92, 0x60, 0x6e, 0xa3, 0xc8, 0x22, 0x28, 0x1c, 0x9e, + 0xf7, 0xf2, 0x35, 0x7f, 0xda, 0xa6, 0xf0, 0x2c, 0xaa, 0x93, 0x73, 0x2a, + 0x52, 0x3c, 0x15, 0x45, 0xd0, 0x23, 0xf9, 0x59, 0xac, 0x5a, 0x6a, 0x6c, + 0x6e, 0x7b, 0xc8, 0x2f, 0x47, 0xb6, 0xb3, 0x74, 0x0b, 0xba, 0xf1, 0x73, + 0xa8, 0x44, 0xcf, 0x42, 0x37, 0x90, 0x76, 0x05, 0x17, 0x0e, 0xfa, 0x0b, + 0xc0, 0xa2, 0x48, 0xee, 0xd0, 0x2a, 0xa9, 0x91, 0x98, 0xc4, 0xe0, 0x15, + 0x69, 0x30, 0x91, 0xe4, 0xf2, 0x50, 0x53, 0xdb, 0x51, 0x62, 0x50, 0x2d, + 0x87, 0xe9, 0x7f, 0x74, 0x60, 0x66, 0x2f, 0x05, 0x53, 0xb9, 0x87, 0x0b, + 0x41, 0xab, 0x2e, 0x4b, 0x44, 0xce, 0x2d, 0x93, 0x5d, 0xaa, 0x66, 0x70, + 0xdc, 0x04, 0x48, 0xee, 0xe4, 0x35, 0x50, 0x64, 0x76, 0x71, 0xa6, 0x6e, + 0xe6, 0xe0, 0x2e, 0xee, 0x93, 0xb7, 0x9d, 0xa9, 0x40, 0x0e, 0x40, 0xbd, + 0x0b, 0x30, 0x4b, 0xe4, 0x70, 0x2c, 0xad, 0xa4, 0x7f, 0x0a, 0x33, 0x8f, + 0xd5, 0xa9, 0x42, 0x6d, 0x65, 0x23, 0x06, 0xca, 0x8e, 0xc2, 0xb9, 0x3b, + 0xfa, 0x18, 0x28, 0xd4, 0x47, 0x1a, 0x67, 0xe2, 0x16, 0x79, 0x6c, 0x65, + 0x85, 0x77, 0x5b, 0xc6, 0x0a, 0xab, 0xc3, 0xc7, 0x07, 0x37, 0x99, 0xc2, + 0x59, 0x16, 0x60, 0x65, 0x9b, 0x4e, 0xcd, 0xb1, 0xb7, 0xbb, 0x19, 0x3d, + 0xa6, 0xcc, 0xaa, 0x97, 0x85, 0x70, 0x50, 0x49, 0x80, 0x00, 0xe2, 0x4f, + 0xfd, 0x45, 0xa5, 0xd1, 0x3c, 0x24, 0x05, 0x36, 0xaf, 0x5b, 0xf8, 0x30, + 0xee, 0x3c, 0x6a, 0x7f, 0x06, 0x46, 0x03, 0xe0, 0xaa, 0xce, 0x5b, 0x3c, + 0xb5, 0x90, 0x72, 0x4a, 0x01, 0x79, 0xad, 0xc9, 0x5a, 0x97, 0xca, 0x16, + 0xe6, 0x95, 0x92, 0xfc, 0x89, 0x6c, 0x12, 0xc4, 0x0a, 0xc6, 0x32, 0x6a, + 0x0f, 0xa5, 0xbf, 0xab, 0x93, 0x56, 0x79, 0x3b, 0x83, 0x23, 0xf5, 0xba, + 0xe3, 0xa9, 0x82, 0x9b, 0xf6, 0x75, 0x56, 0xc4, 0x41, 0xf7, 0x60, 0xae, + 0x15, 0xe8, 0x26, 0x41, 0xf0, 0x5c, 0xe4, 0xd1, 0xaa, 0x1e, 0x26, 0x61, + 0x00, 0xed, 0x34, 0x10, 0xe6, 0x10, 0x66, 0x51, 0x09, 0xbd, 0xe1, 0x6c, + 0xbb, 0x0c, 0x12, 0x49, 0x53, 0x59, 0x0d, 0x61, 0x3b, 0xd8, 0x18, 0x3f, + 0x87, 0xb9, 0x40, 0x7c, 0x7c, 0xca, 0xf4, 0xd8, 0x5c, 0xde, 0x2b, 0x0d, + 0xd1, 0x56, 0xbb, 0x28, 0x45, 0xc3, 0xd3, 0x14, 0x15, 0xf9, 0x53, 0x8f, + 0x6e, 0x58, 0xb3, 0x88, 0xac, 0x12, 0x11, 0x90, 0x2e, 0x77, 0xf5, 0x73, + 0x4b, 0x94, 0x17, 0xcb, 0x0b, 0x74, 0xe4, 0xf1, 0x9f, 0x5e, 0xd5, 0x94, + 0xec, 0xa3, 0x6d, 0x37, 0x5a, 0x55, 0x5e, 0xe7, 0x46, 0xb5, 0xe7, 0xb2, + 0xae, 0x5b, 0x68, 0xc9, 0xbb, 0x65, 0x78, 0x39, 0x70, 0x2d, 0xb5, 0x8e, + 0x4b, 0x89, 0x14, 0x61, 0x87, 0x7f, 0xaa, 0xba, 0x48, 0x9a, 0x30, 0x5f, + 0x46, 0xc2, 0xc0, 0xc5, 0x47, 0xc1, 0xe0, 0xdb, 0x34, 0x0c, 0x4e, 0xbc, + 0x3c, 0x8a, 0xd8, 0x84, 0x97, 0x58, 0x9e, 0xab, 0x08, 0x8c, 0xfb, 0x10, + 0xcd, 0x6c, 0x05, 0x27, 0xeb, 0x45, 0xd3, 0x2d}, + // cipherTextDigest + {0xf8, 0xdd, 0x33, 0x5b, 0xcc, 0x34, 0x67, 0xdd, 0xe7, 0x49, 0xb6, + 0x4c, 0x3b, 0x0b, 0x91, 0x76, 0x54, 0x30, 0xec, 0x35, 0x96, 0x02, + 0xc3, 0xf7, 0x4b, 0x64, 0x66, 0xb3, 0x21, 0x37, 0xb7, 0xc7}, + // secret + {0xe5, 0x99, 0x15, 0x9c, 0xf0, 0x54, 0x84, 0x8f, 0x6d, 0xc3, 0x1c, + 0xfb, 0x52, 0x57, 0x6b, 0x05, 0xee, 0xa2, 0x5d, 0x99, 0x84, 0x58, + 0x92, 0x31, 0x46, 0x8a, 0x64, 0x2f, 0x3e, 0x59, 0x70, 0x4e}, + true}, + // tcID: 59 + {59, + params_ml_kem1024_test_mode, + // entropy + {0xe8, 0xad, 0x03, 0x12, 0xb9, 0x08, 0x2f, 0xb7, 0xad, 0x12, 0x82, + 0x88, 0x67, 0xa9, 0x5e, 0x52, 0x27, 0xd5, 0xd3, 0x85, 0x42, 0x20, + 0xeb, 0x26, 0x53, 0x4e, 0x82, 0x5d, 0xeb, 0x1c, 0x9d, 0x4c}, + // publicKey + {0xfc, 0xab, 0x25, 0x66, 0x62, 0x0a, 0x07, 0x10, 0xb4, 0x4b, 0x22, 0x9f, + 0x53, 0x0c, 0x75, 0x20, 0x2b, 0x76, 0x58, 0x2a, 0x95, 0xae, 0x93, 0x64, + 0x2d, 0x78, 0xaa, 0x5b, 0x71, 0x4c, 0xcc, 0xf3, 0x17, 0xf8, 0xc5, 0x13, + 0x1a, 0x05, 0x98, 0xde, 0xb4, 0x06, 0xf7, 0x13, 0x3f, 0x0b, 0x4a, 0x25, + 0x29, 0xc7, 0x51, 0xd0, 0x26, 0x0c, 0x09, 0x44, 0x28, 0x03, 0xe5, 0xc4, + 0x8c, 0x76, 0x44, 0x35, 0xfc, 0x63, 0xcd, 0x6b, 0xa0, 0xfb, 0x71, 0x22, + 0x02, 0x79, 0xc3, 0x63, 0x5b, 0x47, 0x86, 0x68, 0x71, 0x7d, 0xb6, 0xaa, + 0x56, 0xf7, 0x90, 0xcb, 0x07, 0xad, 0x45, 0xb5, 0x5c, 0x74, 0x86, 0x1d, + 0xf5, 0x0c, 0x87, 0x32, 0xc8, 0x2b, 0x3b, 0x51, 0x6e, 0x7e, 0xa0, 0x0a, + 0x89, 0x8a, 0x0b, 0xf6, 0xb3, 0x3f, 0xe5, 0xcc, 0x05, 0x67, 0x7c, 0xc7, + 0xa3, 0x60, 0xc1, 0x9c, 0x13, 0x8e, 0x6e, 0x19, 0xb6, 0xa8, 0xec, 0xce, + 0x2a, 0x20, 0x54, 0xf4, 0xdc, 0x69, 0x9e, 0x00, 0x1c, 0x43, 0xa2, 0x45, + 0x40, 0x4b, 0x08, 0x95, 0x20, 0x11, 0x9c, 0x56, 0x9e, 0x39, 0x20, 0x5e, + 0xbf, 0x9a, 0x53, 0x4e, 0x18, 0x18, 0xcc, 0x53, 0xac, 0xc2, 0xea, 0xbf, + 0xd2, 0x52, 0x15, 0x68, 0xe3, 0x77, 0x98, 0x75, 0x6b, 0x94, 0x79, 0x37, + 0xde, 0xe0, 0xa2, 0x49, 0x31, 0x3f, 0x98, 0x00, 0x55, 0xd1, 0x41, 0xcc, + 0x18, 0xac, 0x35, 0x20, 0x46, 0x3f, 0xdb, 0x40, 0x33, 0xc0, 0x13, 0x7f, + 0xc9, 0x9c, 0x47, 0xe5, 0x02, 0x6e, 0x8b, 0x26, 0xa2, 0x57, 0xf0, 0x67, + 0x79, 0x3a, 0xad, 0x13, 0x3b, 0x06, 0xb3, 0xd3, 0xbc, 0x45, 0x01, 0xca, + 0x3c, 0x39, 0x0d, 0x8e, 0xf2, 0x43, 0x90, 0x03, 0x17, 0x7f, 0x82, 0x24, + 0xc3, 0xe4, 0x34, 0x34, 0x24, 0x94, 0x2e, 0x62, 0x81, 0x0c, 0x88, 0x70, + 0x85, 0x03, 0x6a, 0x8a, 0x26, 0xcd, 0x4c, 0x15, 0x14, 0xbd, 0x91, 0x7b, + 0x8b, 0x5b, 0x06, 0xc4, 0x68, 0x96, 0xe1, 0x3b, 0x29, 0x24, 0x08, 0x89, + 0xcf, 0x35, 0x24, 0xd0, 0x98, 0x92, 0x9f, 0xf4, 0x26, 0x35, 0x23, 0x0a, + 0x65, 0x74, 0x6c, 0x66, 0x83, 0xc3, 0x13, 0xfb, 0x52, 0x9c, 0x9b, 0xbe, + 0x72, 0xd4, 0xbb, 0x1a, 0xc9, 0x1a, 0x9e, 0x44, 0x81, 0xdc, 0x5b, 0x19, + 0x47, 0x80, 0x2a, 0x50, 0xf5, 0x49, 0x81, 0x5b, 0x54, 0x56, 0x65, 0x02, + 0x30, 0x13, 0x05, 0xea, 0x36, 0xaa, 0xc4, 0xc9, 0x3f, 0x01, 0x4b, 0x93, + 0x93, 0x79, 0x36, 0x20, 0x42, 0x80, 0x0d, 0xaa, 0x25, 0x1a, 0x36, 0x19, + 0xb1, 0xd6, 0x2a, 0xc3, 0xf4, 0xc9, 0xb6, 0x58, 0xbc, 0x9d, 0x1b, 0x8a, + 0x93, 0xe5, 0x8c, 0x3c, 0xa6, 0x50, 0xc8, 0x06, 0x5a, 0x33, 0xf0, 0xb6, + 0xe6, 0x68, 0xbd, 0x8c, 0x7a, 0x26, 0x4a, 0x91, 0x6e, 0xc1, 0xf4, 0x95, + 0xa7, 0x34, 0x8f, 0x9d, 0xd5, 0x78, 0x22, 0x83, 0x73, 0x4c, 0xdc, 0x50, + 0x30, 0x71, 0x9a, 0x63, 0x2c, 0x52, 0x41, 0xe0, 0xbc, 0x95, 0xe0, 0x6a, + 0x99, 0x0a, 0x1a, 0x1c, 0x5c, 0xc6, 0xbf, 0x51, 0x6d, 0xbf, 0x83, 0x6b, + 0x79, 0xc7, 0xc7, 0x42, 0x8c, 0x29, 0x80, 0x6b, 0x08, 0x54, 0x7a, 0x19, + 0x8b, 0x80, 0x86, 0xa7, 0x28, 0x80, 0x86, 0xca, 0x2e, 0x71, 0xe3, 0x7d, + 0xba, 0xc5, 0x39, 0x03, 0x57, 0xaf, 0x7b, 0x74, 0x74, 0x61, 0xb6, 0x14, + 0x08, 0x94, 0xa2, 0x45, 0x3a, 0x36, 0xaf, 0x8b, 0x69, 0x0c, 0xc0, 0x13, + 0x05, 0xb9, 0x18, 0xd4, 0xf9, 0x12, 0x43, 0xb8, 0x0b, 0xfb, 0xa6, 0x6d, + 0xc2, 0x4c, 0x76, 0xb5, 0xcc, 0x89, 0xe4, 0x36, 0xb1, 0x64, 0x5c, 0x32, + 0x80, 0xd1, 0x38, 0x15, 0x8c, 0x43, 0x68, 0x8c, 0x8c, 0x0c, 0xb5, 0x3a, + 0xd1, 0x0c, 0xad, 0x5c, 0xc6, 0x43, 0xc3, 0x24, 0x8b, 0xa5, 0x47, 0x75, + 0xcf, 0x71, 0xcf, 0x7a, 0x0b, 0xca, 0xe9, 0x9c, 0x37, 0xd2, 0xe2, 0x4a, + 0x78, 0x01, 0x36, 0x92, 0xca, 0x1f, 0x9e, 0x85, 0x92, 0x1f, 0x51, 0xab, + 0xaa, 0x34, 0x7d, 0x6c, 0xb4, 0x19, 0x4f, 0x68, 0x6e, 0x4d, 0x68, 0x05, + 0x2b, 0x76, 0x6f, 0xa1, 0x0b, 0x55, 0xa6, 0x3c, 0x24, 0xdc, 0xac, 0xb6, + 0x44, 0xda, 0x0e, 0x88, 0xb9, 0x7f, 0x77, 0xd7, 0x4c, 0x07, 0x2c, 0xb2, + 0x7c, 0x5a, 0xa7, 0xa3, 0x85, 0x32, 0x2a, 0x25, 0x67, 0xf8, 0x53, 0x9b, + 0xd8, 0xe2, 0x48, 0x93, 0xf3, 0xb4, 0x02, 0xb6, 0x66, 0xe2, 0xb7, 0x39, + 0x50, 0x40, 0x08, 0x9e, 0x49, 0x3c, 0x34, 0x14, 0x4d, 0x00, 0xcc, 0xb0, + 0xdb, 0xb1, 0x7b, 0xc4, 0x7a, 0x10, 0xe2, 0xc5, 0x00, 0xc7, 0xb6, 0x4f, + 0xa5, 0xa7, 0x53, 0xf0, 0xa1, 0x3a, 0x0b, 0xbc, 0xae, 0xb8, 0x25, 0x35, + 0x7a, 0xf2, 0xb9, 0xd3, 0x77, 0x34, 0x0e, 0x31, 0x42, 0x2f, 0x92, 0x8f, + 0xca, 0xb4, 0x0b, 0xf3, 0x67, 0x92, 0x8b, 0xc7, 0x05, 0xaa, 0xb7, 0x08, + 0x60, 0xba, 0x29, 0x92, 0xf8, 0x51, 0x18, 0xd2, 0x1d, 0x39, 0x03, 0x58, + 0x58, 0xc2, 0x4b, 0x40, 0x29, 0xa9, 0x28, 0x2c, 0xb6, 0x65, 0x30, 0x76, + 0x5a, 0xa8, 0x12, 0x9d, 0xe2, 0x57, 0xd5, 0x01, 0x53, 0xde, 0xc3, 0x1c, + 0x03, 0xb6, 0x24, 0x5e, 0x13, 0xbf, 0xb2, 0xf2, 0xa3, 0x91, 0x8b, 0xa5, + 0x61, 0xec, 0x8f, 0xc0, 0x7c, 0xc4, 0x08, 0x01, 0x41, 0xf5, 0x2a, 0xad, + 0x72, 0xc6, 0xbe, 0xff, 0x44, 0x78, 0xf4, 0x63, 0x76, 0x31, 0xb0, 0x90, + 0x7a, 0xca, 0x70, 0x76, 0x9b, 0x7d, 0x5f, 0x66, 0x39, 0x00, 0xcc, 0xbb, + 0x9c, 0xc6, 0x51, 0x22, 0x76, 0x65, 0xeb, 0xac, 0xc8, 0xe2, 0x85, 0x80, + 0xd1, 0xb8, 0x23, 0xe0, 0x82, 0x61, 0x86, 0x12, 0x12, 0x6d, 0x7c, 0x2c, + 0x24, 0xf6, 0xb8, 0x59, 0x89, 0x4d, 0xf3, 0x46, 0x9f, 0x02, 0x85, 0x0f, + 0x98, 0x2b, 0x8c, 0xaa, 0xbc, 0x61, 0x34, 0xd0, 0x40, 0x1d, 0x46, 0x98, + 0x55, 0x64, 0x2b, 0x6e, 0x84, 0x44, 0x8d, 0x38, 0x6c, 0xf9, 0x11, 0x49, + 0xed, 0x62, 0x42, 0x98, 0x4a, 0x59, 0x99, 0xb0, 0x9f, 0xa7, 0x51, 0x9a, + 0x29, 0x18, 0x3d, 0x6d, 0xaa, 0x9b, 0x6b, 0xd1, 0x68, 0xe8, 0x50, 0x77, + 0xdf, 0xb9, 0xa6, 0xb9, 0x06, 0x0f, 0x74, 0xb8, 0x1c, 0x61, 0xa4, 0x68, + 0xaa, 0x86, 0x76, 0x42, 0x32, 0x0e, 0xb3, 0xd4, 0x19, 0x71, 0x06, 0xca, + 0x62, 0xa1, 0x91, 0xf1, 0xa7, 0x2d, 0x5d, 0xc5, 0x8b, 0xc4, 0xc4, 0x3d, + 0x99, 0x60, 0x35, 0xe5, 0x08, 0x93, 0xc1, 0x0a, 0x51, 0xd6, 0xc2, 0x8a, + 0xfe, 0x14, 0x68, 0x35, 0xcb, 0x41, 0xb5, 0x35, 0x2d, 0xc0, 0xda, 0x54, + 0xeb, 0x63, 0x93, 0xea, 0xa0, 0x76, 0x9e, 0x00, 0x09, 0x1e, 0x38, 0x7b, + 0x65, 0x03, 0x2b, 0xb4, 0xfa, 0x15, 0xd8, 0x28, 0x25, 0x7d, 0xd0, 0x8a, + 0x99, 0x0a, 0x76, 0xf8, 0x5a, 0x83, 0x39, 0x22, 0x0c, 0xff, 0x24, 0x2e, + 0x20, 0x94, 0x1d, 0x45, 0xcc, 0x2b, 0x6f, 0x26, 0x56, 0x64, 0x87, 0x15, + 0x86, 0x1b, 0x91, 0xe7, 0xcb, 0x05, 0x57, 0x22, 0x96, 0x94, 0xa7, 0x71, + 0xac, 0x48, 0x13, 0x3e, 0x8b, 0x4f, 0x05, 0x44, 0x39, 0x09, 0xfc, 0xb4, + 0xea, 0x53, 0x94, 0x1d, 0xe9, 0x08, 0x6b, 0x0b, 0x2a, 0x18, 0xfc, 0x6a, + 0x62, 0x61, 0x25, 0x4c, 0xa5, 0x6e, 0xae, 0x50, 0x39, 0x2d, 0x12, 0x0d, + 0x78, 0x86, 0xb6, 0x6a, 0x26, 0x06, 0x71, 0x37, 0x06, 0x43, 0x08, 0x01, + 0xc2, 0xd4, 0x88, 0xdb, 0x74, 0x35, 0x2b, 0xa7, 0xa8, 0x1e, 0x38, 0x4c, + 0xee, 0xa5, 0x44, 0xc5, 0xd5, 0x71, 0x7f, 0xb5, 0x65, 0x80, 0x6a, 0x36, + 0x5d, 0x36, 0x89, 0x82, 0x99, 0xce, 0x84, 0x75, 0x00, 0x69, 0x13, 0x42, + 0x4c, 0x4b, 0x17, 0xce, 0xf5, 0x29, 0xa2, 0xa5, 0x17, 0x3a, 0xd6, 0x62, + 0x6c, 0x40, 0x0d, 0x14, 0x43, 0x61, 0x00, 0xcd, 0xc6, 0xb7, 0x27, 0x8d, + 0x55, 0x97, 0x23, 0x67, 0xf0, 0xcc, 0x80, 0x6a, 0x5c, 0x65, 0x96, 0x78, + 0x0d, 0xb2, 0x86, 0x57, 0x58, 0x63, 0xcc, 0x39, 0xbb, 0x26, 0xb8, 0x51, + 0xcd, 0x06, 0xb3, 0x78, 0x08, 0x3b, 0xc3, 0x83, 0x35, 0xd0, 0xf0, 0xc3, + 0x98, 0x7a, 0x65, 0x74, 0x90, 0x68, 0xa0, 0x04, 0x0e, 0xd1, 0x01, 0x39, + 0x34, 0x5c, 0x63, 0xb2, 0x56, 0x61, 0x03, 0xd9, 0xa5, 0xea, 0xb5, 0x5e, + 0x01, 0x54, 0x10, 0xee, 0xcb, 0x0c, 0xcd, 0x13, 0x77, 0x2b, 0xf1, 0x26, + 0x5a, 0x66, 0x7e, 0x67, 0x05, 0xbe, 0x59, 0x55, 0xc4, 0x79, 0xec, 0x8b, + 0x49, 0x47, 0x35, 0x54, 0xba, 0x45, 0x0b, 0xd9, 0xc1, 0xff, 0x86, 0x58, + 0xcf, 0x2c, 0xbb, 0x03, 0x29, 0xa4, 0x3d, 0x8a, 0x2e, 0xcd, 0x6c, 0x4a, + 0xaa, 0x95, 0x0f, 0x80, 0x81, 0x77, 0x48, 0xeb, 0x38, 0x89, 0x7a, 0x6e, + 0xb0, 0x60, 0x04, 0x02, 0xa8, 0x29, 0xf3, 0xd3, 0x34, 0xc2, 0x79, 0x5b, + 0xae, 0x1c, 0x8c, 0xcb, 0xd6, 0x9c, 0x03, 0x9a, 0xba, 0xf9, 0x6a, 0x3c, + 0xaf, 0xec, 0x66, 0x26, 0x30, 0x76, 0xda, 0xbc, 0xb7, 0x62, 0x61, 0x52, + 0x1a, 0x0b, 0x9e, 0xd7, 0x07, 0x00, 0xa2, 0x79, 0x69, 0xc8, 0x37, 0x02, + 0x82, 0x6c, 0xb9, 0x89, 0x0b, 0x28, 0x50, 0x93, 0x1f, 0xd7, 0xfc, 0x6e, + 0x28, 0x70, 0x08, 0x96, 0x83, 0x87, 0x30, 0xe5, 0x8f, 0x74, 0x49, 0x9a, + 0x5c, 0xf3, 0xcd, 0xa5, 0x42, 0x53, 0xe2, 0x50, 0xc0, 0x88, 0x60, 0x97, + 0x2a, 0x74, 0x3b, 0xe1, 0x73, 0x18, 0x00, 0xf1, 0x95, 0x73, 0xb4, 0x8a, + 0x81, 0x1a, 0xad, 0x9c, 0xc4, 0x62, 0xfc, 0x30, 0xb1, 0x54, 0x72, 0xbf, + 0x97, 0xcc, 0x9d, 0x7f, 0xe7, 0xb6, 0x59, 0x52, 0x2e, 0xcc, 0xa6, 0x1e, + 0xc1, 0xb8, 0x5a, 0xfb, 0x32, 0x36, 0xb0, 0xe5, 0x69, 0x51, 0x45, 0xbd, + 0x3f, 0x33, 0x05, 0xe1, 0xb6, 0x2f, 0x8f, 0x35, 0x3d, 0x7f, 0x69, 0x84, + 0xc3, 0x2c, 0x34, 0xbd, 0x12, 0x3d, 0xc3, 0x70, 0x54, 0x9d, 0x47, 0x4a, + 0xf6, 0xb0, 0x97, 0xe7, 0x74, 0x49, 0x4e, 0xa5, 0x43, 0xfd, 0xb5, 0x78, + 0x88, 0xec, 0xc7, 0x66, 0xc2, 0xa7, 0xe4, 0xb6, 0x47, 0xf9, 0xbc, 0x73, + 0x06, 0x52, 0xa9, 0xf9, 0x5b, 0x47, 0x1d, 0x55, 0xa1, 0x0f, 0x3b, 0x75, + 0xb5, 0xf1, 0x69, 0x22, 0x95, 0x37, 0x2f, 0x31, 0x1e, 0x18, 0xe1, 0xaf, + 0x54, 0x6a, 0x70, 0x44, 0xd2, 0x97, 0x49, 0x37, 0xb1, 0x28, 0x59, 0xc0, + 0x7a, 0x2a, 0xb4, 0xd8, 0x46, 0x81, 0x5e, 0x42, 0x64, 0x71, 0x80, 0x79, + 0x28, 0x8a, 0xaf, 0x10, 0xab, 0x2b, 0xde, 0x94, 0x22, 0xab, 0x81, 0x80, + 0xad, 0xe7, 0x88, 0xd8, 0x47, 0x5f, 0xaf, 0x94, 0x51, 0x5f, 0xc4, 0x36, + 0x05, 0xfc, 0xb0, 0x88, 0xf2, 0x0b, 0x2a, 0xb8, 0xc2, 0x24, 0x22, 0x90, + 0xb4, 0x7b, 0x93, 0x2b, 0x50, 0x44, 0x6b, 0xf1, 0xc3, 0x64, 0xba, 0x7d, + 0xed, 0xe4, 0x1b, 0xf3, 0x38, 0x16, 0x09, 0x49, 0x4c, 0x55, 0x58, 0x9c, + 0x3c, 0x14, 0x65, 0x0b, 0x4a, 0x32, 0x8e, 0xf6, 0x5f, 0xb2, 0x76, 0x4d, + 0x61, 0x86, 0xcc, 0x3c, 0x42, 0x71, 0xa1, 0xe0, 0x2a, 0xbd, 0x35, 0xcf, + 0xdc, 0x13, 0x54, 0xc1, 0xb4, 0x6a, 0xe5, 0x33, 0x31, 0x13, 0x09, 0x35, + 0x48, 0x4c, 0x1e, 0x0a, 0x92, 0x2f, 0xd0, 0x55, 0x59, 0x9a, 0x08, 0x2b, + 0xb0, 0xb9, 0x27, 0x57, 0xa8, 0xbe, 0x4f, 0x19, 0x49, 0x6f, 0x9c, 0x2a, + 0x6e, 0xea, 0x1e, 0xb3, 0x33, 0x48, 0xb2, 0xeb, 0xa6, 0x94, 0x5c, 0x25, + 0x70, 0x6e, 0xad, 0x29, 0x58, 0x01, 0x63, 0xb8, 0x6e, 0x71, 0xf1, 0x9a, + 0x5a, 0x52, 0x99, 0x34, 0x2f, 0xbb, 0xbb, 0x3d, 0xdc, 0x3a, 0x66, 0xbe, + 0x42, 0x2a, 0x10, 0x00, 0x3e, 0x5e, 0x56, 0x7d}, + // cipherTextDigest + {0x0f, 0xe3, 0x5f, 0x5d, 0xbf, 0x46, 0xae, 0x99, 0xfc, 0xfa, 0x08, + 0xd3, 0x12, 0x8a, 0x88, 0x5a, 0xa5, 0x65, 0x0e, 0x59, 0xcd, 0x39, + 0x78, 0xa6, 0x30, 0x76, 0xb1, 0xd2, 0x51, 0xdf, 0x82, 0xd2}, + // secret + {0x89, 0xb2, 0xb8, 0x72, 0x12, 0x32, 0xd3, 0xdf, 0xa8, 0x62, 0x50, + 0x0f, 0x49, 0x88, 0xc7, 0x0b, 0xc0, 0x91, 0x37, 0xea, 0x74, 0x42, + 0x85, 0xe0, 0x59, 0x74, 0x6a, 0x23, 0x99, 0x41, 0xe7, 0xa1}, + true}, + // tcID: 60 + {60, + params_ml_kem1024_test_mode, + // entropy + {0x6b, 0x7d, 0x6c, 0x27, 0x9f, 0xfe, 0xa4, 0xb6, 0x76, 0x58, 0x0f, + 0x24, 0x06, 0xef, 0xf9, 0xdb, 0x1c, 0x3e, 0x93, 0xeb, 0xad, 0xed, + 0xd2, 0xba, 0xf7, 0xf5, 0xf0, 0x62, 0xe0, 0x9c, 0x95, 0xa8}, + // publicKey + {0x1c, 0x53, 0xa7, 0x67, 0x37, 0xb6, 0xee, 0xc3, 0x22, 0x0d, 0xfa, 0x25, + 0x53, 0xc2, 0x34, 0x85, 0xf9, 0x34, 0xd8, 0x85, 0x34, 0x41, 0xf4, 0x0a, + 0x32, 0x69, 0x80, 0x06, 0x98, 0x01, 0x74, 0xe8, 0x88, 0x22, 0x55, 0xa7, + 0x3f, 0xa8, 0x9a, 0xae, 0x13, 0xc5, 0xa8, 0xe0, 0x67, 0xfb, 0x31, 0x4f, + 0x13, 0x08, 0xbd, 0xe6, 0xc6, 0x16, 0xd5, 0xac, 0x43, 0xe3, 0x81, 0xc7, + 0xc0, 0x58, 0xa9, 0x8b, 0xa6, 0x2e, 0x22, 0xf2, 0x2b, 0xd6, 0x29, 0x05, + 0x55, 0xeb, 0x8f, 0xf9, 0xe0, 0x0d, 0x8e, 0x97, 0x70, 0x14, 0xb1, 0xa9, + 0x75, 0xe2, 0x7e, 0x39, 0xb5, 0x57, 0xb7, 0xb4, 0x09, 0x64, 0x78, 0xa1, + 0xb1, 0x20, 0xc9, 0x2d, 0xa1, 0x60, 0xbe, 0xcc, 0xc7, 0xe6, 0xf7, 0xa3, + 0xca, 0x4c, 0x23, 0xf4, 0x1c, 0x2d, 0x1e, 0xc9, 0x4c, 0x1e, 0x10, 0x70, + 0xfc, 0x45, 0x06, 0xc3, 0xd5, 0x0a, 0x73, 0xe2, 0x62, 0x9b, 0xfa, 0x95, + 0xb6, 0x82, 0x5a, 0x24, 0x08, 0xc9, 0x70, 0xea, 0xaa, 0x57, 0xdc, 0x41, + 0xb9, 0x69, 0x39, 0x1b, 0x55, 0x99, 0xe4, 0xa8, 0xc7, 0x06, 0xfb, 0xcc, + 0x01, 0xe1, 0x41, 0x87, 0x61, 0x8c, 0x9d, 0x58, 0xa5, 0x12, 0x6c, 0x28, + 0x7b, 0x29, 0x1f, 0x59, 0xa2, 0x5a, 0x28, 0x10, 0x79, 0x42, 0x4b, 0xb2, + 0xad, 0x22, 0xad, 0xfc, 0x31, 0x9f, 0xa1, 0x0b, 0x07, 0x42, 0x23, 0x2a, + 0xf6, 0x76, 0x2b, 0x83, 0x5a, 0x1b, 0x93, 0xb4, 0x26, 0xc6, 0x7c, 0xab, + 0xc4, 0x29, 0x21, 0xba, 0x74, 0xc8, 0x3f, 0xf7, 0x2e, 0x14, 0xc1, 0x71, + 0x93, 0x5a, 0xad, 0x26, 0x75, 0x76, 0x98, 0x10, 0x64, 0x9e, 0xd2, 0x4b, + 0x8d, 0x03, 0x0a, 0x85, 0x25, 0x75, 0x35, 0x25, 0x1d, 0x82, 0x0c, 0x66, + 0x46, 0x53, 0x5e, 0x28, 0x8b, 0x19, 0x42, 0x35, 0x3e, 0x96, 0x0a, 0x28, + 0x76, 0xd4, 0x3c, 0x74, 0x25, 0x69, 0x31, 0x12, 0xc7, 0x81, 0xe1, 0x34, + 0x3f, 0xb6, 0x30, 0x46, 0x70, 0x48, 0x06, 0x04, 0x3f, 0x00, 0x70, 0x2d, + 0xcd, 0x7b, 0xb4, 0x86, 0xa0, 0x42, 0x96, 0xe3, 0x75, 0x0b, 0x9c, 0xa1, + 0x6e, 0x91, 0x0f, 0x9c, 0xfc, 0xca, 0x36, 0xe5, 0xae, 0xa9, 0x52, 0x9e, + 0x5d, 0x37, 0x36, 0xcd, 0xb9, 0x94, 0x77, 0xc7, 0xac, 0xa6, 0x60, 0x21, + 0x49, 0xa0, 0xc2, 0xd5, 0x17, 0x1b, 0x76, 0xa0, 0x52, 0x09, 0x7b, 0xb2, + 0xa4, 0x92, 0x69, 0xe3, 0x30, 0x5d, 0x98, 0x77, 0x15, 0x0e, 0x6c, 0x53, + 0x05, 0x58, 0x59, 0xe9, 0xc8, 0x7b, 0xec, 0x3b, 0x6c, 0xbb, 0x09, 0x92, + 0x87, 0x0a, 0x83, 0x88, 0x23, 0xb7, 0xe6, 0x18, 0x65, 0x56, 0x15, 0x7e, + 0x13, 0x86, 0x7a, 0x1e, 0x97, 0x30, 0x74, 0xd3, 0xc6, 0xc0, 0xa4, 0x32, + 0x89, 0x06, 0x04, 0x8c, 0x23, 0x91, 0x82, 0xe1, 0x43, 0x9f, 0xf9, 0xac, + 0xdb, 0x78, 0x69, 0xf4, 0x50, 0x14, 0x3f, 0x89, 0x9f, 0xa0, 0xcb, 0xc9, + 0x61, 0x19, 0xa6, 0x85, 0xa0, 0x6c, 0x9e, 0x69, 0x18, 0xed, 0x7c, 0xaa, + 0x55, 0xdb, 0xb1, 0x1d, 0x67, 0xaf, 0x2e, 0xa5, 0x48, 0x01, 0x2a, 0xc6, + 0xf0, 0x17, 0x64, 0x8c, 0xe6, 0x61, 0x19, 0xe7, 0x70, 0xa0, 0xeb, 0x8b, + 0x85, 0x2b, 0x46, 0x54, 0x85, 0x4b, 0x9b, 0xbc, 0x01, 0x99, 0xc8, 0x1e, + 0x7c, 0xd7, 0x4b, 0x7d, 0x3b, 0x8e, 0xb0, 0x13, 0x0b, 0x31, 0xe0, 0xa3, + 0x39, 0xac, 0x39, 0x01, 0x5a, 0x25, 0xae, 0x37, 0x8c, 0xf0, 0xc3, 0x9c, + 0x9d, 0x47, 0xab, 0x5e, 0xc2, 0x02, 0x02, 0xe3, 0x96, 0xdd, 0xc1, 0xb7, + 0xda, 0xb3, 0xaf, 0x41, 0x99, 0xba, 0xe6, 0x40, 0x5e, 0x0c, 0x3c, 0x54, + 0xcd, 0xa1, 0x28, 0x3c, 0x74, 0xc9, 0x20, 0x32, 0xc3, 0xef, 0x8c, 0x0c, + 0x41, 0x53, 0x0c, 0xb9, 0x19, 0x3f, 0x23, 0xc9, 0x6c, 0xb3, 0x28, 0xb3, + 0xec, 0x23, 0x01, 0x8e, 0x71, 0x90, 0x67, 0xca, 0x43, 0x0d, 0x01, 0xcb, + 0x51, 0x85, 0xc1, 0x08, 0x84, 0xa9, 0x66, 0x67, 0xa1, 0x1d, 0xe3, 0x33, + 0x8f, 0xf6, 0x88, 0xda, 0xe3, 0x2e, 0xf2, 0xd5, 0xa2, 0x57, 0x07, 0x4b, + 0xea, 0x43, 0x1b, 0x05, 0x9a, 0xba, 0x51, 0x78, 0x4a, 0xaa, 0xa5, 0xb8, + 0xea, 0xca, 0xbd, 0x7d, 0x05, 0x63, 0x98, 0x67, 0x82, 0xce, 0xcb, 0x3a, + 0x9c, 0xf5, 0x80, 0x04, 0xe4, 0x93, 0x8b, 0x18, 0x59, 0xb5, 0x44, 0x20, + 0x7c, 0xf3, 0x7e, 0x4d, 0x05, 0x95, 0x3d, 0x15, 0x56, 0xfa, 0x2c, 0x6e, + 0xe7, 0x6b, 0x5e, 0x07, 0x3a, 0xc1, 0x41, 0x19, 0xb2, 0x1a, 0x4c, 0x52, + 0x0e, 0x3c, 0x7b, 0x4d, 0xab, 0x35, 0x45, 0x18, 0x14, 0xcf, 0xdc, 0x87, + 0x90, 0x50, 0x76, 0x5b, 0xc4, 0x08, 0x6a, 0x68, 0x2c, 0x80, 0xb6, 0x28, + 0xcf, 0xaa, 0x12, 0x21, 0xc5, 0x10, 0xa6, 0x98, 0x1f, 0x84, 0xda, 0x57, + 0xa7, 0x73, 0xbd, 0x0d, 0x29, 0x24, 0x6a, 0x7a, 0x44, 0x46, 0xfb, 0x76, + 0xef, 0xc4, 0x6d, 0x9c, 0x92, 0xcb, 0xb4, 0x93, 0xcd, 0xc1, 0xdc, 0x7c, + 0x55, 0x5b, 0x6f, 0x1e, 0x78, 0xa2, 0xd7, 0xa3, 0x4f, 0x04, 0x35, 0x63, + 0xe0, 0xb2, 0x23, 0xde, 0x7b, 0xb1, 0x5b, 0x00, 0x28, 0x02, 0xbb, 0x1b, + 0xd7, 0x7b, 0x13, 0x65, 0x30, 0x45, 0x34, 0xb0, 0x2d, 0x37, 0xf1, 0x90, + 0x3d, 0x7b, 0x84, 0xc6, 0x86, 0x1b, 0x30, 0xaa, 0x68, 0xeb, 0x2c, 0x14, + 0x3f, 0x62, 0xa9, 0x93, 0x79, 0x0c, 0x99, 0x68, 0x77, 0xdd, 0x15, 0x6e, + 0x46, 0x9b, 0xbe, 0x08, 0xac, 0xbb, 0x4e, 0x21, 0x19, 0x19, 0xe7, 0x68, + 0xb0, 0x1c, 0x56, 0x74, 0x33, 0x57, 0xf6, 0x05, 0x45, 0xe3, 0x67, 0x43, + 0xb1, 0x4b, 0xc0, 0x53, 0xfa, 0x4e, 0x22, 0xdb, 0x40, 0x69, 0x6b, 0x2c, + 0xd6, 0x4a, 0x9f, 0xe6, 0x17, 0xa3, 0xf3, 0x7b, 0x89, 0x46, 0x75, 0x81, + 0xd1, 0xfb, 0x39, 0x26, 0x08, 0xb8, 0x40, 0x92, 0x6c, 0xa4, 0xa8, 0x31, + 0xbe, 0xc6, 0x6c, 0xcf, 0x74, 0x4a, 0x25, 0x65, 0x1d, 0xfb, 0x84, 0xaf, + 0xed, 0x09, 0x54, 0xd1, 0xd5, 0x9e, 0x9a, 0x09, 0xce, 0xec, 0xfa, 0x6c, + 0xc0, 0xba, 0xba, 0x89, 0xf3, 0x45, 0xb4, 0x44, 0x2b, 0x1d, 0x41, 0x82, + 0x0a, 0xf4, 0x6a, 0x9b, 0x65, 0x76, 0xbf, 0x3a, 0x5a, 0xbc, 0x5c, 0x7b, + 0x11, 0x74, 0x73, 0xd8, 0x77, 0x02, 0x6b, 0x77, 0x4a, 0x0c, 0x62, 0x14, + 0x8e, 0x5c, 0x3f, 0xde, 0x30, 0xc4, 0x33, 0xf3, 0x30, 0xf3, 0xa4, 0x48, + 0x1b, 0x1c, 0xce, 0x8b, 0x48, 0xcc, 0x5c, 0x39, 0xcf, 0x34, 0xa7, 0x63, + 0x61, 0xd1, 0x36, 0x9a, 0xc5, 0xb6, 0x4c, 0xc0, 0x19, 0xf4, 0x01, 0xa4, + 0x1c, 0x49, 0xab, 0xf5, 0xa3, 0x41, 0x2a, 0x28, 0x2d, 0xd0, 0x8c, 0x44, + 0x49, 0x9a, 0xaf, 0x40, 0x87, 0xa2, 0x6e, 0xfb, 0x2b, 0x2e, 0xb9, 0xbb, + 0xba, 0xe5, 0xbb, 0x7b, 0xfa, 0x3d, 0x87, 0x1b, 0x12, 0x07, 0xa0, 0x7b, + 0xb6, 0x29, 0x43, 0xcd, 0xaa, 0x46, 0x39, 0xe8, 0xc5, 0xa9, 0x78, 0xb1, + 0x6f, 0xac, 0xca, 0x31, 0xa7, 0x9f, 0xf3, 0x48, 0x2a, 0x1d, 0x7b, 0xc5, + 0x5b, 0x82, 0x7c, 0xb4, 0xf5, 0x1d, 0xc5, 0x80, 0x81, 0xd0, 0x73, 0x09, + 0x0f, 0x05, 0x32, 0x0e, 0x96, 0x56, 0xcd, 0xfb, 0x8e, 0x64, 0x11, 0x0c, + 0xf1, 0x87, 0x20, 0xc2, 0x05, 0x32, 0x0e, 0x4a, 0x72, 0xd2, 0x4a, 0x6b, + 0x49, 0xc6, 0xcd, 0x65, 0xbc, 0x44, 0x24, 0x69, 0x98, 0x60, 0xcb, 0x19, + 0x89, 0xfa, 0xc3, 0xe0, 0xd0, 0x72, 0x18, 0x98, 0xa4, 0xef, 0x16, 0x2b, + 0x72, 0x06, 0x75, 0xfc, 0xa2, 0x9a, 0x33, 0xc7, 0x62, 0xcb, 0x68, 0x9d, + 0x40, 0x14, 0x9c, 0x78, 0xc7, 0xc0, 0xfb, 0x91, 0x6a, 0xbc, 0x34, 0x83, + 0xc8, 0xfa, 0x07, 0x15, 0x84, 0x12, 0x2d, 0x96, 0xae, 0xbf, 0xa9, 0xcc, + 0x8d, 0x8b, 0x89, 0x43, 0xa2, 0x3a, 0x5c, 0x61, 0xb3, 0x14, 0xc9, 0x3e, + 0x6d, 0xca, 0x50, 0x22, 0x13, 0x27, 0x77, 0x47, 0x39, 0x32, 0x97, 0x5b, + 0x51, 0x73, 0x2b, 0x66, 0x9b, 0x79, 0x1d, 0x91, 0x8c, 0xf0, 0xf7, 0x2b, + 0x17, 0x51, 0xc8, 0x4c, 0xdb, 0x12, 0xf1, 0x02, 0xb6, 0x5c, 0x12, 0x3b, + 0x24, 0x13, 0x9c, 0x74, 0x54, 0x80, 0x89, 0x57, 0xb0, 0xb2, 0x93, 0x29, + 0xa2, 0x17, 0x46, 0x99, 0x92, 0x03, 0x21, 0x97, 0x00, 0x6a, 0xb2, 0x40, + 0xdc, 0x07, 0x07, 0x48, 0xa3, 0xc1, 0x59, 0xe9, 0x0c, 0x25, 0x7a, 0x71, + 0xe5, 0x78, 0x66, 0x7d, 0xa8, 0x90, 0x0b, 0x18, 0x6a, 0xc9, 0x89, 0x84, + 0x19, 0x81, 0x12, 0xd5, 0x06, 0x54, 0x59, 0x81, 0x68, 0xbc, 0x08, 0x47, + 0x03, 0x63, 0xbc, 0xee, 0xcb, 0xbd, 0x39, 0x1a, 0x61, 0xe6, 0x31, 0x65, + 0x0d, 0x27, 0x29, 0xeb, 0xf1, 0x35, 0xf4, 0xf0, 0xcf, 0xf5, 0x04, 0x71, + 0x82, 0xe3, 0x2d, 0xe3, 0xcc, 0xc8, 0x5b, 0xa8, 0x5b, 0x60, 0x29, 0x05, + 0x73, 0xf7, 0xba, 0xad, 0xe9, 0x51, 0xc9, 0x32, 0x0e, 0x2c, 0x65, 0x3b, + 0x39, 0x96, 0x42, 0xb7, 0x86, 0x26, 0x27, 0xac, 0x5c, 0x77, 0xb1, 0xa9, + 0x98, 0x37, 0x12, 0x5c, 0x35, 0x0e, 0xe6, 0xd1, 0x5e, 0x5b, 0xe0, 0x93, + 0x86, 0xf0, 0x57, 0x52, 0xe2, 0x22, 0x9e, 0xd8, 0xb0, 0xbe, 0x69, 0x2a, + 0x2a, 0x76, 0x2c, 0x53, 0xb3, 0x40, 0xec, 0x8c, 0x79, 0x88, 0xcb, 0x9b, + 0x62, 0xf8, 0xa2, 0xd7, 0x33, 0x36, 0x88, 0x30, 0x33, 0xd0, 0x15, 0x0f, + 0x9b, 0xe3, 0x97, 0x68, 0x16, 0x6f, 0x7c, 0x31, 0x20, 0x2d, 0x69, 0x3c, + 0xea, 0x4b, 0xba, 0xe3, 0xa3, 0x51, 0xe1, 0xf8, 0xc3, 0x49, 0x5b, 0x5d, + 0x91, 0x44, 0xbe, 0x50, 0xc2, 0xa4, 0x84, 0xb0, 0x01, 0xf3, 0xdb, 0xc1, + 0x2a, 0x18, 0x74, 0x67, 0x30, 0x2a, 0x83, 0x83, 0xcf, 0x80, 0x27, 0x66, + 0x39, 0x76, 0xba, 0x19, 0x91, 0x78, 0x5b, 0x08, 0x99, 0x51, 0xec, 0x4a, + 0x8b, 0xa9, 0xb8, 0x47, 0xa7, 0x09, 0x2c, 0x34, 0xb7, 0x8f, 0xd9, 0x01, + 0xc7, 0x51, 0x76, 0x53, 0xec, 0x42, 0xea, 0x3a, 0x0e, 0x68, 0x55, 0x16, + 0x11, 0x26, 0x4a, 0x90, 0x03, 0x91, 0x00, 0xec, 0x46, 0xd0, 0xd0, 0x4e, + 0xcb, 0x06, 0x5c, 0xab, 0xab, 0xb3, 0x75, 0x88, 0x61, 0x6e, 0xf8, 0x35, + 0x5a, 0xa4, 0x16, 0xb7, 0xc6, 0x46, 0xbf, 0xf0, 0x20, 0xa0, 0xaa, 0x11, + 0x99, 0x45, 0x4a, 0x15, 0xa4, 0x3b, 0x32, 0x18, 0x7c, 0x0d, 0x7c, 0x74, + 0x9b, 0x09, 0xc2, 0xce, 0xc2, 0x0e, 0xa8, 0xaa, 0xb5, 0x48, 0xa3, 0x1d, + 0xf7, 0xe4, 0x08, 0x92, 0xe6, 0x20, 0x8c, 0xfc, 0x5f, 0x3b, 0x41, 0x8b, + 0x96, 0x14, 0xa7, 0xcc, 0xbc, 0x99, 0x41, 0xe6, 0xb0, 0x1b, 0x78, 0xba, + 0x6b, 0x38, 0xa5, 0x1c, 0x39, 0x2c, 0xc4, 0x92, 0x0d, 0x98, 0xc1, 0x66, + 0x92, 0x28, 0xc0, 0x09, 0x09, 0x2a, 0x7d, 0xc0, 0x7e, 0x60, 0x89, 0x82, + 0xc1, 0xa0, 0x0e, 0x90, 0x60, 0x4f, 0x9a, 0x50, 0xa7, 0xa1, 0xd0, 0x2d, + 0x32, 0xe3, 0x70, 0x4c, 0xb3, 0x7c, 0xe7, 0x1a, 0xc6, 0x9f, 0xcb, 0x36, + 0x72, 0x5b, 0x50, 0xaf, 0x03, 0x13, 0x8f, 0x78, 0xa3, 0x2b, 0xa3, 0x5a, + 0xd8, 0xe2, 0x5d, 0x0d, 0x86, 0xb9, 0xa8, 0xa7, 0xc8, 0x17, 0x22, 0x1f, + 0x15, 0xe6, 0x4b, 0x91, 0xa0, 0x43, 0x1c, 0xa6, 0xba, 0x6e, 0xa9, 0x49, + 0x5f, 0x04, 0x31, 0xa8, 0x38, 0x2a, 0xda, 0x23, 0x2b, 0xc9, 0x47, 0x45, + 0x7d, 0x16, 0xc3, 0x89, 0xf4, 0xb2, 0x35, 0x18, 0xba, 0x07, 0x89, 0xbe, + 0x8d, 0x6b, 0x99, 0x0e, 0x1a, 0x45, 0x18, 0xde, 0x7e, 0x6c, 0xe1, 0x8b, + 0x3d, 0xbf, 0x01, 0x93, 0x8a, 0x79, 0xb6, 0x71, 0x8c, 0x38, 0x72, 0x1b, + 0x3d, 0xa1, 0x58, 0x8e, 0x74, 0xe2, 0x8b, 0xb5}, + // cipherTextDigest + {0x57, 0x82, 0x02, 0x39, 0xd6, 0xe6, 0xfe, 0xf2, 0x30, 0xa6, 0x79, + 0xd2, 0xf5, 0xca, 0x15, 0xa3, 0x9a, 0xfc, 0x00, 0xc2, 0x16, 0x42, + 0x21, 0x3c, 0xed, 0x6f, 0x62, 0xbf, 0x9f, 0x8a, 0x7d, 0xc4}, + // secret + {0xc7, 0xe6, 0xbf, 0xad, 0x4d, 0xae, 0x49, 0x7d, 0xa8, 0x61, 0xb5, + 0x52, 0x28, 0x94, 0xc3, 0xe3, 0x87, 0xce, 0x5a, 0xd1, 0xc3, 0x84, + 0x57, 0xef, 0x81, 0xbd, 0xc7, 0x68, 0x9b, 0xf2, 0xe6, 0xbe}, + true}, + // tcID: 61 + {61, + params_ml_kem1024_test_mode, + // entropy + {0xac, 0x91, 0x6f, 0x44, 0xe4, 0x3e, 0xaa, 0xe9, 0x32, 0x20, 0xe4, + 0x7a, 0x66, 0x47, 0xd9, 0xdb, 0xd6, 0x13, 0x21, 0xad, 0x1d, 0x68, + 0x3f, 0x34, 0x76, 0x51, 0x11, 0x18, 0xdf, 0xa4, 0x12, 0xab}, + // publicKey + {0xd1, 0x5c, 0x21, 0x35, 0x2b, 0xaa, 0x5d, 0x59, 0x42, 0xf3, 0x15, 0xa8, + 0xc0, 0x40, 0x8c, 0x58, 0xa4, 0x6e, 0x3b, 0xa0, 0x2a, 0xe5, 0x2b, 0x7e, + 0x2e, 0x74, 0xa6, 0x8c, 0xd7, 0x53, 0x86, 0x26, 0x25, 0x0d, 0xcb, 0xb2, + 0x3f, 0x16, 0x4b, 0xee, 0x48, 0x04, 0x19, 0xe9, 0xaf, 0x27, 0xb7, 0x15, + 0xf1, 0x55, 0x0e, 0x5a, 0xf8, 0x8f, 0x19, 0x3a, 0x24, 0x9b, 0x24, 0xc5, + 0xf3, 0xd9, 0xaf, 0x7f, 0x5c, 0x67, 0x70, 0x79, 0x44, 0x5b, 0xf3, 0xc2, + 0xee, 0x0b, 0x8d, 0x02, 0x58, 0x6e, 0xc7, 0xd2, 0x58, 0xb7, 0x51, 0x74, + 0x3b, 0xa9, 0xa1, 0x2e, 0xe7, 0x24, 0x7d, 0x62, 0x38, 0xf4, 0x7c, 0xba, + 0xe6, 0xa4, 0x84, 0xa8, 0x97, 0x49, 0x84, 0xb2, 0xc9, 0xb4, 0xd4, 0x72, + 0x70, 0xc0, 0x9b, 0x5b, 0xca, 0x1c, 0x75, 0xba, 0x4a, 0x21, 0x61, 0x8c, + 0x92, 0xa1, 0xc4, 0x60, 0xc7, 0x1d, 0xde, 0x8a, 0xb1, 0x4c, 0x39, 0xbc, + 0xd1, 0x44, 0x26, 0x84, 0xa1, 0x06, 0x21, 0x01, 0x28, 0xaf, 0xe3, 0x7a, + 0x00, 0x22, 0xc5, 0x86, 0x82, 0xb4, 0x3a, 0x4a, 0x54, 0x03, 0x80, 0x7c, + 0xc9, 0xf8, 0xc8, 0x65, 0x56, 0x68, 0x2c, 0x83, 0x87, 0x0d, 0xc4, 0x97, + 0x62, 0xda, 0x01, 0x44, 0x80, 0x89, 0x11, 0x9a, 0xb6, 0x10, 0xfb, 0xbf, + 0xbc, 0xab, 0x7b, 0x3b, 0x40, 0x99, 0xea, 0xf6, 0x58, 0x2f, 0x2a, 0xa0, + 0xf6, 0x36, 0x90, 0xce, 0x37, 0x22, 0x41, 0x1a, 0xc5, 0x79, 0x5c, 0x4b, + 0x8c, 0xb7, 0x42, 0xfb, 0x14, 0xb6, 0xb6, 0x7a, 0x6b, 0x77, 0x98, 0xc7, + 0x53, 0xba, 0x82, 0xe3, 0xa5, 0x1d, 0x59, 0x63, 0x3e, 0x1e, 0xfc, 0x95, + 0x9a, 0x06, 0x74, 0x99, 0x85, 0x04, 0x43, 0x9c, 0xa5, 0x62, 0x42, 0x08, + 0xc4, 0xf2, 0x92, 0xde, 0x58, 0x14, 0x70, 0xa5, 0xa7, 0x89, 0x70, 0x98, + 0x39, 0x55, 0xa1, 0xdf, 0x33, 0xc1, 0x58, 0x94, 0x1f, 0x56, 0x43, 0xbb, + 0x7a, 0xc0, 0x8c, 0xd0, 0x41, 0x01, 0xec, 0xe5, 0x66, 0xe9, 0x82, 0x01, + 0xfc, 0x47, 0xbc, 0xaf, 0x28, 0x42, 0xeb, 0x0a, 0x92, 0xfd, 0x13, 0x55, + 0x71, 0x25, 0x4f, 0x6f, 0x5c, 0x5b, 0x0d, 0x76, 0x0d, 0xe2, 0x37, 0xae, + 0x30, 0x30, 0x58, 0x82, 0x40, 0x6e, 0x1a, 0x13, 0xaf, 0x4e, 0xa5, 0xa4, + 0x71, 0x70, 0x25, 0x49, 0x81, 0x4a, 0xd5, 0xac, 0x95, 0xc4, 0xa6, 0x5d, + 0x57, 0xc1, 0xba, 0x7f, 0xab, 0xbd, 0xe0, 0x9c, 0x90, 0x3c, 0x76, 0x44, + 0xf7, 0x74, 0x69, 0x42, 0x42, 0x80, 0x7f, 0x04, 0x73, 0x4f, 0x83, 0x8b, + 0x16, 0xf8, 0x1e, 0x6b, 0x89, 0x79, 0xcd, 0x8a, 0x9d, 0xad, 0x06, 0x55, + 0x52, 0xc5, 0x37, 0x05, 0x59, 0xc4, 0x77, 0xc7, 0x37, 0x6e, 0x55, 0xa5, + 0x02, 0x55, 0x0c, 0xf8, 0x45, 0xc2, 0xc1, 0x29, 0x10, 0xd3, 0x67, 0xb1, + 0x48, 0x73, 0x65, 0x3b, 0xa1, 0x39, 0x4a, 0x40, 0x83, 0x4c, 0x45, 0xa8, + 0xb5, 0xab, 0xba, 0x79, 0x9b, 0x29, 0x54, 0x5c, 0x49, 0x25, 0x4c, 0x80, + 0x1b, 0xca, 0x81, 0xa1, 0x38, 0x15, 0x17, 0x5b, 0xa6, 0xf3, 0x20, 0xa8, + 0x40, 0xa3, 0x32, 0xd1, 0xd8, 0x37, 0xff, 0xdb, 0x9c, 0xea, 0x8a, 0x03, + 0x8b, 0x60, 0xa3, 0x96, 0x85, 0xa2, 0x1d, 0xf6, 0x2b, 0x1b, 0x53, 0x95, + 0x69, 0xf9, 0xaa, 0xa4, 0x01, 0x05, 0x30, 0x24, 0x4e, 0x1d, 0x27, 0xc8, + 0x66, 0xa0, 0x24, 0x59, 0xdb, 0xbb, 0x61, 0x91, 0x02, 0xdf, 0x8c, 0x1f, + 0xe8, 0xd2, 0x72, 0x70, 0x11, 0x1b, 0x39, 0x79, 0x53, 0xfe, 0x77, 0x90, + 0x3f, 0x14, 0xa0, 0xbf, 0xb3, 0x24, 0xca, 0x3b, 0x3f, 0x33, 0x12, 0x4a, + 0x8b, 0xc0, 0x1a, 0x69, 0x00, 0x61, 0x1d, 0xf3, 0x1e, 0x91, 0x63, 0x03, + 0x8e, 0x20, 0x99, 0xf8, 0x8a, 0x82, 0x67, 0xd6, 0x24, 0x48, 0x68, 0x36, + 0x57, 0xd3, 0x9b, 0x51, 0xc0, 0x62, 0x95, 0x09, 0x4f, 0x5b, 0xc4, 0xc2, + 0xaf, 0xf3, 0xb4, 0x57, 0x05, 0x84, 0xac, 0x03, 0x0c, 0x9c, 0xb6, 0xa6, + 0x0e, 0x9c, 0x4f, 0x19, 0x55, 0xb9, 0x7e, 0x02, 0x83, 0x27, 0xf7, 0x35, + 0x77, 0x08, 0x4d, 0x26, 0xcb, 0x51, 0x23, 0x59, 0x2e, 0xe3, 0x68, 0x1d, + 0x81, 0xdc, 0x97, 0x7f, 0x06, 0x88, 0x35, 0xb7, 0x41, 0x0e, 0xc7, 0x5a, + 0x47, 0xc4, 0xaf, 0x01, 0x28, 0x31, 0x32, 0xa6, 0x82, 0x57, 0xa4, 0xb5, + 0x2b, 0x74, 0x50, 0xfd, 0x47, 0x65, 0xae, 0xe9, 0x4f, 0x96, 0x21, 0xa7, + 0x34, 0xa0, 0x02, 0xa1, 0x5b, 0x8a, 0x9b, 0x86, 0x28, 0x0d, 0x74, 0xba, + 0x18, 0x51, 0x5b, 0x65, 0x89, 0x82, 0x15, 0x57, 0x5b, 0x9f, 0x70, 0xc8, + 0xde, 0xf4, 0x20, 0xa0, 0x39, 0x47, 0xf9, 0x73, 0x60, 0x4f, 0x65, 0xc2, + 0xbe, 0xf5, 0x0b, 0xf4, 0x53, 0xca, 0x02, 0x81, 0x60, 0x46, 0xeb, 0xa7, + 0xb6, 0x87, 0x32, 0x1d, 0xb9, 0x19, 0x66, 0x3b, 0xa3, 0x01, 0x43, 0x61, + 0x80, 0x46, 0x80, 0xe2, 0x53, 0x84, 0x27, 0xa7, 0xc7, 0xc7, 0xa9, 0x0d, + 0x24, 0xd9, 0xce, 0xc8, 0x65, 0x22, 0xc7, 0xa6, 0x1e, 0x4d, 0xd7, 0x78, + 0x2f, 0xca, 0x18, 0x5e, 0x75, 0xb4, 0x76, 0x8b, 0x09, 0x76, 0x66, 0xae, + 0xdb, 0xa9, 0x59, 0x44, 0x41, 0x22, 0x5f, 0xb9, 0x0b, 0x36, 0xc3, 0x80, + 0x4d, 0xc8, 0x29, 0xf5, 0x52, 0x32, 0xde, 0x78, 0x68, 0x28, 0x14, 0x2a, + 0x17, 0xd2, 0x21, 0x87, 0x84, 0x48, 0x5d, 0x6b, 0xc5, 0xa3, 0xf4, 0x26, + 0x54, 0x73, 0x41, 0x57, 0x58, 0x5e, 0x1e, 0xac, 0x5f, 0x7f, 0x09, 0x07, + 0x92, 0xd1, 0xb2, 0x02, 0x28, 0xc9, 0xf4, 0x09, 0x79, 0xe2, 0x4b, 0x8a, + 0xd2, 0x98, 0xbb, 0xbd, 0x50, 0x08, 0x0a, 0x04, 0x2b, 0x81, 0x9b, 0x5b, + 0x34, 0x98, 0x7b, 0x20, 0xe5, 0x9c, 0x9e, 0x49, 0x8d, 0xa3, 0x06, 0xaa, + 0x88, 0xbc, 0x8b, 0x6c, 0x8c, 0x55, 0xf8, 0xc2, 0x1d, 0x32, 0xc5, 0x97, + 0x31, 0x25, 0xb4, 0xc9, 0x46, 0xa3, 0x4b, 0x27, 0xb3, 0x35, 0x70, 0x38, + 0x17, 0x80, 0x6b, 0x23, 0x08, 0x4e, 0x4b, 0xa2, 0x5e, 0x08, 0x40, 0x12, + 0x36, 0x44, 0x10, 0x41, 0x43, 0x03, 0x82, 0x47, 0x26, 0xf3, 0xc6, 0x52, + 0xd6, 0xc2, 0x94, 0x72, 0x42, 0xa1, 0xab, 0xb4, 0xac, 0x3a, 0xb0, 0x2e, + 0xf4, 0x7a, 0x2f, 0xbf, 0x19, 0x00, 0x20, 0xe1, 0x5d, 0x1d, 0x7b, 0xce, + 0xa0, 0x38, 0x2a, 0xca, 0x84, 0x72, 0x3e, 0xd1, 0x16, 0x81, 0x8a, 0x5f, + 0x53, 0xe7, 0x0d, 0x0b, 0x6c, 0x26, 0x54, 0x54, 0x52, 0x0d, 0x7b, 0x57, + 0xab, 0xc7, 0x38, 0xc4, 0x9b, 0x2e, 0x79, 0x61, 0xcc, 0xc5, 0x07, 0x32, + 0x73, 0x39, 0xb0, 0x27, 0x78, 0x7e, 0x02, 0xf6, 0x68, 0xa1, 0x21, 0x3d, + 0xeb, 0x0c, 0xb6, 0x2c, 0x03, 0x66, 0xe0, 0xab, 0xc7, 0xd3, 0xb8, 0x0d, + 0x95, 0x00, 0xcd, 0x1f, 0x86, 0xa1, 0xa4, 0x1b, 0x84, 0xab, 0x59, 0x31, + 0x8e, 0x65, 0x18, 0x9e, 0x62, 0x29, 0x7c, 0xc1, 0x17, 0x07, 0xa9, 0x58, + 0x06, 0x58, 0x69, 0x9b, 0x9c, 0x04, 0x45, 0x57, 0x51, 0xb5, 0xab, 0x80, + 0x40, 0x23, 0x9a, 0x5c, 0xf2, 0xb3, 0x9f, 0x5c, 0x7f, 0x72, 0xf8, 0x59, + 0x46, 0x89, 0x29, 0x36, 0x66, 0x71, 0xc5, 0x34, 0x58, 0xf6, 0xb6, 0x3e, + 0xa4, 0x85, 0x7c, 0xe1, 0x49, 0x64, 0x91, 0x95, 0xae, 0xec, 0x21, 0x15, + 0x62, 0x77, 0x58, 0xdc, 0x47, 0x98, 0x98, 0x74, 0x60, 0x1f, 0x77, 0x12, + 0x57, 0xbb, 0x95, 0x97, 0xea, 0x83, 0x40, 0x18, 0x62, 0xc8, 0x58, 0x1a, + 0xa0, 0xec, 0x54, 0x74, 0x60, 0x83, 0xe8, 0xa8, 0x05, 0xfe, 0x33, 0xc3, + 0xbc, 0x75, 0xc7, 0x48, 0x67, 0x58, 0x71, 0xac, 0x6a, 0x33, 0x2c, 0x1a, + 0xcc, 0x99, 0x6e, 0x5d, 0x70, 0xc8, 0xbe, 0xba, 0xc2, 0xf1, 0xb1, 0x7f, + 0xfa, 0x85, 0x0b, 0x8d, 0x9a, 0x21, 0x1c, 0xab, 0x89, 0xbe, 0xbb, 0x0c, + 0x8a, 0xd6, 0x73, 0x1f, 0x53, 0x63, 0xba, 0x07, 0xb1, 0xda, 0x0c, 0x06, + 0xd9, 0xe0, 0x57, 0x7e, 0xf0, 0x97, 0xdd, 0xe9, 0x70, 0x17, 0x34, 0x63, + 0x03, 0xd6, 0x1b, 0xc9, 0xca, 0xac, 0x6c, 0x6a, 0x08, 0xa3, 0x3b, 0x3c, + 0x96, 0xd1, 0x39, 0x5a, 0x60, 0xcf, 0xc1, 0x35, 0xb8, 0x50, 0xd7, 0xb9, + 0x48, 0x33, 0xb4, 0xd9, 0x0c, 0x7f, 0x53, 0x62, 0x18, 0x15, 0xaa, 0x64, + 0x31, 0x19, 0x3e, 0x25, 0xc7, 0xcd, 0xae, 0x4c, 0x3f, 0x50, 0xf6, 0x5f, + 0x83, 0x43, 0x80, 0xb1, 0xe0, 0x08, 0xf0, 0x1a, 0x15, 0xb0, 0x7b, 0x7c, + 0x35, 0xb6, 0x4a, 0xf0, 0xa0, 0x8e, 0x04, 0xb9, 0x34, 0xf5, 0xf2, 0x3c, + 0x69, 0x15, 0x0c, 0xea, 0xe9, 0x1d, 0x73, 0x5c, 0x5b, 0x5b, 0x86, 0x0d, + 0x92, 0xd7, 0xa8, 0x33, 0xf1, 0xc4, 0x42, 0xb2, 0x2e, 0xff, 0x38, 0x18, + 0x6f, 0xd2, 0x32, 0x6c, 0xcc, 0x98, 0x81, 0xd9, 0x22, 0xe1, 0xa9, 0x44, + 0xfe, 0xf2, 0x81, 0x38, 0x46, 0x4b, 0x5b, 0x26, 0x83, 0x79, 0xb8, 0x10, + 0x68, 0xf1, 0x6a, 0xd7, 0x8b, 0x1e, 0xc7, 0xc0, 0x19, 0x8e, 0x99, 0x5c, + 0x7a, 0xec, 0x78, 0xaf, 0xaa, 0x7f, 0xb5, 0x56, 0x2c, 0x40, 0x25, 0x0a, + 0x78, 0x44, 0xb0, 0xb6, 0x29, 0x9d, 0xae, 0x0c, 0x18, 0xe8, 0x97, 0x57, + 0x4b, 0x68, 0x8b, 0x23, 0x73, 0x8a, 0x04, 0xa0, 0x81, 0xc3, 0x5b, 0xb8, + 0x2d, 0xf0, 0x02, 0xb6, 0xf1, 0x9d, 0x50, 0x9b, 0x16, 0xad, 0xeb, 0x74, + 0xc4, 0x46, 0x0c, 0x3f, 0xa1, 0x7b, 0x20, 0x28, 0x8a, 0x56, 0x71, 0x67, + 0x66, 0x4c, 0x87, 0xa0, 0xdb, 0x78, 0x4a, 0x49, 0x1b, 0xd3, 0xfb, 0x38, + 0x61, 0x21, 0x31, 0x39, 0x86, 0x3e, 0xc7, 0xf6, 0x9d, 0x81, 0x64, 0xa4, + 0x8b, 0xda, 0x32, 0x1d, 0xe4, 0xb6, 0x7e, 0xe3, 0x97, 0x72, 0x15, 0x16, + 0x26, 0x77, 0x33, 0xea, 0x53, 0x3c, 0x7a, 0x81, 0x10, 0xe8, 0x11, 0x9e, + 0xd4, 0x20, 0x60, 0x0a, 0x05, 0x39, 0x21, 0xab, 0xb2, 0xa8, 0x17, 0x2a, + 0xc0, 0x64, 0x73, 0x23, 0x7a, 0x42, 0x27, 0xc1, 0x9d, 0x1d, 0xc9, 0x23, + 0xf7, 0xf6, 0x9c, 0x6b, 0xbb, 0x3f, 0x63, 0xc0, 0x19, 0xa5, 0x21, 0x18, + 0x82, 0xb3, 0x7a, 0x76, 0x75, 0xb8, 0x5c, 0x41, 0xcf, 0x8b, 0x8c, 0x3d, + 0x00, 0x97, 0x7e, 0xdc, 0x95, 0xa6, 0x3e, 0x22, 0xa2, 0x86, 0x04, 0xc5, + 0xc8, 0xa1, 0x68, 0xb2, 0x5c, 0x09, 0xb1, 0x72, 0x01, 0x5d, 0x64, 0x02, + 0x40, 0xbb, 0xbb, 0x2c, 0xb1, 0xab, 0x61, 0x87, 0xa5, 0x39, 0x93, 0x72, + 0xe8, 0x01, 0x70, 0xdf, 0xe3, 0x3a, 0xaa, 0x63, 0x6d, 0x1a, 0xc4, 0xcd, + 0xe5, 0xbb, 0xab, 0xda, 0x25, 0x00, 0x4b, 0x11, 0x15, 0x86, 0x60, 0x1e, + 0x1f, 0x3c, 0xad, 0x6d, 0x55, 0x88, 0x89, 0x18, 0x33, 0x12, 0x16, 0x58, + 0xb4, 0x42, 0x38, 0x02, 0x0b, 0x5f, 0xec, 0x81, 0x1a, 0x89, 0xab, 0x99, + 0x06, 0x59, 0x80, 0x71, 0xc4, 0x80, 0x19, 0x91, 0x0f, 0x20, 0x23, 0x98, + 0x66, 0x69, 0x5b, 0x5a, 0xf7, 0x92, 0x10, 0xd7, 0xa9, 0x65, 0x57, 0x1a, + 0x81, 0xf6, 0x87, 0x88, 0xb1, 0xb8, 0x67, 0xd9, 0x3e, 0xcd, 0x3a, 0xcd, + 0x54, 0xe5, 0x57, 0x3f, 0xf4, 0x79, 0x22, 0x27, 0x8c, 0x46, 0xc2, 0x3d, + 0x58, 0xc8, 0x8a, 0x58, 0x2b, 0x99, 0x19, 0x77, 0x7d, 0xd7, 0xe4, 0x75, + 0x1b, 0x63, 0xbd, 0xa0, 0x17, 0x53, 0x44, 0xa5, 0x4d, 0xa3, 0x00, 0x83, + 0xcf, 0x8b, 0x7a, 0x4e, 0x06, 0x9d, 0x77, 0x2b, 0x14, 0xee, 0x78, 0xc6, + 0xd7, 0xd1, 0xc1, 0x53, 0x92, 0x7e, 0x04, 0xdf, 0x4b, 0xfa, 0xff, 0xa7, + 0x96, 0x77, 0x4f, 0x9a, 0xcf, 0x67, 0x8f, 0x03, 0x6f, 0x14, 0x88, 0x1a, + 0x4b, 0x48, 0x55, 0x4c, 0xe4, 0x2a, 0x10, 0x27}, + // cipherTextDigest + {0xe3, 0x65, 0xb7, 0xd6, 0x0a, 0x14, 0x14, 0xe5, 0x9a, 0xdd, 0x1a, + 0xb7, 0x48, 0xb6, 0xa4, 0xfd, 0xa3, 0x4b, 0xe6, 0x23, 0xa2, 0x97, + 0x7d, 0xd1, 0xaa, 0x7d, 0x7b, 0xe9, 0x94, 0x47, 0x57, 0xf8}, + // secret + {0xa0, 0x73, 0xff, 0x56, 0xb6, 0xd5, 0x99, 0x0b, 0xd2, 0x2a, 0xf1, + 0x55, 0xad, 0x70, 0xaa, 0xad, 0x73, 0x5b, 0x35, 0x42, 0x8e, 0xa9, + 0x83, 0x98, 0x1b, 0x6b, 0x21, 0xe3, 0x3d, 0x2e, 0x51, 0xb4}, + true}, + // tcID: 62 + {62, + params_ml_kem1024_test_mode, + // entropy + {0x35, 0x7a, 0xff, 0xb4, 0xfb, 0x7d, 0xdd, 0x3d, 0xe4, 0x05, 0x37, + 0x6b, 0x21, 0x49, 0xcc, 0x7e, 0xfc, 0x96, 0xd5, 0x89, 0xa0, 0xc3, + 0xfa, 0x6b, 0x31, 0x68, 0xa4, 0x7c, 0x3c, 0x89, 0xbb, 0xae}, + // publicKey + {0x6b, 0xe6, 0x6b, 0x6d, 0x77, 0xb1, 0x08, 0x07, 0x05, 0x0c, 0xd1, 0x21, + 0x61, 0x80, 0x21, 0x65, 0xd8, 0x97, 0x0f, 0xac, 0x5d, 0x9f, 0x5c, 0xa5, + 0xdf, 0x29, 0x18, 0x5b, 0xb4, 0xbc, 0x1e, 0xdb, 0x12, 0x8e, 0xc1, 0xbb, + 0x35, 0x4a, 0x6a, 0xb7, 0x12, 0xaa, 0x63, 0xd6, 0x9f, 0xac, 0x3a, 0xae, + 0x20, 0xa1, 0x8a, 0x2c, 0x97, 0x4c, 0x06, 0xd8, 0x4a, 0x5d, 0x8b, 0xc5, + 0x83, 0xc9, 0x86, 0x76, 0x4c, 0xcd, 0xfb, 0x60, 0x09, 0xea, 0xc3, 0x6b, + 0x89, 0x0b, 0x9d, 0x68, 0xfc, 0x45, 0x9a, 0x47, 0xa4, 0x65, 0x9b, 0x23, + 0x32, 0x05, 0xcb, 0xa6, 0x7a, 0x35, 0x28, 0x7c, 0x35, 0xe1, 0x20, 0x1b, + 0xfd, 0xca, 0x07, 0xea, 0xc1, 0x03, 0xdc, 0x95, 0x2c, 0x4c, 0x84, 0x95, + 0x73, 0xb6, 0x99, 0xd2, 0xfa, 0x6d, 0x6b, 0x69, 0x8a, 0x30, 0x85, 0x64, + 0xfb, 0xdc, 0x40, 0x83, 0xbb, 0x66, 0x1a, 0xe2, 0x83, 0xa2, 0xa4, 0x52, + 0x2a, 0xd0, 0xa3, 0xce, 0xa3, 0xa8, 0xb0, 0x68, 0x27, 0x10, 0xca, 0x8a, + 0x24, 0x57, 0x4d, 0xba, 0x91, 0x56, 0x0a, 0x55, 0x73, 0x5a, 0x37, 0x24, + 0xf9, 0x8b, 0xba, 0x6a, 0x16, 0x2e, 0xff, 0xa2, 0x10, 0x59, 0x41, 0x8a, + 0x53, 0xcc, 0x6e, 0xbe, 0xc6, 0x7d, 0xaf, 0x14, 0x25, 0x5f, 0x8b, 0x6d, + 0x13, 0xaa, 0x12, 0xb2, 0x94, 0x88, 0x71, 0x57, 0x29, 0xda, 0x1c, 0xca, + 0x3b, 0xea, 0x65, 0xea, 0xd4, 0x29, 0x17, 0x87, 0xa4, 0x3d, 0xcb, 0xa2, + 0xf4, 0x3c, 0x67, 0x0a, 0x8a, 0x3f, 0x2f, 0x8c, 0x78, 0x97, 0x94, 0x3f, + 0xb2, 0x62, 0xa3, 0xfc, 0xa1, 0x3b, 0x6d, 0x59, 0xbc, 0x55, 0x8a, 0x16, + 0x85, 0x42, 0x55, 0xbb, 0xec, 0x68, 0x70, 0xdc, 0x40, 0x2c, 0x79, 0x03, + 0xc7, 0x03, 0x76, 0x40, 0x67, 0x7c, 0xbc, 0x14, 0x61, 0x64, 0xe2, 0x8f, + 0xe8, 0x45, 0x0f, 0x55, 0x6b, 0x12, 0xcb, 0x10, 0x78, 0x3a, 0xd7, 0x19, + 0x4d, 0xd2, 0x1d, 0x2c, 0x94, 0xb4, 0x4c, 0x69, 0x5b, 0x62, 0xa8, 0x39, + 0x8c, 0x81, 0xb2, 0x55, 0x28, 0x32, 0x3c, 0xf1, 0x7a, 0x22, 0xa5, 0x45, + 0x5f, 0x45, 0x04, 0x8b, 0x07, 0x6e, 0x4c, 0xec, 0xa8, 0x5c, 0x61, 0xbc, + 0x34, 0x09, 0x91, 0x2b, 0x28, 0x8e, 0x30, 0xb3, 0x58, 0xe4, 0xc9, 0x05, + 0xeb, 0x84, 0x0e, 0x5d, 0x56, 0x5a, 0x03, 0x19, 0xa9, 0x03, 0x03, 0x73, + 0x22, 0xd7, 0x22, 0x7e, 0x63, 0x1c, 0xdd, 0x87, 0x2b, 0xf3, 0x04, 0x62, + 0x99, 0x3c, 0xca, 0x57, 0x7b, 0x83, 0x9b, 0xe2, 0x54, 0xd3, 0x79, 0x00, + 0xf9, 0xfa, 0x2b, 0x1b, 0x24, 0x70, 0x14, 0x6a, 0x2f, 0x38, 0xcb, 0xc3, + 0xbf, 0xa4, 0x1a, 0xe6, 0xd8, 0xca, 0xda, 0xd1, 0xc0, 0x9b, 0x02, 0x42, + 0x75, 0x38, 0xb2, 0x11, 0x77, 0x8a, 0xe2, 0x30, 0x3b, 0x4c, 0x40, 0x1d, + 0xb7, 0x71, 0x84, 0xee, 0x85, 0x61, 0x5a, 0x76, 0x48, 0xa3, 0x56, 0x4c, + 0xec, 0x91, 0x6a, 0x02, 0x80, 0x57, 0xcc, 0xb2, 0x83, 0x9d, 0xa6, 0x29, + 0x04, 0x9c, 0x43, 0xc0, 0x5b, 0x34, 0x66, 0x9c, 0x33, 0xfe, 0xec, 0x77, + 0xf9, 0xa8, 0x56, 0x08, 0x3a, 0x1d, 0xc0, 0xf8, 0x43, 0x3f, 0x6b, 0x95, + 0x18, 0x82, 0x3c, 0x46, 0x40, 0x39, 0x6a, 0x97, 0xae, 0x9a, 0xe5, 0xaf, + 0x5b, 0x25, 0x53, 0xb1, 0x86, 0x6c, 0x7e, 0x05, 0xbc, 0xf6, 0x79, 0x54, + 0x85, 0xa0, 0x5c, 0x4d, 0x0c, 0x12, 0x5a, 0x32, 0xc2, 0x50, 0x00, 0x96, + 0x3d, 0xb8, 0x0c, 0x55, 0x7b, 0x4b, 0xdb, 0xeb, 0x06, 0x51, 0xb4, 0x1f, + 0x34, 0x98, 0xa8, 0xb5, 0x88, 0x38, 0x4f, 0x4b, 0x31, 0xc8, 0xc6, 0x19, + 0x51, 0x7b, 0x8a, 0x07, 0x53, 0xc4, 0x1d, 0x42, 0xc9, 0x2e, 0x38, 0x47, + 0x55, 0xeb, 0x2b, 0xd3, 0x3c, 0x25, 0x1a, 0x76, 0x7e, 0x1c, 0x95, 0x5f, + 0x33, 0x57, 0x4e, 0xc5, 0x90, 0xc4, 0x77, 0x0b, 0x00, 0xe5, 0xb5, 0x10, + 0x3c, 0x63, 0x33, 0x77, 0x13, 0x5a, 0xcc, 0x47, 0x2c, 0xfb, 0xe2, 0x76, + 0x44, 0xe7, 0x30, 0xac, 0x9b, 0x2b, 0x63, 0x16, 0x4b, 0x75, 0xdb, 0x0d, + 0x3b, 0x25, 0x30, 0x3f, 0x6a, 0xb5, 0x90, 0x07, 0xc6, 0x6f, 0x33, 0x9a, + 0x93, 0x14, 0xcf, 0xc2, 0x07, 0xac, 0xbc, 0x82, 0x23, 0xbb, 0x11, 0x24, + 0x2a, 0xd3, 0x4f, 0x59, 0x00, 0xb6, 0x66, 0xb0, 0x80, 0x0e, 0xf8, 0xcc, + 0xf9, 0x07, 0x6a, 0x75, 0x93, 0x0b, 0xad, 0xa3, 0x94, 0xef, 0x6a, 0x28, + 0x27, 0x0c, 0xb9, 0x3f, 0xda, 0x3f, 0xc5, 0x02, 0x90, 0x45, 0x98, 0x0c, + 0xbb, 0x35, 0x1b, 0xde, 0x29, 0x39, 0x2c, 0xd3, 0x4c, 0x0f, 0x93, 0x3e, + 0x24, 0xec, 0x08, 0xeb, 0x8c, 0x13, 0x4f, 0x98, 0x09, 0xfe, 0x85, 0x5f, + 0x84, 0x08, 0x79, 0xd0, 0xa4, 0x42, 0xf7, 0x23, 0x5c, 0x4b, 0xa2, 0x84, + 0x2c, 0x2b, 0xc5, 0xdb, 0xb7, 0x6b, 0x1e, 0x10, 0x83, 0xfa, 0xba, 0x31, + 0x17, 0xf4, 0x0d, 0x08, 0x1c, 0x31, 0xf4, 0xe9, 0xc1, 0x59, 0x85, 0xa9, + 0x9d, 0x2b, 0xb5, 0xa7, 0x80, 0x0d, 0x7e, 0xb6, 0xaa, 0x44, 0xea, 0x52, + 0x8e, 0xc6, 0x83, 0x82, 0xd9, 0x73, 0x55, 0x05, 0x22, 0x2d, 0x93, 0x5f, + 0x22, 0x1a, 0xaa, 0x39, 0xdb, 0x28, 0x9a, 0x33, 0x1f, 0xae, 0xa9, 0x34, + 0xc3, 0x53, 0xcb, 0xff, 0x6c, 0x0e, 0x89, 0x01, 0x16, 0xde, 0xd2, 0x77, + 0x44, 0x41, 0x21, 0xae, 0xb9, 0x12, 0x8b, 0x1b, 0x56, 0x94, 0x3a, 0xad, + 0x1c, 0x1a, 0xb3, 0x2c, 0xfc, 0xa0, 0x0e, 0x30, 0x75, 0x73, 0x17, 0x11, + 0xce, 0x1b, 0x70, 0x3b, 0x86, 0x61, 0x2e, 0x3a, 0x25, 0x90, 0x75, 0x68, + 0x95, 0xf1, 0x0c, 0xfe, 0x45, 0x10, 0x78, 0xa5, 0x8b, 0x92, 0x40, 0x7a, + 0x4c, 0xf2, 0x33, 0x25, 0x35, 0x6f, 0x6e, 0x34, 0x39, 0x01, 0x1b, 0x3f, + 0xdf, 0xe6, 0xb6, 0x2d, 0x93, 0xa3, 0x91, 0x32, 0x28, 0x96, 0x24, 0xa5, + 0x82, 0xfb, 0xce, 0x26, 0xe9, 0x7f, 0xf3, 0x5a, 0x9d, 0x37, 0x70, 0x3c, + 0x7f, 0x48, 0x45, 0xe5, 0xa0, 0xcc, 0xcc, 0xd3, 0x66, 0x16, 0xe7, 0x2a, + 0x89, 0xb6, 0x5e, 0x3e, 0x21, 0x7c, 0xd6, 0xec, 0x34, 0x06, 0x99, 0x34, + 0x5e, 0xa7, 0xb6, 0x44, 0xc2, 0x2c, 0xc8, 0x4b, 0x0e, 0xe1, 0x6c, 0xb2, + 0x85, 0xe9, 0x85, 0x21, 0x75, 0xa0, 0xf7, 0x72, 0x51, 0x9a, 0xd1, 0x03, + 0xa4, 0x0a, 0xc6, 0x36, 0xf0, 0x3b, 0x65, 0x56, 0xc4, 0xa6, 0x7c, 0xcc, + 0xe4, 0xb1, 0xcd, 0x7f, 0x98, 0xc7, 0x20, 0xc2, 0x81, 0xa4, 0x11, 0xb5, + 0xc5, 0x2c, 0x7c, 0x15, 0xc2, 0x30, 0x14, 0x65, 0x3d, 0xf4, 0x87, 0xa6, + 0x18, 0x87, 0x09, 0x83, 0x81, 0x58, 0xd8, 0xf6, 0x10, 0x7d, 0xc5, 0xae, + 0x86, 0xb1, 0x16, 0x34, 0x75, 0xb1, 0x08, 0xba, 0x29, 0xd8, 0xc5, 0x45, + 0xbd, 0xd2, 0x5f, 0xf3, 0x49, 0x0a, 0x36, 0xb7, 0xce, 0x37, 0x41, 0x84, + 0xed, 0xe2, 0xc4, 0x7d, 0x02, 0x87, 0x3d, 0xec, 0x94, 0xbc, 0x81, 0x30, + 0x03, 0xfb, 0xb1, 0xfd, 0x01, 0x30, 0x67, 0xec, 0x94, 0x9b, 0x26, 0x16, + 0x19, 0xc5, 0x23, 0xbb, 0xcc, 0xbd, 0x11, 0x17, 0x13, 0x63, 0xd3, 0x39, + 0x90, 0xdc, 0x9e, 0x0f, 0x0b, 0xa3, 0x2a, 0x37, 0x5c, 0x6d, 0xe1, 0xb5, + 0x2e, 0xd9, 0x8e, 0x7c, 0x09, 0xbb, 0xe5, 0x74, 0x17, 0x73, 0x39, 0xbb, + 0x37, 0x75, 0x96, 0xf8, 0x51, 0x79, 0xf6, 0xfa, 0x01, 0x11, 0xf3, 0x11, + 0x2c, 0xe1, 0xb1, 0xec, 0x60, 0x3e, 0x28, 0xa7, 0x22, 0x8d, 0xd9, 0x53, + 0xb6, 0xb3, 0xc6, 0x06, 0x33, 0x52, 0x15, 0x4b, 0x33, 0x77, 0xc4, 0x5b, + 0xe2, 0x34, 0x23, 0x8e, 0xaa, 0x06, 0x6b, 0x62, 0x8f, 0x1c, 0x10, 0x84, + 0x63, 0xe9, 0x38, 0xd8, 0x9a, 0x3e, 0xe5, 0xb0, 0x10, 0xfd, 0x98, 0x0e, + 0x80, 0xf2, 0xbe, 0x45, 0xe9, 0x99, 0xf7, 0x62, 0x53, 0x61, 0x80, 0x9b, + 0x80, 0x57, 0xc6, 0x35, 0x63, 0x74, 0x5f, 0xe7, 0xba, 0x11, 0x2c, 0x30, + 0x7b, 0x55, 0x8d, 0x43, 0xc9, 0x8c, 0x2d, 0x35, 0x86, 0x2c, 0x86, 0x6d, + 0xa3, 0xe8, 0x88, 0x18, 0x03, 0x89, 0x20, 0x38, 0xbf, 0xd6, 0xa2, 0xc5, + 0xe2, 0x93, 0x6f, 0x15, 0x32, 0xb6, 0xd8, 0xc2, 0x6e, 0xfa, 0x08, 0x78, + 0xc4, 0xb2, 0x84, 0x90, 0x45, 0x13, 0x12, 0x73, 0xaf, 0x04, 0x94, 0xb5, + 0x56, 0x12, 0x60, 0xac, 0x59, 0x83, 0xfa, 0x27, 0x4b, 0xb5, 0x90, 0x57, + 0x30, 0x28, 0xa4, 0x77, 0x91, 0x23, 0xed, 0xc6, 0xaf, 0x44, 0x30, 0x5e, + 0x04, 0x1a, 0x76, 0xf3, 0x57, 0x49, 0xa6, 0x6a, 0x84, 0x71, 0x76, 0x2d, + 0x6c, 0x10, 0x4b, 0x5d, 0x25, 0x44, 0xfd, 0x20, 0xa1, 0xd2, 0x85, 0x00, + 0x28, 0x0a, 0x85, 0x49, 0xa5, 0xc3, 0xaa, 0xb9, 0xa2, 0x21, 0xc5, 0x17, + 0x75, 0x01, 0x9e, 0x40, 0x84, 0x93, 0x3b, 0x91, 0xa5, 0xa1, 0x67, 0x72, + 0x1c, 0x23, 0x66, 0xf4, 0x32, 0x4b, 0x66, 0x0a, 0x27, 0x75, 0xf8, 0x60, + 0xc1, 0x72, 0x77, 0x78, 0x46, 0x77, 0x94, 0xe6, 0x21, 0x1a, 0x64, 0x14, + 0xa4, 0x67, 0x69, 0xe7, 0xba, 0x82, 0xf1, 0xb1, 0x7c, 0x9a, 0xc8, 0x23, + 0xc2, 0x0a, 0x24, 0x0c, 0xc8, 0x8f, 0x8f, 0xf2, 0x8d, 0x67, 0xb2, 0x61, + 0xb0, 0x09, 0x19, 0xcd, 0x3b, 0x90, 0xbd, 0xab, 0x50, 0x91, 0x04, 0x2d, + 0x4d, 0x23, 0x2a, 0xa0, 0x98, 0x59, 0xe0, 0x1a, 0x56, 0x37, 0xea, 0x03, + 0x71, 0x34, 0x18, 0xd0, 0x21, 0x17, 0xb8, 0xba, 0x08, 0x0b, 0xaa, 0x5c, + 0x1b, 0x84, 0x1a, 0x82, 0xa6, 0x38, 0x42, 0x99, 0xab, 0xea, 0x33, 0x14, + 0xcd, 0x54, 0x65, 0x42, 0x44, 0x4b, 0x8c, 0xc2, 0x34, 0xcc, 0x83, 0xbe, + 0x94, 0x47, 0xa7, 0x62, 0xb2, 0x03, 0x90, 0xd2, 0x66, 0x87, 0xf8, 0x64, + 0xf2, 0xb5, 0x69, 0xa2, 0xd6, 0x54, 0xb7, 0xa4, 0x25, 0xde, 0x79, 0x32, + 0x55, 0x36, 0x5d, 0x51, 0xa2, 0xce, 0x42, 0x5c, 0x7f, 0x43, 0x3a, 0x29, + 0xf3, 0x27, 0x32, 0xf1, 0x79, 0x07, 0x47, 0x53, 0x2c, 0xcb, 0x7b, 0x6c, + 0x5d, 0x0a, 0x0f, 0xd1, 0x34, 0xb0, 0xbb, 0xd5, 0x85, 0x28, 0xb2, 0x29, + 0x49, 0x55, 0x81, 0x28, 0x5a, 0x7a, 0x6a, 0x24, 0xa9, 0xcb, 0xe5, 0x45, + 0x3f, 0x79, 0x81, 0x44, 0x73, 0x01, 0x00, 0x10, 0x24, 0xd5, 0x99, 0x14, + 0xf3, 0x1b, 0xb6, 0xc9, 0x6b, 0x4e, 0x6b, 0x23, 0x83, 0x02, 0x37, 0xcf, + 0x3d, 0x4c, 0xc6, 0x13, 0xd0, 0xa7, 0xd3, 0xdc, 0x8c, 0x43, 0xe2, 0x10, + 0xdd, 0xab, 0x58, 0xd1, 0xa7, 0x8f, 0xcb, 0x0c, 0xa0, 0x24, 0xd6, 0x47, + 0x80, 0x70, 0x9a, 0x52, 0xbb, 0x6c, 0x0d, 0x61, 0x39, 0xeb, 0xf5, 0x0e, + 0x9a, 0xc3, 0x93, 0xe9, 0xe1, 0xb9, 0x1f, 0xe5, 0xa7, 0x12, 0x52, 0x09, + 0x34, 0x91, 0x3b, 0x44, 0x9b, 0x01, 0x30, 0x33, 0x3f, 0x0b, 0x6c, 0x6f, + 0x78, 0x62, 0x30, 0xde, 0x38, 0x4a, 0xaa, 0x61, 0x4d, 0xba, 0x2b, 0x6a, + 0xb4, 0xf8, 0x4f, 0x1c, 0x49, 0xbd, 0xce, 0xbc, 0x08, 0xcf, 0xd7, 0x38, + 0xf8, 0xe1, 0x37, 0xed, 0x98, 0xa8, 0x7a, 0x26, 0x16, 0xf7, 0xf6, 0x23, + 0xcb, 0xd8, 0xc7, 0xc3, 0xe7, 0xab, 0x4b, 0x64, 0x28, 0x30, 0x2b, 0x01, + 0x33, 0xc1, 0x80, 0x97, 0x60, 0x1d, 0x98, 0xf1, 0x23, 0x86, 0x24, 0x73, + 0xbf, 0x26, 0x7e, 0x5f, 0x4a, 0x72, 0x1d, 0x00, 0x72, 0x72, 0x49, 0xad, + 0x49, 0x7a, 0x70, 0x19, 0x82, 0x87, 0xfb, 0xa8, 0x14, 0xb0, 0xa2, 0x40, + 0xa1, 0x9c, 0x36, 0x53, 0xb2, 0x1e, 0x4b, 0x80, 0x6e, 0xc5, 0xea, 0xa5, + 0x76, 0x66, 0x60, 0xc5, 0xff, 0xbf, 0xb0, 0x0d, 0x90, 0x5d, 0xd4, 0x5d, + 0xea, 0x3a, 0x2b, 0xd6, 0x0b, 0x1c, 0x39, 0x19}, + // cipherTextDigest + {0x40, 0x34, 0xf8, 0x1b, 0x7d, 0x3a, 0xad, 0xde, 0x82, 0xb9, 0x2e, + 0x04, 0xfb, 0x01, 0xcd, 0xef, 0x7f, 0x95, 0xa2, 0x6a, 0xb6, 0x0f, + 0xbc, 0xe9, 0xb3, 0xd8, 0x85, 0x30, 0xd6, 0xd8, 0x8d, 0xab}, + // secret + {0x20, 0x54, 0x0b, 0xd5, 0x9f, 0x59, 0x6e, 0x7b, 0x8e, 0x7e, 0xf1, + 0x07, 0x2c, 0x95, 0x29, 0x35, 0x2f, 0x53, 0x46, 0x19, 0xdd, 0xa8, + 0xf4, 0x9e, 0xe4, 0x2e, 0xf1, 0xf2, 0xce, 0xe2, 0x08, 0x5d}, + true}, + // tcID: 63 + {63, + params_ml_kem1024_test_mode, + // entropy + {0x22, 0x41, 0x95, 0x79, 0x2d, 0x33, 0x6e, 0x8b, 0xc9, 0xc7, 0x48, + 0x0b, 0x84, 0x28, 0xf7, 0xf9, 0x8c, 0xad, 0xff, 0x65, 0xa5, 0xe3, + 0x3d, 0xaa, 0x71, 0xd6, 0xeb, 0x41, 0xde, 0xc6, 0x23, 0xbf}, + // publicKey + {0x8f, 0x09, 0x8c, 0x33, 0xc7, 0x6f, 0xd7, 0xe7, 0xab, 0xe3, 0x51, 0xb7, + 0xba, 0x7a, 0x41, 0x25, 0xb2, 0x01, 0x56, 0xb4, 0xba, 0xdc, 0xe6, 0x51, + 0xc7, 0x44, 0x48, 0x57, 0xa9, 0x45, 0xa0, 0x32, 0x37, 0xbc, 0xdb, 0x05, + 0xae, 0xb3, 0x56, 0x66, 0xdb, 0x1c, 0xb6, 0x04, 0xc2, 0x17, 0xe6, 0x86, + 0x2a, 0x40, 0x41, 0xff, 0x78, 0x29, 0xc0, 0x10, 0xb4, 0x00, 0x94, 0x3d, + 0x9b, 0x34, 0xbc, 0x0c, 0x94, 0x49, 0x8a, 0x78, 0xc5, 0xe1, 0x34, 0x36, + 0x42, 0x81, 0xc9, 0x92, 0xf8, 0x38, 0x9a, 0x2c, 0x3e, 0x48, 0x49, 0xa4, + 0x0a, 0x17, 0xcf, 0x94, 0x7c, 0x4c, 0x6b, 0x0a, 0x55, 0xa2, 0xd7, 0x3a, + 0x32, 0x30, 0x09, 0x36, 0x3b, 0x28, 0x77, 0x58, 0x10, 0x7f, 0xc7, 0x64, + 0x8f, 0xf9, 0xad, 0xbb, 0xf5, 0xcc, 0x33, 0x15, 0xc8, 0xc0, 0xd2, 0x78, + 0xf0, 0x00, 0xa8, 0xb1, 0xc5, 0x77, 0xf3, 0x9b, 0xce, 0x8e, 0x92, 0x21, + 0x0e, 0x98, 0x65, 0xbd, 0x43, 0x42, 0x3b, 0xe0, 0xa8, 0x30, 0x28, 0x1e, + 0xaf, 0xb2, 0xc8, 0xd0, 0x51, 0xbb, 0xd9, 0xea, 0x5f, 0x61, 0x1a, 0xc0, + 0x9e, 0x20, 0x55, 0x02, 0x96, 0x1c, 0xa6, 0xfc, 0xa4, 0x34, 0x19, 0x70, + 0x0a, 0x19, 0x21, 0x21, 0x89, 0x70, 0xc6, 0x8a, 0x89, 0x56, 0xe3, 0x62, + 0x6a, 0x45, 0xb4, 0xc1, 0x0a, 0x5a, 0xa9, 0x59, 0x87, 0x61, 0x38, 0x2f, + 0x94, 0x77, 0xc4, 0xee, 0x62, 0xc3, 0x7b, 0x69, 0x11, 0xf7, 0x65, 0x9d, + 0x1a, 0xdb, 0xa5, 0x90, 0xb9, 0x18, 0x8b, 0xeb, 0xca, 0x3b, 0x2c, 0x14, + 0xeb, 0x16, 0x3e, 0x49, 0x90, 0x17, 0xdf, 0xfa, 0x90, 0xde, 0x66, 0x31, + 0x32, 0x23, 0x0a, 0x01, 0x1b, 0x2f, 0x9c, 0x1a, 0x2d, 0x51, 0x58, 0x1f, + 0xa2, 0x25, 0x5f, 0x87, 0xc5, 0xa9, 0x28, 0x08, 0x23, 0x32, 0xdc, 0x84, + 0xf1, 0x7a, 0x19, 0xc2, 0x08, 0x33, 0xc2, 0x84, 0xb1, 0x1c, 0xdb, 0x61, + 0xf9, 0xdb, 0x3b, 0x6a, 0x68, 0x3b, 0x7a, 0xc2, 0x01, 0x4a, 0x58, 0x47, + 0x43, 0x5c, 0x92, 0xe7, 0xfc, 0x47, 0xa5, 0x1c, 0x13, 0xe1, 0x32, 0x25, + 0x46, 0x71, 0x8f, 0x02, 0xf0, 0x26, 0xf0, 0x88, 0x61, 0x2b, 0xdb, 0xb0, + 0x8e, 0x52, 0x18, 0xb9, 0x19, 0x63, 0x40, 0x81, 0x7a, 0x1f, 0x60, 0xc9, + 0xba, 0x47, 0x55, 0x27, 0x2a, 0xbe, 0x64, 0x90, 0x70, 0x60, 0xf3, 0x2d, + 0xd3, 0xb2, 0x38, 0x19, 0xdc, 0xc7, 0x6a, 0xa4, 0x70, 0xf7, 0x49, 0x03, + 0x89, 0x97, 0x07, 0x71, 0x65, 0x7d, 0x0e, 0x9b, 0x30, 0x5f, 0xec, 0xcd, + 0x2d, 0x79, 0x71, 0x5e, 0x29, 0x35, 0xd3, 0x72, 0x7d, 0x1b, 0x4c, 0xba, + 0xf9, 0x06, 0x02, 0x46, 0xc3, 0x0b, 0x52, 0x20, 0x57, 0x79, 0x00, 0x2a, + 0x16, 0xbb, 0xc8, 0x3f, 0x79, 0xc3, 0x1c, 0xf7, 0x3d, 0xa0, 0xf5, 0x32, + 0x00, 0x45, 0x4d, 0x48, 0x83, 0x04, 0x09, 0x77, 0x2e, 0x0e, 0x97, 0x7a, + 0xb7, 0xe4, 0xb6, 0xd4, 0x90, 0x5e, 0x87, 0x25, 0x88, 0xe6, 0x70, 0x9f, + 0x04, 0xd8, 0x3d, 0xae, 0x42, 0x3f, 0x2b, 0xb2, 0x5d, 0xcb, 0x83, 0x09, + 0x1e, 0x74, 0x27, 0x51, 0x50, 0x7e, 0xce, 0x0c, 0x23, 0x15, 0xc0, 0x4b, + 0xca, 0x23, 0x4d, 0xed, 0x4a, 0x79, 0x0a, 0xe6, 0x84, 0x29, 0xe6, 0x4a, + 0x91, 0x83, 0x99, 0xce, 0x7a, 0x3c, 0x30, 0x5b, 0x81, 0x20, 0x65, 0x28, + 0xb8, 0xab, 0x97, 0x6c, 0x33, 0x4f, 0xca, 0x02, 0x92, 0xc7, 0xbc, 0x0d, + 0x39, 0xe4, 0xae, 0xd9, 0x19, 0x6e, 0xc2, 0x9b, 0x71, 0xa0, 0x1b, 0x85, + 0x26, 0xf5, 0x4d, 0xb9, 0x25, 0x68, 0xa0, 0x40, 0x1e, 0x35, 0x29, 0x2b, + 0x06, 0xa3, 0xa6, 0xf2, 0x6b, 0xb4, 0x06, 0x06, 0x58, 0x47, 0x06, 0x72, + 0x43, 0xb1, 0x89, 0xe2, 0x17, 0x2b, 0xeb, 0xf5, 0xc1, 0x09, 0x19, 0xad, + 0xf6, 0x74, 0xa2, 0x37, 0x35, 0x07, 0x93, 0x60, 0xaf, 0x81, 0xc4, 0x05, + 0xcf, 0x9a, 0x24, 0x50, 0xe2, 0x6d, 0x23, 0x53, 0x77, 0x46, 0x57, 0x54, + 0xf3, 0x91, 0x9e, 0x88, 0x21, 0x7b, 0x3b, 0xb1, 0x28, 0xbd, 0x86, 0x33, + 0x21, 0x6b, 0x48, 0xb1, 0x67, 0x78, 0x33, 0xb0, 0x2f, 0x5f, 0x4a, 0x4b, + 0x6d, 0x08, 0x59, 0x12, 0x03, 0x93, 0x72, 0x2c, 0x3c, 0xe2, 0x46, 0xc5, + 0x50, 0xf1, 0x00, 0x6c, 0x1a, 0x4c, 0x9d, 0x41, 0x00, 0x0d, 0xb9, 0xb1, + 0xea, 0x62, 0x48, 0x4a, 0x08, 0x13, 0x9e, 0xa5, 0x4a, 0x5a, 0x08, 0xb7, + 0x02, 0x33, 0x05, 0x10, 0x09, 0x22, 0x19, 0x6c, 0xb6, 0xab, 0x54, 0xa6, + 0x1e, 0xb1, 0x08, 0x73, 0x27, 0x53, 0x83, 0x4c, 0xa3, 0x15, 0xb7, 0x7c, + 0x3a, 0x74, 0x1d, 0x8f, 0xa8, 0x6e, 0xa9, 0xec, 0x69, 0x65, 0x13, 0xbd, + 0x38, 0xdc, 0x25, 0xff, 0xf9, 0x8e, 0xbd, 0xb2, 0x96, 0x31, 0x71, 0x33, + 0x40, 0x19, 0x15, 0xd1, 0x09, 0xbb, 0x1e, 0x9b, 0x68, 0x6c, 0x30, 0x26, + 0x61, 0xc6, 0xcf, 0xc4, 0x37, 0x4b, 0x55, 0x42, 0x8e, 0x98, 0xc2, 0x7a, + 0xb7, 0x44, 0x52, 0x1d, 0x77, 0x39, 0x2a, 0x54, 0x69, 0xfd, 0x59, 0x3d, + 0xe4, 0xd1, 0xc8, 0x15, 0x6a, 0xab, 0x74, 0xa1, 0x19, 0x7c, 0x9b, 0xcc, + 0x9b, 0x56, 0x6f, 0x86, 0x27, 0xb3, 0xdc, 0x49, 0x4c, 0xee, 0x51, 0x41, + 0xd8, 0xc6, 0x15, 0xe4, 0x3a, 0x51, 0xfc, 0x65, 0xbd, 0x2a, 0x2a, 0x7d, + 0x7d, 0x36, 0x9e, 0x5d, 0xc3, 0x9e, 0x22, 0x52, 0x25, 0xc9, 0x13, 0x50, + 0xac, 0x47, 0x1d, 0x97, 0xc8, 0x16, 0x1b, 0x25, 0xc0, 0xec, 0x9a, 0x48, + 0xa5, 0x07, 0x2d, 0xa7, 0x44, 0x2d, 0x23, 0x83, 0x19, 0xeb, 0x57, 0x02, + 0xba, 0xa6, 0x7a, 0xd0, 0x75, 0xcc, 0xb2, 0x21, 0x6d, 0xb4, 0xb4, 0x7d, + 0xdb, 0xe8, 0x48, 0x87, 0x24, 0x82, 0xd3, 0x65, 0x78, 0xe0, 0xf1, 0x46, + 0xf4, 0xfc, 0xcf, 0x76, 0xd6, 0x2b, 0x5d, 0xa2, 0xa7, 0xc2, 0x17, 0x0c, + 0xf4, 0xec, 0xbd, 0xb6, 0x76, 0xb2, 0x69, 0xdc, 0x33, 0x5d, 0xf5, 0x16, + 0x29, 0x03, 0x07, 0xb8, 0xc0, 0xa2, 0xef, 0xe3, 0x5b, 0x6d, 0x35, 0x09, + 0xa4, 0x12, 0x62, 0x46, 0xd9, 0xb1, 0x91, 0xd3, 0x8b, 0xfa, 0x0c, 0x38, + 0xa6, 0x18, 0x5c, 0x74, 0x70, 0x6b, 0x6b, 0xbc, 0x3b, 0x02, 0x95, 0x95, + 0xd3, 0xb2, 0xcc, 0x62, 0x11, 0x50, 0x87, 0x79, 0x23, 0x36, 0xfc, 0x2e, + 0x8e, 0x3b, 0xc8, 0xc8, 0x4b, 0x31, 0x8f, 0xc4, 0x46, 0x87, 0xd7, 0x96, + 0xcf, 0x18, 0xad, 0xaa, 0x51, 0x57, 0x1e, 0x99, 0x0c, 0x31, 0x6a, 0x9f, + 0x41, 0x50, 0x53, 0xd8, 0xc8, 0x6d, 0x05, 0x24, 0x35, 0x15, 0xf0, 0x37, + 0x2e, 0xd1, 0x60, 0x83, 0x2b, 0x71, 0x57, 0xc4, 0x92, 0x0b, 0x39, 0x09, + 0xdc, 0xa4, 0x80, 0x43, 0x85, 0x95, 0xfa, 0xe2, 0x32, 0x05, 0x84, 0x72, + 0x2d, 0x37, 0xb4, 0x52, 0x44, 0xcf, 0x11, 0x73, 0x3d, 0xd0, 0x25, 0x8d, + 0x59, 0x43, 0x4d, 0x0c, 0xe0, 0x82, 0x86, 0x3b, 0x10, 0xb8, 0x61, 0x3e, + 0x5b, 0x66, 0xad, 0x13, 0xac, 0x4c, 0x4b, 0x2b, 0xa8, 0x4e, 0xac, 0x06, + 0x8c, 0x97, 0x11, 0x16, 0xa2, 0x6e, 0x3e, 0x22, 0x0b, 0x41, 0x2c, 0x88, + 0xb8, 0x6c, 0x0d, 0xd7, 0x11, 0x2f, 0x2a, 0x53, 0xaf, 0x23, 0x49, 0xa1, + 0x0a, 0x96, 0xb4, 0x32, 0x14, 0xb4, 0xd5, 0xa3, 0x81, 0x43, 0x59, 0x7a, + 0x9c, 0x9a, 0x22, 0x89, 0xd0, 0xc4, 0x92, 0x73, 0x30, 0x9e, 0x57, 0xc8, + 0x05, 0x1a, 0xa4, 0x6c, 0x72, 0x14, 0x71, 0x0a, 0x70, 0x67, 0x49, 0x91, + 0x05, 0xab, 0xca, 0x0b, 0xa5, 0x32, 0xfd, 0xa0, 0xa2, 0x61, 0xe8, 0x71, + 0x34, 0x67, 0x82, 0x45, 0x7a, 0x4e, 0xd3, 0xf4, 0x6e, 0xbc, 0x79, 0xbc, + 0xfc, 0xe5, 0x47, 0xa6, 0xb7, 0x67, 0x45, 0x13, 0x3a, 0x7e, 0xb8, 0x74, + 0x4e, 0x67, 0x19, 0x92, 0xbb, 0x73, 0xa2, 0x81, 0xa7, 0x0d, 0x19, 0xcb, + 0x3d, 0x54, 0x54, 0x12, 0x2a, 0x72, 0xea, 0x4c, 0x0a, 0x08, 0x4a, 0x1a, + 0x5d, 0xa7, 0x5f, 0x84, 0x18, 0xc5, 0x5d, 0x92, 0xbf, 0x2f, 0x69, 0x7a, + 0x87, 0x9a, 0x55, 0x51, 0x05, 0xd0, 0x0a, 0xa7, 0x98, 0x7e, 0x30, 0xab, + 0x06, 0x55, 0xa5, 0x31, 0xf1, 0x9b, 0xd8, 0x66, 0xb0, 0xca, 0x81, 0x16, + 0xa5, 0x47, 0xa6, 0x71, 0x61, 0x77, 0x55, 0xbc, 0xae, 0x9f, 0x70, 0x5d, + 0x93, 0xf4, 0x3b, 0x0e, 0x71, 0x59, 0x66, 0x37, 0x39, 0x03, 0x80, 0xa2, + 0x1a, 0xc3, 0xa8, 0xfc, 0x10, 0x15, 0x21, 0x86, 0x85, 0xef, 0xaa, 0x6a, + 0xcd, 0xf7, 0x09, 0x23, 0x88, 0xb8, 0xd1, 0xb4, 0x7b, 0xa5, 0x75, 0x51, + 0xee, 0x78, 0x12, 0xb7, 0xbc, 0x93, 0xe2, 0x0a, 0x1c, 0x2f, 0xcc, 0x81, + 0xbf, 0x24, 0xcb, 0x2a, 0xfb, 0x74, 0xcf, 0x47, 0x84, 0xf0, 0x3a, 0x6b, + 0x9c, 0xe6, 0x07, 0xe1, 0x40, 0xc4, 0x95, 0xf0, 0x5c, 0xdd, 0xa9, 0xc3, + 0x9f, 0x74, 0x02, 0x9a, 0xaa, 0x42, 0x08, 0x4a, 0x30, 0x1a, 0x25, 0xc6, + 0x99, 0xa6, 0x31, 0xf7, 0x0b, 0x71, 0xb3, 0xa1, 0x0a, 0xdd, 0x2c, 0x5d, + 0xb4, 0x8b, 0x12, 0x18, 0x47, 0x8f, 0x82, 0xd9, 0x1c, 0x30, 0x31, 0x09, + 0xcd, 0xe9, 0x30, 0xc6, 0x40, 0x1c, 0xad, 0x24, 0x75, 0xbe, 0xb1, 0x20, + 0x0a, 0x04, 0x02, 0xfd, 0xd4, 0x0d, 0x02, 0x53, 0x13, 0x7c, 0x04, 0x9f, + 0x53, 0xf9, 0x90, 0xde, 0xc3, 0x68, 0xe2, 0x45, 0x73, 0xe9, 0x79, 0x49, + 0x7c, 0x75, 0x44, 0xe1, 0x22, 0x54, 0x27, 0x05, 0x3e, 0xff, 0xb6, 0x98, + 0xb3, 0xd2, 0x6d, 0xdb, 0x8c, 0xb3, 0xf5, 0xaa, 0x1f, 0x92, 0x6a, 0x91, + 0xc5, 0x71, 0xba, 0x58, 0x78, 0xc1, 0x1c, 0x71, 0xbb, 0xfb, 0x88, 0x3f, + 0xb8, 0x74, 0xba, 0xbc, 0xe1, 0xb8, 0x08, 0x21, 0x31, 0xf5, 0xd6, 0x8e, + 0x43, 0xab, 0x35, 0xb9, 0xea, 0x79, 0x40, 0xa8, 0xcd, 0xc8, 0x96, 0x0b, + 0x99, 0x86, 0xc2, 0x74, 0x17, 0x23, 0x6d, 0x8b, 0x6d, 0xff, 0x95, 0x2d, + 0xb0, 0x52, 0x99, 0x88, 0x98, 0x6b, 0xba, 0xd7, 0xa8, 0xa0, 0xa1, 0x56, + 0xd6, 0x84, 0x40, 0x53, 0x82, 0x88, 0x69, 0xc2, 0x12, 0x72, 0x19, 0x25, + 0x6d, 0xf2, 0x7f, 0x26, 0xa7, 0x4c, 0xf0, 0xe1, 0x54, 0x85, 0xf0, 0xb8, + 0xa6, 0xe6, 0x71, 0xd7, 0xd8, 0xcb, 0xa3, 0x77, 0xbc, 0x87, 0x53, 0x69, + 0x27, 0x25, 0x90, 0x3e, 0x47, 0x61, 0xd7, 0x0c, 0x22, 0xbb, 0x49, 0x16, + 0x33, 0xf3, 0x79, 0xa5, 0x05, 0xa3, 0x87, 0x7c, 0x18, 0xfb, 0x86, 0x04, + 0xff, 0xc6, 0x84, 0xd0, 0x03, 0xb8, 0x6e, 0x79, 0xc3, 0xf4, 0xd3, 0xba, + 0x2f, 0x11, 0x4e, 0x29, 0x67, 0x09, 0x28, 0x52, 0xc7, 0x50, 0x4b, 0x73, + 0xe1, 0xe9, 0x11, 0xd9, 0x3a, 0x26, 0xd1, 0xb8, 0x06, 0x3c, 0xb3, 0x86, + 0x2e, 0xd9, 0xbe, 0xe8, 0xdb, 0x97, 0x35, 0x97, 0x58, 0xb3, 0xf2, 0xc8, + 0x07, 0x42, 0xcc, 0x16, 0x95, 0x83, 0xf7, 0x80, 0xbd, 0xbf, 0x42, 0x4e, + 0xe1, 0x9b, 0x19, 0xa0, 0xe1, 0x88, 0xb2, 0x63, 0xc4, 0xab, 0x4b, 0x1c, + 0x5d, 0x23, 0x28, 0x12, 0x6a, 0x1b, 0x9e, 0x57, 0x35, 0xb0, 0x83, 0x66, + 0x7b, 0xa6, 0xa5, 0x84, 0x45, 0x23, 0x8b, 0x87, 0xa3, 0x77, 0xa4, 0x66, + 0x8c, 0xc2, 0x31, 0x05, 0x48, 0xae, 0xde, 0x7b, 0x52, 0x10, 0xe3, 0x29, + 0xaa, 0xfb, 0x63, 0xd0, 0xc0, 0x64, 0x4a, 0x51, 0x2a, 0x00, 0x89, 0x38, + 0x57, 0x70, 0x32, 0x6e, 0xcb, 0xa7, 0x46, 0x86, 0x5f, 0xa3, 0xa9, 0x84, + 0x00, 0xe1, 0x47, 0x8d, 0x0a, 0xf4, 0x30, 0x9d, 0xfc, 0xdb, 0x20, 0x0c, + 0xd4, 0x2c, 0x0f, 0x37, 0xd6, 0x39, 0x22, 0x3a, 0x1b, 0x91, 0x95, 0x2d, + 0x37, 0xdd, 0xf9, 0x3b, 0x37, 0xb6, 0xed, 0x8c}, + // cipherTextDigest + {0x11, 0xe1, 0x5d, 0xcd, 0xf0, 0x5d, 0x40, 0x30, 0x0b, 0x9f, 0x25, + 0xaa, 0xb0, 0x3e, 0x38, 0xb0, 0x82, 0xd2, 0xd3, 0xe2, 0x41, 0xa2, + 0x64, 0x97, 0x45, 0xe5, 0x88, 0x1d, 0x92, 0x78, 0xcb, 0x31}, + // secret + {0x80, 0xeb, 0x17, 0xf3, 0x66, 0x25, 0xc2, 0x2f, 0xd5, 0x52, 0x05, + 0x25, 0xfb, 0x23, 0x5e, 0x53, 0x20, 0x98, 0x2b, 0x1f, 0x83, 0x10, + 0x7e, 0x09, 0xf2, 0x15, 0x8a, 0xbe, 0x7b, 0xba, 0xd7, 0x0e}, + true}, + // tcID: 64 + {64, + params_ml_kem1024_test_mode, + // entropy + {0xd4, 0x25, 0x29, 0xa8, 0xbc, 0x0f, 0xbd, 0x97, 0x56, 0xed, 0x1e, + 0xb1, 0xd7, 0x86, 0x8b, 0x16, 0x98, 0x5c, 0xc6, 0xdc, 0xe0, 0x75, + 0xc3, 0x9e, 0xa8, 0x5c, 0x81, 0x72, 0x88, 0xde, 0xf2, 0x9b}, + // publicKey + {0x52, 0xb3, 0x40, 0xaf, 0x13, 0xc1, 0xd0, 0x15, 0xce, 0x9e, 0xc2, 0x4f, + 0x73, 0x08, 0xc3, 0xaa, 0xca, 0x0c, 0x9e, 0x28, 0x4f, 0xd0, 0xdb, 0x24, + 0x8b, 0xd9, 0x54, 0x36, 0x1b, 0x82, 0x30, 0x08, 0x08, 0x08, 0x33, 0x8d, + 0x3f, 0xe7, 0xcc, 0x85, 0x83, 0x10, 0xe9, 0xeb, 0x9d, 0xb7, 0x8a, 0x3d, + 0x08, 0x07, 0x44, 0x55, 0xd9, 0xce, 0x0e, 0xd9, 0x3c, 0x82, 0x74, 0x39, + 0xac, 0xc4, 0xbd, 0x47, 0x01, 0x62, 0xb5, 0x9c, 0x41, 0x61, 0x04, 0x6c, + 0x8a, 0x54, 0x70, 0x96, 0x10, 0x7e, 0xa6, 0x26, 0xb4, 0xb6, 0x60, 0xc7, + 0x1a, 0x41, 0x92, 0x2f, 0xb8, 0x66, 0xac, 0x23, 0x85, 0xe2, 0xe9, 0x4b, + 0xf7, 0x48, 0xab, 0x75, 0xb5, 0x82, 0x24, 0xe5, 0xad, 0xc2, 0xe3, 0x33, + 0x72, 0x01, 0x1e, 0xbd, 0xfc, 0x75, 0x9d, 0xda, 0xbf, 0x6a, 0xfb, 0x15, + 0xb1, 0x90, 0xa4, 0x76, 0xa1, 0xcb, 0xcb, 0x5c, 0x68, 0x09, 0xb5, 0xbe, + 0xdc, 0xd0, 0x92, 0xa8, 0xd5, 0x27, 0x80, 0xd6, 0x5e, 0x1c, 0xec, 0xc2, + 0x18, 0xc0, 0x2c, 0x17, 0x47, 0x68, 0xd9, 0xe8, 0x53, 0xa0, 0xe0, 0xbf, + 0x71, 0xa8, 0xc0, 0x07, 0x3a, 0x0a, 0x7e, 0xa2, 0x9c, 0x1d, 0x99, 0x45, + 0x06, 0xa8, 0xc3, 0x83, 0xa7, 0x03, 0x97, 0x32, 0x02, 0x6c, 0xa6, 0x41, + 0xf6, 0x68, 0x83, 0xe1, 0x36, 0x54, 0x86, 0xa6, 0x0f, 0x20, 0xf6, 0x08, + 0x8e, 0x34, 0x77, 0x55, 0x24, 0xa8, 0x18, 0x1c, 0x2e, 0xaa, 0x89, 0x35, + 0xd0, 0x6c, 0x7e, 0xaa, 0xc4, 0x8d, 0xda, 0x30, 0xc6, 0xb7, 0x63, 0xb2, + 0xa1, 0xcb, 0x0c, 0x56, 0x58, 0x3f, 0xc1, 0x55, 0xb2, 0xf9, 0x57, 0x1e, + 0xeb, 0x16, 0x46, 0xb7, 0xab, 0x54, 0xb6, 0xb0, 0x55, 0xa8, 0xaa, 0x16, + 0xea, 0xab, 0x0b, 0x38, 0xf7, 0x51, 0x8f, 0x71, 0x6f, 0x23, 0x6a, 0xbd, + 0x89, 0x84, 0xcf, 0xcc, 0x9a, 0xba, 0x38, 0xb2, 0x23, 0x8b, 0xb7, 0xc2, + 0x02, 0x50, 0x88, 0xa8, 0x33, 0x74, 0xc5, 0x05, 0x48, 0x50, 0x54, 0x43, + 0xcd, 0x73, 0x88, 0x3d, 0x85, 0xb9, 0x7d, 0xcb, 0x97, 0x14, 0xfa, 0x42, + 0x47, 0x70, 0x4d, 0xa3, 0x06, 0xb5, 0x24, 0xf6, 0x09, 0xd9, 0xc5, 0x8b, + 0x83, 0x84, 0x95, 0x1c, 0x64, 0x26, 0xa8, 0x32, 0x9b, 0x0f, 0x33, 0xc5, + 0xe5, 0x03, 0x14, 0x89, 0x02, 0x6b, 0x28, 0xe8, 0xa9, 0xe0, 0xf0, 0x25, + 0xea, 0x96, 0xcf, 0xe1, 0xa1, 0xbe, 0xf4, 0xd2, 0x02, 0xd8, 0xb6, 0x18, + 0x15, 0x82, 0x91, 0xc3, 0x42, 0x12, 0xa9, 0x3b, 0x36, 0xc7, 0xac, 0x2b, + 0x08, 0xc4, 0x9f, 0x36, 0xa9, 0x54, 0x7b, 0xd4, 0x3c, 0xc9, 0xf5, 0xb5, + 0x60, 0x95, 0x7b, 0x33, 0x09, 0x1c, 0xa2, 0x53, 0x1b, 0x14, 0x76, 0xc8, + 0x54, 0x90, 0x4b, 0x18, 0x58, 0x67, 0xca, 0xc1, 0xae, 0x2c, 0x47, 0x9c, + 0xef, 0x65, 0x78, 0x2b, 0xac, 0x5f, 0xd5, 0x46, 0x77, 0xa2, 0x43, 0x90, + 0xdc, 0xfa, 0x27, 0x82, 0xc2, 0xbe, 0x85, 0x6c, 0x2d, 0x0e, 0xa2, 0x20, + 0xaf, 0xec, 0x3a, 0xc5, 0x62, 0x39, 0xb8, 0x77, 0x8c, 0xb5, 0x5c, 0x15, + 0x43, 0xd0, 0x3a, 0x5e, 0x81, 0xcf, 0xa5, 0x35, 0xb7, 0x4c, 0x43, 0x8c, + 0x03, 0x79, 0x52, 0x90, 0x26, 0x03, 0x5b, 0x30, 0xb4, 0xde, 0x61, 0x13, + 0x16, 0xe2, 0xaa, 0x32, 0xf7, 0x23, 0xea, 0x20, 0x50, 0xd3, 0x0b, 0x6f, + 0xf9, 0x02, 0xb9, 0x4b, 0xf4, 0x8a, 0xc6, 0x80, 0x39, 0xc3, 0x3b, 0xac, + 0x0c, 0x76, 0xa3, 0x9c, 0xb9, 0xa8, 0x59, 0x26, 0x63, 0xf0, 0xd3, 0x94, + 0xfa, 0xf2, 0xbd, 0x74, 0xa2, 0x13, 0x3a, 0x35, 0x8c, 0x9d, 0xb8, 0x64, + 0x7a, 0x60, 0xab, 0x84, 0x2b, 0xcd, 0x94, 0xa1, 0xbc, 0x2e, 0xe4, 0x08, + 0x66, 0x2b, 0xb8, 0xa2, 0x97, 0xc2, 0x8d, 0x0c, 0x07, 0x7a, 0x27, 0x43, + 0x97, 0xcc, 0x54, 0xed, 0xc0, 0xbd, 0xff, 0x88, 0x7a, 0x1b, 0xc2, 0x9a, + 0x23, 0x7a, 0x61, 0xae, 0xd2, 0x0a, 0xdf, 0x15, 0xb5, 0xa9, 0x92, 0x23, + 0xaa, 0xd4, 0x45, 0xd0, 0x19, 0x43, 0xad, 0x90, 0x23, 0x82, 0x05, 0x65, + 0x82, 0x65, 0xa8, 0x99, 0x98, 0xaf, 0x96, 0xd7, 0x8a, 0xdc, 0x0b, 0xc6, + 0xa3, 0x07, 0xa0, 0x6e, 0xa9, 0x22, 0x6e, 0x67, 0x08, 0x56, 0xe0, 0x72, + 0xd3, 0x3b, 0xc4, 0x61, 0x69, 0xbb, 0xc5, 0x6b, 0x5d, 0xd3, 0x60, 0xae, + 0x12, 0x4a, 0x90, 0xfc, 0x44, 0x3a, 0x17, 0x49, 0x3d, 0xd6, 0x55, 0x04, + 0x73, 0xfb, 0x7c, 0xf2, 0x40, 0x5b, 0xc0, 0xc0, 0x32, 0xef, 0x90, 0x58, + 0xa3, 0x12, 0xab, 0xd4, 0xd9, 0x87, 0x38, 0x21, 0xa1, 0x4b, 0xc5, 0x45, + 0x0e, 0x15, 0xbc, 0xf9, 0xb2, 0x3e, 0xff, 0xe8, 0x9c, 0xf7, 0x40, 0x2f, + 0x12, 0x08, 0xc9, 0xe6, 0x76, 0xc6, 0x0f, 0xab, 0x51, 0xaa, 0x1b, 0x2d, + 0xa9, 0xe7, 0xb8, 0x7c, 0x10, 0x52, 0x2a, 0x17, 0xc3, 0x68, 0x40, 0x8e, + 0x85, 0xb8, 0x7e, 0xa9, 0xeb, 0x52, 0x8c, 0x80, 0x22, 0xda, 0xe0, 0xbe, + 0x8f, 0x26, 0x43, 0xbc, 0x55, 0xb1, 0x8a, 0x88, 0x66, 0xdc, 0xe9, 0x36, + 0xfc, 0xb3, 0x23, 0xeb, 0x8a, 0x37, 0x41, 0x09, 0x38, 0x72, 0x52, 0xc7, + 0x15, 0x51, 0x6f, 0xa7, 0x6c, 0x9d, 0xa2, 0x96, 0x81, 0xed, 0x06, 0x6a, + 0xb7, 0x9b, 0x53, 0xc3, 0x94, 0xc6, 0x43, 0x15, 0x60, 0xec, 0xfb, 0x25, + 0x84, 0xd2, 0x6d, 0x16, 0x54, 0x11, 0x2e, 0xfc, 0x1f, 0xa2, 0xfb, 0x9d, + 0xf8, 0xf0, 0x46, 0x4e, 0x06, 0x0e, 0x60, 0x02, 0x09, 0x1f, 0x2c, 0x35, + 0x6b, 0xe5, 0xcc, 0xf0, 0xcb, 0x3e, 0x13, 0x3c, 0xae, 0x47, 0x76, 0x49, + 0x5b, 0x5b, 0xbe, 0x11, 0xf3, 0x0f, 0x0d, 0x24, 0x09, 0x89, 0xb3, 0x47, + 0x2b, 0x19, 0x66, 0x49, 0x66, 0x06, 0xc5, 0x32, 0x96, 0xb8, 0xc5, 0x89, + 0x64, 0xbc, 0x36, 0xf5, 0x89, 0x0b, 0xb2, 0x18, 0xab, 0x79, 0xc9, 0x00, + 0xc7, 0xc2, 0x73, 0xa0, 0x05, 0x1d, 0x01, 0x6c, 0xbd, 0x0d, 0xf7, 0x91, + 0x5c, 0x74, 0x05, 0x90, 0x5c, 0x36, 0x4e, 0xf8, 0xc1, 0x77, 0x45, 0xc0, + 0x17, 0x28, 0xb5, 0x2f, 0x59, 0xce, 0x60, 0x22, 0xc9, 0x33, 0xc0, 0xc0, + 0x32, 0xb9, 0x06, 0x16, 0x4a, 0x77, 0x53, 0xb8, 0x1c, 0x6a, 0xb5, 0x0e, + 0xbe, 0xea, 0xc0, 0xe5, 0x44, 0x01, 0x1f, 0xfc, 0x20, 0x70, 0x67, 0x53, + 0x02, 0x75, 0xb3, 0xac, 0xea, 0x02, 0x82, 0x71, 0x45, 0x4c, 0xd4, 0xbc, + 0x57, 0xd9, 0x49, 0xbb, 0xca, 0x49, 0xd9, 0x6b, 0xc9, 0xef, 0x26, 0xa9, + 0xdd, 0xec, 0x78, 0xce, 0x6b, 0x19, 0x9b, 0xa3, 0xb5, 0x50, 0x52, 0x16, + 0xba, 0x64, 0x44, 0x84, 0x72, 0x5b, 0x96, 0x31, 0x47, 0x7c, 0x11, 0x99, + 0x11, 0xa1, 0x17, 0xb4, 0x17, 0x54, 0x18, 0x59, 0x83, 0xa7, 0xe3, 0x72, + 0x36, 0xa9, 0x9e, 0xa9, 0x82, 0x64, 0xf1, 0x6c, 0x30, 0xd6, 0x94, 0xb4, + 0x7a, 0xa2, 0x8f, 0xd3, 0xd9, 0xc7, 0xd1, 0x6a, 0x47, 0xd2, 0x10, 0x9b, + 0xa0, 0xa4, 0x1b, 0x31, 0xe2, 0x86, 0xb7, 0x32, 0x39, 0x95, 0x2b, 0x04, + 0x7c, 0x4b, 0x9c, 0xac, 0x59, 0x35, 0x3f, 0xd9, 0x54, 0xf0, 0x99, 0x68, + 0xe8, 0x81, 0x14, 0xe1, 0xf1, 0x3f, 0xfb, 0x08, 0x85, 0x8d, 0x49, 0x26, + 0xb0, 0x16, 0xcd, 0x87, 0x65, 0xa7, 0x68, 0x19, 0x85, 0x9e, 0xf6, 0x26, + 0x98, 0xe5, 0xb5, 0x5d, 0xa9, 0x3d, 0xff, 0xca, 0x7d, 0xc7, 0xa5, 0x70, + 0x92, 0x4a, 0x85, 0xff, 0x23, 0x88, 0x4d, 0x37, 0x3e, 0xc0, 0xd0, 0x52, + 0x79, 0x64, 0x5a, 0x0a, 0xca, 0xa2, 0x4f, 0x73, 0xb4, 0x05, 0x42, 0x53, + 0x66, 0x56, 0xa0, 0x08, 0x94, 0xb7, 0x87, 0x45, 0x02, 0x21, 0x8a, 0x51, + 0x48, 0x2c, 0x0e, 0x7d, 0xc8, 0x27, 0x1c, 0xc5, 0xad, 0x0d, 0x41, 0x19, + 0xce, 0x92, 0x18, 0xec, 0x1a, 0xa3, 0x89, 0xa2, 0x51, 0x52, 0x1b, 0x2e, + 0x65, 0x9b, 0xb4, 0xd9, 0xb6, 0x76, 0x58, 0x6c, 0x91, 0x30, 0x28, 0x53, + 0xe8, 0xa4, 0x4d, 0x54, 0x35, 0xaf, 0x4d, 0xb0, 0x96, 0x15, 0x48, 0x3d, + 0x00, 0x2a, 0x9a, 0xa8, 0x24, 0x0c, 0x61, 0xf8, 0x45, 0x3d, 0x0b, 0x1c, + 0x26, 0x53, 0xcf, 0x28, 0xac, 0x52, 0xd5, 0xea, 0xc2, 0xe0, 0xa8, 0x0d, + 0xec, 0x06, 0x05, 0xa1, 0x80, 0x95, 0xd7, 0x66, 0x97, 0x95, 0x81, 0x92, + 0xf2, 0x4b, 0xac, 0x11, 0x32, 0xb9, 0x50, 0x22, 0x39, 0x62, 0x0b, 0x64, + 0x66, 0x19, 0x3e, 0x4b, 0x15, 0xcb, 0x14, 0x76, 0xc3, 0x18, 0x9c, 0x54, + 0x95, 0x38, 0x04, 0x8b, 0xf7, 0x2a, 0xf0, 0x6b, 0x52, 0xe5, 0xdb, 0x63, + 0xd0, 0x11, 0x07, 0x57, 0x97, 0x96, 0xd0, 0xb0, 0x6b, 0x5e, 0x55, 0x28, + 0x6c, 0x50, 0x2f, 0x18, 0x3c, 0x51, 0x85, 0x33, 0xc2, 0xc8, 0xe9, 0x8a, + 0xb9, 0x44, 0xba, 0x6b, 0xe6, 0x82, 0xe9, 0x41, 0x57, 0x11, 0xd0, 0xa8, + 0xa1, 0xb3, 0x52, 0xe1, 0xa8, 0xa1, 0x40, 0x4a, 0x6c, 0x76, 0x98, 0x19, + 0xa8, 0x45, 0xc8, 0xf0, 0xf8, 0x61, 0x42, 0x20, 0x7e, 0xb1, 0xb6, 0xcf, + 0x11, 0x7a, 0x9a, 0xa1, 0x2c, 0xb2, 0x2a, 0x72, 0x1f, 0xc8, 0xf7, 0x98, + 0x2f, 0x99, 0x08, 0x67, 0x20, 0x99, 0x0d, 0x04, 0x21, 0x74, 0xa2, 0xa8, + 0x3f, 0x76, 0x0e, 0xb3, 0x13, 0x38, 0x81, 0x90, 0x49, 0x4a, 0x9b, 0xc4, + 0x81, 0x59, 0xc5, 0x28, 0xda, 0xb1, 0xd9, 0xcb, 0x9d, 0x95, 0x68, 0x57, + 0xd6, 0xf8, 0x7a, 0x48, 0x90, 0x89, 0x45, 0x0a, 0x61, 0x01, 0x70, 0x7d, + 0xe4, 0xc9, 0x49, 0x95, 0x29, 0x16, 0x75, 0xc3, 0xc2, 0xa0, 0xb0, 0x71, + 0xd8, 0xc5, 0x35, 0x10, 0xdb, 0x15, 0x48, 0x44, 0xc6, 0x14, 0xe7, 0x13, + 0x9f, 0x16, 0x02, 0x3d, 0x38, 0x49, 0x84, 0x83, 0x86, 0x4b, 0x7b, 0xa9, + 0xb2, 0xc0, 0x50, 0x7b, 0xcb, 0x23, 0x51, 0x73, 0xac, 0x38, 0x75, 0x2f, + 0x90, 0xd3, 0x62, 0x54, 0x52, 0x50, 0x6b, 0x41, 0xaa, 0x8d, 0x69, 0xa8, + 0x6b, 0xc7, 0x1a, 0xa8, 0x53, 0x18, 0x95, 0x56, 0xb3, 0xf7, 0x27, 0xb3, + 0x0d, 0x86, 0xb3, 0x8d, 0x20, 0xca, 0x8b, 0x67, 0x53, 0x00, 0x43, 0x7e, + 0x50, 0x4a, 0xaa, 0x0d, 0x53, 0x91, 0x65, 0xbc, 0x31, 0xba, 0xe4, 0x90, + 0x1f, 0xc0, 0x33, 0x62, 0xf2, 0xa0, 0x49, 0x09, 0x5a, 0xf0, 0x1b, 0x2f, + 0xf3, 0x76, 0x12, 0xcb, 0x5a, 0x67, 0xd3, 0x97, 0x89, 0x62, 0xea, 0x15, + 0x89, 0xcc, 0xae, 0x70, 0xb1, 0x2d, 0x21, 0x2b, 0x27, 0x2f, 0x5a, 0x32, + 0x6c, 0x08, 0x2f, 0x51, 0xa3, 0x25, 0xc0, 0x29, 0x5e, 0x5b, 0x14, 0x8a, + 0x08, 0x25, 0x6b, 0x1b, 0x31, 0x1c, 0xc3, 0xa8, 0x80, 0x09, 0x2b, 0x20, + 0x00, 0xd6, 0x95, 0xeb, 0xd5, 0x42, 0x9d, 0xcc, 0xb6, 0x67, 0x84, 0x44, + 0xfd, 0x38, 0xa1, 0x74, 0x40, 0xc4, 0x10, 0x26, 0x56, 0x90, 0x25, 0x39, + 0xdd, 0x69, 0x0d, 0x0b, 0xba, 0x4f, 0xee, 0xc8, 0x30, 0x29, 0x38, 0xbf, + 0x76, 0x55, 0x52, 0x1a, 0x5a, 0x91, 0xbb, 0x2c, 0x2e, 0x9a, 0x00, 0xa7, + 0x5b, 0xa3, 0x19, 0x87, 0x45, 0xb7, 0x20, 0x58, 0x1c, 0x67, 0x6b, 0x8f, + 0xa6, 0xe9, 0x93, 0x9b, 0xc0, 0x5c, 0x00, 0x7a, 0x42, 0xe7, 0x3c, 0xa1, + 0x2d, 0xcb, 0xb7, 0x4a, 0xe5, 0x27, 0xa4, 0x3a, 0x6c, 0x3d, 0x64, 0x27, + 0xfd, 0x3a, 0x21, 0x84, 0x83, 0x47, 0x02, 0x95, 0x40, 0xcb, 0xd9, 0x8f, + 0x40, 0x68, 0x6c, 0xdb, 0x7c, 0x24, 0x74, 0x1a, 0x4f, 0x70, 0x65, 0x05, + 0x61, 0x2d, 0xd2, 0x1f, 0x5a, 0x97, 0x51, 0x07, 0x2d, 0x86, 0x2e, 0x2c, + 0x8b, 0x92, 0x5e, 0xef, 0x35, 0xc1, 0x83, 0x6a, 0x47, 0x54, 0x2d, 0x80, + 0x94, 0x86, 0x7c, 0xab, 0xa8, 0xdd, 0x01, 0x53}, + // cipherTextDigest + {0x63, 0x68, 0x79, 0x89, 0xb3, 0x0e, 0x82, 0xfb, 0x0c, 0xd3, 0x9e, + 0x0b, 0x2b, 0xc5, 0xb7, 0xd6, 0x11, 0x4d, 0x8a, 0x5b, 0x1f, 0x9f, + 0xb4, 0xc9, 0x9b, 0x15, 0x16, 0x81, 0xd9, 0xdd, 0x4f, 0x68}, + // secret + {0xf4, 0x15, 0x12, 0x01, 0x1c, 0x4a, 0x9d, 0x65, 0xf4, 0x69, 0xd0, + 0xc9, 0x7d, 0xd9, 0x5e, 0xc6, 0xe4, 0xf9, 0xc9, 0x3a, 0xda, 0xbd, + 0x4c, 0x6d, 0xf9, 0x34, 0x4c, 0xb4, 0xe4, 0x4c, 0x95, 0x53}, + true}, + // tcID: 65 + {65, + params_ml_kem1024_test_mode, + // entropy + {0x10, 0x08, 0x75, 0xf2, 0xdb, 0x89, 0x7b, 0xfe, 0xb1, 0x89, 0x2a, + 0x6d, 0x04, 0x7e, 0xa4, 0x4f, 0x80, 0x9a, 0x8c, 0x73, 0x5c, 0x14, + 0xee, 0x57, 0xcf, 0x94, 0x15, 0xd5, 0x70, 0x23, 0xc1, 0xc8}, + // publicKey + {0xef, 0x20, 0x52, 0x1a, 0x13, 0x79, 0x4f, 0xa6, 0xc4, 0x69, 0x0c, 0x69, + 0x29, 0xfb, 0x88, 0x64, 0xdc, 0x53, 0x47, 0xb6, 0xc5, 0xbd, 0x91, 0xcb, + 0xfc, 0xf9, 0xab, 0xb6, 0x68, 0x96, 0xff, 0xb6, 0x5c, 0xb3, 0x57, 0x56, + 0x5f, 0x88, 0x82, 0x8d, 0x46, 0x78, 0x17, 0xf6, 0x03, 0x77, 0x3a, 0x3c, + 0xbf, 0x47, 0x33, 0xc3, 0xd0, 0x6b, 0x55, 0x43, 0xa4, 0xee, 0x0c, 0x5a, + 0xf6, 0x64, 0x2f, 0xe5, 0xf3, 0x24, 0x9d, 0xc0, 0x16, 0xb6, 0xda, 0x6f, + 0x73, 0x06, 0x6e, 0x31, 0xf3, 0x61, 0x3a, 0x29, 0x24, 0x84, 0xaa, 0x74, + 0x81, 0x06, 0x32, 0xfd, 0x45, 0x6a, 0x19, 0xf4, 0x0a, 0x23, 0x27, 0x45, + 0x1d, 0x4a, 0x3d, 0xd6, 0xba, 0xcb, 0x43, 0x70, 0x14, 0x38, 0x96, 0x04, + 0x1e, 0x22, 0xa8, 0x52, 0x24, 0x50, 0x21, 0x69, 0x5a, 0x82, 0x03, 0x64, + 0x66, 0x45, 0x1f, 0x6d, 0xe9, 0x5f, 0x72, 0xe5, 0x34, 0x9f, 0x22, 0xaa, + 0xb8, 0x45, 0x6b, 0xd0, 0x8a, 0x7d, 0x2e, 0xc1, 0x33, 0x8d, 0x17, 0x6a, + 0xe0, 0x80, 0x32, 0x81, 0xaa, 0x6e, 0xee, 0xc7, 0xa6, 0xef, 0x6a, 0xa2, + 0xba, 0x1b, 0x42, 0x3d, 0x9c, 0x04, 0x43, 0x8a, 0x7a, 0xa7, 0x61, 0x01, + 0x7c, 0x79, 0x43, 0x1c, 0x72, 0xb8, 0x1d, 0x56, 0x9f, 0x2d, 0x93, 0x5b, + 0x71, 0x30, 0x5f, 0xf2, 0xd8, 0x4c, 0x56, 0x73, 0x4a, 0x48, 0x86, 0xcd, + 0x4a, 0x2c, 0xb6, 0xa6, 0x00, 0xc3, 0x83, 0x7c, 0x4c, 0x2d, 0x53, 0x58, + 0x02, 0xc5, 0xbb, 0xf2, 0xf7, 0x33, 0xf4, 0xd1, 0xbe, 0x1a, 0x04, 0x1d, + 0x2f, 0xa5, 0xc1, 0x29, 0x97, 0x34, 0xd3, 0x84, 0x48, 0xb1, 0xd3, 0x14, + 0x44, 0xec, 0x22, 0x6a, 0xb7, 0x57, 0xb5, 0x78, 0x2b, 0x6b, 0xa6, 0x5c, + 0x63, 0xd8, 0xcf, 0x35, 0x68, 0x01, 0xa4, 0xe9, 0x58, 0x50, 0x68, 0x54, + 0xf7, 0xa8, 0x06, 0xfe, 0xc3, 0x54, 0x09, 0xb1, 0x0c, 0x70, 0x71, 0xac, + 0x3e, 0x3a, 0x0c, 0x24, 0x2b, 0x40, 0x46, 0x25, 0x53, 0xae, 0x73, 0x51, + 0xdd, 0x51, 0xc8, 0xa8, 0x02, 0xa4, 0xc0, 0x8b, 0x89, 0xfa, 0x56, 0x20, + 0x0b, 0xc1, 0x59, 0x38, 0xc9, 0x45, 0xbd, 0x10, 0x0a, 0xf3, 0x47, 0xcb, + 0xb1, 0xab, 0xb5, 0x40, 0xab, 0x89, 0xba, 0x7b, 0x3c, 0x6a, 0x38, 0x1e, + 0x47, 0xe8, 0x32, 0x1e, 0x72, 0x86, 0xc7, 0x3c, 0x0f, 0xa8, 0xe6, 0x52, + 0x23, 0x45, 0x96, 0x60, 0xc8, 0x94, 0x44, 0x7b, 0xb0, 0x71, 0x80, 0xa8, + 0xb6, 0x8c, 0x8e, 0x79, 0x7a, 0x62, 0x00, 0xe4, 0x82, 0xe9, 0xa0, 0xa5, + 0xa7, 0x2a, 0x7e, 0x43, 0x87, 0x6b, 0x30, 0x65, 0xb3, 0x58, 0xd9, 0xbe, + 0x91, 0x6b, 0x73, 0x5e, 0xa0, 0x2d, 0x4a, 0x55, 0x16, 0x8e, 0x4c, 0x63, + 0x9f, 0xf7, 0x41, 0xc3, 0xb9, 0x75, 0x2a, 0x9c, 0x32, 0x0d, 0xf9, 0x17, + 0xc5, 0x5a, 0x5b, 0x57, 0xe3, 0xc9, 0x8a, 0xd5, 0x16, 0xa2, 0x87, 0x82, + 0x04, 0xc5, 0x19, 0x0f, 0x33, 0x39, 0x88, 0x53, 0x64, 0xb0, 0x37, 0x96, + 0x8e, 0xb9, 0x60, 0x83, 0x1c, 0x8c, 0x2e, 0xdb, 0xa4, 0xf4, 0x12, 0x8c, + 0x62, 0x21, 0x94, 0xb9, 0x13, 0x83, 0x2d, 0x00, 0x08, 0xb4, 0x56, 0xcd, + 0x05, 0x0a, 0x39, 0x66, 0xc2, 0x0a, 0x97, 0xb5, 0x5a, 0x55, 0xf7, 0x37, + 0xbb, 0xb0, 0x78, 0x80, 0x73, 0x28, 0x63, 0x31, 0x76, 0x2c, 0xb8, 0x56, + 0x90, 0x06, 0x92, 0xb7, 0x9a, 0xac, 0xe6, 0x8c, 0x80, 0x7a, 0x83, 0x49, + 0x72, 0x88, 0x49, 0xe6, 0x13, 0x2d, 0xb6, 0x91, 0x7b, 0xc3, 0x73, 0x94, + 0xce, 0xbc, 0xb6, 0xa0, 0x24, 0x76, 0xcd, 0x39, 0x5e, 0x90, 0x61, 0x82, + 0x7e, 0x63, 0xa3, 0x2f, 0xe9, 0xa9, 0xf7, 0x20, 0x60, 0x78, 0x4a, 0xc0, + 0x99, 0x50, 0x8a, 0xc5, 0xe1, 0xcd, 0x17, 0xf4, 0xcf, 0xb8, 0x06, 0xa9, + 0x83, 0x5c, 0x20, 0x39, 0x35, 0x67, 0x97, 0x4b, 0xa6, 0x52, 0x93, 0x51, + 0x82, 0xb5, 0x66, 0x0e, 0xb5, 0x91, 0x97, 0x71, 0xbb, 0x41, 0x42, 0x9e, + 0x63, 0x5c, 0x69, 0xe9, 0x6c, 0x32, 0x06, 0xf1, 0x64, 0xcc, 0x22, 0xb3, + 0xf3, 0xd6, 0xcb, 0xe1, 0x1b, 0xce, 0x65, 0x48, 0x0e, 0x35, 0x99, 0x8e, + 0x0f, 0x9b, 0xae, 0x55, 0x83, 0x78, 0x6f, 0x41, 0x4a, 0x75, 0x0c, 0x9f, + 0x45, 0xdc, 0x97, 0x5f, 0x35, 0xb0, 0x98, 0x44, 0xbd, 0x11, 0x08, 0xca, + 0xbe, 0x82, 0x6e, 0x59, 0xc8, 0xce, 0x7f, 0x02, 0x97, 0xa4, 0x6a, 0xb6, + 0xbd, 0x26, 0x84, 0x64, 0x0a, 0x06, 0xc0, 0xb6, 0x21, 0xa9, 0x79, 0x7b, + 0x41, 0x85, 0x04, 0x71, 0x58, 0x60, 0x6d, 0x79, 0x4c, 0x3b, 0xc7, 0xcb, + 0x76, 0x55, 0x89, 0xfc, 0x4c, 0x0c, 0xd3, 0xfc, 0x3a, 0x88, 0xe9, 0x7b, + 0x57, 0x48, 0x2c, 0x0b, 0xca, 0xbb, 0x03, 0x38, 0x7b, 0xa7, 0x23, 0x25, + 0x3c, 0xf8, 0x27, 0xad, 0x27, 0x16, 0x7b, 0x3c, 0x8c, 0x7c, 0xa0, 0xc1, + 0x7d, 0xb9, 0x4d, 0x39, 0xb3, 0x2a, 0x1f, 0x23, 0x56, 0x25, 0x72, 0x60, + 0xb8, 0xc8, 0x8c, 0xaa, 0x55, 0x59, 0x4a, 0x93, 0x42, 0xb8, 0xb7, 0x6f, + 0x2a, 0x76, 0xb7, 0x4d, 0x31, 0x82, 0x66, 0x44, 0x1c, 0x39, 0x24, 0x65, + 0x1c, 0xba, 0x9a, 0xb8, 0x52, 0x3a, 0x2e, 0x08, 0x00, 0xbb, 0x8b, 0x4e, + 0x41, 0xba, 0x37, 0xf7, 0xfa, 0xb8, 0x8d, 0x48, 0x15, 0xfe, 0xe7, 0x3c, + 0x91, 0x16, 0x57, 0x20, 0x4b, 0xcf, 0xf8, 0xd7, 0x37, 0x6f, 0x29, 0xbf, + 0x6d, 0x7c, 0x85, 0x59, 0xd3, 0x5b, 0xf4, 0x67, 0x91, 0x0d, 0xac, 0xb1, + 0x34, 0x54, 0x83, 0x79, 0x11, 0xb2, 0xe4, 0x31, 0x2a, 0x3e, 0x8b, 0x9f, + 0xcd, 0x27, 0xba, 0xf5, 0xa4, 0x5e, 0xf0, 0xb4, 0x52, 0x39, 0x29, 0x53, + 0x5b, 0xa6, 0x1a, 0x07, 0xa9, 0x8d, 0x89, 0x13, 0x0a, 0x6d, 0x17, 0x65, + 0xfe, 0xe0, 0x1c, 0x6e, 0x31, 0x28, 0xa6, 0xcc, 0x10, 0xdc, 0xf1, 0x6c, + 0x73, 0x4c, 0xc7, 0x6f, 0xc1, 0x3e, 0xfb, 0x93, 0x06, 0x16, 0xc2, 0xcf, + 0x19, 0x08, 0xb8, 0x13, 0xb2, 0x64, 0x86, 0x41, 0x75, 0x3c, 0x00, 0x6a, + 0x49, 0x26, 0x07, 0xb3, 0x09, 0x91, 0x81, 0xbc, 0xca, 0xb6, 0x28, 0x39, + 0x16, 0x21, 0x65, 0xe0, 0xfc, 0x58, 0x0d, 0xfb, 0x35, 0x28, 0x8a, 0xa2, + 0x5c, 0x28, 0x4c, 0x69, 0x78, 0x92, 0x1c, 0xbc, 0x05, 0x38, 0x40, 0x89, + 0x74, 0x76, 0x0a, 0xc6, 0xf3, 0xb4, 0x42, 0x35, 0x83, 0x98, 0xac, 0x3b, + 0x75, 0x32, 0xbd, 0x7d, 0xf1, 0x55, 0x72, 0x6a, 0x9e, 0xee, 0xc6, 0x2d, + 0x20, 0x58, 0x98, 0xee, 0x06, 0x59, 0x09, 0xc5, 0x0b, 0xd5, 0x10, 0x7e, + 0x98, 0x82, 0x27, 0x72, 0x64, 0x0d, 0xc2, 0xcb, 0x7f, 0x5b, 0x67, 0x02, + 0x9d, 0x13, 0x9d, 0xb6, 0x3a, 0xc8, 0x83, 0x31, 0xb5, 0x79, 0xb7, 0x5e, + 0x9c, 0xeb, 0xcb, 0xed, 0x60, 0x17, 0x99, 0xaa, 0x60, 0x54, 0x0a, 0x75, + 0x85, 0x54, 0x7f, 0x04, 0xbb, 0x13, 0xc9, 0xab, 0x03, 0x46, 0xb6, 0x6e, + 0x1d, 0xe8, 0x1e, 0xfb, 0x76, 0x78, 0x24, 0x2c, 0x89, 0xc9, 0x73, 0x6d, + 0xc5, 0x85, 0x58, 0xea, 0x3b, 0x0c, 0x02, 0x8a, 0x06, 0x85, 0xcb, 0xa0, + 0x65, 0x03, 0x70, 0x30, 0x88, 0x78, 0x0f, 0xdb, 0x79, 0x64, 0x06, 0x9c, + 0x3b, 0x82, 0x60, 0xd8, 0x96, 0x5f, 0x87, 0x98, 0x6b, 0x18, 0xb9, 0x74, + 0x04, 0xa2, 0x67, 0x1c, 0xf0, 0x19, 0x09, 0x64, 0x15, 0x8e, 0xb5, 0xb1, + 0xb6, 0x44, 0x55, 0x3c, 0x42, 0xb3, 0x38, 0x19, 0x81, 0xf4, 0x86, 0x03, + 0xf3, 0x17, 0x3d, 0xaf, 0x66, 0x45, 0x6a, 0x31, 0x83, 0xec, 0x0c, 0x58, + 0xc9, 0x3a, 0x1d, 0x26, 0xc0, 0x44, 0xdf, 0xd7, 0x3e, 0x14, 0xc9, 0x2a, + 0x24, 0x42, 0x14, 0xe9, 0xc8, 0x5a, 0x4a, 0x36, 0xc4, 0xbc, 0x4a, 0x18, + 0x35, 0xf3, 0x65, 0x8a, 0x76, 0x36, 0x05, 0x5a, 0x33, 0x86, 0xe5, 0x41, + 0xa5, 0x90, 0x68, 0xeb, 0x4a, 0xcc, 0x43, 0x99, 0xaa, 0xc8, 0xf6, 0x5b, + 0xb1, 0x11, 0x8a, 0x2d, 0x5a, 0xab, 0x53, 0xb4, 0x12, 0x89, 0x13, 0xb2, + 0x2a, 0xb6, 0x24, 0xb0, 0x31, 0x57, 0x51, 0xec, 0x32, 0x05, 0x8c, 0x64, + 0xb7, 0xb4, 0xc1, 0x66, 0x64, 0xb2, 0x2f, 0xa4, 0xac, 0xff, 0xc6, 0x83, + 0xe1, 0x96, 0x91, 0x36, 0xfb, 0x36, 0x67, 0xf3, 0xc1, 0x54, 0xa9, 0x5e, + 0x46, 0x94, 0xc0, 0x79, 0x3b, 0x9f, 0x06, 0x69, 0x80, 0xd4, 0xbc, 0x69, + 0x3e, 0xd5, 0xb9, 0x31, 0x16, 0x17, 0x49, 0xf9, 0x9f, 0x8e, 0x73, 0x4c, + 0x91, 0x49, 0x55, 0x21, 0x69, 0x70, 0x29, 0x97, 0x92, 0xc0, 0x66, 0x77, + 0xcc, 0xf4, 0x06, 0x38, 0x99, 0xa1, 0x5f, 0xd3, 0x07, 0x2a, 0x68, 0x84, + 0x1a, 0xd1, 0x24, 0x24, 0x59, 0x8c, 0x7b, 0x90, 0x5a, 0xee, 0x61, 0x16, + 0x53, 0x51, 0x9c, 0x8e, 0x6b, 0x1c, 0x09, 0x24, 0x1a, 0x46, 0x63, 0x04, + 0x65, 0xf1, 0x72, 0x6d, 0x9b, 0x4f, 0xaf, 0x14, 0x2a, 0xe6, 0x2c, 0x62, + 0xf0, 0x98, 0xaa, 0xe4, 0x26, 0x7e, 0x64, 0xd2, 0x84, 0xf3, 0x5c, 0x4f, + 0x47, 0xf6, 0x8a, 0x8a, 0xc3, 0xbe, 0xb7, 0x2c, 0x78, 0x2f, 0x35, 0x14, + 0xc0, 0x86, 0x4a, 0x54, 0xa0, 0xc8, 0xc3, 0xd3, 0x5f, 0x34, 0x46, 0x75, + 0x87, 0x19, 0x1f, 0xcc, 0xa8, 0x19, 0xb8, 0x3b, 0x6a, 0xf7, 0xe1, 0x68, + 0x03, 0x73, 0x7a, 0x6c, 0xd5, 0xa6, 0xc5, 0x68, 0x61, 0x41, 0x11, 0x07, + 0x71, 0xd4, 0x77, 0x29, 0x1a, 0x5b, 0x76, 0x66, 0x71, 0x52, 0x41, 0x3e, + 0xb4, 0x99, 0x42, 0x1d, 0xf2, 0x57, 0xd8, 0x48, 0x8d, 0x79, 0xe2, 0x43, + 0xfc, 0xe7, 0xb5, 0xa8, 0x59, 0x0e, 0x3b, 0xf0, 0x2e, 0x64, 0xb5, 0x17, + 0x05, 0x08, 0x88, 0xd9, 0x93, 0x11, 0x53, 0x4b, 0x6f, 0xbd, 0x01, 0xaf, + 0x76, 0xda, 0x77, 0x6f, 0xfb, 0x31, 0x78, 0x18, 0x09, 0xf5, 0x45, 0xb9, + 0xf9, 0x08, 0x32, 0xb0, 0xfc, 0x39, 0x2f, 0xdb, 0x12, 0x2b, 0xd0, 0x6d, + 0x06, 0xb8, 0x49, 0x1f, 0x13, 0x12, 0xc0, 0x34, 0x6b, 0xfc, 0xd5, 0x5f, + 0xe4, 0x68, 0x91, 0x62, 0x30, 0xb4, 0xa9, 0x70, 0x2e, 0xea, 0x07, 0xb3, + 0x98, 0x64, 0x7c, 0x41, 0x7c, 0x45, 0x4a, 0x9a, 0x26, 0x27, 0xd5, 0x3d, + 0x90, 0x77, 0x93, 0x32, 0x94, 0x58, 0x91, 0x16, 0x25, 0x30, 0xe7, 0x65, + 0x29, 0xdc, 0x2c, 0x31, 0x35, 0xbd, 0xe1, 0x39, 0x1a, 0xd7, 0xa7, 0x4f, + 0x3e, 0x51, 0x2a, 0x66, 0x17, 0x36, 0xc2, 0x72, 0x3b, 0xef, 0xe0, 0x59, + 0x03, 0x79, 0xba, 0xe0, 0xb1, 0x43, 0x51, 0x46, 0x54, 0xde, 0x0a, 0x19, + 0x36, 0xf7, 0x54, 0x96, 0x42, 0x57, 0x8e, 0x23, 0x83, 0x74, 0x09, 0x29, + 0x08, 0x8a, 0xb5, 0x5c, 0xb2, 0x0a, 0x27, 0xa9, 0xa1, 0x5b, 0x2c, 0x3c, + 0x9e, 0x66, 0x51, 0xd8, 0xdb, 0x65, 0x9a, 0xa0, 0xc0, 0xd5, 0xb3, 0x40, + 0xa8, 0x4b, 0x8f, 0x86, 0xb6, 0x3c, 0x6e, 0xb7, 0x8d, 0xb0, 0x85, 0x41, + 0xf6, 0xd3, 0xa8, 0x71, 0xea, 0x31, 0x88, 0x87, 0x07, 0x90, 0xf0, 0xb1, + 0x33, 0x17, 0xb1, 0xff, 0x86, 0x6e, 0xb9, 0xe4, 0x5c, 0x98, 0x02, 0x57, + 0xcf, 0xbc, 0x28, 0xe8, 0x3a, 0x96, 0xab, 0x9a, 0x3b, 0x19, 0x28, 0xc2, + 0x71, 0xd2, 0x7a, 0x67, 0xa5, 0x8b, 0x91, 0x75, 0xc4, 0x00, 0x51, 0x9b, + 0xad, 0x71, 0x6c, 0x1e, 0xf5, 0x4b, 0xfc, 0x34, 0x60, 0x77, 0xe3, 0xc0, + 0x92, 0xd1, 0x0a, 0x7b, 0x56, 0x61, 0xc0, 0xc1, 0x7a, 0xe4, 0x59, 0x6b, + 0x80, 0xbc, 0x54, 0x1e, 0x6a, 0xfc, 0xd6, 0x63, 0xb1, 0x34, 0x84, 0x89, + 0x0d, 0x1a, 0xb0, 0x1a, 0xbb, 0xbe, 0x9f, 0x9a, 0x87, 0x12, 0x49, 0xbf, + 0x1f, 0x5b, 0x8c, 0xed, 0x42, 0x5c, 0x1f, 0x94}, + // cipherTextDigest + {0xfc, 0xdc, 0x42, 0xd5, 0x1c, 0x1e, 0x89, 0x57, 0x3b, 0x25, 0x95, + 0xf3, 0xf2, 0x4e, 0x2b, 0xfa, 0xcc, 0x52, 0xa8, 0xe5, 0x3c, 0x0f, + 0xaf, 0x42, 0x96, 0xf1, 0xf9, 0xe5, 0x02, 0x6e, 0x06, 0xd2}, + // secret + {0x8c, 0xe7, 0x42, 0x5f, 0x0f, 0xc4, 0x6e, 0xb0, 0x99, 0x89, 0x80, + 0x8e, 0xe5, 0x00, 0xd5, 0x59, 0x31, 0xcf, 0x24, 0x46, 0x59, 0x3d, + 0xc3, 0x3b, 0xa6, 0xc4, 0x21, 0xa0, 0xc4, 0x5c, 0x68, 0x5b}, + true}, + // tcID: 66 + {66, + params_ml_kem1024_test_mode, + // entropy + {0x76, 0xc8, 0x65, 0xe6, 0xb5, 0x79, 0x4b, 0x3b, 0xa1, 0x94, 0xee, + 0x33, 0x1e, 0x4e, 0x81, 0x69, 0x48, 0xb9, 0x26, 0xf8, 0x86, 0xfa, + 0x9c, 0x1c, 0x86, 0xb0, 0x07, 0x76, 0x0e, 0x03, 0x0c, 0x5f}, + // publicKey + {0x30, 0xa1, 0x9e, 0xa8, 0x57, 0x47, 0x4b, 0x1c, 0x04, 0x26, 0x58, 0x52, + 0xb7, 0x28, 0x96, 0xc0, 0x52, 0x9b, 0xc1, 0x23, 0x32, 0x96, 0x92, 0x26, + 0x73, 0x23, 0x7e, 0x25, 0x1c, 0x1f, 0xd1, 0xa8, 0x9f, 0x20, 0x0c, 0x4e, + 0x58, 0x86, 0x05, 0x0b, 0xb4, 0x3f, 0x3c, 0xf4, 0x3f, 0x56, 0xc5, 0x63, + 0x3c, 0xfb, 0x93, 0xc1, 0xc6, 0x4c, 0x71, 0x31, 0x3c, 0x86, 0x76, 0xba, + 0x6f, 0x0c, 0x51, 0xb1, 0xb0, 0x2c, 0xd7, 0x17, 0x4c, 0x2a, 0x32, 0x74, + 0xf6, 0xf2, 0x49, 0x52, 0xa7, 0x01, 0x55, 0xcb, 0x12, 0x27, 0x84, 0x1f, + 0xe0, 0xf4, 0x90, 0x0e, 0xc3, 0x48, 0x50, 0x38, 0x12, 0x21, 0x89, 0x41, + 0x3b, 0x2b, 0x2c, 0x15, 0x28, 0x31, 0x9b, 0xa9, 0x78, 0x5f, 0x8b, 0x80, + 0xbe, 0xcc, 0xbe, 0xfd, 0x6a, 0xa9, 0x00, 0x56, 0x76, 0xf3, 0x64, 0x8a, + 0xaf, 0x34, 0x48, 0x42, 0x32, 0x00, 0x5b, 0x81, 0xc4, 0x2d, 0xc7, 0x57, + 0xb8, 0x87, 0x9e, 0xcc, 0x17, 0x5f, 0x02, 0xeb, 0x45, 0x4e, 0x03, 0x17, + 0x64, 0xa9, 0x91, 0xe1, 0x11, 0x07, 0x2b, 0xd9, 0xa6, 0x2c, 0xf5, 0x93, + 0x16, 0x17, 0x17, 0x21, 0x5c, 0x54, 0x7b, 0xa8, 0x8f, 0x41, 0xe9, 0xa1, + 0xd4, 0xd7, 0x31, 0xdf, 0xc0, 0x00, 0x4b, 0x44, 0xae, 0x8e, 0x69, 0x64, + 0x76, 0x82, 0x5b, 0x22, 0x37, 0x8f, 0x10, 0xfa, 0xa5, 0xcd, 0x45, 0x05, + 0xd4, 0x70, 0x5a, 0x7a, 0xc7, 0xa2, 0x58, 0x56, 0x5d, 0x80, 0x62, 0xc7, + 0x5f, 0xfa, 0x0c, 0x38, 0xe2, 0x97, 0xe2, 0x00, 0x59, 0xac, 0x1a, 0x69, + 0xcf, 0xd8, 0x4c, 0x1d, 0x64, 0x93, 0xb4, 0x31, 0xcf, 0x84, 0xaa, 0x74, + 0x0f, 0x69, 0xb2, 0x2b, 0x44, 0xbb, 0x79, 0x1b, 0x20, 0x52, 0xfa, 0x7f, + 0x7f, 0x6c, 0x51, 0xf6, 0xf0, 0x28, 0x1b, 0xa7, 0x09, 0x23, 0x31, 0x23, + 0x73, 0x05, 0x1f, 0x53, 0xa7, 0x8f, 0xfc, 0x52, 0x3f, 0xe3, 0x34, 0xb8, + 0x19, 0x7c, 0x2d, 0x65, 0x40, 0x90, 0xa9, 0xe6, 0x0a, 0xd1, 0x34, 0x18, + 0x98, 0x72, 0xce, 0xc2, 0xb7, 0x9f, 0x77, 0xba, 0x8f, 0xea, 0x84, 0x14, + 0x38, 0x31, 0x34, 0xec, 0x29, 0x00, 0x84, 0x59, 0x2e, 0xee, 0xbc, 0x53, + 0x42, 0x27, 0x27, 0xf8, 0x58, 0x88, 0x82, 0xc9, 0xbd, 0xa7, 0x7c, 0x21, + 0x43, 0x12, 0x5d, 0x2f, 0xac, 0xbb, 0x76, 0xcc, 0x17, 0xb5, 0x28, 0x96, + 0x59, 0x81, 0xa9, 0xef, 0x8a, 0x4a, 0xc0, 0x23, 0x13, 0xe7, 0xa5, 0x52, + 0xeb, 0xa0, 0x19, 0x6b, 0x36, 0x5c, 0x51, 0x7b, 0x18, 0xaf, 0x91, 0x23, + 0xc3, 0x98, 0x1f, 0xa3, 0x48, 0x6a, 0x84, 0x65, 0x4c, 0x9e, 0xd8, 0x33, + 0xf1, 0x77, 0x2b, 0xb6, 0x02, 0x25, 0x40, 0x17, 0x90, 0x64, 0xb9, 0x7c, + 0x10, 0x41, 0x64, 0x22, 0xcc, 0x57, 0xe7, 0x96, 0xa7, 0x15, 0xe5, 0xb4, + 0x14, 0x4c, 0x3a, 0x07, 0x8c, 0x70, 0xfc, 0x23, 0x8f, 0x3a, 0x30, 0xc5, + 0xdf, 0x80, 0x95, 0x64, 0x68, 0x04, 0xcc, 0x67, 0x63, 0x54, 0xa8, 0x63, + 0x1f, 0x50, 0x6a, 0x5e, 0xd0, 0x41, 0x8a, 0x82, 0x32, 0x09, 0xfc, 0x3b, + 0x88, 0x50, 0x55, 0x51, 0x9b, 0x62, 0xe3, 0x68, 0x48, 0x6e, 0xd8, 0xb5, + 0x71, 0xaa, 0x33, 0x1a, 0x47, 0x76, 0xa0, 0x81, 0xa8, 0x76, 0xd3, 0x93, + 0x3e, 0xf5, 0x9c, 0xf6, 0xf1, 0xbe, 0xaa, 0xe7, 0xa6, 0x93, 0x04, 0x7b, + 0x5e, 0x52, 0x6e, 0xb6, 0xe8, 0x90, 0x8f, 0xf0, 0x36, 0xd9, 0x5a, 0x8e, + 0xc6, 0xa4, 0xcf, 0x77, 0xb4, 0x6e, 0xe4, 0x90, 0xb3, 0x5e, 0x39, 0x59, + 0x27, 0x37, 0x1e, 0xfc, 0xf1, 0x59, 0x2b, 0x38, 0xbc, 0x16, 0x76, 0x5b, + 0x4b, 0xec, 0x86, 0xfa, 0xdb, 0xb9, 0xdc, 0x6a, 0x9c, 0x9a, 0x42, 0x3b, + 0x9f, 0x54, 0xc3, 0x83, 0x9a, 0xb9, 0xca, 0xd7, 0x37, 0x86, 0x22, 0x53, + 0x0c, 0xc8, 0x9a, 0xf2, 0x79, 0x04, 0xc6, 0x05, 0x64, 0x4a, 0xc9, 0x75, + 0xd1, 0xa5, 0x61, 0x0c, 0xf4, 0x50, 0xa8, 0x22, 0xbb, 0xe7, 0xc9, 0x24, + 0xb5, 0xd5, 0x23, 0x5d, 0x77, 0x76, 0x1a, 0x7c, 0x68, 0xc6, 0xda, 0x88, + 0x8f, 0xfb, 0xb1, 0x38, 0xc3, 0x33, 0x08, 0x74, 0x36, 0x3e, 0x26, 0x9a, + 0xc8, 0xa9, 0x5a, 0x6e, 0x8a, 0xb5, 0x40, 0x00, 0x3c, 0xce, 0x5a, 0x73, + 0x0a, 0xe7, 0xa5, 0xd5, 0xc8, 0x71, 0xbd, 0xe2, 0x73, 0xfb, 0x1b, 0x8b, + 0xef, 0x15, 0x35, 0x3b, 0xa0, 0x7f, 0xba, 0xd7, 0x5e, 0xa4, 0x54, 0x83, + 0x9b, 0x89, 0x9f, 0x0e, 0x70, 0x1f, 0x2a, 0x5a, 0x87, 0x9a, 0x58, 0x33, + 0xad, 0xf0, 0x83, 0xc5, 0x13, 0x4f, 0x95, 0x3b, 0x95, 0xf2, 0x3c, 0x6e, + 0x53, 0x9a, 0x64, 0x20, 0x29, 0x77, 0x68, 0x4a, 0x0e, 0x84, 0x76, 0x6e, + 0x13, 0x29, 0x9b, 0x0b, 0xca, 0xa8, 0x55, 0x81, 0x8d, 0xd9, 0x59, 0x6c, + 0x8d, 0x29, 0x8d, 0x19, 0xf4, 0xa2, 0x1a, 0x97, 0x78, 0x1c, 0xc8, 0x06, + 0x35, 0xd5, 0x93, 0x11, 0x1a, 0x54, 0x10, 0xfb, 0x3a, 0xcc, 0x2a, 0x5e, + 0x5c, 0xfc, 0x8c, 0xf4, 0x22, 0xb0, 0x18, 0xe5, 0x06, 0x64, 0xbb, 0x2b, + 0x54, 0x5c, 0xc1, 0x93, 0x67, 0xc2, 0x13, 0x28, 0x2b, 0x41, 0xa5, 0x4b, + 0xc4, 0x48, 0x4a, 0x72, 0xfc, 0x94, 0xf2, 0x03, 0xca, 0x6d, 0x67, 0x3e, + 0xe5, 0xec, 0x5f, 0x0b, 0x42, 0x1b, 0x3e, 0x18, 0x59, 0xfc, 0x17, 0x36, + 0x11, 0x51, 0x52, 0xef, 0xc1, 0x3e, 0xd0, 0x24, 0x29, 0xad, 0x53, 0x46, + 0x5f, 0xb5, 0x71, 0x6a, 0xe6, 0x64, 0x6b, 0xf6, 0x64, 0x06, 0x52, 0x79, + 0x0e, 0xe5, 0xba, 0x65, 0x87, 0x8d, 0x01, 0x07, 0x05, 0x84, 0xc4, 0x36, + 0x97, 0x19, 0x45, 0xe4, 0x8a, 0x79, 0x17, 0x05, 0x2d, 0x3f, 0x54, 0x2e, + 0x48, 0x15, 0x00, 0x6e, 0xc6, 0x82, 0xb0, 0x61, 0xb7, 0xd6, 0xdb, 0xad, + 0x33, 0xa1, 0x01, 0x35, 0xfb, 0x50, 0xed, 0x80, 0x1a, 0xa2, 0xb6, 0xa1, + 0x16, 0x11, 0xa5, 0x46, 0x64, 0x99, 0x64, 0xcc, 0x5c, 0xec, 0x1b, 0xca, + 0xb0, 0xfb, 0x95, 0xfe, 0xd7, 0xcb, 0x0f, 0xc4, 0x4b, 0x29, 0x26, 0x81, + 0xcd, 0x56, 0x11, 0xb1, 0xa1, 0x09, 0xef, 0xb9, 0x2c, 0x5e, 0x8c, 0x55, + 0x92, 0xa0, 0x7f, 0x91, 0x19, 0x86, 0x1d, 0x4a, 0x32, 0x4c, 0x6c, 0x53, + 0xa0, 0xd9, 0x57, 0x3a, 0x2b, 0x12, 0xf0, 0x2a, 0x85, 0xf6, 0xa8, 0x96, + 0x9a, 0x5b, 0x8c, 0xb3, 0x53, 0x4b, 0x80, 0x82, 0x35, 0x39, 0x9b, 0x49, + 0x2a, 0x68, 0xc0, 0xfa, 0xb9, 0x7c, 0x15, 0xd1, 0x99, 0x33, 0x51, 0xa2, + 0x60, 0x23, 0x70, 0xdf, 0x10, 0x85, 0xe9, 0x17, 0x2c, 0x46, 0x95, 0x1f, + 0x77, 0x6a, 0xb4, 0x2a, 0xc0, 0xb2, 0x36, 0xd4, 0x2c, 0x6d, 0x24, 0x8a, + 0x6d, 0x1c, 0x98, 0x64, 0x55, 0x1b, 0xae, 0xaa, 0xbe, 0xc3, 0x09, 0x03, + 0xe5, 0x68, 0x3a, 0x5f, 0x61, 0xcc, 0x2f, 0x4c, 0x69, 0x48, 0xdb, 0x39, + 0x4e, 0x99, 0x1c, 0x53, 0xb5, 0x12, 0x06, 0x8c, 0x63, 0x79, 0x6a, 0x85, + 0x4b, 0x94, 0x2b, 0xd9, 0x1c, 0x8a, 0x88, 0x96, 0xb0, 0x91, 0x53, 0xa2, + 0x05, 0xa4, 0x20, 0xd3, 0xf6, 0xce, 0x13, 0x42, 0x7f, 0x28, 0xc4, 0x8d, + 0x6f, 0x91, 0x6f, 0xc9, 0x7b, 0x3c, 0x71, 0x9c, 0x81, 0x86, 0x14, 0xbd, + 0xa8, 0xb9, 0x11, 0xbb, 0x73, 0x10, 0xbf, 0x21, 0x20, 0x71, 0xac, 0x51, + 0x95, 0xc3, 0x17, 0x39, 0x20, 0x1b, 0xde, 0x54, 0xb8, 0x8e, 0x0c, 0xb3, + 0x3b, 0x93, 0xb2, 0xad, 0xf8, 0x46, 0xc6, 0x52, 0x9d, 0xeb, 0xba, 0x22, + 0xae, 0x54, 0xbe, 0x9c, 0x59, 0x0a, 0x94, 0x95, 0x1b, 0xf3, 0xdb, 0x40, + 0xee, 0x17, 0x1a, 0x6e, 0x24, 0x53, 0x26, 0x96, 0x84, 0xa5, 0xac, 0x10, + 0x1b, 0xc8, 0x61, 0x6b, 0xa2, 0xa1, 0x63, 0xf4, 0x86, 0x9b, 0x84, 0xae, + 0x3b, 0x44, 0x0b, 0x6c, 0x24, 0xa6, 0x2b, 0x1b, 0x84, 0x96, 0xdc, 0xac, + 0x17, 0x78, 0x06, 0x6a, 0x68, 0x27, 0x90, 0x71, 0x3f, 0x2b, 0x7a, 0x73, + 0x14, 0x52, 0x47, 0xe9, 0xb2, 0xce, 0x51, 0xf3, 0x77, 0xd7, 0xb2, 0xac, + 0x35, 0x64, 0x1d, 0x64, 0x10, 0xc6, 0x10, 0x11, 0xbe, 0x7d, 0x84, 0x4f, + 0xe1, 0xf0, 0xc5, 0x4f, 0x81, 0x10, 0x4d, 0x65, 0xb9, 0xae, 0x36, 0x71, + 0xd1, 0x4a, 0x20, 0x10, 0x49, 0x95, 0x77, 0x3a, 0x0b, 0x71, 0x04, 0xaa, + 0x10, 0x45, 0xcc, 0xfa, 0x30, 0x18, 0x24, 0x70, 0xa4, 0xad, 0x81, 0x27, + 0x40, 0x10, 0x80, 0x90, 0xa8, 0x82, 0x3b, 0x4b, 0x5c, 0xd1, 0x78, 0x43, + 0xb2, 0x41, 0x3e, 0x49, 0xf2, 0x2d, 0x70, 0x65, 0x78, 0xe4, 0x25, 0xc6, + 0x14, 0xa5, 0x04, 0xa5, 0x43, 0x15, 0xe9, 0x02, 0x0a, 0x66, 0xd1, 0x26, + 0x1f, 0xd9, 0x58, 0xb5, 0x37, 0x6e, 0x9c, 0x99, 0xb8, 0xc0, 0x26, 0x95, + 0x5d, 0xf7, 0x3d, 0xb4, 0x81, 0xb6, 0x8c, 0x69, 0x9b, 0x47, 0x86, 0xaa, + 0x4f, 0x68, 0x5e, 0x2e, 0x38, 0x29, 0xfc, 0xec, 0x2b, 0xae, 0xe6, 0x1c, + 0xac, 0x00, 0xc8, 0x04, 0xb9, 0x92, 0xa1, 0x66, 0x0d, 0x47, 0x12, 0x00, + 0x7d, 0xd6, 0x95, 0x12, 0xc4, 0x90, 0xd6, 0x78, 0x8f, 0xac, 0x51, 0x6e, + 0xb9, 0x3b, 0xbf, 0xef, 0x9a, 0x2b, 0xda, 0x41, 0x35, 0x2f, 0x1a, 0xbe, + 0x56, 0xfc, 0x5e, 0xda, 0x48, 0xcd, 0x2e, 0xc7, 0x4e, 0xb8, 0x7a, 0x58, + 0x9c, 0x06, 0xc2, 0xfd, 0x54, 0x6f, 0x73, 0x62, 0x78, 0x42, 0x73, 0x62, + 0x97, 0x9c, 0xc3, 0xd0, 0x2c, 0x2e, 0xfa, 0x3a, 0x5a, 0xcb, 0xab, 0x7f, + 0xb0, 0x28, 0xaf, 0xab, 0xe9, 0x47, 0xd3, 0x98, 0x23, 0xcc, 0x4a, 0x57, + 0x9d, 0xdc, 0x9b, 0x61, 0xa8, 0x42, 0xb7, 0xe1, 0x99, 0x5c, 0xc6, 0xbd, + 0x14, 0xe0, 0x07, 0x38, 0x56, 0xa6, 0x05, 0xbb, 0xae, 0xc0, 0xca, 0x91, + 0x98, 0x1a, 0x06, 0xb5, 0x52, 0x27, 0xfe, 0x13, 0x9e, 0xbf, 0xf8, 0x43, + 0xc6, 0x08, 0x0c, 0x26, 0x30, 0xcd, 0xea, 0x96, 0x3b, 0x8e, 0x02, 0x87, + 0xbc, 0xa5, 0xc3, 0x90, 0x39, 0x86, 0xb9, 0xe9, 0x23, 0x40, 0xfa, 0x5e, + 0x47, 0x4a, 0xb0, 0xe7, 0x7c, 0x90, 0x7a, 0x7c, 0x27, 0x01, 0x75, 0xae, + 0x77, 0x59, 0x10, 0x9e, 0xe9, 0x9a, 0x4d, 0x8b, 0x07, 0x71, 0x35, 0xc9, + 0x26, 0x14, 0x78, 0xa2, 0xe9, 0x3a, 0x9a, 0xc0, 0x73, 0x9c, 0x4b, 0x08, + 0x09, 0xca, 0x8b, 0xd9, 0x03, 0x64, 0xbb, 0x85, 0x0a, 0x16, 0x82, 0x35, + 0xec, 0xe2, 0x00, 0x3d, 0x18, 0x3a, 0x49, 0x14, 0x20, 0xda, 0xab, 0x1f, + 0xce, 0xe6, 0x67, 0x4f, 0x32, 0xa3, 0xf4, 0x79, 0x67, 0x7c, 0x79, 0x77, + 0xeb, 0x67, 0x08, 0x82, 0xb4, 0xa6, 0x69, 0x57, 0x07, 0xa9, 0x48, 0x3e, + 0xf1, 0x44, 0x5e, 0x2d, 0x91, 0x17, 0x89, 0xac, 0x83, 0x4b, 0x98, 0x41, + 0x8e, 0x56, 0x8a, 0x77, 0xb5, 0x8a, 0x24, 0xfc, 0xc9, 0xea, 0x32, 0x15, + 0xc5, 0x64, 0xcd, 0xff, 0xba, 0x18, 0xf9, 0xf1, 0x84, 0x37, 0x69, 0x16, + 0x2a, 0x73, 0x73, 0x6c, 0x51, 0x78, 0x71, 0xf4, 0x11, 0x0f, 0x95, 0x2b, + 0xb1, 0x33, 0xb7, 0x4a, 0xe7, 0x2a, 0x91, 0x64, 0xc0, 0xfa, 0x0a, 0x5e, + 0x41, 0xc8, 0xa7, 0x91, 0x34, 0x24, 0x91, 0xfc, 0x82, 0x82, 0xb3, 0x8e, + 0x9b, 0xb2, 0x33, 0xaa, 0x2a, 0x97, 0x17, 0x84, 0x23, 0x2a, 0x48, 0x21, + 0xf0, 0xf5, 0x94, 0xd8, 0xf0, 0x95, 0x6e, 0x84, 0x60, 0xac, 0xe0, 0x5a, + 0xa7, 0x5b, 0xa9, 0xab, 0x39, 0x5b, 0xe7, 0xd7, 0x5a, 0x32, 0x11, 0x1b, + 0xb2, 0x94, 0x0f, 0x29, 0x33, 0x19, 0xdb, 0x17, 0x8a, 0x62, 0x5e, 0x6b, + 0x6e, 0x96, 0xbd, 0x08, 0xed, 0xdb, 0xdf, 0xa3, 0x71, 0xb9, 0x09, 0x75, + 0xe9, 0x52, 0xcb, 0xe6, 0xd9, 0xb3, 0xf1, 0xee}, + // cipherTextDigest + {0x4e, 0x37, 0xe9, 0x5c, 0x7c, 0x72, 0xad, 0x55, 0x18, 0x65, 0x7c, + 0x98, 0x1a, 0x63, 0x0a, 0x4b, 0x35, 0x55, 0x99, 0xc9, 0xad, 0x7a, + 0xb7, 0xb6, 0x6e, 0x92, 0x12, 0x27, 0x9f, 0x92, 0x5a, 0x33}, + // secret + {0xf1, 0xf6, 0xeb, 0x76, 0xd6, 0x68, 0xc4, 0xde, 0xe4, 0x9b, 0x83, + 0x55, 0x50, 0x42, 0x33, 0xf4, 0x37, 0xc0, 0x26, 0xef, 0x26, 0xf7, + 0xaf, 0xb4, 0x5e, 0xae, 0xff, 0x8f, 0xec, 0xfc, 0x7d, 0x4f}, + true}, + // tcID: 67 + {67, + params_ml_kem1024_test_mode, + // entropy + {0xc8, 0x29, 0xcd, 0x10, 0xac, 0x6b, 0x55, 0x1d, 0xae, 0xfd, 0x57, + 0xe4, 0x06, 0x79, 0xdd, 0x9b, 0xe5, 0xf8, 0x7d, 0xa4, 0x2f, 0xbe, + 0x9d, 0xc6, 0x7b, 0xd9, 0xef, 0x08, 0x9f, 0xb6, 0x64, 0x8a}, + // publicKey + {0x24, 0xdb, 0x77, 0x6a, 0x03, 0x71, 0x9c, 0xc5, 0xbe, 0xc6, 0x70, 0x69, + 0xf3, 0x63, 0x04, 0x8f, 0x41, 0x34, 0x8e, 0x14, 0xce, 0x06, 0x69, 0x78, + 0xf1, 0xab, 0xb7, 0x46, 0x27, 0xa3, 0x18, 0x11, 0x21, 0x65, 0x21, 0x99, + 0x23, 0x62, 0x5f, 0x84, 0x76, 0x93, 0x31, 0xb1, 0xbd, 0xa2, 0x25, 0x90, + 0x29, 0x35, 0x0a, 0xd7, 0x36, 0x69, 0x35, 0xf9, 0x09, 0xe4, 0x96, 0x3b, + 0x68, 0x78, 0x5c, 0xd5, 0x1b, 0xc9, 0xee, 0xc6, 0x5f, 0x10, 0xd5, 0x54, + 0xa6, 0x32, 0xbd, 0x33, 0x2a, 0x06, 0x98, 0xc0, 0x9a, 0x51, 0x8b, 0x43, + 0x09, 0x20, 0x61, 0x9f, 0x42, 0x4c, 0x21, 0xe1, 0x32, 0x55, 0x31, 0x69, + 0x81, 0x68, 0xa9, 0x02, 0xfb, 0x00, 0x77, 0x04, 0x11, 0x8a, 0x1b, 0x55, + 0x87, 0xea, 0x70, 0x9f, 0x41, 0x8d, 0xed, 0x70, 0x47, 0x4f, 0x96, 0x7e, + 0xd9, 0x87, 0x4f, 0x1a, 0x29, 0x62, 0xd8, 0x3b, 0x9b, 0x16, 0xe8, 0x77, + 0x54, 0x37, 0x0d, 0x0c, 0x62, 0x99, 0x45, 0xd2, 0x3f, 0xca, 0x99, 0xab, + 0x72, 0xc5, 0x35, 0xdc, 0x3b, 0xcc, 0x7d, 0x19, 0x83, 0x99, 0x1b, 0xaa, + 0x2e, 0x13, 0x93, 0x6a, 0x1c, 0x81, 0x14, 0x52, 0x2c, 0x7c, 0x15, 0x61, + 0xfc, 0x62, 0x3c, 0x59, 0xa3, 0xc8, 0x1a, 0xa1, 0x8b, 0x6a, 0xfa, 0x6f, + 0xf3, 0x66, 0x11, 0x32, 0x04, 0xb5, 0x6b, 0x5c, 0x52, 0x61, 0xd5, 0x41, + 0x62, 0xf8, 0x36, 0x2a, 0xf1, 0x81, 0x81, 0xa0, 0x00, 0x22, 0xeb, 0x57, + 0xf2, 0xb4, 0x18, 0xab, 0x10, 0x69, 0xc6, 0xc7, 0x18, 0x53, 0x6c, 0x37, + 0x55, 0x42, 0x42, 0x3e, 0x55, 0xcb, 0xc5, 0x91, 0x82, 0x10, 0x40, 0x46, + 0xb2, 0x82, 0x74, 0x1f, 0x31, 0x2f, 0xa0, 0x68, 0x56, 0x21, 0xa0, 0x45, + 0xa0, 0xcb, 0x80, 0x0a, 0x34, 0x62, 0xa4, 0x58, 0x07, 0x46, 0x01, 0x24, + 0xa1, 0x7c, 0x4d, 0x8b, 0xc0, 0x30, 0xd7, 0x6b, 0x9f, 0xc8, 0xeb, 0x02, + 0x1d, 0xa1, 0x46, 0x05, 0xf7, 0x1b, 0x09, 0x7b, 0x1f, 0xd2, 0x87, 0x39, + 0x6b, 0x02, 0x95, 0xe7, 0xdc, 0x60, 0xc9, 0xba, 0x4a, 0xd1, 0xe6, 0x61, + 0xda, 0x82, 0x11, 0x94, 0x42, 0xc0, 0x5b, 0x54, 0x79, 0xf2, 0xc0, 0x56, + 0xfa, 0x4b, 0x86, 0xd5, 0x17, 0x9f, 0x77, 0x33, 0x78, 0xa2, 0x79, 0x13, + 0xc5, 0x7b, 0x80, 0x62, 0x36, 0x59, 0x00, 0x94, 0x81, 0x0a, 0x61, 0x0c, + 0xce, 0xa9, 0x42, 0xd3, 0xb0, 0x84, 0x93, 0x08, 0x9c, 0xb5, 0x95, 0x78, + 0x06, 0x59, 0x8c, 0xbb, 0x56, 0x03, 0xad, 0xa9, 0x07, 0x9f, 0x96, 0x5c, + 0xd4, 0xfb, 0x02, 0xeb, 0x27, 0x26, 0x07, 0x99, 0x83, 0xd5, 0x24, 0x35, + 0x02, 0xf4, 0xca, 0x05, 0xb0, 0x44, 0xcc, 0x23, 0x30, 0xfe, 0x95, 0xa6, + 0xa8, 0xd7, 0x03, 0x91, 0x61, 0x4d, 0xd2, 0xfb, 0x26, 0xa2, 0xbc, 0x3e, + 0xbd, 0x26, 0x13, 0x8f, 0x35, 0x7d, 0x89, 0x16, 0x0b, 0xcc, 0xfc, 0x3f, + 0x13, 0x08, 0x66, 0xa4, 0x03, 0x60, 0x0e, 0x24, 0x43, 0x6d, 0x9c, 0x3c, + 0x90, 0x1b, 0x57, 0x78, 0x27, 0x5e, 0x65, 0x0a, 0x72, 0x0b, 0xbb, 0x81, + 0x70, 0x61, 0x66, 0xd8, 0x39, 0x6b, 0xf8, 0x53, 0x68, 0xfd, 0x20, 0x6c, + 0x5b, 0x34, 0x6f, 0x34, 0x77, 0x20, 0x4b, 0x4a, 0xa8, 0x20, 0xb5, 0x20, + 0x32, 0x2c, 0x1a, 0x50, 0x12, 0xaa, 0xbe, 0x06, 0x2a, 0xe4, 0xa2, 0x6a, + 0xa0, 0xb6, 0x99, 0xa7, 0x16, 0xa6, 0x7c, 0x53, 0x2d, 0xf7, 0x71, 0x41, + 0x89, 0x7b, 0x19, 0xda, 0x28, 0x49, 0x6e, 0xd6, 0xc3, 0xb1, 0xa4, 0x3a, + 0x5e, 0x2a, 0x57, 0xc8, 0x8a, 0x4f, 0x49, 0xc0, 0x13, 0x05, 0x95, 0x55, + 0x11, 0xb9, 0x5c, 0x37, 0x62, 0x5f, 0x44, 0xfc, 0x5b, 0x41, 0xf1, 0x47, + 0xd0, 0x77, 0x4f, 0xb0, 0x28, 0x93, 0x93, 0x10, 0x08, 0x45, 0xe8, 0xac, + 0x9f, 0xc5, 0x00, 0xec, 0x3a, 0x79, 0xe3, 0x32, 0x12, 0xc9, 0x77, 0x94, + 0x77, 0x31, 0x12, 0x34, 0x20, 0x5b, 0xd8, 0x8c, 0x82, 0x10, 0x2c, 0x15, + 0x27, 0x95, 0x9e, 0x7c, 0x82, 0x6c, 0x3a, 0x89, 0x3c, 0x27, 0x63, 0x83, + 0x76, 0xf0, 0x99, 0x84, 0x0b, 0x50, 0xc8, 0xc1, 0xa7, 0x08, 0xd3, 0x1d, + 0xd7, 0xaa, 0xb5, 0xec, 0xd3, 0xaa, 0x82, 0xb7, 0x46, 0x1e, 0x57, 0xa9, + 0xe9, 0xa4, 0x1c, 0x0c, 0xfc, 0x32, 0x8b, 0x97, 0xcc, 0x3b, 0xfa, 0x51, + 0xcc, 0xc9, 0x68, 0xc4, 0x35, 0x92, 0x6b, 0x21, 0x64, 0x45, 0x88, 0x18, + 0x29, 0xc4, 0x7b, 0xe4, 0xe7, 0x8f, 0x1f, 0x01, 0x39, 0x55, 0xd7, 0x54, + 0x99, 0xd5, 0x0d, 0x7b, 0xb1, 0x54, 0xaf, 0xbb, 0x41, 0xf8, 0xf8, 0x05, + 0x45, 0xb4, 0x93, 0xe6, 0x01, 0xa5, 0x8b, 0x89, 0x87, 0x30, 0xbc, 0x84, + 0x2a, 0x0a, 0xbd, 0xaf, 0x64, 0xa5, 0x44, 0x32, 0x0f, 0xce, 0xe3, 0x68, + 0xc2, 0x42, 0x35, 0x7a, 0xf2, 0xa9, 0xcf, 0x04, 0x37, 0x46, 0x99, 0x15, + 0x6f, 0x10, 0x24, 0x86, 0x8c, 0x43, 0x92, 0x44, 0x69, 0xbb, 0x37, 0x3a, + 0x0f, 0x9b, 0xc8, 0x9c, 0x30, 0x3c, 0x96, 0x6b, 0xcd, 0x21, 0x40, 0x2f, + 0x33, 0x98, 0x02, 0xb9, 0x11, 0x76, 0xb3, 0x88, 0x37, 0xc2, 0x22, 0x83, + 0x03, 0xd3, 0x95, 0x09, 0x69, 0xc7, 0xd8, 0xa7, 0x55, 0x26, 0x58, 0xb1, + 0x28, 0x05, 0x00, 0x18, 0x18, 0x1d, 0x1a, 0x4a, 0x03, 0x1f, 0x19, 0x1d, + 0xde, 0x94, 0x81, 0x00, 0x0d, 0x1c, 0xf6, 0xd2, 0xad, 0xa2, 0x2b, 0x53, + 0x30, 0x47, 0xbe, 0xc4, 0x71, 0x46, 0x2f, 0x26, 0xc1, 0x27, 0x75, 0xb0, + 0x06, 0x92, 0xac, 0x68, 0x63, 0x69, 0xeb, 0x9a, 0x8f, 0xa1, 0x59, 0x56, + 0x4e, 0x54, 0xc6, 0xe1, 0x77, 0x7f, 0xd6, 0x02, 0x3a, 0xfe, 0x43, 0xb8, + 0xdc, 0xc1, 0x22, 0x9c, 0x73, 0x60, 0x03, 0x80, 0x5b, 0xb4, 0xd4, 0x68, + 0x3d, 0xab, 0xbd, 0xcb, 0x16, 0x70, 0x0d, 0x3c, 0x7f, 0x6b, 0xc1, 0x30, + 0xac, 0xdb, 0x74, 0x8f, 0x32, 0x09, 0x94, 0xb2, 0x96, 0x9a, 0xb6, 0x73, + 0x0e, 0x39, 0x5c, 0x6a, 0x27, 0x02, 0x54, 0xc6, 0x98, 0xa3, 0x62, 0x7a, + 0xcb, 0x03, 0x52, 0x24, 0x54, 0xb7, 0xc5, 0xe9, 0x47, 0xd8, 0x1c, 0x28, + 0xb6, 0x5b, 0x9e, 0x4c, 0x3a, 0x09, 0x6a, 0xd8, 0x78, 0xb1, 0xdb, 0x75, + 0xd9, 0x48, 0x0f, 0x83, 0xbc, 0x21, 0x07, 0x90, 0x9b, 0x53, 0xe8, 0x60, + 0xa8, 0xf8, 0x7d, 0x48, 0xca, 0xce, 0xa8, 0x38, 0x01, 0x14, 0x04, 0xc5, + 0xe5, 0x7c, 0x10, 0x31, 0xc4, 0x53, 0x44, 0x0c, 0x05, 0xe3, 0x50, 0xb3, + 0x2d, 0xe2, 0x04, 0x13, 0xb3, 0xa5, 0xe7, 0x92, 0x8a, 0x6c, 0xf6, 0x3f, + 0x14, 0x98, 0xa1, 0x28, 0xd7, 0xbb, 0x3a, 0xdc, 0x1d, 0x1f, 0xc0, 0xc0, + 0xde, 0xf7, 0x98, 0x43, 0x85, 0x05, 0xed, 0x53, 0x97, 0x03, 0xa2, 0x54, + 0x3b, 0xa8, 0xb3, 0x26, 0x56, 0x0c, 0x1d, 0x12, 0xcf, 0x96, 0x73, 0x59, + 0xbf, 0x93, 0x64, 0x48, 0x95, 0x83, 0x91, 0x0a, 0x7f, 0x09, 0x29, 0x7f, + 0xb5, 0x99, 0xaa, 0x83, 0x10, 0x04, 0xac, 0x65, 0x04, 0x4f, 0x98, 0xb8, + 0x16, 0x42, 0x1a, 0x1c, 0x98, 0xb3, 0xb1, 0x47, 0xac, 0x0a, 0xb7, 0x44, + 0x32, 0xb1, 0x8e, 0x9a, 0xa0, 0xaf, 0x81, 0x2a, 0x32, 0x9a, 0xb3, 0x34, + 0x14, 0x87, 0x73, 0x68, 0xd3, 0x92, 0x4a, 0x95, 0x7c, 0x4c, 0xdb, 0xc0, + 0x38, 0xe0, 0x53, 0xe7, 0x86, 0x1b, 0x9b, 0x38, 0x2a, 0xd7, 0x46, 0xc7, + 0xe8, 0x92, 0x05, 0xd5, 0x7a, 0x79, 0x7b, 0x02, 0x64, 0xfe, 0x96, 0x00, + 0xf0, 0xdc, 0x31, 0x53, 0x9a, 0x24, 0xe8, 0x33, 0x43, 0x3d, 0x68, 0x4e, + 0x72, 0x13, 0xad, 0x32, 0x81, 0x3a, 0x88, 0x64, 0x40, 0x52, 0x88, 0x9d, + 0x6d, 0x53, 0x86, 0x81, 0x4a, 0x1e, 0x40, 0xa1, 0x86, 0xa9, 0x62, 0x9d, + 0x82, 0x55, 0xcb, 0x1c, 0x0a, 0x09, 0xcd, 0xd7, 0x4b, 0x90, 0x70, 0xac, + 0xf5, 0x73, 0x3d, 0x27, 0x83, 0x95, 0x43, 0x2a, 0xaa, 0x47, 0xd1, 0x62, + 0xfa, 0x87, 0xc4, 0x51, 0x64, 0x8b, 0x69, 0xa6, 0xc9, 0xe6, 0x82, 0x68, + 0xeb, 0xcb, 0xcc, 0x48, 0x60, 0x0d, 0x87, 0xe0, 0x0a, 0x93, 0xd4, 0x25, + 0x76, 0xc1, 0x3e, 0x96, 0x31, 0x27, 0x5f, 0xe1, 0x66, 0x31, 0x01, 0x13, + 0x63, 0x9c, 0x5e, 0x47, 0xc0, 0x88, 0x2b, 0x35, 0xc1, 0x3f, 0xd0, 0x8e, + 0xcb, 0x70, 0x47, 0x05, 0x03, 0x56, 0x92, 0xc1, 0x1d, 0x8e, 0x94, 0x76, + 0x16, 0xf7, 0x80, 0xa5, 0x89, 0x2b, 0xb8, 0x58, 0x5b, 0x8c, 0xdb, 0x8f, + 0xfc, 0x3b, 0x72, 0x29, 0x77, 0x9a, 0x7e, 0xd7, 0xc7, 0x87, 0x53, 0xad, + 0x38, 0x8c, 0xb9, 0x8c, 0xd5, 0xc8, 0x46, 0x52, 0x1f, 0x14, 0x78, 0xc1, + 0xbe, 0xec, 0x53, 0x58, 0x4b, 0x43, 0x21, 0xb6, 0x63, 0x41, 0xe2, 0x48, + 0xc4, 0x95, 0x0a, 0xb7, 0x8a, 0x67, 0x1a, 0xf6, 0xb4, 0x0d, 0x63, 0xbc, + 0x71, 0x64, 0x44, 0x20, 0x7a, 0xaf, 0x37, 0xaa, 0xbf, 0x6c, 0x44, 0x5e, + 0xef, 0xf3, 0xad, 0xfc, 0xa6, 0x45, 0x92, 0xac, 0x7f, 0xf4, 0x34, 0xa3, + 0x3d, 0x52, 0x67, 0xd4, 0x89, 0x41, 0x09, 0xa5, 0x3c, 0xd4, 0x92, 0x28, + 0xfd, 0xf9, 0x71, 0x53, 0x31, 0x8e, 0xa2, 0x93, 0x4b, 0x80, 0x06, 0x7b, + 0x35, 0xcb, 0x12, 0x40, 0x77, 0x47, 0x4e, 0x5a, 0x2e, 0x36, 0x76, 0x72, + 0xa6, 0x50, 0x7b, 0xa3, 0xa9, 0x6e, 0x0b, 0xb1, 0x22, 0x23, 0xe3, 0x57, + 0x4b, 0xd4, 0xbe, 0x06, 0x96, 0xc9, 0x67, 0x45, 0x3d, 0x45, 0x06, 0xab, + 0x3a, 0x97, 0x79, 0x7c, 0x39, 0x2a, 0xac, 0x68, 0x5e, 0x41, 0x17, 0x7d, + 0x4a, 0xfb, 0x60, 0xca, 0x24, 0x91, 0x72, 0x59, 0xa8, 0x48, 0x39, 0xca, + 0x25, 0x97, 0xba, 0x2b, 0x0c, 0x88, 0x22, 0xe3, 0x99, 0x32, 0xfc, 0x04, + 0x8b, 0x0a, 0x3f, 0xee, 0xe7, 0xb5, 0x2f, 0xa6, 0x3a, 0xca, 0x42, 0xcc, + 0x99, 0x0c, 0x77, 0xd9, 0xcb, 0x87, 0xb9, 0x12, 0x92, 0xad, 0x51, 0x3e, + 0x8b, 0xb8, 0x61, 0x79, 0x25, 0x54, 0x24, 0xe3, 0xa7, 0x56, 0x77, 0x92, + 0x5a, 0x18, 0x8d, 0xcf, 0xd1, 0x53, 0x17, 0x04, 0x44, 0x3c, 0x19, 0xc9, + 0x8c, 0xe6, 0x68, 0xa5, 0x38, 0x24, 0x64, 0x7c, 0x82, 0xed, 0x21, 0xc0, + 0xa0, 0xd7, 0x76, 0x48, 0x9b, 0xa0, 0xa0, 0x94, 0x51, 0xe3, 0x15, 0x4a, + 0x94, 0x76, 0x4a, 0xfe, 0x61, 0x63, 0xdc, 0xea, 0x1e, 0x62, 0x30, 0x60, + 0x1e, 0x99, 0x46, 0x63, 0x70, 0x27, 0x70, 0x23, 0x98, 0xfd, 0xa2, 0x65, + 0x93, 0x95, 0x8c, 0x27, 0x77, 0x70, 0xe4, 0x45, 0x28, 0xfb, 0x74, 0xa3, + 0x08, 0x20, 0x42, 0xbe, 0xd5, 0x37, 0x71, 0x5a, 0x77, 0xf2, 0x87, 0x83, + 0xd5, 0x1a, 0xb5, 0xb0, 0x84, 0xc4, 0x2c, 0x40, 0x92, 0xbb, 0xd5, 0x68, + 0x6b, 0xe9, 0x0f, 0x6c, 0x54, 0xce, 0x94, 0xea, 0x51, 0x2f, 0x21, 0x71, + 0x12, 0x14, 0xb3, 0x8f, 0xb4, 0x7c, 0x16, 0x64, 0x0e, 0x9d, 0xa5, 0x8c, + 0x5f, 0xa0, 0x0b, 0xca, 0xe1, 0x81, 0x41, 0x0c, 0x58, 0x93, 0x58, 0xb8, + 0x86, 0x23, 0x8b, 0xbb, 0xe7, 0x75, 0x28, 0xaa, 0x49, 0x82, 0x17, 0x41, + 0x8e, 0x09, 0x23, 0xbb, 0xa7, 0xc7, 0x93, 0x19, 0x23, 0x17, 0x39, 0x97, + 0x49, 0xb5, 0x5e, 0x3f, 0x9a, 0x7c, 0x21, 0xc3, 0x7d, 0xa0, 0xa2, 0x97, + 0x21, 0x80, 0x5f, 0x9d, 0xb2, 0x70, 0xdb, 0x80, 0xb0, 0xf5, 0x39, 0xc0, + 0x84, 0x98, 0x64, 0x6b, 0xd7, 0x8a, 0x44, 0x11, 0xc5, 0xf2, 0x20, 0x28, + 0xb6, 0x9a, 0x9b, 0x57, 0xd3, 0xb0, 0xaa, 0x30, 0x60, 0xa7, 0x12, 0x71, + 0xec, 0x2c, 0xa2, 0xb7, 0xad, 0xdb, 0x3f, 0x7d, 0x4a, 0xf9, 0x59, 0xe8, + 0x80, 0x55, 0x35, 0x42, 0x09, 0x17, 0x11, 0x96}, + // cipherTextDigest + {0x18, 0x6e, 0x40, 0x3c, 0x7f, 0xc6, 0xb9, 0xc0, 0x19, 0x9d, 0x42, + 0x9f, 0xed, 0xd0, 0xeb, 0x25, 0xbf, 0xdb, 0x4b, 0xfb, 0xc0, 0xa9, + 0x2d, 0x0f, 0x0e, 0xbe, 0xaa, 0xc3, 0x41, 0xa0, 0x83, 0xc5}, + // secret + {0xe3, 0xf0, 0xfe, 0x4e, 0x7b, 0x56, 0xd1, 0x6f, 0x32, 0xb6, 0x41, + 0x9e, 0xc7, 0x00, 0xac, 0x80, 0x8c, 0xaf, 0x20, 0x90, 0xb6, 0x5b, + 0x3f, 0x3a, 0x14, 0x23, 0xb0, 0xfd, 0x09, 0xa4, 0x37, 0x19}, + true}, + // tcID: 68 + {68, + params_ml_kem1024_test_mode, + // entropy + {0xf9, 0x6a, 0x2c, 0x83, 0xb2, 0x82, 0x07, 0x67, 0x33, 0x3f, 0x97, + 0xb9, 0x6b, 0x74, 0x15, 0xfe, 0x68, 0x02, 0x7e, 0xba, 0x19, 0x77, + 0x0e, 0x8f, 0x05, 0x2c, 0x46, 0x03, 0x75, 0x23, 0xd0, 0x1a}, + // publicKey + {0xb9, 0xcc, 0xb7, 0x15, 0x96, 0x7a, 0x7b, 0x74, 0xce, 0x65, 0x0c, 0x2d, + 0xb8, 0xc3, 0x95, 0x97, 0xbc, 0x65, 0x48, 0x29, 0x5d, 0xbc, 0x14, 0x21, + 0xae, 0x17, 0xc1, 0x79, 0xb1, 0x63, 0xea, 0xe6, 0x71, 0xf3, 0xe1, 0x8a, + 0x97, 0x5a, 0x70, 0x1f, 0x35, 0x16, 0x67, 0xb8, 0xc4, 0x70, 0xa1, 0xa5, + 0x85, 0xc1, 0x07, 0xf4, 0x41, 0x54, 0x90, 0x23, 0x1c, 0xce, 0xb5, 0x8e, + 0x73, 0x97, 0xbd, 0x9a, 0x5c, 0x1e, 0xae, 0xd5, 0x66, 0x76, 0x79, 0x58, + 0x09, 0xb6, 0x2f, 0x1a, 0x36, 0x10, 0xb0, 0x81, 0x32, 0x93, 0x1b, 0x00, + 0x8b, 0x53, 0xa3, 0xed, 0xac, 0x9f, 0x38, 0x06, 0x06, 0xd9, 0x0c, 0x71, + 0xc5, 0x22, 0x91, 0x37, 0xec, 0xb2, 0xea, 0xc3, 0x3b, 0xf9, 0xa4, 0x40, + 0x7e, 0xa5, 0x06, 0xf5, 0x90, 0xc0, 0xc3, 0x74, 0x2d, 0xf8, 0x1a, 0x84, + 0x79, 0xca, 0x5c, 0xc8, 0x52, 0xb8, 0x13, 0x78, 0xaa, 0x97, 0x3c, 0x12, + 0xc3, 0x50, 0xcb, 0x4b, 0x56, 0x87, 0x3a, 0xd3, 0x14, 0x8d, 0x24, 0xa3, + 0x6c, 0x06, 0x0c, 0xf9, 0x27, 0x97, 0xa9, 0x30, 0x6f, 0xc8, 0x9c, 0x27, + 0x6c, 0xb4, 0x07, 0xae, 0xe7, 0xbf, 0x87, 0x02, 0x5e, 0x25, 0xd1, 0x2b, + 0xc4, 0xb4, 0xbb, 0xa1, 0x10, 0x7b, 0x9d, 0xc0, 0x8d, 0xb8, 0xbc, 0x1d, + 0xe8, 0xb1, 0x9c, 0xa9, 0x51, 0x1e, 0x59, 0x2a, 0x8f, 0x82, 0xeb, 0x10, + 0x51, 0x51, 0xc3, 0x81, 0x09, 0xb3, 0xc2, 0x4b, 0x09, 0x01, 0x50, 0x34, + 0x52, 0x05, 0x92, 0x32, 0xb0, 0x04, 0x26, 0x7c, 0x38, 0x0b, 0xd1, 0x5e, + 0xc1, 0xa2, 0x32, 0xbd, 0x6a, 0x09, 0x77, 0xfc, 0x95, 0xad, 0x77, 0xc8, + 0xdb, 0x9a, 0xae, 0x5a, 0x18, 0x2a, 0x9c, 0xa9, 0x2b, 0x8a, 0xa3, 0x1f, + 0x1a, 0x2b, 0x6c, 0xcb, 0xd2, 0x23, 0xb9, 0x77, 0x60, 0xba, 0x05, 0x5a, + 0xcd, 0x20, 0x92, 0x32, 0xc0, 0x00, 0xa2, 0x99, 0x03, 0xcf, 0x55, 0x6e, + 0x4e, 0xd5, 0x2f, 0x3c, 0x9a, 0xb6, 0x5d, 0x7c, 0x66, 0xfe, 0xbc, 0x77, + 0xa5, 0xe9, 0x97, 0xd0, 0x3c, 0x75, 0xc2, 0xf1, 0xc5, 0x18, 0xa7, 0x2e, + 0xd0, 0xe3, 0x37, 0x09, 0x81, 0x48, 0x0a, 0x90, 0x4b, 0x07, 0x64, 0x57, + 0x38, 0xc1, 0x11, 0x0e, 0x46, 0x73, 0xee, 0x94, 0x6a, 0x7e, 0xe1, 0xbc, + 0x73, 0x35, 0x99, 0x3b, 0x48, 0x31, 0x36, 0x92, 0x0f, 0x48, 0xa1, 0xc1, + 0x3f, 0xd3, 0xb0, 0xe7, 0xa0, 0x6d, 0x29, 0xc0, 0x44, 0xc9, 0x06, 0x04, + 0x91, 0xe6, 0x67, 0x36, 0x27, 0x62, 0x5a, 0x58, 0xb2, 0x40, 0x92, 0x6b, + 0x05, 0x56, 0x37, 0x9f, 0xa1, 0x4e, 0x7f, 0x6b, 0x81, 0x60, 0x90, 0x88, + 0xfd, 0xda, 0xc5, 0x2d, 0xf9, 0x94, 0x70, 0x57, 0x04, 0x78, 0x17, 0x75, + 0xf6, 0xc9, 0x2f, 0xbd, 0x0c, 0x21, 0x3d, 0x99, 0x7c, 0x91, 0xc3, 0x2c, + 0x0e, 0x7b, 0x0e, 0x7c, 0xf8, 0x7f, 0x7a, 0xac, 0x4b, 0xb8, 0x43, 0xc5, + 0x5a, 0x11, 0x45, 0xfe, 0x1a, 0x5b, 0x02, 0x63, 0x54, 0x3e, 0x49, 0xc6, + 0xa9, 0x17, 0x8a, 0x45, 0xc8, 0x2b, 0x18, 0xf5, 0x56, 0x5d, 0x15, 0xce, + 0x1d, 0xec, 0x98, 0x0b, 0x9b, 0xa5, 0xe9, 0x06, 0xba, 0x89, 0x83, 0x22, + 0x80, 0x60, 0xb2, 0xc4, 0xc7, 0x5b, 0x99, 0xa8, 0x4f, 0xe7, 0x92, 0x49, + 0x7f, 0xcc, 0xb6, 0xf3, 0x67, 0x5b, 0xa4, 0xdb, 0x99, 0x56, 0x63, 0x94, + 0x9e, 0x43, 0xc9, 0xfc, 0xb9, 0x62, 0x0b, 0x5a, 0xc6, 0x0e, 0xb0, 0x23, + 0x44, 0xd9, 0xa3, 0x70, 0x67, 0x72, 0x4d, 0x7a, 0xcb, 0xf6, 0xc0, 0x02, + 0x1d, 0x07, 0x67, 0x91, 0x68, 0x1b, 0x05, 0xf6, 0xb9, 0xe3, 0x52, 0x1e, + 0x46, 0x32, 0x4c, 0xa1, 0x0c, 0x70, 0x9d, 0x58, 0xb5, 0x25, 0xe0, 0x6a, + 0xe7, 0x0a, 0x7e, 0x1d, 0xf1, 0x61, 0xf5, 0x57, 0x73, 0xfa, 0x1b, 0x2c, + 0xa9, 0xf1, 0x2e, 0x49, 0x54, 0x25, 0xbe, 0x89, 0x76, 0x7f, 0xb0, 0xaf, + 0xa9, 0x66, 0x1a, 0xbf, 0x4a, 0x08, 0xc6, 0x28, 0xbb, 0xfa, 0xbc, 0x6f, + 0xc1, 0x16, 0x13, 0x68, 0xc7, 0x88, 0x52, 0xe8, 0xaa, 0x86, 0x3c, 0xa3, + 0x5d, 0xe7, 0x73, 0xc0, 0x5b, 0x27, 0xfb, 0xca, 0xb1, 0x5d, 0xf5, 0x5d, + 0xea, 0x22, 0x10, 0xb3, 0x34, 0x97, 0x33, 0x41, 0x5e, 0x2f, 0x2c, 0x7b, + 0x81, 0xd8, 0x45, 0x8e, 0x02, 0x26, 0xe2, 0xc4, 0xcf, 0xea, 0x29, 0x6b, + 0xdd, 0x2c, 0x03, 0xc5, 0x94, 0xc6, 0x93, 0x29, 0x6f, 0x7d, 0xda, 0x19, + 0x28, 0x72, 0x15, 0xc4, 0x2a, 0x65, 0xb4, 0x5a, 0xa9, 0xd8, 0xa6, 0x0c, + 0x46, 0x03, 0x97, 0xcf, 0x1b, 0x81, 0xec, 0x10, 0x7f, 0x56, 0x28, 0xb4, + 0xf4, 0x98, 0x73, 0x5d, 0x23, 0xce, 0x6c, 0xd0, 0x08, 0x54, 0xac, 0x74, + 0x19, 0x5b, 0x7a, 0x97, 0x89, 0x87, 0x7a, 0xc6, 0xb4, 0x43, 0x69, 0x3b, + 0xa1, 0xb6, 0x16, 0xf7, 0xc1, 0x43, 0x53, 0xc5, 0x51, 0x36, 0xb6, 0x3d, + 0x86, 0x0a, 0x14, 0xa0, 0xaa, 0x4c, 0x3a, 0x23, 0x75, 0x4a, 0x6b, 0x16, + 0xd6, 0x5b, 0x9e, 0x35, 0x84, 0x0f, 0x67, 0x71, 0x71, 0xb0, 0x2c, 0xb1, + 0x8c, 0x7b, 0x70, 0x07, 0x70, 0x02, 0xcf, 0x03, 0x00, 0x5b, 0x3a, 0x24, + 0xf8, 0x69, 0x61, 0x92, 0x01, 0x2d, 0xb3, 0x85, 0x2f, 0xd0, 0x97, 0xaf, + 0x5f, 0xc3, 0x48, 0x33, 0x9b, 0x90, 0x6b, 0xdb, 0x15, 0x14, 0xa2, 0x4c, + 0xa2, 0xe2, 0x31, 0x72, 0x3b, 0x1d, 0x00, 0x50, 0xaf, 0xa1, 0xd6, 0xa7, + 0x0e, 0x5b, 0x58, 0xb1, 0x35, 0x34, 0xcb, 0xa7, 0x9d, 0x54, 0x55, 0x7d, + 0x60, 0xa0, 0x3e, 0x11, 0xb9, 0xb9, 0x0e, 0x02, 0x53, 0x9e, 0x05, 0x54, + 0x76, 0x73, 0x56, 0x44, 0x40, 0x36, 0x43, 0x83, 0xb1, 0x42, 0xd8, 0xc8, + 0x35, 0x95, 0x6f, 0x8a, 0xeb, 0x9a, 0xa1, 0xb4, 0xa6, 0x51, 0x67, 0x98, + 0x6a, 0x5b, 0x17, 0x30, 0x70, 0xa3, 0x73, 0x32, 0x41, 0x23, 0xc0, 0x0b, + 0x56, 0x88, 0x8e, 0x18, 0x56, 0x2c, 0xc8, 0xd3, 0x73, 0x2a, 0x55, 0x2a, + 0x7b, 0x11, 0x80, 0xba, 0xba, 0x9e, 0xeb, 0xcc, 0xc0, 0x69, 0x83, 0x9c, + 0xe1, 0x58, 0x11, 0x5e, 0x77, 0x19, 0x84, 0x29, 0xcc, 0xd0, 0x16, 0x70, + 0x6a, 0x96, 0x9a, 0x44, 0x28, 0x7b, 0x4b, 0x2a, 0xa2, 0xda, 0x36, 0xc0, + 0xf9, 0xc8, 0x2d, 0x3e, 0x05, 0x13, 0xfd, 0x87, 0xbf, 0x3a, 0x60, 0x3d, + 0xea, 0x42, 0xb9, 0x8e, 0x12, 0x01, 0x5a, 0xab, 0x06, 0xdc, 0x83, 0x0e, + 0x97, 0x98, 0xa8, 0x27, 0x58, 0x66, 0xfc, 0x4a, 0x3a, 0x38, 0x49, 0x28, + 0x2a, 0x29, 0x8d, 0x29, 0x04, 0x83, 0x76, 0x20, 0x11, 0x16, 0xf2, 0x65, + 0x61, 0x20, 0xc4, 0x29, 0xcc, 0x48, 0x35, 0xe8, 0x5c, 0x12, 0x33, 0x7d, + 0x5a, 0xa2, 0xce, 0xd3, 0x6c, 0x49, 0x43, 0x03, 0x04, 0x7e, 0xd4, 0x82, + 0xc2, 0x18, 0xc4, 0x4b, 0x18, 0xcf, 0x6b, 0x6b, 0x55, 0x1c, 0x7b, 0x43, + 0x9b, 0xa8, 0xae, 0x58, 0x97, 0x1c, 0x82, 0xaa, 0xc5, 0xe9, 0x91, 0x2b, + 0xca, 0x5a, 0xae, 0x7e, 0x71, 0x9d, 0x5f, 0xfa, 0xcc, 0x45, 0xf0, 0x44, + 0x9a, 0xe4, 0xce, 0x83, 0x35, 0x45, 0x87, 0x60, 0xce, 0x9a, 0x8c, 0x9b, + 0x06, 0x33, 0xbc, 0x42, 0x04, 0x9d, 0x8e, 0xa2, 0x3a, 0x4c, 0x31, 0x10, + 0x94, 0x07, 0xd0, 0xa7, 0x75, 0x02, 0x55, 0x58, 0x22, 0x1f, 0x92, 0xa4, + 0xda, 0xe5, 0x87, 0xe7, 0x82, 0x1f, 0x7f, 0x13, 0x0c, 0x1e, 0xab, 0x88, + 0x80, 0xb0, 0x6b, 0xc1, 0x77, 0xa8, 0x70, 0xa3, 0x4e, 0x3d, 0x6a, 0x00, + 0xe8, 0xf4, 0x3c, 0xa3, 0x80, 0x98, 0xfe, 0x59, 0xa6, 0xd8, 0x6c, 0x88, + 0x56, 0x18, 0x7c, 0x7e, 0x0a, 0x78, 0x85, 0x17, 0x09, 0x05, 0xb3, 0x35, + 0xcc, 0xf8, 0xcb, 0x45, 0xb2, 0x91, 0x23, 0x86, 0x20, 0x2a, 0x85, 0x69, + 0xa7, 0x8a, 0x65, 0xee, 0xc9, 0xb6, 0x0c, 0x9b, 0x75, 0xc6, 0xda, 0xa2, + 0x5a, 0xd8, 0x61, 0x5f, 0x81, 0x17, 0xad, 0x3b, 0x2c, 0x51, 0xa6, 0x67, + 0xbe, 0x33, 0x28, 0xb0, 0xf3, 0x7a, 0x3d, 0x3c, 0xac, 0x14, 0x86, 0xc9, + 0x50, 0x28, 0x29, 0x53, 0x2b, 0x87, 0x23, 0x34, 0x19, 0xa7, 0x55, 0x9d, + 0x46, 0xcb, 0xb7, 0xdd, 0x5b, 0xb8, 0x1b, 0x3b, 0x1c, 0x6c, 0xaa, 0x84, + 0xe1, 0xbc, 0x8f, 0x12, 0x67, 0x9d, 0xee, 0xf8, 0x82, 0x22, 0x2a, 0xc6, + 0xc0, 0xf3, 0x42, 0x06, 0x95, 0x5b, 0x10, 0x49, 0x97, 0x11, 0xec, 0x3e, + 0xc2, 0xd9, 0x3a, 0xc7, 0x39, 0xbc, 0x26, 0x90, 0x52, 0xfb, 0xb9, 0x3e, + 0xfd, 0xa9, 0x28, 0x11, 0xd9, 0x5a, 0xcb, 0x02, 0xc5, 0x91, 0xeb, 0x4e, + 0xae, 0x81, 0x53, 0x84, 0x66, 0x01, 0xb5, 0xdc, 0x9f, 0xbc, 0x48, 0x56, + 0x8d, 0x36, 0x92, 0xc2, 0x2c, 0x8f, 0xa1, 0xeb, 0xbb, 0xcb, 0x02, 0x29, + 0xce, 0x76, 0x59, 0xcc, 0x51, 0x11, 0xf5, 0xe9, 0x94, 0x92, 0x66, 0xad, + 0xe1, 0xa6, 0x6b, 0xe4, 0xc3, 0xa8, 0xc3, 0x00, 0xb0, 0xc7, 0xf1, 0x60, + 0x8f, 0x95, 0x49, 0x3f, 0x39, 0x2c, 0xfa, 0xca, 0x5e, 0xb3, 0xea, 0x98, + 0x04, 0x6a, 0x27, 0xaf, 0xf8, 0x89, 0x99, 0x66, 0x89, 0x41, 0x26, 0xa6, + 0xd2, 0xbb, 0xc3, 0x8e, 0xb6, 0x4f, 0xe8, 0x65, 0x6f, 0x18, 0x14, 0x53, + 0x80, 0xc0, 0xa1, 0x43, 0x54, 0x9c, 0xb3, 0x84, 0x20, 0xa1, 0x50, 0xac, + 0xb8, 0x4c, 0x78, 0x98, 0x98, 0x08, 0xe8, 0xe9, 0x04, 0x8e, 0xfb, 0x78, + 0x09, 0x39, 0x1e, 0xbe, 0x34, 0xaa, 0x0b, 0xf7, 0x98, 0x53, 0xd7, 0x96, + 0x2e, 0x44, 0x69, 0x05, 0x13, 0x21, 0x32, 0xf3, 0xce, 0xcc, 0x33, 0xc1, + 0x23, 0x34, 0x2a, 0xe0, 0xf9, 0x43, 0x5a, 0xc2, 0x9f, 0xc7, 0xe1, 0xaf, + 0x1a, 0xab, 0xab, 0x68, 0x2c, 0x4f, 0x0f, 0x4a, 0xbf, 0xc3, 0x40, 0xa9, + 0xbe, 0x82, 0xa6, 0xa2, 0xfa, 0x81, 0x0a, 0xd4, 0x8b, 0xad, 0x25, 0x9d, + 0x7b, 0xa3, 0x84, 0x78, 0x05, 0x23, 0x48, 0xf5, 0x71, 0x5b, 0x31, 0xa6, + 0x45, 0x88, 0x90, 0x92, 0xba, 0x94, 0x89, 0x96, 0x2f, 0x85, 0x98, 0xaa, + 0xcb, 0x28, 0xa2, 0xa5, 0x21, 0xa9, 0xd4, 0xbc, 0x5a, 0xa9, 0x48, 0x59, + 0x64, 0xc6, 0x6b, 0x0e, 0xc2, 0x87, 0x17, 0x09, 0x27, 0x23, 0x93, 0x97, + 0x93, 0x3c, 0x3c, 0x65, 0x33, 0x49, 0x68, 0x74, 0x72, 0x95, 0x75, 0xcd, + 0x1a, 0x99, 0xab, 0xaa, 0x11, 0x29, 0xd3, 0xc6, 0x94, 0xb3, 0x1b, 0x5c, + 0xb8, 0x1c, 0x98, 0xb6, 0xf0, 0xb2, 0x1c, 0x66, 0xb2, 0xc8, 0xf7, 0x02, + 0x28, 0x79, 0xb0, 0x75, 0xf0, 0xad, 0x63, 0x23, 0xce, 0x37, 0xd8, 0x7e, + 0xbc, 0x98, 0xa8, 0xb5, 0x12, 0xc5, 0xb0, 0x0a, 0x9d, 0xd3, 0xb5, 0xcb, + 0x58, 0x15, 0x16, 0x03, 0x1c, 0x98, 0xb2, 0xe7, 0x7e, 0x12, 0xf7, 0x9e, + 0xb2, 0x37, 0x6b, 0xd8, 0x8a, 0x77, 0x17, 0x65, 0x91, 0x86, 0x8a, 0x2b, + 0xa0, 0x23, 0xc8, 0x6e, 0xd0, 0x62, 0x6b, 0x5a, 0x64, 0x8f, 0x32, 0xa4, + 0x96, 0x28, 0x28, 0x25, 0x95, 0x29, 0x84, 0x1c, 0x9f, 0x3c, 0x19, 0xc8, + 0x1c, 0x0a, 0x9e, 0x64, 0xc8, 0x47, 0xbe, 0xb3, 0x3a, 0x34, 0x67, 0x63, + 0xe9, 0xb6, 0x0b, 0xe5, 0x32, 0xcf, 0xdc, 0xb6, 0x5f, 0x27, 0x75, 0xaa, + 0xeb, 0xb9, 0x4d, 0x88, 0xa8, 0xcc, 0xb9, 0x6a, 0x49, 0x1f, 0x92, 0x83, + 0x0b, 0x73, 0x92, 0xfd, 0xcb, 0x93, 0xed, 0x62, 0x75, 0xb2, 0xa1, 0x79, + 0x3e, 0x82, 0x1e, 0xc7, 0xbc, 0x66, 0xc7, 0x3a, 0xb8, 0xbb, 0xeb, 0xad, + 0x5f, 0xf0, 0xb4, 0x26, 0x73, 0x82, 0x19, 0x20, 0x44, 0xbb, 0xf2, 0xa9, + 0x6f, 0x6e, 0x8f, 0x59, 0x92, 0x13, 0x26, 0x7d, 0x70, 0xa1, 0x84, 0x1b, + 0x54, 0x1e, 0x5b, 0x0d, 0x68, 0x7c, 0x56, 0x13}, + // cipherTextDigest + {0xff, 0x4f, 0x48, 0x69, 0x0b, 0xec, 0xcc, 0x05, 0xdb, 0xec, 0x7a, + 0xda, 0xd9, 0xcc, 0x7e, 0x8a, 0x84, 0x85, 0x5a, 0x8b, 0x05, 0x05, + 0xec, 0xd5, 0x67, 0xde, 0x3f, 0x89, 0x66, 0x81, 0x7f, 0x11}, + // secret + {0xf0, 0x4d, 0x78, 0x6c, 0x3b, 0x46, 0xf5, 0x50, 0x3e, 0xf7, 0xff, + 0xf6, 0xed, 0xf1, 0xb3, 0x6b, 0xc9, 0x23, 0xb7, 0x4a, 0xfb, 0x8a, + 0xc7, 0x6b, 0xe2, 0xd3, 0x0c, 0xcd, 0x6f, 0x3d, 0xad, 0x04}, + true}, + // tcID: 69 + {69, + params_ml_kem1024_test_mode, + // entropy + {0xae, 0xc3, 0xd1, 0xb9, 0x09, 0xa1, 0xb0, 0x18, 0x7a, 0x29, 0xff, + 0xcb, 0xc0, 0x1a, 0x3b, 0x6f, 0x3c, 0xc7, 0xac, 0x66, 0x52, 0x49, + 0xaa, 0x46, 0x10, 0x34, 0x64, 0x7c, 0x8e, 0x4f, 0xb0, 0xc4}, + // publicKey + {0xba, 0x0a, 0x09, 0x2d, 0x32, 0x6e, 0xef, 0xac, 0xa3, 0x99, 0xb3, 0x30, + 0x9c, 0x1a, 0x15, 0x2c, 0xc6, 0xba, 0x9c, 0x0c, 0xc1, 0x8d, 0x6c, 0xc2, + 0x9c, 0x1b, 0x13, 0xef, 0x24, 0x04, 0x84, 0x0a, 0x49, 0xe4, 0xc3, 0x0e, + 0x63, 0x8b, 0x4f, 0x68, 0x27, 0x58, 0x9f, 0x7a, 0xb5, 0xbe, 0xa1, 0x83, + 0xbc, 0x34, 0x62, 0x14, 0xc9, 0x6f, 0xba, 0x74, 0x5f, 0x25, 0xa4, 0x3b, + 0xd6, 0x5c, 0x73, 0xce, 0xfb, 0x17, 0x50, 0x41, 0x6e, 0x47, 0xf8, 0x6e, + 0xe4, 0x9a, 0x23, 0x74, 0x93, 0x86, 0xd4, 0x01, 0x97, 0x4e, 0x77, 0x5c, + 0xe6, 0x5b, 0xc5, 0x7a, 0x21, 0xb5, 0xe6, 0x2c, 0x80, 0xce, 0xb8, 0x7f, + 0xcc, 0xc2, 0x50, 0xbf, 0xe5, 0x31, 0x8c, 0x92, 0xa0, 0x36, 0xbb, 0x8a, + 0xe3, 0x20, 0xa1, 0x85, 0xf1, 0x71, 0x55, 0x87, 0xa7, 0x61, 0x88, 0x26, + 0x6e, 0xdc, 0x0f, 0x01, 0xf2, 0x91, 0x48, 0x53, 0x29, 0x67, 0x99, 0x2a, + 0x56, 0xd7, 0x20, 0x91, 0xf5, 0x84, 0xef, 0x8c, 0xcb, 0xd7, 0x7c, 0x25, + 0xb2, 0x80, 0x98, 0x97, 0x9a, 0x51, 0x83, 0x9a, 0x89, 0x09, 0xaa, 0x02, + 0xa5, 0x98, 0x0d, 0xa0, 0x89, 0x36, 0xee, 0xb1, 0xb8, 0x6f, 0x4c, 0x66, + 0x28, 0x95, 0x0b, 0xe3, 0xb8, 0x73, 0x6a, 0x0a, 0x98, 0xa7, 0x23, 0xaf, + 0x90, 0x3c, 0xc0, 0x00, 0xed, 0x85, 0x7f, 0x48, 0x5e, 0x59, 0xf6, 0x7a, + 0x5d, 0xe2, 0x07, 0x87, 0x03, 0x5a, 0x36, 0x54, 0x83, 0x4f, 0x8c, 0x3d, + 0x2f, 0x0c, 0xcb, 0x76, 0xf1, 0x3a, 0x49, 0x16, 0x05, 0xcf, 0x55, 0x30, + 0xb7, 0x91, 0x56, 0x50, 0xc1, 0xcb, 0x57, 0x60, 0x7b, 0xb8, 0x54, 0x70, + 0x84, 0xdc, 0x0b, 0xea, 0x07, 0xc9, 0x79, 0x70, 0x60, 0x74, 0x99, 0x7b, + 0x1d, 0x46, 0x54, 0x1e, 0xab, 0xba, 0x7e, 0xc2, 0x45, 0x9d, 0x20, 0x2d, + 0xcf, 0x17, 0x7e, 0x4a, 0x47, 0x12, 0x85, 0xa2, 0x4d, 0x95, 0x04, 0x3d, + 0xd8, 0xc8, 0x43, 0xd7, 0x03, 0x9e, 0x47, 0x32, 0x16, 0x01, 0xf0, 0x08, + 0x57, 0x99, 0x8b, 0x29, 0x96, 0x2c, 0x8d, 0x83, 0x66, 0xbb, 0x57, 0x71, + 0x84, 0xd0, 0x0d, 0x3c, 0x08, 0x99, 0x13, 0xa2, 0x09, 0x75, 0x13, 0xc3, + 0xcc, 0xbc, 0x49, 0xce, 0x63, 0x05, 0xad, 0xf9, 0x93, 0x3e, 0x3c, 0x8f, + 0xab, 0x75, 0x76, 0xed, 0x52, 0xc0, 0xaa, 0xd9, 0x04, 0x11, 0x89, 0x58, + 0xe4, 0x76, 0x1d, 0x63, 0x6c, 0x4a, 0xfc, 0xe0, 0x08, 0x05, 0x46, 0x16, + 0xc1, 0xd4, 0xa6, 0xb3, 0xe4, 0x7f, 0xb3, 0x98, 0x8d, 0xd5, 0x59, 0xca, + 0x26, 0xd9, 0x30, 0x9b, 0xf2, 0xb8, 0x6d, 0x73, 0x85, 0x29, 0xa2, 0x63, + 0x9b, 0xf0, 0x2f, 0x33, 0x0a, 0xab, 0xce, 0x08, 0x73, 0x48, 0x11, 0x88, + 0xab, 0x66, 0x3c, 0xff, 0xc3, 0x51, 0xe3, 0x7a, 0x1a, 0xa1, 0x05, 0x56, + 0xdb, 0xaa, 0x8d, 0x82, 0x85, 0x99, 0x2b, 0xf4, 0x87, 0xd2, 0x90, 0x0b, + 0x7e, 0xb7, 0x4e, 0x4c, 0x89, 0x75, 0x5b, 0x11, 0x90, 0x00, 0x6b, 0xb4, + 0x2f, 0xab, 0x4c, 0x71, 0x2a, 0x51, 0xdc, 0x51, 0x77, 0x57, 0x03, 0xb0, + 0x8f, 0x02, 0xa7, 0x7e, 0xca, 0x53, 0xef, 0xa6, 0xb8, 0xbe, 0x76, 0x0c, + 0x53, 0x0b, 0x02, 0x46, 0xbb, 0xbb, 0xd7, 0x7b, 0xa3, 0xc2, 0x1b, 0x83, + 0x71, 0xf9, 0x02, 0x2e, 0x69, 0x08, 0x5d, 0x59, 0x4e, 0x85, 0x50, 0x49, + 0x63, 0xd6, 0x84, 0x6a, 0x6c, 0x3f, 0xba, 0x83, 0x3e, 0x8d, 0xe2, 0x6d, + 0xd2, 0xab, 0x9d, 0xfc, 0xf1, 0x5e, 0xca, 0xb2, 0xa2, 0x6b, 0x60, 0x24, + 0x95, 0x21, 0x5d, 0x44, 0x82, 0xa5, 0x84, 0x56, 0xbc, 0x9f, 0xdb, 0x99, + 0x03, 0x82, 0x61, 0xc9, 0x73, 0x02, 0xd4, 0x5a, 0x51, 0x5b, 0x93, 0xac, + 0xd0, 0x03, 0x78, 0x6c, 0x70, 0xb2, 0xbd, 0x98, 0x7c, 0x56, 0xf5, 0x36, + 0xf9, 0x75, 0x88, 0x40, 0xdb, 0x65, 0x24, 0xac, 0x51, 0x09, 0x65, 0x77, + 0xaa, 0xb4, 0x45, 0x28, 0x1a, 0x3c, 0x65, 0xb7, 0x6f, 0xa0, 0x5c, 0xc5, + 0xc2, 0xd5, 0x72, 0x23, 0xeb, 0x8a, 0xbb, 0xd8, 0x59, 0xfa, 0x1c, 0xa2, + 0xbd, 0x2c, 0x5b, 0x2a, 0xd6, 0x21, 0x66, 0x51, 0xab, 0x2c, 0x4b, 0x77, + 0x19, 0x9b, 0x51, 0xff, 0x6b, 0x8a, 0xfd, 0xd1, 0x88, 0xc5, 0x71, 0x9a, + 0x86, 0xcb, 0x7f, 0xaf, 0xd0, 0x94, 0x7f, 0x00, 0xc4, 0x15, 0xa9, 0x07, + 0xf5, 0xdb, 0x91, 0x6b, 0xe3, 0x11, 0xef, 0x7b, 0xbe, 0x12, 0x1c, 0xc3, + 0x89, 0x7c, 0x08, 0xa6, 0xe5, 0x12, 0x3e, 0x54, 0x89, 0xb5, 0x46, 0x17, + 0xda, 0x61, 0x61, 0xb4, 0x97, 0x5a, 0x24, 0x1a, 0x2c, 0x72, 0xaa, 0x98, + 0x7e, 0xda, 0x9d, 0x30, 0xc1, 0x94, 0x05, 0x20, 0x11, 0x79, 0xfc, 0x97, + 0xce, 0x00, 0x05, 0xd1, 0x76, 0x1f, 0xad, 0x8b, 0x01, 0xdb, 0xc7, 0x4c, + 0xff, 0xfc, 0xcc, 0x64, 0xbc, 0x9d, 0x7a, 0x5c, 0x76, 0x8a, 0xf3, 0x90, + 0xe6, 0xa9, 0x53, 0xd3, 0x68, 0xab, 0x14, 0x12, 0x09, 0x33, 0x06, 0x5b, + 0x33, 0x42, 0x75, 0x51, 0x3a, 0x57, 0x9f, 0x27, 0x91, 0x9a, 0x3c, 0xbd, + 0xae, 0xeb, 0xc2, 0x29, 0xc7, 0xad, 0xa4, 0x03, 0x84, 0x33, 0x12, 0xcb, + 0xff, 0x97, 0x49, 0x87, 0x2a, 0x4b, 0x8a, 0x89, 0x09, 0x9b, 0x8b, 0x9e, + 0xb8, 0x74, 0x62, 0x95, 0xe3, 0x09, 0x3f, 0xe2, 0x10, 0xcf, 0xc3, 0x44, + 0x04, 0xe6, 0x69, 0x0f, 0xe8, 0x63, 0xc2, 0xe1, 0xcc, 0x1a, 0x80, 0xa5, + 0x72, 0x73, 0x12, 0xa0, 0x4b, 0x19, 0x8c, 0xe2, 0xbb, 0x36, 0xba, 0x84, + 0x5c, 0x14, 0x2e, 0xc2, 0x77, 0x78, 0x47, 0xd4, 0x0f, 0x93, 0x52, 0x88, + 0xa8, 0x58, 0x28, 0x0f, 0x51, 0x00, 0x19, 0xe1, 0x28, 0x53, 0x2b, 0x8e, + 0x8c, 0x14, 0xa3, 0xbe, 0x60, 0x64, 0x59, 0xf0, 0x5d, 0x57, 0xd4, 0x65, + 0xbc, 0x01, 0x8a, 0xa5, 0xfc, 0x52, 0xa4, 0x26, 0x9a, 0x74, 0xe0, 0x48, + 0x46, 0x18, 0x86, 0x87, 0xa8, 0x7d, 0xeb, 0x86, 0x26, 0x0f, 0x15, 0x2d, + 0xfe, 0x02, 0x94, 0xf4, 0xeb, 0xc3, 0xa0, 0x86, 0x89, 0x65, 0xf8, 0x9d, + 0xa0, 0x09, 0x4f, 0x9f, 0x0c, 0x9e, 0x21, 0x4c, 0x04, 0x09, 0xea, 0x93, + 0xea, 0xa0, 0x88, 0x23, 0xaa, 0xb0, 0xb8, 0x51, 0xbe, 0xa3, 0x1a, 0x6d, + 0x1a, 0xb1, 0xa2, 0x7a, 0x04, 0x87, 0x87, 0x00, 0x35, 0xad, 0xc1, 0x8a, + 0xd9, 0xe0, 0x9f, 0x61, 0x04, 0xcf, 0xd8, 0xa5, 0x98, 0x5a, 0xc8, 0x5e, + 0xa1, 0x35, 0xab, 0xd2, 0xe5, 0x2c, 0xc8, 0x49, 0x1a, 0xc8, 0x72, 0x47, + 0xf8, 0x6b, 0xca, 0x3d, 0x59, 0x14, 0x98, 0xc6, 0xc2, 0x27, 0x62, 0x27, + 0xce, 0x23, 0x7b, 0x6e, 0x66, 0x5b, 0xa1, 0x31, 0x40, 0x44, 0xc1, 0xbe, + 0x9b, 0x9c, 0x85, 0x34, 0x9b, 0x87, 0xfc, 0x99, 0x83, 0x11, 0x5c, 0x76, + 0xd8, 0x42, 0x53, 0x87, 0x08, 0x55, 0xa4, 0xc3, 0x29, 0xa3, 0x23, 0x06, + 0x5a, 0x5a, 0x4d, 0x47, 0x26, 0x16, 0x1f, 0x47, 0x3b, 0xf5, 0xb2, 0x3c, + 0x6d, 0x76, 0x4f, 0x03, 0x3c, 0x54, 0x8f, 0xc0, 0xc4, 0xea, 0x30, 0x57, + 0x45, 0x7a, 0x26, 0x22, 0x27, 0x50, 0x02, 0xf0, 0x29, 0xb9, 0xf1, 0xc1, + 0x52, 0x71, 0x19, 0x49, 0x7c, 0x05, 0xfa, 0x43, 0x3b, 0x83, 0xa4, 0x66, + 0x70, 0x92, 0x2b, 0x94, 0xba, 0x3b, 0x12, 0x59, 0xc7, 0xe4, 0x93, 0x86, + 0x63, 0x58, 0x82, 0xe8, 0x8a, 0x72, 0xed, 0x38, 0x67, 0xfb, 0x23, 0x2b, + 0x74, 0xa3, 0x72, 0x9a, 0xc7, 0x50, 0x7d, 0x59, 0xbb, 0xd9, 0x94, 0xb7, + 0x2c, 0xbb, 0x3e, 0xdc, 0xc7, 0xb3, 0xd8, 0xd0, 0x33, 0x4e, 0x37, 0x95, + 0xdb, 0x74, 0x0e, 0x32, 0x71, 0xbb, 0x3f, 0x8c, 0x46, 0x5d, 0x1b, 0x1d, + 0x64, 0xa7, 0x16, 0xf3, 0x4c, 0x7d, 0xc1, 0xea, 0x80, 0x7a, 0x94, 0xbb, + 0x55, 0xb7, 0x5d, 0xaf, 0x94, 0x76, 0x65, 0x84, 0x77, 0xa1, 0x5b, 0x03, + 0x3b, 0x52, 0x16, 0x07, 0xe0, 0x69, 0xdb, 0x94, 0x9f, 0xc6, 0x49, 0x90, + 0xe5, 0x07, 0x02, 0x27, 0x81, 0x32, 0xdb, 0x63, 0x22, 0xc1, 0x95, 0x32, + 0x39, 0x8a, 0x0a, 0x2b, 0x18, 0x6e, 0x55, 0x5c, 0x7d, 0x77, 0x23, 0x31, + 0x9d, 0xd9, 0xab, 0x4c, 0x19, 0x6a, 0x24, 0x63, 0x96, 0x48, 0xfc, 0x57, + 0xbe, 0x13, 0x45, 0x82, 0x56, 0x2e, 0x01, 0x4a, 0x9c, 0x66, 0x4a, 0x41, + 0x8d, 0x6c, 0x5f, 0x6c, 0x00, 0x76, 0x6b, 0x93, 0xaf, 0x5e, 0x1c, 0xce, + 0x3c, 0x8c, 0x88, 0x32, 0x28, 0xb7, 0x75, 0x52, 0xcb, 0xe0, 0xc3, 0x18, + 0xc0, 0xd4, 0x07, 0xb8, 0xd7, 0x92, 0xf7, 0x98, 0x65, 0x7b, 0xf1, 0xa6, + 0x27, 0x23, 0xac, 0xb1, 0x50, 0x89, 0xe1, 0x0a, 0xbf, 0x9e, 0x1c, 0x0b, + 0xf4, 0xf6, 0x99, 0xd6, 0x31, 0xca, 0x0a, 0x98, 0xa5, 0x31, 0x95, 0x44, + 0x0b, 0x87, 0xbf, 0x38, 0xdb, 0x43, 0xbc, 0xd8, 0x60, 0x63, 0x87, 0x2a, + 0xc1, 0xb2, 0x40, 0x6a, 0x51, 0x68, 0x03, 0xbc, 0x09, 0x94, 0x38, 0x3e, + 0x64, 0xdb, 0x82, 0x13, 0xe9, 0x88, 0x74, 0x11, 0x66, 0x84, 0x27, 0x1c, + 0x3e, 0x8c, 0xb2, 0xa3, 0x04, 0x9f, 0x7e, 0xac, 0x3b, 0xc5, 0xa8, 0xb5, + 0xe3, 0x9a, 0xb5, 0xbe, 0x23, 0x2c, 0x35, 0x55, 0x52, 0xcc, 0xe6, 0x54, + 0xd9, 0x89, 0xcd, 0xaf, 0xeb, 0xcc, 0x6d, 0xac, 0x48, 0x46, 0x45, 0xb2, + 0x04, 0xcc, 0x5a, 0x01, 0x4b, 0xb7, 0x67, 0x92, 0x67, 0xd4, 0x3b, 0x5e, + 0x20, 0x97, 0xb9, 0x7b, 0x19, 0xaa, 0x65, 0x96, 0x60, 0x58, 0x92, 0xab, + 0xd7, 0x4b, 0x06, 0x46, 0xb9, 0x1f, 0x97, 0x52, 0xa3, 0xc8, 0x93, 0x48, + 0xd0, 0x69, 0xb6, 0x9f, 0xa2, 0x66, 0x5b, 0x75, 0xba, 0xc5, 0xc8, 0x3e, + 0x1d, 0x55, 0x36, 0x8f, 0x32, 0x16, 0x88, 0xe7, 0x13, 0xc2, 0x43, 0x90, + 0x12, 0x23, 0xc4, 0xf7, 0x0c, 0x56, 0x16, 0xa7, 0xb7, 0x9e, 0xb5, 0x0f, + 0x93, 0x14, 0x8a, 0xb2, 0xe3, 0x8a, 0x61, 0x9b, 0x8a, 0xe5, 0xf9, 0x67, + 0x27, 0xdb, 0x83, 0xe7, 0xc5, 0x6a, 0xfe, 0xa1, 0xa9, 0xd4, 0x71, 0xb4, + 0x0b, 0xdb, 0x6c, 0x19, 0xc0, 0x30, 0xa8, 0xca, 0x4f, 0x40, 0x75, 0x5b, + 0x74, 0x72, 0xac, 0x71, 0x20, 0x70, 0xfd, 0xa0, 0x7c, 0x6a, 0x28, 0x2c, + 0x9b, 0x49, 0x1b, 0x54, 0xb8, 0xc8, 0x9e, 0x61, 0x57, 0x5e, 0xe7, 0x6c, + 0x2f, 0xea, 0x7d, 0x99, 0xb6, 0x37, 0x57, 0x7a, 0x5f, 0x3e, 0x30, 0x12, + 0x1b, 0xc3, 0xa5, 0x4b, 0x87, 0x90, 0x48, 0x88, 0x95, 0xd7, 0x62, 0x5d, + 0x1c, 0xe8, 0x8f, 0x52, 0xec, 0xc3, 0xbf, 0x62, 0xbc, 0x21, 0x57, 0xc3, + 0x2e, 0xeb, 0x7f, 0x3c, 0xd3, 0xb3, 0x10, 0x3a, 0x50, 0x08, 0x19, 0xc4, + 0x7d, 0xb2, 0x91, 0x5f, 0x55, 0xa7, 0x29, 0x4a, 0x1f, 0x8e, 0xd6, 0x6e, + 0xb3, 0x69, 0x8e, 0xb8, 0x56, 0x8a, 0xda, 0x41, 0x09, 0xa3, 0x80, 0x83, + 0x11, 0x06, 0x5a, 0x66, 0x44, 0x78, 0x1e, 0x50, 0xb1, 0x77, 0x78, 0x51, + 0x28, 0x96, 0xbf, 0xbb, 0x83, 0x1e, 0x04, 0x69, 0x66, 0x2d, 0xb6, 0x00, + 0x73, 0xa8, 0x45, 0x48, 0x82, 0xa5, 0xbc, 0x2a, 0xa9, 0xd4, 0x95, 0x38, + 0xa6, 0x64, 0xad, 0xfd, 0x23, 0xc3, 0x23, 0x4b, 0x56, 0x9e, 0x31, 0x87, + 0x5d, 0xf5, 0x45, 0x48, 0x96, 0x30, 0xb5, 0xc4, 0xb6, 0x55, 0xe9, 0x4d, + 0x29, 0xf4, 0x94, 0x70, 0xaa, 0x5a, 0xdd, 0xec, 0x2b, 0x2c, 0x47, 0xa8, + 0xb8, 0x45, 0x2c, 0x49, 0xe2, 0x82, 0x06, 0x07, 0x06, 0x45, 0x94, 0x6f, + 0x59, 0x85, 0xd2, 0xa6, 0x54, 0x0f, 0xdc, 0x59, 0x62, 0xe3, 0x87, 0x1a, + 0x4c, 0xfd, 0x33, 0x40, 0x77, 0xd9, 0x69, 0x25, 0x22, 0x71, 0xc8, 0xad, + 0x94, 0x2e, 0x8e, 0xff, 0xd7, 0x6f, 0x44, 0xf5}, + // cipherTextDigest + {0xaf, 0x63, 0x45, 0x3f, 0xb9, 0x9d, 0x83, 0xcd, 0x91, 0xba, 0x1a, + 0xfe, 0x2a, 0xc9, 0x38, 0x13, 0xd0, 0x4c, 0x96, 0x5d, 0xe0, 0x66, + 0xae, 0xd0, 0x75, 0x9f, 0x1e, 0xc0, 0x51, 0x56, 0x2b, 0x00}, + // secret + {0x23, 0x1f, 0x9b, 0x3b, 0xd5, 0xd1, 0xb7, 0xe9, 0x77, 0x0f, 0x9d, + 0x7e, 0xf6, 0x6d, 0x6e, 0xf0, 0xed, 0x39, 0xd6, 0x89, 0x76, 0xff, + 0x94, 0x2b, 0xdf, 0x7a, 0x4e, 0x26, 0x33, 0x71, 0x4a, 0x23}, + true}, + // tcID: 70 + {70, + params_ml_kem1024_test_mode, + // entropy + {0x24, 0x9e, 0x32, 0x49, 0x0f, 0xfb, 0xf7, 0xe5, 0xa7, 0xad, 0x78, + 0xb7, 0x3e, 0x89, 0x68, 0xf4, 0x34, 0xe6, 0xb9, 0xda, 0xad, 0xf5, + 0xb8, 0xfb, 0x73, 0xdd, 0x0b, 0xa4, 0x50, 0xfd, 0xcb, 0x27}, + // publicKey + {0xa6, 0x8c, 0x16, 0x85, 0x04, 0x9b, 0x37, 0x66, 0x54, 0xa2, 0x82, 0x9a, + 0x5c, 0x29, 0x49, 0x75, 0xfb, 0x23, 0x6e, 0xb9, 0x76, 0x5e, 0x21, 0x50, + 0x27, 0x68, 0x09, 0xd9, 0xc1, 0x8e, 0xd1, 0xa9, 0x97, 0xe2, 0x24, 0x2d, + 0xa0, 0xf7, 0x57, 0x8a, 0x85, 0x62, 0x64, 0x24, 0x64, 0xd9, 0x6c, 0x00, + 0x1d, 0x55, 0x36, 0x29, 0x07, 0x31, 0x43, 0x40, 0xa3, 0xd6, 0x87, 0x5d, + 0x03, 0x41, 0x72, 0xd3, 0x95, 0x2d, 0x4f, 0x91, 0xc6, 0x77, 0xc8, 0x03, + 0x12, 0x0b, 0xbf, 0x27, 0x73, 0x0d, 0xe0, 0x74, 0xb0, 0x63, 0x23, 0x19, + 0xf6, 0x36, 0xcc, 0x1c, 0xf3, 0x5f, 0x93, 0xe7, 0x71, 0xd2, 0xbc, 0x04, + 0x4e, 0xe7, 0x4a, 0xe5, 0x72, 0x4e, 0x51, 0xc8, 0x99, 0x7c, 0xb5, 0xa1, + 0x94, 0x7b, 0x9a, 0x27, 0x60, 0x01, 0x19, 0x53, 0x3a, 0x6d, 0xeb, 0x87, + 0x66, 0x99, 0x49, 0x74, 0xac, 0xcc, 0xcc, 0x31, 0xa3, 0x02, 0xdc, 0x86, + 0xa5, 0xe8, 0xcf, 0x75, 0x87, 0x42, 0xb1, 0x3c, 0x51, 0x1d, 0x35, 0xb5, + 0x2c, 0xd2, 0x9d, 0x16, 0xd1, 0x44, 0x8a, 0x82, 0x3e, 0x67, 0x69, 0x0a, + 0x21, 0xc0, 0x2c, 0xe4, 0x57, 0x8e, 0x61, 0xb3, 0xcf, 0xb9, 0x26, 0x1c, + 0xec, 0x38, 0x9d, 0xa9, 0x19, 0x92, 0x95, 0x4b, 0xcb, 0x9a, 0x73, 0x11, + 0xe4, 0x80, 0x83, 0x05, 0x57, 0x6e, 0x11, 0x27, 0xab, 0xd8, 0x3c, 0x57, + 0x56, 0xe9, 0xb7, 0xed, 0x56, 0xb5, 0x01, 0xc7, 0x15, 0x48, 0xd1, 0x65, + 0x79, 0x44, 0x65, 0x18, 0xe2, 0x26, 0xee, 0xe7, 0x4c, 0xf9, 0x23, 0xcb, + 0xe0, 0xa3, 0x7c, 0x9b, 0x49, 0x30, 0xee, 0xc2, 0xcd, 0x0b, 0x84, 0xc2, + 0x9d, 0x36, 0x6a, 0xb5, 0x46, 0x97, 0x50, 0x5a, 0x7b, 0x80, 0x33, 0xcf, + 0xd4, 0x62, 0x2c, 0xdf, 0xc1, 0x8b, 0xae, 0xf5, 0x07, 0xbb, 0xe6, 0xbc, + 0x3b, 0xd4, 0x4d, 0x0e, 0x61, 0x42, 0x78, 0x88, 0x0c, 0x7a, 0x65, 0x87, + 0xad, 0xb7, 0x8c, 0x2b, 0x95, 0x5b, 0x55, 0xc3, 0x73, 0xc2, 0xb4, 0x88, + 0x59, 0x48, 0x30, 0x0b, 0x70, 0x6d, 0x30, 0x53, 0x12, 0x20, 0xd7, 0x5e, + 0xf9, 0x49, 0x4d, 0xd5, 0x84, 0x70, 0x39, 0x50, 0x04, 0x04, 0xf7, 0x76, + 0xba, 0xe7, 0x6d, 0x89, 0xf6, 0x2a, 0x52, 0x86, 0x86, 0xe6, 0xc4, 0xb7, + 0x4a, 0xb4, 0x50, 0x23, 0xc7, 0xb1, 0x5b, 0xda, 0x00, 0x83, 0x15, 0x24, + 0xbc, 0xb9, 0x18, 0xd1, 0x2b, 0x71, 0x87, 0x99, 0x3b, 0x34, 0xd1, 0x0d, + 0xbf, 0x33, 0x4b, 0x8b, 0xc9, 0x47, 0x56, 0xb0, 0x24, 0x03, 0xdc, 0x13, + 0x2c, 0x1b, 0x75, 0x11, 0xc2, 0xbf, 0x9e, 0x15, 0x18, 0xc3, 0x1b, 0xa3, + 0x0b, 0xc8, 0x9b, 0x56, 0x81, 0xa6, 0x04, 0x30, 0xa0, 0xbf, 0x6c, 0x4f, + 0x99, 0x37, 0x8e, 0xd9, 0x3b, 0x15, 0x1c, 0xc5, 0xb0, 0x8a, 0x8a, 0x53, + 0x8d, 0xbb, 0xca, 0xc3, 0xc3, 0x8e, 0x5a, 0x82, 0x09, 0xc2, 0xdc, 0x27, + 0x73, 0xcc, 0x5f, 0xd7, 0xf1, 0x4c, 0x2f, 0x76, 0x54, 0x5a, 0x39, 0x40, + 0xe8, 0x9b, 0x08, 0x9b, 0x03, 0x0b, 0xde, 0xd8, 0x90, 0xc5, 0x41, 0x19, + 0xbb, 0x15, 0x18, 0x94, 0xe2, 0xad, 0x06, 0x85, 0x33, 0x1a, 0x20, 0x8a, + 0x59, 0x49, 0xc1, 0x5c, 0x1b, 0x7f, 0x7a, 0x52, 0x9d, 0x72, 0x75, 0xc4, + 0x79, 0xe2, 0x2e, 0x81, 0xe3, 0x5f, 0xce, 0x81, 0x83, 0xbb, 0x02, 0x77, + 0x6d, 0x68, 0xa6, 0x39, 0x56, 0xa4, 0xed, 0x07, 0x9a, 0x6b, 0xaa, 0x74, + 0x1f, 0x1c, 0x95, 0xf1, 0xbc, 0x0a, 0xb6, 0x51, 0x45, 0x11, 0x76, 0x3d, + 0xb2, 0x33, 0xaa, 0xde, 0x06, 0x03, 0xaf, 0x58, 0xb8, 0x31, 0x87, 0x7e, + 0x05, 0x08, 0xb1, 0xf5, 0x87, 0xc5, 0xf7, 0xe7, 0x2c, 0x39, 0xe3, 0x22, + 0x96, 0x55, 0xb1, 0x8b, 0x43, 0x8c, 0x3e, 0x07, 0xd0, 0x39, 0x4c, 0x5f, + 0x06, 0x1c, 0x3a, 0xaf, 0xe0, 0x42, 0xd4, 0x80, 0xc6, 0x8c, 0x20, 0x58, + 0xde, 0x40, 0x63, 0x2b, 0x1c, 0xc6, 0x42, 0x6b, 0xc6, 0x88, 0x40, 0x3b, + 0x05, 0x41, 0x49, 0x8a, 0xfc, 0x07, 0x1d, 0x48, 0xa6, 0xf5, 0x5c, 0xbc, + 0xa8, 0x82, 0x6d, 0x8d, 0x19, 0xac, 0x72, 0x34, 0xc8, 0xb1, 0x6b, 0x68, + 0x09, 0x56, 0xcf, 0x71, 0x11, 0xb3, 0x57, 0x70, 0x45, 0xbf, 0x47, 0xb0, + 0x44, 0x79, 0xbf, 0x6c, 0x21, 0x0e, 0x29, 0xf4, 0xb3, 0x7d, 0x00, 0x2a, + 0x5c, 0xaa, 0x98, 0x75, 0x35, 0x9e, 0x42, 0x27, 0x64, 0xfa, 0xa7, 0xc0, + 0xbd, 0x7a, 0x08, 0x59, 0x46, 0x60, 0x55, 0xa6, 0x21, 0x2d, 0x55, 0x43, + 0x50, 0xb2, 0x9c, 0x07, 0x5a, 0xca, 0x4e, 0x09, 0x26, 0x43, 0xa4, 0x99, + 0x36, 0x3a, 0x84, 0x80, 0x11, 0x62, 0x3a, 0x97, 0x8e, 0x59, 0x04, 0x88, + 0xd3, 0x18, 0x2a, 0x73, 0x36, 0x44, 0xfa, 0x36, 0x67, 0xf0, 0x91, 0x76, + 0x6e, 0x80, 0x6c, 0xe2, 0xdc, 0x9b, 0x79, 0xaa, 0x7b, 0x95, 0x84, 0x57, + 0x83, 0x6b, 0xb4, 0x44, 0x48, 0x2a, 0x00, 0x94, 0x71, 0x2b, 0x37, 0xbd, + 0xa9, 0xb7, 0x06, 0xc0, 0x61, 0xa1, 0xc7, 0x40, 0x87, 0x57, 0xc1, 0x36, + 0x40, 0xf4, 0x64, 0x4a, 0x58, 0x96, 0x2f, 0x30, 0x7f, 0x3a, 0x92, 0xb4, + 0xa0, 0xf3, 0x2f, 0x20, 0xd9, 0x8f, 0xb9, 0xc8, 0x7a, 0x37, 0x8c, 0x9f, + 0xaf, 0xb0, 0x00, 0x83, 0x32, 0x0a, 0xa8, 0xcc, 0x8a, 0xf9, 0xb9, 0x5b, + 0xa4, 0x38, 0x62, 0xd9, 0xac, 0x14, 0x85, 0x62, 0x66, 0xb4, 0x18, 0xbc, + 0x08, 0xa0, 0x1b, 0xb1, 0xeb, 0x5e, 0x92, 0x63, 0x6a, 0x6d, 0x0c, 0x0c, + 0x5e, 0xf7, 0x30, 0x97, 0x42, 0x8f, 0x0e, 0xd9, 0x1b, 0xf8, 0x8a, 0x95, + 0x48, 0xa2, 0x52, 0x05, 0x5b, 0x87, 0xb1, 0x12, 0x9e, 0xbd, 0x1c, 0x78, + 0x25, 0x8a, 0x2a, 0x16, 0xd9, 0x98, 0xf9, 0x20, 0x3e, 0x4a, 0x1a, 0x68, + 0x6b, 0x31, 0xcd, 0xb1, 0x5b, 0x13, 0x53, 0xa3, 0x30, 0xa8, 0x7c, 0xad, + 0x5e, 0x46, 0x3b, 0xe3, 0x94, 0xba, 0x0c, 0x6a, 0xbe, 0x19, 0xf5, 0xb9, + 0xc6, 0x66, 0x39, 0x61, 0x28, 0xcd, 0x75, 0x09, 0x62, 0x09, 0x3b, 0x44, + 0xc4, 0xd2, 0x6e, 0x85, 0x4a, 0x9f, 0x9a, 0xc1, 0x12, 0xfc, 0xb3, 0xbf, + 0x0d, 0x2c, 0xa8, 0x77, 0x74, 0xbd, 0xa2, 0xb8, 0xb1, 0x79, 0x94, 0x26, + 0x6b, 0x10, 0x75, 0x1b, 0x78, 0xbc, 0x9d, 0xba, 0x04, 0xfb, 0x61, 0x72, + 0xe7, 0xbb, 0x70, 0xdd, 0xc9, 0x11, 0x03, 0x27, 0x9e, 0xd9, 0xf4, 0x10, + 0xee, 0xf0, 0x5c, 0x7b, 0xa3, 0x9e, 0x0c, 0xb9, 0x96, 0xfe, 0x8b, 0x44, + 0x56, 0x70, 0x2b, 0xf0, 0x45, 0xa6, 0x1e, 0x36, 0xba, 0x1b, 0x77, 0x82, + 0xd9, 0xbc, 0x39, 0xfd, 0x8c, 0x34, 0x6c, 0xd2, 0xb4, 0x94, 0x90, 0x5a, + 0x32, 0x69, 0x7b, 0x86, 0x88, 0x3c, 0x8e, 0x84, 0x54, 0x4c, 0x71, 0x34, + 0xfe, 0xa4, 0x79, 0xcd, 0xd4, 0xa6, 0xf4, 0x19, 0x61, 0x96, 0xf7, 0x0a, + 0xb6, 0xb6, 0xa2, 0x72, 0x7a, 0x5b, 0xa5, 0x93, 0x55, 0x0f, 0xa1, 0x1e, + 0x7d, 0x8b, 0xaa, 0x7a, 0x0c, 0x20, 0x07, 0x27, 0xcd, 0xa2, 0xc1, 0x10, + 0x3b, 0x78, 0x35, 0x46, 0xa5, 0x54, 0xae, 0x51, 0x01, 0xb9, 0x92, 0x6c, + 0x13, 0x74, 0x85, 0xd8, 0xb7, 0x73, 0x17, 0xa3, 0x72, 0xbb, 0x57, 0x31, + 0x92, 0xf2, 0x56, 0xfe, 0xda, 0x5a, 0x34, 0x44, 0x6a, 0xb5, 0x19, 0xa4, + 0x12, 0xf3, 0x9f, 0x84, 0xba, 0x38, 0xd4, 0x59, 0x4f, 0x26, 0xe6, 0x27, + 0x38, 0xd3, 0xc2, 0xc0, 0x59, 0x4a, 0x1b, 0x9b, 0x3c, 0xe0, 0x92, 0x05, + 0xb7, 0x13, 0x78, 0xca, 0x9c, 0x77, 0xcc, 0x69, 0x25, 0xe2, 0xb3, 0x15, + 0xdc, 0x30, 0x4d, 0x25, 0x2b, 0x6e, 0xf7, 0xc2, 0x52, 0x37, 0x82, 0x56, + 0xa2, 0xaa, 0x6f, 0x29, 0x02, 0xcf, 0x5a, 0x84, 0x2b, 0x4e, 0x61, 0xb2, + 0x66, 0xf7, 0x03, 0x9c, 0x71, 0xab, 0xee, 0x26, 0xbd, 0x0e, 0xf8, 0x88, + 0x32, 0xe7, 0x55, 0x06, 0xca, 0xa6, 0xcd, 0x5a, 0x08, 0xe5, 0x77, 0x23, + 0xc4, 0xa6, 0x76, 0x15, 0xf3, 0x8a, 0x3d, 0x2a, 0x9c, 0xcc, 0x3c, 0x6c, + 0x1d, 0x9b, 0x70, 0x05, 0x7b, 0xa8, 0xb0, 0xe3, 0x40, 0xe7, 0x7a, 0xa6, + 0xb3, 0xe7, 0x6c, 0xab, 0x36, 0x8e, 0x57, 0xb3, 0x24, 0x28, 0x17, 0xab, + 0x05, 0xa0, 0x9d, 0xe8, 0x79, 0x8c, 0xff, 0x88, 0x59, 0xb1, 0xd0, 0x3e, + 0x83, 0x6a, 0x53, 0xe6, 0xac, 0xa4, 0x8a, 0xf2, 0xb5, 0x00, 0x04, 0xb2, + 0xee, 0xa1, 0x9e, 0xf4, 0x49, 0x29, 0x0b, 0x92, 0x72, 0x43, 0x81, 0x7e, + 0x38, 0xc9, 0x2b, 0x70, 0x26, 0x7e, 0x8f, 0xdc, 0x41, 0xe2, 0x6b, 0x9c, + 0x2b, 0xd6, 0xc2, 0xf3, 0xc9, 0x27, 0xaa, 0x30, 0x5e, 0x80, 0xd9, 0x85, + 0x26, 0xbb, 0x22, 0x21, 0xe6, 0x2c, 0xa6, 0xf2, 0x3e, 0xd8, 0x95, 0x33, + 0x5d, 0xd1, 0x6b, 0xde, 0x1a, 0x62, 0xad, 0x6b, 0xc5, 0x16, 0x19, 0x5e, + 0xfa, 0x65, 0x9d, 0x46, 0x24, 0x15, 0x53, 0xa6, 0x64, 0x5e, 0x8b, 0x88, + 0x9a, 0x14, 0xa7, 0xfb, 0x64, 0x4e, 0x6d, 0x2b, 0x36, 0xa1, 0x90, 0x98, + 0x0b, 0x82, 0x97, 0xb2, 0x80, 0x97, 0xb5, 0xe5, 0x89, 0x69, 0x80, 0xc2, + 0x41, 0x79, 0x40, 0xab, 0x5b, 0x2b, 0xa4, 0x93, 0x1b, 0x97, 0x68, 0x22, + 0xce, 0x1c, 0x45, 0x17, 0x31, 0xa2, 0x70, 0xa1, 0x38, 0xb0, 0x0a, 0x05, + 0xe5, 0xcc, 0x16, 0xe7, 0xf0, 0x7e, 0xc6, 0xb4, 0x86, 0xe0, 0x6a, 0xb6, + 0x16, 0x77, 0x25, 0x04, 0xf0, 0x13, 0x22, 0x52, 0x24, 0x12, 0x83, 0xce, + 0xfa, 0x60, 0x37, 0x34, 0xbb, 0x8a, 0x17, 0x7c, 0x86, 0x80, 0x74, 0x14, + 0xee, 0xb3, 0x39, 0xf6, 0x2c, 0x73, 0xa8, 0x35, 0x24, 0xc5, 0x73, 0x1a, + 0xb2, 0x78, 0x6a, 0xf6, 0xb5, 0x18, 0x8a, 0xfc, 0x81, 0x0a, 0x36, 0xc9, + 0xfb, 0xab, 0x5e, 0xc8, 0xdc, 0x00, 0x43, 0xe0, 0x72, 0xdf, 0x60, 0x97, + 0xd5, 0x94, 0xa5, 0x93, 0x40, 0x91, 0xb2, 0xbb, 0xbc, 0xef, 0x0b, 0xc8, + 0x1a, 0xd3, 0x34, 0xa4, 0x22, 0x89, 0x75, 0xc3, 0x07, 0x81, 0xe6, 0xca, + 0x2b, 0xb1, 0x5f, 0x6a, 0x54, 0x65, 0x38, 0xdb, 0x6f, 0x68, 0xb7, 0x68, + 0xb1, 0xa9, 0x08, 0x78, 0xb4, 0x1c, 0x39, 0x44, 0x12, 0x2c, 0x3a, 0xba, + 0x45, 0x47, 0x85, 0x99, 0x43, 0x5f, 0x0a, 0xa3, 0x04, 0xea, 0x17, 0xa5, + 0x0b, 0xd1, 0xa8, 0xa1, 0xa8, 0x8f, 0x63, 0xab, 0x31, 0x16, 0x69, 0x1e, + 0x78, 0xc9, 0x4a, 0xe6, 0xca, 0x1c, 0xbb, 0x5b, 0x10, 0x0a, 0xc6, 0x35, + 0x89, 0x46, 0x23, 0xfc, 0xb9, 0x71, 0xaf, 0x11, 0x54, 0xf8, 0x59, 0x76, + 0x81, 0xc8, 0x7f, 0x62, 0xe2, 0x6a, 0x7f, 0x63, 0x40, 0x9d, 0x79, 0x56, + 0xea, 0x99, 0x57, 0xc7, 0x25, 0x12, 0x76, 0x00, 0x97, 0xfe, 0x86, 0x74, + 0x0e, 0x66, 0xc4, 0xb3, 0x8b, 0x72, 0x39, 0xc3, 0x35, 0x8a, 0x50, 0xcf, + 0x10, 0x51, 0xa6, 0xd1, 0x12, 0x19, 0x46, 0x5c, 0x85, 0xfe, 0xb2, 0x43, + 0x31, 0x52, 0x59, 0x01, 0xea, 0x15, 0x9a, 0xa4, 0x55, 0x61, 0x18, 0xb7, + 0xa0, 0x50, 0xbe, 0x08, 0x61, 0x38, 0x55, 0x53, 0x43, 0x3a, 0x58, 0xa7, + 0x94, 0x5a, 0x85, 0x0a, 0x47, 0x5d, 0x6c, 0x96, 0x7c, 0x92, 0x9b, 0xbe, + 0x8c, 0x16, 0x70, 0x54, 0x71, 0x59, 0x9c, 0xd1, 0x6a, 0xcc, 0x78, 0x8e, + 0x70, 0x92, 0x44, 0xc2, 0x41, 0x1e, 0x08, 0xa7, 0x35, 0x94, 0xbb, 0x5e, + 0xac, 0x08, 0x21, 0x48, 0xc5, 0xc7, 0x3d, 0x11, 0x79, 0x20, 0xb5, 0xbf, + 0x31, 0xd0, 0x21, 0x3c, 0x43, 0x8a, 0xc0, 0xbb, 0x60, 0x20, 0xd3, 0x0a, + 0x98, 0x75, 0x64, 0x60, 0xbe, 0xd8, 0xd9, 0x45, 0xd8, 0x89, 0xca, 0x7a, + 0x7d, 0xb3, 0x28, 0xc4, 0x4f, 0x43, 0x18, 0x8d}, + // cipherTextDigest + {0x31, 0x56, 0xf9, 0xc5, 0xc3, 0x95, 0xef, 0x15, 0x0d, 0x73, 0xa6, + 0x03, 0x98, 0xed, 0xf2, 0xf8, 0x09, 0x86, 0x76, 0x8f, 0x07, 0xa5, + 0x25, 0x12, 0x92, 0x8e, 0x05, 0x07, 0xb1, 0xcc, 0x9e, 0x2f}, + // secret + {0x11, 0x20, 0x14, 0xfd, 0xfa, 0x1a, 0xd3, 0x64, 0xea, 0xc0, 0x2d, + 0xbd, 0x79, 0xfd, 0x75, 0x86, 0xec, 0x55, 0x9d, 0x97, 0x24, 0xc0, + 0x08, 0x2a, 0x34, 0x05, 0xa9, 0xdd, 0x98, 0xb5, 0x9b, 0x9f}, + true}, + // tcID: 71 + {71, + params_ml_kem1024_test_mode, + // entropy + {0xe7, 0xe4, 0x2c, 0x33, 0xc5, 0x41, 0xbb, 0xbe, 0xc6, 0xfc, 0x7b, + 0xf1, 0xed, 0x58, 0x14, 0x56, 0x11, 0xea, 0x7d, 0xa9, 0xdd, 0x2c, + 0x72, 0x9f, 0xe4, 0xc5, 0xbc, 0x79, 0x79, 0xc7, 0xa9, 0x28}, + // publicKey + {0xc4, 0xf6, 0x94, 0x2b, 0xa4, 0xcc, 0x3c, 0x57, 0x1d, 0xc0, 0x28, 0x5b, + 0xc5, 0x41, 0x25, 0x7e, 0x5a, 0x23, 0xc7, 0x79, 0x1b, 0xcc, 0xa9, 0x3d, + 0x3d, 0x52, 0x3e, 0x60, 0x1a, 0x85, 0xb7, 0xc2, 0x84, 0xd3, 0xab, 0x80, + 0x4c, 0xec, 0xa3, 0x2d, 0x33, 0x73, 0x7f, 0x39, 0xaf, 0x9d, 0x83, 0xbf, + 0x72, 0x75, 0x15, 0x0d, 0xf4, 0x9b, 0x8c, 0x52, 0x7f, 0x1e, 0x3b, 0x67, + 0x4f, 0xf3, 0xa1, 0x14, 0x9a, 0x99, 0x5c, 0xd0, 0x87, 0x2f, 0x89, 0x91, + 0x96, 0xd7, 0xa5, 0xb0, 0x4c, 0x36, 0xe2, 0x05, 0x7c, 0xb8, 0xf9, 0x1e, + 0x60, 0xa1, 0x66, 0xd9, 0x55, 0x25, 0x45, 0x19, 0x32, 0x5e, 0x94, 0xa9, + 0x56, 0x33, 0xc5, 0x34, 0xe1, 0x14, 0x90, 0x03, 0xcb, 0x78, 0xa8, 0xcb, + 0x41, 0xd5, 0x4a, 0xb8, 0x22, 0xc7, 0xa9, 0x2a, 0x39, 0xc2, 0xb8, 0x87, + 0x23, 0xb8, 0x7b, 0xc7, 0xe0, 0x71, 0xbf, 0xac, 0x23, 0xbb, 0xd4, 0xa2, + 0x8c, 0x85, 0xb5, 0x99, 0xd0, 0x42, 0xb8, 0x0a, 0x7b, 0x68, 0xd0, 0x35, + 0x4c, 0xc0, 0xa3, 0xdc, 0xda, 0x6e, 0x8b, 0x39, 0x01, 0x7f, 0x82, 0x8c, + 0x6b, 0x67, 0x41, 0xd6, 0x94, 0x9e, 0xa5, 0xa9, 0xb9, 0xb2, 0x50, 0x92, + 0x87, 0x02, 0x7f, 0xb8, 0x17, 0x89, 0x13, 0xf6, 0x00, 0x71, 0x54, 0x40, + 0x4f, 0x00, 0xc6, 0x0c, 0x55, 0x7c, 0x75, 0xbb, 0x9d, 0x4a, 0x21, 0xcc, + 0x79, 0x93, 0x7c, 0x8a, 0xb5, 0x1a, 0x10, 0x81, 0x1a, 0x53, 0xc4, 0x38, + 0x01, 0xa9, 0x66, 0x91, 0xec, 0xba, 0x36, 0x24, 0x06, 0xe1, 0xf4, 0x67, + 0x09, 0x8b, 0x6e, 0x43, 0xc3, 0xc0, 0xbe, 0xc6, 0x0e, 0x1e, 0xeb, 0xc5, + 0x76, 0x9b, 0x06, 0xb3, 0xd2, 0xb2, 0xb7, 0xf3, 0x25, 0x91, 0x74, 0xab, + 0xe7, 0x73, 0x2b, 0x1c, 0xb0, 0x3a, 0xe7, 0xbb, 0x20, 0x52, 0xa4, 0x30, + 0xed, 0x12, 0x27, 0xfa, 0x1b, 0x29, 0xff, 0x37, 0xc7, 0xca, 0x2c, 0x0f, + 0x11, 0xa7, 0x03, 0x3d, 0x72, 0xc2, 0x85, 0x84, 0x61, 0x97, 0x8b, 0xcc, + 0x3f, 0x19, 0x57, 0x91, 0x55, 0x42, 0x08, 0xe3, 0x1c, 0xea, 0x14, 0x7d, + 0x99, 0x5a, 0x37, 0x2a, 0x36, 0x6d, 0xf7, 0x74, 0x3d, 0xfc, 0x53, 0x66, + 0xf2, 0x77, 0x0e, 0xad, 0x9c, 0x31, 0x72, 0xab, 0x71, 0xc0, 0x64, 0xc0, + 0x49, 0xd5, 0x15, 0xfe, 0x25, 0x98, 0x79, 0xb0, 0x4b, 0x0f, 0x56, 0x8c, + 0xaa, 0x0a, 0x47, 0x7d, 0x53, 0xad, 0xc7, 0xd1, 0xaf, 0x00, 0x58, 0xb5, + 0xf3, 0x6a, 0x24, 0x14, 0x9a, 0x57, 0xd5, 0x07, 0x1c, 0xc3, 0x47, 0xc5, + 0xb6, 0xe3, 0xcf, 0x39, 0x97, 0x50, 0x3d, 0xf1, 0xb1, 0xa7, 0x06, 0x0b, + 0x1f, 0xa8, 0xc5, 0xc4, 0xe5, 0x67, 0xc2, 0xf5, 0x86, 0xad, 0x5a, 0x3c, + 0x29, 0x41, 0x38, 0x4e, 0xc2, 0x74, 0xf9, 0x37, 0x7a, 0xdb, 0x9a, 0x01, + 0x9a, 0xb1, 0x08, 0x19, 0xa7, 0x9d, 0x72, 0x23, 0x5b, 0x8e, 0x35, 0x9b, + 0x73, 0x49, 0x15, 0xd6, 0xc2, 0x7e, 0xcb, 0xb1, 0xbc, 0xc9, 0x99, 0x69, + 0x0c, 0xd0, 0x97, 0xd7, 0x23, 0xbb, 0xe0, 0x07, 0x8b, 0xe9, 0x16, 0x7b, + 0xf3, 0x15, 0x76, 0x55, 0x50, 0x9a, 0x44, 0xd3, 0x63, 0x5a, 0x05, 0x2c, + 0x9d, 0x5b, 0x47, 0x69, 0x2c, 0x12, 0x6e, 0x79, 0xbb, 0x8e, 0xc3, 0xa8, + 0x84, 0x15, 0x3c, 0x43, 0x2b, 0xb1, 0x61, 0xba, 0xb8, 0x5b, 0xd9, 0x8e, + 0xb8, 0x16, 0x51, 0x20, 0x27, 0xce, 0x46, 0x55, 0x14, 0x35, 0x28, 0x56, + 0xa7, 0x89, 0x1c, 0x7f, 0x11, 0x02, 0x5d, 0xb5, 0x28, 0xf6, 0x04, 0x45, + 0xcf, 0x13, 0x3f, 0x48, 0x4a, 0x95, 0x2d, 0xf4, 0x09, 0x55, 0xcb, 0x12, + 0x31, 0x48, 0x28, 0xa0, 0x96, 0x4e, 0xcb, 0xfb, 0x88, 0x29, 0x84, 0x41, + 0x17, 0xba, 0x61, 0xcf, 0x17, 0x5c, 0x03, 0x46, 0xcc, 0x0a, 0xfc, 0x81, + 0x36, 0x82, 0x31, 0xab, 0xf4, 0x0f, 0x11, 0xb5, 0xcf, 0xbe, 0x51, 0xac, + 0x49, 0x95, 0x96, 0xa9, 0x05, 0x69, 0xfa, 0x6b, 0x01, 0x62, 0xe8, 0xca, + 0xb5, 0x60, 0x2b, 0x7d, 0xb4, 0x6b, 0xae, 0x45, 0x35, 0x6b, 0x68, 0xc9, + 0x61, 0x04, 0xb5, 0xf8, 0xe9, 0x54, 0x5b, 0xd6, 0x97, 0x17, 0x41, 0x45, + 0xec, 0x19, 0x48, 0xde, 0x76, 0xaf, 0x91, 0x51, 0xc6, 0x9c, 0x15, 0x7d, + 0x3d, 0x5c, 0x40, 0xee, 0xbc, 0xb9, 0x2d, 0x42, 0x8a, 0x2c, 0xec, 0x63, + 0xf8, 0xa4, 0x6b, 0x51, 0x4c, 0x06, 0x5d, 0x1b, 0xca, 0x8b, 0x65, 0x40, + 0x7b, 0x8c, 0x5e, 0x3d, 0x91, 0x18, 0x5a, 0xd8, 0xc8, 0xfb, 0x93, 0x64, + 0x41, 0x82, 0x49, 0x85, 0x35, 0x6b, 0xaa, 0xc0, 0x36, 0xc7, 0xb4, 0xa8, + 0x4a, 0x4b, 0x9e, 0x88, 0x75, 0xae, 0x1f, 0xda, 0xae, 0xf4, 0x99, 0xc3, + 0x7c, 0x11, 0x26, 0xd7, 0xd6, 0x73, 0x5d, 0x35, 0x30, 0x40, 0xf0, 0xab, + 0xfd, 0xfc, 0x8b, 0x2e, 0xe8, 0xce, 0x40, 0xb7, 0x13, 0x98, 0xe5, 0x8e, + 0x46, 0xf2, 0x47, 0x7e, 0x7c, 0x1d, 0x7f, 0x17, 0x71, 0xcc, 0x2c, 0x18, + 0xaa, 0x43, 0x3f, 0xd3, 0x7b, 0x55, 0x12, 0x15, 0x3b, 0x11, 0x9b, 0x7a, + 0x6d, 0x62, 0x98, 0x83, 0xd1, 0x50, 0x22, 0x89, 0x7d, 0x93, 0xb9, 0x56, + 0xc0, 0xe2, 0xc0, 0x3d, 0x69, 0x1c, 0x69, 0x42, 0x91, 0x17, 0x41, 0xc9, + 0x41, 0x74, 0x58, 0x09, 0x7a, 0x99, 0xee, 0x34, 0x6c, 0x6f, 0x72, 0xa5, + 0x93, 0x92, 0xba, 0xb9, 0x3c, 0x45, 0x62, 0x4a, 0xa0, 0xd3, 0x0a, 0x4d, + 0x52, 0x80, 0x6a, 0x22, 0xd2, 0xc1, 0x1a, 0x91, 0x23, 0xf9, 0x85, 0x9f, + 0x1e, 0x7c, 0x74, 0x44, 0x56, 0x0b, 0xde, 0x38, 0x6f, 0x2c, 0x7b, 0x76, + 0x63, 0x67, 0x40, 0xe5, 0x8c, 0x9d, 0xda, 0xc2, 0xc6, 0x6e, 0xd3, 0x2e, + 0x3a, 0x4a, 0xa2, 0xaf, 0xe3, 0x28, 0xb9, 0xcb, 0x6a, 0x2a, 0xdc, 0x51, + 0xc5, 0x2c, 0x68, 0xf4, 0xd7, 0x26, 0x38, 0x71, 0x20, 0x54, 0x97, 0x0a, + 0xfd, 0xdc, 0x08, 0xf9, 0xb4, 0xba, 0xa9, 0x36, 0xc6, 0xb1, 0xea, 0x04, + 0xc1, 0x49, 0xa0, 0x12, 0x65, 0x34, 0x50, 0x43, 0x59, 0x69, 0x24, 0x8e, + 0x0c, 0xec, 0x95, 0x1d, 0xc2, 0x3e, 0x53, 0x23, 0x74, 0x71, 0xb0, 0x50, + 0x74, 0x49, 0x13, 0x96, 0x64, 0x68, 0x5a, 0x25, 0x53, 0x8f, 0xf9, 0x96, + 0xe4, 0x2a, 0x56, 0x13, 0x8c, 0x68, 0xa4, 0x30, 0xcc, 0x34, 0x2c, 0xc5, + 0xc7, 0x00, 0x79, 0x80, 0x54, 0x6a, 0x94, 0xc7, 0xb2, 0x4c, 0xa6, 0x72, + 0x75, 0x88, 0x64, 0x55, 0xb5, 0xa2, 0x54, 0x81, 0xca, 0x62, 0xdb, 0x14, + 0x39, 0x1c, 0x03, 0xd1, 0xac, 0xbc, 0x5a, 0xc9, 0x38, 0x15, 0xf8, 0x62, + 0x3d, 0x13, 0x7d, 0xd9, 0x32, 0xc3, 0xb1, 0xa8, 0xb9, 0x55, 0x76, 0x53, + 0x3a, 0xb1, 0x2e, 0x9f, 0xd5, 0x85, 0xf4, 0x60, 0x6f, 0x2f, 0x74, 0x0b, + 0x1b, 0xe2, 0xb9, 0x86, 0xbc, 0x87, 0x26, 0x88, 0x0d, 0xcc, 0xc6, 0x46, + 0x55, 0x32, 0x5f, 0x6b, 0x62, 0x28, 0xf7, 0x79, 0x7e, 0x8b, 0x59, 0x2b, + 0x18, 0x59, 0x5e, 0x4a, 0x8a, 0x18, 0x00, 0xeb, 0x82, 0x18, 0x86, 0x6a, + 0xbe, 0xb1, 0xc5, 0x4e, 0x9c, 0x8e, 0xa8, 0x83, 0x18, 0x27, 0x7c, 0x8e, + 0xc0, 0x6c, 0xa1, 0xec, 0x01, 0xca, 0xc8, 0xe0, 0xbe, 0x93, 0x56, 0x25, + 0x15, 0xec, 0xcb, 0x80, 0xb3, 0x4a, 0xe6, 0x58, 0xbd, 0x6c, 0xd5, 0x56, + 0x32, 0x27, 0xc7, 0xfe, 0x80, 0x54, 0x8a, 0x29, 0xa3, 0x46, 0x39, 0x4c, + 0x3c, 0x26, 0x26, 0x15, 0x18, 0x2b, 0xa4, 0x90, 0x23, 0x08, 0x37, 0x34, + 0x98, 0x47, 0x76, 0x32, 0x66, 0x2a, 0xd3, 0x12, 0x02, 0xe6, 0x46, 0x67, + 0x13, 0x15, 0x9a, 0x34, 0x34, 0x24, 0x56, 0xe6, 0x1d, 0x74, 0xc6, 0xc9, + 0xcb, 0xdc, 0x8e, 0x84, 0x9c, 0xc9, 0x8f, 0x31, 0x5c, 0xae, 0x50, 0x4a, + 0xc6, 0x00, 0x28, 0x69, 0x17, 0x72, 0x1d, 0x88, 0x86, 0xa1, 0xe6, 0x88, + 0xfb, 0x79, 0x49, 0x8e, 0xfa, 0x70, 0x4e, 0xe7, 0x0e, 0x27, 0x97, 0x8a, + 0xce, 0x42, 0xc9, 0xf3, 0x65, 0x6a, 0x43, 0x85, 0x84, 0x85, 0x36, 0x48, + 0x76, 0x33, 0xbc, 0x1b, 0x37, 0x7f, 0xa2, 0xac, 0xb1, 0x5d, 0x0a, 0x21, + 0xae, 0x3b, 0xb7, 0x7a, 0x41, 0xcd, 0x84, 0x68, 0x5d, 0xfa, 0x61, 0x70, + 0xaa, 0xdb, 0xa1, 0x86, 0xb4, 0x73, 0x2b, 0xa0, 0xbb, 0xb3, 0x0c, 0x01, + 0xa4, 0x22, 0xa8, 0xe4, 0x64, 0xac, 0xe6, 0x91, 0x23, 0x32, 0x66, 0x14, + 0x7d, 0x0a, 0xc0, 0xf7, 0x8a, 0xc4, 0xa9, 0xda, 0x1d, 0x64, 0x52, 0x75, + 0x33, 0x90, 0xc0, 0x40, 0xa6, 0x64, 0x96, 0x89, 0x9e, 0xd4, 0x1c, 0x67, + 0x38, 0xc5, 0xb6, 0xe9, 0xe5, 0x45, 0x97, 0x58, 0x22, 0x70, 0xea, 0x51, + 0x82, 0xf7, 0xab, 0x07, 0x09, 0xa3, 0x24, 0xd4, 0xae, 0x0d, 0xe7, 0x8d, + 0x0c, 0x48, 0x22, 0xfe, 0x82, 0x50, 0x64, 0xf5, 0xb1, 0xf2, 0x40, 0xb9, + 0xc9, 0x3b, 0x5f, 0x52, 0x08, 0x60, 0xe6, 0x40, 0xba, 0xda, 0xe6, 0x8f, + 0x92, 0x92, 0xaf, 0x19, 0xc1, 0x02, 0x32, 0x46, 0x7e, 0x72, 0x03, 0x8a, + 0xfc, 0x4b, 0x90, 0x80, 0xba, 0x9d, 0xbf, 0x62, 0x93, 0xfb, 0xa1, 0x10, + 0x32, 0xa7, 0x6b, 0xb9, 0x92, 0xcb, 0xc4, 0xa1, 0x2b, 0x62, 0xec, 0x5e, + 0x7e, 0x22, 0x1e, 0xe1, 0x0a, 0x17, 0x04, 0x9b, 0x00, 0x60, 0xdc, 0x1c, + 0x17, 0xd5, 0xae, 0x64, 0xd9, 0x0e, 0x85, 0x17, 0x0b, 0x91, 0x9a, 0x51, + 0xc3, 0x69, 0x4d, 0xa9, 0x01, 0x4d, 0x61, 0x62, 0x3e, 0x21, 0x90, 0xaf, + 0x0e, 0xf3, 0x23, 0x22, 0x80, 0x05, 0xfb, 0xc2, 0x16, 0x24, 0x1b, 0xbe, + 0x7d, 0x87, 0x79, 0x3c, 0x23, 0x16, 0x7f, 0x59, 0x2f, 0xc9, 0xac, 0x3d, + 0xf2, 0x68, 0x41, 0x2e, 0x16, 0xc4, 0x33, 0xe5, 0xb5, 0xf6, 0xa5, 0xbe, + 0x96, 0x98, 0x08, 0x56, 0x33, 0x7f, 0xa3, 0x67, 0x3d, 0xb4, 0x21, 0x9b, + 0x46, 0xd1, 0xb2, 0x1f, 0xe9, 0x3a, 0xd1, 0x22, 0xb5, 0xf7, 0x5c, 0x2a, + 0xb3, 0x60, 0x03, 0x1f, 0x68, 0x23, 0x8d, 0x26, 0xac, 0x1c, 0x29, 0x13, + 0x50, 0xd5, 0x63, 0xfd, 0x29, 0x27, 0xb5, 0x96, 0x02, 0x27, 0x8a, 0xa7, + 0x58, 0x71, 0xb0, 0x2b, 0x0a, 0x4e, 0xf4, 0x28, 0x0f, 0x90, 0x7a, 0xab, + 0x0c, 0x47, 0xb5, 0xb0, 0x10, 0xa7, 0xce, 0x08, 0x34, 0xb0, 0xe9, 0x00, + 0xe8, 0x2b, 0x99, 0x7c, 0xf0, 0x22, 0x77, 0x07, 0x7f, 0x64, 0xf9, 0x54, + 0xf6, 0x37, 0x90, 0xb9, 0x79, 0x69, 0x56, 0xcc, 0x9a, 0x14, 0x17, 0x8d, + 0x76, 0xa6, 0x6a, 0x82, 0xa8, 0x82, 0x78, 0x67, 0xc9, 0x98, 0x1b, 0xcf, + 0xe8, 0x96, 0xb9, 0x23, 0x9c, 0x73, 0xc8, 0xa1, 0x65, 0x93, 0xe4, 0x9e, + 0xee, 0xe4, 0x8e, 0xd0, 0x15, 0x6c, 0x98, 0x45, 0x43, 0x5a, 0xcc, 0x9d, + 0x73, 0x35, 0x91, 0xf1, 0xa1, 0x0e, 0xda, 0x90, 0x56, 0xb5, 0x50, 0xc8, + 0xe8, 0x77, 0x17, 0x82, 0x26, 0x23, 0xc1, 0x69, 0xcb, 0xfa, 0x21, 0xbc, + 0xcf, 0x34, 0xa4, 0x39, 0x6c, 0x19, 0x48, 0xf2, 0x76, 0x0e, 0x26, 0xc8, + 0x54, 0x3a, 0xb2, 0x5b, 0x89, 0x30, 0x7d, 0xc8, 0x28, 0xcc, 0x50, 0x68, + 0x61, 0xca, 0xb9, 0x06, 0x81, 0x41, 0xf1, 0x2a, 0x48, 0xf1, 0xbc, 0x1f, + 0x74, 0xca, 0x8a, 0x2b, 0x79, 0xcd, 0x5b, 0x58, 0x4e, 0x62, 0x62, 0x04, + 0xbb, 0x30, 0x2d, 0x09, 0xd4, 0x9d, 0x2d, 0xcb, 0x0b, 0x66, 0xd5, 0xb9, + 0x9c, 0xf4, 0x49, 0xed, 0x40, 0x1a, 0xd6, 0x10, 0x8f, 0x1f, 0x8b, 0xa4, + 0x64, 0xd6, 0xea, 0x1a, 0x4e, 0x1e, 0x01, 0xee, 0x58, 0xf2, 0x19, 0x52, + 0xc7, 0xf3, 0xbb, 0xf9, 0x46, 0x7a, 0xf5, 0xc9, 0x50, 0x63, 0x8b, 0x3d, + 0x26, 0xa8, 0xcf, 0x88, 0xed, 0x1c, 0xc1, 0x32}, + // cipherTextDigest + {0x88, 0x05, 0x1f, 0x10, 0xbf, 0xa9, 0x01, 0xdd, 0x13, 0x75, 0xfd, + 0xea, 0x48, 0x73, 0x29, 0x77, 0x19, 0xf9, 0x53, 0xfa, 0x86, 0xce, + 0xe2, 0x41, 0x8e, 0xd6, 0xe4, 0x93, 0xc1, 0x58, 0x19, 0x48}, + // secret + {0x6c, 0x56, 0x47, 0x1b, 0x92, 0xa8, 0x7b, 0x61, 0xf4, 0x4b, 0x6a, + 0x8c, 0x86, 0x77, 0x8b, 0x0a, 0x36, 0x3d, 0x54, 0x57, 0xb2, 0x4a, + 0xa1, 0xf4, 0x4f, 0x8d, 0xdc, 0xdb, 0xa7, 0xd1, 0xce, 0x58}, + true}, + // tcID: 72 + {72, + params_ml_kem1024_test_mode, + // entropy + {0x7a, 0x8c, 0xb0, 0x07, 0xca, 0x98, 0x49, 0x1a, 0xb2, 0xfa, 0x05, + 0x1c, 0xca, 0xf6, 0x36, 0xfd, 0xdf, 0x29, 0xc7, 0x9b, 0x7e, 0xa7, + 0x34, 0xa6, 0x8f, 0x1c, 0xa8, 0x6c, 0x85, 0x00, 0x83, 0xd3}, + // publicKey + {0x66, 0xcb, 0x5d, 0x55, 0xa7, 0x30, 0xa9, 0xfb, 0x2a, 0x1c, 0x27, 0x5a, + 0xd7, 0x38, 0x45, 0xb3, 0xdb, 0x76, 0xc7, 0x73, 0x36, 0x1c, 0x9c, 0x2f, + 0x1a, 0xfa, 0xb2, 0xfc, 0x55, 0x96, 0xa9, 0x30, 0x6a, 0x88, 0x9c, 0x17, + 0x8b, 0x54, 0x87, 0xd5, 0x6a, 0x0e, 0x37, 0x13, 0x00, 0x72, 0xe5, 0x53, + 0xb3, 0xf7, 0x2d, 0xfc, 0x0b, 0x57, 0x14, 0x44, 0xa0, 0x46, 0x53, 0x21, + 0x10, 0x3c, 0x0b, 0x14, 0xf4, 0x7d, 0xcb, 0xd2, 0x1e, 0x72, 0x3c, 0x40, + 0x0f, 0x72, 0xbc, 0xd5, 0xc7, 0x28, 0x1a, 0xe1, 0x27, 0x5a, 0x56, 0xb0, + 0xd2, 0x66, 0x9f, 0x2b, 0x8c, 0xbc, 0x5f, 0xec, 0xa7, 0x50, 0xcc, 0x3d, + 0xe4, 0xe9, 0x37, 0xda, 0xbb, 0x98, 0xe5, 0x01, 0xae, 0x31, 0x3c, 0x2a, + 0x7b, 0x30, 0x7e, 0x82, 0x96, 0xc4, 0xb9, 0x28, 0xcc, 0x09, 0x78, 0x94, + 0xe1, 0x95, 0x61, 0x77, 0xf0, 0x65, 0xda, 0xb0, 0x1f, 0x3c, 0x6b, 0xa3, + 0x1b, 0x29, 0xa1, 0xbb, 0xc4, 0xc5, 0xa0, 0x4c, 0xbc, 0xdc, 0x57, 0xb5, + 0xca, 0x8b, 0x19, 0x84, 0xe6, 0xbb, 0x6a, 0xfa, 0x89, 0x51, 0x1a, 0x2e, + 0x31, 0xa4, 0x5c, 0x41, 0x3b, 0x3c, 0x46, 0x8c, 0x47, 0xa8, 0x65, 0x87, + 0x18, 0xf7, 0x11, 0xf6, 0x67, 0x41, 0xc5, 0xc6, 0x85, 0xac, 0xaa, 0x16, + 0xa6, 0x74, 0x9e, 0xde, 0x72, 0x02, 0x64, 0x35, 0x86, 0xe5, 0x77, 0x71, + 0xe2, 0x4b, 0x78, 0x4a, 0x3a, 0x20, 0x00, 0x0a, 0x2b, 0x2c, 0x82, 0xca, + 0x78, 0xf9, 0x74, 0x41, 0x2c, 0x02, 0x63, 0xb5, 0xcc, 0xe3, 0x76, 0x96, + 0x63, 0x1b, 0xaa, 0xad, 0xb9, 0xb7, 0x04, 0x91, 0xbc, 0x20, 0x5b, 0x69, + 0x32, 0xd5, 0x01, 0x63, 0x0c, 0xb0, 0xbe, 0xd6, 0x42, 0xb7, 0x02, 0x7b, + 0x8d, 0x3a, 0xc2, 0xb7, 0x2c, 0x09, 0x78, 0x2b, 0x0d, 0x9d, 0x50, 0xaa, + 0x33, 0xd6, 0x71, 0x3a, 0xcb, 0x2a, 0x28, 0x35, 0x30, 0xb5, 0xe2, 0x54, + 0x70, 0xd7, 0x3d, 0x2b, 0x20, 0x6e, 0x45, 0xe1, 0x3a, 0x14, 0x13, 0x93, + 0xa4, 0x14, 0x4b, 0xd2, 0xe0, 0x02, 0x17, 0x04, 0x63, 0x91, 0xdc, 0x38, + 0x76, 0x0b, 0x19, 0x64, 0x40, 0x31, 0xab, 0xf7, 0x2b, 0x0c, 0x0a, 0x8a, + 0x7e, 0xc9, 0x1b, 0xe6, 0xd1, 0xbc, 0x30, 0x21, 0xbb, 0x79, 0x24, 0x5e, + 0x40, 0x77, 0xba, 0x93, 0x92, 0x01, 0x36, 0x38, 0x5e, 0x3d, 0x0a, 0x14, + 0x5d, 0xd9, 0x04, 0x12, 0x61, 0x14, 0x3f, 0x54, 0xb2, 0x83, 0xa7, 0xc6, + 0x70, 0x77, 0xad, 0xae, 0x79, 0x6d, 0xb5, 0x2c, 0x26, 0xb6, 0x57, 0x40, + 0xf0, 0x93, 0x28, 0xc5, 0x3a, 0xb1, 0x06, 0x16, 0x7e, 0x21, 0x51, 0x51, + 0xdb, 0xab, 0xc5, 0x25, 0x08, 0x9c, 0xd3, 0xea, 0x41, 0x00, 0x1b, 0x9b, + 0x48, 0x01, 0x05, 0x74, 0x3a, 0x0b, 0xef, 0x64, 0x08, 0xed, 0x1b, 0x14, + 0xa1, 0x80, 0xc5, 0x19, 0xf4, 0xb5, 0x09, 0xd7, 0x3f, 0xd3, 0x4b, 0x3c, + 0xa4, 0x3b, 0xb4, 0x26, 0xd4, 0xa6, 0x3e, 0xcc, 0x67, 0x6f, 0x26, 0x5d, + 0xa4, 0x66, 0x84, 0xd4, 0x39, 0xb1, 0xd0, 0x29, 0x4c, 0xb4, 0xa0, 0xa0, + 0x27, 0x5b, 0xaf, 0x43, 0x72, 0x34, 0xc8, 0x20, 0x46, 0xb5, 0xfb, 0x44, + 0x3f, 0x86, 0x72, 0x89, 0xdc, 0x25, 0x64, 0x46, 0xcd, 0x74, 0xd1, 0x0e, + 0x33, 0xf0, 0x2f, 0x00, 0xb9, 0x56, 0x09, 0x16, 0x91, 0x43, 0xaa, 0x1b, + 0x20, 0x17, 0x53, 0x9f, 0x86, 0xa7, 0x1d, 0xf5, 0x23, 0x53, 0x99, 0x17, + 0x8d, 0x06, 0x2e, 0xb8, 0x14, 0x3e, 0x72, 0x81, 0x94, 0xc6, 0x31, 0x18, + 0x70, 0x68, 0x95, 0x93, 0x98, 0x1e, 0x33, 0xd0, 0x77, 0x8d, 0x98, 0x9c, + 0xb4, 0x2c, 0xc9, 0x81, 0x4a, 0x5b, 0xb4, 0x58, 0xb1, 0xb0, 0x25, 0x76, + 0xd9, 0x81, 0x20, 0x3c, 0x3a, 0x0b, 0x86, 0xc5, 0xae, 0xe5, 0x0a, 0x65, + 0x85, 0x32, 0x19, 0x78, 0x7a, 0x88, 0xef, 0x85, 0x79, 0x3b, 0xf0, 0x78, + 0xf4, 0x45, 0x86, 0x47, 0xba, 0x40, 0xa6, 0xc9, 0x97, 0x2b, 0x10, 0x3e, + 0x03, 0x58, 0xc5, 0x11, 0x03, 0xbc, 0x24, 0xa6, 0x13, 0x63, 0xaa, 0x1d, + 0xc5, 0xc3, 0x4c, 0x2e, 0xb4, 0xaa, 0xdc, 0xd0, 0x6f, 0x46, 0x17, 0x26, + 0x6e, 0xd7, 0x7c, 0xc2, 0x74, 0x67, 0x83, 0x4b, 0x9d, 0xf7, 0xbc, 0x98, + 0x75, 0x0b, 0x0e, 0xab, 0x7c, 0x23, 0x59, 0xbb, 0xca, 0xab, 0xb0, 0x83, + 0xf6, 0x37, 0x57, 0x9a, 0x06, 0x77, 0xfb, 0x3c, 0x0c, 0xb6, 0xf0, 0x86, + 0xec, 0xc1, 0x9b, 0x37, 0x06, 0x5e, 0x4d, 0xa8, 0x43, 0x3f, 0xf6, 0x6c, + 0xa2, 0xdc, 0x2d, 0x57, 0xc0, 0x4b, 0x18, 0xda, 0x31, 0x03, 0xc3, 0x0e, + 0xf0, 0xb5, 0xb7, 0x50, 0x16, 0x82, 0x89, 0x01, 0x31, 0x93, 0xba, 0xce, + 0xaa, 0xc8, 0x4f, 0xc2, 0xa5, 0x67, 0x24, 0xcb, 0x8e, 0xfa, 0xa6, 0x9d, + 0xcc, 0x83, 0xc8, 0x4a, 0x62, 0x3d, 0x34, 0x07, 0xc5, 0xd8, 0x18, 0xc3, + 0x5c, 0x32, 0x5f, 0x2c, 0x22, 0xc8, 0xac, 0xf4, 0x5c, 0xa9, 0x9b, 0x73, + 0xb6, 0x38, 0x91, 0x04, 0x12, 0x55, 0x3e, 0xe1, 0xaf, 0x76, 0xd9, 0xb6, + 0x2d, 0x1b, 0xb6, 0x2b, 0xfa, 0x65, 0x9b, 0xd4, 0xb9, 0x24, 0xb3, 0x26, + 0xc3, 0x1b, 0x81, 0x48, 0x51, 0x42, 0x89, 0x6a, 0x9d, 0x8c, 0x49, 0xae, + 0x33, 0xec, 0xb5, 0xb5, 0x79, 0x0a, 0xb2, 0x40, 0x42, 0x19, 0xa1, 0xc5, + 0x84, 0xb4, 0x76, 0x1f, 0x2c, 0xb5, 0x4c, 0xa3, 0x9e, 0x76, 0xa0, 0xce, + 0xa0, 0x98, 0x2c, 0x14, 0x6a, 0x96, 0x10, 0xc6, 0x9c, 0xf5, 0xba, 0x9b, + 0x41, 0xe3, 0x98, 0xca, 0x3a, 0x1d, 0x04, 0x09, 0x62, 0xae, 0x4b, 0x84, + 0xbf, 0x4c, 0x2b, 0x69, 0x80, 0x60, 0x7c, 0xf4, 0x83, 0x8e, 0x25, 0x58, + 0xbe, 0x0a, 0x8e, 0x37, 0x8a, 0x24, 0x06, 0x91, 0x52, 0xc3, 0x56, 0xc1, + 0xe9, 0x33, 0x9d, 0x58, 0xca, 0x33, 0x41, 0x95, 0x2c, 0x5b, 0xb4, 0x4f, + 0x29, 0x3b, 0x95, 0x20, 0x12, 0x06, 0xac, 0x87, 0x32, 0x6d, 0x19, 0x80, + 0x5b, 0x71, 0xb9, 0x76, 0xe7, 0xa7, 0x56, 0x19, 0x4e, 0x5b, 0xf7, 0x1e, + 0xc7, 0xd9, 0x5a, 0xd7, 0xf4, 0x50, 0x7e, 0x49, 0x9e, 0xc8, 0x8a, 0x53, + 0xe3, 0x44, 0x0b, 0xf3, 0x70, 0x38, 0x52, 0x1c, 0x02, 0xa6, 0x54, 0x44, + 0x34, 0xd2, 0xc9, 0x25, 0xe3, 0x4a, 0x18, 0xa3, 0x49, 0xee, 0x42, 0x35, + 0x0e, 0x06, 0x8f, 0xbd, 0x00, 0x40, 0xe5, 0xf5, 0x2e, 0xac, 0x0c, 0x09, + 0x5e, 0x1a, 0x5d, 0x22, 0x00, 0x91, 0x17, 0x68, 0x97, 0xeb, 0x4b, 0xb2, + 0xa1, 0xe0, 0x6a, 0xf7, 0x67, 0xcd, 0xee, 0x45, 0x37, 0x07, 0x54, 0x0d, + 0x6e, 0xcb, 0x5e, 0xa8, 0xcb, 0x40, 0x44, 0x4a, 0x04, 0x9c, 0x81, 0x0f, + 0x5a, 0x62, 0x63, 0x11, 0x04, 0x51, 0x42, 0x83, 0x6f, 0xde, 0xe7, 0x4c, + 0x44, 0xfc, 0x29, 0xbc, 0xc6, 0x4d, 0x57, 0x46, 0xc1, 0x55, 0x99, 0xa7, + 0x49, 0xa9, 0x3a, 0x5f, 0x33, 0x27, 0xaf, 0x91, 0x0d, 0xc7, 0xa7, 0x49, + 0x79, 0xa5, 0x85, 0xdf, 0x37, 0x32, 0x19, 0xa3, 0xc2, 0xd6, 0x20, 0x77, + 0x25, 0xba, 0xad, 0x06, 0x73, 0x40, 0xa8, 0xb9, 0x77, 0x65, 0x26, 0x9d, + 0x0a, 0x79, 0x9a, 0xfe, 0xa8, 0x89, 0xd5, 0xc3, 0x08, 0x4d, 0xea, 0x43, + 0x58, 0x30, 0xb1, 0x9c, 0x09, 0x62, 0x94, 0x45, 0x48, 0x1f, 0xe6, 0x80, + 0x4c, 0x89, 0xc1, 0x47, 0xf2, 0x0c, 0xa9, 0x08, 0xa0, 0x86, 0x44, 0x63, + 0x40, 0xe9, 0x47, 0xb1, 0xeb, 0xcc, 0x70, 0xb7, 0x27, 0x1f, 0xa3, 0x5c, + 0xa7, 0x62, 0xc1, 0x9a, 0x75, 0x64, 0xe0, 0x69, 0x14, 0x1a, 0x52, 0xb9, + 0x29, 0x93, 0xc6, 0xbf, 0x48, 0x97, 0x90, 0x98, 0xc3, 0x45, 0x79, 0xab, + 0x5b, 0x04, 0x2e, 0xac, 0x10, 0x57, 0xa7, 0xc1, 0xcf, 0xd7, 0x5a, 0x37, + 0xd5, 0xf1, 0x6a, 0x28, 0x26, 0xc7, 0xe2, 0x0c, 0xc2, 0x44, 0x47, 0x7d, + 0x14, 0x6c, 0x05, 0xea, 0x29, 0x1f, 0x53, 0x3c, 0x42, 0x5d, 0x86, 0xba, + 0xf8, 0xf4, 0x02, 0x09, 0xb0, 0x04, 0x8a, 0xb8, 0xb8, 0x9d, 0xc8, 0xac, + 0x67, 0xf0, 0xac, 0xec, 0x41, 0x89, 0xeb, 0x78, 0x23, 0x79, 0x25, 0x99, + 0x50, 0x53, 0xaa, 0xd5, 0xec, 0xa6, 0xdb, 0x9c, 0x10, 0xc4, 0x82, 0x6b, + 0x95, 0x5a, 0x6b, 0x39, 0x36, 0x8c, 0x3b, 0xd1, 0x4c, 0x3e, 0x09, 0x49, + 0x98, 0x42, 0x75, 0x2e, 0x97, 0x16, 0xdf, 0x09, 0xc1, 0xe8, 0x68, 0x39, + 0x5f, 0x91, 0xb1, 0x17, 0x9a, 0xc4, 0x2f, 0x70, 0x0a, 0xa9, 0x4b, 0x85, + 0x1a, 0x3a, 0x87, 0xf8, 0xb7, 0x79, 0x90, 0xbc, 0x6d, 0x61, 0xf0, 0x67, + 0xbf, 0xc1, 0x9b, 0x1b, 0x3b, 0x7b, 0xe0, 0x8c, 0x90, 0x7c, 0x78, 0x29, + 0xc0, 0x82, 0x05, 0xa6, 0xc4, 0x07, 0x9e, 0x81, 0x7b, 0x54, 0xda, 0x79, + 0xb5, 0x04, 0x9c, 0xd4, 0x80, 0x11, 0x46, 0xaa, 0xac, 0xe5, 0xe6, 0xaf, + 0x4d, 0xc7, 0xc4, 0xa8, 0xec, 0x7f, 0x7f, 0xc3, 0x48, 0xee, 0xb2, 0x5b, + 0x89, 0x65, 0x43, 0xac, 0xa3, 0x14, 0xd9, 0xe0, 0xc0, 0x9d, 0xc1, 0x17, + 0x58, 0x9c, 0xca, 0x99, 0x42, 0xbf, 0x86, 0x75, 0xcd, 0xac, 0x39, 0xc6, + 0x92, 0x28, 0xbc, 0x64, 0x13, 0xc2, 0x28, 0xf2, 0x24, 0xaf, 0x7b, 0xa2, + 0x19, 0x5c, 0x7a, 0x46, 0x29, 0x1e, 0xd4, 0x43, 0x84, 0x86, 0x61, 0xc7, + 0x53, 0x58, 0x35, 0x50, 0xc2, 0x9d, 0x04, 0xc6, 0x99, 0x4d, 0x71, 0x83, + 0x35, 0x95, 0x9c, 0xdf, 0xc9, 0x96, 0xfc, 0x4b, 0x3b, 0x49, 0x21, 0x6c, + 0xad, 0x87, 0x3d, 0x21, 0x3c, 0xa3, 0x6e, 0xd7, 0xb6, 0x91, 0x3b, 0xb5, + 0x31, 0x62, 0xcb, 0x8a, 0x16, 0xaf, 0x95, 0x84, 0x5a, 0x71, 0xfa, 0x82, + 0x2e, 0x53, 0x2e, 0xdb, 0xa7, 0x73, 0x83, 0x24, 0x32, 0xde, 0x11, 0xae, + 0x71, 0xac, 0x31, 0xe4, 0x54, 0x29, 0x72, 0x98, 0x4e, 0xe6, 0x41, 0x48, + 0x73, 0x05, 0xb5, 0x17, 0x98, 0xc2, 0x89, 0x29, 0xbd, 0xf5, 0x16, 0xa2, + 0x46, 0x17, 0xa1, 0xd7, 0xd7, 0x78, 0xff, 0x88, 0xc5, 0xdc, 0x00, 0x77, + 0xdb, 0xc1, 0xa3, 0xfc, 0xd4, 0x8d, 0x45, 0x16, 0xba, 0x67, 0x42, 0xa1, + 0xc9, 0xb8, 0xb1, 0x7c, 0x8b, 0x7b, 0xdb, 0xc8, 0xab, 0x08, 0xb9, 0x54, + 0xba, 0x67, 0xbc, 0xf1, 0x50, 0x2f, 0x28, 0xbc, 0x8a, 0xc1, 0x11, 0x37, + 0x43, 0xf1, 0x69, 0xce, 0x78, 0x33, 0xdb, 0x7a, 0xc4, 0x2b, 0xe5, 0x55, + 0x7b, 0xda, 0xa4, 0x6f, 0x87, 0x04, 0x93, 0x6b, 0x3f, 0x36, 0xf4, 0xaf, + 0x84, 0xea, 0xc0, 0xe7, 0x9c, 0x51, 0x5a, 0x65, 0xae, 0x18, 0x45, 0x4d, + 0x1a, 0x74, 0xcf, 0x60, 0xfa, 0xc0, 0x62, 0xbb, 0x41, 0xa8, 0x01, 0xd0, + 0xbd, 0x67, 0x83, 0x47, 0x9b, 0x5e, 0x1b, 0x80, 0xa3, 0x35, 0x5b, 0x71, + 0x5b, 0x40, 0x07, 0xba, 0xfc, 0x3b, 0x7f, 0x1c, 0xbb, 0xa8, 0x2c, 0x41, + 0x8c, 0x09, 0x6d, 0x0c, 0x32, 0xc0, 0x7d, 0x75, 0x33, 0x90, 0x19, 0x68, + 0xc0, 0x8c, 0xa0, 0x1f, 0xa8, 0x8e, 0x41, 0x84, 0x2d, 0xa7, 0x0c, 0xb5, + 0xb7, 0xd7, 0x1e, 0xbb, 0x7a, 0x78, 0xfd, 0xa2, 0x1a, 0xb3, 0x3a, 0xa3, + 0x25, 0xa8, 0x7c, 0x9a, 0x33, 0x76, 0x79, 0x34, 0x06, 0xc2, 0xb6, 0xc4, + 0x22, 0xa1, 0x64, 0x95, 0xb9, 0x63, 0x30, 0xa0, 0xab, 0x46, 0x8c, 0xce, + 0x2c, 0x16, 0xb0, 0x0f, 0x98, 0x57, 0xf3, 0xa1, 0x64, 0xb4, 0xb2, 0xaa, + 0x48, 0xac, 0x2d, 0x55, 0x0c, 0x9a, 0x43, 0xb3, 0x67, 0xa6, 0x91, 0x4a, + 0x76, 0x28, 0xf4, 0x37, 0xf3, 0xb8, 0xd8, 0x59, 0x18, 0x65, 0x33, 0x20, + 0x50, 0x0d, 0x9e, 0x9a, 0x44, 0xb3, 0x2f, 0x41, 0x28, 0x1f, 0x64, 0xa3, + 0x3d, 0x6d, 0x60, 0x55, 0xa8, 0x19, 0xee, 0x47}, + // cipherTextDigest + {0x24, 0x1e, 0x1d, 0xb2, 0x45, 0xdb, 0x0f, 0x8b, 0x2f, 0xc0, 0x11, + 0xd8, 0x13, 0x55, 0xb0, 0x5f, 0x45, 0x28, 0x8e, 0x0e, 0xc5, 0x51, + 0xb6, 0x35, 0xa0, 0xe6, 0x05, 0xed, 0x2e, 0xe6, 0x85, 0x72}, + // secret + {0x38, 0x7a, 0x8f, 0xa6, 0x3d, 0x56, 0x9d, 0x7c, 0x9e, 0x6b, 0x8e, + 0x05, 0x93, 0x4e, 0x52, 0x6f, 0xf4, 0x19, 0xf9, 0xa1, 0xfa, 0xef, + 0x78, 0x77, 0x21, 0xff, 0xbb, 0x9a, 0x8c, 0x4c, 0x16, 0xc7}, + true}, + // tcID: 73 + {73, + params_ml_kem1024_test_mode, + // entropy + {0xb4, 0x96, 0x6d, 0x6f, 0x6e, 0x12, 0x81, 0x9f, 0xd3, 0x2a, 0x99, + 0xe8, 0xb9, 0x11, 0xa4, 0x86, 0x7d, 0x3f, 0x05, 0x6a, 0xdd, 0x19, + 0x20, 0x92, 0x0d, 0xa0, 0x5b, 0x90, 0x9a, 0xcb, 0x10, 0x41}, + // publicKey + {0xb4, 0xe4, 0xbe, 0x2d, 0x96, 0xcd, 0xf1, 0x51, 0x84, 0xe6, 0xf9, 0x2e, + 0xf0, 0xb8, 0xa6, 0xc2, 0x38, 0x11, 0xa5, 0x5b, 0xb6, 0xa3, 0x0c, 0x2d, + 0xfa, 0x0c, 0x80, 0x11, 0xe9, 0xb4, 0x54, 0xca, 0x7a, 0x78, 0xa2, 0x44, + 0x65, 0xd0, 0x59, 0x4e, 0xc6, 0x93, 0x86, 0x6b, 0x26, 0x78, 0x7a, 0x9d, + 0x4c, 0x89, 0x3e, 0x13, 0xa9, 0x0c, 0x72, 0xa6, 0x69, 0xbe, 0x74, 0xb4, + 0x4a, 0x5c, 0x8d, 0x1f, 0x53, 0xa5, 0x82, 0x9b, 0x50, 0x36, 0x03, 0x34, + 0xb1, 0x97, 0xb1, 0x69, 0xe2, 0x94, 0x3a, 0x08, 0xb4, 0xf0, 0x17, 0xce, + 0x2a, 0x06, 0x2f, 0x2a, 0x04, 0x0f, 0x35, 0x01, 0x26, 0x7a, 0xf4, 0xb8, + 0x5a, 0x87, 0x0f, 0xda, 0x70, 0x20, 0x99, 0x99, 0x1f, 0xda, 0xe2, 0x40, + 0xa9, 0x7b, 0x1d, 0xd5, 0xc9, 0xab, 0xfe, 0x26, 0xc3, 0x7d, 0xd7, 0xa3, + 0x5a, 0x03, 0x61, 0x12, 0xa8, 0x7e, 0xfb, 0xa3, 0x58, 0xe0, 0xcc, 0x31, + 0x85, 0xab, 0xa2, 0x68, 0x9a, 0x07, 0x43, 0x2a, 0x9f, 0xc4, 0x25, 0x9f, + 0xfb, 0xa3, 0x96, 0xb2, 0x41, 0x63, 0x3e, 0x72, 0x17, 0x62, 0x54, 0x8d, + 0x03, 0xcb, 0x56, 0xe9, 0x1a, 0x8f, 0xe2, 0xc6, 0xa9, 0x2b, 0xe5, 0x00, + 0x32, 0xe2, 0x33, 0xee, 0xe0, 0x40, 0xfb, 0x08, 0x37, 0x56, 0x0c, 0x23, + 0xb1, 0x42, 0x71, 0x06, 0x44, 0x76, 0x21, 0x98, 0x25, 0xa6, 0x6a, 0x4b, + 0x1a, 0x22, 0x15, 0xce, 0xf9, 0x70, 0xb1, 0x61, 0xa5, 0x02, 0xec, 0x87, + 0xab, 0x1b, 0x2c, 0x6a, 0x57, 0x1c, 0x54, 0x5a, 0x49, 0xe6, 0x84, 0xbb, + 0xaa, 0xd4, 0x07, 0x19, 0x89, 0x10, 0x31, 0xb0, 0xbe, 0xd8, 0xa3, 0x57, + 0x2f, 0x01, 0x8d, 0x7d, 0x67, 0x9e, 0xa9, 0x51, 0x89, 0xf7, 0xd2, 0xc2, + 0x63, 0xb4, 0xbd, 0x5b, 0x7a, 0xbc, 0xfb, 0xb9, 0x26, 0xe1, 0xc0, 0x6f, + 0xa8, 0xc9, 0x51, 0x75, 0xd3, 0x2e, 0x12, 0xf4, 0xb7, 0x73, 0x0b, 0x78, + 0xce, 0xfa, 0x5d, 0x5f, 0x92, 0x65, 0x4e, 0x31, 0x1a, 0x65, 0x18, 0x20, + 0xb3, 0x77, 0x05, 0xc2, 0x23, 0x57, 0xaf, 0xac, 0x9f, 0x2f, 0x1b, 0x0a, + 0x18, 0x47, 0x73, 0xc0, 0x85, 0x48, 0x54, 0x8b, 0xc4, 0xca, 0xa5, 0xb9, + 0xe2, 0xb2, 0x6d, 0x56, 0x64, 0xcc, 0xbb, 0x15, 0x3c, 0x9f, 0x01, 0x8e, + 0xe0, 0x6c, 0xc6, 0x62, 0xfc, 0xb3, 0xcc, 0xeb, 0xc1, 0x1b, 0x14, 0x4c, + 0xb7, 0x0b, 0x02, 0x6a, 0x5a, 0xb1, 0xdc, 0x38, 0xbb, 0xf6, 0xc9, 0x6c, + 0xc6, 0x9a, 0xce, 0x8d, 0x84, 0x46, 0x9b, 0xe7, 0x7b, 0x3f, 0x09, 0x96, + 0xa0, 0xec, 0x6f, 0xf1, 0xc4, 0x6c, 0x49, 0xb6, 0x29, 0x33, 0x2a, 0xc0, + 0x5b, 0xa4, 0xb1, 0x38, 0x66, 0x0f, 0x53, 0xe1, 0x3f, 0xb5, 0x00, 0x4a, + 0xd6, 0xc4, 0x91, 0xe8, 0xd2, 0x04, 0x9d, 0x8b, 0x73, 0x8c, 0x60, 0x00, + 0x0a, 0x23, 0x53, 0x50, 0xc0, 0x7f, 0xb5, 0x58, 0x5c, 0xc7, 0x77, 0x68, + 0xe1, 0x50, 0xbf, 0xbb, 0x11, 0xc4, 0x3e, 0x79, 0x7c, 0xac, 0xe9, 0xc3, + 0x70, 0xb7, 0x36, 0x0a, 0xf5, 0x9a, 0x26, 0x80, 0xa7, 0xaa, 0x3b, 0xc1, + 0xa1, 0x14, 0x85, 0xc2, 0xf5, 0x3e, 0xf8, 0xe4, 0x3a, 0xb9, 0xb1, 0x25, + 0x44, 0xb2, 0x99, 0x4d, 0x2a, 0x96, 0x26, 0x13, 0xa3, 0xa3, 0x9a, 0x6b, + 0xb4, 0x4b, 0x71, 0xc6, 0x32, 0x37, 0xae, 0x91, 0x74, 0x03, 0x38, 0x5d, + 0xea, 0x63, 0x4e, 0x1c, 0xa2, 0x8e, 0x40, 0x58, 0x29, 0x6d, 0x4c, 0x3e, + 0x75, 0x0a, 0x18, 0xab, 0x71, 0x2f, 0x0e, 0xf9, 0x82, 0x14, 0xa5, 0x39, + 0xea, 0xbc, 0x01, 0x11, 0x81, 0xc8, 0x09, 0x35, 0x1a, 0xdc, 0xec, 0x24, + 0x0c, 0xe3, 0x3a, 0xef, 0x01, 0x05, 0x6a, 0x7b, 0x66, 0x8a, 0xb9, 0x6b, + 0x05, 0x15, 0x60, 0xc4, 0xec, 0x60, 0x58, 0x64, 0x40, 0x7f, 0x02, 0x8c, + 0xc3, 0x87, 0x94, 0xee, 0x1a, 0x6d, 0xc9, 0xd6, 0xb8, 0x65, 0xfc, 0xa5, + 0x77, 0xbb, 0xae, 0xf2, 0xf5, 0x21, 0x95, 0x74, 0x3b, 0x8e, 0x8a, 0xc8, + 0xc4, 0x60, 0xa7, 0x46, 0x59, 0x48, 0xe2, 0x95, 0x1c, 0x2c, 0xa6, 0x39, + 0x9e, 0x29, 0x70, 0xbd, 0x7c, 0xb4, 0x1d, 0x1c, 0x78, 0x88, 0x9c, 0x24, + 0xba, 0x79, 0x8d, 0x7f, 0x4a, 0x96, 0xe4, 0xd6, 0x9b, 0x39, 0x60, 0x5d, + 0xb4, 0x54, 0x4a, 0x5e, 0xb0, 0x10, 0xfd, 0xf1, 0x05, 0xe2, 0x3b, 0xae, + 0x48, 0x79, 0x96, 0xc8, 0x2b, 0x17, 0x32, 0x22, 0x38, 0x32, 0xdb, 0x86, + 0x97, 0x24, 0x27, 0x04, 0x6c, 0xb5, 0x03, 0xe5, 0x7d, 0x0f, 0x05, 0x49, + 0xa8, 0xf8, 0x84, 0xb7, 0x72, 0x56, 0x45, 0x6a, 0x6c, 0x44, 0xeb, 0x7d, + 0x93, 0x39, 0x5b, 0x58, 0xa4, 0xcd, 0x74, 0x91, 0x28, 0x64, 0x59, 0x00, + 0x60, 0x43, 0x37, 0x26, 0x69, 0x13, 0x7f, 0x08, 0x7f, 0xf6, 0x0a, 0x8c, + 0xf6, 0x33, 0x21, 0xcb, 0x5c, 0x1c, 0x1a, 0x24, 0x1e, 0xf4, 0x2b, 0x19, + 0xf1, 0x0b, 0x9f, 0x93, 0x96, 0x25, 0xb6, 0x76, 0x9d, 0x0d, 0x71, 0x79, + 0xb2, 0x40, 0x08, 0x2c, 0xa2, 0xbf, 0x01, 0x9a, 0x6c, 0x98, 0x76, 0x39, + 0xd4, 0x92, 0x52, 0x9f, 0xf9, 0xb1, 0xd5, 0xe3, 0x97, 0xb2, 0xf6, 0x6b, + 0x1e, 0xf5, 0x39, 0xbd, 0x45, 0x14, 0xc4, 0x28, 0x69, 0x29, 0xe2, 0xb6, + 0x64, 0x52, 0x54, 0x99, 0xc9, 0x44, 0xa6, 0x92, 0x33, 0x8f, 0xfa, 0xb6, + 0x23, 0x35, 0x4a, 0x5b, 0x57, 0xbe, 0xba, 0xe4, 0x9f, 0x33, 0xc6, 0xc4, + 0xc5, 0xc8, 0x52, 0x36, 0xcc, 0xa8, 0x03, 0xe4, 0x4e, 0x78, 0x5b, 0xb9, + 0xc1, 0xfc, 0x83, 0xac, 0xda, 0x51, 0xd4, 0x28, 0x36, 0x4a, 0x54, 0x2b, + 0xeb, 0x4b, 0x60, 0x02, 0x0c, 0x1a, 0x61, 0x51, 0x5f, 0x12, 0xb5, 0x2b, + 0x35, 0xa7, 0x6f, 0xd9, 0x84, 0x4e, 0xf9, 0x7b, 0x91, 0x2e, 0xaa, 0x7b, + 0x04, 0x09, 0xa1, 0x85, 0x65, 0xaa, 0xd1, 0xa9, 0x5a, 0xec, 0xf4, 0x14, + 0xe4, 0x85, 0x7f, 0x35, 0xf5, 0xb1, 0x90, 0xf4, 0x65, 0x33, 0x39, 0x05, + 0x11, 0x38, 0xb9, 0xc6, 0xd7, 0x46, 0x01, 0xb8, 0x3c, 0xde, 0xd9, 0x0c, + 0xaf, 0x99, 0xb7, 0xbd, 0x55, 0x03, 0xc8, 0x32, 0xbd, 0x14, 0x9b, 0xc7, + 0xb6, 0x87, 0x43, 0x89, 0xc0, 0xaa, 0x2b, 0xf1, 0x44, 0x20, 0xa3, 0xa6, + 0x22, 0xc5, 0x02, 0x85, 0xbc, 0x45, 0x2d, 0x0a, 0x19, 0x27, 0x50, 0x48, + 0x17, 0x38, 0x73, 0x18, 0xa8, 0x6c, 0xbb, 0x87, 0x77, 0x0d, 0x6a, 0x62, + 0x8a, 0xe5, 0x28, 0x02, 0x59, 0x04, 0x24, 0x0c, 0x86, 0x13, 0x60, 0x30, + 0xa5, 0xe7, 0x8c, 0x0d, 0x80, 0xb2, 0xa8, 0xc7, 0x80, 0xff, 0xc9, 0x0a, + 0xc9, 0xf8, 0x2d, 0x00, 0x52, 0xc5, 0x95, 0xf9, 0xaa, 0x4c, 0x0c, 0x3d, + 0xbf, 0xd8, 0x39, 0x57, 0xa2, 0xba, 0xcf, 0xa1, 0x4e, 0x11, 0xe4, 0x85, + 0x48, 0xc3, 0x34, 0x94, 0x1c, 0x80, 0xf7, 0x61, 0x50, 0x2b, 0xe6, 0x90, + 0x43, 0x56, 0x63, 0x11, 0x07, 0x22, 0x43, 0x70, 0x5e, 0xe6, 0x4c, 0x0e, + 0x50, 0x0b, 0x72, 0xf5, 0x1c, 0x09, 0x7e, 0xbb, 0xaa, 0x28, 0x67, 0x8a, + 0x72, 0x07, 0x96, 0xa2, 0xcb, 0xa7, 0x87, 0xc8, 0x95, 0xb0, 0x83, 0x51, + 0x89, 0xc1, 0x5d, 0x63, 0xe9, 0xaa, 0x22, 0x2c, 0x0b, 0x1b, 0xc8, 0x0c, + 0x6c, 0x11, 0x3b, 0x1e, 0x08, 0x84, 0x46, 0xab, 0x5b, 0x24, 0x32, 0x73, + 0xb7, 0x55, 0x5c, 0xeb, 0xac, 0x3c, 0x8e, 0x35, 0x47, 0xbb, 0x0b, 0x9e, + 0x55, 0x83, 0x1c, 0xc6, 0x12, 0x29, 0x0a, 0x63, 0x17, 0xd0, 0xaa, 0x9c, + 0x60, 0xd6, 0xa1, 0x6e, 0xb0, 0x5f, 0x55, 0xaa, 0xb7, 0x41, 0xe7, 0x59, + 0xc8, 0x9c, 0x2a, 0xc2, 0x4b, 0xc3, 0xcc, 0xbb, 0xcf, 0x32, 0x1c, 0x87, + 0x8b, 0x22, 0x1f, 0xcc, 0x43, 0x1c, 0x29, 0x7b, 0xc5, 0x0d, 0x21, 0x8b, + 0x59, 0xb5, 0xc2, 0x83, 0x40, 0x5b, 0xfc, 0x7b, 0x13, 0xdb, 0x87, 0x84, + 0xa0, 0xb1, 0xc9, 0x69, 0x22, 0x52, 0x17, 0xa9, 0x5c, 0x1b, 0x09, 0x21, + 0x70, 0xaa, 0x57, 0x76, 0x9a, 0x98, 0xb2, 0x09, 0xb5, 0xc4, 0x51, 0x62, + 0xfb, 0xe1, 0x90, 0xb4, 0x8b, 0xb9, 0x3d, 0x5c, 0x18, 0x3f, 0x72, 0x16, + 0x7c, 0xc9, 0x9a, 0x79, 0xfb, 0xcd, 0xc4, 0x04, 0xc2, 0x18, 0x41, 0x25, + 0xbb, 0x75, 0x68, 0xdb, 0xe7, 0x4b, 0x32, 0x62, 0x25, 0x26, 0x10, 0x66, + 0x9a, 0xe1, 0x15, 0xd0, 0xa1, 0xa2, 0xf1, 0x4c, 0x2d, 0x58, 0x0b, 0xa8, + 0xdb, 0xa8, 0xc0, 0x39, 0xa8, 0x3c, 0x6e, 0x10, 0x64, 0xcb, 0x7b, 0x46, + 0x41, 0xc3, 0x30, 0x27, 0x0c, 0x1e, 0x09, 0xeb, 0x55, 0x6f, 0x36, 0x3d, + 0xa0, 0x9c, 0x30, 0x29, 0xfc, 0xa4, 0x72, 0x91, 0x46, 0x35, 0xe8, 0x94, + 0x18, 0xa8, 0xb2, 0xe1, 0x63, 0x5c, 0x92, 0x1b, 0x68, 0xda, 0x8a, 0x59, + 0x78, 0x2b, 0x31, 0xb9, 0xe3, 0xae, 0x9b, 0x86, 0xa3, 0xbb, 0x69, 0xaa, + 0x9b, 0xe6, 0xa6, 0x1a, 0xbb, 0x41, 0x9d, 0x33, 0x88, 0x66, 0x74, 0x93, + 0x2e, 0x37, 0x53, 0x85, 0x15, 0x98, 0x7d, 0x8a, 0x79, 0x8a, 0x38, 0xc9, + 0x67, 0x76, 0x3a, 0xba, 0x1b, 0x9f, 0xae, 0xa6, 0x2a, 0x3b, 0x9b, 0x0f, + 0x7b, 0x3a, 0x82, 0x74, 0xeb, 0x0f, 0x95, 0xa2, 0x1d, 0xdf, 0x9c, 0x55, + 0x14, 0xcb, 0xca, 0x4c, 0x0c, 0xaa, 0xb0, 0xdc, 0xb2, 0x7a, 0xd4, 0x2f, + 0x33, 0x11, 0x36, 0x3e, 0x70, 0x7a, 0xc4, 0xe4, 0x6a, 0xe6, 0x2a, 0x5f, + 0x05, 0xb4, 0x3e, 0x46, 0x05, 0xb5, 0x55, 0x9c, 0x99, 0x1d, 0xbb, 0x9d, + 0x68, 0x28, 0x2d, 0xa0, 0x3b, 0x17, 0x8e, 0x68, 0x66, 0xc1, 0x24, 0xc9, + 0x65, 0x58, 0x10, 0xe5, 0x92, 0x10, 0x30, 0xac, 0x40, 0x3b, 0xfb, 0x16, + 0x40, 0x85, 0xc6, 0xd4, 0x9b, 0x01, 0x7f, 0x54, 0x4e, 0x51, 0x56, 0x07, + 0x82, 0x5a, 0xba, 0x3f, 0xf9, 0x82, 0x6c, 0xb9, 0x6b, 0x14, 0x55, 0x87, + 0x1a, 0xd8, 0x2a, 0x83, 0x4a, 0xa0, 0x4d, 0xd8, 0x0a, 0x04, 0x93, 0x68, + 0x0e, 0x39, 0x7d, 0x6f, 0xb0, 0xc6, 0xe0, 0x09, 0x46, 0xdb, 0xc8, 0x93, + 0x89, 0xe6, 0x54, 0x58, 0x9b, 0x86, 0xad, 0x56, 0x57, 0xef, 0xc9, 0x50, + 0xc3, 0x38, 0xcb, 0x33, 0x66, 0x14, 0xbc, 0x7c, 0x76, 0xde, 0x91, 0x4a, + 0xa5, 0x50, 0xa1, 0x7a, 0x27, 0x40, 0x5f, 0x67, 0xc4, 0x00, 0xa5, 0xbe, + 0x70, 0xe3, 0x82, 0xdd, 0x82, 0x48, 0x01, 0x45, 0x58, 0x63, 0xa3, 0xb4, + 0xd4, 0x15, 0x13, 0x29, 0x51, 0x02, 0xd9, 0x03, 0x16, 0x13, 0x79, 0x6b, + 0x5e, 0xc3, 0xa7, 0x71, 0x85, 0x35, 0x52, 0xfc, 0x18, 0xe4, 0xd6, 0x44, + 0x0e, 0x56, 0x61, 0x40, 0x5a, 0x98, 0x22, 0xf1, 0x9d, 0x0a, 0xa9, 0xc6, + 0x37, 0xda, 0x32, 0xee, 0xe1, 0x04, 0xe5, 0x78, 0x67, 0x2b, 0x22, 0x6b, + 0xb1, 0x60, 0x92, 0xf2, 0xd1, 0x2d, 0xfa, 0xb5, 0x73, 0xa9, 0xb2, 0x79, + 0xb9, 0xe4, 0x9d, 0x72, 0x61, 0x44, 0x16, 0xf7, 0x92, 0x8e, 0xb9, 0xcd, + 0x31, 0xc4, 0x85, 0x26, 0x41, 0x91, 0x07, 0x54, 0x3a, 0xcc, 0x52, 0x71, + 0xc6, 0x64, 0x9f, 0x8a, 0x64, 0x28, 0x1a, 0x06, 0x7d, 0x0f, 0xf1, 0x0f, + 0x4d, 0xbb, 0x43, 0xc1, 0x6a, 0x25, 0xf4, 0x94, 0xb3, 0xe4, 0xd7, 0x9c, + 0xf6, 0x65, 0x39, 0x60, 0x21, 0x06, 0xbe, 0x0b, 0xaa, 0x9a, 0xf6, 0x26, + 0x64, 0x8a, 0xb6, 0x7c, 0x1b, 0x6c, 0x18, 0x42, 0x4b, 0xb8, 0xb4, 0xc8, + 0xc0, 0x30, 0xb8, 0x78, 0xd1, 0xab, 0xa7, 0x28, 0x2d, 0xff, 0x47, 0x11, + 0x83, 0x03, 0xde, 0xb7, 0x80, 0x89, 0x9b, 0xab, 0xf6, 0x5d, 0xc4, 0x83, + 0x29, 0x34, 0xbe, 0x58, 0x6a, 0xab, 0xe7, 0x49, 0x51, 0xfe, 0x9f, 0xb2, + 0xe1, 0xa6, 0xdb, 0xae, 0x24, 0x72, 0x12, 0x16}, + // cipherTextDigest + {0xb5, 0x84, 0x63, 0xc4, 0x96, 0xaa, 0x9d, 0x27, 0x64, 0xd1, 0xc5, + 0xb5, 0x09, 0xcf, 0xc3, 0x1b, 0xd1, 0xd1, 0x2f, 0xe6, 0xac, 0x77, + 0xfc, 0x50, 0xb7, 0xa5, 0x1c, 0x54, 0x58, 0xcd, 0x78, 0x06}, + // secret + {0x60, 0xea, 0xd7, 0x4d, 0x0c, 0xfa, 0x77, 0xcd, 0xca, 0x14, 0x75, + 0x66, 0xd8, 0x38, 0xaf, 0x77, 0xcd, 0xac, 0xab, 0xa5, 0xf3, 0x27, + 0x18, 0x72, 0x1f, 0x7c, 0x5b, 0x04, 0x64, 0xca, 0x76, 0x38}, + true}, + // tcID: 74 + {74, + params_ml_kem1024_test_mode, + // entropy + {0x2d, 0xc9, 0xa1, 0x5e, 0x18, 0x63, 0x9a, 0x24, 0x71, 0xa4, 0x53, + 0x0d, 0xd3, 0x55, 0xb7, 0x1b, 0xb6, 0x15, 0x20, 0xd3, 0x3e, 0x09, + 0x4b, 0x35, 0xc7, 0xf8, 0xf4, 0xaf, 0x6a, 0x0c, 0xa0, 0x9e}, + // publicKey + {0xca, 0x07, 0x77, 0x66, 0x54, 0x3f, 0x32, 0x56, 0x75, 0xda, 0xe9, 0xa7, + 0x5b, 0xb5, 0x7e, 0xb4, 0x05, 0x08, 0x00, 0xa5, 0x1b, 0x16, 0xa1, 0xaa, + 0xdd, 0xa3, 0x3f, 0x36, 0x49, 0x5b, 0x16, 0x7b, 0xc7, 0xb1, 0x96, 0xc4, + 0x8c, 0x94, 0xc6, 0x53, 0xb2, 0x80, 0x39, 0xe9, 0x15, 0x27, 0x4b, 0x74, + 0xd3, 0x6b, 0x75, 0x49, 0x41, 0x86, 0x9e, 0xc2, 0x4b, 0xe6, 0x31, 0xa4, + 0x18, 0xea, 0x61, 0xb7, 0x67, 0x59, 0x46, 0xc7, 0x49, 0x3e, 0xcc, 0x90, + 0xa1, 0xb7, 0x16, 0x84, 0x56, 0x44, 0x01, 0x57, 0x99, 0xe0, 0x93, 0x34, + 0x4e, 0x03, 0x94, 0xb2, 0xd2, 0x9f, 0x9b, 0x72, 0x39, 0x18, 0x37, 0xbe, + 0xcf, 0xd1, 0xbe, 0x89, 0xe9, 0x23, 0x8c, 0x55, 0xb0, 0x97, 0x5c, 0xb9, + 0xf4, 0xe3, 0x94, 0x81, 0x68, 0x64, 0x02, 0x73, 0x9b, 0x93, 0x3a, 0x21, + 0x4d, 0x11, 0xca, 0xa9, 0x14, 0x40, 0x6e, 0xf2, 0x70, 0x41, 0x0a, 0x17, + 0x20, 0xd0, 0xae, 0xe0, 0xa9, 0x4b, 0x38, 0x10, 0x98, 0x27, 0xf9, 0xba, + 0x0a, 0x05, 0x42, 0xf2, 0x64, 0x5c, 0xde, 0xa8, 0x2b, 0x1c, 0x8c, 0x64, + 0x94, 0x30, 0xbb, 0x2c, 0xf8, 0x08, 0x02, 0x50, 0x85, 0x39, 0xb9, 0x68, + 0x5a, 0x8c, 0x4c, 0x60, 0xf4, 0x69, 0xe1, 0x58, 0x95, 0x1c, 0x54, 0x69, + 0x49, 0x0a, 0x8a, 0xa2, 0xc2, 0xad, 0x75, 0x19, 0x96, 0x7e, 0x61, 0xa5, + 0x8c, 0x49, 0x76, 0x0b, 0xdb, 0x44, 0x6e, 0x11, 0x8b, 0x9a, 0xfa, 0x66, + 0xcc, 0xeb, 0x57, 0xce, 0x88, 0x41, 0xb7, 0x02, 0x12, 0x6f, 0x8c, 0x6f, + 0x3d, 0x60, 0x9b, 0x9d, 0x0a, 0x78, 0xec, 0xa2, 0x6c, 0x3f, 0x45, 0x91, + 0xdb, 0xd8, 0xb8, 0x01, 0xd2, 0x31, 0x75, 0x61, 0x39, 0xa7, 0x3a, 0x4a, + 0xa0, 0xf6, 0x38, 0xd3, 0x80, 0xa9, 0xa8, 0xc3, 0x43, 0x1c, 0x02, 0x11, + 0x55, 0x62, 0x59, 0x62, 0xe8, 0x69, 0x21, 0xb7, 0x8f, 0x4e, 0x81, 0x56, + 0x73, 0x29, 0x4a, 0x7b, 0x03, 0x28, 0x13, 0x19, 0x96, 0xde, 0x54, 0xb8, + 0x18, 0xf2, 0xc6, 0x6e, 0xa2, 0x95, 0xd7, 0xc6, 0x2e, 0xb1, 0xd4, 0x08, + 0xba, 0xb6, 0x2c, 0x54, 0xb3, 0x1b, 0xd7, 0xd3, 0x86, 0x71, 0x3c, 0xb8, + 0x8d, 0xe9, 0x48, 0x41, 0x73, 0x35, 0x04, 0xb1, 0x5e, 0xc7, 0xd6, 0x31, + 0x2a, 0x74, 0x09, 0xbe, 0x56, 0xb2, 0xcb, 0xe1, 0x45, 0xbf, 0x57, 0xc6, + 0x43, 0x95, 0xb1, 0xec, 0x42, 0x94, 0xc3, 0xd1, 0x23, 0x69, 0x47, 0x55, + 0x09, 0x59, 0x23, 0xa1, 0xe0, 0xcc, 0x17, 0x2a, 0x10, 0x27, 0x24, 0x04, + 0xa5, 0x78, 0xc4, 0x8c, 0xe0, 0x44, 0x24, 0xc7, 0xcb, 0x2c, 0x29, 0x19, + 0x62, 0x74, 0x0a, 0x5b, 0x8a, 0x43, 0xcc, 0xb8, 0x38, 0xfb, 0x63, 0x31, + 0x04, 0x51, 0x0a, 0x46, 0xbc, 0x86, 0x87, 0x56, 0x09, 0x36, 0x72, 0x20, + 0xe4, 0x14, 0x79, 0x48, 0xa4, 0x6c, 0xe8, 0x19, 0x4d, 0xd0, 0x18, 0x25, + 0xf2, 0x0b, 0x21, 0xac, 0x47, 0x8b, 0xc3, 0x77, 0xb2, 0xfc, 0x90, 0x6b, + 0x66, 0x90, 0xb8, 0xca, 0xc6, 0x9b, 0x3a, 0xc1, 0x22, 0x5f, 0x5b, 0x3f, + 0x18, 0x38, 0x88, 0x63, 0x1b, 0xbb, 0x41, 0x8a, 0x86, 0x9a, 0xa5, 0x92, + 0x0c, 0x1c, 0x13, 0xf2, 0xf2, 0x01, 0x0c, 0x98, 0xaa, 0x70, 0x63, 0x86, + 0x1d, 0x9c, 0xa8, 0xd8, 0xd5, 0x58, 0x9a, 0x0c, 0x36, 0xde, 0xf9, 0x6f, + 0xd1, 0x86, 0x76, 0x9c, 0x8a, 0x57, 0x56, 0xa5, 0x67, 0x44, 0xd9, 0xad, + 0xc4, 0x1c, 0x96, 0xa2, 0x74, 0x5e, 0xc7, 0x98, 0x2f, 0x9f, 0xb9, 0x7c, + 0xb2, 0x72, 0x63, 0x88, 0x37, 0x34, 0x0b, 0x3a, 0x4a, 0x56, 0xe9, 0x02, + 0x12, 0x73, 0x69, 0xd1, 0xab, 0xc0, 0x6b, 0x9b, 0x4f, 0xa4, 0x12, 0x1f, + 0xbc, 0xf8, 0x6f, 0x56, 0x02, 0x5b, 0x5e, 0x46, 0xa4, 0x67, 0xb6, 0xb1, + 0x83, 0x86, 0xa9, 0xd0, 0x01, 0x64, 0x48, 0x61, 0x64, 0xc4, 0xd6, 0x09, + 0xf6, 0x4b, 0x48, 0x85, 0x15, 0xbe, 0x22, 0x76, 0xb4, 0x26, 0xc6, 0x70, + 0xf5, 0xea, 0x79, 0x73, 0x21, 0x49, 0xc8, 0x65, 0x40, 0x2a, 0xb9, 0x7d, + 0x6d, 0xd4, 0x98, 0x92, 0x55, 0x9d, 0x9f, 0x70, 0xb7, 0x96, 0xa1, 0x94, + 0xe8, 0x67, 0xb8, 0x62, 0xf1, 0x57, 0xac, 0x54, 0x88, 0xf5, 0x40, 0x6e, + 0xf8, 0x71, 0xbc, 0xb3, 0xa0, 0x0f, 0x2b, 0x72, 0x4d, 0x18, 0x0b, 0x2d, + 0xe9, 0xc7, 0x82, 0x49, 0xf4, 0x79, 0xd6, 0xf3, 0x7f, 0x3d, 0xcc, 0x19, + 0x97, 0x54, 0x29, 0xaf, 0xba, 0x15, 0xc2, 0x8c, 0x6e, 0x0b, 0x02, 0x54, + 0x45, 0x73, 0x05, 0xd1, 0x92, 0xb9, 0x9f, 0xb3, 0xa4, 0x7f, 0x85, 0xb4, + 0x35, 0x01, 0x5d, 0x1a, 0xb0, 0xcb, 0x77, 0x50, 0xa0, 0xc8, 0x28, 0x85, + 0xed, 0x33, 0x59, 0xf6, 0x75, 0x16, 0x02, 0x24, 0x70, 0x86, 0x28, 0x1a, + 0x31, 0xc3, 0x30, 0x33, 0x07, 0x51, 0x9a, 0xb3, 0xb9, 0xf2, 0xf4, 0x96, + 0xd7, 0x27, 0x2d, 0x4f, 0x52, 0x72, 0x82, 0x19, 0x6c, 0x65, 0x26, 0x25, + 0x92, 0xdc, 0x81, 0x38, 0x86, 0x9d, 0x4b, 0x53, 0x80, 0x86, 0x9a, 0x51, + 0x74, 0xd2, 0x09, 0x3d, 0xe4, 0x8a, 0xe1, 0x72, 0xb6, 0x62, 0x80, 0xb3, + 0xe7, 0x97, 0x79, 0x98, 0x44, 0xa7, 0xf5, 0xbb, 0x14, 0xe9, 0xc0, 0x13, + 0xbd, 0x94, 0x61, 0x76, 0x1b, 0x6b, 0x1d, 0xc2, 0x6e, 0x6e, 0xec, 0x61, + 0xe9, 0xd6, 0xa1, 0x54, 0x93, 0xb1, 0xbf, 0xcc, 0x09, 0x12, 0x94, 0xa6, + 0xb1, 0x93, 0x7f, 0x8c, 0x9b, 0x99, 0xce, 0x5b, 0x8e, 0xc0, 0x84, 0xc4, + 0xb8, 0x32, 0x02, 0x03, 0x01, 0x1e, 0x75, 0x7a, 0x65, 0x3f, 0x62, 0x52, + 0xa9, 0x41, 0xc2, 0x8e, 0x7b, 0x0b, 0xe3, 0xd1, 0x8b, 0x14, 0xb8, 0x34, + 0x9d, 0x9b, 0x58, 0xa7, 0xa9, 0x29, 0x7e, 0x43, 0xa0, 0x06, 0xd7, 0x58, + 0x6d, 0x0c, 0xb7, 0x92, 0x99, 0x71, 0xc2, 0x16, 0xbc, 0x50, 0x0b, 0xb0, + 0xeb, 0x11, 0xca, 0xac, 0x10, 0x04, 0x05, 0x84, 0x69, 0xc6, 0x0a, 0x10, + 0x96, 0xe9, 0x35, 0x05, 0xe6, 0x39, 0xcb, 0x14, 0x18, 0x42, 0x95, 0x9e, + 0xa1, 0x39, 0x3a, 0x6e, 0xe7, 0x68, 0x4f, 0x25, 0xab, 0x59, 0xc3, 0xcd, + 0xc3, 0x50, 0x95, 0x56, 0xc9, 0xce, 0x74, 0xb6, 0x53, 0xfc, 0x46, 0x0f, + 0x49, 0xe8, 0x2a, 0x06, 0x68, 0x0a, 0x63, 0x34, 0x7a, 0x26, 0x7c, 0x69, + 0x30, 0x17, 0x2e, 0x45, 0x3c, 0x38, 0x3c, 0x11, 0x6c, 0x9e, 0xa2, 0x22, + 0xe9, 0x5a, 0xbe, 0x45, 0x22, 0x59, 0x4f, 0x84, 0xc5, 0x2f, 0x97, 0x3c, + 0xb9, 0x6a, 0xb8, 0xf3, 0x9c, 0x14, 0xf9, 0x9c, 0x92, 0x51, 0x70, 0x68, + 0x24, 0xa7, 0x87, 0x71, 0xb4, 0x25, 0xc5, 0x31, 0x94, 0x8c, 0xbb, 0x22, + 0x85, 0x24, 0x36, 0x46, 0xea, 0xb1, 0xaa, 0xe6, 0xc7, 0x49, 0xf0, 0xab, + 0xde, 0xc7, 0x26, 0x69, 0x0a, 0x91, 0x2e, 0x9a, 0x04, 0x24, 0x44, 0x56, + 0x3f, 0x2a, 0x03, 0x38, 0xd2, 0x88, 0x6b, 0xfc, 0x99, 0x39, 0x93, 0x00, + 0x45, 0xd6, 0x90, 0x59, 0xc5, 0x0b, 0xa2, 0xd6, 0x35, 0xb7, 0x34, 0x69, + 0x8e, 0x23, 0x90, 0xc7, 0xc7, 0x56, 0x51, 0xd8, 0x5e, 0x5b, 0xcc, 0x0b, + 0x5a, 0x74, 0x12, 0x4f, 0x13, 0x70, 0x6e, 0x2a, 0x29, 0x7a, 0x01, 0x2c, + 0x52, 0x87, 0x69, 0xa5, 0x14, 0x13, 0x4c, 0x98, 0xc2, 0xac, 0x35, 0xbd, + 0xbb, 0x7b, 0x12, 0x6d, 0x8c, 0xcf, 0xca, 0x27, 0x76, 0xd6, 0xd3, 0x60, + 0x3f, 0x31, 0x11, 0x95, 0x92, 0xa0, 0xba, 0xcb, 0x9e, 0x3f, 0x18, 0x3d, + 0xbc, 0xa0, 0x6c, 0xd1, 0x59, 0x29, 0x2f, 0x6b, 0x17, 0xa2, 0xd3, 0x83, + 0x1f, 0xdc, 0xab, 0xef, 0x04, 0x1f, 0x60, 0x95, 0x79, 0xaf, 0xd2, 0x87, + 0xf0, 0xe2, 0x75, 0xee, 0xc2, 0x75, 0x50, 0x47, 0x90, 0x8c, 0x3b, 0x7d, + 0xf6, 0x01, 0x79, 0x6c, 0xa4, 0xcd, 0x88, 0xc4, 0xab, 0x7c, 0x38, 0x64, + 0x55, 0x39, 0x68, 0xba, 0xc4, 0x30, 0x01, 0xf8, 0x1a, 0x9a, 0xa4, 0x49, + 0xed, 0xb9, 0x68, 0x0f, 0x44, 0x87, 0xe9, 0x97, 0x9f, 0x76, 0x9b, 0xcb, + 0xf4, 0x3c, 0xbf, 0xae, 0x2b, 0x7d, 0x9f, 0x85, 0x03, 0xe3, 0x46, 0x31, + 0x95, 0x20, 0xab, 0xbd, 0x32, 0x85, 0xa1, 0xba, 0x05, 0x25, 0x93, 0x51, + 0x83, 0xd2, 0x22, 0x58, 0xba, 0xa3, 0x7b, 0xc4, 0x03, 0x0c, 0xdc, 0x2f, + 0x26, 0x1b, 0x77, 0x8f, 0xa2, 0xc6, 0xac, 0x32, 0x24, 0x8a, 0xac, 0x7b, + 0x6e, 0xc9, 0xb7, 0xe7, 0xf0, 0x90, 0x90, 0xe9, 0xa9, 0x05, 0x07, 0x06, + 0x51, 0x99, 0xb7, 0x8e, 0xfb, 0x18, 0x4b, 0x26, 0x5e, 0x60, 0xe1, 0x1a, + 0x1b, 0x30, 0xce, 0x1f, 0x66, 0x05, 0xdb, 0x97, 0x5d, 0xf8, 0x09, 0x16, + 0x8c, 0x5a, 0x18, 0x3d, 0xa0, 0x3f, 0x7e, 0x25, 0xaa, 0x98, 0x91, 0x4a, + 0xc3, 0x6a, 0xc0, 0xa8, 0x07, 0xc6, 0x13, 0xe6, 0x69, 0x25, 0x32, 0x7b, + 0x8e, 0x92, 0x4e, 0x76, 0x18, 0xa6, 0xeb, 0xa3, 0x4e, 0x05, 0xfc, 0x8e, + 0x0e, 0xb9, 0x6d, 0x7c, 0xc9, 0x3b, 0x6b, 0x11, 0x27, 0x33, 0x4a, 0x34, + 0xb9, 0xc2, 0xbc, 0x6e, 0xf7, 0x25, 0xd9, 0x52, 0x9e, 0xf1, 0x0b, 0x65, + 0x65, 0xa0, 0x20, 0x10, 0xf4, 0x12, 0x30, 0x5c, 0x16, 0xab, 0x83, 0x89, + 0xdf, 0xa0, 0x52, 0xef, 0x07, 0x26, 0x65, 0xcc, 0x48, 0x25, 0x0a, 0x60, + 0xbb, 0x12, 0x9b, 0xb1, 0x5a, 0x37, 0x03, 0x82, 0x3f, 0x09, 0x5c, 0xcb, + 0xc5, 0x4c, 0xc8, 0xc3, 0x3b, 0x85, 0x86, 0x66, 0x92, 0xa3, 0xf9, 0x1b, + 0x66, 0xc1, 0x14, 0xcc, 0x67, 0x53, 0xa3, 0x68, 0x3c, 0x58, 0x21, 0x31, + 0x8f, 0x25, 0x81, 0x73, 0xe2, 0xb8, 0x29, 0x58, 0xc4, 0x46, 0x63, 0x32, + 0x54, 0x2a, 0x84, 0x50, 0x04, 0xc5, 0x2c, 0x7b, 0xc3, 0xf3, 0x66, 0x2f, + 0x2c, 0x85, 0x28, 0x29, 0x27, 0x66, 0x5a, 0xac, 0x03, 0x38, 0x61, 0xbb, + 0x49, 0xa2, 0x0a, 0x1d, 0x6b, 0xc2, 0x46, 0x08, 0x4c, 0xe5, 0x77, 0xbf, + 0xae, 0xa5, 0x4d, 0x60, 0xb2, 0xbc, 0x3b, 0xe7, 0x6b, 0x3d, 0x8a, 0x86, + 0x96, 0x11, 0x2a, 0x01, 0xb7, 0x4e, 0x8b, 0x32, 0xb2, 0x47, 0xd7, 0x55, + 0x09, 0x55, 0xaf, 0x76, 0x26, 0xbf, 0xcf, 0xc7, 0xb7, 0x12, 0xf0, 0x89, + 0x63, 0x7b, 0xc6, 0xc7, 0x0a, 0x15, 0xee, 0x8c, 0x69, 0xdd, 0xbb, 0x9b, + 0x38, 0xda, 0x04, 0xbb, 0x9b, 0x44, 0x22, 0x18, 0x50, 0x9e, 0x98, 0xae, + 0xb9, 0x53, 0x22, 0xab, 0x64, 0x56, 0xd8, 0x56, 0xbe, 0x38, 0x27, 0x71, + 0x46, 0xda, 0x89, 0xb8, 0xe0, 0x08, 0x46, 0xa2, 0x06, 0x82, 0x78, 0x80, + 0x23, 0xe9, 0x5b, 0x53, 0xa8, 0x8e, 0x7e, 0x30, 0x6c, 0x52, 0xd8, 0x6f, + 0xb6, 0x19, 0xcc, 0x4a, 0x09, 0x09, 0x5f, 0x59, 0x89, 0x19, 0xb6, 0x20, + 0xcb, 0x6a, 0x32, 0x3f, 0xd2, 0x11, 0xc1, 0x94, 0x47, 0x35, 0x84, 0x83, + 0x9c, 0x62, 0x04, 0x59, 0x73, 0x25, 0x32, 0xb7, 0x62, 0x5f, 0xe0, 0x0b, + 0x1d, 0x28, 0x7c, 0xd9, 0xf7, 0x71, 0xc5, 0x9a, 0x13, 0x61, 0xe6, 0x6c, + 0x26, 0x44, 0x8a, 0x34, 0x7b, 0x3b, 0xf0, 0xb9, 0x13, 0xdf, 0xdc, 0x64, + 0x3f, 0x37, 0x6c, 0xea, 0xf7, 0x6b, 0x14, 0x46, 0x15, 0x84, 0x64, 0x31, + 0xee, 0x63, 0x05, 0xb2, 0xf5, 0xcd, 0x65, 0x54, 0xb5, 0xd6, 0x8a, 0xca, + 0xfa, 0xc5, 0x76, 0xd2, 0x0b, 0xac, 0x3b, 0x9c, 0x6b, 0xf1, 0xd2, 0x03, + 0x70, 0xcc, 0x54, 0x84, 0x5b, 0x3e, 0x88, 0x27, 0x4a, 0xc6, 0xe5, 0x88, + 0x3e, 0x88, 0x40, 0x13, 0xcc, 0xce, 0xf1, 0xdf, 0x6c, 0xf8, 0xe7, 0xea, + 0x73, 0xc3, 0x06, 0x62, 0x42, 0xa6, 0x51, 0x7f, 0x75, 0x9b, 0x21, 0xe7, + 0x9a, 0xc4, 0xbd, 0xce, 0x87, 0xf6, 0xd6, 0x6f}, + // cipherTextDigest + {0xd0, 0xc8, 0x7d, 0x25, 0xe3, 0x3d, 0xb5, 0xe8, 0x98, 0x3f, 0x00, + 0xb4, 0x29, 0x7c, 0x15, 0x5b, 0x76, 0xb6, 0xd2, 0x6a, 0x9a, 0xa4, + 0xa1, 0x1c, 0x2b, 0xb2, 0x4d, 0xd6, 0x75, 0xc8, 0x8d, 0xa2}, + // secret + {0xc0, 0x3b, 0xd5, 0xa0, 0xcd, 0x51, 0xb8, 0x9f, 0x99, 0xb2, 0x73, + 0x96, 0xb4, 0xd9, 0x02, 0xed, 0xf3, 0x85, 0xeb, 0x68, 0xee, 0x7f, + 0xc5, 0xa0, 0x16, 0xaa, 0x63, 0xa9, 0xa8, 0xea, 0x36, 0x4b}, + true}, + // tcID: 75 + {75, + params_ml_kem1024_test_mode, + // entropy + {0xe3, 0x49, 0xcd, 0xf8, 0xc2, 0xf9, 0x6a, 0x1c, 0x08, 0xe3, 0x18, + 0x95, 0x46, 0x2b, 0x6b, 0xa4, 0xb4, 0x26, 0x87, 0xa9, 0x0c, 0x7d, + 0xae, 0x55, 0xab, 0x20, 0x03, 0x67, 0x8a, 0xa6, 0xfc, 0x86}, + // publicKey + {0xa6, 0x98, 0x46, 0xec, 0x61, 0xa3, 0x35, 0xe6, 0x4d, 0xf1, 0x34, 0xae, + 0x1b, 0x6b, 0x9a, 0x4d, 0x39, 0x55, 0x84, 0xca, 0xba, 0x47, 0x1b, 0x80, + 0x25, 0xe9, 0x1a, 0x9b, 0xe8, 0x70, 0xd7, 0xb3, 0x1e, 0x2e, 0x82, 0x84, + 0x1b, 0xb5, 0xc6, 0x01, 0x55, 0xa3, 0xcf, 0xcb, 0x9b, 0x25, 0xb0, 0xb7, + 0x66, 0x8c, 0xce, 0xde, 0x72, 0x6c, 0x08, 0x47, 0x55, 0xbb, 0x72, 0x77, + 0xf5, 0xd9, 0x66, 0x7a, 0xf5, 0x8c, 0x14, 0xb0, 0x1d, 0xe7, 0xf7, 0x81, + 0xe3, 0xd4, 0x23, 0xb7, 0x8a, 0x08, 0xf9, 0x62, 0x77, 0x53, 0x1a, 0x07, + 0xef, 0xf4, 0x8f, 0x70, 0x66, 0x82, 0x09, 0x67, 0xa5, 0xb3, 0x12, 0x6a, + 0x28, 0xf6, 0x4f, 0x99, 0x31, 0x63, 0x2a, 0xa5, 0x57, 0xc9, 0x5b, 0x24, + 0x22, 0x2c, 0x92, 0xc7, 0x54, 0xba, 0xf3, 0x54, 0x75, 0x2c, 0xb9, 0xb9, + 0x73, 0x38, 0x69, 0x83, 0xa8, 0x0b, 0x15, 0xbb, 0x1f, 0xec, 0xf1, 0x1e, + 0x8f, 0x04, 0x8c, 0x0e, 0x58, 0xb2, 0x27, 0x8a, 0x65, 0xb9, 0xb4, 0xad, + 0xcf, 0xec, 0x3f, 0xa9, 0xb7, 0x40, 0x9c, 0xf7, 0x75, 0x62, 0x86, 0x6b, + 0xcb, 0xb6, 0x52, 0x17, 0x79, 0x69, 0xc9, 0xbb, 0x82, 0x80, 0x74, 0xcd, + 0xa0, 0xdc, 0x25, 0xbe, 0xa2, 0x05, 0xf6, 0x11, 0x1e, 0x37, 0x19, 0x9e, + 0x59, 0x63, 0x2d, 0x81, 0xb4, 0x61, 0x89, 0x9c, 0x00, 0x03, 0xea, 0x1b, + 0x88, 0xea, 0x90, 0xe9, 0xd2, 0x86, 0x46, 0x85, 0xa8, 0xb3, 0xd0, 0x25, + 0xe8, 0x03, 0xc0, 0x68, 0xbc, 0x6a, 0x5f, 0x96, 0xba, 0x05, 0xd8, 0xbb, + 0x76, 0x48, 0x93, 0x9c, 0x05, 0xa0, 0x41, 0xd5, 0x15, 0x24, 0xf1, 0x59, + 0x63, 0xfa, 0x3b, 0xe2, 0xe4, 0x73, 0x5c, 0xea, 0x60, 0x51, 0xc1, 0x09, + 0xd5, 0x3c, 0x99, 0x83, 0xb7, 0xa8, 0x25, 0x92, 0x39, 0x51, 0xdc, 0xac, + 0xd2, 0x17, 0x65, 0x0b, 0xe5, 0x01, 0xcc, 0xf6, 0x28, 0xf5, 0x1c, 0x22, + 0x86, 0xa5, 0x34, 0x61, 0xa7, 0x1c, 0x48, 0x03, 0x3b, 0x1e, 0xa8, 0x54, + 0x2b, 0x07, 0x30, 0x2a, 0x29, 0x48, 0xa7, 0xa0, 0x97, 0xee, 0x1a, 0x27, + 0x67, 0x91, 0xb2, 0xc8, 0x93, 0x27, 0x9b, 0xf2, 0x03, 0x21, 0xe5, 0x95, + 0x8d, 0x6c, 0x48, 0x83, 0x92, 0x4e, 0xf9, 0xc1, 0xbe, 0x82, 0x95, 0xb4, + 0x00, 0x2a, 0x7b, 0xe6, 0xba, 0x90, 0x3d, 0xa1, 0x7e, 0x1d, 0x92, 0x19, + 0x4c, 0xe8, 0x9a, 0x57, 0xb5, 0x6f, 0x21, 0x85, 0xbb, 0xfa, 0x20, 0x7e, + 0x6f, 0x63, 0x37, 0xd3, 0x54, 0x7a, 0x0d, 0x58, 0x58, 0x37, 0x7a, 0x5e, + 0xa2, 0x1c, 0xa1, 0xcd, 0xd9, 0x1b, 0x1e, 0x76, 0x2f, 0xf6, 0x58, 0x78, + 0x95, 0x53, 0x37, 0x6f, 0xc2, 0x0e, 0x0c, 0xc0, 0x80, 0x69, 0xe4, 0x35, + 0x99, 0x44, 0x5d, 0x55, 0x5b, 0x88, 0x6b, 0xb7, 0x13, 0x89, 0xf1, 0xb9, + 0x7e, 0x51, 0x4e, 0x3a, 0xa7, 0x1b, 0xa9, 0xcb, 0xca, 0x79, 0xb6, 0xa9, + 0x82, 0xe8, 0x0f, 0x10, 0x93, 0xc1, 0x7a, 0x63, 0x4b, 0x22, 0x69, 0xae, + 0xce, 0x47, 0x23, 0x1f, 0x87, 0xc5, 0xda, 0xf0, 0xc4, 0xa5, 0xf1, 0x12, + 0x7d, 0xfa, 0x7a, 0x16, 0xa3, 0x86, 0x64, 0xc6, 0x71, 0xbe, 0x33, 0x7d, + 0xe1, 0x53, 0x3d, 0x91, 0xb8, 0x6d, 0x8d, 0xab, 0x14, 0x91, 0x31, 0x3b, + 0x9a, 0x43, 0x1a, 0xf2, 0x1a, 0xc8, 0x66, 0xb7, 0x9d, 0xb2, 0x64, 0xb2, + 0x24, 0xc9, 0x61, 0xe2, 0x60, 0x91, 0x75, 0xdb, 0x1e, 0x44, 0xb1, 0x61, + 0x18, 0xe5, 0x1a, 0x24, 0x6b, 0x83, 0xb0, 0xf2, 0x62, 0x8c, 0xa7, 0x0d, + 0x5f, 0x02, 0x9b, 0x8a, 0xfb, 0x62, 0x7e, 0xb6, 0x16, 0xeb, 0x21, 0x03, + 0x4e, 0xbb, 0x4e, 0x71, 0xc3, 0x3b, 0xff, 0xf8, 0x8a, 0xc6, 0x66, 0x84, + 0xc0, 0x9b, 0x62, 0xd6, 0x20, 0x2e, 0x2e, 0xc9, 0x9c, 0x3c, 0xc6, 0xac, + 0x6c, 0xd4, 0xa2, 0xf9, 0x4c, 0x47, 0x02, 0xfc, 0xb3, 0x8d, 0xb3, 0x76, + 0xe1, 0xf1, 0x94, 0xbe, 0xc3, 0x51, 0xd4, 0x33, 0x4b, 0xc6, 0x63, 0x40, + 0x70, 0x98, 0x59, 0x46, 0xc9, 0x67, 0x31, 0xba, 0xa2, 0x80, 0xd0, 0x76, + 0x98, 0x95, 0x7e, 0x5b, 0x41, 0x82, 0xdd, 0x52, 0x4e, 0x1c, 0xc7, 0x89, + 0x4e, 0xfa, 0xa0, 0xb5, 0x03, 0x34, 0xc1, 0xd5, 0xa0, 0x43, 0x95, 0x57, + 0xa0, 0x4b, 0x98, 0x9c, 0x16, 0x3e, 0x7c, 0xd5, 0x56, 0xf1, 0x17, 0xba, + 0x29, 0x1a, 0x35, 0xd5, 0xc2, 0x18, 0xd6, 0xda, 0xa9, 0xa4, 0xe1, 0x0f, + 0x70, 0x34, 0x35, 0x0e, 0x13, 0x4b, 0x6f, 0xc6, 0x01, 0x42, 0x84, 0x37, + 0xe7, 0x67, 0x9b, 0x3c, 0xda, 0x75, 0xbc, 0x8c, 0xc6, 0xdc, 0x30, 0x12, + 0x71, 0xd4, 0x41, 0xca, 0x11, 0x2c, 0xb5, 0x86, 0x8a, 0x38, 0x4b, 0x48, + 0x56, 0x0b, 0x02, 0x4a, 0x40, 0x6c, 0xcf, 0x73, 0x70, 0x35, 0xa2, 0x7e, + 0x0f, 0xcb, 0xb6, 0xdb, 0x8c, 0x27, 0x9b, 0xb3, 0x3f, 0x18, 0x57, 0xc2, + 0x34, 0x65, 0x8d, 0xbe, 0xeb, 0x25, 0x6d, 0x6c, 0x3d, 0xba, 0x40, 0x5f, + 0x6f, 0x0a, 0x1d, 0x35, 0x42, 0x23, 0xa4, 0x27, 0x21, 0x6a, 0xa4, 0x17, + 0xd5, 0x6b, 0x62, 0x2f, 0x2a, 0xae, 0xe6, 0x31, 0xc3, 0xad, 0x5a, 0x64, + 0x83, 0x9c, 0x90, 0x78, 0x66, 0x4e, 0x49, 0x30, 0xa0, 0x65, 0x0b, 0x82, + 0x93, 0xac, 0x53, 0x2b, 0x63, 0x32, 0x99, 0xbc, 0x72, 0x30, 0x5a, 0x88, + 0xaa, 0xba, 0x1f, 0xc6, 0x2a, 0x20, 0x63, 0x24, 0x23, 0x32, 0x8a, 0x1c, + 0xd7, 0xaa, 0x49, 0xe6, 0x9a, 0x93, 0x6f, 0xd4, 0x28, 0x61, 0xd1, 0xb6, + 0x48, 0x02, 0x66, 0x2b, 0x20, 0x95, 0x84, 0x1b, 0x45, 0xd7, 0xd8, 0x1c, + 0xb0, 0xb9, 0x16, 0x7d, 0x69, 0xa6, 0x3e, 0xe8, 0x3a, 0xba, 0x82, 0x34, + 0x09, 0x6c, 0xbb, 0x78, 0xf4, 0xa9, 0xeb, 0x03, 0x49, 0xc6, 0xa6, 0x3f, + 0xd2, 0x0c, 0x21, 0xb3, 0x08, 0x34, 0x01, 0x45, 0x3a, 0xba, 0x3c, 0x64, + 0x95, 0x52, 0x2b, 0x2e, 0xd1, 0x38, 0x0b, 0x2b, 0xa5, 0x60, 0x7c, 0xbe, + 0x9d, 0xa3, 0xbf, 0x40, 0x51, 0xa4, 0xdf, 0x80, 0xac, 0xb4, 0xe8, 0x70, + 0xed, 0xc7, 0x8c, 0x8b, 0x7a, 0x1a, 0x97, 0x7b, 0x6e, 0x62, 0xbc, 0x34, + 0xc9, 0x96, 0xc5, 0xe9, 0x67, 0xae, 0xdf, 0xb0, 0x14, 0x8e, 0xe8, 0x79, + 0x9f, 0x20, 0xcf, 0xf8, 0x5c, 0xb0, 0x33, 0x8c, 0xb3, 0xf6, 0x23, 0x29, + 0x07, 0x64, 0x66, 0xf7, 0xe5, 0x01, 0xcb, 0x9c, 0x8a, 0xb2, 0x39, 0x61, + 0x2d, 0xe7, 0x85, 0x6c, 0x63, 0x37, 0x5c, 0x41, 0xba, 0xa6, 0x96, 0x91, + 0x6f, 0x7a, 0x1b, 0xd9, 0x86, 0x1b, 0xf3, 0xf1, 0x88, 0x84, 0xcc, 0xb3, + 0xae, 0x34, 0x2a, 0xac, 0x73, 0x21, 0xee, 0x24, 0x9e, 0x3e, 0x8c, 0xc9, + 0x66, 0x08, 0xac, 0xff, 0xfb, 0x29, 0x44, 0x6c, 0x0a, 0xf7, 0xc8, 0x29, + 0xd4, 0x1c, 0x69, 0x87, 0x88, 0x0f, 0xa1, 0xf5, 0xb1, 0x55, 0x3b, 0x49, + 0x8a, 0xd5, 0xa3, 0x7d, 0x43, 0xc2, 0xe0, 0x34, 0x0a, 0x06, 0x39, 0x6e, + 0x37, 0xd4, 0x74, 0x86, 0xcc, 0x1e, 0xc3, 0xc0, 0x5f, 0xb1, 0xd4, 0x63, + 0x04, 0xab, 0x8d, 0xbd, 0x6a, 0xaa, 0xb1, 0x66, 0x22, 0x9c, 0xc5, 0x88, + 0xd6, 0x02, 0x91, 0xff, 0x06, 0x84, 0x2d, 0x8a, 0x4a, 0xab, 0x34, 0xc0, + 0xe4, 0xe5, 0x9f, 0xf5, 0x78, 0x7a, 0x85, 0x34, 0x6a, 0xb1, 0xd8, 0x52, + 0x32, 0x14, 0x8b, 0x41, 0x83, 0x57, 0x05, 0xa7, 0xb2, 0x72, 0x5a, 0x45, + 0xe3, 0x17, 0xb5, 0xc8, 0x38, 0xc8, 0x58, 0x09, 0xb7, 0x7c, 0x18, 0x80, + 0x8b, 0x00, 0x2d, 0x0b, 0xa4, 0x42, 0x00, 0x77, 0xa0, 0x9f, 0xd9, 0x59, + 0xb7, 0x12, 0x07, 0x0b, 0x31, 0x45, 0x5c, 0xba, 0x08, 0x05, 0x6a, 0x50, + 0x71, 0x0a, 0xa8, 0x18, 0xc6, 0x42, 0x96, 0xc4, 0x28, 0x27, 0xd6, 0x40, + 0x4e, 0x1c, 0xa8, 0x57, 0x46, 0x5e, 0xcd, 0x0b, 0x62, 0xd3, 0xdb, 0xa5, + 0x6c, 0x02, 0xab, 0xb0, 0x3c, 0x80, 0xd1, 0xd4, 0x14, 0x6c, 0xaa, 0x07, + 0x98, 0x82, 0x30, 0x75, 0xbc, 0x20, 0xb6, 0xab, 0x09, 0x83, 0xe2, 0xb8, + 0x6f, 0xaa, 0x42, 0x9e, 0x55, 0x74, 0x5c, 0xd6, 0xa0, 0x66, 0xb5, 0x3b, + 0x77, 0xf3, 0x98, 0xb4, 0x88, 0x10, 0xdf, 0x3a, 0x7e, 0xf9, 0xf2, 0x33, + 0x48, 0x36, 0x77, 0xbb, 0xa7, 0x0d, 0x8f, 0x26, 0x3e, 0xef, 0xb2, 0x11, + 0x02, 0x25, 0x6a, 0x22, 0xdc, 0x13, 0xae, 0x2b, 0x59, 0x49, 0x07, 0x56, + 0x7a, 0xbb, 0x97, 0xe3, 0x74, 0x3b, 0x7a, 0x70, 0xa7, 0xea, 0xc7, 0x92, + 0x2b, 0x52, 0x4c, 0x7d, 0x8c, 0x37, 0xce, 0x75, 0x97, 0x36, 0x48, 0x5f, + 0xac, 0x47, 0x7e, 0xc2, 0x51, 0x2c, 0xf6, 0xaa, 0x88, 0xd3, 0x11, 0x1a, + 0x27, 0x97, 0x96, 0x8b, 0xb1, 0xc9, 0x3a, 0xd6, 0x75, 0x08, 0x73, 0xab, + 0x39, 0x51, 0xc9, 0xc8, 0xa4, 0x1f, 0xe0, 0xbb, 0x72, 0x81, 0xe6, 0x74, + 0xf9, 0xdb, 0x47, 0x59, 0x27, 0x46, 0x62, 0x80, 0x49, 0xe1, 0x83, 0x76, + 0xb4, 0x83, 0x47, 0xab, 0x7b, 0xa2, 0x6d, 0x28, 0x3e, 0xe5, 0x47, 0x2d, + 0x2c, 0xc3, 0x97, 0x1c, 0x74, 0x70, 0xf3, 0x47, 0xcc, 0x34, 0x5b, 0x63, + 0x21, 0xa7, 0x93, 0x85, 0xb5, 0x0e, 0x91, 0x35, 0x02, 0xb0, 0x71, 0x90, + 0x64, 0x35, 0x2e, 0xfc, 0x32, 0x7e, 0x5c, 0xb5, 0xba, 0xf2, 0x92, 0x40, + 0xf4, 0xec, 0x0a, 0xb7, 0x42, 0xaa, 0x04, 0x5b, 0xc0, 0x4a, 0x7c, 0x1b, + 0x63, 0x89, 0x05, 0x10, 0xf6, 0x68, 0x1f, 0x15, 0x1a, 0xa2, 0x21, 0x72, + 0xca, 0x9a, 0x56, 0xf2, 0xe0, 0x5f, 0x24, 0xd0, 0x92, 0x88, 0x31, 0x33, + 0x76, 0x0b, 0x76, 0x08, 0x33, 0xcc, 0x01, 0x54, 0xb3, 0xba, 0x5c, 0x5e, + 0xcd, 0x42, 0x3e, 0xa8, 0x92, 0x24, 0xbb, 0x95, 0x58, 0x7a, 0x2a, 0x32, + 0x3e, 0x75, 0x43, 0x60, 0x81, 0x20, 0x0a, 0xa2, 0x16, 0x82, 0x13, 0x19, + 0xbc, 0x06, 0x7d, 0x80, 0xa8, 0xb8, 0x2f, 0xd0, 0x1c, 0xa4, 0xb5, 0xa0, + 0x1e, 0xcc, 0x45, 0xe7, 0x50, 0x01, 0x79, 0x20, 0xbc, 0xf9, 0xe5, 0xa9, + 0x0b, 0x8b, 0x81, 0xc4, 0x80, 0x58, 0x5c, 0x92, 0x17, 0x2f, 0x46, 0x13, + 0x60, 0x1b, 0x07, 0xf8, 0x42, 0x28, 0x05, 0x30, 0x1e, 0x75, 0x43, 0x0a, + 0x82, 0x6c, 0x06, 0x20, 0x06, 0x4c, 0x4f, 0x7c, 0x64, 0xa6, 0xe3, 0xc1, + 0x30, 0x67, 0x16, 0x16, 0xcc, 0xc1, 0x31, 0x47, 0x6f, 0x41, 0xe5, 0x8c, + 0xc3, 0x1b, 0x58, 0xcb, 0x2b, 0x2b, 0x73, 0x12, 0xbd, 0x03, 0xa9, 0x36, + 0xcf, 0x73, 0x06, 0x74, 0x97, 0xa1, 0x78, 0x73, 0xaa, 0xe9, 0x79, 0x5e, + 0xdf, 0x54, 0x34, 0x10, 0x84, 0x2e, 0x8f, 0xbb, 0x4d, 0x0a, 0x37, 0x58, + 0x3f, 0x18, 0x86, 0x2e, 0xc9, 0x7f, 0xd6, 0xd5, 0xc8, 0x5d, 0xe4, 0x86, + 0x59, 0xb9, 0x02, 0x5d, 0x5c, 0x21, 0x60, 0x95, 0xb6, 0x8d, 0x09, 0xba, + 0x78, 0x7a, 0x10, 0x34, 0x54, 0x9a, 0xd0, 0xbc, 0x0a, 0x5c, 0xea, 0xa9, + 0xea, 0xbc, 0xa5, 0xcd, 0xc3, 0xc2, 0x06, 0x49, 0x6b, 0xb1, 0xf5, 0xb8, + 0xd0, 0xe9, 0x2b, 0x34, 0x82, 0xcf, 0x5c, 0x07, 0x1f, 0x24, 0xf1, 0x00, + 0xdd, 0x36, 0x47, 0xe0, 0xf5, 0xbf, 0x41, 0x21, 0x03, 0x3d, 0xc3, 0xce, + 0x7b, 0x06, 0x38, 0x55, 0x9c, 0x0d, 0xb9, 0x15, 0x8e, 0xa2, 0xca, 0x58, + 0x09, 0xa7, 0x60, 0x19, 0x72, 0x5a, 0x23, 0x51, 0x09, 0x28, 0x24, 0x0a, + 0x38, 0x79, 0x8c, 0x3b, 0x37, 0xb9, 0x81, 0xdb, 0x20, 0x91, 0x2c, 0x42, + 0xf9, 0x20, 0xf7, 0x8c, 0xbf, 0xdf, 0x19, 0x3d, 0xf9, 0x6d, 0xf9, 0x52, + 0x10, 0x0b, 0xd3, 0x29, 0xd5, 0x0e, 0x95, 0xba, 0xdd, 0x80, 0xaa, 0xdf, + 0xcf, 0x3e, 0xc9, 0xd3, 0x43, 0x81, 0xe8, 0xba}, + // cipherTextDigest + {0x3d, 0xa2, 0xcb, 0x01, 0xd0, 0x30, 0x8e, 0xf0, 0xe9, 0x05, 0x43, + 0xe8, 0x7a, 0xe9, 0x8c, 0xcb, 0x11, 0x79, 0x9f, 0xf0, 0x6f, 0xef, + 0x2e, 0xfd, 0x17, 0x26, 0x08, 0xaa, 0xda, 0xb1, 0xb4, 0x45}, + // secret + {0x54, 0x30, 0xaa, 0x47, 0xfb, 0xb7, 0x10, 0x8c, 0x3e, 0xfd, 0x5e, + 0x23, 0x62, 0x39, 0x99, 0x16, 0x3c, 0xf2, 0x5b, 0x55, 0xbb, 0x21, + 0x4e, 0xea, 0x33, 0x20, 0xe1, 0x88, 0xc0, 0x19, 0x10, 0x24}, + true}}; + +#endif // mlkem_encap_vectors_h__ diff --git a/security/nss/gtests/common/testvectors/ml-kem-keygen-vectors.h b/security/nss/gtests/common/testvectors/ml-kem-keygen-vectors.h @@ -0,0 +1,917 @@ +/* vim: set ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* This file is generated from sources in nss/gtests/common/wycheproof + * automatically and should not be touched manually. + * Generation is trigged by calling python3 genTestVectors.py */ + +#ifndef mlkem_keygen_vectors_h__ +#define mlkem_keygen_vectors_h__ + +#include "testvectors_base/test-structs.h" + +const std::vector<MlKemKeyGenTestVector> MlKemKeyGenTests = { + // tcID: 26 + {26, + params_ml_kem768, + // seed + {0xa2, 0xb4, 0xbc, 0xa3, 0x15, 0xa6, 0xea, 0x46, 0x00, 0xb4, 0xa3, + 0x16, 0xe0, 0x9a, 0x25, 0x78, 0xaa, 0x1e, 0x8b, 0xce, 0x91, 0x9c, + 0x8d, 0xf3, 0xa9, 0x6c, 0x71, 0xc8, 0x43, 0xf5, 0xb3, 0x8b, 0xd6, + 0xbf, 0x05, 0x5c, 0xb7, 0xb3, 0x75, 0xe3, 0x27, 0x1e, 0xd1, 0x31, + 0xf1, 0xba, 0x31, 0xf8, 0x3f, 0xef, 0x53, 0x3a, 0x23, 0x98, 0x78, + 0xa7, 0x10, 0x74, 0x57, 0x8b, 0x89, 0x12, 0x65, 0xd1}, + // publicKeyDigest + {0x7c, 0xa0, 0xc2, 0xcb, 0xbf, 0x4f, 0xbf, 0x28, 0xde, 0x8c, 0x47, + 0x9d, 0x44, 0x73, 0xc3, 0x39, 0xd9, 0x6b, 0x89, 0xc3, 0x4a, 0x4e, + 0x5f, 0xcb, 0xcf, 0x77, 0x28, 0xbd, 0xfb, 0x43, 0xb9, 0x45}, + // privateKeyDigest + {0xae, 0xcc, 0xd5, 0x41, 0x12, 0xdb, 0xda, 0x9b, 0x5d, 0xab, 0xec, + 0xa6, 0x05, 0x1a, 0x06, 0x06, 0x8f, 0x09, 0xec, 0x71, 0x9f, 0x36, + 0xcd, 0xc5, 0x9a, 0x46, 0xe1, 0x96, 0x0f, 0x7d, 0x37, 0x58}}, + // tcID: 27 + {27, + params_ml_kem768, + // seed + {0x6d, 0xbb, 0x99, 0xae, 0x68, 0x89, 0xaf, 0x01, 0xda, 0x38, 0x7d, + 0x7d, 0x99, 0xbd, 0x4e, 0x91, 0xba, 0xcb, 0x11, 0xa6, 0x05, 0x1b, + 0x14, 0xae, 0xcd, 0x4c, 0x96, 0xf3, 0x0c, 0xd9, 0xf9, 0xd9, 0x36, + 0x05, 0x57, 0xca, 0xdd, 0xfc, 0xf5, 0xfe, 0xe7, 0xc0, 0xde, 0x6a, + 0x36, 0x3f, 0x09, 0x57, 0x57, 0x58, 0x8c, 0x35, 0xa3, 0xfd, 0x11, + 0xc5, 0x86, 0x77, 0xab, 0x5e, 0x87, 0x97, 0xc2, 0xb8}, + // publicKeyDigest + {0x9c, 0x90, 0x32, 0x98, 0x4a, 0xe7, 0x2b, 0x7d, 0x5e, 0x07, 0x32, + 0xa2, 0x9e, 0xc2, 0x9d, 0x8b, 0xbc, 0x42, 0x52, 0xa3, 0x14, 0x54, + 0x18, 0x57, 0x10, 0xd2, 0x80, 0xc2, 0x23, 0xa4, 0x78, 0x99}, + // privateKeyDigest + {0x09, 0x29, 0x35, 0x2c, 0x65, 0x6c, 0xe7, 0x69, 0x7a, 0x75, 0xd6, + 0x2d, 0x68, 0xf0, 0xa9, 0x0b, 0x89, 0x0e, 0x5d, 0x52, 0x1e, 0x7f, + 0xf9, 0x0d, 0xd2, 0x77, 0x70, 0xae, 0x53, 0x44, 0xe0, 0xdb}}, + // tcID: 28 + {28, + params_ml_kem768, + // seed + {0x77, 0x25, 0x32, 0x1c, 0x56, 0xf9, 0x25, 0x86, 0x8f, 0xf8, 0x34, + 0xf5, 0xd1, 0xee, 0x90, 0xa7, 0x03, 0x32, 0xaa, 0x92, 0x83, 0x43, + 0x4e, 0x12, 0x2c, 0x60, 0xa8, 0xd4, 0x74, 0xac, 0x6c, 0x0f, 0x00, + 0xf6, 0xee, 0xc7, 0x27, 0x78, 0xe0, 0x2a, 0xcd, 0x04, 0xbb, 0x05, + 0x61, 0x13, 0xc5, 0x71, 0x98, 0x2e, 0x45, 0x01, 0x8b, 0xea, 0xc5, + 0x66, 0xec, 0x59, 0x95, 0x37, 0x24, 0xf3, 0x8a, 0x4b}, + // publicKeyDigest + {0x85, 0xe4, 0x21, 0x77, 0x47, 0x9a, 0xc3, 0x64, 0xc3, 0x43, 0xe2, + 0x6b, 0x4b, 0xdd, 0x48, 0x0d, 0x14, 0xf1, 0xa7, 0x48, 0x7f, 0xf4, + 0xc6, 0x4e, 0x37, 0x85, 0x0c, 0x5d, 0x1b, 0x4e, 0xfc, 0x96}, + // privateKeyDigest + {0xa2, 0x39, 0x72, 0x54, 0x0f, 0xb3, 0xa2, 0x0b, 0xf3, 0xf6, 0xfc, + 0xde, 0x34, 0xdf, 0xb6, 0x10, 0xc5, 0x58, 0x5c, 0x48, 0x16, 0x49, + 0xe2, 0x2f, 0xd3, 0xb8, 0xe9, 0xd7, 0x9d, 0x83, 0x13, 0x22}}, + // tcID: 29 + {29, + params_ml_kem768, + // seed + {0x9d, 0xb7, 0x80, 0xf1, 0x56, 0x57, 0x96, 0x5e, 0xdc, 0xd9, 0x9a, + 0x74, 0x19, 0x06, 0xd3, 0x41, 0x60, 0xaa, 0x52, 0x71, 0x0e, 0x2c, + 0xf0, 0x17, 0x85, 0x12, 0x83, 0xe5, 0xa6, 0xcd, 0xfd, 0x8f, 0xaf, + 0xd2, 0x84, 0x7b, 0x06, 0x7e, 0x70, 0x42, 0x71, 0x4c, 0xd2, 0xd1, + 0xad, 0xa8, 0xbe, 0xf1, 0x41, 0x38, 0x17, 0x19, 0x17, 0x41, 0xc6, + 0x22, 0x32, 0x86, 0x70, 0xc7, 0x9a, 0x07, 0xab, 0xae}, + // publicKeyDigest + {0x0a, 0xc7, 0xd5, 0x94, 0x5e, 0x9f, 0x2c, 0x91, 0x2b, 0x74, 0xf1, + 0xf5, 0x61, 0x4d, 0x27, 0x5f, 0x79, 0x5d, 0x3d, 0x01, 0x13, 0xc1, + 0xfa, 0xb3, 0xea, 0x76, 0x00, 0x28, 0xdc, 0x76, 0xb5, 0x85}, + // privateKeyDigest + {0x59, 0x1c, 0x9a, 0x8a, 0xff, 0xef, 0x4c, 0xc9, 0xed, 0xad, 0x85, + 0x67, 0x95, 0x21, 0x6e, 0x7d, 0xb2, 0x78, 0x1f, 0xd1, 0x99, 0xef, + 0xdb, 0x01, 0x5e, 0x37, 0x5c, 0x9d, 0xdd, 0xbe, 0xe6, 0x01}}, + // tcID: 30 + {30, + params_ml_kem768, + // seed + {0xd7, 0x56, 0x1d, 0x7a, 0x9d, 0x67, 0x4a, 0x1b, 0xc0, 0x79, 0x9c, + 0x08, 0xd6, 0xa0, 0x4f, 0x72, 0x58, 0x8e, 0x91, 0xa1, 0x8f, 0xb3, + 0xc3, 0xe5, 0xe1, 0x6f, 0xd4, 0x89, 0xd8, 0xbc, 0x02, 0x4b, 0xa7, + 0x5f, 0x5d, 0x7b, 0xba, 0x35, 0x0c, 0x58, 0x7b, 0xff, 0xc6, 0xc8, + 0x5b, 0xe2, 0x6b, 0x18, 0xa3, 0x7b, 0x98, 0x2d, 0x50, 0xae, 0x8f, + 0x35, 0xd1, 0xd8, 0xb0, 0xa9, 0xbf, 0xc6, 0x1b, 0x86}, + // publicKeyDigest + {0x82, 0x88, 0xc6, 0x30, 0x9f, 0x22, 0xb8, 0x6e, 0xfa, 0xc8, 0x73, + 0xc6, 0x79, 0xa3, 0x9d, 0x2b, 0x47, 0xf8, 0x6f, 0x0e, 0xa0, 0xad, + 0x95, 0xae, 0x9f, 0xea, 0x0d, 0xa1, 0x9b, 0xd8, 0x38, 0xea}, + // privateKeyDigest + {0x57, 0xc0, 0xcf, 0xe0, 0xe1, 0x48, 0x30, 0x39, 0x54, 0xed, 0x11, + 0xb7, 0xd3, 0x30, 0x4e, 0x1f, 0x6f, 0x39, 0x1b, 0x51, 0x30, 0x3a, + 0xc7, 0x33, 0x1c, 0xe4, 0x61, 0xc0, 0x8b, 0xa9, 0x57, 0x98}}, + // tcID: 31 + {31, + params_ml_kem768, + // seed + {0x25, 0x08, 0x26, 0x46, 0x91, 0xcd, 0x59, 0xa0, 0xf2, 0x46, 0x7f, + 0x95, 0x9a, 0x72, 0xa9, 0xc2, 0x17, 0xa4, 0xa9, 0x50, 0xff, 0xb5, + 0xa8, 0xbb, 0xd7, 0x50, 0x69, 0x6d, 0x9f, 0x41, 0x02, 0xbd, 0xc0, + 0x9f, 0x22, 0xfe, 0xc1, 0x79, 0x69, 0x72, 0x61, 0xd1, 0xdd, 0x53, + 0xe9, 0xa6, 0x88, 0x39, 0x30, 0x4e, 0xa0, 0x59, 0xa1, 0x37, 0x80, + 0x47, 0x06, 0xe7, 0xc0, 0xfb, 0x3f, 0xba, 0x72, 0xd0}, + // publicKeyDigest + {0x44, 0x1e, 0x29, 0x1c, 0x20, 0x0f, 0xcf, 0xbf, 0x27, 0x04, 0x6e, + 0x37, 0x26, 0xdb, 0x05, 0x97, 0x22, 0x17, 0x5a, 0xa3, 0x6e, 0xf1, + 0x3a, 0x26, 0xcd, 0xc4, 0x1e, 0x98, 0xd1, 0x02, 0xab, 0xb1}, + // privateKeyDigest + {0x81, 0xf8, 0x65, 0x21, 0x1d, 0x29, 0xc0, 0x01, 0x7a, 0x8c, 0xb0, + 0xe2, 0x9a, 0x72, 0xf2, 0xd9, 0x83, 0x7e, 0xcc, 0xb9, 0x9d, 0xb5, + 0x3d, 0xf2, 0xb2, 0x67, 0x5d, 0xd0, 0xa8, 0x3d, 0xea, 0xd5}}, + // tcID: 32 + {32, + params_ml_kem768, + // seed + {0xda, 0xf0, 0xb4, 0xbc, 0x60, 0x93, 0x56, 0xbe, 0x13, 0xde, 0x9f, + 0xd9, 0xea, 0xbb, 0x48, 0x63, 0xeb, 0x7f, 0x6c, 0xba, 0x48, 0x97, + 0x49, 0xbf, 0xc2, 0xad, 0xff, 0x5c, 0x8c, 0xbe, 0x52, 0x84, 0x76, + 0xe7, 0x64, 0x48, 0xc7, 0xed, 0xa5, 0xc6, 0xed, 0xb3, 0x87, 0x68, + 0x5c, 0x78, 0x26, 0xbe, 0x93, 0x1f, 0x5c, 0x01, 0x67, 0x10, 0x3f, + 0x3f, 0x38, 0x7c, 0xaa, 0x05, 0x59, 0x43, 0x71, 0x9a}, + // publicKeyDigest + {0xa9, 0xb8, 0xc7, 0x51, 0x14, 0x49, 0xdc, 0xd5, 0x24, 0x2f, 0x49, + 0xc5, 0xaa, 0x69, 0xbe, 0x64, 0x0f, 0xb1, 0x28, 0x08, 0x11, 0xc0, + 0x87, 0xfa, 0x89, 0x02, 0x28, 0x4d, 0xcf, 0x40, 0x99, 0x5f}, + // privateKeyDigest + {0xe5, 0xe0, 0xea, 0x0a, 0xe2, 0x57, 0x58, 0x0c, 0x8b, 0x99, 0x93, + 0x56, 0x7d, 0xcf, 0xf1, 0x23, 0x27, 0xb7, 0x02, 0x7d, 0x4e, 0x22, + 0xf5, 0xbe, 0x7a, 0x99, 0x1c, 0x75, 0xca, 0x90, 0x0c, 0x23}}, + // tcID: 33 + {33, + params_ml_kem768, + // seed + {0x9c, 0x87, 0xc3, 0x99, 0xaa, 0xe8, 0x09, 0x3e, 0x6a, 0xca, 0x95, + 0x52, 0xee, 0x47, 0x97, 0xd3, 0x02, 0xf7, 0x22, 0x3a, 0x5c, 0xfe, + 0xea, 0xee, 0xc4, 0x6f, 0x1a, 0xeb, 0xf7, 0x3d, 0xd1, 0xce, 0x1c, + 0x8b, 0xb0, 0x99, 0x69, 0xca, 0x5c, 0x67, 0x9f, 0xa2, 0x5c, 0xbd, + 0xb8, 0x1f, 0xe6, 0x97, 0x26, 0xd9, 0x21, 0x70, 0xb6, 0x62, 0x7f, + 0x4d, 0x21, 0x2c, 0x63, 0x07, 0x4f, 0xa9, 0xe1, 0xc7}, + // publicKeyDigest + {0xab, 0x27, 0x0d, 0x28, 0x64, 0xe5, 0x39, 0x7e, 0x0b, 0x0d, 0x40, + 0x9d, 0xaf, 0x24, 0x04, 0x9c, 0x35, 0x17, 0x6e, 0x35, 0xa3, 0x21, + 0xd1, 0xc5, 0x06, 0xa4, 0xa9, 0x57, 0x45, 0x79, 0x2d, 0x46}, + // privateKeyDigest + {0x33, 0x6e, 0xe8, 0x59, 0x30, 0x15, 0xdb, 0x35, 0xa1, 0x76, 0x46, + 0x91, 0x4d, 0x9f, 0x1b, 0xd2, 0x8f, 0xb9, 0x3e, 0x73, 0x57, 0xc6, + 0x85, 0x3c, 0x97, 0xae, 0xdd, 0xa9, 0xa5, 0x18, 0xa5, 0x41}}, + // tcID: 34 + {34, + params_ml_kem768, + // seed + {0xfc, 0x6e, 0xd5, 0x50, 0x7d, 0x3d, 0x60, 0x8d, 0xa3, 0x2f, 0x14, + 0x86, 0xce, 0x03, 0xf9, 0xd4, 0x89, 0x71, 0x0a, 0x29, 0x5a, 0x34, + 0x17, 0x7f, 0x20, 0x30, 0x01, 0x54, 0x99, 0xd1, 0x39, 0x07, 0xd6, + 0x08, 0xa8, 0x6e, 0xfd, 0x98, 0x9f, 0x32, 0x54, 0xd8, 0x9a, 0x31, + 0x6a, 0x7e, 0xda, 0xce, 0xfe, 0x5e, 0x45, 0x56, 0x89, 0xcf, 0xa3, + 0xa4, 0xdc, 0xd2, 0xe8, 0x1d, 0x70, 0xb5, 0x66, 0x3d}, + // publicKeyDigest + {0xc6, 0xa8, 0x8d, 0x35, 0xb3, 0x7a, 0xe8, 0xf0, 0x18, 0x67, 0x5d, + 0xda, 0x3d, 0xaf, 0x71, 0x80, 0xe6, 0x10, 0xe0, 0x5d, 0x83, 0x03, + 0xa6, 0xd8, 0x8d, 0xbc, 0x5c, 0x44, 0x01, 0xe9, 0x3b, 0xb8}, + // privateKeyDigest + {0x97, 0xcf, 0x86, 0x1c, 0xc1, 0x4e, 0x57, 0xaf, 0x71, 0x0b, 0xb8, + 0xed, 0x8b, 0x3b, 0xe2, 0xc4, 0x77, 0x6f, 0xf0, 0xc0, 0x2d, 0x18, + 0x04, 0x6c, 0x14, 0x4f, 0x4b, 0x88, 0x21, 0x12, 0x59, 0x23}}, + // tcID: 35 + {35, + params_ml_kem768, + // seed + {0x6e, 0x9c, 0x1e, 0xa4, 0xe9, 0x55, 0xca, 0xe2, 0xa1, 0xe1, 0x93, + 0x7f, 0x05, 0x6b, 0xc9, 0x7b, 0xf9, 0x21, 0xe9, 0x03, 0x26, 0x68, + 0x38, 0xed, 0x87, 0x08, 0x82, 0xc9, 0x0f, 0xb5, 0x3a, 0x8c, 0x1b, + 0x64, 0xa7, 0xb5, 0x70, 0x8e, 0xf4, 0x62, 0xd3, 0x54, 0xe4, 0x1e, + 0x33, 0x64, 0xa6, 0x06, 0xb3, 0xa4, 0x31, 0x71, 0x9d, 0x98, 0xbc, + 0x16, 0x52, 0x8f, 0x32, 0xde, 0xb7, 0x9e, 0x36, 0x86}, + // publicKeyDigest + {0x7e, 0x80, 0x7b, 0xbf, 0x0a, 0xa3, 0xe1, 0xb1, 0xd3, 0x9a, 0xc2, + 0xf1, 0xeb, 0xbc, 0x03, 0x98, 0x77, 0xec, 0xb5, 0xfd, 0x12, 0xa2, + 0xe2, 0x87, 0x66, 0x2d, 0x3f, 0xe7, 0x77, 0xbc, 0x27, 0x58}, + // privateKeyDigest + {0xfd, 0xb1, 0x6c, 0x40, 0x12, 0x96, 0x54, 0x85, 0xda, 0xb4, 0x24, + 0x4f, 0xef, 0xb5, 0x54, 0x4d, 0x74, 0xae, 0x3b, 0x0b, 0x74, 0x2f, + 0x2c, 0xa4, 0xf8, 0xca, 0x4b, 0xed, 0x5c, 0xd2, 0x33, 0x01}}, + // tcID: 36 + {36, + params_ml_kem768, + // seed + {0xda, 0xb3, 0x1f, 0x41, 0xb3, 0x79, 0x6d, 0x0c, 0x9f, 0xd3, 0x3f, + 0x4e, 0x6c, 0x3e, 0x9c, 0x6e, 0x46, 0x17, 0xe1, 0xf5, 0x0b, 0xdb, + 0xfd, 0xeb, 0x45, 0x07, 0x90, 0x47, 0xdf, 0xf9, 0xad, 0x58, 0x14, + 0x1e, 0xe3, 0x0d, 0x44, 0x0a, 0xff, 0xc1, 0x5b, 0xb9, 0x6c, 0x99, + 0x7b, 0x4b, 0x42, 0x2a, 0xec, 0x41, 0xba, 0xc3, 0x56, 0x87, 0x72, + 0xbd, 0xc0, 0x63, 0x4b, 0xb3, 0x3b, 0xc9, 0xc6, 0x0b}, + // publicKeyDigest + {0x62, 0x88, 0xe1, 0xa8, 0xf4, 0x30, 0xd1, 0x1d, 0x6a, 0xe5, 0x89, + 0xa0, 0x5d, 0xe4, 0x91, 0xf4, 0x0b, 0xf3, 0xc3, 0x03, 0xc4, 0x8d, + 0x3c, 0xf9, 0xc1, 0x9b, 0x67, 0x09, 0xa0, 0xd5, 0xc5, 0xf2}, + // privateKeyDigest + {0x13, 0xf8, 0xbe, 0x55, 0x84, 0x26, 0x69, 0xbd, 0xbe, 0x50, 0x0f, + 0x8d, 0x42, 0x3c, 0x3e, 0xe0, 0xf6, 0x17, 0xc8, 0x33, 0xb6, 0xb3, + 0x10, 0x7d, 0x76, 0xad, 0x0a, 0xa3, 0xb4, 0x42, 0x8c, 0xdc}}, + // tcID: 37 + {37, + params_ml_kem768, + // seed + {0xb3, 0x20, 0x68, 0x37, 0xef, 0x4d, 0x70, 0xed, 0x2c, 0xae, 0x79, + 0x76, 0x71, 0x4c, 0x54, 0xe4, 0xd4, 0xb9, 0xa2, 0x21, 0x76, 0x17, + 0x72, 0xd1, 0xe6, 0xf8, 0x64, 0xa6, 0x46, 0xce, 0x1f, 0xd9, 0xcd, + 0xc6, 0xf4, 0xc1, 0xe5, 0xa8, 0x9b, 0x9a, 0xd1, 0x9f, 0x97, 0x7b, + 0x21, 0x31, 0x02, 0x12, 0xf8, 0xdc, 0x6c, 0x45, 0xf0, 0x39, 0x82, + 0xa7, 0xe2, 0x4d, 0xdf, 0x8b, 0xe8, 0x42, 0x8c, 0xc3}, + // publicKeyDigest + {0xfe, 0x73, 0xf5, 0xf0, 0x51, 0x66, 0xf9, 0xf6, 0xe6, 0x75, 0xdb, + 0x43, 0x60, 0x9c, 0x20, 0x3f, 0x85, 0xa7, 0x53, 0x65, 0x7e, 0xbe, + 0xd7, 0xe5, 0x14, 0x30, 0x83, 0xd8, 0xc0, 0x13, 0x30, 0x74}, + // privateKeyDigest + {0xd2, 0xb9, 0xee, 0xd5, 0x13, 0x50, 0x14, 0x1b, 0x35, 0x10, 0xb9, + 0xc4, 0x4e, 0x99, 0x3e, 0xfe, 0xc3, 0xf5, 0x48, 0x41, 0x61, 0x31, + 0xa4, 0x86, 0x76, 0x6e, 0x4e, 0xca, 0xf1, 0xc1, 0x88, 0x7f}}, + // tcID: 38 + {38, + params_ml_kem768, + // seed + {0xa4, 0xa4, 0x53, 0xf7, 0x37, 0x56, 0x59, 0xd2, 0xa8, 0x0c, 0x3c, + 0xbf, 0x22, 0xc3, 0x6a, 0x83, 0x8c, 0x64, 0xc2, 0x8c, 0x20, 0x6b, + 0xf2, 0x2a, 0x6a, 0x5d, 0x14, 0xe2, 0xfb, 0xe8, 0x14, 0x9a, 0x15, + 0x14, 0xd3, 0x16, 0xd9, 0xaa, 0xa6, 0xc6, 0xdc, 0xa5, 0xa3, 0xf5, + 0x67, 0x1b, 0xe5, 0x51, 0x70, 0xcd, 0xfa, 0x13, 0x2b, 0x39, 0xcd, + 0x78, 0xba, 0x2d, 0xa2, 0xde, 0x1c, 0x36, 0x78, 0x4b}, + // publicKeyDigest + {0xba, 0x11, 0xcb, 0x78, 0xe4, 0x7d, 0x3e, 0xa5, 0x08, 0x1a, 0x36, + 0x69, 0x24, 0x2f, 0x1d, 0xfa, 0xbe, 0x78, 0xb0, 0xc8, 0xe9, 0x26, + 0x53, 0x80, 0xcd, 0x82, 0x7b, 0x0b, 0x43, 0xf9, 0x9d, 0xd3}, + // privateKeyDigest + {0x34, 0x05, 0xff, 0x29, 0x30, 0xd7, 0xa7, 0x2c, 0xd5, 0xa3, 0x14, + 0xaa, 0xd1, 0xdb, 0xf3, 0x68, 0xf1, 0x53, 0xbd, 0x48, 0x10, 0xd1, + 0x34, 0xea, 0xf1, 0x0c, 0x27, 0x22, 0xb7, 0x1c, 0xa1, 0x70}}, + // tcID: 39 + {39, + params_ml_kem768, + // seed + {0xc4, 0x92, 0x09, 0xb3, 0x68, 0xf4, 0x65, 0xae, 0x48, 0x07, 0x75, + 0xe1, 0x6a, 0x7e, 0x29, 0x6c, 0x32, 0x6d, 0xc3, 0x03, 0xb6, 0x61, + 0x18, 0xaf, 0x1e, 0x95, 0x27, 0x61, 0x6a, 0x88, 0xf9, 0x53, 0x30, + 0x67, 0x58, 0x0b, 0x27, 0x1b, 0x81, 0x8e, 0xed, 0xa0, 0xa9, 0x7c, + 0x00, 0x41, 0x17, 0x98, 0x8e, 0x6d, 0x19, 0x6f, 0xf8, 0x2a, 0xb7, + 0x1d, 0x9d, 0x31, 0xce, 0xe9, 0x82, 0x53, 0x4f, 0xf1}, + // publicKeyDigest + {0xc5, 0x6d, 0x6d, 0x9f, 0xd3, 0x4c, 0x4a, 0xf5, 0xa9, 0xf9, 0xb9, + 0x6f, 0xbc, 0x6e, 0x2d, 0x53, 0x6c, 0xa5, 0xb5, 0xd0, 0x13, 0xed, + 0x48, 0x63, 0x43, 0x06, 0xff, 0xef, 0x6c, 0xad, 0x97, 0xa4}, + // privateKeyDigest + {0x8e, 0x41, 0xb8, 0xf0, 0xe0, 0xdc, 0xd2, 0x6d, 0x96, 0x75, 0x23, + 0x97, 0x24, 0xb0, 0x87, 0x45, 0x35, 0x53, 0x6c, 0x39, 0x6a, 0xe6, + 0x78, 0x51, 0xc9, 0xb7, 0xb6, 0xb0, 0xe6, 0x34, 0x15, 0x84}}, + // tcID: 40 + {40, + params_ml_kem768, + // seed + {0x59, 0xc0, 0x45, 0xef, 0xe5, 0xa6, 0x5c, 0xd7, 0x64, 0x19, 0x1f, + 0x4d, 0x49, 0x6c, 0x86, 0x1b, 0x83, 0xd2, 0x84, 0x02, 0xbc, 0x05, + 0xe5, 0x66, 0x11, 0xda, 0xf2, 0xf9, 0x71, 0x73, 0x47, 0xa9, 0xe1, + 0x0c, 0x5b, 0x94, 0x8c, 0x23, 0x94, 0x8b, 0x69, 0xba, 0x4b, 0x11, + 0x33, 0xe2, 0x7a, 0x86, 0xb4, 0xe1, 0x79, 0x89, 0xad, 0xed, 0x93, + 0xb4, 0x55, 0xd1, 0x12, 0x79, 0x32, 0xc5, 0x92, 0xb0}, + // publicKeyDigest + {0xb3, 0x3f, 0xb8, 0x3b, 0xe3, 0x3d, 0x15, 0x21, 0x7c, 0xf2, 0x65, + 0xe0, 0xfa, 0x71, 0x64, 0x85, 0x51, 0x01, 0xe2, 0xf2, 0xfc, 0x8d, + 0xb1, 0xd0, 0xd1, 0xb4, 0x82, 0x2f, 0x9d, 0xed, 0x92, 0xeb}, + // privateKeyDigest + {0x56, 0xcb, 0x6c, 0xa2, 0x3f, 0xc4, 0x7f, 0xcf, 0x1b, 0x8d, 0x57, + 0x59, 0x95, 0x3b, 0xab, 0x9a, 0x79, 0x2b, 0xbd, 0x02, 0xd9, 0x16, + 0x79, 0x78, 0xe7, 0x65, 0xac, 0xdd, 0x73, 0x8d, 0x81, 0xf4}}, + // tcID: 41 + {41, + params_ml_kem768, + // seed + {0x78, 0xad, 0xca, 0xb3, 0x36, 0xed, 0xc6, 0xf7, 0x02, 0x10, 0x65, + 0xca, 0x99, 0x34, 0xb1, 0x8e, 0x88, 0x7a, 0x81, 0x0c, 0x83, 0xd8, + 0xc1, 0x66, 0x2f, 0x90, 0x40, 0x98, 0xb5, 0x20, 0x72, 0x1d, 0x4c, + 0x56, 0x0a, 0xd6, 0xe7, 0x0e, 0x02, 0x4e, 0x7e, 0x94, 0x2e, 0xbd, + 0xbc, 0xcc, 0x75, 0xdc, 0x08, 0x59, 0x31, 0xe0, 0xa8, 0xe8, 0x27, + 0x82, 0x84, 0xb2, 0xc2, 0x39, 0x3c, 0x45, 0x8c, 0x30}, + // publicKeyDigest + {0x82, 0x8a, 0x71, 0xfc, 0x7e, 0xa1, 0xbe, 0x91, 0xaa, 0x8a, 0xe1, + 0x6f, 0x67, 0x93, 0x3d, 0xd8, 0x89, 0x73, 0x63, 0xb7, 0x31, 0x73, + 0xb3, 0x45, 0x58, 0x94, 0x4b, 0x47, 0xe1, 0xf2, 0x84, 0x6d}, + // privateKeyDigest + {0x61, 0x0a, 0xd6, 0xb9, 0x0a, 0xd9, 0xf8, 0x17, 0x2a, 0xe4, 0x0a, + 0xf7, 0x7f, 0xfd, 0xb3, 0x4a, 0x1f, 0x9d, 0x9c, 0xbb, 0xe0, 0xdf, + 0x4a, 0x72, 0x55, 0xa4, 0x05, 0xbc, 0x26, 0xbf, 0xb3, 0x8a}}, + // tcID: 42 + {42, + params_ml_kem768, + // seed + {0x1e, 0x1f, 0xfd, 0x0c, 0xe2, 0xc3, 0x4a, 0x42, 0x79, 0x5f, 0x06, + 0xf8, 0x1a, 0x19, 0x98, 0x7c, 0x2d, 0x22, 0x34, 0xc8, 0x81, 0x3f, + 0xe5, 0x9d, 0x24, 0x67, 0x7e, 0xe4, 0xea, 0x47, 0x4b, 0x20, 0x2c, + 0x7d, 0x1f, 0xc6, 0xfd, 0xd6, 0x15, 0xcc, 0x07, 0x81, 0x87, 0x87, + 0x7c, 0xd2, 0x74, 0x4c, 0xa2, 0x68, 0x7e, 0x7f, 0x00, 0x79, 0xc8, + 0x3d, 0xe6, 0xfb, 0xe3, 0xf7, 0x8f, 0x52, 0xc4, 0x00}, + // publicKeyDigest + {0x31, 0xbf, 0x3a, 0xd5, 0x6a, 0x7e, 0xb9, 0x86, 0x69, 0x4a, 0x32, + 0x56, 0xa2, 0xd4, 0xf5, 0xf6, 0x38, 0xd3, 0xc7, 0xac, 0x6f, 0x91, + 0xc0, 0xc0, 0x4e, 0x4f, 0x68, 0xd1, 0x46, 0xf4, 0x8d, 0x2d}, + // privateKeyDigest + {0xa4, 0x39, 0x6b, 0x0e, 0x64, 0x6c, 0xec, 0x9a, 0xce, 0xd7, 0xed, + 0x81, 0x63, 0x09, 0x94, 0x6b, 0x6e, 0xe8, 0x4d, 0x55, 0xf4, 0x1d, + 0x2c, 0x3a, 0xe6, 0x91, 0xab, 0x7c, 0xee, 0x81, 0xe7, 0x00}}, + // tcID: 43 + {43, + params_ml_kem768, + // seed + {0x9c, 0x4a, 0x7c, 0xf7, 0xce, 0xcf, 0x92, 0xa0, 0xd4, 0x32, 0xba, + 0x1d, 0x68, 0x4a, 0x87, 0x3f, 0xa9, 0x32, 0x97, 0xdf, 0x89, 0x27, + 0x38, 0x99, 0x34, 0x1a, 0x0f, 0x87, 0x2c, 0xc8, 0xc4, 0x82, 0x02, + 0xc9, 0x0d, 0xc1, 0x8d, 0x78, 0x0f, 0x2d, 0xdd, 0xfd, 0x5a, 0x7f, + 0x8e, 0x3c, 0xc0, 0xc6, 0x10, 0x6d, 0xd2, 0x25, 0x9c, 0xa6, 0xa4, + 0xa9, 0x0c, 0x09, 0x70, 0xde, 0xfd, 0x6f, 0x9e, 0x2f}, + // publicKeyDigest + {0xa1, 0x97, 0x0e, 0x5d, 0x3d, 0xce, 0x7b, 0x32, 0xc0, 0xb6, 0x24, + 0x01, 0x37, 0x75, 0x4c, 0x85, 0xd5, 0xb3, 0x25, 0xed, 0x53, 0x82, + 0x4b, 0xd4, 0xbd, 0x1b, 0xed, 0xb4, 0x01, 0x4d, 0x7a, 0x7e}, + // privateKeyDigest + {0xd5, 0x9c, 0x84, 0xff, 0x8e, 0xf6, 0x90, 0xc7, 0x6b, 0x4e, 0x61, + 0x62, 0xe7, 0xe2, 0x47, 0xcd, 0x57, 0x75, 0x3e, 0xb1, 0xf0, 0xd6, + 0xd7, 0x1c, 0x84, 0x6e, 0x21, 0xa8, 0x18, 0xc0, 0xf8, 0xf3}}, + // tcID: 44 + {44, + params_ml_kem768, + // seed + {0x87, 0x12, 0x23, 0xd6, 0x69, 0x47, 0xc5, 0x18, 0xe8, 0x18, 0xf1, + 0x7d, 0x64, 0xef, 0x2b, 0x0b, 0x42, 0x31, 0xbd, 0x27, 0x4a, 0x0d, + 0x4c, 0xdb, 0xfe, 0xf7, 0xee, 0x54, 0x7b, 0x36, 0x20, 0xc6, 0x9f, + 0x17, 0x85, 0xbb, 0x9a, 0xa7, 0xcd, 0xec, 0x1a, 0x33, 0x62, 0x05, + 0x2d, 0x80, 0xa8, 0xf2, 0x97, 0x3f, 0x00, 0x48, 0xa1, 0xdf, 0xad, + 0x0c, 0xcd, 0xbd, 0x7e, 0x36, 0x33, 0xe0, 0x4c, 0x4b}, + // publicKeyDigest + {0x3a, 0x60, 0xc5, 0xbb, 0xe0, 0x76, 0xca, 0x56, 0x83, 0xb2, 0x99, + 0x78, 0xf6, 0x8e, 0xc6, 0x55, 0x9e, 0x4a, 0x5f, 0x2e, 0xf5, 0x4f, + 0xae, 0x3c, 0xa8, 0x7c, 0x2c, 0xc2, 0x4b, 0x7f, 0xe4, 0x4b}, + // privateKeyDigest + {0xc1, 0x01, 0x47, 0x3e, 0x89, 0x64, 0xf3, 0xd2, 0x8e, 0xe6, 0x54, + 0x8e, 0x6c, 0x13, 0x66, 0xa7, 0x4b, 0xe8, 0x47, 0x2e, 0x7a, 0xec, + 0x27, 0x90, 0xde, 0x2a, 0x5e, 0x9f, 0xd6, 0x09, 0x63, 0x64}}, + // tcID: 45 + {45, + params_ml_kem768, + // seed + {0x61, 0x7f, 0x05, 0xa9, 0xd1, 0xf7, 0x33, 0xcf, 0xc7, 0x94, 0xf9, + 0xfe, 0xd8, 0xf4, 0x52, 0x09, 0x4d, 0x71, 0x09, 0xff, 0x0f, 0x9a, + 0x86, 0xdc, 0xb1, 0x7a, 0x65, 0x30, 0x67, 0x67, 0xc7, 0x4d, 0xd6, + 0x73, 0x26, 0xbd, 0x88, 0x28, 0x3f, 0x07, 0x5e, 0x55, 0xf1, 0x10, + 0xab, 0x55, 0x1e, 0x42, 0x03, 0x50, 0x85, 0x37, 0x03, 0x3c, 0xb0, + 0x87, 0x3d, 0x8e, 0xd2, 0x11, 0xff, 0x91, 0x24, 0xb9}, + // publicKeyDigest + {0xc1, 0x05, 0x7e, 0x62, 0xc1, 0xd6, 0x8c, 0xd0, 0x0b, 0x68, 0x17, + 0xc0, 0xde, 0xd2, 0x1b, 0xdd, 0x71, 0x0e, 0xc0, 0x86, 0xdb, 0x10, + 0xda, 0x26, 0x81, 0x5b, 0x3c, 0x17, 0x2e, 0xb5, 0xd0, 0xaf}, + // privateKeyDigest + {0x95, 0xc3, 0xa6, 0x05, 0x4a, 0x44, 0x7e, 0xe3, 0xa5, 0xeb, 0xf8, + 0xc8, 0x56, 0x9f, 0x54, 0x80, 0xd6, 0x61, 0xe3, 0x76, 0x24, 0x73, + 0xe0, 0x79, 0xa2, 0x66, 0xaf, 0x0f, 0xe9, 0x00, 0x72, 0xed}}, + // tcID: 46 + {46, + params_ml_kem768, + // seed + {0xf5, 0x54, 0xa1, 0xc6, 0x46, 0x64, 0x87, 0x65, 0x13, 0x54, 0x3f, + 0xc1, 0x0d, 0xd4, 0xd7, 0xd7, 0x3c, 0x54, 0x93, 0x06, 0xfb, 0xc5, + 0x1c, 0xac, 0x2b, 0x43, 0x39, 0xa2, 0xf3, 0xa5, 0x08, 0x55, 0x2e, + 0x56, 0x2d, 0x81, 0x25, 0x38, 0x86, 0xfa, 0xab, 0xf1, 0xa4, 0x85, + 0xb5, 0xab, 0xfc, 0xb2, 0x7d, 0x77, 0x16, 0xbf, 0xb8, 0x7a, 0xed, + 0x22, 0xd6, 0xc7, 0xfe, 0xcd, 0x5e, 0x33, 0x57, 0xb8}, + // publicKeyDigest + {0x3b, 0xe4, 0x82, 0x7c, 0xc1, 0x43, 0x60, 0x55, 0xe3, 0xcc, 0xa4, + 0x95, 0xad, 0xb3, 0x12, 0xbe, 0x5a, 0x35, 0xbc, 0x6d, 0x6d, 0xf1, + 0x3f, 0x43, 0xd6, 0x43, 0xd9, 0x61, 0xdf, 0x40, 0xa6, 0x09}, + // privateKeyDigest + {0xaf, 0xd6, 0xd9, 0xe2, 0x1a, 0xe0, 0x0e, 0xc4, 0x64, 0x6b, 0x4e, + 0x30, 0x53, 0x2c, 0x57, 0xfe, 0x4e, 0xc3, 0x4c, 0x45, 0x87, 0xa4, + 0x9f, 0xa3, 0x50, 0xf7, 0xcd, 0x1e, 0xfb, 0xc5, 0xee, 0x44}}, + // tcID: 47 + {47, + params_ml_kem768, + // seed + {0x29, 0x9a, 0xa7, 0x74, 0x5e, 0x4d, 0xc0, 0x41, 0xff, 0x92, 0x5a, + 0xf9, 0xbe, 0x54, 0x1f, 0xc6, 0x83, 0x4c, 0xe8, 0xd3, 0x92, 0x48, + 0x73, 0x74, 0x3b, 0x53, 0x0f, 0xa5, 0xe9, 0x9b, 0x2d, 0x2c, 0x98, + 0x55, 0xcf, 0x40, 0xf8, 0x86, 0x5e, 0xe0, 0xaf, 0xff, 0x8e, 0x64, + 0xae, 0xbd, 0xfa, 0xf1, 0xf3, 0xc9, 0x26, 0x15, 0x6e, 0x25, 0x19, + 0xf9, 0xdb, 0xa0, 0xfa, 0xbd, 0x2e, 0x70, 0x40, 0x8d}, + // publicKeyDigest + {0x74, 0x69, 0x86, 0xc0, 0x0b, 0x96, 0x93, 0x00, 0xda, 0xcf, 0x52, + 0xf1, 0x42, 0x07, 0x80, 0x04, 0xc1, 0x6c, 0xf0, 0x73, 0x91, 0x2b, + 0x48, 0x07, 0xa1, 0x80, 0x99, 0xb4, 0xc7, 0x3e, 0xc9, 0x79}, + // privateKeyDigest + {0x62, 0x13, 0x95, 0x21, 0x82, 0xd4, 0xc4, 0x46, 0x18, 0x39, 0x39, + 0xea, 0xd2, 0xc4, 0xdc, 0xa4, 0x77, 0x2f, 0xdc, 0x28, 0x7b, 0xf4, + 0x93, 0xc4, 0xe6, 0xb2, 0x8a, 0x68, 0x13, 0xaa, 0x91, 0x7e}}, + // tcID: 48 + {48, + params_ml_kem768, + // seed + {0x57, 0xf0, 0xd8, 0x45, 0x58, 0xaf, 0xe0, 0x39, 0x01, 0xf2, 0x81, + 0x07, 0xbb, 0xa1, 0xf3, 0x46, 0x81, 0x55, 0xbe, 0xe6, 0xc1, 0x0b, + 0x93, 0x6c, 0xcc, 0xfb, 0x6e, 0x09, 0x5a, 0x84, 0x7c, 0xc3, 0x36, + 0xe6, 0x0b, 0x1d, 0x30, 0xe2, 0x01, 0x16, 0xba, 0xbf, 0xdc, 0x6d, + 0x79, 0x9e, 0xa0, 0xd2, 0x0c, 0x84, 0x1d, 0xe1, 0x56, 0xeb, 0x89, + 0x63, 0x0e, 0x09, 0x27, 0x5a, 0xc5, 0x9b, 0xf8, 0xdd}, + // publicKeyDigest + {0xc4, 0x6e, 0xa1, 0xd2, 0xea, 0x90, 0x4e, 0xad, 0x95, 0x30, 0x5c, + 0xf8, 0xab, 0x0a, 0x4e, 0xae, 0x71, 0x25, 0x48, 0x10, 0x14, 0xce, + 0x43, 0x88, 0xa8, 0x5e, 0x50, 0xee, 0x0f, 0xb5, 0x6f, 0x3b}, + // privateKeyDigest + {0x95, 0x46, 0x0b, 0x86, 0x6b, 0xa6, 0x7e, 0x48, 0x72, 0xeb, 0x69, + 0x26, 0x4b, 0x4a, 0x48, 0x7f, 0x9e, 0x93, 0x42, 0x39, 0xad, 0xdc, + 0x30, 0xe8, 0x33, 0x0a, 0xed, 0xed, 0xdb, 0x78, 0xb8, 0xe1}}, + // tcID: 49 + {49, + params_ml_kem768, + // seed + {0xc6, 0x58, 0x04, 0x0c, 0x56, 0x73, 0x55, 0xb8, 0xd2, 0x74, 0x0b, + 0x0d, 0xd6, 0x93, 0x8b, 0xce, 0xd0, 0xf7, 0xb8, 0x34, 0x5a, 0x3c, + 0x04, 0x65, 0x32, 0x9c, 0x77, 0xdb, 0x7a, 0x6c, 0xb1, 0x83, 0x5b, + 0xe8, 0x9a, 0xc2, 0x35, 0x32, 0xb9, 0xc2, 0x43, 0xf3, 0xc8, 0xb4, + 0xcc, 0xcd, 0x10, 0x4d, 0x16, 0x87, 0x98, 0xaf, 0x61, 0xf5, 0x79, + 0x61, 0x1a, 0x3a, 0x3e, 0x0f, 0x36, 0x98, 0xac, 0x9a}, + // publicKeyDigest + {0xbf, 0x33, 0x79, 0xd3, 0x8e, 0x80, 0xd3, 0xdb, 0xa1, 0x6d, 0x87, + 0xf1, 0xc3, 0x4b, 0x32, 0x05, 0xbf, 0xb0, 0xb0, 0xc2, 0x56, 0x29, + 0xbc, 0x2d, 0x3c, 0x42, 0xef, 0x41, 0x8b, 0x50, 0xe3, 0x64}, + // privateKeyDigest + {0xc7, 0x29, 0x44, 0xea, 0x22, 0x9f, 0xcf, 0xd2, 0x7b, 0xf8, 0xd4, + 0x29, 0x07, 0xab, 0xfb, 0xd0, 0xd7, 0xa9, 0xf5, 0x3d, 0x19, 0xdf, + 0x17, 0xf2, 0xb4, 0xed, 0x3f, 0xda, 0x81, 0x35, 0x32, 0x5b}}, + // tcID: 50 + {50, + params_ml_kem768, + // seed + {0xf3, 0xa8, 0x54, 0x83, 0x71, 0xfa, 0x09, 0x52, 0x16, 0x7b, 0x35, + 0xaf, 0x4f, 0x0e, 0x33, 0x0e, 0x1d, 0x40, 0x1e, 0xcb, 0xfd, 0x85, + 0x37, 0x7c, 0x99, 0x41, 0x53, 0xc4, 0x7b, 0x08, 0x94, 0xcd, 0xcb, + 0x23, 0x52, 0x74, 0x58, 0x5d, 0x12, 0xb1, 0xd5, 0x57, 0xa0, 0xd8, + 0x09, 0x81, 0xf7, 0x41, 0x4f, 0xb8, 0x8e, 0x13, 0xcc, 0xe5, 0x51, + 0x45, 0x1c, 0xac, 0xe1, 0x83, 0xac, 0xde, 0xa9, 0xb6}, + // publicKeyDigest + {0x3f, 0x9e, 0xd7, 0x0f, 0xda, 0x26, 0x9c, 0x81, 0x64, 0x56, 0x70, + 0x47, 0x9e, 0xd9, 0x98, 0xbe, 0xb9, 0xc7, 0x2b, 0xe4, 0xa7, 0xd5, + 0x85, 0x4a, 0x70, 0x23, 0x2b, 0x29, 0x1b, 0x59, 0x2b, 0x65}, + // privateKeyDigest + {0x0f, 0x53, 0xc8, 0x80, 0x0f, 0x3a, 0xbe, 0x05, 0x2e, 0xbc, 0x75, + 0x45, 0x71, 0xbe, 0xe6, 0xe4, 0xe7, 0x7e, 0xef, 0x43, 0x80, 0x37, + 0xa1, 0x6d, 0xd5, 0x2a, 0x0a, 0x26, 0x6c, 0x30, 0xe0, 0xeb}}, + // tcID: 51 + {51, + params_ml_kem1024, + // seed + {0x2b, 0x53, 0x30, 0xc4, 0xf2, 0x3b, 0xfd, 0xfd, 0x5c, 0x31, 0xf0, + 0x50, 0xba, 0x3b, 0x38, 0x23, 0x53, 0x24, 0xbf, 0x03, 0x23, 0x72, + 0xfc, 0x12, 0xd0, 0x4d, 0xd0, 0x89, 0x20, 0xf0, 0xbd, 0x59, 0x0a, + 0x06, 0x4d, 0x6c, 0x06, 0xce, 0xab, 0x73, 0xe5, 0x9c, 0xfc, 0xa9, + 0xff, 0x64, 0x02, 0x25, 0x5a, 0x32, 0x6a, 0xef, 0x1e, 0x9c, 0xb6, + 0x78, 0xbf, 0x36, 0x92, 0x9d, 0xaf, 0xe2, 0x9a, 0x58}, + // publicKeyDigest + {0x88, 0xa8, 0xfd, 0x05, 0xcd, 0x6d, 0xa0, 0x66, 0xd2, 0xba, 0xb1, + 0x05, 0x29, 0x9b, 0x3e, 0xe6, 0x66, 0x05, 0xbd, 0x5a, 0x80, 0x37, + 0x60, 0xaf, 0x56, 0xa6, 0x03, 0x3c, 0xb9, 0xd3, 0xb9, 0x24}, + // privateKeyDigest + {0x26, 0xd8, 0x23, 0x88, 0x5f, 0x46, 0x5e, 0xbd, 0x28, 0xa9, 0x23, + 0xe4, 0x19, 0x57, 0xe8, 0x6b, 0xdd, 0x58, 0xb9, 0xc0, 0x6a, 0x73, + 0xff, 0x3f, 0xe8, 0xd4, 0x3a, 0x80, 0xf5, 0x81, 0x3a, 0x64}}, + // tcID: 52 + {52, + params_ml_kem1024, + // seed + {0xd1, 0x9a, 0x3d, 0xba, 0xeb, 0x91, 0xea, 0x7b, 0x11, 0xc5, 0xc7, + 0xab, 0x16, 0xf7, 0xa5, 0xea, 0x6b, 0x4c, 0xe4, 0x4c, 0xb1, 0x84, + 0x62, 0xb9, 0x69, 0x55, 0x71, 0xb7, 0x24, 0xee, 0x13, 0xac, 0x7a, + 0x98, 0xea, 0x31, 0x8a, 0xd1, 0xe2, 0x70, 0x5f, 0x20, 0xb0, 0x74, + 0x07, 0x94, 0xc3, 0xe7, 0x11, 0x12, 0x1a, 0x00, 0x60, 0x0d, 0x00, + 0xbc, 0xcc, 0xc7, 0x8c, 0xce, 0x02, 0x4a, 0x9b, 0xc1}, + // publicKeyDigest + {0x09, 0xd0, 0x76, 0x91, 0x02, 0x7d, 0xa1, 0x8e, 0x94, 0x97, 0x80, + 0x05, 0x33, 0xb1, 0xc0, 0xe2, 0x6b, 0x57, 0xdb, 0x34, 0xab, 0x40, + 0xee, 0xb9, 0xdb, 0xb2, 0x82, 0x82, 0x75, 0x64, 0xea, 0xbe}, + // privateKeyDigest + {0xfd, 0xb2, 0xee, 0x70, 0x51, 0x50, 0x89, 0xfd, 0xff, 0xb8, 0x7a, + 0x0f, 0x83, 0x29, 0xf2, 0x1f, 0x94, 0xff, 0xfb, 0x44, 0xb1, 0x16, + 0x81, 0x23, 0xa6, 0x5a, 0x6b, 0xc1, 0x01, 0xd9, 0x1e, 0x92}}, + // tcID: 53 + {53, + params_ml_kem1024, + // seed + {0x20, 0x23, 0x26, 0xc5, 0xe2, 0xd0, 0xd9, 0x21, 0x2b, 0x06, 0x2e, + 0x62, 0x2b, 0xd3, 0x86, 0x35, 0x03, 0xb3, 0x57, 0xa7, 0xcb, 0xd5, + 0xdd, 0xf9, 0xb5, 0x86, 0x59, 0x64, 0x09, 0x87, 0x1a, 0x00, 0x2d, + 0x7a, 0xaf, 0x4e, 0xa9, 0x88, 0x67, 0xa6, 0x8b, 0xc9, 0x8d, 0xe1, + 0x67, 0x68, 0x63, 0xb1, 0x2f, 0xcc, 0xc1, 0xe5, 0xd0, 0x7d, 0x16, + 0xcf, 0x72, 0xcf, 0x4d, 0x4a, 0x77, 0x64, 0xeb, 0xb8}, + // publicKeyDigest + {0xaa, 0x41, 0x60, 0x31, 0x5e, 0xa4, 0xdf, 0xa5, 0xfd, 0x51, 0x51, + 0x0a, 0x38, 0xb5, 0x8e, 0x65, 0x1c, 0x14, 0x65, 0x80, 0xb7, 0x5c, + 0xbd, 0x45, 0xdb, 0xf7, 0xda, 0x19, 0xda, 0x6e, 0x48, 0xfa}, + // privateKeyDigest + {0xa1, 0x38, 0xe2, 0x07, 0x8e, 0xbd, 0x6c, 0xd0, 0xb9, 0x34, 0xad, + 0x73, 0xb1, 0x99, 0x56, 0x4a, 0x6d, 0x76, 0x2c, 0xa5, 0xaf, 0xdc, + 0x17, 0xfe, 0x31, 0xc5, 0x9e, 0xcf, 0x0c, 0x47, 0x7e, 0x97}}, + // tcID: 54 + {54, + params_ml_kem1024, + // seed + {0xf7, 0x09, 0xb6, 0xb9, 0x45, 0x13, 0x8f, 0xaa, 0x61, 0x57, 0xf9, + 0xab, 0x41, 0x4e, 0x15, 0x35, 0x10, 0x3d, 0x16, 0x29, 0x28, 0x24, + 0x36, 0x4f, 0x0f, 0x15, 0x53, 0x88, 0x30, 0xbf, 0x38, 0xa9, 0xaa, + 0xd0, 0xb2, 0xc3, 0xf3, 0x0b, 0x2e, 0x09, 0xf2, 0x4f, 0x39, 0xa4, + 0x75, 0x29, 0x0e, 0x2e, 0x28, 0x2a, 0x7d, 0x66, 0x19, 0xeb, 0x5e, + 0xaa, 0xcd, 0xa9, 0xc5, 0x74, 0x1d, 0x82, 0xf9, 0x9b}, + // publicKeyDigest + {0x35, 0x68, 0x4f, 0xbd, 0x44, 0x1a, 0x53, 0xdf, 0x57, 0xac, 0x9a, + 0x23, 0xac, 0xab, 0x39, 0x75, 0xe5, 0xa9, 0x3b, 0x98, 0xc5, 0x7a, + 0x8e, 0xa4, 0x48, 0x23, 0x4c, 0x45, 0xc4, 0xcb, 0x09, 0xe4}, + // privateKeyDigest + {0x05, 0x38, 0x58, 0xf7, 0xa8, 0xaf, 0x69, 0xc2, 0x51, 0x54, 0xe6, + 0x7a, 0xa6, 0xb9, 0xca, 0x00, 0x32, 0xdc, 0x80, 0x54, 0x0a, 0x08, + 0xea, 0xfe, 0x61, 0xd8, 0x19, 0xae, 0x8b, 0xfb, 0x80, 0x10}}, + // tcID: 55 + {55, + params_ml_kem1024, + // seed + {0xb2, 0x49, 0x59, 0x28, 0x11, 0x97, 0xad, 0x7c, 0x58, 0x34, 0x85, + 0x2d, 0xd1, 0x45, 0xa3, 0xa5, 0xf8, 0x0c, 0xf7, 0xcb, 0xf8, 0x77, + 0xcb, 0x5c, 0xf1, 0x1e, 0x58, 0x3b, 0xf4, 0x67, 0x61, 0x62, 0x2b, + 0x2b, 0xc5, 0x32, 0xe1, 0xb9, 0xd3, 0x07, 0x39, 0xca, 0x9c, 0x68, + 0x02, 0x96, 0xc7, 0x65, 0x44, 0x64, 0x45, 0x5e, 0xd2, 0xc9, 0x5a, + 0x77, 0x7c, 0x3b, 0xe1, 0xe4, 0x9e, 0xe7, 0x46, 0xf4}, + // publicKeyDigest + {0x28, 0x4f, 0x59, 0x22, 0xe1, 0xfa, 0xdb, 0x42, 0x1c, 0xc7, 0x25, + 0xf6, 0x49, 0xa4, 0x66, 0xa7, 0xaa, 0x9d, 0x04, 0xc0, 0x9f, 0x8c, + 0x42, 0xea, 0xf6, 0xcb, 0x63, 0xa3, 0x63, 0x21, 0x50, 0x03}, + // privateKeyDigest + {0x11, 0xf0, 0xa0, 0x95, 0xb3, 0x12, 0xb7, 0xca, 0x6e, 0x95, 0xc4, + 0x5b, 0xe4, 0x67, 0xab, 0x9e, 0x79, 0xa9, 0xea, 0xed, 0x5d, 0x15, + 0x03, 0x6e, 0x30, 0x85, 0x6a, 0x67, 0x51, 0x50, 0xaa, 0x14}}, + // tcID: 56 + {56, + params_ml_kem1024, + // seed + {0x40, 0xd4, 0xf3, 0x2f, 0x98, 0x71, 0xe5, 0xdc, 0x36, 0x7e, 0x06, + 0x0e, 0xb1, 0x8c, 0xa4, 0xc8, 0xe5, 0x9f, 0x5a, 0x3e, 0x51, 0x17, + 0x22, 0x20, 0x37, 0x5e, 0x16, 0xd6, 0x1e, 0x5e, 0x66, 0xb6, 0xde, + 0x53, 0xef, 0xec, 0x91, 0xf6, 0xd9, 0x9d, 0x54, 0xf1, 0x9b, 0x33, + 0x13, 0xc1, 0xb2, 0x56, 0xca, 0x0a, 0x4c, 0x92, 0x05, 0xca, 0x0c, + 0x2f, 0xc1, 0x85, 0x26, 0x72, 0x0f, 0x39, 0xce, 0xd1}, + // publicKeyDigest + {0x09, 0x9a, 0xb7, 0x2f, 0x8f, 0xc5, 0x20, 0xfd, 0xca, 0x2a, 0x08, + 0x00, 0x97, 0xec, 0x6f, 0xa0, 0x27, 0x04, 0x9e, 0x7a, 0x9a, 0xda, + 0x0a, 0x06, 0x20, 0x31, 0x7d, 0xaa, 0xc4, 0x07, 0x80, 0xae}, + // privateKeyDigest + {0x16, 0x8f, 0x2d, 0x9e, 0x42, 0x1e, 0xb9, 0xde, 0xc3, 0xb9, 0x26, + 0x28, 0x4d, 0x6c, 0xa6, 0x8f, 0x1b, 0xef, 0xef, 0x77, 0x25, 0x7c, + 0xdb, 0x43, 0xd9, 0x3d, 0x8d, 0x9f, 0x76, 0x78, 0x1c, 0xd6}}, + // tcID: 57 + {57, + params_ml_kem1024, + // seed + {0x2c, 0xd2, 0xb4, 0x4c, 0x92, 0xc0, 0x66, 0x4c, 0x7f, 0xbf, 0x20, + 0x9d, 0xaa, 0x94, 0x6a, 0x46, 0x1f, 0x46, 0xc4, 0xa5, 0x71, 0x63, + 0xbd, 0x50, 0xc0, 0xa4, 0xf9, 0xda, 0x99, 0xc9, 0x76, 0xab, 0x60, + 0x25, 0x46, 0x03, 0x86, 0xc1, 0x99, 0x3d, 0x77, 0x4e, 0x12, 0x07, + 0x37, 0x67, 0x62, 0xc2, 0x09, 0x0f, 0x99, 0x8b, 0xb0, 0x66, 0x9b, + 0x73, 0xd6, 0x3a, 0x0d, 0x2b, 0xfd, 0xde, 0x9a, 0x91}, + // publicKeyDigest + {0x36, 0x54, 0x8a, 0x71, 0x8a, 0x2f, 0x37, 0x9c, 0x86, 0x70, 0x22, + 0xcf, 0xef, 0xb7, 0xb2, 0x28, 0xb4, 0x8b, 0x57, 0xe6, 0x1e, 0x6c, + 0xa3, 0x48, 0x92, 0x26, 0xca, 0xb9, 0x68, 0xfb, 0x30, 0x21}, + // privateKeyDigest + {0xf8, 0x31, 0x16, 0x4c, 0x23, 0xe3, 0x8f, 0xc3, 0x4e, 0xc3, 0x39, + 0x82, 0x14, 0xe5, 0x36, 0xed, 0x6a, 0xfa, 0xa1, 0x9e, 0x0a, 0x92, + 0x41, 0xc7, 0xc7, 0xb4, 0x22, 0xe0, 0x6b, 0x6e, 0x2a, 0xfa}}, + // tcID: 58 + {58, + params_ml_kem1024, + // seed + {0x8e, 0x9b, 0x03, 0xaa, 0xc5, 0x43, 0x9f, 0x1c, 0x16, 0xde, 0x8c, + 0x2b, 0x1d, 0x5e, 0x2e, 0xcf, 0x3c, 0xb1, 0x6d, 0x13, 0x84, 0x5c, + 0x4c, 0xb0, 0xdd, 0xf7, 0x73, 0x0b, 0x51, 0x98, 0xd6, 0x4e, 0x2c, + 0x07, 0xc5, 0xa4, 0xf0, 0x41, 0x28, 0xe8, 0xaf, 0xcf, 0xa2, 0x62, + 0x48, 0xc8, 0x11, 0x3a, 0x42, 0x16, 0xa0, 0x84, 0x10, 0xf2, 0x8a, + 0x54, 0x40, 0xf4, 0xeb, 0xee, 0x2b, 0x4e, 0xec, 0xb8}, + // publicKeyDigest + {0xfd, 0x71, 0x01, 0x7d, 0x48, 0x1a, 0xe6, 0x73, 0x13, 0x08, 0xa1, + 0x98, 0x7a, 0x3c, 0xbc, 0x2c, 0x9d, 0x1b, 0x9c, 0x3a, 0xc5, 0xd2, + 0xca, 0xa2, 0xe3, 0x3e, 0x03, 0x1e, 0x94, 0xb5, 0xaa, 0xae}, + // privateKeyDigest + {0x1c, 0x1f, 0x61, 0x5a, 0x9a, 0xdd, 0x4b, 0x05, 0x7d, 0x27, 0x87, + 0x9d, 0xdb, 0x85, 0x20, 0x70, 0x4c, 0xc7, 0x8e, 0x0f, 0xd2, 0xd3, + 0xa0, 0x17, 0x87, 0x04, 0x9a, 0x4e, 0x51, 0x73, 0x25, 0xcd}}, + // tcID: 59 + {59, + params_ml_kem1024, + // seed + {0x87, 0x4e, 0x71, 0xd5, 0xde, 0xbd, 0xac, 0x24, 0x68, 0xd8, 0x9d, + 0xdb, 0x4b, 0x0c, 0x1b, 0x27, 0x76, 0x6a, 0x94, 0xd9, 0x05, 0x59, + 0x1d, 0x8e, 0x60, 0x8f, 0x57, 0x15, 0xee, 0xc5, 0x3f, 0x3c, 0x7e, + 0xa8, 0xca, 0xd3, 0x46, 0x5d, 0x01, 0xbb, 0xb2, 0x27, 0xc9, 0xd3, + 0xf1, 0xe0, 0xdc, 0x79, 0x42, 0x51, 0xcc, 0x8f, 0xe6, 0x5f, 0x6f, + 0x51, 0x21, 0xb8, 0x32, 0xe0, 0x78, 0x5f, 0x4b, 0x32}, + // publicKeyDigest + {0xac, 0xc8, 0x44, 0xb3, 0xf8, 0x87, 0xf1, 0xe5, 0xb7, 0xbf, 0xba, + 0x07, 0x32, 0xa4, 0xbc, 0x47, 0x51, 0xfa, 0x39, 0x43, 0xd4, 0x31, + 0x7c, 0xdb, 0x2e, 0x7e, 0x55, 0xe2, 0x9a, 0xa5, 0x1f, 0x20}, + // privateKeyDigest + {0x1c, 0x8e, 0x7d, 0xc7, 0x4b, 0x97, 0x1e, 0x86, 0x71, 0x9c, 0x31, + 0x4f, 0xd0, 0xbd, 0x2f, 0x10, 0x9d, 0x76, 0xb6, 0x88, 0x30, 0x4e, + 0xb6, 0x52, 0xc3, 0x6f, 0x10, 0x50, 0xa7, 0x1a, 0xe3, 0x02}}, + // tcID: 60 + {60, + params_ml_kem1024, + // seed + {0xe8, 0x96, 0xca, 0x8f, 0x85, 0xb5, 0x01, 0xc4, 0x99, 0x27, 0x25, + 0xe2, 0xa5, 0x4f, 0xc8, 0x03, 0xd0, 0xd0, 0xc8, 0xf5, 0x3f, 0x03, + 0x97, 0xf7, 0x0a, 0x34, 0x04, 0xaa, 0x4d, 0x01, 0xce, 0xb0, 0xac, + 0x32, 0x31, 0x30, 0x6c, 0x34, 0x82, 0xf8, 0xc1, 0x01, 0xe9, 0x67, + 0x75, 0x21, 0x04, 0x76, 0x7a, 0x9b, 0x4b, 0x45, 0x15, 0x97, 0xeb, + 0x1a, 0xc6, 0x36, 0xc4, 0x07, 0xad, 0xc2, 0xc6, 0x82}, + // publicKeyDigest + {0xb4, 0x80, 0x6b, 0x96, 0x13, 0x36, 0x51, 0x0a, 0x82, 0x25, 0x9b, + 0x1b, 0x5b, 0xc7, 0x17, 0x73, 0xad, 0x66, 0xdf, 0x97, 0x9b, 0x92, + 0x4b, 0x4a, 0x12, 0x31, 0x46, 0x8e, 0x89, 0x33, 0x39, 0x1f}, + // privateKeyDigest + {0xac, 0xef, 0xd4, 0xc7, 0xa1, 0x85, 0x06, 0x59, 0xb7, 0x09, 0x06, + 0x36, 0x76, 0x4a, 0x3b, 0xf2, 0x99, 0x2f, 0xd1, 0x4c, 0x1d, 0xca, + 0x62, 0x08, 0x67, 0xbe, 0xaa, 0x0f, 0x67, 0x8f, 0x51, 0x6d}}, + // tcID: 61 + {61, + params_ml_kem1024, + // seed + {0xf1, 0xa9, 0x72, 0x3f, 0x63, 0x3a, 0xc8, 0x77, 0xa2, 0x61, 0xcd, + 0xf8, 0x2d, 0xc1, 0x76, 0xd0, 0xf4, 0xe2, 0x48, 0xdb, 0x4d, 0x83, + 0x38, 0xca, 0xc7, 0xfa, 0xc4, 0xdf, 0x04, 0xa0, 0x8f, 0x8f, 0x33, + 0xe7, 0xfb, 0xea, 0xdb, 0xcb, 0xd1, 0x94, 0xb7, 0x23, 0xb7, 0xc1, + 0x8f, 0xbc, 0x33, 0xba, 0xa9, 0x35, 0x27, 0x00, 0xa9, 0xa7, 0x46, + 0xed, 0x93, 0x4d, 0x0b, 0x34, 0xce, 0x7f, 0x9a, 0x59}, + // publicKeyDigest + {0xd3, 0xd9, 0x7c, 0x33, 0x38, 0xfd, 0x13, 0x87, 0x20, 0x93, 0x2c, + 0x67, 0xaf, 0x45, 0x85, 0x4b, 0x91, 0x96, 0xdf, 0x6f, 0x92, 0x8d, + 0xac, 0x1b, 0x4a, 0xbd, 0x36, 0x1f, 0xd5, 0x7e, 0xfa, 0x92}, + // privateKeyDigest + {0x08, 0x65, 0xd4, 0x43, 0x64, 0xd5, 0x5c, 0x5e, 0x6b, 0x5b, 0x96, + 0x4a, 0x67, 0x3c, 0x34, 0x63, 0xfb, 0x1c, 0x34, 0x44, 0x1d, 0x3a, + 0x16, 0x33, 0xc2, 0xc3, 0xf4, 0x14, 0x8e, 0xe7, 0xf1, 0x5a}}, + // tcID: 62 + {62, + params_ml_kem1024, + // seed + {0x3a, 0xcf, 0x40, 0xda, 0xde, 0xb7, 0xfd, 0x85, 0x4d, 0x44, 0x5a, + 0xb2, 0x40, 0x2e, 0x81, 0xf6, 0x23, 0x74, 0x02, 0xbf, 0xb0, 0x4e, + 0x7b, 0xbb, 0x72, 0xc9, 0xe8, 0x87, 0x57, 0x2f, 0xb5, 0xba, 0xd2, + 0xf0, 0xa3, 0x88, 0x8a, 0xe7, 0x5b, 0x13, 0xd2, 0xca, 0x4e, 0xdb, + 0xc8, 0x73, 0x85, 0xb4, 0x4f, 0xe3, 0xfd, 0xb7, 0x04, 0x6e, 0xb2, + 0xdd, 0x58, 0xcb, 0xc2, 0x3a, 0xcb, 0xcf, 0x50, 0x9c}, + // publicKeyDigest + {0x18, 0x0a, 0x9d, 0xac, 0x20, 0x73, 0x09, 0x7c, 0x7b, 0xd0, 0xb1, + 0xcd, 0x7e, 0x21, 0x60, 0xac, 0x7c, 0xcc, 0xf9, 0x32, 0x97, 0x14, + 0x69, 0x80, 0x56, 0x1a, 0x53, 0x9b, 0xc8, 0x0c, 0x0a, 0xc1}, + // privateKeyDigest + {0xa5, 0x78, 0x4b, 0xcb, 0x54, 0x4c, 0x94, 0xb0, 0xda, 0x54, 0x89, + 0x11, 0x04, 0x89, 0xff, 0x69, 0x65, 0x67, 0x38, 0xd1, 0x7e, 0xa0, + 0xe5, 0xac, 0xa0, 0x8d, 0x41, 0x1b, 0x07, 0x98, 0x6a, 0x78}}, + // tcID: 63 + {63, + params_ml_kem1024, + // seed + {0x35, 0x82, 0x20, 0x49, 0x02, 0x8f, 0xab, 0x4e, 0x31, 0xa6, 0x09, + 0xe4, 0xe3, 0xa3, 0x9c, 0x9c, 0x32, 0xa6, 0x2e, 0xd6, 0xe7, 0x32, + 0xdf, 0x6f, 0x2c, 0x1b, 0x48, 0xca, 0xd0, 0xae, 0x80, 0x00, 0x60, + 0x8e, 0x79, 0x16, 0x5f, 0x35, 0xc4, 0x18, 0x25, 0x64, 0x3f, 0x76, + 0x8c, 0xe1, 0xe5, 0x1b, 0xb9, 0xb6, 0x0e, 0xca, 0xca, 0x0e, 0x6b, + 0xaf, 0x98, 0x7f, 0x7f, 0xc7, 0xa7, 0xd1, 0xb3, 0x71}, + // publicKeyDigest + {0x73, 0x88, 0xc5, 0x53, 0x95, 0x96, 0x66, 0xbd, 0xf2, 0x3c, 0xb1, + 0x0c, 0xda, 0x4c, 0x37, 0xf9, 0xd9, 0xca, 0xb1, 0x71, 0x0a, 0x7a, + 0x82, 0x02, 0xa7, 0xfe, 0x1b, 0xb4, 0x37, 0x6c, 0xc0, 0x59}, + // privateKeyDigest + {0xa3, 0xed, 0x1c, 0xce, 0x65, 0xe6, 0xec, 0x13, 0x2a, 0x2a, 0x96, + 0x39, 0x53, 0xac, 0x88, 0x17, 0x3c, 0x42, 0x89, 0x4a, 0x66, 0x8f, + 0x31, 0x45, 0xdf, 0x1f, 0x29, 0x70, 0x2d, 0x86, 0xd4, 0x34}}, + // tcID: 64 + {64, + params_ml_kem1024, + // seed + {0xce, 0x21, 0x96, 0x0e, 0x11, 0xba, 0xe7, 0xba, 0x5a, 0x2a, 0xf5, + 0xaa, 0x5a, 0x45, 0x18, 0xf2, 0xc9, 0x7c, 0xdd, 0x41, 0x50, 0x41, + 0x3e, 0xe3, 0x65, 0x1b, 0x91, 0xcf, 0xc8, 0x5d, 0x78, 0x73, 0x3f, + 0x88, 0x03, 0xd5, 0xbe, 0x3f, 0x59, 0xe6, 0x9b, 0x82, 0x21, 0xe7, + 0xcb, 0x8c, 0x9d, 0x15, 0x82, 0x8b, 0x96, 0xb5, 0xb8, 0xcb, 0xb9, + 0xd2, 0xf7, 0x54, 0x4d, 0x6a, 0xa0, 0x83, 0x3c, 0x7b}, + // publicKeyDigest + {0xe2, 0xa3, 0x66, 0xf8, 0xf2, 0x1c, 0xb4, 0xf5, 0xce, 0x24, 0x4c, + 0x18, 0x71, 0x96, 0x31, 0x94, 0x35, 0xf2, 0x89, 0xf7, 0xfe, 0xa6, + 0x10, 0xb1, 0x85, 0x91, 0xf0, 0x02, 0xb9, 0x80, 0xeb, 0x72}, + // privateKeyDigest + {0xe5, 0x80, 0x9b, 0xf8, 0x34, 0x25, 0xdd, 0x43, 0xf1, 0x57, 0x35, + 0xbf, 0x4b, 0x32, 0xba, 0xb3, 0x1c, 0x0a, 0xf1, 0xdd, 0xda, 0x7f, + 0xe6, 0x07, 0xbb, 0x04, 0xd9, 0x9f, 0xfa, 0xbe, 0x4b, 0x18}}, + // tcID: 65 + {65, + params_ml_kem1024, + // seed + {0x83, 0x75, 0x22, 0x82, 0x17, 0xb8, 0xd9, 0x4c, 0xdc, 0xbb, 0x2e, + 0x6e, 0x7e, 0xb6, 0xe1, 0xed, 0x7f, 0xa9, 0xb4, 0xba, 0x7a, 0x7d, + 0xc9, 0x52, 0xe9, 0x70, 0xc4, 0x01, 0x67, 0x5d, 0x49, 0x1b, 0x0e, + 0x28, 0x32, 0xe1, 0x2e, 0x96, 0x42, 0x43, 0x27, 0x93, 0xec, 0xc1, + 0x7d, 0xa1, 0x8d, 0x61, 0x32, 0x36, 0x47, 0xcc, 0x6f, 0x5e, 0x1a, + 0xb6, 0x57, 0x51, 0x18, 0x5a, 0xfc, 0x00, 0xdf, 0xc9}, + // publicKeyDigest + {0x0d, 0xfe, 0xaf, 0x9e, 0xb1, 0xea, 0x5e, 0x88, 0x82, 0x71, 0x99, + 0x18, 0xca, 0xbe, 0x6a, 0xc0, 0xc1, 0x5f, 0xe3, 0x58, 0x7e, 0x3e, + 0x7b, 0xe5, 0x33, 0x92, 0xed, 0xec, 0x5f, 0x7d, 0x95, 0xf0}, + // privateKeyDigest + {0xf8, 0xa9, 0xcf, 0xc6, 0x37, 0x45, 0x68, 0x78, 0x87, 0xbb, 0x8f, + 0x58, 0xd4, 0x67, 0x59, 0xc3, 0x15, 0x2a, 0xb9, 0xae, 0xe0, 0x21, + 0x42, 0xdd, 0x95, 0x7b, 0xf2, 0xdd, 0x23, 0x8f, 0xad, 0x7a}}, + // tcID: 66 + {66, + params_ml_kem1024, + // seed + {0x6f, 0x20, 0x0e, 0x05, 0x37, 0x1a, 0xb5, 0xaa, 0x6c, 0x2d, 0xda, + 0x50, 0x7d, 0x4c, 0x70, 0x39, 0xe7, 0xd6, 0xf4, 0x00, 0x0c, 0xf6, + 0x04, 0xf1, 0xb5, 0x42, 0x1c, 0xac, 0x1c, 0xf4, 0x7d, 0xb6, 0x5b, + 0xda, 0xbb, 0x79, 0xcd, 0xe5, 0xf2, 0xb6, 0xd8, 0x19, 0x44, 0x1e, + 0xc7, 0x99, 0x1b, 0xf4, 0x35, 0x47, 0x39, 0xf8, 0xd1, 0x7d, 0x45, + 0x2a, 0x9a, 0xdc, 0xeb, 0x2a, 0xd0, 0x8d, 0xc3, 0xb0}, + // publicKeyDigest + {0xe8, 0xe0, 0x3c, 0xc3, 0xdc, 0x39, 0x4e, 0x2d, 0x3b, 0x2b, 0xd6, + 0xfe, 0x15, 0xa0, 0x37, 0xb5, 0x08, 0xb2, 0xa3, 0xfb, 0x9d, 0x0f, + 0x18, 0x2f, 0x30, 0x8d, 0xcb, 0x19, 0x2b, 0x50, 0x3f, 0xaf}, + // privateKeyDigest + {0xa4, 0x3f, 0x3a, 0x60, 0xac, 0xb3, 0x18, 0xb2, 0xff, 0x5b, 0xb4, + 0x45, 0x39, 0x42, 0x3b, 0x20, 0x75, 0xfb, 0x14, 0x15, 0x40, 0xae, + 0x9f, 0x85, 0xae, 0xb5, 0x26, 0x1b, 0x46, 0x28, 0x34, 0x7d}}, + // tcID: 67 + {67, + params_ml_kem1024, + // seed + {0x74, 0x90, 0x50, 0x34, 0xd5, 0x3f, 0x69, 0x8b, 0x8c, 0xe1, 0x2d, + 0x78, 0xe4, 0x53, 0xef, 0x68, 0x7a, 0x53, 0x05, 0xf4, 0xf6, 0xae, + 0x5c, 0x6f, 0xe3, 0x33, 0x58, 0xdd, 0x10, 0x38, 0xd4, 0x9d, 0x54, + 0x56, 0xe6, 0x2f, 0x99, 0xc5, 0x94, 0x86, 0xcc, 0x68, 0xa7, 0xee, + 0xa9, 0x19, 0xd3, 0x69, 0x3b, 0xd7, 0x9d, 0xb9, 0xfa, 0x22, 0x84, + 0x5a, 0xc0, 0xe9, 0xf9, 0x6a, 0xc6, 0x36, 0xf3, 0x34}, + // publicKeyDigest + {0x4c, 0x9f, 0xb2, 0x76, 0x63, 0x6d, 0x32, 0xe6, 0xd2, 0xac, 0x2d, + 0x03, 0x46, 0x71, 0xb7, 0x03, 0x84, 0x8a, 0x87, 0xe2, 0xc7, 0x52, + 0xea, 0x69, 0x07, 0x9a, 0x45, 0xc0, 0xeb, 0xf3, 0x70, 0x59}, + // privateKeyDigest + {0xd2, 0x85, 0x33, 0x04, 0xf7, 0x94, 0xdf, 0x7f, 0xe1, 0x7b, 0xe8, + 0xc3, 0x53, 0x80, 0xbd, 0xdd, 0x91, 0x87, 0x86, 0xef, 0x35, 0x58, + 0x93, 0xf5, 0x15, 0x20, 0x81, 0x4d, 0xff, 0x1f, 0x3e, 0x08}}, + // tcID: 68 + {68, + params_ml_kem1024, + // seed + {0xa1, 0x6b, 0xb3, 0xa4, 0x88, 0x42, 0x56, 0x37, 0xa5, 0xb7, 0x35, + 0x67, 0x69, 0x74, 0xee, 0xec, 0xa2, 0x6e, 0xd8, 0x09, 0x03, 0xf5, + 0xcb, 0xac, 0x9e, 0x6d, 0x71, 0x2e, 0x67, 0xee, 0x91, 0x8f, 0x58, + 0x87, 0x97, 0x8a, 0x16, 0x8c, 0xfe, 0x2e, 0xc2, 0x3b, 0xb9, 0x3a, + 0x73, 0x0a, 0xd6, 0xee, 0x4b, 0xdb, 0xd5, 0x33, 0x89, 0xc4, 0xf4, + 0x38, 0xf5, 0xca, 0x31, 0x86, 0x70, 0x19, 0x73, 0x5f}, + // publicKeyDigest + {0x0d, 0xf2, 0x2a, 0x4c, 0xa6, 0x62, 0x65, 0x28, 0x34, 0x40, 0x2f, + 0x87, 0x00, 0x1d, 0xb0, 0x7a, 0x90, 0x0e, 0x88, 0x41, 0xd5, 0xa7, + 0xaf, 0x29, 0x3c, 0x7b, 0x39, 0x01, 0xfc, 0x2b, 0x88, 0xa2}, + // privateKeyDigest + {0x8c, 0x04, 0xbf, 0xb8, 0xec, 0x01, 0x8e, 0xbb, 0xdf, 0xe5, 0x94, + 0x95, 0xd2, 0xdb, 0x49, 0xc3, 0x3b, 0x7b, 0x61, 0x76, 0x03, 0xb9, + 0x08, 0xdc, 0x5f, 0x98, 0x09, 0x01, 0x29, 0xc2, 0x99, 0x1e}}, + // tcID: 69 + {69, + params_ml_kem1024, + // seed + {0xe6, 0x95, 0xd1, 0x12, 0x92, 0x65, 0x67, 0xfe, 0x59, 0xae, 0x67, + 0x0a, 0x44, 0x9e, 0x67, 0x00, 0xf7, 0xfa, 0xda, 0xa8, 0xc7, 0x99, + 0x20, 0xa7, 0xd2, 0x97, 0xc1, 0x1f, 0xb2, 0xcf, 0x91, 0x8f, 0x28, + 0x15, 0xcf, 0x58, 0xba, 0x29, 0xf2, 0x19, 0x97, 0x1b, 0xd4, 0x44, + 0x40, 0x4a, 0x3f, 0xd2, 0x93, 0x09, 0x5a, 0x1b, 0xa1, 0x8d, 0xe7, + 0xb6, 0xed, 0x8b, 0x3c, 0x85, 0x7e, 0xff, 0x19, 0x2d}, + // publicKeyDigest + {0x21, 0x35, 0xf1, 0x5c, 0x68, 0x70, 0x28, 0x3c, 0xef, 0x75, 0xaf, + 0x56, 0xa9, 0x32, 0xd1, 0x3f, 0xe5, 0x92, 0x27, 0xe7, 0x7b, 0x17, + 0x8a, 0x6e, 0x3d, 0xb9, 0x45, 0xfd, 0x0f, 0xb5, 0x74, 0x9e}, + // privateKeyDigest + {0xa3, 0x73, 0x0a, 0x12, 0x8f, 0x26, 0xcc, 0xcf, 0xdd, 0xcc, 0xd0, + 0x3a, 0x72, 0x50, 0x44, 0x2f, 0xab, 0x00, 0x1a, 0x1e, 0x8c, 0x7d, + 0xbd, 0xf6, 0x2e, 0x20, 0x89, 0x1e, 0x63, 0xce, 0x52, 0xcb}}, + // tcID: 70 + {70, + params_ml_kem1024, + // seed + {0xf0, 0x41, 0x0c, 0x49, 0x58, 0xf8, 0x91, 0x56, 0x39, 0x1f, 0x10, + 0xba, 0xd2, 0x90, 0x68, 0x95, 0x20, 0x36, 0xf8, 0x04, 0x50, 0x6c, + 0x99, 0x77, 0xaf, 0x15, 0x8e, 0xcb, 0xde, 0x1b, 0x8f, 0x38, 0x97, + 0x93, 0xbb, 0x2b, 0x4f, 0x48, 0xf1, 0x23, 0xf5, 0x3b, 0xb9, 0x7e, + 0xa7, 0xc5, 0x1e, 0xc6, 0xef, 0x00, 0x3e, 0xa5, 0xe1, 0x95, 0x23, + 0xac, 0x6d, 0x5b, 0x91, 0x4a, 0x1c, 0x87, 0x92, 0xf3}, + // publicKeyDigest + {0x77, 0x11, 0xd5, 0x50, 0xb5, 0x2d, 0xec, 0x8e, 0xdb, 0x2b, 0x8c, + 0xf2, 0x66, 0xc4, 0x7c, 0xb0, 0xda, 0x8b, 0xf2, 0xc5, 0xea, 0xae, + 0x0e, 0xbe, 0x74, 0x6a, 0xce, 0xc9, 0x94, 0x6e, 0x0b, 0x1b}, + // privateKeyDigest + {0x1c, 0xe6, 0xe2, 0x16, 0x41, 0x40, 0xb9, 0x4a, 0xbb, 0x84, 0x6b, + 0xab, 0xf0, 0x5d, 0xfd, 0xd5, 0xa4, 0x99, 0x72, 0xca, 0x9c, 0x6d, + 0x8f, 0x37, 0x54, 0x6d, 0xe8, 0x7c, 0x7e, 0x76, 0xfa, 0x98}}, + // tcID: 71 + {71, + params_ml_kem1024, + // seed + {0x46, 0xfb, 0x51, 0x10, 0x79, 0xdb, 0x83, 0x48, 0x80, 0xd3, 0xcb, + 0x88, 0xd7, 0x82, 0x3c, 0x6c, 0xb3, 0x59, 0xa0, 0xfd, 0x59, 0x98, + 0x80, 0xc7, 0xf8, 0xde, 0x24, 0x4b, 0x36, 0x25, 0x9a, 0xb8, 0x3b, + 0x5e, 0xea, 0x98, 0xe4, 0xda, 0x17, 0x33, 0x1d, 0xb6, 0x9a, 0xe7, + 0xd8, 0x37, 0x1e, 0x5d, 0xc7, 0xe0, 0x2b, 0xf4, 0xfc, 0xad, 0xf9, + 0x31, 0x94, 0x35, 0xea, 0x91, 0x0f, 0xa0, 0xff, 0x1b}, + // publicKeyDigest + {0x4c, 0x7d, 0x85, 0x52, 0xa4, 0x3d, 0x0d, 0x56, 0x9e, 0x74, 0x73, + 0x34, 0xce, 0xed, 0x18, 0x77, 0xda, 0xdd, 0xde, 0xcb, 0x6a, 0xed, + 0x06, 0x07, 0x23, 0xfb, 0xa4, 0xc6, 0x14, 0x2e, 0xd9, 0xb5}, + // privateKeyDigest + {0xa5, 0x19, 0xe8, 0x65, 0xcc, 0xae, 0xd7, 0xc7, 0xe1, 0xfd, 0xa7, + 0xe0, 0x58, 0x36, 0x35, 0x32, 0xe2, 0xcf, 0xe3, 0x42, 0x11, 0x10, + 0x54, 0x00, 0x2d, 0xbe, 0x22, 0xcd, 0x8c, 0xad, 0x32, 0xbc}}, + // tcID: 72 + {72, + params_ml_kem1024, + // seed + {0x28, 0xd7, 0xda, 0xe6, 0xe1, 0xa1, 0x56, 0x68, 0xa6, 0x1a, 0x2a, + 0xd4, 0x9d, 0x1e, 0xa0, 0x71, 0xac, 0xad, 0x73, 0x26, 0x06, 0xda, + 0x5b, 0x36, 0xce, 0x7b, 0x63, 0x8c, 0x9a, 0x5f, 0xdc, 0x6d, 0xc8, + 0x66, 0xd2, 0x6c, 0x3e, 0xbc, 0xfb, 0x89, 0xae, 0x9f, 0x89, 0xbd, + 0x2c, 0x48, 0xdc, 0x7e, 0xc6, 0xd9, 0x6f, 0x12, 0x05, 0x75, 0x01, + 0xfb, 0x44, 0x19, 0xa3, 0xdc, 0x2a, 0x05, 0x07, 0x30}, + // publicKeyDigest + {0x18, 0xdd, 0x4c, 0x48, 0x49, 0x8d, 0xc0, 0x9b, 0x2c, 0xe9, 0x5d, + 0x95, 0x6d, 0xda, 0x72, 0x4a, 0xd4, 0x4c, 0xf0, 0x93, 0x96, 0xd0, + 0xf2, 0x6d, 0x99, 0xee, 0x2d, 0xc3, 0xe2, 0xe1, 0xbc, 0x7e}, + // privateKeyDigest + {0x91, 0x76, 0xd9, 0xf2, 0xd7, 0x2d, 0xe2, 0x99, 0x14, 0xcd, 0x11, + 0xe2, 0x10, 0x9a, 0x4c, 0x7e, 0x7b, 0x88, 0x1b, 0x56, 0xd8, 0x4d, + 0x3e, 0x05, 0x2c, 0x8c, 0x3f, 0x66, 0xb8, 0x12, 0x1e, 0x10}}, + // tcID: 73 + {73, + params_ml_kem1024, + // seed + {0x02, 0xa3, 0xdb, 0x08, 0x15, 0xdb, 0x51, 0x86, 0x78, 0xed, 0xc6, + 0xee, 0xe3, 0xad, 0x57, 0x0d, 0x3b, 0x31, 0x19, 0x74, 0x34, 0x16, + 0x3e, 0xf0, 0x1c, 0xe9, 0xf1, 0x2a, 0x31, 0x1f, 0xb3, 0xa3, 0x94, + 0x86, 0xa2, 0xbf, 0x28, 0x21, 0x82, 0x89, 0x41, 0x2e, 0x2a, 0x6a, + 0x2a, 0xea, 0x61, 0xab, 0x58, 0xd3, 0xfd, 0xd0, 0xd9, 0x0d, 0xd2, + 0xa4, 0x63, 0x03, 0x29, 0x98, 0x64, 0x93, 0xb5, 0xa2}, + // publicKeyDigest + {0x08, 0x2c, 0x49, 0x58, 0xf0, 0x6d, 0xeb, 0x19, 0xcf, 0xae, 0x2a, + 0x64, 0x67, 0xad, 0x06, 0x7d, 0x07, 0x0f, 0x6e, 0xb3, 0xa5, 0xda, + 0x7a, 0x7f, 0xb9, 0xf9, 0x9b, 0x72, 0x95, 0x75, 0x8b, 0xf8}, + // privateKeyDigest + {0xaf, 0x32, 0x41, 0xa2, 0xab, 0x8e, 0x4c, 0xf5, 0x58, 0x4f, 0x4f, + 0xbf, 0x43, 0xcd, 0x11, 0xed, 0x3b, 0x94, 0xde, 0x65, 0x28, 0xd1, + 0x60, 0x8d, 0xad, 0x9a, 0x0f, 0x9c, 0x2a, 0x8c, 0xf4, 0x6b}}, + // tcID: 74 + {74, + params_ml_kem1024, + // seed + {0xfd, 0x95, 0x09, 0x96, 0x5f, 0x28, 0xd5, 0x49, 0x34, 0x35, 0x7d, + 0x48, 0xaa, 0x3a, 0x6c, 0xc1, 0x98, 0xcc, 0xc7, 0xff, 0xf7, 0x69, + 0xa4, 0x0a, 0x8c, 0x4d, 0xf0, 0xfd, 0xc1, 0x15, 0x60, 0x4b, 0x4d, + 0x65, 0x3f, 0xcd, 0xd5, 0x5d, 0x3d, 0x5f, 0x2e, 0x3c, 0x6b, 0x30, + 0xf4, 0x51, 0xb3, 0xdc, 0x57, 0x57, 0x4c, 0x84, 0x3e, 0xd8, 0xb0, + 0x3d, 0x63, 0xde, 0xf4, 0x9c, 0x88, 0x04, 0x86, 0x9f}, + // publicKeyDigest + {0x58, 0xef, 0x79, 0x96, 0x42, 0xd8, 0x1d, 0x14, 0x84, 0xe4, 0x48, + 0x72, 0x8d, 0xd3, 0x47, 0xb7, 0xbf, 0x16, 0xc8, 0xb8, 0xd8, 0xa5, + 0x21, 0xf9, 0x14, 0x21, 0x51, 0x8b, 0x17, 0xe0, 0x33, 0xa4}, + // privateKeyDigest + {0xf9, 0x8a, 0x31, 0x26, 0x5b, 0x3d, 0x55, 0x61, 0x7d, 0x32, 0x66, + 0x27, 0xe0, 0xc0, 0x17, 0x36, 0x7c, 0xb7, 0x18, 0xf9, 0xfb, 0x18, + 0x6a, 0x83, 0x81, 0x2a, 0x27, 0xa2, 0x55, 0x6e, 0x14, 0x46}}, + // tcID: 75 + {75, + params_ml_kem1024, + // seed + {0x4c, 0xa2, 0xe9, 0x99, 0x41, 0xa6, 0x81, 0x20, 0xce, 0xc5, 0x7e, + 0x52, 0x21, 0x9e, 0xcd, 0xa0, 0x6c, 0xec, 0x3a, 0xe0, 0xa4, 0xc9, + 0x58, 0x45, 0x74, 0xfd, 0x20, 0x4e, 0x06, 0xc0, 0x7c, 0x57, 0x6b, + 0x65, 0xbc, 0x95, 0x39, 0x88, 0xe1, 0x6f, 0x28, 0xdd, 0xc1, 0x2a, + 0xc3, 0xb9, 0x27, 0xba, 0x2b, 0xf1, 0xea, 0x4c, 0xe5, 0x2f, 0x16, + 0x09, 0x37, 0x23, 0x21, 0x23, 0x16, 0xa9, 0xfe, 0x8f}, + // publicKeyDigest + {0x18, 0x4a, 0x9f, 0x14, 0xdf, 0x0e, 0xe3, 0xe4, 0x7f, 0x1f, 0xd4, + 0xde, 0xb9, 0x5e, 0x1e, 0xde, 0xf1, 0xdd, 0x69, 0x81, 0x9e, 0xbc, + 0x81, 0x9c, 0x8a, 0xce, 0x92, 0xc3, 0x51, 0x85, 0xaa, 0xd6}, + // privateKeyDigest + {0x84, 0xa0, 0xa8, 0x7d, 0xd9, 0xdb, 0xff, 0xfd, 0x62, 0x81, 0x19, + 0x3c, 0xb9, 0x55, 0x6c, 0x64, 0x5d, 0xee, 0xe3, 0xcb, 0x63, 0x50, + 0x85, 0xd0, 0xf7, 0x14, 0x56, 0x08, 0x30, 0xb8, 0x9d, 0xf7}}}; + +#endif // mlkem_keygen_vectors_h__ diff --git a/security/nss/gtests/common/testvectors_base/test-structs.h b/security/nss/gtests/common/testvectors_base/test-structs.h @@ -14,6 +14,7 @@ #include <vector> #include "secoidt.h" #include "pkcs11t.h" +#include "kyber.h" typedef struct AesCbcTestVectorStr { uint32_t id; @@ -58,6 +59,33 @@ typedef struct ChaChaTestVectorStr { bool invalid_iv; } ChaChaTestVector; +typedef struct MlKemKeyGenTestVectorStr { + uint32_t id; + KyberParams params; + std::vector<uint8_t> seed; + std::vector<uint8_t> publicKeyDigest; + std::vector<uint8_t> privateKeyDigest; +} MlKemKeyGenTestVector; + +typedef struct MlKemEncapTestVectorStr { + uint32_t id; + KyberParams params; + std::vector<uint8_t> entropy; + std::vector<uint8_t> publicKey; + std::vector<uint8_t> cipherTextDigest; + std::vector<uint8_t> secret; + bool expectedResult; +} MlKemEncapTestVector; + +typedef struct MlKemDecapTestVectorStr { + uint32_t id; + KyberParams params; + std::vector<uint8_t> privateKey; + std::vector<uint8_t> cipherText; + std::vector<uint8_t> secret; + bool expectedResult; +} MlKemDecapTestVector; + typedef struct EcdsaTestVectorStr { SECOidTag hash_oid; uint32_t id; diff --git a/security/nss/gtests/freebl_gtest/kyber_unittest.cc b/security/nss/gtests/freebl_gtest/kyber_unittest.cc @@ -7,12 +7,70 @@ #include "blapi.h" #include "nss_scoped_ptrs.h" #include "kat/kyber768_kat.h" -#include "kat/mlkem768_keygen.h" -#include "kat/mlkem768_encap.h" -#include "kat/mlkem768_decap.h" +#include "testvectors_base/test-structs.h" +#include "testvectors/ml-kem-keygen-vectors.h" +#include "testvectors/ml-kem-encap-vectors.h" +#include "testvectors/ml-kem-decap-vectors.h" namespace nss_test { +size_t get_ciphertext_length(KyberParams param) { + size_t len = 0; + switch (param) { + case params_kyber768_round3: + case params_kyber768_round3_test_mode: + case params_ml_kem768: + case params_ml_kem768_test_mode: + len = KYBER768_CIPHERTEXT_BYTES; + break; + case params_ml_kem1024: + case params_ml_kem1024_test_mode: + len = MLKEM1024_CIPHERTEXT_BYTES; + break; + case params_kyber_invalid: + break; + } + return len; +} + +size_t get_private_key_length(KyberParams param) { + size_t len = 0; + switch (param) { + case params_kyber768_round3: + case params_kyber768_round3_test_mode: + case params_ml_kem768: + case params_ml_kem768_test_mode: + len = KYBER768_PRIVATE_KEY_BYTES; + break; + case params_ml_kem1024: + case params_ml_kem1024_test_mode: + len = MLKEM1024_PRIVATE_KEY_BYTES; + break; + case params_kyber_invalid: + break; + } + return len; +} + +size_t get_public_key_length(KyberParams param) { + size_t len = 0; + switch (param) { + case params_kyber768_round3: + case params_kyber768_round3_test_mode: + case params_ml_kem768: + case params_ml_kem768_test_mode: + len = KYBER768_PUBLIC_KEY_BYTES; + break; + case params_ml_kem1024: + case params_ml_kem1024_test_mode: + len = MLKEM1024_PUBLIC_KEY_BYTES; + break; + case params_kyber_invalid: + break; + } + return len; +} + class KyberTest : public ::testing::Test {}; class KyberSelfTest : public KyberTest, @@ -22,20 +80,25 @@ TEST_P(KyberSelfTest, ConsistencyTest) { const KyberParams& param(GetParam()); ScopedSECItem privateKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PRIVATE_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PRIVATE_KEY_LENGTH)); ScopedSECItem publicKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PUBLIC_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PUBLIC_KEY_LENGTH)); ScopedSECItem ciphertext( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_CIPHERTEXT_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_CIPHER_LENGTH)); ScopedSECItem secret( SECITEM_AllocItem(nullptr, nullptr, KYBER_SHARED_SECRET_BYTES)); ScopedSECItem secret2( SECITEM_AllocItem(nullptr, nullptr, KYBER_SHARED_SECRET_BYTES)); + privateKey->len = get_private_key_length(param); + publicKey->len = get_public_key_length(param); + SECStatus rv = Kyber_NewKey(param, nullptr, privateKey.get(), publicKey.get()); EXPECT_EQ(SECSuccess, rv); + ciphertext->len = get_ciphertext_length(param); + rv = Kyber_Encapsulate(param, nullptr, publicKey.get(), ciphertext.get(), secret.get()); EXPECT_EQ(SECSuccess, rv); @@ -53,14 +116,17 @@ TEST_P(KyberSelfTest, InvalidParameterTest) { const KyberParams& param(GetParam()); ScopedSECItem privateKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PRIVATE_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PRIVATE_KEY_LENGTH)); ScopedSECItem publicKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PUBLIC_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PUBLIC_KEY_LENGTH)); ScopedSECItem ciphertext( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_CIPHERTEXT_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_CIPHER_LENGTH)); ScopedSECItem secret( SECITEM_AllocItem(nullptr, nullptr, KYBER_SHARED_SECRET_BYTES)); + privateKey->len = get_private_key_length(param); + publicKey->len = get_public_key_length(param); + SECStatus rv = Kyber_NewKey(params_kyber_invalid, nullptr, privateKey.get(), publicKey.get()); EXPECT_EQ(SECFailure, rv); @@ -68,6 +134,8 @@ TEST_P(KyberSelfTest, InvalidParameterTest) { rv = Kyber_NewKey(param, nullptr, privateKey.get(), publicKey.get()); EXPECT_EQ(SECSuccess, rv); + ciphertext->len = get_ciphertext_length(param); + rv = Kyber_Encapsulate(params_kyber_invalid, nullptr, publicKey.get(), ciphertext.get(), secret.get()); EXPECT_EQ(SECFailure, rv); @@ -90,7 +158,9 @@ TEST_P(KyberSelfTest, InvalidPublicKeyTest) { ScopedSECItem shortBuffer(SECITEM_AllocItem(nullptr, nullptr, 7)); ScopedSECItem privateKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PRIVATE_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PRIVATE_KEY_LENGTH)); + + privateKey->len = get_private_key_length(param); SECStatus rv = Kyber_NewKey(param, nullptr, privateKey.get(), shortBuffer.get()); @@ -102,20 +172,25 @@ TEST_P(KyberSelfTest, InvalidCiphertextTest) { ScopedSECItem shortBuffer(SECITEM_AllocItem(nullptr, nullptr, 7)); ScopedSECItem privateKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PRIVATE_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PRIVATE_KEY_LENGTH)); ScopedSECItem publicKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PUBLIC_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PUBLIC_KEY_LENGTH)); ScopedSECItem ciphertext( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_CIPHERTEXT_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_CIPHER_LENGTH)); ScopedSECItem secret( SECITEM_AllocItem(nullptr, nullptr, KYBER_SHARED_SECRET_BYTES)); ScopedSECItem secret2( SECITEM_AllocItem(nullptr, nullptr, KYBER_SHARED_SECRET_BYTES)); + privateKey->len = get_private_key_length(param); + publicKey->len = get_public_key_length(param); + SECStatus rv = Kyber_NewKey(param, nullptr, privateKey.get(), publicKey.get()); EXPECT_EQ(SECSuccess, rv); + ciphertext->len = get_ciphertext_length(param); + rv = Kyber_Encapsulate(param, nullptr, publicKey.get(), shortBuffer.get(), secret.get()); EXPECT_EQ(SECFailure, rv); // short ciphertext input @@ -133,8 +208,9 @@ TEST_P(KyberSelfTest, InvalidCiphertextTest) { rv = RNG_GenerateGlobalRandomBytes((uint8_t*)&byte, sizeof(byte)); EXPECT_EQ(SECSuccess, rv); - EXPECT_EQ(ciphertext->len, KYBER768_CIPHERTEXT_BYTES); - ciphertext->data[pos % KYBER768_CIPHERTEXT_BYTES] ^= (byte | 1); + size_t ct_len = get_ciphertext_length(param); + EXPECT_EQ(ciphertext->len, ct_len); + ciphertext->data[pos % ct_len] ^= (byte | 1); rv = Kyber_Decapsulate(param, privateKey.get(), ciphertext.get(), secret2.get()); @@ -150,16 +226,19 @@ TEST_P(KyberSelfTest, InvalidPrivateKeyTest) { ScopedSECItem shortBuffer(SECITEM_AllocItem(nullptr, nullptr, 7)); ScopedSECItem privateKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PRIVATE_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PRIVATE_KEY_LENGTH)); ScopedSECItem publicKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PUBLIC_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PUBLIC_KEY_LENGTH)); ScopedSECItem ciphertext( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_CIPHERTEXT_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_CIPHER_LENGTH)); ScopedSECItem secret( SECITEM_AllocItem(nullptr, nullptr, KYBER_SHARED_SECRET_BYTES)); ScopedSECItem secret2( SECITEM_AllocItem(nullptr, nullptr, KYBER_SHARED_SECRET_BYTES)); + privateKey->len = get_private_key_length(param); + publicKey->len = get_public_key_length(param); + SECStatus rv = Kyber_NewKey(param, nullptr, shortBuffer.get(), publicKey.get()); EXPECT_EQ(SECFailure, rv); // short privateKey buffer @@ -167,6 +246,8 @@ TEST_P(KyberSelfTest, InvalidPrivateKeyTest) { rv = Kyber_NewKey(param, nullptr, privateKey.get(), publicKey.get()); EXPECT_EQ(SECSuccess, rv); + ciphertext->len = get_ciphertext_length(param); + rv = Kyber_Encapsulate(param, nullptr, publicKey.get(), ciphertext.get(), secret.get()); EXPECT_EQ(SECSuccess, rv); @@ -181,9 +262,10 @@ TEST_P(KyberSelfTest, InvalidPrivateKeyTest) { EXPECT_EQ(SECSuccess, rv); // Modifying the implicit rejection key will not cause decapsulation failure. - EXPECT_EQ(privateKey->len, KYBER768_PRIVATE_KEY_BYTES); - size_t ir_pos = - KYBER768_PRIVATE_KEY_BYTES - (pos % KYBER_SHARED_SECRET_BYTES) - 1; + size_t pvk_len = get_private_key_length(param); + size_t puk_len = get_public_key_length(param); + EXPECT_EQ(privateKey->len, pvk_len); + size_t ir_pos = pvk_len - (pos % KYBER_SHARED_SECRET_BYTES) - 1; uint8_t ir_pos_old = privateKey->data[ir_pos]; privateKey->data[ir_pos] ^= (byte | 1); @@ -200,17 +282,16 @@ TEST_P(KyberSelfTest, InvalidPrivateKeyTest) { // For ML-KEM when modifying the public key, the key must be rejected. // Kyber will decapsulate without an error in these cases - size_t pk_pos = KYBER768_PRIVATE_KEY_BYTES - 2 * KYBER_SHARED_SECRET_BYTES - - (pos % KYBER768_PUBLIC_KEY_BYTES) - 1; + size_t pk_pos = pvk_len - 2 * KYBER_SHARED_SECRET_BYTES - (pos % puk_len) - 1; uint8_t pk_pos_old = privateKey->data[pk_pos]; privateKey->data[pk_pos] ^= (byte | 1); rv = Kyber_Decapsulate(param, privateKey.get(), ciphertext.get(), secret2.get()); - if (param == params_ml_kem768) { - EXPECT_EQ(SECFailure, rv); - } else { + if (param == params_kyber768_round3) { EXPECT_EQ(SECSuccess, rv); + } else { + EXPECT_EQ(SECFailure, rv); } // Fix the key again. @@ -218,16 +299,16 @@ TEST_P(KyberSelfTest, InvalidPrivateKeyTest) { // For ML-KEM when modifying the public key hash, the key must be rejected. // Kyber will decapsulate without an error in these cases - size_t pk_hash_pos = KYBER768_PRIVATE_KEY_BYTES - KYBER_SHARED_SECRET_BYTES - + size_t pk_hash_pos = pvk_len - KYBER_SHARED_SECRET_BYTES - (pos % KYBER_SHARED_SECRET_BYTES) - 1; privateKey->data[pk_hash_pos] ^= (byte | 1); rv = Kyber_Decapsulate(param, privateKey.get(), ciphertext.get(), secret2.get()); - if (param == params_ml_kem768) { - EXPECT_EQ(SECFailure, rv); - } else { + if (param == params_kyber768_round3) { EXPECT_EQ(SECSuccess, rv); + } else { + EXPECT_EQ(SECFailure, rv); } } @@ -235,11 +316,11 @@ TEST_P(KyberSelfTest, DecapsulationWithModifiedRejectionKeyTest) { const KyberParams& param(GetParam()); ScopedSECItem privateKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PRIVATE_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PRIVATE_KEY_LENGTH)); ScopedSECItem publicKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PUBLIC_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PUBLIC_KEY_LENGTH)); ScopedSECItem ciphertext( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_CIPHERTEXT_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_CIPHER_LENGTH)); ScopedSECItem secret( SECITEM_AllocItem(nullptr, nullptr, KYBER_SHARED_SECRET_BYTES)); ScopedSECItem secret2( @@ -247,10 +328,15 @@ TEST_P(KyberSelfTest, DecapsulationWithModifiedRejectionKeyTest) { ScopedSECItem secret3( SECITEM_AllocItem(nullptr, nullptr, KYBER_SHARED_SECRET_BYTES)); + privateKey->len = get_private_key_length(param); + publicKey->len = get_public_key_length(param); + SECStatus rv = Kyber_NewKey(param, nullptr, privateKey.get(), publicKey.get()); EXPECT_EQ(SECSuccess, rv); + ciphertext->len = get_ciphertext_length(param); + rv = Kyber_Encapsulate(param, nullptr, publicKey.get(), ciphertext.get(), secret.get()); EXPECT_EQ(SECSuccess, rv); @@ -264,8 +350,9 @@ TEST_P(KyberSelfTest, DecapsulationWithModifiedRejectionKeyTest) { rv = RNG_GenerateGlobalRandomBytes((uint8_t*)&byte, sizeof(byte)); EXPECT_EQ(SECSuccess, rv); - EXPECT_EQ(ciphertext->len, KYBER768_CIPHERTEXT_BYTES); - ciphertext->data[pos % KYBER768_CIPHERTEXT_BYTES] ^= (byte | 1); + size_t ct_len = get_ciphertext_length(param); + EXPECT_EQ(ciphertext->len, ct_len); + ciphertext->data[pos % ct_len] ^= (byte | 1); rv = Kyber_Decapsulate(param, privateKey.get(), ciphertext.get(), secret2.get()); @@ -279,9 +366,10 @@ TEST_P(KyberSelfTest, DecapsulationWithModifiedRejectionKeyTest) { rv = RNG_GenerateGlobalRandomBytes((uint8_t*)&byte, sizeof(byte)); EXPECT_EQ(SECSuccess, rv); - pos = (KYBER768_PRIVATE_KEY_BYTES - KYBER_SHARED_SECRET_BYTES) + - (pos % KYBER_SHARED_SECRET_BYTES); - EXPECT_EQ(privateKey->len, KYBER768_PRIVATE_KEY_BYTES); + size_t pvk_len = get_private_key_length(param); + pos = + (pvk_len - KYBER_SHARED_SECRET_BYTES) + (pos % KYBER_SHARED_SECRET_BYTES); + EXPECT_EQ(privateKey->len, pvk_len); privateKey->data[pos] ^= (byte | 1); rv = Kyber_Decapsulate(param, privateKey.get(), ciphertext.get(), @@ -293,17 +381,23 @@ TEST_P(KyberSelfTest, DecapsulationWithModifiedRejectionKeyTest) { EXPECT_NE(0, memcmp(secret2->data, secret3->data, KYBER_SHARED_SECRET_BYTES)); } +#ifdef NSS_DISABLE_KYBER INSTANTIATE_TEST_SUITE_P(SelfTests, KyberSelfTest, ::testing::Values(params_ml_kem768, + params_ml_kem1024)); +#else +INSTANTIATE_TEST_SUITE_P(SelfTests, KyberSelfTest, + ::testing::Values(params_ml_kem768, params_ml_kem1024, params_kyber768_round3)); +#endif TEST(Kyber768Test, KnownAnswersTest) { ScopedSECItem privateKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PRIVATE_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PRIVATE_KEY_LENGTH)); ScopedSECItem publicKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PUBLIC_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PUBLIC_KEY_LENGTH)); ScopedSECItem ciphertext( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_CIPHERTEXT_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_CIPHER_LENGTH)); ScopedSECItem secret( SECITEM_AllocItem(nullptr, nullptr, KYBER_SHARED_SECRET_BYTES)); ScopedSECItem secret2( @@ -318,6 +412,10 @@ TEST(Kyber768Test, KnownAnswersTest) { SECItem enc_seed = {siBuffer, (unsigned char*)kat.encapsSeed, sizeof kat.encapsSeed}; + privateKey->len = get_private_key_length(kat.params); + publicKey->len = get_public_key_length(kat.params); + ciphertext->len = get_ciphertext_length(kat.params); + rv = Kyber_NewKey(kat.params, &keypair_seed, privateKey.get(), publicKey.get()); EXPECT_EQ(SECSuccess, rv); @@ -346,17 +444,20 @@ TEST(Kyber768Test, KnownAnswersTest) { } } -TEST(MlKem768KeyGen, KnownAnswersTest) { +TEST(MlKemKeyGen, KnownAnswersTest) { ScopedSECItem privateKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PRIVATE_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PRIVATE_KEY_LENGTH)); ScopedSECItem publicKey( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_PUBLIC_KEY_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_PUBLIC_KEY_LENGTH)); uint8_t digest[SHA3_256_LENGTH]; - for (const auto& kat : MlKem768KeyGenTests) { - SECItem keypair_seed = {siBuffer, (unsigned char*)kat.seed, - sizeof kat.seed}; + for (const auto& kat : MlKemKeyGenTests) { + SECItem keypair_seed = {siBuffer, (unsigned char*)kat.seed.data(), + (unsigned int)kat.seed.size()}; + + privateKey->len = get_private_key_length(kat.params); + publicKey->len = get_public_key_length(kat.params); SECStatus rv = Kyber_NewKey(kat.params, &keypair_seed, privateKey.get(), publicKey.get()); @@ -364,26 +465,31 @@ TEST(MlKem768KeyGen, KnownAnswersTest) { rv = SHA3_256_HashBuf(digest, privateKey->data, privateKey->len); EXPECT_EQ(SECSuccess, rv); - EXPECT_EQ(0, memcmp(kat.privateKeyDigest, digest, sizeof(digest))); + EXPECT_EQ(kat.privateKeyDigest.size(), sizeof(digest)); + EXPECT_EQ(0, memcmp(kat.privateKeyDigest.data(), digest, sizeof(digest))); rv = SHA3_256_HashBuf(digest, publicKey->data, publicKey->len); EXPECT_EQ(SECSuccess, rv); - EXPECT_EQ(0, memcmp(kat.publicKeyDigest, digest, sizeof(digest))); + EXPECT_EQ(kat.publicKeyDigest.size(), sizeof(digest)); + EXPECT_EQ(0, memcmp(kat.publicKeyDigest.data(), digest, sizeof(digest))); } } -TEST(MlKem768Encap, KnownAnswersTest) { +TEST(MlKemEncap, KnownAnswersTest) { ScopedSECItem ciphertext( - SECITEM_AllocItem(nullptr, nullptr, KYBER768_CIPHERTEXT_BYTES)); + SECITEM_AllocItem(nullptr, nullptr, MAX_ML_KEM_CIPHER_LENGTH)); ScopedSECItem secret( SECITEM_AllocItem(nullptr, nullptr, KYBER_SHARED_SECRET_BYTES)); uint8_t digest[SHA3_256_LENGTH]; - for (const auto& kat : MlKem768EncapTests) { - SECItem seed = {siBuffer, (unsigned char*)kat.entropy, sizeof kat.entropy}; - SECItem publicKey = {siBuffer, (unsigned char*)kat.publicKey, - sizeof kat.publicKey}; + for (const auto& kat : MlKemEncapTests) { + SECItem seed = {siBuffer, (unsigned char*)kat.entropy.data(), + (unsigned int)kat.entropy.size()}; + SECItem publicKey = {siBuffer, (unsigned char*)kat.publicKey.data(), + (unsigned int)kat.publicKey.size()}; + + ciphertext->len = get_ciphertext_length(kat.params); // Only valid tests for now EXPECT_TRUE(kat.expectedResult); @@ -394,21 +500,23 @@ TEST(MlKem768Encap, KnownAnswersTest) { rv = SHA3_256_HashBuf(digest, ciphertext->data, ciphertext->len); EXPECT_EQ(SECSuccess, rv); - EXPECT_EQ(0, memcmp(kat.ciphertextDigest, digest, sizeof(digest))); + EXPECT_EQ(kat.cipherTextDigest.size(), sizeof(digest)); + EXPECT_EQ(0, memcmp(kat.cipherTextDigest.data(), digest, sizeof(digest))); - EXPECT_EQ(0, memcmp(kat.secret, secret->data, secret->len)); + EXPECT_EQ(kat.secret.size(), secret->len); + EXPECT_EQ(0, memcmp(kat.secret.data(), secret->data, secret->len)); } } -TEST(MlKem768Decap, KnownAnswersTest) { +TEST(MlKemDecap, KnownAnswersTest) { ScopedSECItem secret( SECITEM_AllocItem(nullptr, nullptr, KYBER_SHARED_SECRET_BYTES)); - SECItem privateKey = {siBuffer, (unsigned char*)MlKem768DecapPrivateKey, - sizeof MlKem768DecapPrivateKey}; - for (const auto& kat : MlKem768DecapTests) { - SECItem ciphertext = {siBuffer, (unsigned char*)kat.ciphertext, - sizeof kat.ciphertext}; + for (const auto& kat : MlKemDecapTests) { + SECItem ciphertext = {siBuffer, (unsigned char*)kat.cipherText.data(), + (unsigned int)kat.cipherText.size()}; + SECItem privateKey = {siBuffer, (unsigned char*)kat.privateKey.data(), + (unsigned int)kat.privateKey.size()}; // Only valid tests for now EXPECT_TRUE(kat.expectedResult); @@ -417,7 +525,8 @@ TEST(MlKem768Decap, KnownAnswersTest) { Kyber_Decapsulate(kat.params, &privateKey, &ciphertext, secret.get()); EXPECT_EQ(SECSuccess, rv); EXPECT_EQ(secret->len, KYBER_SHARED_SECRET_BYTES); - EXPECT_EQ(0, memcmp(secret->data, kat.secret, KYBER_SHARED_SECRET_BYTES)); + EXPECT_EQ( + 0, memcmp(secret->data, kat.secret.data(), KYBER_SHARED_SECRET_BYTES)); } } diff --git a/security/nss/gtests/freebl_gtest/manifest.mn b/security/nss/gtests/freebl_gtest/manifest.mn @@ -10,12 +10,12 @@ MODULE = nss # in before we include these tests: # mpi_unittest.cc # ghash_unittest.cc -# kyber_unittest.cc CPPSRCS = \ dh_unittest.cc \ ecl_unittest.cc \ rsa_unittest.cc \ cmac_unittests.cc \ + kyber_unittest.cc \ $(NULL) DEFINES += -DDLL_PREFIX=\"$(DLL_PREFIX)\" -DDLL_SUFFIX=\"$(DLL_SUFFIX)\" diff --git a/security/nss/lib/ckfw/builtins/certdata.txt b/security/nss/lib/ckfw/builtins/certdata.txt @@ -23197,557 +23197,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "CommScope Public Trust ECC Root-01" -# -# Issuer: CN=CommScope Public Trust ECC Root-01,O=CommScope,C=US -# Serial Number:43:70:82:77:cf:4d:5d:34:f1:ca:ae:32:2f:37:f7:f4:7f:75:a0:9e -# Subject: CN=CommScope Public Trust ECC Root-01,O=CommScope,C=US -# Not Valid Before: Wed Apr 28 17:35:43 2021 -# Not Valid After : Sat Apr 28 17:35:42 2046 -# Fingerprint (SHA-256): 11:43:7C:DA:7B:B4:5E:41:36:5F:45:B3:9A:38:98:6B:0D:E0:0D:EF:34:8E:0C:7B:B0:87:36:33:80:0B:C3:8B -# Fingerprint (SHA1): 07:86:C0:D8:DD:8E:C0:80:98:06:98:D0:58:7A:EF:DE:A6:CC:A2:5D -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "CommScope Public Trust ECC Root-01" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\022\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143 -\157\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157 -\155\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124 -\162\165\163\164\040\105\103\103\040\122\157\157\164\055\060\061 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\022\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143 -\157\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157 -\155\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124 -\162\165\163\164\040\105\103\103\040\122\157\157\164\055\060\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\103\160\202\167\317\115\135\064\361\312\256\062\057\067 -\367\364\177\165\240\236 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\002\035\060\202\001\243\240\003\002\001\002\002\024\103 -\160\202\167\317\115\135\064\361\312\256\062\057\067\367\364\177 -\165\240\236\060\012\006\010\052\206\110\316\075\004\003\003\060 -\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061\022 -\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143\157 -\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157\155 -\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124\162 -\165\163\164\040\105\103\103\040\122\157\157\164\055\060\061\060 -\036\027\015\062\061\060\064\062\070\061\067\063\065\064\063\132 -\027\015\064\066\060\064\062\070\061\067\063\065\064\062\132\060 -\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061\022 -\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143\157 -\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157\155 -\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124\162 -\165\163\164\040\105\103\103\040\122\157\157\164\055\060\061\060 -\166\060\020\006\007\052\206\110\316\075\002\001\006\005\053\201 -\004\000\042\003\142\000\004\113\066\351\256\127\136\250\160\327 -\320\217\164\142\167\303\136\172\252\345\266\242\361\170\375\002 -\176\127\335\221\171\234\154\271\122\210\124\274\057\004\276\270 -\315\366\020\321\051\354\265\320\240\303\360\211\160\031\273\121 -\145\305\103\234\303\233\143\235\040\203\076\006\013\246\102\104 -\205\021\247\112\072\055\351\326\150\057\110\116\123\053\007\077 -\115\275\271\254\167\071\127\243\102\060\100\060\017\006\003\125 -\035\023\001\001\377\004\005\060\003\001\001\377\060\016\006\003 -\125\035\017\001\001\377\004\004\003\002\001\006\060\035\006\003 -\125\035\016\004\026\004\024\216\007\142\300\120\335\306\031\006 -\000\106\164\004\367\363\256\175\165\115\060\060\012\006\010\052 -\206\110\316\075\004\003\003\003\150\000\060\145\002\061\000\234 -\063\337\101\343\043\250\102\066\046\227\065\134\173\353\333\113 -\370\252\213\163\125\025\134\254\170\051\017\272\041\330\304\240 -\330\321\003\335\155\321\071\075\304\223\140\322\343\162\262\002 -\060\174\305\176\210\323\120\365\036\045\350\372\116\165\346\130 -\226\244\065\137\033\145\352\141\232\160\043\265\015\243\233\222 -\122\157\151\240\214\215\112\320\356\213\016\313\107\216\320\215 -\021 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "CommScope Public Trust ECC Root-01" -# Issuer: CN=CommScope Public Trust ECC Root-01,O=CommScope,C=US -# Serial Number:43:70:82:77:cf:4d:5d:34:f1:ca:ae:32:2f:37:f7:f4:7f:75:a0:9e -# Subject: CN=CommScope Public Trust ECC Root-01,O=CommScope,C=US -# Not Valid Before: Wed Apr 28 17:35:43 2021 -# Not Valid After : Sat Apr 28 17:35:42 2046 -# Fingerprint (SHA-256): 11:43:7C:DA:7B:B4:5E:41:36:5F:45:B3:9A:38:98:6B:0D:E0:0D:EF:34:8E:0C:7B:B0:87:36:33:80:0B:C3:8B -# Fingerprint (SHA1): 07:86:C0:D8:DD:8E:C0:80:98:06:98:D0:58:7A:EF:DE:A6:CC:A2:5D -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "CommScope Public Trust ECC Root-01" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\007\206\300\330\335\216\300\200\230\006\230\320\130\172\357\336 -\246\314\242\135 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\072\100\247\374\003\214\234\070\171\057\072\242\154\266\012\026 -END -CKA_ISSUER MULTILINE_OCTAL -\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\022\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143 -\157\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157 -\155\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124 -\162\165\163\164\040\105\103\103\040\122\157\157\164\055\060\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\103\160\202\167\317\115\135\064\361\312\256\062\057\067 -\367\364\177\165\240\236 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# -# Certificate "CommScope Public Trust ECC Root-02" -# -# Issuer: CN=CommScope Public Trust ECC Root-02,O=CommScope,C=US -# Serial Number:28:fd:99:60:41:47:a6:01:3a:ca:14:7b:1f:ef:f9:68:08:83:5d:7d -# Subject: CN=CommScope Public Trust ECC Root-02,O=CommScope,C=US -# Not Valid Before: Wed Apr 28 17:44:54 2021 -# Not Valid After : Sat Apr 28 17:44:53 2046 -# Fingerprint (SHA-256): 2F:FB:7F:81:3B:BB:B3:C8:9A:B4:E8:16:2D:0F:16:D7:15:09:A8:30:CC:9D:73:C2:62:E5:14:08:75:D1:AD:4A -# Fingerprint (SHA1): 3C:3F:EF:57:0F:FE:65:93:86:9E:A0:FE:B0:F6:ED:8E:D1:13:C7:E5 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "CommScope Public Trust ECC Root-02" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\022\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143 -\157\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157 -\155\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124 -\162\165\163\164\040\105\103\103\040\122\157\157\164\055\060\062 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\022\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143 -\157\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157 -\155\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124 -\162\165\163\164\040\105\103\103\040\122\157\157\164\055\060\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\050\375\231\140\101\107\246\001\072\312\024\173\037\357 -\371\150\010\203\135\175 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\002\034\060\202\001\243\240\003\002\001\002\002\024\050 -\375\231\140\101\107\246\001\072\312\024\173\037\357\371\150\010 -\203\135\175\060\012\006\010\052\206\110\316\075\004\003\003\060 -\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061\022 -\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143\157 -\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157\155 -\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124\162 -\165\163\164\040\105\103\103\040\122\157\157\164\055\060\062\060 -\036\027\015\062\061\060\064\062\070\061\067\064\064\065\064\132 -\027\015\064\066\060\064\062\070\061\067\064\064\065\063\132\060 -\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061\022 -\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143\157 -\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157\155 -\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124\162 -\165\163\164\040\105\103\103\040\122\157\157\164\055\060\062\060 -\166\060\020\006\007\052\206\110\316\075\002\001\006\005\053\201 -\004\000\042\003\142\000\004\170\060\201\350\143\036\345\353\161 -\121\017\367\007\007\312\071\231\174\116\325\017\314\060\060\013 -\217\146\223\076\317\275\305\206\275\371\261\267\264\076\264\007 -\310\363\226\061\363\355\244\117\370\243\116\215\051\025\130\270 -\325\157\177\356\154\042\265\260\257\110\105\012\275\250\111\224 -\277\204\103\260\333\204\112\003\043\031\147\152\157\301\156\274 -\006\071\067\321\210\042\367\243\102\060\100\060\017\006\003\125 -\035\023\001\001\377\004\005\060\003\001\001\377\060\016\006\003 -\125\035\017\001\001\377\004\004\003\002\001\006\060\035\006\003 -\125\035\016\004\026\004\024\346\030\165\377\357\140\336\204\244 -\365\106\307\336\112\125\343\062\066\171\365\060\012\006\010\052 -\206\110\316\075\004\003\003\003\147\000\060\144\002\060\046\163 -\111\172\266\253\346\111\364\175\122\077\324\101\004\256\200\103 -\203\145\165\271\205\200\070\073\326\157\344\223\206\253\217\347 -\211\310\177\233\176\153\012\022\125\141\252\021\340\171\002\060 -\167\350\061\161\254\074\161\003\326\204\046\036\024\270\363\073 -\073\336\355\131\374\153\114\060\177\131\316\105\351\163\140\025 -\232\114\360\346\136\045\042\025\155\302\207\131\320\262\216\152 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "CommScope Public Trust ECC Root-02" -# Issuer: CN=CommScope Public Trust ECC Root-02,O=CommScope,C=US -# Serial Number:28:fd:99:60:41:47:a6:01:3a:ca:14:7b:1f:ef:f9:68:08:83:5d:7d -# Subject: CN=CommScope Public Trust ECC Root-02,O=CommScope,C=US -# Not Valid Before: Wed Apr 28 17:44:54 2021 -# Not Valid After : Sat Apr 28 17:44:53 2046 -# Fingerprint (SHA-256): 2F:FB:7F:81:3B:BB:B3:C8:9A:B4:E8:16:2D:0F:16:D7:15:09:A8:30:CC:9D:73:C2:62:E5:14:08:75:D1:AD:4A -# Fingerprint (SHA1): 3C:3F:EF:57:0F:FE:65:93:86:9E:A0:FE:B0:F6:ED:8E:D1:13:C7:E5 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "CommScope Public Trust ECC Root-02" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\074\077\357\127\017\376\145\223\206\236\240\376\260\366\355\216 -\321\023\307\345 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\131\260\104\325\145\115\270\134\125\031\222\002\266\321\224\262 -END -CKA_ISSUER MULTILINE_OCTAL -\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\022\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143 -\157\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157 -\155\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124 -\162\165\163\164\040\105\103\103\040\122\157\157\164\055\060\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\050\375\231\140\101\107\246\001\072\312\024\173\037\357 -\371\150\010\203\135\175 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# -# Certificate "CommScope Public Trust RSA Root-01" -# -# Issuer: CN=CommScope Public Trust RSA Root-01,O=CommScope,C=US -# Serial Number:3e:03:49:81:75:16:74:31:8e:4c:ab:d5:c5:90:29:96:c5:39:10:dd -# Subject: CN=CommScope Public Trust RSA Root-01,O=CommScope,C=US -# Not Valid Before: Wed Apr 28 16:45:54 2021 -# Not Valid After : Sat Apr 28 16:45:53 2046 -# Fingerprint (SHA-256): 02:BD:F9:6E:2A:45:DD:9B:F1:8F:C7:E1:DB:DF:21:A0:37:9B:A3:C9:C2:61:03:44:CF:D8:D6:06:FE:C1:ED:81 -# Fingerprint (SHA1): 6D:0A:5F:F7:B4:23:06:B4:85:B3:B7:97:64:FC:AC:75:F5:33:F2:93 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "CommScope Public Trust RSA Root-01" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\022\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143 -\157\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157 -\155\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124 -\162\165\163\164\040\122\123\101\040\122\157\157\164\055\060\061 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\022\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143 -\157\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157 -\155\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124 -\162\165\163\164\040\122\123\101\040\122\157\157\164\055\060\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\076\003\111\201\165\026\164\061\216\114\253\325\305\220 -\051\226\305\071\020\335 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\154\060\202\003\124\240\003\002\001\002\002\024\076 -\003\111\201\165\026\164\061\216\114\253\325\305\220\051\226\305 -\071\020\335\060\015\006\011\052\206\110\206\367\015\001\001\013 -\005\000\060\116\061\013\060\011\006\003\125\004\006\023\002\125 -\123\061\022\060\020\006\003\125\004\012\014\011\103\157\155\155 -\123\143\157\160\145\061\053\060\051\006\003\125\004\003\014\042 -\103\157\155\155\123\143\157\160\145\040\120\165\142\154\151\143 -\040\124\162\165\163\164\040\122\123\101\040\122\157\157\164\055 -\060\061\060\036\027\015\062\061\060\064\062\070\061\066\064\065 -\065\064\132\027\015\064\066\060\064\062\070\061\066\064\065\065 -\063\132\060\116\061\013\060\011\006\003\125\004\006\023\002\125 -\123\061\022\060\020\006\003\125\004\012\014\011\103\157\155\155 -\123\143\157\160\145\061\053\060\051\006\003\125\004\003\014\042 -\103\157\155\155\123\143\157\160\145\040\120\165\142\154\151\143 -\040\124\162\165\163\164\040\122\123\101\040\122\157\157\164\055 -\060\061\060\202\002\042\060\015\006\011\052\206\110\206\367\015 -\001\001\001\005\000\003\202\002\017\000\060\202\002\012\002\202 -\002\001\000\260\110\145\243\015\035\102\343\221\155\235\204\244 -\141\226\022\302\355\303\332\043\064\031\166\366\352\375\125\132 -\366\125\001\123\017\362\314\214\227\117\271\120\313\263\001\104 -\126\226\375\233\050\354\173\164\013\347\102\153\125\316\311\141 -\262\350\255\100\074\272\271\101\012\005\117\033\046\205\217\103 -\265\100\265\205\321\324\161\334\203\101\363\366\105\307\200\242 -\204\120\227\106\316\240\014\304\140\126\004\035\007\133\106\245 -\016\262\113\244\016\245\174\356\370\324\142\003\271\223\152\212 -\024\270\160\370\056\202\106\070\043\016\164\307\153\101\267\320 -\051\243\235\200\260\176\167\223\143\102\373\064\203\073\163\243 -\132\041\066\353\107\372\030\027\331\272\146\302\223\244\217\374 -\135\244\255\374\120\152\225\254\274\044\063\321\275\210\177\206 -\365\365\262\163\052\217\174\257\010\362\032\230\077\251\201\145 -\077\301\214\211\305\226\060\232\012\317\364\324\310\064\355\235 -\057\274\215\070\206\123\356\227\237\251\262\143\224\027\215\017 -\334\146\052\174\122\121\165\313\231\216\350\075\134\277\236\073 -\050\215\203\002\017\251\237\162\342\054\053\263\334\146\227\000 -\100\320\244\124\216\233\135\173\105\066\046\326\162\103\353\317 -\300\352\015\334\316\022\346\175\070\237\005\047\250\227\076\351 -\121\306\154\005\050\301\002\017\351\030\155\354\275\234\006\324 -\247\111\364\124\005\153\154\060\361\353\003\325\352\075\152\166 -\302\313\032\050\111\115\177\144\340\372\053\332\163\203\201\377 -\221\003\275\224\273\344\270\216\234\062\143\315\237\273\150\201 -\261\204\133\257\066\277\167\356\035\177\367\111\233\122\354\322 -\167\132\175\221\235\115\302\071\055\344\272\202\370\157\362\116 -\036\017\116\346\077\131\245\043\334\075\207\250\050\130\050\321 -\361\033\066\333\117\304\377\341\214\133\162\214\307\046\003\047 -\243\071\012\001\252\300\262\061\140\203\042\241\117\022\011\001 -\021\257\064\324\317\327\256\142\323\005\007\264\061\165\340\015 -\155\127\117\151\207\371\127\251\272\025\366\310\122\155\241\313 -\234\037\345\374\170\250\065\232\237\101\024\316\245\264\316\224 -\010\034\011\255\126\345\332\266\111\232\112\352\143\030\123\234 -\054\056\303\002\003\001\000\001\243\102\060\100\060\017\006\003 -\125\035\023\001\001\377\004\005\060\003\001\001\377\060\016\006 -\003\125\035\017\001\001\377\004\004\003\002\001\006\060\035\006 -\003\125\035\016\004\026\004\024\067\135\246\232\164\062\302\302 -\371\307\246\025\020\131\270\344\375\345\270\155\060\015\006\011 -\052\206\110\206\367\015\001\001\013\005\000\003\202\002\001\000 -\257\247\317\336\377\340\275\102\215\115\345\042\226\337\150\352 -\175\115\052\175\320\255\075\026\134\103\347\175\300\206\350\172 -\065\143\361\314\201\310\306\013\350\056\122\065\244\246\111\220 -\143\121\254\064\254\005\073\127\000\351\323\142\323\331\051\325 -\124\276\034\020\221\234\262\155\376\131\375\171\367\352\126\320 -\236\150\124\102\217\046\122\342\114\337\057\227\246\057\322\007 -\230\250\363\140\135\113\232\130\127\210\357\202\345\372\257\154 -\201\113\222\217\100\232\223\106\131\313\137\170\026\261\147\076 -\102\013\337\050\331\260\255\230\040\276\103\174\321\136\032\011 -\027\044\215\173\135\225\351\253\301\140\253\133\030\144\200\373 -\255\340\006\175\035\312\131\270\363\170\051\147\306\126\035\257 -\266\265\164\052\166\241\077\373\165\060\237\224\136\073\245\140 -\363\313\134\014\342\016\311\140\370\311\037\026\212\046\335\347 -\047\177\353\045\246\212\275\270\055\066\020\232\261\130\115\232 -\150\117\140\124\345\366\106\023\216\210\254\274\041\102\022\255 -\306\112\211\175\233\301\330\055\351\226\003\364\242\164\014\274 -\000\035\277\326\067\045\147\264\162\213\257\205\275\352\052\003 -\217\314\373\074\104\044\202\342\001\245\013\131\266\064\215\062 -\013\022\015\353\047\302\375\101\327\100\074\162\106\051\300\214 -\352\272\017\361\006\223\056\367\234\250\364\140\076\243\361\070 -\136\216\023\301\263\072\227\207\077\222\312\170\251\034\257\320 -\260\033\046\036\276\160\354\172\365\063\230\352\134\377\053\013 -\004\116\103\335\143\176\016\247\116\170\003\225\076\324\055\060 -\225\021\020\050\056\277\240\002\076\377\136\131\323\005\016\225 -\137\123\105\357\153\207\325\110\315\026\246\226\203\341\337\263 -\006\363\301\024\333\247\354\034\213\135\220\220\015\162\121\347 -\141\371\024\312\257\203\217\277\257\261\012\131\135\334\134\327 -\344\226\255\133\140\035\332\256\227\262\071\331\006\365\166\000 -\023\370\150\114\041\260\065\304\334\125\262\311\301\101\132\034 -\211\300\214\157\164\240\153\063\115\265\001\050\375\255\255\211 -\027\073\246\232\204\274\353\214\352\304\161\044\250\272\051\371 -\010\262\047\126\065\062\137\352\071\373\061\232\325\031\314\360 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "CommScope Public Trust RSA Root-01" -# Issuer: CN=CommScope Public Trust RSA Root-01,O=CommScope,C=US -# Serial Number:3e:03:49:81:75:16:74:31:8e:4c:ab:d5:c5:90:29:96:c5:39:10:dd -# Subject: CN=CommScope Public Trust RSA Root-01,O=CommScope,C=US -# Not Valid Before: Wed Apr 28 16:45:54 2021 -# Not Valid After : Sat Apr 28 16:45:53 2046 -# Fingerprint (SHA-256): 02:BD:F9:6E:2A:45:DD:9B:F1:8F:C7:E1:DB:DF:21:A0:37:9B:A3:C9:C2:61:03:44:CF:D8:D6:06:FE:C1:ED:81 -# Fingerprint (SHA1): 6D:0A:5F:F7:B4:23:06:B4:85:B3:B7:97:64:FC:AC:75:F5:33:F2:93 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "CommScope Public Trust RSA Root-01" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\155\012\137\367\264\043\006\264\205\263\267\227\144\374\254\165 -\365\063\362\223 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\016\264\025\274\207\143\135\135\002\163\324\046\070\150\163\330 -END -CKA_ISSUER MULTILINE_OCTAL -\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\022\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143 -\157\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157 -\155\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124 -\162\165\163\164\040\122\123\101\040\122\157\157\164\055\060\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\076\003\111\201\165\026\164\061\216\114\253\325\305\220 -\051\226\305\071\020\335 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# -# Certificate "CommScope Public Trust RSA Root-02" -# -# Issuer: CN=CommScope Public Trust RSA Root-02,O=CommScope,C=US -# Serial Number:54:16:bf:3b:7e:39:95:71:8d:d1:aa:00:a5:86:0d:2b:8f:7a:05:4e -# Subject: CN=CommScope Public Trust RSA Root-02,O=CommScope,C=US -# Not Valid Before: Wed Apr 28 17:16:43 2021 -# Not Valid After : Sat Apr 28 17:16:42 2046 -# Fingerprint (SHA-256): FF:E9:43:D7:93:42:4B:4F:7C:44:0C:1C:3D:64:8D:53:63:F3:4B:82:DC:87:AA:7A:9F:11:8F:C5:DE:E1:01:F1 -# Fingerprint (SHA1): EA:B0:E2:52:1B:89:93:4C:11:68:F2:D8:9A:AC:22:4C:A3:8A:57:AE -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "CommScope Public Trust RSA Root-02" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\022\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143 -\157\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157 -\155\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124 -\162\165\163\164\040\122\123\101\040\122\157\157\164\055\060\062 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\022\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143 -\157\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157 -\155\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124 -\162\165\163\164\040\122\123\101\040\122\157\157\164\055\060\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\124\026\277\073\176\071\225\161\215\321\252\000\245\206 -\015\053\217\172\005\116 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\154\060\202\003\124\240\003\002\001\002\002\024\124 -\026\277\073\176\071\225\161\215\321\252\000\245\206\015\053\217 -\172\005\116\060\015\006\011\052\206\110\206\367\015\001\001\013 -\005\000\060\116\061\013\060\011\006\003\125\004\006\023\002\125 -\123\061\022\060\020\006\003\125\004\012\014\011\103\157\155\155 -\123\143\157\160\145\061\053\060\051\006\003\125\004\003\014\042 -\103\157\155\155\123\143\157\160\145\040\120\165\142\154\151\143 -\040\124\162\165\163\164\040\122\123\101\040\122\157\157\164\055 -\060\062\060\036\027\015\062\061\060\064\062\070\061\067\061\066 -\064\063\132\027\015\064\066\060\064\062\070\061\067\061\066\064 -\062\132\060\116\061\013\060\011\006\003\125\004\006\023\002\125 -\123\061\022\060\020\006\003\125\004\012\014\011\103\157\155\155 -\123\143\157\160\145\061\053\060\051\006\003\125\004\003\014\042 -\103\157\155\155\123\143\157\160\145\040\120\165\142\154\151\143 -\040\124\162\165\163\164\040\122\123\101\040\122\157\157\164\055 -\060\062\060\202\002\042\060\015\006\011\052\206\110\206\367\015 -\001\001\001\005\000\003\202\002\017\000\060\202\002\012\002\202 -\002\001\000\341\372\016\373\150\000\022\310\115\325\254\042\304 -\065\001\073\305\124\345\131\166\143\245\177\353\301\304\152\230 -\275\062\215\027\200\353\135\272\321\142\075\045\043\031\065\024 -\351\177\211\247\033\142\074\326\120\347\064\225\003\062\261\264 -\223\042\075\247\342\261\355\346\173\116\056\207\233\015\063\165 -\012\336\252\065\347\176\345\066\230\242\256\045\236\225\263\062 -\226\244\053\130\036\357\077\376\142\064\110\121\321\264\215\102 -\255\140\332\111\152\225\160\335\322\000\342\314\127\143\002\173 -\226\335\111\227\133\222\116\225\323\371\313\051\037\030\112\370 -\001\052\322\143\011\156\044\351\211\322\345\307\042\114\334\163 -\206\107\000\252\015\210\216\256\205\175\112\351\273\063\117\016 -\122\160\235\225\343\174\155\226\133\055\075\137\241\203\106\135 -\266\343\045\270\174\247\031\200\034\352\145\103\334\221\171\066 -\054\164\174\362\147\006\311\211\311\333\277\332\150\277\043\355 -\334\153\255\050\203\171\057\354\070\245\015\067\001\147\047\232 -\351\063\331\063\137\067\241\305\360\253\075\372\170\260\347\054 -\237\366\076\237\140\340\357\110\351\220\105\036\005\121\170\032 -\054\022\054\134\050\254\015\242\043\236\064\217\005\346\242\063 -\316\021\167\023\324\016\244\036\102\037\206\315\160\376\331\056 -\025\075\035\273\270\362\123\127\333\314\306\164\051\234\030\263 -\066\165\070\056\017\124\241\370\222\037\211\226\117\273\324\356 -\235\351\073\066\102\265\012\073\052\324\144\171\066\020\341\371 -\221\003\053\173\040\124\315\015\031\032\310\101\062\064\321\260 -\231\341\220\036\001\100\066\265\267\372\251\345\167\165\244\042 -\201\135\260\213\344\047\022\017\124\210\306\333\205\164\346\267 -\300\327\246\051\372\333\336\363\223\227\047\004\125\057\012\157 -\067\305\075\023\257\012\000\251\054\213\034\201\050\327\357\206 -\061\251\256\362\156\270\312\152\054\124\107\330\052\210\056\257 -\301\007\020\170\254\021\242\057\102\360\067\305\362\270\126\335 -\016\142\055\316\055\126\176\125\362\247\104\366\053\062\364\043 -\250\107\350\324\052\001\170\317\152\303\067\250\236\145\322\054 -\345\372\272\063\301\006\104\366\346\317\245\015\247\146\010\064 -\212\054\363\002\003\001\000\001\243\102\060\100\060\017\006\003 -\125\035\023\001\001\377\004\005\060\003\001\001\377\060\016\006 -\003\125\035\017\001\001\377\004\004\003\002\001\006\060\035\006 -\003\125\035\016\004\026\004\024\107\320\347\261\042\377\235\054 -\365\331\127\140\263\261\261\160\225\357\141\172\060\015\006\011 -\052\206\110\206\367\015\001\001\013\005\000\003\202\002\001\000 -\206\151\261\115\057\351\237\117\042\223\150\216\344\041\231\243 -\316\105\123\033\163\104\123\000\201\141\315\061\343\010\272\201 -\050\050\172\222\271\266\250\310\103\236\307\023\046\115\302\330 -\345\125\234\222\135\120\330\302\053\333\376\346\250\227\317\122 -\072\044\303\145\144\134\107\061\243\145\065\023\303\223\271\367 -\371\121\227\273\244\360\142\207\305\326\006\323\227\203\040\251 -\176\273\266\041\302\245\015\204\000\341\362\047\020\203\272\335 -\003\201\325\335\150\303\146\020\310\321\166\264\263\157\051\236 -\000\371\302\051\365\261\223\031\122\151\032\054\114\240\213\340 -\025\232\061\057\323\210\225\131\156\345\304\263\120\310\024\010 -\112\233\213\023\203\261\244\162\262\073\166\063\101\334\334\252 -\246\007\157\035\044\022\237\310\166\275\057\331\216\364\054\356 -\267\322\070\020\044\066\121\057\343\134\135\201\041\247\332\273 -\116\377\346\007\250\376\271\015\047\154\273\160\132\125\172\023 -\351\361\052\111\151\307\137\207\127\114\103\171\155\072\145\351 -\060\134\101\356\353\167\245\163\022\210\350\277\175\256\345\304 -\250\037\015\216\034\155\120\002\117\046\030\103\336\217\125\205 -\261\013\067\005\140\311\125\071\022\004\241\052\317\161\026\237 -\066\121\111\277\160\073\236\147\234\373\173\171\311\071\034\170 -\254\167\221\124\232\270\165\012\201\122\227\343\146\141\153\355 -\076\070\036\226\141\125\341\221\124\214\355\214\044\037\201\311 -\020\232\163\231\053\026\116\162\000\077\124\033\370\215\272\213 -\347\024\326\266\105\117\140\354\226\256\303\057\002\116\135\235 -\226\111\162\000\262\253\165\134\017\150\133\035\145\302\137\063 -\017\036\017\360\073\206\365\260\116\273\234\367\352\045\005\334 -\255\242\233\113\027\001\276\102\337\065\041\035\255\253\256\364 -\277\256\037\033\323\342\073\374\263\162\163\034\233\050\220\211 -\023\075\035\301\000\107\011\226\232\070\033\335\261\317\015\302 -\264\104\363\226\225\316\062\072\217\064\234\340\027\307\136\316 -\256\015\333\207\070\345\077\133\375\233\031\341\061\101\172\160 -\252\043\153\001\341\105\114\315\224\316\073\236\055\347\210\002 -\042\364\156\350\310\354\326\074\363\271\262\327\167\172\254\173 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "CommScope Public Trust RSA Root-02" -# Issuer: CN=CommScope Public Trust RSA Root-02,O=CommScope,C=US -# Serial Number:54:16:bf:3b:7e:39:95:71:8d:d1:aa:00:a5:86:0d:2b:8f:7a:05:4e -# Subject: CN=CommScope Public Trust RSA Root-02,O=CommScope,C=US -# Not Valid Before: Wed Apr 28 17:16:43 2021 -# Not Valid After : Sat Apr 28 17:16:42 2046 -# Fingerprint (SHA-256): FF:E9:43:D7:93:42:4B:4F:7C:44:0C:1C:3D:64:8D:53:63:F3:4B:82:DC:87:AA:7A:9F:11:8F:C5:DE:E1:01:F1 -# Fingerprint (SHA1): EA:B0:E2:52:1B:89:93:4C:11:68:F2:D8:9A:AC:22:4C:A3:8A:57:AE -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "CommScope Public Trust RSA Root-02" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\352\260\342\122\033\211\223\114\021\150\362\330\232\254\042\114 -\243\212\127\256 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\341\051\371\142\173\166\342\226\155\363\324\327\017\256\037\252 -END -CKA_ISSUER MULTILINE_OCTAL -\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\022\060\020\006\003\125\004\012\014\011\103\157\155\155\123\143 -\157\160\145\061\053\060\051\006\003\125\004\003\014\042\103\157 -\155\155\123\143\157\160\145\040\120\165\142\154\151\143\040\124 -\162\165\163\164\040\122\123\101\040\122\157\157\164\055\060\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\124\026\277\073\176\071\225\161\215\321\252\000\245\206 -\015\053\217\172\005\116 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# # Certificate "D-Trust SBR Root CA 1 2022" # # Issuer: CN=D-Trust SBR Root CA 1 2022,O=D-Trust GmbH,C=DE diff --git a/security/nss/lib/freebl/Makefile b/security/nss/lib/freebl/Makefile @@ -603,7 +603,7 @@ ifndef NSS_DISABLE_KYBER KYBER_PQCRYSTALS = kyber-pqcrystals-ref.c endif -VERIFIED_SRCS += Hacl_Hash_SHA3.c Hacl_P256.c Hacl_P384.c Hacl_P521.c libcrux_mlkem768_portable.c libcrux_mlkem_portable.c libcrux_core.c +VERIFIED_SRCS += Hacl_Hash_SHA3.c Hacl_P256.c Hacl_P384.c Hacl_P521.c libcrux_sha3_portable.c libcrux_mlkem768_portable.c libcrux_mlkem1024_portable.c libcrux_mlkem_portable.c libcrux_core.c VERIFIED_SRCS += Hacl_Ed25519.c VERIFIED_SRCS += Hacl_Curve25519_51.c diff --git a/security/nss/lib/freebl/freebl_base.gypi b/security/nss/lib/freebl/freebl_base.gypi @@ -54,7 +54,9 @@ 'tlsprfalg.c', 'secmpi.c', 'verified/Hacl_Hash_SHA3.c', + 'verified/libcrux_sha3_portable.c', 'verified/libcrux_mlkem768_portable.c', + 'verified/libcrux_mlkem1024_portable.c', 'verified/libcrux_mlkem_portable.c', 'verified/libcrux_core.c', 'verified/Hacl_P256.c', diff --git a/security/nss/lib/freebl/kyber.c b/security/nss/lib/freebl/kyber.c @@ -17,6 +17,8 @@ #include "verified/internal/libcrux_core.h" #include "verified/libcrux_mlkem768_portable.h" #include "verified/libcrux_mlkem768.h" +#include "verified/libcrux_mlkem1024_portable.h" +#include "verified/libcrux_mlkem1024.h" /* Consistency check between kyber-pqcrystals-ref.h and kyber.h */ PR_STATIC_ASSERT(KYBER768_PUBLIC_KEY_BYTES == pqcrystals_kyber768_PUBLICKEYBYTES); @@ -27,13 +29,18 @@ PR_STATIC_ASSERT(KYBER_KEYPAIR_COIN_BYTES == pqcrystals_kyber768_KEYPAIRCOINBYTE PR_STATIC_ASSERT(KYBER_ENC_COIN_BYTES == pqcrystals_kyber768_ENCCOINBYTES); /* Consistency check between libcrux_mlkem768_portable.h and kyber.h */ -PR_STATIC_ASSERT(KYBER768_PUBLIC_KEY_BYTES == LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE_768); -PR_STATIC_ASSERT(KYBER768_PRIVATE_KEY_BYTES == LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE_768); -PR_STATIC_ASSERT(KYBER768_CIPHERTEXT_BYTES == LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE_768); +PR_STATIC_ASSERT(KYBER768_PUBLIC_KEY_BYTES == LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE); +PR_STATIC_ASSERT(KYBER768_PRIVATE_KEY_BYTES == LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE); +PR_STATIC_ASSERT(KYBER768_CIPHERTEXT_BYTES == LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE); PR_STATIC_ASSERT(KYBER_SHARED_SECRET_BYTES == LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE); PR_STATIC_ASSERT(KYBER_KEYPAIR_COIN_BYTES == 64); PR_STATIC_ASSERT(KYBER_ENC_COIN_BYTES == 32); +/* Consistency check between libcrux_mlkem1024_portable.h and kyber.h */ +PR_STATIC_ASSERT(MLKEM1024_PUBLIC_KEY_BYTES == LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_PUBLIC_KEY_SIZE); +PR_STATIC_ASSERT(MLKEM1024_PRIVATE_KEY_BYTES == LIBCRUX_ML_KEM_MLKEM1024_SECRET_KEY_SIZE); +PR_STATIC_ASSERT(MLKEM1024_CIPHERTEXT_BYTES == LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_CIPHERTEXT_SIZE); + static bool valid_params(KyberParams params) { @@ -44,6 +51,8 @@ valid_params(KyberParams params) #endif case params_ml_kem768: case params_ml_kem768_test_mode: + case params_ml_kem1024: + case params_ml_kem1024_test_mode: return true; default: return false; @@ -59,6 +68,9 @@ valid_pubkey(KyberParams params, const SECItem *pubkey) case params_ml_kem768: case params_ml_kem768_test_mode: return pubkey && pubkey->len == KYBER768_PUBLIC_KEY_BYTES; + case params_ml_kem1024: + case params_ml_kem1024_test_mode: + return pubkey && pubkey->len == MLKEM1024_PUBLIC_KEY_BYTES; default: return false; } @@ -73,6 +85,9 @@ valid_privkey(KyberParams params, const SECItem *privkey) case params_ml_kem768: case params_ml_kem768_test_mode: return privkey && privkey->len == KYBER768_PRIVATE_KEY_BYTES; + case params_ml_kem1024: + case params_ml_kem1024_test_mode: + return privkey && privkey->len == MLKEM1024_PRIVATE_KEY_BYTES; default: return false; } @@ -87,6 +102,9 @@ valid_ciphertext(KyberParams params, const SECItem *ciphertext) case params_ml_kem768: case params_ml_kem768_test_mode: return ciphertext && ciphertext->len == KYBER768_CIPHERTEXT_BYTES; + case params_ml_kem1024: + case params_ml_kem1024_test_mode: + return ciphertext && ciphertext->len == MLKEM1024_CIPHERTEXT_BYTES; default: return false; } @@ -100,6 +118,8 @@ valid_secret(KyberParams params, const SECItem *secret) case params_kyber768_round3_test_mode: case params_ml_kem768: case params_ml_kem768_test_mode: + case params_ml_kem1024: + case params_ml_kem1024_test_mode: return secret && secret->len == KYBER_SHARED_SECRET_BYTES; default: return false; @@ -114,6 +134,8 @@ valid_keypair_seed(KyberParams params, const SECItem *seed) case params_kyber768_round3_test_mode: case params_ml_kem768: case params_ml_kem768_test_mode: + case params_ml_kem1024: + case params_ml_kem1024_test_mode: return !seed || seed->len == KYBER_KEYPAIR_COIN_BYTES; default: return false; @@ -129,6 +151,8 @@ valid_enc_seed(KyberParams params, const SECItem *seed) return !seed; case params_kyber768_round3_test_mode: case params_ml_kem768_test_mode: + case params_ml_kem1024: + case params_ml_kem1024_test_mode: return !seed || seed->len == KYBER_SHARED_SECRET_BYTES; default: return false; @@ -164,6 +188,10 @@ Kyber_NewKey(KyberParams params, const SECItem *keypair_seed, SECItem *privkey, libcrux_ml_kem_mlkem768_MlKem768KeyPair keys = libcrux_ml_kem_mlkem768_portable_generate_key_pair(coins); memcpy(pubkey->data, keys.pk.value, KYBER768_PUBLIC_KEY_BYTES); memcpy(privkey->data, keys.sk.value, KYBER768_PRIVATE_KEY_BYTES); + } else if (params == params_ml_kem1024 || params == params_ml_kem1024_test_mode) { + libcrux_ml_kem_mlkem1024_MlKem1024KeyPair keys = libcrux_ml_kem_mlkem1024_portable_generate_key_pair(coins); + memcpy(pubkey->data, keys.pk.value, MLKEM1024_PUBLIC_KEY_BYTES); + memcpy(privkey->data, keys.sk.value, MLKEM1024_PRIVATE_KEY_BYTES); } else if (params == params_kyber768_round3 || params == params_kyber768_round3_test_mode) { #ifdef NSS_DISABLE_KYBER PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); @@ -206,7 +234,8 @@ Kyber_Encapsulate(KyberParams params, const SECItem *enc_seed, const SECItem *pu } NSS_CLASSIFY(coins, KYBER_ENC_COIN_BYTES); if (params == params_ml_kem768 || params == params_ml_kem768_test_mode) { - libcrux_ml_kem_types_MlKemPublicKey_15 pk_value; + /* shouldn't this just use the typedef im libcrux_mlkem768.h? */ + libcrux_ml_kem_mlkem768_MlKem768PublicKey pk_value; memcpy(pk_value.value, pubkey->data, KYBER768_PUBLIC_KEY_BYTES); bool valid_pk = libcrux_ml_kem_mlkem768_portable_validate_public_key(&pk_value); @@ -215,9 +244,23 @@ Kyber_Encapsulate(KyberParams params, const SECItem *enc_seed, const SECItem *pu return SECFailure; } - tuple_3c encap = libcrux_ml_kem_mlkem768_portable_encapsulate(&pk_value, coins); + tuple_c2 encap = libcrux_ml_kem_mlkem768_portable_encapsulate(&pk_value, coins); memcpy(ciphertext->data, encap.fst.value, KYBER768_CIPHERTEXT_BYTES); memcpy(secret->data, encap.snd, KYBER_SHARED_SECRET_BYTES); + } else if (params == params_ml_kem1024 || params == params_ml_kem1024_test_mode) { + /* shouldn't this just use the typedef im libcrux_mlkem1024.h? */ + libcrux_ml_kem_mlkem1024_MlKem1024PublicKey pk_value; + memcpy(pk_value.value, pubkey->data, MLKEM1024_PUBLIC_KEY_BYTES); + + bool valid_pk = libcrux_ml_kem_mlkem1024_portable_validate_public_key(&pk_value); + if (!valid_pk) { + PORT_SetError(SEC_ERROR_INVALID_ARGS); + return SECFailure; + } + + tuple_fa encap = libcrux_ml_kem_mlkem1024_portable_encapsulate(&pk_value, coins); + memcpy(ciphertext->data, encap.fst.value, MLKEM1024_CIPHERTEXT_BYTES); + memcpy(secret->data, encap.snd, KYBER_SHARED_SECRET_BYTES); } else if (params == params_kyber768_round3 || params == params_kyber768_round3_test_mode) { #ifdef NSS_DISABLE_KYBER PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); @@ -248,7 +291,7 @@ Kyber_Decapsulate(KyberParams params, const SECItem *privkey, const SECItem *cip } if (params == params_ml_kem768 || params == params_ml_kem768_test_mode) { - libcrux_ml_kem_types_MlKemPrivateKey_55 private_key; + libcrux_ml_kem_mlkem768_MlKem768PrivateKey private_key; memcpy(private_key.value, privkey->data, KYBER768_PRIVATE_KEY_BYTES); libcrux_ml_kem_mlkem768_MlKem768Ciphertext cipher_text; @@ -261,6 +304,20 @@ Kyber_Decapsulate(KyberParams params, const SECItem *privkey, const SECItem *cip } libcrux_ml_kem_mlkem768_portable_decapsulate(&private_key, &cipher_text, secret->data); + } else if (params == params_ml_kem1024 || params == params_ml_kem1024_test_mode) { + libcrux_ml_kem_mlkem1024_MlKem1024PrivateKey private_key; + memcpy(private_key.value, privkey->data, MLKEM1024_PRIVATE_KEY_BYTES); + + libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext cipher_text; + memcpy(cipher_text.value, ciphertext->data, MLKEM1024_CIPHERTEXT_BYTES); + + bool valid = libcrux_ml_kem_mlkem1024_portable_validate_private_key(&private_key, &cipher_text); + if (!valid) { + PORT_SetError(SEC_ERROR_INVALID_ARGS); + return SECFailure; + } + + libcrux_ml_kem_mlkem1024_portable_decapsulate(&private_key, &cipher_text, secret->data); } else if (params == params_kyber768_round3 || params == params_kyber768_round3_test_mode) { #ifdef NSS_DISABLE_KYBER PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); diff --git a/security/nss/lib/freebl/verified/eurydice_glue.h b/security/nss/lib/freebl/verified/eurydice_glue.h @@ -1,9 +1,5 @@ #pragma once -#if defined(__cplusplus) -extern "C" { -#endif - #include <inttypes.h> #include <stdbool.h> #include <stdio.h> @@ -11,87 +7,167 @@ extern "C" { #include <string.h> #ifdef _MSC_VER +// For __popcnt #include <intrin.h> #endif #include "krml/internal/target.h" #include "krml/lowstar_endianness.h" -#define LowStar_Ignore_ignore(e, t, _ret_t) ((void)e) - -// SLICES, ARRAYS, ETC. +// C++ HELPERS #if defined(__cplusplus) -#define CLITERAL(type) type + +#ifndef KRML_HOST_EPRINTF +#define KRML_HOST_EPRINTF(...) fprintf(stderr, __VA_ARGS__) +#endif + +#include <utility> + +#ifndef __cpp_lib_type_identity +template <class T> +struct type_identity { + using type = T +}; + +template <class T> +using type_identity_t = typename type_identity<T>::type; #else -#define CLITERAL(type) (type) +using std::type_identity_t; #endif +#define KRML_UNION_CONSTRUCTOR(T) \ + template <typename V> \ + constexpr T(int t, V U::*m, type_identity_t<V> v) : tag(t) \ + { \ + val.*m = std::move(v); \ + } \ + T() = default; + +#endif + +// GENERAL-PURPOSE STUFF + +#define LowStar_Ignore_ignore(e, t, _ret_t) ((void)e) + +#define EURYDICE_ASSERT(test, msg) \ + do { \ + if (!(test)) { \ + fprintf(stderr, "assertion \"%s\" failed: file \"%s\", line %d\n", msg, \ + __FILE__, __LINE__); \ + exit(255); \ + } \ + } while (0) + +// SLICES, ARRAYS, ETC. + // We represent a slice as a pair of an (untyped) pointer, along with the length // of the slice, i.e. the number of elements in the slice (this is NOT the // number of bytes). This design choice has two important consequences. // - if you need to use `ptr`, you MUST cast it to a proper type *before* -// performing pointer -// arithmetic on it (remember that C desugars pointer arithmetic based on the -// type of the address) +// performing pointer arithmetic on it (remember that C desugars pointer +// arithmetic based on the type of the address) // - if you need to use `len` for a C style function (e.g. memcpy, memcmp), you -// need to multiply it -// by sizeof t, where t is the type of the elements. +// need to multiply it by sizeof t, where t is the type of the elements. +// +// Empty slices have `len == 0` and `ptr` always needs to be a valid pointer +// that is not NULL (otherwise the construction in EURYDICE_SLICE computes `NULL +// + start`). typedef struct { void *ptr; size_t len; } Eurydice_slice; +#if defined(__cplusplus) +#define KRML_CLITERAL(type) type +#else +#define KRML_CLITERAL(type) (type) +#endif + +#if defined(__cplusplus) && defined(__cpp_designated_initializers) || \ + !(defined(__cplusplus)) +#define EURYDICE_CFIELD(X) X +#else +#define EURYDICE_CFIELD(X) +#endif + // Helper macro to create a slice out of a pointer x, a start index in x // (included), and an end index in x (excluded). The argument x must be suitably // cast to something that can decay (see remark above about how pointer // arithmetic works in C), meaning either pointer or array type. #define EURYDICE_SLICE(x, start, end) \ - (CLITERAL(Eurydice_slice){ .ptr = (void *)(x + start), .len = end - start }) -#define EURYDICE_SLICE_LEN(s, _) s.len + (KRML_CLITERAL(Eurydice_slice){ (void *)(x + start), end - start }) + +// Slice length +#define EURYDICE_SLICE_LEN(s, _) (s).len +#define Eurydice_slice_len(s, _) (s).len + // This macro is a pain because in case the dereferenced element type is an // array, you cannot simply write `t x` as it would yield `int[4] x` instead, // which is NOT correct C syntax, so we add a dedicated phase in Eurydice that // adds an extra argument to this macro at the last minute so that we have the // correct type of *pointers* to elements. #define Eurydice_slice_index(s, i, t, t_ptr_t) (((t_ptr_t)s.ptr)[i]) -#define Eurydice_slice_subslice(s, r, t, _) \ + +// The following functions get sub slices from a slice. + +#define Eurydice_slice_subslice(s, r, t, _0, _1) \ EURYDICE_SLICE((t *)s.ptr, r.start, r.end) + // Variant for when the start and end indices are statically known (i.e., the // range argument `r` is a literal). #define Eurydice_slice_subslice2(s, start, end, t) \ - EURYDICE_SLICE((t *)s.ptr, start, end) -#define Eurydice_slice_subslice_to(s, subslice_end_pos, t, _) \ + EURYDICE_SLICE((t *)s.ptr, (start), (end)) + +#define Eurydice_slice_subslice_to(s, subslice_end_pos, t, _0, _1) \ EURYDICE_SLICE((t *)s.ptr, 0, subslice_end_pos) -#define Eurydice_slice_subslice_from(s, subslice_start_pos, t, _) \ + +#define Eurydice_slice_subslice_from(s, subslice_start_pos, t, _0, _1) \ EURYDICE_SLICE((t *)s.ptr, subslice_start_pos, s.len) + #define Eurydice_array_to_slice(end, x, t) \ EURYDICE_SLICE(x, 0, \ end) /* x is already at an array type, no need for cast */ -#define Eurydice_array_to_subslice(_arraylen, x, r, t, _) \ +#define Eurydice_array_to_subslice(_arraylen, x, r, t, _0, _1) \ EURYDICE_SLICE((t *)x, r.start, r.end) + // Same as above, variant for when start and end are statically known #define Eurydice_array_to_subslice2(x, start, end, t) \ - EURYDICE_SLICE((t *)x, start, end) -#define Eurydice_array_to_subslice_to(_size, x, r, t, _range_t) \ - EURYDICE_SLICE((t *)x, 0, r) -#define Eurydice_array_to_subslice_from(size, x, r, t, _range_t) \ - EURYDICE_SLICE((t *)x, r, size) + EURYDICE_SLICE((t *)x, (start), (end)) + +// Same as above, variant for when start and end are statically known +#define Eurydice_array_to_subslice3(x, start, end, t_ptr) \ + EURYDICE_SLICE((t_ptr)x, (start), (end)) + #define Eurydice_array_repeat(dst, len, init, t) \ ERROR "should've been desugared" -#define Eurydice_slice_len(s, t) EURYDICE_SLICE_LEN(s, t) + +// The following functions convert an array into a slice. + +#define Eurydice_array_to_subslice_to(_size, x, r, t, _range_t, _0) \ + EURYDICE_SLICE((t *)x, 0, r) +#define Eurydice_array_to_subslice_from(size, x, r, t, _range_t, _0) \ + EURYDICE_SLICE((t *)x, r, size) + +// Copy a slice with memcopy #define Eurydice_slice_copy(dst, src, t) \ memcpy(dst.ptr, src.ptr, dst.len * sizeof(t)) -#define core_array___Array_T__N__23__as_slice(len_, ptr_, t, _ret_t) \ - ((Eurydice_slice){ .ptr = ptr_, .len = len_ }) -#define core_array___core__clone__Clone_for__Array_T__N___20__clone( \ - len, src, dst, elem_type, _ret_t) \ +#define core_array___Array_T__N___as_slice(len_, ptr_, t, _ret_t) \ + KRML_CLITERAL(Eurydice_slice) { ptr_, len_ } + +#define core_array__core__clone__Clone_for__Array_T__N___clone( \ + len, src, dst, elem_type, _ret_t) \ (memcpy(dst, src, len * sizeof(elem_type))) +#define TryFromSliceError uint8_t #define core_array_TryFromSliceError uint8_t -#define Eurydice_array_eq(sz, a1, a2, t, _) \ - (memcmp(a1, a2, sz * sizeof(t)) == 0) +#define Eurydice_array_eq(sz, a1, a2, t) (memcmp(a1, a2, sz * sizeof(t)) == 0) + +// core::cmp::PartialEq<&0 (@Slice<U>)> for @Array<T, N> +#define Eurydice_array_eq_slice(sz, a1, s2, t, _) \ + (memcmp(a1, (s2)->ptr, sz * sizeof(t)) == 0) + #define core_array_equality___core__cmp__PartialEq__Array_U__N___for__Array_T__N____eq( \ sz, a1, a2, t, _, _ret_t) \ Eurydice_array_eq(sz, a1, a2, t, _) @@ -99,20 +175,33 @@ typedef struct { sz, a1, a2, t, _, _ret_t) \ Eurydice_array_eq(sz, a1, ((a2)->ptr), t, _) -#define Eurydice_slice_split_at(slice, mid, element_type, ret_t) \ - (CLITERAL(ret_t){ \ - .fst = EURYDICE_SLICE((element_type *)slice.ptr, 0, mid), \ - .snd = EURYDICE_SLICE((element_type *)slice.ptr, mid, slice.len) }) -#define Eurydice_slice_split_at_mut(slice, mid, element_type, ret_t) \ - (CLITERAL(ret_t){ \ - .fst = { .ptr = slice.ptr, .len = mid }, \ - .snd = { .ptr = (char *)slice.ptr + mid * sizeof(element_type), \ - .len = slice.len - mid } }) +#define Eurydice_slice_split_at(slice, mid, element_type, ret_t) \ + KRML_CLITERAL(ret_t) \ + { \ + EURYDICE_CFIELD(.fst =) \ + EURYDICE_SLICE((element_type *)(slice).ptr, 0, mid), \ + EURYDICE_CFIELD(.snd =) \ + EURYDICE_SLICE((element_type *)(slice).ptr, mid, (slice).len) \ + } + +#define Eurydice_slice_split_at_mut(slice, mid, element_type, ret_t) \ + KRML_CLITERAL(ret_t) \ + { \ + EURYDICE_CFIELD(.fst =) \ + KRML_CLITERAL(Eurydice_slice){ EURYDICE_CFIELD(.ptr =)(slice.ptr), \ + EURYDICE_CFIELD(.len =) mid }, \ + EURYDICE_CFIELD(.snd =) KRML_CLITERAL(Eurydice_slice) \ + { \ + EURYDICE_CFIELD(.ptr =) \ + ((char *)slice.ptr + mid * sizeof(element_type)), \ + EURYDICE_CFIELD(.len =)(slice.len - mid) \ + } \ + } // Conversion of slice to an array, rewritten (by Eurydice) to name the // destination array, since arrays are not values in C. // N.B.: see note in karamel/lib/Inlining.ml if you change this. -#define Eurydice_slice_to_array2(dst, src, _, t_arr) \ +#define Eurydice_slice_to_array2(dst, src, _0, t_arr, _1) \ Eurydice_slice_to_array3(&(dst)->tag, (char *)&(dst)->val.case_Ok, src, \ sizeof(t_arr)) @@ -124,59 +213,105 @@ Eurydice_slice_to_array3(uint8_t *dst_tag, char *dst_ok, memcpy(dst_ok, src.ptr, sz); } +// SUPPORT FOR DSTs (Dynamically-Sized Types) + +// A DST is a fat pointer that keeps tracks of the size of it flexible array +// member. Slices are a specific case of DSTs, where [T; N] implements +// Unsize<[T]>, meaning an array of statically known size can be converted to a +// fat pointer, i.e. a slice. +// +// Unlike slices, DSTs have a built-in definition that gets monomorphized, of +// the form: +// +// typedef struct { +// T *ptr; +// size_t len; // number of elements +// } Eurydice_dst; +// +// Furthermore, T = T0<[U0]> where `struct T0<U: ?Sized>`, where the `U` is the +// last field. This means that there are two monomorphizations of T0 in the +// program. One is `T0<[V; N]>` +// -- this is directly converted to a Eurydice_dst via suitable codegen (no +// macro). The other is `T = T0<[U]>`, where `[U]` gets emitted to +// `Eurydice_derefed_slice`, a type that only appears in that precise situation +// and is thus defined to give rise to a flexible array member. + +typedef char Eurydice_derefed_slice[]; + +#define Eurydice_slice_of_dst(fam_ptr, len_, t, _) \ + ((Eurydice_slice){ .ptr = (void *)(fam_ptr), .len = len_ }) + +#define Eurydice_slice_of_boxed_array(ptr_, len_, t, _) \ + ((Eurydice_slice){ .ptr = (void *)(ptr_), .len = len_ }) + // CORE STUFF (conversions, endianness, ...) +// We slap extern "C" on declarations that intend to implement a prototype +// generated by Eurydice, because Eurydice prototypes are always emitted within +// an extern "C" block, UNLESS you use -fcxx17-compat, in which case, you must +// pass -DKRML_CXX17_COMPAT="" to your C++ compiler. +#if defined(__cplusplus) && !defined(KRML_CXX17_COMPAT) +extern "C" { +#endif + static inline void -core_num__u32_8__to_be_bytes(uint32_t src, uint8_t dst[4]) +core_num__u32__to_be_bytes(uint32_t src, uint8_t dst[4]) { // TODO: why not store32_be? uint32_t x = htobe32(src); memcpy(dst, &x, 4); } +static inline void +core_num__u32__to_le_bytes(uint32_t src, uint8_t dst[4]) +{ + store32_le(dst, src); +} + static inline uint32_t -core_num__u32_8__from_le_bytes(uint8_t buf[4]) +core_num__u32__from_le_bytes(uint8_t buf[4]) { return load32_le(buf); } static inline void -core_num__u64_9__to_le_bytes(uint64_t v, uint8_t buf[8]) +core_num__u64__to_le_bytes(uint64_t v, uint8_t buf[8]) { store64_le(buf, v); } + static inline uint64_t -core_num__u64_9__from_le_bytes(uint8_t buf[8]) +core_num__u64__from_le_bytes(uint8_t buf[8]) { return load64_le(buf); } static inline int64_t -core_convert_num___core__convert__From_i32__for_i64__59__from(int32_t x) +core_convert_num___core__convert__From_i32__for_i64___from(int32_t x) { return x; } static inline uint64_t -core_convert_num___core__convert__From_u8__for_u64__66__from(uint8_t x) +core_convert_num___core__convert__From_u8__for_u64___from(uint8_t x) { return x; } static inline uint64_t -core_convert_num___core__convert__From_u16__for_u64__70__from(uint16_t x) +core_convert_num___core__convert__From_u16__for_u64___from(uint16_t x) { return x; } static inline size_t -core_convert_num___core__convert__From_u16__for_usize__96__from(uint16_t x) +core_convert_num___core__convert__From_u16__for_usize___from(uint16_t x) { return x; } static inline uint32_t -core_num__u8_6__count_ones(uint8_t x0) +core_num__u8__count_ones(uint8_t x0) { #ifdef _MSC_VER return __popcnt(x0); @@ -185,21 +320,45 @@ core_num__u8_6__count_ones(uint8_t x0) #endif } +static inline uint32_t +core_num__i32__count_ones(int32_t x0) +{ +#ifdef _MSC_VER + return __popcnt(x0); +#else + return __builtin_popcount(x0); +#endif +} + +static inline size_t +core_cmp_impls___core__cmp__Ord_for_usize___min(size_t a, + size_t b) +{ + if (a <= b) + return a; + else + return b; +} + // unsigned overflow wraparound semantics in C static inline uint16_t -core_num__u16_7__wrapping_add(uint16_t x, uint16_t y) +core_num__u16__wrapping_add(uint16_t x, uint16_t y) { return x + y; } static inline uint8_t -core_num__u8_6__wrapping_sub(uint8_t x, uint8_t y) +core_num__u8__wrapping_sub(uint8_t x, uint8_t y) { return x - y; } +static inline uint64_t +core_num__u64__rotate_left(uint64_t x0, uint32_t x1) +{ + return (x0 << x1 | x0 >> (64 - x1)); +} static inline void -core_ops_arith__i32_319__add_assign(int32_t *x0, - int32_t *x1) +core_ops_arith__i32__add_assign(int32_t *x0, int32_t *x1) { *x0 = *x0 + *x1; } @@ -214,6 +373,25 @@ Eurydice_shr_pv_u8(uint8_t *p, int32_t v) { return (*p) >> v; } +static inline uint32_t +Eurydice_min_u32(uint32_t x, uint32_t y) +{ + return x < y ? x : y; +} + +static inline uint8_t +core_ops_bit___core__ops__bit__BitAnd_u8__u8__for___a__u8___46__bitand( + uint8_t *x0, uint8_t x1) +{ + return Eurydice_bitand_pv_u8(x0, x1); +} + +static inline uint8_t +core_ops_bit___core__ops__bit__Shr_i32__u8__for___a__u8___792__shr(uint8_t *x0, + int32_t x1) +{ + return Eurydice_shr_pv_u8(x0, x1); +} #define core_num_nonzero_private_NonZeroUsizeInner size_t static inline core_num_nonzero_private_NonZeroUsizeInner @@ -223,26 +401,25 @@ core_num_nonzero_private___core__clone__Clone_for_core__num__nonzero__private__N return *x0; } +#if defined(__cplusplus) && !defined(KRML_CXX17_COMPAT) +} +#endif + // ITERATORS -#define Eurydice_range_iter_next(iter_ptr, t, ret_t) \ - (((iter_ptr)->start == (iter_ptr)->end) \ - ? (CLITERAL(ret_t){ .tag = core_option_None }) \ - : (CLITERAL(ret_t){ .tag = core_option_Some, \ - .f0 = (iter_ptr)->start++ })) - -// Old name (TODO: remove once everyone has upgraded to the latest Charon) -#define core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___3__next \ - Eurydice_range_iter_next -#define core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next \ +#define Eurydice_range_iter_next(iter_ptr, t, ret_t) \ + (((iter_ptr)->start >= (iter_ptr)->end) \ + ? (KRML_CLITERAL(ret_t){ EURYDICE_CFIELD(.tag =) 0, \ + EURYDICE_CFIELD(.f0 =) 0 }) \ + : (KRML_CLITERAL(ret_t){ EURYDICE_CFIELD(.tag =) 1, \ + EURYDICE_CFIELD(.f0 =)(iter_ptr)->start++ })) + +#define core_iter_range___core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___6__next \ Eurydice_range_iter_next // See note in karamel/lib/Inlining.ml if you change this -#define Eurydice_into_iter(x, t, _ret_t) (x) -#define core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I___into_iter \ - Eurydice_into_iter -// This name changed on 20240627 -#define core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter \ +#define Eurydice_into_iter(x, t, _ret_t, _) (x) +#define core_iter_traits_collect___core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__1__into_iter \ Eurydice_into_iter typedef struct { @@ -269,6 +446,10 @@ chunk_next(Eurydice_chunks *chunks, return curr_chunk; } +// using it anyway?? +#define Eurydice_slice_subslice3(s, start, end, t_ptr) \ + EURYDICE_SLICE((t_ptr)s.ptr, (start), (end)) + #define core_slice___Slice_T___chunks(slice_, sz_, t, _ret_t) \ ((Eurydice_chunks){ .slice = slice_, .chunk_size = sz_ }) #define core_slice___Slice_T___chunks_exact(slice_, sz_, t, _ret_t) \ @@ -301,12 +482,14 @@ typedef struct { #define core_slice_iter__core__slice__iter__Iter__a__T__181__next(iter, t, \ ret_t) \ (((iter)->index == (iter)->s.len) \ - ? (CLITERAL(ret_t){ .tag = core_option_None }) \ - : (CLITERAL(ret_t){ \ + ? (KRML_CLITERAL(ret_t){ .tag = core_option_None }) \ + : (KRML_CLITERAL(ret_t){ \ .tag = core_option_Some, \ .f0 = ((iter)->index++, \ &((t *)((iter)->s.ptr))[(iter)->index - 1]) })) - +#define core_option__core__option__Option_T__TraitClause_0___is_some(X, _0, \ + _1) \ + ((X)->tag == 1) // STRINGS typedef const char *Prims_string; @@ -320,6 +503,23 @@ typedef void *core_fmt_rt_Argument; x4) \ NULL +// BOXES + +// Crimes. +static inline char * +malloc_and_init(size_t sz, char *init) +{ + char *ptr = (char *)malloc(sz); + memcpy(ptr, init, sz); + return ptr; +} + +#define Eurydice_box_new(init, t, t_dst) \ + ((t_dst)(malloc_and_init(sizeof(t), (char *)(&init)))) + +#define Eurydice_box_new_array(len, ptr, t, t_dst) \ + ((t_dst)(malloc_and_init(len * sizeof(t), (char *)(ptr)))) + // VECTORS (ANCIENT, POSSIBLY UNTESTED) /* For now these are passed by value -- three words. We could conceivably change @@ -366,12 +566,6 @@ typedef struct { #define EURYDICE_VEC_LEN(v, t) (v)->len /* TODO: remove GCC-isms */ -#define EURYDICE_BOX_NEW(x, t) \ - ({ \ - t *p = malloc(sizeof(t)); \ - *p = x; \ - p; \ - }) #define EURYDICE_REPLACE(ptr, new_v, t) \ ({ \ @@ -379,7 +573,3 @@ typedef struct { *ptr = new_v; \ old_v; \ }) - -#if defined(__cplusplus) -} -#endif diff --git a/security/nss/lib/freebl/verified/internal/libcrux_core.h b/security/nss/lib/freebl/verified/internal/libcrux_core.h @@ -1,29 +1,42 @@ /* - * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com> + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> * * SPDX-License-Identifier: MIT or Apache-2.0 * * This code was generated with the following revisions: - * Charon: b351338f6a84c7a1afc27433eb0ffdc668b3581d - * Eurydice: 7efec1624422fd5e94388ef06b9c76dfe7a48d46 - * Karamel: c96fb69d15693284644d6aecaa90afa37e4de8f0 - * F*: 58c915a86a2c07c8eca8d9deafd76cb7a91f0eb7 - * Libcrux: 6ff01fb3c57ff29ecb59bc62d9dc7fd231060cfb + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc */ -#ifndef __internal_libcrux_core_H -#define __internal_libcrux_core_H +#ifndef internal_libcrux_core_H +#define internal_libcrux_core_H + +#include "eurydice_glue.h" #if defined(__cplusplus) extern "C" { #endif #include "../libcrux_core.h" -#include "eurydice_glue.h" -#define CORE_NUM__U32_8__BITS (32U) +/** +A monomorphic instance of core.ops.range.Range +with types size_t + +*/ +typedef struct core_ops_range_Range_08_s { + size_t start; + size_t end; +} core_ops_range_Range_08; + +static inline uint64_t core_num__u64__from_le_bytes(uint8_t x0[8U]); -static inline uint32_t core_num__u8_6__count_ones(uint8_t x0); +static inline uint64_t core_num__u64__rotate_left(uint64_t x0, uint32_t x1); + +static inline void core_num__u64__to_le_bytes(uint64_t x0, uint8_t x1[8U]); #define LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE ((size_t)32U) @@ -45,127 +58,149 @@ void libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_i #define LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE ((size_t)32U) -typedef struct libcrux_ml_kem_utils_extraction_helper_Keypair1024_s { - uint8_t fst[1536U]; - uint8_t snd[1568U]; -} libcrux_ml_kem_utils_extraction_helper_Keypair1024; +/** + K * BITS_PER_RING_ELEMENT / 8 -typedef struct libcrux_ml_kem_utils_extraction_helper_Keypair512_s { - uint8_t fst[768U]; - uint8_t snd[800U]; -} libcrux_ml_kem_utils_extraction_helper_Keypair512; + [eurydice] Note that we can't use const generics here because that breaks + C extraction with eurydice. +*/ +size_t libcrux_ml_kem_constants_ranked_bytes_per_ring_element(size_t rank); -typedef struct libcrux_ml_kem_utils_extraction_helper_Keypair768_s { - uint8_t fst[1152U]; - uint8_t snd[1184U]; -} libcrux_ml_kem_utils_extraction_helper_Keypair768; +int16_t libcrux_secrets_int_I16(int16_t v); /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemPublicKey<SIZE>)#14} +This function found in impl {libcrux_secrets::traits::Classify<T> for T} */ /** -A monomorphic instance of libcrux_ml_kem.types.from_b6 -with const generics -- SIZE= 1568 +A monomorphic instance of libcrux_secrets.int.public_integers.classify_27 +with types int16_t + */ -libcrux_ml_kem_types_MlKemPublicKey_1f libcrux_ml_kem_types_from_b6_961( - uint8_t value[1568U]); +int16_t libcrux_secrets_int_public_integers_classify_27_39(int16_t self); /** - Create a new [`MlKemKeyPair`] from the secret and public key. +This function found in impl {libcrux_secrets::int::CastOps for u8} */ +int16_t libcrux_secrets_int_as_i16_59(uint8_t self); + /** -This function found in impl -{libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>} +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} */ /** -A monomorphic instance of libcrux_ml_kem.types.from_17 -with const generics -- PRIVATE_KEY_SIZE= 3168 -- PUBLIC_KEY_SIZE= 1568 +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types int16_t + */ -libcrux_ml_kem_mlkem1024_MlKem1024KeyPair libcrux_ml_kem_types_from_17_821( - libcrux_ml_kem_types_MlKemPrivateKey_95 sk, - libcrux_ml_kem_types_MlKemPublicKey_1f pk); +int16_t libcrux_secrets_int_public_integers_declassify_d8_39(int16_t self); /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemPrivateKey<SIZE>)#8} +This function found in impl {libcrux_secrets::int::CastOps for i16} */ +uint8_t libcrux_secrets_int_as_u8_f5(int16_t self); + /** -A monomorphic instance of libcrux_ml_kem.types.from_05 -with const generics -- SIZE= 3168 +This function found in impl {libcrux_secrets::int::CastOps for i16} */ -libcrux_ml_kem_types_MlKemPrivateKey_95 libcrux_ml_kem_types_from_05_891( - uint8_t value[3168U]); +int32_t libcrux_secrets_int_as_i32_f5(int16_t self); /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemCiphertext<SIZE>)#2} +This function found in impl {libcrux_secrets::int::CastOps for i32} */ +int16_t libcrux_secrets_int_as_i16_36(int32_t self); + /** -A monomorphic instance of libcrux_ml_kem.types.from_01 -with const generics -- SIZE= 1568 +This function found in impl {libcrux_secrets::int::CastOps for u32} */ -libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext libcrux_ml_kem_types_from_01_331( - uint8_t value[1568U]); +int32_t libcrux_secrets_int_as_i32_b8(uint32_t self); /** - A reference to the raw byte slice. +This function found in impl {libcrux_secrets::int::CastOps for i16} */ +uint16_t libcrux_secrets_int_as_u16_f5(int16_t self); + /** -This function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>#18} +This function found in impl {libcrux_secrets::int::CastOps for u16} */ +int16_t libcrux_secrets_int_as_i16_ca(uint16_t self); + /** -A monomorphic instance of libcrux_ml_kem.types.as_slice_cb -with const generics -- SIZE= 1568 +This function found in impl {libcrux_secrets::int::CastOps for u16} */ -uint8_t *libcrux_ml_kem_types_as_slice_cb_3d1( - libcrux_ml_kem_types_MlKemPublicKey_1f *self); +uint64_t libcrux_secrets_int_as_u64_ca(uint16_t self); /** -This function found in impl {(core::convert::AsRef<@Slice<u8>> for -libcrux_ml_kem::types::MlKemCiphertext<SIZE>)#1} +This function found in impl {libcrux_secrets::traits::Classify<T> for T} */ /** -A monomorphic instance of libcrux_ml_kem.types.as_ref_00 -with const generics -- SIZE= 1568 +A monomorphic instance of libcrux_secrets.int.public_integers.classify_27 +with types uint32_t + */ -Eurydice_slice libcrux_ml_kem_types_as_ref_00_d81( - libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext *self); +uint32_t libcrux_secrets_int_public_integers_classify_27_df(uint32_t self); /** - Pad the `slice` with `0`s at the end. +This function found in impl {libcrux_secrets::int::CastOps for u64} */ +uint32_t libcrux_secrets_int_as_u32_a3(uint64_t self); + /** -A monomorphic instance of libcrux_ml_kem.utils.into_padded_array +This function found in impl {libcrux_secrets::int::CastOps for u32} +*/ +int16_t libcrux_secrets_int_as_i16_b8(uint32_t self); + +/** +This function found in impl {libcrux_secrets::int::CastOps for i16} +*/ +int16_t libcrux_secrets_int_as_i16_f5(int16_t self); + +typedef struct libcrux_ml_kem_utils_extraction_helper_Keypair1024_s { + uint8_t fst[1536U]; + uint8_t snd[1568U]; +} libcrux_ml_kem_utils_extraction_helper_Keypair1024; + +typedef struct libcrux_ml_kem_utils_extraction_helper_Keypair768_s { + uint8_t fst[1152U]; + uint8_t snd[1184U]; +} libcrux_ml_kem_utils_extraction_helper_Keypair768; + +/** +This function found in impl +{libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>} +*/ +/** +A monomorphic instance of libcrux_ml_kem.types.from_17 with const generics -- LEN= 1600 +- PRIVATE_KEY_SIZE= 3168 +- PUBLIC_KEY_SIZE= 1568 */ -void libcrux_ml_kem_utils_into_padded_array_6d4(Eurydice_slice slice, - uint8_t ret[1600U]); +libcrux_ml_kem_mlkem1024_MlKem1024KeyPair libcrux_ml_kem_types_from_17_94( + libcrux_ml_kem_types_MlKemPrivateKey_83 sk, + libcrux_ml_kem_types_MlKemPublicKey_64 pk); /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemPublicKey<SIZE>)#14} +This function found in impl {core::convert::From<@Array<u8, SIZE>> for +libcrux_ml_kem::types::MlKemPrivateKey<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.from_b6 +A monomorphic instance of libcrux_ml_kem.types.from_77 with const generics -- SIZE= 1184 +- SIZE= 3168 */ -libcrux_ml_kem_types_MlKemPublicKey_15 libcrux_ml_kem_types_from_b6_960( - uint8_t value[1184U]); +libcrux_ml_kem_types_MlKemPrivateKey_83 libcrux_ml_kem_types_from_77_39( + uint8_t value[3168U]); /** - Create a new [`MlKemKeyPair`] from the secret and public key. +This function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>} */ /** +A monomorphic instance of libcrux_ml_kem.types.as_slice_a9 +with const generics +- SIZE= 1568 +*/ +uint8_t *libcrux_ml_kem_types_as_slice_a9_af( + libcrux_ml_kem_types_MlKemCiphertext_64 *self); + +/** This function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>} */ @@ -175,58 +210,112 @@ with const generics - PRIVATE_KEY_SIZE= 2400 - PUBLIC_KEY_SIZE= 1184 */ -libcrux_ml_kem_mlkem768_MlKem768KeyPair libcrux_ml_kem_types_from_17_820( - libcrux_ml_kem_types_MlKemPrivateKey_55 sk, - libcrux_ml_kem_types_MlKemPublicKey_15 pk); +libcrux_ml_kem_mlkem768_MlKem768KeyPair libcrux_ml_kem_types_from_17_74( + libcrux_ml_kem_types_MlKemPrivateKey_d9 sk, + libcrux_ml_kem_types_MlKemPublicKey_30 pk); /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemPrivateKey<SIZE>)#8} +This function found in impl {core::convert::From<@Array<u8, SIZE>> for +libcrux_ml_kem::types::MlKemPrivateKey<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.from_05 +A monomorphic instance of libcrux_ml_kem.types.from_77 with const generics - SIZE= 2400 */ -libcrux_ml_kem_types_MlKemPrivateKey_55 libcrux_ml_kem_types_from_05_890( +libcrux_ml_kem_types_MlKemPrivateKey_d9 libcrux_ml_kem_types_from_77_28( uint8_t value[2400U]); /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemCiphertext<SIZE>)#2} +This function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.from_01 +A monomorphic instance of libcrux_ml_kem.types.as_slice_a9 with const generics - SIZE= 1088 */ -libcrux_ml_kem_mlkem768_MlKem768Ciphertext libcrux_ml_kem_types_from_01_330( - uint8_t value[1088U]); +uint8_t *libcrux_ml_kem_types_as_slice_a9_80( + libcrux_ml_kem_mlkem768_MlKem768Ciphertext *self); /** - A reference to the raw byte slice. +This function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>} */ /** -This function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>#18} +A monomorphic instance of libcrux_ml_kem.types.as_slice_e6 +with const generics +- SIZE= 1184 +*/ +uint8_t *libcrux_ml_kem_types_as_slice_e6_d0( + libcrux_ml_kem_types_MlKemPublicKey_30 *self); + +/** +This function found in impl {core::convert::From<@Array<u8, SIZE>> for +libcrux_ml_kem::types::MlKemPublicKey<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.as_slice_cb +A monomorphic instance of libcrux_ml_kem.types.from_fd with const generics - SIZE= 1184 */ -uint8_t *libcrux_ml_kem_types_as_slice_cb_3d0( - libcrux_ml_kem_types_MlKemPublicKey_15 *self); +libcrux_ml_kem_types_MlKemPublicKey_30 libcrux_ml_kem_types_from_fd_d0( + uint8_t value[1184U]); + +typedef struct Eurydice_slice_uint8_t_x4_s { + Eurydice_slice fst; + Eurydice_slice snd; + Eurydice_slice thd; + Eurydice_slice f3; +} Eurydice_slice_uint8_t_x4; + +typedef struct Eurydice_slice_uint8_t_x2_s { + Eurydice_slice fst; + Eurydice_slice snd; +} Eurydice_slice_uint8_t_x2; + +/** + Unpack an incoming private key into it's different parts. + + We have this here in types to extract into a common core for C. +*/ +/** +A monomorphic instance of libcrux_ml_kem.types.unpack_private_key +with const generics +- CPA_SECRET_KEY_SIZE= 1152 +- PUBLIC_KEY_SIZE= 1184 +*/ +Eurydice_slice_uint8_t_x4 libcrux_ml_kem_types_unpack_private_key_b4( + Eurydice_slice private_key); /** -This function found in impl {(core::convert::AsRef<@Slice<u8>> for -libcrux_ml_kem::types::MlKemCiphertext<SIZE>)#1} +This function found in impl {core::convert::From<@Array<u8, SIZE>> for +libcrux_ml_kem::types::MlKemCiphertext<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.as_ref_00 +A monomorphic instance of libcrux_ml_kem.types.from_e0 with const generics - SIZE= 1088 */ -Eurydice_slice libcrux_ml_kem_types_as_ref_00_d80( +libcrux_ml_kem_mlkem768_MlKem768Ciphertext libcrux_ml_kem_types_from_e0_80( + uint8_t value[1088U]); + +/** +A monomorphic instance of libcrux_ml_kem.utils.prf_input_inc +with const generics +- K= 3 +*/ +uint8_t libcrux_ml_kem_utils_prf_input_inc_e0(uint8_t (*prf_inputs)[33U], + uint8_t domain_separator); + +/** +This function found in impl {core::convert::AsRef<@Slice<u8>> for +libcrux_ml_kem::types::MlKemCiphertext<SIZE>} +*/ +/** +A monomorphic instance of libcrux_ml_kem.types.as_ref_d3 +with const generics +- SIZE= 1088 +*/ +Eurydice_slice libcrux_ml_kem_types_as_ref_d3_80( libcrux_ml_kem_mlkem768_MlKem768Ciphertext *self); /** @@ -237,109 +326,105 @@ A monomorphic instance of libcrux_ml_kem.utils.into_padded_array with const generics - LEN= 1120 */ -void libcrux_ml_kem_utils_into_padded_array_6d3(Eurydice_slice slice, - uint8_t ret[1120U]); +void libcrux_ml_kem_utils_into_padded_array_15(Eurydice_slice slice, + uint8_t ret[1120U]); /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemPublicKey<SIZE>)#14} +This function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.from_b6 +A monomorphic instance of libcrux_ml_kem.types.as_slice_e6 with const generics -- SIZE= 800 +- SIZE= 1568 */ -libcrux_ml_kem_types_MlKemPublicKey_be libcrux_ml_kem_types_from_b6_96( - uint8_t value[800U]); +uint8_t *libcrux_ml_kem_types_as_slice_e6_af( + libcrux_ml_kem_types_MlKemPublicKey_64 *self); /** - Create a new [`MlKemKeyPair`] from the secret and public key. +This function found in impl {core::convert::From<@Array<u8, SIZE>> for +libcrux_ml_kem::types::MlKemPublicKey<SIZE>} */ /** -This function found in impl -{libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>} -*/ -/** -A monomorphic instance of libcrux_ml_kem.types.from_17 +A monomorphic instance of libcrux_ml_kem.types.from_fd with const generics -- PRIVATE_KEY_SIZE= 1632 -- PUBLIC_KEY_SIZE= 800 +- SIZE= 1568 */ -libcrux_ml_kem_types_MlKemKeyPair_cb libcrux_ml_kem_types_from_17_82( - libcrux_ml_kem_types_MlKemPrivateKey_5e sk, - libcrux_ml_kem_types_MlKemPublicKey_be pk); +libcrux_ml_kem_types_MlKemPublicKey_64 libcrux_ml_kem_types_from_fd_af( + uint8_t value[1568U]); /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemPrivateKey<SIZE>)#8} + Unpack an incoming private key into it's different parts. + + We have this here in types to extract into a common core for C. */ /** -A monomorphic instance of libcrux_ml_kem.types.from_05 +A monomorphic instance of libcrux_ml_kem.types.unpack_private_key with const generics -- SIZE= 1632 +- CPA_SECRET_KEY_SIZE= 1536 +- PUBLIC_KEY_SIZE= 1568 */ -libcrux_ml_kem_types_MlKemPrivateKey_5e libcrux_ml_kem_types_from_05_89( - uint8_t value[1632U]); +Eurydice_slice_uint8_t_x4 libcrux_ml_kem_types_unpack_private_key_1f( + Eurydice_slice private_key); + +#define core_result_Ok 0 +#define core_result_Err 1 + +typedef uint8_t core_result_Result_fb_tags; /** A monomorphic instance of core.result.Result with types uint8_t[32size_t], core_array_TryFromSliceError */ -typedef struct core_result_Result_00_s { - core_result_Result_86_tags tag; +typedef struct core_result_Result_fb_s { + core_result_Result_fb_tags tag; union { uint8_t case_Ok[32U]; core_array_TryFromSliceError case_Err; } val; -} core_result_Result_00; +} core_result_Result_fb; /** -This function found in impl {core::result::Result<T, E>} +This function found in impl {core::result::Result<T, E>[TraitClause@0, +TraitClause@1]} */ /** -A monomorphic instance of core.result.unwrap_41 +A monomorphic instance of core.result.unwrap_26 with types uint8_t[32size_t], core_array_TryFromSliceError */ -void core_result_unwrap_41_33(core_result_Result_00 self, uint8_t ret[32U]); +void core_result_unwrap_26_b3(core_result_Result_fb self, uint8_t ret[32U]); /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemCiphertext<SIZE>)#2} + Pad the `slice` with `0`s at the end. */ /** -A monomorphic instance of libcrux_ml_kem.types.from_01 +A monomorphic instance of libcrux_ml_kem.utils.into_padded_array with const generics -- SIZE= 768 +- LEN= 34 */ -libcrux_ml_kem_types_MlKemCiphertext_e8 libcrux_ml_kem_types_from_01_33( - uint8_t value[768U]); +void libcrux_ml_kem_utils_into_padded_array_b6(Eurydice_slice slice, + uint8_t ret[34U]); /** - A reference to the raw byte slice. +This function found in impl {core::convert::From<@Array<u8, SIZE>> for +libcrux_ml_kem::types::MlKemCiphertext<SIZE>} */ /** -This function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>#18} -*/ -/** -A monomorphic instance of libcrux_ml_kem.types.as_slice_cb +A monomorphic instance of libcrux_ml_kem.types.from_e0 with const generics -- SIZE= 800 +- SIZE= 1568 */ -uint8_t *libcrux_ml_kem_types_as_slice_cb_3d( - libcrux_ml_kem_types_MlKemPublicKey_be *self); +libcrux_ml_kem_types_MlKemCiphertext_64 libcrux_ml_kem_types_from_e0_af( + uint8_t value[1568U]); /** - Pad the `slice` with `0`s at the end. -*/ -/** -A monomorphic instance of libcrux_ml_kem.utils.into_padded_array +A monomorphic instance of libcrux_ml_kem.utils.prf_input_inc with const generics -- LEN= 33 +- K= 4 */ -void libcrux_ml_kem_utils_into_padded_array_6d2(Eurydice_slice slice, - uint8_t ret[33U]); +uint8_t libcrux_ml_kem_utils_prf_input_inc_ac(uint8_t (*prf_inputs)[33U], + uint8_t domain_separator); /** Pad the `slice` with `0`s at the end. @@ -347,22 +432,22 @@ void libcrux_ml_kem_utils_into_padded_array_6d2(Eurydice_slice slice, /** A monomorphic instance of libcrux_ml_kem.utils.into_padded_array with const generics -- LEN= 34 +- LEN= 33 */ -void libcrux_ml_kem_utils_into_padded_array_6d1(Eurydice_slice slice, - uint8_t ret[34U]); +void libcrux_ml_kem_utils_into_padded_array_c8(Eurydice_slice slice, + uint8_t ret[33U]); /** -This function found in impl {(core::convert::AsRef<@Slice<u8>> for -libcrux_ml_kem::types::MlKemCiphertext<SIZE>)#1} +This function found in impl {core::convert::AsRef<@Slice<u8>> for +libcrux_ml_kem::types::MlKemCiphertext<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.as_ref_00 +A monomorphic instance of libcrux_ml_kem.types.as_ref_d3 with const generics -- SIZE= 768 +- SIZE= 1568 */ -Eurydice_slice libcrux_ml_kem_types_as_ref_00_d8( - libcrux_ml_kem_types_MlKemCiphertext_e8 *self); +Eurydice_slice libcrux_ml_kem_types_as_ref_d3_af( + libcrux_ml_kem_types_MlKemCiphertext_64 *self); /** Pad the `slice` with `0`s at the end. @@ -370,10 +455,10 @@ Eurydice_slice libcrux_ml_kem_types_as_ref_00_d8( /** A monomorphic instance of libcrux_ml_kem.utils.into_padded_array with const generics -- LEN= 800 +- LEN= 1600 */ -void libcrux_ml_kem_utils_into_padded_array_6d0(Eurydice_slice slice, - uint8_t ret[800U]); +void libcrux_ml_kem_utils_into_padded_array_7f(Eurydice_slice slice, + uint8_t ret[1600U]); /** Pad the `slice` with `0`s at the end. @@ -383,109 +468,185 @@ A monomorphic instance of libcrux_ml_kem.utils.into_padded_array with const generics - LEN= 64 */ -void libcrux_ml_kem_utils_into_padded_array_6d(Eurydice_slice slice, +void libcrux_ml_kem_utils_into_padded_array_24(Eurydice_slice slice, uint8_t ret[64U]); /** -A monomorphic instance of core.result.Result -with types uint8_t[24size_t], core_array_TryFromSliceError +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint8_t[24size_t] */ -typedef struct core_result_Result_6f_s { - core_result_Result_86_tags tag; - union { - uint8_t case_Ok[24U]; - core_array_TryFromSliceError case_Err; - } val; -} core_result_Result_6f; +void libcrux_secrets_int_public_integers_declassify_d8_d2(uint8_t self[24U], + uint8_t ret[24U]); /** -This function found in impl {core::result::Result<T, E>} +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} */ /** -A monomorphic instance of core.result.unwrap_41 -with types uint8_t[24size_t], core_array_TryFromSliceError +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint8_t[22size_t] */ -void core_result_unwrap_41_76(core_result_Result_6f self, uint8_t ret[24U]); +void libcrux_secrets_int_public_integers_declassify_d8_fa(uint8_t self[22U], + uint8_t ret[22U]); /** -A monomorphic instance of core.result.Result -with types uint8_t[20size_t], core_array_TryFromSliceError +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint8_t[20size_t] */ -typedef struct core_result_Result_7a_s { - core_result_Result_86_tags tag; - union { - uint8_t case_Ok[20U]; - core_array_TryFromSliceError case_Err; - } val; -} core_result_Result_7a; +void libcrux_secrets_int_public_integers_declassify_d8_57(uint8_t self[20U], + uint8_t ret[20U]); /** -This function found in impl {core::result::Result<T, E>} +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} */ /** -A monomorphic instance of core.result.unwrap_41 -with types uint8_t[20size_t], core_array_TryFromSliceError +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint8_t[10size_t] */ -void core_result_unwrap_41_ea(core_result_Result_7a self, uint8_t ret[20U]); +void libcrux_secrets_int_public_integers_declassify_d8_cc(uint8_t self[10U], + uint8_t ret[10U]); /** -A monomorphic instance of core.result.Result -with types uint8_t[10size_t], core_array_TryFromSliceError +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint8_t[8size_t] */ -typedef struct core_result_Result_cd_s { - core_result_Result_86_tags tag; - union { - uint8_t case_Ok[10U]; - core_array_TryFromSliceError case_Err; - } val; -} core_result_Result_cd; +void libcrux_secrets_int_public_integers_declassify_d8_76(uint8_t self[8U], + uint8_t ret[8U]); + +/** +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint8_t[2size_t] + +*/ +void libcrux_secrets_int_public_integers_declassify_d8_d4(uint8_t self[2U], + uint8_t ret[2U]); + +/** + Classify a mutable slice (identity) + We define a separate function for this because hax has limited support for + &mut-returning functions +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.classify_mut_slice +with types Eurydice_slice uint8_t + +*/ +Eurydice_slice libcrux_secrets_int_public_integers_classify_mut_slice_ba( + Eurydice_slice x); + +/** +This function found in impl {libcrux_secrets::traits::ClassifyRef<&'a +(@Slice<T>)> for &'a (@Slice<T>)} +*/ +/** +A monomorphic instance of libcrux_secrets.int.classify_public.classify_ref_9b +with types uint8_t + +*/ +Eurydice_slice libcrux_secrets_int_classify_public_classify_ref_9b_90( + Eurydice_slice self); + +/** +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types int16_t[16size_t] + +*/ +void libcrux_secrets_int_public_integers_declassify_d8_46(int16_t self[16U], + int16_t ret[16U]); /** -This function found in impl {core::result::Result<T, E>} +This function found in impl {libcrux_secrets::traits::ClassifyRef<&'a +(@Slice<T>)> for &'a (@Slice<T>)} */ /** -A monomorphic instance of core.result.unwrap_41 -with types uint8_t[10size_t], core_array_TryFromSliceError +A monomorphic instance of libcrux_secrets.int.classify_public.classify_ref_9b +with types int16_t */ -void core_result_unwrap_41_07(core_result_Result_cd self, uint8_t ret[10U]); +Eurydice_slice libcrux_secrets_int_classify_public_classify_ref_9b_39( + Eurydice_slice self); /** A monomorphic instance of core.result.Result with types int16_t[16size_t], core_array_TryFromSliceError */ -typedef struct core_result_Result_c0_s { - core_result_Result_86_tags tag; +typedef struct core_result_Result_0a_s { + core_result_Result_fb_tags tag; union { int16_t case_Ok[16U]; core_array_TryFromSliceError case_Err; } val; -} core_result_Result_c0; +} core_result_Result_0a; /** -This function found in impl {core::result::Result<T, E>} +This function found in impl {core::result::Result<T, E>[TraitClause@0, +TraitClause@1]} */ /** -A monomorphic instance of core.result.unwrap_41 +A monomorphic instance of core.result.unwrap_26 with types int16_t[16size_t], core_array_TryFromSliceError */ -void core_result_unwrap_41_30(core_result_Result_c0 self, int16_t ret[16U]); +void core_result_unwrap_26_00(core_result_Result_0a self, int16_t ret[16U]); -typedef struct Eurydice_slice_uint8_t_4size_t__x2_s { - Eurydice_slice fst[4U]; - Eurydice_slice snd[4U]; -} Eurydice_slice_uint8_t_4size_t__x2; +/** +This function found in impl {libcrux_secrets::traits::Classify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.classify_27 +with types int16_t[16size_t] + +*/ +void libcrux_secrets_int_public_integers_classify_27_46(int16_t self[16U], + int16_t ret[16U]); + +/** +A monomorphic instance of core.result.Result +with types uint8_t[8size_t], core_array_TryFromSliceError + +*/ +typedef struct core_result_Result_15_s { + core_result_Result_fb_tags tag; + union { + uint8_t case_Ok[8U]; + core_array_TryFromSliceError case_Err; + } val; +} core_result_Result_15; + +/** +This function found in impl {core::result::Result<T, E>[TraitClause@0, +TraitClause@1]} +*/ +/** +A monomorphic instance of core.result.unwrap_26 +with types uint8_t[8size_t], core_array_TryFromSliceError + +*/ +void core_result_unwrap_26_68(core_result_Result_15 self, uint8_t ret[8U]); #if defined(__cplusplus) } #endif -#define __internal_libcrux_core_H_DEFINED -#endif +#define internal_libcrux_core_H_DEFINED +#endif /* internal_libcrux_core_H */ diff --git a/security/nss/lib/freebl/verified/internal/libcrux_mlkem_portable.h b/security/nss/lib/freebl/verified/internal/libcrux_mlkem_portable.h @@ -1,42 +1,36 @@ /* - * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com> + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> * * SPDX-License-Identifier: MIT or Apache-2.0 * * This code was generated with the following revisions: - * Charon: b351338f6a84c7a1afc27433eb0ffdc668b3581d - * Eurydice: 7efec1624422fd5e94388ef06b9c76dfe7a48d46 - * Karamel: c96fb69d15693284644d6aecaa90afa37e4de8f0 - * F*: 58c915a86a2c07c8eca8d9deafd76cb7a91f0eb7 - * Libcrux: 6ff01fb3c57ff29ecb59bc62d9dc7fd231060cfb + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc */ -#ifndef __internal_libcrux_mlkem_portable_H -#define __internal_libcrux_mlkem_portable_H +#ifndef internal_libcrux_mlkem_portable_H +#define internal_libcrux_mlkem_portable_H + +#include "eurydice_glue.h" #if defined(__cplusplus) extern "C" { #endif #include "../libcrux_mlkem_portable.h" -#include "eurydice_glue.h" -#include "internal/libcrux_core.h" -#include "internal/libcrux_sha3_internal.h" - -extern const int16_t libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[128U]; - -#define LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT \ - (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / \ - LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR) +#include "libcrux_core.h" /** A monomorphic instance of libcrux_ml_kem.polynomial.PolynomialRingElement with types libcrux_ml_kem_vector_portable_vector_type_PortableVector */ -typedef struct libcrux_ml_kem_polynomial_PolynomialRingElement_f0_s { +typedef struct libcrux_ml_kem_polynomial_PolynomialRingElement_1d_s { libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficients[16U]; -} libcrux_ml_kem_polynomial_PolynomialRingElement_f0; +} libcrux_ml_kem_polynomial_PolynomialRingElement_1d; /** Validate an ML-KEM public key. @@ -50,10 +44,24 @@ A monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - K= 4 -- RANKED_BYTES_PER_RING_ELEMENT= 1536 - PUBLIC_KEY_SIZE= 1568 */ -bool libcrux_ml_kem_ind_cca_validate_public_key_b71(uint8_t *public_key); +bool libcrux_ml_kem_ind_cca_validate_public_key_ff(uint8_t *public_key); + +/** + Validate an ML-KEM private key. + + This implements the Hash check in 7.3 3. +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only +with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] +with const generics +- K= 4 +- SECRET_KEY_SIZE= 3168 +*/ +bool libcrux_ml_kem_ind_cca_validate_private_key_only_60( + libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key); /** Validate an ML-KEM private key. @@ -70,9 +78,9 @@ with const generics - SECRET_KEY_SIZE= 3168 - CIPHERTEXT_SIZE= 1568 */ -bool libcrux_ml_kem_ind_cca_validate_private_key_dc( - libcrux_ml_kem_types_MlKemPrivateKey_95 *private_key, - libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext *_ciphertext); +bool libcrux_ml_kem_ind_cca_validate_private_key_b5( + libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key, + libcrux_ml_kem_types_MlKemCiphertext_64 *_ciphertext); /** Packed API @@ -91,12 +99,11 @@ libcrux_ml_kem_variant_MlKem with const generics - CPA_PRIVATE_KEY_SIZE= 1536 - PRIVATE_KEY_SIZE= 3168 - PUBLIC_KEY_SIZE= 1568 -- BYTES_PER_RING_ELEMENT= 1536 - ETA1= 2 - ETA1_RANDOMNESS_SIZE= 128 */ libcrux_ml_kem_mlkem1024_MlKem1024KeyPair -libcrux_ml_kem_ind_cca_generate_keypair_f61(uint8_t randomness[64U]); +libcrux_ml_kem_ind_cca_generate_keypair_150(uint8_t *randomness); /** A monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate @@ -111,17 +118,19 @@ libcrux_ml_kem_variant_MlKem with const generics - C2_SIZE= 160 - VECTOR_U_COMPRESSION_FACTOR= 11 - VECTOR_V_COMPRESSION_FACTOR= 5 -- VECTOR_U_BLOCK_LEN= 352 +- C1_BLOCK_SIZE= 352 - ETA1= 2 - ETA1_RANDOMNESS_SIZE= 128 - ETA2= 2 - ETA2_RANDOMNESS_SIZE= 128 */ -tuple_21 libcrux_ml_kem_ind_cca_encapsulate_eb1( - libcrux_ml_kem_types_MlKemPublicKey_1f *public_key, - uint8_t randomness[32U]); +tuple_fa libcrux_ml_kem_ind_cca_encapsulate_ca0( + libcrux_ml_kem_types_MlKemPublicKey_64 *public_key, uint8_t *randomness); /** + This code verifies on some machines, runs out of memory on others +*/ +/** A monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], @@ -143,9 +152,9 @@ libcrux_ml_kem_variant_MlKem with const generics - ETA2_RANDOMNESS_SIZE= 128 - IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600 */ -void libcrux_ml_kem_ind_cca_decapsulate_1f1( - libcrux_ml_kem_types_MlKemPrivateKey_95 *private_key, - libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext *ciphertext, uint8_t ret[32U]); +void libcrux_ml_kem_ind_cca_decapsulate_620( + libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key, + libcrux_ml_kem_types_MlKemCiphertext_64 *ciphertext, uint8_t ret[32U]); /** Validate an ML-KEM public key. @@ -158,120 +167,25 @@ void libcrux_ml_kem_ind_cca_decapsulate_1f1( A monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- K= 2 -- RANKED_BYTES_PER_RING_ELEMENT= 768 -- PUBLIC_KEY_SIZE= 800 +- K= 3 +- PUBLIC_KEY_SIZE= 1184 */ -bool libcrux_ml_kem_ind_cca_validate_public_key_b70(uint8_t *public_key); +bool libcrux_ml_kem_ind_cca_validate_public_key_89(uint8_t *public_key); /** Validate an ML-KEM private key. This implements the Hash check in 7.3 3. - Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE` - and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types. -*/ -/** -A monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key -with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]] -with const generics -- K= 2 -- SECRET_KEY_SIZE= 1632 -- CIPHERTEXT_SIZE= 768 -*/ -bool libcrux_ml_kem_ind_cca_validate_private_key_03( - libcrux_ml_kem_types_MlKemPrivateKey_5e *private_key, - libcrux_ml_kem_types_MlKemCiphertext_e8 *_ciphertext); - -/** - Packed API - - Generate a key pair. - - Depending on the `Vector` and `Hasher` used, this requires different hardware - features -*/ -/** -A monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], -libcrux_ml_kem_variant_MlKem with const generics -- K= 2 -- CPA_PRIVATE_KEY_SIZE= 768 -- PRIVATE_KEY_SIZE= 1632 -- PUBLIC_KEY_SIZE= 800 -- BYTES_PER_RING_ELEMENT= 768 -- ETA1= 3 -- ETA1_RANDOMNESS_SIZE= 192 */ -libcrux_ml_kem_types_MlKemKeyPair_cb -libcrux_ml_kem_ind_cca_generate_keypair_f60(uint8_t randomness[64U]); - /** -A monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], -libcrux_ml_kem_variant_MlKem with const generics -- K= 2 -- CIPHERTEXT_SIZE= 768 -- PUBLIC_KEY_SIZE= 800 -- T_AS_NTT_ENCODED_SIZE= 768 -- C1_SIZE= 640 -- C2_SIZE= 128 -- VECTOR_U_COMPRESSION_FACTOR= 10 -- VECTOR_V_COMPRESSION_FACTOR= 4 -- VECTOR_U_BLOCK_LEN= 320 -- ETA1= 3 -- ETA1_RANDOMNESS_SIZE= 192 -- ETA2= 2 -- ETA2_RANDOMNESS_SIZE= 128 -*/ -tuple_ec libcrux_ml_kem_ind_cca_encapsulate_eb0( - libcrux_ml_kem_types_MlKemPublicKey_be *public_key, - uint8_t randomness[32U]); - -/** -A monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], -libcrux_ml_kem_variant_MlKem with const generics -- K= 2 -- SECRET_KEY_SIZE= 1632 -- CPA_SECRET_KEY_SIZE= 768 -- PUBLIC_KEY_SIZE= 800 -- CIPHERTEXT_SIZE= 768 -- T_AS_NTT_ENCODED_SIZE= 768 -- C1_SIZE= 640 -- C2_SIZE= 128 -- VECTOR_U_COMPRESSION_FACTOR= 10 -- VECTOR_V_COMPRESSION_FACTOR= 4 -- C1_BLOCK_SIZE= 320 -- ETA1= 3 -- ETA1_RANDOMNESS_SIZE= 192 -- ETA2= 2 -- ETA2_RANDOMNESS_SIZE= 128 -- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800 -*/ -void libcrux_ml_kem_ind_cca_decapsulate_1f0( - libcrux_ml_kem_types_MlKemPrivateKey_5e *private_key, - libcrux_ml_kem_types_MlKemCiphertext_e8 *ciphertext, uint8_t ret[32U]); - -/** - Validate an ML-KEM public key. - - This implements the Modulus check in 7.2 2. - Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the - `public_key` type. -*/ -/** -A monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +A monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only +with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const generics - K= 3 -- RANKED_BYTES_PER_RING_ELEMENT= 1152 -- PUBLIC_KEY_SIZE= 1184 +- SECRET_KEY_SIZE= 2400 */ -bool libcrux_ml_kem_ind_cca_validate_public_key_b7(uint8_t *public_key); +bool libcrux_ml_kem_ind_cca_validate_private_key_only_d6( + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key); /** Validate an ML-KEM private key. @@ -288,8 +202,8 @@ with const generics - SECRET_KEY_SIZE= 2400 - CIPHERTEXT_SIZE= 1088 */ -bool libcrux_ml_kem_ind_cca_validate_private_key_05( - libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key, +bool libcrux_ml_kem_ind_cca_validate_private_key_37( + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key, libcrux_ml_kem_mlkem768_MlKem768Ciphertext *_ciphertext); /** @@ -309,12 +223,11 @@ libcrux_ml_kem_variant_MlKem with const generics - CPA_PRIVATE_KEY_SIZE= 1152 - PRIVATE_KEY_SIZE= 2400 - PUBLIC_KEY_SIZE= 1184 -- BYTES_PER_RING_ELEMENT= 1152 - ETA1= 2 - ETA1_RANDOMNESS_SIZE= 128 */ libcrux_ml_kem_mlkem768_MlKem768KeyPair -libcrux_ml_kem_ind_cca_generate_keypair_f6(uint8_t randomness[64U]); +libcrux_ml_kem_ind_cca_generate_keypair_15(uint8_t *randomness); /** A monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate @@ -329,17 +242,19 @@ libcrux_ml_kem_variant_MlKem with const generics - C2_SIZE= 128 - VECTOR_U_COMPRESSION_FACTOR= 10 - VECTOR_V_COMPRESSION_FACTOR= 4 -- VECTOR_U_BLOCK_LEN= 320 +- C1_BLOCK_SIZE= 320 - ETA1= 2 - ETA1_RANDOMNESS_SIZE= 128 - ETA2= 2 - ETA2_RANDOMNESS_SIZE= 128 */ -tuple_3c libcrux_ml_kem_ind_cca_encapsulate_eb( - libcrux_ml_kem_types_MlKemPublicKey_15 *public_key, - uint8_t randomness[32U]); +tuple_c2 libcrux_ml_kem_ind_cca_encapsulate_ca( + libcrux_ml_kem_types_MlKemPublicKey_30 *public_key, uint8_t *randomness); /** + This code verifies on some machines, runs out of memory on others +*/ +/** A monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], @@ -361,13 +276,13 @@ libcrux_ml_kem_variant_MlKem with const generics - ETA2_RANDOMNESS_SIZE= 128 - IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120 */ -void libcrux_ml_kem_ind_cca_decapsulate_1f( - libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key, +void libcrux_ml_kem_ind_cca_decapsulate_62( + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key, libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext, uint8_t ret[32U]); #if defined(__cplusplus) } #endif -#define __internal_libcrux_mlkem_portable_H_DEFINED -#endif +#define internal_libcrux_mlkem_portable_H_DEFINED +#endif /* internal_libcrux_mlkem_portable_H */ diff --git a/security/nss/lib/freebl/verified/internal/libcrux_sha3_internal.h b/security/nss/lib/freebl/verified/internal/libcrux_sha3_internal.h @@ -1,1539 +1,26 @@ /* - * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com> + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> * * SPDX-License-Identifier: MIT or Apache-2.0 * * This code was generated with the following revisions: - * Charon: b351338f6a84c7a1afc27433eb0ffdc668b3581d - * Eurydice: 7efec1624422fd5e94388ef06b9c76dfe7a48d46 - * Karamel: c96fb69d15693284644d6aecaa90afa37e4de8f0 - * F*: 58c915a86a2c07c8eca8d9deafd76cb7a91f0eb7 - * Libcrux: 6ff01fb3c57ff29ecb59bc62d9dc7fd231060cfb + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc */ -#ifndef __internal_libcrux_sha3_internal_H -#define __internal_libcrux_sha3_internal_H +#ifndef internal_libcrux_sha3_internal_H +#define internal_libcrux_sha3_internal_H + +#include "eurydice_glue.h" #if defined(__cplusplus) extern "C" { #endif #include "../libcrux_sha3_internal.h" -#include "eurydice_glue.h" - -typedef libcrux_sha3_generic_keccak_KeccakState_48 - libcrux_sha3_portable_KeccakState; - -/** - Create a new SHAKE-128 state object. -*/ -static KRML_MUSTINLINE libcrux_sha3_generic_keccak_KeccakState_48 -libcrux_sha3_portable_incremental_shake128_init(void) -{ - return libcrux_sha3_generic_keccak_new_1e_cf(); -} - -/** - Absorb -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_incremental_shake128_absorb_final( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice data0) -{ - Eurydice_slice buf[1U] = { data0 }; - libcrux_sha3_generic_keccak_absorb_final_40(s, buf); -} - -/** - Squeeze another block -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_incremental_shake128_squeeze_next_block( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out0) -{ - Eurydice_slice buf[1U] = { out0 }; - libcrux_sha3_generic_keccak_squeeze_next_block_c2(s, buf); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_three_blocks -with types uint64_t -with const generics -- N= 1 -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_first_three_blocks_5c( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - Eurydice_slice_uint8_t_1size_t__x2 uu____0 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)168U); - Eurydice_slice o0[1U]; - memcpy(o0, uu____0.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice o10[1U]; - memcpy(o10, uu____0.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_first_block_7b(s, o0); - Eurydice_slice_uint8_t_1size_t__x2 uu____1 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(o10, (size_t)168U); - Eurydice_slice o1[1U]; - memcpy(o1, uu____1.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice o2[1U]; - memcpy(o2, uu____1.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_next_block_c2(s, o1); - libcrux_sha3_generic_keccak_squeeze_next_block_c2(s, o2); -} - -/** - Squeeze three blocks -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out0) -{ - Eurydice_slice buf[1U] = { out0 }; - libcrux_sha3_generic_keccak_squeeze_first_three_blocks_5c(s, buf); -} - -#define libcrux_sha3_Sha224 0 -#define libcrux_sha3_Sha256 1 -#define libcrux_sha3_Sha384 2 -#define libcrux_sha3_Sha512 3 - -typedef uint8_t libcrux_sha3_Algorithm; - -/** - Returns the output size of a digest. -*/ -static inline size_t -libcrux_sha3_digest_size(libcrux_sha3_Algorithm mode) -{ - size_t uu____0; - switch (mode) { - case libcrux_sha3_Sha224: { - uu____0 = (size_t)28U; - break; - } - case libcrux_sha3_Sha256: { - uu____0 = (size_t)32U; - break; - } - case libcrux_sha3_Sha384: { - uu____0 = (size_t)48U; - break; - } - case libcrux_sha3_Sha512: { - uu____0 = (size_t)64U; - break; - } - default: { - KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__, - __LINE__); - KRML_HOST_EXIT(253U); - } - } - return uu____0; -} - -static const size_t libcrux_sha3_generic_keccak__PI[24U] = { - (size_t)6U, (size_t)12U, (size_t)18U, (size_t)24U, (size_t)3U, - (size_t)9U, (size_t)10U, (size_t)16U, (size_t)22U, (size_t)1U, - (size_t)7U, (size_t)13U, (size_t)19U, (size_t)20U, (size_t)4U, - (size_t)5U, (size_t)11U, (size_t)17U, (size_t)23U, (size_t)2U, - (size_t)8U, (size_t)14U, (size_t)15U, (size_t)21U -}; - -static const size_t libcrux_sha3_generic_keccak__ROTC[24U] = { - (size_t)1U, (size_t)62U, (size_t)28U, (size_t)27U, (size_t)36U, - (size_t)44U, (size_t)6U, (size_t)55U, (size_t)20U, (size_t)3U, - (size_t)10U, (size_t)43U, (size_t)25U, (size_t)39U, (size_t)41U, - (size_t)45U, (size_t)15U, (size_t)21U, (size_t)8U, (size_t)18U, - (size_t)2U, (size_t)61U, (size_t)56U, (size_t)14U -}; - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_five_blocks -with types uint64_t -with const generics -- N= 1 -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_first_five_blocks_3e( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - Eurydice_slice_uint8_t_1size_t__x2 uu____0 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)168U); - Eurydice_slice o0[1U]; - memcpy(o0, uu____0.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice o10[1U]; - memcpy(o10, uu____0.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_first_block_7b(s, o0); - Eurydice_slice_uint8_t_1size_t__x2 uu____1 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(o10, (size_t)168U); - Eurydice_slice o1[1U]; - memcpy(o1, uu____1.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice o20[1U]; - memcpy(o20, uu____1.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_next_block_c2(s, o1); - Eurydice_slice_uint8_t_1size_t__x2 uu____2 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(o20, (size_t)168U); - Eurydice_slice o2[1U]; - memcpy(o2, uu____2.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice o30[1U]; - memcpy(o30, uu____2.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_next_block_c2(s, o2); - Eurydice_slice_uint8_t_1size_t__x2 uu____3 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(o30, (size_t)168U); - Eurydice_slice o3[1U]; - memcpy(o3, uu____3.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice o4[1U]; - memcpy(o4, uu____3.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_next_block_c2(s, o3); - libcrux_sha3_generic_keccak_squeeze_next_block_c2(s, o4); -} - -/** - Squeeze five blocks -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out0) -{ - Eurydice_slice buf[1U] = { out0 }; - libcrux_sha3_generic_keccak_squeeze_first_five_blocks_3e(s, buf); -} - -/** - Absorb some data for SHAKE-256 for the last time -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_incremental_shake256_absorb_final( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice data) -{ - Eurydice_slice buf[1U] = { data }; - libcrux_sha3_generic_keccak_absorb_final_400(s, buf); -} - -/** - Create a new SHAKE-256 state object. -*/ -static KRML_MUSTINLINE libcrux_sha3_generic_keccak_KeccakState_48 -libcrux_sha3_portable_incremental_shake256_init(void) -{ - return libcrux_sha3_generic_keccak_new_1e_cf(); -} - -/** - Squeeze the first SHAKE-256 block -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_incremental_shake256_squeeze_first_block( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out) -{ - Eurydice_slice buf[1U] = { out }; - libcrux_sha3_generic_keccak_squeeze_first_block_7b0(s, buf); -} - -/** - Squeeze the next SHAKE-256 block -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_incremental_shake256_squeeze_next_block( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out) -{ - Eurydice_slice buf[1U] = { out }; - libcrux_sha3_generic_keccak_squeeze_next_block_c20(s, buf); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.KeccakXofState -with types uint64_t -with const generics -- $1size_t -- $136size_t -*/ -typedef struct libcrux_sha3_generic_keccak_KeccakXofState_4f_s { - libcrux_sha3_generic_keccak_KeccakState_48 inner; - uint8_t buf[1U][136U]; - size_t buf_len; - bool sponge; -} libcrux_sha3_generic_keccak_KeccakXofState_4f; - -typedef libcrux_sha3_generic_keccak_KeccakXofState_4f - libcrux_sha3_portable_incremental_Shake256Absorb; - -/** - Consume the internal buffer and the required amount of the input to pad to - `RATE`. - - Returns the `consumed` bytes from `inputs` if there's enough buffered - content to consume, and `0` otherwise. - If `consumed > 0` is returned, `self.buf` contains a full block to be - loaded. -*/ -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE, -PARALLEL_LANES, RATE>[TraitClause@0]#2} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.fill_buffer_9d -with types uint64_t -with const generics -- PARALLEL_LANES= 1 -- RATE= 136 -*/ -static inline size_t -libcrux_sha3_generic_keccak_fill_buffer_9d_15( - libcrux_sha3_generic_keccak_KeccakXofState_4f *self, - Eurydice_slice inputs[1U]) -{ - size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); - size_t consumed = (size_t)0U; - if (self->buf_len > (size_t)0U) { - if (self->buf_len + input_len >= (size_t)136U) { - consumed = (size_t)136U - self->buf_len; - { - size_t i = (size_t)0U; - Eurydice_slice uu____0 = Eurydice_array_to_subslice_from( - (size_t)136U, self->buf[i], self->buf_len, uint8_t, size_t); - Eurydice_slice_copy( - uu____0, - Eurydice_slice_subslice_to(inputs[i], consumed, uint8_t, size_t), - uint8_t); - } - self->buf_len = self->buf_len + consumed; - } - } - return consumed; -} - -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE, -PARALLEL_LANES, RATE>[TraitClause@0]#2} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_full_9d -with types uint64_t -with const generics -- PARALLEL_LANES= 1 -- RATE= 136 -*/ -static inline size_t -libcrux_sha3_generic_keccak_absorb_full_9d_7a( - libcrux_sha3_generic_keccak_KeccakXofState_4f *self, - Eurydice_slice inputs[1U]) -{ - libcrux_sha3_generic_keccak_KeccakXofState_4f *uu____0 = self; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_inputs0[1U]; - memcpy(copy_of_inputs0, inputs, (size_t)1U * sizeof(Eurydice_slice)); - size_t input_consumed = - libcrux_sha3_generic_keccak_fill_buffer_9d_15(uu____0, copy_of_inputs0); - if (input_consumed > (size_t)0U) { - Eurydice_slice borrowed[1U]; - { - uint8_t buf[136U] = { 0U }; - borrowed[0U] = core_array___Array_T__N__23__as_slice( - (size_t)136U, buf, uint8_t, Eurydice_slice); - } - { - size_t i = (size_t)0U; - borrowed[i] = - Eurydice_array_to_slice((size_t)136U, self->buf[i], uint8_t); - } - uint64_t(*uu____2)[5U] = self->inner.st; - Eurydice_slice uu____3[1U]; - memcpy(uu____3, borrowed, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_portable_keccak_load_block_5a_35(uu____2, uu____3); - libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); - self->buf_len = (size_t)0U; - } - size_t input_to_consume = - Eurydice_slice_len(inputs[0U], uint8_t) - input_consumed; - size_t num_blocks = input_to_consume / (size_t)136U; - size_t remainder = input_to_consume % (size_t)136U; - for (size_t i = (size_t)0U; i < num_blocks; i++) { - size_t i0 = i; - uint64_t(*uu____4)[5U] = self->inner.st; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_inputs[1U]; - memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret[1U]; - libcrux_sha3_portable_keccak_slice_n_5a( - copy_of_inputs, input_consumed + i0 * (size_t)136U, (size_t)136U, ret); - libcrux_sha3_portable_keccak_load_block_5a_35(uu____4, ret); - libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); - } - return remainder; -} - -/** - Absorb - - This function takes any number of bytes to absorb and buffers if it's not - enough. The function assumes that all input slices in `blocks` have the same - length. - - Only a multiple of `RATE` blocks are absorbed. - For the remaining bytes [`absorb_final`] needs to be called. - - This works best with relatively small `inputs`. -*/ -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE, -PARALLEL_LANES, RATE>[TraitClause@0]#2} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_9d -with types uint64_t -with const generics -- PARALLEL_LANES= 1 -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_9d_45( - libcrux_sha3_generic_keccak_KeccakXofState_4f *self, - Eurydice_slice inputs[1U]) -{ - libcrux_sha3_generic_keccak_KeccakXofState_4f *uu____0 = self; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_inputs[1U]; - memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice)); - size_t input_remainder_len = - libcrux_sha3_generic_keccak_absorb_full_9d_7a(uu____0, copy_of_inputs); - if (input_remainder_len > (size_t)0U) { - size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); - { - size_t i = (size_t)0U; - Eurydice_slice uu____2 = Eurydice_array_to_subslice2( - self->buf[i], self->buf_len, self->buf_len + input_remainder_len, - uint8_t); - Eurydice_slice_copy( - uu____2, - Eurydice_slice_subslice_from( - inputs[i], input_len - input_remainder_len, uint8_t, size_t), - uint8_t); - } - self->buf_len = self->buf_len + input_remainder_len; - } -} - -/** - Shake256 absorb -*/ -/** -This function found in impl -{(libcrux_sha3::portable::incremental::XofAbsorb<136: usize> for -libcrux_sha3::portable::incremental::Shake256Absorb)#2} -*/ -static inline void -libcrux_sha3_portable_incremental_absorb_7d( - libcrux_sha3_generic_keccak_KeccakXofState_4f *self, Eurydice_slice input) -{ - Eurydice_slice buf[1U] = { input }; - libcrux_sha3_generic_keccak_absorb_9d_45(self, buf); -} - -typedef libcrux_sha3_generic_keccak_KeccakXofState_4f - libcrux_sha3_portable_incremental_Shake256Squeeze; - -/** - Absorb a final block. - - The `inputs` block may be empty. Everything in the `inputs` block beyond - `RATE` bytes is ignored. -*/ -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE, -PARALLEL_LANES, RATE>[TraitClause@0]#2} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_9d -with types uint64_t -with const generics -- PARALLEL_LANES= 1 -- RATE= 136 -- DELIMITER= 31 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_final_9d_b6( - libcrux_sha3_generic_keccak_KeccakXofState_4f *self, - Eurydice_slice inputs[1U]) -{ - libcrux_sha3_generic_keccak_KeccakXofState_4f *uu____0 = self; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_inputs[1U]; - memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice)); - size_t input_remainder_len = - libcrux_sha3_generic_keccak_absorb_full_9d_7a(uu____0, copy_of_inputs); - size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); - uint8_t blocks[1U][200U] = { { 0U } }; - { - size_t i = (size_t)0U; - if (self->buf_len > (size_t)0U) { - Eurydice_slice uu____2 = Eurydice_array_to_subslice2( - blocks[i], (size_t)0U, self->buf_len, uint8_t); - Eurydice_slice_copy(uu____2, - Eurydice_array_to_subslice2(self->buf[i], (size_t)0U, - self->buf_len, uint8_t), - uint8_t); - } - if (input_remainder_len > (size_t)0U) { - Eurydice_slice uu____3 = Eurydice_array_to_subslice2( - blocks[i], self->buf_len, self->buf_len + input_remainder_len, - uint8_t); - Eurydice_slice_copy( - uu____3, - Eurydice_slice_subslice_from( - inputs[i], input_len - input_remainder_len, uint8_t, size_t), - uint8_t); - } - blocks[i][self->buf_len + input_remainder_len] = 31U; - size_t uu____4 = i; - size_t uu____5 = (size_t)136U - (size_t)1U; - blocks[uu____4][uu____5] = (uint32_t)blocks[uu____4][uu____5] | 128U; - } - uint64_t(*uu____6)[5U] = self->inner.st; - uint8_t uu____7[1U][200U]; - memcpy(uu____7, blocks, (size_t)1U * sizeof(uint8_t[200U])); - libcrux_sha3_portable_keccak_load_block_full_5a_050(uu____6, uu____7); - libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); -} - -/** - Shake256 absorb final -*/ -/** -This function found in impl -{(libcrux_sha3::portable::incremental::XofAbsorb<136: usize> for -libcrux_sha3::portable::incremental::Shake256Absorb)#2} -*/ -static inline libcrux_sha3_generic_keccak_KeccakXofState_4f -libcrux_sha3_portable_incremental_absorb_final_7d( - libcrux_sha3_generic_keccak_KeccakXofState_4f self, Eurydice_slice input) -{ - Eurydice_slice buf[1U] = { input }; - libcrux_sha3_generic_keccak_absorb_final_9d_b6(&self, buf); - return self; -} - -/** - An all zero block -*/ -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE, -PARALLEL_LANES, RATE>[TraitClause@0]#2} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.zero_block_9d -with types uint64_t -with const generics -- PARALLEL_LANES= 1 -- RATE= 136 -*/ -static inline void -libcrux_sha3_generic_keccak_zero_block_9d_5e( - uint8_t ret[136U]) -{ - ret[0U] = 0U; - ret[1U] = 0U; - ret[2U] = 0U; - ret[3U] = 0U; - ret[4U] = 0U; - ret[5U] = 0U; - ret[6U] = 0U; - ret[7U] = 0U; - ret[8U] = 0U; - ret[9U] = 0U; - ret[10U] = 0U; - ret[11U] = 0U; - ret[12U] = 0U; - ret[13U] = 0U; - ret[14U] = 0U; - ret[15U] = 0U; - ret[16U] = 0U; - ret[17U] = 0U; - ret[18U] = 0U; - ret[19U] = 0U; - ret[20U] = 0U; - ret[21U] = 0U; - ret[22U] = 0U; - ret[23U] = 0U; - ret[24U] = 0U; - ret[25U] = 0U; - ret[26U] = 0U; - ret[27U] = 0U; - ret[28U] = 0U; - ret[29U] = 0U; - ret[30U] = 0U; - ret[31U] = 0U; - ret[32U] = 0U; - ret[33U] = 0U; - ret[34U] = 0U; - ret[35U] = 0U; - ret[36U] = 0U; - ret[37U] = 0U; - ret[38U] = 0U; - ret[39U] = 0U; - ret[40U] = 0U; - ret[41U] = 0U; - ret[42U] = 0U; - ret[43U] = 0U; - ret[44U] = 0U; - ret[45U] = 0U; - ret[46U] = 0U; - ret[47U] = 0U; - ret[48U] = 0U; - ret[49U] = 0U; - ret[50U] = 0U; - ret[51U] = 0U; - ret[52U] = 0U; - ret[53U] = 0U; - ret[54U] = 0U; - ret[55U] = 0U; - ret[56U] = 0U; - ret[57U] = 0U; - ret[58U] = 0U; - ret[59U] = 0U; - ret[60U] = 0U; - ret[61U] = 0U; - ret[62U] = 0U; - ret[63U] = 0U; - ret[64U] = 0U; - ret[65U] = 0U; - ret[66U] = 0U; - ret[67U] = 0U; - ret[68U] = 0U; - ret[69U] = 0U; - ret[70U] = 0U; - ret[71U] = 0U; - ret[72U] = 0U; - ret[73U] = 0U; - ret[74U] = 0U; - ret[75U] = 0U; - ret[76U] = 0U; - ret[77U] = 0U; - ret[78U] = 0U; - ret[79U] = 0U; - ret[80U] = 0U; - ret[81U] = 0U; - ret[82U] = 0U; - ret[83U] = 0U; - ret[84U] = 0U; - ret[85U] = 0U; - ret[86U] = 0U; - ret[87U] = 0U; - ret[88U] = 0U; - ret[89U] = 0U; - ret[90U] = 0U; - ret[91U] = 0U; - ret[92U] = 0U; - ret[93U] = 0U; - ret[94U] = 0U; - ret[95U] = 0U; - ret[96U] = 0U; - ret[97U] = 0U; - ret[98U] = 0U; - ret[99U] = 0U; - ret[100U] = 0U; - ret[101U] = 0U; - ret[102U] = 0U; - ret[103U] = 0U; - ret[104U] = 0U; - ret[105U] = 0U; - ret[106U] = 0U; - ret[107U] = 0U; - ret[108U] = 0U; - ret[109U] = 0U; - ret[110U] = 0U; - ret[111U] = 0U; - ret[112U] = 0U; - ret[113U] = 0U; - ret[114U] = 0U; - ret[115U] = 0U; - ret[116U] = 0U; - ret[117U] = 0U; - ret[118U] = 0U; - ret[119U] = 0U; - ret[120U] = 0U; - ret[121U] = 0U; - ret[122U] = 0U; - ret[123U] = 0U; - ret[124U] = 0U; - ret[125U] = 0U; - ret[126U] = 0U; - ret[127U] = 0U; - ret[128U] = 0U; - ret[129U] = 0U; - ret[130U] = 0U; - ret[131U] = 0U; - ret[132U] = 0U; - ret[133U] = 0U; - ret[134U] = 0U; - ret[135U] = 0U; -} - -/** - Generate a new keccak xof state. -*/ -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE, -PARALLEL_LANES, RATE>[TraitClause@0]#2} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.new_9d -with types uint64_t -with const generics -- PARALLEL_LANES= 1 -- RATE= 136 -*/ -static inline libcrux_sha3_generic_keccak_KeccakXofState_4f -libcrux_sha3_generic_keccak_new_9d_47(void) -{ - libcrux_sha3_generic_keccak_KeccakXofState_4f lit; - lit.inner = libcrux_sha3_generic_keccak_new_1e_cf(); - uint8_t ret[136U]; - libcrux_sha3_generic_keccak_zero_block_9d_5e(ret); - memcpy(lit.buf[0U], ret, (size_t)136U * sizeof(uint8_t)); - lit.buf_len = (size_t)0U; - lit.sponge = false; - return lit; -} - -/** - Shake256 new state -*/ -/** -This function found in impl -{(libcrux_sha3::portable::incremental::XofAbsorb<136: usize> for -libcrux_sha3::portable::incremental::Shake256Absorb)#2} -*/ -static inline libcrux_sha3_generic_keccak_KeccakXofState_4f -libcrux_sha3_portable_incremental_new_7d(void) -{ - return libcrux_sha3_generic_keccak_new_9d_47(); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.KeccakXofState -with types uint64_t -with const generics -- $1size_t -- $168size_t -*/ -typedef struct libcrux_sha3_generic_keccak_KeccakXofState_78_s { - libcrux_sha3_generic_keccak_KeccakState_48 inner; - uint8_t buf[1U][168U]; - size_t buf_len; - bool sponge; -} libcrux_sha3_generic_keccak_KeccakXofState_78; - -typedef libcrux_sha3_generic_keccak_KeccakXofState_78 - libcrux_sha3_portable_incremental_Shake128Absorb; - -/** - Consume the internal buffer and the required amount of the input to pad to - `RATE`. - - Returns the `consumed` bytes from `inputs` if there's enough buffered - content to consume, and `0` otherwise. - If `consumed > 0` is returned, `self.buf` contains a full block to be - loaded. -*/ -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE, -PARALLEL_LANES, RATE>[TraitClause@0]#2} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.fill_buffer_9d -with types uint64_t -with const generics -- PARALLEL_LANES= 1 -- RATE= 168 -*/ -static inline size_t -libcrux_sha3_generic_keccak_fill_buffer_9d_150( - libcrux_sha3_generic_keccak_KeccakXofState_78 *self, - Eurydice_slice inputs[1U]) -{ - size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); - size_t consumed = (size_t)0U; - if (self->buf_len > (size_t)0U) { - if (self->buf_len + input_len >= (size_t)168U) { - consumed = (size_t)168U - self->buf_len; - { - size_t i = (size_t)0U; - Eurydice_slice uu____0 = Eurydice_array_to_subslice_from( - (size_t)168U, self->buf[i], self->buf_len, uint8_t, size_t); - Eurydice_slice_copy( - uu____0, - Eurydice_slice_subslice_to(inputs[i], consumed, uint8_t, size_t), - uint8_t); - } - self->buf_len = self->buf_len + consumed; - } - } - return consumed; -} - -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE, -PARALLEL_LANES, RATE>[TraitClause@0]#2} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_full_9d -with types uint64_t -with const generics -- PARALLEL_LANES= 1 -- RATE= 168 -*/ -static inline size_t -libcrux_sha3_generic_keccak_absorb_full_9d_7a0( - libcrux_sha3_generic_keccak_KeccakXofState_78 *self, - Eurydice_slice inputs[1U]) -{ - libcrux_sha3_generic_keccak_KeccakXofState_78 *uu____0 = self; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_inputs0[1U]; - memcpy(copy_of_inputs0, inputs, (size_t)1U * sizeof(Eurydice_slice)); - size_t input_consumed = - libcrux_sha3_generic_keccak_fill_buffer_9d_150(uu____0, copy_of_inputs0); - if (input_consumed > (size_t)0U) { - Eurydice_slice borrowed[1U]; - { - uint8_t buf[168U] = { 0U }; - borrowed[0U] = core_array___Array_T__N__23__as_slice( - (size_t)168U, buf, uint8_t, Eurydice_slice); - } - { - size_t i = (size_t)0U; - borrowed[i] = - Eurydice_array_to_slice((size_t)168U, self->buf[i], uint8_t); - } - uint64_t(*uu____2)[5U] = self->inner.st; - Eurydice_slice uu____3[1U]; - memcpy(uu____3, borrowed, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_portable_keccak_load_block_5a_350(uu____2, uu____3); - libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); - self->buf_len = (size_t)0U; - } - size_t input_to_consume = - Eurydice_slice_len(inputs[0U], uint8_t) - input_consumed; - size_t num_blocks = input_to_consume / (size_t)168U; - size_t remainder = input_to_consume % (size_t)168U; - for (size_t i = (size_t)0U; i < num_blocks; i++) { - size_t i0 = i; - uint64_t(*uu____4)[5U] = self->inner.st; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_inputs[1U]; - memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret[1U]; - libcrux_sha3_portable_keccak_slice_n_5a( - copy_of_inputs, input_consumed + i0 * (size_t)168U, (size_t)168U, ret); - libcrux_sha3_portable_keccak_load_block_5a_350(uu____4, ret); - libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); - } - return remainder; -} - -/** - Absorb - - This function takes any number of bytes to absorb and buffers if it's not - enough. The function assumes that all input slices in `blocks` have the same - length. - - Only a multiple of `RATE` blocks are absorbed. - For the remaining bytes [`absorb_final`] needs to be called. - - This works best with relatively small `inputs`. -*/ -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE, -PARALLEL_LANES, RATE>[TraitClause@0]#2} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_9d -with types uint64_t -with const generics -- PARALLEL_LANES= 1 -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_9d_450( - libcrux_sha3_generic_keccak_KeccakXofState_78 *self, - Eurydice_slice inputs[1U]) -{ - libcrux_sha3_generic_keccak_KeccakXofState_78 *uu____0 = self; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_inputs[1U]; - memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice)); - size_t input_remainder_len = - libcrux_sha3_generic_keccak_absorb_full_9d_7a0(uu____0, copy_of_inputs); - if (input_remainder_len > (size_t)0U) { - size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); - { - size_t i = (size_t)0U; - Eurydice_slice uu____2 = Eurydice_array_to_subslice2( - self->buf[i], self->buf_len, self->buf_len + input_remainder_len, - uint8_t); - Eurydice_slice_copy( - uu____2, - Eurydice_slice_subslice_from( - inputs[i], input_len - input_remainder_len, uint8_t, size_t), - uint8_t); - } - self->buf_len = self->buf_len + input_remainder_len; - } -} - -/** -This function found in impl -{(libcrux_sha3::portable::incremental::XofAbsorb<168: usize> for -libcrux_sha3::portable::incremental::Shake128Absorb)} -*/ -static inline void -libcrux_sha3_portable_incremental_absorb_1c( - libcrux_sha3_generic_keccak_KeccakXofState_78 *self, Eurydice_slice input) -{ - Eurydice_slice buf[1U] = { input }; - libcrux_sha3_generic_keccak_absorb_9d_450(self, buf); -} - -typedef libcrux_sha3_generic_keccak_KeccakXofState_78 - libcrux_sha3_portable_incremental_Shake128Squeeze; - -/** - Absorb a final block. - - The `inputs` block may be empty. Everything in the `inputs` block beyond - `RATE` bytes is ignored. -*/ -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE, -PARALLEL_LANES, RATE>[TraitClause@0]#2} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_9d -with types uint64_t -with const generics -- PARALLEL_LANES= 1 -- RATE= 168 -- DELIMITER= 31 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_final_9d_b60( - libcrux_sha3_generic_keccak_KeccakXofState_78 *self, - Eurydice_slice inputs[1U]) -{ - libcrux_sha3_generic_keccak_KeccakXofState_78 *uu____0 = self; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_inputs[1U]; - memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice)); - size_t input_remainder_len = - libcrux_sha3_generic_keccak_absorb_full_9d_7a0(uu____0, copy_of_inputs); - size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); - uint8_t blocks[1U][200U] = { { 0U } }; - { - size_t i = (size_t)0U; - if (self->buf_len > (size_t)0U) { - Eurydice_slice uu____2 = Eurydice_array_to_subslice2( - blocks[i], (size_t)0U, self->buf_len, uint8_t); - Eurydice_slice_copy(uu____2, - Eurydice_array_to_subslice2(self->buf[i], (size_t)0U, - self->buf_len, uint8_t), - uint8_t); - } - if (input_remainder_len > (size_t)0U) { - Eurydice_slice uu____3 = Eurydice_array_to_subslice2( - blocks[i], self->buf_len, self->buf_len + input_remainder_len, - uint8_t); - Eurydice_slice_copy( - uu____3, - Eurydice_slice_subslice_from( - inputs[i], input_len - input_remainder_len, uint8_t, size_t), - uint8_t); - } - blocks[i][self->buf_len + input_remainder_len] = 31U; - size_t uu____4 = i; - size_t uu____5 = (size_t)168U - (size_t)1U; - blocks[uu____4][uu____5] = (uint32_t)blocks[uu____4][uu____5] | 128U; - } - uint64_t(*uu____6)[5U] = self->inner.st; - uint8_t uu____7[1U][200U]; - memcpy(uu____7, blocks, (size_t)1U * sizeof(uint8_t[200U])); - libcrux_sha3_portable_keccak_load_block_full_5a_05(uu____6, uu____7); - libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); -} - -/** -This function found in impl -{(libcrux_sha3::portable::incremental::XofAbsorb<168: usize> for -libcrux_sha3::portable::incremental::Shake128Absorb)} -*/ -static inline libcrux_sha3_generic_keccak_KeccakXofState_78 -libcrux_sha3_portable_incremental_absorb_final_1c( - libcrux_sha3_generic_keccak_KeccakXofState_78 self, Eurydice_slice input) -{ - Eurydice_slice buf[1U] = { input }; - libcrux_sha3_generic_keccak_absorb_final_9d_b60(&self, buf); - return self; -} - -/** - An all zero block -*/ -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE, -PARALLEL_LANES, RATE>[TraitClause@0]#2} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.zero_block_9d -with types uint64_t -with const generics -- PARALLEL_LANES= 1 -- RATE= 168 -*/ -static inline void -libcrux_sha3_generic_keccak_zero_block_9d_5e0( - uint8_t ret[168U]) -{ - ret[0U] = 0U; - ret[1U] = 0U; - ret[2U] = 0U; - ret[3U] = 0U; - ret[4U] = 0U; - ret[5U] = 0U; - ret[6U] = 0U; - ret[7U] = 0U; - ret[8U] = 0U; - ret[9U] = 0U; - ret[10U] = 0U; - ret[11U] = 0U; - ret[12U] = 0U; - ret[13U] = 0U; - ret[14U] = 0U; - ret[15U] = 0U; - ret[16U] = 0U; - ret[17U] = 0U; - ret[18U] = 0U; - ret[19U] = 0U; - ret[20U] = 0U; - ret[21U] = 0U; - ret[22U] = 0U; - ret[23U] = 0U; - ret[24U] = 0U; - ret[25U] = 0U; - ret[26U] = 0U; - ret[27U] = 0U; - ret[28U] = 0U; - ret[29U] = 0U; - ret[30U] = 0U; - ret[31U] = 0U; - ret[32U] = 0U; - ret[33U] = 0U; - ret[34U] = 0U; - ret[35U] = 0U; - ret[36U] = 0U; - ret[37U] = 0U; - ret[38U] = 0U; - ret[39U] = 0U; - ret[40U] = 0U; - ret[41U] = 0U; - ret[42U] = 0U; - ret[43U] = 0U; - ret[44U] = 0U; - ret[45U] = 0U; - ret[46U] = 0U; - ret[47U] = 0U; - ret[48U] = 0U; - ret[49U] = 0U; - ret[50U] = 0U; - ret[51U] = 0U; - ret[52U] = 0U; - ret[53U] = 0U; - ret[54U] = 0U; - ret[55U] = 0U; - ret[56U] = 0U; - ret[57U] = 0U; - ret[58U] = 0U; - ret[59U] = 0U; - ret[60U] = 0U; - ret[61U] = 0U; - ret[62U] = 0U; - ret[63U] = 0U; - ret[64U] = 0U; - ret[65U] = 0U; - ret[66U] = 0U; - ret[67U] = 0U; - ret[68U] = 0U; - ret[69U] = 0U; - ret[70U] = 0U; - ret[71U] = 0U; - ret[72U] = 0U; - ret[73U] = 0U; - ret[74U] = 0U; - ret[75U] = 0U; - ret[76U] = 0U; - ret[77U] = 0U; - ret[78U] = 0U; - ret[79U] = 0U; - ret[80U] = 0U; - ret[81U] = 0U; - ret[82U] = 0U; - ret[83U] = 0U; - ret[84U] = 0U; - ret[85U] = 0U; - ret[86U] = 0U; - ret[87U] = 0U; - ret[88U] = 0U; - ret[89U] = 0U; - ret[90U] = 0U; - ret[91U] = 0U; - ret[92U] = 0U; - ret[93U] = 0U; - ret[94U] = 0U; - ret[95U] = 0U; - ret[96U] = 0U; - ret[97U] = 0U; - ret[98U] = 0U; - ret[99U] = 0U; - ret[100U] = 0U; - ret[101U] = 0U; - ret[102U] = 0U; - ret[103U] = 0U; - ret[104U] = 0U; - ret[105U] = 0U; - ret[106U] = 0U; - ret[107U] = 0U; - ret[108U] = 0U; - ret[109U] = 0U; - ret[110U] = 0U; - ret[111U] = 0U; - ret[112U] = 0U; - ret[113U] = 0U; - ret[114U] = 0U; - ret[115U] = 0U; - ret[116U] = 0U; - ret[117U] = 0U; - ret[118U] = 0U; - ret[119U] = 0U; - ret[120U] = 0U; - ret[121U] = 0U; - ret[122U] = 0U; - ret[123U] = 0U; - ret[124U] = 0U; - ret[125U] = 0U; - ret[126U] = 0U; - ret[127U] = 0U; - ret[128U] = 0U; - ret[129U] = 0U; - ret[130U] = 0U; - ret[131U] = 0U; - ret[132U] = 0U; - ret[133U] = 0U; - ret[134U] = 0U; - ret[135U] = 0U; - ret[136U] = 0U; - ret[137U] = 0U; - ret[138U] = 0U; - ret[139U] = 0U; - ret[140U] = 0U; - ret[141U] = 0U; - ret[142U] = 0U; - ret[143U] = 0U; - ret[144U] = 0U; - ret[145U] = 0U; - ret[146U] = 0U; - ret[147U] = 0U; - ret[148U] = 0U; - ret[149U] = 0U; - ret[150U] = 0U; - ret[151U] = 0U; - ret[152U] = 0U; - ret[153U] = 0U; - ret[154U] = 0U; - ret[155U] = 0U; - ret[156U] = 0U; - ret[157U] = 0U; - ret[158U] = 0U; - ret[159U] = 0U; - ret[160U] = 0U; - ret[161U] = 0U; - ret[162U] = 0U; - ret[163U] = 0U; - ret[164U] = 0U; - ret[165U] = 0U; - ret[166U] = 0U; - ret[167U] = 0U; -} - -/** - Generate a new keccak xof state. -*/ -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE, -PARALLEL_LANES, RATE>[TraitClause@0]#2} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.new_9d -with types uint64_t -with const generics -- PARALLEL_LANES= 1 -- RATE= 168 -*/ -static inline libcrux_sha3_generic_keccak_KeccakXofState_78 -libcrux_sha3_generic_keccak_new_9d_470(void) -{ - libcrux_sha3_generic_keccak_KeccakXofState_78 lit; - lit.inner = libcrux_sha3_generic_keccak_new_1e_cf(); - uint8_t ret[168U]; - libcrux_sha3_generic_keccak_zero_block_9d_5e0(ret); - memcpy(lit.buf[0U], ret, (size_t)168U * sizeof(uint8_t)); - lit.buf_len = (size_t)0U; - lit.sponge = false; - return lit; -} - -/** -This function found in impl -{(libcrux_sha3::portable::incremental::XofAbsorb<168: usize> for -libcrux_sha3::portable::incremental::Shake128Absorb)} -*/ -static inline libcrux_sha3_generic_keccak_KeccakXofState_78 -libcrux_sha3_portable_incremental_new_1c(void) -{ - return libcrux_sha3_generic_keccak_new_9d_470(); -} - -/** - `out` has the exact size we want here. It must be less than or equal to `RATE`. -*/ -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_5a -with const generics -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_5a_81( - uint64_t (*state)[5U], Eurydice_slice out[1U]) -{ - size_t num_full_blocks = Eurydice_slice_len(out[0U], uint8_t) / (size_t)8U; - size_t last_block_len = Eurydice_slice_len(out[0U], uint8_t) % (size_t)8U; - for (size_t i = (size_t)0U; i < num_full_blocks; i++) { - size_t i0 = i; - Eurydice_slice uu____0 = Eurydice_slice_subslice2( - out[0U], i0 * (size_t)8U, i0 * (size_t)8U + (size_t)8U, uint8_t); - uint8_t ret[8U]; - core_num__u64_9__to_le_bytes(state[i0 / (size_t)5U][i0 % (size_t)5U], ret); - Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t); - } - if (last_block_len != (size_t)0U) { - Eurydice_slice uu____1 = Eurydice_slice_subslice2( - out[0U], num_full_blocks * (size_t)8U, - num_full_blocks * (size_t)8U + last_block_len, uint8_t); - uint8_t ret[8U]; - core_num__u64_9__to_le_bytes( - state[num_full_blocks / (size_t)5U][num_full_blocks % (size_t)5U], ret); - Eurydice_slice_copy( - uu____1, - Eurydice_array_to_subslice2(ret, (size_t)0U, last_block_len, uint8_t), - uint8_t); - } -} - -/** - Squeeze `N` x `LEN` bytes. -*/ -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE, -PARALLEL_LANES, RATE>[TraitClause@0]#2} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_9d -with types uint64_t -with const generics -- PARALLEL_LANES= 1 -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_9d_ba( - libcrux_sha3_generic_keccak_KeccakXofState_4f *self, - Eurydice_slice out[1U]) -{ - if (self->sponge) { - libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); - } - size_t out_len = Eurydice_slice_len(out[0U], uint8_t); - size_t blocks = out_len / (size_t)136U; - size_t last = out_len - out_len % (size_t)136U; - size_t mid; - if ((size_t)136U >= out_len) { - mid = out_len; - } else { - mid = (size_t)136U; - } - Eurydice_slice_uint8_t_1size_t__x2 uu____0 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, mid); - Eurydice_slice out00[1U]; - memcpy(out00, uu____0.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice out_rest[1U]; - memcpy(out_rest, uu____0.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_portable_keccak_store_5a_81(self->inner.st, out00); - core_ops_range_Range_b3 iter = - core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter( - (CLITERAL(core_ops_range_Range_b3){ .start = (size_t)1U, - .end = blocks }), - core_ops_range_Range_b3, core_ops_range_Range_b3); - while (true) { - if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next( - &iter, size_t, core_option_Option_b3) - .tag == core_option_None) { - break; - } else { - Eurydice_slice_uint8_t_1size_t__x2 uu____1 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(out_rest, - (size_t)136U); - Eurydice_slice out0[1U]; - memcpy(out0, uu____1.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice tmp[1U]; - memcpy(tmp, uu____1.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); - libcrux_sha3_portable_keccak_store_5a_81(self->inner.st, out0); - memcpy(out_rest, tmp, (size_t)1U * sizeof(Eurydice_slice)); - } - } - if (last < out_len) { - libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); - libcrux_sha3_portable_keccak_store_5a_81(self->inner.st, out_rest); - } - self->sponge = true; -} - -/** - Shake256 squeeze -*/ -/** -This function found in impl -{(libcrux_sha3::portable::incremental::XofSqueeze<136: usize> for -libcrux_sha3::portable::incremental::Shake256Squeeze)#3} -*/ -static inline void -libcrux_sha3_portable_incremental_squeeze_8a( - libcrux_sha3_generic_keccak_KeccakXofState_4f *self, Eurydice_slice out) -{ - Eurydice_slice buf[1U] = { out }; - libcrux_sha3_generic_keccak_squeeze_9d_ba(self, buf); -} - -/** - `out` has the exact size we want here. It must be less than or equal to `RATE`. -*/ -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_5a -with const generics -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_5a_810( - uint64_t (*state)[5U], Eurydice_slice out[1U]) -{ - size_t num_full_blocks = Eurydice_slice_len(out[0U], uint8_t) / (size_t)8U; - size_t last_block_len = Eurydice_slice_len(out[0U], uint8_t) % (size_t)8U; - for (size_t i = (size_t)0U; i < num_full_blocks; i++) { - size_t i0 = i; - Eurydice_slice uu____0 = Eurydice_slice_subslice2( - out[0U], i0 * (size_t)8U, i0 * (size_t)8U + (size_t)8U, uint8_t); - uint8_t ret[8U]; - core_num__u64_9__to_le_bytes(state[i0 / (size_t)5U][i0 % (size_t)5U], ret); - Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t); - } - if (last_block_len != (size_t)0U) { - Eurydice_slice uu____1 = Eurydice_slice_subslice2( - out[0U], num_full_blocks * (size_t)8U, - num_full_blocks * (size_t)8U + last_block_len, uint8_t); - uint8_t ret[8U]; - core_num__u64_9__to_le_bytes( - state[num_full_blocks / (size_t)5U][num_full_blocks % (size_t)5U], ret); - Eurydice_slice_copy( - uu____1, - Eurydice_array_to_subslice2(ret, (size_t)0U, last_block_len, uint8_t), - uint8_t); - } -} - -/** - Squeeze `N` x `LEN` bytes. -*/ -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE, -PARALLEL_LANES, RATE>[TraitClause@0]#2} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_9d -with types uint64_t -with const generics -- PARALLEL_LANES= 1 -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_9d_ba0( - libcrux_sha3_generic_keccak_KeccakXofState_78 *self, - Eurydice_slice out[1U]) -{ - if (self->sponge) { - libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); - } - size_t out_len = Eurydice_slice_len(out[0U], uint8_t); - size_t blocks = out_len / (size_t)168U; - size_t last = out_len - out_len % (size_t)168U; - size_t mid; - if ((size_t)168U >= out_len) { - mid = out_len; - } else { - mid = (size_t)168U; - } - Eurydice_slice_uint8_t_1size_t__x2 uu____0 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, mid); - Eurydice_slice out00[1U]; - memcpy(out00, uu____0.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice out_rest[1U]; - memcpy(out_rest, uu____0.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_portable_keccak_store_5a_810(self->inner.st, out00); - core_ops_range_Range_b3 iter = - core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter( - (CLITERAL(core_ops_range_Range_b3){ .start = (size_t)1U, - .end = blocks }), - core_ops_range_Range_b3, core_ops_range_Range_b3); - while (true) { - if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next( - &iter, size_t, core_option_Option_b3) - .tag == core_option_None) { - break; - } else { - Eurydice_slice_uint8_t_1size_t__x2 uu____1 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(out_rest, - (size_t)168U); - Eurydice_slice out0[1U]; - memcpy(out0, uu____1.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice tmp[1U]; - memcpy(tmp, uu____1.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); - libcrux_sha3_portable_keccak_store_5a_810(self->inner.st, out0); - memcpy(out_rest, tmp, (size_t)1U * sizeof(Eurydice_slice)); - } - } - if (last < out_len) { - libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); - libcrux_sha3_portable_keccak_store_5a_810(self->inner.st, out_rest); - } - self->sponge = true; -} - -/** - Shake128 squeeze -*/ -/** -This function found in impl -{(libcrux_sha3::portable::incremental::XofSqueeze<168: usize> for -libcrux_sha3::portable::incremental::Shake128Squeeze)#1} -*/ -static inline void -libcrux_sha3_portable_incremental_squeeze_10( - libcrux_sha3_generic_keccak_KeccakXofState_78 *self, Eurydice_slice out) -{ - Eurydice_slice buf[1U] = { out }; - libcrux_sha3_generic_keccak_squeeze_9d_ba0(self, buf); -} - -/** -This function found in impl {(core::clone::Clone for -libcrux_sha3::portable::KeccakState)} -*/ -static inline libcrux_sha3_generic_keccak_KeccakState_48 -libcrux_sha3_portable_clone_3d( - libcrux_sha3_generic_keccak_KeccakState_48 *self) -{ - return self[0U]; -} - -/** -This function found in impl {(core::convert::From<libcrux_sha3::Algorithm> for -u32)#1} -*/ -static inline uint32_t -libcrux_sha3_from_eb(libcrux_sha3_Algorithm v) -{ - uint32_t uu____0; - switch (v) { - case libcrux_sha3_Sha224: { - uu____0 = 1U; - break; - } - case libcrux_sha3_Sha256: { - uu____0 = 2U; - break; - } - case libcrux_sha3_Sha384: { - uu____0 = 3U; - break; - } - case libcrux_sha3_Sha512: { - uu____0 = 4U; - break; - } - default: { - KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__, - __LINE__); - KRML_HOST_EXIT(253U); - } - } - return uu____0; -} - -/** -This function found in impl {(core::convert::From<u32> for -libcrux_sha3::Algorithm)} -*/ -static inline libcrux_sha3_Algorithm -libcrux_sha3_from_2d(uint32_t v) -{ - libcrux_sha3_Algorithm uu____0; - switch (v) { - case 1U: { - uu____0 = libcrux_sha3_Sha224; - break; - } - case 2U: { - uu____0 = libcrux_sha3_Sha256; - break; - } - case 3U: { - uu____0 = libcrux_sha3_Sha384; - break; - } - case 4U: { - uu____0 = libcrux_sha3_Sha512; - break; - } - default: { - KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, - "panic!"); - KRML_HOST_EXIT(255U); - } - } - return uu____0; -} typedef uint8_t libcrux_sha3_Sha3_512Digest[64U]; @@ -1547,5 +34,5 @@ typedef uint8_t libcrux_sha3_Sha3_224Digest[28U]; } #endif -#define __internal_libcrux_sha3_internal_H_DEFINED -#endif +#define internal_libcrux_sha3_internal_H_DEFINED +#endif /* internal_libcrux_sha3_internal_H */ diff --git a/security/nss/lib/freebl/verified/karamel/include/krml/c_endianness.h b/security/nss/lib/freebl/verified/karamel/include/krml/c_endianness.h @@ -1,8 +1,8 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. */ + Licensed under the Apache 2.0 and MIT Licenses. */ -#ifndef __KRML_ENDIAN_H -#define __KRML_ENDIAN_H +#ifndef KRML_HEADER_ENDIAN_H +#define KRML_HEADER_ENDIAN_H #ifdef __GNUC__ #warning "c_endianness.h is deprecated, include lowstar_endianness.h instead" @@ -10,4 +10,4 @@ #include "lowstar_endianness.h" -#endif +#endif /* KRML_HEADER_ENDIAN_H */ diff --git a/security/nss/lib/freebl/verified/karamel/include/krml/fstar_int.h b/security/nss/lib/freebl/verified/karamel/include/krml/fstar_int.h @@ -1,5 +1,5 @@ -#ifndef __FSTAR_INT_H -#define __FSTAR_INT_H +#ifndef KRML_HEADER_FSTAR_INT_H +#define KRML_HEADER_FSTAR_INT_H #include "internal/types.h" @@ -86,4 +86,4 @@ FStar_Int64_shift_arithmetic_right(int64_t a, uint32_t b) #endif /* !(defined(_MSC_VER) ... ) */ -#endif /* __FSTAR_INT_H */ +#endif /* KRML_HEADER_FSTAR_INT_H */ diff --git a/security/nss/lib/freebl/verified/karamel/include/krml/internal/builtin.h b/security/nss/lib/freebl/verified/karamel/include/krml/internal/builtin.h @@ -1,8 +1,8 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. */ + Licensed under the Apache 2.0 and MIT Licenses. */ -#ifndef __KRML_BUILTIN_H -#define __KRML_BUILTIN_H +#ifndef KRML_HEADER_BUILTIN_H +#define KRML_HEADER_BUILTIN_H /* For alloca, when using KaRaMeL's -falloca */ #if (defined(_WIN32) || defined(_WIN64)) @@ -15,4 +15,4 @@ * generate and try to link last a function with this type: */ void krmlinit_globals(void); -#endif +#endif /* KRML_HEADER_BUILTIN_H */ diff --git a/security/nss/lib/freebl/verified/karamel/include/krml/internal/callconv.h b/security/nss/lib/freebl/verified/karamel/include/krml/internal/callconv.h @@ -1,8 +1,8 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. */ + Licensed under the Apache 2.0 and MIT Licenses. */ -#ifndef __KRML_CALLCONV_H -#define __KRML_CALLCONV_H +#ifndef KRML_HEADER_CALLCONV_H +#define KRML_HEADER_CALLCONV_H /******************************************************************************/ /* Some macros to ease compatibility (TODO: move to miTLS) */ @@ -24,4 +24,4 @@ #endif #endif -#endif +#endif /* KRML_HEADER_CALLCONV_H */ diff --git a/security/nss/lib/freebl/verified/karamel/include/krml/internal/compat.h b/security/nss/lib/freebl/verified/karamel/include/krml/internal/compat.h @@ -1,5 +1,5 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. */ + Licensed under the Apache 2.0 and MIT Licenses. */ #ifndef KRML_COMPAT_H #define KRML_COMPAT_H diff --git a/security/nss/lib/freebl/verified/karamel/include/krml/internal/debug.h b/security/nss/lib/freebl/verified/karamel/include/krml/internal/debug.h @@ -1,8 +1,8 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. */ + Licensed under the Apache 2.0 and MIT Licenses. */ -#ifndef __KRML_DEBUG_H -#define __KRML_DEBUG_H +#ifndef KRML_HEADER_DEBUG_H +#define KRML_HEADER_DEBUG_H #include <inttypes.h> @@ -54,4 +54,4 @@ void WasmSupport_check_buffer_size(uint32_t s); }) #endif -#endif +#endif /* KRML_HEADER_DEBUG_H */ diff --git a/security/nss/lib/freebl/verified/karamel/include/krml/internal/target.h b/security/nss/lib/freebl/verified/karamel/include/krml/internal/target.h @@ -1,8 +1,8 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. */ + Licensed under the Apache 2.0 and MIT Licenses. */ -#ifndef __KRML_TARGET_H -#define __KRML_TARGET_H +#ifndef KRML_HEADER_TARGET_H +#define KRML_HEADER_TARGET_H #include <assert.h> #include <inttypes.h> @@ -12,6 +12,9 @@ #include <stdio.h> #include <stdlib.h> +typedef float float32_t; +typedef double float64_t; + /* Since KaRaMeL emits the inline keyword unconditionally, we follow the * guidelines at https://gcc.gnu.org/onlinedocs/gcc/Inline.html and make this * __inline__ to ensure the code compiles with -std=c90 and earlier. */ @@ -19,6 +22,20 @@ #define inline __inline__ #endif +/* There is no support for aligned_alloc() in macOS before Catalina, so + * let's make a macro to use _mm_malloc() and _mm_free() functions + * from mm_malloc.h. */ +#if defined(__APPLE__) && defined(__MACH__) +#include <AvailabilityMacros.h> +#if defined(MAC_OS_X_VERSION_MIN_REQUIRED) && \ + (MAC_OS_X_VERSION_MIN_REQUIRED < 101500) +#include <mm_malloc.h> +#define LEGACY_MACOS +#else +#undef LEGACY_MACOS +#endif +#endif + /******************************************************************************/ /* Macros that KaRaMeL will generate. */ /******************************************************************************/ @@ -29,8 +46,9 @@ #define KRML_HOST_PRINTF printf #endif -#if ((defined __STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ - (!(defined KRML_HOST_EPRINTF))) +#if ( \ + (defined __STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + (!(defined KRML_HOST_EPRINTF))) #define KRML_HOST_EPRINTF(...) fprintf(stderr, __VA_ARGS__) #elif !(defined KRML_HOST_EPRINTF) && defined(_MSC_VER) #define KRML_HOST_EPRINTF(...) fprintf(stderr, __VA_ARGS__) @@ -61,7 +79,7 @@ #endif #ifndef KRML_MAYBE_UNUSED -#if defined(__GNUC__) +#if defined(__GNUC__) || defined(__clang__) #define KRML_MAYBE_UNUSED __attribute__((unused)) #else #define KRML_MAYBE_UNUSED @@ -69,7 +87,7 @@ #endif #ifndef KRML_ATTRIBUTE_TARGET -#if defined(__GNUC__) +#if defined(__GNUC__) || defined(__clang__) #define KRML_ATTRIBUTE_TARGET(x) __attribute__((target(x))) #else #define KRML_ATTRIBUTE_TARGET(x) @@ -77,16 +95,17 @@ #endif #ifndef KRML_NOINLINE -#if defined(_MSC_VER) -#define KRML_NOINLINE __declspec(noinline) -#elif defined(__GNUC__) +#if defined(__GNUC__) || defined(__clang__) #define KRML_NOINLINE __attribute__((noinline, unused)) +#elif defined(_MSC_VER) +#define KRML_NOINLINE __declspec(noinline) +#elif defined(__SUNPRO_C) +#define KRML_NOINLINE __attribute__((noinline)) #else #define KRML_NOINLINE #warning "The KRML_NOINLINE macro is not defined for this toolchain!" #warning "The compiler may defeat side-channel resistance with optimizations." -#warning \ - "Please locate target.h and try to fill it out with a suitable definition for this compiler." +#warning "Please locate target.h and try to fill it out with a suitable definition for this compiler." #endif #endif @@ -95,12 +114,12 @@ #define KRML_MUSTINLINE inline __forceinline #elif defined(__GNUC__) #define KRML_MUSTINLINE inline __attribute__((always_inline)) +#elif defined(__SUNPRO_C) +#define KRML_MUSTINLINE inline __attribute__((always_inline)) #else #define KRML_MUSTINLINE inline -#warning \ - "The KRML_MUSTINLINE macro defaults to plain inline for this toolchain!" -#warning \ - "Please locate target.h and try to fill it out with a suitable definition for this compiler." +#warning "The KRML_MUSTINLINE macro defaults to plain inline for this toolchain!" +#warning "Please locate target.h and try to fill it out with a suitable definition for this compiler." #endif #endif @@ -127,9 +146,12 @@ #ifdef __MINGW32__ #include <_mingw.h> #endif -#if (defined(_MSC_VER) || \ - (defined(__MINGW32__) && defined(__MINGW64_VERSION_MAJOR))) +#if ( \ + defined(_MSC_VER) || \ + (defined(__MINGW32__) && defined(__MINGW64_VERSION_MAJOR))) #define KRML_ALIGNED_MALLOC(X, Y) _aligned_malloc(Y, X) +#elif defined(LEGACY_MACOS) +#define KRML_ALIGNED_MALLOC(X, Y) _mm_malloc(Y, X) #else #define KRML_ALIGNED_MALLOC(X, Y) aligned_alloc(X, Y) #endif @@ -143,9 +165,12 @@ #ifdef __MINGW32__ #include <_mingw.h> #endif -#if (defined(_MSC_VER) || \ - (defined(__MINGW32__) && defined(__MINGW64_VERSION_MAJOR))) +#if ( \ + defined(_MSC_VER) || \ + (defined(__MINGW32__) && defined(__MINGW64_VERSION_MAJOR))) #define KRML_ALIGNED_FREE(X) _aligned_free(X) +#elif defined(LEGACY_MACOS) +#define KRML_ALIGNED_FREE(X) _mm_free(X) #else #define KRML_ALIGNED_FREE(X) free(X) #endif @@ -213,6 +238,8 @@ krml_time(void) #elif defined(__GNUC__) /* deprecated attribute is not defined in GCC < 4.5. */ #define KRML_DEPRECATED(x) +#elif defined(__SUNPRO_C) +#define KRML_DEPRECATED(x) __attribute__((deprecated(x))) #elif defined(_MSC_VER) #define KRML_DEPRECATED(x) __declspec(deprecated(x)) #endif @@ -220,7 +247,8 @@ krml_time(void) /* Macros for prettier unrolling of loops */ #define KRML_LOOP1(i, n, x) \ { \ - x i += n; \ + x \ + i += n; \ (void)i; \ } @@ -403,4 +431,4 @@ krml_time(void) #else #define KRML_MAYBE_FOR16(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif -#endif +#endif /* KRML_HEADER_TARGET_H */ diff --git a/security/nss/lib/freebl/verified/karamel/include/krml/internal/types.h b/security/nss/lib/freebl/verified/karamel/include/krml/internal/types.h @@ -1,5 +1,5 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. */ + Licensed under the Apache 2.0 and MIT Licenses. */ #ifndef KRML_TYPES_H #define KRML_TYPES_H @@ -91,7 +91,7 @@ typedef FStar_UInt128_uint128 FStar_UInt128_t, uint128_t; /* Avoid a circular loop: if this header is included via FStar_UInt8_16_32_64, * then don't bring the uint128 definitions into scope. */ -#ifndef __FStar_UInt_8_16_32_64_H +#ifndef FStar_UInt_8_16_32_64_H #if !defined(KRML_VERIFIED_UINT128) && defined(IS_MSVC64) #include "fstar_uint128_msvc.h" diff --git a/security/nss/lib/freebl/verified/karamel/include/krml/internal/wasmsupport.h b/security/nss/lib/freebl/verified/karamel/include/krml/internal/wasmsupport.h @@ -1,5 +1,5 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. */ + Licensed under the Apache 2.0 and MIT Licenses. */ /* This file is automatically included when compiling with -wasm -d force-c */ #define WasmSupport_check_buffer_size(X) diff --git a/security/nss/lib/freebl/verified/karamel/include/krml/lowstar_endianness.h b/security/nss/lib/freebl/verified/karamel/include/krml/lowstar_endianness.h @@ -1,8 +1,8 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. */ + Licensed under the Apache 2.0 and MIT Licenses. */ -#ifndef __LOWSTAR_ENDIANNESS_H -#define __LOWSTAR_ENDIANNESS_H +#ifndef KRML_HEADER_LOWSTAR_ENDIANNESS_H +#define KRML_HEADER_LOWSTAR_ENDIANNESS_H #include <string.h> #include <inttypes.h> @@ -240,4 +240,4 @@ store64(uint8_t *b, uint64_t i) #define load128_be0 load128_be #define store128_be0 store128_be -#endif +#endif /* KRML_HEADER_LOWSTAR_ENDIANNESS_H */ diff --git a/security/nss/lib/freebl/verified/karamel/include/krmllib.h b/security/nss/lib/freebl/verified/karamel/include/krmllib.h @@ -1,5 +1,5 @@ -#ifndef __KRMLLIB_H -#define __KRMLLIB_H +#ifndef KRML_HEADER_KRMLLIB_H +#define KRML_HEADER_KRMLLIB_H /******************************************************************************/ /* The all-in-one krmllib.h header */ @@ -25,4 +25,4 @@ #include "krml/lowstar_endianness.h" #include "krml/fstar_int.h" -#endif /* __KRMLLIB_H */ +#endif /* KRML_HEADER_KRMLLIB_H */ diff --git a/security/nss/lib/freebl/verified/karamel/krmllib/dist/minimal/FStar_UInt128.h b/security/nss/lib/freebl/verified/karamel/krmllib/dist/minimal/FStar_UInt128.h @@ -1,10 +1,10 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. + Licensed under the Apache 2.0 and MIT Licenses. */ -#ifndef __FStar_UInt128_H -#define __FStar_UInt128_H +#ifndef FStar_UInt128_H +#define FStar_UInt128_H #include <inttypes.h> #include <stdbool.h> @@ -72,5 +72,5 @@ static inline FStar_UInt128_uint128 FStar_UInt128_mul32(uint64_t x, uint32_t y); static inline FStar_UInt128_uint128 FStar_UInt128_mul_wide(uint64_t x, uint64_t y); -#define __FStar_UInt128_H_DEFINED -#endif +#define FStar_UInt128_H_DEFINED +#endif /* FStar_UInt128_H */ diff --git a/security/nss/lib/freebl/verified/karamel/krmllib/dist/minimal/FStar_UInt128_Verified.h b/security/nss/lib/freebl/verified/karamel/krmllib/dist/minimal/FStar_UInt128_Verified.h @@ -1,10 +1,10 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. + Licensed under the Apache 2.0 and MIT Licenses. */ -#ifndef __FStar_UInt128_Verified_H -#define __FStar_UInt128_Verified_H +#ifndef FStar_UInt128_Verified_H +#define FStar_UInt128_Verified_H #include "FStar_UInt_8_16_32_64.h" #include <inttypes.h> @@ -15,7 +15,7 @@ static inline uint64_t FStar_UInt128_constant_time_carry(uint64_t a, uint64_t b) { - return (a ^ ((a ^ b) | ((a - b) ^ b))) >> (uint32_t)63U; + return (a ^ ((a ^ b) | ((a - b) ^ b))) >> 63U; } static inline uint64_t @@ -120,7 +120,7 @@ FStar_UInt128_lognot(FStar_UInt128_uint128 a) return lit; } -static uint32_t FStar_UInt128_u32_64 = (uint32_t)64U; +static uint32_t FStar_UInt128_u32_64 = 64U; static inline uint64_t FStar_UInt128_add_u64_shift_left(uint64_t hi, uint64_t lo, uint32_t s) @@ -137,7 +137,7 @@ FStar_UInt128_add_u64_shift_left_respec(uint64_t hi, uint64_t lo, uint32_t s) static inline FStar_UInt128_uint128 FStar_UInt128_shift_left_small(FStar_UInt128_uint128 a, uint32_t s) { - if (s == (uint32_t)0U) { + if (s == 0U) { return a; } else { FStar_UInt128_uint128 lit; @@ -151,7 +151,7 @@ static inline FStar_UInt128_uint128 FStar_UInt128_shift_left_large(FStar_UInt128_uint128 a, uint32_t s) { FStar_UInt128_uint128 lit; - lit.low = (uint64_t)0U; + lit.low = 0ULL; lit.high = a.low << (s - FStar_UInt128_u32_64); return lit; } @@ -181,7 +181,7 @@ FStar_UInt128_add_u64_shift_right_respec(uint64_t hi, uint64_t lo, uint32_t s) static inline FStar_UInt128_uint128 FStar_UInt128_shift_right_small(FStar_UInt128_uint128 a, uint32_t s) { - if (s == (uint32_t)0U) { + if (s == 0U) { return a; } else { FStar_UInt128_uint128 lit; @@ -196,7 +196,7 @@ FStar_UInt128_shift_right_large(FStar_UInt128_uint128 a, uint32_t s) { FStar_UInt128_uint128 lit; lit.low = a.high >> (s - FStar_UInt128_u32_64); - lit.high = (uint64_t)0U; + lit.high = 0ULL; return lit; } @@ -254,9 +254,11 @@ FStar_UInt128_gte_mask(FStar_UInt128_uint128 a, FStar_UInt128_uint128 b) { FStar_UInt128_uint128 lit; lit.low = - (FStar_UInt64_gte_mask(a.high, b.high) & ~FStar_UInt64_eq_mask(a.high, b.high)) | (FStar_UInt64_eq_mask(a.high, b.high) & FStar_UInt64_gte_mask(a.low, b.low)); + (FStar_UInt64_gte_mask(a.high, b.high) & ~FStar_UInt64_eq_mask(a.high, b.high)) | + (FStar_UInt64_eq_mask(a.high, b.high) & FStar_UInt64_gte_mask(a.low, b.low)); lit.high = - (FStar_UInt64_gte_mask(a.high, b.high) & ~FStar_UInt64_eq_mask(a.high, b.high)) | (FStar_UInt64_eq_mask(a.high, b.high) & FStar_UInt64_gte_mask(a.low, b.low)); + (FStar_UInt64_gte_mask(a.high, b.high) & ~FStar_UInt64_eq_mask(a.high, b.high)) | + (FStar_UInt64_eq_mask(a.high, b.high) & FStar_UInt64_gte_mask(a.low, b.low)); return lit; } @@ -265,7 +267,7 @@ FStar_UInt128_uint64_to_uint128(uint64_t a) { FStar_UInt128_uint128 lit; lit.low = a; - lit.high = (uint64_t)0U; + lit.high = 0ULL; return lit; } @@ -278,10 +280,10 @@ FStar_UInt128_uint128_to_uint64(FStar_UInt128_uint128 a) static inline uint64_t FStar_UInt128_u64_mod_32(uint64_t a) { - return a & (uint64_t)0xffffffffU; + return a & 0xffffffffULL; } -static uint32_t FStar_UInt128_u32_32 = (uint32_t)32U; +static uint32_t FStar_UInt128_u32_32 = 32U; static inline uint64_t FStar_UInt128_u32_combine(uint64_t hi, uint64_t lo) @@ -294,10 +296,13 @@ FStar_UInt128_mul32(uint64_t x, uint32_t y) { FStar_UInt128_uint128 lit; lit.low = - FStar_UInt128_u32_combine((x >> FStar_UInt128_u32_32) * (uint64_t)y + (FStar_UInt128_u64_mod_32(x) * (uint64_t)y >> FStar_UInt128_u32_32), + FStar_UInt128_u32_combine((x >> FStar_UInt128_u32_32) * (uint64_t)y + + (FStar_UInt128_u64_mod_32(x) * (uint64_t)y >> FStar_UInt128_u32_32), FStar_UInt128_u64_mod_32(FStar_UInt128_u64_mod_32(x) * (uint64_t)y)); lit.high = - ((x >> FStar_UInt128_u32_32) * (uint64_t)y + (FStar_UInt128_u64_mod_32(x) * (uint64_t)y >> FStar_UInt128_u32_32)) >> FStar_UInt128_u32_32; + ((x >> FStar_UInt128_u32_32) * (uint64_t)y + + (FStar_UInt128_u64_mod_32(x) * (uint64_t)y >> FStar_UInt128_u32_32)) >> + FStar_UInt128_u32_32; return lit; } @@ -313,16 +318,20 @@ FStar_UInt128_mul_wide(uint64_t x, uint64_t y) FStar_UInt128_uint128 lit; lit.low = FStar_UInt128_u32_combine_(FStar_UInt128_u64_mod_32(x) * (y >> FStar_UInt128_u32_32) + - FStar_UInt128_u64_mod_32((x >> FStar_UInt128_u32_32) * FStar_UInt128_u64_mod_32(y) + (FStar_UInt128_u64_mod_32(x) * FStar_UInt128_u64_mod_32(y) >> FStar_UInt128_u32_32)), + FStar_UInt128_u64_mod_32((x >> FStar_UInt128_u32_32) * FStar_UInt128_u64_mod_32(y) + + (FStar_UInt128_u64_mod_32(x) * FStar_UInt128_u64_mod_32(y) >> FStar_UInt128_u32_32)), FStar_UInt128_u64_mod_32(FStar_UInt128_u64_mod_32(x) * FStar_UInt128_u64_mod_32(y))); lit.high = (x >> FStar_UInt128_u32_32) * (y >> FStar_UInt128_u32_32) + - (((x >> FStar_UInt128_u32_32) * FStar_UInt128_u64_mod_32(y) + (FStar_UInt128_u64_mod_32(x) * FStar_UInt128_u64_mod_32(y) >> FStar_UInt128_u32_32)) >> FStar_UInt128_u32_32) + + (((x >> FStar_UInt128_u32_32) * FStar_UInt128_u64_mod_32(y) + + (FStar_UInt128_u64_mod_32(x) * FStar_UInt128_u64_mod_32(y) >> FStar_UInt128_u32_32)) >> + FStar_UInt128_u32_32) + ((FStar_UInt128_u64_mod_32(x) * (y >> FStar_UInt128_u32_32) + - FStar_UInt128_u64_mod_32((x >> FStar_UInt128_u32_32) * FStar_UInt128_u64_mod_32(y) + (FStar_UInt128_u64_mod_32(x) * FStar_UInt128_u64_mod_32(y) >> FStar_UInt128_u32_32))) >> + FStar_UInt128_u64_mod_32((x >> FStar_UInt128_u32_32) * FStar_UInt128_u64_mod_32(y) + + (FStar_UInt128_u64_mod_32(x) * FStar_UInt128_u64_mod_32(y) >> FStar_UInt128_u32_32))) >> FStar_UInt128_u32_32); return lit; } -#define __FStar_UInt128_Verified_H_DEFINED -#endif +#define FStar_UInt128_Verified_H_DEFINED +#endif /* FStar_UInt128_Verified_H */ diff --git a/security/nss/lib/freebl/verified/karamel/krmllib/dist/minimal/FStar_UInt_8_16_32_64.h b/security/nss/lib/freebl/verified/karamel/krmllib/dist/minimal/FStar_UInt_8_16_32_64.h @@ -1,10 +1,10 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. + Licensed under the Apache 2.0 and MIT Licenses. */ -#ifndef __FStar_UInt_8_16_32_64_H -#define __FStar_UInt_8_16_32_64_H +#ifndef FStar_UInt_8_16_32_64_H +#define FStar_UInt_8_16_32_64_H #include <inttypes.h> #include <stdbool.h> @@ -21,12 +21,16 @@ extern krml_checked_int_t FStar_UInt64___proj__Mk__item__v(uint64_t projectee); extern krml_checked_int_t FStar_UInt64_v(uint64_t x); +typedef void *FStar_UInt64_fits; + extern uint64_t FStar_UInt64_uint_to_t(krml_checked_int_t x); extern uint64_t FStar_UInt64_zero; extern uint64_t FStar_UInt64_one; +extern bool FStar_UInt64_ne(uint64_t a, uint64_t b); + extern uint64_t FStar_UInt64_minus(uint64_t a); extern uint32_t FStar_UInt64_n_minus_one; @@ -35,10 +39,10 @@ static KRML_NOINLINE uint64_t FStar_UInt64_eq_mask(uint64_t a, uint64_t b) { uint64_t x = a ^ b; - uint64_t minus_x = ~x + (uint64_t)1U; + uint64_t minus_x = ~x + 1ULL; uint64_t x_or_minus_x = x | minus_x; - uint64_t xnx = x_or_minus_x >> (uint32_t)63U; - return xnx - (uint64_t)1U; + uint64_t xnx = x_or_minus_x >> 63U; + return xnx - 1ULL; } static KRML_NOINLINE uint64_t @@ -51,8 +55,8 @@ FStar_UInt64_gte_mask(uint64_t a, uint64_t b) uint64_t x_sub_y_xor_y = x_sub_y ^ y; uint64_t q = x_xor_y | x_sub_y_xor_y; uint64_t x_xor_q = x ^ q; - uint64_t x_xor_q_ = x_xor_q >> (uint32_t)63U; - return x_xor_q_ - (uint64_t)1U; + uint64_t x_xor_q_ = x_xor_q >> 63U; + return x_xor_q_ - 1ULL; } extern Prims_string FStar_UInt64_to_string(uint64_t uu___); @@ -71,12 +75,16 @@ extern krml_checked_int_t FStar_UInt32___proj__Mk__item__v(uint32_t projectee); extern krml_checked_int_t FStar_UInt32_v(uint32_t x); +typedef void *FStar_UInt32_fits; + extern uint32_t FStar_UInt32_uint_to_t(krml_checked_int_t x); extern uint32_t FStar_UInt32_zero; extern uint32_t FStar_UInt32_one; +extern bool FStar_UInt32_ne(uint32_t a, uint32_t b); + extern uint32_t FStar_UInt32_minus(uint32_t a); extern uint32_t FStar_UInt32_n_minus_one; @@ -85,10 +93,10 @@ static KRML_NOINLINE uint32_t FStar_UInt32_eq_mask(uint32_t a, uint32_t b) { uint32_t x = a ^ b; - uint32_t minus_x = ~x + (uint32_t)1U; + uint32_t minus_x = ~x + 1U; uint32_t x_or_minus_x = x | minus_x; - uint32_t xnx = x_or_minus_x >> (uint32_t)31U; - return xnx - (uint32_t)1U; + uint32_t xnx = x_or_minus_x >> 31U; + return xnx - 1U; } static KRML_NOINLINE uint32_t @@ -101,8 +109,8 @@ FStar_UInt32_gte_mask(uint32_t a, uint32_t b) uint32_t x_sub_y_xor_y = x_sub_y ^ y; uint32_t q = x_xor_y | x_sub_y_xor_y; uint32_t x_xor_q = x ^ q; - uint32_t x_xor_q_ = x_xor_q >> (uint32_t)31U; - return x_xor_q_ - (uint32_t)1U; + uint32_t x_xor_q_ = x_xor_q >> 31U; + return x_xor_q_ - 1U; } extern Prims_string FStar_UInt32_to_string(uint32_t uu___); @@ -121,12 +129,16 @@ extern krml_checked_int_t FStar_UInt16___proj__Mk__item__v(uint16_t projectee); extern krml_checked_int_t FStar_UInt16_v(uint16_t x); +typedef void *FStar_UInt16_fits; + extern uint16_t FStar_UInt16_uint_to_t(krml_checked_int_t x); extern uint16_t FStar_UInt16_zero; extern uint16_t FStar_UInt16_one; +extern bool FStar_UInt16_ne(uint16_t a, uint16_t b); + extern uint16_t FStar_UInt16_minus(uint16_t a); extern uint32_t FStar_UInt16_n_minus_one; @@ -134,11 +146,11 @@ extern uint32_t FStar_UInt16_n_minus_one; static KRML_NOINLINE uint16_t FStar_UInt16_eq_mask(uint16_t a, uint16_t b) { - uint16_t x = a ^ b; - uint16_t minus_x = ~x + (uint16_t)1U; - uint16_t x_or_minus_x = x | minus_x; - uint16_t xnx = x_or_minus_x >> (uint32_t)15U; - return xnx - (uint16_t)1U; + uint16_t x = (uint32_t)a ^ (uint32_t)b; + uint16_t minus_x = (uint32_t)~x + 1U; + uint16_t x_or_minus_x = (uint32_t)x | (uint32_t)minus_x; + uint16_t xnx = (uint32_t)x_or_minus_x >> 15U; + return (uint32_t)xnx - 1U; } static KRML_NOINLINE uint16_t @@ -146,13 +158,13 @@ FStar_UInt16_gte_mask(uint16_t a, uint16_t b) { uint16_t x = a; uint16_t y = b; - uint16_t x_xor_y = x ^ y; - uint16_t x_sub_y = x - y; - uint16_t x_sub_y_xor_y = x_sub_y ^ y; - uint16_t q = x_xor_y | x_sub_y_xor_y; - uint16_t x_xor_q = x ^ q; - uint16_t x_xor_q_ = x_xor_q >> (uint32_t)15U; - return x_xor_q_ - (uint16_t)1U; + uint16_t x_xor_y = (uint32_t)x ^ (uint32_t)y; + uint16_t x_sub_y = (uint32_t)x - (uint32_t)y; + uint16_t x_sub_y_xor_y = (uint32_t)x_sub_y ^ (uint32_t)y; + uint16_t q = (uint32_t)x_xor_y | (uint32_t)x_sub_y_xor_y; + uint16_t x_xor_q = (uint32_t)x ^ (uint32_t)q; + uint16_t x_xor_q_ = (uint32_t)x_xor_q >> 15U; + return (uint32_t)x_xor_q_ - 1U; } extern Prims_string FStar_UInt16_to_string(uint16_t uu___); @@ -171,12 +183,16 @@ extern krml_checked_int_t FStar_UInt8___proj__Mk__item__v(uint8_t projectee); extern krml_checked_int_t FStar_UInt8_v(uint8_t x); +typedef void *FStar_UInt8_fits; + extern uint8_t FStar_UInt8_uint_to_t(krml_checked_int_t x); extern uint8_t FStar_UInt8_zero; extern uint8_t FStar_UInt8_one; +extern bool FStar_UInt8_ne(uint8_t a, uint8_t b); + extern uint8_t FStar_UInt8_minus(uint8_t a); extern uint32_t FStar_UInt8_n_minus_one; @@ -184,11 +200,11 @@ extern uint32_t FStar_UInt8_n_minus_one; static KRML_NOINLINE uint8_t FStar_UInt8_eq_mask(uint8_t a, uint8_t b) { - uint8_t x = a ^ b; - uint8_t minus_x = ~x + (uint8_t)1U; - uint8_t x_or_minus_x = x | minus_x; - uint8_t xnx = x_or_minus_x >> (uint32_t)7U; - return xnx - (uint8_t)1U; + uint8_t x = (uint32_t)a ^ (uint32_t)b; + uint8_t minus_x = (uint32_t)~x + 1U; + uint8_t x_or_minus_x = (uint32_t)x | (uint32_t)minus_x; + uint8_t xnx = (uint32_t)x_or_minus_x >> 7U; + return (uint32_t)xnx - 1U; } static KRML_NOINLINE uint8_t @@ -196,13 +212,13 @@ FStar_UInt8_gte_mask(uint8_t a, uint8_t b) { uint8_t x = a; uint8_t y = b; - uint8_t x_xor_y = x ^ y; - uint8_t x_sub_y = x - y; - uint8_t x_sub_y_xor_y = x_sub_y ^ y; - uint8_t q = x_xor_y | x_sub_y_xor_y; - uint8_t x_xor_q = x ^ q; - uint8_t x_xor_q_ = x_xor_q >> (uint32_t)7U; - return x_xor_q_ - (uint8_t)1U; + uint8_t x_xor_y = (uint32_t)x ^ (uint32_t)y; + uint8_t x_sub_y = (uint32_t)x - (uint32_t)y; + uint8_t x_sub_y_xor_y = (uint32_t)x_sub_y ^ (uint32_t)y; + uint8_t q = (uint32_t)x_xor_y | (uint32_t)x_sub_y_xor_y; + uint8_t x_xor_q = (uint32_t)x ^ (uint32_t)q; + uint8_t x_xor_q_ = (uint32_t)x_xor_q >> 7U; + return (uint32_t)x_xor_q_ - 1U; } extern Prims_string FStar_UInt8_to_string(uint8_t uu___); @@ -215,5 +231,5 @@ extern uint8_t FStar_UInt8_of_string(Prims_string uu___); typedef uint8_t FStar_UInt8_byte; -#define __FStar_UInt_8_16_32_64_H_DEFINED -#endif +#define FStar_UInt_8_16_32_64_H_DEFINED +#endif /* FStar_UInt_8_16_32_64_H */ diff --git a/security/nss/lib/freebl/verified/karamel/krmllib/dist/minimal/LowStar_Endianness.h b/security/nss/lib/freebl/verified/karamel/krmllib/dist/minimal/LowStar_Endianness.h @@ -1,10 +1,10 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. + Licensed under the Apache 2.0 and MIT Licenses. */ -#ifndef __LowStar_Endianness_H -#define __LowStar_Endianness_H +#ifndef LowStar_Endianness_H +#define LowStar_Endianness_H #include <inttypes.h> #include <stdbool.h> @@ -21,5 +21,5 @@ static inline void store128_be(uint8_t *x0, FStar_UInt128_uint128 x1); static inline FStar_UInt128_uint128 load128_be(uint8_t *x0); -#define __LowStar_Endianness_H_DEFINED -#endif +#define LowStar_Endianness_H_DEFINED +#endif /* LowStar_Endianness_H */ diff --git a/security/nss/lib/freebl/verified/karamel/krmllib/dist/minimal/fstar_uint128_gcc64.h b/security/nss/lib/freebl/verified/karamel/krmllib/dist/minimal/fstar_uint128_gcc64.h @@ -1,5 +1,5 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. */ + Licensed under the Apache 2.0 and MIT Licenses. */ /******************************************************************************/ /* Machine integers (128-bit arithmetic) */ diff --git a/security/nss/lib/freebl/verified/karamel/krmllib/dist/minimal/fstar_uint128_msvc.h b/security/nss/lib/freebl/verified/karamel/krmllib/dist/minimal/fstar_uint128_msvc.h @@ -1,5 +1,5 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. */ + Licensed under the Apache 2.0 and MIT Licenses. */ /* This file was generated by KaRaMeL <https://github.com/FStarLang/karamel> * then hand-edited to use MSVC intrinsics KaRaMeL invocation: @@ -242,7 +242,7 @@ static const uint32_t FStar_UInt128_u32_64 = (uint32_t)64U; inline static uint64_t FStar_UInt128_add_u64_shift_left(uint64_t hi, uint64_t lo, uint32_t s) { - return (hi << s) + (lo >> FStar_UInt128_u32_64 - s); + return (hi << s) + (lo >> (FStar_UInt128_u32_64 - s)); } inline static uint64_t @@ -269,7 +269,7 @@ FStar_UInt128_shift_left_large(FStar_UInt128_uint128 a, uint32_t s) { FStar_UInt128_uint128 lit; lit.low = (uint64_t)0U; - lit.high = a.low << s - FStar_UInt128_u32_64; + lit.high = a.low << (s - FStar_UInt128_u32_64); return lit; } @@ -297,7 +297,7 @@ FStar_UInt128_shift_left(FStar_UInt128_uint128 a, uint32_t s) inline static uint64_t FStar_UInt128_add_u64_shift_right(uint64_t hi, uint64_t lo, uint32_t s) { - return (lo >> s) + (hi << FStar_UInt128_u32_64 - s); + return (lo >> s) + (hi << (FStar_UInt128_u32_64 - s)); } inline static uint64_t @@ -323,7 +323,7 @@ inline static FStar_UInt128_uint128 FStar_UInt128_shift_right_large(FStar_UInt128_uint128 a, uint32_t s) { FStar_UInt128_uint128 lit; - lit.low = a.high >> s - FStar_UInt128_u32_64; + lit.low = a.high >> (s - FStar_UInt128_u32_64); lit.high = (uint64_t)0U; return lit; } @@ -548,7 +548,7 @@ FStar_UInt128_mul_wide_impl(uint64_t x, uint64_t y) u1 * (y >> FStar_UInt128_u32_32) + FStar_UInt128_u64_mod_32(t_), w3); lit.high = x_ * (y >> FStar_UInt128_u32_32) + (t_ >> FStar_UInt128_u32_32) + - (u1 * (y >> FStar_UInt128_u32_32) + FStar_UInt128_u64_mod_32(t_) >> + ((u1 * (y >> FStar_UInt128_u32_32) + FStar_UInt128_u64_mod_32(t_)) >> FStar_UInt128_u32_32); return lit; } diff --git a/security/nss/lib/freebl/verified/karamel/krmllib/dist/minimal/fstar_uint128_struct_endianness.h b/security/nss/lib/freebl/verified/karamel/krmllib/dist/minimal/fstar_uint128_struct_endianness.h @@ -1,5 +1,5 @@ /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. - Licensed under the Apache 2.0 License. */ + Licensed under the Apache 2.0 and MIT Licenses. */ #ifndef FSTAR_UINT128_STRUCT_ENDIANNESS_H #define FSTAR_UINT128_STRUCT_ENDIANNESS_H diff --git a/security/nss/lib/freebl/verified/libcrux_core.c b/security/nss/lib/freebl/verified/libcrux_core.c @@ -1,14 +1,14 @@ /* - * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com> + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> * * SPDX-License-Identifier: MIT or Apache-2.0 * * This code was generated with the following revisions: - * Charon: b351338f6a84c7a1afc27433eb0ffdc668b3581d - * Eurydice: 7efec1624422fd5e94388ef06b9c76dfe7a48d46 - * Karamel: c96fb69d15693284644d6aecaa90afa37e4de8f0 - * F*: 58c915a86a2c07c8eca8d9deafd76cb7a91f0eb7 - * Libcrux: 6ff01fb3c57ff29ecb59bc62d9dc7fd231060cfb + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc */ #include "internal/libcrux_core.h" @@ -16,16 +16,13 @@ /** Return 1 if `value` is not zero and 0 otherwise. */ -static uint8_t +static KRML_NOINLINE uint8_t inz(uint8_t value) { uint16_t value0 = (uint16_t)value; - uint16_t result = (((uint32_t)value0 | - (uint32_t)core_num__u16_7__wrapping_add(~value0, 1U)) & - 0xFFFFU) >> - 8U & - 1U; - return (uint8_t)result; + uint8_t result = + (uint8_t)((uint32_t)core_num__u16__wrapping_add(~value0, 1U) >> 8U); + return (uint32_t)result & 1U; } static KRML_NOINLINE uint8_t @@ -38,15 +35,16 @@ is_non_zero(uint8_t value) Return 1 if the bytes of `lhs` and `rhs` do not exactly match and 0 otherwise. */ -static uint8_t +static KRML_NOINLINE uint8_t compare(Eurydice_slice lhs, Eurydice_slice rhs) { uint8_t r = 0U; for (size_t i = (size_t)0U; i < Eurydice_slice_len(lhs, uint8_t); i++) { size_t i0 = i; - r = (uint32_t)r | - ((uint32_t)Eurydice_slice_index(lhs, i0, uint8_t, uint8_t *) ^ - (uint32_t)Eurydice_slice_index(rhs, i0, uint8_t, uint8_t *)); + uint8_t nr = (uint32_t)r | + ((uint32_t)Eurydice_slice_index(lhs, i0, uint8_t, uint8_t *) ^ + (uint32_t)Eurydice_slice_index(rhs, i0, uint8_t, uint8_t *)); + r = nr; } return is_non_zero(r); } @@ -61,19 +59,21 @@ compare_ciphertexts_in_constant_time(Eurydice_slice lhs, Eurydice_slice rhs) If `selector` is not zero, return the bytes in `rhs`; return the bytes in `lhs` otherwise. */ -static void -select_ct(Eurydice_slice lhs, Eurydice_slice rhs, uint8_t selector, - uint8_t ret[32U]) +static KRML_NOINLINE void +select_ct(Eurydice_slice lhs, Eurydice_slice rhs, + uint8_t selector, uint8_t ret[32U]) { - uint8_t mask = core_num__u8_6__wrapping_sub(is_non_zero(selector), 1U); + uint8_t mask = core_num__u8__wrapping_sub(is_non_zero(selector), 1U); uint8_t out[32U] = { 0U }; for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE; i++) { size_t i0 = i; - out[i0] = ((uint32_t)Eurydice_slice_index(lhs, i0, uint8_t, uint8_t *) & - (uint32_t)mask) | - ((uint32_t)Eurydice_slice_index(rhs, i0, uint8_t, uint8_t *) & - (uint32_t)~mask); + uint8_t outi = + ((uint32_t)Eurydice_slice_index(lhs, i0, uint8_t, uint8_t *) & + (uint32_t)mask) | + ((uint32_t)Eurydice_slice_index(rhs, i0, uint8_t, uint8_t *) & + (uint32_t)~mask); + out[i0] = outi; } memcpy(ret, out, (size_t)32U * sizeof(uint8_t)); } @@ -86,7 +86,7 @@ select_shared_secret_in_constant_time( select_ct(lhs, rhs, selector, ret); } -void +KRML_NOINLINE void libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time( Eurydice_slice lhs_c, Eurydice_slice rhs_c, Eurydice_slice lhs_s, Eurydice_slice rhs_s, uint8_t ret[32U]) @@ -98,29 +98,313 @@ libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_con } /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemPublicKey<SIZE>)#14} + K * BITS_PER_RING_ELEMENT / 8 + + [eurydice] Note that we can't use const generics here because that breaks + C extraction with eurydice. */ +size_t +libcrux_ml_kem_constants_ranked_bytes_per_ring_element(size_t rank) +{ + return rank * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U; +} + /** -A monomorphic instance of libcrux_ml_kem.types.from_b6 -with const generics -- SIZE= 1568 + Construct a public integer (identity) */ -libcrux_ml_kem_types_MlKemPublicKey_1f -libcrux_ml_kem_types_from_b6_961( - uint8_t value[1568U]) +/** +A monomorphic instance of libcrux_secrets.int.public_integers.secret +with types int16_t + +*/ +static KRML_MUSTINLINE int16_t +secret_39(int16_t x) { - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_value[1568U]; - memcpy(copy_of_value, value, (size_t)1568U * sizeof(uint8_t)); - libcrux_ml_kem_types_MlKemPublicKey_1f lit; - memcpy(lit.value, copy_of_value, (size_t)1568U * sizeof(uint8_t)); - return lit; + return x; +} + +int16_t +libcrux_secrets_int_I16(int16_t v) +{ + return secret_39(v); +} + +/** +This function found in impl {libcrux_secrets::traits::Classify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.classify_27 +with types int16_t + +*/ +int16_t +libcrux_secrets_int_public_integers_classify_27_39(int16_t self) +{ + return self; +} + +/** +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint8_t + +*/ +static KRML_MUSTINLINE uint8_t +declassify_d8_90(uint8_t self) +{ + return self; +} + +/** +This function found in impl {libcrux_secrets::int::CastOps for u8} +*/ +int16_t +libcrux_secrets_int_as_i16_59(uint8_t self) +{ + return libcrux_secrets_int_public_integers_classify_27_39( + (int16_t)declassify_d8_90(self)); +} + +/** +This function found in impl {libcrux_secrets::traits::Classify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.classify_27 +with types uint8_t + +*/ +static KRML_MUSTINLINE uint8_t +classify_27_90(uint8_t self) +{ + return self; +} + +/** +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types int16_t + +*/ +int16_t +libcrux_secrets_int_public_integers_declassify_d8_39(int16_t self) +{ + return self; +} + +/** +This function found in impl {libcrux_secrets::int::CastOps for i16} +*/ +uint8_t +libcrux_secrets_int_as_u8_f5(int16_t self) +{ + return classify_27_90( + (uint8_t)libcrux_secrets_int_public_integers_declassify_d8_39(self)); +} + +/** +This function found in impl {libcrux_secrets::traits::Classify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.classify_27 +with types int32_t + +*/ +static KRML_MUSTINLINE int32_t +classify_27_a8(int32_t self) +{ + return self; +} + +/** +This function found in impl {libcrux_secrets::int::CastOps for i16} +*/ +int32_t +libcrux_secrets_int_as_i32_f5(int16_t self) +{ + return classify_27_a8( + (int32_t)libcrux_secrets_int_public_integers_declassify_d8_39(self)); +} + +/** +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types int32_t + +*/ +static KRML_MUSTINLINE int32_t +declassify_d8_a8(int32_t self) +{ + return self; +} + +/** +This function found in impl {libcrux_secrets::int::CastOps for i32} +*/ +int16_t +libcrux_secrets_int_as_i16_36(int32_t self) +{ + return libcrux_secrets_int_public_integers_classify_27_39( + (int16_t)declassify_d8_a8(self)); +} + +/** +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint32_t + +*/ +static KRML_MUSTINLINE uint32_t +declassify_d8_df(uint32_t self) +{ + return self; +} + +/** +This function found in impl {libcrux_secrets::int::CastOps for u32} +*/ +int32_t +libcrux_secrets_int_as_i32_b8(uint32_t self) +{ + return classify_27_a8((int32_t)declassify_d8_df(self)); +} + +/** +This function found in impl {libcrux_secrets::traits::Classify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.classify_27 +with types uint16_t + +*/ +static KRML_MUSTINLINE uint16_t +classify_27_de(uint16_t self) +{ + return self; +} + +/** +This function found in impl {libcrux_secrets::int::CastOps for i16} +*/ +uint16_t +libcrux_secrets_int_as_u16_f5(int16_t self) +{ + return classify_27_de( + (uint16_t)libcrux_secrets_int_public_integers_declassify_d8_39(self)); +} + +/** +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint16_t + +*/ +static KRML_MUSTINLINE uint16_t +declassify_d8_de(uint16_t self) +{ + return self; +} + +/** +This function found in impl {libcrux_secrets::int::CastOps for u16} +*/ +int16_t +libcrux_secrets_int_as_i16_ca(uint16_t self) +{ + return libcrux_secrets_int_public_integers_classify_27_39( + (int16_t)declassify_d8_de(self)); +} + +/** +This function found in impl {libcrux_secrets::traits::Classify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.classify_27 +with types uint64_t + +*/ +static KRML_MUSTINLINE uint64_t +classify_27_49(uint64_t self) +{ + return self; +} + +/** +This function found in impl {libcrux_secrets::int::CastOps for u16} +*/ +uint64_t +libcrux_secrets_int_as_u64_ca(uint16_t self) +{ + return classify_27_49((uint64_t)declassify_d8_de(self)); +} + +/** +This function found in impl {libcrux_secrets::traits::Classify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.classify_27 +with types uint32_t + +*/ +uint32_t +libcrux_secrets_int_public_integers_classify_27_df(uint32_t self) +{ + return self; +} + +/** +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint64_t + +*/ +static KRML_MUSTINLINE uint64_t +declassify_d8_49(uint64_t self) +{ + return self; +} + +/** +This function found in impl {libcrux_secrets::int::CastOps for u64} +*/ +uint32_t +libcrux_secrets_int_as_u32_a3(uint64_t self) +{ + return libcrux_secrets_int_public_integers_classify_27_df( + (uint32_t)declassify_d8_49(self)); +} + +/** +This function found in impl {libcrux_secrets::int::CastOps for u32} +*/ +int16_t +libcrux_secrets_int_as_i16_b8(uint32_t self) +{ + return libcrux_secrets_int_public_integers_classify_27_39( + (int16_t)declassify_d8_df(self)); } /** - Create a new [`MlKemKeyPair`] from the secret and public key. +This function found in impl {libcrux_secrets::int::CastOps for i16} */ +int16_t +libcrux_secrets_int_as_i16_f5(int16_t self) +{ + return libcrux_secrets_int_public_integers_classify_27_39( + libcrux_secrets_int_public_integers_declassify_d8_39(self)); +} + /** This function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>} @@ -132,186 +416,187 @@ with const generics - PUBLIC_KEY_SIZE= 1568 */ libcrux_ml_kem_mlkem1024_MlKem1024KeyPair -libcrux_ml_kem_types_from_17_821( - libcrux_ml_kem_types_MlKemPrivateKey_95 sk, - libcrux_ml_kem_types_MlKemPublicKey_1f pk) +libcrux_ml_kem_types_from_17_94( + libcrux_ml_kem_types_MlKemPrivateKey_83 sk, + libcrux_ml_kem_types_MlKemPublicKey_64 pk) { - return ( - CLITERAL(libcrux_ml_kem_mlkem1024_MlKem1024KeyPair){ .sk = sk, .pk = pk }); + return (KRML_CLITERAL(libcrux_ml_kem_mlkem1024_MlKem1024KeyPair){ .sk = sk, + .pk = pk }); } /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemPrivateKey<SIZE>)#8} +This function found in impl {core::convert::From<@Array<u8, SIZE>> for +libcrux_ml_kem::types::MlKemPrivateKey<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.from_05 +A monomorphic instance of libcrux_ml_kem.types.from_77 with const generics - SIZE= 3168 */ -libcrux_ml_kem_types_MlKemPrivateKey_95 -libcrux_ml_kem_types_from_05_891( +libcrux_ml_kem_types_MlKemPrivateKey_83 +libcrux_ml_kem_types_from_77_39( uint8_t value[3168U]) { /* Passing arrays by value in Rust generates a copy in C */ uint8_t copy_of_value[3168U]; memcpy(copy_of_value, value, (size_t)3168U * sizeof(uint8_t)); - libcrux_ml_kem_types_MlKemPrivateKey_95 lit; + libcrux_ml_kem_types_MlKemPrivateKey_83 lit; memcpy(lit.value, copy_of_value, (size_t)3168U * sizeof(uint8_t)); return lit; } /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemCiphertext<SIZE>)#2} +This function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.from_01 +A monomorphic instance of libcrux_ml_kem.types.as_slice_a9 with const generics - SIZE= 1568 */ -libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext -libcrux_ml_kem_types_from_01_331( - uint8_t value[1568U]) +uint8_t * +libcrux_ml_kem_types_as_slice_a9_af( + libcrux_ml_kem_types_MlKemCiphertext_64 *self) { - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_value[1568U]; - memcpy(copy_of_value, value, (size_t)1568U * sizeof(uint8_t)); - libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext lit; - memcpy(lit.value, copy_of_value, (size_t)1568U * sizeof(uint8_t)); - return lit; + return self->value; } /** - A reference to the raw byte slice. +This function found in impl +{libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>} */ /** -This function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>#18} +A monomorphic instance of libcrux_ml_kem.types.from_17 +with const generics +- PRIVATE_KEY_SIZE= 2400 +- PUBLIC_KEY_SIZE= 1184 +*/ +libcrux_ml_kem_mlkem768_MlKem768KeyPair +libcrux_ml_kem_types_from_17_74( + libcrux_ml_kem_types_MlKemPrivateKey_d9 sk, + libcrux_ml_kem_types_MlKemPublicKey_30 pk) +{ + return (KRML_CLITERAL(libcrux_ml_kem_mlkem768_MlKem768KeyPair){ .sk = sk, + .pk = pk }); +} + +/** +This function found in impl {core::convert::From<@Array<u8, SIZE>> for +libcrux_ml_kem::types::MlKemPrivateKey<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.as_slice_cb +A monomorphic instance of libcrux_ml_kem.types.from_77 with const generics -- SIZE= 1568 +- SIZE= 2400 */ -uint8_t * -libcrux_ml_kem_types_as_slice_cb_3d1( - libcrux_ml_kem_types_MlKemPublicKey_1f *self) +libcrux_ml_kem_types_MlKemPrivateKey_d9 +libcrux_ml_kem_types_from_77_28( + uint8_t value[2400U]) { - return self->value; + /* Passing arrays by value in Rust generates a copy in C */ + uint8_t copy_of_value[2400U]; + memcpy(copy_of_value, value, (size_t)2400U * sizeof(uint8_t)); + libcrux_ml_kem_types_MlKemPrivateKey_d9 lit; + memcpy(lit.value, copy_of_value, (size_t)2400U * sizeof(uint8_t)); + return lit; } /** -This function found in impl {(core::convert::AsRef<@Slice<u8>> for -libcrux_ml_kem::types::MlKemCiphertext<SIZE>)#1} +This function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.as_ref_00 +A monomorphic instance of libcrux_ml_kem.types.as_slice_a9 with const generics -- SIZE= 1568 +- SIZE= 1088 */ -Eurydice_slice -libcrux_ml_kem_types_as_ref_00_d81( - libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext *self) +uint8_t * +libcrux_ml_kem_types_as_slice_a9_80( + libcrux_ml_kem_mlkem768_MlKem768Ciphertext *self) { - return Eurydice_array_to_slice((size_t)1568U, self->value, uint8_t); + return self->value; } /** - Pad the `slice` with `0`s at the end. +This function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.utils.into_padded_array +A monomorphic instance of libcrux_ml_kem.types.as_slice_e6 with const generics -- LEN= 1600 +- SIZE= 1184 */ -void -libcrux_ml_kem_utils_into_padded_array_6d4(Eurydice_slice slice, - uint8_t ret[1600U]) +uint8_t * +libcrux_ml_kem_types_as_slice_e6_d0( + libcrux_ml_kem_types_MlKemPublicKey_30 *self) { - uint8_t out[1600U] = { 0U }; - uint8_t *uu____0 = out; - Eurydice_slice_copy( - Eurydice_array_to_subslice2(uu____0, (size_t)0U, - Eurydice_slice_len(slice, uint8_t), uint8_t), - slice, uint8_t); - memcpy(ret, out, (size_t)1600U * sizeof(uint8_t)); + return self->value; } /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemPublicKey<SIZE>)#14} +This function found in impl {core::convert::From<@Array<u8, SIZE>> for +libcrux_ml_kem::types::MlKemPublicKey<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.from_b6 +A monomorphic instance of libcrux_ml_kem.types.from_fd with const generics - SIZE= 1184 */ -libcrux_ml_kem_types_MlKemPublicKey_15 -libcrux_ml_kem_types_from_b6_960( +libcrux_ml_kem_types_MlKemPublicKey_30 +libcrux_ml_kem_types_from_fd_d0( uint8_t value[1184U]) { /* Passing arrays by value in Rust generates a copy in C */ uint8_t copy_of_value[1184U]; memcpy(copy_of_value, value, (size_t)1184U * sizeof(uint8_t)); - libcrux_ml_kem_types_MlKemPublicKey_15 lit; + libcrux_ml_kem_types_MlKemPublicKey_30 lit; memcpy(lit.value, copy_of_value, (size_t)1184U * sizeof(uint8_t)); return lit; } /** - Create a new [`MlKemKeyPair`] from the secret and public key. -*/ -/** -This function found in impl -{libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>} + Unpack an incoming private key into it's different parts. + + We have this here in types to extract into a common core for C. */ /** -A monomorphic instance of libcrux_ml_kem.types.from_17 +A monomorphic instance of libcrux_ml_kem.types.unpack_private_key with const generics -- PRIVATE_KEY_SIZE= 2400 +- CPA_SECRET_KEY_SIZE= 1152 - PUBLIC_KEY_SIZE= 1184 */ -libcrux_ml_kem_mlkem768_MlKem768KeyPair -libcrux_ml_kem_types_from_17_820( - libcrux_ml_kem_types_MlKemPrivateKey_55 sk, - libcrux_ml_kem_types_MlKemPublicKey_15 pk) +Eurydice_slice_uint8_t_x4 +libcrux_ml_kem_types_unpack_private_key_b4( + Eurydice_slice private_key) { + Eurydice_slice_uint8_t_x2 uu____0 = Eurydice_slice_split_at( + private_key, (size_t)1152U, uint8_t, Eurydice_slice_uint8_t_x2); + Eurydice_slice ind_cpa_secret_key = uu____0.fst; + Eurydice_slice secret_key0 = uu____0.snd; + Eurydice_slice_uint8_t_x2 uu____1 = Eurydice_slice_split_at( + secret_key0, (size_t)1184U, uint8_t, Eurydice_slice_uint8_t_x2); + Eurydice_slice ind_cpa_public_key = uu____1.fst; + Eurydice_slice secret_key = uu____1.snd; + Eurydice_slice_uint8_t_x2 uu____2 = Eurydice_slice_split_at( + secret_key, LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t, + Eurydice_slice_uint8_t_x2); + Eurydice_slice ind_cpa_public_key_hash = uu____2.fst; + Eurydice_slice implicit_rejection_value = uu____2.snd; return ( - CLITERAL(libcrux_ml_kem_mlkem768_MlKem768KeyPair){ .sk = sk, .pk = pk }); + KRML_CLITERAL(Eurydice_slice_uint8_t_x4){ .fst = ind_cpa_secret_key, + .snd = ind_cpa_public_key, + .thd = ind_cpa_public_key_hash, + .f3 = implicit_rejection_value }); } /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemPrivateKey<SIZE>)#8} +This function found in impl {core::convert::From<@Array<u8, SIZE>> for +libcrux_ml_kem::types::MlKemCiphertext<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.from_05 -with const generics -- SIZE= 2400 -*/ -libcrux_ml_kem_types_MlKemPrivateKey_55 -libcrux_ml_kem_types_from_05_890( - uint8_t value[2400U]) -{ - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_value[2400U]; - memcpy(copy_of_value, value, (size_t)2400U * sizeof(uint8_t)); - libcrux_ml_kem_types_MlKemPrivateKey_55 lit; - memcpy(lit.value, copy_of_value, (size_t)2400U * sizeof(uint8_t)); - return lit; -} - -/** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemCiphertext<SIZE>)#2} -*/ -/** -A monomorphic instance of libcrux_ml_kem.types.from_01 +A monomorphic instance of libcrux_ml_kem.types.from_e0 with const generics - SIZE= 1088 */ libcrux_ml_kem_mlkem768_MlKem768Ciphertext -libcrux_ml_kem_types_from_01_330( +libcrux_ml_kem_types_from_e0_80( uint8_t value[1088U]) { /* Passing arrays by value in Rust generates a copy in C */ @@ -323,34 +608,31 @@ libcrux_ml_kem_types_from_01_330( } /** - A reference to the raw byte slice. -*/ -/** -This function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>#18} -*/ -/** -A monomorphic instance of libcrux_ml_kem.types.as_slice_cb +A monomorphic instance of libcrux_ml_kem.utils.prf_input_inc with const generics -- SIZE= 1184 +- K= 3 */ -uint8_t * -libcrux_ml_kem_types_as_slice_cb_3d0( - libcrux_ml_kem_types_MlKemPublicKey_15 *self) +uint8_t +libcrux_ml_kem_utils_prf_input_inc_e0(uint8_t (*prf_inputs)[33U], + uint8_t domain_separator) { - return self->value; + KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, size_t i0 = i; + prf_inputs[i0][32U] = domain_separator; + domain_separator = (uint32_t)domain_separator + 1U;); + return domain_separator; } /** -This function found in impl {(core::convert::AsRef<@Slice<u8>> for -libcrux_ml_kem::types::MlKemCiphertext<SIZE>)#1} +This function found in impl {core::convert::AsRef<@Slice<u8>> for +libcrux_ml_kem::types::MlKemCiphertext<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.as_ref_00 +A monomorphic instance of libcrux_ml_kem.types.as_ref_d3 with const generics - SIZE= 1088 */ Eurydice_slice -libcrux_ml_kem_types_as_ref_00_d80( +libcrux_ml_kem_types_as_ref_d3_80( libcrux_ml_kem_mlkem768_MlKem768Ciphertext *self) { return Eurydice_array_to_slice((size_t)1088U, self->value, uint8_t); @@ -365,91 +647,100 @@ with const generics - LEN= 1120 */ void -libcrux_ml_kem_utils_into_padded_array_6d3(Eurydice_slice slice, - uint8_t ret[1120U]) +libcrux_ml_kem_utils_into_padded_array_15(Eurydice_slice slice, + uint8_t ret[1120U]) { uint8_t out[1120U] = { 0U }; uint8_t *uu____0 = out; Eurydice_slice_copy( - Eurydice_array_to_subslice2(uu____0, (size_t)0U, - Eurydice_slice_len(slice, uint8_t), uint8_t), + Eurydice_array_to_subslice3( + uu____0, (size_t)0U, Eurydice_slice_len(slice, uint8_t), uint8_t *), slice, uint8_t); memcpy(ret, out, (size_t)1120U * sizeof(uint8_t)); } /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemPublicKey<SIZE>)#14} +This function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.from_b6 +A monomorphic instance of libcrux_ml_kem.types.as_slice_e6 with const generics -- SIZE= 800 +- SIZE= 1568 */ -libcrux_ml_kem_types_MlKemPublicKey_be -libcrux_ml_kem_types_from_b6_96( - uint8_t value[800U]) +uint8_t * +libcrux_ml_kem_types_as_slice_e6_af( + libcrux_ml_kem_types_MlKemPublicKey_64 *self) { - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_value[800U]; - memcpy(copy_of_value, value, (size_t)800U * sizeof(uint8_t)); - libcrux_ml_kem_types_MlKemPublicKey_be lit; - memcpy(lit.value, copy_of_value, (size_t)800U * sizeof(uint8_t)); - return lit; + return self->value; } /** - Create a new [`MlKemKeyPair`] from the secret and public key. +This function found in impl {core::convert::From<@Array<u8, SIZE>> for +libcrux_ml_kem::types::MlKemPublicKey<SIZE>} */ /** -This function found in impl -{libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>} -*/ -/** -A monomorphic instance of libcrux_ml_kem.types.from_17 +A monomorphic instance of libcrux_ml_kem.types.from_fd with const generics -- PRIVATE_KEY_SIZE= 1632 -- PUBLIC_KEY_SIZE= 800 +- SIZE= 1568 */ -libcrux_ml_kem_types_MlKemKeyPair_cb -libcrux_ml_kem_types_from_17_82( - libcrux_ml_kem_types_MlKemPrivateKey_5e sk, - libcrux_ml_kem_types_MlKemPublicKey_be pk) +libcrux_ml_kem_types_MlKemPublicKey_64 +libcrux_ml_kem_types_from_fd_af( + uint8_t value[1568U]) { - return (CLITERAL(libcrux_ml_kem_types_MlKemKeyPair_cb){ .sk = sk, .pk = pk }); + /* Passing arrays by value in Rust generates a copy in C */ + uint8_t copy_of_value[1568U]; + memcpy(copy_of_value, value, (size_t)1568U * sizeof(uint8_t)); + libcrux_ml_kem_types_MlKemPublicKey_64 lit; + memcpy(lit.value, copy_of_value, (size_t)1568U * sizeof(uint8_t)); + return lit; } /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemPrivateKey<SIZE>)#8} + Unpack an incoming private key into it's different parts. + + We have this here in types to extract into a common core for C. */ /** -A monomorphic instance of libcrux_ml_kem.types.from_05 +A monomorphic instance of libcrux_ml_kem.types.unpack_private_key with const generics -- SIZE= 1632 +- CPA_SECRET_KEY_SIZE= 1536 +- PUBLIC_KEY_SIZE= 1568 */ -libcrux_ml_kem_types_MlKemPrivateKey_5e -libcrux_ml_kem_types_from_05_89( - uint8_t value[1632U]) +Eurydice_slice_uint8_t_x4 +libcrux_ml_kem_types_unpack_private_key_1f( + Eurydice_slice private_key) { - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_value[1632U]; - memcpy(copy_of_value, value, (size_t)1632U * sizeof(uint8_t)); - libcrux_ml_kem_types_MlKemPrivateKey_5e lit; - memcpy(lit.value, copy_of_value, (size_t)1632U * sizeof(uint8_t)); - return lit; + Eurydice_slice_uint8_t_x2 uu____0 = Eurydice_slice_split_at( + private_key, (size_t)1536U, uint8_t, Eurydice_slice_uint8_t_x2); + Eurydice_slice ind_cpa_secret_key = uu____0.fst; + Eurydice_slice secret_key0 = uu____0.snd; + Eurydice_slice_uint8_t_x2 uu____1 = Eurydice_slice_split_at( + secret_key0, (size_t)1568U, uint8_t, Eurydice_slice_uint8_t_x2); + Eurydice_slice ind_cpa_public_key = uu____1.fst; + Eurydice_slice secret_key = uu____1.snd; + Eurydice_slice_uint8_t_x2 uu____2 = Eurydice_slice_split_at( + secret_key, LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t, + Eurydice_slice_uint8_t_x2); + Eurydice_slice ind_cpa_public_key_hash = uu____2.fst; + Eurydice_slice implicit_rejection_value = uu____2.snd; + return ( + KRML_CLITERAL(Eurydice_slice_uint8_t_x4){ .fst = ind_cpa_secret_key, + .snd = ind_cpa_public_key, + .thd = ind_cpa_public_key_hash, + .f3 = implicit_rejection_value }); } /** -This function found in impl {core::result::Result<T, E>} +This function found in impl {core::result::Result<T, E>[TraitClause@0, +TraitClause@1]} */ /** -A monomorphic instance of core.result.unwrap_41 +A monomorphic instance of core.result.unwrap_26 with types uint8_t[32size_t], core_array_TryFromSliceError */ void -core_result_unwrap_41_33(core_result_Result_00 self, uint8_t ret[32U]) +core_result_unwrap_26_b3(core_result_Result_fb self, uint8_t ret[32U]) { if (self.tag == core_result_Ok) { uint8_t f0[32U]; @@ -463,63 +754,60 @@ core_result_unwrap_41_33(core_result_Result_00 self, uint8_t ret[32U]) } /** -This function found in impl {(core::convert::From<@Array<u8, SIZE>> for -libcrux_ml_kem::types::MlKemCiphertext<SIZE>)#2} + Pad the `slice` with `0`s at the end. */ /** -A monomorphic instance of libcrux_ml_kem.types.from_01 +A monomorphic instance of libcrux_ml_kem.utils.into_padded_array with const generics -- SIZE= 768 +- LEN= 34 */ -libcrux_ml_kem_types_MlKemCiphertext_e8 -libcrux_ml_kem_types_from_01_33( - uint8_t value[768U]) +void +libcrux_ml_kem_utils_into_padded_array_b6(Eurydice_slice slice, + uint8_t ret[34U]) { - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_value[768U]; - memcpy(copy_of_value, value, (size_t)768U * sizeof(uint8_t)); - libcrux_ml_kem_types_MlKemCiphertext_e8 lit; - memcpy(lit.value, copy_of_value, (size_t)768U * sizeof(uint8_t)); - return lit; + uint8_t out[34U] = { 0U }; + uint8_t *uu____0 = out; + Eurydice_slice_copy( + Eurydice_array_to_subslice3( + uu____0, (size_t)0U, Eurydice_slice_len(slice, uint8_t), uint8_t *), + slice, uint8_t); + memcpy(ret, out, (size_t)34U * sizeof(uint8_t)); } /** - A reference to the raw byte slice. +This function found in impl {core::convert::From<@Array<u8, SIZE>> for +libcrux_ml_kem::types::MlKemCiphertext<SIZE>} */ /** -This function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>#18} -*/ -/** -A monomorphic instance of libcrux_ml_kem.types.as_slice_cb +A monomorphic instance of libcrux_ml_kem.types.from_e0 with const generics -- SIZE= 800 +- SIZE= 1568 */ -uint8_t * -libcrux_ml_kem_types_as_slice_cb_3d( - libcrux_ml_kem_types_MlKemPublicKey_be *self) +libcrux_ml_kem_types_MlKemCiphertext_64 +libcrux_ml_kem_types_from_e0_af( + uint8_t value[1568U]) { - return self->value; + /* Passing arrays by value in Rust generates a copy in C */ + uint8_t copy_of_value[1568U]; + memcpy(copy_of_value, value, (size_t)1568U * sizeof(uint8_t)); + libcrux_ml_kem_types_MlKemCiphertext_64 lit; + memcpy(lit.value, copy_of_value, (size_t)1568U * sizeof(uint8_t)); + return lit; } /** - Pad the `slice` with `0`s at the end. -*/ -/** -A monomorphic instance of libcrux_ml_kem.utils.into_padded_array +A monomorphic instance of libcrux_ml_kem.utils.prf_input_inc with const generics -- LEN= 33 +- K= 4 */ -void -libcrux_ml_kem_utils_into_padded_array_6d2(Eurydice_slice slice, - uint8_t ret[33U]) +uint8_t +libcrux_ml_kem_utils_prf_input_inc_ac(uint8_t (*prf_inputs)[33U], + uint8_t domain_separator) { - uint8_t out[33U] = { 0U }; - uint8_t *uu____0 = out; - Eurydice_slice_copy( - Eurydice_array_to_subslice2(uu____0, (size_t)0U, - Eurydice_slice_len(slice, uint8_t), uint8_t), - slice, uint8_t); - memcpy(ret, out, (size_t)33U * sizeof(uint8_t)); + KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, size_t i0 = i; + prf_inputs[i0][32U] = domain_separator; + domain_separator = (uint32_t)domain_separator + 1U;); + return domain_separator; } /** @@ -528,35 +816,35 @@ libcrux_ml_kem_utils_into_padded_array_6d2(Eurydice_slice slice, /** A monomorphic instance of libcrux_ml_kem.utils.into_padded_array with const generics -- LEN= 34 +- LEN= 33 */ void -libcrux_ml_kem_utils_into_padded_array_6d1(Eurydice_slice slice, - uint8_t ret[34U]) +libcrux_ml_kem_utils_into_padded_array_c8(Eurydice_slice slice, + uint8_t ret[33U]) { - uint8_t out[34U] = { 0U }; + uint8_t out[33U] = { 0U }; uint8_t *uu____0 = out; Eurydice_slice_copy( - Eurydice_array_to_subslice2(uu____0, (size_t)0U, - Eurydice_slice_len(slice, uint8_t), uint8_t), + Eurydice_array_to_subslice3( + uu____0, (size_t)0U, Eurydice_slice_len(slice, uint8_t), uint8_t *), slice, uint8_t); - memcpy(ret, out, (size_t)34U * sizeof(uint8_t)); + memcpy(ret, out, (size_t)33U * sizeof(uint8_t)); } /** -This function found in impl {(core::convert::AsRef<@Slice<u8>> for -libcrux_ml_kem::types::MlKemCiphertext<SIZE>)#1} +This function found in impl {core::convert::AsRef<@Slice<u8>> for +libcrux_ml_kem::types::MlKemCiphertext<SIZE>} */ /** -A monomorphic instance of libcrux_ml_kem.types.as_ref_00 +A monomorphic instance of libcrux_ml_kem.types.as_ref_d3 with const generics -- SIZE= 768 +- SIZE= 1568 */ Eurydice_slice -libcrux_ml_kem_types_as_ref_00_d8( - libcrux_ml_kem_types_MlKemCiphertext_e8 *self) +libcrux_ml_kem_types_as_ref_d3_af( + libcrux_ml_kem_types_MlKemCiphertext_64 *self) { - return Eurydice_array_to_slice((size_t)768U, self->value, uint8_t); + return Eurydice_array_to_slice((size_t)1568U, self->value, uint8_t); } /** @@ -565,19 +853,19 @@ libcrux_ml_kem_types_as_ref_00_d8( /** A monomorphic instance of libcrux_ml_kem.utils.into_padded_array with const generics -- LEN= 800 +- LEN= 1600 */ void -libcrux_ml_kem_utils_into_padded_array_6d0(Eurydice_slice slice, - uint8_t ret[800U]) +libcrux_ml_kem_utils_into_padded_array_7f(Eurydice_slice slice, + uint8_t ret[1600U]) { - uint8_t out[800U] = { 0U }; + uint8_t out[1600U] = { 0U }; uint8_t *uu____0 = out; Eurydice_slice_copy( - Eurydice_array_to_subslice2(uu____0, (size_t)0U, - Eurydice_slice_len(slice, uint8_t), uint8_t), + Eurydice_array_to_subslice3( + uu____0, (size_t)0U, Eurydice_slice_len(slice, uint8_t), uint8_t *), slice, uint8_t); - memcpy(ret, out, (size_t)800U * sizeof(uint8_t)); + memcpy(ret, out, (size_t)1600U * sizeof(uint8_t)); } /** @@ -589,94 +877,183 @@ with const generics - LEN= 64 */ void -libcrux_ml_kem_utils_into_padded_array_6d(Eurydice_slice slice, +libcrux_ml_kem_utils_into_padded_array_24(Eurydice_slice slice, uint8_t ret[64U]) { uint8_t out[64U] = { 0U }; uint8_t *uu____0 = out; Eurydice_slice_copy( - Eurydice_array_to_subslice2(uu____0, (size_t)0U, - Eurydice_slice_len(slice, uint8_t), uint8_t), + Eurydice_array_to_subslice3( + uu____0, (size_t)0U, Eurydice_slice_len(slice, uint8_t), uint8_t *), slice, uint8_t); memcpy(ret, out, (size_t)64U * sizeof(uint8_t)); } /** -This function found in impl {core::result::Result<T, E>} +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} */ /** -A monomorphic instance of core.result.unwrap_41 -with types uint8_t[24size_t], core_array_TryFromSliceError +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint8_t[24size_t] */ void -core_result_unwrap_41_76(core_result_Result_6f self, uint8_t ret[24U]) +libcrux_secrets_int_public_integers_declassify_d8_d2(uint8_t self[24U], + uint8_t ret[24U]) { - if (self.tag == core_result_Ok) { - uint8_t f0[24U]; - memcpy(f0, self.val.case_Ok, (size_t)24U * sizeof(uint8_t)); - memcpy(ret, f0, (size_t)24U * sizeof(uint8_t)); - } else { - KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, - "unwrap not Ok"); - KRML_HOST_EXIT(255U); - } + memcpy(ret, self, (size_t)24U * sizeof(uint8_t)); } /** -This function found in impl {core::result::Result<T, E>} +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} */ /** -A monomorphic instance of core.result.unwrap_41 -with types uint8_t[20size_t], core_array_TryFromSliceError +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint8_t[22size_t] */ void -core_result_unwrap_41_ea(core_result_Result_7a self, uint8_t ret[20U]) +libcrux_secrets_int_public_integers_declassify_d8_fa(uint8_t self[22U], + uint8_t ret[22U]) { - if (self.tag == core_result_Ok) { - uint8_t f0[20U]; - memcpy(f0, self.val.case_Ok, (size_t)20U * sizeof(uint8_t)); - memcpy(ret, f0, (size_t)20U * sizeof(uint8_t)); - } else { - KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, - "unwrap not Ok"); - KRML_HOST_EXIT(255U); - } + memcpy(ret, self, (size_t)22U * sizeof(uint8_t)); } /** -This function found in impl {core::result::Result<T, E>} +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} */ /** -A monomorphic instance of core.result.unwrap_41 -with types uint8_t[10size_t], core_array_TryFromSliceError +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint8_t[20size_t] */ void -core_result_unwrap_41_07(core_result_Result_cd self, uint8_t ret[10U]) +libcrux_secrets_int_public_integers_declassify_d8_57(uint8_t self[20U], + uint8_t ret[20U]) { - if (self.tag == core_result_Ok) { - uint8_t f0[10U]; - memcpy(f0, self.val.case_Ok, (size_t)10U * sizeof(uint8_t)); - memcpy(ret, f0, (size_t)10U * sizeof(uint8_t)); - } else { - KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, - "unwrap not Ok"); - KRML_HOST_EXIT(255U); - } + memcpy(ret, self, (size_t)20U * sizeof(uint8_t)); } /** -This function found in impl {core::result::Result<T, E>} +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} */ /** -A monomorphic instance of core.result.unwrap_41 +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint8_t[10size_t] + +*/ +void +libcrux_secrets_int_public_integers_declassify_d8_cc(uint8_t self[10U], + uint8_t ret[10U]) +{ + memcpy(ret, self, (size_t)10U * sizeof(uint8_t)); +} + +/** +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint8_t[8size_t] + +*/ +void +libcrux_secrets_int_public_integers_declassify_d8_76(uint8_t self[8U], + uint8_t ret[8U]) +{ + memcpy(ret, self, (size_t)8U * sizeof(uint8_t)); +} + +/** +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types uint8_t[2size_t] + +*/ +void +libcrux_secrets_int_public_integers_declassify_d8_d4(uint8_t self[2U], + uint8_t ret[2U]) +{ + memcpy(ret, self, (size_t)2U * sizeof(uint8_t)); +} + +/** + Classify a mutable slice (identity) + We define a separate function for this because hax has limited support for + &mut-returning functions +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.classify_mut_slice +with types Eurydice_slice uint8_t + +*/ +Eurydice_slice +libcrux_secrets_int_public_integers_classify_mut_slice_ba( + Eurydice_slice x) +{ + return x; +} + +/** +This function found in impl {libcrux_secrets::traits::ClassifyRef<&'a +(@Slice<T>)> for &'a (@Slice<T>)} +*/ +/** +A monomorphic instance of libcrux_secrets.int.classify_public.classify_ref_9b +with types uint8_t + +*/ +Eurydice_slice +libcrux_secrets_int_classify_public_classify_ref_9b_90( + Eurydice_slice self) +{ + return self; +} + +/** +This function found in impl {libcrux_secrets::traits::Declassify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8 +with types int16_t[16size_t] + +*/ +void +libcrux_secrets_int_public_integers_declassify_d8_46(int16_t self[16U], + int16_t ret[16U]) +{ + memcpy(ret, self, (size_t)16U * sizeof(int16_t)); +} + +/** +This function found in impl {libcrux_secrets::traits::ClassifyRef<&'a +(@Slice<T>)> for &'a (@Slice<T>)} +*/ +/** +A monomorphic instance of libcrux_secrets.int.classify_public.classify_ref_9b +with types int16_t + +*/ +Eurydice_slice +libcrux_secrets_int_classify_public_classify_ref_9b_39( + Eurydice_slice self) +{ + return self; +} + +/** +This function found in impl {core::result::Result<T, E>[TraitClause@0, +TraitClause@1]} +*/ +/** +A monomorphic instance of core.result.unwrap_26 with types int16_t[16size_t], core_array_TryFromSliceError */ void -core_result_unwrap_41_30(core_result_Result_c0 self, int16_t ret[16U]) +core_result_unwrap_26_00(core_result_Result_0a self, int16_t ret[16U]) { if (self.tag == core_result_Ok) { int16_t f0[16U]; @@ -690,15 +1067,31 @@ core_result_unwrap_41_30(core_result_Result_c0 self, int16_t ret[16U]) } /** -This function found in impl {core::result::Result<T, E>} +This function found in impl {libcrux_secrets::traits::Classify<T> for T} +*/ +/** +A monomorphic instance of libcrux_secrets.int.public_integers.classify_27 +with types int16_t[16size_t] + +*/ +void +libcrux_secrets_int_public_integers_classify_27_46(int16_t self[16U], + int16_t ret[16U]) +{ + memcpy(ret, self, (size_t)16U * sizeof(int16_t)); +} + +/** +This function found in impl {core::result::Result<T, E>[TraitClause@0, +TraitClause@1]} */ /** -A monomorphic instance of core.result.unwrap_41 +A monomorphic instance of core.result.unwrap_26 with types uint8_t[8size_t], core_array_TryFromSliceError */ void -core_result_unwrap_41_0e(core_result_Result_56 self, uint8_t ret[8U]) +core_result_unwrap_26_68(core_result_Result_15 self, uint8_t ret[8U]) { if (self.tag == core_result_Ok) { uint8_t f0[8U]; diff --git a/security/nss/lib/freebl/verified/libcrux_core.h b/security/nss/lib/freebl/verified/libcrux_core.h @@ -1,118 +1,78 @@ /* - * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com> + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> * * SPDX-License-Identifier: MIT or Apache-2.0 * * This code was generated with the following revisions: - * Charon: b351338f6a84c7a1afc27433eb0ffdc668b3581d - * Eurydice: 7efec1624422fd5e94388ef06b9c76dfe7a48d46 - * Karamel: c96fb69d15693284644d6aecaa90afa37e4de8f0 - * F*: 58c915a86a2c07c8eca8d9deafd76cb7a91f0eb7 - * Libcrux: 6ff01fb3c57ff29ecb59bc62d9dc7fd231060cfb + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc */ -#ifndef __libcrux_core_H -#define __libcrux_core_H +#ifndef libcrux_core_H +#define libcrux_core_H + +#include "eurydice_glue.h" #if defined(__cplusplus) extern "C" { #endif -#include "eurydice_glue.h" - /** -A monomorphic instance of core.ops.range.Range -with types size_t - -*/ -typedef struct core_ops_range_Range_b3_s { - size_t start; - size_t end; -} core_ops_range_Range_b3; - -#define core_result_Ok 0 -#define core_result_Err 1 - -typedef uint8_t core_result_Result_86_tags; - -#define core_option_None 0 -#define core_option_Some 1 - -typedef uint8_t core_option_Option_ef_tags; - -/** -A monomorphic instance of core.option.Option -with types size_t - +A monomorphic instance of libcrux_ml_kem.types.MlKemPrivateKey +with const generics +- $3168size_t */ -typedef struct core_option_Option_b3_s { - core_option_Option_ef_tags tag; - size_t f0; -} core_option_Option_b3; - -static inline uint64_t core_num__u64_9__from_le_bytes(uint8_t x0[8U]); - -static inline void core_num__u64_9__to_le_bytes(uint64_t x0, uint8_t x1[8U]); +typedef struct libcrux_ml_kem_types_MlKemPrivateKey_83_s { + uint8_t value[3168U]; +} libcrux_ml_kem_types_MlKemPrivateKey_83; /** A monomorphic instance of libcrux_ml_kem.types.MlKemPublicKey with const generics - $1568size_t */ -typedef struct libcrux_ml_kem_types_MlKemPublicKey_1f_s { +typedef struct libcrux_ml_kem_types_MlKemPublicKey_64_s { uint8_t value[1568U]; -} libcrux_ml_kem_types_MlKemPublicKey_1f; - -/** -A monomorphic instance of libcrux_ml_kem.types.MlKemPrivateKey -with const generics -- $3168size_t -*/ -typedef struct libcrux_ml_kem_types_MlKemPrivateKey_95_s { - uint8_t value[3168U]; -} libcrux_ml_kem_types_MlKemPrivateKey_95; +} libcrux_ml_kem_types_MlKemPublicKey_64; typedef struct libcrux_ml_kem_mlkem1024_MlKem1024KeyPair_s { - libcrux_ml_kem_types_MlKemPrivateKey_95 sk; - libcrux_ml_kem_types_MlKemPublicKey_1f pk; + libcrux_ml_kem_types_MlKemPrivateKey_83 sk; + libcrux_ml_kem_types_MlKemPublicKey_64 pk; } libcrux_ml_kem_mlkem1024_MlKem1024KeyPair; -typedef struct libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext_s { +/** +A monomorphic instance of libcrux_ml_kem.types.MlKemCiphertext +with const generics +- $1568size_t +*/ +typedef struct libcrux_ml_kem_types_MlKemCiphertext_64_s { uint8_t value[1568U]; -} libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext; +} libcrux_ml_kem_types_MlKemCiphertext_64; /** -A monomorphic instance of K. -with types libcrux_ml_kem_types_MlKemCiphertext[[$1568size_t]], -uint8_t[32size_t] - +A monomorphic instance of libcrux_ml_kem.types.MlKemPrivateKey +with const generics +- $2400size_t */ -typedef struct tuple_21_s { - libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext fst; - uint8_t snd[32U]; -} tuple_21; +typedef struct libcrux_ml_kem_types_MlKemPrivateKey_d9_s { + uint8_t value[2400U]; +} libcrux_ml_kem_types_MlKemPrivateKey_d9; /** A monomorphic instance of libcrux_ml_kem.types.MlKemPublicKey with const generics - $1184size_t */ -typedef struct libcrux_ml_kem_types_MlKemPublicKey_15_s { +typedef struct libcrux_ml_kem_types_MlKemPublicKey_30_s { uint8_t value[1184U]; -} libcrux_ml_kem_types_MlKemPublicKey_15; - -/** -A monomorphic instance of libcrux_ml_kem.types.MlKemPrivateKey -with const generics -- $2400size_t -*/ -typedef struct libcrux_ml_kem_types_MlKemPrivateKey_55_s { - uint8_t value[2400U]; -} libcrux_ml_kem_types_MlKemPrivateKey_55; +} libcrux_ml_kem_types_MlKemPublicKey_30; typedef struct libcrux_ml_kem_mlkem768_MlKem768KeyPair_s { - libcrux_ml_kem_types_MlKemPrivateKey_55 sk; - libcrux_ml_kem_types_MlKemPublicKey_15 pk; + libcrux_ml_kem_types_MlKemPrivateKey_d9 sk; + libcrux_ml_kem_types_MlKemPublicKey_30 pk; } libcrux_ml_kem_mlkem768_MlKem768KeyPair; typedef struct libcrux_ml_kem_mlkem768_MlKem768Ciphertext_s { @@ -125,95 +85,25 @@ with types libcrux_ml_kem_types_MlKemCiphertext[[$1088size_t]], uint8_t[32size_t] */ -typedef struct tuple_3c_s { +typedef struct tuple_c2_s { libcrux_ml_kem_mlkem768_MlKem768Ciphertext fst; uint8_t snd[32U]; -} tuple_3c; - -/** -A monomorphic instance of libcrux_ml_kem.types.MlKemPublicKey -with const generics -- $800size_t -*/ -typedef struct libcrux_ml_kem_types_MlKemPublicKey_be_s { - uint8_t value[800U]; -} libcrux_ml_kem_types_MlKemPublicKey_be; - -/** -A monomorphic instance of libcrux_ml_kem.types.MlKemPrivateKey -with const generics -- $1632size_t -*/ -typedef struct libcrux_ml_kem_types_MlKemPrivateKey_5e_s { - uint8_t value[1632U]; -} libcrux_ml_kem_types_MlKemPrivateKey_5e; - -/** -A monomorphic instance of libcrux_ml_kem.types.MlKemKeyPair -with const generics -- $1632size_t -- $800size_t -*/ -typedef struct libcrux_ml_kem_types_MlKemKeyPair_cb_s { - libcrux_ml_kem_types_MlKemPrivateKey_5e sk; - libcrux_ml_kem_types_MlKemPublicKey_be pk; -} libcrux_ml_kem_types_MlKemKeyPair_cb; - -/** -A monomorphic instance of libcrux_ml_kem.types.MlKemCiphertext -with const generics -- $768size_t -*/ -typedef struct libcrux_ml_kem_types_MlKemCiphertext_e8_s { - uint8_t value[768U]; -} libcrux_ml_kem_types_MlKemCiphertext_e8; +} tuple_c2; /** A monomorphic instance of K. -with types libcrux_ml_kem_types_MlKemCiphertext[[$768size_t]], uint8_t[32size_t] +with types libcrux_ml_kem_types_MlKemCiphertext[[$1568size_t]], +uint8_t[32size_t] */ -typedef struct tuple_ec_s { - libcrux_ml_kem_types_MlKemCiphertext_e8 fst; +typedef struct tuple_fa_s { + libcrux_ml_kem_types_MlKemCiphertext_64 fst; uint8_t snd[32U]; -} tuple_ec; - -/** -A monomorphic instance of core.result.Result -with types uint8_t[8size_t], core_array_TryFromSliceError - -*/ -typedef struct core_result_Result_56_s { - core_result_Result_86_tags tag; - union { - uint8_t case_Ok[8U]; - core_array_TryFromSliceError case_Err; - } val; -} core_result_Result_56; - -/** -This function found in impl {core::result::Result<T, E>} -*/ -/** -A monomorphic instance of core.result.unwrap_41 -with types uint8_t[8size_t], core_array_TryFromSliceError - -*/ -void core_result_unwrap_41_0e(core_result_Result_56 self, uint8_t ret[8U]); - -typedef struct Eurydice_slice_uint8_t_x2_s { - Eurydice_slice fst; - Eurydice_slice snd; -} Eurydice_slice_uint8_t_x2; - -typedef struct Eurydice_slice_uint8_t_1size_t__x2_s { - Eurydice_slice fst[1U]; - Eurydice_slice snd[1U]; -} Eurydice_slice_uint8_t_1size_t__x2; +} tuple_fa; #if defined(__cplusplus) } #endif -#define __libcrux_core_H_DEFINED -#endif +#define libcrux_core_H_DEFINED +#endif /* libcrux_core_H */ diff --git a/security/nss/lib/freebl/verified/libcrux_mlkem1024.h b/security/nss/lib/freebl/verified/libcrux_mlkem1024.h @@ -0,0 +1,96 @@ +/* + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> + * + * SPDX-License-Identifier: MIT or Apache-2.0 + * + * This code was generated with the following revisions: + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc + */ + +#ifndef libcrux_mlkem1024_H +#define libcrux_mlkem1024_H + +#include "eurydice_glue.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +#include "libcrux_core.h" + +#define LIBCRUX_ML_KEM_MLKEM1024_VECTOR_U_COMPRESSION_FACTOR ((size_t)11U) + +#define LIBCRUX_ML_KEM_MLKEM1024_C1_BLOCK_SIZE \ + (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * \ + LIBCRUX_ML_KEM_MLKEM1024_VECTOR_U_COMPRESSION_FACTOR / (size_t)8U) + +#define LIBCRUX_ML_KEM_MLKEM1024_RANK ((size_t)4U) + +#define LIBCRUX_ML_KEM_MLKEM1024_C1_SIZE \ + (LIBCRUX_ML_KEM_MLKEM1024_C1_BLOCK_SIZE * LIBCRUX_ML_KEM_MLKEM1024_RANK) + +#define LIBCRUX_ML_KEM_MLKEM1024_VECTOR_V_COMPRESSION_FACTOR ((size_t)5U) + +#define LIBCRUX_ML_KEM_MLKEM1024_C2_SIZE \ + (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * \ + LIBCRUX_ML_KEM_MLKEM1024_VECTOR_V_COMPRESSION_FACTOR / (size_t)8U) + +#define LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_CIPHERTEXT_SIZE \ + (LIBCRUX_ML_KEM_MLKEM1024_C1_SIZE + LIBCRUX_ML_KEM_MLKEM1024_C2_SIZE) + +#define LIBCRUX_ML_KEM_MLKEM1024_T_AS_NTT_ENCODED_SIZE \ + (LIBCRUX_ML_KEM_MLKEM1024_RANK * \ + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * \ + LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U) + +#define LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_PUBLIC_KEY_SIZE \ + (LIBCRUX_ML_KEM_MLKEM1024_T_AS_NTT_ENCODED_SIZE + (size_t)32U) + +#define LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_SECRET_KEY_SIZE \ + (LIBCRUX_ML_KEM_MLKEM1024_RANK * \ + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * \ + LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U) + +#define LIBCRUX_ML_KEM_MLKEM1024_ETA1 ((size_t)2U) + +#define LIBCRUX_ML_KEM_MLKEM1024_ETA1_RANDOMNESS_SIZE \ + (LIBCRUX_ML_KEM_MLKEM1024_ETA1 * (size_t)64U) + +#define LIBCRUX_ML_KEM_MLKEM1024_ETA2 ((size_t)2U) + +#define LIBCRUX_ML_KEM_MLKEM1024_ETA2_RANDOMNESS_SIZE \ + (LIBCRUX_ML_KEM_MLKEM1024_ETA2 * (size_t)64U) + +#define LIBCRUX_ML_KEM_MLKEM1024_IMPLICIT_REJECTION_HASH_INPUT_SIZE \ + (LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE + \ + LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_CIPHERTEXT_SIZE) + +typedef libcrux_ml_kem_types_MlKemCiphertext_64 + libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext; + +typedef libcrux_ml_kem_types_MlKemPrivateKey_83 + libcrux_ml_kem_mlkem1024_MlKem1024PrivateKey; + +typedef libcrux_ml_kem_types_MlKemPublicKey_64 + libcrux_ml_kem_mlkem1024_MlKem1024PublicKey; + +#define LIBCRUX_ML_KEM_MLKEM1024_RANKED_BYTES_PER_RING_ELEMENT \ + (LIBCRUX_ML_KEM_MLKEM1024_RANK * \ + LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U) + +#define LIBCRUX_ML_KEM_MLKEM1024_SECRET_KEY_SIZE \ + (LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_SECRET_KEY_SIZE + \ + LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_PUBLIC_KEY_SIZE + \ + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE + \ + LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE) + +#if defined(__cplusplus) +} +#endif + +#define libcrux_mlkem1024_H_DEFINED +#endif /* libcrux_mlkem1024_H */ diff --git a/security/nss/lib/freebl/verified/libcrux_mlkem1024_portable.c b/security/nss/lib/freebl/verified/libcrux_mlkem1024_portable.c @@ -0,0 +1,222 @@ +/* + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> + * + * SPDX-License-Identifier: MIT or Apache-2.0 + * + * This code was generated with the following revisions: + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc + */ + +#include "libcrux_mlkem1024_portable.h" + +#include "internal/libcrux_mlkem_portable.h" +#include "libcrux_core.h" + +/** + Portable decapsulate +*/ +/** +A monomorphic instance of +libcrux_ml_kem.ind_cca.instantiations.portable.decapsulate with const generics +- K= 4 +- SECRET_KEY_SIZE= 3168 +- CPA_SECRET_KEY_SIZE= 1536 +- PUBLIC_KEY_SIZE= 1568 +- CIPHERTEXT_SIZE= 1568 +- T_AS_NTT_ENCODED_SIZE= 1536 +- C1_SIZE= 1408 +- C2_SIZE= 160 +- VECTOR_U_COMPRESSION_FACTOR= 11 +- VECTOR_V_COMPRESSION_FACTOR= 5 +- C1_BLOCK_SIZE= 352 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +- ETA2= 2 +- ETA2_RANDOMNESS_SIZE= 128 +- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600 +*/ +static void +decapsulate_e0(libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key, + libcrux_ml_kem_types_MlKemCiphertext_64 *ciphertext, + uint8_t ret[32U]) +{ + libcrux_ml_kem_ind_cca_decapsulate_620(private_key, ciphertext, ret); +} + +/** + Decapsulate ML-KEM 1024 + + Generates an [`MlKemSharedSecret`]. + The input is a reference to an [`MlKem1024PrivateKey`] and an + [`MlKem1024Ciphertext`]. +*/ +void +libcrux_ml_kem_mlkem1024_portable_decapsulate( + libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key, + libcrux_ml_kem_types_MlKemCiphertext_64 *ciphertext, uint8_t ret[32U]) +{ + decapsulate_e0(private_key, ciphertext, ret); +} + +/** +A monomorphic instance of +libcrux_ml_kem.ind_cca.instantiations.portable.encapsulate with const generics +- K= 4 +- CIPHERTEXT_SIZE= 1568 +- PUBLIC_KEY_SIZE= 1568 +- T_AS_NTT_ENCODED_SIZE= 1536 +- C1_SIZE= 1408 +- C2_SIZE= 160 +- VECTOR_U_COMPRESSION_FACTOR= 11 +- VECTOR_V_COMPRESSION_FACTOR= 5 +- C1_BLOCK_SIZE= 352 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +- ETA2= 2 +- ETA2_RANDOMNESS_SIZE= 128 +*/ +static tuple_fa +encapsulate_8f( + libcrux_ml_kem_types_MlKemPublicKey_64 *public_key, uint8_t *randomness) +{ + return libcrux_ml_kem_ind_cca_encapsulate_ca0(public_key, randomness); +} + +/** + Encapsulate ML-KEM 1024 + + Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple. + The input is a reference to an [`MlKem1024PublicKey`] and + [`SHARED_SECRET_SIZE`] bytes of `randomness`. +*/ +tuple_fa +libcrux_ml_kem_mlkem1024_portable_encapsulate( + libcrux_ml_kem_types_MlKemPublicKey_64 *public_key, + uint8_t randomness[32U]) +{ + return encapsulate_8f(public_key, randomness); +} + +/** + Portable generate key pair. +*/ +/** +A monomorphic instance of +libcrux_ml_kem.ind_cca.instantiations.portable.generate_keypair with const +generics +- K= 4 +- CPA_PRIVATE_KEY_SIZE= 1536 +- PRIVATE_KEY_SIZE= 3168 +- PUBLIC_KEY_SIZE= 1568 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +*/ +static libcrux_ml_kem_mlkem1024_MlKem1024KeyPair +generate_keypair_b4( + uint8_t *randomness) +{ + return libcrux_ml_kem_ind_cca_generate_keypair_150(randomness); +} + +/** + Generate ML-KEM 1024 Key Pair +*/ +libcrux_ml_kem_mlkem1024_MlKem1024KeyPair +libcrux_ml_kem_mlkem1024_portable_generate_key_pair(uint8_t randomness[64U]) +{ + return generate_keypair_b4(randomness); +} + +/** + Private key validation +*/ +/** +A monomorphic instance of +libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key with const +generics +- K= 4 +- SECRET_KEY_SIZE= 3168 +- CIPHERTEXT_SIZE= 1568 +*/ +static KRML_MUSTINLINE bool +validate_private_key_6b( + libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key, + libcrux_ml_kem_types_MlKemCiphertext_64 *ciphertext) +{ + return libcrux_ml_kem_ind_cca_validate_private_key_b5(private_key, + ciphertext); +} + +/** + Validate a private key. + + Returns `true` if valid, and `false` otherwise. +*/ +bool +libcrux_ml_kem_mlkem1024_portable_validate_private_key( + libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key, + libcrux_ml_kem_types_MlKemCiphertext_64 *ciphertext) +{ + return validate_private_key_6b(private_key, ciphertext); +} + +/** + Private key validation +*/ +/** +A monomorphic instance of +libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key_only with +const generics +- K= 4 +- SECRET_KEY_SIZE= 3168 +*/ +static KRML_MUSTINLINE bool +validate_private_key_only_44( + libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key) +{ + return libcrux_ml_kem_ind_cca_validate_private_key_only_60(private_key); +} + +/** + Validate the private key only. + + Returns `true` if valid, and `false` otherwise. +*/ +bool +libcrux_ml_kem_mlkem1024_portable_validate_private_key_only( + libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key) +{ + return validate_private_key_only_44(private_key); +} + +/** + Public key validation +*/ +/** +A monomorphic instance of +libcrux_ml_kem.ind_cca.instantiations.portable.validate_public_key with const +generics +- K= 4 +- PUBLIC_KEY_SIZE= 1568 +*/ +static KRML_MUSTINLINE bool +validate_public_key_44(uint8_t *public_key) +{ + return libcrux_ml_kem_ind_cca_validate_public_key_ff(public_key); +} + +/** + Validate a public key. + + Returns `true` if valid, and `false` otherwise. +*/ +bool +libcrux_ml_kem_mlkem1024_portable_validate_public_key( + libcrux_ml_kem_types_MlKemPublicKey_64 *public_key) +{ + return validate_public_key_44(public_key->value); +} diff --git a/security/nss/lib/freebl/verified/libcrux_mlkem1024_portable.h b/security/nss/lib/freebl/verified/libcrux_mlkem1024_portable.h @@ -0,0 +1,83 @@ +/* + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> + * + * SPDX-License-Identifier: MIT or Apache-2.0 + * + * This code was generated with the following revisions: + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc + */ + +#ifndef libcrux_mlkem1024_portable_H +#define libcrux_mlkem1024_portable_H + +#include "eurydice_glue.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +#include "libcrux_core.h" + +/** + Decapsulate ML-KEM 1024 + + Generates an [`MlKemSharedSecret`]. + The input is a reference to an [`MlKem1024PrivateKey`] and an + [`MlKem1024Ciphertext`]. +*/ +void libcrux_ml_kem_mlkem1024_portable_decapsulate( + libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key, + libcrux_ml_kem_types_MlKemCiphertext_64 *ciphertext, uint8_t ret[32U]); + +/** + Encapsulate ML-KEM 1024 + + Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple. + The input is a reference to an [`MlKem1024PublicKey`] and + [`SHARED_SECRET_SIZE`] bytes of `randomness`. +*/ +tuple_fa libcrux_ml_kem_mlkem1024_portable_encapsulate( + libcrux_ml_kem_types_MlKemPublicKey_64 *public_key, + uint8_t randomness[32U]); + +/** + Generate ML-KEM 1024 Key Pair +*/ +libcrux_ml_kem_mlkem1024_MlKem1024KeyPair +libcrux_ml_kem_mlkem1024_portable_generate_key_pair(uint8_t randomness[64U]); + +/** + Validate a private key. + + Returns `true` if valid, and `false` otherwise. +*/ +bool libcrux_ml_kem_mlkem1024_portable_validate_private_key( + libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key, + libcrux_ml_kem_types_MlKemCiphertext_64 *ciphertext); + +/** + Validate the private key only. + + Returns `true` if valid, and `false` otherwise. +*/ +bool libcrux_ml_kem_mlkem1024_portable_validate_private_key_only( + libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key); + +/** + Validate a public key. + + Returns `true` if valid, and `false` otherwise. +*/ +bool libcrux_ml_kem_mlkem1024_portable_validate_public_key( + libcrux_ml_kem_types_MlKemPublicKey_64 *public_key); + +#if defined(__cplusplus) +} +#endif + +#define libcrux_mlkem1024_portable_H_DEFINED +#endif /* libcrux_mlkem1024_portable_H */ diff --git a/security/nss/lib/freebl/verified/libcrux_mlkem768.h b/security/nss/lib/freebl/verified/libcrux_mlkem768.h @@ -1,56 +1,57 @@ /* - * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com> + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> * * SPDX-License-Identifier: MIT or Apache-2.0 * * This code was generated with the following revisions: - * Charon: b351338f6a84c7a1afc27433eb0ffdc668b3581d - * Eurydice: 7efec1624422fd5e94388ef06b9c76dfe7a48d46 - * Karamel: c96fb69d15693284644d6aecaa90afa37e4de8f0 - * F*: 58c915a86a2c07c8eca8d9deafd76cb7a91f0eb7 - * Libcrux: 6ff01fb3c57ff29ecb59bc62d9dc7fd231060cfb + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc */ -#ifndef __libcrux_mlkem768_H -#define __libcrux_mlkem768_H +#ifndef libcrux_mlkem768_H +#define libcrux_mlkem768_H + +#include "eurydice_glue.h" #if defined(__cplusplus) extern "C" { #endif -#include "eurydice_glue.h" #include "libcrux_core.h" -#define LIBCRUX_ML_KEM_MLKEM768_VECTOR_U_COMPRESSION_FACTOR_768 ((size_t)10U) +#define LIBCRUX_ML_KEM_MLKEM768_VECTOR_U_COMPRESSION_FACTOR ((size_t)10U) -#define LIBCRUX_ML_KEM_MLKEM768_C1_BLOCK_SIZE_768 \ +#define LIBCRUX_ML_KEM_MLKEM768_C1_BLOCK_SIZE \ (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * \ - LIBCRUX_ML_KEM_MLKEM768_VECTOR_U_COMPRESSION_FACTOR_768 / (size_t)8U) + LIBCRUX_ML_KEM_MLKEM768_VECTOR_U_COMPRESSION_FACTOR / (size_t)8U) -#define LIBCRUX_ML_KEM_MLKEM768_RANK_768 ((size_t)3U) +#define LIBCRUX_ML_KEM_MLKEM768_RANK ((size_t)3U) -#define LIBCRUX_ML_KEM_MLKEM768_C1_SIZE_768 \ - (LIBCRUX_ML_KEM_MLKEM768_C1_BLOCK_SIZE_768 * LIBCRUX_ML_KEM_MLKEM768_RANK_768) +#define LIBCRUX_ML_KEM_MLKEM768_C1_SIZE \ + (LIBCRUX_ML_KEM_MLKEM768_C1_BLOCK_SIZE * LIBCRUX_ML_KEM_MLKEM768_RANK) -#define LIBCRUX_ML_KEM_MLKEM768_VECTOR_V_COMPRESSION_FACTOR_768 ((size_t)4U) +#define LIBCRUX_ML_KEM_MLKEM768_VECTOR_V_COMPRESSION_FACTOR ((size_t)4U) -#define LIBCRUX_ML_KEM_MLKEM768_C2_SIZE_768 \ +#define LIBCRUX_ML_KEM_MLKEM768_C2_SIZE \ (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * \ - LIBCRUX_ML_KEM_MLKEM768_VECTOR_V_COMPRESSION_FACTOR_768 / (size_t)8U) + LIBCRUX_ML_KEM_MLKEM768_VECTOR_V_COMPRESSION_FACTOR / (size_t)8U) -#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE_768 \ - (LIBCRUX_ML_KEM_MLKEM768_C1_SIZE_768 + LIBCRUX_ML_KEM_MLKEM768_C2_SIZE_768) +#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE \ + (LIBCRUX_ML_KEM_MLKEM768_C1_SIZE + LIBCRUX_ML_KEM_MLKEM768_C2_SIZE) -#define LIBCRUX_ML_KEM_MLKEM768_T_AS_NTT_ENCODED_SIZE_768 \ - (LIBCRUX_ML_KEM_MLKEM768_RANK_768 * \ +#define LIBCRUX_ML_KEM_MLKEM768_T_AS_NTT_ENCODED_SIZE \ + (LIBCRUX_ML_KEM_MLKEM768_RANK * \ LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * \ LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U) -#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE_768 \ - (LIBCRUX_ML_KEM_MLKEM768_T_AS_NTT_ENCODED_SIZE_768 + (size_t)32U) +#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE \ + (LIBCRUX_ML_KEM_MLKEM768_T_AS_NTT_ENCODED_SIZE + (size_t)32U) -#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_SECRET_KEY_SIZE_768 \ - (LIBCRUX_ML_KEM_MLKEM768_RANK_768 * \ +#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_SECRET_KEY_SIZE \ + (LIBCRUX_ML_KEM_MLKEM768_RANK * \ LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * \ LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U) @@ -66,27 +67,27 @@ extern "C" { #define LIBCRUX_ML_KEM_MLKEM768_IMPLICIT_REJECTION_HASH_INPUT_SIZE \ (LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE + \ - LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE_768) + LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE) -typedef libcrux_ml_kem_types_MlKemPrivateKey_55 +typedef libcrux_ml_kem_types_MlKemPrivateKey_d9 libcrux_ml_kem_mlkem768_MlKem768PrivateKey; -typedef libcrux_ml_kem_types_MlKemPublicKey_15 +typedef libcrux_ml_kem_types_MlKemPublicKey_30 libcrux_ml_kem_mlkem768_MlKem768PublicKey; -#define LIBCRUX_ML_KEM_MLKEM768_RANKED_BYTES_PER_RING_ELEMENT_768 \ - (LIBCRUX_ML_KEM_MLKEM768_RANK_768 * \ +#define LIBCRUX_ML_KEM_MLKEM768_RANKED_BYTES_PER_RING_ELEMENT \ + (LIBCRUX_ML_KEM_MLKEM768_RANK * \ LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U) -#define LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE_768 \ - (LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_SECRET_KEY_SIZE_768 + \ - LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE_768 + \ - LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE + \ +#define LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE \ + (LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_SECRET_KEY_SIZE + \ + LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE + \ + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE + \ LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE) #if defined(__cplusplus) } #endif -#define __libcrux_mlkem768_H_DEFINED -#endif +#define libcrux_mlkem768_H_DEFINED +#endif /* libcrux_mlkem768_H */ diff --git a/security/nss/lib/freebl/verified/libcrux_mlkem768_portable.c b/security/nss/lib/freebl/verified/libcrux_mlkem768_portable.c @@ -1,19 +1,20 @@ /* - * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com> + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> * * SPDX-License-Identifier: MIT or Apache-2.0 * * This code was generated with the following revisions: - * Charon: b351338f6a84c7a1afc27433eb0ffdc668b3581d - * Eurydice: 7efec1624422fd5e94388ef06b9c76dfe7a48d46 - * Karamel: c96fb69d15693284644d6aecaa90afa37e4de8f0 - * F*: 58c915a86a2c07c8eca8d9deafd76cb7a91f0eb7 - * Libcrux: 6ff01fb3c57ff29ecb59bc62d9dc7fd231060cfb + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc */ #include "libcrux_mlkem768_portable.h" #include "internal/libcrux_mlkem_portable.h" +#include "libcrux_core.h" /** Portable decapsulate @@ -39,11 +40,11 @@ libcrux_ml_kem.ind_cca.instantiations.portable.decapsulate with const generics - IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120 */ static void -decapsulate_67( - libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key, +decapsulate_35( + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key, libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext, uint8_t ret[32U]) { - libcrux_ml_kem_ind_cca_decapsulate_1f(private_key, ciphertext, ret); + libcrux_ml_kem_ind_cca_decapsulate_62(private_key, ciphertext, ret); } /** @@ -55,10 +56,10 @@ decapsulate_67( */ void libcrux_ml_kem_mlkem768_portable_decapsulate( - libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key, + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key, libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext, uint8_t ret[32U]) { - decapsulate_67(private_key, ciphertext, ret); + decapsulate_35(private_key, ciphertext, ret); } /** @@ -72,22 +73,17 @@ libcrux_ml_kem.ind_cca.instantiations.portable.encapsulate with const generics - C2_SIZE= 128 - VECTOR_U_COMPRESSION_FACTOR= 10 - VECTOR_V_COMPRESSION_FACTOR= 4 -- VECTOR_U_BLOCK_LEN= 320 +- C1_BLOCK_SIZE= 320 - ETA1= 2 - ETA1_RANDOMNESS_SIZE= 128 - ETA2= 2 - ETA2_RANDOMNESS_SIZE= 128 */ -static tuple_3c -encapsulate_02( - libcrux_ml_kem_types_MlKemPublicKey_15 *public_key, - uint8_t randomness[32U]) +static tuple_c2 +encapsulate_cd( + libcrux_ml_kem_types_MlKemPublicKey_30 *public_key, uint8_t *randomness) { - libcrux_ml_kem_types_MlKemPublicKey_15 *uu____0 = public_key; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_randomness[32U]; - memcpy(copy_of_randomness, randomness, (size_t)32U * sizeof(uint8_t)); - return libcrux_ml_kem_ind_cca_encapsulate_eb(uu____0, copy_of_randomness); + return libcrux_ml_kem_ind_cca_encapsulate_ca(public_key, randomness); } /** @@ -97,16 +93,12 @@ encapsulate_02( The input is a reference to an [`MlKem768PublicKey`] and [`SHARED_SECRET_SIZE`] bytes of `randomness`. */ -tuple_3c +tuple_c2 libcrux_ml_kem_mlkem768_portable_encapsulate( - libcrux_ml_kem_types_MlKemPublicKey_15 *public_key, + libcrux_ml_kem_types_MlKemPublicKey_30 *public_key, uint8_t randomness[32U]) { - libcrux_ml_kem_types_MlKemPublicKey_15 *uu____0 = public_key; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_randomness[32U]; - memcpy(copy_of_randomness, randomness, (size_t)32U * sizeof(uint8_t)); - return encapsulate_02(uu____0, copy_of_randomness); + return encapsulate_cd(public_key, randomness); } /** @@ -120,18 +112,14 @@ generics - CPA_PRIVATE_KEY_SIZE= 1152 - PRIVATE_KEY_SIZE= 2400 - PUBLIC_KEY_SIZE= 1184 -- BYTES_PER_RING_ELEMENT= 1152 - ETA1= 2 - ETA1_RANDOMNESS_SIZE= 128 */ static libcrux_ml_kem_mlkem768_MlKem768KeyPair -generate_keypair_87( - uint8_t randomness[64U]) +generate_keypair_ce( + uint8_t *randomness) { - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_randomness[64U]; - memcpy(copy_of_randomness, randomness, (size_t)64U * sizeof(uint8_t)); - return libcrux_ml_kem_ind_cca_generate_keypair_f6(copy_of_randomness); + return libcrux_ml_kem_ind_cca_generate_keypair_15(randomness); } /** @@ -140,14 +128,11 @@ generate_keypair_87( libcrux_ml_kem_mlkem768_MlKem768KeyPair libcrux_ml_kem_mlkem768_portable_generate_key_pair(uint8_t randomness[64U]) { - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_randomness[64U]; - memcpy(copy_of_randomness, randomness, (size_t)64U * sizeof(uint8_t)); - return generate_keypair_87(copy_of_randomness); + return generate_keypair_ce(randomness); } /** - Portable private key validation + Private key validation */ /** A monomorphic instance of @@ -158,11 +143,11 @@ generics - CIPHERTEXT_SIZE= 1088 */ static KRML_MUSTINLINE bool -validate_private_key_e8( - libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key, +validate_private_key_31( + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key, libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext) { - return libcrux_ml_kem_ind_cca_validate_private_key_05(private_key, + return libcrux_ml_kem_ind_cca_validate_private_key_37(private_key, ciphertext); } @@ -173,27 +158,55 @@ validate_private_key_e8( */ bool libcrux_ml_kem_mlkem768_portable_validate_private_key( - libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key, + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key, libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext) { - return validate_private_key_e8(private_key, ciphertext); + return validate_private_key_31(private_key, ciphertext); +} + +/** + Private key validation +*/ +/** +A monomorphic instance of +libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key_only with +const generics +- K= 3 +- SECRET_KEY_SIZE= 2400 +*/ +static KRML_MUSTINLINE bool +validate_private_key_only_41( + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key) +{ + return libcrux_ml_kem_ind_cca_validate_private_key_only_d6(private_key); +} + +/** + Validate the private key only. + + Returns `true` if valid, and `false` otherwise. +*/ +bool +libcrux_ml_kem_mlkem768_portable_validate_private_key_only( + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key) +{ + return validate_private_key_only_41(private_key); } /** - Portable public key validation + Public key validation */ /** A monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_public_key with const generics - K= 3 -- RANKED_BYTES_PER_RING_ELEMENT= 1152 - PUBLIC_KEY_SIZE= 1184 */ static KRML_MUSTINLINE bool -validate_public_key_7d(uint8_t *public_key) +validate_public_key_41(uint8_t *public_key) { - return libcrux_ml_kem_ind_cca_validate_public_key_b7(public_key); + return libcrux_ml_kem_ind_cca_validate_public_key_89(public_key); } /** @@ -203,7 +216,7 @@ validate_public_key_7d(uint8_t *public_key) */ bool libcrux_ml_kem_mlkem768_portable_validate_public_key( - libcrux_ml_kem_types_MlKemPublicKey_15 *public_key) + libcrux_ml_kem_types_MlKemPublicKey_30 *public_key) { - return validate_public_key_7d(public_key->value); + return validate_public_key_41(public_key->value); } diff --git a/security/nss/lib/freebl/verified/libcrux_mlkem768_portable.h b/security/nss/lib/freebl/verified/libcrux_mlkem768_portable.h @@ -1,24 +1,25 @@ /* - * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com> + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> * * SPDX-License-Identifier: MIT or Apache-2.0 * * This code was generated with the following revisions: - * Charon: b351338f6a84c7a1afc27433eb0ffdc668b3581d - * Eurydice: 7efec1624422fd5e94388ef06b9c76dfe7a48d46 - * Karamel: c96fb69d15693284644d6aecaa90afa37e4de8f0 - * F*: 58c915a86a2c07c8eca8d9deafd76cb7a91f0eb7 - * Libcrux: 6ff01fb3c57ff29ecb59bc62d9dc7fd231060cfb + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc */ -#ifndef __libcrux_mlkem768_portable_H -#define __libcrux_mlkem768_portable_H +#ifndef libcrux_mlkem768_portable_H +#define libcrux_mlkem768_portable_H + +#include "eurydice_glue.h" #if defined(__cplusplus) extern "C" { #endif -#include "eurydice_glue.h" #include "libcrux_core.h" /** @@ -29,7 +30,7 @@ extern "C" { [`MlKem768Ciphertext`]. */ void libcrux_ml_kem_mlkem768_portable_decapsulate( - libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key, + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key, libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext, uint8_t ret[32U]); /** @@ -39,8 +40,8 @@ void libcrux_ml_kem_mlkem768_portable_decapsulate( The input is a reference to an [`MlKem768PublicKey`] and [`SHARED_SECRET_SIZE`] bytes of `randomness`. */ -tuple_3c libcrux_ml_kem_mlkem768_portable_encapsulate( - libcrux_ml_kem_types_MlKemPublicKey_15 *public_key, +tuple_c2 libcrux_ml_kem_mlkem768_portable_encapsulate( + libcrux_ml_kem_types_MlKemPublicKey_30 *public_key, uint8_t randomness[32U]); /** @@ -55,20 +56,28 @@ libcrux_ml_kem_mlkem768_portable_generate_key_pair(uint8_t randomness[64U]); Returns `true` if valid, and `false` otherwise. */ bool libcrux_ml_kem_mlkem768_portable_validate_private_key( - libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key, + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key, libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext); /** + Validate the private key only. + + Returns `true` if valid, and `false` otherwise. +*/ +bool libcrux_ml_kem_mlkem768_portable_validate_private_key_only( + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key); + +/** Validate a public key. Returns `true` if valid, and `false` otherwise. */ bool libcrux_ml_kem_mlkem768_portable_validate_public_key( - libcrux_ml_kem_types_MlKemPublicKey_15 *public_key); + libcrux_ml_kem_types_MlKemPublicKey_30 *public_key); #if defined(__cplusplus) } #endif -#define __libcrux_mlkem768_portable_H_DEFINED -#endif +#define libcrux_mlkem768_portable_H_DEFINED +#endif /* libcrux_mlkem768_portable_H */ diff --git a/security/nss/lib/freebl/verified/libcrux_mlkem_portable.c b/security/nss/lib/freebl/verified/libcrux_mlkem_portable.c @@ -1,24 +1,25 @@ /* - * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com> + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> * * SPDX-License-Identifier: MIT or Apache-2.0 * * This code was generated with the following revisions: - * Charon: b351338f6a84c7a1afc27433eb0ffdc668b3581d - * Eurydice: 7efec1624422fd5e94388ef06b9c76dfe7a48d46 - * Karamel: c96fb69d15693284644d6aecaa90afa37e4de8f0 - * F*: 58c915a86a2c07c8eca8d9deafd76cb7a91f0eb7 - * Libcrux: 6ff01fb3c57ff29ecb59bc62d9dc7fd231060cfb + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc */ #include "internal/libcrux_mlkem_portable.h" #include "internal/libcrux_core.h" -#include "internal/libcrux_sha3_internal.h" +#include "libcrux_core.h" +#include "libcrux_sha3_portable.h" -KRML_MUSTINLINE void -libcrux_ml_kem_hash_functions_portable_G( - Eurydice_slice input, uint8_t ret[64U]) +inline void +libcrux_ml_kem_hash_functions_portable_G(Eurydice_slice input, + uint8_t ret[64U]) { uint8_t digest[64U] = { 0U }; libcrux_sha3_portable_sha512( @@ -26,9 +27,9 @@ libcrux_ml_kem_hash_functions_portable_G( memcpy(ret, digest, (size_t)64U * sizeof(uint8_t)); } -KRML_MUSTINLINE void -libcrux_ml_kem_hash_functions_portable_H( - Eurydice_slice input, uint8_t ret[32U]) +inline void +libcrux_ml_kem_hash_functions_portable_H(Eurydice_slice input, + uint8_t ret[32U]) { uint8_t digest[32U] = { 0U }; libcrux_sha3_portable_sha256( @@ -36,7 +37,7 @@ libcrux_ml_kem_hash_functions_portable_H( memcpy(ret, digest, (size_t)32U * sizeof(uint8_t)); } -const int16_t libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[128U] = { +static const int16_t ZETAS_TIMES_MONTGOMERY_R[128U] = { (int16_t)-1044, (int16_t)-758, (int16_t)-359, (int16_t)-1517, (int16_t)1493, (int16_t)1422, (int16_t)287, (int16_t)202, (int16_t)-171, (int16_t)622, (int16_t)1577, (int16_t)182, @@ -71,823 +72,145 @@ const int16_t libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[128U] = { (int16_t)958, (int16_t)-1460, (int16_t)1522, (int16_t)1628 }; +static KRML_MUSTINLINE int16_t +zeta(size_t i) +{ + return ZETAS_TIMES_MONTGOMERY_R[i]; +} + +#define VECTORS_IN_RING_ELEMENT ((size_t)16U) + +KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_vector_type_zero(void) +{ + libcrux_ml_kem_vector_portable_vector_type_PortableVector lit; + int16_t ret[16U]; + int16_t buf[16U] = { 0U }; + libcrux_secrets_int_public_integers_classify_27_46(buf, ret); + memcpy(lit.elements, ret, (size_t)16U * sizeof(int16_t)); + return lit; +} + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} +*/ +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_ZERO_b8(void) +{ + return libcrux_ml_kem_vector_portable_vector_type_zero(); +} + KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_vector_type_from_i16_array( Eurydice_slice array) { libcrux_ml_kem_vector_portable_vector_type_PortableVector lit; int16_t ret[16U]; - core_result_Result_c0 dst; + core_result_Result_0a dst; Eurydice_slice_to_array2( - &dst, Eurydice_slice_subslice2(array, (size_t)0U, (size_t)16U, int16_t), - Eurydice_slice, int16_t[16U]); - core_result_unwrap_41_30(dst, ret); + &dst, Eurydice_slice_subslice3(array, (size_t)0U, (size_t)16U, int16_t *), + Eurydice_slice, int16_t[16U], core_array_TryFromSliceError); + core_result_unwrap_26_00(dst, ret); memcpy(lit.elements, ret, (size_t)16U * sizeof(int16_t)); return lit; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_from_i16_array_0d(Eurydice_slice array) +libcrux_ml_kem_vector_portable_from_i16_array_b8(Eurydice_slice array) { - return libcrux_ml_kem_vector_portable_vector_type_from_i16_array(array); + return libcrux_ml_kem_vector_portable_vector_type_from_i16_array( + libcrux_secrets_int_classify_public_classify_ref_9b_39(array)); } -KRML_MUSTINLINE uint8_t_x11 -libcrux_ml_kem_vector_portable_serialize_serialize_11_int(Eurydice_slice v) +KRML_MUSTINLINE void +libcrux_ml_kem_vector_portable_vector_type_to_i16_array( + libcrux_ml_kem_vector_portable_vector_type_PortableVector x, + int16_t ret[16U]) { - uint8_t r0 = (uint8_t)Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *); - uint8_t r1 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)1U, int16_t, - int16_t *) & - (int16_t)31) - << 3U | - (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)0U, int16_t, - int16_t *) >> - 8U); - uint8_t r2 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)2U, int16_t, - int16_t *) & - (int16_t)3) - << 6U | - (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)1U, int16_t, - int16_t *) >> - 5U); - uint8_t r3 = - (uint8_t)(Eurydice_slice_index(v, (size_t)2U, int16_t, int16_t *) >> 2U & - (int16_t)255); - uint8_t r4 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)3U, int16_t, - int16_t *) & - (int16_t)127) - << 1U | - (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)2U, int16_t, - int16_t *) >> - 10U); - uint8_t r5 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)4U, int16_t, - int16_t *) & - (int16_t)15) - << 4U | - (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)3U, int16_t, - int16_t *) >> - 7U); - uint8_t r6 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)5U, int16_t, - int16_t *) & - (int16_t)1) - << 7U | - (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)4U, int16_t, - int16_t *) >> - 4U); - uint8_t r7 = - (uint8_t)(Eurydice_slice_index(v, (size_t)5U, int16_t, int16_t *) >> 1U & - (int16_t)255); - uint8_t r8 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)6U, int16_t, - int16_t *) & - (int16_t)63) - << 2U | - (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)5U, int16_t, - int16_t *) >> - 9U); - uint8_t r9 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)7U, int16_t, - int16_t *) & - (int16_t)7) - << 5U | - (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)6U, int16_t, - int16_t *) >> - 6U); - uint8_t r10 = - (uint8_t)(Eurydice_slice_index(v, (size_t)7U, int16_t, int16_t *) >> 3U); - return (CLITERAL(uint8_t_x11){ .fst = r0, - .snd = r1, - .thd = r2, - .f3 = r3, - .f4 = r4, - .f5 = r5, - .f6 = r6, - .f7 = r7, - .f8 = r8, - .f9 = r9, - .f10 = r10 }); + memcpy(ret, x.elements, (size_t)16U * sizeof(int16_t)); } -KRML_MUSTINLINE void -libcrux_ml_kem_vector_portable_serialize_serialize_11( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, - uint8_t ret[22U]) -{ - uint8_t_x11 r0_10 = libcrux_ml_kem_vector_portable_serialize_serialize_11_int( - Eurydice_array_to_subslice2(v.elements, (size_t)0U, (size_t)8U, int16_t)); - uint8_t_x11 r11_21 = - libcrux_ml_kem_vector_portable_serialize_serialize_11_int( - Eurydice_array_to_subslice2(v.elements, (size_t)8U, (size_t)16U, - int16_t)); - uint8_t result[22U] = { 0U }; - result[0U] = r0_10.fst; - result[1U] = r0_10.snd; - result[2U] = r0_10.thd; - result[3U] = r0_10.f3; - result[4U] = r0_10.f4; - result[5U] = r0_10.f5; - result[6U] = r0_10.f6; - result[7U] = r0_10.f7; - result[8U] = r0_10.f8; - result[9U] = r0_10.f9; - result[10U] = r0_10.f10; - result[11U] = r11_21.fst; - result[12U] = r11_21.snd; - result[13U] = r11_21.thd; - result[14U] = r11_21.f3; - result[15U] = r11_21.f4; - result[16U] = r11_21.f5; - result[17U] = r11_21.f6; - result[18U] = r11_21.f7; - result[19U] = r11_21.f8; - result[20U] = r11_21.f9; - result[21U] = r11_21.f10; - memcpy(ret, result, (size_t)22U * sizeof(uint8_t)); -} - -/** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ void -libcrux_ml_kem_vector_portable_serialize_11_0d( - libcrux_ml_kem_vector_portable_vector_type_PortableVector a, - uint8_t ret[22U]) -{ - libcrux_ml_kem_vector_portable_serialize_serialize_11(a, ret); -} - -KRML_MUSTINLINE int16_t_x8 -libcrux_ml_kem_vector_portable_serialize_deserialize_11_int( - Eurydice_slice bytes) +libcrux_ml_kem_vector_portable_to_i16_array_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector x, + int16_t ret[16U]) { - int16_t r0 = - ((int16_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *) & - (int16_t)7) - << 8U | - (int16_t)Eurydice_slice_index(bytes, (size_t)0U, uint8_t, uint8_t *); - int16_t r1 = - ((int16_t)Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *) & - (int16_t)63) - << 5U | - (int16_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *) >> - 3U; - int16_t r2 = - (((int16_t)Eurydice_slice_index(bytes, (size_t)4U, uint8_t, uint8_t *) & - (int16_t)1) - << 10U | - (int16_t)Eurydice_slice_index(bytes, (size_t)3U, uint8_t, uint8_t *) - << 2U) | - (int16_t)Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *) >> - 6U; - int16_t r3 = - ((int16_t)Eurydice_slice_index(bytes, (size_t)5U, uint8_t, uint8_t *) & - (int16_t)15) - << 7U | - (int16_t)Eurydice_slice_index(bytes, (size_t)4U, uint8_t, uint8_t *) >> - 1U; - int16_t r4 = - ((int16_t)Eurydice_slice_index(bytes, (size_t)6U, uint8_t, uint8_t *) & - (int16_t)127) - << 4U | - (int16_t)Eurydice_slice_index(bytes, (size_t)5U, uint8_t, uint8_t *) >> - 4U; - int16_t r5 = - (((int16_t)Eurydice_slice_index(bytes, (size_t)8U, uint8_t, uint8_t *) & - (int16_t)3) - << 9U | - (int16_t)Eurydice_slice_index(bytes, (size_t)7U, uint8_t, uint8_t *) - << 1U) | - (int16_t)Eurydice_slice_index(bytes, (size_t)6U, uint8_t, uint8_t *) >> - 7U; - int16_t r6 = - ((int16_t)Eurydice_slice_index(bytes, (size_t)9U, uint8_t, uint8_t *) & - (int16_t)31) - << 6U | - (int16_t)Eurydice_slice_index(bytes, (size_t)8U, uint8_t, uint8_t *) >> - 2U; - int16_t r7 = - (int16_t)Eurydice_slice_index(bytes, (size_t)10U, uint8_t, uint8_t *) - << 3U | - (int16_t)Eurydice_slice_index(bytes, (size_t)9U, uint8_t, uint8_t *) >> - 5U; - return (CLITERAL(int16_t_x8){ .fst = r0, - .snd = r1, - .thd = r2, - .f3 = r3, - .f4 = r4, - .f5 = r5, - .f6 = r6, - .f7 = r7 }); + int16_t ret0[16U]; + libcrux_ml_kem_vector_portable_vector_type_to_i16_array(x, ret0); + libcrux_secrets_int_public_integers_declassify_d8_46(ret0, ret); } KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_vector_type_zero(void) +libcrux_ml_kem_vector_portable_vector_type_from_bytes(Eurydice_slice array) { + int16_t elements[16U]; + KRML_MAYBE_FOR16(i, (size_t)0U, (size_t)16U, (size_t)1U, + elements[i] = libcrux_secrets_int_I16((int16_t)0);); + for (size_t i = (size_t)0U; + i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { + size_t i0 = i; + elements[i0] = + libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(array, (size_t)2U * i0, uint8_t, uint8_t *)) + << 8U | + libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + array, (size_t)2U * i0 + (size_t)1U, uint8_t, uint8_t *)); + } + /* Passing arrays by value in Rust generates a copy in C */ + int16_t copy_of_elements[16U]; + memcpy(copy_of_elements, elements, (size_t)16U * sizeof(int16_t)); libcrux_ml_kem_vector_portable_vector_type_PortableVector lit; - lit.elements[0U] = (int16_t)0; - lit.elements[1U] = (int16_t)0; - lit.elements[2U] = (int16_t)0; - lit.elements[3U] = (int16_t)0; - lit.elements[4U] = (int16_t)0; - lit.elements[5U] = (int16_t)0; - lit.elements[6U] = (int16_t)0; - lit.elements[7U] = (int16_t)0; - lit.elements[8U] = (int16_t)0; - lit.elements[9U] = (int16_t)0; - lit.elements[10U] = (int16_t)0; - lit.elements[11U] = (int16_t)0; - lit.elements[12U] = (int16_t)0; - lit.elements[13U] = (int16_t)0; - lit.elements[14U] = (int16_t)0; - lit.elements[15U] = (int16_t)0; + memcpy(lit.elements, copy_of_elements, (size_t)16U * sizeof(int16_t)); return lit; } -KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_serialize_deserialize_11(Eurydice_slice bytes) -{ - int16_t_x8 v0_7 = libcrux_ml_kem_vector_portable_serialize_deserialize_11_int( - Eurydice_slice_subslice2(bytes, (size_t)0U, (size_t)11U, uint8_t)); - int16_t_x8 v8_15 = - libcrux_ml_kem_vector_portable_serialize_deserialize_11_int( - Eurydice_slice_subslice2(bytes, (size_t)11U, (size_t)22U, uint8_t)); - libcrux_ml_kem_vector_portable_vector_type_PortableVector v = - libcrux_ml_kem_vector_portable_vector_type_zero(); - v.elements[0U] = v0_7.fst; - v.elements[1U] = v0_7.snd; - v.elements[2U] = v0_7.thd; - v.elements[3U] = v0_7.f3; - v.elements[4U] = v0_7.f4; - v.elements[5U] = v0_7.f5; - v.elements[6U] = v0_7.f6; - v.elements[7U] = v0_7.f7; - v.elements[8U] = v8_15.fst; - v.elements[9U] = v8_15.snd; - v.elements[10U] = v8_15.thd; - v.elements[11U] = v8_15.f3; - v.elements[12U] = v8_15.f4; - v.elements[13U] = v8_15.f5; - v.elements[14U] = v8_15.f6; - v.elements[15U] = v8_15.f7; - return v; -} - -/** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_deserialize_11_0d(Eurydice_slice a) +libcrux_ml_kem_vector_portable_from_bytes_b8(Eurydice_slice array) { - return libcrux_ml_kem_vector_portable_serialize_deserialize_11(a); + return libcrux_ml_kem_vector_portable_vector_type_from_bytes( + libcrux_secrets_int_classify_public_classify_ref_9b_90(array)); } KRML_MUSTINLINE void -libcrux_ml_kem_vector_portable_vector_type_to_i16_array( +libcrux_ml_kem_vector_portable_vector_type_to_bytes( libcrux_ml_kem_vector_portable_vector_type_PortableVector x, - int16_t ret[16U]) + Eurydice_slice bytes) { - memcpy(ret, x.elements, (size_t)16U * sizeof(int16_t)); + for (size_t i = (size_t)0U; + i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { + size_t i0 = i; + Eurydice_slice_index(bytes, (size_t)2U * i0, uint8_t, uint8_t *) = + libcrux_secrets_int_as_u8_f5(x.elements[i0] >> 8U); + Eurydice_slice_index(bytes, (size_t)2U * i0 + (size_t)1U, uint8_t, + uint8_t *) = + libcrux_secrets_int_as_u8_f5(x.elements[i0]); + } } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ void -libcrux_ml_kem_vector_portable_to_i16_array_0d( +libcrux_ml_kem_vector_portable_to_bytes_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector x, - int16_t ret[16U]) -{ - libcrux_ml_kem_vector_portable_vector_type_to_i16_array(x, ret); -} - -const uint8_t - libcrux_ml_kem_vector_rej_sample_table_REJECTION_SAMPLE_SHUFFLE_TABLE - [256U][16U] = { { 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, - 255U, 255U, 255U }, - { 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, - 255U, 255U, 255U }, - { 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, - 255U, 255U, 255U, 255U }, - { 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, - 255U, 255U, 255U, 255U }, - { 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, - 13U, 255U, 255U }, - { 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, - 255U, 255U, 255U }, - { 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, - 15U, 255U, 255U }, - { 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, - 15U, 255U, 255U }, - { 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, - 15U, 255U, 255U }, - { 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, - 15U, 255U, 255U }, - { 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, - 255U, 255U, 255U, 255U, 255U }, - { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, - 15U, 255U, 255U }, - { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, - 255U, 255U, 255U, 255U }, - { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, - 15U, 255U, 255U }, - { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, - 15U, 255U, 255U }, - { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, - 13U, 14U, 15U } }; - -/** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} -*/ -libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_ZERO_0d(void) + Eurydice_slice bytes) { - return libcrux_ml_kem_vector_portable_vector_type_zero(); + libcrux_ml_kem_vector_portable_vector_type_to_bytes( + x, libcrux_secrets_int_public_integers_classify_mut_slice_ba(bytes)); } KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector @@ -905,11 +228,11 @@ libcrux_ml_kem_vector_portable_arithmetic_add( } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_add_0d( +libcrux_ml_kem_vector_portable_add_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector lhs, libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs) { @@ -931,11 +254,11 @@ libcrux_ml_kem_vector_portable_arithmetic_sub( } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_sub_0d( +libcrux_ml_kem_vector_portable_sub_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector lhs, libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs) { @@ -944,85 +267,54 @@ libcrux_ml_kem_vector_portable_sub_0d( KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_arithmetic_multiply_by_constant( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c) + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, int16_t c) { for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { size_t i0 = i; size_t uu____0 = i0; - v.elements[uu____0] = v.elements[uu____0] * c; + vec.elements[uu____0] = vec.elements[uu____0] * c; } - return v; + return vec; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_multiply_by_constant_0d( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c) -{ - return libcrux_ml_kem_vector_portable_arithmetic_multiply_by_constant(v, c); -} - -KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c) +libcrux_ml_kem_vector_portable_multiply_by_constant_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, int16_t c) { - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { - size_t i0 = i; - size_t uu____0 = i0; - v.elements[uu____0] = v.elements[uu____0] & c; - } - return v; + return libcrux_ml_kem_vector_portable_arithmetic_multiply_by_constant(vec, c); } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} + Note: This function is not secret independent + Only use with public values. */ -libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_bitwise_and_with_constant_0d( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c) -{ - return libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant(v, - c); -} - KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_arithmetic_cond_subtract_3329( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec) { - core_ops_range_Range_b3 iter = - core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter( - (CLITERAL(core_ops_range_Range_b3){ - .start = (size_t)0U, - .end = LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR }), - core_ops_range_Range_b3, core_ops_range_Range_b3); - while (true) { - core_option_Option_b3 uu____0 = - core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next( - &iter, size_t, core_option_Option_b3); - if (!(uu____0.tag == core_option_None)) { - size_t i = uu____0.f0; - if (v.elements[i] >= (int16_t)3329) { - size_t uu____1 = i; - v.elements[uu____1] = v.elements[uu____1] - (int16_t)3329; - } - continue; + for (size_t i = (size_t)0U; + i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { + size_t i0 = i; + if (libcrux_secrets_int_public_integers_declassify_d8_39( + vec.elements[i0]) >= (int16_t)3329) { + size_t uu____0 = i0; + vec.elements[uu____0] = vec.elements[uu____0] - (int16_t)3329; } - return v; } + return vec; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_cond_subtract_3329_0d( +libcrux_ml_kem_vector_portable_cond_subtract_3329_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector v) { return libcrux_ml_kem_vector_portable_arithmetic_cond_subtract_3329(v); @@ -1039,45 +331,46 @@ libcrux_ml_kem_vector_portable_cond_subtract_3329_0d( `|result| ≤ FIELD_MODULUS / 2 · (|value|/BARRETT_R + 1) - In particular, if `|value| < BARRETT_R`, then `|result| < FIELD_MODULUS`. + Note: The input bound is 28296 to prevent overflow in the multiplication of + quotient by FIELD_MODULUS + */ int16_t libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element( int16_t value) { - int32_t t = (int32_t)value * + int32_t t = libcrux_secrets_int_as_i32_f5(value) * LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_MULTIPLIER + - (LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_R >> 1U); - int16_t quotient = - (int16_t)(t >> - (uint32_t) - LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_SHIFT); + (LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_R >> 1U); + int16_t quotient = libcrux_secrets_int_as_i16_36( + t >> (uint32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_SHIFT); return value - quotient * LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS; } KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec) { for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { size_t i0 = i; - v.elements[i0] = + int16_t vi = libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element( - v.elements[i0]); + vec.elements[i0]); + vec.elements[i0] = vi; } - return v; + return vec; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_barrett_reduce_0d( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +libcrux_ml_kem_vector_portable_barrett_reduce_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector vector) { - return libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce(v); + return libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce(vector); } /** @@ -1089,28 +382,33 @@ libcrux_ml_kem_vector_portable_barrett_reduce_0d( - o ≡ value · MONTGOMERY_R^(-1) (mod FIELD_MODULUS) - the absolute value of `o` is bound as follows: - `|result| ≤ (|value| / MONTGOMERY_R) + (FIELD_MODULUS / 2) + `|result| ≤ ceil(|value| / MONTGOMERY_R) + 1665 + + In particular, if `|value| ≤ FIELD_MODULUS-1 * FIELD_MODULUS-1`, then `|o| <= + FIELD_MODULUS-1`. And, if `|value| ≤ pow2 16 * FIELD_MODULUS-1`, then `|o| <= + FIELD_MODULUS + 1664 - In particular, if `|value| ≤ FIELD_MODULUS * MONTGOMERY_R`, then `|o| < (3 · - FIELD_MODULUS) / 2`. */ int16_t libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element( int32_t value) { int32_t k = - (int32_t)(int16_t)value * - (int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R; + libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_as_i16_36(value)) * + libcrux_secrets_int_as_i32_b8( + libcrux_secrets_int_public_integers_classify_27_df( + LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R)); int32_t k_times_modulus = - (int32_t)(int16_t)k * (int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS; - int16_t c = - (int16_t)(k_times_modulus >> - (uint32_t) - LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT); - int16_t value_high = - (int16_t)(value >> - (uint32_t) - LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT); + libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_as_i16_36(k)) * + libcrux_secrets_int_as_i32_f5( + libcrux_secrets_int_public_integers_classify_27_39( + LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS)); + int16_t c = libcrux_secrets_int_as_i16_36( + k_times_modulus >> + (uint32_t)LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT); + int16_t value_high = libcrux_secrets_int_as_i16_36( + value >> + (uint32_t)LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT); return value_high - c; } @@ -1129,34 +427,90 @@ KRML_MUSTINLINE int16_t libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer( int16_t fe, int16_t fer) { + int32_t product = + libcrux_secrets_int_as_i32_f5(fe) * libcrux_secrets_int_as_i32_f5(fer); return libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element( - (int32_t)fe * (int32_t)fer); + product); } KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_by_constant( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c) + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, int16_t c) { for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { size_t i0 = i; - v.elements[i0] = + vec.elements[i0] = libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer( - v.elements[i0], c); + vec.elements[i0], c); } - return v; + return vec; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_0d( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t r) +libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector vector, + int16_t constant) { return libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_by_constant( - v, r); + vector, libcrux_secrets_int_public_integers_classify_27_39(constant)); +} + +KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant( + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, int16_t c) +{ + for (size_t i = (size_t)0U; + i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { + size_t i0 = i; + size_t uu____0 = i0; + vec.elements[uu____0] = vec.elements[uu____0] & c; + } + return vec; +} + +/** +A monomorphic instance of libcrux_ml_kem.vector.portable.arithmetic.shift_right +with const generics +- SHIFT_BY= 15 +*/ +static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector +shift_right_ef(libcrux_ml_kem_vector_portable_vector_type_PortableVector vec) +{ + for (size_t i = (size_t)0U; + i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { + size_t i0 = i; + vec.elements[i0] = vec.elements[i0] >> (uint32_t)(int32_t)15; + } + return vec; +} + +KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_arithmetic_to_unsigned_representative( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) +{ + libcrux_ml_kem_vector_portable_vector_type_PortableVector t = + shift_right_ef(a); + libcrux_ml_kem_vector_portable_vector_type_PortableVector fm = + libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant( + t, LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS); + return libcrux_ml_kem_vector_portable_arithmetic_add(a, &fm); +} + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} +*/ +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_to_unsigned_representative_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) +{ + return libcrux_ml_kem_vector_portable_arithmetic_to_unsigned_representative( + a); } /** @@ -1185,36 +539,40 @@ uint8_t libcrux_ml_kem_vector_portable_compress_compress_message_coefficient( uint16_t fe) { - int16_t shifted = (int16_t)1664 - (int16_t)fe; + int16_t shifted = + libcrux_secrets_int_public_integers_classify_27_39((int16_t)1664) - + libcrux_secrets_int_as_i16_ca(fe); int16_t mask = shifted >> 15U; int16_t shifted_to_positive = mask ^ shifted; int16_t shifted_positive_in_range = shifted_to_positive - (int16_t)832; - return (uint8_t)(shifted_positive_in_range >> 15U & (int16_t)1); + int16_t r0 = shifted_positive_in_range >> 15U; + int16_t r1 = r0 & (int16_t)1; + return libcrux_secrets_int_as_u8_f5(r1); } KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_compress_compress_1( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { size_t i0 = i; - v.elements[i0] = (int16_t) + a.elements[i0] = libcrux_secrets_int_as_i16_59( libcrux_ml_kem_vector_portable_compress_compress_message_coefficient( - (uint16_t)v.elements[i0]); + libcrux_secrets_int_as_u16_f5(a.elements[i0]))); } - return v; + return a; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_compress_1_0d( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +libcrux_ml_kem_vector_portable_compress_1_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { - return libcrux_ml_kem_vector_portable_compress_compress_1(v); + return libcrux_ml_kem_vector_portable_compress_compress_1(a); } KRML_MUSTINLINE uint32_t @@ -1228,57 +586,86 @@ int16_t libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient( uint8_t coefficient_bits, uint16_t fe) { - uint64_t compressed = (uint64_t)fe << (uint32_t)coefficient_bits; + uint64_t compressed = libcrux_secrets_int_as_u64_ca(fe) + << (uint32_t)coefficient_bits; compressed = compressed + 1664ULL; compressed = compressed * 10321340ULL; compressed = compressed >> 35U; - return (int16_t) + return libcrux_secrets_int_as_i16_b8( libcrux_ml_kem_vector_portable_arithmetic_get_n_least_significant_bits( - coefficient_bits, (uint32_t)compressed); + coefficient_bits, libcrux_secrets_int_as_u32_a3(compressed))); +} + +KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_compress_decompress_1( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) +{ + libcrux_ml_kem_vector_portable_vector_type_PortableVector z = + libcrux_ml_kem_vector_portable_vector_type_zero(); + libcrux_ml_kem_vector_portable_vector_type_PortableVector s = + libcrux_ml_kem_vector_portable_arithmetic_sub(z, &a); + libcrux_ml_kem_vector_portable_vector_type_PortableVector res = + libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant( + s, (int16_t)1665); + return res; +} + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} +*/ +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_decompress_1_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) +{ + return libcrux_ml_kem_vector_portable_compress_decompress_1(a); } KRML_MUSTINLINE void libcrux_ml_kem_vector_portable_ntt_ntt_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector *v, int16_t zeta, - size_t i, size_t j) + libcrux_ml_kem_vector_portable_vector_type_PortableVector *vec, + int16_t zeta, size_t i, size_t j) { int16_t t = libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer( - v->elements[j], zeta); - v->elements[j] = v->elements[i] - t; - v->elements[i] = v->elements[i] + t; + vec->elements[j], + libcrux_secrets_int_public_integers_classify_27_39(zeta)); + int16_t a_minus_t = vec->elements[i] - t; + int16_t a_plus_t = vec->elements[i] + t; + vec->elements[j] = a_minus_t; + vec->elements[i] = a_plus_t; } KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_ntt_ntt_layer_1_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta0, - int16_t zeta1, int16_t zeta2, int16_t zeta3) + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, + int16_t zeta0, int16_t zeta1, int16_t zeta2, int16_t zeta3) { - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta0, (size_t)0U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)0U, (size_t)2U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta0, (size_t)1U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)1U, (size_t)3U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta1, (size_t)4U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)4U, (size_t)6U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta1, (size_t)5U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)5U, (size_t)7U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta2, (size_t)8U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta2, (size_t)8U, (size_t)10U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta2, (size_t)9U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta2, (size_t)9U, (size_t)11U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta3, (size_t)12U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta3, (size_t)12U, (size_t)14U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta3, (size_t)13U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta3, (size_t)13U, (size_t)15U); - return v; + return vec; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_ntt_layer_1_step_0d( +libcrux_ml_kem_vector_portable_ntt_layer_1_step_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta0, int16_t zeta1, int16_t zeta2, int16_t zeta3) { @@ -1288,34 +675,34 @@ libcrux_ml_kem_vector_portable_ntt_layer_1_step_0d( KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_ntt_ntt_layer_2_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta0, - int16_t zeta1) + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, + int16_t zeta0, int16_t zeta1) { - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta0, (size_t)0U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)0U, (size_t)4U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta0, (size_t)1U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)1U, (size_t)5U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta0, (size_t)2U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)2U, (size_t)6U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta0, (size_t)3U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)3U, (size_t)7U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta1, (size_t)8U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)8U, (size_t)12U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta1, (size_t)9U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)9U, (size_t)13U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta1, (size_t)10U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)10U, (size_t)14U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta1, (size_t)11U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)11U, (size_t)15U); - return v; + return vec; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_ntt_layer_2_step_0d( +libcrux_ml_kem_vector_portable_ntt_layer_2_step_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta0, int16_t zeta1) { @@ -1324,31 +711,34 @@ libcrux_ml_kem_vector_portable_ntt_layer_2_step_0d( KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_ntt_ntt_layer_3_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta) -{ - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)0U, (size_t)8U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)1U, (size_t)9U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)2U, + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, + int16_t zeta) +{ + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)0U, + (size_t)8U); + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)1U, + (size_t)9U); + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)2U, (size_t)10U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)3U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)3U, (size_t)11U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)4U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)4U, (size_t)12U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)5U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)5U, (size_t)13U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)6U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)6U, (size_t)14U); - libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)7U, + libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)7U, (size_t)15U); - return v; + return vec; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_ntt_layer_3_step_0d( +libcrux_ml_kem_vector_portable_ntt_layer_3_step_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta) { return libcrux_ml_kem_vector_portable_ntt_ntt_layer_3_step(a, zeta); @@ -1356,48 +746,50 @@ libcrux_ml_kem_vector_portable_ntt_layer_3_step_0d( KRML_MUSTINLINE void libcrux_ml_kem_vector_portable_ntt_inv_ntt_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector *v, int16_t zeta, - size_t i, size_t j) -{ - int16_t a_minus_b = v->elements[j] - v->elements[i]; - v->elements[i] = - libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element( - v->elements[i] + v->elements[j]); - v->elements[j] = + libcrux_ml_kem_vector_portable_vector_type_PortableVector *vec, + int16_t zeta, size_t i, size_t j) +{ + int16_t a_minus_b = vec->elements[j] - vec->elements[i]; + int16_t a_plus_b = vec->elements[j] + vec->elements[i]; + int16_t o0 = libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element( + a_plus_b); + int16_t o1 = libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer( - a_minus_b, zeta); + a_minus_b, libcrux_secrets_int_public_integers_classify_27_39(zeta)); + vec->elements[i] = o0; + vec->elements[j] = o1; } KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_1_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta0, - int16_t zeta1, int16_t zeta2, int16_t zeta3) + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, + int16_t zeta0, int16_t zeta1, int16_t zeta2, int16_t zeta3) { - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta0, (size_t)0U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)0U, (size_t)2U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta0, (size_t)1U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)1U, (size_t)3U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta1, (size_t)4U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)4U, (size_t)6U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta1, (size_t)5U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)5U, (size_t)7U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta2, (size_t)8U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta2, (size_t)8U, (size_t)10U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta2, (size_t)9U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta2, (size_t)9U, (size_t)11U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta3, (size_t)12U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta3, (size_t)12U, (size_t)14U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta3, (size_t)13U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta3, (size_t)13U, (size_t)15U); - return v; + return vec; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_0d( +libcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta0, int16_t zeta1, int16_t zeta2, int16_t zeta3) { @@ -1407,34 +799,34 @@ libcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_0d( KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_2_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta0, - int16_t zeta1) + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, + int16_t zeta0, int16_t zeta1) { - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta0, (size_t)0U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)0U, (size_t)4U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta0, (size_t)1U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)1U, (size_t)5U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta0, (size_t)2U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)2U, (size_t)6U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta0, (size_t)3U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)3U, (size_t)7U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta1, (size_t)8U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)8U, (size_t)12U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta1, (size_t)9U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)9U, (size_t)13U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta1, (size_t)10U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)10U, (size_t)14U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta1, (size_t)11U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)11U, (size_t)15U); - return v; + return vec; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_0d( +libcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta0, int16_t zeta1) { @@ -1444,33 +836,34 @@ libcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_0d( KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_3_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta) + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, + int16_t zeta) { - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)0U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)0U, (size_t)8U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)1U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)1U, (size_t)9U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)2U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)2U, (size_t)10U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)3U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)3U, (size_t)11U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)4U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)4U, (size_t)12U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)5U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)5U, (size_t)13U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)6U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)6U, (size_t)14U); - libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)7U, + libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)7U, (size_t)15U); - return v; + return vec; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_0d( +libcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta) { return libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_3_step(a, zeta); @@ -1502,21 +895,35 @@ KRML_MUSTINLINE void libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials( libcrux_ml_kem_vector_portable_vector_type_PortableVector *a, libcrux_ml_kem_vector_portable_vector_type_PortableVector *b, int16_t zeta, - size_t i, size_t j, - libcrux_ml_kem_vector_portable_vector_type_PortableVector *out) -{ - int16_t o0 = libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element( - (int32_t)a->elements[i] * (int32_t)b->elements[i] + - (int32_t) - libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element( - (int32_t)a->elements[j] * (int32_t)b->elements[j]) * - (int32_t)zeta); + size_t i, libcrux_ml_kem_vector_portable_vector_type_PortableVector *out) +{ + int16_t ai = a->elements[(size_t)2U * i]; + int16_t bi = b->elements[(size_t)2U * i]; + int16_t aj = a->elements[(size_t)2U * i + (size_t)1U]; + int16_t bj = b->elements[(size_t)2U * i + (size_t)1U]; + int32_t ai_bi = + libcrux_secrets_int_as_i32_f5(ai) * libcrux_secrets_int_as_i32_f5(bi); + int32_t aj_bj_ = + libcrux_secrets_int_as_i32_f5(aj) * libcrux_secrets_int_as_i32_f5(bj); + int16_t aj_bj = + libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element( + aj_bj_); + int32_t aj_bj_zeta = libcrux_secrets_int_as_i32_f5(aj_bj) * + libcrux_secrets_int_as_i32_f5(zeta); + int32_t ai_bi_aj_bj = ai_bi + aj_bj_zeta; + int16_t o0 = + libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element( + ai_bi_aj_bj); + int32_t ai_bj = + libcrux_secrets_int_as_i32_f5(ai) * libcrux_secrets_int_as_i32_f5(bj); + int32_t aj_bi = + libcrux_secrets_int_as_i32_f5(aj) * libcrux_secrets_int_as_i32_f5(bi); + int32_t ai_bj_aj_bi = ai_bj + aj_bi; int16_t o1 = libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element( - (int32_t)a->elements[i] * (int32_t)b->elements[j] + - (int32_t)a->elements[j] * (int32_t)b->elements[i]); - out->elements[i] = o0; - out->elements[j] = o1; + ai_bj_aj_bi); + out->elements[(size_t)2U * i] = o0; + out->elements[(size_t)2U * i + (size_t)1U] = o1; } KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector @@ -1525,33 +932,45 @@ libcrux_ml_kem_vector_portable_ntt_ntt_multiply( libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs, int16_t zeta0, int16_t zeta1, int16_t zeta2, int16_t zeta3) { + int16_t nzeta0 = -zeta0; + int16_t nzeta1 = -zeta1; + int16_t nzeta2 = -zeta2; + int16_t nzeta3 = -zeta3; libcrux_ml_kem_vector_portable_vector_type_PortableVector out = libcrux_ml_kem_vector_portable_vector_type_zero(); libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials( - lhs, rhs, zeta0, (size_t)0U, (size_t)1U, &out); + lhs, rhs, libcrux_secrets_int_public_integers_classify_27_39(zeta0), + (size_t)0U, &out); libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials( - lhs, rhs, -zeta0, (size_t)2U, (size_t)3U, &out); + lhs, rhs, libcrux_secrets_int_public_integers_classify_27_39(nzeta0), + (size_t)1U, &out); libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials( - lhs, rhs, zeta1, (size_t)4U, (size_t)5U, &out); + lhs, rhs, libcrux_secrets_int_public_integers_classify_27_39(zeta1), + (size_t)2U, &out); libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials( - lhs, rhs, -zeta1, (size_t)6U, (size_t)7U, &out); + lhs, rhs, libcrux_secrets_int_public_integers_classify_27_39(nzeta1), + (size_t)3U, &out); libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials( - lhs, rhs, zeta2, (size_t)8U, (size_t)9U, &out); + lhs, rhs, libcrux_secrets_int_public_integers_classify_27_39(zeta2), + (size_t)4U, &out); libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials( - lhs, rhs, -zeta2, (size_t)10U, (size_t)11U, &out); + lhs, rhs, libcrux_secrets_int_public_integers_classify_27_39(nzeta2), + (size_t)5U, &out); libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials( - lhs, rhs, zeta3, (size_t)12U, (size_t)13U, &out); + lhs, rhs, libcrux_secrets_int_public_integers_classify_27_39(zeta3), + (size_t)6U, &out); libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials( - lhs, rhs, -zeta3, (size_t)14U, (size_t)15U, &out); + lhs, rhs, libcrux_secrets_int_public_integers_classify_27_39(nzeta3), + (size_t)7U, &out); return out; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_ntt_multiply_0d( +libcrux_ml_kem_vector_portable_ntt_multiply_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector *lhs, libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs, int16_t zeta0, int16_t zeta1, int16_t zeta2, int16_t zeta3) @@ -1565,88 +984,147 @@ libcrux_ml_kem_vector_portable_serialize_serialize_1( libcrux_ml_kem_vector_portable_vector_type_PortableVector v, uint8_t ret[2U]) { - uint8_t result[2U] = { 0U }; - KRML_MAYBE_FOR8( - i, (size_t)0U, (size_t)8U, (size_t)1U, size_t i0 = i; - size_t uu____0 = (size_t)0U; - result[uu____0] = (uint32_t)result[uu____0] | - (uint32_t)(uint8_t)v.elements[i0] << (uint32_t)i0;); - KRML_MAYBE_FOR8(i, (size_t)8U, (size_t)16U, (size_t)1U, size_t i0 = i; - size_t uu____1 = (size_t)1U; - result[uu____1] = (uint32_t)result[uu____1] | - (uint32_t)(uint8_t)v.elements[i0] - << (uint32_t)(i0 - (size_t)8U);); - memcpy(ret, result, (size_t)2U * sizeof(uint8_t)); + uint8_t result0 = + (((((((uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[0U]) | + (uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[1U]) << 1U) | + (uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[2U]) << 2U) | + (uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[3U]) << 3U) | + (uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[4U]) << 4U) | + (uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[5U]) << 5U) | + (uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[6U]) << 6U) | + (uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[7U]) << 7U; + uint8_t result1 = + (((((((uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[8U]) | + (uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[9U]) << 1U) | + (uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[10U]) << 2U) | + (uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[11U]) << 3U) | + (uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[12U]) << 4U) | + (uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[13U]) << 5U) | + (uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[14U]) << 6U) | + (uint32_t)libcrux_secrets_int_as_u8_f5(v.elements[15U]) << 7U; + ret[0U] = result0; + ret[1U] = result1; +} + +void +libcrux_ml_kem_vector_portable_serialize_1( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a, + uint8_t ret[2U]) +{ + uint8_t ret0[2U]; + libcrux_ml_kem_vector_portable_serialize_serialize_1(a, ret0); + libcrux_secrets_int_public_integers_declassify_d8_d4(ret0, ret); } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ void -libcrux_ml_kem_vector_portable_serialize_1_0d( +libcrux_ml_kem_vector_portable_serialize_1_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, uint8_t ret[2U]) { - libcrux_ml_kem_vector_portable_serialize_serialize_1(a, ret); + libcrux_ml_kem_vector_portable_serialize_1(a, ret); } KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_serialize_deserialize_1(Eurydice_slice v) { - libcrux_ml_kem_vector_portable_vector_type_PortableVector result = - libcrux_ml_kem_vector_portable_vector_type_zero(); - KRML_MAYBE_FOR8( - i, (size_t)0U, (size_t)8U, (size_t)1U, size_t i0 = i; - result.elements[i0] = (int16_t)((uint32_t)Eurydice_slice_index( - v, (size_t)0U, uint8_t, uint8_t *) >> - (uint32_t)i0 & - 1U);); - for (size_t i = (size_t)8U; - i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { - size_t i0 = i; - result.elements[i0] = (int16_t)((uint32_t)Eurydice_slice_index( - v, (size_t)1U, uint8_t, uint8_t *) >> - (uint32_t)(i0 - (size_t)8U) & - 1U); - } - return result; + int16_t result0 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)0U, uint8_t, uint8_t *) & 1U); + int16_t result1 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)0U, uint8_t, uint8_t *) >> 1U & + 1U); + int16_t result2 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)0U, uint8_t, uint8_t *) >> 2U & + 1U); + int16_t result3 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)0U, uint8_t, uint8_t *) >> 3U & + 1U); + int16_t result4 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)0U, uint8_t, uint8_t *) >> 4U & + 1U); + int16_t result5 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)0U, uint8_t, uint8_t *) >> 5U & + 1U); + int16_t result6 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)0U, uint8_t, uint8_t *) >> 6U & + 1U); + int16_t result7 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)0U, uint8_t, uint8_t *) >> 7U & + 1U); + int16_t result8 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)1U, uint8_t, uint8_t *) & 1U); + int16_t result9 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)1U, uint8_t, uint8_t *) >> 1U & + 1U); + int16_t result10 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)1U, uint8_t, uint8_t *) >> 2U & + 1U); + int16_t result11 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)1U, uint8_t, uint8_t *) >> 3U & + 1U); + int16_t result12 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)1U, uint8_t, uint8_t *) >> 4U & + 1U); + int16_t result13 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)1U, uint8_t, uint8_t *) >> 5U & + 1U); + int16_t result14 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)1U, uint8_t, uint8_t *) >> 6U & + 1U); + int16_t result15 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(v, (size_t)1U, uint8_t, uint8_t *) >> 7U & + 1U); + return ( + KRML_CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector){ + .elements = { result0, result1, result2, result3, result4, result5, + result6, result7, result8, result9, result10, result11, + result12, result13, result14, result15 } }); +} + +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_deserialize_1(Eurydice_slice a) +{ + return libcrux_ml_kem_vector_portable_serialize_deserialize_1( + libcrux_secrets_int_classify_public_classify_ref_9b_90(a)); } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_deserialize_1_0d(Eurydice_slice a) +libcrux_ml_kem_vector_portable_deserialize_1_b8(Eurydice_slice a) { - return libcrux_ml_kem_vector_portable_serialize_deserialize_1(a); + return libcrux_ml_kem_vector_portable_deserialize_1(a); } KRML_MUSTINLINE uint8_t_x4 libcrux_ml_kem_vector_portable_serialize_serialize_4_int(Eurydice_slice v) { - uint8_t result0 = - (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) - << 4U | - (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)0U, int16_t, - int16_t *); - uint8_t result1 = - (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *) - << 4U | - (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)2U, int16_t, - int16_t *); - uint8_t result2 = - (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)5U, int16_t, int16_t *) - << 4U | - (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)4U, int16_t, - int16_t *); - uint8_t result3 = - (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)7U, int16_t, int16_t *) - << 4U | - (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)6U, int16_t, - int16_t *); - return (CLITERAL(uint8_t_x4){ + uint8_t result0 = (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *)) + << 4U | + (uint32_t)libcrux_secrets_int_as_u8_f5(Eurydice_slice_index( + v, (size_t)0U, int16_t, int16_t *)); + uint8_t result1 = (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *)) + << 4U | + (uint32_t)libcrux_secrets_int_as_u8_f5(Eurydice_slice_index( + v, (size_t)2U, int16_t, int16_t *)); + uint8_t result2 = (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)5U, int16_t, int16_t *)) + << 4U | + (uint32_t)libcrux_secrets_int_as_u8_f5(Eurydice_slice_index( + v, (size_t)4U, int16_t, int16_t *)); + uint8_t result3 = (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)7U, int16_t, int16_t *)) + << 4U | + (uint32_t)libcrux_secrets_int_as_u8_f5(Eurydice_slice_index( + v, (size_t)6U, int16_t, int16_t *)); + return (KRML_CLITERAL(uint8_t_x4){ .fst = result0, .snd = result1, .thd = result2, .f3 = result3 }); } @@ -1657,139 +1135,138 @@ libcrux_ml_kem_vector_portable_serialize_serialize_4( { uint8_t_x4 result0_3 = libcrux_ml_kem_vector_portable_serialize_serialize_4_int( - Eurydice_array_to_subslice2(v.elements, (size_t)0U, (size_t)8U, - int16_t)); + Eurydice_array_to_subslice3(v.elements, (size_t)0U, (size_t)8U, + int16_t *)); uint8_t_x4 result4_7 = libcrux_ml_kem_vector_portable_serialize_serialize_4_int( - Eurydice_array_to_subslice2(v.elements, (size_t)8U, (size_t)16U, - int16_t)); - uint8_t result[8U] = { 0U }; - result[0U] = result0_3.fst; - result[1U] = result0_3.snd; - result[2U] = result0_3.thd; - result[3U] = result0_3.f3; - result[4U] = result4_7.fst; - result[5U] = result4_7.snd; - result[6U] = result4_7.thd; - result[7U] = result4_7.f3; - memcpy(ret, result, (size_t)8U * sizeof(uint8_t)); + Eurydice_array_to_subslice3(v.elements, (size_t)8U, (size_t)16U, + int16_t *)); + ret[0U] = result0_3.fst; + ret[1U] = result0_3.snd; + ret[2U] = result0_3.thd; + ret[3U] = result0_3.f3; + ret[4U] = result4_7.fst; + ret[5U] = result4_7.snd; + ret[6U] = result4_7.thd; + ret[7U] = result4_7.f3; +} + +void +libcrux_ml_kem_vector_portable_serialize_4( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a, + uint8_t ret[8U]) +{ + uint8_t ret0[8U]; + libcrux_ml_kem_vector_portable_serialize_serialize_4(a, ret0); + libcrux_secrets_int_public_integers_declassify_d8_76(ret0, ret); } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ void -libcrux_ml_kem_vector_portable_serialize_4_0d( +libcrux_ml_kem_vector_portable_serialize_4_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, uint8_t ret[8U]) { - libcrux_ml_kem_vector_portable_serialize_serialize_4(a, ret); + libcrux_ml_kem_vector_portable_serialize_4(a, ret); } KRML_MUSTINLINE int16_t_x8 libcrux_ml_kem_vector_portable_serialize_deserialize_4_int( Eurydice_slice bytes) { - int16_t v0 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)0U, - uint8_t, uint8_t *) & - 15U); - int16_t v1 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)0U, - uint8_t, uint8_t *) >> - 4U & - 15U); - int16_t v2 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)1U, - uint8_t, uint8_t *) & - 15U); - int16_t v3 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)1U, - uint8_t, uint8_t *) >> - 4U & - 15U); - int16_t v4 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)2U, - uint8_t, uint8_t *) & - 15U); - int16_t v5 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)2U, - uint8_t, uint8_t *) >> - 4U & - 15U); - int16_t v6 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)3U, - uint8_t, uint8_t *) & - 15U); - int16_t v7 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)3U, - uint8_t, uint8_t *) >> - 4U & - 15U); - return (CLITERAL(int16_t_x8){ .fst = v0, - .snd = v1, - .thd = v2, - .f3 = v3, - .f4 = v4, - .f5 = v5, - .f6 = v6, - .f7 = v7 }); + int16_t v0 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(bytes, (size_t)0U, uint8_t, uint8_t *) & + 15U); + int16_t v1 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(bytes, (size_t)0U, uint8_t, uint8_t *) >> + 4U & + 15U); + int16_t v2 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *) & + 15U); + int16_t v3 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *) >> + 4U & + 15U); + int16_t v4 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *) & + 15U); + int16_t v5 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *) >> + 4U & + 15U); + int16_t v6 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(bytes, (size_t)3U, uint8_t, uint8_t *) & + 15U); + int16_t v7 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(bytes, (size_t)3U, uint8_t, uint8_t *) >> + 4U & + 15U); + return (KRML_CLITERAL(int16_t_x8){ .fst = v0, + .snd = v1, + .thd = v2, + .f3 = v3, + .f4 = v4, + .f5 = v5, + .f6 = v6, + .f7 = v7 }); } KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_serialize_deserialize_4(Eurydice_slice bytes) { int16_t_x8 v0_7 = libcrux_ml_kem_vector_portable_serialize_deserialize_4_int( - Eurydice_slice_subslice2(bytes, (size_t)0U, (size_t)4U, uint8_t)); + Eurydice_slice_subslice3(bytes, (size_t)0U, (size_t)4U, uint8_t *)); int16_t_x8 v8_15 = libcrux_ml_kem_vector_portable_serialize_deserialize_4_int( - Eurydice_slice_subslice2(bytes, (size_t)4U, (size_t)8U, uint8_t)); - libcrux_ml_kem_vector_portable_vector_type_PortableVector v = - libcrux_ml_kem_vector_portable_vector_type_zero(); - v.elements[0U] = v0_7.fst; - v.elements[1U] = v0_7.snd; - v.elements[2U] = v0_7.thd; - v.elements[3U] = v0_7.f3; - v.elements[4U] = v0_7.f4; - v.elements[5U] = v0_7.f5; - v.elements[6U] = v0_7.f6; - v.elements[7U] = v0_7.f7; - v.elements[8U] = v8_15.fst; - v.elements[9U] = v8_15.snd; - v.elements[10U] = v8_15.thd; - v.elements[11U] = v8_15.f3; - v.elements[12U] = v8_15.f4; - v.elements[13U] = v8_15.f5; - v.elements[14U] = v8_15.f6; - v.elements[15U] = v8_15.f7; - return v; -} - -/** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} + Eurydice_slice_subslice3(bytes, (size_t)4U, (size_t)8U, uint8_t *)); + return ( + KRML_CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector){ + .elements = { v0_7.fst, v0_7.snd, v0_7.thd, v0_7.f3, v0_7.f4, v0_7.f5, + v0_7.f6, v0_7.f7, v8_15.fst, v8_15.snd, v8_15.thd, + v8_15.f3, v8_15.f4, v8_15.f5, v8_15.f6, v8_15.f7 } }); +} + +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_deserialize_4(Eurydice_slice a) +{ + return libcrux_ml_kem_vector_portable_serialize_deserialize_4( + libcrux_secrets_int_classify_public_classify_ref_9b_90(a)); +} + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_deserialize_4_0d(Eurydice_slice a) +libcrux_ml_kem_vector_portable_deserialize_4_b8(Eurydice_slice a) { - return libcrux_ml_kem_vector_portable_serialize_deserialize_4(a); + return libcrux_ml_kem_vector_portable_deserialize_4(a); } KRML_MUSTINLINE uint8_t_x5 libcrux_ml_kem_vector_portable_serialize_serialize_5_int(Eurydice_slice v) { - uint8_t r0 = - (uint8_t)(Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *) | - Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) << 5U); - uint8_t r1 = - (uint8_t)((Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) >> 3U | - Eurydice_slice_index(v, (size_t)2U, int16_t, int16_t *) - << 2U) | - Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *) << 7U); - uint8_t r2 = - (uint8_t)(Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *) >> 1U | - Eurydice_slice_index(v, (size_t)4U, int16_t, int16_t *) << 4U); - uint8_t r3 = - (uint8_t)((Eurydice_slice_index(v, (size_t)4U, int16_t, int16_t *) >> 4U | - Eurydice_slice_index(v, (size_t)5U, int16_t, int16_t *) - << 1U) | - Eurydice_slice_index(v, (size_t)6U, int16_t, int16_t *) << 6U); - uint8_t r4 = - (uint8_t)(Eurydice_slice_index(v, (size_t)6U, int16_t, int16_t *) >> 2U | - Eurydice_slice_index(v, (size_t)7U, int16_t, int16_t *) << 3U); - return (CLITERAL(uint8_t_x5){ + uint8_t r0 = libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *) | + Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) << 5U); + uint8_t r1 = libcrux_secrets_int_as_u8_f5( + (Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) >> 3U | + Eurydice_slice_index(v, (size_t)2U, int16_t, int16_t *) << 2U) | + Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *) << 7U); + uint8_t r2 = libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *) >> 1U | + Eurydice_slice_index(v, (size_t)4U, int16_t, int16_t *) << 4U); + uint8_t r3 = libcrux_secrets_int_as_u8_f5( + (Eurydice_slice_index(v, (size_t)4U, int16_t, int16_t *) >> 4U | + Eurydice_slice_index(v, (size_t)5U, int16_t, int16_t *) << 1U) | + Eurydice_slice_index(v, (size_t)6U, int16_t, int16_t *) << 6U); + uint8_t r4 = libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)6U, int16_t, int16_t *) >> 2U | + Eurydice_slice_index(v, (size_t)7U, int16_t, int16_t *) << 3U); + return (KRML_CLITERAL(uint8_t_x5){ .fst = r0, .snd = r1, .thd = r2, .f3 = r3, .f4 = r4 }); } @@ -1799,161 +1276,155 @@ libcrux_ml_kem_vector_portable_serialize_serialize_5( uint8_t ret[10U]) { uint8_t_x5 r0_4 = libcrux_ml_kem_vector_portable_serialize_serialize_5_int( - Eurydice_array_to_subslice2(v.elements, (size_t)0U, (size_t)8U, int16_t)); + Eurydice_array_to_subslice3(v.elements, (size_t)0U, (size_t)8U, + int16_t *)); uint8_t_x5 r5_9 = libcrux_ml_kem_vector_portable_serialize_serialize_5_int( - Eurydice_array_to_subslice2(v.elements, (size_t)8U, (size_t)16U, - int16_t)); - uint8_t result[10U] = { 0U }; - result[0U] = r0_4.fst; - result[1U] = r0_4.snd; - result[2U] = r0_4.thd; - result[3U] = r0_4.f3; - result[4U] = r0_4.f4; - result[5U] = r5_9.fst; - result[6U] = r5_9.snd; - result[7U] = r5_9.thd; - result[8U] = r5_9.f3; - result[9U] = r5_9.f4; - memcpy(ret, result, (size_t)10U * sizeof(uint8_t)); -} - -/** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} + Eurydice_array_to_subslice3(v.elements, (size_t)8U, (size_t)16U, + int16_t *)); + ret[0U] = r0_4.fst; + ret[1U] = r0_4.snd; + ret[2U] = r0_4.thd; + ret[3U] = r0_4.f3; + ret[4U] = r0_4.f4; + ret[5U] = r5_9.fst; + ret[6U] = r5_9.snd; + ret[7U] = r5_9.thd; + ret[8U] = r5_9.f3; + ret[9U] = r5_9.f4; +} + +void +libcrux_ml_kem_vector_portable_serialize_5( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a, + uint8_t ret[10U]) +{ + uint8_t ret0[10U]; + libcrux_ml_kem_vector_portable_serialize_serialize_5(a, ret0); + libcrux_secrets_int_public_integers_declassify_d8_cc(ret0, ret); +} + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ void -libcrux_ml_kem_vector_portable_serialize_5_0d( +libcrux_ml_kem_vector_portable_serialize_5_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, uint8_t ret[10U]) { - libcrux_ml_kem_vector_portable_serialize_serialize_5(a, ret); + libcrux_ml_kem_vector_portable_serialize_5(a, ret); } KRML_MUSTINLINE int16_t_x8 libcrux_ml_kem_vector_portable_serialize_deserialize_5_int( Eurydice_slice bytes) { - int16_t v0 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)0U, - uint8_t, uint8_t *) & - 31U); - int16_t v1 = (int16_t)(((uint32_t)Eurydice_slice_index(bytes, (size_t)1U, - uint8_t, uint8_t *) & - 3U) << 3U | - (uint32_t)Eurydice_slice_index(bytes, (size_t)0U, - uint8_t, uint8_t *) >> - 5U); - int16_t v2 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)1U, - uint8_t, uint8_t *) >> - 2U & - 31U); - int16_t v3 = (int16_t)(((uint32_t)Eurydice_slice_index(bytes, (size_t)2U, - uint8_t, uint8_t *) & - 15U) - << 1U | - (uint32_t)Eurydice_slice_index(bytes, (size_t)1U, - uint8_t, uint8_t *) >> - 7U); - int16_t v4 = (int16_t)(((uint32_t)Eurydice_slice_index(bytes, (size_t)3U, - uint8_t, uint8_t *) & - 1U) << 4U | - (uint32_t)Eurydice_slice_index(bytes, (size_t)2U, - uint8_t, uint8_t *) >> - 4U); - int16_t v5 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)3U, - uint8_t, uint8_t *) >> - 1U & - 31U); - int16_t v6 = (int16_t)(((uint32_t)Eurydice_slice_index(bytes, (size_t)4U, - uint8_t, uint8_t *) & - 7U) << 2U | - (uint32_t)Eurydice_slice_index(bytes, (size_t)3U, - uint8_t, uint8_t *) >> - 6U); - int16_t v7 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)4U, - uint8_t, uint8_t *) >> - 3U); - return (CLITERAL(int16_t_x8){ .fst = v0, - .snd = v1, - .thd = v2, - .f3 = v3, - .f4 = v4, - .f5 = v5, - .f6 = v6, - .f7 = v7 }); + int16_t v0 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(bytes, (size_t)0U, uint8_t, uint8_t *) & + 31U); + int16_t v1 = libcrux_secrets_int_as_i16_59( + ((uint32_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *) & + 3U) << 3U | + (uint32_t)Eurydice_slice_index(bytes, (size_t)0U, uint8_t, uint8_t *) >> + 5U); + int16_t v2 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *) >> + 2U & + 31U); + int16_t v3 = libcrux_secrets_int_as_i16_59( + ((uint32_t)Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *) & + 15U) + << 1U | + (uint32_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *) >> + 7U); + int16_t v4 = libcrux_secrets_int_as_i16_59( + ((uint32_t)Eurydice_slice_index(bytes, (size_t)3U, uint8_t, uint8_t *) & + 1U) << 4U | + (uint32_t)Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *) >> + 4U); + int16_t v5 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(bytes, (size_t)3U, uint8_t, uint8_t *) >> + 1U & + 31U); + int16_t v6 = libcrux_secrets_int_as_i16_59( + ((uint32_t)Eurydice_slice_index(bytes, (size_t)4U, uint8_t, uint8_t *) & + 7U) << 2U | + (uint32_t)Eurydice_slice_index(bytes, (size_t)3U, uint8_t, uint8_t *) >> + 6U); + int16_t v7 = libcrux_secrets_int_as_i16_59( + (uint32_t)Eurydice_slice_index(bytes, (size_t)4U, uint8_t, uint8_t *) >> + 3U); + return (KRML_CLITERAL(int16_t_x8){ .fst = v0, + .snd = v1, + .thd = v2, + .f3 = v3, + .f4 = v4, + .f5 = v5, + .f6 = v6, + .f7 = v7 }); } KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_serialize_deserialize_5(Eurydice_slice bytes) { int16_t_x8 v0_7 = libcrux_ml_kem_vector_portable_serialize_deserialize_5_int( - Eurydice_slice_subslice2(bytes, (size_t)0U, (size_t)5U, uint8_t)); + Eurydice_slice_subslice3(bytes, (size_t)0U, (size_t)5U, uint8_t *)); int16_t_x8 v8_15 = libcrux_ml_kem_vector_portable_serialize_deserialize_5_int( - Eurydice_slice_subslice2(bytes, (size_t)5U, (size_t)10U, uint8_t)); - libcrux_ml_kem_vector_portable_vector_type_PortableVector v = - libcrux_ml_kem_vector_portable_vector_type_zero(); - v.elements[0U] = v0_7.fst; - v.elements[1U] = v0_7.snd; - v.elements[2U] = v0_7.thd; - v.elements[3U] = v0_7.f3; - v.elements[4U] = v0_7.f4; - v.elements[5U] = v0_7.f5; - v.elements[6U] = v0_7.f6; - v.elements[7U] = v0_7.f7; - v.elements[8U] = v8_15.fst; - v.elements[9U] = v8_15.snd; - v.elements[10U] = v8_15.thd; - v.elements[11U] = v8_15.f3; - v.elements[12U] = v8_15.f4; - v.elements[13U] = v8_15.f5; - v.elements[14U] = v8_15.f6; - v.elements[15U] = v8_15.f7; - return v; -} - -/** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} + Eurydice_slice_subslice3(bytes, (size_t)5U, (size_t)10U, uint8_t *)); + return ( + KRML_CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector){ + .elements = { v0_7.fst, v0_7.snd, v0_7.thd, v0_7.f3, v0_7.f4, v0_7.f5, + v0_7.f6, v0_7.f7, v8_15.fst, v8_15.snd, v8_15.thd, + v8_15.f3, v8_15.f4, v8_15.f5, v8_15.f6, v8_15.f7 } }); +} + +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_deserialize_5(Eurydice_slice a) +{ + return libcrux_ml_kem_vector_portable_serialize_deserialize_5( + libcrux_secrets_int_classify_public_classify_ref_9b_90(a)); +} + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_deserialize_5_0d(Eurydice_slice a) +libcrux_ml_kem_vector_portable_deserialize_5_b8(Eurydice_slice a) { - return libcrux_ml_kem_vector_portable_serialize_deserialize_5(a); + return libcrux_ml_kem_vector_portable_deserialize_5(a); } KRML_MUSTINLINE uint8_t_x5 libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_slice v) { - uint8_t r0 = - (uint8_t)(Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *) & - (int16_t)255); - uint8_t r1 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)1U, int16_t, - int16_t *) & - (int16_t)63) - << 2U | - (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)0U, int16_t, - int16_t *) >> - 8U & - (int16_t)3); - uint8_t r2 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)2U, int16_t, - int16_t *) & - (int16_t)15) - << 4U | - (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)1U, int16_t, - int16_t *) >> - 6U & - (int16_t)15); - uint8_t r3 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)3U, int16_t, - int16_t *) & - (int16_t)3) - << 6U | - (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)2U, int16_t, - int16_t *) >> - 4U & - (int16_t)63); - uint8_t r4 = - (uint8_t)(Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *) >> 2U & - (int16_t)255); - return (CLITERAL(uint8_t_x5){ + uint8_t r0 = libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *) & (int16_t)255); + uint8_t r1 = + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) & (int16_t)63) + << 2U | + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *) >> 8U & + (int16_t)3); + uint8_t r2 = + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)2U, int16_t, int16_t *) & (int16_t)15) + << 4U | + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) >> 6U & + (int16_t)15); + uint8_t r3 = + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *) & (int16_t)3) + << 6U | + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)2U, int16_t, int16_t *) >> 4U & + (int16_t)63); + uint8_t r4 = libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *) >> 2U & + (int16_t)255); + return (KRML_CLITERAL(uint8_t_x5){ .fst = r0, .snd = r1, .thd = r2, .f3 = r3, .f4 = r4 }); } @@ -1963,165 +1434,415 @@ libcrux_ml_kem_vector_portable_serialize_serialize_10( uint8_t ret[20U]) { uint8_t_x5 r0_4 = libcrux_ml_kem_vector_portable_serialize_serialize_10_int( - Eurydice_array_to_subslice2(v.elements, (size_t)0U, (size_t)4U, int16_t)); + Eurydice_array_to_subslice3(v.elements, (size_t)0U, (size_t)4U, + int16_t *)); uint8_t_x5 r5_9 = libcrux_ml_kem_vector_portable_serialize_serialize_10_int( - Eurydice_array_to_subslice2(v.elements, (size_t)4U, (size_t)8U, int16_t)); + Eurydice_array_to_subslice3(v.elements, (size_t)4U, (size_t)8U, + int16_t *)); uint8_t_x5 r10_14 = libcrux_ml_kem_vector_portable_serialize_serialize_10_int( - Eurydice_array_to_subslice2(v.elements, (size_t)8U, (size_t)12U, - int16_t)); + Eurydice_array_to_subslice3(v.elements, (size_t)8U, (size_t)12U, + int16_t *)); uint8_t_x5 r15_19 = libcrux_ml_kem_vector_portable_serialize_serialize_10_int( - Eurydice_array_to_subslice2(v.elements, (size_t)12U, (size_t)16U, - int16_t)); - uint8_t result[20U] = { 0U }; - result[0U] = r0_4.fst; - result[1U] = r0_4.snd; - result[2U] = r0_4.thd; - result[3U] = r0_4.f3; - result[4U] = r0_4.f4; - result[5U] = r5_9.fst; - result[6U] = r5_9.snd; - result[7U] = r5_9.thd; - result[8U] = r5_9.f3; - result[9U] = r5_9.f4; - result[10U] = r10_14.fst; - result[11U] = r10_14.snd; - result[12U] = r10_14.thd; - result[13U] = r10_14.f3; - result[14U] = r10_14.f4; - result[15U] = r15_19.fst; - result[16U] = r15_19.snd; - result[17U] = r15_19.thd; - result[18U] = r15_19.f3; - result[19U] = r15_19.f4; - memcpy(ret, result, (size_t)20U * sizeof(uint8_t)); -} - -/** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} -*/ + Eurydice_array_to_subslice3(v.elements, (size_t)12U, (size_t)16U, + int16_t *)); + ret[0U] = r0_4.fst; + ret[1U] = r0_4.snd; + ret[2U] = r0_4.thd; + ret[3U] = r0_4.f3; + ret[4U] = r0_4.f4; + ret[5U] = r5_9.fst; + ret[6U] = r5_9.snd; + ret[7U] = r5_9.thd; + ret[8U] = r5_9.f3; + ret[9U] = r5_9.f4; + ret[10U] = r10_14.fst; + ret[11U] = r10_14.snd; + ret[12U] = r10_14.thd; + ret[13U] = r10_14.f3; + ret[14U] = r10_14.f4; + ret[15U] = r15_19.fst; + ret[16U] = r15_19.snd; + ret[17U] = r15_19.thd; + ret[18U] = r15_19.f3; + ret[19U] = r15_19.f4; +} + void -libcrux_ml_kem_vector_portable_serialize_10_0d( +libcrux_ml_kem_vector_portable_serialize_10( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, uint8_t ret[20U]) { - libcrux_ml_kem_vector_portable_serialize_serialize_10(a, ret); + uint8_t ret0[20U]; + libcrux_ml_kem_vector_portable_serialize_serialize_10(a, ret0); + libcrux_secrets_int_public_integers_declassify_d8_57(ret0, ret); } -KRML_MUSTINLINE int16_t_x8 -libcrux_ml_kem_vector_portable_serialize_deserialize_10_int( +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} +*/ +void +libcrux_ml_kem_vector_portable_serialize_10_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a, + uint8_t ret[20U]) +{ + libcrux_ml_kem_vector_portable_serialize_10(a, ret); +} + +KRML_MUSTINLINE int16_t_x8 +libcrux_ml_kem_vector_portable_serialize_deserialize_10_int( Eurydice_slice bytes) { - int16_t r0 = - ((int16_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *) & + int16_t r0 = libcrux_secrets_int_as_i16_f5( + (libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *)) & (int16_t)3) << 8U | - ((int16_t)Eurydice_slice_index(bytes, (size_t)0U, uint8_t, uint8_t *) & - (int16_t)255); - int16_t r1 = - ((int16_t)Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *) & + (libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)0U, uint8_t, uint8_t *)) & + (int16_t)255)); + int16_t r1 = libcrux_secrets_int_as_i16_f5( + (libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *)) & (int16_t)15) << 6U | - (int16_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *) >> - 2U; - int16_t r2 = - ((int16_t)Eurydice_slice_index(bytes, (size_t)3U, uint8_t, uint8_t *) & + libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *)) >> + 2U); + int16_t r2 = libcrux_secrets_int_as_i16_f5( + (libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)3U, uint8_t, uint8_t *)) & (int16_t)63) << 4U | - (int16_t)Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *) >> - 4U; - int16_t r3 = - (int16_t)Eurydice_slice_index(bytes, (size_t)4U, uint8_t, uint8_t *) + libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *)) >> + 4U); + int16_t r3 = libcrux_secrets_int_as_i16_f5( + libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)4U, uint8_t, uint8_t *)) << 2U | - (int16_t)Eurydice_slice_index(bytes, (size_t)3U, uint8_t, uint8_t *) >> - 6U; - int16_t r4 = - ((int16_t)Eurydice_slice_index(bytes, (size_t)6U, uint8_t, uint8_t *) & + libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)3U, uint8_t, uint8_t *)) >> + 6U); + int16_t r4 = libcrux_secrets_int_as_i16_f5( + (libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)6U, uint8_t, uint8_t *)) & (int16_t)3) << 8U | - ((int16_t)Eurydice_slice_index(bytes, (size_t)5U, uint8_t, uint8_t *) & - (int16_t)255); - int16_t r5 = - ((int16_t)Eurydice_slice_index(bytes, (size_t)7U, uint8_t, uint8_t *) & + (libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)5U, uint8_t, uint8_t *)) & + (int16_t)255)); + int16_t r5 = libcrux_secrets_int_as_i16_f5( + (libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)7U, uint8_t, uint8_t *)) & (int16_t)15) << 6U | - (int16_t)Eurydice_slice_index(bytes, (size_t)6U, uint8_t, uint8_t *) >> - 2U; - int16_t r6 = - ((int16_t)Eurydice_slice_index(bytes, (size_t)8U, uint8_t, uint8_t *) & + libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)6U, uint8_t, uint8_t *)) >> + 2U); + int16_t r6 = libcrux_secrets_int_as_i16_f5( + (libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)8U, uint8_t, uint8_t *)) & (int16_t)63) << 4U | - (int16_t)Eurydice_slice_index(bytes, (size_t)7U, uint8_t, uint8_t *) >> - 4U; - int16_t r7 = - (int16_t)Eurydice_slice_index(bytes, (size_t)9U, uint8_t, uint8_t *) + libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)7U, uint8_t, uint8_t *)) >> + 4U); + int16_t r7 = libcrux_secrets_int_as_i16_f5( + libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)9U, uint8_t, uint8_t *)) << 2U | - (int16_t)Eurydice_slice_index(bytes, (size_t)8U, uint8_t, uint8_t *) >> - 6U; - return (CLITERAL(int16_t_x8){ .fst = r0, - .snd = r1, - .thd = r2, - .f3 = r3, - .f4 = r4, - .f5 = r5, - .f6 = r6, - .f7 = r7 }); + libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)8U, uint8_t, uint8_t *)) >> + 6U); + return (KRML_CLITERAL(int16_t_x8){ .fst = r0, + .snd = r1, + .thd = r2, + .f3 = r3, + .f4 = r4, + .f5 = r5, + .f6 = r6, + .f7 = r7 }); } KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_serialize_deserialize_10(Eurydice_slice bytes) { int16_t_x8 v0_7 = libcrux_ml_kem_vector_portable_serialize_deserialize_10_int( - Eurydice_slice_subslice2(bytes, (size_t)0U, (size_t)10U, uint8_t)); + Eurydice_slice_subslice3(bytes, (size_t)0U, (size_t)10U, uint8_t *)); int16_t_x8 v8_15 = libcrux_ml_kem_vector_portable_serialize_deserialize_10_int( - Eurydice_slice_subslice2(bytes, (size_t)10U, (size_t)20U, uint8_t)); - libcrux_ml_kem_vector_portable_vector_type_PortableVector v = - libcrux_ml_kem_vector_portable_vector_type_zero(); - v.elements[0U] = v0_7.fst; - v.elements[1U] = v0_7.snd; - v.elements[2U] = v0_7.thd; - v.elements[3U] = v0_7.f3; - v.elements[4U] = v0_7.f4; - v.elements[5U] = v0_7.f5; - v.elements[6U] = v0_7.f6; - v.elements[7U] = v0_7.f7; - v.elements[8U] = v8_15.fst; - v.elements[9U] = v8_15.snd; - v.elements[10U] = v8_15.thd; - v.elements[11U] = v8_15.f3; - v.elements[12U] = v8_15.f4; - v.elements[13U] = v8_15.f5; - v.elements[14U] = v8_15.f6; - v.elements[15U] = v8_15.f7; - return v; -} - -/** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} + Eurydice_slice_subslice3(bytes, (size_t)10U, (size_t)20U, uint8_t *)); + return ( + KRML_CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector){ + .elements = { v0_7.fst, v0_7.snd, v0_7.thd, v0_7.f3, v0_7.f4, v0_7.f5, + v0_7.f6, v0_7.f7, v8_15.fst, v8_15.snd, v8_15.thd, + v8_15.f3, v8_15.f4, v8_15.f5, v8_15.f6, v8_15.f7 } }); +} + +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_deserialize_10(Eurydice_slice a) +{ + return libcrux_ml_kem_vector_portable_serialize_deserialize_10( + libcrux_secrets_int_classify_public_classify_ref_9b_90(a)); +} + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_deserialize_10_0d(Eurydice_slice a) +libcrux_ml_kem_vector_portable_deserialize_10_b8(Eurydice_slice a) { - return libcrux_ml_kem_vector_portable_serialize_deserialize_10(a); + return libcrux_ml_kem_vector_portable_deserialize_10(a); } -KRML_MUSTINLINE uint8_t_x3 -libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_slice v) +KRML_MUSTINLINE uint8_t_x11 +libcrux_ml_kem_vector_portable_serialize_serialize_11_int(Eurydice_slice v) { - uint8_t r0 = - (uint8_t)(Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *) & - (int16_t)255); + uint8_t r0 = libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *)); uint8_t r1 = - (uint8_t)(Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *) >> 8U | - (Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) & - (int16_t)15) - << 4U); + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) & (int16_t)31) + << 3U | + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *) >> 8U); uint8_t r2 = - (uint8_t)(Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) >> 4U & - (int16_t)255); - return (CLITERAL(uint8_t_x3){ .fst = r0, .snd = r1, .thd = r2 }); + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)2U, int16_t, int16_t *) & (int16_t)3) + << 6U | + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) >> 5U); + uint8_t r3 = libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)2U, int16_t, int16_t *) >> 2U & + (int16_t)255); + uint8_t r4 = + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *) & + (int16_t)127) + << 1U | + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)2U, int16_t, int16_t *) >> 10U); + uint8_t r5 = + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)4U, int16_t, int16_t *) & (int16_t)15) + << 4U | + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *) >> 7U); + uint8_t r6 = + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)5U, int16_t, int16_t *) & (int16_t)1) + << 7U | + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)4U, int16_t, int16_t *) >> 4U); + uint8_t r7 = libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)5U, int16_t, int16_t *) >> 1U & + (int16_t)255); + uint8_t r8 = + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)6U, int16_t, int16_t *) & (int16_t)63) + << 2U | + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)5U, int16_t, int16_t *) >> 9U); + uint8_t r9 = + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)7U, int16_t, int16_t *) & (int16_t)7) + << 5U | + (uint32_t)libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)6U, int16_t, int16_t *) >> 6U); + uint8_t r10 = libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)7U, int16_t, int16_t *) >> 3U); + return (KRML_CLITERAL(uint8_t_x11){ .fst = r0, + .snd = r1, + .thd = r2, + .f3 = r3, + .f4 = r4, + .f5 = r5, + .f6 = r6, + .f7 = r7, + .f8 = r8, + .f9 = r9, + .f10 = r10 }); +} + +KRML_MUSTINLINE void +libcrux_ml_kem_vector_portable_serialize_serialize_11( + libcrux_ml_kem_vector_portable_vector_type_PortableVector v, + uint8_t ret[22U]) +{ + uint8_t_x11 r0_10 = libcrux_ml_kem_vector_portable_serialize_serialize_11_int( + Eurydice_array_to_subslice3(v.elements, (size_t)0U, (size_t)8U, + int16_t *)); + uint8_t_x11 r11_21 = + libcrux_ml_kem_vector_portable_serialize_serialize_11_int( + Eurydice_array_to_subslice3(v.elements, (size_t)8U, (size_t)16U, + int16_t *)); + ret[0U] = r0_10.fst; + ret[1U] = r0_10.snd; + ret[2U] = r0_10.thd; + ret[3U] = r0_10.f3; + ret[4U] = r0_10.f4; + ret[5U] = r0_10.f5; + ret[6U] = r0_10.f6; + ret[7U] = r0_10.f7; + ret[8U] = r0_10.f8; + ret[9U] = r0_10.f9; + ret[10U] = r0_10.f10; + ret[11U] = r11_21.fst; + ret[12U] = r11_21.snd; + ret[13U] = r11_21.thd; + ret[14U] = r11_21.f3; + ret[15U] = r11_21.f4; + ret[16U] = r11_21.f5; + ret[17U] = r11_21.f6; + ret[18U] = r11_21.f7; + ret[19U] = r11_21.f8; + ret[20U] = r11_21.f9; + ret[21U] = r11_21.f10; +} + +void +libcrux_ml_kem_vector_portable_serialize_11( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a, + uint8_t ret[22U]) +{ + uint8_t ret0[22U]; + libcrux_ml_kem_vector_portable_serialize_serialize_11(a, ret0); + libcrux_secrets_int_public_integers_declassify_d8_fa(ret0, ret); +} + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} +*/ +void +libcrux_ml_kem_vector_portable_serialize_11_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a, + uint8_t ret[22U]) +{ + libcrux_ml_kem_vector_portable_serialize_11(a, ret); +} + +KRML_MUSTINLINE int16_t_x8 +libcrux_ml_kem_vector_portable_serialize_deserialize_11_int( + Eurydice_slice bytes) +{ + int16_t r0 = (libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + bytes, (size_t)1U, uint8_t, uint8_t *)) & + (int16_t)7) + << 8U | + libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)0U, uint8_t, uint8_t *)); + int16_t r1 = (libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + bytes, (size_t)2U, uint8_t, uint8_t *)) & + (int16_t)63) + << 5U | + libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + bytes, (size_t)1U, uint8_t, uint8_t *)) >> + 3U; + int16_t r2 = ((libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + bytes, (size_t)4U, uint8_t, uint8_t *)) & + (int16_t)1) + << 10U | + libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)3U, uint8_t, uint8_t *)) + << 2U) | + libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + bytes, (size_t)2U, uint8_t, uint8_t *)) >> + 6U; + int16_t r3 = (libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + bytes, (size_t)5U, uint8_t, uint8_t *)) & + (int16_t)15) + << 7U | + libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + bytes, (size_t)4U, uint8_t, uint8_t *)) >> + 1U; + int16_t r4 = (libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + bytes, (size_t)6U, uint8_t, uint8_t *)) & + (int16_t)127) + << 4U | + libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + bytes, (size_t)5U, uint8_t, uint8_t *)) >> + 4U; + int16_t r5 = ((libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + bytes, (size_t)8U, uint8_t, uint8_t *)) & + (int16_t)3) + << 9U | + libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)7U, uint8_t, uint8_t *)) + << 1U) | + libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + bytes, (size_t)6U, uint8_t, uint8_t *)) >> + 7U; + int16_t r6 = (libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + bytes, (size_t)9U, uint8_t, uint8_t *)) & + (int16_t)31) + << 6U | + libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + bytes, (size_t)8U, uint8_t, uint8_t *)) >> + 2U; + int16_t r7 = libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)10U, uint8_t, uint8_t *)) + << 3U | + libcrux_secrets_int_as_i16_59(Eurydice_slice_index( + bytes, (size_t)9U, uint8_t, uint8_t *)) >> + 5U; + return (KRML_CLITERAL(int16_t_x8){ .fst = r0, + .snd = r1, + .thd = r2, + .f3 = r3, + .f4 = r4, + .f5 = r5, + .f6 = r6, + .f7 = r7 }); +} + +KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_serialize_deserialize_11(Eurydice_slice bytes) +{ + int16_t_x8 v0_7 = libcrux_ml_kem_vector_portable_serialize_deserialize_11_int( + Eurydice_slice_subslice3(bytes, (size_t)0U, (size_t)11U, uint8_t *)); + int16_t_x8 v8_15 = + libcrux_ml_kem_vector_portable_serialize_deserialize_11_int( + Eurydice_slice_subslice3(bytes, (size_t)11U, (size_t)22U, uint8_t *)); + return ( + KRML_CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector){ + .elements = { v0_7.fst, v0_7.snd, v0_7.thd, v0_7.f3, v0_7.f4, v0_7.f5, + v0_7.f6, v0_7.f7, v8_15.fst, v8_15.snd, v8_15.thd, + v8_15.f3, v8_15.f4, v8_15.f5, v8_15.f6, v8_15.f7 } }); +} + +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_deserialize_11(Eurydice_slice a) +{ + return libcrux_ml_kem_vector_portable_serialize_deserialize_11( + libcrux_secrets_int_classify_public_classify_ref_9b_90(a)); +} + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} +*/ +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_deserialize_11_b8(Eurydice_slice a) +{ + return libcrux_ml_kem_vector_portable_deserialize_11(a); +} + +KRML_MUSTINLINE uint8_t_x3 +libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_slice v) +{ + uint8_t r0 = libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *) & (int16_t)255); + uint8_t r1 = libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *) >> 8U | + (Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) & (int16_t)15) + << 4U); + uint8_t r2 = libcrux_secrets_int_as_u8_f5( + Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) >> 4U & + (int16_t)255); + return (KRML_CLITERAL(uint8_t_x3){ .fst = r0, .snd = r1, .thd = r2 }); } KRML_MUSTINLINE void @@ -2130,131 +1851,137 @@ libcrux_ml_kem_vector_portable_serialize_serialize_12( uint8_t ret[24U]) { uint8_t_x3 r0_2 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int( - Eurydice_array_to_subslice2(v.elements, (size_t)0U, (size_t)2U, int16_t)); + Eurydice_array_to_subslice3(v.elements, (size_t)0U, (size_t)2U, + int16_t *)); uint8_t_x3 r3_5 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int( - Eurydice_array_to_subslice2(v.elements, (size_t)2U, (size_t)4U, int16_t)); + Eurydice_array_to_subslice3(v.elements, (size_t)2U, (size_t)4U, + int16_t *)); uint8_t_x3 r6_8 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int( - Eurydice_array_to_subslice2(v.elements, (size_t)4U, (size_t)6U, int16_t)); + Eurydice_array_to_subslice3(v.elements, (size_t)4U, (size_t)6U, + int16_t *)); uint8_t_x3 r9_11 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int( - Eurydice_array_to_subslice2(v.elements, (size_t)6U, (size_t)8U, int16_t)); + Eurydice_array_to_subslice3(v.elements, (size_t)6U, (size_t)8U, + int16_t *)); uint8_t_x3 r12_14 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int( - Eurydice_array_to_subslice2(v.elements, (size_t)8U, (size_t)10U, - int16_t)); + Eurydice_array_to_subslice3(v.elements, (size_t)8U, (size_t)10U, + int16_t *)); uint8_t_x3 r15_17 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int( - Eurydice_array_to_subslice2(v.elements, (size_t)10U, (size_t)12U, - int16_t)); + Eurydice_array_to_subslice3(v.elements, (size_t)10U, (size_t)12U, + int16_t *)); uint8_t_x3 r18_20 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int( - Eurydice_array_to_subslice2(v.elements, (size_t)12U, (size_t)14U, - int16_t)); + Eurydice_array_to_subslice3(v.elements, (size_t)12U, (size_t)14U, + int16_t *)); uint8_t_x3 r21_23 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int( - Eurydice_array_to_subslice2(v.elements, (size_t)14U, (size_t)16U, - int16_t)); - uint8_t result[24U] = { 0U }; - result[0U] = r0_2.fst; - result[1U] = r0_2.snd; - result[2U] = r0_2.thd; - result[3U] = r3_5.fst; - result[4U] = r3_5.snd; - result[5U] = r3_5.thd; - result[6U] = r6_8.fst; - result[7U] = r6_8.snd; - result[8U] = r6_8.thd; - result[9U] = r9_11.fst; - result[10U] = r9_11.snd; - result[11U] = r9_11.thd; - result[12U] = r12_14.fst; - result[13U] = r12_14.snd; - result[14U] = r12_14.thd; - result[15U] = r15_17.fst; - result[16U] = r15_17.snd; - result[17U] = r15_17.thd; - result[18U] = r18_20.fst; - result[19U] = r18_20.snd; - result[20U] = r18_20.thd; - result[21U] = r21_23.fst; - result[22U] = r21_23.snd; - result[23U] = r21_23.thd; - memcpy(ret, result, (size_t)24U * sizeof(uint8_t)); -} - -/** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} + Eurydice_array_to_subslice3(v.elements, (size_t)14U, (size_t)16U, + int16_t *)); + ret[0U] = r0_2.fst; + ret[1U] = r0_2.snd; + ret[2U] = r0_2.thd; + ret[3U] = r3_5.fst; + ret[4U] = r3_5.snd; + ret[5U] = r3_5.thd; + ret[6U] = r6_8.fst; + ret[7U] = r6_8.snd; + ret[8U] = r6_8.thd; + ret[9U] = r9_11.fst; + ret[10U] = r9_11.snd; + ret[11U] = r9_11.thd; + ret[12U] = r12_14.fst; + ret[13U] = r12_14.snd; + ret[14U] = r12_14.thd; + ret[15U] = r15_17.fst; + ret[16U] = r15_17.snd; + ret[17U] = r15_17.thd; + ret[18U] = r18_20.fst; + ret[19U] = r18_20.snd; + ret[20U] = r18_20.thd; + ret[21U] = r21_23.fst; + ret[22U] = r21_23.snd; + ret[23U] = r21_23.thd; +} + +void +libcrux_ml_kem_vector_portable_serialize_12( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a, + uint8_t ret[24U]) +{ + uint8_t ret0[24U]; + libcrux_ml_kem_vector_portable_serialize_serialize_12(a, ret0); + libcrux_secrets_int_public_integers_declassify_d8_d2(ret0, ret); +} + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ void -libcrux_ml_kem_vector_portable_serialize_12_0d( +libcrux_ml_kem_vector_portable_serialize_12_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, uint8_t ret[24U]) { - libcrux_ml_kem_vector_portable_serialize_serialize_12(a, ret); + libcrux_ml_kem_vector_portable_serialize_12(a, ret); } KRML_MUSTINLINE int16_t_x2 libcrux_ml_kem_vector_portable_serialize_deserialize_12_int( Eurydice_slice bytes) { - int16_t byte0 = - (int16_t)Eurydice_slice_index(bytes, (size_t)0U, uint8_t, uint8_t *); - int16_t byte1 = - (int16_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *); - int16_t byte2 = - (int16_t)Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *); + int16_t byte0 = libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)0U, uint8_t, uint8_t *)); + int16_t byte1 = libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *)); + int16_t byte2 = libcrux_secrets_int_as_i16_59( + Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *)); int16_t r0 = (byte1 & (int16_t)15) << 8U | (byte0 & (int16_t)255); int16_t r1 = byte2 << 4U | (byte1 >> 4U & (int16_t)15); - return (CLITERAL(int16_t_x2){ .fst = r0, .snd = r1 }); + return (KRML_CLITERAL(int16_t_x2){ .fst = r0, .snd = r1 }); } KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_serialize_deserialize_12(Eurydice_slice bytes) { int16_t_x2 v0_1 = libcrux_ml_kem_vector_portable_serialize_deserialize_12_int( - Eurydice_slice_subslice2(bytes, (size_t)0U, (size_t)3U, uint8_t)); + Eurydice_slice_subslice3(bytes, (size_t)0U, (size_t)3U, uint8_t *)); int16_t_x2 v2_3 = libcrux_ml_kem_vector_portable_serialize_deserialize_12_int( - Eurydice_slice_subslice2(bytes, (size_t)3U, (size_t)6U, uint8_t)); + Eurydice_slice_subslice3(bytes, (size_t)3U, (size_t)6U, uint8_t *)); int16_t_x2 v4_5 = libcrux_ml_kem_vector_portable_serialize_deserialize_12_int( - Eurydice_slice_subslice2(bytes, (size_t)6U, (size_t)9U, uint8_t)); + Eurydice_slice_subslice3(bytes, (size_t)6U, (size_t)9U, uint8_t *)); int16_t_x2 v6_7 = libcrux_ml_kem_vector_portable_serialize_deserialize_12_int( - Eurydice_slice_subslice2(bytes, (size_t)9U, (size_t)12U, uint8_t)); + Eurydice_slice_subslice3(bytes, (size_t)9U, (size_t)12U, uint8_t *)); int16_t_x2 v8_9 = libcrux_ml_kem_vector_portable_serialize_deserialize_12_int( - Eurydice_slice_subslice2(bytes, (size_t)12U, (size_t)15U, uint8_t)); + Eurydice_slice_subslice3(bytes, (size_t)12U, (size_t)15U, uint8_t *)); int16_t_x2 v10_11 = libcrux_ml_kem_vector_portable_serialize_deserialize_12_int( - Eurydice_slice_subslice2(bytes, (size_t)15U, (size_t)18U, uint8_t)); + Eurydice_slice_subslice3(bytes, (size_t)15U, (size_t)18U, uint8_t *)); int16_t_x2 v12_13 = libcrux_ml_kem_vector_portable_serialize_deserialize_12_int( - Eurydice_slice_subslice2(bytes, (size_t)18U, (size_t)21U, uint8_t)); + Eurydice_slice_subslice3(bytes, (size_t)18U, (size_t)21U, uint8_t *)); int16_t_x2 v14_15 = libcrux_ml_kem_vector_portable_serialize_deserialize_12_int( - Eurydice_slice_subslice2(bytes, (size_t)21U, (size_t)24U, uint8_t)); - libcrux_ml_kem_vector_portable_vector_type_PortableVector re = - libcrux_ml_kem_vector_portable_vector_type_zero(); - re.elements[0U] = v0_1.fst; - re.elements[1U] = v0_1.snd; - re.elements[2U] = v2_3.fst; - re.elements[3U] = v2_3.snd; - re.elements[4U] = v4_5.fst; - re.elements[5U] = v4_5.snd; - re.elements[6U] = v6_7.fst; - re.elements[7U] = v6_7.snd; - re.elements[8U] = v8_9.fst; - re.elements[9U] = v8_9.snd; - re.elements[10U] = v10_11.fst; - re.elements[11U] = v10_11.snd; - re.elements[12U] = v12_13.fst; - re.elements[13U] = v12_13.snd; - re.elements[14U] = v14_15.fst; - re.elements[15U] = v14_15.snd; - return re; + Eurydice_slice_subslice3(bytes, (size_t)21U, (size_t)24U, uint8_t *)); + return ( + KRML_CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector){ + .elements = { v0_1.fst, v0_1.snd, v2_3.fst, v2_3.snd, v4_5.fst, + v4_5.snd, v6_7.fst, v6_7.snd, v8_9.fst, v8_9.snd, + v10_11.fst, v10_11.snd, v12_13.fst, v12_13.snd, + v14_15.fst, v14_15.snd } }); +} + +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_deserialize_12(Eurydice_slice a) +{ + return libcrux_ml_kem_vector_portable_serialize_deserialize_12( + libcrux_secrets_int_classify_public_classify_ref_9b_90(a)); } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_deserialize_12_0d(Eurydice_slice a) +libcrux_ml_kem_vector_portable_deserialize_12_b8(Eurydice_slice a) { - return libcrux_ml_kem_vector_portable_serialize_deserialize_12(a); + return libcrux_ml_kem_vector_portable_deserialize_12(a); } KRML_MUSTINLINE size_t @@ -2273,46 +2000,16 @@ libcrux_ml_kem_vector_portable_sampling_rej_sample( uint8_t, uint8_t *); int16_t d1 = (b2 & (int16_t)15) << 8U | b1; int16_t d2 = b3 << 4U | b2 >> 4U; - bool uu____0; - int16_t uu____1; - bool uu____2; - size_t uu____3; - int16_t uu____4; - size_t uu____5; - int16_t uu____6; if (d1 < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS) { if (sampled < (size_t)16U) { Eurydice_slice_index(result, sampled, int16_t, int16_t *) = d1; sampled++; - uu____1 = d2; - uu____6 = LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS; - uu____0 = uu____1 < uu____6; - if (uu____0) { - uu____3 = sampled; - uu____2 = uu____3 < (size_t)16U; - if (uu____2) { - uu____4 = d2; - uu____5 = sampled; - Eurydice_slice_index(result, uu____5, int16_t, int16_t *) = uu____4; - sampled++; - continue; - } - } - continue; } } - uu____1 = d2; - uu____6 = LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS; - uu____0 = uu____1 < uu____6; - if (uu____0) { - uu____3 = sampled; - uu____2 = uu____3 < (size_t)16U; - if (uu____2) { - uu____4 = d2; - uu____5 = sampled; - Eurydice_slice_index(result, uu____5, int16_t, int16_t *) = uu____4; + if (d2 < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS) { + if (sampled < (size_t)16U) { + Eurydice_slice_index(result, sampled, int16_t, int16_t *) = d2; sampled++; - continue; } } } @@ -2320,22 +2017,22 @@ libcrux_ml_kem_vector_portable_sampling_rej_sample( } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ size_t -libcrux_ml_kem_vector_portable_rej_sample_0d(Eurydice_slice a, +libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_slice a, Eurydice_slice out) { return libcrux_ml_kem_vector_portable_sampling_rej_sample(a, out); } /** -This function found in impl {(core::clone::Clone for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {core::clone::Clone for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ inline libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_vector_type_clone_3b( +libcrux_ml_kem_vector_portable_vector_type_clone_9c( libcrux_ml_kem_vector_portable_vector_type_PortableVector *self) { return self[0U]; @@ -2343,38 +2040,52 @@ libcrux_ml_kem_vector_portable_vector_type_clone_3b( /** This function found in impl -{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]} +{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]} */ /** -A monomorphic instance of libcrux_ml_kem.polynomial.ZERO_89 +A monomorphic instance of libcrux_ml_kem.polynomial.ZERO_d6 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ -static libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -ZERO_89_c3(void) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 lit; - lit.coefficients[0U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[1U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[2U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[3U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[4U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[5U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[6U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[7U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[8U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[9U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[10U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[11U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[12U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[13U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[14U] = libcrux_ml_kem_vector_portable_ZERO_0d(); - lit.coefficients[15U] = libcrux_ml_kem_vector_portable_ZERO_0d(); +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +ZERO_d6_ea(void) +{ + libcrux_ml_kem_polynomial_PolynomialRingElement_1d lit; + libcrux_ml_kem_vector_portable_vector_type_PortableVector + repeat_expression[16U]; + KRML_MAYBE_FOR16( + i, (size_t)0U, (size_t)16U, (size_t)1U, + repeat_expression[i] = libcrux_ml_kem_vector_portable_ZERO_b8();); + memcpy(lit.coefficients, repeat_expression, + (size_t)16U * + sizeof(libcrux_ml_kem_vector_portable_vector_type_PortableVector)); return lit; } /** +This function found in impl {core::ops::function::FnMut<(usize), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]> for +libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, +K>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of +libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b with +types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const +generics +- K= 4 +*/ +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_0b_d0( + void **_) +{ + return ZERO_d6_ea(); +} + +/** Only use with public values. This MUST NOT be used with secret inputs, like its caller @@ -2386,111 +2097,94 @@ libcrux_ml_kem.serialize.deserialize_to_reduced_ring_element with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -deserialize_to_reduced_ring_element_45(Eurydice_slice serialized) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +deserialize_to_reduced_ring_element_ea(Eurydice_slice serialized) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = ZERO_89_c3(); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re = ZERO_d6_ea(); for (size_t i = (size_t)0U; i < Eurydice_slice_len(serialized, uint8_t) / (size_t)24U; i++) { size_t i0 = i; - Eurydice_slice bytes = Eurydice_slice_subslice2( - serialized, i0 * (size_t)24U, i0 * (size_t)24U + (size_t)24U, uint8_t); + Eurydice_slice bytes = + Eurydice_slice_subslice3(serialized, i0 * (size_t)24U, + i0 * (size_t)24U + (size_t)24U, uint8_t *); libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient = - libcrux_ml_kem_vector_portable_deserialize_12_0d(bytes); + libcrux_ml_kem_vector_portable_deserialize_12_b8(bytes); libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_cond_subtract_3329_0d(coefficient); + libcrux_ml_kem_vector_portable_cond_subtract_3329_b8(coefficient); re.coefficients[i0] = uu____0; } return re; } /** - This function deserializes ring elements and reduces the result by the field - modulus. - - This function MUST NOT be used on secret inputs. + See [deserialize_ring_elements_reduced_out]. */ /** A monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- PUBLIC_KEY_SIZE= 1568 - K= 4 */ static KRML_MUSTINLINE void -deserialize_ring_elements_reduced_4f4( +deserialize_ring_elements_reduced_d0( Eurydice_slice public_key, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[4U]) + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *deserialized_pk) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 deserialized_pk[4U]; - KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, - deserialized_pk[i] = ZERO_89_c3();); for (size_t i = (size_t)0U; i < Eurydice_slice_len(public_key, uint8_t) / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT; i++) { size_t i0 = i; - Eurydice_slice ring_element = Eurydice_slice_subslice2( + Eurydice_slice ring_element = Eurydice_slice_subslice3( public_key, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT + LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - uint8_t); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____0 = - deserialize_to_reduced_ring_element_45(ring_element); + uint8_t *); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d uu____0 = + deserialize_to_reduced_ring_element_ea(ring_element); deserialized_pk[i0] = uu____0; } - memcpy( - ret, deserialized_pk, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); } /** -A monomorphic instance of libcrux_ml_kem.vector.portable.arithmetic.shift_right -with const generics -- SHIFT_BY= 15 -*/ -static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector -shift_right_b0(libcrux_ml_kem_vector_portable_vector_type_PortableVector v) -{ - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { - size_t i0 = i; - v.elements[i0] = v.elements[i0] >> (uint32_t)(int32_t)15; - } - return v; -} + This function deserializes ring elements and reduces the result by the field + modulus. -/** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} + This function MUST NOT be used on secret inputs. */ /** -A monomorphic instance of libcrux_ml_kem.vector.portable.shift_right_0d -with const generics -- SHIFT_BY= 15 +A monomorphic instance of +libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out with types +libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics +- K= 4 */ -static libcrux_ml_kem_vector_portable_vector_type_PortableVector -shift_right_0d_01(libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +static KRML_MUSTINLINE void +deserialize_ring_elements_reduced_out_d0( + Eurydice_slice public_key, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d ret[4U]) { - return shift_right_b0(v); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d deserialized_pk[4U]; + KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, + /* original Rust expression is not an lvalue in C */ + void *lvalue = (void *)0U; + deserialized_pk[i] = call_mut_0b_d0(&lvalue);); + deserialize_ring_elements_reduced_d0(public_key, deserialized_pk); + memcpy( + ret, deserialized_pk, + (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); } /** -A monomorphic instance of -libcrux_ml_kem.vector.traits.to_unsigned_representative with types -libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics +A monomorphic instance of libcrux_ml_kem.serialize.to_unsigned_field_modulus +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics */ -static libcrux_ml_kem_vector_portable_vector_type_PortableVector -to_unsigned_representative_84( +static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector +to_unsigned_field_modulus_ea( libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { - libcrux_ml_kem_vector_portable_vector_type_PortableVector t = - shift_right_0d_01(a); - libcrux_ml_kem_vector_portable_vector_type_PortableVector fm = - libcrux_ml_kem_vector_portable_bitwise_and_with_constant_0d( - t, LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS); - return libcrux_ml_kem_vector_portable_add_0d(a, &fm); + return libcrux_ml_kem_vector_portable_to_unsigned_representative_b8(a); } /** @@ -2500,21 +2194,20 @@ libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ static KRML_MUSTINLINE void -serialize_uncompressed_ring_element_3c( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re, uint8_t ret[384U]) +serialize_uncompressed_ring_element_ea( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re, uint8_t ret[384U]) { uint8_t serialized[384U] = { 0U }; - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) { + for (size_t i = (size_t)0U; i < VECTORS_IN_RING_ELEMENT; i++) { size_t i0 = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient = - to_unsigned_representative_84(re->coefficients[i0]); + to_unsigned_field_modulus_ea(re->coefficients[i0]); uint8_t bytes[24U]; - libcrux_ml_kem_vector_portable_serialize_12_0d(coefficient, bytes); - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( - serialized, (size_t)24U * i0, (size_t)24U * i0 + (size_t)24U, uint8_t); + libcrux_ml_kem_vector_portable_serialize_12_b8(coefficient, bytes); Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)24U, bytes, uint8_t), uint8_t); + Eurydice_array_to_subslice3(serialized, (size_t)24U * i0, + (size_t)24U * i0 + (size_t)24U, uint8_t *), + Eurydice_array_to_slice((size_t)24U, bytes, uint8_t), uint8_t); } memcpy(ret, serialized, (size_t)384U * sizeof(uint8_t)); } @@ -2523,37 +2216,63 @@ serialize_uncompressed_ring_element_3c( Call [`serialize_uncompressed_ring_element`] for each ring element. */ /** -A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_secret_key +A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - K= 4 -- OUT_LEN= 1536 */ static KRML_MUSTINLINE void -serialize_secret_key_a31( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *key, - uint8_t ret[1536U]) +serialize_vector_d0( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *key, + Eurydice_slice out) { - uint8_t out[1536U] = { 0U }; for (size_t i = (size_t)0U; i < Eurydice_slice_len( Eurydice_array_to_slice( (size_t)4U, key, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d), + libcrux_ml_kem_polynomial_PolynomialRingElement_1d); i++) { size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = key[i0]; - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re = key[i0]; + Eurydice_slice uu____0 = Eurydice_slice_subslice3( out, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - uint8_t); - uint8_t ret0[384U]; - serialize_uncompressed_ring_element_3c(&re, ret0); + uint8_t *); + uint8_t ret[384U]; + serialize_uncompressed_ring_element_ea(&re, ret); Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)384U, ret0, uint8_t), uint8_t); + uu____0, Eurydice_array_to_slice((size_t)384U, ret, uint8_t), uint8_t); } - memcpy(ret, out, (size_t)1536U * sizeof(uint8_t)); +} + +/** + Concatenate `t` and `ρ` into the public key. +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- K= 4 +- PUBLIC_KEY_SIZE= 1568 +*/ +static KRML_MUSTINLINE void +serialize_public_key_mut_ff( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *t_as_ntt, + Eurydice_slice seed_for_a, uint8_t *serialized) +{ + serialize_vector_d0( + t_as_ntt, + Eurydice_array_to_subslice3( + serialized, (size_t)0U, + libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U), + uint8_t *)); + Eurydice_slice_copy( + Eurydice_array_to_subslice_from( + (size_t)1568U, serialized, + libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U), + uint8_t, size_t, uint8_t[]), + seed_for_a, uint8_t); } /** @@ -2564,25 +2283,15 @@ A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - K= 4 -- RANKED_BYTES_PER_RING_ELEMENT= 1536 - PUBLIC_KEY_SIZE= 1568 */ static KRML_MUSTINLINE void -serialize_public_key_671( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *t_as_ntt, +serialize_public_key_ff( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *t_as_ntt, Eurydice_slice seed_for_a, uint8_t ret[1568U]) { uint8_t public_key_serialized[1568U] = { 0U }; - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( - public_key_serialized, (size_t)0U, (size_t)1536U, uint8_t); - uint8_t ret0[1536U]; - serialize_secret_key_a31(t_as_ntt, ret0); - Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)1536U, ret0, uint8_t), uint8_t); - Eurydice_slice_copy( - Eurydice_array_to_subslice_from((size_t)1568U, public_key_serialized, - (size_t)1536U, uint8_t, size_t), - seed_for_a, uint8_t); + serialize_public_key_mut_ff(t_as_ntt, seed_for_a, public_key_serialized); memcpy(ret, public_key_serialized, (size_t)1568U * sizeof(uint8_t)); } @@ -2598,39 +2307,42 @@ A monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - K= 4 -- RANKED_BYTES_PER_RING_ELEMENT= 1536 - PUBLIC_KEY_SIZE= 1568 */ bool -libcrux_ml_kem_ind_cca_validate_public_key_b71(uint8_t *public_key) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 deserialized_pk[4U]; - deserialize_ring_elements_reduced_4f4( - Eurydice_array_to_subslice_to((size_t)1568U, public_key, (size_t)1536U, - uint8_t, size_t), +libcrux_ml_kem_ind_cca_validate_public_key_ff(uint8_t *public_key) +{ + libcrux_ml_kem_polynomial_PolynomialRingElement_1d deserialized_pk[4U]; + deserialize_ring_elements_reduced_out_d0( + Eurydice_array_to_subslice_to( + (size_t)1568U, public_key, + libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U), + uint8_t, size_t, uint8_t[]), deserialized_pk); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *uu____0 = deserialized_pk; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *uu____0 = deserialized_pk; uint8_t public_key_serialized[1568U]; - serialize_public_key_671( + serialize_public_key_ff( uu____0, - Eurydice_array_to_subslice_from((size_t)1568U, public_key, (size_t)1536U, - uint8_t, size_t), + Eurydice_array_to_subslice_from( + (size_t)1568U, public_key, + libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U), + uint8_t, size_t, uint8_t[]), public_key_serialized); - return core_array_equality___core__cmp__PartialEq__Array_U__N___for__Array_T__N____eq( - (size_t)1568U, public_key, public_key_serialized, uint8_t, uint8_t, bool); + return Eurydice_array_eq((size_t)1568U, public_key, public_key_serialized, + uint8_t); } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.H_f1 +A monomorphic instance of libcrux_ml_kem.hash_functions.portable.H_4a with const generics - K= 4 */ -static KRML_MUSTINLINE void -H_f1_191(Eurydice_slice input, uint8_t ret[32U]) +static inline void +H_4a_ac(Eurydice_slice input, uint8_t ret[32U]) { libcrux_ml_kem_hash_functions_portable_H(input, ret); } @@ -2639,155 +2351,238 @@ H_f1_191(Eurydice_slice input, uint8_t ret[32U]) Validate an ML-KEM private key. This implements the Hash check in 7.3 3. - Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE` - and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types. */ /** -A monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key +A monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] with const generics - K= 4 - SECRET_KEY_SIZE= 3168 -- CIPHERTEXT_SIZE= 1568 */ bool -libcrux_ml_kem_ind_cca_validate_private_key_dc( - libcrux_ml_kem_types_MlKemPrivateKey_95 *private_key, - libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext *_ciphertext) +libcrux_ml_kem_ind_cca_validate_private_key_only_60( + libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key) { uint8_t t[32U]; - H_f1_191(Eurydice_array_to_subslice2( - private_key->value, (size_t)384U * (size_t)4U, - (size_t)768U * (size_t)4U + (size_t)32U, uint8_t), - t); - Eurydice_slice expected = Eurydice_array_to_subslice2( + H_4a_ac(Eurydice_array_to_subslice3( + private_key->value, (size_t)384U * (size_t)4U, + (size_t)768U * (size_t)4U + (size_t)32U, uint8_t *), + t); + Eurydice_slice expected = Eurydice_array_to_subslice3( private_key->value, (size_t)768U * (size_t)4U + (size_t)32U, - (size_t)768U * (size_t)4U + (size_t)64U, uint8_t); - return core_array_equality___core__cmp__PartialEq__0___Slice_U____for__Array_T__N___3__eq( - (size_t)32U, t, &expected, uint8_t, uint8_t, bool); + (size_t)768U * (size_t)4U + (size_t)64U, uint8_t *); + return Eurydice_array_eq_slice((size_t)32U, t, &expected, uint8_t, bool); } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} + Validate an ML-KEM private key. + + This implements the Hash check in 7.3 3. + Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE` + and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types. */ /** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.G_f1 +A monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key +with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] with const generics - K= 4 +- SECRET_KEY_SIZE= 3168 +- CIPHERTEXT_SIZE= 1568 */ -static KRML_MUSTINLINE void -G_f1_381(Eurydice_slice input, uint8_t ret[64U]) +bool +libcrux_ml_kem_ind_cca_validate_private_key_b5( + libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key, + libcrux_ml_kem_types_MlKemCiphertext_64 *_ciphertext) { - libcrux_ml_kem_hash_functions_portable_G(input, ret); + return libcrux_ml_kem_ind_cca_validate_private_key_only_60(private_key); } /** -This function found in impl {(libcrux_ml_kem::variant::Variant for -libcrux_ml_kem::variant::MlKem)} +A monomorphic instance of +libcrux_ml_kem.ind_cpa.unpacked.IndCpaPrivateKeyUnpacked with types +libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics +- $4size_t */ +typedef struct IndCpaPrivateKeyUnpacked_af_s { + libcrux_ml_kem_polynomial_PolynomialRingElement_1d secret_as_ntt[4U]; +} IndCpaPrivateKeyUnpacked_af; + /** -A monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_d8 -with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] -with const generics -- K= 4 +This function found in impl {core::default::Default for +libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, +K>[TraitClause@0, TraitClause@1]} */ -static KRML_MUSTINLINE void -cpa_keygen_seed_d8_72( - Eurydice_slice key_generation_seed, uint8_t ret[64U]) -{ - uint8_t seed[33U] = { 0U }; - Eurydice_slice_copy( - Eurydice_array_to_subslice2( - seed, (size_t)0U, - LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t), - key_generation_seed, uint8_t); - seed[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = - (uint8_t)(size_t)4U; - uint8_t ret0[64U]; - G_f1_381(Eurydice_array_to_slice((size_t)33U, seed, uint8_t), ret0); - memcpy(ret, ret0, (size_t)64U * sizeof(uint8_t)); -} - /** -A monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A.closure -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] with const -generics +A monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics - K= 4 */ -static void -closure_fc1( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[4U]) +static IndCpaPrivateKeyUnpacked_af +default_70_d0(void) { + IndCpaPrivateKeyUnpacked_af lit; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d repeat_expression[4U]; KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, - ret[i] = ZERO_89_c3();); + repeat_expression[i] = ZERO_d6_ea();); + memcpy( + lit.secret_as_ntt, repeat_expression, + (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); + return lit; } /** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PortableHash -with const generics +A monomorphic instance of +libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked with types +libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - $4size_t */ -typedef struct PortableHash_d1_s { - libcrux_sha3_generic_keccak_KeccakState_48 shake128_state[4U]; -} PortableHash_d1; +typedef struct IndCpaPublicKeyUnpacked_af_s { + libcrux_ml_kem_polynomial_PolynomialRingElement_1d t_as_ntt[4U]; + uint8_t seed_for_A[32U]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d A[4U][4U]; +} IndCpaPublicKeyUnpacked_af; /** -A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_init_absorb with const generics +This function found in impl {core::default::Default for +libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, +K>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics - K= 4 */ -static KRML_MUSTINLINE PortableHash_d1 -shake128_init_absorb_791(uint8_t input[4U][34U]) +static IndCpaPublicKeyUnpacked_af +default_8b_d0(void) { - libcrux_sha3_generic_keccak_KeccakState_48 shake128_state[4U]; - KRML_MAYBE_FOR4( - i, (size_t)0U, (size_t)4U, (size_t)1U, - shake128_state[i] = libcrux_sha3_portable_incremental_shake128_init();); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d uu____0[4U]; + KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, + uu____0[i] = ZERO_d6_ea();); + uint8_t uu____1[32U] = { 0U }; + IndCpaPublicKeyUnpacked_af lit; + memcpy( + lit.t_as_ntt, uu____0, + (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); + memcpy(lit.seed_for_A, uu____1, (size_t)32U * sizeof(uint8_t)); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d repeat_expression0[4U][4U]; KRML_MAYBE_FOR4( - i, (size_t)0U, (size_t)4U, (size_t)1U, size_t i0 = i; - libcrux_sha3_portable_incremental_shake128_absorb_final( - &shake128_state[i0], - Eurydice_array_to_slice((size_t)34U, input[i0], uint8_t));); - /* Passing arrays by value in Rust generates a copy in C */ - libcrux_sha3_generic_keccak_KeccakState_48 copy_of_shake128_state[4U]; - memcpy(copy_of_shake128_state, shake128_state, - (size_t)4U * sizeof(libcrux_sha3_generic_keccak_KeccakState_48)); - PortableHash_d1 lit; - memcpy(lit.shake128_state, copy_of_shake128_state, - (size_t)4U * sizeof(libcrux_sha3_generic_keccak_KeccakState_48)); + i0, (size_t)0U, (size_t)4U, (size_t)1U, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d repeat_expression[4U]; + KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, + repeat_expression[i] = ZERO_d6_ea();); + memcpy(repeat_expression0[i0], repeat_expression, + (size_t)4U * + sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d));); + memcpy(lit.A, repeat_expression0, + (size_t)4U * + sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d[4U])); return lit; } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** -A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_f1 with const -generics +A monomorphic instance of libcrux_ml_kem.hash_functions.portable.G_4a +with const generics - K= 4 */ -static KRML_MUSTINLINE PortableHash_d1 -shake128_init_absorb_f1_771(uint8_t input[4U][34U]) +static inline void +G_4a_ac(Eurydice_slice input, uint8_t ret[64U]) { - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_input[4U][34U]; - memcpy(copy_of_input, input, (size_t)4U * sizeof(uint8_t[34U])); - return shake128_init_absorb_791(copy_of_input); + libcrux_ml_kem_hash_functions_portable_G(input, ret); } /** -A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_squeeze_three_blocks with const -generics -- K= 4 +This function found in impl {libcrux_ml_kem::variant::Variant for +libcrux_ml_kem::variant::MlKem} */ -static KRML_MUSTINLINE void -shake128_squeeze_three_blocks_eb1( - PortableHash_d1 *st, uint8_t ret[4U][504U]) +/** +A monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39 +with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] +with const generics +- K= 4 +*/ +static KRML_MUSTINLINE void +cpa_keygen_seed_39_03( + Eurydice_slice key_generation_seed, uint8_t ret[64U]) +{ + uint8_t seed[33U] = { 0U }; + Eurydice_slice_copy( + Eurydice_array_to_subslice3( + seed, (size_t)0U, + LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t *), + key_generation_seed, uint8_t); + seed[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = + (uint8_t)(size_t)4U; + uint8_t ret0[64U]; + G_4a_ac(Eurydice_array_to_slice((size_t)33U, seed, uint8_t), ret0); + memcpy(ret, ret0, (size_t)64U * sizeof(uint8_t)); +} + +/** +A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PortableHash +with const generics +- $4size_t +*/ +typedef struct PortableHash_44_s { + libcrux_sha3_generic_keccak_KeccakState_17 shake128_state[4U]; +} PortableHash_44; + +/** +A monomorphic instance of +libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final with const +generics +- K= 4 +*/ +static inline PortableHash_44 +shake128_init_absorb_final_ac( + uint8_t (*input)[34U]) +{ + PortableHash_44 shake128_state; + libcrux_sha3_generic_keccak_KeccakState_17 repeat_expression[4U]; + KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, + repeat_expression[i] = + libcrux_sha3_portable_incremental_shake128_init();); + memcpy(shake128_state.shake128_state, repeat_expression, + (size_t)4U * sizeof(libcrux_sha3_generic_keccak_KeccakState_17)); + KRML_MAYBE_FOR4( + i, (size_t)0U, (size_t)4U, (size_t)1U, size_t i0 = i; + libcrux_sha3_portable_incremental_shake128_absorb_final( + &shake128_state.shake128_state[i0], + Eurydice_array_to_slice((size_t)34U, input[i0], uint8_t));); + return shake128_state; +} + +/** +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} +*/ +/** +A monomorphic instance of +libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a with const +generics +- K= 4 +*/ +static inline PortableHash_44 +shake128_init_absorb_final_4a_ac( + uint8_t (*input)[34U]) +{ + return shake128_init_absorb_final_ac(input); +} + +/** +A monomorphic instance of +libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks with +const generics +- K= 4 +*/ +static inline void +shake128_squeeze_first_three_blocks_ac( + PortableHash_44 *st, uint8_t ret[4U][504U]) { uint8_t out[4U][504U] = { { 0U } }; KRML_MAYBE_FOR4( @@ -2799,20 +2594,20 @@ shake128_squeeze_three_blocks_eb1( } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_squeeze_three_blocks_f1 with -const generics +libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a +with const generics - K= 4 */ -static KRML_MUSTINLINE void -shake128_squeeze_three_blocks_f1_841( - PortableHash_d1 *self, uint8_t ret[4U][504U]) +static inline void +shake128_squeeze_first_three_blocks_4a_ac( + PortableHash_44 *self, uint8_t ret[4U][504U]) { - shake128_squeeze_three_blocks_eb1(self, ret); + shake128_squeeze_first_three_blocks_ac(self, ret); } /** @@ -2864,8 +2659,8 @@ libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - N= 504 */ static KRML_MUSTINLINE bool -sample_from_uniform_distribution_next_173( - uint8_t randomness[4U][504U], size_t *sampled_coefficients, +sample_from_uniform_distribution_next_ff( + uint8_t (*randomness)[504U], size_t *sampled_coefficients, int16_t (*out)[272U]) { KRML_MAYBE_FOR4( @@ -2874,16 +2669,16 @@ sample_from_uniform_distribution_next_173( size_t r = i; if (sampled_coefficients[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT) { - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( - randomness[i1], r * (size_t)24U, r * (size_t)24U + (size_t)24U, - uint8_t); - size_t sampled = libcrux_ml_kem_vector_portable_rej_sample_0d( - uu____0, Eurydice_array_to_subslice2( - out[i1], sampled_coefficients[i1], - sampled_coefficients[i1] + (size_t)16U, int16_t)); - size_t uu____1 = i1; - sampled_coefficients[uu____1] = - sampled_coefficients[uu____1] + sampled; + size_t sampled = libcrux_ml_kem_vector_portable_rej_sample_b8( + Eurydice_array_to_subslice3(randomness[i1], r * (size_t)24U, + r * (size_t)24U + (size_t)24U, + uint8_t *), + Eurydice_array_to_subslice3( + out[i1], sampled_coefficients[i1], + sampled_coefficients[i1] + (size_t)16U, int16_t *)); + size_t uu____0 = i1; + sampled_coefficients[uu____0] = + sampled_coefficients[uu____0] + sampled; } }); bool done = true; @@ -2899,13 +2694,13 @@ sample_from_uniform_distribution_next_173( /** A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_squeeze_block with const +libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block with const generics - K= 4 */ -static KRML_MUSTINLINE void -shake128_squeeze_block_3b1(PortableHash_d1 *st, - uint8_t ret[4U][168U]) +static inline void +shake128_squeeze_next_block_ac(PortableHash_44 *st, + uint8_t ret[4U][168U]) { uint8_t out[4U][168U] = { { 0U } }; KRML_MAYBE_FOR4( @@ -2917,20 +2712,20 @@ shake128_squeeze_block_3b1(PortableHash_d1 *st, } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_squeeze_block_f1 with const +libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a with const generics - K= 4 */ -static KRML_MUSTINLINE void -shake128_squeeze_block_f1_8e1( - PortableHash_d1 *self, uint8_t ret[4U][168U]) +static inline void +shake128_squeeze_next_block_4a_ac(PortableHash_44 *self, + uint8_t ret[4U][168U]) { - shake128_squeeze_block_3b1(self, ret); + shake128_squeeze_next_block_ac(self, ret); } /** @@ -2982,8 +2777,8 @@ libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - N= 168 */ static KRML_MUSTINLINE bool -sample_from_uniform_distribution_next_174( - uint8_t randomness[4U][168U], size_t *sampled_coefficients, +sample_from_uniform_distribution_next_ff0( + uint8_t (*randomness)[168U], size_t *sampled_coefficients, int16_t (*out)[272U]) { KRML_MAYBE_FOR4( @@ -2992,16 +2787,16 @@ sample_from_uniform_distribution_next_174( size_t r = i; if (sampled_coefficients[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT) { - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( - randomness[i1], r * (size_t)24U, r * (size_t)24U + (size_t)24U, - uint8_t); - size_t sampled = libcrux_ml_kem_vector_portable_rej_sample_0d( - uu____0, Eurydice_array_to_subslice2( - out[i1], sampled_coefficients[i1], - sampled_coefficients[i1] + (size_t)16U, int16_t)); - size_t uu____1 = i1; - sampled_coefficients[uu____1] = - sampled_coefficients[uu____1] + sampled; + size_t sampled = libcrux_ml_kem_vector_portable_rej_sample_b8( + Eurydice_array_to_subslice3(randomness[i1], r * (size_t)24U, + r * (size_t)24U + (size_t)24U, + uint8_t *), + Eurydice_array_to_subslice3( + out[i1], sampled_coefficients[i1], + sampled_coefficients[i1] + (size_t)16U, int16_t *)); + size_t uu____0 = i1; + sampled_coefficients[uu____0] = + sampled_coefficients[uu____0] + sampled; } }); bool done = true; @@ -3016,44 +2811,86 @@ sample_from_uniform_distribution_next_174( } /** -This function found in impl -{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]} +A monomorphic instance of libcrux_ml_kem.polynomial.ZERO +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics + */ +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +ZERO_ea(void) +{ + libcrux_ml_kem_polynomial_PolynomialRingElement_1d lit; + libcrux_ml_kem_vector_portable_vector_type_PortableVector + repeat_expression[16U]; + KRML_MAYBE_FOR16( + i, (size_t)0U, (size_t)16U, (size_t)1U, + repeat_expression[i] = libcrux_ml_kem_vector_portable_ZERO_b8();); + memcpy(lit.coefficients, repeat_expression, + (size_t)16U * + sizeof(libcrux_ml_kem_vector_portable_vector_type_PortableVector)); + return lit; +} + /** -A monomorphic instance of libcrux_ml_kem.polynomial.from_i16_array_89 +A monomorphic instance of libcrux_ml_kem.polynomial.from_i16_array with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -from_i16_array_89_33(Eurydice_slice a) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +from_i16_array_ea(Eurydice_slice a) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result = ZERO_89_c3(); - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) { + libcrux_ml_kem_polynomial_PolynomialRingElement_1d result = ZERO_ea(); + for (size_t i = (size_t)0U; i < VECTORS_IN_RING_ELEMENT; i++) { size_t i0 = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_from_i16_array_0d( - Eurydice_slice_subslice2(a, i0 * (size_t)16U, - (i0 + (size_t)1U) * (size_t)16U, int16_t)); + libcrux_ml_kem_vector_portable_from_i16_array_b8( + Eurydice_slice_subslice3(a, i0 * (size_t)16U, + (i0 + (size_t)1U) * (size_t)16U, + int16_t *)); result.coefficients[i0] = uu____0; } return result; } /** -A monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.closure +This function found in impl +{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.polynomial.from_i16_array_d6 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics + +*/ +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +from_i16_array_d6_ea(Eurydice_slice a) +{ + return from_i16_array_ea(a); +} + +/** +This function found in impl {core::ops::function::FnMut<(@Array<i16, 272usize>), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, +Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_e7 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] with const generics - K= 4 */ -static libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -closure_e41( - int16_t s[272U]) +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_e7_2b( + int16_t tupled_args[272U]) { - return from_i16_array_89_33( - Eurydice_array_to_subslice2(s, (size_t)0U, (size_t)256U, int16_t)); + int16_t s[272U]; + memcpy(s, tupled_args, (size_t)272U * sizeof(int16_t)); + return from_i16_array_d6_ea( + Eurydice_array_to_subslice3(s, (size_t)0U, (size_t)256U, int16_t *)); } /** @@ -3064,46 +2901,36 @@ generics - K= 4 */ static KRML_MUSTINLINE void -sample_from_xof_461( - uint8_t seeds[4U][34U], - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[4U]) +sample_from_xof_2b( + uint8_t (*seeds)[34U], + libcrux_ml_kem_polynomial_PolynomialRingElement_1d ret[4U]) { size_t sampled_coefficients[4U] = { 0U }; int16_t out[4U][272U] = { { 0U } }; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_seeds[4U][34U]; - memcpy(copy_of_seeds, seeds, (size_t)4U * sizeof(uint8_t[34U])); - PortableHash_d1 xof_state = shake128_init_absorb_f1_771(copy_of_seeds); + PortableHash_44 xof_state = shake128_init_absorb_final_4a_ac(seeds); uint8_t randomness0[4U][504U]; - shake128_squeeze_three_blocks_f1_841(&xof_state, randomness0); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_randomness0[4U][504U]; - memcpy(copy_of_randomness0, randomness0, (size_t)4U * sizeof(uint8_t[504U])); - bool done = sample_from_uniform_distribution_next_173( - copy_of_randomness0, sampled_coefficients, out); + shake128_squeeze_first_three_blocks_4a_ac(&xof_state, randomness0); + bool done = sample_from_uniform_distribution_next_ff( + randomness0, sampled_coefficients, out); while (true) { if (done) { break; } else { uint8_t randomness[4U][168U]; - shake128_squeeze_block_f1_8e1(&xof_state, randomness); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_randomness[4U][168U]; - memcpy(copy_of_randomness, randomness, - (size_t)4U * sizeof(uint8_t[168U])); - done = sample_from_uniform_distribution_next_174( - copy_of_randomness, sampled_coefficients, out); + shake128_squeeze_next_block_4a_ac(&xof_state, randomness); + done = sample_from_uniform_distribution_next_ff0( + randomness, sampled_coefficients, out); } } /* Passing arrays by value in Rust generates a copy in C */ int16_t copy_of_out[4U][272U]; memcpy(copy_of_out, out, (size_t)4U * sizeof(int16_t[272U])); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret0[4U]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d ret0[4U]; KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, - ret0[i] = closure_e41(copy_of_out[i]);); + ret0[i] = call_mut_e7_2b(copy_of_out[i]);); memcpy( ret, ret0, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); + (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); } /** @@ -3114,70 +2941,45 @@ generics - K= 4 */ static KRML_MUSTINLINE void -sample_matrix_A_e71( - uint8_t seed[34U], bool transpose, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[4U][4U]) +sample_matrix_A_2b( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d (*A_transpose)[4U], + uint8_t *seed, bool transpose) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 A_transpose[4U][4U]; - KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, - closure_fc1(A_transpose[i]);); KRML_MAYBE_FOR4( i0, (size_t)0U, (size_t)4U, (size_t)1U, size_t i1 = i0; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_seed[34U]; - memcpy(copy_of_seed, seed, (size_t)34U * sizeof(uint8_t)); - uint8_t seeds[4U][34U]; KRML_MAYBE_FOR4( - i, (size_t)0U, (size_t)4U, (size_t)1U, - memcpy(seeds[i], copy_of_seed, (size_t)34U * sizeof(uint8_t));); + uint8_t seeds[4U][34U]; + KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, + core_array__core__clone__Clone_for__Array_T__N___clone( + (size_t)34U, seed, seeds[i], uint8_t, void *);); KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, size_t j = i; seeds[j][32U] = (uint8_t)i1; seeds[j][33U] = (uint8_t)j;); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_seeds[4U][34U]; - memcpy(copy_of_seeds, seeds, (size_t)4U * sizeof(uint8_t[34U])); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 sampled[4U]; - sample_from_xof_461(copy_of_seeds, sampled); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d sampled[4U]; + sample_from_xof_2b(seeds, sampled); for (size_t i = (size_t)0U; i < Eurydice_slice_len( Eurydice_array_to_slice( (size_t)4U, sampled, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d), + libcrux_ml_kem_polynomial_PolynomialRingElement_1d); i++) { size_t j = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 sample = sampled[j]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d sample = sampled[j]; if (transpose) { A_transpose[j][i1] = sample; } else { A_transpose[i1][j] = sample; } - } - - ); - memcpy(ret, A_transpose, - (size_t)4U * - sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0[4U])); + }); } /** -A monomorphic instance of K. -with types libcrux_ml_kem_polynomial_PolynomialRingElement -libcrux_ml_kem_vector_portable_vector_type_PortableVector[4size_t], uint8_t - -*/ -typedef struct tuple_710_s { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 fst[4U]; - uint8_t snd; -} tuple_710; - -/** A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN with const generics - K= 4 - LEN= 128 */ -static KRML_MUSTINLINE void -PRFxN_1c2(uint8_t (*input)[33U], - uint8_t ret[4U][128U]) +static inline void +PRFxN_44(uint8_t (*input)[33U], uint8_t ret[4U][128U]) { uint8_t out[4U][128U] = { { 0U } }; KRML_MAYBE_FOR4( @@ -3189,20 +2991,19 @@ PRFxN_1c2(uint8_t (*input)[33U], } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_f1 +A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_4a with const generics - K= 4 - LEN= 128 */ -static KRML_MUSTINLINE void -PRFxN_f1_d52(uint8_t (*input)[33U], - uint8_t ret[4U][128U]) +static inline void +PRFxN_4a_44(uint8_t (*input)[33U], uint8_t ret[4U][128U]) { - PRFxN_1c2(input, ret); + PRFxN_44(input, ret); } /** @@ -3260,16 +3061,16 @@ libcrux_ml_kem.sampling.sample_from_binomial_distribution_2 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -sample_from_binomial_distribution_2_7b(Eurydice_slice randomness) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +sample_from_binomial_distribution_2_ea(Eurydice_slice randomness) { int16_t sampled_i16s[256U] = { 0U }; for (size_t i0 = (size_t)0U; i0 < Eurydice_slice_len(randomness, uint8_t) / (size_t)4U; i0++) { size_t chunk_number = i0; - Eurydice_slice byte_chunk = Eurydice_slice_subslice2( + Eurydice_slice byte_chunk = Eurydice_slice_subslice3( randomness, chunk_number * (size_t)4U, - chunk_number * (size_t)4U + (size_t)4U, uint8_t); + chunk_number * (size_t)4U + (size_t)4U, uint8_t *); uint32_t random_bits_as_u32 = (((uint32_t)Eurydice_slice_index(byte_chunk, (size_t)0U, uint8_t, uint8_t *) | @@ -3285,7 +3086,7 @@ sample_from_binomial_distribution_2_7b(Eurydice_slice randomness) uint32_t even_bits = random_bits_as_u32 & 1431655765U; uint32_t odd_bits = random_bits_as_u32 >> 1U & 1431655765U; uint32_t coin_toss_outcomes = even_bits + odd_bits; - for (uint32_t i = 0U; i < CORE_NUM__U32_8__BITS / 4U; i++) { + for (uint32_t i = 0U; i < 32U / 4U; i++) { uint32_t outcome_set = i; uint32_t outcome_set0 = outcome_set * 4U; int16_t outcome_1 = @@ -3296,52 +3097,7 @@ sample_from_binomial_distribution_2_7b(Eurydice_slice randomness) sampled_i16s[(size_t)8U * chunk_number + offset] = outcome_1 - outcome_2; } } - return from_i16_array_89_33( - Eurydice_array_to_slice((size_t)256U, sampled_i16s, int16_t)); -} - -/** -A monomorphic instance of -libcrux_ml_kem.sampling.sample_from_binomial_distribution_3 with types -libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - -*/ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -sample_from_binomial_distribution_3_14(Eurydice_slice randomness) -{ - int16_t sampled_i16s[256U] = { 0U }; - for (size_t i0 = (size_t)0U; - i0 < Eurydice_slice_len(randomness, uint8_t) / (size_t)3U; i0++) { - size_t chunk_number = i0; - Eurydice_slice byte_chunk = Eurydice_slice_subslice2( - randomness, chunk_number * (size_t)3U, - chunk_number * (size_t)3U + (size_t)3U, uint8_t); - uint32_t random_bits_as_u24 = - ((uint32_t)Eurydice_slice_index(byte_chunk, (size_t)0U, uint8_t, - uint8_t *) | - (uint32_t)Eurydice_slice_index(byte_chunk, (size_t)1U, uint8_t, - uint8_t *) - << 8U) | - (uint32_t)Eurydice_slice_index(byte_chunk, (size_t)2U, uint8_t, - uint8_t *) - << 16U; - uint32_t first_bits = random_bits_as_u24 & 2396745U; - uint32_t second_bits = random_bits_as_u24 >> 1U & 2396745U; - uint32_t third_bits = random_bits_as_u24 >> 2U & 2396745U; - uint32_t coin_toss_outcomes = first_bits + second_bits + third_bits; - for (int32_t i = (int32_t)0; i < (int32_t)24 / (int32_t)6; i++) { - int32_t outcome_set = i; - int32_t outcome_set0 = outcome_set * (int32_t)6; - int16_t outcome_1 = - (int16_t)(coin_toss_outcomes >> (uint32_t)outcome_set0 & 7U); - int16_t outcome_2 = (int16_t)(coin_toss_outcomes >> - (uint32_t)(outcome_set0 + (int32_t)3) & - 7U); - size_t offset = (size_t)(outcome_set0 / (int32_t)6); - sampled_i16s[(size_t)4U * chunk_number + offset] = outcome_1 - outcome_2; - } - } - return from_i16_array_89_33( + return from_i16_array_d6_ea( Eurydice_array_to_slice((size_t)256U, sampled_i16s, int16_t)); } @@ -3351,10 +3107,10 @@ libcrux_ml_kem.sampling.sample_from_binomial_distribution with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - ETA= 2 */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -sample_from_binomial_distribution_ca(Eurydice_slice randomness) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +sample_from_binomial_distribution_a0(Eurydice_slice randomness) { - return sample_from_binomial_distribution_2_7b(randomness); + return sample_from_binomial_distribution_2_ea(randomness); } /** @@ -3364,19 +3120,19 @@ with const generics */ static KRML_MUSTINLINE void -ntt_at_layer_7_60( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) +ntt_at_layer_7_ea( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re) { - size_t step = LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT / (size_t)2U; + size_t step = VECTORS_IN_RING_ELEMENT / (size_t)2U; for (size_t i = (size_t)0U; i < step; i++) { size_t j = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector t = - libcrux_ml_kem_vector_portable_multiply_by_constant_0d( + libcrux_ml_kem_vector_portable_multiply_by_constant_b8( re->coefficients[j + step], (int16_t)-1600); re->coefficients[j + step] = - libcrux_ml_kem_vector_portable_sub_0d(re->coefficients[j], &t); + libcrux_ml_kem_vector_portable_sub_b8(re->coefficients[j], &t); libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____1 = - libcrux_ml_kem_vector_portable_add_0d(re->coefficients[j], &t); + libcrux_ml_kem_vector_portable_add_b8(re->coefficients[j], &t); re->coefficients[j] = uu____1; } } @@ -3387,20 +3143,6 @@ typedef struct libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2_s { } libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2; /** -A monomorphic instance of libcrux_ml_kem.vector.traits.montgomery_multiply_fe -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics - -*/ -static libcrux_ml_kem_vector_portable_vector_type_PortableVector -montgomery_multiply_fe_05( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t fer) -{ - return libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_0d(v, - fer); -} - -/** A monomorphic instance of libcrux_ml_kem.ntt.ntt_layer_int_vec_step with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics @@ -3408,18 +3150,19 @@ with const generics */ static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2 - ntt_layer_int_vec_step_88( + ntt_layer_int_vec_step_ea( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, libcrux_ml_kem_vector_portable_vector_type_PortableVector b, int16_t zeta_r) { libcrux_ml_kem_vector_portable_vector_type_PortableVector t = - montgomery_multiply_fe_05(b, zeta_r); - b = libcrux_ml_kem_vector_portable_sub_0d(a, &t); - a = libcrux_ml_kem_vector_portable_add_0d(a, &t); - return ( - CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2){ - .fst = a, .snd = b }); + libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(b, + zeta_r); + b = libcrux_ml_kem_vector_portable_sub_b8(a, &t); + a = libcrux_ml_kem_vector_portable_add_b8(a, &t); + return (KRML_CLITERAL( + libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2){ .fst = a, + .snd = b }); } /** @@ -3429,8 +3172,8 @@ with const generics */ static KRML_MUSTINLINE void -ntt_at_layer_4_plus_8c( - size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re, +ntt_at_layer_4_plus_ea( + size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re, size_t layer) { size_t step = (size_t)1U << (uint32_t)layer; @@ -3443,9 +3186,9 @@ ntt_at_layer_4_plus_8c( for (size_t i = offset_vec; i < offset_vec + step_vec; i++) { size_t j = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2 uu____0 = - ntt_layer_int_vec_step_88( - re->coefficients[j], re->coefficients[j + step_vec], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]]); + ntt_layer_int_vec_step_ea(re->coefficients[j], + re->coefficients[j + step_vec], + zeta(zeta_i[0U])); libcrux_ml_kem_vector_portable_vector_type_PortableVector x = uu____0.fst; libcrux_ml_kem_vector_portable_vector_type_PortableVector y = uu____0.snd; re->coefficients[j] = x; @@ -3461,16 +3204,15 @@ with const generics */ static KRML_MUSTINLINE void -ntt_at_layer_3_34( - size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) +ntt_at_layer_3_ea( + size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re) { KRML_MAYBE_FOR16( i, (size_t)0U, (size_t)16U, (size_t)1U, size_t round = i; zeta_i[0U] = zeta_i[0U] + (size_t)1U; libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_ntt_layer_3_step_0d( - re->coefficients[round], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]]); + libcrux_ml_kem_vector_portable_ntt_layer_3_step_b8( + re->coefficients[round], zeta(zeta_i[0U])); re->coefficients[round] = uu____0;); } @@ -3481,19 +3223,16 @@ with const generics */ static KRML_MUSTINLINE void -ntt_at_layer_2_26( - size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) +ntt_at_layer_2_ea( + size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re) { - KRML_MAYBE_FOR16( - i, (size_t)0U, (size_t)16U, (size_t)1U, size_t round = i; - zeta_i[0U] = zeta_i[0U] + (size_t)1U; - re->coefficients[round] = - libcrux_ml_kem_vector_portable_ntt_layer_2_step_0d( - re->coefficients[round], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] + - (size_t)1U]); - zeta_i[0U] = zeta_i[0U] + (size_t)1U;); + KRML_MAYBE_FOR16(i, (size_t)0U, (size_t)16U, (size_t)1U, size_t round = i; + zeta_i[0U] = zeta_i[0U] + (size_t)1U; + re->coefficients[round] = + libcrux_ml_kem_vector_portable_ntt_layer_2_step_b8( + re->coefficients[round], zeta(zeta_i[0U]), + zeta(zeta_i[0U] + (size_t)1U)); + zeta_i[0U] = zeta_i[0U] + (size_t)1U;); } /** @@ -3503,68 +3242,76 @@ with const generics */ static KRML_MUSTINLINE void -ntt_at_layer_1_3c( - size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) +ntt_at_layer_1_ea( + size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re) { KRML_MAYBE_FOR16( i, (size_t)0U, (size_t)16U, (size_t)1U, size_t round = i; zeta_i[0U] = zeta_i[0U] + (size_t)1U; re->coefficients[round] = - libcrux_ml_kem_vector_portable_ntt_layer_1_step_0d( - re->coefficients[round], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] + - (size_t)1U], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] + - (size_t)2U], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] + - (size_t)3U]); + libcrux_ml_kem_vector_portable_ntt_layer_1_step_b8( + re->coefficients[round], zeta(zeta_i[0U]), + zeta(zeta_i[0U] + (size_t)1U), zeta(zeta_i[0U] + (size_t)2U), + zeta(zeta_i[0U] + (size_t)3U)); zeta_i[0U] = zeta_i[0U] + (size_t)3U;); } /** -This function found in impl -{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]} -*/ -/** -A monomorphic instance of libcrux_ml_kem.polynomial.poly_barrett_reduce_89 +A monomorphic instance of libcrux_ml_kem.polynomial.poly_barrett_reduce with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ static KRML_MUSTINLINE void -poly_barrett_reduce_89_d8( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self) +poly_barrett_reduce_ea( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *myself) { - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) { + for (size_t i = (size_t)0U; i < VECTORS_IN_RING_ELEMENT; i++) { size_t i0 = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_barrett_reduce_0d( - self->coefficients[i0]); - self->coefficients[i0] = uu____0; + libcrux_ml_kem_vector_portable_barrett_reduce_b8( + myself->coefficients[i0]); + myself->coefficients[i0] = uu____0; } } /** +This function found in impl +{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.polynomial.poly_barrett_reduce_d6 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics + +*/ +static KRML_MUSTINLINE void +poly_barrett_reduce_d6_ea( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *self) +{ + poly_barrett_reduce_ea(self); +} + +/** A monomorphic instance of libcrux_ml_kem.ntt.ntt_binomially_sampled_ring_element with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ static KRML_MUSTINLINE void -ntt_binomially_sampled_ring_element_63( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) +ntt_binomially_sampled_ring_element_ea( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re) { - ntt_at_layer_7_60(re); + ntt_at_layer_7_ea(re); size_t zeta_i = (size_t)1U; - ntt_at_layer_4_plus_8c(&zeta_i, re, (size_t)6U); - ntt_at_layer_4_plus_8c(&zeta_i, re, (size_t)5U); - ntt_at_layer_4_plus_8c(&zeta_i, re, (size_t)4U); - ntt_at_layer_3_34(&zeta_i, re); - ntt_at_layer_2_26(&zeta_i, re); - ntt_at_layer_1_3c(&zeta_i, re); - poly_barrett_reduce_89_d8(re); + ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U); + ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U); + ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U); + ntt_at_layer_3_ea(&zeta_i, re); + ntt_at_layer_2_ea(&zeta_i, re); + ntt_at_layer_1_ea(&zeta_i, re); + poly_barrett_reduce_d6_ea(re); } /** @@ -3580,41 +3327,50 @@ generics - ETA= 2 - ETA_RANDOMNESS_SIZE= 128 */ -static KRML_MUSTINLINE tuple_710 -sample_vector_cbd_then_ntt_781( - uint8_t prf_input[33U], uint8_t domain_separator) +static KRML_MUSTINLINE uint8_t +sample_vector_cbd_then_ntt_3b( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re_as_ntt, + uint8_t *prf_input, uint8_t domain_separator) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re_as_ntt[4U]; - KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, - re_as_ntt[i] = ZERO_89_c3();); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input[33U]; - memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t)); uint8_t prf_inputs[4U][33U]; - KRML_MAYBE_FOR4( - i, (size_t)0U, (size_t)4U, (size_t)1U, - memcpy(prf_inputs[i], copy_of_prf_input, (size_t)33U * sizeof(uint8_t));); - KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, size_t i0 = i; - prf_inputs[i0][32U] = domain_separator; - domain_separator = (uint32_t)domain_separator + 1U;); + KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, + core_array__core__clone__Clone_for__Array_T__N___clone( + (size_t)33U, prf_input, prf_inputs[i], uint8_t, void *);); + domain_separator = + libcrux_ml_kem_utils_prf_input_inc_ac(prf_inputs, domain_separator); uint8_t prf_outputs[4U][128U]; - PRFxN_f1_d52(prf_inputs, prf_outputs); + PRFxN_4a_44(prf_inputs, prf_outputs); KRML_MAYBE_FOR4( i, (size_t)0U, (size_t)4U, (size_t)1U, size_t i0 = i; - re_as_ntt[i0] = sample_from_binomial_distribution_ca( + re_as_ntt[i0] = sample_from_binomial_distribution_a0( Eurydice_array_to_slice((size_t)128U, prf_outputs[i0], uint8_t)); - ntt_binomially_sampled_ring_element_63(&re_as_ntt[i0]);); - /* Passing arrays by value in Rust generates a copy in C */ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 copy_of_re_as_ntt[4U]; - memcpy( - copy_of_re_as_ntt, re_as_ntt, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - tuple_710 lit; - memcpy( - lit.fst, copy_of_re_as_ntt, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - lit.snd = domain_separator; - return lit; + ntt_binomially_sampled_ring_element_ea(&re_as_ntt[i0]);); + return domain_separator; +} + +/** +This function found in impl {core::ops::function::FnMut<(usize), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@3]> for +libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, +Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, +TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]} +*/ +/** +A monomorphic instance of +libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73 with types +libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], +libcrux_ml_kem_variant_MlKem with const generics +- K= 4 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +*/ +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_73_1c( + void **_) +{ + return ZERO_d6_ea(); } /** @@ -3645,119 +3401,157 @@ sample_vector_cbd_then_ntt_781( <https://csrc.nist.gov/pubs/fips/203/ipd>. */ /** -This function found in impl -{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]} -*/ -/** -A monomorphic instance of libcrux_ml_kem.polynomial.ntt_multiply_89 +A monomorphic instance of libcrux_ml_kem.polynomial.ntt_multiply with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -ntt_multiply_89_3b(libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *rhs) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +ntt_multiply_ea(libcrux_ml_kem_polynomial_PolynomialRingElement_1d *myself, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *rhs) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 out = ZERO_89_c3(); - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) { + libcrux_ml_kem_polynomial_PolynomialRingElement_1d out = ZERO_ea(); + for (size_t i = (size_t)0U; i < VECTORS_IN_RING_ELEMENT; i++) { size_t i0 = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_ntt_multiply_0d( - &self->coefficients[i0], &rhs->coefficients[i0], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[(size_t)64U + - (size_t)4U * i0], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[(size_t)64U + - (size_t)4U * i0 + - (size_t)1U], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[(size_t)64U + - (size_t)4U * i0 + - (size_t)2U], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[(size_t)64U + - (size_t)4U * i0 + - (size_t)3U]); + libcrux_ml_kem_vector_portable_ntt_multiply_b8( + &myself->coefficients[i0], &rhs->coefficients[i0], + zeta((size_t)64U + (size_t)4U * i0), + zeta((size_t)64U + (size_t)4U * i0 + (size_t)1U), + zeta((size_t)64U + (size_t)4U * i0 + (size_t)2U), + zeta((size_t)64U + (size_t)4U * i0 + (size_t)3U)); out.coefficients[i0] = uu____0; } return out; } /** - Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise - sum of their constituent coefficients. +This function found in impl +{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]} */ /** -This function found in impl -{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]} +A monomorphic instance of libcrux_ml_kem.polynomial.ntt_multiply_d6 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics + +*/ +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +ntt_multiply_d6_ea(libcrux_ml_kem_polynomial_PolynomialRingElement_1d *self, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *rhs) +{ + return ntt_multiply_ea(self, rhs); +} + +/** + Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise + sum of their constituent coefficients. */ /** -A monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_89 +A monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - K= 4 */ static KRML_MUSTINLINE void -add_to_ring_element_89_1e1( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *rhs) +add_to_ring_element_d0( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *myself, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *rhs) { for (size_t i = (size_t)0U; i < Eurydice_slice_len( Eurydice_array_to_slice( - (size_t)16U, self->coefficients, + (size_t)16U, myself->coefficients, libcrux_ml_kem_vector_portable_vector_type_PortableVector), libcrux_ml_kem_vector_portable_vector_type_PortableVector); i++) { size_t i0 = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_add_0d(self->coefficients[i0], + libcrux_ml_kem_vector_portable_add_b8(myself->coefficients[i0], &rhs->coefficients[i0]); - self->coefficients[i0] = uu____0; + myself->coefficients[i0] = uu____0; } } /** -A monomorphic instance of libcrux_ml_kem.vector.traits.to_standard_domain +This function found in impl +{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - +- K= 4 */ -static libcrux_ml_kem_vector_portable_vector_type_PortableVector -to_standard_domain_21( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +static KRML_MUSTINLINE void +add_to_ring_element_d6_d0( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *self, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *rhs) { - return libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_0d( - v, LIBCRUX_ML_KEM_VECTOR_TRAITS_MONTGOMERY_R_SQUARED_MOD_FIELD_MODULUS); + add_to_ring_element_d0(self, rhs); } /** -This function found in impl -{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]} +A monomorphic instance of libcrux_ml_kem.polynomial.to_standard_domain +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics + */ +static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector +to_standard_domain_ea( + libcrux_ml_kem_vector_portable_vector_type_PortableVector vector) +{ + return libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8( + vector, + LIBCRUX_ML_KEM_VECTOR_TRAITS_MONTGOMERY_R_SQUARED_MOD_FIELD_MODULUS); +} + /** -A monomorphic instance of libcrux_ml_kem.polynomial.add_standard_error_reduce_89 +A monomorphic instance of libcrux_ml_kem.polynomial.add_standard_error_reduce with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ static KRML_MUSTINLINE void -add_standard_error_reduce_89_64( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error) +add_standard_error_reduce_ea( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *myself, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *error) { - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) { + for (size_t i = (size_t)0U; i < VECTORS_IN_RING_ELEMENT; i++) { size_t j = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector - coefficient_normal_form = to_standard_domain_21(self->coefficients[j]); - libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_barrett_reduce_0d( - libcrux_ml_kem_vector_portable_add_0d(coefficient_normal_form, - &error->coefficients[j])); - self->coefficients[j] = uu____0; + coefficient_normal_form = + to_standard_domain_ea(myself->coefficients[j]); + libcrux_ml_kem_vector_portable_vector_type_PortableVector sum = + libcrux_ml_kem_vector_portable_add_b8(coefficient_normal_form, + &error->coefficients[j]); + libcrux_ml_kem_vector_portable_vector_type_PortableVector red = + libcrux_ml_kem_vector_portable_barrett_reduce_b8(sum); + myself->coefficients[j] = red; } } /** +This function found in impl +{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.polynomial.add_standard_error_reduce_d6 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics + +*/ +static KRML_MUSTINLINE void +add_standard_error_reduce_d6_ea( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *self, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *error) +{ + add_standard_error_reduce_ea(self, error); +} + +/** Compute  ◦ ŝ + ê */ /** @@ -3767,104 +3561,154 @@ with const generics - K= 4 */ static KRML_MUSTINLINE void -compute_As_plus_e_c71( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 (*matrix_A)[4U], - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *s_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[4U]) +compute_As_plus_e_d0( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *t_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d (*matrix_A)[4U], + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *s_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *error_as_ntt) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result[4U]; - KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, - result[i] = ZERO_89_c3();); - for (size_t i0 = (size_t)0U; - i0 < Eurydice_slice_len( - Eurydice_array_to_slice( - (size_t)4U, matrix_A, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0[4U]), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0[4U]); - i0++) { - size_t i1 = i0; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *row = matrix_A[i1]; - for (size_t i = (size_t)0U; - i < Eurydice_slice_len( - Eurydice_array_to_slice( - (size_t)4U, row, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); - i++) { - size_t j = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *matrix_element = + for (size_t i = (size_t)0U; + i < Eurydice_slice_len( + Eurydice_array_to_slice( + (size_t)4U, matrix_A, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d[4U]), + libcrux_ml_kem_polynomial_PolynomialRingElement_1d[4U]); + i++) { + size_t i0 = i; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *row = matrix_A[i0]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d uu____0 = ZERO_d6_ea(); + t_as_ntt[i0] = uu____0; + for (size_t i1 = (size_t)0U; + i1 < Eurydice_slice_len( + Eurydice_array_to_slice( + (size_t)4U, row, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d), + libcrux_ml_kem_polynomial_PolynomialRingElement_1d); + i1++) { + size_t j = i1; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *matrix_element = &row[j]; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product = - ntt_multiply_89_3b(matrix_element, &s_as_ntt[j]); - add_to_ring_element_89_1e1(&result[i1], &product); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d product = + ntt_multiply_d6_ea(matrix_element, &s_as_ntt[j]); + add_to_ring_element_d6_d0(&t_as_ntt[i0], &product); } - add_standard_error_reduce_89_64(&result[i1], &error_as_ntt[i1]); + add_standard_error_reduce_d6_ea(&t_as_ntt[i0], &error_as_ntt[i0]); } - memcpy( - ret, result, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); } /** -A monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair + This function implements most of <strong>Algorithm 12</strong> of the + NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation + algorithm. + + We say "most of" since Algorithm 12 samples the required randomness within + the function itself, whereas this implementation expects it to be provided + through the `key_generation_seed` parameter. + + Algorithm 12 is reproduced below: + + ```plaintext + Output: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}. + Output: decryption key dkₚₖₑ ∈ 𝔹^{384k}. + + d ←$ B + (ρ,σ) ← G(d) + N ← 0 + for (i ← 0; i < k; i++) + for(j ← 0; j < k; j++) + Â[i,j] ← SampleNTT(XOF(ρ, i, j)) + end for + end for + for(i ← 0; i < k; i++) + s[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(σ,N)) + N ← N + 1 + end for + for(i ← 0; i < k; i++) + e[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(σ,N)) + N ← N + 1 + end for + ŝ ← NTT(s) + ê ← NTT(e) + t̂ ← Â◦ŝ + ê + ekₚₖₑ ← ByteEncode₁₂(t̂) ‖ ρ + dkₚₖₑ ← ByteEncode₁₂(ŝ) + ``` + + The NIST FIPS 203 standard can be found at + <https://csrc.nist.gov/pubs/fips/203/ipd>. +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem with const generics - K= 4 -- PRIVATE_KEY_SIZE= 1536 -- PUBLIC_KEY_SIZE= 1568 -- RANKED_BYTES_PER_RING_ELEMENT= 1536 - ETA1= 2 - ETA1_RANDOMNESS_SIZE= 128 */ -static libcrux_ml_kem_utils_extraction_helper_Keypair1024 -generate_keypair_a21( - Eurydice_slice key_generation_seed) +static KRML_MUSTINLINE void +generate_keypair_unpacked_1c( + Eurydice_slice key_generation_seed, + IndCpaPrivateKeyUnpacked_af *private_key, + IndCpaPublicKeyUnpacked_af *public_key) { uint8_t hashed[64U]; - cpa_keygen_seed_d8_72(key_generation_seed, hashed); + cpa_keygen_seed_39_03(key_generation_seed, hashed); Eurydice_slice_uint8_t_x2 uu____0 = Eurydice_slice_split_at( Eurydice_array_to_slice((size_t)64U, hashed, uint8_t), (size_t)32U, uint8_t, Eurydice_slice_uint8_t_x2); - Eurydice_slice seed_for_A0 = uu____0.fst; + Eurydice_slice seed_for_A = uu____0.fst; Eurydice_slice seed_for_secret_and_error = uu____0.snd; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 A_transpose[4U][4U]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d(*uu____1)[4U] = + public_key->A; uint8_t ret[34U]; - libcrux_ml_kem_utils_into_padded_array_6d1(seed_for_A0, ret); - sample_matrix_A_e71(ret, true, A_transpose); + libcrux_ml_kem_utils_into_padded_array_b6(seed_for_A, ret); + sample_matrix_A_2b(uu____1, ret, true); uint8_t prf_input[33U]; - libcrux_ml_kem_utils_into_padded_array_6d2(seed_for_secret_and_error, - prf_input); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input0[33U]; - memcpy(copy_of_prf_input0, prf_input, (size_t)33U * sizeof(uint8_t)); - tuple_710 uu____2 = sample_vector_cbd_then_ntt_781(copy_of_prf_input0, 0U); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[4U]; - memcpy( - secret_as_ntt, uu____2.fst, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - uint8_t domain_separator = uu____2.snd; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input[33U]; - memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_as_ntt[4U]; - memcpy( - error_as_ntt, - sample_vector_cbd_then_ntt_781(copy_of_prf_input, domain_separator).fst, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 t_as_ntt[4U]; - compute_As_plus_e_c71(A_transpose, secret_as_ntt, error_as_ntt, t_as_ntt); - uint8_t seed_for_A[32U]; - core_result_Result_00 dst; - Eurydice_slice_to_array2(&dst, seed_for_A0, Eurydice_slice, uint8_t[32U]); - core_result_unwrap_41_33(dst, seed_for_A); - uint8_t public_key_serialized[1568U]; - serialize_public_key_671( - t_as_ntt, Eurydice_array_to_slice((size_t)32U, seed_for_A, uint8_t), + libcrux_ml_kem_utils_into_padded_array_c8(seed_for_secret_and_error, + prf_input); + uint8_t domain_separator = + sample_vector_cbd_then_ntt_3b(private_key->secret_as_ntt, prf_input, 0U); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d error_as_ntt[4U]; + KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, + /* original Rust expression is not an lvalue in C */ + void *lvalue = (void *)0U; + error_as_ntt[i] = call_mut_73_1c(&lvalue);); + sample_vector_cbd_then_ntt_3b(error_as_ntt, prf_input, domain_separator); + compute_As_plus_e_d0(public_key->t_as_ntt, public_key->A, + private_key->secret_as_ntt, error_as_ntt); + uint8_t uu____2[32U]; + core_result_Result_fb dst; + Eurydice_slice_to_array2(&dst, seed_for_A, Eurydice_slice, uint8_t[32U], + core_array_TryFromSliceError); + core_result_unwrap_26_b3(dst, uu____2); + memcpy(public_key->seed_for_A, uu____2, (size_t)32U * sizeof(uint8_t)); +} + +/** + Serialize the secret key from the unpacked key pair generation. +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- K= 4 +- PRIVATE_KEY_SIZE= 1536 +- PUBLIC_KEY_SIZE= 1568 +*/ +static libcrux_ml_kem_utils_extraction_helper_Keypair1024 +serialize_unpacked_secret_key_00(IndCpaPublicKeyUnpacked_af *public_key, + IndCpaPrivateKeyUnpacked_af *private_key) +{ + uint8_t public_key_serialized[1568U]; + serialize_public_key_ff( + public_key->t_as_ntt, + Eurydice_array_to_slice((size_t)32U, public_key->seed_for_A, uint8_t), public_key_serialized); - uint8_t secret_key_serialized[1536U]; - serialize_secret_key_a31(secret_as_ntt, secret_key_serialized); + uint8_t secret_key_serialized[1536U] = { 0U }; + serialize_vector_d0( + private_key->secret_as_ntt, + Eurydice_array_to_slice((size_t)1536U, secret_key_serialized, uint8_t)); /* Passing arrays by value in Rust generates a copy in C */ uint8_t copy_of_secret_key_serialized[1536U]; memcpy(copy_of_secret_key_serialized, secret_key_serialized, @@ -3882,56 +3726,93 @@ generate_keypair_a21( } /** +A monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], +libcrux_ml_kem_variant_MlKem with const generics +- K= 4 +- PRIVATE_KEY_SIZE= 1536 +- PUBLIC_KEY_SIZE= 1568 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +*/ +static KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair1024 +generate_keypair_ea0(Eurydice_slice key_generation_seed) +{ + IndCpaPrivateKeyUnpacked_af private_key = default_70_d0(); + IndCpaPublicKeyUnpacked_af public_key = default_8b_d0(); + generate_keypair_unpacked_1c(key_generation_seed, &private_key, &public_key); + return serialize_unpacked_secret_key_00(&public_key, &private_key); +} + +/** Serialize the secret key. */ /** -A monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key +A monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] with const generics - K= 4 - SERIALIZED_KEY_LEN= 3168 */ static KRML_MUSTINLINE void -serialize_kem_secret_key_7d( +serialize_kem_secret_key_mut_60( Eurydice_slice private_key, Eurydice_slice public_key, - Eurydice_slice implicit_rejection_value, uint8_t ret[3168U]) + Eurydice_slice implicit_rejection_value, uint8_t *serialized) { - uint8_t out[3168U] = { 0U }; size_t pointer = (size_t)0U; - uint8_t *uu____0 = out; + uint8_t *uu____0 = serialized; size_t uu____1 = pointer; size_t uu____2 = pointer; Eurydice_slice_copy( - Eurydice_array_to_subslice2( + Eurydice_array_to_subslice3( uu____0, uu____1, uu____2 + Eurydice_slice_len(private_key, uint8_t), - uint8_t), + uint8_t *), private_key, uint8_t); pointer = pointer + Eurydice_slice_len(private_key, uint8_t); - uint8_t *uu____3 = out; + uint8_t *uu____3 = serialized; size_t uu____4 = pointer; size_t uu____5 = pointer; Eurydice_slice_copy( - Eurydice_array_to_subslice2( + Eurydice_array_to_subslice3( uu____3, uu____4, uu____5 + Eurydice_slice_len(public_key, uint8_t), - uint8_t), + uint8_t *), public_key, uint8_t); pointer = pointer + Eurydice_slice_len(public_key, uint8_t); - Eurydice_slice uu____6 = Eurydice_array_to_subslice2( - out, pointer, pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t); - uint8_t ret0[32U]; - H_f1_191(public_key, ret0); + Eurydice_slice uu____6 = Eurydice_array_to_subslice3( + serialized, pointer, pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, + uint8_t *); + uint8_t ret[32U]; + H_4a_ac(public_key, ret); Eurydice_slice_copy( - uu____6, Eurydice_array_to_slice((size_t)32U, ret0, uint8_t), uint8_t); + uu____6, Eurydice_array_to_slice((size_t)32U, ret, uint8_t), uint8_t); pointer = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE; - uint8_t *uu____7 = out; + uint8_t *uu____7 = serialized; size_t uu____8 = pointer; size_t uu____9 = pointer; Eurydice_slice_copy( - Eurydice_array_to_subslice2( + Eurydice_array_to_subslice3( uu____7, uu____8, uu____9 + Eurydice_slice_len(implicit_rejection_value, uint8_t), - uint8_t), + uint8_t *), implicit_rejection_value, uint8_t); +} + +/** +A monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key +with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] +with const generics +- K= 4 +- SERIALIZED_KEY_LEN= 3168 +*/ +static KRML_MUSTINLINE void +serialize_kem_secret_key_60( + Eurydice_slice private_key, Eurydice_slice public_key, + Eurydice_slice implicit_rejection_value, uint8_t ret[3168U]) +{ + uint8_t out[3168U] = { 0U }; + serialize_kem_secret_key_mut_60(private_key, public_key, + implicit_rejection_value, out); memcpy(ret, out, (size_t)3168U * sizeof(uint8_t)); } @@ -3952,28 +3833,27 @@ libcrux_ml_kem_variant_MlKem with const generics - CPA_PRIVATE_KEY_SIZE= 1536 - PRIVATE_KEY_SIZE= 3168 - PUBLIC_KEY_SIZE= 1568 -- BYTES_PER_RING_ELEMENT= 1536 - ETA1= 2 - ETA1_RANDOMNESS_SIZE= 128 */ libcrux_ml_kem_mlkem1024_MlKem1024KeyPair -libcrux_ml_kem_ind_cca_generate_keypair_f61(uint8_t randomness[64U]) +libcrux_ml_kem_ind_cca_generate_keypair_150(uint8_t *randomness) { - Eurydice_slice ind_cpa_keypair_randomness = Eurydice_array_to_subslice2( + Eurydice_slice ind_cpa_keypair_randomness = Eurydice_array_to_subslice3( randomness, (size_t)0U, - LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t); + LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t *); Eurydice_slice implicit_rejection_value = Eurydice_array_to_subslice_from( (size_t)64U, randomness, LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t, - size_t); + size_t, uint8_t[]); libcrux_ml_kem_utils_extraction_helper_Keypair1024 uu____0 = - generate_keypair_a21(ind_cpa_keypair_randomness); + generate_keypair_ea0(ind_cpa_keypair_randomness); uint8_t ind_cpa_private_key[1536U]; memcpy(ind_cpa_private_key, uu____0.fst, (size_t)1536U * sizeof(uint8_t)); uint8_t public_key[1568U]; memcpy(public_key, uu____0.snd, (size_t)1568U * sizeof(uint8_t)); uint8_t secret_key_serialized[3168U]; - serialize_kem_secret_key_7d( + serialize_kem_secret_key_60( Eurydice_array_to_slice((size_t)1536U, ind_cpa_private_key, uint8_t), Eurydice_array_to_slice((size_t)1568U, public_key, uint8_t), implicit_rejection_value, secret_key_serialized); @@ -3981,28 +3861,28 @@ libcrux_ml_kem_ind_cca_generate_keypair_f61(uint8_t randomness[64U]) uint8_t copy_of_secret_key_serialized[3168U]; memcpy(copy_of_secret_key_serialized, secret_key_serialized, (size_t)3168U * sizeof(uint8_t)); - libcrux_ml_kem_types_MlKemPrivateKey_95 private_key = - libcrux_ml_kem_types_from_05_891(copy_of_secret_key_serialized); - libcrux_ml_kem_types_MlKemPrivateKey_95 uu____2 = private_key; + libcrux_ml_kem_types_MlKemPrivateKey_83 private_key = + libcrux_ml_kem_types_from_77_39(copy_of_secret_key_serialized); + libcrux_ml_kem_types_MlKemPrivateKey_83 uu____2 = private_key; /* Passing arrays by value in Rust generates a copy in C */ uint8_t copy_of_public_key[1568U]; memcpy(copy_of_public_key, public_key, (size_t)1568U * sizeof(uint8_t)); - return libcrux_ml_kem_types_from_17_821( - uu____2, libcrux_ml_kem_types_from_b6_961(copy_of_public_key)); + return libcrux_ml_kem_types_from_17_94( + uu____2, libcrux_ml_kem_types_from_fd_af(copy_of_public_key)); } /** -This function found in impl {(libcrux_ml_kem::variant::Variant for -libcrux_ml_kem::variant::MlKem)} +This function found in impl {libcrux_ml_kem::variant::Variant for +libcrux_ml_kem::variant::MlKem} */ /** -A monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_d8 +A monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39 with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] with const generics - K= 4 */ static KRML_MUSTINLINE void -entropy_preprocess_d8_d1(Eurydice_slice randomness, +entropy_preprocess_39_03(Eurydice_slice randomness, uint8_t ret[32U]) { uint8_t out[32U] = { 0U }; @@ -4012,43 +3892,115 @@ entropy_preprocess_d8_d1(Eurydice_slice randomness, } /** - This function deserializes ring elements and reduces the result by the field - modulus. +A monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] with const +generics +- K= 4 +- T_AS_NTT_ENCODED_SIZE= 1536 +*/ +static KRML_MUSTINLINE void +build_unpacked_public_key_mut_3f( + Eurydice_slice public_key, + IndCpaPublicKeyUnpacked_af *unpacked_public_key) +{ + Eurydice_slice uu____0 = Eurydice_slice_subslice_to( + public_key, (size_t)1536U, uint8_t, size_t, uint8_t[]); + deserialize_ring_elements_reduced_d0(uu____0, unpacked_public_key->t_as_ntt); + Eurydice_slice seed = Eurydice_slice_subslice_from( + public_key, (size_t)1536U, uint8_t, size_t, uint8_t[]); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d(*uu____1)[4U] = + unpacked_public_key->A; + uint8_t ret[34U]; + libcrux_ml_kem_utils_into_padded_array_b6(seed, ret); + sample_matrix_A_2b(uu____1, ret, false); +} - This function MUST NOT be used on secret inputs. +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] with const +generics +- K= 4 +- T_AS_NTT_ENCODED_SIZE= 1536 */ +static KRML_MUSTINLINE IndCpaPublicKeyUnpacked_af +build_unpacked_public_key_3f0(Eurydice_slice public_key) +{ + IndCpaPublicKeyUnpacked_af unpacked_public_key = default_8b_d0(); + build_unpacked_public_key_mut_3f(public_key, &unpacked_public_key); + return unpacked_public_key; +} + /** -A monomorphic instance of -libcrux_ml_kem.serialize.deserialize_ring_elements_reduced with types -libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- PUBLIC_KEY_SIZE= 1536 +A monomorphic instance of K. +with types libcrux_ml_kem_polynomial_PolynomialRingElement +libcrux_ml_kem_vector_portable_vector_type_PortableVector[4size_t], +libcrux_ml_kem_polynomial_PolynomialRingElement +libcrux_ml_kem_vector_portable_vector_type_PortableVector + +*/ +typedef struct tuple_08_s { + libcrux_ml_kem_polynomial_PolynomialRingElement_1d fst[4U]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d snd; +} tuple_08; + +/** +This function found in impl {core::ops::function::FnMut<(usize), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, +K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, +ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, +TraitClause@3]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] with const +generics - K= 4 +- C1_LEN= 1408 +- U_COMPRESSION_FACTOR= 11 +- BLOCK_LEN= 352 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +- ETA2= 2 +- ETA2_RANDOMNESS_SIZE= 128 */ -static KRML_MUSTINLINE void -deserialize_ring_elements_reduced_4f3( - Eurydice_slice public_key, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[4U]) +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_f1_85( + void **_) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 deserialized_pk[4U]; - KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, - deserialized_pk[i] = ZERO_89_c3();); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len(public_key, uint8_t) / - LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT; - i++) { - size_t i0 = i; - Eurydice_slice ring_element = Eurydice_slice_subslice2( - public_key, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT + - LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - uint8_t); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____0 = - deserialize_to_reduced_ring_element_45(ring_element); - deserialized_pk[i0] = uu____0; - } - memcpy( - ret, deserialized_pk, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); + return ZERO_d6_ea(); +} + +/** +This function found in impl {core::ops::function::FnMut<(usize), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, +Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, +ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, +TraitClause@3]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] with const +generics +- K= 4 +- C1_LEN= 1408 +- U_COMPRESSION_FACTOR= 11 +- BLOCK_LEN= 352 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +- ETA2= 2 +- ETA2_RANDOMNESS_SIZE= 128 +*/ +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_dd_85( + void **_) +{ + return ZERO_d6_ea(); } /** @@ -4063,41 +4015,26 @@ generics - ETA2_RANDOMNESS_SIZE= 128 - ETA2= 2 */ -static KRML_MUSTINLINE tuple_710 -sample_ring_element_cbd_a81(uint8_t prf_input[33U], uint8_t domain_separator) +static KRML_MUSTINLINE uint8_t +sample_ring_element_cbd_3b( + uint8_t *prf_input, uint8_t domain_separator, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *error_1) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_1[4U]; - KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, - error_1[i] = ZERO_89_c3();); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input[33U]; - memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t)); uint8_t prf_inputs[4U][33U]; - KRML_MAYBE_FOR4( - i, (size_t)0U, (size_t)4U, (size_t)1U, - memcpy(prf_inputs[i], copy_of_prf_input, (size_t)33U * sizeof(uint8_t));); - KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, size_t i0 = i; - prf_inputs[i0][32U] = domain_separator; - domain_separator = (uint32_t)domain_separator + 1U;); + KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, + core_array__core__clone__Clone_for__Array_T__N___clone( + (size_t)33U, prf_input, prf_inputs[i], uint8_t, void *);); + domain_separator = + libcrux_ml_kem_utils_prf_input_inc_ac(prf_inputs, domain_separator); uint8_t prf_outputs[4U][128U]; - PRFxN_f1_d52(prf_inputs, prf_outputs); + PRFxN_4a_44(prf_inputs, prf_outputs); KRML_MAYBE_FOR4( i, (size_t)0U, (size_t)4U, (size_t)1U, size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____1 = - sample_from_binomial_distribution_ca( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d uu____0 = + sample_from_binomial_distribution_a0( Eurydice_array_to_slice((size_t)128U, prf_outputs[i0], uint8_t)); - error_1[i0] = uu____1;); - /* Passing arrays by value in Rust generates a copy in C */ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 copy_of_error_1[4U]; - memcpy( - copy_of_error_1, error_1, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - tuple_710 lit; - memcpy( - lit.fst, copy_of_error_1, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - lit.snd = domain_separator; - return lit; + error_1[i0] = uu____0;); + return domain_separator; } /** @@ -4105,8 +4042,8 @@ A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF with const generics - LEN= 128 */ -static KRML_MUSTINLINE void -PRF_7c0(Eurydice_slice input, uint8_t ret[128U]) +static inline void +PRF_a6(Eurydice_slice input, uint8_t ret[128U]) { uint8_t digest[128U] = { 0U }; libcrux_sha3_portable_shake256( @@ -4115,20 +4052,38 @@ PRF_7c0(Eurydice_slice input, uint8_t ret[128U]) } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_f1 +A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a with const generics - K= 4 - LEN= 128 */ -static KRML_MUSTINLINE void -PRF_f1_2e4(Eurydice_slice input, - uint8_t ret[128U]) +static inline void +PRF_4a_440(Eurydice_slice input, uint8_t ret[128U]) +{ + PRF_a6(input, ret); +} + +/** +This function found in impl {core::ops::function::FnMut<(usize), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, +K>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- K= 4 +*/ +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_a8_d0( + void **_) { - PRF_7c0(input, ret); + return ZERO_d6_ea(); } /** @@ -4138,22 +4093,17 @@ with const generics */ static KRML_MUSTINLINE void -invert_ntt_at_layer_1_4b( - size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) +invert_ntt_at_layer_1_ea( + size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re) { KRML_MAYBE_FOR16( i, (size_t)0U, (size_t)16U, (size_t)1U, size_t round = i; zeta_i[0U] = zeta_i[0U] - (size_t)1U; re->coefficients[round] = - libcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_0d( - re->coefficients[round], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] - - (size_t)1U], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] - - (size_t)2U], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] - - (size_t)3U]); + libcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_b8( + re->coefficients[round], zeta(zeta_i[0U]), + zeta(zeta_i[0U] - (size_t)1U), zeta(zeta_i[0U] - (size_t)2U), + zeta(zeta_i[0U] - (size_t)3U)); zeta_i[0U] = zeta_i[0U] - (size_t)3U;); } @@ -4164,19 +4114,16 @@ with const generics */ static KRML_MUSTINLINE void -invert_ntt_at_layer_2_2b( - size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) +invert_ntt_at_layer_2_ea( + size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re) { - KRML_MAYBE_FOR16( - i, (size_t)0U, (size_t)16U, (size_t)1U, size_t round = i; - zeta_i[0U] = zeta_i[0U] - (size_t)1U; - re->coefficients[round] = - libcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_0d( - re->coefficients[round], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] - - (size_t)1U]); - zeta_i[0U] = zeta_i[0U] - (size_t)1U;); + KRML_MAYBE_FOR16(i, (size_t)0U, (size_t)16U, (size_t)1U, size_t round = i; + zeta_i[0U] = zeta_i[0U] - (size_t)1U; + re->coefficients[round] = + libcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_b8( + re->coefficients[round], zeta(zeta_i[0U]), + zeta(zeta_i[0U] - (size_t)1U)); + zeta_i[0U] = zeta_i[0U] - (size_t)1U;); } /** @@ -4186,16 +4133,15 @@ with const generics */ static KRML_MUSTINLINE void -invert_ntt_at_layer_3_97( - size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) +invert_ntt_at_layer_3_ea( + size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re) { KRML_MAYBE_FOR16( i, (size_t)0U, (size_t)16U, (size_t)1U, size_t round = i; zeta_i[0U] = zeta_i[0U] - (size_t)1U; libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_0d( - re->coefficients[round], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]]); + libcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_b8( + re->coefficients[round], zeta(zeta_i[0U])); re->coefficients[round] = uu____0;); } @@ -4207,19 +4153,20 @@ libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2 - inv_ntt_layer_int_vec_step_reduce_aa( + inv_ntt_layer_int_vec_step_reduce_ea( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, libcrux_ml_kem_vector_portable_vector_type_PortableVector b, int16_t zeta_r) { libcrux_ml_kem_vector_portable_vector_type_PortableVector a_minus_b = - libcrux_ml_kem_vector_portable_sub_0d(b, &a); - a = libcrux_ml_kem_vector_portable_barrett_reduce_0d( - libcrux_ml_kem_vector_portable_add_0d(a, &b)); - b = montgomery_multiply_fe_05(a_minus_b, zeta_r); - return ( - CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2){ - .fst = a, .snd = b }); + libcrux_ml_kem_vector_portable_sub_b8(b, &a); + a = libcrux_ml_kem_vector_portable_barrett_reduce_b8( + libcrux_ml_kem_vector_portable_add_b8(a, &b)); + b = libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8( + a_minus_b, zeta_r); + return (KRML_CLITERAL( + libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2){ .fst = a, + .snd = b }); } /** @@ -4229,8 +4176,8 @@ with const generics */ static KRML_MUSTINLINE void -invert_ntt_at_layer_4_plus_04( - size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re, +invert_ntt_at_layer_4_plus_ea( + size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re, size_t layer) { size_t step = (size_t)1U << (uint32_t)layer; @@ -4245,9 +4192,9 @@ invert_ntt_at_layer_4_plus_04( for (size_t i = offset_vec; i < offset_vec + step_vec; i++) { size_t j = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2 uu____0 = - inv_ntt_layer_int_vec_step_reduce_aa( - re->coefficients[j], re->coefficients[j + step_vec], - libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]]); + inv_ntt_layer_int_vec_step_reduce_ea(re->coefficients[j], + re->coefficients[j + step_vec], + zeta(zeta_i[0U])); libcrux_ml_kem_vector_portable_vector_type_PortableVector x = uu____0.fst; libcrux_ml_kem_vector_portable_vector_type_PortableVector y = uu____0.snd; re->coefficients[j] = x; @@ -4263,52 +4210,67 @@ with const generics - K= 4 */ static KRML_MUSTINLINE void -invert_ntt_montgomery_c91( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) +invert_ntt_montgomery_d0( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re) { size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U; - invert_ntt_at_layer_1_4b(&zeta_i, re); - invert_ntt_at_layer_2_2b(&zeta_i, re); - invert_ntt_at_layer_3_97(&zeta_i, re); - invert_ntt_at_layer_4_plus_04(&zeta_i, re, (size_t)4U); - invert_ntt_at_layer_4_plus_04(&zeta_i, re, (size_t)5U); - invert_ntt_at_layer_4_plus_04(&zeta_i, re, (size_t)6U); - invert_ntt_at_layer_4_plus_04(&zeta_i, re, (size_t)7U); - poly_barrett_reduce_89_d8(re); + invert_ntt_at_layer_1_ea(&zeta_i, re); + invert_ntt_at_layer_2_ea(&zeta_i, re); + invert_ntt_at_layer_3_ea(&zeta_i, re); + invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U); + invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U); + invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U); + invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U); + poly_barrett_reduce_d6_ea(re); } /** -This function found in impl -{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]} -*/ -/** -A monomorphic instance of libcrux_ml_kem.polynomial.add_error_reduce_89 +A monomorphic instance of libcrux_ml_kem.polynomial.add_error_reduce with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ static KRML_MUSTINLINE void -add_error_reduce_89_5d( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error) +add_error_reduce_ea( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *myself, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *error) { - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) { + for (size_t i = (size_t)0U; i < VECTORS_IN_RING_ELEMENT; i++) { size_t j = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient_normal_form = - libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_0d( - self->coefficients[j], (int16_t)1441); - libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_barrett_reduce_0d( - libcrux_ml_kem_vector_portable_add_0d(coefficient_normal_form, - &error->coefficients[j])); - self->coefficients[j] = uu____0; + libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8( + myself->coefficients[j], (int16_t)1441); + libcrux_ml_kem_vector_portable_vector_type_PortableVector sum = + libcrux_ml_kem_vector_portable_add_b8(coefficient_normal_form, + &error->coefficients[j]); + libcrux_ml_kem_vector_portable_vector_type_PortableVector red = + libcrux_ml_kem_vector_portable_barrett_reduce_b8(sum); + myself->coefficients[j] = red; } } /** +This function found in impl +{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.polynomial.add_error_reduce_d6 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics + +*/ +static KRML_MUSTINLINE void +add_error_reduce_d6_ea( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *self, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *error) +{ + add_error_reduce_ea(self, error); +} + +/** Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁ */ /** @@ -4318,143 +4280,45 @@ with const generics - K= 4 */ static KRML_MUSTINLINE void -compute_vector_u_931( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 (*a_as_ntt)[4U], - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *r_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error_1, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[4U]) +compute_vector_u_d0( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d (*a_as_ntt)[4U], + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *r_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *error_1, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d ret[4U]) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result[4U]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d result[4U]; KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, - result[i] = ZERO_89_c3();); + /* original Rust expression is not an lvalue in C */ + void *lvalue = (void *)0U; + result[i] = call_mut_a8_d0(&lvalue);); for (size_t i0 = (size_t)0U; i0 < Eurydice_slice_len( Eurydice_array_to_slice( (size_t)4U, a_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0[4U]), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0[4U]); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d[4U]), + libcrux_ml_kem_polynomial_PolynomialRingElement_1d[4U]); i0++) { size_t i1 = i0; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *row = a_as_ntt[i1]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *row = a_as_ntt[i1]; for (size_t i = (size_t)0U; i < Eurydice_slice_len( Eurydice_array_to_slice( (size_t)4U, row, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d), + libcrux_ml_kem_polynomial_PolynomialRingElement_1d); i++) { size_t j = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *a_element = &row[j]; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product = - ntt_multiply_89_3b(a_element, &r_as_ntt[j]); - add_to_ring_element_89_1e1(&result[i1], &product); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *a_element = &row[j]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d product = + ntt_multiply_d6_ea(a_element, &r_as_ntt[j]); + add_to_ring_element_d6_d0(&result[i1], &product); } - invert_ntt_montgomery_c91(&result[i1]); - add_error_reduce_89_5d(&result[i1], &error_1[i1]); + invert_ntt_montgomery_d0(&result[i1]); + add_error_reduce_d6_ea(&result[i1], &error_1[i1]); } memcpy( ret, result, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); -} - -/** -A monomorphic instance of libcrux_ml_kem.vector.traits.decompress_1 -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics - -*/ -static libcrux_ml_kem_vector_portable_vector_type_PortableVector -decompress_1_3e(libcrux_ml_kem_vector_portable_vector_type_PortableVector v) -{ - libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_ZERO_0d(); - return libcrux_ml_kem_vector_portable_bitwise_and_with_constant_0d( - libcrux_ml_kem_vector_portable_sub_0d(uu____0, &v), (int16_t)1665); -} - -/** -A monomorphic instance of -libcrux_ml_kem.serialize.deserialize_then_decompress_message with types -libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - -*/ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -deserialize_then_decompress_message_f7(uint8_t serialized[32U]) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = ZERO_89_c3(); - KRML_MAYBE_FOR16( - i, (size_t)0U, (size_t)16U, (size_t)1U, size_t i0 = i; - libcrux_ml_kem_vector_portable_vector_type_PortableVector - coefficient_compressed = - libcrux_ml_kem_vector_portable_deserialize_1_0d( - Eurydice_array_to_subslice2(serialized, (size_t)2U * i0, - (size_t)2U * i0 + (size_t)2U, - uint8_t)); - libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - decompress_1_3e(coefficient_compressed); - re.coefficients[i0] = uu____0;); - return re; -} - -/** -This function found in impl -{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]} -*/ -/** -A monomorphic instance of libcrux_ml_kem.polynomial.add_message_error_reduce_89 -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics - -*/ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -add_message_error_reduce_89_c4( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *message, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result) -{ - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) { - size_t i0 = i; - libcrux_ml_kem_vector_portable_vector_type_PortableVector - coefficient_normal_form = - libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_0d( - result.coefficients[i0], (int16_t)1441); - libcrux_ml_kem_vector_portable_vector_type_PortableVector tmp = - libcrux_ml_kem_vector_portable_add_0d(self->coefficients[i0], - &message->coefficients[i0]); - libcrux_ml_kem_vector_portable_vector_type_PortableVector tmp0 = - libcrux_ml_kem_vector_portable_add_0d(coefficient_normal_form, &tmp); - libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_barrett_reduce_0d(tmp0); - result.coefficients[i0] = uu____0; - } - return result; -} - -/** - Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message -*/ -/** -A monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 4 -*/ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -compute_ring_element_v_541( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *t_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *r_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error_2, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *message) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result = ZERO_89_c3(); - KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product = - ntt_multiply_89_3b(&t_as_ntt[i0], &r_as_ntt[i0]); - add_to_ring_element_89_1e1(&result, &product);); - invert_ntt_montgomery_c91(&result); - result = add_message_error_reduce_89_c4(error_2, message, result); - return result; + (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); } /** @@ -4463,33 +4327,34 @@ with const generics - COEFFICIENT_BITS= 10 */ static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector -compress_dc(libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +compress_ef(libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { size_t i0 = i; - int16_t uu____0 = + int16_t uu____0 = libcrux_secrets_int_as_i16_f5( libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient( - (uint8_t)(int32_t)10, (uint16_t)v.elements[i0]); - v.elements[i0] = uu____0; + (uint8_t)(int32_t)10, + libcrux_secrets_int_as_u16_f5(a.elements[i0]))); + a.elements[i0] = uu____0; } - return v; + return a; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ /** -A monomorphic instance of libcrux_ml_kem.vector.portable.compress_0d +A monomorphic instance of libcrux_ml_kem.vector.portable.compress_b8 with const generics - COEFFICIENT_BITS= 10 */ static libcrux_ml_kem_vector_portable_vector_type_PortableVector -compress_0d_96( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +compress_b8_ef( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { - return compress_dc(v); + return compress_ef(a); } /** @@ -4498,32 +4363,34 @@ with const generics - COEFFICIENT_BITS= 11 */ static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector -compress_dc0(libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +compress_c4(libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { size_t i0 = i; - int16_t uu____0 = + int16_t uu____0 = libcrux_secrets_int_as_i16_f5( libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient( - (uint8_t)(int32_t)11, (uint16_t)v.elements[i0]); - v.elements[i0] = uu____0; + (uint8_t)(int32_t)11, + libcrux_secrets_int_as_u16_f5(a.elements[i0]))); + a.elements[i0] = uu____0; } - return v; + return a; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ /** -A monomorphic instance of libcrux_ml_kem.vector.portable.compress_0d +A monomorphic instance of libcrux_ml_kem.vector.portable.compress_b8 with const generics - COEFFICIENT_BITS= 11 */ static libcrux_ml_kem_vector_portable_vector_type_PortableVector -compress_0d_960(libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +compress_b8_c4( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { - return compress_dc0(v); + return compress_c4(a); } /** @@ -4533,21 +4400,22 @@ with const generics - OUT_LEN= 352 */ static KRML_MUSTINLINE void -compress_then_serialize_11_ef0( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re, uint8_t ret[352U]) +compress_then_serialize_11_54( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re, uint8_t ret[352U]) { uint8_t serialized[352U] = { 0U }; - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) { + for (size_t i = (size_t)0U; i < VECTORS_IN_RING_ELEMENT; i++) { size_t i0 = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient = - compress_0d_960(to_unsigned_representative_84(re->coefficients[i0])); + compress_b8_c4( + libcrux_ml_kem_vector_portable_to_unsigned_representative_b8( + re->coefficients[i0])); uint8_t bytes[22U]; - libcrux_ml_kem_vector_portable_serialize_11_0d(coefficient, bytes); - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( - serialized, (size_t)22U * i0, (size_t)22U * i0 + (size_t)22U, uint8_t); + libcrux_ml_kem_vector_portable_serialize_11_b8(coefficient, bytes); Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)22U, bytes, uint8_t), uint8_t); + Eurydice_array_to_subslice3(serialized, (size_t)22U * i0, + (size_t)22U * i0 + (size_t)22U, uint8_t *), + Eurydice_array_to_slice((size_t)22U, bytes, uint8_t), uint8_t); } memcpy(ret, serialized, (size_t)352U * sizeof(uint8_t)); } @@ -4560,11 +4428,11 @@ libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - OUT_LEN= 352 */ static KRML_MUSTINLINE void -compress_then_serialize_ring_element_u_2e0( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re, uint8_t ret[352U]) +compress_then_serialize_ring_element_u_82( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re, uint8_t ret[352U]) { uint8_t uu____0[352U]; - compress_then_serialize_11_ef0(re, uu____0); + compress_then_serialize_11_54(re, uu____0); memcpy(ret, uu____0, (size_t)352U * sizeof(uint8_t)); } @@ -4580,62 +4448,226 @@ with const generics - COMPRESSION_FACTOR= 11 - BLOCK_LEN= 352 */ -static void -compress_then_serialize_u_281( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 input[4U], +static KRML_MUSTINLINE void +compress_then_serialize_u_2f( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d input[4U], Eurydice_slice out) { for (size_t i = (size_t)0U; i < Eurydice_slice_len( Eurydice_array_to_slice( (size_t)4U, input, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d), + libcrux_ml_kem_polynomial_PolynomialRingElement_1d); i++) { size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = input[i0]; - Eurydice_slice uu____0 = Eurydice_slice_subslice2( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re = input[i0]; + Eurydice_slice uu____0 = Eurydice_slice_subslice3( out, i0 * ((size_t)1408U / (size_t)4U), - (i0 + (size_t)1U) * ((size_t)1408U / (size_t)4U), uint8_t); + (i0 + (size_t)1U) * ((size_t)1408U / (size_t)4U), uint8_t *); uint8_t ret[352U]; - compress_then_serialize_ring_element_u_2e0(&re, ret); + compress_then_serialize_ring_element_u_82(&re, ret); Eurydice_slice_copy( uu____0, Eurydice_array_to_slice((size_t)352U, ret, uint8_t), uint8_t); } } /** -A monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress -with const generics -- COEFFICIENT_BITS= 4 +A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] with const +generics +- K= 4 +- C1_LEN= 1408 +- U_COMPRESSION_FACTOR= 11 +- BLOCK_LEN= 352 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +- ETA2= 2 +- ETA2_RANDOMNESS_SIZE= 128 */ -static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector -compress_dc1(libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +static KRML_MUSTINLINE tuple_08 +encrypt_c1_85(Eurydice_slice randomness, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d (*matrix)[4U], + Eurydice_slice ciphertext) { - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { - size_t i0 = i; - int16_t uu____0 = - libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient( - (uint8_t)(int32_t)4, (uint16_t)v.elements[i0]); - v.elements[i0] = uu____0; - } - return v; -} - + uint8_t prf_input[33U]; + libcrux_ml_kem_utils_into_padded_array_c8(randomness, prf_input); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d r_as_ntt[4U]; + KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, + /* original Rust expression is not an lvalue in C */ + void *lvalue = (void *)0U; + r_as_ntt[i] = call_mut_f1_85(&lvalue);); + uint8_t domain_separator0 = + sample_vector_cbd_then_ntt_3b(r_as_ntt, prf_input, 0U); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d error_1[4U]; + KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, + /* original Rust expression is not an lvalue in C */ + void *lvalue = (void *)0U; + error_1[i] = call_mut_dd_85(&lvalue);); + uint8_t domain_separator = + sample_ring_element_cbd_3b(prf_input, domain_separator0, error_1); + prf_input[32U] = domain_separator; + uint8_t prf_output[128U]; + PRF_4a_440(Eurydice_array_to_slice((size_t)33U, prf_input, uint8_t), + prf_output); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d error_2 = + sample_from_binomial_distribution_a0( + Eurydice_array_to_slice((size_t)128U, prf_output, uint8_t)); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d u[4U]; + compute_vector_u_d0(matrix, r_as_ntt, error_1, u); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d uu____0[4U]; + memcpy( + uu____0, u, + (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); + compress_then_serialize_u_2f(uu____0, ciphertext); + /* Passing arrays by value in Rust generates a copy in C */ + libcrux_ml_kem_polynomial_PolynomialRingElement_1d copy_of_r_as_ntt[4U]; + memcpy( + copy_of_r_as_ntt, r_as_ntt, + (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); + tuple_08 lit; + memcpy( + lit.fst, copy_of_r_as_ntt, + (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); + lit.snd = error_2; + return lit; +} + +/** +A monomorphic instance of +libcrux_ml_kem.serialize.deserialize_then_decompress_message with types +libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics + +*/ +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +deserialize_then_decompress_message_ea(uint8_t *serialized) +{ + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re = ZERO_d6_ea(); + KRML_MAYBE_FOR16( + i, (size_t)0U, (size_t)16U, (size_t)1U, size_t i0 = i; + libcrux_ml_kem_vector_portable_vector_type_PortableVector + coefficient_compressed = + libcrux_ml_kem_vector_portable_deserialize_1_b8( + Eurydice_array_to_subslice3(serialized, (size_t)2U * i0, + (size_t)2U * i0 + (size_t)2U, + uint8_t *)); + libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = + libcrux_ml_kem_vector_portable_decompress_1_b8( + coefficient_compressed); + re.coefficients[i0] = uu____0;); + return re; +} + +/** +A monomorphic instance of libcrux_ml_kem.polynomial.add_message_error_reduce +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics + +*/ +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +add_message_error_reduce_ea( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *myself, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *message, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d result) +{ + for (size_t i = (size_t)0U; i < VECTORS_IN_RING_ELEMENT; i++) { + size_t i0 = i; + libcrux_ml_kem_vector_portable_vector_type_PortableVector + coefficient_normal_form = + libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8( + result.coefficients[i0], (int16_t)1441); + libcrux_ml_kem_vector_portable_vector_type_PortableVector sum1 = + libcrux_ml_kem_vector_portable_add_b8(myself->coefficients[i0], + &message->coefficients[i0]); + libcrux_ml_kem_vector_portable_vector_type_PortableVector sum2 = + libcrux_ml_kem_vector_portable_add_b8(coefficient_normal_form, &sum1); + libcrux_ml_kem_vector_portable_vector_type_PortableVector red = + libcrux_ml_kem_vector_portable_barrett_reduce_b8(sum2); + result.coefficients[i0] = red; + } + return result; +} + +/** +This function found in impl +{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.polynomial.add_message_error_reduce_d6 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics + +*/ +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +add_message_error_reduce_d6_ea( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *self, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *message, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d result) +{ + return add_message_error_reduce_ea(self, message, result); +} + +/** + Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message +*/ +/** +A monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- K= 4 +*/ +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +compute_ring_element_v_d0( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *t_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *r_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *error_2, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *message) +{ + libcrux_ml_kem_polynomial_PolynomialRingElement_1d result = ZERO_d6_ea(); + KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, size_t i0 = i; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d product = + ntt_multiply_d6_ea(&t_as_ntt[i0], &r_as_ntt[i0]); + add_to_ring_element_d6_d0(&result, &product);); + invert_ntt_montgomery_d0(&result); + return add_message_error_reduce_d6_ea(error_2, message, result); +} + +/** +A monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress +with const generics +- COEFFICIENT_BITS= 4 +*/ +static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector +compress_d1(libcrux_ml_kem_vector_portable_vector_type_PortableVector a) +{ + for (size_t i = (size_t)0U; + i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { + size_t i0 = i; + int16_t uu____0 = libcrux_secrets_int_as_i16_f5( + libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient( + (uint8_t)(int32_t)4, + libcrux_secrets_int_as_u16_f5(a.elements[i0]))); + a.elements[i0] = uu____0; + } + return a; +} + /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ /** -A monomorphic instance of libcrux_ml_kem.vector.portable.compress_0d +A monomorphic instance of libcrux_ml_kem.vector.portable.compress_b8 with const generics - COEFFICIENT_BITS= 4 */ static libcrux_ml_kem_vector_portable_vector_type_PortableVector -compress_0d_961(libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +compress_b8_d1( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { - return compress_dc1(v); + return compress_d1(a); } /** @@ -4645,20 +4677,19 @@ with const generics */ static KRML_MUSTINLINE void -compress_then_serialize_4_80( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re, +compress_then_serialize_4_ea( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re, Eurydice_slice serialized) { - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) { + for (size_t i = (size_t)0U; i < VECTORS_IN_RING_ELEMENT; i++) { size_t i0 = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient = - compress_0d_961(to_unsigned_representative_84(re.coefficients[i0])); + compress_b8_d1(to_unsigned_field_modulus_ea(re.coefficients[i0])); uint8_t bytes[8U]; - libcrux_ml_kem_vector_portable_serialize_4_0d(coefficient, bytes); + libcrux_ml_kem_vector_portable_serialize_4_b8(coefficient, bytes); Eurydice_slice_copy( - Eurydice_slice_subslice2(serialized, (size_t)8U * i0, - (size_t)8U * i0 + (size_t)8U, uint8_t), + Eurydice_slice_subslice3(serialized, (size_t)8U * i0, + (size_t)8U * i0 + (size_t)8U, uint8_t *), Eurydice_array_to_slice((size_t)8U, bytes, uint8_t), uint8_t); } } @@ -4669,32 +4700,34 @@ with const generics - COEFFICIENT_BITS= 5 */ static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector -compress_dc2(libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +compress_f4(libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { size_t i0 = i; - int16_t uu____0 = + int16_t uu____0 = libcrux_secrets_int_as_i16_f5( libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient( - (uint8_t)(int32_t)5, (uint16_t)v.elements[i0]); - v.elements[i0] = uu____0; + (uint8_t)(int32_t)5, + libcrux_secrets_int_as_u16_f5(a.elements[i0]))); + a.elements[i0] = uu____0; } - return v; + return a; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ /** -A monomorphic instance of libcrux_ml_kem.vector.portable.compress_0d +A monomorphic instance of libcrux_ml_kem.vector.portable.compress_b8 with const generics - COEFFICIENT_BITS= 5 */ static libcrux_ml_kem_vector_portable_vector_type_PortableVector -compress_0d_962(libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +compress_b8_f4( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { - return compress_dc2(v); + return compress_f4(a); } /** @@ -4704,20 +4737,21 @@ with const generics */ static KRML_MUSTINLINE void -compress_then_serialize_5_3c( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re, +compress_then_serialize_5_ea( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re, Eurydice_slice serialized) { - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) { + for (size_t i = (size_t)0U; i < VECTORS_IN_RING_ELEMENT; i++) { size_t i0 = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficients = - compress_0d_962(to_unsigned_representative_84(re.coefficients[i0])); + compress_b8_f4( + libcrux_ml_kem_vector_portable_to_unsigned_representative_b8( + re.coefficients[i0])); uint8_t bytes[10U]; - libcrux_ml_kem_vector_portable_serialize_5_0d(coefficients, bytes); + libcrux_ml_kem_vector_portable_serialize_5_b8(coefficients, bytes); Eurydice_slice_copy( - Eurydice_slice_subslice2(serialized, (size_t)10U * i0, - (size_t)10U * i0 + (size_t)10U, uint8_t), + Eurydice_slice_subslice3(serialized, (size_t)10U * i0, + (size_t)10U * i0 + (size_t)10U, uint8_t *), Eurydice_array_to_slice((size_t)10U, bytes, uint8_t), uint8_t); } } @@ -4726,18 +4760,83 @@ compress_then_serialize_5_3c( A monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics +- K= 4 - COMPRESSION_FACTOR= 5 - OUT_LEN= 160 */ static KRML_MUSTINLINE void -compress_then_serialize_ring_element_v_650( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re, Eurydice_slice out) +compress_then_serialize_ring_element_v_00( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re, Eurydice_slice out) { - compress_then_serialize_5_3c(re, out); + compress_then_serialize_5_ea(re, out); } /** -A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt +A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- K= 4 +- V_COMPRESSION_FACTOR= 5 +- C2_LEN= 160 +*/ +static KRML_MUSTINLINE void +encrypt_c2_00( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *t_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *r_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *error_2, + uint8_t *message, Eurydice_slice ciphertext) +{ + libcrux_ml_kem_polynomial_PolynomialRingElement_1d message_as_ring_element = + deserialize_then_decompress_message_ea(message); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d v = + compute_ring_element_v_d0(t_as_ntt, r_as_ntt, error_2, + &message_as_ring_element); + compress_then_serialize_ring_element_v_00(v, ciphertext); +} + +/** + This function implements <strong>Algorithm 13</strong> of the + NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm. + + Algorithm 13 is reproduced below: + + ```plaintext + Input: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}. + Input: message m ∈ 𝔹^{32}. + Input: encryption randomness r ∈ 𝔹^{32}. + Output: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}. + + N ← 0 + t̂ ← ByteDecode₁₂(ekₚₖₑ[0:384k]) + ρ ← ekₚₖₑ[384k: 384k + 32] + for (i ← 0; i < k; i++) + for(j ← 0; j < k; j++) + Â[i,j] ← SampleNTT(XOF(ρ, i, j)) + end for + end for + for(i ← 0; i < k; i++) + r[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(r,N)) + N ← N + 1 + end for + for(i ← 0; i < k; i++) + e₁[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N)) + N ← N + 1 + end for + e₂ ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N)) + r̂ ← NTT(r) + u ← NTT-¹(Âᵀ ◦ r̂) + e₁ + μ ← Decompress₁(ByteDecode₁(m))) + v ← NTT-¹(t̂ᵀ ◦ rˆ) + e₂ + μ + c₁ ← ByteEncode_{dᵤ}(Compress_{dᵤ}(u)) + c₂ ← ByteEncode_{dᵥ}(Compress_{dᵥ}(v)) + return c ← (c₁ ‖ c₂) + ``` + + The NIST FIPS 203 standard can be found at + <https://csrc.nist.gov/pubs/fips/203/ipd>. +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] with const generics @@ -4754,86 +4853,77 @@ generics - ETA2= 2 - ETA2_RANDOMNESS_SIZE= 128 */ -static void -encrypt_7b1(Eurydice_slice public_key, uint8_t message[32U], - Eurydice_slice randomness, uint8_t ret[1568U]) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 t_as_ntt[4U]; - deserialize_ring_elements_reduced_4f3( - Eurydice_slice_subslice_to(public_key, (size_t)1536U, uint8_t, size_t), - t_as_ntt); - Eurydice_slice seed = - Eurydice_slice_subslice_from(public_key, (size_t)1536U, uint8_t, size_t); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 A[4U][4U]; - uint8_t ret0[34U]; - libcrux_ml_kem_utils_into_padded_array_6d1(seed, ret0); - sample_matrix_A_e71(ret0, false, A); - uint8_t prf_input[33U]; - libcrux_ml_kem_utils_into_padded_array_6d2(randomness, prf_input); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input0[33U]; - memcpy(copy_of_prf_input0, prf_input, (size_t)33U * sizeof(uint8_t)); - tuple_710 uu____1 = sample_vector_cbd_then_ntt_781(copy_of_prf_input0, 0U); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 r_as_ntt[4U]; - memcpy( - r_as_ntt, uu____1.fst, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - uint8_t domain_separator0 = uu____1.snd; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input[33U]; - memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t)); - tuple_710 uu____3 = - sample_ring_element_cbd_a81(copy_of_prf_input, domain_separator0); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_1[4U]; - memcpy( - error_1, uu____3.fst, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - uint8_t domain_separator = uu____3.snd; - prf_input[32U] = domain_separator; - uint8_t prf_output[128U]; - PRF_f1_2e4(Eurydice_array_to_slice((size_t)33U, prf_input, uint8_t), - prf_output); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_2 = - sample_from_binomial_distribution_ca( - Eurydice_array_to_slice((size_t)128U, prf_output, uint8_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 u[4U]; - compute_vector_u_931(A, r_as_ntt, error_1, u); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_message[32U]; - memcpy(copy_of_message, message, (size_t)32U * sizeof(uint8_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 message_as_ring_element = - deserialize_then_decompress_message_f7(copy_of_message); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 v = - compute_ring_element_v_541(t_as_ntt, r_as_ntt, &error_2, - &message_as_ring_element); +static KRML_MUSTINLINE void +encrypt_unpacked_2a( + IndCpaPublicKeyUnpacked_af *public_key, uint8_t *message, + Eurydice_slice randomness, uint8_t ret[1568U]) +{ uint8_t ciphertext[1568U] = { 0U }; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____5[4U]; + tuple_08 uu____0 = + encrypt_c1_85(randomness, public_key->A, + Eurydice_array_to_subslice3(ciphertext, (size_t)0U, + (size_t)1408U, uint8_t *)); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d r_as_ntt[4U]; memcpy( - uu____5, u, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - compress_then_serialize_u_281( - uu____5, Eurydice_array_to_subslice2(ciphertext, (size_t)0U, - (size_t)1408U, uint8_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____6 = v; - compress_then_serialize_ring_element_v_650( - uu____6, Eurydice_array_to_subslice_from((size_t)1568U, ciphertext, - (size_t)1408U, uint8_t, size_t)); + r_as_ntt, uu____0.fst, + (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d error_2 = uu____0.snd; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *uu____1 = + public_key->t_as_ntt; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *uu____2 = r_as_ntt; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *uu____3 = &error_2; + uint8_t *uu____4 = message; + encrypt_c2_00( + uu____1, uu____2, uu____3, uu____4, + Eurydice_array_to_subslice_from((size_t)1568U, ciphertext, (size_t)1408U, + uint8_t, size_t, uint8_t[])); memcpy(ret, ciphertext, (size_t)1568U * sizeof(uint8_t)); } /** -This function found in impl {(libcrux_ml_kem::variant::Variant for -libcrux_ml_kem::variant::MlKem)} +A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] with const +generics +- K= 4 +- CIPHERTEXT_SIZE= 1568 +- T_AS_NTT_ENCODED_SIZE= 1536 +- C1_LEN= 1408 +- C2_LEN= 160 +- U_COMPRESSION_FACTOR= 11 +- V_COMPRESSION_FACTOR= 5 +- BLOCK_LEN= 352 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +- ETA2= 2 +- ETA2_RANDOMNESS_SIZE= 128 +*/ +static KRML_MUSTINLINE void +encrypt_2a0(Eurydice_slice public_key, + uint8_t *message, + Eurydice_slice randomness, + uint8_t ret[1568U]) +{ + IndCpaPublicKeyUnpacked_af unpacked_public_key = + build_unpacked_public_key_3f0(public_key); + uint8_t ret0[1568U]; + encrypt_unpacked_2a(&unpacked_public_key, message, randomness, ret0); + memcpy(ret, ret0, (size_t)1568U * sizeof(uint8_t)); +} + +/** +This function found in impl {libcrux_ml_kem::variant::Variant for +libcrux_ml_kem::variant::MlKem} */ /** -A monomorphic instance of libcrux_ml_kem.variant.kdf_d8 +A monomorphic instance of libcrux_ml_kem.variant.kdf_39 with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]] with const generics - K= 4 - CIPHERTEXT_SIZE= 1568 */ static KRML_MUSTINLINE void -kdf_d8_93(Eurydice_slice shared_secret, +kdf_39_60(Eurydice_slice shared_secret, uint8_t ret[32U]) { uint8_t out[32U] = { 0U }; @@ -4855,83 +4945,98 @@ libcrux_ml_kem_variant_MlKem with const generics - C2_SIZE= 160 - VECTOR_U_COMPRESSION_FACTOR= 11 - VECTOR_V_COMPRESSION_FACTOR= 5 -- VECTOR_U_BLOCK_LEN= 352 +- C1_BLOCK_SIZE= 352 - ETA1= 2 - ETA1_RANDOMNESS_SIZE= 128 - ETA2= 2 - ETA2_RANDOMNESS_SIZE= 128 */ -tuple_21 -libcrux_ml_kem_ind_cca_encapsulate_eb1( - libcrux_ml_kem_types_MlKemPublicKey_1f *public_key, - uint8_t randomness[32U]) +tuple_fa +libcrux_ml_kem_ind_cca_encapsulate_ca0( + libcrux_ml_kem_types_MlKemPublicKey_64 *public_key, uint8_t *randomness) { uint8_t randomness0[32U]; - entropy_preprocess_d8_d1( + entropy_preprocess_39_03( Eurydice_array_to_slice((size_t)32U, randomness, uint8_t), randomness0); uint8_t to_hash[64U]; - libcrux_ml_kem_utils_into_padded_array_6d( + libcrux_ml_kem_utils_into_padded_array_24( Eurydice_array_to_slice((size_t)32U, randomness0, uint8_t), to_hash); Eurydice_slice uu____0 = Eurydice_array_to_subslice_from( (size_t)64U, to_hash, LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t, - size_t); - uint8_t ret[32U]; - H_f1_191(Eurydice_array_to_slice( - (size_t)1568U, libcrux_ml_kem_types_as_slice_cb_3d1(public_key), - uint8_t), - ret); + size_t, uint8_t[]); + uint8_t ret0[32U]; + H_4a_ac(Eurydice_array_to_slice( + (size_t)1568U, libcrux_ml_kem_types_as_slice_e6_af(public_key), + uint8_t), + ret0); Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)32U, ret, uint8_t), uint8_t); + uu____0, Eurydice_array_to_slice((size_t)32U, ret0, uint8_t), uint8_t); uint8_t hashed[64U]; - G_f1_381(Eurydice_array_to_slice((size_t)64U, to_hash, uint8_t), hashed); + G_4a_ac(Eurydice_array_to_slice((size_t)64U, to_hash, uint8_t), hashed); Eurydice_slice_uint8_t_x2 uu____1 = Eurydice_slice_split_at( Eurydice_array_to_slice((size_t)64U, hashed, uint8_t), LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, uint8_t, Eurydice_slice_uint8_t_x2); Eurydice_slice shared_secret = uu____1.fst; Eurydice_slice pseudorandomness = uu____1.snd; - Eurydice_slice uu____2 = Eurydice_array_to_slice( - (size_t)1568U, libcrux_ml_kem_types_as_slice_cb_3d1(public_key), uint8_t); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_randomness[32U]; - memcpy(copy_of_randomness, randomness0, (size_t)32U * sizeof(uint8_t)); uint8_t ciphertext[1568U]; - encrypt_7b1(uu____2, copy_of_randomness, pseudorandomness, ciphertext); + encrypt_2a0(Eurydice_array_to_slice( + (size_t)1568U, + libcrux_ml_kem_types_as_slice_e6_af(public_key), uint8_t), + randomness0, pseudorandomness, ciphertext); /* Passing arrays by value in Rust generates a copy in C */ uint8_t copy_of_ciphertext[1568U]; memcpy(copy_of_ciphertext, ciphertext, (size_t)1568U * sizeof(uint8_t)); - libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext ciphertext0 = - libcrux_ml_kem_types_from_01_331(copy_of_ciphertext); - uint8_t shared_secret_array[32U]; - kdf_d8_93(shared_secret, shared_secret_array); - libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext uu____5 = ciphertext0; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_shared_secret_array[32U]; - memcpy(copy_of_shared_secret_array, shared_secret_array, - (size_t)32U * sizeof(uint8_t)); - tuple_21 lit; - lit.fst = uu____5; - memcpy(lit.snd, copy_of_shared_secret_array, (size_t)32U * sizeof(uint8_t)); + tuple_fa lit; + lit.fst = libcrux_ml_kem_types_from_e0_af(copy_of_ciphertext); + uint8_t ret[32U]; + kdf_39_60(shared_secret, ret); + memcpy(lit.snd, ret, (size_t)32U * sizeof(uint8_t)); return lit; } /** +This function found in impl {core::ops::function::FnMut<(usize), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, +CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, +V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- K= 4 +- CIPHERTEXT_SIZE= 1568 +- VECTOR_U_ENCODED_SIZE= 1408 +- U_COMPRESSION_FACTOR= 11 +- V_COMPRESSION_FACTOR= 5 +*/ +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_0b_7d( + void **_) +{ + return ZERO_d6_ea(); +} + +/** A monomorphic instance of libcrux_ml_kem.serialize.deserialize_to_uncompressed_ring_element with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -deserialize_to_uncompressed_ring_element_27(Eurydice_slice serialized) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +deserialize_to_uncompressed_ring_element_ea(Eurydice_slice serialized) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = ZERO_89_c3(); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re = ZERO_d6_ea(); for (size_t i = (size_t)0U; i < Eurydice_slice_len(serialized, uint8_t) / (size_t)24U; i++) { size_t i0 = i; - Eurydice_slice bytes = Eurydice_slice_subslice2( - serialized, i0 * (size_t)24U, i0 * (size_t)24U + (size_t)24U, uint8_t); + Eurydice_slice bytes = + Eurydice_slice_subslice3(serialized, i0 * (size_t)24U, + i0 * (size_t)24U + (size_t)24U, uint8_t *); libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_deserialize_12_0d(bytes); + libcrux_ml_kem_vector_portable_deserialize_12_b8(bytes); re.coefficients[i0] = uu____0; } return re; @@ -4941,47 +5046,48 @@ deserialize_to_uncompressed_ring_element_27(Eurydice_slice serialized) Call [`deserialize_to_uncompressed_ring_element`] for each ring element. */ /** -A monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_secret_key +A monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - K= 4 */ static KRML_MUSTINLINE void -deserialize_secret_key_7b1( +deserialize_vector_d0( Eurydice_slice secret_key, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[4U]) + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *secret_as_ntt) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[4U]; - KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, - secret_as_ntt[i] = ZERO_89_c3();); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len(secret_key, uint8_t) / - LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT; - i++) { - size_t i0 = i; - Eurydice_slice secret_bytes = Eurydice_slice_subslice2( - secret_key, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT + - LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - uint8_t); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____0 = - deserialize_to_uncompressed_ring_element_27(secret_bytes); - secret_as_ntt[i0] = uu____0; - } - memcpy( - ret, secret_as_ntt, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); + KRML_MAYBE_FOR4( + i, (size_t)0U, (size_t)4U, (size_t)1U, size_t i0 = i; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d uu____0 = + deserialize_to_uncompressed_ring_element_ea(Eurydice_slice_subslice3( + secret_key, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, + (i0 + (size_t)1U) * + LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, + uint8_t *)); + secret_as_ntt[i0] = uu____0;); } /** +This function found in impl {core::ops::function::FnMut<(usize), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]> for +libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, +CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]} +*/ +/** A monomorphic instance of -libcrux_ml_kem.ind_cpa.unpacked.IndCpaPrivateKeyUnpacked with types +libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- $4size_t +- K= 4 +- CIPHERTEXT_SIZE= 1568 +- U_COMPRESSION_FACTOR= 11 */ -typedef struct IndCpaPrivateKeyUnpacked_42_s { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[4U]; -} IndCpaPrivateKeyUnpacked_42; +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_35_00( + void **_) +{ + return ZERO_d6_ea(); +} /** A monomorphic instance of @@ -4990,36 +5096,39 @@ const generics - COEFFICIENT_BITS= 10 */ static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector -decompress_ciphertext_coefficient_84( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +decompress_ciphertext_coefficient_ef( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { size_t i0 = i; - int32_t decompressed = (int32_t)v.elements[i0] * - (int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS; + int32_t decompressed = + libcrux_secrets_int_as_i32_f5(a.elements[i0]) * + libcrux_secrets_int_as_i32_f5( + libcrux_secrets_int_public_integers_classify_27_39( + LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS)); decompressed = (decompressed << 1U) + ((int32_t)1 << (uint32_t)(int32_t)10); decompressed = decompressed >> (uint32_t)((int32_t)10 + (int32_t)1); - v.elements[i0] = (int16_t)decompressed; + a.elements[i0] = libcrux_secrets_int_as_i16_36(decompressed); } - return v; + return a; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ /** A monomorphic instance of -libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_0d with const +libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_b8 with const generics - COEFFICIENT_BITS= 10 */ static libcrux_ml_kem_vector_portable_vector_type_PortableVector -decompress_ciphertext_coefficient_0d_b3( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +decompress_ciphertext_coefficient_b8_ef( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { - return decompress_ciphertext_coefficient_84(v); + return decompress_ciphertext_coefficient_ef(a); } /** @@ -5028,19 +5137,20 @@ libcrux_ml_kem.serialize.deserialize_then_decompress_10 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -deserialize_then_decompress_10_50(Eurydice_slice serialized) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +deserialize_then_decompress_10_ea(Eurydice_slice serialized) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = ZERO_89_c3(); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re = ZERO_d6_ea(); for (size_t i = (size_t)0U; i < Eurydice_slice_len(serialized, uint8_t) / (size_t)20U; i++) { size_t i0 = i; - Eurydice_slice bytes = Eurydice_slice_subslice2( - serialized, i0 * (size_t)20U, i0 * (size_t)20U + (size_t)20U, uint8_t); + Eurydice_slice bytes = + Eurydice_slice_subslice3(serialized, i0 * (size_t)20U, + i0 * (size_t)20U + (size_t)20U, uint8_t *); libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient = - libcrux_ml_kem_vector_portable_deserialize_10_0d(bytes); + libcrux_ml_kem_vector_portable_deserialize_10_b8(bytes); libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - decompress_ciphertext_coefficient_0d_b3(coefficient); + decompress_ciphertext_coefficient_b8_ef(coefficient); re.coefficients[i0] = uu____0; } return re; @@ -5053,36 +5163,39 @@ const generics - COEFFICIENT_BITS= 11 */ static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector -decompress_ciphertext_coefficient_840( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +decompress_ciphertext_coefficient_c4( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { size_t i0 = i; - int32_t decompressed = (int32_t)v.elements[i0] * - (int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS; + int32_t decompressed = + libcrux_secrets_int_as_i32_f5(a.elements[i0]) * + libcrux_secrets_int_as_i32_f5( + libcrux_secrets_int_public_integers_classify_27_39( + LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS)); decompressed = (decompressed << 1U) + ((int32_t)1 << (uint32_t)(int32_t)11); decompressed = decompressed >> (uint32_t)((int32_t)11 + (int32_t)1); - v.elements[i0] = (int16_t)decompressed; + a.elements[i0] = libcrux_secrets_int_as_i16_36(decompressed); } - return v; + return a; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ /** A monomorphic instance of -libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_0d with const +libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_b8 with const generics - COEFFICIENT_BITS= 11 */ static libcrux_ml_kem_vector_portable_vector_type_PortableVector -decompress_ciphertext_coefficient_0d_b30( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +decompress_ciphertext_coefficient_b8_c4( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { - return decompress_ciphertext_coefficient_840(v); + return decompress_ciphertext_coefficient_c4(a); } /** @@ -5091,19 +5204,20 @@ libcrux_ml_kem.serialize.deserialize_then_decompress_11 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -deserialize_then_decompress_11_1f(Eurydice_slice serialized) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +deserialize_then_decompress_11_ea(Eurydice_slice serialized) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = ZERO_89_c3(); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re = ZERO_d6_ea(); for (size_t i = (size_t)0U; i < Eurydice_slice_len(serialized, uint8_t) / (size_t)22U; i++) { size_t i0 = i; - Eurydice_slice bytes = Eurydice_slice_subslice2( - serialized, i0 * (size_t)22U, i0 * (size_t)22U + (size_t)22U, uint8_t); + Eurydice_slice bytes = + Eurydice_slice_subslice3(serialized, i0 * (size_t)22U, + i0 * (size_t)22U + (size_t)22U, uint8_t *); libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient = - libcrux_ml_kem_vector_portable_deserialize_11_0d(bytes); + libcrux_ml_kem_vector_portable_deserialize_11_b8(bytes); libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - decompress_ciphertext_coefficient_0d_b30(coefficient); + decompress_ciphertext_coefficient_b8_c4(coefficient); re.coefficients[i0] = uu____0; } return re; @@ -5115,10 +5229,10 @@ libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_u with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - COMPRESSION_FACTOR= 11 */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -deserialize_then_decompress_ring_element_u_c20(Eurydice_slice serialized) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +deserialize_then_decompress_ring_element_u_5e(Eurydice_slice serialized) { - return deserialize_then_decompress_11_1f(serialized); + return deserialize_then_decompress_11_ea(serialized); } /** @@ -5128,18 +5242,18 @@ with const generics - VECTOR_U_COMPRESSION_FACTOR= 11 */ static KRML_MUSTINLINE void -ntt_vector_u_6f0( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) +ntt_vector_u_5e( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re) { size_t zeta_i = (size_t)0U; - ntt_at_layer_4_plus_8c(&zeta_i, re, (size_t)7U); - ntt_at_layer_4_plus_8c(&zeta_i, re, (size_t)6U); - ntt_at_layer_4_plus_8c(&zeta_i, re, (size_t)5U); - ntt_at_layer_4_plus_8c(&zeta_i, re, (size_t)4U); - ntt_at_layer_3_34(&zeta_i, re); - ntt_at_layer_2_26(&zeta_i, re); - ntt_at_layer_1_3c(&zeta_i, re); - poly_barrett_reduce_89_d8(re); + ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U); + ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U); + ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U); + ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U); + ntt_at_layer_3_ea(&zeta_i, re); + ntt_at_layer_2_ea(&zeta_i, re); + ntt_at_layer_1_ea(&zeta_i, re); + poly_barrett_reduce_d6_ea(re); } /** @@ -5155,13 +5269,15 @@ with const generics - U_COMPRESSION_FACTOR= 11 */ static KRML_MUSTINLINE void -deserialize_then_decompress_u_1a1( +deserialize_then_decompress_u_00( uint8_t *ciphertext, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[4U]) + libcrux_ml_kem_polynomial_PolynomialRingElement_1d ret[4U]) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 u_as_ntt[4U]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d u_as_ntt[4U]; KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, - u_as_ntt[i] = ZERO_89_c3();); + /* original Rust expression is not an lvalue in C */ + void *lvalue = (void *)0U; + u_as_ntt[i] = call_mut_35_00(&lvalue);); for (size_t i = (size_t)0U; i < Eurydice_slice_len( Eurydice_array_to_slice((size_t)1568U, ciphertext, uint8_t), @@ -5170,7 +5286,7 @@ deserialize_then_decompress_u_1a1( (size_t)11U / (size_t)8U); i++) { size_t i0 = i; - Eurydice_slice u_bytes = Eurydice_array_to_subslice2( + Eurydice_slice u_bytes = Eurydice_array_to_subslice3( ciphertext, i0 * (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U), @@ -5178,13 +5294,13 @@ deserialize_then_decompress_u_1a1( (size_t)11U / (size_t)8U) + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U, - uint8_t); - u_as_ntt[i0] = deserialize_then_decompress_ring_element_u_c20(u_bytes); - ntt_vector_u_6f0(&u_as_ntt[i0]); + uint8_t *); + u_as_ntt[i0] = deserialize_then_decompress_ring_element_u_5e(u_bytes); + ntt_vector_u_5e(&u_as_ntt[i0]); } memcpy( ret, u_as_ntt, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); + (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); } /** @@ -5194,36 +5310,39 @@ const generics - COEFFICIENT_BITS= 4 */ static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector -decompress_ciphertext_coefficient_841( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +decompress_ciphertext_coefficient_d1( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { size_t i0 = i; - int32_t decompressed = (int32_t)v.elements[i0] * - (int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS; + int32_t decompressed = + libcrux_secrets_int_as_i32_f5(a.elements[i0]) * + libcrux_secrets_int_as_i32_f5( + libcrux_secrets_int_public_integers_classify_27_39( + LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS)); decompressed = (decompressed << 1U) + ((int32_t)1 << (uint32_t)(int32_t)4); decompressed = decompressed >> (uint32_t)((int32_t)4 + (int32_t)1); - v.elements[i0] = (int16_t)decompressed; + a.elements[i0] = libcrux_secrets_int_as_i16_36(decompressed); } - return v; + return a; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ /** A monomorphic instance of -libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_0d with const +libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_b8 with const generics - COEFFICIENT_BITS= 4 */ static libcrux_ml_kem_vector_portable_vector_type_PortableVector -decompress_ciphertext_coefficient_0d_b31( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +decompress_ciphertext_coefficient_b8_d1( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { - return decompress_ciphertext_coefficient_841(v); + return decompress_ciphertext_coefficient_d1(a); } /** @@ -5232,19 +5351,19 @@ with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -deserialize_then_decompress_4_94(Eurydice_slice serialized) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +deserialize_then_decompress_4_ea(Eurydice_slice serialized) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = ZERO_89_c3(); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re = ZERO_d6_ea(); for (size_t i = (size_t)0U; i < Eurydice_slice_len(serialized, uint8_t) / (size_t)8U; i++) { size_t i0 = i; - Eurydice_slice bytes = Eurydice_slice_subslice2( - serialized, i0 * (size_t)8U, i0 * (size_t)8U + (size_t)8U, uint8_t); + Eurydice_slice bytes = Eurydice_slice_subslice3( + serialized, i0 * (size_t)8U, i0 * (size_t)8U + (size_t)8U, uint8_t *); libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient = - libcrux_ml_kem_vector_portable_deserialize_4_0d(bytes); + libcrux_ml_kem_vector_portable_deserialize_4_b8(bytes); libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - decompress_ciphertext_coefficient_0d_b31(coefficient); + decompress_ciphertext_coefficient_b8_d1(coefficient); re.coefficients[i0] = uu____0; } return re; @@ -5257,36 +5376,39 @@ const generics - COEFFICIENT_BITS= 5 */ static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector -decompress_ciphertext_coefficient_842( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +decompress_ciphertext_coefficient_f4( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) { size_t i0 = i; - int32_t decompressed = (int32_t)v.elements[i0] * - (int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS; + int32_t decompressed = + libcrux_secrets_int_as_i32_f5(a.elements[i0]) * + libcrux_secrets_int_as_i32_f5( + libcrux_secrets_int_public_integers_classify_27_39( + LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS)); decompressed = (decompressed << 1U) + ((int32_t)1 << (uint32_t)(int32_t)5); decompressed = decompressed >> (uint32_t)((int32_t)5 + (int32_t)1); - v.elements[i0] = (int16_t)decompressed; + a.elements[i0] = libcrux_secrets_int_as_i16_36(decompressed); } - return v; + return a; } /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ /** A monomorphic instance of -libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_0d with const +libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_b8 with const generics - COEFFICIENT_BITS= 5 */ static libcrux_ml_kem_vector_portable_vector_type_PortableVector -decompress_ciphertext_coefficient_0d_b32( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v) +decompress_ciphertext_coefficient_b8_f4( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a) { - return decompress_ciphertext_coefficient_842(v); + return decompress_ciphertext_coefficient_f4(a); } /** @@ -5295,19 +5417,20 @@ with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -deserialize_then_decompress_5_100(Eurydice_slice serialized) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +deserialize_then_decompress_5_ea(Eurydice_slice serialized) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = ZERO_89_c3(); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re = ZERO_d6_ea(); for (size_t i = (size_t)0U; i < Eurydice_slice_len(serialized, uint8_t) / (size_t)10U; i++) { size_t i0 = i; - Eurydice_slice bytes = Eurydice_slice_subslice2( - serialized, i0 * (size_t)10U, i0 * (size_t)10U + (size_t)10U, uint8_t); + Eurydice_slice bytes = + Eurydice_slice_subslice3(serialized, i0 * (size_t)10U, + i0 * (size_t)10U + (size_t)10U, uint8_t *); re.coefficients[i0] = - libcrux_ml_kem_vector_portable_deserialize_5_0d(bytes); + libcrux_ml_kem_vector_portable_deserialize_5_b8(bytes); libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____1 = - decompress_ciphertext_coefficient_0d_b32(re.coefficients[i0]); + decompress_ciphertext_coefficient_b8_f4(re.coefficients[i0]); re.coefficients[i0] = uu____1; } return re; @@ -5317,45 +5440,60 @@ deserialize_then_decompress_5_100(Eurydice_slice serialized) A monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics +- K= 4 - COMPRESSION_FACTOR= 5 */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -deserialize_then_decompress_ring_element_v_930(Eurydice_slice serialized) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +deserialize_then_decompress_ring_element_v_ff(Eurydice_slice serialized) { - return deserialize_then_decompress_5_100(serialized); + return deserialize_then_decompress_5_ea(serialized); } /** -This function found in impl -{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]} -*/ -/** -A monomorphic instance of libcrux_ml_kem.polynomial.subtract_reduce_89 +A monomorphic instance of libcrux_ml_kem.polynomial.subtract_reduce with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -subtract_reduce_89_61(libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 b) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +subtract_reduce_ea(libcrux_ml_kem_polynomial_PolynomialRingElement_1d *myself, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d b) { - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) { + for (size_t i = (size_t)0U; i < VECTORS_IN_RING_ELEMENT; i++) { size_t i0 = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient_normal_form = - libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_0d( + libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8( b.coefficients[i0], (int16_t)1441); - libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_barrett_reduce_0d( - libcrux_ml_kem_vector_portable_sub_0d(self->coefficients[i0], - &coefficient_normal_form)); - b.coefficients[i0] = uu____0; + libcrux_ml_kem_vector_portable_vector_type_PortableVector diff = + libcrux_ml_kem_vector_portable_sub_b8(myself->coefficients[i0], + &coefficient_normal_form); + libcrux_ml_kem_vector_portable_vector_type_PortableVector red = + libcrux_ml_kem_vector_portable_barrett_reduce_b8(diff); + b.coefficients[i0] = red; } return b; } /** +This function found in impl +{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.polynomial.subtract_reduce_d6 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics + +*/ +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +subtract_reduce_d6_ea(libcrux_ml_kem_polynomial_PolynomialRingElement_1d *self, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d b) +{ + return subtract_reduce_ea(self, b); +} + +/** The following functions compute various expressions involving vectors and matrices. The computation of these expressions has been abstracted away into these functions in order to save on loop iterations. @@ -5367,20 +5505,19 @@ with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - K= 4 */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -compute_message_c91( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *v, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *secret_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *u_as_ntt) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +compute_message_d0( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *v, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *secret_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *u_as_ntt) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result = ZERO_89_c3(); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d result = ZERO_d6_ea(); KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product = - ntt_multiply_89_3b(&secret_as_ntt[i0], &u_as_ntt[i0]); - add_to_ring_element_89_1e1(&result, &product);); - invert_ntt_montgomery_c91(&result); - result = subtract_reduce_89_61(v, result); - return result; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d product = + ntt_multiply_d6_ea(&secret_as_ntt[i0], &u_as_ntt[i0]); + add_to_ring_element_d6_d0(&result, &product);); + invert_ntt_montgomery_d0(&result); + return subtract_reduce_d6_ea(v, result); } /** @@ -5390,24 +5527,23 @@ libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics */ static KRML_MUSTINLINE void -compress_then_serialize_message_d4( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re, uint8_t ret[32U]) +compress_then_serialize_message_ea( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re, uint8_t ret[32U]) { uint8_t serialized[32U] = { 0U }; KRML_MAYBE_FOR16( i, (size_t)0U, (size_t)16U, (size_t)1U, size_t i0 = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient = - to_unsigned_representative_84(re.coefficients[i0]); + to_unsigned_field_modulus_ea(re.coefficients[i0]); libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient_compressed = - libcrux_ml_kem_vector_portable_compress_1_0d(coefficient); - uint8_t bytes[2U]; libcrux_ml_kem_vector_portable_serialize_1_0d( + libcrux_ml_kem_vector_portable_compress_1_b8(coefficient); + uint8_t bytes[2U]; libcrux_ml_kem_vector_portable_serialize_1_b8( coefficient_compressed, bytes); - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( - serialized, (size_t)2U * i0, (size_t)2U * i0 + (size_t)2U, uint8_t); - Eurydice_slice_copy(uu____0, - Eurydice_array_to_slice((size_t)2U, bytes, uint8_t), - uint8_t);); + Eurydice_slice_copy( + Eurydice_array_to_subslice3(serialized, (size_t)2U * i0, + (size_t)2U * i0 + (size_t)2U, uint8_t *), + Eurydice_array_to_slice((size_t)2U, bytes, uint8_t), uint8_t);); memcpy(ret, serialized, (size_t)32U * sizeof(uint8_t)); } @@ -5445,20 +5581,22 @@ with const generics - U_COMPRESSION_FACTOR= 11 - V_COMPRESSION_FACTOR= 5 */ -static void -decrypt_unpacked_6b1(IndCpaPrivateKeyUnpacked_42 *secret_key, - uint8_t *ciphertext, uint8_t ret[32U]) +static KRML_MUSTINLINE void +decrypt_unpacked_7d( + IndCpaPrivateKeyUnpacked_af *secret_key, uint8_t *ciphertext, + uint8_t ret[32U]) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 u_as_ntt[4U]; - deserialize_then_decompress_u_1a1(ciphertext, u_as_ntt); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 v = - deserialize_then_decompress_ring_element_v_930( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d u_as_ntt[4U]; + deserialize_then_decompress_u_00(ciphertext, u_as_ntt); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d v = + deserialize_then_decompress_ring_element_v_ff( Eurydice_array_to_subslice_from((size_t)1568U, ciphertext, - (size_t)1408U, uint8_t, size_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 message = - compute_message_c91(&v, secret_key->secret_as_ntt, u_as_ntt); + (size_t)1408U, uint8_t, size_t, + uint8_t[])); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d message = + compute_message_d0(&v, secret_key->secret_as_ntt, u_as_ntt); uint8_t ret0[32U]; - compress_then_serialize_message_d4(message, ret0); + compress_then_serialize_message_ea(message, ret0); memcpy(ret, ret0, (size_t)32U * sizeof(uint8_t)); } @@ -5472,24 +5610,23 @@ with const generics - U_COMPRESSION_FACTOR= 11 - V_COMPRESSION_FACTOR= 5 */ -static void -decrypt_121(Eurydice_slice secret_key, uint8_t *ciphertext, - uint8_t ret[32U]) +static KRML_MUSTINLINE void +decrypt_7d(Eurydice_slice secret_key, + uint8_t *ciphertext, uint8_t ret[32U]) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[4U]; - deserialize_secret_key_7b1(secret_key, secret_as_ntt); - /* Passing arrays by value in Rust generates a copy in C */ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 copy_of_secret_as_ntt[4U]; - memcpy( - copy_of_secret_as_ntt, secret_as_ntt, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - IndCpaPrivateKeyUnpacked_42 secret_key_unpacked; + IndCpaPrivateKeyUnpacked_af secret_key_unpacked; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d ret0[4U]; + KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, + /* original Rust expression is not an lvalue in C */ + void *lvalue = (void *)0U; + ret0[i] = call_mut_0b_7d(&lvalue);); memcpy( - secret_key_unpacked.secret_as_ntt, copy_of_secret_as_ntt, - (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - uint8_t ret0[32U]; - decrypt_unpacked_6b1(&secret_key_unpacked, ciphertext, ret0); - memcpy(ret, ret0, (size_t)32U * sizeof(uint8_t)); + secret_key_unpacked.secret_as_ntt, ret0, + (size_t)4U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); + deserialize_vector_d0(secret_key, secret_key_unpacked.secret_as_ntt); + uint8_t ret1[32U]; + decrypt_unpacked_7d(&secret_key_unpacked, ciphertext, ret1); + memcpy(ret, ret1, (size_t)32U * sizeof(uint8_t)); } /** @@ -5497,8 +5634,8 @@ A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF with const generics - LEN= 32 */ -static KRML_MUSTINLINE void -PRF_7c(Eurydice_slice input, uint8_t ret[32U]) +static inline void +PRF_9e(Eurydice_slice input, uint8_t ret[32U]) { uint8_t digest[32U] = { 0U }; libcrux_sha3_portable_shake256( @@ -5507,22 +5644,25 @@ PRF_7c(Eurydice_slice input, uint8_t ret[32U]) } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_f1 +A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a with const generics - K= 4 - LEN= 32 */ -static KRML_MUSTINLINE void -PRF_f1_2e3(Eurydice_slice input, uint8_t ret[32U]) +static inline void +PRF_4a_44(Eurydice_slice input, uint8_t ret[32U]) { - PRF_7c(input, ret); + PRF_9e(input, ret); } /** + This code verifies on some machines, runs out of memory on others +*/ +/** A monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], @@ -5545,69 +5685,57 @@ libcrux_ml_kem_variant_MlKem with const generics - IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600 */ void -libcrux_ml_kem_ind_cca_decapsulate_1f1( - libcrux_ml_kem_types_MlKemPrivateKey_95 *private_key, - libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext *ciphertext, - uint8_t ret[32U]) +libcrux_ml_kem_ind_cca_decapsulate_620( + libcrux_ml_kem_types_MlKemPrivateKey_83 *private_key, + libcrux_ml_kem_types_MlKemCiphertext_64 *ciphertext, uint8_t ret[32U]) { - Eurydice_slice_uint8_t_x2 uu____0 = Eurydice_slice_split_at( - Eurydice_array_to_slice((size_t)3168U, private_key->value, uint8_t), - (size_t)1536U, uint8_t, Eurydice_slice_uint8_t_x2); + Eurydice_slice_uint8_t_x4 uu____0 = + libcrux_ml_kem_types_unpack_private_key_1f( + Eurydice_array_to_slice((size_t)3168U, private_key->value, uint8_t)); Eurydice_slice ind_cpa_secret_key = uu____0.fst; - Eurydice_slice secret_key0 = uu____0.snd; - Eurydice_slice_uint8_t_x2 uu____1 = Eurydice_slice_split_at( - secret_key0, (size_t)1568U, uint8_t, Eurydice_slice_uint8_t_x2); - Eurydice_slice ind_cpa_public_key = uu____1.fst; - Eurydice_slice secret_key = uu____1.snd; - Eurydice_slice_uint8_t_x2 uu____2 = Eurydice_slice_split_at( - secret_key, LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t, - Eurydice_slice_uint8_t_x2); - Eurydice_slice ind_cpa_public_key_hash = uu____2.fst; - Eurydice_slice implicit_rejection_value = uu____2.snd; + Eurydice_slice ind_cpa_public_key = uu____0.snd; + Eurydice_slice ind_cpa_public_key_hash = uu____0.thd; + Eurydice_slice implicit_rejection_value = uu____0.f3; uint8_t decrypted[32U]; - decrypt_121(ind_cpa_secret_key, ciphertext->value, decrypted); + decrypt_7d(ind_cpa_secret_key, ciphertext->value, decrypted); uint8_t to_hash0[64U]; - libcrux_ml_kem_utils_into_padded_array_6d( + libcrux_ml_kem_utils_into_padded_array_24( Eurydice_array_to_slice((size_t)32U, decrypted, uint8_t), to_hash0); Eurydice_slice_copy( Eurydice_array_to_subslice_from( (size_t)64U, to_hash0, LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, - uint8_t, size_t), + uint8_t, size_t, uint8_t[]), ind_cpa_public_key_hash, uint8_t); uint8_t hashed[64U]; - G_f1_381(Eurydice_array_to_slice((size_t)64U, to_hash0, uint8_t), hashed); - Eurydice_slice_uint8_t_x2 uu____3 = Eurydice_slice_split_at( + G_4a_ac(Eurydice_array_to_slice((size_t)64U, to_hash0, uint8_t), hashed); + Eurydice_slice_uint8_t_x2 uu____1 = Eurydice_slice_split_at( Eurydice_array_to_slice((size_t)64U, hashed, uint8_t), LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, uint8_t, Eurydice_slice_uint8_t_x2); - Eurydice_slice shared_secret0 = uu____3.fst; - Eurydice_slice pseudorandomness = uu____3.snd; + Eurydice_slice shared_secret0 = uu____1.fst; + Eurydice_slice pseudorandomness = uu____1.snd; uint8_t to_hash[1600U]; - libcrux_ml_kem_utils_into_padded_array_6d4(implicit_rejection_value, to_hash); - Eurydice_slice uu____4 = Eurydice_array_to_subslice_from( + libcrux_ml_kem_utils_into_padded_array_7f(implicit_rejection_value, to_hash); + Eurydice_slice uu____2 = Eurydice_array_to_subslice_from( (size_t)1600U, to_hash, LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, - uint8_t, size_t); - Eurydice_slice_copy(uu____4, libcrux_ml_kem_types_as_ref_00_d81(ciphertext), + uint8_t, size_t, uint8_t[]); + Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_d3_af(ciphertext), uint8_t); uint8_t implicit_rejection_shared_secret0[32U]; - PRF_f1_2e3(Eurydice_array_to_slice((size_t)1600U, to_hash, uint8_t), - implicit_rejection_shared_secret0); - Eurydice_slice uu____5 = ind_cpa_public_key; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_decrypted[32U]; - memcpy(copy_of_decrypted, decrypted, (size_t)32U * sizeof(uint8_t)); + PRF_4a_44(Eurydice_array_to_slice((size_t)1600U, to_hash, uint8_t), + implicit_rejection_shared_secret0); uint8_t expected_ciphertext[1568U]; - encrypt_7b1(uu____5, copy_of_decrypted, pseudorandomness, + encrypt_2a0(ind_cpa_public_key, decrypted, pseudorandomness, expected_ciphertext); uint8_t implicit_rejection_shared_secret[32U]; - kdf_d8_93(Eurydice_array_to_slice((size_t)32U, + kdf_39_60(Eurydice_array_to_slice((size_t)32U, implicit_rejection_shared_secret0, uint8_t), implicit_rejection_shared_secret); uint8_t shared_secret[32U]; - kdf_d8_93(shared_secret0, shared_secret); + kdf_39_60(shared_secret0, shared_secret); uint8_t ret0[32U]; libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time( - libcrux_ml_kem_types_as_ref_00_d81(ciphertext), + libcrux_ml_kem_types_as_ref_d3_af(ciphertext), Eurydice_array_to_slice((size_t)1568U, expected_ciphertext, uint8_t), Eurydice_array_to_slice((size_t)32U, shared_secret, uint8_t), Eurydice_array_to_slice((size_t)32U, implicit_rejection_shared_secret, @@ -5617,110 +5745,165 @@ libcrux_ml_kem_ind_cca_decapsulate_1f1( } /** - This function deserializes ring elements and reduces the result by the field - modulus. +This function found in impl {core::ops::function::FnMut<(usize), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]> for +libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, +K>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of +libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b with +types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const +generics +- K= 3 +*/ +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_0b_1b( + void **_) +{ + return ZERO_d6_ea(); +} - This function MUST NOT be used on secret inputs. +/** + See [deserialize_ring_elements_reduced_out]. */ /** A monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- PUBLIC_KEY_SIZE= 800 -- K= 2 +- K= 3 */ static KRML_MUSTINLINE void -deserialize_ring_elements_reduced_4f2( +deserialize_ring_elements_reduced_1b( Eurydice_slice public_key, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[2U]) + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *deserialized_pk) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 deserialized_pk[2U]; - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, - deserialized_pk[i] = ZERO_89_c3();); for (size_t i = (size_t)0U; i < Eurydice_slice_len(public_key, uint8_t) / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT; i++) { size_t i0 = i; - Eurydice_slice ring_element = Eurydice_slice_subslice2( + Eurydice_slice ring_element = Eurydice_slice_subslice3( public_key, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT + LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - uint8_t); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____0 = - deserialize_to_reduced_ring_element_45(ring_element); + uint8_t *); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d uu____0 = + deserialize_to_reduced_ring_element_ea(ring_element); deserialized_pk[i0] = uu____0; } +} + +/** + This function deserializes ring elements and reduces the result by the field + modulus. + + This function MUST NOT be used on secret inputs. +*/ +/** +A monomorphic instance of +libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out with types +libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics +- K= 3 +*/ +static KRML_MUSTINLINE void +deserialize_ring_elements_reduced_out_1b( + Eurydice_slice public_key, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d ret[3U]) +{ + libcrux_ml_kem_polynomial_PolynomialRingElement_1d deserialized_pk[3U]; + KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, + /* original Rust expression is not an lvalue in C */ + void *lvalue = (void *)0U; + deserialized_pk[i] = call_mut_0b_1b(&lvalue);); + deserialize_ring_elements_reduced_1b(public_key, deserialized_pk); memcpy( ret, deserialized_pk, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); + (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); } /** Call [`serialize_uncompressed_ring_element`] for each ring element. */ /** -A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_secret_key +A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- K= 2 -- OUT_LEN= 768 +- K= 3 */ static KRML_MUSTINLINE void -serialize_secret_key_a30( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *key, - uint8_t ret[768U]) +serialize_vector_1b( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *key, + Eurydice_slice out) { - uint8_t out[768U] = { 0U }; for (size_t i = (size_t)0U; i < Eurydice_slice_len( Eurydice_array_to_slice( - (size_t)2U, key, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); + (size_t)3U, key, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d), + libcrux_ml_kem_polynomial_PolynomialRingElement_1d); i++) { size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = key[i0]; - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re = key[i0]; + Eurydice_slice uu____0 = Eurydice_slice_subslice3( out, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - uint8_t); - uint8_t ret0[384U]; - serialize_uncompressed_ring_element_3c(&re, ret0); + uint8_t *); + uint8_t ret[384U]; + serialize_uncompressed_ring_element_ea(&re, ret); Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)384U, ret0, uint8_t), uint8_t); + uu____0, Eurydice_array_to_slice((size_t)384U, ret, uint8_t), uint8_t); } - memcpy(ret, out, (size_t)768U * sizeof(uint8_t)); } /** Concatenate `t` and `ρ` into the public key. */ /** -A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key +A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- K= 2 -- RANKED_BYTES_PER_RING_ELEMENT= 768 -- PUBLIC_KEY_SIZE= 800 +- K= 3 +- PUBLIC_KEY_SIZE= 1184 */ static KRML_MUSTINLINE void -serialize_public_key_670( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *t_as_ntt, - Eurydice_slice seed_for_a, uint8_t ret[800U]) -{ - uint8_t public_key_serialized[800U] = { 0U }; - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( - public_key_serialized, (size_t)0U, (size_t)768U, uint8_t); - uint8_t ret0[768U]; - serialize_secret_key_a30(t_as_ntt, ret0); - Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)768U, ret0, uint8_t), uint8_t); +serialize_public_key_mut_89( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *t_as_ntt, + Eurydice_slice seed_for_a, uint8_t *serialized) +{ + serialize_vector_1b( + t_as_ntt, + Eurydice_array_to_subslice3( + serialized, (size_t)0U, + libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U), + uint8_t *)); Eurydice_slice_copy( - Eurydice_array_to_subslice_from((size_t)800U, public_key_serialized, - (size_t)768U, uint8_t, size_t), + Eurydice_array_to_subslice_from( + (size_t)1184U, serialized, + libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U), + uint8_t, size_t, uint8_t[]), seed_for_a, uint8_t); - memcpy(ret, public_key_serialized, (size_t)800U * sizeof(uint8_t)); +} + +/** + Concatenate `t` and `ρ` into the public key. +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- K= 3 +- PUBLIC_KEY_SIZE= 1184 +*/ +static KRML_MUSTINLINE void +serialize_public_key_89( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *t_as_ntt, + Eurydice_slice seed_for_a, uint8_t ret[1184U]) +{ + uint8_t public_key_serialized[1184U] = { 0U }; + serialize_public_key_mut_89(t_as_ntt, seed_for_a, public_key_serialized); + memcpy(ret, public_key_serialized, (size_t)1184U * sizeof(uint8_t)); } /** @@ -5734,40 +5917,43 @@ serialize_public_key_670( A monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- K= 2 -- RANKED_BYTES_PER_RING_ELEMENT= 768 -- PUBLIC_KEY_SIZE= 800 +- K= 3 +- PUBLIC_KEY_SIZE= 1184 */ bool -libcrux_ml_kem_ind_cca_validate_public_key_b70(uint8_t *public_key) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 deserialized_pk[2U]; - deserialize_ring_elements_reduced_4f2( - Eurydice_array_to_subslice_to((size_t)800U, public_key, (size_t)768U, - uint8_t, size_t), +libcrux_ml_kem_ind_cca_validate_public_key_89(uint8_t *public_key) +{ + libcrux_ml_kem_polynomial_PolynomialRingElement_1d deserialized_pk[3U]; + deserialize_ring_elements_reduced_out_1b( + Eurydice_array_to_subslice_to( + (size_t)1184U, public_key, + libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U), + uint8_t, size_t, uint8_t[]), deserialized_pk); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *uu____0 = deserialized_pk; - uint8_t public_key_serialized[800U]; - serialize_public_key_670( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *uu____0 = deserialized_pk; + uint8_t public_key_serialized[1184U]; + serialize_public_key_89( uu____0, - Eurydice_array_to_subslice_from((size_t)800U, public_key, (size_t)768U, - uint8_t, size_t), + Eurydice_array_to_subslice_from( + (size_t)1184U, public_key, + libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U), + uint8_t, size_t, uint8_t[]), public_key_serialized); - return core_array_equality___core__cmp__PartialEq__Array_U__N___for__Array_T__N____eq( - (size_t)800U, public_key, public_key_serialized, uint8_t, uint8_t, bool); + return Eurydice_array_eq((size_t)1184U, public_key, public_key_serialized, + uint8_t); } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.H_f1 +A monomorphic instance of libcrux_ml_kem.hash_functions.portable.H_4a with const generics -- K= 2 +- K= 3 */ -static KRML_MUSTINLINE void -H_f1_190(Eurydice_slice input, uint8_t ret[32U]) +static inline void +H_4a_e0(Eurydice_slice input, uint8_t ret[32U]) { libcrux_ml_kem_hash_functions_portable_H(input, ret); } @@ -5776,2069 +5962,238 @@ H_f1_190(Eurydice_slice input, uint8_t ret[32U]) Validate an ML-KEM private key. This implements the Hash check in 7.3 3. - Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE` - and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types. */ /** -A monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key -with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]] +A monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only +with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const generics -- K= 2 -- SECRET_KEY_SIZE= 1632 -- CIPHERTEXT_SIZE= 768 +- K= 3 +- SECRET_KEY_SIZE= 2400 */ bool -libcrux_ml_kem_ind_cca_validate_private_key_03( - libcrux_ml_kem_types_MlKemPrivateKey_5e *private_key, - libcrux_ml_kem_types_MlKemCiphertext_e8 *_ciphertext) +libcrux_ml_kem_ind_cca_validate_private_key_only_d6( + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key) { uint8_t t[32U]; - H_f1_190(Eurydice_array_to_subslice2( - private_key->value, (size_t)384U * (size_t)2U, - (size_t)768U * (size_t)2U + (size_t)32U, uint8_t), - t); - Eurydice_slice expected = Eurydice_array_to_subslice2( - private_key->value, (size_t)768U * (size_t)2U + (size_t)32U, - (size_t)768U * (size_t)2U + (size_t)64U, uint8_t); - return core_array_equality___core__cmp__PartialEq__0___Slice_U____for__Array_T__N___3__eq( - (size_t)32U, t, &expected, uint8_t, uint8_t, bool); -} - -/** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} -*/ -/** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.G_f1 -with const generics -- K= 2 -*/ -static KRML_MUSTINLINE void -G_f1_380(Eurydice_slice input, uint8_t ret[64U]) -{ - libcrux_ml_kem_hash_functions_portable_G(input, ret); + H_4a_e0(Eurydice_array_to_subslice3( + private_key->value, (size_t)384U * (size_t)3U, + (size_t)768U * (size_t)3U + (size_t)32U, uint8_t *), + t); + Eurydice_slice expected = Eurydice_array_to_subslice3( + private_key->value, (size_t)768U * (size_t)3U + (size_t)32U, + (size_t)768U * (size_t)3U + (size_t)64U, uint8_t *); + return Eurydice_array_eq_slice((size_t)32U, t, &expected, uint8_t, bool); } /** -This function found in impl {(libcrux_ml_kem::variant::Variant for -libcrux_ml_kem::variant::MlKem)} -*/ -/** -A monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_d8 -with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]] -with const generics -- K= 2 -*/ -static KRML_MUSTINLINE void -cpa_keygen_seed_d8_4d( - Eurydice_slice key_generation_seed, uint8_t ret[64U]) -{ - uint8_t seed[33U] = { 0U }; - Eurydice_slice_copy( - Eurydice_array_to_subslice2( - seed, (size_t)0U, - LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t), - key_generation_seed, uint8_t); - seed[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = - (uint8_t)(size_t)2U; - uint8_t ret0[64U]; - G_f1_380(Eurydice_array_to_slice((size_t)33U, seed, uint8_t), ret0); - memcpy(ret, ret0, (size_t)64U * sizeof(uint8_t)); -} + Validate an ML-KEM private key. -/** -A monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A.closure -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]] with const -generics -- K= 2 + This implements the Hash check in 7.3 3. + Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE` + and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types. */ -static void -closure_fc0( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[2U]) -{ - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, - ret[i] = ZERO_89_c3();); -} - /** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PortableHash +A monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key +with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const generics -- $2size_t -*/ -typedef struct PortableHash_8b_s { - libcrux_sha3_generic_keccak_KeccakState_48 shake128_state[2U]; -} PortableHash_8b; - -/** -A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_init_absorb with const generics -- K= 2 -*/ -static KRML_MUSTINLINE PortableHash_8b -shake128_init_absorb_790(uint8_t input[2U][34U]) -{ - libcrux_sha3_generic_keccak_KeccakState_48 shake128_state[2U]; - KRML_MAYBE_FOR2( - i, (size_t)0U, (size_t)2U, (size_t)1U, - shake128_state[i] = libcrux_sha3_portable_incremental_shake128_init();); - KRML_MAYBE_FOR2( - i, (size_t)0U, (size_t)2U, (size_t)1U, size_t i0 = i; - libcrux_sha3_portable_incremental_shake128_absorb_final( - &shake128_state[i0], - Eurydice_array_to_slice((size_t)34U, input[i0], uint8_t));); - /* Passing arrays by value in Rust generates a copy in C */ - libcrux_sha3_generic_keccak_KeccakState_48 copy_of_shake128_state[2U]; - memcpy(copy_of_shake128_state, shake128_state, - (size_t)2U * sizeof(libcrux_sha3_generic_keccak_KeccakState_48)); - PortableHash_8b lit; - memcpy(lit.shake128_state, copy_of_shake128_state, - (size_t)2U * sizeof(libcrux_sha3_generic_keccak_KeccakState_48)); - return lit; -} - -/** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} -*/ -/** -A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_f1 with const -generics -- K= 2 +- K= 3 +- SECRET_KEY_SIZE= 2400 +- CIPHERTEXT_SIZE= 1088 */ -static KRML_MUSTINLINE PortableHash_8b -shake128_init_absorb_f1_770(uint8_t input[2U][34U]) +bool +libcrux_ml_kem_ind_cca_validate_private_key_37( + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key, + libcrux_ml_kem_mlkem768_MlKem768Ciphertext *_ciphertext) { - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_input[2U][34U]; - memcpy(copy_of_input, input, (size_t)2U * sizeof(uint8_t[34U])); - return shake128_init_absorb_790(copy_of_input); + return libcrux_ml_kem_ind_cca_validate_private_key_only_d6(private_key); } /** A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_squeeze_three_blocks with const -generics -- K= 2 +libcrux_ml_kem.ind_cpa.unpacked.IndCpaPrivateKeyUnpacked with types +libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics +- $3size_t */ -static KRML_MUSTINLINE void -shake128_squeeze_three_blocks_eb0( - PortableHash_8b *st, uint8_t ret[2U][504U]) -{ - uint8_t out[2U][504U] = { { 0U } }; - KRML_MAYBE_FOR2( - i, (size_t)0U, (size_t)2U, (size_t)1U, size_t i0 = i; - libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks( - &st->shake128_state[i0], - Eurydice_array_to_slice((size_t)504U, out[i0], uint8_t));); - memcpy(ret, out, (size_t)2U * sizeof(uint8_t[504U])); -} +typedef struct IndCpaPrivateKeyUnpacked_a0_s { + libcrux_ml_kem_polynomial_PolynomialRingElement_1d secret_as_ntt[3U]; +} IndCpaPrivateKeyUnpacked_a0; /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {core::default::Default for +libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, +K>[TraitClause@0, TraitClause@1]} */ /** -A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_squeeze_three_blocks_f1 with -const generics -- K= 2 +A monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- K= 3 */ -static KRML_MUSTINLINE void -shake128_squeeze_three_blocks_f1_840( - PortableHash_8b *self, uint8_t ret[2U][504U]) +static IndCpaPrivateKeyUnpacked_a0 +default_70_1b(void) { - shake128_squeeze_three_blocks_eb0(self, ret); + IndCpaPrivateKeyUnpacked_a0 lit; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d repeat_expression[3U]; + KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, + repeat_expression[i] = ZERO_d6_ea();); + memcpy( + lit.secret_as_ntt, repeat_expression, + (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); + return lit; } /** - If `bytes` contains a set of uniformly random bytes, this function - uniformly samples a ring element `â` that is treated as being the NTT - representation of the corresponding polynomial `a`. - - Since rejection sampling is used, it is possible the supplied bytes are - not enough to sample the element, in which case an `Err` is returned and the - caller must try again with a fresh set of bytes. - - This function <strong>partially</strong> implements <strong>Algorithm - 6</strong> of the NIST FIPS 203 standard, We say "partially" because this - implementation only accepts a finite set of bytes as input and returns an error - if the set is not enough; Algorithm 6 of the FIPS 203 standard on the other - hand samples from an infinite stream of bytes until the ring element is filled. - Algorithm 6 is reproduced below: - - ```plaintext - Input: byte stream B ∈ 𝔹*. - Output: array â ∈ ℤ₂₅₆. - - i ← 0 - j ← 0 - while j < 256 do - d₁ ← B[i] + 256·(B[i+1] mod 16) - d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2] - if d₁ < q then - â[j] ← d₁ - j ← j + 1 - end if - if d₂ < q and j < 256 then - â[j] ← d₂ - j ← j + 1 - end if - i ← i + 3 - end while - return â - ``` - - The NIST FIPS 203 standard can be found at - <https://csrc.nist.gov/pubs/fips/203/ipd>. -*/ -/** A monomorphic instance of -libcrux_ml_kem.sampling.sample_from_uniform_distribution_next with types +libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- K= 2 -- N= 504 -*/ -static KRML_MUSTINLINE bool -sample_from_uniform_distribution_next_171( - uint8_t randomness[2U][504U], size_t *sampled_coefficients, - int16_t (*out)[272U]) -{ - KRML_MAYBE_FOR2( - i0, (size_t)0U, (size_t)2U, (size_t)1U, size_t i1 = i0; - for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++) { - size_t r = i; - if (sampled_coefficients[i1] < - LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT) { - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( - randomness[i1], r * (size_t)24U, r * (size_t)24U + (size_t)24U, - uint8_t); - size_t sampled = libcrux_ml_kem_vector_portable_rej_sample_0d( - uu____0, Eurydice_array_to_subslice2( - out[i1], sampled_coefficients[i1], - sampled_coefficients[i1] + (size_t)16U, int16_t)); - size_t uu____1 = i1; - sampled_coefficients[uu____1] = - sampled_coefficients[uu____1] + sampled; - } - }); - bool done = true; - KRML_MAYBE_FOR2( - i, (size_t)0U, (size_t)2U, (size_t)1U, size_t i0 = i; - if (sampled_coefficients[i0] >= - LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT) { - sampled_coefficients[i0] = - LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT; - } else { done = false; }); - return done; -} - -/** -A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_squeeze_block with const -generics -- K= 2 -*/ -static KRML_MUSTINLINE void -shake128_squeeze_block_3b0(PortableHash_8b *st, - uint8_t ret[2U][168U]) -{ - uint8_t out[2U][168U] = { { 0U } }; - KRML_MAYBE_FOR2( - i, (size_t)0U, (size_t)2U, (size_t)1U, size_t i0 = i; - libcrux_sha3_portable_incremental_shake128_squeeze_next_block( - &st->shake128_state[i0], - Eurydice_array_to_slice((size_t)168U, out[i0], uint8_t));); - memcpy(ret, out, (size_t)2U * sizeof(uint8_t[168U])); -} - -/** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} -*/ -/** -A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_squeeze_block_f1 with const -generics -- K= 2 +- $3size_t */ -static KRML_MUSTINLINE void -shake128_squeeze_block_f1_8e0( - PortableHash_8b *self, uint8_t ret[2U][168U]) -{ - shake128_squeeze_block_3b0(self, ret); -} - -/** - If `bytes` contains a set of uniformly random bytes, this function - uniformly samples a ring element `â` that is treated as being the NTT - representation of the corresponding polynomial `a`. - - Since rejection sampling is used, it is possible the supplied bytes are - not enough to sample the element, in which case an `Err` is returned and the - caller must try again with a fresh set of bytes. - - This function <strong>partially</strong> implements <strong>Algorithm - 6</strong> of the NIST FIPS 203 standard, We say "partially" because this - implementation only accepts a finite set of bytes as input and returns an error - if the set is not enough; Algorithm 6 of the FIPS 203 standard on the other - hand samples from an infinite stream of bytes until the ring element is filled. - Algorithm 6 is reproduced below: - - ```plaintext - Input: byte stream B ∈ 𝔹*. - Output: array â ∈ ℤ₂₅₆. - - i ← 0 - j ← 0 - while j < 256 do - d₁ ← B[i] + 256·(B[i+1] mod 16) - d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2] - if d₁ < q then - â[j] ← d₁ - j ← j + 1 - end if - if d₂ < q and j < 256 then - â[j] ← d₂ - j ← j + 1 - end if - i ← i + 3 - end while - return â - ``` - - The NIST FIPS 203 standard can be found at - <https://csrc.nist.gov/pubs/fips/203/ipd>. -*/ -/** -A monomorphic instance of -libcrux_ml_kem.sampling.sample_from_uniform_distribution_next with types -libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- K= 2 -- N= 168 -*/ -static KRML_MUSTINLINE bool -sample_from_uniform_distribution_next_172( - uint8_t randomness[2U][168U], size_t *sampled_coefficients, - int16_t (*out)[272U]) -{ - KRML_MAYBE_FOR2( - i0, (size_t)0U, (size_t)2U, (size_t)1U, size_t i1 = i0; - for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++) { - size_t r = i; - if (sampled_coefficients[i1] < - LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT) { - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( - randomness[i1], r * (size_t)24U, r * (size_t)24U + (size_t)24U, - uint8_t); - size_t sampled = libcrux_ml_kem_vector_portable_rej_sample_0d( - uu____0, Eurydice_array_to_subslice2( - out[i1], sampled_coefficients[i1], - sampled_coefficients[i1] + (size_t)16U, int16_t)); - size_t uu____1 = i1; - sampled_coefficients[uu____1] = - sampled_coefficients[uu____1] + sampled; - } - }); - bool done = true; - KRML_MAYBE_FOR2( - i, (size_t)0U, (size_t)2U, (size_t)1U, size_t i0 = i; - if (sampled_coefficients[i0] >= - LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT) { - sampled_coefficients[i0] = - LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT; - } else { done = false; }); - return done; -} - -/** -A monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.closure -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]] with const -generics -- K= 2 -*/ -static libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -closure_e40( - int16_t s[272U]) -{ - return from_i16_array_89_33( - Eurydice_array_to_subslice2(s, (size_t)0U, (size_t)256U, int16_t)); -} - -/** -A monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]] with const -generics -- K= 2 -*/ -static KRML_MUSTINLINE void -sample_from_xof_460( - uint8_t seeds[2U][34U], - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[2U]) -{ - size_t sampled_coefficients[2U] = { 0U }; - int16_t out[2U][272U] = { { 0U } }; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_seeds[2U][34U]; - memcpy(copy_of_seeds, seeds, (size_t)2U * sizeof(uint8_t[34U])); - PortableHash_8b xof_state = shake128_init_absorb_f1_770(copy_of_seeds); - uint8_t randomness0[2U][504U]; - shake128_squeeze_three_blocks_f1_840(&xof_state, randomness0); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_randomness0[2U][504U]; - memcpy(copy_of_randomness0, randomness0, (size_t)2U * sizeof(uint8_t[504U])); - bool done = sample_from_uniform_distribution_next_171( - copy_of_randomness0, sampled_coefficients, out); - while (true) { - if (done) { - break; - } else { - uint8_t randomness[2U][168U]; - shake128_squeeze_block_f1_8e0(&xof_state, randomness); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_randomness[2U][168U]; - memcpy(copy_of_randomness, randomness, - (size_t)2U * sizeof(uint8_t[168U])); - done = sample_from_uniform_distribution_next_172( - copy_of_randomness, sampled_coefficients, out); - } - } - /* Passing arrays by value in Rust generates a copy in C */ - int16_t copy_of_out[2U][272U]; - memcpy(copy_of_out, out, (size_t)2U * sizeof(int16_t[272U])); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret0[2U]; - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, - ret0[i] = closure_e40(copy_of_out[i]);); - memcpy( - ret, ret0, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); -} - -/** -A monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]] with const -generics -- K= 2 -*/ -static KRML_MUSTINLINE void -sample_matrix_A_e70( - uint8_t seed[34U], bool transpose, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[2U][2U]) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 A_transpose[2U][2U]; - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, - closure_fc0(A_transpose[i]);); - KRML_MAYBE_FOR2( - i0, (size_t)0U, (size_t)2U, (size_t)1U, size_t i1 = i0; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_seed[34U]; - memcpy(copy_of_seed, seed, (size_t)34U * sizeof(uint8_t)); - uint8_t seeds[2U][34U]; KRML_MAYBE_FOR2( - i, (size_t)0U, (size_t)2U, (size_t)1U, - memcpy(seeds[i], copy_of_seed, (size_t)34U * sizeof(uint8_t));); - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, size_t j = i; - seeds[j][32U] = (uint8_t)i1; seeds[j][33U] = (uint8_t)j;); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_seeds[2U][34U]; - memcpy(copy_of_seeds, seeds, (size_t)2U * sizeof(uint8_t[34U])); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 sampled[2U]; - sample_from_xof_460(copy_of_seeds, sampled); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len( - Eurydice_array_to_slice( - (size_t)2U, sampled, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); - i++) { - size_t j = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 sample = sampled[j]; - if (transpose) { - A_transpose[j][i1] = sample; - } else { - A_transpose[i1][j] = sample; - } - } - - ); - memcpy(ret, A_transpose, - (size_t)2U * - sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0[2U])); -} - -/** -A monomorphic instance of K. -with types libcrux_ml_kem_polynomial_PolynomialRingElement -libcrux_ml_kem_vector_portable_vector_type_PortableVector[2size_t], uint8_t - -*/ -typedef struct tuple_740_s { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 fst[2U]; - uint8_t snd; -} tuple_740; - -/** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN -with const generics -- K= 2 -- LEN= 192 -*/ -static KRML_MUSTINLINE void -PRFxN_1c0(uint8_t (*input)[33U], - uint8_t ret[2U][192U]) -{ - uint8_t out[2U][192U] = { { 0U } }; - KRML_MAYBE_FOR2( - i, (size_t)0U, (size_t)2U, (size_t)1U, size_t i0 = i; - libcrux_sha3_portable_shake256( - Eurydice_array_to_slice((size_t)192U, out[i0], uint8_t), - Eurydice_array_to_slice((size_t)33U, input[i0], uint8_t));); - memcpy(ret, out, (size_t)2U * sizeof(uint8_t[192U])); -} - -/** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} -*/ -/** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_f1 -with const generics -- K= 2 -- LEN= 192 -*/ -static KRML_MUSTINLINE void -PRFxN_f1_d50(uint8_t (*input)[33U], - uint8_t ret[2U][192U]) -{ - PRFxN_1c0(input, ret); -} - -/** -A monomorphic instance of -libcrux_ml_kem.sampling.sample_from_binomial_distribution with types -libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- ETA= 3 -*/ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -sample_from_binomial_distribution_ca0(Eurydice_slice randomness) -{ - return sample_from_binomial_distribution_3_14(randomness); -} - -/** - Sample a vector of ring elements from a centered binomial distribution and - convert them into their NTT representations. -*/ -/** -A monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]] with const -generics -- K= 2 -- ETA= 3 -- ETA_RANDOMNESS_SIZE= 192 -*/ -static KRML_MUSTINLINE tuple_740 -sample_vector_cbd_then_ntt_780( - uint8_t prf_input[33U], uint8_t domain_separator) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re_as_ntt[2U]; - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, - re_as_ntt[i] = ZERO_89_c3();); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input[33U]; - memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t)); - uint8_t prf_inputs[2U][33U]; - KRML_MAYBE_FOR2( - i, (size_t)0U, (size_t)2U, (size_t)1U, - memcpy(prf_inputs[i], copy_of_prf_input, (size_t)33U * sizeof(uint8_t));); - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, size_t i0 = i; - prf_inputs[i0][32U] = domain_separator; - domain_separator = (uint32_t)domain_separator + 1U;); - uint8_t prf_outputs[2U][192U]; - PRFxN_f1_d50(prf_inputs, prf_outputs); - KRML_MAYBE_FOR2( - i, (size_t)0U, (size_t)2U, (size_t)1U, size_t i0 = i; - re_as_ntt[i0] = sample_from_binomial_distribution_ca0( - Eurydice_array_to_slice((size_t)192U, prf_outputs[i0], uint8_t)); - ntt_binomially_sampled_ring_element_63(&re_as_ntt[i0]);); - /* Passing arrays by value in Rust generates a copy in C */ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 copy_of_re_as_ntt[2U]; - memcpy( - copy_of_re_as_ntt, re_as_ntt, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - tuple_740 lit; - memcpy( - lit.fst, copy_of_re_as_ntt, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - lit.snd = domain_separator; - return lit; -} - -/** - Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise - sum of their constituent coefficients. -*/ -/** -This function found in impl -{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]} -*/ -/** -A monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_89 -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 2 -*/ -static KRML_MUSTINLINE void -add_to_ring_element_89_1e0( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *rhs) -{ - for (size_t i = (size_t)0U; - i < Eurydice_slice_len( - Eurydice_array_to_slice( - (size_t)16U, self->coefficients, - libcrux_ml_kem_vector_portable_vector_type_PortableVector), - libcrux_ml_kem_vector_portable_vector_type_PortableVector); - i++) { - size_t i0 = i; - libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_add_0d(self->coefficients[i0], - &rhs->coefficients[i0]); - self->coefficients[i0] = uu____0; - } -} - -/** - Compute  ◦ ŝ + ê -*/ -/** -A monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 2 -*/ -static KRML_MUSTINLINE void -compute_As_plus_e_c70( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 (*matrix_A)[2U], - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *s_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[2U]) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result[2U]; - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, - result[i] = ZERO_89_c3();); - for (size_t i0 = (size_t)0U; - i0 < Eurydice_slice_len( - Eurydice_array_to_slice( - (size_t)2U, matrix_A, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0[2U]), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0[2U]); - i0++) { - size_t i1 = i0; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *row = matrix_A[i1]; - for (size_t i = (size_t)0U; - i < Eurydice_slice_len( - Eurydice_array_to_slice( - (size_t)2U, row, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); - i++) { - size_t j = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *matrix_element = - &row[j]; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product = - ntt_multiply_89_3b(matrix_element, &s_as_ntt[j]); - add_to_ring_element_89_1e0(&result[i1], &product); - } - add_standard_error_reduce_89_64(&result[i1], &error_as_ntt[i1]); - } - memcpy( - ret, result, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); -} - -/** -A monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], -libcrux_ml_kem_variant_MlKem with const generics -- K= 2 -- PRIVATE_KEY_SIZE= 768 -- PUBLIC_KEY_SIZE= 800 -- RANKED_BYTES_PER_RING_ELEMENT= 768 -- ETA1= 3 -- ETA1_RANDOMNESS_SIZE= 192 -*/ -static libcrux_ml_kem_utils_extraction_helper_Keypair512 -generate_keypair_a20( - Eurydice_slice key_generation_seed) -{ - uint8_t hashed[64U]; - cpa_keygen_seed_d8_4d(key_generation_seed, hashed); - Eurydice_slice_uint8_t_x2 uu____0 = Eurydice_slice_split_at( - Eurydice_array_to_slice((size_t)64U, hashed, uint8_t), (size_t)32U, - uint8_t, Eurydice_slice_uint8_t_x2); - Eurydice_slice seed_for_A0 = uu____0.fst; - Eurydice_slice seed_for_secret_and_error = uu____0.snd; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 A_transpose[2U][2U]; - uint8_t ret[34U]; - libcrux_ml_kem_utils_into_padded_array_6d1(seed_for_A0, ret); - sample_matrix_A_e70(ret, true, A_transpose); - uint8_t prf_input[33U]; - libcrux_ml_kem_utils_into_padded_array_6d2(seed_for_secret_and_error, - prf_input); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input0[33U]; - memcpy(copy_of_prf_input0, prf_input, (size_t)33U * sizeof(uint8_t)); - tuple_740 uu____2 = sample_vector_cbd_then_ntt_780(copy_of_prf_input0, 0U); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[2U]; - memcpy( - secret_as_ntt, uu____2.fst, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - uint8_t domain_separator = uu____2.snd; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input[33U]; - memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_as_ntt[2U]; - memcpy( - error_as_ntt, - sample_vector_cbd_then_ntt_780(copy_of_prf_input, domain_separator).fst, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 t_as_ntt[2U]; - compute_As_plus_e_c70(A_transpose, secret_as_ntt, error_as_ntt, t_as_ntt); - uint8_t seed_for_A[32U]; - core_result_Result_00 dst; - Eurydice_slice_to_array2(&dst, seed_for_A0, Eurydice_slice, uint8_t[32U]); - core_result_unwrap_41_33(dst, seed_for_A); - uint8_t public_key_serialized[800U]; - serialize_public_key_670( - t_as_ntt, Eurydice_array_to_slice((size_t)32U, seed_for_A, uint8_t), - public_key_serialized); - uint8_t secret_key_serialized[768U]; - serialize_secret_key_a30(secret_as_ntt, secret_key_serialized); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_secret_key_serialized[768U]; - memcpy(copy_of_secret_key_serialized, secret_key_serialized, - (size_t)768U * sizeof(uint8_t)); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_public_key_serialized[800U]; - memcpy(copy_of_public_key_serialized, public_key_serialized, - (size_t)800U * sizeof(uint8_t)); - libcrux_ml_kem_utils_extraction_helper_Keypair512 lit; - memcpy(lit.fst, copy_of_secret_key_serialized, - (size_t)768U * sizeof(uint8_t)); - memcpy(lit.snd, copy_of_public_key_serialized, - (size_t)800U * sizeof(uint8_t)); - return lit; -} - -/** - Serialize the secret key. -*/ -/** -A monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key -with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]] -with const generics -- K= 2 -- SERIALIZED_KEY_LEN= 1632 -*/ -static KRML_MUSTINLINE void -serialize_kem_secret_key_19( - Eurydice_slice private_key, Eurydice_slice public_key, - Eurydice_slice implicit_rejection_value, uint8_t ret[1632U]) -{ - uint8_t out[1632U] = { 0U }; - size_t pointer = (size_t)0U; - uint8_t *uu____0 = out; - size_t uu____1 = pointer; - size_t uu____2 = pointer; - Eurydice_slice_copy( - Eurydice_array_to_subslice2( - uu____0, uu____1, uu____2 + Eurydice_slice_len(private_key, uint8_t), - uint8_t), - private_key, uint8_t); - pointer = pointer + Eurydice_slice_len(private_key, uint8_t); - uint8_t *uu____3 = out; - size_t uu____4 = pointer; - size_t uu____5 = pointer; - Eurydice_slice_copy( - Eurydice_array_to_subslice2( - uu____3, uu____4, uu____5 + Eurydice_slice_len(public_key, uint8_t), - uint8_t), - public_key, uint8_t); - pointer = pointer + Eurydice_slice_len(public_key, uint8_t); - Eurydice_slice uu____6 = Eurydice_array_to_subslice2( - out, pointer, pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t); - uint8_t ret0[32U]; - H_f1_190(public_key, ret0); - Eurydice_slice_copy( - uu____6, Eurydice_array_to_slice((size_t)32U, ret0, uint8_t), uint8_t); - pointer = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE; - uint8_t *uu____7 = out; - size_t uu____8 = pointer; - size_t uu____9 = pointer; - Eurydice_slice_copy( - Eurydice_array_to_subslice2( - uu____7, uu____8, - uu____9 + Eurydice_slice_len(implicit_rejection_value, uint8_t), - uint8_t), - implicit_rejection_value, uint8_t); - memcpy(ret, out, (size_t)1632U * sizeof(uint8_t)); -} - -/** - Packed API - - Generate a key pair. - - Depending on the `Vector` and `Hasher` used, this requires different hardware - features -*/ -/** -A monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], -libcrux_ml_kem_variant_MlKem with const generics -- K= 2 -- CPA_PRIVATE_KEY_SIZE= 768 -- PRIVATE_KEY_SIZE= 1632 -- PUBLIC_KEY_SIZE= 800 -- BYTES_PER_RING_ELEMENT= 768 -- ETA1= 3 -- ETA1_RANDOMNESS_SIZE= 192 -*/ -libcrux_ml_kem_types_MlKemKeyPair_cb -libcrux_ml_kem_ind_cca_generate_keypair_f60(uint8_t randomness[64U]) -{ - Eurydice_slice ind_cpa_keypair_randomness = Eurydice_array_to_subslice2( - randomness, (size_t)0U, - LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t); - Eurydice_slice implicit_rejection_value = Eurydice_array_to_subslice_from( - (size_t)64U, randomness, - LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t, - size_t); - libcrux_ml_kem_utils_extraction_helper_Keypair512 uu____0 = - generate_keypair_a20(ind_cpa_keypair_randomness); - uint8_t ind_cpa_private_key[768U]; - memcpy(ind_cpa_private_key, uu____0.fst, (size_t)768U * sizeof(uint8_t)); - uint8_t public_key[800U]; - memcpy(public_key, uu____0.snd, (size_t)800U * sizeof(uint8_t)); - uint8_t secret_key_serialized[1632U]; - serialize_kem_secret_key_19( - Eurydice_array_to_slice((size_t)768U, ind_cpa_private_key, uint8_t), - Eurydice_array_to_slice((size_t)800U, public_key, uint8_t), - implicit_rejection_value, secret_key_serialized); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_secret_key_serialized[1632U]; - memcpy(copy_of_secret_key_serialized, secret_key_serialized, - (size_t)1632U * sizeof(uint8_t)); - libcrux_ml_kem_types_MlKemPrivateKey_5e private_key = - libcrux_ml_kem_types_from_05_89(copy_of_secret_key_serialized); - libcrux_ml_kem_types_MlKemPrivateKey_5e uu____2 = private_key; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_public_key[800U]; - memcpy(copy_of_public_key, public_key, (size_t)800U * sizeof(uint8_t)); - return libcrux_ml_kem_types_from_17_82( - uu____2, libcrux_ml_kem_types_from_b6_96(copy_of_public_key)); -} - -/** -This function found in impl {(libcrux_ml_kem::variant::Variant for -libcrux_ml_kem::variant::MlKem)} -*/ -/** -A monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_d8 -with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]] -with const generics -- K= 2 -*/ -static KRML_MUSTINLINE void -entropy_preprocess_d8_6c(Eurydice_slice randomness, - uint8_t ret[32U]) -{ - uint8_t out[32U] = { 0U }; - Eurydice_slice_copy(Eurydice_array_to_slice((size_t)32U, out, uint8_t), - randomness, uint8_t); - memcpy(ret, out, (size_t)32U * sizeof(uint8_t)); -} - -/** - This function deserializes ring elements and reduces the result by the field - modulus. - - This function MUST NOT be used on secret inputs. -*/ -/** -A monomorphic instance of -libcrux_ml_kem.serialize.deserialize_ring_elements_reduced with types -libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- PUBLIC_KEY_SIZE= 768 -- K= 2 -*/ -static KRML_MUSTINLINE void -deserialize_ring_elements_reduced_4f1( - Eurydice_slice public_key, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[2U]) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 deserialized_pk[2U]; - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, - deserialized_pk[i] = ZERO_89_c3();); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len(public_key, uint8_t) / - LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT; - i++) { - size_t i0 = i; - Eurydice_slice ring_element = Eurydice_slice_subslice2( - public_key, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT + - LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - uint8_t); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____0 = - deserialize_to_reduced_ring_element_45(ring_element); - deserialized_pk[i0] = uu____0; - } - memcpy( - ret, deserialized_pk, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); -} - -/** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN -with const generics -- K= 2 -- LEN= 128 -*/ -static KRML_MUSTINLINE void -PRFxN_1c1(uint8_t (*input)[33U], - uint8_t ret[2U][128U]) -{ - uint8_t out[2U][128U] = { { 0U } }; - KRML_MAYBE_FOR2( - i, (size_t)0U, (size_t)2U, (size_t)1U, size_t i0 = i; - libcrux_sha3_portable_shake256( - Eurydice_array_to_slice((size_t)128U, out[i0], uint8_t), - Eurydice_array_to_slice((size_t)33U, input[i0], uint8_t));); - memcpy(ret, out, (size_t)2U * sizeof(uint8_t[128U])); -} - -/** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} -*/ -/** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_f1 -with const generics -- K= 2 -- LEN= 128 -*/ -static KRML_MUSTINLINE void -PRFxN_f1_d51(uint8_t (*input)[33U], - uint8_t ret[2U][128U]) -{ - PRFxN_1c1(input, ret); -} - -/** - Sample a vector of ring elements from a centered binomial distribution. -*/ -/** -A monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]] with const -generics -- K= 2 -- ETA2_RANDOMNESS_SIZE= 128 -- ETA2= 2 -*/ -static KRML_MUSTINLINE tuple_740 -sample_ring_element_cbd_a80(uint8_t prf_input[33U], uint8_t domain_separator) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_1[2U]; - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, - error_1[i] = ZERO_89_c3();); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input[33U]; - memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t)); - uint8_t prf_inputs[2U][33U]; - KRML_MAYBE_FOR2( - i, (size_t)0U, (size_t)2U, (size_t)1U, - memcpy(prf_inputs[i], copy_of_prf_input, (size_t)33U * sizeof(uint8_t));); - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, size_t i0 = i; - prf_inputs[i0][32U] = domain_separator; - domain_separator = (uint32_t)domain_separator + 1U;); - uint8_t prf_outputs[2U][128U]; - PRFxN_f1_d51(prf_inputs, prf_outputs); - KRML_MAYBE_FOR2( - i, (size_t)0U, (size_t)2U, (size_t)1U, size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____1 = - sample_from_binomial_distribution_ca( - Eurydice_array_to_slice((size_t)128U, prf_outputs[i0], uint8_t)); - error_1[i0] = uu____1;); - /* Passing arrays by value in Rust generates a copy in C */ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 copy_of_error_1[2U]; - memcpy( - copy_of_error_1, error_1, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - tuple_740 lit; - memcpy( - lit.fst, copy_of_error_1, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - lit.snd = domain_separator; - return lit; -} - -/** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} -*/ -/** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_f1 -with const generics -- K= 2 -- LEN= 128 -*/ -static KRML_MUSTINLINE void -PRF_f1_2e2(Eurydice_slice input, - uint8_t ret[128U]) -{ - PRF_7c0(input, ret); -} - -/** -A monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 2 -*/ -static KRML_MUSTINLINE void -invert_ntt_montgomery_c90( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) -{ - size_t zeta_i = - LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U; - invert_ntt_at_layer_1_4b(&zeta_i, re); - invert_ntt_at_layer_2_2b(&zeta_i, re); - invert_ntt_at_layer_3_97(&zeta_i, re); - invert_ntt_at_layer_4_plus_04(&zeta_i, re, (size_t)4U); - invert_ntt_at_layer_4_plus_04(&zeta_i, re, (size_t)5U); - invert_ntt_at_layer_4_plus_04(&zeta_i, re, (size_t)6U); - invert_ntt_at_layer_4_plus_04(&zeta_i, re, (size_t)7U); - poly_barrett_reduce_89_d8(re); -} - -/** - Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁ -*/ -/** -A monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 2 -*/ -static KRML_MUSTINLINE void -compute_vector_u_930( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 (*a_as_ntt)[2U], - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *r_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error_1, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[2U]) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result[2U]; - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, - result[i] = ZERO_89_c3();); - for (size_t i0 = (size_t)0U; - i0 < Eurydice_slice_len( - Eurydice_array_to_slice( - (size_t)2U, a_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0[2U]), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0[2U]); - i0++) { - size_t i1 = i0; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *row = a_as_ntt[i1]; - for (size_t i = (size_t)0U; - i < Eurydice_slice_len( - Eurydice_array_to_slice( - (size_t)2U, row, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); - i++) { - size_t j = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *a_element = &row[j]; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product = - ntt_multiply_89_3b(a_element, &r_as_ntt[j]); - add_to_ring_element_89_1e0(&result[i1], &product); - } - invert_ntt_montgomery_c90(&result[i1]); - add_error_reduce_89_5d(&result[i1], &error_1[i1]); - } - memcpy( - ret, result, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); -} - -/** - Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message -*/ -/** -A monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 2 -*/ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -compute_ring_element_v_540( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *t_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *r_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error_2, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *message) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result = ZERO_89_c3(); - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product = - ntt_multiply_89_3b(&t_as_ntt[i0], &r_as_ntt[i0]); - add_to_ring_element_89_1e0(&result, &product);); - invert_ntt_montgomery_c90(&result); - result = add_message_error_reduce_89_c4(error_2, message, result); - return result; -} - -/** -A monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_10 -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- OUT_LEN= 320 -*/ -static KRML_MUSTINLINE void -compress_then_serialize_10_88( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re, uint8_t ret[320U]) -{ - uint8_t serialized[320U] = { 0U }; - for (size_t i = (size_t)0U; - i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) { - size_t i0 = i; - libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient = - compress_0d_96(to_unsigned_representative_84(re->coefficients[i0])); - uint8_t bytes[20U]; - libcrux_ml_kem_vector_portable_serialize_10_0d(coefficient, bytes); - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( - serialized, (size_t)20U * i0, (size_t)20U * i0 + (size_t)20U, uint8_t); - Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)20U, bytes, uint8_t), uint8_t); - } - memcpy(ret, serialized, (size_t)320U * sizeof(uint8_t)); -} - -/** -A monomorphic instance of -libcrux_ml_kem.serialize.compress_then_serialize_ring_element_u with types -libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- COMPRESSION_FACTOR= 10 -- OUT_LEN= 320 -*/ -static KRML_MUSTINLINE void -compress_then_serialize_ring_element_u_2e( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re, uint8_t ret[320U]) -{ - uint8_t uu____0[320U]; - compress_then_serialize_10_88(re, uu____0); - memcpy(ret, uu____0, (size_t)320U * sizeof(uint8_t)); -} - -/** - Call [`compress_then_serialize_ring_element_u`] on each ring element. -*/ -/** -A monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 2 -- OUT_LEN= 640 -- COMPRESSION_FACTOR= 10 -- BLOCK_LEN= 320 -*/ -static void -compress_then_serialize_u_280( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 input[2U], - Eurydice_slice out) -{ - for (size_t i = (size_t)0U; - i < Eurydice_slice_len( - Eurydice_array_to_slice( - (size_t)2U, input, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); - i++) { - size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = input[i0]; - Eurydice_slice uu____0 = Eurydice_slice_subslice2( - out, i0 * ((size_t)640U / (size_t)2U), - (i0 + (size_t)1U) * ((size_t)640U / (size_t)2U), uint8_t); - uint8_t ret[320U]; - compress_then_serialize_ring_element_u_2e(&re, ret); - Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)320U, ret, uint8_t), uint8_t); - } -} - -/** -A monomorphic instance of -libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v with types -libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- COMPRESSION_FACTOR= 4 -- OUT_LEN= 128 -*/ -static KRML_MUSTINLINE void -compress_then_serialize_ring_element_v_65( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re, Eurydice_slice out) -{ - compress_then_serialize_4_80(re, out); -} - -/** -A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]] with const -generics -- K= 2 -- CIPHERTEXT_SIZE= 768 -- T_AS_NTT_ENCODED_SIZE= 768 -- C1_LEN= 640 -- C2_LEN= 128 -- U_COMPRESSION_FACTOR= 10 -- V_COMPRESSION_FACTOR= 4 -- BLOCK_LEN= 320 -- ETA1= 3 -- ETA1_RANDOMNESS_SIZE= 192 -- ETA2= 2 -- ETA2_RANDOMNESS_SIZE= 128 -*/ -static void -encrypt_7b0(Eurydice_slice public_key, uint8_t message[32U], - Eurydice_slice randomness, uint8_t ret[768U]) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 t_as_ntt[2U]; - deserialize_ring_elements_reduced_4f1( - Eurydice_slice_subslice_to(public_key, (size_t)768U, uint8_t, size_t), - t_as_ntt); - Eurydice_slice seed = - Eurydice_slice_subslice_from(public_key, (size_t)768U, uint8_t, size_t); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 A[2U][2U]; - uint8_t ret0[34U]; - libcrux_ml_kem_utils_into_padded_array_6d1(seed, ret0); - sample_matrix_A_e70(ret0, false, A); - uint8_t prf_input[33U]; - libcrux_ml_kem_utils_into_padded_array_6d2(randomness, prf_input); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input0[33U]; - memcpy(copy_of_prf_input0, prf_input, (size_t)33U * sizeof(uint8_t)); - tuple_740 uu____1 = sample_vector_cbd_then_ntt_780(copy_of_prf_input0, 0U); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 r_as_ntt[2U]; - memcpy( - r_as_ntt, uu____1.fst, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - uint8_t domain_separator0 = uu____1.snd; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input[33U]; - memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t)); - tuple_740 uu____3 = - sample_ring_element_cbd_a80(copy_of_prf_input, domain_separator0); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_1[2U]; - memcpy( - error_1, uu____3.fst, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - uint8_t domain_separator = uu____3.snd; - prf_input[32U] = domain_separator; - uint8_t prf_output[128U]; - PRF_f1_2e2(Eurydice_array_to_slice((size_t)33U, prf_input, uint8_t), - prf_output); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_2 = - sample_from_binomial_distribution_ca( - Eurydice_array_to_slice((size_t)128U, prf_output, uint8_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 u[2U]; - compute_vector_u_930(A, r_as_ntt, error_1, u); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_message[32U]; - memcpy(copy_of_message, message, (size_t)32U * sizeof(uint8_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 message_as_ring_element = - deserialize_then_decompress_message_f7(copy_of_message); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 v = - compute_ring_element_v_540(t_as_ntt, r_as_ntt, &error_2, - &message_as_ring_element); - uint8_t ciphertext[768U] = { 0U }; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____5[2U]; - memcpy( - uu____5, u, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - compress_then_serialize_u_280( - uu____5, Eurydice_array_to_subslice2(ciphertext, (size_t)0U, (size_t)640U, - uint8_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____6 = v; - compress_then_serialize_ring_element_v_65( - uu____6, Eurydice_array_to_subslice_from((size_t)768U, ciphertext, - (size_t)640U, uint8_t, size_t)); - memcpy(ret, ciphertext, (size_t)768U * sizeof(uint8_t)); -} - -/** -This function found in impl {(libcrux_ml_kem::variant::Variant for -libcrux_ml_kem::variant::MlKem)} -*/ -/** -A monomorphic instance of libcrux_ml_kem.variant.kdf_d8 -with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]] -with const generics -- K= 2 -- CIPHERTEXT_SIZE= 768 -*/ -static KRML_MUSTINLINE void -kdf_d8_32(Eurydice_slice shared_secret, - uint8_t ret[32U]) -{ - uint8_t out[32U] = { 0U }; - Eurydice_slice_copy(Eurydice_array_to_slice((size_t)32U, out, uint8_t), - shared_secret, uint8_t); - memcpy(ret, out, (size_t)32U * sizeof(uint8_t)); -} - -/** -A monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], -libcrux_ml_kem_variant_MlKem with const generics -- K= 2 -- CIPHERTEXT_SIZE= 768 -- PUBLIC_KEY_SIZE= 800 -- T_AS_NTT_ENCODED_SIZE= 768 -- C1_SIZE= 640 -- C2_SIZE= 128 -- VECTOR_U_COMPRESSION_FACTOR= 10 -- VECTOR_V_COMPRESSION_FACTOR= 4 -- VECTOR_U_BLOCK_LEN= 320 -- ETA1= 3 -- ETA1_RANDOMNESS_SIZE= 192 -- ETA2= 2 -- ETA2_RANDOMNESS_SIZE= 128 -*/ -tuple_ec -libcrux_ml_kem_ind_cca_encapsulate_eb0( - libcrux_ml_kem_types_MlKemPublicKey_be *public_key, - uint8_t randomness[32U]) -{ - uint8_t randomness0[32U]; - entropy_preprocess_d8_6c( - Eurydice_array_to_slice((size_t)32U, randomness, uint8_t), randomness0); - uint8_t to_hash[64U]; - libcrux_ml_kem_utils_into_padded_array_6d( - Eurydice_array_to_slice((size_t)32U, randomness0, uint8_t), to_hash); - Eurydice_slice uu____0 = Eurydice_array_to_subslice_from( - (size_t)64U, to_hash, LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t, - size_t); - uint8_t ret[32U]; - H_f1_190(Eurydice_array_to_slice( - (size_t)800U, libcrux_ml_kem_types_as_slice_cb_3d(public_key), - uint8_t), - ret); - Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)32U, ret, uint8_t), uint8_t); - uint8_t hashed[64U]; - G_f1_380(Eurydice_array_to_slice((size_t)64U, to_hash, uint8_t), hashed); - Eurydice_slice_uint8_t_x2 uu____1 = Eurydice_slice_split_at( - Eurydice_array_to_slice((size_t)64U, hashed, uint8_t), - LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, uint8_t, - Eurydice_slice_uint8_t_x2); - Eurydice_slice shared_secret = uu____1.fst; - Eurydice_slice pseudorandomness = uu____1.snd; - Eurydice_slice uu____2 = Eurydice_array_to_slice( - (size_t)800U, libcrux_ml_kem_types_as_slice_cb_3d(public_key), uint8_t); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_randomness[32U]; - memcpy(copy_of_randomness, randomness0, (size_t)32U * sizeof(uint8_t)); - uint8_t ciphertext[768U]; - encrypt_7b0(uu____2, copy_of_randomness, pseudorandomness, ciphertext); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_ciphertext[768U]; - memcpy(copy_of_ciphertext, ciphertext, (size_t)768U * sizeof(uint8_t)); - libcrux_ml_kem_types_MlKemCiphertext_e8 ciphertext0 = - libcrux_ml_kem_types_from_01_33(copy_of_ciphertext); - uint8_t shared_secret_array[32U]; - kdf_d8_32(shared_secret, shared_secret_array); - libcrux_ml_kem_types_MlKemCiphertext_e8 uu____5 = ciphertext0; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_shared_secret_array[32U]; - memcpy(copy_of_shared_secret_array, shared_secret_array, - (size_t)32U * sizeof(uint8_t)); - tuple_ec lit; - lit.fst = uu____5; - memcpy(lit.snd, copy_of_shared_secret_array, (size_t)32U * sizeof(uint8_t)); - return lit; -} - -/** - Call [`deserialize_to_uncompressed_ring_element`] for each ring element. -*/ -/** -A monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_secret_key -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 2 -*/ -static KRML_MUSTINLINE void -deserialize_secret_key_7b0( - Eurydice_slice secret_key, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[2U]) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[2U]; - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, - secret_as_ntt[i] = ZERO_89_c3();); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len(secret_key, uint8_t) / - LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT; - i++) { - size_t i0 = i; - Eurydice_slice secret_bytes = Eurydice_slice_subslice2( - secret_key, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT + - LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - uint8_t); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____0 = - deserialize_to_uncompressed_ring_element_27(secret_bytes); - secret_as_ntt[i0] = uu____0; - } - memcpy( - ret, secret_as_ntt, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); -} - -/** -A monomorphic instance of -libcrux_ml_kem.ind_cpa.unpacked.IndCpaPrivateKeyUnpacked with types -libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- $2size_t -*/ -typedef struct IndCpaPrivateKeyUnpacked_ae_s { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[2U]; -} IndCpaPrivateKeyUnpacked_ae; - -/** -A monomorphic instance of -libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_u with types -libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- COMPRESSION_FACTOR= 10 -*/ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -deserialize_then_decompress_ring_element_u_c2(Eurydice_slice serialized) -{ - return deserialize_then_decompress_10_50(serialized); -} - -/** -A monomorphic instance of libcrux_ml_kem.ntt.ntt_vector_u -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- VECTOR_U_COMPRESSION_FACTOR= 10 -*/ -static KRML_MUSTINLINE void -ntt_vector_u_6f( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) -{ - size_t zeta_i = (size_t)0U; - ntt_at_layer_4_plus_8c(&zeta_i, re, (size_t)7U); - ntt_at_layer_4_plus_8c(&zeta_i, re, (size_t)6U); - ntt_at_layer_4_plus_8c(&zeta_i, re, (size_t)5U); - ntt_at_layer_4_plus_8c(&zeta_i, re, (size_t)4U); - ntt_at_layer_3_34(&zeta_i, re); - ntt_at_layer_2_26(&zeta_i, re); - ntt_at_layer_1_3c(&zeta_i, re); - poly_barrett_reduce_89_d8(re); -} - -/** - Call [`deserialize_then_decompress_ring_element_u`] on each ring element - in the `ciphertext`. -*/ -/** -A monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 2 -- CIPHERTEXT_SIZE= 768 -- U_COMPRESSION_FACTOR= 10 -*/ -static KRML_MUSTINLINE void -deserialize_then_decompress_u_1a0( - uint8_t *ciphertext, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[2U]) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 u_as_ntt[2U]; - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, - u_as_ntt[i] = ZERO_89_c3();); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len( - Eurydice_array_to_slice((size_t)768U, ciphertext, uint8_t), - uint8_t) / - (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * - (size_t)10U / (size_t)8U); - i++) { - size_t i0 = i; - Eurydice_slice u_bytes = Eurydice_array_to_subslice2( - ciphertext, - i0 * (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * - (size_t)10U / (size_t)8U), - i0 * (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * - (size_t)10U / (size_t)8U) + - LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * - (size_t)10U / (size_t)8U, - uint8_t); - u_as_ntt[i0] = deserialize_then_decompress_ring_element_u_c2(u_bytes); - ntt_vector_u_6f(&u_as_ntt[i0]); - } - memcpy( - ret, u_as_ntt, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); -} - -/** -A monomorphic instance of -libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v with types -libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- COMPRESSION_FACTOR= 4 -*/ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -deserialize_then_decompress_ring_element_v_93(Eurydice_slice serialized) -{ - return deserialize_then_decompress_4_94(serialized); -} - -/** - The following functions compute various expressions involving - vectors and matrices. The computation of these expressions has been - abstracted away into these functions in order to save on loop iterations. - Compute v − InverseNTT(sᵀ ◦ NTT(u)) -*/ -/** -A monomorphic instance of libcrux_ml_kem.matrix.compute_message -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 2 -*/ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -compute_message_c90( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *v, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *secret_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *u_as_ntt) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result = ZERO_89_c3(); - KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product = - ntt_multiply_89_3b(&secret_as_ntt[i0], &u_as_ntt[i0]); - add_to_ring_element_89_1e0(&result, &product);); - invert_ntt_montgomery_c90(&result); - result = subtract_reduce_89_61(v, result); - return result; -} - -/** - This function implements <strong>Algorithm 14</strong> of the - NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm. - - Algorithm 14 is reproduced below: - - ```plaintext - Input: decryption key dkₚₖₑ ∈ 𝔹^{384k}. - Input: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}. - Output: message m ∈ 𝔹^{32}. - - c₁ ← c[0 : 32dᵤk] - c₂ ← c[32dᵤk : 32(dᵤk + dᵥ)] - u ← Decompress_{dᵤ}(ByteDecode_{dᵤ}(c₁)) - v ← Decompress_{dᵥ}(ByteDecode_{dᵥ}(c₂)) - ŝ ← ByteDecode₁₂(dkₚₖₑ) - w ← v - NTT-¹(ŝᵀ ◦ NTT(u)) - m ← ByteEncode₁(Compress₁(w)) - return m - ``` - - The NIST FIPS 203 standard can be found at - <https://csrc.nist.gov/pubs/fips/203/ipd>. -*/ -/** -A monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 2 -- CIPHERTEXT_SIZE= 768 -- VECTOR_U_ENCODED_SIZE= 640 -- U_COMPRESSION_FACTOR= 10 -- V_COMPRESSION_FACTOR= 4 -*/ -static void -decrypt_unpacked_6b0(IndCpaPrivateKeyUnpacked_ae *secret_key, - uint8_t *ciphertext, uint8_t ret[32U]) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 u_as_ntt[2U]; - deserialize_then_decompress_u_1a0(ciphertext, u_as_ntt); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 v = - deserialize_then_decompress_ring_element_v_93( - Eurydice_array_to_subslice_from((size_t)768U, ciphertext, - (size_t)640U, uint8_t, size_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 message = - compute_message_c90(&v, secret_key->secret_as_ntt, u_as_ntt); - uint8_t ret0[32U]; - compress_then_serialize_message_d4(message, ret0); - memcpy(ret, ret0, (size_t)32U * sizeof(uint8_t)); -} - -/** -A monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 2 -- CIPHERTEXT_SIZE= 768 -- VECTOR_U_ENCODED_SIZE= 640 -- U_COMPRESSION_FACTOR= 10 -- V_COMPRESSION_FACTOR= 4 -*/ -static void -decrypt_120(Eurydice_slice secret_key, uint8_t *ciphertext, - uint8_t ret[32U]) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[2U]; - deserialize_secret_key_7b0(secret_key, secret_as_ntt); - /* Passing arrays by value in Rust generates a copy in C */ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 copy_of_secret_as_ntt[2U]; - memcpy( - copy_of_secret_as_ntt, secret_as_ntt, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - IndCpaPrivateKeyUnpacked_ae secret_key_unpacked; - memcpy( - secret_key_unpacked.secret_as_ntt, copy_of_secret_as_ntt, - (size_t)2U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - uint8_t ret0[32U]; - decrypt_unpacked_6b0(&secret_key_unpacked, ciphertext, ret0); - memcpy(ret, ret0, (size_t)32U * sizeof(uint8_t)); -} - -/** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} -*/ -/** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_f1 -with const generics -- K= 2 -- LEN= 32 -*/ -static KRML_MUSTINLINE void -PRF_f1_2e1(Eurydice_slice input, uint8_t ret[32U]) -{ - PRF_7c(input, ret); -} - -/** -A monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], -libcrux_ml_kem_variant_MlKem with const generics -- K= 2 -- SECRET_KEY_SIZE= 1632 -- CPA_SECRET_KEY_SIZE= 768 -- PUBLIC_KEY_SIZE= 800 -- CIPHERTEXT_SIZE= 768 -- T_AS_NTT_ENCODED_SIZE= 768 -- C1_SIZE= 640 -- C2_SIZE= 128 -- VECTOR_U_COMPRESSION_FACTOR= 10 -- VECTOR_V_COMPRESSION_FACTOR= 4 -- C1_BLOCK_SIZE= 320 -- ETA1= 3 -- ETA1_RANDOMNESS_SIZE= 192 -- ETA2= 2 -- ETA2_RANDOMNESS_SIZE= 128 -- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800 -*/ -void -libcrux_ml_kem_ind_cca_decapsulate_1f0( - libcrux_ml_kem_types_MlKemPrivateKey_5e *private_key, - libcrux_ml_kem_types_MlKemCiphertext_e8 *ciphertext, uint8_t ret[32U]) -{ - Eurydice_slice_uint8_t_x2 uu____0 = Eurydice_slice_split_at( - Eurydice_array_to_slice((size_t)1632U, private_key->value, uint8_t), - (size_t)768U, uint8_t, Eurydice_slice_uint8_t_x2); - Eurydice_slice ind_cpa_secret_key = uu____0.fst; - Eurydice_slice secret_key0 = uu____0.snd; - Eurydice_slice_uint8_t_x2 uu____1 = Eurydice_slice_split_at( - secret_key0, (size_t)800U, uint8_t, Eurydice_slice_uint8_t_x2); - Eurydice_slice ind_cpa_public_key = uu____1.fst; - Eurydice_slice secret_key = uu____1.snd; - Eurydice_slice_uint8_t_x2 uu____2 = Eurydice_slice_split_at( - secret_key, LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t, - Eurydice_slice_uint8_t_x2); - Eurydice_slice ind_cpa_public_key_hash = uu____2.fst; - Eurydice_slice implicit_rejection_value = uu____2.snd; - uint8_t decrypted[32U]; - decrypt_120(ind_cpa_secret_key, ciphertext->value, decrypted); - uint8_t to_hash0[64U]; - libcrux_ml_kem_utils_into_padded_array_6d( - Eurydice_array_to_slice((size_t)32U, decrypted, uint8_t), to_hash0); - Eurydice_slice_copy( - Eurydice_array_to_subslice_from( - (size_t)64U, to_hash0, LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, - uint8_t, size_t), - ind_cpa_public_key_hash, uint8_t); - uint8_t hashed[64U]; - G_f1_380(Eurydice_array_to_slice((size_t)64U, to_hash0, uint8_t), hashed); - Eurydice_slice_uint8_t_x2 uu____3 = Eurydice_slice_split_at( - Eurydice_array_to_slice((size_t)64U, hashed, uint8_t), - LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, uint8_t, - Eurydice_slice_uint8_t_x2); - Eurydice_slice shared_secret0 = uu____3.fst; - Eurydice_slice pseudorandomness = uu____3.snd; - uint8_t to_hash[800U]; - libcrux_ml_kem_utils_into_padded_array_6d0(implicit_rejection_value, to_hash); - Eurydice_slice uu____4 = Eurydice_array_to_subslice_from( - (size_t)800U, to_hash, LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, - uint8_t, size_t); - Eurydice_slice_copy(uu____4, libcrux_ml_kem_types_as_ref_00_d8(ciphertext), - uint8_t); - uint8_t implicit_rejection_shared_secret0[32U]; - PRF_f1_2e1(Eurydice_array_to_slice((size_t)800U, to_hash, uint8_t), - implicit_rejection_shared_secret0); - Eurydice_slice uu____5 = ind_cpa_public_key; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_decrypted[32U]; - memcpy(copy_of_decrypted, decrypted, (size_t)32U * sizeof(uint8_t)); - uint8_t expected_ciphertext[768U]; - encrypt_7b0(uu____5, copy_of_decrypted, pseudorandomness, - expected_ciphertext); - uint8_t implicit_rejection_shared_secret[32U]; - kdf_d8_32(Eurydice_array_to_slice((size_t)32U, - implicit_rejection_shared_secret0, uint8_t), - implicit_rejection_shared_secret); - uint8_t shared_secret[32U]; - kdf_d8_32(shared_secret0, shared_secret); - uint8_t ret0[32U]; - libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time( - libcrux_ml_kem_types_as_ref_00_d8(ciphertext), - Eurydice_array_to_slice((size_t)768U, expected_ciphertext, uint8_t), - Eurydice_array_to_slice((size_t)32U, shared_secret, uint8_t), - Eurydice_array_to_slice((size_t)32U, implicit_rejection_shared_secret, - uint8_t), - ret0); - memcpy(ret, ret0, (size_t)32U * sizeof(uint8_t)); -} - -/** - This function deserializes ring elements and reduces the result by the field - modulus. - - This function MUST NOT be used on secret inputs. -*/ -/** -A monomorphic instance of -libcrux_ml_kem.serialize.deserialize_ring_elements_reduced with types -libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- PUBLIC_KEY_SIZE= 1184 -- K= 3 -*/ -static KRML_MUSTINLINE void -deserialize_ring_elements_reduced_4f0( - Eurydice_slice public_key, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 deserialized_pk[3U]; - KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, - deserialized_pk[i] = ZERO_89_c3();); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len(public_key, uint8_t) / - LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT; - i++) { - size_t i0 = i; - Eurydice_slice ring_element = Eurydice_slice_subslice2( - public_key, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT + - LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - uint8_t); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____0 = - deserialize_to_reduced_ring_element_45(ring_element); - deserialized_pk[i0] = uu____0; - } - memcpy( - ret, deserialized_pk, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); -} - -/** - Call [`serialize_uncompressed_ring_element`] for each ring element. -*/ -/** -A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_secret_key -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 3 -- OUT_LEN= 1152 -*/ -static KRML_MUSTINLINE void -serialize_secret_key_a3( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *key, - uint8_t ret[1152U]) -{ - uint8_t out[1152U] = { 0U }; - for (size_t i = (size_t)0U; - i < Eurydice_slice_len( - Eurydice_array_to_slice( - (size_t)3U, key, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); - i++) { - size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = key[i0]; - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( - out, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - uint8_t); - uint8_t ret0[384U]; - serialize_uncompressed_ring_element_3c(&re, ret0); - Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)384U, ret0, uint8_t), uint8_t); - } - memcpy(ret, out, (size_t)1152U * sizeof(uint8_t)); -} - -/** - Concatenate `t` and `ρ` into the public key. -*/ -/** -A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 3 -- RANKED_BYTES_PER_RING_ELEMENT= 1152 -- PUBLIC_KEY_SIZE= 1184 -*/ -static KRML_MUSTINLINE void -serialize_public_key_67( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *t_as_ntt, - Eurydice_slice seed_for_a, uint8_t ret[1184U]) -{ - uint8_t public_key_serialized[1184U] = { 0U }; - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( - public_key_serialized, (size_t)0U, (size_t)1152U, uint8_t); - uint8_t ret0[1152U]; - serialize_secret_key_a3(t_as_ntt, ret0); - Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)1152U, ret0, uint8_t), uint8_t); - Eurydice_slice_copy( - Eurydice_array_to_subslice_from((size_t)1184U, public_key_serialized, - (size_t)1152U, uint8_t, size_t), - seed_for_a, uint8_t); - memcpy(ret, public_key_serialized, (size_t)1184U * sizeof(uint8_t)); -} - -/** - Validate an ML-KEM public key. - - This implements the Modulus check in 7.2 2. - Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the - `public_key` type. -*/ -/** -A monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector -with const generics -- K= 3 -- RANKED_BYTES_PER_RING_ELEMENT= 1152 -- PUBLIC_KEY_SIZE= 1184 -*/ -bool -libcrux_ml_kem_ind_cca_validate_public_key_b7(uint8_t *public_key) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 deserialized_pk[3U]; - deserialize_ring_elements_reduced_4f0( - Eurydice_array_to_subslice_to((size_t)1184U, public_key, (size_t)1152U, - uint8_t, size_t), - deserialized_pk); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *uu____0 = deserialized_pk; - uint8_t public_key_serialized[1184U]; - serialize_public_key_67( - uu____0, - Eurydice_array_to_subslice_from((size_t)1184U, public_key, (size_t)1152U, - uint8_t, size_t), - public_key_serialized); - return core_array_equality___core__cmp__PartialEq__Array_U__N___for__Array_T__N____eq( - (size_t)1184U, public_key, public_key_serialized, uint8_t, uint8_t, bool); -} - -/** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} -*/ -/** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.H_f1 -with const generics -- K= 3 -*/ -static KRML_MUSTINLINE void -H_f1_19(Eurydice_slice input, uint8_t ret[32U]) -{ - libcrux_ml_kem_hash_functions_portable_H(input, ret); -} +typedef struct IndCpaPublicKeyUnpacked_a0_s { + libcrux_ml_kem_polynomial_PolynomialRingElement_1d t_as_ntt[3U]; + uint8_t seed_for_A[32U]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d A[3U][3U]; +} IndCpaPublicKeyUnpacked_a0; /** - Validate an ML-KEM private key. - - This implements the Hash check in 7.3 3. - Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE` - and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types. +This function found in impl {core::default::Default for +libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, +K>[TraitClause@0, TraitClause@1]} */ /** -A monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key -with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] +A monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - K= 3 -- SECRET_KEY_SIZE= 2400 -- CIPHERTEXT_SIZE= 1088 */ -bool -libcrux_ml_kem_ind_cca_validate_private_key_05( - libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key, - libcrux_ml_kem_mlkem768_MlKem768Ciphertext *_ciphertext) +static IndCpaPublicKeyUnpacked_a0 +default_8b_1b(void) { - uint8_t t[32U]; - H_f1_19(Eurydice_array_to_subslice2( - private_key->value, (size_t)384U * (size_t)3U, - (size_t)768U * (size_t)3U + (size_t)32U, uint8_t), - t); - Eurydice_slice expected = Eurydice_array_to_subslice2( - private_key->value, (size_t)768U * (size_t)3U + (size_t)32U, - (size_t)768U * (size_t)3U + (size_t)64U, uint8_t); - return core_array_equality___core__cmp__PartialEq__0___Slice_U____for__Array_T__N___3__eq( - (size_t)32U, t, &expected, uint8_t, uint8_t, bool); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d uu____0[3U]; + KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, + uu____0[i] = ZERO_d6_ea();); + uint8_t uu____1[32U] = { 0U }; + IndCpaPublicKeyUnpacked_a0 lit; + memcpy( + lit.t_as_ntt, uu____0, + (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); + memcpy(lit.seed_for_A, uu____1, (size_t)32U * sizeof(uint8_t)); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d repeat_expression0[3U][3U]; + KRML_MAYBE_FOR3( + i0, (size_t)0U, (size_t)3U, (size_t)1U, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d repeat_expression[3U]; + KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, + repeat_expression[i] = ZERO_d6_ea();); + memcpy(repeat_expression0[i0], repeat_expression, + (size_t)3U * + sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d));); + memcpy(lit.A, repeat_expression0, + (size_t)3U * + sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d[3U])); + return lit; } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.G_f1 +A monomorphic instance of libcrux_ml_kem.hash_functions.portable.G_4a with const generics - K= 3 */ -static KRML_MUSTINLINE void -G_f1_38(Eurydice_slice input, uint8_t ret[64U]) +static inline void +G_4a_e0(Eurydice_slice input, uint8_t ret[64U]) { libcrux_ml_kem_hash_functions_portable_G(input, ret); } /** -This function found in impl {(libcrux_ml_kem::variant::Variant for -libcrux_ml_kem::variant::MlKem)} +This function found in impl {libcrux_ml_kem::variant::Variant for +libcrux_ml_kem::variant::MlKem} */ /** -A monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_d8 +A monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39 with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const generics - K= 3 */ static KRML_MUSTINLINE void -cpa_keygen_seed_d8_b0( +cpa_keygen_seed_39_9c( Eurydice_slice key_generation_seed, uint8_t ret[64U]) { uint8_t seed[33U] = { 0U }; Eurydice_slice_copy( - Eurydice_array_to_subslice2( + Eurydice_array_to_subslice3( seed, (size_t)0U, - LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t), + LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t *), key_generation_seed, uint8_t); seed[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = (uint8_t)(size_t)3U; uint8_t ret0[64U]; - G_f1_38(Eurydice_array_to_slice((size_t)33U, seed, uint8_t), ret0); + G_4a_e0(Eurydice_array_to_slice((size_t)33U, seed, uint8_t), ret0); memcpy(ret, ret0, (size_t)64U * sizeof(uint8_t)); } /** -A monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A.closure -with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, -libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const -generics -- K= 3 -*/ -static void -closure_fc( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) -{ - KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, - ret[i] = ZERO_89_c3();); -} - -/** A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PortableHash with const generics - $3size_t */ -typedef struct PortableHash_58_s { - libcrux_sha3_generic_keccak_KeccakState_48 shake128_state[3U]; -} PortableHash_58; +typedef struct PortableHash_88_s { + libcrux_sha3_generic_keccak_KeccakState_17 shake128_state[3U]; +} PortableHash_88; /** A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_init_absorb with const generics +libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final with const +generics - K= 3 */ -static KRML_MUSTINLINE PortableHash_58 -shake128_init_absorb_79(uint8_t input[3U][34U]) +static inline PortableHash_88 +shake128_init_absorb_final_e0( + uint8_t (*input)[34U]) { - libcrux_sha3_generic_keccak_KeccakState_48 shake128_state[3U]; - KRML_MAYBE_FOR3( - i, (size_t)0U, (size_t)3U, (size_t)1U, - shake128_state[i] = libcrux_sha3_portable_incremental_shake128_init();); + PortableHash_88 shake128_state; + libcrux_sha3_generic_keccak_KeccakState_17 repeat_expression[3U]; + KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, + repeat_expression[i] = + libcrux_sha3_portable_incremental_shake128_init();); + memcpy(shake128_state.shake128_state, repeat_expression, + (size_t)3U * sizeof(libcrux_sha3_generic_keccak_KeccakState_17)); KRML_MAYBE_FOR3( i, (size_t)0U, (size_t)3U, (size_t)1U, size_t i0 = i; libcrux_sha3_portable_incremental_shake128_absorb_final( - &shake128_state[i0], + &shake128_state.shake128_state[i0], Eurydice_array_to_slice((size_t)34U, input[i0], uint8_t));); - /* Passing arrays by value in Rust generates a copy in C */ - libcrux_sha3_generic_keccak_KeccakState_48 copy_of_shake128_state[3U]; - memcpy(copy_of_shake128_state, shake128_state, - (size_t)3U * sizeof(libcrux_sha3_generic_keccak_KeccakState_48)); - PortableHash_58 lit; - memcpy(lit.shake128_state, copy_of_shake128_state, - (size_t)3U * sizeof(libcrux_sha3_generic_keccak_KeccakState_48)); - return lit; + return shake128_state; } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_f1 with const +libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a with const generics - K= 3 */ -static KRML_MUSTINLINE PortableHash_58 -shake128_init_absorb_f1_77(uint8_t input[3U][34U]) +static inline PortableHash_88 +shake128_init_absorb_final_4a_e0( + uint8_t (*input)[34U]) { - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_input[3U][34U]; - memcpy(copy_of_input, input, (size_t)3U * sizeof(uint8_t[34U])); - return shake128_init_absorb_79(copy_of_input); + return shake128_init_absorb_final_e0(input); } /** A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_squeeze_three_blocks with const -generics +libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks with +const generics - K= 3 */ -static KRML_MUSTINLINE void -shake128_squeeze_three_blocks_eb( - PortableHash_58 *st, uint8_t ret[3U][504U]) +static inline void +shake128_squeeze_first_three_blocks_e0( + PortableHash_88 *st, uint8_t ret[3U][504U]) { uint8_t out[3U][504U] = { { 0U } }; KRML_MAYBE_FOR3( @@ -7850,20 +6205,20 @@ shake128_squeeze_three_blocks_eb( } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_squeeze_three_blocks_f1 with -const generics +libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a +with const generics - K= 3 */ -static KRML_MUSTINLINE void -shake128_squeeze_three_blocks_f1_84( - PortableHash_58 *self, uint8_t ret[3U][504U]) +static inline void +shake128_squeeze_first_three_blocks_4a_e0( + PortableHash_88 *self, uint8_t ret[3U][504U]) { - shake128_squeeze_three_blocks_eb(self, ret); + shake128_squeeze_first_three_blocks_e0(self, ret); } /** @@ -7915,8 +6270,8 @@ libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - N= 504 */ static KRML_MUSTINLINE bool -sample_from_uniform_distribution_next_17( - uint8_t randomness[3U][504U], size_t *sampled_coefficients, +sample_from_uniform_distribution_next_89( + uint8_t (*randomness)[504U], size_t *sampled_coefficients, int16_t (*out)[272U]) { KRML_MAYBE_FOR3( @@ -7925,16 +6280,16 @@ sample_from_uniform_distribution_next_17( size_t r = i; if (sampled_coefficients[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT) { - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( - randomness[i1], r * (size_t)24U, r * (size_t)24U + (size_t)24U, - uint8_t); - size_t sampled = libcrux_ml_kem_vector_portable_rej_sample_0d( - uu____0, Eurydice_array_to_subslice2( - out[i1], sampled_coefficients[i1], - sampled_coefficients[i1] + (size_t)16U, int16_t)); - size_t uu____1 = i1; - sampled_coefficients[uu____1] = - sampled_coefficients[uu____1] + sampled; + size_t sampled = libcrux_ml_kem_vector_portable_rej_sample_b8( + Eurydice_array_to_subslice3(randomness[i1], r * (size_t)24U, + r * (size_t)24U + (size_t)24U, + uint8_t *), + Eurydice_array_to_subslice3( + out[i1], sampled_coefficients[i1], + sampled_coefficients[i1] + (size_t)16U, int16_t *)); + size_t uu____0 = i1; + sampled_coefficients[uu____0] = + sampled_coefficients[uu____0] + sampled; } }); bool done = true; @@ -7950,13 +6305,13 @@ sample_from_uniform_distribution_next_17( /** A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_squeeze_block with const +libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block with const generics - K= 3 */ -static KRML_MUSTINLINE void -shake128_squeeze_block_3b(PortableHash_58 *st, - uint8_t ret[3U][168U]) +static inline void +shake128_squeeze_next_block_e0(PortableHash_88 *st, + uint8_t ret[3U][168U]) { uint8_t out[3U][168U] = { { 0U } }; KRML_MAYBE_FOR3( @@ -7968,20 +6323,20 @@ shake128_squeeze_block_3b(PortableHash_58 *st, } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** A monomorphic instance of -libcrux_ml_kem.hash_functions.portable.shake128_squeeze_block_f1 with const +libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a with const generics - K= 3 */ -static KRML_MUSTINLINE void -shake128_squeeze_block_f1_8e( - PortableHash_58 *self, uint8_t ret[3U][168U]) +static inline void +shake128_squeeze_next_block_4a_e0(PortableHash_88 *self, + uint8_t ret[3U][168U]) { - shake128_squeeze_block_3b(self, ret); + shake128_squeeze_next_block_e0(self, ret); } /** @@ -8033,8 +6388,8 @@ libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - N= 168 */ static KRML_MUSTINLINE bool -sample_from_uniform_distribution_next_170( - uint8_t randomness[3U][168U], size_t *sampled_coefficients, +sample_from_uniform_distribution_next_890( + uint8_t (*randomness)[168U], size_t *sampled_coefficients, int16_t (*out)[272U]) { KRML_MAYBE_FOR3( @@ -8043,16 +6398,16 @@ sample_from_uniform_distribution_next_170( size_t r = i; if (sampled_coefficients[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT) { - Eurydice_slice uu____0 = Eurydice_array_to_subslice2( - randomness[i1], r * (size_t)24U, r * (size_t)24U + (size_t)24U, - uint8_t); - size_t sampled = libcrux_ml_kem_vector_portable_rej_sample_0d( - uu____0, Eurydice_array_to_subslice2( - out[i1], sampled_coefficients[i1], - sampled_coefficients[i1] + (size_t)16U, int16_t)); - size_t uu____1 = i1; - sampled_coefficients[uu____1] = - sampled_coefficients[uu____1] + sampled; + size_t sampled = libcrux_ml_kem_vector_portable_rej_sample_b8( + Eurydice_array_to_subslice3(randomness[i1], r * (size_t)24U, + r * (size_t)24U + (size_t)24U, + uint8_t *), + Eurydice_array_to_subslice3( + out[i1], sampled_coefficients[i1], + sampled_coefficients[i1] + (size_t)16U, int16_t *)); + size_t uu____0 = i1; + sampled_coefficients[uu____0] = + sampled_coefficients[uu____0] + sampled; } }); bool done = true; @@ -8067,18 +6422,26 @@ sample_from_uniform_distribution_next_170( } /** -A monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.closure +This function found in impl {core::ops::function::FnMut<(@Array<i16, 272usize>), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, +Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_e7 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const generics - K= 3 */ -static libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -closure_e4( - int16_t s[272U]) +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_e7_2b0( + int16_t tupled_args[272U]) { - return from_i16_array_89_33( - Eurydice_array_to_subslice2(s, (size_t)0U, (size_t)256U, int16_t)); + int16_t s[272U]; + memcpy(s, tupled_args, (size_t)272U * sizeof(int16_t)); + return from_i16_array_d6_ea( + Eurydice_array_to_subslice3(s, (size_t)0U, (size_t)256U, int16_t *)); } /** @@ -8089,46 +6452,36 @@ generics - K= 3 */ static KRML_MUSTINLINE void -sample_from_xof_46( - uint8_t seeds[3U][34U], - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) +sample_from_xof_2b0( + uint8_t (*seeds)[34U], + libcrux_ml_kem_polynomial_PolynomialRingElement_1d ret[3U]) { size_t sampled_coefficients[3U] = { 0U }; int16_t out[3U][272U] = { { 0U } }; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_seeds[3U][34U]; - memcpy(copy_of_seeds, seeds, (size_t)3U * sizeof(uint8_t[34U])); - PortableHash_58 xof_state = shake128_init_absorb_f1_77(copy_of_seeds); + PortableHash_88 xof_state = shake128_init_absorb_final_4a_e0(seeds); uint8_t randomness0[3U][504U]; - shake128_squeeze_three_blocks_f1_84(&xof_state, randomness0); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_randomness0[3U][504U]; - memcpy(copy_of_randomness0, randomness0, (size_t)3U * sizeof(uint8_t[504U])); - bool done = sample_from_uniform_distribution_next_17( - copy_of_randomness0, sampled_coefficients, out); + shake128_squeeze_first_three_blocks_4a_e0(&xof_state, randomness0); + bool done = sample_from_uniform_distribution_next_89( + randomness0, sampled_coefficients, out); while (true) { if (done) { break; } else { uint8_t randomness[3U][168U]; - shake128_squeeze_block_f1_8e(&xof_state, randomness); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_randomness[3U][168U]; - memcpy(copy_of_randomness, randomness, - (size_t)3U * sizeof(uint8_t[168U])); - done = sample_from_uniform_distribution_next_170( - copy_of_randomness, sampled_coefficients, out); + shake128_squeeze_next_block_4a_e0(&xof_state, randomness); + done = sample_from_uniform_distribution_next_890( + randomness, sampled_coefficients, out); } } /* Passing arrays by value in Rust generates a copy in C */ int16_t copy_of_out[3U][272U]; memcpy(copy_of_out, out, (size_t)3U * sizeof(int16_t[272U])); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret0[3U]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d ret0[3U]; KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, - ret0[i] = closure_e4(copy_of_out[i]);); + ret0[i] = call_mut_e7_2b0(copy_of_out[i]);); memcpy( ret, ret0, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); + (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); } /** @@ -8139,70 +6492,45 @@ generics - K= 3 */ static KRML_MUSTINLINE void -sample_matrix_A_e7( - uint8_t seed[34U], bool transpose, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U][3U]) +sample_matrix_A_2b0( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d (*A_transpose)[3U], + uint8_t *seed, bool transpose) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 A_transpose[3U][3U]; - KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, - closure_fc(A_transpose[i]);); KRML_MAYBE_FOR3( i0, (size_t)0U, (size_t)3U, (size_t)1U, size_t i1 = i0; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_seed[34U]; - memcpy(copy_of_seed, seed, (size_t)34U * sizeof(uint8_t)); - uint8_t seeds[3U][34U]; KRML_MAYBE_FOR3( - i, (size_t)0U, (size_t)3U, (size_t)1U, - memcpy(seeds[i], copy_of_seed, (size_t)34U * sizeof(uint8_t));); + uint8_t seeds[3U][34U]; + KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, + core_array__core__clone__Clone_for__Array_T__N___clone( + (size_t)34U, seed, seeds[i], uint8_t, void *);); KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, size_t j = i; seeds[j][32U] = (uint8_t)i1; seeds[j][33U] = (uint8_t)j;); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_seeds[3U][34U]; - memcpy(copy_of_seeds, seeds, (size_t)3U * sizeof(uint8_t[34U])); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 sampled[3U]; - sample_from_xof_46(copy_of_seeds, sampled); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d sampled[3U]; + sample_from_xof_2b0(seeds, sampled); for (size_t i = (size_t)0U; i < Eurydice_slice_len( Eurydice_array_to_slice( (size_t)3U, sampled, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d), + libcrux_ml_kem_polynomial_PolynomialRingElement_1d); i++) { size_t j = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 sample = sampled[j]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d sample = sampled[j]; if (transpose) { A_transpose[j][i1] = sample; } else { A_transpose[i1][j] = sample; } - } - - ); - memcpy(ret, A_transpose, - (size_t)3U * - sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0[3U])); + }); } /** -A monomorphic instance of K. -with types libcrux_ml_kem_polynomial_PolynomialRingElement -libcrux_ml_kem_vector_portable_vector_type_PortableVector[3size_t], uint8_t - -*/ -typedef struct tuple_b0_s { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 fst[3U]; - uint8_t snd; -} tuple_b0; - -/** A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN with const generics - K= 3 - LEN= 128 */ -static KRML_MUSTINLINE void -PRFxN_1c(uint8_t (*input)[33U], - uint8_t ret[3U][128U]) +static inline void +PRFxN_41(uint8_t (*input)[33U], uint8_t ret[3U][128U]) { uint8_t out[3U][128U] = { { 0U } }; KRML_MAYBE_FOR3( @@ -8214,20 +6542,19 @@ PRFxN_1c(uint8_t (*input)[33U], } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_f1 +A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_4a with const generics - K= 3 - LEN= 128 */ -static KRML_MUSTINLINE void -PRFxN_f1_d5(uint8_t (*input)[33U], - uint8_t ret[3U][128U]) +static inline void +PRFxN_4a_41(uint8_t (*input)[33U], uint8_t ret[3U][128U]) { - PRFxN_1c(input, ret); + PRFxN_41(input, ret); } /** @@ -8243,78 +6570,102 @@ generics - ETA= 2 - ETA_RANDOMNESS_SIZE= 128 */ -static KRML_MUSTINLINE tuple_b0 -sample_vector_cbd_then_ntt_78( - uint8_t prf_input[33U], uint8_t domain_separator) +static KRML_MUSTINLINE uint8_t +sample_vector_cbd_then_ntt_3b0( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re_as_ntt, + uint8_t *prf_input, uint8_t domain_separator) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re_as_ntt[3U]; - KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, - re_as_ntt[i] = ZERO_89_c3();); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input[33U]; - memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t)); uint8_t prf_inputs[3U][33U]; - KRML_MAYBE_FOR3( - i, (size_t)0U, (size_t)3U, (size_t)1U, - memcpy(prf_inputs[i], copy_of_prf_input, (size_t)33U * sizeof(uint8_t));); - KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, size_t i0 = i; - prf_inputs[i0][32U] = domain_separator; - domain_separator = (uint32_t)domain_separator + 1U;); + KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, + core_array__core__clone__Clone_for__Array_T__N___clone( + (size_t)33U, prf_input, prf_inputs[i], uint8_t, void *);); + domain_separator = + libcrux_ml_kem_utils_prf_input_inc_e0(prf_inputs, domain_separator); uint8_t prf_outputs[3U][128U]; - PRFxN_f1_d5(prf_inputs, prf_outputs); + PRFxN_4a_41(prf_inputs, prf_outputs); KRML_MAYBE_FOR3( i, (size_t)0U, (size_t)3U, (size_t)1U, size_t i0 = i; - re_as_ntt[i0] = sample_from_binomial_distribution_ca( + re_as_ntt[i0] = sample_from_binomial_distribution_a0( Eurydice_array_to_slice((size_t)128U, prf_outputs[i0], uint8_t)); - ntt_binomially_sampled_ring_element_63(&re_as_ntt[i0]);); - /* Passing arrays by value in Rust generates a copy in C */ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 copy_of_re_as_ntt[3U]; - memcpy( - copy_of_re_as_ntt, re_as_ntt, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - tuple_b0 lit; - memcpy( - lit.fst, copy_of_re_as_ntt, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - lit.snd = domain_separator; - return lit; + ntt_binomially_sampled_ring_element_ea(&re_as_ntt[i0]);); + return domain_separator; } /** - Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise - sum of their constituent coefficients. +This function found in impl {core::ops::function::FnMut<(usize), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@3]> for +libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, +Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, +TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]} */ /** -This function found in impl -{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]} +A monomorphic instance of +libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73 with types +libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], +libcrux_ml_kem_variant_MlKem with const generics +- K= 3 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +*/ +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_73_1c0( + void **_) +{ + return ZERO_d6_ea(); +} + +/** + Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise + sum of their constituent coefficients. */ /** -A monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_89 +A monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - K= 3 */ static KRML_MUSTINLINE void -add_to_ring_element_89_1e( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *rhs) +add_to_ring_element_1b( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *myself, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *rhs) { for (size_t i = (size_t)0U; i < Eurydice_slice_len( Eurydice_array_to_slice( - (size_t)16U, self->coefficients, + (size_t)16U, myself->coefficients, libcrux_ml_kem_vector_portable_vector_type_PortableVector), libcrux_ml_kem_vector_portable_vector_type_PortableVector); i++) { size_t i0 = i; libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 = - libcrux_ml_kem_vector_portable_add_0d(self->coefficients[i0], + libcrux_ml_kem_vector_portable_add_b8(myself->coefficients[i0], &rhs->coefficients[i0]); - self->coefficients[i0] = uu____0; + myself->coefficients[i0] = uu____0; } } /** +This function found in impl +{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- K= 3 +*/ +static KRML_MUSTINLINE void +add_to_ring_element_d6_1b( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *self, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *rhs) +{ + add_to_ring_element_1b(self, rhs); +} + +/** Compute  ◦ ŝ + ê */ /** @@ -8324,104 +6675,154 @@ with const generics - K= 3 */ static KRML_MUSTINLINE void -compute_As_plus_e_c7( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 (*matrix_A)[3U], - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *s_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) +compute_As_plus_e_1b( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *t_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d (*matrix_A)[3U], + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *s_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *error_as_ntt) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result[3U]; - KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, - result[i] = ZERO_89_c3();); - for (size_t i0 = (size_t)0U; - i0 < Eurydice_slice_len( - Eurydice_array_to_slice( - (size_t)3U, matrix_A, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0[3U]), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0[3U]); - i0++) { - size_t i1 = i0; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *row = matrix_A[i1]; - for (size_t i = (size_t)0U; - i < Eurydice_slice_len( - Eurydice_array_to_slice( - (size_t)3U, row, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); - i++) { - size_t j = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *matrix_element = + for (size_t i = (size_t)0U; + i < Eurydice_slice_len( + Eurydice_array_to_slice( + (size_t)3U, matrix_A, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d[3U]), + libcrux_ml_kem_polynomial_PolynomialRingElement_1d[3U]); + i++) { + size_t i0 = i; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *row = matrix_A[i0]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d uu____0 = ZERO_d6_ea(); + t_as_ntt[i0] = uu____0; + for (size_t i1 = (size_t)0U; + i1 < Eurydice_slice_len( + Eurydice_array_to_slice( + (size_t)3U, row, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d), + libcrux_ml_kem_polynomial_PolynomialRingElement_1d); + i1++) { + size_t j = i1; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *matrix_element = &row[j]; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product = - ntt_multiply_89_3b(matrix_element, &s_as_ntt[j]); - add_to_ring_element_89_1e(&result[i1], &product); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d product = + ntt_multiply_d6_ea(matrix_element, &s_as_ntt[j]); + add_to_ring_element_d6_1b(&t_as_ntt[i0], &product); } - add_standard_error_reduce_89_64(&result[i1], &error_as_ntt[i1]); + add_standard_error_reduce_d6_ea(&t_as_ntt[i0], &error_as_ntt[i0]); } - memcpy( - ret, result, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); } /** -A monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair + This function implements most of <strong>Algorithm 12</strong> of the + NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation + algorithm. + + We say "most of" since Algorithm 12 samples the required randomness within + the function itself, whereas this implementation expects it to be provided + through the `key_generation_seed` parameter. + + Algorithm 12 is reproduced below: + + ```plaintext + Output: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}. + Output: decryption key dkₚₖₑ ∈ 𝔹^{384k}. + + d ←$ B + (ρ,σ) ← G(d) + N ← 0 + for (i ← 0; i < k; i++) + for(j ← 0; j < k; j++) + Â[i,j] ← SampleNTT(XOF(ρ, i, j)) + end for + end for + for(i ← 0; i < k; i++) + s[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(σ,N)) + N ← N + 1 + end for + for(i ← 0; i < k; i++) + e[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(σ,N)) + N ← N + 1 + end for + ŝ ← NTT(s) + ê ← NTT(e) + t̂ ← Â◦ŝ + ê + ekₚₖₑ ← ByteEncode₁₂(t̂) ‖ ρ + dkₚₖₑ ← ByteEncode₁₂(ŝ) + ``` + + The NIST FIPS 203 standard can be found at + <https://csrc.nist.gov/pubs/fips/203/ipd>. +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem with const generics - K= 3 -- PRIVATE_KEY_SIZE= 1152 -- PUBLIC_KEY_SIZE= 1184 -- RANKED_BYTES_PER_RING_ELEMENT= 1152 - ETA1= 2 - ETA1_RANDOMNESS_SIZE= 128 */ -static libcrux_ml_kem_utils_extraction_helper_Keypair768 -generate_keypair_a2( - Eurydice_slice key_generation_seed) +static KRML_MUSTINLINE void +generate_keypair_unpacked_1c0( + Eurydice_slice key_generation_seed, + IndCpaPrivateKeyUnpacked_a0 *private_key, + IndCpaPublicKeyUnpacked_a0 *public_key) { uint8_t hashed[64U]; - cpa_keygen_seed_d8_b0(key_generation_seed, hashed); + cpa_keygen_seed_39_9c(key_generation_seed, hashed); Eurydice_slice_uint8_t_x2 uu____0 = Eurydice_slice_split_at( Eurydice_array_to_slice((size_t)64U, hashed, uint8_t), (size_t)32U, uint8_t, Eurydice_slice_uint8_t_x2); - Eurydice_slice seed_for_A0 = uu____0.fst; + Eurydice_slice seed_for_A = uu____0.fst; Eurydice_slice seed_for_secret_and_error = uu____0.snd; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 A_transpose[3U][3U]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d(*uu____1)[3U] = + public_key->A; uint8_t ret[34U]; - libcrux_ml_kem_utils_into_padded_array_6d1(seed_for_A0, ret); - sample_matrix_A_e7(ret, true, A_transpose); + libcrux_ml_kem_utils_into_padded_array_b6(seed_for_A, ret); + sample_matrix_A_2b0(uu____1, ret, true); uint8_t prf_input[33U]; - libcrux_ml_kem_utils_into_padded_array_6d2(seed_for_secret_and_error, - prf_input); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input0[33U]; - memcpy(copy_of_prf_input0, prf_input, (size_t)33U * sizeof(uint8_t)); - tuple_b0 uu____2 = sample_vector_cbd_then_ntt_78(copy_of_prf_input0, 0U); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[3U]; - memcpy( - secret_as_ntt, uu____2.fst, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - uint8_t domain_separator = uu____2.snd; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input[33U]; - memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_as_ntt[3U]; - memcpy( - error_as_ntt, - sample_vector_cbd_then_ntt_78(copy_of_prf_input, domain_separator).fst, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 t_as_ntt[3U]; - compute_As_plus_e_c7(A_transpose, secret_as_ntt, error_as_ntt, t_as_ntt); - uint8_t seed_for_A[32U]; - core_result_Result_00 dst; - Eurydice_slice_to_array2(&dst, seed_for_A0, Eurydice_slice, uint8_t[32U]); - core_result_unwrap_41_33(dst, seed_for_A); + libcrux_ml_kem_utils_into_padded_array_c8(seed_for_secret_and_error, + prf_input); + uint8_t domain_separator = + sample_vector_cbd_then_ntt_3b0(private_key->secret_as_ntt, prf_input, 0U); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d error_as_ntt[3U]; + KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, + /* original Rust expression is not an lvalue in C */ + void *lvalue = (void *)0U; + error_as_ntt[i] = call_mut_73_1c0(&lvalue);); + sample_vector_cbd_then_ntt_3b0(error_as_ntt, prf_input, domain_separator); + compute_As_plus_e_1b(public_key->t_as_ntt, public_key->A, + private_key->secret_as_ntt, error_as_ntt); + uint8_t uu____2[32U]; + core_result_Result_fb dst; + Eurydice_slice_to_array2(&dst, seed_for_A, Eurydice_slice, uint8_t[32U], + core_array_TryFromSliceError); + core_result_unwrap_26_b3(dst, uu____2); + memcpy(public_key->seed_for_A, uu____2, (size_t)32U * sizeof(uint8_t)); +} + +/** + Serialize the secret key from the unpacked key pair generation. +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- K= 3 +- PRIVATE_KEY_SIZE= 1152 +- PUBLIC_KEY_SIZE= 1184 +*/ +static libcrux_ml_kem_utils_extraction_helper_Keypair768 +serialize_unpacked_secret_key_6c(IndCpaPublicKeyUnpacked_a0 *public_key, + IndCpaPrivateKeyUnpacked_a0 *private_key) +{ uint8_t public_key_serialized[1184U]; - serialize_public_key_67( - t_as_ntt, Eurydice_array_to_slice((size_t)32U, seed_for_A, uint8_t), + serialize_public_key_89( + public_key->t_as_ntt, + Eurydice_array_to_slice((size_t)32U, public_key->seed_for_A, uint8_t), public_key_serialized); - uint8_t secret_key_serialized[1152U]; - serialize_secret_key_a3(secret_as_ntt, secret_key_serialized); + uint8_t secret_key_serialized[1152U] = { 0U }; + serialize_vector_1b( + private_key->secret_as_ntt, + Eurydice_array_to_slice((size_t)1152U, secret_key_serialized, uint8_t)); /* Passing arrays by value in Rust generates a copy in C */ uint8_t copy_of_secret_key_serialized[1152U]; memcpy(copy_of_secret_key_serialized, secret_key_serialized, @@ -8439,56 +6840,93 @@ generate_keypair_a2( } /** +A monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], +libcrux_ml_kem_variant_MlKem with const generics +- K= 3 +- PRIVATE_KEY_SIZE= 1152 +- PUBLIC_KEY_SIZE= 1184 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +*/ +static KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair768 +generate_keypair_ea(Eurydice_slice key_generation_seed) +{ + IndCpaPrivateKeyUnpacked_a0 private_key = default_70_1b(); + IndCpaPublicKeyUnpacked_a0 public_key = default_8b_1b(); + generate_keypair_unpacked_1c0(key_generation_seed, &private_key, &public_key); + return serialize_unpacked_secret_key_6c(&public_key, &private_key); +} + +/** Serialize the secret key. */ /** -A monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key +A monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const generics - K= 3 - SERIALIZED_KEY_LEN= 2400 */ static KRML_MUSTINLINE void -serialize_kem_secret_key_5d( +serialize_kem_secret_key_mut_d6( Eurydice_slice private_key, Eurydice_slice public_key, - Eurydice_slice implicit_rejection_value, uint8_t ret[2400U]) + Eurydice_slice implicit_rejection_value, uint8_t *serialized) { - uint8_t out[2400U] = { 0U }; size_t pointer = (size_t)0U; - uint8_t *uu____0 = out; + uint8_t *uu____0 = serialized; size_t uu____1 = pointer; size_t uu____2 = pointer; Eurydice_slice_copy( - Eurydice_array_to_subslice2( + Eurydice_array_to_subslice3( uu____0, uu____1, uu____2 + Eurydice_slice_len(private_key, uint8_t), - uint8_t), + uint8_t *), private_key, uint8_t); pointer = pointer + Eurydice_slice_len(private_key, uint8_t); - uint8_t *uu____3 = out; + uint8_t *uu____3 = serialized; size_t uu____4 = pointer; size_t uu____5 = pointer; Eurydice_slice_copy( - Eurydice_array_to_subslice2( + Eurydice_array_to_subslice3( uu____3, uu____4, uu____5 + Eurydice_slice_len(public_key, uint8_t), - uint8_t), + uint8_t *), public_key, uint8_t); pointer = pointer + Eurydice_slice_len(public_key, uint8_t); - Eurydice_slice uu____6 = Eurydice_array_to_subslice2( - out, pointer, pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t); - uint8_t ret0[32U]; - H_f1_19(public_key, ret0); + Eurydice_slice uu____6 = Eurydice_array_to_subslice3( + serialized, pointer, pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, + uint8_t *); + uint8_t ret[32U]; + H_4a_e0(public_key, ret); Eurydice_slice_copy( - uu____6, Eurydice_array_to_slice((size_t)32U, ret0, uint8_t), uint8_t); + uu____6, Eurydice_array_to_slice((size_t)32U, ret, uint8_t), uint8_t); pointer = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE; - uint8_t *uu____7 = out; + uint8_t *uu____7 = serialized; size_t uu____8 = pointer; size_t uu____9 = pointer; Eurydice_slice_copy( - Eurydice_array_to_subslice2( + Eurydice_array_to_subslice3( uu____7, uu____8, uu____9 + Eurydice_slice_len(implicit_rejection_value, uint8_t), - uint8_t), + uint8_t *), implicit_rejection_value, uint8_t); +} + +/** +A monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key +with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] +with const generics +- K= 3 +- SERIALIZED_KEY_LEN= 2400 +*/ +static KRML_MUSTINLINE void +serialize_kem_secret_key_d6( + Eurydice_slice private_key, Eurydice_slice public_key, + Eurydice_slice implicit_rejection_value, uint8_t ret[2400U]) +{ + uint8_t out[2400U] = { 0U }; + serialize_kem_secret_key_mut_d6(private_key, public_key, + implicit_rejection_value, out); memcpy(ret, out, (size_t)2400U * sizeof(uint8_t)); } @@ -8509,28 +6947,27 @@ libcrux_ml_kem_variant_MlKem with const generics - CPA_PRIVATE_KEY_SIZE= 1152 - PRIVATE_KEY_SIZE= 2400 - PUBLIC_KEY_SIZE= 1184 -- BYTES_PER_RING_ELEMENT= 1152 - ETA1= 2 - ETA1_RANDOMNESS_SIZE= 128 */ libcrux_ml_kem_mlkem768_MlKem768KeyPair -libcrux_ml_kem_ind_cca_generate_keypair_f6(uint8_t randomness[64U]) +libcrux_ml_kem_ind_cca_generate_keypair_15(uint8_t *randomness) { - Eurydice_slice ind_cpa_keypair_randomness = Eurydice_array_to_subslice2( + Eurydice_slice ind_cpa_keypair_randomness = Eurydice_array_to_subslice3( randomness, (size_t)0U, - LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t); + LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t *); Eurydice_slice implicit_rejection_value = Eurydice_array_to_subslice_from( (size_t)64U, randomness, LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t, - size_t); + size_t, uint8_t[]); libcrux_ml_kem_utils_extraction_helper_Keypair768 uu____0 = - generate_keypair_a2(ind_cpa_keypair_randomness); + generate_keypair_ea(ind_cpa_keypair_randomness); uint8_t ind_cpa_private_key[1152U]; memcpy(ind_cpa_private_key, uu____0.fst, (size_t)1152U * sizeof(uint8_t)); uint8_t public_key[1184U]; memcpy(public_key, uu____0.snd, (size_t)1184U * sizeof(uint8_t)); uint8_t secret_key_serialized[2400U]; - serialize_kem_secret_key_5d( + serialize_kem_secret_key_d6( Eurydice_array_to_slice((size_t)1152U, ind_cpa_private_key, uint8_t), Eurydice_array_to_slice((size_t)1184U, public_key, uint8_t), implicit_rejection_value, secret_key_serialized); @@ -8538,28 +6975,28 @@ libcrux_ml_kem_ind_cca_generate_keypair_f6(uint8_t randomness[64U]) uint8_t copy_of_secret_key_serialized[2400U]; memcpy(copy_of_secret_key_serialized, secret_key_serialized, (size_t)2400U * sizeof(uint8_t)); - libcrux_ml_kem_types_MlKemPrivateKey_55 private_key = - libcrux_ml_kem_types_from_05_890(copy_of_secret_key_serialized); - libcrux_ml_kem_types_MlKemPrivateKey_55 uu____2 = private_key; + libcrux_ml_kem_types_MlKemPrivateKey_d9 private_key = + libcrux_ml_kem_types_from_77_28(copy_of_secret_key_serialized); + libcrux_ml_kem_types_MlKemPrivateKey_d9 uu____2 = private_key; /* Passing arrays by value in Rust generates a copy in C */ uint8_t copy_of_public_key[1184U]; memcpy(copy_of_public_key, public_key, (size_t)1184U * sizeof(uint8_t)); - return libcrux_ml_kem_types_from_17_820( - uu____2, libcrux_ml_kem_types_from_b6_960(copy_of_public_key)); + return libcrux_ml_kem_types_from_17_74( + uu____2, libcrux_ml_kem_types_from_fd_d0(copy_of_public_key)); } /** -This function found in impl {(libcrux_ml_kem::variant::Variant for -libcrux_ml_kem::variant::MlKem)} +This function found in impl {libcrux_ml_kem::variant::Variant for +libcrux_ml_kem::variant::MlKem} */ /** -A monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_d8 +A monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39 with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const generics - K= 3 */ static KRML_MUSTINLINE void -entropy_preprocess_d8_9f(Eurydice_slice randomness, +entropy_preprocess_39_9c(Eurydice_slice randomness, uint8_t ret[32U]) { uint8_t out[32U] = { 0U }; @@ -8569,43 +7006,115 @@ entropy_preprocess_d8_9f(Eurydice_slice randomness, } /** - This function deserializes ring elements and reduces the result by the field - modulus. +A monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const +generics +- K= 3 +- T_AS_NTT_ENCODED_SIZE= 1152 +*/ +static KRML_MUSTINLINE void +build_unpacked_public_key_mut_3f0( + Eurydice_slice public_key, + IndCpaPublicKeyUnpacked_a0 *unpacked_public_key) +{ + Eurydice_slice uu____0 = Eurydice_slice_subslice_to( + public_key, (size_t)1152U, uint8_t, size_t, uint8_t[]); + deserialize_ring_elements_reduced_1b(uu____0, unpacked_public_key->t_as_ntt); + Eurydice_slice seed = Eurydice_slice_subslice_from( + public_key, (size_t)1152U, uint8_t, size_t, uint8_t[]); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d(*uu____1)[3U] = + unpacked_public_key->A; + uint8_t ret[34U]; + libcrux_ml_kem_utils_into_padded_array_b6(seed, ret); + sample_matrix_A_2b0(uu____1, ret, false); +} - This function MUST NOT be used on secret inputs. +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const +generics +- K= 3 +- T_AS_NTT_ENCODED_SIZE= 1152 */ +static KRML_MUSTINLINE IndCpaPublicKeyUnpacked_a0 +build_unpacked_public_key_3f(Eurydice_slice public_key) +{ + IndCpaPublicKeyUnpacked_a0 unpacked_public_key = default_8b_1b(); + build_unpacked_public_key_mut_3f0(public_key, &unpacked_public_key); + return unpacked_public_key; +} + /** -A monomorphic instance of -libcrux_ml_kem.serialize.deserialize_ring_elements_reduced with types -libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- PUBLIC_KEY_SIZE= 1152 +A monomorphic instance of K. +with types libcrux_ml_kem_polynomial_PolynomialRingElement +libcrux_ml_kem_vector_portable_vector_type_PortableVector[3size_t], +libcrux_ml_kem_polynomial_PolynomialRingElement +libcrux_ml_kem_vector_portable_vector_type_PortableVector + +*/ +typedef struct tuple_ed_s { + libcrux_ml_kem_polynomial_PolynomialRingElement_1d fst[3U]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d snd; +} tuple_ed; + +/** +This function found in impl {core::ops::function::FnMut<(usize), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, +K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, +ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, +TraitClause@3]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const +generics - K= 3 +- C1_LEN= 960 +- U_COMPRESSION_FACTOR= 10 +- BLOCK_LEN= 320 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +- ETA2= 2 +- ETA2_RANDOMNESS_SIZE= 128 */ -static KRML_MUSTINLINE void -deserialize_ring_elements_reduced_4f( - Eurydice_slice public_key, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_f1_850( + void **_) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 deserialized_pk[3U]; - KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, - deserialized_pk[i] = ZERO_89_c3();); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len(public_key, uint8_t) / - LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT; - i++) { - size_t i0 = i; - Eurydice_slice ring_element = Eurydice_slice_subslice2( - public_key, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT + - LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - uint8_t); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____0 = - deserialize_to_reduced_ring_element_45(ring_element); - deserialized_pk[i0] = uu____0; - } - memcpy( - ret, deserialized_pk, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); + return ZERO_d6_ea(); +} + +/** +This function found in impl {core::ops::function::FnMut<(usize), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, +Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, +ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, +TraitClause@3]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const +generics +- K= 3 +- C1_LEN= 960 +- U_COMPRESSION_FACTOR= 10 +- BLOCK_LEN= 320 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +- ETA2= 2 +- ETA2_RANDOMNESS_SIZE= 128 +*/ +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_dd_850( + void **_) +{ + return ZERO_d6_ea(); } /** @@ -8620,58 +7129,61 @@ generics - ETA2_RANDOMNESS_SIZE= 128 - ETA2= 2 */ -static KRML_MUSTINLINE tuple_b0 -sample_ring_element_cbd_a8(uint8_t prf_input[33U], uint8_t domain_separator) +static KRML_MUSTINLINE uint8_t +sample_ring_element_cbd_3b0( + uint8_t *prf_input, uint8_t domain_separator, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *error_1) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_1[3U]; - KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, - error_1[i] = ZERO_89_c3();); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input[33U]; - memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t)); uint8_t prf_inputs[3U][33U]; - KRML_MAYBE_FOR3( - i, (size_t)0U, (size_t)3U, (size_t)1U, - memcpy(prf_inputs[i], copy_of_prf_input, (size_t)33U * sizeof(uint8_t));); - KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, size_t i0 = i; - prf_inputs[i0][32U] = domain_separator; - domain_separator = (uint32_t)domain_separator + 1U;); + KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, + core_array__core__clone__Clone_for__Array_T__N___clone( + (size_t)33U, prf_input, prf_inputs[i], uint8_t, void *);); + domain_separator = + libcrux_ml_kem_utils_prf_input_inc_e0(prf_inputs, domain_separator); uint8_t prf_outputs[3U][128U]; - PRFxN_f1_d5(prf_inputs, prf_outputs); + PRFxN_4a_41(prf_inputs, prf_outputs); KRML_MAYBE_FOR3( i, (size_t)0U, (size_t)3U, (size_t)1U, size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____1 = - sample_from_binomial_distribution_ca( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d uu____0 = + sample_from_binomial_distribution_a0( Eurydice_array_to_slice((size_t)128U, prf_outputs[i0], uint8_t)); - error_1[i0] = uu____1;); - /* Passing arrays by value in Rust generates a copy in C */ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 copy_of_error_1[3U]; - memcpy( - copy_of_error_1, error_1, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - tuple_b0 lit; - memcpy( - lit.fst, copy_of_error_1, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - lit.snd = domain_separator; - return lit; + error_1[i0] = uu____0;); + return domain_separator; } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_f1 +A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a with const generics - K= 3 - LEN= 128 */ -static KRML_MUSTINLINE void -PRF_f1_2e0(Eurydice_slice input, - uint8_t ret[128U]) +static inline void +PRF_4a_410(Eurydice_slice input, uint8_t ret[128U]) +{ + PRF_a6(input, ret); +} + +/** +This function found in impl {core::ops::function::FnMut<(usize), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, +K>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- K= 3 +*/ +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_a8_1b( + void **_) { - PRF_7c0(input, ret); + return ZERO_d6_ea(); } /** @@ -8681,19 +7193,19 @@ with const generics - K= 3 */ static KRML_MUSTINLINE void -invert_ntt_montgomery_c9( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) +invert_ntt_montgomery_1b( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re) { size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U; - invert_ntt_at_layer_1_4b(&zeta_i, re); - invert_ntt_at_layer_2_2b(&zeta_i, re); - invert_ntt_at_layer_3_97(&zeta_i, re); - invert_ntt_at_layer_4_plus_04(&zeta_i, re, (size_t)4U); - invert_ntt_at_layer_4_plus_04(&zeta_i, re, (size_t)5U); - invert_ntt_at_layer_4_plus_04(&zeta_i, re, (size_t)6U); - invert_ntt_at_layer_4_plus_04(&zeta_i, re, (size_t)7U); - poly_barrett_reduce_89_d8(re); + invert_ntt_at_layer_1_ea(&zeta_i, re); + invert_ntt_at_layer_2_ea(&zeta_i, re); + invert_ntt_at_layer_3_ea(&zeta_i, re); + invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U); + invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U); + invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U); + invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U); + poly_barrett_reduce_d6_ea(re); } /** @@ -8706,69 +7218,86 @@ with const generics - K= 3 */ static KRML_MUSTINLINE void -compute_vector_u_93( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 (*a_as_ntt)[3U], - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *r_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error_1, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) +compute_vector_u_1b( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d (*a_as_ntt)[3U], + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *r_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *error_1, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d ret[3U]) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result[3U]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d result[3U]; KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, - result[i] = ZERO_89_c3();); + /* original Rust expression is not an lvalue in C */ + void *lvalue = (void *)0U; + result[i] = call_mut_a8_1b(&lvalue);); for (size_t i0 = (size_t)0U; i0 < Eurydice_slice_len( Eurydice_array_to_slice( (size_t)3U, a_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0[3U]), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0[3U]); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d[3U]), + libcrux_ml_kem_polynomial_PolynomialRingElement_1d[3U]); i0++) { size_t i1 = i0; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *row = a_as_ntt[i1]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *row = a_as_ntt[i1]; for (size_t i = (size_t)0U; i < Eurydice_slice_len( Eurydice_array_to_slice( (size_t)3U, row, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d), + libcrux_ml_kem_polynomial_PolynomialRingElement_1d); i++) { size_t j = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *a_element = &row[j]; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product = - ntt_multiply_89_3b(a_element, &r_as_ntt[j]); - add_to_ring_element_89_1e(&result[i1], &product); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *a_element = &row[j]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d product = + ntt_multiply_d6_ea(a_element, &r_as_ntt[j]); + add_to_ring_element_d6_1b(&result[i1], &product); } - invert_ntt_montgomery_c9(&result[i1]); - add_error_reduce_89_5d(&result[i1], &error_1[i1]); + invert_ntt_montgomery_1b(&result[i1]); + add_error_reduce_d6_ea(&result[i1], &error_1[i1]); } memcpy( ret, result, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); + (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); } /** - Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message -*/ -/** -A monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v +A monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_10 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- K= 3 +- OUT_LEN= 320 */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -compute_ring_element_v_54( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *t_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *r_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error_2, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *message) +static KRML_MUSTINLINE void +compress_then_serialize_10_ff( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re, uint8_t ret[320U]) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result = ZERO_89_c3(); - KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product = - ntt_multiply_89_3b(&t_as_ntt[i0], &r_as_ntt[i0]); - add_to_ring_element_89_1e(&result, &product);); - invert_ntt_montgomery_c9(&result); - result = add_message_error_reduce_89_c4(error_2, message, result); - return result; + uint8_t serialized[320U] = { 0U }; + for (size_t i = (size_t)0U; i < VECTORS_IN_RING_ELEMENT; i++) { + size_t i0 = i; + libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient = + compress_b8_ef(to_unsigned_field_modulus_ea(re->coefficients[i0])); + uint8_t bytes[20U]; + libcrux_ml_kem_vector_portable_serialize_10_b8(coefficient, bytes); + Eurydice_slice_copy( + Eurydice_array_to_subslice3(serialized, (size_t)20U * i0, + (size_t)20U * i0 + (size_t)20U, uint8_t *), + Eurydice_array_to_slice((size_t)20U, bytes, uint8_t), uint8_t); + } + memcpy(ret, serialized, (size_t)320U * sizeof(uint8_t)); +} + +/** +A monomorphic instance of +libcrux_ml_kem.serialize.compress_then_serialize_ring_element_u with types +libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics +- COMPRESSION_FACTOR= 10 +- OUT_LEN= 320 +*/ +static KRML_MUSTINLINE void +compress_then_serialize_ring_element_u_fe( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re, uint8_t ret[320U]) +{ + uint8_t uu____0[320U]; + compress_then_serialize_10_ff(re, uu____0); + memcpy(ret, uu____0, (size_t)320U * sizeof(uint8_t)); } /** @@ -8783,128 +7312,285 @@ with const generics - COMPRESSION_FACTOR= 10 - BLOCK_LEN= 320 */ -static void -compress_then_serialize_u_28( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 input[3U], +static KRML_MUSTINLINE void +compress_then_serialize_u_43( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d input[3U], Eurydice_slice out) { for (size_t i = (size_t)0U; i < Eurydice_slice_len( Eurydice_array_to_slice( (size_t)3U, input, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0), - libcrux_ml_kem_polynomial_PolynomialRingElement_f0); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d), + libcrux_ml_kem_polynomial_PolynomialRingElement_1d); i++) { size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = input[i0]; - Eurydice_slice uu____0 = Eurydice_slice_subslice2( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re = input[i0]; + Eurydice_slice uu____0 = Eurydice_slice_subslice3( out, i0 * ((size_t)960U / (size_t)3U), - (i0 + (size_t)1U) * ((size_t)960U / (size_t)3U), uint8_t); + (i0 + (size_t)1U) * ((size_t)960U / (size_t)3U), uint8_t *); uint8_t ret[320U]; - compress_then_serialize_ring_element_u_2e(&re, ret); + compress_then_serialize_ring_element_u_fe(&re, ret); Eurydice_slice_copy( uu____0, Eurydice_array_to_slice((size_t)320U, ret, uint8_t), uint8_t); } } /** -A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt +A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const generics - K= 3 -- CIPHERTEXT_SIZE= 1088 -- T_AS_NTT_ENCODED_SIZE= 1152 - C1_LEN= 960 -- C2_LEN= 128 - U_COMPRESSION_FACTOR= 10 -- V_COMPRESSION_FACTOR= 4 - BLOCK_LEN= 320 - ETA1= 2 - ETA1_RANDOMNESS_SIZE= 128 - ETA2= 2 - ETA2_RANDOMNESS_SIZE= 128 */ -static void -encrypt_7b(Eurydice_slice public_key, uint8_t message[32U], - Eurydice_slice randomness, uint8_t ret[1088U]) -{ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 t_as_ntt[3U]; - deserialize_ring_elements_reduced_4f( - Eurydice_slice_subslice_to(public_key, (size_t)1152U, uint8_t, size_t), - t_as_ntt); - Eurydice_slice seed = - Eurydice_slice_subslice_from(public_key, (size_t)1152U, uint8_t, size_t); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 A[3U][3U]; - uint8_t ret0[34U]; - libcrux_ml_kem_utils_into_padded_array_6d1(seed, ret0); - sample_matrix_A_e7(ret0, false, A); +static KRML_MUSTINLINE tuple_ed +encrypt_c1_850(Eurydice_slice randomness, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d (*matrix)[3U], + Eurydice_slice ciphertext) +{ uint8_t prf_input[33U]; - libcrux_ml_kem_utils_into_padded_array_6d2(randomness, prf_input); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input0[33U]; - memcpy(copy_of_prf_input0, prf_input, (size_t)33U * sizeof(uint8_t)); - tuple_b0 uu____1 = sample_vector_cbd_then_ntt_78(copy_of_prf_input0, 0U); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 r_as_ntt[3U]; - memcpy( - r_as_ntt, uu____1.fst, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - uint8_t domain_separator0 = uu____1.snd; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_prf_input[33U]; - memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t)); - tuple_b0 uu____3 = - sample_ring_element_cbd_a8(copy_of_prf_input, domain_separator0); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_1[3U]; - memcpy( - error_1, uu____3.fst, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - uint8_t domain_separator = uu____3.snd; + libcrux_ml_kem_utils_into_padded_array_c8(randomness, prf_input); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d r_as_ntt[3U]; + KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, + /* original Rust expression is not an lvalue in C */ + void *lvalue = (void *)0U; + r_as_ntt[i] = call_mut_f1_850(&lvalue);); + uint8_t domain_separator0 = + sample_vector_cbd_then_ntt_3b0(r_as_ntt, prf_input, 0U); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d error_1[3U]; + KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, + /* original Rust expression is not an lvalue in C */ + void *lvalue = (void *)0U; + error_1[i] = call_mut_dd_850(&lvalue);); + uint8_t domain_separator = + sample_ring_element_cbd_3b0(prf_input, domain_separator0, error_1); prf_input[32U] = domain_separator; uint8_t prf_output[128U]; - PRF_f1_2e0(Eurydice_array_to_slice((size_t)33U, prf_input, uint8_t), + PRF_4a_410(Eurydice_array_to_slice((size_t)33U, prf_input, uint8_t), prf_output); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_2 = - sample_from_binomial_distribution_ca( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d error_2 = + sample_from_binomial_distribution_a0( Eurydice_array_to_slice((size_t)128U, prf_output, uint8_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 u[3U]; - compute_vector_u_93(A, r_as_ntt, error_1, u); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d u[3U]; + compute_vector_u_1b(matrix, r_as_ntt, error_1, u); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d uu____0[3U]; + memcpy( + uu____0, u, + (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); + compress_then_serialize_u_43(uu____0, ciphertext); /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_message[32U]; - memcpy(copy_of_message, message, (size_t)32U * sizeof(uint8_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 message_as_ring_element = - deserialize_then_decompress_message_f7(copy_of_message); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 v = - compute_ring_element_v_54(t_as_ntt, r_as_ntt, &error_2, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d copy_of_r_as_ntt[3U]; + memcpy( + copy_of_r_as_ntt, r_as_ntt, + (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); + tuple_ed lit; + memcpy( + lit.fst, copy_of_r_as_ntt, + (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); + lit.snd = error_2; + return lit; +} + +/** + Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message +*/ +/** +A monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- K= 3 +*/ +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +compute_ring_element_v_1b( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *t_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *r_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *error_2, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *message) +{ + libcrux_ml_kem_polynomial_PolynomialRingElement_1d result = ZERO_d6_ea(); + KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, size_t i0 = i; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d product = + ntt_multiply_d6_ea(&t_as_ntt[i0], &r_as_ntt[i0]); + add_to_ring_element_d6_1b(&result, &product);); + invert_ntt_montgomery_1b(&result); + return add_message_error_reduce_d6_ea(error_2, message, result); +} + +/** +A monomorphic instance of +libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v with types +libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics +- K= 3 +- COMPRESSION_FACTOR= 4 +- OUT_LEN= 128 +*/ +static KRML_MUSTINLINE void +compress_then_serialize_ring_element_v_6c( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d re, Eurydice_slice out) +{ + compress_then_serialize_4_ea(re, out); +} + +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2 +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- K= 3 +- V_COMPRESSION_FACTOR= 4 +- C2_LEN= 128 +*/ +static KRML_MUSTINLINE void +encrypt_c2_6c( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *t_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *r_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *error_2, + uint8_t *message, Eurydice_slice ciphertext) +{ + libcrux_ml_kem_polynomial_PolynomialRingElement_1d message_as_ring_element = + deserialize_then_decompress_message_ea(message); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d v = + compute_ring_element_v_1b(t_as_ntt, r_as_ntt, error_2, &message_as_ring_element); + compress_then_serialize_ring_element_v_6c(v, ciphertext); +} + +/** + This function implements <strong>Algorithm 13</strong> of the + NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm. + + Algorithm 13 is reproduced below: + + ```plaintext + Input: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}. + Input: message m ∈ 𝔹^{32}. + Input: encryption randomness r ∈ 𝔹^{32}. + Output: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}. + + N ← 0 + t̂ ← ByteDecode₁₂(ekₚₖₑ[0:384k]) + ρ ← ekₚₖₑ[384k: 384k + 32] + for (i ← 0; i < k; i++) + for(j ← 0; j < k; j++) + Â[i,j] ← SampleNTT(XOF(ρ, i, j)) + end for + end for + for(i ← 0; i < k; i++) + r[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(r,N)) + N ← N + 1 + end for + for(i ← 0; i < k; i++) + e₁[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N)) + N ← N + 1 + end for + e₂ ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N)) + r̂ ← NTT(r) + u ← NTT-¹(Âᵀ ◦ r̂) + e₁ + μ ← Decompress₁(ByteDecode₁(m))) + v ← NTT-¹(t̂ᵀ ◦ rˆ) + e₂ + μ + c₁ ← ByteEncode_{dᵤ}(Compress_{dᵤ}(u)) + c₂ ← ByteEncode_{dᵥ}(Compress_{dᵥ}(v)) + return c ← (c₁ ‖ c₂) + ``` + + The NIST FIPS 203 standard can be found at + <https://csrc.nist.gov/pubs/fips/203/ipd>. +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const +generics +- K= 3 +- CIPHERTEXT_SIZE= 1088 +- T_AS_NTT_ENCODED_SIZE= 1152 +- C1_LEN= 960 +- C2_LEN= 128 +- U_COMPRESSION_FACTOR= 10 +- V_COMPRESSION_FACTOR= 4 +- BLOCK_LEN= 320 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +- ETA2= 2 +- ETA2_RANDOMNESS_SIZE= 128 +*/ +static KRML_MUSTINLINE void +encrypt_unpacked_2a0( + IndCpaPublicKeyUnpacked_a0 *public_key, uint8_t *message, + Eurydice_slice randomness, uint8_t ret[1088U]) +{ uint8_t ciphertext[1088U] = { 0U }; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____5[3U]; + tuple_ed uu____0 = + encrypt_c1_850(randomness, public_key->A, + Eurydice_array_to_subslice3(ciphertext, (size_t)0U, + (size_t)960U, uint8_t *)); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d r_as_ntt[3U]; memcpy( - uu____5, u, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - compress_then_serialize_u_28( - uu____5, Eurydice_array_to_subslice2(ciphertext, (size_t)0U, (size_t)960U, - uint8_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____6 = v; - compress_then_serialize_ring_element_v_65( - uu____6, Eurydice_array_to_subslice_from((size_t)1088U, ciphertext, - (size_t)960U, uint8_t, size_t)); + r_as_ntt, uu____0.fst, + (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d error_2 = uu____0.snd; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *uu____1 = + public_key->t_as_ntt; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *uu____2 = r_as_ntt; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *uu____3 = &error_2; + uint8_t *uu____4 = message; + encrypt_c2_6c( + uu____1, uu____2, uu____3, uu____4, + Eurydice_array_to_subslice_from((size_t)1088U, ciphertext, (size_t)960U, + uint8_t, size_t, uint8_t[])); memcpy(ret, ciphertext, (size_t)1088U * sizeof(uint8_t)); } /** -This function found in impl {(libcrux_ml_kem::variant::Variant for -libcrux_ml_kem::variant::MlKem)} +A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, +libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const +generics +- K= 3 +- CIPHERTEXT_SIZE= 1088 +- T_AS_NTT_ENCODED_SIZE= 1152 +- C1_LEN= 960 +- C2_LEN= 128 +- U_COMPRESSION_FACTOR= 10 +- V_COMPRESSION_FACTOR= 4 +- BLOCK_LEN= 320 +- ETA1= 2 +- ETA1_RANDOMNESS_SIZE= 128 +- ETA2= 2 +- ETA2_RANDOMNESS_SIZE= 128 +*/ +static KRML_MUSTINLINE void +encrypt_2a(Eurydice_slice public_key, + uint8_t *message, + Eurydice_slice randomness, + uint8_t ret[1088U]) +{ + IndCpaPublicKeyUnpacked_a0 unpacked_public_key = + build_unpacked_public_key_3f(public_key); + uint8_t ret0[1088U]; + encrypt_unpacked_2a0(&unpacked_public_key, message, randomness, ret0); + memcpy(ret, ret0, (size_t)1088U * sizeof(uint8_t)); +} + +/** +This function found in impl {libcrux_ml_kem::variant::Variant for +libcrux_ml_kem::variant::MlKem} */ /** -A monomorphic instance of libcrux_ml_kem.variant.kdf_d8 +A monomorphic instance of libcrux_ml_kem.variant.kdf_39 with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const generics - K= 3 - CIPHERTEXT_SIZE= 1088 */ static KRML_MUSTINLINE void -kdf_d8_c5(Eurydice_slice shared_secret, +kdf_39_d6(Eurydice_slice shared_secret, uint8_t ret[32U]) { uint8_t out[32U] = { 0U }; @@ -8926,111 +7612,159 @@ libcrux_ml_kem_variant_MlKem with const generics - C2_SIZE= 128 - VECTOR_U_COMPRESSION_FACTOR= 10 - VECTOR_V_COMPRESSION_FACTOR= 4 -- VECTOR_U_BLOCK_LEN= 320 +- C1_BLOCK_SIZE= 320 - ETA1= 2 - ETA1_RANDOMNESS_SIZE= 128 - ETA2= 2 - ETA2_RANDOMNESS_SIZE= 128 */ -tuple_3c -libcrux_ml_kem_ind_cca_encapsulate_eb( - libcrux_ml_kem_types_MlKemPublicKey_15 *public_key, - uint8_t randomness[32U]) +tuple_c2 +libcrux_ml_kem_ind_cca_encapsulate_ca( + libcrux_ml_kem_types_MlKemPublicKey_30 *public_key, uint8_t *randomness) { uint8_t randomness0[32U]; - entropy_preprocess_d8_9f( + entropy_preprocess_39_9c( Eurydice_array_to_slice((size_t)32U, randomness, uint8_t), randomness0); uint8_t to_hash[64U]; - libcrux_ml_kem_utils_into_padded_array_6d( + libcrux_ml_kem_utils_into_padded_array_24( Eurydice_array_to_slice((size_t)32U, randomness0, uint8_t), to_hash); Eurydice_slice uu____0 = Eurydice_array_to_subslice_from( (size_t)64U, to_hash, LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t, - size_t); - uint8_t ret[32U]; - H_f1_19(Eurydice_array_to_slice( - (size_t)1184U, libcrux_ml_kem_types_as_slice_cb_3d0(public_key), + size_t, uint8_t[]); + uint8_t ret0[32U]; + H_4a_e0(Eurydice_array_to_slice( + (size_t)1184U, libcrux_ml_kem_types_as_slice_e6_d0(public_key), uint8_t), - ret); + ret0); Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)32U, ret, uint8_t), uint8_t); + uu____0, Eurydice_array_to_slice((size_t)32U, ret0, uint8_t), uint8_t); uint8_t hashed[64U]; - G_f1_38(Eurydice_array_to_slice((size_t)64U, to_hash, uint8_t), hashed); + G_4a_e0(Eurydice_array_to_slice((size_t)64U, to_hash, uint8_t), hashed); Eurydice_slice_uint8_t_x2 uu____1 = Eurydice_slice_split_at( Eurydice_array_to_slice((size_t)64U, hashed, uint8_t), LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, uint8_t, Eurydice_slice_uint8_t_x2); Eurydice_slice shared_secret = uu____1.fst; Eurydice_slice pseudorandomness = uu____1.snd; - Eurydice_slice uu____2 = Eurydice_array_to_slice( - (size_t)1184U, libcrux_ml_kem_types_as_slice_cb_3d0(public_key), uint8_t); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_randomness[32U]; - memcpy(copy_of_randomness, randomness0, (size_t)32U * sizeof(uint8_t)); uint8_t ciphertext[1088U]; - encrypt_7b(uu____2, copy_of_randomness, pseudorandomness, ciphertext); + encrypt_2a(Eurydice_array_to_slice( + (size_t)1184U, libcrux_ml_kem_types_as_slice_e6_d0(public_key), + uint8_t), + randomness0, pseudorandomness, ciphertext); /* Passing arrays by value in Rust generates a copy in C */ uint8_t copy_of_ciphertext[1088U]; memcpy(copy_of_ciphertext, ciphertext, (size_t)1088U * sizeof(uint8_t)); - libcrux_ml_kem_mlkem768_MlKem768Ciphertext ciphertext0 = - libcrux_ml_kem_types_from_01_330(copy_of_ciphertext); - uint8_t shared_secret_array[32U]; - kdf_d8_c5(shared_secret, shared_secret_array); - libcrux_ml_kem_mlkem768_MlKem768Ciphertext uu____5 = ciphertext0; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_shared_secret_array[32U]; - memcpy(copy_of_shared_secret_array, shared_secret_array, - (size_t)32U * sizeof(uint8_t)); - tuple_3c lit; - lit.fst = uu____5; - memcpy(lit.snd, copy_of_shared_secret_array, (size_t)32U * sizeof(uint8_t)); + tuple_c2 lit; + lit.fst = libcrux_ml_kem_types_from_e0_80(copy_of_ciphertext); + uint8_t ret[32U]; + kdf_39_d6(shared_secret, ret); + memcpy(lit.snd, ret, (size_t)32U * sizeof(uint8_t)); return lit; } /** +This function found in impl {core::ops::function::FnMut<(usize), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, +CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, +V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- K= 3 +- CIPHERTEXT_SIZE= 1088 +- VECTOR_U_ENCODED_SIZE= 960 +- U_COMPRESSION_FACTOR= 10 +- V_COMPRESSION_FACTOR= 4 +*/ +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_0b_42( + void **_) +{ + return ZERO_d6_ea(); +} + +/** Call [`deserialize_to_uncompressed_ring_element`] for each ring element. */ /** -A monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_secret_key +A monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - K= 3 */ static KRML_MUSTINLINE void -deserialize_secret_key_7b( +deserialize_vector_1b( Eurydice_slice secret_key, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *secret_as_ntt) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[3U]; - KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, - secret_as_ntt[i] = ZERO_89_c3();); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len(secret_key, uint8_t) / - LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT; - i++) { - size_t i0 = i; - Eurydice_slice secret_bytes = Eurydice_slice_subslice2( - secret_key, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT + - LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, - uint8_t); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____0 = - deserialize_to_uncompressed_ring_element_27(secret_bytes); - secret_as_ntt[i0] = uu____0; - } - memcpy( - ret, secret_as_ntt, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); + KRML_MAYBE_FOR3( + i, (size_t)0U, (size_t)3U, (size_t)1U, size_t i0 = i; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d uu____0 = + deserialize_to_uncompressed_ring_element_ea(Eurydice_slice_subslice3( + secret_key, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, + (i0 + (size_t)1U) * + LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT, + uint8_t *)); + secret_as_ntt[i0] = uu____0;); } /** +This function found in impl {core::ops::function::FnMut<(usize), +libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, +TraitClause@1]> for +libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, +CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]} +*/ +/** A monomorphic instance of -libcrux_ml_kem.ind_cpa.unpacked.IndCpaPrivateKeyUnpacked with types +libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics -- $3size_t +- K= 3 +- CIPHERTEXT_SIZE= 1088 +- U_COMPRESSION_FACTOR= 10 +*/ +static libcrux_ml_kem_polynomial_PolynomialRingElement_1d +call_mut_35_6c( + void **_) +{ + return ZERO_d6_ea(); +} + +/** +A monomorphic instance of +libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_u with types +libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics +- COMPRESSION_FACTOR= 10 +*/ +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +deserialize_then_decompress_ring_element_u_0a(Eurydice_slice serialized) +{ + return deserialize_then_decompress_10_ea(serialized); +} + +/** +A monomorphic instance of libcrux_ml_kem.ntt.ntt_vector_u +with types libcrux_ml_kem_vector_portable_vector_type_PortableVector +with const generics +- VECTOR_U_COMPRESSION_FACTOR= 10 */ -typedef struct IndCpaPrivateKeyUnpacked_f8_s { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[3U]; -} IndCpaPrivateKeyUnpacked_f8; +static KRML_MUSTINLINE void +ntt_vector_u_0a( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *re) +{ + size_t zeta_i = (size_t)0U; + ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U); + ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U); + ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U); + ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U); + ntt_at_layer_3_ea(&zeta_i, re); + ntt_at_layer_2_ea(&zeta_i, re); + ntt_at_layer_1_ea(&zeta_i, re); + poly_barrett_reduce_d6_ea(re); +} /** Call [`deserialize_then_decompress_ring_element_u`] on each ring element @@ -9045,13 +7779,15 @@ with const generics - U_COMPRESSION_FACTOR= 10 */ static KRML_MUSTINLINE void -deserialize_then_decompress_u_1a( +deserialize_then_decompress_u_6c( uint8_t *ciphertext, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) + libcrux_ml_kem_polynomial_PolynomialRingElement_1d ret[3U]) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 u_as_ntt[3U]; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d u_as_ntt[3U]; KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, - u_as_ntt[i] = ZERO_89_c3();); + /* original Rust expression is not an lvalue in C */ + void *lvalue = (void *)0U; + u_as_ntt[i] = call_mut_35_6c(&lvalue);); for (size_t i = (size_t)0U; i < Eurydice_slice_len( Eurydice_array_to_slice((size_t)1088U, ciphertext, uint8_t), @@ -9060,7 +7796,7 @@ deserialize_then_decompress_u_1a( (size_t)10U / (size_t)8U); i++) { size_t i0 = i; - Eurydice_slice u_bytes = Eurydice_array_to_subslice2( + Eurydice_slice u_bytes = Eurydice_array_to_subslice3( ciphertext, i0 * (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U), @@ -9068,13 +7804,26 @@ deserialize_then_decompress_u_1a( (size_t)10U / (size_t)8U) + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U, - uint8_t); - u_as_ntt[i0] = deserialize_then_decompress_ring_element_u_c2(u_bytes); - ntt_vector_u_6f(&u_as_ntt[i0]); + uint8_t *); + u_as_ntt[i0] = deserialize_then_decompress_ring_element_u_0a(u_bytes); + ntt_vector_u_0a(&u_as_ntt[i0]); } memcpy( ret, u_as_ntt, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); + (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); +} + +/** +A monomorphic instance of +libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v with types +libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics +- K= 3 +- COMPRESSION_FACTOR= 4 +*/ +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +deserialize_then_decompress_ring_element_v_89(Eurydice_slice serialized) +{ + return deserialize_then_decompress_4_ea(serialized); } /** @@ -9089,20 +7838,19 @@ with types libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics - K= 3 */ -static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0 -compute_message_c9( - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *v, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *secret_as_ntt, - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *u_as_ntt) +static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_1d +compute_message_1b( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *v, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *secret_as_ntt, + libcrux_ml_kem_polynomial_PolynomialRingElement_1d *u_as_ntt) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result = ZERO_89_c3(); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d result = ZERO_d6_ea(); KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, size_t i0 = i; - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product = - ntt_multiply_89_3b(&secret_as_ntt[i0], &u_as_ntt[i0]); - add_to_ring_element_89_1e(&result, &product);); - invert_ntt_montgomery_c9(&result); - result = subtract_reduce_89_61(v, result); - return result; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d product = + ntt_multiply_d6_ea(&secret_as_ntt[i0], &u_as_ntt[i0]); + add_to_ring_element_d6_1b(&result, &product);); + invert_ntt_montgomery_1b(&result); + return subtract_reduce_d6_ea(v, result); } /** @@ -9139,20 +7887,22 @@ with const generics - U_COMPRESSION_FACTOR= 10 - V_COMPRESSION_FACTOR= 4 */ -static void -decrypt_unpacked_6b(IndCpaPrivateKeyUnpacked_f8 *secret_key, - uint8_t *ciphertext, uint8_t ret[32U]) +static KRML_MUSTINLINE void +decrypt_unpacked_42( + IndCpaPrivateKeyUnpacked_a0 *secret_key, uint8_t *ciphertext, + uint8_t ret[32U]) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 u_as_ntt[3U]; - deserialize_then_decompress_u_1a(ciphertext, u_as_ntt); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 v = - deserialize_then_decompress_ring_element_v_93( + libcrux_ml_kem_polynomial_PolynomialRingElement_1d u_as_ntt[3U]; + deserialize_then_decompress_u_6c(ciphertext, u_as_ntt); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d v = + deserialize_then_decompress_ring_element_v_89( Eurydice_array_to_subslice_from((size_t)1088U, ciphertext, - (size_t)960U, uint8_t, size_t)); - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 message = - compute_message_c9(&v, secret_key->secret_as_ntt, u_as_ntt); + (size_t)960U, uint8_t, size_t, + uint8_t[])); + libcrux_ml_kem_polynomial_PolynomialRingElement_1d message = + compute_message_1b(&v, secret_key->secret_as_ntt, u_as_ntt); uint8_t ret0[32U]; - compress_then_serialize_message_d4(message, ret0); + compress_then_serialize_message_ea(message, ret0); memcpy(ret, ret0, (size_t)32U * sizeof(uint8_t)); } @@ -9166,43 +7916,45 @@ with const generics - U_COMPRESSION_FACTOR= 10 - V_COMPRESSION_FACTOR= 4 */ -static void -decrypt_12(Eurydice_slice secret_key, uint8_t *ciphertext, - uint8_t ret[32U]) +static KRML_MUSTINLINE void +decrypt_42(Eurydice_slice secret_key, + uint8_t *ciphertext, uint8_t ret[32U]) { - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[3U]; - deserialize_secret_key_7b(secret_key, secret_as_ntt); - /* Passing arrays by value in Rust generates a copy in C */ - libcrux_ml_kem_polynomial_PolynomialRingElement_f0 copy_of_secret_as_ntt[3U]; - memcpy( - copy_of_secret_as_ntt, secret_as_ntt, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - IndCpaPrivateKeyUnpacked_f8 secret_key_unpacked; + IndCpaPrivateKeyUnpacked_a0 secret_key_unpacked; + libcrux_ml_kem_polynomial_PolynomialRingElement_1d ret0[3U]; + KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, + /* original Rust expression is not an lvalue in C */ + void *lvalue = (void *)0U; + ret0[i] = call_mut_0b_42(&lvalue);); memcpy( - secret_key_unpacked.secret_as_ntt, copy_of_secret_as_ntt, - (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0)); - uint8_t ret0[32U]; - decrypt_unpacked_6b(&secret_key_unpacked, ciphertext, ret0); - memcpy(ret, ret0, (size_t)32U * sizeof(uint8_t)); + secret_key_unpacked.secret_as_ntt, ret0, + (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_1d)); + deserialize_vector_1b(secret_key, secret_key_unpacked.secret_as_ntt); + uint8_t ret1[32U]; + decrypt_unpacked_42(&secret_key_unpacked, ciphertext, ret1); + memcpy(ret, ret1, (size_t)32U * sizeof(uint8_t)); } /** -This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for -libcrux_ml_kem::hash_functions::portable::PortableHash<K>)} +This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for +libcrux_ml_kem::hash_functions::portable::PortableHash<K>} */ /** -A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_f1 +A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a with const generics - K= 3 - LEN= 32 */ -static KRML_MUSTINLINE void -PRF_f1_2e(Eurydice_slice input, uint8_t ret[32U]) +static inline void +PRF_4a_41(Eurydice_slice input, uint8_t ret[32U]) { - PRF_7c(input, ret); + PRF_9e(input, ret); } /** + This code verifies on some machines, runs out of memory on others +*/ +/** A monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], @@ -9225,67 +7977,57 @@ libcrux_ml_kem_variant_MlKem with const generics - IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120 */ void -libcrux_ml_kem_ind_cca_decapsulate_1f( - libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key, +libcrux_ml_kem_ind_cca_decapsulate_62( + libcrux_ml_kem_types_MlKemPrivateKey_d9 *private_key, libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext, uint8_t ret[32U]) { - Eurydice_slice_uint8_t_x2 uu____0 = Eurydice_slice_split_at( - Eurydice_array_to_slice((size_t)2400U, private_key->value, uint8_t), - (size_t)1152U, uint8_t, Eurydice_slice_uint8_t_x2); + Eurydice_slice_uint8_t_x4 uu____0 = + libcrux_ml_kem_types_unpack_private_key_b4( + Eurydice_array_to_slice((size_t)2400U, private_key->value, uint8_t)); Eurydice_slice ind_cpa_secret_key = uu____0.fst; - Eurydice_slice secret_key0 = uu____0.snd; - Eurydice_slice_uint8_t_x2 uu____1 = Eurydice_slice_split_at( - secret_key0, (size_t)1184U, uint8_t, Eurydice_slice_uint8_t_x2); - Eurydice_slice ind_cpa_public_key = uu____1.fst; - Eurydice_slice secret_key = uu____1.snd; - Eurydice_slice_uint8_t_x2 uu____2 = Eurydice_slice_split_at( - secret_key, LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t, - Eurydice_slice_uint8_t_x2); - Eurydice_slice ind_cpa_public_key_hash = uu____2.fst; - Eurydice_slice implicit_rejection_value = uu____2.snd; + Eurydice_slice ind_cpa_public_key = uu____0.snd; + Eurydice_slice ind_cpa_public_key_hash = uu____0.thd; + Eurydice_slice implicit_rejection_value = uu____0.f3; uint8_t decrypted[32U]; - decrypt_12(ind_cpa_secret_key, ciphertext->value, decrypted); + decrypt_42(ind_cpa_secret_key, ciphertext->value, decrypted); uint8_t to_hash0[64U]; - libcrux_ml_kem_utils_into_padded_array_6d( + libcrux_ml_kem_utils_into_padded_array_24( Eurydice_array_to_slice((size_t)32U, decrypted, uint8_t), to_hash0); Eurydice_slice_copy( Eurydice_array_to_subslice_from( (size_t)64U, to_hash0, LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, - uint8_t, size_t), + uint8_t, size_t, uint8_t[]), ind_cpa_public_key_hash, uint8_t); uint8_t hashed[64U]; - G_f1_38(Eurydice_array_to_slice((size_t)64U, to_hash0, uint8_t), hashed); - Eurydice_slice_uint8_t_x2 uu____3 = Eurydice_slice_split_at( + G_4a_e0(Eurydice_array_to_slice((size_t)64U, to_hash0, uint8_t), hashed); + Eurydice_slice_uint8_t_x2 uu____1 = Eurydice_slice_split_at( Eurydice_array_to_slice((size_t)64U, hashed, uint8_t), LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, uint8_t, Eurydice_slice_uint8_t_x2); - Eurydice_slice shared_secret0 = uu____3.fst; - Eurydice_slice pseudorandomness = uu____3.snd; + Eurydice_slice shared_secret0 = uu____1.fst; + Eurydice_slice pseudorandomness = uu____1.snd; uint8_t to_hash[1120U]; - libcrux_ml_kem_utils_into_padded_array_6d3(implicit_rejection_value, to_hash); - Eurydice_slice uu____4 = Eurydice_array_to_subslice_from( + libcrux_ml_kem_utils_into_padded_array_15(implicit_rejection_value, to_hash); + Eurydice_slice uu____2 = Eurydice_array_to_subslice_from( (size_t)1120U, to_hash, LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, - uint8_t, size_t); - Eurydice_slice_copy(uu____4, libcrux_ml_kem_types_as_ref_00_d80(ciphertext), + uint8_t, size_t, uint8_t[]); + Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_d3_80(ciphertext), uint8_t); uint8_t implicit_rejection_shared_secret0[32U]; - PRF_f1_2e(Eurydice_array_to_slice((size_t)1120U, to_hash, uint8_t), + PRF_4a_41(Eurydice_array_to_slice((size_t)1120U, to_hash, uint8_t), implicit_rejection_shared_secret0); - Eurydice_slice uu____5 = ind_cpa_public_key; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_decrypted[32U]; - memcpy(copy_of_decrypted, decrypted, (size_t)32U * sizeof(uint8_t)); uint8_t expected_ciphertext[1088U]; - encrypt_7b(uu____5, copy_of_decrypted, pseudorandomness, expected_ciphertext); + encrypt_2a(ind_cpa_public_key, decrypted, pseudorandomness, + expected_ciphertext); uint8_t implicit_rejection_shared_secret[32U]; - kdf_d8_c5(Eurydice_array_to_slice((size_t)32U, + kdf_39_d6(Eurydice_array_to_slice((size_t)32U, implicit_rejection_shared_secret0, uint8_t), implicit_rejection_shared_secret); uint8_t shared_secret[32U]; - kdf_d8_c5(shared_secret0, shared_secret); + kdf_39_d6(shared_secret0, shared_secret); uint8_t ret0[32U]; libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time( - libcrux_ml_kem_types_as_ref_00_d80(ciphertext), + libcrux_ml_kem_types_as_ref_d3_80(ciphertext), Eurydice_array_to_slice((size_t)1088U, expected_ciphertext, uint8_t), Eurydice_array_to_slice((size_t)32U, shared_secret, uint8_t), Eurydice_array_to_slice((size_t)32U, implicit_rejection_shared_secret, diff --git a/security/nss/lib/freebl/verified/libcrux_mlkem_portable.h b/security/nss/lib/freebl/verified/libcrux_mlkem_portable.h @@ -1,28 +1,25 @@ /* - * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com> + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> * * SPDX-License-Identifier: MIT or Apache-2.0 * * This code was generated with the following revisions: - * Charon: b351338f6a84c7a1afc27433eb0ffdc668b3581d - * Eurydice: 7efec1624422fd5e94388ef06b9c76dfe7a48d46 - * Karamel: c96fb69d15693284644d6aecaa90afa37e4de8f0 - * F*: 58c915a86a2c07c8eca8d9deafd76cb7a91f0eb7 - * Libcrux: 6ff01fb3c57ff29ecb59bc62d9dc7fd231060cfb + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc */ -#ifndef __libcrux_mlkem_portable_H -#define __libcrux_mlkem_portable_H +#ifndef libcrux_mlkem_portable_H +#define libcrux_mlkem_portable_H + +#include "eurydice_glue.h" #if defined(__cplusplus) extern "C" { #endif -#include "eurydice_glue.h" -#include "libcrux_core.h" -#include "libcrux_sha3.h" -#include "libcrux_sha3_internal.h" - void libcrux_ml_kem_hash_functions_portable_G(Eurydice_slice input, uint8_t ret[64U]); @@ -31,106 +28,66 @@ void libcrux_ml_kem_hash_functions_portable_H(Eurydice_slice input, #define LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR ((size_t)16U) -#define LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS ((int16_t)3329) - #define LIBCRUX_ML_KEM_VECTOR_TRAITS_MONTGOMERY_R_SQUARED_MOD_FIELD_MODULUS \ ((int16_t)1353) -#define LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R \ - (62209U) - typedef struct libcrux_ml_kem_vector_portable_vector_type_PortableVector_s { int16_t elements[16U]; } libcrux_ml_kem_vector_portable_vector_type_PortableVector; libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_vector_type_from_i16_array(Eurydice_slice array); +libcrux_ml_kem_vector_portable_vector_type_zero(void); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_from_i16_array_0d(Eurydice_slice array); - -typedef struct uint8_t_x11_s { - uint8_t fst; - uint8_t snd; - uint8_t thd; - uint8_t f3; - uint8_t f4; - uint8_t f5; - uint8_t f6; - uint8_t f7; - uint8_t f8; - uint8_t f9; - uint8_t f10; -} uint8_t_x11; - -uint8_t_x11 libcrux_ml_kem_vector_portable_serialize_serialize_11_int( - Eurydice_slice v); - -void libcrux_ml_kem_vector_portable_serialize_serialize_11( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, - uint8_t ret[22U]); - -/** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} -*/ -void libcrux_ml_kem_vector_portable_serialize_11_0d( - libcrux_ml_kem_vector_portable_vector_type_PortableVector a, - uint8_t ret[22U]); - -typedef struct int16_t_x8_s { - int16_t fst; - int16_t snd; - int16_t thd; - int16_t f3; - int16_t f4; - int16_t f5; - int16_t f6; - int16_t f7; -} int16_t_x8; - -int16_t_x8 libcrux_ml_kem_vector_portable_serialize_deserialize_11_int( - Eurydice_slice bytes); - -libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_vector_type_zero(void); +libcrux_ml_kem_vector_portable_ZERO_b8(void); libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_serialize_deserialize_11(Eurydice_slice bytes); +libcrux_ml_kem_vector_portable_vector_type_from_i16_array(Eurydice_slice array); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_deserialize_11_0d(Eurydice_slice a); +libcrux_ml_kem_vector_portable_from_i16_array_b8(Eurydice_slice array); void libcrux_ml_kem_vector_portable_vector_type_to_i16_array( libcrux_ml_kem_vector_portable_vector_type_PortableVector x, int16_t ret[16U]); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ -void libcrux_ml_kem_vector_portable_to_i16_array_0d( +void libcrux_ml_kem_vector_portable_to_i16_array_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector x, int16_t ret[16U]); -extern const uint8_t - libcrux_ml_kem_vector_rej_sample_table_REJECTION_SAMPLE_SHUFFLE_TABLE[256U] - [16U]; +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_vector_type_from_bytes(Eurydice_slice array); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_ZERO_0d(void); +libcrux_ml_kem_vector_portable_from_bytes_b8(Eurydice_slice array); + +void libcrux_ml_kem_vector_portable_vector_type_to_bytes( + libcrux_ml_kem_vector_portable_vector_type_PortableVector x, + Eurydice_slice bytes); + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} +*/ +void libcrux_ml_kem_vector_portable_to_bytes_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector x, + Eurydice_slice bytes); libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_arithmetic_add( @@ -138,11 +95,11 @@ libcrux_ml_kem_vector_portable_arithmetic_add( libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_add_0d( +libcrux_ml_kem_vector_portable_add_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector lhs, libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs); @@ -152,58 +109,51 @@ libcrux_ml_kem_vector_portable_arithmetic_sub( libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_sub_0d( +libcrux_ml_kem_vector_portable_sub_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector lhs, libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs); libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_arithmetic_multiply_by_constant( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c); + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, int16_t c); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_multiply_by_constant_0d( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c); - -libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c); +libcrux_ml_kem_vector_portable_multiply_by_constant_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, int16_t c); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} + Note: This function is not secret independent + Only use with public values. */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_bitwise_and_with_constant_0d( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c); - -libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_arithmetic_cond_subtract_3329( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v); + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_cond_subtract_3329_0d( +libcrux_ml_kem_vector_portable_cond_subtract_3329_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector v); #define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_MULTIPLIER \ ((int32_t)20159) -#define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_SHIFT ((int32_t)26) +#define LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_SHIFT ((int32_t)26) + +#define LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_R \ + ((int32_t)1 << (uint32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_SHIFT) -#define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_R \ - ((int32_t)1 << (uint32_t) \ - LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_SHIFT) +#define LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS ((int16_t)3329) /** Signed Barrett Reduction @@ -216,28 +166,29 @@ libcrux_ml_kem_vector_portable_cond_subtract_3329_0d( `|result| ≤ FIELD_MODULUS / 2 · (|value|/BARRETT_R + 1) - In particular, if `|value| < BARRETT_R`, then `|result| < FIELD_MODULUS`. + Note: The input bound is 28296 to prevent overflow in the multiplication of + quotient by FIELD_MODULUS + */ int16_t libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element( int16_t value); libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v); + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_barrett_reduce_0d( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v); +libcrux_ml_kem_vector_portable_barrett_reduce_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector vector); -#define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT (16U) +#define LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R \ + (62209U) -#define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_R \ - ((int32_t)1 << (uint32_t) \ - LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT) +#define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT (16U) /** Signed Montgomery Reduction @@ -248,10 +199,12 @@ libcrux_ml_kem_vector_portable_barrett_reduce_0d( - o ≡ value · MONTGOMERY_R^(-1) (mod FIELD_MODULUS) - the absolute value of `o` is bound as follows: - `|result| ≤ (|value| / MONTGOMERY_R) + (FIELD_MODULUS / 2) + `|result| ≤ ceil(|value| / MONTGOMERY_R) + 1665 + + In particular, if `|value| ≤ FIELD_MODULUS-1 * FIELD_MODULUS-1`, then `|o| <= + FIELD_MODULUS-1`. And, if `|value| ≤ pow2 16 * FIELD_MODULUS-1`, then `|o| <= + FIELD_MODULUS + 1664 - In particular, if `|value| ≤ FIELD_MODULUS * MONTGOMERY_R`, then `|o| < (3 · - FIELD_MODULUS) / 2`. */ int16_t libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element( int32_t value); @@ -272,15 +225,32 @@ int16_t libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer( libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_by_constant( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c); + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, int16_t c); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_0d( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t r); +libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector vector, + int16_t constant); + +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant( + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, int16_t c); + +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_arithmetic_to_unsigned_representative( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a); + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} +*/ +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_to_unsigned_representative_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a); /** The `compress_*` functions implement the `Compress` function specified in the @@ -309,15 +279,15 @@ uint8_t libcrux_ml_kem_vector_portable_compress_compress_message_coefficient( libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_compress_compress_1( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v); + libcrux_ml_kem_vector_portable_vector_type_PortableVector a); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_compress_1_0d( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v); +libcrux_ml_kem_vector_portable_compress_1_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a); uint32_t libcrux_ml_kem_vector_portable_arithmetic_get_n_least_significant_bits( uint8_t n, uint32_t value); @@ -325,92 +295,106 @@ uint32_t libcrux_ml_kem_vector_portable_arithmetic_get_n_least_significant_bits( int16_t libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient( uint8_t coefficient_bits, uint16_t fe); +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_compress_decompress_1( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a); + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} +*/ +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_decompress_1_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a); + void libcrux_ml_kem_vector_portable_ntt_ntt_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector *v, int16_t zeta, - size_t i, size_t j); + libcrux_ml_kem_vector_portable_vector_type_PortableVector *vec, + int16_t zeta, size_t i, size_t j); libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_ntt_ntt_layer_1_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta0, - int16_t zeta1, int16_t zeta2, int16_t zeta3); + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, + int16_t zeta0, int16_t zeta1, int16_t zeta2, int16_t zeta3); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_ntt_layer_1_step_0d( +libcrux_ml_kem_vector_portable_ntt_layer_1_step_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta0, int16_t zeta1, int16_t zeta2, int16_t zeta3); libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_ntt_ntt_layer_2_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta0, - int16_t zeta1); + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, + int16_t zeta0, int16_t zeta1); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_ntt_layer_2_step_0d( +libcrux_ml_kem_vector_portable_ntt_layer_2_step_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta0, int16_t zeta1); libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_ntt_ntt_layer_3_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta); + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, + int16_t zeta); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_ntt_layer_3_step_0d( +libcrux_ml_kem_vector_portable_ntt_layer_3_step_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta); void libcrux_ml_kem_vector_portable_ntt_inv_ntt_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector *v, int16_t zeta, - size_t i, size_t j); + libcrux_ml_kem_vector_portable_vector_type_PortableVector *vec, + int16_t zeta, size_t i, size_t j); libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_1_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta0, - int16_t zeta1, int16_t zeta2, int16_t zeta3); + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, + int16_t zeta0, int16_t zeta1, int16_t zeta2, int16_t zeta3); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_0d( +libcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta0, int16_t zeta1, int16_t zeta2, int16_t zeta3); libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_2_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta0, - int16_t zeta1); + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, + int16_t zeta0, int16_t zeta1); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_0d( +libcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta0, int16_t zeta1); libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_3_step( - libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta); + libcrux_ml_kem_vector_portable_vector_type_PortableVector vec, + int16_t zeta); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_0d( +libcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta); /** @@ -438,8 +422,7 @@ libcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_0d( void libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials( libcrux_ml_kem_vector_portable_vector_type_PortableVector *a, libcrux_ml_kem_vector_portable_vector_type_PortableVector *b, int16_t zeta, - size_t i, size_t j, - libcrux_ml_kem_vector_portable_vector_type_PortableVector *out); + size_t i, libcrux_ml_kem_vector_portable_vector_type_PortableVector *out); libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_ntt_ntt_multiply( @@ -448,11 +431,11 @@ libcrux_ml_kem_vector_portable_ntt_ntt_multiply( int16_t zeta0, int16_t zeta1, int16_t zeta2, int16_t zeta3); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_ntt_multiply_0d( +libcrux_ml_kem_vector_portable_ntt_multiply_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector *lhs, libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs, int16_t zeta0, int16_t zeta1, int16_t zeta2, int16_t zeta3); @@ -461,23 +444,30 @@ void libcrux_ml_kem_vector_portable_serialize_serialize_1( libcrux_ml_kem_vector_portable_vector_type_PortableVector v, uint8_t ret[2U]); +void libcrux_ml_kem_vector_portable_serialize_1( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a, + uint8_t ret[2U]); + /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ -void libcrux_ml_kem_vector_portable_serialize_1_0d( +void libcrux_ml_kem_vector_portable_serialize_1_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, uint8_t ret[2U]); libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_serialize_deserialize_1(Eurydice_slice v); +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_deserialize_1(Eurydice_slice a); + /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_deserialize_1_0d(Eurydice_slice a); +libcrux_ml_kem_vector_portable_deserialize_1_b8(Eurydice_slice a); typedef struct uint8_t_x4_s { uint8_t fst; @@ -493,26 +483,44 @@ void libcrux_ml_kem_vector_portable_serialize_serialize_4( libcrux_ml_kem_vector_portable_vector_type_PortableVector v, uint8_t ret[8U]); +void libcrux_ml_kem_vector_portable_serialize_4( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a, + uint8_t ret[8U]); + /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ -void libcrux_ml_kem_vector_portable_serialize_4_0d( +void libcrux_ml_kem_vector_portable_serialize_4_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, uint8_t ret[8U]); +typedef struct int16_t_x8_s { + int16_t fst; + int16_t snd; + int16_t thd; + int16_t f3; + int16_t f4; + int16_t f5; + int16_t f6; + int16_t f7; +} int16_t_x8; + int16_t_x8 libcrux_ml_kem_vector_portable_serialize_deserialize_4_int( Eurydice_slice bytes); libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_serialize_deserialize_4(Eurydice_slice bytes); +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_deserialize_4(Eurydice_slice a); + /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_deserialize_4_0d(Eurydice_slice a); +libcrux_ml_kem_vector_portable_deserialize_4_b8(Eurydice_slice a); typedef struct uint8_t_x5_s { uint8_t fst; @@ -529,11 +537,15 @@ void libcrux_ml_kem_vector_portable_serialize_serialize_5( libcrux_ml_kem_vector_portable_vector_type_PortableVector v, uint8_t ret[10U]); +void libcrux_ml_kem_vector_portable_serialize_5( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a, + uint8_t ret[10U]); + /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ -void libcrux_ml_kem_vector_portable_serialize_5_0d( +void libcrux_ml_kem_vector_portable_serialize_5_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, uint8_t ret[10U]); @@ -543,12 +555,15 @@ int16_t_x8 libcrux_ml_kem_vector_portable_serialize_deserialize_5_int( libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_serialize_deserialize_5(Eurydice_slice bytes); +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_deserialize_5(Eurydice_slice a); + /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_deserialize_5_0d(Eurydice_slice a); +libcrux_ml_kem_vector_portable_deserialize_5_b8(Eurydice_slice a); uint8_t_x5 libcrux_ml_kem_vector_portable_serialize_serialize_10_int( Eurydice_slice v); @@ -557,11 +572,15 @@ void libcrux_ml_kem_vector_portable_serialize_serialize_10( libcrux_ml_kem_vector_portable_vector_type_PortableVector v, uint8_t ret[20U]); +void libcrux_ml_kem_vector_portable_serialize_10( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a, + uint8_t ret[20U]); + /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ -void libcrux_ml_kem_vector_portable_serialize_10_0d( +void libcrux_ml_kem_vector_portable_serialize_10_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, uint8_t ret[20U]); @@ -571,12 +590,64 @@ int16_t_x8 libcrux_ml_kem_vector_portable_serialize_deserialize_10_int( libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_serialize_deserialize_10(Eurydice_slice bytes); +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_deserialize_10(Eurydice_slice a); + /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_deserialize_10_0d(Eurydice_slice a); +libcrux_ml_kem_vector_portable_deserialize_10_b8(Eurydice_slice a); + +typedef struct uint8_t_x11_s { + uint8_t fst; + uint8_t snd; + uint8_t thd; + uint8_t f3; + uint8_t f4; + uint8_t f5; + uint8_t f6; + uint8_t f7; + uint8_t f8; + uint8_t f9; + uint8_t f10; +} uint8_t_x11; + +uint8_t_x11 libcrux_ml_kem_vector_portable_serialize_serialize_11_int( + Eurydice_slice v); + +void libcrux_ml_kem_vector_portable_serialize_serialize_11( + libcrux_ml_kem_vector_portable_vector_type_PortableVector v, + uint8_t ret[22U]); + +void libcrux_ml_kem_vector_portable_serialize_11( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a, + uint8_t ret[22U]); + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} +*/ +void libcrux_ml_kem_vector_portable_serialize_11_b8( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a, + uint8_t ret[22U]); + +int16_t_x8 libcrux_ml_kem_vector_portable_serialize_deserialize_11_int( + Eurydice_slice bytes); + +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_serialize_deserialize_11(Eurydice_slice bytes); + +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_deserialize_11(Eurydice_slice a); + +/** +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} +*/ +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_deserialize_11_b8(Eurydice_slice a); typedef struct uint8_t_x3_s { uint8_t fst; @@ -591,11 +662,15 @@ void libcrux_ml_kem_vector_portable_serialize_serialize_12( libcrux_ml_kem_vector_portable_vector_type_PortableVector v, uint8_t ret[24U]); +void libcrux_ml_kem_vector_portable_serialize_12( + libcrux_ml_kem_vector_portable_vector_type_PortableVector a, + uint8_t ret[24U]); + /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ -void libcrux_ml_kem_vector_portable_serialize_12_0d( +void libcrux_ml_kem_vector_portable_serialize_12_b8( libcrux_ml_kem_vector_portable_vector_type_PortableVector a, uint8_t ret[24U]); @@ -610,34 +685,37 @@ int16_t_x2 libcrux_ml_kem_vector_portable_serialize_deserialize_12_int( libcrux_ml_kem_vector_portable_vector_type_PortableVector libcrux_ml_kem_vector_portable_serialize_deserialize_12(Eurydice_slice bytes); +libcrux_ml_kem_vector_portable_vector_type_PortableVector +libcrux_ml_kem_vector_portable_deserialize_12(Eurydice_slice a); + /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_deserialize_12_0d(Eurydice_slice a); +libcrux_ml_kem_vector_portable_deserialize_12_b8(Eurydice_slice a); size_t libcrux_ml_kem_vector_portable_sampling_rej_sample( Eurydice_slice a, Eurydice_slice result); /** -This function found in impl {(libcrux_ml_kem::vector::traits::Operations for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {libcrux_ml_kem::vector::traits::Operations for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ -size_t libcrux_ml_kem_vector_portable_rej_sample_0d(Eurydice_slice a, +size_t libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_slice a, Eurydice_slice out); /** -This function found in impl {(core::clone::Clone for -libcrux_ml_kem::vector::portable::vector_type::PortableVector)} +This function found in impl {core::clone::Clone for +libcrux_ml_kem::vector::portable::vector_type::PortableVector} */ libcrux_ml_kem_vector_portable_vector_type_PortableVector -libcrux_ml_kem_vector_portable_vector_type_clone_3b( +libcrux_ml_kem_vector_portable_vector_type_clone_9c( libcrux_ml_kem_vector_portable_vector_type_PortableVector *self); #if defined(__cplusplus) } #endif -#define __libcrux_mlkem_portable_H_DEFINED -#endif +#define libcrux_mlkem_portable_H_DEFINED +#endif /* libcrux_mlkem_portable_H */ diff --git a/security/nss/lib/freebl/verified/libcrux_sha3.h b/security/nss/lib/freebl/verified/libcrux_sha3.h @@ -1,221 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com> - * - * SPDX-License-Identifier: MIT or Apache-2.0 - * - * This code was generated with the following revisions: - * Charon: b351338f6a84c7a1afc27433eb0ffdc668b3581d - * Eurydice: 7efec1624422fd5e94388ef06b9c76dfe7a48d46 - * Karamel: c96fb69d15693284644d6aecaa90afa37e4de8f0 - * F*: 58c915a86a2c07c8eca8d9deafd76cb7a91f0eb7 - * Libcrux: 6ff01fb3c57ff29ecb59bc62d9dc7fd231060cfb - */ - -#ifndef __libcrux_sha3_H -#define __libcrux_sha3_H - -#if defined(__cplusplus) -extern "C" { -#endif - -#include "eurydice_glue.h" -#include "libcrux_core.h" -#include "libcrux_sha3_internal.h" - -/** - A portable SHA3 512 implementation. -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_sha512(Eurydice_slice digest, - Eurydice_slice data) -{ - Eurydice_slice buf0[1U] = { data }; - Eurydice_slice buf[1U] = { digest }; - libcrux_sha3_portable_keccakx1_e4(buf0, buf); -} - -/** - A portable SHA3 256 implementation. -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_sha256(Eurydice_slice digest, - Eurydice_slice data) -{ - Eurydice_slice buf0[1U] = { data }; - Eurydice_slice buf[1U] = { digest }; - libcrux_sha3_portable_keccakx1_e40(buf0, buf); -} - -/** - A portable SHAKE256 implementation. -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_shake256( - Eurydice_slice digest, Eurydice_slice data) -{ - Eurydice_slice buf0[1U] = { data }; - Eurydice_slice buf[1U] = { digest }; - libcrux_sha3_portable_keccakx1_e41(buf0, buf); -} - -/** - A portable SHA3 224 implementation. -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_sha224(Eurydice_slice digest, - Eurydice_slice data) -{ - Eurydice_slice buf0[1U] = { data }; - Eurydice_slice buf[1U] = { digest }; - libcrux_sha3_portable_keccakx1_e42(buf0, buf); -} - -/** - A portable SHA3 384 implementation. -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_sha384(Eurydice_slice digest, - Eurydice_slice data) -{ - Eurydice_slice buf0[1U] = { data }; - Eurydice_slice buf[1U] = { digest }; - libcrux_sha3_portable_keccakx1_e43(buf0, buf); -} - -/** - SHA3 224 - - Preconditions: - - `digest.len() == 28` -*/ -static KRML_MUSTINLINE void -libcrux_sha3_sha224_ema(Eurydice_slice digest, - Eurydice_slice payload) -{ - libcrux_sha3_portable_sha224(digest, payload); -} - -/** - SHA3 224 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_sha224(Eurydice_slice data, - uint8_t ret[28U]) -{ - uint8_t out[28U] = { 0U }; - libcrux_sha3_sha224_ema(Eurydice_array_to_slice((size_t)28U, out, uint8_t), - data); - memcpy(ret, out, (size_t)28U * sizeof(uint8_t)); -} - -/** - SHA3 256 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_sha256_ema(Eurydice_slice digest, - Eurydice_slice payload) -{ - libcrux_sha3_portable_sha256(digest, payload); -} - -/** - SHA3 256 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_sha256(Eurydice_slice data, - uint8_t ret[32U]) -{ - uint8_t out[32U] = { 0U }; - libcrux_sha3_sha256_ema(Eurydice_array_to_slice((size_t)32U, out, uint8_t), - data); - memcpy(ret, out, (size_t)32U * sizeof(uint8_t)); -} - -/** - SHA3 384 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_sha384_ema(Eurydice_slice digest, - Eurydice_slice payload) -{ - libcrux_sha3_portable_sha384(digest, payload); -} - -/** - SHA3 384 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_sha384(Eurydice_slice data, - uint8_t ret[48U]) -{ - uint8_t out[48U] = { 0U }; - libcrux_sha3_sha384_ema(Eurydice_array_to_slice((size_t)48U, out, uint8_t), - data); - memcpy(ret, out, (size_t)48U * sizeof(uint8_t)); -} - -/** - SHA3 512 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_sha512_ema(Eurydice_slice digest, - Eurydice_slice payload) -{ - libcrux_sha3_portable_sha512(digest, payload); -} - -/** - SHA3 512 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_sha512(Eurydice_slice data, - uint8_t ret[64U]) -{ - uint8_t out[64U] = { 0U }; - libcrux_sha3_sha512_ema(Eurydice_array_to_slice((size_t)64U, out, uint8_t), - data); - memcpy(ret, out, (size_t)64U * sizeof(uint8_t)); -} - -/** - A portable SHAKE128 implementation. -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_shake128( - Eurydice_slice digest, Eurydice_slice data) -{ - Eurydice_slice buf0[1U] = { data }; - Eurydice_slice buf[1U] = { digest }; - libcrux_sha3_portable_keccakx1_e44(buf0, buf); -} - -/** - SHAKE 128 - - Writes `out.len()` bytes. -*/ -static KRML_MUSTINLINE void -libcrux_sha3_shake128_ema(Eurydice_slice out, - Eurydice_slice data) -{ - libcrux_sha3_portable_shake128(out, data); -} - -/** - SHAKE 256 - - Writes `out.len()` bytes. -*/ -static KRML_MUSTINLINE void -libcrux_sha3_shake256_ema(Eurydice_slice out, - Eurydice_slice data) -{ - libcrux_sha3_portable_shake256(out, data); -} - -#if defined(__cplusplus) -} -#endif - -#define __libcrux_sha3_H_DEFINED -#endif diff --git a/security/nss/lib/freebl/verified/libcrux_sha3_internal.h b/security/nss/lib/freebl/verified/libcrux_sha3_internal.h @@ -1,3449 +1,35 @@ /* - * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com> + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> * * SPDX-License-Identifier: MIT or Apache-2.0 * * This code was generated with the following revisions: - * Charon: b351338f6a84c7a1afc27433eb0ffdc668b3581d - * Eurydice: 7efec1624422fd5e94388ef06b9c76dfe7a48d46 - * Karamel: c96fb69d15693284644d6aecaa90afa37e4de8f0 - * F*: 58c915a86a2c07c8eca8d9deafd76cb7a91f0eb7 - * Libcrux: 6ff01fb3c57ff29ecb59bc62d9dc7fd231060cfb + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc */ -#ifndef __libcrux_sha3_internal_H -#define __libcrux_sha3_internal_H +#ifndef libcrux_sha3_internal_H +#define libcrux_sha3_internal_H + +#include "eurydice_glue.h" #if defined(__cplusplus) extern "C" { #endif -#include "eurydice_glue.h" -#include "libcrux_core.h" - -static const uint64_t libcrux_sha3_generic_keccak_ROUNDCONSTANTS[24U] = { - 1ULL, - 32898ULL, - 9223372036854808714ULL, - 9223372039002292224ULL, - 32907ULL, - 2147483649ULL, - 9223372039002292353ULL, - 9223372036854808585ULL, - 138ULL, - 136ULL, - 2147516425ULL, - 2147483658ULL, - 2147516555ULL, - 9223372036854775947ULL, - 9223372036854808713ULL, - 9223372036854808579ULL, - 9223372036854808578ULL, - 9223372036854775936ULL, - 32778ULL, - 9223372039002259466ULL, - 9223372039002292353ULL, - 9223372036854808704ULL, - 2147483649ULL, - 9223372039002292232ULL -}; - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_zero_5a(void) -{ - return 0ULL; -} - -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__veor5q_u64( - uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e) -{ - uint64_t ab = a ^ b; - uint64_t cd = c ^ d; - uint64_t abcd = ab ^ cd; - return abcd ^ e; -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor5_5a( - uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e) -{ - return libcrux_sha3_portable_keccak__veor5q_u64(a, b, c, d, e); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 1 -- RIGHT= 63 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d6(uint64_t x) -{ - return x << (uint32_t)(int32_t)1 | x >> (uint32_t)(int32_t)63; -} - -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vrax1q_u64(uint64_t a, uint64_t b) -{ - uint64_t uu____0 = a; - return uu____0 ^ libcrux_sha3_portable_keccak_rotate_left_d6(b); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left1_and_xor_5a(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vrax1q_u64(a, b); -} - -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vbcaxq_u64(uint64_t a, uint64_t b, uint64_t c) -{ - return a ^ (b & ~c); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_and_not_xor_5a( - uint64_t a, uint64_t b, uint64_t c) -{ - return libcrux_sha3_portable_keccak__vbcaxq_u64(a, b, c); -} - -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__veorq_n_u64(uint64_t a, uint64_t c) -{ - return a ^ c; -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_constant_5a(uint64_t a, uint64_t c) -{ - return libcrux_sha3_portable_keccak__veorq_n_u64(a, c); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_5a(uint64_t a, uint64_t b) -{ - return a ^ b; -} - -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_slice_1( - Eurydice_slice a[1U], size_t start, size_t len, Eurydice_slice ret[1U]) -{ - ret[0U] = Eurydice_slice_subslice2(a[0U], start, start + len, uint8_t); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_slice_n_5a( - Eurydice_slice a[1U], size_t start, size_t len, Eurydice_slice ret[1U]) -{ - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_a[1U]; - memcpy(copy_of_a, a, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret0[1U]; - libcrux_sha3_portable_keccak_slice_1(copy_of_a, start, len, ret0); - memcpy(ret, ret0, (size_t)1U * sizeof(Eurydice_slice)); -} - -static KRML_MUSTINLINE Eurydice_slice_uint8_t_1size_t__x2 -libcrux_sha3_portable_keccak_split_at_mut_1(Eurydice_slice out[1U], - size_t mid) -{ - Eurydice_slice_uint8_t_x2 uu____0 = Eurydice_slice_split_at_mut( - out[0U], mid, uint8_t, Eurydice_slice_uint8_t_x2); - Eurydice_slice out00 = uu____0.fst; - Eurydice_slice out01 = uu____0.snd; - Eurydice_slice_uint8_t_1size_t__x2 lit; - lit.fst[0U] = out00; - lit.snd[0U] = out01; - return lit; -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -static KRML_MUSTINLINE Eurydice_slice_uint8_t_1size_t__x2 -libcrux_sha3_portable_keccak_split_at_mut_n_5a(Eurydice_slice a[1U], - size_t mid) -{ - return libcrux_sha3_portable_keccak_split_at_mut_1(a, mid); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.KeccakState -with types uint64_t -with const generics -- $1size_t -*/ -typedef struct libcrux_sha3_generic_keccak_KeccakState_48_s { - uint64_t st[5U][5U]; -} libcrux_sha3_generic_keccak_KeccakState_48; - -/** - Create a new Shake128 x4 state. -*/ -/** -This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, -N>[TraitClause@0]#1} -*/ -/** -A monomorphic instance of libcrux_sha3.generic_keccak.new_1e -with types uint64_t -with const generics -- N= 1 -*/ -static KRML_MUSTINLINE libcrux_sha3_generic_keccak_KeccakState_48 -libcrux_sha3_generic_keccak_new_1e_cf(void) -{ - libcrux_sha3_generic_keccak_KeccakState_48 lit; - lit.st[0U][0U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[0U][1U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[0U][2U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[0U][3U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[0U][4U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[1U][0U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[1U][1U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[1U][2U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[1U][3U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[1U][4U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[2U][0U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[2U][1U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[2U][2U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[2U][3U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[2U][4U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[3U][0U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[3U][1U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[3U][2U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[3U][3U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[3U][4U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[4U][0U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[4U][1U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[4U][2U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[4U][3U] = libcrux_sha3_portable_keccak_zero_5a(); - lit.st[4U][4U] = libcrux_sha3_portable_keccak_zero_5a(); - return lit; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block -with const generics -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_65( - uint64_t (*s)[5U], Eurydice_slice blocks[1U]) -{ - for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)8U; i++) { - size_t i0 = i; - uint8_t uu____0[8U]; - core_result_Result_56 dst; - Eurydice_slice_to_array2( - &dst, - Eurydice_slice_subslice2(blocks[0U], (size_t)8U * i0, - (size_t)8U * i0 + (size_t)8U, uint8_t), - Eurydice_slice, uint8_t[8U]); - core_result_unwrap_41_0e(dst, uu____0); - size_t uu____1 = i0 / (size_t)5U; - size_t uu____2 = i0 % (size_t)5U; - s[uu____1][uu____2] = - s[uu____1][uu____2] ^ core_num__u64_9__from_le_bytes(uu____0); - } -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full -with const generics -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_full_d4( - uint64_t (*s)[5U], uint8_t blocks[1U][200U]) -{ - Eurydice_slice buf[1U] = { - Eurydice_array_to_slice((size_t)200U, blocks[0U], uint8_t) - }; - libcrux_sha3_portable_keccak_load_block_65(s, buf); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full_5a -with const generics -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_full_5a_05( - uint64_t (*a)[5U], uint8_t b[1U][200U]) -{ - uint64_t(*uu____0)[5U] = a; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_b[1U][200U]; - memcpy(copy_of_b, b, (size_t)1U * sizeof(uint8_t[200U])); - libcrux_sha3_portable_keccak_load_block_full_d4(uu____0, copy_of_b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 36 -- RIGHT= 28 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d60(uint64_t x) -{ - return x << (uint32_t)(int32_t)36 | x >> (uint32_t)(int32_t)28; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 36 -- RIGHT= 28 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_74(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d60(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 36 -- RIGHT= 28 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_03(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_74(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 3 -- RIGHT= 61 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d61(uint64_t x) -{ - return x << (uint32_t)(int32_t)3 | x >> (uint32_t)(int32_t)61; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 3 -- RIGHT= 61 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_740(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d61(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 3 -- RIGHT= 61 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_030(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_740(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 41 -- RIGHT= 23 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d62(uint64_t x) -{ - return x << (uint32_t)(int32_t)41 | x >> (uint32_t)(int32_t)23; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 41 -- RIGHT= 23 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_741(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d62(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 41 -- RIGHT= 23 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_031(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_741(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 18 -- RIGHT= 46 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d63(uint64_t x) -{ - return x << (uint32_t)(int32_t)18 | x >> (uint32_t)(int32_t)46; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 18 -- RIGHT= 46 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_742(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d63(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 18 -- RIGHT= 46 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_032(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_742(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 1 -- RIGHT= 63 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_743(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d6(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 1 -- RIGHT= 63 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_033(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_743(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 44 -- RIGHT= 20 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d64(uint64_t x) -{ - return x << (uint32_t)(int32_t)44 | x >> (uint32_t)(int32_t)20; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 44 -- RIGHT= 20 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_744(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d64(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 44 -- RIGHT= 20 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_034(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_744(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 10 -- RIGHT= 54 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d65(uint64_t x) -{ - return x << (uint32_t)(int32_t)10 | x >> (uint32_t)(int32_t)54; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 10 -- RIGHT= 54 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_745(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d65(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 10 -- RIGHT= 54 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_035(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_745(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 45 -- RIGHT= 19 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d66(uint64_t x) -{ - return x << (uint32_t)(int32_t)45 | x >> (uint32_t)(int32_t)19; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 45 -- RIGHT= 19 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_746(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d66(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 45 -- RIGHT= 19 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_036(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_746(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 2 -- RIGHT= 62 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d67(uint64_t x) -{ - return x << (uint32_t)(int32_t)2 | x >> (uint32_t)(int32_t)62; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 2 -- RIGHT= 62 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_747(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d67(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 2 -- RIGHT= 62 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_037(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_747(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 62 -- RIGHT= 2 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d68(uint64_t x) -{ - return x << (uint32_t)(int32_t)62 | x >> (uint32_t)(int32_t)2; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 62 -- RIGHT= 2 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_748(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d68(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 62 -- RIGHT= 2 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_038(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_748(a, b); -} +#define libcrux_sha3_Algorithm_Sha224 1 +#define libcrux_sha3_Algorithm_Sha256 2 +#define libcrux_sha3_Algorithm_Sha384 3 +#define libcrux_sha3_Algorithm_Sha512 4 -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 6 -- RIGHT= 58 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d69(uint64_t x) -{ - return x << (uint32_t)(int32_t)6 | x >> (uint32_t)(int32_t)58; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 6 -- RIGHT= 58 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_749(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d69(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 6 -- RIGHT= 58 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_039(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_749(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 43 -- RIGHT= 21 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d610(uint64_t x) -{ - return x << (uint32_t)(int32_t)43 | x >> (uint32_t)(int32_t)21; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 43 -- RIGHT= 21 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_7410(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d610(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 43 -- RIGHT= 21 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_0310(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_7410(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 15 -- RIGHT= 49 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d611(uint64_t x) -{ - return x << (uint32_t)(int32_t)15 | x >> (uint32_t)(int32_t)49; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 15 -- RIGHT= 49 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_7411(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d611(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 15 -- RIGHT= 49 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_0311(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_7411(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 61 -- RIGHT= 3 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d612(uint64_t x) -{ - return x << (uint32_t)(int32_t)61 | x >> (uint32_t)(int32_t)3; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 61 -- RIGHT= 3 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_7412(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d612(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 61 -- RIGHT= 3 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_0312(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_7412(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 28 -- RIGHT= 36 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d613(uint64_t x) -{ - return x << (uint32_t)(int32_t)28 | x >> (uint32_t)(int32_t)36; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 28 -- RIGHT= 36 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_7413(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d613(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 28 -- RIGHT= 36 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_0313(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_7413(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 55 -- RIGHT= 9 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d614(uint64_t x) -{ - return x << (uint32_t)(int32_t)55 | x >> (uint32_t)(int32_t)9; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 55 -- RIGHT= 9 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_7414(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d614(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 55 -- RIGHT= 9 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_0314(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_7414(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 25 -- RIGHT= 39 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d615(uint64_t x) -{ - return x << (uint32_t)(int32_t)25 | x >> (uint32_t)(int32_t)39; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 25 -- RIGHT= 39 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_7415(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d615(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 25 -- RIGHT= 39 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_0315(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_7415(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 21 -- RIGHT= 43 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d616(uint64_t x) -{ - return x << (uint32_t)(int32_t)21 | x >> (uint32_t)(int32_t)43; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 21 -- RIGHT= 43 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_7416(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d616(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 21 -- RIGHT= 43 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_0316(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_7416(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 56 -- RIGHT= 8 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d617(uint64_t x) -{ - return x << (uint32_t)(int32_t)56 | x >> (uint32_t)(int32_t)8; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 56 -- RIGHT= 8 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_7417(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d617(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 56 -- RIGHT= 8 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_0317(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_7417(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 27 -- RIGHT= 37 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d618(uint64_t x) -{ - return x << (uint32_t)(int32_t)27 | x >> (uint32_t)(int32_t)37; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 27 -- RIGHT= 37 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_7418(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d618(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 27 -- RIGHT= 37 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_0318(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_7418(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 20 -- RIGHT= 44 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d619(uint64_t x) -{ - return x << (uint32_t)(int32_t)20 | x >> (uint32_t)(int32_t)44; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 20 -- RIGHT= 44 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_7419(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d619(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 20 -- RIGHT= 44 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_0319(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_7419(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 39 -- RIGHT= 25 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d620(uint64_t x) -{ - return x << (uint32_t)(int32_t)39 | x >> (uint32_t)(int32_t)25; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 39 -- RIGHT= 25 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_7420(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d620(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 39 -- RIGHT= 25 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_0320(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_7420(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 8 -- RIGHT= 56 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d621(uint64_t x) -{ - return x << (uint32_t)(int32_t)8 | x >> (uint32_t)(int32_t)56; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 8 -- RIGHT= 56 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_7421(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d621(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 8 -- RIGHT= 56 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_0321(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_7421(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left -with const generics -- LEFT= 14 -- RIGHT= 50 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_rotate_left_d622(uint64_t x) -{ - return x << (uint32_t)(int32_t)14 | x >> (uint32_t)(int32_t)50; -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64 -with const generics -- LEFT= 14 -- RIGHT= 50 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak__vxarq_u64_7422(uint64_t a, uint64_t b) -{ - uint64_t ab = a ^ b; - return libcrux_sha3_portable_keccak_rotate_left_d622(ab); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a -with const generics -- LEFT= 14 -- RIGHT= 50 -*/ -static KRML_MUSTINLINE uint64_t -libcrux_sha3_portable_keccak_xor_and_rotate_5a_0322(uint64_t a, uint64_t b) -{ - return libcrux_sha3_portable_keccak__vxarq_u64_7422(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.theta_rho -with types uint64_t -with const generics -- N= 1 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_theta_rho_a7( - libcrux_sha3_generic_keccak_KeccakState_48 *s) -{ - uint64_t c[5U] = { - libcrux_sha3_portable_keccak_xor5_5a(s->st[0U][0U], s->st[1U][0U], - s->st[2U][0U], s->st[3U][0U], - s->st[4U][0U]), - libcrux_sha3_portable_keccak_xor5_5a(s->st[0U][1U], s->st[1U][1U], - s->st[2U][1U], s->st[3U][1U], - s->st[4U][1U]), - libcrux_sha3_portable_keccak_xor5_5a(s->st[0U][2U], s->st[1U][2U], - s->st[2U][2U], s->st[3U][2U], - s->st[4U][2U]), - libcrux_sha3_portable_keccak_xor5_5a(s->st[0U][3U], s->st[1U][3U], - s->st[2U][3U], s->st[3U][3U], - s->st[4U][3U]), - libcrux_sha3_portable_keccak_xor5_5a(s->st[0U][4U], s->st[1U][4U], - s->st[2U][4U], s->st[3U][4U], - s->st[4U][4U]) - }; - uint64_t uu____0 = libcrux_sha3_portable_keccak_rotate_left1_and_xor_5a( - c[((size_t)0U + (size_t)4U) % (size_t)5U], - c[((size_t)0U + (size_t)1U) % (size_t)5U]); - uint64_t uu____1 = libcrux_sha3_portable_keccak_rotate_left1_and_xor_5a( - c[((size_t)1U + (size_t)4U) % (size_t)5U], - c[((size_t)1U + (size_t)1U) % (size_t)5U]); - uint64_t uu____2 = libcrux_sha3_portable_keccak_rotate_left1_and_xor_5a( - c[((size_t)2U + (size_t)4U) % (size_t)5U], - c[((size_t)2U + (size_t)1U) % (size_t)5U]); - uint64_t uu____3 = libcrux_sha3_portable_keccak_rotate_left1_and_xor_5a( - c[((size_t)3U + (size_t)4U) % (size_t)5U], - c[((size_t)3U + (size_t)1U) % (size_t)5U]); - uint64_t t[5U] = { uu____0, uu____1, uu____2, uu____3, - libcrux_sha3_portable_keccak_rotate_left1_and_xor_5a( - c[((size_t)4U + (size_t)4U) % (size_t)5U], - c[((size_t)4U + (size_t)1U) % (size_t)5U]) }; - s->st[0U][0U] = libcrux_sha3_portable_keccak_xor_5a(s->st[0U][0U], t[0U]); - s->st[1U][0U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_03(s->st[1U][0U], t[0U]); - s->st[2U][0U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_030(s->st[2U][0U], t[0U]); - s->st[3U][0U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_031(s->st[3U][0U], t[0U]); - s->st[4U][0U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_032(s->st[4U][0U], t[0U]); - s->st[0U][1U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_033(s->st[0U][1U], t[1U]); - s->st[1U][1U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_034(s->st[1U][1U], t[1U]); - s->st[2U][1U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_035(s->st[2U][1U], t[1U]); - s->st[3U][1U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_036(s->st[3U][1U], t[1U]); - s->st[4U][1U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_037(s->st[4U][1U], t[1U]); - s->st[0U][2U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_038(s->st[0U][2U], t[2U]); - s->st[1U][2U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_039(s->st[1U][2U], t[2U]); - s->st[2U][2U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_0310(s->st[2U][2U], t[2U]); - s->st[3U][2U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_0311(s->st[3U][2U], t[2U]); - s->st[4U][2U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_0312(s->st[4U][2U], t[2U]); - s->st[0U][3U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_0313(s->st[0U][3U], t[3U]); - s->st[1U][3U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_0314(s->st[1U][3U], t[3U]); - s->st[2U][3U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_0315(s->st[2U][3U], t[3U]); - s->st[3U][3U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_0316(s->st[3U][3U], t[3U]); - s->st[4U][3U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_0317(s->st[4U][3U], t[3U]); - s->st[0U][4U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_0318(s->st[0U][4U], t[4U]); - s->st[1U][4U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_0319(s->st[1U][4U], t[4U]); - s->st[2U][4U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_0320(s->st[2U][4U], t[4U]); - s->st[3U][4U] = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_0321(s->st[3U][4U], t[4U]); - uint64_t uu____27 = - libcrux_sha3_portable_keccak_xor_and_rotate_5a_0322(s->st[4U][4U], t[4U]); - s->st[4U][4U] = uu____27; -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.pi -with types uint64_t -with const generics -- N= 1 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_pi_d5( - libcrux_sha3_generic_keccak_KeccakState_48 *s) -{ - uint64_t old[5U][5U]; - memcpy(old, s->st, (size_t)5U * sizeof(uint64_t[5U])); - s->st[0U][1U] = old[1U][1U]; - s->st[0U][2U] = old[2U][2U]; - s->st[0U][3U] = old[3U][3U]; - s->st[0U][4U] = old[4U][4U]; - s->st[1U][0U] = old[0U][3U]; - s->st[1U][1U] = old[1U][4U]; - s->st[1U][2U] = old[2U][0U]; - s->st[1U][3U] = old[3U][1U]; - s->st[1U][4U] = old[4U][2U]; - s->st[2U][0U] = old[0U][1U]; - s->st[2U][1U] = old[1U][2U]; - s->st[2U][2U] = old[2U][3U]; - s->st[2U][3U] = old[3U][4U]; - s->st[2U][4U] = old[4U][0U]; - s->st[3U][0U] = old[0U][4U]; - s->st[3U][1U] = old[1U][0U]; - s->st[3U][2U] = old[2U][1U]; - s->st[3U][3U] = old[3U][2U]; - s->st[3U][4U] = old[4U][3U]; - s->st[4U][0U] = old[0U][2U]; - s->st[4U][1U] = old[1U][3U]; - s->st[4U][2U] = old[2U][4U]; - s->st[4U][3U] = old[3U][0U]; - s->st[4U][4U] = old[4U][1U]; -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.chi -with types uint64_t -with const generics -- N= 1 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_chi_3e( - libcrux_sha3_generic_keccak_KeccakState_48 *s) -{ - uint64_t old[5U][5U]; - memcpy(old, s->st, (size_t)5U * sizeof(uint64_t[5U])); - KRML_MAYBE_FOR5( - i0, (size_t)0U, (size_t)5U, (size_t)1U, size_t i1 = i0; KRML_MAYBE_FOR5( - i, (size_t)0U, (size_t)5U, (size_t)1U, size_t j = i; - s->st[i1][j] = libcrux_sha3_portable_keccak_and_not_xor_5a( - s->st[i1][j], old[i1][(j + (size_t)2U) % (size_t)5U], - old[i1][(j + (size_t)1U) % (size_t)5U]););); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.iota -with types uint64_t -with const generics -- N= 1 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_iota_00( - libcrux_sha3_generic_keccak_KeccakState_48 *s, size_t i) -{ - s->st[0U][0U] = libcrux_sha3_portable_keccak_xor_constant_5a( - s->st[0U][0U], libcrux_sha3_generic_keccak_ROUNDCONSTANTS[i]); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.keccakf1600 -with types uint64_t -with const generics -- N= 1 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_keccakf1600_b8( - libcrux_sha3_generic_keccak_KeccakState_48 *s) -{ - for (size_t i = (size_t)0U; i < (size_t)24U; i++) { - size_t i0 = i; - libcrux_sha3_generic_keccak_theta_rho_a7(s); - libcrux_sha3_generic_keccak_pi_d5(s); - libcrux_sha3_generic_keccak_chi_3e(s); - libcrux_sha3_generic_keccak_iota_00(s, i0); - } -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final -with types uint64_t -with const generics -- N= 1 -- RATE= 168 -- DELIM= 31 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_final_40( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice last[1U]) -{ - size_t last_len = Eurydice_slice_len(last[0U], uint8_t); - uint8_t blocks[1U][200U] = { { 0U } }; - { - size_t i = (size_t)0U; - if (last_len > (size_t)0U) { - Eurydice_slice uu____0 = - Eurydice_array_to_subslice2(blocks[i], (size_t)0U, last_len, uint8_t); - Eurydice_slice_copy(uu____0, last[i], uint8_t); - } - blocks[i][last_len] = 31U; - size_t uu____1 = i; - size_t uu____2 = (size_t)168U - (size_t)1U; - blocks[uu____1][uu____2] = (uint32_t)blocks[uu____1][uu____2] | 128U; - } - uint64_t(*uu____3)[5U] = s->st; - uint8_t uu____4[1U][200U]; - memcpy(uu____4, blocks, (size_t)1U * sizeof(uint8_t[200U])); - libcrux_sha3_portable_keccak_load_block_full_5a_05(uu____3, uu____4); - libcrux_sha3_generic_keccak_keccakf1600_b8(s); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block -with const generics -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_9b( - uint64_t (*s)[5U], Eurydice_slice out[1U]) -{ - for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)8U; i++) { - size_t i0 = i; - Eurydice_slice uu____0 = Eurydice_slice_subslice2( - out[0U], (size_t)8U * i0, (size_t)8U * i0 + (size_t)8U, uint8_t); - uint8_t ret[8U]; - core_num__u64_9__to_le_bytes(s[i0 / (size_t)5U][i0 % (size_t)5U], ret); - Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t); - } -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_5a -with const generics -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_5a_49( - uint64_t (*a)[5U], Eurydice_slice b[1U]) -{ - libcrux_sha3_portable_keccak_store_block_9b(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_next_block -with types uint64_t -with const generics -- N= 1 -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_next_block_c2( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_keccakf1600_b8(s); - libcrux_sha3_portable_keccak_store_block_5a_49(s->st, out); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_block -with types uint64_t -with const generics -- N= 1 -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_first_block_7b( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - libcrux_sha3_portable_keccak_store_block_5a_49(s->st, out); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block -with const generics -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_650( - uint64_t (*s)[5U], Eurydice_slice blocks[1U]) -{ - for (size_t i = (size_t)0U; i < (size_t)136U / (size_t)8U; i++) { - size_t i0 = i; - uint8_t uu____0[8U]; - core_result_Result_56 dst; - Eurydice_slice_to_array2( - &dst, - Eurydice_slice_subslice2(blocks[0U], (size_t)8U * i0, - (size_t)8U * i0 + (size_t)8U, uint8_t), - Eurydice_slice, uint8_t[8U]); - core_result_unwrap_41_0e(dst, uu____0); - size_t uu____1 = i0 / (size_t)5U; - size_t uu____2 = i0 % (size_t)5U; - s[uu____1][uu____2] = - s[uu____1][uu____2] ^ core_num__u64_9__from_le_bytes(uu____0); - } -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full -with const generics -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_full_d40( - uint64_t (*s)[5U], uint8_t blocks[1U][200U]) -{ - Eurydice_slice buf[1U] = { - Eurydice_array_to_slice((size_t)200U, blocks[0U], uint8_t) - }; - libcrux_sha3_portable_keccak_load_block_650(s, buf); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full_5a -with const generics -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_full_5a_050( - uint64_t (*a)[5U], uint8_t b[1U][200U]) -{ - uint64_t(*uu____0)[5U] = a; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_b[1U][200U]; - memcpy(copy_of_b, b, (size_t)1U * sizeof(uint8_t[200U])); - libcrux_sha3_portable_keccak_load_block_full_d40(uu____0, copy_of_b); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final -with types uint64_t -with const generics -- N= 1 -- RATE= 136 -- DELIM= 31 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_final_400( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice last[1U]) -{ - size_t last_len = Eurydice_slice_len(last[0U], uint8_t); - uint8_t blocks[1U][200U] = { { 0U } }; - { - size_t i = (size_t)0U; - if (last_len > (size_t)0U) { - Eurydice_slice uu____0 = - Eurydice_array_to_subslice2(blocks[i], (size_t)0U, last_len, uint8_t); - Eurydice_slice_copy(uu____0, last[i], uint8_t); - } - blocks[i][last_len] = 31U; - size_t uu____1 = i; - size_t uu____2 = (size_t)136U - (size_t)1U; - blocks[uu____1][uu____2] = (uint32_t)blocks[uu____1][uu____2] | 128U; - } - uint64_t(*uu____3)[5U] = s->st; - uint8_t uu____4[1U][200U]; - memcpy(uu____4, blocks, (size_t)1U * sizeof(uint8_t[200U])); - libcrux_sha3_portable_keccak_load_block_full_5a_050(uu____3, uu____4); - libcrux_sha3_generic_keccak_keccakf1600_b8(s); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block -with const generics -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_9b0( - uint64_t (*s)[5U], Eurydice_slice out[1U]) -{ - for (size_t i = (size_t)0U; i < (size_t)136U / (size_t)8U; i++) { - size_t i0 = i; - Eurydice_slice uu____0 = Eurydice_slice_subslice2( - out[0U], (size_t)8U * i0, (size_t)8U * i0 + (size_t)8U, uint8_t); - uint8_t ret[8U]; - core_num__u64_9__to_le_bytes(s[i0 / (size_t)5U][i0 % (size_t)5U], ret); - Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t); - } -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_5a -with const generics -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_5a_490( - uint64_t (*a)[5U], Eurydice_slice b[1U]) -{ - libcrux_sha3_portable_keccak_store_block_9b0(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_block -with types uint64_t -with const generics -- N= 1 -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_first_block_7b0( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - libcrux_sha3_portable_keccak_store_block_5a_490(s->st, out); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_next_block -with types uint64_t -with const generics -- N= 1 -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_next_block_c20( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_keccakf1600_b8(s); - libcrux_sha3_portable_keccak_store_block_5a_490(s->st, out); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_5a -with const generics -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_5a_35( - uint64_t (*a)[5U], Eurydice_slice b[1U]) -{ - uint64_t(*uu____0)[5U] = a; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_b[1U]; - memcpy(copy_of_b, b, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_portable_keccak_load_block_650(uu____0, copy_of_b); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_5a -with const generics -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_5a_350( - uint64_t (*a)[5U], Eurydice_slice b[1U]) -{ - uint64_t(*uu____0)[5U] = a; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_b[1U]; - memcpy(copy_of_b, b, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_portable_keccak_load_block_65(uu____0, copy_of_b); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block -with types uint64_t -with const generics -- N= 1 -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_block_403( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice blocks[1U]) -{ - uint64_t(*uu____0)[5U] = s->st; - Eurydice_slice uu____1[1U]; - memcpy(uu____1, blocks, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_portable_keccak_load_block_5a_350(uu____0, uu____1); - libcrux_sha3_generic_keccak_keccakf1600_b8(s); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full -with const generics -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_full_7e3( - uint64_t (*s)[5U], uint8_t ret[1U][200U]) -{ - uint8_t out[200U] = { 0U }; - Eurydice_slice buf[1U] = { - Eurydice_array_to_slice((size_t)200U, out, uint8_t) - }; - libcrux_sha3_portable_keccak_store_block_9b(s, buf); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_out[200U]; - memcpy(copy_of_out, out, (size_t)200U * sizeof(uint8_t)); - memcpy(ret[0U], copy_of_out, (size_t)200U * sizeof(uint8_t)); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full_5a -with const generics -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_full_5a_273(uint64_t (*a)[5U], - uint8_t ret[1U][200U]) -{ - libcrux_sha3_portable_keccak_store_block_full_7e3(a, ret); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_and_last -with types uint64_t -with const generics -- N= 1 -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_first_and_last_883( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - uint8_t b[1U][200U]; - libcrux_sha3_portable_keccak_store_block_full_5a_273(s->st, b); - { - size_t i = (size_t)0U; - Eurydice_slice uu____0 = out[i]; - uint8_t *uu____1 = b[i]; - core_ops_range_Range_b3 lit; - lit.start = (size_t)0U; - lit.end = Eurydice_slice_len(out[i], uint8_t); - Eurydice_slice_copy( - uu____0, - Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t, - core_ops_range_Range_b3), - uint8_t); - } -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_last -with types uint64_t -with const generics -- N= 1 -- RATE= 168 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_last_ca3( - libcrux_sha3_generic_keccak_KeccakState_48 s, Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_keccakf1600_b8(&s); - uint8_t b[1U][200U]; - libcrux_sha3_portable_keccak_store_block_full_5a_273(s.st, b); - { - size_t i = (size_t)0U; - Eurydice_slice uu____0 = out[i]; - uint8_t *uu____1 = b[i]; - core_ops_range_Range_b3 lit; - lit.start = (size_t)0U; - lit.end = Eurydice_slice_len(out[i], uint8_t); - Eurydice_slice_copy( - uu____0, - Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t, - core_ops_range_Range_b3), - uint8_t); - } -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.keccak -with types uint64_t -with const generics -- N= 1 -- RATE= 168 -- DELIM= 31 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_keccak_064( - Eurydice_slice data[1U], Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_KeccakState_48 s = - libcrux_sha3_generic_keccak_new_1e_cf(); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len(data[0U], uint8_t) / (size_t)168U; i++) { - size_t i0 = i; - libcrux_sha3_generic_keccak_KeccakState_48 *uu____0 = &s; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret[1U]; - libcrux_sha3_portable_keccak_slice_n_5a(copy_of_data, i0 * (size_t)168U, - (size_t)168U, ret); - libcrux_sha3_generic_keccak_absorb_block_403(uu____0, ret); - } - size_t rem = Eurydice_slice_len(data[0U], uint8_t) % (size_t)168U; - libcrux_sha3_generic_keccak_KeccakState_48 *uu____2 = &s; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret[1U]; - libcrux_sha3_portable_keccak_slice_n_5a( - copy_of_data, Eurydice_slice_len(data[0U], uint8_t) - rem, rem, ret); - libcrux_sha3_generic_keccak_absorb_final_40(uu____2, ret); - size_t outlen = Eurydice_slice_len(out[0U], uint8_t); - size_t blocks = outlen / (size_t)168U; - size_t last = outlen - outlen % (size_t)168U; - if (blocks == (size_t)0U) { - libcrux_sha3_generic_keccak_squeeze_first_and_last_883(&s, out); - } else { - Eurydice_slice_uint8_t_1size_t__x2 uu____4 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)168U); - Eurydice_slice o0[1U]; - memcpy(o0, uu____4.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice o1[1U]; - memcpy(o1, uu____4.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_first_block_7b(&s, o0); - core_ops_range_Range_b3 iter = - core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter( - (CLITERAL(core_ops_range_Range_b3){ .start = (size_t)1U, - .end = blocks }), - core_ops_range_Range_b3, core_ops_range_Range_b3); - while (true) { - if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next( - &iter, size_t, core_option_Option_b3) - .tag == core_option_None) { - break; - } else { - Eurydice_slice_uint8_t_1size_t__x2 uu____5 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(o1, (size_t)168U); - Eurydice_slice o[1U]; - memcpy(o, uu____5.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice orest[1U]; - memcpy(orest, uu____5.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_next_block_c2(&s, o); - memcpy(o1, orest, (size_t)1U * sizeof(Eurydice_slice)); - } - } - if (last < outlen) { - libcrux_sha3_generic_keccak_squeeze_last_ca3(s, o1); - } - } -} - -/** -A monomorphic instance of libcrux_sha3.portable.keccakx1 -with const generics -- RATE= 168 -- DELIM= 31 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccakx1_e44( - Eurydice_slice data[1U], Eurydice_slice out[1U]) -{ - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_keccak_064(copy_of_data, out); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block -with const generics -- RATE= 104 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_653( - uint64_t (*s)[5U], Eurydice_slice blocks[1U]) -{ - for (size_t i = (size_t)0U; i < (size_t)104U / (size_t)8U; i++) { - size_t i0 = i; - uint8_t uu____0[8U]; - core_result_Result_56 dst; - Eurydice_slice_to_array2( - &dst, - Eurydice_slice_subslice2(blocks[0U], (size_t)8U * i0, - (size_t)8U * i0 + (size_t)8U, uint8_t), - Eurydice_slice, uint8_t[8U]); - core_result_unwrap_41_0e(dst, uu____0); - size_t uu____1 = i0 / (size_t)5U; - size_t uu____2 = i0 % (size_t)5U; - s[uu____1][uu____2] = - s[uu____1][uu____2] ^ core_num__u64_9__from_le_bytes(uu____0); - } -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_5a -with const generics -- RATE= 104 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_5a_353( - uint64_t (*a)[5U], Eurydice_slice b[1U]) -{ - uint64_t(*uu____0)[5U] = a; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_b[1U]; - memcpy(copy_of_b, b, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_portable_keccak_load_block_653(uu____0, copy_of_b); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block -with types uint64_t -with const generics -- N= 1 -- RATE= 104 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_block_402( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice blocks[1U]) -{ - uint64_t(*uu____0)[5U] = s->st; - Eurydice_slice uu____1[1U]; - memcpy(uu____1, blocks, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_portable_keccak_load_block_5a_353(uu____0, uu____1); - libcrux_sha3_generic_keccak_keccakf1600_b8(s); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full -with const generics -- RATE= 104 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_full_d43( - uint64_t (*s)[5U], uint8_t blocks[1U][200U]) -{ - Eurydice_slice buf[1U] = { - Eurydice_array_to_slice((size_t)200U, blocks[0U], uint8_t) - }; - libcrux_sha3_portable_keccak_load_block_653(s, buf); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full_5a -with const generics -- RATE= 104 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_full_5a_053( - uint64_t (*a)[5U], uint8_t b[1U][200U]) -{ - uint64_t(*uu____0)[5U] = a; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_b[1U][200U]; - memcpy(copy_of_b, b, (size_t)1U * sizeof(uint8_t[200U])); - libcrux_sha3_portable_keccak_load_block_full_d43(uu____0, copy_of_b); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final -with types uint64_t -with const generics -- N= 1 -- RATE= 104 -- DELIM= 6 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_final_404( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice last[1U]) -{ - size_t last_len = Eurydice_slice_len(last[0U], uint8_t); - uint8_t blocks[1U][200U] = { { 0U } }; - { - size_t i = (size_t)0U; - if (last_len > (size_t)0U) { - Eurydice_slice uu____0 = - Eurydice_array_to_subslice2(blocks[i], (size_t)0U, last_len, uint8_t); - Eurydice_slice_copy(uu____0, last[i], uint8_t); - } - blocks[i][last_len] = 6U; - size_t uu____1 = i; - size_t uu____2 = (size_t)104U - (size_t)1U; - blocks[uu____1][uu____2] = (uint32_t)blocks[uu____1][uu____2] | 128U; - } - uint64_t(*uu____3)[5U] = s->st; - uint8_t uu____4[1U][200U]; - memcpy(uu____4, blocks, (size_t)1U * sizeof(uint8_t[200U])); - libcrux_sha3_portable_keccak_load_block_full_5a_053(uu____3, uu____4); - libcrux_sha3_generic_keccak_keccakf1600_b8(s); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block -with const generics -- RATE= 104 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_9b3( - uint64_t (*s)[5U], Eurydice_slice out[1U]) -{ - for (size_t i = (size_t)0U; i < (size_t)104U / (size_t)8U; i++) { - size_t i0 = i; - Eurydice_slice uu____0 = Eurydice_slice_subslice2( - out[0U], (size_t)8U * i0, (size_t)8U * i0 + (size_t)8U, uint8_t); - uint8_t ret[8U]; - core_num__u64_9__to_le_bytes(s[i0 / (size_t)5U][i0 % (size_t)5U], ret); - Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t); - } -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full -with const generics -- RATE= 104 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_full_7e2( - uint64_t (*s)[5U], uint8_t ret[1U][200U]) -{ - uint8_t out[200U] = { 0U }; - Eurydice_slice buf[1U] = { - Eurydice_array_to_slice((size_t)200U, out, uint8_t) - }; - libcrux_sha3_portable_keccak_store_block_9b3(s, buf); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_out[200U]; - memcpy(copy_of_out, out, (size_t)200U * sizeof(uint8_t)); - memcpy(ret[0U], copy_of_out, (size_t)200U * sizeof(uint8_t)); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full_5a -with const generics -- RATE= 104 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_full_5a_272(uint64_t (*a)[5U], - uint8_t ret[1U][200U]) -{ - libcrux_sha3_portable_keccak_store_block_full_7e2(a, ret); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_and_last -with types uint64_t -with const generics -- N= 1 -- RATE= 104 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_first_and_last_882( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - uint8_t b[1U][200U]; - libcrux_sha3_portable_keccak_store_block_full_5a_272(s->st, b); - { - size_t i = (size_t)0U; - Eurydice_slice uu____0 = out[i]; - uint8_t *uu____1 = b[i]; - core_ops_range_Range_b3 lit; - lit.start = (size_t)0U; - lit.end = Eurydice_slice_len(out[i], uint8_t); - Eurydice_slice_copy( - uu____0, - Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t, - core_ops_range_Range_b3), - uint8_t); - } -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_5a -with const generics -- RATE= 104 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_5a_493( - uint64_t (*a)[5U], Eurydice_slice b[1U]) -{ - libcrux_sha3_portable_keccak_store_block_9b3(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_block -with types uint64_t -with const generics -- N= 1 -- RATE= 104 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_first_block_7b3( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - libcrux_sha3_portable_keccak_store_block_5a_493(s->st, out); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_next_block -with types uint64_t -with const generics -- N= 1 -- RATE= 104 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_next_block_c23( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_keccakf1600_b8(s); - libcrux_sha3_portable_keccak_store_block_5a_493(s->st, out); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_last -with types uint64_t -with const generics -- N= 1 -- RATE= 104 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_last_ca2( - libcrux_sha3_generic_keccak_KeccakState_48 s, Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_keccakf1600_b8(&s); - uint8_t b[1U][200U]; - libcrux_sha3_portable_keccak_store_block_full_5a_272(s.st, b); - { - size_t i = (size_t)0U; - Eurydice_slice uu____0 = out[i]; - uint8_t *uu____1 = b[i]; - core_ops_range_Range_b3 lit; - lit.start = (size_t)0U; - lit.end = Eurydice_slice_len(out[i], uint8_t); - Eurydice_slice_copy( - uu____0, - Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t, - core_ops_range_Range_b3), - uint8_t); - } -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.keccak -with types uint64_t -with const generics -- N= 1 -- RATE= 104 -- DELIM= 6 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_keccak_063( - Eurydice_slice data[1U], Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_KeccakState_48 s = - libcrux_sha3_generic_keccak_new_1e_cf(); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len(data[0U], uint8_t) / (size_t)104U; i++) { - size_t i0 = i; - libcrux_sha3_generic_keccak_KeccakState_48 *uu____0 = &s; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret[1U]; - libcrux_sha3_portable_keccak_slice_n_5a(copy_of_data, i0 * (size_t)104U, - (size_t)104U, ret); - libcrux_sha3_generic_keccak_absorb_block_402(uu____0, ret); - } - size_t rem = Eurydice_slice_len(data[0U], uint8_t) % (size_t)104U; - libcrux_sha3_generic_keccak_KeccakState_48 *uu____2 = &s; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret[1U]; - libcrux_sha3_portable_keccak_slice_n_5a( - copy_of_data, Eurydice_slice_len(data[0U], uint8_t) - rem, rem, ret); - libcrux_sha3_generic_keccak_absorb_final_404(uu____2, ret); - size_t outlen = Eurydice_slice_len(out[0U], uint8_t); - size_t blocks = outlen / (size_t)104U; - size_t last = outlen - outlen % (size_t)104U; - if (blocks == (size_t)0U) { - libcrux_sha3_generic_keccak_squeeze_first_and_last_882(&s, out); - } else { - Eurydice_slice_uint8_t_1size_t__x2 uu____4 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)104U); - Eurydice_slice o0[1U]; - memcpy(o0, uu____4.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice o1[1U]; - memcpy(o1, uu____4.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_first_block_7b3(&s, o0); - core_ops_range_Range_b3 iter = - core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter( - (CLITERAL(core_ops_range_Range_b3){ .start = (size_t)1U, - .end = blocks }), - core_ops_range_Range_b3, core_ops_range_Range_b3); - while (true) { - if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next( - &iter, size_t, core_option_Option_b3) - .tag == core_option_None) { - break; - } else { - Eurydice_slice_uint8_t_1size_t__x2 uu____5 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(o1, (size_t)104U); - Eurydice_slice o[1U]; - memcpy(o, uu____5.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice orest[1U]; - memcpy(orest, uu____5.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_next_block_c23(&s, o); - memcpy(o1, orest, (size_t)1U * sizeof(Eurydice_slice)); - } - } - if (last < outlen) { - libcrux_sha3_generic_keccak_squeeze_last_ca2(s, o1); - } - } -} - -/** -A monomorphic instance of libcrux_sha3.portable.keccakx1 -with const generics -- RATE= 104 -- DELIM= 6 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccakx1_e43( - Eurydice_slice data[1U], Eurydice_slice out[1U]) -{ - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_keccak_063(copy_of_data, out); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block -with const generics -- RATE= 144 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_652( - uint64_t (*s)[5U], Eurydice_slice blocks[1U]) -{ - for (size_t i = (size_t)0U; i < (size_t)144U / (size_t)8U; i++) { - size_t i0 = i; - uint8_t uu____0[8U]; - core_result_Result_56 dst; - Eurydice_slice_to_array2( - &dst, - Eurydice_slice_subslice2(blocks[0U], (size_t)8U * i0, - (size_t)8U * i0 + (size_t)8U, uint8_t), - Eurydice_slice, uint8_t[8U]); - core_result_unwrap_41_0e(dst, uu____0); - size_t uu____1 = i0 / (size_t)5U; - size_t uu____2 = i0 % (size_t)5U; - s[uu____1][uu____2] = - s[uu____1][uu____2] ^ core_num__u64_9__from_le_bytes(uu____0); - } -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_5a -with const generics -- RATE= 144 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_5a_352( - uint64_t (*a)[5U], Eurydice_slice b[1U]) -{ - uint64_t(*uu____0)[5U] = a; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_b[1U]; - memcpy(copy_of_b, b, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_portable_keccak_load_block_652(uu____0, copy_of_b); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block -with types uint64_t -with const generics -- N= 1 -- RATE= 144 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_block_401( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice blocks[1U]) -{ - uint64_t(*uu____0)[5U] = s->st; - Eurydice_slice uu____1[1U]; - memcpy(uu____1, blocks, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_portable_keccak_load_block_5a_352(uu____0, uu____1); - libcrux_sha3_generic_keccak_keccakf1600_b8(s); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full -with const generics -- RATE= 144 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_full_d42( - uint64_t (*s)[5U], uint8_t blocks[1U][200U]) -{ - Eurydice_slice buf[1U] = { - Eurydice_array_to_slice((size_t)200U, blocks[0U], uint8_t) - }; - libcrux_sha3_portable_keccak_load_block_652(s, buf); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full_5a -with const generics -- RATE= 144 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_full_5a_052( - uint64_t (*a)[5U], uint8_t b[1U][200U]) -{ - uint64_t(*uu____0)[5U] = a; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_b[1U][200U]; - memcpy(copy_of_b, b, (size_t)1U * sizeof(uint8_t[200U])); - libcrux_sha3_portable_keccak_load_block_full_d42(uu____0, copy_of_b); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final -with types uint64_t -with const generics -- N= 1 -- RATE= 144 -- DELIM= 6 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_final_403( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice last[1U]) -{ - size_t last_len = Eurydice_slice_len(last[0U], uint8_t); - uint8_t blocks[1U][200U] = { { 0U } }; - { - size_t i = (size_t)0U; - if (last_len > (size_t)0U) { - Eurydice_slice uu____0 = - Eurydice_array_to_subslice2(blocks[i], (size_t)0U, last_len, uint8_t); - Eurydice_slice_copy(uu____0, last[i], uint8_t); - } - blocks[i][last_len] = 6U; - size_t uu____1 = i; - size_t uu____2 = (size_t)144U - (size_t)1U; - blocks[uu____1][uu____2] = (uint32_t)blocks[uu____1][uu____2] | 128U; - } - uint64_t(*uu____3)[5U] = s->st; - uint8_t uu____4[1U][200U]; - memcpy(uu____4, blocks, (size_t)1U * sizeof(uint8_t[200U])); - libcrux_sha3_portable_keccak_load_block_full_5a_052(uu____3, uu____4); - libcrux_sha3_generic_keccak_keccakf1600_b8(s); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block -with const generics -- RATE= 144 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_9b2( - uint64_t (*s)[5U], Eurydice_slice out[1U]) -{ - for (size_t i = (size_t)0U; i < (size_t)144U / (size_t)8U; i++) { - size_t i0 = i; - Eurydice_slice uu____0 = Eurydice_slice_subslice2( - out[0U], (size_t)8U * i0, (size_t)8U * i0 + (size_t)8U, uint8_t); - uint8_t ret[8U]; - core_num__u64_9__to_le_bytes(s[i0 / (size_t)5U][i0 % (size_t)5U], ret); - Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t); - } -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full -with const generics -- RATE= 144 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_full_7e1( - uint64_t (*s)[5U], uint8_t ret[1U][200U]) -{ - uint8_t out[200U] = { 0U }; - Eurydice_slice buf[1U] = { - Eurydice_array_to_slice((size_t)200U, out, uint8_t) - }; - libcrux_sha3_portable_keccak_store_block_9b2(s, buf); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_out[200U]; - memcpy(copy_of_out, out, (size_t)200U * sizeof(uint8_t)); - memcpy(ret[0U], copy_of_out, (size_t)200U * sizeof(uint8_t)); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full_5a -with const generics -- RATE= 144 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_full_5a_271(uint64_t (*a)[5U], - uint8_t ret[1U][200U]) -{ - libcrux_sha3_portable_keccak_store_block_full_7e1(a, ret); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_and_last -with types uint64_t -with const generics -- N= 1 -- RATE= 144 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_first_and_last_881( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - uint8_t b[1U][200U]; - libcrux_sha3_portable_keccak_store_block_full_5a_271(s->st, b); - { - size_t i = (size_t)0U; - Eurydice_slice uu____0 = out[i]; - uint8_t *uu____1 = b[i]; - core_ops_range_Range_b3 lit; - lit.start = (size_t)0U; - lit.end = Eurydice_slice_len(out[i], uint8_t); - Eurydice_slice_copy( - uu____0, - Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t, - core_ops_range_Range_b3), - uint8_t); - } -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_5a -with const generics -- RATE= 144 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_5a_492( - uint64_t (*a)[5U], Eurydice_slice b[1U]) -{ - libcrux_sha3_portable_keccak_store_block_9b2(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_block -with types uint64_t -with const generics -- N= 1 -- RATE= 144 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_first_block_7b2( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - libcrux_sha3_portable_keccak_store_block_5a_492(s->st, out); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_next_block -with types uint64_t -with const generics -- N= 1 -- RATE= 144 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_next_block_c22( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_keccakf1600_b8(s); - libcrux_sha3_portable_keccak_store_block_5a_492(s->st, out); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_last -with types uint64_t -with const generics -- N= 1 -- RATE= 144 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_last_ca1( - libcrux_sha3_generic_keccak_KeccakState_48 s, Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_keccakf1600_b8(&s); - uint8_t b[1U][200U]; - libcrux_sha3_portable_keccak_store_block_full_5a_271(s.st, b); - { - size_t i = (size_t)0U; - Eurydice_slice uu____0 = out[i]; - uint8_t *uu____1 = b[i]; - core_ops_range_Range_b3 lit; - lit.start = (size_t)0U; - lit.end = Eurydice_slice_len(out[i], uint8_t); - Eurydice_slice_copy( - uu____0, - Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t, - core_ops_range_Range_b3), - uint8_t); - } -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.keccak -with types uint64_t -with const generics -- N= 1 -- RATE= 144 -- DELIM= 6 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_keccak_062( - Eurydice_slice data[1U], Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_KeccakState_48 s = - libcrux_sha3_generic_keccak_new_1e_cf(); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len(data[0U], uint8_t) / (size_t)144U; i++) { - size_t i0 = i; - libcrux_sha3_generic_keccak_KeccakState_48 *uu____0 = &s; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret[1U]; - libcrux_sha3_portable_keccak_slice_n_5a(copy_of_data, i0 * (size_t)144U, - (size_t)144U, ret); - libcrux_sha3_generic_keccak_absorb_block_401(uu____0, ret); - } - size_t rem = Eurydice_slice_len(data[0U], uint8_t) % (size_t)144U; - libcrux_sha3_generic_keccak_KeccakState_48 *uu____2 = &s; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret[1U]; - libcrux_sha3_portable_keccak_slice_n_5a( - copy_of_data, Eurydice_slice_len(data[0U], uint8_t) - rem, rem, ret); - libcrux_sha3_generic_keccak_absorb_final_403(uu____2, ret); - size_t outlen = Eurydice_slice_len(out[0U], uint8_t); - size_t blocks = outlen / (size_t)144U; - size_t last = outlen - outlen % (size_t)144U; - if (blocks == (size_t)0U) { - libcrux_sha3_generic_keccak_squeeze_first_and_last_881(&s, out); - } else { - Eurydice_slice_uint8_t_1size_t__x2 uu____4 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)144U); - Eurydice_slice o0[1U]; - memcpy(o0, uu____4.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice o1[1U]; - memcpy(o1, uu____4.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_first_block_7b2(&s, o0); - core_ops_range_Range_b3 iter = - core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter( - (CLITERAL(core_ops_range_Range_b3){ .start = (size_t)1U, - .end = blocks }), - core_ops_range_Range_b3, core_ops_range_Range_b3); - while (true) { - if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next( - &iter, size_t, core_option_Option_b3) - .tag == core_option_None) { - break; - } else { - Eurydice_slice_uint8_t_1size_t__x2 uu____5 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(o1, (size_t)144U); - Eurydice_slice o[1U]; - memcpy(o, uu____5.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice orest[1U]; - memcpy(orest, uu____5.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_next_block_c22(&s, o); - memcpy(o1, orest, (size_t)1U * sizeof(Eurydice_slice)); - } - } - if (last < outlen) { - libcrux_sha3_generic_keccak_squeeze_last_ca1(s, o1); - } - } -} - -/** -A monomorphic instance of libcrux_sha3.portable.keccakx1 -with const generics -- RATE= 144 -- DELIM= 6 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccakx1_e42( - Eurydice_slice data[1U], Eurydice_slice out[1U]) -{ - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_keccak_062(copy_of_data, out); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block -with types uint64_t -with const generics -- N= 1 -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_block_400( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice blocks[1U]) -{ - uint64_t(*uu____0)[5U] = s->st; - Eurydice_slice uu____1[1U]; - memcpy(uu____1, blocks, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_portable_keccak_load_block_5a_35(uu____0, uu____1); - libcrux_sha3_generic_keccak_keccakf1600_b8(s); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full -with const generics -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_full_7e0( - uint64_t (*s)[5U], uint8_t ret[1U][200U]) -{ - uint8_t out[200U] = { 0U }; - Eurydice_slice buf[1U] = { - Eurydice_array_to_slice((size_t)200U, out, uint8_t) - }; - libcrux_sha3_portable_keccak_store_block_9b0(s, buf); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_out[200U]; - memcpy(copy_of_out, out, (size_t)200U * sizeof(uint8_t)); - memcpy(ret[0U], copy_of_out, (size_t)200U * sizeof(uint8_t)); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full_5a -with const generics -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_full_5a_270(uint64_t (*a)[5U], - uint8_t ret[1U][200U]) -{ - libcrux_sha3_portable_keccak_store_block_full_7e0(a, ret); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_and_last -with types uint64_t -with const generics -- N= 1 -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_first_and_last_880( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - uint8_t b[1U][200U]; - libcrux_sha3_portable_keccak_store_block_full_5a_270(s->st, b); - { - size_t i = (size_t)0U; - Eurydice_slice uu____0 = out[i]; - uint8_t *uu____1 = b[i]; - core_ops_range_Range_b3 lit; - lit.start = (size_t)0U; - lit.end = Eurydice_slice_len(out[i], uint8_t); - Eurydice_slice_copy( - uu____0, - Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t, - core_ops_range_Range_b3), - uint8_t); - } -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_last -with types uint64_t -with const generics -- N= 1 -- RATE= 136 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_last_ca0( - libcrux_sha3_generic_keccak_KeccakState_48 s, Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_keccakf1600_b8(&s); - uint8_t b[1U][200U]; - libcrux_sha3_portable_keccak_store_block_full_5a_270(s.st, b); - { - size_t i = (size_t)0U; - Eurydice_slice uu____0 = out[i]; - uint8_t *uu____1 = b[i]; - core_ops_range_Range_b3 lit; - lit.start = (size_t)0U; - lit.end = Eurydice_slice_len(out[i], uint8_t); - Eurydice_slice_copy( - uu____0, - Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t, - core_ops_range_Range_b3), - uint8_t); - } -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.keccak -with types uint64_t -with const generics -- N= 1 -- RATE= 136 -- DELIM= 31 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_keccak_061( - Eurydice_slice data[1U], Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_KeccakState_48 s = - libcrux_sha3_generic_keccak_new_1e_cf(); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len(data[0U], uint8_t) / (size_t)136U; i++) { - size_t i0 = i; - libcrux_sha3_generic_keccak_KeccakState_48 *uu____0 = &s; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret[1U]; - libcrux_sha3_portable_keccak_slice_n_5a(copy_of_data, i0 * (size_t)136U, - (size_t)136U, ret); - libcrux_sha3_generic_keccak_absorb_block_400(uu____0, ret); - } - size_t rem = Eurydice_slice_len(data[0U], uint8_t) % (size_t)136U; - libcrux_sha3_generic_keccak_KeccakState_48 *uu____2 = &s; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret[1U]; - libcrux_sha3_portable_keccak_slice_n_5a( - copy_of_data, Eurydice_slice_len(data[0U], uint8_t) - rem, rem, ret); - libcrux_sha3_generic_keccak_absorb_final_400(uu____2, ret); - size_t outlen = Eurydice_slice_len(out[0U], uint8_t); - size_t blocks = outlen / (size_t)136U; - size_t last = outlen - outlen % (size_t)136U; - if (blocks == (size_t)0U) { - libcrux_sha3_generic_keccak_squeeze_first_and_last_880(&s, out); - } else { - Eurydice_slice_uint8_t_1size_t__x2 uu____4 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)136U); - Eurydice_slice o0[1U]; - memcpy(o0, uu____4.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice o1[1U]; - memcpy(o1, uu____4.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_first_block_7b0(&s, o0); - core_ops_range_Range_b3 iter = - core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter( - (CLITERAL(core_ops_range_Range_b3){ .start = (size_t)1U, - .end = blocks }), - core_ops_range_Range_b3, core_ops_range_Range_b3); - while (true) { - if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next( - &iter, size_t, core_option_Option_b3) - .tag == core_option_None) { - break; - } else { - Eurydice_slice_uint8_t_1size_t__x2 uu____5 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(o1, (size_t)136U); - Eurydice_slice o[1U]; - memcpy(o, uu____5.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice orest[1U]; - memcpy(orest, uu____5.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_next_block_c20(&s, o); - memcpy(o1, orest, (size_t)1U * sizeof(Eurydice_slice)); - } - } - if (last < outlen) { - libcrux_sha3_generic_keccak_squeeze_last_ca0(s, o1); - } - } -} - -/** -A monomorphic instance of libcrux_sha3.portable.keccakx1 -with const generics -- RATE= 136 -- DELIM= 31 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccakx1_e41( - Eurydice_slice data[1U], Eurydice_slice out[1U]) -{ - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_keccak_061(copy_of_data, out); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final -with types uint64_t -with const generics -- N= 1 -- RATE= 136 -- DELIM= 6 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_final_402( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice last[1U]) -{ - size_t last_len = Eurydice_slice_len(last[0U], uint8_t); - uint8_t blocks[1U][200U] = { { 0U } }; - { - size_t i = (size_t)0U; - if (last_len > (size_t)0U) { - Eurydice_slice uu____0 = - Eurydice_array_to_subslice2(blocks[i], (size_t)0U, last_len, uint8_t); - Eurydice_slice_copy(uu____0, last[i], uint8_t); - } - blocks[i][last_len] = 6U; - size_t uu____1 = i; - size_t uu____2 = (size_t)136U - (size_t)1U; - blocks[uu____1][uu____2] = (uint32_t)blocks[uu____1][uu____2] | 128U; - } - uint64_t(*uu____3)[5U] = s->st; - uint8_t uu____4[1U][200U]; - memcpy(uu____4, blocks, (size_t)1U * sizeof(uint8_t[200U])); - libcrux_sha3_portable_keccak_load_block_full_5a_050(uu____3, uu____4); - libcrux_sha3_generic_keccak_keccakf1600_b8(s); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.keccak -with types uint64_t -with const generics -- N= 1 -- RATE= 136 -- DELIM= 6 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_keccak_060( - Eurydice_slice data[1U], Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_KeccakState_48 s = - libcrux_sha3_generic_keccak_new_1e_cf(); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len(data[0U], uint8_t) / (size_t)136U; i++) { - size_t i0 = i; - libcrux_sha3_generic_keccak_KeccakState_48 *uu____0 = &s; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret[1U]; - libcrux_sha3_portable_keccak_slice_n_5a(copy_of_data, i0 * (size_t)136U, - (size_t)136U, ret); - libcrux_sha3_generic_keccak_absorb_block_400(uu____0, ret); - } - size_t rem = Eurydice_slice_len(data[0U], uint8_t) % (size_t)136U; - libcrux_sha3_generic_keccak_KeccakState_48 *uu____2 = &s; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret[1U]; - libcrux_sha3_portable_keccak_slice_n_5a( - copy_of_data, Eurydice_slice_len(data[0U], uint8_t) - rem, rem, ret); - libcrux_sha3_generic_keccak_absorb_final_402(uu____2, ret); - size_t outlen = Eurydice_slice_len(out[0U], uint8_t); - size_t blocks = outlen / (size_t)136U; - size_t last = outlen - outlen % (size_t)136U; - if (blocks == (size_t)0U) { - libcrux_sha3_generic_keccak_squeeze_first_and_last_880(&s, out); - } else { - Eurydice_slice_uint8_t_1size_t__x2 uu____4 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)136U); - Eurydice_slice o0[1U]; - memcpy(o0, uu____4.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice o1[1U]; - memcpy(o1, uu____4.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_first_block_7b0(&s, o0); - core_ops_range_Range_b3 iter = - core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter( - (CLITERAL(core_ops_range_Range_b3){ .start = (size_t)1U, - .end = blocks }), - core_ops_range_Range_b3, core_ops_range_Range_b3); - while (true) { - if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next( - &iter, size_t, core_option_Option_b3) - .tag == core_option_None) { - break; - } else { - Eurydice_slice_uint8_t_1size_t__x2 uu____5 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(o1, (size_t)136U); - Eurydice_slice o[1U]; - memcpy(o, uu____5.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice orest[1U]; - memcpy(orest, uu____5.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_next_block_c20(&s, o); - memcpy(o1, orest, (size_t)1U * sizeof(Eurydice_slice)); - } - } - if (last < outlen) { - libcrux_sha3_generic_keccak_squeeze_last_ca0(s, o1); - } - } -} - -/** -A monomorphic instance of libcrux_sha3.portable.keccakx1 -with const generics -- RATE= 136 -- DELIM= 6 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccakx1_e40( - Eurydice_slice data[1U], Eurydice_slice out[1U]) -{ - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_keccak_060(copy_of_data, out); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block -with const generics -- RATE= 72 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_651( - uint64_t (*s)[5U], Eurydice_slice blocks[1U]) -{ - for (size_t i = (size_t)0U; i < (size_t)72U / (size_t)8U; i++) { - size_t i0 = i; - uint8_t uu____0[8U]; - core_result_Result_56 dst; - Eurydice_slice_to_array2( - &dst, - Eurydice_slice_subslice2(blocks[0U], (size_t)8U * i0, - (size_t)8U * i0 + (size_t)8U, uint8_t), - Eurydice_slice, uint8_t[8U]); - core_result_unwrap_41_0e(dst, uu____0); - size_t uu____1 = i0 / (size_t)5U; - size_t uu____2 = i0 % (size_t)5U; - s[uu____1][uu____2] = - s[uu____1][uu____2] ^ core_num__u64_9__from_le_bytes(uu____0); - } -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_5a -with const generics -- RATE= 72 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_5a_351( - uint64_t (*a)[5U], Eurydice_slice b[1U]) -{ - uint64_t(*uu____0)[5U] = a; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_b[1U]; - memcpy(copy_of_b, b, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_portable_keccak_load_block_651(uu____0, copy_of_b); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block -with types uint64_t -with const generics -- N= 1 -- RATE= 72 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_block_40( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice blocks[1U]) -{ - uint64_t(*uu____0)[5U] = s->st; - Eurydice_slice uu____1[1U]; - memcpy(uu____1, blocks, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_portable_keccak_load_block_5a_351(uu____0, uu____1); - libcrux_sha3_generic_keccak_keccakf1600_b8(s); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full -with const generics -- RATE= 72 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_full_d41( - uint64_t (*s)[5U], uint8_t blocks[1U][200U]) -{ - Eurydice_slice buf[1U] = { - Eurydice_array_to_slice((size_t)200U, blocks[0U], uint8_t) - }; - libcrux_sha3_portable_keccak_load_block_651(s, buf); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full_5a -with const generics -- RATE= 72 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_load_block_full_5a_051( - uint64_t (*a)[5U], uint8_t b[1U][200U]) -{ - uint64_t(*uu____0)[5U] = a; - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_b[1U][200U]; - memcpy(copy_of_b, b, (size_t)1U * sizeof(uint8_t[200U])); - libcrux_sha3_portable_keccak_load_block_full_d41(uu____0, copy_of_b); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final -with types uint64_t -with const generics -- N= 1 -- RATE= 72 -- DELIM= 6 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_absorb_final_401( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice last[1U]) -{ - size_t last_len = Eurydice_slice_len(last[0U], uint8_t); - uint8_t blocks[1U][200U] = { { 0U } }; - { - size_t i = (size_t)0U; - if (last_len > (size_t)0U) { - Eurydice_slice uu____0 = - Eurydice_array_to_subslice2(blocks[i], (size_t)0U, last_len, uint8_t); - Eurydice_slice_copy(uu____0, last[i], uint8_t); - } - blocks[i][last_len] = 6U; - size_t uu____1 = i; - size_t uu____2 = (size_t)72U - (size_t)1U; - blocks[uu____1][uu____2] = (uint32_t)blocks[uu____1][uu____2] | 128U; - } - uint64_t(*uu____3)[5U] = s->st; - uint8_t uu____4[1U][200U]; - memcpy(uu____4, blocks, (size_t)1U * sizeof(uint8_t[200U])); - libcrux_sha3_portable_keccak_load_block_full_5a_051(uu____3, uu____4); - libcrux_sha3_generic_keccak_keccakf1600_b8(s); -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block -with const generics -- RATE= 72 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_9b1( - uint64_t (*s)[5U], Eurydice_slice out[1U]) -{ - for (size_t i = (size_t)0U; i < (size_t)72U / (size_t)8U; i++) { - size_t i0 = i; - Eurydice_slice uu____0 = Eurydice_slice_subslice2( - out[0U], (size_t)8U * i0, (size_t)8U * i0 + (size_t)8U, uint8_t); - uint8_t ret[8U]; - core_num__u64_9__to_le_bytes(s[i0 / (size_t)5U][i0 % (size_t)5U], ret); - Eurydice_slice_copy( - uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t); - } -} - -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full -with const generics -- RATE= 72 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_full_7e( - uint64_t (*s)[5U], uint8_t ret[1U][200U]) -{ - uint8_t out[200U] = { 0U }; - Eurydice_slice buf[1U] = { - Eurydice_array_to_slice((size_t)200U, out, uint8_t) - }; - libcrux_sha3_portable_keccak_store_block_9b1(s, buf); - /* Passing arrays by value in Rust generates a copy in C */ - uint8_t copy_of_out[200U]; - memcpy(copy_of_out, out, (size_t)200U * sizeof(uint8_t)); - memcpy(ret[0U], copy_of_out, (size_t)200U * sizeof(uint8_t)); -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full_5a -with const generics -- RATE= 72 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_full_5a_27( - uint64_t (*a)[5U], uint8_t ret[1U][200U]) -{ - libcrux_sha3_portable_keccak_store_block_full_7e(a, ret); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_and_last -with types uint64_t -with const generics -- N= 1 -- RATE= 72 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_first_and_last_88( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - uint8_t b[1U][200U]; - libcrux_sha3_portable_keccak_store_block_full_5a_27(s->st, b); - { - size_t i = (size_t)0U; - Eurydice_slice uu____0 = out[i]; - uint8_t *uu____1 = b[i]; - core_ops_range_Range_b3 lit; - lit.start = (size_t)0U; - lit.end = Eurydice_slice_len(out[i], uint8_t); - Eurydice_slice_copy( - uu____0, - Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t, - core_ops_range_Range_b3), - uint8_t); - } -} - -/** -This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: -usize> for u64)} -*/ -/** -A monomorphic instance of libcrux_sha3.portable_keccak.store_block_5a -with const generics -- RATE= 72 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccak_store_block_5a_491( - uint64_t (*a)[5U], Eurydice_slice b[1U]) -{ - libcrux_sha3_portable_keccak_store_block_9b1(a, b); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_block -with types uint64_t -with const generics -- N= 1 -- RATE= 72 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_first_block_7b1( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - libcrux_sha3_portable_keccak_store_block_5a_491(s->st, out); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_next_block -with types uint64_t -with const generics -- N= 1 -- RATE= 72 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_next_block_c21( - libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_keccakf1600_b8(s); - libcrux_sha3_portable_keccak_store_block_5a_491(s->st, out); -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_last -with types uint64_t -with const generics -- N= 1 -- RATE= 72 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_squeeze_last_ca( - libcrux_sha3_generic_keccak_KeccakState_48 s, Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_keccakf1600_b8(&s); - uint8_t b[1U][200U]; - libcrux_sha3_portable_keccak_store_block_full_5a_27(s.st, b); - { - size_t i = (size_t)0U; - Eurydice_slice uu____0 = out[i]; - uint8_t *uu____1 = b[i]; - core_ops_range_Range_b3 lit; - lit.start = (size_t)0U; - lit.end = Eurydice_slice_len(out[i], uint8_t); - Eurydice_slice_copy( - uu____0, - Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t, - core_ops_range_Range_b3), - uint8_t); - } -} - -/** -A monomorphic instance of libcrux_sha3.generic_keccak.keccak -with types uint64_t -with const generics -- N= 1 -- RATE= 72 -- DELIM= 6 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_generic_keccak_keccak_06( - Eurydice_slice data[1U], Eurydice_slice out[1U]) -{ - libcrux_sha3_generic_keccak_KeccakState_48 s = - libcrux_sha3_generic_keccak_new_1e_cf(); - for (size_t i = (size_t)0U; - i < Eurydice_slice_len(data[0U], uint8_t) / (size_t)72U; i++) { - size_t i0 = i; - libcrux_sha3_generic_keccak_KeccakState_48 *uu____0 = &s; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret[1U]; - libcrux_sha3_portable_keccak_slice_n_5a(copy_of_data, i0 * (size_t)72U, - (size_t)72U, ret); - libcrux_sha3_generic_keccak_absorb_block_40(uu____0, ret); - } - size_t rem = Eurydice_slice_len(data[0U], uint8_t) % (size_t)72U; - libcrux_sha3_generic_keccak_KeccakState_48 *uu____2 = &s; - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice ret[1U]; - libcrux_sha3_portable_keccak_slice_n_5a( - copy_of_data, Eurydice_slice_len(data[0U], uint8_t) - rem, rem, ret); - libcrux_sha3_generic_keccak_absorb_final_401(uu____2, ret); - size_t outlen = Eurydice_slice_len(out[0U], uint8_t); - size_t blocks = outlen / (size_t)72U; - size_t last = outlen - outlen % (size_t)72U; - if (blocks == (size_t)0U) { - libcrux_sha3_generic_keccak_squeeze_first_and_last_88(&s, out); - } else { - Eurydice_slice_uint8_t_1size_t__x2 uu____4 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)72U); - Eurydice_slice o0[1U]; - memcpy(o0, uu____4.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice o1[1U]; - memcpy(o1, uu____4.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_first_block_7b1(&s, o0); - core_ops_range_Range_b3 iter = - core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter( - (CLITERAL(core_ops_range_Range_b3){ .start = (size_t)1U, - .end = blocks }), - core_ops_range_Range_b3, core_ops_range_Range_b3); - while (true) { - if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next( - &iter, size_t, core_option_Option_b3) - .tag == core_option_None) { - break; - } else { - Eurydice_slice_uint8_t_1size_t__x2 uu____5 = - libcrux_sha3_portable_keccak_split_at_mut_n_5a(o1, (size_t)72U); - Eurydice_slice o[1U]; - memcpy(o, uu____5.fst, (size_t)1U * sizeof(Eurydice_slice)); - Eurydice_slice orest[1U]; - memcpy(orest, uu____5.snd, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_squeeze_next_block_c21(&s, o); - memcpy(o1, orest, (size_t)1U * sizeof(Eurydice_slice)); - } - } - if (last < outlen) { - libcrux_sha3_generic_keccak_squeeze_last_ca(s, o1); - } - } -} - -/** -A monomorphic instance of libcrux_sha3.portable.keccakx1 -with const generics -- RATE= 72 -- DELIM= 6 -*/ -static KRML_MUSTINLINE void -libcrux_sha3_portable_keccakx1_e4( - Eurydice_slice data[1U], Eurydice_slice out[1U]) -{ - /* Passing arrays by value in Rust generates a copy in C */ - Eurydice_slice copy_of_data[1U]; - memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice)); - libcrux_sha3_generic_keccak_keccak_06(copy_of_data, out); -} +typedef uint8_t libcrux_sha3_Algorithm; #if defined(__cplusplus) } #endif -#define __libcrux_sha3_internal_H_DEFINED -#endif +#define libcrux_sha3_internal_H_DEFINED +#endif /* libcrux_sha3_internal_H */ diff --git a/security/nss/lib/freebl/verified/libcrux_sha3_portable.c b/security/nss/lib/freebl/verified/libcrux_sha3_portable.c @@ -0,0 +1,4081 @@ +/* + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> + * + * SPDX-License-Identifier: MIT or Apache-2.0 + * + * This code was generated with the following revisions: + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc + */ + +#include "libcrux_sha3_portable.h" + +#include "internal/libcrux_core.h" +#include "libcrux_core.h" +#include "libcrux_sha3_internal.h" + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_zero_d2(void) +{ + return 0ULL; +} + +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__veor5q_u64( + uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e) +{ + return (((a ^ b) ^ c) ^ d) ^ e; +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor5_d2( + uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e) +{ + return libcrux_sha3_simd_portable__veor5q_u64(a, b, c, d, e); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 1 +- RIGHT= 63 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_76(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)1); +} + +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vrax1q_u64(uint64_t a, + uint64_t b) +{ + uint64_t uu____0 = a; + return uu____0 ^ libcrux_sha3_simd_portable_rotate_left_76(b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vrax1q_u64(a, b); +} + +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vbcaxq_u64(uint64_t a, + uint64_t b, + uint64_t c) +{ + return a ^ (b & ~c); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_and_not_xor_d2(uint64_t a, + uint64_t b, + uint64_t c) +{ + return libcrux_sha3_simd_portable__vbcaxq_u64(a, b, c); +} + +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__veorq_n_u64(uint64_t a, + uint64_t c) +{ + return a ^ c; +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_constant_d2(uint64_t a, uint64_t c) +{ + return libcrux_sha3_simd_portable__veorq_n_u64(a, c); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_d2(uint64_t a, + uint64_t b) +{ + return a ^ b; +} + +const uint64_t libcrux_sha3_generic_keccak_constants_ROUNDCONSTANTS[24U] = { + 1ULL, + 32898ULL, + 9223372036854808714ULL, + 9223372039002292224ULL, + 32907ULL, + 2147483649ULL, + 9223372039002292353ULL, + 9223372036854808585ULL, + 138ULL, + 136ULL, + 2147516425ULL, + 2147483658ULL, + 2147516555ULL, + 9223372036854775947ULL, + 9223372036854808713ULL, + 9223372036854808579ULL, + 9223372036854808578ULL, + 9223372036854775936ULL, + 32778ULL, + 9223372039002259466ULL, + 9223372039002292353ULL, + 9223372036854808704ULL, + 2147483649ULL, + 9223372039002292232ULL +}; + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.new_80 +with types uint64_t +with const generics +- N= 1 +*/ +KRML_MUSTINLINE libcrux_sha3_generic_keccak_KeccakState_17 +libcrux_sha3_generic_keccak_new_80_04(void) +{ + libcrux_sha3_generic_keccak_KeccakState_17 lit; + uint64_t repeat_expression[25U]; + for (size_t i = (size_t)0U; i < (size_t)25U; i++) { + repeat_expression[i] = libcrux_sha3_simd_portable_zero_d2(); + } + memcpy(lit.st, repeat_expression, (size_t)25U * sizeof(uint64_t)); + return lit; +} + +/** +A monomorphic instance of libcrux_sha3.traits.get_ij +with types uint64_t +with const generics +- N= 1 +*/ +KRML_MUSTINLINE uint64_t * +libcrux_sha3_traits_get_ij_04(uint64_t *arr, size_t i, + size_t j) +{ + return &arr[(size_t)5U * j + i]; +} + +/** +A monomorphic instance of libcrux_sha3.traits.set_ij +with types uint64_t +with const generics +- N= 1 +*/ +KRML_MUSTINLINE void +libcrux_sha3_traits_set_ij_04(uint64_t *arr, size_t i, + size_t j, uint64_t value) +{ + arr[(size_t)5U * j + i] = value; +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block +with const generics +- RATE= 72 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_load_block_f8( + uint64_t *state, Eurydice_slice blocks, size_t start) +{ + uint64_t state_flat[25U] = { 0U }; + for (size_t i = (size_t)0U; i < (size_t)72U / (size_t)8U; i++) { + size_t i0 = i; + size_t offset = start + (size_t)8U * i0; + uint8_t uu____0[8U]; + core_result_Result_15 dst; + Eurydice_slice_to_array2( + &dst, + Eurydice_slice_subslice3(blocks, offset, offset + (size_t)8U, + uint8_t *), + Eurydice_slice, uint8_t[8U], core_array_TryFromSliceError); + core_result_unwrap_26_68(dst, uu____0); + state_flat[i0] = core_num__u64__from_le_bytes(uu____0); + } + for (size_t i = (size_t)0U; i < (size_t)72U / (size_t)8U; i++) { + size_t i0 = i; + libcrux_sha3_traits_set_ij_04( + state, i0 / (size_t)5U, i0 % (size_t)5U, + libcrux_sha3_traits_get_ij_04(state, i0 / (size_t)5U, + i0 % (size_t)5U)[0U] ^ + state_flat[i0]); + } +} + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1 +with const generics +- RATE= 72 +*/ +void +libcrux_sha3_simd_portable_load_block_a1_f8( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start) +{ + libcrux_sha3_simd_portable_load_block_f8(self->st, input[0U], start); +} + +/** +This function found in impl {core::ops::index::Index<(usize, usize), T> for +libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.index_c2 +with types uint64_t +with const generics +- N= 1 +*/ +uint64_t * +libcrux_sha3_generic_keccak_index_c2_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self, size_t_x2 index) +{ + return libcrux_sha3_traits_get_ij_04(self->st, index.fst, index.snd); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.theta_80 +with types uint64_t +with const generics +- N= 1 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_theta_80_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self, uint64_t ret[5U]) +{ + uint64_t c[5U] = { + libcrux_sha3_simd_portable_xor5_d2( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)0U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)0U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)0U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)0U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)0U }))[0U]), + libcrux_sha3_simd_portable_xor5_d2( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)1U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)1U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)1U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)1U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)1U }))[0U]), + libcrux_sha3_simd_portable_xor5_d2( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)2U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)2U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)2U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)2U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)2U }))[0U]), + libcrux_sha3_simd_portable_xor5_d2( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)3U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)3U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)3U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)3U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)3U }))[0U]), + libcrux_sha3_simd_portable_xor5_d2( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)4U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)4U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)4U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)4U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)4U }))[0U]) + }; + uint64_t uu____0 = libcrux_sha3_simd_portable_rotate_left1_and_xor_d2( + c[((size_t)0U + (size_t)4U) % (size_t)5U], + c[((size_t)0U + (size_t)1U) % (size_t)5U]); + uint64_t uu____1 = libcrux_sha3_simd_portable_rotate_left1_and_xor_d2( + c[((size_t)1U + (size_t)4U) % (size_t)5U], + c[((size_t)1U + (size_t)1U) % (size_t)5U]); + uint64_t uu____2 = libcrux_sha3_simd_portable_rotate_left1_and_xor_d2( + c[((size_t)2U + (size_t)4U) % (size_t)5U], + c[((size_t)2U + (size_t)1U) % (size_t)5U]); + uint64_t uu____3 = libcrux_sha3_simd_portable_rotate_left1_and_xor_d2( + c[((size_t)3U + (size_t)4U) % (size_t)5U], + c[((size_t)3U + (size_t)1U) % (size_t)5U]); + ret[0U] = uu____0; + ret[1U] = uu____1; + ret[2U] = uu____2; + ret[3U] = uu____3; + ret[4U] = libcrux_sha3_simd_portable_rotate_left1_and_xor_d2( + c[((size_t)4U + (size_t)4U) % (size_t)5U], + c[((size_t)4U + (size_t)1U) % (size_t)5U]); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.set_80 +with types uint64_t +with const generics +- N= 1 +*/ +void +libcrux_sha3_generic_keccak_set_80_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self, size_t i, size_t j, + uint64_t v) +{ + libcrux_sha3_traits_set_ij_04(self->st, i, j, v); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 36 +- RIGHT= 28 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_02(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)36); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 36 +- RIGHT= 28 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_02(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_02(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 36 +- RIGHT= 28 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_02(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_02(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 3 +- RIGHT= 61 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_ac(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)3); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 3 +- RIGHT= 61 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_ac(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_ac(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 3 +- RIGHT= 61 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_ac(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_ac(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 41 +- RIGHT= 23 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_020(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)41); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 41 +- RIGHT= 23 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_020(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_020(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 41 +- RIGHT= 23 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_020(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_020(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 18 +- RIGHT= 46 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_a9(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)18); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 18 +- RIGHT= 46 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_a9(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_a9(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 18 +- RIGHT= 46 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_a9(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_a9(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 1 +- RIGHT= 63 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_76(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_76(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 1 +- RIGHT= 63 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_76(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_76(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 44 +- RIGHT= 20 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_58(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)44); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 44 +- RIGHT= 20 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_58(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_58(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 44 +- RIGHT= 20 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_58(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_58(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 10 +- RIGHT= 54 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_e0(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)10); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 10 +- RIGHT= 54 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_e0(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_e0(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 10 +- RIGHT= 54 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_e0(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_e0(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 45 +- RIGHT= 19 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_63(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)45); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 45 +- RIGHT= 19 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_63(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_63(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 45 +- RIGHT= 19 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_63(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_63(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 2 +- RIGHT= 62 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_6a(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)2); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 2 +- RIGHT= 62 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_6a(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_6a(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 2 +- RIGHT= 62 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_6a(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_6a(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 62 +- RIGHT= 2 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_ab(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)62); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 62 +- RIGHT= 2 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_ab(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_ab(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 62 +- RIGHT= 2 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_ab(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_ab(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 6 +- RIGHT= 58 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_5b(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)6); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 6 +- RIGHT= 58 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_5b(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_5b(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 6 +- RIGHT= 58 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_5b(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_5b(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 43 +- RIGHT= 21 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_6f(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)43); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 43 +- RIGHT= 21 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_6f(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_6f(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 43 +- RIGHT= 21 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_6f(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_6f(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 15 +- RIGHT= 49 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_62(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)15); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 15 +- RIGHT= 49 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_62(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_62(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 15 +- RIGHT= 49 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_62(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_62(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 61 +- RIGHT= 3 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_23(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)61); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 61 +- RIGHT= 3 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_23(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_23(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 61 +- RIGHT= 3 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_23(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_23(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 28 +- RIGHT= 36 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_37(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)28); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 28 +- RIGHT= 36 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_37(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_37(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 28 +- RIGHT= 36 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_37(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_37(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 55 +- RIGHT= 9 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_bb(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)55); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 55 +- RIGHT= 9 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_bb(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_bb(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 55 +- RIGHT= 9 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_bb(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_bb(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 25 +- RIGHT= 39 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_b9(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)25); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 25 +- RIGHT= 39 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_b9(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_b9(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 25 +- RIGHT= 39 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_b9(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_b9(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 21 +- RIGHT= 43 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_54(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)21); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 21 +- RIGHT= 43 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_54(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_54(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 21 +- RIGHT= 43 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_54(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_54(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 56 +- RIGHT= 8 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_4c(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)56); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 56 +- RIGHT= 8 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_4c(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_4c(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 56 +- RIGHT= 8 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_4c(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_4c(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 27 +- RIGHT= 37 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_ce(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)27); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 27 +- RIGHT= 37 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_ce(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_ce(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 27 +- RIGHT= 37 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_ce(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_ce(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 20 +- RIGHT= 44 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_77(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)20); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 20 +- RIGHT= 44 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_77(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_77(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 20 +- RIGHT= 44 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_77(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_77(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 39 +- RIGHT= 25 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_25(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)39); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 39 +- RIGHT= 25 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_25(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_25(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 39 +- RIGHT= 25 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_25(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_25(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 8 +- RIGHT= 56 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_af(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)8); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 8 +- RIGHT= 56 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_af(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_af(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 8 +- RIGHT= 56 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_af(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_af(a, b); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 14 +- RIGHT= 50 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_rotate_left_fd(uint64_t x) +{ + return core_num__u64__rotate_left(x, (uint32_t)(int32_t)14); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 14 +- RIGHT= 50 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable__vxarq_u64_fd(uint64_t a, + uint64_t b) +{ + return libcrux_sha3_simd_portable_rotate_left_fd(a ^ b); +} + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 14 +- RIGHT= 50 +*/ +KRML_MUSTINLINE uint64_t +libcrux_sha3_simd_portable_xor_and_rotate_d2_fd(uint64_t a, uint64_t b) +{ + return libcrux_sha3_simd_portable__vxarq_u64_fd(a, b); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.rho_80 +with types uint64_t +with const generics +- N= 1 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_rho_80_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self, uint64_t t[5U]) +{ + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)0U, (size_t)0U, + libcrux_sha3_simd_portable_xor_d2( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)0U }))[0U], + t[0U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____0 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____0, (size_t)1U, (size_t)0U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_02( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)0U }))[0U], + t[0U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____1 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____1, (size_t)2U, (size_t)0U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_ac( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)0U }))[0U], + t[0U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____2 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____2, (size_t)3U, (size_t)0U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_020( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)0U }))[0U], + t[0U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____3 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____3, (size_t)4U, (size_t)0U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_a9( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)0U }))[0U], + t[0U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____4 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____4, (size_t)0U, (size_t)1U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_76( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)1U }))[0U], + t[1U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____5 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____5, (size_t)1U, (size_t)1U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_58( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)1U }))[0U], + t[1U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____6 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____6, (size_t)2U, (size_t)1U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_e0( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)1U }))[0U], + t[1U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____7 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____7, (size_t)3U, (size_t)1U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_63( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)1U }))[0U], + t[1U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____8 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____8, (size_t)4U, (size_t)1U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_6a( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)1U }))[0U], + t[1U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____9 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____9, (size_t)0U, (size_t)2U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_ab( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)2U }))[0U], + t[2U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____10 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____10, (size_t)1U, (size_t)2U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_5b( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)2U }))[0U], + t[2U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____11 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____11, (size_t)2U, (size_t)2U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_6f( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)2U }))[0U], + t[2U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____12 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____12, (size_t)3U, (size_t)2U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_62( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)2U }))[0U], + t[2U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____13 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____13, (size_t)4U, (size_t)2U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_23( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)2U }))[0U], + t[2U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____14 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____14, (size_t)0U, (size_t)3U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_37( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)3U }))[0U], + t[3U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____15 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____15, (size_t)1U, (size_t)3U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_bb( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)3U }))[0U], + t[3U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____16 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____16, (size_t)2U, (size_t)3U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_b9( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)3U }))[0U], + t[3U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____17 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____17, (size_t)3U, (size_t)3U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_54( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)3U }))[0U], + t[3U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____18 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____18, (size_t)4U, (size_t)3U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_4c( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)3U }))[0U], + t[3U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____19 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____19, (size_t)0U, (size_t)4U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_ce( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)4U }))[0U], + t[4U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____20 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____20, (size_t)1U, (size_t)4U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_77( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)4U }))[0U], + t[4U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____21 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____21, (size_t)2U, (size_t)4U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_25( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)4U }))[0U], + t[4U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____22 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____22, (size_t)3U, (size_t)4U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_af( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)4U }))[0U], + t[4U])); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____23 = self; + libcrux_sha3_generic_keccak_set_80_04( + uu____23, (size_t)4U, (size_t)4U, + libcrux_sha3_simd_portable_xor_and_rotate_d2_fd( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)4U }))[0U], + t[4U])); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.pi_80 +with types uint64_t +with const generics +- N= 1 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_pi_80_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self) +{ + libcrux_sha3_generic_keccak_KeccakState_17 old = self[0U]; + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)1U, (size_t)0U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)3U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)2U, (size_t)0U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)1U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)3U, (size_t)0U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)4U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)4U, (size_t)0U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)2U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)0U, (size_t)1U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)1U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)1U, (size_t)1U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)4U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)2U, (size_t)1U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)2U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)3U, (size_t)1U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)0U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)4U, (size_t)1U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, + .snd = (size_t)3U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)0U, (size_t)2U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)2U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)1U, (size_t)2U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)0U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)2U, (size_t)2U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)3U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)3U, (size_t)2U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)1U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)4U, (size_t)2U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, + .snd = (size_t)4U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)0U, (size_t)3U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)3U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)1U, (size_t)3U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)1U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)2U, (size_t)3U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)4U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)3U, (size_t)3U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)2U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)4U, (size_t)3U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, + .snd = (size_t)0U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)0U, (size_t)4U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)4U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)1U, (size_t)4U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)2U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)2U, (size_t)4U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)0U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)3U, (size_t)4U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)3U }))[0U]); + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)4U, (size_t)4U, + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, + .snd = (size_t)1U }))[0U]); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.chi_80 +with types uint64_t +with const generics +- N= 1 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_chi_80_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self) +{ + libcrux_sha3_generic_keccak_KeccakState_17 old = self[0U]; + KRML_MAYBE_FOR5( + i0, (size_t)0U, (size_t)5U, (size_t)1U, size_t i1 = i0; KRML_MAYBE_FOR5( + i, (size_t)0U, (size_t)5U, (size_t)1U, size_t j = i; + libcrux_sha3_generic_keccak_set_80_04( + self, i1, j, + libcrux_sha3_simd_portable_and_not_xor_d2( + libcrux_sha3_generic_keccak_index_c2_04( + self, + (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = j }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + &old, (KRML_CLITERAL(size_t_x2){ + .fst = i1, + .snd = (j + (size_t)2U) % (size_t)5U }))[0U], + libcrux_sha3_generic_keccak_index_c2_04( + &old, + (KRML_CLITERAL(size_t_x2){ + .fst = i1, + .snd = (j + (size_t)1U) % (size_t)5U }))[0U])););); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.iota_80 +with types uint64_t +with const generics +- N= 1 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_iota_80_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self, size_t i) +{ + libcrux_sha3_generic_keccak_set_80_04( + self, (size_t)0U, (size_t)0U, + libcrux_sha3_simd_portable_xor_constant_d2( + libcrux_sha3_generic_keccak_index_c2_04( + self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, + .snd = (size_t)0U }))[0U], + libcrux_sha3_generic_keccak_constants_ROUNDCONSTANTS[i])); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.keccakf1600_80 +with types uint64_t +with const generics +- N= 1 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_keccakf1600_80_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self) +{ + for (size_t i = (size_t)0U; i < (size_t)24U; i++) { + size_t i0 = i; + uint64_t t[5U]; + libcrux_sha3_generic_keccak_theta_80_04(self, t); + libcrux_sha3_generic_keccak_KeccakState_17 *uu____0 = self; + uint64_t uu____1[5U]; + memcpy(uu____1, t, (size_t)5U * sizeof(uint64_t)); + libcrux_sha3_generic_keccak_rho_80_04(uu____0, uu____1); + libcrux_sha3_generic_keccak_pi_80_04(self); + libcrux_sha3_generic_keccak_chi_80_04(self); + libcrux_sha3_generic_keccak_iota_80_04(self, i0); + } +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 72 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_absorb_block_80_c6( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *blocks, + size_t start) +{ + libcrux_sha3_simd_portable_load_block_a1_f8(self, blocks, start); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last +with const generics +- RATE= 72 +- DELIMITER= 6 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_load_last_96( + uint64_t *state, Eurydice_slice blocks, size_t start, size_t len) +{ + uint8_t buffer[72U] = { 0U }; + Eurydice_slice_copy( + Eurydice_array_to_subslice3(buffer, (size_t)0U, len, uint8_t *), + Eurydice_slice_subslice3(blocks, start, start + len, uint8_t *), uint8_t); + buffer[len] = 6U; + size_t uu____0 = (size_t)72U - (size_t)1U; + buffer[uu____0] = (uint32_t)buffer[uu____0] | 128U; + libcrux_sha3_simd_portable_load_block_f8( + state, Eurydice_array_to_slice((size_t)72U, buffer, uint8_t), (size_t)0U); +} + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1 +with const generics +- RATE= 72 +- DELIMITER= 6 +*/ +void +libcrux_sha3_simd_portable_load_last_a1_96( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_load_last_96(self->st, input[0U], start, len); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 72 +- DELIM= 6 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_absorb_final_80_9e( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *last, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_load_last_a1_96(self, last, start, len); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.store_block +with const generics +- RATE= 72 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_store_block_f8( + uint64_t *s, Eurydice_slice out, size_t start, size_t len) +{ + size_t octets = len / (size_t)8U; + for (size_t i = (size_t)0U; i < octets; i++) { + size_t i0 = i; + Eurydice_slice uu____0 = Eurydice_slice_subslice3( + out, start + (size_t)8U * i0, start + (size_t)8U * i0 + (size_t)8U, + uint8_t *); + uint8_t ret[8U]; + core_num__u64__to_le_bytes( + libcrux_sha3_traits_get_ij_04(s, i0 / (size_t)5U, i0 % (size_t)5U)[0U], + ret); + Eurydice_slice_copy( + uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t); + } + size_t remaining = len % (size_t)8U; + if (remaining > (size_t)0U) { + Eurydice_slice uu____1 = Eurydice_slice_subslice3( + out, start + len - remaining, start + len, uint8_t *); + uint8_t ret[8U]; + core_num__u64__to_le_bytes( + libcrux_sha3_traits_get_ij_04(s, octets / (size_t)5U, + octets % (size_t)5U)[0U], + ret); + Eurydice_slice_copy( + uu____1, + Eurydice_array_to_subslice3(ret, (size_t)0U, remaining, uint8_t *), + uint8_t); + } +} + +/** +This function found in impl {libcrux_sha3::traits::Squeeze1<u64> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.squeeze_13 +with const generics +- RATE= 72 +*/ +void +libcrux_sha3_simd_portable_squeeze_13_f8( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_store_block_f8(self->st, out, start, len); +} + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1 +with const generics +- RATE= 72 +- DELIM= 6 +*/ +inline void +libcrux_sha3_generic_keccak_portable_keccak1_96( + Eurydice_slice data, Eurydice_slice out) +{ + libcrux_sha3_generic_keccak_KeccakState_17 s = + libcrux_sha3_generic_keccak_new_80_04(); + size_t data_len = Eurydice_slice_len(data, uint8_t); + for (size_t i = (size_t)0U; i < data_len / (size_t)72U; i++) { + size_t i0 = i; + Eurydice_slice buf[1U] = { data }; + libcrux_sha3_generic_keccak_absorb_block_80_c6(&s, buf, i0 * (size_t)72U); + } + size_t rem = data_len % (size_t)72U; + Eurydice_slice buf[1U] = { data }; + libcrux_sha3_generic_keccak_absorb_final_80_9e(&s, buf, data_len - rem, rem); + size_t outlen = Eurydice_slice_len(out, uint8_t); + size_t blocks = outlen / (size_t)72U; + size_t last = outlen - outlen % (size_t)72U; + if (blocks == (size_t)0U) { + libcrux_sha3_simd_portable_squeeze_13_f8(&s, out, (size_t)0U, outlen); + } else { + libcrux_sha3_simd_portable_squeeze_13_f8(&s, out, (size_t)0U, (size_t)72U); + for (size_t i = (size_t)1U; i < blocks; i++) { + size_t i0 = i; + libcrux_sha3_generic_keccak_keccakf1600_80_04(&s); + libcrux_sha3_simd_portable_squeeze_13_f8(&s, out, i0 * (size_t)72U, + (size_t)72U); + } + if (last < outlen) { + libcrux_sha3_generic_keccak_keccakf1600_80_04(&s); + libcrux_sha3_simd_portable_squeeze_13_f8(&s, out, last, outlen - last); + } + } +} + +/** + A portable SHA3 512 implementation. +*/ +void +libcrux_sha3_portable_sha512(Eurydice_slice digest, Eurydice_slice data) +{ + libcrux_sha3_generic_keccak_portable_keccak1_96(data, digest); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block +with const generics +- RATE= 136 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_load_block_5b( + uint64_t *state, Eurydice_slice blocks, size_t start) +{ + uint64_t state_flat[25U] = { 0U }; + for (size_t i = (size_t)0U; i < (size_t)136U / (size_t)8U; i++) { + size_t i0 = i; + size_t offset = start + (size_t)8U * i0; + uint8_t uu____0[8U]; + core_result_Result_15 dst; + Eurydice_slice_to_array2( + &dst, + Eurydice_slice_subslice3(blocks, offset, offset + (size_t)8U, + uint8_t *), + Eurydice_slice, uint8_t[8U], core_array_TryFromSliceError); + core_result_unwrap_26_68(dst, uu____0); + state_flat[i0] = core_num__u64__from_le_bytes(uu____0); + } + for (size_t i = (size_t)0U; i < (size_t)136U / (size_t)8U; i++) { + size_t i0 = i; + libcrux_sha3_traits_set_ij_04( + state, i0 / (size_t)5U, i0 % (size_t)5U, + libcrux_sha3_traits_get_ij_04(state, i0 / (size_t)5U, + i0 % (size_t)5U)[0U] ^ + state_flat[i0]); + } +} + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1 +with const generics +- RATE= 136 +*/ +void +libcrux_sha3_simd_portable_load_block_a1_5b( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start) +{ + libcrux_sha3_simd_portable_load_block_5b(self->st, input[0U], start); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 136 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_absorb_block_80_c60( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *blocks, + size_t start) +{ + libcrux_sha3_simd_portable_load_block_a1_5b(self, blocks, start); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last +with const generics +- RATE= 136 +- DELIMITER= 6 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_load_last_ad( + uint64_t *state, Eurydice_slice blocks, size_t start, size_t len) +{ + uint8_t buffer[136U] = { 0U }; + Eurydice_slice_copy( + Eurydice_array_to_subslice3(buffer, (size_t)0U, len, uint8_t *), + Eurydice_slice_subslice3(blocks, start, start + len, uint8_t *), uint8_t); + buffer[len] = 6U; + size_t uu____0 = (size_t)136U - (size_t)1U; + buffer[uu____0] = (uint32_t)buffer[uu____0] | 128U; + libcrux_sha3_simd_portable_load_block_5b( + state, Eurydice_array_to_slice((size_t)136U, buffer, uint8_t), + (size_t)0U); +} + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1 +with const generics +- RATE= 136 +- DELIMITER= 6 +*/ +void +libcrux_sha3_simd_portable_load_last_a1_ad( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_load_last_ad(self->st, input[0U], start, len); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 136 +- DELIM= 6 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_absorb_final_80_9e0( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *last, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_load_last_a1_ad(self, last, start, len); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.store_block +with const generics +- RATE= 136 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_store_block_5b( + uint64_t *s, Eurydice_slice out, size_t start, size_t len) +{ + size_t octets = len / (size_t)8U; + for (size_t i = (size_t)0U; i < octets; i++) { + size_t i0 = i; + Eurydice_slice uu____0 = Eurydice_slice_subslice3( + out, start + (size_t)8U * i0, start + (size_t)8U * i0 + (size_t)8U, + uint8_t *); + uint8_t ret[8U]; + core_num__u64__to_le_bytes( + libcrux_sha3_traits_get_ij_04(s, i0 / (size_t)5U, i0 % (size_t)5U)[0U], + ret); + Eurydice_slice_copy( + uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t); + } + size_t remaining = len % (size_t)8U; + if (remaining > (size_t)0U) { + Eurydice_slice uu____1 = Eurydice_slice_subslice3( + out, start + len - remaining, start + len, uint8_t *); + uint8_t ret[8U]; + core_num__u64__to_le_bytes( + libcrux_sha3_traits_get_ij_04(s, octets / (size_t)5U, + octets % (size_t)5U)[0U], + ret); + Eurydice_slice_copy( + uu____1, + Eurydice_array_to_subslice3(ret, (size_t)0U, remaining, uint8_t *), + uint8_t); + } +} + +/** +This function found in impl {libcrux_sha3::traits::Squeeze1<u64> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.squeeze_13 +with const generics +- RATE= 136 +*/ +void +libcrux_sha3_simd_portable_squeeze_13_5b( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_store_block_5b(self->st, out, start, len); +} + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1 +with const generics +- RATE= 136 +- DELIM= 6 +*/ +inline void +libcrux_sha3_generic_keccak_portable_keccak1_ad( + Eurydice_slice data, Eurydice_slice out) +{ + libcrux_sha3_generic_keccak_KeccakState_17 s = + libcrux_sha3_generic_keccak_new_80_04(); + size_t data_len = Eurydice_slice_len(data, uint8_t); + for (size_t i = (size_t)0U; i < data_len / (size_t)136U; i++) { + size_t i0 = i; + Eurydice_slice buf[1U] = { data }; + libcrux_sha3_generic_keccak_absorb_block_80_c60(&s, buf, i0 * (size_t)136U); + } + size_t rem = data_len % (size_t)136U; + Eurydice_slice buf[1U] = { data }; + libcrux_sha3_generic_keccak_absorb_final_80_9e0(&s, buf, data_len - rem, rem); + size_t outlen = Eurydice_slice_len(out, uint8_t); + size_t blocks = outlen / (size_t)136U; + size_t last = outlen - outlen % (size_t)136U; + if (blocks == (size_t)0U) { + libcrux_sha3_simd_portable_squeeze_13_5b(&s, out, (size_t)0U, outlen); + } else { + libcrux_sha3_simd_portable_squeeze_13_5b(&s, out, (size_t)0U, (size_t)136U); + for (size_t i = (size_t)1U; i < blocks; i++) { + size_t i0 = i; + libcrux_sha3_generic_keccak_keccakf1600_80_04(&s); + libcrux_sha3_simd_portable_squeeze_13_5b(&s, out, i0 * (size_t)136U, + (size_t)136U); + } + if (last < outlen) { + libcrux_sha3_generic_keccak_keccakf1600_80_04(&s); + libcrux_sha3_simd_portable_squeeze_13_5b(&s, out, last, outlen - last); + } + } +} + +/** + A portable SHA3 256 implementation. +*/ +void +libcrux_sha3_portable_sha256(Eurydice_slice digest, Eurydice_slice data) +{ + libcrux_sha3_generic_keccak_portable_keccak1_ad(data, digest); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last +with const generics +- RATE= 136 +- DELIMITER= 31 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_load_last_ad0( + uint64_t *state, Eurydice_slice blocks, size_t start, size_t len) +{ + uint8_t buffer[136U] = { 0U }; + Eurydice_slice_copy( + Eurydice_array_to_subslice3(buffer, (size_t)0U, len, uint8_t *), + Eurydice_slice_subslice3(blocks, start, start + len, uint8_t *), uint8_t); + buffer[len] = 31U; + size_t uu____0 = (size_t)136U - (size_t)1U; + buffer[uu____0] = (uint32_t)buffer[uu____0] | 128U; + libcrux_sha3_simd_portable_load_block_5b( + state, Eurydice_array_to_slice((size_t)136U, buffer, uint8_t), + (size_t)0U); +} + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1 +with const generics +- RATE= 136 +- DELIMITER= 31 +*/ +void +libcrux_sha3_simd_portable_load_last_a1_ad0( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_load_last_ad0(self->st, input[0U], start, len); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 136 +- DELIM= 31 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_absorb_final_80_9e1( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *last, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_load_last_a1_ad0(self, last, start, len); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); +} + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1 +with const generics +- RATE= 136 +- DELIM= 31 +*/ +inline void +libcrux_sha3_generic_keccak_portable_keccak1_ad0( + Eurydice_slice data, Eurydice_slice out) +{ + libcrux_sha3_generic_keccak_KeccakState_17 s = + libcrux_sha3_generic_keccak_new_80_04(); + size_t data_len = Eurydice_slice_len(data, uint8_t); + for (size_t i = (size_t)0U; i < data_len / (size_t)136U; i++) { + size_t i0 = i; + Eurydice_slice buf[1U] = { data }; + libcrux_sha3_generic_keccak_absorb_block_80_c60(&s, buf, i0 * (size_t)136U); + } + size_t rem = data_len % (size_t)136U; + Eurydice_slice buf[1U] = { data }; + libcrux_sha3_generic_keccak_absorb_final_80_9e1(&s, buf, data_len - rem, rem); + size_t outlen = Eurydice_slice_len(out, uint8_t); + size_t blocks = outlen / (size_t)136U; + size_t last = outlen - outlen % (size_t)136U; + if (blocks == (size_t)0U) { + libcrux_sha3_simd_portable_squeeze_13_5b(&s, out, (size_t)0U, outlen); + } else { + libcrux_sha3_simd_portable_squeeze_13_5b(&s, out, (size_t)0U, (size_t)136U); + for (size_t i = (size_t)1U; i < blocks; i++) { + size_t i0 = i; + libcrux_sha3_generic_keccak_keccakf1600_80_04(&s); + libcrux_sha3_simd_portable_squeeze_13_5b(&s, out, i0 * (size_t)136U, + (size_t)136U); + } + if (last < outlen) { + libcrux_sha3_generic_keccak_keccakf1600_80_04(&s); + libcrux_sha3_simd_portable_squeeze_13_5b(&s, out, last, outlen - last); + } + } +} + +/** + A portable SHAKE256 implementation. +*/ +void +libcrux_sha3_portable_shake256(Eurydice_slice digest, + Eurydice_slice data) +{ + libcrux_sha3_generic_keccak_portable_keccak1_ad0(data, digest); +} + +/** + Create a new SHAKE-128 state object. +*/ +libcrux_sha3_generic_keccak_KeccakState_17 +libcrux_sha3_portable_incremental_shake128_init(void) +{ + return libcrux_sha3_generic_keccak_new_80_04(); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block +with const generics +- RATE= 168 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_load_block_3a( + uint64_t *state, Eurydice_slice blocks, size_t start) +{ + uint64_t state_flat[25U] = { 0U }; + for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)8U; i++) { + size_t i0 = i; + size_t offset = start + (size_t)8U * i0; + uint8_t uu____0[8U]; + core_result_Result_15 dst; + Eurydice_slice_to_array2( + &dst, + Eurydice_slice_subslice3(blocks, offset, offset + (size_t)8U, + uint8_t *), + Eurydice_slice, uint8_t[8U], core_array_TryFromSliceError); + core_result_unwrap_26_68(dst, uu____0); + state_flat[i0] = core_num__u64__from_le_bytes(uu____0); + } + for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)8U; i++) { + size_t i0 = i; + libcrux_sha3_traits_set_ij_04( + state, i0 / (size_t)5U, i0 % (size_t)5U, + libcrux_sha3_traits_get_ij_04(state, i0 / (size_t)5U, + i0 % (size_t)5U)[0U] ^ + state_flat[i0]); + } +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last +with const generics +- RATE= 168 +- DELIMITER= 31 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_load_last_c6( + uint64_t *state, Eurydice_slice blocks, size_t start, size_t len) +{ + uint8_t buffer[168U] = { 0U }; + Eurydice_slice_copy( + Eurydice_array_to_subslice3(buffer, (size_t)0U, len, uint8_t *), + Eurydice_slice_subslice3(blocks, start, start + len, uint8_t *), uint8_t); + buffer[len] = 31U; + size_t uu____0 = (size_t)168U - (size_t)1U; + buffer[uu____0] = (uint32_t)buffer[uu____0] | 128U; + libcrux_sha3_simd_portable_load_block_3a( + state, Eurydice_array_to_slice((size_t)168U, buffer, uint8_t), + (size_t)0U); +} + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1 +with const generics +- RATE= 168 +- DELIMITER= 31 +*/ +void +libcrux_sha3_simd_portable_load_last_a1_c6( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_load_last_c6(self->st, input[0U], start, len); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 168 +- DELIM= 31 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_absorb_final_80_9e2( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *last, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_load_last_a1_c6(self, last, start, len); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); +} + +/** + Absorb +*/ +void +libcrux_sha3_portable_incremental_shake128_absorb_final( + libcrux_sha3_generic_keccak_KeccakState_17 *s, Eurydice_slice data0) +{ + libcrux_sha3_generic_keccak_KeccakState_17 *uu____0 = s; + Eurydice_slice uu____1[1U] = { data0 }; + libcrux_sha3_generic_keccak_absorb_final_80_9e2( + uu____0, uu____1, (size_t)0U, Eurydice_slice_len(data0, uint8_t)); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.store_block +with const generics +- RATE= 168 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_store_block_3a( + uint64_t *s, Eurydice_slice out, size_t start, size_t len) +{ + size_t octets = len / (size_t)8U; + for (size_t i = (size_t)0U; i < octets; i++) { + size_t i0 = i; + Eurydice_slice uu____0 = Eurydice_slice_subslice3( + out, start + (size_t)8U * i0, start + (size_t)8U * i0 + (size_t)8U, + uint8_t *); + uint8_t ret[8U]; + core_num__u64__to_le_bytes( + libcrux_sha3_traits_get_ij_04(s, i0 / (size_t)5U, i0 % (size_t)5U)[0U], + ret); + Eurydice_slice_copy( + uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t); + } + size_t remaining = len % (size_t)8U; + if (remaining > (size_t)0U) { + Eurydice_slice uu____1 = Eurydice_slice_subslice3( + out, start + len - remaining, start + len, uint8_t *); + uint8_t ret[8U]; + core_num__u64__to_le_bytes( + libcrux_sha3_traits_get_ij_04(s, octets / (size_t)5U, + octets % (size_t)5U)[0U], + ret); + Eurydice_slice_copy( + uu____1, + Eurydice_array_to_subslice3(ret, (size_t)0U, remaining, uint8_t *), + uint8_t); + } +} + +/** +This function found in impl {libcrux_sha3::traits::Squeeze1<u64> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.squeeze_13 +with const generics +- RATE= 168 +*/ +void +libcrux_sha3_simd_portable_squeeze_13_3a( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_store_block_3a(self->st, out, start, len); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, +1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of +libcrux_sha3.generic_keccak.portable.squeeze_first_three_blocks_b4 with const +generics +- RATE= 168 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_portable_squeeze_first_three_blocks_b4_3a( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out) +{ + libcrux_sha3_simd_portable_squeeze_13_3a(self, out, (size_t)0U, (size_t)168U); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); + libcrux_sha3_simd_portable_squeeze_13_3a(self, out, (size_t)168U, + (size_t)168U); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); + libcrux_sha3_simd_portable_squeeze_13_3a(self, out, (size_t)2U * (size_t)168U, + (size_t)168U); +} + +/** + Squeeze three blocks +*/ +void +libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks( + libcrux_sha3_generic_keccak_KeccakState_17 *s, Eurydice_slice out0) +{ + libcrux_sha3_generic_keccak_portable_squeeze_first_three_blocks_b4_3a(s, + out0); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, +1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of +libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4 with const generics +- RATE= 168 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_3a( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out, + size_t start) +{ + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); + libcrux_sha3_simd_portable_squeeze_13_3a(self, out, start, (size_t)168U); +} + +/** + Squeeze another block +*/ +void +libcrux_sha3_portable_incremental_shake128_squeeze_next_block( + libcrux_sha3_generic_keccak_KeccakState_17 *s, Eurydice_slice out0) +{ + libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_3a(s, out0, + (size_t)0U); +} + +/** + Returns the output size of a digest. +*/ +size_t +libcrux_sha3_digest_size(libcrux_sha3_Algorithm mode) +{ + switch (mode) { + case libcrux_sha3_Algorithm_Sha224: { + break; + } + case libcrux_sha3_Algorithm_Sha256: { + return (size_t)32U; + } + case libcrux_sha3_Algorithm_Sha384: { + return (size_t)48U; + } + case libcrux_sha3_Algorithm_Sha512: { + return (size_t)64U; + } + default: { + KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__, + __LINE__); + KRML_HOST_EXIT(253U); + } + } + return (size_t)28U; +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block +with const generics +- RATE= 144 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_load_block_2c( + uint64_t *state, Eurydice_slice blocks, size_t start) +{ + uint64_t state_flat[25U] = { 0U }; + for (size_t i = (size_t)0U; i < (size_t)144U / (size_t)8U; i++) { + size_t i0 = i; + size_t offset = start + (size_t)8U * i0; + uint8_t uu____0[8U]; + core_result_Result_15 dst; + Eurydice_slice_to_array2( + &dst, + Eurydice_slice_subslice3(blocks, offset, offset + (size_t)8U, + uint8_t *), + Eurydice_slice, uint8_t[8U], core_array_TryFromSliceError); + core_result_unwrap_26_68(dst, uu____0); + state_flat[i0] = core_num__u64__from_le_bytes(uu____0); + } + for (size_t i = (size_t)0U; i < (size_t)144U / (size_t)8U; i++) { + size_t i0 = i; + libcrux_sha3_traits_set_ij_04( + state, i0 / (size_t)5U, i0 % (size_t)5U, + libcrux_sha3_traits_get_ij_04(state, i0 / (size_t)5U, + i0 % (size_t)5U)[0U] ^ + state_flat[i0]); + } +} + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1 +with const generics +- RATE= 144 +*/ +void +libcrux_sha3_simd_portable_load_block_a1_2c( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start) +{ + libcrux_sha3_simd_portable_load_block_2c(self->st, input[0U], start); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 144 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_absorb_block_80_c61( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *blocks, + size_t start) +{ + libcrux_sha3_simd_portable_load_block_a1_2c(self, blocks, start); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last +with const generics +- RATE= 144 +- DELIMITER= 6 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_load_last_1e( + uint64_t *state, Eurydice_slice blocks, size_t start, size_t len) +{ + uint8_t buffer[144U] = { 0U }; + Eurydice_slice_copy( + Eurydice_array_to_subslice3(buffer, (size_t)0U, len, uint8_t *), + Eurydice_slice_subslice3(blocks, start, start + len, uint8_t *), uint8_t); + buffer[len] = 6U; + size_t uu____0 = (size_t)144U - (size_t)1U; + buffer[uu____0] = (uint32_t)buffer[uu____0] | 128U; + libcrux_sha3_simd_portable_load_block_2c( + state, Eurydice_array_to_slice((size_t)144U, buffer, uint8_t), + (size_t)0U); +} + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1 +with const generics +- RATE= 144 +- DELIMITER= 6 +*/ +void +libcrux_sha3_simd_portable_load_last_a1_1e( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_load_last_1e(self->st, input[0U], start, len); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 144 +- DELIM= 6 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_absorb_final_80_9e3( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *last, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_load_last_a1_1e(self, last, start, len); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.store_block +with const generics +- RATE= 144 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_store_block_2c( + uint64_t *s, Eurydice_slice out, size_t start, size_t len) +{ + size_t octets = len / (size_t)8U; + for (size_t i = (size_t)0U; i < octets; i++) { + size_t i0 = i; + Eurydice_slice uu____0 = Eurydice_slice_subslice3( + out, start + (size_t)8U * i0, start + (size_t)8U * i0 + (size_t)8U, + uint8_t *); + uint8_t ret[8U]; + core_num__u64__to_le_bytes( + libcrux_sha3_traits_get_ij_04(s, i0 / (size_t)5U, i0 % (size_t)5U)[0U], + ret); + Eurydice_slice_copy( + uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t); + } + size_t remaining = len % (size_t)8U; + if (remaining > (size_t)0U) { + Eurydice_slice uu____1 = Eurydice_slice_subslice3( + out, start + len - remaining, start + len, uint8_t *); + uint8_t ret[8U]; + core_num__u64__to_le_bytes( + libcrux_sha3_traits_get_ij_04(s, octets / (size_t)5U, + octets % (size_t)5U)[0U], + ret); + Eurydice_slice_copy( + uu____1, + Eurydice_array_to_subslice3(ret, (size_t)0U, remaining, uint8_t *), + uint8_t); + } +} + +/** +This function found in impl {libcrux_sha3::traits::Squeeze1<u64> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.squeeze_13 +with const generics +- RATE= 144 +*/ +void +libcrux_sha3_simd_portable_squeeze_13_2c( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_store_block_2c(self->st, out, start, len); +} + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1 +with const generics +- RATE= 144 +- DELIM= 6 +*/ +inline void +libcrux_sha3_generic_keccak_portable_keccak1_1e( + Eurydice_slice data, Eurydice_slice out) +{ + libcrux_sha3_generic_keccak_KeccakState_17 s = + libcrux_sha3_generic_keccak_new_80_04(); + size_t data_len = Eurydice_slice_len(data, uint8_t); + for (size_t i = (size_t)0U; i < data_len / (size_t)144U; i++) { + size_t i0 = i; + Eurydice_slice buf[1U] = { data }; + libcrux_sha3_generic_keccak_absorb_block_80_c61(&s, buf, i0 * (size_t)144U); + } + size_t rem = data_len % (size_t)144U; + Eurydice_slice buf[1U] = { data }; + libcrux_sha3_generic_keccak_absorb_final_80_9e3(&s, buf, data_len - rem, rem); + size_t outlen = Eurydice_slice_len(out, uint8_t); + size_t blocks = outlen / (size_t)144U; + size_t last = outlen - outlen % (size_t)144U; + if (blocks == (size_t)0U) { + libcrux_sha3_simd_portable_squeeze_13_2c(&s, out, (size_t)0U, outlen); + } else { + libcrux_sha3_simd_portable_squeeze_13_2c(&s, out, (size_t)0U, (size_t)144U); + for (size_t i = (size_t)1U; i < blocks; i++) { + size_t i0 = i; + libcrux_sha3_generic_keccak_keccakf1600_80_04(&s); + libcrux_sha3_simd_portable_squeeze_13_2c(&s, out, i0 * (size_t)144U, + (size_t)144U); + } + if (last < outlen) { + libcrux_sha3_generic_keccak_keccakf1600_80_04(&s); + libcrux_sha3_simd_portable_squeeze_13_2c(&s, out, last, outlen - last); + } + } +} + +/** + A portable SHA3 224 implementation. +*/ +KRML_MUSTINLINE void +libcrux_sha3_portable_sha224(Eurydice_slice digest, + Eurydice_slice data) +{ + libcrux_sha3_generic_keccak_portable_keccak1_1e(data, digest); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block +with const generics +- RATE= 104 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_load_block_7a( + uint64_t *state, Eurydice_slice blocks, size_t start) +{ + uint64_t state_flat[25U] = { 0U }; + for (size_t i = (size_t)0U; i < (size_t)104U / (size_t)8U; i++) { + size_t i0 = i; + size_t offset = start + (size_t)8U * i0; + uint8_t uu____0[8U]; + core_result_Result_15 dst; + Eurydice_slice_to_array2( + &dst, + Eurydice_slice_subslice3(blocks, offset, offset + (size_t)8U, + uint8_t *), + Eurydice_slice, uint8_t[8U], core_array_TryFromSliceError); + core_result_unwrap_26_68(dst, uu____0); + state_flat[i0] = core_num__u64__from_le_bytes(uu____0); + } + for (size_t i = (size_t)0U; i < (size_t)104U / (size_t)8U; i++) { + size_t i0 = i; + libcrux_sha3_traits_set_ij_04( + state, i0 / (size_t)5U, i0 % (size_t)5U, + libcrux_sha3_traits_get_ij_04(state, i0 / (size_t)5U, + i0 % (size_t)5U)[0U] ^ + state_flat[i0]); + } +} + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1 +with const generics +- RATE= 104 +*/ +void +libcrux_sha3_simd_portable_load_block_a1_7a( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start) +{ + libcrux_sha3_simd_portable_load_block_7a(self->st, input[0U], start); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 104 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_absorb_block_80_c62( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *blocks, + size_t start) +{ + libcrux_sha3_simd_portable_load_block_a1_7a(self, blocks, start); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last +with const generics +- RATE= 104 +- DELIMITER= 6 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_load_last_7c( + uint64_t *state, Eurydice_slice blocks, size_t start, size_t len) +{ + uint8_t buffer[104U] = { 0U }; + Eurydice_slice_copy( + Eurydice_array_to_subslice3(buffer, (size_t)0U, len, uint8_t *), + Eurydice_slice_subslice3(blocks, start, start + len, uint8_t *), uint8_t); + buffer[len] = 6U; + size_t uu____0 = (size_t)104U - (size_t)1U; + buffer[uu____0] = (uint32_t)buffer[uu____0] | 128U; + libcrux_sha3_simd_portable_load_block_7a( + state, Eurydice_array_to_slice((size_t)104U, buffer, uint8_t), + (size_t)0U); +} + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1 +with const generics +- RATE= 104 +- DELIMITER= 6 +*/ +void +libcrux_sha3_simd_portable_load_last_a1_7c( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_load_last_7c(self->st, input[0U], start, len); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 104 +- DELIM= 6 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_absorb_final_80_9e4( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *last, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_load_last_a1_7c(self, last, start, len); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); +} + +/** +A monomorphic instance of libcrux_sha3.simd.portable.store_block +with const generics +- RATE= 104 +*/ +KRML_MUSTINLINE void +libcrux_sha3_simd_portable_store_block_7a( + uint64_t *s, Eurydice_slice out, size_t start, size_t len) +{ + size_t octets = len / (size_t)8U; + for (size_t i = (size_t)0U; i < octets; i++) { + size_t i0 = i; + Eurydice_slice uu____0 = Eurydice_slice_subslice3( + out, start + (size_t)8U * i0, start + (size_t)8U * i0 + (size_t)8U, + uint8_t *); + uint8_t ret[8U]; + core_num__u64__to_le_bytes( + libcrux_sha3_traits_get_ij_04(s, i0 / (size_t)5U, i0 % (size_t)5U)[0U], + ret); + Eurydice_slice_copy( + uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t); + } + size_t remaining = len % (size_t)8U; + if (remaining > (size_t)0U) { + Eurydice_slice uu____1 = Eurydice_slice_subslice3( + out, start + len - remaining, start + len, uint8_t *); + uint8_t ret[8U]; + core_num__u64__to_le_bytes( + libcrux_sha3_traits_get_ij_04(s, octets / (size_t)5U, + octets % (size_t)5U)[0U], + ret); + Eurydice_slice_copy( + uu____1, + Eurydice_array_to_subslice3(ret, (size_t)0U, remaining, uint8_t *), + uint8_t); + } +} + +/** +This function found in impl {libcrux_sha3::traits::Squeeze1<u64> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.squeeze_13 +with const generics +- RATE= 104 +*/ +void +libcrux_sha3_simd_portable_squeeze_13_7a( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out, + size_t start, size_t len) +{ + libcrux_sha3_simd_portable_store_block_7a(self->st, out, start, len); +} + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1 +with const generics +- RATE= 104 +- DELIM= 6 +*/ +inline void +libcrux_sha3_generic_keccak_portable_keccak1_7c( + Eurydice_slice data, Eurydice_slice out) +{ + libcrux_sha3_generic_keccak_KeccakState_17 s = + libcrux_sha3_generic_keccak_new_80_04(); + size_t data_len = Eurydice_slice_len(data, uint8_t); + for (size_t i = (size_t)0U; i < data_len / (size_t)104U; i++) { + size_t i0 = i; + Eurydice_slice buf[1U] = { data }; + libcrux_sha3_generic_keccak_absorb_block_80_c62(&s, buf, i0 * (size_t)104U); + } + size_t rem = data_len % (size_t)104U; + Eurydice_slice buf[1U] = { data }; + libcrux_sha3_generic_keccak_absorb_final_80_9e4(&s, buf, data_len - rem, rem); + size_t outlen = Eurydice_slice_len(out, uint8_t); + size_t blocks = outlen / (size_t)104U; + size_t last = outlen - outlen % (size_t)104U; + if (blocks == (size_t)0U) { + libcrux_sha3_simd_portable_squeeze_13_7a(&s, out, (size_t)0U, outlen); + } else { + libcrux_sha3_simd_portable_squeeze_13_7a(&s, out, (size_t)0U, (size_t)104U); + for (size_t i = (size_t)1U; i < blocks; i++) { + size_t i0 = i; + libcrux_sha3_generic_keccak_keccakf1600_80_04(&s); + libcrux_sha3_simd_portable_squeeze_13_7a(&s, out, i0 * (size_t)104U, + (size_t)104U); + } + if (last < outlen) { + libcrux_sha3_generic_keccak_keccakf1600_80_04(&s); + libcrux_sha3_simd_portable_squeeze_13_7a(&s, out, last, outlen - last); + } + } +} + +/** + A portable SHA3 384 implementation. +*/ +KRML_MUSTINLINE void +libcrux_sha3_portable_sha384(Eurydice_slice digest, + Eurydice_slice data) +{ + libcrux_sha3_generic_keccak_portable_keccak1_7c(data, digest); +} + +/** + SHA3 224 + + Preconditions: + - `digest.len() == 28` +*/ +void +libcrux_sha3_sha224_ema(Eurydice_slice digest, Eurydice_slice payload) +{ + libcrux_sha3_portable_sha224(digest, payload); +} + +/** + SHA3 224 +*/ +void +libcrux_sha3_sha224(Eurydice_slice data, uint8_t ret[28U]) +{ + uint8_t out[28U] = { 0U }; + libcrux_sha3_sha224_ema(Eurydice_array_to_slice((size_t)28U, out, uint8_t), + data); + memcpy(ret, out, (size_t)28U * sizeof(uint8_t)); +} + +/** + SHA3 256 +*/ +void +libcrux_sha3_sha256_ema(Eurydice_slice digest, Eurydice_slice payload) +{ + libcrux_sha3_portable_sha256(digest, payload); +} + +/** + SHA3 256 +*/ +void +libcrux_sha3_sha256(Eurydice_slice data, uint8_t ret[32U]) +{ + uint8_t out[32U] = { 0U }; + libcrux_sha3_sha256_ema(Eurydice_array_to_slice((size_t)32U, out, uint8_t), + data); + memcpy(ret, out, (size_t)32U * sizeof(uint8_t)); +} + +/** + SHA3 384 +*/ +void +libcrux_sha3_sha384_ema(Eurydice_slice digest, Eurydice_slice payload) +{ + libcrux_sha3_portable_sha384(digest, payload); +} + +/** + SHA3 384 +*/ +void +libcrux_sha3_sha384(Eurydice_slice data, uint8_t ret[48U]) +{ + uint8_t out[48U] = { 0U }; + libcrux_sha3_sha384_ema(Eurydice_array_to_slice((size_t)48U, out, uint8_t), + data); + memcpy(ret, out, (size_t)48U * sizeof(uint8_t)); +} + +/** + SHA3 512 +*/ +void +libcrux_sha3_sha512_ema(Eurydice_slice digest, Eurydice_slice payload) +{ + libcrux_sha3_portable_sha512(digest, payload); +} + +/** + SHA3 512 +*/ +void +libcrux_sha3_sha512(Eurydice_slice data, uint8_t ret[64U]) +{ + uint8_t out[64U] = { 0U }; + libcrux_sha3_sha512_ema(Eurydice_array_to_slice((size_t)64U, out, uint8_t), + data); + memcpy(ret, out, (size_t)64U * sizeof(uint8_t)); +} + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1 +with const generics +- RATE= 168 +*/ +void +libcrux_sha3_simd_portable_load_block_a1_3a( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start) +{ + libcrux_sha3_simd_portable_load_block_3a(self->st, input[0U], start); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 168 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_absorb_block_80_c63( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *blocks, + size_t start) +{ + libcrux_sha3_simd_portable_load_block_a1_3a(self, blocks, start); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); +} + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1 +with const generics +- RATE= 168 +- DELIM= 31 +*/ +inline void +libcrux_sha3_generic_keccak_portable_keccak1_c6( + Eurydice_slice data, Eurydice_slice out) +{ + libcrux_sha3_generic_keccak_KeccakState_17 s = + libcrux_sha3_generic_keccak_new_80_04(); + size_t data_len = Eurydice_slice_len(data, uint8_t); + for (size_t i = (size_t)0U; i < data_len / (size_t)168U; i++) { + size_t i0 = i; + Eurydice_slice buf[1U] = { data }; + libcrux_sha3_generic_keccak_absorb_block_80_c63(&s, buf, i0 * (size_t)168U); + } + size_t rem = data_len % (size_t)168U; + Eurydice_slice buf[1U] = { data }; + libcrux_sha3_generic_keccak_absorb_final_80_9e2(&s, buf, data_len - rem, rem); + size_t outlen = Eurydice_slice_len(out, uint8_t); + size_t blocks = outlen / (size_t)168U; + size_t last = outlen - outlen % (size_t)168U; + if (blocks == (size_t)0U) { + libcrux_sha3_simd_portable_squeeze_13_3a(&s, out, (size_t)0U, outlen); + } else { + libcrux_sha3_simd_portable_squeeze_13_3a(&s, out, (size_t)0U, (size_t)168U); + for (size_t i = (size_t)1U; i < blocks; i++) { + size_t i0 = i; + libcrux_sha3_generic_keccak_keccakf1600_80_04(&s); + libcrux_sha3_simd_portable_squeeze_13_3a(&s, out, i0 * (size_t)168U, + (size_t)168U); + } + if (last < outlen) { + libcrux_sha3_generic_keccak_keccakf1600_80_04(&s); + libcrux_sha3_simd_portable_squeeze_13_3a(&s, out, last, outlen - last); + } + } +} + +/** + A portable SHAKE128 implementation. +*/ +KRML_MUSTINLINE void +libcrux_sha3_portable_shake128(Eurydice_slice digest, + Eurydice_slice data) +{ + libcrux_sha3_generic_keccak_portable_keccak1_c6(data, digest); +} + +/** + SHAKE 128 + + Writes `out.len()` bytes. +*/ +void +libcrux_sha3_shake128_ema(Eurydice_slice out, Eurydice_slice data) +{ + libcrux_sha3_portable_shake128(out, data); +} + +/** + SHAKE 256 + + Writes `out.len()` bytes. +*/ +void +libcrux_sha3_shake256_ema(Eurydice_slice out, Eurydice_slice data) +{ + libcrux_sha3_portable_shake256(out, data); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, +1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of +libcrux_sha3.generic_keccak.portable.squeeze_first_five_blocks_b4 with const +generics +- RATE= 168 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_portable_squeeze_first_five_blocks_b4_3a( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out) +{ + libcrux_sha3_simd_portable_squeeze_13_3a(self, out, (size_t)0U, (size_t)168U); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); + libcrux_sha3_simd_portable_squeeze_13_3a(self, out, (size_t)168U, + (size_t)168U); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); + libcrux_sha3_simd_portable_squeeze_13_3a(self, out, (size_t)2U * (size_t)168U, + (size_t)168U); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); + libcrux_sha3_simd_portable_squeeze_13_3a(self, out, (size_t)3U * (size_t)168U, + (size_t)168U); + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); + libcrux_sha3_simd_portable_squeeze_13_3a(self, out, (size_t)4U * (size_t)168U, + (size_t)168U); +} + +/** + Squeeze five blocks +*/ +KRML_MUSTINLINE void +libcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks( + libcrux_sha3_generic_keccak_KeccakState_17 *s, Eurydice_slice out0) +{ + libcrux_sha3_generic_keccak_portable_squeeze_first_five_blocks_b4_3a(s, out0); +} + +/** + Absorb some data for SHAKE-256 for the last time +*/ +KRML_MUSTINLINE void +libcrux_sha3_portable_incremental_shake256_absorb_final( + libcrux_sha3_generic_keccak_KeccakState_17 *s, Eurydice_slice data) +{ + libcrux_sha3_generic_keccak_KeccakState_17 *uu____0 = s; + Eurydice_slice uu____1[1U] = { data }; + libcrux_sha3_generic_keccak_absorb_final_80_9e1( + uu____0, uu____1, (size_t)0U, Eurydice_slice_len(data, uint8_t)); +} + +/** + Create a new SHAKE-256 state object. +*/ +KRML_MUSTINLINE libcrux_sha3_generic_keccak_KeccakState_17 +libcrux_sha3_portable_incremental_shake256_init(void) +{ + return libcrux_sha3_generic_keccak_new_80_04(); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, +1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of +libcrux_sha3.generic_keccak.portable.squeeze_first_block_b4 with const generics +- RATE= 136 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_portable_squeeze_first_block_b4_5b( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out) +{ + libcrux_sha3_simd_portable_squeeze_13_5b(self, out, (size_t)0U, (size_t)136U); +} + +/** + Squeeze the first SHAKE-256 block +*/ +KRML_MUSTINLINE void +libcrux_sha3_portable_incremental_shake256_squeeze_first_block( + libcrux_sha3_generic_keccak_KeccakState_17 *s, Eurydice_slice out) +{ + libcrux_sha3_generic_keccak_portable_squeeze_first_block_b4_5b(s, out); +} + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, +1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of +libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4 with const generics +- RATE= 136 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_5b( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out, + size_t start) +{ + libcrux_sha3_generic_keccak_keccakf1600_80_04(self); + libcrux_sha3_simd_portable_squeeze_13_5b(self, out, start, (size_t)136U); +} + +/** + Squeeze the next SHAKE-256 block +*/ +KRML_MUSTINLINE void +libcrux_sha3_portable_incremental_shake256_squeeze_next_block( + libcrux_sha3_generic_keccak_KeccakState_17 *s, Eurydice_slice out) +{ + libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_5b(s, out, + (size_t)0U); +} + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.fill_buffer_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 136 +*/ +size_t +libcrux_sha3_generic_keccak_xof_fill_buffer_35_c6( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice *inputs) +{ + size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); + size_t consumed = (size_t)0U; + if (self->buf_len > (size_t)0U) { + if (self->buf_len + input_len >= (size_t)136U) { + consumed = (size_t)136U - self->buf_len; + { + size_t i = (size_t)0U; + Eurydice_slice uu____0 = Eurydice_array_to_subslice_from( + (size_t)136U, self->buf[i], self->buf_len, uint8_t, size_t, + uint8_t[]); + Eurydice_slice_copy( + uu____0, + Eurydice_slice_subslice_to(inputs[i], consumed, uint8_t, size_t, + uint8_t[]), + uint8_t); + } + self->buf_len = self->buf_len + consumed; + } + } + return consumed; +} + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_full_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 136 +*/ +size_t +libcrux_sha3_generic_keccak_xof_absorb_full_35_c6( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice *inputs) +{ + size_t input_consumed = + libcrux_sha3_generic_keccak_xof_fill_buffer_35_c6(self, inputs); + if (input_consumed > (size_t)0U) { + Eurydice_slice borrowed[1U]; + { + uint8_t buf[136U] = { 0U }; + borrowed[0U] = core_array___Array_T__N___as_slice( + (size_t)136U, buf, uint8_t, Eurydice_slice); + } + { + size_t i = (size_t)0U; + borrowed[i] = + Eurydice_array_to_slice((size_t)136U, self->buf[i], uint8_t); + } + libcrux_sha3_simd_portable_load_block_a1_5b(&self->inner, borrowed, + (size_t)0U); + libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner); + self->buf_len = (size_t)0U; + } + size_t input_to_consume = + Eurydice_slice_len(inputs[0U], uint8_t) - input_consumed; + size_t num_blocks = input_to_consume / (size_t)136U; + size_t remainder = input_to_consume % (size_t)136U; + for (size_t i = (size_t)0U; i < num_blocks; i++) { + size_t i0 = i; + libcrux_sha3_simd_portable_load_block_a1_5b( + &self->inner, inputs, input_consumed + i0 * (size_t)136U); + libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner); + } + return remainder; +} + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 136 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_xof_absorb_35_c6( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice *inputs) +{ + size_t input_remainder_len = + libcrux_sha3_generic_keccak_xof_absorb_full_35_c6(self, inputs); + if (input_remainder_len > (size_t)0U) { + size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); + { + size_t i = (size_t)0U; + Eurydice_slice_copy(Eurydice_array_to_subslice3( + self->buf[i], self->buf_len, + self->buf_len + input_remainder_len, uint8_t *), + Eurydice_slice_subslice_from( + inputs[i], input_len - input_remainder_len, + uint8_t, size_t, uint8_t[]), + uint8_t); + } + self->buf_len = self->buf_len + input_remainder_len; + } +} + +/** + Shake256 absorb +*/ +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> +for libcrux_sha3::portable::incremental::Shake256Xof} +*/ +void +libcrux_sha3_portable_incremental_absorb_42( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice input) +{ + Eurydice_slice buf[1U] = { input }; + libcrux_sha3_generic_keccak_xof_absorb_35_c6(self, buf); +} + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_final_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 136 +- DELIMITER= 31 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_xof_absorb_final_35_9e( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice *inputs) +{ + libcrux_sha3_generic_keccak_xof_absorb_35_c6(self, inputs); + Eurydice_slice borrowed[1U]; + { + uint8_t buf[136U] = { 0U }; + borrowed[0U] = core_array___Array_T__N___as_slice((size_t)136U, buf, + uint8_t, Eurydice_slice); + } + { + size_t i = (size_t)0U; + borrowed[i] = Eurydice_array_to_slice((size_t)136U, self->buf[i], uint8_t); + } + libcrux_sha3_simd_portable_load_last_a1_ad0(&self->inner, borrowed, + (size_t)0U, self->buf_len); + libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner); +} + +/** + Shake256 absorb final +*/ +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> +for libcrux_sha3::portable::incremental::Shake256Xof} +*/ +void +libcrux_sha3_portable_incremental_absorb_final_42( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice input) +{ + Eurydice_slice buf[1U] = { input }; + libcrux_sha3_generic_keccak_xof_absorb_final_35_9e(self, buf); +} + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.zero_block_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 136 +*/ +void +libcrux_sha3_generic_keccak_xof_zero_block_35_c6(uint8_t ret[136U]) +{ + memset(ret, 0U, 136U * sizeof(uint8_t)); +} + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.new_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 136 +*/ +libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 +libcrux_sha3_generic_keccak_xof_new_35_c6(void) +{ + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 lit; + lit.inner = libcrux_sha3_generic_keccak_new_80_04(); + uint8_t repeat_expression[1U][136U]; + { + libcrux_sha3_generic_keccak_xof_zero_block_35_c6(repeat_expression[0U]); + } + memcpy(lit.buf, repeat_expression, (size_t)1U * sizeof(uint8_t[136U])); + lit.buf_len = (size_t)0U; + lit.sponge = false; + return lit; +} + +/** + Shake256 new state +*/ +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> +for libcrux_sha3::portable::incremental::Shake256Xof} +*/ +libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 +libcrux_sha3_portable_incremental_new_42(void) +{ + return libcrux_sha3_generic_keccak_xof_new_35_c6(); +} + +/** + Squeeze `N` x `LEN` bytes. Only `N = 1` for now. +*/ +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, 1usize, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.squeeze_85 +with types uint64_t +with const generics +- RATE= 136 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_xof_squeeze_85_c7( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice out) +{ + if (self->sponge) { + libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner); + } + size_t out_len = Eurydice_slice_len(out, uint8_t); + if (out_len > (size_t)0U) { + if (out_len <= (size_t)136U) { + libcrux_sha3_simd_portable_squeeze_13_5b(&self->inner, out, (size_t)0U, + out_len); + } else { + size_t blocks = out_len / (size_t)136U; + for (size_t i = (size_t)0U; i < blocks; i++) { + size_t i0 = i; + libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner); + libcrux_sha3_simd_portable_squeeze_13_5b( + &self->inner, out, i0 * (size_t)136U, (size_t)136U); + } + size_t remaining = out_len % (size_t)136U; + if (remaining > (size_t)0U) { + libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner); + libcrux_sha3_simd_portable_squeeze_13_5b( + &self->inner, out, blocks * (size_t)136U, remaining); + } + } + self->sponge = true; + } +} + +/** + Shake256 squeeze +*/ +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> +for libcrux_sha3::portable::incremental::Shake256Xof} +*/ +void +libcrux_sha3_portable_incremental_squeeze_42( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice out) +{ + libcrux_sha3_generic_keccak_xof_squeeze_85_c7(self, out); +} + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.fill_buffer_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 168 +*/ +size_t +libcrux_sha3_generic_keccak_xof_fill_buffer_35_c60( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice *inputs) +{ + size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); + size_t consumed = (size_t)0U; + if (self->buf_len > (size_t)0U) { + if (self->buf_len + input_len >= (size_t)168U) { + consumed = (size_t)168U - self->buf_len; + { + size_t i = (size_t)0U; + Eurydice_slice uu____0 = Eurydice_array_to_subslice_from( + (size_t)168U, self->buf[i], self->buf_len, uint8_t, size_t, + uint8_t[]); + Eurydice_slice_copy( + uu____0, + Eurydice_slice_subslice_to(inputs[i], consumed, uint8_t, size_t, + uint8_t[]), + uint8_t); + } + self->buf_len = self->buf_len + consumed; + } + } + return consumed; +} + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_full_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 168 +*/ +size_t +libcrux_sha3_generic_keccak_xof_absorb_full_35_c60( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice *inputs) +{ + size_t input_consumed = + libcrux_sha3_generic_keccak_xof_fill_buffer_35_c60(self, inputs); + if (input_consumed > (size_t)0U) { + Eurydice_slice borrowed[1U]; + { + uint8_t buf[168U] = { 0U }; + borrowed[0U] = core_array___Array_T__N___as_slice( + (size_t)168U, buf, uint8_t, Eurydice_slice); + } + { + size_t i = (size_t)0U; + borrowed[i] = + Eurydice_array_to_slice((size_t)168U, self->buf[i], uint8_t); + } + libcrux_sha3_simd_portable_load_block_a1_3a(&self->inner, borrowed, + (size_t)0U); + libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner); + self->buf_len = (size_t)0U; + } + size_t input_to_consume = + Eurydice_slice_len(inputs[0U], uint8_t) - input_consumed; + size_t num_blocks = input_to_consume / (size_t)168U; + size_t remainder = input_to_consume % (size_t)168U; + for (size_t i = (size_t)0U; i < num_blocks; i++) { + size_t i0 = i; + libcrux_sha3_simd_portable_load_block_a1_3a( + &self->inner, inputs, input_consumed + i0 * (size_t)168U); + libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner); + } + return remainder; +} + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 168 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_xof_absorb_35_c60( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice *inputs) +{ + size_t input_remainder_len = + libcrux_sha3_generic_keccak_xof_absorb_full_35_c60(self, inputs); + if (input_remainder_len > (size_t)0U) { + size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); + { + size_t i = (size_t)0U; + Eurydice_slice_copy(Eurydice_array_to_subslice3( + self->buf[i], self->buf_len, + self->buf_len + input_remainder_len, uint8_t *), + Eurydice_slice_subslice_from( + inputs[i], input_len - input_remainder_len, + uint8_t, size_t, uint8_t[]), + uint8_t); + } + self->buf_len = self->buf_len + input_remainder_len; + } +} + +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<168usize> +for libcrux_sha3::portable::incremental::Shake128Xof} +*/ +void +libcrux_sha3_portable_incremental_absorb_26( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice input) +{ + Eurydice_slice buf[1U] = { input }; + libcrux_sha3_generic_keccak_xof_absorb_35_c60(self, buf); +} + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_final_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 168 +- DELIMITER= 31 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_xof_absorb_final_35_9e0( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice *inputs) +{ + libcrux_sha3_generic_keccak_xof_absorb_35_c60(self, inputs); + Eurydice_slice borrowed[1U]; + { + uint8_t buf[168U] = { 0U }; + borrowed[0U] = core_array___Array_T__N___as_slice((size_t)168U, buf, + uint8_t, Eurydice_slice); + } + { + size_t i = (size_t)0U; + borrowed[i] = Eurydice_array_to_slice((size_t)168U, self->buf[i], uint8_t); + } + libcrux_sha3_simd_portable_load_last_a1_c6(&self->inner, borrowed, (size_t)0U, + self->buf_len); + libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner); +} + +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<168usize> +for libcrux_sha3::portable::incremental::Shake128Xof} +*/ +void +libcrux_sha3_portable_incremental_absorb_final_26( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice input) +{ + Eurydice_slice buf[1U] = { input }; + libcrux_sha3_generic_keccak_xof_absorb_final_35_9e0(self, buf); +} + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.zero_block_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 168 +*/ +void +libcrux_sha3_generic_keccak_xof_zero_block_35_c60(uint8_t ret[168U]) +{ + memset(ret, 0U, 168U * sizeof(uint8_t)); +} + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.new_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 168 +*/ +libcrux_sha3_generic_keccak_xof_KeccakXofState_97 +libcrux_sha3_generic_keccak_xof_new_35_c60(void) +{ + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 lit; + lit.inner = libcrux_sha3_generic_keccak_new_80_04(); + uint8_t repeat_expression[1U][168U]; + { + libcrux_sha3_generic_keccak_xof_zero_block_35_c60(repeat_expression[0U]); + } + memcpy(lit.buf, repeat_expression, (size_t)1U * sizeof(uint8_t[168U])); + lit.buf_len = (size_t)0U; + lit.sponge = false; + return lit; +} + +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<168usize> +for libcrux_sha3::portable::incremental::Shake128Xof} +*/ +libcrux_sha3_generic_keccak_xof_KeccakXofState_97 +libcrux_sha3_portable_incremental_new_26(void) +{ + return libcrux_sha3_generic_keccak_xof_new_35_c60(); +} + +/** + Squeeze `N` x `LEN` bytes. Only `N = 1` for now. +*/ +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, 1usize, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.squeeze_85 +with types uint64_t +with const generics +- RATE= 168 +*/ +KRML_MUSTINLINE void +libcrux_sha3_generic_keccak_xof_squeeze_85_13( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice out) +{ + if (self->sponge) { + libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner); + } + size_t out_len = Eurydice_slice_len(out, uint8_t); + if (out_len > (size_t)0U) { + if (out_len <= (size_t)168U) { + libcrux_sha3_simd_portable_squeeze_13_3a(&self->inner, out, (size_t)0U, + out_len); + } else { + size_t blocks = out_len / (size_t)168U; + for (size_t i = (size_t)0U; i < blocks; i++) { + size_t i0 = i; + libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner); + libcrux_sha3_simd_portable_squeeze_13_3a( + &self->inner, out, i0 * (size_t)168U, (size_t)168U); + } + size_t remaining = out_len % (size_t)168U; + if (remaining > (size_t)0U) { + libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner); + libcrux_sha3_simd_portable_squeeze_13_3a( + &self->inner, out, blocks * (size_t)168U, remaining); + } + } + self->sponge = true; + } +} + +/** + Shake128 squeeze +*/ +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<168usize> +for libcrux_sha3::portable::incremental::Shake128Xof} +*/ +void +libcrux_sha3_portable_incremental_squeeze_26( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice out) +{ + libcrux_sha3_generic_keccak_xof_squeeze_85_13(self, out); +} + +/** +This function found in impl {core::clone::Clone for +libcrux_sha3::portable::KeccakState} +*/ +inline libcrux_sha3_generic_keccak_KeccakState_17 +libcrux_sha3_portable_clone_fe( + libcrux_sha3_generic_keccak_KeccakState_17 *self) +{ + return self[0U]; +} + +/** +This function found in impl {core::convert::From<libcrux_sha3::Algorithm> for +u32} +*/ +uint32_t +libcrux_sha3_from_6c(libcrux_sha3_Algorithm v) +{ + switch (v) { + case libcrux_sha3_Algorithm_Sha224: { + break; + } + case libcrux_sha3_Algorithm_Sha256: { + return 2U; + } + case libcrux_sha3_Algorithm_Sha384: { + return 3U; + } + case libcrux_sha3_Algorithm_Sha512: { + return 4U; + } + default: { + KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__, + __LINE__); + KRML_HOST_EXIT(253U); + } + } + return 1U; +} + +/** +This function found in impl {core::convert::From<u32> for +libcrux_sha3::Algorithm} +*/ +libcrux_sha3_Algorithm +libcrux_sha3_from_29(uint32_t v) +{ + switch (v) { + case 1U: { + break; + } + case 2U: { + return libcrux_sha3_Algorithm_Sha256; + } + case 3U: { + return libcrux_sha3_Algorithm_Sha384; + } + case 4U: { + return libcrux_sha3_Algorithm_Sha512; + } + default: { + KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, + "panic!"); + KRML_HOST_EXIT(255U); + } + } + return libcrux_sha3_Algorithm_Sha224; +} diff --git a/security/nss/lib/freebl/verified/libcrux_sha3_portable.h b/security/nss/lib/freebl/verified/libcrux_sha3_portable.h @@ -0,0 +1,2091 @@ +/* + * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info@cryspen.com> + * + * SPDX-License-Identifier: MIT or Apache-2.0 + * + * This code was generated with the following revisions: + * Charon: 667d2fc98984ff7f3df989c2367e6c1fa4a000e7 + * Eurydice: 2381cbc416ef2ad0b561c362c500bc84f36b6785 + * Karamel: 80f5435f2fc505973c469a4afcc8d875cddd0d8b + * F*: 71d8221589d4d438af3706d89cb653cf53e18aab + * Libcrux: 68dfed5a4a9e40277f62828471c029afed1ecdcc + */ + +#ifndef libcrux_sha3_portable_H +#define libcrux_sha3_portable_H + +#include "eurydice_glue.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +#include "libcrux_sha3_internal.h" + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +uint64_t libcrux_sha3_simd_portable_zero_d2(void); + +uint64_t libcrux_sha3_simd_portable__veor5q_u64(uint64_t a, uint64_t b, + uint64_t c, uint64_t d, + uint64_t e); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +uint64_t libcrux_sha3_simd_portable_xor5_d2(uint64_t a, uint64_t b, uint64_t c, + uint64_t d, uint64_t e); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 1 +- RIGHT= 63 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_76(uint64_t x); + +uint64_t libcrux_sha3_simd_portable__vrax1q_u64(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(uint64_t a, + uint64_t b); + +uint64_t libcrux_sha3_simd_portable__vbcaxq_u64(uint64_t a, uint64_t b, + uint64_t c); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +uint64_t libcrux_sha3_simd_portable_and_not_xor_d2(uint64_t a, uint64_t b, + uint64_t c); + +uint64_t libcrux_sha3_simd_portable__veorq_n_u64(uint64_t a, uint64_t c); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +uint64_t libcrux_sha3_simd_portable_xor_constant_d2(uint64_t a, uint64_t c); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +uint64_t libcrux_sha3_simd_portable_xor_d2(uint64_t a, uint64_t b); + +extern const uint64_t libcrux_sha3_generic_keccak_constants_ROUNDCONSTANTS[24U]; + +typedef struct size_t_x2_s { + size_t fst; + size_t snd; +} size_t_x2; + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.KeccakState +with types uint64_t +with const generics +- $1size_t +*/ +typedef struct libcrux_sha3_generic_keccak_KeccakState_17_s { + uint64_t st[25U]; +} libcrux_sha3_generic_keccak_KeccakState_17; + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.new_80 +with types uint64_t +with const generics +- N= 1 +*/ +libcrux_sha3_generic_keccak_KeccakState_17 +libcrux_sha3_generic_keccak_new_80_04(void); + +/** +A monomorphic instance of libcrux_sha3.traits.get_ij +with types uint64_t +with const generics +- N= 1 +*/ +uint64_t *libcrux_sha3_traits_get_ij_04(uint64_t *arr, size_t i, size_t j); + +/** +A monomorphic instance of libcrux_sha3.traits.set_ij +with types uint64_t +with const generics +- N= 1 +*/ +void libcrux_sha3_traits_set_ij_04(uint64_t *arr, size_t i, size_t j, + uint64_t value); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block +with const generics +- RATE= 72 +*/ +void libcrux_sha3_simd_portable_load_block_f8(uint64_t *state, + Eurydice_slice blocks, + size_t start); + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1 +with const generics +- RATE= 72 +*/ +void libcrux_sha3_simd_portable_load_block_a1_f8( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start); + +/** +This function found in impl {core::ops::index::Index<(usize, usize), T> for +libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.index_c2 +with types uint64_t +with const generics +- N= 1 +*/ +uint64_t *libcrux_sha3_generic_keccak_index_c2_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self, size_t_x2 index); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.theta_80 +with types uint64_t +with const generics +- N= 1 +*/ +void libcrux_sha3_generic_keccak_theta_80_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self, uint64_t ret[5U]); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.set_80 +with types uint64_t +with const generics +- N= 1 +*/ +void libcrux_sha3_generic_keccak_set_80_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self, size_t i, size_t j, + uint64_t v); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 36 +- RIGHT= 28 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_02(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 36 +- RIGHT= 28 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_02(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 36 +- RIGHT= 28 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_02(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 3 +- RIGHT= 61 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_ac(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 3 +- RIGHT= 61 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_ac(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 3 +- RIGHT= 61 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_ac(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 41 +- RIGHT= 23 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_020(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 41 +- RIGHT= 23 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_020(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 41 +- RIGHT= 23 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_020(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 18 +- RIGHT= 46 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_a9(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 18 +- RIGHT= 46 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_a9(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 18 +- RIGHT= 46 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_a9(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 1 +- RIGHT= 63 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_76(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 1 +- RIGHT= 63 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_76(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 44 +- RIGHT= 20 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_58(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 44 +- RIGHT= 20 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_58(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 44 +- RIGHT= 20 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_58(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 10 +- RIGHT= 54 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_e0(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 10 +- RIGHT= 54 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_e0(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 10 +- RIGHT= 54 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_e0(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 45 +- RIGHT= 19 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_63(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 45 +- RIGHT= 19 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_63(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 45 +- RIGHT= 19 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_63(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 2 +- RIGHT= 62 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_6a(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 2 +- RIGHT= 62 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_6a(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 2 +- RIGHT= 62 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_6a(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 62 +- RIGHT= 2 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_ab(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 62 +- RIGHT= 2 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_ab(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 62 +- RIGHT= 2 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_ab(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 6 +- RIGHT= 58 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_5b(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 6 +- RIGHT= 58 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_5b(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 6 +- RIGHT= 58 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_5b(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 43 +- RIGHT= 21 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_6f(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 43 +- RIGHT= 21 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_6f(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 43 +- RIGHT= 21 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_6f(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 15 +- RIGHT= 49 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_62(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 15 +- RIGHT= 49 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_62(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 15 +- RIGHT= 49 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_62(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 61 +- RIGHT= 3 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_23(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 61 +- RIGHT= 3 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_23(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 61 +- RIGHT= 3 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_23(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 28 +- RIGHT= 36 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_37(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 28 +- RIGHT= 36 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_37(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 28 +- RIGHT= 36 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_37(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 55 +- RIGHT= 9 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_bb(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 55 +- RIGHT= 9 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_bb(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 55 +- RIGHT= 9 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_bb(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 25 +- RIGHT= 39 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_b9(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 25 +- RIGHT= 39 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_b9(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 25 +- RIGHT= 39 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_b9(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 21 +- RIGHT= 43 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_54(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 21 +- RIGHT= 43 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_54(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 21 +- RIGHT= 43 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_54(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 56 +- RIGHT= 8 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_4c(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 56 +- RIGHT= 8 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_4c(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 56 +- RIGHT= 8 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_4c(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 27 +- RIGHT= 37 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_ce(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 27 +- RIGHT= 37 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_ce(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 27 +- RIGHT= 37 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_ce(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 20 +- RIGHT= 44 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_77(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 20 +- RIGHT= 44 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_77(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 20 +- RIGHT= 44 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_77(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 39 +- RIGHT= 25 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_25(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 39 +- RIGHT= 25 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_25(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 39 +- RIGHT= 25 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_25(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 8 +- RIGHT= 56 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_af(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 8 +- RIGHT= 56 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_af(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 8 +- RIGHT= 56 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_af(uint64_t a, + uint64_t b); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.rotate_left +with const generics +- LEFT= 14 +- RIGHT= 50 +*/ +uint64_t libcrux_sha3_simd_portable_rotate_left_fd(uint64_t x); + +/** +A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64 +with const generics +- LEFT= 14 +- RIGHT= 50 +*/ +uint64_t libcrux_sha3_simd_portable__vxarq_u64_fd(uint64_t a, uint64_t b); + +/** +This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2 +with const generics +- LEFT= 14 +- RIGHT= 50 +*/ +uint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_fd(uint64_t a, + uint64_t b); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.rho_80 +with types uint64_t +with const generics +- N= 1 +*/ +void libcrux_sha3_generic_keccak_rho_80_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self, uint64_t t[5U]); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.pi_80 +with types uint64_t +with const generics +- N= 1 +*/ +void libcrux_sha3_generic_keccak_pi_80_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.chi_80 +with types uint64_t +with const generics +- N= 1 +*/ +void libcrux_sha3_generic_keccak_chi_80_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.iota_80 +with types uint64_t +with const generics +- N= 1 +*/ +void libcrux_sha3_generic_keccak_iota_80_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self, size_t i); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.keccakf1600_80 +with types uint64_t +with const generics +- N= 1 +*/ +void libcrux_sha3_generic_keccak_keccakf1600_80_04( + libcrux_sha3_generic_keccak_KeccakState_17 *self); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 72 +*/ +void libcrux_sha3_generic_keccak_absorb_block_80_c6( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *blocks, + size_t start); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last +with const generics +- RATE= 72 +- DELIMITER= 6 +*/ +void libcrux_sha3_simd_portable_load_last_96(uint64_t *state, + Eurydice_slice blocks, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1 +with const generics +- RATE= 72 +- DELIMITER= 6 +*/ +void libcrux_sha3_simd_portable_load_last_a1_96( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 72 +- DELIM= 6 +*/ +void libcrux_sha3_generic_keccak_absorb_final_80_9e( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *last, + size_t start, size_t len); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.store_block +with const generics +- RATE= 72 +*/ +void libcrux_sha3_simd_portable_store_block_f8(uint64_t *s, Eurydice_slice out, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::traits::Squeeze1<u64> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.squeeze_13 +with const generics +- RATE= 72 +*/ +void libcrux_sha3_simd_portable_squeeze_13_f8( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out, + size_t start, size_t len); + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1 +with const generics +- RATE= 72 +- DELIM= 6 +*/ +void libcrux_sha3_generic_keccak_portable_keccak1_96(Eurydice_slice data, + Eurydice_slice out); + +/** + A portable SHA3 512 implementation. +*/ +void libcrux_sha3_portable_sha512(Eurydice_slice digest, Eurydice_slice data); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block +with const generics +- RATE= 136 +*/ +void libcrux_sha3_simd_portable_load_block_5b(uint64_t *state, + Eurydice_slice blocks, + size_t start); + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1 +with const generics +- RATE= 136 +*/ +void libcrux_sha3_simd_portable_load_block_a1_5b( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 136 +*/ +void libcrux_sha3_generic_keccak_absorb_block_80_c60( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *blocks, + size_t start); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last +with const generics +- RATE= 136 +- DELIMITER= 6 +*/ +void libcrux_sha3_simd_portable_load_last_ad(uint64_t *state, + Eurydice_slice blocks, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1 +with const generics +- RATE= 136 +- DELIMITER= 6 +*/ +void libcrux_sha3_simd_portable_load_last_a1_ad( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 136 +- DELIM= 6 +*/ +void libcrux_sha3_generic_keccak_absorb_final_80_9e0( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *last, + size_t start, size_t len); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.store_block +with const generics +- RATE= 136 +*/ +void libcrux_sha3_simd_portable_store_block_5b(uint64_t *s, Eurydice_slice out, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::traits::Squeeze1<u64> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.squeeze_13 +with const generics +- RATE= 136 +*/ +void libcrux_sha3_simd_portable_squeeze_13_5b( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out, + size_t start, size_t len); + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1 +with const generics +- RATE= 136 +- DELIM= 6 +*/ +void libcrux_sha3_generic_keccak_portable_keccak1_ad(Eurydice_slice data, + Eurydice_slice out); + +/** + A portable SHA3 256 implementation. +*/ +void libcrux_sha3_portable_sha256(Eurydice_slice digest, Eurydice_slice data); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last +with const generics +- RATE= 136 +- DELIMITER= 31 +*/ +void libcrux_sha3_simd_portable_load_last_ad0(uint64_t *state, + Eurydice_slice blocks, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1 +with const generics +- RATE= 136 +- DELIMITER= 31 +*/ +void libcrux_sha3_simd_portable_load_last_a1_ad0( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 136 +- DELIM= 31 +*/ +void libcrux_sha3_generic_keccak_absorb_final_80_9e1( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *last, + size_t start, size_t len); + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1 +with const generics +- RATE= 136 +- DELIM= 31 +*/ +void libcrux_sha3_generic_keccak_portable_keccak1_ad0(Eurydice_slice data, + Eurydice_slice out); + +/** + A portable SHAKE256 implementation. +*/ +void libcrux_sha3_portable_shake256(Eurydice_slice digest, Eurydice_slice data); + +typedef libcrux_sha3_generic_keccak_KeccakState_17 + libcrux_sha3_portable_KeccakState; + +/** + Create a new SHAKE-128 state object. +*/ +libcrux_sha3_generic_keccak_KeccakState_17 +libcrux_sha3_portable_incremental_shake128_init(void); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block +with const generics +- RATE= 168 +*/ +void libcrux_sha3_simd_portable_load_block_3a(uint64_t *state, + Eurydice_slice blocks, + size_t start); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last +with const generics +- RATE= 168 +- DELIMITER= 31 +*/ +void libcrux_sha3_simd_portable_load_last_c6(uint64_t *state, + Eurydice_slice blocks, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1 +with const generics +- RATE= 168 +- DELIMITER= 31 +*/ +void libcrux_sha3_simd_portable_load_last_a1_c6( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 168 +- DELIM= 31 +*/ +void libcrux_sha3_generic_keccak_absorb_final_80_9e2( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *last, + size_t start, size_t len); + +/** + Absorb +*/ +void libcrux_sha3_portable_incremental_shake128_absorb_final( + libcrux_sha3_generic_keccak_KeccakState_17 *s, Eurydice_slice data0); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.store_block +with const generics +- RATE= 168 +*/ +void libcrux_sha3_simd_portable_store_block_3a(uint64_t *s, Eurydice_slice out, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::traits::Squeeze1<u64> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.squeeze_13 +with const generics +- RATE= 168 +*/ +void libcrux_sha3_simd_portable_squeeze_13_3a( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, +1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of +libcrux_sha3.generic_keccak.portable.squeeze_first_three_blocks_b4 with const +generics +- RATE= 168 +*/ +void libcrux_sha3_generic_keccak_portable_squeeze_first_three_blocks_b4_3a( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out); + +/** + Squeeze three blocks +*/ +void libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks( + libcrux_sha3_generic_keccak_KeccakState_17 *s, Eurydice_slice out0); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, +1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of +libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4 with const generics +- RATE= 168 +*/ +void libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_3a( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out, + size_t start); + +/** + Squeeze another block +*/ +void libcrux_sha3_portable_incremental_shake128_squeeze_next_block( + libcrux_sha3_generic_keccak_KeccakState_17 *s, Eurydice_slice out0); + +/** + Returns the output size of a digest. +*/ +size_t libcrux_sha3_digest_size(libcrux_sha3_Algorithm mode); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block +with const generics +- RATE= 144 +*/ +void libcrux_sha3_simd_portable_load_block_2c(uint64_t *state, + Eurydice_slice blocks, + size_t start); + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1 +with const generics +- RATE= 144 +*/ +void libcrux_sha3_simd_portable_load_block_a1_2c( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 144 +*/ +void libcrux_sha3_generic_keccak_absorb_block_80_c61( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *blocks, + size_t start); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last +with const generics +- RATE= 144 +- DELIMITER= 6 +*/ +void libcrux_sha3_simd_portable_load_last_1e(uint64_t *state, + Eurydice_slice blocks, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1 +with const generics +- RATE= 144 +- DELIMITER= 6 +*/ +void libcrux_sha3_simd_portable_load_last_a1_1e( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 144 +- DELIM= 6 +*/ +void libcrux_sha3_generic_keccak_absorb_final_80_9e3( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *last, + size_t start, size_t len); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.store_block +with const generics +- RATE= 144 +*/ +void libcrux_sha3_simd_portable_store_block_2c(uint64_t *s, Eurydice_slice out, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::traits::Squeeze1<u64> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.squeeze_13 +with const generics +- RATE= 144 +*/ +void libcrux_sha3_simd_portable_squeeze_13_2c( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out, + size_t start, size_t len); + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1 +with const generics +- RATE= 144 +- DELIM= 6 +*/ +void libcrux_sha3_generic_keccak_portable_keccak1_1e(Eurydice_slice data, + Eurydice_slice out); + +/** + A portable SHA3 224 implementation. +*/ +void libcrux_sha3_portable_sha224(Eurydice_slice digest, Eurydice_slice data); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block +with const generics +- RATE= 104 +*/ +void libcrux_sha3_simd_portable_load_block_7a(uint64_t *state, + Eurydice_slice blocks, + size_t start); + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1 +with const generics +- RATE= 104 +*/ +void libcrux_sha3_simd_portable_load_block_a1_7a( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 104 +*/ +void libcrux_sha3_generic_keccak_absorb_block_80_c62( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *blocks, + size_t start); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last +with const generics +- RATE= 104 +- DELIMITER= 6 +*/ +void libcrux_sha3_simd_portable_load_last_7c(uint64_t *state, + Eurydice_slice blocks, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1 +with const generics +- RATE= 104 +- DELIMITER= 6 +*/ +void libcrux_sha3_simd_portable_load_last_a1_7c( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 104 +- DELIM= 6 +*/ +void libcrux_sha3_generic_keccak_absorb_final_80_9e4( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *last, + size_t start, size_t len); + +/** +A monomorphic instance of libcrux_sha3.simd.portable.store_block +with const generics +- RATE= 104 +*/ +void libcrux_sha3_simd_portable_store_block_7a(uint64_t *s, Eurydice_slice out, + size_t start, size_t len); + +/** +This function found in impl {libcrux_sha3::traits::Squeeze1<u64> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.squeeze_13 +with const generics +- RATE= 104 +*/ +void libcrux_sha3_simd_portable_squeeze_13_7a( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out, + size_t start, size_t len); + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1 +with const generics +- RATE= 104 +- DELIM= 6 +*/ +void libcrux_sha3_generic_keccak_portable_keccak1_7c(Eurydice_slice data, + Eurydice_slice out); + +/** + A portable SHA3 384 implementation. +*/ +void libcrux_sha3_portable_sha384(Eurydice_slice digest, Eurydice_slice data); + +/** + SHA3 224 + + Preconditions: + - `digest.len() == 28` +*/ +void libcrux_sha3_sha224_ema(Eurydice_slice digest, Eurydice_slice payload); + +/** + SHA3 224 +*/ +void libcrux_sha3_sha224(Eurydice_slice data, uint8_t ret[28U]); + +/** + SHA3 256 +*/ +void libcrux_sha3_sha256_ema(Eurydice_slice digest, Eurydice_slice payload); + +/** + SHA3 256 +*/ +void libcrux_sha3_sha256(Eurydice_slice data, uint8_t ret[32U]); + +/** + SHA3 384 +*/ +void libcrux_sha3_sha384_ema(Eurydice_slice digest, Eurydice_slice payload); + +/** + SHA3 384 +*/ +void libcrux_sha3_sha384(Eurydice_slice data, uint8_t ret[48U]); + +/** + SHA3 512 +*/ +void libcrux_sha3_sha512_ema(Eurydice_slice digest, Eurydice_slice payload); + +/** + SHA3 512 +*/ +void libcrux_sha3_sha512(Eurydice_slice data, uint8_t ret[64U]); + +/** +This function found in impl {libcrux_sha3::traits::Absorb<1usize> for +libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1 +with const generics +- RATE= 168 +*/ +void libcrux_sha3_simd_portable_load_block_a1_3a( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *input, + size_t start); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, +N>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80 +with types uint64_t +with const generics +- N= 1 +- RATE= 168 +*/ +void libcrux_sha3_generic_keccak_absorb_block_80_c63( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice *blocks, + size_t start); + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1 +with const generics +- RATE= 168 +- DELIM= 31 +*/ +void libcrux_sha3_generic_keccak_portable_keccak1_c6(Eurydice_slice data, + Eurydice_slice out); + +/** + A portable SHAKE128 implementation. +*/ +void libcrux_sha3_portable_shake128(Eurydice_slice digest, Eurydice_slice data); + +/** + SHAKE 128 + + Writes `out.len()` bytes. +*/ +void libcrux_sha3_shake128_ema(Eurydice_slice out, Eurydice_slice data); + +/** + SHAKE 256 + + Writes `out.len()` bytes. +*/ +void libcrux_sha3_shake256_ema(Eurydice_slice out, Eurydice_slice data); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, +1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of +libcrux_sha3.generic_keccak.portable.squeeze_first_five_blocks_b4 with const +generics +- RATE= 168 +*/ +void libcrux_sha3_generic_keccak_portable_squeeze_first_five_blocks_b4_3a( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out); + +/** + Squeeze five blocks +*/ +void libcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks( + libcrux_sha3_generic_keccak_KeccakState_17 *s, Eurydice_slice out0); + +/** + Absorb some data for SHAKE-256 for the last time +*/ +void libcrux_sha3_portable_incremental_shake256_absorb_final( + libcrux_sha3_generic_keccak_KeccakState_17 *s, Eurydice_slice data); + +/** + Create a new SHAKE-256 state object. +*/ +libcrux_sha3_generic_keccak_KeccakState_17 +libcrux_sha3_portable_incremental_shake256_init(void); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, +1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of +libcrux_sha3.generic_keccak.portable.squeeze_first_block_b4 with const generics +- RATE= 136 +*/ +void libcrux_sha3_generic_keccak_portable_squeeze_first_block_b4_5b( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out); + +/** + Squeeze the first SHAKE-256 block +*/ +void libcrux_sha3_portable_incremental_shake256_squeeze_first_block( + libcrux_sha3_generic_keccak_KeccakState_17 *s, Eurydice_slice out); + +/** +This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, +1usize>[core::marker::Sized<u64>, +libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for +u64}]} +*/ +/** +A monomorphic instance of +libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4 with const generics +- RATE= 136 +*/ +void libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_5b( + libcrux_sha3_generic_keccak_KeccakState_17 *self, Eurydice_slice out, + size_t start); + +/** + Squeeze the next SHAKE-256 block +*/ +void libcrux_sha3_portable_incremental_shake256_squeeze_next_block( + libcrux_sha3_generic_keccak_KeccakState_17 *s, Eurydice_slice out); + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.KeccakXofState +with types uint64_t +with const generics +- $1size_t +- $136size_t +*/ +typedef struct libcrux_sha3_generic_keccak_xof_KeccakXofState_e2_s { + libcrux_sha3_generic_keccak_KeccakState_17 inner; + uint8_t buf[1U][136U]; + size_t buf_len; + bool sponge; +} libcrux_sha3_generic_keccak_xof_KeccakXofState_e2; + +typedef libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 + libcrux_sha3_portable_incremental_Shake256Xof; + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.fill_buffer_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 136 +*/ +size_t libcrux_sha3_generic_keccak_xof_fill_buffer_35_c6( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice *inputs); + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_full_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 136 +*/ +size_t libcrux_sha3_generic_keccak_xof_absorb_full_35_c6( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice *inputs); + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 136 +*/ +void libcrux_sha3_generic_keccak_xof_absorb_35_c6( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice *inputs); + +/** + Shake256 absorb +*/ +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> +for libcrux_sha3::portable::incremental::Shake256Xof} +*/ +void libcrux_sha3_portable_incremental_absorb_42( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice input); + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_final_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 136 +- DELIMITER= 31 +*/ +void libcrux_sha3_generic_keccak_xof_absorb_final_35_9e( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice *inputs); + +/** + Shake256 absorb final +*/ +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> +for libcrux_sha3::portable::incremental::Shake256Xof} +*/ +void libcrux_sha3_portable_incremental_absorb_final_42( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice input); + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.zero_block_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 136 +*/ +void libcrux_sha3_generic_keccak_xof_zero_block_35_c6(uint8_t ret[136U]); + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.new_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 136 +*/ +libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 +libcrux_sha3_generic_keccak_xof_new_35_c6(void); + +/** + Shake256 new state +*/ +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> +for libcrux_sha3::portable::incremental::Shake256Xof} +*/ +libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 +libcrux_sha3_portable_incremental_new_42(void); + +/** + Squeeze `N` x `LEN` bytes. Only `N = 1` for now. +*/ +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, 1usize, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.squeeze_85 +with types uint64_t +with const generics +- RATE= 136 +*/ +void libcrux_sha3_generic_keccak_xof_squeeze_85_c7( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice out); + +/** + Shake256 squeeze +*/ +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> +for libcrux_sha3::portable::incremental::Shake256Xof} +*/ +void libcrux_sha3_portable_incremental_squeeze_42( + libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self, + Eurydice_slice out); + +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.KeccakXofState +with types uint64_t +with const generics +- $1size_t +- $168size_t +*/ +typedef struct libcrux_sha3_generic_keccak_xof_KeccakXofState_97_s { + libcrux_sha3_generic_keccak_KeccakState_17 inner; + uint8_t buf[1U][168U]; + size_t buf_len; + bool sponge; +} libcrux_sha3_generic_keccak_xof_KeccakXofState_97; + +typedef libcrux_sha3_generic_keccak_xof_KeccakXofState_97 + libcrux_sha3_portable_incremental_Shake128Xof; + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.fill_buffer_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 168 +*/ +size_t libcrux_sha3_generic_keccak_xof_fill_buffer_35_c60( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice *inputs); + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_full_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 168 +*/ +size_t libcrux_sha3_generic_keccak_xof_absorb_full_35_c60( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice *inputs); + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 168 +*/ +void libcrux_sha3_generic_keccak_xof_absorb_35_c60( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice *inputs); + +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<168usize> +for libcrux_sha3::portable::incremental::Shake128Xof} +*/ +void libcrux_sha3_portable_incremental_absorb_26( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice input); + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_final_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 168 +- DELIMITER= 31 +*/ +void libcrux_sha3_generic_keccak_xof_absorb_final_35_9e0( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice *inputs); + +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<168usize> +for libcrux_sha3::portable::incremental::Shake128Xof} +*/ +void libcrux_sha3_portable_incremental_absorb_final_26( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice input); + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.zero_block_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 168 +*/ +void libcrux_sha3_generic_keccak_xof_zero_block_35_c60(uint8_t ret[168U]); + +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.new_35 +with types uint64_t +with const generics +- PARALLEL_LANES= 1 +- RATE= 168 +*/ +libcrux_sha3_generic_keccak_xof_KeccakXofState_97 +libcrux_sha3_generic_keccak_xof_new_35_c60(void); + +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<168usize> +for libcrux_sha3::portable::incremental::Shake128Xof} +*/ +libcrux_sha3_generic_keccak_xof_KeccakXofState_97 +libcrux_sha3_portable_incremental_new_26(void); + +/** + Squeeze `N` x `LEN` bytes. Only `N = 1` for now. +*/ +/** +This function found in impl +{libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, 1usize, +RATE>[TraitClause@0, TraitClause@1]} +*/ +/** +A monomorphic instance of libcrux_sha3.generic_keccak.xof.squeeze_85 +with types uint64_t +with const generics +- RATE= 168 +*/ +void libcrux_sha3_generic_keccak_xof_squeeze_85_13( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice out); + +/** + Shake128 squeeze +*/ +/** +This function found in impl {libcrux_sha3::portable::incremental::Xof<168usize> +for libcrux_sha3::portable::incremental::Shake128Xof} +*/ +void libcrux_sha3_portable_incremental_squeeze_26( + libcrux_sha3_generic_keccak_xof_KeccakXofState_97 *self, + Eurydice_slice out); + +/** +This function found in impl {core::clone::Clone for +libcrux_sha3::portable::KeccakState} +*/ +libcrux_sha3_generic_keccak_KeccakState_17 libcrux_sha3_portable_clone_fe( + libcrux_sha3_generic_keccak_KeccakState_17 *self); + +/** +This function found in impl {core::convert::From<libcrux_sha3::Algorithm> for +u32} +*/ +uint32_t libcrux_sha3_from_6c(libcrux_sha3_Algorithm v); + +/** +This function found in impl {core::convert::From<u32> for +libcrux_sha3::Algorithm} +*/ +libcrux_sha3_Algorithm libcrux_sha3_from_29(uint32_t v); + +#if defined(__cplusplus) +} +#endif + +#define libcrux_sha3_portable_H_DEFINED +#endif /* libcrux_sha3_portable_H */ diff --git a/security/nss/lib/util/kyber.h b/security/nss/lib/util/kyber.h @@ -9,13 +9,17 @@ #define KYBER768_PRIVATE_KEY_BYTES 2400U #define KYBER768_CIPHERTEXT_BYTES 1088U +#define MLKEM1024_PUBLIC_KEY_BYTES 1568U +#define MLKEM1024_PRIVATE_KEY_BYTES 3168U +#define MLKEM1024_CIPHERTEXT_BYTES 1568U + #define KYBER_SHARED_SECRET_BYTES 32U #define KYBER_KEYPAIR_COIN_BYTES 64U #define KYBER_ENC_COIN_BYTES 32U -#define MAX_ML_KEM_CIPHER_LENGTH KYBER768_CIPHERTEXT_BYTES -#define MAX_ML_KEM_PRIVATE_KEY_LENGTH KYBER768_PRIVATE_KEY_BYTES -#define MAX_ML_KEM_PUBLIC_KEY_LENGTH KYBER768_PUBLIC_KEY_BYTES +#define MAX_ML_KEM_CIPHER_LENGTH MLKEM1024_CIPHERTEXT_BYTES +#define MAX_ML_KEM_PRIVATE_KEY_LENGTH MLKEM1024_PRIVATE_KEY_BYTES +#define MAX_ML_KEM_PUBLIC_KEY_LENGTH MLKEM1024_PUBLIC_KEY_BYTES typedef enum { params_kyber_invalid, @@ -43,6 +47,19 @@ typedef enum { * the use of a seed in `Kyber_Encapsulate` for testing. */ params_ml_kem768_test_mode, + + /* + * The ML-KEM parameters specified in FIPS 203. + * https://csrc.nist.gov/pubs/fips/203/final + */ + params_ml_kem1024, + + /* + * Identical to params_ml_kem1024 except that this parameter set allows + * the use of a seed in `Kyber_Encapsulate` for testing. + */ + params_ml_kem1024_test_mode, + } KyberParams; #endif /* KYBER_UTIL_H */ diff --git a/security/nss/moz.yaml b/security/nss/moz.yaml @@ -9,8 +9,8 @@ origin: description: nss url: https://hg-edge.mozilla.org/projects/nss - release: 18dcc6d128e0b6f2acc3276e81669ec5870b713e (2025-10-21T09:55:25Z). - revision: 18dcc6d128e0b6f2acc3276e81669ec5870b713e + release: 415413a2f83f1652586df85083d2219172eec15c (2025-10-15T00:41:30Z). + revision: 415413a2f83f1652586df85083d2219172eec15c license: MPL-2.0 license-file: COPYING diff --git a/security/nss/taskcluster/nss_taskgraph/transforms/platforms.py b/security/nss/taskcluster/nss_taskgraph/transforms/platforms.py @@ -26,7 +26,7 @@ def add_env_vars(config, tasks): if task["attributes"]["build_platform"].startswith("mac"): env.update({"NSS_TASKCLUSTER_MAC": "1"}) - if config.params["try_options"].get("allow_nspr_patch"): + if config.params["try_options"].get("nspr_patch"): env.update({"ALLOW_NSPR_PATCH": "1"}) yield task