From 87f4392f52679c40f454f2862ca3d67a0d2d619b Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 9 May 2023 05:36:45 +0000 Subject: [PATCH] import opencryptoki-3.19.0-2.el9 --- .gitignore | 2 +- .opencryptoki.metadata | 2 +- ...-Unify-key-pair-generation-functions.patch | 809 +++ ...rt-DSA-DH-parameter-generation-as-be.patch | 43 + ...-empty-CKA_PUBLIC_KEY_INFO-to-EP11-h.patch | 34 + ...M_DILITHIUM-can-also-be-used-for-key.patch | 29 + ...DH-parameter-generation-mechanisms-f.patch | 63 + ...ck-chain-code-for-CKM_IBM_BTC_DERIVE.patch | 68 + ...PUBLIC_KEY_INFO-with-CKM_IBM_BTC_DER.patch | 70 + ...PUBLIC_KEY_INFO-when-importing-priva.patch | 347 ++ ...y-leak-introduced-with-recent-commit.patch | 31 + ...ult-when-dilithium-version-is-not-sp.patch | 34 + ...emove-dead-code-and-unused-variables.patch | 118 + ...pdate-EP11-host-library-header-files.patch | 2331 +++++++ ...-Support-EP11-host-library-version-4.patch | 137 + .../0014-EP11-Add-new-control-points.patch | 53 + .../0015-EP11-Default-unknown-CPs-to-ON.patch | 76 + ...es-for-Dilithium-round-2-and-3-varia.patch | 76 + .../0017-COMMON-Add-defines-for-Kyber.patch | 103 + ...MMON-Add-post-quantum-algorithm-OIDs.patch | 249 + ...-key-BER-encoding-decoding-allow-dif.patch | 604 ++ ...CKA_VALUE-holding-SPKI-PKCS-8-of-key.patch | 815 +++ ...w-to-select-Dilithium-variant-via-mo.patch | 994 +++ ...rted-PQC-variants-and-restrict-usage.patch | 308 + ...-strength-and-signature-size-depends.patch | 218 + ...24-TESTCASES-Test-Dilithium-variants.patch | 5332 +++++++++++++++++ ...P11-Add-Kyber-key-type-and-mechanism.patch | 1435 +++++ ...-for-generating-and-importing-Kyber-.patch | 479 ++ ...-for-encrypt-decrypt-and-KEM-operati.patch | 339 ++ ...S-Check-for-Kyber-KEM-KDFs-and-count.patch | 259 + ...ESTCASES-Add-tests-for-CKM_IBM_KYBER.patch | 2783 +++++++++ ...upport-additional-Dilithium-variants.patch | 156 + ...k-Add-support-for-IBM-Kyber-key-type.patch | 551 ++ ...-p11sak-testcase-to-generate-IBM-Kyb.patch | 111 + ...PUBLIC_KEY_INFO-with-CKM_IBM_BTC_DER.patch | 356 ++ ...4-EP11-Fix-setting-unknown-CPs-to-ON.patch | 46 + .../opencryptoki-3.18.0-fix-json-output.patch | 47 - SOURCES/opencryptoki-3.18.0-memory_leak.patch | 33 - ....18.0-returning_CKR_BUFFER_TOO_SMALL.patch | 32 - .../opencryptoki-3.19.0-fix-memory-leak.patch | 51 + SPECS/opencryptoki.spec | 56 +- 41 files changed, 19558 insertions(+), 122 deletions(-) create mode 100644 SOURCES/0001-EP11-Unify-key-pair-generation-functions.patch create mode 100644 SOURCES/0002-EP11-Do-not-report-DSA-DH-parameter-generation-as-be.patch create mode 100644 SOURCES/0003-EP11-Do-not-pass-empty-CKA_PUBLIC_KEY_INFO-to-EP11-h.patch create mode 100644 SOURCES/0004-Mechtable-CKM_IBM_DILITHIUM-can-also-be-used-for-key.patch create mode 100644 SOURCES/0005-EP11-Remove-DSA-DH-parameter-generation-mechanisms-f.patch create mode 100644 SOURCES/0006-EP11-Pass-back-chain-code-for-CKM_IBM_BTC_DERIVE.patch create mode 100644 SOURCES/0007-EP11-Supply-CKA_PUBLIC_KEY_INFO-with-CKM_IBM_BTC_DER.patch create mode 100644 SOURCES/0008-EP11-Supply-CKA_PUBLIC_KEY_INFO-when-importing-priva.patch create mode 100644 SOURCES/0009-EP11-Fix-memory-leak-introduced-with-recent-commit.patch create mode 100644 SOURCES/0010-p11sak-Fix-segfault-when-dilithium-version-is-not-sp.patch create mode 100644 SOURCES/0011-EP11-remove-dead-code-and-unused-variables.patch create mode 100644 SOURCES/0012-EP11-Update-EP11-host-library-header-files.patch create mode 100644 SOURCES/0013-EP11-Support-EP11-host-library-version-4.patch create mode 100644 SOURCES/0014-EP11-Add-new-control-points.patch create mode 100644 SOURCES/0015-EP11-Default-unknown-CPs-to-ON.patch create mode 100644 SOURCES/0016-COMMON-Add-defines-for-Dilithium-round-2-and-3-varia.patch create mode 100644 SOURCES/0017-COMMON-Add-defines-for-Kyber.patch create mode 100644 SOURCES/0018-COMMON-Add-post-quantum-algorithm-OIDs.patch create mode 100644 SOURCES/0019-COMMON-Dilithium-key-BER-encoding-decoding-allow-dif.patch create mode 100644 SOURCES/0020-COMMON-EP11-Add-CKA_VALUE-holding-SPKI-PKCS-8-of-key.patch create mode 100644 SOURCES/0021-COMMON-EP11-Allow-to-select-Dilithium-variant-via-mo.patch create mode 100644 SOURCES/0022-EP11-Query-supported-PQC-variants-and-restrict-usage.patch create mode 100644 SOURCES/0023-POLICY-Dilithium-strength-and-signature-size-depends.patch create mode 100644 SOURCES/0024-TESTCASES-Test-Dilithium-variants.patch create mode 100644 SOURCES/0025-COMMON-EP11-Add-Kyber-key-type-and-mechanism.patch create mode 100644 SOURCES/0026-EP11-Add-support-for-generating-and-importing-Kyber-.patch create mode 100644 SOURCES/0027-EP11-Add-support-for-encrypt-decrypt-and-KEM-operati.patch create mode 100644 SOURCES/0028-POLICY-STATISTICS-Check-for-Kyber-KEM-KDFs-and-count.patch create mode 100644 SOURCES/0029-TESTCASES-Add-tests-for-CKM_IBM_KYBER.patch create mode 100644 SOURCES/0030-p11sak-Support-additional-Dilithium-variants.patch create mode 100644 SOURCES/0031-p11sak-Add-support-for-IBM-Kyber-key-type.patch create mode 100644 SOURCES/0032-testcase-Enhance-p11sak-testcase-to-generate-IBM-Kyb.patch create mode 100644 SOURCES/0033-EP11-Supply-CKA_PUBLIC_KEY_INFO-with-CKM_IBM_BTC_DER.patch create mode 100644 SOURCES/0034-EP11-Fix-setting-unknown-CPs-to-ON.patch delete mode 100644 SOURCES/opencryptoki-3.18.0-fix-json-output.patch delete mode 100644 SOURCES/opencryptoki-3.18.0-memory_leak.patch delete mode 100644 SOURCES/opencryptoki-3.18.0-returning_CKR_BUFFER_TOO_SMALL.patch create mode 100644 SOURCES/opencryptoki-3.19.0-fix-memory-leak.patch diff --git a/.gitignore b/.gitignore index e06708c..cda75d0 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/opencryptoki-3.18.0.tar.gz +SOURCES/opencryptoki-3.19.0.tar.gz diff --git a/.opencryptoki.metadata b/.opencryptoki.metadata index 7ff8bfe..3db97e4 100644 --- a/.opencryptoki.metadata +++ b/.opencryptoki.metadata @@ -1 +1 @@ -257eb4d5458c52bf7c1634fea155bf217d561bd4 SOURCES/opencryptoki-3.18.0.tar.gz +39acf63d03978b2827340394fe6f732a6f0c0526 SOURCES/opencryptoki-3.19.0.tar.gz diff --git a/SOURCES/0001-EP11-Unify-key-pair-generation-functions.patch b/SOURCES/0001-EP11-Unify-key-pair-generation-functions.patch new file mode 100644 index 0000000..20ffbc7 --- /dev/null +++ b/SOURCES/0001-EP11-Unify-key-pair-generation-functions.patch @@ -0,0 +1,809 @@ +From 27088567f4375578e39c5b75b4ceae9dff231962 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Tue, 11 Oct 2022 13:46:08 +0200 +Subject: [PATCH 01/34] EP11: Unify key-pair generation functions + +Unify the DSA and DH key-pair generation functions with those for +RSA, EC and Dilithium. Make sure that the attribute handling is done +in the same sequence for all those functions. + +Also remove obsolete parameters for all the key-pair generation functions. + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 494 ++++++++++++++----------------------- + 1 file changed, 187 insertions(+), 307 deletions(-) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index a6a33719..5d7c5607 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -5374,15 +5374,10 @@ error: + + + +-static CK_RV dh_generate_keypair(STDLL_TokData_t * tokdata, +- SESSION * sess, ++static CK_RV dh_generate_keypair(STDLL_TokData_t *tokdata, ++ SESSION *sess, + CK_MECHANISM_PTR pMechanism, +- TEMPLATE * publ_tmpl, TEMPLATE * priv_tmpl, +- CK_ATTRIBUTE_PTR pPublicKeyTemplate, +- CK_ULONG ulPublicKeyAttributeCount, +- CK_ATTRIBUTE_PTR pPrivateKeyTemplate, +- CK_ULONG ulPrivateKeyAttributeCount, +- CK_SESSION_HANDLE h) ++ TEMPLATE *publ_tmpl, TEMPLATE *priv_tmpl) + { + CK_RV rc; + CK_BYTE publblob[MAX_BLOBSIZE]; +@@ -5399,9 +5394,6 @@ static CK_RV dh_generate_keypair(STDLL_TokData_t * tokdata, + CK_ULONG dh_ulPublicKeyAttributeCount = 0; + CK_ATTRIBUTE_PTR dh_pPrivateKeyTemplate = NULL; + CK_ULONG dh_ulPrivateKeyAttributeCount = 0; +- size_t p_len = 0, g_len = 0; +- int new_public_attr; +- CK_ULONG i; + CK_ULONG data_len; + CK_ULONG field_len; + CK_BYTE *data; +@@ -5421,149 +5413,122 @@ static CK_RV dh_generate_keypair(STDLL_TokData_t * tokdata, + unsigned char *pg; + } dh_pgs; + +- UNUSED(h); +- + memset(&dh_pgs, 0, sizeof(dh_pgs)); + memset(publblob, 0, sizeof(publblob)); + memset(privblob, 0, sizeof(privblob)); + +- /* card does not want CKA_PRIME/CKA_BASE in template but in dh_pgs */ +- pPublicKeyTemplate_new = +- (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE) * +- ulPublicKeyAttributeCount); +- if (!pPublicKeyTemplate_new) { +- TRACE_ERROR("%s Memory allocation failed\n", __func__); +- return CKR_HOST_MEMORY; +- } +- memset(pPublicKeyTemplate_new, 0, +- sizeof(CK_ATTRIBUTE) * ulPublicKeyAttributeCount); +- +- for (i = 0, new_public_attr = 0; i < ulPublicKeyAttributeCount; i++) { +- /* filter out CKA_PRIME/CKA_BASE, +- * but remember where they can be found +- */ +- switch (pPublicKeyTemplate[i].type) { +- case CKA_PRIME: +- prime_attr = &(pPublicKeyTemplate[i]); +- p_len = pPublicKeyTemplate[i].ulValueLen; +- break; +- case CKA_BASE: +- base_attr = &(pPublicKeyTemplate[i]); +- g_len = pPublicKeyTemplate[i].ulValueLen; +- break; +- default: +- /* copy all other attributes */ +- memcpy(&pPublicKeyTemplate_new[new_public_attr], +- &(pPublicKeyTemplate[i]), sizeof(CK_ATTRIBUTE)); +- new_public_attr++; +- } ++ rc = build_ep11_attrs(tokdata, publ_tmpl, &dh_pPublicKeyTemplate, ++ &dh_ulPublicKeyAttributeCount, ++ CKK_DH, CKO_PUBLIC_KEY, -1, pMechanism); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s build_ep11_attrs failed with rc=0x%lx\n", __func__, rc); ++ goto dh_generate_keypair_end; + } + +- if (prime_attr == NULL || base_attr == NULL) { +- TRACE_ERROR("%s Incomplete template prime_attr=%p base_attr=%p\n", +- __func__, (void *)prime_attr, (void *)base_attr); +- rc = CKR_TEMPLATE_INCOMPLETE; ++ rc = build_ep11_attrs(tokdata, priv_tmpl, &dh_pPrivateKeyTemplate, ++ &dh_ulPrivateKeyAttributeCount, ++ CKK_DH, CKO_PRIVATE_KEY, -1, pMechanism); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s build_ep11_attrs failed with rc=0x%lx\n", __func__, rc); + goto dh_generate_keypair_end; + } + +- /* copy CKA_PRIME/CKA_BASE to private template */ +- rc = build_attribute(CKA_PRIME, prime_attr->pValue, +- prime_attr->ulValueLen, &attr); ++ rc = check_key_attributes(tokdata, CKK_DH, CKO_PUBLIC_KEY, ++ dh_pPublicKeyTemplate, ++ dh_ulPublicKeyAttributeCount, ++ &new_publ_attrs, &new_publ_attrs_len, -1); + if (rc != CKR_OK) { +- TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s DH check public key attributes failed with " ++ "rc=0x%lx\n", __func__, rc); + goto dh_generate_keypair_end; + } +- rc = template_update_attribute(priv_tmpl, attr); ++ ++ rc = check_key_attributes(tokdata, CKK_DH, CKO_PRIVATE_KEY, ++ dh_pPrivateKeyTemplate, ++ dh_ulPrivateKeyAttributeCount, ++ &new_priv_attrs, &new_priv_attrs_len, -1); + if (rc != CKR_OK) { +- TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", +- __func__, rc); +- free(attr); ++ TRACE_ERROR("%s DH check private key attributes failed with " ++ "rc=0x%lx\n", __func__, rc); + goto dh_generate_keypair_end; + } +- rc = build_attribute(CKA_BASE, base_attr->pValue, +- base_attr->ulValueLen, &attr); ++ ++ /* card does not want CKA_PRIME/CKA_BASE in template but in dh_pgs */ ++ rc = template_attribute_get_non_empty(publ_tmpl, CKA_PRIME, ++ &prime_attr); + if (rc != CKR_OK) { +- TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s DH No CKA_PRIME attribute found\n", __func__); + goto dh_generate_keypair_end; + } +- rc = template_update_attribute(priv_tmpl, attr); ++ ++ rc = template_attribute_get_non_empty(publ_tmpl, CKA_BASE, ++ &base_attr); + if (rc != CKR_OK) { +- TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", +- __func__, rc); +- free(attr); ++ TRACE_ERROR("%s DH No CKA_BASE attribute found\n", __func__); + goto dh_generate_keypair_end; + } + +- /* copy CKA_PRIME/CKA_BASE values */ +- dh_pgs.pg = malloc(p_len * 2); ++ dh_pgs.pg = malloc(prime_attr->ulValueLen * 2); + if (!dh_pgs.pg) { + TRACE_ERROR("%s Memory allocation failed\n", __func__); + rc = CKR_HOST_MEMORY; + goto dh_generate_keypair_end; + } +- memset(dh_pgs.pg, 0, p_len * 2); +- memcpy(dh_pgs.pg, prime_attr->pValue, p_len); /* copy CKA_PRIME value */ ++ ++ memset(dh_pgs.pg, 0, prime_attr->ulValueLen * 2); ++ /* copy CKA_PRIME value */ ++ memcpy(dh_pgs.pg, prime_attr->pValue, prime_attr->ulValueLen); + /* copy CKA_BASE value, it must have leading zeros + * if it is shorter than CKA_PRIME + */ +- memcpy(dh_pgs.pg + p_len + (p_len - g_len), base_attr->pValue, g_len); +- dh_pgs.pg_bytes = p_len * 2; ++ memcpy(dh_pgs.pg + prime_attr->ulValueLen + ++ (prime_attr->ulValueLen - base_attr->ulValueLen), ++ base_attr->pValue, base_attr->ulValueLen); ++ dh_pgs.pg_bytes = prime_attr->ulValueLen * 2; + + #ifdef DEBUG + TRACE_DEBUG("%s P:\n", __func__); +- TRACE_DEBUG_DUMP(" ", &dh_pgs.pg[0], p_len); ++ TRACE_DEBUG_DUMP(" ", &dh_pgs.pg[0], prime_attr->ulValueLen); + TRACE_DEBUG("%s G:\n", __func__); +- TRACE_DEBUG_DUMP(" ", &dh_pgs.pg[p_len], p_len); ++ TRACE_DEBUG_DUMP(" ", &dh_pgs.pg[prime_attr->ulValueLen], ++ prime_attr->ulValueLen); + #endif + +- /* add special attribute, do not add it to ock's pPublicKeyTemplate */ +- CK_ATTRIBUTE pgs[] = { {CKA_IBM_STRUCT_PARAMS, (CK_VOID_PTR) dh_pgs.pg, +- dh_pgs.pg_bytes} +- }; +- memcpy(&(pPublicKeyTemplate_new[new_public_attr]), +- &(pgs[0]), sizeof(CK_ATTRIBUTE)); +- +- rc = check_key_attributes(tokdata, CKK_DH, CKO_PUBLIC_KEY, +- pPublicKeyTemplate_new, new_public_attr + 1, +- &dh_pPublicKeyTemplate, +- &dh_ulPublicKeyAttributeCount, -1); ++ rc = add_to_attribute_array(&new_publ_attrs, &new_publ_attrs_len, ++ CKA_IBM_STRUCT_PARAMS, dh_pgs.pg, ++ dh_pgs.pg_bytes); + if (rc != CKR_OK) { +- TRACE_ERROR("%s DH check public key attributes failed with " +- "rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s add_to_attribute_array failed with rc=0x%lx\n", ++ __func__, rc); + goto dh_generate_keypair_end; + } + +- rc = check_key_attributes(tokdata, CKK_DH, CKO_PRIVATE_KEY, +- pPrivateKeyTemplate, ulPrivateKeyAttributeCount, +- &dh_pPrivateKeyTemplate, +- &dh_ulPrivateKeyAttributeCount, -1); ++ /* copy CKA_PRIME/CKA_BASE to private template */ ++ rc = build_attribute(CKA_PRIME, prime_attr->pValue, ++ prime_attr->ulValueLen, &attr); + if (rc != CKR_OK) { +- TRACE_ERROR("%s DH check private key attributes failed with " +- "rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, rc); + goto dh_generate_keypair_end; + } +- +- rc = build_ep11_attrs(tokdata, publ_tmpl, +- &new_publ_attrs, &new_publ_attrs_len, +- CKK_DH, CKO_PUBLIC_KEY, -1, pMechanism); ++ rc = template_update_attribute(priv_tmpl, attr); + if (rc != CKR_OK) { +- TRACE_ERROR("%s build_ep11_attrs failed with rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", ++ __func__, rc); ++ free(attr); + goto dh_generate_keypair_end; + } + +- rc = add_to_attribute_array(&new_publ_attrs, &new_publ_attrs_len, +- CKA_IBM_STRUCT_PARAMS, (CK_VOID_PTR) dh_pgs.pg, +- dh_pgs.pg_bytes); ++ rc = build_attribute(CKA_BASE, base_attr->pValue, ++ base_attr->ulValueLen, &attr); + if (rc != CKR_OK) { +- TRACE_ERROR("%s add_to_attribute_array failed with rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, rc); + goto dh_generate_keypair_end; + } +- +- rc = build_ep11_attrs(tokdata, priv_tmpl, +- &new_priv_attrs, &new_priv_attrs_len, +- CKK_DH, CKO_PRIVATE_KEY, -1, pMechanism); ++ rc = template_update_attribute(priv_tmpl, attr); + if (rc != CKR_OK) { +- TRACE_ERROR("%s build_ep11_attrs failed with rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", ++ __func__, rc); ++ free(attr); + goto dh_generate_keypair_end; + } + +@@ -5573,10 +5538,10 @@ static CK_RV dh_generate_keypair(STDLL_TokData_t * tokdata, + new_priv_attrs, new_priv_attrs_len); + + ep11_get_pin_blob(ep11_session, +- (ep11_is_session_object +- (pPublicKeyTemplate, ulPublicKeyAttributeCount) +- || ep11_is_session_object(pPrivateKeyTemplate, +- ulPrivateKeyAttributeCount)), ++ (ep11_is_session_object(new_publ_attrs, ++ new_publ_attrs_len) || ++ ep11_is_session_object(new_priv_attrs, ++ new_priv_attrs_len)), + &ep11_pin_blob, &ep11_pin_blob_len); + + RETRY_START(rc, tokdata) +@@ -5595,7 +5560,7 @@ static CK_RV dh_generate_keypair(STDLL_TokData_t * tokdata, + } + + TRACE_INFO("%s rc=0x%lx plen=%zd publblobsize=0x%zx privblobsize=0x%zx\n", +- __func__, rc, p_len, publblobsize, privblobsize); ++ __func__, rc, prime_attr->ulValueLen, publblobsize, privblobsize); + + if (check_expected_mkvp(tokdata, privblob, privblobsize) != CKR_OK) { + TRACE_ERROR("%s\n", ock_err(ERR_DEVICE_ERROR)); +@@ -5700,15 +5665,10 @@ dh_generate_keypair_end: + return rc; + } + +-static CK_RV dsa_generate_keypair(STDLL_TokData_t * tokdata, +- SESSION * sess, ++static CK_RV dsa_generate_keypair(STDLL_TokData_t *tokdata, ++ SESSION *sess, + CK_MECHANISM_PTR pMechanism, +- TEMPLATE * publ_tmpl, TEMPLATE * priv_tmpl, +- CK_ATTRIBUTE_PTR pPublicKeyTemplate, +- CK_ULONG ulPublicKeyAttributeCount, +- CK_ATTRIBUTE_PTR pPrivateKeyTemplate, +- CK_ULONG ulPrivateKeyAttributeCount, +- CK_SESSION_HANDLE h) ++ TEMPLATE *publ_tmpl, TEMPLATE *priv_tmpl) + { + CK_RV rc; + CK_BYTE publblob[MAX_BLOBSIZE]; +@@ -5721,9 +5681,6 @@ static CK_RV dsa_generate_keypair(STDLL_TokData_t * tokdata, + CK_ATTRIBUTE *opaque_attr = NULL; + CK_ATTRIBUTE *value_attr = NULL; + CK_ATTRIBUTE *attr = NULL; +- size_t p_len = 0, q_len = 0, g_len = 0; +- int new_public_attr; +- CK_ULONG i; + CK_ATTRIBUTE *pPublicKeyTemplate_new = NULL; + CK_BYTE *key; + CK_BYTE *data, *oid, *parm; +@@ -5737,8 +5694,6 @@ static CK_RV dsa_generate_keypair(STDLL_TokData_t * tokdata, + ep11_session_t *ep11_session = (ep11_session_t *) sess->private_data; + CK_ATTRIBUTE *new_publ_attrs = NULL, *new_priv_attrs = NULL; + CK_ULONG new_publ_attrs_len = 0, new_priv_attrs_len = 0; +- CK_ATTRIBUTE *new_publ_attrs2 = NULL, *new_priv_attrs2 = NULL; +- CK_ULONG new_publ_attrs2_len = 0, new_priv_attrs2_len = 0; + + /* ep11 accepts CKA_PRIME,CKA_SUBPRIME,CKA_BASE only in this format */ + struct { +@@ -5746,95 +5701,68 @@ static CK_RV dsa_generate_keypair(STDLL_TokData_t * tokdata, + unsigned char *pqg; + } dsa_pqgs; + +- UNUSED(h); +- + memset(&dsa_pqgs, 0, sizeof(dsa_pqgs)); + memset(publblob, 0, sizeof(publblob)); + memset(privblob, 0, sizeof(privblob)); + +- /* card does not want CKA_PRIME/CKA_BASE/CKA_SUBPRIME +- * in template but in dsa_pqgs +- */ +- pPublicKeyTemplate_new = +- (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE) * +- ulPublicKeyAttributeCount); +- if (!pPublicKeyTemplate_new) { +- TRACE_ERROR("%s Memory allocation failed\n", __func__); +- return CKR_HOST_MEMORY; +- } +- memset(pPublicKeyTemplate_new, 0, +- sizeof(CK_ATTRIBUTE) * ulPublicKeyAttributeCount); +- +- for (i = 0, new_public_attr = 0; i < ulPublicKeyAttributeCount; i++) { +- switch (pPublicKeyTemplate[i].type) { +- case CKA_PRIME: +- prime_attr = &(pPublicKeyTemplate[i]); +- p_len = pPublicKeyTemplate[i].ulValueLen; +- break; +- case CKA_SUBPRIME: +- sub_prime_attr = &(pPublicKeyTemplate[i]); +- q_len = pPublicKeyTemplate[i].ulValueLen; +- break; +- case CKA_BASE: +- base_attr = &(pPublicKeyTemplate[i]); +- g_len = pPublicKeyTemplate[i].ulValueLen; +- break; +- default: +- /* copy all other attributes */ +- memcpy(&pPublicKeyTemplate_new[new_public_attr], +- &(pPublicKeyTemplate[i]), sizeof(CK_ATTRIBUTE)); +- new_public_attr++; +- } +- } +- +- if (prime_attr == NULL || sub_prime_attr == NULL || base_attr == NULL) { +- rc = CKR_TEMPLATE_INCOMPLETE; ++ rc = build_ep11_attrs(tokdata, publ_tmpl, &dsa_pPublicKeyTemplate, ++ &dsa_ulPublicKeyAttributeCount, ++ CKK_DSA, CKO_PUBLIC_KEY, -1, pMechanism); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s build_ep11_attrs failed with rc=0x%lx\n", __func__, rc); + goto dsa_generate_keypair_end; + } + +- /* copy CKA_PRIME/CKA_BASE/CKA_SUBPRIME to private template */ +- rc = build_attribute(CKA_PRIME, prime_attr->pValue, +- prime_attr->ulValueLen, &attr); ++ rc = build_ep11_attrs(tokdata, priv_tmpl, &dsa_pPrivateKeyTemplate, ++ &dsa_ulPrivateKeyAttributeCount, ++ CKK_DSA, CKO_PRIVATE_KEY, -1, pMechanism); + if (rc != CKR_OK) { +- TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s build_ep11_attrs failed with rc=0x%lx\n", __func__, rc); + goto dsa_generate_keypair_end; + } + +- rc = template_update_attribute(priv_tmpl, attr); ++ rc = check_key_attributes(tokdata, CKK_DSA, CKO_PUBLIC_KEY, ++ dsa_pPublicKeyTemplate, ++ dsa_ulPublicKeyAttributeCount, ++ &new_publ_attrs, &new_publ_attrs_len, -1); + if (rc != CKR_OK) { +- TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", +- __func__, rc); +- free(attr); ++ TRACE_ERROR("%s DSA check public key attributes failed with " ++ "rc=0x%lx\n", __func__, rc); + goto dsa_generate_keypair_end; + } + +- rc = build_attribute(CKA_BASE, base_attr->pValue, +- base_attr->ulValueLen, &attr); ++ rc = check_key_attributes(tokdata, CKK_DSA, CKO_PRIVATE_KEY, ++ dsa_pPrivateKeyTemplate, ++ dsa_ulPrivateKeyAttributeCount, ++ &new_priv_attrs, &new_priv_attrs_len, -1); + if (rc != CKR_OK) { +- TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s DSA check private key attributes failed with " ++ "rc=0x%lx\n", __func__, rc); + goto dsa_generate_keypair_end; + } + +- rc = template_update_attribute(priv_tmpl, attr); ++ /* ++ * card does not want CKA_PRIME/CKA_BASE/CKA_SUBPRIME in template but in ++ * dsa_pqgs ++ */ ++ rc = template_attribute_get_non_empty(publ_tmpl, CKA_PRIME, ++ &prime_attr); + if (rc != CKR_OK) { +- TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", +- __func__, rc); +- free(attr); ++ TRACE_ERROR("%s DSA No CKA_PRIME attribute found\n", __func__); + goto dsa_generate_keypair_end; + } + +- rc = build_attribute(CKA_SUBPRIME, sub_prime_attr->pValue, +- sub_prime_attr->ulValueLen, &attr); ++ rc = template_attribute_get_non_empty(publ_tmpl, CKA_SUBPRIME, ++ &sub_prime_attr); + if (rc != CKR_OK) { +- TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s DSA No CKA_SUBPRIME attribute found\n", __func__); + goto dsa_generate_keypair_end; + } + +- rc = template_update_attribute(priv_tmpl, attr); ++ rc = template_attribute_get_non_empty(publ_tmpl, CKA_BASE, ++ &base_attr); + if (rc != CKR_OK) { +- TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", +- __func__, rc); +- free(attr); ++ TRACE_ERROR("%s DSA No CKA_BASE attribute found\n", __func__); + goto dsa_generate_keypair_end; + } + +@@ -5842,95 +5770,102 @@ static CK_RV dsa_generate_keypair(STDLL_TokData_t * tokdata, + * then they are extented by leading zeros till they have + * the size of CKA_PRIME + */ +- dsa_pqgs.pqg = malloc(p_len * 3); ++ dsa_pqgs.pqg = malloc(prime_attr->ulValueLen * 3); + if (!dsa_pqgs.pqg) { + TRACE_ERROR("%s Memory allocation failed\n", __func__); + rc = CKR_HOST_MEMORY; + goto dsa_generate_keypair_end; + } +- memset(dsa_pqgs.pqg, 0, p_len * 3); +- memcpy(dsa_pqgs.pqg, prime_attr->pValue, p_len); +- memcpy(dsa_pqgs.pqg + p_len + (p_len - q_len), +- sub_prime_attr->pValue, q_len); +- memcpy(dsa_pqgs.pqg + 2 * p_len + (p_len - g_len), +- base_attr->pValue, g_len); +- dsa_pqgs.pqg_bytes = p_len * 3; ++ ++ memset(dsa_pqgs.pqg, 0, prime_attr->ulValueLen * 3); ++ memcpy(dsa_pqgs.pqg, prime_attr->pValue, prime_attr->ulValueLen); ++ memcpy(dsa_pqgs.pqg + prime_attr->ulValueLen + ++ (prime_attr->ulValueLen - sub_prime_attr->ulValueLen), ++ sub_prime_attr->pValue, sub_prime_attr->ulValueLen); ++ memcpy(dsa_pqgs.pqg + 2 * prime_attr->ulValueLen + ++ (prime_attr->ulValueLen - base_attr->ulValueLen), ++ base_attr->pValue, base_attr->ulValueLen); ++ dsa_pqgs.pqg_bytes = prime_attr->ulValueLen * 3; + + #ifdef DEBUG + TRACE_DEBUG("%s P:\n", __func__); +- TRACE_DEBUG_DUMP(" ", &dsa_pqgs.pqg[0], p_len); ++ TRACE_DEBUG_DUMP(" ", &dsa_pqgs.pqg[0], prime_attr->ulValueLen); + TRACE_DEBUG("%s Q:\n", __func__); +- TRACE_DEBUG_DUMP(" ", &dsa_pqgs.pqg[p_len], p_len); ++ TRACE_DEBUG_DUMP(" ", &dsa_pqgs.pqg[prime_attr->ulValueLen], ++ prime_attr->ulValueLen); + TRACE_DEBUG("%s G:\n", __func__); +- TRACE_DEBUG_DUMP(" ", &dsa_pqgs.pqg[2 * p_len], p_len); ++ TRACE_DEBUG_DUMP(" ", &dsa_pqgs.pqg[2 * prime_attr->ulValueLen], ++ prime_attr->ulValueLen); + #endif + +- CK_ATTRIBUTE pqgs[] = { {CKA_IBM_STRUCT_PARAMS, +- (CK_VOID_PTR) dsa_pqgs.pqg, dsa_pqgs.pqg_bytes} +- }; +- +- /* add special attribute, do not add it to ock's pPublicKeyTemplate */ +- memcpy(&(pPublicKeyTemplate_new[new_public_attr]), +- &(pqgs[0]), sizeof(CK_ATTRIBUTE)); +- +- rc = build_ep11_attrs(tokdata, publ_tmpl, +- &new_publ_attrs, &new_publ_attrs_len, +- CKK_DSA, CKO_PUBLIC_KEY, -1, pMechanism); ++ rc = add_to_attribute_array(&new_publ_attrs, &new_publ_attrs_len, ++ CKA_IBM_STRUCT_PARAMS, dsa_pqgs.pqg, ++ dsa_pqgs.pqg_bytes); + if (rc != CKR_OK) { +- TRACE_ERROR("%s build_ep11_attrs failed with rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s add_to_attribute_array failed with rc=0x%lx\n", ++ __func__, rc); + goto dsa_generate_keypair_end; + } + +- rc = check_key_attributes(tokdata, CKK_DSA, CKO_PUBLIC_KEY, +- new_publ_attrs, new_publ_attrs_len, +- &new_publ_attrs2, &new_publ_attrs2_len, -1); ++ /* copy CKA_PRIME/CKA_BASE/CKA_SUBPRIME to private template */ ++ rc = build_attribute(CKA_PRIME, prime_attr->pValue, ++ prime_attr->ulValueLen, &attr); + if (rc != CKR_OK) { +- TRACE_ERROR("%s DSA check public key attributes failed with " +- "rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, rc); + goto dsa_generate_keypair_end; + } +- +- rc = add_to_attribute_array(&new_publ_attrs2, &new_publ_attrs2_len, +- CKA_IBM_STRUCT_PARAMS, (CK_VOID_PTR) dsa_pqgs.pqg, +- dsa_pqgs.pqg_bytes); ++ rc = template_update_attribute(priv_tmpl, attr); + if (rc != CKR_OK) { +- TRACE_ERROR("%s add_to_attribute_array failed with rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", ++ __func__, rc); ++ free(attr); + goto dsa_generate_keypair_end; + } + +- rc = build_ep11_attrs(tokdata, priv_tmpl, +- &new_priv_attrs, &new_priv_attrs_len, +- CKK_DSA, CKO_PRIVATE_KEY, -1, pMechanism); ++ rc = build_attribute(CKA_SUBPRIME, sub_prime_attr->pValue, ++ sub_prime_attr->ulValueLen, &attr); + if (rc != CKR_OK) { +- TRACE_ERROR("%s build_ep11_attrs failed with rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, rc); ++ goto dsa_generate_keypair_end; ++ } ++ rc = template_update_attribute(priv_tmpl, attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", ++ __func__, rc); ++ free(attr); + goto dsa_generate_keypair_end; + } + +- rc = check_key_attributes(tokdata, CKK_DSA, CKO_PRIVATE_KEY, +- new_priv_attrs, new_priv_attrs_len, +- &new_priv_attrs2, &new_priv_attrs2_len, -1); ++ rc = build_attribute(CKA_BASE, base_attr->pValue, ++ base_attr->ulValueLen, &attr); + if (rc != CKR_OK) { +- TRACE_ERROR("%s DSA check private key attributes failed with " +- "rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, rc); ++ goto dsa_generate_keypair_end; ++ } ++ rc = template_update_attribute(priv_tmpl, attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", ++ __func__, rc); ++ free(attr); + goto dsa_generate_keypair_end; + } + + trace_attributes(__func__, "DSA public key attributes:", +- new_publ_attrs2, new_publ_attrs2_len); ++ new_publ_attrs, new_publ_attrs_len); + trace_attributes(__func__, "DSA private key attributes:", +- new_priv_attrs2, new_priv_attrs2_len); ++ new_priv_attrs, new_priv_attrs_len); + + ep11_get_pin_blob(ep11_session, +- (ep11_is_session_object +- (pPublicKeyTemplate, ulPublicKeyAttributeCount) +- || ep11_is_session_object(pPrivateKeyTemplate, +- ulPrivateKeyAttributeCount)), ++ (ep11_is_session_object(new_publ_attrs, ++ new_publ_attrs_len) || ++ ep11_is_session_object(new_priv_attrs, ++ new_priv_attrs_len)), + &ep11_pin_blob, &ep11_pin_blob_len); + + RETRY_START(rc, tokdata) + rc = dll_m_GenerateKeyPair(pMechanism, +- new_publ_attrs2, new_publ_attrs2_len, +- new_priv_attrs2, new_priv_attrs2_len, ++ new_publ_attrs, new_publ_attrs_len, ++ new_priv_attrs, new_priv_attrs_len, + ep11_pin_blob, ep11_pin_blob_len, privblob, + &privblobsize, publblob, &publblobsize, + target_info->target); +@@ -5943,10 +5878,8 @@ static CK_RV dsa_generate_keypair(STDLL_TokData_t * tokdata, + goto dsa_generate_keypair_end; + } + +- TRACE_INFO("%s rc=0x%lx p_len=%zd publblobsize=0x%zx privblobsize=0x%zx " +- "npattr=0x%x\n", +- __func__, rc, p_len, publblobsize, privblobsize, +- new_public_attr + 1); ++ TRACE_INFO("%s rc=0x%lx plen=%zd publblobsize=0x%zx privblobsize=0x%zx\n", ++ __func__, rc, prime_attr->ulValueLen, publblobsize, privblobsize); + + if (check_expected_mkvp(tokdata, privblob, privblobsize) != CKR_OK) { + TRACE_ERROR("%s\n", ock_err(ERR_DEVICE_ERROR)); +@@ -6030,22 +5963,13 @@ dsa_generate_keypair_end: + free_attribute_array(new_publ_attrs, new_publ_attrs_len); + if (new_priv_attrs) + free_attribute_array(new_priv_attrs, new_priv_attrs_len); +- if (new_publ_attrs2) +- free_attribute_array(new_publ_attrs2, new_publ_attrs2_len); +- if (new_priv_attrs) +- free_attribute_array(new_priv_attrs2, new_priv_attrs2_len); + return rc; + } + +-static CK_RV rsa_ec_generate_keypair(STDLL_TokData_t * tokdata, +- SESSION * sess, ++static CK_RV rsa_ec_generate_keypair(STDLL_TokData_t *tokdata, ++ SESSION *sess, + CK_MECHANISM_PTR pMechanism, +- TEMPLATE * publ_tmpl, TEMPLATE * priv_tmpl, +- CK_ATTRIBUTE_PTR pPublicKeyTemplate, +- CK_ULONG ulPublicKeyAttributeCount, +- CK_ATTRIBUTE_PTR pPrivateKeyTemplate, +- CK_ULONG ulPrivateKeyAttributeCount, +- CK_SESSION_HANDLE h) ++ TEMPLATE *publ_tmpl, TEMPLATE *priv_tmpl) + { + CK_RV rc; + CK_ATTRIBUTE *attr = NULL; +@@ -6054,7 +5978,6 @@ static CK_RV rsa_ec_generate_keypair(STDLL_TokData_t * tokdata, + size_t privkey_blob_len = sizeof(privkey_blob); + unsigned char spki[MAX_BLOBSIZE]; + size_t spki_len = sizeof(spki); +- CK_ULONG i; + CK_ULONG bit_str_len; + CK_BYTE *key; + CK_BYTE *data, *oid, *parm; +@@ -6074,8 +5997,6 @@ static CK_RV rsa_ec_generate_keypair(STDLL_TokData_t * tokdata, + CK_ULONG new_publ_attrs2_len = 0, new_priv_attrs2_len = 0; + const struct _ec *curve = NULL; + +- UNUSED(h); +- + if (pMechanism->mechanism == CKM_EC_KEY_PAIR_GEN) { + ktype = CKK_EC; + } else if ((pMechanism->mechanism == CKM_RSA_PKCS_KEY_PAIR_GEN) || +@@ -6132,24 +6053,16 @@ static CK_RV rsa_ec_generate_keypair(STDLL_TokData_t * tokdata, + goto error; + } + +- /* debug */ +- for (i = 0; i < new_ulPrivateKeyAttributeCount; i++) { +- TRACE_INFO("%s gen priv attr type=0x%lx valuelen=0x%lx attrcnt=0x%lx\n", +- __func__, new_pPrivateKeyTemplate[i].type, +- new_pPrivateKeyTemplate[i].ulValueLen, +- new_ulPrivateKeyAttributeCount); +- } +- + trace_attributes(__func__, "RSA/EC public key attributes:", + new_publ_attrs2, new_publ_attrs2_len); + trace_attributes(__func__, "RSA/EC private key attributes:", + new_priv_attrs2, new_priv_attrs2_len); + + ep11_get_pin_blob(ep11_session, +- (ep11_is_session_object +- (pPublicKeyTemplate, ulPublicKeyAttributeCount) +- || ep11_is_session_object(pPrivateKeyTemplate, +- ulPrivateKeyAttributeCount)), ++ (ep11_is_session_object(new_publ_attrs2, ++ new_publ_attrs2_len) || ++ ep11_is_session_object(new_priv_attrs2, ++ new_priv_attrs2_len)), + &ep11_pin_blob, &ep11_pin_blob_len); + + RETRY_START(rc, tokdata) +@@ -6406,15 +6319,10 @@ error: + return rc; + } + +-static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t * tokdata, +- SESSION * sess, ++static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, ++ SESSION *sess, + CK_MECHANISM_PTR pMechanism, +- TEMPLATE * publ_tmpl, TEMPLATE * priv_tmpl, +- CK_ATTRIBUTE_PTR pPublicKeyTemplate, +- CK_ULONG ulPublicKeyAttributeCount, +- CK_ATTRIBUTE_PTR pPrivateKeyTemplate, +- CK_ULONG ulPrivateKeyAttributeCount, +- CK_SESSION_HANDLE h) ++ TEMPLATE *publ_tmpl, TEMPLATE *priv_tmpl) + { + CK_RV rc; + CK_ATTRIBUTE *attr = NULL; +@@ -6422,7 +6330,6 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t * tokdata, + size_t privkey_blob_len = sizeof(privkey_blob); + unsigned char spki[MAX_BLOBSIZE]; + size_t spki_len = sizeof(spki); +- CK_ULONG i; + CK_ULONG bit_str_len; + CK_BYTE *key; + CK_BYTE *data, *oid, *parm; +@@ -6444,8 +6351,6 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t * tokdata, + const CK_BYTE dilithium_oid[] = { 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, + 0x02, 0x82, 0x0b, 0x01, 0x06, 0x05 }; + +- UNUSED(h); +- + if (pMechanism->mechanism != CKM_IBM_DILITHIUM) { + TRACE_ERROR("Invalid mechanism provided for %s\n ", __func__); + return CKR_MECHANISM_INVALID; +@@ -6503,24 +6408,16 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t * tokdata, + goto error; + } + +- /* debug */ +- for (i = 0; i < new_ulPrivateKeyAttributeCount; i++) { +- TRACE_INFO("%s gen priv attr type=0x%lx valuelen=0x%lx attrcnt=0x%lx\n", +- __func__, new_pPrivateKeyTemplate[i].type, +- new_pPrivateKeyTemplate[i].ulValueLen, +- new_ulPrivateKeyAttributeCount); +- } +- + trace_attributes(__func__, "Dilithium public key attributes:", + new_publ_attrs2, new_publ_attrs2_len); + trace_attributes(__func__, "Dilithium private key attributes:", + new_priv_attrs2, new_priv_attrs2_len); + + ep11_get_pin_blob(ep11_session, +- (ep11_is_session_object +- (pPublicKeyTemplate, ulPublicKeyAttributeCount) +- || ep11_is_session_object(pPrivateKeyTemplate, +- ulPrivateKeyAttributeCount)), ++ (ep11_is_session_object(new_publ_attrs2, ++ new_publ_attrs2_len) || ++ ep11_is_session_object(new_priv_attrs2, ++ new_priv_attrs2_len)), + &ep11_pin_blob, &ep11_pin_blob_len); + + RETRY_START(rc, tokdata) +@@ -6763,42 +6660,25 @@ CK_RV ep11tok_generate_key_pair(STDLL_TokData_t * tokdata, SESSION * sess, + case CKM_DH_PKCS_KEY_PAIR_GEN: + rc = dh_generate_keypair(tokdata, sess, pMechanism, + public_key_obj->template, +- private_key_obj->template, +- pPublicKeyTemplate, +- ulPublicKeyAttributeCount, +- pPrivateKeyTemplate, +- ulPrivateKeyAttributeCount, sess->handle); ++ private_key_obj->template); + break; + case CKM_EC_KEY_PAIR_GEN: /* takes same parameters as RSA */ + case CKM_RSA_PKCS_KEY_PAIR_GEN: + case CKM_RSA_X9_31_KEY_PAIR_GEN: + rc = rsa_ec_generate_keypair(tokdata, sess, pMechanism, + public_key_obj->template, +- private_key_obj->template, +- pPublicKeyTemplate, +- ulPublicKeyAttributeCount, +- pPrivateKeyTemplate, +- ulPrivateKeyAttributeCount, sess->handle); ++ private_key_obj->template); + break; + case CKM_DSA_PARAMETER_GEN: + case CKM_DSA_KEY_PAIR_GEN: + rc = dsa_generate_keypair(tokdata, sess, pMechanism, + public_key_obj->template, +- private_key_obj->template, +- pPublicKeyTemplate, +- ulPublicKeyAttributeCount, +- pPrivateKeyTemplate, +- ulPrivateKeyAttributeCount, sess->handle); ++ private_key_obj->template); + break; + case CKM_IBM_DILITHIUM: + rc = ibm_dilithium_generate_keypair(tokdata, sess, pMechanism, + public_key_obj->template, +- private_key_obj->template, +- pPublicKeyTemplate, +- ulPublicKeyAttributeCount, +- pPrivateKeyTemplate, +- ulPrivateKeyAttributeCount, +- sess->handle); ++ private_key_obj->template); + break; + default: + TRACE_ERROR("%s invalid mech %s\n", __func__, +-- +2.16.2.windows.1 + diff --git a/SOURCES/0002-EP11-Do-not-report-DSA-DH-parameter-generation-as-be.patch b/SOURCES/0002-EP11-Do-not-report-DSA-DH-parameter-generation-as-be.patch new file mode 100644 index 0000000..a8804be --- /dev/null +++ b/SOURCES/0002-EP11-Do-not-report-DSA-DH-parameter-generation-as-be.patch @@ -0,0 +1,43 @@ +From 8310482e5c46d6a15894c4d3ebf8156264175282 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Wed, 12 Oct 2022 09:00:51 +0200 +Subject: [PATCH 02/34] EP11: Do not report DSA/DH parameter generation as + being supported + +Mechanisms CKM_DSA_PARAMETER_GEN and CKM_DH_PKCS_PARAMETER_GEN were +reported to be supported in the mechanism list of the EP11 token, but +they never were really supported in the code. + +Remove them from the mechanism list. + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index 5d7c5607..737b373b 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -6669,7 +6669,6 @@ CK_RV ep11tok_generate_key_pair(STDLL_TokData_t * tokdata, SESSION * sess, + public_key_obj->template, + private_key_obj->template); + break; +- case CKM_DSA_PARAMETER_GEN: + case CKM_DSA_KEY_PAIR_GEN: + rc = dsa_generate_keypair(tokdata, sess, pMechanism, + public_key_obj->template, +@@ -9042,10 +9041,8 @@ static const CK_MECHANISM_TYPE ep11_supported_mech_list[] = { + CKM_DES3_KEY_GEN, + CKM_DH_PKCS_DERIVE, + CKM_DH_PKCS_KEY_PAIR_GEN, +- CKM_DH_PKCS_PARAMETER_GEN, + CKM_DSA, + CKM_DSA_KEY_PAIR_GEN, +- CKM_DSA_PARAMETER_GEN, + CKM_DSA_SHA1, + CKM_EC_KEY_PAIR_GEN, + CKM_ECDH1_DERIVE, +-- +2.16.2.windows.1 + diff --git a/SOURCES/0003-EP11-Do-not-pass-empty-CKA_PUBLIC_KEY_INFO-to-EP11-h.patch b/SOURCES/0003-EP11-Do-not-pass-empty-CKA_PUBLIC_KEY_INFO-to-EP11-h.patch new file mode 100644 index 0000000..54f1961 --- /dev/null +++ b/SOURCES/0003-EP11-Do-not-pass-empty-CKA_PUBLIC_KEY_INFO-to-EP11-h.patch @@ -0,0 +1,34 @@ +From 993274f7b968caa908bdc3bf560ece55e40c875a Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Fri, 21 Oct 2022 10:03:40 +0200 +Subject: [PATCH 03/34] EP11: Do not pass empty CKA_PUBLIC_KEY_INFO to EP11 + host library + +Newer EP11 host library versions do not like empty (zero length) +attributes of type CKA_PUBLIC_KEY_INFO. Filter them out when building +the attribute list passed to the EP11 host library + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index 737b373b..d3688c56 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -1968,6 +1968,11 @@ static CK_RV build_ep11_attrs(STDLL_TokData_t * tokdata, TEMPLATE *template, + case CKA_NEVER_EXTRACTABLE: + case CKA_LOCAL: + break; ++ /* EP11 does not like empty (zero length) attributes of that types */ ++ case CKA_PUBLIC_KEY_INFO: ++ if (attr->ulValueLen == 0) ++ break; ++ /* Fallthrough */ + default: + if (attr->ulValueLen > 0 && attr->pValue == NULL) + return CKR_ATTRIBUTE_VALUE_INVALID; +-- +2.16.2.windows.1 + diff --git a/SOURCES/0004-Mechtable-CKM_IBM_DILITHIUM-can-also-be-used-for-key.patch b/SOURCES/0004-Mechtable-CKM_IBM_DILITHIUM-can-also-be-used-for-key.patch new file mode 100644 index 0000000..87d2e93 --- /dev/null +++ b/SOURCES/0004-Mechtable-CKM_IBM_DILITHIUM-can-also-be-used-for-key.patch @@ -0,0 +1,29 @@ +From 3b8f82b2aaf34fa67901aa27f85ae7973d5553d0 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Fri, 21 Oct 2022 10:10:36 +0200 +Subject: [PATCH 04/34] Mechtable: CKM_IBM_DILITHIUM can also be used for key + generation + +Currently this is not used anywhere, but let's correct it anyway. + +Signed-off-by: Ingo Franzki +--- + usr/lib/api/mechtable.inc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/usr/lib/api/mechtable.inc b/usr/lib/api/mechtable.inc +index 4a28192c..f74e08b7 100644 +--- a/usr/lib/api/mechtable.inc ++++ b/usr/lib/api/mechtable.inc +@@ -78,7 +78,7 @@ const struct mechrow mechtable_rows[] = + { "CKM_IBM_ATTRIBUTEBOUND_WRAP", CKM_IBM_ATTRIBUTEBOUND_WRAP, 0, MC_INFORMATION_UNAVAILABLE, MCF_WRAPUNWRAP | MCF_NEEDSPARAM }, + { "CKM_IBM_BTC_DERIVE", CKM_IBM_BTC_DERIVE, 0, MC_INFORMATION_UNAVAILABLE, MCF_DERIVE | MCF_NEEDSPARAM }, + { "CKM_IBM_CMAC", CKM_IBM_CMAC, 0, MC_KEY_DEPENDENT, MCF_SIGNVERIFY }, +- { "CKM_IBM_DILITHIUM", CKM_IBM_DILITHIUM, 0, 3366, MCF_SIGNVERIFY },/* Size unknown */ ++ { "CKM_IBM_DILITHIUM", CKM_IBM_DILITHIUM, 0, 3366, MCF_KEYGEN | MCF_SIGNVERIFY }, + { "CKM_IBM_ECDSA_OTHER", CKM_IBM_ECDSA_OTHER, 0, MC_KEY_DEPENDENT, MCF_SIGNVERIFY | MCF_NEEDSPARAM }, + { "CKM_IBM_EC_X25519", CKM_IBM_EC_X25519, 0, MC_INFORMATION_UNAVAILABLE, MCF_DERIVE }, + { "CKM_IBM_EC_X448", CKM_IBM_EC_X448, 0, MC_INFORMATION_UNAVAILABLE, MCF_DERIVE }, +-- +2.16.2.windows.1 + diff --git a/SOURCES/0005-EP11-Remove-DSA-DH-parameter-generation-mechanisms-f.patch b/SOURCES/0005-EP11-Remove-DSA-DH-parameter-generation-mechanisms-f.patch new file mode 100644 index 0000000..3a7baa0 --- /dev/null +++ b/SOURCES/0005-EP11-Remove-DSA-DH-parameter-generation-mechanisms-f.patch @@ -0,0 +1,63 @@ +From 7b4b5ef263aaa202667f318f4dcb09b01d3f025a Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Mon, 24 Oct 2022 12:58:16 +0200 +Subject: [PATCH 05/34] EP11: Remove DSA/DH parameter generation mechanisms + from CP filter + +Commit 836f2a25b928127c3bfb8f94a57cc16aa76a84c3 removed the DSA/DH +parameter generation mechanisms CKM_DSA_PARAMETER_GEN and +CKM_DH_PKCS_PARAMETER_GEN from the EP11 token code. Also remove +them from the CP filter config file and from a comment in the code. + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 3 +-- + usr/lib/ep11_stdll/ep11cpfilter.conf | 8 ++++---- + 2 files changed, 5 insertions(+), 6 deletions(-) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index d3688c56..432790f1 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -1720,8 +1720,7 @@ static CK_RV check_key_attributes(STDLL_TokData_t * tokdata, + check_types = &check_types_pub[0]; + attr_cnt = sizeof(check_types_pub) / sizeof(CK_ULONG); + } +- /* do nothing for CKM_DH_PKCS_KEY_PAIR_GEN +- and CKM_DH_PKCS_PARAMETER_GEN and CKK_IBM_PQC_DILITHIUM */ ++ /* do nothing for CKM_DH_PKCS_KEY_PAIR_GEN and CKK_IBM_PQC_DILITHIUM */ + break; + case CKO_PRIVATE_KEY: + if ((kt == CKK_EC) || (kt == CKK_ECDSA) || (kt == CKK_DSA)) { +diff --git a/usr/lib/ep11_stdll/ep11cpfilter.conf b/usr/lib/ep11_stdll/ep11cpfilter.conf +index 6d979053..0d3a6b3f 100644 +--- a/usr/lib/ep11_stdll/ep11cpfilter.conf ++++ b/usr/lib/ep11_stdll/ep11cpfilter.conf +@@ -48,20 +48,20 @@ XCP_CPB_UNWRAP_SYMM: CKM_AES_CBC, CKM_AES_CBC_PAD, CKM_DES3_CBC, CKM_DES3_CBC_PA + # generate asymmetric keypairs + XCP_CPB_KEYGEN_ASYMM: CKM_RSA_PKCS_KEY_PAIR_GEN, CKM_RSA_X9_31_KEY_PAIR_GEN, CKM_EC_KEY_PAIR_GEN, CKM_DSA_KEY_PAIR_GEN, CKM_DH_PKCS_KEY_PAIR_GEN + +-# generate or derive symmetric keys, including DSA parameters +-XCP_CPB_KEYGEN_SYMM: CKM_AES_KEY_GEN, CKM_DES2_KEY_GEN, CKM_DES3_KEY_GEN, CKM_DSA_PARAMETER_GEN, CKM_DH_PKCS_PARAMETER_GEN, CKM_PBE_SHA1_DES3_EDE_CBC, CKM_DES_KEY_GEN, CKM_GENERIC_SECRET_KEY_GEN ++# generate or derive symmetric keys ++XCP_CPB_KEYGEN_SYMM: CKM_AES_KEY_GEN, CKM_DES2_KEY_GEN, CKM_DES3_KEY_GEN, CKM_PBE_SHA1_DES3_EDE_CBC, CKM_DES_KEY_GEN, CKM_GENERIC_SECRET_KEY_GEN + + # RSA private-key or key-encrypt use + XCP_CPB_ALG_RSA: CKM_RSA_PKCS, CKM_RSA_PKCS_KEY_PAIR_GEN, CKM_RSA_X9_31_KEY_PAIR_GEN, CKM_RSA_PKCS_PSS, CKM_SHA1_RSA_X9_31, CKM_SHA1_RSA_PKCS, CKM_SHA1_RSA_PKCS_PSS, CKM_SHA256_RSA_PKCS, CKM_SHA256_RSA_PKCS_PSS, CKM_SHA224_RSA_PKCS, CKM_SHA224_RSA_PKCS_PSS, CKM_SHA384_RSA_PKCS, CKM_SHA384_RSA_PKCS_PSS, CKM_SHA512_RSA_PKCS, CKM_SHA512_RSA_PKCS_PSS, CKM_RSA_X9_31 + + # DSA private-key use +-XCP_CPB_ALG_DSA: CKM_DSA_PARAMETER_GEN, CKM_DSA_KEY_PAIR_GEN, CKM_DSA, CKM_DSA_SHA1 ++XCP_CPB_ALG_DSA: CKM_DSA_KEY_PAIR_GEN, CKM_DSA, CKM_DSA_SHA1 + + # EC private-key use + XCP_CPB_ALG_EC: CKM_EC_KEY_PAIR_GEN, CKM_ECDH1_DERIVE, CKM_ECDSA, CKM_ECDSA_SHA224, CKM_ECDSA_SHA256, CKM_ECDSA_SHA384, CKM_ECDSA_SHA512 + + # Diffie-Hellman use (private keys) +-XCP_CPB_ALG_DH: CKM_ECDH1_DERIVE, CKM_DH_PKCS_PARAMETER_GEN, CKM_DH_PKCS_KEY_PAIR_GEN, CKM_DH_PKCS_DERIVE ++XCP_CPB_ALG_DH: CKM_ECDH1_DERIVE, CKM_DH_PKCS_KEY_PAIR_GEN, CKM_DH_PKCS_DERIVE + + # allow key derivation (symmetric+EC/DH) + XCP_CPB_DERIVE: CKM_SHA1_KEY_DERIVATION, CKM_SHA256_KEY_DERIVATION, CKM_SHA384_KEY_DERIVATION, CKM_SHA512_KEY_DERIVATION, CKM_SHA224_KEY_DERIVATION, CKM_ECDH1_DERIVE, CKM_DH_PKCS_DERIVE +-- +2.16.2.windows.1 + diff --git a/SOURCES/0006-EP11-Pass-back-chain-code-for-CKM_IBM_BTC_DERIVE.patch b/SOURCES/0006-EP11-Pass-back-chain-code-for-CKM_IBM_BTC_DERIVE.patch new file mode 100644 index 0000000..3cbb5e2 --- /dev/null +++ b/SOURCES/0006-EP11-Pass-back-chain-code-for-CKM_IBM_BTC_DERIVE.patch @@ -0,0 +1,68 @@ +From c6d6be8b7c1c1fa346af420daada56e28da5af6d Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Fri, 4 Nov 2022 09:44:35 +0100 +Subject: [PATCH 06/34] EP11: Pass back chain code for CKM_IBM_BTC_DERIVE + +When deriving a key using CKM_IBM_BTC_DERIVE, the resulting chain code +must be passed back in the buffer supplied by the caller in the +mechanism parameter (field pChainCode in CK_IBM_BTC_DERIVE_PARAMS). +This chain code can then be used to derive further keys from the just +derived key. + +Note that field ulChainCodeLen must be zero for any BTC master key +derivation, but pChainCode must still point to a buffer of 32 bytes +(CK_IBM_BTC_CHAINCODE_LENGTH) to receive the resulting chain code. + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index 432790f1..a56b5b82 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -4988,6 +4988,7 @@ CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, + CK_ULONG used_firmware_API_version; + CK_MECHANISM_PTR mech_orig = mech; + CK_ATTRIBUTE *ec_params; ++ CK_IBM_BTC_DERIVE_PARAMS *btc_params = NULL; + + memset(newblob, 0, sizeof(newblob)); + +@@ -5106,6 +5107,18 @@ CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, + } + } + ++ if (mech->mechanism == CKM_IBM_BTC_DERIVE) { ++ if (mech->ulParameterLen != sizeof(CK_IBM_BTC_DERIVE_PARAMS) || ++ mech->pParameter == NULL) { ++ TRACE_ERROR("%s Param NULL or len for %s wrong: %lu\n", ++ __func__, ep11_get_ckm(tokdata, mech->mechanism), ++ mech->ulParameterLen); ++ return CKR_MECHANISM_PARAM_INVALID; ++ } ++ ++ btc_params = (CK_IBM_BTC_DERIVE_PARAMS *)mech->pParameter; ++ } ++ + rc = h_opaque_2_blob(tokdata, hBaseKey, &keyblob, &keyblobsize, + &base_key_obj, READ_LOCK); + if (rc != CKR_OK) { +@@ -5300,6 +5313,13 @@ CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, + } + opaque_attr = NULL; + ++ if (mech->mechanism == CKM_IBM_BTC_DERIVE && ++ btc_params != NULL && btc_params->pChainCode != NULL && ++ cslen >= CK_IBM_BTC_CHAINCODE_LENGTH) { ++ memcpy(btc_params->pChainCode, csum, CK_IBM_BTC_CHAINCODE_LENGTH); ++ btc_params->ulChainCodeLen = CK_IBM_BTC_CHAINCODE_LENGTH; ++ } ++ + if (mech->mechanism == CKM_IBM_BTC_DERIVE && class == CKO_PUBLIC_KEY) { + /* Derived blob is an SPKI, extract public EC key attributes */ + rc = ecdsa_priv_unwrap_get_data(key_obj->template, +-- +2.16.2.windows.1 + diff --git a/SOURCES/0007-EP11-Supply-CKA_PUBLIC_KEY_INFO-with-CKM_IBM_BTC_DER.patch b/SOURCES/0007-EP11-Supply-CKA_PUBLIC_KEY_INFO-with-CKM_IBM_BTC_DER.patch new file mode 100644 index 0000000..f35d967 --- /dev/null +++ b/SOURCES/0007-EP11-Supply-CKA_PUBLIC_KEY_INFO-with-CKM_IBM_BTC_DER.patch @@ -0,0 +1,70 @@ +From 63a42a9398f5ec7b2b139810ee7b5beb7ad1abc3 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Fri, 4 Nov 2022 09:31:29 +0100 +Subject: [PATCH 07/34] EP11: Supply CKA_PUBLIC_KEY_INFO with + CKM_IBM_BTC_DERIVE of public key + +When deriving a public EC key with the CKM_IBM_BTC_DERIVE mechanism, +also supply the SPKI in the CKA_PUBLIC_KEY_INFO attribute. + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 28 ++++++++++++++++++++++++++++ + 1 file changed, 28 insertions(+) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index a56b5b82..886692c4 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -4989,6 +4989,9 @@ CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, + CK_MECHANISM_PTR mech_orig = mech; + CK_ATTRIBUTE *ec_params; + CK_IBM_BTC_DERIVE_PARAMS *btc_params = NULL; ++ CK_BYTE *spki = NULL; ++ CK_ULONG spki_length = 0; ++ CK_ATTRIBUTE *spki_attr = NULL; + + memset(newblob, 0, sizeof(newblob)); + +@@ -5329,6 +5332,29 @@ CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, + __func__, rc); + goto error; + } ++ ++ /* Extract the SPKI and add CKA_PUBLIC_KEY_INFO to key */ ++ rc = publ_key_get_spki(key_obj->template, ktype, FALSE, ++ &spki, &spki_length); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("publ_key_get_spki failed\n"); ++ goto error; ++ } ++ ++ rc = build_attribute(CKA_PUBLIC_KEY_INFO, spki, spki_length, &spki_attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", ++ __func__, rc); ++ goto error; ++ } ++ ++ rc = template_update_attribute(key_obj->template, spki_attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s template_update_attribute failed with " ++ "rc=0x%lx\n", __func__, rc); ++ goto error; ++ } ++ spki_attr = NULL; + } + + if (class == CKO_SECRET_KEY || class == CKO_PRIVATE_KEY) { +@@ -5381,6 +5407,8 @@ error: + free(opaque_attr); + if (chk_attr != NULL) + free(chk_attr); ++ if (spki_attr != NULL) ++ free(spki_attr); + if (new_attrs) + free_attribute_array(new_attrs, new_attrs_len); + if (new_attrs1) +-- +2.16.2.windows.1 + diff --git a/SOURCES/0008-EP11-Supply-CKA_PUBLIC_KEY_INFO-when-importing-priva.patch b/SOURCES/0008-EP11-Supply-CKA_PUBLIC_KEY_INFO-when-importing-priva.patch new file mode 100644 index 0000000..2b8233f --- /dev/null +++ b/SOURCES/0008-EP11-Supply-CKA_PUBLIC_KEY_INFO-when-importing-priva.patch @@ -0,0 +1,347 @@ +From b8bc3e183b43e9aeee8a8f23c8e48fffb6eedc35 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Fri, 4 Nov 2022 10:51:08 +0100 +Subject: [PATCH 08/34] EP11: Supply CKA_PUBLIC_KEY_INFO when importing private + keys + +When importing private keys, the SPKI of the corresponding public key +is returned in parameters csum/cslen of the m_UnwrapKey() EP11 host +library call. Supply this SPKI as CKA_PUBLIC_KEY_INFO to the object. + +For public key import, the common code already builds the SPKI from +the clear public key attributes of the imported public key. + +Signed-off-by: Ingo Franzki +--- + usr/lib/common/obj_mgr.c | 5 ++ + usr/lib/ep11_stdll/ep11_specific.c | 113 +++++++++++++++++++++++++------------ + 2 files changed, 83 insertions(+), 35 deletions(-) + +diff --git a/usr/lib/common/obj_mgr.c b/usr/lib/common/obj_mgr.c +index 8e61cbd4..347ec3f3 100644 +--- a/usr/lib/common/obj_mgr.c ++++ b/usr/lib/common/obj_mgr.c +@@ -123,6 +123,11 @@ CK_RV object_mgr_add(STDLL_TokData_t *tokdata, + switch(class) { + case CKO_PUBLIC_KEY: + case CKO_PRIVATE_KEY: ++ /* Skip if there is already a non-empty CKA_PUBLIC_KEY_INFO */ ++ if (template_attribute_get_non_empty(o->template, CKA_PUBLIC_KEY_INFO, ++ &spki_attr) == CKR_OK) ++ break; ++ + rc = template_attribute_get_ulong(o->template, CKA_KEY_TYPE, &keytype); + if (rc != CKR_OK) { + TRACE_ERROR("Could not find CKA_KEY_TYPE for the key object.\n"); +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index 886692c4..3b14a557 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -2745,9 +2745,10 @@ static int get_curve_type_from_template(TEMPLATE *tmpl) + * SPKIs for public imported RSA keys. + * Similar to rawkey_2_blob, but keys must follow a standard BER encoding. + */ +-static CK_RV import_RSA_key(STDLL_TokData_t * tokdata, SESSION * sess, +- OBJECT * rsa_key_obj, +- CK_BYTE * blob, size_t * blob_size) ++static CK_RV import_RSA_key(STDLL_TokData_t *tokdata, SESSION *sess, ++ OBJECT *rsa_key_obj, ++ CK_BYTE *blob, size_t *blob_size, ++ CK_BYTE *spki, size_t *spki_size) + { + ep11_private_data_t *ep11_data = tokdata->private_data; + CK_RV rc; +@@ -2759,8 +2760,6 @@ static CK_RV import_RSA_key(STDLL_TokData_t * tokdata, SESSION * sess, + CK_ULONG attrs_len = 0; + CK_ATTRIBUTE_PTR new_p_attrs = NULL; + CK_ULONG new_attrs_len = 0; +- CK_BYTE csum[MAX_BLOBSIZE]; +- CK_ULONG cslen = sizeof(csum); + CK_OBJECT_CLASS class; + CK_BYTE *data = NULL; + CK_ULONG data_len; +@@ -2831,6 +2830,8 @@ static CK_RV import_RSA_key(STDLL_TokData_t * tokdata, SESSION * sess, + goto import_RSA_key_end; + } + ++ *spki_size = 0; /* common code will extract SPKI from object */ ++ + } else { + + /* imported private RSA key goes here */ +@@ -2884,7 +2885,7 @@ static CK_RV import_RSA_key(STDLL_TokData_t * tokdata, SESSION * sess, + ep11_data->raw2key_wrap_blob_l, NULL, ~0, + ep11_pin_blob, ep11_pin_blob_len, &mech_w, + new_p_attrs, new_attrs_len, blob, blob_size, +- csum, &cslen, target_info->target); ++ spki, spki_size, target_info->target); + RETRY_END(rc, tokdata, sess) + + if (rc != CKR_OK) { +@@ -2921,9 +2922,10 @@ import_RSA_key_end: + * SPKIs for public imported EC keys. + * Similar to rawkey_2_blob, but keys must follow a standard BER encoding. + */ +-static CK_RV import_EC_key(STDLL_TokData_t * tokdata, SESSION * sess, +- OBJECT * ec_key_obj, +- CK_BYTE * blob, size_t * blob_size) ++static CK_RV import_EC_key(STDLL_TokData_t *tokdata, SESSION *sess, ++ OBJECT *ec_key_obj, ++ CK_BYTE *blob, size_t *blob_size, ++ CK_BYTE *spki, size_t *spki_size) + { + ep11_private_data_t *ep11_data = tokdata->private_data; + CK_RV rc; +@@ -2935,8 +2937,6 @@ static CK_RV import_EC_key(STDLL_TokData_t * tokdata, SESSION * sess, + CK_ULONG attrs_len = 0; + CK_ATTRIBUTE_PTR new_p_attrs = NULL; + CK_ULONG new_attrs_len = 0; +- CK_BYTE csum[MAX_BLOBSIZE]; +- CK_ULONG cslen = sizeof(csum); + CK_OBJECT_CLASS class; + CK_BYTE *data = NULL; + CK_ULONG data_len; +@@ -3059,6 +3059,8 @@ static CK_RV import_EC_key(STDLL_TokData_t * tokdata, SESSION * sess, + goto import_EC_key_end; + } + ++ *spki_size = 0; /* common code will extract SPKI from object */ ++ + } else { + + /* imported private EC key goes here */ +@@ -3115,7 +3117,8 @@ static CK_RV import_EC_key(STDLL_TokData_t * tokdata, SESSION * sess, + ep11_pin_blob, + ep11_pin_blob_len, &mech_w, + new_p_attrs, new_attrs_len, blob, +- blob_size, csum, &cslen, target_info->target); ++ blob_size, spki, spki_size, ++ target_info->target); + RETRY_END(rc, tokdata, sess) + + if (rc != CKR_OK) { +@@ -3149,9 +3152,10 @@ import_EC_key_end: + * SPKIs for public imported DSA keys. + * Similar to rawkey_2_blob, but keys must follow a standard BER encoding. + */ +-static CK_RV import_DSA_key(STDLL_TokData_t * tokdata, SESSION * sess, +- OBJECT * dsa_key_obj, +- CK_BYTE * blob, size_t * blob_size) ++static CK_RV import_DSA_key(STDLL_TokData_t *tokdata, SESSION *sess, ++ OBJECT *dsa_key_obj, ++ CK_BYTE *blob, size_t *blob_size, ++ CK_BYTE *spki, size_t *spki_size) + { + ep11_private_data_t *ep11_data = tokdata->private_data; + CK_RV rc; +@@ -3163,8 +3167,6 @@ static CK_RV import_DSA_key(STDLL_TokData_t * tokdata, SESSION * sess, + CK_ULONG attrs_len = 0; + CK_ATTRIBUTE_PTR new_p_attrs = NULL; + CK_ULONG new_attrs_len = 0; +- CK_BYTE csum[MAX_BLOBSIZE]; +- CK_ULONG cslen = sizeof(csum); + CK_OBJECT_CLASS class; + CK_BYTE *data = NULL; + CK_ULONG data_len; +@@ -3251,6 +3253,8 @@ static CK_RV import_DSA_key(STDLL_TokData_t * tokdata, SESSION * sess, + goto import_DSA_key_end; + } + ++ *spki_size = 0; /* common code will extract SPKI from object */ ++ + } else { + + /* imported private DSA key goes here */ +@@ -3307,7 +3311,8 @@ static CK_RV import_DSA_key(STDLL_TokData_t * tokdata, SESSION * sess, + ep11_pin_blob, + ep11_pin_blob_len, &mech_w, + new_p_attrs, new_attrs_len, blob, +- blob_size, csum, &cslen, target_info->target); ++ blob_size, spki, spki_size, ++ target_info->target); + RETRY_END(rc, tokdata, sess) + + if (rc != CKR_OK) { +@@ -3339,9 +3344,10 @@ import_DSA_key_end: + * SPKIs for public imported DH keys. + * Similar to rawkey_2_blob, but keys must follow a standard BER encoding. + */ +-static CK_RV import_DH_key(STDLL_TokData_t * tokdata, SESSION * sess, +- OBJECT * dh_key_obj, +- CK_BYTE * blob, size_t * blob_size) ++static CK_RV import_DH_key(STDLL_TokData_t *tokdata, SESSION *sess, ++ OBJECT *dh_key_obj, ++ CK_BYTE *blob, size_t *blob_size, ++ CK_BYTE *spki, size_t *spki_size) + { + ep11_private_data_t *ep11_data = tokdata->private_data; + CK_RV rc; +@@ -3353,8 +3359,6 @@ static CK_RV import_DH_key(STDLL_TokData_t * tokdata, SESSION * sess, + CK_ULONG attrs_len = 0; + CK_ATTRIBUTE_PTR new_p_attrs = NULL; + CK_ULONG new_attrs_len = 0; +- CK_BYTE csum[MAX_BLOBSIZE]; +- CK_ULONG cslen = sizeof(csum); + CK_OBJECT_CLASS class; + CK_BYTE *data = NULL; + CK_ULONG data_len; +@@ -3433,6 +3437,8 @@ static CK_RV import_DH_key(STDLL_TokData_t * tokdata, SESSION * sess, + goto import_DH_key_end; + } + ++ *spki_size = 0; /* common code will extract SPKI from object */ ++ + } else { + CK_ATTRIBUTE *value; + CK_ATTRIBUTE *value_bits; +@@ -3500,7 +3506,8 @@ static CK_RV import_DH_key(STDLL_TokData_t * tokdata, SESSION * sess, + ep11_pin_blob, + ep11_pin_blob_len, &mech_w, + new_p_attrs, new_attrs_len, blob, +- blob_size, csum, &cslen, target_info->target); ++ blob_size, spki, spki_size, ++ target_info->target); + RETRY_END(rc, tokdata, sess) + + if (rc != CKR_OK) { +@@ -3547,9 +3554,10 @@ import_DH_key_end: + * SPKIs for public imported IBM Dilithium keys. + * Similar to rawkey_2_blob, but keys must follow a standard BER encoding. + */ +-static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t * tokdata, SESSION * sess, +- OBJECT * dilithium_key_obj, +- CK_BYTE * blob, size_t * blob_size) ++static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, ++ OBJECT *dilithium_key_obj, ++ CK_BYTE *blob, size_t *blob_size, ++ CK_BYTE *spki, size_t *spki_size) + { + ep11_private_data_t *ep11_data = tokdata->private_data; + CK_RV rc; +@@ -3561,8 +3569,6 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t * tokdata, SESSION * sess, + CK_ULONG attrs_len = 0; + CK_ATTRIBUTE_PTR new_p_attrs = NULL; + CK_ULONG new_attrs_len = 0; +- CK_BYTE csum[MAX_BLOBSIZE]; +- CK_ULONG cslen = sizeof(csum); + CK_OBJECT_CLASS class; + CK_BYTE *data = NULL; + CK_ULONG data_len; +@@ -3652,6 +3658,8 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t * tokdata, SESSION * sess, + goto done; + } + ++ *spki_size = 0; /* common code will extract SPKI from object */ ++ + } else { + + /* imported private IBM Dilithium key goes here */ +@@ -3709,7 +3717,8 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t * tokdata, SESSION * sess, + ep11_pin_blob, + ep11_pin_blob_len, &mech_w, + new_p_attrs, new_attrs_len, blob, +- blob_size, csum, &cslen, target_info->target); ++ blob_size, spki, spki_size, ++ target_info->target); + RETRY_END(rc, tokdata, sess) + + if (rc != CKR_OK) { +@@ -3747,9 +3756,13 @@ CK_RV token_specific_object_add(STDLL_TokData_t * tokdata, SESSION * sess, + CK_ATTRIBUTE *attr = NULL; + CK_BYTE blob[MAX_BLOBSIZE]; + size_t blobsize = sizeof(blob); ++ CK_BYTE spki[MAX_BLOBSIZE]; ++ size_t spkisize = sizeof(spki); + CK_RV rc; + CK_ULONG class; + CK_BBOOL attrbound; ++ CK_BYTE *temp; ++ CK_ULONG temp_len; + + /* get key type */ + rc = template_attribute_get_ulong(obj->template, CKA_KEY_TYPE, &keytype); +@@ -3783,7 +3796,8 @@ CK_RV token_specific_object_add(STDLL_TokData_t * tokdata, SESSION * sess, + /* only these keys can be imported */ + switch (keytype) { + case CKK_RSA: +- rc = import_RSA_key(tokdata, sess, obj, blob, &blobsize); ++ rc = import_RSA_key(tokdata, sess, obj, blob, &blobsize, ++ spki, &spkisize); + if (rc != CKR_OK) { + TRACE_ERROR("%s import RSA key rc=0x%lx blobsize=0x%zx\n", + __func__, rc, blobsize); +@@ -3793,7 +3807,8 @@ CK_RV token_specific_object_add(STDLL_TokData_t * tokdata, SESSION * sess, + __func__, rc, blobsize); + break; + case CKK_EC: +- rc = import_EC_key(tokdata, sess, obj, blob, &blobsize); ++ rc = import_EC_key(tokdata, sess, obj, blob, &blobsize, ++ spki, &spkisize); + if (rc != CKR_OK) { + TRACE_ERROR("%s import EC key rc=0x%lx blobsize=0x%zx\n", + __func__, rc, blobsize); +@@ -3803,7 +3818,8 @@ CK_RV token_specific_object_add(STDLL_TokData_t * tokdata, SESSION * sess, + __func__, rc, blobsize); + break; + case CKK_DSA: +- rc = import_DSA_key(tokdata, sess, obj, blob, &blobsize); ++ rc = import_DSA_key(tokdata, sess, obj, blob, &blobsize, ++ spki, &spkisize); + if (rc != CKR_OK) { + TRACE_ERROR("%s import DSA key rc=0x%lx blobsize=0x%zx\n", + __func__, rc, blobsize); +@@ -3813,7 +3829,8 @@ CK_RV token_specific_object_add(STDLL_TokData_t * tokdata, SESSION * sess, + __func__, rc, blobsize); + break; + case CKK_DH: +- rc = import_DH_key(tokdata, sess, obj, blob, &blobsize); ++ rc = import_DH_key(tokdata, sess, obj, blob, &blobsize, ++ spki, &spkisize); + if (rc != CKR_OK) { + TRACE_ERROR("%s import DH key rc=0x%lx blobsize=0x%zx\n", + __func__, rc, blobsize); +@@ -3823,7 +3840,8 @@ CK_RV token_specific_object_add(STDLL_TokData_t * tokdata, SESSION * sess, + __func__, rc, blobsize); + break; + case CKK_IBM_PQC_DILITHIUM: +- rc = import_IBM_Dilithium_key(tokdata, sess, obj, blob, &blobsize); ++ rc = import_IBM_Dilithium_key(tokdata, sess, obj, blob, &blobsize, ++ spki, &spkisize); + if (rc != CKR_OK) { + TRACE_ERROR("%s import IBM Dilithium key rc=0x%lx blobsize=0x%zx\n", + __func__, rc, blobsize); +@@ -3891,6 +3909,31 @@ CK_RV token_specific_object_add(STDLL_TokData_t * tokdata, SESSION * sess, + return rc; + } + ++ if (spkisize > 0 && (class == CKO_PRIVATE_KEY || class == CKO_PUBLIC_KEY)) { ++ /* spki may be a MACed SPKI, get length of SPKI part only */ ++ rc = ber_decode_SEQUENCE(spki, &temp, &temp_len, &spkisize); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ber_decode_SEQUENCE failed rc=0x%lx\n", ++ __func__, rc); ++ return rc; ++ } ++ ++ rc = build_attribute(CKA_PUBLIC_KEY_INFO, spki, spkisize, &attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, ++ rc); ++ return rc; ++ } ++ ++ rc = template_update_attribute(obj->template, attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", ++ __func__, rc); ++ free(attr); ++ return rc; ++ } ++ } ++ + rc = update_ep11_attrs_from_blob(tokdata, sess, obj->template); + if (rc != CKR_OK) { + TRACE_ERROR("%s update_ep11_attrs_from_blob failed with rc=0x%lx\n", +-- +2.16.2.windows.1 + diff --git a/SOURCES/0009-EP11-Fix-memory-leak-introduced-with-recent-commit.patch b/SOURCES/0009-EP11-Fix-memory-leak-introduced-with-recent-commit.patch new file mode 100644 index 0000000..a42bfbf --- /dev/null +++ b/SOURCES/0009-EP11-Fix-memory-leak-introduced-with-recent-commit.patch @@ -0,0 +1,31 @@ +From b17570340533d36db1782e5aeafc9107c607b7c4 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Mon, 7 Nov 2022 14:04:01 +0100 +Subject: [PATCH 09/34] EP11: Fix memory leak introduced with recent commit + +Function publ_key_get_spki() allocates the SPKI buffer, so it must be freed +afterwards. + +Fixes: 638fa126c8cb28ff7daf2bb383a0461c8f9fe6f8 + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index 3b14a557..9e320503 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -5452,6 +5452,8 @@ error: + free(chk_attr); + if (spki_attr != NULL) + free(spki_attr); ++ if (spki != NULL) ++ free(spki); + if (new_attrs) + free_attribute_array(new_attrs, new_attrs_len); + if (new_attrs1) +-- +2.16.2.windows.1 + diff --git a/SOURCES/0010-p11sak-Fix-segfault-when-dilithium-version-is-not-sp.patch b/SOURCES/0010-p11sak-Fix-segfault-when-dilithium-version-is-not-sp.patch new file mode 100644 index 0000000..0795559 --- /dev/null +++ b/SOURCES/0010-p11sak-Fix-segfault-when-dilithium-version-is-not-sp.patch @@ -0,0 +1,34 @@ +From bea2552c40339d9013eaaa55b13491c7e36fbadf Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Tue, 8 Nov 2022 15:49:22 +0100 +Subject: [PATCH 10/34] p11sak: Fix segfault when dilithium version is not + specified with generate-key + +Command 'p11sak generate-key ibm-dilithium' segfaults because the dilithium +version is not specified, but the code does not check for a NULL pointer. + +Signed-off-by: Ingo Franzki +--- + usr/sbin/p11sak/p11sak.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/usr/sbin/p11sak/p11sak.c b/usr/sbin/p11sak/p11sak.c +index b399c88a..8cfcb21d 100644 +--- a/usr/sbin/p11sak/p11sak.c ++++ b/usr/sbin/p11sak/p11sak.c +@@ -1843,6 +1843,12 @@ static CK_RV check_args_gen_key(p11sak_kt *kt, CK_ULONG keylength, + case kt_3DES: + break; + case kt_IBM_DILITHIUM: ++ if (dilithium_ver == NULL) { ++ fprintf(stderr, ++ "Cipher key type [%d] supported but Dilithium version not set in arguments. Try adding argument \n", ++ *kt); ++ return CKR_ARGUMENTS_BAD; ++ } + if (strcasecmp(dilithium_ver, "r2_65") == 0) { + break; + } else { +-- +2.16.2.windows.1 + diff --git a/SOURCES/0011-EP11-remove-dead-code-and-unused-variables.patch b/SOURCES/0011-EP11-remove-dead-code-and-unused-variables.patch new file mode 100644 index 0000000..543b28f --- /dev/null +++ b/SOURCES/0011-EP11-remove-dead-code-and-unused-variables.patch @@ -0,0 +1,118 @@ +From ee3464dff7536c98fd64c80d87c765f703dff0f0 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Fri, 18 Nov 2022 10:44:56 +0100 +Subject: [PATCH 11/34] EP11: remove dead code and unused variables + +Some variables are declared and initialized to NULL, but never used or set. +The attempt to free them at the end of the function is dead code. + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 28 ---------------------------- + 1 file changed, 28 deletions(-) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index 9e320503..1dbfe0f5 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -3575,7 +3575,6 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + unsigned char *ep11_pin_blob = NULL; + CK_ULONG ep11_pin_blob_len = 0; + ep11_session_t *ep11_session = (ep11_session_t *) sess->private_data; +- CK_BYTE *pubkey = NULL; + + memcpy(iv, "1234567812345678", AES_BLOCK_SIZE); + +@@ -3734,9 +3733,6 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + } + + done: +- +- if (pubkey) +- free(pubkey); + if (data) { + OPENSSL_cleanse(data, data_len); + free(data); +@@ -5486,7 +5482,6 @@ static CK_RV dh_generate_keypair(STDLL_TokData_t *tokdata, + CK_ATTRIBUTE *opaque_attr = NULL; + CK_ATTRIBUTE *value_attr = NULL; + CK_ATTRIBUTE *attr = NULL; +- CK_ATTRIBUTE *pPublicKeyTemplate_new = NULL; + CK_ATTRIBUTE_PTR dh_pPublicKeyTemplate = NULL; + CK_ULONG dh_ulPublicKeyAttributeCount = 0; + CK_ATTRIBUTE_PTR dh_pPrivateKeyTemplate = NULL; +@@ -5746,7 +5741,6 @@ static CK_RV dh_generate_keypair(STDLL_TokData_t *tokdata, + } + + dh_generate_keypair_end: +- free(pPublicKeyTemplate_new); + if (dh_pgs.pg != NULL) + free(dh_pgs.pg); + if (dh_pPublicKeyTemplate) +@@ -5778,7 +5772,6 @@ static CK_RV dsa_generate_keypair(STDLL_TokData_t *tokdata, + CK_ATTRIBUTE *opaque_attr = NULL; + CK_ATTRIBUTE *value_attr = NULL; + CK_ATTRIBUTE *attr = NULL; +- CK_ATTRIBUTE *pPublicKeyTemplate_new = NULL; + CK_BYTE *key; + CK_BYTE *data, *oid, *parm; + CK_ULONG data_len, field_len, bit_str_len, oid_len, parm_len; +@@ -6047,7 +6040,6 @@ static CK_RV dsa_generate_keypair(STDLL_TokData_t *tokdata, + } + + dsa_generate_keypair_end: +- free(pPublicKeyTemplate_new); + if (dsa_pqgs.pqg != NULL) + free(dsa_pqgs.pqg); + if (dsa_pPublicKeyTemplate) +@@ -6080,10 +6072,6 @@ static CK_RV rsa_ec_generate_keypair(STDLL_TokData_t *tokdata, + CK_BYTE *data, *oid, *parm; + CK_ULONG data_len, oid_len, parm_len; + CK_ULONG field_len; +- CK_ATTRIBUTE_PTR new_pPublicKeyTemplate = NULL; +- CK_ULONG new_ulPublicKeyAttributeCount = 0; +- CK_ATTRIBUTE_PTR new_pPrivateKeyTemplate = NULL; +- CK_ULONG new_ulPrivateKeyAttributeCount = 0; + CK_ULONG ktype; + unsigned char *ep11_pin_blob = NULL; + CK_ULONG ep11_pin_blob_len = 0; +@@ -6399,12 +6387,6 @@ static CK_RV rsa_ec_generate_keypair(STDLL_TokData_t *tokdata, + } + + error: +- if (new_pPrivateKeyTemplate) +- free_attribute_array(new_pPrivateKeyTemplate, +- new_ulPrivateKeyAttributeCount); +- if (new_pPublicKeyTemplate) +- free_attribute_array(new_pPublicKeyTemplate, +- new_ulPublicKeyAttributeCount); + if (new_publ_attrs) + free_attribute_array(new_publ_attrs, new_publ_attrs_len); + if (new_priv_attrs) +@@ -6432,10 +6414,6 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + CK_BYTE *data, *oid, *parm; + CK_ULONG data_len, oid_len, parm_len; + CK_ULONG field_len; +- CK_ATTRIBUTE_PTR new_pPublicKeyTemplate = NULL; +- CK_ULONG new_ulPublicKeyAttributeCount = 0; +- CK_ATTRIBUTE_PTR new_pPrivateKeyTemplate = NULL; +- CK_ULONG new_ulPrivateKeyAttributeCount = 0; + CK_ULONG ktype = CKK_IBM_PQC_DILITHIUM; + unsigned char *ep11_pin_blob = NULL; + CK_ULONG ep11_pin_blob_len = 0; +@@ -6679,12 +6657,6 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + } + + error: +- if (new_pPrivateKeyTemplate) +- free_attribute_array(new_pPrivateKeyTemplate, +- new_ulPrivateKeyAttributeCount); +- if (new_pPublicKeyTemplate) +- free_attribute_array(new_pPublicKeyTemplate, +- new_ulPublicKeyAttributeCount); + if (new_publ_attrs) + free_attribute_array(new_publ_attrs, new_publ_attrs_len); + if (new_priv_attrs) +-- +2.16.2.windows.1 + diff --git a/SOURCES/0012-EP11-Update-EP11-host-library-header-files.patch b/SOURCES/0012-EP11-Update-EP11-host-library-header-files.patch new file mode 100644 index 0000000..47f14e2 --- /dev/null +++ b/SOURCES/0012-EP11-Update-EP11-host-library-header-files.patch @@ -0,0 +1,2331 @@ +From 1197829d87732e1cae18ee64eefe44f0a6cb391f Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Wed, 16 Feb 2022 10:09:10 +0100 +Subject: [PATCH 12/34] EP11: Update EP11 host library header files + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11.h | 1345 +++++++++++++++++++++++++----------------- + usr/lib/ep11_stdll/ep11adm.h | 305 +++------- + 2 files changed, 911 insertions(+), 739 deletions(-) + +diff --git a/usr/lib/ep11_stdll/ep11.h b/usr/lib/ep11_stdll/ep11.h +index cd4f11e5..c68dd045 100644 +--- a/usr/lib/ep11_stdll/ep11.h ++++ b/usr/lib/ep11_stdll/ep11.h +@@ -16,7 +16,6 @@ + + #if !defined(XCP_H__) + #define XCP_H__ +- + #if !defined(CKR_OK) + #include "pkcs11.h" + #endif +@@ -25,195 +24,10 @@ + #error "We need 64-bit types, please include before this file." + #endif + +-// SHA224 etc. are additions to PKCS#11 2.20 +-// remove these if host migrates beyond 2.20 as base minimum [unlikely] +-// +-#if !defined(CKM_SHA224) +-#define CKM_SHA224 0x00000255 +-#define CKM_SHA224_HMAC 0x00000256 +-#define CKM_SHA224_HMAC_GENERAL 0x00000257 +-#define CKM_SHA224_RSA_PKCS 0x00000046 +-#define CKM_SHA224_RSA_PKCS_PSS 0x00000047 +-#define CKM_SHA224_KEY_DERIVATION 0x00000396 +-#define CKM_AES_CTR 0x00001086 +-#define CKG_MGF1_SHA224 0x00000005 +-#endif +- +-#if !defined(CKM_AES_CMAC) +-#define CKM_AES_CMAC 0x0000108a +-#endif +- +-#if !defined(CKM_DES3_CMAC) +-#define CKM_DES3_CMAC 0x00000138 +-#endif +- +- +- +-// max value for target groups +-#define XCP_MAX_GRPIDX 1024u +-// +-// current version of XCP_Module structure; host code SHOULD interact with +-// future/past versions, MUST be set by caller before using m_add_module() +-// valid versions are all >0 +-#define XCP_MOD_VERSION 2 + // + // used for internal and external paths/addresses + #define MAX_FNAME_CHARS 256 + +-// macros for setting/checking and removing domains from (tgt.mgmt) domain mask +-#define XCPTGTMASK_SET_DOM(mask, domain) \ +- mask[((domain)/8)] |= (1 << (7-(domain)%8)) +-#define XCPTGTMASK_DOM_IS_SET(mask, domain) \ +- (mask[((domain)/8)] & (1 << (7-(domain)%8))) +-#define XCPTGTMASK_CLR_DOM(mask, domain) \ +- mask[((domain)/8)] &= ~(1 << (7-(domain)%8)) +-// +- +- +-/* flags that can be set for the target tokens +- * +- * This flags are domain specific and are therefore called domain flags +- * +- * start of flags is >16 Bit. Max value for domains is 0xFF. Should be enough +- * room for extensions +- */ +-#define XCP_TGTFL_WCAP 0x10000000 /* Capture wire request in output buffer +- * without sending it to the module +- */ +-#define XCP_TGTFL_WCAP_SQ 0x20000000 /* Size query: Return size of request in +- * output buffer length field +- */ +-#define XCP_TGTFL_SET_SCMD 0x40000000 /* Protected key special command: Set the +- * special command flag in the CPRB +- * header +- */ +-#define XCP_TGTFL_API_CHKD 0x80000000 /* supported API version of modules in +- * target (group) has been checked +- */ +- +-#define XCP_TGTFL_NO_LOCK 0x01000000 /* target token ignores sequential locks +- * for target probing +- */ +-#define XCP_TGTFL_SET_ACMD 0x04000000 /* add CPRB admin flag to CPRB header */ +- +-//-------------------------------------- +-// socket use only +-#define XCP_MAXCONNECTIONS 64 /* max value for active connections */ +-#define XCP_MAX_PORT 0xffff +- +-// hostname and port value fore one module +-typedef struct XCP_ModuleSocket { +- char host[ MAX_FNAME_CHARS +1 ]; +- uint32_t port; +-} *XCP_ModuleSocket_t ; +- +- +-//-------------------------------------- +-// diagnostics use only +-typedef struct XCP_DomainPerf { +- /* perf value of last request per domain +- * +- * At the moment unused +- * */ +- unsigned int lastperf[ 256 ]; +-} *XCP_DomainPerf_t; +- +- +-//-------------------------------------- +-// subsequent communications with a module MAY skip infrastructure-specific +-// fields, such as a query not reporting device handles etc., even if they +-// have been supplied originally when the module has been registered. +-// +-typedef struct XCP_Module { +- uint32_t version; /* >0 for supported API versions */ +- +- uint64_t flags; /* see XCP_Module_Flags */ +- +- uint32_t domains; /* max# addressable under this module; +- * cached from OS +- * +- * when callers set domains to 0, the library +- * returns the module-claimed domain count. +- */ +- +- unsigned char domainmask[ 256 /8 ]; +- /* higher domain# through future flags (none +- * currently defined) which would add things +- * like 'FLAG_256_1023' etc. at the same time, +- * we would add domainmask2[] etc. +- * corresponding new fields. +- * +- * new fields would then store mask for +- * domains 256+ etc. +- * +- * domain #0 is bit x80 of 1st byte, +- * #255 is bit 0x01 of last byte. +- */ +- +- // when a domainmask is supplied, with bits set beyond +- // what the module supports, the bitmask is trimmed to +- // the supported range, but this is NOT reported as an +- // error, unless XCP_MFL_STRICT is also supplied. +- // +- // without XCP_MFL_STRICT, callers are expected to check +- // at least the returned domain count. +- +- /* used only when flags includes XCP_MFL_SOCKET */ +- struct XCP_ModuleSocket socket; +- +- /* used when system exposes modules through an +- * array of transparent pipes, or similar abstraction +- * (such as mainframe AP Queues, or other Linux +- * 'device-minor' numbers etc.). Interpretation +- * is platform-dependent. +- * +- * used only when flags includes XCP_MFL_MODULE +- */ +- uint32_t module_nr; +- +- /* used by systems which associate devices with +- * device handles/structs/etc. persistent state. +- * opaque pointer, usually a const pointer to +- * such aux structs, MAY be stored here. +- * +- * interpretation is platform-dependent. +- * used only when flags includes XCP_MFL_MHANDLE +- */ +- void *mhandle; +- /* diagnostics use only, when XCP_MFL_PERF is set */ +- struct XCP_DomainPerf perf; +- //----- end of v1 fields ------------------------------------------- +- +- uint32_t api; /* module api version*/ +- //----- end of v2 fields ------------------------------------------- +-} *XCP_Module_t ; +- +-typedef enum { +- XCP_MFL_SOCKET = 1, /* backend is socket-attached */ +- XCP_MFL_MODULE = 2, /* backends identified in +- array-of-modules */ +- XCP_MFL_MHANDLE = 4, /* backends uses 'module handle' field */ +- XCP_MFL_PERF = 8, /* performance statistics collected +- * for this module, see .perf +- */ +- XCP_MFL_VIRTUAL = 0x10, /* queried 'target' is a load-balancer, +- * other other group. +- */ +- XCP_MFL_STRICT = 0x20, /* enable aggressive error checking, +- * see field descriptions for effect +- */ +- XCP_MFL_PROBE = 0x40, /* send api query to module, to check if +- * target(s) can be used +- */ +- XCP_MFL_ALW_TGT_ADD = 0x80, /* Allows it to use a target in any +- * functional and admin call without +- * adding it beforehand with +- * m_add_module() +- */ +- XCP_MFL_MAX = 0xff +-} XCP_Module_Flags; +- +- + // Error Values for functions that do not return CK_RV + // general errors + #define XCP_OK 0 /* function successful +@@ -282,17 +96,15 @@ typedef enum { + * flag is not active + */ + +- + /*--------------------------------------------------------------------------*/ + #define XCP_COMMON_PUBLIC_H__ + + +-#define XCP_API_VERSION 0x071d /* major[8] minor[8] */ ++#define XCP_API_VERSION 0x0810 /* major[8] minor[8] */ + #define XCP_API_ORDINAL 0x0004 + /* increment this with every major/minor change */ + +-#define XCP_HOST_API_VER 0x030100 /* major[8] minor[8] fixpack[8] */ +-#define XCP_RPM_VERSION XCP_HOST_API_VER /* deprecated */ ++#define XCP_HOST_API_VER 0x040000 /* major[8] minor[8] fixpack[8] */ + + /* HSM connection information; not for PKCS11 user consumption */ + #define XCP_HSM_AGENT_ID 0x5843 /* ASCII "XC" */ +@@ -375,6 +187,8 @@ typedef enum { + #define CKR_IBM_TARGET_INVALID (CKR_VENDOR_DEFINED +0x10030) + + ++#define CKR_IBM_PQC_PARAMS_NOT_SUPPORTED (CKR_VENDOR_DEFINED +0x10031) ++ + + // Error returned if internal verification of crypto engines fail + #define CKR_IBM_ERROR_STATE (CKR_VENDOR_DEFINED +0x10101) +@@ -445,12 +259,18 @@ typedef enum { + #define CKM_IBM_ED448_SHA3 (CKM_VENDOR_DEFINED +0x1001f) + + ++// round counts are passed as mechanism parameters ++#define CKM_IBM_SIPHASH (CKM_VENDOR_DEFINED +0x10021) ++ ++ + // these need a strength definition + // XCP_U32_VALUE_BITS/CKA_VALUE_BITS would be sufficient; strength->K/L mapping + // + // umbrella mech for PQC/Crystals variants + #define CKM_IBM_DILITHIUM (CKM_VENDOR_DEFINED +0x10023) + // ^^^ sign/verify plus keygen only ++#define CKM_IBM_KYBER (CKM_VENDOR_DEFINED +0x10024) ++ // ^^^ en/decrypt, keygen, key transport, and (hybrid) key derivation + + // SHA-3 HMAC variants + #define CKM_IBM_SHA3_224_HMAC (CKM_VENDOR_DEFINED +0x10025) +@@ -481,6 +301,10 @@ typedef enum { + ECSG_IBM_MAX = ECSG_IBM_ECSDSA_COMPR_MULTI, + } ECSG_Var_t; + ++#define CK_IBM_ECSG_IBM_ECSDSA_S256 ECSG_IBM_ECSDSA_S256 ++#define CK_IBM_ECSG_IBM_ECDSA_COMPR_MULTI_S256 ECSG_IBM_ECDSA_COMPR_MULTI_S256 ++#define CK_IBM_ECSG_IBM_MAX ECSG_IBM_MAX ++ + + //--- transport additions -------------------------------------------------- + #define CKM_IBM_CLEARKEY_TRANSPORT (CKM_VENDOR_DEFINED +0x20001) +@@ -565,6 +389,12 @@ typedef enum { + + #define CKA_IBM_PQC_PARAMS (CKA_VENDOR_DEFINED +0x1000e) + ++// query or modify login session an object is bound to ++#define CKA_IBM_LOGIN_SESSION (CKA_VENDOR_DEFINED +0x1000f) ++ ++// query MAC'd spki from a private key ++#define CKA_IBM_MACED_PUBLIC_KEY_INFO (CKA_VENDOR_DEFINED +0x20002) ++ + // direct access to attributes' wire form + // parameters of this attribute, if it's the only one present, + // inserted verbatim into request package +@@ -574,6 +404,9 @@ typedef enum { + // matches the key type constant for clear key Dilithium with ICSF + #define CKK_IBM_PQC_DILITHIUM (CKK_VENDOR_DEFINED +0x10023) + ++#define CKK_IBM_PQC_KYBER (CKK_VENDOR_DEFINED +0x10024) ++ ++ + + + +@@ -583,6 +416,7 @@ typedef enum { + #define XCP_MOD_ERROR_STATE_SYSTEST_CMD 0x00000003 + #define XCP_MOD_ERROR_STATE_TRNG_HEALTH 0x00000004 + ++ + /*---------------------------------------------------------------------------- + * sizes related to blobs and host-visible entities + * +@@ -599,10 +433,10 @@ typedef enum { + #define XCP_BLOBCLRATTR_BYTES 8 /* clear blob attr's bytecount */ + /* keep in sync with objattr_t */ + #define XCP_BLOBCLRMODE_BYTES 8 /* clear blob modefield bytecount */ +-#define MOD_WRAP_BLOCKSIZE ((size_t) (128 /8)) /* blob crypt block bytecount */ ++#define XCP_WRAP_BLOCKSIZE ((size_t) (128 /8)) /* blob crypt block bytecount */ + #define XCP_MACKEY_BYTES (256 /8) /* derived from controlling WK */ + // +-#define XCP_PIN_SALT_BYTES MOD_WRAP_BLOCKSIZE ++#define XCP_PIN_SALT_BYTES XCP_WRAP_BLOCKSIZE + #define XCP_PINBLOB_BYTES \ + (XCP_WK_BYTES +XCP_PIN_SALT_BYTES +XCP_HMAC_BYTES) + +@@ -664,6 +498,18 @@ typedef enum { + + #define XCP_BTC_VERSION 1 + ++#define XCP_KYBER_KEM_VERSION 0 ++ ++#define XCP_KYBER_KEM_MIN_WIRE_BYTES (4 + 4 + 4 + 4 + 4 + 4) /* version[32] || ++ kdf[32] || ++ mode[32] || ++ cphr[32] || ++ shrd[32] || ++ blob [32] */ ++ ++#define XCP_KYBER_RAW_BYTES 32 ++ ++ + #define XCP_ECDH1_DERIVE_MAX_PUBLIC_BYTES 1024 /* limit public data length to + reasonable number of bytes */ + // +@@ -698,6 +544,8 @@ typedef enum { + // related to the protected-key capability + // see also CKA_IBM_PROTKEY_* description + ++ CKF_IBM_HW_DUAL_OA = 0x1000, // module supports dual OA certs/signatures ++ // see CK_IBM_XCPXQ_OA_CAP for more details + } XCP_CK_EXTFLAGS_t; + + // these numbers apply to current version, subject to change +@@ -720,7 +568,7 @@ typedef enum { + + // ~arbitrary limit on acceptable admin. certificates + // additional limits, such as transport-bytecount, may restrict further +-#define XCP_CERT_MAX_BYTES ((size_t) 4096) ++#define XCP_CERT_MAX_BYTES ((size_t) 12288) /* fits dil certs (8k + meta) */ + #define XCP_CERTHASH_BYTES (256/8) + /* hash or SKI of public key, or other hash-identified things; SHA-256 */ + +@@ -734,6 +582,9 @@ typedef enum { + /* ^^^ increase this when policy moves beyond shorter curves */ + #define XCP_MAX_EC_CURVE_BITS 521 + ++#define XCP_MAX_DIL_SIGNATURE_BYTES 4668 /* max. length of dil. 8-7 sigs */ ++#define XCP_MAX_SINFO_META_BYTES 100 /* signer info framework bytes */ ++ + /* bytecount of raw (generic) keys, not key schedules */ + #define MOD_MAX_SYMMKEY_BYTES 256 + +@@ -754,8 +605,20 @@ typedef enum { + /* trailing big-endian bitcount field after UnwrapKey() checksum */ + + /* card(OA) signature bytecount: SKI-identified SignerInfo, +- 4096-bit RSA signature, with SHA-256 hash */ +-#define XCP_RSPSIG_MAX_BYTES (75 +4096/8) ++ * Non quantum safe: Must contain space for either: ++ * - 4096-bit RSA signature, hash OID, encr. OID and SKI ++ * - EC-P521 signature, hash OID, encr. OID and SKI ++ */ ++#define XCP_RSPSIG_RSA (4096 / 8) ++#define XCP_RSPSIG_MAX_BYTES (XCP_MAX_SINFO_META_BYTES + \ ++ XCP_RSPSIG_RSA) ++ ++/* card(OA) signature bytecount: SKI-identified SignerInfo, ++ * Quantum safe: Must contain space for: ++ * - DIL signature, hash OID, encr. OID and SKI ++ */ ++#define XCP_RSPSIG_QS_MAX_BYTES (XCP_MAX_SINFO_META_BYTES + \ ++ XCP_MAX_DIL_SIGNATURE_BYTES) + + /* minimal padding for raw RSA enc/dec/sign/ver/wr/unwr + * Used for example in CKM_RSA_PKCS. See RFC 2313 chapter 8 for a complete +@@ -772,84 +635,85 @@ typedef enum { + /* indicates particular events, not generic event types/categories, */ + /* if bits in this region are non-zero */ + +-typedef enum { /* functionality categories: keep within uint16_t range */ +- XCP_LOGEV_QUERY = 0, +- XCP_LOGEV_FUNCTION = 1, +- XCP_LOGEV_ADMFUNCTION = 2, +- XCP_LOGEV_STARTUP = 3, +- XCP_LOGEV_SHUTDOWN = 4, +- XCP_LOGEV_SELFTEST = 5, +- XCP_LOGEV_DOM_IMPORT = 6, /* import sec-relevant data to domain */ +- XCP_LOGEV_DOM_EXPORT = 7, /* export sec-relevant data from domain */ +- XCP_LOGEV_FAILURE = 8, +- XCP_LOGEV_GENERATE = 9, +- XCP_LOGEV_REMOVE = 10, +- XCP_LOGEV_SPECIFIC = 11, /* obtain meaning elsewhere */ +- XCP_LOGEV_STATE_IMPORT = 12, /* import to card/multiple domains */ +- XCP_LOGEV_STATE_EXPORT = 13, /* export from card/multiple domains */ +- /* [after successful export] */ +- XCP_LOGEV_IMPORT = 14, /* key/state import (UnwrapKey) */ +- /* fields provide more context */ +- XCP_LOGEV_EXPORT = 15, /* key/state import (WrapKey) */ +- /* fields provide more context */ +- +- /*--- specific events (any including XCP_LOGEV_SPEC) ---------*/ +- +- XCP_LOGSPEV_TRANSACT_ZEROIZE = XCP_LOGEV_SPEC +1, +- /* zeroize card by transaction */ +- +- XCP_LOGSPEV_KAT_FAILED = XCP_LOGEV_SPEC +2, +- /* algorithm selftest failed */ +- +- XCP_LOGSPEV_KAT_COMPLETED = XCP_LOGEV_SPEC +3, +- /* algorithm selftests completed */ +- /* redundant; logged only to */ +- /* provide specific event */ +- +- XCP_LOGSPEV_EARLY_Q_START = XCP_LOGEV_SPEC +4, +- /* subsequent events were found */ +- /* in the early-event queue. */ +- /* their timestamps are only */ +- /* approximate; order is correct */ +- +- XCP_LOGSPEV_EARLY_Q_END = XCP_LOGEV_SPEC +5, +- /* early-even queue processing ends. */ +- /* subsequent events are through */ +- /* regular auditing, with valid */ +- /* timestamps and ordering. */ +- +- XCP_LOGSPEV_AUDIT_NEWCHAIN = XCP_LOGEV_SPEC +6, +- /* audit state is corrupted; removed. */ +- /* generating new instance and start */ +- /* new chain as a replacement */ +- +- XCP_LOGSPEV_TIMECHG_BEFORE = XCP_LOGEV_SPEC +7, +- /* time change: original time */ +- +- XCP_LOGSPEV_TIMECHG_AFTER = XCP_LOGEV_SPEC +8, +- /* time change: updated time */ +- +- XCP_LOGSPEV_MODSTIMPORT_START = XCP_LOGEV_SPEC +9, +- /* accepted full-state import */ +- /* data structure */ +- /* starting update procedure */ +- +- XCP_LOGSPEV_MODSTIMPORT_FAIL = XCP_LOGEV_SPEC +10, +- /* rejected import structure */ +- /* issued after initial verify; */ +- /* indicates some inconsistency */ +- /* of import data structures */ +- +- XCP_LOGSPEV_MODSTIMPORT_END = XCP_LOGEV_SPEC +11, +- /* completed full-state import */ +- +- XCP_LOGSPEV_MODSTEXPORT_START = XCP_LOGEV_SPEC +12, +- /* started full-state export */ +- /* see also: XCP_LOGEV_STATE_EXPORT */ +- +- XCP_LOGSPEV_MODSTEXPORT_FAIL = XCP_LOGEV_SPEC +13 +- /* full-state export did not complete */ +-} XCP_LogEvent_t; ++ /* functionality categories: keep within uint16_t range */ ++#define XCP_LOGEV_QUERY 0 ++#define XCP_LOGEV_FUNCTION 1 ++#define XCP_LOGEV_ADMFUNCTION 2 ++#define XCP_LOGEV_STARTUP 3 ++#define XCP_LOGEV_SHUTDOWN 4 ++#define XCP_LOGEV_SELFTEST 5 ++#define XCP_LOGEV_DOM_IMPORT 6 /* import sec-relevant data to */ ++ /* domain */ ++#define XCP_LOGEV_DOM_EXPORT 7 /* export sec-relevant data from */ ++ /* domain */ ++#define XCP_LOGEV_FAILURE 8 ++#define XCP_LOGEV_GENERATE 9 ++#define XCP_LOGEV_REMOVE 10 ++#define XCP_LOGEV_SPECIFIC 11 /* obtain meaning elsewhere */ ++#define XCP_LOGEV_STATE_IMPORT 12 /* import to card/multiple domains */ ++#define XCP_LOGEV_STATE_EXPORT 13 /* export from card/multiple */ ++ /* domains */ ++ /* [after successful export] */ ++#define XCP_LOGEV_IMPORT 14 /* key/state import (UnwrapKey) */ ++ /* fields provide more context */ ++#define XCP_LOGEV_EXPORT 15 /* key/state import (WrapKey) */ ++ /* fields provide more context */ ++ ++ /*--- specific events (any including XCP_LOGEV_SPEC) ---------*/ ++ ++#define XCP_LOGSPEV_TRANSACT_ZEROIZE (XCP_LOGEV_SPEC +1) ++ /* zeroize card by transaction */ ++ ++#define XCP_LOGSPEV_KAT_FAILED (XCP_LOGEV_SPEC +2) ++ /* algorithm selftest failed */ ++ ++#define XCP_LOGSPEV_KAT_COMPLETED (XCP_LOGEV_SPEC +3) ++ /* algorithm selftests completed */ ++ /* redundant; logged only to */ ++ /* provide specific event */ ++ ++#define XCP_LOGSPEV_EARLY_Q_START (XCP_LOGEV_SPEC +4) ++ /* subsequent events were found */ ++ /* in the early-event queue. */ ++ /* their timestamps are only */ ++ /* approximate; order is correct */ ++ ++#define XCP_LOGSPEV_EARLY_Q_END (XCP_LOGEV_SPEC +5) ++ /* early-even queue processing ends. */ ++ /* subsequent events are through */ ++ /* regular auditing, with valid */ ++ /* timestamps and ordering. */ ++ ++#define XCP_LOGSPEV_AUDIT_NEWCHAIN (XCP_LOGEV_SPEC +6) ++ /* audit state is corrupted; removed. */ ++ /* generating new instance and start */ ++ /* new chain as a replacement */ ++ ++#define XCP_LOGSPEV_TIMECHG_BEFORE (XCP_LOGEV_SPEC +7) ++ /* time change: original time */ ++ ++#define XCP_LOGSPEV_TIMECHG_AFTER (XCP_LOGEV_SPEC +8) ++ /* time change: updated time */ ++ ++#define XCP_LOGSPEV_MODSTIMPORT_START (XCP_LOGEV_SPEC +9) ++ /* accepted full-state import */ ++ /* data structure */ ++ /* starting update procedure */ ++ ++#define XCP_LOGSPEV_MODSTIMPORT_FAIL (XCP_LOGEV_SPEC +10) ++ /* rejected import structure */ ++ /* issued after initial verify; */ ++ /* indicates some inconsistency */ ++ /* of import data structures */ ++ ++#define XCP_LOGSPEV_MODSTIMPORT_END (XCP_LOGEV_SPEC +11) ++ /* completed full-state import */ ++ ++#define XCP_LOGSPEV_MODSTEXPORT_START (XCP_LOGEV_SPEC +12) ++ /* started full-state export */ ++ /* see also: XCP_LOGEV_STATE_EXPORT */ ++ ++#define XCP_LOGSPEV_MODSTEXPORT_FAIL (XCP_LOGEV_SPEC +13) + + + typedef enum { +@@ -863,21 +727,19 @@ typedef enum { + } XCP_LogSystem_t; + + /* bitmask of audit-event flags (mainly optional fields) */ +-typedef enum { +- XCP_LOGFL_WK_PRESENT = 0x80000000, +- XCP_LOGFL_COMPLIANCE_PRESENT = 0x40000000, /* ...of hosting domain */ +- XCP_LOGFL_FINALWK_PRESENT = 0x20000000, +- XCP_LOGFL_KEYREC0_PRESENT = 0x10000000, +- XCP_LOGFL_KEYREC0_COMPL = 0x08000000, /* key0 compliance */ +- XCP_LOGFL_KEYREC1_PRESENT = 0x04000000, +- XCP_LOGFL_KEYREC2_PRESENT = 0x02000000, +- XCP_LOGFL_FINTIME_PRESENT = 0x01000000, +- XCP_LOGFL_SALT0_PRESENT = 0x00800000, +- XCP_LOGFL_SALT1_PRESENT = 0x00400000, +- XCP_LOGFL_SALT2_PRESENT = 0x00200000, +- XCP_LOGFL_REASON_PRESENT = 0x00100000, +- XCP_LOGFL_SEQPRF_PRESENT = 0x00080000 +-} XCP_LogFlags_t; ++#define XCP_LOGFL_WK_PRESENT 0x80000000 ++#define XCP_LOGFL_COMPLIANCE_PRESENT 0x40000000 /* ...of hosting domain */ ++#define XCP_LOGFL_FINALWK_PRESENT 0x20000000 ++#define XCP_LOGFL_KEYREC0_PRESENT 0x10000000 ++#define XCP_LOGFL_KEYREC0_COMPL 0x08000000 /* key0 compliance */ ++#define XCP_LOGFL_KEYREC1_PRESENT 0x04000000 ++#define XCP_LOGFL_KEYREC2_PRESENT 0x02000000 ++#define XCP_LOGFL_FINTIME_PRESENT 0x01000000 ++#define XCP_LOGFL_SALT0_PRESENT 0x00800000 ++#define XCP_LOGFL_SALT1_PRESENT 0x00400000 ++#define XCP_LOGFL_SALT2_PRESENT 0x00200000 ++#define XCP_LOGFL_REASON_PRESENT 0x00100000 ++#define XCP_LOGFL_SEQPRF_PRESENT 0x00080000 + + + +@@ -885,16 +747,26 @@ typedef enum { + typedef enum { + XCP_IMPRKEY_RSA_2048 = 0, + XCP_IMPRKEY_RSA_4096 = 1, +- XCP_IMPRKEY_EC_P256 = 2, /* EC, NIST P-256 */ +- XCP_IMPRKEY_EC_P521 = 3, /* EC, NIST P-521 */ +- XCP_IMPRKEY_EC_BP256r = 4, /* EC, Brainpool BP-256r */ +- XCP_IMPRKEY_EC_BP320r = 5, /* EC, Brainpool BP-320r */ +- XCP_IMPRKEY_EC_BP512r = 6, /* EC, Brainpool BP-512r */ ++ XCP_IMPRKEY_EC_P256 = 2, /* EC, NIST P-256 */ ++ XCP_IMPRKEY_EC_P521 = 3, /* EC, NIST P-521 */ ++ XCP_IMPRKEY_EC_BP256r = 4, /* EC, Brainpool BP-256r */ ++ XCP_IMPRKEY_EC_BP320r = 5, /* EC, Brainpool BP-320r */ ++ XCP_IMPRKEY_EC_BP512r = 6, /* EC, Brainpool BP-512r */ + XCP_IMPRKEY_RSA_3072 = 7, +- XCP_IMPRKEY_MAX = XCP_IMPRKEY_RSA_3072 ++ XCP_IMPRKEY_EC_P521_TKE = 8, /* EC, NIST P-521 (TKE propr. sign.) */ ++ XCP_IMPRKEY_MAX = XCP_IMPRKEY_EC_P521_TKE + } XCP_IMPRKEY_t; + + ++//--- OA key types ---------------------------------------------------- ++typedef enum { ++ XCP_OAKEY_RSA_4096 = 1, /* RSA 4096 bit */ ++ XCP_OAKEY_ECC_P521 = 2, /* ECC NIST P-521 */ ++ XCP_OAKEY_DIL_87R2 = 3, /* DIL 8-7 R2 */ ++ XCP_OAKEY_MAX = XCP_OAKEY_DIL_87R2 ++} XCP_OAKEY_t; ++ ++ + + //--- retained key structures --------------------------- + // initial loading: +@@ -914,6 +786,7 @@ typedef struct CK_RETAINEDKEY_PARAMS { + + + ++ + //--- operation categories (perf. measurement) ----------------------------- + typedef enum { + XCP_OPCAT_ASYMM_SLOW = 1, +@@ -951,7 +824,12 @@ typedef enum { + /* never be enabled due to */ + /* policy-minimum restrictions. */ + +- CK_IBM_XCPQ_MAX = CK_IBM_XCPQ_CP_BLACKLIST ++ CK_IBM_XCPQ_PQC_STRENGTHS ++ = 14, /* supported quantum safe levels*/ ++ /* of strength */ ++ /* see: XCP_PQCStrength_t */ ++ ++ CK_IBM_XCPQ_MAX = CK_IBM_XCPQ_PQC_STRENGTHS + } CK_IBM_XCPQUERY_t; + + //--- module sub-query sub-types -------------------------------------------- +@@ -966,6 +844,9 @@ typedef enum { + /* attributes bitmask */ + CK_IBM_XCPMSQ_ATTRS = 6, /* number of supported */ + /* administrative attributes */ ++ CK_IBM_XCPMSQ_MOD_V2 = 7, /* add version two fields to */ ++ /* module query */ ++ CK_IBM_XCPMSQ_MAX = CK_IBM_XCPMSQ_MOD_V2 + } CK_IBM_XCPMSUBQUERY_t; + + // byte sizes of queries which are not represented as structures +@@ -976,48 +857,34 @@ typedef enum { + + #define CK_IBM_XCP_HOSTQ_IDX 0xff000000 /* host-only queries index, min. */ + +-typedef enum { +- CK_IBM_XCPHQ_COUNT = 0xff000000, /* number of host-query indexes */ +- /* including this type itself */ +- CK_IBM_XCPHQ_VERSION = 0xff000001, /* host-specific package version */ +- /* such as packaging library ID */ +- CK_IBM_XCPHQ_VERSION_HASH = 0xff000002, +- /* assumed-unique identifier of */ +- /* host code, such as version- */ +- /* identifying cryptographic hash */ +- /* (library signature field...) */ +- CK_IBM_XCPHQ_DIAGS = 0xff000003, /* host code diagnostic level */ +- /* 0 if non-diagnostics host code */ +- CK_IBM_XCPHQ_HVERSION = 0xff000004, /* human-readable host version */ +- /* identification (recommended: */ +- /* UTF-8 string) */ +- CK_IBM_XCPHQ_TGT_MODE = 0xff000005, /* host targeting modes */ +- /* returns supported target modes */ +- /* as bitmask */ +- /* if not available only compat */ +- /* target mode is in use */ +- /* See CK_IBM_XCPHQ_TGT_MODES_t */ +- CK_IBM_XCPHQ_ECDH_DERPRM = 0xff000006, +- /* ECDH DeriveKey parameter usage */ +- /* is being enforced with hostlib */ +- /* version */ +- /**/ +- CK_IBM_XCPHQ_TOL_MODES = 0xff000007,/* check if toleration mode for */ +- /* key attribute checking is */ +- /* enabled */ +- /* If it is, some attribute values*/ +- /* are always set to correct */ +- /* values automatically - */ +- CK__IBM_XCPHQ_MAX = CK_IBM_XCPHQ_TGT_MODE +-} CK_IBM_XCPHQUERY_t; +- +-#define CK_IBM_XCPHQ_ATTR_TOL_ENABLED 0x00000001 +- /* flag to indicate that toleration */ +- /* mode for key attribute checking */ +- /* is enabled i.e. all attributes */ +- /* that may no longer be set CK_TRUE */ +- /* using a CEX8S HSM will be reset */ +- /* to CK_FALSE automatically */ ++#define CK_IBM_XCPHQ_COUNT 0xff000000 /* number of host-query indexes */ ++ /* including this type itself */ ++#define CK_IBM_XCPHQ_VERSION 0xff000001 /* host-specific package version */ ++ /* such as packaging library ID */ ++#define CK_IBM_XCPHQ_VERSION_HASH 0xff000002 ++ /* assumed-unique identifier of */ ++ /* host code, such as version- */ ++ /* identifying cryptographic hash*/ ++ /* (library signature field...) */ ++#define CK_IBM_XCPHQ_DIAGS 0xff000003 /* host code diagnostic level */ ++ /* 0 if non-diagnostics host code*/ ++#define CK_IBM_XCPHQ_HVERSION 0xff000004 /* human-readable host version */ ++ /* identification (recommended: */ ++ /* UTF-8 string) */ ++#define CK_IBM_XCPHQ_TGT_MODE 0xff000005 /* host targeting modes */ ++ /* returns supported target modes*/ ++ /* as bitmask */ ++ /* if not available only compat */ ++ /* target mode is in use */ ++ /* See CK_IBM_XCPHQ_TGT_MODES_t */ ++#define CK_IBM_XCPHQ_ECDH_DERPRM 0xff000006 ++ /* ECDH DeriveKey parameter usage*/ ++ /* is being enforced with hostlib*/ ++ /* version */ ++ /**/ ++ ++#define CK__IBM_XCPHQ_MAX CK_IBM_XCPHQ_TGT_MODE ++ + + typedef enum { + CK_IBM_XCPHQ_TGT_MODES_TGTGRP = 1, /* target groups are supported */ +@@ -1040,7 +907,6 @@ typedef enum { + CK_IBM_XCPXQ_IMPEXP_CAPS = 7, /* capability for WK and state */ + /* export / import. See 8.7.1.1.1 */ + /* for more info */ +- CK_IBM_XCPXQ_DOMIMPORT_VER = 7, /* DEPRECATED */ + CK_IBM_XCPXQ_CERT_MAXBYTES = 8, /* bytecount of largest accepted */ + /* administrative certificate, if */ + /* there is an upper limit. 0 if */ +@@ -1058,20 +924,20 @@ typedef enum { + + CK_IBM_XCPXQ_ECDSA_OTHER = 15, /* bitmask of supported, other EC + signing mechanisms */ ++ CK_IBM_XCPXQ_OA_CAP = 16, /* bitmask of supported outbound ++ authority signing mechanisms */ + +- CK_IBM_XCPXQ_MAXIDX = CK_IBM_XCPXQ_ECDSA_OTHER, ++ CK_IBM_XCPXQ_MAXIDX = CK_IBM_XCPXQ_OA_CAP, + } CK_IBM_XCPEXTCAP_t; + + +-typedef enum { +- CK_IBM_DOM_ADMIND = 1, /* administrators present */ +- CK_IBM_DOM_CURR_WK = 2, /* domain has current WK */ +- CK_IBM_DOM_NEXT_WK = 4, /* domain has pending/next WK */ +- CK_IBM_DOM_COMMITTED_NWK = 8, /* next WK is active(committed) */ +- CK_IBM_DOM_IMPRINTED = 0x10, /* has left imprint mode */ +- CK_IBM_DOM_IMPRINTS = 0x80000000, /* enforces imprint mode */ +- CK_IBM_DOM_PROTKEY_ALLOW = 0x20 /* policies allow protected key */ +-} CK_IBM_DOMAINQ_t; ++#define CK_IBM_DOM_ADMIND 1 /* administrators present */ ++#define CK_IBM_DOM_CURR_WK 2 /* domain has current WK */ ++#define CK_IBM_DOM_NEXT_WK 4 /* domain has pending/next WK */ ++#define CK_IBM_DOM_COMMITTED_NWK 8 /* next WK is active(committed) */ ++#define CK_IBM_DOM_IMPRINTED 0x10 /* has left imprint mode */ ++#define CK_IBM_DOM_IMPRINTS 0x80000000 /* enforces imprint mode */ ++#define CK_IBM_DOM_PROTKEY_ALLOW 0x20 /* policies allow protected key */ + // + // note: CK_IBM_DOM_IMPRINTS will go away + +@@ -1142,34 +1008,54 @@ typedef CK_IBM_XCPAPI_INFO CK_PTR CK_IBM_XCPAPI_INFO_PTR; + CK_BYTE infra_count; \ + CK_BYTE comp_count; + ++#define CK_IBM_XCP_ADMATTRLIST_MEMBER_V2 \ ++ CK_BYTE perm_ext01_modes[ 8 ]; ++ ++#define CK_IBM_XCP_ADMATTRCOUNT_MEMBER_V2 \ ++ CK_BYTE perm_ext01_count; ++ + // see chapter 5.1.1. in the wire spec + typedef struct CK_IBM_XCP_INFO { +- CK_IBM_XCP_INFO_MEMBERS_V0; ++ CK_IBM_XCP_INFO_MEMBERS_V0 + } CK_IBM_XCP_INFO; + // + // see chapter 5.1.1. in the wire spec + typedef struct CK_IBM_XCP_INFO_V1 { +- CK_IBM_XCP_INFO_MEMBERS_V0; +- CK_IBM_XCP_DESCINFO_MEMBER; ++ CK_IBM_XCP_INFO_MEMBERS_V0 ++ CK_IBM_XCP_DESCINFO_MEMBER + CK_BYTE fnid_mask[ 16 ]; + CK_BYTE fnid_count; +- CK_IBM_XCP_ADMATTRLIST_MEMBER; +- CK_IBM_XCP_ADMATTRCOUNT_MEMBER; ++ CK_IBM_XCP_ADMATTRLIST_MEMBER ++ CK_IBM_XCP_ADMATTRCOUNT_MEMBER + } CK_IBM_XCP_INFO_V1; + // ++// see chapter 5.1.1. in the wire spec ++typedef struct CK_IBM_XCP_INFO_V2 { ++ CK_IBM_XCP_INFO_MEMBERS_V0 ++ CK_IBM_XCP_DESCINFO_MEMBER ++ CK_BYTE fnid_mask[ 16 ]; ++ CK_BYTE fnid_count; ++ CK_IBM_XCP_ADMATTRLIST_MEMBER ++ CK_IBM_XCP_ADMATTRCOUNT_MEMBER ++ CK_IBM_XCP_ADMATTRLIST_MEMBER_V2 ++ CK_IBM_XCP_ADMATTRCOUNT_MEMBER_V2 ++} CK_IBM_XCP_INFO_V2; ++// + // see chapter 5.1.1.1. in the wire spec + typedef struct CK_IBM_XCP_DESCINFO { +- CK_IBM_XCP_DESCINFO_MEMBER; ++ CK_IBM_XCP_DESCINFO_MEMBER + } CK_IBM_XCP_DESCINFO; + // + // see chapter 5.1.1.3. in the wire spec + typedef struct CK_IBM_XCP_ATTRLIST { + CK_IBM_XCP_ADMATTRLIST_MEMBER ++ CK_IBM_XCP_ADMATTRLIST_MEMBER_V2 + } CK_IBM_XCP_ATTRLIST; + // + // see chapter 5.1.1.3. in the wire spec + typedef struct CK_IBM_XCP_ATTRCOUNT { + CK_IBM_XCP_ADMATTRCOUNT_MEMBER ++ CK_IBM_XCP_ADMATTRCOUNT_MEMBER_V2 + } CK_IBM_XCP_ATTRCOUNT; + + /**/ +@@ -1177,14 +1063,18 @@ typedef struct CK_IBM_XCP_ATTRCOUNT { + { 0,0, {0,0,},{0,0,}, {0,},{0,},{0,}, {0,},{0,}, \ + 0,0, 0,0, 0,0,0,0,0,0,0, 0,0,0, } + +-typedef CK_IBM_XCP_INFO CK_PTR CK_IBM_XCP_INFO_PTR; +-typedef CK_IBM_XCP_INFO_V1 CK_PTR CK_IBM_XCP_INFO_V1_PTR; +-typedef CK_IBM_XCP_DESCINFO CK_PTR CK_IBM_XCP_DESCINFO_PTR; +-typedef CK_IBM_XCP_ATTRLIST CK_PTR CK_IBM_XCP_ATTRLIST_PTR; +-typedef CK_IBM_XCP_ATTRCOUNT CK_PTR CK_IBM_XCP_ATTRCOUNT_PTR; ++#define CK_IBM_XCP_INFO_V2_INIT0 \ ++ { 0,0, {0,0,},{0,0,}, {0,},{0,},{0,}, {0,},{0,}, \ ++ 0,0, 0,0, 0,0,0,0,0,0,0, 0,0,0, \ ++ {0}, {0}, {0}, 0, {0}, {0}, {0}, 0, 0, 0, \ ++ {0}, 0} + +-// DEPRECATED - use CK_IBM_XCP_INFO +-typedef CK_IBM_XCP_INFO CK_IBM_EP11_INFO; ++typedef CK_IBM_XCP_INFO CK_PTR CK_IBM_XCP_INFO_PTR; ++typedef CK_IBM_XCP_INFO_V1 CK_PTR CK_IBM_XCP_INFO_V1_PTR; ++typedef CK_IBM_XCP_INFO_V2 CK_PTR CK_IBM_XCP_INFO_V2_PTR; ++typedef CK_IBM_XCP_DESCINFO CK_PTR CK_IBM_XCP_DESCINFO_PTR; ++typedef CK_IBM_XCP_ATTRLIST CK_PTR CK_IBM_XCP_ATTRLIST_PTR; ++typedef CK_IBM_XCP_ATTRCOUNT CK_PTR CK_IBM_XCP_ATTRCOUNT_PTR; + + typedef struct CK_IBM_DOMAIN_INFO { + CK_ULONG domain; +@@ -1227,9 +1117,31 @@ typedef enum { + } CK_IBM_BTC_t; + + ++typedef enum { ++ XCP_KEM_ENCAPSULATE = 1, ++ XCP_KEM_DECAPSULATE = 2, ++} XCP_KEM_t; ++ ++typedef CK_ULONG CK_IBM_KEM_MODE; ++ ++#define CK_IBM_KEM_ENCAPSULATE XCP_KEM_ENCAPSULATE ++#define CK_IBM_KEM_DECAPSULATE XCP_KEM_DECAPSULATE ++ ++typedef struct XCP_KYBER_KEM_PARAMS { ++ CK_ULONG version; ++ CK_IBM_KEM_MODE mode; ++ CK_ULONG kdf; ++ CK_BBOOL prepend; ++ CK_BYTE *pCipher; ++ CK_ULONG ulCipherLen; ++ CK_BYTE *pSharedData; ++ CK_ULONG ulSharedDataLen; ++ CK_BYTE *pBlob; ++ CK_ULONG ulBlobLen; ++} XCP_KYBER_KEM_PARAMS_t; ++ ++ + //--- attribute constants -------------------------------------------------- +-// keep in sync with unprivileged object (XCP_BLOB_NO_RIGHTS) +-// table is parsed by automated tools; please do not change layout + // + typedef enum { + XCP_BLOB_EXTRACTABLE = 1, +@@ -1309,8 +1221,8 @@ typedef enum { + /* CP sets get padded to multiple */ + + typedef enum { +- XCP_CPB_ADD_CPBS = 0, // allow addition (activation) of CP bits +- XCP_CPB_DELETE_CPBS = 1, // disable activating further control points ++ XCP_CPB_ADD_CPBS = 0, // allow activation of CP bits ++ XCP_CPB_DELETE_CPBS = 1, // allow deactivation of CP bits + // (remove both ADD_CPBs and DELETE_CPBs + // to make unit read-only) + +@@ -1424,8 +1336,12 @@ typedef enum { + + XCP_CPB_COMPAT_LEGACY_SHA3 = 70, // allow fall-back to non-standard + // SHA3 defaults +- +- XCP_CPBITS_MAX = XCP_CPB_COMPAT_LEGACY_SHA3 // marks last used CPB ++ XCP_CPB_DSA_PARAMETER_GEN = 71, // allow DSA/PQG parameter generation ++ XCP_CPB_DERIVE_NON_AB_KEYS = 72, // allow the derivation of a non-AB or raw ++ // from an AB key. Only relevant if ++ // XCP_CPB_NON_ATTRBOUND ++ XCP_CPBITS_MAX = XCP_CPB_DERIVE_NON_AB_KEYS ++ // marks last used CPB + } XCP_CPbit_t; + + +@@ -1623,7 +1539,7 @@ typedef enum { + // blob/SPKI + XCP_ADM_DOMAINS_ZEROIZE = 36, // multi-domain zeroize + // XCP_ADM_EXPORT_NEXT_WK = 38, // placeholder, find real entry above +- XCP_ADM_SESSIONS_DROP = 39, // drop all open sessions ++ XCP_ADM_SESSION_REMOVE = 39, // remove all or selected sessions + + XCP_ADMQ_ADMIN = 1 | XCP_ADM_QUERY, // admin SKI/cert + XCP_ADMQ_DOMADMIN = 2 | XCP_ADM_QUERY, // domain adm. SKI/cert +@@ -1648,10 +1564,11 @@ typedef enum { + // current migration importer + XCP_ADMQ_AUDIT_STATE = 16 | XCP_ADM_QUERY, + // audit state entry or event count +- XCP_ADMQ_LASTCMD_DOM_MASK = 17 | XCP_ADM_QUERY ++ XCP_ADMQ_LASTCMD_DOM_MASK = 17 | XCP_ADM_QUERY, + // domain-bitmask affected by last + // state-related administrative + // command (export, import) ++ XCP_ADMQ_SVCADMIN = 18 | XCP_ADM_QUERY, // svc admin SKI/cert + } XCP_Admcmd_t; + + typedef enum { +@@ -1660,7 +1577,8 @@ typedef enum { + XCP_ADMINT_PERMS = 3, // permissions + XCP_ADMINT_MODE = 4, // operating mode + XCP_ADMINT_STD = 5, // standards' compliance +- XCP_ADMINT_IDX_MAX = XCP_ADMINT_STD ++ XCP_ADMINT_PERMS_EXT01 = 6, // permissions (extension #1) ++ XCP_ADMINT_IDX_MAX = XCP_ADMINT_PERMS_EXT01 + } XCP_AdmAttr_t; + + #define XCP_ADMIN_ATTRIBUTE_COUNT XCP_ADMINT_IDX_MAX +@@ -1719,6 +1637,29 @@ typedef enum { + #define XCP_ADMP_CHG_DO_NOT_DISTURB \ + 0x80000000 // allow changing the corresponding + // Do Not Disturb bit ++ ++// ++// permissions (extension 01) ++// ++#define XCP_ADMP_NQS_OA_SIGNATURES 1 // enable non-quantum-safe OA signat. ++#define XCP_ADMP_QS_OA_SIGNATURES 2 // enable quantum-safe OA signatures ++#define XCP_ADMP_NQS_ADM_SIGNATURES 4 // enable non-quantum-safe adm signat. ++#define XCP_ADMP_QS_ADM_SIGNATURES 8 // enable quantum-safe adm signatures ++ ++#define XCP_ADMP_CHG_NQS_OA_SIGNATURES \ ++ 0x10000 // allow changing the corresponding ++ // non-quantum-safe OA signature bit ++#define XCP_ADMP_CHG_QS_OA_SIGNATURES \ ++ 0x20000 // allow changing the corresponding ++ // quantum-safe OA signature bit ++#define XCP_ADMP_CHG_NQS_ADM_SIGNATURES \ ++ 0x40000 // allow changing the corresponding ++ // non-quantum-safe adm signature bit ++#define XCP_ADMP_CHG_QS_ADM_SIGNATURES \ ++ 0x80000 // allow changing the corresponding ++ // quantum-safe adm signature bit ++ ++ + // + // if adding other change-control bits, also update: + // prevented_perm_changes() +@@ -1754,15 +1695,49 @@ typedef enum { + XCP_ADMP_STATE_1PART | \ + XCP_ADMP_DO_NOT_DISTURB) + // ++// CHGBITS / PERMS (extension 01) ++#define XCP_ADMP__CHGBITS_EXT01 \ ++ (XCP_ADMP_CHG_NQS_OA_SIGNATURES | \ ++ XCP_ADMP_CHG_QS_OA_SIGNATURES | \ ++ XCP_ADMP_CHG_NQS_ADM_SIGNATURES | \ ++ XCP_ADMP_CHG_QS_ADM_SIGNATURES) ++// ++#define XCP_ADMP__PERMS_EXT01 \ ++ (XCP_ADMP_NQS_OA_SIGNATURES | \ ++ XCP_ADMP_QS_OA_SIGNATURES | \ ++ XCP_ADMP_NQS_ADM_SIGNATURES | \ ++ XCP_ADMP_QS_ADM_SIGNATURES) ++// ++#define XCP__ADMP_SUP_EXT01 (XCP_ADMP__PERMS_EXT01 | \ ++ XCP_ADMP__CHGBITS_EXT01) ++// ++// + #define XCP_ADMP__DEFAULT \ + (XCP_ADMP_WK_IMPORT | \ + XCP_ADMP_1SIGN | \ + XCP_ADMP__CHGBITS) + // ++#define XCP_ADMP__DEFAULT_EXT01 \ ++ (XCP_ADMP__CHGBITS_EXT01 | \ ++ XCP_ADMP_NQS_OA_SIGNATURES | \ ++ XCP_ADMP_QS_OA_SIGNATURES | \ ++ XCP_ADMP_NQS_ADM_SIGNATURES | \ ++ XCP_ADMP_QS_ADM_SIGNATURES) ++// + #define XCPM_ADMP__MODULE_DEFAULTS_MASK \ + (XCP_ADMP_DO_NOT_DISTURB | \ + XCP_ADMP_CHG_DO_NOT_DISTURB) + // ++#define XCPM_ADMP__MODULE_DEFAULTS_MASK_EXT01 \ ++ (XCP_ADMP_NQS_OA_SIGNATURES | \ ++ XCP_ADMP_CHG_NQS_OA_SIGNATURES | \ ++ XCP_ADMP_QS_OA_SIGNATURES | \ ++ XCP_ADMP_CHG_QS_OA_SIGNATURES | \ ++ XCP_ADMP_NQS_ADM_SIGNATURES | \ ++ XCP_ADMP_CHG_NQS_ADM_SIGNATURES | \ ++ XCP_ADMP_QS_ADM_SIGNATURES | \ ++ XCP_ADMP_CHG_QS_ADM_SIGNATURES) ++// + #define XCP_ADMP__CARD_MASK \ + ~(XCP_ADMP_WK_IMPORT | \ + XCP_ADMP_WK_EXPORT | \ +@@ -1775,6 +1750,9 @@ typedef enum { + XCP_ADMP_CHG_WK_RANDOM | \ + XCP_ADMP_CHG_CP_1SIGN) + // ++#define XCP_ADMP__CARD_MASK_EXT01 \ ++ ~(0U) ++// + #define XCP_ADMP__DOM_MASK \ + ~(XCP_ADMP_NO_DOMAIN_IMPRINT | \ + XCP_ADMP_STATE_IMPORT | \ +@@ -1784,6 +1762,12 @@ typedef enum { + XCP_ADMP_CHG_ST_EXPORT | \ + XCP_ADMP_CHG_ST_1PART) + // ++#define XCP_ADMP__DOM_MASK_EXT01 \ ++ ~(0U) ++// ++ ++#define XCP__ADMP_SUP ((XCP_ADMP__PERMS | XCP_ADMP__CHGBITS) &\ ++ ~XCP_ADMP_NOT_SUP) + + // card modes + #define XCP_ADMM_AUTHENTICATED 1U // no longer in imprint mode +@@ -1838,6 +1822,8 @@ typedef enum { + XCP_ADMM_STR_192BIT | \ + XCP_ADMM_STR_256BIT) + ++#define XCP__ADMM_SUP XCP_ADMM__MASK ++ + // specific standards' compliance suites + #define XCP_ADMS_FIPS2009 1 // NIST, 80+ bits, -2011.01.01. + #define XCP_ADMS_BSI2009 2 // BSI , 80+ bits, -2011.01.01. +@@ -1850,18 +1836,74 @@ typedef enum { + // + #define XCP_ADMS_BSICC2017 0x40 // BSI, EP11 Common Criteria EAL4 2017 + // ++#define XCP_ADMS_FIPS2021 0x80 // NIST SP800-131A REV.2, 2021.01.01 ++#define XCP_ADMS_FIPS2024 0x100 // NIST SP800-131A REV.2, 2024.01.01 ++#define XCP_ADMS_ADM_FIPS2021 0x200 // NIST SP800-131A REV.2, 2021.01.01 + + #define XCP_ADMS__ALL \ + (XCP_ADMS_FIPS2009 | \ + XCP_ADMS_BSI2009 | \ + XCP_ADMS_FIPS2011 | \ + XCP_ADMS_BSI2011 | \ ++ XCP_ADMS_BSICC2017 | \ ++ XCP_ADMS_FIPS2021 | \ ++ XCP_ADMS_FIPS2024 | \ ++ XCP_ADMS_ADM_FIPS2021) ++ ++#define XCP_ADMS__SUPP (XCP_ADMS__ALL & \ ++ ~(XCP_ADMS_FIPS2021 | \ ++ XCP_ADMS_ADM_FIPS2021 | \ ++ XCP_ADMS_FIPS2024)) ++ ++// The following 'legacy' defines are used as default 'supported bit masks' ++// for older devices that do not have native bit masks for that purpose. ++// Note: If supported bits are not present, the import of these bits are ++// skipped and the default values will be kept. ++#define XCP__ADMP_SUP_LEGACY \ ++ (XCP_ADMP_WK_IMPORT | \ ++ XCP_ADMP_WK_EXPORT | \ ++ XCP_ADMP_WK_1PART | \ ++ XCP_ADMP_WK_RANDOM | \ ++ XCP_ADMP_1SIGN | \ ++ XCP_ADMP_CP_1SIGN | \ ++ XCP_ADMP_ZERO_1SIGN | \ ++ XCP_ADMP_NO_DOMAIN_IMPRINT | \ ++ XCP_ADMP_STATE_IMPORT | \ ++ XCP_ADMP_STATE_EXPORT | \ ++ XCP_ADMP_STATE_1PART | \ ++ XCP_ADMP_CHG_WK_IMPORT | \ ++ XCP_ADMP_CHG_WK_EXPORT | \ ++ XCP_ADMP_CHG_WK_1PART | \ ++ XCP_ADMP_CHG_WK_RANDOM | \ ++ XCP_ADMP_CHG_SIGN_THR | \ ++ XCP_ADMP_CHG_REVOKE_THR | \ ++ XCP_ADMP_CHG_1SIGN | \ ++ XCP_ADMP_CHG_CP_1SIGN | \ ++ XCP_ADMP_CHG_ZERO_1SIGN | \ ++ XCP_ADMP_CHG_ST_IMPORT | \ ++ XCP_ADMP_CHG_ST_EXPORT | \ ++ XCP_ADMP_CHG_ST_1PART) ++ ++#define XCP__ADMM_SUP_LEGACY \ ++ (XCP_ADMM_AUTHENTICATED | \ ++ XCP_ADMM_EXTWNG | \ ++ XCP_ADMM_WKCLEAN_EXTWNG | \ ++ XCP_ADMM_BATT_LOW | \ ++ XCP_ADMM_API_ACTIVE) ++ ++#define XCP_ADMS__ALL_LEGACY \ ++ (XCP_ADMS_FIPS2009 | \ ++ XCP_ADMS_BSI2009 | \ ++ XCP_ADMS_FIPS2011 | \ ++ XCP_ADMS_BSI2011 | \ + XCP_ADMS_BSICC2017) + ++#define XCP__ADMP_SUP_EXT01_LEGACY (0) ++ + // has compliance any BSI mode +-#define XCP_ADMS_IS_BSI(mode) (!!(mode & (XCP_ADMS_BSI2009 | \ +- XCP_ADMS_BSI2011 | \ +- XCP_ADMS_BSICC2017 )) ) ++#define XCP_ADMS_IS_BSI(mode) (!!((mode) & (XCP_ADMS_BSI2009 | \ ++ XCP_ADMS_BSI2011 | \ ++ XCP_ADMS_BSICC2017 )) ) + // mask of supported import keys + // 3k and 4k RSA are not supported + #define XCP_ADM_IMPEXP_KEYS__MASK \ +@@ -1870,7 +1912,8 @@ typedef enum { + (1 << XCP_IMPRKEY_EC_P521) | \ + (1 << XCP_IMPRKEY_EC_BP256r) | \ + (1 << XCP_IMPRKEY_EC_BP320r) | \ +- (1 << XCP_IMPRKEY_EC_BP512r)) ++ (1 << XCP_IMPRKEY_EC_BP512r) | \ ++ (1 << XCP_IMPRKEY_EC_P521_TKE)) + + + /*--- audit chains -------------------------------------------------------*/ +@@ -1922,50 +1965,55 @@ typedef enum { + + /*--- state serialization ------------------------------------------------*/ + typedef enum { +- XCP_STSTYPE_SECTIONCOUNT = 1, // section count +file hash +- XCP_STSTYPE_DOMAINIDX_MAX = 2, // largest index +total nr of domains +- XCP_STSTYPE_DOMAINS_MASK = 3, // bitmask of included domains +- XCP_STSTYPE_SERIALNR = 4, +- XCP_STSTYPE_CREATE_TIME = 5, // file date/time (UTC) +- XCP_STSTYPE_FCV = 6, // public parts of originating FCV +- XCP_STSTYPE_CARD_QUERY = 7, // card state structure (xcp_info) +- XCP_STSTYPE_CARD_ADM_SKIS = 8, // card admin SKIs, packed +- XCP_STSTYPE_CARD_ADM_CERTS = 9, // card admin certificates, packed +- XCP_STSTYPE_DOM_ADM_SKIS = 10, // domain admin SKIs, packed +- XCP_STSTYPE_DOM_ADM_CERTS = 11, // domain admin certificates, packed +- XCP_STSTYPE_DOM_QUERY = 12, // domain state structure (xcp_info) +- XCP_STSTYPE_KPH_SKIS = 13, // count and SKIs of targeted KPHs +- XCP_STSTYPE_CARD_ATTRS = 14, // card attributes +- XCP_STSTYPE_DOM_ATTRS = 15, // domain attributes +- XCP_STSTYPE_CARD_TRANSCTR = 16, // card transaction counter +- XCP_STSTYPE_DOM_TRANSCTR = 17, // domain transaction counter +- XCP_STSTYPE_WK_ENCR_ALG = 18, +- XCP_STSTYPE_WK_ENCR_DATA = 19, +- XCP_STSTYPE_SIG_CERT_COUNT = 20, +- XCP_STSTYPE_SIG_CERTS = 21, +- XCP_STSTYPE_FILE_SIG = 22, +- XCP_STSTYPE_DOM_CPS = 23, // full set of control points +- XCP_STSTYPE_STATE_SALT = 24, +- XCP_STSTYPE_KEYPART = 25, // encrypted keypart (RecipientInfo) +- XCP_STSTYPE_KEYPART_SIG = 26, // signature on encrypted keypart +- XCP_STSTYPE_KEYPART_COUNT = 27, // total number of keyparts +- XCP_STSTYPE_KEYPART_LIMIT = 28, // number of keyparts needed to +- // restore +- XCP_STSTYPE_KEYPART_CERT = 29, // certificate of keypart holder +- XCP_STSTYPE_CERT_AUTH = 30, // certificate authority issuing +- // some of the certificates. This +- // field contains host-supplied data +- // and it is ignored by EP11 itself. +- XCP_STSTYPE_STATE_SCOPE = 31, // restriction on contents of full +- // state structure +- XCP_STSTYPE_MULTIIMPORT_MASK +- = 32, // import only: designate import +- // request to be replicated into +- // multiple recipient domains +- XCP_STSTYPE_CPS_MASK = 33, // bitmask of all CPs supported +- // by the exporting module +- +- XCP_STSTYPE_MAX = XCP_STSTYPE_CPS_MASK ++ XCP_STSTYPE_SECTIONCOUNT = 1, // section count +file hash ++ XCP_STSTYPE_DOMAINIDX_MAX = 2, // largest index +total nr of doms ++ XCP_STSTYPE_DOMAINS_MASK = 3, // bitmask of included domains ++ XCP_STSTYPE_SERIALNR = 4, ++ XCP_STSTYPE_CREATE_TIME = 5, // file date/time (UTC) ++ XCP_STSTYPE_FCV = 6, // public parts of originating FCV ++ XCP_STSTYPE_CARD_QUERY = 7, // V0 card state struct (xcp_info) ++ XCP_STSTYPE_CARD_ADM_SKIS = 8, // card admin SKIs, packed ++ XCP_STSTYPE_CARD_ADM_CERTS = 9, // card admin certificates, packed ++ XCP_STSTYPE_DOM_ADM_SKIS = 10, // domain admin SKIs, packed ++ XCP_STSTYPE_DOM_ADM_CERTS = 11, // domain admin certs, packed ++ XCP_STSTYPE_DOM_QUERY = 12, // domain state struct (xcp_info) ++ XCP_STSTYPE_KPH_SKIS = 13, // count and SKIs of targeted KPHs ++ XCP_STSTYPE_CARD_ATTRS = 14, // card attributes ++ XCP_STSTYPE_DOM_ATTRS = 15, // domain attributes ++ XCP_STSTYPE_CARD_TRANSCTR = 16, // card transaction counter ++ XCP_STSTYPE_DOM_TRANSCTR = 17, // domain transaction counter ++ XCP_STSTYPE_WK_ENCR_ALG = 18, ++ XCP_STSTYPE_WK_ENCR_DATA = 19, ++ XCP_STSTYPE_SIG_CERT_COUNT = 20, ++ XCP_STSTYPE_SIG_CERTS = 21, ++ XCP_STSTYPE_FILE_SIG = 22, ++ XCP_STSTYPE_DOM_CPS = 23, // full set of control points ++ XCP_STSTYPE_STATE_SALT = 24, ++ XCP_STSTYPE_KEYPART = 25, // encrypted keypart (RecipientInfo) ++ XCP_STSTYPE_KEYPART_SIG = 26, // signature on encrypted keypart ++ XCP_STSTYPE_KEYPART_COUNT = 27, // total number of keyparts ++ XCP_STSTYPE_KEYPART_LIMIT = 28, // number of keyparts needed to ++ // restore ++ XCP_STSTYPE_KEYPART_CERT = 29, // certificate of keypart holder ++ XCP_STSTYPE_CERT_AUTH = 30, // certificate authority issuing ++ // some of the certificates. This ++ // field contains host-supplied data ++ // and it is ignored by EP11 itself. ++ XCP_STSTYPE_STATE_SCOPE = 31, // restriction on contents of full ++ // state structure ++ XCP_STSTYPE_MULTIIMPORT_MASK = 32, // import only: designate import ++ // request to be replicated into ++ // multiple recipient domains ++ XCP_STSTYPE_CPS_MASK = 33, // bitmask of all CPs supported ++ // by the exporting module ++ XCP_STSTYPE_CARD_QUERY_V1 = 34, // V1 card state struct (xcp_info) ++ XCP_STSTYPE_CARD_QUERY_V2 = 35, // V2 card state struct (xcp_info) ++ XCP_STSTYPE_CARD_EXTADM_SKIS = 36, // ext. card admin SKIs, packed ++ XCP_STSTYPE_CARD_EXTADM_CERTS = 37, // ext. card admin certs, packed ++ XCP_STSTYPE_DOM_EXTADM_SKIS = 38, // ext. dom admin SKIs, packed ++ XCP_STSTYPE_DOM_EXTADM_CERTS = 39, // ext. dom admin certs, packed ++ ++ XCP_STSTYPE_MAX = XCP_STSTYPE_DOM_EXTADM_CERTS + } XCP_StateSection_t; + + typedef enum { +@@ -1991,7 +2039,11 @@ typedef enum { + // not return KPH certificates + XCP_STWK_KP_NO_OA_CHAIN = 8, // keypart section restricted to + // not return OA certificate chain +- XCP_STDATA_MAX = ((XCP_STWK_KP_NO_OA_CHAIN *2) -1) ++ XCP_STDATA_NQS = 0x20,// allow use of non-quantum-safe ++ // algorithms in KP export/signature ++ XCP_STDATA_QS = 0x40,// allow use of quantum-safe ++ // algorithms in KP export/signature ++ XCP_STDATA_MAX = ((XCP_STDATA_QS *2) -1) + } XCP_StateType_t; + + // type || identifier prefixes +@@ -2124,10 +2176,6 @@ typedef enum { + #define XCP_EC_MAX_ID_BYTES 11 /* fits all EC names/OIDs */ + + +-// Dilithium related OIDs +-#define XCP_PQC_DILITHIUM_65_NAME "\x6\xB\x2B\x6\x1\x4\x1\x2\x82\xB\x1\x6\x5" +-#define XCP_PQC_DILITHIUM_65_NAME_BYTES 13 +- + /*------------------------------------*/ + typedef enum { + XCP_EC_C_NIST_P192 = 1, /* NIST, FP curves */ +@@ -2158,6 +2206,7 @@ typedef enum { + XCP_EC_C_ED25519 = 26, /* ed25519, EDDSA */ + + ++ XCP_EC_C_MAX = 27 /* last possible value */ + + } XCP_ECcurve_t; + +@@ -2175,6 +2224,56 @@ typedef enum { + } XCP_ECCurveGrp_t; + + ++/*--- PQC algorithms ------------------------------------------------------*/ ++ ++// Dilithium related OIDs ++// Round 2 Dilithium-3 (5-4) ++#define XCP_PQC_DILITHIUM_R2_54 "\x6\xb\x2b\x6\x1\x4\x1\x2\x82\xb\x1\x5\x4" ++#define XCP_PQC_DILITHIUM_R2_54_BYTES 13 ++// Round 2 Dilithium-4 (6-5) ++#define XCP_PQC_DILITHIUM_R2_65 "\x6\xb\x2b\x6\x1\x4\x1\x2\x82\xb\x1\x6\x5" ++#define XCP_PQC_DILITHIUM_R2_65_BYTES 13 ++// Round 2 Dilithium-5 (8-7) ++#define XCP_PQC_DILITHIUM_R2_87 "\x6\xb\x2b\x6\x1\x4\x1\x2\x82\xb\x1\x8\x7" ++#define XCP_PQC_DILITHIUM_R2_87_BYTES 13 ++// Round 3 Dilithium-2 (4-4) ++#define XCP_PQC_DILITHIUM_R3_44 "\x6\xb\x2b\x6\x1\x4\x1\x2\x82\xb\x7\x4\x4" ++#define XCP_PQC_DILITHIUM_R3_44_BYTES 13 ++// Round 3 Dilithium-3 (6-5) ++#define XCP_PQC_DILITHIUM_R3_65 "\x6\xb\x2b\x6\x1\x4\x1\x2\x82\xb\x7\x6\x5" ++#define XCP_PQC_DILITHIUM_R3_65_BYTES 13 ++// Round 3 Dilithium-5 (8-7) ++#define XCP_PQC_DILITHIUM_R3_87 "\x6\xb\x2b\x6\x1\x4\x1\x2\x82\xb\x7\x8\x7" ++#define XCP_PQC_DILITHIUM_R3_87_BYTES 13 ++ ++// Round 2 Kyber 512 ++#define XCP_PQC_KYBER_R2_512 "\x6\x9\x2B\x6\x1\x4\x1\x2\x82\xB\x5" ++#define XCP_PQC_KYBER_R2_512_BYTES 11 ++ ++// Round 2 Kyber 768 ++#define XCP_PQC_KYBER_R2_768 "\x6\xB\x2B\x6\x1\x4\x1\x2\x82\xB\x5\x3\x3" ++#define XCP_PQC_KYBER_R2_768_BYTES 13 ++ ++// Round 2 Kyber 1024 ++#define XCP_PQC_KYBER_R2_1024 "\x6\xB\x2B\x6\x1\x4\x1\x2\x82\xB\x5\x4\x4" ++#define XCP_PQC_KYBER_R2_1024_BYTES 13 ++ ++/*------------------------------------*/ ++typedef enum { ++ XCP_PQC_S_DILITHIUM_R2_54 = 1, /* Round-2 Dilithium */ ++ XCP_PQC_S_DILITHIUM_R2_65 = 2, ++ XCP_PQC_S_DILITHIUM_R2_87 = 3, ++ XCP_PQC_S_DILITHIUM_R3_44 = 4, /* Round-3 Dilithium */ ++ XCP_PQC_S_DILITHIUM_R3_65 = 5, ++ XCP_PQC_S_DILITHIUM_R3_87 = 6, ++ XCP_PQC_S_KYBER_R2_512 = 7, /* Round-2 Kyber */ ++ XCP_PQC_S_KYBER_R2_768 = 8, ++ XCP_PQC_S_KYBER_R2_1024 = 9, ++ ++ XCP_PQC_MAX = XCP_PQC_S_KYBER_R2_1024, ++} XCP_PQCStrength_t; ++ ++ + // binary encoding of function/version query + // SEQUENCE { OCTET STRING (0) } + // module responds with API version and build ID +@@ -2343,12 +2442,15 @@ typedef enum { + XCP_DEV_FLIP_ERRORSTATE = 68, // explicitly flip the setting of the + // error state of the module + XCP_DEV_AESKW = 69, +- XCP_DEV_MAX_INDEX = XCP_DEV_AESKW ++ XCP_DEV_UNIT_TEST = 72, // run unit tests on module ++ ++ ++ XCP_DEV_MAX_INDEX = XCP_DEV_UNIT_TEST + } XCP_DEVcmd_t; + // + // upper limit on additional data bytes, for SYS-TEST commands with aux. data + // (arbitrary limit, commands may restict further) +-#define XCP_DEV_MAX_DATABYTES ((size_t) 4096) ++#define XCP_DEV_MAX_DATABYTES ((size_t) 64000) + // + // iteration-count limit applies to any iterative call + // driver[timeout] may interfere; dev-only feature is not otherwise restricted +@@ -2412,23 +2514,207 @@ typedef enum { + #define CKG_IBM_MGF1_SHA3_384 (CKG_VENDOR_DEFINED +3) + #define CKG_IBM_MGF1_SHA3_512 (CKG_VENDOR_DEFINED +4) + ++#if !defined(CKD_VENDOR_DEFINED) ++#define CKD_VENDOR_DEFINED 0x80000000UL ++#endif + ++#define CKD_IBM_HYBRID_NULL (CKD_VENDOR_DEFINED + 0x00000001UL) ++#define CKD_IBM_HYBRID_SHA1_KDF (CKD_VENDOR_DEFINED + 0x00000002UL) ++#define CKD_IBM_HYBRID_SHA224_KDF (CKD_VENDOR_DEFINED + 0x00000003UL) ++#define CKD_IBM_HYBRID_SHA256_KDF (CKD_VENDOR_DEFINED + 0x00000004UL) ++#define CKD_IBM_HYBRID_SHA384_KDF (CKD_VENDOR_DEFINED + 0x00000005UL) ++#define CKD_IBM_HYBRID_SHA512_KDF (CKD_VENDOR_DEFINED + 0x00000006UL) + +-typedef uint64_t target_t; +- +-#define XCP_TGT_INIT ~0UL ++#define XCP_MODEL_CEX4P 4 ++#define XCP_MODEL_CEX5P 5 ++#define XCP_MODEL_CEX6P 6 ++#define XCP_MODEL_CEX7P 7 ++#define XCP_MODEL_CEX8P 8 + +-#define XCP_TGT_FMT "x%016" PRIx64 ++/*--------------------------------------------------------------------------*/ ++// max value for target groups ++#define XCP_MAX_GRPIDX 1024u + +-// initializes the library +-int m_init(void); +-// shutting down the library +-int m_shutdown(void); ++// ++// macros for setting/checking and removing domains from (tgt.mgmt) domain mask ++#define XCPTGTMASK_SET_DOM(mask, domain) \ ++ ((mask)[((domain)/8)] |= (1 << (7-(domain)%8))) ++#define XCPTGTMASK_DOM_IS_SET(mask, domain) \ ++ ((mask)[((domain)/8)] & (1 << (7-(domain)%8))) ++#define XCPTGTMASK_CLR_DOM(mask, domain) \ ++ ((mask)[((domain)/8)] &= ~(1 << (7-(domain)%8))) ++ ++ ++/* flags that can be set for the target tokens ++ * ++ * This flags are domain specific and are therefore called domain flags ++ * ++ * start of flags is >16 Bit. Max value for domains is 0xFF. Should be enough ++ * room for extensions ++ */ ++#define XCP_TGTFL_WCAP 0x10000000 /* Capture wire request in output buffer ++ * without sending it to the module ++ */ ++#define XCP_TGTFL_WCAP_SQ 0x20000000 /* Size query: Return size of request in ++ * output buffer length field ++ */ ++#define XCP_TGTFL_SET_SCMD 0x40000000 /* Protected key special command: Set the ++ * special command flag in the CPRB ++ * header ++ */ ++#define XCP_TGTFL_API_CHKD 0x80000000 /* supported API version of modules in ++ * target (group) has been checked ++ */ ++ ++#define XCP_TGTFL_NO_LOCK 0x01000000 /* target token ignores sequential locks ++ * for target probing ++ */ ++#define XCP_TGTFL_CHK_ATTR 0x02000000 /* reject unknown attribute in attribute ++ * templates with ++ * CKR_TEMPLATE_INCONSISTENT. Default is ++ * to ignore unknown attributes. ++ */ ++#define XCP_TGTFL_SET_ACMD 0x04000000 /* add CPRB admin flag to CPRB header */ ++ ++#define XCP_TGTFL_NO_SPLIT 0x08000000 /* enforce single-shot requests */ ++ ++//-------------------------------------- ++// socket use only ++#define XCP_MAXCONNECTIONS 64 /* max value for active connections */ ++#define XCP_MAX_PORT 0xffff ++ ++// hostname and port value fore one module ++typedef struct XCP_ModuleSocket { ++ char host[ MAX_FNAME_CHARS +1 ]; ++ uint32_t port; ++} *XCP_ModuleSocket_t ; ++ ++ ++//-------------------------------------- ++// diagnostics use only ++typedef struct XCP_DomainPerf { ++ /* perf value of last request per domain ++ * ++ * At the moment unused ++ * */ ++ unsigned int lastperf[ 256 ]; ++} *XCP_DomainPerf_t; ++ ++ ++// current version of XCP_Module structure; host code SHOULD interact with ++// future/past versions, MUST be set by caller before using m_add_module() ++// valid versions are all >0 ++#define XCP_MOD_VERSION 2 ++//-------------------------------------- ++// subsequent communications with a module MAY skip infrastructure-specific ++// fields, such as a query not reporting device handles etc., even if they ++// have been supplied originally when the module has been registered. ++// ++typedef struct XCP_Module { ++ uint32_t version; /* >0 for supported API versions */ ++ ++ uint64_t flags; /* see XCP_Module_Flags */ ++ ++ uint32_t domains; /* max# addressable under this module; ++ * cached from OS ++ * ++ * when callers set domains to 0, the library ++ * returns the module-claimed domain count. ++ */ ++ ++ unsigned char domainmask[ 256 /8 ]; ++ /* higher domain# through future flags (none ++ * currently defined) which would add things ++ * like 'FLAG_256_1023' etc. at the same time, ++ * we would add domainmask2[] etc. ++ * corresponding new fields. ++ * ++ * new fields would then store mask for ++ * domains 256+ etc. ++ * ++ * domain #0 is bit x80 of 1st byte, ++ * #255 is bit 0x01 of last byte. ++ */ ++ ++ // when a domainmask is supplied, with bits set beyond ++ // what the module supports, the bitmask is trimmed to ++ // the supported range, but this is NOT reported as an ++ // error, unless XCP_MFL_STRICT is also supplied. ++ // ++ // without XCP_MFL_STRICT, callers are expected to check ++ // at least the returned domain count. ++ ++ /* used only when flags includes XCP_MFL_SOCKET */ ++ struct XCP_ModuleSocket socket; ++ ++ /* used when system exposes modules through an ++ * array of transparent pipes, or similar abstraction ++ * (such as mainframe AP Queues, or other Linux ++ * 'device-minor' numbers etc.). Interpretation ++ * is platform-dependent. ++ * ++ * used only when flags includes XCP_MFL_MODULE ++ */ ++ uint32_t module_nr; ++ ++ /* used by systems which associate devices with ++ * device handles/structs/etc. persistent state. ++ * opaque pointer, usually a const pointer to ++ * such aux structs, MAY be stored here. ++ * ++ * interpretation is platform-dependent. ++ * used only when flags includes XCP_MFL_MHANDLE ++ */ ++ void *mhandle; ++ /* diagnostics use only, when XCP_MFL_PERF is set */ ++ struct XCP_DomainPerf perf; ++ //----- end of v1 fields ------------------------------------------- ++ ++ uint32_t api; /* module api version*/ ++ //----- end of v2 fields ------------------------------------------- ++} *XCP_Module_t ; ++ ++typedef enum { ++ XCP_MFL_SOCKET = 1, /* backend is socket-attached */ ++ XCP_MFL_MODULE = 2, /* backends identified in ++ array-of-modules */ ++ XCP_MFL_MHANDLE = 4, /* backends uses 'module handle' field */ ++ XCP_MFL_PERF = 8, /* performance statistics collected ++ * for this module, see .perf ++ */ ++ XCP_MFL_VIRTUAL = 0x10, /* queried 'target' is a load-balancer, ++ * other other group. ++ */ ++ XCP_MFL_STRICT = 0x20, /* enable aggressive error checking, ++ * see field descriptions for effect ++ */ ++ XCP_MFL_PROBE = 0x40, /* send api query to module, to check if ++ * target(s) can be used ++ */ ++ XCP_MFL_ALW_TGT_ADD = 0x80, /* Allows it to use a target in any ++ * functional and admin call without ++ * adding it beforehand with ++ * m_add_module() ++ */ ++ XCP_MFL_MAX = 0xff ++} XCP_Module_Flags; ++ ++typedef uint64_t target_t; ++ ++#define XCP_TGT_INIT ~0UL ++ ++#define XCP_TGT_FMT "x%016" PRIx64 + + int m_add_module(XCP_Module_t module, target_t *target) ; + + int m_rm_module(XCP_Module_t module, target_t target) ; + ++CK_RV m_admin (unsigned char *response1, size_t *r1len, ++ unsigned char *response2, size_t *r2len, ++ const unsigned char *cmd, size_t clen, ++ const unsigned char *sigs, size_t slen, ++ target_t target) ; ++ + /*---------------------------------------------------------------------- + * CK_... type arguments correspond to the original PKCS#11 call's + * arguments. Standard types mean PKCS#11 objects (session, token etc.) +@@ -2442,11 +2728,31 @@ int m_rm_module(XCP_Module_t module, target_t target) ; + * For certain operations, such as _GenerateKey, there are no real + * PKCS#11 type parameters at this level. + */ ++ ++ ++CK_RV m_Login ( CK_UTF8CHAR_PTR pin, CK_ULONG pinlen, ++ const unsigned char *nonce, size_t nlen, ++ unsigned char *pinblob, size_t *pinbloblen, ++ target_t target) ; ++CK_RV m_Logout ( const unsigned char *pin, size_t len, target_t target) ; ++ ++CK_RV m_LoginExtended( CK_UTF8CHAR_PTR pin, CK_ULONG pinlen, ++ const unsigned char *nonce, size_t nlen, ++ const unsigned char *xstruct, size_t xslen, ++ unsigned char *pinblob, size_t *pinbloblen, ++ target_t target) ; ++ ++CK_RV m_LogoutExtended( CK_UTF8CHAR_PTR pin, CK_ULONG pinlen, ++ const unsigned char *nonce, size_t nlen, ++ const unsigned char *xstruct, size_t xslen, ++ target_t target) ; ++ + CK_RV m_GenerateRandom (CK_BYTE_PTR rnd, CK_ULONG len, target_t target) ; + /**/ + /* note: external seeding not supported */ + CK_RV m_SeedRandom (CK_BYTE_PTR pSeed, CK_ULONG ulSeedLen, + target_t target) ; ++ + CK_RV m_DigestInit (unsigned char *state, size_t *len, + const CK_MECHANISM_PTR pmech, + target_t target) ; +@@ -2469,6 +2775,73 @@ CK_RV m_DigestSingle (CK_MECHANISM_PTR pmech, + CK_BYTE_PTR digest, CK_ULONG_PTR dlen, + target_t target) ; + ++CK_RV m_GenerateKey (CK_MECHANISM_PTR pmech, ++ CK_ATTRIBUTE_PTR ptempl, CK_ULONG templcount, ++ const unsigned char *pin, size_t pinlen, ++ unsigned char *key, size_t *klen, ++ unsigned char *csum, size_t *clen, ++ target_t target) ; ++/**/ ++CK_RV m_GenerateKeyPair (CK_MECHANISM_PTR pmech, ++ CK_ATTRIBUTE_PTR ppublic, CK_ULONG pubattrs, ++ CK_ATTRIBUTE_PTR pprivate, CK_ULONG prvattrs, ++ const unsigned char *pin, size_t pinlen, ++ unsigned char *key, size_t *klen, ++ unsigned char *pubkey, size_t *pklen, ++ target_t target) ; ++ ++/* mackey is NULL for PKCS#11 formats, not for authenticated ones */ ++CK_RV m_WrapKey (const unsigned char *key, size_t keylen, ++ const unsigned char *kek, size_t keklen, ++ const unsigned char *mackey, size_t mklen, ++ const CK_MECHANISM_PTR pmech, ++ CK_BYTE_PTR wrapped, CK_ULONG_PTR wlen, ++ target_t target) ; ++/**/ ++/* mackey is NULL for PKCS#11 formats, not for authenticated ones */ ++CK_RV m_UnwrapKey (const CK_BYTE_PTR wrapped, CK_ULONG wlen, ++ const unsigned char *kek, size_t keklen, ++ const unsigned char *mackey, size_t mklen, ++ const unsigned char *pin, size_t pinlen, ++ const CK_MECHANISM_PTR uwmech, ++ const CK_ATTRIBUTE_PTR ptempl, CK_ULONG pcount, ++ unsigned char *unwrapped, size_t *uwlen, ++ CK_BYTE_PTR csum, CK_ULONG *cslen, ++ target_t target) ; ++ ++CK_RV m_DeriveKey ( CK_MECHANISM_PTR pderivemech, ++ CK_ATTRIBUTE_PTR ptempl, CK_ULONG templcount, ++ const unsigned char *basekey, size_t bklen, ++ const unsigned char *data, size_t dlen, ++ const unsigned char *pin, size_t pinlen, ++ unsigned char *newkey, size_t *nklen, ++ unsigned char *csum, size_t *cslen, ++ target_t target) ; ++ ++CK_RV m_GetAttributeValue (const unsigned char *obj, size_t olen, ++ CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount, ++ target_t target) ; ++CK_RV m_SetAttributeValue (unsigned char *obj, size_t olen, ++ CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount, ++ target_t target) ; ++ ++/**/ ++CK_RV m_GetMechanismList (CK_SLOT_ID slot, ++ CK_MECHANISM_TYPE_PTR mechs, ++ CK_ULONG_PTR count, ++ target_t target) ; ++CK_RV m_GetMechanismInfo (CK_SLOT_ID slot, ++ CK_MECHANISM_TYPE mech, ++ CK_MECHANISM_INFO_PTR pmechinfo, ++ target_t target) ; ++ ++CK_RV m_get_xcp_info (CK_VOID_PTR pinfo, CK_ULONG_PTR infbytes, ++ unsigned int query, ++ unsigned int subquery, ++ target_t target) ; ++ ++// see also: CK_IBM_XCPQUERY_t ++ + CK_RV m_EncryptInit (unsigned char *state, size_t *slen, + CK_MECHANISM_PTR pmech, + const unsigned char *key, size_t klen, +@@ -2516,21 +2889,6 @@ CK_RV m_DecryptSingle (const unsigned char *key, size_t klen, + CK_BYTE_PTR plain, CK_ULONG_PTR plen, + target_t target) ; + +-CK_RV m_GenerateKey (CK_MECHANISM_PTR pmech, +- CK_ATTRIBUTE_PTR ptempl, CK_ULONG templcount, +- const unsigned char *pin, size_t pinlen, +- unsigned char *key, size_t *klen, +- unsigned char *csum, size_t *clen, +- target_t target) ; +-/**/ +-CK_RV m_GenerateKeyPair (CK_MECHANISM_PTR pmech, +- CK_ATTRIBUTE_PTR ppublic, CK_ULONG pubattrs, +- CK_ATTRIBUTE_PTR pprivate, CK_ULONG prvattrs, +- const unsigned char *pin, size_t pinlen, +- unsigned char *key, size_t *klen, +- unsigned char *pubkey, size_t *pklen, +- target_t target) ; +- + CK_RV m_SignInit (unsigned char *state, size_t *slen, + CK_MECHANISM_PTR alg, + const unsigned char *key, size_t klen, +@@ -2574,72 +2932,6 @@ CK_RV m_VerifySingle (const unsigned char *key, size_t klen, + CK_BYTE_PTR sig, CK_ULONG slen, + target_t target) ; + +-/* mackey is NULL for PKCS#11 formats, not for authenticated ones */ +-CK_RV m_WrapKey (const unsigned char *key, size_t keylen, +- const unsigned char *kek, size_t keklen, +- const unsigned char *mackey, size_t mklen, +- const CK_MECHANISM_PTR pmech, +- CK_BYTE_PTR wrapped, CK_ULONG_PTR wlen, +- target_t target) ; +-/**/ +-/* mackey is NULL for PKCS#11 formats, not for authenticated ones */ +-CK_RV m_UnwrapKey (const CK_BYTE_PTR wrapped, CK_ULONG wlen, +- const unsigned char *kek, size_t keklen, +- const unsigned char *mackey, size_t mklen, +- const unsigned char *pin, size_t pinlen, +- const CK_MECHANISM_PTR uwmech, +- const CK_ATTRIBUTE_PTR ptempl, CK_ULONG pcount, +- unsigned char *unwrapped, size_t *uwlen, +- CK_BYTE_PTR csum, CK_ULONG *cslen, +- target_t target) ; +- +-CK_RV m_DeriveKey ( CK_MECHANISM_PTR pderivemech, +- CK_ATTRIBUTE_PTR ptempl, CK_ULONG templcount, +- const unsigned char *basekey, size_t bklen, +- const unsigned char *data, size_t dlen, +- const unsigned char *pin, size_t pinlen, +- unsigned char *newkey, size_t *nklen, +- unsigned char *csum, size_t *cslen, +- target_t target) ; +- +-/**/ +-CK_RV m_GetMechanismList (CK_SLOT_ID slot, +- CK_MECHANISM_TYPE_PTR mechs, +- CK_ULONG_PTR count, +- target_t target) ; +-CK_RV m_GetMechanismInfo (CK_SLOT_ID slot, +- CK_MECHANISM_TYPE mech, +- CK_MECHANISM_INFO_PTR pmechinfo, +- target_t target) ; +- +-CK_RV m_GetAttributeValue (const unsigned char *obj, size_t olen, +- CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount, +- target_t target) ; +-CK_RV m_SetAttributeValue (unsigned char *obj, size_t olen, +- CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount, +- target_t target) ; +- +- +-CK_RV m_Login ( CK_UTF8CHAR_PTR pin, CK_ULONG pinlen, +- const unsigned char *nonce, size_t nlen, +- unsigned char *pinblob, size_t *pinbloblen, +- target_t target) ; +-CK_RV m_Logout ( const unsigned char *pin, size_t len, target_t target) ; +- +-CK_RV m_admin (unsigned char *response1, size_t *r1len, +- unsigned char *response2, size_t *r2len, +- const unsigned char *cmd, size_t clen, +- const unsigned char *sigs, size_t slen, +- target_t target) ; +- +-CK_RV m_get_xcp_info (CK_VOID_PTR pinfo, CK_ULONG_PTR infbytes, +- unsigned int query, +- unsigned int subquery, +- target_t target) ; +- +-// see also: CK_IBM_XCPQUERY_t +- +- + // m_wire() by default removes transport headers of responses (CPRB header etc.) + // setting to prevent stripping: + // +@@ -2661,17 +2953,20 @@ CK_RV m_wire (unsigned char *rsp, size_t *rsplen, CK_RV *irv, + #define XCP_W_NO_SEND_CPRB 1 /* data already includes request header */ + #define XCP_W_NO_RECV_CPRB 2 /* leave transport header in response */ + ++// initializes the library ++int m_init(void); ++// shutting down the library ++int m_shutdown(void); + +-/*-- build identification ------------------------------------------------*/ + +-#define XCP_BUILD_ID 0x9c14a5e6 +-#define XCP_BUILD_DATE 0x20220610 /* UTC */ +-#define XCP_BUILD_TIME 0x123354 /* UTC */ + +-/*--------------------------------------------------------------------------*/ +-/*--------------------------------------------------------------------------*/ ++/*-- build identification ------------------------------------------------*/ + ++#define XCP_BUILD_ID 0xf1d34cc2 ++#define XCP_BUILD_DATE 0x20221214 /* UTC */ ++#define XCP_BUILD_TIME 0x094523 /* UTC */ + ++/*--------------------------------------------------------------------------*/ + #define __XCP_REASONCODES_H__ 1 + + +@@ -2823,14 +3118,10 @@ typedef enum { + } XCP_ReasonCode_t ; + + +- +- +-#if ! defined(__transport_fns_h__) +-#define __transport_fns_h__ +- + /* function identifiers must be consecutive, between: */ + #define __MIN_MOD_FNID 1 +-#define __MAX_MOD_FNID 43 ++#define __MAX_MOD_FNID 42 ++/* selectively disabled functions within that range reported separately */ + + #define __FNID_Login 1 + #define __FNID_Logout 2 +@@ -2938,8 +3229,6 @@ typedef enum { + #define __HOST2MOD_DATAPRM 9 + #define __MOD2HOST_DATAPRM 2 + +-#endif /* n defined(__transport_fns_h__) */ +- + + #endif /* n defined(XCP_H__) */ + +diff --git a/usr/lib/ep11_stdll/ep11adm.h b/usr/lib/ep11_stdll/ep11adm.h +index ecb524d5..0cd50a65 100644 +--- a/usr/lib/ep11_stdll/ep11adm.h ++++ b/usr/lib/ep11_stdll/ep11adm.h +@@ -25,34 +25,6 @@ + #error "We need types, please include before this file." + #endif + +-// these numbers apply to current version, subject to change +-// Please note that this defines are DEPRECATED. Please use their XCP_* +-// counterpart in ep11.h +-// +-#if !defined(EP11_SERIALNR_CHARS) +-#define EP11_SERIALNR_CHARS XCP_SERIALNR_CHARS +-#endif +- +-#if !defined(EP11_KEYCSUM_BYTES) +-/* full size of verific. pattern */ +-#define EP11_KEYCSUM_BYTES XCP_KEYCSUM_BYTES +-#endif +- +-#if !defined(EP11_ADMCTR_BYTES) +-/* admin transaction ctrs */ +-#define EP11_ADMCTR_BYTES XCP_ADMCTR_BYTES +-#endif +- +-#if !defined(EP11_ADM_REENCRYPT) +-/* transform blobs to next WK */ +-#define EP11_ADM_REENCRYPT XCP_ADM_REENCRYPT +-#endif +- +-#if !defined(CK_IBM_EP11Q_DOMAIN) +-/* list domain's WK hashes */ +-#define CK_IBM_EP11Q_DOMAIN CK_IBM_XCPQ_DOMAIN +-#endif +-// end of DEPRECATED defines + + //------------------------------------- + // flags common to all functions that have a flag parameter +@@ -100,13 +72,22 @@ + + #define DOMAIN_MASK_LENGTH XCP_DOMAINS/8 // space for 256 domains + +- ++//------------------------------------- ++// Key-Part-Holder template ++// contain credentials of a key-part holder. Those credentials ++// can be file based and/or smart card based references. + struct KPH { +- const unsigned char *cert; +- size_t clen; +- const char *id; +- const char *pw; +- const char *kpfname; ++ const unsigned char *cert; // certificate ++ size_t clen; // certificate length ++ const char *id; // private key ++ const char *pw; // private key passphrase ++ const char *kpfname; // filename of the key-part ++ char scard; // indicates a smart card user ++ char ski_id; // subject key identifier ID ++ int rdr_id; // smart card reader number ++ char kp_id; // key-part ID ++ uint64_t sigmech; // signature mechenism ++ const char *padmode; // padding mode + } ; + + +@@ -159,30 +140,6 @@ typedef struct XCPadmresp { + #define XCP_ADMRESP_INIT0 { 0,0,0, {0},{0},{0}, {0}, CKR_OK, 0, NULL,0, } + + +-// ep11_admresp_t is DEPRECATED. Please use XCPadmresp_t directly +-typedef struct ep11_admresp { +- uint32_t fn; +- uint32_t domain; +- uint32_t domainInst; +- +- /* module ID || module instance */ +- unsigned char module[ EP11_SERIALNR_CHARS + EP11_SERIALNR_CHARS ]; +- unsigned char modNr[ EP11_SERIALNR_CHARS ]; +- unsigned char modInst[ EP11_SERIALNR_CHARS ]; +- +- unsigned char tctr[ EP11_ADMCTR_BYTES ]; /* transaction counter */ +- +- CK_RV rv; +- uint32_t reason; +- +- // points to original response; NULL if no payload +- // make sure it's copied if used after releasing response block +- // +- const unsigned char *payload; +- size_t pllen; +-} *ep11_admresp_t; +- +- + //------------------------------------- + // listing of CP modes with their respective sets of control points that are + // either required or prohibited +@@ -249,9 +206,39 @@ static const struct { + XCP_CPB_ALG_NBSI2011, XCP_CPB_ALG_DH, + XCP_CPB_DERIVE }, + }, ++ { XCP_ADMS_FIPS2021, "fips2021", ++ 15, ++ { XCP_CPB_ALG_NFIPS2011, XCP_CPB_KEYSZ_80BIT, ++ XCP_CPB_KEYSZ_RSA65536, ++ XCP_CPB_ALG_NFIPS2021, XCP_CPB_ALG_EC_25519, ++ XCP_CPB_ALG_PQC, XCP_CPB_BTC, ++ XCP_CPB_ECDSA_OTHER, XCP_CPB_ALLOW_NONSESSION, ++ XCP_CPB_ALG_EC_SECGCRV, XCP_CPB_ALG_EC_BPOOLCRV, ++ XCP_CPB_COMPAT_LEGACY_SHA3, XCP_CPB_DSA_PARAMETER_GEN, ++ XCP_CPB_WRAP_ASYMM, XCP_CPB_UNWRAP_ASYMM ++ }, ++ 0, ++ { }, ++ }, ++ { XCP_ADMS_FIPS2024, "fips2024", ++ 16, ++ { XCP_CPB_ALG_NFIPS2011, XCP_CPB_KEYSZ_80BIT, ++ XCP_CPB_KEYSZ_RSA65536, ++ XCP_CPB_ALG_NFIPS2021, XCP_CPB_ALG_EC_25519, ++ XCP_CPB_ALG_PQC, XCP_CPB_BTC, ++ XCP_CPB_ECDSA_OTHER, XCP_CPB_ALLOW_NONSESSION, ++ XCP_CPB_ALG_EC_SECGCRV, XCP_CPB_ALG_EC_BPOOLCRV, ++ XCP_CPB_ALG_NFIPS2024, XCP_CPB_COMPAT_LEGACY_SHA3, ++ XCP_CPB_DSA_PARAMETER_GEN, XCP_CPB_WRAP_ASYMM, ++ XCP_CPB_UNWRAP_ASYMM ++ }, ++ 0, ++ { }, ++ // XCP_ADMS_ADM_FIPS2021 is not reported here as it is not set with ++ // control points ++ } + } ; + +- + //------------------------------------- + // Structure to collect all relevant data for state export/import + // +@@ -351,21 +338,12 @@ long xcpa_certreplace(unsigned char *blk, size_t blen, + + + //------------------------------------- +-// xcpa_query_wk queries the hash of the current/next WK for the given target +-// xcpa_query_wk without the feature define EP11ADM_V2 can only query the hash +-// of the current WK. Latter version is deprecated and will be removed with the +-// next major release ++// Queries the current/next WK for the given target + // +-// Parameter description: +-// wk pointer to the output buffer, contains current/next WK hash after +-// call +-// wlen needs to be set to the size of the output buffer +-// type CK_IBM_DOM_CURR_WK or CK_IBM_DOM_NEXT_WK (only available with +-// EP11ADM_V2 defined) +-// target a single target set up with m_add_module ++// WK Hash is returned in (*wk, wlen) on success if wk is not NULL + // + // returns >0 (bytecount) if present +-// 0 if valid but no current/next WK ++// 0 if valid but no current WK + // <0 if anything failed + // + // Possible error return codes: +@@ -375,14 +353,7 @@ long xcpa_certreplace(unsigned char *blk, size_t blen, + // + // Uses xcpa_queryblock() - See function header for possible return codes + // +-#if defined(EP11ADM_V2) +-__asm__(".symver xcpa_query_wk, xcpa_query_wk@EP11ADM_V2"); +-long xcpa_query_wk(unsigned char *wk, size_t wlen, int type, +- target_t target) ; +-#else +-long xcpa_query_wk(unsigned char *wk, size_t wlen, target_t target) +- __attribute__ ((deprecated)); +-#endif ++long xcpa_query_wk(unsigned char *wk, size_t wlen, int type, target_t target) ; + + + //------------------------------------- +@@ -681,12 +652,13 @@ long xcpa_set_cps(target_t target, + //------------------------------------- + // get compliance mode from CP set (see ep11_cpt_modes[] for possible compliance + // modes) ++// can not check for administrative compliance modes + // + // cps CP set of XCP_CP_BYTES length, see xcpa_query_cps + // + // returns >0 compliance mode (see XCP_ADMS_...) + // +-// does not verify CP set! ++// does not verify CP set + // + uint32_t xcpa_cps2compliance(const unsigned char *cps /* XCP_CP_BYTES */) ; + +@@ -823,7 +795,10 @@ typedef struct Encrdkey { + // EC only: RSA recipients must keep these lengths 0 + // + // largest supported curve: P-521 +- ++ unsigned char srcprivate[ 66 ]; /* private key (PKCS#8) */ ++ size_t sprivlen; /* priv. key byte count */ ++ unsigned char *oid; /* EC curve OID */ ++ size_t olen; /* EC curve OID length */ + unsigned char srcpublic[ 1+66+66 ]; /* originator public point */ + size_t splen; /* pub. point bytecount */ + +@@ -840,18 +815,10 @@ typedef struct Encrdkey { + int ktype; /* one of the wire-specified types */ + + CK_MECHANISM *alg; /* currently, ignored */ ++ unsigned char wrap_alg[25]; /* AES Key Wrap algorithm OID */ + // largest supported importer type: 4096-bit RSA + unsigned char raw[ 4096/8 ]; /* actual encrypted bytes */ + size_t rlen; +- +-#if defined(EP11ADM_V2) +- unsigned char srcprivate[ 66 ]; /* private key (PKCS#8) */ +- size_t sprivlen; /* priv. key byte count */ +- unsigned char *oid; /* EC curve OID */ +- size_t olen; /* EC curve OID length */ +- +- unsigned char wrap_alg[25]; /* AES Key Wrap algorithm OID */ +-#endif + } *Encrdkey_t; + + +@@ -893,9 +860,6 @@ long xcp_rcptinfo_sharedinfo(unsigned char *sinfo, size_t slen, + // creates RecipientInfo ASN.1 sequence (asn) from encr structure following RFC + // 3852 for RSA and RFC 5753 for EC + // +-// uses encr->wrap_alg if EP11ADM_V2 defined. Otherwise assumes aes256-wrap is +-// used for EC +-// + // verifies if a known importer key is used and if the SPKI does match + // the importer key type + // +@@ -907,9 +871,10 @@ long xcp_rcptinfo_sharedinfo(unsigned char *sinfo, size_t slen, + // XCP_ADMERR_RI_IMPR_INVALID: if the importer type or the key import structure + // encr is not supported / invalid + // +-long xcp_rcptinfo(unsigned char *asn, size_t alen, +- const struct Encrdkey *encr, +- const CK_MECHANISM *encrmech) ; ++long xcp_rcptinfo (unsigned char *asn, size_t alen, ++ const struct Encrdkey *encr, ++ const CK_MECHANISM *encrmech) ; ++ + + //------------------------------------- + // reads ASN.1 formatted RecipientInfo (asn) and turns it into rinfo structure +@@ -990,12 +955,8 @@ long xcpa_import_keypart (unsigned char *out, size_t olen, + // XCP_ADMERR_RI_IMPR_INVALID: importer key type invalid / unsupported or does + // not match SPKI + // +-// uses xcp_rcptinfo and xcpa_cmdblock() - see function header for more return +-// codes and EP11AMD_V2 specific changes ++// uses xcpa_cmdblock() - see function header for more return codes + // +-#if defined(EP11ADM_V2) +-__asm__(".symver xcpa_import_cmdblock, xcpa_import_cmdblock@EP11ADM_V2"); +-#endif + long xcpa_import_cmdblock (unsigned char *out, size_t olen, + const struct Encrdkey *key, + const struct XCPadmresp *minf, +@@ -1164,19 +1125,10 @@ long xcpa_fill_export_req(unsigned char *asn, size_t alen, + // Constructs key part file with ASN.1 envelope + // writes output to (*reqprep, reqpreplen) + // +-// default version: +-// statesave contains the target domain mask +-// kphs keypart holder certificates +-// ekps contains re-encrypted keyparts +-// kcnt number of kphs +-// reqprep output buffer +-// reqpreplen output length +-// +-// with EP11ADM_V2 feature define active: + // domainmask target domain mask + // kphs keypart holder certificates +-// ekps contains re-encrypted keyparts + // kcnt number of kphs ++// ekps contains re-encrypted keyparts + // reqprep output buffer + // reqpreplen output length + // headerinfo set to 0 if no header info requested +@@ -1184,9 +1136,6 @@ long xcpa_fill_export_req(unsigned char *asn, size_t alen, + // + // returns 0 if successful + // <0 if something fails +-#if defined(EP11ADM_V2) +-__asm__(".symver xcpa_construct_keypart_file, " +- "xcpa_construct_keypart_file@EP11ADM_V2"); + long xcpa_construct_keypart_file(unsigned char *domainmask, + const struct KPH *kphs, + const struct Encrdkey *ekps, +@@ -1194,15 +1143,7 @@ long xcpa_construct_keypart_file(unsigned char *domainmask, + unsigned char *reqprep, + size_t *reqpreplen, + unsigned int headerinfo); +-#else +-long xcpa_construct_keypart_file(struct STATESAVE *statesave, +- const struct KPH *kphs, +- const struct Encrdkey *ekps, +- unsigned int kcnt, +- unsigned char *reqprep, +- size_t *reqpreplen) +- __attribute__((deprecated)); +-#endif ++ + + //------------------------------------- + // Enable export WK permission +@@ -1254,17 +1195,6 @@ long xcpa_enable_import_state(target_t target, + // Export the domain WK of the given target + // writes output to (*resp, resplen) + // +-// default version: +-// target addresses target module/domain +-// keyparts pointer to the encrypted keyparts +-// keypartlen length of encrypted keyparts +-// request pointer to the export request data +-// requestlen length of request data +-// sign_cb provide the callback for generating signatures +-// may be NULL if no signatures required +-// signopts number of signatures requested +-// +-// with EP11ADM_V2 feature define active: + // target addresses target module/domain + // wktype indicates either current or next WK + // keyparts pointer to the encrypted keyparts +@@ -1274,20 +1204,11 @@ long xcpa_enable_import_state(target_t target, + // sign_cb provide the callback for generating signatures + // may be NULL if no signatures required + // signopts number of signatures requested +-// +-#if defined(EP11ADM_V2) +-__asm__(".symver xcpa_export_wk, xcpa_export_wk@EP11ADM_V2"); + long xcpa_export_wk(target_t target, int wktype, + unsigned char *keyparts, size_t *keypartlen, + const unsigned char *request, size_t requestlen, + xcpa_admin_signs_cb_t sign_cb, const void *signopts); +-#else +-long xcpa_export_wk(target_t target, +- unsigned char *keyparts, size_t *keypartlen, +- const unsigned char *request, size_t requestlen, +- xcpa_admin_signs_cb_t sign_cb, const void *signopts) +- __attribute__((deprecated)); +-#endif ++ + + //------------------------------------- + // Export the state of the given target +@@ -1337,11 +1258,6 @@ long xcpa_import_wk_rcptinfo(target_t target, + // sign_cb provide the callback for generating signatures + // may be NULL if no signatures required + // signopts number of signatures requested +-// +-// uses xcp_rcptinfo and is therefore dependent on EP11ADM_V2 +-#if defined(EP11ADM_V2) +-__asm__(".symver xcpa_import_wk, xcpa_import_wk@EP11ADM_V2"); +-#endif + long xcpa_import_wk(target_t target, const struct Encrdkey *ekps, + unsigned int kcnt, const unsigned char *wkvp, + xcpa_admin_signs_cb_t sign_cb, const void *signopts); +@@ -1436,11 +1352,11 @@ long xcpa_gen_random_wk(target_t target, unsigned char *wkvp, + // XCP_ADMERR_SI_OID_MECH_MISMATCH: mismatch between signature and hash + // mechanism + // +-long xcp_signerinfo(unsigned char *asn, size_t alen, +- const unsigned char *ski, size_t skilen, /* signer */ +- const unsigned char *sig, size_t siglen, +- const CK_MECHANISM *sigmech, +- const CK_MECHANISM *hashmech) ; ++long xcp_signerinfo (unsigned char *asn, size_t alen, ++ const unsigned char *ski, size_t skilen, /* signer */ ++ const unsigned char *sig, size_t siglen, ++ const CK_MECHANISM *sigmech, ++ const CK_MECHANISM *hashmech) ; + + + //------------------------------------- +@@ -1461,13 +1377,13 @@ long xcp_signerinfo(unsigned char *asn, size_t alen, + // + // no length checks on signature or SKI, other than checking both for non-empty + // +-long xcp_signerinfo_read(const unsigned char *sinfo, size_t silen, +- const unsigned char **ski, size_t *skilen, +- const unsigned char **sig, size_t *siglen, +- const unsigned char **hoid, size_t *hoidlen, +- const unsigned char **soid, size_t *soidlen, +- CK_MECHANISM *signmech, +- CK_MECHANISM *hashmech) ; ++long xcp_signerinfo_read (const unsigned char *sinfo, size_t silen, ++ const unsigned char **ski, size_t *skilen, ++ const unsigned char **sig, size_t *siglen, ++ const unsigned char **hoid, size_t *hoidlen, ++ const unsigned char **soid, size_t *soidlen, ++ CK_MECHANISM *signmech, ++ CK_MECHANISM *hashmech) ; + + + //------------------------------------- +@@ -1488,57 +1404,10 @@ long xcp_signerinfo_read(const unsigned char *sinfo, size_t silen, + // + // note: we do not verify other details of SPKI; caller must do so + // +-long xcp_spki2pubkey(const unsigned char **bitstr, +- const unsigned char *spki, size_t slen) ; +- +- +- +-//---------------------------------------------------------------------- +-// The following functions are DEPRECTATED! +-// for return values see their xcpa_* counterpart ++long xcp_spki2pubkey (const unsigned char **bitstr, ++ const unsigned char *spki, size_t slen) ; + + +-/*---------------------------------------------------------------------- +- * build a command block to (blk,blen), querying 'fn' +- * (payload,plen) copied to query block if non-NULL +- * +- * returns written bytecount; size query if blk is NULL +- * *minf used for module ID and transaction counter +- * ignored for commands where those fields are ignored +- */ +-long ep11a_cmdblock(unsigned char *blk, size_t blen, +- unsigned int fn, +- const struct ep11_admresp *minf, +- const unsigned char *tctr, /* EP11_ADMCTR_BYTES */ +- const unsigned char *payload, size_t plen) +- __attribute__ ((deprecated)) ; +- +- +-/*---------------------------------------------------------------------- +- * returns <0 if response is malformed, or contents invalid +- * +- * parse embedded return value from response, writes to *rv if non-NULL +- * (outside envelope always reports CKR_OK, unless infrastructure +- * failed) +- */ +-long ep11a_internal_rv(const unsigned char *rsp, size_t rlen, +- struct ep11_admresp *rspblk, CK_RV *rv) +- __attribute__ ((deprecated)) ; +- +- +-/*---------------------------------------------------------------------- +- * in: [0] query type +- * out: [0] packed info structure +- * +- * outputs are fixed size, except CK_IBM_XCPQ_DOMAINS, which returns a +- * list therefore, infbytes is ignored by other types (we still check +- * if present) +- */ +-CK_RV m_get_ep11_info(CK_VOID_PTR pinfo, CK_ULONG_PTR infbytes, +- unsigned int query, +- unsigned int subquery, +- target_t target) +- __attribute__ ((deprecated)) ; + + + /* +@@ -1548,7 +1417,7 @@ CK_RV m_get_ep11_info(CK_VOID_PTR pinfo, CK_ULONG_PTR infbytes, + * mask pointer to an 32 byte array that represents our domain mask + * masksize bit-length of the mask + */ +-int xcp_args2mask(char *args, unsigned char *mask, int masksize) ; ++int xcp_args2mask(char *args, unsigned char *mask, int masksize); + + + /* +@@ -1602,6 +1471,10 @@ long xcpa_write_full_file(target_t target, + unsigned int fileid, unsigned int block); + + ++long xcpa_remove_file(target_t target, unsigned int fileid, ++ xcpa_admin_signs_cb_t sign_cb, const void *signopts); ++ ++ + /* brute-force section parser: enumerate all encrypted-KP sections + * + * returns >0 offset of full OCTET STRING T+L+V section +@@ -1627,5 +1500,15 @@ long xcpa_kps_retrieve_rcptinfo(struct Recipient_info *rcpti, + const unsigned char *kpexport, + size_t kplen); + ++ ++/* ++ * report domain compliance ++ * ++ * returns compliance bitmask if successful and 0 if anything failed ++ * (as zero is invalid as we always have a default compliance active) ++ * ++ */ ++uint64_t get_dom_compl(target_t target); ++ + #endif /* !defined(__xcpadm_h__) */ + +-- +2.16.2.windows.1 + diff --git a/SOURCES/0013-EP11-Support-EP11-host-library-version-4.patch b/SOURCES/0013-EP11-Support-EP11-host-library-version-4.patch new file mode 100644 index 0000000..32aff25 --- /dev/null +++ b/SOURCES/0013-EP11-Support-EP11-host-library-version-4.patch @@ -0,0 +1,137 @@ +From 4cad40e594b916ef3416dd574304b2c60138a6fe Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Mon, 19 Sep 2022 09:01:13 +0200 +Subject: [PATCH 13/34] EP11: Support EP11 host library version 4 + +Try to load the EP11 host library version 4 (libep11.so.4) first, +but fall back to version 3, 2, 1, or even the un-versioned shared library. + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 15 ++++++++++++--- + usr/sbin/pkcsep11_migrate/pkcsep11_migrate.c | 11 +++++++++-- + usr/sbin/pkcsep11_session/pkcsep11_session.c | 11 +++++++++-- + 3 files changed, 30 insertions(+), 7 deletions(-) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index 1dbfe0f5..304989fc 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -66,6 +66,7 @@ + #include "pkey_utils.h" + + #define EP11SHAREDLIB_NAME "OCK_EP11_LIBRARY" ++#define EP11SHAREDLIB_V4 "libep11.so.4" + #define EP11SHAREDLIB_V3 "libep11.so.3" + #define EP11SHAREDLIB_V2 "libep11.so.2" + #define EP11SHAREDLIB_V1 "libep11.so.1" +@@ -2209,9 +2210,17 @@ static void *ep11_load_host_lib() + return lib_ep11; + } + +- ep11_lib_name = EP11SHAREDLIB_V3; ++ ep11_lib_name = EP11SHAREDLIB_V4; + lib_ep11 = dlopen(ep11_lib_name, DLOPEN_FLAGS); + ++ if (lib_ep11 == NULL) { ++ TRACE_DEVEL("%s Error loading shared library '%s', trying '%s'\n", ++ __func__, EP11SHAREDLIB_V4, EP11SHAREDLIB_V3); ++ /* Try version 3 instead */ ++ ep11_lib_name = EP11SHAREDLIB_V3; ++ lib_ep11 = dlopen(ep11_lib_name, DLOPEN_FLAGS); ++ } ++ + if (lib_ep11 == NULL) { + TRACE_DEVEL("%s Error loading shared library '%s', trying '%s'\n", + __func__, EP11SHAREDLIB_V3, EP11SHAREDLIB_V2); +@@ -2239,9 +2248,9 @@ static void *ep11_load_host_lib() + if (lib_ep11 == NULL) { + errstr = dlerror(); + OCK_SYSLOG(LOG_ERR, +- "%s: Error loading shared library '%s[.3|.2|.1]' [%s]\n", ++ "%s: Error loading shared library '%s[.4][.3|.2|.1]' [%s]\n", + __func__, EP11SHAREDLIB, errstr); +- TRACE_ERROR("%s Error loading shared library '%s[.3|.2|.1]' [%s]\n", ++ TRACE_ERROR("%s Error loading shared library '%s[.4][.3|.2|.1]' [%s]\n", + __func__, EP11SHAREDLIB, errstr); + return NULL; + } +diff --git a/usr/sbin/pkcsep11_migrate/pkcsep11_migrate.c b/usr/sbin/pkcsep11_migrate/pkcsep11_migrate.c +index 4a42a085..f80cfa9f 100644 +--- a/usr/sbin/pkcsep11_migrate/pkcsep11_migrate.c ++++ b/usr/sbin/pkcsep11_migrate/pkcsep11_migrate.c +@@ -30,6 +30,7 @@ + #include "pin_prompt.h" + + #define EP11SHAREDLIB_NAME "OCK_EP11_LIBRARY" ++#define EP11SHAREDLIB_V4 "libep11.so.4" + #define EP11SHAREDLIB_V3 "libep11.so.3" + #define EP11SHAREDLIB_V2 "libep11.so.2" + #define EP11SHAREDLIB_V1 "libep11.so.1" +@@ -424,9 +425,15 @@ static void *ep11_load_host_lib() + return lib_ep11; + } + +- ep11_lib_name = EP11SHAREDLIB_V3; ++ ep11_lib_name = EP11SHAREDLIB_V4; + lib_ep11 = dlopen(ep11_lib_name, DLOPEN_FLAGS); + ++ if (lib_ep11 == NULL) { ++ /* Try version 3 instead */ ++ ep11_lib_name = EP11SHAREDLIB_V3; ++ lib_ep11 = dlopen(ep11_lib_name, DLOPEN_FLAGS); ++ } ++ + if (lib_ep11 == NULL) { + /* Try version 2 instead */ + ep11_lib_name = EP11SHAREDLIB_V2; +@@ -447,7 +454,7 @@ static void *ep11_load_host_lib() + + if (lib_ep11 == NULL) { + errstr = dlerror(); +- fprintf(stderr, "Error loading shared library '%s[.3|.2|.1]' [%s]\n", ++ fprintf(stderr, "Error loading shared library '%s[.4|.3|.2|.1]' [%s]\n", + EP11SHAREDLIB, errstr); + return NULL; + } +diff --git a/usr/sbin/pkcsep11_session/pkcsep11_session.c b/usr/sbin/pkcsep11_session/pkcsep11_session.c +index 0c210135..b7b9e9c4 100644 +--- a/usr/sbin/pkcsep11_session/pkcsep11_session.c ++++ b/usr/sbin/pkcsep11_session/pkcsep11_session.c +@@ -35,6 +35,7 @@ + #include "pin_prompt.h" + + #define EP11SHAREDLIB_NAME "OCK_EP11_LIBRARY" ++#define EP11SHAREDLIB_V4 "libep11.so.4" + #define EP11SHAREDLIB_V3 "libep11.so.3" + #define EP11SHAREDLIB_V2 "libep11.so.2" + #define EP11SHAREDLIB_V1 "libep11.so.1" +@@ -1050,9 +1051,15 @@ static void *ep11_load_host_lib() + return lib_ep11; + } + +- ep11_lib_name = EP11SHAREDLIB_V3; ++ ep11_lib_name = EP11SHAREDLIB_V4; + lib_ep11 = dlopen(ep11_lib_name, DLOPEN_FLAGS); + ++ if (lib_ep11 == NULL) { ++ /* Try version 3 instead */ ++ ep11_lib_name = EP11SHAREDLIB_V3; ++ lib_ep11 = dlopen(ep11_lib_name, DLOPEN_FLAGS); ++ } ++ + if (lib_ep11 == NULL) { + /* Try version 2 instead */ + ep11_lib_name = EP11SHAREDLIB_V2; +@@ -1073,7 +1080,7 @@ static void *ep11_load_host_lib() + + if (lib_ep11 == NULL) { + errstr = dlerror(); +- fprintf(stderr, "Error loading shared library '%s[.3|.2|.1]' [%s]\n", ++ fprintf(stderr, "Error loading shared library '%s[.4|.3|.2|.1]' [%s]\n", + EP11SHAREDLIB, errstr); + return NULL; + } +-- +2.16.2.windows.1 + diff --git a/SOURCES/0014-EP11-Add-new-control-points.patch b/SOURCES/0014-EP11-Add-new-control-points.patch new file mode 100644 index 0000000..9e6c7b3 --- /dev/null +++ b/SOURCES/0014-EP11-Add-new-control-points.patch @@ -0,0 +1,53 @@ +From b89b408953e9192d7bfcb31cdf8c48d6c973488a Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Wed, 16 Feb 2022 10:23:29 +0100 +Subject: [PATCH 14/34] EP11: Add new control points + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 7 +++++++ + usr/lib/ep11_stdll/ep11cpfilter.conf | 6 ++++++ + 2 files changed, 13 insertions(+) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index 304989fc..147ce7b2 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -10524,13 +10524,20 @@ static const_info_t ep11_cps[] = { + CONSTINFO(XCP_CPB_WRAP_WITH_RAW_SPKI), + CONSTINFO(XCP_CPB_ALG_DH), + CONSTINFO(XCP_CPB_DERIVE), ++ CONSTINFO(XCP_CPB_ALLOW_NONSESSION), + CONSTINFO(XCP_CPB_ALG_EC_25519), ++ CONSTINFO(XCP_CPB_ALG_EC_SECGCRV), + CONSTINFO(XCP_CPB_ALG_NBSI2017), + CONSTINFO(XCP_CPB_CPACF_PK), + CONSTINFO(XCP_CPB_ALG_PQC_DILITHIUM), + CONSTINFO(XCP_CPB_ALG_PQC), + CONSTINFO(XCP_CPB_BTC), + CONSTINFO(XCP_CPB_ECDSA_OTHER), ++ CONSTINFO(XCP_CPB_ALG_NFIPS2021), ++ CONSTINFO(XCP_CPB_ALG_NFIPS2024), ++ CONSTINFO(XCP_CPB_COMPAT_LEGACY_SHA3), ++ CONSTINFO(XCP_CPB_DSA_PARAMETER_GEN), ++ CONSTINFO(XCP_CPB_DERIVE_NON_AB_KEYS), + }; + + #ifdef DEBUG +diff --git a/usr/lib/ep11_stdll/ep11cpfilter.conf b/usr/lib/ep11_stdll/ep11cpfilter.conf +index 0d3a6b3f..9d6a2fc8 100644 +--- a/usr/lib/ep11_stdll/ep11cpfilter.conf ++++ b/usr/lib/ep11_stdll/ep11cpfilter.conf +@@ -80,3 +80,9 @@ XCP_CPB_BTC: CKM_IBM_BTC_DERIVE + + # enable non-ECDSA/non-EdDSA elliptic curve signature algorithms + XCP_CPB_ECDSA_OTHER: CKM_IBM_ECDSA_OTHER ++ ++# allow non-FIPS-approved algs (2021) ++XCP_CPB_ALG_NFIPS2021: CKM_RSA_PKCS, CKM_SHA1_RSA_PKCS, CKM_DSA_SHA1, CKM_ECDSA_SHA1, CKM_DES_KEY_GEN, CKM_DES_ECB, CKM_DES_CBC, CKM_DES_CBC_PAD, CKM_DES2_KEY_GEN, CKM_DES3_KEY_GEN, CKM_DES3_ECB, CKM_DES3_CBC, CKM_DES3_MAC, CKM_DES3_MAC_GENERAL, CKM_DES3_CBC_PAD, CKM_DES3_CMAC_GENERAL, CKM_DES3_CMAC, CKM_DES_OFB64, CKM_DES_CFB64, CKM_DES_CFB8, CKM_SHA_1_HMAC, CKM_SHA_1_HMAC_GENERAL, CKM_SHA1_KEY_DERIVATION ++ ++# allow non-FIPS-approved algs (2024) ++XCP_CPB_ALG_NFIPS2024: CKM_RSA_PKCS, CKM_SHA1_RSA_PKCS, CKM_DSA_SHA1, CKM_ECDSA_SHA1, CKM_DES_KEY_GEN, CKM_DES_ECB, CKM_DES_CBC, CKM_DES_CBC_PAD, CKM_DES2_KEY_GEN, CKM_DES3_KEY_GEN, CKM_DES3_ECB, CKM_DES3_CBC, CKM_DES3_MAC, CKM_DES3_MAC_GENERAL, CKM_DES3_CBC_PAD, CKM_DES3_CMAC_GENERAL, CKM_DES3_CMAC, CKM_DES_OFB64, CKM_DES_CFB64, CKM_DES_CFB8, CKM_SHA_1_HMAC, CKM_SHA_1_HMAC_GENERAL, CKM_SHA1_KEY_DERIVATION +-- +2.16.2.windows.1 + diff --git a/SOURCES/0015-EP11-Default-unknown-CPs-to-ON.patch b/SOURCES/0015-EP11-Default-unknown-CPs-to-ON.patch new file mode 100644 index 0000000..e7e23db --- /dev/null +++ b/SOURCES/0015-EP11-Default-unknown-CPs-to-ON.patch @@ -0,0 +1,76 @@ +From 65cb0f2b0204183617b5d6e8e475f85faa8b789d Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Mon, 14 Feb 2022 16:35:34 +0100 +Subject: [PATCH 15/34] EP11: Default unknown CPs to ON + +Newer EP11 cards know additional control points that older cards do not +know. When building the combined minimum control point setting, treat +unknown control points as ON, to not disable mechanisms just because an +older card does not know a control point. + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 21 +++++++++++++++++---- + 1 file changed, 17 insertions(+), 4 deletions(-) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index 147ce7b2..e3451163 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -10904,13 +10904,18 @@ static CK_RV control_point_handler(uint_32 adapter, uint_32 domain, + #ifdef DEBUG + TRACE_DEBUG("Control points from adapter %02X.%04X\n", adapter, domain); + TRACE_DEBUG_DUMP(" ", cp, cp_len); ++ TRACE_DEBUG("Max control point index: %lu\n", max_cp_index); + #endif + + if (data->first) { + data->first_adapter = adapter; + data->first_domain = domain; +- memcpy(data->first_cp, cp, cp_len); +- memcpy(data->combined_cp, cp, cp_len); ++ /* Apply CP bits 0 to max_cp_index-1 only */ ++ for (i = 0; i < max_cp_index; i++) { ++ data->combined_cp[CP_BYTE_NO(i)] &= ++ (cp[CP_BYTE_NO(i)] | ~CP_BIT_MASK(i)); ++ } ++ memcpy(data->first_cp, data->combined_cp, sizeof(data->first_cp)); + data->max_cp_index = max_cp_index; + data->first = 0; + } else { +@@ -10927,8 +10932,10 @@ static CK_RV control_point_handler(uint_32 adapter, uint_32 domain, + data->first_domain); + } + +- for (i = 0; i < cp_len; i++) { +- data->combined_cp[i] &= cp[i]; ++ for (i = 0; i < max_cp_index; i++) { ++ /* Apply CP bits 0 to max_cp_index-1 only */ ++ data->combined_cp[CP_BYTE_NO(i)] &= ++ (cp[CP_BYTE_NO(i)] | ~CP_BIT_MASK(i)); + } + + if (max_cp_index != data->max_cp_index) { +@@ -10973,6 +10980,11 @@ static CK_RV get_control_points(STDLL_TokData_t * tokdata, + ep11_private_data_t *ep11_data = tokdata->private_data; + + memset(&data, 0, sizeof(data)); ++ /* ++ * Turn all CPs ON by default, so that newer control points that are unknown ++ * to older cards default to ON. CPs being OFF disable functionality. ++ */ ++ memset(data.combined_cp, 0xff, sizeof(data.combined_cp)); + data.first = 1; + rc = handle_all_ep11_cards(&ep11_data->target_list, control_point_handler, + &data); +@@ -10987,6 +10999,7 @@ static CK_RV get_control_points(STDLL_TokData_t * tokdata, + TRACE_DEBUG("Combined control points from all cards (%lu CPs):\n", + data.max_cp_index); + TRACE_DEBUG_DUMP(" ", cp, *cp_len); ++ TRACE_DEBUG("Max control point index: %lu\n", data.max_cp_index); + print_control_points(cp, *cp_len, data.max_cp_index); + #endif + +-- +2.16.2.windows.1 + diff --git a/SOURCES/0016-COMMON-Add-defines-for-Dilithium-round-2-and-3-varia.patch b/SOURCES/0016-COMMON-Add-defines-for-Dilithium-round-2-and-3-varia.patch new file mode 100644 index 0000000..05b3901 --- /dev/null +++ b/SOURCES/0016-COMMON-Add-defines-for-Dilithium-round-2-and-3-varia.patch @@ -0,0 +1,76 @@ +From 95f64e0c9f30ea8e0712e554418230659dabe1ec Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Wed, 16 Feb 2022 13:44:10 +0100 +Subject: [PATCH 16/34] COMMON: Add defines for Dilithium round 2 and 3 + variants + +Signed-off-by: Ingo Franzki +--- + usr/include/pkcs11types.h | 12 ++++++++++-- + usr/lib/common/p11util.c | 6 ++++++ + 2 files changed, 16 insertions(+), 2 deletions(-) + +diff --git a/usr/include/pkcs11types.h b/usr/include/pkcs11types.h +index bc53e672..6bf9c1fa 100644 +--- a/usr/include/pkcs11types.h ++++ b/usr/include/pkcs11types.h +@@ -437,6 +437,7 @@ typedef CK_ULONG CK_KEY_TYPE; + #ifndef OCK_NO_EP11_DEFINES + #define CKK_IBM_PQC_DILITHIUM CKK_VENDOR_DEFINED + 0x10023 + #endif ++#define CKK_IBM_DILITHIUM CKK_IBM_PQC_DILITHIUM + + /* CK_CERTIFICATE_TYPE is a value that identifies a certificate + * type */ +@@ -594,8 +595,15 @@ typedef CK_ULONG CK_ATTRIBUTE_TYPE; + #define CKA_IBM_PROTKEY_NEVER_EXTRACTABLE (CKA_VENDOR_DEFINED +0x1000d) + #define CKA_IBM_OPAQUE_PKEY (CKA_VENDOR_DEFINED + 0xd0100) + +-/* For Dilithium, oid = 1.3.6.1.4.1.2.267.1.6.5 */ +-#define IBM_DILITHIUM_KEYFORM_ROUND2 1 ++#define CK_IBM_DILITHIUM_KEYFORM_ROUND2_65 1 ++#define CK_IBM_DILITHIUM_KEYFORM_ROUND2_87 2 ++#define CK_IBM_DILITHIUM_KEYFORM_ROUND3_44 3 ++#define CK_IBM_DILITHIUM_KEYFORM_ROUND3_65 4 ++#define CK_IBM_DILITHIUM_KEYFORM_ROUND3_87 5 ++ ++#define IBM_DILITHIUM_KEYFORM_ROUND2 CK_IBM_DILITHIUM_KEYFORM_ROUND2_65 ++ ++#define CKA_IBM_DILITHIUM_MODE (CKA_VENDOR_DEFINED + 0x00010) + + #define CKA_IBM_DILITHIUM_KEYFORM (CKA_VENDOR_DEFINED + 0xd0001) + #define CKA_IBM_DILITHIUM_RHO (CKA_VENDOR_DEFINED + 0xd0002) +diff --git a/usr/lib/common/p11util.c b/usr/lib/common/p11util.c +index 4ef33306..f3a031e3 100644 +--- a/usr/lib/common/p11util.c ++++ b/usr/lib/common/p11util.c +@@ -123,6 +123,10 @@ const char *p11_get_ckr(CK_RV rc) + } + } + ++#ifndef CKA_IBM_PQC_PARAMS ++#define CKA_IBM_PQC_PARAMS (CKA_VENDOR_DEFINED +0x1000e) ++#endif ++ + // + // p11_get_cka - return textual interpretation of an attribute type + // only simple types - no arrays. For unknown a ptr to a static +@@ -221,6 +225,7 @@ const char *p11_get_cka(CK_ATTRIBUTE_TYPE atype) + _sym2str(CKA_IBM_PROTKEY_NEVER_EXTRACTABLE); + _sym2str(CKA_IBM_OPAQUE_PKEY); + _sym2str(CKA_IBM_DILITHIUM_KEYFORM); ++ _sym2str(CKA_IBM_DILITHIUM_MODE); + _sym2str(CKA_IBM_DILITHIUM_RHO); + _sym2str(CKA_IBM_DILITHIUM_SEED); + _sym2str(CKA_IBM_DILITHIUM_TR); +@@ -228,6 +233,7 @@ const char *p11_get_cka(CK_ATTRIBUTE_TYPE atype) + _sym2str(CKA_IBM_DILITHIUM_S2); + _sym2str(CKA_IBM_DILITHIUM_T0); + _sym2str(CKA_IBM_DILITHIUM_T1); ++ _sym2str(CKA_IBM_PQC_PARAMS); + default: + sprintf(buf, "unknown attribute type 0x%08lx", atype); + return buf; +-- +2.16.2.windows.1 + diff --git a/SOURCES/0017-COMMON-Add-defines-for-Kyber.patch b/SOURCES/0017-COMMON-Add-defines-for-Kyber.patch new file mode 100644 index 0000000..ee444ab --- /dev/null +++ b/SOURCES/0017-COMMON-Add-defines-for-Kyber.patch @@ -0,0 +1,103 @@ +From d4bb3258779d757ce6faf5b698c70af77ab7647f Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Wed, 16 Feb 2022 13:51:16 +0100 +Subject: [PATCH 17/34] COMMON: Add defines for Kyber + +Signed-off-by: Ingo Franzki +--- + usr/include/pkcs11types.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++ + usr/lib/common/p11util.c | 4 ++++ + 2 files changed, 53 insertions(+) + +diff --git a/usr/include/pkcs11types.h b/usr/include/pkcs11types.h +index 6bf9c1fa..3d967a13 100644 +--- a/usr/include/pkcs11types.h ++++ b/usr/include/pkcs11types.h +@@ -439,6 +439,11 @@ typedef CK_ULONG CK_KEY_TYPE; + #endif + #define CKK_IBM_DILITHIUM CKK_IBM_PQC_DILITHIUM + ++#ifndef OCK_NO_EP11_DEFINES ++#define CKK_IBM_PQC_KYBER CKK_VENDOR_DEFINED + 0x10024 ++#endif ++#define CKK_IBM_KYBER CKK_IBM_PQC_KYBER ++ + /* CK_CERTIFICATE_TYPE is a value that identifies a certificate + * type */ + /* CK_CERTIFICATE_TYPE was changed from CK_USHORT to CK_ULONG +@@ -614,6 +619,49 @@ typedef CK_ULONG CK_ATTRIBUTE_TYPE; + #define CKA_IBM_DILITHIUM_T0 (CKA_VENDOR_DEFINED + 0xd0007) + #define CKA_IBM_DILITHIUM_T1 (CKA_VENDOR_DEFINED + 0xd0008) + ++#define CKA_IBM_KYBER_MODE (CKA_VENDOR_DEFINED + 0x0000E) ++ ++#define CKA_IBM_KYBER_KEYFORM (CKA_VENDOR_DEFINED + 0xd0009) ++#define CKA_IBM_KYBER_PK (CKA_VENDOR_DEFINED + 0xd000A) ++#define CKA_IBM_KYBER_SK (CKA_VENDOR_DEFINED + 0xd000B) ++ ++#define CK_IBM_KYBER_KEYFORM_ROUND2_768 1 ++#define CK_IBM_KYBER_KEYFORM_ROUND2_1024 2 ++ ++#define CK_IBM_KYBER_KEM_VERSION 0 ++ ++typedef CK_ULONG CK_IBM_KYBER_KEM_MODE; ++ ++#define CK_IBM_KYBER_KEM_ENCAPSULATE 1 ++#define CK_IBM_KYBER_KEM_DECAPSULATE 2 ++ ++typedef CK_ULONG CK_IBM_KYBER_KDF_TYPE; ++ ++#if !defined(CKD_VENDOR_DEFINED) ++#define CKD_VENDOR_DEFINED 0x80000000UL ++#endif ++ ++#ifndef OCK_NO_EP11_DEFINES ++#define CKD_IBM_HYBRID_NULL CKD_VENDOR_DEFINED + 0x00000001UL ++#define CKD_IBM_HYBRID_SHA1_KDF CKD_VENDOR_DEFINED + 0x00000002UL ++#define CKD_IBM_HYBRID_SHA224_KDF CKD_VENDOR_DEFINED + 0x00000003UL ++#define CKD_IBM_HYBRID_SHA256_KDF CKD_VENDOR_DEFINED + 0x00000004UL ++#define CKD_IBM_HYBRID_SHA384_KDF CKD_VENDOR_DEFINED + 0x00000005UL ++#define CKD_IBM_HYBRID_SHA512_KDF CKD_VENDOR_DEFINED + 0x00000006UL ++#endif ++ ++typedef struct CK_IBM_KYBER_PARAMS { ++ CK_ULONG ulVersion; ++ CK_IBM_KYBER_KEM_MODE mode; ++ CK_IBM_KYBER_KDF_TYPE kdf; ++ CK_BBOOL bPrepend; ++ CK_BYTE *pCipher; ++ CK_ULONG ulCipherLen; ++ CK_BYTE *pSharedData; ++ CK_ULONG ulSharedDataLen; ++ CK_OBJECT_HANDLE hSecret; ++} CK_IBM_KYBER_PARAMS; ++ + /* For NSS 3.30: */ + #define NSSCK_VENDOR_NSS 0x4E534350 + #define CKA_NSS (CKA_VENDOR_DEFINED | NSSCK_VENDOR_NSS) +@@ -941,6 +989,7 @@ typedef CK_ULONG CK_MECHANISM_TYPE; + #define CKM_IBM_SHA3_512 CKM_VENDOR_DEFINED + 0x00010004 + #define CKM_IBM_CMAC CKM_VENDOR_DEFINED + 0x00010007 + #define CKM_IBM_DILITHIUM CKM_VENDOR_DEFINED + 0x00010023 ++#define CKM_IBM_KYBER CKM_VENDOR_DEFINED + 0x00010024 + #define CKM_IBM_SHA3_224_HMAC CKM_VENDOR_DEFINED + 0x00010025 + #define CKM_IBM_SHA3_256_HMAC CKM_VENDOR_DEFINED + 0x00010026 + #define CKM_IBM_SHA3_384_HMAC CKM_VENDOR_DEFINED + 0x00010027 +diff --git a/usr/lib/common/p11util.c b/usr/lib/common/p11util.c +index f3a031e3..8b81ab42 100644 +--- a/usr/lib/common/p11util.c ++++ b/usr/lib/common/p11util.c +@@ -234,6 +234,10 @@ const char *p11_get_cka(CK_ATTRIBUTE_TYPE atype) + _sym2str(CKA_IBM_DILITHIUM_T0); + _sym2str(CKA_IBM_DILITHIUM_T1); + _sym2str(CKA_IBM_PQC_PARAMS); ++ _sym2str(CKA_IBM_KYBER_KEYFORM); ++ _sym2str(CKA_IBM_KYBER_MODE); ++ _sym2str(CKA_IBM_KYBER_PK); ++ _sym2str(CKA_IBM_KYBER_SK); + default: + sprintf(buf, "unknown attribute type 0x%08lx", atype); + return buf; +-- +2.16.2.windows.1 + diff --git a/SOURCES/0018-COMMON-Add-post-quantum-algorithm-OIDs.patch b/SOURCES/0018-COMMON-Add-post-quantum-algorithm-OIDs.patch new file mode 100644 index 0000000..cb3c985 --- /dev/null +++ b/SOURCES/0018-COMMON-Add-post-quantum-algorithm-OIDs.patch @@ -0,0 +1,249 @@ +From 67ed25a8f7764e61647c3c31d09a1e60db38006b Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Wed, 16 Feb 2022 11:20:54 +0100 +Subject: [PATCH 18/34] COMMON: Add post-quantum algorithm OIDs + +Signed-off-by: Ingo Franzki +--- + usr/include/include.mk | 2 +- + usr/include/pqc_oids.h | 48 ++++++++++++++++++++++++++ + usr/lib/common/common.mk | 3 +- + usr/lib/common/globals.c | 1 + + usr/lib/common/pqc_defs.h | 48 ++++++++++++++++++++++++++ + usr/lib/common/pqc_supported.c | 78 ++++++++++++++++++++++++++++++++++++++++++ + 6 files changed, 178 insertions(+), 2 deletions(-) + create mode 100644 usr/include/pqc_oids.h + create mode 100644 usr/lib/common/pqc_defs.h + create mode 100644 usr/lib/common/pqc_supported.c + +diff --git a/usr/include/include.mk b/usr/include/include.mk +index 79e593d7..a63e043f 100644 +--- a/usr/include/include.mk ++++ b/usr/include/include.mk +@@ -3,7 +3,7 @@ opencryptokiincludedir = ${includedir}/opencryptoki + opencryptokiinclude_HEADERS = \ + usr/include/apiclient.h usr/include/pkcs11types.h \ + usr/include/pkcs11.h \ +- usr/include/ec_curves.h ++ usr/include/ec_curves.h usr/include/pqc_oids.h + + noinst_HEADERS += \ + usr/include/apictl.h usr/include/local_types.h \ +diff --git a/usr/include/pqc_oids.h b/usr/include/pqc_oids.h +new file mode 100644 +index 00000000..0891373e +--- /dev/null ++++ b/usr/include/pqc_oids.h +@@ -0,0 +1,48 @@ ++/* ++ * COPYRIGHT (c) International Business Machines Corp. 2022 ++ * ++ * This program is provided under the terms of the Common Public License, ++ * version 1.0 (CPL-1.0). Any use, reproduction or distribution for this ++ * software constitutes recipient's acceptance of CPL-1.0 terms which can be ++ * found in the file LICENSE file or at ++ * https://opensource.org/licenses/cpl1.0.php ++ */ ++ ++ ++#ifndef _PQC_OIDS_H_ ++#define _PQC_OIDS_H_ ++ ++/* ++ * OIDs and their DER encoding for the post-quantum crypto algorithms ++ * supported by OpenCryptoki: ++ */ ++ ++/* Dilithium Round 2 high-security (SHAKE-256): 1.3.6.1.4.1.2.267.1.6.5 */ ++#define OCK_DILITHIUM_R2_65 { 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, \ ++ 0x01, 0x02, 0x82, 0x0B, 0x01, 0x06, 0x05 } ++ ++/* Dilithium Round 2 for outbound authentication: 1.3.6.1.4.1.2.267.1.8.7 */ ++#define OCK_DILITHIUM_R2_87 { 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, \ ++ 0x01, 0x02, 0x82, 0x0B, 0x01, 0x08, 0x07 } ++ ++/* Dilithium Round 3 weak (SHAKE-256): 1.3.6.1.4.1.2.267.7.4.4 */ ++#define OCK_DILITHIUM_R3_44 { 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, \ ++ 0x01, 0x02, 0x82, 0x0B, 0x07, 0x04, 0x04 } ++ ++/* Dilithium Round 3 recommended (SHAKE-256): 1.3.6.1.4.1.2.267.7.6.5 */ ++#define OCK_DILITHIUM_R3_65 { 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, \ ++ 0x01, 0x02, 0x82, 0x0B, 0x07, 0x06, 0x05 } ++ ++/* Dilithium Round 3 high-security (SHAKE-256): 1.3.6.1.4.1.2.267.7.8.7 */ ++#define OCK_DILITHIUM_R3_87 { 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, \ ++ 0x01, 0x02, 0x82, 0x0B, 0x07, 0x08, 0x07 } ++ ++/* Kyber Round 2 768 (SHAKE-128): 1.3.6.1.4.1.2.267.5.3.3 */ ++#define OCK_KYBER_R2_768 { 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, \ ++ 0x01, 0x02, 0x82, 0x0B, 0x05, 0x03, 0x03 } ++ ++/* Kyber Round 2 1024 (SHAKE-128): 1.3.6.1.4.1.2.267.5.4.4 */ ++#define OCK_KYBER_R2_1024 { 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, \ ++ 0x01, 0x02, 0x82, 0x0B, 0x05, 0x04, 0x04 } ++ ++#endif // _PQC_OIDS_H_ +diff --git a/usr/lib/common/common.mk b/usr/lib/common/common.mk +index 6341cb74..93f1e21f 100644 +--- a/usr/lib/common/common.mk ++++ b/usr/lib/common/common.mk +@@ -7,4 +7,5 @@ noinst_HEADERS += \ + usr/lib/common/p11util.h usr/lib/common/event_client.h \ + usr/lib/common/list.h usr/lib/common/tok_specific.h \ + usr/lib/common/uri_enc.h usr/lib/common/uri.h \ +- usr/lib/common/buffer.h usr/lib/common/pin_prompt.h ++ usr/lib/common/buffer.h usr/lib/common/pin_prompt.h \ ++ usr/lib/common/pqc_defs.h +diff --git a/usr/lib/common/globals.c b/usr/lib/common/globals.c +index db4d352c..5b79e785 100644 +--- a/usr/lib/common/globals.c ++++ b/usr/lib/common/globals.c +@@ -27,6 +27,7 @@ + #include "defs.h" + #include "host_defs.h" + #include "h_extern.h" ++#include "pqc_oids.h" + + struct ST_FCN_LIST function_list; + +diff --git a/usr/lib/common/pqc_defs.h b/usr/lib/common/pqc_defs.h +new file mode 100644 +index 00000000..51ee1200 +--- /dev/null ++++ b/usr/lib/common/pqc_defs.h +@@ -0,0 +1,48 @@ ++/* ++ * COPYRIGHT (c) International Business Machines Corp. 2022 ++ * ++ * This program is provided under the terms of the Common Public License, ++ * version 1.0 (CPL-1.0). Any use, reproduction or distribution for this ++ * software constitutes recipient's acceptance of CPL-1.0 terms which can be ++ * found in the file LICENSE file or at ++ * https://opensource.org/licenses/cpl1.0.php ++ */ ++ ++#ifndef _PQC_DEFS ++#define _PQC_DEFS ++ ++#include ++ ++#include "pqc_oids.h" ++ ++extern const CK_BYTE dilithium_r2_65[]; ++extern const CK_ULONG dilithium_r2_65_len; ++extern const CK_BYTE dilithium_r2_87[]; ++extern const CK_ULONG dilithium_r2_87_len; ++extern const CK_BYTE dilithium_r3_44[]; ++extern const CK_ULONG dilithium_r3_44_len; ++extern const CK_BYTE dilithium_r3_56[]; ++extern const CK_ULONG dilithium_r3_56_len; ++extern const CK_BYTE dilithium_r3_87[]; ++extern const CK_ULONG dilithium_r3_87_len; ++ ++extern const CK_BYTE kyber_r2_768[]; ++extern const CK_ULONG kyber_r2_768_len; ++extern const CK_BYTE kyber_r2_1024[]; ++extern const CK_ULONG kyber_r2_1024_len; ++ ++struct pqc_oid { ++ const CK_BYTE *oid; ++ CK_ULONG oid_len; ++ CK_ULONG keyform; ++}; ++ ++extern const struct pqc_oid dilithium_oids[]; ++extern const struct pqc_oid kyber_oids[]; ++ ++const struct pqc_oid *find_pqc_by_keyform(const struct pqc_oid *pqcs, ++ CK_ULONG keyform); ++const struct pqc_oid *find_pqc_by_oid(const struct pqc_oid *pqcs, ++ CK_BYTE *oid, CK_ULONG oid_len); ++ ++#endif +diff --git a/usr/lib/common/pqc_supported.c b/usr/lib/common/pqc_supported.c +new file mode 100644 +index 00000000..4f048c33 +--- /dev/null ++++ b/usr/lib/common/pqc_supported.c +@@ -0,0 +1,78 @@ ++/* ++ * COPYRIGHT (c) International Business Machines Corp. 2022 ++ * ++ * This program is provided under the terms of the Common Public License, ++ * version 1.0 (CPL-1.0). Any use, reproduction or distribution for this ++ * software constitutes recipient's acceptance of CPL-1.0 terms which can be ++ * found in the file LICENSE file or at ++ * https://opensource.org/licenses/cpl1.0.php ++ */ ++ ++#include ++#include "pkcs11types.h" ++#include "pqc_defs.h" ++ ++const CK_BYTE dilithium_r2_65[] = OCK_DILITHIUM_R2_65; ++const CK_ULONG dilithium_r2_65_len = sizeof(dilithium_r2_65); ++const CK_BYTE dilithium_r2_87[] = OCK_DILITHIUM_R2_87; ++const CK_ULONG dilithium_r2_87_len = sizeof(dilithium_r2_87); ++const CK_BYTE dilithium_r3_44[] = OCK_DILITHIUM_R3_44; ++const CK_ULONG dilithium_r3_44_len = sizeof(dilithium_r3_44); ++const CK_BYTE dilithium_r3_65[] = OCK_DILITHIUM_R3_65; ++const CK_ULONG dilithium_r3_65_len = sizeof(dilithium_r3_65); ++const CK_BYTE dilithium_r3_87[] = OCK_DILITHIUM_R3_87; ++const CK_ULONG dilithium_r3_87_len = sizeof(dilithium_r3_87); ++ ++const struct pqc_oid dilithium_oids[] = { ++ { .oid = dilithium_r2_65, .oid_len = dilithium_r2_65_len, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_65 }, ++ { .oid = dilithium_r2_87, .oid_len = dilithium_r2_87_len, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_87 }, ++ { .oid = dilithium_r3_44, .oid_len = dilithium_r3_44_len, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_44 }, ++ { .oid = dilithium_r3_65, .oid_len = dilithium_r3_65_len, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_65 }, ++ { .oid = dilithium_r3_87, .oid_len = dilithium_r3_87_len, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_87 }, ++ { .oid = NULL, .oid_len = 0, .keyform = 0 } ++}; ++ ++const CK_BYTE kyber_r2_768[] = OCK_KYBER_R2_768; ++const CK_ULONG kyber_r2_768_len = sizeof(kyber_r2_768); ++const CK_BYTE kyber_r2_1024[] = OCK_KYBER_R2_1024; ++const CK_ULONG kyber_r2_1024_len = sizeof(kyber_r2_1024); ++ ++const struct pqc_oid kyber_oids[] = { ++ { .oid = kyber_r2_768, .oid_len = kyber_r2_768_len, ++ .keyform = CK_IBM_KYBER_KEYFORM_ROUND2_768 }, ++ { .oid = kyber_r2_1024, .oid_len = kyber_r2_1024_len, ++ .keyform = CK_IBM_KYBER_KEYFORM_ROUND2_1024 }, ++ { .oid = NULL, .oid_len = 0, .keyform = 0 } ++}; ++ ++const struct pqc_oid *find_pqc_by_keyform(const struct pqc_oid *pqcs, ++ CK_ULONG keyform) ++{ ++ CK_ULONG i; ++ ++ for (i = 0; pqcs[i].oid != NULL; i++) { ++ if (pqcs[i].keyform == keyform) ++ return &pqcs[i]; ++ } ++ ++ return NULL; ++} ++ ++const struct pqc_oid *find_pqc_by_oid(const struct pqc_oid *pqcs, ++ CK_BYTE *oid, CK_ULONG oid_len) ++{ ++ CK_ULONG i; ++ ++ for (i = 0; pqcs[i].oid != NULL; i++) { ++ if (pqcs[i].oid_len == oid_len && ++ memcmp(pqcs[i].oid, oid, oid_len) == 0) ++ return &pqcs[i]; ++ } ++ ++ return NULL; ++} +-- +2.16.2.windows.1 + diff --git a/SOURCES/0019-COMMON-Dilithium-key-BER-encoding-decoding-allow-dif.patch b/SOURCES/0019-COMMON-Dilithium-key-BER-encoding-decoding-allow-dif.patch new file mode 100644 index 0000000..90a6c20 --- /dev/null +++ b/SOURCES/0019-COMMON-Dilithium-key-BER-encoding-decoding-allow-dif.patch @@ -0,0 +1,604 @@ +From 76307be97a42f5a743e7cf0ef75a87dac0c0106f Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Wed, 16 Feb 2022 13:04:24 +0100 +Subject: [PATCH 19/34] COMMON: Dilithium key BER encoding/decoding allow + different OIDs + +Signed-off-by: Ingo Franzki +--- + usr/lib/cca_stdll/cca_stdll.mk | 2 +- + usr/lib/common/asn1.c | 143 ++++++++++++++++++++----------- + usr/lib/common/globals.c | 8 +- + usr/lib/common/h_extern.h | 54 ++++++------ + usr/lib/common/key.c | 10 ++- + usr/lib/common/key_mgr.c | 13 ++- + usr/lib/ep11_stdll/ep11_specific.c | 6 +- + usr/lib/ep11_stdll/ep11_stdll.mk | 3 +- + usr/lib/ica_s390_stdll/ica_s390_stdll.mk | 2 +- + usr/lib/icsf_stdll/icsf_stdll.mk | 2 +- + usr/lib/soft_stdll/soft_stdll.mk | 2 +- + usr/lib/tpm_stdll/tpm_stdll.mk | 2 +- + usr/sbin/pkcscca/pkcscca.mk | 2 +- + 13 files changed, 152 insertions(+), 97 deletions(-) + +diff --git a/usr/lib/cca_stdll/cca_stdll.mk b/usr/lib/cca_stdll/cca_stdll.mk +index 9b71085a..5963df59 100644 +--- a/usr/lib/cca_stdll/cca_stdll.mk ++++ b/usr/lib/cca_stdll/cca_stdll.mk +@@ -41,7 +41,7 @@ opencryptoki_stdll_libpkcs11_cca_la_SOURCES = usr/lib/common/asn1.c \ + usr/lib/common/utility_common.c usr/lib/common/ec_supported.c \ + usr/lib/api/policyhelper.c usr/lib/config/configuration.c \ + usr/lib/config/cfgparse.y usr/lib/config/cfglex.l \ +- usr/lib/common/mech_openssl.c ++ usr/lib/common/mech_openssl.c usr/lib/common/pqc_supported.c + + if ENABLE_LOCKS + opencryptoki_stdll_libpkcs11_cca_la_SOURCES += \ +diff --git a/usr/lib/common/asn1.c b/usr/lib/common/asn1.c +index b3f49c41..884ef489 100644 +--- a/usr/lib/common/asn1.c ++++ b/usr/lib/common/asn1.c +@@ -24,6 +24,7 @@ + #include "host_defs.h" + #include "h_extern.h" + #include "trace.h" ++#include "pqc_defs.h" + + + // +@@ -3616,7 +3617,7 @@ cleanup: + * + * SEQUENCE (2 elem) + * SEQUENCE (2 elem) +- * OBJECT IDENTIFIER 1.3.6.1.4.1.2.267.1.6.5 ++ * OBJECT IDENTIFIER 1.3.6.1.4.1.2.267.xxx + * NULL + * BIT STRING (1 elem) + * SEQUENCE (2 elem) +@@ -3624,20 +3625,26 @@ cleanup: + * BIT STRING (13824 bit) = 1728 bytes + */ + CK_RV ber_encode_IBM_DilithiumPublicKey(CK_BBOOL length_only, +- CK_BYTE **data, CK_ULONG *data_len, +- CK_ATTRIBUTE *rho, CK_ATTRIBUTE *t1) ++ CK_BYTE **data, CK_ULONG *data_len, ++ const CK_BYTE *oid, CK_ULONG oid_len, ++ CK_ATTRIBUTE *rho, CK_ATTRIBUTE *t1) + { + CK_BYTE *buf = NULL, *buf2 = NULL, *buf3 = NULL, *buf4 = NULL; +- CK_ULONG len = 0, len4, offset, total, total_len; ++ CK_BYTE *buf5 = NULL, *algid = NULL; ++ CK_ULONG len = 0, len4, offset, total, total_len, algid_len; + CK_RV rc; + + UNUSED(length_only); + + offset = 0; + rc = 0; +- total_len = ber_AlgIdDilithiumLen; ++ total_len = 0; + total = 0; + ++ /* Calculate storage for AlgID sequence */ ++ rc |= ber_encode_SEQUENCE(TRUE, NULL, &total_len, NULL, ++ oid_len + ber_NULLLen); ++ + /* Calculate storage for inner sequence */ + rc |= ber_encode_INTEGER(TRUE, NULL, &len, NULL, rho->ulValueLen); + offset += len; +@@ -3709,12 +3716,30 @@ CK_RV ber_encode_IBM_DilithiumPublicKey(CK_BBOOL length_only, + + /* + * SEQUENCE (2 elem) +- * OBJECT IDENTIFIER 1.3.6.1.4.1.2.267.1.6.5 ++ * OBJECT IDENTIFIER 1.3.6.1.4.1.2.267.xxx + * NULL <- no parms for this oid + */ +- total_len = 0; +- memcpy(buf3 + total_len, ber_AlgIdDilithium, ber_AlgIdDilithiumLen); +- total_len += ber_AlgIdDilithiumLen; ++ buf5 = (CK_BYTE *) malloc(oid_len + ber_NULLLen); ++ if (!buf5) { ++ TRACE_ERROR("%s Memory allocation failed\n", __func__); ++ rc = CKR_HOST_MEMORY; ++ goto error; ++ } ++ memcpy(buf5, oid, oid_len); ++ memcpy(buf5 + oid_len, ber_NULL, ber_NULLLen); ++ ++ rc = ber_encode_SEQUENCE(FALSE, &algid, &algid_len, buf5, ++ oid_len + ber_NULLLen); ++ free(buf5); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ber_encode_SEQUENCE failed with rc=0x%lx\n", __func__, rc); ++ goto error; ++ } ++ ++ total_len = algid_len; ++ memcpy(buf3, algid, algid_len); ++ free(algid); ++ algid = NULL; + + /* + * BIT STRING (1 elem) +@@ -3760,16 +3785,15 @@ error: + + + CK_RV ber_decode_IBM_DilithiumPublicKey(CK_BYTE *data, +- CK_ULONG data_len, +- CK_ATTRIBUTE **rho_attr, +- CK_ATTRIBUTE **t1_attr) ++ CK_ULONG data_len, ++ CK_ATTRIBUTE **rho_attr, ++ CK_ATTRIBUTE **t1_attr) + { + CK_ATTRIBUTE *rho_attr_temp = NULL; + CK_ATTRIBUTE *t1_attr_temp = NULL; + +- CK_BYTE *algid_DilithiumBase = NULL; +- CK_BYTE *algid = NULL; +- CK_ULONG algid_len; ++ CK_BYTE *algoid = NULL; ++ CK_ULONG algoid_len; + CK_BYTE *param = NULL; + CK_ULONG param_len; + CK_BYTE *val = NULL; +@@ -3780,26 +3804,20 @@ CK_RV ber_decode_IBM_DilithiumPublicKey(CK_BYTE *data, + CK_ULONG rho_len; + CK_BYTE *t1; + CK_ULONG t1_len; +- CK_ULONG field_len, offset, len; ++ CK_ULONG field_len, offset; + CK_RV rc; + + UNUSED(data_len); // XXX can this parameter be removed ? + +- rc = ber_decode_SPKI(data, &algid, &algid_len, ¶m, ¶m_len, ++ rc = ber_decode_SPKI(data, &algoid, &algoid_len, ¶m, ¶m_len, + &val, &val_len); + if (rc != CKR_OK) { + TRACE_DEVEL("ber_decode_SPKI failed\n"); + return rc; + } + +- /* Make sure we're dealing with a Dilithium key */ +- rc = ber_decode_SEQUENCE((CK_BYTE *)ber_AlgIdDilithium, &algid_DilithiumBase, &len, +- &field_len); +- if (rc != CKR_OK) { +- TRACE_DEVEL("ber_decode_SEQUENCE failed\n"); +- return rc; +- } +- if (memcmp(algid, algid_DilithiumBase, len) != 0) { ++ if (algoid_len != dilithium_r2_65_len || ++ memcmp(algoid, dilithium_r2_65, dilithium_r2_65_len) != 0) { + TRACE_ERROR("%s\n", ock_err(ERR_FUNCTION_FAILED)); + return CKR_FUNCTION_FAILED; + } +@@ -3879,18 +3897,20 @@ cleanup: + * } + */ + CK_RV ber_encode_IBM_DilithiumPrivateKey(CK_BBOOL length_only, +- CK_BYTE **data, +- CK_ULONG *data_len, +- CK_ATTRIBUTE *rho, +- CK_ATTRIBUTE *seed, +- CK_ATTRIBUTE *tr, +- CK_ATTRIBUTE *s1, +- CK_ATTRIBUTE *s2, +- CK_ATTRIBUTE *t0, +- CK_ATTRIBUTE *t1) ++ CK_BYTE **data, ++ CK_ULONG *data_len, ++ const CK_BYTE *oid, CK_ULONG oid_len, ++ CK_ATTRIBUTE *rho, ++ CK_ATTRIBUTE *seed, ++ CK_ATTRIBUTE *tr, ++ CK_ATTRIBUTE *s1, ++ CK_ATTRIBUTE *s2, ++ CK_ATTRIBUTE *t0, ++ CK_ATTRIBUTE *t1) + { + CK_BYTE *buf = NULL, *buf2 = NULL, *buf3 = NULL; +- CK_ULONG len, len2 = 0, offset; ++ CK_BYTE *algid = NULL, *algid_buf = NULL; ++ CK_ULONG len, len2 = 0, offset, algid_len = 0; + CK_BYTE version[] = { 0 }; + CK_RV rc; + +@@ -3898,6 +3918,9 @@ CK_RV ber_encode_IBM_DilithiumPrivateKey(CK_BBOOL length_only, + offset = 0; + rc = 0; + ++ rc |= ber_encode_SEQUENCE(TRUE, NULL, &algid_len, NULL, ++ oid_len + ber_NULLLen); ++ + rc |= ber_encode_INTEGER(TRUE, NULL, &len, NULL, sizeof(version)); + offset += len; + rc |= ber_encode_BIT_STRING(TRUE, NULL, &len, NULL, rho->ulValueLen, 0); +@@ -3931,7 +3954,7 @@ CK_RV ber_encode_IBM_DilithiumPrivateKey(CK_BBOOL length_only, + } + rc = ber_encode_PrivateKeyInfo(TRUE, + NULL, data_len, +- NULL, ber_AlgIdDilithiumLen, ++ NULL, algid_len, + NULL, len); + if (rc != CKR_OK) { + TRACE_DEVEL("ber_encode_PrivateKeyInfo failed\n"); +@@ -4051,10 +4074,28 @@ CK_RV ber_encode_IBM_DilithiumPrivateKey(CK_BBOOL length_only, + TRACE_ERROR("ber_encode_SEQUENCE failed\n"); + goto error; + } ++ ++ algid_buf = (CK_BYTE *) malloc(oid_len + ber_NULLLen); ++ if (!algid_buf) { ++ TRACE_ERROR("%s Memory allocation failed\n", __func__); ++ rc = CKR_HOST_MEMORY; ++ goto error; ++ } ++ memcpy(algid_buf, oid, oid_len); ++ memcpy(algid_buf + oid_len, ber_NULL, ber_NULLLen); ++ ++ rc = ber_encode_SEQUENCE(FALSE, &algid, &algid_len, algid_buf, ++ oid_len + ber_NULLLen); ++ free(algid_buf); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ber_encode_SEQUENCE failed with rc=0x%lx\n", __func__, rc); ++ goto error; ++ } ++ + rc = ber_encode_PrivateKeyInfo(FALSE, + data, data_len, +- ber_AlgIdDilithium, +- ber_AlgIdDilithiumLen, buf2, len); ++ algid, algid_len, ++ buf2, len); + if (rc != CKR_OK) { + TRACE_ERROR("ber_encode_PrivateKeyInfo failed\n"); + } +@@ -4066,6 +4107,8 @@ error: + free(buf2); + if (buf) + free(buf); ++ if (algid) ++ free(algid); + + return rc; + } +@@ -4087,19 +4130,19 @@ error: + * } + */ + CK_RV ber_decode_IBM_DilithiumPrivateKey(CK_BYTE *data, +- CK_ULONG data_len, +- CK_ATTRIBUTE **rho, +- CK_ATTRIBUTE **seed, +- CK_ATTRIBUTE **tr, +- CK_ATTRIBUTE **s1, +- CK_ATTRIBUTE **s2, +- CK_ATTRIBUTE **t0, +- CK_ATTRIBUTE **t1) ++ CK_ULONG data_len, ++ CK_ATTRIBUTE **rho, ++ CK_ATTRIBUTE **seed, ++ CK_ATTRIBUTE **tr, ++ CK_ATTRIBUTE **s1, ++ CK_ATTRIBUTE **s2, ++ CK_ATTRIBUTE **t0, ++ CK_ATTRIBUTE **t1) + { + CK_ATTRIBUTE *rho_attr = NULL, *seed_attr = NULL; + CK_ATTRIBUTE *tr_attr = NULL, *s1_attr = NULL, *s2_attr = NULL; + CK_ATTRIBUTE *t0_attr = NULL, *t1_attr = NULL; +- CK_BYTE *alg = NULL; ++ CK_BYTE *algoid = NULL; + CK_BYTE *dilithium_priv_key = NULL; + CK_BYTE *buf = NULL; + CK_BYTE *tmp = NULL; +@@ -4107,15 +4150,15 @@ CK_RV ber_decode_IBM_DilithiumPrivateKey(CK_BYTE *data, + CK_RV rc; + + /* Check if this is a Dilithium private key */ +- rc = ber_decode_PrivateKeyInfo(data, data_len, &alg, &len, ++ rc = ber_decode_PrivateKeyInfo(data, data_len, &algoid, &len, + &dilithium_priv_key); + if (rc != CKR_OK) { + TRACE_DEVEL("ber_decode_PrivateKeyInfo failed\n"); + return rc; + } + +- if (memcmp(alg, ber_AlgIdDilithium, ber_AlgIdDilithiumLen) != 0) { +- // probably ought to use a different error ++ if (len != dilithium_r2_65_len + ber_NULLLen || ++ memcmp(algoid, dilithium_r2_65, dilithium_r2_65_len) != 0) { + TRACE_ERROR("%s\n", ock_err(ERR_FUNCTION_FAILED)); + return CKR_FUNCTION_FAILED; + } +diff --git a/usr/lib/common/globals.c b/usr/lib/common/globals.c +index 5b79e785..a7197ec6 100644 +--- a/usr/lib/common/globals.c ++++ b/usr/lib/common/globals.c +@@ -105,11 +105,7 @@ const CK_BYTE ber_AlgIdRSAEncryption[] = { + const CK_BYTE der_AlgIdECBase[] = + { 0x30, 0x09, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01 }; + +-const CK_BYTE ber_AlgIdDilithium[] = +- { 0x30, 0x0F, 0x06, 0x0B, 0x2B, 0x06, 0x01, +- 0x04, 0x01, 0x02, 0x82, 0x0B, 0x01, 0x06, +- 0x05, 0x05, 0x00 +-}; ++const CK_BYTE ber_NULL[] = { 0x05, 0x00 }; + + // ID Lengths + // +@@ -135,7 +131,7 @@ const CK_ULONG ber_AlgSha384Len = sizeof(ber_AlgSha384); + const CK_ULONG ber_AlgSha512Len = sizeof(ber_AlgSha512); + const CK_ULONG ber_AlgIdRSAEncryptionLen = sizeof(ber_AlgIdRSAEncryption); + const CK_ULONG der_AlgIdECBaseLen = sizeof(der_AlgIdECBase); +-const CK_ULONG ber_AlgIdDilithiumLen = sizeof(ber_AlgIdDilithium); ++const CK_ULONG ber_NULLLen = sizeof(ber_NULL); + + const CK_ULONG des_weak_count = 4; + const CK_ULONG des_semi_weak_count = 12; +diff --git a/usr/lib/common/h_extern.h b/usr/lib/common/h_extern.h +index 340ab88d..41ca12df 100644 +--- a/usr/lib/common/h_extern.h ++++ b/usr/lib/common/h_extern.h +@@ -56,16 +56,14 @@ extern const CK_BYTE ber_rsaEncryption[]; + extern const CK_ULONG ber_rsaEncryptionLen; + extern const CK_BYTE der_AlgIdECBase[]; + extern const CK_ULONG der_AlgIdECBaseLen; +-extern const CK_BYTE ber_AlgIdDilithium[]; +-extern const CK_ULONG ber_AlgIdDilithiumLen; + extern const CK_BYTE ber_idDSA[]; + extern const CK_ULONG ber_idDSALen; + extern const CK_BYTE ber_idDH[]; + extern const CK_ULONG ber_idDHLen; + extern const CK_BYTE ber_idEC[]; + extern const CK_ULONG ber_idECLen; +-extern const CK_BYTE ber_idDilithium[]; +-extern const CK_ULONG ber_idDilithiumLen; ++extern const CK_BYTE ber_NULL[]; ++extern const CK_ULONG ber_NULLLen; + + #if !(NOMD2) + extern const CK_BYTE ber_md2WithRSAEncryption[]; +@@ -2742,35 +2740,37 @@ CK_RV ber_decode_ECDHPrivateKey(CK_BYTE *data, + CK_ATTRIBUTE **pub_key, + CK_ATTRIBUTE **priv_key); + +-CK_RV ber_encode_IBM_DilithiumPublicKey(CK_BBOOL length_only, CK_BYTE **data, +- CK_ULONG *data_len, CK_ATTRIBUTE *rho, +- CK_ATTRIBUTE *t1); ++CK_RV ber_encode_IBM_DilithiumPublicKey(CK_BBOOL length_only, ++ CK_BYTE **data, CK_ULONG *data_len, ++ const CK_BYTE *oid, CK_ULONG oid_len, ++ CK_ATTRIBUTE *rho, CK_ATTRIBUTE *t1); + + CK_RV ber_decode_IBM_DilithiumPublicKey(CK_BYTE *data, +- CK_ULONG data_len, +- CK_ATTRIBUTE **rho_attr, +- CK_ATTRIBUTE **t1_attr); ++ CK_ULONG data_len, ++ CK_ATTRIBUTE **rho_attr, ++ CK_ATTRIBUTE **t1_attr); + + CK_RV ber_encode_IBM_DilithiumPrivateKey(CK_BBOOL length_only, +- CK_BYTE **data, +- CK_ULONG *data_len, +- CK_ATTRIBUTE *rho, +- CK_ATTRIBUTE *seed, +- CK_ATTRIBUTE *tr, +- CK_ATTRIBUTE *s1, +- CK_ATTRIBUTE *s2, +- CK_ATTRIBUTE *t0, +- CK_ATTRIBUTE *t1); ++ CK_BYTE **data, ++ CK_ULONG *data_len, ++ const CK_BYTE *oid, CK_ULONG oid_len, ++ CK_ATTRIBUTE *rho, ++ CK_ATTRIBUTE *seed, ++ CK_ATTRIBUTE *tr, ++ CK_ATTRIBUTE *s1, ++ CK_ATTRIBUTE *s2, ++ CK_ATTRIBUTE *t0, ++ CK_ATTRIBUTE *t1); + + CK_RV ber_decode_IBM_DilithiumPrivateKey(CK_BYTE *data, +- CK_ULONG data_len, +- CK_ATTRIBUTE **rho, +- CK_ATTRIBUTE **seed, +- CK_ATTRIBUTE **tr, +- CK_ATTRIBUTE **s1, +- CK_ATTRIBUTE **s2, +- CK_ATTRIBUTE **t0, +- CK_ATTRIBUTE **t1); ++ CK_ULONG data_len, ++ CK_ATTRIBUTE **rho, ++ CK_ATTRIBUTE **seed, ++ CK_ATTRIBUTE **tr, ++ CK_ATTRIBUTE **s1, ++ CK_ATTRIBUTE **s2, ++ CK_ATTRIBUTE **t0, ++ CK_ATTRIBUTE **t1); + + typedef CK_RV (*t_rsa_encrypt)(STDLL_TokData_t *, CK_BYTE *in_data, + CK_ULONG in_data_len, CK_BYTE *out_data, +diff --git a/usr/lib/common/key.c b/usr/lib/common/key.c +index 6e9a839a..41857b97 100644 +--- a/usr/lib/common/key.c ++++ b/usr/lib/common/key.c +@@ -81,6 +81,7 @@ + #include "h_extern.h" + #include "attributes.h" + #include "trace.h" ++#include "pqc_defs.h" + + #include "tok_spec_struct.h" + +@@ -2688,7 +2689,10 @@ CK_RV ibm_dilithium_publ_get_spki(TEMPLATE *tmpl, CK_BBOOL length_only, + return rc; + } + +- rc = ber_encode_IBM_DilithiumPublicKey(length_only, data,data_len, rho, t1); ++ rc = ber_encode_IBM_DilithiumPublicKey(length_only, data, data_len, ++ dilithium_r2_65, ++ dilithium_r2_65_len, ++ rho, t1); + if (rc != CKR_OK) { + TRACE_ERROR("ber_encode_IBM_DilithiumPublicKey failed.\n"); + return rc; +@@ -2766,7 +2770,9 @@ CK_RV ibm_dilithium_priv_wrap_get_data(TEMPLATE *tmpl, + } + + rc = ber_encode_IBM_DilithiumPrivateKey(length_only, data, data_len, +- rho, seed, tr, s1, s2, t0, t1); ++ dilithium_r2_65, ++ dilithium_r2_65_len, ++ rho, seed, tr, s1, s2, t0, t1); + if (rc != CKR_OK) { + TRACE_DEVEL("ber_encode_IBM_DilithiumPrivateKey failed\n"); + } +diff --git a/usr/lib/common/key_mgr.c b/usr/lib/common/key_mgr.c +index 99f2a72e..01103dc2 100644 +--- a/usr/lib/common/key_mgr.c ++++ b/usr/lib/common/key_mgr.c +@@ -35,6 +35,7 @@ + #include "attributes.h" + #include "tok_spec_struct.h" + #include "trace.h" ++#include "pqc_defs.h" + + #include "../api/policy.h" + #include "../api/statistics.h" +@@ -1368,7 +1369,7 @@ CK_RV key_mgr_get_private_key_type(CK_BYTE *keydata, + { + CK_BYTE *alg = NULL; + CK_BYTE *priv_key = NULL; +- CK_ULONG alg_len; ++ CK_ULONG alg_len, i; + CK_RV rc; + + rc = ber_decode_PrivateKeyInfo(keydata, keylen, &alg, &alg_len, &priv_key); +@@ -1408,10 +1409,14 @@ CK_RV key_mgr_get_private_key_type(CK_BYTE *keydata, + return CKR_OK; + } + } +- // Check only the OBJECT IDENTIFIER for DILITHIUM ++ // Check only the OBJECT IDENTIFIERs for DILITHIUM + // +- if (alg_len >= ber_idDilithiumLen) { +- if (memcmp(alg, ber_idDilithium, ber_idDilithiumLen) == 0) { ++ for (i = 0; dilithium_oids[i].oid != NULL; i++) { ++ if (alg_len == dilithium_oids[i].oid_len + ber_NULLLen && ++ memcmp(alg, dilithium_oids[i].oid, ++ dilithium_oids[i].oid_len) == 0 && ++ memcmp(alg + dilithium_oids[i].oid_len, ++ ber_NULL, ber_NULLLen) == 0) { + *keytype = CKK_IBM_PQC_DILITHIUM; + return CKR_OK; + } +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index e3451163..45069ae8 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -37,6 +37,7 @@ + #include "trace.h" + #include "ock_syslog.h" + #include "ec_defs.h" ++#include "pqc_defs.h" + #include "p11util.h" + #include "events.h" + #include "cfgparser.h" +@@ -3645,7 +3646,10 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + } + + /* Encode the public key */ +- rc = ber_encode_IBM_DilithiumPublicKey(0, &data, &data_len, rho, t1); ++ rc = ber_encode_IBM_DilithiumPublicKey(FALSE, &data, &data_len, ++ dilithium_r2_65, ++ dilithium_r2_65_len, ++ rho, t1); + if (rc != CKR_OK) { + TRACE_ERROR("%s public key import class=0x%lx rc=0x%lx " + "data_len=0x%lx\n", __func__, class, rc, data_len); +diff --git a/usr/lib/ep11_stdll/ep11_stdll.mk b/usr/lib/ep11_stdll/ep11_stdll.mk +index 9a8aa76a..11061f76 100644 +--- a/usr/lib/ep11_stdll/ep11_stdll.mk ++++ b/usr/lib/ep11_stdll/ep11_stdll.mk +@@ -43,7 +43,8 @@ opencryptoki_stdll_libpkcs11_ep11_la_SOURCES = usr/lib/common/asn1.c \ + usr/lib/ep11_stdll/ep11_specific.c \ + usr/lib/common/utility_common.c usr/lib/common/ec_supported.c \ + usr/lib/api/policyhelper.c usr/lib/config/configuration.c \ +- usr/lib/config/cfgparse.y usr/lib/config/cfglex.l ++ usr/lib/config/cfgparse.y usr/lib/config/cfglex.l \ ++ usr/lib/common/pqc_supported.c + + if ENABLE_LOCKS + opencryptoki_stdll_libpkcs11_ep11_la_SOURCES += \ +diff --git a/usr/lib/ica_s390_stdll/ica_s390_stdll.mk b/usr/lib/ica_s390_stdll/ica_s390_stdll.mk +index cb9d898f..f89cd343 100644 +--- a/usr/lib/ica_s390_stdll/ica_s390_stdll.mk ++++ b/usr/lib/ica_s390_stdll/ica_s390_stdll.mk +@@ -38,7 +38,7 @@ opencryptoki_stdll_libpkcs11_ica_la_SOURCES = \ + usr/lib/ica_s390_stdll/ica_specific.c usr/lib/common/dlist.c \ + usr/lib/common/mech_openssl.c \ + usr/lib/common/utility_common.c usr/lib/common/ec_supported.c \ +- usr/lib/api/policyhelper.c ++ usr/lib/api/policyhelper.c usr/lib/common/pqc_supported.c + + if ENABLE_LOCKS + opencryptoki_stdll_libpkcs11_ica_la_SOURCES += \ +diff --git a/usr/lib/icsf_stdll/icsf_stdll.mk b/usr/lib/icsf_stdll/icsf_stdll.mk +index ee83f674..ebf24290 100644 +--- a/usr/lib/icsf_stdll/icsf_stdll.mk ++++ b/usr/lib/icsf_stdll/icsf_stdll.mk +@@ -43,7 +43,7 @@ opencryptoki_stdll_libpkcs11_icsf_la_SOURCES = usr/lib/common/asn1.c \ + usr/lib/icsf_stdll/icsf_specific.c \ + usr/lib/icsf_stdll/icsf.c usr/lib/common/utility_common.c \ + usr/lib/common/ec_supported.c usr/lib/api/policyhelper.c \ +- usr/lib/config/configuration.c \ ++ usr/lib/config/configuration.c usr/lib/common/pqc_supported.c \ + usr/lib/config/cfgparse.y usr/lib/config/cfglex.l \ + usr/lib/common/mech_openssl.c + +diff --git a/usr/lib/soft_stdll/soft_stdll.mk b/usr/lib/soft_stdll/soft_stdll.mk +index 6cdf82b8..7a842ddc 100644 +--- a/usr/lib/soft_stdll/soft_stdll.mk ++++ b/usr/lib/soft_stdll/soft_stdll.mk +@@ -36,7 +36,7 @@ opencryptoki_stdll_libpkcs11_sw_la_SOURCES = \ + usr/lib/soft_stdll/soft_specific.c usr/lib/common/attributes.c \ + usr/lib/common/dlist.c usr/lib/common/mech_openssl.c \ + usr/lib/common/utility_common.c usr/lib/common/ec_supported.c \ +- usr/lib/api/policyhelper.c ++ usr/lib/api/policyhelper.c usr/lib/common/pqc_supported.c + + if ENABLE_LOCKS + opencryptoki_stdll_libpkcs11_sw_la_SOURCES += \ +diff --git a/usr/lib/tpm_stdll/tpm_stdll.mk b/usr/lib/tpm_stdll/tpm_stdll.mk +index 54551c1f..7fa18121 100644 +--- a/usr/lib/tpm_stdll/tpm_stdll.mk ++++ b/usr/lib/tpm_stdll/tpm_stdll.mk +@@ -38,7 +38,7 @@ opencryptoki_stdll_libpkcs11_tpm_la_SOURCES = \ + usr/lib/tpm_stdll/tpm_openssl.c usr/lib/tpm_stdll/tpm_util.c \ + usr/lib/common/dlist.c usr/lib/common/mech_openssl.c \ + usr/lib/common/utility_common.c usr/lib/common/ec_supported.c \ +- usr/lib/api/policyhelper.c ++ usr/lib/api/policyhelper.c usr/lib/common/pqc_supported.c + + if ENABLE_LOCKS + opencryptoki_stdll_libpkcs11_tpm_la_SOURCES += \ +diff --git a/usr/sbin/pkcscca/pkcscca.mk b/usr/sbin/pkcscca/pkcscca.mk +index 187a93f2..59300ef5 100644 +--- a/usr/sbin/pkcscca/pkcscca.mk ++++ b/usr/sbin/pkcscca/pkcscca.mk +@@ -41,7 +41,7 @@ usr_sbin_pkcscca_pkcscca_SOURCES = usr/lib/common/asn1.c \ + usr/lib/common/dlist.c usr/sbin/pkcscca/pkcscca.c \ + usr/lib/common/utility_common.c usr/lib/common/ec_supported.c \ + usr/lib/common/pin_prompt.c usr/lib/common/mech_openssl.c \ +- usr/lib/api/policyhelper.c ++ usr/lib/api/policyhelper.c usr/lib/common/pqc_supported.c + + nodist_usr_sbin_pkcscca_pkcscca_SOURCES = usr/lib/api/mechtable.c + +-- +2.16.2.windows.1 + diff --git a/SOURCES/0020-COMMON-EP11-Add-CKA_VALUE-holding-SPKI-PKCS-8-of-key.patch b/SOURCES/0020-COMMON-EP11-Add-CKA_VALUE-holding-SPKI-PKCS-8-of-key.patch new file mode 100644 index 0000000..609a9d6 --- /dev/null +++ b/SOURCES/0020-COMMON-EP11-Add-CKA_VALUE-holding-SPKI-PKCS-8-of-key.patch @@ -0,0 +1,815 @@ +From 108b7ea5f8b8eedf3ad56b014b6807fc1a0c692c Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Wed, 16 Feb 2022 16:20:41 +0100 +Subject: [PATCH 20/34] COMMON/EP11: Add CKA_VALUE holding SPKI/PKCS#8 of key + for Dilithium keys + +Signed-off-by: Ingo Franzki +--- + usr/lib/common/asn1.c | 41 ++++++- + usr/lib/common/h_extern.h | 11 +- + usr/lib/common/key.c | 167 +++++++++++++++++++++---- + usr/lib/ep11_stdll/ep11_specific.c | 245 ++++++++++++++----------------------- + 4 files changed, 274 insertions(+), 190 deletions(-) + +diff --git a/usr/lib/common/asn1.c b/usr/lib/common/asn1.c +index 884ef489..dbf06dfd 100644 +--- a/usr/lib/common/asn1.c ++++ b/usr/lib/common/asn1.c +@@ -3787,10 +3787,12 @@ error: + CK_RV ber_decode_IBM_DilithiumPublicKey(CK_BYTE *data, + CK_ULONG data_len, + CK_ATTRIBUTE **rho_attr, +- CK_ATTRIBUTE **t1_attr) ++ CK_ATTRIBUTE **t1_attr, ++ CK_ATTRIBUTE **value_attr) + { + CK_ATTRIBUTE *rho_attr_temp = NULL; + CK_ATTRIBUTE *t1_attr_temp = NULL; ++ CK_ATTRIBUTE *value_attr_temp = NULL; + + CK_BYTE *algoid = NULL; + CK_ULONG algoid_len; +@@ -3804,7 +3806,7 @@ CK_RV ber_decode_IBM_DilithiumPublicKey(CK_BYTE *data, + CK_ULONG rho_len; + CK_BYTE *t1; + CK_ULONG t1_len; +- CK_ULONG field_len, offset; ++ CK_ULONG field_len, offset, raw_spki_len; + CK_RV rc; + + UNUSED(data_len); // XXX can this parameter be removed ? +@@ -3866,8 +3868,21 @@ CK_RV ber_decode_IBM_DilithiumPublicKey(CK_BYTE *data, + goto cleanup; + } + ++ /* Add raw SPKI as CKA_VALUE to public key (z/OS ICSF compatibility) */ ++ rc = ber_decode_SEQUENCE(data, &val, &val_len, &raw_spki_len); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ber_decode_SEQUENCE failed with rc=0x%lx\n", __func__, rc); ++ goto cleanup; ++ } ++ rc = build_attribute(CKA_VALUE, data, raw_spki_len, &value_attr_temp); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("build_attribute failed\n"); ++ goto cleanup; ++ } ++ + *rho_attr = rho_attr_temp; + *t1_attr = t1_attr_temp; ++ *value_attr = value_attr_temp; + + return CKR_OK; + +@@ -3876,6 +3891,8 @@ cleanup: + free(rho_attr_temp); + if (t1_attr_temp) + free(t1_attr_temp); ++ if (value_attr_temp) ++ free(value_attr_temp); + + return rc; + } +@@ -4137,11 +4154,12 @@ CK_RV ber_decode_IBM_DilithiumPrivateKey(CK_BYTE *data, + CK_ATTRIBUTE **s1, + CK_ATTRIBUTE **s2, + CK_ATTRIBUTE **t0, +- CK_ATTRIBUTE **t1) ++ CK_ATTRIBUTE **t1, ++ CK_ATTRIBUTE **value) + { + CK_ATTRIBUTE *rho_attr = NULL, *seed_attr = NULL; + CK_ATTRIBUTE *tr_attr = NULL, *s1_attr = NULL, *s2_attr = NULL; +- CK_ATTRIBUTE *t0_attr = NULL, *t1_attr = NULL; ++ CK_ATTRIBUTE *t0_attr = NULL, *t1_attr = NULL, *value_attr = NULL; + CK_BYTE *algoid = NULL; + CK_BYTE *dilithium_priv_key = NULL; + CK_BYTE *buf = NULL; +@@ -4314,6 +4332,18 @@ CK_RV ber_decode_IBM_DilithiumPrivateKey(CK_BYTE *data, + goto cleanup; + } + ++ /* Add private key as CKA_VALUE to public key (z/OS ICSF compatibility) */ ++ rc = ber_decode_SEQUENCE(data, &tmp, &len, &field_len); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ber_decode_SEQUENCE failed with rc=0x%lx\n", __func__, rc); ++ goto cleanup; ++ } ++ rc = build_attribute(CKA_VALUE, data, field_len, &value_attr); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("build_attribute for (t1) failed\n"); ++ goto cleanup; ++ } ++ + *rho = rho_attr; + *seed = seed_attr; + *tr = tr_attr; +@@ -4321,6 +4351,7 @@ CK_RV ber_decode_IBM_DilithiumPrivateKey(CK_BYTE *data, + *s2 = s2_attr; + *t0 = t0_attr; + *t1 = t1_attr; ++ *value = value_attr; + + return CKR_OK; + +@@ -4340,6 +4371,8 @@ cleanup: + free(s2_attr); + if (t0_attr) + free(t0_attr); ++ if (value_attr) ++ free(value_attr); + + return rc; + } +diff --git a/usr/lib/common/h_extern.h b/usr/lib/common/h_extern.h +index 41ca12df..53909e99 100644 +--- a/usr/lib/common/h_extern.h ++++ b/usr/lib/common/h_extern.h +@@ -2500,9 +2500,10 @@ CK_RV ibm_dilithium_priv_validate_attribute(STDLL_TokData_t *tokdata, TEMPLATE * + CK_RV ibm_dilithium_priv_wrap_get_data(TEMPLATE *tmpl, CK_BBOOL length_only, + CK_BYTE **data, CK_ULONG *data_len); + CK_RV ibm_dilithium_priv_unwrap(TEMPLATE *tmpl, CK_BYTE *data, +- CK_ULONG total_length); ++ CK_ULONG total_length, CK_BBOOL add_value); + CK_RV ibm_dilithium_priv_unwrap_get_data(TEMPLATE *tmpl, +- CK_BYTE *data, CK_ULONG total_length); ++ CK_BYTE *data, CK_ULONG total_length, ++ CK_BBOOL add_value); + + // diffie-hellman routines + // +@@ -2748,7 +2749,8 @@ CK_RV ber_encode_IBM_DilithiumPublicKey(CK_BBOOL length_only, + CK_RV ber_decode_IBM_DilithiumPublicKey(CK_BYTE *data, + CK_ULONG data_len, + CK_ATTRIBUTE **rho_attr, +- CK_ATTRIBUTE **t1_attr); ++ CK_ATTRIBUTE **t1_attr, ++ CK_ATTRIBUTE **value_attr); + + CK_RV ber_encode_IBM_DilithiumPrivateKey(CK_BBOOL length_only, + CK_BYTE **data, +@@ -2770,7 +2772,8 @@ CK_RV ber_decode_IBM_DilithiumPrivateKey(CK_BYTE *data, + CK_ATTRIBUTE **s1, + CK_ATTRIBUTE **s2, + CK_ATTRIBUTE **t0, +- CK_ATTRIBUTE **t1); ++ CK_ATTRIBUTE **t1, ++ CK_ATTRIBUTE **value); + + typedef CK_RV (*t_rsa_encrypt)(STDLL_TokData_t *, CK_BYTE *in_data, + CK_ULONG in_data_len, CK_BYTE *out_data, +diff --git a/usr/lib/common/key.c b/usr/lib/common/key.c +index 41857b97..b0050816 100644 +--- a/usr/lib/common/key.c ++++ b/usr/lib/common/key.c +@@ -1051,7 +1051,7 @@ CK_RV priv_key_unwrap(TEMPLATE *tmpl, + rc = ec_priv_unwrap(tmpl, data, data_len); + break; + case CKK_IBM_PQC_DILITHIUM: +- rc = ibm_dilithium_priv_unwrap(tmpl, data, data_len); ++ rc = ibm_dilithium_priv_unwrap(tmpl, data, data_len, TRUE); + break; + default: + TRACE_ERROR("%s\n", ock_err(ERR_WRAPPED_KEY_INVALID)); +@@ -2781,13 +2781,16 @@ CK_RV ibm_dilithium_priv_wrap_get_data(TEMPLATE *tmpl, + } + + CK_RV ibm_dilithium_priv_unwrap_get_data(TEMPLATE *tmpl, CK_BYTE *data, +- CK_ULONG total_length) ++ CK_ULONG total_length, ++ CK_BBOOL add_value) + { + CK_ATTRIBUTE *rho = NULL; + CK_ATTRIBUTE *t1 = NULL; ++ CK_ATTRIBUTE *value = NULL; + CK_RV rc; + +- rc = ber_decode_IBM_DilithiumPublicKey(data, total_length, &rho, &t1); ++ rc = ber_decode_IBM_DilithiumPublicKey(data, total_length, &rho, &t1, ++ &value); + if (rc != CKR_OK) { + TRACE_ERROR("ber_decode_DilithiumPublicKey failed\n"); + return rc; +@@ -2805,6 +2808,16 @@ CK_RV ibm_dilithium_priv_unwrap_get_data(TEMPLATE *tmpl, CK_BYTE *data, + goto error; + } + t1 = NULL; ++ if (add_value) { ++ rc = template_update_attribute(tmpl, value); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("template_update_attribute failed.\n"); ++ goto error; ++ } ++ } else { ++ free(value); ++ } ++ value = NULL; + + return CKR_OK; + +@@ -2813,6 +2826,8 @@ error: + free(rho); + if (t1) + free(t1); ++ if (value) ++ free(value); + + return rc; + } +@@ -2820,14 +2835,15 @@ error: + // + // + CK_RV ibm_dilithium_priv_unwrap(TEMPLATE *tmpl, CK_BYTE *data, +- CK_ULONG total_length) ++ CK_ULONG total_length, CK_BBOOL add_value) + { +- CK_ATTRIBUTE *rho = NULL, *seed = NULL, *tr = NULL; ++ CK_ATTRIBUTE *rho = NULL, *seed = NULL, *tr = NULL, *value = NULL; + CK_ATTRIBUTE *s1 = NULL, *s2 = NULL, *t0 = NULL, *t1 = NULL; + CK_RV rc; + + rc = ber_decode_IBM_DilithiumPrivateKey(data, total_length, +- &rho, &seed, &tr, &s1, &s2, &t0, &t1); ++ &rho, &seed, &tr, &s1, &s2, &t0, ++ &t1, &value); + if (rc != CKR_OK) { + TRACE_ERROR("der_decode_IBM_DilithiumPrivateKey failed\n"); + return rc; +@@ -2877,6 +2893,16 @@ CK_RV ibm_dilithium_priv_unwrap(TEMPLATE *tmpl, CK_BYTE *data, + } + } + t1 = NULL; ++ if (add_value) { ++ rc = template_update_attribute(tmpl, value); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("template_update_attribute failed.\n"); ++ goto error; ++ } ++ } else { ++ free(value); ++ } ++ value = NULL; + + return CKR_OK; + +@@ -2895,6 +2921,8 @@ error: + free(t0); + if (t1) + free(t1); ++ if (value) ++ free(value); + + return rc; + } +@@ -4633,6 +4661,7 @@ CK_RV ibm_dilithium_publ_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + CK_ATTRIBUTE *rho_attr = NULL; + CK_ATTRIBUTE *t1_attr = NULL; + CK_ATTRIBUTE *keyform_attr = NULL; ++ CK_ATTRIBUTE *value_attr = NULL; + CK_RV rc; + + publ_key_set_default_attributes(tmpl, mode); +@@ -4641,8 +4670,9 @@ CK_RV ibm_dilithium_publ_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + keyform_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE) + sizeof(CK_ULONG)); + rho_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); + t1_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); ++ value_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); + +- if (!type_attr || !rho_attr || !t1_attr || !keyform_attr) { ++ if (!type_attr || !rho_attr || !t1_attr || !keyform_attr || !value_attr) { + TRACE_ERROR("%s\n", ock_err(ERR_HOST_MEMORY)); + rc = CKR_HOST_MEMORY; + goto error; +@@ -4666,6 +4696,10 @@ CK_RV ibm_dilithium_publ_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + t1_attr->ulValueLen = 0; + t1_attr->pValue = NULL; + ++ value_attr->type = CKA_VALUE; ++ value_attr->ulValueLen = 0; ++ value_attr->pValue = NULL; ++ + rc = template_update_attribute(tmpl, type_attr); + if (rc != CKR_OK) { + TRACE_ERROR("template_update_attribute failed\n"); +@@ -4690,6 +4724,12 @@ CK_RV ibm_dilithium_publ_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + goto error; + } + keyform_attr = NULL; ++ rc = template_update_attribute(tmpl, value_attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("template_update_attribute failed\n"); ++ goto error; ++ } ++ value_attr = NULL; + + return CKR_OK; + +@@ -4702,6 +4742,8 @@ error: + free(t1_attr); + if (keyform_attr) + free(keyform_attr); ++ if (value_attr) ++ free(value_attr); + + return rc; + } +@@ -4719,6 +4761,7 @@ CK_RV ibm_dilithium_priv_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + CK_ATTRIBUTE *t0_attr = NULL; + CK_ATTRIBUTE *t1_attr = NULL; + CK_ATTRIBUTE *keyform_attr = NULL; ++ CK_ATTRIBUTE *value_attr = NULL; + CK_RV rc; + + priv_key_set_default_attributes(tmpl, mode); +@@ -4732,9 +4775,10 @@ CK_RV ibm_dilithium_priv_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + s2_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); + t0_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); + t1_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); ++ value_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); + + if (!type_attr || !rho_attr || !seed_attr || !tr_attr || !s1_attr +- || !s2_attr || !t0_attr || !t1_attr || !keyform_attr) { ++ || !s2_attr || !t0_attr || !t1_attr || !keyform_attr || !value_attr) { + TRACE_ERROR("%s\n", ock_err(ERR_HOST_MEMORY)); + rc = CKR_HOST_MEMORY; + goto error; +@@ -4778,6 +4822,10 @@ CK_RV ibm_dilithium_priv_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + t1_attr->ulValueLen = 0; + t1_attr->pValue = NULL; + ++ value_attr->type = CKA_VALUE; ++ value_attr->ulValueLen = 0; ++ value_attr->pValue = NULL; ++ + rc = template_update_attribute(tmpl, type_attr); + if (rc != CKR_OK) { + TRACE_ERROR("template_update_attribute failed\n"); +@@ -4832,6 +4880,12 @@ CK_RV ibm_dilithium_priv_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + goto error; + } + t1_attr = NULL; ++ rc = template_update_attribute(tmpl, value_attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("template_update_attribute failed\n"); ++ goto error; ++ } ++ value_attr = NULL; + + return CKR_OK; + +@@ -4854,6 +4908,8 @@ error: + free(t1_attr); + if (keyform_attr) + free(keyform_attr); ++ if (value_attr) ++ free(value_attr); + + return rc; + } +@@ -4869,18 +4925,46 @@ CK_RV ibm_dilithium_publ_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode + CKA_IBM_DILITHIUM_T1, + }; + CK_ULONG i; ++ CK_RV rc; + +- /* MODE_KEYGEN: attrs are added during keygen */ +- if (mode == MODE_KEYGEN || mode == MODE_UNWRAP) +- return publ_key_check_required_attributes(tmpl, mode); +- +- /* MODE_CREATE (key import) or MODE_COPY: check if all attrs present */ +- for (i = 0; i < sizeof(req_attrs) / sizeof(req_attrs[0]); i++) { +- if (!(template_attribute_find(tmpl, req_attrs[i], &attr))) { +- TRACE_ERROR("%s, attribute %08lX missing.\n", +- ock_err(ERR_TEMPLATE_INCOMPLETE), req_attrs[i]); ++ switch (mode) { ++ case MODE_KEYGEN: ++ case MODE_UNWRAP: ++ /* Attrs will be added during keygen/unwrap */ ++ break; ++ case MODE_CREATE: ++ /* Either CKA_VALUE or all other attrs must be present */ ++ if (template_attribute_find(tmpl, CKA_VALUE, &attr) && ++ attr->ulValueLen > 0 && attr->pValue != NULL) ++ break; ++ for (i = 0; i < sizeof(req_attrs) / sizeof(req_attrs[0]); i++) { ++ rc = template_attribute_get_non_empty(tmpl, req_attrs[i], &attr); ++ if (rc != CKR_OK) { ++ if (rc != CKR_ATTRIBUTE_VALUE_INVALID) ++ TRACE_ERROR("%s, attribute %08lX missing.\n", ++ ock_err(ERR_TEMPLATE_INCOMPLETE), req_attrs[i]); ++ return rc; ++ } ++ } ++ break; ++ case MODE_COPY: ++ /* CKA_VALUE and all other attrs must be present */ ++ if (!template_attribute_find(tmpl, CKA_VALUE, &attr) && ++ attr->ulValueLen > 0 && attr->pValue != NULL) { ++ TRACE_ERROR("%s, attribute CKA_VALUE missing.\n", ++ ock_err(ERR_TEMPLATE_INCOMPLETE)); + return CKR_TEMPLATE_INCOMPLETE; + } ++ for (i = 0; i < sizeof(req_attrs) / sizeof(req_attrs[0]); i++) { ++ rc = template_attribute_get_non_empty(tmpl, req_attrs[i], &attr); ++ if (rc != CKR_OK) { ++ if (rc != CKR_ATTRIBUTE_VALUE_INVALID) ++ TRACE_ERROR("%s, attribute %08lX missing.\n", ++ ock_err(ERR_TEMPLATE_INCOMPLETE), req_attrs[i]); ++ return rc; ++ } ++ } ++ break; + } + + /* All required attrs found, check them */ +@@ -4903,18 +4987,47 @@ CK_RV ibm_dilithium_priv_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode + CKA_IBM_DILITHIUM_T1, + }; + CK_ULONG i; ++ CK_RV rc; + +- /* MODE_KEYGEN: attrs are added during keygen */ +- if (mode == MODE_KEYGEN || mode == MODE_UNWRAP) +- return priv_key_check_required_attributes(tmpl, mode); +- +- /* MODE_CREATE (key import) or MODE_COPY: check if all attrs present */ +- for (i = 0; i < sizeof(req_attrs) / sizeof(req_attrs[0]); i++) { +- if (!(template_attribute_find(tmpl, req_attrs[i], &attr))) { +- TRACE_ERROR("%s, attribute %08lX missing.\n", +- ock_err(ERR_TEMPLATE_INCOMPLETE), req_attrs[i]); ++ switch (mode) { ++ case MODE_KEYGEN: ++ case MODE_UNWRAP: ++ /* Attrs will be added during keygen/unwrap */ ++ break; ++ case MODE_CREATE: ++ /* Either CKA_VALUE or all other attrs must be present */ ++ if (template_attribute_find(tmpl, CKA_VALUE, &attr) && ++ attr->ulValueLen > 0 && attr->pValue != NULL) ++ break; ++ for (i = 0; i < sizeof(req_attrs) / sizeof(req_attrs[0]); i++) { ++ rc = template_attribute_get_non_empty(tmpl, req_attrs[i], &attr); ++ if (rc != CKR_OK) { ++ if (rc != CKR_ATTRIBUTE_VALUE_INVALID) ++ TRACE_ERROR("%s, attribute %08lX missing.\n", ++ ock_err(ERR_TEMPLATE_INCOMPLETE), req_attrs[i]); ++ return rc; ++ } ++ } ++ break; ++ case MODE_COPY: ++ /* CKA_VALUE and all other attrs must be present */ ++ if (!template_attribute_find(tmpl, CKA_VALUE, &attr) && ++ attr->ulValueLen > 0 && attr->pValue != NULL) { ++ TRACE_ERROR("%s, attribute CKA_VALUE missing.\n", ++ ock_err(ERR_TEMPLATE_INCOMPLETE)); + return CKR_TEMPLATE_INCOMPLETE; ++ ++ } ++ for (i = 0; i < sizeof(req_attrs) / sizeof(req_attrs[0]); i++) { ++ rc = template_attribute_get_non_empty(tmpl, req_attrs[i], &attr); ++ if (rc != CKR_OK) { ++ if (rc != CKR_ATTRIBUTE_VALUE_INVALID) ++ TRACE_ERROR("%s, attribute %08lX missing.\n", ++ ock_err(ERR_TEMPLATE_INCOMPLETE), req_attrs[i]); ++ return rc; ++ } + } ++ break; + } + + /* All required attrs found, check them */ +@@ -4930,6 +5043,7 @@ CK_RV ibm_dilithium_publ_validate_attribute(STDLL_TokData_t *tokdata, + switch (attr->type) { + case CKA_IBM_DILITHIUM_RHO: + case CKA_IBM_DILITHIUM_T1: ++ case CKA_VALUE: + if (mode == MODE_CREATE) + return CKR_OK; + TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_READ_ONLY)); +@@ -4969,6 +5083,7 @@ CK_RV ibm_dilithium_priv_validate_attribute(STDLL_TokData_t *tokdata, + case CKA_IBM_DILITHIUM_S2: + case CKA_IBM_DILITHIUM_T0: + case CKA_IBM_DILITHIUM_T1: ++ case CKA_VALUE: + if (mode == MODE_CREATE) + return CKR_OK; + TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_READ_ONLY)); +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index 45069ae8..9221b8cd 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -3585,6 +3585,8 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + unsigned char *ep11_pin_blob = NULL; + CK_ULONG ep11_pin_blob_len = 0; + ep11_session_t *ep11_session = (ep11_session_t *) sess->private_data; ++ CK_ATTRIBUTE *value_attr = NULL; ++ CK_BBOOL data_alloced = TRUE; + + memcpy(iv, "1234567812345678", AES_BLOCK_SIZE); + +@@ -3606,57 +3608,55 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + goto done; + + if (class != CKO_PRIVATE_KEY) { +- + /* Make an SPKI for the public IBM Dilithium key */ +- CK_ULONG keyform; +- CK_ATTRIBUTE *rho; +- CK_ATTRIBUTE *t1; +- +- /* A public IBM Dilithium key must have a keyform value */ +- rc = template_attribute_get_ulong(dilithium_key_obj->template, +- CKA_IBM_DILITHIUM_KEYFORM, +- &keyform); +- if (rc != CKR_OK) { +- TRACE_ERROR("Could not find CKA_IBM_DILITHIUM_KEYFORM for the " +- "key.\n"); +- goto done; +- } +- +- /* Check if it's an expected keyform */ +- if (keyform != IBM_DILITHIUM_KEYFORM_ROUND2) { +- TRACE_ERROR("Keyform is not supported\n"); +- rc = CKR_TEMPLATE_INCONSISTENT; +- goto done; +- } + +- /* A public IBM Dilithium key must have a rho value */ +- rc = template_attribute_get_non_empty(dilithium_key_obj->template, +- CKA_IBM_DILITHIUM_RHO, &rho); +- if (rc != CKR_OK) { +- TRACE_ERROR("Could not find CKA_IBM_DILITHIUM_RHO for the key.\n"); +- goto done; +- } ++ /* A public IBM Dilithium key must either have a CKA_VALUE containing ++ * the SPKI, or must have a keyform value and the individual attributes ++ */ ++ if (template_attribute_find(dilithium_key_obj->template, ++ CKA_VALUE, &value_attr) && ++ value_attr->ulValueLen > 0 && value_attr ->pValue != NULL) { ++ /* CKA_VALUE with SPKI */ ++ data = value_attr ->pValue; ++ data_len = value_attr->ulValueLen; ++ data_alloced = FALSE; ++ ++ /* Decode SPKI and add public key attributes */ ++ rc = ibm_dilithium_priv_unwrap_get_data(dilithium_key_obj->template, ++ data, data_len, FALSE); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("Failed to decode SPKI from CKA_VALUE.\n"); ++ goto done; ++ } ++ } else { ++ /* Individual attributes */ ++ rc = ibm_dilithium_publ_get_spki(dilithium_key_obj->template, ++ FALSE, &data, &data_len); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s public key import class=0x%lx rc=0x%lx " ++ "data_len=0x%lx\n", __func__, class, rc, data_len); ++ goto done; ++ } else { ++ TRACE_INFO("%s public key import class=0x%lx rc=0x%lx " ++ "data_len=0x%lx\n", __func__, class, rc, data_len); ++ } + +- /* A public IBM Dilithium key must have a t1 value */ +- rc = template_attribute_get_non_empty(dilithium_key_obj->template, +- CKA_IBM_DILITHIUM_T1, &t1); +- if (rc != CKR_OK) { +- TRACE_ERROR("Could not find CKA_IBM_DILITHIUM_T1 for the key.\n"); +- goto done; +- } ++ /* Add SPKI as CKA_VALUE to public key (z/OS ICSF compatibility) */ ++ rc = build_attribute(CKA_VALUE, data, data_len, &value_attr); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("build_attribute failed\n"); ++ goto done; ++ } + +- /* Encode the public key */ +- rc = ber_encode_IBM_DilithiumPublicKey(FALSE, &data, &data_len, +- dilithium_r2_65, +- dilithium_r2_65_len, +- rho, t1); +- if (rc != CKR_OK) { +- TRACE_ERROR("%s public key import class=0x%lx rc=0x%lx " +- "data_len=0x%lx\n", __func__, class, rc, data_len); +- goto done; +- } else { +- TRACE_INFO("%s public key import class=0x%lx rc=0x%lx " +- "data_len=0x%lx\n", __func__, class, rc, data_len); ++ rc = template_update_attribute(dilithium_key_obj->template, ++ value_attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", ++ __func__, rc); ++ free(value_attr); ++ goto done; ++ } ++ value_attr = NULL; + } + + /* save the SPKI as blob although it is not a blob. +@@ -3676,14 +3676,35 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + + /* imported private IBM Dilithium key goes here */ + +- /* extract the secret data to be wrapped +- * since this is AES_CBC_PAD, padding is done in mechanism. ++ /* A public IBM Dilithium key must either have a CKA_VALUE containing ++ * the PKCS#8 encoded private key, or must have a keyform value and the ++ * individual attributes + */ +- rc = ibm_dilithium_priv_wrap_get_data(dilithium_key_obj->template, FALSE, +- &data, &data_len); +- if (rc != CKR_OK) { +- TRACE_DEVEL("%s Dilithium wrap get data failed\n", __func__); +- goto done; ++ if (template_attribute_find(dilithium_key_obj->template, ++ CKA_VALUE, &value_attr) && ++ value_attr->ulValueLen > 0 && value_attr ->pValue != NULL) { ++ /* CKA_VALUE with SPKI */ ++ data = value_attr ->pValue; ++ data_len = value_attr->ulValueLen; ++ data_alloced = FALSE; ++ ++ /* Decode PKCS#8 private key and add key attributes */ ++ rc = ibm_dilithium_priv_unwrap(dilithium_key_obj->template, ++ data, data_len, FALSE); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("Failed to decode private key from CKA_VALUE.\n"); ++ goto done; ++ } ++ } else { ++ /* extract the secret data to be wrapped ++ * since this is AES_CBC_PAD, padding is done in mechanism. ++ */ ++ rc = ibm_dilithium_priv_wrap_get_data(dilithium_key_obj->template, ++ FALSE, &data, &data_len); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("%s Dilithium wrap get data failed\n", __func__); ++ goto done; ++ } + } + + /* encrypt */ +@@ -3743,10 +3764,15 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + } + + cleanse_attribute(dilithium_key_obj->template, CKA_VALUE); ++ cleanse_attribute(dilithium_key_obj->template, CKA_IBM_DILITHIUM_SEED); ++ cleanse_attribute(dilithium_key_obj->template, CKA_IBM_DILITHIUM_TR); ++ cleanse_attribute(dilithium_key_obj->template, CKA_IBM_DILITHIUM_S1); ++ cleanse_attribute(dilithium_key_obj->template, CKA_IBM_DILITHIUM_S2); ++ cleanse_attribute(dilithium_key_obj->template, CKA_IBM_DILITHIUM_T0); + } + + done: +- if (data) { ++ if (data_alloced && data) { + OPENSSL_cleanse(data, data_len); + free(data); + } +@@ -6422,16 +6448,10 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + size_t privkey_blob_len = sizeof(privkey_blob); + unsigned char spki[MAX_BLOBSIZE]; + size_t spki_len = sizeof(spki); +- CK_ULONG bit_str_len; +- CK_BYTE *key; +- CK_BYTE *data, *oid, *parm; +- CK_ULONG data_len, oid_len, parm_len; +- CK_ULONG field_len; + CK_ULONG ktype = CKK_IBM_PQC_DILITHIUM; + unsigned char *ep11_pin_blob = NULL; + CK_ULONG ep11_pin_blob_len = 0; + ep11_session_t *ep11_session = (ep11_session_t *) sess->private_data; +- CK_BYTE *rho, *t1; + CK_ATTRIBUTE *new_publ_attrs = NULL, *new_priv_attrs = NULL; + CK_ULONG new_publ_attrs_len = 0, new_priv_attrs_len = 0; + CK_ATTRIBUTE *new_publ_attrs2 = NULL, *new_priv_attrs2 = NULL; +@@ -6567,105 +6587,17 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + goto error; + } + +- /* Decode SPKI */ +- rc = ber_decode_SPKI(spki, &oid, &oid_len, &parm, &parm_len, &key, +- &bit_str_len); +- if (rc != CKR_OK) { +- TRACE_ERROR("%s read key from SPKI failed with rc=0x%lx\n", __func__, +- rc); +- goto error; +- } +- +- /* Public key must be a sequence holding two bit-strings: (rho, t1) */ +- rc = ber_decode_SEQUENCE(key, &data, &data_len, &field_len); ++ rc = ibm_dilithium_priv_unwrap_get_data(publ_tmpl, spki, spki_len, TRUE); + if (rc != CKR_OK) { +- TRACE_ERROR("%s read sequence failed with rc=0x%lx\n", __func__, rc); +- goto error; +- } +- +- /* Decode rho */ +- rho = key + field_len - data_len; +- rc = ber_decode_BIT_STRING(rho, &data, &data_len, &field_len); +- if (rc != CKR_OK) { +- TRACE_ERROR("%s read rho failed with rc=0x%lx\n", __func__, rc); +- goto error; +- } +- /* Remove leading unused-bits byte, returned by ber_decode_BIT_STRING */ +- data++; +- data_len--; +-#ifdef DEBUG +- TRACE_DEBUG("%s dilithium_generate_keypair (rho):\n", __func__); +- TRACE_DEBUG_DUMP(" ", data, data_len); +-#endif +- +- /* build and add CKA_IBM_DILITHIUM_RHO for public key */ +- rc = build_attribute(CKA_IBM_DILITHIUM_RHO, data, data_len, &attr); +- if (rc != CKR_OK) { +- TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, rc); +- goto error; +- } +- rc = template_update_attribute(publ_tmpl, attr); +- if (rc != CKR_OK) { +- TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", +- __func__, rc); +- free(attr); +- goto error; +- } +- +- /* build and add CKA_IBM_DILITHIUM_RHO for private key */ +- rc = build_attribute(CKA_IBM_DILITHIUM_RHO, data, data_len, &attr); +- if (rc != CKR_OK) { +- TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, rc); +- goto error; +- } +- rc = template_update_attribute(priv_tmpl, attr); +- if (rc != CKR_OK) { +- TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", +- __func__, rc); +- free(attr); +- goto error; +- } +- +- /* Decode t1 */ +- t1 = rho + field_len; +- rc = ber_decode_BIT_STRING(t1, &data, &data_len, &field_len); +- if (rc != CKR_OK) { +- TRACE_ERROR("%s read t failed with rc=0x%lx\n", __func__, rc); +- goto error; +- } +- /* Remove leading unused-bits byte, returned by ber_decode_BIT_STRING */ +- data++; +- data_len--; +-#ifdef DEBUG +- TRACE_DEBUG("%s dilithium_generate_keypair (t1):\n", __func__); +- TRACE_DEBUG_DUMP(" ", data, data_len); +-#endif +- +- /* build and add CKA_IBM_DILITHIUM_T1 for public key */ +- rc = build_attribute(CKA_IBM_DILITHIUM_T1, data, data_len, &attr); +- if (rc != CKR_OK) { +- TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, rc); +- goto error; +- } +- rc = template_update_attribute(publ_tmpl, attr); +- if (rc != CKR_OK) { +- TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", +- __func__, rc); +- free(attr); ++ TRACE_ERROR("%s ibm_dilithium_priv_unwrap_get_data with rc=0x%lx\n", ++ __func__, rc); + goto error; + } + +- /* build and add CKA_IBM_DILITHIUM_T1 for private key */ +- rc = build_attribute(CKA_IBM_DILITHIUM_T1, data, data_len, &attr); +- if (rc != CKR_OK) { +- TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", __func__, rc); +- goto error; +- } +- rc = template_update_attribute(priv_tmpl, attr); ++ rc = ibm_dilithium_priv_unwrap_get_data(priv_tmpl, spki, spki_len, FALSE); + if (rc != CKR_OK) { +- TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", +- __func__, rc); +- free(attr); ++ TRACE_ERROR("%s ibm_dilithium_priv_unwrap_get_data with rc=0x%lx\n", ++ __func__, rc); + goto error; + } + +@@ -9043,7 +8975,8 @@ CK_RV ep11tok_unwrap_key(STDLL_TokData_t * tokdata, SESSION * session, + rc = dh_priv_unwrap_get_data(key_obj->template, csum, cslen); + break; + case CKK_IBM_PQC_DILITHIUM: +- rc = ibm_dilithium_priv_unwrap_get_data(key_obj->template, csum, cslen); ++ rc = ibm_dilithium_priv_unwrap_get_data(key_obj->template, ++ csum, cslen, FALSE); + break; + } + +-- +2.16.2.windows.1 + diff --git a/SOURCES/0021-COMMON-EP11-Allow-to-select-Dilithium-variant-via-mo.patch b/SOURCES/0021-COMMON-EP11-Allow-to-select-Dilithium-variant-via-mo.patch new file mode 100644 index 0000000..dd764d3 --- /dev/null +++ b/SOURCES/0021-COMMON-EP11-Allow-to-select-Dilithium-variant-via-mo.patch @@ -0,0 +1,994 @@ +From 57cd8cd4db0d68c08b123b669f1cf57bed0fe34d Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Thu, 17 Feb 2022 10:27:56 +0100 +Subject: [PATCH 21/34] COMMON/EP11: Allow to select Dilithium variant via mode + or key form attribute + +Attributes CKA_IBM_DILITHIUM_KEYFORM or CKA_IBM_DILITHIUM_MODE can +be used to select the Dilithium variant to use. + +Signed-off-by: Ingo Franzki +--- + testcases/common/common.c | 4 +- + usr/lib/common/asn1.c | 20 +- + usr/lib/common/h_extern.h | 11 +- + usr/lib/common/key.c | 443 +++++++++++++++++++++++-------------- + usr/lib/ep11_stdll/ep11_specific.c | 84 +++++-- + 5 files changed, 375 insertions(+), 187 deletions(-) + +diff --git a/testcases/common/common.c b/testcases/common/common.c +index 8ec5043b..fac9e4e6 100644 +--- a/testcases/common/common.c ++++ b/testcases/common/common.c +@@ -629,7 +629,7 @@ CK_RV create_DilithiumPrivateKey(CK_SESSION_HANDLE session, + CK_UTF8CHAR label[] = "A Dilithium private key object"; + CK_BYTE subject[] = {0}; + CK_BYTE id[] = { 123 }; +- CK_ULONG keyform = IBM_DILITHIUM_KEYFORM_ROUND2; ++ CK_ULONG keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_65; + CK_RV rc; + + CK_BBOOL true = TRUE; +@@ -678,7 +678,7 @@ CK_RV create_DilithiumPublicKey(CK_SESSION_HANDLE session, + CK_KEY_TYPE keyType = CKK_IBM_PQC_DILITHIUM; + CK_UTF8CHAR label[] = "A Dilithium public key object"; + CK_BBOOL true = TRUE; +- CK_ULONG keyform = IBM_DILITHIUM_KEYFORM_ROUND2; ++ CK_ULONG keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_65; + CK_ATTRIBUTE template[] = { + {CKA_CLASS, &class, sizeof(class)}, + {CKA_KEY_TYPE, &keyType, sizeof(keyType)}, +diff --git a/usr/lib/common/asn1.c b/usr/lib/common/asn1.c +index dbf06dfd..85d3924c 100644 +--- a/usr/lib/common/asn1.c ++++ b/usr/lib/common/asn1.c +@@ -3788,7 +3788,8 @@ CK_RV ber_decode_IBM_DilithiumPublicKey(CK_BYTE *data, + CK_ULONG data_len, + CK_ATTRIBUTE **rho_attr, + CK_ATTRIBUTE **t1_attr, +- CK_ATTRIBUTE **value_attr) ++ CK_ATTRIBUTE **value_attr, ++ const struct pqc_oid **oid) + { + CK_ATTRIBUTE *rho_attr_temp = NULL; + CK_ATTRIBUTE *t1_attr_temp = NULL; +@@ -3818,8 +3819,8 @@ CK_RV ber_decode_IBM_DilithiumPublicKey(CK_BYTE *data, + return rc; + } + +- if (algoid_len != dilithium_r2_65_len || +- memcmp(algoid, dilithium_r2_65, dilithium_r2_65_len) != 0) { ++ *oid = find_pqc_by_oid(dilithium_oids, algoid, algoid_len); ++ if (*oid == NULL) { + TRACE_ERROR("%s\n", ock_err(ERR_FUNCTION_FAILED)); + return CKR_FUNCTION_FAILED; + } +@@ -4155,7 +4156,8 @@ CK_RV ber_decode_IBM_DilithiumPrivateKey(CK_BYTE *data, + CK_ATTRIBUTE **s2, + CK_ATTRIBUTE **t0, + CK_ATTRIBUTE **t1, +- CK_ATTRIBUTE **value) ++ CK_ATTRIBUTE **value, ++ const struct pqc_oid **oid) + { + CK_ATTRIBUTE *rho_attr = NULL, *seed_attr = NULL; + CK_ATTRIBUTE *tr_attr = NULL, *s1_attr = NULL, *s2_attr = NULL; +@@ -4175,8 +4177,14 @@ CK_RV ber_decode_IBM_DilithiumPrivateKey(CK_BYTE *data, + return rc; + } + +- if (len != dilithium_r2_65_len + ber_NULLLen || +- memcmp(algoid, dilithium_r2_65, dilithium_r2_65_len) != 0) { ++ if (len <= ber_NULLLen || ++ memcmp(algoid + len - ber_NULLLen, ber_NULL, ber_NULLLen) != 0) { ++ TRACE_ERROR("%s\n", ock_err(ERR_FUNCTION_FAILED)); ++ return CKR_FUNCTION_FAILED; ++ } ++ len -= ber_NULLLen; ++ *oid = find_pqc_by_oid(dilithium_oids, algoid, len); ++ if (*oid == NULL) { + TRACE_ERROR("%s\n", ock_err(ERR_FUNCTION_FAILED)); + return CKR_FUNCTION_FAILED; + } +diff --git a/usr/lib/common/h_extern.h b/usr/lib/common/h_extern.h +index 53909e99..fdbcacd9 100644 +--- a/usr/lib/common/h_extern.h ++++ b/usr/lib/common/h_extern.h +@@ -26,6 +26,7 @@ + #include + #include "dlist.h" + #include "host_defs.h" ++#include "pqc_defs.h" + + #include + +@@ -2504,6 +2505,10 @@ CK_RV ibm_dilithium_priv_unwrap(TEMPLATE *tmpl, CK_BYTE *data, + CK_RV ibm_dilithium_priv_unwrap_get_data(TEMPLATE *tmpl, + CK_BYTE *data, CK_ULONG total_length, + CK_BBOOL add_value); ++const struct pqc_oid *ibm_pqc_get_keyform_mode(TEMPLATE *tmpl, ++ CK_MECHANISM_TYPE mech); ++CK_RV ibm_pqc_add_keyform_mode(TEMPLATE *tmpl, const struct pqc_oid *oid, ++ CK_MECHANISM_TYPE mech); + + // diffie-hellman routines + // +@@ -2750,7 +2755,8 @@ CK_RV ber_decode_IBM_DilithiumPublicKey(CK_BYTE *data, + CK_ULONG data_len, + CK_ATTRIBUTE **rho_attr, + CK_ATTRIBUTE **t1_attr, +- CK_ATTRIBUTE **value_attr); ++ CK_ATTRIBUTE **value_attr, ++ const struct pqc_oid **oid); + + CK_RV ber_encode_IBM_DilithiumPrivateKey(CK_BBOOL length_only, + CK_BYTE **data, +@@ -2773,7 +2779,8 @@ CK_RV ber_decode_IBM_DilithiumPrivateKey(CK_BYTE *data, + CK_ATTRIBUTE **s2, + CK_ATTRIBUTE **t0, + CK_ATTRIBUTE **t1, +- CK_ATTRIBUTE **value); ++ CK_ATTRIBUTE **value, ++ const struct pqc_oid **oid); + + typedef CK_RV (*t_rsa_encrypt)(STDLL_TokData_t *, CK_BYTE *in_data, + CK_ULONG in_data_len, CK_BYTE *out_data, +diff --git a/usr/lib/common/key.c b/usr/lib/common/key.c +index b0050816..ba40cefd 100644 +--- a/usr/lib/common/key.c ++++ b/usr/lib/common/key.c +@@ -2654,6 +2654,117 @@ error: + return rc; + } + ++static CK_RV ibm_pqc_keyform_mode_attrs_by_mech(CK_MECHANISM_TYPE mech, ++ CK_ATTRIBUTE_TYPE *keyform_attr, ++ CK_ATTRIBUTE_TYPE *mode_attr, ++ const struct pqc_oid **oids) ++{ ++ switch (mech) { ++ case CKM_IBM_DILITHIUM: ++ *keyform_attr = CKA_IBM_DILITHIUM_KEYFORM; ++ *mode_attr = CKA_IBM_DILITHIUM_MODE; ++ *oids = dilithium_oids; ++ break; ++ case CKM_IBM_KYBER: ++ *keyform_attr = CKA_IBM_KYBER_KEYFORM; ++ *mode_attr = CKA_IBM_KYBER_MODE; ++ *oids = kyber_oids; ++ break; ++ default: ++ TRACE_ERROR("Unsupported mechanims: 0x%lx\n", mech); ++ return CKR_MECHANISM_INVALID; ++ } ++ ++ return CKR_OK; ++} ++ ++const struct pqc_oid *ibm_pqc_get_keyform_mode(TEMPLATE *tmpl, ++ CK_MECHANISM_TYPE mech) ++{ ++ CK_ATTRIBUTE *attr = NULL; ++ const struct pqc_oid *oids, *oid; ++ CK_ATTRIBUTE_TYPE keyform_attr; ++ CK_ATTRIBUTE_TYPE mode_attr; ++ ++ if (ibm_pqc_keyform_mode_attrs_by_mech(mech, &keyform_attr, ++ &mode_attr, &oids) != CKR_OK) ++ return NULL; ++ ++ if (template_attribute_find(tmpl, keyform_attr, &attr) && ++ attr->ulValueLen == sizeof(CK_ULONG) && attr->pValue != NULL) { ++ oid = find_pqc_by_keyform(oids, *(CK_ULONG *)(attr->pValue)); ++ if (oid == NULL) { ++ TRACE_ERROR("KEYFORM attribute specifies an invalid value: %lu\n", ++ *(CK_ULONG *)(attr->pValue)); ++ return NULL; ++ } ++ return oid; ++ } ++ ++ if (template_attribute_find(tmpl, mode_attr, &attr) && ++ attr->ulValueLen != 0 && attr->pValue != NULL) { ++ oid = find_pqc_by_oid(oids, attr->pValue, attr->ulValueLen); ++ if (oid == NULL) { ++ TRACE_ERROR("MODE attribute specifies an invalid value\n"); ++ return NULL; ++ } ++ return oid; ++ } ++ ++ TRACE_ERROR("Neither KEYFORM nor MODE found\n"); ++ return NULL; ++} ++ ++CK_RV ibm_pqc_add_keyform_mode(TEMPLATE *tmpl, const struct pqc_oid *oid, ++ CK_MECHANISM_TYPE mech) ++{ ++ CK_ATTRIBUTE *mode = NULL; ++ CK_ATTRIBUTE *keyform = NULL; ++ CK_RV rc; ++ CK_ATTRIBUTE_TYPE keyform_attr; ++ CK_ATTRIBUTE_TYPE mode_attr; ++ const struct pqc_oid *oids; ++ ++ if (ibm_pqc_keyform_mode_attrs_by_mech(mech, &keyform_attr, ++ &mode_attr, &oids) != CKR_OK) ++ return CKR_MECHANISM_INVALID; ++ ++ rc = build_attribute(mode_attr, (CK_BYTE *)oid->oid, oid->oid_len, &mode); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("build_attribute failed\n"); ++ goto error; ++ } ++ rc = template_update_attribute(tmpl, mode); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("template_update_attribute failed.\n"); ++ goto error; ++ } ++ mode = NULL; ++ ++ rc = build_attribute(keyform_attr, (CK_BYTE *)&oid->keyform, ++ sizeof(CK_ULONG), &keyform); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("build_attribute failed\n"); ++ goto error; ++ } ++ rc = template_update_attribute(tmpl, keyform); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("template_update_attribute failed.\n"); ++ goto error; ++ } ++ keyform = NULL; ++ ++ return CKR_OK; ++ ++error: ++ if (mode) ++ free(mode); ++ if (keyform) ++ free(keyform); ++ ++ return rc; ++} ++ + /* + * Extract the SubjectPublicKeyInfo from the Dilithium public key + */ +@@ -2662,21 +2773,12 @@ CK_RV ibm_dilithium_publ_get_spki(TEMPLATE *tmpl, CK_BBOOL length_only, + { + CK_ATTRIBUTE *rho = NULL; + CK_ATTRIBUTE *t1 = NULL; +- CK_ULONG keyform; ++ const struct pqc_oid *oid; + CK_RV rc; + +- rc = template_attribute_get_ulong(tmpl, CKA_IBM_DILITHIUM_KEYFORM, +- &keyform); +- if (rc != CKR_OK) { +- TRACE_ERROR("Could not find CKA_IBM_DILITHIUM_KEYFORM for the key.\n"); +- return rc; +- } +- +- if ( keyform != IBM_DILITHIUM_KEYFORM_ROUND2) { +- TRACE_ERROR("This key has an unexpected CKA_IBM_DILITHIUM_KEYFORM: " +- "%ld \n", keyform); +- return CKR_ATTRIBUTE_VALUE_INVALID; +- } ++ oid = ibm_pqc_get_keyform_mode(tmpl, CKM_IBM_DILITHIUM); ++ if (oid == NULL) ++ return CKR_TEMPLATE_INCOMPLETE; + + rc = template_attribute_get_non_empty(tmpl, CKA_IBM_DILITHIUM_RHO, &rho); + if (rc != CKR_OK) { +@@ -2690,8 +2792,7 @@ CK_RV ibm_dilithium_publ_get_spki(TEMPLATE *tmpl, CK_BBOOL length_only, + } + + rc = ber_encode_IBM_DilithiumPublicKey(length_only, data, data_len, +- dilithium_r2_65, +- dilithium_r2_65_len, ++ oid->oid, oid->oid_len, + rho, t1); + if (rc != CKR_OK) { + TRACE_ERROR("ber_encode_IBM_DilithiumPublicKey failed.\n"); +@@ -2709,23 +2810,12 @@ CK_RV ibm_dilithium_priv_wrap_get_data(TEMPLATE *tmpl, + CK_ATTRIBUTE *rho = NULL, *seed = NULL; + CK_ATTRIBUTE *tr = NULL, *s1 = NULL, *s2 = NULL; + CK_ATTRIBUTE *t0 = NULL, *t1 = NULL; +- CK_ULONG keyform; ++ const struct pqc_oid *oid; + CK_RV rc; + +- /* A private Dilithium key must have a keyform value */ +- rc = template_attribute_get_ulong(tmpl, CKA_IBM_DILITHIUM_KEYFORM, +- &keyform); +- if (rc != CKR_OK) { +- TRACE_ERROR("Could not find CKA_IBM_DILITHIUM_KEYFORM for the key.\n"); +- return rc; +- } +- +- /* Check if it's an expected keyform */ +- if (keyform != IBM_DILITHIUM_KEYFORM_ROUND2) { +- TRACE_ERROR("This key has an unexpected CKA_IBM_DILITHIUM_KEYFORM: %ld\n", +- keyform); +- return CKR_ATTRIBUTE_VALUE_INVALID; +- } ++ oid = ibm_pqc_get_keyform_mode(tmpl, CKM_IBM_DILITHIUM); ++ if (oid == NULL) ++ return CKR_TEMPLATE_INCOMPLETE; + + rc = template_attribute_get_non_empty(tmpl, CKA_IBM_DILITHIUM_RHO, &rho); + if (rc != CKR_OK) { +@@ -2770,8 +2860,7 @@ CK_RV ibm_dilithium_priv_wrap_get_data(TEMPLATE *tmpl, + } + + rc = ber_encode_IBM_DilithiumPrivateKey(length_only, data, data_len, +- dilithium_r2_65, +- dilithium_r2_65_len, ++ oid->oid, oid->oid_len, + rho, seed, tr, s1, s2, t0, t1); + if (rc != CKR_OK) { + TRACE_DEVEL("ber_encode_IBM_DilithiumPrivateKey failed\n"); +@@ -2787,15 +2876,22 @@ CK_RV ibm_dilithium_priv_unwrap_get_data(TEMPLATE *tmpl, CK_BYTE *data, + CK_ATTRIBUTE *rho = NULL; + CK_ATTRIBUTE *t1 = NULL; + CK_ATTRIBUTE *value = NULL; ++ const struct pqc_oid *oid; + CK_RV rc; + + rc = ber_decode_IBM_DilithiumPublicKey(data, total_length, &rho, &t1, +- &value); ++ &value, &oid); + if (rc != CKR_OK) { + TRACE_ERROR("ber_decode_DilithiumPublicKey failed\n"); + return rc; + } + ++ rc = ibm_pqc_add_keyform_mode(tmpl, oid, CKM_IBM_DILITHIUM); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("ibm_pqc_add_keyform_mode failed\n"); ++ return rc; ++ } ++ + rc = template_update_attribute(tmpl, rho); + if (rc != CKR_OK) { + TRACE_DEVEL("template_update_attribute failed.\n"); +@@ -2839,16 +2935,23 @@ CK_RV ibm_dilithium_priv_unwrap(TEMPLATE *tmpl, CK_BYTE *data, + { + CK_ATTRIBUTE *rho = NULL, *seed = NULL, *tr = NULL, *value = NULL; + CK_ATTRIBUTE *s1 = NULL, *s2 = NULL, *t0 = NULL, *t1 = NULL; ++ const struct pqc_oid *oid; + CK_RV rc; + + rc = ber_decode_IBM_DilithiumPrivateKey(data, total_length, + &rho, &seed, &tr, &s1, &s2, &t0, +- &t1, &value); ++ &t1, &value, &oid); + if (rc != CKR_OK) { + TRACE_ERROR("der_decode_IBM_DilithiumPrivateKey failed\n"); + return rc; + } + ++ rc = ibm_pqc_add_keyform_mode(tmpl, oid, CKM_IBM_DILITHIUM); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("ibm_pqc_add_keyform_mode failed\n"); ++ return rc; ++ } ++ + rc = template_update_attribute(tmpl, rho); + if (rc != CKR_OK) { + TRACE_ERROR("template_update_attribute failed\n"); +@@ -4660,19 +4763,17 @@ CK_RV ibm_dilithium_publ_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + CK_ATTRIBUTE *type_attr = NULL; + CK_ATTRIBUTE *rho_attr = NULL; + CK_ATTRIBUTE *t1_attr = NULL; +- CK_ATTRIBUTE *keyform_attr = NULL; + CK_ATTRIBUTE *value_attr = NULL; + CK_RV rc; + + publ_key_set_default_attributes(tmpl, mode); + + type_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE) + sizeof(CK_KEY_TYPE)); +- keyform_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE) + sizeof(CK_ULONG)); + rho_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); + t1_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); + value_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); + +- if (!type_attr || !rho_attr || !t1_attr || !keyform_attr || !value_attr) { ++ if (!type_attr || !rho_attr || !t1_attr || !value_attr) { + TRACE_ERROR("%s\n", ock_err(ERR_HOST_MEMORY)); + rc = CKR_HOST_MEMORY; + goto error; +@@ -4683,11 +4784,6 @@ CK_RV ibm_dilithium_publ_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + type_attr->pValue = (CK_BYTE *) type_attr + sizeof(CK_ATTRIBUTE); + *(CK_KEY_TYPE *) type_attr->pValue = CKK_IBM_PQC_DILITHIUM; + +- keyform_attr->type = CKA_IBM_DILITHIUM_KEYFORM; +- keyform_attr->ulValueLen = sizeof(CK_ULONG); +- keyform_attr->pValue = (CK_BYTE *) keyform_attr + sizeof(CK_ATTRIBUTE); +- *(CK_ULONG *) keyform_attr->pValue = IBM_DILITHIUM_KEYFORM_ROUND2; +- + rho_attr->type = CKA_IBM_DILITHIUM_RHO; + rho_attr->ulValueLen = 0; + rho_attr->pValue = NULL; +@@ -4718,12 +4814,6 @@ CK_RV ibm_dilithium_publ_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + goto error; + } + t1_attr = NULL; +- rc = template_update_attribute(tmpl, keyform_attr); +- if (rc != CKR_OK) { +- TRACE_ERROR("template_update_attribute failed\n"); +- goto error; +- } +- keyform_attr = NULL; + rc = template_update_attribute(tmpl, value_attr); + if (rc != CKR_OK) { + TRACE_ERROR("template_update_attribute failed\n"); +@@ -4740,8 +4830,6 @@ error: + free(rho_attr); + if (t1_attr) + free(t1_attr); +- if (keyform_attr) +- free(keyform_attr); + if (value_attr) + free(value_attr); + +@@ -4760,14 +4848,12 @@ CK_RV ibm_dilithium_priv_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + CK_ATTRIBUTE *s2_attr = NULL; + CK_ATTRIBUTE *t0_attr = NULL; + CK_ATTRIBUTE *t1_attr = NULL; +- CK_ATTRIBUTE *keyform_attr = NULL; + CK_ATTRIBUTE *value_attr = NULL; + CK_RV rc; + + priv_key_set_default_attributes(tmpl, mode); + + type_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE) + sizeof(CK_KEY_TYPE)); +- keyform_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE) + sizeof(CK_ULONG)); + rho_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); + seed_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); + tr_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); +@@ -4778,7 +4864,7 @@ CK_RV ibm_dilithium_priv_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + value_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); + + if (!type_attr || !rho_attr || !seed_attr || !tr_attr || !s1_attr +- || !s2_attr || !t0_attr || !t1_attr || !keyform_attr || !value_attr) { ++ || !s2_attr || !t0_attr || !t1_attr || !value_attr) { + TRACE_ERROR("%s\n", ock_err(ERR_HOST_MEMORY)); + rc = CKR_HOST_MEMORY; + goto error; +@@ -4789,11 +4875,6 @@ CK_RV ibm_dilithium_priv_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + type_attr->pValue = (CK_BYTE *) type_attr + sizeof(CK_ATTRIBUTE); + *(CK_KEY_TYPE *) type_attr->pValue = CKK_IBM_PQC_DILITHIUM; + +- keyform_attr->type = CKA_IBM_DILITHIUM_KEYFORM; +- keyform_attr->ulValueLen = sizeof(CK_ULONG); +- keyform_attr->pValue = (CK_BYTE *) keyform_attr + sizeof(CK_ATTRIBUTE); +- *(CK_ULONG *) keyform_attr->pValue = IBM_DILITHIUM_KEYFORM_ROUND2; +- + rho_attr->type = CKA_IBM_DILITHIUM_RHO; + rho_attr->ulValueLen = 0; + rho_attr->pValue = NULL; +@@ -4832,12 +4913,6 @@ CK_RV ibm_dilithium_priv_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) + goto error; + } + type_attr = NULL; +- rc = template_update_attribute(tmpl, keyform_attr); +- if (rc != CKR_OK) { +- TRACE_ERROR("template_update_attribute failed\n"); +- goto error; +- } +- keyform_attr = NULL; + rc = template_update_attribute(tmpl, rho_attr); + if (rc != CKR_OK) { + TRACE_ERROR("template_update_attribute failed\n"); +@@ -4906,38 +4981,59 @@ error: + free(t0_attr); + if (t1_attr) + free(t1_attr); +- if (keyform_attr) +- free(keyform_attr); + if (value_attr) + free(value_attr); + + return rc; + } + +-// ibm_dilithium_publ_check_required_attributes() +-// +-CK_RV ibm_dilithium_publ_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode) ++static CK_RV ibm_pqc_check_attributes(TEMPLATE *tmpl, CK_ULONG mode, ++ CK_MECHANISM_TYPE mech, ++ CK_ULONG *req_attrs, ++ CK_ULONG num_req_attrs) + { ++ CK_ATTRIBUTE_TYPE keyform_attr; ++ CK_ATTRIBUTE_TYPE mode_attr; + CK_ATTRIBUTE *attr = NULL; +- static CK_ULONG req_attrs[] = { +- CKA_IBM_DILITHIUM_KEYFORM, +- CKA_IBM_DILITHIUM_RHO, +- CKA_IBM_DILITHIUM_T1, +- }; ++ CK_BBOOL keyform_present = FALSE; ++ CK_BBOOL mode_present = FALSE; ++ const struct pqc_oid *oids, *oid; + CK_ULONG i; + CK_RV rc; + ++ if (ibm_pqc_keyform_mode_attrs_by_mech(mech, &keyform_attr, ++ &mode_attr, &oids) != CKR_OK) ++ return CKR_MECHANISM_INVALID; ++ ++ if (template_attribute_find(tmpl, keyform_attr, &attr) && ++ attr->ulValueLen == sizeof(CK_ULONG) && attr->pValue != NULL) { ++ oid = find_pqc_by_keyform(oids, *(CK_ULONG *)(attr->pValue)); ++ if (oid == NULL) { ++ TRACE_ERROR("%s, attribute KEYFORM has an unsupported value.\n", ++ ock_err(ERR_ATTRIBUTE_VALUE_INVALID)); ++ return CKR_ATTRIBUTE_VALUE_INVALID; ++ } ++ keyform_present = TRUE; ++ } ++ ++ if (template_attribute_find(tmpl, mode_attr, &attr) && ++ attr->ulValueLen > 0 && attr->pValue != NULL) { ++ oid = find_pqc_by_oid(oids, attr->pValue, attr->ulValueLen); ++ if (oid == NULL) { ++ TRACE_ERROR("%s, attribute MODE has an unsupported value.\n", ++ ock_err(ERR_ATTRIBUTE_VALUE_INVALID)); ++ return CKR_ATTRIBUTE_VALUE_INVALID; ++ } ++ mode_present = TRUE; ++ } ++ + switch (mode) { +- case MODE_KEYGEN: +- case MODE_UNWRAP: +- /* Attrs will be added during keygen/unwrap */ +- break; + case MODE_CREATE: + /* Either CKA_VALUE or all other attrs must be present */ + if (template_attribute_find(tmpl, CKA_VALUE, &attr) && + attr->ulValueLen > 0 && attr->pValue != NULL) + break; +- for (i = 0; i < sizeof(req_attrs) / sizeof(req_attrs[0]); i++) { ++ for (i = 0; i < num_req_attrs; i++) { + rc = template_attribute_get_non_empty(tmpl, req_attrs[i], &attr); + if (rc != CKR_OK) { + if (rc != CKR_ATTRIBUTE_VALUE_INVALID) +@@ -4946,27 +5042,58 @@ CK_RV ibm_dilithium_publ_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode + return rc; + } + } ++ /* fallthrough */ ++ case MODE_KEYGEN: ++ /* Either keyform or mode or none of it must be present */ ++ if (keyform_present && mode_present) { ++ TRACE_ERROR("%s, only one of KEYFORM or MODE can be specified .\n", ++ ock_err(ERR_TEMPLATE_INCONSISTENT)); ++ return CKR_TEMPLATE_INCONSISTENT; ++ } ++ break; ++ case MODE_UNWRAP: ++ /* neither keyform or mode must be present */ ++ if (keyform_present || mode_present) { ++ TRACE_ERROR("%s, none of KEYFORM or MODE can be specified .\n", ++ ock_err(ERR_TEMPLATE_INCONSISTENT)); ++ return CKR_TEMPLATE_INCONSISTENT; ++ } + break; + case MODE_COPY: +- /* CKA_VALUE and all other attrs must be present */ +- if (!template_attribute_find(tmpl, CKA_VALUE, &attr) && +- attr->ulValueLen > 0 && attr->pValue != NULL) { +- TRACE_ERROR("%s, attribute CKA_VALUE missing.\n", ++ /* All attributes must be present */ ++ if (!keyform_present || !mode_present) { ++ TRACE_ERROR("%s, KEYFORM or MODE must be specified .\n", + ock_err(ERR_TEMPLATE_INCOMPLETE)); + return CKR_TEMPLATE_INCOMPLETE; + } +- for (i = 0; i < sizeof(req_attrs) / sizeof(req_attrs[0]); i++) { +- rc = template_attribute_get_non_empty(tmpl, req_attrs[i], &attr); +- if (rc != CKR_OK) { +- if (rc != CKR_ATTRIBUTE_VALUE_INVALID) +- TRACE_ERROR("%s, attribute %08lX missing.\n", +- ock_err(ERR_TEMPLATE_INCOMPLETE), req_attrs[i]); +- return rc; ++ for (i = 0; i < num_req_attrs; i++) { ++ if (!template_attribute_find(tmpl, req_attrs[i], &attr)) { ++ TRACE_ERROR("%s, attribute %08lX missing.\n", ++ ock_err(ERR_TEMPLATE_INCOMPLETE), req_attrs[i]); ++ return CKR_TEMPLATE_INCOMPLETE; + } + } + break; + } + ++ return CKR_OK; ++} ++ ++// ibm_dilithium_publ_check_required_attributes() ++// ++CK_RV ibm_dilithium_publ_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode) ++{ ++ static CK_ULONG req_attrs[] = { ++ CKA_IBM_DILITHIUM_RHO, ++ CKA_IBM_DILITHIUM_T1, ++ }; ++ CK_RV rc; ++ ++ rc = ibm_pqc_check_attributes(tmpl, mode, CKM_IBM_DILITHIUM, req_attrs, ++ sizeof(req_attrs) / sizeof(req_attrs[0])); ++ if (rc != CKR_OK) ++ return rc; ++ + /* All required attrs found, check them */ + return publ_key_check_required_attributes(tmpl, mode); + } +@@ -4975,9 +5102,7 @@ CK_RV ibm_dilithium_publ_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode + // + CK_RV ibm_dilithium_priv_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode) + { +- CK_ATTRIBUTE *attr = NULL; + static CK_ULONG req_attrs[] = { +- CKA_IBM_DILITHIUM_KEYFORM, + CKA_IBM_DILITHIUM_RHO, + CKA_IBM_DILITHIUM_SEED, + CKA_IBM_DILITHIUM_TR, +@@ -4986,52 +5111,62 @@ CK_RV ibm_dilithium_priv_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode + CKA_IBM_DILITHIUM_T0, + CKA_IBM_DILITHIUM_T1, + }; +- CK_ULONG i; + CK_RV rc; + +- switch (mode) { +- case MODE_KEYGEN: +- case MODE_UNWRAP: +- /* Attrs will be added during keygen/unwrap */ +- break; +- case MODE_CREATE: +- /* Either CKA_VALUE or all other attrs must be present */ +- if (template_attribute_find(tmpl, CKA_VALUE, &attr) && +- attr->ulValueLen > 0 && attr->pValue != NULL) +- break; +- for (i = 0; i < sizeof(req_attrs) / sizeof(req_attrs[0]); i++) { +- rc = template_attribute_get_non_empty(tmpl, req_attrs[i], &attr); +- if (rc != CKR_OK) { +- if (rc != CKR_ATTRIBUTE_VALUE_INVALID) +- TRACE_ERROR("%s, attribute %08lX missing.\n", +- ock_err(ERR_TEMPLATE_INCOMPLETE), req_attrs[i]); +- return rc; +- } +- } +- break; +- case MODE_COPY: +- /* CKA_VALUE and all other attrs must be present */ +- if (!template_attribute_find(tmpl, CKA_VALUE, &attr) && +- attr->ulValueLen > 0 && attr->pValue != NULL) { +- TRACE_ERROR("%s, attribute CKA_VALUE missing.\n", +- ock_err(ERR_TEMPLATE_INCOMPLETE)); +- return CKR_TEMPLATE_INCOMPLETE; ++ rc = ibm_pqc_check_attributes(tmpl, mode, CKM_IBM_DILITHIUM, req_attrs, ++ sizeof(req_attrs) / sizeof(req_attrs[0])); ++ if (rc != CKR_OK) ++ return rc; ++ ++ /* All required attrs found, check them */ ++ return priv_key_check_required_attributes(tmpl, mode); ++} ++ ++static CK_RV ibm_pqc_validate_keyform_mode(CK_ATTRIBUTE *attr, CK_ULONG mode, ++ CK_MECHANISM_TYPE mech) ++{ ++ CK_ATTRIBUTE_TYPE keyform_attr; ++ CK_ATTRIBUTE_TYPE mode_attr; ++ const struct pqc_oid *oids, *oid; + ++ if (ibm_pqc_keyform_mode_attrs_by_mech(mech, &keyform_attr, ++ &mode_attr, &oids) != CKR_OK) ++ return CKR_MECHANISM_INVALID; ++ ++ if (attr->type == keyform_attr) { ++ if (mode == MODE_CREATE || mode == MODE_KEYGEN) { ++ if (attr->ulValueLen != sizeof(CK_ULONG) || attr->pValue == NULL) { ++ TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_VALUE_INVALID)); ++ return CKR_ATTRIBUTE_VALUE_INVALID; ++ } ++ oid = find_pqc_by_keyform(oids, *((CK_ULONG *)attr->pValue)); ++ if (oid == NULL) { ++ TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_VALUE_INVALID)); ++ return CKR_ATTRIBUTE_VALUE_INVALID; ++ } ++ return CKR_OK; + } +- for (i = 0; i < sizeof(req_attrs) / sizeof(req_attrs[0]); i++) { +- rc = template_attribute_get_non_empty(tmpl, req_attrs[i], &attr); +- if (rc != CKR_OK) { +- if (rc != CKR_ATTRIBUTE_VALUE_INVALID) +- TRACE_ERROR("%s, attribute %08lX missing.\n", +- ock_err(ERR_TEMPLATE_INCOMPLETE), req_attrs[i]); +- return rc; ++ TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_READ_ONLY)); ++ return CKR_ATTRIBUTE_READ_ONLY; ++ } ++ if (attr->type == mode_attr) { ++ if (mode == MODE_CREATE || mode == MODE_KEYGEN) { ++ if (attr->ulValueLen == 0 || attr->pValue == NULL) { ++ TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_VALUE_INVALID)); ++ return CKR_ATTRIBUTE_VALUE_INVALID; ++ } ++ oid = find_pqc_by_oid(oids, attr->pValue, attr->ulValueLen); ++ if (oid == NULL) { ++ TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_VALUE_INVALID)); ++ return CKR_ATTRIBUTE_VALUE_INVALID; + } ++ return CKR_OK; + } +- break; ++ TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_READ_ONLY)); ++ return CKR_ATTRIBUTE_READ_ONLY; + } + +- /* All required attrs found, check them */ +- return priv_key_check_required_attributes(tmpl, mode); ++ return CKR_OK; + } + + // ibm_dilithium_publ_validate_attribute() +@@ -5040,7 +5175,15 @@ CK_RV ibm_dilithium_publ_validate_attribute(STDLL_TokData_t *tokdata, + TEMPLATE *tmpl, CK_ATTRIBUTE *attr, + CK_ULONG mode) + { ++ CK_RV rc; ++ + switch (attr->type) { ++ case CKA_IBM_DILITHIUM_KEYFORM: ++ case CKA_IBM_DILITHIUM_MODE: ++ rc = ibm_pqc_validate_keyform_mode(attr, mode, CKM_IBM_DILITHIUM); ++ if (rc != CKR_OK) ++ return rc; ++ return CKR_OK; + case CKA_IBM_DILITHIUM_RHO: + case CKA_IBM_DILITHIUM_T1: + case CKA_VALUE: +@@ -5048,22 +5191,6 @@ CK_RV ibm_dilithium_publ_validate_attribute(STDLL_TokData_t *tokdata, + return CKR_OK; + TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_READ_ONLY)); + return CKR_ATTRIBUTE_READ_ONLY; +- case CKA_IBM_DILITHIUM_KEYFORM: +- if (mode == MODE_CREATE || mode == MODE_KEYGEN) { +- if (attr->ulValueLen != sizeof(CK_ULONG) || attr->pValue == NULL) { +- TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_VALUE_INVALID)); +- return CKR_ATTRIBUTE_VALUE_INVALID; +- } +- switch (*((CK_ULONG *)attr->pValue)) { +- case IBM_DILITHIUM_KEYFORM_ROUND2: +- return CKR_OK; +- default: +- TRACE_ERROR("%s\n", ock_err(CKR_ATTRIBUTE_VALUE_INVALID)); +- return CKR_ATTRIBUTE_VALUE_INVALID; +- } +- } +- TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_READ_ONLY)); +- return CKR_ATTRIBUTE_READ_ONLY; + default: + return publ_key_validate_attribute(tokdata, tmpl, attr, mode); + } +@@ -5075,7 +5202,15 @@ CK_RV ibm_dilithium_priv_validate_attribute(STDLL_TokData_t *tokdata, + TEMPLATE *tmpl, CK_ATTRIBUTE *attr, + CK_ULONG mode) + { ++ CK_RV rc; ++ + switch (attr->type) { ++ case CKA_IBM_DILITHIUM_KEYFORM: ++ case CKA_IBM_DILITHIUM_MODE: ++ rc = ibm_pqc_validate_keyform_mode(attr, mode, CKM_IBM_DILITHIUM); ++ if (rc != CKR_OK) ++ return rc; ++ return CKR_OK; + case CKA_IBM_DILITHIUM_RHO: + case CKA_IBM_DILITHIUM_SEED: + case CKA_IBM_DILITHIUM_TR: +@@ -5088,22 +5223,6 @@ CK_RV ibm_dilithium_priv_validate_attribute(STDLL_TokData_t *tokdata, + return CKR_OK; + TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_READ_ONLY)); + return CKR_ATTRIBUTE_READ_ONLY; +- case CKA_IBM_DILITHIUM_KEYFORM: +- if (mode == MODE_CREATE || mode == MODE_KEYGEN) { +- if (attr->ulValueLen != sizeof(CK_ULONG) || attr->pValue == NULL) { +- TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_VALUE_INVALID)); +- return CKR_ATTRIBUTE_VALUE_INVALID; +- } +- switch (*((CK_ULONG *)attr->pValue)) { +- case IBM_DILITHIUM_KEYFORM_ROUND2: +- return CKR_OK; +- default: +- TRACE_ERROR("%s\n", ock_err(CKR_ATTRIBUTE_VALUE_INVALID)); +- return CKR_ATTRIBUTE_VALUE_INVALID; +- } +- } +- TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_READ_ONLY)); +- return CKR_ATTRIBUTE_READ_ONLY; + default: + return priv_key_validate_attribute(tokdata, tmpl, attr, mode); + } +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index 9221b8cd..c440cac5 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -158,8 +158,8 @@ const char label[] = "ep11tok"; + #define MAX_CSUMSIZE 64 + #define EP11_CSUMSIZE 3 + #define MAX_DIGEST_STATE_BYTES 1024 +-#define MAX_CRYPT_STATE_BYTES 8192 +-#define MAX_SIGN_STATE_BYTES 8192 ++#define MAX_CRYPT_STATE_BYTES 12288 ++#define MAX_SIGN_STATE_BYTES 12288 + #define MAX_APQN 256 + #define EP11_BLOB_WKID_OFFSET 32 + +@@ -1937,7 +1937,9 @@ static CK_BBOOL attr_applicable_for_ep11(STDLL_TokData_t * tokdata, + case CKK_IBM_PQC_DILITHIUM: + if (attr->type == CKA_ENCRYPT || attr->type == CKA_DECRYPT || + attr->type == CKA_WRAP || attr->type == CKA_UNWRAP || +- attr->type == CKA_DERIVE) ++ attr->type == CKA_DERIVE || ++ attr->type == CKA_IBM_DILITHIUM_KEYFORM || ++ attr->type == CKA_IBM_DILITHIUM_MODE) + return CK_FALSE; + break; + default: +@@ -3587,6 +3589,7 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + ep11_session_t *ep11_session = (ep11_session_t *) sess->private_data; + CK_ATTRIBUTE *value_attr = NULL; + CK_BBOOL data_alloced = TRUE; ++ const struct pqc_oid *oid; + + memcpy(iv, "1234567812345678", AES_BLOCK_SIZE); + +@@ -3611,7 +3614,8 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + /* Make an SPKI for the public IBM Dilithium key */ + + /* A public IBM Dilithium key must either have a CKA_VALUE containing +- * the SPKI, or must have a keyform value and the individual attributes ++ * the SPKI, or must have a keyform/mode value and the individual ++ * attributes + */ + if (template_attribute_find(dilithium_key_obj->template, + CKA_VALUE, &value_attr) && +@@ -3621,7 +3625,10 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + data_len = value_attr->ulValueLen; + data_alloced = FALSE; + +- /* Decode SPKI and add public key attributes */ ++ /* ++ * Decode SPKI and add public key attributes. This also adds the ++ * keyform and mode attributes to the template. ++ */ + rc = ibm_dilithium_priv_unwrap_get_data(dilithium_key_obj->template, + data, data_len, FALSE); + if (rc != CKR_OK) { +@@ -3641,6 +3648,21 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + "data_len=0x%lx\n", __func__, class, rc, data_len); + } + ++ /* Ensure both, keyform and mode attributes are added */ ++ oid = ibm_pqc_get_keyform_mode(dilithium_key_obj->template, ++ CKM_IBM_DILITHIUM); ++ if (oid == NULL) { ++ rc = CKR_TEMPLATE_INCOMPLETE; ++ goto done; ++ } ++ ++ rc = ibm_pqc_add_keyform_mode(dilithium_key_obj->template, ++ oid, CKM_IBM_DILITHIUM); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("ibm_pqc_add_keyform_mode failed\n"); ++ goto done; ++ } ++ + /* Add SPKI as CKA_VALUE to public key (z/OS ICSF compatibility) */ + rc = build_attribute(CKA_VALUE, data, data_len, &value_attr); + if (rc != CKR_OK) { +@@ -3677,8 +3699,8 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + /* imported private IBM Dilithium key goes here */ + + /* A public IBM Dilithium key must either have a CKA_VALUE containing +- * the PKCS#8 encoded private key, or must have a keyform value and the +- * individual attributes ++ * the PKCS#8 encoded private key, or must have a keyform/mode value ++ * and the individual attributes + */ + if (template_attribute_find(dilithium_key_obj->template, + CKA_VALUE, &value_attr) && +@@ -3696,8 +3718,9 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + goto done; + } + } else { +- /* extract the secret data to be wrapped +- * since this is AES_CBC_PAD, padding is done in mechanism. ++ /* Extract the secret data to be wrapped since this is AES_CBC_PAD, ++ * padding is done in mechanism. This also adds the keyform and mode ++ * attributes to the template. + */ + rc = ibm_dilithium_priv_wrap_get_data(dilithium_key_obj->template, + FALSE, &data, &data_len); +@@ -3705,6 +3728,21 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + TRACE_DEVEL("%s Dilithium wrap get data failed\n", __func__); + goto done; + } ++ ++ /* Ensure both, keyform and mode attributes are added */ ++ oid = ibm_pqc_get_keyform_mode(dilithium_key_obj->template, ++ CKM_IBM_DILITHIUM); ++ if (oid == NULL) { ++ rc = CKR_TEMPLATE_INCOMPLETE; ++ goto done; ++ } ++ ++ rc = ibm_pqc_add_keyform_mode(dilithium_key_obj->template, ++ oid, CKM_IBM_DILITHIUM); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("ibm_pqc_add_keyform_mode failed\n"); ++ goto done; ++ } + } + + /* encrypt */ +@@ -6456,8 +6494,7 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + CK_ULONG new_publ_attrs_len = 0, new_priv_attrs_len = 0; + CK_ATTRIBUTE *new_publ_attrs2 = NULL, *new_priv_attrs2 = NULL; + CK_ULONG new_publ_attrs2_len = 0, new_priv_attrs2_len = 0; +- const CK_BYTE dilithium_oid[] = { 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, +- 0x02, 0x82, 0x0b, 0x01, 0x06, 0x05 }; ++ const struct pqc_oid *dilithium_oid; + + if (pMechanism->mechanism != CKM_IBM_DILITHIUM) { + TRACE_ERROR("Invalid mechanism provided for %s\n ", __func__); +@@ -6480,9 +6517,25 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + goto error; + } + ++ dilithium_oid = ibm_pqc_get_keyform_mode(publ_tmpl, CKM_IBM_DILITHIUM); ++ if (dilithium_oid == NULL) ++ dilithium_oid = ibm_pqc_get_keyform_mode(priv_tmpl, CKM_IBM_DILITHIUM); ++ if (dilithium_oid == NULL) ++ dilithium_oid = find_pqc_by_keyform(dilithium_oids, ++ CK_IBM_DILITHIUM_KEYFORM_ROUND2_65); ++ if (dilithium_oid == NULL) { ++ TRACE_ERROR("%s Failed to determine Dilithium OID\n", __func__); ++ rc = CKR_FUNCTION_FAILED; ++ goto error; ++ } ++ ++ TRACE_INFO("%s Generate Dilithium key with keyform %lu\n", __func__, ++ dilithium_oid->keyform); ++ + rc = add_to_attribute_array(&new_publ_attrs, &new_publ_attrs_len, +- CKA_IBM_PQC_PARAMS, (CK_BYTE *)dilithium_oid, +- sizeof(dilithium_oid)); ++ CKA_IBM_PQC_PARAMS, ++ (CK_BYTE *)dilithium_oid->oid, ++ dilithium_oid->oid_len); + if (rc != CKR_OK) { + TRACE_ERROR("%s add_to_attribute_array failed with rc=0x%lx\n", + __func__, rc); +@@ -6490,8 +6543,9 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + } + + rc = add_to_attribute_array(&new_priv_attrs, &new_priv_attrs_len, +- CKA_IBM_PQC_PARAMS,(CK_BYTE *)dilithium_oid, +- sizeof(dilithium_oid)); ++ CKA_IBM_PQC_PARAMS, ++ (CK_BYTE *)dilithium_oid->oid, ++ dilithium_oid->oid_len); + if (rc != CKR_OK) { + TRACE_ERROR("%s add_to_attribute_array failed with rc=0x%lx\n", + __func__, rc); +-- +2.16.2.windows.1 + diff --git a/SOURCES/0022-EP11-Query-supported-PQC-variants-and-restrict-usage.patch b/SOURCES/0022-EP11-Query-supported-PQC-variants-and-restrict-usage.patch new file mode 100644 index 0000000..9dee5cd --- /dev/null +++ b/SOURCES/0022-EP11-Query-supported-PQC-variants-and-restrict-usage.patch @@ -0,0 +1,308 @@ +From cf68e9b9d342ced84e8a7fa88b0787a40a44cebb Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Thu, 17 Feb 2022 17:04:11 +0100 +Subject: [PATCH 22/34] EP11: Query supported PQC variants and restrict usage + +Allow only those PQC variants that are supported by all +configured APQNs. If a key is used with an unsupported strength, +CKR_KEY_SIZE_RANGE is returned. + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 187 +++++++++++++++++++++++++++++++++---- + 1 file changed, 168 insertions(+), 19 deletions(-) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index c440cac5..479951cb 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -540,6 +540,11 @@ static CK_RV handle_all_ep11_cards(ep11_target_t * ep11_targets, + #define PKEY_MODE_DEFAULT 1 + #define PKEY_MODE_ENABLE4NONEXTR 2 + ++#define PQC_BYTE_NO(idx) (((idx) - 1) / 8) ++#define PQC_BIT_IN_BYTE(idx) (((idx - 1)) % 8) ++#define PQC_BIT_MASK(idx) (0x80 >> PQC_BIT_IN_BYTE(idx)) ++#define PQC_BYTES ((((XCP_PQC_MAX / 32) * 32) + 32) / 8) ++ + typedef struct { + volatile unsigned long ref_count; + target_t target; +@@ -549,6 +554,7 @@ typedef struct { + size_t control_points_len; + size_t max_control_point_index; + CK_CHAR serialNumber[16]; ++ CK_BYTE pqc_strength[PQC_BYTES]; + } ep11_target_info_t; + + typedef struct { +@@ -660,6 +666,87 @@ static CK_RV check_expected_mkvp(STDLL_TokData_t *tokdata, CK_BYTE *blob, + return CKR_OK; + } + ++static CK_BBOOL ep11_pqc_strength_supported(ep11_target_info_t *target_info, ++ CK_MECHANISM_TYPE mech, ++ const struct pqc_oid *oid) ++{ ++ CK_ULONG strength; ++ ++ switch (mech) { ++ case CKM_IBM_DILITHIUM: ++ switch (oid->keyform) { ++ case CK_IBM_DILITHIUM_KEYFORM_ROUND2_65: ++ strength = XCP_PQC_S_DILITHIUM_R2_65; ++ break; ++ case CK_IBM_DILITHIUM_KEYFORM_ROUND2_87: ++ strength = XCP_PQC_S_DILITHIUM_R2_87; ++ break; ++ case CK_IBM_DILITHIUM_KEYFORM_ROUND3_44: ++ strength = XCP_PQC_S_DILITHIUM_R3_44; ++ break; ++ case CK_IBM_DILITHIUM_KEYFORM_ROUND3_65: ++ strength = XCP_PQC_S_DILITHIUM_R3_65; ++ break; ++ case CK_IBM_DILITHIUM_KEYFORM_ROUND3_87: ++ strength = XCP_PQC_S_DILITHIUM_R3_87; ++ break; ++ default: ++ TRACE_DEVEL("Dilithium keyform %lu not supported by EP11\n", ++ oid->keyform); ++ return FALSE; ++ } ++ break; ++ case CKM_IBM_KYBER: ++ switch (oid->keyform) { ++ case CK_IBM_KYBER_KEYFORM_ROUND2_768: ++ strength = XCP_PQC_S_KYBER_R2_768; ++ break; ++ case CK_IBM_KYBER_KEYFORM_ROUND2_1024: ++ strength = XCP_PQC_S_KYBER_R2_1024; ++ break; ++ default: ++ TRACE_DEVEL("Kyber keyform %lu not supported by EP11\n", ++ oid->keyform); ++ return FALSE; ++ } ++ break; ++ default: ++ return FALSE; ++ } ++ ++ if ((target_info->pqc_strength[PQC_BYTE_NO(strength)] & ++ PQC_BIT_MASK(strength)) == 0) { ++ TRACE_DEVEL("Keyform %lu not supported by configured APQNs\n", ++ oid->keyform); ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++static CK_BBOOL ep11_pqc_obj_strength_supported(ep11_target_info_t *target_info, ++ CK_MECHANISM_TYPE mech, ++ OBJECT *key_obj) ++{ ++ const struct pqc_oid *oid; ++ ++ switch (mech) { ++ case CKM_IBM_DILITHIUM: ++ case CKM_IBM_KYBER: ++ break; ++ default: ++ return TRUE; ++ } ++ ++ oid = ibm_pqc_get_keyform_mode(key_obj->template, mech); ++ if (oid == NULL) { ++ TRACE_DEVEL("No keyform/mode found in key object\n"); ++ return FALSE; ++ } ++ ++ return ep11_pqc_strength_supported(target_info, mech, oid); ++} ++ + /******************************************************************************* + * + * Begin EP11 protected key option +@@ -3747,10 +3834,15 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + + /* encrypt */ + RETRY_START(rc, tokdata) +- rc = dll_m_EncryptSingle(ep11_data->raw2key_wrap_blob, +- ep11_data->raw2key_wrap_blob_l, +- &mech_w, data, data_len, +- cipher, &cipher_l, target_info->target); ++ if (ep11_pqc_obj_strength_supported(target_info, CKM_IBM_DILITHIUM, ++ dilithium_key_obj)) ++ rc = dll_m_EncryptSingle(ep11_data->raw2key_wrap_blob, ++ ep11_data->raw2key_wrap_blob_l, ++ &mech_w, data, data_len, ++ cipher, &cipher_l, ++ target_info->target); ++ else ++ rc = CKR_KEY_SIZE_RANGE; + RETRY_END(rc, tokdata, sess) + + TRACE_INFO("%s wrapping wrap key rc=0x%lx cipher_l=0x%lx\n", +@@ -6583,12 +6675,16 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + &ep11_pin_blob, &ep11_pin_blob_len); + + RETRY_START(rc, tokdata) +- rc = dll_m_GenerateKeyPair(pMechanism, +- new_publ_attrs2, new_publ_attrs2_len, +- new_priv_attrs2, new_priv_attrs2_len, +- ep11_pin_blob, ep11_pin_blob_len, +- privkey_blob, &privkey_blob_len, spki, +- &spki_len, target_info->target); ++ if (ep11_pqc_strength_supported(target_info, pMechanism->mechanism, ++ dilithium_oid)) ++ rc = dll_m_GenerateKeyPair(pMechanism, ++ new_publ_attrs2, new_publ_attrs2_len, ++ new_priv_attrs2, new_priv_attrs2_len, ++ ep11_pin_blob, ep11_pin_blob_len, ++ privkey_blob, &privkey_blob_len, spki, ++ &spki_len, target_info->target); ++ else ++ rc = CKR_KEY_SIZE_RANGE; + RETRY_END(rc, tokdata, sess) + if (rc != CKR_OK) { + rc = ep11_error_to_pkcs11_error(rc, sess); +@@ -7336,8 +7432,13 @@ CK_RV ep11tok_sign_init(STDLL_TokData_t * tokdata, SESSION * session, + } + + RETRY_START(rc, tokdata) +- rc = dll_m_SignInit(ep11_sign_state, &ep11_sign_state_l, +- mech, keyblob, keyblobsize, target_info->target); ++ if (ep11_pqc_obj_strength_supported(target_info, mech->mechanism, ++ key_obj)) ++ rc = dll_m_SignInit(ep11_sign_state, &ep11_sign_state_l, ++ mech, keyblob, keyblobsize, ++ target_info->target); ++ else ++ rc = CKR_KEY_SIZE_RANGE; + RETRY_END(rc, tokdata, session) + + if (rc != CKR_OK) { +@@ -7570,8 +7671,12 @@ CK_RV ep11tok_sign_single(STDLL_TokData_t *tokdata, SESSION *session, + } + + RETRY_START(rc, tokdata) +- rc = dll_m_SignSingle(keyblob, keyblobsize, mech, in_data, in_data_len, +- signature, sig_len, target_info->target); ++ if (ep11_pqc_obj_strength_supported(target_info, mech->mechanism, ++ key_obj)) ++ rc = dll_m_SignSingle(keyblob, keyblobsize, mech, in_data, in_data_len, ++ signature, sig_len, target_info->target); ++ else ++ rc = CKR_KEY_SIZE_RANGE; + RETRY_END(rc, tokdata, session) + if (rc != CKR_OK) { + rc = ep11_error_to_pkcs11_error(rc, session); +@@ -7689,8 +7794,12 @@ CK_RV ep11tok_verify_init(STDLL_TokData_t * tokdata, SESSION * session, + } + + RETRY_START(rc, tokdata) +- rc = dll_m_VerifyInit(ep11_sign_state, &ep11_sign_state_l, mech, +- spki, spki_len, target_info->target); ++ if (ep11_pqc_obj_strength_supported(target_info, mech->mechanism, ++ key_obj)) ++ rc = dll_m_VerifyInit(ep11_sign_state, &ep11_sign_state_l, mech, ++ spki, spki_len, target_info->target); ++ else ++ rc = CKR_KEY_SIZE_RANGE; + RETRY_END(rc, tokdata, session) + + if (rc != CKR_OK) { +@@ -7929,8 +8038,12 @@ CK_RV ep11tok_verify_single(STDLL_TokData_t *tokdata, SESSION *session, + } + + RETRY_START(rc, tokdata) +- rc = dll_m_VerifySingle(spki, spki_len, mech, in_data, in_data_len, +- signature, sig_len, target_info->target); ++ if (ep11_pqc_obj_strength_supported(target_info, mech->mechanism, ++ key_obj)) ++ rc = dll_m_VerifySingle(spki, spki_len, mech, in_data, in_data_len, ++ signature, sig_len, target_info->target); ++ else ++ rc = CKR_KEY_SIZE_RANGE; + RETRY_END(rc, tokdata, session) + if (rc != CKR_OK) { + rc = ep11_error_to_pkcs11_error(rc, session); +@@ -11751,6 +11864,7 @@ typedef struct query_version + CK_CHAR serialNumber[16]; + CK_BBOOL first; + CK_BBOOL error; ++ CK_BYTE pqc_strength[PQC_BYTES]; + } query_version_t; + + static CK_RV version_query_handler(uint_32 adapter, uint_32 domain, +@@ -11759,9 +11873,11 @@ static CK_RV version_query_handler(uint_32 adapter, uint_32 domain, + query_version_t *qv = (query_version_t *)handler_data; + CK_IBM_XCP_INFO xcp_info; + CK_ULONG xcp_info_len = sizeof(xcp_info); ++ CK_BYTE pqc_strength[PQC_BYTES] = { 0 }; ++ CK_ULONG pqc_strength_len = sizeof(pqc_strength); + CK_RV rc; + target_t target; +- CK_ULONG card_type; ++ CK_ULONG card_type, i; + ep11_card_version_t *card_version; + + rc = get_ep11_target_for_apqn(adapter, domain, &target, 0); +@@ -11877,6 +11993,30 @@ static CK_RV version_query_handler(uint_32 adapter, uint_32 domain, + if (qv->first) + memcpy(qv->serialNumber, xcp_info.serialNumber, + sizeof(qv->serialNumber)); ++ ++ /* Query for PQC strength support. If the PQC strength query is not ++ available only Dilithium 6-5 round 2 is available. */ ++ rc = dll_m_get_xcp_info(&pqc_strength, &pqc_strength_len, ++ CK_IBM_XCPQ_PQC_STRENGTHS, 0, target); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("%s Failed to query PQC-strength from adapter %02X.%04X\n", ++ __func__, adapter, domain); ++ /* Only R2_65 is available */ ++ pqc_strength[PQC_BYTE_NO(XCP_PQC_S_DILITHIUM_R2_65)] |= ++ PQC_BIT_MASK(XCP_PQC_S_DILITHIUM_R2_65); ++ rc = CKR_OK; ++ } ++ ++ TRACE_DEBUG("PQC-strength of %02X.%04X:\n", adapter, domain); ++ TRACE_DEBUG_DUMP("", pqc_strength, sizeof(qv->pqc_strength)); ++ ++ if (qv->first) { ++ memcpy(qv->pqc_strength, pqc_strength, sizeof(qv->pqc_strength)); ++ } else { ++ for (i = 0; i < sizeof(qv->pqc_strength); i++) ++ qv->pqc_strength[i] &= pqc_strength[i]; ++ } ++ + qv->first = FALSE; + + out: +@@ -11934,6 +12074,7 @@ static CK_RV ep11tok_get_ep11_version(STDLL_TokData_t *tokdata, + ep11_private_data_t *ep11_data = tokdata->private_data; + ep11_card_version_t *card_version; + query_version_t qv; ++ CK_ULONG i; + CK_RV rc; + + memset(&qv, 0, sizeof(qv)); +@@ -11991,6 +12132,14 @@ static CK_RV ep11tok_get_ep11_version(STDLL_TokData_t *tokdata, + TRACE_INFO("%s Used Firmware API: %lu\n", __func__, + target_info->used_firmware_API_version); + ++ memcpy(target_info->pqc_strength, qv.pqc_strength, sizeof(qv.pqc_strength)); ++ ++ TRACE_INFO("Combined PQC-strength:\n"); ++ for (i = 1; i <= XCP_PQC_MAX; i++) { ++ TRACE_INFO(" Strength %lu: %d\n", i, ++ (qv.pqc_strength[PQC_BYTE_NO(i)] & PQC_BIT_MASK(i)) != 0); ++ } ++ + return CKR_OK; + } + +-- +2.16.2.windows.1 + diff --git a/SOURCES/0023-POLICY-Dilithium-strength-and-signature-size-depends.patch b/SOURCES/0023-POLICY-Dilithium-strength-and-signature-size-depends.patch new file mode 100644 index 0000000..d966a2a --- /dev/null +++ b/SOURCES/0023-POLICY-Dilithium-strength-and-signature-size-depends.patch @@ -0,0 +1,218 @@ +From ff2bfaa612704a7b8fb5126d450b596106421244 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Fri, 18 Feb 2022 12:58:24 +0100 +Subject: [PATCH 23/34] POLICY: Dilithium strength and signature size depends + on variant + +Signed-off-by: Ingo Franzki +--- + testcases/unit/unit.mk | 3 +- + usr/lib/api/api.mk | 1 + + usr/lib/api/mechtable.inc | 2 +- + usr/lib/api/policy.c | 65 +++++++++++++++++++++++++++++++++++++++++- + usr/lib/common/pqc_defs.h | 2 ++ + usr/lib/common/pqc_supported.c | 27 ++++++++++++------ + 6 files changed, 88 insertions(+), 12 deletions(-) + +diff --git a/testcases/unit/unit.mk b/testcases/unit/unit.mk +index accaebca..56ae3bcc 100644 +--- a/testcases/unit/unit.mk ++++ b/testcases/unit/unit.mk +@@ -22,7 +22,8 @@ testcases_unit_policytest_SOURCES=testcases/unit/policytest.c \ + usr/lib/common/kdf_translation.c \ + usr/lib/common/mgf_translation.c \ + usr/lib/api/supportedstrengths.c \ +- usr/lib/config/cfgparse.y usr/lib/config/cfglex.l ++ usr/lib/config/cfgparse.y usr/lib/config/cfglex.l \ ++ usr/lib/common/pqc_supported.c + + nodist_testcases_unit_policytest_SOURCES=usr/lib/api/mechtable.c + +diff --git a/usr/lib/api/api.mk b/usr/lib/api/api.mk +index 8ec4034e..f222dce7 100644 +--- a/usr/lib/api/api.mk ++++ b/usr/lib/api/api.mk +@@ -30,6 +30,7 @@ opencryptoki_libopencryptoki_la_SOURCES = usr/lib/api/api_interface.c \ + usr/lib/common/kdf_translation.c \ + usr/lib/common/mgf_translation.c \ + usr/lib/api/supportedstrengths.c \ ++ usr/lib/common/pqc_supported.c \ + usr/lib/config/cfgparse.y usr/lib/config/cfglex.l + + nodist_opencryptoki_libopencryptoki_la_SOURCES = \ +diff --git a/usr/lib/api/mechtable.inc b/usr/lib/api/mechtable.inc +index f74e08b7..e3d14e3e 100644 +--- a/usr/lib/api/mechtable.inc ++++ b/usr/lib/api/mechtable.inc +@@ -78,7 +78,7 @@ const struct mechrow mechtable_rows[] = + { "CKM_IBM_ATTRIBUTEBOUND_WRAP", CKM_IBM_ATTRIBUTEBOUND_WRAP, 0, MC_INFORMATION_UNAVAILABLE, MCF_WRAPUNWRAP | MCF_NEEDSPARAM }, + { "CKM_IBM_BTC_DERIVE", CKM_IBM_BTC_DERIVE, 0, MC_INFORMATION_UNAVAILABLE, MCF_DERIVE | MCF_NEEDSPARAM }, + { "CKM_IBM_CMAC", CKM_IBM_CMAC, 0, MC_KEY_DEPENDENT, MCF_SIGNVERIFY }, +- { "CKM_IBM_DILITHIUM", CKM_IBM_DILITHIUM, 0, 3366, MCF_KEYGEN | MCF_SIGNVERIFY }, ++ { "CKM_IBM_DILITHIUM", CKM_IBM_DILITHIUM, 0, MC_KEY_DEPENDENT, MCF_KEYGEN | MCF_SIGNVERIFY }, + { "CKM_IBM_ECDSA_OTHER", CKM_IBM_ECDSA_OTHER, 0, MC_KEY_DEPENDENT, MCF_SIGNVERIFY | MCF_NEEDSPARAM }, + { "CKM_IBM_EC_X25519", CKM_IBM_EC_X25519, 0, MC_INFORMATION_UNAVAILABLE, MCF_DERIVE }, + { "CKM_IBM_EC_X448", CKM_IBM_EC_X448, 0, MC_INFORMATION_UNAVAILABLE, MCF_DERIVE }, +diff --git a/usr/lib/api/policy.c b/usr/lib/api/policy.c +index 82e799cd..4bee5180 100644 +--- a/usr/lib/api/policy.c ++++ b/usr/lib/api/policy.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + /* in h_extern.h, but not included since it creates too many unneeded + dependencies for unit tests. */ +@@ -179,6 +180,65 @@ static CK_RV policy_get_curve_args(get_attr_val_f getattr, void *d, + return rv; + } + ++static CK_RV policy_get_pqc_args(CK_KEY_TYPE key_type, ++ get_attr_val_f getattr, void *d, ++ free_attr_f free_attr, CK_ULONG *size, ++ CK_ULONG *siglen, const CK_BYTE **oid, ++ CK_ULONG *oidlen) ++{ ++ CK_ATTRIBUTE_TYPE keyform_attr; ++ CK_ATTRIBUTE_TYPE mode_attr; ++ CK_ATTRIBUTE *keyform = NULL, *mode = NULL; ++ const struct pqc_oid *oids, *pqc_oid = NULL; ++ CK_RV rv; ++ ++ switch (key_type) { ++ case CKK_IBM_PQC_DILITHIUM: ++ keyform_attr = CKA_IBM_DILITHIUM_KEYFORM; ++ mode_attr = CKA_IBM_DILITHIUM_MODE; ++ oids = dilithium_oids; ++ break; ++ case CKK_IBM_PQC_KYBER: ++ keyform_attr = CKA_IBM_KYBER_KEYFORM; ++ mode_attr = CKA_IBM_KYBER_MODE; ++ oids = kyber_oids; ++ break; ++ default: ++ TRACE_ERROR("Unsupported key type 0x%lx\n", key_type); ++ return CKR_KEY_TYPE_INCONSISTENT; ++ } ++ ++ rv = getattr(d, keyform_attr, &keyform); ++ if (rv == CKR_OK && keyform->ulValueLen == sizeof(CK_ULONG)) { ++ pqc_oid = find_pqc_by_keyform(oids, *(CK_ULONG *)keyform->pValue); ++ } else { ++ rv = getattr(d, mode_attr, &mode); ++ if (rv == CKR_OK && mode->ulValueLen > 0) ++ pqc_oid = find_pqc_by_oid(oids, mode->pValue, mode->ulValueLen); ++ } ++ if (pqc_oid == NULL) { ++ TRACE_ERROR("Did not find KEYFORM or MODE for key type 0x%lx\n", ++ key_type); ++ rv = CKR_TEMPLATE_INCOMPLETE; ++ goto out; ++ } ++ ++ *size = pqc_oid->policy_size; ++ *siglen = pqc_oid->policy_siglen; ++ *oid = pqc_oid->oid; ++ *oidlen = pqc_oid->oid_len; ++ ++out: ++ if (free_attr) { ++ if (keyform) ++ free_attr(keyform); ++ if (mode) ++ free_attr(mode); ++ } ++ ++ return rv; ++} ++ + static CK_RV policy_extract_key_data(get_attr_val_f getattr, void *d, + free_attr_f free_attr, + CK_ULONG *comptarget, CK_ULONG *size, +@@ -273,7 +333,8 @@ static CK_RV policy_extract_key_data(get_attr_val_f getattr, void *d, + *comptarget = COMPARE_SYMMETRIC; + break; + case CKK_IBM_PQC_DILITHIUM: +- *size = 256; ++ rv = policy_get_pqc_args(*(CK_ULONG *)keytype->pValue, getattr, d, ++ free_attr, size, siglen, oid, oidlen); + *comptarget = COMPARE_PQC; + break; + /* POLICY: New CKK */ +@@ -346,6 +407,8 @@ static CK_RV policy_get_sig_size(CK_MECHANISM_PTR mech, struct objstrength *s, + case CKM_RSA_X9_31: + /* Fallthrough */ + case CKM_IBM_ED448_SHA3: ++ /* Fallthrough */ ++ case CKM_IBM_DILITHIUM: + *ssize = s->siglen; + break; + case CKM_DSA_SHA1: +diff --git a/usr/lib/common/pqc_defs.h b/usr/lib/common/pqc_defs.h +index 51ee1200..947f86a7 100644 +--- a/usr/lib/common/pqc_defs.h ++++ b/usr/lib/common/pqc_defs.h +@@ -35,6 +35,8 @@ struct pqc_oid { + const CK_BYTE *oid; + CK_ULONG oid_len; + CK_ULONG keyform; ++ CK_ULONG policy_size; ++ CK_ULONG policy_siglen; + }; + + extern const struct pqc_oid dilithium_oids[]; +diff --git a/usr/lib/common/pqc_supported.c b/usr/lib/common/pqc_supported.c +index 4f048c33..77970352 100644 +--- a/usr/lib/common/pqc_supported.c ++++ b/usr/lib/common/pqc_supported.c +@@ -25,16 +25,22 @@ const CK_ULONG dilithium_r3_87_len = sizeof(dilithium_r3_87); + + const struct pqc_oid dilithium_oids[] = { + { .oid = dilithium_r2_65, .oid_len = dilithium_r2_65_len, +- .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_65 }, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_65, ++ .policy_size = 256, .policy_siglen = 3366 }, + { .oid = dilithium_r2_87, .oid_len = dilithium_r2_87_len, +- .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_87 }, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_87, ++ .policy_size = 256, .policy_siglen = 4668 }, + { .oid = dilithium_r3_44, .oid_len = dilithium_r3_44_len, +- .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_44 }, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_44, ++ .policy_size = 256, .policy_siglen = 2420 }, + { .oid = dilithium_r3_65, .oid_len = dilithium_r3_65_len, +- .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_65 }, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_65, ++ .policy_size = 256, .policy_siglen = 3293 }, + { .oid = dilithium_r3_87, .oid_len = dilithium_r3_87_len, +- .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_87 }, +- { .oid = NULL, .oid_len = 0, .keyform = 0 } ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_87, ++ .policy_size = 256, .policy_siglen = 4595 }, ++ { .oid = NULL, .oid_len = 0, .keyform = 0, ++ .policy_size = 0, .policy_siglen = 0 } + }; + + const CK_BYTE kyber_r2_768[] = OCK_KYBER_R2_768; +@@ -44,10 +50,13 @@ const CK_ULONG kyber_r2_1024_len = sizeof(kyber_r2_1024); + + const struct pqc_oid kyber_oids[] = { + { .oid = kyber_r2_768, .oid_len = kyber_r2_768_len, +- .keyform = CK_IBM_KYBER_KEYFORM_ROUND2_768 }, ++ .keyform = CK_IBM_KYBER_KEYFORM_ROUND2_768, ++ .policy_size = 256, .policy_siglen = 0 }, + { .oid = kyber_r2_1024, .oid_len = kyber_r2_1024_len, +- .keyform = CK_IBM_KYBER_KEYFORM_ROUND2_1024 }, +- { .oid = NULL, .oid_len = 0, .keyform = 0 } ++ .keyform = CK_IBM_KYBER_KEYFORM_ROUND2_1024, ++ .policy_size = 256, .policy_siglen = 0 }, ++ { .oid = NULL, .oid_len = 0, .keyform = 0, ++ .policy_size = 0, .policy_siglen = 0 } + }; + + const struct pqc_oid *find_pqc_by_keyform(const struct pqc_oid *pqcs, +-- +2.16.2.windows.1 + diff --git a/SOURCES/0024-TESTCASES-Test-Dilithium-variants.patch b/SOURCES/0024-TESTCASES-Test-Dilithium-variants.patch new file mode 100644 index 0000000..ef76374 --- /dev/null +++ b/SOURCES/0024-TESTCASES-Test-Dilithium-variants.patch @@ -0,0 +1,5332 @@ +From 2d5a833f21191988649686e836c02c3370283f72 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Fri, 18 Feb 2022 14:25:16 +0100 +Subject: [PATCH 24/34] TESTCASES: Test Dilithium variants + +Signed-off-by: Ingo Franzki +--- + testcases/common/common.c | 78 +- + testcases/crypto/dilithium.h | 4769 ++++++++++++++++++++++++++++++++++++- + testcases/crypto/dilithium_func.c | 196 +- + 3 files changed, 4965 insertions(+), 78 deletions(-) + +diff --git a/testcases/common/common.c b/testcases/common/common.c +index fac9e4e6..9d02a01a 100644 +--- a/testcases/common/common.c ++++ b/testcases/common/common.c +@@ -615,21 +615,22 @@ CK_RV create_ECPublicKey(CK_SESSION_HANDLE session, + + /** Create an IBM Dilithium private key using private values **/ + CK_RV create_DilithiumPrivateKey(CK_SESSION_HANDLE session, +- CK_BYTE rho[], CK_ULONG rho_len, +- CK_BYTE seed[], CK_ULONG seed_len, +- CK_BYTE tr[], CK_ULONG tr_len, +- CK_BYTE s1[], CK_ULONG s1_len, +- CK_BYTE s2[], CK_ULONG s2_len, +- CK_BYTE t0[], CK_ULONG t0_len, +- CK_BYTE t1[], CK_ULONG t1_len, +- CK_OBJECT_HANDLE * priv_key) ++ CK_BYTE pkcs8[], CK_ULONG pkcs8_len, ++ CK_ULONG keyform, ++ CK_BYTE rho[], CK_ULONG rho_len, ++ CK_BYTE seed[], CK_ULONG seed_len, ++ CK_BYTE tr[], CK_ULONG tr_len, ++ CK_BYTE s1[], CK_ULONG s1_len, ++ CK_BYTE s2[], CK_ULONG s2_len, ++ CK_BYTE t0[], CK_ULONG t0_len, ++ CK_BYTE t1[], CK_ULONG t1_len, ++ CK_OBJECT_HANDLE * priv_key) + { + CK_OBJECT_CLASS class = CKO_PRIVATE_KEY; + CK_KEY_TYPE keyType = CKK_IBM_PQC_DILITHIUM; + CK_UTF8CHAR label[] = "A Dilithium private key object"; + CK_BYTE subject[] = {0}; + CK_BYTE id[] = { 123 }; +- CK_ULONG keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_65; + CK_RV rc; + + CK_BBOOL true = TRUE; +@@ -652,13 +653,32 @@ CK_RV create_DilithiumPrivateKey(CK_SESSION_HANDLE session, + {CKA_IBM_DILITHIUM_T1, t1, t1_len}, + {CKA_IBM_DILITHIUM_KEYFORM, &keyform, sizeof(keyform)}, + }; ++ CK_ATTRIBUTE template_pkcs8[] = { ++ {CKA_CLASS, &class, sizeof(class)}, ++ {CKA_KEY_TYPE, &keyType, sizeof(keyType)}, ++ {CKA_TOKEN, &true, sizeof(true)}, ++ {CKA_PRIVATE, &true, sizeof(true)}, ++ {CKA_LABEL, label, sizeof(label)}, ++ {CKA_SUBJECT, subject, 0}, ++ {CKA_ID, id, sizeof(id)}, ++ {CKA_SENSITIVE, &true, sizeof(true)}, ++ {CKA_SIGN, &true, sizeof(true)}, ++ {CKA_VALUE, pkcs8, pkcs8_len}, ++ }; + + // create key +- rc = funcs->C_CreateObject(session, template, +- sizeof(template) / sizeof(CK_ATTRIBUTE), +- priv_key); ++ if (pkcs8_len > 0) ++ rc = funcs->C_CreateObject(session, template_pkcs8, ++ sizeof(template_pkcs8) / sizeof(CK_ATTRIBUTE), ++ priv_key); ++ else ++ rc = funcs->C_CreateObject(session, template, ++ sizeof(template) / sizeof(CK_ATTRIBUTE), ++ priv_key); + if (rc != CKR_OK) { +- if (is_rejected_by_policy(rc, session)) ++ if (rc == CKR_KEY_SIZE_RANGE) ++ testcase_notice("C_CreateObject rc=%s", p11_get_ckr(rc)); ++ else if (is_rejected_by_policy(rc, session)) + rc = CKR_POLICY_VIOLATION; + else + testcase_error("C_CreateObject rc=%s", p11_get_ckr(rc)); +@@ -669,16 +689,17 @@ CK_RV create_DilithiumPrivateKey(CK_SESSION_HANDLE session, + + /** Create an IBM Dilithium public key using (rho, t1) **/ + CK_RV create_DilithiumPublicKey(CK_SESSION_HANDLE session, +- CK_BYTE rho[], CK_ULONG rho_len, +- CK_BYTE t1[], CK_ULONG t1_len, +- CK_OBJECT_HANDLE * publ_key) ++ CK_BYTE spki[], CK_ULONG spki_len, ++ CK_ULONG keyform, ++ CK_BYTE rho[], CK_ULONG rho_len, ++ CK_BYTE t1[], CK_ULONG t1_len, ++ CK_OBJECT_HANDLE * publ_key) + { + CK_RV rc; + CK_OBJECT_CLASS class = CKO_PUBLIC_KEY; + CK_KEY_TYPE keyType = CKK_IBM_PQC_DILITHIUM; + CK_UTF8CHAR label[] = "A Dilithium public key object"; + CK_BBOOL true = TRUE; +- CK_ULONG keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_65; + CK_ATTRIBUTE template[] = { + {CKA_CLASS, &class, sizeof(class)}, + {CKA_KEY_TYPE, &keyType, sizeof(keyType)}, +@@ -689,13 +710,28 @@ CK_RV create_DilithiumPublicKey(CK_SESSION_HANDLE session, + {CKA_IBM_DILITHIUM_T1, t1, t1_len}, + {CKA_IBM_DILITHIUM_KEYFORM, &keyform, sizeof(keyform)}, + }; ++ CK_ATTRIBUTE template_spki[] = { ++ {CKA_CLASS, &class, sizeof(class)}, ++ {CKA_KEY_TYPE, &keyType, sizeof(keyType)}, ++ {CKA_TOKEN, &true, sizeof(true)}, ++ {CKA_LABEL, label, sizeof(label)}, ++ {CKA_VERIFY, &true, sizeof(true)}, ++ {CKA_VALUE, spki, spki_len}, ++ }; + + // create key +- rc = funcs->C_CreateObject(session, template, +- sizeof(template) / sizeof(CK_ATTRIBUTE), +- publ_key); ++ if (spki_len > 0) ++ rc = funcs->C_CreateObject(session, template_spki, ++ sizeof(template_spki) / sizeof(CK_ATTRIBUTE), ++ publ_key); ++ else ++ rc = funcs->C_CreateObject(session, template, ++ sizeof(template) / sizeof(CK_ATTRIBUTE), ++ publ_key); + if (rc != CKR_OK) { +- if (is_rejected_by_policy(rc, session)) ++ if (rc == CKR_KEY_SIZE_RANGE) ++ testcase_notice("C_CreateObject rc=%s", p11_get_ckr(rc)); ++ else if (is_rejected_by_policy(rc, session)) + rc = CKR_POLICY_VIOLATION; + else + testcase_error("C_CreateObject rc=%s", p11_get_ckr(rc)); +diff --git a/testcases/crypto/dilithium.h b/testcases/crypto/dilithium.h +index 24962d3d..c61820b0 100644 +--- a/testcases/crypto/dilithium.h ++++ b/testcases/crypto/dilithium.h +@@ -10,7 +10,7 @@ + + /** + * Experimental Support for Dilithium keys and signatures +- * with oid = 1.3.6.1.4.1.2.267.1.6.5 ++ * with oid = 1.3.6.1.4.1.2.267.xxx + * + * Public-key encoding; raw public-key field. See RFC 3279 for + * subjectPublicKeyInfo (SPKI) structures. +@@ -41,6 +41,7 @@ + struct DILITHIUM_TEST_VECTOR { + char *name; + int version; ++ CK_ULONG keyform; + CK_ULONG rho_len; + CK_BYTE rho[32]; + CK_ULONG seed_len; +@@ -48,17 +49,21 @@ struct DILITHIUM_TEST_VECTOR { + CK_ULONG tr_len; + CK_BYTE tr[48]; + CK_ULONG s1_len; +- CK_BYTE s1[480]; ++ CK_BYTE s1[672]; + CK_ULONG s2_len; +- CK_BYTE s2[576]; ++ CK_BYTE s2[768]; + CK_ULONG t0_len; +- CK_BYTE t0[2688]; ++ CK_BYTE t0[3584]; + CK_ULONG t1_len; +- CK_BYTE t1[1728]; ++ CK_BYTE t1[2560]; ++ CK_BYTE pkcs8[8192]; ++ CK_ULONG pkcs8_len; ++ CK_BYTE spki[8192]; ++ CK_ULONG spki_len; + CK_ULONG msg_len; + CK_BYTE msg[4096]; // adjust to max msg len + CK_ULONG sig_len; +- CK_BYTE sig[3366]; ++ CK_BYTE sig[4668]; + }; + + /** +@@ -66,8 +71,372 @@ struct DILITHIUM_TEST_VECTOR { + */ + struct DILITHIUM_TEST_VECTOR dilithium_tv[] = { + { +- .name = "Dilithium 6-5 KAT 0", ++ .name = "Dilithium Round 2, Level 4 (6-5) KAT 0 (PKCS#8/SPKI)", + .version = 0, ++ .keyform = 0, ++ .rho_len = 0, ++ .seed_len = 0, ++ .tr_len = 0, ++ .s1_len = 0, ++ .s2_len = 0, ++ .t0_len = 0, ++ .t1_len = 0, ++ .pkcs8_len = 5652, ++ .pkcs8 = { ++ 0x30, 0x82, 0x16, 0x10, 0x02, 0x01, 0x00, 0x30, 0x0f, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0b, 0x01, 0x06, 0x05, 0x05, 0x00, 0x04, 0x82, 0x15, 0xf8, 0x30, 0x82, 0x15, 0xf4, ++ 0x02, 0x01, 0x00, 0x03, 0x21, 0x00, 0x7c, 0x99, 0x35, 0xa0, 0xb0, 0x76, 0x94, 0xaa, 0x0c, 0x6d, 0x10, 0xe4, 0xdb, 0x6b, 0x1a, 0xdd, 0x2f, 0xd8, 0x1a, 0x25, 0xcc, 0xb1, 0x48, 0x03, 0x2d, 0xcd, ++ 0x73, 0x99, 0x36, 0x73, 0x7f, 0x2d, 0x03, 0x21, 0x00, 0x3e, 0x78, 0x4c, 0xcb, 0x7e, 0xbc, 0xdc, 0xfd, 0x45, 0x54, 0x2b, 0x7f, 0x6a, 0xf7, 0x78, 0x74, 0x2e, 0x0f, 0x44, 0x79, 0x17, 0x50, 0x84, ++ 0xaa, 0x48, 0x8b, 0x3b, 0x74, 0x34, 0x06, 0x78, 0xaa, 0x03, 0x31, 0x00, 0x73, 0xfd, 0x5e, 0x3f, 0xe6, 0xfb, 0x80, 0xfa, 0x84, 0x71, 0xc0, 0x8c, 0x68, 0x82, 0xf7, 0x1d, 0x86, 0x21, 0x84, 0xc3, ++ 0x5f, 0x55, 0x76, 0xc0, 0x65, 0x97, 0xd8, 0xdc, 0xfa, 0x36, 0xa8, 0x0b, 0x2c, 0x25, 0x5a, 0x59, 0x9a, 0x55, 0xb0, 0x74, 0xaf, 0x36, 0xe8, 0xdb, 0x79, 0x23, 0xf7, 0x68, 0x03, 0x82, 0x01, 0xe1, ++ 0x00, 0x91, 0xb4, 0x79, 0x09, 0xc5, 0x15, 0x4e, 0x10, 0xb2, 0x0d, 0x12, 0x0d, 0x98, 0x66, 0x0b, 0x08, 0xab, 0x6c, 0xe8, 0xea, 0x09, 0xa6, 0x36, 0x14, 0xac, 0xe0, 0xc0, 0x41, 0x38, 0x13, 0x11, ++ 0xc9, 0xd5, 0x14, 0x6a, 0x71, 0xc0, 0xda, 0x41, 0xa2, 0x49, 0x91, 0x6e, 0x6d, 0x12, 0xf2, 0xc2, 0x6a, 0xd2, 0x4c, 0x55, 0x8c, 0x86, 0x61, 0x62, 0x01, 0xd8, 0x32, 0x12, 0xc3, 0x04, 0x24, 0x26, ++ 0x4b, 0xb2, 0xa2, 0xad, 0xe6, 0xda, 0x2e, 0x36, 0xa9, 0xe8, 0x28, 0x8e, 0x2c, 0xd3, 0xcd, 0x5d, 0x22, 0x6d, 0x66, 0xc6, 0xba, 0x02, 0x0c, 0x31, 0x19, 0x69, 0x43, 0xe4, 0x04, 0x6e, 0x71, 0x67, ++ 0x89, 0x13, 0x14, 0x74, 0x4a, 0x47, 0xb0, 0x50, 0xc3, 0x61, 0x8d, 0x01, 0x22, 0x2a, 0x5a, 0x6b, 0x6a, 0x34, 0x60, 0x26, 0x00, 0x01, 0x68, 0xa6, 0x89, 0x0d, 0x95, 0x10, 0x20, 0x04, 0x82, 0x0c, ++ 0x6b, 0x70, 0x94, 0x89, 0x50, 0x73, 0x26, 0xd4, 0xb5, 0x0b, 0x40, 0x48, 0x82, 0x31, 0x12, 0xc2, 0x02, 0x0d, 0xe2, 0x78, 0xd0, 0x20, 0x2e, 0x4a, 0x07, 0x41, 0x58, 0x2c, 0x47, 0x9c, 0xbb, 0x15, ++ 0x2e, 0x8d, 0x24, 0x73, 0x10, 0xd6, 0xe8, 0x66, 0x01, 0xb3, 0x1c, 0xa5, 0x75, 0xb9, 0xd4, 0xd5, 0x84, 0x4e, 0x08, 0xb9, 0xc9, 0x46, 0xc4, 0x84, 0x26, 0xe9, 0x9a, 0xae, 0x6b, 0x33, 0x94, 0x20, ++ 0x79, 0x35, 0x16, 0x90, 0x58, 0xd4, 0xb2, 0x5e, 0x46, 0xc7, 0x29, 0x09, 0x47, 0xa0, 0x19, 0xb0, 0x16, 0x2a, 0xc6, 0xe1, 0xc0, 0x42, 0x70, 0x04, 0x62, 0x43, 0xe1, 0xcd, 0x6e, 0x52, 0x25, 0x86, ++ 0xca, 0x8a, 0x15, 0x51, 0x2c, 0x69, 0xb1, 0x62, 0x12, 0x89, 0xc9, 0x89, 0x15, 0x2c, 0x8d, 0xb1, 0x01, 0x2c, 0x1c, 0xb2, 0x14, 0x05, 0x5b, 0x1b, 0x95, 0xcc, 0x41, 0x29, 0x27, 0xc3, 0x4a, 0xc8, ++ 0x51, 0xcc, 0x65, 0x19, 0x52, 0x13, 0x5e, 0x38, 0x44, 0x80, 0x8c, 0x32, 0x2b, 0x56, 0xcf, 0x1a, 0x68, 0x0d, 0x80, 0xd3, 0xda, 0x6d, 0xb1, 0xd5, 0xf5, 0x98, 0x50, 0x85, 0x38, 0x30, 0x42, 0x6a, ++ 0x73, 0x9a, 0x4b, 0xcd, 0x50, 0x35, 0x0d, 0x5b, 0x4b, 0x86, 0x90, 0x22, 0xd8, 0x4e, 0x55, 0xa8, 0x23, 0x9d, 0x15, 0x25, 0x50, 0x35, 0x08, 0x91, 0x31, 0xda, 0x08, 0xcf, 0x2a, 0xb3, 0x15, 0x43, ++ 0x33, 0xc8, 0x5d, 0x41, 0x59, 0x43, 0xd4, 0x99, 0x30, 0x94, 0x45, 0xd4, 0x3c, 0x60, 0x16, 0xb2, 0x14, 0x45, 0xab, 0xd1, 0xd5, 0x14, 0x7b, 0x85, 0xc8, 0x8a, 0x1b, 0x6c, 0x66, 0x40, 0x49, 0x02, ++ 0x69, 0xaa, 0x45, 0x83, 0xb2, 0x66, 0x74, 0x81, 0x68, 0x95, 0x2d, 0x51, 0x19, 0x6b, 0x90, 0xab, 0x22, 0x84, 0x55, 0xc9, 0x71, 0xaa, 0x44, 0x00, 0x1c, 0x43, 0xa9, 0x62, 0x47, 0x93, 0x0e, 0xa6, ++ 0xd2, 0xa2, 0xc6, 0x38, 0xa5, 0x17, 0x2f, 0x4a, 0x25, 0x3a, 0x04, 0xb7, 0x54, 0x91, 0x38, 0x07, 0x42, 0x94, 0x45, 0xf3, 0xa2, 0x45, 0xe8, 0x36, 0xc6, 0x48, 0x8a, 0x08, 0x82, 0x4d, 0x97, 0x1b, ++ 0xdd, 0x36, 0xac, 0x43, 0x85, 0xd6, 0xd2, 0x4d, 0x5d, 0x88, 0x69, 0x9b, 0xd4, 0x4e, 0x8c, 0x0c, 0xc3, 0xa5, 0x56, 0xb3, 0x54, 0x0a, 0x26, 0x6c, 0x21, 0x6b, 0x5d, 0x3d, 0x52, 0x9e, 0x5d, 0x0d, ++ 0x9a, 0x00, 0x14, 0x4d, 0x32, 0x08, 0x58, 0x09, 0xd3, 0xd9, 0x38, 0x35, 0x1d, 0xd0, 0xb1, 0x69, 0x29, 0x57, 0x1a, 0x43, 0xc9, 0x32, 0xd3, 0x85, 0xa8, 0x90, 0x0c, 0x6d, 0x1a, 0x2b, 0x74, 0x3a, ++ 0xb9, 0x03, 0x82, 0x02, 0x41, 0x00, 0x16, 0xa7, 0x65, 0x55, 0x1c, 0x11, 0x1e, 0x95, 0x6c, 0x90, 0x30, 0x79, 0x8b, 0x67, 0x8e, 0x0a, 0x36, 0x72, 0xca, 0x50, 0x27, 0x98, 0xe5, 0x46, 0x6c, 0xa2, ++ 0x14, 0x16, 0x33, 0x02, 0x11, 0x2c, 0xc3, 0xa9, 0x6d, 0xa3, 0x86, 0xa9, 0xae, 0xa1, 0x10, 0x27, 0x50, 0x08, 0xd9, 0xb3, 0xb9, 0xc0, 0x51, 0x1d, 0x13, 0x9e, 0x5a, 0x66, 0xe0, 0x0c, 0x76, 0x76, ++ 0x85, 0xa6, 0x0b, 0x12, 0x8f, 0x93, 0xd0, 0x48, 0x02, 0x28, 0x2c, 0x1e, 0x9d, 0x8c, 0x5b, 0x01, 0x14, 0x74, 0x60, 0x66, 0x43, 0xc2, 0x0d, 0x42, 0x1b, 0xa3, 0x8a, 0x44, 0x25, 0x92, 0x44, 0x90, ++ 0x41, 0x06, 0x8a, 0xa9, 0x24, 0x41, 0xa6, 0x81, 0xd5, 0x05, 0x3a, 0xd4, 0x6c, 0x93, 0x45, 0x5d, 0x8c, 0x18, 0x88, 0xd4, 0x5a, 0x20, 0x3d, 0xaa, 0xcd, 0xa0, 0xa6, 0xac, 0x54, 0x45, 0xb3, 0x0b, ++ 0x13, 0xb1, 0x61, 0x1a, 0x08, 0x56, 0x6d, 0x6d, 0x8d, 0xa6, 0xda, 0xc0, 0x8d, 0x0d, 0x33, 0xce, 0x99, 0x96, 0xb4, 0x8b, 0xdb, 0x8d, 0xc8, 0x8c, 0x85, 0x6e, 0x03, 0xb2, 0xc1, 0x2c, 0xaa, 0x43, ++ 0x60, 0x27, 0x60, 0xc1, 0x95, 0x54, 0xca, 0x2e, 0x8d, 0x02, 0x19, 0x83, 0x80, 0x3a, 0x43, 0x1d, 0xcc, 0xd1, 0x82, 0x39, 0x81, 0x90, 0xd1, 0xc2, 0x40, 0xc6, 0x28, 0x6c, 0xb5, 0x8c, 0x6a, 0x15, ++ 0xea, 0xc8, 0x18, 0x42, 0x6a, 0x6b, 0x01, 0x05, 0x93, 0xb1, 0x53, 0x15, 0xaa, 0xcd, 0x96, 0xcd, 0xc4, 0x79, 0x00, 0x64, 0x8a, 0x24, 0xb6, 0x2e, 0xc6, 0x10, 0xb0, 0x32, 0x38, 0xba, 0x66, 0xa2, ++ 0x6a, 0xd9, 0x12, 0x2c, 0x74, 0xc9, 0x15, 0x58, 0x44, 0xd1, 0x45, 0xd4, 0xc9, 0x84, 0x6d, 0x97, 0x55, 0x5c, 0x39, 0xdc, 0x40, 0xc2, 0x83, 0xda, 0x46, 0x82, 0x48, 0x33, 0x14, 0x02, 0xa6, 0xb1, ++ 0x58, 0x78, 0xa3, 0x65, 0x53, 0x8d, 0x25, 0x07, 0xdc, 0x14, 0x5b, 0x73, 0x39, 0xb2, 0x28, 0xb6, 0xd1, 0xb6, 0x54, 0x02, 0x85, 0x9c, 0x00, 0x95, 0x37, 0xd1, 0x6b, 0xb4, 0xa9, 0x32, 0xb9, 0xd5, ++ 0x0b, 0x44, 0xb4, 0x03, 0x6a, 0x0c, 0xa9, 0x21, 0x4e, 0x81, 0x95, 0x36, 0x0c, 0xc0, 0x72, 0x65, 0x59, 0xc4, 0x09, 0x42, 0x39, 0x93, 0x48, 0xd2, 0x03, 0x44, 0x9b, 0xa5, 0x42, 0xa4, 0xd9, 0x9a, ++ 0x19, 0xe4, 0x6c, 0x1a, 0xaa, 0xc4, 0x11, 0x1b, 0x41, 0x2d, 0xf3, 0xb0, 0xcc, 0xac, 0x39, 0xa5, 0x19, 0x05, 0x47, 0xa0, 0x51, 0x56, 0x51, 0x57, 0x8c, 0x5b, 0xed, 0xd6, 0x62, 0xda, 0x5a, 0x75, ++ 0x50, 0x6c, 0x13, 0x11, 0x63, 0x34, 0x52, 0x23, 0x25, 0x46, 0x78, 0x2c, 0x93, 0xc5, 0x20, 0x20, 0x80, 0x59, 0x2a, 0xc2, 0xa4, 0xe6, 0x7a, 0x4e, 0x9c, 0x70, 0xce, 0xa4, 0x8e, 0x86, 0x5d, 0x73, ++ 0x61, 0xca, 0xd1, 0x13, 0xd2, 0xc5, 0xf6, 0xea, 0x95, 0x2a, 0xb8, 0x6c, 0x90, 0x69, 0x23, 0xab, 0xd5, 0x59, 0x00, 0x52, 0x93, 0x51, 0x59, 0x37, 0x34, 0x2b, 0xba, 0xb0, 0xb4, 0x14, 0x93, 0xe1, ++ 0xaa, 0xa8, 0x20, 0x08, 0x0e, 0xa9, 0xca, 0x30, 0x51, 0xb1, 0x60, 0xaa, 0xa8, 0x40, 0xc1, 0x3a, 0x5a, 0xc5, 0xb0, 0x02, 0x1a, 0xae, 0x1e, 0x2c, 0x9b, 0x6c, 0xd7, 0x0e, 0x32, 0x39, 0x06, 0x50, ++ 0x92, 0xa9, 0x71, 0x92, 0x56, 0x02, 0x26, 0xce, 0x9c, 0x41, 0x6e, 0x50, 0x1c, 0x96, 0x4c, 0xa0, 0x7a, 0x13, 0x61, 0x99, 0x01, 0x0b, 0x72, 0x81, 0x45, 0x45, 0x52, 0x1a, 0x0a, 0x6c, 0x31, 0x57, ++ 0x13, 0x6a, 0x71, 0x42, 0x8d, 0x92, 0xe5, 0x60, 0xc8, 0x99, 0x92, 0x42, 0x9a, 0x91, 0xa6, 0xe9, 0x4a, 0x94, 0xa2, 0x58, 0x33, 0x8e, 0x8a, 0xaa, 0x80, 0xc8, 0x89, 0x23, 0x31, 0x3b, 0x6e, 0x33, ++ 0x76, 0x44, 0x1b, 0x57, 0x12, 0x10, 0x37, 0xad, 0xa6, 0x36, 0x0e, 0x43, 0xd6, 0x19, 0xbb, 0x58, 0xed, 0xe2, 0x91, 0x83, 0x1a, 0x10, 0x0a, 0xb7, 0xb9, 0x0b, 0xd3, 0x2a, 0x43, 0x5c, 0x4f, 0x34, ++ 0x18, 0x53, 0xe4, 0xe2, 0x94, 0xde, 0xe4, 0xc1, 0x8a, 0xa5, 0x0a, 0xa5, 0x91, 0x4e, 0x45, 0xb9, 0x6c, 0xe4, 0xc6, 0x4c, 0xaa, 0x64, 0x00, 0x63, 0xdd, 0x1a, 0x33, 0xdc, 0x81, 0x42, 0xc7, 0x0d, ++ 0x4b, 0x80, 0x82, 0x58, 0x29, 0x93, 0x03, 0x82, 0x0a, 0x81, 0x00, 0x78, 0x81, 0x96, 0x2f, 0x23, 0xe6, 0x5b, 0x5c, 0x42, 0xdd, 0xce, 0x0b, 0x7d, 0x97, 0xd3, 0x53, 0x6b, 0xa3, 0xd9, 0x0b, 0xb3, ++ 0x6f, 0x47, 0xdb, 0x3f, 0xb1, 0x38, 0xa0, 0x3a, 0x8d, 0xce, 0x07, 0x90, 0x71, 0x65, 0x8b, 0xbb, 0xf2, 0x55, 0x7e, 0x54, 0xd6, 0xfd, 0x7c, 0x88, 0xfb, 0xbd, 0xbd, 0x73, 0x71, 0x03, 0x3c, 0x86, ++ 0x5f, 0x24, 0x82, 0x1c, 0xb6, 0x86, 0xc7, 0x24, 0xa0, 0x75, 0xf2, 0x34, 0xeb, 0xaf, 0x37, 0xab, 0x7c, 0xdc, 0x57, 0xab, 0xfb, 0xe3, 0x7a, 0xa6, 0x0a, 0x44, 0x29, 0x1c, 0x66, 0x00, 0x8f, 0x22, ++ 0x4e, 0x3b, 0x1a, 0x0e, 0x5e, 0x17, 0xc5, 0xf3, 0xec, 0xe3, 0x11, 0x23, 0x44, 0x49, 0x90, 0x31, 0xb2, 0x1f, 0x50, 0xed, 0x5b, 0xb5, 0xff, 0x84, 0x0c, 0x13, 0x16, 0x45, 0x6b, 0xdc, 0x82, 0x5e, ++ 0xb9, 0x03, 0x9a, 0x8f, 0x62, 0x7e, 0x81, 0xa3, 0xbc, 0x39, 0x54, 0xf4, 0xa4, 0xff, 0xf5, 0x73, 0x71, 0xb4, 0x6b, 0x17, 0xf5, 0xb6, 0x84, 0x53, 0x2c, 0xfd, 0xfa, 0x64, 0x7c, 0x73, 0x24, 0x2c, ++ 0x82, 0xc1, 0x24, 0x4c, 0xc1, 0x41, 0xd3, 0x97, 0x2b, 0x2c, 0xad, 0x88, 0x14, 0xfe, 0x61, 0xec, 0x80, 0xf0, 0x78, 0x3c, 0xe0, 0xc4, 0x19, 0xb6, 0x73, 0x6e, 0xa6, 0xd7, 0xfa, 0xb2, 0x18, 0x95, ++ 0x01, 0xff, 0x37, 0x78, 0x11, 0x56, 0x03, 0xd9, 0x4a, 0xbf, 0xff, 0x5d, 0x61, 0xe2, 0x81, 0xd8, 0xc1, 0xaf, 0x33, 0x2b, 0x63, 0xf9, 0xca, 0x13, 0x4c, 0xd0, 0x0b, 0xb9, 0x4f, 0x6b, 0x33, 0x67, ++ 0x2e, 0x92, 0xd4, 0x21, 0xef, 0xda, 0x70, 0x6e, 0x47, 0x04, 0xd3, 0x89, 0x76, 0xe3, 0x39, 0x12, 0x4a, 0x7b, 0xfc, 0x21, 0x85, 0x61, 0xd3, 0xb9, 0x32, 0x5c, 0x09, 0x69, 0xea, 0x0d, 0x0f, 0xd8, ++ 0x3c, 0x38, 0xd8, 0xf9, 0x84, 0x16, 0xdb, 0x58, 0x5b, 0xf1, 0x6c, 0xaa, 0x1e, 0x11, 0xd8, 0xcf, 0x2b, 0x9a, 0x91, 0x47, 0xa1, 0x14, 0x34, 0x2d, 0x6a, 0x40, 0xaf, 0x35, 0xcb, 0x14, 0x5c, 0xf6, ++ 0x28, 0x55, 0xad, 0x31, 0x96, 0xbe, 0x6c, 0xa9, 0xb8, 0x8c, 0x88, 0xe3, 0x03, 0x6b, 0x33, 0x00, 0x7b, 0x83, 0x10, 0x67, 0xee, 0x46, 0x08, 0xfd, 0x38, 0xf1, 0x1f, 0x10, 0x2a, 0xcb, 0x30, 0x90, ++ 0xfe, 0x7c, 0x11, 0x24, 0xf8, 0x16, 0x4f, 0x99, 0xe7, 0x5f, 0xf9, 0x7e, 0xa0, 0xdb, 0xaa, 0x20, 0x78, 0xf5, 0x90, 0x58, 0xdd, 0x9f, 0x4d, 0x15, 0x73, 0xfe, 0xa0, 0xe7, 0x28, 0x60, 0x0a, 0xbb, ++ 0x63, 0xa9, 0xb9, 0x99, 0xd1, 0xd9, 0x15, 0x27, 0x1c, 0xe7, 0x5b, 0x12, 0x05, 0xa6, 0x20, 0x25, 0x69, 0x1f, 0xa4, 0xf8, 0xad, 0x8a, 0x83, 0x74, 0x94, 0x65, 0x25, 0x81, 0x34, 0x13, 0x1c, 0x01, ++ 0xbf, 0x3d, 0x43, 0x6a, 0x82, 0x9e, 0xa4, 0xff, 0x36, 0xa4, 0x06, 0xa8, 0x91, 0x2a, 0xb6, 0x04, 0x13, 0xcb, 0x67, 0xe1, 0x27, 0xe6, 0xa1, 0xf3, 0xb6, 0xcf, 0x3d, 0x8c, 0x70, 0xf2, 0xb5, 0x6f, ++ 0xe4, 0x57, 0x81, 0x6e, 0x17, 0x30, 0x8c, 0x60, 0x05, 0x37, 0x24, 0xd0, 0x97, 0x0f, 0x7f, 0x41, 0xcd, 0x4c, 0xb4, 0xf4, 0x40, 0xbf, 0xe4, 0xe6, 0x0d, 0xf6, 0x88, 0xb5, 0x36, 0xca, 0x57, 0xc8, ++ 0xf0, 0x15, 0xd8, 0xfd, 0x8d, 0xfd, 0xc4, 0x56, 0x4b, 0xf1, 0x79, 0x40, 0x71, 0x1d, 0xa7, 0x24, 0xa9, 0xb9, 0x86, 0x53, 0x00, 0x58, 0xc4, 0x21, 0x37, 0xd5, 0xce, 0x52, 0x40, 0x1c, 0x26, 0xfa, ++ 0x59, 0x92, 0x93, 0x96, 0x60, 0xdc, 0x65, 0x2d, 0xf1, 0xdd, 0x91, 0x99, 0x59, 0xc7, 0xd1, 0x15, 0xcd, 0x19, 0x64, 0xb0, 0x4e, 0xf0, 0x3c, 0x30, 0xd1, 0xea, 0x29, 0x47, 0xdc, 0x2e, 0x94, 0x5d, ++ 0xb8, 0x78, 0xb4, 0xd7, 0x30, 0x27, 0x98, 0xaf, 0xb9, 0x3f, 0x26, 0xea, 0x9a, 0x95, 0xbf, 0x20, 0xef, 0x05, 0x83, 0x7d, 0xf6, 0xdc, 0xc0, 0xd9, 0x62, 0x4b, 0xf0, 0xd4, 0xdf, 0x28, 0xe0, 0xb6, ++ 0xaf, 0x9d, 0x98, 0xc2, 0x21, 0x96, 0x1a, 0xfe, 0x1e, 0x72, 0x8c, 0x35, 0xaf, 0x7c, 0x6b, 0x42, 0xcc, 0x18, 0x70, 0xac, 0x27, 0xae, 0x90, 0xdb, 0x78, 0xcb, 0x48, 0x85, 0x07, 0xe8, 0x56, 0x1e, ++ 0x13, 0xd5, 0xb1, 0x72, 0xb2, 0xde, 0x08, 0x66, 0x44, 0xb3, 0x9c, 0x19, 0x44, 0x71, 0x5d, 0x26, 0x31, 0x8e, 0x72, 0xf3, 0x21, 0x91, 0x79, 0x18, 0x6a, 0x9f, 0xe0, 0x2e, 0x41, 0xfe, 0x64, 0xa9, ++ 0x55, 0xca, 0x04, 0x4d, 0x1d, 0xc7, 0x97, 0xd4, 0x8a, 0x8f, 0x74, 0xdf, 0xf4, 0x17, 0x75, 0x39, 0x02, 0x0e, 0x52, 0x20, 0x7f, 0x01, 0x8d, 0x07, 0xa5, 0xed, 0x88, 0xd7, 0x2d, 0xc6, 0xf1, 0xe9, ++ 0x2b, 0x36, 0x72, 0x59, 0x4a, 0xee, 0xf3, 0x7e, 0xae, 0x5e, 0xf5, 0xe1, 0xbf, 0xc8, 0x7f, 0x4a, 0x98, 0x36, 0xb2, 0x64, 0x2a, 0x4c, 0x8a, 0xde, 0xdc, 0xc5, 0x1c, 0xf0, 0x70, 0xea, 0x4f, 0xf8, ++ 0xbf, 0xd8, 0x12, 0x1b, 0x5d, 0x43, 0xad, 0xe5, 0xe1, 0x7e, 0xaf, 0x2c, 0x60, 0xb2, 0x0d, 0x36, 0x11, 0xfd, 0xc3, 0xdf, 0xff, 0x32, 0x14, 0xe3, 0xc6, 0x54, 0xac, 0xb9, 0x7e, 0x0e, 0xe7, 0x2f, ++ 0x41, 0x6a, 0x50, 0x83, 0xa3, 0x4c, 0x44, 0xb6, 0xe6, 0xc4, 0x4b, 0xc1, 0x0e, 0x92, 0x5f, 0x61, 0x37, 0x0f, 0x18, 0x06, 0xdf, 0x77, 0xcf, 0xc6, 0x8d, 0x40, 0x80, 0x28, 0x52, 0x29, 0x08, 0x7a, ++ 0xb6, 0xb1, 0x11, 0x5c, 0xab, 0xde, 0x98, 0x2f, 0x11, 0x63, 0xa0, 0xb2, 0x40, 0xaf, 0x6a, 0x5b, 0x94, 0x57, 0xcc, 0xed, 0x75, 0xd2, 0x1b, 0x72, 0xc7, 0x28, 0xba, 0x90, 0x4d, 0x07, 0x39, 0x41, ++ 0x93, 0xdd, 0x59, 0x6d, 0x75, 0xe3, 0x21, 0x33, 0xdf, 0x3e, 0xaf, 0x89, 0xda, 0x68, 0xad, 0x8a, 0xd1, 0x16, 0xc0, 0x0f, 0x54, 0xd5, 0x51, 0xbe, 0x76, 0x29, 0x82, 0xa2, 0x2a, 0x3d, 0xea, 0xe6, ++ 0x2d, 0x34, 0xd2, 0x04, 0xd2, 0xcb, 0x06, 0xc1, 0xa8, 0x4e, 0xb4, 0x7a, 0xc9, 0x49, 0x55, 0x13, 0xc1, 0x72, 0x60, 0x20, 0xd8, 0x82, 0x13, 0x50, 0x9c, 0xc8, 0xf0, 0x12, 0xfa, 0x70, 0x4d, 0x2f, ++ 0xfb, 0xe6, 0xfc, 0xb8, 0xd8, 0x0d, 0x94, 0x7c, 0xfb, 0xd2, 0x0f, 0xef, 0x29, 0x0a, 0xd6, 0x27, 0x18, 0x54, 0x37, 0xd0, 0x24, 0xa9, 0xa1, 0x5e, 0x43, 0x66, 0x24, 0x96, 0x10, 0xbb, 0x75, 0x2d, ++ 0x4a, 0x86, 0xf5, 0x47, 0x2c, 0x23, 0x46, 0x78, 0x95, 0xf3, 0xad, 0x79, 0xf2, 0x37, 0x17, 0xd1, 0x2f, 0xa1, 0xaf, 0xe1, 0x69, 0x4d, 0x6a, 0x4b, 0x51, 0x8e, 0x7e, 0x03, 0x0a, 0x21, 0x44, 0xd8, ++ 0x2c, 0xac, 0x65, 0x03, 0xbe, 0x53, 0x56, 0x06, 0x48, 0xd6, 0xea, 0xc3, 0xaa, 0x19, 0x47, 0x01, 0x76, 0x5b, 0x2b, 0xd9, 0xee, 0x9b, 0x2a, 0xaa, 0x53, 0x62, 0xbc, 0x79, 0xa0, 0x2c, 0x2b, 0xf7, ++ 0x3a, 0xa5, 0x41, 0x1c, 0xbd, 0x04, 0xb9, 0x16, 0xb1, 0x38, 0xfc, 0x7b, 0x0d, 0x55, 0x0e, 0x70, 0x5e, 0x50, 0x3a, 0x42, 0xd3, 0x0b, 0x22, 0x0d, 0x60, 0x8c, 0x83, 0xcf, 0x2e, 0xef, 0x62, 0x79, ++ 0x50, 0xb8, 0x29, 0xdf, 0x33, 0x44, 0xa6, 0xa9, 0x57, 0xb2, 0x97, 0x18, 0x4b, 0xa6, 0x69, 0xc2, 0x25, 0x0a, 0xd4, 0x29, 0x38, 0xe4, 0xf9, 0x22, 0x92, 0x5f, 0x22, 0x88, 0x7d, 0xf7, 0x9e, 0x95, ++ 0x43, 0x36, 0xa3, 0xc0, 0xb7, 0x46, 0x22, 0x84, 0xb4, 0xf3, 0x80, 0x11, 0x5c, 0xe7, 0xc3, 0x25, 0x37, 0x64, 0x47, 0x89, 0xf4, 0x2a, 0x31, 0xdb, 0x5c, 0x84, 0x7c, 0xc0, 0x65, 0xa3, 0xdf, 0x03, ++ 0x54, 0x78, 0x9a, 0x2e, 0x18, 0x49, 0x75, 0x15, 0x1d, 0xfb, 0x96, 0xa9, 0x59, 0x26, 0x97, 0xde, 0xc9, 0xf9, 0xa8, 0xdd, 0xde, 0x89, 0x51, 0x63, 0xbc, 0xfa, 0x48, 0x31, 0x48, 0x5d, 0x2c, 0x98, ++ 0xfd, 0xa5, 0xc8, 0x3c, 0x7e, 0xea, 0xed, 0xc1, 0xbb, 0x1c, 0x03, 0x81, 0x27, 0xe7, 0x92, 0x91, 0x5a, 0xc5, 0x3d, 0x47, 0x62, 0x8a, 0xf3, 0x8b, 0x30, 0xfc, 0x3b, 0xb9, 0x14, 0xfd, 0x7a, 0x4c, ++ 0x29, 0x83, 0x3c, 0x94, 0x9e, 0xf1, 0xc0, 0xac, 0x5f, 0xf3, 0xbf, 0x3c, 0x76, 0xc9, 0xf6, 0x59, 0x35, 0x96, 0x52, 0x14, 0x5a, 0xbc, 0xbe, 0xd4, 0x7b, 0xcf, 0x3b, 0xd5, 0x4f, 0xf6, 0x82, 0x45, ++ 0x2e, 0xd7, 0x51, 0xe2, 0x98, 0x62, 0x93, 0x64, 0xd8, 0x63, 0x3d, 0x24, 0x8b, 0x30, 0x00, 0x96, 0x7c, 0x75, 0x84, 0x7c, 0x61, 0x76, 0x53, 0xcb, 0x44, 0xc5, 0x7c, 0xcf, 0x34, 0xf4, 0xd9, 0xee, ++ 0xd8, 0x3f, 0xd2, 0x87, 0xa1, 0x1a, 0xb8, 0x6f, 0xfb, 0x4c, 0xa0, 0x1f, 0xd8, 0x2b, 0x04, 0x96, 0xe6, 0xfc, 0xed, 0x8d, 0xc6, 0xd1, 0xf6, 0xc7, 0xdd, 0x1e, 0x2a, 0x8f, 0xf3, 0xc3, 0x1a, 0x36, ++ 0x1c, 0x77, 0x9d, 0xe7, 0x6f, 0x00, 0x9d, 0x18, 0xef, 0x19, 0x74, 0x3f, 0x1f, 0xff, 0xa6, 0x04, 0x92, 0xbe, 0x1d, 0x01, 0x46, 0xe6, 0xad, 0x13, 0xc3, 0x81, 0x87, 0x0e, 0x6c, 0xdb, 0xde, 0x7e, ++ 0x5e, 0x71, 0x12, 0x1a, 0x89, 0x26, 0x26, 0xe2, 0xeb, 0xb8, 0x9f, 0x6f, 0x0c, 0x55, 0xc0, 0x4f, 0x9b, 0xcb, 0xaf, 0xb3, 0xf9, 0x05, 0xd4, 0x6d, 0x05, 0x44, 0x10, 0x8c, 0x58, 0x49, 0x7d, 0x44, ++ 0xc6, 0x40, 0xbc, 0xbf, 0xe3, 0x91, 0xdc, 0xdf, 0xee, 0xee, 0x3d, 0x81, 0x59, 0xe9, 0x73, 0x53, 0xfe, 0x1b, 0x42, 0xf8, 0xd7, 0x09, 0x9e, 0x16, 0xd7, 0x3a, 0x44, 0xf3, 0xa7, 0x07, 0xd0, 0x48, ++ 0xb1, 0x9c, 0x6f, 0x84, 0xb3, 0x70, 0x44, 0x13, 0x14, 0x56, 0xf6, 0xcf, 0x52, 0x69, 0x4c, 0x5f, 0x39, 0x1e, 0xe3, 0xdd, 0xfd, 0x7c, 0xbe, 0x36, 0x0b, 0x72, 0x99, 0xbc, 0x99, 0xfa, 0xdf, 0xf6, ++ 0x92, 0xbe, 0xad, 0xbb, 0x31, 0x39, 0x43, 0x33, 0xc1, 0xfa, 0x8d, 0xeb, 0x49, 0x0f, 0xb6, 0x54, 0xea, 0x0c, 0x0e, 0xa9, 0xca, 0x79, 0x8d, 0xf2, 0x86, 0x56, 0xed, 0x4c, 0x60, 0xf6, 0xbd, 0x0c, ++ 0xb2, 0x41, 0x9b, 0x87, 0xa9, 0x14, 0x9f, 0xc8, 0xea, 0x23, 0x6d, 0xb0, 0x8d, 0x5c, 0xb5, 0xb7, 0xdc, 0x6e, 0x61, 0xa9, 0xec, 0xb0, 0x00, 0x06, 0x02, 0xaf, 0x03, 0xb4, 0x49, 0xe7, 0xab, 0xd9, ++ 0x2a, 0x9d, 0xf6, 0x42, 0x0c, 0x04, 0x91, 0x24, 0xd7, 0x64, 0x84, 0xc9, 0x22, 0x92, 0x68, 0x91, 0x05, 0x71, 0x74, 0xfc, 0xde, 0xea, 0x07, 0x2f, 0x7d, 0xe3, 0x8e, 0xa3, 0xcf, 0xab, 0x50, 0xac, ++ 0x5b, 0xd4, 0xaa, 0xd7, 0xca, 0xc3, 0x58, 0x97, 0x72, 0xa1, 0x32, 0xb2, 0x51, 0x0b, 0x62, 0x7a, 0x9e, 0xe1, 0x60, 0xac, 0xb7, 0xa3, 0x55, 0x24, 0xde, 0xe9, 0x49, 0x8b, 0x71, 0xff, 0x65, 0xe9, ++ 0x62, 0x93, 0x06, 0x93, 0xab, 0x8c, 0xd2, 0x54, 0x84, 0xa5, 0x08, 0x43, 0xfe, 0xe4, 0x84, 0xd6, 0xb6, 0xc1, 0xca, 0x9d, 0x85, 0xf9, 0x7d, 0x80, 0x7d, 0xfe, 0x9e, 0x39, 0x62, 0xc1, 0xf0, 0xee, ++ 0xfc, 0x00, 0x17, 0x07, 0x64, 0x4b, 0xe2, 0x52, 0x2c, 0xfa, 0x04, 0x26, 0x73, 0x73, 0x93, 0x93, 0x6d, 0x2f, 0xe1, 0xe2, 0x89, 0x75, 0x79, 0xa0, 0x68, 0xfe, 0x29, 0x65, 0xde, 0x40, 0x21, 0x4b, ++ 0x94, 0xa5, 0x16, 0x08, 0xff, 0xf6, 0xdf, 0x2d, 0x15, 0xdc, 0xe9, 0xa5, 0xb3, 0x0a, 0x11, 0x01, 0x4e, 0xd9, 0x0c, 0x44, 0x46, 0x6f, 0xdf, 0xe0, 0x5c, 0x08, 0x4c, 0x3c, 0x72, 0x47, 0xdf, 0x2c, ++ 0x72, 0x74, 0xf1, 0x87, 0x9f, 0x39, 0x11, 0x1f, 0x61, 0xbb, 0x98, 0xbb, 0xdb, 0x03, 0x45, 0x8d, 0xfa, 0xba, 0x7d, 0xeb, 0xc7, 0x44, 0xdb, 0x04, 0xcd, 0x84, 0xe8, 0x79, 0xbb, 0xb0, 0xc0, 0x70, ++ 0xe5, 0x4b, 0x62, 0x96, 0xab, 0x48, 0xd5, 0x11, 0x7f, 0x91, 0x70, 0x01, 0x28, 0xc7, 0x86, 0xb0, 0x1c, 0x89, 0x1c, 0xc0, 0x81, 0x89, 0x6d, 0x40, 0xbf, 0x87, 0x6a, 0x5d, 0x18, 0x22, 0xdd, 0xc3, ++ 0xf0, 0x6b, 0xca, 0x94, 0x2d, 0x46, 0xd8, 0x49, 0x38, 0x96, 0x55, 0xc8, 0xde, 0xc2, 0xaa, 0xc2, 0xea, 0xf6, 0x1d, 0x11, 0xc7, 0xf7, 0x15, 0x23, 0x36, 0x7e, 0xd4, 0x56, 0x4c, 0x0f, 0x98, 0xd5, ++ 0xb0, 0x38, 0x66, 0x61, 0x8c, 0x3d, 0xe3, 0x7d, 0x56, 0x6e, 0x8c, 0x0f, 0x8f, 0x7a, 0x56, 0x65, 0x68, 0x87, 0x39, 0x86, 0x1f, 0x78, 0x42, 0x92, 0x57, 0x8b, 0x72, 0x80, 0x3f, 0x7a, 0x4b, 0x8d, ++ 0x03, 0x18, 0x30, 0xe0, 0xef, 0x94, 0x47, 0x00, 0x9c, 0x83, 0x9f, 0xd6, 0x94, 0xeb, 0x4f, 0x2b, 0x49, 0x08, 0xb8, 0x4d, 0x11, 0xcc, 0x2d, 0xf4, 0x47, 0xa1, 0xc7, 0xb4, 0x84, 0xa6, 0x14, 0x25, ++ 0x34, 0xd5, 0x62, 0x3e, 0x86, 0xe6, 0xfa, 0xd1, 0x78, 0xa4, 0xa6, 0x0d, 0x4c, 0x8f, 0xe1, 0x1e, 0xe1, 0x53, 0x85, 0xac, 0x79, 0x1b, 0x69, 0x08, 0x48, 0x96, 0xc1, 0xf1, 0x50, 0xd5, 0x0c, 0x24, ++ 0xf5, 0x07, 0x8f, 0x80, 0xfe, 0xad, 0x9b, 0x4f, 0x51, 0x86, 0x49, 0xb6, 0xb4, 0x09, 0x50, 0x2b, 0x38, 0xe0, 0x7b, 0xef, 0x58, 0x77, 0x35, 0xe8, 0xcb, 0xa9, 0xff, 0x4d, 0x96, 0x85, 0x07, 0x63, ++ 0xa4, 0x74, 0x37, 0xb2, 0xda, 0x8f, 0x40, 0x72, 0x5e, 0xc6, 0x46, 0xde, 0xc7, 0x27, 0xa8, 0x81, 0x1d, 0x4e, 0x66, 0x8e, 0xa9, 0x7b, 0xc0, 0x23, 0x7f, 0x4e, 0x4a, 0x25, 0xa2, 0xfa, 0x19, 0x8c, ++ 0x3a, 0x77, 0x4b, 0x57, 0x91, 0x7b, 0x72, 0x07, 0x5a, 0x42, 0x1a, 0x73, 0x90, 0x0b, 0x75, 0x61, 0xee, 0x43, 0x6f, 0x07, 0x75, 0x31, 0x09, 0xf9, 0x22, 0xc0, 0x55, 0x1f, 0x59, 0x1f, 0xb5, 0x46, ++ 0xa8, 0x81, 0xb1, 0x1c, 0x8c, 0x83, 0x6b, 0xf8, 0x3e, 0xc4, 0x2f, 0xf7, 0x45, 0x1b, 0xf3, 0xe0, 0xcb, 0xc8, 0x7c, 0x97, 0x29, 0x7d, 0x8f, 0xd1, 0x1e, 0x53, 0x44, 0x1e, 0x4b, 0x74, 0x4a, 0xfe, ++ 0xe4, 0xaa, 0x0b, 0x72, 0x3b, 0x80, 0x6c, 0x34, 0x85, 0xbb, 0xfb, 0x67, 0x31, 0x06, 0x92, 0x05, 0x10, 0x1c, 0xff, 0xcc, 0x2c, 0xe2, 0x63, 0xf3, 0xec, 0xfe, 0x8d, 0x93, 0x0b, 0xf4, 0x9a, 0xd2, ++ 0x8a, 0x7e, 0x6c, 0xea, 0x75, 0xc5, 0x69, 0x90, 0x6b, 0x5f, 0x93, 0x55, 0x97, 0x1d, 0xf4, 0x03, 0x3d, 0x00, 0x86, 0x65, 0xdd, 0xd0, 0x62, 0x88, 0x11, 0x99, 0x0b, 0x13, 0x04, 0x7a, 0x6b, 0x2e, ++ 0xec, 0xe1, 0x8c, 0x62, 0x55, 0x82, 0xd6, 0x0e, 0x08, 0x7b, 0x13, 0x47, 0x37, 0xbb, 0xc9, 0x26, 0x03, 0x9c, 0xfa, 0x9c, 0xab, 0xab, 0x8e, 0x3b, 0xd6, 0x31, 0x90, 0x7a, 0x33, 0x1f, 0x1b, 0x08, ++ 0xc0, 0x9d, 0xca, 0x05, 0xce, 0xb1, 0x49, 0xa0, 0xdf, 0x0e, 0x9a, 0x43, 0x06, 0xa0, 0x49, 0xc9, 0x06, 0x47, 0xc0, 0xee, 0xe7, 0xbf, 0x84, 0xca, 0xf9, 0x1c, 0x1b, 0xe7, 0x1d, 0xf4, 0xa3, 0x23, ++ 0x69, 0x89, 0x6d, 0xf8, 0xbb, 0x3d, 0xa8, 0xe8, 0x54, 0x4d, 0xd5, 0xc1, 0xd5, 0xcb, 0xa1, 0x34, 0x0b, 0x56, 0xb6, 0xb5, 0x18, 0xaa, 0x62, 0xf9, 0x83, 0xa2, 0x71, 0xba, 0x38, 0x92, 0x04, 0xe1, ++ 0x95, 0x36, 0xac, 0x98, 0x86, 0x87, 0xa2, 0xdc, 0x0c, 0x5d, 0xec, 0xc1, 0xf0, 0x14, 0x33, 0xb7, 0x01, 0xce, 0x27, 0xb5, 0xca, 0x70, 0x27, 0x38, 0x22, 0xfc, 0x8a, 0x3f, 0x58, 0xe5, 0x22, 0xee, ++ 0x8b, 0x8b, 0xd0, 0xb7, 0x56, 0x42, 0x72, 0x9d, 0x9d, 0x4c, 0xee, 0xdb, 0xe3, 0xe8, 0xf9, 0x00, 0x69, 0x1a, 0xca, 0x09, 0x6c, 0x92, 0x7a, 0xc3, 0x4e, 0x94, 0xe2, 0xc7, 0xb8, 0x5d, 0x18, 0x74, ++ 0x5e, 0x42, 0x63, 0xa1, 0x60, 0xfc, 0xc7, 0x87, 0x36, 0x81, 0xf0, 0xdc, 0xc0, 0x36, 0xc1, 0x8d, 0xd0, 0x0f, 0x52, 0x1a, 0x8b, 0x88, 0xd4, 0x8f, 0x71, 0xd2, 0xc5, 0xe7, 0x69, 0xd6, 0xe4, 0x44, ++ 0x35, 0x70, 0xe9, 0x8c, 0x8c, 0xf6, 0x70, 0xc6, 0xaf, 0x97, 0x46, 0xa8, 0xc2, 0x87, 0xf7, 0x5c, 0xc2, 0x6b, 0xd3, 0x36, 0xbe, 0xec, 0x5a, 0xd8, 0xca, 0x35, 0xd1, 0x67, 0x70, 0xcf, 0x09, 0x3f, ++ 0xac, 0x78, 0x81, 0xe8, 0x22, 0xaf, 0x2d, 0xad, 0xb7, 0x27, 0x79, 0xab, 0x3e, 0xd8, 0xbc, 0x79, 0x99, 0x95, 0x7c, 0x0d, 0x8a, 0xbd, 0x71, 0xb2, 0x04, 0xf0, 0xfd, 0xbb, 0xac, 0x65, 0x82, 0x17, ++ 0xe8, 0x83, 0xca, 0xbb, 0x6a, 0xba, 0xc8, 0x0c, 0xf4, 0xba, 0x09, 0x0b, 0x05, 0x71, 0x1b, 0xb3, 0x7b, 0x14, 0x0d, 0xbb, 0x37, 0x4d, 0xa2, 0x89, 0xd7, 0xa9, 0x34, 0x34, 0x49, 0x7d, 0xa9, 0xf8, ++ 0x16, 0x71, 0x34, 0x57, 0x04, 0xec, 0x03, 0xbb, 0x86, 0x82, 0x52, 0x89, 0x37, 0x3f, 0x72, 0x3c, 0x83, 0x83, 0x13, 0xc8, 0x78, 0x7c, 0x1f, 0xad, 0x57, 0x29, 0xb9, 0xe6, 0x6d, 0xda, 0x71, 0x0d, ++ 0xd9, 0xfe, 0xb8, 0xb5, 0xba, 0x24, 0x1a, 0x0b, 0xc4, 0x02, 0xdd, 0x9c, 0x30, 0x00, 0x68, 0xf5, 0x0f, 0x94, 0x47, 0x5e, 0xf2, 0xf4, 0xad, 0xd6, 0x67, 0x11, 0x92, 0x07, 0x5a, 0xd2, 0x42, 0x02, ++ 0xf8, 0xd7, 0x73, 0x66, 0x5c, 0xda, 0x7d, 0x29, 0x79, 0x65, 0x6e, 0xfc, 0x48, 0x94, 0x18, 0xfd, 0x67, 0x99, 0x29, 0xd5, 0xeb, 0x58, 0x4a, 0x6c, 0x18, 0x4d, 0xff, 0xe3, 0xf9, 0x9f, 0x26, 0x71, ++ 0xd5, 0x4e, 0xc3, 0x48, 0x32, 0x2f, 0xa1, 0xae, 0xc4, 0x67, 0xf5, 0x57, 0x91, 0x22, 0x9f, 0x03, 0x03, 0x53, 0xaf, 0x0f, 0x63, 0x3a, 0x34, 0x59, 0x6e, 0xc0, 0x4c, 0xec, 0x58, 0xc2, 0x50, 0xe0, ++ 0x99, 0x40, 0xd4, 0x89, 0xef, 0x4b, 0xb5, 0x47, 0x34, 0xf7, 0x64, 0x69, 0x9a, 0x45, 0x3c, 0x43, 0x76, 0x4d, 0x1c, 0xfd, 0x4a, 0x61, 0x8f, 0xc9, 0xed, 0xe9, 0xe3, 0x45, 0x66, 0x3e, 0x9b, 0x20, ++ 0x89, 0x54, 0xb5, 0x91, 0x8c, 0x61, 0x0d, 0xb7, 0xf5, 0xba, 0xd1, 0xc5, 0xdb, 0x8a, 0x4b, 0xcc, 0xa1, 0xd6, 0x43, 0x92, 0xc7, 0x38, 0x05, 0x36, 0xf0, 0x9c, 0x0a, 0xcc, 0x61, 0xaa, 0xc4, 0x62, ++ 0x99, 0x44, 0xdc, 0x64, 0x42, 0xe2, 0x30, 0x8c, 0x5a, 0xd7, 0x42, 0x6e, 0x1f, 0xae, 0x75, 0xe8, 0xa3, 0xa0, 0xbb, 0xb7, 0xf3, 0x4f, 0xb4, 0x0f, 0x41, 0x4a, 0xc7, 0x97, 0xe0, 0xb7, 0x0f, 0x69, ++ 0x65, 0xfc, 0xd3, 0xe0, 0xed, 0x07, 0xda, 0x8b, 0x75, 0x2f, 0x99, 0x2d, 0x3c, 0xd2, 0xc0, 0x58, 0x87, 0x84, 0x85, 0x77, 0xa0, 0x28, 0x12, 0x72, 0x28, 0x69, 0x4a, 0x8d, 0xd5, 0x57, 0x3a, 0x73, ++ 0x6e, 0xa7, 0xf8, 0x75, 0x06, 0xf9, 0x32, 0xb2, 0xf1, 0x4b, 0x53, 0x86, 0xbd, 0x07, 0x17, 0x04, 0x30, 0x54, 0x82, 0x81, 0x3c, 0xf1, 0x1a, 0xd4, 0x25, 0x0e, 0xc5, 0x79, 0xe8, 0xff, 0x73, 0x4e, ++ 0x07, 0x95, 0xc5, 0x03, 0xb6, 0x2d, 0x6e, 0x44, 0x7b, 0xed, 0xfd, 0xd1, 0x43, 0x44, 0xe1, 0x8d, 0xd3, 0xfb, 0x95, 0xf0, 0x72, 0xec, 0xf7, 0xc0, 0xe5, 0x51, 0x7c, 0x18, 0xc0, 0xa6, 0x35, 0x26, ++ 0xda, 0xdd, 0xc9, 0xbc, 0xaf, 0x8b, 0x8b, 0x6a, 0x26, 0x75, 0x58, 0x1b, 0x9d, 0x46, 0x56, 0x3a, 0xda, 0x1c, 0x93, 0xaa, 0x27, 0xf7, 0xa2, 0xf2, 0xc4, 0xb5, 0xee, 0x8a, 0xed, 0x3d, 0x92, 0x5c, ++ 0x6a, 0x65, 0x47, 0xf6, 0x67, 0x2c, 0x05, 0x8e, 0x5d, 0x95, 0x9b, 0x6b, 0x9e, 0x32, 0x6a, 0xfc, 0x36, 0xe8, 0x9c, 0x14, 0xe6, 0x81, 0x2b, 0x5c, 0xdd, 0xab, 0x38, 0x6b, 0x13, 0xf5, 0xd1, 0x44, ++ 0x1a, 0x78, 0x98, 0x7b, 0xd1, 0x9e, 0xbe, 0xea, 0x91, 0xef, 0xe4, 0x72, 0xc2, 0xf8, 0xc2, 0x0d, 0xe2, 0x11, 0x73, 0xad, 0xb5, 0xaa, 0xf9, 0x17, 0xc6, 0x03, 0x76, 0xc2, 0x77, 0x6d, 0xd0, 0xc6, ++ 0x58, 0xe9, 0x48, 0xf3, 0x46, 0xc2, 0xca, 0x2b, 0x77, 0xdc, 0x6b, 0x8b, 0x84, 0xc3, 0x96, 0x78, 0x7e, 0x62, 0xdf, 0x47, 0x0e, 0x94, 0xd8, 0xab, 0x87, 0xca, 0x45, 0x37, 0xce, 0x65, 0x07, 0x0d, ++ 0xa5, 0xa1, 0xba, 0x4d, 0x22, 0x4d, 0x21, 0x07, 0xff, 0x60, 0x4b, 0x1d, 0x14, 0x25, 0x45, 0x95, 0x8c, 0x11, 0xa3, 0xff, 0xef, 0x36, 0x85, 0x54, 0x69, 0x4f, 0x2b, 0xfa, 0x6b, 0xff, 0x57, 0xf5, ++ 0x49, 0x98, 0x8c, 0xa9, 0x1e, 0x87, 0xc9, 0xdf, 0xc4, 0x74, 0x76, 0xa0, 0x82, 0x06, 0xc5, 0x03, 0x82, 0x06, 0xc1, 0x00, 0x68, 0x59, 0xf6, 0x4c, 0x66, 0x39, 0x16, 0x79, 0x5e, 0x9d, 0x42, 0xa6, ++ 0x28, 0xf7, 0xa1, 0x1f, 0xb6, 0xca, 0xd6, 0xbe, 0x5a, 0x22, 0x92, 0x06, 0xf3, 0x8e, 0xc3, 0xe8, 0x7e, 0x74, 0x87, 0xc6, 0x51, 0x27, 0x45, 0xfe, 0xd6, 0xd0, 0xb6, 0x4f, 0x60, 0x55, 0x07, 0xc0, ++ 0x43, 0xe2, 0x5d, 0x10, 0x3d, 0x19, 0x67, 0x34, 0x93, 0x73, 0x04, 0x73, 0xcd, 0xc0, 0xef, 0x78, 0x0a, 0x83, 0xf2, 0x3a, 0x5c, 0x6c, 0x38, 0x75, 0xbc, 0x10, 0xb6, 0xa0, 0x53, 0xb1, 0x3a, 0xad, ++ 0x6f, 0xd7, 0xff, 0x1e, 0xcf, 0x8f, 0x72, 0x5f, 0x46, 0x01, 0x81, 0x46, 0x0c, 0x5c, 0x75, 0xe0, 0x50, 0x52, 0xfe, 0xa0, 0xdb, 0xc4, 0x99, 0x2e, 0xe0, 0x43, 0x22, 0xbb, 0x21, 0xaf, 0x25, 0xd7, ++ 0x84, 0xcb, 0xd4, 0x34, 0xdf, 0x2a, 0x87, 0xaa, 0x48, 0x6a, 0xe7, 0x05, 0x7f, 0xa0, 0x42, 0x87, 0xda, 0x5f, 0xc0, 0xd0, 0x08, 0x8c, 0x16, 0x82, 0xe0, 0x9e, 0x47, 0xab, 0xf3, 0x08, 0x36, 0xc3, ++ 0x82, 0x42, 0xc8, 0xa4, 0xba, 0x58, 0xfa, 0x4b, 0x7a, 0x17, 0x2d, 0x3b, 0x00, 0x32, 0x51, 0x65, 0x63, 0xfe, 0x46, 0xb7, 0x2e, 0x49, 0xdf, 0xac, 0xd0, 0x03, 0x3e, 0x44, 0x4f, 0x5c, 0xef, 0x0f, ++ 0xf4, 0x97, 0xd4, 0xd9, 0xd9, 0xe5, 0xb9, 0x88, 0x6f, 0x4b, 0x47, 0x29, 0x9d, 0x63, 0x52, 0x41, 0xa6, 0xdc, 0xf0, 0x69, 0xf1, 0xed, 0x1c, 0x81, 0x5a, 0x51, 0xa6, 0xf7, 0xc7, 0x55, 0xd3, 0xfb, ++ 0x2c, 0xf0, 0xd6, 0x19, 0xf8, 0x48, 0xc3, 0x5c, 0x5a, 0x61, 0x41, 0x9a, 0x53, 0xcb, 0xa5, 0x19, 0x30, 0x97, 0x43, 0x83, 0x82, 0x8d, 0xad, 0x66, 0x7c, 0x4b, 0x89, 0x01, 0xf7, 0xdf, 0x68, 0xf4, ++ 0x9f, 0x7f, 0xa2, 0x06, 0x9f, 0x2a, 0xa5, 0xc7, 0xfd, 0xc8, 0x5d, 0x37, 0xd0, 0x66, 0x35, 0x65, 0x71, 0x1d, 0xd1, 0xc5, 0xe6, 0x53, 0x56, 0xdd, 0xfb, 0xe3, 0x4a, 0x67, 0x5c, 0x6f, 0x55, 0xa1, ++ 0x85, 0xcb, 0xec, 0x69, 0x74, 0x7d, 0x3f, 0x24, 0x8c, 0xc8, 0x1d, 0x1f, 0xb7, 0xd4, 0xbc, 0x6e, 0x3f, 0x78, 0x5a, 0xd0, 0x21, 0x70, 0x01, 0x7d, 0x2a, 0x98, 0x5c, 0x5c, 0xc9, 0xe1, 0x05, 0xcb, ++ 0x5d, 0xfb, 0x87, 0x86, 0xd4, 0x57, 0x80, 0x13, 0xe7, 0x93, 0xb0, 0xaf, 0x05, 0x75, 0x65, 0xb5, 0xfa, 0xa4, 0xf4, 0x1c, 0x3e, 0xa7, 0x10, 0xc0, 0x19, 0xf8, 0x7d, 0x7e, 0x39, 0xbb, 0xbc, 0x09, ++ 0x32, 0x01, 0xf7, 0x6e, 0xcb, 0x19, 0xb4, 0xe4, 0xbe, 0x14, 0x90, 0x86, 0x39, 0xe4, 0x46, 0xc3, 0xd1, 0xb1, 0x35, 0x04, 0x8b, 0x72, 0xd3, 0x86, 0x30, 0x93, 0x92, 0x1c, 0xe6, 0x0c, 0x51, 0xc7, ++ 0x08, 0x13, 0xf6, 0xe8, 0xf0, 0xb0, 0x69, 0x38, 0xb4, 0xaf, 0xa7, 0x96, 0xd1, 0x6f, 0xb6, 0x5f, 0x0c, 0x1b, 0xe6, 0xf2, 0x15, 0xa4, 0xe3, 0xf0, 0x84, 0x6f, 0xc3, 0x9b, 0xd6, 0xd2, 0xc3, 0x3b, ++ 0xca, 0xdf, 0xff, 0x2a, 0x9e, 0xcd, 0x96, 0x40, 0xdc, 0x3c, 0xbf, 0xee, 0x6f, 0x25, 0x1f, 0xc5, 0x3a, 0x53, 0x50, 0xbf, 0x1b, 0xbc, 0x12, 0xc9, 0x4b, 0x26, 0x3c, 0xd5, 0x89, 0xb5, 0x6a, 0xee, ++ 0x8a, 0xed, 0x89, 0x1d, 0x34, 0x2b, 0x76, 0xbd, 0x62, 0x15, 0xd9, 0x32, 0x11, 0xef, 0xed, 0x7c, 0x4a, 0x86, 0xba, 0xec, 0x77, 0xbb, 0xe1, 0x18, 0xca, 0xc7, 0x4d, 0xb9, 0xba, 0x42, 0x41, 0xf1, ++ 0x19, 0xfb, 0x7f, 0x11, 0x15, 0xdd, 0x0a, 0xea, 0x46, 0x5a, 0x83, 0xbf, 0xb0, 0x7d, 0x7f, 0x59, 0x5b, 0x66, 0xa7, 0xeb, 0x25, 0x7b, 0x39, 0x5e, 0x80, 0x45, 0x81, 0xc2, 0x58, 0x85, 0x4b, 0xf7, ++ 0x64, 0x3f, 0x2b, 0xbc, 0x4a, 0xc2, 0xd2, 0x11, 0x20, 0x70, 0xc3, 0xe6, 0x7b, 0xab, 0x0d, 0x40, 0x67, 0x59, 0xea, 0xe6, 0xeb, 0x90, 0xbe, 0x54, 0xef, 0x92, 0x27, 0xd4, 0xb1, 0x66, 0xad, 0x28, ++ 0x83, 0x42, 0x22, 0x68, 0x57, 0x65, 0x71, 0x18, 0x77, 0xa7, 0x82, 0x7b, 0x2b, 0xdb, 0xd7, 0xf5, 0xf8, 0xf2, 0x19, 0x92, 0x4a, 0xdd, 0x54, 0xcc, 0x30, 0x24, 0x92, 0x41, 0x82, 0xc5, 0x42, 0xc8, ++ 0x10, 0x11, 0x02, 0x1d, 0x85, 0x1b, 0x39, 0x72, 0x86, 0xf5, 0x21, 0x1c, 0x82, 0xde, 0xf9, 0xb5, 0x20, 0xf5, 0x64, 0x64, 0x80, 0x5a, 0xd6, 0x5d, 0xbd, 0x8c, 0x60, 0x39, 0xbe, 0x94, 0x86, 0xc0, ++ 0x72, 0xc0, 0x43, 0x08, 0x05, 0x13, 0x1b, 0xe1, 0xc1, 0xea, 0x43, 0xcc, 0x08, 0xe6, 0xbe, 0x9c, 0xeb, 0x94, 0xab, 0xeb, 0x48, 0xc8, 0xdd, 0x39, 0xa9, 0xde, 0x0b, 0xf0, 0xa3, 0x32, 0xcc, 0x25, ++ 0xef, 0x1b, 0x36, 0xa3, 0x6b, 0x06, 0xf8, 0x0d, 0x55, 0x9b, 0x46, 0xe2, 0x4d, 0x03, 0x02, 0xe8, 0x2b, 0x81, 0xf1, 0xad, 0xd4, 0x88, 0x49, 0xee, 0xd8, 0x7c, 0x3e, 0x3b, 0xee, 0x7a, 0xf5, 0xcb, ++ 0xcc, 0x96, 0x01, 0x7e, 0x32, 0xe8, 0xbe, 0x0c, 0x3e, 0xbc, 0x6f, 0x19, 0x87, 0x43, 0x58, 0xce, 0x70, 0xc8, 0x51, 0xad, 0xa6, 0xba, 0x86, 0x85, 0x39, 0x2c, 0x69, 0xb9, 0x06, 0x2c, 0xf7, 0x4d, ++ 0xb3, 0xc5, 0x3c, 0xbb, 0xe8, 0xe7, 0x78, 0x2b, 0xe7, 0x9e, 0x09, 0x10, 0x0d, 0xe3, 0x21, 0x1d, 0xf2, 0xa5, 0x72, 0x08, 0x31, 0x4b, 0x63, 0x2e, 0xd8, 0x79, 0x9e, 0x42, 0x26, 0xf7, 0xbd, 0x08, ++ 0x79, 0x02, 0xab, 0xfd, 0x1f, 0x3b, 0xe7, 0x29, 0xf8, 0x60, 0x85, 0x13, 0x32, 0x6f, 0x3f, 0x41, 0x42, 0xd5, 0xa9, 0xcf, 0x3c, 0x19, 0x61, 0x80, 0xa2, 0x3c, 0xbb, 0xbd, 0x37, 0xde, 0x01, 0xc6, ++ 0x06, 0x4a, 0x75, 0xcb, 0xac, 0x5d, 0xc7, 0x73, 0x15, 0x76, 0x36, 0x6f, 0x3c, 0x70, 0x6e, 0xc2, 0x9e, 0x0e, 0x15, 0xbe, 0xc3, 0x48, 0xa6, 0x07, 0xe2, 0xcf, 0xd4, 0x2a, 0x39, 0x2a, 0xf0, 0xe8, ++ 0xc4, 0x9d, 0x4b, 0x89, 0xce, 0x05, 0x79, 0xd1, 0x86, 0xf0, 0xc2, 0x2d, 0x84, 0xc5, 0x06, 0x6f, 0x1a, 0x3d, 0xf6, 0x0e, 0xed, 0x66, 0x3d, 0xfa, 0xf6, 0xa3, 0x5a, 0x74, 0x40, 0xd4, 0xc7, 0x68, ++ 0x53, 0xd7, 0x44, 0xfe, 0x18, 0x6d, 0x98, 0x9f, 0x27, 0x1f, 0x15, 0xc7, 0x0a, 0xd7, 0xa8, 0x60, 0x91, 0xb7, 0x78, 0x67, 0xdd, 0x2c, 0x4f, 0xe5, 0xe2, 0xad, 0x84, 0x3d, 0x7c, 0x99, 0xa6, 0x0b, ++ 0x70, 0x76, 0x8f, 0x38, 0x44, 0xf5, 0xcc, 0x35, 0x55, 0xf8, 0x19, 0x1b, 0x56, 0xc8, 0xb5, 0xc6, 0x2d, 0x54, 0xd3, 0xde, 0x7b, 0xed, 0x98, 0x01, 0x34, 0xf1, 0x51, 0xd7, 0xe2, 0xce, 0x98, 0x2f, ++ 0x19, 0x2c, 0x01, 0x08, 0x42, 0xbd, 0x4a, 0xb4, 0x40, 0xee, 0xe9, 0x83, 0x6e, 0x87, 0x2c, 0x8a, 0xef, 0x5e, 0x2b, 0x86, 0x57, 0x8b, 0x36, 0x8c, 0xde, 0x15, 0x96, 0x86, 0x14, 0xea, 0xde, 0xcc, ++ 0xed, 0xe7, 0x21, 0x79, 0xd4, 0xcc, 0x12, 0x72, 0xea, 0x35, 0xbb, 0x7c, 0xb0, 0x92, 0x50, 0x8c, 0x72, 0x2d, 0x6d, 0xb8, 0xe8, 0xcc, 0x9e, 0x52, 0xc0, 0xe7, 0x07, 0xe4, 0x4a, 0xa0, 0x23, 0x71, ++ 0x53, 0xae, 0x20, 0xde, 0x9d, 0x7e, 0xd5, 0x79, 0x80, 0xc1, 0xb8, 0x19, 0xf7, 0xb3, 0xa8, 0x59, 0x40, 0x2b, 0x1c, 0xdd, 0xfd, 0x0c, 0x49, 0x18, 0x4b, 0x9a, 0x12, 0x04, 0xa1, 0xd3, 0xdb, 0x63, ++ 0xff, 0x9d, 0x6a, 0xb7, 0x9b, 0x18, 0xcf, 0xed, 0x0b, 0xdb, 0x76, 0xcc, 0xaa, 0x24, 0xa3, 0xf7, 0xb6, 0xe7, 0x7c, 0xa7, 0x3d, 0x63, 0xf1, 0x5b, 0x2e, 0x98, 0x67, 0x65, 0xd8, 0x68, 0x55, 0xbc, ++ 0xef, 0x5d, 0x45, 0x3d, 0xea, 0xda, 0x48, 0xc3, 0x0f, 0x48, 0xbd, 0x33, 0xe8, 0xe1, 0x35, 0x11, 0x27, 0x98, 0xfe, 0xc7, 0x44, 0xea, 0xd8, 0x33, 0x8a, 0x77, 0x87, 0xfe, 0x59, 0xe3, 0xb9, 0x08, ++ 0x89, 0xed, 0x89, 0x63, 0x50, 0x9f, 0x68, 0x02, 0x0f, 0x43, 0x61, 0x92, 0xe9, 0x54, 0x41, 0x12, 0x7e, 0x03, 0xf7, 0x64, 0x32, 0x84, 0x54, 0x76, 0xff, 0x28, 0x4e, 0xe6, 0xf1, 0x62, 0x8c, 0x0f, ++ 0xec, 0x65, 0xeb, 0xbd, 0x9b, 0x48, 0xf2, 0x02, 0x5f, 0x14, 0x34, 0xe5, 0xa2, 0x23, 0x5f, 0x8f, 0xce, 0x87, 0x3d, 0x8c, 0xca, 0xef, 0x94, 0xc3, 0xba, 0xeb, 0x20, 0x0a, 0x08, 0x00, 0xa6, 0x0b, ++ 0x9b, 0x1f, 0xfe, 0x72, 0x78, 0xfd, 0x5a, 0x3a, 0xe3, 0x0c, 0x89, 0x34, 0x36, 0xc9, 0xaf, 0x57, 0xd7, 0xe0, 0xd6, 0x25, 0x80, 0xd4, 0x5f, 0x2d, 0xa7, 0x77, 0x0e, 0x49, 0x94, 0xa1, 0x03, 0x1e, ++ 0x7b, 0xa1, 0xf3, 0x3c, 0xaa, 0x2e, 0x20, 0xec, 0x83, 0x96, 0x60, 0x5f, 0xbd, 0x4c, 0x7b, 0x32, 0xa1, 0xd4, 0x60, 0xb8, 0x7b, 0xbd, 0xc1, 0x93, 0x46, 0x98, 0xe7, 0xf5, 0x71, 0xda, 0x56, 0x08, ++ 0xdc, 0x1d, 0xa5, 0x80, 0x54, 0xba, 0xa0, 0xb9, 0x83, 0xe0, 0x34, 0x84, 0xcf, 0xbc, 0x32, 0xd0, 0x1c, 0xca, 0x13, 0xbc, 0xf0, 0xca, 0x0c, 0xef, 0xb7, 0x48, 0x03, 0xb9, 0xfd, 0xbe, 0xca, 0x4c, ++ 0x70, 0x42, 0xb7, 0x28, 0xd2, 0xb7, 0xb3, 0xf4, 0x3c, 0x47, 0xb0, 0xa4, 0x2a, 0xd0, 0xc6, 0xd5, 0x26, 0x2b, 0xc3, 0x98, 0xe7, 0x16, 0x44, 0x8b, 0xb6, 0x8f, 0xae, 0x54, 0x2a, 0x0d, 0x5f, 0x46, ++ 0x82, 0x0b, 0xd7, 0x8a, 0x61, 0xc3, 0xe8, 0x33, 0xfd, 0x7b, 0xee, 0x3e, 0x39, 0x8f, 0x7c, 0x91, 0xb8, 0x9f, 0x89, 0xe5, 0xeb, 0x12, 0x29, 0x8e, 0xcc, 0x7b, 0xca, 0x64, 0xf9, 0x9f, 0x0a, 0x5f, ++ 0x48, 0xf5, 0x3f, 0x16, 0x77, 0xee, 0x13, 0xa1, 0xe1, 0xf3, 0x7c, 0x1a, 0x8d, 0xd2, 0x85, 0x58, 0x16, 0x45, 0x9b, 0x3f, 0x14, 0xa1, 0x0c, 0xae, 0x3d, 0x7f, 0x19, 0xe0, 0x41, 0x2a, 0xee, 0xa5, ++ 0x3b, 0x43, 0x05, 0xf0, 0xd0, 0x22, 0x88, 0x50, 0x60, 0xda, 0x5f, 0x2b, 0x46, 0x65, 0x2d, 0xe2, 0xf5, 0xaf, 0xa8, 0xbf, 0x7e, 0x6c, 0xe5, 0xa6, 0xe4, 0x04, 0x66, 0xc7, 0x92, 0xd3, 0x17, 0x50, ++ 0xad, 0x28, 0x40, 0x65, 0x1a, 0x44, 0x2b, 0x67, 0x35, 0x37, 0xa7, 0x6e, 0xf4, 0x5f, 0xa1, 0xd3, 0x8f, 0xf7, 0x7e, 0x47, 0x05, 0x21, 0x77, 0x39, 0x92, 0xd5, 0x69, 0x94, 0x12, 0x6e, 0xc9, 0xec, ++ 0x78, 0x04, 0x73, 0xa0, 0xfd, 0x5a, 0x7e, 0xc9, 0xf3, 0xcf, 0x78, 0x12, 0x56, 0xf4, 0xf1, 0xa9, 0x69, 0x30, 0x15, 0x22, 0x19, 0x3f, 0xd8, 0xcb, 0x8c, 0xcd, 0x5f, 0x94, 0x12, 0x4f, 0x2c, 0x39, ++ 0xca, 0xe4, 0x55, 0x74, 0x76, 0x1b, 0xd7, 0x6f, 0x64, 0x15, 0x39, 0x34, 0xbd, 0x22, 0x0b, 0x48, 0xfb, 0xd0, 0xfc, 0xb5, 0xd7, 0x39, 0x83, 0x3b, 0x20, 0x3d, 0x55, 0x43, 0x57, 0xc8, 0xb1, 0x91, ++ 0x9a, 0x46, 0xfd, 0x84, 0xfa, 0x39, 0x64, 0x3f, 0x5e, 0x05, 0x9e, 0xb7, 0x4d, 0x13, 0xf8, 0xb9, 0xd0, 0xe7, 0x73, 0x28, 0x5f, 0xe9, 0xdb, 0x5d, 0x98, 0x56, 0xc1, 0x4d, 0x76, 0xe2, 0x85, 0xcf, ++ 0xb7, 0xf1, 0xe0, 0x0c, 0xb2, 0x16, 0xcf, 0xda, 0xa9, 0x1f, 0x68, 0x44, 0xdc, 0x08, 0x13, 0xf3, 0xec, 0xb5, 0x36, 0x31, 0xb1, 0xcd, 0x94, 0x19, 0x4a, 0x69, 0x26, 0xb0, 0x1b, 0x35, 0xa3, 0x16, ++ 0x16, 0x9a, 0x67, 0x2b, 0xcb, 0x96, 0xf3, 0xd3, 0x50, 0x4c, 0xaa, 0xf4, 0xc0, 0x81, 0x32, 0xc1, 0x77, 0xfd, 0x47, 0x38, 0x51, 0x28, 0x23, 0x84, 0x91, 0x47, 0x19, 0x7c, 0x87, 0x3d, 0xf3, 0xc6, ++ 0xdd, 0x2a, 0xcb, 0xcc, 0xd2, 0x55, 0x7d, 0xd9, 0x64, 0x34, 0x4a, 0xa1, 0x15, 0xc9, 0x47, 0x2f, 0x38, 0xbd, 0x98, 0x96, 0x4a, 0x42, 0x26, 0xef, 0x91, 0x3b, 0x64, 0xb5, 0x40, 0x5d, 0xef, 0xca, ++ 0x1f, 0x00, 0x8c, 0xba, 0xce, 0xde, 0x3f, 0x63, 0x26, 0xbf, 0x43, 0x66, 0x3e, 0xdd, 0xb7, 0xe5, 0xfc, 0xca, 0x8e, 0xad, 0xa8, 0x86, 0xbc, 0x9d, 0xf4, 0x2e, 0xde, 0x4c, 0xc1, 0x42, 0x9c, 0xd7, ++ 0xff, 0x4c, 0x9e, 0xed, 0xb2, 0xa2, 0x10, 0xbc, 0x28, 0xae, 0x73, 0xd6, 0x23, 0x3f, 0x6f, 0x65, 0x70, 0x73, 0x9a, 0x0c, 0x53, 0x72, 0x6c, 0x32, 0xe2, 0xe9, 0x5f, 0xca, 0x8c, 0x34, 0xe3, 0x60, ++ 0x93, 0x72, 0x6a, 0x87, 0x01, 0x3a, 0x35, 0x12, 0xd8, 0x8e, 0xa9, 0x2a, 0x6b, 0x95, 0x7b, 0xf1, 0x0a, 0x6a, 0xee, 0x6e, 0x97, 0x6a, 0xbc, 0xc9, 0x5c, 0x14, 0xa8, 0xef, 0xe6, 0x0a, 0x2c, 0x1a, ++ 0xf0, 0xab, 0xbe, 0x6b, 0xf7, 0x89, 0xd4, 0xf6, 0x97, 0x38, 0x09, 0x2a, 0xe3, 0xe6, 0x2a, 0xf1, 0x77, 0x3e, 0xd6, 0xa4, 0x2f, 0x1a, 0xaa, 0xbc, 0xfb, 0x98, 0x73, 0x1c, 0xe2, 0x70, 0x1f, 0x42, ++ 0xe4, 0xba, 0x9e, 0x12, 0x8b, 0x67, 0x26, 0x1c, 0x59, 0x8d, 0x31, 0x89, 0xd0, 0x60, 0x24, 0xf0, 0x1e, 0x25, 0x35, 0x4d, 0x60, 0x32, 0x7f, 0xb6, 0x57, 0x0b, 0xf7, 0xe1, 0x63, 0xfa, 0x04, 0x32, ++ 0x4b, 0x32, 0xe7, 0xeb, 0xf8, 0xb7, 0x8a, 0xc2, 0xec, 0xfa, 0x3d, 0x36, 0xb1, 0x3a, 0x59, 0xa3, 0xa7, 0x27, 0x02, 0x9b, ++ }, ++ .spki_len = 1798, ++ .spki = { ++ 0x30, 0x82, 0x07, 0x02, 0x30, 0x0f, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0b, 0x01, 0x06, 0x05, 0x05, 0x00, 0x03, 0x82, 0x06, 0xed, 0x00, 0x30, 0x82, 0x06, 0xe8, 0x03, 0x21, ++ 0x00, 0x7c, 0x99, 0x35, 0xa0, 0xb0, 0x76, 0x94, 0xaa, 0x0c, 0x6d, 0x10, 0xe4, 0xdb, 0x6b, 0x1a, 0xdd, 0x2f, 0xd8, 0x1a, 0x25, 0xcc, 0xb1, 0x48, 0x03, 0x2d, 0xcd, 0x73, 0x99, 0x36, 0x73, 0x7f, ++ 0x2d, 0x03, 0x82, 0x06, 0xc1, 0x00, 0x68, 0x59, 0xf6, 0x4c, 0x66, 0x39, 0x16, 0x79, 0x5e, 0x9d, 0x42, 0xa6, 0x28, 0xf7, 0xa1, 0x1f, 0xb6, 0xca, 0xd6, 0xbe, 0x5a, 0x22, 0x92, 0x06, 0xf3, 0x8e, ++ 0xc3, 0xe8, 0x7e, 0x74, 0x87, 0xc6, 0x51, 0x27, 0x45, 0xfe, 0xd6, 0xd0, 0xb6, 0x4f, 0x60, 0x55, 0x07, 0xc0, 0x43, 0xe2, 0x5d, 0x10, 0x3d, 0x19, 0x67, 0x34, 0x93, 0x73, 0x04, 0x73, 0xcd, 0xc0, ++ 0xef, 0x78, 0x0a, 0x83, 0xf2, 0x3a, 0x5c, 0x6c, 0x38, 0x75, 0xbc, 0x10, 0xb6, 0xa0, 0x53, 0xb1, 0x3a, 0xad, 0x6f, 0xd7, 0xff, 0x1e, 0xcf, 0x8f, 0x72, 0x5f, 0x46, 0x01, 0x81, 0x46, 0x0c, 0x5c, ++ 0x75, 0xe0, 0x50, 0x52, 0xfe, 0xa0, 0xdb, 0xc4, 0x99, 0x2e, 0xe0, 0x43, 0x22, 0xbb, 0x21, 0xaf, 0x25, 0xd7, 0x84, 0xcb, 0xd4, 0x34, 0xdf, 0x2a, 0x87, 0xaa, 0x48, 0x6a, 0xe7, 0x05, 0x7f, 0xa0, ++ 0x42, 0x87, 0xda, 0x5f, 0xc0, 0xd0, 0x08, 0x8c, 0x16, 0x82, 0xe0, 0x9e, 0x47, 0xab, 0xf3, 0x08, 0x36, 0xc3, 0x82, 0x42, 0xc8, 0xa4, 0xba, 0x58, 0xfa, 0x4b, 0x7a, 0x17, 0x2d, 0x3b, 0x00, 0x32, ++ 0x51, 0x65, 0x63, 0xfe, 0x46, 0xb7, 0x2e, 0x49, 0xdf, 0xac, 0xd0, 0x03, 0x3e, 0x44, 0x4f, 0x5c, 0xef, 0x0f, 0xf4, 0x97, 0xd4, 0xd9, 0xd9, 0xe5, 0xb9, 0x88, 0x6f, 0x4b, 0x47, 0x29, 0x9d, 0x63, ++ 0x52, 0x41, 0xa6, 0xdc, 0xf0, 0x69, 0xf1, 0xed, 0x1c, 0x81, 0x5a, 0x51, 0xa6, 0xf7, 0xc7, 0x55, 0xd3, 0xfb, 0x2c, 0xf0, 0xd6, 0x19, 0xf8, 0x48, 0xc3, 0x5c, 0x5a, 0x61, 0x41, 0x9a, 0x53, 0xcb, ++ 0xa5, 0x19, 0x30, 0x97, 0x43, 0x83, 0x82, 0x8d, 0xad, 0x66, 0x7c, 0x4b, 0x89, 0x01, 0xf7, 0xdf, 0x68, 0xf4, 0x9f, 0x7f, 0xa2, 0x06, 0x9f, 0x2a, 0xa5, 0xc7, 0xfd, 0xc8, 0x5d, 0x37, 0xd0, 0x66, ++ 0x35, 0x65, 0x71, 0x1d, 0xd1, 0xc5, 0xe6, 0x53, 0x56, 0xdd, 0xfb, 0xe3, 0x4a, 0x67, 0x5c, 0x6f, 0x55, 0xa1, 0x85, 0xcb, 0xec, 0x69, 0x74, 0x7d, 0x3f, 0x24, 0x8c, 0xc8, 0x1d, 0x1f, 0xb7, 0xd4, ++ 0xbc, 0x6e, 0x3f, 0x78, 0x5a, 0xd0, 0x21, 0x70, 0x01, 0x7d, 0x2a, 0x98, 0x5c, 0x5c, 0xc9, 0xe1, 0x05, 0xcb, 0x5d, 0xfb, 0x87, 0x86, 0xd4, 0x57, 0x80, 0x13, 0xe7, 0x93, 0xb0, 0xaf, 0x05, 0x75, ++ 0x65, 0xb5, 0xfa, 0xa4, 0xf4, 0x1c, 0x3e, 0xa7, 0x10, 0xc0, 0x19, 0xf8, 0x7d, 0x7e, 0x39, 0xbb, 0xbc, 0x09, 0x32, 0x01, 0xf7, 0x6e, 0xcb, 0x19, 0xb4, 0xe4, 0xbe, 0x14, 0x90, 0x86, 0x39, 0xe4, ++ 0x46, 0xc3, 0xd1, 0xb1, 0x35, 0x04, 0x8b, 0x72, 0xd3, 0x86, 0x30, 0x93, 0x92, 0x1c, 0xe6, 0x0c, 0x51, 0xc7, 0x08, 0x13, 0xf6, 0xe8, 0xf0, 0xb0, 0x69, 0x38, 0xb4, 0xaf, 0xa7, 0x96, 0xd1, 0x6f, ++ 0xb6, 0x5f, 0x0c, 0x1b, 0xe6, 0xf2, 0x15, 0xa4, 0xe3, 0xf0, 0x84, 0x6f, 0xc3, 0x9b, 0xd6, 0xd2, 0xc3, 0x3b, 0xca, 0xdf, 0xff, 0x2a, 0x9e, 0xcd, 0x96, 0x40, 0xdc, 0x3c, 0xbf, 0xee, 0x6f, 0x25, ++ 0x1f, 0xc5, 0x3a, 0x53, 0x50, 0xbf, 0x1b, 0xbc, 0x12, 0xc9, 0x4b, 0x26, 0x3c, 0xd5, 0x89, 0xb5, 0x6a, 0xee, 0x8a, 0xed, 0x89, 0x1d, 0x34, 0x2b, 0x76, 0xbd, 0x62, 0x15, 0xd9, 0x32, 0x11, 0xef, ++ 0xed, 0x7c, 0x4a, 0x86, 0xba, 0xec, 0x77, 0xbb, 0xe1, 0x18, 0xca, 0xc7, 0x4d, 0xb9, 0xba, 0x42, 0x41, 0xf1, 0x19, 0xfb, 0x7f, 0x11, 0x15, 0xdd, 0x0a, 0xea, 0x46, 0x5a, 0x83, 0xbf, 0xb0, 0x7d, ++ 0x7f, 0x59, 0x5b, 0x66, 0xa7, 0xeb, 0x25, 0x7b, 0x39, 0x5e, 0x80, 0x45, 0x81, 0xc2, 0x58, 0x85, 0x4b, 0xf7, 0x64, 0x3f, 0x2b, 0xbc, 0x4a, 0xc2, 0xd2, 0x11, 0x20, 0x70, 0xc3, 0xe6, 0x7b, 0xab, ++ 0x0d, 0x40, 0x67, 0x59, 0xea, 0xe6, 0xeb, 0x90, 0xbe, 0x54, 0xef, 0x92, 0x27, 0xd4, 0xb1, 0x66, 0xad, 0x28, 0x83, 0x42, 0x22, 0x68, 0x57, 0x65, 0x71, 0x18, 0x77, 0xa7, 0x82, 0x7b, 0x2b, 0xdb, ++ 0xd7, 0xf5, 0xf8, 0xf2, 0x19, 0x92, 0x4a, 0xdd, 0x54, 0xcc, 0x30, 0x24, 0x92, 0x41, 0x82, 0xc5, 0x42, 0xc8, 0x10, 0x11, 0x02, 0x1d, 0x85, 0x1b, 0x39, 0x72, 0x86, 0xf5, 0x21, 0x1c, 0x82, 0xde, ++ 0xf9, 0xb5, 0x20, 0xf5, 0x64, 0x64, 0x80, 0x5a, 0xd6, 0x5d, 0xbd, 0x8c, 0x60, 0x39, 0xbe, 0x94, 0x86, 0xc0, 0x72, 0xc0, 0x43, 0x08, 0x05, 0x13, 0x1b, 0xe1, 0xc1, 0xea, 0x43, 0xcc, 0x08, 0xe6, ++ 0xbe, 0x9c, 0xeb, 0x94, 0xab, 0xeb, 0x48, 0xc8, 0xdd, 0x39, 0xa9, 0xde, 0x0b, 0xf0, 0xa3, 0x32, 0xcc, 0x25, 0xef, 0x1b, 0x36, 0xa3, 0x6b, 0x06, 0xf8, 0x0d, 0x55, 0x9b, 0x46, 0xe2, 0x4d, 0x03, ++ 0x02, 0xe8, 0x2b, 0x81, 0xf1, 0xad, 0xd4, 0x88, 0x49, 0xee, 0xd8, 0x7c, 0x3e, 0x3b, 0xee, 0x7a, 0xf5, 0xcb, 0xcc, 0x96, 0x01, 0x7e, 0x32, 0xe8, 0xbe, 0x0c, 0x3e, 0xbc, 0x6f, 0x19, 0x87, 0x43, ++ 0x58, 0xce, 0x70, 0xc8, 0x51, 0xad, 0xa6, 0xba, 0x86, 0x85, 0x39, 0x2c, 0x69, 0xb9, 0x06, 0x2c, 0xf7, 0x4d, 0xb3, 0xc5, 0x3c, 0xbb, 0xe8, 0xe7, 0x78, 0x2b, 0xe7, 0x9e, 0x09, 0x10, 0x0d, 0xe3, ++ 0x21, 0x1d, 0xf2, 0xa5, 0x72, 0x08, 0x31, 0x4b, 0x63, 0x2e, 0xd8, 0x79, 0x9e, 0x42, 0x26, 0xf7, 0xbd, 0x08, 0x79, 0x02, 0xab, 0xfd, 0x1f, 0x3b, 0xe7, 0x29, 0xf8, 0x60, 0x85, 0x13, 0x32, 0x6f, ++ 0x3f, 0x41, 0x42, 0xd5, 0xa9, 0xcf, 0x3c, 0x19, 0x61, 0x80, 0xa2, 0x3c, 0xbb, 0xbd, 0x37, 0xde, 0x01, 0xc6, 0x06, 0x4a, 0x75, 0xcb, 0xac, 0x5d, 0xc7, 0x73, 0x15, 0x76, 0x36, 0x6f, 0x3c, 0x70, ++ 0x6e, 0xc2, 0x9e, 0x0e, 0x15, 0xbe, 0xc3, 0x48, 0xa6, 0x07, 0xe2, 0xcf, 0xd4, 0x2a, 0x39, 0x2a, 0xf0, 0xe8, 0xc4, 0x9d, 0x4b, 0x89, 0xce, 0x05, 0x79, 0xd1, 0x86, 0xf0, 0xc2, 0x2d, 0x84, 0xc5, ++ 0x06, 0x6f, 0x1a, 0x3d, 0xf6, 0x0e, 0xed, 0x66, 0x3d, 0xfa, 0xf6, 0xa3, 0x5a, 0x74, 0x40, 0xd4, 0xc7, 0x68, 0x53, 0xd7, 0x44, 0xfe, 0x18, 0x6d, 0x98, 0x9f, 0x27, 0x1f, 0x15, 0xc7, 0x0a, 0xd7, ++ 0xa8, 0x60, 0x91, 0xb7, 0x78, 0x67, 0xdd, 0x2c, 0x4f, 0xe5, 0xe2, 0xad, 0x84, 0x3d, 0x7c, 0x99, 0xa6, 0x0b, 0x70, 0x76, 0x8f, 0x38, 0x44, 0xf5, 0xcc, 0x35, 0x55, 0xf8, 0x19, 0x1b, 0x56, 0xc8, ++ 0xb5, 0xc6, 0x2d, 0x54, 0xd3, 0xde, 0x7b, 0xed, 0x98, 0x01, 0x34, 0xf1, 0x51, 0xd7, 0xe2, 0xce, 0x98, 0x2f, 0x19, 0x2c, 0x01, 0x08, 0x42, 0xbd, 0x4a, 0xb4, 0x40, 0xee, 0xe9, 0x83, 0x6e, 0x87, ++ 0x2c, 0x8a, 0xef, 0x5e, 0x2b, 0x86, 0x57, 0x8b, 0x36, 0x8c, 0xde, 0x15, 0x96, 0x86, 0x14, 0xea, 0xde, 0xcc, 0xed, 0xe7, 0x21, 0x79, 0xd4, 0xcc, 0x12, 0x72, 0xea, 0x35, 0xbb, 0x7c, 0xb0, 0x92, ++ 0x50, 0x8c, 0x72, 0x2d, 0x6d, 0xb8, 0xe8, 0xcc, 0x9e, 0x52, 0xc0, 0xe7, 0x07, 0xe4, 0x4a, 0xa0, 0x23, 0x71, 0x53, 0xae, 0x20, 0xde, 0x9d, 0x7e, 0xd5, 0x79, 0x80, 0xc1, 0xb8, 0x19, 0xf7, 0xb3, ++ 0xa8, 0x59, 0x40, 0x2b, 0x1c, 0xdd, 0xfd, 0x0c, 0x49, 0x18, 0x4b, 0x9a, 0x12, 0x04, 0xa1, 0xd3, 0xdb, 0x63, 0xff, 0x9d, 0x6a, 0xb7, 0x9b, 0x18, 0xcf, 0xed, 0x0b, 0xdb, 0x76, 0xcc, 0xaa, 0x24, ++ 0xa3, 0xf7, 0xb6, 0xe7, 0x7c, 0xa7, 0x3d, 0x63, 0xf1, 0x5b, 0x2e, 0x98, 0x67, 0x65, 0xd8, 0x68, 0x55, 0xbc, 0xef, 0x5d, 0x45, 0x3d, 0xea, 0xda, 0x48, 0xc3, 0x0f, 0x48, 0xbd, 0x33, 0xe8, 0xe1, ++ 0x35, 0x11, 0x27, 0x98, 0xfe, 0xc7, 0x44, 0xea, 0xd8, 0x33, 0x8a, 0x77, 0x87, 0xfe, 0x59, 0xe3, 0xb9, 0x08, 0x89, 0xed, 0x89, 0x63, 0x50, 0x9f, 0x68, 0x02, 0x0f, 0x43, 0x61, 0x92, 0xe9, 0x54, ++ 0x41, 0x12, 0x7e, 0x03, 0xf7, 0x64, 0x32, 0x84, 0x54, 0x76, 0xff, 0x28, 0x4e, 0xe6, 0xf1, 0x62, 0x8c, 0x0f, 0xec, 0x65, 0xeb, 0xbd, 0x9b, 0x48, 0xf2, 0x02, 0x5f, 0x14, 0x34, 0xe5, 0xa2, 0x23, ++ 0x5f, 0x8f, 0xce, 0x87, 0x3d, 0x8c, 0xca, 0xef, 0x94, 0xc3, 0xba, 0xeb, 0x20, 0x0a, 0x08, 0x00, 0xa6, 0x0b, 0x9b, 0x1f, 0xfe, 0x72, 0x78, 0xfd, 0x5a, 0x3a, 0xe3, 0x0c, 0x89, 0x34, 0x36, 0xc9, ++ 0xaf, 0x57, 0xd7, 0xe0, 0xd6, 0x25, 0x80, 0xd4, 0x5f, 0x2d, 0xa7, 0x77, 0x0e, 0x49, 0x94, 0xa1, 0x03, 0x1e, 0x7b, 0xa1, 0xf3, 0x3c, 0xaa, 0x2e, 0x20, 0xec, 0x83, 0x96, 0x60, 0x5f, 0xbd, 0x4c, ++ 0x7b, 0x32, 0xa1, 0xd4, 0x60, 0xb8, 0x7b, 0xbd, 0xc1, 0x93, 0x46, 0x98, 0xe7, 0xf5, 0x71, 0xda, 0x56, 0x08, 0xdc, 0x1d, 0xa5, 0x80, 0x54, 0xba, 0xa0, 0xb9, 0x83, 0xe0, 0x34, 0x84, 0xcf, 0xbc, ++ 0x32, 0xd0, 0x1c, 0xca, 0x13, 0xbc, 0xf0, 0xca, 0x0c, 0xef, 0xb7, 0x48, 0x03, 0xb9, 0xfd, 0xbe, 0xca, 0x4c, 0x70, 0x42, 0xb7, 0x28, 0xd2, 0xb7, 0xb3, 0xf4, 0x3c, 0x47, 0xb0, 0xa4, 0x2a, 0xd0, ++ 0xc6, 0xd5, 0x26, 0x2b, 0xc3, 0x98, 0xe7, 0x16, 0x44, 0x8b, 0xb6, 0x8f, 0xae, 0x54, 0x2a, 0x0d, 0x5f, 0x46, 0x82, 0x0b, 0xd7, 0x8a, 0x61, 0xc3, 0xe8, 0x33, 0xfd, 0x7b, 0xee, 0x3e, 0x39, 0x8f, ++ 0x7c, 0x91, 0xb8, 0x9f, 0x89, 0xe5, 0xeb, 0x12, 0x29, 0x8e, 0xcc, 0x7b, 0xca, 0x64, 0xf9, 0x9f, 0x0a, 0x5f, 0x48, 0xf5, 0x3f, 0x16, 0x77, 0xee, 0x13, 0xa1, 0xe1, 0xf3, 0x7c, 0x1a, 0x8d, 0xd2, ++ 0x85, 0x58, 0x16, 0x45, 0x9b, 0x3f, 0x14, 0xa1, 0x0c, 0xae, 0x3d, 0x7f, 0x19, 0xe0, 0x41, 0x2a, 0xee, 0xa5, 0x3b, 0x43, 0x05, 0xf0, 0xd0, 0x22, 0x88, 0x50, 0x60, 0xda, 0x5f, 0x2b, 0x46, 0x65, ++ 0x2d, 0xe2, 0xf5, 0xaf, 0xa8, 0xbf, 0x7e, 0x6c, 0xe5, 0xa6, 0xe4, 0x04, 0x66, 0xc7, 0x92, 0xd3, 0x17, 0x50, 0xad, 0x28, 0x40, 0x65, 0x1a, 0x44, 0x2b, 0x67, 0x35, 0x37, 0xa7, 0x6e, 0xf4, 0x5f, ++ 0xa1, 0xd3, 0x8f, 0xf7, 0x7e, 0x47, 0x05, 0x21, 0x77, 0x39, 0x92, 0xd5, 0x69, 0x94, 0x12, 0x6e, 0xc9, 0xec, 0x78, 0x04, 0x73, 0xa0, 0xfd, 0x5a, 0x7e, 0xc9, 0xf3, 0xcf, 0x78, 0x12, 0x56, 0xf4, ++ 0xf1, 0xa9, 0x69, 0x30, 0x15, 0x22, 0x19, 0x3f, 0xd8, 0xcb, 0x8c, 0xcd, 0x5f, 0x94, 0x12, 0x4f, 0x2c, 0x39, 0xca, 0xe4, 0x55, 0x74, 0x76, 0x1b, 0xd7, 0x6f, 0x64, 0x15, 0x39, 0x34, 0xbd, 0x22, ++ 0x0b, 0x48, 0xfb, 0xd0, 0xfc, 0xb5, 0xd7, 0x39, 0x83, 0x3b, 0x20, 0x3d, 0x55, 0x43, 0x57, 0xc8, 0xb1, 0x91, 0x9a, 0x46, 0xfd, 0x84, 0xfa, 0x39, 0x64, 0x3f, 0x5e, 0x05, 0x9e, 0xb7, 0x4d, 0x13, ++ 0xf8, 0xb9, 0xd0, 0xe7, 0x73, 0x28, 0x5f, 0xe9, 0xdb, 0x5d, 0x98, 0x56, 0xc1, 0x4d, 0x76, 0xe2, 0x85, 0xcf, 0xb7, 0xf1, 0xe0, 0x0c, 0xb2, 0x16, 0xcf, 0xda, 0xa9, 0x1f, 0x68, 0x44, 0xdc, 0x08, ++ 0x13, 0xf3, 0xec, 0xb5, 0x36, 0x31, 0xb1, 0xcd, 0x94, 0x19, 0x4a, 0x69, 0x26, 0xb0, 0x1b, 0x35, 0xa3, 0x16, 0x16, 0x9a, 0x67, 0x2b, 0xcb, 0x96, 0xf3, 0xd3, 0x50, 0x4c, 0xaa, 0xf4, 0xc0, 0x81, ++ 0x32, 0xc1, 0x77, 0xfd, 0x47, 0x38, 0x51, 0x28, 0x23, 0x84, 0x91, 0x47, 0x19, 0x7c, 0x87, 0x3d, 0xf3, 0xc6, 0xdd, 0x2a, 0xcb, 0xcc, 0xd2, 0x55, 0x7d, 0xd9, 0x64, 0x34, 0x4a, 0xa1, 0x15, 0xc9, ++ 0x47, 0x2f, 0x38, 0xbd, 0x98, 0x96, 0x4a, 0x42, 0x26, 0xef, 0x91, 0x3b, 0x64, 0xb5, 0x40, 0x5d, 0xef, 0xca, 0x1f, 0x00, 0x8c, 0xba, 0xce, 0xde, 0x3f, 0x63, 0x26, 0xbf, 0x43, 0x66, 0x3e, 0xdd, ++ 0xb7, 0xe5, 0xfc, 0xca, 0x8e, 0xad, 0xa8, 0x86, 0xbc, 0x9d, 0xf4, 0x2e, 0xde, 0x4c, 0xc1, 0x42, 0x9c, 0xd7, 0xff, 0x4c, 0x9e, 0xed, 0xb2, 0xa2, 0x10, 0xbc, 0x28, 0xae, 0x73, 0xd6, 0x23, 0x3f, ++ 0x6f, 0x65, 0x70, 0x73, 0x9a, 0x0c, 0x53, 0x72, 0x6c, 0x32, 0xe2, 0xe9, 0x5f, 0xca, 0x8c, 0x34, 0xe3, 0x60, 0x93, 0x72, 0x6a, 0x87, 0x01, 0x3a, 0x35, 0x12, 0xd8, 0x8e, 0xa9, 0x2a, 0x6b, 0x95, ++ 0x7b, 0xf1, 0x0a, 0x6a, 0xee, 0x6e, 0x97, 0x6a, 0xbc, 0xc9, 0x5c, 0x14, 0xa8, 0xef, 0xe6, 0x0a, 0x2c, 0x1a, 0xf0, 0xab, 0xbe, 0x6b, 0xf7, 0x89, 0xd4, 0xf6, 0x97, 0x38, 0x09, 0x2a, 0xe3, 0xe6, ++ 0x2a, 0xf1, 0x77, 0x3e, 0xd6, 0xa4, 0x2f, 0x1a, 0xaa, 0xbc, 0xfb, 0x98, 0x73, 0x1c, 0xe2, 0x70, 0x1f, 0x42, 0xe4, 0xba, 0x9e, 0x12, 0x8b, 0x67, 0x26, 0x1c, 0x59, 0x8d, 0x31, 0x89, 0xd0, 0x60, ++ 0x24, 0xf0, 0x1e, 0x25, 0x35, 0x4d, 0x60, 0x32, 0x7f, 0xb6, 0x57, 0x0b, 0xf7, 0xe1, 0x63, 0xfa, 0x04, 0x32, 0x4b, 0x32, 0xe7, 0xeb, 0xf8, 0xb7, 0x8a, 0xc2, 0xec, 0xfa, 0x3d, 0x36, 0xb1, 0x3a, ++ 0x59, 0xa3, 0xa7, 0x27, 0x02, 0x9b ++ }, ++ .msg_len = 33, ++ .msg = { 0xD8, 0x1C, 0x4D, 0x8D, 0x73, 0x4F, 0xCB, 0xFB, 0xEA, 0xDE, 0x3D, 0x3F, 0x8A, 0x03, 0x9F, 0xAA, 0x2A, 0x2C, 0x99, 0x57, 0xE8, 0x35, 0xAD, 0x55, 0xB2, 0x2E, 0x75, 0xBF, 0x57, 0xBB, 0x55, 0x6A, ++ 0xC8 }, ++ .sig_len = 3366, ++ .sig = { ++ 0xD7, 0x87, 0x58, 0xC8, 0x99, 0x2B, 0x2D, 0x0F, 0xC5, 0x1A, 0x03, 0xD7, 0x6B, 0x07, 0x17, 0x96, 0xF9, 0x15, 0xD6, 0xB2, 0x41, 0x5F, 0x61, 0x07, 0x58, 0xD1, 0x88, 0xAC, 0x94, 0x04, 0x8C, 0x53, ++ 0x0D, 0x81, 0xB2, 0xC1, 0xBC, 0x7B, 0x95, 0x19, 0xB3, 0xEB, 0x4F, 0x0C, 0xFA, 0x97, 0xDA, 0x66, 0xB8, 0xD1, 0x44, 0x70, 0x71, 0x1D, 0x1A, 0x85, 0x1A, 0x52, 0xB3, 0x72, 0xC2, 0xBE, 0xB4, 0xA3, ++ 0xFE, 0xA3, 0x3A, 0x29, 0x3B, 0xC1, 0x83, 0x47, 0xD1, 0x51, 0x47, 0x7D, 0x19, 0x7B, 0xD9, 0x39, 0x7A, 0xB2, 0x74, 0x1A, 0xA6, 0x5E, 0x37, 0xC1, 0x72, 0xEF, 0x29, 0xDD, 0xA2, 0x70, 0x0E, 0xCF, ++ 0xB9, 0xDF, 0x47, 0x8F, 0xF9, 0x4C, 0xAC, 0x21, 0x6B, 0xDD, 0xD6, 0x7E, 0x2A, 0x52, 0xA2, 0x83, 0x31, 0x2A, 0x2B, 0x09, 0x92, 0x7B, 0xA1, 0x73, 0x7F, 0xBD, 0xEC, 0x13, 0x85, 0x97, 0x83, 0x71, ++ 0xA1, 0xA1, 0x99, 0x54, 0x3B, 0x8B, 0x36, 0x91, 0x10, 0xEB, 0xE2, 0xB6, 0xDF, 0x44, 0x1A, 0xEE, 0x27, 0xB5, 0x20, 0x7C, 0xDD, 0x3A, 0xF2, 0xF7, 0x71, 0x09, 0xF2, 0xA3, 0xDB, 0x89, 0xD3, 0x00, ++ 0xE2, 0x7D, 0x9A, 0x48, 0x47, 0x33, 0xF6, 0x08, 0x5D, 0x21, 0xA3, 0xC4, 0xD7, 0xD2, 0x7F, 0x24, 0x37, 0x89, 0xFE, 0xBE, 0x36, 0x1D, 0xE4, 0x82, 0x9C, 0x20, 0x44, 0x1C, 0xD1, 0x93, 0x8E, 0xD9, ++ 0xF2, 0x83, 0xAC, 0x3C, 0x9A, 0x2D, 0x1F, 0xE8, 0xFE, 0x60, 0x55, 0xED, 0x3C, 0x51, 0x1C, 0x83, 0x07, 0x41, 0x1B, 0x65, 0xDE, 0xCD, 0xFC, 0x6D, 0xDF, 0xB5, 0xEB, 0x0E, 0x1B, 0xDF, 0xC7, 0x0A, ++ 0xD9, 0x09, 0xEB, 0x11, 0xB3, 0x89, 0x7D, 0xF7, 0x0E, 0x40, 0x65, 0x6E, 0x8D, 0x86, 0x9C, 0x24, 0xC4, 0x39, 0x31, 0x53, 0xF3, 0x8C, 0x7F, 0x58, 0x51, 0xEF, 0xDB, 0x40, 0xD8, 0x02, 0x3F, 0x6D, ++ 0x37, 0x51, 0x8F, 0xBA, 0xFE, 0x34, 0x44, 0xA8, 0x84, 0xD6, 0xD7, 0x6E, 0x8E, 0x99, 0x54, 0x22, 0xA2, 0x8C, 0xA1, 0x3C, 0x22, 0x32, 0x00, 0xF3, 0xB5, 0x1D, 0xD4, 0xA0, 0x62, 0x34, 0xA6, 0x9F, ++ 0xAB, 0x90, 0xF3, 0x38, 0x0A, 0x12, 0x5A, 0x63, 0x24, 0x59, 0xE4, 0x89, 0xD9, 0x21, 0x4E, 0x83, 0x7A, 0x16, 0xA8, 0x2D, 0x5F, 0x28, 0x9D, 0xD6, 0x00, 0x06, 0x03, 0x4A, 0xD2, 0xC2, 0xA8, 0x2C, ++ 0x7E, 0x68, 0x4E, 0xCE, 0xD1, 0x58, 0x4E, 0x95, 0xE6, 0x62, 0x55, 0x07, 0xB1, 0xA6, 0x59, 0xC0, 0xB3, 0x46, 0x3B, 0x9A, 0x11, 0xBB, 0x7C, 0x0A, 0xB6, 0x04, 0x33, 0xA7, 0x85, 0xC9, 0xCC, 0xB7, ++ 0x94, 0x1D, 0xEA, 0xCB, 0x0B, 0xEB, 0x51, 0x0B, 0x39, 0x50, 0x0A, 0x4C, 0x6E, 0x36, 0xDF, 0x96, 0x4C, 0x82, 0x36, 0x48, 0x1E, 0x73, 0xBD, 0x56, 0x42, 0xCB, 0x10, 0x12, 0xDD, 0x5E, 0x91, 0xD2, ++ 0xDA, 0x28, 0xBD, 0x29, 0x30, 0x58, 0xB8, 0xC4, 0x9E, 0x81, 0x68, 0xAA, 0x9F, 0x16, 0xEA, 0x45, 0x93, 0x87, 0x31, 0x4C, 0xB6, 0x16, 0x65, 0xCA, 0x62, 0x1D, 0x42, 0xD6, 0x82, 0xA3, 0x48, 0x93, ++ 0x23, 0xF4, 0x72, 0x84, 0x4B, 0xE5, 0xEB, 0x6D, 0xD1, 0x7A, 0x0B, 0xE4, 0xA1, 0x18, 0x1B, 0x55, 0x57, 0xB3, 0xB4, 0x2F, 0x90, 0x20, 0xDC, 0x3A, 0x7D, 0x1E, 0x55, 0x0C, 0x85, 0xB1, 0xB2, 0xA8, ++ 0x5F, 0x02, 0x31, 0x2C, 0x01, 0x03, 0xBA, 0x75, 0xB7, 0x09, 0x2C, 0xC1, 0x3A, 0x9C, 0xA6, 0x8A, 0x7B, 0x56, 0xA5, 0x58, 0x28, 0xFD, 0x70, 0x35, 0x64, 0x81, 0xD4, 0xBA, 0x15, 0x6B, 0xAF, 0xFC, ++ 0xE3, 0xEA, 0x26, 0xC5, 0x91, 0x48, 0x82, 0xF5, 0x5A, 0xB3, 0xFA, 0x73, 0xB4, 0xBF, 0x18, 0x33, 0x0D, 0xB5, 0x48, 0x20, 0x0D, 0x7D, 0xFE, 0x0F, 0xE7, 0xE8, 0x4F, 0xBE, 0x50, 0xB9, 0x9B, 0x37, ++ 0xEA, 0xBE, 0x32, 0x50, 0xB9, 0x45, 0x8A, 0xBB, 0xA6, 0x01, 0x9E, 0xA5, 0x4A, 0x49, 0x19, 0x0D, 0xCA, 0x0B, 0x62, 0x7C, 0x3D, 0x4F, 0xE4, 0x43, 0xCE, 0xFD, 0x85, 0x28, 0xE4, 0x93, 0xAA, 0xBF, ++ 0xF8, 0x49, 0x32, 0x67, 0x58, 0x1F, 0xEC, 0xF8, 0x02, 0x74, 0xBE, 0xE4, 0xDC, 0x5B, 0xDF, 0x95, 0x4F, 0xB0, 0x3E, 0xA8, 0xF0, 0x96, 0x3F, 0xED, 0xA3, 0xD1, 0xA1, 0xAE, 0xAE, 0x11, 0x5F, 0xA2, ++ 0x97, 0x57, 0x6A, 0x12, 0xF9, 0xF2, 0x39, 0x0C, 0x9C, 0xAB, 0x86, 0x9B, 0x22, 0x54, 0x37, 0x64, 0x23, 0x60, 0x72, 0x4F, 0x3F, 0x0A, 0x9F, 0x71, 0x97, 0x9A, 0xE4, 0xE3, 0x03, 0x1E, 0x83, 0xB2, ++ 0x76, 0x52, 0x63, 0xF4, 0x91, 0x40, 0x0E, 0x9B, 0x90, 0x88, 0x54, 0xB9, 0x16, 0xA1, 0x2F, 0x67, 0x46, 0x5A, 0x46, 0x01, 0xF4, 0x93, 0x2F, 0xA7, 0x11, 0xF1, 0xB0, 0x97, 0xC1, 0x3B, 0x88, 0x6E, ++ 0x0D, 0xDE, 0xD9, 0xE7, 0xAA, 0xEE, 0x74, 0xFA, 0xDC, 0xDD, 0xF3, 0x8D, 0x61, 0x06, 0x49, 0x55, 0x5E, 0x7A, 0x13, 0xA4, 0xDD, 0x02, 0x84, 0x70, 0x3A, 0x6D, 0x14, 0x7F, 0xDC, 0xE8, 0x6F, 0xC1, ++ 0xF3, 0x5D, 0xD7, 0x0D, 0xF9, 0xB6, 0x9B, 0xB4, 0xC3, 0xA0, 0x76, 0xBF, 0xA4, 0x6B, 0x05, 0x74, 0x3D, 0xE6, 0x3D, 0xB3, 0x37, 0xD2, 0x0C, 0x14, 0x3C, 0x64, 0x7B, 0x86, 0xCF, 0x8F, 0xF2, 0xE2, ++ 0x26, 0x7C, 0xC9, 0x5E, 0x0A, 0xC5, 0x57, 0x5D, 0xEF, 0xCD, 0xD2, 0xA5, 0x69, 0x2E, 0xB8, 0x84, 0x50, 0xB3, 0x49, 0x87, 0x78, 0xCA, 0x1F, 0x48, 0xFA, 0x2A, 0x59, 0x03, 0x21, 0xD5, 0x7B, 0x76, ++ 0xD5, 0x3C, 0x2A, 0x11, 0x29, 0xA3, 0xF2, 0x0B, 0x42, 0xB3, 0xDD, 0xC7, 0xB5, 0xDC, 0x5F, 0xFC, 0xB4, 0xC5, 0xEE, 0xE0, 0xE3, 0xDD, 0x62, 0x9E, 0x38, 0x1C, 0xE8, 0xA9, 0x5A, 0x65, 0xD8, 0xC5, ++ 0xAD, 0x29, 0xE7, 0x86, 0xDA, 0xA5, 0x8E, 0xA2, 0xC1, 0x29, 0x05, 0xEA, 0xD9, 0xC1, 0x04, 0x06, 0xEC, 0x50, 0xE9, 0xEB, 0x9F, 0xB3, 0x68, 0x2F, 0x1C, 0x33, 0xAD, 0x48, 0x73, 0x0C, 0xDB, 0x6D, ++ 0x47, 0x73, 0xDE, 0xFE, 0x7D, 0x07, 0xD3, 0xC9, 0xAC, 0xF7, 0xB4, 0x0F, 0x0E, 0x3D, 0x57, 0x2C, 0x0A, 0x10, 0x2D, 0x28, 0xB5, 0x2D, 0xBE, 0xBB, 0xAF, 0x40, 0x3A, 0x25, 0x41, 0x19, 0x64, 0xF3, ++ 0x55, 0x52, 0xB0, 0xDA, 0x42, 0x80, 0xEA, 0x60, 0xA6, 0x8C, 0x29, 0xA3, 0x1F, 0xD4, 0x99, 0xFF, 0x48, 0x98, 0x7B, 0xD8, 0x32, 0x8E, 0x84, 0x3D, 0xEB, 0xEA, 0x22, 0x21, 0x9B, 0xAB, 0x08, 0x07, ++ 0xD1, 0x4F, 0x78, 0x34, 0x60, 0x84, 0x70, 0x34, 0xF4, 0xAC, 0x38, 0x81, 0xCA, 0x7C, 0xA6, 0x74, 0xD4, 0x49, 0x98, 0xE0, 0xAC, 0x04, 0xE9, 0x04, 0x2A, 0xAA, 0x1F, 0xA6, 0x74, 0x49, 0x5F, 0xA0, ++ 0x8B, 0x0D, 0x43, 0xE0, 0x35, 0xCD, 0x6F, 0x18, 0x98, 0x1D, 0x7B, 0x96, 0xBE, 0x61, 0x7C, 0x2F, 0xFF, 0x3F, 0x3B, 0x77, 0x50, 0x74, 0x94, 0x60, 0xA4, 0xBA, 0x17, 0x52, 0xFB, 0x71, 0x37, 0x5B, ++ 0x10, 0xD9, 0xBE, 0xA5, 0x5B, 0xBE, 0x86, 0xAD, 0x9D, 0x9D, 0xE2, 0x54, 0xDB, 0x42, 0xD7, 0x68, 0x38, 0xFA, 0x81, 0x3A, 0x4D, 0x76, 0x5D, 0x1A, 0x6F, 0x29, 0x02, 0x4D, 0xFC, 0xA6, 0x13, 0xF6, ++ 0x18, 0xBA, 0x26, 0x3E, 0x97, 0xDB, 0xD0, 0xF4, 0x72, 0xFA, 0x5C, 0x01, 0x14, 0xBE, 0x0E, 0x57, 0xBA, 0x50, 0x58, 0x6D, 0xB3, 0x1B, 0x68, 0x58, 0xA6, 0x26, 0x1E, 0x11, 0xEB, 0x08, 0xAE, 0x66, ++ 0xEC, 0x3B, 0xF9, 0x70, 0x07, 0xD6, 0x0B, 0x37, 0x31, 0xA1, 0x3A, 0x60, 0xE6, 0xBA, 0xB1, 0x49, 0xC1, 0xFD, 0x1F, 0xD6, 0x60, 0xBB, 0x11, 0x3C, 0x50, 0x2E, 0xCF, 0x67, 0x65, 0x3D, 0xB1, 0xE2, ++ 0x80, 0xEB, 0xCB, 0x15, 0x22, 0x1C, 0xED, 0x2C, 0x2E, 0xCF, 0x94, 0xC2, 0x29, 0xAD, 0x50, 0x39, 0x4D, 0xD7, 0xCC, 0xFC, 0xE9, 0xB1, 0xF6, 0x40, 0x2D, 0x49, 0xB7, 0xAF, 0xE3, 0x7E, 0xF3, 0x27, ++ 0x0B, 0x19, 0xA7, 0x28, 0xD4, 0x5B, 0xE7, 0xDB, 0x71, 0x6C, 0x86, 0xA6, 0x84, 0x3F, 0xB9, 0x64, 0xFD, 0xEB, 0xD7, 0xA6, 0xFE, 0x30, 0xE8, 0xF3, 0x0F, 0x1F, 0x3A, 0x79, 0x31, 0xF6, 0x85, 0x29, ++ 0xC0, 0xCE, 0x9B, 0xA4, 0x75, 0x02, 0x32, 0xE0, 0x52, 0xFE, 0x8B, 0x61, 0x22, 0x1A, 0xED, 0x89, 0x0B, 0xF4, 0x9D, 0x15, 0xBD, 0xA3, 0x36, 0x8F, 0x09, 0x6A, 0x9E, 0x08, 0x8F, 0x94, 0x75, 0xD5, ++ 0x40, 0x3C, 0xCD, 0x26, 0x7B, 0x9C, 0x5B, 0xE5, 0x2A, 0x54, 0xBA, 0x81, 0x8B, 0xC6, 0xD9, 0x9B, 0x4D, 0x38, 0x3F, 0x1A, 0xDB, 0x58, 0x89, 0xCC, 0xBD, 0x29, 0xE2, 0x26, 0x8C, 0x35, 0x26, 0xE5, ++ 0x85, 0x31, 0x95, 0xDE, 0x86, 0x11, 0x9F, 0x21, 0x76, 0xEF, 0x1A, 0x25, 0x90, 0x6E, 0x8E, 0x74, 0xB0, 0x46, 0xE6, 0xFA, 0x42, 0xB4, 0x66, 0xBA, 0x0D, 0x5B, 0x21, 0x7C, 0x14, 0x74, 0xF6, 0x75, ++ 0x6C, 0x8F, 0x87, 0x44, 0x69, 0xCD, 0x9F, 0x1D, 0x41, 0x15, 0x1B, 0xAC, 0x70, 0x62, 0x08, 0x84, 0xD3, 0x35, 0x4F, 0x22, 0xF7, 0x44, 0x14, 0x53, 0x59, 0x0A, 0x6B, 0x93, 0x4F, 0x1B, 0xC6, 0xB5, ++ 0x61, 0x39, 0x83, 0x0D, 0xAB, 0x8E, 0xE9, 0x71, 0xEF, 0xD0, 0xC1, 0x61, 0xA9, 0xD0, 0xF2, 0x83, 0xF3, 0x44, 0xA4, 0x23, 0x27, 0xFA, 0x53, 0x2D, 0x1E, 0x45, 0x23, 0xC5, 0xC2, 0xA1, 0x2A, 0x80, ++ 0x1E, 0x0F, 0x92, 0x35, 0x13, 0xFD, 0x7C, 0xB7, 0x35, 0xE3, 0xB2, 0xB2, 0x50, 0xCF, 0x54, 0x14, 0x44, 0x51, 0x5E, 0xCE, 0x10, 0xF6, 0xED, 0x7C, 0x3A, 0xA4, 0x1D, 0xBA, 0xB0, 0xF4, 0xE2, 0xD0, ++ 0x0F, 0x6A, 0x32, 0xB2, 0xB2, 0xFF, 0xD8, 0x6F, 0xD5, 0xF4, 0xFE, 0x1A, 0x10, 0xC7, 0xDD, 0x10, 0xBE, 0xA3, 0x1B, 0xE8, 0xEB, 0x9B, 0x82, 0xCF, 0x72, 0xC2, 0x00, 0x15, 0x6F, 0xE5, 0x37, 0x37, ++ 0xBF, 0x00, 0x31, 0x74, 0xFF, 0xBC, 0x72, 0xA0, 0x9C, 0x10, 0xB4, 0xA4, 0x35, 0x13, 0x5D, 0xCD, 0xE5, 0x75, 0xB0, 0x56, 0x22, 0x9C, 0xCB, 0xD2, 0x6A, 0x11, 0x1A, 0xB4, 0x5E, 0x3F, 0x86, 0x4A, ++ 0xBF, 0xEF, 0x43, 0x14, 0x86, 0xC8, 0xA4, 0x71, 0xA2, 0x27, 0xF5, 0x14, 0x81, 0x9B, 0x0B, 0x13, 0x9C, 0x4C, 0x72, 0x98, 0xB5, 0xD8, 0x07, 0x95, 0x3E, 0x86, 0x40, 0xFE, 0xDE, 0x28, 0x4F, 0x1A, ++ 0x96, 0xA8, 0x32, 0xAB, 0xA1, 0x10, 0x00, 0xAB, 0x72, 0x6D, 0x30, 0xD3, 0xCB, 0x0C, 0xB7, 0x79, 0xE5, 0x50, 0x45, 0x72, 0xF2, 0xDA, 0xFA, 0xF8, 0x2E, 0x59, 0xB8, 0x19, 0x38, 0x0B, 0x4C, 0xEC, ++ 0xD1, 0x7B, 0xC7, 0xC3, 0x3B, 0xBA, 0x1E, 0x64, 0x52, 0x1D, 0xB2, 0xD2, 0x38, 0x74, 0x3C, 0x5A, 0x63, 0x75, 0x81, 0x78, 0x29, 0x41, 0x5B, 0x97, 0xDA, 0xD1, 0x34, 0xAC, 0x40, 0x0A, 0xA0, 0xE4, ++ 0x1B, 0x8B, 0x27, 0x36, 0x47, 0x56, 0xAE, 0xF8, 0x32, 0xE8, 0x8E, 0x5A, 0x29, 0x71, 0xDB, 0x85, 0x79, 0x28, 0x52, 0xDF, 0x55, 0xA7, 0xE8, 0x52, 0x7D, 0x42, 0xB4, 0xC1, 0xAB, 0x8F, 0x80, 0xA3, ++ 0x84, 0xA8, 0xF3, 0x7C, 0x09, 0x50, 0x41, 0x5B, 0xE7, 0x15, 0x79, 0x5C, 0x88, 0x4C, 0x88, 0x2F, 0xDE, 0xA1, 0x11, 0xF6, 0x67, 0xD4, 0x65, 0x6C, 0x10, 0xA5, 0xCF, 0x5A, 0xF6, 0xBE, 0xB5, 0xBE, ++ 0x27, 0xFA, 0xB2, 0xD6, 0xDD, 0xC4, 0x81, 0xEF, 0xA7, 0x4A, 0xA7, 0x8F, 0xA5, 0x66, 0xE8, 0x37, 0xEF, 0xDE, 0x77, 0xBC, 0xCF, 0x78, 0x5E, 0xD7, 0xCA, 0xD6, 0x4B, 0x1E, 0x1F, 0xD5, 0x19, 0xF3, ++ 0x82, 0x60, 0x74, 0xB4, 0xD2, 0x86, 0x77, 0xB0, 0xB1, 0xB9, 0x9A, 0x1D, 0x46, 0xE7, 0xFF, 0x70, 0x75, 0xD2, 0x44, 0x78, 0xD3, 0x7E, 0xA5, 0x43, 0x0C, 0x6E, 0xE8, 0xC5, 0x01, 0xBF, 0xF4, 0xE8, ++ 0x70, 0x3F, 0x06, 0x5B, 0x83, 0x60, 0x1B, 0x31, 0xB9, 0x0D, 0xE5, 0x01, 0x4A, 0xD4, 0x55, 0x8B, 0xF8, 0x80, 0x69, 0x90, 0xED, 0xDC, 0xC8, 0x50, 0x84, 0xA0, 0xAC, 0xCD, 0xC1, 0x49, 0x7C, 0x8C, ++ 0x69, 0x9F, 0x8B, 0x0C, 0x75, 0x74, 0x3B, 0x66, 0xFB, 0x4E, 0x2A, 0xE7, 0x99, 0xA0, 0xBD, 0x3A, 0x9C, 0x3F, 0x22, 0x97, 0x48, 0x7B, 0x86, 0x33, 0x4A, 0x73, 0xA9, 0x09, 0xFD, 0xD7, 0x88, 0xE9, ++ 0xCC, 0x02, 0xFA, 0xAB, 0x77, 0x57, 0xEE, 0xE5, 0x97, 0x89, 0x6C, 0x9C, 0xD3, 0x10, 0xBE, 0x5F, 0x3E, 0x4F, 0xFD, 0xA8, 0x04, 0x47, 0xEB, 0x4C, 0x4E, 0x58, 0xEF, 0xCB, 0x00, 0x90, 0x8B, 0xAA, ++ 0xB3, 0xF3, 0x64, 0x52, 0x23, 0x19, 0x69, 0x73, 0x43, 0x9A, 0xFA, 0xAF, 0x53, 0x39, 0x85, 0xAB, 0x81, 0x3B, 0x2E, 0x19, 0x78, 0xB3, 0xAD, 0x7A, 0x19, 0x00, 0xD9, 0xCB, 0x64, 0x4F, 0x7E, 0x28, ++ 0x99, 0x5D, 0xCE, 0x47, 0xC8, 0x79, 0xBA, 0x1D, 0xC2, 0x7B, 0x3B, 0x14, 0x83, 0x22, 0x88, 0xC9, 0x08, 0xCA, 0x10, 0xD7, 0x25, 0x99, 0x17, 0x6B, 0x15, 0x58, 0xC8, 0xCA, 0x1A, 0xF9, 0x51, 0x44, ++ 0x16, 0xA7, 0x60, 0xF3, 0xF7, 0x46, 0x21, 0x59, 0xEF, 0x95, 0x79, 0x56, 0x3E, 0xF6, 0xE3, 0xBE, 0x10, 0xB8, 0x54, 0xCD, 0xD7, 0xE8, 0x24, 0xDA, 0xE1, 0x3C, 0xEE, 0x70, 0xC8, 0x71, 0xFB, 0x6F, ++ 0x9B, 0xCC, 0x2C, 0x62, 0xAA, 0x41, 0x6F, 0xCF, 0x57, 0xA4, 0xDC, 0x22, 0xCA, 0xC3, 0x19, 0x8A, 0xE5, 0xAD, 0xF6, 0xE9, 0x57, 0x63, 0x5C, 0x95, 0xA8, 0xC1, 0xF8, 0xED, 0xE8, 0xF5, 0xB5, 0x14, ++ 0xD6, 0x81, 0xCA, 0x9B, 0xF9, 0x64, 0x43, 0x95, 0x8D, 0xDC, 0x00, 0xF0, 0x6E, 0x38, 0xD8, 0xB4, 0x95, 0x86, 0x4D, 0x5D, 0xF5, 0x6C, 0x32, 0xD2, 0x3E, 0xA9, 0x3D, 0x72, 0x1C, 0x66, 0xE6, 0x49, ++ 0xB2, 0x5F, 0x5B, 0x02, 0x44, 0x68, 0x4B, 0x58, 0xB1, 0x01, 0x26, 0x05, 0x55, 0x08, 0x94, 0xA2, 0x8D, 0xAD, 0x18, 0x92, 0x96, 0x6A, 0x56, 0x0E, 0x89, 0xAD, 0x7C, 0x1E, 0x4B, 0xD1, 0x76, 0x6E, ++ 0x63, 0x7A, 0x4F, 0xFF, 0x64, 0x2C, 0x8B, 0x14, 0xFE, 0xB7, 0xAE, 0x52, 0x41, 0xAA, 0x4C, 0x90, 0x35, 0xEC, 0x02, 0xF1, 0x78, 0x88, 0x73, 0x7A, 0xDE, 0x49, 0x0F, 0xA7, 0x92, 0xE7, 0xF7, 0x62, ++ 0x5E, 0x14, 0x1F, 0x95, 0x95, 0xE9, 0xF2, 0x62, 0xAD, 0xF4, 0x18, 0xAB, 0x6B, 0x31, 0xFB, 0xFE, 0x3B, 0x2E, 0x97, 0x4A, 0xB6, 0xF5, 0x2C, 0x96, 0x0B, 0x8F, 0x72, 0x9C, 0xF5, 0xE8, 0x49, 0x78, ++ 0x60, 0x12, 0x5C, 0xA6, 0x22, 0x99, 0x52, 0xC0, 0x71, 0xDB, 0x25, 0x8E, 0xFA, 0xDC, 0x6D, 0xBA, 0x70, 0xA1, 0x02, 0xD5, 0xB0, 0x84, 0x7B, 0x16, 0x6F, 0x21, 0x46, 0x6E, 0xBA, 0xAC, 0xF5, 0x19, ++ 0x9A, 0x8A, 0x9B, 0x68, 0x93, 0x3D, 0xED, 0x39, 0xB6, 0x44, 0x87, 0x13, 0x0F, 0x9C, 0x33, 0xB5, 0x1F, 0xA7, 0xBD, 0x53, 0x3A, 0x17, 0x04, 0xE4, 0x83, 0x42, 0xD6, 0xA5, 0xC0, 0xBB, 0x53, 0x97, ++ 0x2A, 0xD9, 0xF7, 0xE6, 0x3B, 0x53, 0x91, 0x5B, 0x3D, 0x87, 0x94, 0x9E, 0xDC, 0x6C, 0x34, 0x43, 0x38, 0xDA, 0x7B, 0x15, 0xE0, 0x7E, 0x18, 0xFF, 0xF5, 0x5B, 0xE2, 0x5D, 0x8A, 0xBB, 0x06, 0x82, ++ 0x2C, 0xD9, 0x5F, 0xB1, 0xA3, 0x26, 0xC7, 0xB5, 0xD0, 0xFD, 0x0C, 0x97, 0x10, 0x4B, 0xEF, 0x06, 0x7A, 0xA3, 0x00, 0x16, 0xA1, 0x33, 0x25, 0x4D, 0x02, 0xBA, 0x56, 0x52, 0x3E, 0x80, 0xE3, 0xB6, ++ 0xBA, 0xF9, 0x21, 0x6E, 0x0B, 0x1C, 0xEF, 0x65, 0xE2, 0xB8, 0xE4, 0x6D, 0x85, 0x69, 0x7F, 0xCA, 0xF0, 0x3E, 0xAB, 0x80, 0xC7, 0x74, 0x45, 0xCB, 0x10, 0x36, 0x6B, 0xD0, 0xB8, 0xB1, 0xC3, 0xB4, ++ 0xDF, 0x32, 0xED, 0xC0, 0x6C, 0xF3, 0xAF, 0x70, 0xFE, 0x29, 0x95, 0x51, 0x7E, 0x69, 0xFD, 0x2A, 0xE0, 0xBA, 0xF9, 0x58, 0x5F, 0x21, 0xF9, 0x25, 0x50, 0x4A, 0xDF, 0x8E, 0x8C, 0x91, 0xFB, 0xF2, ++ 0x10, 0x1C, 0xBB, 0xE7, 0x97, 0xA2, 0x66, 0x40, 0xD0, 0x8C, 0xD1, 0xF8, 0xC6, 0x41, 0x81, 0xE3, 0x82, 0x8E, 0xF2, 0xEE, 0x46, 0x20, 0x8B, 0x93, 0x12, 0x35, 0x36, 0xD0, 0x6E, 0xAB, 0x4A, 0x29, ++ 0xCE, 0x33, 0x4F, 0x43, 0xD4, 0x71, 0xEA, 0x15, 0x7F, 0xF7, 0xA8, 0xF3, 0x1A, 0x38, 0x7A, 0xCD, 0x03, 0xEA, 0x4B, 0x52, 0x96, 0xB4, 0x97, 0x14, 0x20, 0xE1, 0x83, 0x0E, 0xA0, 0xED, 0xE8, 0x1C, ++ 0x8B, 0x96, 0x54, 0x3A, 0x9F, 0xE2, 0x87, 0x63, 0xFC, 0xF5, 0x6B, 0x9A, 0xF4, 0x3F, 0x77, 0x7B, 0xCA, 0xCB, 0xEC, 0xC8, 0xAE, 0x13, 0xC3, 0xD4, 0x12, 0x66, 0x55, 0x8B, 0xEA, 0x42, 0x8E, 0xAA, ++ 0x10, 0xBB, 0xAC, 0xDE, 0xA9, 0x44, 0xCD, 0xA5, 0x9A, 0x1A, 0xEF, 0xB4, 0x82, 0x54, 0x81, 0x71, 0xC4, 0x2F, 0xF9, 0xC0, 0xE9, 0xD2, 0x46, 0x93, 0x5B, 0xB8, 0x0B, 0x3E, 0x34, 0x7E, 0xA1, 0xEF, ++ 0x9D, 0x1C, 0x51, 0xEF, 0x45, 0x5D, 0xA2, 0xDE, 0x90, 0xC8, 0x7C, 0xDB, 0xBC, 0xE1, 0x3D, 0x2F, 0xBA, 0xC8, 0xB4, 0xD4, 0x62, 0x4C, 0x36, 0xF6, 0x13, 0x49, 0x0F, 0xE5, 0xF9, 0x7E, 0x44, 0xF9, ++ 0x1D, 0xAE, 0x67, 0x4B, 0x09, 0xC2, 0x78, 0xA0, 0x0A, 0x95, 0x25, 0x23, 0x99, 0x3E, 0x92, 0xC6, 0x03, 0x96, 0xE9, 0x9F, 0x91, 0x67, 0x26, 0xA9, 0xB7, 0x11, 0x5F, 0xE9, 0xE2, 0x49, 0x5B, 0xD7, ++ 0x10, 0x2D, 0x9B, 0x61, 0x96, 0x1A, 0xEE, 0x02, 0x54, 0xB3, 0x27, 0xBF, 0xC0, 0x64, 0x46, 0x55, 0xA8, 0x5D, 0x35, 0x91, 0x8C, 0xA7, 0xD5, 0x66, 0x7E, 0xAF, 0xAE, 0x11, 0x3A, 0x12, 0x12, 0x80, ++ 0x50, 0x4E, 0xAC, 0x12, 0x2C, 0x04, 0x1D, 0xB2, 0x14, 0x1A, 0xA0, 0x85, 0x38, 0x15, 0xC1, 0x49, 0x96, 0x2B, 0x4D, 0x9C, 0x55, 0x99, 0xAC, 0xC7, 0x2A, 0x9E, 0x15, 0xF0, 0x06, 0xA2, 0x51, 0x96, ++ 0x09, 0x80, 0x0A, 0xB4, 0xEB, 0x11, 0x6D, 0x7B, 0x36, 0xBE, 0xB2, 0x59, 0x7E, 0x15, 0xA5, 0x54, 0x26, 0x3B, 0xD3, 0xB0, 0xE7, 0x8C, 0xE3, 0x8B, 0x7F, 0x60, 0x83, 0x11, 0xAB, 0x7B, 0xC3, 0xCA, ++ 0xF4, 0x38, 0xC5, 0x06, 0xB3, 0x23, 0x17, 0x43, 0xFE, 0x3E, 0x29, 0xF9, 0x3D, 0xF3, 0x5B, 0x34, 0x40, 0x10, 0x87, 0x04, 0x1C, 0xEE, 0x3B, 0x75, 0xAE, 0xFA, 0x0A, 0xFE, 0xAF, 0x09, 0xA6, 0xEB, ++ 0xF6, 0xD2, 0xFE, 0x41, 0x85, 0xBC, 0xC6, 0xB3, 0x9A, 0xED, 0x79, 0xF3, 0x38, 0x92, 0x12, 0xFD, 0xC0, 0x9F, 0xA4, 0x8A, 0x71, 0xFE, 0x6A, 0x2D, 0xE3, 0x3D, 0x40, 0xAC, 0xB6, 0xEB, 0x59, 0xE1, ++ 0x99, 0xB1, 0xCD, 0x76, 0x19, 0xAF, 0xE9, 0x6E, 0xD5, 0x46, 0xEE, 0xC5, 0x64, 0x39, 0x5F, 0xAC, 0x3B, 0x49, 0xA5, 0xE7, 0xAC, 0x20, 0x60, 0x68, 0x06, 0xF1, 0x91, 0x27, 0xC6, 0x38, 0x1E, 0xE3, ++ 0x47, 0x93, 0x6B, 0x35, 0xE3, 0x07, 0x4E, 0x23, 0xEB, 0x9E, 0xB0, 0xB0, 0x87, 0x2D, 0x67, 0x30, 0x54, 0xBF, 0x4F, 0xAB, 0x46, 0xD9, 0xC3, 0xC2, 0x75, 0x82, 0x31, 0x8A, 0x05, 0x56, 0xAA, 0x6F, ++ 0x5D, 0xCF, 0x79, 0x25, 0x9F, 0xF8, 0x47, 0xC0, 0xA6, 0xB5, 0x28, 0xD0, 0x49, 0xEE, 0x85, 0xE5, 0xE2, 0xD0, 0x57, 0x23, 0x49, 0x43, 0x89, 0x12, 0x51, 0x5A, 0xA9, 0x46, 0xCD, 0x2A, 0xD7, 0xF8, ++ 0x93, 0xA9, 0xC4, 0xD0, 0x16, 0x0A, 0x24, 0xEF, 0xAA, 0xE9, 0xE2, 0x89, 0x1A, 0xD9, 0x62, 0xB9, 0x62, 0x08, 0x0A, 0x06, 0x65, 0xFC, 0xF5, 0x4B, 0xA3, 0xE3, 0x7A, 0x83, 0x0A, 0x1E, 0x59, 0x5E, ++ 0xCB, 0xD0, 0xE0, 0xAC, 0x37, 0x01, 0x2E, 0x97, 0xDE, 0x3D, 0x4D, 0xAE, 0x2C, 0xA8, 0x42, 0x75, 0x25, 0x99, 0x88, 0xFC, 0x83, 0x9E, 0x0D, 0x59, 0xC1, 0x59, 0xA5, 0x18, 0x53, 0xDF, 0x57, 0xC6, ++ 0x22, 0xCA, 0x74, 0xCB, 0x71, 0xFD, 0xC2, 0xD5, 0x20, 0x01, 0xD4, 0xF8, 0x04, 0x73, 0x4E, 0xC0, 0x9B, 0x09, 0x0C, 0xDE, 0x83, 0x71, 0xE2, 0x6B, 0xC5, 0x7F, 0x76, 0x8C, 0x5F, 0xA0, 0x2B, 0xC6, ++ 0x6C, 0x6A, 0xEC, 0xB0, 0x44, 0xDA, 0x59, 0xF2, 0xCF, 0x52, 0x93, 0xB8, 0xD8, 0x6E, 0x61, 0xB8, 0x6E, 0x84, 0xEB, 0x6B, 0xA4, 0xDE, 0x6F, 0x44, 0xAC, 0xC5, 0x66, 0x2E, 0x34, 0x7B, 0xE8, 0x38, ++ 0xEA, 0xB6, 0xA0, 0x3B, 0x3F, 0x1E, 0xA9, 0x90, 0xA3, 0x22, 0xB0, 0xCB, 0x13, 0x09, 0x22, 0x87, 0xE7, 0xFF, 0x52, 0xF9, 0x35, 0x10, 0x45, 0x5D, 0xD2, 0xAF, 0x81, 0x1F, 0xBA, 0xE2, 0x19, 0x48, ++ 0x01, 0xA9, 0x0D, 0xCC, 0x2D, 0x69, 0x90, 0x59, 0x1F, 0xF9, 0x0A, 0xF8, 0x17, 0x30, 0xC7, 0xDD, 0x13, 0x91, 0xE7, 0x8D, 0x9B, 0x0E, 0x42, 0x64, 0x61, 0x55, 0xEF, 0x4C, 0x53, 0xFC, 0xF6, 0x23, ++ 0x9C, 0xAE, 0x7C, 0xAD, 0xEC, 0x2E, 0x8D, 0xB1, 0xFB, 0xAA, 0x91, 0x15, 0x24, 0x45, 0x4C, 0x49, 0x18, 0x4C, 0xC1, 0xA7, 0x7E, 0x57, 0x2A, 0x01, 0x67, 0xE2, 0x91, 0xC0, 0xA1, 0xEC, 0xBD, 0x9D, ++ 0x31, 0x70, 0x9C, 0x27, 0x7C, 0xE5, 0x41, 0xD3, 0x25, 0x56, 0x3C, 0x2E, 0xC3, 0x1E, 0x0A, 0x8B, 0x54, 0x2C, 0xAE, 0x34, 0xDC, 0x13, 0x4F, 0x66, 0x79, 0x96, 0xD8, 0x27, 0x1C, 0xA6, 0xE9, 0x0B, ++ 0xB8, 0x44, 0x6F, 0xB6, 0x6D, 0xBE, 0x61, 0xD2, 0x74, 0x2C, 0x38, 0xCA, 0xB4, 0x06, 0x4D, 0x2B, 0x40, 0xB6, 0x53, 0x72, 0x5B, 0x97, 0x6D, 0x37, 0xD2, 0x66, 0xAA, 0x6F, 0xA8, 0xB2, 0x99, 0x63, ++ 0x05, 0x8E, 0x06, 0xEF, 0xAD, 0x99, 0x07, 0x35, 0x9D, 0xE3, 0xDB, 0xC2, 0x27, 0x05, 0xFE, 0x6A, 0xB7, 0xD5, 0xFD, 0xAE, 0xB9, 0x02, 0x33, 0xEB, 0x94, 0xCB, 0x20, 0x40, 0x0B, 0x5A, 0x68, 0xC9, ++ 0xCE, 0xAB, 0x1A, 0x16, 0xBB, 0xBD, 0x5F, 0x1B, 0x90, 0x55, 0x6A, 0xC9, 0x38, 0x50, 0xAD, 0xFC, 0xCA, 0x90, 0x58, 0x8A, 0x1A, 0xAD, 0x3E, 0x71, 0x67, 0xEE, 0x26, 0x90, 0xEE, 0x58, 0xC1, 0xDE, ++ 0x36, 0xD2, 0x7B, 0xDE, 0xEA, 0xB9, 0xD8, 0x19, 0xD6, 0x9D, 0xFA, 0xF9, 0xEA, 0xE5, 0x5E, 0x1C, 0xD3, 0xA9, 0x7A, 0x5F, 0xB3, 0xFD, 0x10, 0xBB, 0xA2, 0x9D, 0x84, 0xC6, 0x9C, 0x14, 0xB2, 0x2E, ++ 0xDD, 0xD9, 0x91, 0xCD, 0x4E, 0xF2, 0x9F, 0xA3, 0x5D, 0xDB, 0xDE, 0xE6, 0xC9, 0xA0, 0x09, 0x6D, 0x4E, 0x7F, 0xDF, 0xCF, 0x7E, 0x28, 0x3C, 0x89, 0x91, 0x73, 0x10, 0xC8, 0x90, 0xBE, 0xEC, 0x2C, ++ 0x8C, 0x6C, 0xC0, 0xE6, 0xEE, 0x4A, 0xB5, 0xC2, 0x8F, 0xAA, 0xCB, 0x2E, 0x00, 0xBB, 0x93, 0xD9, 0x7E, 0x5C, 0xFB, 0xFA, 0xF8, 0xF7, 0x8B, 0xDF, 0x90, 0x2D, 0x25, 0xDF, 0xB5, 0x06, 0xA3, 0xB1, ++ 0x0C, 0x06, 0x48, 0xAA, 0xBB, 0xC5, 0xD4, 0xCA, 0x8B, 0x1A, 0x46, 0x6F, 0x04, 0x1B, 0xF7, 0xE1, 0x0E, 0xF5, 0x1E, 0x0D, 0x7A, 0x3F, 0xF5, 0xB1, 0x80, 0xAC, 0xBA, 0xF2, 0x36, 0xA3, 0x81, 0x51, ++ 0xB9, 0x56, 0xCB, 0x56, 0x35, 0x75, 0x65, 0xD7, 0x1E, 0x42, 0x60, 0xF2, 0xF6, 0x35, 0x12, 0xDC, 0xDB, 0xD3, 0xC3, 0x5E, 0x54, 0x0F, 0x87, 0x72, 0x63, 0x26, 0xAF, 0x2A, 0x3C, 0xD6, 0xEE, 0xD2, ++ 0xDA, 0x8E, 0x51, 0x9F, 0x9F, 0x60, 0x58, 0x1A, 0x58, 0x20, 0x13, 0xBC, 0x93, 0xBE, 0x25, 0xA0, 0x13, 0x71, 0xDC, 0x8C, 0x34, 0xBE, 0x1E, 0x88, 0x24, 0xA2, 0xD2, 0x12, 0x03, 0x39, 0xD6, 0xE2, ++ 0x87, 0xEC, 0x0C, 0xC4, 0x3D, 0x58, 0x6A, 0x04, 0xF8, 0x08, 0x75, 0xB3, 0x76, 0x64, 0x83, 0xB8, 0x84, 0xA9, 0x20, 0x2C, 0x1C, 0xDB, 0x4D, 0xF4, 0xC1, 0x1B, 0x1D, 0x79, 0xB1, 0xE4, 0xF2, 0xAE, ++ 0x88, 0x6E, 0x81, 0xA1, 0xFF, 0x7B, 0xCA, 0xC8, 0x98, 0x89, 0x53, 0x21, 0x4D, 0xAF, 0xE7, 0x79, 0xA7, 0x9D, 0xF5, 0x1A, 0x65, 0x1A, 0x51, 0x2D, 0xB2, 0x56, 0x2B, 0x7C, 0x1D, 0x46, 0x71, 0xD5, ++ 0x2C, 0x51, 0x70, 0x81, 0xD5, 0x3A, 0x79, 0x22, 0x70, 0xB1, 0xC3, 0x05, 0x51, 0x5F, 0xB7, 0xB6, 0xC4, 0x61, 0xBD, 0x4C, 0xD0, 0xD7, 0xC3, 0x17, 0x5B, 0x14, 0x6F, 0xE9, 0x62, 0xA4, 0xC9, 0xA9, ++ 0x08, 0x1E, 0x39, 0x49, 0x60, 0x68, 0x9B, 0xA9, 0xBC, 0xC6, 0xCA, 0xD5, 0xEA, 0xED, 0xF8, 0x1E, 0x34, 0x53, 0x61, 0x64, 0x6E, 0x9E, 0xAF, 0xB8, 0xBA, 0xEC, 0xF1, 0xFC, 0x01, 0x12, 0x1C, 0x29, ++ 0x3D, 0x58, 0x68, 0x7D, 0x7E, 0x81, 0xA4, 0xA8, 0xAE, 0xC9, 0x0F, 0x16, 0x1D, 0x73, 0x87, 0x97, 0xAC, 0xAE, 0xBE, 0xC1, 0x18, 0x19, 0x58, 0x67, 0x9D, 0xA1, 0xA7, 0xAA, 0xB0, 0xEB, 0xEE, 0xF0, ++ 0xF1, 0xFF, 0x18, 0x32, 0x3C, 0x47, 0x5D, 0x6A, 0x72, 0x7F, 0x80, 0x82, 0x93, 0xAD, 0xBD, 0xCC, 0xDF, 0xE6, 0xEC, 0xF0, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1C, 0x2A, 0x34, 0x42, 0x55, 0x80, 0x16, ++ 0x15, 0x00, 0x78, 0x78, 0x2C, 0x25, 0x10, 0x0C, 0x02, 0x01, 0x82, 0x08, 0xD8, 0x80, 0x82, 0x02, 0xC4, 0x02, 0x01, 0x20, 0x27, 0x80, 0x84, 0x4A, 0x00, 0x12, 0x82, 0x02, 0x00, 0x50, 0x64, 0x4A, ++ 0xB2, 0xB4, 0x16, 0xBF, 0x7C, 0x04 }, ++ }, ++ { ++ .name = "Dilithium Round 2, Level 4 (6-5) KAT 0", ++ .version = 0, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_65, + .rho_len = 32, + .rho = { 0x7C, 0x99, 0x35, 0xA0, 0xB0, 0x76, 0x94, 0xAA, 0x0C, 0x6D, 0x10, 0xE4, 0xDB, 0x6B, 0x1A, 0xDD, 0x2F, 0xD8, 0x1A, 0x25, 0xCC, 0xB1, 0x48, 0x03, 0x2D, 0xCD, 0x73, 0x99, 0x36, 0x73, 0x7F, 0x2D }, + .seed_len = 32, +@@ -250,6 +619,8 @@ struct DILITHIUM_TEST_VECTOR dilithium_tv[] = { + 0x97, 0x6A, 0xBC, 0xC9, 0x5C, 0x14, 0xA8, 0xEF, 0xE6, 0x0A, 0x2C, 0x1A, 0xF0, 0xAB, 0xBE, 0x6B, 0xF7, 0x89, 0xD4, 0xF6, 0x97, 0x38, 0x09, 0x2A, 0xE3, 0xE6, 0x2A, 0xF1, 0x77, 0x3E, 0xD6, 0xA4, + 0x2F, 0x1A, 0xAA, 0xBC, 0xFB, 0x98, 0x73, 0x1C, 0xE2, 0x70, 0x1F, 0x42, 0xE4, 0xBA, 0x9E, 0x12, 0x8B, 0x67, 0x26, 0x1C, 0x59, 0x8D, 0x31, 0x89, 0xD0, 0x60, 0x24, 0xF0, 0x1E, 0x25, 0x35, 0x4D, + 0x60, 0x32, 0x7F, 0xB6, 0x57, 0x0B, 0xF7, 0xE1, 0x63, 0xFA, 0x04, 0x32, 0x4B, 0x32, 0xE7, 0xEB, 0xF8, 0xB7, 0x8A, 0xC2, 0xEC, 0xFA, 0x3D, 0x36, 0xB1, 0x3A, 0x59, 0xA3, 0xA7, 0x27, 0x02, 0x9B }, ++ .pkcs8_len = 0, ++ .spki_len = 0, + .msg_len = 33, + .msg = { 0xD8, 0x1C, 0x4D, 0x8D, 0x73, 0x4F, 0xCB, 0xFB, 0xEA, 0xDE, 0x3D, 0x3F, 0x8A, 0x03, 0x9F, 0xAA, 0x2A, 0x2C, 0x99, 0x57, 0xE8, 0x35, 0xAD, 0x55, 0xB2, 0x2E, 0x75, 0xBF, 0x57, 0xBB, 0x55, 0x6A, + 0xC8 }, +@@ -363,8 +734,9 @@ struct DILITHIUM_TEST_VECTOR dilithium_tv[] = { + 0xB2, 0xB4, 0x16, 0xBF, 0x7C, 0x04 }, + }, + { +- .name = "Dilithium 6-5 KAT 1", ++ .name = "Dilithium Round 2, Level 4 (6-5) KAT 1", + .version = 0, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_65, + .rho_len = 32, + .rho = { 0xBC, 0x96, 0x2D, 0x97, 0x8F, 0x38, 0x88, 0x10, 0x85, 0xC1, 0xB8, 0x13, 0xBC, 0x90, 0xEE, 0xE4, 0x4A, 0xD9, 0xE7, 0x65, 0x16, 0x81, 0xC2, 0x0B, 0xA4, 0x64, 0x02, 0xF5, 0x57, 0xC4, 0x54, 0xDE }, + .seed_len = 32, +@@ -547,6 +919,8 @@ struct DILITHIUM_TEST_VECTOR dilithium_tv[] = { + 0x6B, 0x50, 0x20, 0x56, 0x35, 0xCD, 0x16, 0xA5, 0xB4, 0xC2, 0x58, 0xA9, 0xC7, 0x33, 0x15, 0x11, 0x93, 0xE4, 0x1C, 0x73, 0xEA, 0xAD, 0xC8, 0x86, 0x41, 0x76, 0x42, 0x73, 0xDF, 0x00, 0xD6, 0x6F, + 0xE3, 0x84, 0x78, 0x3B, 0x95, 0xD5, 0x30, 0xC6, 0x90, 0x0B, 0x4A, 0x93, 0x84, 0x1D, 0x40, 0x54, 0x3E, 0x56, 0x37, 0x40, 0x75, 0x1A, 0xDE, 0x91, 0x63, 0xBA, 0x9A, 0x28, 0xAE, 0x8C, 0x95, 0xCF, + 0x15, 0x65, 0x34, 0xF9, 0x78, 0x1F, 0x35, 0xE7, 0x5F, 0x1C, 0x0E, 0xD8, 0x78, 0x98, 0xC0, 0xB5, 0x9B, 0x82, 0x13, 0x68, 0x86, 0xA2, 0x20, 0xC3, 0x4F, 0xD4, 0xDD, 0xC3, 0x96, 0x7C, 0xEF, 0x7D }, ++ .pkcs8_len = 0, ++ .spki_len = 0, + .msg_len = 891, + .msg = { 0x30, 0xD6, 0x1C, 0x6F, 0xBD, 0x64, 0x11, 0x3F, 0xCE, 0xD8, 0xC5, 0x20, 0x50, 0x26, 0xEB, 0xAC, 0x0D, 0x9F, 0x35, 0x22, 0x18, 0x26, 0x17, 0xCB, 0x00, 0xB6, 0xE7, 0x0C, 0x8D, 0xA6, 0x2E, 0xCC, + 0x1B, 0xBC, 0x8E, 0x1F, 0xDA, 0xF1, 0x7C, 0xC6, 0x1D, 0xD0, 0x1C, 0xE8, 0x5A, 0x90, 0x72, 0xCC, 0x1D, 0x9D, 0x34, 0xFD, 0xAD, 0xBA, 0x5B, 0x93, 0xE0, 0xAA, 0xB4, 0xC9, 0xC4, 0xC9, 0xE2, 0x6D, +@@ -685,8 +1059,9 @@ struct DILITHIUM_TEST_VECTOR dilithium_tv[] = { + 0x94, 0x55, 0x2B, 0xE6, 0x37, 0x0B }, + }, + { +- .name = "Dilithium 6-5 KAT 2", ++ .name = "Dilithium Round 2, Level 4 (6-5) KAT 2", + .version = 0, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_65, + .rho_len = 32, + .rho = { 0xDF, 0x48, 0x53, 0xF4, 0x82, 0xCC, 0x1D, 0x0B, 0x3A, 0x2D, 0x71, 0xE9, 0xEA, 0xCA, 0x06, 0x4E, 0x57, 0xC5, 0xD1, 0x00, 0xDF, 0x79, 0xBD, 0x00, 0x4B, 0xA8, 0x1B, 0x43, 0xEA, 0xCE, 0xC4, 0x01 }, + .seed_len = 32, +@@ -869,6 +1244,8 @@ struct DILITHIUM_TEST_VECTOR dilithium_tv[] = { + 0x22, 0x1E, 0x28, 0xD0, 0x85, 0x75, 0xB0, 0x42, 0x8F, 0x66, 0x63, 0x9F, 0x76, 0x06, 0xB0, 0x78, 0x25, 0x05, 0x5A, 0xBA, 0xE8, 0x17, 0xCD, 0x67, 0xAF, 0x4E, 0xD7, 0x59, 0x57, 0x3D, 0xF0, 0x51, + 0x02, 0x88, 0x79, 0xA1, 0x73, 0x0E, 0x89, 0x87, 0x55, 0x69, 0xD7, 0xFA, 0x12, 0x0F, 0x81, 0x80, 0xB9, 0x04, 0x95, 0x82, 0x93, 0x42, 0x8A, 0xF8, 0x9B, 0x9C, 0x96, 0x15, 0x2C, 0x40, 0x87, 0x81, + 0x2F, 0xDE, 0x74, 0x4F, 0x42, 0x41, 0x70, 0x5C, 0x85, 0x8A, 0x71, 0xB0, 0x0E, 0x66, 0xDA, 0xD4, 0x0F, 0xCF, 0x62, 0xB2, 0x23, 0x70, 0xFF, 0x6B, 0xAE, 0xA8, 0xF5, 0x18, 0x70, 0x78, 0x17, 0x75 }, ++ .pkcs8_len = 0, ++ .spki_len = 0, + .msg_len = 2442, + .msg = { 0xAC, 0xB4, 0x14, 0xEB, 0x55, 0xAE, 0x5E, 0x49, 0x10, 0x7B, 0xD0, 0xAC, 0x59, 0x75, 0x54, 0x4F, 0x83, 0x10, 0x4F, 0x72, 0x64, 0x49, 0x5A, 0xE0, 0xBF, 0x0A, 0x6D, 0x95, 0x94, 0xC4, 0x22, 0xC1, + 0x6B, 0x99, 0x46, 0x9E, 0xCC, 0xDF, 0xE8, 0xB8, 0x00, 0x08, 0x75, 0xB4, 0x69, 0x30, 0x98, 0x91, 0xEA, 0x42, 0x58, 0x6A, 0x61, 0x5D, 0x14, 0x6D, 0xE6, 0x4F, 0xE5, 0x92, 0x77, 0xA6, 0x16, 0x31, +@@ -1056,8 +1433,9 @@ struct DILITHIUM_TEST_VECTOR dilithium_tv[] = { + 0xA5, 0x26, 0x63, 0x08, 0xD2, 0x06 }, + }, + { +- .name = "Dilithium 6-5 KAT 3", ++ .name = "Dilithium Round 2, Level 4 (6-5) KAT 3", + .version = 0, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_65, + .rho_len = 32, + .rho = { 0x69, 0x04, 0x82, 0xBF, 0xF6, 0xC1, 0xD0, 0xBA, 0x6C, 0x07, 0x1D, 0xD3, 0x95, 0xAD, 0xF6, 0x9E, 0x55, 0xE1, 0xBF, 0xC4, 0xE0, 0x99, 0x2A, 0x86, 0x50, 0xFF, 0xB5, 0xE6, 0x0A, 0x02, 0xB1, 0x72 }, + .seed_len = 32, +@@ -1240,6 +1618,8 @@ struct DILITHIUM_TEST_VECTOR dilithium_tv[] = { + 0x5F, 0x41, 0xFF, 0xFC, 0xD8, 0xBA, 0x32, 0x59, 0x43, 0x59, 0x53, 0x98, 0xB2, 0xD9, 0x39, 0xC8, 0xA4, 0xC9, 0x0B, 0x1D, 0x58, 0x4C, 0x66, 0x9F, 0x0F, 0xFA, 0xCD, 0x43, 0x41, 0xE0, 0x35, 0x58, + 0x70, 0x07, 0x15, 0xC6, 0x1C, 0x3C, 0x64, 0x0D, 0x42, 0x5B, 0x67, 0xEB, 0x0D, 0xAA, 0xBF, 0x5E, 0xD3, 0x09, 0x20, 0x5F, 0xB0, 0x9A, 0x0C, 0x6B, 0x3D, 0xDD, 0xBB, 0x5F, 0x28, 0x8E, 0x57, 0x3B, + 0x46, 0x1A, 0x58, 0xF5, 0xEF, 0x5D, 0x43, 0x50, 0x13, 0x63, 0xD8, 0xB1, 0xA7, 0x79, 0xDC, 0x5E, 0x27, 0xDE, 0xAC, 0xDF, 0xCD, 0xCD, 0x0A, 0x9C, 0x20, 0x24, 0xAE, 0x48, 0x1C, 0xD9, 0x81, 0xD5 }, ++ .pkcs8_len = 0, ++ .spki_len = 0, + .msg_len = 3300, + .msg = { 0xD2, 0x1A, 0x6B, 0xB3, 0xA2, 0x35, 0x68, 0x05, 0xE6, 0x78, 0x67, 0x3C, 0x45, 0xFB, 0x05, 0x5F, 0xC5, 0x26, 0x6E, 0x3F, 0x69, 0x2A, 0xF9, 0x93, 0x5A, 0xEA, 0x30, 0x7F, 0x14, 0xA5, 0xC4, 0x1B, + 0x97, 0x99, 0x66, 0xA5, 0xDF, 0xE4, 0x2E, 0xBF, 0xED, 0x14, 0x87, 0xE4, 0x82, 0x2B, 0x74, 0xAB, 0x5A, 0xF2, 0x89, 0x95, 0xE0, 0x85, 0xEC, 0x80, 0x07, 0xEC, 0xA4, 0x97, 0x7C, 0x63, 0xEE, 0x52, +@@ -1453,6 +1833,4375 @@ struct DILITHIUM_TEST_VECTOR dilithium_tv[] = { + 0x00, 0x02, 0x16, 0xA0, 0x74, 0x00, 0x30, 0xB2, 0x40, 0x10, 0x95, 0x00, 0x0C, 0x00, 0x23, 0x42, 0x13, 0x20, 0x06, 0x06, 0x9C, 0x00, 0x00, 0x25, 0x04, 0x80, 0x09, 0xE2, 0x28, 0x84, 0xA2, 0x32, + 0x13, 0x7D, 0xE1, 0xCE, 0xBE, 0x04 }, + }, ++ { ++ .name = "Dilithium Round 2, Level 5 (8-7) KAT 0 (PKCS#8/SPKI)", ++ .version = 0, ++ .keyform = 0, ++ .rho_len = 0, ++ .seed_len = 0, ++ .tr_len = 0, ++ .s1_len = 0, ++ .s2_len = 0, ++ .t0_len = 0, ++ .t1_len = 0, ++ .pkcs8_len = 7508, ++ .pkcs8 = { ++ 0x30, 0x82, 0x1D, 0x50, 0x02, 0x01, 0x00, 0x30, 0x0F, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0B, 0x01, 0x08, 0x07, 0x05, 0x00, 0x04, 0x82, 0x1D, 0x38, 0x30, 0x82, 0x1D, 0x34, ++ 0x02, 0x01, 0x00, 0x03, 0x21, 0x00, 0x7C, 0x99, 0x35, 0xA0, 0xB0, 0x76, 0x94, 0xAA, 0x0C, 0x6D, 0x10, 0xE4, 0xDB, 0x6B, 0x1A, 0xDD, 0x2F, 0xD8, 0x1A, 0x25, 0xCC, 0xB1, 0x48, 0x03, 0x2D, 0xCD, ++ 0x73, 0x99, 0x36, 0x73, 0x7F, 0x2D, 0x03, 0x21, 0x00, 0x3E, 0x78, 0x4C, 0xCB, 0x7E, 0xBC, 0xDC, 0xFD, 0x45, 0x54, 0x2B, 0x7F, 0x6A, 0xF7, 0x78, 0x74, 0x2E, 0x0F, 0x44, 0x79, 0x17, 0x50, 0x84, ++ 0xAA, 0x48, 0x8B, 0x3B, 0x74, 0x34, 0x06, 0x78, 0xAA, 0x03, 0x31, 0x00, 0x89, 0xDB, 0xBF, 0xC3, 0x69, 0x33, 0x5D, 0x8F, 0x70, 0xE7, 0xBC, 0xB4, 0xD1, 0x66, 0xD4, 0xBD, 0xD0, 0xD8, 0x36, 0xE4, ++ 0x5D, 0xE9, 0x37, 0x92, 0xED, 0xC4, 0x26, 0x10, 0x6F, 0xBF, 0x5A, 0xF2, 0x7C, 0x68, 0xA9, 0x50, 0xB4, 0xA1, 0xA6, 0x42, 0x28, 0x01, 0xC6, 0xF2, 0xAC, 0xC3, 0xA9, 0xFA, 0x03, 0x82, 0x02, 0xA1, ++ 0x00, 0x91, 0xB4, 0x2D, 0xA1, 0x38, 0x24, 0x08, 0x19, 0x24, 0x1A, 0x30, 0x4D, 0x40, 0xA8, 0x6C, 0xD8, 0x04, 0x6A, 0x03, 0x28, 0x04, 0x41, 0x38, 0x22, 0x22, 0x39, 0x0A, 0xE2, 0x80, 0x0D, 0x12, ++ 0x49, 0x91, 0x24, 0xB4, 0x50, 0x93, 0x46, 0x89, 0xD1, 0x30, 0x4C, 0x04, 0x20, 0x24, 0x20, 0x20, 0x31, 0x59, 0x92, 0x41, 0xC3, 0x26, 0x61, 0x14, 0x47, 0x32, 0xDB, 0x12, 0x69, 0x63, 0x46, 0x01, ++ 0x10, 0x93, 0x91, 0x10, 0x39, 0x81, 0x5B, 0x26, 0x71, 0x40, 0xB0, 0x01, 0x03, 0x41, 0x48, 0x04, 0x19, 0x09, 0x13, 0xB4, 0x91, 0x0C, 0x46, 0x08, 0xD4, 0x08, 0x09, 0x0C, 0x99, 0x04, 0x00, 0x35, ++ 0x61, 0x13, 0x14, 0x4C, 0x19, 0x41, 0x28, 0x1C, 0x16, 0x80, 0x88, 0xA0, 0x29, 0x1A, 0x30, 0x02, 0x10, 0x80, 0x4C, 0x13, 0x43, 0x25, 0x04, 0x08, 0x81, 0x20, 0x43, 0x70, 0x14, 0x11, 0x6A, 0x99, ++ 0x00, 0x40, 0x48, 0x82, 0x31, 0x12, 0x42, 0x20, 0x48, 0x06, 0x0D, 0xE2, 0xA2, 0x0C, 0x82, 0xB0, 0x28, 0xE2, 0x36, 0x10, 0x49, 0x16, 0x84, 0xD8, 0x04, 0x4C, 0x51, 0xB8, 0x68, 0xC2, 0x84, 0x90, ++ 0x9B, 0x10, 0x31, 0x21, 0x49, 0x32, 0x94, 0x20, 0x0D, 0x04, 0x41, 0x24, 0xCB, 0xA4, 0x6D, 0x1A, 0x82, 0x61, 0x08, 0x40, 0x8E, 0xA4, 0x00, 0x44, 0x93, 0x92, 0x91, 0x8C, 0x30, 0x62, 0x60, 0xB2, ++ 0x90, 0x58, 0x40, 0x62, 0x11, 0x97, 0x31, 0x21, 0x11, 0x81, 0x0C, 0x28, 0x88, 0x09, 0x07, 0x42, 0x88, 0x40, 0x6C, 0xC0, 0x96, 0x28, 0x81, 0x28, 0x8A, 0xC0, 0x12, 0x0C, 0x93, 0x48, 0x4C, 0x89, ++ 0x82, 0x25, 0xD8, 0x00, 0x22, 0x24, 0x45, 0x41, 0x1B, 0x95, 0x2C, 0xA0, 0x92, 0x61, 0x84, 0xA2, 0x70, 0x59, 0x86, 0x10, 0x0B, 0x87, 0x08, 0x10, 0x98, 0x61, 0xD3, 0x40, 0x0D, 0x40, 0xB0, 0x8D, ++ 0x09, 0x05, 0x71, 0x60, 0x84, 0x70, 0x18, 0x80, 0x61, 0x1A, 0x16, 0x2E, 0x63, 0x32, 0x06, 0x80, 0x80, 0x88, 0x50, 0xC6, 0x8C, 0x00, 0x10, 0x24, 0xC1, 0x00, 0x26, 0x94, 0x90, 0x48, 0x44, 0xB6, ++ 0x29, 0x1A, 0x35, 0x48, 0xD3, 0xB0, 0x91, 0x21, 0xA4, 0x08, 0x11, 0x34, 0x32, 0x03, 0x01, 0x05, 0x21, 0x32, 0x46, 0x1B, 0x31, 0x31, 0x1B, 0x86, 0x0C, 0x1A, 0x28, 0x0D, 0xD1, 0x08, 0x28, 0x8B, ++ 0xA8, 0x0D, 0x98, 0x90, 0x05, 0xD0, 0xA8, 0x29, 0x83, 0x48, 0x71, 0x03, 0x33, 0x80, 0x24, 0x90, 0x68, 0xD1, 0xA0, 0x2C, 0x23, 0x10, 0x4D, 0x12, 0x95, 0x11, 0xE4, 0x14, 0x21, 0x14, 0x39, 0x4E, ++ 0x12, 0x01, 0x70, 0x0C, 0x25, 0x71, 0x24, 0x83, 0x89, 0x54, 0x30, 0x06, 0x11, 0x90, 0x45, 0x12, 0x03, 0x04, 0x59, 0xB0, 0x4C, 0x20, 0x36, 0x8A, 0x19, 0x30, 0x72, 0x98, 0x94, 0x4C, 0x14, 0x81, ++ 0x40, 0xA2, 0xC6, 0x84, 0xCB, 0xA2, 0x48, 0x0C, 0xC1, 0x2D, 0x8A, 0xC4, 0x05, 0x42, 0x94, 0x45, 0x5B, 0xB4, 0x08, 0xDB, 0x18, 0x24, 0x88, 0x20, 0x90, 0x1B, 0xC3, 0x50, 0xA1, 0x96, 0x4D, 0x0B, ++ 0x31, 0x6D, 0x93, 0x26, 0x46, 0x00, 0x35, 0x52, 0x01, 0x13, 0x42, 0xDA, 0x46, 0x6A, 0x1A, 0x34, 0x01, 0x40, 0x92, 0x41, 0xC0, 0x08, 0x66, 0xE3, 0x94, 0x01, 0x63, 0x28, 0x69, 0x0C, 0x25, 0x31, ++ 0x0B, 0x21, 0x24, 0x43, 0xA2, 0x30, 0xD3, 0x22, 0x44, 0xCB, 0x36, 0x71, 0x02, 0x02, 0x42, 0x1A, 0xC1, 0x2C, 0x20, 0x23, 0x80, 0x8B, 0xA8, 0x85, 0x88, 0x08, 0x4A, 0x94, 0x10, 0x48, 0x18, 0x81, ++ 0x29, 0xE2, 0xB4, 0x4C, 0x89, 0x88, 0x51, 0xC9, 0x06, 0x09, 0xD3, 0x96, 0x71, 0x54, 0xB0, 0x91, 0x53, 0x86, 0x04, 0x53, 0xC4, 0x44, 0x81, 0x98, 0x11, 0x88, 0x20, 0x04, 0xA0, 0x16, 0x0A, 0x49, ++ 0xA0, 0x10, 0x1A, 0x17, 0x44, 0x21, 0x26, 0x66, 0xE0, 0xC0, 0x09, 0x59, 0x90, 0x8C, 0x93, 0x10, 0x49, 0x00, 0x85, 0x65, 0x4C, 0xC6, 0x0D, 0x00, 0x18, 0x30, 0x1B, 0x12, 0x6E, 0x10, 0x02, 0x45, ++ 0xA2, 0x12, 0x49, 0x22, 0xC8, 0x20, 0x03, 0xC5, 0x48, 0x12, 0x04, 0x52, 0xA1, 0x88, 0x25, 0x40, 0xB2, 0x4D, 0x4B, 0x38, 0x28, 0x23, 0xB2, 0x64, 0xC2, 0x38, 0x90, 0x09, 0x46, 0x92, 0x0C, 0x90, ++ 0x0D, 0x04, 0x06, 0x0C, 0x4C, 0x16, 0x2D, 0x08, 0x10, 0x49, 0x20, 0x47, 0x65, 0x50, 0x28, 0x29, 0x1A, 0x88, 0x80, 0x40, 0x30, 0x6D, 0x88, 0x36, 0x70, 0x63, 0x98, 0x71, 0x99, 0x96, 0x2C, 0x1B, ++ 0x91, 0x61, 0x61, 0x40, 0x06, 0x13, 0x35, 0x04, 0x09, 0x08, 0x8E, 0x54, 0xB8, 0x44, 0x81, 0x30, 0x08, 0xC8, 0x10, 0x2C, 0x5A, 0xB0, 0x04, 0x42, 0x46, 0x61, 0x20, 0x03, 0x88, 0x91, 0xA0, 0x91, ++ 0x81, 0x10, 0x4D, 0x12, 0xB7, 0x81, 0x20, 0x42, 0x02, 0x54, 0x94, 0x24, 0x59, 0xC4, 0x25, 0x8C, 0x44, 0x70, 0xE3, 0x32, 0x8E, 0x9A, 0x02, 0x60, 0xE4, 0xA6, 0x21, 0x4A, 0xB2, 0x85, 0x93, 0x36, ++ 0x20, 0x03, 0x82, 0x03, 0x01, 0x00, 0x01, 0x05, 0x32, 0x11, 0x44, 0x66, 0xE2, 0x06, 0x40, 0x14, 0x49, 0x6C, 0x0B, 0x86, 0x80, 0x02, 0x47, 0x26, 0xD2, 0xB2, 0x25, 0x58, 0x48, 0x0E, 0x58, 0x44, ++ 0x11, 0xD1, 0x44, 0x50, 0x51, 0xB8, 0x81, 0xC4, 0xA0, 0x48, 0x10, 0xC9, 0x50, 0x08, 0x98, 0x88, 0xD8, 0x28, 0x2A, 0x52, 0xC0, 0x4D, 0xD1, 0x38, 0x12, 0xD8, 0x46, 0x89, 0x00, 0x94, 0x00, 0xDA, ++ 0xC4, 0x45, 0x9B, 0x44, 0x6E, 0x0B, 0x44, 0x0C, 0xC0, 0xC0, 0x01, 0x20, 0xC1, 0x0C, 0xC0, 0x04, 0x4C, 0x08, 0x24, 0x21, 0x23, 0xC7, 0x65, 0x03, 0xA0, 0x80, 0x91, 0xC2, 0x50, 0x21, 0x10, 0x31, ++ 0x99, 0x36, 0x00, 0x64, 0x28, 0x70, 0x81, 0x38, 0x05, 0x4A, 0x18, 0x80, 0x1C, 0x89, 0x24, 0x08, 0x95, 0x49, 0x24, 0x39, 0x40, 0x24, 0x15, 0x22, 0xD9, 0x32, 0x90, 0x23, 0x24, 0x71, 0xC4, 0x46, ++ 0x50, 0xCB, 0x86, 0x65, 0xE4, 0x94, 0x8C, 0x42, 0x04, 0x82, 0x8A, 0x86, 0x71, 0x13, 0xA3, 0x00, 0xDB, 0x44, 0x04, 0x23, 0x82, 0x10, 0x23, 0x46, 0x26, 0x0B, 0x08, 0x08, 0x60, 0x16, 0x11, 0xA4, ++ 0xB6, 0x24, 0xE1, 0x32, 0x69, 0x04, 0x17, 0x86, 0xE3, 0x84, 0x2C, 0x9C, 0x32, 0x41, 0x92, 0xC8, 0x61, 0x5A, 0x32, 0x26, 0x24, 0xC3, 0x29, 0x5A, 0xC8, 0x05, 0x0A, 0x06, 0x8E, 0xE1, 0x16, 0x20, ++ 0x99, 0x94, 0x61, 0x19, 0xA2, 0x0C, 0x1B, 0x05, 0x2E, 0x1B, 0x44, 0x64, 0x9A, 0x00, 0x84, 0x8C, 0x18, 0x52, 0x84, 0xB4, 0x60, 0x82, 0x20, 0x08, 0x42, 0x48, 0x09, 0x84, 0x08, 0x46, 0x11, 0x00, ++ 0x46, 0x13, 0x43, 0x01, 0xE1, 0x06, 0x91, 0x1B, 0x44, 0x8E, 0x01, 0x94, 0x64, 0x4A, 0x12, 0x09, 0x98, 0x38, 0x0E, 0xE4, 0x06, 0x25, 0x24, 0x13, 0x68, 0x13, 0x21, 0x06, 0x04, 0xB9, 0x40, 0x54, ++ 0x24, 0x25, 0x14, 0x88, 0x69, 0x82, 0x38, 0x01, 0xA4, 0x28, 0x72, 0x50, 0x86, 0x61, 0x23, 0xB1, 0x88, 0xA2, 0x90, 0x08, 0x1C, 0x95, 0x30, 0x1C, 0x40, 0x82, 0x49, 0xC8, 0x64, 0xCA, 0x04, 0x40, ++ 0x44, 0x98, 0x21, 0x0B, 0x24, 0x61, 0x1C, 0xA0, 0x4C, 0x09, 0xA4, 0x21, 0xC9, 0x08, 0x8A, 0x22, 0x13, 0x41, 0x80, 0xC8, 0x89, 0x23, 0xB1, 0x64, 0x1C, 0x11, 0x49, 0x40, 0xA2, 0x29, 0x61, 0xC8, ++ 0x8C, 0x8B, 0x96, 0x91, 0x83, 0x02, 0x42, 0xE1, 0xB6, 0x85, 0x51, 0x86, 0x4C, 0x04, 0x43, 0x91, 0x4B, 0xB8, 0x69, 0x50, 0x24, 0x81, 0xC8, 0x04, 0x2E, 0x1B, 0xB9, 0x31, 0x93, 0x24, 0x00, 0x23, ++ 0x86, 0x81, 0xC2, 0xB8, 0x61, 0x09, 0x00, 0x62, 0x14, 0x99, 0x41, 0x19, 0x37, 0x6E, 0x1C, 0x16, 0x30, 0x0A, 0x27, 0x45, 0x51, 0x10, 0x0D, 0x1C, 0x33, 0x4A, 0x10, 0x40, 0x80, 0xA0, 0x34, 0x62, ++ 0xD8, 0x44, 0x4A, 0x01, 0x06, 0x45, 0x23, 0x83, 0x8C, 0x24, 0xA4, 0x85, 0x01, 0x04, 0x0C, 0x09, 0x03, 0x32, 0xDB, 0x90, 0x09, 0x4A, 0x14, 0x42, 0x01, 0x08, 0x21, 0x22, 0x08, 0x66, 0x8B, 0x28, ++ 0x70, 0x24, 0x38, 0x31, 0x0C, 0x46, 0x69, 0x43, 0x44, 0x69, 0x9A, 0x34, 0x4D, 0x82, 0xC8, 0x40, 0x42, 0x42, 0x01, 0x23, 0xC7, 0x29, 0x91, 0x32, 0x72, 0x1B, 0x36, 0x4C, 0x1B, 0x33, 0x05, 0x13, ++ 0x35, 0x61, 0x14, 0x02, 0x46, 0x08, 0x03, 0x65, 0x21, 0x87, 0x20, 0x09, 0x03, 0x91, 0xC1, 0xC4, 0x25, 0xE2, 0xA6, 0x4C, 0x81, 0x14, 0x48, 0x20, 0x25, 0x4D, 0x03, 0x19, 0x69, 0xA3, 0x00, 0x69, ++ 0x54, 0xA8, 0x30, 0x9C, 0x86, 0x05, 0x9C, 0x36, 0x82, 0x03, 0x37, 0x0C, 0x0A, 0x15, 0x50, 0x9C, 0xC0, 0x91, 0x04, 0xB6, 0x91, 0x0C, 0x11, 0x80, 0x09, 0xB5, 0x70, 0x63, 0x20, 0x92, 0x44, 0x22, ++ 0x71, 0xC1, 0x48, 0x44, 0x98, 0xC4, 0x6D, 0x64, 0xA6, 0x89, 0x0A, 0xA9, 0x40, 0x04, 0xB8, 0x50, 0x04, 0x34, 0x8C, 0xE2, 0xC4, 0x80, 0x02, 0x00, 0x12, 0xA3, 0x36, 0x46, 0xD2, 0x00, 0x01, 0x1C, ++ 0x45, 0x46, 0x22, 0x33, 0x6D, 0x81, 0x92, 0x01, 0x08, 0x12, 0x86, 0x9C, 0x04, 0x51, 0xA3, 0x98, 0x30, 0x48, 0x10, 0x91, 0x19, 0xA0, 0x44, 0xC3, 0x04, 0x8D, 0x42, 0x90, 0x40, 0x43, 0x80, 0x44, ++ 0xA4, 0x46, 0x71, 0x0B, 0xA2, 0x60, 0x52, 0x18, 0x6D, 0x0B, 0xB6, 0x85, 0x1B, 0xB2, 0x0C, 0x94, 0x12, 0x09, 0x04, 0xB6, 0x41, 0x18, 0xA8, 0x84, 0x10, 0x00, 0x22, 0x53, 0x42, 0x69, 0xC3, 0xA8, ++ 0x81, 0x00, 0x25, 0x32, 0x81, 0x16, 0x28, 0x81, 0x44, 0x2D, 0xD4, 0xB4, 0x4D, 0x08, 0xC8, 0x45, 0x5A, 0x04, 0x01, 0xC1, 0x90, 0x50, 0x22, 0x14, 0x82, 0x63, 0xC6, 0x6D, 0x04, 0x22, 0x72, 0x1C, ++ 0xB9, 0x44, 0x9B, 0x46, 0x0D, 0xC2, 0x14, 0x22, 0x91, 0xB0, 0x44, 0x21, 0x89, 0x68, 0xC4, 0x96, 0x08, 0x0A, 0xB9, 0x8C, 0x22, 0xB9, 0x40, 0xE2, 0x26, 0x50, 0x8C, 0x88, 0x25, 0xCB, 0xB8, 0x04, ++ 0x54, 0x16, 0x25, 0x63, 0x34, 0x0C, 0x24, 0xB0, 0x29, 0xA3, 0x44, 0x20, 0x43, 0x46, 0x40, 0x9C, 0x02, 0x48, 0x5A, 0xC8, 0x2C, 0x00, 0x05, 0x31, 0x09, 0x18, 0x00, 0xDB, 0x46, 0x51, 0xD2, 0xB6, ++ 0x2C, 0x44, 0x40, 0x88, 0x9A, 0x96, 0x24, 0x12, 0xA5, 0x90, 0x04, 0x39, 0x86, 0x10, 0x80, 0x2D, 0x10, 0x99, 0x21, 0x60, 0x06, 0x66, 0x21, 0x89, 0x4C, 0x91, 0x04, 0x60, 0x23, 0xB9, 0x01, 0x12, ++ 0x11, 0x48, 0x12, 0x29, 0x51, 0xA1, 0x06, 0x45, 0x44, 0x22, 0x12, 0x03, 0x27, 0x8E, 0x23, 0x94, 0x84, 0x0C, 0x29, 0x06, 0x94, 0x86, 0x50, 0xE0, 0x48, 0x10, 0x24, 0x26, 0x40, 0x61, 0x04, 0x66, ++ 0x9C, 0xB2, 0x84, 0x54, 0xC2, 0x2C, 0x03, 0x82, 0x0E, 0x01, 0x00, 0xD6, 0xD4, 0x27, 0x24, 0xCA, 0xFD, 0xF2, 0x81, 0xB9, 0xCA, 0xDC, 0x58, 0x04, 0x84, 0x83, 0x95, 0x49, 0x25, 0x4C, 0x9B, 0xE0, ++ 0xA1, 0xF9, 0xAA, 0x9D, 0x76, 0xE6, 0x54, 0x63, 0xCD, 0x83, 0x14, 0x20, 0x65, 0xE7, 0xF7, 0x47, 0xBD, 0x27, 0x4C, 0xF3, 0x7E, 0x85, 0x70, 0xE0, 0xE6, 0x3A, 0xDB, 0xF8, 0x5F, 0x31, 0x79, 0x14, ++ 0x75, 0xFF, 0x1A, 0x2F, 0x50, 0x5B, 0x53, 0x24, 0x77, 0x2C, 0xB0, 0xEB, 0x21, 0x9E, 0x2C, 0x28, 0xC4, 0xEF, 0xBC, 0x31, 0xE7, 0x13, 0xDF, 0x18, 0x77, 0x25, 0xB7, 0xBD, 0xE2, 0x90, 0xE6, 0x08, ++ 0x98, 0x5B, 0x7D, 0x8A, 0x71, 0x14, 0x42, 0xD4, 0x03, 0xD2, 0x56, 0xF5, 0x35, 0xA4, 0x27, 0x1F, 0x6C, 0xC6, 0x5F, 0x91, 0xF1, 0xA7, 0x3F, 0x3B, 0x33, 0x94, 0x83, 0x3D, 0xF0, 0x12, 0x79, 0xDC, ++ 0x71, 0xFB, 0x60, 0xBD, 0x14, 0x13, 0xBF, 0x23, 0xBA, 0x3A, 0x20, 0xC7, 0x15, 0xC1, 0x30, 0xDA, 0x19, 0x2D, 0x05, 0x1F, 0xF6, 0xEA, 0x7E, 0xDD, 0xBB, 0x81, 0xDB, 0xC4, 0xBE, 0xBA, 0xF6, 0x71, ++ 0x41, 0x23, 0x6E, 0x5D, 0x9E, 0x09, 0x93, 0xFB, 0x7D, 0xC7, 0x06, 0x44, 0x83, 0xDA, 0x06, 0x99, 0xE8, 0x40, 0x21, 0x76, 0xC6, 0xB2, 0x0F, 0x24, 0x0D, 0x35, 0x87, 0xBC, 0x1B, 0x07, 0x3C, 0x9A, ++ 0xA0, 0x09, 0xCB, 0xC1, 0xB0, 0x5F, 0x49, 0xCC, 0xBB, 0x25, 0x13, 0x12, 0x96, 0x92, 0xDF, 0x1C, 0xEC, 0xDA, 0x29, 0x54, 0xCC, 0xEC, 0xC1, 0x7B, 0xBB, 0x1D, 0x11, 0x96, 0x4F, 0xAE, 0xB0, 0xF9, ++ 0xE0, 0x29, 0x21, 0x29, 0x59, 0xB6, 0x8E, 0x4B, 0xE0, 0x66, 0x64, 0xF9, 0x58, 0x74, 0x32, 0xC0, 0x2D, 0xE6, 0x15, 0x88, 0x51, 0x55, 0x57, 0x56, 0x5A, 0x26, 0xA6, 0xEC, 0xD6, 0xB4, 0xDE, 0x47, ++ 0xF0, 0xB6, 0x47, 0x63, 0x77, 0x81, 0xEC, 0x19, 0x49, 0x32, 0xD2, 0x82, 0xFF, 0x1F, 0x83, 0x5E, 0xB8, 0x09, 0x66, 0xAB, 0xA2, 0x16, 0xB4, 0xE7, 0xF8, 0x8E, 0xAB, 0x97, 0x05, 0x21, 0x26, 0x4D, ++ 0xB5, 0xD6, 0xF2, 0x83, 0xA4, 0xF6, 0x79, 0x1E, 0x32, 0x9F, 0xB8, 0xCB, 0x54, 0x25, 0xB9, 0x13, 0x9E, 0x96, 0xAB, 0xB3, 0x94, 0x4E, 0x35, 0xBB, 0x88, 0x64, 0x2A, 0xC0, 0xE7, 0xDC, 0xDA, 0xB9, ++ 0xB5, 0x59, 0xD0, 0x9E, 0x29, 0x55, 0x72, 0xB2, 0x52, 0x92, 0xC0, 0x3C, 0xD5, 0xAB, 0x5E, 0x7B, 0xBE, 0x77, 0x61, 0xD8, 0x58, 0x3F, 0xAD, 0x91, 0x66, 0x91, 0x3F, 0xDE, 0x1B, 0x65, 0x8F, 0x87, ++ 0x26, 0xC3, 0xF7, 0xE6, 0xD2, 0x65, 0x63, 0x17, 0xDA, 0xAF, 0xB9, 0x2E, 0x78, 0x7D, 0x24, 0xC5, 0xD8, 0x94, 0x7F, 0xF5, 0x95, 0xA5, 0x85, 0x3D, 0x61, 0x11, 0x73, 0xDF, 0x20, 0xF0, 0xAE, 0x01, ++ 0x50, 0x75, 0x8C, 0x6B, 0x13, 0x1D, 0xFD, 0xEF, 0x36, 0xA0, 0x1D, 0x7C, 0x87, 0x4D, 0x0B, 0x8C, 0xD0, 0xC2, 0x53, 0x83, 0x56, 0x94, 0x06, 0xCB, 0xE4, 0x2A, 0x72, 0xD7, 0x09, 0x7E, 0x84, 0xD9, ++ 0x82, 0x58, 0x39, 0xEB, 0xD1, 0x4F, 0x17, 0x5E, 0xD5, 0x1E, 0x6A, 0xC1, 0xA3, 0xF7, 0xF7, 0xBE, 0xFF, 0x60, 0xF5, 0xC0, 0x72, 0x73, 0x42, 0xD7, 0xDD, 0x34, 0x76, 0xDC, 0x9A, 0xE0, 0xE2, 0x7E, ++ 0xDB, 0xB8, 0x86, 0xBF, 0xA0, 0x0D, 0x36, 0xFE, 0x80, 0xDA, 0x81, 0x6A, 0x45, 0xE0, 0xC8, 0x00, 0x0B, 0x6E, 0x23, 0xE9, 0xB5, 0xCA, 0xD0, 0x13, 0xB6, 0xDE, 0xBF, 0x74, 0x9E, 0xB7, 0x27, 0xB8, ++ 0xD8, 0x3B, 0xFE, 0x26, 0xF6, 0xC5, 0x99, 0xD5, 0xBD, 0x45, 0xB5, 0x82, 0xB8, 0x4F, 0x4F, 0xC8, 0x34, 0x10, 0xEE, 0x2A, 0x67, 0x5C, 0x66, 0x14, 0x5F, 0x52, 0xCF, 0x36, 0x83, 0x29, 0x0C, 0xC7, ++ 0x2A, 0x29, 0x28, 0x5D, 0x70, 0x66, 0x7A, 0x3A, 0x31, 0x58, 0x93, 0x54, 0xD9, 0x19, 0x31, 0x62, 0x5F, 0xFA, 0xCF, 0xB7, 0xE0, 0x2C, 0x03, 0xFE, 0x48, 0x09, 0x2A, 0x12, 0x0E, 0x5F, 0x43, 0x12, ++ 0x76, 0xE8, 0x37, 0x4D, 0xBE, 0x15, 0x40, 0x96, 0xC8, 0x6C, 0x58, 0x79, 0x10, 0xF5, 0x05, 0x1A, 0x86, 0x14, 0x17, 0xC0, 0x6A, 0x73, 0x48, 0x0C, 0xE3, 0x19, 0x5C, 0xC9, 0x99, 0xF6, 0xB8, 0xB3, ++ 0x01, 0x9B, 0x22, 0x37, 0x96, 0xC5, 0xE1, 0x1F, 0x73, 0x42, 0xC9, 0x74, 0x6A, 0xED, 0xBF, 0xA9, 0x44, 0xCD, 0x79, 0xB8, 0x5C, 0x10, 0x00, 0x07, 0xBB, 0x58, 0x69, 0x84, 0x3A, 0x23, 0xAD, 0x06, ++ 0xD8, 0x1F, 0x5C, 0xB2, 0x9D, 0xD1, 0x7B, 0xCE, 0xE7, 0x55, 0x72, 0xB9, 0xE0, 0xCF, 0xDB, 0xD5, 0xA8, 0x3A, 0x30, 0x57, 0x44, 0x2D, 0xF0, 0x00, 0xDA, 0x7A, 0x3A, 0xA6, 0xFC, 0x5F, 0xB2, 0x89, ++ 0xA1, 0x29, 0x99, 0x24, 0xD9, 0x23, 0x1F, 0xE1, 0xD0, 0xCF, 0x3C, 0x17, 0xF1, 0x80, 0x3F, 0x61, 0x43, 0xC0, 0x97, 0xF9, 0x54, 0x2C, 0x9A, 0xBB, 0x8F, 0x98, 0x77, 0xE4, 0xAE, 0xC5, 0x4A, 0xB9, ++ 0x39, 0x93, 0xDC, 0x49, 0x87, 0xDF, 0x67, 0x80, 0x8B, 0xF7, 0xBE, 0xDE, 0xA8, 0x6B, 0x5C, 0x83, 0xD2, 0x48, 0xE9, 0x5E, 0xA3, 0x02, 0x45, 0x3F, 0x5F, 0x6B, 0x7F, 0xF5, 0xB5, 0xF5, 0x8B, 0x65, ++ 0xD9, 0x32, 0xD2, 0xBF, 0x73, 0x7C, 0x51, 0x89, 0x3D, 0x89, 0xF0, 0x7D, 0xA5, 0xBF, 0xEA, 0x79, 0xD7, 0xE7, 0xFB, 0x2A, 0xAB, 0x82, 0x33, 0xA2, 0x7E, 0xB4, 0x4C, 0x68, 0x58, 0x05, 0x1D, 0x92, ++ 0xB9, 0x98, 0xBC, 0x47, 0x51, 0xA4, 0x90, 0x2A, 0xA2, 0x22, 0xDE, 0x2D, 0x5C, 0xDC, 0xEC, 0x26, 0xB3, 0x6D, 0xBA, 0x47, 0xCC, 0xEB, 0x41, 0xFB, 0x19, 0x2D, 0xDF, 0xFD, 0x55, 0x12, 0xD8, 0x2B, ++ 0x1B, 0xD3, 0x4D, 0x1E, 0xAA, 0x42, 0xF8, 0xCC, 0x50, 0x3F, 0x23, 0x85, 0x92, 0x42, 0x07, 0x9C, 0xBC, 0x1A, 0x55, 0xF0, 0x95, 0xAB, 0xB3, 0xC1, 0x87, 0x9F, 0xD1, 0xB4, 0x85, 0x04, 0xD8, 0x05, ++ 0x4C, 0x15, 0xEB, 0x3E, 0xBF, 0x54, 0xA3, 0x2C, 0x5B, 0x62, 0xC0, 0x55, 0x55, 0xE4, 0xAC, 0x60, 0x36, 0x91, 0x9B, 0xB9, 0xA1, 0xBB, 0x53, 0x9E, 0x78, 0x86, 0x7A, 0x74, 0xF5, 0x3C, 0x23, 0xB1, ++ 0xA1, 0x35, 0x98, 0x7D, 0x8B, 0xDD, 0x63, 0xE0, 0x92, 0xAB, 0x2B, 0xF1, 0xD8, 0xF6, 0x60, 0x38, 0xE1, 0x49, 0xAE, 0x41, 0x0B, 0x09, 0xAB, 0x25, 0xB4, 0xFE, 0x65, 0x53, 0xB3, 0x0E, 0x7B, 0xA7, ++ 0xBF, 0x01, 0x36, 0x36, 0x8E, 0x3B, 0x8B, 0x73, 0x23, 0xA1, 0x24, 0x89, 0x02, 0x94, 0x7B, 0x2A, 0x39, 0x85, 0xB5, 0xC5, 0xCB, 0x80, 0x27, 0xAE, 0xF8, 0xA9, 0xE3, 0x42, 0xA3, 0xB7, 0x54, 0x3C, ++ 0x31, 0x54, 0x72, 0x49, 0xFC, 0x77, 0x7C, 0x59, 0x2A, 0x31, 0xB8, 0x5B, 0x4B, 0x07, 0xE0, 0xAD, 0x87, 0x61, 0x2C, 0x3D, 0xF4, 0x9B, 0x9E, 0xB6, 0x6A, 0x53, 0xF4, 0x11, 0xC6, 0xD6, 0xDE, 0x9F, ++ 0x26, 0x86, 0x95, 0x07, 0x74, 0x80, 0x6A, 0xD0, 0xCE, 0xBF, 0x25, 0x4C, 0x18, 0x2F, 0x3A, 0x5D, 0xF9, 0xE4, 0x29, 0xF0, 0x79, 0x2E, 0x96, 0x35, 0x95, 0xB8, 0x42, 0x6B, 0xB0, 0xCB, 0x53, 0x62, ++ 0x75, 0x36, 0x26, 0x5C, 0x4F, 0x63, 0x46, 0xB4, 0xB0, 0x72, 0xEA, 0xB4, 0xD1, 0xE6, 0x87, 0xA4, 0xDE, 0x7B, 0x82, 0x89, 0x90, 0xEB, 0xF3, 0x38, 0x1F, 0x0B, 0x70, 0xE9, 0x26, 0xD6, 0x7B, 0x76, ++ 0x89, 0x73, 0xF1, 0x02, 0x40, 0x80, 0xBD, 0x40, 0xC6, 0x7B, 0x81, 0x04, 0x09, 0x34, 0xD1, 0xC3, 0xC3, 0x77, 0x4D, 0xDE, 0x93, 0x28, 0xBE, 0x69, 0xBB, 0xD5, 0xDF, 0xE3, 0xF2, 0x80, 0xDB, 0x77, ++ 0xFF, 0xC1, 0xA7, 0x8D, 0x11, 0x13, 0x34, 0xB4, 0x21, 0x97, 0x00, 0x2B, 0xD8, 0x5C, 0xD7, 0xCD, 0xF7, 0xCB, 0xB6, 0xED, 0x3F, 0x41, 0xCB, 0xB9, 0xAD, 0x48, 0x1F, 0x44, 0xA3, 0x35, 0x11, 0x55, ++ 0xA5, 0x22, 0x35, 0x0A, 0x65, 0x8F, 0x69, 0x92, 0x11, 0xD7, 0xAA, 0x5E, 0x68, 0xA5, 0x27, 0x94, 0x76, 0xC0, 0x0B, 0xD9, 0xEE, 0x01, 0x0C, 0xEC, 0x6E, 0x51, 0x02, 0xD2, 0x70, 0x54, 0xC9, 0x74, ++ 0xD1, 0x6B, 0xE4, 0xA6, 0xC6, 0x85, 0x99, 0xAE, 0x83, 0x01, 0x9C, 0xB1, 0x32, 0x4E, 0x35, 0x10, 0x4F, 0x10, 0x5A, 0x59, 0xE6, 0xCF, 0x07, 0x67, 0x30, 0xF3, 0x3A, 0x03, 0xED, 0xD7, 0xC9, 0x2E, ++ 0x07, 0x36, 0xB5, 0x42, 0x98, 0x79, 0x0C, 0xA8, 0xD5, 0x28, 0x72, 0x74, 0x28, 0x23, 0x73, 0x19, 0x9E, 0x90, 0xB9, 0x49, 0x13, 0xB9, 0x9C, 0x06, 0xD7, 0xD5, 0xB6, 0xC4, 0x18, 0xF5, 0x5B, 0x66, ++ 0x14, 0x13, 0x31, 0x13, 0x0E, 0x6B, 0xD5, 0x61, 0x52, 0xB8, 0xDB, 0x19, 0xB2, 0xFB, 0x1B, 0xB6, 0x5C, 0x8D, 0x21, 0xFC, 0xD4, 0xBE, 0x45, 0x1A, 0x4A, 0x1C, 0x0F, 0xEE, 0x73, 0xDB, 0xC3, 0x55, ++ 0x7D, 0x36, 0x2C, 0x45, 0x3D, 0x8E, 0x6A, 0x43, 0xE9, 0x9E, 0x47, 0x97, 0xD1, 0xF2, 0x5B, 0x1A, 0x58, 0x98, 0x14, 0x81, 0x1D, 0x66, 0xB7, 0x31, 0xA7, 0x5E, 0x99, 0x3F, 0xF1, 0xD3, 0xBC, 0x42, ++ 0x11, 0xF8, 0xC1, 0x51, 0x0B, 0x90, 0x40, 0x50, 0x68, 0x94, 0xB8, 0x6B, 0xA9, 0xFB, 0xA3, 0x55, 0x49, 0x61, 0xDF, 0x34, 0xFD, 0xB7, 0x65, 0x5F, 0xD9, 0x28, 0x37, 0x8B, 0x4E, 0x65, 0x00, 0x14, ++ 0x77, 0xD1, 0xFC, 0xF1, 0x8C, 0xB7, 0x1C, 0x5E, 0x41, 0x71, 0x69, 0x6F, 0x33, 0xB2, 0xB6, 0x76, 0x30, 0x38, 0xD5, 0x12, 0xAC, 0xB0, 0xF7, 0xFE, 0xEE, 0x76, 0xF0, 0xFB, 0x16, 0x4E, 0x30, 0xFE, ++ 0xB7, 0xD6, 0x37, 0xB3, 0xAB, 0x1E, 0x7F, 0x25, 0x1E, 0xF8, 0xC0, 0x54, 0x31, 0x46, 0x1C, 0x3A, 0xB9, 0x0F, 0x05, 0x7D, 0xA0, 0xF4, 0xD8, 0xC3, 0xB3, 0x78, 0x7A, 0xE5, 0x8C, 0xB0, 0x13, 0x6D, ++ 0x68, 0xAC, 0xB6, 0x40, 0x7B, 0xCF, 0x67, 0x16, 0x20, 0x72, 0x3A, 0x02, 0x30, 0xD4, 0xF7, 0xDD, 0x7A, 0xDE, 0x77, 0x0C, 0x41, 0x8F, 0xCA, 0xD9, 0x97, 0x8F, 0x7C, 0x96, 0x22, 0x26, 0xCA, 0x6D, ++ 0x65, 0x79, 0xBA, 0xDC, 0x67, 0x52, 0x23, 0x7C, 0x99, 0xD2, 0x4C, 0xA8, 0x04, 0xE9, 0xF1, 0xFC, 0xDC, 0x9A, 0xAA, 0x11, 0x1F, 0x2C, 0x90, 0x5E, 0xF0, 0x31, 0x69, 0x0D, 0x17, 0x65, 0xE8, 0x21, ++ 0x93, 0x8A, 0x0B, 0x78, 0x46, 0xC3, 0xBB, 0x80, 0xDB, 0xEF, 0x95, 0x30, 0xC6, 0x8C, 0xAA, 0x0A, 0xDA, 0x96, 0x2A, 0x59, 0x5F, 0xD9, 0xE7, 0xAB, 0xD9, 0xE1, 0xF7, 0x6F, 0xF2, 0x97, 0xE1, 0x78, ++ 0x50, 0x54, 0x13, 0xEE, 0x95, 0xFC, 0x0A, 0x95, 0x8D, 0x72, 0x0C, 0x2A, 0x23, 0x86, 0xA1, 0x64, 0x50, 0xF9, 0x7D, 0xE5, 0x8E, 0xE2, 0x27, 0xBF, 0xA3, 0x3C, 0xAA, 0xC0, 0x3F, 0x13, 0x5A, 0x83, ++ 0x45, 0x46, 0x9F, 0x26, 0xC7, 0x70, 0x26, 0x91, 0x5E, 0xE2, 0x0F, 0xBD, 0x82, 0xB0, 0x9B, 0x02, 0xFE, 0xA7, 0x7A, 0xBC, 0xFB, 0x9D, 0xA8, 0x94, 0xD8, 0x67, 0x6E, 0x16, 0x0F, 0x1E, 0x1C, 0xEA, ++ 0x42, 0x0B, 0x2C, 0xFE, 0x14, 0xFF, 0x08, 0xE1, 0x65, 0x0D, 0x56, 0x5B, 0x6C, 0xDF, 0x6A, 0xD7, 0xEE, 0x51, 0x3D, 0xC1, 0xE7, 0x34, 0x30, 0x96, 0xDD, 0x26, 0x5C, 0x45, 0x9F, 0xA1, 0x7C, 0x55, ++ 0xE5, 0xD6, 0xC6, 0x38, 0x28, 0xBC, 0xC4, 0xB7, 0x2A, 0x2A, 0x02, 0x7C, 0x31, 0xD2, 0x43, 0x8A, 0x7B, 0xFF, 0x42, 0x77, 0x3F, 0xED, 0x94, 0x35, 0xC3, 0xC6, 0xED, 0x66, 0x4D, 0x35, 0x41, 0x86, ++ 0x58, 0xCB, 0x13, 0x37, 0x43, 0xF4, 0x82, 0x73, 0x2F, 0x6F, 0xB2, 0xC8, 0x9C, 0x68, 0x00, 0x05, 0x20, 0x9D, 0xFB, 0xEE, 0xAB, 0x70, 0x2A, 0x39, 0x11, 0xA8, 0x7D, 0xD5, 0x5E, 0xF3, 0x9F, 0x40, ++ 0x93, 0x70, 0xBE, 0x94, 0x88, 0x84, 0x42, 0xB0, 0x8D, 0xB3, 0x37, 0x08, 0xBC, 0xB3, 0x1A, 0x14, 0x07, 0x30, 0x3B, 0x4F, 0xED, 0xF3, 0x11, 0xC1, 0x52, 0x63, 0x57, 0x9F, 0x81, 0x74, 0x6C, 0xED, ++ 0xFB, 0x79, 0x0C, 0xA0, 0x30, 0x4C, 0x88, 0xFC, 0xCA, 0x59, 0x56, 0xE9, 0xF8, 0x19, 0xFE, 0xFF, 0xAC, 0x13, 0xC6, 0x4D, 0x96, 0xC4, 0x3C, 0x98, 0xD8, 0x8F, 0xEC, 0x8F, 0xD9, 0x83, 0xC1, 0xC5, ++ 0x19, 0xCB, 0x88, 0x4D, 0x2E, 0x7A, 0x90, 0xCD, 0xF3, 0x65, 0xFE, 0x5F, 0xB5, 0xDA, 0x8F, 0xAB, 0x74, 0xF0, 0x73, 0xBA, 0x25, 0x8D, 0x26, 0x4F, 0x94, 0x2D, 0x14, 0xD6, 0xE2, 0xE9, 0x08, 0x29, ++ 0xAE, 0x35, 0x74, 0x6D, 0x05, 0x7A, 0x18, 0x0E, 0x56, 0x38, 0x42, 0xF5, 0x4C, 0x4B, 0xC7, 0xD5, 0x00, 0x49, 0x43, 0x24, 0x72, 0xD1, 0xED, 0xF1, 0x38, 0xF2, 0xE5, 0x86, 0x26, 0xAB, 0x8C, 0x96, ++ 0xE6, 0x00, 0xED, 0x19, 0x36, 0xF3, 0x38, 0x80, 0xF4, 0xF2, 0x20, 0x1B, 0x61, 0x07, 0xC4, 0xEF, 0xB9, 0xC0, 0x2E, 0xCF, 0x31, 0x44, 0xE3, 0xAC, 0x55, 0xB0, 0xEE, 0x51, 0x68, 0xA7, 0x93, 0xB1, ++ 0x5D, 0xB4, 0xA6, 0x1B, 0xFF, 0xFC, 0x8B, 0xE4, 0xA3, 0x80, 0x40, 0xA0, 0x6C, 0x31, 0xF5, 0x15, 0x2D, 0x7C, 0x95, 0xF8, 0xC4, 0x94, 0x45, 0x12, 0x4D, 0x07, 0x20, 0x95, 0xFC, 0x14, 0xF6, 0x79, ++ 0xDF, 0x55, 0xDC, 0x1E, 0x7F, 0xBE, 0x48, 0x83, 0xDA, 0xA3, 0x50, 0xF2, 0x16, 0x98, 0xEB, 0x78, 0xB2, 0x9A, 0xDB, 0xD0, 0x71, 0x53, 0x58, 0xF9, 0x65, 0x27, 0x8A, 0xF8, 0x67, 0xC1, 0x2E, 0x2B, ++ 0xB1, 0x9F, 0xFA, 0x16, 0x50, 0x27, 0x69, 0xF4, 0xFB, 0xDB, 0x20, 0x82, 0x2D, 0x1D, 0xE1, 0xFB, 0x6E, 0x41, 0x6D, 0x82, 0x29, 0x32, 0xB5, 0xCD, 0x5B, 0x37, 0x0A, 0x58, 0x65, 0x56, 0x07, 0x56, ++ 0xD7, 0x6D, 0x8C, 0x2F, 0xE4, 0x70, 0x4E, 0x0B, 0x15, 0x83, 0xEB, 0x5D, 0x23, 0x5E, 0xC3, 0xFE, 0x7F, 0xF4, 0x98, 0xE1, 0x35, 0x61, 0x00, 0xC5, 0x80, 0x76, 0x3E, 0xB5, 0xF2, 0x36, 0x35, 0x62, ++ 0x0C, 0xF6, 0xCC, 0x56, 0xE7, 0x4B, 0x48, 0x22, 0x3C, 0x70, 0xB5, 0xE5, 0x23, 0xAC, 0x61, 0xEA, 0xAE, 0xF8, 0x8E, 0x4D, 0xD1, 0x50, 0x5D, 0x25, 0xC9, 0x65, 0x8B, 0x96, 0xE9, 0x32, 0xCE, 0x0B, ++ 0xD0, 0xEF, 0xFE, 0x80, 0xBA, 0xA5, 0xD1, 0x05, 0xA6, 0x51, 0x4B, 0x25, 0x57, 0x8D, 0x1F, 0x3F, 0xCC, 0x8F, 0xF5, 0xF9, 0x3A, 0x7C, 0xDD, 0xCC, 0xE0, 0x84, 0x0F, 0x63, 0x1B, 0xE0, 0x2B, 0xCA, ++ 0x85, 0x20, 0x98, 0xDC, 0xFA, 0x06, 0x56, 0xF0, 0x8A, 0xF1, 0xBD, 0xC8, 0xE2, 0x4A, 0x27, 0x46, 0x74, 0x16, 0xF4, 0x87, 0xAD, 0x02, 0x60, 0x22, 0xDD, 0x5E, 0x1E, 0x1E, 0xFD, 0xC9, 0xC2, 0xB4, ++ 0x71, 0xE3, 0x26, 0x53, 0x65, 0xF2, 0x0B, 0xC8, 0x21, 0x86, 0x37, 0x66, 0x25, 0x5D, 0x0A, 0xAC, 0x67, 0xB6, 0x58, 0xE6, 0x63, 0x3F, 0xD2, 0xC9, 0x3F, 0x80, 0xE5, 0x55, 0x5C, 0x6B, 0x3F, 0x9B, ++ 0x9C, 0x54, 0x02, 0x62, 0xF9, 0x2E, 0x57, 0x5E, 0xCA, 0x8C, 0xBD, 0xDE, 0xA2, 0x5E, 0x35, 0x59, 0x9F, 0xAF, 0xE0, 0x90, 0x20, 0x1D, 0x53, 0x1A, 0x96, 0xA6, 0x59, 0x5F, 0x6B, 0xC0, 0xA0, 0x83, ++ 0x47, 0xF4, 0x54, 0xFC, 0x12, 0x6A, 0x16, 0x21, 0x64, 0xA0, 0xD5, 0x07, 0x39, 0xF3, 0x0A, 0xB2, 0x29, 0x89, 0xF8, 0x88, 0xE4, 0xDF, 0xA3, 0x56, 0x13, 0x7A, 0x3E, 0x65, 0xEC, 0xB5, 0xF4, 0x7E, ++ 0x20, 0x0E, 0x73, 0x36, 0xA2, 0xF0, 0xA5, 0xC5, 0x47, 0xA2, 0x36, 0x7F, 0x1D, 0x0F, 0xDE, 0xA8, 0x9D, 0x00, 0x69, 0x8D, 0x96, 0x2E, 0x62, 0xE8, 0xDA, 0xA5, 0x70, 0xEE, 0x07, 0x7B, 0x9E, 0xB8, ++ 0x18, 0xED, 0x82, 0x75, 0xB2, 0x3E, 0x73, 0x39, 0xFA, 0x3A, 0x6C, 0x9E, 0xF0, 0xD3, 0xC9, 0x78, 0xEE, 0xF7, 0x5B, 0xC9, 0x77, 0xAA, 0xFE, 0x87, 0xB1, 0xA4, 0x1F, 0xED, 0x4C, 0x7D, 0xA1, 0x7E, ++ 0x2B, 0xBE, 0xCC, 0xA8, 0xF4, 0x06, 0xF0, 0x40, 0xB1, 0x6F, 0xDD, 0xFB, 0x2E, 0x8F, 0x47, 0x0C, 0x25, 0x40, 0x9B, 0x8C, 0x7C, 0x13, 0x88, 0xE6, 0x08, 0xEB, 0xBA, 0xE2, 0x67, 0xF7, 0x7C, 0x5F, ++ 0xE0, 0x10, 0xF6, 0x91, 0x7B, 0xC6, 0xCA, 0x7B, 0xF6, 0x86, 0x5F, 0xAA, 0x73, 0xE1, 0x0F, 0x2F, 0x60, 0xD2, 0x2D, 0xB2, 0x4A, 0x21, 0x71, 0x81, 0xBE, 0x56, 0xFD, 0x47, 0x3E, 0xE7, 0xAF, 0x5E, ++ 0xD5, 0x60, 0x9A, 0xDA, 0x02, 0x36, 0xFA, 0xB3, 0x06, 0x6C, 0x3D, 0xAD, 0x28, 0xA2, 0x4F, 0x67, 0xD4, 0xCC, 0x1C, 0xEF, 0xE6, 0x10, 0x6F, 0x5E, 0x54, 0x27, 0xAC, 0xCD, 0xC7, 0x3F, 0xF8, 0x85, ++ 0x76, 0xA2, 0x7A, 0xEB, 0xE7, 0x1A, 0x33, 0xDB, 0x3C, 0x08, 0x02, 0xD6, 0x97, 0x18, 0x95, 0x6C, 0xD9, 0xD1, 0x5A, 0xAA, 0x9A, 0x2D, 0xE3, 0xAC, 0x62, 0x10, 0x10, 0x0A, 0x2E, 0x39, 0xAF, 0x5B, ++ 0xA9, 0x1D, 0xFA, 0x21, 0x8C, 0x53, 0x72, 0x66, 0x06, 0x2E, 0x32, 0x6E, 0x2F, 0xF8, 0xC4, 0x4D, 0x17, 0x80, 0xFB, 0xAF, 0xF4, 0xAD, 0xBA, 0x82, 0x71, 0x17, 0xE0, 0xBC, 0xB7, 0xA4, 0xC8, 0xF2, ++ 0x61, 0x39, 0x81, 0x71, 0x3F, 0xA5, 0x98, 0xA4, 0x68, 0x3A, 0x46, 0x70, 0x85, 0x4C, 0x94, 0x67, 0xF2, 0x5A, 0x65, 0x6D, 0xDB, 0x6E, 0x7C, 0x3E, 0xF1, 0x92, 0xEB, 0xBD, 0xEE, 0x15, 0x3A, 0x59, ++ 0x41, 0x61, 0x95, 0x26, 0xB3, 0x17, 0x87, 0x54, 0x4F, 0xE2, 0x31, 0x2A, 0x28, 0x98, 0x9C, 0x6A, 0xA3, 0xAC, 0xC0, 0xFE, 0x44, 0x23, 0x14, 0xFD, 0xFB, 0xD8, 0x08, 0x7F, 0x2B, 0x75, 0x5E, 0xB4, ++ 0xB7, 0x35, 0x55, 0x76, 0x28, 0x3F, 0xA8, 0x6C, 0xD2, 0xD9, 0xEC, 0x1A, 0x6B, 0xD9, 0x4E, 0x6C, 0x5D, 0x72, 0x82, 0x02, 0xEC, 0x0B, 0x6E, 0xDF, 0xE1, 0xF3, 0x35, 0x84, 0x11, 0xC4, 0x9E, 0xC1, ++ 0x10, 0x63, 0xAC, 0x1E, 0xDE, 0xB2, 0x1B, 0x95, 0xD7, 0x13, 0xD9, 0x0B, 0xE4, 0x96, 0xD8, 0x55, 0x84, 0xAA, 0x64, 0x25, 0x47, 0x14, 0x80, 0x84, 0x4E, 0x5B, 0xE2, 0xD7, 0x05, 0x3E, 0x87, 0x22, ++ 0x03, 0x64, 0x79, 0xBD, 0xCB, 0x36, 0x38, 0x35, 0xBB, 0x08, 0xB0, 0x10, 0xDD, 0x0C, 0x08, 0x0E, 0x3D, 0x85, 0x24, 0xAE, 0x62, 0x21, 0x3E, 0x20, 0x8E, 0xC4, 0x12, 0xD0, 0x1F, 0xC9, 0xCE, 0xFA, ++ 0x9C, 0x0A, 0xBD, 0x39, 0x64, 0x96, 0x45, 0x51, 0x84, 0xDB, 0x24, 0x4A, 0xD6, 0xBE, 0xB4, 0x5F, 0xB7, 0x68, 0x47, 0x91, 0x62, 0x47, 0x44, 0x33, 0x52, 0x0C, 0xE0, 0x63, 0x03, 0xFF, 0xC6, 0x06, ++ 0x07, 0xDD, 0x43, 0x29, 0x62, 0x88, 0x4F, 0x8A, 0xA6, 0x54, 0x39, 0x98, 0xE1, 0xFB, 0x24, 0xDA, 0xF8, 0xAB, 0x3F, 0xF8, 0x62, 0xA8, 0x16, 0xA3, 0x98, 0x28, 0xF5, 0x7B, 0x54, 0x7A, 0xE7, 0x66, ++ 0x98, 0x3F, 0x7C, 0xFA, 0xC8, 0x50, 0x23, 0xDC, 0x65, 0x53, 0x43, 0x12, 0x74, 0xB8, 0x40, 0x19, 0xDB, 0xD8, 0x5D, 0x2C, 0x42, 0x9D, 0x2B, 0x01, 0xE3, 0xC0, 0xA5, 0xDE, 0x1E, 0x6C, 0xC8, 0x5E, ++ 0x62, 0x57, 0x9B, 0x00, 0x12, 0x6E, 0x6F, 0xE8, 0x1A, 0xB2, 0xEC, 0x08, 0x85, 0xD4, 0x30, 0x98, 0xA6, 0xF2, 0x15, 0x94, 0xD6, 0x67, 0x0F, 0x3E, 0xAB, 0x54, 0xEF, 0x3E, 0x30, 0xC7, 0x38, 0x96, ++ 0x46, 0x1F, 0xE3, 0xCA, 0x4E, 0x8E, 0xD9, 0x29, 0x3E, 0x4F, 0x27, 0x6E, 0x18, 0xAA, 0xC8, 0x54, 0x46, 0xC0, 0xC2, 0x34, 0xFF, 0x6F, 0x9A, 0xE1, 0x1A, 0x09, 0x89, 0x9B, 0x3D, 0x22, 0x1C, 0xC6, ++ 0xC4, 0xB3, 0x63, 0xF7, 0xBE, 0x27, 0xAD, 0xF3, 0xF5, 0x1C, 0xE4, 0xBD, 0x8F, 0x51, 0xC2, 0x1C, 0x7F, 0x44, 0xE3, 0x08, 0x3C, 0x8D, 0x04, 0x71, 0x24, 0x08, 0x4C, 0x1E, 0xDB, 0x09, 0x0A, 0x7D, ++ 0x80, 0x56, 0x51, 0x7B, 0xBB, 0xD1, 0xF1, 0x87, 0xC4, 0x27, 0xDD, 0xA5, 0x9E, 0x54, 0x5E, 0x8C, 0x60, 0x03, 0xCA, 0x0B, 0xC5, 0xBD, 0x38, 0x9E, 0xBD, 0x90, 0xB9, 0x97, 0x08, 0xC3, 0xD3, 0xC7, ++ 0x40, 0x44, 0xEB, 0x2A, 0xB3, 0xCA, 0x6F, 0x72, 0xD4, 0xB2, 0xD4, 0x91, 0x02, 0xB9, 0x74, 0x89, 0x64, 0x56, 0xFC, 0x67, 0x38, 0xE9, 0x0B, 0x94, 0x8C, 0x62, 0xE0, 0x16, 0x17, 0x14, 0x87, 0x1F, ++ 0x57, 0x41, 0x9E, 0xCB, 0xAA, 0x16, 0xD0, 0x16, 0x65, 0xAC, 0xEB, 0x39, 0x69, 0xB4, 0x84, 0xA2, 0xE0, 0x29, 0xED, 0x6A, 0x73, 0x30, 0x0E, 0x06, 0xC8, 0x50, 0xAF, 0xEF, 0xFC, 0x08, 0xCE, 0x29, ++ 0x61, 0x85, 0x4E, 0x9A, 0xA0, 0x65, 0x38, 0xFF, 0x6D, 0x9F, 0x5A, 0xEE, 0xAF, 0x57, 0x76, 0x1C, 0xB6, 0xAE, 0x36, 0x87, 0x1D, 0xC4, 0x17, 0x33, 0x2F, 0x30, 0x63, 0xBF, 0x91, 0x37, 0x21, 0x22, ++ 0x68, 0xC3, 0x1F, 0x27, 0x8D, 0xC6, 0x85, 0xC1, 0xAD, 0x44, 0xD2, 0x22, 0x56, 0x6F, 0x9F, 0x18, 0x82, 0x3D, 0x55, 0x0E, 0x89, 0x86, 0x51, 0xD7, 0x65, 0x57, 0x1A, 0x10, 0x69, 0xB8, 0x27, 0x48, ++ 0x61, 0x85, 0x34, 0x59, 0xCF, 0x49, 0xDB, 0x92, 0x37, 0x44, 0xC9, 0xC5, 0xC9, 0x3D, 0xD2, 0x6F, 0x66, 0x3F, 0x9A, 0xDD, 0xD0, 0xBF, 0x56, 0x38, 0x05, 0xB4, 0xB7, 0x47, 0xC0, 0xA6, 0xE5, 0xB5, ++ 0x86, 0x90, 0x0C, 0x57, 0x25, 0x96, 0xF2, 0x12, 0x01, 0xD3, 0x74, 0x55, 0x53, 0xCA, 0x09, 0xD2, 0x19, 0xCB, 0x01, 0x79, 0xF0, 0xB1, 0x00, 0x17, 0xF0, 0xF1, 0x4D, 0x5A, 0xF3, 0xB9, 0x4B, 0xB4, ++ 0xA9, 0x38, 0x61, 0x78, 0xA8, 0x2D, 0x2B, 0x14, 0x11, 0xED, 0x8B, 0x95, 0xAC, 0x40, 0xAE, 0x73, 0xB2, 0x36, 0xD9, 0xB7, 0x83, 0x25, 0x0F, 0x1B, 0x9B, 0xBD, 0xBD, 0x88, 0xC0, 0x9E, 0xEB, 0x29, ++ 0x0A, 0x83, 0xD8, 0x0A, 0x44, 0x47, 0x60, 0xB9, 0x83, 0xB2, 0x70, 0x20, 0xF1, 0x28, 0xED, 0x00, 0xE5, 0xD1, 0xD3, 0xBB, 0xC8, 0xCE, 0x86, 0x21, 0x4E, 0xB5, 0xF5, 0x33, 0xCC, 0x80, 0xF2, 0x78, ++ 0xB1, 0x92, 0xB5, 0x7A, 0xBB, 0x0F, 0xFA, 0x70, 0x3E, 0xBF, 0x0B, 0xAA, 0xE4, 0x92, 0x6D, 0x63, 0xC0, 0xFF, 0x51, 0x8A, 0x9B, 0xBE, 0xB3, 0x48, 0xD5, 0xB5, 0xA0, 0x4F, 0x6F, 0xFF, 0xCF, 0xD3, ++ 0xA4, 0x25, 0xE5, 0x08, 0xBD, 0xAB, 0x88, 0xB4, 0x05, 0x7D, 0x94, 0xD6, 0xF8, 0xB1, 0xB0, 0x56, 0x78, 0x3F, 0xE4, 0x0B, 0xE6, 0xD6, 0xEF, 0xDF, 0x53, 0x1F, 0x52, 0x81, 0x15, 0xE2, 0xB3, 0x21, ++ 0x11, 0xD2, 0xB7, 0xCE, 0x59, 0x90, 0x84, 0xE2, 0x0F, 0x9E, 0xAD, 0x59, 0x5A, 0xC9, 0x15, 0xCB, 0xAB, 0x2A, 0x48, 0x6C, 0x98, 0x5F, 0xB5, 0x0F, 0x6E, 0x2F, 0x3E, 0x16, 0x02, 0xD8, 0xE8, 0xCF, ++ 0xA7, 0x68, 0x5A, 0xAA, 0x30, 0x5C, 0x06, 0x0F, 0x11, 0xDB, 0x98, 0x07, 0x40, 0xBB, 0xF4, 0xBD, 0xF4, 0xA7, 0x1A, 0x1C, 0x7E, 0x37, 0xC6, 0xC6, 0xE8, 0x91, 0x20, 0xAD, 0x91, 0x2C, 0x2F, 0x2A, ++ 0xC0, 0x25, 0x0F, 0x0F, 0xCE, 0x82, 0x6C, 0x55, 0xB6, 0xFB, 0x0F, 0x63, 0x8D, 0xC0, 0xC5, 0x5E, 0x32, 0x7E, 0x92, 0x2D, 0xC4, 0x53, 0x75, 0x18, 0x69, 0xCD, 0xAB, 0xBC, 0x95, 0xA3, 0xC3, 0x50, ++ 0x36, 0x8A, 0xF7, 0xAB, 0x4C, 0x17, 0xB0, 0x1D, 0x8B, 0xC4, 0x77, 0x74, 0xB9, 0x01, 0xA1, 0x8A, 0xDB, 0x86, 0x98, 0x10, 0x37, 0x67, 0x21, 0xDC, 0x23, 0x3D, 0x81, 0x1D, 0xF2, 0x20, 0x8C, 0x04, ++ 0xDF, 0x9B, 0xEE, 0xB8, 0x28, 0xB0, 0x02, 0xEA, 0xA1, 0xF8, 0x64, 0x09, 0x1C, 0x1C, 0xD0, 0x90, 0xEA, 0x6F, 0xAB, 0xCC, 0x0B, 0x06, 0x4E, 0xD2, 0x91, 0x6A, 0xA1, 0x0F, 0x14, 0x4E, 0xE4, 0x47, ++ 0x0A, 0x75, 0xAB, 0x04, 0xF2, 0xCC, 0xA1, 0xD8, 0xAC, 0x42, 0x48, 0x4D, 0xCE, 0x93, 0x46, 0x76, 0xE7, 0x4A, 0x2A, 0x9E, 0x19, 0xB0, 0x96, 0xF1, 0x08, 0x8E, 0xBD, 0x2F, 0xDE, 0x8D, 0x16, 0x78, ++ 0x46, 0xAA, 0x33, 0xD1, 0x81, 0x31, 0x72, 0xE9, 0x2B, 0x13, 0xB6, 0x70, 0x81, 0xC4, 0x4C, 0x35, 0xF2, 0x55, 0xBB, 0x23, 0x6D, 0x0C, 0xF2, 0x9A, 0x58, 0xD0, 0xCC, 0xDE, 0xC3, 0x70, 0xC8, 0x6F, ++ 0x84, 0x0D, 0xC6, 0xF9, 0x7A, 0x74, 0xBF, 0xAA, 0xCE, 0xFA, 0xBA, 0x55, 0x65, 0xD7, 0x73, 0x62, 0x3A, 0x24, 0x32, 0x92, 0xE6, 0xDC, 0x76, 0x57, 0x39, 0x23, 0xD5, 0x9A, 0xC4, 0x43, 0xDB, 0x86, ++ 0xA3, 0x12, 0x9A, 0x54, 0x73, 0xB1, 0x19, 0x4D, 0x21, 0xA4, 0x61, 0xF6, 0x11, 0x4F, 0xDE, 0xC3, 0xA6, 0xD3, 0x8F, 0x28, 0xB3, 0x9B, 0x87, 0xF2, 0xEA, 0x06, 0x86, 0x67, 0x40, 0x94, 0x6B, 0x0D, ++ 0x09, 0x7A, 0xF4, 0xB2, 0xC0, 0x6D, 0x36, 0xE9, 0xFC, 0xD2, 0x40, 0x48, 0x90, 0x8E, 0x38, 0xA6, 0xF7, 0x6E, 0xAB, 0xBC, 0x19, 0x76, 0x17, 0x92, 0x82, 0xEB, 0x0E, 0x51, 0xD0, 0xE8, 0x3B, 0xE5, ++ 0xCD, 0x93, 0xE6, 0x14, 0xC1, 0x6B, 0xEC, 0x1E, 0xEC, 0xB9, 0xF1, 0x81, 0x08, 0x61, 0x70, 0x47, 0x59, 0xD1, 0xA0, 0x78, 0x92, 0xBF, 0x52, 0xF5, 0x5F, 0x89, 0x39, 0xA4, 0xDC, 0x30, 0x88, 0xFA, ++ 0x16, 0x65, 0xF1, 0x35, 0xBD, 0x04, 0x77, 0xD0, 0x2D, 0xCD, 0xE5, 0x7E, 0x0C, 0x1C, 0x0F, 0xAC, 0x0F, 0xA7, 0x0A, 0x25, 0x6F, 0x9B, 0x9B, 0xEB, 0xC7, 0xEB, 0x33, 0xF6, 0x6D, 0xB4, 0xE7, 0x9D, ++ 0xF4, 0xB0, 0x70, 0xD8, 0x31, 0x81, 0x56, 0xFD, 0x65, 0xE1, 0xB3, 0x6D, 0x37, 0xAC, 0xF9, 0xB0, 0xAA, 0xF0, 0x7C, 0x60, 0x34, 0x37, 0xC4, 0xA3, 0xD2, 0xFA, 0x2D, 0xCE, 0x6B, 0xCF, 0xAF, 0x18, ++ 0x3F, 0x92, 0x1C, 0x6E, 0xE3, 0xE8, 0x7B, 0xD1, 0x75, 0x05, 0x7B, 0xC9, 0x97, 0xF9, 0x0D, 0x18, 0x59, 0xEF, 0x76, 0x01, 0xE6, 0x8D, 0x35, 0x84, 0x62, 0xAF, 0xE3, 0xBA, 0xD1, 0x92, 0x83, 0x60, ++ 0xE1, 0xAA, 0xFC, 0xCC, 0x17, 0x0D, 0x0F, 0xD7, 0x65, 0x18, 0x0B, 0x57, 0xB0, 0x33, 0xCF, 0xCC, 0xE2, 0x89, 0x87, 0x8F, 0x41, 0x9B, 0x7D, 0x44, 0x71, 0xB7, 0xB0, 0xF3, 0xBF, 0x42, 0x56, 0xC0, ++ 0x68, 0xDB, 0xCD, 0xBA, 0x7B, 0x0F, 0x20, 0x2C, 0xC7, 0x52, 0x9A, 0x76, 0xC0, 0x9D, 0xB1, 0x66, 0xA1, 0x98, 0x5E, 0x10, 0xB4, 0x6F, 0x83, 0x0F, 0x08, 0xF7, 0x3E, 0xB2, 0x54, 0xCC, 0x3E, 0x33, ++ 0xD6, 0x90, 0xDF, 0xAB, 0xED, 0x3F, 0x77, 0xE4, 0xC4, 0x65, 0x47, 0x39, 0x90, 0x9E, 0x86, 0x1D, 0x04, 0x87, 0x49, 0x35, 0xD1, 0x20, 0x5D, 0xF3, 0x94, 0x1B, 0x10, 0x3D, 0x60, 0xF7, 0x1C, 0x36, ++ 0x2B, 0xF0, 0x21, 0x91, 0x93, 0xF9, 0xAD, 0xAE, 0x49, 0xD3, 0x06, 0xF5, 0x0A, 0x34, 0x79, 0x09, 0x70, 0x8A, 0x41, 0x7C, 0x74, 0xF8, 0xB8, 0xC4, 0x4D, 0x8C, 0x7F, 0xBE, 0xD5, 0x2F, 0x1A, 0x00, ++ 0x98, 0x88, 0xED, 0x7D, 0xA2, 0x55, 0x12, 0xD7, 0x3C, 0xA3, 0x76, 0x02, 0xD4, 0x6E, 0xEC, 0x02, 0x9D, 0x4F, 0x16, 0x84, 0x91, 0xC7, 0x0F, 0x2D, 0x0F, 0x13, 0x58, 0xCE, 0x37, 0x0C, 0x2C, 0xF2, ++ 0x82, 0x35, 0x00, 0xE9, 0x89, 0xFB, 0x24, 0x72, 0x3C, 0x21, 0xDD, 0xA0, 0x82, 0x09, 0x05, 0x03, 0x82, 0x09, 0x01, 0x00, 0x94, 0x06, 0xE4, 0xDC, 0xE8, 0x12, 0xBE, 0x92, 0xE1, 0x53, 0xE0, 0x75, ++ 0x2C, 0xFE, 0x26, 0xC1, 0x12, 0x7E, 0x9C, 0x80, 0xC8, 0x11, 0x3E, 0x12, 0x16, 0x95, 0xF9, 0x01, 0x4E, 0x03, 0xFF, 0xF1, 0xFD, 0x7B, 0xE3, 0xB0, 0xF4, 0x0E, 0xEE, 0x5B, 0x02, 0xF5, 0x60, 0x1E, ++ 0x2F, 0xC3, 0xAF, 0xF0, 0xCD, 0xF7, 0xE7, 0xE7, 0x34, 0x99, 0x9C, 0x7F, 0xC4, 0xEB, 0x9D, 0xDA, 0x81, 0x8C, 0x52, 0x06, 0x93, 0xFE, 0x38, 0xE4, 0x49, 0xBE, 0x4C, 0xCF, 0x03, 0xFE, 0xA1, 0x72, ++ 0x8E, 0x4C, 0xCA, 0x64, 0xFD, 0x11, 0x0B, 0xFC, 0x8E, 0xC9, 0xCB, 0x79, 0x50, 0x3B, 0xD5, 0x53, 0xF5, 0x89, 0x9A, 0x2F, 0x63, 0x16, 0x5D, 0x19, 0x32, 0x72, 0x7D, 0xB7, 0x44, 0x72, 0x65, 0xF7, ++ 0x96, 0xF4, 0xFD, 0xBC, 0xFE, 0xA6, 0xF4, 0x05, 0x9E, 0x88, 0x34, 0x34, 0xC7, 0x98, 0xB8, 0x68, 0xF9, 0x86, 0x60, 0x5D, 0x4D, 0x03, 0xD3, 0x04, 0xB6, 0x77, 0xE3, 0x0F, 0xF7, 0xD7, 0x83, 0x0A, ++ 0xDD, 0x06, 0x65, 0x2B, 0xCC, 0x1B, 0xF0, 0x4D, 0x33, 0xDF, 0xFE, 0xFC, 0xEF, 0x63, 0x4A, 0xF5, 0xBA, 0xE0, 0xD5, 0xC6, 0xBA, 0xB6, 0xC5, 0x64, 0xF1, 0x95, 0x20, 0x82, 0xAA, 0x38, 0x25, 0x53, ++ 0x20, 0x01, 0x9C, 0xBC, 0x8E, 0xCA, 0x07, 0x3D, 0x80, 0xAF, 0x0A, 0x59, 0x6E, 0x4D, 0x33, 0xAD, 0x73, 0xB4, 0xF1, 0xED, 0xD4, 0x20, 0xE0, 0x90, 0x0B, 0xED, 0x47, 0x49, 0x5A, 0x88, 0x62, 0xD4, ++ 0xA9, 0xCD, 0xDE, 0xD0, 0xDE, 0xA7, 0x74, 0xCD, 0xE0, 0x23, 0x8C, 0x71, 0x2B, 0x8A, 0xA9, 0x82, 0x47, 0x56, 0x66, 0x0D, 0x2B, 0x34, 0xE4, 0x7E, 0x4B, 0x59, 0x42, 0x5F, 0x17, 0xA9, 0x60, 0x8D, ++ 0xAD, 0x38, 0x28, 0xEC, 0x9D, 0x8A, 0xDB, 0x5D, 0xD3, 0x8C, 0x7D, 0x53, 0xDD, 0xA6, 0xDA, 0xC7, 0x4D, 0x3F, 0xD0, 0x3C, 0x00, 0xB5, 0x9E, 0xE9, 0xA0, 0xE5, 0x27, 0x6E, 0x3E, 0x75, 0xD0, 0x13, ++ 0x61, 0x01, 0x66, 0x49, 0x1D, 0x87, 0x3A, 0x7D, 0xA2, 0xC9, 0xFD, 0xA3, 0x60, 0xA6, 0x47, 0x73, 0x25, 0x00, 0x58, 0x41, 0x8F, 0xA7, 0x62, 0x63, 0x2D, 0xCB, 0x12, 0x63, 0x85, 0x27, 0x32, 0x60, ++ 0x02, 0x18, 0x67, 0x53, 0xE6, 0xB5, 0xD3, 0x31, 0xE5, 0x64, 0x23, 0xC9, 0x70, 0x9D, 0x34, 0x9C, 0x69, 0x5A, 0x32, 0x8A, 0x56, 0x2B, 0x13, 0x9A, 0xF5, 0x98, 0xF8, 0x5D, 0xCB, 0x35, 0x98, 0x40, ++ 0x7D, 0x82, 0xF8, 0x49, 0xC2, 0x9A, 0x87, 0xDC, 0x41, 0xFA, 0xA7, 0x69, 0x8F, 0xAC, 0x7F, 0x20, 0x4D, 0x70, 0xD0, 0x7D, 0x4A, 0xDC, 0x1D, 0x68, 0xFB, 0x46, 0x08, 0x63, 0xBB, 0x00, 0x2F, 0x3A, ++ 0x23, 0x57, 0xCB, 0x65, 0xFB, 0x4B, 0x03, 0xBA, 0xB6, 0x8D, 0xB9, 0xB1, 0x1A, 0x09, 0xC9, 0x02, 0xE8, 0x12, 0x95, 0x91, 0x54, 0x16, 0xB4, 0x51, 0xD8, 0xE5, 0xFB, 0xF7, 0x81, 0x33, 0xBE, 0xD2, ++ 0x81, 0x81, 0x37, 0x17, 0xE3, 0x74, 0xC5, 0xB4, 0x15, 0xE7, 0x77, 0x3F, 0x95, 0xD8, 0x3D, 0x8B, 0xF9, 0x7D, 0x4A, 0xC4, 0x5E, 0xAC, 0x28, 0x1E, 0x50, 0x89, 0x69, 0x32, 0xF7, 0xEE, 0xA4, 0x83, ++ 0xE6, 0x98, 0xED, 0xD6, 0x07, 0xC3, 0xFF, 0xDD, 0xD3, 0x4C, 0x56, 0x67, 0x03, 0x28, 0xEB, 0xA5, 0xE1, 0xEB, 0x24, 0x9B, 0x8E, 0x26, 0x85, 0x38, 0xBF, 0x4C, 0xF3, 0x43, 0x2E, 0xD5, 0xA9, 0x33, ++ 0xB8, 0x2E, 0x6C, 0x0E, 0x96, 0x0D, 0xE1, 0x8A, 0x20, 0x9F, 0xA3, 0x90, 0x96, 0x93, 0x87, 0x88, 0x4D, 0xAD, 0x8D, 0x8E, 0xE7, 0xE6, 0x0A, 0x89, 0x69, 0x90, 0x62, 0x16, 0x2F, 0x90, 0xBB, 0x28, ++ 0xE4, 0xCC, 0xBA, 0x1A, 0x5F, 0x52, 0x6D, 0xE9, 0xCF, 0x7F, 0xEF, 0xEC, 0x7A, 0x77, 0xDD, 0xA0, 0x7C, 0xD7, 0x00, 0x09, 0xE4, 0x8E, 0xBF, 0x8E, 0xDD, 0x9B, 0x34, 0x87, 0x26, 0xA9, 0x37, 0xE1, ++ 0x4F, 0xF5, 0xEB, 0x6E, 0x79, 0xE3, 0xDB, 0x1B, 0x60, 0xD7, 0x0A, 0x73, 0x05, 0x11, 0x15, 0x4A, 0x8A, 0xB8, 0x75, 0xF8, 0x6D, 0xEB, 0xCB, 0x9D, 0x79, 0x0F, 0xC4, 0x32, 0x84, 0x4E, 0x90, 0x3C, ++ 0x8B, 0xD9, 0xFD, 0xB2, 0x8F, 0x99, 0x88, 0xDF, 0xAE, 0xA5, 0x56, 0xE9, 0x20, 0xE5, 0x79, 0x25, 0x47, 0xAE, 0xA7, 0xA4, 0x5B, 0x4C, 0x7E, 0x68, 0x41, 0x61, 0x1E, 0x33, 0x06, 0x4E, 0x5C, 0xB5, ++ 0x9B, 0xBA, 0xEC, 0xA6, 0x9E, 0x38, 0xA0, 0x99, 0x94, 0xAE, 0xEA, 0x3D, 0x10, 0xF6, 0xFC, 0x53, 0xF6, 0x43, 0x56, 0x2F, 0xA0, 0x0A, 0x34, 0x12, 0xD4, 0xAF, 0xF8, 0x01, 0xD4, 0x8D, 0x0C, 0x58, ++ 0xBA, 0x05, 0x5A, 0x42, 0xCD, 0xF6, 0xB8, 0xF1, 0x86, 0x16, 0x99, 0xEF, 0xD9, 0xAD, 0x9D, 0xF4, 0xCB, 0xB9, 0x88, 0xE7, 0x22, 0x17, 0x12, 0xBB, 0x42, 0xA4, 0x3B, 0xE8, 0x32, 0x25, 0x09, 0x11, ++ 0x1D, 0x3A, 0x8E, 0xBC, 0x97, 0xFA, 0xEB, 0xF9, 0xF8, 0x5D, 0x69, 0x20, 0x76, 0x5A, 0x18, 0x2A, 0xD9, 0xC4, 0x54, 0x27, 0x99, 0x31, 0x70, 0x5E, 0xA2, 0x90, 0x3F, 0x6E, 0x18, 0x7D, 0x2A, 0xF6, ++ 0xA5, 0xE4, 0xA8, 0x30, 0x54, 0x16, 0x8A, 0xA6, 0xA6, 0xF1, 0x27, 0xC8, 0xCE, 0x0C, 0x56, 0xA2, 0xEF, 0x67, 0xDC, 0x1C, 0xD9, 0xB2, 0x2A, 0x51, 0x39, 0xDA, 0xC1, 0x92, 0xFF, 0xC5, 0x3A, 0x13, ++ 0xEC, 0x52, 0xA3, 0x22, 0x07, 0xA9, 0x6A, 0x4F, 0xED, 0xB1, 0x20, 0x55, 0xFF, 0xDD, 0xBE, 0xE6, 0xAE, 0xF0, 0x72, 0xF7, 0x5D, 0xB7, 0xC6, 0xCD, 0x37, 0xB2, 0x58, 0x9D, 0xC0, 0x0F, 0xBE, 0xF1, ++ 0x33, 0x3E, 0xB1, 0x13, 0xC8, 0x22, 0x1B, 0xF8, 0x74, 0x0F, 0xD7, 0xBF, 0x7F, 0x39, 0xA5, 0x7E, 0x4A, 0xE2, 0xCE, 0x86, 0xE0, 0xE8, 0xB4, 0xE9, 0x21, 0x4D, 0x67, 0x21, 0x46, 0xED, 0xE9, 0x85, ++ 0x87, 0x15, 0x71, 0x56, 0x5E, 0x9F, 0x59, 0xCD, 0xA5, 0x92, 0x22, 0xAC, 0x9C, 0x6C, 0x00, 0xD5, 0xA7, 0xC9, 0xD8, 0xA3, 0xE5, 0x46, 0xDE, 0xC8, 0x3C, 0x65, 0x54, 0xEA, 0x89, 0x13, 0x72, 0xBB, ++ 0xCA, 0xE7, 0xD7, 0x76, 0x88, 0xDE, 0xD6, 0x0B, 0x52, 0x6C, 0x04, 0xC9, 0xBF, 0x0A, 0x7D, 0x96, 0x56, 0x81, 0x90, 0x4D, 0xAC, 0x03, 0x79, 0x1F, 0x08, 0xB0, 0x71, 0xF0, 0xEE, 0x5B, 0xAB, 0xA1, ++ 0xC4, 0x6B, 0x15, 0x61, 0x75, 0x6E, 0x58, 0x9C, 0x33, 0x7B, 0xAB, 0x4F, 0x2B, 0x75, 0xAE, 0x3B, 0xF6, 0xE7, 0x74, 0x3F, 0x6C, 0xEE, 0x5F, 0x09, 0x93, 0xE7, 0x18, 0xC9, 0x58, 0x4D, 0x47, 0xEA, ++ 0xD4, 0xC9, 0x61, 0xAE, 0x96, 0xF6, 0xD6, 0x02, 0xA5, 0x06, 0xA2, 0xA4, 0xC0, 0xF5, 0x7E, 0x88, 0x1D, 0x51, 0xDC, 0x24, 0xF2, 0x77, 0xEB, 0xA9, 0xCC, 0x3C, 0x6F, 0x23, 0x58, 0x29, 0xB5, 0xBA, ++ 0x87, 0xC2, 0x1F, 0x12, 0x32, 0x1C, 0xEE, 0x8B, 0x6E, 0xE9, 0x08, 0x9B, 0xB5, 0x2C, 0x3A, 0x71, 0xAD, 0x61, 0x12, 0x46, 0xAE, 0xD9, 0x80, 0xC1, 0xB9, 0x47, 0xA6, 0x7C, 0x88, 0xA1, 0x10, 0xA7, ++ 0xBD, 0x84, 0x49, 0xD0, 0x9C, 0xE3, 0x90, 0x6C, 0x65, 0x35, 0x45, 0x7D, 0x02, 0xF2, 0x32, 0x5C, 0x70, 0xEE, 0x78, 0x63, 0xAE, 0x63, 0x23, 0x0F, 0xC2, 0x3D, 0xEC, 0xA2, 0x99, 0xBB, 0x5B, 0x0E, ++ 0x4B, 0x1A, 0xE8, 0xE2, 0x40, 0x1D, 0xFB, 0x9D, 0x4B, 0xDD, 0xD0, 0x61, 0x18, 0xBD, 0x15, 0x0F, 0x4B, 0x5C, 0xD3, 0x85, 0xAF, 0xB4, 0xFA, 0xD4, 0xEC, 0xA4, 0x6D, 0x61, 0xBE, 0xCA, 0xB1, 0x1D, ++ 0x02, 0x70, 0x26, 0x67, 0x33, 0x33, 0xAB, 0x31, 0x4B, 0x9E, 0xF9, 0x1B, 0x7A, 0x7F, 0x94, 0x0B, 0xDA, 0x44, 0x44, 0xAE, 0xFE, 0x37, 0x03, 0x6A, 0x43, 0xF2, 0xB6, 0x8D, 0x0D, 0xFF, 0xD7, 0xAF, ++ 0x33, 0xA3, 0x63, 0x0F, 0xDB, 0x32, 0x5A, 0x74, 0xDA, 0x7B, 0x09, 0x0F, 0x94, 0x9D, 0x06, 0x4B, 0xF7, 0x45, 0xB8, 0x93, 0x37, 0x15, 0x2B, 0x98, 0x0E, 0x4E, 0x20, 0xCC, 0x23, 0xFF, 0xAF, 0xCC, ++ 0xBC, 0x7E, 0x95, 0x77, 0x04, 0xE9, 0x4B, 0xE7, 0xF3, 0xE8, 0x5F, 0x7F, 0xE8, 0x49, 0x6F, 0xD5, 0xAA, 0xB9, 0x67, 0xB2, 0x7C, 0x3F, 0x17, 0x3E, 0x26, 0x26, 0x80, 0xD0, 0x44, 0x08, 0x85, 0xE6, ++ 0xC0, 0xB2, 0xAA, 0xB0, 0x9A, 0xB8, 0x1F, 0x6D, 0xE5, 0xB2, 0x2D, 0x17, 0xD5, 0xA2, 0x11, 0x97, 0xD6, 0x98, 0x93, 0xBE, 0xED, 0x51, 0x83, 0x4E, 0x2D, 0x7E, 0x3D, 0xAF, 0xF0, 0x4C, 0xF8, 0x4A, ++ 0xA9, 0xC7, 0x79, 0x6E, 0xBB, 0x6A, 0xE2, 0x06, 0xC4, 0xE1, 0x66, 0x25, 0xFD, 0xFD, 0x61, 0x39, 0x85, 0x05, 0x48, 0x06, 0x26, 0x7C, 0xD6, 0x9B, 0xFA, 0x8F, 0x5D, 0xD6, 0x0F, 0x4F, 0x21, 0x94, ++ 0x12, 0xDF, 0x2B, 0xAB, 0xC9, 0x56, 0x41, 0xAE, 0x15, 0x54, 0x87, 0xFA, 0xF4, 0x13, 0x33, 0xF5, 0xE5, 0x1B, 0xEF, 0xC2, 0xF9, 0x63, 0xE6, 0x2B, 0x74, 0x8B, 0x3D, 0x9C, 0x20, 0x20, 0x66, 0xD1, ++ 0xEC, 0xBA, 0xB6, 0x03, 0x21, 0x79, 0x10, 0x58, 0x9B, 0xB9, 0x69, 0x55, 0x21, 0xA5, 0xC5, 0x2F, 0x12, 0x38, 0x2F, 0x0D, 0xE3, 0x24, 0x3F, 0x9E, 0x92, 0xED, 0x60, 0x53, 0x12, 0x63, 0x7D, 0xCC, ++ 0xE5, 0xAD, 0x80, 0x7D, 0xA0, 0xC9, 0x2E, 0x99, 0x32, 0x52, 0x05, 0x20, 0x41, 0xC7, 0xB6, 0x8F, 0x4E, 0xB1, 0xBB, 0xB7, 0x08, 0x5A, 0x5B, 0x02, 0x04, 0x77, 0x98, 0x92, 0x30, 0xCB, 0xA8, 0x9F, ++ 0x96, 0x6D, 0x34, 0x97, 0xC4, 0x04, 0x3D, 0x05, 0x6F, 0x79, 0x7E, 0xA0, 0xB4, 0x8E, 0x24, 0x7C, 0xAB, 0xBC, 0x7E, 0x59, 0x73, 0x07, 0xDA, 0x60, 0x5A, 0x00, 0x81, 0x45, 0x45, 0x51, 0xC8, 0x96, ++ 0xAB, 0x4E, 0xE1, 0x34, 0x6B, 0x90, 0x4E, 0x35, 0x8A, 0x58, 0xCA, 0x2F, 0x7B, 0x93, 0xDA, 0x32, 0x9D, 0x08, 0x0A, 0x49, 0xDC, 0xF9, 0xD2, 0xC9, 0xD1, 0xBB, 0xD6, 0xBA, 0x82, 0x6C, 0xA7, 0x13, ++ 0x3A, 0xB2, 0xDF, 0x61, 0xD7, 0x13, 0x16, 0xEB, 0xDD, 0xED, 0x88, 0x2E, 0x49, 0x83, 0xB7, 0x67, 0x46, 0xF7, 0x14, 0x36, 0xD2, 0xD7, 0xC1, 0x4D, 0x94, 0x34, 0x71, 0x70, 0xEE, 0x00, 0x15, 0x54, ++ 0x00, 0x28, 0x1B, 0xD3, 0xC6, 0xBF, 0xE5, 0xEC, 0xBF, 0x69, 0xDE, 0xA0, 0x59, 0x01, 0x63, 0xE3, 0xA2, 0x97, 0x10, 0xC4, 0x10, 0x7A, 0x08, 0xD4, 0xDD, 0x30, 0xFD, 0x6E, 0x05, 0x0E, 0xA1, 0xE9, ++ 0xE3, 0xF3, 0xBA, 0xCD, 0x74, 0x10, 0x35, 0xE3, 0x47, 0x18, 0xAF, 0xA9, 0xA9, 0xC8, 0xAB, 0x19, 0xEA, 0x9C, 0xD8, 0x75, 0x11, 0xCC, 0x59, 0xCC, 0x60, 0x1B, 0xC6, 0x3B, 0x82, 0x0F, 0xD0, 0x96, ++ 0x87, 0x1F, 0x95, 0x26, 0x34, 0xA2, 0xA3, 0x78, 0x87, 0x83, 0xAA, 0xE7, 0x6D, 0xA2, 0x05, 0xB1, 0xEB, 0x5E, 0x94, 0x42, 0x16, 0x19, 0xFF, 0x47, 0x52, 0x5F, 0x05, 0x62, 0xE4, 0xA3, 0x63, 0x3A, ++ 0xC7, 0xC4, 0x01, 0x7D, 0xA2, 0xC8, 0x13, 0x07, 0xBD, 0xBD, 0x74, 0xB2, 0xD9, 0x16, 0x1E, 0x99, 0xC1, 0x68, 0x6A, 0x9A, 0xB1, 0xC9, 0x44, 0x1B, 0x0D, 0x35, 0xC1, 0xCE, 0x7E, 0x9A, 0x62, 0x88, ++ 0x28, 0x92, 0x85, 0x02, 0x33, 0x20, 0x88, 0x9B, 0x63, 0x9E, 0xB9, 0xCD, 0x0A, 0x56, 0x92, 0x93, 0xE3, 0x67, 0xC2, 0xBD, 0x1F, 0xEA, 0x68, 0x7F, 0x45, 0x1B, 0x3D, 0xA8, 0x80, 0x9A, 0x77, 0xCA, ++ 0x31, 0x9D, 0xFC, 0xFF, 0xBA, 0xD4, 0x27, 0x24, 0xF2, 0xE0, 0x67, 0xCB, 0x3A, 0x85, 0xE7, 0x23, 0xCD, 0xD0, 0xEF, 0xC6, 0xB4, 0xC9, 0x7B, 0x5A, 0x13, 0x6B, 0xBE, 0xFC, 0xB6, 0xF1, 0x34, 0x59, ++ 0x2C, 0xED, 0xDD, 0x6A, 0xFC, 0x98, 0x30, 0x36, 0x5D, 0x75, 0xF7, 0x5A, 0x27, 0xCA, 0xC7, 0x22, 0x56, 0x07, 0x8E, 0xD0, 0x20, 0xA4, 0x49, 0x30, 0xDE, 0x9C, 0x35, 0xCE, 0x96, 0xE1, 0x54, 0x4E, ++ 0xE9, 0x85, 0x1B, 0xE6, 0x78, 0x48, 0x2A, 0x32, 0x7C, 0xFA, 0x37, 0xA9, 0x13, 0xE0, 0x45, 0xC8, 0xC2, 0x63, 0xD9, 0xB2, 0x5E, 0xAE, 0x21, 0xA2, 0x66, 0x4A, 0xF9, 0x43, 0x03, 0x95, 0x16, 0x3F, ++ 0x04, 0x56, 0xD1, 0xA5, 0x18, 0xF6, 0x09, 0x7C, 0x96, 0xDB, 0x8F, 0x50, 0x5F, 0x34, 0x40, 0xA6, 0xC8, 0xCC, 0x31, 0xB5, 0x95, 0xAC, 0xFE, 0x9A, 0xA9, 0xCC, 0x1C, 0xCF, 0xF9, 0xFD, 0xA6, 0x56, ++ 0xBC, 0xDB, 0x5E, 0xEB, 0x57, 0xF4, 0x1E, 0x94, 0x67, 0xC6, 0x43, 0xBA, 0x62, 0x79, 0xE5, 0x41, 0xE8, 0x6C, 0x91, 0x07, 0x4E, 0x55, 0xC6, 0x3A, 0xDF, 0x41, 0x51, 0x7C, 0xEA, 0x5A, 0x6F, 0x62, ++ 0x29, 0xF7, 0x10, 0x16, 0x62, 0xBB, 0x0A, 0xA0, 0xCE, 0xAB, 0x2B, 0x7F, 0x62, 0x11, 0x96, 0xC7, 0xA7, 0x7B, 0xB3, 0x27, 0xC7, 0x68, 0xC4, 0x3D, 0x06, 0x9D, 0x71, 0xC3, 0x2C, 0x71, 0x2C, 0x83, ++ 0x1D, 0x68, 0x50, 0xE6, 0xEB, 0x79, 0x3D, 0x7D, 0xEB, 0x08, 0xDE, 0x7A, 0x70, 0x4B, 0x38, 0x6D, 0xFD, 0x2B, 0x30, 0x72, 0xC2, 0x6B, 0x89, 0xDF, 0x8D, 0x07, 0x2B, 0x3E, 0x9F, 0x56, 0x96, 0xA0, ++ 0x73, 0x2E, 0x21, 0x5D, 0xF6, 0xDE, 0x47, 0x5D, 0x3A, 0x69, 0xF1, 0x11, 0x2F, 0x8B, 0x6B, 0x8E, 0xE7, 0x6B, 0x73, 0x9C, 0x92, 0x76, 0xD9, 0xEE, 0x78, 0x17, 0xD9, 0x89, 0xAA, 0x07, 0x90, 0xD4, ++ 0x6F, 0x8B, 0xE9, 0xBC, 0xF8, 0xA9, 0xDE, 0x83, 0xD3, 0xF3, 0xC3, 0x02, 0xA8, 0xAA, 0xBE, 0xE5, 0xC8, 0xFE, 0xBC, 0x2A, 0xDC, 0x70, 0x6F, 0xC0, 0xEA, 0x55, 0xCD, 0x6F, 0x38, 0x37, 0x74, 0xF9, ++ 0x55, 0xFE, 0xC7, 0x0A, 0x5F, 0x83, 0x80, 0x74, 0xDC, 0xB7, 0x31, 0x53, 0x2C, 0x94, 0x9C, 0x88, 0x84, 0xE9, 0x5F, 0xDE, 0xCE, 0x3A, 0x7D, 0x9F, 0x7E, 0xA2, 0x1A, 0xC5, 0xA8, 0xAC, 0xDF, 0xAA, ++ 0x89, 0x68, 0x1E, 0x95, 0x01, 0x4D, 0x5A, 0x23, 0x44, 0x31, 0x5B, 0xF8, 0xB3, 0xFF, 0x97, 0x12, 0xA0, 0x9A, 0x8F, 0xDE, 0xB8, 0x29, 0x4C, 0x25, 0x7D, 0x16, 0xCC, 0xEF, 0xAA, 0x78, 0xDD, 0x0F, ++ 0x5D, 0xFF, 0xE0, 0x49, 0xCE, 0x2B, 0x8A, 0xC7, 0xE1, 0x60, 0x02, 0xED, 0x1E, 0x32, 0x8C, 0x62, 0x86, 0xA1, 0x67, 0x4A, 0x5C, 0x06, 0xF6, 0x28, 0x37, 0xAA, 0xF3, 0xEE, 0xFF, 0xFC, 0x11, 0x46, ++ 0x94, 0x7A, 0x63, 0x0D, 0x82, 0x44, 0xAA, 0x72, 0x89, 0x8D, 0xFE, 0x5B, 0x94, 0x78, 0x63, 0x70, 0x64, 0x8A, 0x13, 0xF0, 0xE1, 0x6D, 0x50, 0x27, 0x77, 0xEB, 0x8D, 0xF9, 0x62, 0xFC, 0x86, 0x3C, ++ 0x77, 0xC1, 0x59, 0xBF, 0x64, 0xCC, 0x2A, 0x47, 0xCA, 0xF6, 0xB2, 0x12, 0xCB, 0xC6, 0x14, 0x2B, 0x5C, 0x9F, 0x5B, 0xFF, 0xE2, 0xDD, 0x3B, 0xB1, 0xF8, 0x63, 0x23, 0x10, 0x74, 0x82, 0x96, 0xBB, ++ 0x81, 0xB3, 0x62, 0xB7, 0xE4, 0x56, 0xEE, 0xE8, 0xDF, 0x29, 0x55, 0xFC, 0xDC, 0x04, 0xE5, 0x5D, 0x25, 0x16, 0xA8, 0x28, 0x07, 0x12, 0xCA, 0x5B, 0x60, 0xEA, 0x90, 0x7D, 0x51, 0xB2, 0xFA, 0x72, ++ 0xF9, 0xC7, 0x3D, 0xA7, 0xFE, 0x2C, 0x25, 0x98, 0x8F, 0x5B, 0xE1, 0xB8, 0x23, 0x68, 0x25, 0xC8, 0x3A, 0x02, 0x38, 0x22, 0x39, 0x40, 0x2A, 0x29, 0x4E, 0xA4, 0xBE, 0x31, 0xA1, 0x7D, 0xBD, 0x31, ++ 0xBA, 0x1B, 0xFF, 0xF8, 0x04, 0xCC, 0x78, 0x2F, 0xED, 0x78, 0x95, 0x09, 0x7F, 0x58, 0x3D, 0xD1, 0x3A, 0xCC, 0x85, 0x49, 0x1B, 0xDD, 0x12, 0x3F, 0xE0, 0x2C, 0x14, 0x12, 0xE3, 0x42, 0x61, 0x7D, ++ 0x9C, 0x26, 0xB8, 0xD9, 0x87, 0x7C, 0xAD, 0x5A, 0x72, 0xD2, 0x32, 0x80, 0xB5, 0x27, 0x61, 0x47, 0xA7, 0x25, 0x84, 0xDA, 0xE6, 0x17, 0x23, 0x15, 0x8B, 0x9A, 0x54, 0x79, 0xD6, 0x6B, 0x6D, 0x8A, ++ 0x6C, 0x4D, 0xB0, 0xF2, 0xE7, 0x1E, 0xDD, 0x46, 0x58, 0x85, 0xC3, 0x3A, 0x69, 0xA8, 0xA7, 0x4E, 0x78, 0x16, 0x08, 0xF0, 0x64, 0x16, 0x86, 0x6D, 0x19, 0x6B, 0x69, 0x5E, 0x70, 0xA4, 0x3B, 0x7D, ++ 0xEA, 0xBE, 0x8C, 0x00, 0x0D, 0x79, 0xEE, 0x16, 0x03, 0xD4, 0x7C, 0x45, 0xCC, 0xB8, 0x5B, 0xBF, 0x79, 0x2D, 0x59, 0x14, 0x6F, 0xA3, 0x22, 0x86, 0x97, 0x6F, 0xF5, 0x91, 0x72, 0x62, 0x96, 0x38, ++ 0xE1, 0xA0, 0x70, 0xCB, 0x0F, 0x0E, 0xCB, 0xF8, 0x09, 0xF9, 0xF5, 0xB8, 0x73, 0xFB, 0xEF, 0x96, 0x87, 0x4F, 0xCD, 0xED, 0x58, 0xA2, 0xC0, 0xA4, 0x99, 0x06, 0xD9, 0x09, 0x1D, 0x29, 0xB2, 0x1D, ++ 0x0A, 0x7B, 0x89, 0x94, 0x52, 0x5D, 0x08, 0x88, 0x74, 0x8F, 0xB7, 0xDE, 0xE1, 0x60, 0xF2, 0xFC, 0xC7, 0x89, 0x52, 0xBB, 0x57, 0xBE, 0x4D, 0x36, 0x68, 0x5B, 0xE4, 0xF2, 0xB1, 0x45, 0xBC, 0xAC, ++ 0x40, 0xE0, 0xDB, 0x30, 0x60, 0x87, 0x2D, 0x81, 0x76, 0x63, 0x91, 0xD4, 0xEC, 0x0B, 0x04, 0x60, 0x9F, 0x4F, 0x2D, 0xA2, 0x28, 0x94, 0x15, 0x45, 0x8D, 0x5F, 0x15, 0x22, 0x3C, 0x8E, 0x91, 0x11, ++ 0x88, 0xC7, 0x82, 0x5F, 0x52, 0xA0, 0xA3, 0xA2, 0xC2, 0xCA, 0x8B, 0x62, 0xA7, 0x4B, 0x03, 0x71, 0x59, 0xE5, 0x4D, 0x99, 0x73, 0xC8, 0x00, 0x54, 0x3D, 0x2F, 0x6C, 0x4C, 0x0D, 0x9E, 0x3B, 0x09, ++ 0x39, 0xC1, 0xC1, 0x68, 0x05, 0xE5, 0x79, 0x46, 0x95, 0x49, 0x9C, 0xE0, 0x13, 0xCF, 0xB9, 0xB0, 0xEA, 0xEE, 0xD8, 0xDD, ++ }, ++ .spki_len = 2374, ++ .spki = { ++ 0x30, 0x82, 0x09, 0x42, 0x30, 0x0F, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0B, 0x01, 0x08, 0x07, 0x05, 0x00, 0x03, 0x82, 0x09, 0x2D, 0x00, 0x30, 0x82, 0x09, 0x28, 0x03, 0x21, ++ 0x00, 0x7C, 0x99, 0x35, 0xA0, 0xB0, 0x76, 0x94, 0xAA, 0x0C, 0x6D, 0x10, 0xE4, 0xDB, 0x6B, 0x1A, 0xDD, 0x2F, 0xD8, 0x1A, 0x25, 0xCC, 0xB1, 0x48, 0x03, 0x2D, 0xCD, 0x73, 0x99, 0x36, 0x73, 0x7F, ++ 0x2D, 0x03, 0x82, 0x09, 0x01, 0x00, 0x94, 0x06, 0xE4, 0xDC, 0xE8, 0x12, 0xBE, 0x92, 0xE1, 0x53, 0xE0, 0x75, 0x2C, 0xFE, 0x26, 0xC1, 0x12, 0x7E, 0x9C, 0x80, 0xC8, 0x11, 0x3E, 0x12, 0x16, 0x95, ++ 0xF9, 0x01, 0x4E, 0x03, 0xFF, 0xF1, 0xFD, 0x7B, 0xE3, 0xB0, 0xF4, 0x0E, 0xEE, 0x5B, 0x02, 0xF5, 0x60, 0x1E, 0x2F, 0xC3, 0xAF, 0xF0, 0xCD, 0xF7, 0xE7, 0xE7, 0x34, 0x99, 0x9C, 0x7F, 0xC4, 0xEB, ++ 0x9D, 0xDA, 0x81, 0x8C, 0x52, 0x06, 0x93, 0xFE, 0x38, 0xE4, 0x49, 0xBE, 0x4C, 0xCF, 0x03, 0xFE, 0xA1, 0x72, 0x8E, 0x4C, 0xCA, 0x64, 0xFD, 0x11, 0x0B, 0xFC, 0x8E, 0xC9, 0xCB, 0x79, 0x50, 0x3B, ++ 0xD5, 0x53, 0xF5, 0x89, 0x9A, 0x2F, 0x63, 0x16, 0x5D, 0x19, 0x32, 0x72, 0x7D, 0xB7, 0x44, 0x72, 0x65, 0xF7, 0x96, 0xF4, 0xFD, 0xBC, 0xFE, 0xA6, 0xF4, 0x05, 0x9E, 0x88, 0x34, 0x34, 0xC7, 0x98, ++ 0xB8, 0x68, 0xF9, 0x86, 0x60, 0x5D, 0x4D, 0x03, 0xD3, 0x04, 0xB6, 0x77, 0xE3, 0x0F, 0xF7, 0xD7, 0x83, 0x0A, 0xDD, 0x06, 0x65, 0x2B, 0xCC, 0x1B, 0xF0, 0x4D, 0x33, 0xDF, 0xFE, 0xFC, 0xEF, 0x63, ++ 0x4A, 0xF5, 0xBA, 0xE0, 0xD5, 0xC6, 0xBA, 0xB6, 0xC5, 0x64, 0xF1, 0x95, 0x20, 0x82, 0xAA, 0x38, 0x25, 0x53, 0x20, 0x01, 0x9C, 0xBC, 0x8E, 0xCA, 0x07, 0x3D, 0x80, 0xAF, 0x0A, 0x59, 0x6E, 0x4D, ++ 0x33, 0xAD, 0x73, 0xB4, 0xF1, 0xED, 0xD4, 0x20, 0xE0, 0x90, 0x0B, 0xED, 0x47, 0x49, 0x5A, 0x88, 0x62, 0xD4, 0xA9, 0xCD, 0xDE, 0xD0, 0xDE, 0xA7, 0x74, 0xCD, 0xE0, 0x23, 0x8C, 0x71, 0x2B, 0x8A, ++ 0xA9, 0x82, 0x47, 0x56, 0x66, 0x0D, 0x2B, 0x34, 0xE4, 0x7E, 0x4B, 0x59, 0x42, 0x5F, 0x17, 0xA9, 0x60, 0x8D, 0xAD, 0x38, 0x28, 0xEC, 0x9D, 0x8A, 0xDB, 0x5D, 0xD3, 0x8C, 0x7D, 0x53, 0xDD, 0xA6, ++ 0xDA, 0xC7, 0x4D, 0x3F, 0xD0, 0x3C, 0x00, 0xB5, 0x9E, 0xE9, 0xA0, 0xE5, 0x27, 0x6E, 0x3E, 0x75, 0xD0, 0x13, 0x61, 0x01, 0x66, 0x49, 0x1D, 0x87, 0x3A, 0x7D, 0xA2, 0xC9, 0xFD, 0xA3, 0x60, 0xA6, ++ 0x47, 0x73, 0x25, 0x00, 0x58, 0x41, 0x8F, 0xA7, 0x62, 0x63, 0x2D, 0xCB, 0x12, 0x63, 0x85, 0x27, 0x32, 0x60, 0x02, 0x18, 0x67, 0x53, 0xE6, 0xB5, 0xD3, 0x31, 0xE5, 0x64, 0x23, 0xC9, 0x70, 0x9D, ++ 0x34, 0x9C, 0x69, 0x5A, 0x32, 0x8A, 0x56, 0x2B, 0x13, 0x9A, 0xF5, 0x98, 0xF8, 0x5D, 0xCB, 0x35, 0x98, 0x40, 0x7D, 0x82, 0xF8, 0x49, 0xC2, 0x9A, 0x87, 0xDC, 0x41, 0xFA, 0xA7, 0x69, 0x8F, 0xAC, ++ 0x7F, 0x20, 0x4D, 0x70, 0xD0, 0x7D, 0x4A, 0xDC, 0x1D, 0x68, 0xFB, 0x46, 0x08, 0x63, 0xBB, 0x00, 0x2F, 0x3A, 0x23, 0x57, 0xCB, 0x65, 0xFB, 0x4B, 0x03, 0xBA, 0xB6, 0x8D, 0xB9, 0xB1, 0x1A, 0x09, ++ 0xC9, 0x02, 0xE8, 0x12, 0x95, 0x91, 0x54, 0x16, 0xB4, 0x51, 0xD8, 0xE5, 0xFB, 0xF7, 0x81, 0x33, 0xBE, 0xD2, 0x81, 0x81, 0x37, 0x17, 0xE3, 0x74, 0xC5, 0xB4, 0x15, 0xE7, 0x77, 0x3F, 0x95, 0xD8, ++ 0x3D, 0x8B, 0xF9, 0x7D, 0x4A, 0xC4, 0x5E, 0xAC, 0x28, 0x1E, 0x50, 0x89, 0x69, 0x32, 0xF7, 0xEE, 0xA4, 0x83, 0xE6, 0x98, 0xED, 0xD6, 0x07, 0xC3, 0xFF, 0xDD, 0xD3, 0x4C, 0x56, 0x67, 0x03, 0x28, ++ 0xEB, 0xA5, 0xE1, 0xEB, 0x24, 0x9B, 0x8E, 0x26, 0x85, 0x38, 0xBF, 0x4C, 0xF3, 0x43, 0x2E, 0xD5, 0xA9, 0x33, 0xB8, 0x2E, 0x6C, 0x0E, 0x96, 0x0D, 0xE1, 0x8A, 0x20, 0x9F, 0xA3, 0x90, 0x96, 0x93, ++ 0x87, 0x88, 0x4D, 0xAD, 0x8D, 0x8E, 0xE7, 0xE6, 0x0A, 0x89, 0x69, 0x90, 0x62, 0x16, 0x2F, 0x90, 0xBB, 0x28, 0xE4, 0xCC, 0xBA, 0x1A, 0x5F, 0x52, 0x6D, 0xE9, 0xCF, 0x7F, 0xEF, 0xEC, 0x7A, 0x77, ++ 0xDD, 0xA0, 0x7C, 0xD7, 0x00, 0x09, 0xE4, 0x8E, 0xBF, 0x8E, 0xDD, 0x9B, 0x34, 0x87, 0x26, 0xA9, 0x37, 0xE1, 0x4F, 0xF5, 0xEB, 0x6E, 0x79, 0xE3, 0xDB, 0x1B, 0x60, 0xD7, 0x0A, 0x73, 0x05, 0x11, ++ 0x15, 0x4A, 0x8A, 0xB8, 0x75, 0xF8, 0x6D, 0xEB, 0xCB, 0x9D, 0x79, 0x0F, 0xC4, 0x32, 0x84, 0x4E, 0x90, 0x3C, 0x8B, 0xD9, 0xFD, 0xB2, 0x8F, 0x99, 0x88, 0xDF, 0xAE, 0xA5, 0x56, 0xE9, 0x20, 0xE5, ++ 0x79, 0x25, 0x47, 0xAE, 0xA7, 0xA4, 0x5B, 0x4C, 0x7E, 0x68, 0x41, 0x61, 0x1E, 0x33, 0x06, 0x4E, 0x5C, 0xB5, 0x9B, 0xBA, 0xEC, 0xA6, 0x9E, 0x38, 0xA0, 0x99, 0x94, 0xAE, 0xEA, 0x3D, 0x10, 0xF6, ++ 0xFC, 0x53, 0xF6, 0x43, 0x56, 0x2F, 0xA0, 0x0A, 0x34, 0x12, 0xD4, 0xAF, 0xF8, 0x01, 0xD4, 0x8D, 0x0C, 0x58, 0xBA, 0x05, 0x5A, 0x42, 0xCD, 0xF6, 0xB8, 0xF1, 0x86, 0x16, 0x99, 0xEF, 0xD9, 0xAD, ++ 0x9D, 0xF4, 0xCB, 0xB9, 0x88, 0xE7, 0x22, 0x17, 0x12, 0xBB, 0x42, 0xA4, 0x3B, 0xE8, 0x32, 0x25, 0x09, 0x11, 0x1D, 0x3A, 0x8E, 0xBC, 0x97, 0xFA, 0xEB, 0xF9, 0xF8, 0x5D, 0x69, 0x20, 0x76, 0x5A, ++ 0x18, 0x2A, 0xD9, 0xC4, 0x54, 0x27, 0x99, 0x31, 0x70, 0x5E, 0xA2, 0x90, 0x3F, 0x6E, 0x18, 0x7D, 0x2A, 0xF6, 0xA5, 0xE4, 0xA8, 0x30, 0x54, 0x16, 0x8A, 0xA6, 0xA6, 0xF1, 0x27, 0xC8, 0xCE, 0x0C, ++ 0x56, 0xA2, 0xEF, 0x67, 0xDC, 0x1C, 0xD9, 0xB2, 0x2A, 0x51, 0x39, 0xDA, 0xC1, 0x92, 0xFF, 0xC5, 0x3A, 0x13, 0xEC, 0x52, 0xA3, 0x22, 0x07, 0xA9, 0x6A, 0x4F, 0xED, 0xB1, 0x20, 0x55, 0xFF, 0xDD, ++ 0xBE, 0xE6, 0xAE, 0xF0, 0x72, 0xF7, 0x5D, 0xB7, 0xC6, 0xCD, 0x37, 0xB2, 0x58, 0x9D, 0xC0, 0x0F, 0xBE, 0xF1, 0x33, 0x3E, 0xB1, 0x13, 0xC8, 0x22, 0x1B, 0xF8, 0x74, 0x0F, 0xD7, 0xBF, 0x7F, 0x39, ++ 0xA5, 0x7E, 0x4A, 0xE2, 0xCE, 0x86, 0xE0, 0xE8, 0xB4, 0xE9, 0x21, 0x4D, 0x67, 0x21, 0x46, 0xED, 0xE9, 0x85, 0x87, 0x15, 0x71, 0x56, 0x5E, 0x9F, 0x59, 0xCD, 0xA5, 0x92, 0x22, 0xAC, 0x9C, 0x6C, ++ 0x00, 0xD5, 0xA7, 0xC9, 0xD8, 0xA3, 0xE5, 0x46, 0xDE, 0xC8, 0x3C, 0x65, 0x54, 0xEA, 0x89, 0x13, 0x72, 0xBB, 0xCA, 0xE7, 0xD7, 0x76, 0x88, 0xDE, 0xD6, 0x0B, 0x52, 0x6C, 0x04, 0xC9, 0xBF, 0x0A, ++ 0x7D, 0x96, 0x56, 0x81, 0x90, 0x4D, 0xAC, 0x03, 0x79, 0x1F, 0x08, 0xB0, 0x71, 0xF0, 0xEE, 0x5B, 0xAB, 0xA1, 0xC4, 0x6B, 0x15, 0x61, 0x75, 0x6E, 0x58, 0x9C, 0x33, 0x7B, 0xAB, 0x4F, 0x2B, 0x75, ++ 0xAE, 0x3B, 0xF6, 0xE7, 0x74, 0x3F, 0x6C, 0xEE, 0x5F, 0x09, 0x93, 0xE7, 0x18, 0xC9, 0x58, 0x4D, 0x47, 0xEA, 0xD4, 0xC9, 0x61, 0xAE, 0x96, 0xF6, 0xD6, 0x02, 0xA5, 0x06, 0xA2, 0xA4, 0xC0, 0xF5, ++ 0x7E, 0x88, 0x1D, 0x51, 0xDC, 0x24, 0xF2, 0x77, 0xEB, 0xA9, 0xCC, 0x3C, 0x6F, 0x23, 0x58, 0x29, 0xB5, 0xBA, 0x87, 0xC2, 0x1F, 0x12, 0x32, 0x1C, 0xEE, 0x8B, 0x6E, 0xE9, 0x08, 0x9B, 0xB5, 0x2C, ++ 0x3A, 0x71, 0xAD, 0x61, 0x12, 0x46, 0xAE, 0xD9, 0x80, 0xC1, 0xB9, 0x47, 0xA6, 0x7C, 0x88, 0xA1, 0x10, 0xA7, 0xBD, 0x84, 0x49, 0xD0, 0x9C, 0xE3, 0x90, 0x6C, 0x65, 0x35, 0x45, 0x7D, 0x02, 0xF2, ++ 0x32, 0x5C, 0x70, 0xEE, 0x78, 0x63, 0xAE, 0x63, 0x23, 0x0F, 0xC2, 0x3D, 0xEC, 0xA2, 0x99, 0xBB, 0x5B, 0x0E, 0x4B, 0x1A, 0xE8, 0xE2, 0x40, 0x1D, 0xFB, 0x9D, 0x4B, 0xDD, 0xD0, 0x61, 0x18, 0xBD, ++ 0x15, 0x0F, 0x4B, 0x5C, 0xD3, 0x85, 0xAF, 0xB4, 0xFA, 0xD4, 0xEC, 0xA4, 0x6D, 0x61, 0xBE, 0xCA, 0xB1, 0x1D, 0x02, 0x70, 0x26, 0x67, 0x33, 0x33, 0xAB, 0x31, 0x4B, 0x9E, 0xF9, 0x1B, 0x7A, 0x7F, ++ 0x94, 0x0B, 0xDA, 0x44, 0x44, 0xAE, 0xFE, 0x37, 0x03, 0x6A, 0x43, 0xF2, 0xB6, 0x8D, 0x0D, 0xFF, 0xD7, 0xAF, 0x33, 0xA3, 0x63, 0x0F, 0xDB, 0x32, 0x5A, 0x74, 0xDA, 0x7B, 0x09, 0x0F, 0x94, 0x9D, ++ 0x06, 0x4B, 0xF7, 0x45, 0xB8, 0x93, 0x37, 0x15, 0x2B, 0x98, 0x0E, 0x4E, 0x20, 0xCC, 0x23, 0xFF, 0xAF, 0xCC, 0xBC, 0x7E, 0x95, 0x77, 0x04, 0xE9, 0x4B, 0xE7, 0xF3, 0xE8, 0x5F, 0x7F, 0xE8, 0x49, ++ 0x6F, 0xD5, 0xAA, 0xB9, 0x67, 0xB2, 0x7C, 0x3F, 0x17, 0x3E, 0x26, 0x26, 0x80, 0xD0, 0x44, 0x08, 0x85, 0xE6, 0xC0, 0xB2, 0xAA, 0xB0, 0x9A, 0xB8, 0x1F, 0x6D, 0xE5, 0xB2, 0x2D, 0x17, 0xD5, 0xA2, ++ 0x11, 0x97, 0xD6, 0x98, 0x93, 0xBE, 0xED, 0x51, 0x83, 0x4E, 0x2D, 0x7E, 0x3D, 0xAF, 0xF0, 0x4C, 0xF8, 0x4A, 0xA9, 0xC7, 0x79, 0x6E, 0xBB, 0x6A, 0xE2, 0x06, 0xC4, 0xE1, 0x66, 0x25, 0xFD, 0xFD, ++ 0x61, 0x39, 0x85, 0x05, 0x48, 0x06, 0x26, 0x7C, 0xD6, 0x9B, 0xFA, 0x8F, 0x5D, 0xD6, 0x0F, 0x4F, 0x21, 0x94, 0x12, 0xDF, 0x2B, 0xAB, 0xC9, 0x56, 0x41, 0xAE, 0x15, 0x54, 0x87, 0xFA, 0xF4, 0x13, ++ 0x33, 0xF5, 0xE5, 0x1B, 0xEF, 0xC2, 0xF9, 0x63, 0xE6, 0x2B, 0x74, 0x8B, 0x3D, 0x9C, 0x20, 0x20, 0x66, 0xD1, 0xEC, 0xBA, 0xB6, 0x03, 0x21, 0x79, 0x10, 0x58, 0x9B, 0xB9, 0x69, 0x55, 0x21, 0xA5, ++ 0xC5, 0x2F, 0x12, 0x38, 0x2F, 0x0D, 0xE3, 0x24, 0x3F, 0x9E, 0x92, 0xED, 0x60, 0x53, 0x12, 0x63, 0x7D, 0xCC, 0xE5, 0xAD, 0x80, 0x7D, 0xA0, 0xC9, 0x2E, 0x99, 0x32, 0x52, 0x05, 0x20, 0x41, 0xC7, ++ 0xB6, 0x8F, 0x4E, 0xB1, 0xBB, 0xB7, 0x08, 0x5A, 0x5B, 0x02, 0x04, 0x77, 0x98, 0x92, 0x30, 0xCB, 0xA8, 0x9F, 0x96, 0x6D, 0x34, 0x97, 0xC4, 0x04, 0x3D, 0x05, 0x6F, 0x79, 0x7E, 0xA0, 0xB4, 0x8E, ++ 0x24, 0x7C, 0xAB, 0xBC, 0x7E, 0x59, 0x73, 0x07, 0xDA, 0x60, 0x5A, 0x00, 0x81, 0x45, 0x45, 0x51, 0xC8, 0x96, 0xAB, 0x4E, 0xE1, 0x34, 0x6B, 0x90, 0x4E, 0x35, 0x8A, 0x58, 0xCA, 0x2F, 0x7B, 0x93, ++ 0xDA, 0x32, 0x9D, 0x08, 0x0A, 0x49, 0xDC, 0xF9, 0xD2, 0xC9, 0xD1, 0xBB, 0xD6, 0xBA, 0x82, 0x6C, 0xA7, 0x13, 0x3A, 0xB2, 0xDF, 0x61, 0xD7, 0x13, 0x16, 0xEB, 0xDD, 0xED, 0x88, 0x2E, 0x49, 0x83, ++ 0xB7, 0x67, 0x46, 0xF7, 0x14, 0x36, 0xD2, 0xD7, 0xC1, 0x4D, 0x94, 0x34, 0x71, 0x70, 0xEE, 0x00, 0x15, 0x54, 0x00, 0x28, 0x1B, 0xD3, 0xC6, 0xBF, 0xE5, 0xEC, 0xBF, 0x69, 0xDE, 0xA0, 0x59, 0x01, ++ 0x63, 0xE3, 0xA2, 0x97, 0x10, 0xC4, 0x10, 0x7A, 0x08, 0xD4, 0xDD, 0x30, 0xFD, 0x6E, 0x05, 0x0E, 0xA1, 0xE9, 0xE3, 0xF3, 0xBA, 0xCD, 0x74, 0x10, 0x35, 0xE3, 0x47, 0x18, 0xAF, 0xA9, 0xA9, 0xC8, ++ 0xAB, 0x19, 0xEA, 0x9C, 0xD8, 0x75, 0x11, 0xCC, 0x59, 0xCC, 0x60, 0x1B, 0xC6, 0x3B, 0x82, 0x0F, 0xD0, 0x96, 0x87, 0x1F, 0x95, 0x26, 0x34, 0xA2, 0xA3, 0x78, 0x87, 0x83, 0xAA, 0xE7, 0x6D, 0xA2, ++ 0x05, 0xB1, 0xEB, 0x5E, 0x94, 0x42, 0x16, 0x19, 0xFF, 0x47, 0x52, 0x5F, 0x05, 0x62, 0xE4, 0xA3, 0x63, 0x3A, 0xC7, 0xC4, 0x01, 0x7D, 0xA2, 0xC8, 0x13, 0x07, 0xBD, 0xBD, 0x74, 0xB2, 0xD9, 0x16, ++ 0x1E, 0x99, 0xC1, 0x68, 0x6A, 0x9A, 0xB1, 0xC9, 0x44, 0x1B, 0x0D, 0x35, 0xC1, 0xCE, 0x7E, 0x9A, 0x62, 0x88, 0x28, 0x92, 0x85, 0x02, 0x33, 0x20, 0x88, 0x9B, 0x63, 0x9E, 0xB9, 0xCD, 0x0A, 0x56, ++ 0x92, 0x93, 0xE3, 0x67, 0xC2, 0xBD, 0x1F, 0xEA, 0x68, 0x7F, 0x45, 0x1B, 0x3D, 0xA8, 0x80, 0x9A, 0x77, 0xCA, 0x31, 0x9D, 0xFC, 0xFF, 0xBA, 0xD4, 0x27, 0x24, 0xF2, 0xE0, 0x67, 0xCB, 0x3A, 0x85, ++ 0xE7, 0x23, 0xCD, 0xD0, 0xEF, 0xC6, 0xB4, 0xC9, 0x7B, 0x5A, 0x13, 0x6B, 0xBE, 0xFC, 0xB6, 0xF1, 0x34, 0x59, 0x2C, 0xED, 0xDD, 0x6A, 0xFC, 0x98, 0x30, 0x36, 0x5D, 0x75, 0xF7, 0x5A, 0x27, 0xCA, ++ 0xC7, 0x22, 0x56, 0x07, 0x8E, 0xD0, 0x20, 0xA4, 0x49, 0x30, 0xDE, 0x9C, 0x35, 0xCE, 0x96, 0xE1, 0x54, 0x4E, 0xE9, 0x85, 0x1B, 0xE6, 0x78, 0x48, 0x2A, 0x32, 0x7C, 0xFA, 0x37, 0xA9, 0x13, 0xE0, ++ 0x45, 0xC8, 0xC2, 0x63, 0xD9, 0xB2, 0x5E, 0xAE, 0x21, 0xA2, 0x66, 0x4A, 0xF9, 0x43, 0x03, 0x95, 0x16, 0x3F, 0x04, 0x56, 0xD1, 0xA5, 0x18, 0xF6, 0x09, 0x7C, 0x96, 0xDB, 0x8F, 0x50, 0x5F, 0x34, ++ 0x40, 0xA6, 0xC8, 0xCC, 0x31, 0xB5, 0x95, 0xAC, 0xFE, 0x9A, 0xA9, 0xCC, 0x1C, 0xCF, 0xF9, 0xFD, 0xA6, 0x56, 0xBC, 0xDB, 0x5E, 0xEB, 0x57, 0xF4, 0x1E, 0x94, 0x67, 0xC6, 0x43, 0xBA, 0x62, 0x79, ++ 0xE5, 0x41, 0xE8, 0x6C, 0x91, 0x07, 0x4E, 0x55, 0xC6, 0x3A, 0xDF, 0x41, 0x51, 0x7C, 0xEA, 0x5A, 0x6F, 0x62, 0x29, 0xF7, 0x10, 0x16, 0x62, 0xBB, 0x0A, 0xA0, 0xCE, 0xAB, 0x2B, 0x7F, 0x62, 0x11, ++ 0x96, 0xC7, 0xA7, 0x7B, 0xB3, 0x27, 0xC7, 0x68, 0xC4, 0x3D, 0x06, 0x9D, 0x71, 0xC3, 0x2C, 0x71, 0x2C, 0x83, 0x1D, 0x68, 0x50, 0xE6, 0xEB, 0x79, 0x3D, 0x7D, 0xEB, 0x08, 0xDE, 0x7A, 0x70, 0x4B, ++ 0x38, 0x6D, 0xFD, 0x2B, 0x30, 0x72, 0xC2, 0x6B, 0x89, 0xDF, 0x8D, 0x07, 0x2B, 0x3E, 0x9F, 0x56, 0x96, 0xA0, 0x73, 0x2E, 0x21, 0x5D, 0xF6, 0xDE, 0x47, 0x5D, 0x3A, 0x69, 0xF1, 0x11, 0x2F, 0x8B, ++ 0x6B, 0x8E, 0xE7, 0x6B, 0x73, 0x9C, 0x92, 0x76, 0xD9, 0xEE, 0x78, 0x17, 0xD9, 0x89, 0xAA, 0x07, 0x90, 0xD4, 0x6F, 0x8B, 0xE9, 0xBC, 0xF8, 0xA9, 0xDE, 0x83, 0xD3, 0xF3, 0xC3, 0x02, 0xA8, 0xAA, ++ 0xBE, 0xE5, 0xC8, 0xFE, 0xBC, 0x2A, 0xDC, 0x70, 0x6F, 0xC0, 0xEA, 0x55, 0xCD, 0x6F, 0x38, 0x37, 0x74, 0xF9, 0x55, 0xFE, 0xC7, 0x0A, 0x5F, 0x83, 0x80, 0x74, 0xDC, 0xB7, 0x31, 0x53, 0x2C, 0x94, ++ 0x9C, 0x88, 0x84, 0xE9, 0x5F, 0xDE, 0xCE, 0x3A, 0x7D, 0x9F, 0x7E, 0xA2, 0x1A, 0xC5, 0xA8, 0xAC, 0xDF, 0xAA, 0x89, 0x68, 0x1E, 0x95, 0x01, 0x4D, 0x5A, 0x23, 0x44, 0x31, 0x5B, 0xF8, 0xB3, 0xFF, ++ 0x97, 0x12, 0xA0, 0x9A, 0x8F, 0xDE, 0xB8, 0x29, 0x4C, 0x25, 0x7D, 0x16, 0xCC, 0xEF, 0xAA, 0x78, 0xDD, 0x0F, 0x5D, 0xFF, 0xE0, 0x49, 0xCE, 0x2B, 0x8A, 0xC7, 0xE1, 0x60, 0x02, 0xED, 0x1E, 0x32, ++ 0x8C, 0x62, 0x86, 0xA1, 0x67, 0x4A, 0x5C, 0x06, 0xF6, 0x28, 0x37, 0xAA, 0xF3, 0xEE, 0xFF, 0xFC, 0x11, 0x46, 0x94, 0x7A, 0x63, 0x0D, 0x82, 0x44, 0xAA, 0x72, 0x89, 0x8D, 0xFE, 0x5B, 0x94, 0x78, ++ 0x63, 0x70, 0x64, 0x8A, 0x13, 0xF0, 0xE1, 0x6D, 0x50, 0x27, 0x77, 0xEB, 0x8D, 0xF9, 0x62, 0xFC, 0x86, 0x3C, 0x77, 0xC1, 0x59, 0xBF, 0x64, 0xCC, 0x2A, 0x47, 0xCA, 0xF6, 0xB2, 0x12, 0xCB, 0xC6, ++ 0x14, 0x2B, 0x5C, 0x9F, 0x5B, 0xFF, 0xE2, 0xDD, 0x3B, 0xB1, 0xF8, 0x63, 0x23, 0x10, 0x74, 0x82, 0x96, 0xBB, 0x81, 0xB3, 0x62, 0xB7, 0xE4, 0x56, 0xEE, 0xE8, 0xDF, 0x29, 0x55, 0xFC, 0xDC, 0x04, ++ 0xE5, 0x5D, 0x25, 0x16, 0xA8, 0x28, 0x07, 0x12, 0xCA, 0x5B, 0x60, 0xEA, 0x90, 0x7D, 0x51, 0xB2, 0xFA, 0x72, 0xF9, 0xC7, 0x3D, 0xA7, 0xFE, 0x2C, 0x25, 0x98, 0x8F, 0x5B, 0xE1, 0xB8, 0x23, 0x68, ++ 0x25, 0xC8, 0x3A, 0x02, 0x38, 0x22, 0x39, 0x40, 0x2A, 0x29, 0x4E, 0xA4, 0xBE, 0x31, 0xA1, 0x7D, 0xBD, 0x31, 0xBA, 0x1B, 0xFF, 0xF8, 0x04, 0xCC, 0x78, 0x2F, 0xED, 0x78, 0x95, 0x09, 0x7F, 0x58, ++ 0x3D, 0xD1, 0x3A, 0xCC, 0x85, 0x49, 0x1B, 0xDD, 0x12, 0x3F, 0xE0, 0x2C, 0x14, 0x12, 0xE3, 0x42, 0x61, 0x7D, 0x9C, 0x26, 0xB8, 0xD9, 0x87, 0x7C, 0xAD, 0x5A, 0x72, 0xD2, 0x32, 0x80, 0xB5, 0x27, ++ 0x61, 0x47, 0xA7, 0x25, 0x84, 0xDA, 0xE6, 0x17, 0x23, 0x15, 0x8B, 0x9A, 0x54, 0x79, 0xD6, 0x6B, 0x6D, 0x8A, 0x6C, 0x4D, 0xB0, 0xF2, 0xE7, 0x1E, 0xDD, 0x46, 0x58, 0x85, 0xC3, 0x3A, 0x69, 0xA8, ++ 0xA7, 0x4E, 0x78, 0x16, 0x08, 0xF0, 0x64, 0x16, 0x86, 0x6D, 0x19, 0x6B, 0x69, 0x5E, 0x70, 0xA4, 0x3B, 0x7D, 0xEA, 0xBE, 0x8C, 0x00, 0x0D, 0x79, 0xEE, 0x16, 0x03, 0xD4, 0x7C, 0x45, 0xCC, 0xB8, ++ 0x5B, 0xBF, 0x79, 0x2D, 0x59, 0x14, 0x6F, 0xA3, 0x22, 0x86, 0x97, 0x6F, 0xF5, 0x91, 0x72, 0x62, 0x96, 0x38, 0xE1, 0xA0, 0x70, 0xCB, 0x0F, 0x0E, 0xCB, 0xF8, 0x09, 0xF9, 0xF5, 0xB8, 0x73, 0xFB, ++ 0xEF, 0x96, 0x87, 0x4F, 0xCD, 0xED, 0x58, 0xA2, 0xC0, 0xA4, 0x99, 0x06, 0xD9, 0x09, 0x1D, 0x29, 0xB2, 0x1D, 0x0A, 0x7B, 0x89, 0x94, 0x52, 0x5D, 0x08, 0x88, 0x74, 0x8F, 0xB7, 0xDE, 0xE1, 0x60, ++ 0xF2, 0xFC, 0xC7, 0x89, 0x52, 0xBB, 0x57, 0xBE, 0x4D, 0x36, 0x68, 0x5B, 0xE4, 0xF2, 0xB1, 0x45, 0xBC, 0xAC, 0x40, 0xE0, 0xDB, 0x30, 0x60, 0x87, 0x2D, 0x81, 0x76, 0x63, 0x91, 0xD4, 0xEC, 0x0B, ++ 0x04, 0x60, 0x9F, 0x4F, 0x2D, 0xA2, 0x28, 0x94, 0x15, 0x45, 0x8D, 0x5F, 0x15, 0x22, 0x3C, 0x8E, 0x91, 0x11, 0x88, 0xC7, 0x82, 0x5F, 0x52, 0xA0, 0xA3, 0xA2, 0xC2, 0xCA, 0x8B, 0x62, 0xA7, 0x4B, ++ 0x03, 0x71, 0x59, 0xE5, 0x4D, 0x99, 0x73, 0xC8, 0x00, 0x54, 0x3D, 0x2F, 0x6C, 0x4C, 0x0D, 0x9E, 0x3B, 0x09, 0x39, 0xC1, 0xC1, 0x68, 0x05, 0xE5, 0x79, 0x46, 0x95, 0x49, 0x9C, 0xE0, 0x13, 0xCF, ++ 0xB9, 0xB0, 0xEA, 0xEE, 0xD8, 0xDD, ++ }, ++ .msg_len = 33, ++ .msg = { 0xD8, 0x1C, 0x4D, 0x8D, 0x73, 0x4F, 0xCB, 0xFB, 0xEA, 0xDE, 0x3D, 0x3F, 0x8A, 0x03, 0x9F, 0xAA, 0x2A, 0x2C, 0x99, 0x57, 0xE8, 0x35, 0xAD, 0x55, 0xB2, 0x2E, 0x75, 0xBF, 0x57, 0xBB, 0x55, 0x6A, ++ 0xC8 }, ++ .sig_len = 4668, ++ .sig = { ++ 0x37, 0xBD, 0x0C, 0xCB, 0xC5, 0x4E, 0x5A, 0x48, 0x0F, 0x2F, 0xBB, 0x8E, 0xF3, 0x87, 0x9E, 0x83, 0x40, 0xD7, 0xF6, 0xC7, 0x42, 0x42, 0xAD, 0x44, 0xD3, 0xE8, 0xB0, 0x78, 0x3C, 0xC5, 0xBF, 0x21, ++ 0x36, 0xD7, 0xBD, 0x4A, 0x32, 0xA9, 0x55, 0x2F, 0xE0, 0xE8, 0xAF, 0x8E, 0x87, 0xD5, 0x41, 0x1D, 0x76, 0x8A, 0x69, 0x2F, 0xE2, 0xC5, 0x03, 0xA7, 0x0C, 0xCB, 0xC0, 0x3A, 0x34, 0xB3, 0xC1, 0xF0, ++ 0x81, 0x5B, 0x26, 0x4B, 0x57, 0x2A, 0x9E, 0x74, 0x60, 0x9B, 0x9A, 0xD7, 0x29, 0x3B, 0xE3, 0x72, 0x7B, 0xFE, 0x17, 0x58, 0x3B, 0x3B, 0x63, 0x4F, 0x0A, 0x11, 0x9D, 0x79, 0x3E, 0xB1, 0x4D, 0xFF, ++ 0x18, 0x64, 0x3D, 0x1C, 0x34, 0x6B, 0x65, 0xE5, 0x73, 0xEF, 0xB9, 0xD5, 0x3B, 0xFA, 0x4C, 0x20, 0x05, 0x5D, 0x55, 0xF7, 0x54, 0xAF, 0x2F, 0x73, 0xFC, 0x38, 0x62, 0x67, 0xD5, 0x89, 0x0B, 0x39, ++ 0x13, 0x01, 0x41, 0x55, 0x93, 0xB2, 0xC5, 0x69, 0x5B, 0x9C, 0x06, 0xF0, 0x01, 0xF8, 0x84, 0x5C, 0x7C, 0xFA, 0xD7, 0x7C, 0x04, 0xE4, 0x11, 0x65, 0x18, 0xDF, 0x80, 0xF0, 0x41, 0xA5, 0x8A, 0x85, ++ 0x74, 0x48, 0xE7, 0x68, 0xA7, 0x1A, 0x7A, 0x01, 0xF2, 0x43, 0x31, 0x70, 0xB3, 0x71, 0xE8, 0xE3, 0x01, 0xA5, 0x37, 0x87, 0xD5, 0xEC, 0x77, 0x05, 0xA5, 0xEE, 0x1F, 0xE4, 0xFC, 0x04, 0x91, 0xCD, ++ 0xC6, 0xC8, 0x76, 0x96, 0x8A, 0x60, 0x6E, 0xC1, 0x38, 0x6F, 0x45, 0x1C, 0xE8, 0x54, 0x77, 0x34, 0x8D, 0xE1, 0xC6, 0x8E, 0xCC, 0x33, 0x95, 0x41, 0x61, 0x24, 0x90, 0xB2, 0x4C, 0x24, 0x2D, 0x25, ++ 0x87, 0x39, 0x81, 0xF9, 0xDE, 0xA6, 0x6D, 0x13, 0xF3, 0xC2, 0x10, 0x93, 0xEA, 0x48, 0x11, 0x51, 0xD1, 0x76, 0xA5, 0x50, 0x08, 0x42, 0x55, 0x0C, 0x26, 0xD0, 0xAF, 0xB1, 0xC6, 0xAE, 0xBE, 0x8E, ++ 0x42, 0x67, 0xE3, 0x6F, 0xD5, 0x70, 0x1E, 0x45, 0xD1, 0xDF, 0x15, 0x95, 0x9C, 0x7D, 0xC4, 0x4E, 0x7F, 0x5B, 0x6B, 0xA8, 0xCA, 0x04, 0xED, 0xF1, 0xE3, 0xE6, 0x48, 0x69, 0xFA, 0x15, 0x3B, 0xA7, ++ 0x46, 0x7F, 0x0D, 0x7B, 0x2F, 0xDC, 0x91, 0x24, 0x3A, 0x22, 0x39, 0x06, 0xF1, 0xAE, 0xA0, 0xD9, 0xFC, 0x14, 0x0F, 0x70, 0xCD, 0x02, 0x5A, 0x31, 0xB4, 0x0F, 0x22, 0xC4, 0x71, 0xBD, 0xD2, 0x36, ++ 0x5E, 0xD6, 0x30, 0x2D, 0x14, 0x81, 0x31, 0x6E, 0xE3, 0xC4, 0xC1, 0x70, 0xA1, 0x62, 0xEF, 0xE9, 0xFF, 0x41, 0x85, 0xE4, 0x50, 0x08, 0xF0, 0x7F, 0x6B, 0xDB, 0xAC, 0x22, 0x1D, 0xEC, 0x0B, 0xF0, ++ 0xAF, 0x88, 0x4B, 0x16, 0xC9, 0x5F, 0x34, 0x35, 0x01, 0xAA, 0x09, 0x8A, 0xD4, 0xA1, 0xF8, 0x20, 0x68, 0xFA, 0x1F, 0xBF, 0xF0, 0xE0, 0x40, 0x94, 0x6D, 0xCD, 0x50, 0xBF, 0x00, 0x9D, 0xF1, 0xFC, ++ 0xA4, 0xA3, 0xAA, 0xDB, 0x1C, 0x29, 0x51, 0xC0, 0x86, 0xD2, 0x7F, 0x20, 0x02, 0xDF, 0xD8, 0x54, 0xE5, 0x98, 0x52, 0xF4, 0x15, 0x30, 0x90, 0xDD, 0xC1, 0xA2, 0x1A, 0x6E, 0x0B, 0xE5, 0x92, 0x18, ++ 0x7A, 0x68, 0xAE, 0x08, 0x5B, 0x1D, 0x5D, 0x98, 0xBE, 0x8F, 0xCE, 0x5E, 0x24, 0x03, 0x1F, 0x47, 0xF8, 0x34, 0x30, 0x6B, 0xE5, 0xA5, 0xB6, 0x80, 0xAC, 0xFC, 0xD9, 0xF4, 0x04, 0xC1, 0xDE, 0x85, ++ 0x79, 0x66, 0xD2, 0x54, 0x6E, 0x66, 0x94, 0x01, 0x5F, 0x05, 0x02, 0xD0, 0xE6, 0x56, 0x8C, 0x9A, 0xA1, 0xB1, 0x3B, 0x3D, 0x7B, 0x61, 0xEE, 0x6A, 0x3D, 0xA0, 0x16, 0xDD, 0x34, 0xD6, 0x44, 0xB1, ++ 0x29, 0x7E, 0x63, 0x8D, 0xF0, 0xFC, 0xB6, 0xF6, 0x85, 0x57, 0x7E, 0x16, 0x4F, 0x5D, 0x6A, 0xA6, 0xF0, 0x70, 0xC1, 0xD0, 0x21, 0x55, 0x8C, 0xBC, 0xFD, 0x6F, 0x9B, 0xA3, 0x75, 0xE2, 0x89, 0x1F, ++ 0x67, 0x26, 0xCC, 0xE4, 0xCE, 0xBC, 0x89, 0xA9, 0x63, 0x57, 0x93, 0x0D, 0x04, 0x4C, 0x16, 0xAB, 0x29, 0x45, 0x30, 0x2C, 0xE0, 0xF2, 0xB6, 0x46, 0x17, 0x04, 0x6C, 0x3C, 0x1C, 0x4A, 0x6B, 0x34, ++ 0xD5, 0xAA, 0x07, 0x4E, 0x5F, 0xCB, 0x10, 0xBB, 0xA4, 0xC2, 0xA6, 0x08, 0x26, 0x5F, 0x45, 0xD7, 0x45, 0x10, 0x75, 0x0E, 0xAC, 0x67, 0x3A, 0x82, 0x8D, 0x5D, 0x30, 0x8F, 0x34, 0x07, 0x92, 0x31, ++ 0x33, 0xD5, 0x50, 0xB2, 0x57, 0x85, 0xA8, 0x39, 0x02, 0x42, 0xDC, 0x27, 0xB0, 0x82, 0xD3, 0x87, 0xAB, 0xCC, 0xDA, 0x7C, 0xD4, 0xD6, 0xEE, 0x5E, 0xAB, 0x8D, 0x51, 0xC8, 0x76, 0x9C, 0x24, 0x3A, ++ 0x95, 0x88, 0xF0, 0x45, 0xCC, 0xD9, 0xA5, 0x17, 0x2D, 0x99, 0xD0, 0x4E, 0xE4, 0x39, 0x59, 0xDC, 0x4D, 0x95, 0xBE, 0xAC, 0x06, 0x14, 0xA2, 0xF8, 0x50, 0x97, 0xED, 0x1C, 0x47, 0x61, 0x38, 0x42, ++ 0x9D, 0x12, 0xC7, 0x75, 0x8F, 0xA5, 0x28, 0x75, 0xC7, 0x38, 0xD4, 0x6E, 0xF2, 0xD9, 0x67, 0x51, 0x90, 0xFB, 0x72, 0x65, 0xF9, 0xAA, 0xC8, 0xC6, 0xF1, 0x73, 0xE8, 0xD5, 0x5C, 0x6B, 0x33, 0x81, ++ 0x9F, 0xBF, 0x9B, 0x5B, 0xD3, 0x12, 0x4D, 0x30, 0xC5, 0x81, 0x3E, 0x44, 0x7F, 0xAE, 0x23, 0xFC, 0xA5, 0xDB, 0x43, 0x8E, 0xC5, 0xCC, 0x8A, 0x66, 0xDE, 0xEB, 0xEB, 0x39, 0x53, 0x49, 0x29, 0xCE, ++ 0x4C, 0xE0, 0xB9, 0x8F, 0x1C, 0xA0, 0xE2, 0xC7, 0xD4, 0x53, 0x81, 0xC8, 0xF2, 0xE2, 0xFD, 0x2F, 0xED, 0x40, 0x6B, 0x29, 0xCC, 0x6A, 0x09, 0xD8, 0x1B, 0x44, 0xA4, 0x4F, 0x16, 0xC1, 0x50, 0xD8, ++ 0x65, 0xE8, 0xEA, 0x60, 0x60, 0xA8, 0x58, 0x39, 0x7C, 0x07, 0xF8, 0x57, 0x3A, 0x9C, 0xA2, 0x93, 0x00, 0x7D, 0x1B, 0xE4, 0xDD, 0xD8, 0xA5, 0x37, 0xDD, 0x9A, 0x57, 0x7F, 0x5E, 0x42, 0xF3, 0xEC, ++ 0xB4, 0x8F, 0x75, 0x81, 0x51, 0xA4, 0x01, 0xCA, 0xF2, 0x26, 0xA4, 0x8D, 0x94, 0x81, 0x9D, 0x2A, 0x43, 0xED, 0x08, 0xCD, 0xB6, 0xAE, 0xDD, 0x64, 0x01, 0x14, 0x03, 0x22, 0x31, 0x3B, 0xFD, 0xE2, ++ 0x76, 0x05, 0x71, 0x7E, 0x35, 0x66, 0xDD, 0x31, 0xBB, 0x5C, 0x52, 0x71, 0x45, 0x90, 0x45, 0x93, 0xA4, 0x74, 0x41, 0xD2, 0xF3, 0xC7, 0x44, 0x2C, 0x63, 0x69, 0x5D, 0xD0, 0xC3, 0x60, 0xBD, 0xA9, ++ 0x95, 0xFB, 0xFE, 0xC3, 0xE6, 0xC6, 0x63, 0xD1, 0xD2, 0x2D, 0x89, 0x0D, 0x7D, 0xF7, 0x05, 0x98, 0xF1, 0xBB, 0xC6, 0x19, 0x2A, 0x4F, 0x3A, 0x0A, 0x45, 0x8A, 0x95, 0x44, 0xCA, 0xDD, 0x6F, 0x18, ++ 0xDF, 0xA9, 0xEE, 0xA6, 0xE3, 0x20, 0x6B, 0xDE, 0x60, 0xED, 0x1C, 0x57, 0xCC, 0xC8, 0x00, 0x5F, 0x7C, 0x7C, 0x82, 0x74, 0xC1, 0x40, 0x7C, 0x8F, 0xAF, 0x4E, 0xBD, 0x69, 0xD5, 0x76, 0x19, 0x79, ++ 0xF9, 0x07, 0xCF, 0xD0, 0x62, 0x4E, 0xC7, 0xBA, 0x1F, 0xD7, 0xB5, 0x67, 0x81, 0xAC, 0x71, 0xA4, 0xA5, 0x26, 0x84, 0xFF, 0xC3, 0x2D, 0x5B, 0x53, 0x3C, 0xB5, 0x6C, 0x07, 0xF6, 0x35, 0xF5, 0x79, ++ 0x69, 0xC8, 0xF1, 0x58, 0x8D, 0x34, 0xD0, 0xE7, 0xA1, 0xC7, 0xA9, 0x42, 0xAA, 0xA3, 0xF3, 0x56, 0x0B, 0x0D, 0xB4, 0xF8, 0xCE, 0xBC, 0xAF, 0x6F, 0x25, 0x24, 0x11, 0x4A, 0x5F, 0x6A, 0xF7, 0x1B, ++ 0x5F, 0x50, 0xE9, 0x42, 0xE6, 0x74, 0xA8, 0x77, 0xC1, 0x74, 0xD9, 0x22, 0x00, 0x86, 0x5A, 0x5A, 0x06, 0xFB, 0x2D, 0x7F, 0xB4, 0x74, 0x41, 0x46, 0x75, 0xED, 0x31, 0x72, 0xF5, 0xF1, 0x53, 0x8F, ++ 0x58, 0x1E, 0xDE, 0x5E, 0xDD, 0x74, 0x5B, 0x55, 0xF9, 0xA2, 0xFC, 0x49, 0x95, 0xEB, 0x98, 0x4B, 0x8A, 0x12, 0xD6, 0xF6, 0x5A, 0xAE, 0xDF, 0x8D, 0x8D, 0x6F, 0xF5, 0x3C, 0xE2, 0x38, 0xC3, 0xA6, ++ 0x6C, 0xF2, 0x34, 0xF5, 0x94, 0x36, 0x47, 0x1C, 0x9F, 0xCB, 0xD3, 0x8E, 0x7F, 0x26, 0xBD, 0xF9, 0x74, 0x1B, 0x59, 0x9E, 0x16, 0xB8, 0xF7, 0xED, 0x46, 0x44, 0xBB, 0x6A, 0xBE, 0x81, 0xBB, 0x94, ++ 0x0C, 0x24, 0xFA, 0x62, 0x0F, 0x44, 0x35, 0x84, 0xF9, 0x9B, 0xB9, 0xDC, 0x25, 0x71, 0xB5, 0xEB, 0x81, 0x19, 0x27, 0x52, 0x9C, 0x7A, 0xDC, 0xEB, 0xEE, 0xF7, 0xAF, 0x05, 0xBA, 0x7E, 0x88, 0x89, ++ 0x9F, 0xAB, 0xF8, 0x74, 0x0F, 0xCD, 0xD1, 0x27, 0x5B, 0x12, 0xF7, 0x2A, 0x75, 0xC6, 0xD0, 0x00, 0x56, 0x5C, 0x5A, 0xC8, 0x8F, 0xB1, 0xFD, 0x99, 0x5B, 0x84, 0xED, 0x38, 0x4D, 0x5D, 0x6A, 0x60, ++ 0x29, 0x37, 0x37, 0xD7, 0x2C, 0xC1, 0x09, 0x44, 0x36, 0x39, 0x71, 0xDA, 0x44, 0xD5, 0xEA, 0xE9, 0xE8, 0xB1, 0xE8, 0x0D, 0x75, 0x76, 0xC5, 0x0A, 0xAF, 0xF6, 0x7E, 0x42, 0x31, 0x96, 0xF3, 0x78, ++ 0x57, 0xD1, 0xD2, 0x35, 0xAB, 0x28, 0x39, 0xAE, 0x37, 0x79, 0xF9, 0xF2, 0xF9, 0xB7, 0x59, 0xFC, 0x52, 0xDA, 0xAE, 0xB8, 0x63, 0x7B, 0x8F, 0x4F, 0xC9, 0x0B, 0xD9, 0x4A, 0xDB, 0x6F, 0x57, 0x72, ++ 0x20, 0x82, 0xE9, 0x43, 0xD7, 0xCE, 0x3E, 0x73, 0x50, 0x1D, 0x8C, 0x93, 0xB5, 0x21, 0x2D, 0xEC, 0xE4, 0x95, 0x35, 0x53, 0x6E, 0xFC, 0xEA, 0xB8, 0xB8, 0x5E, 0xB2, 0xAA, 0x94, 0xCB, 0xE7, 0x7B, ++ 0xAA, 0xDF, 0x46, 0x58, 0x92, 0x01, 0xA3, 0xA8, 0xAC, 0xA4, 0x83, 0x9E, 0x51, 0x9B, 0x6F, 0xD0, 0xCC, 0x52, 0xEA, 0x58, 0xA8, 0xAC, 0x08, 0xDC, 0x15, 0xEE, 0xF4, 0x8E, 0xDB, 0x89, 0xA1, 0xFC, ++ 0x46, 0xE7, 0x13, 0x53, 0xFE, 0x73, 0xF6, 0x8E, 0x0F, 0x48, 0x55, 0xB7, 0xFF, 0x73, 0x27, 0xAE, 0x4B, 0xCB, 0xA0, 0x9D, 0xE0, 0x33, 0x53, 0xD4, 0x1E, 0xDE, 0x26, 0x78, 0x5A, 0x94, 0x49, 0x6A, ++ 0xCB, 0x4E, 0x74, 0x3B, 0xA0, 0x65, 0xD1, 0x79, 0x3F, 0xBE, 0x5B, 0x29, 0x3A, 0x77, 0x1C, 0xCB, 0x8B, 0x8D, 0x8B, 0xD2, 0x76, 0x77, 0xD5, 0xFF, 0xF7, 0x43, 0xF9, 0x49, 0x77, 0x21, 0x9D, 0x55, ++ 0x57, 0x35, 0xE5, 0xD0, 0xAC, 0xE1, 0x18, 0xC2, 0x57, 0x1F, 0xC6, 0x96, 0xAF, 0x1F, 0xB0, 0xA1, 0x97, 0x6A, 0x37, 0x85, 0xB0, 0x89, 0x61, 0x11, 0x7F, 0x19, 0x98, 0xB7, 0xE6, 0x1C, 0xF8, 0x14, ++ 0xFE, 0x91, 0xA8, 0xB8, 0x1D, 0x62, 0xE4, 0x8D, 0x93, 0xB0, 0x28, 0x0D, 0xBA, 0xBF, 0x18, 0xE1, 0x12, 0x12, 0x43, 0xBF, 0xF3, 0x7B, 0x5A, 0xF7, 0x1E, 0x29, 0xA3, 0x1B, 0x48, 0x4A, 0xDA, 0x4F, ++ 0x1F, 0xBC, 0x88, 0x30, 0x11, 0x27, 0x76, 0x60, 0xAE, 0xB4, 0x71, 0xB3, 0x09, 0xFA, 0x00, 0x32, 0x23, 0x5B, 0x3B, 0x2E, 0x2B, 0x2C, 0xAF, 0xCC, 0xC5, 0x44, 0x61, 0xB0, 0xB4, 0x5A, 0xE1, 0x5D, ++ 0x92, 0xAD, 0x61, 0xB6, 0x4C, 0x5F, 0x37, 0x4A, 0x23, 0x74, 0x44, 0xF9, 0x63, 0x1D, 0xE4, 0x3C, 0x0B, 0x67, 0x8D, 0x03, 0xB6, 0x4E, 0xA3, 0xF9, 0x9B, 0xBB, 0xD1, 0x79, 0x61, 0x15, 0x39, 0xFC, ++ 0x91, 0x69, 0x3B, 0x81, 0xE6, 0xA2, 0xF2, 0xFC, 0x81, 0x70, 0xE8, 0xBF, 0xD6, 0xD5, 0xB7, 0x8A, 0x5C, 0xD6, 0x44, 0x88, 0x1A, 0x67, 0xFD, 0x28, 0xAC, 0xDA, 0x74, 0x70, 0x58, 0x47, 0x27, 0x6C, ++ 0x16, 0xBD, 0xF0, 0x9E, 0xBE, 0xBB, 0x21, 0x8C, 0xC6, 0x89, 0xB4, 0x50, 0x85, 0x43, 0xC3, 0x9E, 0xA6, 0x56, 0x44, 0xA7, 0xF3, 0x3D, 0xF4, 0x7D, 0x32, 0x72, 0xA3, 0x7C, 0xA8, 0x30, 0x76, 0x7B, ++ 0x23, 0xF5, 0x52, 0xA1, 0xB3, 0x89, 0xF1, 0x4B, 0xE8, 0x71, 0xFF, 0x72, 0x59, 0xFB, 0x3A, 0x32, 0x93, 0x0F, 0x56, 0xDD, 0x42, 0x71, 0xF0, 0x21, 0xAA, 0xAC, 0xD7, 0xA2, 0xAC, 0x82, 0x03, 0xCF, ++ 0x69, 0xE9, 0x64, 0x30, 0xA1, 0x6A, 0x2F, 0x96, 0xC1, 0x1F, 0xD2, 0xCD, 0x44, 0xE0, 0x86, 0xE1, 0x16, 0x8A, 0x8C, 0x1A, 0x63, 0x7E, 0x23, 0x21, 0xF6, 0x0C, 0xA5, 0x93, 0x0C, 0x02, 0xF9, 0x2D, ++ 0xFF, 0x2D, 0x30, 0xAB, 0x10, 0x5A, 0xF8, 0x46, 0xB1, 0x6A, 0x90, 0xE2, 0xA7, 0x4D, 0xBC, 0x97, 0xDA, 0x40, 0xA1, 0x3F, 0x40, 0x5B, 0x71, 0x04, 0xBF, 0x2F, 0x22, 0xFC, 0xA4, 0x2E, 0x3A, 0x50, ++ 0x0A, 0x72, 0x7A, 0xE1, 0xEA, 0x24, 0x01, 0x21, 0x60, 0x16, 0xFE, 0x8B, 0xF0, 0xDD, 0xBA, 0xE6, 0x8E, 0xD8, 0x74, 0x17, 0xFA, 0x76, 0x0D, 0xBA, 0x07, 0xD8, 0x4C, 0x26, 0x9C, 0xF4, 0x2B, 0xBE, ++ 0xB3, 0x7D, 0x5B, 0x90, 0xEB, 0x23, 0x69, 0x76, 0xB8, 0x6F, 0x4D, 0x8F, 0x35, 0xE7, 0x82, 0x83, 0x7E, 0x32, 0xA1, 0x95, 0xF9, 0xCF, 0xD6, 0xC6, 0x73, 0x53, 0x6A, 0xA0, 0x43, 0x5B, 0x38, 0x0C, ++ 0x02, 0xD1, 0xB7, 0xB0, 0xDE, 0x3C, 0x47, 0x9F, 0xE6, 0xB5, 0xFE, 0x6C, 0xF9, 0x7C, 0x3B, 0xD7, 0x46, 0x10, 0xCF, 0x15, 0x06, 0xE5, 0x99, 0x86, 0xF3, 0x81, 0x46, 0xB9, 0xA8, 0x96, 0x3C, 0xAE, ++ 0x08, 0x00, 0x30, 0x75, 0xFF, 0x60, 0x7D, 0x47, 0x0E, 0x87, 0xA7, 0x2E, 0x8F, 0xFB, 0xC7, 0xE1, 0x38, 0x38, 0xDA, 0x93, 0xDC, 0x3A, 0x4B, 0x3E, 0x52, 0x34, 0x75, 0xCD, 0xC4, 0xE4, 0x8C, 0x2A, ++ 0x54, 0x5F, 0x30, 0xE5, 0x89, 0x24, 0x7C, 0x64, 0x62, 0x2F, 0xA1, 0x05, 0x59, 0xB7, 0x24, 0xBB, 0x5F, 0xE8, 0x73, 0xED, 0xDF, 0x78, 0x38, 0xE1, 0x83, 0x2A, 0xD2, 0x17, 0xD4, 0xE8, 0x0B, 0x58, ++ 0xB9, 0xFB, 0x39, 0xB6, 0x6C, 0xBE, 0x9F, 0x26, 0x48, 0x09, 0xEE, 0xD5, 0x94, 0x23, 0xF0, 0xA3, 0xCD, 0x3F, 0x00, 0xAD, 0xFC, 0x47, 0x42, 0xCE, 0x1B, 0x3C, 0xB6, 0x5B, 0x2B, 0xD2, 0xE3, 0x10, ++ 0x59, 0x50, 0x9A, 0xFC, 0x7E, 0x48, 0x36, 0xDF, 0x0A, 0xE6, 0xF9, 0xD5, 0xC0, 0x63, 0x30, 0x95, 0x3F, 0xA2, 0xBB, 0x6F, 0xD0, 0x18, 0x7A, 0x6C, 0xAB, 0x88, 0x14, 0xEE, 0x12, 0xD1, 0x4E, 0xBC, ++ 0x6D, 0xEF, 0xFC, 0x23, 0xE1, 0xC9, 0x01, 0x65, 0xE2, 0xE7, 0x78, 0x59, 0x45, 0xF1, 0x8B, 0xCC, 0x74, 0xD8, 0xB1, 0xC6, 0xAF, 0xA1, 0x5B, 0x32, 0x6C, 0x04, 0x7D, 0x94, 0x66, 0x8C, 0x03, 0x32, ++ 0xD1, 0x47, 0xAF, 0x57, 0x52, 0x17, 0x64, 0x52, 0xC7, 0x12, 0x20, 0xB0, 0xA4, 0x32, 0xD4, 0x89, 0x9B, 0x6C, 0xEA, 0xA5, 0x87, 0x59, 0x9C, 0xAC, 0xF0, 0x04, 0xBA, 0x12, 0xA9, 0x0B, 0x26, 0x06, ++ 0x21, 0x43, 0x06, 0xFA, 0x30, 0x0A, 0x4A, 0x13, 0xBF, 0x8F, 0x99, 0x4F, 0x46, 0xF5, 0xDF, 0x92, 0xE6, 0xD3, 0xBF, 0x47, 0x2C, 0xF7, 0x29, 0xFF, 0xF6, 0x66, 0xF2, 0x07, 0xEA, 0x71, 0xD5, 0x2C, ++ 0xF6, 0xF2, 0xB1, 0x9C, 0x87, 0xCE, 0xAF, 0x08, 0xCD, 0x44, 0x5D, 0x18, 0x4F, 0x89, 0x81, 0xCA, 0x28, 0xCB, 0xFE, 0xA0, 0x03, 0x06, 0xAC, 0x76, 0x8B, 0x47, 0x15, 0x42, 0xF3, 0x27, 0x48, 0x76, ++ 0x68, 0x4B, 0xCE, 0x7C, 0x17, 0xEB, 0xEC, 0x6C, 0xC6, 0xD7, 0xF9, 0x0E, 0xC1, 0x3D, 0xA9, 0x4C, 0xD7, 0xB4, 0xE9, 0x8E, 0x1C, 0xFA, 0xBA, 0x8F, 0x9C, 0xDD, 0xBF, 0x08, 0xCF, 0xD7, 0xDD, 0x5E, ++ 0x3A, 0x73, 0x25, 0x66, 0x36, 0x65, 0x98, 0x0D, 0x3F, 0x55, 0x59, 0x22, 0x60, 0x8A, 0x05, 0xD9, 0xDC, 0x20, 0x76, 0x69, 0x29, 0x41, 0x30, 0x66, 0xB3, 0xB1, 0xAF, 0x98, 0x44, 0x31, 0x34, 0x5F, ++ 0xD0, 0x12, 0x1D, 0x16, 0x42, 0xEA, 0xB5, 0x84, 0xF7, 0x47, 0x37, 0x3D, 0x08, 0xCE, 0x5B, 0x2E, 0x26, 0xE7, 0x6B, 0x51, 0xAB, 0x58, 0xE3, 0x9E, 0x6F, 0x9E, 0x6C, 0x4C, 0x33, 0xF1, 0x52, 0xE5, ++ 0x03, 0x7F, 0x7F, 0x52, 0x76, 0x0A, 0x98, 0x36, 0x94, 0x1D, 0x43, 0xF4, 0x3C, 0x2E, 0x8C, 0x34, 0x6E, 0x40, 0x4A, 0xF3, 0x51, 0x80, 0x13, 0x3C, 0x2C, 0x8B, 0x44, 0x03, 0x86, 0x98, 0xFB, 0xE6, ++ 0xE8, 0x44, 0xEB, 0xC9, 0x66, 0x57, 0xD5, 0xD3, 0x24, 0xCE, 0xB2, 0xCC, 0x38, 0xA4, 0xF2, 0xE3, 0xB0, 0x09, 0x38, 0x39, 0x3B, 0x05, 0x4E, 0x19, 0xA1, 0xAF, 0x2C, 0x7E, 0x2C, 0xBB, 0xC1, 0xC4, ++ 0x52, 0xB6, 0x9D, 0x02, 0xA4, 0xBF, 0x04, 0xEB, 0x58, 0x42, 0xAA, 0x6A, 0x0A, 0xF8, 0xFB, 0x9D, 0x85, 0xD7, 0x98, 0x5B, 0x9B, 0xB2, 0x3D, 0x86, 0x06, 0x24, 0xB4, 0xE4, 0x04, 0x7E, 0x14, 0x26, ++ 0xF7, 0x17, 0x76, 0x7E, 0x51, 0x5C, 0x3D, 0x99, 0xF4, 0xF3, 0xA1, 0x05, 0x66, 0x56, 0x23, 0x2A, 0x21, 0x1C, 0xC2, 0xC8, 0x07, 0xF1, 0xF9, 0xF9, 0x61, 0x1D, 0xC8, 0xAE, 0x50, 0x81, 0x94, 0xF7, ++ 0xD6, 0x18, 0x2E, 0xE3, 0xAE, 0x96, 0x71, 0xB3, 0x45, 0xD0, 0x23, 0x18, 0x94, 0x78, 0x6E, 0x70, 0x72, 0x42, 0xF0, 0x68, 0x80, 0x69, 0x5A, 0x3F, 0xA6, 0x26, 0x89, 0x15, 0x74, 0xFA, 0xEE, 0xEE, ++ 0x83, 0x39, 0xDE, 0xBE, 0x23, 0x0E, 0xE7, 0x6B, 0x82, 0xA9, 0xAE, 0x4F, 0x03, 0xD9, 0xCC, 0xA2, 0x8F, 0x3B, 0x9F, 0x2F, 0x06, 0xAC, 0x23, 0xE3, 0xD2, 0xCF, 0x76, 0xF0, 0x19, 0x50, 0x6F, 0xEC, ++ 0x5C, 0x6E, 0x99, 0x07, 0x58, 0x7F, 0xB3, 0xBF, 0x4C, 0x2B, 0xE6, 0x58, 0xC5, 0x6E, 0xD6, 0x31, 0x88, 0x46, 0x56, 0xD6, 0xC2, 0x0E, 0xE1, 0x0B, 0x78, 0xD8, 0xF2, 0xD8, 0x01, 0x82, 0x30, 0xCD, ++ 0xF9, 0x5E, 0xB8, 0x6E, 0x9C, 0xFD, 0xA2, 0xE1, 0x55, 0xBA, 0x33, 0x58, 0x12, 0xFC, 0x72, 0xEB, 0x88, 0x0B, 0xEA, 0x3A, 0x8C, 0x3A, 0x98, 0xCB, 0x56, 0x71, 0xE0, 0xE4, 0x03, 0x70, 0x4A, 0x55, ++ 0x33, 0x62, 0x5B, 0x3E, 0xFA, 0x5C, 0xD3, 0x6C, 0x93, 0xDA, 0x37, 0x77, 0x21, 0xBF, 0x43, 0x82, 0xA0, 0xD0, 0x11, 0x77, 0xBC, 0xC5, 0xBC, 0xB4, 0xB7, 0x08, 0x23, 0x32, 0xE3, 0xE5, 0x85, 0x1B, ++ 0x17, 0xF7, 0xB9, 0xD9, 0x10, 0xD2, 0x19, 0xEC, 0x5F, 0x98, 0xB9, 0xCE, 0x2E, 0xD2, 0x7F, 0x40, 0xB5, 0x72, 0x13, 0x8F, 0xE9, 0xA0, 0x3F, 0x15, 0x48, 0x65, 0x23, 0xB2, 0x9A, 0xA4, 0xC6, 0x07, ++ 0x60, 0x17, 0xEF, 0xD2, 0x70, 0x70, 0x56, 0x0A, 0xC6, 0x13, 0xB3, 0x1D, 0x76, 0xB9, 0x60, 0x07, 0xEA, 0x98, 0xD7, 0xB0, 0x1D, 0x9A, 0x92, 0x54, 0x0C, 0x6A, 0x03, 0x0C, 0x4D, 0x0B, 0x98, 0x50, ++ 0x8A, 0x14, 0x51, 0xE6, 0x48, 0x7F, 0x11, 0x2E, 0xF9, 0xE9, 0x05, 0xBA, 0x88, 0x92, 0x7A, 0xD6, 0x19, 0xEE, 0xEC, 0x6B, 0x58, 0xEE, 0xF0, 0x62, 0xE9, 0x1D, 0x35, 0x10, 0xB4, 0xED, 0xDA, 0xB2, ++ 0xE5, 0xF9, 0x15, 0x46, 0x70, 0xEA, 0x8C, 0xF0, 0x00, 0x4C, 0xA4, 0xE2, 0xCC, 0xB5, 0xCE, 0x6C, 0x18, 0x70, 0xDA, 0x6B, 0xD8, 0xFD, 0xDC, 0x36, 0x41, 0x03, 0x91, 0x08, 0x82, 0x23, 0xF1, 0x53, ++ 0xF6, 0x83, 0x97, 0x6B, 0xAB, 0x00, 0x87, 0xB2, 0xAF, 0x15, 0x7C, 0xA7, 0x89, 0x3E, 0x5C, 0x34, 0xF8, 0x38, 0xB2, 0x2A, 0xE6, 0x51, 0x4A, 0xB3, 0x81, 0xF4, 0x7A, 0x63, 0x3E, 0xC8, 0x9A, 0x2E, ++ 0x1E, 0x51, 0x11, 0x18, 0x75, 0xB3, 0xAE, 0x9A, 0xEB, 0x66, 0x7D, 0xC8, 0x38, 0x6D, 0xB8, 0x1F, 0x13, 0xFF, 0x8D, 0xF7, 0x38, 0xB1, 0x02, 0x15, 0xDA, 0x52, 0x21, 0x01, 0xEF, 0xB8, 0xAD, 0xC9, ++ 0xB1, 0x08, 0x75, 0xA4, 0x79, 0xB6, 0x47, 0x93, 0xB2, 0x4C, 0x67, 0x68, 0x41, 0xE3, 0x5C, 0x97, 0xA8, 0xE7, 0xEE, 0xBC, 0x6C, 0x51, 0x72, 0xCA, 0x88, 0x66, 0x1F, 0x2B, 0x62, 0x86, 0x46, 0x31, ++ 0x2A, 0x68, 0x8C, 0xCC, 0x12, 0x43, 0x7D, 0x70, 0x39, 0x0C, 0x3E, 0x16, 0x21, 0x92, 0x0E, 0x65, 0x53, 0x98, 0xFF, 0x9A, 0x7E, 0x53, 0x74, 0xDF, 0xEC, 0xE4, 0x00, 0x19, 0x5B, 0x6A, 0x43, 0x1C, ++ 0xDC, 0xC4, 0xB2, 0xF4, 0x4D, 0xAA, 0xC9, 0xBF, 0x91, 0x5E, 0x1B, 0x23, 0xA8, 0x5F, 0xED, 0x35, 0xE3, 0xC4, 0x3F, 0xCF, 0x02, 0x13, 0x04, 0x02, 0x10, 0x94, 0x83, 0x13, 0x48, 0x98, 0x37, 0x08, ++ 0x0F, 0x1D, 0x80, 0x30, 0x27, 0xB0, 0x98, 0x95, 0x11, 0xD0, 0x63, 0x16, 0x7B, 0x36, 0x58, 0xD3, 0xF9, 0x8C, 0x0D, 0x2C, 0xA8, 0x79, 0x76, 0x53, 0x49, 0x28, 0x98, 0xC8, 0x14, 0x0E, 0x21, 0x86, ++ 0x9C, 0x56, 0x3A, 0x5C, 0x03, 0xB7, 0x86, 0x07, 0x8F, 0x63, 0x4D, 0x75, 0xED, 0x2B, 0xDA, 0xD2, 0x74, 0x22, 0x51, 0xB6, 0x36, 0x48, 0x7D, 0x1A, 0xFF, 0xAB, 0xF3, 0x1E, 0x66, 0x46, 0x98, 0xC1, ++ 0x77, 0x3F, 0x4E, 0x4D, 0xE9, 0xF2, 0xC3, 0xA4, 0xFE, 0xE7, 0x58, 0xEA, 0x07, 0x34, 0x89, 0x46, 0x99, 0x48, 0xBC, 0x9B, 0x50, 0xDB, 0x60, 0xD0, 0x5D, 0x9F, 0x18, 0x31, 0x41, 0x48, 0x94, 0xC2, ++ 0x06, 0x19, 0x0E, 0xCD, 0xE8, 0xF2, 0x49, 0xBD, 0x43, 0x57, 0x7C, 0x8D, 0x40, 0xCA, 0x61, 0x1D, 0x23, 0xB6, 0xF7, 0x54, 0xCB, 0x06, 0xC6, 0x77, 0xC7, 0x1A, 0x77, 0x00, 0xCB, 0x8A, 0xF9, 0x30, ++ 0xC5, 0xFF, 0xDB, 0x55, 0x4C, 0xA6, 0xAB, 0xE6, 0xD0, 0x83, 0xEE, 0x1A, 0x5A, 0xBF, 0xAA, 0x27, 0xA6, 0xF3, 0x1A, 0x83, 0x02, 0xBF, 0xD5, 0x78, 0xBC, 0x52, 0x93, 0xBD, 0xA4, 0xC1, 0x84, 0xE7, ++ 0xD7, 0xBB, 0x58, 0x9F, 0x6D, 0xEA, 0x11, 0xC9, 0xF3, 0x9A, 0xB9, 0xCD, 0x09, 0x8A, 0x72, 0x81, 0x63, 0xD7, 0x96, 0x2B, 0x6A, 0x40, 0x06, 0xF2, 0x65, 0x27, 0x73, 0xD5, 0xD8, 0xCA, 0xDA, 0x35, ++ 0xFB, 0x07, 0xDD, 0x8D, 0x39, 0x2D, 0xF7, 0x07, 0x9D, 0x1D, 0x72, 0x1D, 0xFA, 0xEC, 0xFF, 0xAC, 0xDB, 0x80, 0x81, 0x42, 0xFB, 0xA4, 0xF3, 0xC9, 0xB5, 0xC3, 0x1C, 0x81, 0xBB, 0x58, 0xA9, 0xAA, ++ 0x30, 0x1F, 0x3D, 0x54, 0xEB, 0x4B, 0x0D, 0xBF, 0xF7, 0xF2, 0x67, 0x73, 0xB4, 0x56, 0xD5, 0xC0, 0x2F, 0x94, 0x25, 0x4E, 0xB7, 0x7E, 0x35, 0x3A, 0x68, 0x75, 0x3D, 0xCD, 0xC6, 0x2E, 0xC2, 0x3B, ++ 0xDD, 0x5D, 0x6B, 0xBA, 0x07, 0xDB, 0x3E, 0xAC, 0x51, 0xE6, 0x4C, 0x34, 0xB4, 0xB5, 0x34, 0x38, 0xBF, 0x7C, 0x6E, 0xF9, 0xC6, 0x23, 0x7B, 0x68, 0xF6, 0x98, 0xE4, 0x31, 0x50, 0x77, 0x23, 0xA2, ++ 0xE3, 0xBC, 0x43, 0xDD, 0xB6, 0xD9, 0x52, 0xA4, 0xF1, 0x2B, 0x43, 0xF7, 0x64, 0xF7, 0x5B, 0x5C, 0x6C, 0xB8, 0x82, 0xF7, 0xFE, 0xB7, 0x38, 0xAE, 0x3F, 0xB9, 0x1C, 0xBF, 0x49, 0x7E, 0x8E, 0x1D, ++ 0x1B, 0x1D, 0x59, 0x22, 0x79, 0xAF, 0x26, 0x16, 0x6C, 0xCA, 0x5A, 0xBD, 0xD2, 0x8E, 0x6E, 0xFF, 0x4F, 0xBA, 0x74, 0x60, 0x5E, 0xA8, 0x85, 0xCE, 0xEB, 0x5A, 0x01, 0xEA, 0xFD, 0xE3, 0x16, 0x93, ++ 0x9C, 0x35, 0xB8, 0x01, 0x0D, 0xD8, 0x57, 0x9A, 0x3A, 0x94, 0xFC, 0x68, 0x5E, 0xEB, 0x1F, 0x62, 0x83, 0xC5, 0xE6, 0xAD, 0x51, 0xE8, 0x2A, 0x93, 0x51, 0xC9, 0xD1, 0xA3, 0xFD, 0xB8, 0xB3, 0xD2, ++ 0x6D, 0x02, 0x93, 0xA8, 0xBC, 0xBF, 0x25, 0x6B, 0x5E, 0x5B, 0xB3, 0x31, 0x23, 0x3A, 0x30, 0xDA, 0xF0, 0xFE, 0x4A, 0xDE, 0x80, 0x82, 0xB3, 0x03, 0xC3, 0x9E, 0x55, 0x1D, 0xBC, 0xC3, 0x02, 0xBF, ++ 0x9B, 0x8A, 0xD3, 0x93, 0x3C, 0xB9, 0xAD, 0x90, 0x0A, 0x68, 0x25, 0x36, 0x7E, 0x15, 0x3E, 0x89, 0x6B, 0xC9, 0xAF, 0xDF, 0x8E, 0x40, 0x55, 0xA9, 0xD0, 0x9B, 0x85, 0x4C, 0xA8, 0x3D, 0x3A, 0xDF, ++ 0x6E, 0x00, 0x43, 0x75, 0xC4, 0xED, 0xE4, 0xEC, 0x5C, 0x57, 0x80, 0x5F, 0x79, 0xA2, 0x06, 0x03, 0x4C, 0x51, 0x40, 0xCC, 0x60, 0x27, 0x7E, 0xAA, 0x74, 0xCD, 0xEE, 0xE9, 0xF0, 0x49, 0x3E, 0x90, ++ 0x91, 0xC2, 0x29, 0x98, 0xB6, 0x13, 0x86, 0x3C, 0xE3, 0xAB, 0x77, 0x98, 0x39, 0x2E, 0x69, 0x67, 0x58, 0xC0, 0x32, 0x28, 0x6E, 0x10, 0x39, 0xBB, 0x13, 0x6C, 0x7C, 0x54, 0x30, 0xCB, 0xCD, 0x6D, ++ 0x99, 0x9A, 0xA1, 0xF7, 0xB2, 0x8B, 0xE6, 0x03, 0x32, 0xCE, 0x70, 0xF5, 0x6E, 0xE3, 0x1C, 0x9E, 0xAB, 0x2D, 0x1E, 0x41, 0x3F, 0x0E, 0x65, 0x59, 0xE1, 0xF5, 0xCC, 0x6A, 0x5A, 0xAA, 0x8A, 0xD2, ++ 0x64, 0x46, 0x88, 0x85, 0x52, 0x18, 0x1B, 0x8A, 0xA5, 0x30, 0xE4, 0xC6, 0x64, 0x68, 0x01, 0x08, 0x00, 0xAD, 0x5A, 0x94, 0xF3, 0xA0, 0xDD, 0x36, 0x9F, 0x1D, 0x5D, 0x16, 0xA8, 0x3A, 0x5F, 0xF7, ++ 0x49, 0xC5, 0xFE, 0xC8, 0x67, 0x2F, 0x92, 0xE5, 0xC8, 0x40, 0x0B, 0xD7, 0x67, 0x1F, 0x91, 0xFC, 0x06, 0x97, 0x21, 0x53, 0x14, 0xF0, 0x26, 0x51, 0x61, 0x42, 0xCA, 0xA6, 0x03, 0xED, 0x19, 0x11, ++ 0x5A, 0xAC, 0x9C, 0x32, 0x5D, 0x18, 0x34, 0x0E, 0x67, 0x62, 0xEF, 0xBA, 0xCF, 0xEF, 0x8E, 0x33, 0x13, 0x3C, 0x0F, 0x8F, 0x84, 0xBE, 0x6C, 0x1F, 0x95, 0xCB, 0x24, 0x45, 0x3D, 0xD8, 0x46, 0xEB, ++ 0xC6, 0x29, 0x5C, 0x7E, 0x7D, 0xF9, 0x44, 0xB0, 0x17, 0xF1, 0xEF, 0x8A, 0x47, 0x85, 0x22, 0x96, 0xF0, 0x91, 0x96, 0xD1, 0x51, 0xB7, 0x8D, 0x77, 0xC9, 0xC1, 0xDA, 0x7D, 0x99, 0x75, 0xE5, 0x89, ++ 0x83, 0xD3, 0x31, 0xE1, 0x78, 0x3F, 0xA6, 0x3B, 0xD9, 0x0C, 0x58, 0xC8, 0x2E, 0x4B, 0xFD, 0xDF, 0x8F, 0x0B, 0x4C, 0x37, 0xBB, 0xA4, 0x39, 0x07, 0x4F, 0x32, 0xE4, 0x1A, 0xBB, 0xCC, 0x90, 0xB5, ++ 0x6C, 0x6A, 0xD3, 0x6E, 0xC8, 0xAB, 0x1F, 0xB3, 0x34, 0xCE, 0x59, 0xDA, 0x0E, 0xEF, 0xBE, 0x46, 0x5B, 0xF9, 0x62, 0x67, 0x4D, 0x25, 0x81, 0x5F, 0x22, 0x10, 0x84, 0x86, 0x56, 0x93, 0xB0, 0x3A, ++ 0x44, 0xF6, 0x39, 0xF3, 0xA4, 0x7C, 0x36, 0xEE, 0xB2, 0x46, 0xD3, 0x90, 0x7D, 0x2F, 0x1D, 0x23, 0x78, 0xD7, 0xD7, 0x93, 0xD3, 0x95, 0xC3, 0x65, 0x52, 0x5A, 0x46, 0x5D, 0x9C, 0xE4, 0x15, 0x25, ++ 0x41, 0xE5, 0x94, 0xA7, 0x29, 0xAC, 0x62, 0xEE, 0x4E, 0x3A, 0xB5, 0x89, 0xE7, 0xB0, 0x01, 0xD5, 0xF2, 0x35, 0x4E, 0x3E, 0x30, 0xB1, 0x82, 0xBD, 0x69, 0xDC, 0x5A, 0x87, 0x7F, 0xF1, 0xCB, 0x87, ++ 0xFB, 0x9C, 0x25, 0x60, 0xBF, 0xE8, 0x2D, 0x3E, 0xDB, 0x06, 0x3B, 0xB7, 0x4D, 0x4B, 0x1F, 0x5C, 0xF3, 0x31, 0xB2, 0xD8, 0x4B, 0x45, 0x98, 0x8E, 0x04, 0xF7, 0x18, 0x32, 0xF0, 0x27, 0x2C, 0xD5, ++ 0xA8, 0x44, 0x91, 0x9E, 0xC3, 0x41, 0x3A, 0xE0, 0xE9, 0x9F, 0x0A, 0x8D, 0xAD, 0xC1, 0x87, 0xE9, 0xBD, 0x9A, 0x4D, 0xF9, 0xE1, 0x05, 0xD1, 0x81, 0x37, 0x60, 0xC4, 0xFA, 0x32, 0x95, 0xBC, 0x22, ++ 0x51, 0x7E, 0x89, 0x07, 0xD9, 0x85, 0xD2, 0x79, 0xEA, 0x25, 0x67, 0x4C, 0x78, 0x53, 0x18, 0x80, 0x5D, 0x1D, 0xBC, 0xD7, 0x97, 0x62, 0x46, 0x83, 0xC3, 0x63, 0xEA, 0xCA, 0xFE, 0x62, 0xC0, 0x78, ++ 0x83, 0x4A, 0x5B, 0x13, 0x78, 0x7F, 0xAF, 0x0A, 0xB3, 0xB4, 0xD2, 0x45, 0x71, 0x3B, 0x02, 0x22, 0x2A, 0x8A, 0x60, 0x56, 0x23, 0xA5, 0xE1, 0xE5, 0x0F, 0x5D, 0xBB, 0xAB, 0x95, 0x6A, 0xBC, 0xA5, ++ 0xF0, 0x64, 0x11, 0xD5, 0x97, 0xB0, 0xFB, 0x2D, 0x6D, 0xCC, 0x65, 0x0E, 0x77, 0x65, 0xF5, 0xE2, 0x3C, 0x4B, 0x8B, 0xC2, 0xB7, 0xAE, 0x0C, 0x88, 0x58, 0xB6, 0x50, 0xD1, 0x66, 0x89, 0x10, 0x38, ++ 0x54, 0x39, 0x2C, 0xB2, 0x41, 0x0E, 0xBD, 0x20, 0x8D, 0xF2, 0xE8, 0xD6, 0xF2, 0x21, 0x33, 0xCB, 0x63, 0xBC, 0x21, 0xE9, 0x69, 0xDC, 0x67, 0xA0, 0xE2, 0xEE, 0xDC, 0x42, 0x8E, 0x3B, 0x71, 0xC8, ++ 0x31, 0x89, 0x9B, 0x8D, 0x41, 0x22, 0xE5, 0x96, 0x69, 0xC1, 0x42, 0xBA, 0xB2, 0x0A, 0xFF, 0x7E, 0xD1, 0x89, 0x54, 0xB6, 0x52, 0x4B, 0x8C, 0x58, 0xD3, 0x91, 0xE3, 0x70, 0x61, 0xD1, 0xD5, 0x66, ++ 0xEA, 0x04, 0x42, 0x7E, 0x91, 0x44, 0x09, 0x5F, 0xDB, 0x1A, 0x28, 0xC1, 0xFD, 0x49, 0xCA, 0xD9, 0xFD, 0x55, 0xD7, 0x54, 0x7F, 0xF9, 0xD6, 0x0D, 0x54, 0xF7, 0x20, 0x5E, 0xBE, 0xD4, 0x96, 0xD1, ++ 0xE9, 0xDE, 0xDB, 0x8B, 0x28, 0xCE, 0xF8, 0x1D, 0x1A, 0xA5, 0x78, 0x05, 0x76, 0xD6, 0x7D, 0x70, 0x23, 0x21, 0xE5, 0x89, 0xD4, 0x4A, 0x60, 0xE2, 0x1F, 0xA0, 0x7B, 0xD9, 0x2D, 0xCF, 0xA1, 0x57, ++ 0xF1, 0x0D, 0xA6, 0x0F, 0xAD, 0x6E, 0x44, 0x28, 0x07, 0xD4, 0xE1, 0xCF, 0x5F, 0x7A, 0xBD, 0x0B, 0xB4, 0xBF, 0x1D, 0x7F, 0xF3, 0x6A, 0x0E, 0x63, 0x6E, 0x30, 0x0C, 0xD8, 0x57, 0x55, 0x33, 0x1B, ++ 0x22, 0x05, 0x97, 0x87, 0x23, 0xD9, 0xAC, 0xE6, 0xF2, 0xD5, 0x6F, 0xEC, 0x9D, 0x54, 0x59, 0x4C, 0xDB, 0x64, 0x3B, 0x8A, 0x9D, 0x8E, 0x6F, 0x76, 0x5C, 0xCE, 0xEF, 0x28, 0x19, 0xB3, 0xEF, 0x55, ++ 0xDE, 0x38, 0x9F, 0xDC, 0x00, 0x79, 0x27, 0xD2, 0x22, 0xF1, 0x1D, 0x22, 0x76, 0xDD, 0x18, 0xD4, 0xDF, 0x86, 0xE8, 0xE7, 0xE2, 0xA4, 0xD9, 0x94, 0x3D, 0xD8, 0x83, 0xD7, 0x0B, 0xC0, 0x45, 0xB6, ++ 0xAF, 0xAB, 0xED, 0xDF, 0x42, 0x18, 0xA2, 0x5A, 0xBF, 0x3F, 0xB0, 0xD4, 0x13, 0xD6, 0x18, 0x37, 0xC4, 0x5B, 0x86, 0xF9, 0xE6, 0xC6, 0x25, 0x53, 0x37, 0xC3, 0x8A, 0xF3, 0x5B, 0xE8, 0x2B, 0xE1, ++ 0xF0, 0x3A, 0xF0, 0x81, 0x1F, 0x2F, 0x1E, 0xEB, 0x25, 0x27, 0x6B, 0xF6, 0xAB, 0x27, 0xB9, 0x25, 0x64, 0x33, 0x4F, 0x06, 0x3A, 0x83, 0x18, 0xFC, 0x69, 0xC1, 0x34, 0x70, 0xDA, 0x6F, 0xD9, 0x47, ++ 0xB7, 0xEE, 0x2F, 0x67, 0xA7, 0x60, 0x5F, 0x6A, 0x57, 0x95, 0x3F, 0x96, 0xA3, 0x35, 0xB5, 0x50, 0x12, 0x63, 0x98, 0x67, 0x49, 0x02, 0x11, 0x88, 0x62, 0xF0, 0x86, 0x3F, 0x93, 0x13, 0xA3, 0x6A, ++ 0xD0, 0x57, 0x34, 0xE5, 0x1F, 0x54, 0x98, 0x62, 0x17, 0x0E, 0xC3, 0x69, 0x5A, 0x67, 0xE0, 0xC1, 0x6C, 0xDC, 0xDE, 0xA7, 0x7B, 0x39, 0x5D, 0x1F, 0xC4, 0xF8, 0xF1, 0x3A, 0x08, 0xBA, 0x8D, 0x4C, ++ 0xC4, 0x09, 0xCA, 0xBC, 0x9B, 0x15, 0xF1, 0x00, 0x7A, 0x4E, 0x3E, 0x4A, 0x71, 0x37, 0xB7, 0x00, 0xBE, 0xF5, 0xC3, 0x32, 0x97, 0x73, 0x5B, 0xE4, 0xC0, 0xAD, 0xB5, 0x4A, 0xA2, 0xDB, 0xE0, 0x96, ++ 0x2D, 0x16, 0x83, 0x55, 0x5C, 0xFC, 0xB8, 0x84, 0x17, 0xD7, 0x19, 0x4B, 0x7A, 0xDF, 0x09, 0xB3, 0xD2, 0xD5, 0xBA, 0xDE, 0xB1, 0xE8, 0x47, 0xAF, 0x62, 0x11, 0x65, 0x45, 0x4C, 0x4D, 0xA0, 0x0D, ++ 0x11, 0x85, 0x06, 0xE8, 0x25, 0xBD, 0x8F, 0x90, 0xDE, 0x0C, 0xC1, 0x1A, 0xFA, 0xD8, 0x5E, 0x08, 0xE9, 0x0E, 0xB5, 0xC4, 0x42, 0xD5, 0xB8, 0x5C, 0x9A, 0x9B, 0x86, 0xF2, 0x75, 0x8F, 0x4B, 0xB9, ++ 0xDA, 0x95, 0xA7, 0xB5, 0xB5, 0x85, 0xD6, 0x1A, 0x5C, 0x0E, 0x6E, 0x92, 0x0B, 0xBC, 0x43, 0x64, 0x97, 0xBB, 0x6C, 0x9A, 0xB8, 0x18, 0xAF, 0xCB, 0x5C, 0xE8, 0x14, 0x81, 0x09, 0xED, 0x99, 0x94, ++ 0x2E, 0x07, 0x90, 0xC5, 0xE2, 0x71, 0x4F, 0x4A, 0x88, 0x06, 0x74, 0xF4, 0xC6, 0x86, 0xF0, 0x7B, 0x48, 0xF5, 0xB8, 0x35, 0x9F, 0x9A, 0xF6, 0x3E, 0xB2, 0x05, 0xA3, 0x7B, 0xC0, 0xC6, 0x39, 0xDF, ++ 0x09, 0x3F, 0x88, 0xBB, 0x45, 0xCA, 0x1B, 0xA0, 0xDD, 0xD7, 0x1D, 0xB7, 0x4A, 0x22, 0xCE, 0x88, 0x4B, 0x39, 0x83, 0xD4, 0x54, 0xD5, 0x69, 0x56, 0x66, 0xED, 0x88, 0xDB, 0xB1, 0x66, 0xE9, 0x98, ++ 0x96, 0xEA, 0xBF, 0x67, 0x6B, 0xB8, 0x6D, 0x0E, 0xF3, 0xBD, 0xCF, 0x24, 0x1F, 0x50, 0xF2, 0x67, 0x2E, 0x3C, 0xD3, 0xBD, 0xAE, 0x60, 0xE6, 0xEC, 0xCD, 0xEF, 0x96, 0xDF, 0x63, 0x90, 0x88, 0xE4, ++ 0x45, 0x7A, 0xEE, 0xE7, 0x74, 0x6C, 0x24, 0xBD, 0x67, 0x6F, 0x3E, 0xFE, 0xA2, 0x7D, 0xDC, 0xDA, 0xC8, 0xA4, 0x1C, 0xA5, 0xBF, 0x9E, 0x03, 0xC8, 0xF5, 0xAF, 0xBB, 0xC8, 0x9B, 0x6D, 0x96, 0xBF, ++ 0x90, 0xD9, 0x4C, 0xFF, 0xD9, 0x1E, 0x3A, 0x8A, 0x07, 0xCC, 0xF0, 0x44, 0x93, 0xA5, 0xCB, 0x44, 0x1A, 0x9F, 0x59, 0x61, 0xEA, 0xC7, 0x1C, 0xEA, 0xB0, 0x4A, 0x78, 0xF7, 0x0B, 0x4F, 0x52, 0xF4, ++ 0x63, 0x09, 0x45, 0xAC, 0xC4, 0x5F, 0x4F, 0x83, 0xEE, 0x96, 0x7C, 0xF2, 0xB2, 0x37, 0x5D, 0x0F, 0xCE, 0x3A, 0x3F, 0x6E, 0x43, 0x96, 0x36, 0x14, 0xCC, 0xE0, 0x36, 0x03, 0xF0, 0x59, 0x7D, 0x30, ++ 0xE1, 0xD6, 0x75, 0xC0, 0x0F, 0x3C, 0xCA, 0xC4, 0x49, 0x21, 0xD2, 0x92, 0x28, 0xFF, 0x52, 0x96, 0xD4, 0x35, 0x25, 0x2F, 0x9C, 0xB3, 0x26, 0xA4, 0xD6, 0xFC, 0x34, 0xF0, 0x79, 0x89, 0xC1, 0x84, ++ 0x28, 0x86, 0x74, 0x59, 0xD1, 0x82, 0x95, 0xD2, 0xD6, 0x12, 0x10, 0x7F, 0x75, 0x35, 0xED, 0x27, 0xF6, 0x84, 0x6C, 0xA8, 0xD3, 0xB1, 0x73, 0x9D, 0x23, 0x45, 0xD2, 0x8B, 0xCC, 0xC4, 0xFD, 0x1A, ++ 0x63, 0x14, 0xFD, 0x47, 0x88, 0x9B, 0x53, 0xA1, 0xA7, 0x34, 0x63, 0x4B, 0xEC, 0x0C, 0x0A, 0x1C, 0x8A, 0x0A, 0x89, 0xAC, 0x66, 0xB0, 0xF4, 0xE5, 0x32, 0x8F, 0x76, 0x39, 0x2D, 0x01, 0x73, 0xE1, ++ 0x74, 0xEB, 0x8F, 0xA6, 0x0F, 0x86, 0xC9, 0x7F, 0x00, 0x20, 0xDC, 0xFA, 0x4E, 0x69, 0x94, 0xFC, 0x08, 0xFD, 0xCF, 0x40, 0x5A, 0x44, 0xB1, 0xC4, 0x8C, 0xC2, 0x1C, 0x51, 0xA0, 0x92, 0x81, 0x73, ++ 0x71, 0xF9, 0x6E, 0x64, 0xBD, 0x2B, 0x69, 0xBA, 0x79, 0xD7, 0xE4, 0xDD, 0x2C, 0x1F, 0x71, 0x8B, 0xF4, 0x56, 0x39, 0xCB, 0x45, 0x39, 0xE1, 0xF8, 0x9C, 0xF0, 0xE5, 0xEF, 0x25, 0x88, 0xE2, 0x5D, ++ 0xEB, 0x44, 0x10, 0x1D, 0x3C, 0x12, 0xE1, 0x4B, 0x99, 0x3C, 0x0A, 0xB3, 0x55, 0x61, 0x13, 0x82, 0x19, 0x59, 0xC6, 0xE9, 0xFC, 0x9A, 0xCC, 0x95, 0xBA, 0x17, 0x31, 0x4A, 0xC5, 0x6D, 0x2B, 0x26, ++ 0xA0, 0x39, 0x10, 0x69, 0x2A, 0xA4, 0xE1, 0x58, 0xF6, 0x81, 0xCB, 0xAA, 0x7C, 0x0F, 0xF8, 0x03, 0xD6, 0x66, 0x4B, 0x60, 0x9E, 0x5A, 0x4A, 0x25, 0x73, 0x58, 0x9F, 0xCD, 0x16, 0x8D, 0x17, 0x90, ++ 0x13, 0x32, 0x3E, 0x4B, 0x4F, 0x51, 0x53, 0x68, 0x6B, 0x74, 0x75, 0x78, 0x7C, 0xA2, 0xAF, 0xB6, 0xC4, 0xC5, 0xF4, 0xF8, 0x0D, 0x1D, 0x37, 0x46, 0x4D, 0x55, 0x57, 0x6A, 0x7B, 0x8C, 0xAC, 0xB2, ++ 0xC6, 0xC7, 0xC8, 0xD2, 0xEA, 0xF4, 0xF9, 0xFC, 0x18, 0x19, 0x20, 0x25, 0x27, 0x39, 0x5A, 0x5E, 0x90, 0xA4, 0xAF, 0xE8, 0xEF, 0xF2, 0xF8, 0xF9, 0x11, 0x29, 0x38, 0x68, 0x76, 0xAC, 0xAD, 0xBD, ++ 0xD6, 0xDA, 0xE1, 0xEB, 0xF3, 0x1B, 0x38, 0x5D, 0x67, 0x76, 0x81, 0x87, 0x8A, 0x91, 0x94, 0xAE, 0xC2, 0xD6, 0xD9, 0xDF, 0xFF, 0x01, 0x02, 0x1B, 0x2F, 0x34, 0x3B, 0x3F, 0x40, 0x58, 0x94, 0xAE, ++ 0xB1, 0xBD, 0xC5, 0xD5, 0xD7, 0x0A, 0x20, 0x23, 0x2D, 0x30, 0x3C, 0x65, 0x6C, 0x75, 0x76, 0x7E, 0x83, 0x90, 0xC2, 0xE7, 0xEB, 0x0C, 0x51, 0x64, 0x77, 0x88, 0xA4, 0xBB, 0xC1, 0xC7, 0xDB, 0xDC, ++ 0xE5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x28, 0x38, 0x45, 0x55, 0x65, 0x75, 0x81, 0x02, 0x10, 0x1C, 0x20, 0x18, 0x40, 0x08, 0x09, 0x06, 0x4C, 0x04, 0x04, ++ 0x02, 0x85, 0x00, 0x1D, 0xA0, 0x42, 0x9C, 0x48, 0x00, 0x81, 0x8C, 0x40, 0xC1, 0x42, 0x00, 0xC1, 0x0D, 0x09, 0x01, 0x94, 0xE8, 0x78, 0x5E, 0x1F, 0xF5, 0x65, 0x11, 0x03, ++ }, ++ }, ++ { ++ .name = "Dilithium Round 2, Level 5 (8-7) KAT 0", ++ .version = 0, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_87, ++ .rho_len = 32, ++ .rho = { ++ 0x7C, 0x99, 0x35, 0xA0, 0xB0, 0x76, 0x94, 0xAA, 0x0C, 0x6D, 0x10, 0xE4, 0xDB, 0x6B, 0x1A, 0xDD, 0x2F, 0xD8, 0x1A, 0x25, 0xCC, 0xB1, 0x48, 0x03, 0x2D, 0xCD, 0x73, 0x99, 0x36, 0x73, 0x7F, 0x2D, ++ }, ++ .seed_len = 32, ++ .seed = { ++ 0x3E, 0x78, 0x4C, 0xCB, 0x7E, 0xBC, 0xDC, 0xFD, 0x45, 0x54, 0x2B, 0x7F, 0x6A, 0xF7, 0x78, 0x74, 0x2E, 0x0F, 0x44, 0x79, 0x17, 0x50, 0x84, 0xAA, 0x48, 0x8B, 0x3B, 0x74, 0x34, 0x06, 0x78, 0xAA, ++ }, ++ .tr_len = 48, ++ .tr = { ++ 0x89, 0xDB, 0xBF, 0xC3, 0x69, 0x33, 0x5D, 0x8F, 0x70, 0xE7, 0xBC, 0xB4, 0xD1, 0x66, 0xD4, 0xBD, 0xD0, 0xD8, 0x36, 0xE4, 0x5D, 0xE9, 0x37, 0x92, 0xED, 0xC4, 0x26, 0x10, 0x6F, 0xBF, 0x5A, 0xF2, ++ 0x7C, 0x68, 0xA9, 0x50, 0xB4, 0xA1, 0xA6, 0x42, 0x28, 0x01, 0xC6, 0xF2, 0xAC, 0xC3, 0xA9, 0xFA, ++ }, ++ .s1_len = 672, ++ .s1 = { ++ 0x91, 0xB4, 0x2D, 0xA1, 0x38, 0x24, 0x08, 0x19, 0x24, 0x1A, 0x30, 0x4D, 0x40, 0xA8, 0x6C, 0xD8, 0x04, 0x6A, 0x03, 0x28, 0x04, 0x41, 0x38, 0x22, 0x22, 0x39, 0x0A, 0xE2, 0x80, 0x0D, 0x12, 0x49, ++ 0x91, 0x24, 0xB4, 0x50, 0x93, 0x46, 0x89, 0xD1, 0x30, 0x4C, 0x04, 0x20, 0x24, 0x20, 0x20, 0x31, 0x59, 0x92, 0x41, 0xC3, 0x26, 0x61, 0x14, 0x47, 0x32, 0xDB, 0x12, 0x69, 0x63, 0x46, 0x01, 0x10, ++ 0x93, 0x91, 0x10, 0x39, 0x81, 0x5B, 0x26, 0x71, 0x40, 0xB0, 0x01, 0x03, 0x41, 0x48, 0x04, 0x19, 0x09, 0x13, 0xB4, 0x91, 0x0C, 0x46, 0x08, 0xD4, 0x08, 0x09, 0x0C, 0x99, 0x04, 0x00, 0x35, 0x61, ++ 0x13, 0x14, 0x4C, 0x19, 0x41, 0x28, 0x1C, 0x16, 0x80, 0x88, 0xA0, 0x29, 0x1A, 0x30, 0x02, 0x10, 0x80, 0x4C, 0x13, 0x43, 0x25, 0x04, 0x08, 0x81, 0x20, 0x43, 0x70, 0x14, 0x11, 0x6A, 0x99, 0x00, ++ 0x40, 0x48, 0x82, 0x31, 0x12, 0x42, 0x20, 0x48, 0x06, 0x0D, 0xE2, 0xA2, 0x0C, 0x82, 0xB0, 0x28, 0xE2, 0x36, 0x10, 0x49, 0x16, 0x84, 0xD8, 0x04, 0x4C, 0x51, 0xB8, 0x68, 0xC2, 0x84, 0x90, 0x9B, ++ 0x10, 0x31, 0x21, 0x49, 0x32, 0x94, 0x20, 0x0D, 0x04, 0x41, 0x24, 0xCB, 0xA4, 0x6D, 0x1A, 0x82, 0x61, 0x08, 0x40, 0x8E, 0xA4, 0x00, 0x44, 0x93, 0x92, 0x91, 0x8C, 0x30, 0x62, 0x60, 0xB2, 0x90, ++ 0x58, 0x40, 0x62, 0x11, 0x97, 0x31, 0x21, 0x11, 0x81, 0x0C, 0x28, 0x88, 0x09, 0x07, 0x42, 0x88, 0x40, 0x6C, 0xC0, 0x96, 0x28, 0x81, 0x28, 0x8A, 0xC0, 0x12, 0x0C, 0x93, 0x48, 0x4C, 0x89, 0x82, ++ 0x25, 0xD8, 0x00, 0x22, 0x24, 0x45, 0x41, 0x1B, 0x95, 0x2C, 0xA0, 0x92, 0x61, 0x84, 0xA2, 0x70, 0x59, 0x86, 0x10, 0x0B, 0x87, 0x08, 0x10, 0x98, 0x61, 0xD3, 0x40, 0x0D, 0x40, 0xB0, 0x8D, 0x09, ++ 0x05, 0x71, 0x60, 0x84, 0x70, 0x18, 0x80, 0x61, 0x1A, 0x16, 0x2E, 0x63, 0x32, 0x06, 0x80, 0x80, 0x88, 0x50, 0xC6, 0x8C, 0x00, 0x10, 0x24, 0xC1, 0x00, 0x26, 0x94, 0x90, 0x48, 0x44, 0xB6, 0x29, ++ 0x1A, 0x35, 0x48, 0xD3, 0xB0, 0x91, 0x21, 0xA4, 0x08, 0x11, 0x34, 0x32, 0x03, 0x01, 0x05, 0x21, 0x32, 0x46, 0x1B, 0x31, 0x31, 0x1B, 0x86, 0x0C, 0x1A, 0x28, 0x0D, 0xD1, 0x08, 0x28, 0x8B, 0xA8, ++ 0x0D, 0x98, 0x90, 0x05, 0xD0, 0xA8, 0x29, 0x83, 0x48, 0x71, 0x03, 0x33, 0x80, 0x24, 0x90, 0x68, 0xD1, 0xA0, 0x2C, 0x23, 0x10, 0x4D, 0x12, 0x95, 0x11, 0xE4, 0x14, 0x21, 0x14, 0x39, 0x4E, 0x12, ++ 0x01, 0x70, 0x0C, 0x25, 0x71, 0x24, 0x83, 0x89, 0x54, 0x30, 0x06, 0x11, 0x90, 0x45, 0x12, 0x03, 0x04, 0x59, 0xB0, 0x4C, 0x20, 0x36, 0x8A, 0x19, 0x30, 0x72, 0x98, 0x94, 0x4C, 0x14, 0x81, 0x40, ++ 0xA2, 0xC6, 0x84, 0xCB, 0xA2, 0x48, 0x0C, 0xC1, 0x2D, 0x8A, 0xC4, 0x05, 0x42, 0x94, 0x45, 0x5B, 0xB4, 0x08, 0xDB, 0x18, 0x24, 0x88, 0x20, 0x90, 0x1B, 0xC3, 0x50, 0xA1, 0x96, 0x4D, 0x0B, 0x31, ++ 0x6D, 0x93, 0x26, 0x46, 0x00, 0x35, 0x52, 0x01, 0x13, 0x42, 0xDA, 0x46, 0x6A, 0x1A, 0x34, 0x01, 0x40, 0x92, 0x41, 0xC0, 0x08, 0x66, 0xE3, 0x94, 0x01, 0x63, 0x28, 0x69, 0x0C, 0x25, 0x31, 0x0B, ++ 0x21, 0x24, 0x43, 0xA2, 0x30, 0xD3, 0x22, 0x44, 0xCB, 0x36, 0x71, 0x02, 0x02, 0x42, 0x1A, 0xC1, 0x2C, 0x20, 0x23, 0x80, 0x8B, 0xA8, 0x85, 0x88, 0x08, 0x4A, 0x94, 0x10, 0x48, 0x18, 0x81, 0x29, ++ 0xE2, 0xB4, 0x4C, 0x89, 0x88, 0x51, 0xC9, 0x06, 0x09, 0xD3, 0x96, 0x71, 0x54, 0xB0, 0x91, 0x53, 0x86, 0x04, 0x53, 0xC4, 0x44, 0x81, 0x98, 0x11, 0x88, 0x20, 0x04, 0xA0, 0x16, 0x0A, 0x49, 0xA0, ++ 0x10, 0x1A, 0x17, 0x44, 0x21, 0x26, 0x66, 0xE0, 0xC0, 0x09, 0x59, 0x90, 0x8C, 0x93, 0x10, 0x49, 0x00, 0x85, 0x65, 0x4C, 0xC6, 0x0D, 0x00, 0x18, 0x30, 0x1B, 0x12, 0x6E, 0x10, 0x02, 0x45, 0xA2, ++ 0x12, 0x49, 0x22, 0xC8, 0x20, 0x03, 0xC5, 0x48, 0x12, 0x04, 0x52, 0xA1, 0x88, 0x25, 0x40, 0xB2, 0x4D, 0x4B, 0x38, 0x28, 0x23, 0xB2, 0x64, 0xC2, 0x38, 0x90, 0x09, 0x46, 0x92, 0x0C, 0x90, 0x0D, ++ 0x04, 0x06, 0x0C, 0x4C, 0x16, 0x2D, 0x08, 0x10, 0x49, 0x20, 0x47, 0x65, 0x50, 0x28, 0x29, 0x1A, 0x88, 0x80, 0x40, 0x30, 0x6D, 0x88, 0x36, 0x70, 0x63, 0x98, 0x71, 0x99, 0x96, 0x2C, 0x1B, 0x91, ++ 0x61, 0x61, 0x40, 0x06, 0x13, 0x35, 0x04, 0x09, 0x08, 0x8E, 0x54, 0xB8, 0x44, 0x81, 0x30, 0x08, 0xC8, 0x10, 0x2C, 0x5A, 0xB0, 0x04, 0x42, 0x46, 0x61, 0x20, 0x03, 0x88, 0x91, 0xA0, 0x91, 0x81, ++ 0x10, 0x4D, 0x12, 0xB7, 0x81, 0x20, 0x42, 0x02, 0x54, 0x94, 0x24, 0x59, 0xC4, 0x25, 0x8C, 0x44, 0x70, 0xE3, 0x32, 0x8E, 0x9A, 0x02, 0x60, 0xE4, 0xA6, 0x21, 0x4A, 0xB2, 0x85, 0x93, 0x36, 0x20, ++ }, ++ .s2_len = 768, ++ .s2 = { ++ 0x01, 0x05, 0x32, 0x11, 0x44, 0x66, 0xE2, 0x06, 0x40, 0x14, 0x49, 0x6C, 0x0B, 0x86, 0x80, 0x02, 0x47, 0x26, 0xD2, 0xB2, 0x25, 0x58, 0x48, 0x0E, 0x58, 0x44, 0x11, 0xD1, 0x44, 0x50, 0x51, 0xB8, ++ 0x81, 0xC4, 0xA0, 0x48, 0x10, 0xC9, 0x50, 0x08, 0x98, 0x88, 0xD8, 0x28, 0x2A, 0x52, 0xC0, 0x4D, 0xD1, 0x38, 0x12, 0xD8, 0x46, 0x89, 0x00, 0x94, 0x00, 0xDA, 0xC4, 0x45, 0x9B, 0x44, 0x6E, 0x0B, ++ 0x44, 0x0C, 0xC0, 0xC0, 0x01, 0x20, 0xC1, 0x0C, 0xC0, 0x04, 0x4C, 0x08, 0x24, 0x21, 0x23, 0xC7, 0x65, 0x03, 0xA0, 0x80, 0x91, 0xC2, 0x50, 0x21, 0x10, 0x31, 0x99, 0x36, 0x00, 0x64, 0x28, 0x70, ++ 0x81, 0x38, 0x05, 0x4A, 0x18, 0x80, 0x1C, 0x89, 0x24, 0x08, 0x95, 0x49, 0x24, 0x39, 0x40, 0x24, 0x15, 0x22, 0xD9, 0x32, 0x90, 0x23, 0x24, 0x71, 0xC4, 0x46, 0x50, 0xCB, 0x86, 0x65, 0xE4, 0x94, ++ 0x8C, 0x42, 0x04, 0x82, 0x8A, 0x86, 0x71, 0x13, 0xA3, 0x00, 0xDB, 0x44, 0x04, 0x23, 0x82, 0x10, 0x23, 0x46, 0x26, 0x0B, 0x08, 0x08, 0x60, 0x16, 0x11, 0xA4, 0xB6, 0x24, 0xE1, 0x32, 0x69, 0x04, ++ 0x17, 0x86, 0xE3, 0x84, 0x2C, 0x9C, 0x32, 0x41, 0x92, 0xC8, 0x61, 0x5A, 0x32, 0x26, 0x24, 0xC3, 0x29, 0x5A, 0xC8, 0x05, 0x0A, 0x06, 0x8E, 0xE1, 0x16, 0x20, 0x99, 0x94, 0x61, 0x19, 0xA2, 0x0C, ++ 0x1B, 0x05, 0x2E, 0x1B, 0x44, 0x64, 0x9A, 0x00, 0x84, 0x8C, 0x18, 0x52, 0x84, 0xB4, 0x60, 0x82, 0x20, 0x08, 0x42, 0x48, 0x09, 0x84, 0x08, 0x46, 0x11, 0x00, 0x46, 0x13, 0x43, 0x01, 0xE1, 0x06, ++ 0x91, 0x1B, 0x44, 0x8E, 0x01, 0x94, 0x64, 0x4A, 0x12, 0x09, 0x98, 0x38, 0x0E, 0xE4, 0x06, 0x25, 0x24, 0x13, 0x68, 0x13, 0x21, 0x06, 0x04, 0xB9, 0x40, 0x54, 0x24, 0x25, 0x14, 0x88, 0x69, 0x82, ++ 0x38, 0x01, 0xA4, 0x28, 0x72, 0x50, 0x86, 0x61, 0x23, 0xB1, 0x88, 0xA2, 0x90, 0x08, 0x1C, 0x95, 0x30, 0x1C, 0x40, 0x82, 0x49, 0xC8, 0x64, 0xCA, 0x04, 0x40, 0x44, 0x98, 0x21, 0x0B, 0x24, 0x61, ++ 0x1C, 0xA0, 0x4C, 0x09, 0xA4, 0x21, 0xC9, 0x08, 0x8A, 0x22, 0x13, 0x41, 0x80, 0xC8, 0x89, 0x23, 0xB1, 0x64, 0x1C, 0x11, 0x49, 0x40, 0xA2, 0x29, 0x61, 0xC8, 0x8C, 0x8B, 0x96, 0x91, 0x83, 0x02, ++ 0x42, 0xE1, 0xB6, 0x85, 0x51, 0x86, 0x4C, 0x04, 0x43, 0x91, 0x4B, 0xB8, 0x69, 0x50, 0x24, 0x81, 0xC8, 0x04, 0x2E, 0x1B, 0xB9, 0x31, 0x93, 0x24, 0x00, 0x23, 0x86, 0x81, 0xC2, 0xB8, 0x61, 0x09, ++ 0x00, 0x62, 0x14, 0x99, 0x41, 0x19, 0x37, 0x6E, 0x1C, 0x16, 0x30, 0x0A, 0x27, 0x45, 0x51, 0x10, 0x0D, 0x1C, 0x33, 0x4A, 0x10, 0x40, 0x80, 0xA0, 0x34, 0x62, 0xD8, 0x44, 0x4A, 0x01, 0x06, 0x45, ++ 0x23, 0x83, 0x8C, 0x24, 0xA4, 0x85, 0x01, 0x04, 0x0C, 0x09, 0x03, 0x32, 0xDB, 0x90, 0x09, 0x4A, 0x14, 0x42, 0x01, 0x08, 0x21, 0x22, 0x08, 0x66, 0x8B, 0x28, 0x70, 0x24, 0x38, 0x31, 0x0C, 0x46, ++ 0x69, 0x43, 0x44, 0x69, 0x9A, 0x34, 0x4D, 0x82, 0xC8, 0x40, 0x42, 0x42, 0x01, 0x23, 0xC7, 0x29, 0x91, 0x32, 0x72, 0x1B, 0x36, 0x4C, 0x1B, 0x33, 0x05, 0x13, 0x35, 0x61, 0x14, 0x02, 0x46, 0x08, ++ 0x03, 0x65, 0x21, 0x87, 0x20, 0x09, 0x03, 0x91, 0xC1, 0xC4, 0x25, 0xE2, 0xA6, 0x4C, 0x81, 0x14, 0x48, 0x20, 0x25, 0x4D, 0x03, 0x19, 0x69, 0xA3, 0x00, 0x69, 0x54, 0xA8, 0x30, 0x9C, 0x86, 0x05, ++ 0x9C, 0x36, 0x82, 0x03, 0x37, 0x0C, 0x0A, 0x15, 0x50, 0x9C, 0xC0, 0x91, 0x04, 0xB6, 0x91, 0x0C, 0x11, 0x80, 0x09, 0xB5, 0x70, 0x63, 0x20, 0x92, 0x44, 0x22, 0x71, 0xC1, 0x48, 0x44, 0x98, 0xC4, ++ 0x6D, 0x64, 0xA6, 0x89, 0x0A, 0xA9, 0x40, 0x04, 0xB8, 0x50, 0x04, 0x34, 0x8C, 0xE2, 0xC4, 0x80, 0x02, 0x00, 0x12, 0xA3, 0x36, 0x46, 0xD2, 0x00, 0x01, 0x1C, 0x45, 0x46, 0x22, 0x33, 0x6D, 0x81, ++ 0x92, 0x01, 0x08, 0x12, 0x86, 0x9C, 0x04, 0x51, 0xA3, 0x98, 0x30, 0x48, 0x10, 0x91, 0x19, 0xA0, 0x44, 0xC3, 0x04, 0x8D, 0x42, 0x90, 0x40, 0x43, 0x80, 0x44, 0xA4, 0x46, 0x71, 0x0B, 0xA2, 0x60, ++ 0x52, 0x18, 0x6D, 0x0B, 0xB6, 0x85, 0x1B, 0xB2, 0x0C, 0x94, 0x12, 0x09, 0x04, 0xB6, 0x41, 0x18, 0xA8, 0x84, 0x10, 0x00, 0x22, 0x53, 0x42, 0x69, 0xC3, 0xA8, 0x81, 0x00, 0x25, 0x32, 0x81, 0x16, ++ 0x28, 0x81, 0x44, 0x2D, 0xD4, 0xB4, 0x4D, 0x08, 0xC8, 0x45, 0x5A, 0x04, 0x01, 0xC1, 0x90, 0x50, 0x22, 0x14, 0x82, 0x63, 0xC6, 0x6D, 0x04, 0x22, 0x72, 0x1C, 0xB9, 0x44, 0x9B, 0x46, 0x0D, 0xC2, ++ 0x14, 0x22, 0x91, 0xB0, 0x44, 0x21, 0x89, 0x68, 0xC4, 0x96, 0x08, 0x0A, 0xB9, 0x8C, 0x22, 0xB9, 0x40, 0xE2, 0x26, 0x50, 0x8C, 0x88, 0x25, 0xCB, 0xB8, 0x04, 0x54, 0x16, 0x25, 0x63, 0x34, 0x0C, ++ 0x24, 0xB0, 0x29, 0xA3, 0x44, 0x20, 0x43, 0x46, 0x40, 0x9C, 0x02, 0x48, 0x5A, 0xC8, 0x2C, 0x00, 0x05, 0x31, 0x09, 0x18, 0x00, 0xDB, 0x46, 0x51, 0xD2, 0xB6, 0x2C, 0x44, 0x40, 0x88, 0x9A, 0x96, ++ 0x24, 0x12, 0xA5, 0x90, 0x04, 0x39, 0x86, 0x10, 0x80, 0x2D, 0x10, 0x99, 0x21, 0x60, 0x06, 0x66, 0x21, 0x89, 0x4C, 0x91, 0x04, 0x60, 0x23, 0xB9, 0x01, 0x12, 0x11, 0x48, 0x12, 0x29, 0x51, 0xA1, ++ 0x06, 0x45, 0x44, 0x22, 0x12, 0x03, 0x27, 0x8E, 0x23, 0x94, 0x84, 0x0C, 0x29, 0x06, 0x94, 0x86, 0x50, 0xE0, 0x48, 0x10, 0x24, 0x26, 0x40, 0x61, 0x04, 0x66, 0x9C, 0xB2, 0x84, 0x54, 0xC2, 0x2C, ++ }, ++ .t0_len = 3584, ++ .t0 = { ++ 0xD6, 0xD4, 0x27, 0x24, 0xCA, 0xFD, 0xF2, 0x81, 0xB9, 0xCA, 0xDC, 0x58, 0x04, 0x84, 0x83, 0x95, 0x49, 0x25, 0x4C, 0x9B, 0xE0, 0xA1, 0xF9, 0xAA, 0x9D, 0x76, 0xE6, 0x54, 0x63, 0xCD, 0x83, 0x14, ++ 0x20, 0x65, 0xE7, 0xF7, 0x47, 0xBD, 0x27, 0x4C, 0xF3, 0x7E, 0x85, 0x70, 0xE0, 0xE6, 0x3A, 0xDB, 0xF8, 0x5F, 0x31, 0x79, 0x14, 0x75, 0xFF, 0x1A, 0x2F, 0x50, 0x5B, 0x53, 0x24, 0x77, 0x2C, 0xB0, ++ 0xEB, 0x21, 0x9E, 0x2C, 0x28, 0xC4, 0xEF, 0xBC, 0x31, 0xE7, 0x13, 0xDF, 0x18, 0x77, 0x25, 0xB7, 0xBD, 0xE2, 0x90, 0xE6, 0x08, 0x98, 0x5B, 0x7D, 0x8A, 0x71, 0x14, 0x42, 0xD4, 0x03, 0xD2, 0x56, ++ 0xF5, 0x35, 0xA4, 0x27, 0x1F, 0x6C, 0xC6, 0x5F, 0x91, 0xF1, 0xA7, 0x3F, 0x3B, 0x33, 0x94, 0x83, 0x3D, 0xF0, 0x12, 0x79, 0xDC, 0x71, 0xFB, 0x60, 0xBD, 0x14, 0x13, 0xBF, 0x23, 0xBA, 0x3A, 0x20, ++ 0xC7, 0x15, 0xC1, 0x30, 0xDA, 0x19, 0x2D, 0x05, 0x1F, 0xF6, 0xEA, 0x7E, 0xDD, 0xBB, 0x81, 0xDB, 0xC4, 0xBE, 0xBA, 0xF6, 0x71, 0x41, 0x23, 0x6E, 0x5D, 0x9E, 0x09, 0x93, 0xFB, 0x7D, 0xC7, 0x06, ++ 0x44, 0x83, 0xDA, 0x06, 0x99, 0xE8, 0x40, 0x21, 0x76, 0xC6, 0xB2, 0x0F, 0x24, 0x0D, 0x35, 0x87, 0xBC, 0x1B, 0x07, 0x3C, 0x9A, 0xA0, 0x09, 0xCB, 0xC1, 0xB0, 0x5F, 0x49, 0xCC, 0xBB, 0x25, 0x13, ++ 0x12, 0x96, 0x92, 0xDF, 0x1C, 0xEC, 0xDA, 0x29, 0x54, 0xCC, 0xEC, 0xC1, 0x7B, 0xBB, 0x1D, 0x11, 0x96, 0x4F, 0xAE, 0xB0, 0xF9, 0xE0, 0x29, 0x21, 0x29, 0x59, 0xB6, 0x8E, 0x4B, 0xE0, 0x66, 0x64, ++ 0xF9, 0x58, 0x74, 0x32, 0xC0, 0x2D, 0xE6, 0x15, 0x88, 0x51, 0x55, 0x57, 0x56, 0x5A, 0x26, 0xA6, 0xEC, 0xD6, 0xB4, 0xDE, 0x47, 0xF0, 0xB6, 0x47, 0x63, 0x77, 0x81, 0xEC, 0x19, 0x49, 0x32, 0xD2, ++ 0x82, 0xFF, 0x1F, 0x83, 0x5E, 0xB8, 0x09, 0x66, 0xAB, 0xA2, 0x16, 0xB4, 0xE7, 0xF8, 0x8E, 0xAB, 0x97, 0x05, 0x21, 0x26, 0x4D, 0xB5, 0xD6, 0xF2, 0x83, 0xA4, 0xF6, 0x79, 0x1E, 0x32, 0x9F, 0xB8, ++ 0xCB, 0x54, 0x25, 0xB9, 0x13, 0x9E, 0x96, 0xAB, 0xB3, 0x94, 0x4E, 0x35, 0xBB, 0x88, 0x64, 0x2A, 0xC0, 0xE7, 0xDC, 0xDA, 0xB9, 0xB5, 0x59, 0xD0, 0x9E, 0x29, 0x55, 0x72, 0xB2, 0x52, 0x92, 0xC0, ++ 0x3C, 0xD5, 0xAB, 0x5E, 0x7B, 0xBE, 0x77, 0x61, 0xD8, 0x58, 0x3F, 0xAD, 0x91, 0x66, 0x91, 0x3F, 0xDE, 0x1B, 0x65, 0x8F, 0x87, 0x26, 0xC3, 0xF7, 0xE6, 0xD2, 0x65, 0x63, 0x17, 0xDA, 0xAF, 0xB9, ++ 0x2E, 0x78, 0x7D, 0x24, 0xC5, 0xD8, 0x94, 0x7F, 0xF5, 0x95, 0xA5, 0x85, 0x3D, 0x61, 0x11, 0x73, 0xDF, 0x20, 0xF0, 0xAE, 0x01, 0x50, 0x75, 0x8C, 0x6B, 0x13, 0x1D, 0xFD, 0xEF, 0x36, 0xA0, 0x1D, ++ 0x7C, 0x87, 0x4D, 0x0B, 0x8C, 0xD0, 0xC2, 0x53, 0x83, 0x56, 0x94, 0x06, 0xCB, 0xE4, 0x2A, 0x72, 0xD7, 0x09, 0x7E, 0x84, 0xD9, 0x82, 0x58, 0x39, 0xEB, 0xD1, 0x4F, 0x17, 0x5E, 0xD5, 0x1E, 0x6A, ++ 0xC1, 0xA3, 0xF7, 0xF7, 0xBE, 0xFF, 0x60, 0xF5, 0xC0, 0x72, 0x73, 0x42, 0xD7, 0xDD, 0x34, 0x76, 0xDC, 0x9A, 0xE0, 0xE2, 0x7E, 0xDB, 0xB8, 0x86, 0xBF, 0xA0, 0x0D, 0x36, 0xFE, 0x80, 0xDA, 0x81, ++ 0x6A, 0x45, 0xE0, 0xC8, 0x00, 0x0B, 0x6E, 0x23, 0xE9, 0xB5, 0xCA, 0xD0, 0x13, 0xB6, 0xDE, 0xBF, 0x74, 0x9E, 0xB7, 0x27, 0xB8, 0xD8, 0x3B, 0xFE, 0x26, 0xF6, 0xC5, 0x99, 0xD5, 0xBD, 0x45, 0xB5, ++ 0x82, 0xB8, 0x4F, 0x4F, 0xC8, 0x34, 0x10, 0xEE, 0x2A, 0x67, 0x5C, 0x66, 0x14, 0x5F, 0x52, 0xCF, 0x36, 0x83, 0x29, 0x0C, 0xC7, 0x2A, 0x29, 0x28, 0x5D, 0x70, 0x66, 0x7A, 0x3A, 0x31, 0x58, 0x93, ++ 0x54, 0xD9, 0x19, 0x31, 0x62, 0x5F, 0xFA, 0xCF, 0xB7, 0xE0, 0x2C, 0x03, 0xFE, 0x48, 0x09, 0x2A, 0x12, 0x0E, 0x5F, 0x43, 0x12, 0x76, 0xE8, 0x37, 0x4D, 0xBE, 0x15, 0x40, 0x96, 0xC8, 0x6C, 0x58, ++ 0x79, 0x10, 0xF5, 0x05, 0x1A, 0x86, 0x14, 0x17, 0xC0, 0x6A, 0x73, 0x48, 0x0C, 0xE3, 0x19, 0x5C, 0xC9, 0x99, 0xF6, 0xB8, 0xB3, 0x01, 0x9B, 0x22, 0x37, 0x96, 0xC5, 0xE1, 0x1F, 0x73, 0x42, 0xC9, ++ 0x74, 0x6A, 0xED, 0xBF, 0xA9, 0x44, 0xCD, 0x79, 0xB8, 0x5C, 0x10, 0x00, 0x07, 0xBB, 0x58, 0x69, 0x84, 0x3A, 0x23, 0xAD, 0x06, 0xD8, 0x1F, 0x5C, 0xB2, 0x9D, 0xD1, 0x7B, 0xCE, 0xE7, 0x55, 0x72, ++ 0xB9, 0xE0, 0xCF, 0xDB, 0xD5, 0xA8, 0x3A, 0x30, 0x57, 0x44, 0x2D, 0xF0, 0x00, 0xDA, 0x7A, 0x3A, 0xA6, 0xFC, 0x5F, 0xB2, 0x89, 0xA1, 0x29, 0x99, 0x24, 0xD9, 0x23, 0x1F, 0xE1, 0xD0, 0xCF, 0x3C, ++ 0x17, 0xF1, 0x80, 0x3F, 0x61, 0x43, 0xC0, 0x97, 0xF9, 0x54, 0x2C, 0x9A, 0xBB, 0x8F, 0x98, 0x77, 0xE4, 0xAE, 0xC5, 0x4A, 0xB9, 0x39, 0x93, 0xDC, 0x49, 0x87, 0xDF, 0x67, 0x80, 0x8B, 0xF7, 0xBE, ++ 0xDE, 0xA8, 0x6B, 0x5C, 0x83, 0xD2, 0x48, 0xE9, 0x5E, 0xA3, 0x02, 0x45, 0x3F, 0x5F, 0x6B, 0x7F, 0xF5, 0xB5, 0xF5, 0x8B, 0x65, 0xD9, 0x32, 0xD2, 0xBF, 0x73, 0x7C, 0x51, 0x89, 0x3D, 0x89, 0xF0, ++ 0x7D, 0xA5, 0xBF, 0xEA, 0x79, 0xD7, 0xE7, 0xFB, 0x2A, 0xAB, 0x82, 0x33, 0xA2, 0x7E, 0xB4, 0x4C, 0x68, 0x58, 0x05, 0x1D, 0x92, 0xB9, 0x98, 0xBC, 0x47, 0x51, 0xA4, 0x90, 0x2A, 0xA2, 0x22, 0xDE, ++ 0x2D, 0x5C, 0xDC, 0xEC, 0x26, 0xB3, 0x6D, 0xBA, 0x47, 0xCC, 0xEB, 0x41, 0xFB, 0x19, 0x2D, 0xDF, 0xFD, 0x55, 0x12, 0xD8, 0x2B, 0x1B, 0xD3, 0x4D, 0x1E, 0xAA, 0x42, 0xF8, 0xCC, 0x50, 0x3F, 0x23, ++ 0x85, 0x92, 0x42, 0x07, 0x9C, 0xBC, 0x1A, 0x55, 0xF0, 0x95, 0xAB, 0xB3, 0xC1, 0x87, 0x9F, 0xD1, 0xB4, 0x85, 0x04, 0xD8, 0x05, 0x4C, 0x15, 0xEB, 0x3E, 0xBF, 0x54, 0xA3, 0x2C, 0x5B, 0x62, 0xC0, ++ 0x55, 0x55, 0xE4, 0xAC, 0x60, 0x36, 0x91, 0x9B, 0xB9, 0xA1, 0xBB, 0x53, 0x9E, 0x78, 0x86, 0x7A, 0x74, 0xF5, 0x3C, 0x23, 0xB1, 0xA1, 0x35, 0x98, 0x7D, 0x8B, 0xDD, 0x63, 0xE0, 0x92, 0xAB, 0x2B, ++ 0xF1, 0xD8, 0xF6, 0x60, 0x38, 0xE1, 0x49, 0xAE, 0x41, 0x0B, 0x09, 0xAB, 0x25, 0xB4, 0xFE, 0x65, 0x53, 0xB3, 0x0E, 0x7B, 0xA7, 0xBF, 0x01, 0x36, 0x36, 0x8E, 0x3B, 0x8B, 0x73, 0x23, 0xA1, 0x24, ++ 0x89, 0x02, 0x94, 0x7B, 0x2A, 0x39, 0x85, 0xB5, 0xC5, 0xCB, 0x80, 0x27, 0xAE, 0xF8, 0xA9, 0xE3, 0x42, 0xA3, 0xB7, 0x54, 0x3C, 0x31, 0x54, 0x72, 0x49, 0xFC, 0x77, 0x7C, 0x59, 0x2A, 0x31, 0xB8, ++ 0x5B, 0x4B, 0x07, 0xE0, 0xAD, 0x87, 0x61, 0x2C, 0x3D, 0xF4, 0x9B, 0x9E, 0xB6, 0x6A, 0x53, 0xF4, 0x11, 0xC6, 0xD6, 0xDE, 0x9F, 0x26, 0x86, 0x95, 0x07, 0x74, 0x80, 0x6A, 0xD0, 0xCE, 0xBF, 0x25, ++ 0x4C, 0x18, 0x2F, 0x3A, 0x5D, 0xF9, 0xE4, 0x29, 0xF0, 0x79, 0x2E, 0x96, 0x35, 0x95, 0xB8, 0x42, 0x6B, 0xB0, 0xCB, 0x53, 0x62, 0x75, 0x36, 0x26, 0x5C, 0x4F, 0x63, 0x46, 0xB4, 0xB0, 0x72, 0xEA, ++ 0xB4, 0xD1, 0xE6, 0x87, 0xA4, 0xDE, 0x7B, 0x82, 0x89, 0x90, 0xEB, 0xF3, 0x38, 0x1F, 0x0B, 0x70, 0xE9, 0x26, 0xD6, 0x7B, 0x76, 0x89, 0x73, 0xF1, 0x02, 0x40, 0x80, 0xBD, 0x40, 0xC6, 0x7B, 0x81, ++ 0x04, 0x09, 0x34, 0xD1, 0xC3, 0xC3, 0x77, 0x4D, 0xDE, 0x93, 0x28, 0xBE, 0x69, 0xBB, 0xD5, 0xDF, 0xE3, 0xF2, 0x80, 0xDB, 0x77, 0xFF, 0xC1, 0xA7, 0x8D, 0x11, 0x13, 0x34, 0xB4, 0x21, 0x97, 0x00, ++ 0x2B, 0xD8, 0x5C, 0xD7, 0xCD, 0xF7, 0xCB, 0xB6, 0xED, 0x3F, 0x41, 0xCB, 0xB9, 0xAD, 0x48, 0x1F, 0x44, 0xA3, 0x35, 0x11, 0x55, 0xA5, 0x22, 0x35, 0x0A, 0x65, 0x8F, 0x69, 0x92, 0x11, 0xD7, 0xAA, ++ 0x5E, 0x68, 0xA5, 0x27, 0x94, 0x76, 0xC0, 0x0B, 0xD9, 0xEE, 0x01, 0x0C, 0xEC, 0x6E, 0x51, 0x02, 0xD2, 0x70, 0x54, 0xC9, 0x74, 0xD1, 0x6B, 0xE4, 0xA6, 0xC6, 0x85, 0x99, 0xAE, 0x83, 0x01, 0x9C, ++ 0xB1, 0x32, 0x4E, 0x35, 0x10, 0x4F, 0x10, 0x5A, 0x59, 0xE6, 0xCF, 0x07, 0x67, 0x30, 0xF3, 0x3A, 0x03, 0xED, 0xD7, 0xC9, 0x2E, 0x07, 0x36, 0xB5, 0x42, 0x98, 0x79, 0x0C, 0xA8, 0xD5, 0x28, 0x72, ++ 0x74, 0x28, 0x23, 0x73, 0x19, 0x9E, 0x90, 0xB9, 0x49, 0x13, 0xB9, 0x9C, 0x06, 0xD7, 0xD5, 0xB6, 0xC4, 0x18, 0xF5, 0x5B, 0x66, 0x14, 0x13, 0x31, 0x13, 0x0E, 0x6B, 0xD5, 0x61, 0x52, 0xB8, 0xDB, ++ 0x19, 0xB2, 0xFB, 0x1B, 0xB6, 0x5C, 0x8D, 0x21, 0xFC, 0xD4, 0xBE, 0x45, 0x1A, 0x4A, 0x1C, 0x0F, 0xEE, 0x73, 0xDB, 0xC3, 0x55, 0x7D, 0x36, 0x2C, 0x45, 0x3D, 0x8E, 0x6A, 0x43, 0xE9, 0x9E, 0x47, ++ 0x97, 0xD1, 0xF2, 0x5B, 0x1A, 0x58, 0x98, 0x14, 0x81, 0x1D, 0x66, 0xB7, 0x31, 0xA7, 0x5E, 0x99, 0x3F, 0xF1, 0xD3, 0xBC, 0x42, 0x11, 0xF8, 0xC1, 0x51, 0x0B, 0x90, 0x40, 0x50, 0x68, 0x94, 0xB8, ++ 0x6B, 0xA9, 0xFB, 0xA3, 0x55, 0x49, 0x61, 0xDF, 0x34, 0xFD, 0xB7, 0x65, 0x5F, 0xD9, 0x28, 0x37, 0x8B, 0x4E, 0x65, 0x00, 0x14, 0x77, 0xD1, 0xFC, 0xF1, 0x8C, 0xB7, 0x1C, 0x5E, 0x41, 0x71, 0x69, ++ 0x6F, 0x33, 0xB2, 0xB6, 0x76, 0x30, 0x38, 0xD5, 0x12, 0xAC, 0xB0, 0xF7, 0xFE, 0xEE, 0x76, 0xF0, 0xFB, 0x16, 0x4E, 0x30, 0xFE, 0xB7, 0xD6, 0x37, 0xB3, 0xAB, 0x1E, 0x7F, 0x25, 0x1E, 0xF8, 0xC0, ++ 0x54, 0x31, 0x46, 0x1C, 0x3A, 0xB9, 0x0F, 0x05, 0x7D, 0xA0, 0xF4, 0xD8, 0xC3, 0xB3, 0x78, 0x7A, 0xE5, 0x8C, 0xB0, 0x13, 0x6D, 0x68, 0xAC, 0xB6, 0x40, 0x7B, 0xCF, 0x67, 0x16, 0x20, 0x72, 0x3A, ++ 0x02, 0x30, 0xD4, 0xF7, 0xDD, 0x7A, 0xDE, 0x77, 0x0C, 0x41, 0x8F, 0xCA, 0xD9, 0x97, 0x8F, 0x7C, 0x96, 0x22, 0x26, 0xCA, 0x6D, 0x65, 0x79, 0xBA, 0xDC, 0x67, 0x52, 0x23, 0x7C, 0x99, 0xD2, 0x4C, ++ 0xA8, 0x04, 0xE9, 0xF1, 0xFC, 0xDC, 0x9A, 0xAA, 0x11, 0x1F, 0x2C, 0x90, 0x5E, 0xF0, 0x31, 0x69, 0x0D, 0x17, 0x65, 0xE8, 0x21, 0x93, 0x8A, 0x0B, 0x78, 0x46, 0xC3, 0xBB, 0x80, 0xDB, 0xEF, 0x95, ++ 0x30, 0xC6, 0x8C, 0xAA, 0x0A, 0xDA, 0x96, 0x2A, 0x59, 0x5F, 0xD9, 0xE7, 0xAB, 0xD9, 0xE1, 0xF7, 0x6F, 0xF2, 0x97, 0xE1, 0x78, 0x50, 0x54, 0x13, 0xEE, 0x95, 0xFC, 0x0A, 0x95, 0x8D, 0x72, 0x0C, ++ 0x2A, 0x23, 0x86, 0xA1, 0x64, 0x50, 0xF9, 0x7D, 0xE5, 0x8E, 0xE2, 0x27, 0xBF, 0xA3, 0x3C, 0xAA, 0xC0, 0x3F, 0x13, 0x5A, 0x83, 0x45, 0x46, 0x9F, 0x26, 0xC7, 0x70, 0x26, 0x91, 0x5E, 0xE2, 0x0F, ++ 0xBD, 0x82, 0xB0, 0x9B, 0x02, 0xFE, 0xA7, 0x7A, 0xBC, 0xFB, 0x9D, 0xA8, 0x94, 0xD8, 0x67, 0x6E, 0x16, 0x0F, 0x1E, 0x1C, 0xEA, 0x42, 0x0B, 0x2C, 0xFE, 0x14, 0xFF, 0x08, 0xE1, 0x65, 0x0D, 0x56, ++ 0x5B, 0x6C, 0xDF, 0x6A, 0xD7, 0xEE, 0x51, 0x3D, 0xC1, 0xE7, 0x34, 0x30, 0x96, 0xDD, 0x26, 0x5C, 0x45, 0x9F, 0xA1, 0x7C, 0x55, 0xE5, 0xD6, 0xC6, 0x38, 0x28, 0xBC, 0xC4, 0xB7, 0x2A, 0x2A, 0x02, ++ 0x7C, 0x31, 0xD2, 0x43, 0x8A, 0x7B, 0xFF, 0x42, 0x77, 0x3F, 0xED, 0x94, 0x35, 0xC3, 0xC6, 0xED, 0x66, 0x4D, 0x35, 0x41, 0x86, 0x58, 0xCB, 0x13, 0x37, 0x43, 0xF4, 0x82, 0x73, 0x2F, 0x6F, 0xB2, ++ 0xC8, 0x9C, 0x68, 0x00, 0x05, 0x20, 0x9D, 0xFB, 0xEE, 0xAB, 0x70, 0x2A, 0x39, 0x11, 0xA8, 0x7D, 0xD5, 0x5E, 0xF3, 0x9F, 0x40, 0x93, 0x70, 0xBE, 0x94, 0x88, 0x84, 0x42, 0xB0, 0x8D, 0xB3, 0x37, ++ 0x08, 0xBC, 0xB3, 0x1A, 0x14, 0x07, 0x30, 0x3B, 0x4F, 0xED, 0xF3, 0x11, 0xC1, 0x52, 0x63, 0x57, 0x9F, 0x81, 0x74, 0x6C, 0xED, 0xFB, 0x79, 0x0C, 0xA0, 0x30, 0x4C, 0x88, 0xFC, 0xCA, 0x59, 0x56, ++ 0xE9, 0xF8, 0x19, 0xFE, 0xFF, 0xAC, 0x13, 0xC6, 0x4D, 0x96, 0xC4, 0x3C, 0x98, 0xD8, 0x8F, 0xEC, 0x8F, 0xD9, 0x83, 0xC1, 0xC5, 0x19, 0xCB, 0x88, 0x4D, 0x2E, 0x7A, 0x90, 0xCD, 0xF3, 0x65, 0xFE, ++ 0x5F, 0xB5, 0xDA, 0x8F, 0xAB, 0x74, 0xF0, 0x73, 0xBA, 0x25, 0x8D, 0x26, 0x4F, 0x94, 0x2D, 0x14, 0xD6, 0xE2, 0xE9, 0x08, 0x29, 0xAE, 0x35, 0x74, 0x6D, 0x05, 0x7A, 0x18, 0x0E, 0x56, 0x38, 0x42, ++ 0xF5, 0x4C, 0x4B, 0xC7, 0xD5, 0x00, 0x49, 0x43, 0x24, 0x72, 0xD1, 0xED, 0xF1, 0x38, 0xF2, 0xE5, 0x86, 0x26, 0xAB, 0x8C, 0x96, 0xE6, 0x00, 0xED, 0x19, 0x36, 0xF3, 0x38, 0x80, 0xF4, 0xF2, 0x20, ++ 0x1B, 0x61, 0x07, 0xC4, 0xEF, 0xB9, 0xC0, 0x2E, 0xCF, 0x31, 0x44, 0xE3, 0xAC, 0x55, 0xB0, 0xEE, 0x51, 0x68, 0xA7, 0x93, 0xB1, 0x5D, 0xB4, 0xA6, 0x1B, 0xFF, 0xFC, 0x8B, 0xE4, 0xA3, 0x80, 0x40, ++ 0xA0, 0x6C, 0x31, 0xF5, 0x15, 0x2D, 0x7C, 0x95, 0xF8, 0xC4, 0x94, 0x45, 0x12, 0x4D, 0x07, 0x20, 0x95, 0xFC, 0x14, 0xF6, 0x79, 0xDF, 0x55, 0xDC, 0x1E, 0x7F, 0xBE, 0x48, 0x83, 0xDA, 0xA3, 0x50, ++ 0xF2, 0x16, 0x98, 0xEB, 0x78, 0xB2, 0x9A, 0xDB, 0xD0, 0x71, 0x53, 0x58, 0xF9, 0x65, 0x27, 0x8A, 0xF8, 0x67, 0xC1, 0x2E, 0x2B, 0xB1, 0x9F, 0xFA, 0x16, 0x50, 0x27, 0x69, 0xF4, 0xFB, 0xDB, 0x20, ++ 0x82, 0x2D, 0x1D, 0xE1, 0xFB, 0x6E, 0x41, 0x6D, 0x82, 0x29, 0x32, 0xB5, 0xCD, 0x5B, 0x37, 0x0A, 0x58, 0x65, 0x56, 0x07, 0x56, 0xD7, 0x6D, 0x8C, 0x2F, 0xE4, 0x70, 0x4E, 0x0B, 0x15, 0x83, 0xEB, ++ 0x5D, 0x23, 0x5E, 0xC3, 0xFE, 0x7F, 0xF4, 0x98, 0xE1, 0x35, 0x61, 0x00, 0xC5, 0x80, 0x76, 0x3E, 0xB5, 0xF2, 0x36, 0x35, 0x62, 0x0C, 0xF6, 0xCC, 0x56, 0xE7, 0x4B, 0x48, 0x22, 0x3C, 0x70, 0xB5, ++ 0xE5, 0x23, 0xAC, 0x61, 0xEA, 0xAE, 0xF8, 0x8E, 0x4D, 0xD1, 0x50, 0x5D, 0x25, 0xC9, 0x65, 0x8B, 0x96, 0xE9, 0x32, 0xCE, 0x0B, 0xD0, 0xEF, 0xFE, 0x80, 0xBA, 0xA5, 0xD1, 0x05, 0xA6, 0x51, 0x4B, ++ 0x25, 0x57, 0x8D, 0x1F, 0x3F, 0xCC, 0x8F, 0xF5, 0xF9, 0x3A, 0x7C, 0xDD, 0xCC, 0xE0, 0x84, 0x0F, 0x63, 0x1B, 0xE0, 0x2B, 0xCA, 0x85, 0x20, 0x98, 0xDC, 0xFA, 0x06, 0x56, 0xF0, 0x8A, 0xF1, 0xBD, ++ 0xC8, 0xE2, 0x4A, 0x27, 0x46, 0x74, 0x16, 0xF4, 0x87, 0xAD, 0x02, 0x60, 0x22, 0xDD, 0x5E, 0x1E, 0x1E, 0xFD, 0xC9, 0xC2, 0xB4, 0x71, 0xE3, 0x26, 0x53, 0x65, 0xF2, 0x0B, 0xC8, 0x21, 0x86, 0x37, ++ 0x66, 0x25, 0x5D, 0x0A, 0xAC, 0x67, 0xB6, 0x58, 0xE6, 0x63, 0x3F, 0xD2, 0xC9, 0x3F, 0x80, 0xE5, 0x55, 0x5C, 0x6B, 0x3F, 0x9B, 0x9C, 0x54, 0x02, 0x62, 0xF9, 0x2E, 0x57, 0x5E, 0xCA, 0x8C, 0xBD, ++ 0xDE, 0xA2, 0x5E, 0x35, 0x59, 0x9F, 0xAF, 0xE0, 0x90, 0x20, 0x1D, 0x53, 0x1A, 0x96, 0xA6, 0x59, 0x5F, 0x6B, 0xC0, 0xA0, 0x83, 0x47, 0xF4, 0x54, 0xFC, 0x12, 0x6A, 0x16, 0x21, 0x64, 0xA0, 0xD5, ++ 0x07, 0x39, 0xF3, 0x0A, 0xB2, 0x29, 0x89, 0xF8, 0x88, 0xE4, 0xDF, 0xA3, 0x56, 0x13, 0x7A, 0x3E, 0x65, 0xEC, 0xB5, 0xF4, 0x7E, 0x20, 0x0E, 0x73, 0x36, 0xA2, 0xF0, 0xA5, 0xC5, 0x47, 0xA2, 0x36, ++ 0x7F, 0x1D, 0x0F, 0xDE, 0xA8, 0x9D, 0x00, 0x69, 0x8D, 0x96, 0x2E, 0x62, 0xE8, 0xDA, 0xA5, 0x70, 0xEE, 0x07, 0x7B, 0x9E, 0xB8, 0x18, 0xED, 0x82, 0x75, 0xB2, 0x3E, 0x73, 0x39, 0xFA, 0x3A, 0x6C, ++ 0x9E, 0xF0, 0xD3, 0xC9, 0x78, 0xEE, 0xF7, 0x5B, 0xC9, 0x77, 0xAA, 0xFE, 0x87, 0xB1, 0xA4, 0x1F, 0xED, 0x4C, 0x7D, 0xA1, 0x7E, 0x2B, 0xBE, 0xCC, 0xA8, 0xF4, 0x06, 0xF0, 0x40, 0xB1, 0x6F, 0xDD, ++ 0xFB, 0x2E, 0x8F, 0x47, 0x0C, 0x25, 0x40, 0x9B, 0x8C, 0x7C, 0x13, 0x88, 0xE6, 0x08, 0xEB, 0xBA, 0xE2, 0x67, 0xF7, 0x7C, 0x5F, 0xE0, 0x10, 0xF6, 0x91, 0x7B, 0xC6, 0xCA, 0x7B, 0xF6, 0x86, 0x5F, ++ 0xAA, 0x73, 0xE1, 0x0F, 0x2F, 0x60, 0xD2, 0x2D, 0xB2, 0x4A, 0x21, 0x71, 0x81, 0xBE, 0x56, 0xFD, 0x47, 0x3E, 0xE7, 0xAF, 0x5E, 0xD5, 0x60, 0x9A, 0xDA, 0x02, 0x36, 0xFA, 0xB3, 0x06, 0x6C, 0x3D, ++ 0xAD, 0x28, 0xA2, 0x4F, 0x67, 0xD4, 0xCC, 0x1C, 0xEF, 0xE6, 0x10, 0x6F, 0x5E, 0x54, 0x27, 0xAC, 0xCD, 0xC7, 0x3F, 0xF8, 0x85, 0x76, 0xA2, 0x7A, 0xEB, 0xE7, 0x1A, 0x33, 0xDB, 0x3C, 0x08, 0x02, ++ 0xD6, 0x97, 0x18, 0x95, 0x6C, 0xD9, 0xD1, 0x5A, 0xAA, 0x9A, 0x2D, 0xE3, 0xAC, 0x62, 0x10, 0x10, 0x0A, 0x2E, 0x39, 0xAF, 0x5B, 0xA9, 0x1D, 0xFA, 0x21, 0x8C, 0x53, 0x72, 0x66, 0x06, 0x2E, 0x32, ++ 0x6E, 0x2F, 0xF8, 0xC4, 0x4D, 0x17, 0x80, 0xFB, 0xAF, 0xF4, 0xAD, 0xBA, 0x82, 0x71, 0x17, 0xE0, 0xBC, 0xB7, 0xA4, 0xC8, 0xF2, 0x61, 0x39, 0x81, 0x71, 0x3F, 0xA5, 0x98, 0xA4, 0x68, 0x3A, 0x46, ++ 0x70, 0x85, 0x4C, 0x94, 0x67, 0xF2, 0x5A, 0x65, 0x6D, 0xDB, 0x6E, 0x7C, 0x3E, 0xF1, 0x92, 0xEB, 0xBD, 0xEE, 0x15, 0x3A, 0x59, 0x41, 0x61, 0x95, 0x26, 0xB3, 0x17, 0x87, 0x54, 0x4F, 0xE2, 0x31, ++ 0x2A, 0x28, 0x98, 0x9C, 0x6A, 0xA3, 0xAC, 0xC0, 0xFE, 0x44, 0x23, 0x14, 0xFD, 0xFB, 0xD8, 0x08, 0x7F, 0x2B, 0x75, 0x5E, 0xB4, 0xB7, 0x35, 0x55, 0x76, 0x28, 0x3F, 0xA8, 0x6C, 0xD2, 0xD9, 0xEC, ++ 0x1A, 0x6B, 0xD9, 0x4E, 0x6C, 0x5D, 0x72, 0x82, 0x02, 0xEC, 0x0B, 0x6E, 0xDF, 0xE1, 0xF3, 0x35, 0x84, 0x11, 0xC4, 0x9E, 0xC1, 0x10, 0x63, 0xAC, 0x1E, 0xDE, 0xB2, 0x1B, 0x95, 0xD7, 0x13, 0xD9, ++ 0x0B, 0xE4, 0x96, 0xD8, 0x55, 0x84, 0xAA, 0x64, 0x25, 0x47, 0x14, 0x80, 0x84, 0x4E, 0x5B, 0xE2, 0xD7, 0x05, 0x3E, 0x87, 0x22, 0x03, 0x64, 0x79, 0xBD, 0xCB, 0x36, 0x38, 0x35, 0xBB, 0x08, 0xB0, ++ 0x10, 0xDD, 0x0C, 0x08, 0x0E, 0x3D, 0x85, 0x24, 0xAE, 0x62, 0x21, 0x3E, 0x20, 0x8E, 0xC4, 0x12, 0xD0, 0x1F, 0xC9, 0xCE, 0xFA, 0x9C, 0x0A, 0xBD, 0x39, 0x64, 0x96, 0x45, 0x51, 0x84, 0xDB, 0x24, ++ 0x4A, 0xD6, 0xBE, 0xB4, 0x5F, 0xB7, 0x68, 0x47, 0x91, 0x62, 0x47, 0x44, 0x33, 0x52, 0x0C, 0xE0, 0x63, 0x03, 0xFF, 0xC6, 0x06, 0x07, 0xDD, 0x43, 0x29, 0x62, 0x88, 0x4F, 0x8A, 0xA6, 0x54, 0x39, ++ 0x98, 0xE1, 0xFB, 0x24, 0xDA, 0xF8, 0xAB, 0x3F, 0xF8, 0x62, 0xA8, 0x16, 0xA3, 0x98, 0x28, 0xF5, 0x7B, 0x54, 0x7A, 0xE7, 0x66, 0x98, 0x3F, 0x7C, 0xFA, 0xC8, 0x50, 0x23, 0xDC, 0x65, 0x53, 0x43, ++ 0x12, 0x74, 0xB8, 0x40, 0x19, 0xDB, 0xD8, 0x5D, 0x2C, 0x42, 0x9D, 0x2B, 0x01, 0xE3, 0xC0, 0xA5, 0xDE, 0x1E, 0x6C, 0xC8, 0x5E, 0x62, 0x57, 0x9B, 0x00, 0x12, 0x6E, 0x6F, 0xE8, 0x1A, 0xB2, 0xEC, ++ 0x08, 0x85, 0xD4, 0x30, 0x98, 0xA6, 0xF2, 0x15, 0x94, 0xD6, 0x67, 0x0F, 0x3E, 0xAB, 0x54, 0xEF, 0x3E, 0x30, 0xC7, 0x38, 0x96, 0x46, 0x1F, 0xE3, 0xCA, 0x4E, 0x8E, 0xD9, 0x29, 0x3E, 0x4F, 0x27, ++ 0x6E, 0x18, 0xAA, 0xC8, 0x54, 0x46, 0xC0, 0xC2, 0x34, 0xFF, 0x6F, 0x9A, 0xE1, 0x1A, 0x09, 0x89, 0x9B, 0x3D, 0x22, 0x1C, 0xC6, 0xC4, 0xB3, 0x63, 0xF7, 0xBE, 0x27, 0xAD, 0xF3, 0xF5, 0x1C, 0xE4, ++ 0xBD, 0x8F, 0x51, 0xC2, 0x1C, 0x7F, 0x44, 0xE3, 0x08, 0x3C, 0x8D, 0x04, 0x71, 0x24, 0x08, 0x4C, 0x1E, 0xDB, 0x09, 0x0A, 0x7D, 0x80, 0x56, 0x51, 0x7B, 0xBB, 0xD1, 0xF1, 0x87, 0xC4, 0x27, 0xDD, ++ 0xA5, 0x9E, 0x54, 0x5E, 0x8C, 0x60, 0x03, 0xCA, 0x0B, 0xC5, 0xBD, 0x38, 0x9E, 0xBD, 0x90, 0xB9, 0x97, 0x08, 0xC3, 0xD3, 0xC7, 0x40, 0x44, 0xEB, 0x2A, 0xB3, 0xCA, 0x6F, 0x72, 0xD4, 0xB2, 0xD4, ++ 0x91, 0x02, 0xB9, 0x74, 0x89, 0x64, 0x56, 0xFC, 0x67, 0x38, 0xE9, 0x0B, 0x94, 0x8C, 0x62, 0xE0, 0x16, 0x17, 0x14, 0x87, 0x1F, 0x57, 0x41, 0x9E, 0xCB, 0xAA, 0x16, 0xD0, 0x16, 0x65, 0xAC, 0xEB, ++ 0x39, 0x69, 0xB4, 0x84, 0xA2, 0xE0, 0x29, 0xED, 0x6A, 0x73, 0x30, 0x0E, 0x06, 0xC8, 0x50, 0xAF, 0xEF, 0xFC, 0x08, 0xCE, 0x29, 0x61, 0x85, 0x4E, 0x9A, 0xA0, 0x65, 0x38, 0xFF, 0x6D, 0x9F, 0x5A, ++ 0xEE, 0xAF, 0x57, 0x76, 0x1C, 0xB6, 0xAE, 0x36, 0x87, 0x1D, 0xC4, 0x17, 0x33, 0x2F, 0x30, 0x63, 0xBF, 0x91, 0x37, 0x21, 0x22, 0x68, 0xC3, 0x1F, 0x27, 0x8D, 0xC6, 0x85, 0xC1, 0xAD, 0x44, 0xD2, ++ 0x22, 0x56, 0x6F, 0x9F, 0x18, 0x82, 0x3D, 0x55, 0x0E, 0x89, 0x86, 0x51, 0xD7, 0x65, 0x57, 0x1A, 0x10, 0x69, 0xB8, 0x27, 0x48, 0x61, 0x85, 0x34, 0x59, 0xCF, 0x49, 0xDB, 0x92, 0x37, 0x44, 0xC9, ++ 0xC5, 0xC9, 0x3D, 0xD2, 0x6F, 0x66, 0x3F, 0x9A, 0xDD, 0xD0, 0xBF, 0x56, 0x38, 0x05, 0xB4, 0xB7, 0x47, 0xC0, 0xA6, 0xE5, 0xB5, 0x86, 0x90, 0x0C, 0x57, 0x25, 0x96, 0xF2, 0x12, 0x01, 0xD3, 0x74, ++ 0x55, 0x53, 0xCA, 0x09, 0xD2, 0x19, 0xCB, 0x01, 0x79, 0xF0, 0xB1, 0x00, 0x17, 0xF0, 0xF1, 0x4D, 0x5A, 0xF3, 0xB9, 0x4B, 0xB4, 0xA9, 0x38, 0x61, 0x78, 0xA8, 0x2D, 0x2B, 0x14, 0x11, 0xED, 0x8B, ++ 0x95, 0xAC, 0x40, 0xAE, 0x73, 0xB2, 0x36, 0xD9, 0xB7, 0x83, 0x25, 0x0F, 0x1B, 0x9B, 0xBD, 0xBD, 0x88, 0xC0, 0x9E, 0xEB, 0x29, 0x0A, 0x83, 0xD8, 0x0A, 0x44, 0x47, 0x60, 0xB9, 0x83, 0xB2, 0x70, ++ 0x20, 0xF1, 0x28, 0xED, 0x00, 0xE5, 0xD1, 0xD3, 0xBB, 0xC8, 0xCE, 0x86, 0x21, 0x4E, 0xB5, 0xF5, 0x33, 0xCC, 0x80, 0xF2, 0x78, 0xB1, 0x92, 0xB5, 0x7A, 0xBB, 0x0F, 0xFA, 0x70, 0x3E, 0xBF, 0x0B, ++ 0xAA, 0xE4, 0x92, 0x6D, 0x63, 0xC0, 0xFF, 0x51, 0x8A, 0x9B, 0xBE, 0xB3, 0x48, 0xD5, 0xB5, 0xA0, 0x4F, 0x6F, 0xFF, 0xCF, 0xD3, 0xA4, 0x25, 0xE5, 0x08, 0xBD, 0xAB, 0x88, 0xB4, 0x05, 0x7D, 0x94, ++ 0xD6, 0xF8, 0xB1, 0xB0, 0x56, 0x78, 0x3F, 0xE4, 0x0B, 0xE6, 0xD6, 0xEF, 0xDF, 0x53, 0x1F, 0x52, 0x81, 0x15, 0xE2, 0xB3, 0x21, 0x11, 0xD2, 0xB7, 0xCE, 0x59, 0x90, 0x84, 0xE2, 0x0F, 0x9E, 0xAD, ++ 0x59, 0x5A, 0xC9, 0x15, 0xCB, 0xAB, 0x2A, 0x48, 0x6C, 0x98, 0x5F, 0xB5, 0x0F, 0x6E, 0x2F, 0x3E, 0x16, 0x02, 0xD8, 0xE8, 0xCF, 0xA7, 0x68, 0x5A, 0xAA, 0x30, 0x5C, 0x06, 0x0F, 0x11, 0xDB, 0x98, ++ 0x07, 0x40, 0xBB, 0xF4, 0xBD, 0xF4, 0xA7, 0x1A, 0x1C, 0x7E, 0x37, 0xC6, 0xC6, 0xE8, 0x91, 0x20, 0xAD, 0x91, 0x2C, 0x2F, 0x2A, 0xC0, 0x25, 0x0F, 0x0F, 0xCE, 0x82, 0x6C, 0x55, 0xB6, 0xFB, 0x0F, ++ 0x63, 0x8D, 0xC0, 0xC5, 0x5E, 0x32, 0x7E, 0x92, 0x2D, 0xC4, 0x53, 0x75, 0x18, 0x69, 0xCD, 0xAB, 0xBC, 0x95, 0xA3, 0xC3, 0x50, 0x36, 0x8A, 0xF7, 0xAB, 0x4C, 0x17, 0xB0, 0x1D, 0x8B, 0xC4, 0x77, ++ 0x74, 0xB9, 0x01, 0xA1, 0x8A, 0xDB, 0x86, 0x98, 0x10, 0x37, 0x67, 0x21, 0xDC, 0x23, 0x3D, 0x81, 0x1D, 0xF2, 0x20, 0x8C, 0x04, 0xDF, 0x9B, 0xEE, 0xB8, 0x28, 0xB0, 0x02, 0xEA, 0xA1, 0xF8, 0x64, ++ 0x09, 0x1C, 0x1C, 0xD0, 0x90, 0xEA, 0x6F, 0xAB, 0xCC, 0x0B, 0x06, 0x4E, 0xD2, 0x91, 0x6A, 0xA1, 0x0F, 0x14, 0x4E, 0xE4, 0x47, 0x0A, 0x75, 0xAB, 0x04, 0xF2, 0xCC, 0xA1, 0xD8, 0xAC, 0x42, 0x48, ++ 0x4D, 0xCE, 0x93, 0x46, 0x76, 0xE7, 0x4A, 0x2A, 0x9E, 0x19, 0xB0, 0x96, 0xF1, 0x08, 0x8E, 0xBD, 0x2F, 0xDE, 0x8D, 0x16, 0x78, 0x46, 0xAA, 0x33, 0xD1, 0x81, 0x31, 0x72, 0xE9, 0x2B, 0x13, 0xB6, ++ 0x70, 0x81, 0xC4, 0x4C, 0x35, 0xF2, 0x55, 0xBB, 0x23, 0x6D, 0x0C, 0xF2, 0x9A, 0x58, 0xD0, 0xCC, 0xDE, 0xC3, 0x70, 0xC8, 0x6F, 0x84, 0x0D, 0xC6, 0xF9, 0x7A, 0x74, 0xBF, 0xAA, 0xCE, 0xFA, 0xBA, ++ 0x55, 0x65, 0xD7, 0x73, 0x62, 0x3A, 0x24, 0x32, 0x92, 0xE6, 0xDC, 0x76, 0x57, 0x39, 0x23, 0xD5, 0x9A, 0xC4, 0x43, 0xDB, 0x86, 0xA3, 0x12, 0x9A, 0x54, 0x73, 0xB1, 0x19, 0x4D, 0x21, 0xA4, 0x61, ++ 0xF6, 0x11, 0x4F, 0xDE, 0xC3, 0xA6, 0xD3, 0x8F, 0x28, 0xB3, 0x9B, 0x87, 0xF2, 0xEA, 0x06, 0x86, 0x67, 0x40, 0x94, 0x6B, 0x0D, 0x09, 0x7A, 0xF4, 0xB2, 0xC0, 0x6D, 0x36, 0xE9, 0xFC, 0xD2, 0x40, ++ 0x48, 0x90, 0x8E, 0x38, 0xA6, 0xF7, 0x6E, 0xAB, 0xBC, 0x19, 0x76, 0x17, 0x92, 0x82, 0xEB, 0x0E, 0x51, 0xD0, 0xE8, 0x3B, 0xE5, 0xCD, 0x93, 0xE6, 0x14, 0xC1, 0x6B, 0xEC, 0x1E, 0xEC, 0xB9, 0xF1, ++ 0x81, 0x08, 0x61, 0x70, 0x47, 0x59, 0xD1, 0xA0, 0x78, 0x92, 0xBF, 0x52, 0xF5, 0x5F, 0x89, 0x39, 0xA4, 0xDC, 0x30, 0x88, 0xFA, 0x16, 0x65, 0xF1, 0x35, 0xBD, 0x04, 0x77, 0xD0, 0x2D, 0xCD, 0xE5, ++ 0x7E, 0x0C, 0x1C, 0x0F, 0xAC, 0x0F, 0xA7, 0x0A, 0x25, 0x6F, 0x9B, 0x9B, 0xEB, 0xC7, 0xEB, 0x33, 0xF6, 0x6D, 0xB4, 0xE7, 0x9D, 0xF4, 0xB0, 0x70, 0xD8, 0x31, 0x81, 0x56, 0xFD, 0x65, 0xE1, 0xB3, ++ 0x6D, 0x37, 0xAC, 0xF9, 0xB0, 0xAA, 0xF0, 0x7C, 0x60, 0x34, 0x37, 0xC4, 0xA3, 0xD2, 0xFA, 0x2D, 0xCE, 0x6B, 0xCF, 0xAF, 0x18, 0x3F, 0x92, 0x1C, 0x6E, 0xE3, 0xE8, 0x7B, 0xD1, 0x75, 0x05, 0x7B, ++ 0xC9, 0x97, 0xF9, 0x0D, 0x18, 0x59, 0xEF, 0x76, 0x01, 0xE6, 0x8D, 0x35, 0x84, 0x62, 0xAF, 0xE3, 0xBA, 0xD1, 0x92, 0x83, 0x60, 0xE1, 0xAA, 0xFC, 0xCC, 0x17, 0x0D, 0x0F, 0xD7, 0x65, 0x18, 0x0B, ++ 0x57, 0xB0, 0x33, 0xCF, 0xCC, 0xE2, 0x89, 0x87, 0x8F, 0x41, 0x9B, 0x7D, 0x44, 0x71, 0xB7, 0xB0, 0xF3, 0xBF, 0x42, 0x56, 0xC0, 0x68, 0xDB, 0xCD, 0xBA, 0x7B, 0x0F, 0x20, 0x2C, 0xC7, 0x52, 0x9A, ++ 0x76, 0xC0, 0x9D, 0xB1, 0x66, 0xA1, 0x98, 0x5E, 0x10, 0xB4, 0x6F, 0x83, 0x0F, 0x08, 0xF7, 0x3E, 0xB2, 0x54, 0xCC, 0x3E, 0x33, 0xD6, 0x90, 0xDF, 0xAB, 0xED, 0x3F, 0x77, 0xE4, 0xC4, 0x65, 0x47, ++ 0x39, 0x90, 0x9E, 0x86, 0x1D, 0x04, 0x87, 0x49, 0x35, 0xD1, 0x20, 0x5D, 0xF3, 0x94, 0x1B, 0x10, 0x3D, 0x60, 0xF7, 0x1C, 0x36, 0x2B, 0xF0, 0x21, 0x91, 0x93, 0xF9, 0xAD, 0xAE, 0x49, 0xD3, 0x06, ++ 0xF5, 0x0A, 0x34, 0x79, 0x09, 0x70, 0x8A, 0x41, 0x7C, 0x74, 0xF8, 0xB8, 0xC4, 0x4D, 0x8C, 0x7F, 0xBE, 0xD5, 0x2F, 0x1A, 0x00, 0x98, 0x88, 0xED, 0x7D, 0xA2, 0x55, 0x12, 0xD7, 0x3C, 0xA3, 0x76, ++ 0x02, 0xD4, 0x6E, 0xEC, 0x02, 0x9D, 0x4F, 0x16, 0x84, 0x91, 0xC7, 0x0F, 0x2D, 0x0F, 0x13, 0x58, 0xCE, 0x37, 0x0C, 0x2C, 0xF2, 0x82, 0x35, 0x00, 0xE9, 0x89, 0xFB, 0x24, 0x72, 0x3C, 0x21, 0xDD, ++ }, ++ .t1_len = 2304, ++ .t1 = { ++ 0x94, 0x06, 0xE4, 0xDC, 0xE8, 0x12, 0xBE, 0x92, 0xE1, 0x53, 0xE0, 0x75, 0x2C, 0xFE, 0x26, 0xC1, 0x12, 0x7E, 0x9C, 0x80, 0xC8, 0x11, 0x3E, 0x12, 0x16, 0x95, 0xF9, 0x01, 0x4E, 0x03, 0xFF, 0xF1, ++ 0xFD, 0x7B, 0xE3, 0xB0, 0xF4, 0x0E, 0xEE, 0x5B, 0x02, 0xF5, 0x60, 0x1E, 0x2F, 0xC3, 0xAF, 0xF0, 0xCD, 0xF7, 0xE7, 0xE7, 0x34, 0x99, 0x9C, 0x7F, 0xC4, 0xEB, 0x9D, 0xDA, 0x81, 0x8C, 0x52, 0x06, ++ 0x93, 0xFE, 0x38, 0xE4, 0x49, 0xBE, 0x4C, 0xCF, 0x03, 0xFE, 0xA1, 0x72, 0x8E, 0x4C, 0xCA, 0x64, 0xFD, 0x11, 0x0B, 0xFC, 0x8E, 0xC9, 0xCB, 0x79, 0x50, 0x3B, 0xD5, 0x53, 0xF5, 0x89, 0x9A, 0x2F, ++ 0x63, 0x16, 0x5D, 0x19, 0x32, 0x72, 0x7D, 0xB7, 0x44, 0x72, 0x65, 0xF7, 0x96, 0xF4, 0xFD, 0xBC, 0xFE, 0xA6, 0xF4, 0x05, 0x9E, 0x88, 0x34, 0x34, 0xC7, 0x98, 0xB8, 0x68, 0xF9, 0x86, 0x60, 0x5D, ++ 0x4D, 0x03, 0xD3, 0x04, 0xB6, 0x77, 0xE3, 0x0F, 0xF7, 0xD7, 0x83, 0x0A, 0xDD, 0x06, 0x65, 0x2B, 0xCC, 0x1B, 0xF0, 0x4D, 0x33, 0xDF, 0xFE, 0xFC, 0xEF, 0x63, 0x4A, 0xF5, 0xBA, 0xE0, 0xD5, 0xC6, ++ 0xBA, 0xB6, 0xC5, 0x64, 0xF1, 0x95, 0x20, 0x82, 0xAA, 0x38, 0x25, 0x53, 0x20, 0x01, 0x9C, 0xBC, 0x8E, 0xCA, 0x07, 0x3D, 0x80, 0xAF, 0x0A, 0x59, 0x6E, 0x4D, 0x33, 0xAD, 0x73, 0xB4, 0xF1, 0xED, ++ 0xD4, 0x20, 0xE0, 0x90, 0x0B, 0xED, 0x47, 0x49, 0x5A, 0x88, 0x62, 0xD4, 0xA9, 0xCD, 0xDE, 0xD0, 0xDE, 0xA7, 0x74, 0xCD, 0xE0, 0x23, 0x8C, 0x71, 0x2B, 0x8A, 0xA9, 0x82, 0x47, 0x56, 0x66, 0x0D, ++ 0x2B, 0x34, 0xE4, 0x7E, 0x4B, 0x59, 0x42, 0x5F, 0x17, 0xA9, 0x60, 0x8D, 0xAD, 0x38, 0x28, 0xEC, 0x9D, 0x8A, 0xDB, 0x5D, 0xD3, 0x8C, 0x7D, 0x53, 0xDD, 0xA6, 0xDA, 0xC7, 0x4D, 0x3F, 0xD0, 0x3C, ++ 0x00, 0xB5, 0x9E, 0xE9, 0xA0, 0xE5, 0x27, 0x6E, 0x3E, 0x75, 0xD0, 0x13, 0x61, 0x01, 0x66, 0x49, 0x1D, 0x87, 0x3A, 0x7D, 0xA2, 0xC9, 0xFD, 0xA3, 0x60, 0xA6, 0x47, 0x73, 0x25, 0x00, 0x58, 0x41, ++ 0x8F, 0xA7, 0x62, 0x63, 0x2D, 0xCB, 0x12, 0x63, 0x85, 0x27, 0x32, 0x60, 0x02, 0x18, 0x67, 0x53, 0xE6, 0xB5, 0xD3, 0x31, 0xE5, 0x64, 0x23, 0xC9, 0x70, 0x9D, 0x34, 0x9C, 0x69, 0x5A, 0x32, 0x8A, ++ 0x56, 0x2B, 0x13, 0x9A, 0xF5, 0x98, 0xF8, 0x5D, 0xCB, 0x35, 0x98, 0x40, 0x7D, 0x82, 0xF8, 0x49, 0xC2, 0x9A, 0x87, 0xDC, 0x41, 0xFA, 0xA7, 0x69, 0x8F, 0xAC, 0x7F, 0x20, 0x4D, 0x70, 0xD0, 0x7D, ++ 0x4A, 0xDC, 0x1D, 0x68, 0xFB, 0x46, 0x08, 0x63, 0xBB, 0x00, 0x2F, 0x3A, 0x23, 0x57, 0xCB, 0x65, 0xFB, 0x4B, 0x03, 0xBA, 0xB6, 0x8D, 0xB9, 0xB1, 0x1A, 0x09, 0xC9, 0x02, 0xE8, 0x12, 0x95, 0x91, ++ 0x54, 0x16, 0xB4, 0x51, 0xD8, 0xE5, 0xFB, 0xF7, 0x81, 0x33, 0xBE, 0xD2, 0x81, 0x81, 0x37, 0x17, 0xE3, 0x74, 0xC5, 0xB4, 0x15, 0xE7, 0x77, 0x3F, 0x95, 0xD8, 0x3D, 0x8B, 0xF9, 0x7D, 0x4A, 0xC4, ++ 0x5E, 0xAC, 0x28, 0x1E, 0x50, 0x89, 0x69, 0x32, 0xF7, 0xEE, 0xA4, 0x83, 0xE6, 0x98, 0xED, 0xD6, 0x07, 0xC3, 0xFF, 0xDD, 0xD3, 0x4C, 0x56, 0x67, 0x03, 0x28, 0xEB, 0xA5, 0xE1, 0xEB, 0x24, 0x9B, ++ 0x8E, 0x26, 0x85, 0x38, 0xBF, 0x4C, 0xF3, 0x43, 0x2E, 0xD5, 0xA9, 0x33, 0xB8, 0x2E, 0x6C, 0x0E, 0x96, 0x0D, 0xE1, 0x8A, 0x20, 0x9F, 0xA3, 0x90, 0x96, 0x93, 0x87, 0x88, 0x4D, 0xAD, 0x8D, 0x8E, ++ 0xE7, 0xE6, 0x0A, 0x89, 0x69, 0x90, 0x62, 0x16, 0x2F, 0x90, 0xBB, 0x28, 0xE4, 0xCC, 0xBA, 0x1A, 0x5F, 0x52, 0x6D, 0xE9, 0xCF, 0x7F, 0xEF, 0xEC, 0x7A, 0x77, 0xDD, 0xA0, 0x7C, 0xD7, 0x00, 0x09, ++ 0xE4, 0x8E, 0xBF, 0x8E, 0xDD, 0x9B, 0x34, 0x87, 0x26, 0xA9, 0x37, 0xE1, 0x4F, 0xF5, 0xEB, 0x6E, 0x79, 0xE3, 0xDB, 0x1B, 0x60, 0xD7, 0x0A, 0x73, 0x05, 0x11, 0x15, 0x4A, 0x8A, 0xB8, 0x75, 0xF8, ++ 0x6D, 0xEB, 0xCB, 0x9D, 0x79, 0x0F, 0xC4, 0x32, 0x84, 0x4E, 0x90, 0x3C, 0x8B, 0xD9, 0xFD, 0xB2, 0x8F, 0x99, 0x88, 0xDF, 0xAE, 0xA5, 0x56, 0xE9, 0x20, 0xE5, 0x79, 0x25, 0x47, 0xAE, 0xA7, 0xA4, ++ 0x5B, 0x4C, 0x7E, 0x68, 0x41, 0x61, 0x1E, 0x33, 0x06, 0x4E, 0x5C, 0xB5, 0x9B, 0xBA, 0xEC, 0xA6, 0x9E, 0x38, 0xA0, 0x99, 0x94, 0xAE, 0xEA, 0x3D, 0x10, 0xF6, 0xFC, 0x53, 0xF6, 0x43, 0x56, 0x2F, ++ 0xA0, 0x0A, 0x34, 0x12, 0xD4, 0xAF, 0xF8, 0x01, 0xD4, 0x8D, 0x0C, 0x58, 0xBA, 0x05, 0x5A, 0x42, 0xCD, 0xF6, 0xB8, 0xF1, 0x86, 0x16, 0x99, 0xEF, 0xD9, 0xAD, 0x9D, 0xF4, 0xCB, 0xB9, 0x88, 0xE7, ++ 0x22, 0x17, 0x12, 0xBB, 0x42, 0xA4, 0x3B, 0xE8, 0x32, 0x25, 0x09, 0x11, 0x1D, 0x3A, 0x8E, 0xBC, 0x97, 0xFA, 0xEB, 0xF9, 0xF8, 0x5D, 0x69, 0x20, 0x76, 0x5A, 0x18, 0x2A, 0xD9, 0xC4, 0x54, 0x27, ++ 0x99, 0x31, 0x70, 0x5E, 0xA2, 0x90, 0x3F, 0x6E, 0x18, 0x7D, 0x2A, 0xF6, 0xA5, 0xE4, 0xA8, 0x30, 0x54, 0x16, 0x8A, 0xA6, 0xA6, 0xF1, 0x27, 0xC8, 0xCE, 0x0C, 0x56, 0xA2, 0xEF, 0x67, 0xDC, 0x1C, ++ 0xD9, 0xB2, 0x2A, 0x51, 0x39, 0xDA, 0xC1, 0x92, 0xFF, 0xC5, 0x3A, 0x13, 0xEC, 0x52, 0xA3, 0x22, 0x07, 0xA9, 0x6A, 0x4F, 0xED, 0xB1, 0x20, 0x55, 0xFF, 0xDD, 0xBE, 0xE6, 0xAE, 0xF0, 0x72, 0xF7, ++ 0x5D, 0xB7, 0xC6, 0xCD, 0x37, 0xB2, 0x58, 0x9D, 0xC0, 0x0F, 0xBE, 0xF1, 0x33, 0x3E, 0xB1, 0x13, 0xC8, 0x22, 0x1B, 0xF8, 0x74, 0x0F, 0xD7, 0xBF, 0x7F, 0x39, 0xA5, 0x7E, 0x4A, 0xE2, 0xCE, 0x86, ++ 0xE0, 0xE8, 0xB4, 0xE9, 0x21, 0x4D, 0x67, 0x21, 0x46, 0xED, 0xE9, 0x85, 0x87, 0x15, 0x71, 0x56, 0x5E, 0x9F, 0x59, 0xCD, 0xA5, 0x92, 0x22, 0xAC, 0x9C, 0x6C, 0x00, 0xD5, 0xA7, 0xC9, 0xD8, 0xA3, ++ 0xE5, 0x46, 0xDE, 0xC8, 0x3C, 0x65, 0x54, 0xEA, 0x89, 0x13, 0x72, 0xBB, 0xCA, 0xE7, 0xD7, 0x76, 0x88, 0xDE, 0xD6, 0x0B, 0x52, 0x6C, 0x04, 0xC9, 0xBF, 0x0A, 0x7D, 0x96, 0x56, 0x81, 0x90, 0x4D, ++ 0xAC, 0x03, 0x79, 0x1F, 0x08, 0xB0, 0x71, 0xF0, 0xEE, 0x5B, 0xAB, 0xA1, 0xC4, 0x6B, 0x15, 0x61, 0x75, 0x6E, 0x58, 0x9C, 0x33, 0x7B, 0xAB, 0x4F, 0x2B, 0x75, 0xAE, 0x3B, 0xF6, 0xE7, 0x74, 0x3F, ++ 0x6C, 0xEE, 0x5F, 0x09, 0x93, 0xE7, 0x18, 0xC9, 0x58, 0x4D, 0x47, 0xEA, 0xD4, 0xC9, 0x61, 0xAE, 0x96, 0xF6, 0xD6, 0x02, 0xA5, 0x06, 0xA2, 0xA4, 0xC0, 0xF5, 0x7E, 0x88, 0x1D, 0x51, 0xDC, 0x24, ++ 0xF2, 0x77, 0xEB, 0xA9, 0xCC, 0x3C, 0x6F, 0x23, 0x58, 0x29, 0xB5, 0xBA, 0x87, 0xC2, 0x1F, 0x12, 0x32, 0x1C, 0xEE, 0x8B, 0x6E, 0xE9, 0x08, 0x9B, 0xB5, 0x2C, 0x3A, 0x71, 0xAD, 0x61, 0x12, 0x46, ++ 0xAE, 0xD9, 0x80, 0xC1, 0xB9, 0x47, 0xA6, 0x7C, 0x88, 0xA1, 0x10, 0xA7, 0xBD, 0x84, 0x49, 0xD0, 0x9C, 0xE3, 0x90, 0x6C, 0x65, 0x35, 0x45, 0x7D, 0x02, 0xF2, 0x32, 0x5C, 0x70, 0xEE, 0x78, 0x63, ++ 0xAE, 0x63, 0x23, 0x0F, 0xC2, 0x3D, 0xEC, 0xA2, 0x99, 0xBB, 0x5B, 0x0E, 0x4B, 0x1A, 0xE8, 0xE2, 0x40, 0x1D, 0xFB, 0x9D, 0x4B, 0xDD, 0xD0, 0x61, 0x18, 0xBD, 0x15, 0x0F, 0x4B, 0x5C, 0xD3, 0x85, ++ 0xAF, 0xB4, 0xFA, 0xD4, 0xEC, 0xA4, 0x6D, 0x61, 0xBE, 0xCA, 0xB1, 0x1D, 0x02, 0x70, 0x26, 0x67, 0x33, 0x33, 0xAB, 0x31, 0x4B, 0x9E, 0xF9, 0x1B, 0x7A, 0x7F, 0x94, 0x0B, 0xDA, 0x44, 0x44, 0xAE, ++ 0xFE, 0x37, 0x03, 0x6A, 0x43, 0xF2, 0xB6, 0x8D, 0x0D, 0xFF, 0xD7, 0xAF, 0x33, 0xA3, 0x63, 0x0F, 0xDB, 0x32, 0x5A, 0x74, 0xDA, 0x7B, 0x09, 0x0F, 0x94, 0x9D, 0x06, 0x4B, 0xF7, 0x45, 0xB8, 0x93, ++ 0x37, 0x15, 0x2B, 0x98, 0x0E, 0x4E, 0x20, 0xCC, 0x23, 0xFF, 0xAF, 0xCC, 0xBC, 0x7E, 0x95, 0x77, 0x04, 0xE9, 0x4B, 0xE7, 0xF3, 0xE8, 0x5F, 0x7F, 0xE8, 0x49, 0x6F, 0xD5, 0xAA, 0xB9, 0x67, 0xB2, ++ 0x7C, 0x3F, 0x17, 0x3E, 0x26, 0x26, 0x80, 0xD0, 0x44, 0x08, 0x85, 0xE6, 0xC0, 0xB2, 0xAA, 0xB0, 0x9A, 0xB8, 0x1F, 0x6D, 0xE5, 0xB2, 0x2D, 0x17, 0xD5, 0xA2, 0x11, 0x97, 0xD6, 0x98, 0x93, 0xBE, ++ 0xED, 0x51, 0x83, 0x4E, 0x2D, 0x7E, 0x3D, 0xAF, 0xF0, 0x4C, 0xF8, 0x4A, 0xA9, 0xC7, 0x79, 0x6E, 0xBB, 0x6A, 0xE2, 0x06, 0xC4, 0xE1, 0x66, 0x25, 0xFD, 0xFD, 0x61, 0x39, 0x85, 0x05, 0x48, 0x06, ++ 0x26, 0x7C, 0xD6, 0x9B, 0xFA, 0x8F, 0x5D, 0xD6, 0x0F, 0x4F, 0x21, 0x94, 0x12, 0xDF, 0x2B, 0xAB, 0xC9, 0x56, 0x41, 0xAE, 0x15, 0x54, 0x87, 0xFA, 0xF4, 0x13, 0x33, 0xF5, 0xE5, 0x1B, 0xEF, 0xC2, ++ 0xF9, 0x63, 0xE6, 0x2B, 0x74, 0x8B, 0x3D, 0x9C, 0x20, 0x20, 0x66, 0xD1, 0xEC, 0xBA, 0xB6, 0x03, 0x21, 0x79, 0x10, 0x58, 0x9B, 0xB9, 0x69, 0x55, 0x21, 0xA5, 0xC5, 0x2F, 0x12, 0x38, 0x2F, 0x0D, ++ 0xE3, 0x24, 0x3F, 0x9E, 0x92, 0xED, 0x60, 0x53, 0x12, 0x63, 0x7D, 0xCC, 0xE5, 0xAD, 0x80, 0x7D, 0xA0, 0xC9, 0x2E, 0x99, 0x32, 0x52, 0x05, 0x20, 0x41, 0xC7, 0xB6, 0x8F, 0x4E, 0xB1, 0xBB, 0xB7, ++ 0x08, 0x5A, 0x5B, 0x02, 0x04, 0x77, 0x98, 0x92, 0x30, 0xCB, 0xA8, 0x9F, 0x96, 0x6D, 0x34, 0x97, 0xC4, 0x04, 0x3D, 0x05, 0x6F, 0x79, 0x7E, 0xA0, 0xB4, 0x8E, 0x24, 0x7C, 0xAB, 0xBC, 0x7E, 0x59, ++ 0x73, 0x07, 0xDA, 0x60, 0x5A, 0x00, 0x81, 0x45, 0x45, 0x51, 0xC8, 0x96, 0xAB, 0x4E, 0xE1, 0x34, 0x6B, 0x90, 0x4E, 0x35, 0x8A, 0x58, 0xCA, 0x2F, 0x7B, 0x93, 0xDA, 0x32, 0x9D, 0x08, 0x0A, 0x49, ++ 0xDC, 0xF9, 0xD2, 0xC9, 0xD1, 0xBB, 0xD6, 0xBA, 0x82, 0x6C, 0xA7, 0x13, 0x3A, 0xB2, 0xDF, 0x61, 0xD7, 0x13, 0x16, 0xEB, 0xDD, 0xED, 0x88, 0x2E, 0x49, 0x83, 0xB7, 0x67, 0x46, 0xF7, 0x14, 0x36, ++ 0xD2, 0xD7, 0xC1, 0x4D, 0x94, 0x34, 0x71, 0x70, 0xEE, 0x00, 0x15, 0x54, 0x00, 0x28, 0x1B, 0xD3, 0xC6, 0xBF, 0xE5, 0xEC, 0xBF, 0x69, 0xDE, 0xA0, 0x59, 0x01, 0x63, 0xE3, 0xA2, 0x97, 0x10, 0xC4, ++ 0x10, 0x7A, 0x08, 0xD4, 0xDD, 0x30, 0xFD, 0x6E, 0x05, 0x0E, 0xA1, 0xE9, 0xE3, 0xF3, 0xBA, 0xCD, 0x74, 0x10, 0x35, 0xE3, 0x47, 0x18, 0xAF, 0xA9, 0xA9, 0xC8, 0xAB, 0x19, 0xEA, 0x9C, 0xD8, 0x75, ++ 0x11, 0xCC, 0x59, 0xCC, 0x60, 0x1B, 0xC6, 0x3B, 0x82, 0x0F, 0xD0, 0x96, 0x87, 0x1F, 0x95, 0x26, 0x34, 0xA2, 0xA3, 0x78, 0x87, 0x83, 0xAA, 0xE7, 0x6D, 0xA2, 0x05, 0xB1, 0xEB, 0x5E, 0x94, 0x42, ++ 0x16, 0x19, 0xFF, 0x47, 0x52, 0x5F, 0x05, 0x62, 0xE4, 0xA3, 0x63, 0x3A, 0xC7, 0xC4, 0x01, 0x7D, 0xA2, 0xC8, 0x13, 0x07, 0xBD, 0xBD, 0x74, 0xB2, 0xD9, 0x16, 0x1E, 0x99, 0xC1, 0x68, 0x6A, 0x9A, ++ 0xB1, 0xC9, 0x44, 0x1B, 0x0D, 0x35, 0xC1, 0xCE, 0x7E, 0x9A, 0x62, 0x88, 0x28, 0x92, 0x85, 0x02, 0x33, 0x20, 0x88, 0x9B, 0x63, 0x9E, 0xB9, 0xCD, 0x0A, 0x56, 0x92, 0x93, 0xE3, 0x67, 0xC2, 0xBD, ++ 0x1F, 0xEA, 0x68, 0x7F, 0x45, 0x1B, 0x3D, 0xA8, 0x80, 0x9A, 0x77, 0xCA, 0x31, 0x9D, 0xFC, 0xFF, 0xBA, 0xD4, 0x27, 0x24, 0xF2, 0xE0, 0x67, 0xCB, 0x3A, 0x85, 0xE7, 0x23, 0xCD, 0xD0, 0xEF, 0xC6, ++ 0xB4, 0xC9, 0x7B, 0x5A, 0x13, 0x6B, 0xBE, 0xFC, 0xB6, 0xF1, 0x34, 0x59, 0x2C, 0xED, 0xDD, 0x6A, 0xFC, 0x98, 0x30, 0x36, 0x5D, 0x75, 0xF7, 0x5A, 0x27, 0xCA, 0xC7, 0x22, 0x56, 0x07, 0x8E, 0xD0, ++ 0x20, 0xA4, 0x49, 0x30, 0xDE, 0x9C, 0x35, 0xCE, 0x96, 0xE1, 0x54, 0x4E, 0xE9, 0x85, 0x1B, 0xE6, 0x78, 0x48, 0x2A, 0x32, 0x7C, 0xFA, 0x37, 0xA9, 0x13, 0xE0, 0x45, 0xC8, 0xC2, 0x63, 0xD9, 0xB2, ++ 0x5E, 0xAE, 0x21, 0xA2, 0x66, 0x4A, 0xF9, 0x43, 0x03, 0x95, 0x16, 0x3F, 0x04, 0x56, 0xD1, 0xA5, 0x18, 0xF6, 0x09, 0x7C, 0x96, 0xDB, 0x8F, 0x50, 0x5F, 0x34, 0x40, 0xA6, 0xC8, 0xCC, 0x31, 0xB5, ++ 0x95, 0xAC, 0xFE, 0x9A, 0xA9, 0xCC, 0x1C, 0xCF, 0xF9, 0xFD, 0xA6, 0x56, 0xBC, 0xDB, 0x5E, 0xEB, 0x57, 0xF4, 0x1E, 0x94, 0x67, 0xC6, 0x43, 0xBA, 0x62, 0x79, 0xE5, 0x41, 0xE8, 0x6C, 0x91, 0x07, ++ 0x4E, 0x55, 0xC6, 0x3A, 0xDF, 0x41, 0x51, 0x7C, 0xEA, 0x5A, 0x6F, 0x62, 0x29, 0xF7, 0x10, 0x16, 0x62, 0xBB, 0x0A, 0xA0, 0xCE, 0xAB, 0x2B, 0x7F, 0x62, 0x11, 0x96, 0xC7, 0xA7, 0x7B, 0xB3, 0x27, ++ 0xC7, 0x68, 0xC4, 0x3D, 0x06, 0x9D, 0x71, 0xC3, 0x2C, 0x71, 0x2C, 0x83, 0x1D, 0x68, 0x50, 0xE6, 0xEB, 0x79, 0x3D, 0x7D, 0xEB, 0x08, 0xDE, 0x7A, 0x70, 0x4B, 0x38, 0x6D, 0xFD, 0x2B, 0x30, 0x72, ++ 0xC2, 0x6B, 0x89, 0xDF, 0x8D, 0x07, 0x2B, 0x3E, 0x9F, 0x56, 0x96, 0xA0, 0x73, 0x2E, 0x21, 0x5D, 0xF6, 0xDE, 0x47, 0x5D, 0x3A, 0x69, 0xF1, 0x11, 0x2F, 0x8B, 0x6B, 0x8E, 0xE7, 0x6B, 0x73, 0x9C, ++ 0x92, 0x76, 0xD9, 0xEE, 0x78, 0x17, 0xD9, 0x89, 0xAA, 0x07, 0x90, 0xD4, 0x6F, 0x8B, 0xE9, 0xBC, 0xF8, 0xA9, 0xDE, 0x83, 0xD3, 0xF3, 0xC3, 0x02, 0xA8, 0xAA, 0xBE, 0xE5, 0xC8, 0xFE, 0xBC, 0x2A, ++ 0xDC, 0x70, 0x6F, 0xC0, 0xEA, 0x55, 0xCD, 0x6F, 0x38, 0x37, 0x74, 0xF9, 0x55, 0xFE, 0xC7, 0x0A, 0x5F, 0x83, 0x80, 0x74, 0xDC, 0xB7, 0x31, 0x53, 0x2C, 0x94, 0x9C, 0x88, 0x84, 0xE9, 0x5F, 0xDE, ++ 0xCE, 0x3A, 0x7D, 0x9F, 0x7E, 0xA2, 0x1A, 0xC5, 0xA8, 0xAC, 0xDF, 0xAA, 0x89, 0x68, 0x1E, 0x95, 0x01, 0x4D, 0x5A, 0x23, 0x44, 0x31, 0x5B, 0xF8, 0xB3, 0xFF, 0x97, 0x12, 0xA0, 0x9A, 0x8F, 0xDE, ++ 0xB8, 0x29, 0x4C, 0x25, 0x7D, 0x16, 0xCC, 0xEF, 0xAA, 0x78, 0xDD, 0x0F, 0x5D, 0xFF, 0xE0, 0x49, 0xCE, 0x2B, 0x8A, 0xC7, 0xE1, 0x60, 0x02, 0xED, 0x1E, 0x32, 0x8C, 0x62, 0x86, 0xA1, 0x67, 0x4A, ++ 0x5C, 0x06, 0xF6, 0x28, 0x37, 0xAA, 0xF3, 0xEE, 0xFF, 0xFC, 0x11, 0x46, 0x94, 0x7A, 0x63, 0x0D, 0x82, 0x44, 0xAA, 0x72, 0x89, 0x8D, 0xFE, 0x5B, 0x94, 0x78, 0x63, 0x70, 0x64, 0x8A, 0x13, 0xF0, ++ 0xE1, 0x6D, 0x50, 0x27, 0x77, 0xEB, 0x8D, 0xF9, 0x62, 0xFC, 0x86, 0x3C, 0x77, 0xC1, 0x59, 0xBF, 0x64, 0xCC, 0x2A, 0x47, 0xCA, 0xF6, 0xB2, 0x12, 0xCB, 0xC6, 0x14, 0x2B, 0x5C, 0x9F, 0x5B, 0xFF, ++ 0xE2, 0xDD, 0x3B, 0xB1, 0xF8, 0x63, 0x23, 0x10, 0x74, 0x82, 0x96, 0xBB, 0x81, 0xB3, 0x62, 0xB7, 0xE4, 0x56, 0xEE, 0xE8, 0xDF, 0x29, 0x55, 0xFC, 0xDC, 0x04, 0xE5, 0x5D, 0x25, 0x16, 0xA8, 0x28, ++ 0x07, 0x12, 0xCA, 0x5B, 0x60, 0xEA, 0x90, 0x7D, 0x51, 0xB2, 0xFA, 0x72, 0xF9, 0xC7, 0x3D, 0xA7, 0xFE, 0x2C, 0x25, 0x98, 0x8F, 0x5B, 0xE1, 0xB8, 0x23, 0x68, 0x25, 0xC8, 0x3A, 0x02, 0x38, 0x22, ++ 0x39, 0x40, 0x2A, 0x29, 0x4E, 0xA4, 0xBE, 0x31, 0xA1, 0x7D, 0xBD, 0x31, 0xBA, 0x1B, 0xFF, 0xF8, 0x04, 0xCC, 0x78, 0x2F, 0xED, 0x78, 0x95, 0x09, 0x7F, 0x58, 0x3D, 0xD1, 0x3A, 0xCC, 0x85, 0x49, ++ 0x1B, 0xDD, 0x12, 0x3F, 0xE0, 0x2C, 0x14, 0x12, 0xE3, 0x42, 0x61, 0x7D, 0x9C, 0x26, 0xB8, 0xD9, 0x87, 0x7C, 0xAD, 0x5A, 0x72, 0xD2, 0x32, 0x80, 0xB5, 0x27, 0x61, 0x47, 0xA7, 0x25, 0x84, 0xDA, ++ 0xE6, 0x17, 0x23, 0x15, 0x8B, 0x9A, 0x54, 0x79, 0xD6, 0x6B, 0x6D, 0x8A, 0x6C, 0x4D, 0xB0, 0xF2, 0xE7, 0x1E, 0xDD, 0x46, 0x58, 0x85, 0xC3, 0x3A, 0x69, 0xA8, 0xA7, 0x4E, 0x78, 0x16, 0x08, 0xF0, ++ 0x64, 0x16, 0x86, 0x6D, 0x19, 0x6B, 0x69, 0x5E, 0x70, 0xA4, 0x3B, 0x7D, 0xEA, 0xBE, 0x8C, 0x00, 0x0D, 0x79, 0xEE, 0x16, 0x03, 0xD4, 0x7C, 0x45, 0xCC, 0xB8, 0x5B, 0xBF, 0x79, 0x2D, 0x59, 0x14, ++ 0x6F, 0xA3, 0x22, 0x86, 0x97, 0x6F, 0xF5, 0x91, 0x72, 0x62, 0x96, 0x38, 0xE1, 0xA0, 0x70, 0xCB, 0x0F, 0x0E, 0xCB, 0xF8, 0x09, 0xF9, 0xF5, 0xB8, 0x73, 0xFB, 0xEF, 0x96, 0x87, 0x4F, 0xCD, 0xED, ++ 0x58, 0xA2, 0xC0, 0xA4, 0x99, 0x06, 0xD9, 0x09, 0x1D, 0x29, 0xB2, 0x1D, 0x0A, 0x7B, 0x89, 0x94, 0x52, 0x5D, 0x08, 0x88, 0x74, 0x8F, 0xB7, 0xDE, 0xE1, 0x60, 0xF2, 0xFC, 0xC7, 0x89, 0x52, 0xBB, ++ 0x57, 0xBE, 0x4D, 0x36, 0x68, 0x5B, 0xE4, 0xF2, 0xB1, 0x45, 0xBC, 0xAC, 0x40, 0xE0, 0xDB, 0x30, 0x60, 0x87, 0x2D, 0x81, 0x76, 0x63, 0x91, 0xD4, 0xEC, 0x0B, 0x04, 0x60, 0x9F, 0x4F, 0x2D, 0xA2, ++ 0x28, 0x94, 0x15, 0x45, 0x8D, 0x5F, 0x15, 0x22, 0x3C, 0x8E, 0x91, 0x11, 0x88, 0xC7, 0x82, 0x5F, 0x52, 0xA0, 0xA3, 0xA2, 0xC2, 0xCA, 0x8B, 0x62, 0xA7, 0x4B, 0x03, 0x71, 0x59, 0xE5, 0x4D, 0x99, ++ 0x73, 0xC8, 0x00, 0x54, 0x3D, 0x2F, 0x6C, 0x4C, 0x0D, 0x9E, 0x3B, 0x09, 0x39, 0xC1, 0xC1, 0x68, 0x05, 0xE5, 0x79, 0x46, 0x95, 0x49, 0x9C, 0xE0, 0x13, 0xCF, 0xB9, 0xB0, 0xEA, 0xEE, 0xD8, 0xDD, ++ }, ++ .pkcs8_len = 0, ++ .spki_len = 0, ++ .msg_len = 33, ++ .msg = { 0xD8, 0x1C, 0x4D, 0x8D, 0x73, 0x4F, 0xCB, 0xFB, 0xEA, 0xDE, 0x3D, 0x3F, 0x8A, 0x03, 0x9F, 0xAA, 0x2A, 0x2C, 0x99, 0x57, 0xE8, 0x35, 0xAD, 0x55, 0xB2, 0x2E, 0x75, 0xBF, 0x57, 0xBB, 0x55, 0x6A, ++ 0xC8 }, ++ .sig_len = 4668, ++ .sig = { ++ 0x37, 0xBD, 0x0C, 0xCB, 0xC5, 0x4E, 0x5A, 0x48, 0x0F, 0x2F, 0xBB, 0x8E, 0xF3, 0x87, 0x9E, 0x83, 0x40, 0xD7, 0xF6, 0xC7, 0x42, 0x42, 0xAD, 0x44, 0xD3, 0xE8, 0xB0, 0x78, 0x3C, 0xC5, 0xBF, 0x21, ++ 0x36, 0xD7, 0xBD, 0x4A, 0x32, 0xA9, 0x55, 0x2F, 0xE0, 0xE8, 0xAF, 0x8E, 0x87, 0xD5, 0x41, 0x1D, 0x76, 0x8A, 0x69, 0x2F, 0xE2, 0xC5, 0x03, 0xA7, 0x0C, 0xCB, 0xC0, 0x3A, 0x34, 0xB3, 0xC1, 0xF0, ++ 0x81, 0x5B, 0x26, 0x4B, 0x57, 0x2A, 0x9E, 0x74, 0x60, 0x9B, 0x9A, 0xD7, 0x29, 0x3B, 0xE3, 0x72, 0x7B, 0xFE, 0x17, 0x58, 0x3B, 0x3B, 0x63, 0x4F, 0x0A, 0x11, 0x9D, 0x79, 0x3E, 0xB1, 0x4D, 0xFF, ++ 0x18, 0x64, 0x3D, 0x1C, 0x34, 0x6B, 0x65, 0xE5, 0x73, 0xEF, 0xB9, 0xD5, 0x3B, 0xFA, 0x4C, 0x20, 0x05, 0x5D, 0x55, 0xF7, 0x54, 0xAF, 0x2F, 0x73, 0xFC, 0x38, 0x62, 0x67, 0xD5, 0x89, 0x0B, 0x39, ++ 0x13, 0x01, 0x41, 0x55, 0x93, 0xB2, 0xC5, 0x69, 0x5B, 0x9C, 0x06, 0xF0, 0x01, 0xF8, 0x84, 0x5C, 0x7C, 0xFA, 0xD7, 0x7C, 0x04, 0xE4, 0x11, 0x65, 0x18, 0xDF, 0x80, 0xF0, 0x41, 0xA5, 0x8A, 0x85, ++ 0x74, 0x48, 0xE7, 0x68, 0xA7, 0x1A, 0x7A, 0x01, 0xF2, 0x43, 0x31, 0x70, 0xB3, 0x71, 0xE8, 0xE3, 0x01, 0xA5, 0x37, 0x87, 0xD5, 0xEC, 0x77, 0x05, 0xA5, 0xEE, 0x1F, 0xE4, 0xFC, 0x04, 0x91, 0xCD, ++ 0xC6, 0xC8, 0x76, 0x96, 0x8A, 0x60, 0x6E, 0xC1, 0x38, 0x6F, 0x45, 0x1C, 0xE8, 0x54, 0x77, 0x34, 0x8D, 0xE1, 0xC6, 0x8E, 0xCC, 0x33, 0x95, 0x41, 0x61, 0x24, 0x90, 0xB2, 0x4C, 0x24, 0x2D, 0x25, ++ 0x87, 0x39, 0x81, 0xF9, 0xDE, 0xA6, 0x6D, 0x13, 0xF3, 0xC2, 0x10, 0x93, 0xEA, 0x48, 0x11, 0x51, 0xD1, 0x76, 0xA5, 0x50, 0x08, 0x42, 0x55, 0x0C, 0x26, 0xD0, 0xAF, 0xB1, 0xC6, 0xAE, 0xBE, 0x8E, ++ 0x42, 0x67, 0xE3, 0x6F, 0xD5, 0x70, 0x1E, 0x45, 0xD1, 0xDF, 0x15, 0x95, 0x9C, 0x7D, 0xC4, 0x4E, 0x7F, 0x5B, 0x6B, 0xA8, 0xCA, 0x04, 0xED, 0xF1, 0xE3, 0xE6, 0x48, 0x69, 0xFA, 0x15, 0x3B, 0xA7, ++ 0x46, 0x7F, 0x0D, 0x7B, 0x2F, 0xDC, 0x91, 0x24, 0x3A, 0x22, 0x39, 0x06, 0xF1, 0xAE, 0xA0, 0xD9, 0xFC, 0x14, 0x0F, 0x70, 0xCD, 0x02, 0x5A, 0x31, 0xB4, 0x0F, 0x22, 0xC4, 0x71, 0xBD, 0xD2, 0x36, ++ 0x5E, 0xD6, 0x30, 0x2D, 0x14, 0x81, 0x31, 0x6E, 0xE3, 0xC4, 0xC1, 0x70, 0xA1, 0x62, 0xEF, 0xE9, 0xFF, 0x41, 0x85, 0xE4, 0x50, 0x08, 0xF0, 0x7F, 0x6B, 0xDB, 0xAC, 0x22, 0x1D, 0xEC, 0x0B, 0xF0, ++ 0xAF, 0x88, 0x4B, 0x16, 0xC9, 0x5F, 0x34, 0x35, 0x01, 0xAA, 0x09, 0x8A, 0xD4, 0xA1, 0xF8, 0x20, 0x68, 0xFA, 0x1F, 0xBF, 0xF0, 0xE0, 0x40, 0x94, 0x6D, 0xCD, 0x50, 0xBF, 0x00, 0x9D, 0xF1, 0xFC, ++ 0xA4, 0xA3, 0xAA, 0xDB, 0x1C, 0x29, 0x51, 0xC0, 0x86, 0xD2, 0x7F, 0x20, 0x02, 0xDF, 0xD8, 0x54, 0xE5, 0x98, 0x52, 0xF4, 0x15, 0x30, 0x90, 0xDD, 0xC1, 0xA2, 0x1A, 0x6E, 0x0B, 0xE5, 0x92, 0x18, ++ 0x7A, 0x68, 0xAE, 0x08, 0x5B, 0x1D, 0x5D, 0x98, 0xBE, 0x8F, 0xCE, 0x5E, 0x24, 0x03, 0x1F, 0x47, 0xF8, 0x34, 0x30, 0x6B, 0xE5, 0xA5, 0xB6, 0x80, 0xAC, 0xFC, 0xD9, 0xF4, 0x04, 0xC1, 0xDE, 0x85, ++ 0x79, 0x66, 0xD2, 0x54, 0x6E, 0x66, 0x94, 0x01, 0x5F, 0x05, 0x02, 0xD0, 0xE6, 0x56, 0x8C, 0x9A, 0xA1, 0xB1, 0x3B, 0x3D, 0x7B, 0x61, 0xEE, 0x6A, 0x3D, 0xA0, 0x16, 0xDD, 0x34, 0xD6, 0x44, 0xB1, ++ 0x29, 0x7E, 0x63, 0x8D, 0xF0, 0xFC, 0xB6, 0xF6, 0x85, 0x57, 0x7E, 0x16, 0x4F, 0x5D, 0x6A, 0xA6, 0xF0, 0x70, 0xC1, 0xD0, 0x21, 0x55, 0x8C, 0xBC, 0xFD, 0x6F, 0x9B, 0xA3, 0x75, 0xE2, 0x89, 0x1F, ++ 0x67, 0x26, 0xCC, 0xE4, 0xCE, 0xBC, 0x89, 0xA9, 0x63, 0x57, 0x93, 0x0D, 0x04, 0x4C, 0x16, 0xAB, 0x29, 0x45, 0x30, 0x2C, 0xE0, 0xF2, 0xB6, 0x46, 0x17, 0x04, 0x6C, 0x3C, 0x1C, 0x4A, 0x6B, 0x34, ++ 0xD5, 0xAA, 0x07, 0x4E, 0x5F, 0xCB, 0x10, 0xBB, 0xA4, 0xC2, 0xA6, 0x08, 0x26, 0x5F, 0x45, 0xD7, 0x45, 0x10, 0x75, 0x0E, 0xAC, 0x67, 0x3A, 0x82, 0x8D, 0x5D, 0x30, 0x8F, 0x34, 0x07, 0x92, 0x31, ++ 0x33, 0xD5, 0x50, 0xB2, 0x57, 0x85, 0xA8, 0x39, 0x02, 0x42, 0xDC, 0x27, 0xB0, 0x82, 0xD3, 0x87, 0xAB, 0xCC, 0xDA, 0x7C, 0xD4, 0xD6, 0xEE, 0x5E, 0xAB, 0x8D, 0x51, 0xC8, 0x76, 0x9C, 0x24, 0x3A, ++ 0x95, 0x88, 0xF0, 0x45, 0xCC, 0xD9, 0xA5, 0x17, 0x2D, 0x99, 0xD0, 0x4E, 0xE4, 0x39, 0x59, 0xDC, 0x4D, 0x95, 0xBE, 0xAC, 0x06, 0x14, 0xA2, 0xF8, 0x50, 0x97, 0xED, 0x1C, 0x47, 0x61, 0x38, 0x42, ++ 0x9D, 0x12, 0xC7, 0x75, 0x8F, 0xA5, 0x28, 0x75, 0xC7, 0x38, 0xD4, 0x6E, 0xF2, 0xD9, 0x67, 0x51, 0x90, 0xFB, 0x72, 0x65, 0xF9, 0xAA, 0xC8, 0xC6, 0xF1, 0x73, 0xE8, 0xD5, 0x5C, 0x6B, 0x33, 0x81, ++ 0x9F, 0xBF, 0x9B, 0x5B, 0xD3, 0x12, 0x4D, 0x30, 0xC5, 0x81, 0x3E, 0x44, 0x7F, 0xAE, 0x23, 0xFC, 0xA5, 0xDB, 0x43, 0x8E, 0xC5, 0xCC, 0x8A, 0x66, 0xDE, 0xEB, 0xEB, 0x39, 0x53, 0x49, 0x29, 0xCE, ++ 0x4C, 0xE0, 0xB9, 0x8F, 0x1C, 0xA0, 0xE2, 0xC7, 0xD4, 0x53, 0x81, 0xC8, 0xF2, 0xE2, 0xFD, 0x2F, 0xED, 0x40, 0x6B, 0x29, 0xCC, 0x6A, 0x09, 0xD8, 0x1B, 0x44, 0xA4, 0x4F, 0x16, 0xC1, 0x50, 0xD8, ++ 0x65, 0xE8, 0xEA, 0x60, 0x60, 0xA8, 0x58, 0x39, 0x7C, 0x07, 0xF8, 0x57, 0x3A, 0x9C, 0xA2, 0x93, 0x00, 0x7D, 0x1B, 0xE4, 0xDD, 0xD8, 0xA5, 0x37, 0xDD, 0x9A, 0x57, 0x7F, 0x5E, 0x42, 0xF3, 0xEC, ++ 0xB4, 0x8F, 0x75, 0x81, 0x51, 0xA4, 0x01, 0xCA, 0xF2, 0x26, 0xA4, 0x8D, 0x94, 0x81, 0x9D, 0x2A, 0x43, 0xED, 0x08, 0xCD, 0xB6, 0xAE, 0xDD, 0x64, 0x01, 0x14, 0x03, 0x22, 0x31, 0x3B, 0xFD, 0xE2, ++ 0x76, 0x05, 0x71, 0x7E, 0x35, 0x66, 0xDD, 0x31, 0xBB, 0x5C, 0x52, 0x71, 0x45, 0x90, 0x45, 0x93, 0xA4, 0x74, 0x41, 0xD2, 0xF3, 0xC7, 0x44, 0x2C, 0x63, 0x69, 0x5D, 0xD0, 0xC3, 0x60, 0xBD, 0xA9, ++ 0x95, 0xFB, 0xFE, 0xC3, 0xE6, 0xC6, 0x63, 0xD1, 0xD2, 0x2D, 0x89, 0x0D, 0x7D, 0xF7, 0x05, 0x98, 0xF1, 0xBB, 0xC6, 0x19, 0x2A, 0x4F, 0x3A, 0x0A, 0x45, 0x8A, 0x95, 0x44, 0xCA, 0xDD, 0x6F, 0x18, ++ 0xDF, 0xA9, 0xEE, 0xA6, 0xE3, 0x20, 0x6B, 0xDE, 0x60, 0xED, 0x1C, 0x57, 0xCC, 0xC8, 0x00, 0x5F, 0x7C, 0x7C, 0x82, 0x74, 0xC1, 0x40, 0x7C, 0x8F, 0xAF, 0x4E, 0xBD, 0x69, 0xD5, 0x76, 0x19, 0x79, ++ 0xF9, 0x07, 0xCF, 0xD0, 0x62, 0x4E, 0xC7, 0xBA, 0x1F, 0xD7, 0xB5, 0x67, 0x81, 0xAC, 0x71, 0xA4, 0xA5, 0x26, 0x84, 0xFF, 0xC3, 0x2D, 0x5B, 0x53, 0x3C, 0xB5, 0x6C, 0x07, 0xF6, 0x35, 0xF5, 0x79, ++ 0x69, 0xC8, 0xF1, 0x58, 0x8D, 0x34, 0xD0, 0xE7, 0xA1, 0xC7, 0xA9, 0x42, 0xAA, 0xA3, 0xF3, 0x56, 0x0B, 0x0D, 0xB4, 0xF8, 0xCE, 0xBC, 0xAF, 0x6F, 0x25, 0x24, 0x11, 0x4A, 0x5F, 0x6A, 0xF7, 0x1B, ++ 0x5F, 0x50, 0xE9, 0x42, 0xE6, 0x74, 0xA8, 0x77, 0xC1, 0x74, 0xD9, 0x22, 0x00, 0x86, 0x5A, 0x5A, 0x06, 0xFB, 0x2D, 0x7F, 0xB4, 0x74, 0x41, 0x46, 0x75, 0xED, 0x31, 0x72, 0xF5, 0xF1, 0x53, 0x8F, ++ 0x58, 0x1E, 0xDE, 0x5E, 0xDD, 0x74, 0x5B, 0x55, 0xF9, 0xA2, 0xFC, 0x49, 0x95, 0xEB, 0x98, 0x4B, 0x8A, 0x12, 0xD6, 0xF6, 0x5A, 0xAE, 0xDF, 0x8D, 0x8D, 0x6F, 0xF5, 0x3C, 0xE2, 0x38, 0xC3, 0xA6, ++ 0x6C, 0xF2, 0x34, 0xF5, 0x94, 0x36, 0x47, 0x1C, 0x9F, 0xCB, 0xD3, 0x8E, 0x7F, 0x26, 0xBD, 0xF9, 0x74, 0x1B, 0x59, 0x9E, 0x16, 0xB8, 0xF7, 0xED, 0x46, 0x44, 0xBB, 0x6A, 0xBE, 0x81, 0xBB, 0x94, ++ 0x0C, 0x24, 0xFA, 0x62, 0x0F, 0x44, 0x35, 0x84, 0xF9, 0x9B, 0xB9, 0xDC, 0x25, 0x71, 0xB5, 0xEB, 0x81, 0x19, 0x27, 0x52, 0x9C, 0x7A, 0xDC, 0xEB, 0xEE, 0xF7, 0xAF, 0x05, 0xBA, 0x7E, 0x88, 0x89, ++ 0x9F, 0xAB, 0xF8, 0x74, 0x0F, 0xCD, 0xD1, 0x27, 0x5B, 0x12, 0xF7, 0x2A, 0x75, 0xC6, 0xD0, 0x00, 0x56, 0x5C, 0x5A, 0xC8, 0x8F, 0xB1, 0xFD, 0x99, 0x5B, 0x84, 0xED, 0x38, 0x4D, 0x5D, 0x6A, 0x60, ++ 0x29, 0x37, 0x37, 0xD7, 0x2C, 0xC1, 0x09, 0x44, 0x36, 0x39, 0x71, 0xDA, 0x44, 0xD5, 0xEA, 0xE9, 0xE8, 0xB1, 0xE8, 0x0D, 0x75, 0x76, 0xC5, 0x0A, 0xAF, 0xF6, 0x7E, 0x42, 0x31, 0x96, 0xF3, 0x78, ++ 0x57, 0xD1, 0xD2, 0x35, 0xAB, 0x28, 0x39, 0xAE, 0x37, 0x79, 0xF9, 0xF2, 0xF9, 0xB7, 0x59, 0xFC, 0x52, 0xDA, 0xAE, 0xB8, 0x63, 0x7B, 0x8F, 0x4F, 0xC9, 0x0B, 0xD9, 0x4A, 0xDB, 0x6F, 0x57, 0x72, ++ 0x20, 0x82, 0xE9, 0x43, 0xD7, 0xCE, 0x3E, 0x73, 0x50, 0x1D, 0x8C, 0x93, 0xB5, 0x21, 0x2D, 0xEC, 0xE4, 0x95, 0x35, 0x53, 0x6E, 0xFC, 0xEA, 0xB8, 0xB8, 0x5E, 0xB2, 0xAA, 0x94, 0xCB, 0xE7, 0x7B, ++ 0xAA, 0xDF, 0x46, 0x58, 0x92, 0x01, 0xA3, 0xA8, 0xAC, 0xA4, 0x83, 0x9E, 0x51, 0x9B, 0x6F, 0xD0, 0xCC, 0x52, 0xEA, 0x58, 0xA8, 0xAC, 0x08, 0xDC, 0x15, 0xEE, 0xF4, 0x8E, 0xDB, 0x89, 0xA1, 0xFC, ++ 0x46, 0xE7, 0x13, 0x53, 0xFE, 0x73, 0xF6, 0x8E, 0x0F, 0x48, 0x55, 0xB7, 0xFF, 0x73, 0x27, 0xAE, 0x4B, 0xCB, 0xA0, 0x9D, 0xE0, 0x33, 0x53, 0xD4, 0x1E, 0xDE, 0x26, 0x78, 0x5A, 0x94, 0x49, 0x6A, ++ 0xCB, 0x4E, 0x74, 0x3B, 0xA0, 0x65, 0xD1, 0x79, 0x3F, 0xBE, 0x5B, 0x29, 0x3A, 0x77, 0x1C, 0xCB, 0x8B, 0x8D, 0x8B, 0xD2, 0x76, 0x77, 0xD5, 0xFF, 0xF7, 0x43, 0xF9, 0x49, 0x77, 0x21, 0x9D, 0x55, ++ 0x57, 0x35, 0xE5, 0xD0, 0xAC, 0xE1, 0x18, 0xC2, 0x57, 0x1F, 0xC6, 0x96, 0xAF, 0x1F, 0xB0, 0xA1, 0x97, 0x6A, 0x37, 0x85, 0xB0, 0x89, 0x61, 0x11, 0x7F, 0x19, 0x98, 0xB7, 0xE6, 0x1C, 0xF8, 0x14, ++ 0xFE, 0x91, 0xA8, 0xB8, 0x1D, 0x62, 0xE4, 0x8D, 0x93, 0xB0, 0x28, 0x0D, 0xBA, 0xBF, 0x18, 0xE1, 0x12, 0x12, 0x43, 0xBF, 0xF3, 0x7B, 0x5A, 0xF7, 0x1E, 0x29, 0xA3, 0x1B, 0x48, 0x4A, 0xDA, 0x4F, ++ 0x1F, 0xBC, 0x88, 0x30, 0x11, 0x27, 0x76, 0x60, 0xAE, 0xB4, 0x71, 0xB3, 0x09, 0xFA, 0x00, 0x32, 0x23, 0x5B, 0x3B, 0x2E, 0x2B, 0x2C, 0xAF, 0xCC, 0xC5, 0x44, 0x61, 0xB0, 0xB4, 0x5A, 0xE1, 0x5D, ++ 0x92, 0xAD, 0x61, 0xB6, 0x4C, 0x5F, 0x37, 0x4A, 0x23, 0x74, 0x44, 0xF9, 0x63, 0x1D, 0xE4, 0x3C, 0x0B, 0x67, 0x8D, 0x03, 0xB6, 0x4E, 0xA3, 0xF9, 0x9B, 0xBB, 0xD1, 0x79, 0x61, 0x15, 0x39, 0xFC, ++ 0x91, 0x69, 0x3B, 0x81, 0xE6, 0xA2, 0xF2, 0xFC, 0x81, 0x70, 0xE8, 0xBF, 0xD6, 0xD5, 0xB7, 0x8A, 0x5C, 0xD6, 0x44, 0x88, 0x1A, 0x67, 0xFD, 0x28, 0xAC, 0xDA, 0x74, 0x70, 0x58, 0x47, 0x27, 0x6C, ++ 0x16, 0xBD, 0xF0, 0x9E, 0xBE, 0xBB, 0x21, 0x8C, 0xC6, 0x89, 0xB4, 0x50, 0x85, 0x43, 0xC3, 0x9E, 0xA6, 0x56, 0x44, 0xA7, 0xF3, 0x3D, 0xF4, 0x7D, 0x32, 0x72, 0xA3, 0x7C, 0xA8, 0x30, 0x76, 0x7B, ++ 0x23, 0xF5, 0x52, 0xA1, 0xB3, 0x89, 0xF1, 0x4B, 0xE8, 0x71, 0xFF, 0x72, 0x59, 0xFB, 0x3A, 0x32, 0x93, 0x0F, 0x56, 0xDD, 0x42, 0x71, 0xF0, 0x21, 0xAA, 0xAC, 0xD7, 0xA2, 0xAC, 0x82, 0x03, 0xCF, ++ 0x69, 0xE9, 0x64, 0x30, 0xA1, 0x6A, 0x2F, 0x96, 0xC1, 0x1F, 0xD2, 0xCD, 0x44, 0xE0, 0x86, 0xE1, 0x16, 0x8A, 0x8C, 0x1A, 0x63, 0x7E, 0x23, 0x21, 0xF6, 0x0C, 0xA5, 0x93, 0x0C, 0x02, 0xF9, 0x2D, ++ 0xFF, 0x2D, 0x30, 0xAB, 0x10, 0x5A, 0xF8, 0x46, 0xB1, 0x6A, 0x90, 0xE2, 0xA7, 0x4D, 0xBC, 0x97, 0xDA, 0x40, 0xA1, 0x3F, 0x40, 0x5B, 0x71, 0x04, 0xBF, 0x2F, 0x22, 0xFC, 0xA4, 0x2E, 0x3A, 0x50, ++ 0x0A, 0x72, 0x7A, 0xE1, 0xEA, 0x24, 0x01, 0x21, 0x60, 0x16, 0xFE, 0x8B, 0xF0, 0xDD, 0xBA, 0xE6, 0x8E, 0xD8, 0x74, 0x17, 0xFA, 0x76, 0x0D, 0xBA, 0x07, 0xD8, 0x4C, 0x26, 0x9C, 0xF4, 0x2B, 0xBE, ++ 0xB3, 0x7D, 0x5B, 0x90, 0xEB, 0x23, 0x69, 0x76, 0xB8, 0x6F, 0x4D, 0x8F, 0x35, 0xE7, 0x82, 0x83, 0x7E, 0x32, 0xA1, 0x95, 0xF9, 0xCF, 0xD6, 0xC6, 0x73, 0x53, 0x6A, 0xA0, 0x43, 0x5B, 0x38, 0x0C, ++ 0x02, 0xD1, 0xB7, 0xB0, 0xDE, 0x3C, 0x47, 0x9F, 0xE6, 0xB5, 0xFE, 0x6C, 0xF9, 0x7C, 0x3B, 0xD7, 0x46, 0x10, 0xCF, 0x15, 0x06, 0xE5, 0x99, 0x86, 0xF3, 0x81, 0x46, 0xB9, 0xA8, 0x96, 0x3C, 0xAE, ++ 0x08, 0x00, 0x30, 0x75, 0xFF, 0x60, 0x7D, 0x47, 0x0E, 0x87, 0xA7, 0x2E, 0x8F, 0xFB, 0xC7, 0xE1, 0x38, 0x38, 0xDA, 0x93, 0xDC, 0x3A, 0x4B, 0x3E, 0x52, 0x34, 0x75, 0xCD, 0xC4, 0xE4, 0x8C, 0x2A, ++ 0x54, 0x5F, 0x30, 0xE5, 0x89, 0x24, 0x7C, 0x64, 0x62, 0x2F, 0xA1, 0x05, 0x59, 0xB7, 0x24, 0xBB, 0x5F, 0xE8, 0x73, 0xED, 0xDF, 0x78, 0x38, 0xE1, 0x83, 0x2A, 0xD2, 0x17, 0xD4, 0xE8, 0x0B, 0x58, ++ 0xB9, 0xFB, 0x39, 0xB6, 0x6C, 0xBE, 0x9F, 0x26, 0x48, 0x09, 0xEE, 0xD5, 0x94, 0x23, 0xF0, 0xA3, 0xCD, 0x3F, 0x00, 0xAD, 0xFC, 0x47, 0x42, 0xCE, 0x1B, 0x3C, 0xB6, 0x5B, 0x2B, 0xD2, 0xE3, 0x10, ++ 0x59, 0x50, 0x9A, 0xFC, 0x7E, 0x48, 0x36, 0xDF, 0x0A, 0xE6, 0xF9, 0xD5, 0xC0, 0x63, 0x30, 0x95, 0x3F, 0xA2, 0xBB, 0x6F, 0xD0, 0x18, 0x7A, 0x6C, 0xAB, 0x88, 0x14, 0xEE, 0x12, 0xD1, 0x4E, 0xBC, ++ 0x6D, 0xEF, 0xFC, 0x23, 0xE1, 0xC9, 0x01, 0x65, 0xE2, 0xE7, 0x78, 0x59, 0x45, 0xF1, 0x8B, 0xCC, 0x74, 0xD8, 0xB1, 0xC6, 0xAF, 0xA1, 0x5B, 0x32, 0x6C, 0x04, 0x7D, 0x94, 0x66, 0x8C, 0x03, 0x32, ++ 0xD1, 0x47, 0xAF, 0x57, 0x52, 0x17, 0x64, 0x52, 0xC7, 0x12, 0x20, 0xB0, 0xA4, 0x32, 0xD4, 0x89, 0x9B, 0x6C, 0xEA, 0xA5, 0x87, 0x59, 0x9C, 0xAC, 0xF0, 0x04, 0xBA, 0x12, 0xA9, 0x0B, 0x26, 0x06, ++ 0x21, 0x43, 0x06, 0xFA, 0x30, 0x0A, 0x4A, 0x13, 0xBF, 0x8F, 0x99, 0x4F, 0x46, 0xF5, 0xDF, 0x92, 0xE6, 0xD3, 0xBF, 0x47, 0x2C, 0xF7, 0x29, 0xFF, 0xF6, 0x66, 0xF2, 0x07, 0xEA, 0x71, 0xD5, 0x2C, ++ 0xF6, 0xF2, 0xB1, 0x9C, 0x87, 0xCE, 0xAF, 0x08, 0xCD, 0x44, 0x5D, 0x18, 0x4F, 0x89, 0x81, 0xCA, 0x28, 0xCB, 0xFE, 0xA0, 0x03, 0x06, 0xAC, 0x76, 0x8B, 0x47, 0x15, 0x42, 0xF3, 0x27, 0x48, 0x76, ++ 0x68, 0x4B, 0xCE, 0x7C, 0x17, 0xEB, 0xEC, 0x6C, 0xC6, 0xD7, 0xF9, 0x0E, 0xC1, 0x3D, 0xA9, 0x4C, 0xD7, 0xB4, 0xE9, 0x8E, 0x1C, 0xFA, 0xBA, 0x8F, 0x9C, 0xDD, 0xBF, 0x08, 0xCF, 0xD7, 0xDD, 0x5E, ++ 0x3A, 0x73, 0x25, 0x66, 0x36, 0x65, 0x98, 0x0D, 0x3F, 0x55, 0x59, 0x22, 0x60, 0x8A, 0x05, 0xD9, 0xDC, 0x20, 0x76, 0x69, 0x29, 0x41, 0x30, 0x66, 0xB3, 0xB1, 0xAF, 0x98, 0x44, 0x31, 0x34, 0x5F, ++ 0xD0, 0x12, 0x1D, 0x16, 0x42, 0xEA, 0xB5, 0x84, 0xF7, 0x47, 0x37, 0x3D, 0x08, 0xCE, 0x5B, 0x2E, 0x26, 0xE7, 0x6B, 0x51, 0xAB, 0x58, 0xE3, 0x9E, 0x6F, 0x9E, 0x6C, 0x4C, 0x33, 0xF1, 0x52, 0xE5, ++ 0x03, 0x7F, 0x7F, 0x52, 0x76, 0x0A, 0x98, 0x36, 0x94, 0x1D, 0x43, 0xF4, 0x3C, 0x2E, 0x8C, 0x34, 0x6E, 0x40, 0x4A, 0xF3, 0x51, 0x80, 0x13, 0x3C, 0x2C, 0x8B, 0x44, 0x03, 0x86, 0x98, 0xFB, 0xE6, ++ 0xE8, 0x44, 0xEB, 0xC9, 0x66, 0x57, 0xD5, 0xD3, 0x24, 0xCE, 0xB2, 0xCC, 0x38, 0xA4, 0xF2, 0xE3, 0xB0, 0x09, 0x38, 0x39, 0x3B, 0x05, 0x4E, 0x19, 0xA1, 0xAF, 0x2C, 0x7E, 0x2C, 0xBB, 0xC1, 0xC4, ++ 0x52, 0xB6, 0x9D, 0x02, 0xA4, 0xBF, 0x04, 0xEB, 0x58, 0x42, 0xAA, 0x6A, 0x0A, 0xF8, 0xFB, 0x9D, 0x85, 0xD7, 0x98, 0x5B, 0x9B, 0xB2, 0x3D, 0x86, 0x06, 0x24, 0xB4, 0xE4, 0x04, 0x7E, 0x14, 0x26, ++ 0xF7, 0x17, 0x76, 0x7E, 0x51, 0x5C, 0x3D, 0x99, 0xF4, 0xF3, 0xA1, 0x05, 0x66, 0x56, 0x23, 0x2A, 0x21, 0x1C, 0xC2, 0xC8, 0x07, 0xF1, 0xF9, 0xF9, 0x61, 0x1D, 0xC8, 0xAE, 0x50, 0x81, 0x94, 0xF7, ++ 0xD6, 0x18, 0x2E, 0xE3, 0xAE, 0x96, 0x71, 0xB3, 0x45, 0xD0, 0x23, 0x18, 0x94, 0x78, 0x6E, 0x70, 0x72, 0x42, 0xF0, 0x68, 0x80, 0x69, 0x5A, 0x3F, 0xA6, 0x26, 0x89, 0x15, 0x74, 0xFA, 0xEE, 0xEE, ++ 0x83, 0x39, 0xDE, 0xBE, 0x23, 0x0E, 0xE7, 0x6B, 0x82, 0xA9, 0xAE, 0x4F, 0x03, 0xD9, 0xCC, 0xA2, 0x8F, 0x3B, 0x9F, 0x2F, 0x06, 0xAC, 0x23, 0xE3, 0xD2, 0xCF, 0x76, 0xF0, 0x19, 0x50, 0x6F, 0xEC, ++ 0x5C, 0x6E, 0x99, 0x07, 0x58, 0x7F, 0xB3, 0xBF, 0x4C, 0x2B, 0xE6, 0x58, 0xC5, 0x6E, 0xD6, 0x31, 0x88, 0x46, 0x56, 0xD6, 0xC2, 0x0E, 0xE1, 0x0B, 0x78, 0xD8, 0xF2, 0xD8, 0x01, 0x82, 0x30, 0xCD, ++ 0xF9, 0x5E, 0xB8, 0x6E, 0x9C, 0xFD, 0xA2, 0xE1, 0x55, 0xBA, 0x33, 0x58, 0x12, 0xFC, 0x72, 0xEB, 0x88, 0x0B, 0xEA, 0x3A, 0x8C, 0x3A, 0x98, 0xCB, 0x56, 0x71, 0xE0, 0xE4, 0x03, 0x70, 0x4A, 0x55, ++ 0x33, 0x62, 0x5B, 0x3E, 0xFA, 0x5C, 0xD3, 0x6C, 0x93, 0xDA, 0x37, 0x77, 0x21, 0xBF, 0x43, 0x82, 0xA0, 0xD0, 0x11, 0x77, 0xBC, 0xC5, 0xBC, 0xB4, 0xB7, 0x08, 0x23, 0x32, 0xE3, 0xE5, 0x85, 0x1B, ++ 0x17, 0xF7, 0xB9, 0xD9, 0x10, 0xD2, 0x19, 0xEC, 0x5F, 0x98, 0xB9, 0xCE, 0x2E, 0xD2, 0x7F, 0x40, 0xB5, 0x72, 0x13, 0x8F, 0xE9, 0xA0, 0x3F, 0x15, 0x48, 0x65, 0x23, 0xB2, 0x9A, 0xA4, 0xC6, 0x07, ++ 0x60, 0x17, 0xEF, 0xD2, 0x70, 0x70, 0x56, 0x0A, 0xC6, 0x13, 0xB3, 0x1D, 0x76, 0xB9, 0x60, 0x07, 0xEA, 0x98, 0xD7, 0xB0, 0x1D, 0x9A, 0x92, 0x54, 0x0C, 0x6A, 0x03, 0x0C, 0x4D, 0x0B, 0x98, 0x50, ++ 0x8A, 0x14, 0x51, 0xE6, 0x48, 0x7F, 0x11, 0x2E, 0xF9, 0xE9, 0x05, 0xBA, 0x88, 0x92, 0x7A, 0xD6, 0x19, 0xEE, 0xEC, 0x6B, 0x58, 0xEE, 0xF0, 0x62, 0xE9, 0x1D, 0x35, 0x10, 0xB4, 0xED, 0xDA, 0xB2, ++ 0xE5, 0xF9, 0x15, 0x46, 0x70, 0xEA, 0x8C, 0xF0, 0x00, 0x4C, 0xA4, 0xE2, 0xCC, 0xB5, 0xCE, 0x6C, 0x18, 0x70, 0xDA, 0x6B, 0xD8, 0xFD, 0xDC, 0x36, 0x41, 0x03, 0x91, 0x08, 0x82, 0x23, 0xF1, 0x53, ++ 0xF6, 0x83, 0x97, 0x6B, 0xAB, 0x00, 0x87, 0xB2, 0xAF, 0x15, 0x7C, 0xA7, 0x89, 0x3E, 0x5C, 0x34, 0xF8, 0x38, 0xB2, 0x2A, 0xE6, 0x51, 0x4A, 0xB3, 0x81, 0xF4, 0x7A, 0x63, 0x3E, 0xC8, 0x9A, 0x2E, ++ 0x1E, 0x51, 0x11, 0x18, 0x75, 0xB3, 0xAE, 0x9A, 0xEB, 0x66, 0x7D, 0xC8, 0x38, 0x6D, 0xB8, 0x1F, 0x13, 0xFF, 0x8D, 0xF7, 0x38, 0xB1, 0x02, 0x15, 0xDA, 0x52, 0x21, 0x01, 0xEF, 0xB8, 0xAD, 0xC9, ++ 0xB1, 0x08, 0x75, 0xA4, 0x79, 0xB6, 0x47, 0x93, 0xB2, 0x4C, 0x67, 0x68, 0x41, 0xE3, 0x5C, 0x97, 0xA8, 0xE7, 0xEE, 0xBC, 0x6C, 0x51, 0x72, 0xCA, 0x88, 0x66, 0x1F, 0x2B, 0x62, 0x86, 0x46, 0x31, ++ 0x2A, 0x68, 0x8C, 0xCC, 0x12, 0x43, 0x7D, 0x70, 0x39, 0x0C, 0x3E, 0x16, 0x21, 0x92, 0x0E, 0x65, 0x53, 0x98, 0xFF, 0x9A, 0x7E, 0x53, 0x74, 0xDF, 0xEC, 0xE4, 0x00, 0x19, 0x5B, 0x6A, 0x43, 0x1C, ++ 0xDC, 0xC4, 0xB2, 0xF4, 0x4D, 0xAA, 0xC9, 0xBF, 0x91, 0x5E, 0x1B, 0x23, 0xA8, 0x5F, 0xED, 0x35, 0xE3, 0xC4, 0x3F, 0xCF, 0x02, 0x13, 0x04, 0x02, 0x10, 0x94, 0x83, 0x13, 0x48, 0x98, 0x37, 0x08, ++ 0x0F, 0x1D, 0x80, 0x30, 0x27, 0xB0, 0x98, 0x95, 0x11, 0xD0, 0x63, 0x16, 0x7B, 0x36, 0x58, 0xD3, 0xF9, 0x8C, 0x0D, 0x2C, 0xA8, 0x79, 0x76, 0x53, 0x49, 0x28, 0x98, 0xC8, 0x14, 0x0E, 0x21, 0x86, ++ 0x9C, 0x56, 0x3A, 0x5C, 0x03, 0xB7, 0x86, 0x07, 0x8F, 0x63, 0x4D, 0x75, 0xED, 0x2B, 0xDA, 0xD2, 0x74, 0x22, 0x51, 0xB6, 0x36, 0x48, 0x7D, 0x1A, 0xFF, 0xAB, 0xF3, 0x1E, 0x66, 0x46, 0x98, 0xC1, ++ 0x77, 0x3F, 0x4E, 0x4D, 0xE9, 0xF2, 0xC3, 0xA4, 0xFE, 0xE7, 0x58, 0xEA, 0x07, 0x34, 0x89, 0x46, 0x99, 0x48, 0xBC, 0x9B, 0x50, 0xDB, 0x60, 0xD0, 0x5D, 0x9F, 0x18, 0x31, 0x41, 0x48, 0x94, 0xC2, ++ 0x06, 0x19, 0x0E, 0xCD, 0xE8, 0xF2, 0x49, 0xBD, 0x43, 0x57, 0x7C, 0x8D, 0x40, 0xCA, 0x61, 0x1D, 0x23, 0xB6, 0xF7, 0x54, 0xCB, 0x06, 0xC6, 0x77, 0xC7, 0x1A, 0x77, 0x00, 0xCB, 0x8A, 0xF9, 0x30, ++ 0xC5, 0xFF, 0xDB, 0x55, 0x4C, 0xA6, 0xAB, 0xE6, 0xD0, 0x83, 0xEE, 0x1A, 0x5A, 0xBF, 0xAA, 0x27, 0xA6, 0xF3, 0x1A, 0x83, 0x02, 0xBF, 0xD5, 0x78, 0xBC, 0x52, 0x93, 0xBD, 0xA4, 0xC1, 0x84, 0xE7, ++ 0xD7, 0xBB, 0x58, 0x9F, 0x6D, 0xEA, 0x11, 0xC9, 0xF3, 0x9A, 0xB9, 0xCD, 0x09, 0x8A, 0x72, 0x81, 0x63, 0xD7, 0x96, 0x2B, 0x6A, 0x40, 0x06, 0xF2, 0x65, 0x27, 0x73, 0xD5, 0xD8, 0xCA, 0xDA, 0x35, ++ 0xFB, 0x07, 0xDD, 0x8D, 0x39, 0x2D, 0xF7, 0x07, 0x9D, 0x1D, 0x72, 0x1D, 0xFA, 0xEC, 0xFF, 0xAC, 0xDB, 0x80, 0x81, 0x42, 0xFB, 0xA4, 0xF3, 0xC9, 0xB5, 0xC3, 0x1C, 0x81, 0xBB, 0x58, 0xA9, 0xAA, ++ 0x30, 0x1F, 0x3D, 0x54, 0xEB, 0x4B, 0x0D, 0xBF, 0xF7, 0xF2, 0x67, 0x73, 0xB4, 0x56, 0xD5, 0xC0, 0x2F, 0x94, 0x25, 0x4E, 0xB7, 0x7E, 0x35, 0x3A, 0x68, 0x75, 0x3D, 0xCD, 0xC6, 0x2E, 0xC2, 0x3B, ++ 0xDD, 0x5D, 0x6B, 0xBA, 0x07, 0xDB, 0x3E, 0xAC, 0x51, 0xE6, 0x4C, 0x34, 0xB4, 0xB5, 0x34, 0x38, 0xBF, 0x7C, 0x6E, 0xF9, 0xC6, 0x23, 0x7B, 0x68, 0xF6, 0x98, 0xE4, 0x31, 0x50, 0x77, 0x23, 0xA2, ++ 0xE3, 0xBC, 0x43, 0xDD, 0xB6, 0xD9, 0x52, 0xA4, 0xF1, 0x2B, 0x43, 0xF7, 0x64, 0xF7, 0x5B, 0x5C, 0x6C, 0xB8, 0x82, 0xF7, 0xFE, 0xB7, 0x38, 0xAE, 0x3F, 0xB9, 0x1C, 0xBF, 0x49, 0x7E, 0x8E, 0x1D, ++ 0x1B, 0x1D, 0x59, 0x22, 0x79, 0xAF, 0x26, 0x16, 0x6C, 0xCA, 0x5A, 0xBD, 0xD2, 0x8E, 0x6E, 0xFF, 0x4F, 0xBA, 0x74, 0x60, 0x5E, 0xA8, 0x85, 0xCE, 0xEB, 0x5A, 0x01, 0xEA, 0xFD, 0xE3, 0x16, 0x93, ++ 0x9C, 0x35, 0xB8, 0x01, 0x0D, 0xD8, 0x57, 0x9A, 0x3A, 0x94, 0xFC, 0x68, 0x5E, 0xEB, 0x1F, 0x62, 0x83, 0xC5, 0xE6, 0xAD, 0x51, 0xE8, 0x2A, 0x93, 0x51, 0xC9, 0xD1, 0xA3, 0xFD, 0xB8, 0xB3, 0xD2, ++ 0x6D, 0x02, 0x93, 0xA8, 0xBC, 0xBF, 0x25, 0x6B, 0x5E, 0x5B, 0xB3, 0x31, 0x23, 0x3A, 0x30, 0xDA, 0xF0, 0xFE, 0x4A, 0xDE, 0x80, 0x82, 0xB3, 0x03, 0xC3, 0x9E, 0x55, 0x1D, 0xBC, 0xC3, 0x02, 0xBF, ++ 0x9B, 0x8A, 0xD3, 0x93, 0x3C, 0xB9, 0xAD, 0x90, 0x0A, 0x68, 0x25, 0x36, 0x7E, 0x15, 0x3E, 0x89, 0x6B, 0xC9, 0xAF, 0xDF, 0x8E, 0x40, 0x55, 0xA9, 0xD0, 0x9B, 0x85, 0x4C, 0xA8, 0x3D, 0x3A, 0xDF, ++ 0x6E, 0x00, 0x43, 0x75, 0xC4, 0xED, 0xE4, 0xEC, 0x5C, 0x57, 0x80, 0x5F, 0x79, 0xA2, 0x06, 0x03, 0x4C, 0x51, 0x40, 0xCC, 0x60, 0x27, 0x7E, 0xAA, 0x74, 0xCD, 0xEE, 0xE9, 0xF0, 0x49, 0x3E, 0x90, ++ 0x91, 0xC2, 0x29, 0x98, 0xB6, 0x13, 0x86, 0x3C, 0xE3, 0xAB, 0x77, 0x98, 0x39, 0x2E, 0x69, 0x67, 0x58, 0xC0, 0x32, 0x28, 0x6E, 0x10, 0x39, 0xBB, 0x13, 0x6C, 0x7C, 0x54, 0x30, 0xCB, 0xCD, 0x6D, ++ 0x99, 0x9A, 0xA1, 0xF7, 0xB2, 0x8B, 0xE6, 0x03, 0x32, 0xCE, 0x70, 0xF5, 0x6E, 0xE3, 0x1C, 0x9E, 0xAB, 0x2D, 0x1E, 0x41, 0x3F, 0x0E, 0x65, 0x59, 0xE1, 0xF5, 0xCC, 0x6A, 0x5A, 0xAA, 0x8A, 0xD2, ++ 0x64, 0x46, 0x88, 0x85, 0x52, 0x18, 0x1B, 0x8A, 0xA5, 0x30, 0xE4, 0xC6, 0x64, 0x68, 0x01, 0x08, 0x00, 0xAD, 0x5A, 0x94, 0xF3, 0xA0, 0xDD, 0x36, 0x9F, 0x1D, 0x5D, 0x16, 0xA8, 0x3A, 0x5F, 0xF7, ++ 0x49, 0xC5, 0xFE, 0xC8, 0x67, 0x2F, 0x92, 0xE5, 0xC8, 0x40, 0x0B, 0xD7, 0x67, 0x1F, 0x91, 0xFC, 0x06, 0x97, 0x21, 0x53, 0x14, 0xF0, 0x26, 0x51, 0x61, 0x42, 0xCA, 0xA6, 0x03, 0xED, 0x19, 0x11, ++ 0x5A, 0xAC, 0x9C, 0x32, 0x5D, 0x18, 0x34, 0x0E, 0x67, 0x62, 0xEF, 0xBA, 0xCF, 0xEF, 0x8E, 0x33, 0x13, 0x3C, 0x0F, 0x8F, 0x84, 0xBE, 0x6C, 0x1F, 0x95, 0xCB, 0x24, 0x45, 0x3D, 0xD8, 0x46, 0xEB, ++ 0xC6, 0x29, 0x5C, 0x7E, 0x7D, 0xF9, 0x44, 0xB0, 0x17, 0xF1, 0xEF, 0x8A, 0x47, 0x85, 0x22, 0x96, 0xF0, 0x91, 0x96, 0xD1, 0x51, 0xB7, 0x8D, 0x77, 0xC9, 0xC1, 0xDA, 0x7D, 0x99, 0x75, 0xE5, 0x89, ++ 0x83, 0xD3, 0x31, 0xE1, 0x78, 0x3F, 0xA6, 0x3B, 0xD9, 0x0C, 0x58, 0xC8, 0x2E, 0x4B, 0xFD, 0xDF, 0x8F, 0x0B, 0x4C, 0x37, 0xBB, 0xA4, 0x39, 0x07, 0x4F, 0x32, 0xE4, 0x1A, 0xBB, 0xCC, 0x90, 0xB5, ++ 0x6C, 0x6A, 0xD3, 0x6E, 0xC8, 0xAB, 0x1F, 0xB3, 0x34, 0xCE, 0x59, 0xDA, 0x0E, 0xEF, 0xBE, 0x46, 0x5B, 0xF9, 0x62, 0x67, 0x4D, 0x25, 0x81, 0x5F, 0x22, 0x10, 0x84, 0x86, 0x56, 0x93, 0xB0, 0x3A, ++ 0x44, 0xF6, 0x39, 0xF3, 0xA4, 0x7C, 0x36, 0xEE, 0xB2, 0x46, 0xD3, 0x90, 0x7D, 0x2F, 0x1D, 0x23, 0x78, 0xD7, 0xD7, 0x93, 0xD3, 0x95, 0xC3, 0x65, 0x52, 0x5A, 0x46, 0x5D, 0x9C, 0xE4, 0x15, 0x25, ++ 0x41, 0xE5, 0x94, 0xA7, 0x29, 0xAC, 0x62, 0xEE, 0x4E, 0x3A, 0xB5, 0x89, 0xE7, 0xB0, 0x01, 0xD5, 0xF2, 0x35, 0x4E, 0x3E, 0x30, 0xB1, 0x82, 0xBD, 0x69, 0xDC, 0x5A, 0x87, 0x7F, 0xF1, 0xCB, 0x87, ++ 0xFB, 0x9C, 0x25, 0x60, 0xBF, 0xE8, 0x2D, 0x3E, 0xDB, 0x06, 0x3B, 0xB7, 0x4D, 0x4B, 0x1F, 0x5C, 0xF3, 0x31, 0xB2, 0xD8, 0x4B, 0x45, 0x98, 0x8E, 0x04, 0xF7, 0x18, 0x32, 0xF0, 0x27, 0x2C, 0xD5, ++ 0xA8, 0x44, 0x91, 0x9E, 0xC3, 0x41, 0x3A, 0xE0, 0xE9, 0x9F, 0x0A, 0x8D, 0xAD, 0xC1, 0x87, 0xE9, 0xBD, 0x9A, 0x4D, 0xF9, 0xE1, 0x05, 0xD1, 0x81, 0x37, 0x60, 0xC4, 0xFA, 0x32, 0x95, 0xBC, 0x22, ++ 0x51, 0x7E, 0x89, 0x07, 0xD9, 0x85, 0xD2, 0x79, 0xEA, 0x25, 0x67, 0x4C, 0x78, 0x53, 0x18, 0x80, 0x5D, 0x1D, 0xBC, 0xD7, 0x97, 0x62, 0x46, 0x83, 0xC3, 0x63, 0xEA, 0xCA, 0xFE, 0x62, 0xC0, 0x78, ++ 0x83, 0x4A, 0x5B, 0x13, 0x78, 0x7F, 0xAF, 0x0A, 0xB3, 0xB4, 0xD2, 0x45, 0x71, 0x3B, 0x02, 0x22, 0x2A, 0x8A, 0x60, 0x56, 0x23, 0xA5, 0xE1, 0xE5, 0x0F, 0x5D, 0xBB, 0xAB, 0x95, 0x6A, 0xBC, 0xA5, ++ 0xF0, 0x64, 0x11, 0xD5, 0x97, 0xB0, 0xFB, 0x2D, 0x6D, 0xCC, 0x65, 0x0E, 0x77, 0x65, 0xF5, 0xE2, 0x3C, 0x4B, 0x8B, 0xC2, 0xB7, 0xAE, 0x0C, 0x88, 0x58, 0xB6, 0x50, 0xD1, 0x66, 0x89, 0x10, 0x38, ++ 0x54, 0x39, 0x2C, 0xB2, 0x41, 0x0E, 0xBD, 0x20, 0x8D, 0xF2, 0xE8, 0xD6, 0xF2, 0x21, 0x33, 0xCB, 0x63, 0xBC, 0x21, 0xE9, 0x69, 0xDC, 0x67, 0xA0, 0xE2, 0xEE, 0xDC, 0x42, 0x8E, 0x3B, 0x71, 0xC8, ++ 0x31, 0x89, 0x9B, 0x8D, 0x41, 0x22, 0xE5, 0x96, 0x69, 0xC1, 0x42, 0xBA, 0xB2, 0x0A, 0xFF, 0x7E, 0xD1, 0x89, 0x54, 0xB6, 0x52, 0x4B, 0x8C, 0x58, 0xD3, 0x91, 0xE3, 0x70, 0x61, 0xD1, 0xD5, 0x66, ++ 0xEA, 0x04, 0x42, 0x7E, 0x91, 0x44, 0x09, 0x5F, 0xDB, 0x1A, 0x28, 0xC1, 0xFD, 0x49, 0xCA, 0xD9, 0xFD, 0x55, 0xD7, 0x54, 0x7F, 0xF9, 0xD6, 0x0D, 0x54, 0xF7, 0x20, 0x5E, 0xBE, 0xD4, 0x96, 0xD1, ++ 0xE9, 0xDE, 0xDB, 0x8B, 0x28, 0xCE, 0xF8, 0x1D, 0x1A, 0xA5, 0x78, 0x05, 0x76, 0xD6, 0x7D, 0x70, 0x23, 0x21, 0xE5, 0x89, 0xD4, 0x4A, 0x60, 0xE2, 0x1F, 0xA0, 0x7B, 0xD9, 0x2D, 0xCF, 0xA1, 0x57, ++ 0xF1, 0x0D, 0xA6, 0x0F, 0xAD, 0x6E, 0x44, 0x28, 0x07, 0xD4, 0xE1, 0xCF, 0x5F, 0x7A, 0xBD, 0x0B, 0xB4, 0xBF, 0x1D, 0x7F, 0xF3, 0x6A, 0x0E, 0x63, 0x6E, 0x30, 0x0C, 0xD8, 0x57, 0x55, 0x33, 0x1B, ++ 0x22, 0x05, 0x97, 0x87, 0x23, 0xD9, 0xAC, 0xE6, 0xF2, 0xD5, 0x6F, 0xEC, 0x9D, 0x54, 0x59, 0x4C, 0xDB, 0x64, 0x3B, 0x8A, 0x9D, 0x8E, 0x6F, 0x76, 0x5C, 0xCE, 0xEF, 0x28, 0x19, 0xB3, 0xEF, 0x55, ++ 0xDE, 0x38, 0x9F, 0xDC, 0x00, 0x79, 0x27, 0xD2, 0x22, 0xF1, 0x1D, 0x22, 0x76, 0xDD, 0x18, 0xD4, 0xDF, 0x86, 0xE8, 0xE7, 0xE2, 0xA4, 0xD9, 0x94, 0x3D, 0xD8, 0x83, 0xD7, 0x0B, 0xC0, 0x45, 0xB6, ++ 0xAF, 0xAB, 0xED, 0xDF, 0x42, 0x18, 0xA2, 0x5A, 0xBF, 0x3F, 0xB0, 0xD4, 0x13, 0xD6, 0x18, 0x37, 0xC4, 0x5B, 0x86, 0xF9, 0xE6, 0xC6, 0x25, 0x53, 0x37, 0xC3, 0x8A, 0xF3, 0x5B, 0xE8, 0x2B, 0xE1, ++ 0xF0, 0x3A, 0xF0, 0x81, 0x1F, 0x2F, 0x1E, 0xEB, 0x25, 0x27, 0x6B, 0xF6, 0xAB, 0x27, 0xB9, 0x25, 0x64, 0x33, 0x4F, 0x06, 0x3A, 0x83, 0x18, 0xFC, 0x69, 0xC1, 0x34, 0x70, 0xDA, 0x6F, 0xD9, 0x47, ++ 0xB7, 0xEE, 0x2F, 0x67, 0xA7, 0x60, 0x5F, 0x6A, 0x57, 0x95, 0x3F, 0x96, 0xA3, 0x35, 0xB5, 0x50, 0x12, 0x63, 0x98, 0x67, 0x49, 0x02, 0x11, 0x88, 0x62, 0xF0, 0x86, 0x3F, 0x93, 0x13, 0xA3, 0x6A, ++ 0xD0, 0x57, 0x34, 0xE5, 0x1F, 0x54, 0x98, 0x62, 0x17, 0x0E, 0xC3, 0x69, 0x5A, 0x67, 0xE0, 0xC1, 0x6C, 0xDC, 0xDE, 0xA7, 0x7B, 0x39, 0x5D, 0x1F, 0xC4, 0xF8, 0xF1, 0x3A, 0x08, 0xBA, 0x8D, 0x4C, ++ 0xC4, 0x09, 0xCA, 0xBC, 0x9B, 0x15, 0xF1, 0x00, 0x7A, 0x4E, 0x3E, 0x4A, 0x71, 0x37, 0xB7, 0x00, 0xBE, 0xF5, 0xC3, 0x32, 0x97, 0x73, 0x5B, 0xE4, 0xC0, 0xAD, 0xB5, 0x4A, 0xA2, 0xDB, 0xE0, 0x96, ++ 0x2D, 0x16, 0x83, 0x55, 0x5C, 0xFC, 0xB8, 0x84, 0x17, 0xD7, 0x19, 0x4B, 0x7A, 0xDF, 0x09, 0xB3, 0xD2, 0xD5, 0xBA, 0xDE, 0xB1, 0xE8, 0x47, 0xAF, 0x62, 0x11, 0x65, 0x45, 0x4C, 0x4D, 0xA0, 0x0D, ++ 0x11, 0x85, 0x06, 0xE8, 0x25, 0xBD, 0x8F, 0x90, 0xDE, 0x0C, 0xC1, 0x1A, 0xFA, 0xD8, 0x5E, 0x08, 0xE9, 0x0E, 0xB5, 0xC4, 0x42, 0xD5, 0xB8, 0x5C, 0x9A, 0x9B, 0x86, 0xF2, 0x75, 0x8F, 0x4B, 0xB9, ++ 0xDA, 0x95, 0xA7, 0xB5, 0xB5, 0x85, 0xD6, 0x1A, 0x5C, 0x0E, 0x6E, 0x92, 0x0B, 0xBC, 0x43, 0x64, 0x97, 0xBB, 0x6C, 0x9A, 0xB8, 0x18, 0xAF, 0xCB, 0x5C, 0xE8, 0x14, 0x81, 0x09, 0xED, 0x99, 0x94, ++ 0x2E, 0x07, 0x90, 0xC5, 0xE2, 0x71, 0x4F, 0x4A, 0x88, 0x06, 0x74, 0xF4, 0xC6, 0x86, 0xF0, 0x7B, 0x48, 0xF5, 0xB8, 0x35, 0x9F, 0x9A, 0xF6, 0x3E, 0xB2, 0x05, 0xA3, 0x7B, 0xC0, 0xC6, 0x39, 0xDF, ++ 0x09, 0x3F, 0x88, 0xBB, 0x45, 0xCA, 0x1B, 0xA0, 0xDD, 0xD7, 0x1D, 0xB7, 0x4A, 0x22, 0xCE, 0x88, 0x4B, 0x39, 0x83, 0xD4, 0x54, 0xD5, 0x69, 0x56, 0x66, 0xED, 0x88, 0xDB, 0xB1, 0x66, 0xE9, 0x98, ++ 0x96, 0xEA, 0xBF, 0x67, 0x6B, 0xB8, 0x6D, 0x0E, 0xF3, 0xBD, 0xCF, 0x24, 0x1F, 0x50, 0xF2, 0x67, 0x2E, 0x3C, 0xD3, 0xBD, 0xAE, 0x60, 0xE6, 0xEC, 0xCD, 0xEF, 0x96, 0xDF, 0x63, 0x90, 0x88, 0xE4, ++ 0x45, 0x7A, 0xEE, 0xE7, 0x74, 0x6C, 0x24, 0xBD, 0x67, 0x6F, 0x3E, 0xFE, 0xA2, 0x7D, 0xDC, 0xDA, 0xC8, 0xA4, 0x1C, 0xA5, 0xBF, 0x9E, 0x03, 0xC8, 0xF5, 0xAF, 0xBB, 0xC8, 0x9B, 0x6D, 0x96, 0xBF, ++ 0x90, 0xD9, 0x4C, 0xFF, 0xD9, 0x1E, 0x3A, 0x8A, 0x07, 0xCC, 0xF0, 0x44, 0x93, 0xA5, 0xCB, 0x44, 0x1A, 0x9F, 0x59, 0x61, 0xEA, 0xC7, 0x1C, 0xEA, 0xB0, 0x4A, 0x78, 0xF7, 0x0B, 0x4F, 0x52, 0xF4, ++ 0x63, 0x09, 0x45, 0xAC, 0xC4, 0x5F, 0x4F, 0x83, 0xEE, 0x96, 0x7C, 0xF2, 0xB2, 0x37, 0x5D, 0x0F, 0xCE, 0x3A, 0x3F, 0x6E, 0x43, 0x96, 0x36, 0x14, 0xCC, 0xE0, 0x36, 0x03, 0xF0, 0x59, 0x7D, 0x30, ++ 0xE1, 0xD6, 0x75, 0xC0, 0x0F, 0x3C, 0xCA, 0xC4, 0x49, 0x21, 0xD2, 0x92, 0x28, 0xFF, 0x52, 0x96, 0xD4, 0x35, 0x25, 0x2F, 0x9C, 0xB3, 0x26, 0xA4, 0xD6, 0xFC, 0x34, 0xF0, 0x79, 0x89, 0xC1, 0x84, ++ 0x28, 0x86, 0x74, 0x59, 0xD1, 0x82, 0x95, 0xD2, 0xD6, 0x12, 0x10, 0x7F, 0x75, 0x35, 0xED, 0x27, 0xF6, 0x84, 0x6C, 0xA8, 0xD3, 0xB1, 0x73, 0x9D, 0x23, 0x45, 0xD2, 0x8B, 0xCC, 0xC4, 0xFD, 0x1A, ++ 0x63, 0x14, 0xFD, 0x47, 0x88, 0x9B, 0x53, 0xA1, 0xA7, 0x34, 0x63, 0x4B, 0xEC, 0x0C, 0x0A, 0x1C, 0x8A, 0x0A, 0x89, 0xAC, 0x66, 0xB0, 0xF4, 0xE5, 0x32, 0x8F, 0x76, 0x39, 0x2D, 0x01, 0x73, 0xE1, ++ 0x74, 0xEB, 0x8F, 0xA6, 0x0F, 0x86, 0xC9, 0x7F, 0x00, 0x20, 0xDC, 0xFA, 0x4E, 0x69, 0x94, 0xFC, 0x08, 0xFD, 0xCF, 0x40, 0x5A, 0x44, 0xB1, 0xC4, 0x8C, 0xC2, 0x1C, 0x51, 0xA0, 0x92, 0x81, 0x73, ++ 0x71, 0xF9, 0x6E, 0x64, 0xBD, 0x2B, 0x69, 0xBA, 0x79, 0xD7, 0xE4, 0xDD, 0x2C, 0x1F, 0x71, 0x8B, 0xF4, 0x56, 0x39, 0xCB, 0x45, 0x39, 0xE1, 0xF8, 0x9C, 0xF0, 0xE5, 0xEF, 0x25, 0x88, 0xE2, 0x5D, ++ 0xEB, 0x44, 0x10, 0x1D, 0x3C, 0x12, 0xE1, 0x4B, 0x99, 0x3C, 0x0A, 0xB3, 0x55, 0x61, 0x13, 0x82, 0x19, 0x59, 0xC6, 0xE9, 0xFC, 0x9A, 0xCC, 0x95, 0xBA, 0x17, 0x31, 0x4A, 0xC5, 0x6D, 0x2B, 0x26, ++ 0xA0, 0x39, 0x10, 0x69, 0x2A, 0xA4, 0xE1, 0x58, 0xF6, 0x81, 0xCB, 0xAA, 0x7C, 0x0F, 0xF8, 0x03, 0xD6, 0x66, 0x4B, 0x60, 0x9E, 0x5A, 0x4A, 0x25, 0x73, 0x58, 0x9F, 0xCD, 0x16, 0x8D, 0x17, 0x90, ++ 0x13, 0x32, 0x3E, 0x4B, 0x4F, 0x51, 0x53, 0x68, 0x6B, 0x74, 0x75, 0x78, 0x7C, 0xA2, 0xAF, 0xB6, 0xC4, 0xC5, 0xF4, 0xF8, 0x0D, 0x1D, 0x37, 0x46, 0x4D, 0x55, 0x57, 0x6A, 0x7B, 0x8C, 0xAC, 0xB2, ++ 0xC6, 0xC7, 0xC8, 0xD2, 0xEA, 0xF4, 0xF9, 0xFC, 0x18, 0x19, 0x20, 0x25, 0x27, 0x39, 0x5A, 0x5E, 0x90, 0xA4, 0xAF, 0xE8, 0xEF, 0xF2, 0xF8, 0xF9, 0x11, 0x29, 0x38, 0x68, 0x76, 0xAC, 0xAD, 0xBD, ++ 0xD6, 0xDA, 0xE1, 0xEB, 0xF3, 0x1B, 0x38, 0x5D, 0x67, 0x76, 0x81, 0x87, 0x8A, 0x91, 0x94, 0xAE, 0xC2, 0xD6, 0xD9, 0xDF, 0xFF, 0x01, 0x02, 0x1B, 0x2F, 0x34, 0x3B, 0x3F, 0x40, 0x58, 0x94, 0xAE, ++ 0xB1, 0xBD, 0xC5, 0xD5, 0xD7, 0x0A, 0x20, 0x23, 0x2D, 0x30, 0x3C, 0x65, 0x6C, 0x75, 0x76, 0x7E, 0x83, 0x90, 0xC2, 0xE7, 0xEB, 0x0C, 0x51, 0x64, 0x77, 0x88, 0xA4, 0xBB, 0xC1, 0xC7, 0xDB, 0xDC, ++ 0xE5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x28, 0x38, 0x45, 0x55, 0x65, 0x75, 0x81, 0x02, 0x10, 0x1C, 0x20, 0x18, 0x40, 0x08, 0x09, 0x06, 0x4C, 0x04, 0x04, ++ 0x02, 0x85, 0x00, 0x1D, 0xA0, 0x42, 0x9C, 0x48, 0x00, 0x81, 0x8C, 0x40, 0xC1, 0x42, 0x00, 0xC1, 0x0D, 0x09, 0x01, 0x94, 0xE8, 0x78, 0x5E, 0x1F, 0xF5, 0x65, 0x11, 0x03, ++ }, ++ }, ++ { ++ .name = "Dilithium Round 2, Level 5 (8-7) KAT 1", ++ .version = 0, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_87, ++ .rho_len = 32, ++ .rho = { ++ 0x4B, 0x62, 0x2D, 0xE1, 0x35, 0x01, 0x19, 0xC4, 0x5A, 0x9F, 0x2E, 0x2E, 0xF3, 0xDC, 0x5D, 0xF5, 0x0A, 0x75, 0x9D, 0x13, 0x8C, 0xDF, 0xBD, 0x64, 0xC8, 0x1C, 0xC7, 0xCC, 0x2F, 0x51, 0x33, 0x45, ++ }, ++ .seed_len = 32, ++ .seed = { ++ 0x13, 0x77, 0x46, 0xE7, 0x45, 0x56, 0x52, 0xAF, 0x6F, 0xB7, 0x64, 0x83, 0x32, 0x42, 0xF0, 0x64, 0xFA, 0xAA, 0xDD, 0x99, 0x3B, 0x49, 0xFE, 0x63, 0xBC, 0xDF, 0xA2, 0xC5, 0x5E, 0xD3, 0xEC, 0xD4, ++ }, ++ .tr_len = 48, ++ .tr = { ++ 0x83, 0x21, 0xD1, 0x46, 0x16, 0x74, 0x43, 0x38, 0x73, 0xC0, 0xDB, 0x53, 0x59, 0x75, 0xEA, 0xD8, 0x1F, 0x18, 0xBD, 0x73, 0x99, 0xE7, 0xAE, 0xC5, 0x4C, 0xA2, 0xF3, 0x61, 0x91, 0x83, 0xD0, 0xA9, ++ 0x89, 0x77, 0xFA, 0x2D, 0x99, 0x1C, 0x2C, 0x01, 0x8D, 0xBE, 0xDE, 0xBF, 0xBC, 0x8C, 0xAE, 0x66, ++ }, ++ .s1_len = 672, ++ .s1 = { ++ 0x1B, 0x86, 0x4D, 0x02, 0xB0, 0x0D, 0x92, 0x34, 0x12, 0x4C, 0xC8, 0x71, 0x93, 0xB0, 0x65, 0x8B, 0x16, 0x4C, 0xC0, 0xA4, 0x89, 0xC9, 0x46, 0x0C, 0x5C, 0x34, 0x44, 0x4A, 0x24, 0x10, 0xD4, 0xB4, ++ 0x81, 0x8C, 0x04, 0x32, 0xD3, 0x84, 0x00, 0x04, 0xC0, 0x91, 0x8C, 0x04, 0x29, 0xD1, 0x46, 0x91, 0x10, 0x91, 0x20, 0x19, 0x06, 0x24, 0x94, 0x14, 0x2E, 0x64, 0x48, 0x82, 0x0B, 0xA9, 0x90, 0x20, ++ 0x24, 0x0D, 0x11, 0xC2, 0x05, 0x20, 0xA7, 0x20, 0x98, 0x28, 0x91, 0x60, 0x48, 0x86, 0xD1, 0xA0, 0x44, 0x5B, 0x86, 0x0C, 0x21, 0x89, 0x4D, 0x04, 0x99, 0x08, 0xA4, 0xA4, 0x2C, 0xD0, 0x08, 0x52, ++ 0x42, 0x42, 0x26, 0x00, 0x31, 0x85, 0x50, 0x12, 0x92, 0x12, 0x91, 0x91, 0x02, 0x14, 0x6E, 0xE3, 0xB2, 0x0D, 0x41, 0x40, 0x68, 0xD8, 0x98, 0x10, 0x9B, 0x84, 0x69, 0x21, 0xB3, 0x05, 0x62, 0x16, ++ 0x68, 0x22, 0x19, 0x41, 0x44, 0x10, 0x4C, 0x49, 0x94, 0x41, 0x58, 0x46, 0x52, 0x0B, 0x09, 0x04, 0x10, 0x98, 0x29, 0x61, 0xB8, 0x01, 0x01, 0x19, 0x50, 0x23, 0x12, 0x49, 0xDB, 0x02, 0x41, 0x88, ++ 0x38, 0x66, 0xE4, 0x92, 0x65, 0x9A, 0xA0, 0x08, 0x62, 0x48, 0x2D, 0xC4, 0x94, 0x01, 0xD9, 0xA8, 0x69, 0x18, 0x10, 0x08, 0x4B, 0x14, 0x10, 0x24, 0x08, 0x8C, 0xC8, 0x36, 0x4D, 0x99, 0x20, 0x61, ++ 0x43, 0x32, 0x68, 0x11, 0x86, 0x48, 0xCB, 0x82, 0x88, 0xC8, 0x16, 0x71, 0x9C, 0xC6, 0x29, 0x63, 0x00, 0x6A, 0x4B, 0x14, 0x84, 0x23, 0xC3, 0x49, 0x1B, 0x11, 0x64, 0xDC, 0x92, 0x05, 0x60, 0x80, ++ 0x60, 0x22, 0xB3, 0x8C, 0x43, 0x08, 0x11, 0x8C, 0x22, 0x25, 0x41, 0x86, 0x08, 0x20, 0x40, 0x31, 0x8B, 0x12, 0x90, 0x18, 0xB2, 0x28, 0xC3, 0x08, 0x0C, 0x93, 0x00, 0x82, 0x13, 0x00, 0x80, 0x22, ++ 0x05, 0x8C, 0x12, 0x15, 0x08, 0x22, 0xA2, 0x25, 0xD1, 0x12, 0x68, 0x48, 0x14, 0x6D, 0x93, 0x26, 0x60, 0xDC, 0x02, 0x89, 0x1C, 0x35, 0x8D, 0x8C, 0x22, 0x82, 0x80, 0x98, 0x64, 0xC1, 0x30, 0x30, ++ 0x02, 0xB5, 0x21, 0x1C, 0x10, 0x30, 0x00, 0x82, 0x24, 0xCA, 0x88, 0x70, 0x4C, 0x08, 0x4E, 0x18, 0x16, 0x46, 0x90, 0x14, 0x62, 0xE3, 0xC6, 0x69, 0xD0, 0x30, 0x42, 0x62, 0x96, 0x91, 0xD3, 0xC4, ++ 0x8C, 0x41, 0x06, 0x92, 0xCA, 0xA0, 0x11, 0x21, 0x36, 0x81, 0x20, 0xA6, 0x2D, 0x20, 0x14, 0x89, 0xC1, 0x00, 0x42, 0x12, 0x43, 0x2C, 0xD3, 0xA0, 0x85, 0x64, 0x30, 0x8A, 0x59, 0x10, 0x28, 0xE3, ++ 0x98, 0x11, 0x24, 0xC9, 0x4D, 0x5C, 0x42, 0x00, 0x5C, 0xB0, 0x4C, 0x02, 0xB8, 0x2C, 0x60, 0xA6, 0x01, 0xA3, 0x14, 0x62, 0x83, 0x88, 0x50, 0x24, 0x08, 0x85, 0x92, 0x00, 0x2A, 0x1A, 0xA3, 0x21, ++ 0x04, 0xC9, 0x89, 0xA3, 0x14, 0x8D, 0xC1, 0x18, 0x0E, 0xCA, 0x48, 0x24, 0x90, 0xA0, 0x8C, 0x13, 0x09, 0x90, 0xA3, 0x48, 0x12, 0x61, 0x30, 0x71, 0x50, 0x86, 0x41, 0x13, 0x11, 0x80, 0xC8, 0x88, ++ 0x24, 0x1C, 0x99, 0x61, 0x0A, 0x83, 0x64, 0x12, 0xB8, 0x4D, 0xC0, 0x12, 0x80, 0x1B, 0x08, 0x0C, 0x84, 0x82, 0x01, 0xC0, 0x00, 0x0C, 0x03, 0x94, 0x01, 0x04, 0x44, 0x68, 0x00, 0x25, 0x71, 0x5B, ++ 0x38, 0x71, 0x0B, 0xB3, 0x4C, 0x04, 0xB4, 0x25, 0x83, 0x30, 0x44, 0x60, 0xA2, 0x51, 0x5C, 0xC0, 0x48, 0xA3, 0x30, 0x6A, 0x9B, 0x10, 0x4D, 0x24, 0x24, 0x82, 0xD9, 0x86, 0x44, 0x10, 0x00, 0x64, ++ 0x1B, 0x31, 0x6D, 0x0A, 0x20, 0x25, 0x41, 0xC0, 0x71, 0xA4, 0x12, 0x91, 0x0C, 0x21, 0x6C, 0xA2, 0x86, 0x61, 0x13, 0xB9, 0x28, 0xC2, 0x14, 0x52, 0x04, 0x29, 0x30, 0x1C, 0xB3, 0x04, 0x02, 0x10, ++ 0x8E, 0x44, 0x26, 0x65, 0x20, 0x48, 0x8E, 0x1A, 0xC0, 0x29, 0x02, 0xB9, 0x30, 0xE4, 0x22, 0x8E, 0x19, 0xC5, 0x4D, 0x04, 0xB2, 0x8D, 0xDC, 0xB0, 0x0D, 0x53, 0x16, 0x72, 0x42, 0xB6, 0x70, 0x60, ++ 0x32, 0x32, 0xCA, 0xC2, 0x0C, 0x1C, 0x19, 0x4D, 0x11, 0xA7, 0x2C, 0x23, 0x31, 0x46, 0xA1, 0x82, 0x0D, 0x04, 0x10, 0x64, 0xA1, 0x02, 0x31, 0xE3, 0x04, 0x44, 0x22, 0x37, 0x6A, 0x1C, 0x87, 0x2C, ++ 0x1A, 0x86, 0x49, 0x9A, 0x48, 0x8E, 0xA0, 0x96, 0x90, 0x0B, 0xB7, 0x64, 0xE2, 0x48, 0x8A, 0xE1, 0x80, 0x08, 0x22, 0x14, 0x11, 0x0A, 0x05, 0x86, 0x41, 0x34, 0x0D, 0x00, 0xB0, 0x40, 0xCC, 0x32, ++ 0x0A, 0x4C, 0x36, 0x4E, 0x22, 0xC5, 0x29, 0x84, 0x48, 0x70, 0x00, 0x84, 0x81, 0xE1, 0x10, 0x85, 0xDC, 0x30, 0x29, 0xE2, 0x38, 0x2E, 0x91, 0x40, 0x81, 0x04, 0x90, 0x64, 0x9A, 0xB0, 0x01, 0x12, ++ 0xB5, 0x04, 0x8C, 0x34, 0x31, 0x21, 0x00, 0x4E, 0xD3, 0x28, 0x68, 0x23, 0xC9, 0x4D, 0xD3, 0x16, 0x8E, 0x21, 0x91, 0x90, 0x12, 0x87, 0x29, 0x23, 0xA7, 0x48, 0x04, 0xC0, 0x81, 0x08, 0x26, 0x09, ++ }, ++ .s2_len = 768, ++ .s2 = { ++ 0x48, 0x32, 0x46, 0x09, 0x10, 0x4D, 0x04, 0x05, 0x70, 0x59, 0x92, 0x20, 0x59, 0x44, 0x0A, 0x58, 0x42, 0x65, 0x91, 0x34, 0x72, 0x14, 0x23, 0x6D, 0x8C, 0x38, 0x2D, 0x80, 0x92, 0x69, 0x21, 0x90, ++ 0x6D, 0x10, 0xC0, 0x50, 0x12, 0x86, 0x49, 0xC2, 0xB2, 0x40, 0x9B, 0x34, 0x90, 0x5B, 0x08, 0x8A, 0x98, 0x44, 0x68, 0xDB, 0x22, 0x71, 0xC3, 0x34, 0x51, 0x09, 0xC4, 0x71, 0x4A, 0x82, 0x04, 0x94, ++ 0x24, 0x02, 0x1A, 0x36, 0x88, 0x4A, 0x48, 0x02, 0x91, 0x02, 0x6E, 0x8A, 0x22, 0x2C, 0x61, 0xA2, 0x80, 0x20, 0x99, 0x28, 0x54, 0x14, 0x31, 0x22, 0x31, 0x6C, 0x0C, 0xB1, 0x21, 0xA3, 0x08, 0x71, ++ 0x88, 0x34, 0x22, 0xD3, 0x44, 0x6C, 0x02, 0x44, 0x0A, 0x8A, 0x80, 0x71, 0x80, 0x14, 0x6C, 0x9B, 0x42, 0x50, 0xC3, 0x34, 0x72, 0xC9, 0xA2, 0x90, 0x58, 0x44, 0x71, 0x43, 0x00, 0x00, 0x44, 0x34, ++ 0x0D, 0xD3, 0xC8, 0x8C, 0xA1, 0x26, 0x70, 0x41, 0xC2, 0x24, 0x03, 0x35, 0x52, 0x58, 0xB2, 0x71, 0x09, 0x43, 0x4C, 0x1A, 0xB4, 0x91, 0xDA, 0xC6, 0x85, 0x89, 0xC6, 0x91, 0x23, 0x24, 0x8A, 0x40, ++ 0x34, 0x4D, 0x19, 0x15, 0x84, 0x14, 0x48, 0x8D, 0xD3, 0x30, 0x20, 0x80, 0xC8, 0x61, 0x93, 0x38, 0x0D, 0x88, 0x26, 0x8E, 0x12, 0x47, 0x21, 0x21, 0x19, 0x26, 0x09, 0x42, 0x64, 0x19, 0xA0, 0x84, ++ 0x02, 0xC0, 0x70, 0x88, 0x98, 0x29, 0xC0, 0x00, 0x2A, 0x53, 0x22, 0x85, 0x90, 0x08, 0x8D, 0xD0, 0x30, 0x40, 0x1C, 0x13, 0x0C, 0x00, 0x86, 0x90, 0x62, 0x28, 0x32, 0x1C, 0x27, 0x20, 0x49, 0x42, ++ 0x22, 0x8A, 0x02, 0x29, 0xCB, 0xC0, 0x49, 0x44, 0x00, 0x4E, 0x11, 0x19, 0x8D, 0x13, 0x07, 0x72, 0x60, 0x86, 0x04, 0x5A, 0x28, 0x52, 0x88, 0xA4, 0x71, 0x0A, 0xB5, 0x31, 0x12, 0x21, 0x04, 0x9C, ++ 0x28, 0x81, 0x00, 0x35, 0x6C, 0x64, 0x34, 0x0A, 0x14, 0x92, 0x71, 0xE3, 0x10, 0x72, 0x00, 0x96, 0x4C, 0x24, 0x43, 0x45, 0xCA, 0x24, 0x2C, 0x5B, 0x34, 0x30, 0xA0, 0x96, 0x24, 0x14, 0x29, 0x89, ++ 0x1B, 0x08, 0x01, 0x80, 0xC6, 0x8C, 0x12, 0x15, 0x71, 0x13, 0x16, 0x44, 0x12, 0xB0, 0x49, 0x4A, 0x00, 0x91, 0x10, 0x80, 0x08, 0x93, 0xB0, 0x40, 0xCC, 0xB6, 0x01, 0x89, 0xC8, 0x20, 0xC9, 0xC2, ++ 0x84, 0x8B, 0xB8, 0x08, 0x18, 0x96, 0x2D, 0x1B, 0x11, 0x32, 0x83, 0xA6, 0x69, 0x11, 0x07, 0x45, 0x81, 0x14, 0x31, 0x0C, 0x36, 0x4A, 0x0A, 0x01, 0x82, 0x51, 0xA2, 0x10, 0xA3, 0x00, 0x52, 0x44, ++ 0x28, 0x45, 0x60, 0x12, 0x8D, 0x80, 0x06, 0x64, 0x18, 0xC2, 0x2D, 0x13, 0x93, 0x24, 0x1A, 0x20, 0x68, 0xCB, 0xB0, 0x0D, 0x58, 0xB0, 0x31, 0x94, 0x44, 0x8A, 0xC2, 0x36, 0x06, 0x90, 0x80, 0x64, ++ 0x61, 0x92, 0x81, 0x98, 0xB0, 0x04, 0x93, 0x12, 0x21, 0xA0, 0xB0, 0x25, 0x22, 0x19, 0x69, 0x1B, 0x29, 0x8D, 0xC2, 0x44, 0x4E, 0xD2, 0x14, 0x04, 0xA1, 0x90, 0x0D, 0x4C, 0x28, 0x26, 0x0C, 0x07, ++ 0x8C, 0x83, 0x30, 0x50, 0xE2, 0xC6, 0x29, 0x5A, 0x94, 0x00, 0x12, 0x15, 0x00, 0xC9, 0x04, 0x04, 0xC8, 0x42, 0x4A, 0xC4, 0x10, 0x61, 0xC9, 0xC0, 0x31, 0xCC, 0x00, 0x2E, 0xC0, 0x22, 0x8A, 0x18, ++ 0x05, 0x92, 0x50, 0x84, 0x41, 0x21, 0x81, 0x28, 0x13, 0x18, 0x70, 0xD1, 0x00, 0x11, 0x03, 0x22, 0x06, 0x04, 0x91, 0x65, 0x14, 0x84, 0x4D, 0x62, 0x28, 0x8E, 0x23, 0x96, 0x2C, 0xC3, 0x84, 0x30, ++ 0x0B, 0x21, 0x4E, 0x18, 0x27, 0x2A, 0x42, 0x16, 0x21, 0x62, 0xB8, 0x31, 0x22, 0x43, 0x40, 0x94, 0x22, 0x2D, 0x11, 0x06, 0x62, 0x80, 0x02, 0x85, 0x44, 0x86, 0x08, 0x41, 0x46, 0x41, 0x40, 0xC8, ++ 0x4C, 0x5C, 0xC6, 0x50, 0xE1, 0x08, 0x01, 0x0A, 0x21, 0x80, 0x9B, 0xA0, 0x49, 0x19, 0xB7, 0x24, 0x19, 0x18, 0x66, 0x01, 0x81, 0x6D, 0x40, 0xC0, 0x69, 0x52, 0x24, 0x6C, 0x02, 0xA4, 0x00, 0x40, ++ 0xB8, 0x50, 0x18, 0x37, 0x65, 0xD1, 0x90, 0x84, 0x21, 0x03, 0x25, 0x41, 0x34, 0x45, 0x60, 0x94, 0x41, 0xDA, 0xC0, 0x84, 0x81, 0x22, 0x6A, 0xC2, 0x48, 0x52, 0x1B, 0x36, 0x2A, 0xE3, 0x28, 0x8A, ++ 0x59, 0xA6, 0x25, 0x03, 0xB4, 0x90, 0x0B, 0xB5, 0x29, 0xC0, 0x44, 0x04, 0x89, 0xB0, 0x2C, 0x83, 0x18, 0x22, 0x20, 0xB9, 0x68, 0xD4, 0x42, 0x62, 0x4A, 0xA2, 0x2C, 0x01, 0x12, 0x4E, 0xCC, 0x48, ++ 0x80, 0xD3, 0x96, 0x09, 0x02, 0xC6, 0x64, 0x81, 0x32, 0x29, 0x02, 0x84, 0x0C, 0x1B, 0xA1, 0x2D, 0x24, 0x23, 0x09, 0x88, 0x90, 0x25, 0xC8, 0xB6, 0x69, 0x54, 0xB2, 0x25, 0xDC, 0xA6, 0x2C, 0x09, ++ 0x45, 0x46, 0x88, 0xB6, 0x91, 0x14, 0x87, 0x28, 0x18, 0xC7, 0x2D, 0x1A, 0x85, 0x05, 0x4C, 0x14, 0x82, 0xDB, 0x14, 0x01, 0x20, 0x44, 0x6D, 0x4B, 0x28, 0x2E, 0x8C, 0x00, 0x29, 0x13, 0x41, 0x84, ++ 0x19, 0x13, 0x8D, 0x00, 0x94, 0x8D, 0x98, 0x82, 0x29, 0x04, 0x23, 0x4E, 0xC1, 0xA2, 0x28, 0x12, 0xC4, 0x70, 0x8B, 0xA8, 0x09, 0xDA, 0x08, 0x65, 0x62, 0x10, 0x81, 0x20, 0x03, 0x8A, 0x80, 0x34, ++ 0x4A, 0x20, 0xC9, 0x88, 0x22, 0x94, 0x11, 0xC8, 0x92, 0x89, 0xD4, 0xC4, 0x41, 0xA1, 0xB4, 0x84, 0x93, 0x02, 0x89, 0x12, 0x23, 0x41, 0x13, 0xB7, 0x25, 0x49, 0x36, 0x2A, 0x0C, 0xB3, 0x40, 0x49, ++ 0x36, 0x70, 0x10, 0x41, 0x00, 0x19, 0xB7, 0x09, 0x22, 0x39, 0x8D, 0x63, 0x40, 0x80, 0xA3, 0x94, 0x28, 0x90, 0x04, 0x41, 0x40, 0x18, 0x89, 0x12, 0x47, 0x61, 0x83, 0x12, 0x4E, 0x1A, 0x48, 0x2E, ++ }, ++ .t0_len = 3584, ++ .t0 = { ++ 0x75, 0x48, 0xEF, 0x27, 0x75, 0xAA, 0x88, 0x5A, 0xB6, 0x93, 0x11, 0x4A, 0x06, 0x0F, 0x01, 0xDC, 0x38, 0x75, 0xEB, 0x2F, 0x16, 0x52, 0xD4, 0x2F, 0x8B, 0x5F, 0x3C, 0xC2, 0xBC, 0xAB, 0x20, 0x9A, ++ 0xD5, 0xFD, 0x34, 0x18, 0xAC, 0x20, 0x93, 0x0D, 0x7B, 0xA9, 0x80, 0xCB, 0xCC, 0xA8, 0x4C, 0x5F, 0x2F, 0xEE, 0x1F, 0x3F, 0x9B, 0x28, 0x19, 0x28, 0x74, 0x9C, 0x2E, 0x1B, 0xF1, 0x7C, 0x8A, 0x14, ++ 0x04, 0x6B, 0x24, 0xFA, 0x37, 0x08, 0x83, 0x9B, 0xB4, 0xEE, 0x75, 0x8C, 0xD2, 0xEA, 0x55, 0x64, 0xA2, 0x0F, 0x21, 0xA2, 0x3B, 0xAE, 0x26, 0xDE, 0x9F, 0x9B, 0xC0, 0x42, 0xF9, 0xD4, 0xF2, 0x59, ++ 0xBB, 0x1A, 0xDD, 0x41, 0x80, 0xF6, 0x73, 0x5D, 0xC5, 0xD3, 0x26, 0x1D, 0xF9, 0xD0, 0xA3, 0x1F, 0xAB, 0x24, 0xED, 0x65, 0x47, 0x32, 0x73, 0xF7, 0x63, 0xD7, 0xBC, 0x48, 0x30, 0xCE, 0xE9, 0xA1, ++ 0x5E, 0x8F, 0xAE, 0x6E, 0x06, 0x85, 0x34, 0x56, 0x3D, 0x34, 0x71, 0x88, 0xAA, 0xD7, 0xBC, 0x6B, 0xD6, 0x12, 0x68, 0x49, 0x00, 0x44, 0xEB, 0x30, 0x0B, 0x47, 0xA0, 0xCD, 0x78, 0xBC, 0x26, 0x31, ++ 0x41, 0xAA, 0xEB, 0x3B, 0x96, 0xF4, 0x08, 0x9B, 0x38, 0x5B, 0x46, 0x53, 0x37, 0x29, 0xDE, 0xAA, 0x68, 0x4E, 0x01, 0xAB, 0xD6, 0xE8, 0x9A, 0xFF, 0xF3, 0xBD, 0xAE, 0x91, 0xD4, 0x04, 0x5E, 0x0F, ++ 0x4A, 0xED, 0x84, 0xD3, 0x18, 0xC6, 0x83, 0x45, 0x7B, 0x88, 0xEA, 0x50, 0x1F, 0xAA, 0x75, 0x13, 0x23, 0x35, 0x07, 0xE3, 0xE7, 0x77, 0xD5, 0xFD, 0x43, 0x48, 0xA9, 0xAB, 0xBC, 0xB8, 0x41, 0x0A, ++ 0x47, 0x81, 0xD9, 0x45, 0x60, 0x83, 0x0E, 0x3A, 0x61, 0xE6, 0xB3, 0xE0, 0xB8, 0x09, 0xE9, 0x34, 0x47, 0xD3, 0x74, 0x08, 0xD3, 0x1B, 0x90, 0x7F, 0x72, 0xBE, 0xAE, 0x2F, 0x66, 0x3B, 0xE2, 0xC7, ++ 0xFF, 0xF3, 0xE0, 0x7E, 0xF3, 0xB8, 0x5D, 0x69, 0xA4, 0xF8, 0x7C, 0x4F, 0x2F, 0x07, 0xF7, 0xED, 0x77, 0x69, 0xF9, 0x19, 0xA2, 0xBD, 0xEE, 0xE1, 0x7E, 0x65, 0xA7, 0x30, 0x9D, 0xE5, 0x9D, 0x2B, ++ 0x0F, 0xA0, 0x5A, 0xB4, 0xAA, 0x92, 0xBA, 0xC3, 0x52, 0xD1, 0xE3, 0x97, 0x7E, 0xB8, 0xE4, 0x66, 0x22, 0x6D, 0x5A, 0xCE, 0x95, 0x51, 0x05, 0x8C, 0x8E, 0xC4, 0x67, 0x7D, 0x03, 0x95, 0xC2, 0x88, ++ 0xE2, 0xFE, 0xC4, 0xAA, 0x85, 0x46, 0x18, 0xED, 0x25, 0xFF, 0xA9, 0x2E, 0x59, 0xBD, 0xD0, 0xAB, 0x72, 0x50, 0x34, 0x58, 0xA8, 0x89, 0x79, 0x81, 0x68, 0x8A, 0xB5, 0x4E, 0x92, 0x8D, 0x11, 0x1E, ++ 0x7D, 0x62, 0x19, 0x27, 0x57, 0xA5, 0xA3, 0xFC, 0x5C, 0xB6, 0xBC, 0x2A, 0x89, 0xC2, 0x8D, 0x40, 0x41, 0x04, 0x4C, 0x0E, 0x75, 0x04, 0x07, 0xBB, 0x05, 0xFE, 0xF1, 0xF6, 0xF4, 0x59, 0xED, 0x35, ++ 0x72, 0xB2, 0x69, 0x70, 0xF8, 0x3C, 0xDF, 0x6D, 0x88, 0x62, 0x9D, 0x43, 0xEF, 0x95, 0x5E, 0x85, 0x13, 0x5C, 0x13, 0x8A, 0x67, 0x36, 0xAC, 0x4E, 0xB1, 0xD3, 0x48, 0x1F, 0xCD, 0x14, 0x06, 0x4B, ++ 0x03, 0x45, 0x81, 0x04, 0x6F, 0x47, 0x57, 0xA8, 0x4F, 0x6F, 0x36, 0x7C, 0x31, 0x58, 0xCE, 0x87, 0xD6, 0x59, 0x9B, 0xEB, 0x20, 0xA9, 0x20, 0xCD, 0xEE, 0xF8, 0xD6, 0xCC, 0x12, 0xB7, 0xD9, 0x50, ++ 0x15, 0xED, 0x10, 0xD4, 0xA9, 0xB2, 0x80, 0xEE, 0x82, 0x61, 0xC9, 0xD9, 0x58, 0x3E, 0xC3, 0xCF, 0xCB, 0x31, 0xAC, 0x4F, 0x6B, 0x99, 0x3B, 0xF7, 0xC3, 0xE4, 0x49, 0x2B, 0xF9, 0x82, 0xA2, 0x8D, ++ 0x54, 0x44, 0x5B, 0x76, 0x1B, 0xDD, 0x7B, 0x6D, 0x7E, 0x53, 0x78, 0x70, 0x9F, 0xCD, 0xDB, 0x00, 0x18, 0x1A, 0xC3, 0xE9, 0x54, 0xA5, 0x5C, 0xCA, 0x5F, 0xE5, 0x24, 0x4A, 0x7B, 0xD7, 0xDA, 0x86, ++ 0xC6, 0xA5, 0x09, 0x01, 0xEB, 0xC6, 0xBC, 0xBD, 0xF3, 0xC1, 0xBD, 0x5A, 0x8A, 0xB4, 0x86, 0xAF, 0x90, 0xC2, 0x35, 0xC8, 0xCF, 0xA1, 0xD7, 0x72, 0xD3, 0x15, 0xA2, 0xCA, 0x08, 0x3A, 0x9C, 0x58, ++ 0x28, 0xB6, 0x87, 0xC9, 0x86, 0x07, 0xAE, 0xD4, 0xFD, 0xE6, 0x4E, 0x17, 0x2C, 0x35, 0xC0, 0x5A, 0x8B, 0xF5, 0xB2, 0xF4, 0x84, 0xDD, 0x47, 0xD9, 0x6D, 0x9D, 0xC7, 0xB7, 0x76, 0x56, 0xFD, 0x9F, ++ 0x8B, 0xA3, 0x9A, 0xB5, 0xEB, 0x46, 0x28, 0x9A, 0x3E, 0x95, 0x30, 0x25, 0x6A, 0x2E, 0x05, 0x6A, 0xE0, 0x05, 0xA7, 0xCD, 0xEC, 0x89, 0x5D, 0xD3, 0x20, 0xDE, 0x82, 0xA1, 0xE1, 0x3A, 0x25, 0x07, ++ 0x8B, 0xCE, 0xA8, 0x38, 0x8F, 0x22, 0x04, 0xB5, 0x38, 0x1D, 0xB8, 0xC9, 0xB2, 0x4D, 0xAA, 0x79, 0x3D, 0x8B, 0x94, 0x84, 0x43, 0xDC, 0xF3, 0x32, 0x84, 0xA4, 0x37, 0x1E, 0x10, 0x1C, 0xF6, 0xE3, ++ 0x04, 0x1F, 0xC5, 0x41, 0xFF, 0x18, 0xD1, 0xE4, 0xC6, 0x72, 0x9E, 0x44, 0xB9, 0xBA, 0xCA, 0x61, 0xF4, 0x7E, 0xD5, 0x94, 0x93, 0x19, 0x6C, 0xFF, 0xEA, 0x45, 0x8C, 0xF2, 0x27, 0xCF, 0x84, 0x85, ++ 0x55, 0xCB, 0x92, 0x1C, 0xAB, 0x40, 0xEB, 0xF6, 0x66, 0xD7, 0xA9, 0xA7, 0x0A, 0xC7, 0x04, 0x6A, 0x60, 0x63, 0x45, 0x16, 0x1F, 0x36, 0x55, 0x87, 0xC1, 0xC0, 0x5F, 0x84, 0x5A, 0x8C, 0x39, 0x57, ++ 0xF1, 0xC8, 0x76, 0x4F, 0x29, 0xF7, 0xA8, 0xFC, 0x56, 0x03, 0xA0, 0x9E, 0x10, 0xF6, 0x82, 0xAF, 0xB3, 0x4E, 0xDE, 0xB3, 0xEA, 0xC5, 0x77, 0xDA, 0x3F, 0x94, 0xD0, 0xBF, 0x15, 0x3C, 0xB6, 0xC3, ++ 0xAF, 0xDD, 0x69, 0xA4, 0xCA, 0xF2, 0xC8, 0xD3, 0x1D, 0x09, 0x0B, 0xD3, 0x08, 0xD7, 0x12, 0x50, 0x90, 0x63, 0x27, 0x37, 0xC6, 0xAC, 0xE8, 0x6A, 0x3D, 0x8C, 0xAC, 0xBD, 0xCF, 0x8E, 0xAB, 0x94, ++ 0x5C, 0x07, 0xE6, 0x4E, 0x8E, 0x08, 0x42, 0xBA, 0xCE, 0xCA, 0xBA, 0x6B, 0x31, 0xF5, 0x8C, 0x96, 0xD2, 0x7A, 0x15, 0xF4, 0xDE, 0xAF, 0x85, 0x33, 0x5B, 0xB8, 0x3E, 0xFB, 0x83, 0x39, 0x02, 0x9D, ++ 0xDC, 0xF2, 0xC2, 0xD9, 0x3D, 0x93, 0x57, 0x02, 0xDA, 0x86, 0x65, 0xE4, 0xC0, 0xE1, 0xC3, 0xFD, 0x4F, 0xF0, 0x44, 0x2A, 0xD5, 0xE8, 0x92, 0xD8, 0x96, 0x95, 0x29, 0x37, 0xA2, 0xC2, 0xC7, 0x7C, ++ 0x50, 0x69, 0x8E, 0x13, 0x31, 0x4B, 0xAE, 0x4A, 0x12, 0x25, 0x97, 0x26, 0x7F, 0x8D, 0xCD, 0x92, 0x41, 0x0C, 0x5F, 0x7C, 0xFB, 0x3C, 0xA1, 0x97, 0xA2, 0x85, 0x38, 0xDF, 0x23, 0xAF, 0x8D, 0x92, ++ 0xFD, 0xF1, 0xD7, 0xEC, 0x65, 0xF7, 0xAB, 0x52, 0x8D, 0xEB, 0xD7, 0x69, 0x20, 0x34, 0x68, 0x11, 0x43, 0xE9, 0x42, 0x64, 0x04, 0x58, 0x6C, 0x7B, 0xF1, 0xBD, 0xC0, 0x6A, 0xEC, 0x6F, 0x6D, 0x5B, ++ 0x69, 0x91, 0x7A, 0x0A, 0x02, 0xE6, 0x15, 0xB9, 0xDB, 0x54, 0x6B, 0x6C, 0x7D, 0xB8, 0xFD, 0xA7, 0x2A, 0x70, 0x7F, 0x36, 0x4F, 0x3D, 0x8B, 0x78, 0x85, 0xE4, 0x04, 0x35, 0x35, 0xE1, 0x55, 0x82, ++ 0x3C, 0x12, 0xA4, 0xC6, 0x9D, 0x63, 0xDC, 0x82, 0xAC, 0x85, 0x03, 0x4C, 0x98, 0x41, 0x91, 0x8D, 0xA4, 0x8B, 0xDA, 0xA0, 0x9A, 0x80, 0x29, 0x55, 0x1C, 0xF4, 0x35, 0xD2, 0x2A, 0x07, 0xB0, 0x00, ++ 0x7F, 0xCC, 0x0F, 0x13, 0xC6, 0xFF, 0x1E, 0x19, 0xF9, 0xA9, 0xD6, 0x4B, 0x86, 0xE8, 0xFA, 0xD6, 0x3A, 0xAA, 0xDD, 0xCC, 0xFD, 0x14, 0x08, 0x54, 0x27, 0x43, 0x3F, 0x27, 0xE3, 0x3B, 0x54, 0x30, ++ 0x57, 0xEE, 0x79, 0x98, 0x18, 0x8B, 0xDD, 0x4D, 0xAF, 0x90, 0x47, 0xCC, 0x46, 0x1A, 0x3E, 0xDF, 0x45, 0x3D, 0x2F, 0xD4, 0xCD, 0x99, 0x26, 0xC6, 0x56, 0xB7, 0xC1, 0xB3, 0x8F, 0x5A, 0xEF, 0xC0, ++ 0x11, 0x84, 0x2D, 0x1E, 0x7D, 0xCD, 0x0B, 0xC2, 0x6D, 0xCC, 0xC6, 0x0B, 0x62, 0xEB, 0xEC, 0x8D, 0x0E, 0xD3, 0xAE, 0x69, 0x96, 0x59, 0xA4, 0xEB, 0xA4, 0xAF, 0x7A, 0xF4, 0x4D, 0x96, 0x99, 0x9E, ++ 0xE3, 0x55, 0x46, 0x9D, 0x75, 0x0C, 0x0B, 0xAF, 0xDD, 0xFA, 0x2E, 0xBD, 0xD2, 0x77, 0xF0, 0x2D, 0x3E, 0xBA, 0xB6, 0x8D, 0xA6, 0x52, 0xD3, 0x35, 0x99, 0xB6, 0xEC, 0x02, 0x34, 0x10, 0x37, 0x4B, ++ 0xCD, 0x33, 0x07, 0x06, 0xA7, 0x1B, 0xA6, 0x81, 0x35, 0x06, 0xD6, 0x08, 0x68, 0xA4, 0xC6, 0xFF, 0x7B, 0xA5, 0xA2, 0x36, 0x7E, 0x0E, 0x54, 0x79, 0x64, 0x36, 0x01, 0x2A, 0xD2, 0x27, 0x74, 0xFE, ++ 0x63, 0x82, 0x27, 0x9C, 0x32, 0x39, 0x61, 0xCC, 0xFD, 0x10, 0x87, 0xEF, 0x2B, 0xCC, 0xEB, 0x49, 0xC8, 0x71, 0xCE, 0x3C, 0x6A, 0x73, 0x7F, 0xA5, 0xEA, 0xB5, 0x35, 0x77, 0x3A, 0x60, 0x69, 0x42, ++ 0xFA, 0xA7, 0xF5, 0xE1, 0xE5, 0x88, 0x5D, 0x8F, 0xC1, 0x70, 0xD8, 0xC0, 0x1A, 0x44, 0x93, 0x9E, 0x76, 0x80, 0x06, 0xA1, 0xE0, 0x7C, 0xD4, 0x31, 0x61, 0xB7, 0x55, 0xB0, 0xB9, 0x18, 0x1B, 0x87, ++ 0x08, 0xDD, 0x50, 0x65, 0xD9, 0xE8, 0x81, 0xB2, 0xE7, 0xAE, 0xAE, 0x9F, 0x60, 0xBD, 0x6E, 0xE5, 0x9B, 0x5C, 0x62, 0x7C, 0x55, 0xEB, 0x5D, 0x6B, 0xF3, 0x3C, 0x27, 0xC3, 0xFA, 0xF3, 0x4C, 0xEE, ++ 0xC1, 0xF6, 0xAA, 0x96, 0x93, 0xF3, 0xB5, 0x11, 0x58, 0xCA, 0x91, 0x91, 0x7B, 0xD0, 0x63, 0x02, 0x96, 0xB8, 0x5F, 0x08, 0x2E, 0xBC, 0x6F, 0x3F, 0x09, 0x28, 0x07, 0x49, 0x26, 0xD0, 0xAD, 0x77, ++ 0xBA, 0xA3, 0x62, 0x4C, 0xD5, 0xFC, 0xB2, 0xB8, 0x1A, 0xFC, 0x35, 0xE6, 0x55, 0x2E, 0x4F, 0xF4, 0xA7, 0xEB, 0xE0, 0x02, 0x51, 0x66, 0x16, 0xE9, 0xDB, 0x33, 0x11, 0x80, 0x8C, 0x38, 0xEE, 0xD2, ++ 0x42, 0xBC, 0x62, 0x8F, 0x93, 0x7F, 0xD8, 0x01, 0xC5, 0x54, 0x7D, 0xB2, 0xAE, 0xF9, 0x67, 0xE4, 0x85, 0x85, 0x03, 0x3D, 0xCC, 0x40, 0x71, 0x6D, 0xB4, 0x56, 0x11, 0xCA, 0x2E, 0xDF, 0xCB, 0xAC, ++ 0x20, 0x2D, 0xD7, 0xA4, 0x71, 0xFF, 0xF7, 0xB5, 0xE1, 0x56, 0x18, 0xB0, 0x53, 0x24, 0x63, 0xBC, 0x9C, 0xBD, 0x36, 0x25, 0xE5, 0x9B, 0x43, 0x65, 0x7F, 0x5E, 0x97, 0x5B, 0x07, 0x32, 0x4A, 0x86, ++ 0x21, 0x68, 0xCF, 0x26, 0x83, 0xC6, 0x75, 0x33, 0x91, 0xE6, 0xC0, 0xF9, 0xC0, 0xEA, 0xD9, 0x37, 0x32, 0x08, 0x44, 0xBE, 0xF4, 0xF6, 0xDE, 0xC9, 0x6F, 0x73, 0x6C, 0x3E, 0xDE, 0x48, 0x66, 0x60, ++ 0xE5, 0x46, 0xF8, 0xF9, 0xBD, 0xBD, 0xB8, 0x85, 0x34, 0x3C, 0x46, 0xC7, 0x29, 0xFA, 0x8D, 0x9A, 0x4D, 0x8B, 0xE2, 0x2C, 0xC0, 0x5D, 0xDE, 0x83, 0xF8, 0xC1, 0x87, 0xC6, 0xF6, 0xC5, 0xE5, 0xB8, ++ 0x5B, 0x1D, 0x0B, 0xB7, 0xEB, 0x2C, 0xB1, 0xAD, 0x93, 0xB9, 0xEF, 0xC9, 0x26, 0xAE, 0xDB, 0xF8, 0x8A, 0x8F, 0x6E, 0x42, 0x1D, 0x41, 0xAD, 0x9A, 0x1F, 0x57, 0x5D, 0x08, 0xE7, 0x1A, 0x07, 0xFF, ++ 0x54, 0xFE, 0x6B, 0xCC, 0xDA, 0xDA, 0xCA, 0xE3, 0x62, 0x95, 0x88, 0xF6, 0xAC, 0xEE, 0xCF, 0x99, 0x27, 0xE0, 0xC8, 0xA8, 0xE3, 0x50, 0xFB, 0x2B, 0xF0, 0x71, 0xBF, 0x62, 0xC6, 0x76, 0xEC, 0xA8, ++ 0x00, 0xC6, 0xAC, 0x69, 0x00, 0xF0, 0x10, 0xCC, 0x17, 0x10, 0xCD, 0x43, 0x7A, 0x11, 0xC9, 0x93, 0xB9, 0x3F, 0xD9, 0xCE, 0x9A, 0x7C, 0xB5, 0x63, 0x13, 0x4F, 0x8C, 0xF0, 0x7A, 0x88, 0x2A, 0xC1, ++ 0x20, 0x92, 0xFC, 0x45, 0x71, 0x5F, 0x74, 0xEF, 0x9C, 0xBA, 0x1F, 0x52, 0xD3, 0x5E, 0x3E, 0xA4, 0x48, 0x78, 0xC4, 0x56, 0x35, 0xEF, 0xA3, 0xD7, 0xFA, 0xB5, 0xED, 0xE9, 0x74, 0xFB, 0xFA, 0xF4, ++ 0x36, 0x61, 0x93, 0x3A, 0x01, 0x40, 0xCF, 0xA5, 0x87, 0x1A, 0xEB, 0x27, 0xD7, 0x5D, 0x05, 0x07, 0xFF, 0xD4, 0x41, 0x09, 0x3D, 0x9F, 0x71, 0x32, 0x49, 0x73, 0x90, 0x64, 0x6E, 0x67, 0xDA, 0x55, ++ 0x6C, 0xD7, 0x9C, 0xAB, 0x31, 0xC1, 0x6B, 0x86, 0x9B, 0x14, 0xAF, 0x9F, 0xD9, 0xF6, 0x0E, 0xB7, 0x71, 0x73, 0x96, 0x28, 0x0D, 0x98, 0x52, 0x68, 0x18, 0x51, 0xE2, 0x7B, 0x88, 0xD4, 0x46, 0xF6, ++ 0x05, 0x7C, 0x04, 0x1F, 0x1B, 0xAB, 0xD7, 0x5F, 0xDE, 0xCA, 0x14, 0x51, 0x91, 0x61, 0x4E, 0x9B, 0xCD, 0x98, 0x52, 0xE2, 0xF2, 0x7B, 0x5C, 0xAF, 0x0B, 0x7D, 0x85, 0x1B, 0x8B, 0x75, 0xFF, 0xB4, ++ 0x24, 0x40, 0x22, 0x0C, 0xD4, 0x91, 0xCE, 0x8C, 0x9E, 0xFE, 0xA8, 0x36, 0x5B, 0xA7, 0xCF, 0x05, 0x05, 0xD2, 0x07, 0xA8, 0xD9, 0x35, 0x67, 0x52, 0x95, 0xBC, 0x82, 0x55, 0xDB, 0xB8, 0x22, 0xD0, ++ 0xCB, 0x29, 0x7D, 0x36, 0xEB, 0x50, 0xE8, 0x33, 0x07, 0x66, 0xF3, 0x53, 0x83, 0xAE, 0x91, 0xF5, 0x79, 0x7D, 0x70, 0x2A, 0x1D, 0x45, 0x16, 0xDE, 0x66, 0x35, 0x92, 0x7A, 0xEC, 0x0F, 0x66, 0xA1, ++ 0xC1, 0x0B, 0x1C, 0xDB, 0xF8, 0x23, 0x89, 0xDA, 0xE9, 0xAD, 0x73, 0x4D, 0x53, 0x2C, 0x83, 0x2C, 0xA6, 0xDB, 0xAF, 0x4B, 0xD0, 0x57, 0xDB, 0x6A, 0x92, 0xE2, 0x8D, 0x41, 0x11, 0x35, 0xA2, 0x92, ++ 0x50, 0x80, 0xE9, 0x2F, 0x8F, 0x2C, 0xD1, 0xEC, 0xD7, 0x00, 0xFB, 0xF4, 0xE2, 0x4F, 0x00, 0xAE, 0xA8, 0xBF, 0x37, 0x15, 0xE7, 0xE0, 0x43, 0xD1, 0x43, 0x0F, 0xDC, 0x8F, 0x08, 0x61, 0x63, 0x8A, ++ 0x91, 0xA0, 0xA1, 0x4A, 0xDB, 0x38, 0x7A, 0x07, 0x9F, 0x78, 0xBA, 0x85, 0x25, 0x77, 0x1A, 0x54, 0x97, 0x7D, 0x35, 0x7F, 0x4C, 0x98, 0x90, 0xE5, 0xAE, 0xD7, 0xB4, 0x88, 0xE9, 0x3D, 0x55, 0x6B, ++ 0x1B, 0x12, 0x12, 0xA1, 0x81, 0xBC, 0x0B, 0xFC, 0x47, 0xEA, 0x47, 0x2B, 0x02, 0x9A, 0xF5, 0x54, 0x2A, 0x2C, 0x87, 0x7D, 0xA2, 0x84, 0x6B, 0x60, 0x5D, 0x40, 0x6B, 0x3A, 0xF6, 0xE9, 0xDD, 0x9C, ++ 0xE5, 0xC1, 0x80, 0x13, 0xE1, 0x52, 0xE6, 0x54, 0xBF, 0x31, 0x0E, 0xE9, 0x81, 0xAD, 0x99, 0x1F, 0x4A, 0xDD, 0x6E, 0xFB, 0xC1, 0x68, 0x82, 0x8A, 0x17, 0x64, 0xB1, 0x80, 0xE4, 0x1F, 0x77, 0xFD, ++ 0xE5, 0xF8, 0x29, 0x7D, 0x76, 0xEB, 0xD5, 0xC1, 0xBE, 0x90, 0x3C, 0xA6, 0xF6, 0x7C, 0x3A, 0xD4, 0xF4, 0x8B, 0xC8, 0x25, 0xF5, 0x9E, 0x22, 0x8C, 0xBC, 0xAA, 0x8F, 0xC8, 0xEA, 0x24, 0x6C, 0xB8, ++ 0x1A, 0xC5, 0x08, 0xBD, 0x99, 0x3E, 0x2B, 0x3E, 0xC0, 0xAE, 0xF7, 0x88, 0x0B, 0x68, 0xE6, 0xB9, 0xC9, 0x2D, 0x6A, 0x86, 0x39, 0x09, 0xF1, 0x48, 0x79, 0x02, 0x03, 0x37, 0x21, 0xB4, 0xE2, 0x5E, ++ 0xF8, 0x90, 0x99, 0xE5, 0x37, 0x6B, 0xE2, 0x0A, 0x98, 0x6E, 0x15, 0x28, 0xD8, 0xF0, 0xC1, 0x1E, 0xC4, 0xF3, 0x9D, 0x42, 0xA4, 0x56, 0xE8, 0x74, 0x1E, 0x2B, 0x00, 0x02, 0xFA, 0xC3, 0x67, 0xAC, ++ 0x9D, 0xC0, 0xE5, 0x52, 0x4C, 0xBC, 0x43, 0x6F, 0xE6, 0x22, 0x62, 0xCB, 0x46, 0x34, 0xAA, 0x3E, 0xC7, 0x3A, 0xF8, 0xC4, 0x88, 0x95, 0x90, 0xBF, 0x48, 0xDF, 0x21, 0xE4, 0x2B, 0x14, 0x02, 0x1A, ++ 0x41, 0xA3, 0xCC, 0x11, 0xEE, 0xBC, 0x91, 0xBA, 0x2F, 0xFB, 0xB5, 0xEE, 0x3C, 0x24, 0x0D, 0xB2, 0xA0, 0xE7, 0x04, 0x58, 0x85, 0x73, 0x6F, 0xDA, 0x1B, 0x1F, 0x7A, 0x02, 0x7C, 0x67, 0x2E, 0x12, ++ 0x4D, 0x1E, 0x6F, 0x89, 0x39, 0xDE, 0x75, 0xC0, 0xD0, 0x97, 0x37, 0x11, 0xDD, 0xBC, 0x93, 0x90, 0xE1, 0xC8, 0x5B, 0x4A, 0x22, 0xCB, 0xE0, 0x03, 0x74, 0xBA, 0xB4, 0xE4, 0xDF, 0xA5, 0xAA, 0x37, ++ 0x26, 0x75, 0x6B, 0xDD, 0x00, 0xFF, 0x42, 0x9E, 0x4F, 0xB8, 0x0D, 0x77, 0x4E, 0xB2, 0xC6, 0x4B, 0xC6, 0x6E, 0x04, 0x2E, 0xC3, 0x62, 0x1A, 0xDB, 0x4C, 0xE2, 0x00, 0xBF, 0x88, 0x5B, 0x7B, 0x75, ++ 0x6F, 0x25, 0x0E, 0x73, 0x32, 0x3A, 0xB5, 0x17, 0x5E, 0x83, 0xA7, 0xB7, 0x31, 0xD5, 0xAE, 0x85, 0xB5, 0xC9, 0x8E, 0xC2, 0xF7, 0x0D, 0x30, 0x26, 0x47, 0x9E, 0x0B, 0x68, 0xEA, 0x67, 0xF5, 0xB8, ++ 0xFF, 0x1D, 0xFB, 0x63, 0xE9, 0x40, 0xB7, 0x86, 0xD9, 0x3E, 0x35, 0x1F, 0x8C, 0xDC, 0x94, 0x79, 0x19, 0x6A, 0xA8, 0xD7, 0x84, 0x26, 0xAB, 0x0E, 0x65, 0x03, 0x19, 0x90, 0xD0, 0xFE, 0xF6, 0xF6, ++ 0x41, 0xFF, 0xE6, 0x87, 0x7F, 0x31, 0x0D, 0xD4, 0xFA, 0x50, 0xD4, 0xB4, 0x18, 0xB4, 0x96, 0x36, 0x2F, 0x30, 0xED, 0x54, 0x7B, 0xBD, 0x70, 0x1C, 0x67, 0xB4, 0xB7, 0x6A, 0xBA, 0x94, 0xAD, 0x52, ++ 0x9E, 0xF3, 0x72, 0x38, 0xA1, 0x3D, 0xB9, 0x1D, 0xBC, 0x97, 0xDA, 0xD3, 0x40, 0x6D, 0x3B, 0xB4, 0x33, 0x0F, 0xA5, 0xE4, 0x6F, 0x19, 0x37, 0xF3, 0xFE, 0x70, 0xEB, 0xB1, 0x6A, 0x7D, 0x53, 0x28, ++ 0x93, 0x22, 0x13, 0xBE, 0x26, 0xE3, 0x06, 0x0F, 0x5D, 0x6D, 0xA2, 0xB7, 0x23, 0x60, 0xC3, 0x6C, 0x1A, 0x06, 0xC3, 0x85, 0x67, 0x48, 0xE3, 0x04, 0xC4, 0xAC, 0x1F, 0xA6, 0x01, 0xBA, 0xB9, 0xD7, ++ 0x5A, 0x18, 0x02, 0x62, 0x63, 0xB0, 0xCE, 0x54, 0xEF, 0xA3, 0x10, 0xF6, 0x65, 0xE9, 0xC0, 0xB0, 0xF5, 0x8D, 0xE2, 0x60, 0xBF, 0x20, 0xC9, 0x82, 0xCC, 0x67, 0xFC, 0x45, 0xF5, 0x9F, 0x88, 0x1E, ++ 0x1F, 0xE2, 0xF1, 0x01, 0x9D, 0x6F, 0xC0, 0xE7, 0x3B, 0x7B, 0x6B, 0x31, 0xA3, 0xFB, 0x1A, 0x99, 0x10, 0x5E, 0x2F, 0xF7, 0xDC, 0x97, 0x91, 0xE9, 0xA3, 0xB9, 0x72, 0xDA, 0xC1, 0xE8, 0x58, 0x94, ++ 0xDE, 0x9D, 0xEC, 0x2B, 0x76, 0xEB, 0xF2, 0xEC, 0xD9, 0x0D, 0x22, 0x9D, 0xA4, 0xB1, 0x80, 0x3F, 0x67, 0xDC, 0x36, 0x34, 0x73, 0x7A, 0x03, 0xA3, 0x58, 0x8B, 0xFC, 0x03, 0x5C, 0x85, 0x0D, 0x22, ++ 0x97, 0x78, 0xB5, 0xC1, 0x57, 0x36, 0x2C, 0x6B, 0x8A, 0xAA, 0xD4, 0x6B, 0x49, 0xD5, 0xF0, 0xB6, 0x53, 0xC8, 0x9B, 0xFE, 0x01, 0xFA, 0xF3, 0x38, 0x55, 0xFC, 0xA3, 0xD3, 0x8B, 0x00, 0x98, 0xA7, ++ 0x66, 0x81, 0xCF, 0x99, 0x51, 0xC4, 0x3E, 0x6C, 0xEC, 0x60, 0x93, 0x82, 0x1E, 0x38, 0xB0, 0x64, 0x14, 0x07, 0x8A, 0xB9, 0x5F, 0x83, 0xED, 0x8B, 0x1F, 0x1A, 0xDB, 0x90, 0xDF, 0xEE, 0x9E, 0x52, ++ 0xA8, 0x56, 0xB9, 0x71, 0xE6, 0xE4, 0x34, 0x72, 0x71, 0x5A, 0xA6, 0xA5, 0x8C, 0x11, 0x20, 0x45, 0x1A, 0xBC, 0x52, 0xBB, 0x65, 0x44, 0xD3, 0x86, 0x9F, 0x5F, 0x4A, 0x18, 0x09, 0x1D, 0xF1, 0xCC, ++ 0x2C, 0x02, 0x1F, 0xBE, 0x0A, 0x80, 0x8B, 0xE8, 0x6E, 0x70, 0x6C, 0x32, 0x69, 0x1E, 0xBD, 0x0E, 0xFD, 0x32, 0x2E, 0x5A, 0x29, 0xE0, 0xA1, 0x79, 0xB2, 0x77, 0xAD, 0xAA, 0xC5, 0x50, 0x60, 0x35, ++ 0xD4, 0xD2, 0x3C, 0x31, 0x66, 0xD8, 0x69, 0x27, 0x1A, 0xAD, 0x66, 0x4A, 0xCA, 0x50, 0xEB, 0x62, 0x2E, 0x8D, 0x8A, 0x2D, 0x09, 0xA3, 0x47, 0x72, 0x00, 0x80, 0x0E, 0xF8, 0xDF, 0xDC, 0x01, 0xC3, ++ 0x06, 0x2F, 0xC9, 0x8E, 0x53, 0x9F, 0x4F, 0x6F, 0xE1, 0x59, 0x4E, 0x92, 0xA2, 0xCF, 0x66, 0xD2, 0x84, 0x97, 0xC1, 0xB4, 0xDD, 0xF5, 0x4A, 0x32, 0x40, 0xC4, 0x06, 0x88, 0xA3, 0xFF, 0x30, 0xBB, ++ 0x10, 0xFD, 0x97, 0x82, 0xE9, 0xD1, 0x96, 0x6B, 0xD2, 0x2A, 0x23, 0xEA, 0x12, 0xB3, 0xFE, 0xD0, 0xE1, 0xD3, 0x2F, 0x61, 0xEE, 0xFA, 0xEA, 0x7B, 0xB5, 0xEF, 0xBE, 0xE4, 0x10, 0xA8, 0x7A, 0xB0, ++ 0x79, 0x16, 0x1B, 0x2A, 0xF6, 0xD8, 0x16, 0x47, 0x0E, 0xB8, 0x50, 0xF7, 0x24, 0x70, 0x54, 0xE0, 0xED, 0xB1, 0xD6, 0x56, 0x4D, 0x15, 0xA2, 0x3B, 0xC2, 0xDF, 0x89, 0x6B, 0xEB, 0x07, 0xDE, 0xE2, ++ 0xE0, 0x2E, 0xC6, 0xC2, 0x4F, 0x12, 0xEE, 0x96, 0x95, 0x75, 0xCA, 0xF3, 0xDD, 0x72, 0x23, 0x52, 0xC9, 0x81, 0x46, 0x4A, 0x9F, 0x5D, 0xED, 0x7E, 0xF3, 0x71, 0x16, 0x1A, 0x8A, 0x62, 0x0C, 0xB4, ++ 0x29, 0xDE, 0x55, 0x48, 0xE5, 0xC0, 0xE3, 0xBC, 0x2C, 0x3D, 0xBA, 0xB7, 0x93, 0x28, 0xD5, 0xFA, 0x70, 0xA4, 0xF6, 0x99, 0xE5, 0x4D, 0x3C, 0x22, 0x4C, 0xF3, 0xCB, 0xA4, 0x1E, 0x7D, 0xE7, 0xE3, ++ 0xAF, 0xC3, 0x20, 0xDE, 0xCA, 0x7C, 0x36, 0x2F, 0xAC, 0x7C, 0xC9, 0x26, 0x78, 0x46, 0x4D, 0x41, 0x3D, 0xD4, 0x22, 0x9E, 0x76, 0xAA, 0x90, 0x93, 0x80, 0x9C, 0x0F, 0x5E, 0xDE, 0x53, 0x0A, 0xCB, ++ 0xFE, 0xCF, 0x08, 0x2B, 0xC5, 0xD2, 0x18, 0xD0, 0xB8, 0xF3, 0xF1, 0x76, 0x89, 0x7A, 0xCF, 0xF3, 0x59, 0xF1, 0xA6, 0xA8, 0x06, 0xB7, 0xA8, 0x66, 0x9C, 0x72, 0xC2, 0x26, 0xF2, 0xB8, 0x45, 0x2E, ++ 0xC8, 0xD3, 0x5F, 0xA6, 0x6B, 0xFE, 0x93, 0x63, 0xAE, 0x9E, 0x84, 0x42, 0xD1, 0x85, 0x50, 0x80, 0x1B, 0x00, 0x62, 0x24, 0x68, 0x57, 0x3C, 0xAD, 0x37, 0xBD, 0x18, 0x99, 0xC2, 0xAB, 0x37, 0x5F, ++ 0x98, 0xB0, 0xEF, 0x9C, 0x51, 0x84, 0xD4, 0x0F, 0x23, 0x93, 0x05, 0x4E, 0xCE, 0x1E, 0xAB, 0x24, 0xDE, 0x05, 0x22, 0xFE, 0x0F, 0xDF, 0xF7, 0x01, 0x6E, 0xAF, 0x4F, 0x88, 0xBB, 0x28, 0xF3, 0x64, ++ 0xAE, 0x4A, 0xD3, 0xDA, 0x4B, 0x70, 0xAC, 0x0E, 0x47, 0xD2, 0xB6, 0x7B, 0x9A, 0x60, 0x37, 0x68, 0x61, 0xC6, 0x7C, 0x6B, 0x85, 0x74, 0xCC, 0x07, 0x83, 0x88, 0x92, 0xC3, 0xC8, 0x55, 0x68, 0x0A, ++ 0xF6, 0x97, 0x18, 0x9C, 0xFF, 0xD3, 0x7C, 0xA8, 0x3A, 0x33, 0x71, 0x0F, 0x7A, 0xE9, 0xB0, 0xA8, 0x57, 0x95, 0xFC, 0x6E, 0x4A, 0x57, 0x79, 0x1D, 0x93, 0x2D, 0xD1, 0x10, 0x8B, 0x90, 0x86, 0xBB, ++ 0x3E, 0x29, 0x65, 0x24, 0xE2, 0x91, 0x07, 0xE3, 0x35, 0x4B, 0x4C, 0x40, 0xAD, 0xDB, 0x8C, 0x16, 0x5D, 0xBB, 0xA9, 0x50, 0xFD, 0xCC, 0x0B, 0x3D, 0x92, 0x88, 0x83, 0x9D, 0x9B, 0xA6, 0x35, 0x37, ++ 0x23, 0x17, 0x73, 0xC6, 0x61, 0xDA, 0xD4, 0x0C, 0xC3, 0xA5, 0xD7, 0xAB, 0x1C, 0x59, 0x43, 0xEA, 0xB0, 0x3C, 0x81, 0xFB, 0x39, 0xB5, 0xA6, 0x7B, 0x04, 0xD3, 0x34, 0x82, 0x88, 0x55, 0x6A, 0xB8, ++ 0xDA, 0xD4, 0x5E, 0x1D, 0xFF, 0x68, 0x6C, 0x07, 0x12, 0x83, 0x5D, 0xB6, 0x16, 0x6B, 0x2A, 0xDD, 0xA6, 0x2D, 0x95, 0x08, 0x66, 0xCC, 0xE4, 0x9E, 0xD3, 0x71, 0xE8, 0x76, 0x8C, 0x8E, 0x6E, 0x49, ++ 0xB9, 0x00, 0x0E, 0xA2, 0x93, 0xBD, 0x56, 0x96, 0x87, 0x8F, 0x8C, 0xB1, 0x7C, 0xF8, 0x79, 0xA8, 0x89, 0x7E, 0xD9, 0xDE, 0xD7, 0x74, 0x26, 0x3A, 0x83, 0x0E, 0x4D, 0xEE, 0x2E, 0xD7, 0x52, 0x0B, ++ 0x4C, 0x59, 0xFF, 0x69, 0x71, 0x1F, 0xB3, 0x5F, 0x67, 0x0D, 0x48, 0x77, 0xC7, 0xD3, 0x12, 0x24, 0xA3, 0xAD, 0xD1, 0x43, 0xAA, 0xB9, 0x65, 0x30, 0xB1, 0x80, 0xE5, 0xFB, 0x5E, 0xC9, 0xD8, 0x3F, ++ 0x57, 0x1A, 0xB7, 0x94, 0x77, 0xAD, 0xEA, 0x40, 0x9C, 0x2B, 0xA9, 0x86, 0xC7, 0xA0, 0x54, 0xE6, 0x14, 0x8F, 0x03, 0x7D, 0xB9, 0x71, 0x07, 0x92, 0xF6, 0x12, 0x15, 0xA3, 0xFD, 0xF1, 0x28, 0xFF, ++ 0xA7, 0x15, 0x4F, 0xB0, 0x1C, 0xF4, 0xEF, 0x18, 0xFB, 0xC2, 0xA2, 0x03, 0xBD, 0x37, 0x6D, 0x68, 0x6C, 0x36, 0x70, 0x6F, 0x13, 0x2E, 0x20, 0x81, 0xB9, 0x10, 0xFD, 0x15, 0x46, 0x0C, 0x5A, 0x05, ++ 0x09, 0x9C, 0x84, 0x23, 0x6F, 0x98, 0x2F, 0xBE, 0xBC, 0x62, 0x51, 0xEB, 0x07, 0x68, 0x88, 0xF9, 0x64, 0xE5, 0x79, 0x94, 0x42, 0x16, 0x0D, 0xA2, 0x60, 0x80, 0x29, 0xD6, 0x1B, 0xE9, 0xAD, 0x99, ++ 0xB4, 0x5B, 0x7B, 0xEC, 0x36, 0xD7, 0xFA, 0x12, 0xBA, 0x3F, 0x50, 0x28, 0xFD, 0x5B, 0x90, 0xE4, 0x26, 0xB9, 0x04, 0x88, 0x49, 0x92, 0x18, 0x27, 0x9E, 0xCB, 0xDC, 0x33, 0xF1, 0xE7, 0x17, 0xBD, ++ 0x44, 0x0F, 0x5C, 0x85, 0x80, 0x8D, 0x72, 0x91, 0xF6, 0x36, 0xE8, 0xF5, 0xDE, 0xA6, 0xEA, 0x59, 0x18, 0x6F, 0xFC, 0x6C, 0xF8, 0x59, 0x2A, 0x09, 0x72, 0x46, 0x34, 0xA3, 0x01, 0x8C, 0xA8, 0xE5, ++ 0x52, 0x5E, 0x3E, 0xC7, 0xAE, 0x6F, 0x01, 0x5E, 0x28, 0x7E, 0xA0, 0x6A, 0x6F, 0x19, 0x3E, 0xB6, 0x50, 0xEC, 0x00, 0x95, 0xAF, 0x8F, 0x43, 0xFE, 0x12, 0x2A, 0xC3, 0xF4, 0x7D, 0xEC, 0xDB, 0x72, ++ 0xDD, 0x4F, 0x68, 0x69, 0x86, 0x64, 0x5D, 0x61, 0xD9, 0x7D, 0xD6, 0x97, 0x64, 0x9F, 0x1E, 0x7B, 0xE0, 0x17, 0x30, 0xD1, 0xBD, 0xBD, 0xF7, 0x62, 0x71, 0x40, 0xDC, 0x0E, 0x18, 0xE6, 0xB3, 0x55, ++ 0x7B, 0xA3, 0x67, 0xF0, 0x90, 0xFB, 0xD7, 0xC5, 0x47, 0x5E, 0xD3, 0xFA, 0x05, 0x5B, 0x32, 0x5D, 0x4B, 0x61, 0x35, 0x9F, 0x45, 0xBC, 0xFE, 0xF1, 0xA6, 0x06, 0xC7, 0x2E, 0xF3, 0x62, 0x62, 0xA0, ++ 0x45, 0x51, 0xBC, 0x8C, 0x24, 0xFA, 0xB3, 0x53, 0x21, 0xFC, 0xE8, 0xBC, 0xE5, 0x56, 0x06, 0x27, 0x9A, 0x29, 0x15, 0x69, 0x76, 0xFB, 0x45, 0xEE, 0x76, 0x1D, 0x92, 0x50, 0x14, 0xCB, 0x69, 0x1F, ++ 0xF7, 0x6B, 0x5F, 0xEF, 0xE1, 0xB8, 0x39, 0x5B, 0x81, 0x10, 0x6A, 0x24, 0x5C, 0x93, 0x0E, 0x2D, 0x99, 0x54, 0xF1, 0xCC, 0x5A, 0x3A, 0xAA, 0x2C, 0x9C, 0xD5, 0x62, 0xA7, 0xB5, 0xC7, 0x4D, 0x84, ++ 0xC0, 0xC2, 0xFE, 0xE6, 0x2E, 0x0E, 0xDB, 0xE1, 0xE8, 0xFB, 0x96, 0x90, 0xA2, 0xF4, 0x0B, 0x8D, 0xFD, 0xE1, 0x34, 0xC8, 0xBE, 0xDA, 0x37, 0x0A, 0x7B, 0x17, 0x0D, 0xAA, 0xBC, 0xA6, 0xB9, 0xFE, ++ 0x48, 0x9E, 0xF4, 0xEA, 0x66, 0x29, 0xF0, 0x3E, 0x5E, 0x44, 0x30, 0xC2, 0xFA, 0x57, 0x31, 0xEB, 0xC7, 0x47, 0x6A, 0xE6, 0x3F, 0xF8, 0x9B, 0x39, 0x49, 0xC9, 0x93, 0x71, 0x77, 0xD3, 0x63, 0x1E, ++ 0x14, 0xC1, 0x26, 0x57, 0x9F, 0x79, 0x74, 0xD9, 0x6C, 0x37, 0xCD, 0x73, 0x0A, 0x09, 0x8D, 0xFE, 0xCB, 0x6A, 0xFC, 0x86, 0x41, 0x65, 0x66, 0x8F, 0x03, 0xD5, 0x12, 0xA4, 0xCA, 0xDC, 0x49, 0xA4, ++ 0xEB, 0xEE, 0x2E, 0x1A, 0x26, 0x7E, 0xE2, 0xE2, 0xA7, 0x6B, 0xBB, 0x2C, 0x77, 0x6A, 0x44, 0x87, 0xBC, 0xC0, 0xFC, 0x00, 0xAF, 0xD7, 0xC1, 0x81, 0x7F, 0x7E, 0x89, 0x00, 0x26, 0xD5, 0xD4, 0x25, ++ 0x4C, 0x9C, 0xCC, 0xBA, 0x2B, 0xB3, 0x01, 0xBA, 0x57, 0xCE, 0x7C, 0xD4, 0x7A, 0xE1, 0x8D, 0x65, 0x3F, 0x9A, 0x92, 0x05, 0x3A, 0xF9, 0x0B, 0xEE, 0xC3, 0xA8, 0x29, 0xB8, 0x52, 0xC2, 0x3D, 0x0D, ++ 0xF7, 0x52, 0x07, 0x70, 0x1E, 0x67, 0x49, 0x74, 0xED, 0x56, 0x2F, 0xF5, 0x9A, 0x81, 0x1B, 0xB8, 0x5C, 0xCF, 0x62, 0x13, 0x64, 0xCD, 0x9F, 0x87, 0xC9, 0xE7, 0x8B, 0x9D, 0x2F, 0x2E, 0xB2, 0x6F, ++ 0x00, 0x41, 0xAF, 0x1A, 0x47, 0xA4, 0x37, 0xC4, 0x0C, 0x02, 0x93, 0x9B, 0x62, 0xC8, 0x90, 0x52, 0x13, 0x5A, 0x06, 0x63, 0x2E, 0x43, 0xDE, 0x35, 0x34, 0x8E, 0xEA, 0x91, 0x75, 0x03, 0x47, 0xB8, ++ 0x6A, 0xC2, 0xFA, 0xB5, 0x55, 0x53, 0x24, 0x9F, 0xC2, 0x5D, 0x2B, 0x57, 0x49, 0x69, 0x92, 0x91, 0x38, 0xA4, 0x83, 0x71, 0xDC, 0x74, 0x6E, 0xAC, 0x5F, 0xA1, 0x08, 0xE2, 0x6C, 0xBC, 0xC5, 0xB6, ++ }, ++ .t1_len = 2304, ++ .t1 = { ++ 0x1B, 0xEA, 0x94, 0x79, 0x6B, 0xBA, 0xD0, 0x5D, 0xA6, 0xD7, 0xD2, 0x58, 0x1A, 0x10, 0xE9, 0x7C, 0xF1, 0xF8, 0x9D, 0x66, 0xED, 0x7A, 0x7A, 0xE2, 0x3B, 0xBE, 0xB6, 0x8B, 0x87, 0xF5, 0x1E, 0xE2, ++ 0x69, 0xDA, 0x47, 0x6D, 0x3F, 0xCA, 0x1C, 0xA5, 0x4D, 0x27, 0x26, 0x72, 0xB3, 0x7A, 0x61, 0x11, 0x25, 0x5E, 0x37, 0xA6, 0xF7, 0x71, 0x9B, 0xC2, 0xDD, 0x38, 0x97, 0xC2, 0xA7, 0x74, 0x89, 0x4C, ++ 0x4B, 0xD8, 0xE6, 0xF5, 0xE7, 0xE1, 0x10, 0xA6, 0xDF, 0x0E, 0x58, 0x44, 0x20, 0x8D, 0x94, 0x11, 0x53, 0xCC, 0xDD, 0x77, 0xA3, 0x4B, 0xBC, 0x37, 0x26, 0xA0, 0x87, 0x85, 0xD7, 0x28, 0x02, 0xE2, ++ 0xF1, 0x52, 0xB3, 0x30, 0x67, 0x89, 0xB1, 0xEA, 0x50, 0x2D, 0x42, 0x22, 0x71, 0x24, 0x9A, 0xC5, 0x57, 0x11, 0x39, 0xE1, 0x7F, 0x62, 0x9A, 0xF3, 0x5C, 0x9D, 0x7F, 0x43, 0x49, 0x1D, 0x83, 0xCC, ++ 0x01, 0x07, 0x7C, 0x58, 0x84, 0xC6, 0x2A, 0x1A, 0x87, 0xE7, 0x5E, 0x68, 0x48, 0xE6, 0xD1, 0x2D, 0xC1, 0x3A, 0xE8, 0x43, 0x1A, 0x93, 0xAB, 0xCA, 0xB7, 0x9E, 0x05, 0x2E, 0xFC, 0xAE, 0x5E, 0x02, ++ 0xF4, 0x49, 0xE8, 0x11, 0x8E, 0x6D, 0x9F, 0x36, 0x9F, 0xDD, 0x0A, 0x59, 0x33, 0x37, 0xE4, 0xC0, 0xC7, 0x50, 0xFE, 0x4A, 0x4F, 0xAE, 0x5F, 0x83, 0xC0, 0x17, 0x93, 0xBF, 0xD7, 0x6E, 0xA0, 0x81, ++ 0x77, 0xBC, 0xA3, 0x78, 0x71, 0xD9, 0x14, 0x51, 0xC5, 0xA8, 0x19, 0x5A, 0xBB, 0x3C, 0x5B, 0x46, 0xCC, 0x66, 0x08, 0xBE, 0xD7, 0x7E, 0x92, 0x3C, 0xE1, 0x51, 0x64, 0x25, 0x06, 0x54, 0x16, 0x95, ++ 0xA4, 0xE2, 0x96, 0xCB, 0xC6, 0x4D, 0x3B, 0x32, 0x3F, 0x77, 0xBE, 0x7B, 0x72, 0x4C, 0xC4, 0x38, 0xF0, 0xF7, 0xB6, 0xAC, 0xA6, 0xE1, 0xC9, 0x90, 0x8A, 0xA0, 0x86, 0xF3, 0x0B, 0x3D, 0x3C, 0x0C, ++ 0x1D, 0xB6, 0x44, 0x90, 0x37, 0xB4, 0x9D, 0x10, 0x67, 0x40, 0xC9, 0xDB, 0x8D, 0x99, 0xC5, 0x7B, 0x49, 0xA7, 0xBC, 0x14, 0xB1, 0x71, 0x07, 0x35, 0xAF, 0x96, 0x1B, 0x77, 0x60, 0xA8, 0x2D, 0xFB, ++ 0xB1, 0xD8, 0x9C, 0x72, 0xD7, 0x09, 0x4F, 0xC8, 0x95, 0x1B, 0xB0, 0xE9, 0x83, 0x97, 0xD3, 0x25, 0xBF, 0x12, 0x00, 0x1B, 0x04, 0xAC, 0xC6, 0x64, 0x79, 0x28, 0x2C, 0x30, 0x57, 0x47, 0x6D, 0xA0, ++ 0x5A, 0x3B, 0x76, 0xD7, 0x59, 0x2F, 0xBE, 0xF9, 0xDA, 0x06, 0x0E, 0xBA, 0xF4, 0xF7, 0x33, 0xAE, 0x63, 0x63, 0x76, 0xB7, 0x60, 0x5D, 0x9B, 0xBE, 0x60, 0x52, 0x2E, 0x3E, 0xF0, 0xE8, 0x6A, 0x83, ++ 0x4F, 0x36, 0xA0, 0xCE, 0xC9, 0x6F, 0xBB, 0x4A, 0x8B, 0xF3, 0x1E, 0xAC, 0x2D, 0x5A, 0x52, 0x3B, 0xF4, 0x84, 0x5D, 0xB6, 0xD4, 0xD8, 0x7C, 0x3D, 0x50, 0xC9, 0xE0, 0x27, 0x52, 0xB6, 0x4F, 0x42, ++ 0x06, 0x2F, 0x62, 0x5A, 0x19, 0x12, 0x53, 0xFA, 0x7A, 0xA4, 0xA3, 0x6E, 0xED, 0x8E, 0xE9, 0xD9, 0x86, 0xFA, 0x86, 0xC1, 0x3B, 0xB3, 0xF1, 0x7D, 0x64, 0x1B, 0x8B, 0x26, 0x7F, 0x01, 0x36, 0x9A, ++ 0xD1, 0x27, 0x0D, 0xD5, 0x41, 0x3C, 0x94, 0xEF, 0x0B, 0x77, 0x2D, 0x28, 0x9E, 0x7A, 0xCD, 0xAF, 0x20, 0x75, 0x57, 0x6C, 0xF2, 0x15, 0x7B, 0x5C, 0xFA, 0x48, 0x79, 0x68, 0x66, 0x15, 0xFA, 0xBA, ++ 0xF3, 0x85, 0x74, 0x35, 0x87, 0x41, 0xB9, 0x02, 0xE1, 0x82, 0x7A, 0xC7, 0x1B, 0x9A, 0xED, 0x0B, 0xBC, 0xEE, 0x5F, 0x85, 0x43, 0xD4, 0x5A, 0xB9, 0xCF, 0x4F, 0xF9, 0xA9, 0x5A, 0x5B, 0xF2, 0x86, ++ 0x9A, 0x64, 0xBC, 0x68, 0x10, 0xB7, 0x57, 0x46, 0x15, 0x4A, 0x4D, 0xA6, 0x49, 0xD6, 0x9B, 0x3E, 0xA9, 0x53, 0xFF, 0xC9, 0x4F, 0xD2, 0x01, 0x27, 0x22, 0xF9, 0x33, 0x4B, 0x8F, 0xCD, 0x4C, 0x12, ++ 0x65, 0xEA, 0x60, 0x8B, 0xF5, 0x5B, 0x57, 0xAB, 0x08, 0xBE, 0x22, 0x53, 0xE1, 0x57, 0x40, 0x81, 0xC3, 0xC4, 0xD2, 0xB7, 0x41, 0xC8, 0x80, 0x3E, 0x88, 0x8D, 0xEC, 0x54, 0x85, 0x2B, 0xEF, 0xE9, ++ 0x35, 0x2C, 0x4C, 0x97, 0xC7, 0x6A, 0xFF, 0xC3, 0x64, 0x98, 0x57, 0x8F, 0xCE, 0x72, 0xE5, 0x82, 0x6A, 0xB4, 0xFC, 0x52, 0xFC, 0x26, 0xF1, 0x1C, 0xF1, 0x23, 0x69, 0xCE, 0xD7, 0x04, 0x63, 0xB0, ++ 0x84, 0x04, 0x93, 0xDD, 0x67, 0x56, 0x04, 0xB0, 0xAE, 0x0D, 0x22, 0x14, 0xC7, 0x8B, 0x34, 0xEE, 0x32, 0x46, 0x9F, 0x68, 0x37, 0x01, 0x12, 0x4A, 0xC4, 0xF9, 0xB7, 0xF4, 0xFA, 0xE7, 0x6E, 0xDD, ++ 0xFF, 0x67, 0x81, 0xCB, 0xE1, 0x1B, 0x87, 0x61, 0x32, 0x29, 0x95, 0x0C, 0x77, 0xC1, 0x4E, 0xAA, 0x0D, 0xB1, 0xE3, 0x21, 0xF0, 0x1A, 0x59, 0x3B, 0x60, 0xDE, 0xE0, 0x31, 0x88, 0xB2, 0x07, 0xB2, ++ 0x41, 0x32, 0x11, 0xF5, 0x95, 0xDB, 0x92, 0x8D, 0xA0, 0x94, 0x4F, 0x45, 0x4F, 0x08, 0xBA, 0xCA, 0xE4, 0x14, 0xD8, 0xBF, 0x25, 0x9E, 0xAF, 0xBE, 0x3F, 0x74, 0x26, 0xD2, 0xBF, 0x94, 0x9D, 0xB2, ++ 0xCB, 0x67, 0xD5, 0x83, 0x2D, 0xFA, 0x3F, 0xF9, 0xD8, 0x23, 0x72, 0xDE, 0x65, 0x7E, 0x61, 0x7F, 0x67, 0xEE, 0x95, 0xDA, 0xC7, 0xEC, 0xE1, 0x60, 0xBA, 0x14, 0x5C, 0xBA, 0x8E, 0x98, 0xBC, 0x5E, ++ 0x98, 0x9C, 0x41, 0xD4, 0x87, 0x5A, 0x65, 0x95, 0x9B, 0xBE, 0x28, 0x1C, 0xB6, 0xDA, 0x72, 0x1F, 0xCC, 0x90, 0x29, 0xDA, 0x97, 0xDD, 0xE8, 0x3F, 0x7B, 0x1B, 0x95, 0x9A, 0x1A, 0xD4, 0x04, 0x19, ++ 0x49, 0x55, 0x12, 0x66, 0xFE, 0xED, 0x89, 0x6E, 0x98, 0x89, 0xE0, 0xAC, 0xF4, 0xF7, 0x61, 0x4D, 0x27, 0xCA, 0x7D, 0x05, 0x2C, 0xDB, 0x7A, 0x22, 0xE4, 0x4B, 0x40, 0x92, 0x4A, 0xF7, 0x27, 0xE9, ++ 0x16, 0xB9, 0x23, 0x7E, 0xD2, 0x01, 0x7C, 0x61, 0xD0, 0x0E, 0x30, 0x16, 0xD3, 0xBD, 0xFD, 0x8B, 0xFC, 0x4E, 0x73, 0xC6, 0xEC, 0x77, 0x7F, 0x8B, 0x06, 0x87, 0xF4, 0x1F, 0x0F, 0x21, 0xE7, 0xFE, ++ 0xFC, 0x1A, 0x79, 0x6A, 0xB5, 0x02, 0x63, 0x79, 0x03, 0xE8, 0xA1, 0x8C, 0x6B, 0x9A, 0x1A, 0xF9, 0xDC, 0x30, 0x68, 0x22, 0x41, 0xB5, 0x81, 0x41, 0xC5, 0x82, 0xE9, 0xE8, 0xD6, 0x91, 0x4D, 0xD1, ++ 0xF4, 0x01, 0xBC, 0x05, 0x18, 0xBE, 0x7F, 0x01, 0x47, 0xB3, 0xA1, 0x35, 0xAB, 0x6D, 0x45, 0x89, 0x3B, 0x07, 0x51, 0xC7, 0xED, 0x8C, 0xA6, 0xE5, 0xA6, 0xF1, 0xAE, 0xFB, 0xD5, 0x52, 0x49, 0x24, ++ 0x3A, 0x20, 0x77, 0x26, 0x93, 0xCA, 0xEB, 0x7F, 0xA1, 0xE4, 0x86, 0xF4, 0x63, 0x1E, 0xD4, 0x9D, 0x7D, 0xA0, 0x23, 0x18, 0x3B, 0xC2, 0x14, 0xEE, 0x22, 0xD8, 0x94, 0x83, 0xD2, 0xC9, 0xD2, 0x17, ++ 0x63, 0x79, 0xD8, 0x29, 0x55, 0xE9, 0x2D, 0x93, 0xC0, 0xD4, 0x12, 0x05, 0xAB, 0xAA, 0x72, 0x5E, 0x4D, 0x89, 0x97, 0xCA, 0xB1, 0x4B, 0x45, 0xF0, 0x94, 0xD0, 0xAA, 0xA6, 0x4D, 0x37, 0xBD, 0x82, ++ 0xA7, 0x4B, 0x3D, 0xFA, 0xA4, 0x04, 0xD9, 0x43, 0x1C, 0x1A, 0x49, 0xDB, 0x8A, 0x29, 0x77, 0xF1, 0xCE, 0x24, 0x5A, 0xB2, 0xB1, 0x23, 0x69, 0xB3, 0x4E, 0xE8, 0xEB, 0x01, 0x7A, 0xE2, 0xF0, 0x7F, ++ 0xB4, 0xA5, 0x56, 0xF6, 0xE9, 0x44, 0x16, 0xE1, 0xA5, 0x4C, 0x08, 0x50, 0x28, 0x8D, 0x24, 0xBA, 0x57, 0x9F, 0x59, 0xA4, 0xDF, 0xAF, 0xAC, 0xA8, 0xF9, 0x87, 0xD4, 0x29, 0x5F, 0x2F, 0xF6, 0xEC, ++ 0x31, 0x6A, 0x7E, 0x65, 0xD1, 0xC6, 0x67, 0x79, 0x5B, 0x9E, 0xF9, 0x87, 0x05, 0x25, 0x5A, 0x4B, 0xC3, 0x40, 0x97, 0xBC, 0xDD, 0x99, 0x3B, 0xAE, 0x4D, 0x86, 0x79, 0x6A, 0x79, 0x93, 0x52, 0xB7, ++ 0xBF, 0xC0, 0xD2, 0x2A, 0xD1, 0x7C, 0x6B, 0x68, 0xA3, 0x5A, 0x2B, 0x1C, 0x6B, 0xA1, 0x70, 0x6B, 0x0F, 0x37, 0xC7, 0xED, 0x09, 0x76, 0xBA, 0x2A, 0xFB, 0xFC, 0xF1, 0x93, 0x0B, 0x77, 0x3C, 0xEB, ++ 0x06, 0x44, 0x80, 0x18, 0xBD, 0x43, 0x14, 0xBE, 0x3E, 0xF1, 0x35, 0x4F, 0xC2, 0xD1, 0xAA, 0x05, 0xEF, 0xFA, 0x54, 0x46, 0x20, 0x21, 0xC5, 0x20, 0x74, 0xC6, 0xE4, 0xA6, 0x34, 0x65, 0xE4, 0x4F, ++ 0xBC, 0x53, 0xBC, 0x64, 0x3E, 0x48, 0x5E, 0xD0, 0xAD, 0xE0, 0x76, 0xFB, 0xB4, 0x9F, 0x0F, 0x64, 0xA3, 0xE2, 0x2E, 0xD1, 0xF8, 0xCD, 0x91, 0xC1, 0x18, 0xFB, 0x30, 0x61, 0x12, 0x0F, 0x20, 0x3F, ++ 0xC9, 0x25, 0x7C, 0xE3, 0x06, 0xA5, 0x63, 0x78, 0x73, 0xD5, 0x4B, 0x68, 0x13, 0xD5, 0xA6, 0xFF, 0x60, 0x4A, 0x8B, 0xA2, 0x5F, 0xEB, 0x1E, 0xD1, 0xF8, 0x07, 0xEB, 0x93, 0x9D, 0xA4, 0x5D, 0xBD, ++ 0xE0, 0xE6, 0xE3, 0x1B, 0x57, 0xC7, 0x6E, 0xF0, 0xD3, 0x3D, 0x93, 0x61, 0x20, 0xA6, 0x43, 0x3D, 0xE5, 0xA4, 0x03, 0x97, 0xF5, 0x01, 0x8A, 0x49, 0x21, 0x34, 0x57, 0x23, 0xA1, 0xB5, 0xEF, 0x49, ++ 0x06, 0xB7, 0x15, 0x10, 0x1A, 0x01, 0x72, 0x8E, 0x00, 0x1A, 0x1A, 0x95, 0xE4, 0x36, 0x66, 0xFF, 0xE4, 0x39, 0x3F, 0xC9, 0xB8, 0x72, 0xE7, 0x72, 0x9E, 0x9F, 0x4B, 0x50, 0x82, 0xF3, 0xB8, 0x41, ++ 0x82, 0x58, 0xBB, 0x97, 0xE7, 0x36, 0x0A, 0xE5, 0x8A, 0xAC, 0x97, 0x6A, 0xE9, 0x20, 0xCD, 0xA1, 0x59, 0x2B, 0xF4, 0x2B, 0x06, 0x9E, 0x70, 0x10, 0x5D, 0x08, 0x18, 0x2A, 0x32, 0x57, 0xED, 0xAF, ++ 0x75, 0x5D, 0x98, 0xF0, 0xFF, 0x20, 0xD1, 0x39, 0xD1, 0x9C, 0x1D, 0x3E, 0x8F, 0xD4, 0x24, 0x60, 0x94, 0x20, 0xAC, 0x86, 0x00, 0x31, 0x76, 0x18, 0xF5, 0x1F, 0xEB, 0x55, 0xBA, 0x8C, 0xD0, 0x2C, ++ 0x2F, 0x8F, 0x0C, 0x54, 0xB2, 0x0D, 0x4A, 0xA2, 0xC3, 0xBB, 0x82, 0x65, 0xA7, 0x37, 0x51, 0x27, 0xBD, 0x11, 0x84, 0xBE, 0x38, 0xC1, 0xD4, 0x71, 0x2A, 0x58, 0x95, 0x63, 0x82, 0x35, 0x08, 0xC6, ++ 0x9B, 0x3C, 0xDF, 0x66, 0x0E, 0x4F, 0x7E, 0x4B, 0x45, 0xBA, 0xAA, 0x30, 0x90, 0xE3, 0x75, 0xCE, 0x59, 0xB8, 0x44, 0xE4, 0x37, 0x7B, 0x4B, 0x46, 0xD9, 0x4B, 0x5A, 0x22, 0x7C, 0x20, 0x7A, 0xB9, ++ 0x4B, 0x55, 0xE0, 0x67, 0xFF, 0x5B, 0xF3, 0xEB, 0xCE, 0x81, 0x0A, 0x7B, 0x92, 0xB9, 0xF4, 0xD3, 0xB5, 0xAC, 0x98, 0xEF, 0x1A, 0x17, 0x5A, 0xD2, 0xC4, 0x39, 0x1B, 0xAC, 0x9A, 0x70, 0xE1, 0xA6, ++ 0x25, 0x56, 0x3A, 0x9D, 0x5B, 0x59, 0x44, 0x80, 0x1D, 0xD2, 0xDB, 0xCC, 0xFC, 0xDB, 0xE2, 0xD7, 0xA5, 0x17, 0x4F, 0xF3, 0xD1, 0xFC, 0x61, 0xED, 0x47, 0x87, 0xEA, 0x99, 0x17, 0xDC, 0x27, 0x23, ++ 0x6F, 0x7B, 0x38, 0x30, 0x65, 0xD7, 0xB3, 0x8E, 0x28, 0xC1, 0x03, 0xF6, 0xDD, 0x72, 0x8E, 0xB2, 0x88, 0x23, 0x58, 0xB0, 0x36, 0xA6, 0xB1, 0xE7, 0xFD, 0xC3, 0x77, 0x1F, 0xD1, 0xFE, 0xD5, 0xFF, ++ 0xA2, 0x59, 0x6D, 0x2B, 0x9F, 0xD8, 0xDA, 0x08, 0x92, 0xE2, 0x42, 0x7C, 0xA0, 0x87, 0xE9, 0xFE, 0x17, 0x4A, 0x66, 0x57, 0xA1, 0x8D, 0xC6, 0x69, 0x4C, 0x7D, 0x73, 0x7E, 0x49, 0xD2, 0xC6, 0x8D, ++ 0x07, 0xA2, 0x3B, 0x51, 0xC7, 0x67, 0xF4, 0x66, 0x5F, 0xCB, 0x85, 0x5A, 0x9B, 0x8C, 0x84, 0xC4, 0xD7, 0x08, 0x2E, 0x3C, 0x5A, 0x73, 0x4B, 0xBA, 0xF8, 0x45, 0x76, 0x64, 0x74, 0x0A, 0x51, 0x73, ++ 0xEE, 0xB6, 0x8A, 0xC4, 0xFB, 0x83, 0x4B, 0x16, 0x14, 0x8A, 0xAE, 0x1E, 0xAA, 0xFE, 0xC3, 0x42, 0x73, 0x0C, 0xB8, 0x7B, 0xDD, 0x1F, 0xAB, 0xAE, 0xAC, 0xA9, 0xA0, 0x55, 0x0D, 0xCD, 0x92, 0x4F, ++ 0xCD, 0x70, 0x0A, 0xCF, 0x2B, 0xB8, 0x30, 0x5B, 0xD9, 0x90, 0xDE, 0x98, 0x89, 0xE7, 0xDF, 0x95, 0x7A, 0x70, 0xEF, 0x25, 0xEA, 0xFF, 0x34, 0x52, 0xFE, 0xFA, 0xEC, 0xFB, 0x1C, 0x20, 0x9E, 0xD6, ++ 0x98, 0xB9, 0x29, 0x5D, 0x24, 0xCA, 0x18, 0xF6, 0xEF, 0xFC, 0x1F, 0x38, 0xD4, 0xED, 0x7E, 0x9E, 0x2E, 0x60, 0x6D, 0x94, 0x7D, 0xF2, 0x6C, 0x5E, 0xEA, 0x72, 0xDD, 0x3A, 0xED, 0x4D, 0xDB, 0x17, ++ 0xA6, 0x9E, 0x96, 0xAE, 0xE7, 0x3C, 0x7A, 0xFD, 0xA6, 0xD5, 0x52, 0x8C, 0xE8, 0x50, 0xF6, 0x4A, 0x0F, 0xDF, 0x91, 0x13, 0xA4, 0x04, 0xE8, 0xB7, 0x89, 0x72, 0xD1, 0x1A, 0x5E, 0x05, 0x6C, 0x14, ++ 0xA8, 0x8E, 0x64, 0x72, 0x58, 0x47, 0xC8, 0x23, 0x80, 0x3A, 0xEE, 0xC9, 0x7E, 0x51, 0x4E, 0x21, 0xCC, 0x6F, 0xDA, 0x9B, 0xF8, 0x04, 0x9B, 0xEA, 0x60, 0x23, 0xAF, 0x26, 0xBD, 0xCD, 0xA4, 0x35, ++ 0x33, 0xD2, 0x72, 0xE6, 0xF8, 0x34, 0x53, 0x85, 0xBA, 0x73, 0x96, 0x40, 0x26, 0x53, 0x6C, 0x87, 0x65, 0xE5, 0xD3, 0x27, 0x45, 0x64, 0x4E, 0xE3, 0x86, 0x4B, 0xD1, 0xE3, 0x24, 0x85, 0xA3, 0x16, ++ 0x42, 0xBE, 0xDF, 0x6B, 0x18, 0xD9, 0x41, 0xF3, 0x77, 0x79, 0x11, 0xB5, 0x97, 0xB3, 0x3E, 0xD0, 0x70, 0xA1, 0x8F, 0x5E, 0xD1, 0x29, 0x69, 0xD5, 0xF2, 0xAD, 0x3B, 0xDF, 0x30, 0xD4, 0xDB, 0xE1, ++ 0x14, 0x48, 0x90, 0x12, 0xEE, 0xB7, 0x77, 0x6C, 0x81, 0x5D, 0x79, 0x9B, 0xBC, 0xDA, 0x08, 0xC8, 0xB1, 0xD6, 0x92, 0xBC, 0x7E, 0x50, 0x1A, 0x79, 0x24, 0x91, 0x98, 0x29, 0xD1, 0x8E, 0x24, 0x07, ++ 0xDB, 0x13, 0xDC, 0x7C, 0xB2, 0x4E, 0xB1, 0x50, 0xC4, 0x3C, 0x69, 0x5C, 0xC9, 0xD6, 0xBA, 0x71, 0x4E, 0xB2, 0x3F, 0xF7, 0xE5, 0x37, 0x7B, 0x9D, 0xE1, 0x88, 0x95, 0xB4, 0xF9, 0x29, 0x7D, 0x9F, ++ 0x60, 0xDD, 0xA9, 0x76, 0x3B, 0x93, 0xAB, 0xB9, 0xBD, 0x3B, 0x8A, 0x0D, 0x82, 0xB2, 0xF1, 0x97, 0xAC, 0x68, 0xA1, 0xA2, 0xC1, 0xFE, 0x93, 0xF9, 0x7F, 0xCD, 0x03, 0x5D, 0x97, 0x3A, 0x9C, 0x8E, ++ 0xD4, 0xD5, 0x48, 0x71, 0x1E, 0x24, 0xE8, 0x59, 0x46, 0x75, 0xDE, 0x0C, 0xD3, 0x51, 0x76, 0x69, 0x49, 0xE6, 0x91, 0x78, 0x57, 0x0B, 0xEE, 0x83, 0xF9, 0xB4, 0x51, 0x0E, 0x39, 0x14, 0xD2, 0x7D, ++ 0x4E, 0xEF, 0xF2, 0x79, 0xC3, 0x08, 0x3F, 0x65, 0x2B, 0x87, 0x17, 0x24, 0x16, 0xB1, 0x70, 0x4C, 0x75, 0xA6, 0x9D, 0x05, 0x14, 0x91, 0xD6, 0x2A, 0x36, 0x11, 0x8D, 0x5F, 0x3B, 0x76, 0x1E, 0x32, ++ 0xBA, 0x0E, 0x5C, 0x65, 0xEE, 0x2C, 0x81, 0xA9, 0xF5, 0xB5, 0x55, 0xC8, 0x50, 0x89, 0x18, 0xBB, 0xC0, 0x02, 0x09, 0xCD, 0xBD, 0x6C, 0x54, 0x06, 0xA8, 0xCC, 0x1C, 0x00, 0x29, 0x24, 0x0D, 0x10, ++ 0x76, 0xE7, 0x22, 0x3E, 0x26, 0x89, 0x8C, 0x27, 0xC9, 0x75, 0x07, 0x97, 0xD6, 0x41, 0xF6, 0x5F, 0x2C, 0x92, 0x4A, 0x07, 0xCF, 0xCD, 0x02, 0x46, 0x1C, 0x7A, 0x27, 0x51, 0x91, 0xDA, 0x37, 0x2E, ++ 0x33, 0x9A, 0xCD, 0xDA, 0x38, 0xFA, 0x3B, 0x01, 0x4F, 0x06, 0x7E, 0xBD, 0x22, 0x31, 0xE1, 0x87, 0xD6, 0x0B, 0xB7, 0x37, 0xB7, 0x5D, 0x3E, 0xEA, 0x8C, 0x88, 0xB6, 0xA1, 0xEB, 0xCF, 0x8B, 0x25, ++ 0xAF, 0xCB, 0xB0, 0x71, 0x23, 0x6F, 0x64, 0x40, 0xE5, 0x65, 0xCB, 0xF3, 0xAF, 0x26, 0x32, 0xA2, 0xC9, 0xF6, 0x2F, 0xF3, 0x8B, 0xD8, 0x82, 0x08, 0x08, 0xE8, 0xAB, 0x59, 0x29, 0xED, 0x2B, 0x16, ++ 0x9A, 0x7F, 0xE8, 0xB8, 0x3C, 0x92, 0x59, 0x19, 0xC9, 0xBC, 0xAA, 0x4B, 0x2F, 0xE6, 0x4F, 0x4D, 0x4C, 0xED, 0x8F, 0x0F, 0xC9, 0xAA, 0xD8, 0x54, 0xC3, 0xE7, 0x5D, 0xF0, 0x51, 0x3C, 0x5E, 0x24, ++ 0x76, 0x4E, 0xAD, 0xEE, 0x40, 0xA1, 0xCA, 0xE8, 0x9C, 0x42, 0x56, 0xF4, 0x44, 0x54, 0x1A, 0x51, 0x54, 0x5A, 0xCE, 0xEC, 0x09, 0xA9, 0xA0, 0xD8, 0xF4, 0x81, 0xC5, 0xE1, 0x56, 0x90, 0xE7, 0x49, ++ 0x67, 0x40, 0x98, 0x13, 0x99, 0x5D, 0x02, 0x6F, 0x02, 0x02, 0x38, 0x5F, 0xBF, 0x7D, 0xDA, 0x81, 0x74, 0x79, 0x1E, 0x9E, 0x28, 0xA9, 0x01, 0x04, 0x76, 0x54, 0xE0, 0xAE, 0x54, 0x5A, 0x90, 0xAC, ++ 0x56, 0xA1, 0x92, 0x3A, 0x8D, 0x83, 0xAB, 0x8D, 0x08, 0x5B, 0x49, 0xC5, 0xBA, 0x0A, 0xBB, 0x68, 0x3E, 0x72, 0xBA, 0x9F, 0x03, 0xFC, 0xC7, 0x20, 0x01, 0x24, 0x40, 0x87, 0xF4, 0xF9, 0xB7, 0xE2, ++ 0xE9, 0xD0, 0xE8, 0x20, 0x66, 0x44, 0xC1, 0x36, 0x60, 0xD2, 0x81, 0xBD, 0x7B, 0xB1, 0x65, 0x32, 0x86, 0x38, 0xFF, 0xA3, 0x13, 0x60, 0x0B, 0x30, 0x85, 0xDE, 0x3B, 0x9A, 0xA2, 0x20, 0xBA, 0xD0, ++ 0x3C, 0x08, 0x90, 0xFA, 0x3C, 0x90, 0x0E, 0x49, 0x16, 0x21, 0x87, 0xC0, 0x2E, 0x7E, 0xD7, 0x3D, 0xCF, 0x50, 0xF5, 0xB0, 0x8C, 0xA5, 0xEB, 0x8E, 0xDE, 0x36, 0x7A, 0x28, 0xAE, 0x94, 0xFF, 0x29, ++ 0xB3, 0x62, 0x98, 0x72, 0xAD, 0x99, 0xEA, 0x2B, 0x22, 0x67, 0x37, 0x4D, 0xDB, 0x56, 0x41, 0x29, 0x80, 0x3A, 0x78, 0xDA, 0xBE, 0xC9, 0x07, 0x16, 0xC3, 0x13, 0xF7, 0xAB, 0xCE, 0xC4, 0xD3, 0x43, ++ 0x0E, 0x2E, 0xC3, 0x80, 0x3F, 0x91, 0x9C, 0x85, 0x65, 0x94, 0x0A, 0x3A, 0xCC, 0x80, 0x89, 0x9E, 0xDB, 0xB4, 0x86, 0xED, 0x52, 0xBF, 0xC1, 0x9D, 0x0E, 0xA3, 0xC5, 0x82, 0x77, 0x5E, 0x29, 0x15, ++ 0x4E, 0x99, 0xF4, 0x41, 0x89, 0x7F, 0x09, 0x96, 0xAA, 0xC5, 0xC5, 0xCA, 0x5B, 0xBB, 0xF4, 0x97, 0x23, 0x48, 0x32, 0xC8, 0xB5, 0x79, 0x1C, 0xB8, 0xC8, 0xAC, 0xEA, 0x8D, 0xB3, 0xE0, 0x06, 0x50, ++ }, ++ .pkcs8_len = 0, ++ .spki_len = 0, ++ .msg_len = 66, ++ .msg = { ++ 0x22, 0x5D, 0x5C, 0xE2, 0xCE, 0xAC, 0x61, 0x93, 0x0A, 0x07, 0x50, 0x3F, 0xB5, 0x9F, 0x7C, 0x2F, 0x93, 0x6A, 0x3E, 0x07, 0x54, 0x81, 0xDA, 0x3C, 0xA2, 0x99, 0xA8, 0x0F, 0x8C, 0x5D, 0xF9, 0x22, ++ 0x3A, 0x07, 0x3E, 0x7B, 0x90, 0xE0, 0x2E, 0xBF, 0x98, 0xCA, 0x22, 0x27, 0xEB, 0xA3, 0x8C, 0x1A, 0xB2, 0x56, 0x82, 0x09, 0xE4, 0x6D, 0xBA, 0x96, 0x18, 0x69, 0xC6, 0xF8, 0x39, 0x83, 0xB1, 0x7D, ++ 0xCD, 0x49, ++ }, ++ .sig_len = 4668, ++ .sig = { ++ 0x8B, 0xCE, 0xDB, 0xF2, 0xD6, 0x06, 0x90, 0x0B, 0x70, 0xFD, 0xF9, 0x1F, 0x0F, 0x93, 0xE8, 0x36, 0x56, 0x40, 0x89, 0x72, 0xBB, 0x47, 0xE0, 0x17, 0x95, 0x13, 0x74, 0x62, 0x46, 0x38, 0x0C, 0xAE, ++ 0x70, 0x9A, 0x59, 0x62, 0x2B, 0x9B, 0x23, 0x2D, 0x5B, 0x0D, 0x2D, 0xF5, 0x11, 0x71, 0xCE, 0x64, 0x42, 0x5B, 0x04, 0x38, 0x93, 0x24, 0xA0, 0xA0, 0x03, 0x84, 0x17, 0x00, 0x28, 0x74, 0x50, 0xF7, ++ 0x5A, 0x81, 0x7B, 0x1C, 0x1D, 0x63, 0xCF, 0xB5, 0x0A, 0xF6, 0x1D, 0x8A, 0xF1, 0x9C, 0xC0, 0xFC, 0xB1, 0xA6, 0x3D, 0x53, 0x72, 0xB8, 0xE7, 0xFF, 0xD0, 0xAF, 0xCB, 0xAC, 0x05, 0xF6, 0x3A, 0xC0, ++ 0x55, 0xDE, 0x27, 0x8F, 0x46, 0x25, 0x22, 0x34, 0x1C, 0x3E, 0xD6, 0xA1, 0xEE, 0x74, 0x6E, 0x3A, 0xCA, 0x17, 0x4E, 0xA5, 0x1E, 0x0D, 0xCD, 0xEC, 0x02, 0xBB, 0x5C, 0x68, 0x46, 0x88, 0x64, 0x54, ++ 0x75, 0x90, 0xE0, 0xDE, 0xF0, 0x76, 0x11, 0x1C, 0x3B, 0x45, 0xD1, 0xFA, 0xA7, 0xF3, 0xF3, 0x4C, 0x2E, 0x63, 0x6D, 0x68, 0xB4, 0xF7, 0xD2, 0xBC, 0x04, 0xB7, 0x38, 0x39, 0x59, 0xE0, 0x9E, 0xF7, ++ 0xB8, 0x4B, 0x04, 0x5C, 0x29, 0xEB, 0xD5, 0x0A, 0xE8, 0x87, 0x42, 0x71, 0xAC, 0x3A, 0x7C, 0xB1, 0xEE, 0x94, 0xC5, 0x53, 0x9A, 0xD0, 0x7E, 0x7E, 0xF9, 0xF6, 0x4D, 0x30, 0x16, 0xDA, 0xF9, 0x66, ++ 0x1F, 0xEE, 0x09, 0xB9, 0xBF, 0x27, 0xB0, 0xFF, 0x9B, 0xEA, 0x68, 0x90, 0x98, 0x04, 0x13, 0xAC, 0x23, 0x42, 0xC0, 0x9B, 0x4A, 0x65, 0xA8, 0x3B, 0x58, 0x3F, 0x3A, 0x33, 0x23, 0x04, 0x88, 0xCC, ++ 0x43, 0xAE, 0x30, 0x0D, 0x12, 0xE9, 0xB0, 0x55, 0xC6, 0x5B, 0xD9, 0xC3, 0xA5, 0x1A, 0xA2, 0x7E, 0xF8, 0xBD, 0x04, 0x76, 0x4E, 0x78, 0xDD, 0x8F, 0x1C, 0x62, 0xC6, 0x5C, 0x7F, 0x7E, 0x86, 0x30, ++ 0xD0, 0xC8, 0x6B, 0xEA, 0x6A, 0x87, 0xFF, 0x8D, 0x2D, 0x6E, 0x16, 0x70, 0x24, 0x8C, 0x89, 0xE1, 0x8E, 0x77, 0x5D, 0xC7, 0x93, 0x1E, 0xC5, 0xAA, 0x3B, 0xAB, 0x0F, 0xFC, 0xC4, 0x49, 0xE1, 0xB2, ++ 0x0F, 0x42, 0x2C, 0xA4, 0xDD, 0x2F, 0xD2, 0x9B, 0x40, 0x51, 0x0B, 0xB4, 0x1D, 0x63, 0x6B, 0x37, 0x22, 0x2D, 0xE4, 0xA0, 0x85, 0x55, 0xC0, 0x4F, 0xBA, 0x4B, 0x3C, 0x0F, 0x89, 0x7C, 0x99, 0x8A, ++ 0x2C, 0xE2, 0x16, 0x1B, 0xD1, 0xB3, 0x5D, 0x20, 0xBF, 0x93, 0xA9, 0xD4, 0xFF, 0x8C, 0x28, 0xD2, 0x95, 0xB8, 0x4F, 0x41, 0xF7, 0xF2, 0x74, 0x04, 0x71, 0xF2, 0x76, 0xEE, 0xA4, 0x66, 0xF5, 0xE3, ++ 0xAC, 0xF8, 0x1B, 0xD5, 0xB6, 0xE9, 0x3B, 0xE4, 0x5F, 0x81, 0x15, 0x85, 0x64, 0xF9, 0x0D, 0x3B, 0xAD, 0x75, 0x52, 0xF5, 0x77, 0x72, 0x51, 0x60, 0xE9, 0x46, 0x7C, 0xBA, 0xEC, 0x5C, 0x8D, 0x86, ++ 0x2B, 0xEA, 0x9D, 0x83, 0xE1, 0xC1, 0x83, 0x97, 0xC4, 0x1D, 0x68, 0x68, 0x17, 0x74, 0x2E, 0xF5, 0x7E, 0x74, 0x33, 0xC8, 0xEB, 0x9B, 0xA1, 0x56, 0x9B, 0xB7, 0xF4, 0x1A, 0x8E, 0xD8, 0x89, 0xE2, ++ 0x23, 0xBB, 0xCA, 0x15, 0x3E, 0xBC, 0x02, 0xC0, 0x46, 0x9C, 0x71, 0xD6, 0x63, 0xC4, 0xD2, 0x85, 0x00, 0x8B, 0xF1, 0x85, 0x49, 0x24, 0x3D, 0x0E, 0x46, 0xC8, 0x16, 0xD0, 0xBE, 0x77, 0x50, 0x2C, ++ 0x79, 0x5C, 0x16, 0x8E, 0x07, 0x53, 0x52, 0xFA, 0x7D, 0xDB, 0xF9, 0xD0, 0xF2, 0xBE, 0xB4, 0x52, 0x8B, 0x48, 0xB5, 0xAB, 0xB2, 0x81, 0x0E, 0x37, 0x7F, 0x53, 0x30, 0xB3, 0xE2, 0xE6, 0x1B, 0xFF, ++ 0x7B, 0xE9, 0x6B, 0xDC, 0xAB, 0xA5, 0xB5, 0x6B, 0x6C, 0xA5, 0x7C, 0x66, 0x0E, 0x54, 0xE4, 0x49, 0xEC, 0x3B, 0x4C, 0xA2, 0x66, 0x4F, 0xD3, 0xB7, 0xC4, 0xA8, 0x91, 0x97, 0x3E, 0x2A, 0x31, 0xCC, ++ 0xF8, 0x27, 0x89, 0x2A, 0x1F, 0x75, 0x7F, 0x68, 0x0B, 0x36, 0xF4, 0x0B, 0x08, 0x2C, 0x6A, 0xD5, 0x06, 0x02, 0x1B, 0xAB, 0x7F, 0xE2, 0x2D, 0x46, 0xF6, 0x83, 0x93, 0x34, 0x18, 0x58, 0x67, 0xC0, ++ 0x16, 0x26, 0xAC, 0x63, 0xA4, 0x16, 0x28, 0x58, 0xA9, 0xDA, 0xC3, 0x25, 0x81, 0x68, 0xDF, 0x61, 0xCB, 0x66, 0xA3, 0xFF, 0x9F, 0xD4, 0x38, 0x76, 0x59, 0x06, 0x19, 0xDB, 0xB3, 0xE5, 0xBE, 0x1E, ++ 0xBA, 0x5D, 0x67, 0x59, 0x85, 0xE3, 0xBA, 0x6E, 0xC9, 0x84, 0x01, 0x1F, 0x3E, 0x23, 0xCB, 0xFC, 0xDD, 0x7A, 0xB5, 0xE5, 0x50, 0xC6, 0x1A, 0x0B, 0xAA, 0xBA, 0xBC, 0xBF, 0x16, 0xFA, 0xBC, 0x41, ++ 0x4F, 0xCF, 0x4B, 0xC1, 0x43, 0x4B, 0xAA, 0x03, 0xAE, 0xDD, 0xB8, 0x15, 0x6D, 0xA3, 0x58, 0x71, 0xD4, 0x83, 0xF1, 0x94, 0xAC, 0x3B, 0xF9, 0x18, 0xC9, 0xB7, 0x7B, 0xBA, 0x65, 0x95, 0x97, 0xAD, ++ 0x5B, 0xA2, 0xB8, 0x95, 0x4E, 0xF4, 0x12, 0x1F, 0xDA, 0xDF, 0x0A, 0xE5, 0xA1, 0x2D, 0x5B, 0xDF, 0x3C, 0xBB, 0xD8, 0xEA, 0x5C, 0x76, 0xBE, 0x81, 0x6E, 0x7E, 0x9A, 0x79, 0x92, 0x70, 0x16, 0x5E, ++ 0x7E, 0x9F, 0xD7, 0xCB, 0x70, 0x18, 0x80, 0x81, 0x1E, 0xDE, 0x73, 0xF6, 0x12, 0x1E, 0xEC, 0xEE, 0x27, 0x1A, 0xE4, 0xF1, 0x8D, 0xF1, 0x9F, 0x28, 0xA8, 0x10, 0xAB, 0x43, 0x23, 0x2A, 0xA8, 0x40, ++ 0xF6, 0xDD, 0xCC, 0xB8, 0x6A, 0xE3, 0x96, 0xFE, 0x54, 0xA5, 0x79, 0x77, 0x8F, 0x96, 0xC2, 0xFA, 0x85, 0x70, 0x62, 0x04, 0x7F, 0xF5, 0x3C, 0xA5, 0x42, 0xC4, 0xBA, 0xC1, 0x42, 0x0D, 0x0B, 0x2C, ++ 0x52, 0xA4, 0x2E, 0xAD, 0xBA, 0xAA, 0x58, 0x5A, 0x44, 0x02, 0x73, 0x17, 0xA7, 0x66, 0x6E, 0x47, 0x4C, 0x55, 0xBF, 0x6F, 0xE0, 0x54, 0xE4, 0x22, 0x92, 0x61, 0x79, 0x88, 0xEE, 0x0A, 0xBF, 0xE2, ++ 0x28, 0xC7, 0x1B, 0xA4, 0x74, 0x93, 0x26, 0x8C, 0x32, 0x83, 0xBB, 0x62, 0xE4, 0x0A, 0xA0, 0x5D, 0xEF, 0x2C, 0x10, 0xC6, 0x12, 0x1F, 0x76, 0x7F, 0x33, 0xB1, 0x48, 0x9A, 0x1D, 0x20, 0x48, 0x2A, ++ 0x3D, 0x8D, 0xF8, 0x89, 0x1D, 0xDD, 0x2A, 0x9B, 0xE4, 0xBD, 0x2B, 0x00, 0x73, 0xC5, 0x92, 0x92, 0x34, 0x4A, 0x69, 0x92, 0x79, 0x73, 0x8C, 0xB6, 0xDB, 0x24, 0xA8, 0x97, 0x63, 0x88, 0x7F, 0x2D, ++ 0x78, 0xE7, 0xE2, 0x6A, 0x04, 0x0E, 0xC2, 0x77, 0x7A, 0xAD, 0xED, 0xCA, 0xE5, 0xB2, 0x62, 0x72, 0xAE, 0x40, 0xCB, 0x65, 0x67, 0xC4, 0x16, 0x72, 0x1D, 0xD4, 0x5C, 0x7B, 0x8F, 0x75, 0x1B, 0x82, ++ 0x13, 0x11, 0x80, 0xEA, 0x9E, 0x80, 0xEA, 0x97, 0x26, 0x8A, 0x2C, 0x2E, 0x00, 0x9A, 0xD7, 0xBE, 0x1F, 0xDD, 0x4F, 0xD2, 0xA6, 0x17, 0xF7, 0xA8, 0xD7, 0xE2, 0x6B, 0x6D, 0x94, 0x37, 0x30, 0x99, ++ 0x81, 0xB5, 0x01, 0x3F, 0xC0, 0x72, 0xBE, 0x94, 0xEB, 0x2F, 0x03, 0x6D, 0xD9, 0x0A, 0x78, 0x8D, 0xC5, 0xC1, 0x42, 0xDF, 0x50, 0x5A, 0xCD, 0x26, 0xA0, 0x0D, 0xAF, 0xDC, 0x30, 0xF5, 0x19, 0x0B, ++ 0x0A, 0x91, 0xBC, 0xBE, 0x49, 0x58, 0x7F, 0x89, 0xB1, 0xD9, 0x99, 0xDE, 0x49, 0x00, 0x9C, 0x0B, 0xD7, 0xEB, 0x95, 0x5E, 0xB3, 0x08, 0x86, 0x73, 0x6B, 0x6D, 0xD4, 0xDC, 0x1D, 0x8D, 0x1D, 0xA6, ++ 0x80, 0x69, 0x02, 0x39, 0x87, 0x9B, 0x3D, 0x6D, 0xD7, 0x64, 0x72, 0xF3, 0xD6, 0xE3, 0x3B, 0xC8, 0xFD, 0x90, 0xE4, 0x47, 0xE7, 0x0F, 0xD7, 0xE9, 0xF5, 0x0B, 0xF9, 0xA1, 0xA0, 0xAC, 0x9D, 0x88, ++ 0x32, 0xA4, 0x36, 0xE8, 0x9E, 0x36, 0x44, 0x03, 0x75, 0xF5, 0xDE, 0x88, 0xDC, 0x70, 0xD9, 0x17, 0xCE, 0x13, 0x22, 0x35, 0xB9, 0x1B, 0x20, 0xAE, 0x41, 0x1B, 0x86, 0xC2, 0x19, 0xB5, 0xA3, 0x4D, ++ 0xB0, 0x29, 0x16, 0x80, 0xE6, 0x15, 0x54, 0xDD, 0x50, 0xF3, 0x26, 0x1F, 0xEA, 0x06, 0xB5, 0xF1, 0x74, 0xEA, 0x6B, 0x13, 0x65, 0x0C, 0x97, 0x9C, 0x5A, 0x72, 0x8F, 0x13, 0xF8, 0xDA, 0x45, 0x57, ++ 0xEF, 0x8D, 0x9A, 0xF6, 0x41, 0x22, 0x8F, 0xE5, 0xDD, 0x7D, 0x92, 0x28, 0xD7, 0x8C, 0x9A, 0xE8, 0x7E, 0xFE, 0xEA, 0x22, 0x4C, 0x02, 0x12, 0x5E, 0xC2, 0x86, 0xBB, 0x85, 0xC8, 0xB1, 0x2A, 0xCB, ++ 0x40, 0xF7, 0xEA, 0x12, 0xB0, 0x26, 0xC1, 0xE6, 0x11, 0xEF, 0x99, 0xE0, 0x07, 0x7E, 0xF8, 0x04, 0xD6, 0x56, 0xD0, 0x6B, 0xB4, 0x0C, 0x50, 0xDC, 0xCF, 0xC5, 0x98, 0xC9, 0xD4, 0x04, 0xBF, 0x6B, ++ 0x56, 0x4F, 0x02, 0xE1, 0x8B, 0x48, 0x2C, 0x7F, 0xB7, 0x4C, 0x68, 0x13, 0xA8, 0xE9, 0x75, 0x8E, 0x6F, 0xCB, 0xF2, 0x28, 0x9C, 0x8F, 0x24, 0x5D, 0xD2, 0x41, 0x67, 0x21, 0x89, 0x9D, 0x7A, 0xD4, ++ 0xC7, 0x90, 0xD0, 0x0E, 0x47, 0xF5, 0x14, 0x8C, 0xAC, 0x29, 0x0C, 0x66, 0x07, 0x21, 0x6B, 0xD6, 0x6F, 0x2A, 0x6C, 0xA1, 0xC4, 0xE7, 0x6F, 0x9C, 0xC0, 0x15, 0x08, 0x9D, 0x08, 0xF8, 0x39, 0xA0, ++ 0x95, 0x2F, 0x3B, 0x3C, 0xA8, 0x23, 0x58, 0x16, 0x44, 0xAD, 0x7D, 0xDA, 0x18, 0xC0, 0xBC, 0xC6, 0xE7, 0x46, 0xA7, 0x31, 0xCA, 0xE4, 0x28, 0xCE, 0x7A, 0xD4, 0xCC, 0x81, 0x3B, 0xA9, 0x5D, 0x83, ++ 0xDC, 0x7D, 0x6E, 0xE0, 0xA3, 0xCD, 0xDC, 0xAB, 0x94, 0x35, 0x00, 0x03, 0x45, 0xC7, 0x1A, 0x09, 0x16, 0x28, 0x2F, 0xD5, 0x3C, 0x4A, 0x86, 0x99, 0xD5, 0x6E, 0x55, 0x20, 0x74, 0x2F, 0x5D, 0xA8, ++ 0x1C, 0xAA, 0xFA, 0x16, 0x78, 0x26, 0xCF, 0x38, 0x6E, 0xB7, 0x2C, 0xD5, 0x12, 0x6A, 0x59, 0xE2, 0x4F, 0x74, 0x00, 0x9B, 0xB0, 0x45, 0x6C, 0x8D, 0x58, 0x51, 0x9C, 0xD6, 0x7A, 0x9C, 0xE0, 0x9B, ++ 0xA8, 0x7F, 0x1C, 0xF0, 0x36, 0xEA, 0x9C, 0x7E, 0xDA, 0xD3, 0xBC, 0xD6, 0xDA, 0x32, 0x76, 0x51, 0x8A, 0xFB, 0xB0, 0x4D, 0xF9, 0xA7, 0xE7, 0x73, 0x32, 0x0E, 0xA4, 0x41, 0xA6, 0x2C, 0x64, 0xEA, ++ 0xEA, 0x8D, 0x42, 0xFC, 0x30, 0x80, 0x4B, 0xFF, 0xEC, 0xC9, 0xBC, 0x2D, 0x2F, 0x46, 0x19, 0x67, 0x56, 0x2D, 0x8D, 0x60, 0x84, 0xC9, 0xFE, 0xD5, 0x21, 0x34, 0xD4, 0xE0, 0x46, 0x90, 0x1E, 0xC0, ++ 0x31, 0x86, 0x83, 0x32, 0x6D, 0xD0, 0xC8, 0xBE, 0x19, 0xB9, 0xAE, 0x3F, 0x38, 0xFA, 0x2E, 0xE9, 0x46, 0x54, 0x02, 0x98, 0x5E, 0x8E, 0x27, 0x40, 0x67, 0x28, 0x9A, 0x79, 0xEB, 0x55, 0x91, 0x83, ++ 0x2D, 0x6E, 0xA6, 0x57, 0x8D, 0xF4, 0x77, 0xDF, 0x52, 0xE1, 0x26, 0x45, 0xD1, 0x86, 0x11, 0x24, 0x52, 0x99, 0x0E, 0xA7, 0x53, 0xE4, 0xFF, 0x3F, 0x0C, 0x3D, 0x0A, 0x14, 0x0F, 0xF7, 0x0F, 0x9B, ++ 0xBE, 0x9A, 0x75, 0x5B, 0xF2, 0x79, 0x50, 0x8A, 0x3C, 0x89, 0x8E, 0x40, 0x85, 0xFC, 0xFC, 0x39, 0x9C, 0x46, 0xC6, 0x82, 0x6D, 0x46, 0xF7, 0xF0, 0x06, 0x3E, 0xA5, 0xA4, 0xC7, 0xE6, 0x6D, 0xC5, ++ 0x60, 0x8E, 0x37, 0xAF, 0xAF, 0xF8, 0xFC, 0x43, 0xAE, 0x82, 0xC3, 0x36, 0x1C, 0xA8, 0xB2, 0xC6, 0xFB, 0xDE, 0xF1, 0x98, 0xFE, 0xFE, 0x74, 0x50, 0xE4, 0xDA, 0x66, 0x2F, 0x32, 0x42, 0xD5, 0x2C, ++ 0x0C, 0xE0, 0x2D, 0xBC, 0xAF, 0xF9, 0x44, 0x5A, 0x63, 0x0F, 0x85, 0x74, 0xEA, 0x0E, 0xE0, 0x97, 0x05, 0xC9, 0x1D, 0x39, 0xB8, 0xFA, 0xD7, 0x8C, 0x35, 0xEF, 0xDF, 0x54, 0x7F, 0xB1, 0x01, 0x8C, ++ 0xDC, 0x89, 0x2A, 0x0C, 0x81, 0x62, 0xFA, 0x7E, 0x07, 0x34, 0xC1, 0xEE, 0x07, 0xFA, 0xD9, 0x47, 0x52, 0x0A, 0xE9, 0x5B, 0x30, 0x22, 0x30, 0x3D, 0xDB, 0x32, 0xF3, 0xD8, 0xDC, 0x4D, 0x68, 0x21, ++ 0x21, 0x15, 0x13, 0xC6, 0x4E, 0x78, 0x5E, 0x4E, 0xE4, 0x38, 0x5C, 0xD3, 0x75, 0x7D, 0x68, 0x0A, 0xAE, 0xD5, 0x4E, 0x15, 0xFA, 0xE5, 0x27, 0xB4, 0x5A, 0xAE, 0x14, 0xD5, 0x63, 0x82, 0x57, 0x8C, ++ 0xA2, 0xE1, 0x16, 0xFD, 0x95, 0x4B, 0x56, 0xAC, 0x37, 0x8C, 0x70, 0x44, 0xDA, 0xCC, 0xB8, 0x86, 0xF3, 0x2B, 0xC3, 0xA5, 0x22, 0xBD, 0xEB, 0xEC, 0xBC, 0xAE, 0x5B, 0x77, 0x4B, 0x8E, 0x60, 0x34, ++ 0xFB, 0xB1, 0x15, 0x6D, 0xE5, 0xC5, 0xF2, 0x16, 0x51, 0x4B, 0xFA, 0x0D, 0x1B, 0x17, 0xD4, 0x73, 0xCD, 0xD2, 0xA0, 0x1D, 0x42, 0x2E, 0xD4, 0x41, 0xAD, 0xC7, 0x17, 0x79, 0x5E, 0x07, 0x82, 0xE4, ++ 0x43, 0xA2, 0xF7, 0x4B, 0x01, 0x36, 0x53, 0x65, 0x9C, 0xA3, 0x9F, 0x5C, 0x74, 0xC5, 0xDC, 0x98, 0x71, 0x5D, 0x3E, 0xA2, 0x2A, 0x0D, 0x0D, 0xD8, 0x26, 0xCF, 0xB3, 0xBA, 0x7F, 0xB0, 0x09, 0x3B, ++ 0x9C, 0x80, 0x76, 0x3A, 0x30, 0x8C, 0x22, 0x87, 0x15, 0x3E, 0x21, 0xFB, 0xDE, 0x26, 0xD2, 0xB7, 0x2A, 0x39, 0x32, 0xD7, 0xB5, 0x3B, 0x88, 0xA4, 0xE1, 0xAE, 0xCF, 0x37, 0x49, 0x21, 0xAD, 0x6F, ++ 0x44, 0x47, 0xA6, 0x31, 0x57, 0xCF, 0x7E, 0x05, 0x8E, 0xF9, 0xBA, 0x1D, 0x72, 0x0B, 0x43, 0xF2, 0x18, 0x0D, 0x2F, 0x55, 0x7F, 0xA2, 0x0E, 0x22, 0xA3, 0xEF, 0x78, 0x5A, 0x08, 0xB5, 0x93, 0x11, ++ 0x1A, 0xBB, 0x4B, 0x00, 0xDF, 0x39, 0x88, 0x34, 0xC7, 0xE4, 0x80, 0xF0, 0x40, 0x45, 0x3E, 0x9E, 0x92, 0x5C, 0x8D, 0x77, 0x85, 0xD5, 0x98, 0x43, 0x04, 0xB7, 0xE9, 0x9B, 0x20, 0x89, 0x51, 0x9D, ++ 0x3F, 0x59, 0x14, 0x31, 0x3C, 0xE1, 0x2D, 0x26, 0xE1, 0x90, 0xA4, 0x36, 0xA5, 0x9F, 0x79, 0xB0, 0xB1, 0x25, 0x19, 0x1D, 0x85, 0x43, 0x49, 0x54, 0x78, 0x18, 0x08, 0x16, 0xC9, 0xE6, 0x50, 0x57, ++ 0x99, 0x32, 0x80, 0x4D, 0xCA, 0x0E, 0x02, 0xE4, 0x69, 0xDD, 0x68, 0x78, 0xFC, 0xE9, 0x2D, 0xFB, 0x49, 0x31, 0xBE, 0xC0, 0xAA, 0x8D, 0x3F, 0x89, 0x7F, 0x2B, 0x9B, 0x91, 0x29, 0xAC, 0x59, 0xF4, ++ 0x76, 0x51, 0xC1, 0xC8, 0xBE, 0xD8, 0x94, 0x9E, 0xF4, 0x37, 0xA6, 0x74, 0xCB, 0x0D, 0xD1, 0xD2, 0xFC, 0xDB, 0x15, 0x82, 0x14, 0xB6, 0x71, 0xBA, 0xCA, 0x72, 0xDB, 0xD3, 0xBF, 0xCD, 0x34, 0x51, ++ 0xC9, 0x26, 0x20, 0xDE, 0xE4, 0xDA, 0xC4, 0x06, 0x98, 0x79, 0xE5, 0x0B, 0x3D, 0xD0, 0x22, 0x74, 0xC5, 0x0D, 0x68, 0x37, 0x2E, 0x22, 0x30, 0xAA, 0x56, 0x26, 0xB0, 0x3B, 0x04, 0xBB, 0x4D, 0x2C, ++ 0xF9, 0x99, 0x97, 0xE0, 0x83, 0x7C, 0xB8, 0xD5, 0xB3, 0x07, 0xCB, 0x35, 0xA1, 0x7D, 0x5A, 0x23, 0xC7, 0xA1, 0x79, 0x76, 0x26, 0x7E, 0xB5, 0x2D, 0x12, 0x31, 0x78, 0xC0, 0x88, 0xFF, 0xE7, 0x2E, ++ 0x88, 0x4B, 0x38, 0x79, 0xFD, 0x9F, 0xF6, 0x8D, 0xBE, 0xE5, 0x68, 0x7E, 0x89, 0x3F, 0xAA, 0xB7, 0xF4, 0x5A, 0x17, 0xFC, 0x45, 0x59, 0x4B, 0xAF, 0x56, 0x92, 0xAA, 0xDD, 0xF4, 0x3F, 0xC0, 0x4E, ++ 0xE1, 0x4B, 0x44, 0xE3, 0xA4, 0x6E, 0xA9, 0xEE, 0x53, 0x54, 0x60, 0x49, 0xA3, 0xB1, 0x50, 0x0C, 0x28, 0xEB, 0x86, 0xA7, 0xF4, 0xEF, 0x5F, 0x87, 0x91, 0xF6, 0x44, 0x55, 0x14, 0x14, 0x58, 0x1A, ++ 0x00, 0x3C, 0x8D, 0x48, 0x49, 0x57, 0xAF, 0x27, 0xC4, 0x7B, 0x65, 0x3B, 0x48, 0xF1, 0xC0, 0xC3, 0x7D, 0xD0, 0x09, 0x99, 0x69, 0xDC, 0x22, 0xF3, 0xB6, 0x6B, 0xB3, 0x91, 0x03, 0xEF, 0xE7, 0x53, ++ 0xC6, 0xCA, 0x52, 0x8F, 0x64, 0x47, 0x73, 0xDF, 0x5A, 0xCF, 0xCA, 0xE5, 0x53, 0x4D, 0x52, 0x75, 0xDF, 0x3A, 0xF0, 0xAE, 0x87, 0xBF, 0x90, 0x57, 0xD7, 0x15, 0xBA, 0x0E, 0x26, 0xF6, 0xBE, 0x7A, ++ 0xB9, 0x02, 0xBD, 0xAD, 0xE9, 0x98, 0x3E, 0x1F, 0xE1, 0xA5, 0xBC, 0xF6, 0x7A, 0x21, 0xB3, 0x5D, 0x00, 0xF3, 0x28, 0x48, 0x28, 0x37, 0x99, 0x83, 0x91, 0x3E, 0x86, 0xA1, 0xBF, 0x1E, 0x8F, 0x29, ++ 0x80, 0xFF, 0x17, 0x48, 0x1E, 0x0B, 0x80, 0x3E, 0x4B, 0xAE, 0xD1, 0x7A, 0x5C, 0x46, 0xB2, 0x61, 0x76, 0xF6, 0x2B, 0xA5, 0x4E, 0x8C, 0x7D, 0xCA, 0x90, 0xD8, 0xA9, 0x82, 0xA9, 0xE6, 0xC6, 0xAC, ++ 0x70, 0x81, 0x23, 0x4A, 0xC3, 0xF4, 0x01, 0xA4, 0x31, 0x03, 0xA2, 0x17, 0xE4, 0x15, 0xE3, 0x08, 0x83, 0x74, 0x9F, 0x30, 0xA3, 0x97, 0x49, 0x93, 0x40, 0x6D, 0x90, 0xB2, 0x07, 0x22, 0xD5, 0xD1, ++ 0xB7, 0x26, 0x52, 0xFF, 0x6C, 0x0B, 0x43, 0x2C, 0xA1, 0x90, 0x10, 0xDF, 0x98, 0x4F, 0x78, 0x5D, 0xBB, 0xBE, 0xBE, 0x8B, 0xD6, 0x94, 0x76, 0xD5, 0xCA, 0xAF, 0xE7, 0x10, 0x5A, 0x12, 0x05, 0xCA, ++ 0x28, 0x41, 0x44, 0x4C, 0x82, 0xF4, 0x4B, 0x3A, 0x1D, 0xC6, 0xAD, 0x47, 0xF9, 0x2C, 0x95, 0x2A, 0x43, 0xBF, 0x25, 0x24, 0xBD, 0x14, 0x93, 0x0E, 0xAF, 0xEA, 0x65, 0xFB, 0xEA, 0x4F, 0x40, 0x28, ++ 0x98, 0x7C, 0x9D, 0x07, 0x51, 0xC5, 0x5C, 0x4D, 0x63, 0xDE, 0x04, 0x50, 0xF6, 0x26, 0x3A, 0x42, 0x8A, 0xA7, 0x9B, 0xD4, 0xDC, 0xFC, 0x64, 0x7E, 0xDD, 0xC4, 0x13, 0x66, 0x4E, 0xCF, 0x20, 0x72, ++ 0xCA, 0xB2, 0x1D, 0x57, 0xB2, 0x44, 0x7E, 0xDF, 0xA7, 0x19, 0x4C, 0x4B, 0xCE, 0xDC, 0xAE, 0x28, 0x93, 0xD3, 0xDE, 0x6B, 0xD1, 0xD6, 0xB2, 0xFA, 0xF2, 0x1C, 0xBC, 0x02, 0x12, 0xC6, 0x36, 0xF6, ++ 0x1B, 0x7A, 0x22, 0x31, 0x28, 0xA3, 0x13, 0xC0, 0x09, 0x9B, 0xF3, 0xAB, 0x1D, 0x28, 0x8A, 0x5C, 0xFD, 0x89, 0x30, 0x25, 0x75, 0x33, 0x1E, 0x00, 0xB6, 0x53, 0xD5, 0x26, 0xB7, 0xB8, 0x74, 0x20, ++ 0x9B, 0x63, 0x14, 0xFE, 0x15, 0xE7, 0x70, 0x7C, 0x90, 0x9C, 0x97, 0x31, 0xA9, 0xC4, 0xB7, 0xF0, 0xE3, 0xD0, 0x2D, 0xA0, 0x53, 0x1D, 0x22, 0x67, 0xDF, 0xBA, 0x35, 0x5E, 0x85, 0x32, 0x1F, 0x8C, ++ 0x0C, 0xA9, 0x7A, 0x98, 0x66, 0x66, 0xCA, 0x84, 0xCA, 0xBF, 0x3F, 0xDB, 0xBC, 0x0F, 0xCD, 0x50, 0xB0, 0x60, 0xF8, 0x74, 0x4F, 0x83, 0xD3, 0x93, 0xC1, 0xF9, 0x60, 0x22, 0x1F, 0x14, 0xB3, 0xAF, ++ 0x44, 0xF3, 0x03, 0x99, 0xB8, 0xA8, 0xF8, 0x34, 0x6C, 0x44, 0x66, 0xA2, 0xBD, 0x4F, 0x01, 0x02, 0x9C, 0x4E, 0x38, 0xA4, 0x54, 0xC9, 0xA9, 0x8D, 0xF2, 0xCD, 0x92, 0xAE, 0x9F, 0x68, 0x6C, 0x1B, ++ 0x21, 0x62, 0xFE, 0xF3, 0x5F, 0x82, 0xA4, 0xF6, 0x87, 0x68, 0x41, 0x50, 0x31, 0xCD, 0xE2, 0x12, 0x02, 0x78, 0x55, 0x7C, 0x30, 0xAD, 0xFC, 0x51, 0xAA, 0xA6, 0xD9, 0xD6, 0x5D, 0x7B, 0x3B, 0x58, ++ 0xB1, 0xD1, 0xAF, 0x6B, 0xF1, 0x0B, 0x61, 0x25, 0xAC, 0xDE, 0xB0, 0x53, 0xAA, 0xEE, 0xBC, 0x2A, 0x26, 0x4E, 0x2E, 0x06, 0x55, 0xA3, 0xDE, 0x02, 0x61, 0x13, 0x13, 0x37, 0xF8, 0x42, 0x73, 0x3E, ++ 0x92, 0x64, 0x4F, 0x0B, 0x38, 0x89, 0x5D, 0xEC, 0xDB, 0xB3, 0xA9, 0x7B, 0x74, 0xDD, 0xCE, 0x55, 0xA3, 0x38, 0x24, 0x8F, 0x74, 0xF8, 0x0B, 0x8A, 0x13, 0x35, 0x1F, 0xD4, 0x33, 0x32, 0xFB, 0x36, ++ 0xC7, 0xAD, 0xE7, 0xD8, 0x20, 0xD5, 0xE5, 0x50, 0x44, 0xF7, 0x42, 0x31, 0xEE, 0x6A, 0xFF, 0x8A, 0x9D, 0xC2, 0xFC, 0xE0, 0x12, 0xCB, 0x40, 0x69, 0xD0, 0x3D, 0xE1, 0xB7, 0x50, 0x67, 0x15, 0xDD, ++ 0x36, 0x98, 0x05, 0xC6, 0xCE, 0x3B, 0x16, 0x0C, 0x6C, 0x7D, 0xE3, 0x50, 0x49, 0xC1, 0x65, 0x53, 0x47, 0x98, 0x27, 0x2B, 0x68, 0x0F, 0xA0, 0x20, 0xDD, 0x32, 0x8B, 0xBE, 0xB9, 0x1A, 0x0D, 0x46, ++ 0x6E, 0x3A, 0x57, 0xFA, 0x2E, 0x66, 0x5D, 0xE4, 0x21, 0x2F, 0xDB, 0x7E, 0xE9, 0x14, 0xA8, 0xB0, 0xD6, 0xFD, 0x5C, 0xE2, 0x03, 0x27, 0x89, 0xE4, 0x8A, 0x35, 0xD0, 0x29, 0x3B, 0x57, 0x42, 0x4C, ++ 0xAA, 0x60, 0xF4, 0xA6, 0x70, 0x40, 0x7F, 0x48, 0x48, 0xD7, 0xA2, 0x4A, 0x5E, 0xC2, 0xC2, 0x0F, 0x83, 0x96, 0x42, 0x5A, 0x2B, 0x1A, 0xCC, 0x57, 0xB0, 0x8D, 0x96, 0x68, 0xC3, 0x99, 0x16, 0x7B, ++ 0x46, 0x8E, 0x07, 0x36, 0xB3, 0x3D, 0x46, 0x97, 0xB2, 0x22, 0x55, 0x24, 0x34, 0x82, 0x2A, 0xB6, 0x5B, 0x06, 0x5F, 0x8C, 0x18, 0x57, 0x58, 0xAC, 0xBC, 0x98, 0xA8, 0xB6, 0x47, 0xDA, 0x05, 0x27, ++ 0x96, 0x61, 0xC4, 0xEF, 0x63, 0xD8, 0xB9, 0x91, 0x2B, 0x0D, 0x29, 0xF3, 0x32, 0x45, 0xD0, 0x5E, 0x8D, 0xFD, 0x79, 0x5C, 0x6C, 0x89, 0x7F, 0x3C, 0xEF, 0xF4, 0x23, 0x8C, 0x1E, 0xFA, 0x1D, 0xEF, ++ 0xD4, 0xA5, 0x49, 0x98, 0xD4, 0x77, 0x5D, 0x08, 0xA9, 0xD1, 0xF5, 0xE7, 0x11, 0x54, 0x14, 0x6F, 0xCC, 0xE7, 0x59, 0x0B, 0x1F, 0x7E, 0xEE, 0x85, 0x15, 0x55, 0xC0, 0x63, 0xB7, 0xC7, 0xCC, 0xCD, ++ 0x01, 0xD1, 0x43, 0x3E, 0x07, 0x3E, 0x3E, 0x13, 0xDA, 0x20, 0x44, 0x28, 0x93, 0xDF, 0xBB, 0x37, 0xAF, 0xBA, 0xCD, 0x27, 0x14, 0xEB, 0x43, 0xB4, 0xAD, 0xAC, 0xA2, 0x62, 0x16, 0xF1, 0x4B, 0xFC, ++ 0xDD, 0x71, 0xCF, 0x0A, 0xA3, 0x43, 0xA6, 0x91, 0xF9, 0x91, 0x69, 0xF3, 0x01, 0x5D, 0x01, 0x96, 0x72, 0x67, 0x84, 0x12, 0x12, 0x8A, 0x71, 0x6F, 0x93, 0xA7, 0x38, 0xD7, 0x20, 0x43, 0x72, 0xF1, ++ 0x64, 0xD6, 0xC8, 0x05, 0x6D, 0xDF, 0x11, 0x88, 0x8A, 0x3E, 0xFA, 0x15, 0xFE, 0xD6, 0x61, 0x2A, 0x1F, 0xFA, 0xBF, 0x06, 0x81, 0x3F, 0x74, 0x33, 0x04, 0xB9, 0xDD, 0x41, 0xD6, 0x75, 0x2D, 0x43, ++ 0x3C, 0xAC, 0xA9, 0xE5, 0x42, 0xD1, 0x8B, 0x47, 0x6B, 0x80, 0x4F, 0x73, 0xB9, 0x0A, 0x2A, 0x4E, 0x7B, 0x50, 0x3F, 0xC2, 0xD0, 0x41, 0x8D, 0xC8, 0x19, 0x21, 0x60, 0x10, 0xA8, 0x6E, 0x8F, 0x45, ++ 0x15, 0x3C, 0xC5, 0xAE, 0xD1, 0xE2, 0x3A, 0xF6, 0x84, 0x89, 0xFA, 0x37, 0x5C, 0x7F, 0x51, 0x81, 0x49, 0xA6, 0xB7, 0x07, 0xCD, 0x6E, 0x52, 0xF6, 0x99, 0xF8, 0x3F, 0x01, 0xEC, 0xFF, 0x69, 0x21, ++ 0x2B, 0x85, 0x30, 0xC8, 0xBE, 0x5E, 0x25, 0x29, 0x6E, 0x24, 0xE0, 0x98, 0xAB, 0xD9, 0x45, 0x5F, 0x34, 0x0B, 0xD5, 0x75, 0x54, 0x72, 0x5E, 0x23, 0x71, 0x7D, 0x53, 0xA0, 0xA2, 0xC5, 0x0A, 0x84, ++ 0x78, 0x00, 0xE3, 0x82, 0x29, 0x49, 0xDD, 0x52, 0xC1, 0x70, 0x00, 0x50, 0xE3, 0xB7, 0xE4, 0xE0, 0xF0, 0x84, 0x63, 0xBF, 0x15, 0xAD, 0xC3, 0x21, 0xE9, 0x51, 0xDE, 0xA6, 0x7E, 0x87, 0x04, 0x9B, ++ 0x98, 0x0D, 0x54, 0x50, 0x33, 0x71, 0x42, 0x89, 0x47, 0x6F, 0xF3, 0x4D, 0x42, 0xD0, 0x61, 0xF8, 0x4A, 0x68, 0x47, 0xFD, 0x5C, 0xA2, 0xC4, 0x4C, 0x3A, 0x3F, 0xDB, 0xEA, 0x68, 0x99, 0x95, 0x7C, ++ 0xBA, 0x96, 0x0B, 0xA9, 0x12, 0x5A, 0x03, 0x26, 0xA6, 0x04, 0xC2, 0x57, 0xAC, 0xFE, 0xE8, 0x29, 0xD9, 0x66, 0x0D, 0xDE, 0x12, 0x53, 0x9C, 0xD6, 0x72, 0x9D, 0x33, 0xA0, 0x5C, 0x83, 0x57, 0x75, ++ 0xDD, 0x6C, 0xD7, 0x32, 0x6E, 0x07, 0xD5, 0x2F, 0xE2, 0xDF, 0xED, 0xF6, 0xBB, 0xF9, 0xA8, 0x02, 0x72, 0xC2, 0x5A, 0x90, 0x5A, 0xD9, 0x2B, 0x5D, 0x75, 0x27, 0xD5, 0xA2, 0x22, 0xBA, 0x82, 0xC9, ++ 0xCD, 0x28, 0xE4, 0xDF, 0xE8, 0x99, 0xAC, 0x17, 0x9F, 0x1F, 0x63, 0xFE, 0x08, 0xA9, 0x86, 0x65, 0x15, 0x41, 0x02, 0xA0, 0xFC, 0xD0, 0xCF, 0xB6, 0x16, 0x62, 0xDB, 0x95, 0x56, 0x52, 0x34, 0xBB, ++ 0xE1, 0xAB, 0x3A, 0xF9, 0x45, 0xE3, 0x78, 0x23, 0x30, 0xAC, 0x78, 0xD8, 0x4F, 0x8C, 0x85, 0x0B, 0xA3, 0x60, 0xA2, 0xFB, 0xB8, 0x06, 0x2C, 0xB5, 0xBA, 0xA8, 0xCA, 0xF5, 0x0F, 0x8C, 0xF8, 0x04, ++ 0x24, 0x66, 0x42, 0x0B, 0x4E, 0x56, 0xD5, 0xD1, 0x5C, 0x49, 0xBA, 0xE5, 0x24, 0xA4, 0x5C, 0x04, 0x45, 0x60, 0x64, 0xC2, 0xF4, 0x54, 0x35, 0xDD, 0x1A, 0xBB, 0xA2, 0x49, 0x45, 0x34, 0xE4, 0xD1, ++ 0xEF, 0xCD, 0x39, 0x8D, 0xE0, 0xC4, 0xA7, 0x77, 0xD1, 0x61, 0xE2, 0x3E, 0xB6, 0xC9, 0x74, 0xED, 0xED, 0xDF, 0x08, 0xF0, 0xA9, 0xC7, 0x58, 0x04, 0xCC, 0xD7, 0x3A, 0x0D, 0xD3, 0x2C, 0xF4, 0x6A, ++ 0xBD, 0x5F, 0x9E, 0xF1, 0x22, 0x63, 0x27, 0xB7, 0x35, 0x5C, 0xF3, 0x45, 0xAD, 0x09, 0xF8, 0x57, 0xB9, 0x65, 0x3C, 0xDC, 0x1A, 0x4B, 0xF0, 0xF4, 0xC7, 0xAA, 0xC1, 0xF3, 0xDF, 0xB0, 0xA9, 0xE1, ++ 0x04, 0x8E, 0xBE, 0x0C, 0xBA, 0xB1, 0x72, 0xA3, 0xB0, 0x29, 0x89, 0xCD, 0x6E, 0x63, 0x06, 0x22, 0xE8, 0x74, 0x4C, 0x2F, 0x98, 0x96, 0xB4, 0x40, 0x4D, 0x3A, 0x0B, 0xC2, 0x7C, 0x05, 0x09, 0xE3, ++ 0xAA, 0x9A, 0x3B, 0x5D, 0x17, 0x1E, 0x91, 0x85, 0x45, 0xAF, 0xB2, 0xE9, 0xC0, 0xB6, 0xEC, 0x5D, 0x3E, 0x50, 0x07, 0x5B, 0x0D, 0x4C, 0x4E, 0x71, 0xD7, 0x8D, 0x85, 0x3E, 0xAE, 0xFA, 0xA5, 0x9B, ++ 0xED, 0x8C, 0xB9, 0x0D, 0x2B, 0xD6, 0x2A, 0x04, 0x22, 0xB3, 0x6A, 0x88, 0x80, 0x7B, 0x65, 0x21, 0xF4, 0xCB, 0xA0, 0xC3, 0x66, 0x70, 0x5B, 0x11, 0x8E, 0x14, 0x83, 0x1E, 0xD6, 0xCD, 0x78, 0xE3, ++ 0xB2, 0x72, 0x16, 0xDD, 0xE4, 0x05, 0xAE, 0xEE, 0x96, 0xA0, 0x1A, 0xF1, 0x1D, 0x72, 0x40, 0x03, 0x95, 0x72, 0x7E, 0x7A, 0x93, 0x0C, 0xC7, 0x72, 0x88, 0x18, 0x68, 0xC7, 0xFA, 0xBD, 0x34, 0xF5, ++ 0xB5, 0x39, 0x2C, 0x76, 0xA0, 0x24, 0x00, 0xDC, 0xCC, 0xEF, 0xED, 0xF2, 0x7B, 0xD9, 0x8C, 0xAD, 0xA7, 0x5E, 0x0E, 0x2E, 0x1E, 0xDE, 0x18, 0x99, 0x29, 0x08, 0xE4, 0x6D, 0x81, 0x93, 0x81, 0x04, ++ 0xB7, 0xD8, 0xE3, 0x19, 0x13, 0x29, 0x55, 0xA3, 0xC8, 0x0C, 0x93, 0x8E, 0x87, 0x73, 0xD5, 0x93, 0x27, 0x75, 0x99, 0xF8, 0xC9, 0x57, 0xBD, 0x72, 0xE6, 0xC3, 0x3C, 0xF5, 0x2D, 0xEB, 0x84, 0xA1, ++ 0x36, 0x2D, 0xAC, 0x0A, 0x49, 0xED, 0xE1, 0x80, 0x23, 0x49, 0x5C, 0x50, 0x8C, 0x79, 0x31, 0x93, 0x79, 0xAF, 0xC2, 0xD8, 0x23, 0x2A, 0x8F, 0x6C, 0x19, 0xAD, 0x0E, 0x35, 0x7E, 0xE1, 0xD7, 0x10, ++ 0x66, 0x48, 0x76, 0xFC, 0x90, 0x2D, 0xB9, 0x3B, 0x1A, 0x0C, 0x1E, 0x25, 0xBB, 0xF1, 0x02, 0x27, 0xC1, 0x53, 0xC6, 0xF9, 0x8C, 0x14, 0xDA, 0xB8, 0x6C, 0x7A, 0x90, 0x53, 0xFC, 0x81, 0xC7, 0x32, ++ 0xB0, 0x5D, 0x9F, 0x1F, 0x9F, 0x69, 0xB6, 0xE0, 0x86, 0xAB, 0xFF, 0xB8, 0xD9, 0x0D, 0xA2, 0x72, 0xFA, 0x6C, 0x2B, 0x9D, 0x5C, 0x90, 0xFA, 0xCD, 0x34, 0xDD, 0x8F, 0x96, 0xCC, 0x81, 0x60, 0xB6, ++ 0x8D, 0x5C, 0xB2, 0x7C, 0xCB, 0xD3, 0x5B, 0x48, 0xBF, 0xE6, 0x83, 0xCB, 0x7C, 0x12, 0x6C, 0xF4, 0x97, 0x68, 0x72, 0xAA, 0x46, 0x9D, 0x77, 0xB4, 0x1D, 0x43, 0x23, 0x90, 0x68, 0xDC, 0x37, 0x56, ++ 0x31, 0x84, 0x17, 0x7E, 0xD5, 0x73, 0xA4, 0x78, 0x3E, 0x0B, 0xB8, 0xCF, 0xE4, 0x50, 0x68, 0x44, 0x6C, 0xCD, 0xBC, 0x39, 0xEA, 0x8A, 0x6D, 0x52, 0x25, 0xF4, 0x69, 0x7C, 0x28, 0x47, 0x21, 0xE8, ++ 0xEC, 0xA8, 0x26, 0x13, 0x56, 0x87, 0xDC, 0x28, 0x58, 0xE6, 0xCC, 0x73, 0x85, 0xBF, 0xD7, 0x43, 0xA4, 0x62, 0xEC, 0x80, 0xA6, 0x8F, 0x3A, 0xB2, 0xA8, 0xAE, 0x47, 0x32, 0x25, 0x52, 0x15, 0x60, ++ 0xFB, 0x27, 0x0E, 0xEE, 0xBA, 0x33, 0x4B, 0x4E, 0x48, 0x00, 0x47, 0xDA, 0x1E, 0x40, 0x98, 0xE6, 0x94, 0x7A, 0xB1, 0x2B, 0xE9, 0x53, 0xB3, 0x95, 0x90, 0xFF, 0x82, 0x57, 0x73, 0xC8, 0xCE, 0x23, ++ 0x18, 0x5E, 0x15, 0x7D, 0xA9, 0x27, 0x13, 0x0E, 0xCD, 0x74, 0x8E, 0x47, 0xB6, 0x2C, 0xA9, 0x80, 0x0A, 0x8D, 0x5F, 0x67, 0x29, 0xCE, 0x3B, 0x8E, 0x94, 0xF5, 0x55, 0xFB, 0xE3, 0x44, 0x6A, 0xA6, ++ 0xE6, 0xCB, 0x0F, 0xC6, 0xCF, 0xDD, 0xA1, 0x8E, 0x61, 0x7B, 0xBB, 0x86, 0xE0, 0xBE, 0xD6, 0x36, 0xD9, 0x04, 0xAC, 0x41, 0xB2, 0xB2, 0x03, 0x66, 0x3E, 0x44, 0x57, 0x2D, 0x7C, 0x8B, 0x88, 0x4D, ++ 0x37, 0x4B, 0xA6, 0x65, 0x18, 0x12, 0xB4, 0x62, 0xB5, 0xEF, 0x40, 0xB8, 0xBB, 0x0B, 0xCE, 0xFC, 0x51, 0xEE, 0x4D, 0xE4, 0xC5, 0x73, 0x35, 0xF3, 0xE1, 0xB6, 0x5B, 0xE1, 0x36, 0xF7, 0x18, 0x7C, ++ 0x34, 0xD7, 0x08, 0xA5, 0xEF, 0x4B, 0xCC, 0x83, 0x3C, 0x6E, 0x57, 0xD7, 0xF6, 0xC2, 0xBD, 0x8C, 0x40, 0x48, 0xA9, 0xC9, 0x97, 0x35, 0xBE, 0x30, 0x13, 0x7C, 0xCB, 0xEF, 0xFE, 0x31, 0x92, 0x4B, ++ 0x52, 0x06, 0x18, 0xD0, 0x8F, 0x43, 0xE5, 0x6F, 0xB5, 0xAF, 0x1A, 0x5C, 0xDD, 0x81, 0xC4, 0xCF, 0x6F, 0x74, 0x41, 0x8F, 0xA2, 0xB4, 0x22, 0xDA, 0x65, 0x53, 0x3D, 0x8B, 0xF5, 0xF8, 0xE6, 0x42, ++ 0x4C, 0x55, 0x3C, 0x99, 0x49, 0x45, 0xEE, 0xF2, 0x5F, 0x51, 0x2E, 0x98, 0x26, 0xF7, 0xB0, 0x82, 0xEF, 0xC0, 0x55, 0x48, 0x9A, 0xF4, 0xFC, 0x78, 0x9D, 0x93, 0x6F, 0x6F, 0x9A, 0x7A, 0x53, 0x29, ++ 0x76, 0x25, 0x87, 0x86, 0xE3, 0xDE, 0x00, 0xF3, 0x4E, 0x75, 0x08, 0xA0, 0x49, 0x51, 0xC8, 0x0D, 0xCA, 0x14, 0xBC, 0xEE, 0x0F, 0x79, 0x42, 0x8D, 0x52, 0xB9, 0xAF, 0x57, 0x84, 0x6D, 0xC9, 0xD4, ++ 0x85, 0x38, 0xF8, 0xDB, 0x52, 0x60, 0x74, 0x7C, 0xA2, 0x93, 0xBB, 0xFB, 0x2B, 0x43, 0x90, 0xD3, 0x31, 0x73, 0xD9, 0x56, 0x05, 0x37, 0x89, 0x81, 0xD0, 0x39, 0xE2, 0xB4, 0x89, 0xE3, 0xB5, 0xF2, ++ 0x30, 0xB6, 0xB9, 0x8F, 0x3B, 0x8E, 0x4C, 0x67, 0x26, 0x2B, 0x60, 0xFF, 0xD4, 0x30, 0xEE, 0xFE, 0xB0, 0xB1, 0xCF, 0x43, 0x57, 0xFC, 0x65, 0x8D, 0xA2, 0x3C, 0xC4, 0x82, 0x81, 0x7A, 0x68, 0xAB, ++ 0x4B, 0x2F, 0xC9, 0x73, 0xA4, 0xE6, 0xE2, 0xDF, 0x59, 0x35, 0x62, 0x24, 0x8F, 0xBD, 0xBA, 0xAD, 0x2F, 0xB5, 0x4B, 0xE0, 0xBE, 0xFA, 0x6E, 0x64, 0x7E, 0x9F, 0x9B, 0x1E, 0x34, 0x7D, 0x1A, 0x61, ++ 0x4D, 0xE4, 0xC5, 0x87, 0x0C, 0xC9, 0x81, 0x30, 0x9B, 0x87, 0x06, 0xBD, 0xF1, 0xDB, 0x02, 0x8D, 0x04, 0xC0, 0xD5, 0xAD, 0x67, 0xE1, 0x8E, 0x6F, 0x80, 0x6B, 0xE3, 0xD8, 0x61, 0xEB, 0xA9, 0x72, ++ 0x08, 0xDC, 0xAA, 0xF9, 0x32, 0xC9, 0x79, 0xBC, 0xA1, 0xA6, 0xD1, 0xC9, 0x8C, 0x8A, 0xE4, 0x4E, 0xE7, 0xE3, 0xF8, 0x22, 0xBD, 0x31, 0x7D, 0xEB, 0x6B, 0xB3, 0x7A, 0xCF, 0x83, 0x19, 0x29, 0x14, ++ 0x83, 0xD5, 0x1D, 0x74, 0xE0, 0xA9, 0x95, 0x30, 0xEE, 0xC7, 0xBB, 0x30, 0x21, 0x62, 0x88, 0xB2, 0x8F, 0x89, 0x19, 0x64, 0x0C, 0xA6, 0x71, 0x8A, 0x6F, 0x81, 0x89, 0xCF, 0xAC, 0x6D, 0xD9, 0x0A, ++ 0x4A, 0xF3, 0xC0, 0xCE, 0x07, 0x08, 0x63, 0x71, 0xF8, 0xCC, 0x98, 0x0F, 0xC2, 0xA7, 0x0B, 0x2B, 0xF6, 0x4B, 0xA4, 0xC6, 0xE2, 0xE4, 0xC3, 0x5A, 0x46, 0xBE, 0x9E, 0xCC, 0x75, 0x1A, 0xFB, 0x11, ++ 0x7D, 0x98, 0x35, 0xA7, 0xB8, 0x27, 0xFD, 0x04, 0xEE, 0xF4, 0x4E, 0x5A, 0xEF, 0x2F, 0xE8, 0xFA, 0xD6, 0x70, 0xA9, 0x6C, 0xEE, 0x19, 0x97, 0x21, 0x22, 0x77, 0xAC, 0x1A, 0x5F, 0x45, 0x51, 0xA3, ++ 0x23, 0x62, 0xC1, 0xB2, 0xF7, 0xC5, 0x43, 0x7B, 0x5F, 0x2E, 0x21, 0xA8, 0xD8, 0xEA, 0x30, 0x8C, 0x7D, 0xF5, 0x75, 0x4D, 0x48, 0xCF, 0x0B, 0xB2, 0xC4, 0x64, 0x6C, 0x51, 0x2E, 0x50, 0x44, 0x07, ++ 0x5E, 0xD3, 0x85, 0x2B, 0x13, 0x16, 0xDD, 0xE1, 0x54, 0x90, 0x55, 0x54, 0x74, 0x77, 0x3F, 0x9D, 0x62, 0xB3, 0xC5, 0xCC, 0xCC, 0xBE, 0x51, 0x35, 0xB5, 0x31, 0x47, 0x2D, 0xA5, 0xF2, 0x5E, 0x64, ++ 0x7D, 0x84, 0xE0, 0xD2, 0x19, 0x3A, 0xF3, 0x69, 0x3F, 0xEB, 0x10, 0xE9, 0xBA, 0xE8, 0x22, 0x3B, 0x5F, 0x4A, 0xE3, 0x53, 0x60, 0x18, 0x1E, 0xCB, 0x84, 0xF6, 0xE7, 0x90, 0x98, 0x35, 0x8F, 0xD5, ++ 0x4D, 0x28, 0x39, 0x75, 0x2F, 0xBC, 0x34, 0x04, 0x8B, 0xC4, 0x3C, 0x1F, 0xE9, 0xC0, 0xB4, 0xD9, 0x9A, 0x36, 0x47, 0x09, 0xA6, 0x8C, 0x1E, 0x1E, 0x9D, 0xBE, 0x00, 0x8A, 0x2F, 0x49, 0x13, 0x61, ++ 0x7B, 0x41, 0x6B, 0x13, 0x87, 0xE9, 0x3C, 0x9A, 0xA8, 0xAA, 0x63, 0x3B, 0x9C, 0x3E, 0xD6, 0xC7, 0x6A, 0xB5, 0xB0, 0xD3, 0x06, 0xAD, 0x73, 0x65, 0x92, 0xF6, 0x7C, 0xD1, 0x84, 0x65, 0x4D, 0x89, ++ 0x41, 0x85, 0x5A, 0x02, 0x85, 0xD0, 0xEE, 0xF2, 0x97, 0x8C, 0xC5, 0xD6, 0xA3, 0x04, 0x5A, 0x2C, 0xEB, 0x4D, 0x5C, 0xEE, 0xCF, 0xC9, 0x13, 0x38, 0xD5, 0xB9, 0x18, 0x0B, 0x0B, 0xE7, 0xCE, 0xBC, ++ 0x82, 0xFA, 0x0C, 0xAA, 0x28, 0x31, 0x90, 0x2A, 0x5B, 0x36, 0x58, 0x89, 0x64, 0x65, 0x28, 0x23, 0xD2, 0x5C, 0xB2, 0xC8, 0x1C, 0x3C, 0xBF, 0xFB, 0xB6, 0x91, 0x70, 0xD6, 0x67, 0xF5, 0xE5, 0x24, ++ 0xC6, 0xED, 0xCD, 0x0C, 0x09, 0x91, 0x85, 0xE9, 0xC1, 0xCB, 0xFF, 0x57, 0xF8, 0x75, 0x56, 0x0C, 0xBD, 0xD4, 0x68, 0xE7, 0x78, 0xD9, 0x37, 0x2B, 0xDC, 0x61, 0xC1, 0xAD, 0xD1, 0x53, 0x21, 0xBD, ++ 0xA9, 0xCC, 0xF4, 0xAF, 0xD4, 0xE1, 0xCE, 0x80, 0x10, 0x06, 0xC1, 0xED, 0xE8, 0x0E, 0xA2, 0xE2, 0x11, 0xBE, 0x68, 0x24, 0x62, 0xBC, 0xFA, 0x72, 0xDA, 0x1B, 0x58, 0x3C, 0xD7, 0x57, 0xD5, 0xC7, ++ 0x38, 0xA7, 0x5E, 0x07, 0xC9, 0x00, 0xDB, 0x5C, 0xEE, 0xFF, 0xDF, 0xF2, 0x95, 0xD0, 0xD5, 0xA8, 0x1C, 0x46, 0x0D, 0x8B, 0xB5, 0x50, 0x9A, 0x06, 0x9D, 0x50, 0x43, 0x84, 0x2A, 0x48, 0x33, 0xDA, ++ 0x80, 0xE1, 0x4A, 0xC7, 0xAB, 0xBD, 0x5B, 0xE2, 0x48, 0xFC, 0x1E, 0x4D, 0x96, 0x8E, 0xE3, 0x8E, 0x48, 0xCE, 0xFA, 0x79, 0x05, 0x20, 0xA7, 0x40, 0x72, 0x93, 0x33, 0xF4, 0x33, 0xDA, 0xC9, 0x28, ++ 0x38, 0x0C, 0xDF, 0x83, 0x11, 0x32, 0x80, 0x71, 0xFA, 0x95, 0x75, 0x7F, 0xA6, 0x2A, 0x93, 0x55, 0x1A, 0x58, 0x06, 0x2D, 0x14, 0x27, 0x09, 0x1A, 0x59, 0x20, 0xF7, 0x57, 0x6E, 0x2F, 0x4D, 0x6B, ++ 0x07, 0x0B, 0x0E, 0x16, 0x3A, 0x4E, 0x58, 0x70, 0x88, 0x97, 0x9B, 0xB6, 0xC4, 0xDA, 0xDD, 0xFC, 0x09, 0x0E, 0x24, 0x27, 0x2B, 0x3B, 0x52, 0x57, 0x5E, 0x63, 0x66, 0x71, 0x7F, 0xA0, 0xF0, 0x07, ++ 0x16, 0x37, 0x43, 0x4A, 0x4C, 0x6F, 0x78, 0x7C, 0xAC, 0xB4, 0xBF, 0xC7, 0xE4, 0xFA, 0x17, 0x2F, 0x4C, 0x83, 0x87, 0xAA, 0xB7, 0xD0, 0xF5, 0x02, 0x35, 0x3E, 0x56, 0x5F, 0x6A, 0x89, 0x91, 0xB2, ++ 0xC2, 0xC5, 0xCF, 0xDF, 0xEE, 0x1F, 0x31, 0x52, 0x5B, 0x90, 0xA8, 0xB9, 0xC6, 0xE0, 0xEB, 0xED, 0x03, 0x45, 0x56, 0x5E, 0x6D, 0x70, 0x8F, 0x97, 0xD0, 0xD7, 0xDE, 0x04, 0x11, 0x2D, 0x30, 0x47, ++ 0x71, 0x72, 0x8F, 0x97, 0xAE, 0xB1, 0xB6, 0xC2, 0xC8, 0xE1, 0xE4, 0xE7, 0xF1, 0xFB, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1F, 0x2E, 0x37, 0x45, 0x50, 0x5B, 0x6F, 0x00, 0x85, 0x0C, 0x10, 0x38, 0x0E, 0x88, 0x00, 0xB4, 0x00, 0x61, 0x84, ++ 0x02, 0x26, 0x00, 0x02, 0x90, 0x80, 0x0E, 0x88, 0x88, 0x63, 0x82, 0x0B, 0x00, 0x02, 0x04, 0x21, 0x80, 0x18, 0x33, 0x60, 0x7D, 0xAE, 0xCB, 0x4F, 0xC3, 0xB6, 0xD6, 0x0E, ++ }, ++ }, ++ { ++ .name = "Dilithium Round 3, Level 3 (4-4) KAT 0 (PKCS#8/SPKI)", ++ .version = 0, ++ .keyform = 0, ++ .rho_len = 0, ++ .seed_len = 0, ++ .tr_len = 0, ++ .s1_len = 0, ++ .s2_len = 0, ++ .t0_len = 0, ++ .t1_len = 0, ++ .pkcs8_len = 3876, ++ .pkcs8 = { ++ 0x30, 0x82, 0x0F, 0x20, 0x02, 0x01, 0x00, 0x30, 0x0F, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0B, 0x07, 0x04, 0x04, 0x05, 0x00, 0x04, 0x82, 0x0F, 0x08, 0x30, 0x82, 0x0F, 0x04, ++ 0x02, 0x01, 0x00, 0x03, 0x21, 0x00, 0x1C, 0x0E, 0xE1, 0x11, 0x1B, 0x08, 0x00, 0x3F, 0x28, 0xE6, 0x5E, 0x8B, 0x3B, 0xDE, 0xB0, 0x37, 0xCF, 0x8F, 0x22, 0x1D, 0xFC, 0xDA, 0xF5, 0x95, 0x0E, 0xDB, ++ 0x38, 0xD5, 0x06, 0xD8, 0x5B, 0xEF, 0x03, 0x21, 0x00, 0x39, 0x4D, 0x16, 0x95, 0x05, 0x9D, 0xFF, 0x40, 0xAE, 0x25, 0x6C, 0x5D, 0x5E, 0xDA, 0xBF, 0xB6, 0x9F, 0x5F, 0x40, 0xF3, 0x7A, 0x58, 0x8F, ++ 0x50, 0x53, 0x2C, 0xA4, 0x08, 0xA8, 0x16, 0x8A, 0xB1, 0x03, 0x21, 0x00, 0x87, 0xD0, 0xAD, 0x11, 0x52, 0x21, 0x10, 0x93, 0x14, 0x94, 0xBF, 0x2C, 0xAE, 0xAE, 0x36, 0x97, 0x97, 0x11, 0xBC, 0x58, ++ 0x5B, 0x32, 0xF0, 0x8C, 0x78, 0x49, 0x6F, 0x37, 0x9D, 0x60, 0x4D, 0x53, 0x03, 0x82, 0x01, 0x81, 0x00, 0xC0, 0xA6, 0x71, 0x1A, 0x96, 0x6C, 0x11, 0x31, 0x2A, 0xD9, 0xA8, 0x21, 0xD8, 0x08, 0x65, ++ 0x42, 0xA6, 0x00, 0xA4, 0xB4, 0x2C, 0x19, 0x40, 0x72, 0x02, 0x42, 0x62, 0x81, 0x06, 0x21, 0x0A, 0x43, 0x85, 0x23, 0x31, 0x70, 0x93, 0x08, 0x10, 0x8B, 0x18, 0x8C, 0x02, 0x24, 0x92, 0xC1, 0xB2, ++ 0x84, 0x12, 0xC4, 0x21, 0x8B, 0x04, 0x21, 0x81, 0xC8, 0x61, 0x02, 0x48, 0x05, 0x9C, 0x92, 0x01, 0xC0, 0x34, 0x88, 0x19, 0x32, 0x6C, 0x58, 0x20, 0x46, 0x89, 0x18, 0x68, 0xA2, 0xC2, 0x8D, 0x82, ++ 0x34, 0x6A, 0x1C, 0x09, 0x42, 0x00, 0xA2, 0x8C, 0xE3, 0xA6, 0x49, 0x1C, 0x11, 0x2C, 0xC2, 0x48, 0x12, 0xE0, 0x90, 0x21, 0x91, 0x98, 0x50, 0x62, 0xC0, 0x84, 0x62, 0x24, 0x51, 0xCA, 0x06, 0x2C, ++ 0x64, 0x24, 0x0E, 0x1B, 0xB3, 0x31, 0x24, 0x96, 0x85, 0x4B, 0x46, 0x06, 0xDB, 0x26, 0x68, 0xC3, 0x82, 0x68, 0x44, 0x10, 0x46, 0xC9, 0xB6, 0x21, 0x14, 0x04, 0x81, 0x14, 0x45, 0x50, 0x24, 0x42, ++ 0x08, 0x44, 0x22, 0x71, 0x0B, 0x92, 0x45, 0x9A, 0xA0, 0x81, 0x1A, 0x91, 0x70, 0x9C, 0x24, 0x10, 0x03, 0x95, 0x70, 0x04, 0xC5, 0x04, 0xC8, 0x26, 0x92, 0xD2, 0x92, 0x00, 0xC0, 0xB2, 0x60, 0xC0, ++ 0xA2, 0x68, 0x09, 0x19, 0x0A, 0xA2, 0x30, 0x0E, 0x18, 0x89, 0x69, 0xE0, 0x00, 0x8D, 0xD8, 0x48, 0x62, 0xDA, 0x14, 0x71, 0x20, 0x18, 0x05, 0x19, 0x07, 0x44, 0x04, 0x12, 0x40, 0x9B, 0x12, 0x40, ++ 0x11, 0x80, 0x10, 0xD1, 0x42, 0x81, 0x99, 0x28, 0x50, 0x8B, 0x10, 0x91, 0x02, 0x24, 0x64, 0xA0, 0x20, 0x6D, 0x12, 0x46, 0x21, 0x1C, 0x83, 0x8C, 0x1B, 0x47, 0x69, 0x01, 0x06, 0x90, 0xCC, 0x06, ++ 0x24, 0x81, 0x84, 0x69, 0x20, 0x98, 0x2C, 0x24, 0x12, 0x05, 0x21, 0xB1, 0x50, 0x41, 0x36, 0x02, 0x98, 0x44, 0x6E, 0xD1, 0xA6, 0x31, 0x11, 0x05, 0x6A, 0xD3, 0xA8, 0x40, 0xCA, 0xA8, 0x4C, 0x62, ++ 0xB0, 0x00, 0x03, 0x13, 0x4A, 0x53, 0x34, 0x46, 0x14, 0x19, 0x40, 0x04, 0xC5, 0x4C, 0xE3, 0x06, 0x69, 0x5A, 0xB0, 0x89, 0x61, 0x16, 0x8E, 0xCB, 0x10, 0x80, 0x8B, 0x16, 0x8E, 0xD9, 0x90, 0x64, ++ 0x0B, 0x94, 0x60, 0x24, 0x83, 0x85, 0x1A, 0xB3, 0x04, 0x54, 0x26, 0x22, 0x51, 0xB8, 0x25, 0x1C, 0x42, 0x4A, 0x0B, 0x81, 0x48, 0x42, 0xC4, 0x44, 0x5A, 0x10, 0x20, 0x23, 0x80, 0x84, 0x09, 0xB7, ++ 0x25, 0x4C, 0xC6, 0x48, 0x14, 0x85, 0x4D, 0x19, 0x38, 0x0E, 0x60, 0x16, 0x51, 0xD8, 0x32, 0x6A, 0x0A, 0x91, 0x89, 0x08, 0xC1, 0x70, 0xE0, 0x96, 0x4D, 0x18, 0x46, 0x8C, 0x01, 0x32, 0x8D, 0x91, ++ 0xC4, 0x05, 0x4A, 0x00, 0x61, 0x23, 0x08, 0x68, 0xA2, 0x10, 0x42, 0x10, 0xA8, 0x61, 0x13, 0x06, 0x21, 0x03, 0x82, 0x01, 0x81, 0x00, 0x8A, 0x24, 0x8E, 0x62, 0x06, 0x89, 0xC9, 0xB2, 0x45, 0x08, ++ 0x27, 0x84, 0x51, 0x20, 0x0D, 0x98, 0x04, 0x66, 0xDC, 0x42, 0x05, 0x44, 0x24, 0x85, 0x24, 0x26, 0x28, 0x22, 0x21, 0x61, 0x20, 0x16, 0x09, 0x0B, 0xA6, 0x2C, 0x0A, 0x11, 0x44, 0xE0, 0x92, 0x81, ++ 0x58, 0x48, 0x0D, 0x42, 0x22, 0x10, 0xA0, 0x06, 0x09, 0x8B, 0x24, 0x6E, 0x81, 0x28, 0x8C, 0xC0, 0x24, 0x80, 0x90, 0x30, 0x8D, 0x84, 0x36, 0x40, 0x4C, 0xA6, 0x84, 0x50, 0x04, 0x24, 0x94, 0xB6, ++ 0x8D, 0xA2, 0x92, 0x6D, 0x18, 0xB3, 0x44, 0xA0, 0x00, 0x85, 0xE3, 0xB8, 0x05, 0x14, 0x05, 0x04, 0xA4, 0xC2, 0x90, 0x84, 0x22, 0x81, 0xC3, 0x26, 0x2D, 0x0B, 0x20, 0x66, 0xCC, 0x90, 0x31, 0x98, ++ 0x38, 0x28, 0x10, 0x16, 0x6C, 0xC1, 0x34, 0x45, 0xC0, 0x10, 0x22, 0x24, 0xC6, 0x88, 0x03, 0x46, 0x32, 0xD8, 0x40, 0x90, 0x1C, 0x20, 0x68, 0x04, 0x15, 0x28, 0x9A, 0x18, 0x81, 0x44, 0x98, 0x8D, ++ 0x9C, 0x20, 0x6E, 0x9C, 0x30, 0x2C, 0xC1, 0xB8, 0x20, 0x61, 0x42, 0x21, 0x08, 0x03, 0x10, 0xA0, 0xC2, 0x8C, 0x58, 0x12, 0x85, 0x53, 0x20, 0x4C, 0x03, 0x30, 0x81, 0x4C, 0xA4, 0x8D, 0x44, 0xC0, ++ 0x8D, 0x51, 0x40, 0x4C, 0x1C, 0xA7, 0x2C, 0x44, 0x08, 0x65, 0xA0, 0x38, 0x40, 0xDA, 0x20, 0x80, 0x81, 0x06, 0x85, 0x8C, 0x26, 0x0D, 0xE2, 0xA8, 0x8C, 0x9C, 0x44, 0x11, 0x59, 0x42, 0x28, 0xC4, ++ 0x26, 0x04, 0x44, 0x14, 0x26, 0xA1, 0x42, 0x64, 0x08, 0xC0, 0x85, 0x11, 0x01, 0x86, 0x9B, 0x48, 0x31, 0x99, 0xB2, 0x0C, 0x80, 0x46, 0x44, 0x59, 0xA8, 0x8C, 0x00, 0x42, 0x08, 0x98, 0x82, 0x90, ++ 0x0A, 0xB5, 0x45, 0x62, 0x24, 0x48, 0x12, 0x96, 0x05, 0x44, 0x12, 0x46, 0x00, 0xC8, 0x88, 0x13, 0xA0, 0x61, 0xE1, 0x28, 0x4D, 0x0A, 0xB9, 0x91, 0x4B, 0x96, 0x20, 0x99, 0xB8, 0x44, 0x00, 0x31, ++ 0x4E, 0x98, 0x12, 0x85, 0x00, 0xB6, 0x01, 0x83, 0xA0, 0x0D, 0x14, 0x15, 0x0E, 0x18, 0x81, 0x10, 0x19, 0x01, 0x22, 0x4A, 0x06, 0x68, 0x1A, 0x49, 0x8D, 0xE1, 0xA2, 0x84, 0x11, 0xC6, 0x31, 0x21, ++ 0x26, 0x25, 0x91, 0xA0, 0x6D, 0x03, 0x05, 0x24, 0xA1, 0xB6, 0x08, 0x94, 0x44, 0x72, 0x43, 0x34, 0x12, 0x5B, 0xB4, 0x20, 0x41, 0xB6, 0x50, 0xD0, 0x88, 0x8D, 0x0B, 0x07, 0x4D, 0x1C, 0x94, 0x64, ++ 0x4C, 0x20, 0x8E, 0x8B, 0x88, 0x08, 0xE0, 0x30, 0x09, 0x44, 0x20, 0x05, 0x49, 0x86, 0x4D, 0x03, 0x13, 0x4E, 0x19, 0xC9, 0x84, 0x09, 0x37, 0x61, 0x1A, 0x43, 0x68, 0x4A, 0x80, 0x90, 0x02, 0x04, ++ 0x31, 0x1C, 0x17, 0x42, 0x18, 0x40, 0x80, 0xC8, 0x30, 0x8E, 0xE1, 0xA2, 0x41, 0xC3, 0x34, 0x04, 0xA3, 0x28, 0x22, 0x51, 0x24, 0x71, 0x03, 0x82, 0x06, 0x81, 0x00, 0x88, 0xD6, 0xFE, 0xF4, 0x67, ++ 0x12, 0xCA, 0x18, 0x28, 0x72, 0xAB, 0x29, 0x19, 0x67, 0x8A, 0xFF, 0x9D, 0x94, 0xE7, 0x43, 0xE0, 0x63, 0xA3, 0x9E, 0x0C, 0x35, 0xCA, 0xF7, 0x2A, 0x7F, 0x2E, 0xDA, 0x28, 0xE6, 0x58, 0x58, 0x52, ++ 0x0D, 0x5D, 0x84, 0x67, 0xDE, 0x74, 0x7C, 0xF3, 0x40, 0x65, 0x3B, 0x52, 0xC2, 0x68, 0xF5, 0x54, 0x13, 0xF5, 0xAD, 0xDC, 0x7D, 0x49, 0x01, 0x1E, 0xC3, 0x3E, 0xDD, 0x53, 0x74, 0x23, 0xA8, 0x42, ++ 0x88, 0x86, 0x93, 0x37, 0xAE, 0xA0, 0x78, 0x1A, 0x12, 0x42, 0x69, 0x07, 0x14, 0x51, 0x72, 0x2D, 0xB3, 0xBB, 0x8F, 0x2C, 0xE5, 0xB1, 0x55, 0x2F, 0x83, 0xD2, 0xAF, 0x07, 0xF2, 0x56, 0x13, 0x91, ++ 0x8A, 0x9F, 0x4E, 0x6F, 0x12, 0x57, 0x60, 0x38, 0x88, 0xE5, 0x89, 0x30, 0x8C, 0xA5, 0xF9, 0x5F, 0x07, 0x14, 0x3D, 0x23, 0xBA, 0xAE, 0x17, 0x52, 0x0B, 0x36, 0xB6, 0xE0, 0xE9, 0x4F, 0xAF, 0x68, ++ 0x45, 0xEB, 0x21, 0x31, 0xAE, 0xC3, 0x83, 0xE6, 0x3B, 0xC8, 0x64, 0x4E, 0xE5, 0xF1, 0xAC, 0xCB, 0xA8, 0x2F, 0x92, 0x11, 0xE5, 0x7A, 0xFC, 0xBF, 0x50, 0x9C, 0x11, 0x31, 0xA3, 0x74, 0x66, 0xBC, ++ 0x91, 0xB3, 0x57, 0xDC, 0xBB, 0xBC, 0x14, 0xCC, 0xC3, 0x19, 0xC4, 0xCC, 0x6A, 0xC7, 0x5F, 0xCD, 0xC8, 0x2C, 0x65, 0x96, 0xD0, 0x77, 0x70, 0xC8, 0x27, 0x7A, 0xD3, 0x70, 0xB1, 0x92, 0xA0, 0xB4, ++ 0xE0, 0x5F, 0x81, 0x2E, 0x0E, 0x26, 0x5D, 0x29, 0x12, 0xAA, 0x29, 0xF0, 0x3F, 0xC9, 0xF7, 0x2D, 0xFA, 0x69, 0xC9, 0xB1, 0x29, 0x1A, 0x3F, 0xC5, 0x83, 0x64, 0x2B, 0x23, 0x5F, 0x69, 0x91, 0xA9, ++ 0x54, 0x78, 0x83, 0x47, 0xF6, 0x0A, 0x03, 0x28, 0xC4, 0x8E, 0xCE, 0xE5, 0x1B, 0xA0, 0x2D, 0xFF, 0x32, 0x3A, 0xBD, 0x91, 0x16, 0x67, 0xCB, 0x14, 0x54, 0x9B, 0x61, 0x8F, 0x1C, 0x5D, 0x25, 0x0C, ++ 0xAC, 0x9E, 0x35, 0xE0, 0x71, 0x60, 0x19, 0x92, 0xFB, 0xEC, 0x0B, 0xAE, 0x6F, 0x74, 0x21, 0x30, 0x81, 0x40, 0x47, 0x44, 0xD1, 0x2F, 0x2A, 0x0E, 0x04, 0xBD, 0xB2, 0x65, 0xE0, 0x92, 0x4C, 0xAD, ++ 0xA4, 0x0D, 0x1F, 0xA1, 0xF3, 0x8A, 0xCA, 0x46, 0x06, 0xBF, 0xD4, 0x57, 0x57, 0x12, 0xB8, 0x26, 0x0A, 0x45, 0x6F, 0xDD, 0xEE, 0xEF, 0xE7, 0xCA, 0x25, 0x9B, 0xCD, 0xA9, 0x7B, 0x9B, 0x93, 0x9A, ++ 0x5F, 0xD2, 0x88, 0x9C, 0x9B, 0x49, 0xFB, 0x7D, 0x4E, 0x35, 0x53, 0xDE, 0xA6, 0x1B, 0x33, 0x39, 0xBD, 0x0E, 0x6B, 0x16, 0xBF, 0x3B, 0xB2, 0x27, 0x10, 0x3B, 0xF9, 0x20, 0x2E, 0x72, 0xDC, 0x50, ++ 0x2E, 0x28, 0xF7, 0xCE, 0x15, 0x59, 0xA4, 0x63, 0x1F, 0x37, 0x25, 0x20, 0x32, 0x4E, 0x4E, 0xBA, 0x07, 0x54, 0x5F, 0x78, 0xBF, 0x4D, 0x94, 0xB0, 0xE5, 0xB8, 0xBF, 0x51, 0xB8, 0xF1, 0x76, 0x53, ++ 0x3D, 0x5C, 0xFE, 0xA5, 0x23, 0x2F, 0x28, 0x3A, 0x47, 0x60, 0x5F, 0xA6, 0x5D, 0xDB, 0x17, 0xC8, 0x91, 0xC2, 0x51, 0x01, 0x1C, 0x4E, 0x98, 0xEE, 0xB6, 0xEB, 0x00, 0xCB, 0x65, 0xBA, 0x31, 0xC8, ++ 0xF0, 0x25, 0xC8, 0x7A, 0x9F, 0xE0, 0x2D, 0xBC, 0x10, 0xC5, 0xD8, 0x3A, 0x06, 0x5E, 0xBA, 0x5D, 0x7B, 0x2A, 0x19, 0xD5, 0xA1, 0xCB, 0x2C, 0x16, 0x0A, 0xE1, 0x66, 0xE8, 0x67, 0xF2, 0xAF, 0x8C, ++ 0x7D, 0x49, 0xD6, 0x3F, 0xB8, 0x3A, 0x61, 0x49, 0x57, 0xFC, 0x0A, 0x3B, 0x5A, 0x5C, 0x74, 0x99, 0x0E, 0x9A, 0x2B, 0x02, 0x12, 0x0C, 0x7E, 0x6D, 0xE3, 0x7E, 0x15, 0x5F, 0xB4, 0x72, 0xF5, 0x0F, ++ 0x0A, 0x45, 0xE4, 0x7C, 0xF5, 0xF9, 0xD7, 0xA4, 0xC8, 0x29, 0x82, 0xC9, 0xDC, 0x86, 0xAE, 0x87, 0x7C, 0x3F, 0xD1, 0x88, 0x59, 0x43, 0xE4, 0x39, 0xFB, 0x00, 0x3C, 0x7A, 0x9A, 0x42, 0xF7, 0x1B, ++ 0x4F, 0xF6, 0xF0, 0xA2, 0x8B, 0x14, 0x0C, 0xBD, 0xBA, 0x6E, 0x71, 0xB1, 0x3A, 0xC3, 0x1B, 0x23, 0xDE, 0x9E, 0xAB, 0x78, 0x37, 0xE1, 0x5A, 0x69, 0xF8, 0x33, 0xEB, 0x7B, 0x56, 0xA7, 0x1D, 0x8B, ++ 0xC2, 0xCA, 0xF1, 0xF2, 0xA3, 0x1C, 0x34, 0x5B, 0xD5, 0xF4, 0x6E, 0xE0, 0x13, 0xA7, 0xC6, 0x89, 0x37, 0x23, 0x37, 0x19, 0x1D, 0xAA, 0x80, 0x0C, 0x0A, 0xC6, 0xC4, 0x6C, 0x9F, 0xF6, 0x88, 0xB1, ++ 0xA0, 0x13, 0x47, 0xF2, 0x57, 0xC4, 0x74, 0xAA, 0x3D, 0x97, 0xC1, 0xD6, 0x3A, 0x8C, 0x00, 0xE0, 0xA3, 0x7B, 0x68, 0x16, 0x73, 0xF5, 0x7C, 0x1C, 0x9C, 0x8F, 0xCC, 0xD4, 0x6F, 0x17, 0x4C, 0x74, ++ 0xA2, 0x9D, 0x84, 0xCE, 0xB7, 0x1F, 0x7E, 0x6B, 0x2F, 0x8C, 0xD2, 0xB0, 0x89, 0xED, 0x43, 0xF7, 0xC9, 0x6D, 0xAE, 0x81, 0xA2, 0x23, 0x41, 0x8C, 0x20, 0xB1, 0x6F, 0x1D, 0xF3, 0xD1, 0xA9, 0x78, ++ 0xAE, 0x28, 0xF6, 0xDF, 0x35, 0xEC, 0x55, 0x9D, 0x04, 0xD2, 0x0E, 0xC7, 0x4B, 0x22, 0x4A, 0xEA, 0x31, 0xA2, 0x89, 0xB0, 0x15, 0xB0, 0x69, 0xE9, 0xCB, 0xBB, 0xF7, 0xCF, 0x6D, 0xE9, 0x4C, 0xFB, ++ 0x2A, 0x96, 0xE4, 0xAE, 0x34, 0x62, 0xC9, 0x60, 0x03, 0xCD, 0xDA, 0x87, 0xDB, 0x56, 0x1A, 0xF2, 0xCE, 0x3C, 0x0B, 0xA1, 0xD9, 0x04, 0x13, 0xFD, 0xCE, 0x3C, 0xCF, 0x43, 0x90, 0xC0, 0x2C, 0x1C, ++ 0xB9, 0xF6, 0x54, 0xF4, 0x82, 0x0E, 0xC3, 0x30, 0x15, 0x45, 0x7D, 0x4A, 0x62, 0x9F, 0xBF, 0x39, 0x41, 0x9C, 0xAB, 0x76, 0x42, 0xD6, 0x88, 0x5E, 0x10, 0x3F, 0xCE, 0x0D, 0x42, 0x06, 0xCC, 0xE7, ++ 0xC1, 0x2C, 0x6F, 0xC4, 0x4F, 0xA3, 0x3A, 0xD0, 0x86, 0x4C, 0x33, 0x71, 0xA7, 0xCB, 0xE8, 0x20, 0xE3, 0xB3, 0x71, 0xB6, 0x56, 0xA3, 0x8F, 0x2E, 0x7F, 0xF1, 0x8F, 0xE4, 0xA5, 0x0C, 0x8A, 0xB3, ++ 0xF8, 0x5D, 0x78, 0x3F, 0xB5, 0x78, 0x35, 0xCE, 0xD8, 0x49, 0x0B, 0x84, 0xEE, 0x0D, 0x99, 0xAF, 0x0D, 0x64, 0xC4, 0x83, 0xCE, 0xB6, 0x36, 0x6F, 0xF5, 0x4F, 0x8A, 0xC8, 0xA4, 0x0D, 0xB1, 0xAF, ++ 0xA5, 0x73, 0xA4, 0xFB, 0x32, 0x6C, 0x74, 0xF0, 0x23, 0x6E, 0xCE, 0xF3, 0xDA, 0x71, 0x20, 0x66, 0x5C, 0xCE, 0x05, 0xDD, 0x65, 0x4B, 0x50, 0x71, 0x72, 0x3A, 0x83, 0x48, 0xE7, 0xCD, 0x77, 0x93, ++ 0x51, 0x38, 0x19, 0xB6, 0x1C, 0xB6, 0x4E, 0x13, 0x28, 0xE8, 0xB2, 0x2E, 0x76, 0x64, 0xBD, 0x6B, 0x41, 0xB5, 0x71, 0x0D, 0x19, 0xEA, 0x88, 0x09, 0xD4, 0x45, 0x08, 0x50, 0xE9, 0x07, 0xDF, 0xC4, ++ 0xD0, 0xB7, 0x5F, 0x58, 0x8C, 0xEC, 0xE9, 0x62, 0xE9, 0xE0, 0x93, 0x7C, 0xE1, 0x40, 0x24, 0x46, 0xA4, 0xD2, 0x89, 0x1A, 0x46, 0xE6, 0x61, 0x7F, 0xB2, 0x9D, 0x4F, 0xCD, 0x71, 0x26, 0x06, 0xF7, ++ 0x81, 0x9E, 0xCA, 0x60, 0xF7, 0xE0, 0xD5, 0xB1, 0x9E, 0x7F, 0xFB, 0x57, 0xC7, 0x3C, 0x16, 0xFF, 0xEE, 0xB9, 0x00, 0x38, 0x41, 0x0C, 0xB9, 0xFC, 0xBB, 0x5E, 0x9D, 0x51, 0xEB, 0x3E, 0xB6, 0x29, ++ 0x7E, 0x9F, 0xF6, 0xAB, 0x70, 0x88, 0xFE, 0x2D, 0x9B, 0x23, 0x7B, 0xC2, 0x4C, 0xF7, 0xF8, 0x29, 0x01, 0x18, 0xA5, 0xE0, 0xE0, 0x0A, 0x0B, 0x90, 0x3F, 0xB6, 0x37, 0x5C, 0x84, 0x81, 0x76, 0xCD, ++ 0x0A, 0x8C, 0x88, 0x75, 0xCC, 0x59, 0x19, 0x9C, 0xDA, 0x11, 0xA8, 0x7A, 0x78, 0xF6, 0x5C, 0xC4, 0x04, 0x33, 0x0B, 0x08, 0x75, 0x71, 0xFD, 0x06, 0x33, 0xE2, 0x71, 0x29, 0xFD, 0xAB, 0x5A, 0x8A, ++ 0x1F, 0x79, 0x3E, 0x52, 0x41, 0x2B, 0x00, 0x83, 0xFD, 0x5C, 0x74, 0xDB, 0x3C, 0xF6, 0x0C, 0x25, 0x43, 0xCE, 0x7C, 0x91, 0xB2, 0x80, 0x0E, 0x40, 0x20, 0x3F, 0x8D, 0x99, 0xFE, 0x5F, 0xDE, 0x5B, ++ 0x10, 0x8E, 0x7E, 0xDC, 0x80, 0xEB, 0xB9, 0xBB, 0x34, 0x98, 0x6E, 0xC5, 0xC5, 0xA8, 0xF5, 0x80, 0xE7, 0x57, 0x52, 0x90, 0x7F, 0xF0, 0xF2, 0x94, 0xC8, 0x66, 0xC2, 0xCF, 0x1F, 0x36, 0x2E, 0x84, ++ 0x0B, 0x68, 0x81, 0xBD, 0x43, 0x21, 0x92, 0x01, 0x78, 0x1C, 0x63, 0xB0, 0x03, 0x9A, 0x95, 0xBC, 0xFB, 0x4A, 0x0F, 0xEC, 0xE5, 0x69, 0xDF, 0x00, 0x52, 0x3C, 0xE9, 0xC0, 0x84, 0xB0, 0x22, 0xB3, ++ 0xB0, 0x22, 0x24, 0x2E, 0x28, 0x41, 0x97, 0x96, 0xAC, 0xF0, 0xA0, 0xC9, 0x95, 0xF9, 0x48, 0xDB, 0xFF, 0xFD, 0x30, 0xD7, 0x7E, 0xD1, 0x05, 0xA3, 0xC9, 0x94, 0x3C, 0x40, 0x6B, 0x30, 0x5B, 0xC8, ++ 0x1A, 0x6A, 0x24, 0x8A, 0x29, 0x15, 0x48, 0xF2, 0xA6, 0x7F, 0x43, 0x8D, 0x96, 0x6A, 0x57, 0xD5, 0x3F, 0x4B, 0x7B, 0xE1, 0x53, 0x54, 0xE5, 0x81, 0xBE, 0x16, 0xF7, 0xAD, 0x64, 0xD1, 0x64, 0xE8, ++ 0x57, 0x87, 0xDF, 0x58, 0x49, 0xC8, 0x10, 0xAF, 0xC2, 0x8D, 0x06, 0x48, 0x2F, 0x44, 0x1B, 0x5F, 0xDE, 0x3D, 0xB2, 0xED, 0x36, 0xDD, 0x25, 0xAA, 0x66, 0x64, 0xD4, 0xD4, 0x3F, 0xFA, 0x32, 0xED, ++ 0xA2, 0x56, 0x89, 0xC9, 0xF4, 0xA5, 0xD5, 0x14, 0xFC, 0x66, 0x23, 0x1C, 0x54, 0x01, 0x52, 0x09, 0x22, 0x52, 0x44, 0x38, 0xEF, 0x1D, 0xC7, 0x8D, 0x69, 0x3C, 0x97, 0x18, 0xDE, 0xBB, 0xD2, 0x43, ++ 0x31, 0x26, 0x74, 0xC8, 0x99, 0xF1, 0x89, 0x10, 0xE3, 0x89, 0xC8, 0xEB, 0xE5, 0x05, 0x82, 0x4B, 0xCC, 0x42, 0xCD, 0x4A, 0x9A, 0xCE, 0x19, 0x37, 0x68, 0x22, 0x02, 0x19, 0x01, 0x1F, 0x3B, 0x1F, ++ 0x33, 0x54, 0x27, 0xBF, 0xF9, 0xE8, 0xBD, 0xED, 0x5C, 0x08, 0x71, 0x1A, 0x09, 0xC2, 0xB7, 0x1C, 0xB9, 0x64, 0xC5, 0x6A, 0x83, 0x93, 0xBF, 0xD2, 0xB5, 0x6E, 0x9B, 0x6B, 0x2F, 0x51, 0x3E, 0x68, ++ 0x25, 0x87, 0xDC, 0x1B, 0x8E, 0xD1, 0x96, 0x06, 0x63, 0x26, 0x87, 0x10, 0x25, 0x62, 0x80, 0x36, 0x70, 0x00, 0x63, 0x17, 0x6D, 0x34, 0x5D, 0xE3, 0x84, 0xE1, 0x82, 0xD6, 0xC4, 0x17, 0xA3, 0x2A, ++ 0xB1, 0x10, 0x95, 0xEF, 0x59, 0xBB, 0x4D, 0x17, 0x1B, 0x9C, 0xF8, 0x1D, 0x17, 0xAC, 0x42, 0x66, 0x4D, 0xED, 0x93, 0x3C, 0xCB, 0x72, 0x2C, 0x69, 0x85, 0x7F, 0xFC, 0x53, 0xC8, 0xE7, 0xF2, 0x47, ++ 0x4B, 0x0C, 0xB2, 0xDF, 0xF2, 0xDD, 0xC8, 0xA5, 0xC6, 0x01, 0xC8, 0x4A, 0x70, 0x19, 0x81, 0x19, 0x9B, 0xCC, 0xF7, 0x41, 0x12, 0xA6, 0xEC, 0x06, 0x2C, 0x4F, 0xEB, 0x60, 0x1A, 0x02, 0x8A, 0xF0, ++ 0x10, 0x32, 0xAD, 0xB6, 0xBD, 0x15, 0xD4, 0xC2, 0xB9, 0x55, 0x0A, 0xA8, 0x50, 0xAD, 0x62, 0xCC, 0xC3, 0xA3, 0x66, 0x5D, 0x52, 0x12, 0xB1, 0x2E, 0x0F, 0xD5, 0xC5, 0x32, 0x6A, 0x1E, 0x5E, 0xB1, ++ 0xF1, 0x0D, 0x55, 0x7D, 0x94, 0x60, 0x5E, 0x8E, 0x3F, 0x35, 0x6E, 0x08, 0xFF, 0x7F, 0xD8, 0x84, 0xED, 0x3C, 0x42, 0x05, 0x46, 0x35, 0x94, 0xC9, 0xAF, 0x2F, 0x39, 0xE4, 0xB1, 0x27, 0x46, 0x95, ++ 0x23, 0x4B, 0x54, 0xEE, 0xCE, 0xD9, 0x3F, 0x46, 0x0E, 0xDF, 0x1A, 0x13, 0xC2, 0xCB, 0x4B, 0x17, 0xD3, 0x22, 0xF6, 0xF7, 0x9F, 0xE1, 0x6F, 0x03, 0x57, 0xC1, 0xC4, 0x73, 0x98, 0x63, 0xE7, 0x96, ++ 0x79, 0x1F, 0x86, 0x47, 0xFA, 0xBF, 0x73, 0x0A, 0xB0, 0x0E, 0x0D, 0xA5, 0x09, 0x70, 0x6D, 0x94, 0x57, 0x17, 0x40, 0xF6, 0x1F, 0x7B, 0xAF, 0x36, 0x6D, 0x27, 0x74, 0xC9, 0xB5, 0xB8, 0xC6, 0x1D, ++ 0xD6, 0xBE, 0x98, 0x19, 0xA6, 0x02, 0x8B, 0x26, 0x4B, 0xB2, 0xE4, 0xAE, 0xA5, 0x4B, 0x56, 0xD4, 0xEC, 0xAB, 0x5B, 0x52, 0x8C, 0xE0, 0xC0, 0xC0, 0xCC, 0xDB, 0x73, 0x02, 0x33, 0x52, 0xCB, 0x00, ++ 0x44, 0x5B, 0xAB, 0x6F, 0x74, 0x67, 0xB4, 0x64, 0x4D, 0x43, 0x61, 0xC4, 0x64, 0xFA, 0xC6, 0xB5, 0xB1, 0x37, 0xD3, 0x23, 0x91, 0x02, 0x1B, 0x47, 0x5F, 0xCB, 0x5F, 0x31, 0x77, 0x4F, 0xD8, 0xEC, ++ 0xAB, 0xDF, 0x65, 0x47, 0x5F, 0x25, 0x57, 0x4C, 0x65, 0x55, 0x9C, 0xB3, 0x31, 0xF4, 0x1C, 0x0F, 0x49, 0x8B, 0x74, 0xDD, 0x94, 0x1C, 0x34, 0x4C, 0x50, 0xD8, 0xE6, 0x4F, 0x95, 0x78, 0x71, 0x4A, ++ 0x32, 0x56, 0x1F, 0xAA, 0xCE, 0xAF, 0x78, 0x14, 0x8E, 0x6D, 0xA4, 0xB5, 0x66, 0x82, 0x69, 0x25, 0x71, 0x4B, 0x17, 0x10, 0x8A, 0xFD, 0xD5, 0x46, 0x38, 0x5A, 0x3C, 0xD4, 0x54, 0xD5, 0xCA, 0xA1, ++ 0x69, 0x60, 0x91, 0x62, 0x82, 0xA4, 0x7C, 0x43, 0x15, 0xCE, 0x23, 0x6B, 0xD9, 0xE3, 0x25, 0x5C, 0x60, 0x4E, 0xBD, 0xC3, 0x97, 0x72, 0xDB, 0x5C, 0xE0, 0xB2, 0x36, 0xA0, 0x82, 0x05, 0x05, 0x03, ++ 0x82, 0x05, 0x01, 0x00, 0x61, 0x77, 0xE3, 0xDE, 0x0D, 0x4F, 0x1E, 0xF5, 0x84, 0x77, 0x35, 0x94, 0x7B, 0x56, 0xD0, 0x8E, 0x84, 0x1D, 0xB2, 0x44, 0x4F, 0xA2, 0xB7, 0x29, 0xAD, 0xEB, 0x14, 0x17, ++ 0xCA, 0x7A, 0xDF, 0x42, 0xA1, 0x49, 0x0C, 0x5A, 0x09, 0x7F, 0x00, 0x27, 0x60, 0xC1, 0xFC, 0x41, 0x9B, 0xE8, 0x32, 0x5A, 0xAD, 0x01, 0x97, 0xC5, 0x2C, 0xED, 0x80, 0xD3, 0xDF, 0x18, 0xE7, 0x77, ++ 0x42, 0x65, 0xB2, 0x89, 0x91, 0x2C, 0xEC, 0xA1, 0xBE, 0x3A, 0x90, 0xD8, 0xA4, 0xFD, 0xE6, 0x5C, 0x84, 0xC6, 0x10, 0x86, 0x4E, 0x47, 0xDE, 0xEC, 0xAE, 0x3E, 0xEA, 0x44, 0x30, 0xB9, 0x90, 0x95, ++ 0x59, 0x40, 0x8D, 0x11, 0xA6, 0xAB, 0xDB, 0x7D, 0xB9, 0x33, 0x6D, 0xF7, 0xF9, 0x6E, 0xAB, 0x48, 0x64, 0xA6, 0x57, 0x97, 0x91, 0x26, 0x5F, 0xA5, 0x6C, 0x34, 0x8C, 0xB7, 0xD2, 0xDD, 0xC9, 0x0E, ++ 0x13, 0x3A, 0x95, 0xC3, 0xF6, 0xB1, 0x36, 0x01, 0x42, 0x9F, 0x54, 0x08, 0xBD, 0x99, 0x9A, 0xA4, 0x79, 0xC1, 0x01, 0x81, 0x59, 0x55, 0x0E, 0xC5, 0x5A, 0x11, 0x3C, 0x49, 0x3B, 0xE6, 0x48, 0xF4, ++ 0xE0, 0x36, 0xDD, 0x4F, 0x8C, 0x80, 0x9E, 0x03, 0x6B, 0x4F, 0xBB, 0x91, 0x8C, 0x2C, 0x48, 0x4A, 0xD8, 0xE1, 0x74, 0x7A, 0xE0, 0x55, 0x85, 0xAB, 0x43, 0x3F, 0xDF, 0x46, 0x1A, 0xF0, 0x3C, 0x25, ++ 0xA7, 0x73, 0x70, 0x07, 0x21, 0xAA, 0x05, 0xF7, 0x37, 0x9F, 0xE7, 0xF5, 0xED, 0x96, 0x17, 0x5D, 0x40, 0x21, 0x07, 0x6E, 0x7F, 0x52, 0xB6, 0x03, 0x08, 0xEF, 0xF5, 0xD4, 0x2B, 0xA6, 0xE0, 0x93, ++ 0xB3, 0xD0, 0x81, 0x5E, 0xB3, 0x49, 0x66, 0x46, 0xE4, 0x92, 0x30, 0xA9, 0xB3, 0x5C, 0x8D, 0x41, 0x90, 0x0C, 0x2B, 0xB8, 0xD3, 0xB4, 0x46, 0xA2, 0x31, 0x27, 0xF7, 0xE0, 0x96, 0xD8, 0x5A, 0x1C, ++ 0x79, 0x4A, 0xD4, 0xC8, 0x92, 0x77, 0x90, 0x4F, 0xC6, 0xBF, 0xEC, 0x57, 0xB1, 0xCD, 0xD8, 0x0D, 0xF9, 0x95, 0x50, 0x30, 0xFD, 0xCA, 0x74, 0x1A, 0xFB, 0xDA, 0xC8, 0x27, 0xB1, 0x3C, 0xCD, 0x54, ++ 0x03, 0x58, 0x8A, 0xF4, 0x64, 0x40, 0x03, 0xC2, 0x26, 0x5D, 0xFA, 0x4D, 0x41, 0x9D, 0xBC, 0xCD, 0x20, 0x64, 0x89, 0x23, 0x86, 0x51, 0x8B, 0xE9, 0xD5, 0x1C, 0x16, 0x49, 0x82, 0x75, 0xEB, 0xEC, ++ 0xF5, 0xCD, 0xC7, 0xA8, 0x20, 0xF2, 0xC2, 0x93, 0x14, 0xAC, 0x4A, 0x6F, 0x08, 0xB2, 0x25, 0x2A, 0xD3, 0xCF, 0xB1, 0x99, 0xAA, 0x42, 0xFE, 0x0B, 0x4F, 0xB5, 0x71, 0x97, 0x5C, 0x10, 0x20, 0xD9, ++ 0x49, 0xE1, 0x94, 0xEE, 0x1E, 0xAD, 0x93, 0x7B, 0xFB, 0x55, 0x0B, 0xB3, 0xBA, 0x8E, 0x35, 0x7A, 0x02, 0x9C, 0x29, 0xF0, 0x77, 0x55, 0x46, 0x02, 0xE1, 0xCA, 0x2F, 0x22, 0x89, 0xCB, 0x91, 0x69, ++ 0x94, 0x1C, 0x3A, 0xAF, 0xDB, 0x8E, 0x58, 0xC7, 0xF2, 0xAC, 0x77, 0x29, 0x1F, 0xB4, 0x14, 0x7C, 0x65, 0xF6, 0xB0, 0x31, 0xD3, 0xEB, 0xA4, 0x2F, 0x2A, 0xCF, 0xD9, 0x44, 0x8A, 0x5B, 0xC2, 0x2B, ++ 0x47, 0x6E, 0x07, 0xCC, 0xCE, 0xDA, 0x23, 0x06, 0xC5, 0x54, 0xEC, 0x9B, 0x7A, 0xB6, 0x55, 0xF1, 0xD7, 0x31, 0x8C, 0x2B, 0x7E, 0x67, 0xD5, 0xF6, 0x9B, 0xED, 0xF5, 0x60, 0x00, 0xFD, 0xA9, 0x89, ++ 0x86, 0xB5, 0xAB, 0x1B, 0x3A, 0x22, 0xD8, 0xDF, 0xD6, 0x68, 0x16, 0x97, 0xB2, 0x3A, 0x55, 0xC9, 0x6E, 0x87, 0x10, 0xF3, 0xF9, 0x8C, 0x04, 0x4F, 0xB1, 0x5F, 0x60, 0x63, 0x13, 0xEE, 0x56, 0xC0, ++ 0xF1, 0xF5, 0xCA, 0x0F, 0x51, 0x2E, 0x08, 0x48, 0x4F, 0xCB, 0x35, 0x8E, 0x6E, 0x52, 0x8F, 0xFA, 0x89, 0xF8, 0xA8, 0x66, 0xCC, 0xFF, 0x3C, 0x0C, 0x58, 0x13, 0x14, 0x7E, 0xC5, 0x9A, 0xF0, 0x47, ++ 0x0C, 0x4A, 0xAD, 0x01, 0x41, 0xD3, 0x4F, 0x10, 0x1D, 0xA2, 0xE5, 0xE1, 0xBD, 0x52, 0xD0, 0xD4, 0xC9, 0xB1, 0x3B, 0x3E, 0x3D, 0x87, 0xD1, 0x58, 0x61, 0x05, 0x79, 0x67, 0x54, 0xE7, 0x97, 0x8C, ++ 0xA1, 0xC6, 0x8A, 0x7D, 0x85, 0xDF, 0x11, 0x2B, 0x7A, 0xB9, 0x21, 0xB3, 0x59, 0xA9, 0xF0, 0x3C, 0xBD, 0x27, 0xA7, 0xEA, 0xC8, 0x7A, 0x9A, 0x80, 0xB0, 0xB2, 0x6B, 0x4C, 0x96, 0x57, 0xED, 0x85, ++ 0xAD, 0x7F, 0xA2, 0x61, 0x6A, 0xB3, 0x45, 0xEB, 0x82, 0x26, 0xF6, 0x9F, 0xC0, 0xF4, 0x81, 0x83, 0xFF, 0x57, 0x4B, 0xCD, 0x76, 0x7B, 0x56, 0x76, 0x41, 0x3A, 0xDB, 0x12, 0xEA, 0x21, 0x50, 0xA0, ++ 0xE9, 0x76, 0x83, 0xEE, 0x54, 0x24, 0x3C, 0x25, 0xB7, 0xEA, 0x8A, 0x71, 0x86, 0x06, 0xF8, 0x69, 0x93, 0xD8, 0xD0, 0xDA, 0xCE, 0x83, 0x4E, 0xD3, 0x41, 0xEE, 0xB7, 0x24, 0xFE, 0x3D, 0x5F, 0xF0, ++ 0xBC, 0x8B, 0x8A, 0x7B, 0x81, 0x04, 0xBA, 0x26, 0x9D, 0x34, 0x13, 0x3A, 0x4C, 0xF8, 0x30, 0x0A, 0x2D, 0x68, 0x84, 0x96, 0xB5, 0x9B, 0x6F, 0xCB, 0xC6, 0x1A, 0xE9, 0x60, 0x62, 0xEA, 0x1D, 0x8E, ++ 0x5B, 0x41, 0x0C, 0x56, 0x71, 0xF4, 0x24, 0x41, 0x7E, 0xD6, 0x93, 0x32, 0x9C, 0xD9, 0x83, 0x00, 0x1F, 0xFC, 0xD1, 0x00, 0x23, 0xD5, 0x98, 0x85, 0x9F, 0xB7, 0xAD, 0x5F, 0xD2, 0x63, 0x54, 0x71, ++ 0x17, 0x10, 0x06, 0x90, 0xC6, 0xCE, 0x74, 0x38, 0x95, 0x6E, 0x6C, 0xC5, 0x7F, 0x1B, 0x5D, 0xE5, 0x3B, 0xB0, 0xDC, 0x72, 0xCE, 0x9B, 0x6D, 0xEA, 0xA8, 0x57, 0x89, 0x59, 0x9A, 0x70, 0xF0, 0x05, ++ 0x1F, 0x1A, 0x0E, 0x25, 0xE8, 0x6D, 0x88, 0x8B, 0x00, 0xDF, 0x36, 0xBD, 0xBC, 0x93, 0xEF, 0x72, 0x17, 0xC4, 0x5A, 0xCE, 0x11, 0xC0, 0x79, 0x0D, 0x70, 0xE9, 0x95, 0x3E, 0x5B, 0x41, 0x7B, 0xA2, ++ 0xFD, 0x9A, 0x4C, 0xAF, 0x82, 0xF1, 0xFC, 0xE6, 0xF4, 0x5F, 0x53, 0xE2, 0x15, 0xB8, 0x35, 0x5E, 0xF6, 0x1D, 0x89, 0x1D, 0xF1, 0xC7, 0x94, 0x23, 0x1C, 0x16, 0x2D, 0xD2, 0x41, 0x64, 0xB5, 0x34, ++ 0xA9, 0xD4, 0x84, 0x67, 0xCD, 0xC3, 0x23, 0x62, 0x4C, 0x2F, 0x95, 0xD4, 0x40, 0x2F, 0xF9, 0xD6, 0x6A, 0xB1, 0x19, 0x1A, 0x81, 0x24, 0x14, 0x4A, 0xFA, 0x35, 0xD4, 0xE3, 0x1D, 0xC8, 0x6C, 0xAA, ++ 0x79, 0x7C, 0x31, 0xF6, 0x8B, 0x85, 0x85, 0x4C, 0xD9, 0x59, 0xC4, 0xFA, 0xC5, 0xEC, 0x53, 0xB3, 0xB5, 0x6D, 0x37, 0x4B, 0x88, 0x8A, 0x9E, 0x97, 0x9A, 0x65, 0x76, 0xB6, 0x34, 0x5E, 0xC8, 0x52, ++ 0x2C, 0x96, 0x06, 0x99, 0x02, 0x81, 0xBF, 0x3E, 0xF7, 0xC5, 0x94, 0x5D, 0x10, 0xFD, 0x21, 0xA2, 0xA1, 0xD2, 0xE5, 0x40, 0x4C, 0x5C, 0xF2, 0x12, 0x20, 0x64, 0x13, 0x91, 0xB9, 0x8B, 0xCF, 0x82, ++ 0x53, 0x98, 0x30, 0x5B, 0x56, 0xE5, 0x8B, 0x61, 0x1F, 0xE5, 0x25, 0x32, 0x03, 0xE3, 0xDF, 0x0D, 0x22, 0x46, 0x6A, 0x73, 0xB3, 0xF0, 0xFB, 0xE4, 0x3B, 0x9A, 0x62, 0x92, 0x80, 0x91, 0x89, 0x8B, ++ 0x8A, 0x0E, 0x5B, 0x26, 0x9D, 0xB5, 0x86, 0xB0, 0xE4, 0xDD, 0xEF, 0x50, 0xD6, 0x82, 0xA1, 0x2D, 0x2C, 0x1B, 0xE8, 0x24, 0x14, 0x9A, 0xA2, 0x54, 0xC6, 0x38, 0x1B, 0xB4, 0x12, 0xD7, 0x7C, 0x3F, ++ 0x9A, 0xA9, 0x02, 0xB6, 0x88, 0xC8, 0x17, 0x15, 0xA5, 0x9C, 0x83, 0x95, 0x58, 0x55, 0x6D, 0x35, 0xED, 0x4F, 0xC8, 0x3B, 0x4A, 0xB1, 0x81, 0x81, 0xF4, 0x0F, 0x73, 0xDC, 0xD7, 0x68, 0x60, 0xD8, ++ 0xD8, 0xBF, 0x94, 0x52, 0x02, 0x37, 0xC2, 0xAC, 0x0E, 0x46, 0x3B, 0xA0, 0x9E, 0x3C, 0x97, 0x82, 0x38, 0x0D, 0xC0, 0x7F, 0xE4, 0xFC, 0xBA, 0x34, 0x0C, 0xC2, 0x00, 0x34, 0x39, 0xFD, 0x23, 0x14, ++ 0x61, 0x06, 0x38, 0x07, 0x0D, 0x6C, 0x9E, 0xEA, 0x0A, 0x70, 0xBA, 0xE8, 0x3B, 0x5D, 0x5D, 0x3C, 0x5D, 0x3F, 0xDE, 0x26, 0xDD, 0x01, 0x60, 0x6C, 0x8C, 0x52, 0x01, 0x58, 0xE7, 0xE5, 0x10, 0x40, ++ 0x20, 0xF2, 0x48, 0xCE, 0xAA, 0x66, 0x64, 0x57, 0xC1, 0x0A, 0xEB, 0xF0, 0x68, 0xF8, 0xA3, 0xBD, 0x5C, 0xE7, 0xB5, 0x2C, 0x6A, 0xF0, 0xAB, 0xD5, 0x94, 0x4A, 0xF1, 0xAD, 0x47, 0x52, 0xC9, 0x11, ++ 0x39, 0x76, 0x08, 0x3C, 0x03, 0xB6, 0xC3, 0x4E, 0x1D, 0x47, 0xED, 0x69, 0x64, 0x4C, 0xAD, 0x78, 0x2C, 0x2F, 0x7D, 0x05, 0xF8, 0xA1, 0x48, 0x96, 0x1D, 0x96, 0x5F, 0xA2, 0xE1, 0x72, 0x3A, 0x8D, ++ 0xDE, 0xBC, 0x22, 0xA9, 0x0C, 0xD7, 0x83, 0xDD, 0x1F, 0x4D, 0xB3, 0x8F, 0xB9, 0xAE, 0x5A, 0x67, 0x14, 0xB3, 0xD9, 0x46, 0x78, 0x16, 0x43, 0xD3, 0x17, 0xB7, 0xDD, 0x79, 0x38, 0x1C, 0xF7, 0x89, ++ 0xA9, 0x58, 0x8B, 0xB3, 0xE1, 0x93, 0xB9, 0x2A, 0x0B, 0x60, 0xD6, 0xB0, 0x7D, 0x04, 0x7F, 0x69, 0x84, 0xB0, 0x60, 0x9E, 0xC5, 0x75, 0x43, 0xC3, 0x94, 0xCA, 0x8D, 0x5E, 0x5B, 0xCC, 0x2A, 0x73, ++ 0x1A, 0x79, 0x61, 0x8B, 0xD1, 0xE2, 0xE0, 0xDA, 0x87, 0x04, 0xAF, 0x98, 0xF2, 0x0F, 0x5F, 0x8F, 0x54, 0x52, 0xDD, 0xF6, 0x46, 0xB9, 0x5B, 0x34, 0x1D, 0xD7, 0xF0, 0xD2, 0xCC, 0x1F, 0xA1, 0x5B, ++ 0xD9, 0x89, 0x5C, 0xD5, 0xB6, 0x5A, 0xA1, 0xCB, 0x94, 0xB5, 0xE2, 0xE7, 0x88, 0xFD, 0xA9, 0x82, 0x5B, 0x65, 0x66, 0x39, 0x19, 0x3D, 0x98, 0x32, 0x81, 0x54, 0xA4, 0xF2, 0xC3, 0x54, 0x95, 0xA3, ++ 0x8B, 0x6E, 0xA0, 0xD2, 0xFF, 0xAA, 0xA3, 0x5D, 0xF9, 0x2C, 0x20, 0x3C, 0x7F, 0x31, 0xCB, 0xBC, 0xA7, 0xBD, 0x03, 0xC3, 0xC2, 0x30, 0x21, 0x90, 0xCE, 0xCD, 0x16, 0x1F, 0xD4, 0x92, 0x37, 0xE4, ++ 0xF8, 0x39, 0xE3, 0xF3, ++ }, ++ .spki_len = 1350, ++ .spki = { ++ 0x30, 0x82, 0x05, 0x42, 0x30, 0x0F, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0B, 0x07, 0x04, 0x04, 0x05, 0x00, 0x03, 0x82, 0x05, 0x2D, 0x00, 0x30, 0x82, 0x05, 0x28, 0x03, 0x21, ++ 0x00, 0x1C, 0x0E, 0xE1, 0x11, 0x1B, 0x08, 0x00, 0x3F, 0x28, 0xE6, 0x5E, 0x8B, 0x3B, 0xDE, 0xB0, 0x37, 0xCF, 0x8F, 0x22, 0x1D, 0xFC, 0xDA, 0xF5, 0x95, 0x0E, 0xDB, 0x38, 0xD5, 0x06, 0xD8, 0x5B, ++ 0xEF, 0x03, 0x82, 0x05, 0x01, 0x00, 0x61, 0x77, 0xE3, 0xDE, 0x0D, 0x4F, 0x1E, 0xF5, 0x84, 0x77, 0x35, 0x94, 0x7B, 0x56, 0xD0, 0x8E, 0x84, 0x1D, 0xB2, 0x44, 0x4F, 0xA2, 0xB7, 0x29, 0xAD, 0xEB, ++ 0x14, 0x17, 0xCA, 0x7A, 0xDF, 0x42, 0xA1, 0x49, 0x0C, 0x5A, 0x09, 0x7F, 0x00, 0x27, 0x60, 0xC1, 0xFC, 0x41, 0x9B, 0xE8, 0x32, 0x5A, 0xAD, 0x01, 0x97, 0xC5, 0x2C, 0xED, 0x80, 0xD3, 0xDF, 0x18, ++ 0xE7, 0x77, 0x42, 0x65, 0xB2, 0x89, 0x91, 0x2C, 0xEC, 0xA1, 0xBE, 0x3A, 0x90, 0xD8, 0xA4, 0xFD, 0xE6, 0x5C, 0x84, 0xC6, 0x10, 0x86, 0x4E, 0x47, 0xDE, 0xEC, 0xAE, 0x3E, 0xEA, 0x44, 0x30, 0xB9, ++ 0x90, 0x95, 0x59, 0x40, 0x8D, 0x11, 0xA6, 0xAB, 0xDB, 0x7D, 0xB9, 0x33, 0x6D, 0xF7, 0xF9, 0x6E, 0xAB, 0x48, 0x64, 0xA6, 0x57, 0x97, 0x91, 0x26, 0x5F, 0xA5, 0x6C, 0x34, 0x8C, 0xB7, 0xD2, 0xDD, ++ 0xC9, 0x0E, 0x13, 0x3A, 0x95, 0xC3, 0xF6, 0xB1, 0x36, 0x01, 0x42, 0x9F, 0x54, 0x08, 0xBD, 0x99, 0x9A, 0xA4, 0x79, 0xC1, 0x01, 0x81, 0x59, 0x55, 0x0E, 0xC5, 0x5A, 0x11, 0x3C, 0x49, 0x3B, 0xE6, ++ 0x48, 0xF4, 0xE0, 0x36, 0xDD, 0x4F, 0x8C, 0x80, 0x9E, 0x03, 0x6B, 0x4F, 0xBB, 0x91, 0x8C, 0x2C, 0x48, 0x4A, 0xD8, 0xE1, 0x74, 0x7A, 0xE0, 0x55, 0x85, 0xAB, 0x43, 0x3F, 0xDF, 0x46, 0x1A, 0xF0, ++ 0x3C, 0x25, 0xA7, 0x73, 0x70, 0x07, 0x21, 0xAA, 0x05, 0xF7, 0x37, 0x9F, 0xE7, 0xF5, 0xED, 0x96, 0x17, 0x5D, 0x40, 0x21, 0x07, 0x6E, 0x7F, 0x52, 0xB6, 0x03, 0x08, 0xEF, 0xF5, 0xD4, 0x2B, 0xA6, ++ 0xE0, 0x93, 0xB3, 0xD0, 0x81, 0x5E, 0xB3, 0x49, 0x66, 0x46, 0xE4, 0x92, 0x30, 0xA9, 0xB3, 0x5C, 0x8D, 0x41, 0x90, 0x0C, 0x2B, 0xB8, 0xD3, 0xB4, 0x46, 0xA2, 0x31, 0x27, 0xF7, 0xE0, 0x96, 0xD8, ++ 0x5A, 0x1C, 0x79, 0x4A, 0xD4, 0xC8, 0x92, 0x77, 0x90, 0x4F, 0xC6, 0xBF, 0xEC, 0x57, 0xB1, 0xCD, 0xD8, 0x0D, 0xF9, 0x95, 0x50, 0x30, 0xFD, 0xCA, 0x74, 0x1A, 0xFB, 0xDA, 0xC8, 0x27, 0xB1, 0x3C, ++ 0xCD, 0x54, 0x03, 0x58, 0x8A, 0xF4, 0x64, 0x40, 0x03, 0xC2, 0x26, 0x5D, 0xFA, 0x4D, 0x41, 0x9D, 0xBC, 0xCD, 0x20, 0x64, 0x89, 0x23, 0x86, 0x51, 0x8B, 0xE9, 0xD5, 0x1C, 0x16, 0x49, 0x82, 0x75, ++ 0xEB, 0xEC, 0xF5, 0xCD, 0xC7, 0xA8, 0x20, 0xF2, 0xC2, 0x93, 0x14, 0xAC, 0x4A, 0x6F, 0x08, 0xB2, 0x25, 0x2A, 0xD3, 0xCF, 0xB1, 0x99, 0xAA, 0x42, 0xFE, 0x0B, 0x4F, 0xB5, 0x71, 0x97, 0x5C, 0x10, ++ 0x20, 0xD9, 0x49, 0xE1, 0x94, 0xEE, 0x1E, 0xAD, 0x93, 0x7B, 0xFB, 0x55, 0x0B, 0xB3, 0xBA, 0x8E, 0x35, 0x7A, 0x02, 0x9C, 0x29, 0xF0, 0x77, 0x55, 0x46, 0x02, 0xE1, 0xCA, 0x2F, 0x22, 0x89, 0xCB, ++ 0x91, 0x69, 0x94, 0x1C, 0x3A, 0xAF, 0xDB, 0x8E, 0x58, 0xC7, 0xF2, 0xAC, 0x77, 0x29, 0x1F, 0xB4, 0x14, 0x7C, 0x65, 0xF6, 0xB0, 0x31, 0xD3, 0xEB, 0xA4, 0x2F, 0x2A, 0xCF, 0xD9, 0x44, 0x8A, 0x5B, ++ 0xC2, 0x2B, 0x47, 0x6E, 0x07, 0xCC, 0xCE, 0xDA, 0x23, 0x06, 0xC5, 0x54, 0xEC, 0x9B, 0x7A, 0xB6, 0x55, 0xF1, 0xD7, 0x31, 0x8C, 0x2B, 0x7E, 0x67, 0xD5, 0xF6, 0x9B, 0xED, 0xF5, 0x60, 0x00, 0xFD, ++ 0xA9, 0x89, 0x86, 0xB5, 0xAB, 0x1B, 0x3A, 0x22, 0xD8, 0xDF, 0xD6, 0x68, 0x16, 0x97, 0xB2, 0x3A, 0x55, 0xC9, 0x6E, 0x87, 0x10, 0xF3, 0xF9, 0x8C, 0x04, 0x4F, 0xB1, 0x5F, 0x60, 0x63, 0x13, 0xEE, ++ 0x56, 0xC0, 0xF1, 0xF5, 0xCA, 0x0F, 0x51, 0x2E, 0x08, 0x48, 0x4F, 0xCB, 0x35, 0x8E, 0x6E, 0x52, 0x8F, 0xFA, 0x89, 0xF8, 0xA8, 0x66, 0xCC, 0xFF, 0x3C, 0x0C, 0x58, 0x13, 0x14, 0x7E, 0xC5, 0x9A, ++ 0xF0, 0x47, 0x0C, 0x4A, 0xAD, 0x01, 0x41, 0xD3, 0x4F, 0x10, 0x1D, 0xA2, 0xE5, 0xE1, 0xBD, 0x52, 0xD0, 0xD4, 0xC9, 0xB1, 0x3B, 0x3E, 0x3D, 0x87, 0xD1, 0x58, 0x61, 0x05, 0x79, 0x67, 0x54, 0xE7, ++ 0x97, 0x8C, 0xA1, 0xC6, 0x8A, 0x7D, 0x85, 0xDF, 0x11, 0x2B, 0x7A, 0xB9, 0x21, 0xB3, 0x59, 0xA9, 0xF0, 0x3C, 0xBD, 0x27, 0xA7, 0xEA, 0xC8, 0x7A, 0x9A, 0x80, 0xB0, 0xB2, 0x6B, 0x4C, 0x96, 0x57, ++ 0xED, 0x85, 0xAD, 0x7F, 0xA2, 0x61, 0x6A, 0xB3, 0x45, 0xEB, 0x82, 0x26, 0xF6, 0x9F, 0xC0, 0xF4, 0x81, 0x83, 0xFF, 0x57, 0x4B, 0xCD, 0x76, 0x7B, 0x56, 0x76, 0x41, 0x3A, 0xDB, 0x12, 0xEA, 0x21, ++ 0x50, 0xA0, 0xE9, 0x76, 0x83, 0xEE, 0x54, 0x24, 0x3C, 0x25, 0xB7, 0xEA, 0x8A, 0x71, 0x86, 0x06, 0xF8, 0x69, 0x93, 0xD8, 0xD0, 0xDA, 0xCE, 0x83, 0x4E, 0xD3, 0x41, 0xEE, 0xB7, 0x24, 0xFE, 0x3D, ++ 0x5F, 0xF0, 0xBC, 0x8B, 0x8A, 0x7B, 0x81, 0x04, 0xBA, 0x26, 0x9D, 0x34, 0x13, 0x3A, 0x4C, 0xF8, 0x30, 0x0A, 0x2D, 0x68, 0x84, 0x96, 0xB5, 0x9B, 0x6F, 0xCB, 0xC6, 0x1A, 0xE9, 0x60, 0x62, 0xEA, ++ 0x1D, 0x8E, 0x5B, 0x41, 0x0C, 0x56, 0x71, 0xF4, 0x24, 0x41, 0x7E, 0xD6, 0x93, 0x32, 0x9C, 0xD9, 0x83, 0x00, 0x1F, 0xFC, 0xD1, 0x00, 0x23, 0xD5, 0x98, 0x85, 0x9F, 0xB7, 0xAD, 0x5F, 0xD2, 0x63, ++ 0x54, 0x71, 0x17, 0x10, 0x06, 0x90, 0xC6, 0xCE, 0x74, 0x38, 0x95, 0x6E, 0x6C, 0xC5, 0x7F, 0x1B, 0x5D, 0xE5, 0x3B, 0xB0, 0xDC, 0x72, 0xCE, 0x9B, 0x6D, 0xEA, 0xA8, 0x57, 0x89, 0x59, 0x9A, 0x70, ++ 0xF0, 0x05, 0x1F, 0x1A, 0x0E, 0x25, 0xE8, 0x6D, 0x88, 0x8B, 0x00, 0xDF, 0x36, 0xBD, 0xBC, 0x93, 0xEF, 0x72, 0x17, 0xC4, 0x5A, 0xCE, 0x11, 0xC0, 0x79, 0x0D, 0x70, 0xE9, 0x95, 0x3E, 0x5B, 0x41, ++ 0x7B, 0xA2, 0xFD, 0x9A, 0x4C, 0xAF, 0x82, 0xF1, 0xFC, 0xE6, 0xF4, 0x5F, 0x53, 0xE2, 0x15, 0xB8, 0x35, 0x5E, 0xF6, 0x1D, 0x89, 0x1D, 0xF1, 0xC7, 0x94, 0x23, 0x1C, 0x16, 0x2D, 0xD2, 0x41, 0x64, ++ 0xB5, 0x34, 0xA9, 0xD4, 0x84, 0x67, 0xCD, 0xC3, 0x23, 0x62, 0x4C, 0x2F, 0x95, 0xD4, 0x40, 0x2F, 0xF9, 0xD6, 0x6A, 0xB1, 0x19, 0x1A, 0x81, 0x24, 0x14, 0x4A, 0xFA, 0x35, 0xD4, 0xE3, 0x1D, 0xC8, ++ 0x6C, 0xAA, 0x79, 0x7C, 0x31, 0xF6, 0x8B, 0x85, 0x85, 0x4C, 0xD9, 0x59, 0xC4, 0xFA, 0xC5, 0xEC, 0x53, 0xB3, 0xB5, 0x6D, 0x37, 0x4B, 0x88, 0x8A, 0x9E, 0x97, 0x9A, 0x65, 0x76, 0xB6, 0x34, 0x5E, ++ 0xC8, 0x52, 0x2C, 0x96, 0x06, 0x99, 0x02, 0x81, 0xBF, 0x3E, 0xF7, 0xC5, 0x94, 0x5D, 0x10, 0xFD, 0x21, 0xA2, 0xA1, 0xD2, 0xE5, 0x40, 0x4C, 0x5C, 0xF2, 0x12, 0x20, 0x64, 0x13, 0x91, 0xB9, 0x8B, ++ 0xCF, 0x82, 0x53, 0x98, 0x30, 0x5B, 0x56, 0xE5, 0x8B, 0x61, 0x1F, 0xE5, 0x25, 0x32, 0x03, 0xE3, 0xDF, 0x0D, 0x22, 0x46, 0x6A, 0x73, 0xB3, 0xF0, 0xFB, 0xE4, 0x3B, 0x9A, 0x62, 0x92, 0x80, 0x91, ++ 0x89, 0x8B, 0x8A, 0x0E, 0x5B, 0x26, 0x9D, 0xB5, 0x86, 0xB0, 0xE4, 0xDD, 0xEF, 0x50, 0xD6, 0x82, 0xA1, 0x2D, 0x2C, 0x1B, 0xE8, 0x24, 0x14, 0x9A, 0xA2, 0x54, 0xC6, 0x38, 0x1B, 0xB4, 0x12, 0xD7, ++ 0x7C, 0x3F, 0x9A, 0xA9, 0x02, 0xB6, 0x88, 0xC8, 0x17, 0x15, 0xA5, 0x9C, 0x83, 0x95, 0x58, 0x55, 0x6D, 0x35, 0xED, 0x4F, 0xC8, 0x3B, 0x4A, 0xB1, 0x81, 0x81, 0xF4, 0x0F, 0x73, 0xDC, 0xD7, 0x68, ++ 0x60, 0xD8, 0xD8, 0xBF, 0x94, 0x52, 0x02, 0x37, 0xC2, 0xAC, 0x0E, 0x46, 0x3B, 0xA0, 0x9E, 0x3C, 0x97, 0x82, 0x38, 0x0D, 0xC0, 0x7F, 0xE4, 0xFC, 0xBA, 0x34, 0x0C, 0xC2, 0x00, 0x34, 0x39, 0xFD, ++ 0x23, 0x14, 0x61, 0x06, 0x38, 0x07, 0x0D, 0x6C, 0x9E, 0xEA, 0x0A, 0x70, 0xBA, 0xE8, 0x3B, 0x5D, 0x5D, 0x3C, 0x5D, 0x3F, 0xDE, 0x26, 0xDD, 0x01, 0x60, 0x6C, 0x8C, 0x52, 0x01, 0x58, 0xE7, 0xE5, ++ 0x10, 0x40, 0x20, 0xF2, 0x48, 0xCE, 0xAA, 0x66, 0x64, 0x57, 0xC1, 0x0A, 0xEB, 0xF0, 0x68, 0xF8, 0xA3, 0xBD, 0x5C, 0xE7, 0xB5, 0x2C, 0x6A, 0xF0, 0xAB, 0xD5, 0x94, 0x4A, 0xF1, 0xAD, 0x47, 0x52, ++ 0xC9, 0x11, 0x39, 0x76, 0x08, 0x3C, 0x03, 0xB6, 0xC3, 0x4E, 0x1D, 0x47, 0xED, 0x69, 0x64, 0x4C, 0xAD, 0x78, 0x2C, 0x2F, 0x7D, 0x05, 0xF8, 0xA1, 0x48, 0x96, 0x1D, 0x96, 0x5F, 0xA2, 0xE1, 0x72, ++ 0x3A, 0x8D, 0xDE, 0xBC, 0x22, 0xA9, 0x0C, 0xD7, 0x83, 0xDD, 0x1F, 0x4D, 0xB3, 0x8F, 0xB9, 0xAE, 0x5A, 0x67, 0x14, 0xB3, 0xD9, 0x46, 0x78, 0x16, 0x43, 0xD3, 0x17, 0xB7, 0xDD, 0x79, 0x38, 0x1C, ++ 0xF7, 0x89, 0xA9, 0x58, 0x8B, 0xB3, 0xE1, 0x93, 0xB9, 0x2A, 0x0B, 0x60, 0xD6, 0xB0, 0x7D, 0x04, 0x7F, 0x69, 0x84, 0xB0, 0x60, 0x9E, 0xC5, 0x75, 0x43, 0xC3, 0x94, 0xCA, 0x8D, 0x5E, 0x5B, 0xCC, ++ 0x2A, 0x73, 0x1A, 0x79, 0x61, 0x8B, 0xD1, 0xE2, 0xE0, 0xDA, 0x87, 0x04, 0xAF, 0x98, 0xF2, 0x0F, 0x5F, 0x8F, 0x54, 0x52, 0xDD, 0xF6, 0x46, 0xB9, 0x5B, 0x34, 0x1D, 0xD7, 0xF0, 0xD2, 0xCC, 0x1F, ++ 0xA1, 0x5B, 0xD9, 0x89, 0x5C, 0xD5, 0xB6, 0x5A, 0xA1, 0xCB, 0x94, 0xB5, 0xE2, 0xE7, 0x88, 0xFD, 0xA9, 0x82, 0x5B, 0x65, 0x66, 0x39, 0x19, 0x3D, 0x98, 0x32, 0x81, 0x54, 0xA4, 0xF2, 0xC3, 0x54, ++ 0x95, 0xA3, 0x8B, 0x6E, 0xA0, 0xD2, 0xFF, 0xAA, 0xA3, 0x5D, 0xF9, 0x2C, 0x20, 0x3C, 0x7F, 0x31, 0xCB, 0xBC, 0xA7, 0xBD, 0x03, 0xC3, 0xC2, 0x30, 0x21, 0x90, 0xCE, 0xCD, 0x16, 0x1F, 0xD4, 0x92, ++ 0x37, 0xE4, 0xF8, 0x39, 0xE3, 0xF3, ++ }, ++ .msg_len = 33, ++ .msg = { 0xD8, 0x1C, 0x4D, 0x8D, 0x73, 0x4F, 0xCB, 0xFB, 0xEA, 0xDE, 0x3D, 0x3F, 0x8A, 0x03, 0x9F, 0xAA, 0x2A, 0x2C, 0x99, 0x57, 0xE8, 0x35, 0xAD, 0x55, 0xB2, 0x2E, 0x75, 0xBF, 0x57, 0xBB, 0x55, 0x6A, ++ 0xC8 }, ++ .sig_len = 2420, ++ .sig = { ++ 0xAF, 0x59, 0x20, 0x77, 0x46, 0x03, 0xD2, 0x0E, 0x98, 0xA7, 0x9A, 0xA3, 0xAB, 0xFA, 0x32, 0xB6, 0xE2, 0x25, 0x19, 0xE6, 0x73, 0xE3, 0x7A, 0xC4, 0xAC, 0x73, 0xFE, 0x85, 0x34, 0x1E, 0x2C, 0x29, ++ 0x23, 0xC1, 0x99, 0x2E, 0x1B, 0x0B, 0xBE, 0x38, 0x73, 0xD7, 0xC8, 0xFC, 0x56, 0x62, 0xF2, 0x07, 0xBF, 0x58, 0xEA, 0x38, 0x1C, 0xD4, 0xA3, 0xA0, 0xC0, 0x62, 0xDE, 0xC4, 0x5B, 0xDA, 0xF8, 0xBA, ++ 0x0A, 0xA5, 0x2B, 0xEF, 0x6F, 0xA1, 0x4F, 0x3F, 0x6C, 0xF2, 0x8F, 0x76, 0x20, 0xBF, 0x94, 0xA9, 0x2C, 0xC2, 0x7D, 0x04, 0x54, 0x14, 0xA6, 0x4D, 0x65, 0xC0, 0x14, 0x96, 0x30, 0x52, 0x80, 0x24, ++ 0x28, 0xBF, 0x39, 0x87, 0xA2, 0xD4, 0x75, 0x16, 0xCA, 0x5C, 0x78, 0xAA, 0xB9, 0x6B, 0x7B, 0xE1, 0x1B, 0xCA, 0x5F, 0x2C, 0x5A, 0x26, 0xF3, 0xFC, 0xE3, 0xA2, 0x6E, 0x8E, 0x09, 0xA2, 0x73, 0x8F, ++ 0x38, 0x6F, 0x75, 0xD4, 0x48, 0xF9, 0x37, 0xEF, 0x19, 0xA8, 0x46, 0xBD, 0x4D, 0xD9, 0x49, 0xCA, 0xAF, 0x36, 0xDB, 0x56, 0x29, 0x88, 0x4A, 0xF5, 0x3A, 0x02, 0x3E, 0x3F, 0x18, 0x0F, 0xE4, 0xC0, ++ 0xFA, 0xFF, 0x7B, 0xE5, 0xDF, 0xE4, 0xE8, 0x9A, 0xDE, 0x30, 0x95, 0xA6, 0x56, 0x00, 0x42, 0x14, 0x61, 0xAD, 0x08, 0xC1, 0x29, 0xD6, 0xCE, 0xA8, 0x51, 0xBB, 0x39, 0xC0, 0xD7, 0xA7, 0xD1, 0x51, ++ 0x40, 0x56, 0x89, 0xA0, 0x91, 0xFA, 0x4D, 0xEB, 0xAC, 0x37, 0x3C, 0xF5, 0x4A, 0xE0, 0x78, 0xF0, 0xAF, 0x75, 0x57, 0xBB, 0xC6, 0xF0, 0x6A, 0x53, 0x5A, 0xE8, 0x94, 0x9E, 0x0C, 0x65, 0x30, 0x8A, ++ 0x59, 0x84, 0x00, 0x72, 0x37, 0x52, 0x95, 0x80, 0x2D, 0x0E, 0x2C, 0xE9, 0xA3, 0xDA, 0x98, 0x42, 0x6A, 0x00, 0xFF, 0x03, 0xFE, 0x80, 0x21, 0x8C, 0x0E, 0xEC, 0x8E, 0xFE, 0x58, 0x1C, 0xB9, 0xCC, ++ 0x9A, 0x7D, 0x66, 0xB2, 0x06, 0x45, 0xA8, 0xCD, 0x04, 0x90, 0xD3, 0xCE, 0x4F, 0x7E, 0x6F, 0xEA, 0xE9, 0xC9, 0xEB, 0x7A, 0x57, 0xF9, 0x64, 0xD0, 0xEB, 0xC7, 0xC9, 0x0B, 0x7A, 0x9F, 0x86, 0x30, ++ 0x0B, 0x3E, 0x80, 0x95, 0xE6, 0x4D, 0x12, 0x94, 0xCF, 0xC4, 0xB4, 0xD9, 0xE2, 0x72, 0xE8, 0xFA, 0x8D, 0xB5, 0x70, 0x7D, 0x70, 0x04, 0xAF, 0x22, 0xDB, 0xFF, 0x9C, 0xFD, 0x48, 0x63, 0xDF, 0x57, ++ 0x3F, 0xE0, 0x04, 0x34, 0x1D, 0xA3, 0xCD, 0x4A, 0x30, 0x82, 0x53, 0x2C, 0x26, 0x20, 0x45, 0x5F, 0xA3, 0x7C, 0x56, 0x2B, 0xAF, 0xD5, 0x68, 0x4E, 0xA1, 0x28, 0xAF, 0xC7, 0x9E, 0x01, 0xFC, 0x9B, ++ 0x31, 0xE8, 0x43, 0x3B, 0xAD, 0x7C, 0x02, 0x9F, 0x2F, 0x13, 0xCC, 0x10, 0x59, 0x2D, 0x23, 0x32, 0xE3, 0xE0, 0x8B, 0x80, 0xD3, 0x50, 0x46, 0x3D, 0xE7, 0x27, 0x50, 0xB1, 0xF8, 0x06, 0xF4, 0x93, ++ 0xE1, 0x43, 0xBD, 0x5F, 0xCA, 0x7D, 0x16, 0x98, 0x08, 0x1B, 0x31, 0xBF, 0x87, 0x6B, 0x2A, 0x1B, 0xC9, 0xDF, 0x50, 0x95, 0x2D, 0x13, 0xB6, 0xC1, 0x32, 0x1B, 0x11, 0x11, 0x17, 0x21, 0x45, 0xA6, ++ 0x27, 0xAE, 0x0B, 0x44, 0x27, 0xB9, 0x89, 0x75, 0xCB, 0xFF, 0xF7, 0xD6, 0x82, 0x75, 0x75, 0x4B, 0x45, 0xB6, 0x82, 0xD7, 0x09, 0xE1, 0x68, 0x52, 0x2E, 0x84, 0xFE, 0xA7, 0xDD, 0x3B, 0xB0, 0xF4, ++ 0x15, 0x05, 0xFF, 0x71, 0x92, 0x64, 0x31, 0xD1, 0xA9, 0x0D, 0x4C, 0xBF, 0x9A, 0x52, 0x7A, 0xD4, 0xE2, 0x84, 0x97, 0x6F, 0xFF, 0x8B, 0xD9, 0xD6, 0x22, 0x4A, 0x4F, 0x26, 0x03, 0x91, 0xA9, 0x87, ++ 0xFB, 0x6D, 0xA6, 0xEE, 0x42, 0xC2, 0xA4, 0x90, 0x0F, 0x40, 0x7C, 0xE1, 0xF0, 0x2E, 0x32, 0x24, 0x75, 0xD3, 0x13, 0xFB, 0xEB, 0xB6, 0x8C, 0x2E, 0x05, 0x73, 0x08, 0x09, 0x44, 0x8A, 0x74, 0x28, ++ 0xA5, 0x94, 0x01, 0x39, 0xEB, 0xDF, 0x1B, 0x55, 0x56, 0xFC, 0xC5, 0xD4, 0x2E, 0x1A, 0x13, 0xF3, 0x22, 0x30, 0xCB, 0x6F, 0x07, 0x24, 0x83, 0x1D, 0x0D, 0x07, 0x1B, 0xBA, 0x5A, 0x67, 0x04, 0x80, ++ 0x6F, 0x47, 0x5B, 0x74, 0xBA, 0x91, 0xB6, 0xE3, 0x85, 0xD4, 0x86, 0x20, 0x95, 0x8D, 0x0A, 0xB1, 0xBF, 0x2B, 0x18, 0x4E, 0x10, 0xF3, 0xE7, 0x53, 0xB7, 0x13, 0x37, 0xBE, 0x9E, 0xB6, 0x53, 0x78, ++ 0x67, 0x85, 0xB4, 0x3A, 0xC7, 0xE5, 0xC4, 0x94, 0xAC, 0x1B, 0xCB, 0x04, 0x3D, 0x46, 0x14, 0x25, 0xB3, 0x60, 0x98, 0xAC, 0x93, 0x05, 0x5A, 0x01, 0x05, 0xAB, 0x85, 0x23, 0xB6, 0x1D, 0x02, 0x4A, ++ 0x6E, 0x9B, 0x56, 0xA4, 0x2D, 0x3C, 0x04, 0x72, 0x65, 0x12, 0xAE, 0x4C, 0xFE, 0x05, 0x71, 0x04, 0x46, 0xB0, 0x6F, 0x69, 0x42, 0x34, 0xEE, 0x4F, 0xA8, 0xFE, 0xED, 0xDD, 0xC5, 0xF2, 0x8A, 0x65, ++ 0xED, 0xE2, 0xEB, 0x58, 0xE9, 0x65, 0xFE, 0x36, 0x27, 0xA5, 0x71, 0xBC, 0x45, 0xB3, 0x97, 0xED, 0x09, 0x2A, 0xB4, 0xBE, 0x00, 0x04, 0x17, 0x29, 0xC4, 0xD1, 0x92, 0xFE, 0x30, 0x67, 0x82, 0x79, ++ 0xD2, 0x23, 0xA8, 0x48, 0xCF, 0x43, 0x66, 0xE9, 0x2B, 0x3F, 0x68, 0xDE, 0xE9, 0x7C, 0x9B, 0x4A, 0x7F, 0xF2, 0x2F, 0x93, 0x7B, 0xE6, 0xC5, 0x66, 0x39, 0x96, 0x1D, 0xB2, 0x9F, 0xA3, 0xCF, 0xEC, ++ 0xFF, 0xF2, 0x93, 0x14, 0x08, 0x86, 0xFF, 0xB9, 0x2E, 0xBC, 0x79, 0xDA, 0xB5, 0x9C, 0xEA, 0xF8, 0x69, 0xC6, 0x4F, 0x8E, 0xAF, 0x58, 0x5C, 0xE9, 0x7D, 0xD6, 0xB7, 0x8F, 0x89, 0x27, 0x72, 0xDB, ++ 0x88, 0xA9, 0x58, 0xCF, 0x0A, 0xB5, 0x57, 0xA7, 0xFA, 0xA8, 0x3F, 0xE6, 0x21, 0x47, 0x7E, 0x2B, 0x84, 0x49, 0x7A, 0xB5, 0xA8, 0xEC, 0xF4, 0xA7, 0xBD, 0x32, 0xDF, 0xB9, 0x02, 0xF0, 0x5D, 0x2C, ++ 0xA3, 0x10, 0x47, 0xD0, 0xF1, 0x91, 0x9A, 0xDD, 0xE1, 0xEE, 0x6D, 0xFD, 0x58, 0xE5, 0x9B, 0xC4, 0xDA, 0xB3, 0xCC, 0xBB, 0xA3, 0x6A, 0xAA, 0xF6, 0xAF, 0xCC, 0xC7, 0xB0, 0x95, 0xCA, 0x94, 0xA1, ++ 0x95, 0xBE, 0x9A, 0x28, 0x95, 0x26, 0xB5, 0x88, 0xC3, 0xA9, 0xC5, 0x68, 0x76, 0xFC, 0x41, 0x5D, 0x52, 0x1D, 0x44, 0x2B, 0xAC, 0x02, 0x98, 0xD3, 0x02, 0x41, 0x9A, 0xD5, 0x27, 0xDA, 0x24, 0x9C, ++ 0x2A, 0x66, 0x0C, 0xD0, 0x64, 0x21, 0x3F, 0xFA, 0xD5, 0x63, 0x18, 0x3F, 0x37, 0x97, 0x25, 0x78, 0xEE, 0xB9, 0xF7, 0x0A, 0xC6, 0x7A, 0xEE, 0x6C, 0xC2, 0xB7, 0x1F, 0x28, 0x3A, 0x95, 0x93, 0x0B, ++ 0x55, 0x47, 0x38, 0x55, 0x57, 0x91, 0xC2, 0x5E, 0x7A, 0x39, 0x9E, 0x68, 0x56, 0x36, 0xD5, 0x8D, 0x69, 0xCB, 0x6B, 0xE7, 0x93, 0xB4, 0x5C, 0x19, 0x69, 0xE7, 0xD5, 0x61, 0x56, 0x27, 0xEB, 0xC3, ++ 0x2E, 0xED, 0x45, 0x44, 0x0F, 0x87, 0x88, 0x0D, 0x28, 0x29, 0xFA, 0x4F, 0xC8, 0x71, 0x86, 0x61, 0x64, 0xD2, 0x59, 0xED, 0x95, 0xD2, 0x73, 0x18, 0x71, 0x01, 0x7F, 0xF5, 0x18, 0x94, 0x06, 0x6F, ++ 0xAE, 0x1F, 0xFA, 0x6F, 0x4B, 0x4A, 0x6F, 0x84, 0xFC, 0xFF, 0xDA, 0x09, 0xE7, 0x18, 0xFA, 0x17, 0x13, 0x5E, 0xDB, 0x3F, 0x48, 0x55, 0x8D, 0x5B, 0xA6, 0x7F, 0x9E, 0x6F, 0x09, 0x00, 0x34, 0x0B, ++ 0xD0, 0x4D, 0xFE, 0x59, 0xB7, 0xBD, 0x67, 0x74, 0x58, 0x84, 0xFB, 0x84, 0xAE, 0x3F, 0x8E, 0xE7, 0x63, 0xD2, 0x02, 0x74, 0x36, 0x52, 0xD4, 0xF7, 0x33, 0x34, 0x50, 0x58, 0x04, 0x90, 0xB9, 0xC7, ++ 0x44, 0x93, 0x5B, 0x19, 0xC1, 0xD5, 0xFB, 0x0D, 0xB5, 0xFB, 0xB4, 0x61, 0x41, 0x13, 0x62, 0x83, 0x80, 0x37, 0xEB, 0x7E, 0xC3, 0xF6, 0x3F, 0x26, 0xC8, 0x93, 0xE7, 0xCC, 0x1C, 0x3B, 0x3F, 0x47, ++ 0x67, 0xAB, 0xAE, 0x00, 0xFE, 0xB7, 0xBB, 0x99, 0xB1, 0x42, 0x0B, 0xB2, 0x9E, 0xA6, 0x14, 0x74, 0x78, 0x96, 0xD9, 0xED, 0xCF, 0x81, 0x07, 0xFE, 0x50, 0x4C, 0x9C, 0x30, 0x8A, 0x82, 0x64, 0xDA, ++ 0xCE, 0x31, 0x8D, 0x87, 0xCF, 0xE4, 0x76, 0x18, 0x03, 0xE9, 0xA6, 0x0D, 0xEF, 0xA6, 0x14, 0x4A, 0xAB, 0xC1, 0xF1, 0x0A, 0x45, 0xB1, 0x40, 0xDE, 0xD7, 0x54, 0xE7, 0x35, 0x86, 0xC4, 0x67, 0xBB, ++ 0x7B, 0xF1, 0x9E, 0xDE, 0xF2, 0x5B, 0xE0, 0xC6, 0x5E, 0x93, 0xC5, 0xE5, 0xEB, 0x8F, 0x88, 0x0C, 0xCE, 0x4A, 0x85, 0x87, 0x57, 0xF8, 0xFF, 0x56, 0x06, 0x2B, 0x10, 0x67, 0xF4, 0x10, 0x6F, 0x76, ++ 0xB7, 0x00, 0x7F, 0x6E, 0xA6, 0xF9, 0x45, 0x04, 0x7E, 0x85, 0xBD, 0x0F, 0xAD, 0x9D, 0x26, 0x99, 0x4F, 0x67, 0x8A, 0x06, 0x12, 0xB8, 0x7C, 0xCF, 0x9C, 0x0C, 0xF9, 0xA4, 0x33, 0xD8, 0x89, 0xC9, ++ 0x6E, 0x4C, 0x12, 0xBE, 0x37, 0x22, 0x77, 0x00, 0x5B, 0x06, 0xAD, 0x12, 0x71, 0x05, 0xD1, 0x6D, 0x8F, 0xB1, 0x42, 0xAE, 0xAE, 0x53, 0x73, 0xAB, 0xD6, 0x1D, 0x9A, 0xDC, 0xFC, 0x55, 0x50, 0xD6, ++ 0x23, 0xCA, 0x3B, 0x88, 0x24, 0xB0, 0xE2, 0xE0, 0x8C, 0x2B, 0xF4, 0xE2, 0x84, 0x1E, 0xAC, 0x4C, 0x5D, 0xC5, 0x6C, 0xF8, 0x95, 0x4C, 0xF2, 0x07, 0xC2, 0x63, 0xF2, 0x7C, 0x9F, 0x30, 0x9F, 0x10, ++ 0x30, 0x7C, 0x0D, 0x84, 0xA6, 0x58, 0x78, 0x42, 0x50, 0x31, 0x37, 0x5D, 0xD8, 0x10, 0xD2, 0xD7, 0xE5, 0x10, 0x98, 0xA3, 0x81, 0x43, 0x50, 0x79, 0x5C, 0x4A, 0x07, 0x7F, 0xA4, 0x0D, 0xD4, 0x4F, ++ 0x0F, 0xA7, 0x51, 0x0F, 0x7C, 0x3F, 0x63, 0x14, 0x07, 0xCF, 0x34, 0xF6, 0x04, 0xC7, 0xB3, 0x35, 0x63, 0x2A, 0x20, 0xD2, 0xAD, 0x41, 0x9B, 0xD7, 0xCC, 0x6D, 0x42, 0x42, 0xB1, 0xC6, 0x6C, 0x35, ++ 0xE5, 0xA5, 0xED, 0xCC, 0xB1, 0x3C, 0xA3, 0x7D, 0x3B, 0x50, 0x46, 0x5F, 0x3B, 0x4A, 0xAF, 0xF7, 0xE3, 0x16, 0x1E, 0x79, 0x36, 0x08, 0x8A, 0xE0, 0x84, 0x01, 0xFD, 0x2C, 0x37, 0xD6, 0x7A, 0x2F, ++ 0xF9, 0x1D, 0x3E, 0x6F, 0x08, 0x68, 0x6D, 0x64, 0xBC, 0x2F, 0xC6, 0xC5, 0x71, 0x06, 0xE4, 0x9F, 0xA3, 0x84, 0xAC, 0x22, 0x21, 0x9F, 0x07, 0xEE, 0x89, 0x96, 0xCA, 0x3D, 0xFF, 0x59, 0xDC, 0xC5, ++ 0x09, 0x2A, 0x4B, 0xAD, 0xBE, 0x87, 0xAE, 0xDE, 0x7F, 0x69, 0xA0, 0x4C, 0x79, 0xB3, 0x3B, 0xDF, 0x35, 0xD4, 0xA0, 0xE4, 0xCB, 0x4B, 0x55, 0x01, 0x9C, 0xB0, 0xBF, 0x27, 0x52, 0x95, 0xB9, 0x3B, ++ 0xDA, 0xBE, 0xA5, 0x16, 0xCA, 0x2B, 0x61, 0x6A, 0x56, 0x91, 0x86, 0x00, 0xB7, 0x24, 0xBE, 0x7A, 0x01, 0xEC, 0x4E, 0xF5, 0x43, 0x12, 0xB3, 0x0D, 0x66, 0xF5, 0x07, 0x81, 0x5F, 0x27, 0x80, 0xFF, ++ 0xEE, 0x7C, 0x30, 0xF8, 0x42, 0x5A, 0x92, 0x25, 0x2C, 0xE5, 0x50, 0xFA, 0xB4, 0xE9, 0x02, 0xE7, 0xB3, 0x82, 0xD4, 0x6D, 0xBD, 0x20, 0xEF, 0xE1, 0xBB, 0x0E, 0xF8, 0xA4, 0x96, 0x87, 0x3C, 0x09, ++ 0xC4, 0xCE, 0xB0, 0x30, 0x3C, 0x7F, 0x1D, 0xAB, 0xA0, 0x10, 0x2D, 0xE9, 0x41, 0x90, 0xB6, 0xAC, 0x6D, 0xC8, 0x10, 0xF7, 0x2B, 0xCA, 0x3A, 0xA2, 0x92, 0xFF, 0x38, 0xBD, 0x51, 0xA7, 0xFA, 0xB8, ++ 0x50, 0x9E, 0xC4, 0xFB, 0xE0, 0xEA, 0xA3, 0xC9, 0x86, 0x16, 0x6A, 0x67, 0x4B, 0x78, 0x71, 0x15, 0x5C, 0x34, 0x8C, 0x47, 0x7E, 0xF8, 0xCE, 0xDC, 0x83, 0x2B, 0x5A, 0xBE, 0xE7, 0x1A, 0x8D, 0x18, ++ 0xD0, 0x6D, 0xD0, 0xF5, 0x22, 0x11, 0x60, 0xAB, 0xEB, 0x71, 0xE6, 0xE8, 0x2C, 0xFA, 0xBF, 0x73, 0x1E, 0xA3, 0x51, 0x5A, 0x76, 0xEF, 0x07, 0xB2, 0xC1, 0x6C, 0x63, 0xB3, 0x7F, 0x7A, 0xB7, 0x3B, ++ 0x67, 0xF0, 0x05, 0x92, 0x9A, 0x75, 0x3E, 0x45, 0x3B, 0x93, 0x0C, 0x0A, 0xF4, 0x32, 0x27, 0x7F, 0xD7, 0x7D, 0x8A, 0x1E, 0xB8, 0x02, 0x2C, 0xDE, 0x96, 0x65, 0x76, 0x3B, 0x01, 0x4F, 0x0A, 0x67, ++ 0x2A, 0x04, 0x16, 0x0B, 0x0A, 0x06, 0xF5, 0x54, 0x0F, 0x4C, 0x26, 0x4B, 0x7F, 0x22, 0x74, 0x06, 0x90, 0xA2, 0x35, 0x2D, 0xC8, 0x63, 0xB5, 0x88, 0x30, 0x3A, 0xD5, 0x1F, 0x0A, 0xE1, 0x62, 0xBF, ++ 0x79, 0x79, 0x7F, 0x07, 0xB5, 0x34, 0x50, 0x1C, 0xBB, 0xFD, 0xB7, 0x13, 0xA7, 0x24, 0xAA, 0x98, 0xE1, 0x95, 0x32, 0x18, 0x71, 0x80, 0xCC, 0xFA, 0xDC, 0x6E, 0xBE, 0x31, 0x42, 0xFA, 0x7D, 0xB6, ++ 0x6C, 0xD4, 0xDE, 0x7B, 0x9F, 0xBD, 0x4C, 0x82, 0x35, 0x68, 0x6D, 0xB6, 0x8C, 0xAF, 0x48, 0x9A, 0xFA, 0x4E, 0x1E, 0x87, 0xAE, 0xF0, 0xCE, 0xFD, 0x80, 0x37, 0xE3, 0xA5, 0x78, 0xEE, 0x62, 0xEB, ++ 0x7F, 0x94, 0xED, 0x5B, 0xC0, 0xB5, 0x8E, 0xEA, 0x4B, 0x4C, 0x45, 0xFC, 0x56, 0xD3, 0x1D, 0x29, 0x94, 0x4D, 0x09, 0x5A, 0xC9, 0x6C, 0x29, 0x08, 0x3D, 0xA2, 0xC7, 0x71, 0x81, 0xD9, 0x7A, 0x55, ++ 0xFE, 0x6E, 0x90, 0x3A, 0x2F, 0x27, 0x83, 0xDE, 0x0B, 0xAA, 0x5F, 0x47, 0xD7, 0x04, 0x78, 0x5C, 0x33, 0xE8, 0xD5, 0xC8, 0x7E, 0xD6, 0x1E, 0x65, 0x45, 0x91, 0x67, 0x31, 0x0E, 0xB7, 0xA9, 0x95, ++ 0x74, 0xEF, 0x81, 0x9A, 0xE9, 0x16, 0x1A, 0x3B, 0xD0, 0x96, 0x34, 0x80, 0x3D, 0x9E, 0x1E, 0x4E, 0xC7, 0x38, 0x6D, 0x79, 0x46, 0x98, 0x45, 0x17, 0x21, 0x3A, 0xB9, 0xCF, 0x66, 0xAE, 0xA5, 0x51, ++ 0xCC, 0x45, 0x7C, 0x39, 0xF8, 0x6A, 0xF2, 0x94, 0xCF, 0x7B, 0x07, 0x3F, 0x56, 0x3E, 0xD4, 0xDA, 0xB9, 0x41, 0x9B, 0xDF, 0x00, 0x4B, 0xD0, 0x5C, 0x92, 0xB4, 0xE8, 0x0E, 0xC3, 0xCF, 0xEA, 0xC9, ++ 0x7E, 0x1D, 0xDA, 0x55, 0x4F, 0xDA, 0x62, 0x5C, 0x4B, 0x9B, 0x03, 0x9B, 0xAA, 0x7C, 0x5A, 0x2F, 0x6F, 0x97, 0x05, 0x77, 0x92, 0x48, 0x3C, 0xF5, 0xF8, 0x52, 0xD4, 0xC3, 0xAC, 0x71, 0xAD, 0x50, ++ 0xF7, 0x79, 0x95, 0x3D, 0xCF, 0xE2, 0xF6, 0x3E, 0xD2, 0x35, 0xD8, 0xE1, 0xD5, 0x34, 0x5D, 0x6C, 0x6D, 0xF0, 0x55, 0x5C, 0xC2, 0x63, 0x1D, 0xEA, 0xD9, 0xB7, 0x14, 0xBC, 0x4C, 0x16, 0x50, 0x1E, ++ 0x01, 0x26, 0x13, 0x81, 0xF3, 0x67, 0x97, 0x15, 0x34, 0x51, 0x23, 0x38, 0x8C, 0x85, 0x2D, 0x57, 0xDC, 0xF1, 0x94, 0x1D, 0x09, 0x11, 0xD4, 0x9F, 0xEA, 0x71, 0x43, 0xFD, 0x2F, 0xC3, 0x43, 0xA5, ++ 0x07, 0x5B, 0x64, 0xCC, 0xA4, 0x82, 0x91, 0xDC, 0x28, 0xB8, 0x3F, 0x76, 0x07, 0x45, 0x89, 0xEA, 0xB2, 0x17, 0xC7, 0x84, 0x78, 0x40, 0x65, 0x2C, 0x0E, 0x3A, 0xE2, 0x78, 0xB3, 0xB6, 0xFB, 0x0D, ++ 0x80, 0x0C, 0x5E, 0x7D, 0xB7, 0x9D, 0x5C, 0xB9, 0xCC, 0x1A, 0x87, 0x45, 0x0C, 0x00, 0xB7, 0x67, 0x78, 0x12, 0xD2, 0x2E, 0xE2, 0x0F, 0xDE, 0x8C, 0x17, 0x53, 0xA7, 0xFB, 0x93, 0xBA, 0x8B, 0xBB, ++ 0x85, 0x95, 0xA6, 0x39, 0x3D, 0xF5, 0x4A, 0xA9, 0xCD, 0xB6, 0xE0, 0x87, 0x9A, 0x26, 0xE4, 0x9B, 0xD3, 0xB0, 0x15, 0x13, 0xC6, 0x05, 0x3A, 0x07, 0x46, 0xC8, 0x59, 0x6C, 0xE5, 0xE5, 0xB2, 0x25, ++ 0xCF, 0xCA, 0x26, 0xAB, 0x8B, 0xF1, 0x2F, 0x1F, 0xE0, 0xA6, 0x47, 0xA9, 0xE4, 0x45, 0x30, 0x39, 0xA1, 0x22, 0x61, 0x94, 0xC4, 0x6E, 0x8B, 0x98, 0xAC, 0xD7, 0x10, 0xF1, 0x8F, 0xB7, 0xEC, 0x05, ++ 0x47, 0x6C, 0x1C, 0xD8, 0xFC, 0x31, 0x12, 0xCC, 0xDD, 0xB1, 0x58, 0x2B, 0x88, 0x17, 0xC1, 0x8F, 0xE3, 0x15, 0x35, 0x3E, 0x7A, 0x47, 0xC8, 0x21, 0xE9, 0xEE, 0x3A, 0x43, 0xCA, 0xDE, 0x1B, 0x80, ++ 0xD9, 0x2A, 0x0A, 0xE8, 0xDC, 0xEB, 0x4D, 0xFF, 0x76, 0x6A, 0x54, 0xDF, 0x36, 0x65, 0xFE, 0xFE, 0x3C, 0x25, 0x2B, 0x72, 0xDA, 0xD7, 0xB1, 0xE3, 0x35, 0x9E, 0x7F, 0xA2, 0x55, 0x62, 0xC3, 0xE3, ++ 0x9D, 0xB5, 0x21, 0xCE, 0x18, 0x74, 0x11, 0x1F, 0xB0, 0x90, 0xDB, 0xD3, 0x8B, 0x31, 0x80, 0xAD, 0x03, 0x4B, 0x57, 0xB0, 0x31, 0xDC, 0x4D, 0xD6, 0xAF, 0x7C, 0x1A, 0x8A, 0xF3, 0xF6, 0xCE, 0x7E, ++ 0xDB, 0x1A, 0x9E, 0x4B, 0x6D, 0x4A, 0x59, 0x20, 0xE3, 0x62, 0x08, 0x18, 0x82, 0x06, 0x59, 0x76, 0x2E, 0xF7, 0xA4, 0x24, 0x3F, 0x51, 0xDF, 0x2D, 0x8A, 0x90, 0x07, 0x37, 0xD5, 0x81, 0x05, 0x69, ++ 0x9B, 0x4E, 0x10, 0xCB, 0xCB, 0x35, 0x9C, 0x7F, 0x3A, 0x40, 0x07, 0x69, 0x7C, 0x48, 0x20, 0x50, 0xEC, 0x33, 0xCF, 0x80, 0x41, 0x91, 0x6A, 0x3B, 0x91, 0x9A, 0x50, 0xD9, 0x6E, 0xF0, 0xF5, 0x89, ++ 0xFD, 0x45, 0x56, 0xF3, 0x0D, 0xBD, 0xD9, 0x42, 0xEA, 0xB7, 0x9D, 0xFA, 0x97, 0xC0, 0x7E, 0x30, 0x24, 0x70, 0x74, 0x35, 0x2E, 0x1B, 0xF9, 0x8E, 0x34, 0x9C, 0xC7, 0xEF, 0xA5, 0xA1, 0xB8, 0xFC, ++ 0xE4, 0xF1, 0x8F, 0x1F, 0xAF, 0x6F, 0x07, 0xC9, 0x9C, 0x32, 0x14, 0x48, 0xB0, 0x39, 0x5C, 0x8A, 0x9C, 0xBC, 0x46, 0x64, 0x12, 0xF8, 0x9C, 0x1A, 0x98, 0xBF, 0x57, 0x15, 0x84, 0x28, 0x44, 0xF0, ++ 0xE8, 0x23, 0x6F, 0xA4, 0x69, 0x6C, 0x46, 0x58, 0xB8, 0xFD, 0xE4, 0x42, 0x5D, 0x09, 0xD6, 0x7A, 0x38, 0xAC, 0x72, 0x58, 0xE5, 0xD5, 0x96, 0x6F, 0x2D, 0x3F, 0xF6, 0x6A, 0x0C, 0x0C, 0xE7, 0x6E, ++ 0x7F, 0x6B, 0x81, 0xA1, 0xBC, 0xD0, 0x47, 0xFD, 0x3A, 0x20, 0x5B, 0xF0, 0xCC, 0xAE, 0xA3, 0xB1, 0x10, 0x79, 0x90, 0x9C, 0x6C, 0xE5, 0x69, 0x8F, 0x32, 0xE1, 0xF3, 0x40, 0x96, 0x58, 0xFF, 0xA0, ++ 0x1E, 0xAE, 0xCB, 0x4A, 0xE2, 0xB0, 0x92, 0xB7, 0x89, 0x89, 0xDA, 0xAD, 0x66, 0x23, 0xBB, 0x11, 0xF4, 0x9F, 0x0F, 0x8F, 0x86, 0x99, 0xEC, 0x05, 0x66, 0x15, 0x02, 0xFF, 0xCA, 0xD0, 0x3C, 0xF4, ++ 0x15, 0x19, 0x1A, 0x22, 0x2D, 0x3C, 0x4C, 0x7B, 0x8A, 0xB0, 0xB5, 0xB9, 0xBB, 0xC2, 0xD9, 0xDC, 0xEF, 0xF7, 0x20, 0x2D, 0x3F, 0x42, 0x44, 0x49, 0x4F, 0x52, 0x53, 0x64, 0x66, 0x69, 0x74, 0xC4, ++ 0xD9, 0xE6, 0xF5, 0xFA, 0x00, 0x01, 0x04, 0x19, 0x27, 0x37, 0x3D, 0x5A, 0x76, 0x80, 0xB8, 0xC1, 0xC9, 0xFE, 0x20, 0x29, 0x38, 0x3B, 0x3C, 0x48, 0x4D, 0x56, 0x5F, 0x65, 0x79, 0x9D, 0x9E, 0xA6, ++ 0xA9, 0xAD, 0xD2, 0xDE, 0xE5, 0xE7, 0xF7, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x32, 0x48, ++ }, ++ }, ++ { ++ .name = "Dilithium Round 3, Level 3 (4-4) KAT 0", ++ .version = 0, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_44, ++ .rho_len = 32, ++ .rho = { ++ 0x1C, 0x0E, 0xE1, 0x11, 0x1B, 0x08, 0x00, 0x3F, 0x28, 0xE6, 0x5E, 0x8B, 0x3B, 0xDE, 0xB0, 0x37, 0xCF, 0x8F, 0x22, 0x1D, 0xFC, 0xDA, 0xF5, 0x95, 0x0E, 0xDB, 0x38, 0xD5, 0x06, 0xD8, 0x5B, 0xEF, ++ }, ++ .seed_len = 32, ++ .seed = { ++ 0x39, 0x4D, 0x16, 0x95, 0x05, 0x9D, 0xFF, 0x40, 0xAE, 0x25, 0x6C, 0x5D, 0x5E, 0xDA, 0xBF, 0xB6, 0x9F, 0x5F, 0x40, 0xF3, 0x7A, 0x58, 0x8F, 0x50, 0x53, 0x2C, 0xA4, 0x08, 0xA8, 0x16, 0x8A, 0xB1, ++ }, ++ .tr_len = 32, ++ .tr = { ++ 0x87, 0xD0, 0xAD, 0x11, 0x52, 0x21, 0x10, 0x93, 0x14, 0x94, 0xBF, 0x2C, 0xAE, 0xAE, 0x36, 0x97, 0x97, 0x11, 0xBC, 0x58, 0x5B, 0x32, 0xF0, 0x8C, 0x78, 0x49, 0x6F, 0x37, 0x9D, 0x60, 0x4D, 0x53, ++ }, ++ .s1_len = 384, ++ .s1 = { ++ 0xC0, 0xA6, 0x71, 0x1A, 0x96, 0x6C, 0x11, 0x31, 0x2A, 0xD9, 0xA8, 0x21, 0xD8, 0x08, 0x65, 0x42, 0xA6, 0x00, 0xA4, 0xB4, 0x2C, 0x19, 0x40, 0x72, 0x02, 0x42, 0x62, 0x81, 0x06, 0x21, 0x0A, 0x43, ++ 0x85, 0x23, 0x31, 0x70, 0x93, 0x08, 0x10, 0x8B, 0x18, 0x8C, 0x02, 0x24, 0x92, 0xC1, 0xB2, 0x84, 0x12, 0xC4, 0x21, 0x8B, 0x04, 0x21, 0x81, 0xC8, 0x61, 0x02, 0x48, 0x05, 0x9C, 0x92, 0x01, 0xC0, ++ 0x34, 0x88, 0x19, 0x32, 0x6C, 0x58, 0x20, 0x46, 0x89, 0x18, 0x68, 0xA2, 0xC2, 0x8D, 0x82, 0x34, 0x6A, 0x1C, 0x09, 0x42, 0x00, 0xA2, 0x8C, 0xE3, 0xA6, 0x49, 0x1C, 0x11, 0x2C, 0xC2, 0x48, 0x12, ++ 0xE0, 0x90, 0x21, 0x91, 0x98, 0x50, 0x62, 0xC0, 0x84, 0x62, 0x24, 0x51, 0xCA, 0x06, 0x2C, 0x64, 0x24, 0x0E, 0x1B, 0xB3, 0x31, 0x24, 0x96, 0x85, 0x4B, 0x46, 0x06, 0xDB, 0x26, 0x68, 0xC3, 0x82, ++ 0x68, 0x44, 0x10, 0x46, 0xC9, 0xB6, 0x21, 0x14, 0x04, 0x81, 0x14, 0x45, 0x50, 0x24, 0x42, 0x08, 0x44, 0x22, 0x71, 0x0B, 0x92, 0x45, 0x9A, 0xA0, 0x81, 0x1A, 0x91, 0x70, 0x9C, 0x24, 0x10, 0x03, ++ 0x95, 0x70, 0x04, 0xC5, 0x04, 0xC8, 0x26, 0x92, 0xD2, 0x92, 0x00, 0xC0, 0xB2, 0x60, 0xC0, 0xA2, 0x68, 0x09, 0x19, 0x0A, 0xA2, 0x30, 0x0E, 0x18, 0x89, 0x69, 0xE0, 0x00, 0x8D, 0xD8, 0x48, 0x62, ++ 0xDA, 0x14, 0x71, 0x20, 0x18, 0x05, 0x19, 0x07, 0x44, 0x04, 0x12, 0x40, 0x9B, 0x12, 0x40, 0x11, 0x80, 0x10, 0xD1, 0x42, 0x81, 0x99, 0x28, 0x50, 0x8B, 0x10, 0x91, 0x02, 0x24, 0x64, 0xA0, 0x20, ++ 0x6D, 0x12, 0x46, 0x21, 0x1C, 0x83, 0x8C, 0x1B, 0x47, 0x69, 0x01, 0x06, 0x90, 0xCC, 0x06, 0x24, 0x81, 0x84, 0x69, 0x20, 0x98, 0x2C, 0x24, 0x12, 0x05, 0x21, 0xB1, 0x50, 0x41, 0x36, 0x02, 0x98, ++ 0x44, 0x6E, 0xD1, 0xA6, 0x31, 0x11, 0x05, 0x6A, 0xD3, 0xA8, 0x40, 0xCA, 0xA8, 0x4C, 0x62, 0xB0, 0x00, 0x03, 0x13, 0x4A, 0x53, 0x34, 0x46, 0x14, 0x19, 0x40, 0x04, 0xC5, 0x4C, 0xE3, 0x06, 0x69, ++ 0x5A, 0xB0, 0x89, 0x61, 0x16, 0x8E, 0xCB, 0x10, 0x80, 0x8B, 0x16, 0x8E, 0xD9, 0x90, 0x64, 0x0B, 0x94, 0x60, 0x24, 0x83, 0x85, 0x1A, 0xB3, 0x04, 0x54, 0x26, 0x22, 0x51, 0xB8, 0x25, 0x1C, 0x42, ++ 0x4A, 0x0B, 0x81, 0x48, 0x42, 0xC4, 0x44, 0x5A, 0x10, 0x20, 0x23, 0x80, 0x84, 0x09, 0xB7, 0x25, 0x4C, 0xC6, 0x48, 0x14, 0x85, 0x4D, 0x19, 0x38, 0x0E, 0x60, 0x16, 0x51, 0xD8, 0x32, 0x6A, 0x0A, ++ 0x91, 0x89, 0x08, 0xC1, 0x70, 0xE0, 0x96, 0x4D, 0x18, 0x46, 0x8C, 0x01, 0x32, 0x8D, 0x91, 0xC4, 0x05, 0x4A, 0x00, 0x61, 0x23, 0x08, 0x68, 0xA2, 0x10, 0x42, 0x10, 0xA8, 0x61, 0x13, 0x06, 0x21, ++ }, ++ .s2_len = 384, ++ .s2 = { ++ 0x8A, 0x24, 0x8E, 0x62, 0x06, 0x89, 0xC9, 0xB2, 0x45, 0x08, 0x27, 0x84, 0x51, 0x20, 0x0D, 0x98, 0x04, 0x66, 0xDC, 0x42, 0x05, 0x44, 0x24, 0x85, 0x24, 0x26, 0x28, 0x22, 0x21, 0x61, 0x20, 0x16, ++ 0x09, 0x0B, 0xA6, 0x2C, 0x0A, 0x11, 0x44, 0xE0, 0x92, 0x81, 0x58, 0x48, 0x0D, 0x42, 0x22, 0x10, 0xA0, 0x06, 0x09, 0x8B, 0x24, 0x6E, 0x81, 0x28, 0x8C, 0xC0, 0x24, 0x80, 0x90, 0x30, 0x8D, 0x84, ++ 0x36, 0x40, 0x4C, 0xA6, 0x84, 0x50, 0x04, 0x24, 0x94, 0xB6, 0x8D, 0xA2, 0x92, 0x6D, 0x18, 0xB3, 0x44, 0xA0, 0x00, 0x85, 0xE3, 0xB8, 0x05, 0x14, 0x05, 0x04, 0xA4, 0xC2, 0x90, 0x84, 0x22, 0x81, ++ 0xC3, 0x26, 0x2D, 0x0B, 0x20, 0x66, 0xCC, 0x90, 0x31, 0x98, 0x38, 0x28, 0x10, 0x16, 0x6C, 0xC1, 0x34, 0x45, 0xC0, 0x10, 0x22, 0x24, 0xC6, 0x88, 0x03, 0x46, 0x32, 0xD8, 0x40, 0x90, 0x1C, 0x20, ++ 0x68, 0x04, 0x15, 0x28, 0x9A, 0x18, 0x81, 0x44, 0x98, 0x8D, 0x9C, 0x20, 0x6E, 0x9C, 0x30, 0x2C, 0xC1, 0xB8, 0x20, 0x61, 0x42, 0x21, 0x08, 0x03, 0x10, 0xA0, 0xC2, 0x8C, 0x58, 0x12, 0x85, 0x53, ++ 0x20, 0x4C, 0x03, 0x30, 0x81, 0x4C, 0xA4, 0x8D, 0x44, 0xC0, 0x8D, 0x51, 0x40, 0x4C, 0x1C, 0xA7, 0x2C, 0x44, 0x08, 0x65, 0xA0, 0x38, 0x40, 0xDA, 0x20, 0x80, 0x81, 0x06, 0x85, 0x8C, 0x26, 0x0D, ++ 0xE2, 0xA8, 0x8C, 0x9C, 0x44, 0x11, 0x59, 0x42, 0x28, 0xC4, 0x26, 0x04, 0x44, 0x14, 0x26, 0xA1, 0x42, 0x64, 0x08, 0xC0, 0x85, 0x11, 0x01, 0x86, 0x9B, 0x48, 0x31, 0x99, 0xB2, 0x0C, 0x80, 0x46, ++ 0x44, 0x59, 0xA8, 0x8C, 0x00, 0x42, 0x08, 0x98, 0x82, 0x90, 0x0A, 0xB5, 0x45, 0x62, 0x24, 0x48, 0x12, 0x96, 0x05, 0x44, 0x12, 0x46, 0x00, 0xC8, 0x88, 0x13, 0xA0, 0x61, 0xE1, 0x28, 0x4D, 0x0A, ++ 0xB9, 0x91, 0x4B, 0x96, 0x20, 0x99, 0xB8, 0x44, 0x00, 0x31, 0x4E, 0x98, 0x12, 0x85, 0x00, 0xB6, 0x01, 0x83, 0xA0, 0x0D, 0x14, 0x15, 0x0E, 0x18, 0x81, 0x10, 0x19, 0x01, 0x22, 0x4A, 0x06, 0x68, ++ 0x1A, 0x49, 0x8D, 0xE1, 0xA2, 0x84, 0x11, 0xC6, 0x31, 0x21, 0x26, 0x25, 0x91, 0xA0, 0x6D, 0x03, 0x05, 0x24, 0xA1, 0xB6, 0x08, 0x94, 0x44, 0x72, 0x43, 0x34, 0x12, 0x5B, 0xB4, 0x20, 0x41, 0xB6, ++ 0x50, 0xD0, 0x88, 0x8D, 0x0B, 0x07, 0x4D, 0x1C, 0x94, 0x64, 0x4C, 0x20, 0x8E, 0x8B, 0x88, 0x08, 0xE0, 0x30, 0x09, 0x44, 0x20, 0x05, 0x49, 0x86, 0x4D, 0x03, 0x13, 0x4E, 0x19, 0xC9, 0x84, 0x09, ++ 0x37, 0x61, 0x1A, 0x43, 0x68, 0x4A, 0x80, 0x90, 0x02, 0x04, 0x31, 0x1C, 0x17, 0x42, 0x18, 0x40, 0x80, 0xC8, 0x30, 0x8E, 0xE1, 0xA2, 0x41, 0xC3, 0x34, 0x04, 0xA3, 0x28, 0x22, 0x51, 0x24, 0x71, ++ }, ++ .t0_len = 1664, ++ .t0 = { ++ 0x88, 0xD6, 0xFE, 0xF4, 0x67, 0x12, 0xCA, 0x18, 0x28, 0x72, 0xAB, 0x29, 0x19, 0x67, 0x8A, 0xFF, 0x9D, 0x94, 0xE7, 0x43, 0xE0, 0x63, 0xA3, 0x9E, 0x0C, 0x35, 0xCA, 0xF7, 0x2A, 0x7F, 0x2E, 0xDA, ++ 0x28, 0xE6, 0x58, 0x58, 0x52, 0x0D, 0x5D, 0x84, 0x67, 0xDE, 0x74, 0x7C, 0xF3, 0x40, 0x65, 0x3B, 0x52, 0xC2, 0x68, 0xF5, 0x54, 0x13, 0xF5, 0xAD, 0xDC, 0x7D, 0x49, 0x01, 0x1E, 0xC3, 0x3E, 0xDD, ++ 0x53, 0x74, 0x23, 0xA8, 0x42, 0x88, 0x86, 0x93, 0x37, 0xAE, 0xA0, 0x78, 0x1A, 0x12, 0x42, 0x69, 0x07, 0x14, 0x51, 0x72, 0x2D, 0xB3, 0xBB, 0x8F, 0x2C, 0xE5, 0xB1, 0x55, 0x2F, 0x83, 0xD2, 0xAF, ++ 0x07, 0xF2, 0x56, 0x13, 0x91, 0x8A, 0x9F, 0x4E, 0x6F, 0x12, 0x57, 0x60, 0x38, 0x88, 0xE5, 0x89, 0x30, 0x8C, 0xA5, 0xF9, 0x5F, 0x07, 0x14, 0x3D, 0x23, 0xBA, 0xAE, 0x17, 0x52, 0x0B, 0x36, 0xB6, ++ 0xE0, 0xE9, 0x4F, 0xAF, 0x68, 0x45, 0xEB, 0x21, 0x31, 0xAE, 0xC3, 0x83, 0xE6, 0x3B, 0xC8, 0x64, 0x4E, 0xE5, 0xF1, 0xAC, 0xCB, 0xA8, 0x2F, 0x92, 0x11, 0xE5, 0x7A, 0xFC, 0xBF, 0x50, 0x9C, 0x11, ++ 0x31, 0xA3, 0x74, 0x66, 0xBC, 0x91, 0xB3, 0x57, 0xDC, 0xBB, 0xBC, 0x14, 0xCC, 0xC3, 0x19, 0xC4, 0xCC, 0x6A, 0xC7, 0x5F, 0xCD, 0xC8, 0x2C, 0x65, 0x96, 0xD0, 0x77, 0x70, 0xC8, 0x27, 0x7A, 0xD3, ++ 0x70, 0xB1, 0x92, 0xA0, 0xB4, 0xE0, 0x5F, 0x81, 0x2E, 0x0E, 0x26, 0x5D, 0x29, 0x12, 0xAA, 0x29, 0xF0, 0x3F, 0xC9, 0xF7, 0x2D, 0xFA, 0x69, 0xC9, 0xB1, 0x29, 0x1A, 0x3F, 0xC5, 0x83, 0x64, 0x2B, ++ 0x23, 0x5F, 0x69, 0x91, 0xA9, 0x54, 0x78, 0x83, 0x47, 0xF6, 0x0A, 0x03, 0x28, 0xC4, 0x8E, 0xCE, 0xE5, 0x1B, 0xA0, 0x2D, 0xFF, 0x32, 0x3A, 0xBD, 0x91, 0x16, 0x67, 0xCB, 0x14, 0x54, 0x9B, 0x61, ++ 0x8F, 0x1C, 0x5D, 0x25, 0x0C, 0xAC, 0x9E, 0x35, 0xE0, 0x71, 0x60, 0x19, 0x92, 0xFB, 0xEC, 0x0B, 0xAE, 0x6F, 0x74, 0x21, 0x30, 0x81, 0x40, 0x47, 0x44, 0xD1, 0x2F, 0x2A, 0x0E, 0x04, 0xBD, 0xB2, ++ 0x65, 0xE0, 0x92, 0x4C, 0xAD, 0xA4, 0x0D, 0x1F, 0xA1, 0xF3, 0x8A, 0xCA, 0x46, 0x06, 0xBF, 0xD4, 0x57, 0x57, 0x12, 0xB8, 0x26, 0x0A, 0x45, 0x6F, 0xDD, 0xEE, 0xEF, 0xE7, 0xCA, 0x25, 0x9B, 0xCD, ++ 0xA9, 0x7B, 0x9B, 0x93, 0x9A, 0x5F, 0xD2, 0x88, 0x9C, 0x9B, 0x49, 0xFB, 0x7D, 0x4E, 0x35, 0x53, 0xDE, 0xA6, 0x1B, 0x33, 0x39, 0xBD, 0x0E, 0x6B, 0x16, 0xBF, 0x3B, 0xB2, 0x27, 0x10, 0x3B, 0xF9, ++ 0x20, 0x2E, 0x72, 0xDC, 0x50, 0x2E, 0x28, 0xF7, 0xCE, 0x15, 0x59, 0xA4, 0x63, 0x1F, 0x37, 0x25, 0x20, 0x32, 0x4E, 0x4E, 0xBA, 0x07, 0x54, 0x5F, 0x78, 0xBF, 0x4D, 0x94, 0xB0, 0xE5, 0xB8, 0xBF, ++ 0x51, 0xB8, 0xF1, 0x76, 0x53, 0x3D, 0x5C, 0xFE, 0xA5, 0x23, 0x2F, 0x28, 0x3A, 0x47, 0x60, 0x5F, 0xA6, 0x5D, 0xDB, 0x17, 0xC8, 0x91, 0xC2, 0x51, 0x01, 0x1C, 0x4E, 0x98, 0xEE, 0xB6, 0xEB, 0x00, ++ 0xCB, 0x65, 0xBA, 0x31, 0xC8, 0xF0, 0x25, 0xC8, 0x7A, 0x9F, 0xE0, 0x2D, 0xBC, 0x10, 0xC5, 0xD8, 0x3A, 0x06, 0x5E, 0xBA, 0x5D, 0x7B, 0x2A, 0x19, 0xD5, 0xA1, 0xCB, 0x2C, 0x16, 0x0A, 0xE1, 0x66, ++ 0xE8, 0x67, 0xF2, 0xAF, 0x8C, 0x7D, 0x49, 0xD6, 0x3F, 0xB8, 0x3A, 0x61, 0x49, 0x57, 0xFC, 0x0A, 0x3B, 0x5A, 0x5C, 0x74, 0x99, 0x0E, 0x9A, 0x2B, 0x02, 0x12, 0x0C, 0x7E, 0x6D, 0xE3, 0x7E, 0x15, ++ 0x5F, 0xB4, 0x72, 0xF5, 0x0F, 0x0A, 0x45, 0xE4, 0x7C, 0xF5, 0xF9, 0xD7, 0xA4, 0xC8, 0x29, 0x82, 0xC9, 0xDC, 0x86, 0xAE, 0x87, 0x7C, 0x3F, 0xD1, 0x88, 0x59, 0x43, 0xE4, 0x39, 0xFB, 0x00, 0x3C, ++ 0x7A, 0x9A, 0x42, 0xF7, 0x1B, 0x4F, 0xF6, 0xF0, 0xA2, 0x8B, 0x14, 0x0C, 0xBD, 0xBA, 0x6E, 0x71, 0xB1, 0x3A, 0xC3, 0x1B, 0x23, 0xDE, 0x9E, 0xAB, 0x78, 0x37, 0xE1, 0x5A, 0x69, 0xF8, 0x33, 0xEB, ++ 0x7B, 0x56, 0xA7, 0x1D, 0x8B, 0xC2, 0xCA, 0xF1, 0xF2, 0xA3, 0x1C, 0x34, 0x5B, 0xD5, 0xF4, 0x6E, 0xE0, 0x13, 0xA7, 0xC6, 0x89, 0x37, 0x23, 0x37, 0x19, 0x1D, 0xAA, 0x80, 0x0C, 0x0A, 0xC6, 0xC4, ++ 0x6C, 0x9F, 0xF6, 0x88, 0xB1, 0xA0, 0x13, 0x47, 0xF2, 0x57, 0xC4, 0x74, 0xAA, 0x3D, 0x97, 0xC1, 0xD6, 0x3A, 0x8C, 0x00, 0xE0, 0xA3, 0x7B, 0x68, 0x16, 0x73, 0xF5, 0x7C, 0x1C, 0x9C, 0x8F, 0xCC, ++ 0xD4, 0x6F, 0x17, 0x4C, 0x74, 0xA2, 0x9D, 0x84, 0xCE, 0xB7, 0x1F, 0x7E, 0x6B, 0x2F, 0x8C, 0xD2, 0xB0, 0x89, 0xED, 0x43, 0xF7, 0xC9, 0x6D, 0xAE, 0x81, 0xA2, 0x23, 0x41, 0x8C, 0x20, 0xB1, 0x6F, ++ 0x1D, 0xF3, 0xD1, 0xA9, 0x78, 0xAE, 0x28, 0xF6, 0xDF, 0x35, 0xEC, 0x55, 0x9D, 0x04, 0xD2, 0x0E, 0xC7, 0x4B, 0x22, 0x4A, 0xEA, 0x31, 0xA2, 0x89, 0xB0, 0x15, 0xB0, 0x69, 0xE9, 0xCB, 0xBB, 0xF7, ++ 0xCF, 0x6D, 0xE9, 0x4C, 0xFB, 0x2A, 0x96, 0xE4, 0xAE, 0x34, 0x62, 0xC9, 0x60, 0x03, 0xCD, 0xDA, 0x87, 0xDB, 0x56, 0x1A, 0xF2, 0xCE, 0x3C, 0x0B, 0xA1, 0xD9, 0x04, 0x13, 0xFD, 0xCE, 0x3C, 0xCF, ++ 0x43, 0x90, 0xC0, 0x2C, 0x1C, 0xB9, 0xF6, 0x54, 0xF4, 0x82, 0x0E, 0xC3, 0x30, 0x15, 0x45, 0x7D, 0x4A, 0x62, 0x9F, 0xBF, 0x39, 0x41, 0x9C, 0xAB, 0x76, 0x42, 0xD6, 0x88, 0x5E, 0x10, 0x3F, 0xCE, ++ 0x0D, 0x42, 0x06, 0xCC, 0xE7, 0xC1, 0x2C, 0x6F, 0xC4, 0x4F, 0xA3, 0x3A, 0xD0, 0x86, 0x4C, 0x33, 0x71, 0xA7, 0xCB, 0xE8, 0x20, 0xE3, 0xB3, 0x71, 0xB6, 0x56, 0xA3, 0x8F, 0x2E, 0x7F, 0xF1, 0x8F, ++ 0xE4, 0xA5, 0x0C, 0x8A, 0xB3, 0xF8, 0x5D, 0x78, 0x3F, 0xB5, 0x78, 0x35, 0xCE, 0xD8, 0x49, 0x0B, 0x84, 0xEE, 0x0D, 0x99, 0xAF, 0x0D, 0x64, 0xC4, 0x83, 0xCE, 0xB6, 0x36, 0x6F, 0xF5, 0x4F, 0x8A, ++ 0xC8, 0xA4, 0x0D, 0xB1, 0xAF, 0xA5, 0x73, 0xA4, 0xFB, 0x32, 0x6C, 0x74, 0xF0, 0x23, 0x6E, 0xCE, 0xF3, 0xDA, 0x71, 0x20, 0x66, 0x5C, 0xCE, 0x05, 0xDD, 0x65, 0x4B, 0x50, 0x71, 0x72, 0x3A, 0x83, ++ 0x48, 0xE7, 0xCD, 0x77, 0x93, 0x51, 0x38, 0x19, 0xB6, 0x1C, 0xB6, 0x4E, 0x13, 0x28, 0xE8, 0xB2, 0x2E, 0x76, 0x64, 0xBD, 0x6B, 0x41, 0xB5, 0x71, 0x0D, 0x19, 0xEA, 0x88, 0x09, 0xD4, 0x45, 0x08, ++ 0x50, 0xE9, 0x07, 0xDF, 0xC4, 0xD0, 0xB7, 0x5F, 0x58, 0x8C, 0xEC, 0xE9, 0x62, 0xE9, 0xE0, 0x93, 0x7C, 0xE1, 0x40, 0x24, 0x46, 0xA4, 0xD2, 0x89, 0x1A, 0x46, 0xE6, 0x61, 0x7F, 0xB2, 0x9D, 0x4F, ++ 0xCD, 0x71, 0x26, 0x06, 0xF7, 0x81, 0x9E, 0xCA, 0x60, 0xF7, 0xE0, 0xD5, 0xB1, 0x9E, 0x7F, 0xFB, 0x57, 0xC7, 0x3C, 0x16, 0xFF, 0xEE, 0xB9, 0x00, 0x38, 0x41, 0x0C, 0xB9, 0xFC, 0xBB, 0x5E, 0x9D, ++ 0x51, 0xEB, 0x3E, 0xB6, 0x29, 0x7E, 0x9F, 0xF6, 0xAB, 0x70, 0x88, 0xFE, 0x2D, 0x9B, 0x23, 0x7B, 0xC2, 0x4C, 0xF7, 0xF8, 0x29, 0x01, 0x18, 0xA5, 0xE0, 0xE0, 0x0A, 0x0B, 0x90, 0x3F, 0xB6, 0x37, ++ 0x5C, 0x84, 0x81, 0x76, 0xCD, 0x0A, 0x8C, 0x88, 0x75, 0xCC, 0x59, 0x19, 0x9C, 0xDA, 0x11, 0xA8, 0x7A, 0x78, 0xF6, 0x5C, 0xC4, 0x04, 0x33, 0x0B, 0x08, 0x75, 0x71, 0xFD, 0x06, 0x33, 0xE2, 0x71, ++ 0x29, 0xFD, 0xAB, 0x5A, 0x8A, 0x1F, 0x79, 0x3E, 0x52, 0x41, 0x2B, 0x00, 0x83, 0xFD, 0x5C, 0x74, 0xDB, 0x3C, 0xF6, 0x0C, 0x25, 0x43, 0xCE, 0x7C, 0x91, 0xB2, 0x80, 0x0E, 0x40, 0x20, 0x3F, 0x8D, ++ 0x99, 0xFE, 0x5F, 0xDE, 0x5B, 0x10, 0x8E, 0x7E, 0xDC, 0x80, 0xEB, 0xB9, 0xBB, 0x34, 0x98, 0x6E, 0xC5, 0xC5, 0xA8, 0xF5, 0x80, 0xE7, 0x57, 0x52, 0x90, 0x7F, 0xF0, 0xF2, 0x94, 0xC8, 0x66, 0xC2, ++ 0xCF, 0x1F, 0x36, 0x2E, 0x84, 0x0B, 0x68, 0x81, 0xBD, 0x43, 0x21, 0x92, 0x01, 0x78, 0x1C, 0x63, 0xB0, 0x03, 0x9A, 0x95, 0xBC, 0xFB, 0x4A, 0x0F, 0xEC, 0xE5, 0x69, 0xDF, 0x00, 0x52, 0x3C, 0xE9, ++ 0xC0, 0x84, 0xB0, 0x22, 0xB3, 0xB0, 0x22, 0x24, 0x2E, 0x28, 0x41, 0x97, 0x96, 0xAC, 0xF0, 0xA0, 0xC9, 0x95, 0xF9, 0x48, 0xDB, 0xFF, 0xFD, 0x30, 0xD7, 0x7E, 0xD1, 0x05, 0xA3, 0xC9, 0x94, 0x3C, ++ 0x40, 0x6B, 0x30, 0x5B, 0xC8, 0x1A, 0x6A, 0x24, 0x8A, 0x29, 0x15, 0x48, 0xF2, 0xA6, 0x7F, 0x43, 0x8D, 0x96, 0x6A, 0x57, 0xD5, 0x3F, 0x4B, 0x7B, 0xE1, 0x53, 0x54, 0xE5, 0x81, 0xBE, 0x16, 0xF7, ++ 0xAD, 0x64, 0xD1, 0x64, 0xE8, 0x57, 0x87, 0xDF, 0x58, 0x49, 0xC8, 0x10, 0xAF, 0xC2, 0x8D, 0x06, 0x48, 0x2F, 0x44, 0x1B, 0x5F, 0xDE, 0x3D, 0xB2, 0xED, 0x36, 0xDD, 0x25, 0xAA, 0x66, 0x64, 0xD4, ++ 0xD4, 0x3F, 0xFA, 0x32, 0xED, 0xA2, 0x56, 0x89, 0xC9, 0xF4, 0xA5, 0xD5, 0x14, 0xFC, 0x66, 0x23, 0x1C, 0x54, 0x01, 0x52, 0x09, 0x22, 0x52, 0x44, 0x38, 0xEF, 0x1D, 0xC7, 0x8D, 0x69, 0x3C, 0x97, ++ 0x18, 0xDE, 0xBB, 0xD2, 0x43, 0x31, 0x26, 0x74, 0xC8, 0x99, 0xF1, 0x89, 0x10, 0xE3, 0x89, 0xC8, 0xEB, 0xE5, 0x05, 0x82, 0x4B, 0xCC, 0x42, 0xCD, 0x4A, 0x9A, 0xCE, 0x19, 0x37, 0x68, 0x22, 0x02, ++ 0x19, 0x01, 0x1F, 0x3B, 0x1F, 0x33, 0x54, 0x27, 0xBF, 0xF9, 0xE8, 0xBD, 0xED, 0x5C, 0x08, 0x71, 0x1A, 0x09, 0xC2, 0xB7, 0x1C, 0xB9, 0x64, 0xC5, 0x6A, 0x83, 0x93, 0xBF, 0xD2, 0xB5, 0x6E, 0x9B, ++ 0x6B, 0x2F, 0x51, 0x3E, 0x68, 0x25, 0x87, 0xDC, 0x1B, 0x8E, 0xD1, 0x96, 0x06, 0x63, 0x26, 0x87, 0x10, 0x25, 0x62, 0x80, 0x36, 0x70, 0x00, 0x63, 0x17, 0x6D, 0x34, 0x5D, 0xE3, 0x84, 0xE1, 0x82, ++ 0xD6, 0xC4, 0x17, 0xA3, 0x2A, 0xB1, 0x10, 0x95, 0xEF, 0x59, 0xBB, 0x4D, 0x17, 0x1B, 0x9C, 0xF8, 0x1D, 0x17, 0xAC, 0x42, 0x66, 0x4D, 0xED, 0x93, 0x3C, 0xCB, 0x72, 0x2C, 0x69, 0x85, 0x7F, 0xFC, ++ 0x53, 0xC8, 0xE7, 0xF2, 0x47, 0x4B, 0x0C, 0xB2, 0xDF, 0xF2, 0xDD, 0xC8, 0xA5, 0xC6, 0x01, 0xC8, 0x4A, 0x70, 0x19, 0x81, 0x19, 0x9B, 0xCC, 0xF7, 0x41, 0x12, 0xA6, 0xEC, 0x06, 0x2C, 0x4F, 0xEB, ++ 0x60, 0x1A, 0x02, 0x8A, 0xF0, 0x10, 0x32, 0xAD, 0xB6, 0xBD, 0x15, 0xD4, 0xC2, 0xB9, 0x55, 0x0A, 0xA8, 0x50, 0xAD, 0x62, 0xCC, 0xC3, 0xA3, 0x66, 0x5D, 0x52, 0x12, 0xB1, 0x2E, 0x0F, 0xD5, 0xC5, ++ 0x32, 0x6A, 0x1E, 0x5E, 0xB1, 0xF1, 0x0D, 0x55, 0x7D, 0x94, 0x60, 0x5E, 0x8E, 0x3F, 0x35, 0x6E, 0x08, 0xFF, 0x7F, 0xD8, 0x84, 0xED, 0x3C, 0x42, 0x05, 0x46, 0x35, 0x94, 0xC9, 0xAF, 0x2F, 0x39, ++ 0xE4, 0xB1, 0x27, 0x46, 0x95, 0x23, 0x4B, 0x54, 0xEE, 0xCE, 0xD9, 0x3F, 0x46, 0x0E, 0xDF, 0x1A, 0x13, 0xC2, 0xCB, 0x4B, 0x17, 0xD3, 0x22, 0xF6, 0xF7, 0x9F, 0xE1, 0x6F, 0x03, 0x57, 0xC1, 0xC4, ++ 0x73, 0x98, 0x63, 0xE7, 0x96, 0x79, 0x1F, 0x86, 0x47, 0xFA, 0xBF, 0x73, 0x0A, 0xB0, 0x0E, 0x0D, 0xA5, 0x09, 0x70, 0x6D, 0x94, 0x57, 0x17, 0x40, 0xF6, 0x1F, 0x7B, 0xAF, 0x36, 0x6D, 0x27, 0x74, ++ 0xC9, 0xB5, 0xB8, 0xC6, 0x1D, 0xD6, 0xBE, 0x98, 0x19, 0xA6, 0x02, 0x8B, 0x26, 0x4B, 0xB2, 0xE4, 0xAE, 0xA5, 0x4B, 0x56, 0xD4, 0xEC, 0xAB, 0x5B, 0x52, 0x8C, 0xE0, 0xC0, 0xC0, 0xCC, 0xDB, 0x73, ++ 0x02, 0x33, 0x52, 0xCB, 0x00, 0x44, 0x5B, 0xAB, 0x6F, 0x74, 0x67, 0xB4, 0x64, 0x4D, 0x43, 0x61, 0xC4, 0x64, 0xFA, 0xC6, 0xB5, 0xB1, 0x37, 0xD3, 0x23, 0x91, 0x02, 0x1B, 0x47, 0x5F, 0xCB, 0x5F, ++ 0x31, 0x77, 0x4F, 0xD8, 0xEC, 0xAB, 0xDF, 0x65, 0x47, 0x5F, 0x25, 0x57, 0x4C, 0x65, 0x55, 0x9C, 0xB3, 0x31, 0xF4, 0x1C, 0x0F, 0x49, 0x8B, 0x74, 0xDD, 0x94, 0x1C, 0x34, 0x4C, 0x50, 0xD8, 0xE6, ++ 0x4F, 0x95, 0x78, 0x71, 0x4A, 0x32, 0x56, 0x1F, 0xAA, 0xCE, 0xAF, 0x78, 0x14, 0x8E, 0x6D, 0xA4, 0xB5, 0x66, 0x82, 0x69, 0x25, 0x71, 0x4B, 0x17, 0x10, 0x8A, 0xFD, 0xD5, 0x46, 0x38, 0x5A, 0x3C, ++ 0xD4, 0x54, 0xD5, 0xCA, 0xA1, 0x69, 0x60, 0x91, 0x62, 0x82, 0xA4, 0x7C, 0x43, 0x15, 0xCE, 0x23, 0x6B, 0xD9, 0xE3, 0x25, 0x5C, 0x60, 0x4E, 0xBD, 0xC3, 0x97, 0x72, 0xDB, 0x5C, 0xE0, 0xB2, 0x36, ++ }, ++ .t1_len = 1280, ++ .t1 = { ++ 0x61, 0x77, 0xE3, 0xDE, 0x0D, 0x4F, 0x1E, 0xF5, 0x84, 0x77, 0x35, 0x94, 0x7B, 0x56, 0xD0, 0x8E, 0x84, 0x1D, 0xB2, 0x44, 0x4F, 0xA2, 0xB7, 0x29, 0xAD, 0xEB, 0x14, 0x17, 0xCA, 0x7A, 0xDF, 0x42, ++ 0xA1, 0x49, 0x0C, 0x5A, 0x09, 0x7F, 0x00, 0x27, 0x60, 0xC1, 0xFC, 0x41, 0x9B, 0xE8, 0x32, 0x5A, 0xAD, 0x01, 0x97, 0xC5, 0x2C, 0xED, 0x80, 0xD3, 0xDF, 0x18, 0xE7, 0x77, 0x42, 0x65, 0xB2, 0x89, ++ 0x91, 0x2C, 0xEC, 0xA1, 0xBE, 0x3A, 0x90, 0xD8, 0xA4, 0xFD, 0xE6, 0x5C, 0x84, 0xC6, 0x10, 0x86, 0x4E, 0x47, 0xDE, 0xEC, 0xAE, 0x3E, 0xEA, 0x44, 0x30, 0xB9, 0x90, 0x95, 0x59, 0x40, 0x8D, 0x11, ++ 0xA6, 0xAB, 0xDB, 0x7D, 0xB9, 0x33, 0x6D, 0xF7, 0xF9, 0x6E, 0xAB, 0x48, 0x64, 0xA6, 0x57, 0x97, 0x91, 0x26, 0x5F, 0xA5, 0x6C, 0x34, 0x8C, 0xB7, 0xD2, 0xDD, 0xC9, 0x0E, 0x13, 0x3A, 0x95, 0xC3, ++ 0xF6, 0xB1, 0x36, 0x01, 0x42, 0x9F, 0x54, 0x08, 0xBD, 0x99, 0x9A, 0xA4, 0x79, 0xC1, 0x01, 0x81, 0x59, 0x55, 0x0E, 0xC5, 0x5A, 0x11, 0x3C, 0x49, 0x3B, 0xE6, 0x48, 0xF4, 0xE0, 0x36, 0xDD, 0x4F, ++ 0x8C, 0x80, 0x9E, 0x03, 0x6B, 0x4F, 0xBB, 0x91, 0x8C, 0x2C, 0x48, 0x4A, 0xD8, 0xE1, 0x74, 0x7A, 0xE0, 0x55, 0x85, 0xAB, 0x43, 0x3F, 0xDF, 0x46, 0x1A, 0xF0, 0x3C, 0x25, 0xA7, 0x73, 0x70, 0x07, ++ 0x21, 0xAA, 0x05, 0xF7, 0x37, 0x9F, 0xE7, 0xF5, 0xED, 0x96, 0x17, 0x5D, 0x40, 0x21, 0x07, 0x6E, 0x7F, 0x52, 0xB6, 0x03, 0x08, 0xEF, 0xF5, 0xD4, 0x2B, 0xA6, 0xE0, 0x93, 0xB3, 0xD0, 0x81, 0x5E, ++ 0xB3, 0x49, 0x66, 0x46, 0xE4, 0x92, 0x30, 0xA9, 0xB3, 0x5C, 0x8D, 0x41, 0x90, 0x0C, 0x2B, 0xB8, 0xD3, 0xB4, 0x46, 0xA2, 0x31, 0x27, 0xF7, 0xE0, 0x96, 0xD8, 0x5A, 0x1C, 0x79, 0x4A, 0xD4, 0xC8, ++ 0x92, 0x77, 0x90, 0x4F, 0xC6, 0xBF, 0xEC, 0x57, 0xB1, 0xCD, 0xD8, 0x0D, 0xF9, 0x95, 0x50, 0x30, 0xFD, 0xCA, 0x74, 0x1A, 0xFB, 0xDA, 0xC8, 0x27, 0xB1, 0x3C, 0xCD, 0x54, 0x03, 0x58, 0x8A, 0xF4, ++ 0x64, 0x40, 0x03, 0xC2, 0x26, 0x5D, 0xFA, 0x4D, 0x41, 0x9D, 0xBC, 0xCD, 0x20, 0x64, 0x89, 0x23, 0x86, 0x51, 0x8B, 0xE9, 0xD5, 0x1C, 0x16, 0x49, 0x82, 0x75, 0xEB, 0xEC, 0xF5, 0xCD, 0xC7, 0xA8, ++ 0x20, 0xF2, 0xC2, 0x93, 0x14, 0xAC, 0x4A, 0x6F, 0x08, 0xB2, 0x25, 0x2A, 0xD3, 0xCF, 0xB1, 0x99, 0xAA, 0x42, 0xFE, 0x0B, 0x4F, 0xB5, 0x71, 0x97, 0x5C, 0x10, 0x20, 0xD9, 0x49, 0xE1, 0x94, 0xEE, ++ 0x1E, 0xAD, 0x93, 0x7B, 0xFB, 0x55, 0x0B, 0xB3, 0xBA, 0x8E, 0x35, 0x7A, 0x02, 0x9C, 0x29, 0xF0, 0x77, 0x55, 0x46, 0x02, 0xE1, 0xCA, 0x2F, 0x22, 0x89, 0xCB, 0x91, 0x69, 0x94, 0x1C, 0x3A, 0xAF, ++ 0xDB, 0x8E, 0x58, 0xC7, 0xF2, 0xAC, 0x77, 0x29, 0x1F, 0xB4, 0x14, 0x7C, 0x65, 0xF6, 0xB0, 0x31, 0xD3, 0xEB, 0xA4, 0x2F, 0x2A, 0xCF, 0xD9, 0x44, 0x8A, 0x5B, 0xC2, 0x2B, 0x47, 0x6E, 0x07, 0xCC, ++ 0xCE, 0xDA, 0x23, 0x06, 0xC5, 0x54, 0xEC, 0x9B, 0x7A, 0xB6, 0x55, 0xF1, 0xD7, 0x31, 0x8C, 0x2B, 0x7E, 0x67, 0xD5, 0xF6, 0x9B, 0xED, 0xF5, 0x60, 0x00, 0xFD, 0xA9, 0x89, 0x86, 0xB5, 0xAB, 0x1B, ++ 0x3A, 0x22, 0xD8, 0xDF, 0xD6, 0x68, 0x16, 0x97, 0xB2, 0x3A, 0x55, 0xC9, 0x6E, 0x87, 0x10, 0xF3, 0xF9, 0x8C, 0x04, 0x4F, 0xB1, 0x5F, 0x60, 0x63, 0x13, 0xEE, 0x56, 0xC0, 0xF1, 0xF5, 0xCA, 0x0F, ++ 0x51, 0x2E, 0x08, 0x48, 0x4F, 0xCB, 0x35, 0x8E, 0x6E, 0x52, 0x8F, 0xFA, 0x89, 0xF8, 0xA8, 0x66, 0xCC, 0xFF, 0x3C, 0x0C, 0x58, 0x13, 0x14, 0x7E, 0xC5, 0x9A, 0xF0, 0x47, 0x0C, 0x4A, 0xAD, 0x01, ++ 0x41, 0xD3, 0x4F, 0x10, 0x1D, 0xA2, 0xE5, 0xE1, 0xBD, 0x52, 0xD0, 0xD4, 0xC9, 0xB1, 0x3B, 0x3E, 0x3D, 0x87, 0xD1, 0x58, 0x61, 0x05, 0x79, 0x67, 0x54, 0xE7, 0x97, 0x8C, 0xA1, 0xC6, 0x8A, 0x7D, ++ 0x85, 0xDF, 0x11, 0x2B, 0x7A, 0xB9, 0x21, 0xB3, 0x59, 0xA9, 0xF0, 0x3C, 0xBD, 0x27, 0xA7, 0xEA, 0xC8, 0x7A, 0x9A, 0x80, 0xB0, 0xB2, 0x6B, 0x4C, 0x96, 0x57, 0xED, 0x85, 0xAD, 0x7F, 0xA2, 0x61, ++ 0x6A, 0xB3, 0x45, 0xEB, 0x82, 0x26, 0xF6, 0x9F, 0xC0, 0xF4, 0x81, 0x83, 0xFF, 0x57, 0x4B, 0xCD, 0x76, 0x7B, 0x56, 0x76, 0x41, 0x3A, 0xDB, 0x12, 0xEA, 0x21, 0x50, 0xA0, 0xE9, 0x76, 0x83, 0xEE, ++ 0x54, 0x24, 0x3C, 0x25, 0xB7, 0xEA, 0x8A, 0x71, 0x86, 0x06, 0xF8, 0x69, 0x93, 0xD8, 0xD0, 0xDA, 0xCE, 0x83, 0x4E, 0xD3, 0x41, 0xEE, 0xB7, 0x24, 0xFE, 0x3D, 0x5F, 0xF0, 0xBC, 0x8B, 0x8A, 0x7B, ++ 0x81, 0x04, 0xBA, 0x26, 0x9D, 0x34, 0x13, 0x3A, 0x4C, 0xF8, 0x30, 0x0A, 0x2D, 0x68, 0x84, 0x96, 0xB5, 0x9B, 0x6F, 0xCB, 0xC6, 0x1A, 0xE9, 0x60, 0x62, 0xEA, 0x1D, 0x8E, 0x5B, 0x41, 0x0C, 0x56, ++ 0x71, 0xF4, 0x24, 0x41, 0x7E, 0xD6, 0x93, 0x32, 0x9C, 0xD9, 0x83, 0x00, 0x1F, 0xFC, 0xD1, 0x00, 0x23, 0xD5, 0x98, 0x85, 0x9F, 0xB7, 0xAD, 0x5F, 0xD2, 0x63, 0x54, 0x71, 0x17, 0x10, 0x06, 0x90, ++ 0xC6, 0xCE, 0x74, 0x38, 0x95, 0x6E, 0x6C, 0xC5, 0x7F, 0x1B, 0x5D, 0xE5, 0x3B, 0xB0, 0xDC, 0x72, 0xCE, 0x9B, 0x6D, 0xEA, 0xA8, 0x57, 0x89, 0x59, 0x9A, 0x70, 0xF0, 0x05, 0x1F, 0x1A, 0x0E, 0x25, ++ 0xE8, 0x6D, 0x88, 0x8B, 0x00, 0xDF, 0x36, 0xBD, 0xBC, 0x93, 0xEF, 0x72, 0x17, 0xC4, 0x5A, 0xCE, 0x11, 0xC0, 0x79, 0x0D, 0x70, 0xE9, 0x95, 0x3E, 0x5B, 0x41, 0x7B, 0xA2, 0xFD, 0x9A, 0x4C, 0xAF, ++ 0x82, 0xF1, 0xFC, 0xE6, 0xF4, 0x5F, 0x53, 0xE2, 0x15, 0xB8, 0x35, 0x5E, 0xF6, 0x1D, 0x89, 0x1D, 0xF1, 0xC7, 0x94, 0x23, 0x1C, 0x16, 0x2D, 0xD2, 0x41, 0x64, 0xB5, 0x34, 0xA9, 0xD4, 0x84, 0x67, ++ 0xCD, 0xC3, 0x23, 0x62, 0x4C, 0x2F, 0x95, 0xD4, 0x40, 0x2F, 0xF9, 0xD6, 0x6A, 0xB1, 0x19, 0x1A, 0x81, 0x24, 0x14, 0x4A, 0xFA, 0x35, 0xD4, 0xE3, 0x1D, 0xC8, 0x6C, 0xAA, 0x79, 0x7C, 0x31, 0xF6, ++ 0x8B, 0x85, 0x85, 0x4C, 0xD9, 0x59, 0xC4, 0xFA, 0xC5, 0xEC, 0x53, 0xB3, 0xB5, 0x6D, 0x37, 0x4B, 0x88, 0x8A, 0x9E, 0x97, 0x9A, 0x65, 0x76, 0xB6, 0x34, 0x5E, 0xC8, 0x52, 0x2C, 0x96, 0x06, 0x99, ++ 0x02, 0x81, 0xBF, 0x3E, 0xF7, 0xC5, 0x94, 0x5D, 0x10, 0xFD, 0x21, 0xA2, 0xA1, 0xD2, 0xE5, 0x40, 0x4C, 0x5C, 0xF2, 0x12, 0x20, 0x64, 0x13, 0x91, 0xB9, 0x8B, 0xCF, 0x82, 0x53, 0x98, 0x30, 0x5B, ++ 0x56, 0xE5, 0x8B, 0x61, 0x1F, 0xE5, 0x25, 0x32, 0x03, 0xE3, 0xDF, 0x0D, 0x22, 0x46, 0x6A, 0x73, 0xB3, 0xF0, 0xFB, 0xE4, 0x3B, 0x9A, 0x62, 0x92, 0x80, 0x91, 0x89, 0x8B, 0x8A, 0x0E, 0x5B, 0x26, ++ 0x9D, 0xB5, 0x86, 0xB0, 0xE4, 0xDD, 0xEF, 0x50, 0xD6, 0x82, 0xA1, 0x2D, 0x2C, 0x1B, 0xE8, 0x24, 0x14, 0x9A, 0xA2, 0x54, 0xC6, 0x38, 0x1B, 0xB4, 0x12, 0xD7, 0x7C, 0x3F, 0x9A, 0xA9, 0x02, 0xB6, ++ 0x88, 0xC8, 0x17, 0x15, 0xA5, 0x9C, 0x83, 0x95, 0x58, 0x55, 0x6D, 0x35, 0xED, 0x4F, 0xC8, 0x3B, 0x4A, 0xB1, 0x81, 0x81, 0xF4, 0x0F, 0x73, 0xDC, 0xD7, 0x68, 0x60, 0xD8, 0xD8, 0xBF, 0x94, 0x52, ++ 0x02, 0x37, 0xC2, 0xAC, 0x0E, 0x46, 0x3B, 0xA0, 0x9E, 0x3C, 0x97, 0x82, 0x38, 0x0D, 0xC0, 0x7F, 0xE4, 0xFC, 0xBA, 0x34, 0x0C, 0xC2, 0x00, 0x34, 0x39, 0xFD, 0x23, 0x14, 0x61, 0x06, 0x38, 0x07, ++ 0x0D, 0x6C, 0x9E, 0xEA, 0x0A, 0x70, 0xBA, 0xE8, 0x3B, 0x5D, 0x5D, 0x3C, 0x5D, 0x3F, 0xDE, 0x26, 0xDD, 0x01, 0x60, 0x6C, 0x8C, 0x52, 0x01, 0x58, 0xE7, 0xE5, 0x10, 0x40, 0x20, 0xF2, 0x48, 0xCE, ++ 0xAA, 0x66, 0x64, 0x57, 0xC1, 0x0A, 0xEB, 0xF0, 0x68, 0xF8, 0xA3, 0xBD, 0x5C, 0xE7, 0xB5, 0x2C, 0x6A, 0xF0, 0xAB, 0xD5, 0x94, 0x4A, 0xF1, 0xAD, 0x47, 0x52, 0xC9, 0x11, 0x39, 0x76, 0x08, 0x3C, ++ 0x03, 0xB6, 0xC3, 0x4E, 0x1D, 0x47, 0xED, 0x69, 0x64, 0x4C, 0xAD, 0x78, 0x2C, 0x2F, 0x7D, 0x05, 0xF8, 0xA1, 0x48, 0x96, 0x1D, 0x96, 0x5F, 0xA2, 0xE1, 0x72, 0x3A, 0x8D, 0xDE, 0xBC, 0x22, 0xA9, ++ 0x0C, 0xD7, 0x83, 0xDD, 0x1F, 0x4D, 0xB3, 0x8F, 0xB9, 0xAE, 0x5A, 0x67, 0x14, 0xB3, 0xD9, 0x46, 0x78, 0x16, 0x43, 0xD3, 0x17, 0xB7, 0xDD, 0x79, 0x38, 0x1C, 0xF7, 0x89, 0xA9, 0x58, 0x8B, 0xB3, ++ 0xE1, 0x93, 0xB9, 0x2A, 0x0B, 0x60, 0xD6, 0xB0, 0x7D, 0x04, 0x7F, 0x69, 0x84, 0xB0, 0x60, 0x9E, 0xC5, 0x75, 0x43, 0xC3, 0x94, 0xCA, 0x8D, 0x5E, 0x5B, 0xCC, 0x2A, 0x73, 0x1A, 0x79, 0x61, 0x8B, ++ 0xD1, 0xE2, 0xE0, 0xDA, 0x87, 0x04, 0xAF, 0x98, 0xF2, 0x0F, 0x5F, 0x8F, 0x54, 0x52, 0xDD, 0xF6, 0x46, 0xB9, 0x5B, 0x34, 0x1D, 0xD7, 0xF0, 0xD2, 0xCC, 0x1F, 0xA1, 0x5B, 0xD9, 0x89, 0x5C, 0xD5, ++ 0xB6, 0x5A, 0xA1, 0xCB, 0x94, 0xB5, 0xE2, 0xE7, 0x88, 0xFD, 0xA9, 0x82, 0x5B, 0x65, 0x66, 0x39, 0x19, 0x3D, 0x98, 0x32, 0x81, 0x54, 0xA4, 0xF2, 0xC3, 0x54, 0x95, 0xA3, 0x8B, 0x6E, 0xA0, 0xD2, ++ 0xFF, 0xAA, 0xA3, 0x5D, 0xF9, 0x2C, 0x20, 0x3C, 0x7F, 0x31, 0xCB, 0xBC, 0xA7, 0xBD, 0x03, 0xC3, 0xC2, 0x30, 0x21, 0x90, 0xCE, 0xCD, 0x16, 0x1F, 0xD4, 0x92, 0x37, 0xE4, 0xF8, 0x39, 0xE3, 0xF3, ++ }, ++ .pkcs8_len = 0, ++ .spki_len = 0, ++ .msg_len = 33, ++ .msg = { 0xD8, 0x1C, 0x4D, 0x8D, 0x73, 0x4F, 0xCB, 0xFB, 0xEA, 0xDE, 0x3D, 0x3F, 0x8A, 0x03, 0x9F, 0xAA, 0x2A, 0x2C, 0x99, 0x57, 0xE8, 0x35, 0xAD, 0x55, 0xB2, 0x2E, 0x75, 0xBF, 0x57, 0xBB, 0x55, 0x6A, ++ 0xC8 }, ++ .sig_len = 2420, ++ .sig = { ++ 0xAF, 0x59, 0x20, 0x77, 0x46, 0x03, 0xD2, 0x0E, 0x98, 0xA7, 0x9A, 0xA3, 0xAB, 0xFA, 0x32, 0xB6, 0xE2, 0x25, 0x19, 0xE6, 0x73, 0xE3, 0x7A, 0xC4, 0xAC, 0x73, 0xFE, 0x85, 0x34, 0x1E, 0x2C, 0x29, ++ 0x23, 0xC1, 0x99, 0x2E, 0x1B, 0x0B, 0xBE, 0x38, 0x73, 0xD7, 0xC8, 0xFC, 0x56, 0x62, 0xF2, 0x07, 0xBF, 0x58, 0xEA, 0x38, 0x1C, 0xD4, 0xA3, 0xA0, 0xC0, 0x62, 0xDE, 0xC4, 0x5B, 0xDA, 0xF8, 0xBA, ++ 0x0A, 0xA5, 0x2B, 0xEF, 0x6F, 0xA1, 0x4F, 0x3F, 0x6C, 0xF2, 0x8F, 0x76, 0x20, 0xBF, 0x94, 0xA9, 0x2C, 0xC2, 0x7D, 0x04, 0x54, 0x14, 0xA6, 0x4D, 0x65, 0xC0, 0x14, 0x96, 0x30, 0x52, 0x80, 0x24, ++ 0x28, 0xBF, 0x39, 0x87, 0xA2, 0xD4, 0x75, 0x16, 0xCA, 0x5C, 0x78, 0xAA, 0xB9, 0x6B, 0x7B, 0xE1, 0x1B, 0xCA, 0x5F, 0x2C, 0x5A, 0x26, 0xF3, 0xFC, 0xE3, 0xA2, 0x6E, 0x8E, 0x09, 0xA2, 0x73, 0x8F, ++ 0x38, 0x6F, 0x75, 0xD4, 0x48, 0xF9, 0x37, 0xEF, 0x19, 0xA8, 0x46, 0xBD, 0x4D, 0xD9, 0x49, 0xCA, 0xAF, 0x36, 0xDB, 0x56, 0x29, 0x88, 0x4A, 0xF5, 0x3A, 0x02, 0x3E, 0x3F, 0x18, 0x0F, 0xE4, 0xC0, ++ 0xFA, 0xFF, 0x7B, 0xE5, 0xDF, 0xE4, 0xE8, 0x9A, 0xDE, 0x30, 0x95, 0xA6, 0x56, 0x00, 0x42, 0x14, 0x61, 0xAD, 0x08, 0xC1, 0x29, 0xD6, 0xCE, 0xA8, 0x51, 0xBB, 0x39, 0xC0, 0xD7, 0xA7, 0xD1, 0x51, ++ 0x40, 0x56, 0x89, 0xA0, 0x91, 0xFA, 0x4D, 0xEB, 0xAC, 0x37, 0x3C, 0xF5, 0x4A, 0xE0, 0x78, 0xF0, 0xAF, 0x75, 0x57, 0xBB, 0xC6, 0xF0, 0x6A, 0x53, 0x5A, 0xE8, 0x94, 0x9E, 0x0C, 0x65, 0x30, 0x8A, ++ 0x59, 0x84, 0x00, 0x72, 0x37, 0x52, 0x95, 0x80, 0x2D, 0x0E, 0x2C, 0xE9, 0xA3, 0xDA, 0x98, 0x42, 0x6A, 0x00, 0xFF, 0x03, 0xFE, 0x80, 0x21, 0x8C, 0x0E, 0xEC, 0x8E, 0xFE, 0x58, 0x1C, 0xB9, 0xCC, ++ 0x9A, 0x7D, 0x66, 0xB2, 0x06, 0x45, 0xA8, 0xCD, 0x04, 0x90, 0xD3, 0xCE, 0x4F, 0x7E, 0x6F, 0xEA, 0xE9, 0xC9, 0xEB, 0x7A, 0x57, 0xF9, 0x64, 0xD0, 0xEB, 0xC7, 0xC9, 0x0B, 0x7A, 0x9F, 0x86, 0x30, ++ 0x0B, 0x3E, 0x80, 0x95, 0xE6, 0x4D, 0x12, 0x94, 0xCF, 0xC4, 0xB4, 0xD9, 0xE2, 0x72, 0xE8, 0xFA, 0x8D, 0xB5, 0x70, 0x7D, 0x70, 0x04, 0xAF, 0x22, 0xDB, 0xFF, 0x9C, 0xFD, 0x48, 0x63, 0xDF, 0x57, ++ 0x3F, 0xE0, 0x04, 0x34, 0x1D, 0xA3, 0xCD, 0x4A, 0x30, 0x82, 0x53, 0x2C, 0x26, 0x20, 0x45, 0x5F, 0xA3, 0x7C, 0x56, 0x2B, 0xAF, 0xD5, 0x68, 0x4E, 0xA1, 0x28, 0xAF, 0xC7, 0x9E, 0x01, 0xFC, 0x9B, ++ 0x31, 0xE8, 0x43, 0x3B, 0xAD, 0x7C, 0x02, 0x9F, 0x2F, 0x13, 0xCC, 0x10, 0x59, 0x2D, 0x23, 0x32, 0xE3, 0xE0, 0x8B, 0x80, 0xD3, 0x50, 0x46, 0x3D, 0xE7, 0x27, 0x50, 0xB1, 0xF8, 0x06, 0xF4, 0x93, ++ 0xE1, 0x43, 0xBD, 0x5F, 0xCA, 0x7D, 0x16, 0x98, 0x08, 0x1B, 0x31, 0xBF, 0x87, 0x6B, 0x2A, 0x1B, 0xC9, 0xDF, 0x50, 0x95, 0x2D, 0x13, 0xB6, 0xC1, 0x32, 0x1B, 0x11, 0x11, 0x17, 0x21, 0x45, 0xA6, ++ 0x27, 0xAE, 0x0B, 0x44, 0x27, 0xB9, 0x89, 0x75, 0xCB, 0xFF, 0xF7, 0xD6, 0x82, 0x75, 0x75, 0x4B, 0x45, 0xB6, 0x82, 0xD7, 0x09, 0xE1, 0x68, 0x52, 0x2E, 0x84, 0xFE, 0xA7, 0xDD, 0x3B, 0xB0, 0xF4, ++ 0x15, 0x05, 0xFF, 0x71, 0x92, 0x64, 0x31, 0xD1, 0xA9, 0x0D, 0x4C, 0xBF, 0x9A, 0x52, 0x7A, 0xD4, 0xE2, 0x84, 0x97, 0x6F, 0xFF, 0x8B, 0xD9, 0xD6, 0x22, 0x4A, 0x4F, 0x26, 0x03, 0x91, 0xA9, 0x87, ++ 0xFB, 0x6D, 0xA6, 0xEE, 0x42, 0xC2, 0xA4, 0x90, 0x0F, 0x40, 0x7C, 0xE1, 0xF0, 0x2E, 0x32, 0x24, 0x75, 0xD3, 0x13, 0xFB, 0xEB, 0xB6, 0x8C, 0x2E, 0x05, 0x73, 0x08, 0x09, 0x44, 0x8A, 0x74, 0x28, ++ 0xA5, 0x94, 0x01, 0x39, 0xEB, 0xDF, 0x1B, 0x55, 0x56, 0xFC, 0xC5, 0xD4, 0x2E, 0x1A, 0x13, 0xF3, 0x22, 0x30, 0xCB, 0x6F, 0x07, 0x24, 0x83, 0x1D, 0x0D, 0x07, 0x1B, 0xBA, 0x5A, 0x67, 0x04, 0x80, ++ 0x6F, 0x47, 0x5B, 0x74, 0xBA, 0x91, 0xB6, 0xE3, 0x85, 0xD4, 0x86, 0x20, 0x95, 0x8D, 0x0A, 0xB1, 0xBF, 0x2B, 0x18, 0x4E, 0x10, 0xF3, 0xE7, 0x53, 0xB7, 0x13, 0x37, 0xBE, 0x9E, 0xB6, 0x53, 0x78, ++ 0x67, 0x85, 0xB4, 0x3A, 0xC7, 0xE5, 0xC4, 0x94, 0xAC, 0x1B, 0xCB, 0x04, 0x3D, 0x46, 0x14, 0x25, 0xB3, 0x60, 0x98, 0xAC, 0x93, 0x05, 0x5A, 0x01, 0x05, 0xAB, 0x85, 0x23, 0xB6, 0x1D, 0x02, 0x4A, ++ 0x6E, 0x9B, 0x56, 0xA4, 0x2D, 0x3C, 0x04, 0x72, 0x65, 0x12, 0xAE, 0x4C, 0xFE, 0x05, 0x71, 0x04, 0x46, 0xB0, 0x6F, 0x69, 0x42, 0x34, 0xEE, 0x4F, 0xA8, 0xFE, 0xED, 0xDD, 0xC5, 0xF2, 0x8A, 0x65, ++ 0xED, 0xE2, 0xEB, 0x58, 0xE9, 0x65, 0xFE, 0x36, 0x27, 0xA5, 0x71, 0xBC, 0x45, 0xB3, 0x97, 0xED, 0x09, 0x2A, 0xB4, 0xBE, 0x00, 0x04, 0x17, 0x29, 0xC4, 0xD1, 0x92, 0xFE, 0x30, 0x67, 0x82, 0x79, ++ 0xD2, 0x23, 0xA8, 0x48, 0xCF, 0x43, 0x66, 0xE9, 0x2B, 0x3F, 0x68, 0xDE, 0xE9, 0x7C, 0x9B, 0x4A, 0x7F, 0xF2, 0x2F, 0x93, 0x7B, 0xE6, 0xC5, 0x66, 0x39, 0x96, 0x1D, 0xB2, 0x9F, 0xA3, 0xCF, 0xEC, ++ 0xFF, 0xF2, 0x93, 0x14, 0x08, 0x86, 0xFF, 0xB9, 0x2E, 0xBC, 0x79, 0xDA, 0xB5, 0x9C, 0xEA, 0xF8, 0x69, 0xC6, 0x4F, 0x8E, 0xAF, 0x58, 0x5C, 0xE9, 0x7D, 0xD6, 0xB7, 0x8F, 0x89, 0x27, 0x72, 0xDB, ++ 0x88, 0xA9, 0x58, 0xCF, 0x0A, 0xB5, 0x57, 0xA7, 0xFA, 0xA8, 0x3F, 0xE6, 0x21, 0x47, 0x7E, 0x2B, 0x84, 0x49, 0x7A, 0xB5, 0xA8, 0xEC, 0xF4, 0xA7, 0xBD, 0x32, 0xDF, 0xB9, 0x02, 0xF0, 0x5D, 0x2C, ++ 0xA3, 0x10, 0x47, 0xD0, 0xF1, 0x91, 0x9A, 0xDD, 0xE1, 0xEE, 0x6D, 0xFD, 0x58, 0xE5, 0x9B, 0xC4, 0xDA, 0xB3, 0xCC, 0xBB, 0xA3, 0x6A, 0xAA, 0xF6, 0xAF, 0xCC, 0xC7, 0xB0, 0x95, 0xCA, 0x94, 0xA1, ++ 0x95, 0xBE, 0x9A, 0x28, 0x95, 0x26, 0xB5, 0x88, 0xC3, 0xA9, 0xC5, 0x68, 0x76, 0xFC, 0x41, 0x5D, 0x52, 0x1D, 0x44, 0x2B, 0xAC, 0x02, 0x98, 0xD3, 0x02, 0x41, 0x9A, 0xD5, 0x27, 0xDA, 0x24, 0x9C, ++ 0x2A, 0x66, 0x0C, 0xD0, 0x64, 0x21, 0x3F, 0xFA, 0xD5, 0x63, 0x18, 0x3F, 0x37, 0x97, 0x25, 0x78, 0xEE, 0xB9, 0xF7, 0x0A, 0xC6, 0x7A, 0xEE, 0x6C, 0xC2, 0xB7, 0x1F, 0x28, 0x3A, 0x95, 0x93, 0x0B, ++ 0x55, 0x47, 0x38, 0x55, 0x57, 0x91, 0xC2, 0x5E, 0x7A, 0x39, 0x9E, 0x68, 0x56, 0x36, 0xD5, 0x8D, 0x69, 0xCB, 0x6B, 0xE7, 0x93, 0xB4, 0x5C, 0x19, 0x69, 0xE7, 0xD5, 0x61, 0x56, 0x27, 0xEB, 0xC3, ++ 0x2E, 0xED, 0x45, 0x44, 0x0F, 0x87, 0x88, 0x0D, 0x28, 0x29, 0xFA, 0x4F, 0xC8, 0x71, 0x86, 0x61, 0x64, 0xD2, 0x59, 0xED, 0x95, 0xD2, 0x73, 0x18, 0x71, 0x01, 0x7F, 0xF5, 0x18, 0x94, 0x06, 0x6F, ++ 0xAE, 0x1F, 0xFA, 0x6F, 0x4B, 0x4A, 0x6F, 0x84, 0xFC, 0xFF, 0xDA, 0x09, 0xE7, 0x18, 0xFA, 0x17, 0x13, 0x5E, 0xDB, 0x3F, 0x48, 0x55, 0x8D, 0x5B, 0xA6, 0x7F, 0x9E, 0x6F, 0x09, 0x00, 0x34, 0x0B, ++ 0xD0, 0x4D, 0xFE, 0x59, 0xB7, 0xBD, 0x67, 0x74, 0x58, 0x84, 0xFB, 0x84, 0xAE, 0x3F, 0x8E, 0xE7, 0x63, 0xD2, 0x02, 0x74, 0x36, 0x52, 0xD4, 0xF7, 0x33, 0x34, 0x50, 0x58, 0x04, 0x90, 0xB9, 0xC7, ++ 0x44, 0x93, 0x5B, 0x19, 0xC1, 0xD5, 0xFB, 0x0D, 0xB5, 0xFB, 0xB4, 0x61, 0x41, 0x13, 0x62, 0x83, 0x80, 0x37, 0xEB, 0x7E, 0xC3, 0xF6, 0x3F, 0x26, 0xC8, 0x93, 0xE7, 0xCC, 0x1C, 0x3B, 0x3F, 0x47, ++ 0x67, 0xAB, 0xAE, 0x00, 0xFE, 0xB7, 0xBB, 0x99, 0xB1, 0x42, 0x0B, 0xB2, 0x9E, 0xA6, 0x14, 0x74, 0x78, 0x96, 0xD9, 0xED, 0xCF, 0x81, 0x07, 0xFE, 0x50, 0x4C, 0x9C, 0x30, 0x8A, 0x82, 0x64, 0xDA, ++ 0xCE, 0x31, 0x8D, 0x87, 0xCF, 0xE4, 0x76, 0x18, 0x03, 0xE9, 0xA6, 0x0D, 0xEF, 0xA6, 0x14, 0x4A, 0xAB, 0xC1, 0xF1, 0x0A, 0x45, 0xB1, 0x40, 0xDE, 0xD7, 0x54, 0xE7, 0x35, 0x86, 0xC4, 0x67, 0xBB, ++ 0x7B, 0xF1, 0x9E, 0xDE, 0xF2, 0x5B, 0xE0, 0xC6, 0x5E, 0x93, 0xC5, 0xE5, 0xEB, 0x8F, 0x88, 0x0C, 0xCE, 0x4A, 0x85, 0x87, 0x57, 0xF8, 0xFF, 0x56, 0x06, 0x2B, 0x10, 0x67, 0xF4, 0x10, 0x6F, 0x76, ++ 0xB7, 0x00, 0x7F, 0x6E, 0xA6, 0xF9, 0x45, 0x04, 0x7E, 0x85, 0xBD, 0x0F, 0xAD, 0x9D, 0x26, 0x99, 0x4F, 0x67, 0x8A, 0x06, 0x12, 0xB8, 0x7C, 0xCF, 0x9C, 0x0C, 0xF9, 0xA4, 0x33, 0xD8, 0x89, 0xC9, ++ 0x6E, 0x4C, 0x12, 0xBE, 0x37, 0x22, 0x77, 0x00, 0x5B, 0x06, 0xAD, 0x12, 0x71, 0x05, 0xD1, 0x6D, 0x8F, 0xB1, 0x42, 0xAE, 0xAE, 0x53, 0x73, 0xAB, 0xD6, 0x1D, 0x9A, 0xDC, 0xFC, 0x55, 0x50, 0xD6, ++ 0x23, 0xCA, 0x3B, 0x88, 0x24, 0xB0, 0xE2, 0xE0, 0x8C, 0x2B, 0xF4, 0xE2, 0x84, 0x1E, 0xAC, 0x4C, 0x5D, 0xC5, 0x6C, 0xF8, 0x95, 0x4C, 0xF2, 0x07, 0xC2, 0x63, 0xF2, 0x7C, 0x9F, 0x30, 0x9F, 0x10, ++ 0x30, 0x7C, 0x0D, 0x84, 0xA6, 0x58, 0x78, 0x42, 0x50, 0x31, 0x37, 0x5D, 0xD8, 0x10, 0xD2, 0xD7, 0xE5, 0x10, 0x98, 0xA3, 0x81, 0x43, 0x50, 0x79, 0x5C, 0x4A, 0x07, 0x7F, 0xA4, 0x0D, 0xD4, 0x4F, ++ 0x0F, 0xA7, 0x51, 0x0F, 0x7C, 0x3F, 0x63, 0x14, 0x07, 0xCF, 0x34, 0xF6, 0x04, 0xC7, 0xB3, 0x35, 0x63, 0x2A, 0x20, 0xD2, 0xAD, 0x41, 0x9B, 0xD7, 0xCC, 0x6D, 0x42, 0x42, 0xB1, 0xC6, 0x6C, 0x35, ++ 0xE5, 0xA5, 0xED, 0xCC, 0xB1, 0x3C, 0xA3, 0x7D, 0x3B, 0x50, 0x46, 0x5F, 0x3B, 0x4A, 0xAF, 0xF7, 0xE3, 0x16, 0x1E, 0x79, 0x36, 0x08, 0x8A, 0xE0, 0x84, 0x01, 0xFD, 0x2C, 0x37, 0xD6, 0x7A, 0x2F, ++ 0xF9, 0x1D, 0x3E, 0x6F, 0x08, 0x68, 0x6D, 0x64, 0xBC, 0x2F, 0xC6, 0xC5, 0x71, 0x06, 0xE4, 0x9F, 0xA3, 0x84, 0xAC, 0x22, 0x21, 0x9F, 0x07, 0xEE, 0x89, 0x96, 0xCA, 0x3D, 0xFF, 0x59, 0xDC, 0xC5, ++ 0x09, 0x2A, 0x4B, 0xAD, 0xBE, 0x87, 0xAE, 0xDE, 0x7F, 0x69, 0xA0, 0x4C, 0x79, 0xB3, 0x3B, 0xDF, 0x35, 0xD4, 0xA0, 0xE4, 0xCB, 0x4B, 0x55, 0x01, 0x9C, 0xB0, 0xBF, 0x27, 0x52, 0x95, 0xB9, 0x3B, ++ 0xDA, 0xBE, 0xA5, 0x16, 0xCA, 0x2B, 0x61, 0x6A, 0x56, 0x91, 0x86, 0x00, 0xB7, 0x24, 0xBE, 0x7A, 0x01, 0xEC, 0x4E, 0xF5, 0x43, 0x12, 0xB3, 0x0D, 0x66, 0xF5, 0x07, 0x81, 0x5F, 0x27, 0x80, 0xFF, ++ 0xEE, 0x7C, 0x30, 0xF8, 0x42, 0x5A, 0x92, 0x25, 0x2C, 0xE5, 0x50, 0xFA, 0xB4, 0xE9, 0x02, 0xE7, 0xB3, 0x82, 0xD4, 0x6D, 0xBD, 0x20, 0xEF, 0xE1, 0xBB, 0x0E, 0xF8, 0xA4, 0x96, 0x87, 0x3C, 0x09, ++ 0xC4, 0xCE, 0xB0, 0x30, 0x3C, 0x7F, 0x1D, 0xAB, 0xA0, 0x10, 0x2D, 0xE9, 0x41, 0x90, 0xB6, 0xAC, 0x6D, 0xC8, 0x10, 0xF7, 0x2B, 0xCA, 0x3A, 0xA2, 0x92, 0xFF, 0x38, 0xBD, 0x51, 0xA7, 0xFA, 0xB8, ++ 0x50, 0x9E, 0xC4, 0xFB, 0xE0, 0xEA, 0xA3, 0xC9, 0x86, 0x16, 0x6A, 0x67, 0x4B, 0x78, 0x71, 0x15, 0x5C, 0x34, 0x8C, 0x47, 0x7E, 0xF8, 0xCE, 0xDC, 0x83, 0x2B, 0x5A, 0xBE, 0xE7, 0x1A, 0x8D, 0x18, ++ 0xD0, 0x6D, 0xD0, 0xF5, 0x22, 0x11, 0x60, 0xAB, 0xEB, 0x71, 0xE6, 0xE8, 0x2C, 0xFA, 0xBF, 0x73, 0x1E, 0xA3, 0x51, 0x5A, 0x76, 0xEF, 0x07, 0xB2, 0xC1, 0x6C, 0x63, 0xB3, 0x7F, 0x7A, 0xB7, 0x3B, ++ 0x67, 0xF0, 0x05, 0x92, 0x9A, 0x75, 0x3E, 0x45, 0x3B, 0x93, 0x0C, 0x0A, 0xF4, 0x32, 0x27, 0x7F, 0xD7, 0x7D, 0x8A, 0x1E, 0xB8, 0x02, 0x2C, 0xDE, 0x96, 0x65, 0x76, 0x3B, 0x01, 0x4F, 0x0A, 0x67, ++ 0x2A, 0x04, 0x16, 0x0B, 0x0A, 0x06, 0xF5, 0x54, 0x0F, 0x4C, 0x26, 0x4B, 0x7F, 0x22, 0x74, 0x06, 0x90, 0xA2, 0x35, 0x2D, 0xC8, 0x63, 0xB5, 0x88, 0x30, 0x3A, 0xD5, 0x1F, 0x0A, 0xE1, 0x62, 0xBF, ++ 0x79, 0x79, 0x7F, 0x07, 0xB5, 0x34, 0x50, 0x1C, 0xBB, 0xFD, 0xB7, 0x13, 0xA7, 0x24, 0xAA, 0x98, 0xE1, 0x95, 0x32, 0x18, 0x71, 0x80, 0xCC, 0xFA, 0xDC, 0x6E, 0xBE, 0x31, 0x42, 0xFA, 0x7D, 0xB6, ++ 0x6C, 0xD4, 0xDE, 0x7B, 0x9F, 0xBD, 0x4C, 0x82, 0x35, 0x68, 0x6D, 0xB6, 0x8C, 0xAF, 0x48, 0x9A, 0xFA, 0x4E, 0x1E, 0x87, 0xAE, 0xF0, 0xCE, 0xFD, 0x80, 0x37, 0xE3, 0xA5, 0x78, 0xEE, 0x62, 0xEB, ++ 0x7F, 0x94, 0xED, 0x5B, 0xC0, 0xB5, 0x8E, 0xEA, 0x4B, 0x4C, 0x45, 0xFC, 0x56, 0xD3, 0x1D, 0x29, 0x94, 0x4D, 0x09, 0x5A, 0xC9, 0x6C, 0x29, 0x08, 0x3D, 0xA2, 0xC7, 0x71, 0x81, 0xD9, 0x7A, 0x55, ++ 0xFE, 0x6E, 0x90, 0x3A, 0x2F, 0x27, 0x83, 0xDE, 0x0B, 0xAA, 0x5F, 0x47, 0xD7, 0x04, 0x78, 0x5C, 0x33, 0xE8, 0xD5, 0xC8, 0x7E, 0xD6, 0x1E, 0x65, 0x45, 0x91, 0x67, 0x31, 0x0E, 0xB7, 0xA9, 0x95, ++ 0x74, 0xEF, 0x81, 0x9A, 0xE9, 0x16, 0x1A, 0x3B, 0xD0, 0x96, 0x34, 0x80, 0x3D, 0x9E, 0x1E, 0x4E, 0xC7, 0x38, 0x6D, 0x79, 0x46, 0x98, 0x45, 0x17, 0x21, 0x3A, 0xB9, 0xCF, 0x66, 0xAE, 0xA5, 0x51, ++ 0xCC, 0x45, 0x7C, 0x39, 0xF8, 0x6A, 0xF2, 0x94, 0xCF, 0x7B, 0x07, 0x3F, 0x56, 0x3E, 0xD4, 0xDA, 0xB9, 0x41, 0x9B, 0xDF, 0x00, 0x4B, 0xD0, 0x5C, 0x92, 0xB4, 0xE8, 0x0E, 0xC3, 0xCF, 0xEA, 0xC9, ++ 0x7E, 0x1D, 0xDA, 0x55, 0x4F, 0xDA, 0x62, 0x5C, 0x4B, 0x9B, 0x03, 0x9B, 0xAA, 0x7C, 0x5A, 0x2F, 0x6F, 0x97, 0x05, 0x77, 0x92, 0x48, 0x3C, 0xF5, 0xF8, 0x52, 0xD4, 0xC3, 0xAC, 0x71, 0xAD, 0x50, ++ 0xF7, 0x79, 0x95, 0x3D, 0xCF, 0xE2, 0xF6, 0x3E, 0xD2, 0x35, 0xD8, 0xE1, 0xD5, 0x34, 0x5D, 0x6C, 0x6D, 0xF0, 0x55, 0x5C, 0xC2, 0x63, 0x1D, 0xEA, 0xD9, 0xB7, 0x14, 0xBC, 0x4C, 0x16, 0x50, 0x1E, ++ 0x01, 0x26, 0x13, 0x81, 0xF3, 0x67, 0x97, 0x15, 0x34, 0x51, 0x23, 0x38, 0x8C, 0x85, 0x2D, 0x57, 0xDC, 0xF1, 0x94, 0x1D, 0x09, 0x11, 0xD4, 0x9F, 0xEA, 0x71, 0x43, 0xFD, 0x2F, 0xC3, 0x43, 0xA5, ++ 0x07, 0x5B, 0x64, 0xCC, 0xA4, 0x82, 0x91, 0xDC, 0x28, 0xB8, 0x3F, 0x76, 0x07, 0x45, 0x89, 0xEA, 0xB2, 0x17, 0xC7, 0x84, 0x78, 0x40, 0x65, 0x2C, 0x0E, 0x3A, 0xE2, 0x78, 0xB3, 0xB6, 0xFB, 0x0D, ++ 0x80, 0x0C, 0x5E, 0x7D, 0xB7, 0x9D, 0x5C, 0xB9, 0xCC, 0x1A, 0x87, 0x45, 0x0C, 0x00, 0xB7, 0x67, 0x78, 0x12, 0xD2, 0x2E, 0xE2, 0x0F, 0xDE, 0x8C, 0x17, 0x53, 0xA7, 0xFB, 0x93, 0xBA, 0x8B, 0xBB, ++ 0x85, 0x95, 0xA6, 0x39, 0x3D, 0xF5, 0x4A, 0xA9, 0xCD, 0xB6, 0xE0, 0x87, 0x9A, 0x26, 0xE4, 0x9B, 0xD3, 0xB0, 0x15, 0x13, 0xC6, 0x05, 0x3A, 0x07, 0x46, 0xC8, 0x59, 0x6C, 0xE5, 0xE5, 0xB2, 0x25, ++ 0xCF, 0xCA, 0x26, 0xAB, 0x8B, 0xF1, 0x2F, 0x1F, 0xE0, 0xA6, 0x47, 0xA9, 0xE4, 0x45, 0x30, 0x39, 0xA1, 0x22, 0x61, 0x94, 0xC4, 0x6E, 0x8B, 0x98, 0xAC, 0xD7, 0x10, 0xF1, 0x8F, 0xB7, 0xEC, 0x05, ++ 0x47, 0x6C, 0x1C, 0xD8, 0xFC, 0x31, 0x12, 0xCC, 0xDD, 0xB1, 0x58, 0x2B, 0x88, 0x17, 0xC1, 0x8F, 0xE3, 0x15, 0x35, 0x3E, 0x7A, 0x47, 0xC8, 0x21, 0xE9, 0xEE, 0x3A, 0x43, 0xCA, 0xDE, 0x1B, 0x80, ++ 0xD9, 0x2A, 0x0A, 0xE8, 0xDC, 0xEB, 0x4D, 0xFF, 0x76, 0x6A, 0x54, 0xDF, 0x36, 0x65, 0xFE, 0xFE, 0x3C, 0x25, 0x2B, 0x72, 0xDA, 0xD7, 0xB1, 0xE3, 0x35, 0x9E, 0x7F, 0xA2, 0x55, 0x62, 0xC3, 0xE3, ++ 0x9D, 0xB5, 0x21, 0xCE, 0x18, 0x74, 0x11, 0x1F, 0xB0, 0x90, 0xDB, 0xD3, 0x8B, 0x31, 0x80, 0xAD, 0x03, 0x4B, 0x57, 0xB0, 0x31, 0xDC, 0x4D, 0xD6, 0xAF, 0x7C, 0x1A, 0x8A, 0xF3, 0xF6, 0xCE, 0x7E, ++ 0xDB, 0x1A, 0x9E, 0x4B, 0x6D, 0x4A, 0x59, 0x20, 0xE3, 0x62, 0x08, 0x18, 0x82, 0x06, 0x59, 0x76, 0x2E, 0xF7, 0xA4, 0x24, 0x3F, 0x51, 0xDF, 0x2D, 0x8A, 0x90, 0x07, 0x37, 0xD5, 0x81, 0x05, 0x69, ++ 0x9B, 0x4E, 0x10, 0xCB, 0xCB, 0x35, 0x9C, 0x7F, 0x3A, 0x40, 0x07, 0x69, 0x7C, 0x48, 0x20, 0x50, 0xEC, 0x33, 0xCF, 0x80, 0x41, 0x91, 0x6A, 0x3B, 0x91, 0x9A, 0x50, 0xD9, 0x6E, 0xF0, 0xF5, 0x89, ++ 0xFD, 0x45, 0x56, 0xF3, 0x0D, 0xBD, 0xD9, 0x42, 0xEA, 0xB7, 0x9D, 0xFA, 0x97, 0xC0, 0x7E, 0x30, 0x24, 0x70, 0x74, 0x35, 0x2E, 0x1B, 0xF9, 0x8E, 0x34, 0x9C, 0xC7, 0xEF, 0xA5, 0xA1, 0xB8, 0xFC, ++ 0xE4, 0xF1, 0x8F, 0x1F, 0xAF, 0x6F, 0x07, 0xC9, 0x9C, 0x32, 0x14, 0x48, 0xB0, 0x39, 0x5C, 0x8A, 0x9C, 0xBC, 0x46, 0x64, 0x12, 0xF8, 0x9C, 0x1A, 0x98, 0xBF, 0x57, 0x15, 0x84, 0x28, 0x44, 0xF0, ++ 0xE8, 0x23, 0x6F, 0xA4, 0x69, 0x6C, 0x46, 0x58, 0xB8, 0xFD, 0xE4, 0x42, 0x5D, 0x09, 0xD6, 0x7A, 0x38, 0xAC, 0x72, 0x58, 0xE5, 0xD5, 0x96, 0x6F, 0x2D, 0x3F, 0xF6, 0x6A, 0x0C, 0x0C, 0xE7, 0x6E, ++ 0x7F, 0x6B, 0x81, 0xA1, 0xBC, 0xD0, 0x47, 0xFD, 0x3A, 0x20, 0x5B, 0xF0, 0xCC, 0xAE, 0xA3, 0xB1, 0x10, 0x79, 0x90, 0x9C, 0x6C, 0xE5, 0x69, 0x8F, 0x32, 0xE1, 0xF3, 0x40, 0x96, 0x58, 0xFF, 0xA0, ++ 0x1E, 0xAE, 0xCB, 0x4A, 0xE2, 0xB0, 0x92, 0xB7, 0x89, 0x89, 0xDA, 0xAD, 0x66, 0x23, 0xBB, 0x11, 0xF4, 0x9F, 0x0F, 0x8F, 0x86, 0x99, 0xEC, 0x05, 0x66, 0x15, 0x02, 0xFF, 0xCA, 0xD0, 0x3C, 0xF4, ++ 0x15, 0x19, 0x1A, 0x22, 0x2D, 0x3C, 0x4C, 0x7B, 0x8A, 0xB0, 0xB5, 0xB9, 0xBB, 0xC2, 0xD9, 0xDC, 0xEF, 0xF7, 0x20, 0x2D, 0x3F, 0x42, 0x44, 0x49, 0x4F, 0x52, 0x53, 0x64, 0x66, 0x69, 0x74, 0xC4, ++ 0xD9, 0xE6, 0xF5, 0xFA, 0x00, 0x01, 0x04, 0x19, 0x27, 0x37, 0x3D, 0x5A, 0x76, 0x80, 0xB8, 0xC1, 0xC9, 0xFE, 0x20, 0x29, 0x38, 0x3B, 0x3C, 0x48, 0x4D, 0x56, 0x5F, 0x65, 0x79, 0x9D, 0x9E, 0xA6, ++ 0xA9, 0xAD, 0xD2, 0xDE, 0xE5, 0xE7, 0xF7, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x32, 0x48, ++ }, ++ }, ++ { ++ .name = "Dilithium Round 3, Level 3 (4-4) KAT 1", ++ .version = 0, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_44, ++ .rho_len = 32, ++ .rho = { ++ 0xB5, 0x41, 0xC1, 0xE9, 0x2C, 0xEA, 0xDD, 0x90, 0x4A, 0x09, 0xEC, 0x08, 0xAD, 0x30, 0x6D, 0x97, 0x47, 0x34, 0xA0, 0x77, 0x86, 0x84, 0x71, 0xE5, 0x8D, 0x07, 0x71, 0x87, 0xC4, 0x66, 0x04, 0xCF, ++ }, ++ .seed_len = 32, ++ .seed = { ++ 0x95, 0x2D, 0x21, 0x81, 0xAC, 0x1F, 0x62, 0x59, 0x6F, 0x76, 0x7E, 0xFC, 0xA0, 0xB5, 0x5D, 0xB0, 0x92, 0xEF, 0x81, 0xDB, 0x66, 0xF9, 0xFF, 0xF1, 0x5F, 0x13, 0xD7, 0xAE, 0xEA, 0xCD, 0x8B, 0x3A, ++ }, ++ .tr_len = 32, ++ .tr = { ++ 0x57, 0x96, 0xFB, 0xFE, 0x5B, 0x4E, 0x2E, 0xDE, 0xC5, 0xDB, 0xC9, 0x52, 0xF6, 0x0E, 0xB1, 0x22, 0x90, 0x18, 0x93, 0xCA, 0x25, 0x2D, 0xD7, 0x30, 0x41, 0x2A, 0xC4, 0xB6, 0xE0, 0x20, 0x09, 0x71, ++ }, ++ .s1_len = 384, ++ .s1 = { ++ 0x03, 0x40, 0x28, 0x8C, 0x88, 0x60, 0x21, 0xB1, 0x90, 0x0C, 0x12, 0x0D, 0x58, 0x18, 0x09, 0x23, 0x44, 0x86, 0x03, 0x02, 0x84, 0x89, 0xB2, 0x28, 0x0C, 0x97, 0x2C, 0x11, 0xC2, 0x09, 0x18, 0x32, ++ 0x08, 0x09, 0x10, 0x91, 0x14, 0x82, 0x8C, 0x13, 0x03, 0x05, 0x11, 0x01, 0x4C, 0x62, 0x18, 0x8A, 0xDB, 0x08, 0x8A, 0x93, 0x38, 0x12, 0x09, 0xA9, 0x20, 0xE4, 0xA8, 0x41, 0x1A, 0xA1, 0x40, 0xD1, ++ 0x42, 0x2E, 0x59, 0x92, 0x24, 0xD0, 0x26, 0x00, 0x19, 0x93, 0x84, 0xE2, 0x28, 0x92, 0x1B, 0x19, 0x50, 0xA3, 0x10, 0x8E, 0xA2, 0x28, 0x20, 0x93, 0x34, 0x70, 0x94, 0xC0, 0x4D, 0x24, 0x35, 0x41, ++ 0x14, 0x05, 0x62, 0xC2, 0x22, 0x31, 0x1A, 0x38, 0x4E, 0xCC, 0x42, 0x44, 0x13, 0x20, 0x82, 0x08, 0x18, 0x6D, 0xE0, 0x14, 0x0D, 0x01, 0x36, 0x61, 0x08, 0x22, 0x29, 0x14, 0xB5, 0x11, 0x49, 0x22, ++ 0x32, 0xE2, 0x42, 0x26, 0xE4, 0x04, 0x01, 0x5B, 0x48, 0x2A, 0x11, 0x02, 0x60, 0x63, 0x02, 0x48, 0x4A, 0x24, 0x2C, 0x62, 0x40, 0x90, 0x03, 0x41, 0x8D, 0x18, 0xC8, 0x30, 0x82, 0x02, 0x82, 0x51, ++ 0x98, 0x69, 0xA2, 0x24, 0x50, 0x0A, 0x39, 0x4D, 0x84, 0x00, 0x8E, 0x84, 0x08, 0x21, 0xD9, 0x30, 0x6C, 0xE3, 0x18, 0x29, 0x23, 0x45, 0x6E, 0xCA, 0x24, 0x66, 0x08, 0x21, 0x49, 0x14, 0x16, 0x52, ++ 0xDA, 0xA0, 0x0C, 0x22, 0x19, 0x62, 0xC1, 0xB8, 0x08, 0x8A, 0x88, 0x8C, 0x22, 0xB1, 0x0C, 0x23, 0xB8, 0x0D, 0x00, 0x93, 0x64, 0x93, 0x16, 0x82, 0x63, 0x32, 0x30, 0xDC, 0xA2, 0x41, 0xD1, 0x48, ++ 0x42, 0x82, 0xA2, 0x64, 0xD4, 0x24, 0x48, 0x94, 0x48, 0x25, 0x02, 0x82, 0x65, 0xD9, 0x08, 0x69, 0x12, 0x44, 0x21, 0x54, 0x24, 0x70, 0x04, 0x80, 0x84, 0xDA, 0x44, 0x25, 0xA0, 0x24, 0x8A, 0x13, ++ 0x35, 0x60, 0x84, 0xA0, 0x4C, 0x93, 0x90, 0x48, 0x13, 0x47, 0x02, 0x83, 0x20, 0x05, 0x64, 0xB4, 0x0C, 0x5C, 0x12, 0x72, 0x42, 0x14, 0x86, 0x60, 0x02, 0x12, 0x50, 0x44, 0x04, 0x0B, 0x82, 0x11, ++ 0x91, 0x18, 0x72, 0x48, 0x88, 0x10, 0xD0, 0x40, 0x4D, 0xCB, 0x98, 0x51, 0x49, 0xA4, 0x8D, 0x18, 0x25, 0x89, 0xD4, 0x32, 0x8E, 0x52, 0xA4, 0x10, 0x11, 0x40, 0x12, 0x88, 0x26, 0x88, 0x21, 0x17, ++ 0x6A, 0xA2, 0xB2, 0x41, 0xE4, 0x02, 0x89, 0xA1, 0xA0, 0x30, 0x94, 0xC8, 0x41, 0x1B, 0x83, 0x64, 0x12, 0x05, 0x0A, 0x1C, 0x43, 0x8C, 0x84, 0x06, 0x31, 0x0A, 0xA2, 0x6D, 0x24, 0x17, 0x31, 0xC3, ++ 0x98, 0x28, 0x42, 0x88, 0x25, 0x8C, 0x30, 0x52, 0xA0, 0x02, 0x0E, 0x98, 0x36, 0x88, 0x03, 0x81, 0x31, 0x64, 0x18, 0x6C, 0x09, 0x82, 0x69, 0x19, 0x41, 0x4C, 0xA0, 0x26, 0x11, 0x23, 0x35, 0x60, ++ }, ++ .s2_len = 384, ++ .s2 = { ++ 0x01, 0x04, 0x85, 0x64, 0x86, 0x30, 0xD9, 0x20, 0x84, 0xD9, 0x08, 0x2A, 0xDC, 0x32, 0x61, 0x1C, 0xC2, 0x80, 0x89, 0x82, 0x51, 0x14, 0x10, 0x40, 0x19, 0x05, 0x80, 0x58, 0x04, 0x06, 0x99, 0x08, ++ 0x84, 0x09, 0x27, 0x41, 0xCA, 0x20, 0x8A, 0x93, 0x00, 0x91, 0x03, 0xC6, 0x81, 0xC2, 0xC8, 0x09, 0xC3, 0x30, 0x4D, 0x23, 0x12, 0x0A, 0x9B, 0x42, 0x8D, 0x20, 0x23, 0x6A, 0x54, 0x30, 0x22, 0xCC, ++ 0xA4, 0x29, 0xA2, 0x18, 0x31, 0x40, 0x20, 0x6E, 0x92, 0x90, 0x48, 0x41, 0xB8, 0x45, 0x83, 0x38, 0x08, 0x5C, 0x46, 0x80, 0x59, 0x36, 0x45, 0xE3, 0xB0, 0x31, 0x18, 0x06, 0x6A, 0x53, 0x16, 0x6D, ++ 0x21, 0x99, 0x81, 0x00, 0x30, 0x4E, 0xC8, 0x26, 0x48, 0x18, 0xC0, 0x88, 0x19, 0x14, 0x92, 0xC1, 0x98, 0x45, 0x98, 0x08, 0x84, 0x9B, 0x10, 0x4D, 0x0C, 0x96, 0x90, 0x08, 0x91, 0x69, 0x0C, 0xB1, ++ 0x4D, 0x91, 0x28, 0x6E, 0xC9, 0x06, 0x8C, 0x58, 0x00, 0x0A, 0x0C, 0x96, 0x05, 0x8A, 0x46, 0x06, 0xD4, 0x98, 0x29, 0x83, 0x26, 0x50, 0xE1, 0x10, 0x61, 0xD0, 0x96, 0x50, 0x23, 0x12, 0x24, 0x52, ++ 0x20, 0x80, 0xE4, 0x04, 0x48, 0x0C, 0x23, 0x92, 0x0B, 0xB7, 0x0D, 0x0C, 0x82, 0x90, 0xD1, 0x10, 0x90, 0x21, 0x22, 0x11, 0x0A, 0x12, 0x64, 0x53, 0xB6, 0x71, 0x99, 0x28, 0x69, 0xC1, 0xC4, 0x4D, ++ 0x04, 0xA0, 0x8D, 0xCB, 0x96, 0x41, 0x58, 0x14, 0x06, 0x0C, 0x21, 0x70, 0x8B, 0x30, 0x25, 0x52, 0xA2, 0x25, 0x21, 0x19, 0x30, 0x00, 0xA3, 0x28, 0xD0, 0xB8, 0x09, 0xCC, 0x16, 0x12, 0xDC, 0x94, ++ 0x6D, 0x01, 0x20, 0x81, 0xDC, 0x42, 0x42, 0xE1, 0x28, 0x01, 0x0C, 0x87, 0x89, 0x02, 0x84, 0x09, 0x02, 0x17, 0x88, 0xD8, 0x34, 0x30, 0x1C, 0x33, 0x64, 0x44, 0xA0, 0x09, 0xA0, 0xA0, 0x0D, 0xE3, ++ 0x90, 0x4D, 0x01, 0x08, 0x65, 0xE2, 0x42, 0x69, 0xA2, 0xC0, 0x91, 0x99, 0x16, 0x62, 0x9B, 0x02, 0x60, 0x40, 0x88, 0x50, 0x40, 0x86, 0x71, 0xA4, 0xC4, 0x61, 0x62, 0x22, 0x20, 0x10, 0x12, 0x11, ++ 0x4B, 0x26, 0x22, 0x09, 0x07, 0x88, 0x1A, 0x26, 0x85, 0x58, 0x86, 0x80, 0xDA, 0xA0, 0x8C, 0x0B, 0x85, 0x68, 0x42, 0x22, 0x82, 0x88, 0x24, 0x61, 0x8C, 0x98, 0x8C, 0x23, 0x30, 0x25, 0x24, 0x40, ++ 0x45, 0x08, 0xC8, 0x6C, 0x23, 0x14, 0x28, 0x4A, 0x28, 0x10, 0x81, 0x20, 0x72, 0x88, 0x32, 0x26, 0x93, 0xA6, 0x6D, 0x5B, 0xB6, 0x29, 0xC1, 0x24, 0x0D, 0x49, 0x20, 0x70, 0x59, 0x48, 0x26, 0x20, ++ 0x26, 0x65, 0xCB, 0xA4, 0x88, 0x4A, 0xA6, 0x30, 0x08, 0x45, 0x8E, 0x00, 0x32, 0x88, 0x24, 0x33, 0x0D, 0xA1, 0x46, 0x72, 0x9B, 0x12, 0x00, 0x14, 0xB5, 0x21, 0xE3, 0x02, 0x09, 0x23, 0x42, 0x28, ++ }, ++ .t0_len = 1664, ++ .t0 = { ++ 0x2A, 0xD8, 0xD7, 0x4C, 0xE8, 0x1B, 0x82, 0x66, 0x32, 0x1C, 0x15, 0xEA, 0x97, 0x8C, 0xCC, 0x75, 0xCC, 0x04, 0x3E, 0x18, 0xFA, 0x5B, 0x8E, 0x92, 0x21, 0x9E, 0x47, 0x6F, 0x1F, 0x36, 0xA1, 0x92, ++ 0x43, 0x5C, 0x3F, 0x9B, 0x0A, 0xD4, 0xA6, 0x80, 0x32, 0x18, 0xAA, 0xA1, 0x48, 0x1E, 0x6D, 0x8A, 0x89, 0x48, 0xF1, 0xF6, 0xE0, 0x40, 0x54, 0xBC, 0x30, 0x7F, 0x5B, 0x19, 0xC4, 0x2E, 0x66, 0x90, ++ 0x2C, 0x8C, 0x44, 0xF2, 0xDC, 0xA9, 0xAC, 0x1B, 0xC0, 0x1E, 0x57, 0x6D, 0x59, 0xCA, 0xDC, 0x5C, 0x69, 0x09, 0x02, 0x35, 0xB0, 0x3D, 0x49, 0xA1, 0x09, 0xD9, 0x97, 0xD6, 0x25, 0x68, 0x26, 0xAE, ++ 0xCC, 0x7E, 0xD0, 0xC1, 0x7D, 0xB4, 0xEB, 0x50, 0xCB, 0x82, 0xE6, 0xF1, 0x79, 0xFC, 0x67, 0xAF, 0x16, 0x8F, 0xF5, 0x3E, 0xDA, 0x67, 0x44, 0xBB, 0xF0, 0x92, 0xCE, 0x8A, 0x1F, 0x01, 0xFE, 0xEA, ++ 0x71, 0xB4, 0xD1, 0xA9, 0xB2, 0x7D, 0x6E, 0x21, 0x68, 0x98, 0x38, 0xAB, 0x07, 0x69, 0xFF, 0xD7, 0x59, 0x3A, 0x2B, 0x06, 0x29, 0x72, 0xB3, 0x80, 0xD9, 0xB2, 0x9C, 0x98, 0x7D, 0xC7, 0x60, 0x39, ++ 0x10, 0xC1, 0x5F, 0x4B, 0xD1, 0x98, 0xCE, 0xB6, 0x57, 0xBD, 0x10, 0x3C, 0x2A, 0x43, 0xC7, 0x6D, 0x89, 0xB9, 0x77, 0x90, 0x1F, 0x4E, 0x0E, 0x9C, 0xD8, 0xAC, 0x60, 0x22, 0x8F, 0x96, 0x27, 0x86, ++ 0x49, 0x0A, 0x65, 0xFF, 0xE9, 0x10, 0x4B, 0x9A, 0x6C, 0x32, 0xCF, 0xDE, 0xA6, 0xD0, 0x77, 0x79, 0x17, 0x56, 0x5F, 0xF3, 0x25, 0xD1, 0x19, 0x37, 0x32, 0x32, 0xF9, 0x14, 0xCD, 0xD1, 0xBB, 0xBA, ++ 0xF9, 0x34, 0x45, 0x4D, 0x79, 0x5C, 0xE6, 0xDB, 0xE4, 0xD1, 0x5D, 0x67, 0x27, 0x31, 0xA7, 0x1A, 0x5B, 0xB8, 0x30, 0x43, 0xEB, 0x76, 0x8F, 0x8A, 0x91, 0x85, 0x0A, 0xF4, 0x7C, 0xF5, 0x33, 0xBF, ++ 0x95, 0xEA, 0x40, 0xDB, 0xDD, 0x4F, 0x37, 0xAC, 0x84, 0x93, 0x43, 0x86, 0x06, 0x1E, 0xD5, 0xB5, 0x41, 0xC5, 0x61, 0x6C, 0x68, 0xCA, 0x55, 0xE2, 0xE7, 0xB8, 0x7A, 0x16, 0x28, 0xFA, 0x55, 0x52, ++ 0xA0, 0x48, 0xC0, 0x93, 0x29, 0x6E, 0x22, 0xCE, 0x02, 0x88, 0xC7, 0x6E, 0x7A, 0x13, 0x03, 0xD4, 0xE7, 0x01, 0x23, 0xDD, 0xCF, 0xCF, 0x43, 0xA0, 0x15, 0xDE, 0xE8, 0x39, 0x95, 0x9E, 0x04, 0x4F, ++ 0x7C, 0xBF, 0x57, 0x84, 0xE4, 0x9F, 0x1E, 0xA3, 0x54, 0x00, 0x08, 0x60, 0xB9, 0x56, 0x1B, 0xC4, 0xED, 0xBD, 0xF9, 0x68, 0x20, 0x97, 0xEA, 0xFB, 0xEB, 0xE5, 0x21, 0x5C, 0x8B, 0x4E, 0x8B, 0x03, ++ 0xD1, 0x3A, 0x29, 0x76, 0x5E, 0xE3, 0xF0, 0x53, 0x3F, 0x79, 0x34, 0x28, 0xE2, 0x62, 0xF3, 0x38, 0x54, 0xA6, 0xFE, 0x00, 0x3C, 0x28, 0x4B, 0xDC, 0xB6, 0x6C, 0xD6, 0x8F, 0x98, 0xFB, 0xAA, 0x02, ++ 0x02, 0xCD, 0x1B, 0x85, 0x42, 0x32, 0x5A, 0x15, 0xAA, 0xA2, 0xD2, 0xE7, 0xF8, 0x38, 0xB6, 0x2D, 0x7C, 0x03, 0x64, 0x01, 0x6A, 0xFD, 0xC0, 0x6F, 0xA3, 0xFA, 0x85, 0xAE, 0x8F, 0x8B, 0x1B, 0xEA, ++ 0x4E, 0x62, 0xAA, 0xDF, 0x96, 0x61, 0x82, 0x56, 0x18, 0x5E, 0x6E, 0xF3, 0x1B, 0xF3, 0x0C, 0xAD, 0x1F, 0x72, 0x7F, 0x67, 0x98, 0x0D, 0x03, 0xF7, 0x52, 0xE1, 0x93, 0x64, 0xE5, 0x92, 0xA6, 0xF8, ++ 0xF9, 0x84, 0x95, 0x3E, 0x29, 0x31, 0xA1, 0xA2, 0xF6, 0xEA, 0x01, 0x11, 0xE5, 0x5B, 0xDA, 0x28, 0xA9, 0xFA, 0x6C, 0x05, 0xBB, 0x00, 0x0F, 0x6A, 0x32, 0x03, 0x93, 0x97, 0xA2, 0xA1, 0x97, 0x67, ++ 0x17, 0x26, 0x4B, 0x54, 0xF4, 0x76, 0xE7, 0x09, 0xF6, 0x5B, 0xBA, 0x59, 0x20, 0x33, 0x49, 0x93, 0x0B, 0x18, 0x69, 0x8F, 0x6F, 0xA8, 0x64, 0xE1, 0x47, 0x6B, 0xAD, 0xB4, 0x2E, 0x41, 0xC6, 0xD9, ++ 0xF6, 0xA7, 0xA6, 0x8B, 0x31, 0x6E, 0xA0, 0xC6, 0x2D, 0x3F, 0x01, 0x31, 0x93, 0x4E, 0xD8, 0xD2, 0x90, 0x22, 0xE6, 0x7D, 0x87, 0x12, 0x2C, 0x62, 0x48, 0x68, 0x86, 0x10, 0x7E, 0x8D, 0x45, 0x9D, ++ 0x68, 0x65, 0xE8, 0xA4, 0x3B, 0x3F, 0xCF, 0xFA, 0x27, 0xAE, 0xF2, 0x2C, 0x04, 0x8A, 0x31, 0x35, 0xEE, 0x8A, 0x85, 0x7E, 0x81, 0x3C, 0x24, 0x72, 0x5B, 0x43, 0xF4, 0x26, 0x57, 0xBE, 0xDE, 0xDD, ++ 0x37, 0x3E, 0xD8, 0x5E, 0x39, 0x07, 0x0C, 0x58, 0x5F, 0x1D, 0x78, 0xD7, 0xAD, 0xE4, 0xC4, 0x4A, 0x20, 0x82, 0x27, 0x0A, 0xA6, 0x32, 0x29, 0xA1, 0x64, 0xFC, 0x04, 0x6A, 0x34, 0x41, 0x90, 0x83, ++ 0x57, 0x4E, 0x66, 0xC2, 0xB4, 0x4B, 0x13, 0xDF, 0x71, 0x70, 0x4A, 0xE3, 0x89, 0x05, 0x18, 0x66, 0x61, 0x5B, 0xF1, 0xB2, 0x11, 0x97, 0x0E, 0x40, 0x33, 0x06, 0xBD, 0xF1, 0x51, 0x02, 0xB8, 0x31, ++ 0x44, 0x8B, 0x23, 0xAE, 0xB1, 0x9F, 0x48, 0x69, 0xE9, 0x37, 0x33, 0x3F, 0x67, 0x88, 0xE4, 0xC2, 0x94, 0x31, 0x27, 0xC6, 0x4E, 0x21, 0xCF, 0xC2, 0x99, 0xAD, 0xD8, 0x48, 0xFD, 0x4E, 0xE4, 0x0B, ++ 0x89, 0x1A, 0x8A, 0x5F, 0x51, 0xD1, 0x7A, 0x51, 0x0F, 0x57, 0xA5, 0x4C, 0xD3, 0xD8, 0x3E, 0x86, 0xD0, 0x7B, 0x50, 0x4E, 0xDF, 0x33, 0xE0, 0xDE, 0xED, 0xAC, 0xF7, 0x66, 0xE9, 0x6F, 0x87, 0x05, ++ 0x39, 0x3F, 0xDA, 0xCF, 0xB8, 0x31, 0xBD, 0x42, 0x52, 0xA1, 0x52, 0xF1, 0x49, 0x8D, 0xE3, 0x59, 0xA8, 0xA6, 0x3B, 0x71, 0x61, 0x4E, 0x9A, 0xB3, 0x73, 0x52, 0x61, 0xC8, 0xA6, 0xA9, 0xB3, 0x5E, ++ 0x13, 0x6A, 0x66, 0x04, 0x97, 0x52, 0x02, 0x95, 0x0E, 0x97, 0xFF, 0x52, 0xC7, 0x58, 0xC1, 0x9E, 0x5A, 0x3B, 0x7A, 0xAB, 0x9C, 0xCA, 0xC7, 0x95, 0xDA, 0xE7, 0x19, 0x9D, 0xC0, 0x39, 0xD6, 0x56, ++ 0x67, 0xDB, 0xC6, 0xFD, 0x54, 0xA4, 0xF7, 0x84, 0xFB, 0xD7, 0x24, 0xF1, 0x0D, 0x17, 0x93, 0x4B, 0x81, 0x29, 0xA7, 0xFB, 0xF9, 0xA2, 0x57, 0x73, 0x53, 0xF4, 0x9F, 0xE5, 0x34, 0x7C, 0x66, 0x99, ++ 0x05, 0x23, 0xAD, 0x4F, 0x42, 0x95, 0x35, 0x2F, 0xAE, 0x6C, 0x08, 0x55, 0xE5, 0x40, 0xBB, 0x0E, 0xA6, 0x16, 0xE3, 0x04, 0xEB, 0x26, 0x0C, 0x80, 0xB8, 0x79, 0x20, 0xB9, 0x24, 0xF5, 0xAB, 0x8C, ++ 0x9C, 0x74, 0x5D, 0x45, 0xEE, 0x0E, 0xC0, 0xD1, 0x9B, 0xBB, 0x9E, 0x4D, 0x94, 0xEA, 0x4D, 0xCF, 0x31, 0xC1, 0x67, 0xA4, 0x8D, 0x14, 0xA7, 0x0D, 0xB0, 0x24, 0x9B, 0xCB, 0xAE, 0x69, 0xA0, 0x79, ++ 0xC9, 0x50, 0xAB, 0x2C, 0xF0, 0x53, 0x59, 0x5F, 0xBC, 0xB6, 0x1C, 0x1A, 0xFE, 0x13, 0xE7, 0x4C, 0xE1, 0xA9, 0x73, 0xCA, 0x55, 0xC7, 0x49, 0x77, 0x21, 0xE3, 0xFA, 0xD9, 0xF5, 0x57, 0xD6, 0x71, ++ 0xB3, 0x0B, 0x6C, 0x49, 0xA6, 0x38, 0xA1, 0xEB, 0x2C, 0x4A, 0xC9, 0xBD, 0x6C, 0x68, 0xBF, 0xB5, 0x33, 0xD4, 0xDE, 0xDE, 0xAD, 0xC8, 0xEA, 0xB6, 0x48, 0xA1, 0x1A, 0x97, 0xAF, 0x9C, 0x76, 0x15, ++ 0xE4, 0x15, 0x7C, 0xD0, 0x74, 0x97, 0xE8, 0xBA, 0x6E, 0xBB, 0x8A, 0xA3, 0x4C, 0x89, 0xFF, 0x42, 0xF7, 0x66, 0x04, 0x38, 0x00, 0xBA, 0xC8, 0xD0, 0x7C, 0x94, 0x7B, 0xD0, 0x0D, 0xAF, 0xA4, 0x25, ++ 0x39, 0xBD, 0x78, 0x81, 0x31, 0x71, 0x7D, 0x1D, 0x1D, 0xE3, 0x54, 0xFD, 0xDF, 0x30, 0xDC, 0xCC, 0xFD, 0x62, 0x2F, 0x6C, 0xDD, 0xF0, 0x34, 0xC8, 0x9D, 0x19, 0xC0, 0x15, 0xF3, 0x7E, 0xC3, 0x26, ++ 0x25, 0x7F, 0xB6, 0x1C, 0xA6, 0x67, 0x73, 0x6D, 0x9C, 0x72, 0x39, 0xA8, 0x1F, 0x84, 0xEF, 0x76, 0x16, 0xA1, 0x45, 0x85, 0x6B, 0xB9, 0x79, 0x29, 0x04, 0xE8, 0xD5, 0x0E, 0x93, 0x8F, 0x2B, 0x87, ++ 0x62, 0x3D, 0x56, 0xE4, 0xFB, 0x91, 0xB5, 0x34, 0xF5, 0x7F, 0x3D, 0xB4, 0x44, 0xC6, 0x83, 0x7B, 0x4C, 0xDC, 0xA3, 0xA6, 0x47, 0x97, 0xFD, 0xC5, 0x2E, 0xC6, 0x70, 0xD6, 0xA1, 0x7B, 0x3F, 0xA1, ++ 0x97, 0x93, 0x02, 0x66, 0xD0, 0x3B, 0x4C, 0x0B, 0xEE, 0xE6, 0xEE, 0x27, 0xC1, 0xC4, 0x86, 0xFD, 0x22, 0xC3, 0xB2, 0x0E, 0xE1, 0x81, 0xE4, 0x2C, 0x71, 0x34, 0x70, 0x32, 0x8C, 0x14, 0x36, 0x23, ++ 0xA2, 0x53, 0xAA, 0xE0, 0xB1, 0x45, 0x3D, 0xA0, 0x09, 0xD8, 0xD4, 0xF2, 0x15, 0xD2, 0xF5, 0x77, 0xDD, 0xC9, 0xF8, 0x2D, 0xCB, 0x66, 0x9C, 0x9D, 0x99, 0xF1, 0x74, 0x48, 0x6C, 0x8A, 0x4D, 0x08, ++ 0x04, 0xD3, 0x42, 0xE8, 0xD3, 0x64, 0xF3, 0xB7, 0x36, 0x89, 0x94, 0x96, 0x31, 0xB2, 0x99, 0xD8, 0x73, 0x50, 0x15, 0xDB, 0x99, 0x70, 0x42, 0x07, 0xF0, 0x91, 0x4E, 0x6F, 0xCB, 0xF9, 0x21, 0xA1, ++ 0x8D, 0xF0, 0xC8, 0x08, 0x40, 0x45, 0x09, 0x28, 0x39, 0xCC, 0x96, 0xEA, 0xA5, 0xD2, 0xF6, 0xB6, 0x60, 0x00, 0x61, 0x6B, 0x7D, 0x2D, 0xED, 0x28, 0x5F, 0xF9, 0xA9, 0x24, 0x06, 0x81, 0x4A, 0x57, ++ 0xC2, 0x64, 0x68, 0xCC, 0x1D, 0x6C, 0x69, 0x47, 0x97, 0x63, 0x7B, 0x5B, 0xA5, 0x36, 0x4F, 0xD4, 0x60, 0x68, 0xCF, 0xE5, 0xC8, 0x22, 0xD2, 0xBB, 0xBD, 0xB3, 0x57, 0xC7, 0x6A, 0x36, 0x39, 0xAB, ++ 0x99, 0x96, 0x85, 0xED, 0x6D, 0x6D, 0x3A, 0xFE, 0x6B, 0x48, 0xB8, 0x0C, 0x87, 0x01, 0x26, 0x60, 0xD9, 0x6F, 0x75, 0x1C, 0x11, 0x1C, 0x9F, 0x4A, 0x0D, 0x30, 0xA0, 0x60, 0xAF, 0x55, 0x43, 0x5D, ++ 0xB3, 0x38, 0x97, 0xE6, 0x09, 0x1E, 0x6E, 0x02, 0xD0, 0x85, 0x66, 0xF0, 0x90, 0xE6, 0xEE, 0xA4, 0x31, 0x04, 0x8D, 0x8D, 0xB9, 0xC9, 0xC4, 0x98, 0x5A, 0x2A, 0x81, 0x14, 0xC9, 0xFF, 0x35, 0xCA, ++ 0x39, 0x72, 0x33, 0x14, 0x98, 0x5D, 0x93, 0x96, 0x15, 0x4D, 0xE5, 0xC2, 0x95, 0xC9, 0xE6, 0x35, 0xB3, 0x1A, 0x4D, 0x23, 0x4B, 0x79, 0xE0, 0xE8, 0x04, 0xB3, 0xFE, 0x11, 0xCD, 0xD2, 0x99, 0xEE, ++ 0x77, 0xE7, 0x2E, 0x16, 0xD4, 0x26, 0x3B, 0xFC, 0x4C, 0xF8, 0x97, 0x21, 0xAB, 0x5E, 0x9B, 0xBC, 0x64, 0xFF, 0xA8, 0xDE, 0xC4, 0x52, 0x0D, 0xCB, 0x5E, 0x88, 0x81, 0xF3, 0x61, 0xCD, 0x18, 0xF2, ++ 0x13, 0x9C, 0x8C, 0xB4, 0x2A, 0x4D, 0x67, 0xFD, 0x7F, 0xA4, 0x27, 0x63, 0x56, 0xB4, 0xC3, 0x9B, 0xC2, 0x63, 0x23, 0x4E, 0xA6, 0xA9, 0xCA, 0xBC, 0xE7, 0x2D, 0x86, 0xF4, 0xEF, 0x36, 0x44, 0x82, ++ 0x05, 0x02, 0x3F, 0x62, 0xCC, 0x4D, 0xE6, 0x19, 0xF5, 0x57, 0x26, 0x87, 0x13, 0x89, 0xB3, 0x05, 0xEE, 0x54, 0x5E, 0x69, 0x29, 0xDF, 0x24, 0x2F, 0xDF, 0xA8, 0xF9, 0x9B, 0x3F, 0x9C, 0xBF, 0x86, ++ 0x21, 0x0A, 0xD1, 0x15, 0x4A, 0x64, 0xF2, 0x79, 0x99, 0x51, 0x52, 0xCC, 0x39, 0xB0, 0x17, 0xE4, 0x58, 0x95, 0xE7, 0xC0, 0xF8, 0xBC, 0xA0, 0xE1, 0xD9, 0xF2, 0x94, 0xE1, 0xE0, 0x63, 0xCF, 0xDC, ++ 0x9A, 0xE0, 0xC7, 0x37, 0x57, 0x90, 0x48, 0x2E, 0x5B, 0xB0, 0xFD, 0x67, 0xB7, 0xA1, 0xAC, 0xA1, 0x6A, 0xB1, 0xDD, 0xB3, 0xE3, 0x8B, 0xE9, 0x2C, 0x9D, 0x76, 0xA7, 0x99, 0xC7, 0x94, 0x7C, 0xB6, ++ 0xD7, 0x75, 0xBD, 0xFD, 0x85, 0x93, 0x50, 0xBF, 0x85, 0x89, 0x0A, 0x37, 0xD8, 0x8E, 0xA1, 0x60, 0x6A, 0xDE, 0x48, 0x03, 0xF0, 0x75, 0xEB, 0x1A, 0x13, 0x04, 0xF0, 0xF7, 0xBA, 0xDA, 0xFF, 0xF4, ++ 0x4D, 0xA2, 0xC7, 0xF9, 0x32, 0xB2, 0x5F, 0x2D, 0xAA, 0x9B, 0xCD, 0xCF, 0x0C, 0xB8, 0x42, 0x77, 0xAB, 0xC2, 0xCB, 0xF6, 0xA7, 0x1C, 0x1C, 0xED, 0xE8, 0x79, 0xAA, 0x0D, 0x0C, 0x56, 0xE0, 0xE0, ++ 0x40, 0x91, 0xBE, 0xD2, 0x3F, 0x22, 0x3D, 0x66, 0xF7, 0x3C, 0x77, 0x10, 0x49, 0x64, 0x44, 0xBE, 0x4E, 0x39, 0x5F, 0x46, 0xCA, 0xA8, 0x34, 0x79, 0x51, 0xB2, 0xB1, 0xF0, 0xD1, 0x87, 0x4F, 0x31, ++ 0x78, 0xE1, 0xE3, 0x20, 0xA9, 0x18, 0x17, 0xBD, 0xCE, 0x17, 0x8F, 0x64, 0x9D, 0x68, 0xB1, 0x4D, 0x55, 0x9F, 0x06, 0x74, 0x3F, 0xA7, 0xCC, 0x74, 0x35, 0x2E, 0xF2, 0x27, 0x50, 0x34, 0x34, 0x8D, ++ 0x75, 0x55, 0x6E, 0x49, 0xEA, 0xA2, 0xF9, 0xC7, 0xDA, 0xA9, 0xBC, 0x3F, 0x32, 0x8D, 0x2F, 0x4E, 0x65, 0x78, 0xA6, 0xE4, 0xC4, 0xA4, 0x73, 0x2F, 0xB0, 0x04, 0x25, 0x22, 0x9E, 0xEC, 0x97, 0xD1, ++ 0x40, 0xB7, 0xEC, 0x1E, 0x4A, 0x1C, 0xED, 0x27, 0xB7, 0x72, 0xD9, 0x99, 0x10, 0xFE, 0x1E, 0x28, 0xD2, 0x5B, 0xA9, 0x9F, 0xC2, 0x56, 0xF3, 0xAA, 0xD1, 0x9C, 0x1D, 0x55, 0x9A, 0x4B, 0xD8, 0xA4, ++ }, ++ .t1_len = 1280, ++ .t1 = { ++ 0x2D, 0xD6, 0x04, 0xD5, 0x36, 0x57, 0x11, 0xDA, 0xA1, 0xAF, 0xD0, 0x6E, 0x8E, 0xAF, 0x68, 0x7C, 0x39, 0x99, 0x62, 0x4D, 0x3C, 0x18, 0x10, 0x84, 0xA0, 0x72, 0x73, 0xB5, 0x5E, 0xF3, 0xA8, 0x4C, ++ 0x60, 0x98, 0x70, 0x3E, 0xCF, 0x97, 0xF7, 0xD4, 0x64, 0xC6, 0x52, 0x17, 0xAB, 0x2D, 0x5D, 0x34, 0x89, 0x35, 0x3C, 0x3E, 0x2B, 0x17, 0x27, 0x24, 0x55, 0xB0, 0x8A, 0x92, 0x18, 0x0B, 0xBC, 0x9E, ++ 0xCB, 0x88, 0x16, 0xC5, 0x4D, 0x98, 0x80, 0x01, 0x34, 0xB2, 0x38, 0xE0, 0x15, 0x84, 0xC1, 0x07, 0x7C, 0xAB, 0x47, 0x12, 0x83, 0x80, 0xD9, 0x26, 0x34, 0xCB, 0x29, 0x1E, 0x95, 0x8A, 0x62, 0xAC, ++ 0x22, 0xF0, 0x50, 0x1C, 0xFF, 0x04, 0x7A, 0xB9, 0x75, 0x6D, 0x58, 0xE2, 0xC4, 0x6C, 0xA1, 0xCB, 0xED, 0xC6, 0x11, 0x85, 0x72, 0x1F, 0xE0, 0x0D, 0xAF, 0xFC, 0x5E, 0xFD, 0xFD, 0x40, 0xE2, 0xD4, ++ 0x5F, 0x06, 0x8A, 0xD1, 0x8C, 0x42, 0xCD, 0xDC, 0x6C, 0x26, 0xF0, 0x42, 0xFB, 0xBA, 0xF8, 0xDE, 0x52, 0x4B, 0xF1, 0x0C, 0x5E, 0x56, 0xA6, 0x36, 0x9F, 0xCB, 0xF7, 0x41, 0x4B, 0xA8, 0x51, 0xD7, ++ 0x54, 0x6C, 0x0A, 0xDB, 0xA0, 0xDD, 0xDE, 0x66, 0xA9, 0x85, 0x2F, 0x05, 0xB8, 0x12, 0xFC, 0xCB, 0x66, 0xCA, 0x7A, 0x0E, 0xD2, 0xC5, 0xBD, 0x36, 0x55, 0xBF, 0xD8, 0xAA, 0x4B, 0xEF, 0xB8, 0x63, ++ 0xFC, 0xEE, 0xE2, 0xEB, 0x4F, 0x66, 0x81, 0xC7, 0x5A, 0x75, 0xD4, 0x2C, 0xA4, 0x60, 0x01, 0x6B, 0x98, 0xA7, 0x75, 0x11, 0x4C, 0xC8, 0x37, 0x6C, 0x74, 0x2B, 0xD7, 0x20, 0x2F, 0x81, 0xE3, 0x7E, ++ 0xAB, 0xA9, 0xE4, 0x37, 0x8B, 0x7B, 0xD3, 0xF0, 0xED, 0xBA, 0x40, 0xAA, 0xB7, 0x15, 0xD4, 0x5E, 0x66, 0x63, 0xC9, 0x9B, 0xE6, 0x34, 0x38, 0xB9, 0x58, 0x36, 0x8C, 0xB2, 0x3F, 0x42, 0xF5, 0x4E, ++ 0xBC, 0xDC, 0xDA, 0x4F, 0x85, 0x70, 0xCA, 0xFE, 0x2E, 0xA1, 0x72, 0x8C, 0x0B, 0x23, 0xD9, 0xBB, 0x22, 0xFA, 0xB6, 0x92, 0x2E, 0xA6, 0x69, 0x4D, 0x7F, 0xDF, 0xCA, 0x08, 0xC7, 0x7E, 0xD4, 0x88, ++ 0xAC, 0x5F, 0xEF, 0xDC, 0xA7, 0x88, 0x9E, 0xE4, 0xED, 0x5F, 0xDA, 0xA7, 0xA1, 0x26, 0xDC, 0xA6, 0xD5, 0xEF, 0x6C, 0x43, 0xBF, 0x35, 0xB6, 0x12, 0x2E, 0x6E, 0xF0, 0xE5, 0x81, 0xAC, 0x33, 0x82, ++ 0x38, 0xE5, 0x14, 0xAA, 0x3A, 0xA9, 0x62, 0x48, 0xEB, 0x6D, 0x58, 0x38, 0xD3, 0x41, 0x74, 0x12, 0x75, 0x82, 0x33, 0xA0, 0x5C, 0x56, 0xEC, 0x4B, 0x5C, 0x5F, 0x1B, 0x59, 0x22, 0x5E, 0x53, 0xEE, ++ 0x2D, 0xA1, 0xF8, 0x32, 0x6C, 0x50, 0xE6, 0x98, 0x8B, 0xF6, 0x14, 0x58, 0x7F, 0x37, 0xBE, 0xA8, 0x7B, 0xF4, 0x57, 0x15, 0x46, 0x34, 0xCC, 0xF3, 0xE7, 0xE9, 0xA6, 0xD1, 0x59, 0x04, 0x92, 0x51, ++ 0x80, 0xDB, 0xE0, 0xEA, 0x7B, 0x2B, 0xDA, 0x61, 0x5A, 0x4D, 0xE6, 0xE8, 0x3A, 0x48, 0x47, 0xD6, 0x0A, 0xC4, 0xAC, 0x7F, 0x80, 0xA9, 0x3D, 0xC6, 0xBE, 0x06, 0xA4, 0x80, 0x10, 0x21, 0xFE, 0x7C, ++ 0x71, 0x78, 0x58, 0xF5, 0x64, 0x8A, 0x5E, 0x53, 0x87, 0x0C, 0x6D, 0x42, 0xB7, 0x7D, 0x29, 0x89, 0x0E, 0xB5, 0x45, 0x65, 0x7B, 0x7A, 0xF6, 0xE1, 0x40, 0xA7, 0xE1, 0x4B, 0x88, 0xD3, 0x1D, 0xC0, ++ 0x72, 0xCD, 0x9A, 0x41, 0xC6, 0x6B, 0xB2, 0xC7, 0x08, 0x9F, 0x4F, 0x16, 0x7B, 0xA0, 0xDD, 0xF9, 0x08, 0xAD, 0x7A, 0x2A, 0xB0, 0xCE, 0x19, 0xCC, 0x4A, 0x17, 0x7E, 0x0C, 0xF1, 0x2C, 0x8A, 0xFE, ++ 0xC9, 0x85, 0x8C, 0x39, 0x24, 0x73, 0x8F, 0x04, 0xDD, 0xDF, 0xDA, 0xF8, 0x53, 0xF7, 0xED, 0xCB, 0xE5, 0x2F, 0xCA, 0xF3, 0xE3, 0x82, 0xC7, 0x12, 0xC4, 0xE8, 0x21, 0xC2, 0x4D, 0xF9, 0x1D, 0x15, ++ 0x73, 0xA7, 0x4C, 0xE2, 0x1E, 0x44, 0xEF, 0xBA, 0x8A, 0x8E, 0xC6, 0xE6, 0xD5, 0xEE, 0x0B, 0xD8, 0xEB, 0xE0, 0x24, 0x36, 0x62, 0x35, 0x72, 0x35, 0x3E, 0x42, 0x10, 0xCB, 0x84, 0xD1, 0x28, 0x3E, ++ 0x1F, 0x6B, 0xA7, 0x26, 0xB2, 0x74, 0x6E, 0xB4, 0x36, 0x2D, 0x46, 0x4C, 0xF2, 0xE2, 0x78, 0xB2, 0xC4, 0x35, 0x68, 0xC9, 0xD7, 0x76, 0x14, 0xDD, 0xCA, 0x1B, 0x19, 0x3D, 0x3C, 0xCA, 0x67, 0xFC, ++ 0x7B, 0x4B, 0x41, 0x17, 0xD1, 0xFE, 0x2D, 0x17, 0x80, 0xEF, 0x90, 0x53, 0x8A, 0xFA, 0xEA, 0xDF, 0xB3, 0x76, 0xE3, 0x18, 0x33, 0x0E, 0x78, 0x5A, 0xF1, 0x03, 0x75, 0x3F, 0xD5, 0x99, 0x17, 0xBA, ++ 0xBB, 0xC0, 0xC8, 0xD7, 0x53, 0x2E, 0x0A, 0x54, 0xBF, 0x8E, 0x91, 0xF4, 0xAA, 0xAA, 0xDC, 0x9D, 0x53, 0x51, 0x3A, 0x04, 0xA1, 0xB5, 0x30, 0xD7, 0x11, 0xC4, 0x04, 0x69, 0x06, 0x3A, 0xB2, 0xFB, ++ 0xF5, 0xEA, 0xEB, 0x2A, 0x94, 0x1A, 0x58, 0x12, 0x6E, 0xB5, 0x80, 0x2D, 0x1A, 0x97, 0xD4, 0x4B, 0xF3, 0x40, 0x82, 0xB0, 0x26, 0x41, 0x0A, 0x83, 0xD4, 0x2D, 0xFB, 0x4C, 0x5D, 0xD1, 0xDB, 0xA8, ++ 0xC1, 0x9D, 0x33, 0xDD, 0x53, 0xB6, 0x1A, 0x7B, 0x58, 0x6A, 0xA0, 0x6D, 0xC4, 0x41, 0x4B, 0xB4, 0xC5, 0x3F, 0x26, 0xE0, 0x5A, 0x69, 0xCB, 0x71, 0x9C, 0xFD, 0xCE, 0x1E, 0x27, 0x29, 0x77, 0xC5, ++ 0x26, 0xCF, 0xC1, 0xB3, 0xA7, 0x24, 0x82, 0xAA, 0x24, 0x61, 0xF1, 0xC4, 0x67, 0x24, 0xF2, 0xD9, 0xCA, 0x9D, 0x31, 0xF9, 0x3E, 0x9D, 0x3C, 0x55, 0xD9, 0x44, 0xA5, 0x6D, 0xB9, 0x47, 0x0E, 0x45, ++ 0x41, 0xE2, 0x17, 0xC8, 0x02, 0xC1, 0x9A, 0x2F, 0x93, 0x23, 0xEF, 0xB5, 0x8F, 0x62, 0xCA, 0xF6, 0xFA, 0x86, 0x06, 0x1D, 0xD8, 0x8A, 0x89, 0xF0, 0x82, 0x71, 0x31, 0x8D, 0xE8, 0xA8, 0x1A, 0x56, ++ 0x65, 0x64, 0x33, 0x20, 0x10, 0xFF, 0xE4, 0xC8, 0x8A, 0x2A, 0x02, 0x26, 0x51, 0xAA, 0x32, 0xF5, 0x73, 0xB3, 0xB1, 0x54, 0xAA, 0x8C, 0xF1, 0x0D, 0xFB, 0xDC, 0xC0, 0xC5, 0x7B, 0x23, 0x41, 0xCF, ++ 0x9D, 0x6E, 0x5F, 0xDA, 0x17, 0xA7, 0xA3, 0x61, 0x6D, 0x24, 0x24, 0xCA, 0x2B, 0x9F, 0xE0, 0x8D, 0xC6, 0xC2, 0x96, 0xDF, 0xA2, 0xBE, 0x9D, 0xE8, 0xE5, 0x3C, 0x32, 0x8B, 0x8D, 0x66, 0x14, 0x2A, ++ 0xE2, 0x33, 0xEF, 0xA3, 0x0D, 0x90, 0xE9, 0x1A, 0x75, 0x78, 0x67, 0x56, 0xB8, 0xAB, 0x25, 0xC1, 0x5B, 0x91, 0xCF, 0x34, 0xA0, 0xE1, 0x2D, 0xAC, 0x9D, 0x5E, 0x52, 0x5A, 0xA5, 0x8D, 0x22, 0x9D, ++ 0x4E, 0x60, 0xDC, 0x2A, 0xB2, 0x7C, 0x61, 0x79, 0x0F, 0xAE, 0x21, 0x5C, 0x20, 0x05, 0x20, 0x21, 0x6C, 0xBB, 0x39, 0x8A, 0x20, 0x9B, 0x78, 0x4E, 0x31, 0xAF, 0x7E, 0x15, 0xF0, 0xA0, 0x07, 0x31, ++ 0x95, 0x74, 0x88, 0x7E, 0x6C, 0x27, 0x66, 0xA0, 0x40, 0x96, 0xAF, 0x1E, 0xDC, 0x45, 0x93, 0xF2, 0xFA, 0x91, 0x8F, 0x1A, 0x48, 0x51, 0xEF, 0x4C, 0xDB, 0x7A, 0xDD, 0xC4, 0x08, 0xDC, 0x3C, 0x57, ++ 0x91, 0x5C, 0x8B, 0xD9, 0x90, 0xC1, 0x00, 0x06, 0x16, 0x9D, 0x84, 0xFB, 0xDF, 0x13, 0xC7, 0x09, 0x7B, 0xEC, 0x77, 0xE3, 0xF1, 0x47, 0x57, 0x60, 0x23, 0x23, 0x2A, 0x74, 0x50, 0xF7, 0x86, 0x4F, ++ 0x21, 0xB3, 0x28, 0xAC, 0xBA, 0x0A, 0x4B, 0x21, 0x25, 0x6B, 0x1B, 0x08, 0xD4, 0xA4, 0xCD, 0x7A, 0xA5, 0x3A, 0x30, 0x7B, 0xC1, 0xAE, 0x36, 0x0D, 0x78, 0xE9, 0x3D, 0x43, 0x82, 0xBC, 0xD5, 0x83, ++ 0x6E, 0x30, 0x19, 0xF6, 0x7A, 0x1F, 0x5C, 0x39, 0xA3, 0x0E, 0x8E, 0x9F, 0xA7, 0xB9, 0x62, 0x2C, 0xFA, 0xD1, 0x1A, 0x50, 0xF2, 0xE4, 0xF1, 0x7D, 0xBE, 0x8F, 0xF2, 0x49, 0x8B, 0xEF, 0xCE, 0x52, ++ 0x8F, 0x24, 0x13, 0x14, 0x26, 0x38, 0xED, 0x76, 0x59, 0x5E, 0xA2, 0x5D, 0xDD, 0x6F, 0xA9, 0xAC, 0x4D, 0xF3, 0x62, 0xFD, 0xC1, 0xAA, 0x83, 0x64, 0x0A, 0x03, 0x39, 0x19, 0x4D, 0xDE, 0x83, 0x03, ++ 0x61, 0xA1, 0x2D, 0xD3, 0xF1, 0xBB, 0x83, 0xAA, 0x7B, 0x22, 0xC4, 0xD5, 0xFC, 0x7A, 0x69, 0xFA, 0xEB, 0xEB, 0xC4, 0x80, 0xEE, 0x83, 0xE8, 0x0B, 0x62, 0xD7, 0xBB, 0x68, 0xFF, 0xAC, 0xBC, 0xAA, ++ 0xB2, 0xE4, 0x8F, 0xE8, 0x1F, 0x20, 0x9B, 0xD9, 0x24, 0x91, 0x51, 0xB2, 0x55, 0x2F, 0xFA, 0x3E, 0x5D, 0x79, 0xFF, 0x54, 0x13, 0xC9, 0x4E, 0x6F, 0xF7, 0x69, 0xDE, 0xB9, 0x7B, 0x29, 0x08, 0xDC, ++ 0xDC, 0x83, 0x6E, 0xC7, 0x0B, 0xFF, 0xE8, 0xF7, 0x07, 0x8E, 0xEB, 0x14, 0x44, 0x0E, 0x01, 0x40, 0xFB, 0x22, 0xE0, 0x25, 0xBC, 0x1A, 0x10, 0x32, 0x67, 0xF9, 0xEA, 0x89, 0x71, 0x06, 0x34, 0x72, ++ 0xB3, 0x39, 0x49, 0xAD, 0x2A, 0x15, 0xC1, 0x74, 0x02, 0x51, 0x31, 0x00, 0x20, 0x8D, 0x72, 0x60, 0x97, 0x18, 0x2F, 0xA1, 0x01, 0xFC, 0x38, 0xC5, 0xC4, 0x81, 0x6A, 0x3A, 0xBC, 0xCF, 0x9E, 0x44, ++ 0xBF, 0x3F, 0x2D, 0x63, 0x4D, 0xA9, 0xBE, 0xC7, 0x67, 0x97, 0x71, 0x49, 0x14, 0x85, 0x21, 0x3D, 0xD6, 0x25, 0xB3, 0x27, 0xD5, 0x3F, 0xF4, 0xED, 0x21, 0xE1, 0xFF, 0x19, 0xE5, 0xD6, 0xC0, 0x44, ++ 0x7F, 0x77, 0xBB, 0xED, 0xF3, 0xF3, 0x7C, 0x63, 0x7A, 0x18, 0x5F, 0xFC, 0x18, 0xA5, 0xEF, 0xCA, 0x43, 0x77, 0xE3, 0x48, 0x6C, 0xED, 0xF5, 0x8A, 0x03, 0xDB, 0x4B, 0x02, 0x3C, 0xF5, 0x17, 0xE1, ++ 0x1D, 0x80, 0xE8, 0xE2, 0x93, 0x54, 0x40, 0x20, 0xA4, 0xFA, 0xB7, 0x80, 0x9D, 0x32, 0xCB, 0xF0, 0x15, 0x1F, 0xF2, 0x3C, 0xC1, 0xB2, 0xC4, 0xBD, 0x0E, 0x41, 0x07, 0xC5, 0xC0, 0xD2, 0x72, 0x2E, ++ }, ++ .pkcs8_len = 0, ++ .spki_len = 0, ++ .msg_len = 66, ++ .msg = { ++ 0x22, 0x5D, 0x5C, 0xE2, 0xCE, 0xAC, 0x61, 0x93, 0x0A, 0x07, 0x50, 0x3F, 0xB5, 0x9F, 0x7C, 0x2F, 0x93, 0x6A, 0x3E, 0x07, 0x54, 0x81, 0xDA, 0x3C, 0xA2, 0x99, 0xA8, 0x0F, 0x8C, 0x5D, 0xF9, 0x22, ++ 0x3A, 0x07, 0x3E, 0x7B, 0x90, 0xE0, 0x2E, 0xBF, 0x98, 0xCA, 0x22, 0x27, 0xEB, 0xA3, 0x8C, 0x1A, 0xB2, 0x56, 0x82, 0x09, 0xE4, 0x6D, 0xBA, 0x96, 0x18, 0x69, 0xC6, 0xF8, 0x39, 0x83, 0xB1, 0x7D, ++ 0xCD, 0x49, ++ }, ++ .sig_len = 2420, ++ .sig = { ++ 0xB5, 0xF8, 0x9A, 0xE9, 0x07, 0x73, 0xF4, 0x9F, 0xB0, 0xAE, 0xFA, 0xFA, 0x2E, 0x5A, 0xC9, 0x5D, 0xB6, 0x5E, 0x53, 0x4A, 0x43, 0x1E, 0x7B, 0x64, 0x1F, 0xEE, 0x75, 0x1F, 0x89, 0x96, 0xC3, 0x67, ++ 0x17, 0xF3, 0xA8, 0x44, 0x7C, 0x99, 0x5D, 0x47, 0x5B, 0xC1, 0xC3, 0x40, 0x4A, 0xDF, 0x42, 0xE9, 0xFD, 0x89, 0x8B, 0x54, 0xED, 0x09, 0x9A, 0xB5, 0x4C, 0x5F, 0x47, 0x1B, 0xC7, 0xC4, 0xBB, 0x39, ++ 0x25, 0x30, 0xF8, 0x21, 0x05, 0x8D, 0xE4, 0xB2, 0xF4, 0x0E, 0xA7, 0xEF, 0x2A, 0x29, 0x7E, 0xC4, 0x0D, 0x65, 0x44, 0x67, 0x95, 0x48, 0x88, 0x55, 0x7D, 0x89, 0xC2, 0x2F, 0x79, 0xCB, 0x44, 0xCC, ++ 0x93, 0x11, 0xFF, 0x98, 0x7A, 0x9E, 0xE2, 0x61, 0x91, 0xE4, 0x27, 0xE9, 0xAF, 0x8F, 0xC8, 0x0F, 0xE7, 0x58, 0xFD, 0x4B, 0xB1, 0x88, 0x6D, 0x83, 0xB2, 0x30, 0x63, 0x4F, 0xD6, 0x5C, 0xE5, 0x3A, ++ 0x03, 0x69, 0x9E, 0xAB, 0xF3, 0x29, 0x20, 0x15, 0x78, 0x14, 0xC9, 0x7D, 0xEE, 0x6C, 0x48, 0x5C, 0x7E, 0x98, 0xA4, 0x31, 0x73, 0x26, 0xF5, 0xD6, 0x39, 0x9D, 0x73, 0xB3, 0x85, 0x5C, 0xEB, 0x17, ++ 0x77, 0x91, 0xE3, 0x39, 0x09, 0x3D, 0x62, 0xE6, 0x7D, 0x2C, 0x5B, 0x2E, 0x16, 0xAC, 0x2D, 0xCC, 0x0C, 0x54, 0x7D, 0x78, 0x19, 0xF1, 0xC0, 0xCF, 0x3F, 0xE7, 0x34, 0x61, 0x44, 0xA8, 0x9E, 0x87, ++ 0x5B, 0xA1, 0xCB, 0xC0, 0x75, 0x28, 0xFF, 0x75, 0xE5, 0x7C, 0x7E, 0x06, 0xDB, 0xE9, 0x96, 0x58, 0xB6, 0xAF, 0x15, 0xD9, 0x17, 0x37, 0x16, 0xBE, 0xD3, 0xFD, 0xEF, 0x7C, 0xEA, 0x4D, 0x33, 0x0C, ++ 0x31, 0xF6, 0x73, 0x37, 0x32, 0x53, 0xC5, 0x5A, 0x75, 0xA1, 0x14, 0xBC, 0xD0, 0x7F, 0x0C, 0xF5, 0x23, 0xDA, 0x09, 0xDC, 0x23, 0xAD, 0xCF, 0x8F, 0x82, 0x8A, 0xEB, 0xE8, 0x20, 0x79, 0x39, 0x41, ++ 0x5D, 0x0B, 0x0D, 0xCE, 0xDF, 0xFF, 0x1A, 0x04, 0xA4, 0xC2, 0x3B, 0xD5, 0x62, 0x13, 0x29, 0x20, 0xD6, 0xD3, 0xEA, 0x9F, 0x63, 0x3D, 0xBF, 0x48, 0x5C, 0x24, 0x6C, 0x0D, 0xC7, 0x6C, 0xF4, 0x09, ++ 0x80, 0xE3, 0x51, 0xA8, 0x8B, 0x19, 0xE9, 0x38, 0x5D, 0x98, 0x7A, 0xD9, 0xC5, 0x84, 0xC4, 0x25, 0xD3, 0x5D, 0xDB, 0x4D, 0xE7, 0x95, 0x6B, 0x8B, 0x12, 0xEF, 0x2B, 0xC1, 0x1A, 0x5C, 0xDA, 0x22, ++ 0xA7, 0xD3, 0x38, 0xD8, 0x10, 0x7C, 0x63, 0x79, 0x16, 0xCD, 0x9F, 0x8F, 0xB4, 0x04, 0xEB, 0x18, 0xB1, 0xB6, 0xCA, 0x08, 0xB5, 0xE9, 0xD3, 0x9C, 0xD4, 0x1F, 0xA8, 0xF0, 0xE1, 0x66, 0xE8, 0x12, ++ 0xD2, 0x34, 0x9F, 0x6A, 0x15, 0x65, 0x4A, 0xB7, 0x13, 0xC3, 0xEB, 0x19, 0x05, 0x6E, 0x02, 0xF9, 0x5B, 0x71, 0xB9, 0x18, 0xC6, 0x10, 0x9A, 0x39, 0x79, 0xC4, 0x66, 0x29, 0x0B, 0x0B, 0xCD, 0x4E, ++ 0xD5, 0x79, 0xC5, 0x08, 0x4F, 0x70, 0x5E, 0xF1, 0xA0, 0x21, 0x07, 0x59, 0x96, 0x89, 0xBE, 0xB4, 0xB3, 0xE0, 0x63, 0x0E, 0xC5, 0xCD, 0x7F, 0x3C, 0xE5, 0x8D, 0xF5, 0xEA, 0x60, 0x12, 0xE0, 0x9E, ++ 0x30, 0xB9, 0xDF, 0xF6, 0x5D, 0x0C, 0xD5, 0x5B, 0xCA, 0x59, 0xBE, 0xDB, 0xB2, 0xA4, 0x53, 0x68, 0x3D, 0x71, 0xA1, 0xD6, 0x99, 0x92, 0x76, 0x1D, 0xA4, 0xF6, 0xC2, 0xB3, 0x76, 0xA8, 0x7D, 0x7E, ++ 0x78, 0x03, 0xF7, 0xC2, 0xA9, 0x92, 0x7E, 0x4A, 0x56, 0x0B, 0xE5, 0xF8, 0x0A, 0xCA, 0x92, 0xF8, 0x28, 0xC9, 0x9A, 0x63, 0xD8, 0x2A, 0x3A, 0xAA, 0xCC, 0xC6, 0xD9, 0xBC, 0x7B, 0xC8, 0xC5, 0xF6, ++ 0x70, 0x6C, 0x05, 0x48, 0xF5, 0x11, 0x0A, 0xDF, 0x48, 0x64, 0xEC, 0x62, 0x01, 0xE7, 0xB2, 0x2A, 0x6C, 0x13, 0xB6, 0x7F, 0x12, 0xB7, 0xA0, 0x59, 0x8C, 0x98, 0xD6, 0xC2, 0x7E, 0x60, 0xD4, 0x81, ++ 0x0F, 0xD5, 0x16, 0x79, 0x95, 0xE6, 0x6E, 0x30, 0x77, 0x3B, 0xF7, 0xCB, 0x03, 0xF3, 0x53, 0x9E, 0xB8, 0xE7, 0x2B, 0x83, 0x84, 0x53, 0x4D, 0xEB, 0x7D, 0xB7, 0x2B, 0x84, 0x7D, 0xD5, 0xC6, 0x6D, ++ 0x02, 0xFB, 0x4E, 0x95, 0x05, 0xB0, 0x08, 0x41, 0x9C, 0x72, 0x23, 0x02, 0xA1, 0x55, 0x95, 0x7B, 0x79, 0x6B, 0xE8, 0x77, 0xCF, 0xDB, 0x17, 0xCB, 0x68, 0xEC, 0xFC, 0x59, 0x0C, 0x6F, 0x12, 0x58, ++ 0x34, 0x68, 0xCB, 0x45, 0x4C, 0x67, 0xBE, 0x3F, 0x2E, 0x86, 0x1A, 0x38, 0x9E, 0x6F, 0x20, 0x65, 0xDD, 0x2E, 0x4F, 0xBC, 0x1D, 0x4C, 0xDD, 0xC3, 0xAD, 0x1C, 0x9A, 0x31, 0x16, 0xEF, 0x31, 0xF6, ++ 0x0E, 0xD8, 0x55, 0x77, 0xAA, 0x2E, 0xE2, 0xEF, 0xF7, 0x21, 0x7D, 0xC0, 0xA1, 0x73, 0x4E, 0x01, 0x43, 0xCC, 0xDB, 0x34, 0x64, 0x23, 0x4E, 0xDE, 0xFE, 0xFA, 0x8D, 0x05, 0x61, 0xD1, 0xB2, 0xEC, ++ 0x9A, 0xA9, 0xE7, 0x8E, 0xC8, 0x2F, 0xB0, 0x59, 0xB3, 0xEE, 0xD3, 0x29, 0xD4, 0x00, 0x26, 0xAB, 0x73, 0x95, 0xC4, 0x2C, 0xA5, 0x98, 0xD3, 0x7E, 0x69, 0x72, 0x9C, 0x37, 0x3A, 0x07, 0xFE, 0x48, ++ 0xA1, 0x91, 0xB9, 0x1F, 0xF3, 0xC9, 0x62, 0xE2, 0x9D, 0x0C, 0x9C, 0x40, 0x53, 0x6B, 0xA7, 0xB6, 0x52, 0x20, 0x12, 0xA2, 0xEE, 0x48, 0x95, 0x64, 0x0F, 0x07, 0x42, 0xA6, 0xF2, 0x02, 0x89, 0xAB, ++ 0x8E, 0x6C, 0x60, 0x4C, 0x1C, 0x56, 0x9B, 0xBE, 0x1F, 0x6B, 0xC3, 0x44, 0x9F, 0x44, 0xFD, 0x1C, 0xA2, 0x51, 0xD2, 0xFF, 0x2C, 0xA4, 0x69, 0x23, 0x0F, 0x79, 0x12, 0x97, 0x75, 0xBF, 0xC7, 0x2D, ++ 0xBA, 0x91, 0x2F, 0xB7, 0xE9, 0x6A, 0x7F, 0x87, 0x5C, 0x90, 0xC6, 0x5C, 0xA6, 0xB9, 0x9D, 0x17, 0x28, 0xB7, 0x92, 0xE2, 0x71, 0x95, 0x16, 0x26, 0x5D, 0xCF, 0x90, 0x63, 0xCD, 0x70, 0x99, 0xC7, ++ 0x29, 0xF0, 0x42, 0x5A, 0xE7, 0x47, 0xF7, 0xE0, 0x26, 0xBF, 0x41, 0xFF, 0xCB, 0x32, 0xEC, 0x89, 0xEF, 0xAD, 0x91, 0x44, 0x88, 0x00, 0x38, 0xC5, 0x72, 0x0E, 0x54, 0xFE, 0xBD, 0x97, 0x33, 0x37, ++ 0xC0, 0x5D, 0x55, 0x7B, 0x74, 0x11, 0x2B, 0xF2, 0x31, 0x87, 0xCE, 0x41, 0xDE, 0x9C, 0xED, 0x15, 0x6F, 0x08, 0x43, 0x93, 0x81, 0x3A, 0xFB, 0x43, 0x3C, 0x29, 0x2E, 0xFB, 0x37, 0xF1, 0x37, 0xE6, ++ 0x00, 0x6A, 0x95, 0xAD, 0xCD, 0x58, 0x0E, 0x36, 0x72, 0x18, 0x1B, 0xE8, 0xD3, 0x09, 0x13, 0xCA, 0x87, 0xE0, 0x08, 0x06, 0xBF, 0x82, 0xA7, 0x50, 0x9F, 0xD2, 0x57, 0xA7, 0x75, 0x91, 0xF6, 0x7A, ++ 0x78, 0x0F, 0x26, 0x49, 0x9C, 0xC0, 0xE9, 0x3C, 0xB0, 0x42, 0x60, 0x00, 0x1D, 0xA3, 0x43, 0xC7, 0x89, 0x75, 0x2C, 0xC1, 0xA4, 0x38, 0x39, 0x8F, 0xE0, 0x48, 0xF1, 0x9B, 0x0D, 0x83, 0xD1, 0xAF, ++ 0x95, 0x60, 0xB9, 0x09, 0xCF, 0xFE, 0x13, 0x64, 0x15, 0x6F, 0x4B, 0x45, 0x62, 0xD1, 0x57, 0x5E, 0x32, 0xC7, 0x7F, 0x8F, 0x0A, 0x26, 0x7B, 0xE4, 0x3E, 0x83, 0x72, 0xEB, 0x4A, 0x59, 0x69, 0x5A, ++ 0x62, 0x5B, 0x84, 0xC2, 0x79, 0x5C, 0x72, 0x4A, 0xC2, 0x40, 0xFC, 0x81, 0xCC, 0x1F, 0x03, 0xE0, 0x10, 0x04, 0xF9, 0x82, 0x20, 0xF3, 0xB4, 0x9E, 0x1B, 0x89, 0x6B, 0x42, 0x20, 0x49, 0xD1, 0x5C, ++ 0x4E, 0x54, 0x80, 0xD2, 0xE6, 0xDA, 0xE9, 0xA7, 0xAD, 0x5E, 0x5B, 0xB4, 0xF3, 0x06, 0xEA, 0xFB, 0x6A, 0xA5, 0x16, 0x6D, 0xFB, 0x5A, 0xCF, 0x5E, 0x7F, 0xF0, 0x57, 0x3E, 0x35, 0x42, 0xCF, 0xEA, ++ 0xFE, 0x1E, 0xDB, 0x4F, 0x1E, 0x40, 0x5D, 0xD3, 0x16, 0x7A, 0x92, 0x8E, 0x30, 0xDC, 0xC6, 0x0E, 0xF8, 0x62, 0xB5, 0xA0, 0xDB, 0xCF, 0x00, 0x27, 0x8B, 0x03, 0x23, 0xEC, 0x6C, 0xBA, 0xE1, 0x4C, ++ 0x8D, 0x79, 0x9B, 0xCC, 0x31, 0x10, 0x89, 0x30, 0x12, 0xEA, 0x81, 0x7E, 0xA0, 0x6F, 0x85, 0x32, 0x87, 0x48, 0xDF, 0x00, 0x9B, 0x7D, 0xD3, 0x6C, 0x46, 0x65, 0x52, 0xC6, 0x3F, 0x55, 0x0A, 0xF2, ++ 0xD2, 0x36, 0x7A, 0x3C, 0x17, 0xF7, 0x86, 0x6F, 0xA2, 0x2F, 0x1C, 0x8F, 0x16, 0xD2, 0xCB, 0x9F, 0x9A, 0xD7, 0x9F, 0xAE, 0xD0, 0x1E, 0x61, 0xEB, 0x31, 0xB0, 0x0A, 0xFD, 0x17, 0xA9, 0x84, 0x43, ++ 0x5B, 0x1C, 0xA2, 0x7A, 0xE4, 0xBB, 0xC3, 0x42, 0x48, 0x2F, 0x24, 0x72, 0x45, 0x11, 0x18, 0xB2, 0x89, 0x7E, 0x6C, 0xF7, 0x50, 0xFC, 0x1F, 0x53, 0xAC, 0x80, 0x81, 0xA6, 0x98, 0x66, 0x28, 0x4E, ++ 0xEF, 0x08, 0x72, 0xAC, 0x3E, 0xB3, 0x42, 0x7A, 0x51, 0x55, 0xA1, 0x66, 0x06, 0xBC, 0x5D, 0x6D, 0x05, 0x06, 0xDC, 0x48, 0xF1, 0xEB, 0x3E, 0x85, 0xF7, 0x1F, 0xCA, 0x62, 0xD5, 0xD9, 0xD3, 0xAB, ++ 0xE3, 0xBB, 0x3E, 0x9B, 0x03, 0xC4, 0xEE, 0xF7, 0xB2, 0x69, 0xB5, 0xA8, 0x5E, 0xD3, 0xCB, 0x14, 0xCD, 0xED, 0x13, 0xC1, 0xAB, 0x92, 0x69, 0x41, 0x52, 0x2A, 0x5B, 0xED, 0x34, 0xB2, 0xBC, 0x33, ++ 0xC1, 0x17, 0x33, 0x14, 0x22, 0x23, 0xC4, 0x5D, 0x50, 0x55, 0x46, 0x27, 0x84, 0x00, 0xEA, 0x96, 0x96, 0xA4, 0xF4, 0x19, 0xCC, 0x80, 0xB1, 0x3F, 0xFC, 0x3D, 0xF5, 0xE0, 0xE6, 0x35, 0x41, 0x29, ++ 0x3B, 0x51, 0xCE, 0x00, 0x6A, 0xD0, 0xA5, 0x1C, 0xE9, 0x56, 0xFA, 0x3C, 0xF9, 0x05, 0xFF, 0x13, 0x19, 0x93, 0x76, 0x78, 0x18, 0x27, 0x8F, 0x21, 0x23, 0xF0, 0x9F, 0x42, 0x21, 0x21, 0x21, 0x46, ++ 0xFD, 0x06, 0xB7, 0x1D, 0xC1, 0x3D, 0xC2, 0x64, 0xCC, 0xC9, 0xE3, 0xDD, 0x94, 0x6E, 0xBE, 0xB9, 0xB4, 0x06, 0x56, 0x83, 0x81, 0x87, 0x33, 0xA9, 0x77, 0x54, 0xCC, 0x85, 0xBC, 0x86, 0x9B, 0x69, ++ 0x7B, 0x1B, 0x99, 0x01, 0x1C, 0x32, 0xEB, 0x6E, 0xC4, 0xFF, 0x8A, 0xE3, 0xF6, 0xFC, 0x4E, 0xEA, 0xED, 0x42, 0x84, 0x09, 0xC5, 0xB0, 0x34, 0x25, 0x7A, 0x0B, 0x96, 0xF0, 0x05, 0x73, 0x7D, 0x47, ++ 0x56, 0xE7, 0x7C, 0xA5, 0x44, 0xB9, 0x0E, 0x84, 0x1F, 0x8B, 0x47, 0xEE, 0x82, 0x04, 0xEA, 0x85, 0xE3, 0xCB, 0xA9, 0x14, 0xA0, 0x39, 0xCC, 0xD9, 0xCC, 0xD0, 0x60, 0x4F, 0x13, 0x78, 0x95, 0xB0, ++ 0x35, 0x29, 0x17, 0xDA, 0x69, 0x90, 0xB0, 0x1A, 0x87, 0xAB, 0x5B, 0xBE, 0xBD, 0x41, 0x20, 0x7C, 0x8E, 0x9A, 0x43, 0xCA, 0x10, 0x27, 0x9D, 0x7C, 0xA7, 0x09, 0xD6, 0x4D, 0x36, 0xCF, 0xA2, 0x2E, ++ 0xD5, 0x01, 0x34, 0xDE, 0x4B, 0xA3, 0x83, 0x49, 0x11, 0x64, 0x92, 0xD7, 0x4B, 0x23, 0x92, 0x08, 0xDF, 0xD1, 0x94, 0x84, 0xEA, 0xBC, 0xFE, 0x39, 0x9C, 0x98, 0x5C, 0xD0, 0xCB, 0xCF, 0xE4, 0x50, ++ 0x25, 0xD3, 0x55, 0x8E, 0xC9, 0xD3, 0x80, 0xAA, 0x29, 0xB1, 0xBE, 0x2E, 0x65, 0x46, 0x20, 0x93, 0xB7, 0x3A, 0xF6, 0x45, 0x77, 0x7A, 0x19, 0x2C, 0x0B, 0x47, 0x12, 0x06, 0xC1, 0x4F, 0xE2, 0xE4, ++ 0xDC, 0xD6, 0x11, 0x5B, 0x4C, 0x97, 0xEC, 0xB1, 0x28, 0x86, 0x4D, 0x2B, 0xA0, 0x31, 0xF1, 0x2B, 0x44, 0xF3, 0x86, 0x1B, 0x4D, 0xA5, 0x71, 0x4E, 0x78, 0xB4, 0xF7, 0xCC, 0x31, 0xB5, 0xC8, 0xB5, ++ 0x04, 0xD1, 0x91, 0x5E, 0x5D, 0xB8, 0x96, 0x60, 0xF4, 0xCD, 0x7A, 0x54, 0x57, 0x68, 0x36, 0x74, 0xBE, 0xB3, 0x1C, 0x09, 0x67, 0x9F, 0x30, 0xAE, 0xD2, 0x29, 0xCF, 0xE5, 0xEA, 0xC8, 0xF2, 0xF6, ++ 0x18, 0x41, 0x6B, 0x00, 0x9B, 0x17, 0xED, 0x3E, 0x95, 0x36, 0x9E, 0xD1, 0xFB, 0xC8, 0x4F, 0xD8, 0x11, 0xB9, 0x3B, 0xE7, 0x65, 0xC4, 0x3A, 0xD7, 0xE1, 0x31, 0x3F, 0x7C, 0x23, 0x36, 0x4C, 0xC5, ++ 0xA5, 0xCE, 0xD5, 0x25, 0x9A, 0x16, 0xD6, 0x99, 0xB7, 0xDC, 0x93, 0x8A, 0xF8, 0xAB, 0xF2, 0xB7, 0xF7, 0x22, 0x67, 0x76, 0xCD, 0xF8, 0x77, 0xD5, 0xA8, 0x3B, 0x22, 0x24, 0xCE, 0xDD, 0x49, 0x4A, ++ 0x40, 0x79, 0x15, 0x74, 0x7F, 0x9A, 0x26, 0x80, 0x41, 0xB7, 0x43, 0x9F, 0x1C, 0x49, 0xB8, 0x80, 0x51, 0xB1, 0x2D, 0x1F, 0x03, 0x9D, 0xBF, 0xA7, 0xBD, 0x0D, 0x4B, 0x83, 0xA6, 0x66, 0xA5, 0xD9, ++ 0xA3, 0x41, 0x86, 0x61, 0x36, 0xA6, 0xF6, 0xFE, 0xCF, 0xDD, 0xFA, 0x37, 0x94, 0xC5, 0x2B, 0xE1, 0x38, 0xC6, 0xAB, 0x66, 0x27, 0x0E, 0x37, 0xF0, 0x49, 0x0F, 0x39, 0x7C, 0x80, 0x61, 0xBD, 0x05, ++ 0xBC, 0x57, 0x55, 0x69, 0x78, 0xC0, 0x3E, 0x9A, 0x34, 0x60, 0xB4, 0xBC, 0x82, 0x4D, 0x3D, 0xB7, 0xF5, 0x1E, 0x37, 0x08, 0xF5, 0x06, 0x2B, 0x42, 0xF1, 0x61, 0x7A, 0x33, 0x39, 0xD7, 0x7B, 0x03, ++ 0x3A, 0xB6, 0x3A, 0xD0, 0x0E, 0xC0, 0xC7, 0xD1, 0xF0, 0x76, 0x50, 0xBD, 0x1E, 0x26, 0xB4, 0xDB, 0x37, 0x5E, 0xEB, 0x35, 0xAF, 0x5D, 0xC2, 0x26, 0xA7, 0x42, 0x4C, 0xF1, 0x19, 0x15, 0x32, 0x4A, ++ 0x96, 0x29, 0x5B, 0xA9, 0xCE, 0x3E, 0x94, 0xCA, 0x41, 0x16, 0x9D, 0x7F, 0x93, 0xE6, 0x50, 0xE1, 0x00, 0xE8, 0x63, 0xD2, 0x59, 0x2B, 0xDB, 0x0D, 0xC0, 0x3C, 0x3B, 0x12, 0x50, 0x69, 0xFB, 0x24, ++ 0x80, 0x9A, 0x27, 0x9A, 0xC6, 0xCE, 0x58, 0x1A, 0x7C, 0x8C, 0x94, 0xB6, 0x2B, 0x2E, 0x5F, 0x9A, 0x92, 0x00, 0x33, 0x4E, 0x07, 0x92, 0x4A, 0xE3, 0x8D, 0xF3, 0xF4, 0x0D, 0xB3, 0x91, 0x0C, 0x35, ++ 0xE6, 0xD5, 0xE7, 0xE9, 0x54, 0xC4, 0x4A, 0xC8, 0xE3, 0xBE, 0x20, 0xDB, 0x46, 0x99, 0x05, 0x74, 0x13, 0x02, 0x43, 0x1F, 0xB9, 0x75, 0xED, 0x1E, 0xDB, 0x26, 0x15, 0x26, 0x33, 0x28, 0xFF, 0x51, ++ 0xBA, 0xAC, 0x89, 0xFD, 0xAC, 0xAD, 0xAB, 0x5E, 0x79, 0xE5, 0xDE, 0x54, 0xCA, 0x24, 0xC1, 0xE3, 0x94, 0x32, 0x5A, 0xD8, 0x02, 0x34, 0x67, 0xB2, 0x3A, 0x8F, 0xF7, 0xEC, 0x22, 0x7E, 0x88, 0x32, ++ 0x7B, 0x97, 0x40, 0x8F, 0x8A, 0xD2, 0x3A, 0xFE, 0xA5, 0xF9, 0xA8, 0x1E, 0x39, 0x9B, 0x92, 0x79, 0xC2, 0xDE, 0x78, 0x77, 0x37, 0xAD, 0xF3, 0x83, 0xB4, 0x83, 0x58, 0x56, 0x8B, 0xA0, 0x4B, 0x41, ++ 0x24, 0x89, 0xBF, 0x78, 0xD6, 0x35, 0xC0, 0xA5, 0xDA, 0x0F, 0xED, 0xCD, 0xC0, 0xB7, 0xAF, 0xCB, 0x88, 0xF3, 0xB8, 0x35, 0x89, 0x4B, 0xD0, 0x38, 0x57, 0x32, 0x51, 0x37, 0xA4, 0x26, 0x4D, 0xBD, ++ 0x40, 0x12, 0x92, 0x6F, 0x9E, 0x8C, 0x3E, 0xC6, 0x21, 0x66, 0x99, 0x57, 0x41, 0x3E, 0xC5, 0x11, 0xCD, 0xCB, 0xB4, 0xA3, 0x1F, 0x3F, 0x60, 0x7D, 0x28, 0x9E, 0xEB, 0xEC, 0xCD, 0x86, 0xE9, 0x92, ++ 0x30, 0x31, 0x66, 0xE6, 0x0B, 0x8A, 0x12, 0x6C, 0xEF, 0x13, 0x90, 0x2D, 0x4A, 0xB1, 0x77, 0xFA, 0x23, 0xB0, 0xEC, 0x0D, 0x72, 0x6C, 0x59, 0x57, 0x67, 0x04, 0x58, 0xE3, 0x22, 0x53, 0x9B, 0xF0, ++ 0xFC, 0x19, 0x3E, 0xE5, 0x24, 0xDA, 0xBC, 0xEA, 0x6C, 0x74, 0x33, 0xFE, 0xDD, 0x56, 0x37, 0x87, 0x23, 0x76, 0xD9, 0xE4, 0x91, 0x8F, 0xF5, 0x51, 0xA6, 0xE0, 0xF4, 0x0C, 0x1A, 0xB7, 0x54, 0xDF, ++ 0x60, 0x6D, 0xE6, 0x45, 0xE3, 0xE7, 0x82, 0x0C, 0x85, 0x3F, 0xEE, 0xC0, 0x6A, 0x7D, 0x45, 0xCF, 0x87, 0x9F, 0x79, 0x07, 0x2C, 0x30, 0x59, 0x51, 0x52, 0xF2, 0x9E, 0xE3, 0xB3, 0xBA, 0x04, 0xAE, ++ 0x33, 0xA2, 0x87, 0x29, 0x80, 0xFC, 0x6D, 0xD7, 0xC2, 0x31, 0xC7, 0xFA, 0x34, 0x7C, 0xBD, 0x68, 0xD9, 0xB2, 0xEE, 0xF5, 0x78, 0x6E, 0x48, 0xF7, 0x8A, 0x8A, 0x28, 0x02, 0x50, 0x60, 0x90, 0x28, ++ 0x49, 0xCA, 0xC6, 0x70, 0x25, 0x83, 0xB1, 0x1D, 0x37, 0x67, 0x78, 0x68, 0x08, 0x1E, 0x06, 0xFC, 0x6A, 0x7E, 0xDF, 0xBE, 0x6B, 0x9C, 0xBB, 0xD2, 0xC7, 0x37, 0x0B, 0x29, 0x61, 0x70, 0x4B, 0x05, ++ 0xF3, 0x57, 0xFB, 0x46, 0x33, 0xA9, 0xEF, 0x6B, 0x2E, 0xFE, 0xB2, 0xD8, 0xFF, 0xA3, 0x1C, 0xC9, 0x0F, 0xC4, 0x51, 0x5A, 0x95, 0x3F, 0x8F, 0x7F, 0x68, 0x81, 0x93, 0x18, 0x71, 0x2E, 0x06, 0x44, ++ 0x09, 0x3A, 0x0A, 0x18, 0xE4, 0x31, 0xE4, 0x64, 0x28, 0x76, 0x31, 0x6C, 0xFC, 0x12, 0x7D, 0x67, 0x4B, 0x67, 0x6F, 0x29, 0xC9, 0x0C, 0x9D, 0x25, 0x14, 0x21, 0x49, 0x54, 0x17, 0xC0, 0xC1, 0xF0, ++ 0x96, 0xBC, 0x1C, 0xC8, 0xD6, 0xBF, 0xF1, 0x7F, 0x95, 0x3B, 0xF2, 0x48, 0x5D, 0x19, 0x50, 0xA0, 0x9D, 0x3C, 0x3A, 0x92, 0x88, 0xE6, 0xCE, 0xE2, 0x30, 0xCF, 0x41, 0xC3, 0x4B, 0x1F, 0x3B, 0xB8, ++ 0x33, 0x0A, 0x96, 0x07, 0xCB, 0x62, 0xA9, 0x51, 0x0F, 0xC2, 0x5A, 0x0E, 0x5F, 0x67, 0x0B, 0x48, 0x69, 0x3C, 0x06, 0xF8, 0xA0, 0x2C, 0x29, 0x7D, 0xBB, 0xAF, 0xE5, 0x67, 0x61, 0x86, 0x08, 0x29, ++ 0xE4, 0xB5, 0x5D, 0xF0, 0xC7, 0xE0, 0x06, 0x91, 0xB5, 0xE0, 0x88, 0xCE, 0xC8, 0x06, 0x78, 0x0B, 0xB3, 0xAB, 0x6C, 0x2C, 0x06, 0x8C, 0x4E, 0xD8, 0xFC, 0x47, 0xFE, 0x39, 0x76, 0xD1, 0x65, 0x1E, ++ 0x63, 0x0E, 0xCE, 0x0F, 0xA7, 0x7B, 0x5F, 0x05, 0xA6, 0xFE, 0x70, 0x20, 0x9D, 0x31, 0x86, 0x0C, 0xEB, 0x98, 0xFA, 0x49, 0xB7, 0xEC, 0x55, 0x25, 0x1A, 0xEB, 0x7C, 0x7C, 0x90, 0x16, 0xD1, 0x80, ++ 0x40, 0x5A, 0x1E, 0x5A, 0x24, 0x69, 0x15, 0x51, 0xCF, 0xE6, 0xFD, 0x8E, 0x8F, 0x36, 0x17, 0x90, 0x2B, 0xE0, 0xF6, 0x33, 0x53, 0xE7, 0x3F, 0x05, 0x46, 0x01, 0xF0, 0xCD, 0x2B, 0x1C, 0xE8, 0xBF, ++ 0xB2, 0x0B, 0x7C, 0x64, 0x9D, 0x31, 0xCE, 0x52, 0xC1, 0xB7, 0xEF, 0xDD, 0xE9, 0xD9, 0xD8, 0x6B, 0x39, 0x52, 0x18, 0x6C, 0xAF, 0x0C, 0x3C, 0xCE, 0x1F, 0xDD, 0x13, 0x04, 0x26, 0xE4, 0x2E, 0x02, ++ 0x09, 0x0F, 0x5B, 0x5D, 0x5E, 0x74, 0x75, 0x7B, 0x82, 0xA7, 0xB4, 0xC2, 0xCF, 0xDB, 0xE4, 0x10, 0x40, 0x43, 0x4E, 0x62, 0x66, 0x67, 0x69, 0x8B, 0x98, 0x9B, 0xA4, 0xB2, 0xD2, 0xE0, 0xE9, 0xF7, ++ 0x09, 0x21, 0x2A, 0x3B, 0x46, 0x52, 0x58, 0x71, 0x8E, 0xC0, 0xD7, 0xE1, 0xE6, 0xED, 0xF5, 0x10, 0x28, 0x32, 0x39, 0x4F, 0x56, 0x57, 0x78, 0x80, 0x8F, 0x9B, 0xAE, 0xB2, 0xDE, 0xEF, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x20, 0x2F, 0x3E, ++ }, ++ }, ++ { ++ .name = "Dilithium Round 3, Level 3 (6-5) KAT 0 (PKCS#8/SPKI)", ++ .version = 0, ++ .keyform = 0, ++ .rho_len = 0, ++ .seed_len = 0, ++ .tr_len = 0, ++ .s1_len = 0, ++ .s2_len = 0, ++ .t0_len = 0, ++ .t1_len = 0, ++ .pkcs8_len = 5988, ++ .pkcs8 = { ++ 0x30, 0x82, 0x17, 0x60, 0x02, 0x01, 0x00, 0x30, 0x0F, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0B, 0x07, 0x06, 0x05, 0x05, 0x00, 0x04, 0x82, 0x17, 0x48, 0x30, 0x82, 0x17, 0x44, ++ 0x02, 0x01, 0x00, 0x03, 0x21, 0x00, 0x1C, 0x0E, 0xE1, 0x11, 0x1B, 0x08, 0x00, 0x3F, 0x28, 0xE6, 0x5E, 0x8B, 0x3B, 0xDE, 0xB0, 0x37, 0xCF, 0x8F, 0x22, 0x1D, 0xFC, 0xDA, 0xF5, 0x95, 0x0E, 0xDB, ++ 0x38, 0xD5, 0x06, 0xD8, 0x5B, 0xEF, 0x03, 0x21, 0x00, 0x39, 0x4D, 0x16, 0x95, 0x05, 0x9D, 0xFF, 0x40, 0xAE, 0x25, 0x6C, 0x5D, 0x5E, 0xDA, 0xBF, 0xB6, 0x9F, 0x5F, 0x40, 0xF3, 0x7A, 0x58, 0x8F, ++ 0x50, 0x53, 0x2C, 0xA4, 0x08, 0xA8, 0x16, 0x8A, 0xB1, 0x03, 0x21, 0x00, 0xE6, 0x4F, 0x14, 0x64, 0x27, 0x54, 0x3D, 0x8C, 0x36, 0xB3, 0xB6, 0x52, 0x26, 0x76, 0x9A, 0x22, 0x91, 0x1A, 0x5A, 0x31, ++ 0x3E, 0xAC, 0x17, 0xC4, 0xAB, 0xA2, 0x52, 0x84, 0x51, 0x4F, 0xC6, 0x13, 0x03, 0x82, 0x02, 0x81, 0x00, 0x35, 0x78, 0x08, 0x33, 0x02, 0x23, 0x16, 0x43, 0x37, 0x65, 0x80, 0x75, 0x78, 0x71, 0x45, ++ 0x24, 0x81, 0x01, 0x73, 0x15, 0x44, 0x83, 0x65, 0x26, 0x41, 0x33, 0x30, 0x22, 0x30, 0x26, 0x14, 0x73, 0x70, 0x52, 0x21, 0x07, 0x81, 0x26, 0x50, 0x61, 0x85, 0x85, 0x07, 0x75, 0x46, 0x18, 0x58, ++ 0x05, 0x48, 0x53, 0x30, 0x18, 0x70, 0x66, 0x47, 0x51, 0x82, 0x67, 0x73, 0x77, 0x33, 0x50, 0x02, 0x70, 0x31, 0x28, 0x78, 0x82, 0x15, 0x80, 0x71, 0x40, 0x26, 0x73, 0x43, 0x20, 0x61, 0x62, 0x50, ++ 0x61, 0x73, 0x71, 0x01, 0x03, 0x11, 0x45, 0x36, 0x81, 0x52, 0x30, 0x24, 0x65, 0x03, 0x48, 0x14, 0x37, 0x08, 0x37, 0x18, 0x25, 0x50, 0x84, 0x06, 0x08, 0x60, 0x17, 0x62, 0x58, 0x31, 0x31, 0x28, ++ 0x27, 0x00, 0x17, 0x18, 0x48, 0x16, 0x67, 0x31, 0x78, 0x61, 0x07, 0x37, 0x23, 0x55, 0x74, 0x47, 0x15, 0x10, 0x10, 0x11, 0x21, 0x10, 0x66, 0x27, 0x42, 0x12, 0x08, 0x35, 0x46, 0x22, 0x85, 0x13, ++ 0x13, 0x88, 0x16, 0x48, 0x86, 0x83, 0x35, 0x10, 0x47, 0x60, 0x26, 0x11, 0x83, 0x15, 0x74, 0x25, 0x00, 0x74, 0x24, 0x40, 0x64, 0x25, 0x15, 0x86, 0x13, 0x65, 0x61, 0x37, 0x77, 0x11, 0x84, 0x78, ++ 0x05, 0x08, 0x62, 0x43, 0x70, 0x64, 0x06, 0x85, 0x27, 0x63, 0x11, 0x50, 0x13, 0x56, 0x23, 0x21, 0x68, 0x41, 0x41, 0x77, 0x24, 0x08, 0x48, 0x30, 0x87, 0x85, 0x75, 0x43, 0x85, 0x08, 0x63, 0x68, ++ 0x54, 0x26, 0x84, 0x50, 0x56, 0x84, 0x37, 0x02, 0x40, 0x07, 0x16, 0x17, 0x84, 0x54, 0x38, 0x00, 0x61, 0x27, 0x05, 0x82, 0x62, 0x06, 0x76, 0x52, 0x11, 0x12, 0x14, 0x83, 0x88, 0x06, 0x78, 0x14, ++ 0x75, 0x55, 0x02, 0x12, 0x22, 0x85, 0x52, 0x31, 0x08, 0x45, 0x03, 0x70, 0x13, 0x64, 0x31, 0x80, 0x05, 0x37, 0x68, 0x37, 0x65, 0x02, 0x46, 0x53, 0x15, 0x07, 0x60, 0x06, 0x25, 0x33, 0x12, 0x51, ++ 0x20, 0x05, 0x41, 0x60, 0x63, 0x24, 0x23, 0x52, 0x41, 0x50, 0x77, 0x31, 0x45, 0x70, 0x33, 0x47, 0x65, 0x64, 0x31, 0x23, 0x18, 0x03, 0x33, 0x65, 0x16, 0x75, 0x87, 0x14, 0x13, 0x04, 0x11, 0x17, ++ 0x15, 0x54, 0x68, 0x12, 0x60, 0x53, 0x73, 0x42, 0x38, 0x82, 0x43, 0x27, 0x83, 0x37, 0x12, 0x22, 0x81, 0x74, 0x81, 0x81, 0x20, 0x13, 0x63, 0x27, 0x64, 0x75, 0x10, 0x28, 0x03, 0x22, 0x68, 0x65, ++ 0x08, 0x76, 0x55, 0x35, 0x63, 0x33, 0x81, 0x04, 0x47, 0x48, 0x58, 0x54, 0x30, 0x12, 0x43, 0x18, 0x08, 0x38, 0x64, 0x38, 0x53, 0x83, 0x08, 0x41, 0x27, 0x04, 0x64, 0x64, 0x63, 0x34, 0x64, 0x61, ++ 0x06, 0x80, 0x70, 0x60, 0x23, 0x75, 0x51, 0x68, 0x25, 0x74, 0x11, 0x52, 0x88, 0x22, 0x01, 0x57, 0x78, 0x58, 0x33, 0x31, 0x34, 0x31, 0x55, 0x82, 0x84, 0x03, 0x16, 0x36, 0x01, 0x06, 0x48, 0x14, ++ 0x80, 0x46, 0x43, 0x68, 0x46, 0x17, 0x57, 0x21, 0x36, 0x31, 0x65, 0x74, 0x65, 0x22, 0x15, 0x17, 0x71, 0x32, 0x05, 0x10, 0x66, 0x46, 0x83, 0x16, 0x46, 0x71, 0x47, 0x28, 0x31, 0x35, 0x55, 0x14, ++ 0x73, 0x32, 0x81, 0x82, 0x60, 0x73, 0x15, 0x54, 0x36, 0x87, 0x08, 0x03, 0x28, 0x43, 0x26, 0x24, 0x16, 0x05, 0x32, 0x05, 0x20, 0x23, 0x67, 0x72, 0x58, 0x28, 0x18, 0x10, 0x85, 0x42, 0x67, 0x85, ++ 0x15, 0x52, 0x80, 0x00, 0x72, 0x82, 0x27, 0x18, 0x31, 0x12, 0x08, 0x68, 0x37, 0x72, 0x44, 0x42, 0x05, 0x48, 0x64, 0x72, 0x05, 0x35, 0x08, 0x61, 0x73, 0x86, 0x27, 0x12, 0x46, 0x77, 0x51, 0x08, ++ 0x52, 0x76, 0x33, 0x40, 0x37, 0x34, 0x32, 0x11, 0x54, 0x24, 0x06, 0x54, 0x02, 0x34, 0x50, 0x80, 0x04, 0x17, 0x72, 0x84, 0x62, 0x73, 0x61, 0x68, 0x68, 0x07, 0x81, 0x52, 0x46, 0x71, 0x06, 0x82, ++ 0x55, 0x45, 0x81, 0x63, 0x62, 0x76, 0x41, 0x80, 0x57, 0x12, 0x44, 0x25, 0x57, 0x08, 0x04, 0x51, 0x06, 0x63, 0x61, 0x15, 0x85, 0x86, 0x30, 0x46, 0x52, 0x07, 0x05, 0x32, 0x75, 0x02, 0x18, 0x22, ++ 0x42, 0x83, 0x71, 0x02, 0x38, 0x52, 0x75, 0x28, 0x44, 0x20, 0x33, 0x00, 0x17, 0x23, 0x11, 0x14, 0x02, 0x15, 0x76, 0x88, 0x38, 0x47, 0x62, 0x31, 0x85, 0x13, 0x52, 0x52, 0x10, 0x84, 0x38, 0x25, ++ 0x55, 0x56, 0x74, 0x11, 0x44, 0x54, 0x67, 0x27, 0x85, 0x46, 0x58, 0x61, 0x70, 0x43, 0x07, 0x58, 0x80, 0x06, 0x84, 0x55, 0x13, 0x53, 0x47, 0x81, 0x38, 0x12, 0x08, 0x00, 0x84, 0x31, 0x56, 0x22, ++ 0x14, 0x66, 0x03, 0x15, 0x60, 0x01, 0x63, 0x68, 0x56, 0x36, 0x73, 0x61, 0x80, 0x80, 0x04, 0x55, 0x54, 0x03, 0x82, 0x03, 0x01, 0x00, 0x33, 0x73, 0x12, 0x58, 0x40, 0x31, 0x14, 0x80, 0x42, 0x03, ++ 0x67, 0x33, 0x01, 0x82, 0x71, 0x55, 0x60, 0x65, 0x60, 0x34, 0x40, 0x51, 0x44, 0x34, 0x55, 0x48, 0x51, 0x12, 0x23, 0x76, 0x45, 0x10, 0x64, 0x33, 0x73, 0x25, 0x38, 0x23, 0x38, 0x06, 0x24, 0x51, ++ 0x61, 0x70, 0x81, 0x54, 0x11, 0x67, 0x17, 0x32, 0x00, 0x85, 0x32, 0x60, 0x40, 0x43, 0x71, 0x06, 0x80, 0x37, 0x37, 0x60, 0x70, 0x86, 0x40, 0x87, 0x00, 0x03, 0x52, 0x45, 0x71, 0x48, 0x26, 0x22, ++ 0x03, 0x50, 0x53, 0x56, 0x66, 0x03, 0x72, 0x18, 0x01, 0x37, 0x10, 0x37, 0x10, 0x36, 0x52, 0x78, 0x43, 0x28, 0x24, 0x64, 0x23, 0x20, 0x47, 0x64, 0x23, 0x84, 0x00, 0x00, 0x67, 0x43, 0x64, 0x56, ++ 0x52, 0x26, 0x21, 0x76, 0x65, 0x21, 0x24, 0x13, 0x88, 0x73, 0x47, 0x65, 0x08, 0x43, 0x12, 0x17, 0x01, 0x64, 0x71, 0x46, 0x54, 0x03, 0x87, 0x24, 0x41, 0x77, 0x74, 0x13, 0x76, 0x78, 0x55, 0x21, ++ 0x64, 0x11, 0x17, 0x31, 0x60, 0x50, 0x48, 0x26, 0x04, 0x14, 0x84, 0x74, 0x66, 0x38, 0x03, 0x35, 0x15, 0x58, 0x01, 0x73, 0x51, 0x26, 0x21, 0x33, 0x62, 0x22, 0x27, 0x10, 0x63, 0x45, 0x60, 0x16, ++ 0x57, 0x20, 0x77, 0x85, 0x48, 0x32, 0x72, 0x48, 0x31, 0x56, 0x16, 0x78, 0x34, 0x56, 0x40, 0x57, 0x68, 0x67, 0x34, 0x58, 0x35, 0x25, 0x35, 0x20, 0x81, 0x55, 0x65, 0x48, 0x10, 0x32, 0x05, 0x33, ++ 0x40, 0x16, 0x60, 0x74, 0x23, 0x71, 0x50, 0x16, 0x32, 0x53, 0x34, 0x66, 0x72, 0x70, 0x81, 0x11, 0x18, 0x24, 0x37, 0x32, 0x13, 0x11, 0x54, 0x42, 0x40, 0x82, 0x61, 0x37, 0x75, 0x04, 0x67, 0x10, ++ 0x08, 0x02, 0x61, 0x38, 0x68, 0x50, 0x71, 0x28, 0x37, 0x52, 0x66, 0x72, 0x24, 0x23, 0x08, 0x02, 0x10, 0x05, 0x01, 0x55, 0x20, 0x48, 0x37, 0x44, 0x37, 0x71, 0x16, 0x42, 0x01, 0x23, 0x16, 0x71, ++ 0x07, 0x82, 0x38, 0x08, 0x07, 0x10, 0x11, 0x24, 0x68, 0x25, 0x82, 0x40, 0x18, 0x15, 0x85, 0x18, 0x74, 0x20, 0x85, 0x38, 0x25, 0x83, 0x10, 0x66, 0x75, 0x13, 0x12, 0x52, 0x85, 0x27, 0x65, 0x25, ++ 0x60, 0x31, 0x47, 0x81, 0x62, 0x13, 0x81, 0x53, 0x47, 0x04, 0x22, 0x61, 0x05, 0x71, 0x55, 0x67, 0x44, 0x68, 0x20, 0x05, 0x45, 0x50, 0x51, 0x48, 0x41, 0x13, 0x03, 0x83, 0x02, 0x41, 0x47, 0x47, ++ 0x15, 0x62, 0x72, 0x02, 0x16, 0x53, 0x21, 0x03, 0x03, 0x87, 0x36, 0x03, 0x48, 0x67, 0x51, 0x76, 0x65, 0x27, 0x21, 0x42, 0x17, 0x26, 0x25, 0x76, 0x65, 0x36, 0x12, 0x11, 0x12, 0x16, 0x87, 0x48, ++ 0x45, 0x40, 0x33, 0x42, 0x68, 0x35, 0x44, 0x40, 0x68, 0x13, 0x60, 0x50, 0x31, 0x08, 0x17, 0x43, 0x56, 0x75, 0x06, 0x34, 0x61, 0x84, 0x75, 0x57, 0x58, 0x58, 0x65, 0x44, 0x84, 0x07, 0x62, 0x31, ++ 0x86, 0x70, 0x34, 0x33, 0x67, 0x58, 0x66, 0x67, 0x73, 0x20, 0x75, 0x17, 0x10, 0x36, 0x05, 0x27, 0x37, 0x24, 0x12, 0x20, 0x17, 0x38, 0x87, 0x54, 0x40, 0x32, 0x26, 0x30, 0x62, 0x13, 0x54, 0x18, ++ 0x36, 0x81, 0x55, 0x77, 0x32, 0x00, 0x10, 0x03, 0x65, 0x18, 0x57, 0x41, 0x86, 0x02, 0x14, 0x44, 0x33, 0x41, 0x02, 0x37, 0x55, 0x63, 0x58, 0x75, 0x02, 0x61, 0x88, 0x64, 0x18, 0x51, 0x76, 0x24, ++ 0x15, 0x85, 0x07, 0x11, 0x80, 0x35, 0x41, 0x51, 0x57, 0x42, 0x42, 0x58, 0x54, 0x56, 0x35, 0x45, 0x15, 0x57, 0x07, 0x63, 0x86, 0x77, 0x24, 0x00, 0x17, 0x67, 0x83, 0x86, 0x86, 0x25, 0x88, 0x17, ++ 0x75, 0x08, 0x61, 0x23, 0x60, 0x60, 0x65, 0x07, 0x33, 0x35, 0x06, 0x60, 0x52, 0x75, 0x02, 0x47, 0x24, 0x33, 0x64, 0x51, 0x35, 0x45, 0x52, 0x55, 0x41, 0x48, 0x60, 0x42, 0x16, 0x43, 0x15, 0x63, ++ 0x33, 0x16, 0x55, 0x67, 0x60, 0x70, 0x34, 0x26, 0x77, 0x08, 0x07, 0x60, 0x55, 0x30, 0x63, 0x50, 0x13, 0x37, 0x70, 0x77, 0x01, 0x37, 0x45, 0x72, 0x74, 0x51, 0x28, 0x72, 0x83, 0x64, 0x74, 0x77, ++ 0x80, 0x27, 0x30, 0x36, 0x44, 0x23, 0x10, 0x55, 0x24, 0x15, 0x43, 0x11, 0x63, 0x14, 0x65, 0x33, 0x63, 0x12, 0x11, 0x84, 0x63, 0x12, 0x63, 0x88, 0x37, 0x62, 0x67, 0x48, 0x35, 0x13, 0x86, 0x35, ++ 0x17, 0x83, 0x12, 0x58, 0x14, 0x47, 0x88, 0x56, 0x08, 0x48, 0x01, 0x42, 0x71, 0x64, 0x77, 0x53, 0x64, 0x73, 0x54, 0x66, 0x05, 0x56, 0x60, 0x52, 0x37, 0x00, 0x46, 0x40, 0x31, 0x10, 0x55, 0x50, ++ 0x45, 0x36, 0x48, 0x42, 0x34, 0x06, 0x61, 0x11, 0x75, 0x52, 0x61, 0x58, 0x52, 0x15, 0x73, 0x57, 0x31, 0x56, 0x15, 0x87, 0x78, 0x74, 0x45, 0x03, 0x87, 0x20, 0x54, 0x56, 0x11, 0x66, 0x22, 0x04, ++ 0x46, 0x14, 0x14, 0x61, 0x83, 0x00, 0x06, 0x86, 0x64, 0x06, 0x00, 0x47, 0x37, 0x44, 0x22, 0x50, 0x56, 0x01, 0x04, 0x57, 0x73, 0x50, 0x74, 0x87, 0x02, 0x66, 0x37, 0x48, 0x68, 0x48, 0x02, 0x63, ++ 0x28, 0x52, 0x63, 0x58, 0x11, 0x30, 0x44, 0x28, 0x68, 0x32, 0x61, 0x10, 0x61, 0x88, 0x26, 0x07, 0x00, 0x73, 0x38, 0x62, 0x55, 0x27, 0x15, 0x53, 0x45, 0x32, 0x14, 0x25, 0x73, 0x23, 0x12, 0x21, ++ 0x87, 0x86, 0x55, 0x67, 0x25, 0x67, 0x46, 0x74, 0x72, 0x81, 0x44, 0x54, 0x64, 0x15, 0x77, 0x41, 0x07, 0x80, 0x60, 0x56, 0x13, 0x16, 0x15, 0x40, 0x44, 0x63, 0x47, 0x53, 0x30, 0x77, 0x61, 0x62, ++ 0x50, 0x13, 0x38, 0x41, 0x47, 0x42, 0x66, 0x70, 0x52, 0x06, 0x70, 0x81, 0x25, 0x43, 0x17, 0x77, 0x70, 0x15, 0x22, 0x21, 0x82, 0x50, 0x03, 0x82, 0x09, 0xC1, 0x00, 0x01, 0x31, 0x73, 0x16, 0x9D, ++ 0xB8, 0x08, 0x6B, 0x12, 0x27, 0x01, 0x70, 0x6A, 0xE4, 0x9B, 0x99, 0x30, 0x5E, 0xE6, 0xD0, 0x16, 0xF1, 0x6F, 0x9F, 0xAC, 0xC1, 0xF8, 0x35, 0x29, 0x8B, 0x41, 0xE2, 0x16, 0x64, 0x20, 0x60, 0x05, ++ 0xCE, 0xB9, 0x81, 0xA3, 0x5F, 0x18, 0x65, 0x1C, 0xDB, 0x90, 0xE6, 0x8C, 0x1F, 0x95, 0x0B, 0x05, 0x9F, 0x73, 0xD6, 0xD3, 0x14, 0x3A, 0x1F, 0x47, 0xAA, 0x21, 0xD8, 0x0A, 0x05, 0xFA, 0xF5, 0xD3, ++ 0xA4, 0x0F, 0x67, 0x14, 0x8D, 0x3A, 0x89, 0xA9, 0xFD, 0xA8, 0x03, 0x64, 0xD5, 0x7C, 0x7B, 0x8F, 0x68, 0x05, 0x8A, 0x25, 0xD0, 0x84, 0x98, 0xD9, 0xA9, 0xC3, 0x78, 0xC9, 0x81, 0x85, 0xDB, 0x13, ++ 0x25, 0x91, 0x59, 0xCA, 0xC4, 0x76, 0x9C, 0x34, 0xA0, 0x80, 0x23, 0xA3, 0x38, 0x8C, 0x35, 0x05, 0x40, 0x6F, 0xB2, 0x1C, 0x69, 0xEE, 0xC1, 0x2D, 0xAC, 0x95, 0xA3, 0xC9, 0xBA, 0x61, 0x18, 0x52, ++ 0x37, 0xF0, 0xFF, 0x1E, 0x0E, 0x05, 0xF1, 0xA6, 0xF5, 0xA0, 0xC0, 0x90, 0x90, 0x10, 0x06, 0x65, 0xA1, 0xAD, 0x3A, 0xFB, 0x10, 0x76, 0x84, 0x7B, 0x23, 0x2E, 0xEE, 0xA7, 0x84, 0x09, 0xBD, 0x90, ++ 0x55, 0xDB, 0x57, 0xC1, 0xB3, 0x1E, 0x28, 0xA0, 0x1D, 0x09, 0x99, 0x90, 0x35, 0xBD, 0xFC, 0x65, 0x7A, 0x61, 0x04, 0x01, 0x03, 0xEC, 0xEB, 0xDC, 0x79, 0x34, 0x09, 0x73, 0x37, 0x34, 0xD9, 0x34, ++ 0x2C, 0xC5, 0xA0, 0x69, 0xE0, 0x70, 0xC2, 0x42, 0x1D, 0xDE, 0x11, 0xC4, 0x9E, 0x17, 0x2D, 0xBE, 0x7F, 0xEA, 0xF9, 0xDE, 0xDD, 0xFB, 0x3D, 0xA5, 0xDA, 0xA6, 0xB3, 0xDD, 0x13, 0x20, 0x0B, 0x09, ++ 0x04, 0x2E, 0x14, 0x4E, 0xEA, 0x95, 0x1B, 0x43, 0xDA, 0x48, 0x15, 0x3C, 0x1F, 0x1D, 0x5C, 0x07, 0xFC, 0xF4, 0x73, 0xFA, 0x7F, 0x32, 0x1E, 0x72, 0x53, 0x45, 0x77, 0xC8, 0x95, 0x15, 0x1B, 0x46, ++ 0xE4, 0x83, 0x31, 0xDD, 0xE6, 0x1D, 0xA4, 0x5F, 0x86, 0x09, 0xAC, 0x59, 0x58, 0x18, 0x14, 0x66, 0x6E, 0x16, 0x58, 0xB4, 0x91, 0x14, 0x52, 0x4B, 0xA3, 0x84, 0x0C, 0x6B, 0xC5, 0x59, 0x65, 0x51, ++ 0xAE, 0xF4, 0x24, 0x12, 0xC8, 0xAA, 0xCC, 0xDD, 0x8E, 0xF6, 0x9E, 0x46, 0x38, 0x0E, 0x6D, 0xEF, 0x60, 0xFD, 0x91, 0x22, 0x8B, 0x99, 0xCB, 0x51, 0x1D, 0x68, 0xEF, 0x66, 0x31, 0x74, 0x8A, 0x05, ++ 0x48, 0x08, 0x3A, 0x21, 0x54, 0x45, 0xEC, 0x54, 0x69, 0x34, 0x71, 0xA8, 0x31, 0x04, 0x2C, 0xF4, 0x1D, 0x09, 0xAF, 0x89, 0x81, 0x19, 0xB0, 0xFC, 0x64, 0x6E, 0x48, 0x45, 0x39, 0xC8, 0xC3, 0x2D, ++ 0x5D, 0xC2, 0x4F, 0x94, 0x39, 0xD3, 0x3E, 0xEE, 0xA0, 0x33, 0xA4, 0x08, 0x15, 0x50, 0xFD, 0xB0, 0xB0, 0x89, 0x23, 0xDB, 0xA5, 0xD4, 0x4A, 0x1A, 0x87, 0x6F, 0xE7, 0xEE, 0x43, 0x20, 0xBF, 0x02, ++ 0xF9, 0xBE, 0x26, 0xF4, 0x18, 0xF3, 0x09, 0xFA, 0x11, 0xFC, 0xD0, 0xC8, 0x64, 0xA7, 0xAA, 0x34, 0x11, 0x50, 0x83, 0xC1, 0xEA, 0x77, 0x53, 0x45, 0xAC, 0x05, 0x48, 0xC8, 0x77, 0xC6, 0x85, 0xEA, ++ 0x8C, 0x91, 0xB9, 0x24, 0xAF, 0x4F, 0x60, 0x7E, 0xF3, 0x7A, 0x02, 0x08, 0xE2, 0x13, 0x09, 0xAB, 0x6D, 0x0F, 0x2F, 0x8A, 0x4E, 0xAA, 0x04, 0x51, 0xFF, 0x4A, 0x47, 0xE6, 0xF4, 0x82, 0x95, 0x8D, ++ 0x81, 0xA1, 0x66, 0xA6, 0xA0, 0x8A, 0x6A, 0x10, 0xFC, 0x8F, 0x9A, 0xDA, 0x42, 0xB6, 0x4A, 0x12, 0xB9, 0x35, 0x7D, 0x59, 0x8A, 0x36, 0x64, 0xE9, 0xDF, 0x13, 0x75, 0x5C, 0x10, 0xFF, 0xD7, 0x17, ++ 0x7E, 0x59, 0x4D, 0xFC, 0xBC, 0xFB, 0x5D, 0x11, 0xB6, 0xAD, 0xB1, 0x60, 0x74, 0x45, 0x47, 0x9A, 0x5D, 0xB1, 0xAD, 0x8C, 0xA6, 0xD9, 0x15, 0xF8, 0x97, 0x95, 0xD2, 0x40, 0xCB, 0xED, 0xFA, 0xD2, ++ 0x53, 0x9D, 0x10, 0x51, 0x8E, 0x53, 0xCC, 0x45, 0x0D, 0x6F, 0xC5, 0x38, 0x5A, 0xD6, 0xD7, 0x6B, 0x78, 0x30, 0xF1, 0x38, 0x28, 0x12, 0x06, 0x45, 0xE3, 0xA0, 0xA5, 0xDC, 0xDE, 0xAF, 0x15, 0xF1, ++ 0x96, 0x8E, 0x64, 0xB3, 0xB1, 0xCE, 0xAF, 0x53, 0x6C, 0xAA, 0x29, 0x53, 0xD1, 0x61, 0xC7, 0x55, 0x28, 0xC3, 0xFA, 0x84, 0x93, 0xE0, 0xC1, 0x77, 0xAE, 0x80, 0x7C, 0xED, 0x37, 0x64, 0x8A, 0x82, ++ 0xC9, 0xBE, 0x8B, 0xA9, 0x70, 0x29, 0x6D, 0x54, 0x3F, 0x6F, 0xBD, 0x67, 0x24, 0xA9, 0x9A, 0x68, 0xD2, 0xF6, 0x8C, 0x1F, 0xD3, 0x33, 0xF9, 0xDE, 0xF8, 0x52, 0x6D, 0xB7, 0x83, 0x64, 0x55, 0xB3, ++ 0x13, 0xE6, 0xBC, 0x36, 0x61, 0x78, 0xC9, 0xC5, 0x77, 0x21, 0x60, 0x1E, 0xC0, 0x33, 0x50, 0x54, 0xF0, 0x67, 0xB7, 0x8E, 0x66, 0x3A, 0x05, 0x8D, 0xBD, 0xA1, 0xC1, 0x2D, 0x80, 0xA3, 0x92, 0xF8, ++ 0x9C, 0x0A, 0xD9, 0xE2, 0xA3, 0xB2, 0xEA, 0x17, 0xE9, 0xC9, 0xA3, 0xB1, 0x4D, 0x17, 0x68, 0x22, 0xEE, 0xAC, 0x5F, 0xB5, 0xFF, 0x7D, 0x4C, 0x87, 0xD7, 0x60, 0x80, 0xD2, 0xD4, 0x2D, 0x9A, 0xA4, ++ 0xC9, 0x51, 0xF4, 0xCA, 0xF1, 0x1A, 0x24, 0x4E, 0xDA, 0x71, 0x1D, 0x12, 0x0A, 0x2E, 0xA3, 0x21, 0xD1, 0x55, 0x1D, 0x86, 0xCA, 0x92, 0x65, 0xE9, 0xCD, 0x5F, 0xA9, 0x59, 0x1D, 0x88, 0x0E, 0x40, ++ 0x3B, 0x68, 0x44, 0xF0, 0x51, 0xDC, 0x04, 0x87, 0x99, 0x72, 0xC8, 0x63, 0xB9, 0x7C, 0x72, 0xB4, 0x09, 0xC1, 0x9D, 0x5E, 0xBE, 0xE8, 0xAB, 0x58, 0xC6, 0xE7, 0xB3, 0x93, 0x8A, 0x68, 0xA9, 0xCA, ++ 0xD7, 0x5D, 0x80, 0xC6, 0xFF, 0xC4, 0xF2, 0x22, 0x54, 0xFF, 0x44, 0x20, 0xC6, 0x06, 0xAD, 0x12, 0x0C, 0xC2, 0x03, 0x46, 0xA7, 0xE7, 0x32, 0x4E, 0x78, 0xC8, 0x62, 0xE0, 0xDE, 0xE1, 0x61, 0xA6, ++ 0x4F, 0x44, 0x91, 0x7D, 0xB0, 0xC3, 0x8C, 0x1F, 0x79, 0xC9, 0x69, 0x22, 0x0D, 0x20, 0x2F, 0x88, 0x02, 0xD0, 0xF9, 0xD7, 0xAB, 0xFB, 0x2D, 0xE4, 0x34, 0xB1, 0xC5, 0x3D, 0xAB, 0xB5, 0x75, 0x75, ++ 0xEE, 0xBB, 0xBF, 0x31, 0xCF, 0xB2, 0x92, 0x48, 0x72, 0xFA, 0x01, 0x47, 0x3B, 0x39, 0x76, 0xAE, 0xAD, 0xC9, 0x96, 0x99, 0xB1, 0x38, 0x20, 0xFA, 0x08, 0x68, 0xF2, 0xC9, 0xFD, 0x0D, 0x35, 0x2E, ++ 0x25, 0x93, 0x27, 0x3C, 0xD6, 0x21, 0xB1, 0x97, 0x4F, 0xFA, 0x61, 0x87, 0xFA, 0x05, 0xC4, 0x11, 0x8D, 0x45, 0x17, 0xC9, 0x34, 0x15, 0x1C, 0x1F, 0xA3, 0x4B, 0xEC, 0x3E, 0xD3, 0x63, 0x95, 0x98, ++ 0xCB, 0xA2, 0x4E, 0x28, 0x22, 0x9C, 0xE9, 0xFD, 0x3B, 0x1D, 0xB4, 0x96, 0x9C, 0x12, 0xEE, 0x49, 0xE1, 0x8B, 0x36, 0xCE, 0x2B, 0x91, 0x45, 0xAA, 0xC7, 0x54, 0x28, 0xDF, 0xFA, 0x14, 0x53, 0x02, ++ 0xF4, 0x1D, 0x9E, 0x33, 0x94, 0xF3, 0x8D, 0x3F, 0x3C, 0x03, 0x34, 0xC4, 0x77, 0x4F, 0x1E, 0x94, 0x29, 0x6D, 0xE3, 0x6D, 0xC6, 0xE4, 0x30, 0xE4, 0xC0, 0xA5, 0x37, 0xE6, 0x8B, 0xDD, 0x41, 0xAF, ++ 0x04, 0x21, 0x19, 0x3B, 0x16, 0xAB, 0x18, 0x91, 0xFA, 0x83, 0x6C, 0xBC, 0x36, 0x7B, 0x40, 0x37, 0x05, 0xAB, 0xA5, 0xD2, 0xF9, 0xF2, 0xA4, 0xC2, 0xF2, 0x75, 0xEC, 0x01, 0x0B, 0x2E, 0xAB, 0x84, ++ 0x09, 0x5A, 0x56, 0x9D, 0xBA, 0xE4, 0x45, 0x7C, 0xC2, 0xAC, 0x1C, 0xFE, 0xB1, 0xED, 0xA4, 0x3C, 0x3E, 0x28, 0x19, 0x27, 0x3C, 0x48, 0x7A, 0xCB, 0xEB, 0xFA, 0x0A, 0x0E, 0xD1, 0xCC, 0x46, 0x67, ++ 0xA6, 0xF5, 0x77, 0xF6, 0x2D, 0xFB, 0x1B, 0xC8, 0xFE, 0xAF, 0xD8, 0x6D, 0x90, 0x10, 0x8E, 0x16, 0xB8, 0xB0, 0xE6, 0xC2, 0x67, 0x86, 0x86, 0xC9, 0x28, 0xA6, 0x68, 0xBB, 0x98, 0x57, 0xFF, 0xB2, ++ 0x8D, 0xE9, 0x05, 0x45, 0xCD, 0x44, 0x37, 0xDD, 0x32, 0xCC, 0xCC, 0xC6, 0xED, 0x58, 0xFB, 0x46, 0xFB, 0xF8, 0x5E, 0x0A, 0xEC, 0x0C, 0x81, 0x4E, 0x53, 0x62, 0x45, 0x25, 0x2B, 0x80, 0x29, 0xF0, ++ 0xA2, 0xAB, 0x44, 0xB9, 0x02, 0x7A, 0x7E, 0x35, 0xA9, 0x41, 0xFA, 0x11, 0x3C, 0x8D, 0x82, 0x97, 0x4E, 0xA2, 0x2D, 0xF0, 0x2D, 0x84, 0xE5, 0x32, 0x8C, 0xEA, 0x83, 0xD1, 0x2D, 0x39, 0x9C, 0x7F, ++ 0x02, 0x59, 0x05, 0x5F, 0x4B, 0x3A, 0xD7, 0x07, 0xE7, 0xB3, 0xE5, 0x37, 0xB9, 0x3D, 0xEA, 0x1A, 0x06, 0x6B, 0xDC, 0x77, 0x5F, 0xC7, 0xD1, 0xA6, 0xF0, 0xFE, 0x29, 0xDD, 0xAF, 0xA9, 0xA7, 0xDA, ++ 0x63, 0x0A, 0x46, 0x7E, 0xF6, 0xCB, 0xF5, 0xCC, 0xDF, 0xFD, 0x79, 0xF1, 0xC8, 0xBB, 0x6B, 0xB3, 0x88, 0x20, 0x35, 0xC7, 0x3C, 0xDF, 0x7E, 0xCF, 0xFB, 0x53, 0xC7, 0x12, 0xA7, 0xC7, 0xEA, 0xA5, ++ 0x97, 0x65, 0xEF, 0xA9, 0x60, 0xBF, 0x21, 0xE2, 0x5A, 0x67, 0x03, 0xFB, 0x30, 0x4F, 0x07, 0x73, 0x9F, 0xEB, 0xC6, 0x3F, 0x49, 0x6B, 0x13, 0xCC, 0xAA, 0x07, 0x73, 0x38, 0xA0, 0xB9, 0xA9, 0x76, ++ 0xA9, 0xF0, 0xFC, 0x57, 0x42, 0xD8, 0x5C, 0x4A, 0xF4, 0x01, 0xA4, 0xCE, 0x34, 0x1B, 0x47, 0xBE, 0x25, 0x94, 0xFF, 0x7E, 0x30, 0x19, 0xA0, 0xE0, 0x64, 0x53, 0x5F, 0x9D, 0x93, 0x95, 0xCC, 0x74, ++ 0xA6, 0xA6, 0xF0, 0x0E, 0x0C, 0x4E, 0x35, 0x30, 0xA7, 0xFE, 0x93, 0x10, 0xCE, 0x30, 0xB6, 0x92, 0x2D, 0x04, 0xFD, 0xE0, 0xAA, 0x74, 0x9C, 0xC3, 0xFD, 0xED, 0xB4, 0xD8, 0x70, 0x8C, 0x1F, 0x69, ++ 0x68, 0xBB, 0xED, 0xDD, 0xD5, 0x83, 0x3B, 0x29, 0x9D, 0x79, 0xD6, 0x14, 0x28, 0x18, 0x00, 0x99, 0xB0, 0xA9, 0x46, 0xA5, 0xD7, 0x90, 0x85, 0xDF, 0x7F, 0x87, 0x2C, 0xBD, 0xD2, 0x19, 0xE6, 0xB8, ++ 0xEF, 0x8B, 0x8A, 0xB5, 0xC1, 0xA1, 0x49, 0xE6, 0xE1, 0x5E, 0xF2, 0x82, 0x86, 0x54, 0xFA, 0xBE, 0xC2, 0x49, 0xAF, 0xAA, 0xC4, 0xDC, 0x0B, 0x3B, 0x54, 0x23, 0x34, 0x16, 0x2F, 0xB0, 0x98, 0x00, ++ 0xB6, 0xC3, 0x6C, 0xC9, 0x0F, 0x2A, 0x10, 0x65, 0x58, 0xBA, 0xE2, 0x19, 0x8F, 0xA7, 0xD1, 0xE2, 0xD7, 0x30, 0xDE, 0x46, 0xE3, 0x55, 0xAE, 0xA9, 0x32, 0x48, 0xE5, 0x3A, 0xB2, 0x1B, 0x51, 0x8E, ++ 0xC9, 0x9D, 0x5F, 0x3B, 0x02, 0x11, 0x96, 0xA0, 0xF6, 0x14, 0xA4, 0x6B, 0x94, 0x75, 0x62, 0x12, 0x34, 0x73, 0x3A, 0x28, 0xA4, 0x65, 0xCC, 0x5A, 0x7F, 0xD4, 0x32, 0xC3, 0x62, 0x58, 0x12, 0xAA, ++ 0xBB, 0xB4, 0x2D, 0x2D, 0x9C, 0xBE, 0xF1, 0x6C, 0xBE, 0xD9, 0x36, 0x72, 0x02, 0xB0, 0x28, 0x94, 0xD0, 0x6B, 0xB8, 0x01, 0xBD, 0xA8, 0x47, 0x2B, 0x99, 0x18, 0xB7, 0xD7, 0x24, 0xE3, 0x65, 0x57, ++ 0xDB, 0xE6, 0xB7, 0x63, 0x3A, 0x5F, 0xD2, 0x2D, 0x0E, 0x33, 0x6E, 0x55, 0x57, 0xAF, 0xC0, 0x18, 0xC8, 0x12, 0xE9, 0xE6, 0xA3, 0x5B, 0xFD, 0x8C, 0x60, 0xAB, 0x38, 0x2E, 0x14, 0xFF, 0x51, 0x14, ++ 0x2B, 0x2D, 0x2C, 0x75, 0xA7, 0x67, 0xF3, 0x24, 0x13, 0xBA, 0x38, 0x48, 0x75, 0x58, 0xF9, 0x34, 0x5C, 0xBE, 0x6F, 0xD1, 0xD6, 0xB7, 0x8C, 0x2E, 0x62, 0x2F, 0x3B, 0x97, 0x62, 0x30, 0xF9, 0x9D, ++ 0x6C, 0xBA, 0xF0, 0xBB, 0xD1, 0x49, 0x49, 0x51, 0x0A, 0x52, 0x64, 0x4E, 0xF3, 0xF3, 0x07, 0x88, 0x65, 0x03, 0x7A, 0x1C, 0x10, 0xF4, 0x7B, 0x59, 0x54, 0x66, 0x99, 0xE1, 0xBD, 0x53, 0x9C, 0x7D, ++ 0xDC, 0xC0, 0x3F, 0x71, 0xA0, 0x15, 0x8E, 0xA9, 0xF0, 0x17, 0x8E, 0x18, 0x7B, 0xB6, 0xD4, 0x94, 0x40, 0xDF, 0x2B, 0x10, 0x63, 0x0F, 0xBE, 0x2F, 0xEB, 0x50, 0x97, 0xE4, 0x7F, 0x28, 0x57, 0x11, ++ 0xCA, 0x6F, 0x83, 0x5A, 0x10, 0xD3, 0xAA, 0x75, 0xC0, 0x3C, 0x41, 0x84, 0xC0, 0x3E, 0xF3, 0x07, 0x5D, 0x49, 0xDC, 0xB2, 0x17, 0x7A, 0xBD, 0x53, 0xAD, 0x73, 0x99, 0xD2, 0x90, 0xEA, 0x69, 0x1D, ++ 0x64, 0x73, 0x29, 0x05, 0x63, 0x40, 0xE8, 0xC8, 0x36, 0xE9, 0x75, 0x0F, 0xD8, 0x81, 0xDC, 0xE3, 0x09, 0xD3, 0x09, 0xA9, 0x5B, 0x82, 0x49, 0x2D, 0x4B, 0xDC, 0x15, 0xEC, 0xF8, 0xC7, 0xF5, 0xD3, ++ 0xB9, 0xDD, 0x27, 0x55, 0x48, 0x51, 0x2D, 0xB5, 0xEF, 0x80, 0xCD, 0x40, 0x9E, 0xD3, 0x2B, 0x51, 0x48, 0xB8, 0x2B, 0xF2, 0x40, 0xA7, 0xDC, 0x72, 0xA1, 0x85, 0x23, 0xD8, 0x08, 0xB7, 0xA4, 0xF9, ++ 0xE2, 0x54, 0x79, 0x9E, 0x17, 0x27, 0x8F, 0xA8, 0x8D, 0xAE, 0xBC, 0x94, 0x46, 0x32, 0xE8, 0x3F, 0x86, 0x09, 0xD6, 0x81, 0xAB, 0x46, 0x35, 0x13, 0x02, 0x3D, 0x67, 0xCD, 0x51, 0xB1, 0x53, 0xF0, ++ 0x96, 0x29, 0x12, 0xDD, 0x64, 0xAB, 0x8F, 0x65, 0x29, 0xDC, 0x22, 0xAA, 0x89, 0xE5, 0x72, 0xA7, 0xF8, 0x9C, 0xB9, 0x7A, 0x8F, 0x45, 0x09, 0x31, 0x9D, 0x22, 0x3B, 0xB2, 0x99, 0x74, 0x95, 0x17, ++ 0x16, 0xFD, 0x31, 0x77, 0x14, 0x0A, 0x31, 0xEA, 0x20, 0x04, 0x8B, 0xAF, 0x0F, 0xCA, 0x23, 0x0C, 0xEF, 0x21, 0x96, 0x7A, 0xBD, 0x83, 0x30, 0x9A, 0x4F, 0xF7, 0xE3, 0x5E, 0x88, 0x78, 0x4D, 0xCA, ++ 0x77, 0xAC, 0x07, 0x90, 0x20, 0xEC, 0x0C, 0xA6, 0xDD, 0xEF, 0xBC, 0xBB, 0x7E, 0x31, 0x73, 0x29, 0x31, 0x46, 0x65, 0xD7, 0xC5, 0x1F, 0x63, 0x1F, 0x68, 0x1B, 0x60, 0x03, 0x64, 0xE4, 0x75, 0x74, ++ 0xF2, 0x52, 0xBA, 0xD6, 0x39, 0x6B, 0x3F, 0x5B, 0x17, 0xAD, 0xC2, 0x20, 0x96, 0x6A, 0x93, 0xCE, 0x8F, 0x31, 0x5A, 0x2F, 0x83, 0x06, 0x8D, 0x2E, 0xA0, 0x69, 0x52, 0xE6, 0xEB, 0xD8, 0x02, 0x47, ++ 0x3A, 0x22, 0x64, 0xEF, 0xA4, 0x05, 0xB3, 0xE4, 0x91, 0xBE, 0x77, 0x6C, 0x50, 0x40, 0x6E, 0x11, 0x50, 0xC5, 0x6B, 0x89, 0x4C, 0xF8, 0x64, 0x54, 0x6B, 0x0C, 0x7A, 0x65, 0xE3, 0xF1, 0xA2, 0xBE, ++ 0xFE, 0xF2, 0xA9, 0x99, 0x0B, 0xAF, 0xE7, 0x0B, 0x6C, 0xA9, 0xF9, 0x1A, 0x8F, 0x3D, 0xD2, 0x13, 0x07, 0xA3, 0x9A, 0x2A, 0xFB, 0xDF, 0xBD, 0xE9, 0xB7, 0xCA, 0x3D, 0x78, 0x28, 0xB1, 0x3F, 0x49, ++ 0xDE, 0xCD, 0x72, 0x9C, 0x00, 0x39, 0xE9, 0x4E, 0xBB, 0x7B, 0x4B, 0xDA, 0x09, 0xB3, 0x50, 0x55, 0x29, 0xA1, 0x2C, 0xB1, 0xE2, 0xFD, 0x79, 0xB9, 0xE5, 0x08, 0x7C, 0xD7, 0xC3, 0xBC, 0x05, 0xF7, ++ 0xCF, 0xFB, 0xBA, 0x93, 0x2A, 0x7B, 0xFF, 0x8E, 0x67, 0x55, 0x5F, 0xEE, 0x03, 0x04, 0xD8, 0x90, 0x31, 0x3F, 0x86, 0xE1, 0x89, 0x25, 0x69, 0xE2, 0xD6, 0xF1, 0x4A, 0x89, 0x93, 0x87, 0x17, 0xAA, ++ 0xA3, 0xA3, 0x2A, 0xD1, 0x16, 0x71, 0x50, 0x29, 0x9C, 0x21, 0x82, 0x0A, 0xBD, 0x70, 0xFF, 0x90, 0x2B, 0x00, 0x4C, 0x6D, 0xE9, 0x1C, 0x1C, 0x0B, 0x40, 0x70, 0x64, 0x42, 0xAF, 0x53, 0x1E, 0xC4, ++ 0x90, 0xB0, 0x12, 0x75, 0x0B, 0xCB, 0x48, 0x77, 0x93, 0x5A, 0x7E, 0x54, 0x03, 0x17, 0x02, 0xBB, 0x98, 0x8E, 0xB3, 0xF9, 0x29, 0x14, 0xCD, 0xBD, 0x42, 0x97, 0x9A, 0xD7, 0xD2, 0x7B, 0x22, 0x33, ++ 0xEC, 0x12, 0x79, 0xD0, 0x54, 0x93, 0xB1, 0x2D, 0x3F, 0x5F, 0xBB, 0x77, 0x57, 0x53, 0x60, 0x21, 0xB5, 0xF4, 0xCD, 0x93, 0x2B, 0x48, 0x0E, 0x40, 0xCB, 0xAE, 0x50, 0xD2, 0x32, 0xE0, 0xA2, 0xEF, ++ 0xFE, 0x0E, 0x8C, 0xB5, 0x88, 0x08, 0x66, 0x91, 0x99, 0xF0, 0x83, 0x08, 0x72, 0xF3, 0x69, 0x73, 0x86, 0x82, 0xF8, 0x46, 0xF6, 0xDE, 0xAD, 0x09, 0x5B, 0xFF, 0xCD, 0x67, 0x0A, 0x4A, 0x9C, 0xD1, ++ 0x42, 0x39, 0x6C, 0x58, 0x50, 0x6E, 0xA7, 0xA6, 0x8B, 0x21, 0xAB, 0xDC, 0xC1, 0x9C, 0xCC, 0x06, 0xF6, 0xDA, 0x55, 0xC8, 0x85, 0xA8, 0x55, 0xC4, 0x56, 0x68, 0x0C, 0xD4, 0x47, 0x7B, 0xCA, 0x2B, ++ 0xBA, 0x91, 0x53, 0xDC, 0xAE, 0xE6, 0x82, 0x65, 0x5B, 0x74, 0xEC, 0xA6, 0xF7, 0xE4, 0x4C, 0x3B, 0xFE, 0x1E, 0x2D, 0x45, 0x74, 0x91, 0xED, 0x1B, 0xC6, 0x4E, 0x1C, 0xF6, 0xCE, 0x18, 0xCF, 0x44, ++ 0xA0, 0x16, 0x6D, 0x1B, 0x24, 0x44, 0x80, 0x88, 0x2C, 0x1B, 0x35, 0xCE, 0xA7, 0x03, 0x15, 0x8E, 0x18, 0xC7, 0xEC, 0x6E, 0x0C, 0xF8, 0x27, 0xD5, 0x50, 0x4A, 0x45, 0xAE, 0x61, 0x15, 0x23, 0x09, ++ 0xBC, 0x8A, 0x18, 0xA5, 0x2C, 0x0E, 0x76, 0x99, 0xA8, 0x7C, 0x4E, 0x31, 0xC6, 0x91, 0x1A, 0x83, 0x05, 0x35, 0x15, 0x55, 0xB2, 0x97, 0x1C, 0x94, 0x60, 0x2B, 0x70, 0xE6, 0x70, 0xAA, 0x30, 0xB9, ++ 0x07, 0x34, 0xEC, 0x1D, 0xAA, 0xD0, 0x3A, 0x30, 0xA9, 0x6F, 0x58, 0x47, 0xC5, 0xC3, 0xF7, 0x97, 0x3C, 0xF4, 0x57, 0x2D, 0x16, 0x6C, 0x51, 0xD1, 0xE9, 0x4A, 0x50, 0xA4, 0xC1, 0xC8, 0x94, 0xA2, ++ 0x05, 0xF8, 0xEC, 0xB3, 0x4E, 0x80, 0xF8, 0x4C, 0xA8, 0xDC, 0x31, 0xA4, 0x29, 0xD5, 0x60, 0x05, 0x96, 0x17, 0x9D, 0x10, 0x93, 0xE2, 0xA3, 0x89, 0xCC, 0xFE, 0x9C, 0x04, 0x02, 0xEE, 0x49, 0x55, ++ 0x17, 0x10, 0xFF, 0xC2, 0x5B, 0xDB, 0xE4, 0x78, 0xF3, 0x9F, 0x20, 0x63, 0xF3, 0x1F, 0x75, 0xD7, 0x43, 0x2E, 0xCA, 0x1C, 0x59, 0xEB, 0xD8, 0xF4, 0x6D, 0x86, 0xA0, 0x92, 0xDB, 0x12, 0xF8, 0x10, ++ 0xFA, 0x91, 0x1C, 0x20, 0xD4, 0xCC, 0x1E, 0x42, 0x5C, 0x54, 0x3D, 0xC6, 0x45, 0x77, 0xE4, 0x4D, 0x84, 0xF4, 0x22, 0xD9, 0x66, 0x1E, 0x3D, 0x35, 0x92, 0x13, 0x50, 0xD6, 0xF7, 0x09, 0x9C, 0x54, ++ 0x25, 0xE5, 0x09, 0xE1, 0x45, 0x8A, 0x05, 0x00, 0xAE, 0x5E, 0xB4, 0xCC, 0x6B, 0xB5, 0x06, 0x26, 0xD0, 0x13, 0x0F, 0x09, 0x36, 0x17, 0x17, 0xA9, 0x59, 0x19, 0xAE, 0xD3, 0x55, 0x92, 0xFA, 0x4A, ++ 0xBE, 0x7B, 0x2B, 0xD4, 0xF9, 0x99, 0x42, 0x21, 0x51, 0xE6, 0x3D, 0x4E, 0xD0, 0x0C, 0xC7, 0x51, 0xA5, 0x86, 0x79, 0x77, 0xF1, 0x5E, 0x48, 0x2E, 0xFA, 0x01, 0xE5, 0xCC, 0xC4, 0x40, 0x64, 0xF5, ++ 0xB9, 0xFF, 0xE2, 0x9A, 0xFF, 0xE6, 0x26, 0xC4, 0xD5, 0x17, 0x0A, 0xDA, 0x1D, 0xF0, 0x27, 0xAB, 0x41, 0x79, 0x60, 0x8C, 0x40, 0x93, 0xCC, 0xE2, 0xC4, 0x09, 0x30, 0x8C, 0xD8, 0x98, 0x37, 0x1A, ++ 0x49, 0xFB, 0xEA, 0x2A, 0x2F, 0x2B, 0xA1, 0x3B, 0xDE, 0xBA, 0xC1, 0xF4, 0x15, 0x9F, 0x4B, 0x03, 0x68, 0xFB, 0x21, 0xD7, 0x0A, 0x9D, 0x79, 0x31, 0xD7, 0xEF, 0xF9, 0x34, 0xE6, 0xC5, 0x44, 0xE1, ++ 0x3B, 0x7B, 0x73, 0xD4, 0x65, 0x57, 0x6C, 0x6E, 0x81, 0xFD, 0x6D, 0x5F, 0xD9, 0x43, 0x93, 0xE8, 0x02, 0x42, 0xF9, 0x42, 0x0A, 0xCC, 0x0E, 0xD3, 0x53, 0xEF, 0x18, 0xCA, 0x07, 0x0F, 0x5E, 0x9A, ++ 0x28, 0x5A, 0xC4, 0xBC, 0xBA, 0xB1, 0x9A, 0x38, 0x35, 0x6F, 0x55, 0x7B, 0x07, 0x0E, 0x17, 0xAE, 0x5C, 0xF1, 0xF1, 0xBE, 0xD4, 0x26, 0x01, 0xE8, 0x9C, 0x8C, 0x4C, 0xA0, 0x82, 0x07, 0x85, 0x03, ++ 0x82, 0x07, 0x81, 0x00, 0xD9, 0xFD, 0xE3, 0xA4, 0x96, 0xF7, 0x58, 0x19, 0xF0, 0xA2, 0x0D, 0x04, 0x41, 0xDC, 0x78, 0x30, 0xB4, 0xAA, 0x1C, 0xB8, 0xEC, 0xFC, 0x91, 0xBA, 0x0E, 0xEC, 0x3A, 0xFB, ++ 0x67, 0x44, 0xE4, 0x77, 0xB4, 0xE6, 0xEC, 0x3F, 0xDA, 0xE7, 0x50, 0x48, 0xFF, 0xEB, 0xAA, 0xBE, 0xA8, 0xE8, 0x22, 0x11, 0x7D, 0x57, 0x87, 0xF7, 0x90, 0x70, 0xEA, 0x88, 0x28, 0x7C, 0xE3, 0xCD, ++ 0x50, 0x11, 0xFD, 0x8D, 0x93, 0xAB, 0x7E, 0x8B, 0x51, 0xF2, 0x61, 0x16, 0xBF, 0x9B, 0x6D, 0x21, 0xC0, 0x3F, 0x88, 0xBF, 0xEC, 0x48, 0x88, 0x76, 0xF4, 0xD0, 0x75, 0xA1, 0x42, 0xD4, 0xE7, 0x84, ++ 0xD7, 0x34, 0x40, 0x75, 0x11, 0xF9, 0x92, 0x06, 0x93, 0x53, 0xF1, 0xDB, 0x67, 0xAC, 0xF7, 0x30, 0x34, 0xA4, 0x68, 0xA1, 0x18, 0x58, 0x80, 0x62, 0x11, 0x1D, 0x32, 0x0E, 0x00, 0xBC, 0xFF, 0x6D, ++ 0xC6, 0x35, 0x73, 0xFC, 0xED, 0x1E, 0x96, 0xAA, 0xEB, 0xA6, 0x45, 0x2E, 0x3C, 0x7A, 0xCD, 0x19, 0x18, 0x1F, 0x9B, 0x81, 0x4B, 0xA1, 0x9D, 0x39, 0xB4, 0xBA, 0xB5, 0x49, 0x6D, 0xC0, 0x55, 0x42, ++ 0x6E, 0x7E, 0xA4, 0x61, 0xAF, 0x55, 0xD5, 0xB9, 0xFE, 0x97, 0xF9, 0xDF, 0x7E, 0x25, 0x32, 0x03, 0xC1, 0xF9, 0xE1, 0x52, 0xE9, 0x6D, 0x75, 0xF9, 0xD9, 0xA8, 0x4F, 0x5C, 0x26, 0x3E, 0xC8, 0xC2, ++ 0x50, 0x44, 0x0A, 0xDC, 0x98, 0x6F, 0x4E, 0x36, 0x41, 0x4C, 0x70, 0x3B, 0x3E, 0x05, 0x42, 0x6B, 0x28, 0xB7, 0x06, 0x59, 0x50, 0xDA, 0x6D, 0x0E, 0x0B, 0x2C, 0x60, 0xAC, 0x36, 0x72, 0xDB, 0x6F, ++ 0x3C, 0x78, 0x44, 0x7D, 0xB7, 0xC2, 0x09, 0x15, 0x77, 0x0E, 0xA6, 0xFC, 0xE8, 0x1D, 0xAB, 0x53, 0x39, 0xC1, 0xD5, 0xAF, 0x82, 0xA5, 0xD3, 0x32, 0x40, 0x99, 0xDF, 0x56, 0x51, 0x6A, 0x07, 0xDB, ++ 0x7C, 0x0F, 0xC6, 0x43, 0x83, 0x80, 0x5C, 0x65, 0xF2, 0xB0, 0x2F, 0xBC, 0xFC, 0xE6, 0x3E, 0x93, 0xC4, 0xBF, 0x09, 0x40, 0x9F, 0x9F, 0x0F, 0x77, 0xE7, 0x3D, 0xA3, 0xB0, 0x01, 0x9F, 0x20, 0x57, ++ 0xE4, 0xCD, 0x7C, 0xFF, 0x0E, 0x57, 0x45, 0xEF, 0x18, 0xC3, 0xFD, 0x76, 0x6E, 0x01, 0x74, 0x7A, 0x64, 0xD4, 0x15, 0xFC, 0x97, 0x89, 0xAB, 0xFA, 0x62, 0x28, 0x4E, 0x11, 0xC7, 0xFF, 0x05, 0xD0, ++ 0x54, 0x8D, 0x97, 0x3F, 0x67, 0x95, 0x59, 0xA6, 0xA3, 0xAA, 0xD7, 0x7E, 0xD5, 0x13, 0x2D, 0x01, 0x50, 0xC0, 0x14, 0xC3, 0xEC, 0x3A, 0x39, 0x5F, 0x01, 0x7E, 0x7A, 0xCF, 0xE3, 0xEA, 0xBF, 0xCA, ++ 0x44, 0x91, 0x0C, 0xA0, 0x6F, 0xF3, 0x35, 0x42, 0xEC, 0xCE, 0x62, 0x41, 0x97, 0x47, 0x42, 0x35, 0x7D, 0x37, 0xF5, 0xC2, 0x84, 0xBF, 0x0F, 0xE1, 0xA7, 0x4B, 0x50, 0xC0, 0x73, 0x55, 0x13, 0x72, ++ 0x13, 0x3A, 0xF2, 0xDD, 0x41, 0xE2, 0x1B, 0xAF, 0xC9, 0xC5, 0x90, 0xEE, 0x6E, 0xBC, 0x4A, 0xCE, 0x73, 0x1E, 0xF5, 0x66, 0x15, 0x6C, 0xA0, 0x37, 0x55, 0xDC, 0x49, 0x3C, 0x13, 0x70, 0x28, 0xAF, ++ 0x3B, 0x3D, 0xE5, 0xB0, 0x0B, 0xD6, 0xCB, 0x3D, 0x9A, 0x87, 0xD0, 0x15, 0x1F, 0x88, 0x7C, 0x67, 0x68, 0xBC, 0x6C, 0xA0, 0x2A, 0x94, 0xFB, 0x20, 0x86, 0x55, 0x1A, 0x0F, 0x89, 0xBA, 0x26, 0x15, ++ 0x4E, 0x9D, 0x45, 0x06, 0xAD, 0x9F, 0xAF, 0x39, 0xF5, 0x72, 0x3E, 0x23, 0x4E, 0x06, 0xCF, 0xDE, 0xD6, 0x9D, 0x4E, 0xE4, 0x14, 0x6B, 0x73, 0xE5, 0xDC, 0x1E, 0x41, 0x52, 0xA2, 0xA3, 0x15, 0x9D, ++ 0x73, 0xDB, 0xC8, 0x33, 0xD3, 0xD4, 0x17, 0xCD, 0x5C, 0xF7, 0xFB, 0x3D, 0xC7, 0x74, 0x5C, 0xEE, 0xD4, 0xDC, 0x0F, 0x5B, 0x1C, 0x6D, 0x6B, 0x69, 0xC1, 0x76, 0x41, 0x57, 0xEA, 0x43, 0xDF, 0x9D, ++ 0xBB, 0x44, 0x2E, 0xFA, 0x39, 0xD1, 0xD0, 0x16, 0x2E, 0x87, 0xC2, 0xD3, 0x0C, 0x50, 0x12, 0xFD, 0x16, 0xD8, 0x69, 0xC8, 0xA1, 0xFC, 0xBB, 0x45, 0xED, 0xCC, 0x8E, 0x18, 0x13, 0xB2, 0xB1, 0x90, ++ 0xA9, 0x61, 0xF9, 0xFC, 0x86, 0x59, 0x1D, 0x3A, 0xBC, 0x53, 0x88, 0xAF, 0x67, 0x8F, 0xF0, 0x3D, 0xA7, 0x8B, 0x7C, 0xC0, 0xF6, 0x18, 0x57, 0x21, 0xC0, 0xDF, 0x33, 0xCC, 0x90, 0x64, 0x35, 0x22, ++ 0x5D, 0xF2, 0x61, 0x10, 0x02, 0xDF, 0x12, 0x0E, 0x83, 0x56, 0x65, 0x32, 0x29, 0x2D, 0xEA, 0x3D, 0x8A, 0xCD, 0x10, 0x9A, 0x0D, 0xFF, 0xAB, 0x3B, 0x0B, 0x43, 0x01, 0x27, 0x96, 0xDB, 0x5B, 0x50, ++ 0x68, 0x3F, 0xB4, 0xC2, 0xD2, 0x50, 0xDA, 0xB7, 0x6A, 0xAE, 0x35, 0xA4, 0x8E, 0x8C, 0x8D, 0x4A, 0x5C, 0xC1, 0x54, 0x75, 0x97, 0x45, 0xF0, 0xA1, 0x23, 0x0F, 0x6C, 0xA9, 0xDD, 0x9C, 0x99, 0xE2, ++ 0xF8, 0x0E, 0xDC, 0x83, 0x30, 0x4C, 0xE0, 0x1E, 0x98, 0xF6, 0xC9, 0x48, 0x95, 0x29, 0xA8, 0x22, 0xF9, 0x00, 0x33, 0xC2, 0x28, 0x31, 0x5E, 0xB2, 0xFC, 0xC8, 0xDB, 0xA3, 0x82, 0xED, 0x43, 0x01, ++ 0xE0, 0x76, 0x07, 0xA5, 0xB0, 0x76, 0xC7, 0x25, 0xF1, 0x24, 0x99, 0x4F, 0x18, 0xA9, 0x97, 0xD2, 0xC5, 0xBB, 0xF9, 0xA3, 0x24, 0x60, 0x52, 0x65, 0x10, 0x8A, 0xCB, 0xF4, 0x61, 0x0F, 0xA1, 0xC3, ++ 0x37, 0x44, 0x08, 0x85, 0x0A, 0x08, 0x64, 0xE2, 0xB6, 0x10, 0x17, 0xEB, 0xEC, 0x1F, 0xBA, 0xB8, 0x9D, 0xE3, 0xAB, 0x1B, 0x93, 0xCE, 0x49, 0x18, 0xB9, 0xE2, 0xC9, 0xE3, 0xFE, 0x45, 0x67, 0x58, ++ 0x06, 0x2A, 0x9F, 0x88, 0x2B, 0x28, 0x33, 0x18, 0x27, 0x1F, 0x4B, 0x95, 0x52, 0xFC, 0xF3, 0x26, 0x24, 0xA9, 0xFD, 0xAA, 0x44, 0xC6, 0x5C, 0x60, 0xE2, 0xB3, 0x64, 0x8B, 0xEF, 0x1F, 0x17, 0xD0, ++ 0xB7, 0xC7, 0x48, 0x69, 0xEE, 0x0B, 0x53, 0xC4, 0xA6, 0x2A, 0x24, 0x84, 0x5D, 0xCE, 0xA5, 0xBC, 0xBF, 0x93, 0xB9, 0x2E, 0x4C, 0x26, 0x64, 0x85, 0x84, 0xE3, 0x34, 0x79, 0x28, 0x2E, 0x6C, 0x8B, ++ 0x1D, 0x8F, 0xE2, 0x11, 0x81, 0xBD, 0x9C, 0xF7, 0x5F, 0x8A, 0x96, 0x17, 0x24, 0xD4, 0xC4, 0x30, 0x97, 0x79, 0xF1, 0xF1, 0xB7, 0x75, 0xD2, 0x54, 0xF7, 0x0B, 0xD1, 0x76, 0x9C, 0xC7, 0xC0, 0xED, ++ 0xD2, 0xA9, 0x5F, 0xE5, 0xC9, 0xD8, 0x4B, 0x16, 0xF7, 0xC5, 0x4D, 0x85, 0xCC, 0xE4, 0xC8, 0xA1, 0x82, 0x81, 0x08, 0x09, 0xED, 0x81, 0xE9, 0x7D, 0x07, 0x48, 0x84, 0xEE, 0xDF, 0x40, 0x1C, 0xCA, ++ 0xCD, 0xAE, 0xAD, 0x82, 0xC1, 0x4D, 0x06, 0xB6, 0x8A, 0xEA, 0x6C, 0xE1, 0x4B, 0x86, 0x1B, 0x0C, 0xFD, 0x16, 0x09, 0x0C, 0xBB, 0xF4, 0x69, 0xC5, 0xE0, 0x84, 0x31, 0x4C, 0x0D, 0x8D, 0x39, 0x60, ++ 0xEA, 0x06, 0xA3, 0x42, 0x6D, 0x8B, 0x3F, 0xE7, 0x62, 0xE0, 0x0D, 0x09, 0xBD, 0xA3, 0x74, 0xF3, 0xAE, 0x2C, 0xBE, 0xDE, 0x28, 0x38, 0xFF, 0x89, 0xD8, 0x1D, 0xEB, 0x30, 0x13, 0x09, 0x0E, 0x44, ++ 0x19, 0x9A, 0xED, 0x60, 0x49, 0x63, 0xEA, 0xF9, 0x19, 0x91, 0x4C, 0xE0, 0x4F, 0x20, 0x7A, 0xC8, 0x2C, 0xD4, 0x35, 0x1F, 0xEF, 0x7B, 0x2D, 0x94, 0x39, 0x30, 0x66, 0xFE, 0x4D, 0x44, 0xE3, 0xCC, ++ 0x59, 0x52, 0xE7, 0x5E, 0xB6, 0xF3, 0x71, 0x40, 0x58, 0x91, 0x5D, 0xE0, 0xEE, 0x18, 0x4D, 0x8C, 0x55, 0x30, 0x0F, 0x57, 0x6A, 0x8B, 0x82, 0xA8, 0x63, 0xE8, 0x1A, 0xF3, 0x34, 0x17, 0xBD, 0x4C, ++ 0xFC, 0x94, 0xE7, 0xA6, 0x12, 0x63, 0xB3, 0x9F, 0x01, 0xF6, 0xE2, 0xE7, 0x07, 0x48, 0xB6, 0xE5, 0xE5, 0x9C, 0xF6, 0xCA, 0x01, 0xB0, 0x02, 0x8C, 0x93, 0xBB, 0xBC, 0xEB, 0xC5, 0x48, 0xF9, 0x87, ++ 0xF1, 0x07, 0x55, 0xBF, 0x33, 0xCA, 0x58, 0x5C, 0xB4, 0x1C, 0xF5, 0x78, 0xDF, 0x5F, 0xFE, 0x37, 0x92, 0x4E, 0x3C, 0x2C, 0x07, 0x2E, 0xD1, 0xDA, 0xC9, 0x16, 0x21, 0x76, 0x97, 0x29, 0x71, 0xE7, ++ 0x9B, 0x62, 0xFB, 0x20, 0x8F, 0x1A, 0x73, 0xBF, 0x03, 0x61, 0xE2, 0x99, 0x3D, 0xCC, 0xCD, 0x31, 0x10, 0xC3, 0x4D, 0x83, 0x9D, 0x18, 0xDD, 0x43, 0xA5, 0xE8, 0xF0, 0xD9, 0x41, 0xE9, 0x9A, 0xDC, ++ 0xF4, 0x41, 0x40, 0x5F, 0x32, 0x10, 0x76, 0x71, 0xB2, 0xD8, 0xB2, 0x24, 0x4F, 0x7B, 0xA9, 0x2D, 0xCE, 0xD5, 0x87, 0xA2, 0x10, 0xFE, 0x8F, 0xF4, 0x3C, 0x61, 0x6A, 0xCB, 0x5E, 0x76, 0x6E, 0x6A, ++ 0xF2, 0xCE, 0xB0, 0x35, 0x99, 0xBA, 0x3D, 0xE3, 0x76, 0xEB, 0x57, 0x35, 0xEF, 0x16, 0x14, 0x39, 0x53, 0xD1, 0xFD, 0xDB, 0x7E, 0x9F, 0x28, 0x74, 0xB0, 0xD6, 0x08, 0x3D, 0xD7, 0xEC, 0x43, 0x86, ++ 0xAE, 0x00, 0x3F, 0x51, 0xCC, 0xF2, 0xD2, 0x1E, 0xF6, 0x05, 0x91, 0x63, 0xC5, 0x15, 0x21, 0x74, 0x42, 0x3F, 0x57, 0x11, 0x9D, 0x0F, 0xCE, 0x62, 0x7D, 0x76, 0x3D, 0x81, 0xC1, 0x0A, 0xA1, 0x32, ++ 0x9F, 0x74, 0xC8, 0xD4, 0x45, 0x43, 0x7B, 0xA6, 0x71, 0x8A, 0x33, 0xDB, 0x6E, 0x79, 0x37, 0x51, 0x72, 0xB2, 0xAE, 0x35, 0x91, 0x82, 0x19, 0x78, 0xD5, 0x20, 0x82, 0x4E, 0x2D, 0x2F, 0xF8, 0x98, ++ 0xB7, 0xF4, 0xC8, 0x67, 0xFF, 0x46, 0x27, 0x22, 0xBC, 0x07, 0xEA, 0xDA, 0xD3, 0x89, 0xA9, 0x10, 0xB6, 0xF6, 0x54, 0x29, 0xDA, 0x12, 0x97, 0x35, 0xFE, 0x04, 0x9E, 0x3E, 0xCB, 0x38, 0x89, 0xF6, ++ 0x04, 0x7C, 0xF2, 0xBD, 0x2A, 0x88, 0xD5, 0x0A, 0x65, 0x1B, 0x32, 0x35, 0xD2, 0x48, 0x0E, 0x1D, 0xA5, 0xA3, 0x52, 0x47, 0xFA, 0x76, 0xC8, 0x31, 0x73, 0x63, 0x99, 0xD3, 0x7E, 0x8D, 0x03, 0x3C, ++ 0x1D, 0x05, 0x1C, 0x9B, 0x6A, 0x99, 0xAB, 0x80, 0xB1, 0x31, 0x3F, 0xA2, 0x4C, 0x5C, 0x59, 0x76, 0x6E, 0x6C, 0x51, 0xA3, 0x8F, 0xE9, 0xF1, 0x18, 0x6A, 0x76, 0x7E, 0xEB, 0xD0, 0xD8, 0x80, 0x01, ++ 0xAE, 0x02, 0x46, 0xCD, 0x4E, 0xBE, 0x2C, 0x97, 0x9D, 0xE8, 0x2C, 0x30, 0xBB, 0xDB, 0x98, 0xB4, 0x74, 0x4F, 0x11, 0xF9, 0xE6, 0x39, 0xED, 0xDD, 0x8C, 0x19, 0x4D, 0x79, 0x11, 0x20, 0x1A, 0x8F, ++ 0xA7, 0x45, 0x99, 0x1B, 0x4D, 0x8A, 0x57, 0x09, 0xB6, 0x2A, 0x21, 0xB6, 0x3B, 0x97, 0x62, 0x91, 0x3D, 0x36, 0xCE, 0x99, 0x5C, 0x2D, 0x6B, 0x79, 0x15, 0x1E, 0x8D, 0x83, 0x83, 0x8C, 0xD1, 0xF3, ++ 0x88, 0x40, 0xA9, 0x41, 0x72, 0x55, 0xDD, 0x16, 0x6B, 0x7A, 0x35, 0x84, 0x49, 0x90, 0x03, 0xFB, 0x62, 0x56, 0x11, 0x40, 0x4C, 0x95, 0xB9, 0x60, 0xDF, 0x0D, 0xB1, 0xBC, 0xF1, 0x57, 0x4B, 0x09, ++ 0x65, 0xDB, 0xD8, 0x34, 0xEE, 0x14, 0x81, 0x17, 0xD5, 0xE0, 0x5A, 0x7C, 0xC7, 0xCC, 0x1A, 0x86, 0x56, 0x18, 0xA2, 0xBE, 0x48, 0x54, 0xDB, 0x89, 0x35, 0xCD, 0xA1, 0xE6, 0x8B, 0xD8, 0xD0, 0x9E, ++ 0x72, 0xF0, 0xAC, 0x90, 0x53, 0xC8, 0x82, 0xC4, 0xAB, 0xA4, 0x00, 0x4A, 0x61, 0x4D, 0x10, 0x50, 0x53, 0x00, 0xB6, 0x17, 0x6C, 0xA1, 0xF3, 0x24, 0xE2, 0x2E, 0x78, 0x24, 0x29, 0x9F, 0x9C, 0x40, ++ 0x75, 0x5B, 0x71, 0xD8, 0x2B, 0x67, 0x95, 0x47, 0xF0, 0x6A, 0xD4, 0x8B, 0xE6, 0x6D, 0x68, 0x07, 0x2C, 0x93, 0x90, 0x23, 0x3C, 0x93, 0x3F, 0x80, 0xA1, 0x4F, 0x8D, 0x4A, 0x6B, 0x0B, 0x4E, 0x19, ++ 0x70, 0xE1, 0xAC, 0xC1, 0xBE, 0xA7, 0xF5, 0xD3, 0xBE, 0x22, 0x44, 0x48, 0xF8, 0x57, 0xBA, 0xB6, 0x8A, 0xEF, 0xA6, 0xD8, 0xCB, 0x81, 0x9B, 0x64, 0x29, 0x4A, 0x12, 0x99, 0x79, 0x16, 0xCD, 0xBF, ++ 0x56, 0xE9, 0xA8, 0xD0, 0x02, 0xDD, 0x06, 0x5F, 0x12, 0xC6, 0x18, 0x23, 0xF4, 0xFC, 0x21, 0x45, 0x08, 0x23, 0x2E, 0x43, 0x1F, 0x0B, 0x68, 0x98, 0x47, 0x5B, 0xB5, 0xDD, 0x0D, 0x7D, 0x52, 0x8E, ++ 0x84, 0x0C, 0x22, 0x80, 0x9A, 0xF7, 0xE1, 0x53, 0x63, 0x72, 0x4A, 0x61, 0x3A, 0xCC, 0xFB, 0xE2, 0xB3, 0x74, 0x38, 0xC1, 0x59, 0xCE, 0x14, 0xCB, 0x0C, 0x98, 0xBF, 0xD4, 0x99, 0xC0, 0x8D, 0xAC, ++ 0x0C, 0xF4, 0x5D, 0x82, 0x1C, 0xC2, 0xFA, 0x47, 0x31, 0x9B, 0x6F, 0xB4, 0xCE, 0xD7, 0xE5, 0x98, 0x5E, 0xC8, 0x27, 0x4D, 0xE0, 0x90, 0x71, 0xD3, 0xC1, 0x0D, 0xA5, 0xBF, 0x9E, 0x52, 0x2B, 0x01, ++ 0xCE, 0x91, 0xD6, 0x6B, 0x91, 0x79, 0x5D, 0x3D, 0x22, 0xC0, 0x04, 0x83, 0x45, 0x42, 0x75, 0xDD, 0x2B, 0xBD, 0xD7, 0xC2, 0xDC, 0xC4, 0xA1, 0x67, 0xE5, 0xD7, 0xFC, 0xDB, 0xB9, 0xF6, 0x20, 0x8C, ++ 0xD4, 0xC9, 0xA4, 0x85, 0xFA, 0xAE, 0xB8, 0x09, 0xA7, 0x71, 0x1D, 0xAC, 0x28, 0x65, 0xCE, 0xD4, 0x30, 0x64, 0x74, 0xB2, 0x2B, 0x44, 0x48, 0xF8, 0x5D, 0xF3, 0x34, 0x17, 0xF3, 0xFA, 0xCE, 0x1C, ++ 0x05, 0xD4, 0x27, 0x03, 0xED, 0x31, 0x30, 0x42, 0xA0, 0x5D, 0xE0, 0x36, 0x27, 0x40, 0x13, 0x01, 0x88, 0xEC, 0xB4, 0x45, 0xBB, 0x25, 0x5D, 0xC7, 0x6E, 0xE8, 0x44, 0x3F, 0x73, 0x31, 0x17, 0xF8, ++ 0x35, 0x1F, 0x17, 0x60, 0x31, 0x75, 0x55, 0x4F, 0xEB, 0x00, 0xB7, 0xFF, 0x54, 0xD8, 0x07, 0x86, 0xF3, 0x05, 0xCD, 0xE1, 0x8C, 0xD5, 0xEC, 0x56, 0xEC, 0x09, 0x62, 0xA3, 0xE0, 0x44, 0x82, 0xDC, ++ 0xE3, 0x62, 0x2D, 0x04, 0x0D, 0x24, 0xC4, 0x0F, 0x2E, 0x8A, 0x14, 0xA4, 0x47, 0x65, 0x9D, 0x6C, 0x56, 0x1F, 0x2F, 0xFE, 0xE6, 0x8F, 0x8D, 0x3D, 0xE5, 0x11, 0xB2, 0x3E, 0x8B, 0x17, 0x2A, 0x01, ++ 0xA3, 0xED, 0xA4, 0xD3, 0x78, 0x0E, 0x74, 0xC6, 0x77, 0x24, 0x43, 0x30, 0xE9, 0xAE, 0xFF, 0x01, 0x9F, 0xE0, 0x7B, 0xE3, 0xD3, 0x3F, 0x32, 0x2F, 0x9C, 0xE2, 0x21, 0x4B, 0x9D, 0x9C, 0xFF, 0x99, ++ 0xD0, 0x5A, 0x59, 0xE4, 0x75, 0x51, 0x43, 0x2A, 0xE7, 0x6F, 0x4C, 0xD4, 0xF8, 0xDD, 0x51, 0x52, 0x0F, 0xFE, 0x81, 0x1B, 0x4B, 0x93, 0xCD, 0x62, 0x19, 0xC8, 0x1B, 0x63, 0xB1, 0xD6, 0x27, 0x78, ++ 0x5C, 0x2A, 0x0F, 0xC2, 0x2E, 0x3A, 0xEA, 0x86, 0xCE, 0xEE, 0x1F, 0x7F, 0xBC, 0x4E, 0xFC, 0xB4, 0x6D, 0xDF, 0xBC, 0xD8, 0x8A, 0x02, 0xF3, 0xB4, 0xE6, 0x7C, 0x5F, 0xF2, 0xE8, 0xDC, 0x68, 0xBF, ++ 0x16, 0xC7, 0x46, 0x99, 0xBB, 0xB6, 0x28, 0x90, 0x2F, 0x72, 0xC3, 0xDE, 0xBC, 0x8B, 0xF5, 0xDF, 0x70, 0x6D, 0x47, 0xA6, 0x05, 0xA1, 0x07, 0xDA, 0xA0, 0x01, 0x41, 0x39, 0xCE, 0x40, 0xF0, 0xD4, ++ 0x6D, 0x8D, 0x6D, 0xC7, ++ }, ++ .spki_len = 1990, ++ .spki = { ++ 0x30, 0x82, 0x07, 0xC2, 0x30, 0x0F, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0B, 0x07, 0x06, 0x05, 0x05, 0x00, 0x03, 0x82, 0x07, 0xAD, 0x00, 0x30, 0x82, 0x07, 0xA8, 0x03, 0x21, ++ 0x00, 0x1C, 0x0E, 0xE1, 0x11, 0x1B, 0x08, 0x00, 0x3F, 0x28, 0xE6, 0x5E, 0x8B, 0x3B, 0xDE, 0xB0, 0x37, 0xCF, 0x8F, 0x22, 0x1D, 0xFC, 0xDA, 0xF5, 0x95, 0x0E, 0xDB, 0x38, 0xD5, 0x06, 0xD8, 0x5B, ++ 0xEF, 0x03, 0x82, 0x07, 0x81, 0x00, 0xD9, 0xFD, 0xE3, 0xA4, 0x96, 0xF7, 0x58, 0x19, 0xF0, 0xA2, 0x0D, 0x04, 0x41, 0xDC, 0x78, 0x30, 0xB4, 0xAA, 0x1C, 0xB8, 0xEC, 0xFC, 0x91, 0xBA, 0x0E, 0xEC, ++ 0x3A, 0xFB, 0x67, 0x44, 0xE4, 0x77, 0xB4, 0xE6, 0xEC, 0x3F, 0xDA, 0xE7, 0x50, 0x48, 0xFF, 0xEB, 0xAA, 0xBE, 0xA8, 0xE8, 0x22, 0x11, 0x7D, 0x57, 0x87, 0xF7, 0x90, 0x70, 0xEA, 0x88, 0x28, 0x7C, ++ 0xE3, 0xCD, 0x50, 0x11, 0xFD, 0x8D, 0x93, 0xAB, 0x7E, 0x8B, 0x51, 0xF2, 0x61, 0x16, 0xBF, 0x9B, 0x6D, 0x21, 0xC0, 0x3F, 0x88, 0xBF, 0xEC, 0x48, 0x88, 0x76, 0xF4, 0xD0, 0x75, 0xA1, 0x42, 0xD4, ++ 0xE7, 0x84, 0xD7, 0x34, 0x40, 0x75, 0x11, 0xF9, 0x92, 0x06, 0x93, 0x53, 0xF1, 0xDB, 0x67, 0xAC, 0xF7, 0x30, 0x34, 0xA4, 0x68, 0xA1, 0x18, 0x58, 0x80, 0x62, 0x11, 0x1D, 0x32, 0x0E, 0x00, 0xBC, ++ 0xFF, 0x6D, 0xC6, 0x35, 0x73, 0xFC, 0xED, 0x1E, 0x96, 0xAA, 0xEB, 0xA6, 0x45, 0x2E, 0x3C, 0x7A, 0xCD, 0x19, 0x18, 0x1F, 0x9B, 0x81, 0x4B, 0xA1, 0x9D, 0x39, 0xB4, 0xBA, 0xB5, 0x49, 0x6D, 0xC0, ++ 0x55, 0x42, 0x6E, 0x7E, 0xA4, 0x61, 0xAF, 0x55, 0xD5, 0xB9, 0xFE, 0x97, 0xF9, 0xDF, 0x7E, 0x25, 0x32, 0x03, 0xC1, 0xF9, 0xE1, 0x52, 0xE9, 0x6D, 0x75, 0xF9, 0xD9, 0xA8, 0x4F, 0x5C, 0x26, 0x3E, ++ 0xC8, 0xC2, 0x50, 0x44, 0x0A, 0xDC, 0x98, 0x6F, 0x4E, 0x36, 0x41, 0x4C, 0x70, 0x3B, 0x3E, 0x05, 0x42, 0x6B, 0x28, 0xB7, 0x06, 0x59, 0x50, 0xDA, 0x6D, 0x0E, 0x0B, 0x2C, 0x60, 0xAC, 0x36, 0x72, ++ 0xDB, 0x6F, 0x3C, 0x78, 0x44, 0x7D, 0xB7, 0xC2, 0x09, 0x15, 0x77, 0x0E, 0xA6, 0xFC, 0xE8, 0x1D, 0xAB, 0x53, 0x39, 0xC1, 0xD5, 0xAF, 0x82, 0xA5, 0xD3, 0x32, 0x40, 0x99, 0xDF, 0x56, 0x51, 0x6A, ++ 0x07, 0xDB, 0x7C, 0x0F, 0xC6, 0x43, 0x83, 0x80, 0x5C, 0x65, 0xF2, 0xB0, 0x2F, 0xBC, 0xFC, 0xE6, 0x3E, 0x93, 0xC4, 0xBF, 0x09, 0x40, 0x9F, 0x9F, 0x0F, 0x77, 0xE7, 0x3D, 0xA3, 0xB0, 0x01, 0x9F, ++ 0x20, 0x57, 0xE4, 0xCD, 0x7C, 0xFF, 0x0E, 0x57, 0x45, 0xEF, 0x18, 0xC3, 0xFD, 0x76, 0x6E, 0x01, 0x74, 0x7A, 0x64, 0xD4, 0x15, 0xFC, 0x97, 0x89, 0xAB, 0xFA, 0x62, 0x28, 0x4E, 0x11, 0xC7, 0xFF, ++ 0x05, 0xD0, 0x54, 0x8D, 0x97, 0x3F, 0x67, 0x95, 0x59, 0xA6, 0xA3, 0xAA, 0xD7, 0x7E, 0xD5, 0x13, 0x2D, 0x01, 0x50, 0xC0, 0x14, 0xC3, 0xEC, 0x3A, 0x39, 0x5F, 0x01, 0x7E, 0x7A, 0xCF, 0xE3, 0xEA, ++ 0xBF, 0xCA, 0x44, 0x91, 0x0C, 0xA0, 0x6F, 0xF3, 0x35, 0x42, 0xEC, 0xCE, 0x62, 0x41, 0x97, 0x47, 0x42, 0x35, 0x7D, 0x37, 0xF5, 0xC2, 0x84, 0xBF, 0x0F, 0xE1, 0xA7, 0x4B, 0x50, 0xC0, 0x73, 0x55, ++ 0x13, 0x72, 0x13, 0x3A, 0xF2, 0xDD, 0x41, 0xE2, 0x1B, 0xAF, 0xC9, 0xC5, 0x90, 0xEE, 0x6E, 0xBC, 0x4A, 0xCE, 0x73, 0x1E, 0xF5, 0x66, 0x15, 0x6C, 0xA0, 0x37, 0x55, 0xDC, 0x49, 0x3C, 0x13, 0x70, ++ 0x28, 0xAF, 0x3B, 0x3D, 0xE5, 0xB0, 0x0B, 0xD6, 0xCB, 0x3D, 0x9A, 0x87, 0xD0, 0x15, 0x1F, 0x88, 0x7C, 0x67, 0x68, 0xBC, 0x6C, 0xA0, 0x2A, 0x94, 0xFB, 0x20, 0x86, 0x55, 0x1A, 0x0F, 0x89, 0xBA, ++ 0x26, 0x15, 0x4E, 0x9D, 0x45, 0x06, 0xAD, 0x9F, 0xAF, 0x39, 0xF5, 0x72, 0x3E, 0x23, 0x4E, 0x06, 0xCF, 0xDE, 0xD6, 0x9D, 0x4E, 0xE4, 0x14, 0x6B, 0x73, 0xE5, 0xDC, 0x1E, 0x41, 0x52, 0xA2, 0xA3, ++ 0x15, 0x9D, 0x73, 0xDB, 0xC8, 0x33, 0xD3, 0xD4, 0x17, 0xCD, 0x5C, 0xF7, 0xFB, 0x3D, 0xC7, 0x74, 0x5C, 0xEE, 0xD4, 0xDC, 0x0F, 0x5B, 0x1C, 0x6D, 0x6B, 0x69, 0xC1, 0x76, 0x41, 0x57, 0xEA, 0x43, ++ 0xDF, 0x9D, 0xBB, 0x44, 0x2E, 0xFA, 0x39, 0xD1, 0xD0, 0x16, 0x2E, 0x87, 0xC2, 0xD3, 0x0C, 0x50, 0x12, 0xFD, 0x16, 0xD8, 0x69, 0xC8, 0xA1, 0xFC, 0xBB, 0x45, 0xED, 0xCC, 0x8E, 0x18, 0x13, 0xB2, ++ 0xB1, 0x90, 0xA9, 0x61, 0xF9, 0xFC, 0x86, 0x59, 0x1D, 0x3A, 0xBC, 0x53, 0x88, 0xAF, 0x67, 0x8F, 0xF0, 0x3D, 0xA7, 0x8B, 0x7C, 0xC0, 0xF6, 0x18, 0x57, 0x21, 0xC0, 0xDF, 0x33, 0xCC, 0x90, 0x64, ++ 0x35, 0x22, 0x5D, 0xF2, 0x61, 0x10, 0x02, 0xDF, 0x12, 0x0E, 0x83, 0x56, 0x65, 0x32, 0x29, 0x2D, 0xEA, 0x3D, 0x8A, 0xCD, 0x10, 0x9A, 0x0D, 0xFF, 0xAB, 0x3B, 0x0B, 0x43, 0x01, 0x27, 0x96, 0xDB, ++ 0x5B, 0x50, 0x68, 0x3F, 0xB4, 0xC2, 0xD2, 0x50, 0xDA, 0xB7, 0x6A, 0xAE, 0x35, 0xA4, 0x8E, 0x8C, 0x8D, 0x4A, 0x5C, 0xC1, 0x54, 0x75, 0x97, 0x45, 0xF0, 0xA1, 0x23, 0x0F, 0x6C, 0xA9, 0xDD, 0x9C, ++ 0x99, 0xE2, 0xF8, 0x0E, 0xDC, 0x83, 0x30, 0x4C, 0xE0, 0x1E, 0x98, 0xF6, 0xC9, 0x48, 0x95, 0x29, 0xA8, 0x22, 0xF9, 0x00, 0x33, 0xC2, 0x28, 0x31, 0x5E, 0xB2, 0xFC, 0xC8, 0xDB, 0xA3, 0x82, 0xED, ++ 0x43, 0x01, 0xE0, 0x76, 0x07, 0xA5, 0xB0, 0x76, 0xC7, 0x25, 0xF1, 0x24, 0x99, 0x4F, 0x18, 0xA9, 0x97, 0xD2, 0xC5, 0xBB, 0xF9, 0xA3, 0x24, 0x60, 0x52, 0x65, 0x10, 0x8A, 0xCB, 0xF4, 0x61, 0x0F, ++ 0xA1, 0xC3, 0x37, 0x44, 0x08, 0x85, 0x0A, 0x08, 0x64, 0xE2, 0xB6, 0x10, 0x17, 0xEB, 0xEC, 0x1F, 0xBA, 0xB8, 0x9D, 0xE3, 0xAB, 0x1B, 0x93, 0xCE, 0x49, 0x18, 0xB9, 0xE2, 0xC9, 0xE3, 0xFE, 0x45, ++ 0x67, 0x58, 0x06, 0x2A, 0x9F, 0x88, 0x2B, 0x28, 0x33, 0x18, 0x27, 0x1F, 0x4B, 0x95, 0x52, 0xFC, 0xF3, 0x26, 0x24, 0xA9, 0xFD, 0xAA, 0x44, 0xC6, 0x5C, 0x60, 0xE2, 0xB3, 0x64, 0x8B, 0xEF, 0x1F, ++ 0x17, 0xD0, 0xB7, 0xC7, 0x48, 0x69, 0xEE, 0x0B, 0x53, 0xC4, 0xA6, 0x2A, 0x24, 0x84, 0x5D, 0xCE, 0xA5, 0xBC, 0xBF, 0x93, 0xB9, 0x2E, 0x4C, 0x26, 0x64, 0x85, 0x84, 0xE3, 0x34, 0x79, 0x28, 0x2E, ++ 0x6C, 0x8B, 0x1D, 0x8F, 0xE2, 0x11, 0x81, 0xBD, 0x9C, 0xF7, 0x5F, 0x8A, 0x96, 0x17, 0x24, 0xD4, 0xC4, 0x30, 0x97, 0x79, 0xF1, 0xF1, 0xB7, 0x75, 0xD2, 0x54, 0xF7, 0x0B, 0xD1, 0x76, 0x9C, 0xC7, ++ 0xC0, 0xED, 0xD2, 0xA9, 0x5F, 0xE5, 0xC9, 0xD8, 0x4B, 0x16, 0xF7, 0xC5, 0x4D, 0x85, 0xCC, 0xE4, 0xC8, 0xA1, 0x82, 0x81, 0x08, 0x09, 0xED, 0x81, 0xE9, 0x7D, 0x07, 0x48, 0x84, 0xEE, 0xDF, 0x40, ++ 0x1C, 0xCA, 0xCD, 0xAE, 0xAD, 0x82, 0xC1, 0x4D, 0x06, 0xB6, 0x8A, 0xEA, 0x6C, 0xE1, 0x4B, 0x86, 0x1B, 0x0C, 0xFD, 0x16, 0x09, 0x0C, 0xBB, 0xF4, 0x69, 0xC5, 0xE0, 0x84, 0x31, 0x4C, 0x0D, 0x8D, ++ 0x39, 0x60, 0xEA, 0x06, 0xA3, 0x42, 0x6D, 0x8B, 0x3F, 0xE7, 0x62, 0xE0, 0x0D, 0x09, 0xBD, 0xA3, 0x74, 0xF3, 0xAE, 0x2C, 0xBE, 0xDE, 0x28, 0x38, 0xFF, 0x89, 0xD8, 0x1D, 0xEB, 0x30, 0x13, 0x09, ++ 0x0E, 0x44, 0x19, 0x9A, 0xED, 0x60, 0x49, 0x63, 0xEA, 0xF9, 0x19, 0x91, 0x4C, 0xE0, 0x4F, 0x20, 0x7A, 0xC8, 0x2C, 0xD4, 0x35, 0x1F, 0xEF, 0x7B, 0x2D, 0x94, 0x39, 0x30, 0x66, 0xFE, 0x4D, 0x44, ++ 0xE3, 0xCC, 0x59, 0x52, 0xE7, 0x5E, 0xB6, 0xF3, 0x71, 0x40, 0x58, 0x91, 0x5D, 0xE0, 0xEE, 0x18, 0x4D, 0x8C, 0x55, 0x30, 0x0F, 0x57, 0x6A, 0x8B, 0x82, 0xA8, 0x63, 0xE8, 0x1A, 0xF3, 0x34, 0x17, ++ 0xBD, 0x4C, 0xFC, 0x94, 0xE7, 0xA6, 0x12, 0x63, 0xB3, 0x9F, 0x01, 0xF6, 0xE2, 0xE7, 0x07, 0x48, 0xB6, 0xE5, 0xE5, 0x9C, 0xF6, 0xCA, 0x01, 0xB0, 0x02, 0x8C, 0x93, 0xBB, 0xBC, 0xEB, 0xC5, 0x48, ++ 0xF9, 0x87, 0xF1, 0x07, 0x55, 0xBF, 0x33, 0xCA, 0x58, 0x5C, 0xB4, 0x1C, 0xF5, 0x78, 0xDF, 0x5F, 0xFE, 0x37, 0x92, 0x4E, 0x3C, 0x2C, 0x07, 0x2E, 0xD1, 0xDA, 0xC9, 0x16, 0x21, 0x76, 0x97, 0x29, ++ 0x71, 0xE7, 0x9B, 0x62, 0xFB, 0x20, 0x8F, 0x1A, 0x73, 0xBF, 0x03, 0x61, 0xE2, 0x99, 0x3D, 0xCC, 0xCD, 0x31, 0x10, 0xC3, 0x4D, 0x83, 0x9D, 0x18, 0xDD, 0x43, 0xA5, 0xE8, 0xF0, 0xD9, 0x41, 0xE9, ++ 0x9A, 0xDC, 0xF4, 0x41, 0x40, 0x5F, 0x32, 0x10, 0x76, 0x71, 0xB2, 0xD8, 0xB2, 0x24, 0x4F, 0x7B, 0xA9, 0x2D, 0xCE, 0xD5, 0x87, 0xA2, 0x10, 0xFE, 0x8F, 0xF4, 0x3C, 0x61, 0x6A, 0xCB, 0x5E, 0x76, ++ 0x6E, 0x6A, 0xF2, 0xCE, 0xB0, 0x35, 0x99, 0xBA, 0x3D, 0xE3, 0x76, 0xEB, 0x57, 0x35, 0xEF, 0x16, 0x14, 0x39, 0x53, 0xD1, 0xFD, 0xDB, 0x7E, 0x9F, 0x28, 0x74, 0xB0, 0xD6, 0x08, 0x3D, 0xD7, 0xEC, ++ 0x43, 0x86, 0xAE, 0x00, 0x3F, 0x51, 0xCC, 0xF2, 0xD2, 0x1E, 0xF6, 0x05, 0x91, 0x63, 0xC5, 0x15, 0x21, 0x74, 0x42, 0x3F, 0x57, 0x11, 0x9D, 0x0F, 0xCE, 0x62, 0x7D, 0x76, 0x3D, 0x81, 0xC1, 0x0A, ++ 0xA1, 0x32, 0x9F, 0x74, 0xC8, 0xD4, 0x45, 0x43, 0x7B, 0xA6, 0x71, 0x8A, 0x33, 0xDB, 0x6E, 0x79, 0x37, 0x51, 0x72, 0xB2, 0xAE, 0x35, 0x91, 0x82, 0x19, 0x78, 0xD5, 0x20, 0x82, 0x4E, 0x2D, 0x2F, ++ 0xF8, 0x98, 0xB7, 0xF4, 0xC8, 0x67, 0xFF, 0x46, 0x27, 0x22, 0xBC, 0x07, 0xEA, 0xDA, 0xD3, 0x89, 0xA9, 0x10, 0xB6, 0xF6, 0x54, 0x29, 0xDA, 0x12, 0x97, 0x35, 0xFE, 0x04, 0x9E, 0x3E, 0xCB, 0x38, ++ 0x89, 0xF6, 0x04, 0x7C, 0xF2, 0xBD, 0x2A, 0x88, 0xD5, 0x0A, 0x65, 0x1B, 0x32, 0x35, 0xD2, 0x48, 0x0E, 0x1D, 0xA5, 0xA3, 0x52, 0x47, 0xFA, 0x76, 0xC8, 0x31, 0x73, 0x63, 0x99, 0xD3, 0x7E, 0x8D, ++ 0x03, 0x3C, 0x1D, 0x05, 0x1C, 0x9B, 0x6A, 0x99, 0xAB, 0x80, 0xB1, 0x31, 0x3F, 0xA2, 0x4C, 0x5C, 0x59, 0x76, 0x6E, 0x6C, 0x51, 0xA3, 0x8F, 0xE9, 0xF1, 0x18, 0x6A, 0x76, 0x7E, 0xEB, 0xD0, 0xD8, ++ 0x80, 0x01, 0xAE, 0x02, 0x46, 0xCD, 0x4E, 0xBE, 0x2C, 0x97, 0x9D, 0xE8, 0x2C, 0x30, 0xBB, 0xDB, 0x98, 0xB4, 0x74, 0x4F, 0x11, 0xF9, 0xE6, 0x39, 0xED, 0xDD, 0x8C, 0x19, 0x4D, 0x79, 0x11, 0x20, ++ 0x1A, 0x8F, 0xA7, 0x45, 0x99, 0x1B, 0x4D, 0x8A, 0x57, 0x09, 0xB6, 0x2A, 0x21, 0xB6, 0x3B, 0x97, 0x62, 0x91, 0x3D, 0x36, 0xCE, 0x99, 0x5C, 0x2D, 0x6B, 0x79, 0x15, 0x1E, 0x8D, 0x83, 0x83, 0x8C, ++ 0xD1, 0xF3, 0x88, 0x40, 0xA9, 0x41, 0x72, 0x55, 0xDD, 0x16, 0x6B, 0x7A, 0x35, 0x84, 0x49, 0x90, 0x03, 0xFB, 0x62, 0x56, 0x11, 0x40, 0x4C, 0x95, 0xB9, 0x60, 0xDF, 0x0D, 0xB1, 0xBC, 0xF1, 0x57, ++ 0x4B, 0x09, 0x65, 0xDB, 0xD8, 0x34, 0xEE, 0x14, 0x81, 0x17, 0xD5, 0xE0, 0x5A, 0x7C, 0xC7, 0xCC, 0x1A, 0x86, 0x56, 0x18, 0xA2, 0xBE, 0x48, 0x54, 0xDB, 0x89, 0x35, 0xCD, 0xA1, 0xE6, 0x8B, 0xD8, ++ 0xD0, 0x9E, 0x72, 0xF0, 0xAC, 0x90, 0x53, 0xC8, 0x82, 0xC4, 0xAB, 0xA4, 0x00, 0x4A, 0x61, 0x4D, 0x10, 0x50, 0x53, 0x00, 0xB6, 0x17, 0x6C, 0xA1, 0xF3, 0x24, 0xE2, 0x2E, 0x78, 0x24, 0x29, 0x9F, ++ 0x9C, 0x40, 0x75, 0x5B, 0x71, 0xD8, 0x2B, 0x67, 0x95, 0x47, 0xF0, 0x6A, 0xD4, 0x8B, 0xE6, 0x6D, 0x68, 0x07, 0x2C, 0x93, 0x90, 0x23, 0x3C, 0x93, 0x3F, 0x80, 0xA1, 0x4F, 0x8D, 0x4A, 0x6B, 0x0B, ++ 0x4E, 0x19, 0x70, 0xE1, 0xAC, 0xC1, 0xBE, 0xA7, 0xF5, 0xD3, 0xBE, 0x22, 0x44, 0x48, 0xF8, 0x57, 0xBA, 0xB6, 0x8A, 0xEF, 0xA6, 0xD8, 0xCB, 0x81, 0x9B, 0x64, 0x29, 0x4A, 0x12, 0x99, 0x79, 0x16, ++ 0xCD, 0xBF, 0x56, 0xE9, 0xA8, 0xD0, 0x02, 0xDD, 0x06, 0x5F, 0x12, 0xC6, 0x18, 0x23, 0xF4, 0xFC, 0x21, 0x45, 0x08, 0x23, 0x2E, 0x43, 0x1F, 0x0B, 0x68, 0x98, 0x47, 0x5B, 0xB5, 0xDD, 0x0D, 0x7D, ++ 0x52, 0x8E, 0x84, 0x0C, 0x22, 0x80, 0x9A, 0xF7, 0xE1, 0x53, 0x63, 0x72, 0x4A, 0x61, 0x3A, 0xCC, 0xFB, 0xE2, 0xB3, 0x74, 0x38, 0xC1, 0x59, 0xCE, 0x14, 0xCB, 0x0C, 0x98, 0xBF, 0xD4, 0x99, 0xC0, ++ 0x8D, 0xAC, 0x0C, 0xF4, 0x5D, 0x82, 0x1C, 0xC2, 0xFA, 0x47, 0x31, 0x9B, 0x6F, 0xB4, 0xCE, 0xD7, 0xE5, 0x98, 0x5E, 0xC8, 0x27, 0x4D, 0xE0, 0x90, 0x71, 0xD3, 0xC1, 0x0D, 0xA5, 0xBF, 0x9E, 0x52, ++ 0x2B, 0x01, 0xCE, 0x91, 0xD6, 0x6B, 0x91, 0x79, 0x5D, 0x3D, 0x22, 0xC0, 0x04, 0x83, 0x45, 0x42, 0x75, 0xDD, 0x2B, 0xBD, 0xD7, 0xC2, 0xDC, 0xC4, 0xA1, 0x67, 0xE5, 0xD7, 0xFC, 0xDB, 0xB9, 0xF6, ++ 0x20, 0x8C, 0xD4, 0xC9, 0xA4, 0x85, 0xFA, 0xAE, 0xB8, 0x09, 0xA7, 0x71, 0x1D, 0xAC, 0x28, 0x65, 0xCE, 0xD4, 0x30, 0x64, 0x74, 0xB2, 0x2B, 0x44, 0x48, 0xF8, 0x5D, 0xF3, 0x34, 0x17, 0xF3, 0xFA, ++ 0xCE, 0x1C, 0x05, 0xD4, 0x27, 0x03, 0xED, 0x31, 0x30, 0x42, 0xA0, 0x5D, 0xE0, 0x36, 0x27, 0x40, 0x13, 0x01, 0x88, 0xEC, 0xB4, 0x45, 0xBB, 0x25, 0x5D, 0xC7, 0x6E, 0xE8, 0x44, 0x3F, 0x73, 0x31, ++ 0x17, 0xF8, 0x35, 0x1F, 0x17, 0x60, 0x31, 0x75, 0x55, 0x4F, 0xEB, 0x00, 0xB7, 0xFF, 0x54, 0xD8, 0x07, 0x86, 0xF3, 0x05, 0xCD, 0xE1, 0x8C, 0xD5, 0xEC, 0x56, 0xEC, 0x09, 0x62, 0xA3, 0xE0, 0x44, ++ 0x82, 0xDC, 0xE3, 0x62, 0x2D, 0x04, 0x0D, 0x24, 0xC4, 0x0F, 0x2E, 0x8A, 0x14, 0xA4, 0x47, 0x65, 0x9D, 0x6C, 0x56, 0x1F, 0x2F, 0xFE, 0xE6, 0x8F, 0x8D, 0x3D, 0xE5, 0x11, 0xB2, 0x3E, 0x8B, 0x17, ++ 0x2A, 0x01, 0xA3, 0xED, 0xA4, 0xD3, 0x78, 0x0E, 0x74, 0xC6, 0x77, 0x24, 0x43, 0x30, 0xE9, 0xAE, 0xFF, 0x01, 0x9F, 0xE0, 0x7B, 0xE3, 0xD3, 0x3F, 0x32, 0x2F, 0x9C, 0xE2, 0x21, 0x4B, 0x9D, 0x9C, ++ 0xFF, 0x99, 0xD0, 0x5A, 0x59, 0xE4, 0x75, 0x51, 0x43, 0x2A, 0xE7, 0x6F, 0x4C, 0xD4, 0xF8, 0xDD, 0x51, 0x52, 0x0F, 0xFE, 0x81, 0x1B, 0x4B, 0x93, 0xCD, 0x62, 0x19, 0xC8, 0x1B, 0x63, 0xB1, 0xD6, ++ 0x27, 0x78, 0x5C, 0x2A, 0x0F, 0xC2, 0x2E, 0x3A, 0xEA, 0x86, 0xCE, 0xEE, 0x1F, 0x7F, 0xBC, 0x4E, 0xFC, 0xB4, 0x6D, 0xDF, 0xBC, 0xD8, 0x8A, 0x02, 0xF3, 0xB4, 0xE6, 0x7C, 0x5F, 0xF2, 0xE8, 0xDC, ++ 0x68, 0xBF, 0x16, 0xC7, 0x46, 0x99, 0xBB, 0xB6, 0x28, 0x90, 0x2F, 0x72, 0xC3, 0xDE, 0xBC, 0x8B, 0xF5, 0xDF, 0x70, 0x6D, 0x47, 0xA6, 0x05, 0xA1, 0x07, 0xDA, 0xA0, 0x01, 0x41, 0x39, 0xCE, 0x40, ++ 0xF0, 0xD4, 0x6D, 0x8D, 0x6D, 0xC7, ++ }, ++ .msg_len = 33, ++ .msg = { 0xD8, 0x1C, 0x4D, 0x8D, 0x73, 0x4F, 0xCB, 0xFB, 0xEA, 0xDE, 0x3D, 0x3F, 0x8A, 0x03, 0x9F, 0xAA, 0x2A, 0x2C, 0x99, 0x57, 0xE8, 0x35, 0xAD, 0x55, 0xB2, 0x2E, 0x75, 0xBF, 0x57, 0xBB, 0x55, 0x6A, ++ 0xC8 }, ++ .sig_len = 3293, ++ .sig = { ++ 0xB0, 0x55, 0xB0, 0xE1, 0x76, 0x10, 0xBF, 0x54, 0xB3, 0x3B, 0x96, 0x09, 0x8D, 0x79, 0x6E, 0x98, 0xF7, 0x89, 0x9F, 0x48, 0x56, 0xCB, 0xC8, 0xD7, 0x04, 0xF9, 0xD7, 0x77, 0x8C, 0x18, 0x77, 0xF1, ++ 0xE1, 0x24, 0xBF, 0x62, 0xA0, 0xD1, 0x7F, 0x01, 0x3B, 0xE4, 0x34, 0x0F, 0xD5, 0x7B, 0x4F, 0xA6, 0x22, 0x2D, 0x9C, 0xDB, 0x90, 0x28, 0xE8, 0xB0, 0x2B, 0x92, 0x6E, 0x15, 0x54, 0xD1, 0x45, 0xF4, ++ 0x47, 0x98, 0xAA, 0xC2, 0xFA, 0xA2, 0x03, 0x3C, 0x4A, 0xEF, 0xB6, 0xCC, 0xB6, 0xCF, 0xE5, 0xC2, 0xA6, 0x23, 0x8E, 0xE7, 0x9C, 0x5C, 0xC2, 0xF0, 0xE8, 0x04, 0xBE, 0xD1, 0x7F, 0x75, 0xC1, 0xF3, ++ 0x99, 0x4D, 0xD7, 0xE7, 0xA0, 0xF2, 0xA7, 0x03, 0x4C, 0x0C, 0x8C, 0x98, 0x64, 0x80, 0x40, 0x57, 0xE2, 0xE5, 0x57, 0x67, 0x3F, 0xDF, 0xD6, 0x64, 0x35, 0x6F, 0xAB, 0xD0, 0x51, 0xF9, 0x07, 0x5B, ++ 0x34, 0x00, 0xA0, 0xC7, 0xE8, 0x45, 0x59, 0x55, 0x3E, 0xDF, 0x98, 0x9B, 0xFF, 0xD2, 0x11, 0x2B, 0x29, 0x60, 0x22, 0x03, 0x06, 0x6B, 0xDE, 0xA7, 0x84, 0x35, 0xEB, 0xC6, 0xE3, 0x81, 0x8C, 0xC9, ++ 0x2D, 0x61, 0xBC, 0xC1, 0x25, 0xA8, 0x57, 0x5B, 0x5A, 0x8A, 0xEE, 0x42, 0x25, 0xFB, 0x9C, 0x62, 0x48, 0x3F, 0x3E, 0xD1, 0x18, 0x5A, 0x6A, 0x96, 0x82, 0x2E, 0x5E, 0xFC, 0x1B, 0xA7, 0xCD, 0x8D, ++ 0x5F, 0xD8, 0xCC, 0x18, 0x7D, 0x2A, 0x26, 0x69, 0xCA, 0xDF, 0x58, 0xFA, 0xD6, 0x62, 0x89, 0x79, 0x4C, 0x96, 0x48, 0x5B, 0x2C, 0x46, 0x45, 0xC7, 0xD3, 0xD3, 0x56, 0x84, 0xB7, 0x42, 0x9B, 0x5E, ++ 0xF3, 0x15, 0x45, 0x76, 0x99, 0xBE, 0x80, 0x30, 0xBC, 0x3D, 0xEB, 0x81, 0x66, 0x60, 0x2A, 0xC5, 0x48, 0x19, 0x82, 0x48, 0x83, 0xA2, 0x46, 0xC8, 0xA1, 0xA3, 0x4F, 0xC8, 0x9B, 0x2F, 0xE0, 0x32, ++ 0x9B, 0x5C, 0xA0, 0x5D, 0x4E, 0x14, 0xB6, 0xDF, 0xFC, 0x21, 0x44, 0x60, 0x6A, 0xB3, 0x60, 0xBB, 0x3B, 0x8A, 0xC5, 0xA1, 0x78, 0x99, 0x8B, 0x46, 0x21, 0x81, 0x81, 0xCA, 0xC8, 0xDE, 0x4C, 0x29, ++ 0x48, 0x30, 0xD4, 0x9D, 0x8F, 0x00, 0xEC, 0x12, 0xC3, 0xD3, 0xAC, 0x7B, 0x4A, 0x2C, 0x30, 0x17, 0x58, 0xE6, 0x8A, 0x56, 0x81, 0x17, 0x7F, 0xF2, 0xA7, 0x5D, 0x1D, 0x4B, 0xF1, 0xC9, 0x26, 0x88, ++ 0x0B, 0x34, 0xB7, 0x28, 0xF7, 0xC3, 0x2E, 0x40, 0x60, 0x99, 0xD9, 0x5A, 0xB4, 0x48, 0x92, 0xF7, 0x48, 0xAA, 0xFE, 0xB5, 0x5B, 0x26, 0xBE, 0x31, 0x75, 0x12, 0xB0, 0x37, 0x7D, 0xBE, 0x89, 0x1A, ++ 0xC5, 0x45, 0x6A, 0x92, 0x4C, 0x36, 0x83, 0x9B, 0xC8, 0x01, 0xDB, 0x2A, 0xC5, 0xB7, 0x11, 0x0A, 0x9B, 0xAF, 0x4C, 0x3C, 0x49, 0xD0, 0x05, 0x39, 0x3C, 0xDF, 0xFA, 0xD4, 0xF9, 0x68, 0x61, 0x20, ++ 0xF4, 0xFD, 0xE0, 0x16, 0x8A, 0x9E, 0x45, 0x8E, 0x72, 0x9F, 0x4B, 0x0A, 0xE1, 0xA4, 0xC4, 0x12, 0x4C, 0xA3, 0x4D, 0xF5, 0xB6, 0x3B, 0xC2, 0xE7, 0xCB, 0xEE, 0x01, 0xA3, 0x8D, 0x31, 0xA0, 0xED, ++ 0x8D, 0x3C, 0x4C, 0x38, 0x03, 0xC3, 0xC2, 0x4C, 0x5C, 0xAD, 0xEB, 0xE3, 0xE9, 0x1A, 0x8D, 0x2E, 0x1B, 0xFC, 0xF0, 0x50, 0x8A, 0x27, 0x88, 0xD8, 0x9D, 0xFE, 0xA2, 0x0F, 0xD6, 0x38, 0x18, 0xB8, ++ 0x39, 0x60, 0xA6, 0xCF, 0x93, 0x08, 0x72, 0xB9, 0x57, 0x85, 0x57, 0x50, 0x88, 0xCF, 0x7E, 0x8B, 0x63, 0xA1, 0x89, 0x5A, 0x8C, 0x1C, 0x77, 0xA8, 0x4C, 0xB9, 0xCC, 0x6B, 0xD1, 0xD5, 0xFA, 0x93, ++ 0x96, 0x77, 0xAF, 0x17, 0xEE, 0xBE, 0x2D, 0x2E, 0xE6, 0x84, 0xC6, 0x60, 0x15, 0xF1, 0xBB, 0x14, 0x2A, 0x72, 0x77, 0x79, 0x58, 0x0D, 0xA1, 0xBC, 0x5E, 0x97, 0x5A, 0xA5, 0x6E, 0xF5, 0xD7, 0x7A, ++ 0x84, 0x07, 0xE5, 0x06, 0xA5, 0xDE, 0xEE, 0xA5, 0xE8, 0xB0, 0x79, 0x7F, 0x10, 0x64, 0x60, 0x05, 0x64, 0x80, 0x22, 0x21, 0x3C, 0xCB, 0x86, 0xA7, 0x7D, 0xF5, 0xD7, 0xB3, 0x16, 0xE8, 0x5D, 0x55, ++ 0xB9, 0xDA, 0x0F, 0xDF, 0xD5, 0xF2, 0x35, 0x52, 0xDD, 0x47, 0xCC, 0xFA, 0x96, 0x4A, 0xC3, 0x9E, 0xE6, 0x84, 0xBD, 0x63, 0x79, 0x3B, 0xB7, 0xDC, 0xAB, 0x69, 0xBE, 0x7E, 0xD9, 0x4D, 0x8D, 0xDB, ++ 0xA1, 0x85, 0xE8, 0x0A, 0x7A, 0xAE, 0xE7, 0x4E, 0x87, 0x8F, 0x50, 0xA2, 0x13, 0xF3, 0xB4, 0xFF, 0xB6, 0x6E, 0x6D, 0x34, 0xA3, 0x9C, 0x0A, 0xAE, 0x2B, 0x1D, 0x61, 0x36, 0x6F, 0xE4, 0x03, 0x53, ++ 0x9C, 0x69, 0xA0, 0x88, 0x75, 0x1F, 0x56, 0x90, 0x1A, 0x10, 0xBC, 0x44, 0x23, 0x13, 0xA3, 0x5C, 0x2D, 0x83, 0x54, 0x76, 0xD0, 0xFA, 0xD4, 0x47, 0xC7, 0x70, 0x08, 0x0F, 0xA4, 0x1B, 0xF3, 0x8D, ++ 0x68, 0x5F, 0xB3, 0x1B, 0x11, 0xA7, 0xD2, 0xE6, 0xFB, 0x52, 0x67, 0x3D, 0x16, 0x87, 0x23, 0xE6, 0x89, 0x08, 0xC0, 0x67, 0x2A, 0x0F, 0x36, 0xE2, 0x5A, 0x19, 0x9E, 0x17, 0xA6, 0xFE, 0x5B, 0x8B, ++ 0x82, 0x5B, 0x96, 0xEA, 0xB7, 0xAB, 0x4B, 0x7D, 0x83, 0x81, 0xDB, 0xC5, 0x00, 0x31, 0xA5, 0xF2, 0xE0, 0x9E, 0x4B, 0xE8, 0x71, 0x53, 0x3A, 0xDC, 0x5D, 0x08, 0xD0, 0x09, 0x42, 0x9B, 0xBF, 0x5C, ++ 0x86, 0xF8, 0x12, 0x0D, 0x09, 0x5C, 0x8E, 0xEC, 0xBE, 0xF3, 0xE0, 0x99, 0xDE, 0x61, 0x8D, 0x43, 0x77, 0x24, 0x1B, 0x50, 0x36, 0x9E, 0xDE, 0x51, 0xAA, 0x74, 0xAB, 0x96, 0x65, 0x89, 0xE2, 0xC6, ++ 0x87, 0xD6, 0xC0, 0x9F, 0xAC, 0x9C, 0x6D, 0x6C, 0x54, 0x61, 0xF5, 0xA6, 0x30, 0x08, 0xE9, 0x83, 0x5F, 0xF4, 0xB5, 0xBD, 0x42, 0x65, 0xF1, 0x12, 0x8C, 0x09, 0x2C, 0x27, 0xD4, 0xDA, 0x50, 0x8F, ++ 0xD4, 0xF5, 0x0E, 0xFA, 0x74, 0xA7, 0x31, 0x57, 0x05, 0x9A, 0x4B, 0x2F, 0x41, 0xFE, 0x8B, 0xF9, 0x67, 0x16, 0x79, 0x69, 0xB9, 0x3B, 0xF5, 0x20, 0x45, 0x84, 0x26, 0x90, 0x32, 0x42, 0x9E, 0x35, ++ 0x77, 0x70, 0x4B, 0xDF, 0x68, 0x98, 0x00, 0xDD, 0x8B, 0xDE, 0x82, 0x6B, 0x74, 0xCE, 0xF5, 0x10, 0xA1, 0xE0, 0x87, 0x02, 0x3F, 0x09, 0x26, 0xE9, 0x7F, 0x37, 0x92, 0x6B, 0x16, 0xEF, 0x78, 0x6C, ++ 0x37, 0xEC, 0x21, 0xF2, 0x40, 0x71, 0x04, 0xD3, 0x95, 0x4A, 0x7A, 0x07, 0xC3, 0x0D, 0xE2, 0xD6, 0x78, 0x84, 0x02, 0xD7, 0x1A, 0x56, 0x2E, 0xA5, 0x4C, 0x79, 0xB4, 0x19, 0x7D, 0x20, 0x2C, 0x97, ++ 0x72, 0x5D, 0x2D, 0x8B, 0x7E, 0x73, 0x32, 0xF3, 0xFF, 0x1A, 0x6F, 0xAD, 0x49, 0xA4, 0xC0, 0x0C, 0xD1, 0xA4, 0x47, 0x65, 0x1B, 0x8E, 0x08, 0xD8, 0x50, 0x6B, 0xCA, 0x82, 0x3E, 0x10, 0xEF, 0x41, ++ 0x16, 0xE6, 0xCF, 0x49, 0x67, 0x5C, 0x43, 0x30, 0xA1, 0xDE, 0x19, 0x08, 0xDD, 0xB5, 0x9F, 0x7E, 0xA5, 0xF8, 0x9C, 0x94, 0xCE, 0x50, 0x0F, 0x82, 0xB4, 0x3C, 0xE7, 0x89, 0x15, 0x84, 0x73, 0xB9, ++ 0xE0, 0x79, 0x05, 0xD8, 0xE8, 0x61, 0x5E, 0xDE, 0xF0, 0x21, 0x38, 0x3F, 0xC3, 0x1D, 0x61, 0x8C, 0x5C, 0xE6, 0x25, 0x65, 0x3B, 0x40, 0xC2, 0x1B, 0xD7, 0xE0, 0xBC, 0x78, 0x3D, 0x93, 0xBE, 0xC1, ++ 0xB7, 0xA5, 0xB4, 0xBB, 0xC6, 0xC2, 0x81, 0xB7, 0x77, 0x55, 0x47, 0x39, 0x0E, 0xF3, 0xD3, 0x0E, 0x27, 0x73, 0x99, 0x36, 0x93, 0x08, 0xD8, 0xA1, 0xCD, 0xC2, 0xE1, 0xDB, 0xD6, 0xF1, 0x58, 0x97, ++ 0x0A, 0xC2, 0xAC, 0x5C, 0x2C, 0x94, 0x81, 0x97, 0x5B, 0x80, 0x95, 0x80, 0xC0, 0xEA, 0x89, 0x91, 0x2C, 0x07, 0x66, 0xF4, 0x58, 0x30, 0xA8, 0x96, 0x3F, 0xBB, 0x7E, 0x17, 0xD8, 0x43, 0x85, 0x17, ++ 0x5A, 0x6E, 0x07, 0x54, 0x68, 0x3C, 0xBF, 0xBB, 0xA6, 0x36, 0x45, 0x94, 0xF6, 0xB5, 0x00, 0x5C, 0x15, 0xBD, 0x5F, 0x85, 0x73, 0x2B, 0x5A, 0x63, 0xF2, 0x62, 0x67, 0xAB, 0x17, 0x04, 0x8C, 0x61, ++ 0x99, 0x20, 0x00, 0x19, 0xAD, 0xD6, 0xA4, 0xD1, 0xAC, 0xD0, 0x40, 0x5C, 0x38, 0x76, 0x66, 0xE8, 0x71, 0x11, 0xB9, 0x82, 0x5A, 0xFB, 0x97, 0x51, 0xCD, 0x3F, 0x9D, 0x8A, 0x45, 0xC6, 0xB2, 0x08, ++ 0xD2, 0xD3, 0x33, 0xB6, 0xC5, 0x9F, 0x98, 0xBC, 0xF2, 0x84, 0xC8, 0x54, 0xCF, 0x7D, 0x4F, 0x67, 0x54, 0xFD, 0x75, 0xEE, 0x06, 0x8C, 0x88, 0x67, 0x8E, 0xE7, 0x56, 0x5B, 0x47, 0xB3, 0x6E, 0x68, ++ 0xA1, 0xFD, 0x7B, 0xB6, 0x0E, 0x2A, 0x8E, 0x0D, 0xF7, 0x12, 0x70, 0x20, 0xF5, 0xC6, 0x27, 0x7B, 0x3E, 0xE0, 0x58, 0x77, 0x3F, 0x9B, 0xBF, 0x1D, 0xC2, 0xE3, 0x98, 0xBC, 0x30, 0x12, 0x02, 0x12, ++ 0x1C, 0x69, 0x9C, 0x00, 0x37, 0x9D, 0x83, 0x50, 0x09, 0x96, 0x26, 0xF9, 0x09, 0x23, 0x65, 0x92, 0x40, 0x08, 0xB1, 0xA9, 0xCD, 0x9F, 0x87, 0x87, 0x82, 0x2B, 0xEE, 0x96, 0x1A, 0xBA, 0x23, 0x9C, ++ 0xDC, 0xB4, 0x18, 0xE9, 0x38, 0x60, 0xEF, 0x34, 0x8A, 0x5E, 0x96, 0x45, 0x38, 0x9A, 0x0A, 0x87, 0x8D, 0x39, 0x4F, 0x36, 0x5A, 0xEB, 0xFE, 0x28, 0x0B, 0xEE, 0x68, 0x74, 0xA3, 0x05, 0x4C, 0xD9, ++ 0x8C, 0xBD, 0x87, 0x16, 0x66, 0x28, 0x04, 0x72, 0x9F, 0xD4, 0x6F, 0xCE, 0xA9, 0xC4, 0xCF, 0x92, 0x9F, 0x2F, 0x12, 0x00, 0x06, 0xCE, 0xBC, 0xC0, 0xBF, 0x75, 0x69, 0x2D, 0x63, 0xC0, 0x44, 0x63, ++ 0x5D, 0x1A, 0x1D, 0xB6, 0x1A, 0xD1, 0x78, 0x94, 0x15, 0xE5, 0xF2, 0x24, 0x2B, 0x74, 0x00, 0xA8, 0xA7, 0x93, 0x68, 0xED, 0x60, 0x2C, 0x33, 0x64, 0x92, 0xF2, 0x70, 0x34, 0x5B, 0xE9, 0x8B, 0x2D, ++ 0xD6, 0xEA, 0x8E, 0x4C, 0x53, 0xAC, 0xA3, 0x6E, 0x3C, 0x9B, 0xA2, 0x88, 0xF2, 0x75, 0x86, 0x13, 0x4C, 0xF0, 0xB5, 0xCA, 0x9B, 0xA1, 0xEE, 0xDF, 0x20, 0xD1, 0xAB, 0x4F, 0x2D, 0x08, 0xF3, 0xB0, ++ 0x42, 0xDB, 0x89, 0xDE, 0xCF, 0xFD, 0xD2, 0x38, 0x54, 0xF3, 0x51, 0x20, 0xAD, 0xDE, 0x16, 0x03, 0x33, 0x5D, 0x56, 0x8D, 0xA9, 0x58, 0x91, 0xCF, 0x3A, 0xB2, 0x1D, 0x9A, 0xFA, 0xF6, 0x6C, 0x28, ++ 0x6C, 0x13, 0x00, 0x01, 0x9C, 0xA9, 0xBA, 0xF2, 0xFF, 0x3F, 0x67, 0x25, 0x23, 0x0C, 0x4B, 0x26, 0x98, 0x92, 0xF7, 0xA3, 0xDF, 0xD6, 0xEA, 0xB7, 0x4C, 0x31, 0x4A, 0x86, 0xF8, 0xB4, 0x7E, 0xAE, ++ 0x49, 0xF4, 0x19, 0xE4, 0xA2, 0x91, 0x7B, 0x98, 0x4F, 0xE9, 0xA0, 0x03, 0x32, 0xAF, 0xB7, 0xA5, 0x6E, 0x5E, 0x67, 0x52, 0x23, 0xAE, 0xCC, 0x50, 0x34, 0x20, 0xAF, 0x8B, 0x39, 0xFA, 0xA9, 0x20, ++ 0xE3, 0xAD, 0xA1, 0xA4, 0x3C, 0xE7, 0xBD, 0x1F, 0x7D, 0xF2, 0x30, 0x1C, 0x90, 0x27, 0xCC, 0x1C, 0xE5, 0x66, 0x6E, 0xB0, 0x93, 0x62, 0x10, 0xAF, 0xA5, 0x9E, 0x10, 0xF3, 0x07, 0xCA, 0x1F, 0x78, ++ 0x63, 0xED, 0xD6, 0xC3, 0xBB, 0x8F, 0x5D, 0x63, 0xC0, 0xCF, 0x0E, 0xA8, 0xF0, 0x6E, 0xF0, 0x8C, 0xCC, 0x24, 0xC1, 0x4F, 0x29, 0x5D, 0xD2, 0x86, 0xFD, 0x9F, 0x4E, 0x71, 0x02, 0x10, 0x9D, 0x53, ++ 0xFF, 0x5E, 0xFF, 0x4A, 0x01, 0xDC, 0xAA, 0xD5, 0xFB, 0x60, 0x55, 0xA0, 0x70, 0x3C, 0xD4, 0x71, 0xB2, 0x0B, 0x5F, 0xA4, 0x56, 0x0B, 0xDE, 0xAA, 0x13, 0x13, 0xC7, 0x64, 0x7A, 0xE7, 0x56, 0xAE, ++ 0x85, 0x91, 0x57, 0x9E, 0xA5, 0x12, 0x0E, 0x09, 0xD6, 0x79, 0x48, 0x40, 0x62, 0x9B, 0x9F, 0xEF, 0xEF, 0xC2, 0x0D, 0xB5, 0x94, 0xBA, 0xDC, 0xD1, 0x29, 0xEC, 0x49, 0x1C, 0x3C, 0xF7, 0x5A, 0xB4, ++ 0x0C, 0x47, 0x2A, 0xD2, 0x2C, 0x2D, 0xED, 0xBC, 0x77, 0xBA, 0x26, 0x71, 0xC8, 0x43, 0x48, 0x65, 0x60, 0xDC, 0x76, 0x52, 0x31, 0xBF, 0x5F, 0xDC, 0xDB, 0xCC, 0x77, 0xC8, 0x30, 0x0F, 0x9D, 0x2B, ++ 0x53, 0xEC, 0x34, 0x46, 0xD8, 0x2F, 0x08, 0x7B, 0x89, 0xBD, 0x99, 0x2F, 0x7A, 0xB0, 0xA7, 0x80, 0xB5, 0x38, 0x81, 0x18, 0xBB, 0xF1, 0x7C, 0xCB, 0xEC, 0x2D, 0x19, 0x6F, 0x3E, 0xDC, 0x47, 0x8F, ++ 0xB9, 0x47, 0xD8, 0x30, 0x2B, 0x04, 0x0A, 0x60, 0xD0, 0xBA, 0xB8, 0x5C, 0x1C, 0x5C, 0x47, 0x4E, 0xAB, 0x41, 0xE0, 0x64, 0x41, 0x06, 0x95, 0xC6, 0x0E, 0x1A, 0xCE, 0xE7, 0x9E, 0x13, 0x7D, 0x70, ++ 0x2E, 0x4A, 0x31, 0x39, 0x68, 0xA5, 0x57, 0xB9, 0x7C, 0xE6, 0x43, 0x31, 0x88, 0x8B, 0x52, 0x89, 0xCC, 0xB3, 0x7A, 0x66, 0x25, 0xE5, 0x22, 0x73, 0x71, 0x1B, 0x84, 0x64, 0x58, 0xD5, 0xD8, 0xBA, ++ 0x1A, 0xE4, 0x96, 0x53, 0x78, 0xCB, 0xE9, 0x18, 0xBF, 0x0F, 0x4B, 0xEE, 0xE1, 0xBD, 0x08, 0xFE, 0xCC, 0x66, 0x06, 0xD2, 0xF3, 0x97, 0x0C, 0x87, 0x4B, 0x0A, 0x09, 0xC4, 0x10, 0xE0, 0xC7, 0xD3, ++ 0xD6, 0x00, 0x4D, 0x93, 0xF0, 0x6F, 0xBC, 0x25, 0x8F, 0x96, 0x4A, 0x96, 0x19, 0xB2, 0xC6, 0xCA, 0x28, 0xA3, 0xA2, 0x52, 0x9B, 0xF4, 0x4F, 0xB9, 0xF2, 0x44, 0x38, 0x2C, 0xBE, 0xF9, 0x93, 0xC4, ++ 0x18, 0xA3, 0x88, 0x0F, 0x8D, 0x5F, 0xBA, 0x41, 0xF0, 0x58, 0x24, 0xF4, 0xF3, 0x3B, 0x24, 0xB8, 0x86, 0xD1, 0x15, 0xB8, 0x19, 0x81, 0x6C, 0x9B, 0x7D, 0xB5, 0x1F, 0x2A, 0xA0, 0xCC, 0x6B, 0x01, ++ 0xB6, 0xAB, 0x21, 0x1F, 0xAD, 0x55, 0x28, 0x4C, 0xDC, 0x04, 0x52, 0x47, 0x85, 0x90, 0x59, 0xBD, 0x36, 0x88, 0x7F, 0x3A, 0xE2, 0xB6, 0xCF, 0x7F, 0x87, 0xEC, 0x2D, 0xF3, 0xC8, 0x9D, 0x43, 0xD2, ++ 0x7E, 0x5E, 0x48, 0x88, 0xBA, 0xE6, 0x5B, 0x69, 0x24, 0xFA, 0x5D, 0xF0, 0xB2, 0xED, 0x44, 0xE3, 0xE3, 0x79, 0x4B, 0x68, 0x90, 0xF9, 0x33, 0xF9, 0xFB, 0xA7, 0xA7, 0x89, 0xFC, 0x63, 0xCE, 0xB7, ++ 0x43, 0x60, 0xD4, 0xAC, 0x9C, 0x64, 0xF1, 0x0C, 0xFC, 0x0A, 0xB3, 0x74, 0xC7, 0x12, 0xA3, 0xCC, 0x6C, 0x87, 0x6B, 0x22, 0xF6, 0xD9, 0xFE, 0xF1, 0xC3, 0x87, 0xBF, 0x6B, 0xDE, 0x75, 0x79, 0x2A, ++ 0xF9, 0x09, 0x4E, 0xC1, 0x7E, 0xB8, 0xB5, 0x5D, 0x35, 0x5F, 0xF0, 0xAE, 0x9D, 0x62, 0x11, 0x1A, 0xD8, 0xA3, 0xCB, 0xA4, 0xF5, 0x66, 0x3D, 0x94, 0xA3, 0x8A, 0x43, 0xE3, 0x52, 0x97, 0x9D, 0xB3, ++ 0xDF, 0xDF, 0x32, 0x98, 0x85, 0x34, 0xCD, 0x45, 0xFD, 0x43, 0x6E, 0x69, 0x9C, 0x46, 0x7F, 0x6D, 0xDD, 0x50, 0x76, 0xB4, 0xE5, 0xF7, 0xF3, 0x82, 0xAF, 0x45, 0xD3, 0x17, 0x0F, 0x25, 0xB5, 0x41, ++ 0x50, 0xD6, 0x4D, 0x35, 0xA8, 0x18, 0x55, 0xF4, 0xB2, 0x2B, 0xAC, 0x9F, 0xA1, 0x7D, 0xEF, 0xAD, 0x73, 0xB1, 0x4B, 0x15, 0x84, 0x0E, 0x08, 0x70, 0xDA, 0xF5, 0xB9, 0x2A, 0x30, 0xD2, 0x37, 0xBF, ++ 0x0C, 0x08, 0xCB, 0x8C, 0x9E, 0xBD, 0x41, 0x59, 0xD3, 0xBB, 0x2D, 0x47, 0x4E, 0x3E, 0x10, 0x6C, 0xC4, 0x68, 0xE6, 0xA2, 0x43, 0x35, 0x12, 0x48, 0x10, 0xF4, 0x86, 0xA6, 0x47, 0x3C, 0x26, 0xA5, ++ 0xD7, 0x83, 0x26, 0x4F, 0xD8, 0xA3, 0x68, 0x5C, 0x09, 0xD4, 0xEF, 0x77, 0xBD, 0x9A, 0x9A, 0x5C, 0x0B, 0x57, 0x8C, 0x95, 0xE7, 0xCA, 0xA3, 0x4E, 0xCE, 0x46, 0xF8, 0x48, 0x37, 0x47, 0xEE, 0x58, ++ 0x4D, 0xBB, 0x2D, 0x97, 0x20, 0x76, 0xD7, 0x63, 0xB0, 0xB5, 0x50, 0xE2, 0xCA, 0xE8, 0x34, 0x9E, 0x06, 0x09, 0xF1, 0x4F, 0x0A, 0x8F, 0x51, 0x10, 0xCA, 0xA4, 0xCD, 0xAB, 0xDD, 0x44, 0x40, 0xAD, ++ 0x16, 0x9C, 0x2A, 0xBE, 0x86, 0xEE, 0x1C, 0x68, 0x0D, 0x6E, 0x94, 0x88, 0x29, 0x64, 0xD8, 0x70, 0xCF, 0xEF, 0x70, 0xA4, 0xF4, 0xC0, 0x4B, 0x49, 0xCC, 0x4A, 0x4F, 0xF6, 0xD4, 0xB9, 0xE3, 0x69, ++ 0x18, 0xC1, 0x8A, 0x6D, 0x5C, 0x4A, 0xF4, 0x7C, 0xCF, 0x09, 0xFF, 0x64, 0xC7, 0x7A, 0xE3, 0xBF, 0xBC, 0xFA, 0x50, 0x4E, 0x16, 0x9E, 0xAB, 0xB3, 0x06, 0x95, 0x1A, 0x28, 0xAF, 0xF2, 0xFA, 0xB7, ++ 0xA5, 0xBA, 0x47, 0x6F, 0x56, 0x50, 0xBC, 0x7D, 0xA1, 0x92, 0xD4, 0xB0, 0xEB, 0xFA, 0xAB, 0xAB, 0xE7, 0x72, 0xED, 0xE2, 0xA1, 0x07, 0x1D, 0x5C, 0x4F, 0xC3, 0x3C, 0x25, 0x25, 0xE4, 0x0D, 0x08, ++ 0x2F, 0xA9, 0x35, 0xBD, 0x32, 0xFF, 0x25, 0x06, 0xB3, 0xA1, 0x31, 0xE3, 0x15, 0x81, 0xB6, 0xC9, 0x44, 0xC2, 0x5F, 0x2D, 0x81, 0x75, 0x5C, 0x39, 0xD3, 0xBF, 0xC0, 0xC6, 0xDE, 0x93, 0xE3, 0x55, ++ 0x57, 0xAB, 0x1C, 0xF3, 0x47, 0x2B, 0x4A, 0x32, 0x98, 0x09, 0x86, 0xA3, 0x1F, 0x88, 0x28, 0x73, 0x52, 0x19, 0x38, 0xD8, 0xBF, 0xFE, 0x97, 0x36, 0x9F, 0xE2, 0x97, 0x46, 0xAC, 0xFC, 0x8F, 0x12, ++ 0xDE, 0xEE, 0x0E, 0x9A, 0xC3, 0xE1, 0x67, 0x60, 0x20, 0x22, 0x43, 0x43, 0x58, 0xF9, 0xDC, 0x33, 0xB2, 0xD4, 0x40, 0x8F, 0xD0, 0x89, 0x54, 0xF9, 0x74, 0x5A, 0x0B, 0xD6, 0x5B, 0xC7, 0x7E, 0xE8, ++ 0xBE, 0xA7, 0x1B, 0xFA, 0x76, 0x40, 0xC1, 0x35, 0xED, 0x19, 0xCC, 0x2F, 0x1C, 0x22, 0xE0, 0xD6, 0xB0, 0x2D, 0xA6, 0xDF, 0x24, 0xDB, 0x05, 0xA6, 0x48, 0x0D, 0xB4, 0x52, 0x27, 0xDC, 0xC9, 0x7A, ++ 0xDC, 0xEC, 0xB3, 0x91, 0x7F, 0x08, 0x6C, 0x6E, 0x98, 0x08, 0x3A, 0x21, 0x2D, 0x54, 0xDC, 0x4B, 0x81, 0x0F, 0x68, 0x9C, 0x4F, 0x98, 0x43, 0xD2, 0xFB, 0x9F, 0x57, 0x26, 0xB8, 0x76, 0x64, 0xCD, ++ 0x32, 0x2C, 0x28, 0xB6, 0xF1, 0xE0, 0x1F, 0xA9, 0x1A, 0xB3, 0x50, 0x2F, 0xAC, 0x01, 0xAF, 0xCF, 0x52, 0xC9, 0xB3, 0xD2, 0xAA, 0x20, 0xE1, 0xB3, 0x85, 0xEF, 0x47, 0x0C, 0xB3, 0x30, 0x78, 0x19, ++ 0x8B, 0x5C, 0x43, 0x95, 0xA0, 0x32, 0x9C, 0xB1, 0x0F, 0x9A, 0x4E, 0x96, 0xF4, 0x3E, 0x51, 0x16, 0x1F, 0xAA, 0xE1, 0x90, 0xEB, 0x8C, 0x39, 0x69, 0xCE, 0xC2, 0x97, 0x7B, 0x08, 0xF6, 0x8D, 0x24, ++ 0xEF, 0xCE, 0x56, 0x65, 0x11, 0xFE, 0xB6, 0x54, 0xCC, 0x5F, 0xA1, 0xFE, 0x67, 0x57, 0x1F, 0x58, 0xD8, 0x48, 0xBE, 0x7C, 0x56, 0x4A, 0xF5, 0x66, 0x39, 0x06, 0x39, 0xF8, 0x16, 0x92, 0xA7, 0xB7, ++ 0xC0, 0xF9, 0xF5, 0xAD, 0x85, 0xB8, 0x2F, 0x6A, 0x83, 0x2C, 0x9D, 0xA5, 0x2B, 0x6A, 0x47, 0xD2, 0x3F, 0x9E, 0xCF, 0xAD, 0x44, 0x99, 0x83, 0xC9, 0x39, 0x65, 0x46, 0x58, 0xB1, 0x0A, 0xDD, 0xC0, ++ 0xB4, 0xAA, 0xDB, 0xB7, 0xB8, 0x5E, 0xA6, 0x02, 0xDA, 0x76, 0x17, 0xD1, 0xB4, 0xA4, 0x5D, 0x86, 0xB8, 0xD0, 0x9D, 0x2C, 0x5A, 0x40, 0x2A, 0x67, 0x58, 0xE0, 0x6A, 0xAA, 0x15, 0x4A, 0xD0, 0x96, ++ 0x67, 0x8C, 0xBD, 0xD9, 0xCA, 0x6F, 0x5D, 0x92, 0xB0, 0xD7, 0x38, 0x50, 0x1E, 0x18, 0xC1, 0xDC, 0xD2, 0x68, 0xDE, 0x01, 0x12, 0x00, 0x59, 0x48, 0x2D, 0xFC, 0xD1, 0x2B, 0x9B, 0xF2, 0x6E, 0x1C, ++ 0xF3, 0xB0, 0x99, 0x70, 0xC4, 0x3C, 0xF5, 0x62, 0x0C, 0xA8, 0xD4, 0xE2, 0xFD, 0x31, 0xE5, 0xA8, 0x9E, 0xF8, 0xDD, 0x93, 0x17, 0xE6, 0xCF, 0x55, 0xB3, 0xFB, 0x19, 0xC0, 0x72, 0xE9, 0xD5, 0xDD, ++ 0xB9, 0x74, 0xEF, 0x60, 0x82, 0x71, 0x1E, 0x99, 0x15, 0xD3, 0x43, 0x4E, 0x7D, 0x34, 0xE7, 0xC3, 0x25, 0xA8, 0xD9, 0x2B, 0x66, 0xB0, 0x83, 0xDF, 0xD6, 0xCF, 0xD1, 0x62, 0xFD, 0x66, 0x65, 0xDF, ++ 0x9A, 0xBF, 0x18, 0x8F, 0x2D, 0xC5, 0x83, 0xFD, 0xFA, 0xBC, 0x99, 0x7D, 0x78, 0x70, 0xE9, 0x11, 0xD3, 0xC5, 0xEB, 0x5B, 0xDF, 0x80, 0xBA, 0x8D, 0xE6, 0xC4, 0x6C, 0x88, 0xE0, 0x49, 0xD3, 0x9E, ++ 0x2F, 0xA2, 0x96, 0xCB, 0xE0, 0x69, 0xCA, 0x69, 0x49, 0x4F, 0x89, 0x08, 0x87, 0x67, 0x9C, 0xB3, 0xB0, 0xE6, 0x04, 0x3D, 0x02, 0xB8, 0xF2, 0x4A, 0x3F, 0x14, 0x83, 0xC9, 0x47, 0x81, 0xB6, 0xB0, ++ 0x1A, 0xF8, 0x01, 0x60, 0x63, 0x99, 0xC3, 0xAC, 0x62, 0x60, 0x3D, 0x86, 0xF7, 0xD5, 0x29, 0x55, 0xC3, 0x12, 0x59, 0x58, 0xC0, 0x4D, 0x57, 0x2A, 0x34, 0x63, 0x4C, 0xD2, 0x36, 0x73, 0x58, 0xA8, ++ 0x6A, 0xD2, 0xB4, 0x81, 0xB3, 0x26, 0xF2, 0xF8, 0x9D, 0x4B, 0x4D, 0xC0, 0x94, 0xE9, 0x89, 0x18, 0xB5, 0xAE, 0xD8, 0xF4, 0xEB, 0xA4, 0x9C, 0x56, 0x17, 0x2B, 0x16, 0x51, 0xB6, 0x60, 0xB8, 0x70, ++ 0x47, 0xBA, 0x65, 0x2A, 0x64, 0x0C, 0xA7, 0xB0, 0x69, 0x97, 0x1F, 0xA2, 0xA6, 0x6C, 0x01, 0x95, 0x67, 0xC3, 0x8B, 0x7F, 0x5D, 0x26, 0x21, 0xE7, 0xCB, 0x4B, 0xAA, 0x41, 0x40, 0xEF, 0x5B, 0xB4, ++ 0x91, 0x96, 0x0D, 0x80, 0xF5, 0x01, 0x01, 0xA0, 0x04, 0xE0, 0x79, 0xF5, 0xB5, 0x1F, 0x39, 0x4B, 0x02, 0x9E, 0x3E, 0xBF, 0xBD, 0xFC, 0x33, 0x59, 0x4E, 0x95, 0xF6, 0xA3, 0x7B, 0xC4, 0xF6, 0xA3, ++ 0x29, 0xB5, 0xC1, 0xD8, 0xE0, 0x41, 0x45, 0x40, 0x3D, 0x33, 0xA5, 0xC7, 0x04, 0xB3, 0x43, 0x51, 0x82, 0x31, 0xB0, 0x86, 0x46, 0xE4, 0xDA, 0x9D, 0x5A, 0x4E, 0xCA, 0xBC, 0xF5, 0x0F, 0x2B, 0x39, ++ 0x21, 0xE8, 0x5A, 0x84, 0xC4, 0x09, 0xA1, 0xF6, 0x27, 0xEE, 0x0F, 0x6E, 0xB1, 0xB1, 0xB9, 0xA9, 0xFC, 0xCA, 0x9C, 0xBD, 0x65, 0xCE, 0xA9, 0x00, 0x88, 0x79, 0x7D, 0xF7, 0x51, 0x0B, 0x86, 0x1B, ++ 0x86, 0xCA, 0x4E, 0x99, 0x8A, 0xF0, 0x75, 0x94, 0x9B, 0x16, 0x7C, 0xBD, 0x66, 0xBC, 0xBE, 0x4C, 0x51, 0x30, 0x34, 0x7D, 0x87, 0x7C, 0xE5, 0xA8, 0x47, 0x9F, 0x4D, 0x56, 0xD3, 0x98, 0x14, 0x6C, ++ 0xE2, 0xF1, 0xA7, 0x85, 0x42, 0x8D, 0xDD, 0xED, 0xAD, 0x66, 0xAA, 0xB2, 0x87, 0xCA, 0xAE, 0x59, 0x14, 0x24, 0x35, 0x56, 0x1A, 0x40, 0x1B, 0x50, 0x93, 0x43, 0x92, 0xD4, 0x32, 0x9C, 0x3C, 0x21, ++ 0xAE, 0x48, 0x32, 0x86, 0x53, 0xE3, 0xAE, 0x57, 0x5E, 0x18, 0x1D, 0xB3, 0x89, 0xBE, 0x43, 0x97, 0x16, 0xF6, 0xE3, 0xF3, 0xE2, 0xDC, 0x61, 0xE4, 0xEC, 0xCF, 0xE5, 0x48, 0xAB, 0x7D, 0x71, 0x5E, ++ 0xAB, 0x49, 0xCF, 0xD7, 0x64, 0x1D, 0xC3, 0x7F, 0x5C, 0x0C, 0x0C, 0x34, 0x96, 0x5C, 0x06, 0xA1, 0x56, 0x70, 0x5F, 0x98, 0x69, 0x58, 0x79, 0x1A, 0x59, 0xCD, 0x5B, 0x48, 0x90, 0xD9, 0xA1, 0xB1, ++ 0xCF, 0x08, 0x54, 0x1A, 0x7A, 0x93, 0xD0, 0x65, 0xDC, 0xF3, 0xB9, 0xF6, 0xC5, 0x13, 0xC0, 0x27, 0x94, 0x37, 0xD4, 0xBD, 0xBE, 0x62, 0x71, 0x40, 0xD2, 0x94, 0x63, 0x26, 0x39, 0xB7, 0x46, 0x89, ++ 0x1C, 0xA9, 0x70, 0xDF, 0x6D, 0x73, 0x21, 0xF1, 0xA9, 0x13, 0xAD, 0x9B, 0xED, 0x3F, 0xE0, 0xBC, 0x02, 0xAF, 0xBB, 0x87, 0x20, 0xB7, 0x42, 0xEB, 0x40, 0x9E, 0xB8, 0x2C, 0x66, 0x96, 0x7F, 0x60, ++ 0xEB, 0xF4, 0xCE, 0xE2, 0x50, 0x8E, 0xF7, 0xF7, 0x03, 0x5B, 0x7F, 0xC7, 0xD9, 0x17, 0x8E, 0x73, 0xED, 0xA0, 0x52, 0x9B, 0xCC, 0x9E, 0xB2, 0x0B, 0x9C, 0xD7, 0x74, 0xC5, 0x64, 0x88, 0x2D, 0xD5, ++ 0x7C, 0xCF, 0xB5, 0x46, 0x63, 0xCF, 0xA8, 0x1B, 0x91, 0x4E, 0x14, 0xC4, 0xD7, 0xD7, 0x4B, 0xCE, 0x13, 0x9B, 0x7E, 0xC5, 0x3E, 0xA6, 0x1B, 0x0B, 0xF0, 0xDB, 0x61, 0xC7, 0x3A, 0x7A, 0x95, 0xF5, ++ 0x96, 0xE1, 0x28, 0xEC, 0xA7, 0xA8, 0xC9, 0xEB, 0x92, 0xC2, 0x94, 0x4E, 0xF5, 0x64, 0x94, 0x3E, 0xDA, 0xCF, 0xD4, 0x8A, 0x5A, 0x8B, 0xDC, 0x7D, 0x0F, 0xAB, 0xFA, 0xB6, 0xDA, 0xD3, 0xC5, 0xFE, ++ 0xEE, 0xB1, 0x39, 0x81, 0x8C, 0x85, 0x73, 0xA7, 0xBD, 0x75, 0x06, 0xB1, 0x8B, 0xFC, 0xE2, 0xBA, 0x15, 0x10, 0x5B, 0x7C, 0xEC, 0x83, 0x09, 0x6C, 0x8C, 0xAE, 0x99, 0xFB, 0xE5, 0xEA, 0x2C, 0x10, ++ 0xF1, 0xBC, 0xF3, 0xF1, 0x58, 0x26, 0xA0, 0xD8, 0xEC, 0xA9, 0x7C, 0x42, 0xBB, 0x17, 0xCB, 0x9B, 0xED, 0x21, 0x9A, 0x8C, 0xDA, 0x9A, 0x57, 0x62, 0x85, 0x7E, 0xFB, 0xA4, 0x3B, 0x7F, 0x34, 0x15, ++ 0x7A, 0xEB, 0x49, 0x2F, 0x81, 0xD2, 0xEA, 0x15, 0x6F, 0xF4, 0x99, 0x12, 0xA4, 0x04, 0x9B, 0xE9, 0x3E, 0x12, 0xA2, 0x26, 0x29, 0x5D, 0x8F, 0x68, 0x5C, 0x89, 0xBD, 0xA3, 0x83, 0x1E, 0xB7, 0x3B, ++ 0xE4, 0x65, 0x7D, 0xBE, 0x3B, 0x09, 0xC0, 0x9D, 0x1D, 0xAF, 0x94, 0x4C, 0x26, 0x64, 0xE9, 0xBD, 0xE9, 0x17, 0x41, 0x98, 0xFE, 0x3D, 0xBA, 0xE4, 0xDE, 0x09, 0x45, 0x22, 0x9E, 0xDD, 0xF5, 0x96, ++ 0x1B, 0x2F, 0x3D, 0x71, 0x9F, 0xAB, 0xAE, 0xB9, 0xBB, 0xD0, 0xD6, 0x3F, 0x6B, 0x74, 0xF1, 0x47, 0x70, 0x9C, 0xB2, 0xC5, 0xCD, 0xDD, 0x25, 0x35, 0x41, 0xA2, 0xD4, 0xDB, 0xFE, 0x2F, 0x61, 0x9F, ++ 0xB6, 0xC0, 0xD8, 0x0D, 0x1D, 0x3D, 0x84, 0x93, 0x98, 0xBD, 0xF1, 0xFB, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x0F, 0x16, 0x1D, 0x23, 0x2D, ++ }, ++ }, ++ { ++ .name = "Dilithium Round 3, Level 3 (6-5) KAT 0", ++ .version = 0, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_65, ++ .rho_len = 32, ++ .rho = { ++ 0x1C, 0x0E, 0xE1, 0x11, 0x1B, 0x08, 0x00, 0x3F, 0x28, 0xE6, 0x5E, 0x8B, 0x3B, 0xDE, 0xB0, 0x37, 0xCF, 0x8F, 0x22, 0x1D, 0xFC, 0xDA, 0xF5, 0x95, 0x0E, 0xDB, 0x38, 0xD5, 0x06, 0xD8, 0x5B, 0xEF, ++ }, ++ .seed_len = 32, ++ .seed = { ++ 0x39, 0x4D, 0x16, 0x95, 0x05, 0x9D, 0xFF, 0x40, 0xAE, 0x25, 0x6C, 0x5D, 0x5E, 0xDA, 0xBF, 0xB6, 0x9F, 0x5F, 0x40, 0xF3, 0x7A, 0x58, 0x8F, 0x50, 0x53, 0x2C, 0xA4, 0x08, 0xA8, 0x16, 0x8A, 0xB1, ++ }, ++ .tr_len = 32, ++ .tr = { ++ 0xE6, 0x4F, 0x14, 0x64, 0x27, 0x54, 0x3D, 0x8C, 0x36, 0xB3, 0xB6, 0x52, 0x26, 0x76, 0x9A, 0x22, 0x91, 0x1A, 0x5A, 0x31, 0x3E, 0xAC, 0x17, 0xC4, 0xAB, 0xA2, 0x52, 0x84, 0x51, 0x4F, 0xC6, 0x13, ++ }, ++ .s1_len = 640, ++ .s1 = { ++ 0x35, 0x78, 0x08, 0x33, 0x02, 0x23, 0x16, 0x43, 0x37, 0x65, 0x80, 0x75, 0x78, 0x71, 0x45, 0x24, 0x81, 0x01, 0x73, 0x15, 0x44, 0x83, 0x65, 0x26, 0x41, 0x33, 0x30, 0x22, 0x30, 0x26, 0x14, 0x73, ++ 0x70, 0x52, 0x21, 0x07, 0x81, 0x26, 0x50, 0x61, 0x85, 0x85, 0x07, 0x75, 0x46, 0x18, 0x58, 0x05, 0x48, 0x53, 0x30, 0x18, 0x70, 0x66, 0x47, 0x51, 0x82, 0x67, 0x73, 0x77, 0x33, 0x50, 0x02, 0x70, ++ 0x31, 0x28, 0x78, 0x82, 0x15, 0x80, 0x71, 0x40, 0x26, 0x73, 0x43, 0x20, 0x61, 0x62, 0x50, 0x61, 0x73, 0x71, 0x01, 0x03, 0x11, 0x45, 0x36, 0x81, 0x52, 0x30, 0x24, 0x65, 0x03, 0x48, 0x14, 0x37, ++ 0x08, 0x37, 0x18, 0x25, 0x50, 0x84, 0x06, 0x08, 0x60, 0x17, 0x62, 0x58, 0x31, 0x31, 0x28, 0x27, 0x00, 0x17, 0x18, 0x48, 0x16, 0x67, 0x31, 0x78, 0x61, 0x07, 0x37, 0x23, 0x55, 0x74, 0x47, 0x15, ++ 0x10, 0x10, 0x11, 0x21, 0x10, 0x66, 0x27, 0x42, 0x12, 0x08, 0x35, 0x46, 0x22, 0x85, 0x13, 0x13, 0x88, 0x16, 0x48, 0x86, 0x83, 0x35, 0x10, 0x47, 0x60, 0x26, 0x11, 0x83, 0x15, 0x74, 0x25, 0x00, ++ 0x74, 0x24, 0x40, 0x64, 0x25, 0x15, 0x86, 0x13, 0x65, 0x61, 0x37, 0x77, 0x11, 0x84, 0x78, 0x05, 0x08, 0x62, 0x43, 0x70, 0x64, 0x06, 0x85, 0x27, 0x63, 0x11, 0x50, 0x13, 0x56, 0x23, 0x21, 0x68, ++ 0x41, 0x41, 0x77, 0x24, 0x08, 0x48, 0x30, 0x87, 0x85, 0x75, 0x43, 0x85, 0x08, 0x63, 0x68, 0x54, 0x26, 0x84, 0x50, 0x56, 0x84, 0x37, 0x02, 0x40, 0x07, 0x16, 0x17, 0x84, 0x54, 0x38, 0x00, 0x61, ++ 0x27, 0x05, 0x82, 0x62, 0x06, 0x76, 0x52, 0x11, 0x12, 0x14, 0x83, 0x88, 0x06, 0x78, 0x14, 0x75, 0x55, 0x02, 0x12, 0x22, 0x85, 0x52, 0x31, 0x08, 0x45, 0x03, 0x70, 0x13, 0x64, 0x31, 0x80, 0x05, ++ 0x37, 0x68, 0x37, 0x65, 0x02, 0x46, 0x53, 0x15, 0x07, 0x60, 0x06, 0x25, 0x33, 0x12, 0x51, 0x20, 0x05, 0x41, 0x60, 0x63, 0x24, 0x23, 0x52, 0x41, 0x50, 0x77, 0x31, 0x45, 0x70, 0x33, 0x47, 0x65, ++ 0x64, 0x31, 0x23, 0x18, 0x03, 0x33, 0x65, 0x16, 0x75, 0x87, 0x14, 0x13, 0x04, 0x11, 0x17, 0x15, 0x54, 0x68, 0x12, 0x60, 0x53, 0x73, 0x42, 0x38, 0x82, 0x43, 0x27, 0x83, 0x37, 0x12, 0x22, 0x81, ++ 0x74, 0x81, 0x81, 0x20, 0x13, 0x63, 0x27, 0x64, 0x75, 0x10, 0x28, 0x03, 0x22, 0x68, 0x65, 0x08, 0x76, 0x55, 0x35, 0x63, 0x33, 0x81, 0x04, 0x47, 0x48, 0x58, 0x54, 0x30, 0x12, 0x43, 0x18, 0x08, ++ 0x38, 0x64, 0x38, 0x53, 0x83, 0x08, 0x41, 0x27, 0x04, 0x64, 0x64, 0x63, 0x34, 0x64, 0x61, 0x06, 0x80, 0x70, 0x60, 0x23, 0x75, 0x51, 0x68, 0x25, 0x74, 0x11, 0x52, 0x88, 0x22, 0x01, 0x57, 0x78, ++ 0x58, 0x33, 0x31, 0x34, 0x31, 0x55, 0x82, 0x84, 0x03, 0x16, 0x36, 0x01, 0x06, 0x48, 0x14, 0x80, 0x46, 0x43, 0x68, 0x46, 0x17, 0x57, 0x21, 0x36, 0x31, 0x65, 0x74, 0x65, 0x22, 0x15, 0x17, 0x71, ++ 0x32, 0x05, 0x10, 0x66, 0x46, 0x83, 0x16, 0x46, 0x71, 0x47, 0x28, 0x31, 0x35, 0x55, 0x14, 0x73, 0x32, 0x81, 0x82, 0x60, 0x73, 0x15, 0x54, 0x36, 0x87, 0x08, 0x03, 0x28, 0x43, 0x26, 0x24, 0x16, ++ 0x05, 0x32, 0x05, 0x20, 0x23, 0x67, 0x72, 0x58, 0x28, 0x18, 0x10, 0x85, 0x42, 0x67, 0x85, 0x15, 0x52, 0x80, 0x00, 0x72, 0x82, 0x27, 0x18, 0x31, 0x12, 0x08, 0x68, 0x37, 0x72, 0x44, 0x42, 0x05, ++ 0x48, 0x64, 0x72, 0x05, 0x35, 0x08, 0x61, 0x73, 0x86, 0x27, 0x12, 0x46, 0x77, 0x51, 0x08, 0x52, 0x76, 0x33, 0x40, 0x37, 0x34, 0x32, 0x11, 0x54, 0x24, 0x06, 0x54, 0x02, 0x34, 0x50, 0x80, 0x04, ++ 0x17, 0x72, 0x84, 0x62, 0x73, 0x61, 0x68, 0x68, 0x07, 0x81, 0x52, 0x46, 0x71, 0x06, 0x82, 0x55, 0x45, 0x81, 0x63, 0x62, 0x76, 0x41, 0x80, 0x57, 0x12, 0x44, 0x25, 0x57, 0x08, 0x04, 0x51, 0x06, ++ 0x63, 0x61, 0x15, 0x85, 0x86, 0x30, 0x46, 0x52, 0x07, 0x05, 0x32, 0x75, 0x02, 0x18, 0x22, 0x42, 0x83, 0x71, 0x02, 0x38, 0x52, 0x75, 0x28, 0x44, 0x20, 0x33, 0x00, 0x17, 0x23, 0x11, 0x14, 0x02, ++ 0x15, 0x76, 0x88, 0x38, 0x47, 0x62, 0x31, 0x85, 0x13, 0x52, 0x52, 0x10, 0x84, 0x38, 0x25, 0x55, 0x56, 0x74, 0x11, 0x44, 0x54, 0x67, 0x27, 0x85, 0x46, 0x58, 0x61, 0x70, 0x43, 0x07, 0x58, 0x80, ++ 0x06, 0x84, 0x55, 0x13, 0x53, 0x47, 0x81, 0x38, 0x12, 0x08, 0x00, 0x84, 0x31, 0x56, 0x22, 0x14, 0x66, 0x03, 0x15, 0x60, 0x01, 0x63, 0x68, 0x56, 0x36, 0x73, 0x61, 0x80, 0x80, 0x04, 0x55, 0x54, ++ }, ++ .s2_len = 768, ++ .s2 = { ++ 0x33, 0x73, 0x12, 0x58, 0x40, 0x31, 0x14, 0x80, 0x42, 0x03, 0x67, 0x33, 0x01, 0x82, 0x71, 0x55, 0x60, 0x65, 0x60, 0x34, 0x40, 0x51, 0x44, 0x34, 0x55, 0x48, 0x51, 0x12, 0x23, 0x76, 0x45, 0x10, ++ 0x64, 0x33, 0x73, 0x25, 0x38, 0x23, 0x38, 0x06, 0x24, 0x51, 0x61, 0x70, 0x81, 0x54, 0x11, 0x67, 0x17, 0x32, 0x00, 0x85, 0x32, 0x60, 0x40, 0x43, 0x71, 0x06, 0x80, 0x37, 0x37, 0x60, 0x70, 0x86, ++ 0x40, 0x87, 0x00, 0x03, 0x52, 0x45, 0x71, 0x48, 0x26, 0x22, 0x03, 0x50, 0x53, 0x56, 0x66, 0x03, 0x72, 0x18, 0x01, 0x37, 0x10, 0x37, 0x10, 0x36, 0x52, 0x78, 0x43, 0x28, 0x24, 0x64, 0x23, 0x20, ++ 0x47, 0x64, 0x23, 0x84, 0x00, 0x00, 0x67, 0x43, 0x64, 0x56, 0x52, 0x26, 0x21, 0x76, 0x65, 0x21, 0x24, 0x13, 0x88, 0x73, 0x47, 0x65, 0x08, 0x43, 0x12, 0x17, 0x01, 0x64, 0x71, 0x46, 0x54, 0x03, ++ 0x87, 0x24, 0x41, 0x77, 0x74, 0x13, 0x76, 0x78, 0x55, 0x21, 0x64, 0x11, 0x17, 0x31, 0x60, 0x50, 0x48, 0x26, 0x04, 0x14, 0x84, 0x74, 0x66, 0x38, 0x03, 0x35, 0x15, 0x58, 0x01, 0x73, 0x51, 0x26, ++ 0x21, 0x33, 0x62, 0x22, 0x27, 0x10, 0x63, 0x45, 0x60, 0x16, 0x57, 0x20, 0x77, 0x85, 0x48, 0x32, 0x72, 0x48, 0x31, 0x56, 0x16, 0x78, 0x34, 0x56, 0x40, 0x57, 0x68, 0x67, 0x34, 0x58, 0x35, 0x25, ++ 0x35, 0x20, 0x81, 0x55, 0x65, 0x48, 0x10, 0x32, 0x05, 0x33, 0x40, 0x16, 0x60, 0x74, 0x23, 0x71, 0x50, 0x16, 0x32, 0x53, 0x34, 0x66, 0x72, 0x70, 0x81, 0x11, 0x18, 0x24, 0x37, 0x32, 0x13, 0x11, ++ 0x54, 0x42, 0x40, 0x82, 0x61, 0x37, 0x75, 0x04, 0x67, 0x10, 0x08, 0x02, 0x61, 0x38, 0x68, 0x50, 0x71, 0x28, 0x37, 0x52, 0x66, 0x72, 0x24, 0x23, 0x08, 0x02, 0x10, 0x05, 0x01, 0x55, 0x20, 0x48, ++ 0x37, 0x44, 0x37, 0x71, 0x16, 0x42, 0x01, 0x23, 0x16, 0x71, 0x07, 0x82, 0x38, 0x08, 0x07, 0x10, 0x11, 0x24, 0x68, 0x25, 0x82, 0x40, 0x18, 0x15, 0x85, 0x18, 0x74, 0x20, 0x85, 0x38, 0x25, 0x83, ++ 0x10, 0x66, 0x75, 0x13, 0x12, 0x52, 0x85, 0x27, 0x65, 0x25, 0x60, 0x31, 0x47, 0x81, 0x62, 0x13, 0x81, 0x53, 0x47, 0x04, 0x22, 0x61, 0x05, 0x71, 0x55, 0x67, 0x44, 0x68, 0x20, 0x05, 0x45, 0x50, ++ 0x51, 0x48, 0x41, 0x13, 0x03, 0x83, 0x02, 0x41, 0x47, 0x47, 0x15, 0x62, 0x72, 0x02, 0x16, 0x53, 0x21, 0x03, 0x03, 0x87, 0x36, 0x03, 0x48, 0x67, 0x51, 0x76, 0x65, 0x27, 0x21, 0x42, 0x17, 0x26, ++ 0x25, 0x76, 0x65, 0x36, 0x12, 0x11, 0x12, 0x16, 0x87, 0x48, 0x45, 0x40, 0x33, 0x42, 0x68, 0x35, 0x44, 0x40, 0x68, 0x13, 0x60, 0x50, 0x31, 0x08, 0x17, 0x43, 0x56, 0x75, 0x06, 0x34, 0x61, 0x84, ++ 0x75, 0x57, 0x58, 0x58, 0x65, 0x44, 0x84, 0x07, 0x62, 0x31, 0x86, 0x70, 0x34, 0x33, 0x67, 0x58, 0x66, 0x67, 0x73, 0x20, 0x75, 0x17, 0x10, 0x36, 0x05, 0x27, 0x37, 0x24, 0x12, 0x20, 0x17, 0x38, ++ 0x87, 0x54, 0x40, 0x32, 0x26, 0x30, 0x62, 0x13, 0x54, 0x18, 0x36, 0x81, 0x55, 0x77, 0x32, 0x00, 0x10, 0x03, 0x65, 0x18, 0x57, 0x41, 0x86, 0x02, 0x14, 0x44, 0x33, 0x41, 0x02, 0x37, 0x55, 0x63, ++ 0x58, 0x75, 0x02, 0x61, 0x88, 0x64, 0x18, 0x51, 0x76, 0x24, 0x15, 0x85, 0x07, 0x11, 0x80, 0x35, 0x41, 0x51, 0x57, 0x42, 0x42, 0x58, 0x54, 0x56, 0x35, 0x45, 0x15, 0x57, 0x07, 0x63, 0x86, 0x77, ++ 0x24, 0x00, 0x17, 0x67, 0x83, 0x86, 0x86, 0x25, 0x88, 0x17, 0x75, 0x08, 0x61, 0x23, 0x60, 0x60, 0x65, 0x07, 0x33, 0x35, 0x06, 0x60, 0x52, 0x75, 0x02, 0x47, 0x24, 0x33, 0x64, 0x51, 0x35, 0x45, ++ 0x52, 0x55, 0x41, 0x48, 0x60, 0x42, 0x16, 0x43, 0x15, 0x63, 0x33, 0x16, 0x55, 0x67, 0x60, 0x70, 0x34, 0x26, 0x77, 0x08, 0x07, 0x60, 0x55, 0x30, 0x63, 0x50, 0x13, 0x37, 0x70, 0x77, 0x01, 0x37, ++ 0x45, 0x72, 0x74, 0x51, 0x28, 0x72, 0x83, 0x64, 0x74, 0x77, 0x80, 0x27, 0x30, 0x36, 0x44, 0x23, 0x10, 0x55, 0x24, 0x15, 0x43, 0x11, 0x63, 0x14, 0x65, 0x33, 0x63, 0x12, 0x11, 0x84, 0x63, 0x12, ++ 0x63, 0x88, 0x37, 0x62, 0x67, 0x48, 0x35, 0x13, 0x86, 0x35, 0x17, 0x83, 0x12, 0x58, 0x14, 0x47, 0x88, 0x56, 0x08, 0x48, 0x01, 0x42, 0x71, 0x64, 0x77, 0x53, 0x64, 0x73, 0x54, 0x66, 0x05, 0x56, ++ 0x60, 0x52, 0x37, 0x00, 0x46, 0x40, 0x31, 0x10, 0x55, 0x50, 0x45, 0x36, 0x48, 0x42, 0x34, 0x06, 0x61, 0x11, 0x75, 0x52, 0x61, 0x58, 0x52, 0x15, 0x73, 0x57, 0x31, 0x56, 0x15, 0x87, 0x78, 0x74, ++ 0x45, 0x03, 0x87, 0x20, 0x54, 0x56, 0x11, 0x66, 0x22, 0x04, 0x46, 0x14, 0x14, 0x61, 0x83, 0x00, 0x06, 0x86, 0x64, 0x06, 0x00, 0x47, 0x37, 0x44, 0x22, 0x50, 0x56, 0x01, 0x04, 0x57, 0x73, 0x50, ++ 0x74, 0x87, 0x02, 0x66, 0x37, 0x48, 0x68, 0x48, 0x02, 0x63, 0x28, 0x52, 0x63, 0x58, 0x11, 0x30, 0x44, 0x28, 0x68, 0x32, 0x61, 0x10, 0x61, 0x88, 0x26, 0x07, 0x00, 0x73, 0x38, 0x62, 0x55, 0x27, ++ 0x15, 0x53, 0x45, 0x32, 0x14, 0x25, 0x73, 0x23, 0x12, 0x21, 0x87, 0x86, 0x55, 0x67, 0x25, 0x67, 0x46, 0x74, 0x72, 0x81, 0x44, 0x54, 0x64, 0x15, 0x77, 0x41, 0x07, 0x80, 0x60, 0x56, 0x13, 0x16, ++ 0x15, 0x40, 0x44, 0x63, 0x47, 0x53, 0x30, 0x77, 0x61, 0x62, 0x50, 0x13, 0x38, 0x41, 0x47, 0x42, 0x66, 0x70, 0x52, 0x06, 0x70, 0x81, 0x25, 0x43, 0x17, 0x77, 0x70, 0x15, 0x22, 0x21, 0x82, 0x50, ++ }, ++ .t0_len = 2496, ++ .t0 = { ++ 0x01, 0x31, 0x73, 0x16, 0x9D, 0xB8, 0x08, 0x6B, 0x12, 0x27, 0x01, 0x70, 0x6A, 0xE4, 0x9B, 0x99, 0x30, 0x5E, 0xE6, 0xD0, 0x16, 0xF1, 0x6F, 0x9F, 0xAC, 0xC1, 0xF8, 0x35, 0x29, 0x8B, 0x41, 0xE2, ++ 0x16, 0x64, 0x20, 0x60, 0x05, 0xCE, 0xB9, 0x81, 0xA3, 0x5F, 0x18, 0x65, 0x1C, 0xDB, 0x90, 0xE6, 0x8C, 0x1F, 0x95, 0x0B, 0x05, 0x9F, 0x73, 0xD6, 0xD3, 0x14, 0x3A, 0x1F, 0x47, 0xAA, 0x21, 0xD8, ++ 0x0A, 0x05, 0xFA, 0xF5, 0xD3, 0xA4, 0x0F, 0x67, 0x14, 0x8D, 0x3A, 0x89, 0xA9, 0xFD, 0xA8, 0x03, 0x64, 0xD5, 0x7C, 0x7B, 0x8F, 0x68, 0x05, 0x8A, 0x25, 0xD0, 0x84, 0x98, 0xD9, 0xA9, 0xC3, 0x78, ++ 0xC9, 0x81, 0x85, 0xDB, 0x13, 0x25, 0x91, 0x59, 0xCA, 0xC4, 0x76, 0x9C, 0x34, 0xA0, 0x80, 0x23, 0xA3, 0x38, 0x8C, 0x35, 0x05, 0x40, 0x6F, 0xB2, 0x1C, 0x69, 0xEE, 0xC1, 0x2D, 0xAC, 0x95, 0xA3, ++ 0xC9, 0xBA, 0x61, 0x18, 0x52, 0x37, 0xF0, 0xFF, 0x1E, 0x0E, 0x05, 0xF1, 0xA6, 0xF5, 0xA0, 0xC0, 0x90, 0x90, 0x10, 0x06, 0x65, 0xA1, 0xAD, 0x3A, 0xFB, 0x10, 0x76, 0x84, 0x7B, 0x23, 0x2E, 0xEE, ++ 0xA7, 0x84, 0x09, 0xBD, 0x90, 0x55, 0xDB, 0x57, 0xC1, 0xB3, 0x1E, 0x28, 0xA0, 0x1D, 0x09, 0x99, 0x90, 0x35, 0xBD, 0xFC, 0x65, 0x7A, 0x61, 0x04, 0x01, 0x03, 0xEC, 0xEB, 0xDC, 0x79, 0x34, 0x09, ++ 0x73, 0x37, 0x34, 0xD9, 0x34, 0x2C, 0xC5, 0xA0, 0x69, 0xE0, 0x70, 0xC2, 0x42, 0x1D, 0xDE, 0x11, 0xC4, 0x9E, 0x17, 0x2D, 0xBE, 0x7F, 0xEA, 0xF9, 0xDE, 0xDD, 0xFB, 0x3D, 0xA5, 0xDA, 0xA6, 0xB3, ++ 0xDD, 0x13, 0x20, 0x0B, 0x09, 0x04, 0x2E, 0x14, 0x4E, 0xEA, 0x95, 0x1B, 0x43, 0xDA, 0x48, 0x15, 0x3C, 0x1F, 0x1D, 0x5C, 0x07, 0xFC, 0xF4, 0x73, 0xFA, 0x7F, 0x32, 0x1E, 0x72, 0x53, 0x45, 0x77, ++ 0xC8, 0x95, 0x15, 0x1B, 0x46, 0xE4, 0x83, 0x31, 0xDD, 0xE6, 0x1D, 0xA4, 0x5F, 0x86, 0x09, 0xAC, 0x59, 0x58, 0x18, 0x14, 0x66, 0x6E, 0x16, 0x58, 0xB4, 0x91, 0x14, 0x52, 0x4B, 0xA3, 0x84, 0x0C, ++ 0x6B, 0xC5, 0x59, 0x65, 0x51, 0xAE, 0xF4, 0x24, 0x12, 0xC8, 0xAA, 0xCC, 0xDD, 0x8E, 0xF6, 0x9E, 0x46, 0x38, 0x0E, 0x6D, 0xEF, 0x60, 0xFD, 0x91, 0x22, 0x8B, 0x99, 0xCB, 0x51, 0x1D, 0x68, 0xEF, ++ 0x66, 0x31, 0x74, 0x8A, 0x05, 0x48, 0x08, 0x3A, 0x21, 0x54, 0x45, 0xEC, 0x54, 0x69, 0x34, 0x71, 0xA8, 0x31, 0x04, 0x2C, 0xF4, 0x1D, 0x09, 0xAF, 0x89, 0x81, 0x19, 0xB0, 0xFC, 0x64, 0x6E, 0x48, ++ 0x45, 0x39, 0xC8, 0xC3, 0x2D, 0x5D, 0xC2, 0x4F, 0x94, 0x39, 0xD3, 0x3E, 0xEE, 0xA0, 0x33, 0xA4, 0x08, 0x15, 0x50, 0xFD, 0xB0, 0xB0, 0x89, 0x23, 0xDB, 0xA5, 0xD4, 0x4A, 0x1A, 0x87, 0x6F, 0xE7, ++ 0xEE, 0x43, 0x20, 0xBF, 0x02, 0xF9, 0xBE, 0x26, 0xF4, 0x18, 0xF3, 0x09, 0xFA, 0x11, 0xFC, 0xD0, 0xC8, 0x64, 0xA7, 0xAA, 0x34, 0x11, 0x50, 0x83, 0xC1, 0xEA, 0x77, 0x53, 0x45, 0xAC, 0x05, 0x48, ++ 0xC8, 0x77, 0xC6, 0x85, 0xEA, 0x8C, 0x91, 0xB9, 0x24, 0xAF, 0x4F, 0x60, 0x7E, 0xF3, 0x7A, 0x02, 0x08, 0xE2, 0x13, 0x09, 0xAB, 0x6D, 0x0F, 0x2F, 0x8A, 0x4E, 0xAA, 0x04, 0x51, 0xFF, 0x4A, 0x47, ++ 0xE6, 0xF4, 0x82, 0x95, 0x8D, 0x81, 0xA1, 0x66, 0xA6, 0xA0, 0x8A, 0x6A, 0x10, 0xFC, 0x8F, 0x9A, 0xDA, 0x42, 0xB6, 0x4A, 0x12, 0xB9, 0x35, 0x7D, 0x59, 0x8A, 0x36, 0x64, 0xE9, 0xDF, 0x13, 0x75, ++ 0x5C, 0x10, 0xFF, 0xD7, 0x17, 0x7E, 0x59, 0x4D, 0xFC, 0xBC, 0xFB, 0x5D, 0x11, 0xB6, 0xAD, 0xB1, 0x60, 0x74, 0x45, 0x47, 0x9A, 0x5D, 0xB1, 0xAD, 0x8C, 0xA6, 0xD9, 0x15, 0xF8, 0x97, 0x95, 0xD2, ++ 0x40, 0xCB, 0xED, 0xFA, 0xD2, 0x53, 0x9D, 0x10, 0x51, 0x8E, 0x53, 0xCC, 0x45, 0x0D, 0x6F, 0xC5, 0x38, 0x5A, 0xD6, 0xD7, 0x6B, 0x78, 0x30, 0xF1, 0x38, 0x28, 0x12, 0x06, 0x45, 0xE3, 0xA0, 0xA5, ++ 0xDC, 0xDE, 0xAF, 0x15, 0xF1, 0x96, 0x8E, 0x64, 0xB3, 0xB1, 0xCE, 0xAF, 0x53, 0x6C, 0xAA, 0x29, 0x53, 0xD1, 0x61, 0xC7, 0x55, 0x28, 0xC3, 0xFA, 0x84, 0x93, 0xE0, 0xC1, 0x77, 0xAE, 0x80, 0x7C, ++ 0xED, 0x37, 0x64, 0x8A, 0x82, 0xC9, 0xBE, 0x8B, 0xA9, 0x70, 0x29, 0x6D, 0x54, 0x3F, 0x6F, 0xBD, 0x67, 0x24, 0xA9, 0x9A, 0x68, 0xD2, 0xF6, 0x8C, 0x1F, 0xD3, 0x33, 0xF9, 0xDE, 0xF8, 0x52, 0x6D, ++ 0xB7, 0x83, 0x64, 0x55, 0xB3, 0x13, 0xE6, 0xBC, 0x36, 0x61, 0x78, 0xC9, 0xC5, 0x77, 0x21, 0x60, 0x1E, 0xC0, 0x33, 0x50, 0x54, 0xF0, 0x67, 0xB7, 0x8E, 0x66, 0x3A, 0x05, 0x8D, 0xBD, 0xA1, 0xC1, ++ 0x2D, 0x80, 0xA3, 0x92, 0xF8, 0x9C, 0x0A, 0xD9, 0xE2, 0xA3, 0xB2, 0xEA, 0x17, 0xE9, 0xC9, 0xA3, 0xB1, 0x4D, 0x17, 0x68, 0x22, 0xEE, 0xAC, 0x5F, 0xB5, 0xFF, 0x7D, 0x4C, 0x87, 0xD7, 0x60, 0x80, ++ 0xD2, 0xD4, 0x2D, 0x9A, 0xA4, 0xC9, 0x51, 0xF4, 0xCA, 0xF1, 0x1A, 0x24, 0x4E, 0xDA, 0x71, 0x1D, 0x12, 0x0A, 0x2E, 0xA3, 0x21, 0xD1, 0x55, 0x1D, 0x86, 0xCA, 0x92, 0x65, 0xE9, 0xCD, 0x5F, 0xA9, ++ 0x59, 0x1D, 0x88, 0x0E, 0x40, 0x3B, 0x68, 0x44, 0xF0, 0x51, 0xDC, 0x04, 0x87, 0x99, 0x72, 0xC8, 0x63, 0xB9, 0x7C, 0x72, 0xB4, 0x09, 0xC1, 0x9D, 0x5E, 0xBE, 0xE8, 0xAB, 0x58, 0xC6, 0xE7, 0xB3, ++ 0x93, 0x8A, 0x68, 0xA9, 0xCA, 0xD7, 0x5D, 0x80, 0xC6, 0xFF, 0xC4, 0xF2, 0x22, 0x54, 0xFF, 0x44, 0x20, 0xC6, 0x06, 0xAD, 0x12, 0x0C, 0xC2, 0x03, 0x46, 0xA7, 0xE7, 0x32, 0x4E, 0x78, 0xC8, 0x62, ++ 0xE0, 0xDE, 0xE1, 0x61, 0xA6, 0x4F, 0x44, 0x91, 0x7D, 0xB0, 0xC3, 0x8C, 0x1F, 0x79, 0xC9, 0x69, 0x22, 0x0D, 0x20, 0x2F, 0x88, 0x02, 0xD0, 0xF9, 0xD7, 0xAB, 0xFB, 0x2D, 0xE4, 0x34, 0xB1, 0xC5, ++ 0x3D, 0xAB, 0xB5, 0x75, 0x75, 0xEE, 0xBB, 0xBF, 0x31, 0xCF, 0xB2, 0x92, 0x48, 0x72, 0xFA, 0x01, 0x47, 0x3B, 0x39, 0x76, 0xAE, 0xAD, 0xC9, 0x96, 0x99, 0xB1, 0x38, 0x20, 0xFA, 0x08, 0x68, 0xF2, ++ 0xC9, 0xFD, 0x0D, 0x35, 0x2E, 0x25, 0x93, 0x27, 0x3C, 0xD6, 0x21, 0xB1, 0x97, 0x4F, 0xFA, 0x61, 0x87, 0xFA, 0x05, 0xC4, 0x11, 0x8D, 0x45, 0x17, 0xC9, 0x34, 0x15, 0x1C, 0x1F, 0xA3, 0x4B, 0xEC, ++ 0x3E, 0xD3, 0x63, 0x95, 0x98, 0xCB, 0xA2, 0x4E, 0x28, 0x22, 0x9C, 0xE9, 0xFD, 0x3B, 0x1D, 0xB4, 0x96, 0x9C, 0x12, 0xEE, 0x49, 0xE1, 0x8B, 0x36, 0xCE, 0x2B, 0x91, 0x45, 0xAA, 0xC7, 0x54, 0x28, ++ 0xDF, 0xFA, 0x14, 0x53, 0x02, 0xF4, 0x1D, 0x9E, 0x33, 0x94, 0xF3, 0x8D, 0x3F, 0x3C, 0x03, 0x34, 0xC4, 0x77, 0x4F, 0x1E, 0x94, 0x29, 0x6D, 0xE3, 0x6D, 0xC6, 0xE4, 0x30, 0xE4, 0xC0, 0xA5, 0x37, ++ 0xE6, 0x8B, 0xDD, 0x41, 0xAF, 0x04, 0x21, 0x19, 0x3B, 0x16, 0xAB, 0x18, 0x91, 0xFA, 0x83, 0x6C, 0xBC, 0x36, 0x7B, 0x40, 0x37, 0x05, 0xAB, 0xA5, 0xD2, 0xF9, 0xF2, 0xA4, 0xC2, 0xF2, 0x75, 0xEC, ++ 0x01, 0x0B, 0x2E, 0xAB, 0x84, 0x09, 0x5A, 0x56, 0x9D, 0xBA, 0xE4, 0x45, 0x7C, 0xC2, 0xAC, 0x1C, 0xFE, 0xB1, 0xED, 0xA4, 0x3C, 0x3E, 0x28, 0x19, 0x27, 0x3C, 0x48, 0x7A, 0xCB, 0xEB, 0xFA, 0x0A, ++ 0x0E, 0xD1, 0xCC, 0x46, 0x67, 0xA6, 0xF5, 0x77, 0xF6, 0x2D, 0xFB, 0x1B, 0xC8, 0xFE, 0xAF, 0xD8, 0x6D, 0x90, 0x10, 0x8E, 0x16, 0xB8, 0xB0, 0xE6, 0xC2, 0x67, 0x86, 0x86, 0xC9, 0x28, 0xA6, 0x68, ++ 0xBB, 0x98, 0x57, 0xFF, 0xB2, 0x8D, 0xE9, 0x05, 0x45, 0xCD, 0x44, 0x37, 0xDD, 0x32, 0xCC, 0xCC, 0xC6, 0xED, 0x58, 0xFB, 0x46, 0xFB, 0xF8, 0x5E, 0x0A, 0xEC, 0x0C, 0x81, 0x4E, 0x53, 0x62, 0x45, ++ 0x25, 0x2B, 0x80, 0x29, 0xF0, 0xA2, 0xAB, 0x44, 0xB9, 0x02, 0x7A, 0x7E, 0x35, 0xA9, 0x41, 0xFA, 0x11, 0x3C, 0x8D, 0x82, 0x97, 0x4E, 0xA2, 0x2D, 0xF0, 0x2D, 0x84, 0xE5, 0x32, 0x8C, 0xEA, 0x83, ++ 0xD1, 0x2D, 0x39, 0x9C, 0x7F, 0x02, 0x59, 0x05, 0x5F, 0x4B, 0x3A, 0xD7, 0x07, 0xE7, 0xB3, 0xE5, 0x37, 0xB9, 0x3D, 0xEA, 0x1A, 0x06, 0x6B, 0xDC, 0x77, 0x5F, 0xC7, 0xD1, 0xA6, 0xF0, 0xFE, 0x29, ++ 0xDD, 0xAF, 0xA9, 0xA7, 0xDA, 0x63, 0x0A, 0x46, 0x7E, 0xF6, 0xCB, 0xF5, 0xCC, 0xDF, 0xFD, 0x79, 0xF1, 0xC8, 0xBB, 0x6B, 0xB3, 0x88, 0x20, 0x35, 0xC7, 0x3C, 0xDF, 0x7E, 0xCF, 0xFB, 0x53, 0xC7, ++ 0x12, 0xA7, 0xC7, 0xEA, 0xA5, 0x97, 0x65, 0xEF, 0xA9, 0x60, 0xBF, 0x21, 0xE2, 0x5A, 0x67, 0x03, 0xFB, 0x30, 0x4F, 0x07, 0x73, 0x9F, 0xEB, 0xC6, 0x3F, 0x49, 0x6B, 0x13, 0xCC, 0xAA, 0x07, 0x73, ++ 0x38, 0xA0, 0xB9, 0xA9, 0x76, 0xA9, 0xF0, 0xFC, 0x57, 0x42, 0xD8, 0x5C, 0x4A, 0xF4, 0x01, 0xA4, 0xCE, 0x34, 0x1B, 0x47, 0xBE, 0x25, 0x94, 0xFF, 0x7E, 0x30, 0x19, 0xA0, 0xE0, 0x64, 0x53, 0x5F, ++ 0x9D, 0x93, 0x95, 0xCC, 0x74, 0xA6, 0xA6, 0xF0, 0x0E, 0x0C, 0x4E, 0x35, 0x30, 0xA7, 0xFE, 0x93, 0x10, 0xCE, 0x30, 0xB6, 0x92, 0x2D, 0x04, 0xFD, 0xE0, 0xAA, 0x74, 0x9C, 0xC3, 0xFD, 0xED, 0xB4, ++ 0xD8, 0x70, 0x8C, 0x1F, 0x69, 0x68, 0xBB, 0xED, 0xDD, 0xD5, 0x83, 0x3B, 0x29, 0x9D, 0x79, 0xD6, 0x14, 0x28, 0x18, 0x00, 0x99, 0xB0, 0xA9, 0x46, 0xA5, 0xD7, 0x90, 0x85, 0xDF, 0x7F, 0x87, 0x2C, ++ 0xBD, 0xD2, 0x19, 0xE6, 0xB8, 0xEF, 0x8B, 0x8A, 0xB5, 0xC1, 0xA1, 0x49, 0xE6, 0xE1, 0x5E, 0xF2, 0x82, 0x86, 0x54, 0xFA, 0xBE, 0xC2, 0x49, 0xAF, 0xAA, 0xC4, 0xDC, 0x0B, 0x3B, 0x54, 0x23, 0x34, ++ 0x16, 0x2F, 0xB0, 0x98, 0x00, 0xB6, 0xC3, 0x6C, 0xC9, 0x0F, 0x2A, 0x10, 0x65, 0x58, 0xBA, 0xE2, 0x19, 0x8F, 0xA7, 0xD1, 0xE2, 0xD7, 0x30, 0xDE, 0x46, 0xE3, 0x55, 0xAE, 0xA9, 0x32, 0x48, 0xE5, ++ 0x3A, 0xB2, 0x1B, 0x51, 0x8E, 0xC9, 0x9D, 0x5F, 0x3B, 0x02, 0x11, 0x96, 0xA0, 0xF6, 0x14, 0xA4, 0x6B, 0x94, 0x75, 0x62, 0x12, 0x34, 0x73, 0x3A, 0x28, 0xA4, 0x65, 0xCC, 0x5A, 0x7F, 0xD4, 0x32, ++ 0xC3, 0x62, 0x58, 0x12, 0xAA, 0xBB, 0xB4, 0x2D, 0x2D, 0x9C, 0xBE, 0xF1, 0x6C, 0xBE, 0xD9, 0x36, 0x72, 0x02, 0xB0, 0x28, 0x94, 0xD0, 0x6B, 0xB8, 0x01, 0xBD, 0xA8, 0x47, 0x2B, 0x99, 0x18, 0xB7, ++ 0xD7, 0x24, 0xE3, 0x65, 0x57, 0xDB, 0xE6, 0xB7, 0x63, 0x3A, 0x5F, 0xD2, 0x2D, 0x0E, 0x33, 0x6E, 0x55, 0x57, 0xAF, 0xC0, 0x18, 0xC8, 0x12, 0xE9, 0xE6, 0xA3, 0x5B, 0xFD, 0x8C, 0x60, 0xAB, 0x38, ++ 0x2E, 0x14, 0xFF, 0x51, 0x14, 0x2B, 0x2D, 0x2C, 0x75, 0xA7, 0x67, 0xF3, 0x24, 0x13, 0xBA, 0x38, 0x48, 0x75, 0x58, 0xF9, 0x34, 0x5C, 0xBE, 0x6F, 0xD1, 0xD6, 0xB7, 0x8C, 0x2E, 0x62, 0x2F, 0x3B, ++ 0x97, 0x62, 0x30, 0xF9, 0x9D, 0x6C, 0xBA, 0xF0, 0xBB, 0xD1, 0x49, 0x49, 0x51, 0x0A, 0x52, 0x64, 0x4E, 0xF3, 0xF3, 0x07, 0x88, 0x65, 0x03, 0x7A, 0x1C, 0x10, 0xF4, 0x7B, 0x59, 0x54, 0x66, 0x99, ++ 0xE1, 0xBD, 0x53, 0x9C, 0x7D, 0xDC, 0xC0, 0x3F, 0x71, 0xA0, 0x15, 0x8E, 0xA9, 0xF0, 0x17, 0x8E, 0x18, 0x7B, 0xB6, 0xD4, 0x94, 0x40, 0xDF, 0x2B, 0x10, 0x63, 0x0F, 0xBE, 0x2F, 0xEB, 0x50, 0x97, ++ 0xE4, 0x7F, 0x28, 0x57, 0x11, 0xCA, 0x6F, 0x83, 0x5A, 0x10, 0xD3, 0xAA, 0x75, 0xC0, 0x3C, 0x41, 0x84, 0xC0, 0x3E, 0xF3, 0x07, 0x5D, 0x49, 0xDC, 0xB2, 0x17, 0x7A, 0xBD, 0x53, 0xAD, 0x73, 0x99, ++ 0xD2, 0x90, 0xEA, 0x69, 0x1D, 0x64, 0x73, 0x29, 0x05, 0x63, 0x40, 0xE8, 0xC8, 0x36, 0xE9, 0x75, 0x0F, 0xD8, 0x81, 0xDC, 0xE3, 0x09, 0xD3, 0x09, 0xA9, 0x5B, 0x82, 0x49, 0x2D, 0x4B, 0xDC, 0x15, ++ 0xEC, 0xF8, 0xC7, 0xF5, 0xD3, 0xB9, 0xDD, 0x27, 0x55, 0x48, 0x51, 0x2D, 0xB5, 0xEF, 0x80, 0xCD, 0x40, 0x9E, 0xD3, 0x2B, 0x51, 0x48, 0xB8, 0x2B, 0xF2, 0x40, 0xA7, 0xDC, 0x72, 0xA1, 0x85, 0x23, ++ 0xD8, 0x08, 0xB7, 0xA4, 0xF9, 0xE2, 0x54, 0x79, 0x9E, 0x17, 0x27, 0x8F, 0xA8, 0x8D, 0xAE, 0xBC, 0x94, 0x46, 0x32, 0xE8, 0x3F, 0x86, 0x09, 0xD6, 0x81, 0xAB, 0x46, 0x35, 0x13, 0x02, 0x3D, 0x67, ++ 0xCD, 0x51, 0xB1, 0x53, 0xF0, 0x96, 0x29, 0x12, 0xDD, 0x64, 0xAB, 0x8F, 0x65, 0x29, 0xDC, 0x22, 0xAA, 0x89, 0xE5, 0x72, 0xA7, 0xF8, 0x9C, 0xB9, 0x7A, 0x8F, 0x45, 0x09, 0x31, 0x9D, 0x22, 0x3B, ++ 0xB2, 0x99, 0x74, 0x95, 0x17, 0x16, 0xFD, 0x31, 0x77, 0x14, 0x0A, 0x31, 0xEA, 0x20, 0x04, 0x8B, 0xAF, 0x0F, 0xCA, 0x23, 0x0C, 0xEF, 0x21, 0x96, 0x7A, 0xBD, 0x83, 0x30, 0x9A, 0x4F, 0xF7, 0xE3, ++ 0x5E, 0x88, 0x78, 0x4D, 0xCA, 0x77, 0xAC, 0x07, 0x90, 0x20, 0xEC, 0x0C, 0xA6, 0xDD, 0xEF, 0xBC, 0xBB, 0x7E, 0x31, 0x73, 0x29, 0x31, 0x46, 0x65, 0xD7, 0xC5, 0x1F, 0x63, 0x1F, 0x68, 0x1B, 0x60, ++ 0x03, 0x64, 0xE4, 0x75, 0x74, 0xF2, 0x52, 0xBA, 0xD6, 0x39, 0x6B, 0x3F, 0x5B, 0x17, 0xAD, 0xC2, 0x20, 0x96, 0x6A, 0x93, 0xCE, 0x8F, 0x31, 0x5A, 0x2F, 0x83, 0x06, 0x8D, 0x2E, 0xA0, 0x69, 0x52, ++ 0xE6, 0xEB, 0xD8, 0x02, 0x47, 0x3A, 0x22, 0x64, 0xEF, 0xA4, 0x05, 0xB3, 0xE4, 0x91, 0xBE, 0x77, 0x6C, 0x50, 0x40, 0x6E, 0x11, 0x50, 0xC5, 0x6B, 0x89, 0x4C, 0xF8, 0x64, 0x54, 0x6B, 0x0C, 0x7A, ++ 0x65, 0xE3, 0xF1, 0xA2, 0xBE, 0xFE, 0xF2, 0xA9, 0x99, 0x0B, 0xAF, 0xE7, 0x0B, 0x6C, 0xA9, 0xF9, 0x1A, 0x8F, 0x3D, 0xD2, 0x13, 0x07, 0xA3, 0x9A, 0x2A, 0xFB, 0xDF, 0xBD, 0xE9, 0xB7, 0xCA, 0x3D, ++ 0x78, 0x28, 0xB1, 0x3F, 0x49, 0xDE, 0xCD, 0x72, 0x9C, 0x00, 0x39, 0xE9, 0x4E, 0xBB, 0x7B, 0x4B, 0xDA, 0x09, 0xB3, 0x50, 0x55, 0x29, 0xA1, 0x2C, 0xB1, 0xE2, 0xFD, 0x79, 0xB9, 0xE5, 0x08, 0x7C, ++ 0xD7, 0xC3, 0xBC, 0x05, 0xF7, 0xCF, 0xFB, 0xBA, 0x93, 0x2A, 0x7B, 0xFF, 0x8E, 0x67, 0x55, 0x5F, 0xEE, 0x03, 0x04, 0xD8, 0x90, 0x31, 0x3F, 0x86, 0xE1, 0x89, 0x25, 0x69, 0xE2, 0xD6, 0xF1, 0x4A, ++ 0x89, 0x93, 0x87, 0x17, 0xAA, 0xA3, 0xA3, 0x2A, 0xD1, 0x16, 0x71, 0x50, 0x29, 0x9C, 0x21, 0x82, 0x0A, 0xBD, 0x70, 0xFF, 0x90, 0x2B, 0x00, 0x4C, 0x6D, 0xE9, 0x1C, 0x1C, 0x0B, 0x40, 0x70, 0x64, ++ 0x42, 0xAF, 0x53, 0x1E, 0xC4, 0x90, 0xB0, 0x12, 0x75, 0x0B, 0xCB, 0x48, 0x77, 0x93, 0x5A, 0x7E, 0x54, 0x03, 0x17, 0x02, 0xBB, 0x98, 0x8E, 0xB3, 0xF9, 0x29, 0x14, 0xCD, 0xBD, 0x42, 0x97, 0x9A, ++ 0xD7, 0xD2, 0x7B, 0x22, 0x33, 0xEC, 0x12, 0x79, 0xD0, 0x54, 0x93, 0xB1, 0x2D, 0x3F, 0x5F, 0xBB, 0x77, 0x57, 0x53, 0x60, 0x21, 0xB5, 0xF4, 0xCD, 0x93, 0x2B, 0x48, 0x0E, 0x40, 0xCB, 0xAE, 0x50, ++ 0xD2, 0x32, 0xE0, 0xA2, 0xEF, 0xFE, 0x0E, 0x8C, 0xB5, 0x88, 0x08, 0x66, 0x91, 0x99, 0xF0, 0x83, 0x08, 0x72, 0xF3, 0x69, 0x73, 0x86, 0x82, 0xF8, 0x46, 0xF6, 0xDE, 0xAD, 0x09, 0x5B, 0xFF, 0xCD, ++ 0x67, 0x0A, 0x4A, 0x9C, 0xD1, 0x42, 0x39, 0x6C, 0x58, 0x50, 0x6E, 0xA7, 0xA6, 0x8B, 0x21, 0xAB, 0xDC, 0xC1, 0x9C, 0xCC, 0x06, 0xF6, 0xDA, 0x55, 0xC8, 0x85, 0xA8, 0x55, 0xC4, 0x56, 0x68, 0x0C, ++ 0xD4, 0x47, 0x7B, 0xCA, 0x2B, 0xBA, 0x91, 0x53, 0xDC, 0xAE, 0xE6, 0x82, 0x65, 0x5B, 0x74, 0xEC, 0xA6, 0xF7, 0xE4, 0x4C, 0x3B, 0xFE, 0x1E, 0x2D, 0x45, 0x74, 0x91, 0xED, 0x1B, 0xC6, 0x4E, 0x1C, ++ 0xF6, 0xCE, 0x18, 0xCF, 0x44, 0xA0, 0x16, 0x6D, 0x1B, 0x24, 0x44, 0x80, 0x88, 0x2C, 0x1B, 0x35, 0xCE, 0xA7, 0x03, 0x15, 0x8E, 0x18, 0xC7, 0xEC, 0x6E, 0x0C, 0xF8, 0x27, 0xD5, 0x50, 0x4A, 0x45, ++ 0xAE, 0x61, 0x15, 0x23, 0x09, 0xBC, 0x8A, 0x18, 0xA5, 0x2C, 0x0E, 0x76, 0x99, 0xA8, 0x7C, 0x4E, 0x31, 0xC6, 0x91, 0x1A, 0x83, 0x05, 0x35, 0x15, 0x55, 0xB2, 0x97, 0x1C, 0x94, 0x60, 0x2B, 0x70, ++ 0xE6, 0x70, 0xAA, 0x30, 0xB9, 0x07, 0x34, 0xEC, 0x1D, 0xAA, 0xD0, 0x3A, 0x30, 0xA9, 0x6F, 0x58, 0x47, 0xC5, 0xC3, 0xF7, 0x97, 0x3C, 0xF4, 0x57, 0x2D, 0x16, 0x6C, 0x51, 0xD1, 0xE9, 0x4A, 0x50, ++ 0xA4, 0xC1, 0xC8, 0x94, 0xA2, 0x05, 0xF8, 0xEC, 0xB3, 0x4E, 0x80, 0xF8, 0x4C, 0xA8, 0xDC, 0x31, 0xA4, 0x29, 0xD5, 0x60, 0x05, 0x96, 0x17, 0x9D, 0x10, 0x93, 0xE2, 0xA3, 0x89, 0xCC, 0xFE, 0x9C, ++ 0x04, 0x02, 0xEE, 0x49, 0x55, 0x17, 0x10, 0xFF, 0xC2, 0x5B, 0xDB, 0xE4, 0x78, 0xF3, 0x9F, 0x20, 0x63, 0xF3, 0x1F, 0x75, 0xD7, 0x43, 0x2E, 0xCA, 0x1C, 0x59, 0xEB, 0xD8, 0xF4, 0x6D, 0x86, 0xA0, ++ 0x92, 0xDB, 0x12, 0xF8, 0x10, 0xFA, 0x91, 0x1C, 0x20, 0xD4, 0xCC, 0x1E, 0x42, 0x5C, 0x54, 0x3D, 0xC6, 0x45, 0x77, 0xE4, 0x4D, 0x84, 0xF4, 0x22, 0xD9, 0x66, 0x1E, 0x3D, 0x35, 0x92, 0x13, 0x50, ++ 0xD6, 0xF7, 0x09, 0x9C, 0x54, 0x25, 0xE5, 0x09, 0xE1, 0x45, 0x8A, 0x05, 0x00, 0xAE, 0x5E, 0xB4, 0xCC, 0x6B, 0xB5, 0x06, 0x26, 0xD0, 0x13, 0x0F, 0x09, 0x36, 0x17, 0x17, 0xA9, 0x59, 0x19, 0xAE, ++ 0xD3, 0x55, 0x92, 0xFA, 0x4A, 0xBE, 0x7B, 0x2B, 0xD4, 0xF9, 0x99, 0x42, 0x21, 0x51, 0xE6, 0x3D, 0x4E, 0xD0, 0x0C, 0xC7, 0x51, 0xA5, 0x86, 0x79, 0x77, 0xF1, 0x5E, 0x48, 0x2E, 0xFA, 0x01, 0xE5, ++ 0xCC, 0xC4, 0x40, 0x64, 0xF5, 0xB9, 0xFF, 0xE2, 0x9A, 0xFF, 0xE6, 0x26, 0xC4, 0xD5, 0x17, 0x0A, 0xDA, 0x1D, 0xF0, 0x27, 0xAB, 0x41, 0x79, 0x60, 0x8C, 0x40, 0x93, 0xCC, 0xE2, 0xC4, 0x09, 0x30, ++ 0x8C, 0xD8, 0x98, 0x37, 0x1A, 0x49, 0xFB, 0xEA, 0x2A, 0x2F, 0x2B, 0xA1, 0x3B, 0xDE, 0xBA, 0xC1, 0xF4, 0x15, 0x9F, 0x4B, 0x03, 0x68, 0xFB, 0x21, 0xD7, 0x0A, 0x9D, 0x79, 0x31, 0xD7, 0xEF, 0xF9, ++ 0x34, 0xE6, 0xC5, 0x44, 0xE1, 0x3B, 0x7B, 0x73, 0xD4, 0x65, 0x57, 0x6C, 0x6E, 0x81, 0xFD, 0x6D, 0x5F, 0xD9, 0x43, 0x93, 0xE8, 0x02, 0x42, 0xF9, 0x42, 0x0A, 0xCC, 0x0E, 0xD3, 0x53, 0xEF, 0x18, ++ 0xCA, 0x07, 0x0F, 0x5E, 0x9A, 0x28, 0x5A, 0xC4, 0xBC, 0xBA, 0xB1, 0x9A, 0x38, 0x35, 0x6F, 0x55, 0x7B, 0x07, 0x0E, 0x17, 0xAE, 0x5C, 0xF1, 0xF1, 0xBE, 0xD4, 0x26, 0x01, 0xE8, 0x9C, 0x8C, 0x4C, ++ }, ++ .t1_len = 1920, ++ .t1 = { ++ 0xD9, 0xFD, 0xE3, 0xA4, 0x96, 0xF7, 0x58, 0x19, 0xF0, 0xA2, 0x0D, 0x04, 0x41, 0xDC, 0x78, 0x30, 0xB4, 0xAA, 0x1C, 0xB8, 0xEC, 0xFC, 0x91, 0xBA, 0x0E, 0xEC, 0x3A, 0xFB, 0x67, 0x44, 0xE4, 0x77, ++ 0xB4, 0xE6, 0xEC, 0x3F, 0xDA, 0xE7, 0x50, 0x48, 0xFF, 0xEB, 0xAA, 0xBE, 0xA8, 0xE8, 0x22, 0x11, 0x7D, 0x57, 0x87, 0xF7, 0x90, 0x70, 0xEA, 0x88, 0x28, 0x7C, 0xE3, 0xCD, 0x50, 0x11, 0xFD, 0x8D, ++ 0x93, 0xAB, 0x7E, 0x8B, 0x51, 0xF2, 0x61, 0x16, 0xBF, 0x9B, 0x6D, 0x21, 0xC0, 0x3F, 0x88, 0xBF, 0xEC, 0x48, 0x88, 0x76, 0xF4, 0xD0, 0x75, 0xA1, 0x42, 0xD4, 0xE7, 0x84, 0xD7, 0x34, 0x40, 0x75, ++ 0x11, 0xF9, 0x92, 0x06, 0x93, 0x53, 0xF1, 0xDB, 0x67, 0xAC, 0xF7, 0x30, 0x34, 0xA4, 0x68, 0xA1, 0x18, 0x58, 0x80, 0x62, 0x11, 0x1D, 0x32, 0x0E, 0x00, 0xBC, 0xFF, 0x6D, 0xC6, 0x35, 0x73, 0xFC, ++ 0xED, 0x1E, 0x96, 0xAA, 0xEB, 0xA6, 0x45, 0x2E, 0x3C, 0x7A, 0xCD, 0x19, 0x18, 0x1F, 0x9B, 0x81, 0x4B, 0xA1, 0x9D, 0x39, 0xB4, 0xBA, 0xB5, 0x49, 0x6D, 0xC0, 0x55, 0x42, 0x6E, 0x7E, 0xA4, 0x61, ++ 0xAF, 0x55, 0xD5, 0xB9, 0xFE, 0x97, 0xF9, 0xDF, 0x7E, 0x25, 0x32, 0x03, 0xC1, 0xF9, 0xE1, 0x52, 0xE9, 0x6D, 0x75, 0xF9, 0xD9, 0xA8, 0x4F, 0x5C, 0x26, 0x3E, 0xC8, 0xC2, 0x50, 0x44, 0x0A, 0xDC, ++ 0x98, 0x6F, 0x4E, 0x36, 0x41, 0x4C, 0x70, 0x3B, 0x3E, 0x05, 0x42, 0x6B, 0x28, 0xB7, 0x06, 0x59, 0x50, 0xDA, 0x6D, 0x0E, 0x0B, 0x2C, 0x60, 0xAC, 0x36, 0x72, 0xDB, 0x6F, 0x3C, 0x78, 0x44, 0x7D, ++ 0xB7, 0xC2, 0x09, 0x15, 0x77, 0x0E, 0xA6, 0xFC, 0xE8, 0x1D, 0xAB, 0x53, 0x39, 0xC1, 0xD5, 0xAF, 0x82, 0xA5, 0xD3, 0x32, 0x40, 0x99, 0xDF, 0x56, 0x51, 0x6A, 0x07, 0xDB, 0x7C, 0x0F, 0xC6, 0x43, ++ 0x83, 0x80, 0x5C, 0x65, 0xF2, 0xB0, 0x2F, 0xBC, 0xFC, 0xE6, 0x3E, 0x93, 0xC4, 0xBF, 0x09, 0x40, 0x9F, 0x9F, 0x0F, 0x77, 0xE7, 0x3D, 0xA3, 0xB0, 0x01, 0x9F, 0x20, 0x57, 0xE4, 0xCD, 0x7C, 0xFF, ++ 0x0E, 0x57, 0x45, 0xEF, 0x18, 0xC3, 0xFD, 0x76, 0x6E, 0x01, 0x74, 0x7A, 0x64, 0xD4, 0x15, 0xFC, 0x97, 0x89, 0xAB, 0xFA, 0x62, 0x28, 0x4E, 0x11, 0xC7, 0xFF, 0x05, 0xD0, 0x54, 0x8D, 0x97, 0x3F, ++ 0x67, 0x95, 0x59, 0xA6, 0xA3, 0xAA, 0xD7, 0x7E, 0xD5, 0x13, 0x2D, 0x01, 0x50, 0xC0, 0x14, 0xC3, 0xEC, 0x3A, 0x39, 0x5F, 0x01, 0x7E, 0x7A, 0xCF, 0xE3, 0xEA, 0xBF, 0xCA, 0x44, 0x91, 0x0C, 0xA0, ++ 0x6F, 0xF3, 0x35, 0x42, 0xEC, 0xCE, 0x62, 0x41, 0x97, 0x47, 0x42, 0x35, 0x7D, 0x37, 0xF5, 0xC2, 0x84, 0xBF, 0x0F, 0xE1, 0xA7, 0x4B, 0x50, 0xC0, 0x73, 0x55, 0x13, 0x72, 0x13, 0x3A, 0xF2, 0xDD, ++ 0x41, 0xE2, 0x1B, 0xAF, 0xC9, 0xC5, 0x90, 0xEE, 0x6E, 0xBC, 0x4A, 0xCE, 0x73, 0x1E, 0xF5, 0x66, 0x15, 0x6C, 0xA0, 0x37, 0x55, 0xDC, 0x49, 0x3C, 0x13, 0x70, 0x28, 0xAF, 0x3B, 0x3D, 0xE5, 0xB0, ++ 0x0B, 0xD6, 0xCB, 0x3D, 0x9A, 0x87, 0xD0, 0x15, 0x1F, 0x88, 0x7C, 0x67, 0x68, 0xBC, 0x6C, 0xA0, 0x2A, 0x94, 0xFB, 0x20, 0x86, 0x55, 0x1A, 0x0F, 0x89, 0xBA, 0x26, 0x15, 0x4E, 0x9D, 0x45, 0x06, ++ 0xAD, 0x9F, 0xAF, 0x39, 0xF5, 0x72, 0x3E, 0x23, 0x4E, 0x06, 0xCF, 0xDE, 0xD6, 0x9D, 0x4E, 0xE4, 0x14, 0x6B, 0x73, 0xE5, 0xDC, 0x1E, 0x41, 0x52, 0xA2, 0xA3, 0x15, 0x9D, 0x73, 0xDB, 0xC8, 0x33, ++ 0xD3, 0xD4, 0x17, 0xCD, 0x5C, 0xF7, 0xFB, 0x3D, 0xC7, 0x74, 0x5C, 0xEE, 0xD4, 0xDC, 0x0F, 0x5B, 0x1C, 0x6D, 0x6B, 0x69, 0xC1, 0x76, 0x41, 0x57, 0xEA, 0x43, 0xDF, 0x9D, 0xBB, 0x44, 0x2E, 0xFA, ++ 0x39, 0xD1, 0xD0, 0x16, 0x2E, 0x87, 0xC2, 0xD3, 0x0C, 0x50, 0x12, 0xFD, 0x16, 0xD8, 0x69, 0xC8, 0xA1, 0xFC, 0xBB, 0x45, 0xED, 0xCC, 0x8E, 0x18, 0x13, 0xB2, 0xB1, 0x90, 0xA9, 0x61, 0xF9, 0xFC, ++ 0x86, 0x59, 0x1D, 0x3A, 0xBC, 0x53, 0x88, 0xAF, 0x67, 0x8F, 0xF0, 0x3D, 0xA7, 0x8B, 0x7C, 0xC0, 0xF6, 0x18, 0x57, 0x21, 0xC0, 0xDF, 0x33, 0xCC, 0x90, 0x64, 0x35, 0x22, 0x5D, 0xF2, 0x61, 0x10, ++ 0x02, 0xDF, 0x12, 0x0E, 0x83, 0x56, 0x65, 0x32, 0x29, 0x2D, 0xEA, 0x3D, 0x8A, 0xCD, 0x10, 0x9A, 0x0D, 0xFF, 0xAB, 0x3B, 0x0B, 0x43, 0x01, 0x27, 0x96, 0xDB, 0x5B, 0x50, 0x68, 0x3F, 0xB4, 0xC2, ++ 0xD2, 0x50, 0xDA, 0xB7, 0x6A, 0xAE, 0x35, 0xA4, 0x8E, 0x8C, 0x8D, 0x4A, 0x5C, 0xC1, 0x54, 0x75, 0x97, 0x45, 0xF0, 0xA1, 0x23, 0x0F, 0x6C, 0xA9, 0xDD, 0x9C, 0x99, 0xE2, 0xF8, 0x0E, 0xDC, 0x83, ++ 0x30, 0x4C, 0xE0, 0x1E, 0x98, 0xF6, 0xC9, 0x48, 0x95, 0x29, 0xA8, 0x22, 0xF9, 0x00, 0x33, 0xC2, 0x28, 0x31, 0x5E, 0xB2, 0xFC, 0xC8, 0xDB, 0xA3, 0x82, 0xED, 0x43, 0x01, 0xE0, 0x76, 0x07, 0xA5, ++ 0xB0, 0x76, 0xC7, 0x25, 0xF1, 0x24, 0x99, 0x4F, 0x18, 0xA9, 0x97, 0xD2, 0xC5, 0xBB, 0xF9, 0xA3, 0x24, 0x60, 0x52, 0x65, 0x10, 0x8A, 0xCB, 0xF4, 0x61, 0x0F, 0xA1, 0xC3, 0x37, 0x44, 0x08, 0x85, ++ 0x0A, 0x08, 0x64, 0xE2, 0xB6, 0x10, 0x17, 0xEB, 0xEC, 0x1F, 0xBA, 0xB8, 0x9D, 0xE3, 0xAB, 0x1B, 0x93, 0xCE, 0x49, 0x18, 0xB9, 0xE2, 0xC9, 0xE3, 0xFE, 0x45, 0x67, 0x58, 0x06, 0x2A, 0x9F, 0x88, ++ 0x2B, 0x28, 0x33, 0x18, 0x27, 0x1F, 0x4B, 0x95, 0x52, 0xFC, 0xF3, 0x26, 0x24, 0xA9, 0xFD, 0xAA, 0x44, 0xC6, 0x5C, 0x60, 0xE2, 0xB3, 0x64, 0x8B, 0xEF, 0x1F, 0x17, 0xD0, 0xB7, 0xC7, 0x48, 0x69, ++ 0xEE, 0x0B, 0x53, 0xC4, 0xA6, 0x2A, 0x24, 0x84, 0x5D, 0xCE, 0xA5, 0xBC, 0xBF, 0x93, 0xB9, 0x2E, 0x4C, 0x26, 0x64, 0x85, 0x84, 0xE3, 0x34, 0x79, 0x28, 0x2E, 0x6C, 0x8B, 0x1D, 0x8F, 0xE2, 0x11, ++ 0x81, 0xBD, 0x9C, 0xF7, 0x5F, 0x8A, 0x96, 0x17, 0x24, 0xD4, 0xC4, 0x30, 0x97, 0x79, 0xF1, 0xF1, 0xB7, 0x75, 0xD2, 0x54, 0xF7, 0x0B, 0xD1, 0x76, 0x9C, 0xC7, 0xC0, 0xED, 0xD2, 0xA9, 0x5F, 0xE5, ++ 0xC9, 0xD8, 0x4B, 0x16, 0xF7, 0xC5, 0x4D, 0x85, 0xCC, 0xE4, 0xC8, 0xA1, 0x82, 0x81, 0x08, 0x09, 0xED, 0x81, 0xE9, 0x7D, 0x07, 0x48, 0x84, 0xEE, 0xDF, 0x40, 0x1C, 0xCA, 0xCD, 0xAE, 0xAD, 0x82, ++ 0xC1, 0x4D, 0x06, 0xB6, 0x8A, 0xEA, 0x6C, 0xE1, 0x4B, 0x86, 0x1B, 0x0C, 0xFD, 0x16, 0x09, 0x0C, 0xBB, 0xF4, 0x69, 0xC5, 0xE0, 0x84, 0x31, 0x4C, 0x0D, 0x8D, 0x39, 0x60, 0xEA, 0x06, 0xA3, 0x42, ++ 0x6D, 0x8B, 0x3F, 0xE7, 0x62, 0xE0, 0x0D, 0x09, 0xBD, 0xA3, 0x74, 0xF3, 0xAE, 0x2C, 0xBE, 0xDE, 0x28, 0x38, 0xFF, 0x89, 0xD8, 0x1D, 0xEB, 0x30, 0x13, 0x09, 0x0E, 0x44, 0x19, 0x9A, 0xED, 0x60, ++ 0x49, 0x63, 0xEA, 0xF9, 0x19, 0x91, 0x4C, 0xE0, 0x4F, 0x20, 0x7A, 0xC8, 0x2C, 0xD4, 0x35, 0x1F, 0xEF, 0x7B, 0x2D, 0x94, 0x39, 0x30, 0x66, 0xFE, 0x4D, 0x44, 0xE3, 0xCC, 0x59, 0x52, 0xE7, 0x5E, ++ 0xB6, 0xF3, 0x71, 0x40, 0x58, 0x91, 0x5D, 0xE0, 0xEE, 0x18, 0x4D, 0x8C, 0x55, 0x30, 0x0F, 0x57, 0x6A, 0x8B, 0x82, 0xA8, 0x63, 0xE8, 0x1A, 0xF3, 0x34, 0x17, 0xBD, 0x4C, 0xFC, 0x94, 0xE7, 0xA6, ++ 0x12, 0x63, 0xB3, 0x9F, 0x01, 0xF6, 0xE2, 0xE7, 0x07, 0x48, 0xB6, 0xE5, 0xE5, 0x9C, 0xF6, 0xCA, 0x01, 0xB0, 0x02, 0x8C, 0x93, 0xBB, 0xBC, 0xEB, 0xC5, 0x48, 0xF9, 0x87, 0xF1, 0x07, 0x55, 0xBF, ++ 0x33, 0xCA, 0x58, 0x5C, 0xB4, 0x1C, 0xF5, 0x78, 0xDF, 0x5F, 0xFE, 0x37, 0x92, 0x4E, 0x3C, 0x2C, 0x07, 0x2E, 0xD1, 0xDA, 0xC9, 0x16, 0x21, 0x76, 0x97, 0x29, 0x71, 0xE7, 0x9B, 0x62, 0xFB, 0x20, ++ 0x8F, 0x1A, 0x73, 0xBF, 0x03, 0x61, 0xE2, 0x99, 0x3D, 0xCC, 0xCD, 0x31, 0x10, 0xC3, 0x4D, 0x83, 0x9D, 0x18, 0xDD, 0x43, 0xA5, 0xE8, 0xF0, 0xD9, 0x41, 0xE9, 0x9A, 0xDC, 0xF4, 0x41, 0x40, 0x5F, ++ 0x32, 0x10, 0x76, 0x71, 0xB2, 0xD8, 0xB2, 0x24, 0x4F, 0x7B, 0xA9, 0x2D, 0xCE, 0xD5, 0x87, 0xA2, 0x10, 0xFE, 0x8F, 0xF4, 0x3C, 0x61, 0x6A, 0xCB, 0x5E, 0x76, 0x6E, 0x6A, 0xF2, 0xCE, 0xB0, 0x35, ++ 0x99, 0xBA, 0x3D, 0xE3, 0x76, 0xEB, 0x57, 0x35, 0xEF, 0x16, 0x14, 0x39, 0x53, 0xD1, 0xFD, 0xDB, 0x7E, 0x9F, 0x28, 0x74, 0xB0, 0xD6, 0x08, 0x3D, 0xD7, 0xEC, 0x43, 0x86, 0xAE, 0x00, 0x3F, 0x51, ++ 0xCC, 0xF2, 0xD2, 0x1E, 0xF6, 0x05, 0x91, 0x63, 0xC5, 0x15, 0x21, 0x74, 0x42, 0x3F, 0x57, 0x11, 0x9D, 0x0F, 0xCE, 0x62, 0x7D, 0x76, 0x3D, 0x81, 0xC1, 0x0A, 0xA1, 0x32, 0x9F, 0x74, 0xC8, 0xD4, ++ 0x45, 0x43, 0x7B, 0xA6, 0x71, 0x8A, 0x33, 0xDB, 0x6E, 0x79, 0x37, 0x51, 0x72, 0xB2, 0xAE, 0x35, 0x91, 0x82, 0x19, 0x78, 0xD5, 0x20, 0x82, 0x4E, 0x2D, 0x2F, 0xF8, 0x98, 0xB7, 0xF4, 0xC8, 0x67, ++ 0xFF, 0x46, 0x27, 0x22, 0xBC, 0x07, 0xEA, 0xDA, 0xD3, 0x89, 0xA9, 0x10, 0xB6, 0xF6, 0x54, 0x29, 0xDA, 0x12, 0x97, 0x35, 0xFE, 0x04, 0x9E, 0x3E, 0xCB, 0x38, 0x89, 0xF6, 0x04, 0x7C, 0xF2, 0xBD, ++ 0x2A, 0x88, 0xD5, 0x0A, 0x65, 0x1B, 0x32, 0x35, 0xD2, 0x48, 0x0E, 0x1D, 0xA5, 0xA3, 0x52, 0x47, 0xFA, 0x76, 0xC8, 0x31, 0x73, 0x63, 0x99, 0xD3, 0x7E, 0x8D, 0x03, 0x3C, 0x1D, 0x05, 0x1C, 0x9B, ++ 0x6A, 0x99, 0xAB, 0x80, 0xB1, 0x31, 0x3F, 0xA2, 0x4C, 0x5C, 0x59, 0x76, 0x6E, 0x6C, 0x51, 0xA3, 0x8F, 0xE9, 0xF1, 0x18, 0x6A, 0x76, 0x7E, 0xEB, 0xD0, 0xD8, 0x80, 0x01, 0xAE, 0x02, 0x46, 0xCD, ++ 0x4E, 0xBE, 0x2C, 0x97, 0x9D, 0xE8, 0x2C, 0x30, 0xBB, 0xDB, 0x98, 0xB4, 0x74, 0x4F, 0x11, 0xF9, 0xE6, 0x39, 0xED, 0xDD, 0x8C, 0x19, 0x4D, 0x79, 0x11, 0x20, 0x1A, 0x8F, 0xA7, 0x45, 0x99, 0x1B, ++ 0x4D, 0x8A, 0x57, 0x09, 0xB6, 0x2A, 0x21, 0xB6, 0x3B, 0x97, 0x62, 0x91, 0x3D, 0x36, 0xCE, 0x99, 0x5C, 0x2D, 0x6B, 0x79, 0x15, 0x1E, 0x8D, 0x83, 0x83, 0x8C, 0xD1, 0xF3, 0x88, 0x40, 0xA9, 0x41, ++ 0x72, 0x55, 0xDD, 0x16, 0x6B, 0x7A, 0x35, 0x84, 0x49, 0x90, 0x03, 0xFB, 0x62, 0x56, 0x11, 0x40, 0x4C, 0x95, 0xB9, 0x60, 0xDF, 0x0D, 0xB1, 0xBC, 0xF1, 0x57, 0x4B, 0x09, 0x65, 0xDB, 0xD8, 0x34, ++ 0xEE, 0x14, 0x81, 0x17, 0xD5, 0xE0, 0x5A, 0x7C, 0xC7, 0xCC, 0x1A, 0x86, 0x56, 0x18, 0xA2, 0xBE, 0x48, 0x54, 0xDB, 0x89, 0x35, 0xCD, 0xA1, 0xE6, 0x8B, 0xD8, 0xD0, 0x9E, 0x72, 0xF0, 0xAC, 0x90, ++ 0x53, 0xC8, 0x82, 0xC4, 0xAB, 0xA4, 0x00, 0x4A, 0x61, 0x4D, 0x10, 0x50, 0x53, 0x00, 0xB6, 0x17, 0x6C, 0xA1, 0xF3, 0x24, 0xE2, 0x2E, 0x78, 0x24, 0x29, 0x9F, 0x9C, 0x40, 0x75, 0x5B, 0x71, 0xD8, ++ 0x2B, 0x67, 0x95, 0x47, 0xF0, 0x6A, 0xD4, 0x8B, 0xE6, 0x6D, 0x68, 0x07, 0x2C, 0x93, 0x90, 0x23, 0x3C, 0x93, 0x3F, 0x80, 0xA1, 0x4F, 0x8D, 0x4A, 0x6B, 0x0B, 0x4E, 0x19, 0x70, 0xE1, 0xAC, 0xC1, ++ 0xBE, 0xA7, 0xF5, 0xD3, 0xBE, 0x22, 0x44, 0x48, 0xF8, 0x57, 0xBA, 0xB6, 0x8A, 0xEF, 0xA6, 0xD8, 0xCB, 0x81, 0x9B, 0x64, 0x29, 0x4A, 0x12, 0x99, 0x79, 0x16, 0xCD, 0xBF, 0x56, 0xE9, 0xA8, 0xD0, ++ 0x02, 0xDD, 0x06, 0x5F, 0x12, 0xC6, 0x18, 0x23, 0xF4, 0xFC, 0x21, 0x45, 0x08, 0x23, 0x2E, 0x43, 0x1F, 0x0B, 0x68, 0x98, 0x47, 0x5B, 0xB5, 0xDD, 0x0D, 0x7D, 0x52, 0x8E, 0x84, 0x0C, 0x22, 0x80, ++ 0x9A, 0xF7, 0xE1, 0x53, 0x63, 0x72, 0x4A, 0x61, 0x3A, 0xCC, 0xFB, 0xE2, 0xB3, 0x74, 0x38, 0xC1, 0x59, 0xCE, 0x14, 0xCB, 0x0C, 0x98, 0xBF, 0xD4, 0x99, 0xC0, 0x8D, 0xAC, 0x0C, 0xF4, 0x5D, 0x82, ++ 0x1C, 0xC2, 0xFA, 0x47, 0x31, 0x9B, 0x6F, 0xB4, 0xCE, 0xD7, 0xE5, 0x98, 0x5E, 0xC8, 0x27, 0x4D, 0xE0, 0x90, 0x71, 0xD3, 0xC1, 0x0D, 0xA5, 0xBF, 0x9E, 0x52, 0x2B, 0x01, 0xCE, 0x91, 0xD6, 0x6B, ++ 0x91, 0x79, 0x5D, 0x3D, 0x22, 0xC0, 0x04, 0x83, 0x45, 0x42, 0x75, 0xDD, 0x2B, 0xBD, 0xD7, 0xC2, 0xDC, 0xC4, 0xA1, 0x67, 0xE5, 0xD7, 0xFC, 0xDB, 0xB9, 0xF6, 0x20, 0x8C, 0xD4, 0xC9, 0xA4, 0x85, ++ 0xFA, 0xAE, 0xB8, 0x09, 0xA7, 0x71, 0x1D, 0xAC, 0x28, 0x65, 0xCE, 0xD4, 0x30, 0x64, 0x74, 0xB2, 0x2B, 0x44, 0x48, 0xF8, 0x5D, 0xF3, 0x34, 0x17, 0xF3, 0xFA, 0xCE, 0x1C, 0x05, 0xD4, 0x27, 0x03, ++ 0xED, 0x31, 0x30, 0x42, 0xA0, 0x5D, 0xE0, 0x36, 0x27, 0x40, 0x13, 0x01, 0x88, 0xEC, 0xB4, 0x45, 0xBB, 0x25, 0x5D, 0xC7, 0x6E, 0xE8, 0x44, 0x3F, 0x73, 0x31, 0x17, 0xF8, 0x35, 0x1F, 0x17, 0x60, ++ 0x31, 0x75, 0x55, 0x4F, 0xEB, 0x00, 0xB7, 0xFF, 0x54, 0xD8, 0x07, 0x86, 0xF3, 0x05, 0xCD, 0xE1, 0x8C, 0xD5, 0xEC, 0x56, 0xEC, 0x09, 0x62, 0xA3, 0xE0, 0x44, 0x82, 0xDC, 0xE3, 0x62, 0x2D, 0x04, ++ 0x0D, 0x24, 0xC4, 0x0F, 0x2E, 0x8A, 0x14, 0xA4, 0x47, 0x65, 0x9D, 0x6C, 0x56, 0x1F, 0x2F, 0xFE, 0xE6, 0x8F, 0x8D, 0x3D, 0xE5, 0x11, 0xB2, 0x3E, 0x8B, 0x17, 0x2A, 0x01, 0xA3, 0xED, 0xA4, 0xD3, ++ 0x78, 0x0E, 0x74, 0xC6, 0x77, 0x24, 0x43, 0x30, 0xE9, 0xAE, 0xFF, 0x01, 0x9F, 0xE0, 0x7B, 0xE3, 0xD3, 0x3F, 0x32, 0x2F, 0x9C, 0xE2, 0x21, 0x4B, 0x9D, 0x9C, 0xFF, 0x99, 0xD0, 0x5A, 0x59, 0xE4, ++ 0x75, 0x51, 0x43, 0x2A, 0xE7, 0x6F, 0x4C, 0xD4, 0xF8, 0xDD, 0x51, 0x52, 0x0F, 0xFE, 0x81, 0x1B, 0x4B, 0x93, 0xCD, 0x62, 0x19, 0xC8, 0x1B, 0x63, 0xB1, 0xD6, 0x27, 0x78, 0x5C, 0x2A, 0x0F, 0xC2, ++ 0x2E, 0x3A, 0xEA, 0x86, 0xCE, 0xEE, 0x1F, 0x7F, 0xBC, 0x4E, 0xFC, 0xB4, 0x6D, 0xDF, 0xBC, 0xD8, 0x8A, 0x02, 0xF3, 0xB4, 0xE6, 0x7C, 0x5F, 0xF2, 0xE8, 0xDC, 0x68, 0xBF, 0x16, 0xC7, 0x46, 0x99, ++ 0xBB, 0xB6, 0x28, 0x90, 0x2F, 0x72, 0xC3, 0xDE, 0xBC, 0x8B, 0xF5, 0xDF, 0x70, 0x6D, 0x47, 0xA6, 0x05, 0xA1, 0x07, 0xDA, 0xA0, 0x01, 0x41, 0x39, 0xCE, 0x40, 0xF0, 0xD4, 0x6D, 0x8D, 0x6D, 0xC7, ++ }, ++ .pkcs8_len = 0, ++ .spki_len = 0, ++ .msg_len = 33, ++ .msg = { 0xD8, 0x1C, 0x4D, 0x8D, 0x73, 0x4F, 0xCB, 0xFB, 0xEA, 0xDE, 0x3D, 0x3F, 0x8A, 0x03, 0x9F, 0xAA, 0x2A, 0x2C, 0x99, 0x57, 0xE8, 0x35, 0xAD, 0x55, 0xB2, 0x2E, 0x75, 0xBF, 0x57, 0xBB, 0x55, 0x6A, ++ 0xC8 }, ++ .sig_len = 3293, ++ .sig = { ++ 0xB0, 0x55, 0xB0, 0xE1, 0x76, 0x10, 0xBF, 0x54, 0xB3, 0x3B, 0x96, 0x09, 0x8D, 0x79, 0x6E, 0x98, 0xF7, 0x89, 0x9F, 0x48, 0x56, 0xCB, 0xC8, 0xD7, 0x04, 0xF9, 0xD7, 0x77, 0x8C, 0x18, 0x77, 0xF1, ++ 0xE1, 0x24, 0xBF, 0x62, 0xA0, 0xD1, 0x7F, 0x01, 0x3B, 0xE4, 0x34, 0x0F, 0xD5, 0x7B, 0x4F, 0xA6, 0x22, 0x2D, 0x9C, 0xDB, 0x90, 0x28, 0xE8, 0xB0, 0x2B, 0x92, 0x6E, 0x15, 0x54, 0xD1, 0x45, 0xF4, ++ 0x47, 0x98, 0xAA, 0xC2, 0xFA, 0xA2, 0x03, 0x3C, 0x4A, 0xEF, 0xB6, 0xCC, 0xB6, 0xCF, 0xE5, 0xC2, 0xA6, 0x23, 0x8E, 0xE7, 0x9C, 0x5C, 0xC2, 0xF0, 0xE8, 0x04, 0xBE, 0xD1, 0x7F, 0x75, 0xC1, 0xF3, ++ 0x99, 0x4D, 0xD7, 0xE7, 0xA0, 0xF2, 0xA7, 0x03, 0x4C, 0x0C, 0x8C, 0x98, 0x64, 0x80, 0x40, 0x57, 0xE2, 0xE5, 0x57, 0x67, 0x3F, 0xDF, 0xD6, 0x64, 0x35, 0x6F, 0xAB, 0xD0, 0x51, 0xF9, 0x07, 0x5B, ++ 0x34, 0x00, 0xA0, 0xC7, 0xE8, 0x45, 0x59, 0x55, 0x3E, 0xDF, 0x98, 0x9B, 0xFF, 0xD2, 0x11, 0x2B, 0x29, 0x60, 0x22, 0x03, 0x06, 0x6B, 0xDE, 0xA7, 0x84, 0x35, 0xEB, 0xC6, 0xE3, 0x81, 0x8C, 0xC9, ++ 0x2D, 0x61, 0xBC, 0xC1, 0x25, 0xA8, 0x57, 0x5B, 0x5A, 0x8A, 0xEE, 0x42, 0x25, 0xFB, 0x9C, 0x62, 0x48, 0x3F, 0x3E, 0xD1, 0x18, 0x5A, 0x6A, 0x96, 0x82, 0x2E, 0x5E, 0xFC, 0x1B, 0xA7, 0xCD, 0x8D, ++ 0x5F, 0xD8, 0xCC, 0x18, 0x7D, 0x2A, 0x26, 0x69, 0xCA, 0xDF, 0x58, 0xFA, 0xD6, 0x62, 0x89, 0x79, 0x4C, 0x96, 0x48, 0x5B, 0x2C, 0x46, 0x45, 0xC7, 0xD3, 0xD3, 0x56, 0x84, 0xB7, 0x42, 0x9B, 0x5E, ++ 0xF3, 0x15, 0x45, 0x76, 0x99, 0xBE, 0x80, 0x30, 0xBC, 0x3D, 0xEB, 0x81, 0x66, 0x60, 0x2A, 0xC5, 0x48, 0x19, 0x82, 0x48, 0x83, 0xA2, 0x46, 0xC8, 0xA1, 0xA3, 0x4F, 0xC8, 0x9B, 0x2F, 0xE0, 0x32, ++ 0x9B, 0x5C, 0xA0, 0x5D, 0x4E, 0x14, 0xB6, 0xDF, 0xFC, 0x21, 0x44, 0x60, 0x6A, 0xB3, 0x60, 0xBB, 0x3B, 0x8A, 0xC5, 0xA1, 0x78, 0x99, 0x8B, 0x46, 0x21, 0x81, 0x81, 0xCA, 0xC8, 0xDE, 0x4C, 0x29, ++ 0x48, 0x30, 0xD4, 0x9D, 0x8F, 0x00, 0xEC, 0x12, 0xC3, 0xD3, 0xAC, 0x7B, 0x4A, 0x2C, 0x30, 0x17, 0x58, 0xE6, 0x8A, 0x56, 0x81, 0x17, 0x7F, 0xF2, 0xA7, 0x5D, 0x1D, 0x4B, 0xF1, 0xC9, 0x26, 0x88, ++ 0x0B, 0x34, 0xB7, 0x28, 0xF7, 0xC3, 0x2E, 0x40, 0x60, 0x99, 0xD9, 0x5A, 0xB4, 0x48, 0x92, 0xF7, 0x48, 0xAA, 0xFE, 0xB5, 0x5B, 0x26, 0xBE, 0x31, 0x75, 0x12, 0xB0, 0x37, 0x7D, 0xBE, 0x89, 0x1A, ++ 0xC5, 0x45, 0x6A, 0x92, 0x4C, 0x36, 0x83, 0x9B, 0xC8, 0x01, 0xDB, 0x2A, 0xC5, 0xB7, 0x11, 0x0A, 0x9B, 0xAF, 0x4C, 0x3C, 0x49, 0xD0, 0x05, 0x39, 0x3C, 0xDF, 0xFA, 0xD4, 0xF9, 0x68, 0x61, 0x20, ++ 0xF4, 0xFD, 0xE0, 0x16, 0x8A, 0x9E, 0x45, 0x8E, 0x72, 0x9F, 0x4B, 0x0A, 0xE1, 0xA4, 0xC4, 0x12, 0x4C, 0xA3, 0x4D, 0xF5, 0xB6, 0x3B, 0xC2, 0xE7, 0xCB, 0xEE, 0x01, 0xA3, 0x8D, 0x31, 0xA0, 0xED, ++ 0x8D, 0x3C, 0x4C, 0x38, 0x03, 0xC3, 0xC2, 0x4C, 0x5C, 0xAD, 0xEB, 0xE3, 0xE9, 0x1A, 0x8D, 0x2E, 0x1B, 0xFC, 0xF0, 0x50, 0x8A, 0x27, 0x88, 0xD8, 0x9D, 0xFE, 0xA2, 0x0F, 0xD6, 0x38, 0x18, 0xB8, ++ 0x39, 0x60, 0xA6, 0xCF, 0x93, 0x08, 0x72, 0xB9, 0x57, 0x85, 0x57, 0x50, 0x88, 0xCF, 0x7E, 0x8B, 0x63, 0xA1, 0x89, 0x5A, 0x8C, 0x1C, 0x77, 0xA8, 0x4C, 0xB9, 0xCC, 0x6B, 0xD1, 0xD5, 0xFA, 0x93, ++ 0x96, 0x77, 0xAF, 0x17, 0xEE, 0xBE, 0x2D, 0x2E, 0xE6, 0x84, 0xC6, 0x60, 0x15, 0xF1, 0xBB, 0x14, 0x2A, 0x72, 0x77, 0x79, 0x58, 0x0D, 0xA1, 0xBC, 0x5E, 0x97, 0x5A, 0xA5, 0x6E, 0xF5, 0xD7, 0x7A, ++ 0x84, 0x07, 0xE5, 0x06, 0xA5, 0xDE, 0xEE, 0xA5, 0xE8, 0xB0, 0x79, 0x7F, 0x10, 0x64, 0x60, 0x05, 0x64, 0x80, 0x22, 0x21, 0x3C, 0xCB, 0x86, 0xA7, 0x7D, 0xF5, 0xD7, 0xB3, 0x16, 0xE8, 0x5D, 0x55, ++ 0xB9, 0xDA, 0x0F, 0xDF, 0xD5, 0xF2, 0x35, 0x52, 0xDD, 0x47, 0xCC, 0xFA, 0x96, 0x4A, 0xC3, 0x9E, 0xE6, 0x84, 0xBD, 0x63, 0x79, 0x3B, 0xB7, 0xDC, 0xAB, 0x69, 0xBE, 0x7E, 0xD9, 0x4D, 0x8D, 0xDB, ++ 0xA1, 0x85, 0xE8, 0x0A, 0x7A, 0xAE, 0xE7, 0x4E, 0x87, 0x8F, 0x50, 0xA2, 0x13, 0xF3, 0xB4, 0xFF, 0xB6, 0x6E, 0x6D, 0x34, 0xA3, 0x9C, 0x0A, 0xAE, 0x2B, 0x1D, 0x61, 0x36, 0x6F, 0xE4, 0x03, 0x53, ++ 0x9C, 0x69, 0xA0, 0x88, 0x75, 0x1F, 0x56, 0x90, 0x1A, 0x10, 0xBC, 0x44, 0x23, 0x13, 0xA3, 0x5C, 0x2D, 0x83, 0x54, 0x76, 0xD0, 0xFA, 0xD4, 0x47, 0xC7, 0x70, 0x08, 0x0F, 0xA4, 0x1B, 0xF3, 0x8D, ++ 0x68, 0x5F, 0xB3, 0x1B, 0x11, 0xA7, 0xD2, 0xE6, 0xFB, 0x52, 0x67, 0x3D, 0x16, 0x87, 0x23, 0xE6, 0x89, 0x08, 0xC0, 0x67, 0x2A, 0x0F, 0x36, 0xE2, 0x5A, 0x19, 0x9E, 0x17, 0xA6, 0xFE, 0x5B, 0x8B, ++ 0x82, 0x5B, 0x96, 0xEA, 0xB7, 0xAB, 0x4B, 0x7D, 0x83, 0x81, 0xDB, 0xC5, 0x00, 0x31, 0xA5, 0xF2, 0xE0, 0x9E, 0x4B, 0xE8, 0x71, 0x53, 0x3A, 0xDC, 0x5D, 0x08, 0xD0, 0x09, 0x42, 0x9B, 0xBF, 0x5C, ++ 0x86, 0xF8, 0x12, 0x0D, 0x09, 0x5C, 0x8E, 0xEC, 0xBE, 0xF3, 0xE0, 0x99, 0xDE, 0x61, 0x8D, 0x43, 0x77, 0x24, 0x1B, 0x50, 0x36, 0x9E, 0xDE, 0x51, 0xAA, 0x74, 0xAB, 0x96, 0x65, 0x89, 0xE2, 0xC6, ++ 0x87, 0xD6, 0xC0, 0x9F, 0xAC, 0x9C, 0x6D, 0x6C, 0x54, 0x61, 0xF5, 0xA6, 0x30, 0x08, 0xE9, 0x83, 0x5F, 0xF4, 0xB5, 0xBD, 0x42, 0x65, 0xF1, 0x12, 0x8C, 0x09, 0x2C, 0x27, 0xD4, 0xDA, 0x50, 0x8F, ++ 0xD4, 0xF5, 0x0E, 0xFA, 0x74, 0xA7, 0x31, 0x57, 0x05, 0x9A, 0x4B, 0x2F, 0x41, 0xFE, 0x8B, 0xF9, 0x67, 0x16, 0x79, 0x69, 0xB9, 0x3B, 0xF5, 0x20, 0x45, 0x84, 0x26, 0x90, 0x32, 0x42, 0x9E, 0x35, ++ 0x77, 0x70, 0x4B, 0xDF, 0x68, 0x98, 0x00, 0xDD, 0x8B, 0xDE, 0x82, 0x6B, 0x74, 0xCE, 0xF5, 0x10, 0xA1, 0xE0, 0x87, 0x02, 0x3F, 0x09, 0x26, 0xE9, 0x7F, 0x37, 0x92, 0x6B, 0x16, 0xEF, 0x78, 0x6C, ++ 0x37, 0xEC, 0x21, 0xF2, 0x40, 0x71, 0x04, 0xD3, 0x95, 0x4A, 0x7A, 0x07, 0xC3, 0x0D, 0xE2, 0xD6, 0x78, 0x84, 0x02, 0xD7, 0x1A, 0x56, 0x2E, 0xA5, 0x4C, 0x79, 0xB4, 0x19, 0x7D, 0x20, 0x2C, 0x97, ++ 0x72, 0x5D, 0x2D, 0x8B, 0x7E, 0x73, 0x32, 0xF3, 0xFF, 0x1A, 0x6F, 0xAD, 0x49, 0xA4, 0xC0, 0x0C, 0xD1, 0xA4, 0x47, 0x65, 0x1B, 0x8E, 0x08, 0xD8, 0x50, 0x6B, 0xCA, 0x82, 0x3E, 0x10, 0xEF, 0x41, ++ 0x16, 0xE6, 0xCF, 0x49, 0x67, 0x5C, 0x43, 0x30, 0xA1, 0xDE, 0x19, 0x08, 0xDD, 0xB5, 0x9F, 0x7E, 0xA5, 0xF8, 0x9C, 0x94, 0xCE, 0x50, 0x0F, 0x82, 0xB4, 0x3C, 0xE7, 0x89, 0x15, 0x84, 0x73, 0xB9, ++ 0xE0, 0x79, 0x05, 0xD8, 0xE8, 0x61, 0x5E, 0xDE, 0xF0, 0x21, 0x38, 0x3F, 0xC3, 0x1D, 0x61, 0x8C, 0x5C, 0xE6, 0x25, 0x65, 0x3B, 0x40, 0xC2, 0x1B, 0xD7, 0xE0, 0xBC, 0x78, 0x3D, 0x93, 0xBE, 0xC1, ++ 0xB7, 0xA5, 0xB4, 0xBB, 0xC6, 0xC2, 0x81, 0xB7, 0x77, 0x55, 0x47, 0x39, 0x0E, 0xF3, 0xD3, 0x0E, 0x27, 0x73, 0x99, 0x36, 0x93, 0x08, 0xD8, 0xA1, 0xCD, 0xC2, 0xE1, 0xDB, 0xD6, 0xF1, 0x58, 0x97, ++ 0x0A, 0xC2, 0xAC, 0x5C, 0x2C, 0x94, 0x81, 0x97, 0x5B, 0x80, 0x95, 0x80, 0xC0, 0xEA, 0x89, 0x91, 0x2C, 0x07, 0x66, 0xF4, 0x58, 0x30, 0xA8, 0x96, 0x3F, 0xBB, 0x7E, 0x17, 0xD8, 0x43, 0x85, 0x17, ++ 0x5A, 0x6E, 0x07, 0x54, 0x68, 0x3C, 0xBF, 0xBB, 0xA6, 0x36, 0x45, 0x94, 0xF6, 0xB5, 0x00, 0x5C, 0x15, 0xBD, 0x5F, 0x85, 0x73, 0x2B, 0x5A, 0x63, 0xF2, 0x62, 0x67, 0xAB, 0x17, 0x04, 0x8C, 0x61, ++ 0x99, 0x20, 0x00, 0x19, 0xAD, 0xD6, 0xA4, 0xD1, 0xAC, 0xD0, 0x40, 0x5C, 0x38, 0x76, 0x66, 0xE8, 0x71, 0x11, 0xB9, 0x82, 0x5A, 0xFB, 0x97, 0x51, 0xCD, 0x3F, 0x9D, 0x8A, 0x45, 0xC6, 0xB2, 0x08, ++ 0xD2, 0xD3, 0x33, 0xB6, 0xC5, 0x9F, 0x98, 0xBC, 0xF2, 0x84, 0xC8, 0x54, 0xCF, 0x7D, 0x4F, 0x67, 0x54, 0xFD, 0x75, 0xEE, 0x06, 0x8C, 0x88, 0x67, 0x8E, 0xE7, 0x56, 0x5B, 0x47, 0xB3, 0x6E, 0x68, ++ 0xA1, 0xFD, 0x7B, 0xB6, 0x0E, 0x2A, 0x8E, 0x0D, 0xF7, 0x12, 0x70, 0x20, 0xF5, 0xC6, 0x27, 0x7B, 0x3E, 0xE0, 0x58, 0x77, 0x3F, 0x9B, 0xBF, 0x1D, 0xC2, 0xE3, 0x98, 0xBC, 0x30, 0x12, 0x02, 0x12, ++ 0x1C, 0x69, 0x9C, 0x00, 0x37, 0x9D, 0x83, 0x50, 0x09, 0x96, 0x26, 0xF9, 0x09, 0x23, 0x65, 0x92, 0x40, 0x08, 0xB1, 0xA9, 0xCD, 0x9F, 0x87, 0x87, 0x82, 0x2B, 0xEE, 0x96, 0x1A, 0xBA, 0x23, 0x9C, ++ 0xDC, 0xB4, 0x18, 0xE9, 0x38, 0x60, 0xEF, 0x34, 0x8A, 0x5E, 0x96, 0x45, 0x38, 0x9A, 0x0A, 0x87, 0x8D, 0x39, 0x4F, 0x36, 0x5A, 0xEB, 0xFE, 0x28, 0x0B, 0xEE, 0x68, 0x74, 0xA3, 0x05, 0x4C, 0xD9, ++ 0x8C, 0xBD, 0x87, 0x16, 0x66, 0x28, 0x04, 0x72, 0x9F, 0xD4, 0x6F, 0xCE, 0xA9, 0xC4, 0xCF, 0x92, 0x9F, 0x2F, 0x12, 0x00, 0x06, 0xCE, 0xBC, 0xC0, 0xBF, 0x75, 0x69, 0x2D, 0x63, 0xC0, 0x44, 0x63, ++ 0x5D, 0x1A, 0x1D, 0xB6, 0x1A, 0xD1, 0x78, 0x94, 0x15, 0xE5, 0xF2, 0x24, 0x2B, 0x74, 0x00, 0xA8, 0xA7, 0x93, 0x68, 0xED, 0x60, 0x2C, 0x33, 0x64, 0x92, 0xF2, 0x70, 0x34, 0x5B, 0xE9, 0x8B, 0x2D, ++ 0xD6, 0xEA, 0x8E, 0x4C, 0x53, 0xAC, 0xA3, 0x6E, 0x3C, 0x9B, 0xA2, 0x88, 0xF2, 0x75, 0x86, 0x13, 0x4C, 0xF0, 0xB5, 0xCA, 0x9B, 0xA1, 0xEE, 0xDF, 0x20, 0xD1, 0xAB, 0x4F, 0x2D, 0x08, 0xF3, 0xB0, ++ 0x42, 0xDB, 0x89, 0xDE, 0xCF, 0xFD, 0xD2, 0x38, 0x54, 0xF3, 0x51, 0x20, 0xAD, 0xDE, 0x16, 0x03, 0x33, 0x5D, 0x56, 0x8D, 0xA9, 0x58, 0x91, 0xCF, 0x3A, 0xB2, 0x1D, 0x9A, 0xFA, 0xF6, 0x6C, 0x28, ++ 0x6C, 0x13, 0x00, 0x01, 0x9C, 0xA9, 0xBA, 0xF2, 0xFF, 0x3F, 0x67, 0x25, 0x23, 0x0C, 0x4B, 0x26, 0x98, 0x92, 0xF7, 0xA3, 0xDF, 0xD6, 0xEA, 0xB7, 0x4C, 0x31, 0x4A, 0x86, 0xF8, 0xB4, 0x7E, 0xAE, ++ 0x49, 0xF4, 0x19, 0xE4, 0xA2, 0x91, 0x7B, 0x98, 0x4F, 0xE9, 0xA0, 0x03, 0x32, 0xAF, 0xB7, 0xA5, 0x6E, 0x5E, 0x67, 0x52, 0x23, 0xAE, 0xCC, 0x50, 0x34, 0x20, 0xAF, 0x8B, 0x39, 0xFA, 0xA9, 0x20, ++ 0xE3, 0xAD, 0xA1, 0xA4, 0x3C, 0xE7, 0xBD, 0x1F, 0x7D, 0xF2, 0x30, 0x1C, 0x90, 0x27, 0xCC, 0x1C, 0xE5, 0x66, 0x6E, 0xB0, 0x93, 0x62, 0x10, 0xAF, 0xA5, 0x9E, 0x10, 0xF3, 0x07, 0xCA, 0x1F, 0x78, ++ 0x63, 0xED, 0xD6, 0xC3, 0xBB, 0x8F, 0x5D, 0x63, 0xC0, 0xCF, 0x0E, 0xA8, 0xF0, 0x6E, 0xF0, 0x8C, 0xCC, 0x24, 0xC1, 0x4F, 0x29, 0x5D, 0xD2, 0x86, 0xFD, 0x9F, 0x4E, 0x71, 0x02, 0x10, 0x9D, 0x53, ++ 0xFF, 0x5E, 0xFF, 0x4A, 0x01, 0xDC, 0xAA, 0xD5, 0xFB, 0x60, 0x55, 0xA0, 0x70, 0x3C, 0xD4, 0x71, 0xB2, 0x0B, 0x5F, 0xA4, 0x56, 0x0B, 0xDE, 0xAA, 0x13, 0x13, 0xC7, 0x64, 0x7A, 0xE7, 0x56, 0xAE, ++ 0x85, 0x91, 0x57, 0x9E, 0xA5, 0x12, 0x0E, 0x09, 0xD6, 0x79, 0x48, 0x40, 0x62, 0x9B, 0x9F, 0xEF, 0xEF, 0xC2, 0x0D, 0xB5, 0x94, 0xBA, 0xDC, 0xD1, 0x29, 0xEC, 0x49, 0x1C, 0x3C, 0xF7, 0x5A, 0xB4, ++ 0x0C, 0x47, 0x2A, 0xD2, 0x2C, 0x2D, 0xED, 0xBC, 0x77, 0xBA, 0x26, 0x71, 0xC8, 0x43, 0x48, 0x65, 0x60, 0xDC, 0x76, 0x52, 0x31, 0xBF, 0x5F, 0xDC, 0xDB, 0xCC, 0x77, 0xC8, 0x30, 0x0F, 0x9D, 0x2B, ++ 0x53, 0xEC, 0x34, 0x46, 0xD8, 0x2F, 0x08, 0x7B, 0x89, 0xBD, 0x99, 0x2F, 0x7A, 0xB0, 0xA7, 0x80, 0xB5, 0x38, 0x81, 0x18, 0xBB, 0xF1, 0x7C, 0xCB, 0xEC, 0x2D, 0x19, 0x6F, 0x3E, 0xDC, 0x47, 0x8F, ++ 0xB9, 0x47, 0xD8, 0x30, 0x2B, 0x04, 0x0A, 0x60, 0xD0, 0xBA, 0xB8, 0x5C, 0x1C, 0x5C, 0x47, 0x4E, 0xAB, 0x41, 0xE0, 0x64, 0x41, 0x06, 0x95, 0xC6, 0x0E, 0x1A, 0xCE, 0xE7, 0x9E, 0x13, 0x7D, 0x70, ++ 0x2E, 0x4A, 0x31, 0x39, 0x68, 0xA5, 0x57, 0xB9, 0x7C, 0xE6, 0x43, 0x31, 0x88, 0x8B, 0x52, 0x89, 0xCC, 0xB3, 0x7A, 0x66, 0x25, 0xE5, 0x22, 0x73, 0x71, 0x1B, 0x84, 0x64, 0x58, 0xD5, 0xD8, 0xBA, ++ 0x1A, 0xE4, 0x96, 0x53, 0x78, 0xCB, 0xE9, 0x18, 0xBF, 0x0F, 0x4B, 0xEE, 0xE1, 0xBD, 0x08, 0xFE, 0xCC, 0x66, 0x06, 0xD2, 0xF3, 0x97, 0x0C, 0x87, 0x4B, 0x0A, 0x09, 0xC4, 0x10, 0xE0, 0xC7, 0xD3, ++ 0xD6, 0x00, 0x4D, 0x93, 0xF0, 0x6F, 0xBC, 0x25, 0x8F, 0x96, 0x4A, 0x96, 0x19, 0xB2, 0xC6, 0xCA, 0x28, 0xA3, 0xA2, 0x52, 0x9B, 0xF4, 0x4F, 0xB9, 0xF2, 0x44, 0x38, 0x2C, 0xBE, 0xF9, 0x93, 0xC4, ++ 0x18, 0xA3, 0x88, 0x0F, 0x8D, 0x5F, 0xBA, 0x41, 0xF0, 0x58, 0x24, 0xF4, 0xF3, 0x3B, 0x24, 0xB8, 0x86, 0xD1, 0x15, 0xB8, 0x19, 0x81, 0x6C, 0x9B, 0x7D, 0xB5, 0x1F, 0x2A, 0xA0, 0xCC, 0x6B, 0x01, ++ 0xB6, 0xAB, 0x21, 0x1F, 0xAD, 0x55, 0x28, 0x4C, 0xDC, 0x04, 0x52, 0x47, 0x85, 0x90, 0x59, 0xBD, 0x36, 0x88, 0x7F, 0x3A, 0xE2, 0xB6, 0xCF, 0x7F, 0x87, 0xEC, 0x2D, 0xF3, 0xC8, 0x9D, 0x43, 0xD2, ++ 0x7E, 0x5E, 0x48, 0x88, 0xBA, 0xE6, 0x5B, 0x69, 0x24, 0xFA, 0x5D, 0xF0, 0xB2, 0xED, 0x44, 0xE3, 0xE3, 0x79, 0x4B, 0x68, 0x90, 0xF9, 0x33, 0xF9, 0xFB, 0xA7, 0xA7, 0x89, 0xFC, 0x63, 0xCE, 0xB7, ++ 0x43, 0x60, 0xD4, 0xAC, 0x9C, 0x64, 0xF1, 0x0C, 0xFC, 0x0A, 0xB3, 0x74, 0xC7, 0x12, 0xA3, 0xCC, 0x6C, 0x87, 0x6B, 0x22, 0xF6, 0xD9, 0xFE, 0xF1, 0xC3, 0x87, 0xBF, 0x6B, 0xDE, 0x75, 0x79, 0x2A, ++ 0xF9, 0x09, 0x4E, 0xC1, 0x7E, 0xB8, 0xB5, 0x5D, 0x35, 0x5F, 0xF0, 0xAE, 0x9D, 0x62, 0x11, 0x1A, 0xD8, 0xA3, 0xCB, 0xA4, 0xF5, 0x66, 0x3D, 0x94, 0xA3, 0x8A, 0x43, 0xE3, 0x52, 0x97, 0x9D, 0xB3, ++ 0xDF, 0xDF, 0x32, 0x98, 0x85, 0x34, 0xCD, 0x45, 0xFD, 0x43, 0x6E, 0x69, 0x9C, 0x46, 0x7F, 0x6D, 0xDD, 0x50, 0x76, 0xB4, 0xE5, 0xF7, 0xF3, 0x82, 0xAF, 0x45, 0xD3, 0x17, 0x0F, 0x25, 0xB5, 0x41, ++ 0x50, 0xD6, 0x4D, 0x35, 0xA8, 0x18, 0x55, 0xF4, 0xB2, 0x2B, 0xAC, 0x9F, 0xA1, 0x7D, 0xEF, 0xAD, 0x73, 0xB1, 0x4B, 0x15, 0x84, 0x0E, 0x08, 0x70, 0xDA, 0xF5, 0xB9, 0x2A, 0x30, 0xD2, 0x37, 0xBF, ++ 0x0C, 0x08, 0xCB, 0x8C, 0x9E, 0xBD, 0x41, 0x59, 0xD3, 0xBB, 0x2D, 0x47, 0x4E, 0x3E, 0x10, 0x6C, 0xC4, 0x68, 0xE6, 0xA2, 0x43, 0x35, 0x12, 0x48, 0x10, 0xF4, 0x86, 0xA6, 0x47, 0x3C, 0x26, 0xA5, ++ 0xD7, 0x83, 0x26, 0x4F, 0xD8, 0xA3, 0x68, 0x5C, 0x09, 0xD4, 0xEF, 0x77, 0xBD, 0x9A, 0x9A, 0x5C, 0x0B, 0x57, 0x8C, 0x95, 0xE7, 0xCA, 0xA3, 0x4E, 0xCE, 0x46, 0xF8, 0x48, 0x37, 0x47, 0xEE, 0x58, ++ 0x4D, 0xBB, 0x2D, 0x97, 0x20, 0x76, 0xD7, 0x63, 0xB0, 0xB5, 0x50, 0xE2, 0xCA, 0xE8, 0x34, 0x9E, 0x06, 0x09, 0xF1, 0x4F, 0x0A, 0x8F, 0x51, 0x10, 0xCA, 0xA4, 0xCD, 0xAB, 0xDD, 0x44, 0x40, 0xAD, ++ 0x16, 0x9C, 0x2A, 0xBE, 0x86, 0xEE, 0x1C, 0x68, 0x0D, 0x6E, 0x94, 0x88, 0x29, 0x64, 0xD8, 0x70, 0xCF, 0xEF, 0x70, 0xA4, 0xF4, 0xC0, 0x4B, 0x49, 0xCC, 0x4A, 0x4F, 0xF6, 0xD4, 0xB9, 0xE3, 0x69, ++ 0x18, 0xC1, 0x8A, 0x6D, 0x5C, 0x4A, 0xF4, 0x7C, 0xCF, 0x09, 0xFF, 0x64, 0xC7, 0x7A, 0xE3, 0xBF, 0xBC, 0xFA, 0x50, 0x4E, 0x16, 0x9E, 0xAB, 0xB3, 0x06, 0x95, 0x1A, 0x28, 0xAF, 0xF2, 0xFA, 0xB7, ++ 0xA5, 0xBA, 0x47, 0x6F, 0x56, 0x50, 0xBC, 0x7D, 0xA1, 0x92, 0xD4, 0xB0, 0xEB, 0xFA, 0xAB, 0xAB, 0xE7, 0x72, 0xED, 0xE2, 0xA1, 0x07, 0x1D, 0x5C, 0x4F, 0xC3, 0x3C, 0x25, 0x25, 0xE4, 0x0D, 0x08, ++ 0x2F, 0xA9, 0x35, 0xBD, 0x32, 0xFF, 0x25, 0x06, 0xB3, 0xA1, 0x31, 0xE3, 0x15, 0x81, 0xB6, 0xC9, 0x44, 0xC2, 0x5F, 0x2D, 0x81, 0x75, 0x5C, 0x39, 0xD3, 0xBF, 0xC0, 0xC6, 0xDE, 0x93, 0xE3, 0x55, ++ 0x57, 0xAB, 0x1C, 0xF3, 0x47, 0x2B, 0x4A, 0x32, 0x98, 0x09, 0x86, 0xA3, 0x1F, 0x88, 0x28, 0x73, 0x52, 0x19, 0x38, 0xD8, 0xBF, 0xFE, 0x97, 0x36, 0x9F, 0xE2, 0x97, 0x46, 0xAC, 0xFC, 0x8F, 0x12, ++ 0xDE, 0xEE, 0x0E, 0x9A, 0xC3, 0xE1, 0x67, 0x60, 0x20, 0x22, 0x43, 0x43, 0x58, 0xF9, 0xDC, 0x33, 0xB2, 0xD4, 0x40, 0x8F, 0xD0, 0x89, 0x54, 0xF9, 0x74, 0x5A, 0x0B, 0xD6, 0x5B, 0xC7, 0x7E, 0xE8, ++ 0xBE, 0xA7, 0x1B, 0xFA, 0x76, 0x40, 0xC1, 0x35, 0xED, 0x19, 0xCC, 0x2F, 0x1C, 0x22, 0xE0, 0xD6, 0xB0, 0x2D, 0xA6, 0xDF, 0x24, 0xDB, 0x05, 0xA6, 0x48, 0x0D, 0xB4, 0x52, 0x27, 0xDC, 0xC9, 0x7A, ++ 0xDC, 0xEC, 0xB3, 0x91, 0x7F, 0x08, 0x6C, 0x6E, 0x98, 0x08, 0x3A, 0x21, 0x2D, 0x54, 0xDC, 0x4B, 0x81, 0x0F, 0x68, 0x9C, 0x4F, 0x98, 0x43, 0xD2, 0xFB, 0x9F, 0x57, 0x26, 0xB8, 0x76, 0x64, 0xCD, ++ 0x32, 0x2C, 0x28, 0xB6, 0xF1, 0xE0, 0x1F, 0xA9, 0x1A, 0xB3, 0x50, 0x2F, 0xAC, 0x01, 0xAF, 0xCF, 0x52, 0xC9, 0xB3, 0xD2, 0xAA, 0x20, 0xE1, 0xB3, 0x85, 0xEF, 0x47, 0x0C, 0xB3, 0x30, 0x78, 0x19, ++ 0x8B, 0x5C, 0x43, 0x95, 0xA0, 0x32, 0x9C, 0xB1, 0x0F, 0x9A, 0x4E, 0x96, 0xF4, 0x3E, 0x51, 0x16, 0x1F, 0xAA, 0xE1, 0x90, 0xEB, 0x8C, 0x39, 0x69, 0xCE, 0xC2, 0x97, 0x7B, 0x08, 0xF6, 0x8D, 0x24, ++ 0xEF, 0xCE, 0x56, 0x65, 0x11, 0xFE, 0xB6, 0x54, 0xCC, 0x5F, 0xA1, 0xFE, 0x67, 0x57, 0x1F, 0x58, 0xD8, 0x48, 0xBE, 0x7C, 0x56, 0x4A, 0xF5, 0x66, 0x39, 0x06, 0x39, 0xF8, 0x16, 0x92, 0xA7, 0xB7, ++ 0xC0, 0xF9, 0xF5, 0xAD, 0x85, 0xB8, 0x2F, 0x6A, 0x83, 0x2C, 0x9D, 0xA5, 0x2B, 0x6A, 0x47, 0xD2, 0x3F, 0x9E, 0xCF, 0xAD, 0x44, 0x99, 0x83, 0xC9, 0x39, 0x65, 0x46, 0x58, 0xB1, 0x0A, 0xDD, 0xC0, ++ 0xB4, 0xAA, 0xDB, 0xB7, 0xB8, 0x5E, 0xA6, 0x02, 0xDA, 0x76, 0x17, 0xD1, 0xB4, 0xA4, 0x5D, 0x86, 0xB8, 0xD0, 0x9D, 0x2C, 0x5A, 0x40, 0x2A, 0x67, 0x58, 0xE0, 0x6A, 0xAA, 0x15, 0x4A, 0xD0, 0x96, ++ 0x67, 0x8C, 0xBD, 0xD9, 0xCA, 0x6F, 0x5D, 0x92, 0xB0, 0xD7, 0x38, 0x50, 0x1E, 0x18, 0xC1, 0xDC, 0xD2, 0x68, 0xDE, 0x01, 0x12, 0x00, 0x59, 0x48, 0x2D, 0xFC, 0xD1, 0x2B, 0x9B, 0xF2, 0x6E, 0x1C, ++ 0xF3, 0xB0, 0x99, 0x70, 0xC4, 0x3C, 0xF5, 0x62, 0x0C, 0xA8, 0xD4, 0xE2, 0xFD, 0x31, 0xE5, 0xA8, 0x9E, 0xF8, 0xDD, 0x93, 0x17, 0xE6, 0xCF, 0x55, 0xB3, 0xFB, 0x19, 0xC0, 0x72, 0xE9, 0xD5, 0xDD, ++ 0xB9, 0x74, 0xEF, 0x60, 0x82, 0x71, 0x1E, 0x99, 0x15, 0xD3, 0x43, 0x4E, 0x7D, 0x34, 0xE7, 0xC3, 0x25, 0xA8, 0xD9, 0x2B, 0x66, 0xB0, 0x83, 0xDF, 0xD6, 0xCF, 0xD1, 0x62, 0xFD, 0x66, 0x65, 0xDF, ++ 0x9A, 0xBF, 0x18, 0x8F, 0x2D, 0xC5, 0x83, 0xFD, 0xFA, 0xBC, 0x99, 0x7D, 0x78, 0x70, 0xE9, 0x11, 0xD3, 0xC5, 0xEB, 0x5B, 0xDF, 0x80, 0xBA, 0x8D, 0xE6, 0xC4, 0x6C, 0x88, 0xE0, 0x49, 0xD3, 0x9E, ++ 0x2F, 0xA2, 0x96, 0xCB, 0xE0, 0x69, 0xCA, 0x69, 0x49, 0x4F, 0x89, 0x08, 0x87, 0x67, 0x9C, 0xB3, 0xB0, 0xE6, 0x04, 0x3D, 0x02, 0xB8, 0xF2, 0x4A, 0x3F, 0x14, 0x83, 0xC9, 0x47, 0x81, 0xB6, 0xB0, ++ 0x1A, 0xF8, 0x01, 0x60, 0x63, 0x99, 0xC3, 0xAC, 0x62, 0x60, 0x3D, 0x86, 0xF7, 0xD5, 0x29, 0x55, 0xC3, 0x12, 0x59, 0x58, 0xC0, 0x4D, 0x57, 0x2A, 0x34, 0x63, 0x4C, 0xD2, 0x36, 0x73, 0x58, 0xA8, ++ 0x6A, 0xD2, 0xB4, 0x81, 0xB3, 0x26, 0xF2, 0xF8, 0x9D, 0x4B, 0x4D, 0xC0, 0x94, 0xE9, 0x89, 0x18, 0xB5, 0xAE, 0xD8, 0xF4, 0xEB, 0xA4, 0x9C, 0x56, 0x17, 0x2B, 0x16, 0x51, 0xB6, 0x60, 0xB8, 0x70, ++ 0x47, 0xBA, 0x65, 0x2A, 0x64, 0x0C, 0xA7, 0xB0, 0x69, 0x97, 0x1F, 0xA2, 0xA6, 0x6C, 0x01, 0x95, 0x67, 0xC3, 0x8B, 0x7F, 0x5D, 0x26, 0x21, 0xE7, 0xCB, 0x4B, 0xAA, 0x41, 0x40, 0xEF, 0x5B, 0xB4, ++ 0x91, 0x96, 0x0D, 0x80, 0xF5, 0x01, 0x01, 0xA0, 0x04, 0xE0, 0x79, 0xF5, 0xB5, 0x1F, 0x39, 0x4B, 0x02, 0x9E, 0x3E, 0xBF, 0xBD, 0xFC, 0x33, 0x59, 0x4E, 0x95, 0xF6, 0xA3, 0x7B, 0xC4, 0xF6, 0xA3, ++ 0x29, 0xB5, 0xC1, 0xD8, 0xE0, 0x41, 0x45, 0x40, 0x3D, 0x33, 0xA5, 0xC7, 0x04, 0xB3, 0x43, 0x51, 0x82, 0x31, 0xB0, 0x86, 0x46, 0xE4, 0xDA, 0x9D, 0x5A, 0x4E, 0xCA, 0xBC, 0xF5, 0x0F, 0x2B, 0x39, ++ 0x21, 0xE8, 0x5A, 0x84, 0xC4, 0x09, 0xA1, 0xF6, 0x27, 0xEE, 0x0F, 0x6E, 0xB1, 0xB1, 0xB9, 0xA9, 0xFC, 0xCA, 0x9C, 0xBD, 0x65, 0xCE, 0xA9, 0x00, 0x88, 0x79, 0x7D, 0xF7, 0x51, 0x0B, 0x86, 0x1B, ++ 0x86, 0xCA, 0x4E, 0x99, 0x8A, 0xF0, 0x75, 0x94, 0x9B, 0x16, 0x7C, 0xBD, 0x66, 0xBC, 0xBE, 0x4C, 0x51, 0x30, 0x34, 0x7D, 0x87, 0x7C, 0xE5, 0xA8, 0x47, 0x9F, 0x4D, 0x56, 0xD3, 0x98, 0x14, 0x6C, ++ 0xE2, 0xF1, 0xA7, 0x85, 0x42, 0x8D, 0xDD, 0xED, 0xAD, 0x66, 0xAA, 0xB2, 0x87, 0xCA, 0xAE, 0x59, 0x14, 0x24, 0x35, 0x56, 0x1A, 0x40, 0x1B, 0x50, 0x93, 0x43, 0x92, 0xD4, 0x32, 0x9C, 0x3C, 0x21, ++ 0xAE, 0x48, 0x32, 0x86, 0x53, 0xE3, 0xAE, 0x57, 0x5E, 0x18, 0x1D, 0xB3, 0x89, 0xBE, 0x43, 0x97, 0x16, 0xF6, 0xE3, 0xF3, 0xE2, 0xDC, 0x61, 0xE4, 0xEC, 0xCF, 0xE5, 0x48, 0xAB, 0x7D, 0x71, 0x5E, ++ 0xAB, 0x49, 0xCF, 0xD7, 0x64, 0x1D, 0xC3, 0x7F, 0x5C, 0x0C, 0x0C, 0x34, 0x96, 0x5C, 0x06, 0xA1, 0x56, 0x70, 0x5F, 0x98, 0x69, 0x58, 0x79, 0x1A, 0x59, 0xCD, 0x5B, 0x48, 0x90, 0xD9, 0xA1, 0xB1, ++ 0xCF, 0x08, 0x54, 0x1A, 0x7A, 0x93, 0xD0, 0x65, 0xDC, 0xF3, 0xB9, 0xF6, 0xC5, 0x13, 0xC0, 0x27, 0x94, 0x37, 0xD4, 0xBD, 0xBE, 0x62, 0x71, 0x40, 0xD2, 0x94, 0x63, 0x26, 0x39, 0xB7, 0x46, 0x89, ++ 0x1C, 0xA9, 0x70, 0xDF, 0x6D, 0x73, 0x21, 0xF1, 0xA9, 0x13, 0xAD, 0x9B, 0xED, 0x3F, 0xE0, 0xBC, 0x02, 0xAF, 0xBB, 0x87, 0x20, 0xB7, 0x42, 0xEB, 0x40, 0x9E, 0xB8, 0x2C, 0x66, 0x96, 0x7F, 0x60, ++ 0xEB, 0xF4, 0xCE, 0xE2, 0x50, 0x8E, 0xF7, 0xF7, 0x03, 0x5B, 0x7F, 0xC7, 0xD9, 0x17, 0x8E, 0x73, 0xED, 0xA0, 0x52, 0x9B, 0xCC, 0x9E, 0xB2, 0x0B, 0x9C, 0xD7, 0x74, 0xC5, 0x64, 0x88, 0x2D, 0xD5, ++ 0x7C, 0xCF, 0xB5, 0x46, 0x63, 0xCF, 0xA8, 0x1B, 0x91, 0x4E, 0x14, 0xC4, 0xD7, 0xD7, 0x4B, 0xCE, 0x13, 0x9B, 0x7E, 0xC5, 0x3E, 0xA6, 0x1B, 0x0B, 0xF0, 0xDB, 0x61, 0xC7, 0x3A, 0x7A, 0x95, 0xF5, ++ 0x96, 0xE1, 0x28, 0xEC, 0xA7, 0xA8, 0xC9, 0xEB, 0x92, 0xC2, 0x94, 0x4E, 0xF5, 0x64, 0x94, 0x3E, 0xDA, 0xCF, 0xD4, 0x8A, 0x5A, 0x8B, 0xDC, 0x7D, 0x0F, 0xAB, 0xFA, 0xB6, 0xDA, 0xD3, 0xC5, 0xFE, ++ 0xEE, 0xB1, 0x39, 0x81, 0x8C, 0x85, 0x73, 0xA7, 0xBD, 0x75, 0x06, 0xB1, 0x8B, 0xFC, 0xE2, 0xBA, 0x15, 0x10, 0x5B, 0x7C, 0xEC, 0x83, 0x09, 0x6C, 0x8C, 0xAE, 0x99, 0xFB, 0xE5, 0xEA, 0x2C, 0x10, ++ 0xF1, 0xBC, 0xF3, 0xF1, 0x58, 0x26, 0xA0, 0xD8, 0xEC, 0xA9, 0x7C, 0x42, 0xBB, 0x17, 0xCB, 0x9B, 0xED, 0x21, 0x9A, 0x8C, 0xDA, 0x9A, 0x57, 0x62, 0x85, 0x7E, 0xFB, 0xA4, 0x3B, 0x7F, 0x34, 0x15, ++ 0x7A, 0xEB, 0x49, 0x2F, 0x81, 0xD2, 0xEA, 0x15, 0x6F, 0xF4, 0x99, 0x12, 0xA4, 0x04, 0x9B, 0xE9, 0x3E, 0x12, 0xA2, 0x26, 0x29, 0x5D, 0x8F, 0x68, 0x5C, 0x89, 0xBD, 0xA3, 0x83, 0x1E, 0xB7, 0x3B, ++ 0xE4, 0x65, 0x7D, 0xBE, 0x3B, 0x09, 0xC0, 0x9D, 0x1D, 0xAF, 0x94, 0x4C, 0x26, 0x64, 0xE9, 0xBD, 0xE9, 0x17, 0x41, 0x98, 0xFE, 0x3D, 0xBA, 0xE4, 0xDE, 0x09, 0x45, 0x22, 0x9E, 0xDD, 0xF5, 0x96, ++ 0x1B, 0x2F, 0x3D, 0x71, 0x9F, 0xAB, 0xAE, 0xB9, 0xBB, 0xD0, 0xD6, 0x3F, 0x6B, 0x74, 0xF1, 0x47, 0x70, 0x9C, 0xB2, 0xC5, 0xCD, 0xDD, 0x25, 0x35, 0x41, 0xA2, 0xD4, 0xDB, 0xFE, 0x2F, 0x61, 0x9F, ++ 0xB6, 0xC0, 0xD8, 0x0D, 0x1D, 0x3D, 0x84, 0x93, 0x98, 0xBD, 0xF1, 0xFB, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x0F, 0x16, 0x1D, 0x23, 0x2D, ++ }, ++ }, ++ { ++ .name = "Dilithium Round 3, Level 3 (6-5) KAT 1", ++ .version = 0, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_65, ++ .rho_len = 32, ++ .rho = { ++ 0xB5, 0x41, 0xC1, 0xE9, 0x2C, 0xEA, 0xDD, 0x90, 0x4A, 0x09, 0xEC, 0x08, 0xAD, 0x30, 0x6D, 0x97, 0x47, 0x34, 0xA0, 0x77, 0x86, 0x84, 0x71, 0xE5, 0x8D, 0x07, 0x71, 0x87, 0xC4, 0x66, 0x04, 0xCF, ++ }, ++ .seed_len = 32, ++ .seed = { ++ 0x95, 0x2D, 0x21, 0x81, 0xAC, 0x1F, 0x62, 0x59, 0x6F, 0x76, 0x7E, 0xFC, 0xA0, 0xB5, 0x5D, 0xB0, 0x92, 0xEF, 0x81, 0xDB, 0x66, 0xF9, 0xFF, 0xF1, 0x5F, 0x13, 0xD7, 0xAE, 0xEA, 0xCD, 0x8B, 0x3A, ++ }, ++ .tr_len = 32, ++ .tr = { ++ 0x2F, 0x2C, 0xFF, 0x6F, 0x47, 0xA6, 0x66, 0xF4, 0xAA, 0xE3, 0x22, 0xC8, 0xEC, 0xA7, 0x34, 0x32, 0x87, 0x99, 0xBC, 0xD5, 0x1D, 0x74, 0x93, 0x9F, 0x63, 0x5B, 0xEA, 0x9C, 0x37, 0x6A, 0x1F, 0xD5, ++ }, ++ .s1_len = 640, ++ .s1 = { ++ 0x05, 0x62, 0x52, 0x31, 0x01, 0x18, 0x65, 0x21, 0x53, 0x35, 0x41, 0x52, 0x03, 0x67, 0x04, 0x15, 0x60, 0x14, 0x16, 0x76, 0x16, 0x34, 0x61, 0x06, 0x86, 0x87, 0x65, 0x58, 0x02, 0x61, 0x00, 0x71, ++ 0x02, 0x84, 0x17, 0x70, 0x51, 0x51, 0x55, 0x73, 0x86, 0x43, 0x28, 0x18, 0x46, 0x24, 0x36, 0x82, 0x54, 0x27, 0x68, 0x81, 0x11, 0x56, 0x32, 0x02, 0x40, 0x16, 0x87, 0x63, 0x20, 0x07, 0x36, 0x72, ++ 0x02, 0x31, 0x72, 0x22, 0x40, 0x43, 0x20, 0x52, 0x01, 0x33, 0x64, 0x34, 0x75, 0x88, 0x30, 0x25, 0x81, 0x06, 0x63, 0x44, 0x35, 0x54, 0x48, 0x71, 0x30, 0x15, 0x82, 0x47, 0x53, 0x74, 0x18, 0x43, ++ 0x11, 0x88, 0x46, 0x14, 0x31, 0x55, 0x87, 0x03, 0x70, 0x50, 0x04, 0x64, 0x73, 0x43, 0x81, 0x38, 0x37, 0x33, 0x78, 0x65, 0x66, 0x25, 0x75, 0x20, 0x81, 0x45, 0x68, 0x75, 0x11, 0x56, 0x88, 0x43, ++ 0x22, 0x40, 0x73, 0x80, 0x21, 0x42, 0x80, 0x73, 0x86, 0x60, 0x08, 0x47, 0x10, 0x10, 0x83, 0x40, 0x67, 0x57, 0x38, 0x07, 0x63, 0x10, 0x77, 0x42, 0x27, 0x58, 0x61, 0x46, 0x47, 0x68, 0x31, 0x72, ++ 0x65, 0x24, 0x11, 0x07, 0x05, 0x35, 0x66, 0x70, 0x67, 0x68, 0x62, 0x80, 0x40, 0x37, 0x85, 0x64, 0x10, 0x40, 0x76, 0x26, 0x28, 0x42, 0x32, 0x02, 0x48, 0x70, 0x17, 0x38, 0x80, 0x88, 0x72, 0x36, ++ 0x24, 0x17, 0x22, 0x36, 0x71, 0x77, 0x82, 0x46, 0x64, 0x40, 0x16, 0x27, 0x78, 0x81, 0x81, 0x15, 0x11, 0x01, 0x54, 0x45, 0x38, 0x12, 0x81, 0x28, 0x11, 0x74, 0x42, 0x67, 0x15, 0x16, 0x57, 0x08, ++ 0x02, 0x86, 0x44, 0x83, 0x58, 0x88, 0x17, 0x36, 0x73, 0x61, 0x04, 0x42, 0x32, 0x37, 0x70, 0x50, 0x82, 0x45, 0x17, 0x63, 0x48, 0x72, 0x27, 0x17, 0x70, 0x74, 0x03, 0x85, 0x53, 0x12, 0x11, 0x85, ++ 0x32, 0x08, 0x01, 0x14, 0x85, 0x56, 0x38, 0x01, 0x27, 0x04, 0x86, 0x07, 0x88, 0x35, 0x04, 0x08, 0x05, 0x66, 0x86, 0x23, 0x01, 0x43, 0x61, 0x43, 0x68, 0x67, 0x42, 0x75, 0x52, 0x72, 0x48, 0x37, ++ 0x27, 0x47, 0x77, 0x26, 0x55, 0x30, 0x71, 0x82, 0x57, 0x72, 0x71, 0x31, 0x05, 0x65, 0x26, 0x42, 0x12, 0x25, 0x72, 0x78, 0x02, 0x35, 0x54, 0x10, 0x78, 0x28, 0x52, 0x66, 0x72, 0x54, 0x85, 0x77, ++ 0x47, 0x64, 0x68, 0x43, 0x68, 0x41, 0x57, 0x61, 0x44, 0x40, 0x46, 0x21, 0x15, 0x85, 0x01, 0x44, 0x02, 0x76, 0x66, 0x58, 0x41, 0x55, 0x26, 0x08, 0x48, 0x22, 0x15, 0x04, 0x48, 0x74, 0x43, 0x04, ++ 0x26, 0x67, 0x66, 0x68, 0x18, 0x67, 0x07, 0x01, 0x02, 0x08, 0x66, 0x76, 0x56, 0x22, 0x26, 0x42, 0x28, 0x81, 0x12, 0x36, 0x61, 0x64, 0x78, 0x01, 0x41, 0x51, 0x04, 0x40, 0x43, 0x13, 0x53, 0x70, ++ 0x22, 0x44, 0x60, 0x10, 0x75, 0x53, 0x28, 0x68, 0x68, 0x48, 0x17, 0x86, 0x08, 0x24, 0x27, 0x43, 0x23, 0x71, 0x67, 0x04, 0x21, 0x50, 0x21, 0x08, 0x46, 0x84, 0x74, 0x12, 0x88, 0x75, 0x64, 0x67, ++ 0x14, 0x27, 0x37, 0x18, 0x36, 0x47, 0x52, 0x34, 0x30, 0x24, 0x03, 0x64, 0x67, 0x15, 0x33, 0x43, 0x16, 0x33, 0x76, 0x07, 0x51, 0x11, 0x64, 0x57, 0x28, 0x75, 0x51, 0x58, 0x78, 0x38, 0x70, 0x05, ++ 0x85, 0x41, 0x81, 0x68, 0x15, 0x82, 0x86, 0x40, 0x35, 0x57, 0x32, 0x27, 0x23, 0x03, 0x13, 0x16, 0x52, 0x05, 0x34, 0x16, 0x76, 0x25, 0x18, 0x57, 0x61, 0x06, 0x01, 0x44, 0x41, 0x71, 0x04, 0x43, ++ 0x32, 0x01, 0x24, 0x71, 0x88, 0x88, 0x58, 0x58, 0x34, 0x35, 0x86, 0x20, 0x88, 0x72, 0x18, 0x88, 0x44, 0x50, 0x24, 0x77, 0x34, 0x42, 0x64, 0x61, 0x30, 0x61, 0x43, 0x32, 0x31, 0x54, 0x31, 0x45, ++ 0x56, 0x62, 0x64, 0x08, 0x11, 0x81, 0x50, 0x41, 0x56, 0x14, 0x63, 0x58, 0x33, 0x45, 0x37, 0x57, 0x65, 0x05, 0x12, 0x53, 0x40, 0x65, 0x57, 0x80, 0x57, 0x46, 0x11, 0x57, 0x12, 0x83, 0x07, 0x42, ++ 0x58, 0x38, 0x87, 0x34, 0x30, 0x05, 0x73, 0x88, 0x46, 0x28, 0x74, 0x43, 0x17, 0x65, 0x81, 0x77, 0x28, 0x74, 0x14, 0x42, 0x06, 0x06, 0x34, 0x73, 0x62, 0x26, 0x61, 0x84, 0x76, 0x20, 0x25, 0x68, ++ 0x08, 0x65, 0x13, 0x77, 0x83, 0x68, 0x85, 0x55, 0x74, 0x68, 0x32, 0x43, 0x86, 0x70, 0x63, 0x05, 0x30, 0x88, 0x82, 0x44, 0x84, 0x26, 0x86, 0x17, 0x87, 0x31, 0x28, 0x87, 0x33, 0x53, 0x02, 0x81, ++ 0x88, 0x30, 0x03, 0x51, 0x74, 0x80, 0x53, 0x65, 0x78, 0x17, 0x77, 0x02, 0x61, 0x37, 0x38, 0x36, 0x23, 0x42, 0x35, 0x86, 0x13, 0x00, 0x38, 0x47, 0x58, 0x24, 0x81, 0x84, 0x78, 0x87, 0x77, 0x11, ++ }, ++ .s2_len = 768, ++ .s2 = { ++ 0x41, 0x51, 0x50, 0x83, 0x02, 0x36, 0x55, 0x53, 0x14, 0x86, 0x41, 0x14, 0x18, 0x51, 0x73, 0x54, 0x86, 0x58, 0x16, 0x74, 0x14, 0x70, 0x76, 0x32, 0x16, 0x38, 0x05, 0x48, 0x85, 0x00, 0x17, 0x23, ++ 0x87, 0x64, 0x44, 0x86, 0x32, 0x72, 0x45, 0x37, 0x02, 0x58, 0x32, 0x13, 0x44, 0x15, 0x56, 0x02, 0x45, 0x78, 0x70, 0x14, 0x76, 0x84, 0x33, 0x88, 0x04, 0x56, 0x16, 0x57, 0x06, 0x64, 0x01, 0x67, ++ 0x66, 0x35, 0x37, 0x48, 0x13, 0x43, 0x77, 0x37, 0x01, 0x23, 0x03, 0x82, 0x21, 0x02, 0x00, 0x30, 0x36, 0x47, 0x22, 0x74, 0x67, 0x47, 0x57, 0x42, 0x87, 0x64, 0x03, 0x55, 0x01, 0x05, 0x73, 0x40, ++ 0x62, 0x78, 0x37, 0x70, 0x16, 0x65, 0x80, 0x22, 0x10, 0x38, 0x48, 0x44, 0x78, 0x04, 0x15, 0x28, 0x27, 0x12, 0x86, 0x53, 0x12, 0x13, 0x46, 0x47, 0x53, 0x82, 0x35, 0x14, 0x33, 0x50, 0x41, 0x77, ++ 0x05, 0x25, 0x38, 0x31, 0x75, 0x35, 0x02, 0x01, 0x83, 0x86, 0x22, 0x31, 0x16, 0x41, 0x64, 0x55, 0x71, 0x06, 0x32, 0x38, 0x42, 0x81, 0x06, 0x23, 0x86, 0x53, 0x02, 0x84, 0x51, 0x12, 0x74, 0x55, ++ 0x64, 0x34, 0x28, 0x02, 0x35, 0x30, 0x50, 0x38, 0x58, 0x56, 0x81, 0x54, 0x01, 0x23, 0x50, 0x75, 0x53, 0x53, 0x31, 0x52, 0x55, 0x32, 0x17, 0x74, 0x78, 0x07, 0x84, 0x14, 0x12, 0x30, 0x23, 0x51, ++ 0x55, 0x10, 0x60, 0x52, 0x15, 0x03, 0x43, 0x72, 0x35, 0x01, 0x17, 0x76, 0x25, 0x10, 0x83, 0x35, 0x84, 0x23, 0x13, 0x63, 0x48, 0x31, 0x54, 0x33, 0x78, 0x64, 0x35, 0x64, 0x58, 0x80, 0x73, 0x12, ++ 0x55, 0x00, 0x71, 0x15, 0x64, 0x71, 0x34, 0x66, 0x64, 0x66, 0x15, 0x80, 0x50, 0x32, 0x87, 0x05, 0x56, 0x80, 0x74, 0x85, 0x88, 0x46, 0x68, 0x40, 0x36, 0x78, 0x61, 0x22, 0x18, 0x66, 0x20, 0x78, ++ 0x18, 0x43, 0x60, 0x53, 0x75, 0x70, 0x47, 0x15, 0x58, 0x06, 0x75, 0x73, 0x76, 0x52, 0x11, 0x42, 0x40, 0x10, 0x77, 0x27, 0x16, 0x43, 0x23, 0x46, 0x70, 0x76, 0x05, 0x81, 0x58, 0x27, 0x21, 0x26, ++ 0x55, 0x02, 0x47, 0x75, 0x41, 0x31, 0x87, 0x37, 0x83, 0x33, 0x28, 0x71, 0x27, 0x68, 0x11, 0x70, 0x34, 0x46, 0x04, 0x62, 0x86, 0x27, 0x12, 0x23, 0x76, 0x44, 0x00, 0x03, 0x44, 0x14, 0x23, 0x03, ++ 0x34, 0x44, 0x34, 0x38, 0x16, 0x75, 0x32, 0x40, 0x25, 0x52, 0x68, 0x04, 0x45, 0x55, 0x55, 0x04, 0x85, 0x57, 0x05, 0x04, 0x85, 0x80, 0x37, 0x86, 0x40, 0x14, 0x60, 0x80, 0x70, 0x63, 0x28, 0x60, ++ 0x44, 0x85, 0x21, 0x80, 0x03, 0x00, 0x16, 0x36, 0x23, 0x64, 0x00, 0x32, 0x58, 0x64, 0x67, 0x35, 0x23, 0x15, 0x04, 0x15, 0x26, 0x04, 0x68, 0x52, 0x01, 0x41, 0x02, 0x87, 0x68, 0x21, 0x81, 0x81, ++ 0x65, 0x83, 0x26, 0x22, 0x16, 0x05, 0x25, 0x76, 0x04, 0x30, 0x14, 0x34, 0x51, 0x74, 0x47, 0x07, 0x31, 0x27, 0x76, 0x64, 0x73, 0x22, 0x64, 0x84, 0x72, 0x77, 0x85, 0x05, 0x73, 0x73, 0x81, 0x22, ++ 0x34, 0x25, 0x43, 0x00, 0x66, 0x12, 0x58, 0x41, 0x52, 0x36, 0x82, 0x24, 0x33, 0x37, 0x11, 0x65, 0x26, 0x04, 0x83, 0x28, 0x76, 0x27, 0x26, 0x56, 0x87, 0x40, 0x05, 0x08, 0x42, 0x68, 0x48, 0x33, ++ 0x02, 0x58, 0x53, 0x45, 0x71, 0x20, 0x75, 0x16, 0x14, 0x00, 0x28, 0x54, 0x80, 0x12, 0x66, 0x21, 0x40, 0x53, 0x25, 0x78, 0x67, 0x56, 0x12, 0x25, 0x41, 0x60, 0x21, 0x07, 0x87, 0x74, 0x41, 0x38, ++ 0x70, 0x63, 0x72, 0x78, 0x75, 0x25, 0x85, 0x83, 0x63, 0x12, 0x65, 0x00, 0x20, 0x74, 0x02, 0x43, 0x18, 0x30, 0x27, 0x14, 0x38, 0x15, 0x42, 0x81, 0x87, 0x34, 0x55, 0x48, 0x78, 0x48, 0x17, 0x68, ++ 0x01, 0x22, 0x43, 0x70, 0x86, 0x55, 0x04, 0x21, 0x60, 0x24, 0x56, 0x51, 0x50, 0x45, 0x40, 0x44, 0x88, 0x23, 0x73, 0x60, 0x37, 0x56, 0x66, 0x41, 0x11, 0x40, 0x04, 0x55, 0x75, 0x32, 0x07, 0x38, ++ 0x65, 0x26, 0x65, 0x33, 0x80, 0x30, 0x24, 0x42, 0x32, 0x64, 0x43, 0x08, 0x07, 0x56, 0x05, 0x08, 0x03, 0x58, 0x10, 0x17, 0x63, 0x18, 0x84, 0x48, 0x70, 0x35, 0x16, 0x75, 0x06, 0x40, 0x52, 0x57, ++ 0x88, 0x43, 0x10, 0x05, 0x65, 0x36, 0x75, 0x40, 0x30, 0x41, 0x26, 0x18, 0x75, 0x34, 0x66, 0x08, 0x54, 0x55, 0x23, 0x61, 0x58, 0x28, 0x82, 0x18, 0x20, 0x84, 0x20, 0x08, 0x75, 0x14, 0x16, 0x66, ++ 0x11, 0x51, 0x23, 0x36, 0x44, 0x17, 0x42, 0x28, 0x31, 0x12, 0x71, 0x45, 0x66, 0x13, 0x12, 0x67, 0x76, 0x06, 0x83, 0x00, 0x02, 0x82, 0x41, 0x62, 0x05, 0x64, 0x58, 0x22, 0x75, 0x15, 0x74, 0x10, ++ 0x20, 0x41, 0x83, 0x18, 0x26, 0x05, 0x86, 0x50, 0x11, 0x13, 0x42, 0x47, 0x14, 0x48, 0x84, 0x42, 0x44, 0x83, 0x30, 0x75, 0x21, 0x67, 0x44, 0x13, 0x00, 0x14, 0x53, 0x66, 0x42, 0x54, 0x20, 0x28, ++ 0x17, 0x88, 0x37, 0x50, 0x45, 0x55, 0x66, 0x34, 0x44, 0x32, 0x14, 0x26, 0x37, 0x75, 0x42, 0x24, 0x84, 0x46, 0x52, 0x18, 0x86, 0x74, 0x58, 0x64, 0x48, 0x16, 0x84, 0x26, 0x62, 0x72, 0x03, 0x70, ++ 0x27, 0x54, 0x85, 0x17, 0x07, 0x67, 0x22, 0x63, 0x60, 0x35, 0x38, 0x41, 0x15, 0x20, 0x07, 0x52, 0x70, 0x48, 0x25, 0x81, 0x71, 0x17, 0x68, 0x84, 0x16, 0x41, 0x76, 0x20, 0x80, 0x02, 0x84, 0x34, ++ 0x33, 0x63, 0x77, 0x44, 0x07, 0x70, 0x66, 0x51, 0x75, 0x11, 0x17, 0x55, 0x22, 0x65, 0x03, 0x82, 0x28, 0x13, 0x65, 0x55, 0x78, 0x22, 0x75, 0x26, 0x66, 0x33, 0x18, 0x84, 0x35, 0x75, 0x87, 0x58, ++ }, ++ .t0_len = 2496, ++ .t0 = { ++ 0xD0, 0xC2, 0x55, 0xD5, 0x1F, 0x82, 0x80, 0xDF, 0x43, 0x10, 0x6E, 0xB1, 0x51, 0xD4, 0x44, 0xAD, 0x6E, 0x4C, 0xAB, 0x4B, 0xAC, 0xC5, 0x85, 0xAA, 0x37, 0xD7, 0x44, 0xB2, 0x45, 0x13, 0x20, 0x40, ++ 0xDC, 0x3D, 0x76, 0xAB, 0xCE, 0xA9, 0xCD, 0x44, 0x72, 0xC1, 0xCC, 0xA1, 0xF0, 0x7A, 0x49, 0x92, 0xDB, 0xD4, 0xD0, 0x52, 0x4A, 0x48, 0x2B, 0x50, 0x95, 0x71, 0x10, 0x96, 0x2A, 0xEB, 0x75, 0xFE, ++ 0x2A, 0xCD, 0x2C, 0xA3, 0x84, 0xB2, 0x06, 0xAE, 0x68, 0x98, 0xAE, 0xE2, 0x58, 0x22, 0x18, 0xC0, 0x30, 0x05, 0x9C, 0xF0, 0x61, 0x0D, 0xF2, 0x3F, 0x62, 0xFA, 0x94, 0xCE, 0x63, 0xF5, 0x05, 0x41, ++ 0x6E, 0xE5, 0x6F, 0x21, 0x3B, 0x1B, 0x04, 0xA3, 0xED, 0x78, 0x6E, 0xDE, 0x5A, 0x02, 0x74, 0xDF, 0xB8, 0x62, 0xB7, 0x64, 0x84, 0x7B, 0x48, 0x2B, 0x73, 0xD1, 0xA3, 0xE4, 0x36, 0x74, 0x43, 0x40, ++ 0xCC, 0xA3, 0x97, 0x20, 0xC7, 0xDB, 0x10, 0x16, 0x3D, 0x6B, 0x95, 0x2C, 0xDC, 0x3D, 0x8A, 0x19, 0x46, 0x7F, 0xAB, 0xB0, 0x74, 0x89, 0xDE, 0x13, 0x9D, 0x57, 0x2C, 0x8B, 0x74, 0xAB, 0x10, 0x28, ++ 0x7B, 0xCD, 0x40, 0x20, 0x5D, 0xF4, 0x8A, 0xD5, 0x43, 0x4E, 0xE1, 0x7E, 0xA0, 0x16, 0x99, 0x35, 0x36, 0x38, 0xB7, 0xBE, 0x07, 0x23, 0xE6, 0xC5, 0xF2, 0x76, 0xC9, 0xA5, 0x71, 0x82, 0xB0, 0x99, ++ 0xEC, 0xE8, 0xE9, 0x2C, 0xF0, 0xF1, 0xD1, 0xCC, 0xAC, 0xAD, 0x71, 0xBC, 0x0C, 0x7C, 0xBC, 0x0E, 0xFE, 0x26, 0x43, 0x31, 0xC2, 0xB4, 0x6F, 0x00, 0x1A, 0x3C, 0x7E, 0x3A, 0xE8, 0x35, 0xA8, 0xD1, ++ 0x00, 0xF7, 0xF4, 0xD7, 0x1C, 0x18, 0xBA, 0x1E, 0x66, 0x5C, 0xBB, 0xA8, 0xBE, 0x55, 0x9B, 0x8E, 0xD9, 0x55, 0x13, 0x67, 0xE9, 0x50, 0x05, 0x74, 0xEA, 0xDD, 0x85, 0x6E, 0x77, 0x02, 0x43, 0xD0, ++ 0x7A, 0x30, 0x61, 0xEA, 0xDD, 0x87, 0x97, 0xC5, 0xBA, 0x13, 0x83, 0xC1, 0x39, 0x1E, 0x31, 0x6F, 0xCA, 0x75, 0x2A, 0x9D, 0xD2, 0xD5, 0x30, 0xA8, 0x59, 0xEA, 0xCC, 0x06, 0x06, 0xEC, 0xD0, 0x19, ++ 0xD8, 0x75, 0xAD, 0xF0, 0x6D, 0x81, 0xC2, 0x5C, 0xE0, 0x7B, 0x30, 0x49, 0x21, 0xC8, 0x22, 0x24, 0xF6, 0x83, 0x95, 0x72, 0x47, 0xA6, 0x62, 0xDD, 0xB7, 0xBA, 0xF0, 0x49, 0x07, 0xCD, 0x17, 0x43, ++ 0x19, 0x37, 0xA2, 0x6D, 0x62, 0xE1, 0x87, 0xCB, 0xB9, 0xDF, 0x11, 0x35, 0xA0, 0xF0, 0x34, 0x8F, 0xE7, 0xA9, 0x25, 0xF8, 0x6F, 0xCA, 0x96, 0xB2, 0xED, 0x92, 0xE6, 0x9F, 0x45, 0xAD, 0x55, 0xF9, ++ 0x45, 0xD0, 0xFE, 0x8A, 0xA7, 0xA4, 0x71, 0x91, 0x5B, 0x5F, 0x0F, 0xE9, 0x65, 0x75, 0xCB, 0x2D, 0xEF, 0x41, 0xD5, 0x0D, 0x11, 0x3B, 0xA1, 0xBE, 0x2D, 0x0B, 0x5D, 0x47, 0xDE, 0x93, 0xA1, 0x97, ++ 0x86, 0xBE, 0xAB, 0x57, 0xEE, 0x1A, 0x03, 0x60, 0xFC, 0xD5, 0xE6, 0x9F, 0x25, 0x6B, 0x12, 0x8D, 0x17, 0xD1, 0xC3, 0x91, 0x63, 0xF1, 0x34, 0x5A, 0xD0, 0xFC, 0xC8, 0x5F, 0xD1, 0x48, 0x8D, 0x78, ++ 0x78, 0x14, 0xBC, 0x6E, 0x3E, 0x93, 0xD7, 0x1D, 0x24, 0x6F, 0x60, 0xA5, 0x0C, 0xEE, 0x91, 0x13, 0xB3, 0xA8, 0x5E, 0xED, 0x84, 0x28, 0x69, 0x31, 0xB6, 0xCF, 0x66, 0x98, 0x21, 0x5B, 0x29, 0x62, ++ 0xFD, 0xCB, 0x9E, 0x95, 0x68, 0xCB, 0xC3, 0x84, 0xBE, 0x82, 0x65, 0x58, 0xFF, 0x8D, 0xFF, 0x68, 0xA3, 0xE0, 0x1B, 0x24, 0x70, 0xB7, 0x19, 0x2B, 0x94, 0x92, 0xDF, 0xDE, 0x2C, 0x9F, 0xE0, 0x91, ++ 0xE8, 0xA6, 0x38, 0xDD, 0x1B, 0xC8, 0x79, 0x4B, 0xA3, 0xB2, 0x77, 0x95, 0xB2, 0x20, 0x69, 0x7B, 0x05, 0xCF, 0x1D, 0x68, 0x59, 0x06, 0xF1, 0x4C, 0xDD, 0x9E, 0x43, 0xE1, 0x11, 0x4B, 0x0A, 0x88, ++ 0xC0, 0x74, 0x38, 0xEE, 0x1E, 0x69, 0x01, 0xBE, 0x4F, 0x57, 0x7C, 0x78, 0x66, 0x3B, 0x0D, 0x34, 0x39, 0xFB, 0x39, 0x00, 0x95, 0x9A, 0x10, 0x7B, 0xCA, 0xD3, 0x61, 0x10, 0xB4, 0xCD, 0x2B, 0x61, ++ 0xBE, 0x46, 0xEF, 0x4F, 0x68, 0x00, 0x0D, 0xBC, 0x64, 0xCC, 0xF4, 0x0E, 0x6B, 0x6E, 0xDE, 0x65, 0x77, 0xF8, 0xEA, 0x36, 0x3B, 0x5A, 0x0B, 0xEA, 0x0A, 0x81, 0x91, 0x9B, 0xCF, 0xC1, 0xEC, 0x98, ++ 0x82, 0xAC, 0x51, 0x40, 0x93, 0x17, 0xEB, 0x24, 0x89, 0x23, 0x34, 0xF4, 0x61, 0xBD, 0xF0, 0x4D, 0x4D, 0x6B, 0x16, 0x91, 0xA7, 0xD4, 0x86, 0x56, 0x25, 0xC7, 0x4E, 0xA7, 0xBB, 0xE2, 0x6B, 0x28, ++ 0x4B, 0xC4, 0x46, 0x8E, 0x39, 0x5C, 0xE5, 0x62, 0xF8, 0x24, 0xD9, 0x02, 0x9B, 0x83, 0xE7, 0x61, 0x48, 0xDF, 0x2E, 0xE9, 0x62, 0x5C, 0xCF, 0xBB, 0x88, 0x03, 0x94, 0x11, 0xB0, 0x81, 0x67, 0x41, ++ 0x96, 0xF4, 0xEB, 0xFB, 0xBF, 0x9E, 0x51, 0xD0, 0x47, 0xD0, 0x86, 0xEB, 0xCB, 0xA7, 0xBB, 0xDF, 0x1C, 0xF3, 0x60, 0xC4, 0x03, 0x19, 0xFB, 0x7B, 0x5C, 0xE6, 0xF6, 0xCE, 0x04, 0xE6, 0xAC, 0xB9, ++ 0xA0, 0xEC, 0x0F, 0x15, 0x15, 0x5E, 0xD5, 0x9D, 0xC1, 0xCC, 0x46, 0x8E, 0xB2, 0x5F, 0x9F, 0x62, 0xC9, 0xD9, 0x24, 0xCB, 0x0B, 0x01, 0x99, 0xA5, 0x27, 0x6D, 0x59, 0xE4, 0x48, 0x38, 0x53, 0x4B, ++ 0x62, 0xE8, 0x6E, 0x5F, 0xAD, 0x68, 0xC8, 0x1B, 0x2F, 0x0F, 0xC9, 0xAB, 0xE2, 0x4D, 0xAC, 0x0F, 0xF2, 0x65, 0x24, 0x9C, 0x41, 0x0D, 0x96, 0xAA, 0x8E, 0x98, 0x35, 0x4A, 0x6E, 0x23, 0x88, 0x4D, ++ 0xB4, 0xB5, 0xB0, 0x90, 0xA8, 0xEA, 0x5A, 0x7D, 0xBF, 0x4E, 0x68, 0x12, 0x5B, 0xFD, 0xF7, 0xD2, 0xD6, 0xB3, 0x20, 0xE6, 0x9F, 0x8E, 0x61, 0x72, 0x5B, 0xD5, 0x7F, 0xF4, 0xB9, 0x05, 0xC4, 0xD1, ++ 0x4F, 0xA1, 0x7D, 0xDB, 0xE9, 0xF2, 0x26, 0x28, 0x3B, 0xC4, 0x62, 0xC1, 0x3E, 0xB7, 0x51, 0x12, 0x1D, 0xBB, 0xE6, 0xC0, 0x2C, 0xBA, 0xCF, 0x43, 0x14, 0x0E, 0x51, 0xBF, 0x9C, 0xFD, 0x39, 0x38, ++ 0x3E, 0x24, 0x7E, 0xB9, 0x76, 0x0F, 0x8F, 0x40, 0x43, 0xA0, 0x46, 0xF9, 0xDB, 0x54, 0x0D, 0x84, 0x5C, 0x15, 0x73, 0x86, 0x43, 0xBC, 0xFA, 0x3B, 0x8E, 0x27, 0x8B, 0x07, 0x34, 0xBB, 0xEE, 0x3E, ++ 0xBD, 0xE2, 0x81, 0x09, 0x2E, 0xA3, 0xAE, 0xCB, 0x56, 0xB9, 0x87, 0x4E, 0x4B, 0x9D, 0x3E, 0x2A, 0xCD, 0xC8, 0x04, 0xB2, 0xAE, 0xCE, 0xB9, 0x92, 0xEE, 0x99, 0xAB, 0x11, 0xA3, 0x7C, 0x51, 0x5E, ++ 0x07, 0xF5, 0xAA, 0xE3, 0x2E, 0x36, 0x70, 0x8B, 0x1C, 0xC0, 0xF4, 0xE2, 0xA6, 0x4D, 0xE5, 0x9A, 0x94, 0xFD, 0x3D, 0xCC, 0x08, 0x9B, 0xD2, 0x94, 0x19, 0x61, 0x42, 0x5F, 0xE9, 0x65, 0xB7, 0x15, ++ 0xF1, 0x9B, 0x4E, 0xBA, 0xD8, 0xD7, 0x4B, 0x1B, 0x06, 0x01, 0x76, 0x76, 0x0D, 0x7A, 0xD7, 0x3E, 0x45, 0x3E, 0xBF, 0xEB, 0xC7, 0x87, 0x6F, 0xFF, 0xFE, 0x6B, 0xDB, 0x77, 0xFA, 0xB2, 0x0F, 0x0A, ++ 0x2C, 0x04, 0x31, 0x57, 0xA8, 0xEA, 0x4A, 0xC8, 0x0F, 0x98, 0xA3, 0xC7, 0xB8, 0x24, 0xC1, 0x59, 0xF1, 0x23, 0x6D, 0xA5, 0x2C, 0xE5, 0xA1, 0x0F, 0x0B, 0xC0, 0x25, 0x74, 0x18, 0x61, 0x4D, 0x52, ++ 0x37, 0xFB, 0x4C, 0x65, 0x3E, 0xC6, 0x65, 0x97, 0xFB, 0x8B, 0xB8, 0x1E, 0xC7, 0xD6, 0xA2, 0x09, 0x9A, 0x9D, 0xD8, 0x37, 0xC4, 0x99, 0xC9, 0x92, 0x77, 0x99, 0xC2, 0xB3, 0xE2, 0xD8, 0xAE, 0x18, ++ 0xAF, 0xB3, 0xE2, 0x3C, 0x7E, 0x5D, 0x24, 0xDF, 0xA5, 0x79, 0x6D, 0xB5, 0x15, 0x6C, 0x45, 0x82, 0x93, 0xF7, 0xA0, 0xEF, 0x2F, 0xE8, 0xB9, 0x93, 0x74, 0xD3, 0x34, 0x9C, 0x60, 0x73, 0x49, 0xE3, ++ 0x39, 0x7E, 0x2A, 0x9E, 0x17, 0x45, 0x6E, 0x42, 0xFB, 0x5B, 0xF0, 0x6C, 0x61, 0xB4, 0x41, 0xF5, 0x77, 0xCC, 0x8A, 0xB9, 0x3E, 0xFD, 0x7D, 0xCD, 0x6B, 0x84, 0xDB, 0xAB, 0x85, 0xA0, 0x36, 0x35, ++ 0x78, 0x47, 0xBC, 0xF5, 0x39, 0xEA, 0x74, 0xA5, 0x7E, 0x7D, 0xF5, 0x04, 0x84, 0x24, 0xBE, 0xAC, 0x6E, 0xD1, 0x1A, 0xE1, 0xCF, 0x05, 0xB8, 0x95, 0x1F, 0x3A, 0xE5, 0x52, 0x5B, 0x1A, 0xAF, 0x22, ++ 0x3C, 0xAC, 0x2D, 0xF8, 0x0E, 0x5C, 0x74, 0x7E, 0x3D, 0x9C, 0x21, 0x2B, 0xB6, 0x6D, 0x17, 0xD5, 0x12, 0x65, 0x51, 0xA8, 0x61, 0x9E, 0x3F, 0x24, 0xF5, 0x79, 0x88, 0xC4, 0xC3, 0xEB, 0x78, 0x11, ++ 0x80, 0xBF, 0xA1, 0x37, 0x79, 0x93, 0xCD, 0xA6, 0xD5, 0x74, 0x0D, 0x0A, 0x84, 0xDC, 0xD1, 0x87, 0x93, 0x46, 0xD4, 0xA9, 0x73, 0x5E, 0x22, 0xAB, 0x56, 0xF0, 0x14, 0x96, 0xCD, 0x4E, 0xEF, 0xE6, ++ 0xF8, 0xE0, 0x10, 0xD4, 0xB3, 0xF3, 0x50, 0x33, 0x89, 0xE4, 0xA8, 0x52, 0x48, 0xB3, 0x0F, 0xC4, 0x75, 0x9C, 0x38, 0x07, 0x3B, 0x1E, 0x73, 0x1A, 0x24, 0xB4, 0x91, 0xE6, 0xA7, 0xC2, 0xA8, 0x77, ++ 0x35, 0x0A, 0x3D, 0xBD, 0x8D, 0xDD, 0x6C, 0x0F, 0x55, 0xFC, 0x81, 0x2D, 0x5B, 0x2D, 0x54, 0xD3, 0x23, 0x7B, 0x21, 0x37, 0x10, 0xB2, 0x71, 0xB4, 0x70, 0xF2, 0x53, 0xE0, 0x85, 0x2D, 0xDA, 0x5D, ++ 0x84, 0xED, 0xE1, 0xEF, 0xAB, 0xAF, 0xFA, 0x6D, 0xA8, 0x63, 0xD6, 0xEE, 0x11, 0x3A, 0xBB, 0xA1, 0x48, 0xA9, 0x01, 0x8A, 0x4E, 0x5C, 0x3D, 0x8F, 0x57, 0xCA, 0x9D, 0xF0, 0x05, 0xB5, 0x9A, 0x0D, ++ 0x3E, 0x47, 0x40, 0x6D, 0x97, 0xE3, 0x37, 0xBB, 0x20, 0x1D, 0x78, 0x8B, 0x83, 0x29, 0xFF, 0x50, 0x66, 0x26, 0x8F, 0x4E, 0xFD, 0x51, 0x0D, 0x91, 0xB0, 0x94, 0xC0, 0xEE, 0x3D, 0x05, 0x3F, 0x2C, ++ 0xCB, 0x39, 0x13, 0x86, 0x34, 0xB1, 0x22, 0xD5, 0x37, 0x59, 0x14, 0x13, 0x2B, 0x31, 0x55, 0x08, 0x84, 0xFE, 0x2E, 0x9A, 0x31, 0xE5, 0x12, 0x7B, 0x2E, 0x03, 0x42, 0x7D, 0xBC, 0xF7, 0xD2, 0x55, ++ 0x7C, 0x5B, 0x71, 0x81, 0xBD, 0xA6, 0x83, 0x4B, 0xB9, 0x30, 0xCD, 0x3A, 0x0E, 0x0E, 0x0E, 0xAD, 0x09, 0x12, 0x0A, 0x57, 0x2B, 0xEE, 0xF7, 0x51, 0x86, 0x3A, 0xFA, 0xB3, 0x38, 0xBA, 0xC3, 0xE9, ++ 0xA8, 0x17, 0x9F, 0x2B, 0x5C, 0x90, 0xF0, 0xBB, 0xA6, 0xB7, 0x5F, 0xDC, 0x2A, 0xB5, 0xF7, 0x20, 0x0F, 0xEF, 0x3A, 0x65, 0xBB, 0x77, 0x64, 0x3D, 0xA0, 0xD6, 0xFE, 0xB1, 0x2D, 0x75, 0x3D, 0xF7, ++ 0x75, 0xEA, 0x71, 0x4E, 0x28, 0x3E, 0x0E, 0x99, 0x62, 0xA2, 0x39, 0xA0, 0x44, 0x90, 0xE7, 0xD2, 0xF9, 0x81, 0x93, 0xBB, 0xEB, 0xD6, 0xE2, 0xF5, 0x26, 0xAB, 0x0B, 0x27, 0x7E, 0x49, 0xDB, 0xC3, ++ 0xFA, 0x52, 0x04, 0x92, 0xD3, 0x24, 0x17, 0x28, 0x3B, 0xAB, 0xF3, 0xCE, 0xEE, 0xE0, 0xBE, 0xED, 0xBE, 0x66, 0x0C, 0x04, 0x3B, 0x19, 0x28, 0xAC, 0xDE, 0x60, 0x2F, 0x98, 0x61, 0xA5, 0x3A, 0x9E, ++ 0xFA, 0x9A, 0x0D, 0x9D, 0x31, 0xBB, 0xE6, 0x2B, 0xCE, 0xDE, 0x01, 0x33, 0x32, 0xF9, 0xF3, 0x3B, 0xE6, 0xA7, 0x43, 0x13, 0xFD, 0x17, 0x09, 0xAA, 0x72, 0x9B, 0xBE, 0xB7, 0xEE, 0x47, 0x91, 0xAB, ++ 0xA7, 0x23, 0xC2, 0x5C, 0xB3, 0xB0, 0xC6, 0x48, 0x7C, 0x62, 0x64, 0x29, 0x1E, 0xDA, 0x8F, 0x9E, 0xFF, 0x54, 0xDA, 0x37, 0x48, 0x97, 0xF9, 0x49, 0x0B, 0xF7, 0xD2, 0x05, 0x33, 0xBC, 0x29, 0x3B, ++ 0x9A, 0x06, 0xC4, 0x30, 0xA3, 0x37, 0x04, 0x70, 0x6C, 0x0E, 0xF0, 0x9C, 0x36, 0x95, 0xD3, 0xC0, 0x81, 0x1C, 0x05, 0xCD, 0x85, 0x5E, 0x51, 0xE9, 0xD7, 0x4E, 0x7E, 0x3C, 0xFE, 0xEB, 0x7C, 0xDA, ++ 0xAA, 0x89, 0x3C, 0xB9, 0x73, 0x21, 0xB2, 0x4B, 0x5B, 0xE6, 0x33, 0x3B, 0x6A, 0xBE, 0xC8, 0x11, 0xE3, 0xBC, 0xC2, 0x9C, 0xA0, 0xFA, 0xF9, 0x3B, 0x2B, 0xBD, 0x43, 0x32, 0xD9, 0xB2, 0xE7, 0xC7, ++ 0x89, 0xCB, 0xDE, 0x03, 0xD4, 0xFC, 0xBB, 0x47, 0x5F, 0xAD, 0x05, 0x35, 0xFE, 0xF2, 0xDD, 0xC1, 0xE2, 0x86, 0x26, 0x84, 0x19, 0x89, 0x6C, 0x41, 0x7F, 0x66, 0x5E, 0x7A, 0x02, 0x4F, 0x2C, 0xE0, ++ 0xAB, 0x15, 0x47, 0x57, 0x28, 0xF4, 0xE3, 0x9C, 0xAD, 0x47, 0xFE, 0x33, 0xD9, 0x10, 0x74, 0xC7, 0xB3, 0x46, 0x4E, 0xB0, 0x5E, 0x6A, 0x32, 0x3D, 0x17, 0xD7, 0x43, 0xC0, 0xE7, 0x9C, 0x9E, 0x62, ++ 0xA2, 0x31, 0xED, 0xF4, 0x0E, 0x75, 0x34, 0x0A, 0x23, 0x93, 0x12, 0xC4, 0xB4, 0xE5, 0xBB, 0xAC, 0x6F, 0x51, 0x1C, 0xF2, 0x54, 0x8C, 0xF8, 0x22, 0x4C, 0xCB, 0xC7, 0x3A, 0x21, 0xF8, 0xEB, 0xD3, ++ 0xA6, 0x64, 0x50, 0x61, 0x8D, 0x1F, 0x5B, 0x26, 0x49, 0x5F, 0xF6, 0xE8, 0x4F, 0xA1, 0xC8, 0x97, 0x82, 0xEB, 0x21, 0x1E, 0x2F, 0xB7, 0xFA, 0xD4, 0x56, 0x91, 0xBF, 0x67, 0x9E, 0x83, 0x7F, 0x88, ++ 0xFE, 0x5C, 0x62, 0x08, 0xAA, 0xAF, 0xAB, 0x7A, 0x42, 0x38, 0x7B, 0x0A, 0x1A, 0x48, 0xCB, 0xD5, 0x3B, 0x13, 0x81, 0x78, 0x09, 0x44, 0x5E, 0x00, 0x91, 0xBC, 0xBC, 0xEE, 0x8E, 0x9D, 0xDB, 0x41, ++ 0x3D, 0x13, 0x28, 0x8F, 0x53, 0xFF, 0xE6, 0xDC, 0x03, 0x9C, 0xEA, 0xE2, 0x4C, 0xE5, 0x69, 0x1E, 0xC6, 0x36, 0xBE, 0x10, 0x52, 0xEA, 0x72, 0xCD, 0x81, 0x9F, 0x5F, 0xF2, 0xF2, 0x79, 0x11, 0x5E, ++ 0x07, 0x82, 0x12, 0x46, 0x12, 0x2E, 0xF2, 0xAE, 0xF1, 0xC3, 0xC8, 0x49, 0x5C, 0xEA, 0xBF, 0x2B, 0x6D, 0xC3, 0xD6, 0x5C, 0x60, 0xEB, 0x2F, 0xD5, 0x69, 0x14, 0x5A, 0x63, 0xD9, 0xAB, 0xC5, 0xD4, ++ 0x37, 0xF7, 0xC7, 0xFC, 0x5A, 0xE2, 0x2D, 0x87, 0x87, 0x4A, 0x78, 0xDA, 0x40, 0xD5, 0x72, 0x72, 0xF7, 0xED, 0x93, 0xE0, 0xA1, 0xB4, 0x8C, 0x8B, 0xD6, 0x1A, 0x92, 0xF0, 0x8A, 0x16, 0xD0, 0x14, ++ 0x42, 0xF0, 0x20, 0xFB, 0xDB, 0xFF, 0xBD, 0xB1, 0x8F, 0xC5, 0xBB, 0xAD, 0x8A, 0x14, 0x21, 0x84, 0xEF, 0x9A, 0x32, 0x86, 0x13, 0xC0, 0x3D, 0x67, 0xF8, 0xBB, 0x74, 0x0F, 0x6F, 0x08, 0x3C, 0x39, ++ 0x3C, 0x88, 0xE8, 0x08, 0xBC, 0xC9, 0xA4, 0xCF, 0x4B, 0xEA, 0x75, 0xA1, 0x6C, 0x7A, 0x81, 0xF5, 0x1F, 0x6D, 0x9E, 0x00, 0x3E, 0xBC, 0xB8, 0xE3, 0x28, 0xA8, 0x6D, 0x7B, 0x73, 0x13, 0x3E, 0x59, ++ 0x66, 0x09, 0x6A, 0xFC, 0x1D, 0x1B, 0xCC, 0xCB, 0x7C, 0x84, 0xF1, 0x12, 0x35, 0x89, 0x2D, 0xEC, 0x5C, 0xFC, 0xCD, 0xF6, 0x47, 0x22, 0x49, 0x94, 0x3F, 0xB3, 0x9C, 0x7B, 0x85, 0x86, 0xC4, 0xA2, ++ 0xE5, 0xE8, 0x11, 0xE3, 0xFA, 0xF0, 0x68, 0xA1, 0xBC, 0xA6, 0x1F, 0x50, 0xB7, 0x59, 0xF7, 0x04, 0x2D, 0xE3, 0x4D, 0x73, 0x8F, 0x2D, 0x7C, 0x3D, 0xAB, 0x26, 0xA7, 0x39, 0x70, 0xE5, 0x08, 0x15, ++ 0xC5, 0x1A, 0xD7, 0x3C, 0xFC, 0xD3, 0x53, 0x0B, 0xDA, 0x1C, 0x2E, 0x91, 0x2E, 0x69, 0x4E, 0x9E, 0xE7, 0x9C, 0x09, 0x33, 0x4E, 0x4C, 0x29, 0x33, 0x9F, 0x75, 0x82, 0x30, 0x3B, 0x2E, 0x28, 0x5C, ++ 0x7A, 0xE8, 0x4B, 0xFF, 0x01, 0xDE, 0x1D, 0x90, 0xCA, 0xAD, 0xA4, 0x2A, 0xA4, 0xA6, 0x52, 0xC7, 0x78, 0x20, 0x75, 0xB5, 0x15, 0x14, 0xB1, 0x0C, 0x95, 0x92, 0xD3, 0x0B, 0x5A, 0x73, 0x62, 0xD9, ++ 0xA3, 0x2A, 0xCD, 0x26, 0x6B, 0x62, 0x86, 0x8F, 0x50, 0x73, 0x8D, 0xCA, 0xB7, 0x80, 0xCF, 0x83, 0x19, 0x83, 0x89, 0x34, 0x0F, 0x3E, 0x7A, 0x86, 0x39, 0xFE, 0x94, 0xAE, 0x0F, 0x45, 0x67, 0x29, ++ 0x17, 0x01, 0xEE, 0x62, 0x04, 0x58, 0x7E, 0x29, 0x53, 0x19, 0xA0, 0x05, 0x6B, 0x30, 0x4C, 0x79, 0x01, 0x19, 0x71, 0x92, 0xA8, 0xA6, 0xF4, 0xA3, 0xEA, 0x8C, 0xA3, 0x94, 0x18, 0x61, 0xE7, 0x60, ++ 0x1F, 0x3A, 0x89, 0xFE, 0x6F, 0x9D, 0x8C, 0x49, 0xF9, 0xBB, 0x3D, 0x95, 0xC1, 0xA0, 0x23, 0x35, 0x75, 0x98, 0x3C, 0xD7, 0xD8, 0x8F, 0x9D, 0x31, 0x5C, 0xAA, 0x9F, 0x39, 0x54, 0xB6, 0x3C, 0x6D, ++ 0xF2, 0x92, 0x0E, 0x16, 0xF0, 0x07, 0x6B, 0x72, 0x98, 0x35, 0x2E, 0xEF, 0x1A, 0x7E, 0x13, 0x41, 0xA3, 0x72, 0xD0, 0x76, 0x23, 0x3D, 0x01, 0x0A, 0xD4, 0xDE, 0x4C, 0x28, 0x45, 0xA6, 0xEB, 0xB6, ++ 0x43, 0x74, 0x5D, 0xB2, 0xDE, 0x2A, 0x02, 0xF2, 0x41, 0xD5, 0x2F, 0x16, 0xAA, 0xA8, 0x7F, 0x75, 0xC3, 0x39, 0x5C, 0x40, 0xAD, 0x3B, 0x71, 0xD3, 0x12, 0x39, 0xAD, 0x31, 0x87, 0xAF, 0xFE, 0x18, ++ 0xF0, 0x37, 0x0A, 0xE0, 0x83, 0x10, 0x93, 0xD9, 0x99, 0x06, 0x71, 0xE5, 0xC2, 0xAD, 0x4D, 0x99, 0xA4, 0x9C, 0x07, 0x83, 0x90, 0x7D, 0x1E, 0x1B, 0x8B, 0xF6, 0x15, 0x23, 0xFD, 0x6F, 0xC2, 0x5C, ++ 0x1A, 0x5C, 0xB0, 0xF1, 0xF6, 0x63, 0x16, 0x8F, 0xEA, 0x17, 0xEA, 0x6B, 0x71, 0xE0, 0xE7, 0x61, 0x83, 0x0A, 0xD7, 0xB4, 0x9F, 0xF1, 0xE7, 0x1E, 0x6D, 0xC4, 0x9D, 0xDC, 0x86, 0x5E, 0x62, 0xDF, ++ 0x12, 0xCE, 0x5F, 0x13, 0x84, 0x16, 0xBE, 0x79, 0x44, 0x0C, 0x72, 0x13, 0xFC, 0x2E, 0x49, 0xB5, 0x0E, 0x60, 0xA5, 0x3D, 0x50, 0xDB, 0xEA, 0xD4, 0xAD, 0x36, 0x79, 0xB0, 0xE5, 0x85, 0x45, 0xEE, ++ 0xA9, 0xE5, 0xE8, 0xD5, 0xDE, 0xD9, 0xC3, 0x90, 0x16, 0xE8, 0x88, 0x96, 0xDA, 0xB5, 0x9A, 0x84, 0xEB, 0xC7, 0xCC, 0xA2, 0x86, 0x67, 0xF4, 0x62, 0x20, 0x09, 0x74, 0x8F, 0x6B, 0x58, 0x54, 0xA5, ++ 0xE0, 0xCF, 0x07, 0x0A, 0xB6, 0x1C, 0xAC, 0xCD, 0xBF, 0x1A, 0x7E, 0xCA, 0x53, 0x1A, 0x5B, 0x5F, 0xEF, 0xDC, 0x3F, 0xF6, 0x60, 0xDD, 0xBD, 0xF0, 0x44, 0x7B, 0x70, 0x35, 0x98, 0xB7, 0x6A, 0xCD, ++ 0xBB, 0xE8, 0x62, 0x1E, 0x7F, 0xFC, 0xDA, 0x81, 0x08, 0xA3, 0xA1, 0x18, 0x07, 0xAC, 0x99, 0x92, 0xEC, 0x30, 0x1F, 0xDC, 0x3F, 0x65, 0x67, 0xA9, 0x99, 0x85, 0xC1, 0xA1, 0x6D, 0x9A, 0xA9, 0x28, ++ 0x6E, 0xAB, 0x8C, 0x65, 0xE8, 0xD1, 0x9D, 0xB0, 0x4F, 0x01, 0xD9, 0x18, 0xCA, 0x04, 0xCD, 0xA3, 0x77, 0x55, 0x95, 0x49, 0x4A, 0x4C, 0x2D, 0x53, 0x63, 0x57, 0xE5, 0x0A, 0x3C, 0x3C, 0xEC, 0x15, ++ 0x3F, 0xB3, 0x78, 0xDD, 0x9D, 0x2C, 0x05, 0xC1, 0xEC, 0xF8, 0x9E, 0x89, 0xA8, 0xBC, 0xC4, 0xBD, 0x27, 0x76, 0xC7, 0x9F, 0x34, 0xFA, 0x92, 0x10, 0xE9, 0xE9, 0x68, 0x1A, 0x2B, 0x37, 0x3C, 0x85, ++ 0x7E, 0x88, 0x30, 0xAF, 0x24, 0x60, 0x5A, 0x93, 0xA3, 0x95, 0xEB, 0xA1, 0x74, 0x4C, 0xC2, 0xF5, 0xEA, 0xA1, 0x7A, 0x42, 0x33, 0x6F, 0xE2, 0x7F, 0xDC, 0xCE, 0x42, 0xDE, 0x68, 0x92, 0xF2, 0x23, ++ 0x4B, 0x9E, 0x11, 0x15, 0x35, 0xF4, 0x24, 0xF0, 0xF6, 0x8D, 0xDB, 0x22, 0x0C, 0x13, 0x76, 0x24, 0x66, 0x36, 0x1E, 0x5C, 0xC9, 0xD8, 0xBE, 0x3A, 0xB7, 0xA4, 0x59, 0x76, 0xAD, 0xEF, 0x07, 0x6E, ++ }, ++ .t1_len = 1920, ++ .t1 = { ++ 0xA7, 0x2C, 0x15, 0x0F, 0xCC, 0xC9, 0xD1, 0x65, 0xCC, 0x64, 0x12, 0x64, 0xAD, 0x38, 0xCB, 0x41, 0x9B, 0xFA, 0x5E, 0x48, 0xB1, 0x9E, 0xFB, 0xA6, 0x46, 0xA1, 0x85, 0x9B, 0xB4, 0x00, 0x63, 0xA5, ++ 0x21, 0x2E, 0xD8, 0xFB, 0x5A, 0x60, 0x27, 0x07, 0x93, 0xBE, 0x84, 0xC6, 0xD8, 0x65, 0xA8, 0x67, 0x12, 0x76, 0xE0, 0x8E, 0xE7, 0x71, 0xD7, 0x4A, 0x35, 0xCC, 0xDE, 0x95, 0xC6, 0x1D, 0x6B, 0x19, ++ 0x29, 0x21, 0x0E, 0xAE, 0x6E, 0xA1, 0x03, 0xCE, 0x2A, 0x04, 0x1E, 0xAE, 0x6A, 0xA0, 0xBA, 0xED, 0x9F, 0x73, 0x6C, 0x54, 0x23, 0x8D, 0xA9, 0xFB, 0x05, 0x73, 0x6C, 0x0A, 0x79, 0x2D, 0x31, 0x06, ++ 0x41, 0xA0, 0xCF, 0x46, 0xC5, 0x02, 0xDA, 0x44, 0x98, 0x1C, 0x7C, 0x85, 0xDA, 0x6B, 0xC4, 0x4A, 0x39, 0xD6, 0x0F, 0xCC, 0x79, 0xAA, 0xE5, 0x2B, 0x79, 0x43, 0xBC, 0x34, 0x91, 0x58, 0x07, 0xA9, ++ 0x61, 0x13, 0x40, 0x9A, 0xF8, 0x4C, 0x95, 0x6C, 0xBF, 0x7E, 0x8F, 0x1E, 0x44, 0xCF, 0x8E, 0x37, 0x51, 0x4A, 0x1C, 0xC7, 0x78, 0x01, 0xA2, 0x07, 0x0A, 0x3B, 0xBE, 0xC6, 0xA6, 0x7F, 0xD5, 0xBF, ++ 0xB6, 0x67, 0x68, 0x16, 0x76, 0x44, 0xE5, 0x7C, 0x03, 0x69, 0x0C, 0x12, 0xA4, 0xA1, 0x8B, 0xBD, 0xEA, 0x35, 0xFB, 0x3A, 0x2D, 0x61, 0x9A, 0x55, 0xBE, 0x10, 0xCB, 0x9B, 0x79, 0xA8, 0x4B, 0x10, ++ 0xD8, 0xE6, 0xD3, 0x85, 0x56, 0x46, 0x5B, 0x5A, 0x10, 0x57, 0x69, 0x66, 0xF1, 0xD4, 0xCC, 0x4A, 0x1F, 0x4E, 0x36, 0x2A, 0xD5, 0x84, 0x36, 0x3F, 0xDA, 0xF0, 0xAD, 0x0B, 0xF1, 0x79, 0x29, 0x0D, ++ 0x57, 0xC3, 0xD8, 0xD2, 0x74, 0x01, 0xB0, 0xF2, 0x14, 0x18, 0x3A, 0x7C, 0x36, 0x9A, 0x06, 0x53, 0xF5, 0x10, 0x57, 0xE7, 0x6F, 0x6E, 0x8B, 0x68, 0x34, 0x2D, 0x59, 0x2E, 0x2B, 0xA1, 0xA1, 0xDB, ++ 0x44, 0x40, 0x98, 0x0C, 0x1D, 0x61, 0x6E, 0x8B, 0xF5, 0xF1, 0x5A, 0x18, 0xC3, 0x1E, 0xDD, 0xAC, 0xC2, 0x9A, 0xC5, 0x80, 0x43, 0x8E, 0x5A, 0x64, 0x52, 0x68, 0x89, 0x19, 0x1F, 0x01, 0x99, 0xE1, ++ 0x98, 0x84, 0xC4, 0xA6, 0xDA, 0xE8, 0x92, 0x10, 0x10, 0xAE, 0x79, 0xC0, 0xA4, 0x19, 0xBC, 0x3B, 0x0E, 0x62, 0x2E, 0xE0, 0xAD, 0xC0, 0xFE, 0xF4, 0xFD, 0x43, 0xB7, 0xBD, 0x4B, 0x80, 0x0D, 0xE3, ++ 0x00, 0xA3, 0xD7, 0xD2, 0xDD, 0x26, 0xF3, 0x34, 0xFE, 0x9C, 0x5B, 0x14, 0xF8, 0xBC, 0xA4, 0x09, 0x9E, 0x6F, 0x9D, 0xAE, 0x55, 0xB8, 0xF6, 0xC4, 0xB1, 0x17, 0x45, 0x9E, 0xE6, 0xD7, 0xEE, 0xEF, ++ 0xB1, 0x03, 0x95, 0x69, 0x29, 0x7C, 0x14, 0x7B, 0xF0, 0x12, 0xC5, 0x0C, 0xFA, 0xBC, 0x34, 0x13, 0x48, 0x39, 0xEF, 0x54, 0x57, 0xBF, 0xFB, 0x88, 0x3F, 0x3C, 0x01, 0xC7, 0x5B, 0xA9, 0x4A, 0x47, ++ 0xE2, 0xDC, 0xAE, 0x22, 0xC5, 0xB7, 0xF3, 0x9C, 0x16, 0xA2, 0x1A, 0x9D, 0x27, 0xF6, 0x88, 0x84, 0x30, 0xCC, 0x25, 0x50, 0xF8, 0x6D, 0xA8, 0x04, 0xAA, 0x1E, 0x29, 0xF1, 0x55, 0x0A, 0xD8, 0x8F, ++ 0xC4, 0x99, 0xE2, 0x07, 0x0D, 0xCB, 0xD9, 0xAB, 0xFA, 0x39, 0x10, 0x4D, 0x76, 0x65, 0xA9, 0xB8, 0xC5, 0x8B, 0xE9, 0x8B, 0x41, 0x83, 0xC7, 0xF1, 0xA6, 0x6E, 0x55, 0x7C, 0x60, 0x91, 0x83, 0xE5, ++ 0xF2, 0x02, 0x09, 0x05, 0x16, 0xAA, 0xBF, 0x8D, 0x31, 0x07, 0xE2, 0x49, 0x9B, 0x29, 0xD3, 0x59, 0x3D, 0xE2, 0xBA, 0x9D, 0x16, 0xB5, 0x39, 0xD0, 0xC1, 0x51, 0xF7, 0xF0, 0xE1, 0x96, 0xFD, 0xF5, ++ 0x7A, 0xE6, 0xF3, 0xB4, 0xE5, 0x8A, 0xE9, 0xB9, 0xA0, 0x3A, 0xEC, 0x96, 0x70, 0x0B, 0xE5, 0xBF, 0x52, 0x4E, 0xA4, 0x48, 0xEC, 0xAE, 0x16, 0x82, 0x5C, 0x29, 0xA9, 0xE1, 0x6E, 0x38, 0xC3, 0x79, ++ 0x24, 0xEB, 0x7E, 0xD5, 0xE8, 0x33, 0x87, 0x2E, 0x0D, 0x09, 0x9C, 0x96, 0x15, 0x4C, 0xBC, 0x53, 0xF0, 0xF1, 0x9C, 0x50, 0xB6, 0x70, 0xDD, 0xE7, 0xC9, 0x72, 0x23, 0x35, 0x74, 0xC6, 0x5A, 0xA0, ++ 0x00, 0x67, 0x32, 0x99, 0x36, 0x5B, 0x43, 0x70, 0x56, 0xCB, 0xDE, 0x78, 0xF6, 0x88, 0x78, 0x6E, 0xB9, 0xDD, 0x75, 0x32, 0x54, 0xA2, 0x30, 0x15, 0xA5, 0xE5, 0x4B, 0xE0, 0x4F, 0xB7, 0xA6, 0x08, ++ 0xB6, 0xE6, 0x89, 0xBB, 0x4F, 0x2C, 0x72, 0xF0, 0x99, 0x37, 0x87, 0x9E, 0xA7, 0x9B, 0x0E, 0x0E, 0xC0, 0x0A, 0xB8, 0xD6, 0x6C, 0xC7, 0x87, 0xE4, 0xD9, 0x67, 0x59, 0x1D, 0x6B, 0xE1, 0xEB, 0x98, ++ 0x44, 0x11, 0x2A, 0x52, 0x7E, 0x9D, 0x1F, 0xA5, 0xEE, 0x7F, 0x95, 0x38, 0xB7, 0x54, 0xFD, 0xF2, 0x19, 0x96, 0xB1, 0x45, 0xBA, 0xD0, 0x1C, 0xD7, 0x3D, 0x04, 0x2D, 0x2B, 0xE3, 0x70, 0x15, 0x3D, ++ 0x5E, 0xD5, 0x3E, 0x5E, 0xD4, 0x33, 0x32, 0x3A, 0x8D, 0xB0, 0xBF, 0x83, 0xF0, 0x3F, 0x8B, 0x96, 0xC4, 0x2C, 0xD9, 0xC9, 0xA3, 0x81, 0x20, 0x8F, 0xFD, 0xA0, 0x58, 0xA4, 0xA0, 0xC2, 0xF4, 0xA3, ++ 0x7E, 0x98, 0x53, 0x09, 0xE8, 0xD0, 0x80, 0xB7, 0x35, 0x32, 0x62, 0xE0, 0x6B, 0xF6, 0x3F, 0x82, 0xE7, 0xAD, 0x07, 0xBF, 0x06, 0x8B, 0xC0, 0x93, 0xB6, 0x85, 0x04, 0x4C, 0x4F, 0x41, 0xF9, 0x64, ++ 0xCA, 0x1B, 0xED, 0x2F, 0x1F, 0xD8, 0x54, 0xD6, 0x13, 0x13, 0x9B, 0x1F, 0xBD, 0xE1, 0x6B, 0xAD, 0x79, 0x93, 0x0A, 0xEE, 0xEE, 0x86, 0x58, 0xAE, 0x71, 0xD1, 0xB4, 0xB9, 0x65, 0x95, 0xE4, 0xFC, ++ 0xED, 0x1A, 0x2C, 0x29, 0x1E, 0xC7, 0x26, 0x10, 0x70, 0x0C, 0xA0, 0xE3, 0x69, 0x24, 0x84, 0xEA, 0x07, 0xCE, 0xE7, 0x2C, 0x9B, 0x8A, 0x2E, 0x5A, 0x97, 0x12, 0x93, 0xBE, 0x38, 0x2D, 0x2A, 0xB0, ++ 0xFE, 0x1F, 0x3F, 0x36, 0x54, 0x19, 0x22, 0xE1, 0x03, 0x0A, 0xB0, 0x65, 0xD0, 0x76, 0x64, 0x53, 0x96, 0xD7, 0x12, 0x9F, 0xE7, 0xEF, 0xBB, 0x73, 0x75, 0x39, 0x02, 0x27, 0x18, 0x9B, 0xED, 0xBD, ++ 0x3C, 0x83, 0xB1, 0x61, 0x7E, 0x5A, 0x2A, 0x0B, 0x06, 0xFA, 0xEA, 0x43, 0x9A, 0x1D, 0xE1, 0xCD, 0x7E, 0x9C, 0xB4, 0x0A, 0xD8, 0xB2, 0x97, 0x68, 0x8C, 0x0C, 0xF8, 0x25, 0x47, 0xD0, 0xB6, 0x5C, ++ 0x6A, 0x9D, 0x2A, 0x7F, 0xE3, 0x96, 0x78, 0xB3, 0xC9, 0x6B, 0xE4, 0xD0, 0xE6, 0xD0, 0x1A, 0x51, 0xF6, 0xA2, 0x19, 0x80, 0xB0, 0x0E, 0x43, 0x16, 0x7F, 0xCD, 0x36, 0x6F, 0x00, 0x6D, 0x90, 0x53, ++ 0xA6, 0x1A, 0x9A, 0xA1, 0xFE, 0x19, 0x6B, 0xAC, 0x97, 0xA4, 0xF5, 0xD4, 0x3F, 0x5A, 0x99, 0xF2, 0xB5, 0x72, 0x18, 0xA1, 0x9C, 0x07, 0xAF, 0xE6, 0x31, 0xC0, 0x55, 0xD3, 0x6F, 0x8F, 0x23, 0x58, ++ 0xD0, 0x69, 0xC7, 0x9C, 0xC6, 0x46, 0xAE, 0x4E, 0x30, 0x41, 0x4F, 0xC6, 0x0A, 0x8D, 0x0E, 0xC0, 0x45, 0xED, 0x10, 0xC2, 0x74, 0x41, 0xB4, 0x45, 0x78, 0x58, 0x40, 0x63, 0xE7, 0x26, 0xA9, 0x38, ++ 0xB1, 0xB0, 0x9F, 0x22, 0x09, 0xC8, 0x10, 0x5C, 0xCC, 0xF9, 0xA1, 0x90, 0x82, 0x9F, 0xE4, 0x7F, 0xED, 0x26, 0x4A, 0xCF, 0xBE, 0xC7, 0x8F, 0x8E, 0x8B, 0x1A, 0x8E, 0x10, 0x28, 0xB0, 0xDD, 0x2C, ++ 0x59, 0xBF, 0xEF, 0xE2, 0x47, 0xDC, 0xCD, 0x85, 0x98, 0x54, 0x42, 0x13, 0xA3, 0x6A, 0x5F, 0x19, 0x05, 0xC8, 0x7D, 0x96, 0xAC, 0x8C, 0xC1, 0x2D, 0x37, 0xAC, 0xE5, 0x96, 0x97, 0xA1, 0x39, 0xD3, ++ 0x53, 0x69, 0x7E, 0x1E, 0xEA, 0xB1, 0x24, 0x1C, 0x6D, 0xFA, 0x70, 0x76, 0x21, 0xEC, 0x47, 0x51, 0x13, 0xA5, 0x26, 0xD9, 0x11, 0x1F, 0xC9, 0xB5, 0x95, 0x7A, 0xA5, 0x44, 0xD6, 0x1D, 0x9F, 0xB7, ++ 0x60, 0xAD, 0xE4, 0xA2, 0x86, 0xDF, 0x28, 0x5B, 0xBD, 0x1A, 0xE6, 0x48, 0x63, 0xF7, 0x04, 0xEA, 0x46, 0x44, 0xD9, 0xCB, 0x2E, 0x77, 0xD2, 0x23, 0x80, 0x01, 0xE7, 0xC8, 0x96, 0x1E, 0xFA, 0x19, ++ 0x54, 0xEC, 0xE6, 0xEC, 0x59, 0xA4, 0x75, 0x8B, 0x87, 0xC3, 0x18, 0x81, 0x9F, 0x86, 0x5D, 0x73, 0x54, 0xC1, 0xD5, 0xDF, 0xCF, 0xDE, 0x5B, 0x41, 0xF4, 0xEE, 0xA9, 0x30, 0xA7, 0xFE, 0x40, 0x80, ++ 0x8D, 0xE9, 0x50, 0xBD, 0x88, 0x19, 0x96, 0xC6, 0xA3, 0x33, 0xAF, 0x6F, 0xB0, 0x90, 0xDD, 0x2E, 0xF3, 0x94, 0x5F, 0x9C, 0xCC, 0x0A, 0x60, 0x17, 0xA3, 0x6C, 0xE4, 0x84, 0x47, 0xFD, 0xD9, 0x61, ++ 0xE4, 0xB1, 0x7D, 0xD0, 0x2B, 0x4A, 0x3A, 0xA7, 0xB5, 0xE9, 0x8A, 0x86, 0xEA, 0x97, 0x3E, 0x66, 0x97, 0xCA, 0x03, 0x44, 0xCB, 0xFC, 0xB5, 0xF2, 0xD9, 0xAE, 0xE9, 0xEF, 0x6E, 0xF6, 0xF5, 0x7F, ++ 0x62, 0x72, 0x88, 0x6D, 0x67, 0x11, 0x23, 0x46, 0xB2, 0x56, 0xBF, 0xF7, 0xA5, 0xA1, 0x5B, 0x6E, 0x31, 0x07, 0x5D, 0x68, 0xA9, 0xBD, 0x73, 0x8B, 0x16, 0x0D, 0x9D, 0x2B, 0x06, 0x9B, 0x45, 0xB2, ++ 0xC5, 0x8C, 0xA7, 0x01, 0x65, 0xF6, 0x00, 0x9F, 0xEF, 0xE9, 0xFB, 0xE6, 0xB7, 0xD2, 0x51, 0x95, 0x1C, 0xF8, 0x16, 0x23, 0x3D, 0x0C, 0x0B, 0xE5, 0x99, 0xE6, 0xA6, 0x9D, 0xDD, 0xAD, 0x52, 0xD2, ++ 0x15, 0xE1, 0xBA, 0xB1, 0xF7, 0xF8, 0x54, 0x45, 0x38, 0x39, 0xA0, 0x07, 0x0A, 0xC4, 0x28, 0x2A, 0x48, 0x75, 0xF3, 0x85, 0xF7, 0x2C, 0x7A, 0x9D, 0xE6, 0x92, 0x1B, 0xCA, 0xD9, 0xE1, 0x73, 0xE1, ++ 0x3D, 0x33, 0xB6, 0xA0, 0x94, 0xF0, 0xE4, 0x66, 0xA0, 0xE4, 0xC9, 0x49, 0x5E, 0xA0, 0x75, 0x43, 0xE1, 0x2D, 0x9F, 0x95, 0x20, 0x96, 0xDB, 0xCD, 0xA1, 0x57, 0x5B, 0xC1, 0x0C, 0xCC, 0xF0, 0xAF, ++ 0x60, 0xCD, 0x4A, 0x75, 0x7A, 0xF9, 0x0E, 0x4E, 0xCD, 0x08, 0x32, 0x26, 0xE8, 0x31, 0x87, 0x09, 0x68, 0x5D, 0x3C, 0x26, 0xB6, 0xF9, 0x51, 0x5B, 0x0E, 0x08, 0xFC, 0x51, 0xF0, 0x90, 0x6D, 0x73, ++ 0x30, 0x50, 0x4C, 0xD4, 0x13, 0x6F, 0xF6, 0x2D, 0xC5, 0x6A, 0xB2, 0x3B, 0xB5, 0xAB, 0x4B, 0x4D, 0x71, 0x3F, 0xCD, 0x4C, 0xB6, 0x84, 0x03, 0x6A, 0x74, 0x36, 0x6B, 0xBC, 0x67, 0x46, 0x52, 0xAC, ++ 0x6E, 0xDD, 0x0B, 0x7B, 0xB2, 0xF1, 0x5D, 0x70, 0xF0, 0x86, 0x85, 0x1B, 0x94, 0x65, 0x24, 0x71, 0x52, 0x7C, 0xA2, 0x7F, 0x06, 0x74, 0x45, 0x9A, 0x7B, 0x00, 0x8B, 0x35, 0x53, 0x9E, 0xC2, 0x4F, ++ 0x65, 0x16, 0x03, 0x4F, 0xCF, 0x6F, 0x84, 0xCD, 0x65, 0xD2, 0xA5, 0x06, 0x26, 0xE0, 0xD6, 0x62, 0xBC, 0x02, 0x9F, 0x52, 0x54, 0xFB, 0x20, 0xAD, 0x8C, 0x92, 0xB2, 0xBB, 0xE2, 0x75, 0xBB, 0x69, ++ 0x67, 0xF4, 0x18, 0x22, 0xA9, 0x21, 0x6C, 0x30, 0x6C, 0x2A, 0x32, 0x7E, 0x13, 0xEF, 0x14, 0xC4, 0x65, 0x1D, 0x0F, 0x42, 0x5B, 0xDD, 0xD3, 0x07, 0x08, 0x1C, 0xDB, 0x6D, 0xC7, 0xB4, 0x0C, 0xF6, ++ 0xB2, 0x73, 0xFC, 0xEE, 0x1D, 0x78, 0x19, 0x6C, 0xE7, 0xAF, 0x83, 0xEB, 0x85, 0x03, 0x9A, 0x00, 0x17, 0x86, 0x2F, 0xF3, 0x04, 0x8B, 0xB6, 0x5B, 0xBD, 0xCF, 0x5B, 0x4D, 0x3E, 0x25, 0x3C, 0x1B, ++ 0x3F, 0x52, 0x2E, 0x33, 0x74, 0x74, 0x5E, 0x35, 0xFB, 0x32, 0x20, 0x8D, 0xCC, 0x5C, 0x25, 0x6A, 0x5C, 0x87, 0xF4, 0x03, 0x34, 0x41, 0xB7, 0x6F, 0x6B, 0x4C, 0x11, 0xE2, 0x84, 0xB0, 0xD5, 0x3B, ++ 0xB5, 0x03, 0x64, 0x1D, 0x8B, 0x4C, 0x41, 0xBE, 0x7B, 0xE2, 0x17, 0xDD, 0xCC, 0xCA, 0xBE, 0xBB, 0xDE, 0x2C, 0x48, 0xCE, 0x37, 0x55, 0x0F, 0x8A, 0xA1, 0x7F, 0x41, 0x7E, 0x8F, 0x6D, 0x76, 0x58, ++ 0x0C, 0x69, 0x03, 0x0F, 0xE1, 0x7E, 0x5C, 0x16, 0x6B, 0xC5, 0x11, 0x32, 0xBB, 0xC5, 0x26, 0x4C, 0x87, 0x64, 0x9E, 0x2F, 0xA3, 0x56, 0xD6, 0xF8, 0x95, 0x78, 0x5F, 0x2D, 0xFC, 0x46, 0x77, 0xA6, ++ 0xEA, 0xF7, 0xBA, 0xE8, 0x68, 0xB0, 0x90, 0xD9, 0x0C, 0xCF, 0x11, 0xEA, 0x20, 0x97, 0x93, 0x3D, 0x5F, 0x19, 0x9A, 0x9A, 0x32, 0x4B, 0xF9, 0x7A, 0xDE, 0xE6, 0x8A, 0x04, 0x07, 0x13, 0x41, 0x66, ++ 0xB1, 0x0C, 0x5E, 0x52, 0x31, 0x32, 0xBB, 0x93, 0xDE, 0x89, 0xB3, 0x86, 0xE4, 0xB2, 0x70, 0x98, 0x0C, 0x35, 0x13, 0x2B, 0x67, 0x7C, 0xE9, 0xD9, 0xF2, 0x50, 0x80, 0x2E, 0x4C, 0x77, 0x9C, 0x44, ++ 0x15, 0x3A, 0x3A, 0x4F, 0xD0, 0x86, 0x64, 0x10, 0x2F, 0x5A, 0xE9, 0x9C, 0xE9, 0xF0, 0x40, 0x38, 0x35, 0x00, 0xE9, 0x99, 0x65, 0x54, 0x04, 0x7A, 0x90, 0xDC, 0x24, 0xB2, 0x2F, 0x77, 0xD1, 0x99, ++ 0xCB, 0xAD, 0xD9, 0xC4, 0xA5, 0xC4, 0xF0, 0x10, 0x60, 0x80, 0xDE, 0xE3, 0x6F, 0xBE, 0x4A, 0x1F, 0xBE, 0x3E, 0x71, 0x68, 0xB5, 0x4F, 0x88, 0xD5, 0xEF, 0xE7, 0x5E, 0x07, 0x05, 0xE7, 0xF2, 0xBB, ++ 0xD5, 0xF0, 0x1C, 0xA8, 0x8A, 0x3A, 0x5C, 0xAD, 0x44, 0x16, 0x26, 0x34, 0x8B, 0xE4, 0xF6, 0x5B, 0xED, 0xC6, 0x5D, 0xA4, 0xF9, 0x21, 0x8A, 0xCE, 0xBF, 0x93, 0x9D, 0x48, 0xD5, 0x3D, 0x54, 0x01, ++ 0xF4, 0x60, 0x91, 0x77, 0xCE, 0xF8, 0x3B, 0x1D, 0xBD, 0xCF, 0x5E, 0xE2, 0x6B, 0xB5, 0x47, 0x62, 0x37, 0x1D, 0xBA, 0xCA, 0x8E, 0x4D, 0x17, 0xF9, 0xE0, 0xBE, 0x96, 0x11, 0x15, 0xA7, 0x15, 0x15, ++ 0x36, 0x8B, 0xDC, 0x16, 0xF5, 0xB8, 0x57, 0xF7, 0xCD, 0xDE, 0xB5, 0xE7, 0x8A, 0xFB, 0x58, 0x6F, 0x19, 0x72, 0x5B, 0xD6, 0xEC, 0xA4, 0xA7, 0x76, 0xB2, 0xE7, 0x13, 0x1F, 0x66, 0x19, 0x9E, 0xD5, ++ 0x5A, 0x68, 0x91, 0xA6, 0x32, 0x6A, 0xC9, 0x3C, 0xBF, 0x2C, 0xA2, 0x24, 0xB4, 0xB8, 0x04, 0xC4, 0x89, 0x3C, 0x97, 0x7C, 0xFB, 0x75, 0xBA, 0xDC, 0xCF, 0x56, 0x7B, 0x49, 0x05, 0x8C, 0x60, 0xF5, ++ 0x49, 0x52, 0x22, 0x64, 0xDC, 0x5E, 0xF9, 0xCA, 0x9D, 0xA5, 0x30, 0x0D, 0x10, 0xC5, 0x5A, 0x3E, 0x0B, 0x91, 0x68, 0x1C, 0x35, 0xB8, 0x44, 0xEC, 0x78, 0xAC, 0x03, 0x42, 0x95, 0x71, 0x61, 0x36, ++ 0x9F, 0x19, 0x2F, 0xC6, 0xB6, 0xE6, 0x25, 0xF1, 0xF8, 0xC0, 0x59, 0x73, 0x0A, 0x99, 0xD1, 0xA4, 0x73, 0xD3, 0x89, 0x2B, 0x95, 0x5F, 0xAC, 0xCF, 0x92, 0x66, 0x02, 0x32, 0xB0, 0x29, 0x6F, 0xA6, ++ 0xE9, 0xCA, 0xC5, 0x6C, 0xCB, 0xB2, 0xE9, 0xD9, 0xC6, 0x55, 0x30, 0x14, 0x5A, 0xFB, 0x13, 0x41, 0xB8, 0x73, 0x75, 0xB5, 0x15, 0x88, 0x93, 0xB9, 0x3A, 0xE9, 0x9E, 0x39, 0x2B, 0xFE, 0x69, 0x40, ++ }, ++ .pkcs8_len = 0, ++ .spki_len = 0, ++ .msg_len = 66, ++ .msg = { ++ 0x22, 0x5D, 0x5C, 0xE2, 0xCE, 0xAC, 0x61, 0x93, 0x0A, 0x07, 0x50, 0x3F, 0xB5, 0x9F, 0x7C, 0x2F, 0x93, 0x6A, 0x3E, 0x07, 0x54, 0x81, 0xDA, 0x3C, 0xA2, 0x99, 0xA8, 0x0F, 0x8C, 0x5D, 0xF9, 0x22, ++ 0x3A, 0x07, 0x3E, 0x7B, 0x90, 0xE0, 0x2E, 0xBF, 0x98, 0xCA, 0x22, 0x27, 0xEB, 0xA3, 0x8C, 0x1A, 0xB2, 0x56, 0x82, 0x09, 0xE4, 0x6D, 0xBA, 0x96, 0x18, 0x69, 0xC6, 0xF8, 0x39, 0x83, 0xB1, 0x7D, ++ 0xCD, 0x49, ++ }, ++ .sig_len = 3293, ++ .sig = { ++ 0xBE, 0xE5, 0x9E, 0x79, 0x09, 0xC2, 0xA0, 0xAB, 0xBD, 0xC3, 0xF9, 0xD0, 0x7D, 0x40, 0x5A, 0x96, 0x2E, 0x64, 0x2A, 0x1F, 0x1C, 0x1F, 0xD0, 0xB7, 0xAD, 0x6D, 0x99, 0x99, 0x0C, 0xE6, 0x9D, 0x5D, ++ 0x8D, 0x2D, 0xF8, 0x9B, 0xB9, 0x6F, 0xF9, 0xB5, 0xB6, 0xFC, 0xA6, 0x48, 0xDF, 0x08, 0x56, 0x45, 0x7B, 0x91, 0x9B, 0x38, 0x13, 0x16, 0x35, 0xDD, 0x81, 0x4A, 0x7A, 0xA8, 0xB0, 0xB9, 0x47, 0xDD, ++ 0x70, 0xA6, 0x7E, 0x49, 0x73, 0xFE, 0x33, 0xE1, 0xE0, 0x02, 0x22, 0x59, 0x7C, 0x2B, 0xE8, 0xF8, 0x67, 0x80, 0x12, 0x26, 0x41, 0x53, 0xAA, 0xCA, 0x64, 0x80, 0xC5, 0xF1, 0x8C, 0xA3, 0xC0, 0x50, ++ 0x45, 0x0D, 0x42, 0xD9, 0xE5, 0x6B, 0x9B, 0x5E, 0x76, 0xF3, 0xAE, 0x3B, 0xDB, 0x58, 0x95, 0x81, 0xC4, 0xAC, 0xF8, 0x10, 0x75, 0x35, 0xB1, 0xFE, 0x7D, 0x49, 0x42, 0xCB, 0xBC, 0xDF, 0xBA, 0x4E, ++ 0xC1, 0xAF, 0xBA, 0xA4, 0x60, 0x95, 0x61, 0x95, 0xB1, 0x72, 0x93, 0xDC, 0x18, 0xCF, 0x0A, 0x3B, 0x43, 0x6E, 0xC4, 0x74, 0x60, 0x0B, 0xE1, 0xB6, 0xE6, 0x1A, 0xE6, 0x1C, 0x4F, 0x9B, 0x2F, 0xB1, ++ 0x22, 0x98, 0x36, 0x2D, 0x9E, 0xF0, 0x1E, 0xC6, 0x8A, 0x46, 0x22, 0x95, 0x7B, 0x96, 0x4C, 0x30, 0x56, 0x29, 0xC4, 0x26, 0x34, 0xCF, 0x88, 0x47, 0xA7, 0x58, 0x12, 0x09, 0x41, 0x8E, 0x24, 0x58, ++ 0x90, 0x6E, 0x15, 0xC8, 0xE3, 0x0E, 0x74, 0xD8, 0xC8, 0x74, 0xD8, 0x5D, 0xC6, 0x3E, 0xB1, 0x1A, 0x96, 0x07, 0x57, 0xAD, 0xD9, 0xED, 0xAA, 0x6D, 0x9A, 0xF8, 0xB2, 0xE3, 0x55, 0x10, 0x22, 0xB2, ++ 0x34, 0x26, 0x31, 0x9D, 0x37, 0xAD, 0xF1, 0x92, 0xC2, 0x4E, 0xFD, 0xCF, 0x8D, 0x95, 0xEF, 0xE8, 0x6C, 0x16, 0x45, 0x9A, 0xAC, 0xA0, 0xDF, 0x6A, 0xE4, 0x14, 0xCD, 0x93, 0xB7, 0x0D, 0x57, 0xE7, ++ 0xA7, 0x64, 0x4C, 0x48, 0x91, 0xC0, 0x87, 0x96, 0xB3, 0xFD, 0x59, 0x2E, 0x51, 0xB1, 0xFA, 0x59, 0x1F, 0xD7, 0x1B, 0xC4, 0xFE, 0xC3, 0xB9, 0xA8, 0xDF, 0x5A, 0x92, 0x53, 0x57, 0xDF, 0x46, 0x82, ++ 0xA4, 0x58, 0x3F, 0x78, 0x8B, 0x61, 0x9D, 0x6D, 0xEC, 0x6A, 0xCD, 0x4A, 0x5A, 0x17, 0xE8, 0xF4, 0x16, 0x53, 0x96, 0x2A, 0x83, 0xB4, 0x5D, 0xA6, 0xC0, 0x87, 0xC8, 0xBE, 0xF1, 0x6E, 0x95, 0xD2, ++ 0xD4, 0x34, 0x38, 0x52, 0x7E, 0x92, 0x73, 0x64, 0x5E, 0x22, 0x58, 0x4E, 0xE6, 0xAD, 0xCE, 0xA4, 0xE2, 0x51, 0xCD, 0x79, 0xA0, 0x78, 0xEF, 0xF9, 0xC2, 0x9C, 0xE4, 0x52, 0xEA, 0xBA, 0x9C, 0xE3, ++ 0x21, 0x25, 0x71, 0x9F, 0xBE, 0xE5, 0xF9, 0xA9, 0x01, 0x31, 0xDF, 0x0C, 0xFD, 0xCA, 0x49, 0x49, 0x6A, 0xDC, 0x48, 0x5E, 0x8B, 0x08, 0xF3, 0x0F, 0xC3, 0xED, 0x0A, 0x29, 0x2A, 0x15, 0x4E, 0x3E, ++ 0x3C, 0x89, 0x34, 0x4A, 0xB9, 0xBA, 0x4E, 0x33, 0x23, 0xDD, 0x16, 0xC6, 0xEE, 0xD1, 0x84, 0xFE, 0x25, 0xE5, 0x62, 0xAC, 0x6B, 0xF7, 0xD0, 0x44, 0x15, 0xEA, 0x37, 0x0B, 0x72, 0xE5, 0x1A, 0x44, ++ 0x9E, 0xE6, 0xB5, 0x81, 0x83, 0x25, 0x0C, 0xDC, 0xB2, 0x27, 0x20, 0x5E, 0xCE, 0x5E, 0x9F, 0x63, 0x1D, 0xFE, 0xDE, 0x70, 0x2C, 0xE4, 0xEC, 0x66, 0xF8, 0x3B, 0xA7, 0x9D, 0x3F, 0xB4, 0x42, 0x2A, ++ 0xD6, 0xF4, 0x3B, 0x64, 0x41, 0x18, 0x95, 0x3E, 0x56, 0x47, 0x5D, 0x2D, 0x0C, 0x3A, 0x92, 0x51, 0xD9, 0x6A, 0x98, 0x67, 0xD8, 0x04, 0x9D, 0xF2, 0x17, 0x72, 0x4B, 0x42, 0x0F, 0xC3, 0xA4, 0xDF, ++ 0x2B, 0x86, 0x78, 0xD2, 0x90, 0x2B, 0x32, 0xD4, 0x4D, 0x93, 0x3F, 0xC5, 0x6C, 0x3F, 0x80, 0x22, 0xF8, 0x7A, 0xFD, 0xA3, 0x76, 0x89, 0x10, 0x5C, 0xAC, 0x8E, 0xCB, 0x2C, 0x8C, 0x2A, 0x92, 0x8B, ++ 0xDB, 0xAE, 0x81, 0x01, 0xE3, 0x44, 0x9F, 0x61, 0x36, 0xB0, 0x53, 0xAA, 0xA2, 0x0C, 0x14, 0x0B, 0xD9, 0x20, 0xB9, 0xBB, 0x67, 0x65, 0x5E, 0xE7, 0x9B, 0xC4, 0xE2, 0x63, 0x6C, 0xB0, 0xCA, 0x4A, ++ 0x7E, 0xFE, 0x39, 0x72, 0xF9, 0xA0, 0xC6, 0xCF, 0x16, 0xAD, 0x16, 0x33, 0xCE, 0x51, 0xF2, 0xC5, 0x4A, 0x77, 0x12, 0xE6, 0x9D, 0x57, 0x7A, 0x20, 0x83, 0x4C, 0x4A, 0xD1, 0xCC, 0xE4, 0xE3, 0xF8, ++ 0xC1, 0xAB, 0x65, 0xC1, 0x54, 0x8B, 0x00, 0x02, 0x67, 0x28, 0xE5, 0x7D, 0x42, 0xA2, 0x94, 0x28, 0x82, 0xB2, 0x4B, 0x45, 0x94, 0x44, 0xEB, 0x43, 0x2B, 0x89, 0x5A, 0xCA, 0x2A, 0x71, 0xA6, 0x2A, ++ 0x34, 0x92, 0x7E, 0x56, 0x75, 0x81, 0xD8, 0xBA, 0x2A, 0x1E, 0x52, 0xF0, 0xAE, 0xEE, 0xE1, 0xB0, 0x86, 0x4B, 0xF3, 0x7D, 0x7A, 0xE5, 0xCA, 0x2D, 0x2F, 0x15, 0x2E, 0x73, 0x89, 0x22, 0x4C, 0xA7, ++ 0xF9, 0x13, 0x2B, 0x89, 0x39, 0xE1, 0xB1, 0xCC, 0xBF, 0xC0, 0x3B, 0x2B, 0xE9, 0xA4, 0x60, 0xCF, 0xC7, 0xDC, 0x5A, 0xA5, 0x04, 0xF7, 0xFC, 0xD9, 0x46, 0xDC, 0xE5, 0xC6, 0x39, 0x9D, 0xA6, 0xC0, ++ 0xC8, 0xD8, 0xCC, 0x8B, 0x0C, 0x0B, 0x30, 0x73, 0x6C, 0x63, 0x10, 0x25, 0xA6, 0xA3, 0xA9, 0xE2, 0xD9, 0x4C, 0xDC, 0xBD, 0x3C, 0xE7, 0xA6, 0x8D, 0x7F, 0xFD, 0xEE, 0xAA, 0x45, 0x9B, 0x10, 0x4B, ++ 0xB7, 0x30, 0xED, 0x7C, 0x9E, 0x87, 0xBB, 0x02, 0xE8, 0x9D, 0xEE, 0x4F, 0x91, 0x5F, 0xD2, 0xE3, 0x1B, 0xF4, 0x18, 0xA1, 0x55, 0x02, 0xA4, 0xB2, 0xE4, 0x26, 0xED, 0xEA, 0x8A, 0x14, 0x26, 0x90, ++ 0xA4, 0x5E, 0xDA, 0xB3, 0xE6, 0x37, 0xF7, 0x97, 0xE7, 0xA7, 0x86, 0xB8, 0xA8, 0xE9, 0x0E, 0x9E, 0xE0, 0xD5, 0x78, 0x1E, 0xCD, 0x16, 0x91, 0x1F, 0xB0, 0xF4, 0xEB, 0x5B, 0x0C, 0x70, 0x74, 0x98, ++ 0xFE, 0x7D, 0x8C, 0x2A, 0xE6, 0x73, 0xA3, 0x33, 0x4A, 0xFB, 0x95, 0xAC, 0x6B, 0x18, 0x5A, 0xF3, 0x6F, 0xA1, 0x87, 0x74, 0x93, 0x8B, 0xA6, 0x56, 0xB2, 0x2F, 0xDC, 0x9A, 0xCB, 0xCF, 0xBF, 0x95, ++ 0xD1, 0xBF, 0x5E, 0xDF, 0x7D, 0x90, 0x5C, 0xF1, 0xB5, 0x40, 0xE1, 0x7B, 0xAB, 0x93, 0x7B, 0x4B, 0xD3, 0x62, 0x0D, 0x59, 0x4C, 0x0D, 0x9B, 0xDB, 0xC7, 0x15, 0x99, 0xCE, 0x69, 0xE5, 0x70, 0x6F, ++ 0xA3, 0x33, 0x20, 0xFE, 0xE0, 0x63, 0x96, 0xCB, 0x97, 0x37, 0xDB, 0x17, 0xA6, 0x2C, 0x96, 0x5F, 0x77, 0xE3, 0x5A, 0xF9, 0xF7, 0x85, 0xBB, 0x0E, 0x50, 0xAB, 0xB8, 0x10, 0x6F, 0xE8, 0xB9, 0x04, ++ 0xD0, 0xCD, 0x1E, 0x15, 0xB9, 0x25, 0x55, 0xF0, 0x5C, 0x24, 0xE7, 0x6E, 0x94, 0xEC, 0x41, 0xEC, 0x90, 0xE9, 0x60, 0x39, 0xB4, 0xA7, 0xCA, 0x9F, 0x8E, 0xD1, 0x3F, 0x1B, 0xE6, 0xFA, 0x85, 0x03, ++ 0x44, 0xD4, 0x46, 0xB1, 0x68, 0x3B, 0x04, 0xB7, 0x5B, 0xBA, 0x0C, 0x08, 0xF7, 0x40, 0x25, 0x67, 0x8E, 0x75, 0x40, 0x35, 0x32, 0x21, 0x9F, 0x37, 0x48, 0xF3, 0xC7, 0x3A, 0xA2, 0x0E, 0x34, 0xD5, ++ 0xEB, 0x1B, 0x0C, 0xBB, 0x58, 0xDA, 0x9A, 0x01, 0xF3, 0x7E, 0x74, 0xC0, 0x63, 0xD0, 0x3A, 0xF3, 0xBA, 0x8F, 0xBA, 0x28, 0x59, 0x2E, 0x41, 0x93, 0x27, 0x0A, 0x00, 0xCD, 0x15, 0x86, 0xF8, 0x33, ++ 0xDF, 0xA8, 0xDB, 0xF4, 0x0C, 0x15, 0xE7, 0x04, 0xD2, 0x53, 0x65, 0x8C, 0xC0, 0x6C, 0x6A, 0x48, 0x88, 0x1B, 0xAE, 0x68, 0xBD, 0x4C, 0xBE, 0x38, 0xE7, 0xC8, 0x94, 0x87, 0x3E, 0x86, 0x3A, 0x2C, ++ 0x4C, 0xA2, 0x24, 0xB7, 0x6E, 0xD6, 0x2B, 0xDC, 0x06, 0xD9, 0x0D, 0x7A, 0x7E, 0xC6, 0x8B, 0x62, 0x2E, 0xB3, 0x8A, 0x42, 0x63, 0x93, 0xA4, 0x6E, 0xCA, 0x77, 0xF2, 0x88, 0x11, 0x5A, 0x2A, 0xEF, ++ 0xAC, 0xC1, 0x5F, 0x44, 0xD9, 0x28, 0x08, 0x8C, 0x5B, 0xC1, 0x9E, 0x08, 0x95, 0xF9, 0x61, 0x9A, 0x08, 0x92, 0x65, 0xB7, 0x6E, 0xEE, 0x26, 0x61, 0xD2, 0x0D, 0x1B, 0xFB, 0x84, 0x79, 0xC2, 0x1C, ++ 0x15, 0x3E, 0x1D, 0xCA, 0xB0, 0xF0, 0x04, 0xF8, 0x0A, 0x07, 0x2D, 0xE3, 0xE4, 0xAB, 0xB6, 0xF6, 0x99, 0xAE, 0xB8, 0x52, 0xF3, 0x5E, 0x3A, 0xFE, 0x0F, 0xA7, 0x99, 0x35, 0x5E, 0x6B, 0x7E, 0xC6, ++ 0xD6, 0x59, 0x20, 0xDC, 0xA5, 0x24, 0x8B, 0x45, 0x5B, 0x90, 0xE7, 0xD2, 0xE9, 0x85, 0x9B, 0x18, 0x30, 0x18, 0x65, 0x74, 0xA9, 0x5C, 0xB6, 0x2A, 0x0F, 0x07, 0x3C, 0xAB, 0x4A, 0xCF, 0x1A, 0x9D, ++ 0x52, 0xA0, 0xD1, 0xF1, 0x76, 0xFE, 0x50, 0x48, 0x77, 0x42, 0xC4, 0x7D, 0x7D, 0x9A, 0x82, 0xC7, 0xEB, 0xCF, 0x67, 0xAE, 0xBC, 0x8C, 0x77, 0xDF, 0xD0, 0x0E, 0x7C, 0xDC, 0xBD, 0xB6, 0x9D, 0x82, ++ 0x12, 0xD5, 0xD4, 0x56, 0x1E, 0x83, 0x1C, 0x1C, 0xEE, 0xC7, 0x57, 0x14, 0x91, 0x1B, 0xFE, 0xDA, 0xBB, 0x71, 0x4E, 0xDB, 0xEC, 0xD8, 0x6D, 0x3B, 0x5B, 0x65, 0xD1, 0x54, 0x28, 0x83, 0x33, 0xEC, ++ 0x57, 0x32, 0x7E, 0x2A, 0x27, 0xF2, 0xCD, 0xF1, 0x93, 0xA4, 0x6F, 0xF1, 0x1B, 0x6A, 0x19, 0xD3, 0xDC, 0x71, 0x12, 0x95, 0xB5, 0x08, 0xBF, 0x44, 0x3F, 0x02, 0xAC, 0x9E, 0xB0, 0x4F, 0x37, 0xB6, ++ 0x7A, 0x8E, 0xD5, 0x49, 0x3F, 0x41, 0xE9, 0x24, 0xF8, 0x48, 0x9F, 0xE2, 0x6A, 0xCA, 0xE5, 0xF6, 0xB0, 0x7B, 0x67, 0x68, 0x31, 0xE2, 0x71, 0xBC, 0xDE, 0x12, 0xC8, 0x0F, 0x65, 0xE8, 0xD0, 0x30, ++ 0x0D, 0x8F, 0xDE, 0xD5, 0xE9, 0xBF, 0x1A, 0x59, 0xC8, 0x8E, 0xD3, 0x89, 0x45, 0x37, 0x14, 0x51, 0xE1, 0x13, 0x54, 0xB3, 0x07, 0x40, 0x47, 0x61, 0x9B, 0x3A, 0x27, 0x66, 0x58, 0x41, 0x7A, 0xA1, ++ 0x75, 0x02, 0x67, 0x49, 0xA4, 0xE4, 0x61, 0xF0, 0x59, 0xAF, 0x85, 0xE2, 0x07, 0xF4, 0xD0, 0x21, 0xBB, 0x9C, 0x12, 0xFD, 0xF3, 0x02, 0x90, 0x79, 0x59, 0x72, 0x17, 0xAA, 0x39, 0x15, 0x20, 0x78, ++ 0x0A, 0x7C, 0x90, 0xC2, 0x32, 0x65, 0x91, 0x14, 0x39, 0x31, 0x84, 0x4F, 0x85, 0x6B, 0x08, 0x4A, 0xC1, 0x7A, 0xEB, 0xC5, 0x93, 0xAC, 0xE9, 0x32, 0xF0, 0xAD, 0x36, 0xE2, 0x13, 0x57, 0xCE, 0xFF, ++ 0xF3, 0x75, 0xCC, 0xC8, 0x43, 0x42, 0xB8, 0x61, 0x94, 0xA2, 0xBC, 0x77, 0x16, 0x5E, 0xDB, 0x9E, 0xFE, 0x35, 0x93, 0x51, 0xAD, 0x8E, 0x4B, 0xDD, 0x4C, 0xA6, 0xEC, 0xFA, 0x05, 0x20, 0xCC, 0x2F, ++ 0x46, 0xCF, 0x8A, 0xA1, 0x10, 0x9E, 0x62, 0x68, 0x2B, 0x37, 0xC7, 0x01, 0x42, 0x1F, 0xEE, 0x8F, 0xB5, 0x0A, 0x7D, 0x11, 0xB2, 0xF5, 0xA0, 0x50, 0x14, 0xED, 0x63, 0xBF, 0x91, 0x0C, 0xBB, 0x06, ++ 0xFA, 0x47, 0xF1, 0xD8, 0x49, 0xAF, 0x11, 0x86, 0xF9, 0x77, 0xD8, 0x07, 0x3D, 0x72, 0x78, 0x3C, 0x4E, 0xE3, 0xC1, 0x9F, 0xF9, 0x5F, 0x23, 0xFC, 0xBD, 0x98, 0x87, 0x9A, 0x46, 0x82, 0xA8, 0xCF, ++ 0xA7, 0x68, 0x7E, 0xA5, 0x20, 0xCE, 0x58, 0x7E, 0x9A, 0x3E, 0x8F, 0x68, 0x4E, 0x00, 0x09, 0x6A, 0xFE, 0x61, 0x7C, 0xEC, 0xFE, 0x0A, 0x6F, 0xDE, 0xB4, 0x5D, 0x49, 0x3E, 0x7E, 0x35, 0xCC, 0x25, ++ 0xB6, 0x44, 0xF9, 0xBD, 0xF4, 0xED, 0x10, 0x41, 0x76, 0xCB, 0x96, 0x1B, 0x0C, 0x95, 0x7F, 0x8F, 0x3C, 0xB4, 0x29, 0xFA, 0x14, 0x4D, 0x60, 0x6D, 0x2D, 0xFE, 0x27, 0xC0, 0x90, 0xA3, 0xC2, 0x26, ++ 0x9C, 0x84, 0xB5, 0xF4, 0x95, 0xC1, 0xC6, 0x6D, 0xD0, 0x79, 0x49, 0x27, 0x4D, 0x99, 0x49, 0x9B, 0x63, 0x3B, 0xFE, 0xA8, 0xF0, 0x44, 0x52, 0x1A, 0xB2, 0x56, 0xF6, 0xF6, 0x24, 0x6A, 0x0C, 0x0A, ++ 0xEA, 0x3A, 0xDE, 0xFD, 0x14, 0xC8, 0xB1, 0xBE, 0x92, 0xA2, 0x34, 0x7C, 0xD1, 0xFB, 0xEE, 0xAD, 0x71, 0x2C, 0xC0, 0xA8, 0xBE, 0x4C, 0xE0, 0xF4, 0x77, 0x9E, 0xAB, 0x56, 0xF7, 0x1D, 0x9A, 0x7B, ++ 0x3F, 0x4B, 0xA7, 0x25, 0x24, 0x34, 0xB9, 0x84, 0xDF, 0xE9, 0xD7, 0x59, 0x65, 0x45, 0x66, 0x5F, 0x2F, 0x1E, 0x51, 0x61, 0xC9, 0xDC, 0x9E, 0xA5, 0x89, 0xE3, 0x01, 0xC7, 0x50, 0xB7, 0x3E, 0x55, ++ 0x26, 0xEF, 0xE6, 0x5F, 0xA0, 0x79, 0x2A, 0xF2, 0xF6, 0x4C, 0xEF, 0xDA, 0x89, 0x1F, 0xB0, 0x81, 0x20, 0x37, 0xFD, 0x0A, 0x31, 0xE7, 0x60, 0x22, 0x83, 0xBE, 0x2B, 0x8D, 0xF6, 0xA7, 0xDB, 0x90, ++ 0xF3, 0x0F, 0x8B, 0x3B, 0x2D, 0x30, 0xC0, 0x9B, 0x90, 0x0F, 0xA4, 0x00, 0xFD, 0x1C, 0x4B, 0x42, 0x56, 0x3D, 0xF1, 0xEB, 0x8E, 0x39, 0xF9, 0x46, 0x85, 0x95, 0x11, 0x2C, 0x92, 0xD4, 0xA8, 0x43, ++ 0xEE, 0xE8, 0x70, 0x34, 0x3F, 0xC8, 0x9E, 0x57, 0xC6, 0xBA, 0xCC, 0x37, 0x0D, 0x01, 0x4A, 0x5E, 0x2A, 0xFE, 0xEF, 0x1C, 0x25, 0xEB, 0xA0, 0x80, 0xEC, 0x13, 0x4E, 0x85, 0x8C, 0xFD, 0x65, 0x4D, ++ 0x0E, 0x96, 0x14, 0x02, 0xD9, 0xA8, 0x07, 0xA9, 0x71, 0xCF, 0x59, 0x2F, 0x33, 0xD1, 0x8E, 0xB2, 0x21, 0x0A, 0x59, 0xE0, 0xFE, 0x94, 0x83, 0x18, 0xE6, 0x0E, 0x6D, 0x61, 0x8D, 0x2D, 0x04, 0x0C, ++ 0x77, 0x3C, 0xE3, 0x0F, 0x91, 0x64, 0xCC, 0xD4, 0x19, 0xF3, 0x25, 0xF2, 0xFA, 0x3D, 0xDE, 0x63, 0xF5, 0xDF, 0x54, 0x76, 0x42, 0x41, 0x25, 0xE4, 0xA9, 0x23, 0x7F, 0x18, 0xEC, 0x9B, 0x41, 0x09, ++ 0x9E, 0x89, 0x05, 0xC1, 0x73, 0xDC, 0x60, 0xDD, 0xB3, 0x6D, 0x18, 0x09, 0xC0, 0xF2, 0x2B, 0x3F, 0xA8, 0xB3, 0x9D, 0x84, 0x2E, 0x44, 0xFD, 0xEC, 0x4D, 0xAB, 0x65, 0x0E, 0x9E, 0x60, 0xE3, 0x1C, ++ 0x05, 0x8E, 0x8C, 0x86, 0x2F, 0x06, 0x9E, 0xD7, 0x00, 0x13, 0x15, 0x77, 0x3A, 0x51, 0x90, 0xC8, 0x64, 0xDC, 0x01, 0xAE, 0x44, 0x5C, 0x59, 0x03, 0xB1, 0x40, 0x07, 0x1A, 0xD7, 0x16, 0xD9, 0x34, ++ 0x3D, 0x78, 0x8A, 0x0D, 0x36, 0x4A, 0x8F, 0x64, 0x46, 0x5E, 0x68, 0x74, 0x86, 0x12, 0xE9, 0x41, 0xC2, 0xE1, 0xC8, 0xC2, 0x77, 0xCE, 0xF0, 0xF6, 0xCC, 0x08, 0xED, 0xFA, 0xA3, 0xCC, 0x4C, 0x0F, ++ 0x26, 0x21, 0x59, 0x9C, 0x3A, 0xF4, 0x06, 0xBC, 0x4C, 0xEA, 0x92, 0x33, 0x1B, 0xC6, 0x85, 0x32, 0x12, 0xB2, 0xB3, 0xB1, 0x52, 0x60, 0xFC, 0x54, 0x71, 0x95, 0xBE, 0xCB, 0x95, 0xB0, 0xA5, 0x47, ++ 0x8E, 0x0F, 0xE5, 0x50, 0xAC, 0xE0, 0xBC, 0x24, 0xE7, 0x2A, 0xC9, 0x83, 0x0F, 0xC7, 0xB4, 0x94, 0xFF, 0x40, 0x9B, 0x49, 0xF9, 0xB3, 0xCC, 0x00, 0x0B, 0x1B, 0x22, 0xE9, 0xFD, 0xDA, 0xBE, 0x17, ++ 0x68, 0xB8, 0xB1, 0x72, 0x53, 0xE1, 0xC1, 0x6D, 0x44, 0x3F, 0x51, 0xC5, 0xE3, 0x6B, 0xA2, 0x1D, 0xC0, 0x99, 0x62, 0xF8, 0x3F, 0xAF, 0xE8, 0x33, 0x9E, 0xD0, 0xAD, 0x32, 0x37, 0x88, 0xDB, 0xFA, ++ 0xCE, 0x7B, 0xBA, 0xD5, 0xE8, 0xEA, 0x20, 0x7D, 0x9C, 0x49, 0x5E, 0x57, 0x9A, 0xD7, 0xA7, 0xCB, 0xD3, 0x29, 0xA2, 0x5E, 0xCD, 0x11, 0xE0, 0x98, 0x21, 0x1D, 0x60, 0xEF, 0xB9, 0x01, 0x37, 0x3B, ++ 0x87, 0xDA, 0xBD, 0x64, 0xA0, 0xAF, 0xE0, 0xDC, 0x2C, 0xA6, 0x15, 0x98, 0xB7, 0xAD, 0x36, 0x70, 0x8B, 0x53, 0x80, 0x0B, 0xE4, 0x57, 0x47, 0x69, 0x82, 0xA3, 0xB9, 0x31, 0x57, 0x14, 0x90, 0x0C, ++ 0x93, 0x3A, 0x34, 0xB2, 0xAD, 0x9C, 0xBF, 0x16, 0x92, 0xBB, 0xDF, 0x3A, 0x6D, 0xC8, 0x72, 0x03, 0x42, 0x22, 0x89, 0xCD, 0xFD, 0xBC, 0x7D, 0xB7, 0x60, 0x93, 0x69, 0xF0, 0xF2, 0x6B, 0xEB, 0x7F, ++ 0x12, 0x8E, 0x64, 0x37, 0x13, 0x5C, 0x53, 0x58, 0x26, 0xFF, 0xCC, 0xFA, 0x65, 0xF4, 0xC9, 0xC2, 0x0D, 0xB3, 0xFC, 0xA3, 0x0B, 0xC5, 0xD3, 0xEA, 0x17, 0xA6, 0x93, 0xE5, 0x13, 0x54, 0x3F, 0x9C, ++ 0xEC, 0x71, 0x51, 0x2B, 0xB8, 0x75, 0x54, 0x9E, 0x3B, 0x5C, 0xB9, 0xF2, 0xF7, 0x7D, 0x2A, 0x80, 0xBF, 0xAC, 0xFC, 0xC4, 0x53, 0x50, 0x8D, 0xDB, 0x91, 0xAE, 0xF1, 0xEA, 0x69, 0xAD, 0x8A, 0x00, ++ 0x43, 0x99, 0xF5, 0xF6, 0x69, 0x4E, 0x6F, 0x8A, 0x96, 0xE7, 0x3D, 0x4B, 0xE5, 0x02, 0x70, 0x61, 0x73, 0x4F, 0x13, 0x2C, 0x9E, 0xD5, 0x27, 0xF3, 0xB3, 0xC3, 0xC5, 0xC8, 0x48, 0x94, 0x1C, 0x79, ++ 0xC7, 0x58, 0xCA, 0x48, 0x5E, 0xAD, 0x8F, 0x99, 0x4F, 0x9C, 0x31, 0x31, 0xA2, 0x7B, 0x1E, 0x1E, 0x93, 0xB6, 0xE0, 0x1C, 0xAA, 0x85, 0x04, 0xA0, 0x48, 0xEB, 0xC3, 0xE2, 0x7C, 0x3C, 0xF1, 0xFF, ++ 0x94, 0xA0, 0x58, 0x60, 0x76, 0x2D, 0x07, 0xE7, 0x90, 0x5E, 0x13, 0x17, 0x53, 0xF5, 0xBA, 0x4D, 0xA6, 0xE7, 0x94, 0xE4, 0x25, 0xEF, 0x41, 0x94, 0xA7, 0x60, 0xBA, 0xBA, 0xA5, 0xBE, 0xED, 0x8D, ++ 0x39, 0x9C, 0xB3, 0x80, 0x1C, 0x87, 0x27, 0xBC, 0x84, 0x7D, 0x2A, 0x77, 0x1E, 0x02, 0x6F, 0xF6, 0x13, 0x25, 0x5D, 0xD1, 0xA1, 0xF8, 0x8A, 0x1A, 0xA2, 0xC4, 0xA4, 0xBA, 0x48, 0xAE, 0x71, 0xEE, ++ 0xC2, 0x2B, 0x38, 0xE6, 0x84, 0x2F, 0xD3, 0x18, 0x41, 0x60, 0x06, 0xE8, 0xBA, 0x1A, 0x96, 0x73, 0xD1, 0x43, 0xEB, 0x80, 0x49, 0x1F, 0x98, 0xD6, 0x34, 0xB4, 0x6C, 0xAB, 0x31, 0x0E, 0xCC, 0x1F, ++ 0x70, 0x22, 0x97, 0xF6, 0xF0, 0xA8, 0x4A, 0x2B, 0xC2, 0xB7, 0x90, 0xAF, 0xEA, 0xAF, 0xE7, 0x3F, 0x06, 0x3B, 0x3A, 0xA4, 0xFF, 0xAE, 0xD3, 0x52, 0x67, 0xFD, 0x2B, 0x52, 0x69, 0x50, 0x3C, 0x88, ++ 0x83, 0xAD, 0x7D, 0x9E, 0x77, 0xD4, 0x67, 0xB3, 0xB3, 0x5B, 0xDC, 0xD5, 0xDD, 0xFC, 0x58, 0x02, 0x41, 0x78, 0x24, 0x6D, 0xF1, 0x24, 0x66, 0x23, 0x8F, 0x28, 0x6D, 0x85, 0xD9, 0x2A, 0x23, 0x55, ++ 0xC6, 0x3A, 0xF9, 0xA4, 0x59, 0x07, 0x7E, 0xAF, 0x28, 0xCD, 0xAD, 0x26, 0xCC, 0x71, 0xC6, 0xFF, 0x60, 0x7B, 0x50, 0xBC, 0xAB, 0x69, 0x3E, 0x09, 0x1F, 0x25, 0x09, 0x39, 0xC5, 0x23, 0x5C, 0x61, ++ 0x6B, 0x84, 0x01, 0x2C, 0x12, 0xFA, 0xAB, 0xE4, 0x0A, 0x66, 0x16, 0x84, 0x24, 0x01, 0x99, 0xB2, 0xDD, 0x9C, 0x86, 0x17, 0x9A, 0xBF, 0x8D, 0x3B, 0x96, 0xDE, 0xD1, 0x67, 0x50, 0x24, 0x6A, 0x8F, ++ 0x03, 0x30, 0x5E, 0xE0, 0x67, 0xAD, 0xF2, 0x2C, 0x39, 0xEC, 0xB1, 0xFA, 0xF8, 0x57, 0x8D, 0xED, 0x3A, 0x25, 0xE5, 0x44, 0x85, 0xA1, 0x0B, 0xC9, 0x8A, 0x82, 0x4D, 0xBD, 0xFC, 0x2F, 0x6B, 0x14, ++ 0x5F, 0x42, 0x16, 0xA2, 0x9D, 0xB5, 0xFA, 0x7A, 0x9C, 0x2B, 0x6D, 0x51, 0xCB, 0x37, 0x59, 0xC3, 0xC5, 0x89, 0x46, 0xDD, 0x2E, 0x64, 0x8A, 0x1F, 0x36, 0xD2, 0x0C, 0x09, 0xBC, 0x58, 0xBA, 0x91, ++ 0xE2, 0x57, 0x03, 0x63, 0x98, 0xB7, 0xD5, 0xDA, 0x10, 0x6E, 0x5C, 0x6B, 0xDE, 0x1F, 0xF1, 0x98, 0xB9, 0x5D, 0x12, 0xDE, 0xFD, 0xC5, 0x4A, 0x5B, 0x3D, 0xD5, 0x5A, 0xFF, 0x42, 0x00, 0xAA, 0x27, ++ 0xED, 0x5B, 0xCB, 0xD7, 0xFD, 0x6D, 0x6A, 0xD9, 0x1E, 0x15, 0x96, 0x53, 0x35, 0x2E, 0xDE, 0xE8, 0xF9, 0x60, 0xE4, 0xEB, 0x6F, 0x09, 0x42, 0xAF, 0x52, 0x51, 0xEF, 0x39, 0xC1, 0xAB, 0xBD, 0xC4, ++ 0x2D, 0x8B, 0xE0, 0xB8, 0x80, 0x06, 0x7A, 0x79, 0xCE, 0xB1, 0x69, 0x90, 0x1E, 0xA8, 0x14, 0x71, 0xC4, 0xDC, 0x78, 0x23, 0x32, 0xBA, 0xC6, 0x26, 0x40, 0xA2, 0x80, 0xDD, 0x9B, 0x32, 0x3C, 0xC5, ++ 0xC3, 0x93, 0xB2, 0xB3, 0x7F, 0xE8, 0x21, 0xBA, 0x45, 0xD5, 0xC0, 0x5B, 0xCF, 0xEB, 0x11, 0x75, 0xF7, 0xE5, 0xAE, 0x12, 0xE7, 0x7D, 0xCF, 0x92, 0xB5, 0xDC, 0xB7, 0xF4, 0x87, 0x52, 0xA7, 0x2E, ++ 0x6F, 0x6E, 0x25, 0x0A, 0x65, 0x27, 0xF5, 0xA6, 0xF3, 0x59, 0xEB, 0x4D, 0x1C, 0x69, 0xDD, 0x65, 0x1D, 0x89, 0xF3, 0xF2, 0x22, 0x9C, 0xEF, 0x12, 0xF5, 0x01, 0x2A, 0x96, 0x68, 0xD2, 0x60, 0xF7, ++ 0x79, 0x3C, 0x91, 0xA7, 0x62, 0x2E, 0x5E, 0xCC, 0x3B, 0x58, 0x21, 0xBA, 0x43, 0x9E, 0xCC, 0x75, 0x33, 0xDF, 0xB5, 0x32, 0xA2, 0xB6, 0x4A, 0x96, 0x0C, 0x4C, 0xA0, 0x43, 0x1B, 0x3D, 0x09, 0x57, ++ 0x3B, 0x0B, 0x63, 0x75, 0x74, 0x8A, 0x47, 0x5D, 0xD0, 0xDC, 0x92, 0x90, 0xCE, 0xCA, 0xFD, 0x05, 0x9D, 0xC0, 0x03, 0x8C, 0xD1, 0x29, 0x54, 0x68, 0xA4, 0xCE, 0x11, 0x8E, 0x8B, 0x5B, 0x03, 0x70, ++ 0x7C, 0x56, 0xB1, 0x4E, 0xDF, 0x9A, 0xF6, 0x21, 0x9E, 0xF7, 0x68, 0xDF, 0xCF, 0x3D, 0x45, 0x52, 0x84, 0x4C, 0x58, 0x54, 0x1C, 0xFA, 0x0D, 0x17, 0x5C, 0xF7, 0xEF, 0xBB, 0x5F, 0xA2, 0x81, 0x30, ++ 0xCB, 0x78, 0xD8, 0x21, 0x20, 0xAC, 0xB7, 0xB4, 0x03, 0xCC, 0x75, 0xB8, 0x1C, 0x3F, 0xF1, 0x24, 0x0D, 0xBE, 0xF6, 0xE7, 0xF1, 0xCB, 0xA8, 0x80, 0x7A, 0x5A, 0x21, 0x31, 0x0C, 0x29, 0x79, 0x5B, ++ 0x4E, 0x32, 0xCC, 0x4A, 0x49, 0xC4, 0x7F, 0xB5, 0x1B, 0xAC, 0xDD, 0x14, 0x3C, 0xD4, 0x95, 0xC0, 0xF5, 0xC1, 0x0D, 0xF9, 0xFE, 0x06, 0xBF, 0x22, 0x41, 0xBC, 0xEC, 0xEA, 0x21, 0x29, 0xD3, 0xDB, ++ 0xC5, 0x7B, 0xA1, 0x06, 0x8F, 0x43, 0x2D, 0xDF, 0x57, 0x24, 0x14, 0xAD, 0x6F, 0x12, 0xD6, 0x37, 0x10, 0x64, 0xFD, 0xEE, 0x0D, 0x5C, 0xCF, 0x97, 0x30, 0xBA, 0xD1, 0xBB, 0xB4, 0x74, 0x9C, 0x87, ++ 0x00, 0x7E, 0xB0, 0xBD, 0x66, 0x60, 0xC9, 0x94, 0xFF, 0xCC, 0x7F, 0xC7, 0xD7, 0x69, 0xAB, 0xF0, 0x16, 0x0B, 0xA6, 0xDF, 0x93, 0xB7, 0x19, 0xC7, 0x3B, 0x6D, 0xA6, 0xB5, 0xB1, 0x51, 0xDC, 0x44, ++ 0xA3, 0x9D, 0x54, 0x3A, 0xF0, 0x73, 0xD3, 0x74, 0xE0, 0x4B, 0x03, 0x3D, 0x1A, 0xFA, 0xB9, 0x59, 0x08, 0x2E, 0x5E, 0x02, 0xB2, 0x07, 0xA2, 0x55, 0x10, 0x5B, 0xB4, 0xD4, 0xC7, 0xE6, 0xB2, 0x5A, ++ 0x62, 0x65, 0x8C, 0x13, 0xCF, 0x91, 0x35, 0x1F, 0x50, 0xCC, 0x23, 0x74, 0x16, 0x41, 0x06, 0x67, 0xFA, 0xA8, 0x9D, 0xEC, 0x53, 0x8E, 0xB1, 0xAE, 0x2C, 0xBE, 0x55, 0x8D, 0xCC, 0xEE, 0xB5, 0xAA, ++ 0xE9, 0x08, 0xBD, 0x1E, 0xE7, 0x90, 0xA8, 0x43, 0xDB, 0x06, 0x73, 0x29, 0xC7, 0x05, 0x04, 0x5B, 0xBC, 0x0A, 0x7A, 0xCB, 0xA0, 0xA5, 0x1D, 0xB8, 0x39, 0xAA, 0xAF, 0xB6, 0xA3, 0x6F, 0x4E, 0xC1, ++ 0xC2, 0xD4, 0x3F, 0x5B, 0xF1, 0xAC, 0x55, 0xAA, 0x6E, 0x82, 0x0B, 0x26, 0xC4, 0x7C, 0x38, 0x06, 0x0C, 0x61, 0xB1, 0xE3, 0xA7, 0xB2, 0xCC, 0x26, 0x1D, 0x54, 0xC0, 0xB3, 0x4F, 0x5A, 0x25, 0x74, ++ 0xF5, 0x24, 0x3B, 0x2A, 0x08, 0x29, 0xBE, 0xBB, 0xA9, 0x93, 0x30, 0x11, 0x89, 0x7E, 0x98, 0x08, 0x69, 0xD6, 0xDD, 0x5A, 0xC7, 0xB3, 0x1A, 0x9B, 0xA9, 0xAA, 0x98, 0xA3, 0xEC, 0x20, 0x14, 0x5A, ++ 0x81, 0xB2, 0x7B, 0x33, 0xAB, 0x66, 0x62, 0xDB, 0x34, 0x87, 0xFC, 0xAA, 0x32, 0xBA, 0xFA, 0x6E, 0x1B, 0x28, 0x55, 0x02, 0x5D, 0x5F, 0xB5, 0xC8, 0x69, 0x67, 0x75, 0x20, 0x03, 0xBE, 0x2F, 0xD8, ++ 0xE2, 0x98, 0xB3, 0x73, 0xD1, 0x01, 0x7E, 0xD7, 0xD1, 0xAC, 0xCB, 0x6D, 0x31, 0x6F, 0x19, 0x40, 0x19, 0x76, 0xF2, 0x13, 0x38, 0x62, 0xAA, 0x3C, 0xC4, 0x82, 0x39, 0x0C, 0xE5, 0x5D, 0x1E, 0x63, ++ 0xEC, 0x4A, 0x40, 0xFE, 0x82, 0x6E, 0x62, 0x8D, 0x3E, 0x81, 0x1C, 0xDF, 0x57, 0x27, 0x70, 0x48, 0x0F, 0x20, 0x3A, 0x36, 0xA6, 0xFD, 0xAB, 0xD1, 0xD2, 0xCB, 0x6D, 0xE5, 0xD7, 0xC2, 0xA3, 0x2A, ++ 0xD4, 0x5B, 0xF3, 0x72, 0x5F, 0x59, 0x9D, 0x29, 0xD0, 0xF1, 0x34, 0x2E, 0x3B, 0x57, 0x98, 0x63, 0x3B, 0x6E, 0x72, 0xA4, 0x3F, 0x48, 0x33, 0xF2, 0x21, 0xEA, 0x9D, 0x90, 0x4B, 0x00, 0x2D, 0x8D, ++ 0x13, 0xF6, 0xE7, 0x44, 0x10, 0x05, 0xBD, 0x3D, 0xA8, 0x8B, 0x64, 0x9B, 0xEE, 0x65, 0xAC, 0x9F, 0xF6, 0xDB, 0x40, 0x7E, 0xED, 0x65, 0x3E, 0x18, 0x87, 0x35, 0xF5, 0xFF, 0xDB, 0xBC, 0x4A, 0x1E, ++ 0x2E, 0x08, 0x9C, 0x7B, 0xC4, 0x60, 0x6B, 0xCA, 0x32, 0x34, 0xF2, 0xD8, 0x9D, 0x40, 0x39, 0x55, 0xF4, 0x4A, 0x44, 0x4A, 0x42, 0xA2, 0x0D, 0xFE, 0xE5, 0xC4, 0x9C, 0x84, 0x42, 0x5E, 0x1A, 0x17, ++ 0x2C, 0xA4, 0x44, 0x82, 0xFE, 0xBB, 0x45, 0x16, 0xDD, 0x4B, 0x64, 0x9C, 0x6F, 0x31, 0x5A, 0x7E, 0x2D, 0xDB, 0xE1, 0x94, 0xFE, 0xA2, 0xA9, 0x17, 0x28, 0xE1, 0xDF, 0x45, 0x11, 0x08, 0xE2, 0x10, ++ 0x56, 0xA7, 0xBD, 0x3D, 0x45, 0x5B, 0x8A, 0xA8, 0xB7, 0x11, 0x1C, 0x26, 0x79, 0x7C, 0xB7, 0xBA, 0x0C, 0x24, 0x60, 0x8E, 0x93, 0xDC, 0xFC, 0x31, 0x41, 0x5D, 0x98, 0xCB, 0xD1, 0xFE, 0x1A, 0x20, ++ 0x7C, 0x81, 0xCD, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x10, 0x17, 0x1E, 0x24, ++ }, ++ }, ++ { ++ .name = "Dilithium Round 3, Level 5 (8-7) KAT 0 (PKCS#8/SPKI)", ++ .version = 0, ++ .keyform = 0, ++ .rho_len = 0, ++ .seed_len = 0, ++ .tr_len = 0, ++ .s1_len = 0, ++ .s2_len = 0, ++ .t0_len = 0, ++ .t1_len = 0, ++ .pkcs8_len = 7492, ++ .pkcs8 = { ++ 0x30, 0x82, 0x1D, 0x40, 0x02, 0x01, 0x00, 0x30, 0x0F, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0B, 0x07, 0x08, 0x07, 0x05, 0x00, 0x04, 0x82, 0x1D, 0x28, 0x30, 0x82, 0x1D, 0x24, ++ 0x02, 0x01, 0x00, 0x03, 0x21, 0x00, 0x1C, 0x0E, 0xE1, 0x11, 0x1B, 0x08, 0x00, 0x3F, 0x28, 0xE6, 0x5E, 0x8B, 0x3B, 0xDE, 0xB0, 0x37, 0xCF, 0x8F, 0x22, 0x1D, 0xFC, 0xDA, 0xF5, 0x95, 0x0E, 0xDB, ++ 0x38, 0xD5, 0x06, 0xD8, 0x5B, 0xEF, 0x03, 0x21, 0x00, 0x39, 0x4D, 0x16, 0x95, 0x05, 0x9D, 0xFF, 0x40, 0xAE, 0x25, 0x6C, 0x5D, 0x5E, 0xDA, 0xBF, 0xB6, 0x9F, 0x5F, 0x40, 0xF3, 0x7A, 0x58, 0x8F, ++ 0x50, 0x53, 0x2C, 0xA4, 0x08, 0xA8, 0x16, 0x8A, 0xB1, 0x03, 0x21, 0x00, 0x85, 0xF6, 0x84, 0xAE, 0xB4, 0x01, 0xB9, 0xAA, 0xAF, 0x81, 0x2A, 0x00, 0xE1, 0x24, 0xFF, 0x56, 0xFE, 0xE5, 0x1B, 0xA7, ++ 0xC1, 0x12, 0x82, 0x61, 0x7F, 0x05, 0x72, 0xCC, 0x79, 0x1D, 0xC8, 0x1C, 0x03, 0x82, 0x02, 0xA1, 0x00, 0xC0, 0xA6, 0x71, 0x1A, 0x96, 0x6C, 0x11, 0x31, 0x2A, 0xD9, 0xA8, 0x21, 0xD8, 0x08, 0x65, ++ 0x42, 0xA6, 0x00, 0xA4, 0xB4, 0x2C, 0x19, 0x40, 0x72, 0x02, 0x42, 0x62, 0x81, 0x06, 0x21, 0x0A, 0x43, 0x85, 0x23, 0x31, 0x70, 0x93, 0x08, 0x10, 0x8B, 0x18, 0x8C, 0x02, 0x24, 0x92, 0xC1, 0xB2, ++ 0x84, 0x12, 0xC4, 0x21, 0x8B, 0x04, 0x21, 0x81, 0xC8, 0x61, 0x02, 0x48, 0x05, 0x9C, 0x92, 0x01, 0xC0, 0x34, 0x88, 0x19, 0x32, 0x6C, 0x58, 0x20, 0x46, 0x89, 0x18, 0x68, 0xA2, 0xC2, 0x8D, 0x82, ++ 0x34, 0x6A, 0x1C, 0x09, 0x42, 0x00, 0xA2, 0x8C, 0xE3, 0xA6, 0x49, 0x1C, 0x11, 0x2C, 0xC2, 0x48, 0x12, 0xE0, 0x90, 0x21, 0x91, 0x98, 0x50, 0x62, 0xC0, 0x84, 0x62, 0x24, 0x51, 0xCA, 0x06, 0x2C, ++ 0x64, 0x24, 0x0E, 0x1B, 0xB3, 0x31, 0x24, 0x96, 0x85, 0x4B, 0x46, 0x06, 0xDB, 0x26, 0x68, 0xC3, 0x82, 0x68, 0x44, 0x10, 0x46, 0xC9, 0xB6, 0x21, 0x14, 0x04, 0x81, 0x14, 0x45, 0x50, 0x24, 0x42, ++ 0x08, 0x44, 0x22, 0x71, 0x0B, 0x92, 0x45, 0x9A, 0xA0, 0x81, 0x1A, 0x91, 0x70, 0x9C, 0x24, 0x10, 0x03, 0x95, 0x70, 0x04, 0xC5, 0x04, 0xC8, 0x26, 0x92, 0xD2, 0x92, 0x00, 0xC0, 0xB2, 0x60, 0xC0, ++ 0xA2, 0x68, 0x09, 0x19, 0x0A, 0xA2, 0x30, 0x0E, 0x18, 0x89, 0x69, 0xE0, 0x00, 0x8D, 0xD8, 0x48, 0x62, 0xDA, 0x14, 0x71, 0x20, 0x18, 0x05, 0x19, 0x07, 0x44, 0x04, 0x12, 0x40, 0x9B, 0x12, 0x40, ++ 0x11, 0x80, 0x10, 0xD1, 0x42, 0x81, 0x99, 0x28, 0x50, 0x8B, 0x10, 0x91, 0x02, 0x24, 0x64, 0xA0, 0x20, 0x6D, 0x12, 0x46, 0x21, 0x1C, 0x83, 0x8C, 0x1B, 0x47, 0x69, 0x01, 0x06, 0x90, 0xCC, 0x06, ++ 0x24, 0x81, 0x84, 0x69, 0x20, 0x98, 0x2C, 0x24, 0x12, 0x05, 0x21, 0xB1, 0x50, 0x41, 0x36, 0x02, 0x98, 0x44, 0x6E, 0xD1, 0xA6, 0x31, 0x11, 0x05, 0x6A, 0xD3, 0xA8, 0x40, 0xCA, 0xA8, 0x4C, 0x62, ++ 0xB0, 0x00, 0x03, 0x13, 0x4A, 0x53, 0x34, 0x46, 0x14, 0x19, 0x40, 0x04, 0xC5, 0x4C, 0xE3, 0x06, 0x69, 0x5A, 0xB0, 0x89, 0x61, 0x16, 0x8E, 0xCB, 0x10, 0x80, 0x8B, 0x16, 0x8E, 0xD9, 0x90, 0x64, ++ 0x0B, 0x94, 0x60, 0x24, 0x83, 0x85, 0x1A, 0xB3, 0x04, 0x54, 0x26, 0x22, 0x51, 0xB8, 0x25, 0x1C, 0x42, 0x4A, 0x0B, 0x81, 0x48, 0x42, 0xC4, 0x44, 0x5A, 0x10, 0x20, 0x23, 0x80, 0x84, 0x09, 0xB7, ++ 0x25, 0x4C, 0xC6, 0x48, 0x14, 0x85, 0x4D, 0x19, 0x38, 0x0E, 0x60, 0x16, 0x51, 0xD8, 0x32, 0x6A, 0x0A, 0x91, 0x89, 0x08, 0xC1, 0x70, 0xE0, 0x96, 0x4D, 0x18, 0x46, 0x8C, 0x01, 0x32, 0x8D, 0x91, ++ 0xC4, 0x05, 0x4A, 0x00, 0x61, 0x23, 0x08, 0x68, 0xA2, 0x10, 0x42, 0x10, 0xA8, 0x61, 0x13, 0x06, 0x21, 0x8A, 0x24, 0x8E, 0x62, 0x06, 0x89, 0xC9, 0xB2, 0x45, 0x08, 0x27, 0x84, 0x51, 0x20, 0x0D, ++ 0x98, 0x04, 0x66, 0xDC, 0x42, 0x05, 0x44, 0x24, 0x85, 0x24, 0x26, 0x28, 0x22, 0x21, 0x61, 0x20, 0x16, 0x09, 0x0B, 0xA6, 0x2C, 0x0A, 0x11, 0x44, 0xE0, 0x92, 0x81, 0x58, 0x48, 0x0D, 0x42, 0x22, ++ 0x10, 0xA0, 0x06, 0x09, 0x8B, 0x24, 0x6E, 0x81, 0x28, 0x8C, 0xC0, 0x24, 0x80, 0x90, 0x30, 0x8D, 0x84, 0x36, 0x40, 0x4C, 0xA6, 0x84, 0x50, 0x04, 0x24, 0x94, 0xB6, 0x8D, 0xA2, 0x92, 0x6D, 0x18, ++ 0xB3, 0x44, 0xA0, 0x00, 0x85, 0xE3, 0xB8, 0x05, 0x14, 0x05, 0x04, 0xA4, 0xC2, 0x90, 0x84, 0x22, 0x81, 0xC3, 0x26, 0x2D, 0x0B, 0x20, 0x66, 0xCC, 0x90, 0x31, 0x98, 0x38, 0x28, 0x10, 0x16, 0x6C, ++ 0xC1, 0x34, 0x45, 0xC0, 0x10, 0x22, 0x24, 0xC6, 0x88, 0x03, 0x46, 0x32, 0xD8, 0x40, 0x90, 0x1C, 0x20, 0x68, 0x04, 0x15, 0x28, 0x9A, 0x18, 0x81, 0x44, 0x98, 0x8D, 0x9C, 0x20, 0x6E, 0x9C, 0x30, ++ 0x2C, 0xC1, 0xB8, 0x20, 0x61, 0x42, 0x21, 0x08, 0x03, 0x10, 0xA0, 0xC2, 0x8C, 0x58, 0x12, 0x85, 0x53, 0x20, 0x4C, 0x03, 0x30, 0x81, 0x4C, 0xA4, 0x8D, 0x44, 0xC0, 0x8D, 0x51, 0x40, 0x4C, 0x1C, ++ 0xA7, 0x2C, 0x44, 0x08, 0x65, 0xA0, 0x38, 0x40, 0xDA, 0x20, 0x80, 0x81, 0x06, 0x85, 0x8C, 0x26, 0x0D, 0xE2, 0xA8, 0x8C, 0x9C, 0x44, 0x11, 0x59, 0x42, 0x28, 0xC4, 0x26, 0x04, 0x44, 0x14, 0x26, ++ 0xA1, 0x42, 0x64, 0x08, 0xC0, 0x85, 0x11, 0x01, 0x86, 0x9B, 0x48, 0x31, 0x99, 0xB2, 0x0C, 0x80, 0x46, 0x44, 0x59, 0xA8, 0x8C, 0x00, 0x42, 0x08, 0x98, 0x82, 0x90, 0x0A, 0xB5, 0x45, 0x62, 0x24, ++ 0x48, 0x12, 0x96, 0x05, 0x44, 0x12, 0x46, 0x00, 0xC8, 0x88, 0x13, 0xA0, 0x61, 0xE1, 0x28, 0x4D, 0x0A, 0xB9, 0x91, 0x4B, 0x96, 0x20, 0x99, 0xB8, 0x44, 0x00, 0x31, 0x4E, 0x98, 0x12, 0x85, 0x00, ++ 0xB6, 0x01, 0x83, 0xA0, 0x0D, 0x14, 0x15, 0x0E, 0x18, 0x81, 0x10, 0x19, 0x01, 0x22, 0x4A, 0x06, 0x68, 0x03, 0x82, 0x03, 0x01, 0x00, 0x1A, 0x49, 0x8D, 0xE1, 0xA2, 0x84, 0x11, 0xC6, 0x31, 0x21, ++ 0x26, 0x25, 0x91, 0xA0, 0x6D, 0x03, 0x05, 0x24, 0xA1, 0xB6, 0x08, 0x94, 0x44, 0x72, 0x43, 0x34, 0x12, 0x5B, 0xB4, 0x20, 0x41, 0xB6, 0x50, 0xD0, 0x88, 0x8D, 0x0B, 0x07, 0x4D, 0x1C, 0x94, 0x64, ++ 0x4C, 0x20, 0x8E, 0x8B, 0x88, 0x08, 0xE0, 0x30, 0x09, 0x44, 0x20, 0x05, 0x49, 0x86, 0x4D, 0x03, 0x13, 0x4E, 0x19, 0xC9, 0x84, 0x09, 0x37, 0x61, 0x1A, 0x43, 0x68, 0x4A, 0x80, 0x90, 0x02, 0x04, ++ 0x31, 0x1C, 0x17, 0x42, 0x18, 0x40, 0x80, 0xC8, 0x30, 0x8E, 0xE1, 0xA2, 0x41, 0xC3, 0x34, 0x04, 0xA3, 0x28, 0x22, 0x51, 0x24, 0x71, 0x82, 0x84, 0x01, 0x1B, 0xC0, 0x64, 0x23, 0x47, 0x72, 0x82, ++ 0x14, 0x66, 0x5B, 0x38, 0x68, 0xE1, 0xC6, 0x29, 0x9B, 0x90, 0x40, 0x60, 0x38, 0x86, 0x83, 0xA0, 0x40, 0x84, 0x20, 0x04, 0x4C, 0x94, 0x01, 0x10, 0x25, 0x8D, 0x82, 0x02, 0x4D, 0x9A, 0xB2, 0x69, ++ 0x20, 0x15, 0x10, 0x60, 0x46, 0x2D, 0xC2, 0x14, 0x2E, 0x0C, 0xA8, 0x2C, 0x54, 0x16, 0x22, 0x03, 0x46, 0x89, 0x92, 0x06, 0x60, 0x08, 0x07, 0x82, 0x0B, 0x47, 0x44, 0x48, 0x98, 0x09, 0x09, 0x43, ++ 0x0E, 0xE4, 0x32, 0x0A, 0x1A, 0xC0, 0x65, 0xC0, 0xA4, 0x21, 0x44, 0xB2, 0x91, 0x58, 0xC6, 0x04, 0x11, 0x45, 0x20, 0xC4, 0xA4, 0x21, 0x02, 0xA0, 0x70, 0x21, 0x22, 0x26, 0x23, 0xB2, 0x68, 0x4B, ++ 0x08, 0x40, 0x01, 0x03, 0x91, 0x8B, 0x34, 0x81, 0x1A, 0x04, 0x04, 0x0C, 0xB0, 0x05, 0xC2, 0x92, 0x69, 0x90, 0x14, 0x68, 0x04, 0x46, 0x49, 0x14, 0x83, 0x49, 0xA2, 0x34, 0x89, 0x19, 0xC7, 0x28, ++ 0x94, 0x44, 0x71, 0x00, 0xC9, 0x49, 0x58, 0x38, 0x72, 0x02, 0x02, 0x90, 0x42, 0xC6, 0x4C, 0x0C, 0x17, 0x32, 0x48, 0xC6, 0x8C, 0x59, 0x28, 0x31, 0x09, 0xB7, 0x28, 0xCB, 0x48, 0x0E, 0x9A, 0x22, ++ 0x85, 0x1C, 0xB9, 0x11, 0xE3, 0xC6, 0x30, 0xC3, 0x48, 0x28, 0xCC, 0xB8, 0x28, 0x03, 0xC8, 0x08, 0xA4, 0xB6, 0x04, 0xD0, 0x18, 0x8C, 0x60, 0x18, 0x72, 0xD0, 0x20, 0x92, 0x82, 0x02, 0x2E, 0x59, ++ 0x18, 0x89, 0x08, 0x19, 0x32, 0xC9, 0x06, 0x52, 0x60, 0x90, 0x8C, 0x09, 0x80, 0x29, 0xA4, 0xB4, 0x8C, 0x8C, 0x34, 0x82, 0x08, 0x42, 0x10, 0x02, 0x00, 0x08, 0x13, 0x01, 0x50, 0x83, 0xB6, 0x08, ++ 0x41, 0x94, 0x4D, 0x1B, 0x49, 0x6C, 0x19, 0x39, 0x11, 0xCB, 0x32, 0x41, 0x02, 0xC0, 0x65, 0x48, 0x88, 0x91, 0x9B, 0x98, 0x61, 0x08, 0xB5, 0x04, 0x49, 0xB4, 0x45, 0xD3, 0x30, 0x01, 0x98, 0x04, ++ 0x6D, 0x53, 0x00, 0x89, 0x42, 0x32, 0x60, 0x8C, 0xB0, 0x90, 0x64, 0x88, 0x68, 0xD4, 0x32, 0x45, 0x48, 0x14, 0x71, 0x14, 0x98, 0x05, 0x81, 0x00, 0x22, 0xDB, 0x44, 0x69, 0xD9, 0x24, 0x89, 0x11, ++ 0x41, 0x12, 0x09, 0x19, 0x50, 0x92, 0xA0, 0x84, 0xC0, 0x34, 0x22, 0x4A, 0x24, 0x10, 0xDA, 0xC8, 0x09, 0xD2, 0xA8, 0x0D, 0x22, 0x85, 0x21, 0x8B, 0xC8, 0x90, 0xC1, 0x00, 0x66, 0x5C, 0xC0, 0x25, ++ 0x99, 0xA4, 0x61, 0x1A, 0xA4, 0x11, 0x0A, 0x24, 0x28, 0x5B, 0xC4, 0x48, 0x13, 0x14, 0x89, 0x63, 0x92, 0x61, 0x20, 0x30, 0x0C, 0x40, 0x02, 0x25, 0x21, 0x88, 0x28, 0x24, 0x01, 0x8C, 0x10, 0x81, ++ 0x6D, 0x4C, 0x42, 0x49, 0x01, 0x22, 0x2D, 0xC1, 0x96, 0x0C, 0x08, 0x48, 0x90, 0x01, 0xC1, 0x30, 0x23, 0xC1, 0x89, 0xA1, 0xC4, 0x64, 0x12, 0x97, 0x09, 0xCC, 0x90, 0x91, 0x60, 0x20, 0x66, 0x1B, ++ 0x96, 0x48, 0x82, 0xA8, 0x71, 0x91, 0xC0, 0x65, 0xDB, 0xC2, 0x01, 0x84, 0x36, 0x0A, 0x09, 0x24, 0x29, 0x52, 0x10, 0x4E, 0xDB, 0x24, 0x0A, 0x61, 0x02, 0x10, 0x20, 0x38, 0x25, 0x98, 0x34, 0x60, ++ 0x82, 0x24, 0x30, 0xC4, 0x12, 0x49, 0xC0, 0xA2, 0x05, 0x0C, 0x08, 0x85, 0x93, 0x28, 0x09, 0x63, 0xB2, 0x05, 0x23, 0x96, 0x20, 0x42, 0x12, 0x0D, 0xD1, 0xC0, 0x10, 0x08, 0xC5, 0x40, 0xC1, 0x82, ++ 0x65, 0x1B, 0x15, 0x92, 0xA4, 0x14, 0x51, 0x84, 0x04, 0x26, 0x53, 0x42, 0x52, 0x24, 0x23, 0x6D, 0x9C, 0x28, 0x4E, 0x50, 0x14, 0x05, 0x8C, 0x20, 0x80, 0x24, 0x26, 0x65, 0x61, 0x44, 0x4C, 0x02, ++ 0x11, 0x20, 0xC8, 0xC0, 0x4C, 0x18, 0xA0, 0x0D, 0x00, 0x38, 0x70, 0x99, 0x16, 0x12, 0xA1, 0x16, 0x40, 0xC4, 0x18, 0x45, 0x09, 0x93, 0x88, 0x4C, 0x82, 0x21, 0xCB, 0xB2, 0x81, 0x21, 0x26, 0x61, ++ 0xD1, 0xA8, 0x24, 0x41, 0x30, 0x84, 0x08, 0x80, 0x71, 0x00, 0xC6, 0x20, 0x52, 0x42, 0x92, 0x89, 0x24, 0x12, 0xA4, 0x26, 0x89, 0xE3, 0xB0, 0x88, 0x21, 0x98, 0x8C, 0x11, 0x96, 0x2C, 0xE1, 0x96, ++ 0x20, 0x51, 0xC2, 0x81, 0x20, 0x91, 0x80, 0x94, 0x16, 0x6E, 0x14, 0x94, 0x60, 0x20, 0xC9, 0x45, 0x9B, 0x22, 0x45, 0xA2, 0x38, 0x20, 0xC0, 0x36, 0x08, 0x60, 0x90, 0x8D, 0x41, 0x06, 0x02, 0x5B, ++ 0x06, 0x6E, 0xE1, 0x40, 0x0A, 0x89, 0x34, 0x6C, 0x1A, 0xB2, 0x69, 0xA4, 0x16, 0x10, 0x03, 0x33, 0x0E, 0x1A, 0x42, 0x28, 0x03, 0x19, 0x6E, 0x11, 0x44, 0x84, 0x0B, 0x24, 0x4A, 0x1C, 0x16, 0x6A, ++ 0x19, 0x98, 0x40, 0x03, 0xA2, 0x85, 0x41, 0xC0, 0x8C, 0xD2, 0x22, 0x61, 0x0C, 0x82, 0x10, 0x5A, 0xB0, 0x0D, 0x21, 0x14, 0x72, 0x5A, 0x82, 0x80, 0x02, 0x86, 0x10, 0x0C, 0x27, 0x26, 0x5C, 0x48, ++ 0x6E, 0xC9, 0x40, 0x6C, 0x1B, 0x49, 0x04, 0xE4, 0xB8, 0x49, 0xDB, 0x32, 0x8A, 0x9C, 0x24, 0x2C, 0x40, 0x38, 0x80, 0x22, 0xA9, 0x45, 0x03, 0x82, 0x0D, 0x01, 0x00, 0x12, 0x29, 0xA4, 0xE6, 0x5E, ++ 0xD3, 0x1C, 0x79, 0x3E, 0xCB, 0x5B, 0x89, 0xC5, 0x5D, 0xC3, 0x33, 0xA2, 0x77, 0xBF, 0x5C, 0x41, 0x28, 0xA2, 0x14, 0x01, 0xAF, 0xA8, 0xD4, 0x28, 0xC8, 0x21, 0xE9, 0x7A, 0xEA, 0x05, 0xB3, 0xAD, ++ 0x29, 0x23, 0xBD, 0x97, 0x10, 0x87, 0x1C, 0xE8, 0xB3, 0xB1, 0x1A, 0x71, 0x1C, 0x9A, 0xAC, 0xBA, 0x10, 0x8C, 0xAF, 0x43, 0xA1, 0x72, 0xD6, 0x59, 0x94, 0x01, 0xDB, 0x89, 0x68, 0x1D, 0x0B, 0x87, ++ 0x4E, 0xC3, 0x57, 0xA5, 0x29, 0x5C, 0x0A, 0x08, 0xD5, 0x89, 0xC4, 0x53, 0x9F, 0x9C, 0x59, 0xF3, 0x3F, 0x06, 0x44, 0x64, 0x41, 0x20, 0x49, 0x84, 0xE1, 0xF9, 0x87, 0x3C, 0x1F, 0x97, 0x75, 0xB9, ++ 0x7E, 0xD4, 0x00, 0xC9, 0x98, 0xB0, 0x51, 0x62, 0xB6, 0x18, 0x98, 0x61, 0xF2, 0x8D, 0xAE, 0x36, 0xC2, 0x13, 0x37, 0x65, 0x71, 0x11, 0x76, 0xCA, 0xAF, 0x5A, 0x1D, 0xCB, 0x2A, 0x0E, 0x22, 0x3A, ++ 0x5F, 0x07, 0x9B, 0x07, 0x41, 0xA5, 0xE6, 0xD5, 0x10, 0xE5, 0x87, 0x32, 0xDC, 0x03, 0x59, 0xD7, 0x9A, 0x77, 0x41, 0xA3, 0x79, 0x1C, 0xA6, 0x50, 0x4F, 0x07, 0xCA, 0x8A, 0x2C, 0x03, 0x12, 0x71, ++ 0x18, 0x45, 0x20, 0xEB, 0x76, 0xA0, 0x0B, 0x9B, 0x46, 0x26, 0xDB, 0x37, 0x34, 0x1C, 0x71, 0x80, 0x65, 0xED, 0x95, 0xFE, 0x4C, 0xB0, 0x54, 0xBF, 0xE7, 0x1E, 0x80, 0x26, 0x0D, 0x21, 0x90, 0x7B, ++ 0x9B, 0xFA, 0xEC, 0x86, 0xAC, 0x83, 0xA4, 0x85, 0x63, 0xC0, 0xB9, 0xB2, 0xEF, 0x4B, 0x9B, 0x4E, 0xCB, 0xCB, 0x2F, 0x12, 0x91, 0x98, 0x4E, 0x89, 0xE8, 0x4C, 0x55, 0x69, 0x06, 0x47, 0xE2, 0x65, ++ 0x47, 0xD7, 0x3E, 0x4C, 0xB7, 0xF0, 0xE0, 0x6E, 0xFF, 0xC3, 0xC4, 0x79, 0xE2, 0x56, 0x8E, 0x74, 0x64, 0xEA, 0xBF, 0x1D, 0x1C, 0x4E, 0xFE, 0x21, 0x11, 0x12, 0xE6, 0x2B, 0xEA, 0x8B, 0x85, 0x5F, ++ 0x50, 0xD7, 0x16, 0x51, 0x32, 0x9C, 0x00, 0xEF, 0x61, 0x9F, 0x53, 0x7E, 0x45, 0x4B, 0x09, 0x5A, 0x9D, 0xF6, 0xA8, 0x59, 0x0E, 0x5B, 0xBA, 0xA1, 0x5C, 0x9E, 0x64, 0xE7, 0x01, 0xE3, 0x74, 0x69, ++ 0x74, 0x94, 0x62, 0xA2, 0x11, 0x95, 0x41, 0xE7, 0x55, 0x49, 0xD0, 0x56, 0xA2, 0x5B, 0xBC, 0xEE, 0x11, 0xCD, 0x9F, 0xC6, 0x72, 0x42, 0x2A, 0xD2, 0xAE, 0x97, 0x91, 0x3D, 0x30, 0xBE, 0x3C, 0xD8, ++ 0x5F, 0x58, 0xCF, 0xA9, 0x04, 0xF4, 0x43, 0xAC, 0x3A, 0x8D, 0xFD, 0xBC, 0x2C, 0xC9, 0xC8, 0xC3, 0x9B, 0x24, 0x4E, 0xE7, 0xE0, 0xD9, 0x5B, 0xEC, 0x69, 0x27, 0xA2, 0xB0, 0xB9, 0x4E, 0x97, 0x3F, ++ 0x98, 0x12, 0x24, 0x46, 0x43, 0x14, 0x6E, 0x19, 0x01, 0x3B, 0x7F, 0xE1, 0x71, 0x14, 0xA0, 0xF3, 0x9F, 0x92, 0x28, 0x6B, 0xE0, 0xF0, 0xEE, 0x39, 0x6F, 0xB7, 0x4C, 0x76, 0xC9, 0x10, 0x04, 0xB8, ++ 0x27, 0xD2, 0x18, 0x95, 0x1C, 0x77, 0xBD, 0xB8, 0x15, 0x90, 0xAE, 0xDF, 0xEA, 0x9E, 0x62, 0xBE, 0x0F, 0x22, 0xAF, 0xF5, 0x5E, 0x36, 0xAB, 0x57, 0x2D, 0xF1, 0x3A, 0xB9, 0xF5, 0xEA, 0xFC, 0xBC, ++ 0x34, 0xDF, 0x26, 0x6F, 0xE1, 0x60, 0xC6, 0xB6, 0x35, 0xB0, 0xC3, 0xB6, 0x3C, 0x89, 0x29, 0x20, 0x18, 0x5F, 0x11, 0x2B, 0x96, 0x99, 0x8B, 0x5B, 0x5B, 0xB9, 0x73, 0xB3, 0x90, 0x08, 0xB2, 0xF0, ++ 0x43, 0x40, 0x35, 0xD4, 0x3B, 0xD2, 0xE4, 0x9F, 0x2C, 0x17, 0x45, 0x20, 0xD3, 0xA8, 0x98, 0x54, 0xCD, 0x82, 0x50, 0xD6, 0x20, 0x0A, 0x1E, 0xB5, 0x10, 0x79, 0x22, 0x46, 0x56, 0xD0, 0xB3, 0x34, ++ 0xCE, 0xE3, 0x43, 0x0B, 0x87, 0xE1, 0xFF, 0x90, 0x4D, 0x10, 0x34, 0xC2, 0xD8, 0xA7, 0x04, 0x7B, 0x2D, 0x22, 0x56, 0x33, 0x19, 0x04, 0x10, 0x01, 0x2C, 0x16, 0x1C, 0x76, 0x8C, 0x1F, 0xF8, 0xFC, ++ 0x17, 0x9A, 0x44, 0x68, 0x64, 0xDF, 0x93, 0xE0, 0x9D, 0x1E, 0x6C, 0x29, 0x48, 0x7C, 0xAB, 0x04, 0x4E, 0xF8, 0x68, 0xD4, 0x31, 0xB1, 0x76, 0x31, 0x84, 0xAD, 0xCB, 0x39, 0x51, 0x6D, 0xD1, 0x27, ++ 0x6B, 0xD8, 0x41, 0xEC, 0x49, 0x2A, 0x84, 0x51, 0x77, 0x4E, 0xDA, 0x10, 0x6E, 0x73, 0x21, 0xED, 0x5A, 0x62, 0x25, 0xC3, 0x53, 0x24, 0xC5, 0x10, 0x66, 0x3B, 0x9B, 0xEA, 0x05, 0xF1, 0xDB, 0xC8, ++ 0xD5, 0xDB, 0x69, 0xA7, 0x7E, 0xCE, 0x3E, 0x42, 0x65, 0xC5, 0xE8, 0x10, 0x69, 0x86, 0x45, 0x80, 0xB5, 0x28, 0xCC, 0x2C, 0xBB, 0xFB, 0xDE, 0x62, 0x5A, 0xF2, 0xC1, 0xC5, 0xCB, 0x06, 0xDD, 0x80, ++ 0x58, 0x54, 0x04, 0x96, 0x4D, 0x21, 0x11, 0x4B, 0x8B, 0x13, 0xCA, 0xFB, 0x6D, 0xBE, 0x1B, 0x42, 0x8E, 0xBC, 0x87, 0x17, 0xCC, 0xD1, 0x1B, 0xFB, 0x34, 0x72, 0x60, 0xAA, 0x70, 0x1B, 0xF2, 0x28, ++ 0x35, 0xB3, 0xF1, 0x06, 0x2E, 0xAD, 0x36, 0xAC, 0xB9, 0x6D, 0x74, 0x96, 0xF7, 0x2A, 0xA5, 0xFF, 0x1A, 0x13, 0x04, 0xBC, 0x02, 0xE3, 0x58, 0xE6, 0x0B, 0x1C, 0x82, 0x30, 0xBF, 0x8F, 0xFA, 0xFD, ++ 0x36, 0xE0, 0xF6, 0xB2, 0xE3, 0xD8, 0x58, 0x2F, 0xD3, 0xA4, 0x38, 0x11, 0xAC, 0x24, 0xD0, 0x60, 0x08, 0x10, 0x35, 0x42, 0x87, 0x8C, 0xB5, 0xCE, 0x99, 0xF8, 0x92, 0x0C, 0xC8, 0x02, 0xDA, 0x4E, ++ 0xD2, 0x18, 0x39, 0x56, 0x83, 0x4D, 0xA4, 0xC7, 0x19, 0x55, 0x0D, 0xB2, 0x47, 0x95, 0xAC, 0xE0, 0x9D, 0x88, 0xCA, 0x30, 0x43, 0xAF, 0xCC, 0xC9, 0xAB, 0x0F, 0x03, 0x06, 0x67, 0x1F, 0xD1, 0xF2, ++ 0x50, 0x95, 0x7C, 0xC6, 0x24, 0x64, 0xC9, 0xEA, 0x5E, 0x44, 0x4C, 0x6E, 0xB4, 0x76, 0xD0, 0x92, 0x46, 0x56, 0x08, 0xFE, 0xB6, 0xB7, 0xD5, 0x39, 0x8A, 0x02, 0x9E, 0x1E, 0xEA, 0xE5, 0x0D, 0xB5, ++ 0xF9, 0xF9, 0x95, 0x50, 0xA9, 0x66, 0x83, 0x43, 0xEF, 0x29, 0x70, 0xF2, 0x25, 0x31, 0x67, 0x8E, 0x36, 0x71, 0x3B, 0x81, 0xCB, 0x36, 0x33, 0xF1, 0xDD, 0xD4, 0x67, 0x69, 0x82, 0x6E, 0x43, 0x60, ++ 0xDE, 0x19, 0xA5, 0x63, 0x18, 0xD9, 0xEB, 0x59, 0xF9, 0x7A, 0x9B, 0x3E, 0xD2, 0x2B, 0xFD, 0x89, 0x50, 0x11, 0x26, 0x29, 0x5E, 0x89, 0xFC, 0x73, 0x5C, 0x36, 0x19, 0xD7, 0x7F, 0x6F, 0xB9, 0x35, ++ 0xC2, 0xFB, 0x46, 0xED, 0xD0, 0xA4, 0xD2, 0x92, 0x17, 0x77, 0xB0, 0xEF, 0xCD, 0x58, 0xBE, 0xDC, 0xEB, 0x9E, 0xA5, 0x66, 0x6B, 0x18, 0xDF, 0xAC, 0xF9, 0xBF, 0x76, 0x33, 0x3C, 0x5E, 0xDA, 0xC7, ++ 0x2B, 0x04, 0xE6, 0x57, 0xE4, 0xE0, 0x86, 0x5E, 0x04, 0x3A, 0x64, 0x68, 0xC5, 0xE6, 0x9D, 0x5B, 0xCB, 0xE5, 0x84, 0x2B, 0xF4, 0x5B, 0xEE, 0x77, 0x91, 0x5F, 0x05, 0x71, 0xD1, 0x50, 0xD6, 0x06, ++ 0xA6, 0xF2, 0xAC, 0x37, 0x37, 0x92, 0x90, 0x88, 0x91, 0xBA, 0x85, 0xF4, 0x5C, 0xB4, 0x09, 0xD9, 0x63, 0xE4, 0x9B, 0x5B, 0x96, 0x97, 0x8A, 0x19, 0x39, 0x16, 0x0A, 0x8D, 0xB9, 0xD6, 0x3C, 0x4E, ++ 0xA0, 0xD6, 0xA7, 0xD0, 0x93, 0x70, 0xAC, 0x1C, 0x24, 0x49, 0x8D, 0x21, 0xA8, 0xD5, 0xB7, 0x64, 0xA3, 0x9A, 0x41, 0x2E, 0x5B, 0x54, 0xBD, 0x1C, 0x96, 0x4D, 0x24, 0x4A, 0x45, 0x55, 0x64, 0x5F, ++ 0x1F, 0x90, 0x53, 0xF8, 0xBB, 0x33, 0xF6, 0xF7, 0x51, 0x46, 0x80, 0x7B, 0x4E, 0x9E, 0x07, 0xB2, 0x3C, 0x98, 0x06, 0xFF, 0x75, 0x72, 0x46, 0x9C, 0x09, 0x43, 0x99, 0xBA, 0x97, 0x79, 0xB9, 0x62, ++ 0xB4, 0xC8, 0xA9, 0x57, 0xF8, 0x69, 0x91, 0x1E, 0xB1, 0x3F, 0x14, 0x02, 0x24, 0xAC, 0x4E, 0xE7, 0x62, 0x01, 0xC0, 0x2F, 0x24, 0xC7, 0xED, 0xC3, 0xA9, 0x80, 0x89, 0x9A, 0x30, 0xBA, 0xD2, 0xB1, ++ 0x2D, 0x57, 0x28, 0xF0, 0x97, 0x17, 0x6D, 0x00, 0x17, 0xF3, 0x47, 0x3D, 0x2F, 0xBB, 0xD4, 0x3C, 0xC2, 0x3A, 0x50, 0x1E, 0x81, 0xE3, 0x81, 0xBE, 0x01, 0x79, 0xBF, 0x68, 0xCA, 0x50, 0xFD, 0x23, ++ 0x55, 0xCA, 0x7B, 0x64, 0xF5, 0x3E, 0x0C, 0x7D, 0x5B, 0xCA, 0x4E, 0x7B, 0xE6, 0x91, 0x63, 0xE3, 0x16, 0xFE, 0xBB, 0x49, 0xA9, 0x34, 0x0F, 0x15, 0x7B, 0xAC, 0x3B, 0x0B, 0xD8, 0x4A, 0x3B, 0x02, ++ 0x7A, 0x2F, 0xE4, 0x4E, 0xC2, 0x66, 0xA8, 0xCE, 0x4A, 0x17, 0x1B, 0x91, 0x82, 0x8F, 0x45, 0x43, 0x02, 0xAA, 0x9B, 0x66, 0x49, 0x67, 0xE6, 0x7D, 0xB3, 0x8A, 0xA4, 0xE3, 0xBC, 0x35, 0x3D, 0x15, ++ 0x18, 0xA7, 0xFE, 0xC1, 0x18, 0x8B, 0x7D, 0x5B, 0x7E, 0x19, 0x52, 0x1F, 0x1A, 0x28, 0x77, 0x00, 0x69, 0x89, 0xB0, 0xFE, 0x91, 0x89, 0x46, 0xB7, 0x59, 0x3E, 0xD1, 0x51, 0x20, 0xBF, 0x7D, 0x23, ++ 0xF9, 0x92, 0x10, 0xDD, 0xB7, 0x6D, 0xAF, 0x86, 0xE2, 0x37, 0xB2, 0x37, 0x9C, 0xA1, 0x2E, 0x55, 0x63, 0x6C, 0x83, 0x40, 0x8E, 0x6D, 0x2B, 0x35, 0x85, 0xFA, 0xBC, 0xBC, 0x0F, 0x6C, 0x48, 0x76, ++ 0x7E, 0x36, 0x3A, 0xC8, 0x47, 0xCC, 0xC6, 0x7E, 0xB7, 0xC9, 0x37, 0xBB, 0xD9, 0x41, 0x10, 0x0D, 0x78, 0x77, 0x4A, 0xE1, 0xF4, 0x43, 0x39, 0xDC, 0xDC, 0xB0, 0xE7, 0x00, 0xAC, 0x10, 0x8D, 0xAA, ++ 0x92, 0xCD, 0x9E, 0xA1, 0x9F, 0x82, 0x38, 0xF2, 0x86, 0x76, 0xFE, 0xE7, 0xBD, 0x1B, 0x9F, 0x37, 0xA6, 0xCA, 0x17, 0xD7, 0xCF, 0x40, 0x42, 0xFE, 0x39, 0xDD, 0x93, 0x77, 0x82, 0x6C, 0x4C, 0xAB, ++ 0x29, 0x32, 0xE1, 0x2D, 0xE5, 0x3B, 0x08, 0x1A, 0x6C, 0x25, 0xC0, 0xF4, 0x7D, 0xA3, 0xD9, 0x16, 0x83, 0x1E, 0x42, 0x47, 0xD0, 0x97, 0x81, 0x1E, 0x1A, 0x08, 0x70, 0xCB, 0x61, 0xF4, 0xAC, 0xA1, ++ 0x27, 0xEA, 0xF8, 0x5A, 0x9C, 0xA6, 0x66, 0xFA, 0x6C, 0x36, 0x39, 0x8F, 0x0E, 0x74, 0x20, 0xCA, 0x98, 0x95, 0xC6, 0x3A, 0x1A, 0xC4, 0xDB, 0x49, 0xA1, 0xD7, 0x5F, 0x56, 0x46, 0x4C, 0x1E, 0x0C, ++ 0xF9, 0x28, 0x3A, 0x45, 0x44, 0x56, 0x50, 0xF9, 0x5F, 0xAD, 0xF6, 0xC8, 0x8D, 0xB3, 0xCE, 0x7C, 0x0E, 0x5D, 0x0E, 0x72, 0x61, 0xE8, 0x04, 0xC0, 0x3A, 0x41, 0x9E, 0x4C, 0xC2, 0x50, 0x10, 0x99, ++ 0xCA, 0x53, 0x63, 0x44, 0x60, 0x7B, 0x07, 0xE8, 0x25, 0x32, 0x3A, 0xD3, 0x0B, 0xE7, 0x5F, 0x84, 0xE6, 0xC5, 0xBE, 0x23, 0x8E, 0xC7, 0x86, 0x17, 0xA0, 0xA2, 0x34, 0x14, 0xC7, 0xF8, 0xCD, 0x60, ++ 0x91, 0x30, 0x31, 0xBC, 0x93, 0x01, 0x78, 0x6D, 0x5C, 0x19, 0xD9, 0x30, 0xB5, 0x06, 0xC4, 0x95, 0x98, 0x32, 0x23, 0xEC, 0x1B, 0xF7, 0x87, 0xC3, 0x3D, 0x22, 0x8A, 0x11, 0x0E, 0x57, 0x42, 0x87, ++ 0x73, 0xE3, 0x4F, 0x12, 0x66, 0x3D, 0x11, 0xC1, 0x55, 0xDF, 0xCE, 0x38, 0x0D, 0x65, 0x76, 0x4C, 0x26, 0x59, 0xEA, 0xA0, 0xA1, 0xA2, 0xE7, 0x64, 0xEB, 0xB5, 0xA9, 0xE5, 0xA7, 0x19, 0x2E, 0x90, ++ 0x86, 0xA6, 0xDE, 0x4A, 0x38, 0xFC, 0xFD, 0x04, 0x12, 0x42, 0x42, 0x60, 0x62, 0x0C, 0x1E, 0x56, 0x7A, 0x2D, 0x8B, 0x1A, 0xF3, 0x55, 0x48, 0x19, 0xA0, 0x0D, 0x5C, 0x7E, 0x56, 0x66, 0xD0, 0xE6, ++ 0x56, 0xF8, 0xD4, 0x5C, 0x67, 0xC5, 0x44, 0x8D, 0xAB, 0x5E, 0xB6, 0xE6, 0x02, 0x93, 0x79, 0xC4, 0x7A, 0x24, 0xD0, 0x11, 0xF5, 0x6E, 0x5F, 0xAA, 0x49, 0xFC, 0x6B, 0xB2, 0xD7, 0x50, 0xED, 0x4C, ++ 0x95, 0xF8, 0x35, 0x38, 0x4F, 0x2F, 0xAA, 0xB1, 0x3C, 0x1C, 0xCA, 0x71, 0xA1, 0xEB, 0xD2, 0x29, 0x9E, 0x96, 0x32, 0xE5, 0x29, 0xCE, 0x77, 0x14, 0x9F, 0x5F, 0xAC, 0x31, 0xAB, 0x28, 0xDC, 0xC7, ++ 0x06, 0x70, 0xBB, 0xAB, 0x9F, 0x7B, 0x6F, 0xFE, 0xAA, 0xBC, 0x7D, 0xC4, 0x51, 0x3D, 0x8F, 0xAC, 0x4B, 0xCF, 0x7E, 0x5E, 0x72, 0x97, 0xDB, 0x69, 0xE4, 0xB6, 0x25, 0x38, 0xF9, 0xCA, 0xBD, 0x90, ++ 0x2B, 0x10, 0x07, 0xE3, 0xBA, 0xF6, 0x7F, 0x94, 0x3D, 0xFD, 0xC6, 0xAA, 0x75, 0x62, 0xFA, 0xBB, 0x1E, 0x8F, 0xAC, 0xF8, 0x11, 0xC7, 0x63, 0x35, 0x79, 0x0A, 0x16, 0xF2, 0x1E, 0xCB, 0x72, 0xFC, ++ 0x1B, 0xA9, 0x42, 0x76, 0xB2, 0x09, 0x80, 0x7E, 0xA5, 0x2E, 0x74, 0xF2, 0xB6, 0xCA, 0x0B, 0x3F, 0xDC, 0x30, 0x50, 0x1F, 0x63, 0x10, 0xEC, 0x99, 0x55, 0xB0, 0x51, 0x81, 0x8D, 0xAE, 0x10, 0x80, ++ 0xFD, 0x4D, 0xD2, 0x4C, 0x72, 0x2D, 0x68, 0xDE, 0x33, 0xEA, 0x76, 0x9B, 0x4E, 0x63, 0x70, 0x07, 0xCF, 0xDC, 0xE1, 0x80, 0x4A, 0xC2, 0xA7, 0x71, 0xF8, 0x8F, 0x59, 0xBA, 0xCE, 0xDB, 0x4D, 0xFB, ++ 0x79, 0xA4, 0x1E, 0xA7, 0x0F, 0x14, 0xAC, 0xCE, 0x6A, 0x5A, 0x8A, 0x88, 0x43, 0xB5, 0x95, 0x89, 0xE4, 0x52, 0x8B, 0xA8, 0x52, 0x10, 0x42, 0x1D, 0x1E, 0x59, 0x5F, 0x84, 0xC2, 0x75, 0x90, 0x47, ++ 0xDB, 0x47, 0x22, 0x26, 0x73, 0x86, 0x8C, 0x00, 0x27, 0xEE, 0xFD, 0x99, 0x6E, 0xF8, 0xC8, 0xC4, 0xF3, 0x67, 0xA9, 0x1D, 0xEC, 0xF1, 0x79, 0x43, 0x22, 0x7D, 0x4D, 0x00, 0x44, 0x7F, 0xFC, 0x6C, ++ 0xC8, 0x66, 0x5E, 0x08, 0xD2, 0x93, 0xA4, 0xDE, 0x4E, 0xE1, 0x15, 0x69, 0xB9, 0x5B, 0xB4, 0xDA, 0xE7, 0x58, 0x15, 0x0E, 0x55, 0x78, 0x32, 0x55, 0xE2, 0xF3, 0x22, 0x27, 0xB4, 0x5A, 0x9D, 0x26, ++ 0x19, 0x77, 0x1C, 0xED, 0x51, 0x2D, 0x5C, 0xD8, 0x90, 0x18, 0xC9, 0x9E, 0x2F, 0x05, 0x23, 0x3E, 0xF5, 0x86, 0x0F, 0xEC, 0xB3, 0x79, 0x1B, 0x53, 0xAD, 0x2C, 0x22, 0x8A, 0xBA, 0xBB, 0x9F, 0xD1, ++ 0xF5, 0x04, 0x38, 0xE9, 0xB0, 0xC6, 0xEA, 0x61, 0xE2, 0x0B, 0xB5, 0xAC, 0x0A, 0xAD, 0x30, 0x50, 0x9F, 0xEA, 0x9A, 0x44, 0x1D, 0x55, 0x5C, 0xDD, 0x34, 0x50, 0x9C, 0xFC, 0x60, 0x62, 0xE6, 0xB8, ++ 0x1D, 0xCA, 0xCF, 0xD5, 0xF5, 0xC9, 0xC5, 0x26, 0xB3, 0x8D, 0x70, 0x4C, 0x1F, 0x0F, 0x28, 0xB4, 0xFB, 0x7C, 0x1A, 0xC6, 0x9A, 0xA1, 0x96, 0xCF, 0x81, 0x2E, 0x44, 0x46, 0xEF, 0x68, 0x02, 0x87, ++ 0x44, 0xD2, 0xA5, 0x40, 0xFA, 0x7A, 0x69, 0xCF, 0x87, 0xA1, 0xF9, 0x68, 0x24, 0xE4, 0xC6, 0x87, 0x82, 0x35, 0xF0, 0xCC, 0xA3, 0xE9, 0x7B, 0x2B, 0x22, 0xB0, 0x93, 0xD9, 0x5E, 0xE1, 0x8D, 0xBF, ++ 0xE6, 0x76, 0x1D, 0xFA, 0xF8, 0x34, 0x47, 0x51, 0x86, 0x07, 0x56, 0x02, 0x31, 0x3E, 0xE2, 0xA2, 0x99, 0xBC, 0xCC, 0xC6, 0x53, 0x1E, 0xDA, 0x54, 0x10, 0xCC, 0xFA, 0x09, 0xEC, 0xB8, 0xA6, 0x0D, ++ 0x28, 0x33, 0x7A, 0xA5, 0x56, 0x58, 0x6D, 0x78, 0x48, 0x49, 0x38, 0x0F, 0x02, 0xEB, 0xB8, 0x37, 0xCB, 0x0B, 0xDE, 0x57, 0xBB, 0xA9, 0x07, 0xB6, 0x7C, 0x7A, 0xD8, 0x66, 0xE1, 0xDD, 0xB1, 0xC7, ++ 0x9D, 0x96, 0x1D, 0x70, 0xF5, 0x5D, 0x05, 0x9A, 0xCF, 0xD3, 0x9F, 0x5B, 0xD3, 0x03, 0x74, 0xB4, 0x84, 0x5E, 0x04, 0xEC, 0x26, 0xE8, 0xB5, 0xB9, 0x3F, 0xC4, 0x54, 0x4F, 0x24, 0xAE, 0x99, 0xC9, ++ 0xE5, 0x1E, 0x43, 0x57, 0x75, 0xD2, 0x20, 0x80, 0xE1, 0x9E, 0x3A, 0xC2, 0x25, 0xC7, 0xE1, 0xEE, 0x0A, 0x56, 0xB9, 0x52, 0x30, 0x7F, 0x44, 0xBA, 0xCF, 0x4C, 0x87, 0x85, 0x35, 0x5C, 0x09, 0xDB, ++ 0xD0, 0xD8, 0x60, 0x57, 0xF0, 0xA6, 0xA9, 0x88, 0xC3, 0x65, 0x74, 0x20, 0x25, 0x19, 0xDE, 0xBA, 0x04, 0x56, 0x98, 0xD7, 0x24, 0x27, 0x77, 0x0C, 0x37, 0x31, 0xC9, 0xB7, 0x53, 0x5F, 0xAA, 0xF0, ++ 0xCC, 0xA9, 0xD1, 0x3C, 0x42, 0x12, 0xB7, 0x62, 0x94, 0x57, 0x52, 0xE7, 0xA6, 0x53, 0x9B, 0x47, 0xBE, 0xA9, 0x66, 0x48, 0x23, 0x18, 0xA9, 0xCF, 0xE3, 0xBA, 0xEC, 0x6A, 0x83, 0xFB, 0x34, 0xF0, ++ 0xB6, 0x8E, 0xE9, 0x77, 0x97, 0x42, 0x0F, 0xAD, 0xC3, 0xF0, 0x25, 0xEE, 0x9F, 0x18, 0xBE, 0xA3, 0x8F, 0xBE, 0xC0, 0xC5, 0xDE, 0xAA, 0xC7, 0xA5, 0x2F, 0x7E, 0xB8, 0xD9, 0x4F, 0xE4, 0xC6, 0x62, ++ 0x54, 0x14, 0x57, 0xA1, 0x53, 0x82, 0x4B, 0xE6, 0x0D, 0x7D, 0xB8, 0x33, 0x89, 0x0F, 0x3A, 0xC3, 0xF7, 0xBD, 0x6D, 0x73, 0xF8, 0x0C, 0x67, 0x2B, 0x76, 0xA5, 0x26, 0x7D, 0xF2, 0x2C, 0xFB, 0x5E, ++ 0x1B, 0x92, 0xB0, 0xCD, 0x68, 0xE9, 0xA9, 0x20, 0x92, 0x43, 0xA4, 0x2A, 0x30, 0xF7, 0xAA, 0x1F, 0x03, 0xD0, 0xD9, 0x11, 0x3F, 0x04, 0xB7, 0x6E, 0xB5, 0xAA, 0x69, 0xBC, 0x9B, 0x8F, 0xE7, 0x98, ++ 0xE7, 0x75, 0x01, 0xB0, 0x56, 0x30, 0x29, 0xF5, 0x02, 0xF7, 0x79, 0x4D, 0xD3, 0x90, 0x74, 0x7A, 0xED, 0x08, 0x5C, 0x22, 0xB2, 0x16, 0x11, 0xA9, 0xC7, 0x62, 0x38, 0xEF, 0x65, 0x84, 0xAE, 0xFB, ++ 0xB3, 0x57, 0xF8, 0x36, 0x25, 0x86, 0xC5, 0x9F, 0xCA, 0x8E, 0x09, 0x26, 0x10, 0x11, 0x5F, 0x4D, 0xC2, 0x93, 0x0D, 0x72, 0x24, 0x28, 0x5E, 0xB8, 0xFD, 0x99, 0x2F, 0x82, 0x17, 0xAE, 0x94, 0x70, ++ 0xA7, 0x4A, 0xE3, 0xE8, 0x06, 0x01, 0x0C, 0x8D, 0x02, 0x19, 0x48, 0xBE, 0x57, 0xAB, 0x1D, 0x62, 0xC0, 0x41, 0x2E, 0xA5, 0xC9, 0x69, 0xD0, 0x56, 0x68, 0x41, 0xF2, 0xE2, 0x56, 0x8E, 0x01, 0x33, ++ 0x64, 0xD8, 0x7C, 0xAF, 0x33, 0x22, 0x9D, 0x2A, 0xA6, 0xC5, 0x6B, 0x9F, 0xB4, 0xC1, 0x36, 0xA1, 0x3F, 0x5E, 0x73, 0x3A, 0x91, 0xEF, 0xF2, 0x1D, 0xCB, 0x29, 0x0D, 0x8E, 0xC6, 0xDC, 0x0A, 0x50, ++ 0xE5, 0x7C, 0x1F, 0x65, 0xEB, 0x2B, 0xA1, 0xC3, 0x9D, 0xDB, 0x1C, 0x09, 0x54, 0x24, 0xE6, 0xF4, 0x1F, 0x9E, 0x86, 0x56, 0x7F, 0x91, 0x14, 0x00, 0xD8, 0x5C, 0x90, 0xD6, 0x4F, 0xC7, 0xE6, 0xEC, ++ 0xC2, 0x88, 0x04, 0xF2, 0x70, 0x42, 0x40, 0x24, 0x9E, 0xFC, 0x8F, 0xEC, 0x69, 0xE3, 0x66, 0xF3, 0x68, 0x7A, 0x76, 0x20, 0x5C, 0x0D, 0x1D, 0xD6, 0x48, 0x39, 0x12, 0xA8, 0xF6, 0x8E, 0xAE, 0x2C, ++ 0xB3, 0x52, 0x0A, 0x8B, 0x17, 0x2C, 0xF2, 0xCD, 0x2B, 0x03, 0x80, 0x2E, 0x5F, 0xA7, 0xB1, 0xF1, 0xEF, 0x8C, 0xA0, 0xA6, 0x08, 0x0B, 0xF9, 0xDA, 0x37, 0x82, 0xD2, 0xBD, 0xE4, 0xB3, 0xA3, 0xC6, ++ 0x5C, 0xFB, 0x9F, 0x1B, 0x39, 0x05, 0xB9, 0x36, 0x1D, 0x1E, 0x0C, 0x8F, 0xEB, 0x5A, 0xB4, 0x0A, 0x3F, 0xFE, 0xB3, 0xAE, 0x95, 0xF5, 0x75, 0x62, 0xA0, 0x7C, 0xD2, 0x43, 0x18, 0xC0, 0xE7, 0xEE, ++ 0x6E, 0xBE, 0x57, 0x0C, 0xB7, 0xDC, 0x1C, 0x62, 0x1A, 0x84, 0x92, 0x13, 0xE7, 0x13, 0x92, 0x42, 0x75, 0x81, 0x28, 0xC1, 0x6C, 0xFE, 0x52, 0xF8, 0xE2, 0xED, 0xA5, 0xBA, 0x23, 0x23, 0x15, 0x6F, ++ 0x85, 0x3A, 0xBC, 0x61, 0xB1, 0x39, 0x04, 0x1A, 0x4B, 0x83, 0x40, 0x37, 0xAA, 0x19, 0xDC, 0xEE, 0x76, 0x06, 0xAE, 0x84, 0xC1, 0xA7, 0x4D, 0x0E, 0xEB, 0x6A, 0x4D, 0xAB, 0xD5, 0x90, 0x8D, 0xAE, ++ 0x2C, 0x23, 0xA6, 0x38, 0x76, 0xE7, 0xE9, 0xF8, 0xE9, 0x03, 0x66, 0xA1, 0xFD, 0x89, 0xF2, 0x28, 0x3D, 0x75, 0x30, 0x09, 0xE0, 0x56, 0xDD, 0x5A, 0xB9, 0x53, 0xDB, 0x3D, 0x8F, 0x48, 0x30, 0xA4, ++ 0xD0, 0x93, 0x79, 0x39, 0x5F, 0x21, 0xED, 0x03, 0xB6, 0xCC, 0xD5, 0xD7, 0xF8, 0xF8, 0x1F, 0x40, 0x0B, 0x3E, 0x3B, 0xC6, 0x96, 0x08, 0x8D, 0x58, 0x17, 0x75, 0x21, 0x11, 0x0B, 0x6C, 0x84, 0x74, ++ 0xF3, 0xE4, 0x49, 0xD8, 0xEC, 0x7F, 0x46, 0x6C, 0x2E, 0xB3, 0x43, 0x65, 0x9F, 0xF5, 0x33, 0x97, 0x58, 0x7B, 0xC6, 0x30, 0x0D, 0xEE, 0xBD, 0xC2, 0xBE, 0x67, 0x4B, 0x78, 0x30, 0x90, 0xEA, 0xCC, ++ 0xB9, 0x3B, 0x6A, 0xE9, 0x49, 0x56, 0xA3, 0x33, 0xE8, 0x58, 0x37, 0x64, 0x73, 0xCA, 0x67, 0xAF, 0x05, 0x43, 0xE5, 0x99, 0x94, 0x1E, 0xB4, 0xE8, 0xC6, 0xD9, 0x5D, 0x47, 0x9F, 0xEE, 0xE0, 0x5E, ++ 0x3E, 0x8B, 0xF5, 0xF0, 0xAA, 0xCD, 0x34, 0x51, 0xC0, 0xED, 0x48, 0x1F, 0x52, 0x6D, 0x38, 0xEB, 0x3B, 0x26, 0xA4, 0xFD, 0x98, 0xE1, 0x1B, 0xAF, 0x67, 0xED, 0xEA, 0xB2, 0xEC, 0xC7, 0xD3, 0x97, ++ 0xE9, 0x68, 0xF8, 0xD1, 0x03, 0xE8, 0x01, 0x44, 0xA4, 0xCD, 0xB7, 0x00, 0xC4, 0x1A, 0x42, 0x83, 0x4B, 0x07, 0xFD, 0x7E, 0x91, 0xF3, 0xC5, 0x24, 0x09, 0xC6, 0x88, 0x2C, 0xF4, 0x15, 0xA4, 0x2F, ++ 0x71, 0xE2, 0x1F, 0xE7, 0x00, 0x17, 0xD6, 0x2B, 0x1F, 0xE4, 0x3A, 0x2A, 0x32, 0xD8, 0x15, 0xE3, 0xF1, 0xA4, 0x4E, 0x72, 0x67, 0xB1, 0xBB, 0xF5, 0x52, 0xF3, 0x8E, 0x88, 0x97, 0x75, 0xEC, 0xD8, ++ 0x5C, 0x4B, 0xF4, 0x65, 0x02, 0x22, 0xF3, 0x30, 0xFA, 0xE4, 0xB6, 0x17, 0x65, 0x52, 0x54, 0x03, 0xFB, 0xDE, 0x0A, 0x18, 0xF9, 0x73, 0x65, 0x7C, 0xAB, 0xEB, 0x05, 0xFE, 0x6B, 0x97, 0x29, 0xD3, ++ 0xB3, 0x73, 0x0A, 0xEF, 0xDF, 0x3C, 0x18, 0x96, 0x99, 0x7A, 0x94, 0x9B, 0x60, 0x3C, 0x43, 0xFE, 0xCC, 0x3E, 0xAC, 0xCB, 0xF0, 0x0C, 0x03, 0x76, 0x59, 0x41, 0x80, 0x0C, 0xE4, 0x2F, 0xD0, 0x38, ++ 0x4E, 0x1C, 0x1C, 0x61, 0x17, 0x31, 0x6C, 0xBA, 0x1A, 0x81, 0xA2, 0x09, 0x03, 0x3C, 0x5B, 0x53, 0xAE, 0x3B, 0x60, 0xBC, 0x1A, 0xFC, 0x6E, 0x7C, 0x95, 0xC5, 0xCB, 0x99, 0xC2, 0x6A, 0x4C, 0x88, ++ 0x1F, 0x62, 0x6A, 0x21, 0x9A, 0x61, 0x9B, 0xC3, 0x5C, 0xF4, 0xEF, 0x0A, 0x3B, 0x67, 0x25, 0x34, 0x9D, 0x2C, 0x13, 0xD8, 0x9D, 0xE6, 0x5D, 0x9F, 0x7A, 0x35, 0x51, 0xCC, 0xCF, 0xC5, 0x61, 0x1D, ++ 0xC9, 0xC8, 0x73, 0x7B, 0x0E, 0xF0, 0xFA, 0xDF, 0x86, 0x5A, 0x65, 0x33, 0x9F, 0x46, 0x4C, 0xB0, 0x65, 0xBA, 0x8F, 0xE4, 0x81, 0x06, 0x46, 0xA3, 0x44, 0x5B, 0x70, 0x2F, 0x51, 0xD6, 0xA9, 0x13, ++ 0x49, 0xFD, 0x70, 0xA3, 0x56, 0x49, 0xFD, 0x4D, 0xAE, 0xE6, 0x13, 0x10, 0xA3, 0xCC, 0xA5, 0xED, 0x3A, 0xBD, 0xBF, 0xF8, 0x35, 0x5B, 0x51, 0x14, 0x83, 0x5F, 0xDE, 0x73, 0xC9, 0xF5, 0x2A, 0xC2, ++ 0x29, 0xB1, 0x5E, 0x84, 0xD3, 0xF5, 0x9D, 0xCB, 0x13, 0x02, 0x55, 0x1E, 0xA4, 0xDD, 0x6F, 0x41, 0x5D, 0x01, 0x39, 0x11, 0xD6, 0x53, 0x15, 0xC8, 0xE5, 0x9B, 0x12, 0x20, 0x4A, 0xAA, 0xF5, 0x25, ++ 0x75, 0x4E, 0x96, 0xEC, 0x3C, 0xB1, 0x3E, 0x19, 0x72, 0x62, 0x1F, 0x9C, 0x86, 0xF5, 0xDE, 0x4A, 0xDA, 0xB9, 0x80, 0xCF, 0x83, 0x69, 0x12, 0x7C, 0x2B, 0x3E, 0x4E, 0xF1, 0xA8, 0x2B, 0x7A, 0xC9, ++ 0x59, 0xAB, 0x45, 0xD9, 0x7E, 0xEE, 0x7A, 0x14, 0xE4, 0x14, 0x5B, 0x34, 0x9B, 0x53, 0x3D, 0xD9, 0x2D, 0xD2, 0xC1, 0x77, 0xC7, 0x7A, 0xBA, 0x32, 0x5D, 0xD7, 0x5C, 0x77, 0xB3, 0x1A, 0x6A, 0xB3, ++ 0xAA, 0xBE, 0x54, 0xA6, 0xCF, 0xA2, 0xDC, 0xA3, 0x5E, 0x20, 0x99, 0x35, 0xEF, 0x9D, 0x94, 0x7A, 0x37, 0xE8, 0x35, 0x97, 0xB9, 0x4F, 0xCA, 0xF5, 0x8A, 0x56, 0xD1, 0x4A, 0x05, 0x69, 0x12, 0xC2, ++ 0x2A, 0x54, 0xA6, 0xFF, 0x2F, 0xE8, 0x25, 0xBA, 0xAD, 0x8A, 0xBF, 0x1D, 0xD8, 0x7F, 0xB0, 0xFA, 0x15, 0x19, 0xA5, 0xB7, 0xB4, 0x2F, 0x4B, 0xB2, 0xF7, 0x57, 0xEF, 0xF7, 0xC1, 0x2A, 0x2C, 0xD1, ++ 0xB9, 0x1F, 0xAE, 0xBF, 0x80, 0x86, 0x51, 0x6D, 0xCD, 0xD5, 0x5F, 0x63, 0x84, 0x18, 0x8F, 0x53, 0xC6, 0xA7, 0x81, 0x86, 0x2F, 0xB5, 0xCC, 0x3C, 0xC6, 0x1A, 0xDE, 0x2F, 0x11, 0x08, 0xD1, 0x51, ++ 0x63, 0xC3, 0x8C, 0x4C, 0xA0, 0x1B, 0xF7, 0xF2, 0xC8, 0x1B, 0x8C, 0x79, 0xAD, 0x69, 0x4A, 0x01, 0x61, 0x7B, 0xC0, 0x4F, 0x84, 0x70, 0xC2, 0xC7, 0x71, 0xBE, 0xE2, 0x9A, 0x66, 0x6B, 0xE8, 0x51, ++ 0x42, 0xCB, 0x96, 0x7E, 0xC5, 0x69, 0xA4, 0x02, 0x2A, 0x64, 0xFC, 0x5D, 0x95, 0xA5, 0x57, 0x76, 0xAC, 0x73, 0x27, 0x55, 0xB2, 0x39, 0x29, 0xF2, 0x59, 0x86, 0xD9, 0x3C, 0x01, 0x9B, 0xBB, 0xFB, ++ 0x15, 0x4C, 0x26, 0xBB, 0x47, 0xA2, 0xBA, 0x4B, 0x32, 0x97, 0xDC, 0xE4, 0x47, 0xC5, 0x61, 0xA1, 0xC4, 0x9F, 0x75, 0x35, 0xA7, 0xA1, 0x4C, 0x98, 0x30, 0x18, 0x6A, 0xA0, 0xDD, 0xFA, 0x00, 0x1A, ++ 0xEA, 0x0D, 0x94, 0xC4, 0x0A, 0xC8, 0xA8, 0x41, 0x8E, 0x8D, 0x57, 0x8D, 0x84, 0x21, 0x41, 0x3F, 0xB7, 0xE8, 0x20, 0x23, 0x7E, 0xF3, 0xB5, 0xCB, 0xF6, 0x08, 0x1C, 0x44, 0x2C, 0x13, 0xB4, 0x98, ++ 0x5E, 0xE6, 0x39, 0xE8, 0xF8, 0x6D, 0xB2, 0x87, 0x3B, 0xC2, 0xC9, 0xD3, 0xA9, 0xE5, 0x17, 0xAD, 0x70, 0x31, 0xDA, 0x3C, 0xC9, 0x2F, 0xC1, 0x5F, 0x50, 0x2F, 0xAD, 0x3F, 0xC5, 0xFD, 0xBB, 0xCD, ++ 0x2C, 0x95, 0x50, 0xA8, 0x95, 0x25, 0xF0, 0x06, 0x7C, 0xC3, 0xEA, 0x22, 0xD8, 0xD5, 0xB6, 0x1A, 0xFA, 0xA4, 0xB5, 0x53, 0xAC, 0x30, 0x39, 0x20, 0xF2, 0x5D, 0x6D, 0x58, 0xF6, 0x1F, 0x63, 0x56, ++ 0x68, 0x5E, 0x43, 0x50, 0x9A, 0x00, 0x62, 0xF8, 0x37, 0xBC, 0xB9, 0xA1, 0xA2, 0x2C, 0xFF, 0x08, 0x10, 0x80, 0x18, 0xD6, 0xD2, 0x4B, 0xDC, 0x2B, 0x09, 0x6D, 0x2E, 0xA0, 0x82, 0x0A, 0x05, 0x03, ++ 0x82, 0x0A, 0x01, 0x00, 0x03, 0x23, 0x69, 0xA2, 0xCE, 0x57, 0x2F, 0xD0, 0x8B, 0xFC, 0x30, 0x4B, 0x48, 0x48, 0xE7, 0x8D, 0x75, 0x2D, 0x77, 0xE9, 0x7A, 0x28, 0xB9, 0x9B, 0x9B, 0xB6, 0xFB, 0x5C, ++ 0x7C, 0x63, 0x37, 0x51, 0x4B, 0x32, 0x1E, 0xCD, 0xC1, 0xFB, 0x66, 0x9F, 0x26, 0xD4, 0x17, 0x1A, 0xB4, 0x2B, 0x72, 0x72, 0x0E, 0xE7, 0x0E, 0x05, 0x19, 0xA6, 0xE1, 0xD3, 0xD6, 0xD9, 0x91, 0x4E, ++ 0xC1, 0xB2, 0x1C, 0xDE, 0x38, 0xB4, 0x1A, 0xAC, 0x1D, 0x3A, 0xBE, 0xE6, 0xF2, 0xB7, 0x49, 0x5C, 0x4C, 0x82, 0x0C, 0x1F, 0xC0, 0xCC, 0x9E, 0x71, 0xE2, 0x4C, 0xFB, 0x5C, 0x9C, 0x0D, 0x8E, 0xEF, ++ 0x42, 0x64, 0xAF, 0x48, 0x4F, 0xAE, 0x4D, 0x6E, 0x5D, 0xDE, 0x65, 0xD4, 0xDF, 0x72, 0xB6, 0x1C, 0x6D, 0xBD, 0x26, 0xF8, 0x61, 0xA5, 0xE0, 0xB8, 0x53, 0xAC, 0x54, 0x13, 0x22, 0x6F, 0xEB, 0xBA, ++ 0xBA, 0x5E, 0xB4, 0x74, 0xC6, 0xFB, 0x25, 0xA8, 0x26, 0x78, 0xEA, 0x16, 0x06, 0xB4, 0x52, 0xA2, 0x31, 0x12, 0x22, 0x10, 0x17, 0xB8, 0xC0, 0x73, 0xC1, 0x03, 0x78, 0xF9, 0x14, 0x56, 0x41, 0xA8, ++ 0xC0, 0x78, 0xC0, 0xED, 0x9E, 0x42, 0x16, 0x50, 0xF7, 0x48, 0x89, 0x25, 0x22, 0xAB, 0x9F, 0xB7, 0xD1, 0xFF, 0x8C, 0xF1, 0xCC, 0x71, 0xB8, 0x56, 0x6E, 0x8D, 0xA3, 0x3C, 0xD7, 0x36, 0x17, 0x70, ++ 0xC0, 0x44, 0x34, 0x9A, 0xC4, 0x40, 0xCC, 0xCD, 0xC6, 0xBB, 0xE3, 0x5E, 0x6C, 0x55, 0x78, 0x27, 0x66, 0xF3, 0x8E, 0x68, 0x8B, 0xF4, 0x78, 0x21, 0x03, 0x72, 0x99, 0xE3, 0x44, 0xEC, 0xDE, 0xCA, ++ 0x17, 0xAD, 0x5D, 0x15, 0xCD, 0x27, 0xA4, 0xF7, 0xB0, 0x70, 0x66, 0x11, 0x38, 0xED, 0xE8, 0xED, 0x72, 0xA8, 0x95, 0x9C, 0x5A, 0xE3, 0x6B, 0x1C, 0x46, 0x09, 0x4A, 0x53, 0xCB, 0x21, 0xA7, 0xA4, ++ 0x26, 0x73, 0xF1, 0x40, 0x1C, 0x2B, 0x25, 0x94, 0x94, 0x09, 0x0E, 0x2F, 0x53, 0xD7, 0xEE, 0x70, 0x63, 0x43, 0x1E, 0xE5, 0x85, 0x80, 0x02, 0xD8, 0x50, 0xAF, 0x90, 0x9C, 0x37, 0x83, 0x43, 0x60, ++ 0x10, 0xF7, 0xEA, 0x88, 0x62, 0x5A, 0x36, 0xA0, 0xF0, 0x18, 0x9F, 0xDE, 0x75, 0xB7, 0xE8, 0xC7, 0xE4, 0xB1, 0x9D, 0x85, 0x27, 0x00, 0x83, 0x28, 0xAD, 0xBC, 0x92, 0x9B, 0xBC, 0x86, 0xE9, 0x64, ++ 0xCF, 0xC4, 0x8B, 0x8C, 0xF1, 0xDA, 0x5D, 0x7E, 0xD3, 0x33, 0x3A, 0xB5, 0x5C, 0x15, 0x07, 0x28, 0x32, 0x21, 0x4A, 0x77, 0x9A, 0x5F, 0xD1, 0x0C, 0xC0, 0x40, 0x05, 0xF4, 0x6C, 0x1A, 0xA8, 0x88, ++ 0x4A, 0x16, 0x19, 0x92, 0x47, 0x2F, 0xD5, 0x35, 0xB9, 0x5E, 0xD1, 0x8B, 0xDE, 0x1C, 0x6D, 0x8C, 0xE6, 0x78, 0xD2, 0x81, 0x7D, 0x69, 0xF9, 0x05, 0x71, 0x10, 0x3E, 0x85, 0x20, 0xE7, 0x31, 0x3C, ++ 0xE7, 0xB9, 0x30, 0xC5, 0xEB, 0xFA, 0xF2, 0xF4, 0xEC, 0x75, 0x8B, 0x62, 0x6B, 0x55, 0x43, 0xA0, 0x68, 0xCD, 0xE0, 0xFD, 0x0E, 0x94, 0xE6, 0xA6, 0x44, 0x75, 0xB2, 0x32, 0x68, 0xBF, 0x03, 0x80, ++ 0xD0, 0x75, 0x50, 0x8F, 0x85, 0x12, 0x8C, 0xA2, 0x6F, 0x31, 0xA9, 0x0C, 0x4A, 0x7D, 0x28, 0x44, 0x0D, 0x54, 0xD4, 0x06, 0x6B, 0x40, 0x45, 0x88, 0x58, 0x8B, 0x4C, 0xCF, 0x85, 0x0B, 0x97, 0x5C, ++ 0x73, 0xAF, 0xE6, 0x8C, 0xBC, 0xD1, 0x02, 0x75, 0x5F, 0x61, 0xEB, 0x3E, 0x60, 0x32, 0x3C, 0x57, 0x6E, 0x52, 0x9E, 0xC0, 0xBF, 0x23, 0xBF, 0xA5, 0xBE, 0xA3, 0x9C, 0xB7, 0x3C, 0x37, 0xE8, 0x39, ++ 0x5D, 0x8D, 0xBD, 0x4C, 0x8D, 0xC8, 0xAB, 0x2F, 0x70, 0xA0, 0xBF, 0xC3, 0xA7, 0x8C, 0x0D, 0x41, 0x3F, 0x08, 0xD1, 0x4D, 0x63, 0x2B, 0xC0, 0x40, 0x3B, 0x03, 0x83, 0xDB, 0xBB, 0x22, 0xBD, 0x9B, ++ 0x11, 0x3C, 0x89, 0x45, 0x2A, 0xEA, 0xB1, 0x12, 0x10, 0x09, 0x79, 0x47, 0xFE, 0xAA, 0xA3, 0xC9, 0xF0, 0x5D, 0x1D, 0x30, 0x0C, 0x33, 0xA5, 0x5E, 0x3F, 0xBC, 0x81, 0x25, 0x9E, 0x86, 0x27, 0x05, ++ 0xC3, 0xA1, 0x3B, 0x9E, 0xE3, 0x5F, 0x6B, 0x23, 0xED, 0x10, 0xF4, 0xED, 0xEA, 0x95, 0x19, 0xFA, 0x91, 0xB7, 0xBC, 0xD0, 0xD5, 0x01, 0xB5, 0xED, 0x57, 0xD9, 0x04, 0x9F, 0xAB, 0x91, 0xAA, 0x77, ++ 0x9C, 0x72, 0x5F, 0xF8, 0xE9, 0xF7, 0x80, 0x17, 0xEA, 0x78, 0x07, 0xFA, 0x25, 0x4B, 0x71, 0x05, 0xE8, 0x26, 0xD0, 0x96, 0xC0, 0x1A, 0xDA, 0xE2, 0xC5, 0xD1, 0x38, 0x25, 0x1A, 0x92, 0xA4, 0x78, ++ 0xA3, 0x33, 0x73, 0xF4, 0xDE, 0x91, 0x2B, 0x83, 0xB6, 0xFB, 0x4B, 0x0D, 0x0D, 0xE6, 0xBC, 0x11, 0x18, 0xBB, 0x2F, 0xCF, 0xB0, 0x7B, 0xD2, 0x27, 0xA5, 0xF7, 0xF9, 0x91, 0x43, 0x9A, 0x13, 0xDE, ++ 0x12, 0x38, 0x18, 0x0C, 0xDC, 0x55, 0x11, 0x9E, 0x65, 0xC4, 0x18, 0x58, 0x4D, 0x80, 0x7A, 0x92, 0x6E, 0x4A, 0x9C, 0x0F, 0x70, 0x15, 0x5E, 0xE1, 0x96, 0xFB, 0x07, 0x65, 0x6D, 0x9A, 0xA7, 0x98, ++ 0x2B, 0x87, 0x95, 0xDB, 0xAD, 0x43, 0xD1, 0x05, 0x9C, 0xA7, 0xF5, 0x80, 0xD3, 0x32, 0x0C, 0x04, 0x38, 0xA5, 0xED, 0x5A, 0x70, 0x32, 0xB2, 0xE9, 0x59, 0x67, 0x84, 0x10, 0xF1, 0x1A, 0xD9, 0x8B, ++ 0xE8, 0x82, 0x6A, 0x44, 0x26, 0x26, 0x15, 0x64, 0x5D, 0x75, 0x9A, 0x86, 0x2B, 0x2A, 0xC5, 0x2D, 0x3B, 0x01, 0x4A, 0x25, 0xE8, 0x47, 0x3F, 0x1F, 0x1E, 0xA4, 0xCF, 0xA8, 0x19, 0x93, 0x0A, 0xB3, ++ 0xA3, 0x4D, 0x71, 0x0D, 0xEE, 0xE7, 0x0C, 0xA1, 0x3E, 0x88, 0xFD, 0x71, 0xAA, 0x06, 0x4E, 0x6C, 0xB4, 0x69, 0x7D, 0xE0, 0xE4, 0x63, 0xB1, 0x37, 0x0A, 0x6A, 0x3B, 0xFE, 0x98, 0xFD, 0xFE, 0x7B, ++ 0x54, 0x71, 0xFF, 0x8D, 0xF6, 0xA6, 0x87, 0x9F, 0xBE, 0xF9, 0xAF, 0xB3, 0x51, 0x9D, 0x78, 0x07, 0x57, 0xD6, 0x74, 0x40, 0xAC, 0x36, 0xE8, 0x37, 0xBA, 0xC3, 0x83, 0x3E, 0xEA, 0xA9, 0x80, 0xBD, ++ 0x82, 0xB7, 0x93, 0x64, 0x36, 0xA0, 0x30, 0x7D, 0x16, 0x4B, 0x64, 0x38, 0x86, 0x9A, 0xE6, 0x06, 0xE9, 0x80, 0x51, 0x8E, 0x91, 0x3D, 0x0E, 0xE3, 0x02, 0x39, 0x6E, 0xF4, 0xEB, 0x25, 0xD9, 0x86, ++ 0x6E, 0x4B, 0xAF, 0xA1, 0x01, 0xE5, 0x99, 0x29, 0x31, 0x36, 0x1C, 0x4A, 0x98, 0x22, 0x53, 0xD5, 0x8A, 0xBE, 0x3B, 0xD5, 0x71, 0x07, 0x63, 0x5A, 0x46, 0xF0, 0x95, 0x12, 0x08, 0x5F, 0x4A, 0xDA, ++ 0x08, 0xEC, 0x8B, 0x1B, 0x39, 0x10, 0xB0, 0x15, 0x3B, 0x2A, 0xAF, 0xCA, 0xE5, 0x03, 0x3E, 0xDD, 0x41, 0x53, 0x24, 0x8D, 0xCD, 0x85, 0xB0, 0x2C, 0x9A, 0x25, 0xD8, 0xBD, 0xC4, 0x06, 0x8B, 0xB8, ++ 0x57, 0x41, 0x72, 0x62, 0x97, 0xA2, 0x5A, 0xEC, 0x55, 0xC4, 0x4A, 0xA2, 0x80, 0x59, 0xB7, 0x1B, 0xB9, 0xF3, 0x40, 0x67, 0x88, 0x7A, 0xDE, 0x4C, 0x1C, 0xA4, 0x90, 0x8B, 0x19, 0xB3, 0xD7, 0x81, ++ 0x23, 0x45, 0x38, 0x76, 0xDB, 0x4D, 0xCE, 0xB4, 0x27, 0x73, 0x06, 0x95, 0x72, 0xCD, 0x87, 0x77, 0xE6, 0x2C, 0xFB, 0xAF, 0x72, 0x03, 0xF0, 0x20, 0xF2, 0x81, 0xA6, 0x67, 0x8F, 0x79, 0x07, 0x20, ++ 0xEA, 0xA2, 0x0E, 0x34, 0x32, 0x7D, 0x7A, 0x63, 0x68, 0x8B, 0x09, 0xA0, 0x1F, 0x4D, 0x70, 0x88, 0xF7, 0xB5, 0x05, 0x9E, 0xDD, 0xEB, 0x45, 0xC0, 0xCE, 0x39, 0x32, 0x1C, 0x79, 0x52, 0x1D, 0x79, ++ 0xA5, 0x9E, 0xCD, 0xD4, 0x68, 0xCE, 0xD0, 0xEA, 0x82, 0xCA, 0x48, 0x49, 0x28, 0x70, 0x2F, 0x57, 0xD6, 0xFC, 0x18, 0xD3, 0x47, 0xAF, 0x3E, 0xD2, 0x2A, 0xAF, 0x45, 0xAB, 0xB0, 0xF2, 0x0B, 0xAB, ++ 0x9E, 0x01, 0x55, 0x76, 0x07, 0xAE, 0x3E, 0xD9, 0xCF, 0x0E, 0x26, 0xD3, 0x4D, 0x30, 0x54, 0x49, 0x66, 0x9E, 0xC6, 0xFC, 0x1B, 0xEC, 0xEA, 0xDC, 0xE1, 0x83, 0xF7, 0xA5, 0x94, 0xCE, 0xA1, 0x96, ++ 0xD0, 0x59, 0xA1, 0xE5, 0x50, 0xE5, 0x47, 0x86, 0x6C, 0xC0, 0x87, 0x33, 0x3F, 0x03, 0x0E, 0x62, 0x8F, 0x2C, 0xF1, 0x14, 0x79, 0x25, 0x41, 0x0E, 0xD0, 0x42, 0x1D, 0xC7, 0x50, 0x61, 0x38, 0xB1, ++ 0xD1, 0x90, 0x99, 0xC6, 0x95, 0xE1, 0xAF, 0xDA, 0xCE, 0x41, 0x53, 0x82, 0x5B, 0x66, 0xA8, 0xEC, 0xF5, 0x5A, 0x02, 0x1D, 0x21, 0xEB, 0x9F, 0x84, 0x8F, 0xE5, 0x5C, 0x21, 0x76, 0x9A, 0x75, 0x5F, ++ 0xA9, 0x80, 0x7E, 0xF7, 0x3A, 0x6C, 0x5B, 0xA1, 0x5A, 0x06, 0x34, 0x7D, 0x3F, 0x1C, 0x5C, 0x61, 0x9A, 0x31, 0x55, 0x98, 0x62, 0x91, 0x06, 0xAC, 0x0B, 0x86, 0xAE, 0x0D, 0x8E, 0x55, 0x57, 0x82, ++ 0x92, 0x51, 0x72, 0x58, 0xAE, 0x85, 0xF7, 0x2E, 0x73, 0x7A, 0xF5, 0x63, 0x8D, 0x09, 0x6B, 0x76, 0xA3, 0xC5, 0x7F, 0x1B, 0x9C, 0x80, 0xE7, 0x70, 0xA2, 0xD4, 0xEA, 0x4E, 0x42, 0xFE, 0x46, 0x9A, ++ 0xD4, 0x21, 0x28, 0x52, 0x41, 0x96, 0x0A, 0x8A, 0x86, 0x35, 0x5E, 0xF2, 0x2F, 0x58, 0x3F, 0xE3, 0xBA, 0xCA, 0xDF, 0x8D, 0xA3, 0x1D, 0x5C, 0x2D, 0xE2, 0x54, 0x16, 0x1B, 0xC6, 0xD1, 0x0F, 0x98, ++ 0x41, 0xDD, 0x27, 0xED, 0x46, 0x2A, 0x6B, 0x94, 0xB6, 0xDE, 0xEA, 0x90, 0xCB, 0xAB, 0x68, 0x7F, 0xB8, 0x4B, 0x56, 0x39, 0x5D, 0xA7, 0x63, 0xAB, 0x4B, 0x7F, 0xE3, 0x09, 0x5D, 0x57, 0x2D, 0x77, ++ 0xEF, 0xF3, 0xFF, 0x0D, 0x8F, 0x9D, 0x19, 0xAA, 0x5A, 0xF7, 0xB6, 0x76, 0x05, 0x3D, 0xBE, 0xF6, 0x4E, 0x61, 0xDD, 0x0A, 0x41, 0xD4, 0x02, 0x31, 0x8E, 0x33, 0x08, 0x66, 0x91, 0x06, 0x25, 0x9B, ++ 0xF7, 0xA4, 0xCE, 0x31, 0xB3, 0x46, 0xA9, 0xE9, 0x83, 0xED, 0xAB, 0xA0, 0x51, 0x80, 0x14, 0x9A, 0xB0, 0x57, 0xF9, 0x97, 0x29, 0x77, 0xDA, 0x7C, 0x6F, 0x46, 0xE0, 0xCD, 0xF8, 0x6F, 0x30, 0x91, ++ 0xF0, 0x4F, 0xD4, 0xE8, 0x3C, 0x60, 0x22, 0xE1, 0x8C, 0xE4, 0x38, 0x2B, 0x54, 0xD5, 0xDA, 0xBA, 0x82, 0xE4, 0xDF, 0x1E, 0x53, 0xBF, 0x31, 0xFE, 0x4B, 0xB6, 0x5A, 0x85, 0x24, 0xED, 0xA8, 0x3F, ++ 0xD2, 0x9D, 0x07, 0xE4, 0x97, 0x47, 0xB7, 0x52, 0x91, 0xCB, 0xC8, 0xF8, 0xEE, 0x14, 0x15, 0xEC, 0x92, 0x1E, 0x19, 0x02, 0x2A, 0xDE, 0x2C, 0x04, 0x7E, 0x4D, 0xF3, 0x50, 0x72, 0x89, 0xE9, 0xD7, ++ 0x9A, 0x8E, 0x69, 0x92, 0xB4, 0x8B, 0x88, 0x64, 0x20, 0x4A, 0x41, 0x6B, 0x76, 0x9C, 0xC7, 0x87, 0xD6, 0xDF, 0x44, 0x07, 0xE9, 0x3D, 0x12, 0x1F, 0x7F, 0xBE, 0xE0, 0xE4, 0x08, 0x96, 0x3E, 0x06, ++ 0x09, 0xA9, 0xC7, 0x5C, 0xB3, 0x11, 0x7C, 0xA5, 0x83, 0xDF, 0x6E, 0x79, 0xF3, 0x1C, 0x63, 0x5B, 0xF0, 0xF1, 0xBE, 0x98, 0xDF, 0x55, 0x07, 0x27, 0xA4, 0x5D, 0x3C, 0xA3, 0x37, 0xD7, 0x9D, 0xE5, ++ 0xDC, 0xDB, 0x0B, 0x91, 0xCA, 0xBB, 0xC3, 0x0D, 0x7E, 0xF0, 0xAE, 0x1C, 0xA1, 0xE9, 0x49, 0x04, 0xF7, 0x8C, 0x1F, 0xD8, 0xFB, 0xA8, 0x75, 0x45, 0xFD, 0xC1, 0x74, 0xAD, 0x81, 0x90, 0xF9, 0xB5, ++ 0xED, 0x7B, 0x58, 0x69, 0x49, 0x4F, 0xFA, 0x91, 0x03, 0x3F, 0xDC, 0x61, 0x17, 0xBF, 0x66, 0x2E, 0xC5, 0xF2, 0xAF, 0x26, 0x34, 0xBA, 0x3F, 0x8C, 0x02, 0x21, 0x0F, 0x1C, 0x9B, 0xCD, 0xDA, 0x9B, ++ 0xB3, 0x97, 0x60, 0xE0, 0x0F, 0x25, 0xA7, 0x27, 0x0C, 0x34, 0x56, 0x66, 0xFB, 0x6D, 0xF8, 0x5C, 0x91, 0x9A, 0xA1, 0x50, 0xCA, 0x7F, 0xC8, 0x0F, 0xC0, 0xEA, 0xCF, 0xE2, 0x42, 0xEF, 0x55, 0xF4, ++ 0x29, 0x80, 0x63, 0x62, 0x8E, 0x61, 0x05, 0x6C, 0x96, 0x6D, 0xB9, 0x96, 0x44, 0x28, 0xD9, 0xCE, 0x99, 0x10, 0x82, 0x71, 0xE2, 0x9A, 0x12, 0x32, 0x8E, 0x23, 0x99, 0x97, 0x34, 0xE0, 0x36, 0xF1, ++ 0x8A, 0x0E, 0xB8, 0xF0, 0x30, 0xE8, 0x80, 0x62, 0xC5, 0x67, 0x17, 0xE7, 0xA3, 0x63, 0x14, 0xE4, 0x4E, 0xCF, 0x35, 0x7F, 0xF5, 0x6E, 0xED, 0xF9, 0x0D, 0x3F, 0xB1, 0x1B, 0x22, 0xA1, 0xB2, 0x59, ++ 0x05, 0xB3, 0x79, 0xFC, 0xCA, 0x5C, 0xA1, 0xAC, 0xB9, 0x56, 0xE1, 0x78, 0xAD, 0x3F, 0x51, 0xD5, 0x35, 0xAD, 0x11, 0x98, 0x13, 0xB1, 0xE7, 0x0F, 0x73, 0x17, 0x65, 0x1B, 0xC7, 0x5C, 0xAC, 0x64, ++ 0x27, 0x6B, 0xB9, 0x81, 0x10, 0xB5, 0x4E, 0xA0, 0xEF, 0x34, 0x54, 0x1D, 0x73, 0x91, 0x07, 0x21, 0xD6, 0x57, 0x38, 0x76, 0x77, 0xE3, 0x32, 0xE9, 0xC8, 0x81, 0x1C, 0x3F, 0xC1, 0xB9, 0x23, 0xB2, ++ 0xEE, 0x9C, 0x51, 0x2F, 0x6D, 0x09, 0xDF, 0x37, 0x2A, 0x5F, 0x97, 0xFA, 0xD7, 0x12, 0x33, 0x89, 0xCE, 0xE1, 0x97, 0xB5, 0xC2, 0x69, 0xE2, 0x21, 0xD7, 0xEE, 0xD3, 0x16, 0x0A, 0x52, 0x1E, 0x56, ++ 0xFF, 0x8A, 0xAF, 0xAB, 0x68, 0x61, 0x79, 0xD0, 0x9D, 0x78, 0xFC, 0x38, 0x7B, 0x3E, 0xA6, 0xA6, 0x72, 0x03, 0x4D, 0x24, 0xAC, 0x79, 0x99, 0xD1, 0x96, 0xB2, 0x31, 0x64, 0x75, 0xF3, 0x7D, 0xB8, ++ 0xE9, 0xED, 0x43, 0x1D, 0xF5, 0x83, 0x41, 0xFA, 0x88, 0x00, 0x3D, 0x3C, 0x64, 0x89, 0xE7, 0x80, 0x53, 0xD8, 0xE4, 0x4C, 0xE7, 0xE1, 0x6A, 0xEF, 0x41, 0x68, 0x59, 0xB3, 0xD2, 0xAE, 0xCE, 0x09, ++ 0x08, 0x6A, 0x74, 0x8B, 0x7B, 0xCF, 0xD1, 0x0F, 0x73, 0xE3, 0xCF, 0x8B, 0x31, 0xF0, 0xCC, 0x44, 0xDA, 0x05, 0x9C, 0x69, 0xAB, 0xA5, 0xBC, 0x8E, 0xFA, 0xD4, 0x5D, 0x3F, 0x37, 0x6A, 0xF3, 0xA0, ++ 0xDE, 0x6E, 0x16, 0x98, 0x78, 0xBD, 0x84, 0x2E, 0x28, 0x79, 0x8E, 0x47, 0x43, 0xF8, 0x43, 0x84, 0x4B, 0xCD, 0xF8, 0x50, 0x6F, 0x13, 0x63, 0x91, 0xEC, 0x8E, 0x72, 0x1D, 0xC2, 0xB6, 0x28, 0x2D, ++ 0x9C, 0x50, 0xFA, 0xB6, 0x53, 0xA6, 0xAB, 0xF2, 0x89, 0x47, 0x42, 0x0E, 0x8C, 0x22, 0xA9, 0xA4, 0x87, 0xD7, 0x6A, 0x93, 0x89, 0x33, 0xB3, 0x4E, 0x49, 0x7D, 0xA9, 0x53, 0x94, 0x17, 0x6B, 0x27, ++ 0x74, 0xC0, 0x9E, 0xF0, 0xBB, 0x1E, 0xD8, 0xC3, 0xB1, 0x31, 0xA2, 0x19, 0x57, 0xB3, 0x1A, 0x0B, 0x47, 0xCB, 0xFB, 0xFF, 0x05, 0x33, 0xCA, 0xF3, 0x31, 0x25, 0x22, 0x1D, 0xB6, 0xBA, 0x4A, 0x51, ++ 0x88, 0x64, 0x89, 0x2C, 0xF2, 0x1D, 0x3D, 0x4D, 0x58, 0xB5, 0x99, 0xA3, 0x7A, 0x08, 0xF3, 0x44, 0xAA, 0x7E, 0xF9, 0x8E, 0x7D, 0x7D, 0x9D, 0x33, 0x16, 0xA6, 0xB1, 0x15, 0xD9, 0xB8, 0xF2, 0x0F, ++ 0x93, 0xBC, 0x68, 0x65, 0x73, 0x46, 0x99, 0xEB, 0x54, 0xC8, 0x88, 0xD7, 0xE5, 0xA0, 0xAC, 0xAF, 0xD1, 0x91, 0x53, 0x52, 0xB2, 0x94, 0x24, 0x37, 0x12, 0xCF, 0xE8, 0x2F, 0x85, 0x24, 0x8B, 0x00, ++ 0x04, 0x5C, 0xF3, 0xD0, 0x90, 0xC0, 0xC0, 0x0D, 0x7C, 0xA0, 0xE3, 0xA1, 0xF1, 0x47, 0x70, 0x3F, 0xD9, 0x4F, 0x71, 0x7E, 0x49, 0xC8, 0x1A, 0x7C, 0x3A, 0x76, 0x94, 0x6E, 0x20, 0xA6, 0x3F, 0x3B, ++ 0x7C, 0x3E, 0xAB, 0xA9, 0x22, 0x5A, 0xBE, 0x0B, 0x34, 0xCB, 0x0C, 0xF2, 0x35, 0x06, 0x39, 0x67, 0xD1, 0x6B, 0xC8, 0xA6, 0x9C, 0x13, 0x0C, 0xCE, 0x28, 0x76, 0x15, 0xCC, 0x05, 0x31, 0x14, 0x16, ++ 0x7E, 0xAC, 0x4E, 0x95, 0xBB, 0xAB, 0xDF, 0xBB, 0xCF, 0x96, 0xBC, 0x0C, 0x0D, 0x65, 0xEA, 0x00, 0x0A, 0xEA, 0xF4, 0x90, 0xD7, 0x23, 0x95, 0x5B, 0xD1, 0xB4, 0xD6, 0x91, 0x54, 0xD2, 0x62, 0xF6, ++ 0xA6, 0xD3, 0x53, 0x4B, 0xB0, 0xBC, 0x39, 0x7C, 0x29, 0xEC, 0xC6, 0xB1, 0x44, 0x7B, 0x75, 0xC9, 0x53, 0xAF, 0x44, 0x1D, 0xE2, 0xE7, 0x13, 0x3A, 0x7A, 0xC9, 0x89, 0x88, 0xA7, 0xEF, 0x9E, 0x6E, ++ 0xE6, 0x35, 0x58, 0xAA, 0xAD, 0xA0, 0x60, 0x3B, 0xD5, 0x29, 0x77, 0x6F, 0x05, 0x55, 0x8D, 0x2D, 0xF5, 0x64, 0x1C, 0x41, 0x2E, 0x73, 0x47, 0x44, 0x0F, 0x65, 0xEB, 0x82, 0x3A, 0xFC, 0x7C, 0xCA, ++ 0xE6, 0xB9, 0x71, 0x08, 0xB8, 0x57, 0x28, 0x7A, 0x04, 0x86, 0xDB, 0xBE, 0x68, 0x9D, 0x77, 0x0C, 0xA9, 0x24, 0x71, 0x30, 0x9E, 0x73, 0xAD, 0x39, 0x0A, 0xBF, 0x56, 0x91, 0x2B, 0x2B, 0x7C, 0x49, ++ 0x24, 0x2C, 0xEC, 0x15, 0x7B, 0xDB, 0xBD, 0x49, 0x35, 0x53, 0x73, 0x5C, 0xB1, 0xD9, 0xB4, 0x0A, 0xFC, 0x21, 0x4D, 0xA1, 0x53, 0x35, 0x9C, 0x9D, 0xF5, 0x76, 0x13, 0x59, 0x01, 0xC2, 0xFD, 0xA5, ++ 0x8C, 0x00, 0x95, 0xB6, 0xFC, 0xE3, 0xFD, 0x07, 0x31, 0xDF, 0x34, 0x86, 0x3A, 0xF2, 0x88, 0x2D, 0x53, 0x77, 0x3C, 0xE7, 0xC1, 0x82, 0x47, 0x37, 0x22, 0xAA, 0x79, 0xA6, 0xB3, 0x7D, 0x3E, 0xDD, ++ 0xDE, 0x38, 0xFA, 0x71, 0xDF, 0x8C, 0x0E, 0xDC, 0x08, 0x1E, 0xFE, 0xD8, 0xCE, 0x60, 0x6E, 0x48, 0x29, 0x91, 0x80, 0xEC, 0x6F, 0xE3, 0x5F, 0xAB, 0x64, 0x99, 0x10, 0xC4, 0x8A, 0x6A, 0x29, 0xF9, ++ 0xD0, 0xF8, 0x55, 0x57, 0xE1, 0x0B, 0xC5, 0xAE, 0x2E, 0xCF, 0x02, 0x8A, 0xE3, 0x99, 0xF5, 0x5C, 0xD7, 0x97, 0x60, 0x28, 0x93, 0x5C, 0xC0, 0x3C, 0x0C, 0xAF, 0xD5, 0x00, 0x3C, 0x9E, 0xAE, 0xD2, ++ 0x47, 0xFB, 0xE3, 0x0A, 0x28, 0x4C, 0xC4, 0x47, 0x0A, 0x55, 0x25, 0xA6, 0x49, 0x8E, 0x1D, 0xBB, 0xD3, 0x08, 0x5C, 0x3F, 0x9D, 0x77, 0xC6, 0x06, 0x4D, 0x01, 0x81, 0xBC, 0x5A, 0x82, 0x95, 0x61, ++ 0x56, 0x0A, 0xA9, 0xA4, 0xEA, 0x81, 0x73, 0xD7, 0x93, 0x7A, 0x94, 0x28, 0x10, 0x9C, 0xB3, 0xA6, 0x6B, 0x2B, 0x3D, 0xE1, 0x1F, 0x88, 0xF5, 0x5A, 0xB2, 0x1E, 0xB4, 0x9B, 0x77, 0xA3, 0x97, 0x62, ++ 0xCA, 0x92, 0x64, 0xE0, 0x15, 0x65, 0x66, 0x76, 0x5E, 0x2D, 0x36, 0x26, 0xB7, 0x2B, 0x80, 0xBD, 0x14, 0x11, 0xE4, 0xEC, 0x53, 0x55, 0x28, 0x28, 0xA2, 0x4B, 0xC8, 0xCD, 0xC4, 0x7F, 0x46, 0x5F, ++ 0xDD, 0xF4, 0x77, 0x2C, 0x7B, 0xC0, 0x20, 0x66, 0x85, 0x40, 0x11, 0x28, 0x7F, 0x73, 0x9A, 0xBA, 0x60, 0x47, 0x59, 0x67, 0x47, 0xF4, 0x23, 0x4A, 0xE2, 0x27, 0xDB, 0xFF, 0xAB, 0xF0, 0xE1, 0x31, ++ 0x53, 0xE2, 0xE0, 0x69, 0xF0, 0xB7, 0x90, 0x25, 0x1B, 0xE8, 0x77, 0xFE, 0x5A, 0x19, 0x8E, 0x80, 0x82, 0x58, 0x63, 0x9F, 0x5E, 0x79, 0xD3, 0xD5, 0xCD, 0x16, 0xF1, 0xA5, 0x73, 0x72, 0x4D, 0xD6, ++ 0xA9, 0xF6, 0x99, 0x0C, 0x45, 0x02, 0x33, 0x4D, 0xC6, 0x6F, 0x65, 0x49, 0x34, 0x90, 0x67, 0x3A, 0xB3, 0x0D, 0xCA, 0x7C, 0x03, 0x1F, 0x0C, 0x21, 0x2C, 0x0D, 0x8B, 0xC9, 0xD0, 0xC8, 0x74, 0xB3, ++ 0x19, 0xA9, 0x7A, 0xD1, 0xCE, 0x93, 0x95, 0xD3, 0xD1, 0x54, 0x20, 0x31, 0x56, 0xC5, 0x1C, 0xC3, 0xB9, 0xCB, 0x13, 0xD0, 0xBA, 0x1B, 0xDF, 0x61, 0x8B, 0xC8, 0xEE, 0xCA, 0x9D, 0xDD, 0x94, 0x12, ++ 0x05, 0x0C, 0xFA, 0x09, 0x23, 0x57, 0x27, 0xAA, 0x50, 0xD4, 0x6F, 0x79, 0xAD, 0x6F, 0x3C, 0x5A, 0x1B, 0xB6, 0xB2, 0x84, 0xC8, 0x31, 0x1D, 0xCF, 0x93, 0x75, 0x68, 0x59, 0x70, 0x4D, 0xF8, 0xFC, ++ 0x3B, 0xB8, 0xD2, 0xF5, 0xE0, 0x94, 0xE0, 0x45, 0x02, 0x35, 0x49, 0x42, 0xE9, 0xC8, 0x52, 0xB2, 0x08, 0xD4, 0x90, 0x18, 0x34, 0x33, 0x2E, 0xBC, 0x60, 0x32, 0x70, 0xCB, 0x57, 0xED, 0x41, 0x8C, ++ 0x34, 0xCE, 0x48, 0xAA, ++ }, ++ .spki_len = 2630, ++ .spki = { ++ 0x30, 0x82, 0x0A, 0x42, 0x30, 0x0F, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0B, 0x07, 0x08, 0x07, 0x05, 0x00, 0x03, 0x82, 0x0A, 0x2D, 0x00, 0x30, 0x82, 0x0A, 0x28, 0x03, 0x21, ++ 0x00, 0x1C, 0x0E, 0xE1, 0x11, 0x1B, 0x08, 0x00, 0x3F, 0x28, 0xE6, 0x5E, 0x8B, 0x3B, 0xDE, 0xB0, 0x37, 0xCF, 0x8F, 0x22, 0x1D, 0xFC, 0xDA, 0xF5, 0x95, 0x0E, 0xDB, 0x38, 0xD5, 0x06, 0xD8, 0x5B, ++ 0xEF, 0x03, 0x82, 0x0A, 0x01, 0x00, 0x03, 0x23, 0x69, 0xA2, 0xCE, 0x57, 0x2F, 0xD0, 0x8B, 0xFC, 0x30, 0x4B, 0x48, 0x48, 0xE7, 0x8D, 0x75, 0x2D, 0x77, 0xE9, 0x7A, 0x28, 0xB9, 0x9B, 0x9B, 0xB6, ++ 0xFB, 0x5C, 0x7C, 0x63, 0x37, 0x51, 0x4B, 0x32, 0x1E, 0xCD, 0xC1, 0xFB, 0x66, 0x9F, 0x26, 0xD4, 0x17, 0x1A, 0xB4, 0x2B, 0x72, 0x72, 0x0E, 0xE7, 0x0E, 0x05, 0x19, 0xA6, 0xE1, 0xD3, 0xD6, 0xD9, ++ 0x91, 0x4E, 0xC1, 0xB2, 0x1C, 0xDE, 0x38, 0xB4, 0x1A, 0xAC, 0x1D, 0x3A, 0xBE, 0xE6, 0xF2, 0xB7, 0x49, 0x5C, 0x4C, 0x82, 0x0C, 0x1F, 0xC0, 0xCC, 0x9E, 0x71, 0xE2, 0x4C, 0xFB, 0x5C, 0x9C, 0x0D, ++ 0x8E, 0xEF, 0x42, 0x64, 0xAF, 0x48, 0x4F, 0xAE, 0x4D, 0x6E, 0x5D, 0xDE, 0x65, 0xD4, 0xDF, 0x72, 0xB6, 0x1C, 0x6D, 0xBD, 0x26, 0xF8, 0x61, 0xA5, 0xE0, 0xB8, 0x53, 0xAC, 0x54, 0x13, 0x22, 0x6F, ++ 0xEB, 0xBA, 0xBA, 0x5E, 0xB4, 0x74, 0xC6, 0xFB, 0x25, 0xA8, 0x26, 0x78, 0xEA, 0x16, 0x06, 0xB4, 0x52, 0xA2, 0x31, 0x12, 0x22, 0x10, 0x17, 0xB8, 0xC0, 0x73, 0xC1, 0x03, 0x78, 0xF9, 0x14, 0x56, ++ 0x41, 0xA8, 0xC0, 0x78, 0xC0, 0xED, 0x9E, 0x42, 0x16, 0x50, 0xF7, 0x48, 0x89, 0x25, 0x22, 0xAB, 0x9F, 0xB7, 0xD1, 0xFF, 0x8C, 0xF1, 0xCC, 0x71, 0xB8, 0x56, 0x6E, 0x8D, 0xA3, 0x3C, 0xD7, 0x36, ++ 0x17, 0x70, 0xC0, 0x44, 0x34, 0x9A, 0xC4, 0x40, 0xCC, 0xCD, 0xC6, 0xBB, 0xE3, 0x5E, 0x6C, 0x55, 0x78, 0x27, 0x66, 0xF3, 0x8E, 0x68, 0x8B, 0xF4, 0x78, 0x21, 0x03, 0x72, 0x99, 0xE3, 0x44, 0xEC, ++ 0xDE, 0xCA, 0x17, 0xAD, 0x5D, 0x15, 0xCD, 0x27, 0xA4, 0xF7, 0xB0, 0x70, 0x66, 0x11, 0x38, 0xED, 0xE8, 0xED, 0x72, 0xA8, 0x95, 0x9C, 0x5A, 0xE3, 0x6B, 0x1C, 0x46, 0x09, 0x4A, 0x53, 0xCB, 0x21, ++ 0xA7, 0xA4, 0x26, 0x73, 0xF1, 0x40, 0x1C, 0x2B, 0x25, 0x94, 0x94, 0x09, 0x0E, 0x2F, 0x53, 0xD7, 0xEE, 0x70, 0x63, 0x43, 0x1E, 0xE5, 0x85, 0x80, 0x02, 0xD8, 0x50, 0xAF, 0x90, 0x9C, 0x37, 0x83, ++ 0x43, 0x60, 0x10, 0xF7, 0xEA, 0x88, 0x62, 0x5A, 0x36, 0xA0, 0xF0, 0x18, 0x9F, 0xDE, 0x75, 0xB7, 0xE8, 0xC7, 0xE4, 0xB1, 0x9D, 0x85, 0x27, 0x00, 0x83, 0x28, 0xAD, 0xBC, 0x92, 0x9B, 0xBC, 0x86, ++ 0xE9, 0x64, 0xCF, 0xC4, 0x8B, 0x8C, 0xF1, 0xDA, 0x5D, 0x7E, 0xD3, 0x33, 0x3A, 0xB5, 0x5C, 0x15, 0x07, 0x28, 0x32, 0x21, 0x4A, 0x77, 0x9A, 0x5F, 0xD1, 0x0C, 0xC0, 0x40, 0x05, 0xF4, 0x6C, 0x1A, ++ 0xA8, 0x88, 0x4A, 0x16, 0x19, 0x92, 0x47, 0x2F, 0xD5, 0x35, 0xB9, 0x5E, 0xD1, 0x8B, 0xDE, 0x1C, 0x6D, 0x8C, 0xE6, 0x78, 0xD2, 0x81, 0x7D, 0x69, 0xF9, 0x05, 0x71, 0x10, 0x3E, 0x85, 0x20, 0xE7, ++ 0x31, 0x3C, 0xE7, 0xB9, 0x30, 0xC5, 0xEB, 0xFA, 0xF2, 0xF4, 0xEC, 0x75, 0x8B, 0x62, 0x6B, 0x55, 0x43, 0xA0, 0x68, 0xCD, 0xE0, 0xFD, 0x0E, 0x94, 0xE6, 0xA6, 0x44, 0x75, 0xB2, 0x32, 0x68, 0xBF, ++ 0x03, 0x80, 0xD0, 0x75, 0x50, 0x8F, 0x85, 0x12, 0x8C, 0xA2, 0x6F, 0x31, 0xA9, 0x0C, 0x4A, 0x7D, 0x28, 0x44, 0x0D, 0x54, 0xD4, 0x06, 0x6B, 0x40, 0x45, 0x88, 0x58, 0x8B, 0x4C, 0xCF, 0x85, 0x0B, ++ 0x97, 0x5C, 0x73, 0xAF, 0xE6, 0x8C, 0xBC, 0xD1, 0x02, 0x75, 0x5F, 0x61, 0xEB, 0x3E, 0x60, 0x32, 0x3C, 0x57, 0x6E, 0x52, 0x9E, 0xC0, 0xBF, 0x23, 0xBF, 0xA5, 0xBE, 0xA3, 0x9C, 0xB7, 0x3C, 0x37, ++ 0xE8, 0x39, 0x5D, 0x8D, 0xBD, 0x4C, 0x8D, 0xC8, 0xAB, 0x2F, 0x70, 0xA0, 0xBF, 0xC3, 0xA7, 0x8C, 0x0D, 0x41, 0x3F, 0x08, 0xD1, 0x4D, 0x63, 0x2B, 0xC0, 0x40, 0x3B, 0x03, 0x83, 0xDB, 0xBB, 0x22, ++ 0xBD, 0x9B, 0x11, 0x3C, 0x89, 0x45, 0x2A, 0xEA, 0xB1, 0x12, 0x10, 0x09, 0x79, 0x47, 0xFE, 0xAA, 0xA3, 0xC9, 0xF0, 0x5D, 0x1D, 0x30, 0x0C, 0x33, 0xA5, 0x5E, 0x3F, 0xBC, 0x81, 0x25, 0x9E, 0x86, ++ 0x27, 0x05, 0xC3, 0xA1, 0x3B, 0x9E, 0xE3, 0x5F, 0x6B, 0x23, 0xED, 0x10, 0xF4, 0xED, 0xEA, 0x95, 0x19, 0xFA, 0x91, 0xB7, 0xBC, 0xD0, 0xD5, 0x01, 0xB5, 0xED, 0x57, 0xD9, 0x04, 0x9F, 0xAB, 0x91, ++ 0xAA, 0x77, 0x9C, 0x72, 0x5F, 0xF8, 0xE9, 0xF7, 0x80, 0x17, 0xEA, 0x78, 0x07, 0xFA, 0x25, 0x4B, 0x71, 0x05, 0xE8, 0x26, 0xD0, 0x96, 0xC0, 0x1A, 0xDA, 0xE2, 0xC5, 0xD1, 0x38, 0x25, 0x1A, 0x92, ++ 0xA4, 0x78, 0xA3, 0x33, 0x73, 0xF4, 0xDE, 0x91, 0x2B, 0x83, 0xB6, 0xFB, 0x4B, 0x0D, 0x0D, 0xE6, 0xBC, 0x11, 0x18, 0xBB, 0x2F, 0xCF, 0xB0, 0x7B, 0xD2, 0x27, 0xA5, 0xF7, 0xF9, 0x91, 0x43, 0x9A, ++ 0x13, 0xDE, 0x12, 0x38, 0x18, 0x0C, 0xDC, 0x55, 0x11, 0x9E, 0x65, 0xC4, 0x18, 0x58, 0x4D, 0x80, 0x7A, 0x92, 0x6E, 0x4A, 0x9C, 0x0F, 0x70, 0x15, 0x5E, 0xE1, 0x96, 0xFB, 0x07, 0x65, 0x6D, 0x9A, ++ 0xA7, 0x98, 0x2B, 0x87, 0x95, 0xDB, 0xAD, 0x43, 0xD1, 0x05, 0x9C, 0xA7, 0xF5, 0x80, 0xD3, 0x32, 0x0C, 0x04, 0x38, 0xA5, 0xED, 0x5A, 0x70, 0x32, 0xB2, 0xE9, 0x59, 0x67, 0x84, 0x10, 0xF1, 0x1A, ++ 0xD9, 0x8B, 0xE8, 0x82, 0x6A, 0x44, 0x26, 0x26, 0x15, 0x64, 0x5D, 0x75, 0x9A, 0x86, 0x2B, 0x2A, 0xC5, 0x2D, 0x3B, 0x01, 0x4A, 0x25, 0xE8, 0x47, 0x3F, 0x1F, 0x1E, 0xA4, 0xCF, 0xA8, 0x19, 0x93, ++ 0x0A, 0xB3, 0xA3, 0x4D, 0x71, 0x0D, 0xEE, 0xE7, 0x0C, 0xA1, 0x3E, 0x88, 0xFD, 0x71, 0xAA, 0x06, 0x4E, 0x6C, 0xB4, 0x69, 0x7D, 0xE0, 0xE4, 0x63, 0xB1, 0x37, 0x0A, 0x6A, 0x3B, 0xFE, 0x98, 0xFD, ++ 0xFE, 0x7B, 0x54, 0x71, 0xFF, 0x8D, 0xF6, 0xA6, 0x87, 0x9F, 0xBE, 0xF9, 0xAF, 0xB3, 0x51, 0x9D, 0x78, 0x07, 0x57, 0xD6, 0x74, 0x40, 0xAC, 0x36, 0xE8, 0x37, 0xBA, 0xC3, 0x83, 0x3E, 0xEA, 0xA9, ++ 0x80, 0xBD, 0x82, 0xB7, 0x93, 0x64, 0x36, 0xA0, 0x30, 0x7D, 0x16, 0x4B, 0x64, 0x38, 0x86, 0x9A, 0xE6, 0x06, 0xE9, 0x80, 0x51, 0x8E, 0x91, 0x3D, 0x0E, 0xE3, 0x02, 0x39, 0x6E, 0xF4, 0xEB, 0x25, ++ 0xD9, 0x86, 0x6E, 0x4B, 0xAF, 0xA1, 0x01, 0xE5, 0x99, 0x29, 0x31, 0x36, 0x1C, 0x4A, 0x98, 0x22, 0x53, 0xD5, 0x8A, 0xBE, 0x3B, 0xD5, 0x71, 0x07, 0x63, 0x5A, 0x46, 0xF0, 0x95, 0x12, 0x08, 0x5F, ++ 0x4A, 0xDA, 0x08, 0xEC, 0x8B, 0x1B, 0x39, 0x10, 0xB0, 0x15, 0x3B, 0x2A, 0xAF, 0xCA, 0xE5, 0x03, 0x3E, 0xDD, 0x41, 0x53, 0x24, 0x8D, 0xCD, 0x85, 0xB0, 0x2C, 0x9A, 0x25, 0xD8, 0xBD, 0xC4, 0x06, ++ 0x8B, 0xB8, 0x57, 0x41, 0x72, 0x62, 0x97, 0xA2, 0x5A, 0xEC, 0x55, 0xC4, 0x4A, 0xA2, 0x80, 0x59, 0xB7, 0x1B, 0xB9, 0xF3, 0x40, 0x67, 0x88, 0x7A, 0xDE, 0x4C, 0x1C, 0xA4, 0x90, 0x8B, 0x19, 0xB3, ++ 0xD7, 0x81, 0x23, 0x45, 0x38, 0x76, 0xDB, 0x4D, 0xCE, 0xB4, 0x27, 0x73, 0x06, 0x95, 0x72, 0xCD, 0x87, 0x77, 0xE6, 0x2C, 0xFB, 0xAF, 0x72, 0x03, 0xF0, 0x20, 0xF2, 0x81, 0xA6, 0x67, 0x8F, 0x79, ++ 0x07, 0x20, 0xEA, 0xA2, 0x0E, 0x34, 0x32, 0x7D, 0x7A, 0x63, 0x68, 0x8B, 0x09, 0xA0, 0x1F, 0x4D, 0x70, 0x88, 0xF7, 0xB5, 0x05, 0x9E, 0xDD, 0xEB, 0x45, 0xC0, 0xCE, 0x39, 0x32, 0x1C, 0x79, 0x52, ++ 0x1D, 0x79, 0xA5, 0x9E, 0xCD, 0xD4, 0x68, 0xCE, 0xD0, 0xEA, 0x82, 0xCA, 0x48, 0x49, 0x28, 0x70, 0x2F, 0x57, 0xD6, 0xFC, 0x18, 0xD3, 0x47, 0xAF, 0x3E, 0xD2, 0x2A, 0xAF, 0x45, 0xAB, 0xB0, 0xF2, ++ 0x0B, 0xAB, 0x9E, 0x01, 0x55, 0x76, 0x07, 0xAE, 0x3E, 0xD9, 0xCF, 0x0E, 0x26, 0xD3, 0x4D, 0x30, 0x54, 0x49, 0x66, 0x9E, 0xC6, 0xFC, 0x1B, 0xEC, 0xEA, 0xDC, 0xE1, 0x83, 0xF7, 0xA5, 0x94, 0xCE, ++ 0xA1, 0x96, 0xD0, 0x59, 0xA1, 0xE5, 0x50, 0xE5, 0x47, 0x86, 0x6C, 0xC0, 0x87, 0x33, 0x3F, 0x03, 0x0E, 0x62, 0x8F, 0x2C, 0xF1, 0x14, 0x79, 0x25, 0x41, 0x0E, 0xD0, 0x42, 0x1D, 0xC7, 0x50, 0x61, ++ 0x38, 0xB1, 0xD1, 0x90, 0x99, 0xC6, 0x95, 0xE1, 0xAF, 0xDA, 0xCE, 0x41, 0x53, 0x82, 0x5B, 0x66, 0xA8, 0xEC, 0xF5, 0x5A, 0x02, 0x1D, 0x21, 0xEB, 0x9F, 0x84, 0x8F, 0xE5, 0x5C, 0x21, 0x76, 0x9A, ++ 0x75, 0x5F, 0xA9, 0x80, 0x7E, 0xF7, 0x3A, 0x6C, 0x5B, 0xA1, 0x5A, 0x06, 0x34, 0x7D, 0x3F, 0x1C, 0x5C, 0x61, 0x9A, 0x31, 0x55, 0x98, 0x62, 0x91, 0x06, 0xAC, 0x0B, 0x86, 0xAE, 0x0D, 0x8E, 0x55, ++ 0x57, 0x82, 0x92, 0x51, 0x72, 0x58, 0xAE, 0x85, 0xF7, 0x2E, 0x73, 0x7A, 0xF5, 0x63, 0x8D, 0x09, 0x6B, 0x76, 0xA3, 0xC5, 0x7F, 0x1B, 0x9C, 0x80, 0xE7, 0x70, 0xA2, 0xD4, 0xEA, 0x4E, 0x42, 0xFE, ++ 0x46, 0x9A, 0xD4, 0x21, 0x28, 0x52, 0x41, 0x96, 0x0A, 0x8A, 0x86, 0x35, 0x5E, 0xF2, 0x2F, 0x58, 0x3F, 0xE3, 0xBA, 0xCA, 0xDF, 0x8D, 0xA3, 0x1D, 0x5C, 0x2D, 0xE2, 0x54, 0x16, 0x1B, 0xC6, 0xD1, ++ 0x0F, 0x98, 0x41, 0xDD, 0x27, 0xED, 0x46, 0x2A, 0x6B, 0x94, 0xB6, 0xDE, 0xEA, 0x90, 0xCB, 0xAB, 0x68, 0x7F, 0xB8, 0x4B, 0x56, 0x39, 0x5D, 0xA7, 0x63, 0xAB, 0x4B, 0x7F, 0xE3, 0x09, 0x5D, 0x57, ++ 0x2D, 0x77, 0xEF, 0xF3, 0xFF, 0x0D, 0x8F, 0x9D, 0x19, 0xAA, 0x5A, 0xF7, 0xB6, 0x76, 0x05, 0x3D, 0xBE, 0xF6, 0x4E, 0x61, 0xDD, 0x0A, 0x41, 0xD4, 0x02, 0x31, 0x8E, 0x33, 0x08, 0x66, 0x91, 0x06, ++ 0x25, 0x9B, 0xF7, 0xA4, 0xCE, 0x31, 0xB3, 0x46, 0xA9, 0xE9, 0x83, 0xED, 0xAB, 0xA0, 0x51, 0x80, 0x14, 0x9A, 0xB0, 0x57, 0xF9, 0x97, 0x29, 0x77, 0xDA, 0x7C, 0x6F, 0x46, 0xE0, 0xCD, 0xF8, 0x6F, ++ 0x30, 0x91, 0xF0, 0x4F, 0xD4, 0xE8, 0x3C, 0x60, 0x22, 0xE1, 0x8C, 0xE4, 0x38, 0x2B, 0x54, 0xD5, 0xDA, 0xBA, 0x82, 0xE4, 0xDF, 0x1E, 0x53, 0xBF, 0x31, 0xFE, 0x4B, 0xB6, 0x5A, 0x85, 0x24, 0xED, ++ 0xA8, 0x3F, 0xD2, 0x9D, 0x07, 0xE4, 0x97, 0x47, 0xB7, 0x52, 0x91, 0xCB, 0xC8, 0xF8, 0xEE, 0x14, 0x15, 0xEC, 0x92, 0x1E, 0x19, 0x02, 0x2A, 0xDE, 0x2C, 0x04, 0x7E, 0x4D, 0xF3, 0x50, 0x72, 0x89, ++ 0xE9, 0xD7, 0x9A, 0x8E, 0x69, 0x92, 0xB4, 0x8B, 0x88, 0x64, 0x20, 0x4A, 0x41, 0x6B, 0x76, 0x9C, 0xC7, 0x87, 0xD6, 0xDF, 0x44, 0x07, 0xE9, 0x3D, 0x12, 0x1F, 0x7F, 0xBE, 0xE0, 0xE4, 0x08, 0x96, ++ 0x3E, 0x06, 0x09, 0xA9, 0xC7, 0x5C, 0xB3, 0x11, 0x7C, 0xA5, 0x83, 0xDF, 0x6E, 0x79, 0xF3, 0x1C, 0x63, 0x5B, 0xF0, 0xF1, 0xBE, 0x98, 0xDF, 0x55, 0x07, 0x27, 0xA4, 0x5D, 0x3C, 0xA3, 0x37, 0xD7, ++ 0x9D, 0xE5, 0xDC, 0xDB, 0x0B, 0x91, 0xCA, 0xBB, 0xC3, 0x0D, 0x7E, 0xF0, 0xAE, 0x1C, 0xA1, 0xE9, 0x49, 0x04, 0xF7, 0x8C, 0x1F, 0xD8, 0xFB, 0xA8, 0x75, 0x45, 0xFD, 0xC1, 0x74, 0xAD, 0x81, 0x90, ++ 0xF9, 0xB5, 0xED, 0x7B, 0x58, 0x69, 0x49, 0x4F, 0xFA, 0x91, 0x03, 0x3F, 0xDC, 0x61, 0x17, 0xBF, 0x66, 0x2E, 0xC5, 0xF2, 0xAF, 0x26, 0x34, 0xBA, 0x3F, 0x8C, 0x02, 0x21, 0x0F, 0x1C, 0x9B, 0xCD, ++ 0xDA, 0x9B, 0xB3, 0x97, 0x60, 0xE0, 0x0F, 0x25, 0xA7, 0x27, 0x0C, 0x34, 0x56, 0x66, 0xFB, 0x6D, 0xF8, 0x5C, 0x91, 0x9A, 0xA1, 0x50, 0xCA, 0x7F, 0xC8, 0x0F, 0xC0, 0xEA, 0xCF, 0xE2, 0x42, 0xEF, ++ 0x55, 0xF4, 0x29, 0x80, 0x63, 0x62, 0x8E, 0x61, 0x05, 0x6C, 0x96, 0x6D, 0xB9, 0x96, 0x44, 0x28, 0xD9, 0xCE, 0x99, 0x10, 0x82, 0x71, 0xE2, 0x9A, 0x12, 0x32, 0x8E, 0x23, 0x99, 0x97, 0x34, 0xE0, ++ 0x36, 0xF1, 0x8A, 0x0E, 0xB8, 0xF0, 0x30, 0xE8, 0x80, 0x62, 0xC5, 0x67, 0x17, 0xE7, 0xA3, 0x63, 0x14, 0xE4, 0x4E, 0xCF, 0x35, 0x7F, 0xF5, 0x6E, 0xED, 0xF9, 0x0D, 0x3F, 0xB1, 0x1B, 0x22, 0xA1, ++ 0xB2, 0x59, 0x05, 0xB3, 0x79, 0xFC, 0xCA, 0x5C, 0xA1, 0xAC, 0xB9, 0x56, 0xE1, 0x78, 0xAD, 0x3F, 0x51, 0xD5, 0x35, 0xAD, 0x11, 0x98, 0x13, 0xB1, 0xE7, 0x0F, 0x73, 0x17, 0x65, 0x1B, 0xC7, 0x5C, ++ 0xAC, 0x64, 0x27, 0x6B, 0xB9, 0x81, 0x10, 0xB5, 0x4E, 0xA0, 0xEF, 0x34, 0x54, 0x1D, 0x73, 0x91, 0x07, 0x21, 0xD6, 0x57, 0x38, 0x76, 0x77, 0xE3, 0x32, 0xE9, 0xC8, 0x81, 0x1C, 0x3F, 0xC1, 0xB9, ++ 0x23, 0xB2, 0xEE, 0x9C, 0x51, 0x2F, 0x6D, 0x09, 0xDF, 0x37, 0x2A, 0x5F, 0x97, 0xFA, 0xD7, 0x12, 0x33, 0x89, 0xCE, 0xE1, 0x97, 0xB5, 0xC2, 0x69, 0xE2, 0x21, 0xD7, 0xEE, 0xD3, 0x16, 0x0A, 0x52, ++ 0x1E, 0x56, 0xFF, 0x8A, 0xAF, 0xAB, 0x68, 0x61, 0x79, 0xD0, 0x9D, 0x78, 0xFC, 0x38, 0x7B, 0x3E, 0xA6, 0xA6, 0x72, 0x03, 0x4D, 0x24, 0xAC, 0x79, 0x99, 0xD1, 0x96, 0xB2, 0x31, 0x64, 0x75, 0xF3, ++ 0x7D, 0xB8, 0xE9, 0xED, 0x43, 0x1D, 0xF5, 0x83, 0x41, 0xFA, 0x88, 0x00, 0x3D, 0x3C, 0x64, 0x89, 0xE7, 0x80, 0x53, 0xD8, 0xE4, 0x4C, 0xE7, 0xE1, 0x6A, 0xEF, 0x41, 0x68, 0x59, 0xB3, 0xD2, 0xAE, ++ 0xCE, 0x09, 0x08, 0x6A, 0x74, 0x8B, 0x7B, 0xCF, 0xD1, 0x0F, 0x73, 0xE3, 0xCF, 0x8B, 0x31, 0xF0, 0xCC, 0x44, 0xDA, 0x05, 0x9C, 0x69, 0xAB, 0xA5, 0xBC, 0x8E, 0xFA, 0xD4, 0x5D, 0x3F, 0x37, 0x6A, ++ 0xF3, 0xA0, 0xDE, 0x6E, 0x16, 0x98, 0x78, 0xBD, 0x84, 0x2E, 0x28, 0x79, 0x8E, 0x47, 0x43, 0xF8, 0x43, 0x84, 0x4B, 0xCD, 0xF8, 0x50, 0x6F, 0x13, 0x63, 0x91, 0xEC, 0x8E, 0x72, 0x1D, 0xC2, 0xB6, ++ 0x28, 0x2D, 0x9C, 0x50, 0xFA, 0xB6, 0x53, 0xA6, 0xAB, 0xF2, 0x89, 0x47, 0x42, 0x0E, 0x8C, 0x22, 0xA9, 0xA4, 0x87, 0xD7, 0x6A, 0x93, 0x89, 0x33, 0xB3, 0x4E, 0x49, 0x7D, 0xA9, 0x53, 0x94, 0x17, ++ 0x6B, 0x27, 0x74, 0xC0, 0x9E, 0xF0, 0xBB, 0x1E, 0xD8, 0xC3, 0xB1, 0x31, 0xA2, 0x19, 0x57, 0xB3, 0x1A, 0x0B, 0x47, 0xCB, 0xFB, 0xFF, 0x05, 0x33, 0xCA, 0xF3, 0x31, 0x25, 0x22, 0x1D, 0xB6, 0xBA, ++ 0x4A, 0x51, 0x88, 0x64, 0x89, 0x2C, 0xF2, 0x1D, 0x3D, 0x4D, 0x58, 0xB5, 0x99, 0xA3, 0x7A, 0x08, 0xF3, 0x44, 0xAA, 0x7E, 0xF9, 0x8E, 0x7D, 0x7D, 0x9D, 0x33, 0x16, 0xA6, 0xB1, 0x15, 0xD9, 0xB8, ++ 0xF2, 0x0F, 0x93, 0xBC, 0x68, 0x65, 0x73, 0x46, 0x99, 0xEB, 0x54, 0xC8, 0x88, 0xD7, 0xE5, 0xA0, 0xAC, 0xAF, 0xD1, 0x91, 0x53, 0x52, 0xB2, 0x94, 0x24, 0x37, 0x12, 0xCF, 0xE8, 0x2F, 0x85, 0x24, ++ 0x8B, 0x00, 0x04, 0x5C, 0xF3, 0xD0, 0x90, 0xC0, 0xC0, 0x0D, 0x7C, 0xA0, 0xE3, 0xA1, 0xF1, 0x47, 0x70, 0x3F, 0xD9, 0x4F, 0x71, 0x7E, 0x49, 0xC8, 0x1A, 0x7C, 0x3A, 0x76, 0x94, 0x6E, 0x20, 0xA6, ++ 0x3F, 0x3B, 0x7C, 0x3E, 0xAB, 0xA9, 0x22, 0x5A, 0xBE, 0x0B, 0x34, 0xCB, 0x0C, 0xF2, 0x35, 0x06, 0x39, 0x67, 0xD1, 0x6B, 0xC8, 0xA6, 0x9C, 0x13, 0x0C, 0xCE, 0x28, 0x76, 0x15, 0xCC, 0x05, 0x31, ++ 0x14, 0x16, 0x7E, 0xAC, 0x4E, 0x95, 0xBB, 0xAB, 0xDF, 0xBB, 0xCF, 0x96, 0xBC, 0x0C, 0x0D, 0x65, 0xEA, 0x00, 0x0A, 0xEA, 0xF4, 0x90, 0xD7, 0x23, 0x95, 0x5B, 0xD1, 0xB4, 0xD6, 0x91, 0x54, 0xD2, ++ 0x62, 0xF6, 0xA6, 0xD3, 0x53, 0x4B, 0xB0, 0xBC, 0x39, 0x7C, 0x29, 0xEC, 0xC6, 0xB1, 0x44, 0x7B, 0x75, 0xC9, 0x53, 0xAF, 0x44, 0x1D, 0xE2, 0xE7, 0x13, 0x3A, 0x7A, 0xC9, 0x89, 0x88, 0xA7, 0xEF, ++ 0x9E, 0x6E, 0xE6, 0x35, 0x58, 0xAA, 0xAD, 0xA0, 0x60, 0x3B, 0xD5, 0x29, 0x77, 0x6F, 0x05, 0x55, 0x8D, 0x2D, 0xF5, 0x64, 0x1C, 0x41, 0x2E, 0x73, 0x47, 0x44, 0x0F, 0x65, 0xEB, 0x82, 0x3A, 0xFC, ++ 0x7C, 0xCA, 0xE6, 0xB9, 0x71, 0x08, 0xB8, 0x57, 0x28, 0x7A, 0x04, 0x86, 0xDB, 0xBE, 0x68, 0x9D, 0x77, 0x0C, 0xA9, 0x24, 0x71, 0x30, 0x9E, 0x73, 0xAD, 0x39, 0x0A, 0xBF, 0x56, 0x91, 0x2B, 0x2B, ++ 0x7C, 0x49, 0x24, 0x2C, 0xEC, 0x15, 0x7B, 0xDB, 0xBD, 0x49, 0x35, 0x53, 0x73, 0x5C, 0xB1, 0xD9, 0xB4, 0x0A, 0xFC, 0x21, 0x4D, 0xA1, 0x53, 0x35, 0x9C, 0x9D, 0xF5, 0x76, 0x13, 0x59, 0x01, 0xC2, ++ 0xFD, 0xA5, 0x8C, 0x00, 0x95, 0xB6, 0xFC, 0xE3, 0xFD, 0x07, 0x31, 0xDF, 0x34, 0x86, 0x3A, 0xF2, 0x88, 0x2D, 0x53, 0x77, 0x3C, 0xE7, 0xC1, 0x82, 0x47, 0x37, 0x22, 0xAA, 0x79, 0xA6, 0xB3, 0x7D, ++ 0x3E, 0xDD, 0xDE, 0x38, 0xFA, 0x71, 0xDF, 0x8C, 0x0E, 0xDC, 0x08, 0x1E, 0xFE, 0xD8, 0xCE, 0x60, 0x6E, 0x48, 0x29, 0x91, 0x80, 0xEC, 0x6F, 0xE3, 0x5F, 0xAB, 0x64, 0x99, 0x10, 0xC4, 0x8A, 0x6A, ++ 0x29, 0xF9, 0xD0, 0xF8, 0x55, 0x57, 0xE1, 0x0B, 0xC5, 0xAE, 0x2E, 0xCF, 0x02, 0x8A, 0xE3, 0x99, 0xF5, 0x5C, 0xD7, 0x97, 0x60, 0x28, 0x93, 0x5C, 0xC0, 0x3C, 0x0C, 0xAF, 0xD5, 0x00, 0x3C, 0x9E, ++ 0xAE, 0xD2, 0x47, 0xFB, 0xE3, 0x0A, 0x28, 0x4C, 0xC4, 0x47, 0x0A, 0x55, 0x25, 0xA6, 0x49, 0x8E, 0x1D, 0xBB, 0xD3, 0x08, 0x5C, 0x3F, 0x9D, 0x77, 0xC6, 0x06, 0x4D, 0x01, 0x81, 0xBC, 0x5A, 0x82, ++ 0x95, 0x61, 0x56, 0x0A, 0xA9, 0xA4, 0xEA, 0x81, 0x73, 0xD7, 0x93, 0x7A, 0x94, 0x28, 0x10, 0x9C, 0xB3, 0xA6, 0x6B, 0x2B, 0x3D, 0xE1, 0x1F, 0x88, 0xF5, 0x5A, 0xB2, 0x1E, 0xB4, 0x9B, 0x77, 0xA3, ++ 0x97, 0x62, 0xCA, 0x92, 0x64, 0xE0, 0x15, 0x65, 0x66, 0x76, 0x5E, 0x2D, 0x36, 0x26, 0xB7, 0x2B, 0x80, 0xBD, 0x14, 0x11, 0xE4, 0xEC, 0x53, 0x55, 0x28, 0x28, 0xA2, 0x4B, 0xC8, 0xCD, 0xC4, 0x7F, ++ 0x46, 0x5F, 0xDD, 0xF4, 0x77, 0x2C, 0x7B, 0xC0, 0x20, 0x66, 0x85, 0x40, 0x11, 0x28, 0x7F, 0x73, 0x9A, 0xBA, 0x60, 0x47, 0x59, 0x67, 0x47, 0xF4, 0x23, 0x4A, 0xE2, 0x27, 0xDB, 0xFF, 0xAB, 0xF0, ++ 0xE1, 0x31, 0x53, 0xE2, 0xE0, 0x69, 0xF0, 0xB7, 0x90, 0x25, 0x1B, 0xE8, 0x77, 0xFE, 0x5A, 0x19, 0x8E, 0x80, 0x82, 0x58, 0x63, 0x9F, 0x5E, 0x79, 0xD3, 0xD5, 0xCD, 0x16, 0xF1, 0xA5, 0x73, 0x72, ++ 0x4D, 0xD6, 0xA9, 0xF6, 0x99, 0x0C, 0x45, 0x02, 0x33, 0x4D, 0xC6, 0x6F, 0x65, 0x49, 0x34, 0x90, 0x67, 0x3A, 0xB3, 0x0D, 0xCA, 0x7C, 0x03, 0x1F, 0x0C, 0x21, 0x2C, 0x0D, 0x8B, 0xC9, 0xD0, 0xC8, ++ 0x74, 0xB3, 0x19, 0xA9, 0x7A, 0xD1, 0xCE, 0x93, 0x95, 0xD3, 0xD1, 0x54, 0x20, 0x31, 0x56, 0xC5, 0x1C, 0xC3, 0xB9, 0xCB, 0x13, 0xD0, 0xBA, 0x1B, 0xDF, 0x61, 0x8B, 0xC8, 0xEE, 0xCA, 0x9D, 0xDD, ++ 0x94, 0x12, 0x05, 0x0C, 0xFA, 0x09, 0x23, 0x57, 0x27, 0xAA, 0x50, 0xD4, 0x6F, 0x79, 0xAD, 0x6F, 0x3C, 0x5A, 0x1B, 0xB6, 0xB2, 0x84, 0xC8, 0x31, 0x1D, 0xCF, 0x93, 0x75, 0x68, 0x59, 0x70, 0x4D, ++ 0xF8, 0xFC, 0x3B, 0xB8, 0xD2, 0xF5, 0xE0, 0x94, 0xE0, 0x45, 0x02, 0x35, 0x49, 0x42, 0xE9, 0xC8, 0x52, 0xB2, 0x08, 0xD4, 0x90, 0x18, 0x34, 0x33, 0x2E, 0xBC, 0x60, 0x32, 0x70, 0xCB, 0x57, 0xED, ++ 0x41, 0x8C, 0x34, 0xCE, 0x48, 0xAA, ++ }, ++ .msg_len = 33, ++ .msg = { 0xD8, 0x1C, 0x4D, 0x8D, 0x73, 0x4F, 0xCB, 0xFB, 0xEA, 0xDE, 0x3D, 0x3F, 0x8A, 0x03, 0x9F, 0xAA, 0x2A, 0x2C, 0x99, 0x57, 0xE8, 0x35, 0xAD, 0x55, 0xB2, 0x2E, 0x75, 0xBF, 0x57, 0xBB, 0x55, 0x6A, ++ 0xC8 }, ++ .sig_len = 4595, ++ .sig = { ++ 0xBB, 0xF8, 0x5F, 0xFD, 0x0E, 0x01, 0xC8, 0x0C, 0x8C, 0x1C, 0x19, 0x31, 0xCD, 0x64, 0x0B, 0xF2, 0x73, 0xD4, 0x96, 0x93, 0xC4, 0xC4, 0xBF, 0xF5, 0xDD, 0x20, 0xD9, 0x4C, 0xF3, 0x75, 0x7A, 0xBD, ++ 0x45, 0x47, 0x3B, 0x9D, 0x01, 0xB1, 0x87, 0x13, 0x05, 0xDA, 0x90, 0xED, 0xC6, 0x70, 0x7D, 0x54, 0x17, 0x12, 0x94, 0x67, 0xF6, 0x1F, 0x72, 0x39, 0x50, 0xC1, 0xAE, 0xDF, 0x70, 0x55, 0xEC, 0x1D, ++ 0x47, 0x77, 0xAD, 0x88, 0x08, 0xE8, 0xB3, 0x47, 0xD1, 0xD0, 0x92, 0x1E, 0xBA, 0xB8, 0x90, 0xCC, 0xA8, 0xE3, 0xA0, 0xDF, 0xD3, 0x00, 0x3D, 0xE9, 0xF9, 0xCB, 0x4A, 0x97, 0xD8, 0x84, 0xE1, 0xDD, ++ 0x04, 0x2C, 0x95, 0x8B, 0x81, 0x6F, 0x72, 0x37, 0x03, 0x2B, 0x20, 0xF8, 0x39, 0x9A, 0x51, 0x82, 0xF4, 0x65, 0x25, 0xEC, 0x35, 0x7D, 0x2F, 0x03, 0x43, 0x74, 0x03, 0xE0, 0xCB, 0x5D, 0xCA, 0x4A, ++ 0x13, 0xFD, 0x2F, 0x1B, 0x09, 0x20, 0x5B, 0x98, 0x90, 0xF0, 0x2E, 0xE5, 0xAF, 0x54, 0x29, 0x43, 0xE6, 0xF9, 0x37, 0x5E, 0xD0, 0x8A, 0x38, 0x53, 0x30, 0x42, 0xD6, 0xBB, 0xD5, 0x0F, 0x37, 0x25, ++ 0x1B, 0x15, 0x90, 0xF6, 0x3B, 0x4B, 0x58, 0xA7, 0xD1, 0xE1, 0xF3, 0x1C, 0xE6, 0x2E, 0x3D, 0x2A, 0xA9, 0x1E, 0x1C, 0x76, 0x7B, 0x9C, 0x3F, 0x5C, 0xB2, 0x68, 0x23, 0xF9, 0x7A, 0xD1, 0xD9, 0xFF, ++ 0xAB, 0x28, 0x75, 0xEB, 0x68, 0xFF, 0xA9, 0xB0, 0x99, 0x46, 0xEF, 0x1D, 0x70, 0x12, 0xC0, 0x29, 0x19, 0xEF, 0x13, 0xCB, 0x10, 0x0C, 0x2E, 0x2C, 0x79, 0x87, 0xA0, 0xA5, 0x78, 0x5B, 0x5F, 0x3F, ++ 0x3B, 0x94, 0x8B, 0x7F, 0xD6, 0x4B, 0x85, 0xB1, 0x65, 0xAE, 0x2F, 0xBF, 0x3C, 0x47, 0xE0, 0x39, 0xC3, 0x07, 0x3C, 0xA7, 0x8F, 0xC9, 0x00, 0xBB, 0xCD, 0xC0, 0x69, 0xFE, 0x90, 0x68, 0x85, 0xD5, ++ 0xB1, 0x37, 0x40, 0xA2, 0x23, 0xAF, 0x52, 0x54, 0xF9, 0x8C, 0x1D, 0x58, 0xE2, 0xFC, 0x92, 0xB0, 0x37, 0x3E, 0x2A, 0x93, 0x33, 0x53, 0xCC, 0x3E, 0xEC, 0xD3, 0x9F, 0x71, 0xD5, 0x9C, 0xFA, 0x09, ++ 0x29, 0x4E, 0x38, 0x26, 0x2A, 0x44, 0x89, 0x40, 0x0D, 0x22, 0x29, 0x82, 0xF9, 0xC7, 0x80, 0xCD, 0x07, 0x31, 0xD4, 0xEE, 0xD9, 0x16, 0xC5, 0xA3, 0x1A, 0xBC, 0xD0, 0x2A, 0x59, 0x0E, 0xD8, 0xC6, ++ 0xFF, 0xE1, 0x8B, 0x5F, 0xC7, 0xB6, 0x88, 0x8E, 0x74, 0x72, 0x69, 0x40, 0xD0, 0x2C, 0xCC, 0x62, 0xD7, 0x8B, 0xCA, 0xED, 0xDA, 0x2E, 0x02, 0x8E, 0x53, 0x5C, 0xDA, 0xFC, 0x0E, 0x09, 0x1B, 0xEF, ++ 0x50, 0xDE, 0x2D, 0xFD, 0x12, 0x4F, 0x1E, 0x85, 0x4F, 0x56, 0x85, 0x27, 0xAE, 0xF4, 0xDC, 0x84, 0x55, 0xFD, 0xA0, 0x1B, 0x6D, 0x0D, 0x43, 0x04, 0x8E, 0xD5, 0xAB, 0x42, 0xB1, 0xD4, 0x08, 0x13, ++ 0x99, 0x4B, 0x9F, 0x6A, 0xA0, 0xC0, 0x36, 0xC0, 0xDC, 0xF0, 0x8F, 0x46, 0xB0, 0x0F, 0xDA, 0x01, 0x44, 0x77, 0xCF, 0x87, 0x9B, 0x8F, 0xE5, 0xEA, 0xC4, 0x54, 0x1B, 0x82, 0xDA, 0x00, 0xB4, 0x34, ++ 0x60, 0x46, 0x86, 0x5B, 0x09, 0x2E, 0xD6, 0xAE, 0x01, 0x15, 0xFC, 0x83, 0x4B, 0x58, 0xF7, 0x5F, 0xF9, 0x28, 0xD7, 0xD9, 0x9A, 0xC8, 0x69, 0x1F, 0xF7, 0x00, 0x20, 0xAB, 0xA2, 0x54, 0x80, 0xAB, ++ 0xBC, 0xC7, 0x09, 0xE4, 0x6E, 0xC5, 0x10, 0xF4, 0xB8, 0xCA, 0xDD, 0x60, 0x04, 0x59, 0x54, 0xD3, 0xED, 0xDA, 0x7C, 0x23, 0xE0, 0x3D, 0x91, 0x69, 0x4D, 0x3C, 0x3E, 0xA2, 0x92, 0xC9, 0x25, 0x35, ++ 0xE6, 0xB5, 0xFE, 0x17, 0x1C, 0x56, 0x7D, 0xF3, 0x72, 0x94, 0x06, 0xCD, 0xBA, 0x2A, 0x5E, 0xFA, 0x59, 0xF1, 0x56, 0xE9, 0xCC, 0xD0, 0x30, 0x2F, 0xDC, 0x0F, 0x8B, 0xB7, 0x59, 0xB0, 0x5D, 0xFF, ++ 0x5D, 0xD8, 0x02, 0xCE, 0x4D, 0x55, 0x06, 0xA1, 0x9A, 0x69, 0xD7, 0x0B, 0x3A, 0xB4, 0x8A, 0xB1, 0x7A, 0x2F, 0xE5, 0x95, 0x89, 0xF7, 0x30, 0x83, 0xCC, 0xA5, 0x47, 0xFF, 0xB3, 0xF1, 0x46, 0x83, ++ 0xC9, 0x14, 0xBC, 0x13, 0x45, 0xE7, 0x38, 0x7E, 0x83, 0x1E, 0xE6, 0x03, 0x75, 0x01, 0x49, 0x5C, 0x92, 0xC3, 0x57, 0x70, 0x5A, 0x69, 0xF9, 0x52, 0xA2, 0xF7, 0xCD, 0x30, 0xE0, 0x33, 0x36, 0xAF, ++ 0xAA, 0xFC, 0x9C, 0x56, 0x60, 0x4C, 0xD5, 0x45, 0xE8, 0x2A, 0xA1, 0x2A, 0xF0, 0x58, 0xDA, 0xBA, 0x97, 0x43, 0x87, 0xFE, 0x8D, 0xCD, 0xEC, 0x69, 0x9A, 0x1E, 0x38, 0x53, 0xE2, 0x6D, 0x29, 0xE1, ++ 0x57, 0x81, 0x89, 0xAA, 0x8C, 0x2B, 0xBA, 0x15, 0x50, 0xDF, 0xBE, 0xDD, 0x1E, 0x4F, 0x22, 0x4E, 0xFC, 0xD6, 0x54, 0x91, 0xE5, 0x4E, 0x56, 0x12, 0x8A, 0xE7, 0xC2, 0xDC, 0x85, 0x66, 0x79, 0x7A, ++ 0xBF, 0x2D, 0x94, 0x55, 0x91, 0x52, 0x03, 0xA5, 0xC8, 0x9E, 0x55, 0xDD, 0x23, 0xDF, 0x82, 0x74, 0x36, 0xA8, 0xD6, 0xDC, 0xC5, 0xAC, 0xA8, 0x2F, 0x9B, 0x18, 0x36, 0x92, 0x15, 0x9E, 0xC0, 0x3F, ++ 0x2B, 0x79, 0x8E, 0x55, 0x7D, 0x14, 0x73, 0x46, 0xD8, 0x35, 0xA8, 0xD8, 0x1B, 0x2E, 0x3D, 0x40, 0x86, 0x39, 0x66, 0x86, 0x3A, 0x54, 0xD9, 0xC8, 0x7B, 0x5A, 0xAC, 0xE9, 0x63, 0xCD, 0x52, 0x9A, ++ 0xDB, 0xAE, 0x07, 0x07, 0x0C, 0xEA, 0x00, 0xB7, 0x80, 0xE1, 0x81, 0x31, 0xE6, 0x4F, 0x0A, 0xD7, 0x0E, 0x91, 0x58, 0xF5, 0x90, 0xD0, 0x0A, 0xD9, 0x17, 0x79, 0x08, 0xB9, 0x03, 0x45, 0xFD, 0x79, ++ 0xD0, 0x25, 0x57, 0x71, 0xC6, 0x08, 0xAF, 0x65, 0xEE, 0x5A, 0xC3, 0xC5, 0x01, 0x66, 0xBA, 0xD0, 0x57, 0x38, 0x02, 0x58, 0x68, 0x19, 0x41, 0x56, 0x0F, 0x11, 0x33, 0x40, 0x5F, 0xC2, 0xD7, 0x61, ++ 0x13, 0x14, 0xB4, 0x38, 0x1D, 0x54, 0x59, 0xDC, 0xDE, 0xDE, 0x4D, 0x39, 0xF3, 0x82, 0x3B, 0xC4, 0x42, 0x2B, 0xB1, 0xD7, 0x36, 0xE7, 0x47, 0x4A, 0x80, 0x89, 0xF0, 0xEC, 0xFA, 0x3C, 0x30, 0xAA, ++ 0xC1, 0x19, 0xFF, 0xA4, 0x2B, 0xF7, 0x43, 0xF4, 0x8E, 0x0F, 0xDD, 0x96, 0x02, 0x92, 0xD3, 0xE4, 0x9A, 0x14, 0xEB, 0x05, 0x90, 0xC8, 0xE0, 0x2E, 0x42, 0x1D, 0x54, 0xAE, 0x8A, 0x52, 0x19, 0x51, ++ 0x5E, 0x21, 0x89, 0x59, 0x89, 0xA0, 0xD7, 0x1D, 0x4F, 0x45, 0x16, 0x69, 0xCD, 0x65, 0x2D, 0xA3, 0x48, 0x9E, 0x5C, 0xDB, 0xC0, 0x87, 0x6B, 0xA0, 0xA0, 0x89, 0x9E, 0x7D, 0x87, 0x73, 0xB2, 0x4A, ++ 0xFC, 0x2C, 0xD6, 0xD3, 0x7C, 0xA3, 0x80, 0xA5, 0xD0, 0xDD, 0x43, 0x63, 0x04, 0xD6, 0xE1, 0xA4, 0xDC, 0xD6, 0x38, 0xE8, 0xB9, 0x5E, 0x6C, 0x95, 0x46, 0x5C, 0x66, 0x90, 0xD4, 0xEF, 0xE8, 0xF4, ++ 0x46, 0x91, 0xE4, 0x8D, 0xE2, 0x2C, 0xFC, 0x69, 0x1C, 0x75, 0x61, 0xAD, 0x8C, 0xC1, 0xA2, 0xC3, 0xCC, 0x9F, 0xB8, 0x6F, 0xF6, 0xF4, 0x70, 0x5A, 0x57, 0x3A, 0x72, 0x04, 0x71, 0xED, 0x33, 0xA0, ++ 0x0E, 0x8A, 0x60, 0x20, 0x38, 0x18, 0xA3, 0x96, 0x1E, 0x4D, 0x21, 0x3A, 0x78, 0xB8, 0x62, 0x63, 0x94, 0xF7, 0x5C, 0x28, 0x23, 0x15, 0x57, 0x4C, 0xCD, 0x72, 0x5A, 0x67, 0xE2, 0x0F, 0x0B, 0xF2, ++ 0x24, 0xBF, 0xFC, 0xAB, 0xD7, 0x02, 0xBF, 0xD4, 0xE1, 0xCC, 0x5F, 0x78, 0xBE, 0xC0, 0xE0, 0x42, 0xE1, 0x2E, 0xD4, 0xC9, 0x47, 0x4B, 0xDD, 0x5E, 0xED, 0x2A, 0xEB, 0x53, 0xF4, 0xA9, 0x58, 0xD7, ++ 0xF8, 0x4E, 0xFD, 0x56, 0xEC, 0x03, 0x0A, 0x94, 0xD2, 0x00, 0xA5, 0x39, 0xDE, 0x16, 0x4E, 0x53, 0xC8, 0x2A, 0xFE, 0x8C, 0x5F, 0x71, 0xBB, 0x99, 0xA0, 0x1F, 0x72, 0x30, 0xB7, 0xAE, 0xBC, 0x21, ++ 0x3E, 0xCD, 0xDB, 0xEF, 0x5B, 0x9E, 0x90, 0x64, 0x87, 0x43, 0x96, 0xF8, 0xA9, 0x1B, 0x05, 0x75, 0xF6, 0x8A, 0x45, 0x15, 0xDD, 0x15, 0x81, 0x78, 0xBF, 0x27, 0x7A, 0x90, 0xA3, 0xFE, 0xA2, 0x00, ++ 0x92, 0x00, 0xDA, 0x2E, 0xDA, 0x2C, 0x8B, 0x3A, 0x47, 0xC1, 0x04, 0xD3, 0x50, 0xDF, 0x68, 0xE9, 0x4C, 0x8A, 0x40, 0x23, 0xD3, 0xAE, 0xFB, 0xB7, 0x07, 0x18, 0xFA, 0x2E, 0x27, 0xE6, 0xA5, 0xC3, ++ 0xF9, 0x92, 0x7E, 0xC5, 0x96, 0xAB, 0x54, 0x0F, 0x46, 0x3A, 0xE0, 0x10, 0xEF, 0x71, 0xB8, 0x9B, 0x49, 0x49, 0x7F, 0x0C, 0xFD, 0x29, 0x39, 0xFF, 0xAB, 0x2A, 0x7D, 0xD1, 0x24, 0x7D, 0xC4, 0xA5, ++ 0x9D, 0x84, 0x11, 0xA8, 0x43, 0xBD, 0x84, 0xF1, 0xEA, 0x8D, 0xA3, 0x3C, 0x07, 0x01, 0xD7, 0x0A, 0xC2, 0x7C, 0x4B, 0xDB, 0xD0, 0xD9, 0xA0, 0xCA, 0xB8, 0x6B, 0x1F, 0xC5, 0xBE, 0x12, 0x45, 0x8A, ++ 0x25, 0x80, 0xA6, 0xCA, 0xB4, 0xB7, 0x65, 0xB8, 0x42, 0xC6, 0x7A, 0xD5, 0x4C, 0xA5, 0xD4, 0x0A, 0x24, 0xE2, 0xDD, 0xBC, 0xF0, 0x1E, 0x46, 0x6E, 0x08, 0xD9, 0xB3, 0x44, 0x9F, 0x13, 0xE8, 0x2E, ++ 0x16, 0xD6, 0x1C, 0x72, 0x3F, 0xB9, 0x46, 0x2E, 0x97, 0xB7, 0xAB, 0xC7, 0x0B, 0x22, 0x10, 0xEC, 0xA1, 0x6B, 0x16, 0x0D, 0x5B, 0x8F, 0x98, 0xA1, 0x79, 0x4D, 0xCA, 0x92, 0xCD, 0x4F, 0x02, 0x7F, ++ 0x3E, 0x41, 0x52, 0xEA, 0x87, 0x95, 0x07, 0xDD, 0xFE, 0x7F, 0x1F, 0x21, 0x51, 0x41, 0x53, 0xF0, 0x36, 0xAA, 0xBC, 0x33, 0xF1, 0x72, 0xC9, 0x5A, 0x9B, 0x77, 0x47, 0x22, 0x80, 0x0F, 0x2E, 0x08, ++ 0xCC, 0x44, 0xF9, 0x23, 0x54, 0x0D, 0x8A, 0xF6, 0x4B, 0x42, 0x99, 0x68, 0xB2, 0x80, 0x36, 0x4C, 0x1B, 0x7B, 0x4B, 0x3E, 0x9B, 0xEE, 0x40, 0xC5, 0x00, 0x02, 0x65, 0x7D, 0x99, 0x46, 0x31, 0xF3, ++ 0x3A, 0x8F, 0x8F, 0x13, 0x4A, 0x27, 0xEB, 0x69, 0xBA, 0x43, 0x95, 0x90, 0x8B, 0xA4, 0x06, 0x34, 0xB8, 0xF2, 0x70, 0x31, 0x49, 0x27, 0x5F, 0xFB, 0xBE, 0x8B, 0x48, 0x3E, 0xA1, 0xBB, 0xA9, 0x1C, ++ 0x28, 0x10, 0x51, 0x36, 0xD9, 0x7C, 0x47, 0x0E, 0xE8, 0x3C, 0xD2, 0x1C, 0xEB, 0x2B, 0x21, 0xAA, 0xED, 0x98, 0xDB, 0x8A, 0xB1, 0x65, 0xA7, 0xB4, 0xBE, 0x55, 0x9E, 0x7E, 0xAC, 0xA6, 0x84, 0x60, ++ 0x30, 0x15, 0xBC, 0x34, 0x9B, 0x0A, 0x51, 0x21, 0x4E, 0x4E, 0x8F, 0xBE, 0x1D, 0x2D, 0x88, 0x3F, 0x79, 0xFD, 0x3F, 0x1E, 0xDC, 0xDD, 0x3F, 0xA6, 0xD4, 0xB5, 0xBB, 0xD2, 0xA5, 0xB3, 0x00, 0x3A, ++ 0x80, 0xF1, 0xDA, 0xDE, 0x97, 0x5B, 0x50, 0x2C, 0x7F, 0x72, 0x03, 0x73, 0x16, 0xBC, 0x55, 0xC1, 0xE5, 0x7E, 0x50, 0x06, 0x27, 0xD6, 0x0E, 0x31, 0x08, 0x74, 0x31, 0xD2, 0xC9, 0xD0, 0x2C, 0xA9, ++ 0xF0, 0xEB, 0xCC, 0xD4, 0xBF, 0xE3, 0xC4, 0xBB, 0x53, 0x6D, 0x4C, 0xFE, 0xF7, 0x51, 0x07, 0x50, 0x45, 0x2D, 0x44, 0x4B, 0xE2, 0xC3, 0xD6, 0x4D, 0x84, 0xA8, 0x32, 0x96, 0x53, 0x05, 0x26, 0x4A, ++ 0xBB, 0x53, 0xE3, 0x61, 0x49, 0x40, 0xF9, 0xB2, 0xF1, 0xEA, 0x6F, 0x41, 0xCA, 0x8F, 0x69, 0xE7, 0x26, 0x69, 0x0B, 0xA6, 0x30, 0x63, 0x0F, 0x8A, 0x91, 0x6E, 0xE8, 0x56, 0x26, 0x82, 0x51, 0xB7, ++ 0x73, 0xDC, 0x2A, 0x5D, 0xB4, 0x5D, 0x22, 0xDF, 0xB2, 0x43, 0x9C, 0xA4, 0xB7, 0xAB, 0x70, 0x21, 0x5D, 0x23, 0xE1, 0xF2, 0xE2, 0x61, 0x73, 0x94, 0xFF, 0x78, 0x3B, 0x0B, 0xFF, 0x6D, 0xF0, 0x34, ++ 0x5C, 0xC9, 0x27, 0x05, 0x3D, 0x02, 0xC6, 0x5F, 0xE2, 0xA8, 0x6D, 0xEF, 0xBE, 0xBF, 0x52, 0x43, 0xA2, 0xEF, 0x6A, 0x63, 0x12, 0xBA, 0xED, 0xB6, 0xE6, 0x0D, 0xBB, 0x0C, 0x67, 0xCC, 0x9A, 0x65, ++ 0x55, 0x85, 0xCB, 0x45, 0x8D, 0x6A, 0x04, 0x18, 0x11, 0x94, 0x81, 0x5F, 0x03, 0xBE, 0x87, 0xF6, 0xE8, 0x00, 0x49, 0x2A, 0x24, 0xC5, 0xD5, 0x02, 0xD5, 0xEC, 0xD5, 0x3D, 0xD6, 0xDA, 0x36, 0x79, ++ 0x95, 0xD3, 0x2E, 0x8B, 0xBA, 0xA3, 0xEF, 0x62, 0x72, 0x7E, 0x8A, 0x61, 0x0E, 0x8D, 0x6B, 0x5C, 0x8F, 0xAB, 0xCB, 0xE8, 0x89, 0x3B, 0xDB, 0x5E, 0x03, 0x86, 0x27, 0xF7, 0x07, 0xE8, 0x46, 0x4C, ++ 0x55, 0xDC, 0xBB, 0x76, 0xF0, 0x83, 0x6A, 0xDD, 0x29, 0x8A, 0x96, 0x7C, 0x45, 0x95, 0x08, 0xBC, 0x4E, 0x88, 0xBA, 0x5C, 0xA3, 0x8F, 0x5A, 0x56, 0x1A, 0x6D, 0x2D, 0x6C, 0xB2, 0x17, 0x8D, 0x90, ++ 0xAC, 0x85, 0x0C, 0xA2, 0x73, 0x4B, 0x45, 0xC4, 0xA8, 0x9A, 0xA0, 0xF1, 0x52, 0xA3, 0xB5, 0x3B, 0xCF, 0x1E, 0x13, 0x53, 0x2B, 0x2B, 0x5B, 0x38, 0x78, 0xB2, 0x05, 0xBD, 0x2B, 0x32, 0x7D, 0xC4, ++ 0x9E, 0xB6, 0x66, 0x0B, 0x95, 0x11, 0xBF, 0xAE, 0x90, 0xC1, 0xDE, 0xA5, 0xBD, 0xEB, 0x6D, 0xC5, 0xDA, 0x06, 0x8B, 0xCB, 0xDC, 0x6C, 0x09, 0x3E, 0x57, 0x27, 0xE3, 0x87, 0x37, 0x4F, 0x45, 0x2F, ++ 0x96, 0x3C, 0x30, 0x7D, 0xEE, 0x86, 0x5D, 0x41, 0xAA, 0x12, 0x4C, 0xA8, 0x03, 0xC1, 0x2F, 0x9A, 0xE9, 0x29, 0x9C, 0x3C, 0xB1, 0x34, 0x5F, 0xCC, 0x56, 0x8C, 0x6E, 0x71, 0xBE, 0x33, 0x66, 0xBF, ++ 0x30, 0xEF, 0xEE, 0xEF, 0xC7, 0x69, 0x3C, 0x36, 0xAC, 0xE5, 0x76, 0xB0, 0xD1, 0x0F, 0x40, 0x2F, 0x38, 0x00, 0x09, 0xFD, 0x0E, 0xC0, 0x68, 0xCB, 0x2D, 0x45, 0x98, 0x48, 0x84, 0xED, 0xF1, 0x6B, ++ 0xC9, 0x0B, 0x0F, 0xF6, 0xDC, 0x96, 0x30, 0x9E, 0xA3, 0x77, 0xA3, 0xCE, 0xC0, 0x43, 0xCB, 0x76, 0xB6, 0xC8, 0x85, 0xBB, 0xB8, 0x48, 0xC4, 0x74, 0x5B, 0x71, 0xE1, 0x8C, 0x58, 0xE7, 0x80, 0x50, ++ 0xE1, 0x9B, 0xD7, 0xBE, 0x08, 0x31, 0xEF, 0xE9, 0x05, 0x2A, 0x6A, 0x7D, 0xF8, 0xD4, 0xE8, 0xB9, 0xFC, 0x3E, 0x08, 0x2A, 0x4D, 0x40, 0xAD, 0x73, 0xE4, 0xB3, 0x18, 0x5E, 0x2F, 0x6D, 0xED, 0xE7, ++ 0xEE, 0x51, 0xA4, 0x06, 0x8F, 0xF2, 0xDA, 0x57, 0x37, 0x3F, 0xD7, 0xE7, 0xBD, 0x46, 0xE0, 0x08, 0x0F, 0x4C, 0x2C, 0x1F, 0x41, 0xBC, 0x25, 0x0E, 0x6D, 0xA4, 0x5A, 0x34, 0x1F, 0x21, 0x47, 0x71, ++ 0xF5, 0x53, 0x1A, 0x67, 0xB0, 0xFD, 0x97, 0xB5, 0x3C, 0xD7, 0x2C, 0xFA, 0xC7, 0x21, 0x5B, 0xC4, 0x11, 0x1F, 0x09, 0x40, 0x30, 0xA9, 0x13, 0x83, 0xD2, 0x01, 0x82, 0x21, 0x0F, 0xCE, 0xCD, 0x75, ++ 0xE5, 0x9C, 0x4B, 0x0B, 0x33, 0xA3, 0xF9, 0x3D, 0x86, 0x5D, 0x84, 0x7E, 0xC2, 0x41, 0xE1, 0xB9, 0x84, 0x81, 0xC5, 0xD9, 0xD2, 0x7F, 0x0A, 0xE2, 0x62, 0xB3, 0x28, 0x65, 0x0C, 0xDC, 0x13, 0xCD, ++ 0x99, 0x86, 0x6B, 0xE9, 0xA5, 0xA0, 0x30, 0xE8, 0x3D, 0x84, 0xE3, 0x2B, 0xD2, 0x13, 0xC9, 0x4B, 0xD6, 0xAF, 0x95, 0x04, 0x33, 0xA4, 0xF0, 0x0C, 0x61, 0x49, 0x78, 0x3B, 0x00, 0x75, 0x0C, 0xDF, ++ 0xD4, 0xF4, 0x7A, 0xE7, 0x52, 0x17, 0xEE, 0xD1, 0xF6, 0x0C, 0x36, 0x6F, 0xA0, 0x2C, 0xDB, 0x20, 0x6F, 0xEB, 0x2A, 0x68, 0x5D, 0x6B, 0x7D, 0x6A, 0x4C, 0x13, 0x55, 0x3E, 0x2B, 0xE2, 0x77, 0x94, ++ 0xF5, 0x3B, 0x0E, 0xF5, 0x73, 0x15, 0x20, 0x32, 0x63, 0xEB, 0x02, 0x6E, 0xA5, 0xE6, 0x70, 0x67, 0xD2, 0x2F, 0x92, 0xE2, 0x6E, 0x98, 0xDF, 0x9A, 0xB3, 0x86, 0xC2, 0x70, 0x5B, 0x43, 0x16, 0xA6, ++ 0x98, 0x92, 0x68, 0x8E, 0x60, 0x1E, 0x74, 0x27, 0x59, 0x5A, 0xCE, 0xE6, 0xE4, 0x7F, 0x5E, 0xC5, 0x98, 0xCC, 0x48, 0xC2, 0xF2, 0xDA, 0x1C, 0x32, 0xE0, 0x62, 0xA3, 0x49, 0xD8, 0x9D, 0xCC, 0x8C, ++ 0x05, 0xC6, 0x2E, 0x7B, 0x0C, 0xED, 0x6F, 0x2E, 0x93, 0xA7, 0xBD, 0x48, 0xA8, 0x00, 0x4A, 0x8C, 0x5C, 0x60, 0x5D, 0xFF, 0xC8, 0x05, 0xDE, 0x07, 0x9E, 0xDE, 0xE7, 0xCE, 0xD9, 0x86, 0x39, 0xA9, ++ 0x2F, 0x6C, 0xBA, 0x92, 0xF2, 0x08, 0x9B, 0x14, 0x5D, 0x2D, 0x61, 0xD9, 0x63, 0x8C, 0x07, 0x34, 0x7A, 0x2E, 0xF6, 0xB3, 0x0F, 0xD9, 0x0E, 0x11, 0x1A, 0x7F, 0x59, 0x13, 0xF6, 0xE1, 0x87, 0x95, ++ 0xC1, 0x9E, 0x0B, 0x9F, 0x60, 0xF8, 0x5B, 0xD8, 0xF5, 0xC9, 0xA9, 0x63, 0x33, 0x94, 0x41, 0xE4, 0xA5, 0xB7, 0x9E, 0xB2, 0xE8, 0x67, 0x96, 0x1B, 0x18, 0xA1, 0x88, 0x4A, 0x01, 0xA7, 0x44, 0x83, ++ 0xD8, 0x0B, 0x40, 0x3E, 0xFB, 0xDB, 0xD4, 0xED, 0xDD, 0xC1, 0x92, 0x2D, 0xA3, 0xFB, 0xB3, 0x7B, 0xEA, 0x97, 0xE0, 0xA5, 0xB6, 0x34, 0x3E, 0x43, 0x67, 0x60, 0x1B, 0xD2, 0x1D, 0xB6, 0x69, 0x41, ++ 0xC2, 0x69, 0x8B, 0xF5, 0x06, 0xB0, 0x48, 0x61, 0xB5, 0xF3, 0xD3, 0xD8, 0x0A, 0xC6, 0xDC, 0xB6, 0x84, 0xD9, 0xC4, 0x36, 0x9A, 0xBD, 0x04, 0xBC, 0x4B, 0xDB, 0xEF, 0x49, 0xC6, 0x6E, 0x38, 0x44, ++ 0x51, 0x3A, 0x3F, 0x3B, 0xDD, 0x40, 0x0C, 0x08, 0x0A, 0xC6, 0xEA, 0xD8, 0x1E, 0x8B, 0xB0, 0xE7, 0xCB, 0x36, 0xDB, 0x7B, 0x7E, 0xAB, 0x47, 0x28, 0x39, 0x18, 0x57, 0xF5, 0x97, 0xA3, 0x46, 0x48, ++ 0x63, 0xC3, 0x12, 0x64, 0x5B, 0x20, 0xAF, 0x02, 0xF7, 0xD0, 0xBD, 0x9A, 0x74, 0xDE, 0x23, 0x61, 0xA0, 0xD2, 0xD9, 0x8A, 0x69, 0x89, 0x75, 0xB3, 0x0F, 0x10, 0x10, 0xD9, 0x0A, 0x12, 0x60, 0x78, ++ 0x58, 0x4A, 0x45, 0xFF, 0xBC, 0xC6, 0x5B, 0x47, 0x97, 0x6A, 0xF6, 0x57, 0xEA, 0x84, 0xE9, 0x73, 0x0D, 0x9E, 0x36, 0x37, 0x33, 0x73, 0x6A, 0xC8, 0x01, 0x03, 0xDC, 0x1C, 0x75, 0x73, 0xC4, 0xDE, ++ 0xE2, 0x8A, 0x7B, 0xAC, 0x9E, 0xF7, 0x2C, 0xB8, 0x29, 0x45, 0x0B, 0x53, 0xEA, 0xF9, 0x84, 0xCD, 0x01, 0xAA, 0x31, 0x41, 0x6C, 0xE8, 0x91, 0x4B, 0x7D, 0x7E, 0xF8, 0x49, 0xEB, 0x9C, 0xC1, 0x72, ++ 0xD7, 0x09, 0x6D, 0xEF, 0xDA, 0xCF, 0x59, 0x6B, 0x9B, 0x21, 0xA5, 0x73, 0xE3, 0x46, 0xA4, 0x7A, 0x5A, 0x46, 0x9E, 0x1D, 0x79, 0x39, 0xBE, 0x19, 0x82, 0xCB, 0x39, 0x54, 0xC2, 0x14, 0xED, 0x3A, ++ 0x37, 0x07, 0xD7, 0x40, 0xC0, 0x33, 0xE3, 0xEF, 0x78, 0x0F, 0x4C, 0x48, 0xBA, 0xDD, 0x86, 0x38, 0x48, 0xBB, 0xFC, 0x9D, 0xAA, 0x8E, 0x38, 0x06, 0xA8, 0x4B, 0x2C, 0xAC, 0x0C, 0xA2, 0x32, 0x00, ++ 0x0C, 0xAF, 0x02, 0x03, 0xE9, 0x08, 0xFC, 0xE1, 0x8B, 0x5D, 0x62, 0x77, 0x72, 0x25, 0xD2, 0xD7, 0xD5, 0x84, 0xF2, 0xED, 0x71, 0x88, 0x5D, 0xFA, 0xF5, 0xA4, 0xDB, 0xEE, 0x02, 0xF2, 0x85, 0xBC, ++ 0x34, 0x55, 0x9B, 0x88, 0xEA, 0x9C, 0xE1, 0x5B, 0x47, 0xA3, 0xB9, 0x2A, 0x8D, 0x6F, 0x91, 0x59, 0x1C, 0x32, 0x9A, 0x5A, 0xA2, 0x1A, 0x1B, 0xC4, 0x24, 0xBA, 0x2B, 0xDB, 0xD1, 0x64, 0xCE, 0x1A, ++ 0x8B, 0x78, 0xB3, 0x8B, 0xEF, 0x2B, 0x47, 0xF2, 0x1F, 0x7F, 0xB7, 0xA3, 0xC5, 0x4E, 0x3E, 0xA4, 0x53, 0x6E, 0x81, 0x6E, 0x01, 0x65, 0x6C, 0x8E, 0x26, 0xAD, 0x42, 0xF3, 0xCB, 0x90, 0x61, 0x69, ++ 0x67, 0xC0, 0xDD, 0x07, 0x9F, 0x95, 0x6C, 0x9F, 0x3C, 0x84, 0x4D, 0x5F, 0x33, 0x9C, 0x62, 0xEE, 0x8A, 0x35, 0x8C, 0x4B, 0xEC, 0x2D, 0x27, 0x8A, 0xF7, 0x18, 0xAD, 0x50, 0x9C, 0x6B, 0x66, 0x61, ++ 0x3B, 0x58, 0x04, 0x43, 0xFA, 0x6F, 0x11, 0xCD, 0x8D, 0x10, 0x76, 0x93, 0xB5, 0xD7, 0xB7, 0x38, 0xAA, 0x7E, 0x2F, 0xE6, 0x62, 0x50, 0x2D, 0x75, 0x04, 0xA9, 0xF5, 0x96, 0x19, 0x41, 0x80, 0xF8, ++ 0x70, 0x0D, 0xC4, 0xE6, 0xF7, 0xE8, 0xE7, 0xD2, 0x30, 0x72, 0x34, 0x49, 0x4B, 0x8D, 0xF1, 0xD5, 0x7E, 0xE1, 0x4D, 0x6C, 0x97, 0x92, 0x6E, 0xB1, 0xD8, 0x90, 0x4D, 0x80, 0x89, 0xBE, 0x7D, 0x13, ++ 0x5B, 0x13, 0xD6, 0xDE, 0x30, 0xAA, 0x87, 0x20, 0xD6, 0x71, 0x59, 0xBB, 0x50, 0xA8, 0x34, 0xDE, 0x90, 0x79, 0x92, 0x2B, 0x88, 0x93, 0x1D, 0x45, 0x85, 0x00, 0x62, 0x68, 0x34, 0xDA, 0x04, 0x0D, ++ 0xB7, 0x68, 0xDD, 0xDB, 0xE6, 0x7A, 0x75, 0x8A, 0x02, 0xB4, 0x48, 0xE3, 0x6B, 0xA4, 0x55, 0x03, 0x4A, 0xDE, 0x36, 0x80, 0x2A, 0xA4, 0x2A, 0x7F, 0x2F, 0x23, 0x4A, 0x5E, 0x1C, 0xC2, 0x41, 0xE5, ++ 0x66, 0x1C, 0x63, 0xAF, 0xCE, 0x59, 0xDF, 0xDC, 0xC0, 0x89, 0x83, 0x47, 0xD2, 0x83, 0x4D, 0x72, 0x64, 0xF5, 0xB2, 0x1A, 0x47, 0xC5, 0x21, 0x4A, 0xDC, 0x57, 0xAF, 0x76, 0xCE, 0x9E, 0xBD, 0xB6, ++ 0x8C, 0x71, 0x02, 0x9B, 0xCF, 0x0C, 0x4C, 0x74, 0x5A, 0x33, 0x45, 0x4A, 0xCF, 0x0C, 0xF6, 0xD5, 0xC6, 0x8D, 0xEA, 0x06, 0xC4, 0x5E, 0x7D, 0x4D, 0x17, 0x55, 0xC5, 0xAC, 0xDC, 0x37, 0xFC, 0x24, ++ 0x34, 0x14, 0x0E, 0xF7, 0x07, 0xFD, 0x55, 0xFA, 0xF0, 0x6C, 0xBB, 0x17, 0x07, 0xC2, 0x7C, 0xE9, 0xD9, 0x05, 0x90, 0x5E, 0x37, 0xE2, 0xF1, 0x47, 0xC9, 0xCB, 0x88, 0x08, 0xEC, 0xD0, 0x5D, 0xF7, ++ 0x1F, 0xC5, 0xF1, 0xDA, 0xF9, 0x10, 0xD7, 0xBD, 0x68, 0xB6, 0x91, 0x49, 0x38, 0xBF, 0x0C, 0xAB, 0xCF, 0x66, 0xC9, 0x05, 0xC4, 0x95, 0x63, 0xD7, 0xD7, 0x0F, 0x2C, 0x3D, 0x3A, 0x4A, 0x4F, 0x62, ++ 0x9E, 0x3A, 0xFD, 0xE5, 0x3B, 0xD1, 0x4C, 0xD6, 0xE5, 0x27, 0xE4, 0xF0, 0x38, 0xD6, 0xA3, 0x31, 0xD0, 0x14, 0x68, 0xE2, 0x2D, 0xFE, 0x93, 0xA3, 0x79, 0xB3, 0xEC, 0x6D, 0xA6, 0xD1, 0xC2, 0xF6, ++ 0xD5, 0xEA, 0xB1, 0x41, 0xE5, 0x75, 0xF9, 0x3C, 0x8C, 0xC5, 0x58, 0x0D, 0xF4, 0xA3, 0xDB, 0x5C, 0x4C, 0x87, 0xD8, 0x54, 0x8E, 0x9A, 0x85, 0x19, 0x46, 0xD1, 0xB9, 0x0D, 0x75, 0x27, 0x40, 0x7F, ++ 0x1B, 0xA1, 0x12, 0x1E, 0xAC, 0x54, 0xA1, 0x1E, 0x6E, 0xDA, 0x45, 0xAB, 0xB0, 0x8A, 0x7A, 0x78, 0xAB, 0x36, 0xA7, 0x6E, 0xAD, 0x7F, 0xAC, 0x46, 0x78, 0xE5, 0x24, 0x64, 0xEF, 0xF3, 0x98, 0xE9, ++ 0x02, 0x15, 0xAC, 0x31, 0x6D, 0xE5, 0xA6, 0xEF, 0xE5, 0xA7, 0xB4, 0xA9, 0x5D, 0xF9, 0x2E, 0x41, 0x29, 0xF3, 0xF9, 0x1B, 0x31, 0x6F, 0x75, 0x67, 0x08, 0xBD, 0xF3, 0x7C, 0x01, 0xC1, 0x2B, 0xBA, ++ 0xA0, 0x91, 0xF9, 0x48, 0x84, 0xE3, 0x8A, 0xFF, 0x3C, 0x7B, 0x81, 0x40, 0x88, 0x8C, 0xAB, 0x4F, 0x7F, 0x86, 0x7E, 0xAD, 0xB0, 0x41, 0x85, 0x84, 0xB6, 0xF7, 0x70, 0x74, 0x02, 0x50, 0x93, 0x6A, ++ 0x13, 0x8A, 0xFF, 0x52, 0x88, 0x88, 0x40, 0x67, 0x7D, 0x81, 0x21, 0xC5, 0x83, 0x80, 0x6F, 0xE2, 0x71, 0x04, 0xDE, 0x52, 0x88, 0x13, 0xE5, 0x62, 0x26, 0xB6, 0x52, 0xC5, 0x86, 0x9B, 0xB5, 0x00, ++ 0x30, 0x38, 0x34, 0xD9, 0xC9, 0xD1, 0x97, 0xDB, 0xA1, 0xDD, 0x5C, 0x47, 0x34, 0x30, 0x7A, 0xB8, 0xBD, 0x00, 0x6B, 0x66, 0xEF, 0x45, 0xAB, 0xED, 0x2E, 0x31, 0x37, 0x7B, 0xEA, 0xA1, 0x9D, 0xAE, ++ 0x6E, 0xC8, 0x2A, 0xD7, 0x7C, 0x4C, 0x07, 0x74, 0x4F, 0x9B, 0x93, 0xA8, 0xDD, 0x4C, 0xEE, 0x1A, 0x62, 0xA5, 0x52, 0xED, 0xF4, 0xE2, 0x77, 0xCA, 0xCF, 0xF1, 0xF9, 0x64, 0xDA, 0x7A, 0xF8, 0xFA, ++ 0xFF, 0x6B, 0x56, 0xE3, 0xEB, 0xC0, 0x68, 0x50, 0xA9, 0xF7, 0x6E, 0xCF, 0xB2, 0xC2, 0xBA, 0xA6, 0x60, 0x95, 0x8C, 0x6D, 0x1B, 0xA9, 0x6B, 0xA8, 0x57, 0x8D, 0x06, 0x6D, 0x6A, 0xFE, 0x6E, 0x8F, ++ 0xB2, 0x05, 0x2B, 0x74, 0x21, 0xD5, 0x7D, 0xE5, 0xAB, 0x4C, 0x1F, 0xD5, 0x51, 0x70, 0xE9, 0xEE, 0x33, 0xEB, 0x32, 0xFB, 0x3D, 0x2C, 0x88, 0x61, 0x42, 0x05, 0x5E, 0xE8, 0x42, 0x8B, 0xD7, 0x45, ++ 0xAA, 0xBE, 0x1D, 0x15, 0x19, 0x1F, 0xFC, 0x93, 0xA3, 0xFA, 0x7A, 0x86, 0xB4, 0x27, 0xEB, 0x23, 0x70, 0xB7, 0x8A, 0x67, 0xA4, 0x85, 0xAF, 0x96, 0x3B, 0xBE, 0x1F, 0x22, 0x46, 0x11, 0x9F, 0xB4, ++ 0x69, 0xA0, 0x02, 0xD7, 0x02, 0x9F, 0xC4, 0xF5, 0xF7, 0xE0, 0x12, 0x5F, 0xDA, 0x73, 0x05, 0xAC, 0xF6, 0xC8, 0x0C, 0x7B, 0xD3, 0xF6, 0x68, 0x89, 0x7B, 0xA8, 0x14, 0x35, 0xF4, 0x26, 0xB8, 0x42, ++ 0x5C, 0x98, 0x55, 0xCD, 0x46, 0xC3, 0x44, 0x8B, 0xBA, 0xD0, 0x73, 0x9B, 0xA8, 0x8A, 0xBC, 0x27, 0x3B, 0xCD, 0x0F, 0xA1, 0xFD, 0xA7, 0xF4, 0xF8, 0x18, 0x3B, 0x5D, 0x73, 0xD1, 0x6C, 0x40, 0x7C, ++ 0x45, 0x2A, 0xEF, 0xA2, 0xE3, 0xCA, 0x9F, 0x2D, 0x9D, 0x63, 0x8D, 0x96, 0x6A, 0x58, 0x78, 0x8B, 0x48, 0xBF, 0xC5, 0x7D, 0x3F, 0xC2, 0x08, 0x5F, 0xE8, 0x5A, 0x7F, 0x7A, 0xDD, 0xD9, 0x1E, 0xFD, ++ 0x1B, 0xA0, 0x22, 0x60, 0x46, 0xB1, 0x27, 0xA9, 0x7B, 0xC4, 0x80, 0x47, 0x9B, 0x92, 0x88, 0x1A, 0x58, 0xA0, 0xBC, 0x04, 0xD8, 0xDD, 0x9E, 0x68, 0xB6, 0xD2, 0xBC, 0x50, 0x34, 0xCF, 0x23, 0x43, ++ 0x0D, 0x1F, 0xE5, 0x49, 0x91, 0xA6, 0x90, 0x8B, 0x01, 0x9E, 0xE0, 0x18, 0xC8, 0x43, 0xB9, 0xFA, 0x53, 0xEC, 0x7E, 0xE5, 0xF1, 0x14, 0xAB, 0xE2, 0xB7, 0x50, 0xD4, 0xE1, 0xE7, 0x2E, 0xAF, 0xB4, ++ 0xFB, 0xB3, 0x3A, 0x1E, 0x2C, 0x4D, 0x62, 0x72, 0xCE, 0xE2, 0x7B, 0xBB, 0x13, 0xB5, 0xD2, 0x3E, 0x24, 0xF6, 0x12, 0x9C, 0xF5, 0x82, 0x5F, 0x34, 0xAF, 0xC0, 0x56, 0xF9, 0x5F, 0x53, 0xA0, 0x9F, ++ 0x6F, 0xCA, 0x94, 0x35, 0xCD, 0x5F, 0xB6, 0xC0, 0x5F, 0x88, 0xB4, 0xDC, 0xE8, 0x6C, 0xEA, 0xBD, 0x7E, 0x0C, 0x78, 0x53, 0x61, 0xD2, 0x53, 0xBB, 0x9C, 0xDB, 0x3A, 0x0C, 0x6B, 0xC8, 0x51, 0x83, ++ 0x01, 0xFF, 0x44, 0xF9, 0xE8, 0x7F, 0x7A, 0x97, 0xEC, 0x9F, 0x02, 0xFA, 0xB5, 0x13, 0x4F, 0x3B, 0xBF, 0xA1, 0xCB, 0xE4, 0x4F, 0xA8, 0x3F, 0x1C, 0x54, 0x3E, 0xD9, 0xB8, 0x70, 0x65, 0x75, 0x43, ++ 0x5A, 0xC6, 0xA1, 0x5F, 0x7B, 0x0D, 0xEB, 0xA9, 0xD4, 0x5A, 0xF5, 0x54, 0xBB, 0x0C, 0xCB, 0xCA, 0x12, 0xA6, 0xC1, 0x6E, 0x5E, 0xE6, 0xFA, 0xD6, 0x37, 0x21, 0xE4, 0xC3, 0xCC, 0x8D, 0x9E, 0xA6, ++ 0x8C, 0x61, 0x49, 0x99, 0x30, 0x80, 0x95, 0x24, 0x07, 0xAF, 0xA2, 0x03, 0xF5, 0x04, 0xA8, 0x87, 0xB3, 0xBF, 0x84, 0xD2, 0xBB, 0x6E, 0x45, 0xE7, 0xCC, 0x53, 0x26, 0x53, 0x3D, 0x63, 0x96, 0x3F, ++ 0xFB, 0x72, 0xA9, 0x27, 0x2C, 0x8F, 0xF6, 0x37, 0xBE, 0x6E, 0x24, 0x73, 0xE9, 0xFC, 0xAB, 0x6B, 0x5E, 0x5E, 0x7C, 0xF3, 0xED, 0xBD, 0xDA, 0xEF, 0x51, 0xC9, 0x8D, 0x53, 0x17, 0x0F, 0x9B, 0x64, ++ 0xBC, 0xA5, 0xD4, 0x9F, 0x76, 0xAF, 0x17, 0x6D, 0x01, 0xA6, 0xF2, 0xEC, 0xB3, 0x39, 0x15, 0x1F, 0x49, 0xE4, 0x9A, 0x8F, 0x6E, 0x28, 0x6C, 0x6D, 0x41, 0x22, 0xD6, 0x50, 0xD5, 0x01, 0x59, 0x10, ++ 0xFF, 0x7F, 0x28, 0x02, 0x46, 0x93, 0x89, 0x5C, 0x58, 0x03, 0xDD, 0xFF, 0xCB, 0x1E, 0xDC, 0x46, 0x79, 0xC8, 0xF5, 0x35, 0xAC, 0x15, 0x97, 0xD9, 0xB2, 0x8A, 0xC4, 0x6E, 0x62, 0x88, 0x81, 0x01, ++ 0x29, 0xC1, 0x79, 0x55, 0x6A, 0xF7, 0x88, 0x2D, 0xEE, 0x17, 0xD5, 0x8A, 0x97, 0xF4, 0x34, 0xDF, 0x83, 0x64, 0x6B, 0x33, 0xCF, 0xBA, 0xB9, 0x0A, 0x62, 0x50, 0x85, 0x1C, 0xF5, 0x3D, 0x4B, 0xDB, ++ 0x45, 0x26, 0x33, 0x7D, 0xCC, 0xB9, 0xD9, 0x8A, 0x92, 0x16, 0x76, 0xB5, 0x13, 0x65, 0xDD, 0x08, 0xA5, 0x30, 0x4D, 0x2A, 0x93, 0x53, 0x4C, 0x52, 0x42, 0x7E, 0x9A, 0xE5, 0xC1, 0x44, 0x05, 0x92, ++ 0xC5, 0x53, 0x6E, 0x17, 0x1C, 0xF4, 0xFD, 0x1F, 0x43, 0x57, 0x8F, 0xEA, 0xFB, 0x32, 0xFF, 0x01, 0xD4, 0xFE, 0xD6, 0x35, 0xD7, 0x52, 0x56, 0x8F, 0x90, 0xEC, 0xFB, 0xB1, 0x64, 0xA5, 0xB1, 0x76, ++ 0x3F, 0x70, 0xC7, 0x2F, 0xD5, 0xBC, 0xDF, 0x61, 0xD0, 0x1F, 0xF3, 0x23, 0x66, 0x39, 0xC9, 0x1C, 0x06, 0x3C, 0x0B, 0x7A, 0x56, 0xAD, 0x03, 0xF4, 0x02, 0x0E, 0x80, 0xBD, 0x9A, 0x5E, 0x2F, 0x16, ++ 0x1E, 0x05, 0x78, 0x46, 0x9B, 0x99, 0x50, 0x26, 0x6B, 0xA9, 0x6B, 0xBB, 0x73, 0xC0, 0x8E, 0x7F, 0xAE, 0x85, 0x6E, 0x17, 0x03, 0xCF, 0x3C, 0xBD, 0x21, 0x41, 0x80, 0x89, 0x14, 0x8F, 0x7A, 0x9F, ++ 0x40, 0xD4, 0xD9, 0x11, 0x51, 0xDB, 0xC4, 0xBA, 0xE8, 0x54, 0x23, 0x59, 0xE8, 0x82, 0xA1, 0x9A, 0x99, 0x49, 0xCE, 0xD5, 0xB7, 0x5F, 0xF7, 0xB1, 0x92, 0xDC, 0x27, 0x9B, 0x3E, 0xD1, 0x00, 0x76, ++ 0x05, 0x3F, 0x58, 0xDE, 0x43, 0x5F, 0xC5, 0x87, 0x56, 0x54, 0xE9, 0x86, 0x33, 0xA3, 0x97, 0x14, 0x11, 0x42, 0x22, 0x9D, 0x8C, 0xD6, 0x13, 0xC6, 0x63, 0x44, 0x32, 0x6D, 0x83, 0x99, 0x2B, 0x3C, ++ 0x08, 0xF1, 0x7B, 0xE0, 0xEC, 0x28, 0xFB, 0xDB, 0xAB, 0xA1, 0x2C, 0xB0, 0x00, 0xB2, 0xA2, 0xB0, 0x4E, 0x24, 0xD0, 0xC4, 0x1B, 0xD6, 0xB5, 0x80, 0xE9, 0x99, 0xB2, 0x57, 0xC0, 0x07, 0x96, 0x5C, ++ 0x44, 0x75, 0xA9, 0xD5, 0x31, 0x4C, 0xD6, 0xC1, 0xFB, 0x9F, 0xED, 0xD5, 0x16, 0xE6, 0xB3, 0xC0, 0xDD, 0xD4, 0x04, 0xD6, 0x8D, 0x78, 0xFD, 0x4D, 0xE4, 0x09, 0x31, 0xB1, 0xB8, 0x72, 0xD4, 0xD0, ++ 0x1A, 0x2D, 0x46, 0xC9, 0xB2, 0x93, 0x90, 0x0D, 0x34, 0xEC, 0x91, 0xD3, 0xB6, 0x93, 0xF4, 0xE7, 0x2C, 0x22, 0x8E, 0xD0, 0x29, 0x4F, 0x6D, 0xC9, 0xB7, 0x17, 0x26, 0x0E, 0xBE, 0x75, 0xA4, 0x71, ++ 0xEA, 0x4D, 0x78, 0x00, 0xA3, 0xE7, 0xB7, 0xB4, 0x76, 0xD6, 0x4D, 0xEA, 0x6F, 0x4D, 0xA7, 0x26, 0xB3, 0x76, 0xF0, 0x78, 0x00, 0xDB, 0x5F, 0x83, 0xC0, 0xA3, 0xDC, 0xC2, 0xC7, 0x02, 0x6A, 0x4C, ++ 0x37, 0x8E, 0x88, 0x09, 0x94, 0x88, 0x5D, 0x6F, 0x7A, 0x88, 0x19, 0xD9, 0x1A, 0x2D, 0x50, 0xD1, 0x6D, 0x22, 0xBE, 0x59, 0x2B, 0xED, 0x38, 0x33, 0x04, 0x10, 0xE1, 0x4C, 0xDD, 0xD4, 0xCE, 0x0C, ++ 0x48, 0xD6, 0x2B, 0x77, 0x97, 0xDE, 0x44, 0xC0, 0x7F, 0x26, 0xA7, 0x9E, 0xF3, 0xA5, 0x83, 0x0F, 0x32, 0x1A, 0x35, 0xAC, 0x50, 0x7E, 0x94, 0x3C, 0x6D, 0xE6, 0x3F, 0xE1, 0x36, 0x82, 0x32, 0x25, ++ 0xD6, 0xFC, 0x73, 0xD8, 0x6D, 0x4C, 0x84, 0x39, 0x90, 0x13, 0xE0, 0x64, 0xE6, 0x68, 0x34, 0x92, 0x90, 0x7C, 0x7B, 0x78, 0xAE, 0xF2, 0xAA, 0xB1, 0x80, 0xDC, 0x33, 0xE5, 0xE6, 0xBD, 0xBD, 0x6D, ++ 0x49, 0x0E, 0x3A, 0xA8, 0xBE, 0x8E, 0x82, 0xFA, 0x6C, 0xB1, 0x3B, 0xEA, 0x36, 0x0C, 0x51, 0x0F, 0x9B, 0x4B, 0x5B, 0xA6, 0x64, 0x04, 0x27, 0xAD, 0xDD, 0xF3, 0xD6, 0x6D, 0xED, 0x41, 0xD1, 0xE2, ++ 0xA0, 0x61, 0x31, 0xE9, 0x50, 0x13, 0x68, 0x42, 0x73, 0x2C, 0x27, 0x34, 0x98, 0xD6, 0xA4, 0x7C, 0xED, 0x4E, 0xD1, 0x89, 0xB6, 0xE7, 0x39, 0x36, 0x1F, 0x68, 0xCC, 0xA0, 0xA9, 0x9D, 0x56, 0x02, ++ 0xB9, 0x76, 0x55, 0xAB, 0x26, 0x82, 0xE8, 0x37, 0xDB, 0xD6, 0x88, 0xC1, 0x73, 0xDD, 0x49, 0x50, 0xDD, 0x4C, 0xD4, 0xD3, 0xA3, 0x38, 0xF3, 0xFC, 0xFF, 0x8C, 0x71, 0x16, 0xEB, 0xC6, 0x30, 0xD0, ++ 0x5A, 0xFA, 0xB8, 0xDF, 0x7C, 0x75, 0x60, 0xF4, 0xDE, 0x9A, 0xD9, 0x22, 0x16, 0x26, 0x8E, 0xE1, 0x43, 0xA7, 0x22, 0xC0, 0x34, 0x97, 0xCE, 0x17, 0xEF, 0xE9, 0x8F, 0x67, 0x58, 0x0F, 0x0D, 0xDE, ++ 0xF5, 0x7F, 0x15, 0x25, 0x5E, 0x68, 0x85, 0x6D, 0x39, 0xA4, 0xEB, 0x33, 0x8A, 0x65, 0x33, 0x46, 0xFE, 0xDE, 0x46, 0x66, 0x3A, 0x62, 0x30, 0x7F, 0x65, 0x90, 0xE2, 0xEE, 0x7A, 0xB9, 0x28, 0xAC, ++ 0x5E, 0x8F, 0xA1, 0x63, 0xAA, 0x74, 0xE4, 0x02, 0x55, 0xD8, 0xD2, 0x41, 0x66, 0x8A, 0x1C, 0x71, 0x7E, 0x3F, 0x28, 0x99, 0x43, 0x50, 0xF4, 0x99, 0x08, 0xA3, 0x2E, 0x6F, 0xEC, 0x62, 0x06, 0xBD, ++ 0xF7, 0x93, 0x6D, 0xD2, 0xCF, 0x6A, 0x87, 0xB9, 0x99, 0x40, 0x45, 0x55, 0x2A, 0xCC, 0xE6, 0xEA, 0xF1, 0x29, 0x4E, 0x73, 0x27, 0xA1, 0x3E, 0x6E, 0xAC, 0x16, 0x22, 0x1A, 0x67, 0x6F, 0x60, 0x5D, ++ 0x6D, 0xA6, 0x36, 0x5D, 0x0D, 0xB0, 0x11, 0x35, 0x40, 0x50, 0x13, 0xF8, 0x74, 0x48, 0x1A, 0x68, 0x33, 0x04, 0x55, 0x28, 0x1A, 0x41, 0xE8, 0x3D, 0xF7, 0x6D, 0x20, 0xD1, 0xDF, 0x75, 0xDF, 0xEC, ++ 0xA0, 0x91, 0x7F, 0x3E, 0x94, 0xBE, 0xD2, 0x2D, 0x1E, 0xCE, 0xD8, 0xA9, 0xFC, 0x7B, 0x2A, 0x2E, 0x4A, 0x5B, 0x74, 0xD0, 0xB0, 0xC9, 0x28, 0x2B, 0xD6, 0x12, 0xA4, 0x86, 0x48, 0x99, 0x3F, 0x9F, ++ 0x01, 0x2B, 0xD7, 0x0A, 0x0E, 0x43, 0xDC, 0x3D, 0x1C, 0x0A, 0x16, 0x71, 0x1E, 0xBF, 0x6E, 0xA4, 0x79, 0xDB, 0x94, 0x1F, 0x68, 0xA6, 0x70, 0x1B, 0x57, 0xF7, 0xB8, 0x37, 0xB3, 0x0C, 0x0A, 0x6D, ++ 0x77, 0x11, 0x23, 0xD6, 0xFC, 0x70, 0xBD, 0xBE, 0x24, 0x44, 0x0C, 0xE4, 0xE2, 0x54, 0xA0, 0x70, 0x53, 0x4F, 0x1C, 0x18, 0x13, 0xC5, 0x16, 0x79, 0x12, 0x60, 0xA7, 0x36, 0x89, 0xDF, 0xE1, 0xBE, ++ 0xAD, 0x6E, 0xBF, 0x6A, 0xFF, 0x7E, 0xE4, 0x8D, 0xE1, 0xD5, 0x9C, 0x62, 0x22, 0x8B, 0x38, 0x3E, 0x0A, 0xCA, 0x06, 0x90, 0xF8, 0x05, 0xFE, 0xFD, 0xC5, 0x4F, 0xC4, 0xF9, 0x74, 0xBF, 0xAC, 0xCD, ++ 0xFE, 0x33, 0x21, 0x6C, 0xD2, 0xBC, 0x06, 0xBA, 0x7C, 0x2F, 0x55, 0xD7, 0xA0, 0x70, 0x8C, 0x48, 0x01, 0x4F, 0xF0, 0xC5, 0x35, 0xCD, 0x83, 0xD5, 0x47, 0x08, 0xFD, 0x70, 0x3E, 0x8E, 0xF5, 0x10, ++ 0xFA, 0x60, 0x72, 0xE2, 0x5F, 0xDA, 0xEB, 0x95, 0x33, 0xD4, 0x80, 0x60, 0x53, 0x07, 0x6C, 0xB8, 0xE4, 0xFE, 0x69, 0x46, 0xFD, 0x1A, 0x67, 0x0D, 0x1B, 0xDA, 0x92, 0x31, 0x1D, 0x5E, 0xD5, 0xFA, ++ 0x24, 0x5F, 0xA7, 0x4A, 0x6F, 0x04, 0xAE, 0x66, 0xE3, 0xC9, 0xE0, 0xA7, 0x18, 0x2C, 0xFD, 0xB2, 0x10, 0xE5, 0xA2, 0xF2, 0x8C, 0x95, 0x43, 0x99, 0x64, 0x74, 0x2A, 0x98, 0x7A, 0x16, 0x29, 0x85, ++ 0xDB, 0x91, 0xDF, 0x91, 0xD9, 0x52, 0x9D, 0x8B, 0x85, 0x0B, 0x86, 0x28, 0xA9, 0xC5, 0xC8, 0x45, 0x5B, 0xDB, 0x41, 0x7C, 0x92, 0x72, 0x24, 0xA9, 0xA8, 0xFF, 0xCD, 0xFE, 0x00, 0xC2, 0x28, 0xFA, ++ 0x28, 0x4C, 0x50, 0x52, 0x57, 0x70, 0x98, 0x15, 0x1E, 0x33, 0x78, 0x7F, 0x82, 0x87, 0xCB, 0x0D, 0x24, 0x31, 0x32, 0x45, 0x55, 0x84, 0x8A, 0x8D, 0x9C, 0xDF, 0xE3, 0xE4, 0xF0, 0xF1, 0x42, 0x61, ++ 0xD0, 0xFB, 0xFC, 0x02, 0x3C, 0x59, 0x6C, 0x74, 0x9E, 0xAE, 0xFB, 0x0A, 0x17, 0x84, 0xC8, 0xCF, 0xE5, 0xE7, 0x44, 0x8A, 0x98, 0x9F, 0xD8, 0xD9, 0x43, 0x66, 0xB4, 0xC7, 0xD6, 0xFF, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x1E, 0x23, 0x2B, 0x32, 0x38, 0x3E, ++ }, ++ }, ++ { ++ .name = "Dilithium Round 3, Level 5 (8-7) KAT 0", ++ .version = 0, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_87, ++ .rho_len = 32, ++ .rho = { ++ 0x1C, 0x0E, 0xE1, 0x11, 0x1B, 0x08, 0x00, 0x3F, 0x28, 0xE6, 0x5E, 0x8B, 0x3B, 0xDE, 0xB0, 0x37, 0xCF, 0x8F, 0x22, 0x1D, 0xFC, 0xDA, 0xF5, 0x95, 0x0E, 0xDB, 0x38, 0xD5, 0x06, 0xD8, 0x5B, 0xEF, ++ }, ++ .seed_len = 32, ++ .seed = { ++ 0x39, 0x4D, 0x16, 0x95, 0x05, 0x9D, 0xFF, 0x40, 0xAE, 0x25, 0x6C, 0x5D, 0x5E, 0xDA, 0xBF, 0xB6, 0x9F, 0x5F, 0x40, 0xF3, 0x7A, 0x58, 0x8F, 0x50, 0x53, 0x2C, 0xA4, 0x08, 0xA8, 0x16, 0x8A, 0xB1, ++ }, ++ .tr_len = 32, ++ .tr = { ++ 0x85, 0xF6, 0x84, 0xAE, 0xB4, 0x01, 0xB9, 0xAA, 0xAF, 0x81, 0x2A, 0x00, 0xE1, 0x24, 0xFF, 0x56, 0xFE, 0xE5, 0x1B, 0xA7, 0xC1, 0x12, 0x82, 0x61, 0x7F, 0x05, 0x72, 0xCC, 0x79, 0x1D, 0xC8, 0x1C, ++ }, ++ .s1_len = 672, ++ .s1 = { ++ 0xC0, 0xA6, 0x71, 0x1A, 0x96, 0x6C, 0x11, 0x31, 0x2A, 0xD9, 0xA8, 0x21, 0xD8, 0x08, 0x65, 0x42, 0xA6, 0x00, 0xA4, 0xB4, 0x2C, 0x19, 0x40, 0x72, 0x02, 0x42, 0x62, 0x81, 0x06, 0x21, 0x0A, 0x43, ++ 0x85, 0x23, 0x31, 0x70, 0x93, 0x08, 0x10, 0x8B, 0x18, 0x8C, 0x02, 0x24, 0x92, 0xC1, 0xB2, 0x84, 0x12, 0xC4, 0x21, 0x8B, 0x04, 0x21, 0x81, 0xC8, 0x61, 0x02, 0x48, 0x05, 0x9C, 0x92, 0x01, 0xC0, ++ 0x34, 0x88, 0x19, 0x32, 0x6C, 0x58, 0x20, 0x46, 0x89, 0x18, 0x68, 0xA2, 0xC2, 0x8D, 0x82, 0x34, 0x6A, 0x1C, 0x09, 0x42, 0x00, 0xA2, 0x8C, 0xE3, 0xA6, 0x49, 0x1C, 0x11, 0x2C, 0xC2, 0x48, 0x12, ++ 0xE0, 0x90, 0x21, 0x91, 0x98, 0x50, 0x62, 0xC0, 0x84, 0x62, 0x24, 0x51, 0xCA, 0x06, 0x2C, 0x64, 0x24, 0x0E, 0x1B, 0xB3, 0x31, 0x24, 0x96, 0x85, 0x4B, 0x46, 0x06, 0xDB, 0x26, 0x68, 0xC3, 0x82, ++ 0x68, 0x44, 0x10, 0x46, 0xC9, 0xB6, 0x21, 0x14, 0x04, 0x81, 0x14, 0x45, 0x50, 0x24, 0x42, 0x08, 0x44, 0x22, 0x71, 0x0B, 0x92, 0x45, 0x9A, 0xA0, 0x81, 0x1A, 0x91, 0x70, 0x9C, 0x24, 0x10, 0x03, ++ 0x95, 0x70, 0x04, 0xC5, 0x04, 0xC8, 0x26, 0x92, 0xD2, 0x92, 0x00, 0xC0, 0xB2, 0x60, 0xC0, 0xA2, 0x68, 0x09, 0x19, 0x0A, 0xA2, 0x30, 0x0E, 0x18, 0x89, 0x69, 0xE0, 0x00, 0x8D, 0xD8, 0x48, 0x62, ++ 0xDA, 0x14, 0x71, 0x20, 0x18, 0x05, 0x19, 0x07, 0x44, 0x04, 0x12, 0x40, 0x9B, 0x12, 0x40, 0x11, 0x80, 0x10, 0xD1, 0x42, 0x81, 0x99, 0x28, 0x50, 0x8B, 0x10, 0x91, 0x02, 0x24, 0x64, 0xA0, 0x20, ++ 0x6D, 0x12, 0x46, 0x21, 0x1C, 0x83, 0x8C, 0x1B, 0x47, 0x69, 0x01, 0x06, 0x90, 0xCC, 0x06, 0x24, 0x81, 0x84, 0x69, 0x20, 0x98, 0x2C, 0x24, 0x12, 0x05, 0x21, 0xB1, 0x50, 0x41, 0x36, 0x02, 0x98, ++ 0x44, 0x6E, 0xD1, 0xA6, 0x31, 0x11, 0x05, 0x6A, 0xD3, 0xA8, 0x40, 0xCA, 0xA8, 0x4C, 0x62, 0xB0, 0x00, 0x03, 0x13, 0x4A, 0x53, 0x34, 0x46, 0x14, 0x19, 0x40, 0x04, 0xC5, 0x4C, 0xE3, 0x06, 0x69, ++ 0x5A, 0xB0, 0x89, 0x61, 0x16, 0x8E, 0xCB, 0x10, 0x80, 0x8B, 0x16, 0x8E, 0xD9, 0x90, 0x64, 0x0B, 0x94, 0x60, 0x24, 0x83, 0x85, 0x1A, 0xB3, 0x04, 0x54, 0x26, 0x22, 0x51, 0xB8, 0x25, 0x1C, 0x42, ++ 0x4A, 0x0B, 0x81, 0x48, 0x42, 0xC4, 0x44, 0x5A, 0x10, 0x20, 0x23, 0x80, 0x84, 0x09, 0xB7, 0x25, 0x4C, 0xC6, 0x48, 0x14, 0x85, 0x4D, 0x19, 0x38, 0x0E, 0x60, 0x16, 0x51, 0xD8, 0x32, 0x6A, 0x0A, ++ 0x91, 0x89, 0x08, 0xC1, 0x70, 0xE0, 0x96, 0x4D, 0x18, 0x46, 0x8C, 0x01, 0x32, 0x8D, 0x91, 0xC4, 0x05, 0x4A, 0x00, 0x61, 0x23, 0x08, 0x68, 0xA2, 0x10, 0x42, 0x10, 0xA8, 0x61, 0x13, 0x06, 0x21, ++ 0x8A, 0x24, 0x8E, 0x62, 0x06, 0x89, 0xC9, 0xB2, 0x45, 0x08, 0x27, 0x84, 0x51, 0x20, 0x0D, 0x98, 0x04, 0x66, 0xDC, 0x42, 0x05, 0x44, 0x24, 0x85, 0x24, 0x26, 0x28, 0x22, 0x21, 0x61, 0x20, 0x16, ++ 0x09, 0x0B, 0xA6, 0x2C, 0x0A, 0x11, 0x44, 0xE0, 0x92, 0x81, 0x58, 0x48, 0x0D, 0x42, 0x22, 0x10, 0xA0, 0x06, 0x09, 0x8B, 0x24, 0x6E, 0x81, 0x28, 0x8C, 0xC0, 0x24, 0x80, 0x90, 0x30, 0x8D, 0x84, ++ 0x36, 0x40, 0x4C, 0xA6, 0x84, 0x50, 0x04, 0x24, 0x94, 0xB6, 0x8D, 0xA2, 0x92, 0x6D, 0x18, 0xB3, 0x44, 0xA0, 0x00, 0x85, 0xE3, 0xB8, 0x05, 0x14, 0x05, 0x04, 0xA4, 0xC2, 0x90, 0x84, 0x22, 0x81, ++ 0xC3, 0x26, 0x2D, 0x0B, 0x20, 0x66, 0xCC, 0x90, 0x31, 0x98, 0x38, 0x28, 0x10, 0x16, 0x6C, 0xC1, 0x34, 0x45, 0xC0, 0x10, 0x22, 0x24, 0xC6, 0x88, 0x03, 0x46, 0x32, 0xD8, 0x40, 0x90, 0x1C, 0x20, ++ 0x68, 0x04, 0x15, 0x28, 0x9A, 0x18, 0x81, 0x44, 0x98, 0x8D, 0x9C, 0x20, 0x6E, 0x9C, 0x30, 0x2C, 0xC1, 0xB8, 0x20, 0x61, 0x42, 0x21, 0x08, 0x03, 0x10, 0xA0, 0xC2, 0x8C, 0x58, 0x12, 0x85, 0x53, ++ 0x20, 0x4C, 0x03, 0x30, 0x81, 0x4C, 0xA4, 0x8D, 0x44, 0xC0, 0x8D, 0x51, 0x40, 0x4C, 0x1C, 0xA7, 0x2C, 0x44, 0x08, 0x65, 0xA0, 0x38, 0x40, 0xDA, 0x20, 0x80, 0x81, 0x06, 0x85, 0x8C, 0x26, 0x0D, ++ 0xE2, 0xA8, 0x8C, 0x9C, 0x44, 0x11, 0x59, 0x42, 0x28, 0xC4, 0x26, 0x04, 0x44, 0x14, 0x26, 0xA1, 0x42, 0x64, 0x08, 0xC0, 0x85, 0x11, 0x01, 0x86, 0x9B, 0x48, 0x31, 0x99, 0xB2, 0x0C, 0x80, 0x46, ++ 0x44, 0x59, 0xA8, 0x8C, 0x00, 0x42, 0x08, 0x98, 0x82, 0x90, 0x0A, 0xB5, 0x45, 0x62, 0x24, 0x48, 0x12, 0x96, 0x05, 0x44, 0x12, 0x46, 0x00, 0xC8, 0x88, 0x13, 0xA0, 0x61, 0xE1, 0x28, 0x4D, 0x0A, ++ 0xB9, 0x91, 0x4B, 0x96, 0x20, 0x99, 0xB8, 0x44, 0x00, 0x31, 0x4E, 0x98, 0x12, 0x85, 0x00, 0xB6, 0x01, 0x83, 0xA0, 0x0D, 0x14, 0x15, 0x0E, 0x18, 0x81, 0x10, 0x19, 0x01, 0x22, 0x4A, 0x06, 0x68, ++ }, ++ .s2_len = 768, ++ .s2 = { ++ 0x1A, 0x49, 0x8D, 0xE1, 0xA2, 0x84, 0x11, 0xC6, 0x31, 0x21, 0x26, 0x25, 0x91, 0xA0, 0x6D, 0x03, 0x05, 0x24, 0xA1, 0xB6, 0x08, 0x94, 0x44, 0x72, 0x43, 0x34, 0x12, 0x5B, 0xB4, 0x20, 0x41, 0xB6, ++ 0x50, 0xD0, 0x88, 0x8D, 0x0B, 0x07, 0x4D, 0x1C, 0x94, 0x64, 0x4C, 0x20, 0x8E, 0x8B, 0x88, 0x08, 0xE0, 0x30, 0x09, 0x44, 0x20, 0x05, 0x49, 0x86, 0x4D, 0x03, 0x13, 0x4E, 0x19, 0xC9, 0x84, 0x09, ++ 0x37, 0x61, 0x1A, 0x43, 0x68, 0x4A, 0x80, 0x90, 0x02, 0x04, 0x31, 0x1C, 0x17, 0x42, 0x18, 0x40, 0x80, 0xC8, 0x30, 0x8E, 0xE1, 0xA2, 0x41, 0xC3, 0x34, 0x04, 0xA3, 0x28, 0x22, 0x51, 0x24, 0x71, ++ 0x82, 0x84, 0x01, 0x1B, 0xC0, 0x64, 0x23, 0x47, 0x72, 0x82, 0x14, 0x66, 0x5B, 0x38, 0x68, 0xE1, 0xC6, 0x29, 0x9B, 0x90, 0x40, 0x60, 0x38, 0x86, 0x83, 0xA0, 0x40, 0x84, 0x20, 0x04, 0x4C, 0x94, ++ 0x01, 0x10, 0x25, 0x8D, 0x82, 0x02, 0x4D, 0x9A, 0xB2, 0x69, 0x20, 0x15, 0x10, 0x60, 0x46, 0x2D, 0xC2, 0x14, 0x2E, 0x0C, 0xA8, 0x2C, 0x54, 0x16, 0x22, 0x03, 0x46, 0x89, 0x92, 0x06, 0x60, 0x08, ++ 0x07, 0x82, 0x0B, 0x47, 0x44, 0x48, 0x98, 0x09, 0x09, 0x43, 0x0E, 0xE4, 0x32, 0x0A, 0x1A, 0xC0, 0x65, 0xC0, 0xA4, 0x21, 0x44, 0xB2, 0x91, 0x58, 0xC6, 0x04, 0x11, 0x45, 0x20, 0xC4, 0xA4, 0x21, ++ 0x02, 0xA0, 0x70, 0x21, 0x22, 0x26, 0x23, 0xB2, 0x68, 0x4B, 0x08, 0x40, 0x01, 0x03, 0x91, 0x8B, 0x34, 0x81, 0x1A, 0x04, 0x04, 0x0C, 0xB0, 0x05, 0xC2, 0x92, 0x69, 0x90, 0x14, 0x68, 0x04, 0x46, ++ 0x49, 0x14, 0x83, 0x49, 0xA2, 0x34, 0x89, 0x19, 0xC7, 0x28, 0x94, 0x44, 0x71, 0x00, 0xC9, 0x49, 0x58, 0x38, 0x72, 0x02, 0x02, 0x90, 0x42, 0xC6, 0x4C, 0x0C, 0x17, 0x32, 0x48, 0xC6, 0x8C, 0x59, ++ 0x28, 0x31, 0x09, 0xB7, 0x28, 0xCB, 0x48, 0x0E, 0x9A, 0x22, 0x85, 0x1C, 0xB9, 0x11, 0xE3, 0xC6, 0x30, 0xC3, 0x48, 0x28, 0xCC, 0xB8, 0x28, 0x03, 0xC8, 0x08, 0xA4, 0xB6, 0x04, 0xD0, 0x18, 0x8C, ++ 0x60, 0x18, 0x72, 0xD0, 0x20, 0x92, 0x82, 0x02, 0x2E, 0x59, 0x18, 0x89, 0x08, 0x19, 0x32, 0xC9, 0x06, 0x52, 0x60, 0x90, 0x8C, 0x09, 0x80, 0x29, 0xA4, 0xB4, 0x8C, 0x8C, 0x34, 0x82, 0x08, 0x42, ++ 0x10, 0x02, 0x00, 0x08, 0x13, 0x01, 0x50, 0x83, 0xB6, 0x08, 0x41, 0x94, 0x4D, 0x1B, 0x49, 0x6C, 0x19, 0x39, 0x11, 0xCB, 0x32, 0x41, 0x02, 0xC0, 0x65, 0x48, 0x88, 0x91, 0x9B, 0x98, 0x61, 0x08, ++ 0xB5, 0x04, 0x49, 0xB4, 0x45, 0xD3, 0x30, 0x01, 0x98, 0x04, 0x6D, 0x53, 0x00, 0x89, 0x42, 0x32, 0x60, 0x8C, 0xB0, 0x90, 0x64, 0x88, 0x68, 0xD4, 0x32, 0x45, 0x48, 0x14, 0x71, 0x14, 0x98, 0x05, ++ 0x81, 0x00, 0x22, 0xDB, 0x44, 0x69, 0xD9, 0x24, 0x89, 0x11, 0x41, 0x12, 0x09, 0x19, 0x50, 0x92, 0xA0, 0x84, 0xC0, 0x34, 0x22, 0x4A, 0x24, 0x10, 0xDA, 0xC8, 0x09, 0xD2, 0xA8, 0x0D, 0x22, 0x85, ++ 0x21, 0x8B, 0xC8, 0x90, 0xC1, 0x00, 0x66, 0x5C, 0xC0, 0x25, 0x99, 0xA4, 0x61, 0x1A, 0xA4, 0x11, 0x0A, 0x24, 0x28, 0x5B, 0xC4, 0x48, 0x13, 0x14, 0x89, 0x63, 0x92, 0x61, 0x20, 0x30, 0x0C, 0x40, ++ 0x02, 0x25, 0x21, 0x88, 0x28, 0x24, 0x01, 0x8C, 0x10, 0x81, 0x6D, 0x4C, 0x42, 0x49, 0x01, 0x22, 0x2D, 0xC1, 0x96, 0x0C, 0x08, 0x48, 0x90, 0x01, 0xC1, 0x30, 0x23, 0xC1, 0x89, 0xA1, 0xC4, 0x64, ++ 0x12, 0x97, 0x09, 0xCC, 0x90, 0x91, 0x60, 0x20, 0x66, 0x1B, 0x96, 0x48, 0x82, 0xA8, 0x71, 0x91, 0xC0, 0x65, 0xDB, 0xC2, 0x01, 0x84, 0x36, 0x0A, 0x09, 0x24, 0x29, 0x52, 0x10, 0x4E, 0xDB, 0x24, ++ 0x0A, 0x61, 0x02, 0x10, 0x20, 0x38, 0x25, 0x98, 0x34, 0x60, 0x82, 0x24, 0x30, 0xC4, 0x12, 0x49, 0xC0, 0xA2, 0x05, 0x0C, 0x08, 0x85, 0x93, 0x28, 0x09, 0x63, 0xB2, 0x05, 0x23, 0x96, 0x20, 0x42, ++ 0x12, 0x0D, 0xD1, 0xC0, 0x10, 0x08, 0xC5, 0x40, 0xC1, 0x82, 0x65, 0x1B, 0x15, 0x92, 0xA4, 0x14, 0x51, 0x84, 0x04, 0x26, 0x53, 0x42, 0x52, 0x24, 0x23, 0x6D, 0x9C, 0x28, 0x4E, 0x50, 0x14, 0x05, ++ 0x8C, 0x20, 0x80, 0x24, 0x26, 0x65, 0x61, 0x44, 0x4C, 0x02, 0x11, 0x20, 0xC8, 0xC0, 0x4C, 0x18, 0xA0, 0x0D, 0x00, 0x38, 0x70, 0x99, 0x16, 0x12, 0xA1, 0x16, 0x40, 0xC4, 0x18, 0x45, 0x09, 0x93, ++ 0x88, 0x4C, 0x82, 0x21, 0xCB, 0xB2, 0x81, 0x21, 0x26, 0x61, 0xD1, 0xA8, 0x24, 0x41, 0x30, 0x84, 0x08, 0x80, 0x71, 0x00, 0xC6, 0x20, 0x52, 0x42, 0x92, 0x89, 0x24, 0x12, 0xA4, 0x26, 0x89, 0xE3, ++ 0xB0, 0x88, 0x21, 0x98, 0x8C, 0x11, 0x96, 0x2C, 0xE1, 0x96, 0x20, 0x51, 0xC2, 0x81, 0x20, 0x91, 0x80, 0x94, 0x16, 0x6E, 0x14, 0x94, 0x60, 0x20, 0xC9, 0x45, 0x9B, 0x22, 0x45, 0xA2, 0x38, 0x20, ++ 0xC0, 0x36, 0x08, 0x60, 0x90, 0x8D, 0x41, 0x06, 0x02, 0x5B, 0x06, 0x6E, 0xE1, 0x40, 0x0A, 0x89, 0x34, 0x6C, 0x1A, 0xB2, 0x69, 0xA4, 0x16, 0x10, 0x03, 0x33, 0x0E, 0x1A, 0x42, 0x28, 0x03, 0x19, ++ 0x6E, 0x11, 0x44, 0x84, 0x0B, 0x24, 0x4A, 0x1C, 0x16, 0x6A, 0x19, 0x98, 0x40, 0x03, 0xA2, 0x85, 0x41, 0xC0, 0x8C, 0xD2, 0x22, 0x61, 0x0C, 0x82, 0x10, 0x5A, 0xB0, 0x0D, 0x21, 0x14, 0x72, 0x5A, ++ 0x82, 0x80, 0x02, 0x86, 0x10, 0x0C, 0x27, 0x26, 0x5C, 0x48, 0x6E, 0xC9, 0x40, 0x6C, 0x1B, 0x49, 0x04, 0xE4, 0xB8, 0x49, 0xDB, 0x32, 0x8A, 0x9C, 0x24, 0x2C, 0x40, 0x38, 0x80, 0x22, 0xA9, 0x45, ++ }, ++ .t0_len = 3328, ++ .t0 = { ++ 0x12, 0x29, 0xA4, 0xE6, 0x5E, 0xD3, 0x1C, 0x79, 0x3E, 0xCB, 0x5B, 0x89, 0xC5, 0x5D, 0xC3, 0x33, 0xA2, 0x77, 0xBF, 0x5C, 0x41, 0x28, 0xA2, 0x14, 0x01, 0xAF, 0xA8, 0xD4, 0x28, 0xC8, 0x21, 0xE9, ++ 0x7A, 0xEA, 0x05, 0xB3, 0xAD, 0x29, 0x23, 0xBD, 0x97, 0x10, 0x87, 0x1C, 0xE8, 0xB3, 0xB1, 0x1A, 0x71, 0x1C, 0x9A, 0xAC, 0xBA, 0x10, 0x8C, 0xAF, 0x43, 0xA1, 0x72, 0xD6, 0x59, 0x94, 0x01, 0xDB, ++ 0x89, 0x68, 0x1D, 0x0B, 0x87, 0x4E, 0xC3, 0x57, 0xA5, 0x29, 0x5C, 0x0A, 0x08, 0xD5, 0x89, 0xC4, 0x53, 0x9F, 0x9C, 0x59, 0xF3, 0x3F, 0x06, 0x44, 0x64, 0x41, 0x20, 0x49, 0x84, 0xE1, 0xF9, 0x87, ++ 0x3C, 0x1F, 0x97, 0x75, 0xB9, 0x7E, 0xD4, 0x00, 0xC9, 0x98, 0xB0, 0x51, 0x62, 0xB6, 0x18, 0x98, 0x61, 0xF2, 0x8D, 0xAE, 0x36, 0xC2, 0x13, 0x37, 0x65, 0x71, 0x11, 0x76, 0xCA, 0xAF, 0x5A, 0x1D, ++ 0xCB, 0x2A, 0x0E, 0x22, 0x3A, 0x5F, 0x07, 0x9B, 0x07, 0x41, 0xA5, 0xE6, 0xD5, 0x10, 0xE5, 0x87, 0x32, 0xDC, 0x03, 0x59, 0xD7, 0x9A, 0x77, 0x41, 0xA3, 0x79, 0x1C, 0xA6, 0x50, 0x4F, 0x07, 0xCA, ++ 0x8A, 0x2C, 0x03, 0x12, 0x71, 0x18, 0x45, 0x20, 0xEB, 0x76, 0xA0, 0x0B, 0x9B, 0x46, 0x26, 0xDB, 0x37, 0x34, 0x1C, 0x71, 0x80, 0x65, 0xED, 0x95, 0xFE, 0x4C, 0xB0, 0x54, 0xBF, 0xE7, 0x1E, 0x80, ++ 0x26, 0x0D, 0x21, 0x90, 0x7B, 0x9B, 0xFA, 0xEC, 0x86, 0xAC, 0x83, 0xA4, 0x85, 0x63, 0xC0, 0xB9, 0xB2, 0xEF, 0x4B, 0x9B, 0x4E, 0xCB, 0xCB, 0x2F, 0x12, 0x91, 0x98, 0x4E, 0x89, 0xE8, 0x4C, 0x55, ++ 0x69, 0x06, 0x47, 0xE2, 0x65, 0x47, 0xD7, 0x3E, 0x4C, 0xB7, 0xF0, 0xE0, 0x6E, 0xFF, 0xC3, 0xC4, 0x79, 0xE2, 0x56, 0x8E, 0x74, 0x64, 0xEA, 0xBF, 0x1D, 0x1C, 0x4E, 0xFE, 0x21, 0x11, 0x12, 0xE6, ++ 0x2B, 0xEA, 0x8B, 0x85, 0x5F, 0x50, 0xD7, 0x16, 0x51, 0x32, 0x9C, 0x00, 0xEF, 0x61, 0x9F, 0x53, 0x7E, 0x45, 0x4B, 0x09, 0x5A, 0x9D, 0xF6, 0xA8, 0x59, 0x0E, 0x5B, 0xBA, 0xA1, 0x5C, 0x9E, 0x64, ++ 0xE7, 0x01, 0xE3, 0x74, 0x69, 0x74, 0x94, 0x62, 0xA2, 0x11, 0x95, 0x41, 0xE7, 0x55, 0x49, 0xD0, 0x56, 0xA2, 0x5B, 0xBC, 0xEE, 0x11, 0xCD, 0x9F, 0xC6, 0x72, 0x42, 0x2A, 0xD2, 0xAE, 0x97, 0x91, ++ 0x3D, 0x30, 0xBE, 0x3C, 0xD8, 0x5F, 0x58, 0xCF, 0xA9, 0x04, 0xF4, 0x43, 0xAC, 0x3A, 0x8D, 0xFD, 0xBC, 0x2C, 0xC9, 0xC8, 0xC3, 0x9B, 0x24, 0x4E, 0xE7, 0xE0, 0xD9, 0x5B, 0xEC, 0x69, 0x27, 0xA2, ++ 0xB0, 0xB9, 0x4E, 0x97, 0x3F, 0x98, 0x12, 0x24, 0x46, 0x43, 0x14, 0x6E, 0x19, 0x01, 0x3B, 0x7F, 0xE1, 0x71, 0x14, 0xA0, 0xF3, 0x9F, 0x92, 0x28, 0x6B, 0xE0, 0xF0, 0xEE, 0x39, 0x6F, 0xB7, 0x4C, ++ 0x76, 0xC9, 0x10, 0x04, 0xB8, 0x27, 0xD2, 0x18, 0x95, 0x1C, 0x77, 0xBD, 0xB8, 0x15, 0x90, 0xAE, 0xDF, 0xEA, 0x9E, 0x62, 0xBE, 0x0F, 0x22, 0xAF, 0xF5, 0x5E, 0x36, 0xAB, 0x57, 0x2D, 0xF1, 0x3A, ++ 0xB9, 0xF5, 0xEA, 0xFC, 0xBC, 0x34, 0xDF, 0x26, 0x6F, 0xE1, 0x60, 0xC6, 0xB6, 0x35, 0xB0, 0xC3, 0xB6, 0x3C, 0x89, 0x29, 0x20, 0x18, 0x5F, 0x11, 0x2B, 0x96, 0x99, 0x8B, 0x5B, 0x5B, 0xB9, 0x73, ++ 0xB3, 0x90, 0x08, 0xB2, 0xF0, 0x43, 0x40, 0x35, 0xD4, 0x3B, 0xD2, 0xE4, 0x9F, 0x2C, 0x17, 0x45, 0x20, 0xD3, 0xA8, 0x98, 0x54, 0xCD, 0x82, 0x50, 0xD6, 0x20, 0x0A, 0x1E, 0xB5, 0x10, 0x79, 0x22, ++ 0x46, 0x56, 0xD0, 0xB3, 0x34, 0xCE, 0xE3, 0x43, 0x0B, 0x87, 0xE1, 0xFF, 0x90, 0x4D, 0x10, 0x34, 0xC2, 0xD8, 0xA7, 0x04, 0x7B, 0x2D, 0x22, 0x56, 0x33, 0x19, 0x04, 0x10, 0x01, 0x2C, 0x16, 0x1C, ++ 0x76, 0x8C, 0x1F, 0xF8, 0xFC, 0x17, 0x9A, 0x44, 0x68, 0x64, 0xDF, 0x93, 0xE0, 0x9D, 0x1E, 0x6C, 0x29, 0x48, 0x7C, 0xAB, 0x04, 0x4E, 0xF8, 0x68, 0xD4, 0x31, 0xB1, 0x76, 0x31, 0x84, 0xAD, 0xCB, ++ 0x39, 0x51, 0x6D, 0xD1, 0x27, 0x6B, 0xD8, 0x41, 0xEC, 0x49, 0x2A, 0x84, 0x51, 0x77, 0x4E, 0xDA, 0x10, 0x6E, 0x73, 0x21, 0xED, 0x5A, 0x62, 0x25, 0xC3, 0x53, 0x24, 0xC5, 0x10, 0x66, 0x3B, 0x9B, ++ 0xEA, 0x05, 0xF1, 0xDB, 0xC8, 0xD5, 0xDB, 0x69, 0xA7, 0x7E, 0xCE, 0x3E, 0x42, 0x65, 0xC5, 0xE8, 0x10, 0x69, 0x86, 0x45, 0x80, 0xB5, 0x28, 0xCC, 0x2C, 0xBB, 0xFB, 0xDE, 0x62, 0x5A, 0xF2, 0xC1, ++ 0xC5, 0xCB, 0x06, 0xDD, 0x80, 0x58, 0x54, 0x04, 0x96, 0x4D, 0x21, 0x11, 0x4B, 0x8B, 0x13, 0xCA, 0xFB, 0x6D, 0xBE, 0x1B, 0x42, 0x8E, 0xBC, 0x87, 0x17, 0xCC, 0xD1, 0x1B, 0xFB, 0x34, 0x72, 0x60, ++ 0xAA, 0x70, 0x1B, 0xF2, 0x28, 0x35, 0xB3, 0xF1, 0x06, 0x2E, 0xAD, 0x36, 0xAC, 0xB9, 0x6D, 0x74, 0x96, 0xF7, 0x2A, 0xA5, 0xFF, 0x1A, 0x13, 0x04, 0xBC, 0x02, 0xE3, 0x58, 0xE6, 0x0B, 0x1C, 0x82, ++ 0x30, 0xBF, 0x8F, 0xFA, 0xFD, 0x36, 0xE0, 0xF6, 0xB2, 0xE3, 0xD8, 0x58, 0x2F, 0xD3, 0xA4, 0x38, 0x11, 0xAC, 0x24, 0xD0, 0x60, 0x08, 0x10, 0x35, 0x42, 0x87, 0x8C, 0xB5, 0xCE, 0x99, 0xF8, 0x92, ++ 0x0C, 0xC8, 0x02, 0xDA, 0x4E, 0xD2, 0x18, 0x39, 0x56, 0x83, 0x4D, 0xA4, 0xC7, 0x19, 0x55, 0x0D, 0xB2, 0x47, 0x95, 0xAC, 0xE0, 0x9D, 0x88, 0xCA, 0x30, 0x43, 0xAF, 0xCC, 0xC9, 0xAB, 0x0F, 0x03, ++ 0x06, 0x67, 0x1F, 0xD1, 0xF2, 0x50, 0x95, 0x7C, 0xC6, 0x24, 0x64, 0xC9, 0xEA, 0x5E, 0x44, 0x4C, 0x6E, 0xB4, 0x76, 0xD0, 0x92, 0x46, 0x56, 0x08, 0xFE, 0xB6, 0xB7, 0xD5, 0x39, 0x8A, 0x02, 0x9E, ++ 0x1E, 0xEA, 0xE5, 0x0D, 0xB5, 0xF9, 0xF9, 0x95, 0x50, 0xA9, 0x66, 0x83, 0x43, 0xEF, 0x29, 0x70, 0xF2, 0x25, 0x31, 0x67, 0x8E, 0x36, 0x71, 0x3B, 0x81, 0xCB, 0x36, 0x33, 0xF1, 0xDD, 0xD4, 0x67, ++ 0x69, 0x82, 0x6E, 0x43, 0x60, 0xDE, 0x19, 0xA5, 0x63, 0x18, 0xD9, 0xEB, 0x59, 0xF9, 0x7A, 0x9B, 0x3E, 0xD2, 0x2B, 0xFD, 0x89, 0x50, 0x11, 0x26, 0x29, 0x5E, 0x89, 0xFC, 0x73, 0x5C, 0x36, 0x19, ++ 0xD7, 0x7F, 0x6F, 0xB9, 0x35, 0xC2, 0xFB, 0x46, 0xED, 0xD0, 0xA4, 0xD2, 0x92, 0x17, 0x77, 0xB0, 0xEF, 0xCD, 0x58, 0xBE, 0xDC, 0xEB, 0x9E, 0xA5, 0x66, 0x6B, 0x18, 0xDF, 0xAC, 0xF9, 0xBF, 0x76, ++ 0x33, 0x3C, 0x5E, 0xDA, 0xC7, 0x2B, 0x04, 0xE6, 0x57, 0xE4, 0xE0, 0x86, 0x5E, 0x04, 0x3A, 0x64, 0x68, 0xC5, 0xE6, 0x9D, 0x5B, 0xCB, 0xE5, 0x84, 0x2B, 0xF4, 0x5B, 0xEE, 0x77, 0x91, 0x5F, 0x05, ++ 0x71, 0xD1, 0x50, 0xD6, 0x06, 0xA6, 0xF2, 0xAC, 0x37, 0x37, 0x92, 0x90, 0x88, 0x91, 0xBA, 0x85, 0xF4, 0x5C, 0xB4, 0x09, 0xD9, 0x63, 0xE4, 0x9B, 0x5B, 0x96, 0x97, 0x8A, 0x19, 0x39, 0x16, 0x0A, ++ 0x8D, 0xB9, 0xD6, 0x3C, 0x4E, 0xA0, 0xD6, 0xA7, 0xD0, 0x93, 0x70, 0xAC, 0x1C, 0x24, 0x49, 0x8D, 0x21, 0xA8, 0xD5, 0xB7, 0x64, 0xA3, 0x9A, 0x41, 0x2E, 0x5B, 0x54, 0xBD, 0x1C, 0x96, 0x4D, 0x24, ++ 0x4A, 0x45, 0x55, 0x64, 0x5F, 0x1F, 0x90, 0x53, 0xF8, 0xBB, 0x33, 0xF6, 0xF7, 0x51, 0x46, 0x80, 0x7B, 0x4E, 0x9E, 0x07, 0xB2, 0x3C, 0x98, 0x06, 0xFF, 0x75, 0x72, 0x46, 0x9C, 0x09, 0x43, 0x99, ++ 0xBA, 0x97, 0x79, 0xB9, 0x62, 0xB4, 0xC8, 0xA9, 0x57, 0xF8, 0x69, 0x91, 0x1E, 0xB1, 0x3F, 0x14, 0x02, 0x24, 0xAC, 0x4E, 0xE7, 0x62, 0x01, 0xC0, 0x2F, 0x24, 0xC7, 0xED, 0xC3, 0xA9, 0x80, 0x89, ++ 0x9A, 0x30, 0xBA, 0xD2, 0xB1, 0x2D, 0x57, 0x28, 0xF0, 0x97, 0x17, 0x6D, 0x00, 0x17, 0xF3, 0x47, 0x3D, 0x2F, 0xBB, 0xD4, 0x3C, 0xC2, 0x3A, 0x50, 0x1E, 0x81, 0xE3, 0x81, 0xBE, 0x01, 0x79, 0xBF, ++ 0x68, 0xCA, 0x50, 0xFD, 0x23, 0x55, 0xCA, 0x7B, 0x64, 0xF5, 0x3E, 0x0C, 0x7D, 0x5B, 0xCA, 0x4E, 0x7B, 0xE6, 0x91, 0x63, 0xE3, 0x16, 0xFE, 0xBB, 0x49, 0xA9, 0x34, 0x0F, 0x15, 0x7B, 0xAC, 0x3B, ++ 0x0B, 0xD8, 0x4A, 0x3B, 0x02, 0x7A, 0x2F, 0xE4, 0x4E, 0xC2, 0x66, 0xA8, 0xCE, 0x4A, 0x17, 0x1B, 0x91, 0x82, 0x8F, 0x45, 0x43, 0x02, 0xAA, 0x9B, 0x66, 0x49, 0x67, 0xE6, 0x7D, 0xB3, 0x8A, 0xA4, ++ 0xE3, 0xBC, 0x35, 0x3D, 0x15, 0x18, 0xA7, 0xFE, 0xC1, 0x18, 0x8B, 0x7D, 0x5B, 0x7E, 0x19, 0x52, 0x1F, 0x1A, 0x28, 0x77, 0x00, 0x69, 0x89, 0xB0, 0xFE, 0x91, 0x89, 0x46, 0xB7, 0x59, 0x3E, 0xD1, ++ 0x51, 0x20, 0xBF, 0x7D, 0x23, 0xF9, 0x92, 0x10, 0xDD, 0xB7, 0x6D, 0xAF, 0x86, 0xE2, 0x37, 0xB2, 0x37, 0x9C, 0xA1, 0x2E, 0x55, 0x63, 0x6C, 0x83, 0x40, 0x8E, 0x6D, 0x2B, 0x35, 0x85, 0xFA, 0xBC, ++ 0xBC, 0x0F, 0x6C, 0x48, 0x76, 0x7E, 0x36, 0x3A, 0xC8, 0x47, 0xCC, 0xC6, 0x7E, 0xB7, 0xC9, 0x37, 0xBB, 0xD9, 0x41, 0x10, 0x0D, 0x78, 0x77, 0x4A, 0xE1, 0xF4, 0x43, 0x39, 0xDC, 0xDC, 0xB0, 0xE7, ++ 0x00, 0xAC, 0x10, 0x8D, 0xAA, 0x92, 0xCD, 0x9E, 0xA1, 0x9F, 0x82, 0x38, 0xF2, 0x86, 0x76, 0xFE, 0xE7, 0xBD, 0x1B, 0x9F, 0x37, 0xA6, 0xCA, 0x17, 0xD7, 0xCF, 0x40, 0x42, 0xFE, 0x39, 0xDD, 0x93, ++ 0x77, 0x82, 0x6C, 0x4C, 0xAB, 0x29, 0x32, 0xE1, 0x2D, 0xE5, 0x3B, 0x08, 0x1A, 0x6C, 0x25, 0xC0, 0xF4, 0x7D, 0xA3, 0xD9, 0x16, 0x83, 0x1E, 0x42, 0x47, 0xD0, 0x97, 0x81, 0x1E, 0x1A, 0x08, 0x70, ++ 0xCB, 0x61, 0xF4, 0xAC, 0xA1, 0x27, 0xEA, 0xF8, 0x5A, 0x9C, 0xA6, 0x66, 0xFA, 0x6C, 0x36, 0x39, 0x8F, 0x0E, 0x74, 0x20, 0xCA, 0x98, 0x95, 0xC6, 0x3A, 0x1A, 0xC4, 0xDB, 0x49, 0xA1, 0xD7, 0x5F, ++ 0x56, 0x46, 0x4C, 0x1E, 0x0C, 0xF9, 0x28, 0x3A, 0x45, 0x44, 0x56, 0x50, 0xF9, 0x5F, 0xAD, 0xF6, 0xC8, 0x8D, 0xB3, 0xCE, 0x7C, 0x0E, 0x5D, 0x0E, 0x72, 0x61, 0xE8, 0x04, 0xC0, 0x3A, 0x41, 0x9E, ++ 0x4C, 0xC2, 0x50, 0x10, 0x99, 0xCA, 0x53, 0x63, 0x44, 0x60, 0x7B, 0x07, 0xE8, 0x25, 0x32, 0x3A, 0xD3, 0x0B, 0xE7, 0x5F, 0x84, 0xE6, 0xC5, 0xBE, 0x23, 0x8E, 0xC7, 0x86, 0x17, 0xA0, 0xA2, 0x34, ++ 0x14, 0xC7, 0xF8, 0xCD, 0x60, 0x91, 0x30, 0x31, 0xBC, 0x93, 0x01, 0x78, 0x6D, 0x5C, 0x19, 0xD9, 0x30, 0xB5, 0x06, 0xC4, 0x95, 0x98, 0x32, 0x23, 0xEC, 0x1B, 0xF7, 0x87, 0xC3, 0x3D, 0x22, 0x8A, ++ 0x11, 0x0E, 0x57, 0x42, 0x87, 0x73, 0xE3, 0x4F, 0x12, 0x66, 0x3D, 0x11, 0xC1, 0x55, 0xDF, 0xCE, 0x38, 0x0D, 0x65, 0x76, 0x4C, 0x26, 0x59, 0xEA, 0xA0, 0xA1, 0xA2, 0xE7, 0x64, 0xEB, 0xB5, 0xA9, ++ 0xE5, 0xA7, 0x19, 0x2E, 0x90, 0x86, 0xA6, 0xDE, 0x4A, 0x38, 0xFC, 0xFD, 0x04, 0x12, 0x42, 0x42, 0x60, 0x62, 0x0C, 0x1E, 0x56, 0x7A, 0x2D, 0x8B, 0x1A, 0xF3, 0x55, 0x48, 0x19, 0xA0, 0x0D, 0x5C, ++ 0x7E, 0x56, 0x66, 0xD0, 0xE6, 0x56, 0xF8, 0xD4, 0x5C, 0x67, 0xC5, 0x44, 0x8D, 0xAB, 0x5E, 0xB6, 0xE6, 0x02, 0x93, 0x79, 0xC4, 0x7A, 0x24, 0xD0, 0x11, 0xF5, 0x6E, 0x5F, 0xAA, 0x49, 0xFC, 0x6B, ++ 0xB2, 0xD7, 0x50, 0xED, 0x4C, 0x95, 0xF8, 0x35, 0x38, 0x4F, 0x2F, 0xAA, 0xB1, 0x3C, 0x1C, 0xCA, 0x71, 0xA1, 0xEB, 0xD2, 0x29, 0x9E, 0x96, 0x32, 0xE5, 0x29, 0xCE, 0x77, 0x14, 0x9F, 0x5F, 0xAC, ++ 0x31, 0xAB, 0x28, 0xDC, 0xC7, 0x06, 0x70, 0xBB, 0xAB, 0x9F, 0x7B, 0x6F, 0xFE, 0xAA, 0xBC, 0x7D, 0xC4, 0x51, 0x3D, 0x8F, 0xAC, 0x4B, 0xCF, 0x7E, 0x5E, 0x72, 0x97, 0xDB, 0x69, 0xE4, 0xB6, 0x25, ++ 0x38, 0xF9, 0xCA, 0xBD, 0x90, 0x2B, 0x10, 0x07, 0xE3, 0xBA, 0xF6, 0x7F, 0x94, 0x3D, 0xFD, 0xC6, 0xAA, 0x75, 0x62, 0xFA, 0xBB, 0x1E, 0x8F, 0xAC, 0xF8, 0x11, 0xC7, 0x63, 0x35, 0x79, 0x0A, 0x16, ++ 0xF2, 0x1E, 0xCB, 0x72, 0xFC, 0x1B, 0xA9, 0x42, 0x76, 0xB2, 0x09, 0x80, 0x7E, 0xA5, 0x2E, 0x74, 0xF2, 0xB6, 0xCA, 0x0B, 0x3F, 0xDC, 0x30, 0x50, 0x1F, 0x63, 0x10, 0xEC, 0x99, 0x55, 0xB0, 0x51, ++ 0x81, 0x8D, 0xAE, 0x10, 0x80, 0xFD, 0x4D, 0xD2, 0x4C, 0x72, 0x2D, 0x68, 0xDE, 0x33, 0xEA, 0x76, 0x9B, 0x4E, 0x63, 0x70, 0x07, 0xCF, 0xDC, 0xE1, 0x80, 0x4A, 0xC2, 0xA7, 0x71, 0xF8, 0x8F, 0x59, ++ 0xBA, 0xCE, 0xDB, 0x4D, 0xFB, 0x79, 0xA4, 0x1E, 0xA7, 0x0F, 0x14, 0xAC, 0xCE, 0x6A, 0x5A, 0x8A, 0x88, 0x43, 0xB5, 0x95, 0x89, 0xE4, 0x52, 0x8B, 0xA8, 0x52, 0x10, 0x42, 0x1D, 0x1E, 0x59, 0x5F, ++ 0x84, 0xC2, 0x75, 0x90, 0x47, 0xDB, 0x47, 0x22, 0x26, 0x73, 0x86, 0x8C, 0x00, 0x27, 0xEE, 0xFD, 0x99, 0x6E, 0xF8, 0xC8, 0xC4, 0xF3, 0x67, 0xA9, 0x1D, 0xEC, 0xF1, 0x79, 0x43, 0x22, 0x7D, 0x4D, ++ 0x00, 0x44, 0x7F, 0xFC, 0x6C, 0xC8, 0x66, 0x5E, 0x08, 0xD2, 0x93, 0xA4, 0xDE, 0x4E, 0xE1, 0x15, 0x69, 0xB9, 0x5B, 0xB4, 0xDA, 0xE7, 0x58, 0x15, 0x0E, 0x55, 0x78, 0x32, 0x55, 0xE2, 0xF3, 0x22, ++ 0x27, 0xB4, 0x5A, 0x9D, 0x26, 0x19, 0x77, 0x1C, 0xED, 0x51, 0x2D, 0x5C, 0xD8, 0x90, 0x18, 0xC9, 0x9E, 0x2F, 0x05, 0x23, 0x3E, 0xF5, 0x86, 0x0F, 0xEC, 0xB3, 0x79, 0x1B, 0x53, 0xAD, 0x2C, 0x22, ++ 0x8A, 0xBA, 0xBB, 0x9F, 0xD1, 0xF5, 0x04, 0x38, 0xE9, 0xB0, 0xC6, 0xEA, 0x61, 0xE2, 0x0B, 0xB5, 0xAC, 0x0A, 0xAD, 0x30, 0x50, 0x9F, 0xEA, 0x9A, 0x44, 0x1D, 0x55, 0x5C, 0xDD, 0x34, 0x50, 0x9C, ++ 0xFC, 0x60, 0x62, 0xE6, 0xB8, 0x1D, 0xCA, 0xCF, 0xD5, 0xF5, 0xC9, 0xC5, 0x26, 0xB3, 0x8D, 0x70, 0x4C, 0x1F, 0x0F, 0x28, 0xB4, 0xFB, 0x7C, 0x1A, 0xC6, 0x9A, 0xA1, 0x96, 0xCF, 0x81, 0x2E, 0x44, ++ 0x46, 0xEF, 0x68, 0x02, 0x87, 0x44, 0xD2, 0xA5, 0x40, 0xFA, 0x7A, 0x69, 0xCF, 0x87, 0xA1, 0xF9, 0x68, 0x24, 0xE4, 0xC6, 0x87, 0x82, 0x35, 0xF0, 0xCC, 0xA3, 0xE9, 0x7B, 0x2B, 0x22, 0xB0, 0x93, ++ 0xD9, 0x5E, 0xE1, 0x8D, 0xBF, 0xE6, 0x76, 0x1D, 0xFA, 0xF8, 0x34, 0x47, 0x51, 0x86, 0x07, 0x56, 0x02, 0x31, 0x3E, 0xE2, 0xA2, 0x99, 0xBC, 0xCC, 0xC6, 0x53, 0x1E, 0xDA, 0x54, 0x10, 0xCC, 0xFA, ++ 0x09, 0xEC, 0xB8, 0xA6, 0x0D, 0x28, 0x33, 0x7A, 0xA5, 0x56, 0x58, 0x6D, 0x78, 0x48, 0x49, 0x38, 0x0F, 0x02, 0xEB, 0xB8, 0x37, 0xCB, 0x0B, 0xDE, 0x57, 0xBB, 0xA9, 0x07, 0xB6, 0x7C, 0x7A, 0xD8, ++ 0x66, 0xE1, 0xDD, 0xB1, 0xC7, 0x9D, 0x96, 0x1D, 0x70, 0xF5, 0x5D, 0x05, 0x9A, 0xCF, 0xD3, 0x9F, 0x5B, 0xD3, 0x03, 0x74, 0xB4, 0x84, 0x5E, 0x04, 0xEC, 0x26, 0xE8, 0xB5, 0xB9, 0x3F, 0xC4, 0x54, ++ 0x4F, 0x24, 0xAE, 0x99, 0xC9, 0xE5, 0x1E, 0x43, 0x57, 0x75, 0xD2, 0x20, 0x80, 0xE1, 0x9E, 0x3A, 0xC2, 0x25, 0xC7, 0xE1, 0xEE, 0x0A, 0x56, 0xB9, 0x52, 0x30, 0x7F, 0x44, 0xBA, 0xCF, 0x4C, 0x87, ++ 0x85, 0x35, 0x5C, 0x09, 0xDB, 0xD0, 0xD8, 0x60, 0x57, 0xF0, 0xA6, 0xA9, 0x88, 0xC3, 0x65, 0x74, 0x20, 0x25, 0x19, 0xDE, 0xBA, 0x04, 0x56, 0x98, 0xD7, 0x24, 0x27, 0x77, 0x0C, 0x37, 0x31, 0xC9, ++ 0xB7, 0x53, 0x5F, 0xAA, 0xF0, 0xCC, 0xA9, 0xD1, 0x3C, 0x42, 0x12, 0xB7, 0x62, 0x94, 0x57, 0x52, 0xE7, 0xA6, 0x53, 0x9B, 0x47, 0xBE, 0xA9, 0x66, 0x48, 0x23, 0x18, 0xA9, 0xCF, 0xE3, 0xBA, 0xEC, ++ 0x6A, 0x83, 0xFB, 0x34, 0xF0, 0xB6, 0x8E, 0xE9, 0x77, 0x97, 0x42, 0x0F, 0xAD, 0xC3, 0xF0, 0x25, 0xEE, 0x9F, 0x18, 0xBE, 0xA3, 0x8F, 0xBE, 0xC0, 0xC5, 0xDE, 0xAA, 0xC7, 0xA5, 0x2F, 0x7E, 0xB8, ++ 0xD9, 0x4F, 0xE4, 0xC6, 0x62, 0x54, 0x14, 0x57, 0xA1, 0x53, 0x82, 0x4B, 0xE6, 0x0D, 0x7D, 0xB8, 0x33, 0x89, 0x0F, 0x3A, 0xC3, 0xF7, 0xBD, 0x6D, 0x73, 0xF8, 0x0C, 0x67, 0x2B, 0x76, 0xA5, 0x26, ++ 0x7D, 0xF2, 0x2C, 0xFB, 0x5E, 0x1B, 0x92, 0xB0, 0xCD, 0x68, 0xE9, 0xA9, 0x20, 0x92, 0x43, 0xA4, 0x2A, 0x30, 0xF7, 0xAA, 0x1F, 0x03, 0xD0, 0xD9, 0x11, 0x3F, 0x04, 0xB7, 0x6E, 0xB5, 0xAA, 0x69, ++ 0xBC, 0x9B, 0x8F, 0xE7, 0x98, 0xE7, 0x75, 0x01, 0xB0, 0x56, 0x30, 0x29, 0xF5, 0x02, 0xF7, 0x79, 0x4D, 0xD3, 0x90, 0x74, 0x7A, 0xED, 0x08, 0x5C, 0x22, 0xB2, 0x16, 0x11, 0xA9, 0xC7, 0x62, 0x38, ++ 0xEF, 0x65, 0x84, 0xAE, 0xFB, 0xB3, 0x57, 0xF8, 0x36, 0x25, 0x86, 0xC5, 0x9F, 0xCA, 0x8E, 0x09, 0x26, 0x10, 0x11, 0x5F, 0x4D, 0xC2, 0x93, 0x0D, 0x72, 0x24, 0x28, 0x5E, 0xB8, 0xFD, 0x99, 0x2F, ++ 0x82, 0x17, 0xAE, 0x94, 0x70, 0xA7, 0x4A, 0xE3, 0xE8, 0x06, 0x01, 0x0C, 0x8D, 0x02, 0x19, 0x48, 0xBE, 0x57, 0xAB, 0x1D, 0x62, 0xC0, 0x41, 0x2E, 0xA5, 0xC9, 0x69, 0xD0, 0x56, 0x68, 0x41, 0xF2, ++ 0xE2, 0x56, 0x8E, 0x01, 0x33, 0x64, 0xD8, 0x7C, 0xAF, 0x33, 0x22, 0x9D, 0x2A, 0xA6, 0xC5, 0x6B, 0x9F, 0xB4, 0xC1, 0x36, 0xA1, 0x3F, 0x5E, 0x73, 0x3A, 0x91, 0xEF, 0xF2, 0x1D, 0xCB, 0x29, 0x0D, ++ 0x8E, 0xC6, 0xDC, 0x0A, 0x50, 0xE5, 0x7C, 0x1F, 0x65, 0xEB, 0x2B, 0xA1, 0xC3, 0x9D, 0xDB, 0x1C, 0x09, 0x54, 0x24, 0xE6, 0xF4, 0x1F, 0x9E, 0x86, 0x56, 0x7F, 0x91, 0x14, 0x00, 0xD8, 0x5C, 0x90, ++ 0xD6, 0x4F, 0xC7, 0xE6, 0xEC, 0xC2, 0x88, 0x04, 0xF2, 0x70, 0x42, 0x40, 0x24, 0x9E, 0xFC, 0x8F, 0xEC, 0x69, 0xE3, 0x66, 0xF3, 0x68, 0x7A, 0x76, 0x20, 0x5C, 0x0D, 0x1D, 0xD6, 0x48, 0x39, 0x12, ++ 0xA8, 0xF6, 0x8E, 0xAE, 0x2C, 0xB3, 0x52, 0x0A, 0x8B, 0x17, 0x2C, 0xF2, 0xCD, 0x2B, 0x03, 0x80, 0x2E, 0x5F, 0xA7, 0xB1, 0xF1, 0xEF, 0x8C, 0xA0, 0xA6, 0x08, 0x0B, 0xF9, 0xDA, 0x37, 0x82, 0xD2, ++ 0xBD, 0xE4, 0xB3, 0xA3, 0xC6, 0x5C, 0xFB, 0x9F, 0x1B, 0x39, 0x05, 0xB9, 0x36, 0x1D, 0x1E, 0x0C, 0x8F, 0xEB, 0x5A, 0xB4, 0x0A, 0x3F, 0xFE, 0xB3, 0xAE, 0x95, 0xF5, 0x75, 0x62, 0xA0, 0x7C, 0xD2, ++ 0x43, 0x18, 0xC0, 0xE7, 0xEE, 0x6E, 0xBE, 0x57, 0x0C, 0xB7, 0xDC, 0x1C, 0x62, 0x1A, 0x84, 0x92, 0x13, 0xE7, 0x13, 0x92, 0x42, 0x75, 0x81, 0x28, 0xC1, 0x6C, 0xFE, 0x52, 0xF8, 0xE2, 0xED, 0xA5, ++ 0xBA, 0x23, 0x23, 0x15, 0x6F, 0x85, 0x3A, 0xBC, 0x61, 0xB1, 0x39, 0x04, 0x1A, 0x4B, 0x83, 0x40, 0x37, 0xAA, 0x19, 0xDC, 0xEE, 0x76, 0x06, 0xAE, 0x84, 0xC1, 0xA7, 0x4D, 0x0E, 0xEB, 0x6A, 0x4D, ++ 0xAB, 0xD5, 0x90, 0x8D, 0xAE, 0x2C, 0x23, 0xA6, 0x38, 0x76, 0xE7, 0xE9, 0xF8, 0xE9, 0x03, 0x66, 0xA1, 0xFD, 0x89, 0xF2, 0x28, 0x3D, 0x75, 0x30, 0x09, 0xE0, 0x56, 0xDD, 0x5A, 0xB9, 0x53, 0xDB, ++ 0x3D, 0x8F, 0x48, 0x30, 0xA4, 0xD0, 0x93, 0x79, 0x39, 0x5F, 0x21, 0xED, 0x03, 0xB6, 0xCC, 0xD5, 0xD7, 0xF8, 0xF8, 0x1F, 0x40, 0x0B, 0x3E, 0x3B, 0xC6, 0x96, 0x08, 0x8D, 0x58, 0x17, 0x75, 0x21, ++ 0x11, 0x0B, 0x6C, 0x84, 0x74, 0xF3, 0xE4, 0x49, 0xD8, 0xEC, 0x7F, 0x46, 0x6C, 0x2E, 0xB3, 0x43, 0x65, 0x9F, 0xF5, 0x33, 0x97, 0x58, 0x7B, 0xC6, 0x30, 0x0D, 0xEE, 0xBD, 0xC2, 0xBE, 0x67, 0x4B, ++ 0x78, 0x30, 0x90, 0xEA, 0xCC, 0xB9, 0x3B, 0x6A, 0xE9, 0x49, 0x56, 0xA3, 0x33, 0xE8, 0x58, 0x37, 0x64, 0x73, 0xCA, 0x67, 0xAF, 0x05, 0x43, 0xE5, 0x99, 0x94, 0x1E, 0xB4, 0xE8, 0xC6, 0xD9, 0x5D, ++ 0x47, 0x9F, 0xEE, 0xE0, 0x5E, 0x3E, 0x8B, 0xF5, 0xF0, 0xAA, 0xCD, 0x34, 0x51, 0xC0, 0xED, 0x48, 0x1F, 0x52, 0x6D, 0x38, 0xEB, 0x3B, 0x26, 0xA4, 0xFD, 0x98, 0xE1, 0x1B, 0xAF, 0x67, 0xED, 0xEA, ++ 0xB2, 0xEC, 0xC7, 0xD3, 0x97, 0xE9, 0x68, 0xF8, 0xD1, 0x03, 0xE8, 0x01, 0x44, 0xA4, 0xCD, 0xB7, 0x00, 0xC4, 0x1A, 0x42, 0x83, 0x4B, 0x07, 0xFD, 0x7E, 0x91, 0xF3, 0xC5, 0x24, 0x09, 0xC6, 0x88, ++ 0x2C, 0xF4, 0x15, 0xA4, 0x2F, 0x71, 0xE2, 0x1F, 0xE7, 0x00, 0x17, 0xD6, 0x2B, 0x1F, 0xE4, 0x3A, 0x2A, 0x32, 0xD8, 0x15, 0xE3, 0xF1, 0xA4, 0x4E, 0x72, 0x67, 0xB1, 0xBB, 0xF5, 0x52, 0xF3, 0x8E, ++ 0x88, 0x97, 0x75, 0xEC, 0xD8, 0x5C, 0x4B, 0xF4, 0x65, 0x02, 0x22, 0xF3, 0x30, 0xFA, 0xE4, 0xB6, 0x17, 0x65, 0x52, 0x54, 0x03, 0xFB, 0xDE, 0x0A, 0x18, 0xF9, 0x73, 0x65, 0x7C, 0xAB, 0xEB, 0x05, ++ 0xFE, 0x6B, 0x97, 0x29, 0xD3, 0xB3, 0x73, 0x0A, 0xEF, 0xDF, 0x3C, 0x18, 0x96, 0x99, 0x7A, 0x94, 0x9B, 0x60, 0x3C, 0x43, 0xFE, 0xCC, 0x3E, 0xAC, 0xCB, 0xF0, 0x0C, 0x03, 0x76, 0x59, 0x41, 0x80, ++ 0x0C, 0xE4, 0x2F, 0xD0, 0x38, 0x4E, 0x1C, 0x1C, 0x61, 0x17, 0x31, 0x6C, 0xBA, 0x1A, 0x81, 0xA2, 0x09, 0x03, 0x3C, 0x5B, 0x53, 0xAE, 0x3B, 0x60, 0xBC, 0x1A, 0xFC, 0x6E, 0x7C, 0x95, 0xC5, 0xCB, ++ 0x99, 0xC2, 0x6A, 0x4C, 0x88, 0x1F, 0x62, 0x6A, 0x21, 0x9A, 0x61, 0x9B, 0xC3, 0x5C, 0xF4, 0xEF, 0x0A, 0x3B, 0x67, 0x25, 0x34, 0x9D, 0x2C, 0x13, 0xD8, 0x9D, 0xE6, 0x5D, 0x9F, 0x7A, 0x35, 0x51, ++ 0xCC, 0xCF, 0xC5, 0x61, 0x1D, 0xC9, 0xC8, 0x73, 0x7B, 0x0E, 0xF0, 0xFA, 0xDF, 0x86, 0x5A, 0x65, 0x33, 0x9F, 0x46, 0x4C, 0xB0, 0x65, 0xBA, 0x8F, 0xE4, 0x81, 0x06, 0x46, 0xA3, 0x44, 0x5B, 0x70, ++ 0x2F, 0x51, 0xD6, 0xA9, 0x13, 0x49, 0xFD, 0x70, 0xA3, 0x56, 0x49, 0xFD, 0x4D, 0xAE, 0xE6, 0x13, 0x10, 0xA3, 0xCC, 0xA5, 0xED, 0x3A, 0xBD, 0xBF, 0xF8, 0x35, 0x5B, 0x51, 0x14, 0x83, 0x5F, 0xDE, ++ 0x73, 0xC9, 0xF5, 0x2A, 0xC2, 0x29, 0xB1, 0x5E, 0x84, 0xD3, 0xF5, 0x9D, 0xCB, 0x13, 0x02, 0x55, 0x1E, 0xA4, 0xDD, 0x6F, 0x41, 0x5D, 0x01, 0x39, 0x11, 0xD6, 0x53, 0x15, 0xC8, 0xE5, 0x9B, 0x12, ++ 0x20, 0x4A, 0xAA, 0xF5, 0x25, 0x75, 0x4E, 0x96, 0xEC, 0x3C, 0xB1, 0x3E, 0x19, 0x72, 0x62, 0x1F, 0x9C, 0x86, 0xF5, 0xDE, 0x4A, 0xDA, 0xB9, 0x80, 0xCF, 0x83, 0x69, 0x12, 0x7C, 0x2B, 0x3E, 0x4E, ++ 0xF1, 0xA8, 0x2B, 0x7A, 0xC9, 0x59, 0xAB, 0x45, 0xD9, 0x7E, 0xEE, 0x7A, 0x14, 0xE4, 0x14, 0x5B, 0x34, 0x9B, 0x53, 0x3D, 0xD9, 0x2D, 0xD2, 0xC1, 0x77, 0xC7, 0x7A, 0xBA, 0x32, 0x5D, 0xD7, 0x5C, ++ 0x77, 0xB3, 0x1A, 0x6A, 0xB3, 0xAA, 0xBE, 0x54, 0xA6, 0xCF, 0xA2, 0xDC, 0xA3, 0x5E, 0x20, 0x99, 0x35, 0xEF, 0x9D, 0x94, 0x7A, 0x37, 0xE8, 0x35, 0x97, 0xB9, 0x4F, 0xCA, 0xF5, 0x8A, 0x56, 0xD1, ++ 0x4A, 0x05, 0x69, 0x12, 0xC2, 0x2A, 0x54, 0xA6, 0xFF, 0x2F, 0xE8, 0x25, 0xBA, 0xAD, 0x8A, 0xBF, 0x1D, 0xD8, 0x7F, 0xB0, 0xFA, 0x15, 0x19, 0xA5, 0xB7, 0xB4, 0x2F, 0x4B, 0xB2, 0xF7, 0x57, 0xEF, ++ 0xF7, 0xC1, 0x2A, 0x2C, 0xD1, 0xB9, 0x1F, 0xAE, 0xBF, 0x80, 0x86, 0x51, 0x6D, 0xCD, 0xD5, 0x5F, 0x63, 0x84, 0x18, 0x8F, 0x53, 0xC6, 0xA7, 0x81, 0x86, 0x2F, 0xB5, 0xCC, 0x3C, 0xC6, 0x1A, 0xDE, ++ 0x2F, 0x11, 0x08, 0xD1, 0x51, 0x63, 0xC3, 0x8C, 0x4C, 0xA0, 0x1B, 0xF7, 0xF2, 0xC8, 0x1B, 0x8C, 0x79, 0xAD, 0x69, 0x4A, 0x01, 0x61, 0x7B, 0xC0, 0x4F, 0x84, 0x70, 0xC2, 0xC7, 0x71, 0xBE, 0xE2, ++ 0x9A, 0x66, 0x6B, 0xE8, 0x51, 0x42, 0xCB, 0x96, 0x7E, 0xC5, 0x69, 0xA4, 0x02, 0x2A, 0x64, 0xFC, 0x5D, 0x95, 0xA5, 0x57, 0x76, 0xAC, 0x73, 0x27, 0x55, 0xB2, 0x39, 0x29, 0xF2, 0x59, 0x86, 0xD9, ++ 0x3C, 0x01, 0x9B, 0xBB, 0xFB, 0x15, 0x4C, 0x26, 0xBB, 0x47, 0xA2, 0xBA, 0x4B, 0x32, 0x97, 0xDC, 0xE4, 0x47, 0xC5, 0x61, 0xA1, 0xC4, 0x9F, 0x75, 0x35, 0xA7, 0xA1, 0x4C, 0x98, 0x30, 0x18, 0x6A, ++ 0xA0, 0xDD, 0xFA, 0x00, 0x1A, 0xEA, 0x0D, 0x94, 0xC4, 0x0A, 0xC8, 0xA8, 0x41, 0x8E, 0x8D, 0x57, 0x8D, 0x84, 0x21, 0x41, 0x3F, 0xB7, 0xE8, 0x20, 0x23, 0x7E, 0xF3, 0xB5, 0xCB, 0xF6, 0x08, 0x1C, ++ 0x44, 0x2C, 0x13, 0xB4, 0x98, 0x5E, 0xE6, 0x39, 0xE8, 0xF8, 0x6D, 0xB2, 0x87, 0x3B, 0xC2, 0xC9, 0xD3, 0xA9, 0xE5, 0x17, 0xAD, 0x70, 0x31, 0xDA, 0x3C, 0xC9, 0x2F, 0xC1, 0x5F, 0x50, 0x2F, 0xAD, ++ 0x3F, 0xC5, 0xFD, 0xBB, 0xCD, 0x2C, 0x95, 0x50, 0xA8, 0x95, 0x25, 0xF0, 0x06, 0x7C, 0xC3, 0xEA, 0x22, 0xD8, 0xD5, 0xB6, 0x1A, 0xFA, 0xA4, 0xB5, 0x53, 0xAC, 0x30, 0x39, 0x20, 0xF2, 0x5D, 0x6D, ++ 0x58, 0xF6, 0x1F, 0x63, 0x56, 0x68, 0x5E, 0x43, 0x50, 0x9A, 0x00, 0x62, 0xF8, 0x37, 0xBC, 0xB9, 0xA1, 0xA2, 0x2C, 0xFF, 0x08, 0x10, 0x80, 0x18, 0xD6, 0xD2, 0x4B, 0xDC, 0x2B, 0x09, 0x6D, 0x2E, ++ }, ++ .t1_len = 2560, ++ .t1 = { ++ 0x03, 0x23, 0x69, 0xA2, 0xCE, 0x57, 0x2F, 0xD0, 0x8B, 0xFC, 0x30, 0x4B, 0x48, 0x48, 0xE7, 0x8D, 0x75, 0x2D, 0x77, 0xE9, 0x7A, 0x28, 0xB9, 0x9B, 0x9B, 0xB6, 0xFB, 0x5C, 0x7C, 0x63, 0x37, 0x51, ++ 0x4B, 0x32, 0x1E, 0xCD, 0xC1, 0xFB, 0x66, 0x9F, 0x26, 0xD4, 0x17, 0x1A, 0xB4, 0x2B, 0x72, 0x72, 0x0E, 0xE7, 0x0E, 0x05, 0x19, 0xA6, 0xE1, 0xD3, 0xD6, 0xD9, 0x91, 0x4E, 0xC1, 0xB2, 0x1C, 0xDE, ++ 0x38, 0xB4, 0x1A, 0xAC, 0x1D, 0x3A, 0xBE, 0xE6, 0xF2, 0xB7, 0x49, 0x5C, 0x4C, 0x82, 0x0C, 0x1F, 0xC0, 0xCC, 0x9E, 0x71, 0xE2, 0x4C, 0xFB, 0x5C, 0x9C, 0x0D, 0x8E, 0xEF, 0x42, 0x64, 0xAF, 0x48, ++ 0x4F, 0xAE, 0x4D, 0x6E, 0x5D, 0xDE, 0x65, 0xD4, 0xDF, 0x72, 0xB6, 0x1C, 0x6D, 0xBD, 0x26, 0xF8, 0x61, 0xA5, 0xE0, 0xB8, 0x53, 0xAC, 0x54, 0x13, 0x22, 0x6F, 0xEB, 0xBA, 0xBA, 0x5E, 0xB4, 0x74, ++ 0xC6, 0xFB, 0x25, 0xA8, 0x26, 0x78, 0xEA, 0x16, 0x06, 0xB4, 0x52, 0xA2, 0x31, 0x12, 0x22, 0x10, 0x17, 0xB8, 0xC0, 0x73, 0xC1, 0x03, 0x78, 0xF9, 0x14, 0x56, 0x41, 0xA8, 0xC0, 0x78, 0xC0, 0xED, ++ 0x9E, 0x42, 0x16, 0x50, 0xF7, 0x48, 0x89, 0x25, 0x22, 0xAB, 0x9F, 0xB7, 0xD1, 0xFF, 0x8C, 0xF1, 0xCC, 0x71, 0xB8, 0x56, 0x6E, 0x8D, 0xA3, 0x3C, 0xD7, 0x36, 0x17, 0x70, 0xC0, 0x44, 0x34, 0x9A, ++ 0xC4, 0x40, 0xCC, 0xCD, 0xC6, 0xBB, 0xE3, 0x5E, 0x6C, 0x55, 0x78, 0x27, 0x66, 0xF3, 0x8E, 0x68, 0x8B, 0xF4, 0x78, 0x21, 0x03, 0x72, 0x99, 0xE3, 0x44, 0xEC, 0xDE, 0xCA, 0x17, 0xAD, 0x5D, 0x15, ++ 0xCD, 0x27, 0xA4, 0xF7, 0xB0, 0x70, 0x66, 0x11, 0x38, 0xED, 0xE8, 0xED, 0x72, 0xA8, 0x95, 0x9C, 0x5A, 0xE3, 0x6B, 0x1C, 0x46, 0x09, 0x4A, 0x53, 0xCB, 0x21, 0xA7, 0xA4, 0x26, 0x73, 0xF1, 0x40, ++ 0x1C, 0x2B, 0x25, 0x94, 0x94, 0x09, 0x0E, 0x2F, 0x53, 0xD7, 0xEE, 0x70, 0x63, 0x43, 0x1E, 0xE5, 0x85, 0x80, 0x02, 0xD8, 0x50, 0xAF, 0x90, 0x9C, 0x37, 0x83, 0x43, 0x60, 0x10, 0xF7, 0xEA, 0x88, ++ 0x62, 0x5A, 0x36, 0xA0, 0xF0, 0x18, 0x9F, 0xDE, 0x75, 0xB7, 0xE8, 0xC7, 0xE4, 0xB1, 0x9D, 0x85, 0x27, 0x00, 0x83, 0x28, 0xAD, 0xBC, 0x92, 0x9B, 0xBC, 0x86, 0xE9, 0x64, 0xCF, 0xC4, 0x8B, 0x8C, ++ 0xF1, 0xDA, 0x5D, 0x7E, 0xD3, 0x33, 0x3A, 0xB5, 0x5C, 0x15, 0x07, 0x28, 0x32, 0x21, 0x4A, 0x77, 0x9A, 0x5F, 0xD1, 0x0C, 0xC0, 0x40, 0x05, 0xF4, 0x6C, 0x1A, 0xA8, 0x88, 0x4A, 0x16, 0x19, 0x92, ++ 0x47, 0x2F, 0xD5, 0x35, 0xB9, 0x5E, 0xD1, 0x8B, 0xDE, 0x1C, 0x6D, 0x8C, 0xE6, 0x78, 0xD2, 0x81, 0x7D, 0x69, 0xF9, 0x05, 0x71, 0x10, 0x3E, 0x85, 0x20, 0xE7, 0x31, 0x3C, 0xE7, 0xB9, 0x30, 0xC5, ++ 0xEB, 0xFA, 0xF2, 0xF4, 0xEC, 0x75, 0x8B, 0x62, 0x6B, 0x55, 0x43, 0xA0, 0x68, 0xCD, 0xE0, 0xFD, 0x0E, 0x94, 0xE6, 0xA6, 0x44, 0x75, 0xB2, 0x32, 0x68, 0xBF, 0x03, 0x80, 0xD0, 0x75, 0x50, 0x8F, ++ 0x85, 0x12, 0x8C, 0xA2, 0x6F, 0x31, 0xA9, 0x0C, 0x4A, 0x7D, 0x28, 0x44, 0x0D, 0x54, 0xD4, 0x06, 0x6B, 0x40, 0x45, 0x88, 0x58, 0x8B, 0x4C, 0xCF, 0x85, 0x0B, 0x97, 0x5C, 0x73, 0xAF, 0xE6, 0x8C, ++ 0xBC, 0xD1, 0x02, 0x75, 0x5F, 0x61, 0xEB, 0x3E, 0x60, 0x32, 0x3C, 0x57, 0x6E, 0x52, 0x9E, 0xC0, 0xBF, 0x23, 0xBF, 0xA5, 0xBE, 0xA3, 0x9C, 0xB7, 0x3C, 0x37, 0xE8, 0x39, 0x5D, 0x8D, 0xBD, 0x4C, ++ 0x8D, 0xC8, 0xAB, 0x2F, 0x70, 0xA0, 0xBF, 0xC3, 0xA7, 0x8C, 0x0D, 0x41, 0x3F, 0x08, 0xD1, 0x4D, 0x63, 0x2B, 0xC0, 0x40, 0x3B, 0x03, 0x83, 0xDB, 0xBB, 0x22, 0xBD, 0x9B, 0x11, 0x3C, 0x89, 0x45, ++ 0x2A, 0xEA, 0xB1, 0x12, 0x10, 0x09, 0x79, 0x47, 0xFE, 0xAA, 0xA3, 0xC9, 0xF0, 0x5D, 0x1D, 0x30, 0x0C, 0x33, 0xA5, 0x5E, 0x3F, 0xBC, 0x81, 0x25, 0x9E, 0x86, 0x27, 0x05, 0xC3, 0xA1, 0x3B, 0x9E, ++ 0xE3, 0x5F, 0x6B, 0x23, 0xED, 0x10, 0xF4, 0xED, 0xEA, 0x95, 0x19, 0xFA, 0x91, 0xB7, 0xBC, 0xD0, 0xD5, 0x01, 0xB5, 0xED, 0x57, 0xD9, 0x04, 0x9F, 0xAB, 0x91, 0xAA, 0x77, 0x9C, 0x72, 0x5F, 0xF8, ++ 0xE9, 0xF7, 0x80, 0x17, 0xEA, 0x78, 0x07, 0xFA, 0x25, 0x4B, 0x71, 0x05, 0xE8, 0x26, 0xD0, 0x96, 0xC0, 0x1A, 0xDA, 0xE2, 0xC5, 0xD1, 0x38, 0x25, 0x1A, 0x92, 0xA4, 0x78, 0xA3, 0x33, 0x73, 0xF4, ++ 0xDE, 0x91, 0x2B, 0x83, 0xB6, 0xFB, 0x4B, 0x0D, 0x0D, 0xE6, 0xBC, 0x11, 0x18, 0xBB, 0x2F, 0xCF, 0xB0, 0x7B, 0xD2, 0x27, 0xA5, 0xF7, 0xF9, 0x91, 0x43, 0x9A, 0x13, 0xDE, 0x12, 0x38, 0x18, 0x0C, ++ 0xDC, 0x55, 0x11, 0x9E, 0x65, 0xC4, 0x18, 0x58, 0x4D, 0x80, 0x7A, 0x92, 0x6E, 0x4A, 0x9C, 0x0F, 0x70, 0x15, 0x5E, 0xE1, 0x96, 0xFB, 0x07, 0x65, 0x6D, 0x9A, 0xA7, 0x98, 0x2B, 0x87, 0x95, 0xDB, ++ 0xAD, 0x43, 0xD1, 0x05, 0x9C, 0xA7, 0xF5, 0x80, 0xD3, 0x32, 0x0C, 0x04, 0x38, 0xA5, 0xED, 0x5A, 0x70, 0x32, 0xB2, 0xE9, 0x59, 0x67, 0x84, 0x10, 0xF1, 0x1A, 0xD9, 0x8B, 0xE8, 0x82, 0x6A, 0x44, ++ 0x26, 0x26, 0x15, 0x64, 0x5D, 0x75, 0x9A, 0x86, 0x2B, 0x2A, 0xC5, 0x2D, 0x3B, 0x01, 0x4A, 0x25, 0xE8, 0x47, 0x3F, 0x1F, 0x1E, 0xA4, 0xCF, 0xA8, 0x19, 0x93, 0x0A, 0xB3, 0xA3, 0x4D, 0x71, 0x0D, ++ 0xEE, 0xE7, 0x0C, 0xA1, 0x3E, 0x88, 0xFD, 0x71, 0xAA, 0x06, 0x4E, 0x6C, 0xB4, 0x69, 0x7D, 0xE0, 0xE4, 0x63, 0xB1, 0x37, 0x0A, 0x6A, 0x3B, 0xFE, 0x98, 0xFD, 0xFE, 0x7B, 0x54, 0x71, 0xFF, 0x8D, ++ 0xF6, 0xA6, 0x87, 0x9F, 0xBE, 0xF9, 0xAF, 0xB3, 0x51, 0x9D, 0x78, 0x07, 0x57, 0xD6, 0x74, 0x40, 0xAC, 0x36, 0xE8, 0x37, 0xBA, 0xC3, 0x83, 0x3E, 0xEA, 0xA9, 0x80, 0xBD, 0x82, 0xB7, 0x93, 0x64, ++ 0x36, 0xA0, 0x30, 0x7D, 0x16, 0x4B, 0x64, 0x38, 0x86, 0x9A, 0xE6, 0x06, 0xE9, 0x80, 0x51, 0x8E, 0x91, 0x3D, 0x0E, 0xE3, 0x02, 0x39, 0x6E, 0xF4, 0xEB, 0x25, 0xD9, 0x86, 0x6E, 0x4B, 0xAF, 0xA1, ++ 0x01, 0xE5, 0x99, 0x29, 0x31, 0x36, 0x1C, 0x4A, 0x98, 0x22, 0x53, 0xD5, 0x8A, 0xBE, 0x3B, 0xD5, 0x71, 0x07, 0x63, 0x5A, 0x46, 0xF0, 0x95, 0x12, 0x08, 0x5F, 0x4A, 0xDA, 0x08, 0xEC, 0x8B, 0x1B, ++ 0x39, 0x10, 0xB0, 0x15, 0x3B, 0x2A, 0xAF, 0xCA, 0xE5, 0x03, 0x3E, 0xDD, 0x41, 0x53, 0x24, 0x8D, 0xCD, 0x85, 0xB0, 0x2C, 0x9A, 0x25, 0xD8, 0xBD, 0xC4, 0x06, 0x8B, 0xB8, 0x57, 0x41, 0x72, 0x62, ++ 0x97, 0xA2, 0x5A, 0xEC, 0x55, 0xC4, 0x4A, 0xA2, 0x80, 0x59, 0xB7, 0x1B, 0xB9, 0xF3, 0x40, 0x67, 0x88, 0x7A, 0xDE, 0x4C, 0x1C, 0xA4, 0x90, 0x8B, 0x19, 0xB3, 0xD7, 0x81, 0x23, 0x45, 0x38, 0x76, ++ 0xDB, 0x4D, 0xCE, 0xB4, 0x27, 0x73, 0x06, 0x95, 0x72, 0xCD, 0x87, 0x77, 0xE6, 0x2C, 0xFB, 0xAF, 0x72, 0x03, 0xF0, 0x20, 0xF2, 0x81, 0xA6, 0x67, 0x8F, 0x79, 0x07, 0x20, 0xEA, 0xA2, 0x0E, 0x34, ++ 0x32, 0x7D, 0x7A, 0x63, 0x68, 0x8B, 0x09, 0xA0, 0x1F, 0x4D, 0x70, 0x88, 0xF7, 0xB5, 0x05, 0x9E, 0xDD, 0xEB, 0x45, 0xC0, 0xCE, 0x39, 0x32, 0x1C, 0x79, 0x52, 0x1D, 0x79, 0xA5, 0x9E, 0xCD, 0xD4, ++ 0x68, 0xCE, 0xD0, 0xEA, 0x82, 0xCA, 0x48, 0x49, 0x28, 0x70, 0x2F, 0x57, 0xD6, 0xFC, 0x18, 0xD3, 0x47, 0xAF, 0x3E, 0xD2, 0x2A, 0xAF, 0x45, 0xAB, 0xB0, 0xF2, 0x0B, 0xAB, 0x9E, 0x01, 0x55, 0x76, ++ 0x07, 0xAE, 0x3E, 0xD9, 0xCF, 0x0E, 0x26, 0xD3, 0x4D, 0x30, 0x54, 0x49, 0x66, 0x9E, 0xC6, 0xFC, 0x1B, 0xEC, 0xEA, 0xDC, 0xE1, 0x83, 0xF7, 0xA5, 0x94, 0xCE, 0xA1, 0x96, 0xD0, 0x59, 0xA1, 0xE5, ++ 0x50, 0xE5, 0x47, 0x86, 0x6C, 0xC0, 0x87, 0x33, 0x3F, 0x03, 0x0E, 0x62, 0x8F, 0x2C, 0xF1, 0x14, 0x79, 0x25, 0x41, 0x0E, 0xD0, 0x42, 0x1D, 0xC7, 0x50, 0x61, 0x38, 0xB1, 0xD1, 0x90, 0x99, 0xC6, ++ 0x95, 0xE1, 0xAF, 0xDA, 0xCE, 0x41, 0x53, 0x82, 0x5B, 0x66, 0xA8, 0xEC, 0xF5, 0x5A, 0x02, 0x1D, 0x21, 0xEB, 0x9F, 0x84, 0x8F, 0xE5, 0x5C, 0x21, 0x76, 0x9A, 0x75, 0x5F, 0xA9, 0x80, 0x7E, 0xF7, ++ 0x3A, 0x6C, 0x5B, 0xA1, 0x5A, 0x06, 0x34, 0x7D, 0x3F, 0x1C, 0x5C, 0x61, 0x9A, 0x31, 0x55, 0x98, 0x62, 0x91, 0x06, 0xAC, 0x0B, 0x86, 0xAE, 0x0D, 0x8E, 0x55, 0x57, 0x82, 0x92, 0x51, 0x72, 0x58, ++ 0xAE, 0x85, 0xF7, 0x2E, 0x73, 0x7A, 0xF5, 0x63, 0x8D, 0x09, 0x6B, 0x76, 0xA3, 0xC5, 0x7F, 0x1B, 0x9C, 0x80, 0xE7, 0x70, 0xA2, 0xD4, 0xEA, 0x4E, 0x42, 0xFE, 0x46, 0x9A, 0xD4, 0x21, 0x28, 0x52, ++ 0x41, 0x96, 0x0A, 0x8A, 0x86, 0x35, 0x5E, 0xF2, 0x2F, 0x58, 0x3F, 0xE3, 0xBA, 0xCA, 0xDF, 0x8D, 0xA3, 0x1D, 0x5C, 0x2D, 0xE2, 0x54, 0x16, 0x1B, 0xC6, 0xD1, 0x0F, 0x98, 0x41, 0xDD, 0x27, 0xED, ++ 0x46, 0x2A, 0x6B, 0x94, 0xB6, 0xDE, 0xEA, 0x90, 0xCB, 0xAB, 0x68, 0x7F, 0xB8, 0x4B, 0x56, 0x39, 0x5D, 0xA7, 0x63, 0xAB, 0x4B, 0x7F, 0xE3, 0x09, 0x5D, 0x57, 0x2D, 0x77, 0xEF, 0xF3, 0xFF, 0x0D, ++ 0x8F, 0x9D, 0x19, 0xAA, 0x5A, 0xF7, 0xB6, 0x76, 0x05, 0x3D, 0xBE, 0xF6, 0x4E, 0x61, 0xDD, 0x0A, 0x41, 0xD4, 0x02, 0x31, 0x8E, 0x33, 0x08, 0x66, 0x91, 0x06, 0x25, 0x9B, 0xF7, 0xA4, 0xCE, 0x31, ++ 0xB3, 0x46, 0xA9, 0xE9, 0x83, 0xED, 0xAB, 0xA0, 0x51, 0x80, 0x14, 0x9A, 0xB0, 0x57, 0xF9, 0x97, 0x29, 0x77, 0xDA, 0x7C, 0x6F, 0x46, 0xE0, 0xCD, 0xF8, 0x6F, 0x30, 0x91, 0xF0, 0x4F, 0xD4, 0xE8, ++ 0x3C, 0x60, 0x22, 0xE1, 0x8C, 0xE4, 0x38, 0x2B, 0x54, 0xD5, 0xDA, 0xBA, 0x82, 0xE4, 0xDF, 0x1E, 0x53, 0xBF, 0x31, 0xFE, 0x4B, 0xB6, 0x5A, 0x85, 0x24, 0xED, 0xA8, 0x3F, 0xD2, 0x9D, 0x07, 0xE4, ++ 0x97, 0x47, 0xB7, 0x52, 0x91, 0xCB, 0xC8, 0xF8, 0xEE, 0x14, 0x15, 0xEC, 0x92, 0x1E, 0x19, 0x02, 0x2A, 0xDE, 0x2C, 0x04, 0x7E, 0x4D, 0xF3, 0x50, 0x72, 0x89, 0xE9, 0xD7, 0x9A, 0x8E, 0x69, 0x92, ++ 0xB4, 0x8B, 0x88, 0x64, 0x20, 0x4A, 0x41, 0x6B, 0x76, 0x9C, 0xC7, 0x87, 0xD6, 0xDF, 0x44, 0x07, 0xE9, 0x3D, 0x12, 0x1F, 0x7F, 0xBE, 0xE0, 0xE4, 0x08, 0x96, 0x3E, 0x06, 0x09, 0xA9, 0xC7, 0x5C, ++ 0xB3, 0x11, 0x7C, 0xA5, 0x83, 0xDF, 0x6E, 0x79, 0xF3, 0x1C, 0x63, 0x5B, 0xF0, 0xF1, 0xBE, 0x98, 0xDF, 0x55, 0x07, 0x27, 0xA4, 0x5D, 0x3C, 0xA3, 0x37, 0xD7, 0x9D, 0xE5, 0xDC, 0xDB, 0x0B, 0x91, ++ 0xCA, 0xBB, 0xC3, 0x0D, 0x7E, 0xF0, 0xAE, 0x1C, 0xA1, 0xE9, 0x49, 0x04, 0xF7, 0x8C, 0x1F, 0xD8, 0xFB, 0xA8, 0x75, 0x45, 0xFD, 0xC1, 0x74, 0xAD, 0x81, 0x90, 0xF9, 0xB5, 0xED, 0x7B, 0x58, 0x69, ++ 0x49, 0x4F, 0xFA, 0x91, 0x03, 0x3F, 0xDC, 0x61, 0x17, 0xBF, 0x66, 0x2E, 0xC5, 0xF2, 0xAF, 0x26, 0x34, 0xBA, 0x3F, 0x8C, 0x02, 0x21, 0x0F, 0x1C, 0x9B, 0xCD, 0xDA, 0x9B, 0xB3, 0x97, 0x60, 0xE0, ++ 0x0F, 0x25, 0xA7, 0x27, 0x0C, 0x34, 0x56, 0x66, 0xFB, 0x6D, 0xF8, 0x5C, 0x91, 0x9A, 0xA1, 0x50, 0xCA, 0x7F, 0xC8, 0x0F, 0xC0, 0xEA, 0xCF, 0xE2, 0x42, 0xEF, 0x55, 0xF4, 0x29, 0x80, 0x63, 0x62, ++ 0x8E, 0x61, 0x05, 0x6C, 0x96, 0x6D, 0xB9, 0x96, 0x44, 0x28, 0xD9, 0xCE, 0x99, 0x10, 0x82, 0x71, 0xE2, 0x9A, 0x12, 0x32, 0x8E, 0x23, 0x99, 0x97, 0x34, 0xE0, 0x36, 0xF1, 0x8A, 0x0E, 0xB8, 0xF0, ++ 0x30, 0xE8, 0x80, 0x62, 0xC5, 0x67, 0x17, 0xE7, 0xA3, 0x63, 0x14, 0xE4, 0x4E, 0xCF, 0x35, 0x7F, 0xF5, 0x6E, 0xED, 0xF9, 0x0D, 0x3F, 0xB1, 0x1B, 0x22, 0xA1, 0xB2, 0x59, 0x05, 0xB3, 0x79, 0xFC, ++ 0xCA, 0x5C, 0xA1, 0xAC, 0xB9, 0x56, 0xE1, 0x78, 0xAD, 0x3F, 0x51, 0xD5, 0x35, 0xAD, 0x11, 0x98, 0x13, 0xB1, 0xE7, 0x0F, 0x73, 0x17, 0x65, 0x1B, 0xC7, 0x5C, 0xAC, 0x64, 0x27, 0x6B, 0xB9, 0x81, ++ 0x10, 0xB5, 0x4E, 0xA0, 0xEF, 0x34, 0x54, 0x1D, 0x73, 0x91, 0x07, 0x21, 0xD6, 0x57, 0x38, 0x76, 0x77, 0xE3, 0x32, 0xE9, 0xC8, 0x81, 0x1C, 0x3F, 0xC1, 0xB9, 0x23, 0xB2, 0xEE, 0x9C, 0x51, 0x2F, ++ 0x6D, 0x09, 0xDF, 0x37, 0x2A, 0x5F, 0x97, 0xFA, 0xD7, 0x12, 0x33, 0x89, 0xCE, 0xE1, 0x97, 0xB5, 0xC2, 0x69, 0xE2, 0x21, 0xD7, 0xEE, 0xD3, 0x16, 0x0A, 0x52, 0x1E, 0x56, 0xFF, 0x8A, 0xAF, 0xAB, ++ 0x68, 0x61, 0x79, 0xD0, 0x9D, 0x78, 0xFC, 0x38, 0x7B, 0x3E, 0xA6, 0xA6, 0x72, 0x03, 0x4D, 0x24, 0xAC, 0x79, 0x99, 0xD1, 0x96, 0xB2, 0x31, 0x64, 0x75, 0xF3, 0x7D, 0xB8, 0xE9, 0xED, 0x43, 0x1D, ++ 0xF5, 0x83, 0x41, 0xFA, 0x88, 0x00, 0x3D, 0x3C, 0x64, 0x89, 0xE7, 0x80, 0x53, 0xD8, 0xE4, 0x4C, 0xE7, 0xE1, 0x6A, 0xEF, 0x41, 0x68, 0x59, 0xB3, 0xD2, 0xAE, 0xCE, 0x09, 0x08, 0x6A, 0x74, 0x8B, ++ 0x7B, 0xCF, 0xD1, 0x0F, 0x73, 0xE3, 0xCF, 0x8B, 0x31, 0xF0, 0xCC, 0x44, 0xDA, 0x05, 0x9C, 0x69, 0xAB, 0xA5, 0xBC, 0x8E, 0xFA, 0xD4, 0x5D, 0x3F, 0x37, 0x6A, 0xF3, 0xA0, 0xDE, 0x6E, 0x16, 0x98, ++ 0x78, 0xBD, 0x84, 0x2E, 0x28, 0x79, 0x8E, 0x47, 0x43, 0xF8, 0x43, 0x84, 0x4B, 0xCD, 0xF8, 0x50, 0x6F, 0x13, 0x63, 0x91, 0xEC, 0x8E, 0x72, 0x1D, 0xC2, 0xB6, 0x28, 0x2D, 0x9C, 0x50, 0xFA, 0xB6, ++ 0x53, 0xA6, 0xAB, 0xF2, 0x89, 0x47, 0x42, 0x0E, 0x8C, 0x22, 0xA9, 0xA4, 0x87, 0xD7, 0x6A, 0x93, 0x89, 0x33, 0xB3, 0x4E, 0x49, 0x7D, 0xA9, 0x53, 0x94, 0x17, 0x6B, 0x27, 0x74, 0xC0, 0x9E, 0xF0, ++ 0xBB, 0x1E, 0xD8, 0xC3, 0xB1, 0x31, 0xA2, 0x19, 0x57, 0xB3, 0x1A, 0x0B, 0x47, 0xCB, 0xFB, 0xFF, 0x05, 0x33, 0xCA, 0xF3, 0x31, 0x25, 0x22, 0x1D, 0xB6, 0xBA, 0x4A, 0x51, 0x88, 0x64, 0x89, 0x2C, ++ 0xF2, 0x1D, 0x3D, 0x4D, 0x58, 0xB5, 0x99, 0xA3, 0x7A, 0x08, 0xF3, 0x44, 0xAA, 0x7E, 0xF9, 0x8E, 0x7D, 0x7D, 0x9D, 0x33, 0x16, 0xA6, 0xB1, 0x15, 0xD9, 0xB8, 0xF2, 0x0F, 0x93, 0xBC, 0x68, 0x65, ++ 0x73, 0x46, 0x99, 0xEB, 0x54, 0xC8, 0x88, 0xD7, 0xE5, 0xA0, 0xAC, 0xAF, 0xD1, 0x91, 0x53, 0x52, 0xB2, 0x94, 0x24, 0x37, 0x12, 0xCF, 0xE8, 0x2F, 0x85, 0x24, 0x8B, 0x00, 0x04, 0x5C, 0xF3, 0xD0, ++ 0x90, 0xC0, 0xC0, 0x0D, 0x7C, 0xA0, 0xE3, 0xA1, 0xF1, 0x47, 0x70, 0x3F, 0xD9, 0x4F, 0x71, 0x7E, 0x49, 0xC8, 0x1A, 0x7C, 0x3A, 0x76, 0x94, 0x6E, 0x20, 0xA6, 0x3F, 0x3B, 0x7C, 0x3E, 0xAB, 0xA9, ++ 0x22, 0x5A, 0xBE, 0x0B, 0x34, 0xCB, 0x0C, 0xF2, 0x35, 0x06, 0x39, 0x67, 0xD1, 0x6B, 0xC8, 0xA6, 0x9C, 0x13, 0x0C, 0xCE, 0x28, 0x76, 0x15, 0xCC, 0x05, 0x31, 0x14, 0x16, 0x7E, 0xAC, 0x4E, 0x95, ++ 0xBB, 0xAB, 0xDF, 0xBB, 0xCF, 0x96, 0xBC, 0x0C, 0x0D, 0x65, 0xEA, 0x00, 0x0A, 0xEA, 0xF4, 0x90, 0xD7, 0x23, 0x95, 0x5B, 0xD1, 0xB4, 0xD6, 0x91, 0x54, 0xD2, 0x62, 0xF6, 0xA6, 0xD3, 0x53, 0x4B, ++ 0xB0, 0xBC, 0x39, 0x7C, 0x29, 0xEC, 0xC6, 0xB1, 0x44, 0x7B, 0x75, 0xC9, 0x53, 0xAF, 0x44, 0x1D, 0xE2, 0xE7, 0x13, 0x3A, 0x7A, 0xC9, 0x89, 0x88, 0xA7, 0xEF, 0x9E, 0x6E, 0xE6, 0x35, 0x58, 0xAA, ++ 0xAD, 0xA0, 0x60, 0x3B, 0xD5, 0x29, 0x77, 0x6F, 0x05, 0x55, 0x8D, 0x2D, 0xF5, 0x64, 0x1C, 0x41, 0x2E, 0x73, 0x47, 0x44, 0x0F, 0x65, 0xEB, 0x82, 0x3A, 0xFC, 0x7C, 0xCA, 0xE6, 0xB9, 0x71, 0x08, ++ 0xB8, 0x57, 0x28, 0x7A, 0x04, 0x86, 0xDB, 0xBE, 0x68, 0x9D, 0x77, 0x0C, 0xA9, 0x24, 0x71, 0x30, 0x9E, 0x73, 0xAD, 0x39, 0x0A, 0xBF, 0x56, 0x91, 0x2B, 0x2B, 0x7C, 0x49, 0x24, 0x2C, 0xEC, 0x15, ++ 0x7B, 0xDB, 0xBD, 0x49, 0x35, 0x53, 0x73, 0x5C, 0xB1, 0xD9, 0xB4, 0x0A, 0xFC, 0x21, 0x4D, 0xA1, 0x53, 0x35, 0x9C, 0x9D, 0xF5, 0x76, 0x13, 0x59, 0x01, 0xC2, 0xFD, 0xA5, 0x8C, 0x00, 0x95, 0xB6, ++ 0xFC, 0xE3, 0xFD, 0x07, 0x31, 0xDF, 0x34, 0x86, 0x3A, 0xF2, 0x88, 0x2D, 0x53, 0x77, 0x3C, 0xE7, 0xC1, 0x82, 0x47, 0x37, 0x22, 0xAA, 0x79, 0xA6, 0xB3, 0x7D, 0x3E, 0xDD, 0xDE, 0x38, 0xFA, 0x71, ++ 0xDF, 0x8C, 0x0E, 0xDC, 0x08, 0x1E, 0xFE, 0xD8, 0xCE, 0x60, 0x6E, 0x48, 0x29, 0x91, 0x80, 0xEC, 0x6F, 0xE3, 0x5F, 0xAB, 0x64, 0x99, 0x10, 0xC4, 0x8A, 0x6A, 0x29, 0xF9, 0xD0, 0xF8, 0x55, 0x57, ++ 0xE1, 0x0B, 0xC5, 0xAE, 0x2E, 0xCF, 0x02, 0x8A, 0xE3, 0x99, 0xF5, 0x5C, 0xD7, 0x97, 0x60, 0x28, 0x93, 0x5C, 0xC0, 0x3C, 0x0C, 0xAF, 0xD5, 0x00, 0x3C, 0x9E, 0xAE, 0xD2, 0x47, 0xFB, 0xE3, 0x0A, ++ 0x28, 0x4C, 0xC4, 0x47, 0x0A, 0x55, 0x25, 0xA6, 0x49, 0x8E, 0x1D, 0xBB, 0xD3, 0x08, 0x5C, 0x3F, 0x9D, 0x77, 0xC6, 0x06, 0x4D, 0x01, 0x81, 0xBC, 0x5A, 0x82, 0x95, 0x61, 0x56, 0x0A, 0xA9, 0xA4, ++ 0xEA, 0x81, 0x73, 0xD7, 0x93, 0x7A, 0x94, 0x28, 0x10, 0x9C, 0xB3, 0xA6, 0x6B, 0x2B, 0x3D, 0xE1, 0x1F, 0x88, 0xF5, 0x5A, 0xB2, 0x1E, 0xB4, 0x9B, 0x77, 0xA3, 0x97, 0x62, 0xCA, 0x92, 0x64, 0xE0, ++ 0x15, 0x65, 0x66, 0x76, 0x5E, 0x2D, 0x36, 0x26, 0xB7, 0x2B, 0x80, 0xBD, 0x14, 0x11, 0xE4, 0xEC, 0x53, 0x55, 0x28, 0x28, 0xA2, 0x4B, 0xC8, 0xCD, 0xC4, 0x7F, 0x46, 0x5F, 0xDD, 0xF4, 0x77, 0x2C, ++ 0x7B, 0xC0, 0x20, 0x66, 0x85, 0x40, 0x11, 0x28, 0x7F, 0x73, 0x9A, 0xBA, 0x60, 0x47, 0x59, 0x67, 0x47, 0xF4, 0x23, 0x4A, 0xE2, 0x27, 0xDB, 0xFF, 0xAB, 0xF0, 0xE1, 0x31, 0x53, 0xE2, 0xE0, 0x69, ++ 0xF0, 0xB7, 0x90, 0x25, 0x1B, 0xE8, 0x77, 0xFE, 0x5A, 0x19, 0x8E, 0x80, 0x82, 0x58, 0x63, 0x9F, 0x5E, 0x79, 0xD3, 0xD5, 0xCD, 0x16, 0xF1, 0xA5, 0x73, 0x72, 0x4D, 0xD6, 0xA9, 0xF6, 0x99, 0x0C, ++ 0x45, 0x02, 0x33, 0x4D, 0xC6, 0x6F, 0x65, 0x49, 0x34, 0x90, 0x67, 0x3A, 0xB3, 0x0D, 0xCA, 0x7C, 0x03, 0x1F, 0x0C, 0x21, 0x2C, 0x0D, 0x8B, 0xC9, 0xD0, 0xC8, 0x74, 0xB3, 0x19, 0xA9, 0x7A, 0xD1, ++ 0xCE, 0x93, 0x95, 0xD3, 0xD1, 0x54, 0x20, 0x31, 0x56, 0xC5, 0x1C, 0xC3, 0xB9, 0xCB, 0x13, 0xD0, 0xBA, 0x1B, 0xDF, 0x61, 0x8B, 0xC8, 0xEE, 0xCA, 0x9D, 0xDD, 0x94, 0x12, 0x05, 0x0C, 0xFA, 0x09, ++ 0x23, 0x57, 0x27, 0xAA, 0x50, 0xD4, 0x6F, 0x79, 0xAD, 0x6F, 0x3C, 0x5A, 0x1B, 0xB6, 0xB2, 0x84, 0xC8, 0x31, 0x1D, 0xCF, 0x93, 0x75, 0x68, 0x59, 0x70, 0x4D, 0xF8, 0xFC, 0x3B, 0xB8, 0xD2, 0xF5, ++ 0xE0, 0x94, 0xE0, 0x45, 0x02, 0x35, 0x49, 0x42, 0xE9, 0xC8, 0x52, 0xB2, 0x08, 0xD4, 0x90, 0x18, 0x34, 0x33, 0x2E, 0xBC, 0x60, 0x32, 0x70, 0xCB, 0x57, 0xED, 0x41, 0x8C, 0x34, 0xCE, 0x48, 0xAA, ++ }, ++ .pkcs8_len = 0, ++ .spki_len = 0, ++ .msg_len = 33, ++ .msg = { 0xD8, 0x1C, 0x4D, 0x8D, 0x73, 0x4F, 0xCB, 0xFB, 0xEA, 0xDE, 0x3D, 0x3F, 0x8A, 0x03, 0x9F, 0xAA, 0x2A, 0x2C, 0x99, 0x57, 0xE8, 0x35, 0xAD, 0x55, 0xB2, 0x2E, 0x75, 0xBF, 0x57, 0xBB, 0x55, 0x6A, ++ 0xC8 }, ++ .sig_len = 4595, ++ .sig = { ++ 0xBB, 0xF8, 0x5F, 0xFD, 0x0E, 0x01, 0xC8, 0x0C, 0x8C, 0x1C, 0x19, 0x31, 0xCD, 0x64, 0x0B, 0xF2, 0x73, 0xD4, 0x96, 0x93, 0xC4, 0xC4, 0xBF, 0xF5, 0xDD, 0x20, 0xD9, 0x4C, 0xF3, 0x75, 0x7A, 0xBD, ++ 0x45, 0x47, 0x3B, 0x9D, 0x01, 0xB1, 0x87, 0x13, 0x05, 0xDA, 0x90, 0xED, 0xC6, 0x70, 0x7D, 0x54, 0x17, 0x12, 0x94, 0x67, 0xF6, 0x1F, 0x72, 0x39, 0x50, 0xC1, 0xAE, 0xDF, 0x70, 0x55, 0xEC, 0x1D, ++ 0x47, 0x77, 0xAD, 0x88, 0x08, 0xE8, 0xB3, 0x47, 0xD1, 0xD0, 0x92, 0x1E, 0xBA, 0xB8, 0x90, 0xCC, 0xA8, 0xE3, 0xA0, 0xDF, 0xD3, 0x00, 0x3D, 0xE9, 0xF9, 0xCB, 0x4A, 0x97, 0xD8, 0x84, 0xE1, 0xDD, ++ 0x04, 0x2C, 0x95, 0x8B, 0x81, 0x6F, 0x72, 0x37, 0x03, 0x2B, 0x20, 0xF8, 0x39, 0x9A, 0x51, 0x82, 0xF4, 0x65, 0x25, 0xEC, 0x35, 0x7D, 0x2F, 0x03, 0x43, 0x74, 0x03, 0xE0, 0xCB, 0x5D, 0xCA, 0x4A, ++ 0x13, 0xFD, 0x2F, 0x1B, 0x09, 0x20, 0x5B, 0x98, 0x90, 0xF0, 0x2E, 0xE5, 0xAF, 0x54, 0x29, 0x43, 0xE6, 0xF9, 0x37, 0x5E, 0xD0, 0x8A, 0x38, 0x53, 0x30, 0x42, 0xD6, 0xBB, 0xD5, 0x0F, 0x37, 0x25, ++ 0x1B, 0x15, 0x90, 0xF6, 0x3B, 0x4B, 0x58, 0xA7, 0xD1, 0xE1, 0xF3, 0x1C, 0xE6, 0x2E, 0x3D, 0x2A, 0xA9, 0x1E, 0x1C, 0x76, 0x7B, 0x9C, 0x3F, 0x5C, 0xB2, 0x68, 0x23, 0xF9, 0x7A, 0xD1, 0xD9, 0xFF, ++ 0xAB, 0x28, 0x75, 0xEB, 0x68, 0xFF, 0xA9, 0xB0, 0x99, 0x46, 0xEF, 0x1D, 0x70, 0x12, 0xC0, 0x29, 0x19, 0xEF, 0x13, 0xCB, 0x10, 0x0C, 0x2E, 0x2C, 0x79, 0x87, 0xA0, 0xA5, 0x78, 0x5B, 0x5F, 0x3F, ++ 0x3B, 0x94, 0x8B, 0x7F, 0xD6, 0x4B, 0x85, 0xB1, 0x65, 0xAE, 0x2F, 0xBF, 0x3C, 0x47, 0xE0, 0x39, 0xC3, 0x07, 0x3C, 0xA7, 0x8F, 0xC9, 0x00, 0xBB, 0xCD, 0xC0, 0x69, 0xFE, 0x90, 0x68, 0x85, 0xD5, ++ 0xB1, 0x37, 0x40, 0xA2, 0x23, 0xAF, 0x52, 0x54, 0xF9, 0x8C, 0x1D, 0x58, 0xE2, 0xFC, 0x92, 0xB0, 0x37, 0x3E, 0x2A, 0x93, 0x33, 0x53, 0xCC, 0x3E, 0xEC, 0xD3, 0x9F, 0x71, 0xD5, 0x9C, 0xFA, 0x09, ++ 0x29, 0x4E, 0x38, 0x26, 0x2A, 0x44, 0x89, 0x40, 0x0D, 0x22, 0x29, 0x82, 0xF9, 0xC7, 0x80, 0xCD, 0x07, 0x31, 0xD4, 0xEE, 0xD9, 0x16, 0xC5, 0xA3, 0x1A, 0xBC, 0xD0, 0x2A, 0x59, 0x0E, 0xD8, 0xC6, ++ 0xFF, 0xE1, 0x8B, 0x5F, 0xC7, 0xB6, 0x88, 0x8E, 0x74, 0x72, 0x69, 0x40, 0xD0, 0x2C, 0xCC, 0x62, 0xD7, 0x8B, 0xCA, 0xED, 0xDA, 0x2E, 0x02, 0x8E, 0x53, 0x5C, 0xDA, 0xFC, 0x0E, 0x09, 0x1B, 0xEF, ++ 0x50, 0xDE, 0x2D, 0xFD, 0x12, 0x4F, 0x1E, 0x85, 0x4F, 0x56, 0x85, 0x27, 0xAE, 0xF4, 0xDC, 0x84, 0x55, 0xFD, 0xA0, 0x1B, 0x6D, 0x0D, 0x43, 0x04, 0x8E, 0xD5, 0xAB, 0x42, 0xB1, 0xD4, 0x08, 0x13, ++ 0x99, 0x4B, 0x9F, 0x6A, 0xA0, 0xC0, 0x36, 0xC0, 0xDC, 0xF0, 0x8F, 0x46, 0xB0, 0x0F, 0xDA, 0x01, 0x44, 0x77, 0xCF, 0x87, 0x9B, 0x8F, 0xE5, 0xEA, 0xC4, 0x54, 0x1B, 0x82, 0xDA, 0x00, 0xB4, 0x34, ++ 0x60, 0x46, 0x86, 0x5B, 0x09, 0x2E, 0xD6, 0xAE, 0x01, 0x15, 0xFC, 0x83, 0x4B, 0x58, 0xF7, 0x5F, 0xF9, 0x28, 0xD7, 0xD9, 0x9A, 0xC8, 0x69, 0x1F, 0xF7, 0x00, 0x20, 0xAB, 0xA2, 0x54, 0x80, 0xAB, ++ 0xBC, 0xC7, 0x09, 0xE4, 0x6E, 0xC5, 0x10, 0xF4, 0xB8, 0xCA, 0xDD, 0x60, 0x04, 0x59, 0x54, 0xD3, 0xED, 0xDA, 0x7C, 0x23, 0xE0, 0x3D, 0x91, 0x69, 0x4D, 0x3C, 0x3E, 0xA2, 0x92, 0xC9, 0x25, 0x35, ++ 0xE6, 0xB5, 0xFE, 0x17, 0x1C, 0x56, 0x7D, 0xF3, 0x72, 0x94, 0x06, 0xCD, 0xBA, 0x2A, 0x5E, 0xFA, 0x59, 0xF1, 0x56, 0xE9, 0xCC, 0xD0, 0x30, 0x2F, 0xDC, 0x0F, 0x8B, 0xB7, 0x59, 0xB0, 0x5D, 0xFF, ++ 0x5D, 0xD8, 0x02, 0xCE, 0x4D, 0x55, 0x06, 0xA1, 0x9A, 0x69, 0xD7, 0x0B, 0x3A, 0xB4, 0x8A, 0xB1, 0x7A, 0x2F, 0xE5, 0x95, 0x89, 0xF7, 0x30, 0x83, 0xCC, 0xA5, 0x47, 0xFF, 0xB3, 0xF1, 0x46, 0x83, ++ 0xC9, 0x14, 0xBC, 0x13, 0x45, 0xE7, 0x38, 0x7E, 0x83, 0x1E, 0xE6, 0x03, 0x75, 0x01, 0x49, 0x5C, 0x92, 0xC3, 0x57, 0x70, 0x5A, 0x69, 0xF9, 0x52, 0xA2, 0xF7, 0xCD, 0x30, 0xE0, 0x33, 0x36, 0xAF, ++ 0xAA, 0xFC, 0x9C, 0x56, 0x60, 0x4C, 0xD5, 0x45, 0xE8, 0x2A, 0xA1, 0x2A, 0xF0, 0x58, 0xDA, 0xBA, 0x97, 0x43, 0x87, 0xFE, 0x8D, 0xCD, 0xEC, 0x69, 0x9A, 0x1E, 0x38, 0x53, 0xE2, 0x6D, 0x29, 0xE1, ++ 0x57, 0x81, 0x89, 0xAA, 0x8C, 0x2B, 0xBA, 0x15, 0x50, 0xDF, 0xBE, 0xDD, 0x1E, 0x4F, 0x22, 0x4E, 0xFC, 0xD6, 0x54, 0x91, 0xE5, 0x4E, 0x56, 0x12, 0x8A, 0xE7, 0xC2, 0xDC, 0x85, 0x66, 0x79, 0x7A, ++ 0xBF, 0x2D, 0x94, 0x55, 0x91, 0x52, 0x03, 0xA5, 0xC8, 0x9E, 0x55, 0xDD, 0x23, 0xDF, 0x82, 0x74, 0x36, 0xA8, 0xD6, 0xDC, 0xC5, 0xAC, 0xA8, 0x2F, 0x9B, 0x18, 0x36, 0x92, 0x15, 0x9E, 0xC0, 0x3F, ++ 0x2B, 0x79, 0x8E, 0x55, 0x7D, 0x14, 0x73, 0x46, 0xD8, 0x35, 0xA8, 0xD8, 0x1B, 0x2E, 0x3D, 0x40, 0x86, 0x39, 0x66, 0x86, 0x3A, 0x54, 0xD9, 0xC8, 0x7B, 0x5A, 0xAC, 0xE9, 0x63, 0xCD, 0x52, 0x9A, ++ 0xDB, 0xAE, 0x07, 0x07, 0x0C, 0xEA, 0x00, 0xB7, 0x80, 0xE1, 0x81, 0x31, 0xE6, 0x4F, 0x0A, 0xD7, 0x0E, 0x91, 0x58, 0xF5, 0x90, 0xD0, 0x0A, 0xD9, 0x17, 0x79, 0x08, 0xB9, 0x03, 0x45, 0xFD, 0x79, ++ 0xD0, 0x25, 0x57, 0x71, 0xC6, 0x08, 0xAF, 0x65, 0xEE, 0x5A, 0xC3, 0xC5, 0x01, 0x66, 0xBA, 0xD0, 0x57, 0x38, 0x02, 0x58, 0x68, 0x19, 0x41, 0x56, 0x0F, 0x11, 0x33, 0x40, 0x5F, 0xC2, 0xD7, 0x61, ++ 0x13, 0x14, 0xB4, 0x38, 0x1D, 0x54, 0x59, 0xDC, 0xDE, 0xDE, 0x4D, 0x39, 0xF3, 0x82, 0x3B, 0xC4, 0x42, 0x2B, 0xB1, 0xD7, 0x36, 0xE7, 0x47, 0x4A, 0x80, 0x89, 0xF0, 0xEC, 0xFA, 0x3C, 0x30, 0xAA, ++ 0xC1, 0x19, 0xFF, 0xA4, 0x2B, 0xF7, 0x43, 0xF4, 0x8E, 0x0F, 0xDD, 0x96, 0x02, 0x92, 0xD3, 0xE4, 0x9A, 0x14, 0xEB, 0x05, 0x90, 0xC8, 0xE0, 0x2E, 0x42, 0x1D, 0x54, 0xAE, 0x8A, 0x52, 0x19, 0x51, ++ 0x5E, 0x21, 0x89, 0x59, 0x89, 0xA0, 0xD7, 0x1D, 0x4F, 0x45, 0x16, 0x69, 0xCD, 0x65, 0x2D, 0xA3, 0x48, 0x9E, 0x5C, 0xDB, 0xC0, 0x87, 0x6B, 0xA0, 0xA0, 0x89, 0x9E, 0x7D, 0x87, 0x73, 0xB2, 0x4A, ++ 0xFC, 0x2C, 0xD6, 0xD3, 0x7C, 0xA3, 0x80, 0xA5, 0xD0, 0xDD, 0x43, 0x63, 0x04, 0xD6, 0xE1, 0xA4, 0xDC, 0xD6, 0x38, 0xE8, 0xB9, 0x5E, 0x6C, 0x95, 0x46, 0x5C, 0x66, 0x90, 0xD4, 0xEF, 0xE8, 0xF4, ++ 0x46, 0x91, 0xE4, 0x8D, 0xE2, 0x2C, 0xFC, 0x69, 0x1C, 0x75, 0x61, 0xAD, 0x8C, 0xC1, 0xA2, 0xC3, 0xCC, 0x9F, 0xB8, 0x6F, 0xF6, 0xF4, 0x70, 0x5A, 0x57, 0x3A, 0x72, 0x04, 0x71, 0xED, 0x33, 0xA0, ++ 0x0E, 0x8A, 0x60, 0x20, 0x38, 0x18, 0xA3, 0x96, 0x1E, 0x4D, 0x21, 0x3A, 0x78, 0xB8, 0x62, 0x63, 0x94, 0xF7, 0x5C, 0x28, 0x23, 0x15, 0x57, 0x4C, 0xCD, 0x72, 0x5A, 0x67, 0xE2, 0x0F, 0x0B, 0xF2, ++ 0x24, 0xBF, 0xFC, 0xAB, 0xD7, 0x02, 0xBF, 0xD4, 0xE1, 0xCC, 0x5F, 0x78, 0xBE, 0xC0, 0xE0, 0x42, 0xE1, 0x2E, 0xD4, 0xC9, 0x47, 0x4B, 0xDD, 0x5E, 0xED, 0x2A, 0xEB, 0x53, 0xF4, 0xA9, 0x58, 0xD7, ++ 0xF8, 0x4E, 0xFD, 0x56, 0xEC, 0x03, 0x0A, 0x94, 0xD2, 0x00, 0xA5, 0x39, 0xDE, 0x16, 0x4E, 0x53, 0xC8, 0x2A, 0xFE, 0x8C, 0x5F, 0x71, 0xBB, 0x99, 0xA0, 0x1F, 0x72, 0x30, 0xB7, 0xAE, 0xBC, 0x21, ++ 0x3E, 0xCD, 0xDB, 0xEF, 0x5B, 0x9E, 0x90, 0x64, 0x87, 0x43, 0x96, 0xF8, 0xA9, 0x1B, 0x05, 0x75, 0xF6, 0x8A, 0x45, 0x15, 0xDD, 0x15, 0x81, 0x78, 0xBF, 0x27, 0x7A, 0x90, 0xA3, 0xFE, 0xA2, 0x00, ++ 0x92, 0x00, 0xDA, 0x2E, 0xDA, 0x2C, 0x8B, 0x3A, 0x47, 0xC1, 0x04, 0xD3, 0x50, 0xDF, 0x68, 0xE9, 0x4C, 0x8A, 0x40, 0x23, 0xD3, 0xAE, 0xFB, 0xB7, 0x07, 0x18, 0xFA, 0x2E, 0x27, 0xE6, 0xA5, 0xC3, ++ 0xF9, 0x92, 0x7E, 0xC5, 0x96, 0xAB, 0x54, 0x0F, 0x46, 0x3A, 0xE0, 0x10, 0xEF, 0x71, 0xB8, 0x9B, 0x49, 0x49, 0x7F, 0x0C, 0xFD, 0x29, 0x39, 0xFF, 0xAB, 0x2A, 0x7D, 0xD1, 0x24, 0x7D, 0xC4, 0xA5, ++ 0x9D, 0x84, 0x11, 0xA8, 0x43, 0xBD, 0x84, 0xF1, 0xEA, 0x8D, 0xA3, 0x3C, 0x07, 0x01, 0xD7, 0x0A, 0xC2, 0x7C, 0x4B, 0xDB, 0xD0, 0xD9, 0xA0, 0xCA, 0xB8, 0x6B, 0x1F, 0xC5, 0xBE, 0x12, 0x45, 0x8A, ++ 0x25, 0x80, 0xA6, 0xCA, 0xB4, 0xB7, 0x65, 0xB8, 0x42, 0xC6, 0x7A, 0xD5, 0x4C, 0xA5, 0xD4, 0x0A, 0x24, 0xE2, 0xDD, 0xBC, 0xF0, 0x1E, 0x46, 0x6E, 0x08, 0xD9, 0xB3, 0x44, 0x9F, 0x13, 0xE8, 0x2E, ++ 0x16, 0xD6, 0x1C, 0x72, 0x3F, 0xB9, 0x46, 0x2E, 0x97, 0xB7, 0xAB, 0xC7, 0x0B, 0x22, 0x10, 0xEC, 0xA1, 0x6B, 0x16, 0x0D, 0x5B, 0x8F, 0x98, 0xA1, 0x79, 0x4D, 0xCA, 0x92, 0xCD, 0x4F, 0x02, 0x7F, ++ 0x3E, 0x41, 0x52, 0xEA, 0x87, 0x95, 0x07, 0xDD, 0xFE, 0x7F, 0x1F, 0x21, 0x51, 0x41, 0x53, 0xF0, 0x36, 0xAA, 0xBC, 0x33, 0xF1, 0x72, 0xC9, 0x5A, 0x9B, 0x77, 0x47, 0x22, 0x80, 0x0F, 0x2E, 0x08, ++ 0xCC, 0x44, 0xF9, 0x23, 0x54, 0x0D, 0x8A, 0xF6, 0x4B, 0x42, 0x99, 0x68, 0xB2, 0x80, 0x36, 0x4C, 0x1B, 0x7B, 0x4B, 0x3E, 0x9B, 0xEE, 0x40, 0xC5, 0x00, 0x02, 0x65, 0x7D, 0x99, 0x46, 0x31, 0xF3, ++ 0x3A, 0x8F, 0x8F, 0x13, 0x4A, 0x27, 0xEB, 0x69, 0xBA, 0x43, 0x95, 0x90, 0x8B, 0xA4, 0x06, 0x34, 0xB8, 0xF2, 0x70, 0x31, 0x49, 0x27, 0x5F, 0xFB, 0xBE, 0x8B, 0x48, 0x3E, 0xA1, 0xBB, 0xA9, 0x1C, ++ 0x28, 0x10, 0x51, 0x36, 0xD9, 0x7C, 0x47, 0x0E, 0xE8, 0x3C, 0xD2, 0x1C, 0xEB, 0x2B, 0x21, 0xAA, 0xED, 0x98, 0xDB, 0x8A, 0xB1, 0x65, 0xA7, 0xB4, 0xBE, 0x55, 0x9E, 0x7E, 0xAC, 0xA6, 0x84, 0x60, ++ 0x30, 0x15, 0xBC, 0x34, 0x9B, 0x0A, 0x51, 0x21, 0x4E, 0x4E, 0x8F, 0xBE, 0x1D, 0x2D, 0x88, 0x3F, 0x79, 0xFD, 0x3F, 0x1E, 0xDC, 0xDD, 0x3F, 0xA6, 0xD4, 0xB5, 0xBB, 0xD2, 0xA5, 0xB3, 0x00, 0x3A, ++ 0x80, 0xF1, 0xDA, 0xDE, 0x97, 0x5B, 0x50, 0x2C, 0x7F, 0x72, 0x03, 0x73, 0x16, 0xBC, 0x55, 0xC1, 0xE5, 0x7E, 0x50, 0x06, 0x27, 0xD6, 0x0E, 0x31, 0x08, 0x74, 0x31, 0xD2, 0xC9, 0xD0, 0x2C, 0xA9, ++ 0xF0, 0xEB, 0xCC, 0xD4, 0xBF, 0xE3, 0xC4, 0xBB, 0x53, 0x6D, 0x4C, 0xFE, 0xF7, 0x51, 0x07, 0x50, 0x45, 0x2D, 0x44, 0x4B, 0xE2, 0xC3, 0xD6, 0x4D, 0x84, 0xA8, 0x32, 0x96, 0x53, 0x05, 0x26, 0x4A, ++ 0xBB, 0x53, 0xE3, 0x61, 0x49, 0x40, 0xF9, 0xB2, 0xF1, 0xEA, 0x6F, 0x41, 0xCA, 0x8F, 0x69, 0xE7, 0x26, 0x69, 0x0B, 0xA6, 0x30, 0x63, 0x0F, 0x8A, 0x91, 0x6E, 0xE8, 0x56, 0x26, 0x82, 0x51, 0xB7, ++ 0x73, 0xDC, 0x2A, 0x5D, 0xB4, 0x5D, 0x22, 0xDF, 0xB2, 0x43, 0x9C, 0xA4, 0xB7, 0xAB, 0x70, 0x21, 0x5D, 0x23, 0xE1, 0xF2, 0xE2, 0x61, 0x73, 0x94, 0xFF, 0x78, 0x3B, 0x0B, 0xFF, 0x6D, 0xF0, 0x34, ++ 0x5C, 0xC9, 0x27, 0x05, 0x3D, 0x02, 0xC6, 0x5F, 0xE2, 0xA8, 0x6D, 0xEF, 0xBE, 0xBF, 0x52, 0x43, 0xA2, 0xEF, 0x6A, 0x63, 0x12, 0xBA, 0xED, 0xB6, 0xE6, 0x0D, 0xBB, 0x0C, 0x67, 0xCC, 0x9A, 0x65, ++ 0x55, 0x85, 0xCB, 0x45, 0x8D, 0x6A, 0x04, 0x18, 0x11, 0x94, 0x81, 0x5F, 0x03, 0xBE, 0x87, 0xF6, 0xE8, 0x00, 0x49, 0x2A, 0x24, 0xC5, 0xD5, 0x02, 0xD5, 0xEC, 0xD5, 0x3D, 0xD6, 0xDA, 0x36, 0x79, ++ 0x95, 0xD3, 0x2E, 0x8B, 0xBA, 0xA3, 0xEF, 0x62, 0x72, 0x7E, 0x8A, 0x61, 0x0E, 0x8D, 0x6B, 0x5C, 0x8F, 0xAB, 0xCB, 0xE8, 0x89, 0x3B, 0xDB, 0x5E, 0x03, 0x86, 0x27, 0xF7, 0x07, 0xE8, 0x46, 0x4C, ++ 0x55, 0xDC, 0xBB, 0x76, 0xF0, 0x83, 0x6A, 0xDD, 0x29, 0x8A, 0x96, 0x7C, 0x45, 0x95, 0x08, 0xBC, 0x4E, 0x88, 0xBA, 0x5C, 0xA3, 0x8F, 0x5A, 0x56, 0x1A, 0x6D, 0x2D, 0x6C, 0xB2, 0x17, 0x8D, 0x90, ++ 0xAC, 0x85, 0x0C, 0xA2, 0x73, 0x4B, 0x45, 0xC4, 0xA8, 0x9A, 0xA0, 0xF1, 0x52, 0xA3, 0xB5, 0x3B, 0xCF, 0x1E, 0x13, 0x53, 0x2B, 0x2B, 0x5B, 0x38, 0x78, 0xB2, 0x05, 0xBD, 0x2B, 0x32, 0x7D, 0xC4, ++ 0x9E, 0xB6, 0x66, 0x0B, 0x95, 0x11, 0xBF, 0xAE, 0x90, 0xC1, 0xDE, 0xA5, 0xBD, 0xEB, 0x6D, 0xC5, 0xDA, 0x06, 0x8B, 0xCB, 0xDC, 0x6C, 0x09, 0x3E, 0x57, 0x27, 0xE3, 0x87, 0x37, 0x4F, 0x45, 0x2F, ++ 0x96, 0x3C, 0x30, 0x7D, 0xEE, 0x86, 0x5D, 0x41, 0xAA, 0x12, 0x4C, 0xA8, 0x03, 0xC1, 0x2F, 0x9A, 0xE9, 0x29, 0x9C, 0x3C, 0xB1, 0x34, 0x5F, 0xCC, 0x56, 0x8C, 0x6E, 0x71, 0xBE, 0x33, 0x66, 0xBF, ++ 0x30, 0xEF, 0xEE, 0xEF, 0xC7, 0x69, 0x3C, 0x36, 0xAC, 0xE5, 0x76, 0xB0, 0xD1, 0x0F, 0x40, 0x2F, 0x38, 0x00, 0x09, 0xFD, 0x0E, 0xC0, 0x68, 0xCB, 0x2D, 0x45, 0x98, 0x48, 0x84, 0xED, 0xF1, 0x6B, ++ 0xC9, 0x0B, 0x0F, 0xF6, 0xDC, 0x96, 0x30, 0x9E, 0xA3, 0x77, 0xA3, 0xCE, 0xC0, 0x43, 0xCB, 0x76, 0xB6, 0xC8, 0x85, 0xBB, 0xB8, 0x48, 0xC4, 0x74, 0x5B, 0x71, 0xE1, 0x8C, 0x58, 0xE7, 0x80, 0x50, ++ 0xE1, 0x9B, 0xD7, 0xBE, 0x08, 0x31, 0xEF, 0xE9, 0x05, 0x2A, 0x6A, 0x7D, 0xF8, 0xD4, 0xE8, 0xB9, 0xFC, 0x3E, 0x08, 0x2A, 0x4D, 0x40, 0xAD, 0x73, 0xE4, 0xB3, 0x18, 0x5E, 0x2F, 0x6D, 0xED, 0xE7, ++ 0xEE, 0x51, 0xA4, 0x06, 0x8F, 0xF2, 0xDA, 0x57, 0x37, 0x3F, 0xD7, 0xE7, 0xBD, 0x46, 0xE0, 0x08, 0x0F, 0x4C, 0x2C, 0x1F, 0x41, 0xBC, 0x25, 0x0E, 0x6D, 0xA4, 0x5A, 0x34, 0x1F, 0x21, 0x47, 0x71, ++ 0xF5, 0x53, 0x1A, 0x67, 0xB0, 0xFD, 0x97, 0xB5, 0x3C, 0xD7, 0x2C, 0xFA, 0xC7, 0x21, 0x5B, 0xC4, 0x11, 0x1F, 0x09, 0x40, 0x30, 0xA9, 0x13, 0x83, 0xD2, 0x01, 0x82, 0x21, 0x0F, 0xCE, 0xCD, 0x75, ++ 0xE5, 0x9C, 0x4B, 0x0B, 0x33, 0xA3, 0xF9, 0x3D, 0x86, 0x5D, 0x84, 0x7E, 0xC2, 0x41, 0xE1, 0xB9, 0x84, 0x81, 0xC5, 0xD9, 0xD2, 0x7F, 0x0A, 0xE2, 0x62, 0xB3, 0x28, 0x65, 0x0C, 0xDC, 0x13, 0xCD, ++ 0x99, 0x86, 0x6B, 0xE9, 0xA5, 0xA0, 0x30, 0xE8, 0x3D, 0x84, 0xE3, 0x2B, 0xD2, 0x13, 0xC9, 0x4B, 0xD6, 0xAF, 0x95, 0x04, 0x33, 0xA4, 0xF0, 0x0C, 0x61, 0x49, 0x78, 0x3B, 0x00, 0x75, 0x0C, 0xDF, ++ 0xD4, 0xF4, 0x7A, 0xE7, 0x52, 0x17, 0xEE, 0xD1, 0xF6, 0x0C, 0x36, 0x6F, 0xA0, 0x2C, 0xDB, 0x20, 0x6F, 0xEB, 0x2A, 0x68, 0x5D, 0x6B, 0x7D, 0x6A, 0x4C, 0x13, 0x55, 0x3E, 0x2B, 0xE2, 0x77, 0x94, ++ 0xF5, 0x3B, 0x0E, 0xF5, 0x73, 0x15, 0x20, 0x32, 0x63, 0xEB, 0x02, 0x6E, 0xA5, 0xE6, 0x70, 0x67, 0xD2, 0x2F, 0x92, 0xE2, 0x6E, 0x98, 0xDF, 0x9A, 0xB3, 0x86, 0xC2, 0x70, 0x5B, 0x43, 0x16, 0xA6, ++ 0x98, 0x92, 0x68, 0x8E, 0x60, 0x1E, 0x74, 0x27, 0x59, 0x5A, 0xCE, 0xE6, 0xE4, 0x7F, 0x5E, 0xC5, 0x98, 0xCC, 0x48, 0xC2, 0xF2, 0xDA, 0x1C, 0x32, 0xE0, 0x62, 0xA3, 0x49, 0xD8, 0x9D, 0xCC, 0x8C, ++ 0x05, 0xC6, 0x2E, 0x7B, 0x0C, 0xED, 0x6F, 0x2E, 0x93, 0xA7, 0xBD, 0x48, 0xA8, 0x00, 0x4A, 0x8C, 0x5C, 0x60, 0x5D, 0xFF, 0xC8, 0x05, 0xDE, 0x07, 0x9E, 0xDE, 0xE7, 0xCE, 0xD9, 0x86, 0x39, 0xA9, ++ 0x2F, 0x6C, 0xBA, 0x92, 0xF2, 0x08, 0x9B, 0x14, 0x5D, 0x2D, 0x61, 0xD9, 0x63, 0x8C, 0x07, 0x34, 0x7A, 0x2E, 0xF6, 0xB3, 0x0F, 0xD9, 0x0E, 0x11, 0x1A, 0x7F, 0x59, 0x13, 0xF6, 0xE1, 0x87, 0x95, ++ 0xC1, 0x9E, 0x0B, 0x9F, 0x60, 0xF8, 0x5B, 0xD8, 0xF5, 0xC9, 0xA9, 0x63, 0x33, 0x94, 0x41, 0xE4, 0xA5, 0xB7, 0x9E, 0xB2, 0xE8, 0x67, 0x96, 0x1B, 0x18, 0xA1, 0x88, 0x4A, 0x01, 0xA7, 0x44, 0x83, ++ 0xD8, 0x0B, 0x40, 0x3E, 0xFB, 0xDB, 0xD4, 0xED, 0xDD, 0xC1, 0x92, 0x2D, 0xA3, 0xFB, 0xB3, 0x7B, 0xEA, 0x97, 0xE0, 0xA5, 0xB6, 0x34, 0x3E, 0x43, 0x67, 0x60, 0x1B, 0xD2, 0x1D, 0xB6, 0x69, 0x41, ++ 0xC2, 0x69, 0x8B, 0xF5, 0x06, 0xB0, 0x48, 0x61, 0xB5, 0xF3, 0xD3, 0xD8, 0x0A, 0xC6, 0xDC, 0xB6, 0x84, 0xD9, 0xC4, 0x36, 0x9A, 0xBD, 0x04, 0xBC, 0x4B, 0xDB, 0xEF, 0x49, 0xC6, 0x6E, 0x38, 0x44, ++ 0x51, 0x3A, 0x3F, 0x3B, 0xDD, 0x40, 0x0C, 0x08, 0x0A, 0xC6, 0xEA, 0xD8, 0x1E, 0x8B, 0xB0, 0xE7, 0xCB, 0x36, 0xDB, 0x7B, 0x7E, 0xAB, 0x47, 0x28, 0x39, 0x18, 0x57, 0xF5, 0x97, 0xA3, 0x46, 0x48, ++ 0x63, 0xC3, 0x12, 0x64, 0x5B, 0x20, 0xAF, 0x02, 0xF7, 0xD0, 0xBD, 0x9A, 0x74, 0xDE, 0x23, 0x61, 0xA0, 0xD2, 0xD9, 0x8A, 0x69, 0x89, 0x75, 0xB3, 0x0F, 0x10, 0x10, 0xD9, 0x0A, 0x12, 0x60, 0x78, ++ 0x58, 0x4A, 0x45, 0xFF, 0xBC, 0xC6, 0x5B, 0x47, 0x97, 0x6A, 0xF6, 0x57, 0xEA, 0x84, 0xE9, 0x73, 0x0D, 0x9E, 0x36, 0x37, 0x33, 0x73, 0x6A, 0xC8, 0x01, 0x03, 0xDC, 0x1C, 0x75, 0x73, 0xC4, 0xDE, ++ 0xE2, 0x8A, 0x7B, 0xAC, 0x9E, 0xF7, 0x2C, 0xB8, 0x29, 0x45, 0x0B, 0x53, 0xEA, 0xF9, 0x84, 0xCD, 0x01, 0xAA, 0x31, 0x41, 0x6C, 0xE8, 0x91, 0x4B, 0x7D, 0x7E, 0xF8, 0x49, 0xEB, 0x9C, 0xC1, 0x72, ++ 0xD7, 0x09, 0x6D, 0xEF, 0xDA, 0xCF, 0x59, 0x6B, 0x9B, 0x21, 0xA5, 0x73, 0xE3, 0x46, 0xA4, 0x7A, 0x5A, 0x46, 0x9E, 0x1D, 0x79, 0x39, 0xBE, 0x19, 0x82, 0xCB, 0x39, 0x54, 0xC2, 0x14, 0xED, 0x3A, ++ 0x37, 0x07, 0xD7, 0x40, 0xC0, 0x33, 0xE3, 0xEF, 0x78, 0x0F, 0x4C, 0x48, 0xBA, 0xDD, 0x86, 0x38, 0x48, 0xBB, 0xFC, 0x9D, 0xAA, 0x8E, 0x38, 0x06, 0xA8, 0x4B, 0x2C, 0xAC, 0x0C, 0xA2, 0x32, 0x00, ++ 0x0C, 0xAF, 0x02, 0x03, 0xE9, 0x08, 0xFC, 0xE1, 0x8B, 0x5D, 0x62, 0x77, 0x72, 0x25, 0xD2, 0xD7, 0xD5, 0x84, 0xF2, 0xED, 0x71, 0x88, 0x5D, 0xFA, 0xF5, 0xA4, 0xDB, 0xEE, 0x02, 0xF2, 0x85, 0xBC, ++ 0x34, 0x55, 0x9B, 0x88, 0xEA, 0x9C, 0xE1, 0x5B, 0x47, 0xA3, 0xB9, 0x2A, 0x8D, 0x6F, 0x91, 0x59, 0x1C, 0x32, 0x9A, 0x5A, 0xA2, 0x1A, 0x1B, 0xC4, 0x24, 0xBA, 0x2B, 0xDB, 0xD1, 0x64, 0xCE, 0x1A, ++ 0x8B, 0x78, 0xB3, 0x8B, 0xEF, 0x2B, 0x47, 0xF2, 0x1F, 0x7F, 0xB7, 0xA3, 0xC5, 0x4E, 0x3E, 0xA4, 0x53, 0x6E, 0x81, 0x6E, 0x01, 0x65, 0x6C, 0x8E, 0x26, 0xAD, 0x42, 0xF3, 0xCB, 0x90, 0x61, 0x69, ++ 0x67, 0xC0, 0xDD, 0x07, 0x9F, 0x95, 0x6C, 0x9F, 0x3C, 0x84, 0x4D, 0x5F, 0x33, 0x9C, 0x62, 0xEE, 0x8A, 0x35, 0x8C, 0x4B, 0xEC, 0x2D, 0x27, 0x8A, 0xF7, 0x18, 0xAD, 0x50, 0x9C, 0x6B, 0x66, 0x61, ++ 0x3B, 0x58, 0x04, 0x43, 0xFA, 0x6F, 0x11, 0xCD, 0x8D, 0x10, 0x76, 0x93, 0xB5, 0xD7, 0xB7, 0x38, 0xAA, 0x7E, 0x2F, 0xE6, 0x62, 0x50, 0x2D, 0x75, 0x04, 0xA9, 0xF5, 0x96, 0x19, 0x41, 0x80, 0xF8, ++ 0x70, 0x0D, 0xC4, 0xE6, 0xF7, 0xE8, 0xE7, 0xD2, 0x30, 0x72, 0x34, 0x49, 0x4B, 0x8D, 0xF1, 0xD5, 0x7E, 0xE1, 0x4D, 0x6C, 0x97, 0x92, 0x6E, 0xB1, 0xD8, 0x90, 0x4D, 0x80, 0x89, 0xBE, 0x7D, 0x13, ++ 0x5B, 0x13, 0xD6, 0xDE, 0x30, 0xAA, 0x87, 0x20, 0xD6, 0x71, 0x59, 0xBB, 0x50, 0xA8, 0x34, 0xDE, 0x90, 0x79, 0x92, 0x2B, 0x88, 0x93, 0x1D, 0x45, 0x85, 0x00, 0x62, 0x68, 0x34, 0xDA, 0x04, 0x0D, ++ 0xB7, 0x68, 0xDD, 0xDB, 0xE6, 0x7A, 0x75, 0x8A, 0x02, 0xB4, 0x48, 0xE3, 0x6B, 0xA4, 0x55, 0x03, 0x4A, 0xDE, 0x36, 0x80, 0x2A, 0xA4, 0x2A, 0x7F, 0x2F, 0x23, 0x4A, 0x5E, 0x1C, 0xC2, 0x41, 0xE5, ++ 0x66, 0x1C, 0x63, 0xAF, 0xCE, 0x59, 0xDF, 0xDC, 0xC0, 0x89, 0x83, 0x47, 0xD2, 0x83, 0x4D, 0x72, 0x64, 0xF5, 0xB2, 0x1A, 0x47, 0xC5, 0x21, 0x4A, 0xDC, 0x57, 0xAF, 0x76, 0xCE, 0x9E, 0xBD, 0xB6, ++ 0x8C, 0x71, 0x02, 0x9B, 0xCF, 0x0C, 0x4C, 0x74, 0x5A, 0x33, 0x45, 0x4A, 0xCF, 0x0C, 0xF6, 0xD5, 0xC6, 0x8D, 0xEA, 0x06, 0xC4, 0x5E, 0x7D, 0x4D, 0x17, 0x55, 0xC5, 0xAC, 0xDC, 0x37, 0xFC, 0x24, ++ 0x34, 0x14, 0x0E, 0xF7, 0x07, 0xFD, 0x55, 0xFA, 0xF0, 0x6C, 0xBB, 0x17, 0x07, 0xC2, 0x7C, 0xE9, 0xD9, 0x05, 0x90, 0x5E, 0x37, 0xE2, 0xF1, 0x47, 0xC9, 0xCB, 0x88, 0x08, 0xEC, 0xD0, 0x5D, 0xF7, ++ 0x1F, 0xC5, 0xF1, 0xDA, 0xF9, 0x10, 0xD7, 0xBD, 0x68, 0xB6, 0x91, 0x49, 0x38, 0xBF, 0x0C, 0xAB, 0xCF, 0x66, 0xC9, 0x05, 0xC4, 0x95, 0x63, 0xD7, 0xD7, 0x0F, 0x2C, 0x3D, 0x3A, 0x4A, 0x4F, 0x62, ++ 0x9E, 0x3A, 0xFD, 0xE5, 0x3B, 0xD1, 0x4C, 0xD6, 0xE5, 0x27, 0xE4, 0xF0, 0x38, 0xD6, 0xA3, 0x31, 0xD0, 0x14, 0x68, 0xE2, 0x2D, 0xFE, 0x93, 0xA3, 0x79, 0xB3, 0xEC, 0x6D, 0xA6, 0xD1, 0xC2, 0xF6, ++ 0xD5, 0xEA, 0xB1, 0x41, 0xE5, 0x75, 0xF9, 0x3C, 0x8C, 0xC5, 0x58, 0x0D, 0xF4, 0xA3, 0xDB, 0x5C, 0x4C, 0x87, 0xD8, 0x54, 0x8E, 0x9A, 0x85, 0x19, 0x46, 0xD1, 0xB9, 0x0D, 0x75, 0x27, 0x40, 0x7F, ++ 0x1B, 0xA1, 0x12, 0x1E, 0xAC, 0x54, 0xA1, 0x1E, 0x6E, 0xDA, 0x45, 0xAB, 0xB0, 0x8A, 0x7A, 0x78, 0xAB, 0x36, 0xA7, 0x6E, 0xAD, 0x7F, 0xAC, 0x46, 0x78, 0xE5, 0x24, 0x64, 0xEF, 0xF3, 0x98, 0xE9, ++ 0x02, 0x15, 0xAC, 0x31, 0x6D, 0xE5, 0xA6, 0xEF, 0xE5, 0xA7, 0xB4, 0xA9, 0x5D, 0xF9, 0x2E, 0x41, 0x29, 0xF3, 0xF9, 0x1B, 0x31, 0x6F, 0x75, 0x67, 0x08, 0xBD, 0xF3, 0x7C, 0x01, 0xC1, 0x2B, 0xBA, ++ 0xA0, 0x91, 0xF9, 0x48, 0x84, 0xE3, 0x8A, 0xFF, 0x3C, 0x7B, 0x81, 0x40, 0x88, 0x8C, 0xAB, 0x4F, 0x7F, 0x86, 0x7E, 0xAD, 0xB0, 0x41, 0x85, 0x84, 0xB6, 0xF7, 0x70, 0x74, 0x02, 0x50, 0x93, 0x6A, ++ 0x13, 0x8A, 0xFF, 0x52, 0x88, 0x88, 0x40, 0x67, 0x7D, 0x81, 0x21, 0xC5, 0x83, 0x80, 0x6F, 0xE2, 0x71, 0x04, 0xDE, 0x52, 0x88, 0x13, 0xE5, 0x62, 0x26, 0xB6, 0x52, 0xC5, 0x86, 0x9B, 0xB5, 0x00, ++ 0x30, 0x38, 0x34, 0xD9, 0xC9, 0xD1, 0x97, 0xDB, 0xA1, 0xDD, 0x5C, 0x47, 0x34, 0x30, 0x7A, 0xB8, 0xBD, 0x00, 0x6B, 0x66, 0xEF, 0x45, 0xAB, 0xED, 0x2E, 0x31, 0x37, 0x7B, 0xEA, 0xA1, 0x9D, 0xAE, ++ 0x6E, 0xC8, 0x2A, 0xD7, 0x7C, 0x4C, 0x07, 0x74, 0x4F, 0x9B, 0x93, 0xA8, 0xDD, 0x4C, 0xEE, 0x1A, 0x62, 0xA5, 0x52, 0xED, 0xF4, 0xE2, 0x77, 0xCA, 0xCF, 0xF1, 0xF9, 0x64, 0xDA, 0x7A, 0xF8, 0xFA, ++ 0xFF, 0x6B, 0x56, 0xE3, 0xEB, 0xC0, 0x68, 0x50, 0xA9, 0xF7, 0x6E, 0xCF, 0xB2, 0xC2, 0xBA, 0xA6, 0x60, 0x95, 0x8C, 0x6D, 0x1B, 0xA9, 0x6B, 0xA8, 0x57, 0x8D, 0x06, 0x6D, 0x6A, 0xFE, 0x6E, 0x8F, ++ 0xB2, 0x05, 0x2B, 0x74, 0x21, 0xD5, 0x7D, 0xE5, 0xAB, 0x4C, 0x1F, 0xD5, 0x51, 0x70, 0xE9, 0xEE, 0x33, 0xEB, 0x32, 0xFB, 0x3D, 0x2C, 0x88, 0x61, 0x42, 0x05, 0x5E, 0xE8, 0x42, 0x8B, 0xD7, 0x45, ++ 0xAA, 0xBE, 0x1D, 0x15, 0x19, 0x1F, 0xFC, 0x93, 0xA3, 0xFA, 0x7A, 0x86, 0xB4, 0x27, 0xEB, 0x23, 0x70, 0xB7, 0x8A, 0x67, 0xA4, 0x85, 0xAF, 0x96, 0x3B, 0xBE, 0x1F, 0x22, 0x46, 0x11, 0x9F, 0xB4, ++ 0x69, 0xA0, 0x02, 0xD7, 0x02, 0x9F, 0xC4, 0xF5, 0xF7, 0xE0, 0x12, 0x5F, 0xDA, 0x73, 0x05, 0xAC, 0xF6, 0xC8, 0x0C, 0x7B, 0xD3, 0xF6, 0x68, 0x89, 0x7B, 0xA8, 0x14, 0x35, 0xF4, 0x26, 0xB8, 0x42, ++ 0x5C, 0x98, 0x55, 0xCD, 0x46, 0xC3, 0x44, 0x8B, 0xBA, 0xD0, 0x73, 0x9B, 0xA8, 0x8A, 0xBC, 0x27, 0x3B, 0xCD, 0x0F, 0xA1, 0xFD, 0xA7, 0xF4, 0xF8, 0x18, 0x3B, 0x5D, 0x73, 0xD1, 0x6C, 0x40, 0x7C, ++ 0x45, 0x2A, 0xEF, 0xA2, 0xE3, 0xCA, 0x9F, 0x2D, 0x9D, 0x63, 0x8D, 0x96, 0x6A, 0x58, 0x78, 0x8B, 0x48, 0xBF, 0xC5, 0x7D, 0x3F, 0xC2, 0x08, 0x5F, 0xE8, 0x5A, 0x7F, 0x7A, 0xDD, 0xD9, 0x1E, 0xFD, ++ 0x1B, 0xA0, 0x22, 0x60, 0x46, 0xB1, 0x27, 0xA9, 0x7B, 0xC4, 0x80, 0x47, 0x9B, 0x92, 0x88, 0x1A, 0x58, 0xA0, 0xBC, 0x04, 0xD8, 0xDD, 0x9E, 0x68, 0xB6, 0xD2, 0xBC, 0x50, 0x34, 0xCF, 0x23, 0x43, ++ 0x0D, 0x1F, 0xE5, 0x49, 0x91, 0xA6, 0x90, 0x8B, 0x01, 0x9E, 0xE0, 0x18, 0xC8, 0x43, 0xB9, 0xFA, 0x53, 0xEC, 0x7E, 0xE5, 0xF1, 0x14, 0xAB, 0xE2, 0xB7, 0x50, 0xD4, 0xE1, 0xE7, 0x2E, 0xAF, 0xB4, ++ 0xFB, 0xB3, 0x3A, 0x1E, 0x2C, 0x4D, 0x62, 0x72, 0xCE, 0xE2, 0x7B, 0xBB, 0x13, 0xB5, 0xD2, 0x3E, 0x24, 0xF6, 0x12, 0x9C, 0xF5, 0x82, 0x5F, 0x34, 0xAF, 0xC0, 0x56, 0xF9, 0x5F, 0x53, 0xA0, 0x9F, ++ 0x6F, 0xCA, 0x94, 0x35, 0xCD, 0x5F, 0xB6, 0xC0, 0x5F, 0x88, 0xB4, 0xDC, 0xE8, 0x6C, 0xEA, 0xBD, 0x7E, 0x0C, 0x78, 0x53, 0x61, 0xD2, 0x53, 0xBB, 0x9C, 0xDB, 0x3A, 0x0C, 0x6B, 0xC8, 0x51, 0x83, ++ 0x01, 0xFF, 0x44, 0xF9, 0xE8, 0x7F, 0x7A, 0x97, 0xEC, 0x9F, 0x02, 0xFA, 0xB5, 0x13, 0x4F, 0x3B, 0xBF, 0xA1, 0xCB, 0xE4, 0x4F, 0xA8, 0x3F, 0x1C, 0x54, 0x3E, 0xD9, 0xB8, 0x70, 0x65, 0x75, 0x43, ++ 0x5A, 0xC6, 0xA1, 0x5F, 0x7B, 0x0D, 0xEB, 0xA9, 0xD4, 0x5A, 0xF5, 0x54, 0xBB, 0x0C, 0xCB, 0xCA, 0x12, 0xA6, 0xC1, 0x6E, 0x5E, 0xE6, 0xFA, 0xD6, 0x37, 0x21, 0xE4, 0xC3, 0xCC, 0x8D, 0x9E, 0xA6, ++ 0x8C, 0x61, 0x49, 0x99, 0x30, 0x80, 0x95, 0x24, 0x07, 0xAF, 0xA2, 0x03, 0xF5, 0x04, 0xA8, 0x87, 0xB3, 0xBF, 0x84, 0xD2, 0xBB, 0x6E, 0x45, 0xE7, 0xCC, 0x53, 0x26, 0x53, 0x3D, 0x63, 0x96, 0x3F, ++ 0xFB, 0x72, 0xA9, 0x27, 0x2C, 0x8F, 0xF6, 0x37, 0xBE, 0x6E, 0x24, 0x73, 0xE9, 0xFC, 0xAB, 0x6B, 0x5E, 0x5E, 0x7C, 0xF3, 0xED, 0xBD, 0xDA, 0xEF, 0x51, 0xC9, 0x8D, 0x53, 0x17, 0x0F, 0x9B, 0x64, ++ 0xBC, 0xA5, 0xD4, 0x9F, 0x76, 0xAF, 0x17, 0x6D, 0x01, 0xA6, 0xF2, 0xEC, 0xB3, 0x39, 0x15, 0x1F, 0x49, 0xE4, 0x9A, 0x8F, 0x6E, 0x28, 0x6C, 0x6D, 0x41, 0x22, 0xD6, 0x50, 0xD5, 0x01, 0x59, 0x10, ++ 0xFF, 0x7F, 0x28, 0x02, 0x46, 0x93, 0x89, 0x5C, 0x58, 0x03, 0xDD, 0xFF, 0xCB, 0x1E, 0xDC, 0x46, 0x79, 0xC8, 0xF5, 0x35, 0xAC, 0x15, 0x97, 0xD9, 0xB2, 0x8A, 0xC4, 0x6E, 0x62, 0x88, 0x81, 0x01, ++ 0x29, 0xC1, 0x79, 0x55, 0x6A, 0xF7, 0x88, 0x2D, 0xEE, 0x17, 0xD5, 0x8A, 0x97, 0xF4, 0x34, 0xDF, 0x83, 0x64, 0x6B, 0x33, 0xCF, 0xBA, 0xB9, 0x0A, 0x62, 0x50, 0x85, 0x1C, 0xF5, 0x3D, 0x4B, 0xDB, ++ 0x45, 0x26, 0x33, 0x7D, 0xCC, 0xB9, 0xD9, 0x8A, 0x92, 0x16, 0x76, 0xB5, 0x13, 0x65, 0xDD, 0x08, 0xA5, 0x30, 0x4D, 0x2A, 0x93, 0x53, 0x4C, 0x52, 0x42, 0x7E, 0x9A, 0xE5, 0xC1, 0x44, 0x05, 0x92, ++ 0xC5, 0x53, 0x6E, 0x17, 0x1C, 0xF4, 0xFD, 0x1F, 0x43, 0x57, 0x8F, 0xEA, 0xFB, 0x32, 0xFF, 0x01, 0xD4, 0xFE, 0xD6, 0x35, 0xD7, 0x52, 0x56, 0x8F, 0x90, 0xEC, 0xFB, 0xB1, 0x64, 0xA5, 0xB1, 0x76, ++ 0x3F, 0x70, 0xC7, 0x2F, 0xD5, 0xBC, 0xDF, 0x61, 0xD0, 0x1F, 0xF3, 0x23, 0x66, 0x39, 0xC9, 0x1C, 0x06, 0x3C, 0x0B, 0x7A, 0x56, 0xAD, 0x03, 0xF4, 0x02, 0x0E, 0x80, 0xBD, 0x9A, 0x5E, 0x2F, 0x16, ++ 0x1E, 0x05, 0x78, 0x46, 0x9B, 0x99, 0x50, 0x26, 0x6B, 0xA9, 0x6B, 0xBB, 0x73, 0xC0, 0x8E, 0x7F, 0xAE, 0x85, 0x6E, 0x17, 0x03, 0xCF, 0x3C, 0xBD, 0x21, 0x41, 0x80, 0x89, 0x14, 0x8F, 0x7A, 0x9F, ++ 0x40, 0xD4, 0xD9, 0x11, 0x51, 0xDB, 0xC4, 0xBA, 0xE8, 0x54, 0x23, 0x59, 0xE8, 0x82, 0xA1, 0x9A, 0x99, 0x49, 0xCE, 0xD5, 0xB7, 0x5F, 0xF7, 0xB1, 0x92, 0xDC, 0x27, 0x9B, 0x3E, 0xD1, 0x00, 0x76, ++ 0x05, 0x3F, 0x58, 0xDE, 0x43, 0x5F, 0xC5, 0x87, 0x56, 0x54, 0xE9, 0x86, 0x33, 0xA3, 0x97, 0x14, 0x11, 0x42, 0x22, 0x9D, 0x8C, 0xD6, 0x13, 0xC6, 0x63, 0x44, 0x32, 0x6D, 0x83, 0x99, 0x2B, 0x3C, ++ 0x08, 0xF1, 0x7B, 0xE0, 0xEC, 0x28, 0xFB, 0xDB, 0xAB, 0xA1, 0x2C, 0xB0, 0x00, 0xB2, 0xA2, 0xB0, 0x4E, 0x24, 0xD0, 0xC4, 0x1B, 0xD6, 0xB5, 0x80, 0xE9, 0x99, 0xB2, 0x57, 0xC0, 0x07, 0x96, 0x5C, ++ 0x44, 0x75, 0xA9, 0xD5, 0x31, 0x4C, 0xD6, 0xC1, 0xFB, 0x9F, 0xED, 0xD5, 0x16, 0xE6, 0xB3, 0xC0, 0xDD, 0xD4, 0x04, 0xD6, 0x8D, 0x78, 0xFD, 0x4D, 0xE4, 0x09, 0x31, 0xB1, 0xB8, 0x72, 0xD4, 0xD0, ++ 0x1A, 0x2D, 0x46, 0xC9, 0xB2, 0x93, 0x90, 0x0D, 0x34, 0xEC, 0x91, 0xD3, 0xB6, 0x93, 0xF4, 0xE7, 0x2C, 0x22, 0x8E, 0xD0, 0x29, 0x4F, 0x6D, 0xC9, 0xB7, 0x17, 0x26, 0x0E, 0xBE, 0x75, 0xA4, 0x71, ++ 0xEA, 0x4D, 0x78, 0x00, 0xA3, 0xE7, 0xB7, 0xB4, 0x76, 0xD6, 0x4D, 0xEA, 0x6F, 0x4D, 0xA7, 0x26, 0xB3, 0x76, 0xF0, 0x78, 0x00, 0xDB, 0x5F, 0x83, 0xC0, 0xA3, 0xDC, 0xC2, 0xC7, 0x02, 0x6A, 0x4C, ++ 0x37, 0x8E, 0x88, 0x09, 0x94, 0x88, 0x5D, 0x6F, 0x7A, 0x88, 0x19, 0xD9, 0x1A, 0x2D, 0x50, 0xD1, 0x6D, 0x22, 0xBE, 0x59, 0x2B, 0xED, 0x38, 0x33, 0x04, 0x10, 0xE1, 0x4C, 0xDD, 0xD4, 0xCE, 0x0C, ++ 0x48, 0xD6, 0x2B, 0x77, 0x97, 0xDE, 0x44, 0xC0, 0x7F, 0x26, 0xA7, 0x9E, 0xF3, 0xA5, 0x83, 0x0F, 0x32, 0x1A, 0x35, 0xAC, 0x50, 0x7E, 0x94, 0x3C, 0x6D, 0xE6, 0x3F, 0xE1, 0x36, 0x82, 0x32, 0x25, ++ 0xD6, 0xFC, 0x73, 0xD8, 0x6D, 0x4C, 0x84, 0x39, 0x90, 0x13, 0xE0, 0x64, 0xE6, 0x68, 0x34, 0x92, 0x90, 0x7C, 0x7B, 0x78, 0xAE, 0xF2, 0xAA, 0xB1, 0x80, 0xDC, 0x33, 0xE5, 0xE6, 0xBD, 0xBD, 0x6D, ++ 0x49, 0x0E, 0x3A, 0xA8, 0xBE, 0x8E, 0x82, 0xFA, 0x6C, 0xB1, 0x3B, 0xEA, 0x36, 0x0C, 0x51, 0x0F, 0x9B, 0x4B, 0x5B, 0xA6, 0x64, 0x04, 0x27, 0xAD, 0xDD, 0xF3, 0xD6, 0x6D, 0xED, 0x41, 0xD1, 0xE2, ++ 0xA0, 0x61, 0x31, 0xE9, 0x50, 0x13, 0x68, 0x42, 0x73, 0x2C, 0x27, 0x34, 0x98, 0xD6, 0xA4, 0x7C, 0xED, 0x4E, 0xD1, 0x89, 0xB6, 0xE7, 0x39, 0x36, 0x1F, 0x68, 0xCC, 0xA0, 0xA9, 0x9D, 0x56, 0x02, ++ 0xB9, 0x76, 0x55, 0xAB, 0x26, 0x82, 0xE8, 0x37, 0xDB, 0xD6, 0x88, 0xC1, 0x73, 0xDD, 0x49, 0x50, 0xDD, 0x4C, 0xD4, 0xD3, 0xA3, 0x38, 0xF3, 0xFC, 0xFF, 0x8C, 0x71, 0x16, 0xEB, 0xC6, 0x30, 0xD0, ++ 0x5A, 0xFA, 0xB8, 0xDF, 0x7C, 0x75, 0x60, 0xF4, 0xDE, 0x9A, 0xD9, 0x22, 0x16, 0x26, 0x8E, 0xE1, 0x43, 0xA7, 0x22, 0xC0, 0x34, 0x97, 0xCE, 0x17, 0xEF, 0xE9, 0x8F, 0x67, 0x58, 0x0F, 0x0D, 0xDE, ++ 0xF5, 0x7F, 0x15, 0x25, 0x5E, 0x68, 0x85, 0x6D, 0x39, 0xA4, 0xEB, 0x33, 0x8A, 0x65, 0x33, 0x46, 0xFE, 0xDE, 0x46, 0x66, 0x3A, 0x62, 0x30, 0x7F, 0x65, 0x90, 0xE2, 0xEE, 0x7A, 0xB9, 0x28, 0xAC, ++ 0x5E, 0x8F, 0xA1, 0x63, 0xAA, 0x74, 0xE4, 0x02, 0x55, 0xD8, 0xD2, 0x41, 0x66, 0x8A, 0x1C, 0x71, 0x7E, 0x3F, 0x28, 0x99, 0x43, 0x50, 0xF4, 0x99, 0x08, 0xA3, 0x2E, 0x6F, 0xEC, 0x62, 0x06, 0xBD, ++ 0xF7, 0x93, 0x6D, 0xD2, 0xCF, 0x6A, 0x87, 0xB9, 0x99, 0x40, 0x45, 0x55, 0x2A, 0xCC, 0xE6, 0xEA, 0xF1, 0x29, 0x4E, 0x73, 0x27, 0xA1, 0x3E, 0x6E, 0xAC, 0x16, 0x22, 0x1A, 0x67, 0x6F, 0x60, 0x5D, ++ 0x6D, 0xA6, 0x36, 0x5D, 0x0D, 0xB0, 0x11, 0x35, 0x40, 0x50, 0x13, 0xF8, 0x74, 0x48, 0x1A, 0x68, 0x33, 0x04, 0x55, 0x28, 0x1A, 0x41, 0xE8, 0x3D, 0xF7, 0x6D, 0x20, 0xD1, 0xDF, 0x75, 0xDF, 0xEC, ++ 0xA0, 0x91, 0x7F, 0x3E, 0x94, 0xBE, 0xD2, 0x2D, 0x1E, 0xCE, 0xD8, 0xA9, 0xFC, 0x7B, 0x2A, 0x2E, 0x4A, 0x5B, 0x74, 0xD0, 0xB0, 0xC9, 0x28, 0x2B, 0xD6, 0x12, 0xA4, 0x86, 0x48, 0x99, 0x3F, 0x9F, ++ 0x01, 0x2B, 0xD7, 0x0A, 0x0E, 0x43, 0xDC, 0x3D, 0x1C, 0x0A, 0x16, 0x71, 0x1E, 0xBF, 0x6E, 0xA4, 0x79, 0xDB, 0x94, 0x1F, 0x68, 0xA6, 0x70, 0x1B, 0x57, 0xF7, 0xB8, 0x37, 0xB3, 0x0C, 0x0A, 0x6D, ++ 0x77, 0x11, 0x23, 0xD6, 0xFC, 0x70, 0xBD, 0xBE, 0x24, 0x44, 0x0C, 0xE4, 0xE2, 0x54, 0xA0, 0x70, 0x53, 0x4F, 0x1C, 0x18, 0x13, 0xC5, 0x16, 0x79, 0x12, 0x60, 0xA7, 0x36, 0x89, 0xDF, 0xE1, 0xBE, ++ 0xAD, 0x6E, 0xBF, 0x6A, 0xFF, 0x7E, 0xE4, 0x8D, 0xE1, 0xD5, 0x9C, 0x62, 0x22, 0x8B, 0x38, 0x3E, 0x0A, 0xCA, 0x06, 0x90, 0xF8, 0x05, 0xFE, 0xFD, 0xC5, 0x4F, 0xC4, 0xF9, 0x74, 0xBF, 0xAC, 0xCD, ++ 0xFE, 0x33, 0x21, 0x6C, 0xD2, 0xBC, 0x06, 0xBA, 0x7C, 0x2F, 0x55, 0xD7, 0xA0, 0x70, 0x8C, 0x48, 0x01, 0x4F, 0xF0, 0xC5, 0x35, 0xCD, 0x83, 0xD5, 0x47, 0x08, 0xFD, 0x70, 0x3E, 0x8E, 0xF5, 0x10, ++ 0xFA, 0x60, 0x72, 0xE2, 0x5F, 0xDA, 0xEB, 0x95, 0x33, 0xD4, 0x80, 0x60, 0x53, 0x07, 0x6C, 0xB8, 0xE4, 0xFE, 0x69, 0x46, 0xFD, 0x1A, 0x67, 0x0D, 0x1B, 0xDA, 0x92, 0x31, 0x1D, 0x5E, 0xD5, 0xFA, ++ 0x24, 0x5F, 0xA7, 0x4A, 0x6F, 0x04, 0xAE, 0x66, 0xE3, 0xC9, 0xE0, 0xA7, 0x18, 0x2C, 0xFD, 0xB2, 0x10, 0xE5, 0xA2, 0xF2, 0x8C, 0x95, 0x43, 0x99, 0x64, 0x74, 0x2A, 0x98, 0x7A, 0x16, 0x29, 0x85, ++ 0xDB, 0x91, 0xDF, 0x91, 0xD9, 0x52, 0x9D, 0x8B, 0x85, 0x0B, 0x86, 0x28, 0xA9, 0xC5, 0xC8, 0x45, 0x5B, 0xDB, 0x41, 0x7C, 0x92, 0x72, 0x24, 0xA9, 0xA8, 0xFF, 0xCD, 0xFE, 0x00, 0xC2, 0x28, 0xFA, ++ 0x28, 0x4C, 0x50, 0x52, 0x57, 0x70, 0x98, 0x15, 0x1E, 0x33, 0x78, 0x7F, 0x82, 0x87, 0xCB, 0x0D, 0x24, 0x31, 0x32, 0x45, 0x55, 0x84, 0x8A, 0x8D, 0x9C, 0xDF, 0xE3, 0xE4, 0xF0, 0xF1, 0x42, 0x61, ++ 0xD0, 0xFB, 0xFC, 0x02, 0x3C, 0x59, 0x6C, 0x74, 0x9E, 0xAE, 0xFB, 0x0A, 0x17, 0x84, 0xC8, 0xCF, 0xE5, 0xE7, 0x44, 0x8A, 0x98, 0x9F, 0xD8, 0xD9, 0x43, 0x66, 0xB4, 0xC7, 0xD6, 0xFF, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x1E, 0x23, 0x2B, 0x32, 0x38, 0x3E, ++ }, ++ }, ++ { ++ .name = "Dilithium Round 3, Level 5 (8-7) KAT 1", ++ .version = 0, ++ .keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_87, ++ .rho_len = 32, ++ .rho = { ++ 0xB5, 0x41, 0xC1, 0xE9, 0x2C, 0xEA, 0xDD, 0x90, 0x4A, 0x09, 0xEC, 0x08, 0xAD, 0x30, 0x6D, 0x97, 0x47, 0x34, 0xA0, 0x77, 0x86, 0x84, 0x71, 0xE5, 0x8D, 0x07, 0x71, 0x87, 0xC4, 0x66, 0x04, 0xCF, ++ }, ++ .seed_len = 32, ++ .seed = { ++ 0x95, 0x2D, 0x21, 0x81, 0xAC, 0x1F, 0x62, 0x59, 0x6F, 0x76, 0x7E, 0xFC, 0xA0, 0xB5, 0x5D, 0xB0, 0x92, 0xEF, 0x81, 0xDB, 0x66, 0xF9, 0xFF, 0xF1, 0x5F, 0x13, 0xD7, 0xAE, 0xEA, 0xCD, 0x8B, 0x3A, ++ }, ++ .tr_len = 32, ++ .tr = { ++ 0x6C, 0xA7, 0x8E, 0x25, 0x84, 0x0D, 0x7D, 0xA0, 0x3C, 0x92, 0xE0, 0x1B, 0x8D, 0xD2, 0xC6, 0xDB, 0x77, 0xFC, 0x68, 0x70, 0x64, 0x73, 0x6C, 0xA8, 0x44, 0x8D, 0x40, 0x3E, 0x6F, 0x18, 0xC0, 0x2C, ++ }, ++ .s1_len = 672, ++ .s1 = { ++ 0x03, 0x40, 0x28, 0x8C, 0x88, 0x60, 0x21, 0xB1, 0x90, 0x0C, 0x12, 0x0D, 0x58, 0x18, 0x09, 0x23, 0x44, 0x86, 0x03, 0x02, 0x84, 0x89, 0xB2, 0x28, 0x0C, 0x97, 0x2C, 0x11, 0xC2, 0x09, 0x18, 0x32, ++ 0x08, 0x09, 0x10, 0x91, 0x14, 0x82, 0x8C, 0x13, 0x03, 0x05, 0x11, 0x01, 0x4C, 0x62, 0x18, 0x8A, 0xDB, 0x08, 0x8A, 0x93, 0x38, 0x12, 0x09, 0xA9, 0x20, 0xE4, 0xA8, 0x41, 0x1A, 0xA1, 0x40, 0xD1, ++ 0x42, 0x2E, 0x59, 0x92, 0x24, 0xD0, 0x26, 0x00, 0x19, 0x93, 0x84, 0xE2, 0x28, 0x92, 0x1B, 0x19, 0x50, 0xA3, 0x10, 0x8E, 0xA2, 0x28, 0x20, 0x93, 0x34, 0x70, 0x94, 0xC0, 0x4D, 0x24, 0x35, 0x41, ++ 0x14, 0x05, 0x62, 0xC2, 0x22, 0x31, 0x1A, 0x38, 0x4E, 0xCC, 0x42, 0x44, 0x13, 0x20, 0x82, 0x08, 0x18, 0x6D, 0xE0, 0x14, 0x0D, 0x01, 0x36, 0x61, 0x08, 0x22, 0x29, 0x14, 0xB5, 0x11, 0x49, 0x22, ++ 0x32, 0xE2, 0x42, 0x26, 0xE4, 0x04, 0x01, 0x5B, 0x48, 0x2A, 0x11, 0x02, 0x60, 0x63, 0x02, 0x48, 0x4A, 0x24, 0x2C, 0x62, 0x40, 0x90, 0x03, 0x41, 0x8D, 0x18, 0xC8, 0x30, 0x82, 0x02, 0x82, 0x51, ++ 0x98, 0x69, 0xA2, 0x24, 0x50, 0x0A, 0x39, 0x4D, 0x84, 0x00, 0x8E, 0x84, 0x08, 0x21, 0xD9, 0x30, 0x6C, 0xE3, 0x18, 0x29, 0x23, 0x45, 0x6E, 0xCA, 0x24, 0x66, 0x08, 0x21, 0x49, 0x14, 0x16, 0x52, ++ 0xDA, 0xA0, 0x0C, 0x22, 0x19, 0x62, 0xC1, 0xB8, 0x08, 0x8A, 0x88, 0x8C, 0x22, 0xB1, 0x0C, 0x23, 0xB8, 0x0D, 0x00, 0x93, 0x64, 0x93, 0x16, 0x82, 0x63, 0x32, 0x30, 0xDC, 0xA2, 0x41, 0xD1, 0x48, ++ 0x42, 0x82, 0xA2, 0x64, 0xD4, 0x24, 0x48, 0x94, 0x48, 0x25, 0x02, 0x82, 0x65, 0xD9, 0x08, 0x69, 0x12, 0x44, 0x21, 0x54, 0x24, 0x70, 0x04, 0x80, 0x84, 0xDA, 0x44, 0x25, 0xA0, 0x24, 0x8A, 0x13, ++ 0x35, 0x60, 0x84, 0xA0, 0x4C, 0x93, 0x90, 0x48, 0x13, 0x47, 0x02, 0x83, 0x20, 0x05, 0x64, 0xB4, 0x0C, 0x5C, 0x12, 0x72, 0x42, 0x14, 0x86, 0x60, 0x02, 0x12, 0x50, 0x44, 0x04, 0x0B, 0x82, 0x11, ++ 0x91, 0x18, 0x72, 0x48, 0x88, 0x10, 0xD0, 0x40, 0x4D, 0xCB, 0x98, 0x51, 0x49, 0xA4, 0x8D, 0x18, 0x25, 0x89, 0xD4, 0x32, 0x8E, 0x52, 0xA4, 0x10, 0x11, 0x40, 0x12, 0x88, 0x26, 0x88, 0x21, 0x17, ++ 0x6A, 0xA2, 0xB2, 0x41, 0xE4, 0x02, 0x89, 0xA1, 0xA0, 0x30, 0x94, 0xC8, 0x41, 0x1B, 0x83, 0x64, 0x12, 0x05, 0x0A, 0x1C, 0x43, 0x8C, 0x84, 0x06, 0x31, 0x0A, 0xA2, 0x6D, 0x24, 0x17, 0x31, 0xC3, ++ 0x98, 0x28, 0x42, 0x88, 0x25, 0x8C, 0x30, 0x52, 0xA0, 0x02, 0x0E, 0x98, 0x36, 0x88, 0x03, 0x81, 0x31, 0x64, 0x18, 0x6C, 0x09, 0x82, 0x69, 0x19, 0x41, 0x4C, 0xA0, 0x26, 0x11, 0x23, 0x35, 0x60, ++ 0x01, 0x04, 0x85, 0x64, 0x86, 0x30, 0xD9, 0x20, 0x84, 0xD9, 0x08, 0x2A, 0xDC, 0x32, 0x61, 0x1C, 0xC2, 0x80, 0x89, 0x82, 0x51, 0x14, 0x10, 0x40, 0x19, 0x05, 0x80, 0x58, 0x04, 0x06, 0x99, 0x08, ++ 0x84, 0x09, 0x27, 0x41, 0xCA, 0x20, 0x8A, 0x93, 0x00, 0x91, 0x03, 0xC6, 0x81, 0xC2, 0xC8, 0x09, 0xC3, 0x30, 0x4D, 0x23, 0x12, 0x0A, 0x9B, 0x42, 0x8D, 0x20, 0x23, 0x6A, 0x54, 0x30, 0x22, 0xCC, ++ 0xA4, 0x29, 0xA2, 0x18, 0x31, 0x40, 0x20, 0x6E, 0x92, 0x90, 0x48, 0x41, 0xB8, 0x45, 0x83, 0x38, 0x08, 0x5C, 0x46, 0x80, 0x59, 0x36, 0x45, 0xE3, 0xB0, 0x31, 0x18, 0x06, 0x6A, 0x53, 0x16, 0x6D, ++ 0x21, 0x99, 0x81, 0x00, 0x30, 0x4E, 0xC8, 0x26, 0x48, 0x18, 0xC0, 0x88, 0x19, 0x14, 0x92, 0xC1, 0x98, 0x45, 0x98, 0x08, 0x84, 0x9B, 0x10, 0x4D, 0x0C, 0x96, 0x90, 0x08, 0x91, 0x69, 0x0C, 0xB1, ++ 0x4D, 0x91, 0x28, 0x6E, 0xC9, 0x06, 0x8C, 0x58, 0x00, 0x0A, 0x0C, 0x96, 0x05, 0x8A, 0x46, 0x06, 0xD4, 0x98, 0x29, 0x83, 0x26, 0x50, 0xE1, 0x10, 0x61, 0xD0, 0x96, 0x50, 0x23, 0x12, 0x24, 0x52, ++ 0x20, 0x80, 0xE4, 0x04, 0x48, 0x0C, 0x23, 0x92, 0x0B, 0xB7, 0x0D, 0x0C, 0x82, 0x90, 0xD1, 0x10, 0x90, 0x21, 0x22, 0x11, 0x0A, 0x12, 0x64, 0x53, 0xB6, 0x71, 0x99, 0x28, 0x69, 0xC1, 0xC4, 0x4D, ++ 0x04, 0xA0, 0x8D, 0xCB, 0x96, 0x41, 0x58, 0x14, 0x06, 0x0C, 0x21, 0x70, 0x8B, 0x30, 0x25, 0x52, 0xA2, 0x25, 0x21, 0x19, 0x30, 0x00, 0xA3, 0x28, 0xD0, 0xB8, 0x09, 0xCC, 0x16, 0x12, 0xDC, 0x94, ++ 0x6D, 0x01, 0x20, 0x81, 0xDC, 0x42, 0x42, 0xE1, 0x28, 0x01, 0x0C, 0x87, 0x89, 0x02, 0x84, 0x09, 0x02, 0x17, 0x88, 0xD8, 0x34, 0x30, 0x1C, 0x33, 0x64, 0x44, 0xA0, 0x09, 0xA0, 0xA0, 0x0D, 0xE3, ++ 0x90, 0x4D, 0x01, 0x08, 0x65, 0xE2, 0x42, 0x69, 0xA2, 0xC0, 0x91, 0x99, 0x16, 0x62, 0x9B, 0x02, 0x60, 0x40, 0x88, 0x50, 0x40, 0x86, 0x71, 0xA4, 0xC4, 0x61, 0x62, 0x22, 0x20, 0x10, 0x12, 0x11, ++ }, ++ .s2_len = 768, ++ .s2 = { ++ 0x4B, 0x26, 0x22, 0x09, 0x07, 0x88, 0x1A, 0x26, 0x85, 0x58, 0x86, 0x80, 0xDA, 0xA0, 0x8C, 0x0B, 0x85, 0x68, 0x42, 0x22, 0x82, 0x88, 0x24, 0x61, 0x8C, 0x98, 0x8C, 0x23, 0x30, 0x25, 0x24, 0x40, ++ 0x45, 0x08, 0xC8, 0x6C, 0x23, 0x14, 0x28, 0x4A, 0x28, 0x10, 0x81, 0x20, 0x72, 0x88, 0x32, 0x26, 0x93, 0xA6, 0x6D, 0x5B, 0xB6, 0x29, 0xC1, 0x24, 0x0D, 0x49, 0x20, 0x70, 0x59, 0x48, 0x26, 0x20, ++ 0x26, 0x65, 0xCB, 0xA4, 0x88, 0x4A, 0xA6, 0x30, 0x08, 0x45, 0x8E, 0x00, 0x32, 0x88, 0x24, 0x33, 0x0D, 0xA1, 0x46, 0x72, 0x9B, 0x12, 0x00, 0x14, 0xB5, 0x21, 0xE3, 0x02, 0x09, 0x23, 0x42, 0x28, ++ 0x19, 0xB2, 0x05, 0x92, 0xA4, 0x44, 0x00, 0x06, 0x45, 0x04, 0xC6, 0x29, 0x5C, 0x12, 0x50, 0xA2, 0x90, 0x45, 0x92, 0x22, 0x86, 0x9B, 0x24, 0x31, 0x9C, 0x12, 0x65, 0x94, 0xB0, 0x01, 0x98, 0x26, ++ 0x65, 0xD2, 0x48, 0x0E, 0x62, 0x46, 0x20, 0x89, 0x82, 0x61, 0x08, 0x45, 0x08, 0x64, 0xA6, 0x91, 0x9C, 0x42, 0x6D, 0x9A, 0x96, 0x0C, 0x49, 0x24, 0x32, 0x04, 0xB1, 0x65, 0x83, 0x16, 0x45, 0x8A, ++ 0x22, 0x22, 0x1A, 0x42, 0x02, 0x83, 0x46, 0x2C, 0x1C, 0x33, 0x72, 0x5A, 0x24, 0x00, 0xD4, 0x30, 0x80, 0x0A, 0x23, 0x08, 0x24, 0xA4, 0x84, 0x01, 0xC0, 0x41, 0x44, 0xC0, 0x09, 0x51, 0xA8, 0x2C, ++ 0x01, 0x20, 0x8D, 0x82, 0x14, 0x72, 0x23, 0x30, 0x12, 0x11, 0x12, 0x52, 0x0A, 0x11, 0x00, 0x00, 0x43, 0x90, 0xDC, 0x36, 0x4D, 0x88, 0x96, 0x05, 0xC9, 0xB8, 0x45, 0x64, 0x02, 0x4A, 0x61, 0x00, ++ 0x0C, 0x82, 0x18, 0x4E, 0x91, 0x00, 0x8E, 0x23, 0x12, 0x91, 0x41, 0xB8, 0x91, 0x1B, 0x18, 0x0C, 0x0B, 0x46, 0x89, 0xD2, 0x18, 0x8D, 0x19, 0x84, 0x10, 0xC0, 0x86, 0x0D, 0x03, 0x16, 0x25, 0xC3, ++ 0xC2, 0x70, 0x19, 0x87, 0x31, 0x1A, 0x24, 0x2C, 0x08, 0x14, 0x01, 0x14, 0x04, 0x6C, 0xC2, 0x46, 0x04, 0x13, 0x10, 0x06, 0xC9, 0x08, 0x49, 0x04, 0xB1, 0x70, 0x54, 0xA2, 0x0C, 0x01, 0x24, 0x6A, ++ 0x90, 0x18, 0x45, 0x24, 0x47, 0x49, 0x1B, 0xA2, 0x40, 0x02, 0x32, 0x80, 0x60, 0x98, 0x50, 0x8B, 0x48, 0x91, 0x5A, 0x46, 0x12, 0x13, 0x49, 0x71, 0x1C, 0x96, 0x01, 0x22, 0x15, 0x29, 0x20, 0xB5, ++ 0x00, 0x04, 0xC3, 0x05, 0x4C, 0x24, 0x12, 0x80, 0x40, 0x4E, 0x14, 0xA1, 0x4C, 0xDB, 0x16, 0x4D, 0x00, 0x08, 0x24, 0xE2, 0x48, 0x80, 0xD4, 0x98, 0x44, 0x89, 0xC2, 0x68, 0x84, 0x24, 0x52, 0x02, ++ 0x24, 0x61, 0x5C, 0x38, 0x11, 0x60, 0x96, 0x44, 0xA3, 0x02, 0x0E, 0x04, 0xB5, 0x81, 0xD1, 0x48, 0x24, 0xE0, 0x18, 0x49, 0x91, 0x06, 0x88, 0x93, 0x88, 0x61, 0x52, 0xA8, 0x20, 0x50, 0x22, 0x85, ++ 0x23, 0x28, 0x2C, 0xC3, 0x08, 0x12, 0x89, 0x22, 0x8D, 0x11, 0x22, 0x0D, 0xC2, 0x30, 0x12, 0x0A, 0x98, 0x2D, 0x22, 0x19, 0x86, 0x08, 0x89, 0x40, 0x0B, 0x21, 0x69, 0x04, 0xB3, 0x00, 0x61, 0x38, ++ 0x0D, 0x04, 0x10, 0x2D, 0x5A, 0x24, 0x65, 0x8C, 0x12, 0x0A, 0x5C, 0x42, 0x0E, 0x5A, 0x26, 0x90, 0xA1, 0x36, 0x88, 0xA1, 0x38, 0x4D, 0x1B, 0x04, 0x8E, 0xDC, 0x00, 0x0A, 0x0B, 0x35, 0x6A, 0xC2, ++ 0x02, 0x91, 0x83, 0x48, 0x20, 0x11, 0x02, 0x86, 0xD2, 0xA2, 0x2D, 0x1C, 0x00, 0x29, 0x0C, 0x30, 0x12, 0x20, 0x91, 0x6D, 0x02, 0x87, 0x91, 0x40, 0x82, 0x44, 0x09, 0x98, 0x4C, 0x24, 0x13, 0x52, ++ 0x09, 0x92, 0x4C, 0x4A, 0xB0, 0x01, 0x01, 0x46, 0x80, 0x10, 0x03, 0x44, 0x94, 0xB6, 0x49, 0xDC, 0xA0, 0x51, 0xA4, 0x04, 0x0C, 0x14, 0xC6, 0x68, 0x24, 0x09, 0x22, 0x9B, 0x20, 0x0E, 0x09, 0x28, ++ 0x69, 0xDA, 0x16, 0x69, 0x09, 0xA4, 0x80, 0x0C, 0x39, 0x60, 0xDC, 0xC0, 0x10, 0x23, 0x89, 0x0D, 0xDB, 0x10, 0x41, 0xCB, 0xB2, 0x6C, 0x12, 0xC2, 0x04, 0x08, 0x92, 0x68, 0xCA, 0x06, 0x20, 0xE0, ++ 0x36, 0x0E, 0x04, 0xC2, 0x49, 0x18, 0x27, 0x68, 0x24, 0xA8, 0x29, 0x42, 0x42, 0x6A, 0x8B, 0xB6, 0x25, 0x82, 0x26, 0x00, 0x1C, 0x07, 0x42, 0x1B, 0x02, 0x26, 0x94, 0x90, 0x85, 0x13, 0xA7, 0x30, ++ 0x09, 0x24, 0x40, 0x5A, 0xA8, 0x44, 0x49, 0x00, 0x8A, 0x59, 0x18, 0x24, 0x90, 0x28, 0x80, 0x88, 0x08, 0x71, 0x21, 0x47, 0x2D, 0x52, 0x34, 0x80, 0x0B, 0x96, 0x04, 0x9C, 0x38, 0x09, 0x8C, 0xA4, ++ 0x30, 0x19, 0xA9, 0x8C, 0x03, 0x45, 0x4C, 0x51, 0xA0, 0x68, 0x04, 0x22, 0x42, 0x11, 0x18, 0x82, 0xA2, 0x96, 0x48, 0xE4, 0x36, 0x72, 0xCB, 0x24, 0x28, 0x23, 0xA7, 0x2D, 0xDC, 0x38, 0x00, 0x89, ++ 0x36, 0x06, 0x4B, 0x92, 0x89, 0x03, 0x49, 0x71, 0xDA, 0x10, 0x06, 0x0A, 0x39, 0x0C, 0x40, 0x14, 0x82, 0xDA, 0x80, 0x48, 0x9A, 0x86, 0x88, 0x59, 0x44, 0x50, 0x89, 0xC4, 0x61, 0x59, 0x22, 0x42, ++ 0x10, 0xB0, 0x24, 0x8B, 0x40, 0x6C, 0x8C, 0x20, 0x46, 0x23, 0x09, 0x60, 0xC4, 0x98, 0x85, 0x5A, 0xA4, 0x01, 0x01, 0x39, 0x46, 0xC1, 0x94, 0x71, 0x8C, 0xC2, 0x40, 0x0C, 0x22, 0x25, 0x53, 0x00, ++ 0x66, 0x4C, 0x26, 0x30, 0x21, 0xC0, 0x2D, 0x98, 0x30, 0x6A, 0x94, 0x24, 0x50, 0x21, 0x12, 0x81, 0x0B, 0x12, 0x00, 0x9C, 0x94, 0x0C, 0x9B, 0x36, 0x6C, 0x94, 0x26, 0x85, 0x8A, 0x12, 0x30, 0xA3, ++ 0xA0, 0x89, 0x42, 0x08, 0x50, 0x44, 0x16, 0x2C, 0x20, 0x38, 0x29, 0x5C, 0x32, 0x61, 0x63, 0xA4, 0x6D, 0x58, 0x48, 0x72, 0xDA, 0x26, 0x22, 0x89, 0xA4, 0x8D, 0xD3, 0x32, 0x26, 0x0C, 0x32, 0x04, ++ }, ++ .t0_len = 3328, ++ .t0 = { ++ 0xDD, 0x9E, 0x51, 0x56, 0xEB, 0x0F, 0xB3, 0x78, 0x1A, 0x12, 0x27, 0x3B, 0xE3, 0x14, 0xE7, 0x1E, 0x56, 0x59, 0x60, 0x44, 0xDA, 0x83, 0xAB, 0xFB, 0x24, 0xC7, 0x79, 0x9A, 0x81, 0x46, 0x43, 0x4E, ++ 0x93, 0x49, 0x03, 0x49, 0x29, 0x00, 0x0A, 0xF0, 0x29, 0xBA, 0x14, 0x68, 0x07, 0x48, 0xA8, 0x99, 0xE8, 0x3D, 0xD9, 0x21, 0x1D, 0x3E, 0x8D, 0xE8, 0x41, 0x9C, 0xE1, 0x20, 0xCF, 0x5B, 0xCA, 0x55, ++ 0x29, 0x7A, 0x27, 0xD8, 0x35, 0x4F, 0x66, 0xFB, 0x83, 0x7B, 0x10, 0x8D, 0x7D, 0xC7, 0xE3, 0x2D, 0x14, 0x5B, 0xB4, 0x01, 0x65, 0x24, 0x42, 0xEB, 0xF5, 0x45, 0xC4, 0xA1, 0x2C, 0x70, 0x19, 0x18, ++ 0xD2, 0x49, 0x4C, 0x03, 0xA1, 0x12, 0xC0, 0xD9, 0x42, 0xDC, 0xB4, 0x4D, 0xFA, 0xEC, 0x31, 0xAE, 0xAA, 0xE3, 0x2A, 0x5B, 0xAD, 0xBB, 0x8C, 0x82, 0xC6, 0x21, 0x77, 0x1C, 0xEA, 0x9A, 0x1E, 0xDA, ++ 0xF7, 0x7B, 0x77, 0x7C, 0x52, 0x40, 0x28, 0x67, 0x04, 0xC0, 0x61, 0xC3, 0xAA, 0x6D, 0x68, 0x51, 0x22, 0xB4, 0xC9, 0x82, 0x46, 0x7C, 0x32, 0x9C, 0xDF, 0x89, 0x9D, 0x00, 0xF3, 0x01, 0xC5, 0x54, ++ 0xAF, 0x57, 0xE2, 0xF9, 0x93, 0x4C, 0x3A, 0x3F, 0x36, 0xEE, 0x2D, 0xD5, 0xCB, 0x35, 0x6C, 0x47, 0x52, 0x08, 0x30, 0x79, 0x81, 0x78, 0x00, 0xA0, 0x92, 0x84, 0x51, 0x27, 0x8A, 0x26, 0xCC, 0xD6, ++ 0x07, 0x17, 0xD4, 0x17, 0x59, 0xBC, 0x8C, 0x6F, 0x77, 0x9A, 0xFA, 0xBD, 0xFD, 0xFA, 0xFA, 0xA3, 0xA4, 0xD6, 0x2E, 0x9D, 0x1E, 0x9B, 0x3C, 0x8E, 0xDB, 0xAF, 0xBE, 0x29, 0xD7, 0x8E, 0x4D, 0x71, ++ 0xB0, 0xCE, 0x4C, 0xF4, 0xCF, 0x15, 0x1E, 0x3E, 0x54, 0x1C, 0x29, 0x9C, 0x6E, 0xAD, 0x63, 0xA7, 0x27, 0x15, 0xCD, 0xC9, 0x5F, 0x58, 0x4C, 0x6E, 0xB3, 0x75, 0x7C, 0x66, 0x0A, 0x27, 0x59, 0x63, ++ 0x19, 0x2B, 0xA8, 0xFD, 0xE8, 0xC2, 0xAC, 0xBD, 0x7E, 0xA9, 0xE5, 0x25, 0x92, 0x62, 0x42, 0x66, 0x59, 0xF7, 0xA5, 0x55, 0x5B, 0x80, 0xBD, 0x2C, 0xD5, 0xE7, 0xB5, 0xA6, 0xC9, 0x9B, 0x03, 0x0C, ++ 0x88, 0x70, 0x90, 0xEE, 0x9E, 0x64, 0x67, 0xA3, 0x75, 0x5A, 0x07, 0x58, 0xC9, 0xFF, 0xD7, 0xDB, 0x4D, 0x9D, 0x03, 0x1B, 0x7B, 0x6C, 0x77, 0xCC, 0x5D, 0xA2, 0x8A, 0xF2, 0xA6, 0xD3, 0x3A, 0x25, ++ 0x18, 0x7F, 0x7E, 0x2F, 0x5E, 0x45, 0xDD, 0x48, 0xE5, 0x1B, 0xBE, 0xAA, 0x9C, 0x06, 0xE5, 0xD2, 0xE8, 0xB0, 0x0D, 0x92, 0x58, 0x32, 0x31, 0xBB, 0xE0, 0x1F, 0x2A, 0x78, 0xA9, 0xFE, 0xB5, 0x10, ++ 0x72, 0xC2, 0xF1, 0x13, 0x8A, 0x5C, 0x68, 0x15, 0x78, 0x66, 0x6F, 0xE5, 0x46, 0x85, 0x00, 0xB6, 0x16, 0xAC, 0x60, 0x40, 0x22, 0x5F, 0xF0, 0xA8, 0xE9, 0xBF, 0x86, 0xD6, 0x45, 0x0F, 0xD2, 0xAC, ++ 0x8C, 0x2A, 0x3F, 0x0A, 0xE0, 0x67, 0x93, 0xBD, 0xE4, 0x34, 0x71, 0x4F, 0x1F, 0xCA, 0x30, 0xC7, 0xB1, 0x41, 0x34, 0xFF, 0xB5, 0xE7, 0x43, 0x72, 0x52, 0x17, 0x0C, 0xD4, 0x2E, 0x04, 0xBB, 0x76, ++ 0xF5, 0x36, 0x5A, 0x3C, 0x2F, 0x80, 0xF0, 0x2A, 0x86, 0xC4, 0x07, 0xB9, 0x84, 0x03, 0xBA, 0x84, 0x8C, 0xCD, 0xF5, 0x4B, 0x60, 0x09, 0x21, 0x77, 0x46, 0x85, 0x0A, 0x67, 0x03, 0x84, 0x4A, 0x49, ++ 0x6E, 0x1A, 0x09, 0x21, 0x9D, 0xA8, 0xA6, 0x40, 0xC9, 0x20, 0x67, 0xC0, 0xBB, 0x66, 0xA5, 0x70, 0x00, 0x78, 0x50, 0xF9, 0xB3, 0x03, 0x33, 0xA6, 0x68, 0x28, 0x3D, 0x5A, 0x15, 0xB0, 0xAF, 0x09, ++ 0x9D, 0xEA, 0x4F, 0x52, 0xDF, 0x86, 0x5B, 0xC3, 0x58, 0x6A, 0x8C, 0x04, 0x73, 0xE7, 0xDA, 0x12, 0xDA, 0xA1, 0xA5, 0x0B, 0xF7, 0xCA, 0x5E, 0x2B, 0xBD, 0x53, 0xCB, 0xAD, 0xDC, 0xBA, 0x09, 0x18, ++ 0x29, 0x44, 0xE8, 0x1B, 0xAE, 0xC6, 0x0D, 0xAE, 0xD7, 0x8A, 0xA8, 0xB6, 0xC3, 0xA2, 0xF4, 0x5B, 0x07, 0x16, 0xAA, 0x84, 0x29, 0xA1, 0x06, 0xDD, 0x71, 0x69, 0x40, 0x29, 0xFD, 0x1A, 0x02, 0xC5, ++ 0xCA, 0x2D, 0x3D, 0xFD, 0xE3, 0x2E, 0xCD, 0xC5, 0x78, 0x0F, 0x72, 0x3F, 0x1E, 0x2D, 0xB7, 0x68, 0xA5, 0xA3, 0xCD, 0xAE, 0x48, 0xF9, 0x39, 0xCA, 0x15, 0x86, 0xE2, 0x30, 0x83, 0xF7, 0x3C, 0x2F, ++ 0x62, 0x3A, 0x12, 0x1F, 0x54, 0x67, 0xAF, 0x24, 0xDA, 0xA8, 0x72, 0x63, 0x98, 0xEE, 0xED, 0x8B, 0xB1, 0xDF, 0xA4, 0x60, 0xA1, 0x12, 0xC5, 0x97, 0xAE, 0x2D, 0xD6, 0x4E, 0x90, 0x40, 0x02, 0xE0, ++ 0xF1, 0xA9, 0x0C, 0x00, 0xF9, 0x2C, 0xAF, 0xFA, 0x7F, 0xC4, 0x46, 0x74, 0x44, 0xA6, 0xFC, 0x40, 0x39, 0x18, 0x80, 0x3A, 0x92, 0xDC, 0x2A, 0xFC, 0x3A, 0x17, 0xBC, 0xAC, 0x18, 0x7A, 0xD8, 0xB3, ++ 0xDE, 0x0D, 0x87, 0x28, 0x30, 0xB8, 0xA7, 0xB5, 0xE5, 0x58, 0x0A, 0xBD, 0x1E, 0x27, 0xD5, 0x59, 0x4C, 0x1A, 0x6A, 0x00, 0x3D, 0x6C, 0x7C, 0x21, 0xB8, 0x71, 0xC7, 0xB6, 0x31, 0x49, 0x7A, 0x2E, ++ 0xFE, 0x0F, 0x86, 0x2B, 0x65, 0xF6, 0x65, 0x6B, 0x09, 0x4D, 0xDB, 0xA8, 0x20, 0xE9, 0xE6, 0x31, 0x4B, 0x4B, 0xD8, 0xF7, 0x81, 0x51, 0x8D, 0x17, 0x40, 0x54, 0x97, 0xBB, 0x39, 0x06, 0x3E, 0x68, ++ 0x33, 0xB0, 0x4D, 0xE0, 0xD3, 0x6B, 0xFC, 0x9F, 0x06, 0x14, 0xDC, 0xB7, 0xDE, 0x8D, 0x31, 0xF0, 0xE0, 0x1A, 0xB1, 0x50, 0xDE, 0x23, 0xC9, 0xD5, 0x2F, 0x80, 0x14, 0xE8, 0x85, 0x7E, 0x78, 0x6D, ++ 0xCA, 0xED, 0x8E, 0xA4, 0x1F, 0x78, 0x09, 0x97, 0x39, 0x4F, 0x87, 0x7F, 0x52, 0x8B, 0x59, 0x9F, 0xDB, 0x85, 0x7E, 0x8F, 0xCF, 0xCA, 0x77, 0x4F, 0x35, 0x08, 0x46, 0xD0, 0x5F, 0x97, 0x3C, 0x2A, ++ 0x1C, 0xF5, 0xFF, 0x0C, 0x58, 0xE3, 0x75, 0x90, 0xA6, 0x2F, 0x5B, 0x2A, 0x3B, 0x21, 0x26, 0x20, 0x63, 0x68, 0x2D, 0xBB, 0x0A, 0x20, 0x50, 0xBA, 0xD8, 0x44, 0x99, 0xEF, 0x5C, 0xAD, 0xCF, 0xFE, ++ 0x41, 0xB0, 0xE7, 0x1B, 0x3F, 0x4F, 0xC3, 0x5E, 0x1E, 0x37, 0x60, 0x48, 0xE3, 0xA3, 0x4B, 0xF6, 0xBC, 0xF4, 0xF6, 0x1D, 0x2D, 0x3C, 0x35, 0x39, 0x54, 0x24, 0x94, 0xFB, 0x04, 0x57, 0xBB, 0x76, ++ 0x2F, 0x03, 0x99, 0x63, 0x21, 0x35, 0x0B, 0x64, 0x87, 0x4B, 0xBD, 0xCE, 0x72, 0x04, 0xAB, 0x86, 0x06, 0x24, 0x58, 0x34, 0xE5, 0x99, 0x35, 0x2C, 0x36, 0x8D, 0x36, 0xC2, 0xC4, 0x63, 0x49, 0x76, ++ 0x11, 0x9B, 0xF9, 0x72, 0xC3, 0xA4, 0xAB, 0x28, 0x76, 0x67, 0x7B, 0xEE, 0x0E, 0xBC, 0xBE, 0x30, 0xF1, 0x31, 0x66, 0x2D, 0x68, 0x64, 0x7E, 0xD5, 0xD0, 0xA8, 0xF6, 0xC8, 0x9A, 0xFB, 0xBC, 0x8B, ++ 0xFA, 0xF1, 0xD1, 0x1B, 0x20, 0x6C, 0x33, 0x17, 0xAE, 0xD7, 0x88, 0x21, 0x35, 0x95, 0x72, 0x70, 0xEF, 0x87, 0x85, 0x2A, 0x32, 0x0A, 0x9B, 0x18, 0x4A, 0x60, 0x8C, 0xA6, 0xBC, 0x82, 0x58, 0x38, ++ 0x2E, 0x0B, 0x19, 0xBE, 0xAA, 0x38, 0x41, 0x62, 0x3F, 0xA3, 0x07, 0x93, 0xD8, 0xF4, 0x99, 0xB8, 0x37, 0xC4, 0x40, 0xCC, 0x11, 0x3C, 0x70, 0x35, 0x0C, 0x01, 0xC3, 0xE1, 0xAC, 0xE0, 0x53, 0xDB, ++ 0x30, 0xED, 0xFF, 0x7B, 0xA5, 0x26, 0x9D, 0x41, 0x8E, 0x8E, 0x48, 0xB9, 0x2A, 0xAC, 0x17, 0x09, 0x3D, 0x58, 0xE3, 0xAD, 0xDC, 0x78, 0xDA, 0x7B, 0xCF, 0xD9, 0xA8, 0xA8, 0xCA, 0xAB, 0x3D, 0xA2, ++ 0x5A, 0x46, 0x34, 0xC1, 0xBC, 0x95, 0xC6, 0x4E, 0xDF, 0x2F, 0x6F, 0xE7, 0xED, 0xFB, 0xAA, 0x1B, 0xAD, 0x2D, 0x23, 0x12, 0x98, 0x0B, 0xD6, 0x80, 0xB0, 0x68, 0x92, 0xB5, 0x55, 0xF3, 0x16, 0x74, ++ 0xA9, 0x52, 0xA1, 0x25, 0xE8, 0x87, 0x10, 0x4D, 0x1C, 0xF8, 0x3E, 0x97, 0xA0, 0x59, 0x0F, 0x47, 0x2B, 0xB3, 0xD1, 0xA2, 0xB9, 0x08, 0x32, 0x3B, 0x0E, 0xA9, 0x9F, 0x8F, 0x91, 0xFA, 0x30, 0xB9, ++ 0x09, 0x42, 0xD7, 0xB6, 0x90, 0xAF, 0xC6, 0x1A, 0x02, 0x77, 0x99, 0xD7, 0x70, 0x2D, 0x56, 0xB7, 0x68, 0x6A, 0x8F, 0x9B, 0xB0, 0x4E, 0xDE, 0xE3, 0xCF, 0xA3, 0x92, 0x7E, 0xF5, 0x16, 0xA7, 0xF5, ++ 0x20, 0x88, 0x59, 0x07, 0x31, 0x9B, 0x95, 0x84, 0xC8, 0x24, 0xFE, 0x97, 0xDC, 0xAF, 0xBA, 0xB5, 0xA3, 0xA7, 0x26, 0x71, 0xBA, 0x0C, 0x21, 0x88, 0x37, 0x91, 0x3B, 0x16, 0x1B, 0x42, 0x70, 0x6B, ++ 0x9B, 0x85, 0xCB, 0x42, 0x3B, 0x9D, 0xE5, 0xF2, 0x3C, 0x23, 0x80, 0x0B, 0x9C, 0x07, 0x11, 0x13, 0x2C, 0x40, 0x34, 0x75, 0x8D, 0x2E, 0xC8, 0x6D, 0xF5, 0x78, 0xE1, 0xB9, 0xF1, 0x78, 0x5F, 0x5C, ++ 0x79, 0x5C, 0x8B, 0xC2, 0x0F, 0xBC, 0xFF, 0xD9, 0xE4, 0xCA, 0x2E, 0x93, 0xC7, 0xCA, 0xE4, 0xDA, 0x91, 0xB9, 0xC0, 0x0E, 0x77, 0x8E, 0x3C, 0x42, 0x86, 0x53, 0x0C, 0x6C, 0x80, 0xC1, 0x02, 0x7C, ++ 0x8F, 0xA0, 0xDD, 0x78, 0xCF, 0x0A, 0x55, 0x4A, 0xD2, 0x7B, 0x19, 0xAF, 0x2B, 0x0C, 0x28, 0xE0, 0x50, 0xD0, 0x35, 0x5F, 0xE6, 0x1D, 0xE7, 0xF7, 0x02, 0xDC, 0x07, 0x3C, 0x90, 0x47, 0xC9, 0x7D, ++ 0x87, 0xC8, 0x15, 0x78, 0xD1, 0x98, 0xD9, 0x7B, 0x52, 0x3E, 0xBB, 0x15, 0x06, 0xD9, 0xA7, 0x52, 0x92, 0x46, 0x5E, 0x44, 0x0B, 0x20, 0x6F, 0xF9, 0x53, 0xE4, 0xA6, 0x8C, 0xBC, 0x57, 0x3E, 0x7C, ++ 0x36, 0x45, 0xE2, 0xF8, 0xC0, 0x8F, 0xDA, 0x3B, 0xD5, 0x8E, 0xD1, 0xC9, 0x0A, 0x4F, 0x63, 0xED, 0xFD, 0xF2, 0x0C, 0x8B, 0x25, 0x7E, 0xC9, 0x16, 0xCD, 0x6A, 0xEA, 0xB8, 0xEB, 0xA4, 0x77, 0xC1, ++ 0xF4, 0xC0, 0x9B, 0x8F, 0x69, 0xD6, 0xFE, 0xD9, 0x33, 0x19, 0xED, 0xA8, 0xEC, 0xF8, 0xC0, 0xEF, 0xE8, 0x4E, 0x5E, 0xC2, 0x71, 0x96, 0x66, 0x8E, 0x00, 0x71, 0xA0, 0x39, 0xDF, 0x3D, 0xBB, 0x87, ++ 0x2B, 0x88, 0xAC, 0xC8, 0x53, 0xA0, 0x82, 0x20, 0x6B, 0x95, 0xE0, 0x64, 0x34, 0xFC, 0xBF, 0x3F, 0xA3, 0x09, 0xDA, 0xE2, 0x5A, 0x25, 0x1D, 0xDB, 0x58, 0x40, 0x71, 0x81, 0x39, 0xCA, 0xDF, 0x13, ++ 0xF3, 0x92, 0xE0, 0xCE, 0x7B, 0x9C, 0x27, 0x17, 0x22, 0x26, 0xEE, 0x84, 0x71, 0xD0, 0x13, 0xB1, 0xFF, 0x45, 0x42, 0x97, 0xB7, 0x81, 0xAB, 0xAC, 0xEA, 0x43, 0x2D, 0x41, 0xFC, 0xF6, 0x9D, 0xB8, ++ 0x85, 0x6E, 0x37, 0x7B, 0x8B, 0x4E, 0x24, 0x00, 0x86, 0xD2, 0xFB, 0x73, 0x11, 0x88, 0x51, 0x45, 0x06, 0x9A, 0x72, 0x09, 0x86, 0x9D, 0xB0, 0x61, 0xA2, 0x45, 0xB9, 0x62, 0xE1, 0x86, 0x81, 0x0A, ++ 0x19, 0x23, 0x74, 0x70, 0x18, 0x85, 0x79, 0x31, 0x24, 0x69, 0x84, 0x7C, 0x53, 0x85, 0x66, 0x6E, 0xA0, 0xF3, 0xB5, 0x94, 0x22, 0xC0, 0xF6, 0x9B, 0x09, 0xB5, 0xB8, 0xBD, 0x08, 0x07, 0xCE, 0x99, ++ 0x92, 0x14, 0x2A, 0x34, 0xEE, 0x32, 0x7E, 0x8F, 0xDA, 0x2C, 0xBA, 0x0F, 0x40, 0x10, 0xF6, 0xD5, 0x24, 0xFF, 0x0C, 0x5B, 0xE4, 0x12, 0x9E, 0x98, 0xB2, 0x01, 0xAB, 0x91, 0x8A, 0x52, 0x76, 0xA7, ++ 0x35, 0x6B, 0x15, 0x2E, 0x60, 0x70, 0xCF, 0xDC, 0x27, 0x0C, 0x5D, 0x8D, 0x70, 0x8E, 0xE8, 0xCB, 0xB7, 0x01, 0x95, 0xCF, 0xA6, 0xA2, 0x9E, 0x8B, 0x07, 0x2F, 0x25, 0xF0, 0x3F, 0x25, 0x36, 0x2D, ++ 0x59, 0x0F, 0x5B, 0xB2, 0xB6, 0x7B, 0xD6, 0x3F, 0x3F, 0xA5, 0x2F, 0x2C, 0x61, 0x1D, 0x72, 0x57, 0x25, 0xF0, 0x42, 0xD5, 0x82, 0x4C, 0x77, 0x3C, 0xF8, 0xE6, 0x1F, 0xED, 0xBA, 0x92, 0xC5, 0x80, ++ 0xDC, 0xA7, 0x33, 0x48, 0xEC, 0x67, 0x60, 0x9D, 0x30, 0x1E, 0x74, 0x16, 0x44, 0xAA, 0x3A, 0x0B, 0x24, 0x41, 0xC5, 0x88, 0xED, 0x7F, 0x17, 0x1B, 0xC7, 0xB9, 0x54, 0x92, 0xEF, 0x14, 0xAE, 0xB5, ++ 0x44, 0x78, 0x6F, 0x23, 0x27, 0x35, 0x08, 0x56, 0x1C, 0xCB, 0x81, 0x03, 0xE2, 0xFA, 0x97, 0xD3, 0x5F, 0x29, 0xD7, 0xDE, 0x89, 0x08, 0x97, 0xF1, 0xEC, 0x97, 0x41, 0x81, 0xC7, 0x9B, 0xE3, 0x20, ++ 0x01, 0xFC, 0x0E, 0x91, 0xA0, 0xFB, 0xD7, 0xB0, 0xEF, 0xB8, 0xCC, 0x2D, 0xB6, 0x19, 0xD3, 0x64, 0x85, 0xCC, 0xCF, 0xD3, 0xB5, 0xDB, 0x94, 0xC0, 0x82, 0x0A, 0x53, 0x6C, 0xC8, 0xA2, 0xD7, 0x8F, ++ 0x5A, 0x9B, 0x95, 0xCE, 0xF4, 0xD3, 0x7B, 0xC8, 0x74, 0x14, 0x22, 0xBB, 0x61, 0xC3, 0xD0, 0xFE, 0x5B, 0xA4, 0x9D, 0x75, 0x42, 0x67, 0xA0, 0x10, 0x31, 0xF4, 0xDF, 0x52, 0xDE, 0xFF, 0xB5, 0xC8, ++ 0x98, 0xA0, 0x96, 0x47, 0xEF, 0x3F, 0x02, 0x4F, 0xCD, 0xD9, 0x0E, 0xFA, 0x94, 0x38, 0xC9, 0xDE, 0x93, 0xAA, 0xD9, 0x8E, 0xFF, 0x29, 0x49, 0xEE, 0xC8, 0xBC, 0x3A, 0x0F, 0x3E, 0x60, 0xE4, 0xB5, ++ 0x6B, 0xED, 0x02, 0x63, 0xE0, 0x4A, 0x5D, 0x3C, 0x68, 0x68, 0x76, 0x49, 0xA1, 0x00, 0x58, 0x34, 0x88, 0xF9, 0x83, 0xCD, 0x7F, 0x43, 0x41, 0x30, 0x90, 0xFC, 0x88, 0x0C, 0x11, 0xE8, 0x5E, 0xDC, ++ 0x24, 0x44, 0x6C, 0x35, 0x70, 0xAA, 0xB5, 0xDA, 0xEE, 0x3B, 0x7E, 0xD4, 0xD3, 0x53, 0x98, 0x8D, 0x02, 0xC7, 0x3D, 0x77, 0x7D, 0xCE, 0x26, 0xD1, 0x2A, 0x39, 0x5E, 0xB1, 0xB9, 0x5F, 0xFC, 0x7A, ++ 0xB5, 0x83, 0x43, 0xAE, 0xCD, 0x2D, 0xCE, 0xCA, 0xB0, 0x0A, 0x97, 0xF5, 0x78, 0xB9, 0x32, 0x7D, 0x0A, 0x9D, 0x1F, 0xDB, 0x65, 0x10, 0xF8, 0x60, 0x68, 0x5C, 0xC3, 0x03, 0x6F, 0xD8, 0x32, 0x6F, ++ 0x59, 0xA4, 0xE9, 0xA0, 0xDD, 0x7B, 0x02, 0xCE, 0x1D, 0x36, 0xBF, 0x46, 0xF4, 0xFA, 0x41, 0x15, 0x17, 0x2C, 0xBF, 0xDA, 0xDA, 0x6D, 0x59, 0x35, 0x26, 0xB7, 0x47, 0xE2, 0x36, 0x7B, 0x10, 0xA8, ++ 0x83, 0x92, 0x68, 0x7D, 0xE2, 0x23, 0xBF, 0x1D, 0x5A, 0xF1, 0xD7, 0x3D, 0x8A, 0x24, 0x84, 0x5C, 0x87, 0xFF, 0x76, 0x67, 0x5D, 0x73, 0xD5, 0x09, 0xF2, 0x83, 0xDA, 0x66, 0xB9, 0x43, 0xAD, 0x45, ++ 0x6A, 0xFE, 0x70, 0x92, 0x51, 0xB1, 0x7F, 0x9E, 0x43, 0x58, 0x7E, 0x52, 0x0C, 0xD6, 0xA1, 0xE9, 0xA2, 0x4B, 0x55, 0x8F, 0x4F, 0x6E, 0x46, 0x57, 0xF4, 0xC6, 0x35, 0x1D, 0xEA, 0x9B, 0xB9, 0x47, ++ 0xB3, 0x2D, 0xC4, 0x6E, 0x35, 0x20, 0xFC, 0xE3, 0xBD, 0x21, 0x97, 0x3C, 0x3B, 0x8B, 0x95, 0x15, 0x04, 0x58, 0xCB, 0x5E, 0x42, 0x48, 0xE2, 0x6D, 0x6E, 0x52, 0xE7, 0x6B, 0x8E, 0x6B, 0xF2, 0xBC, ++ 0xE3, 0xC8, 0xAC, 0x1C, 0x6C, 0xFD, 0x7F, 0x43, 0x51, 0x3A, 0x91, 0x8F, 0xEC, 0x31, 0xCE, 0xC0, 0xD4, 0x29, 0x66, 0x05, 0xAB, 0x21, 0xBC, 0xE4, 0x1E, 0x32, 0x9F, 0x47, 0xFB, 0x1B, 0xB6, 0x74, ++ 0x48, 0xD9, 0x1F, 0x41, 0x9B, 0x18, 0x26, 0xC8, 0xB7, 0x46, 0x65, 0x5F, 0xEB, 0x8F, 0x4A, 0x0D, 0x95, 0xE6, 0x99, 0x0D, 0xB8, 0xA4, 0xBE, 0x33, 0xC1, 0x36, 0x2F, 0xCC, 0x17, 0x1B, 0x08, 0x43, ++ 0x21, 0xE2, 0x2A, 0xCD, 0x06, 0x13, 0x1D, 0x2C, 0x34, 0xA0, 0x43, 0x48, 0xE4, 0x30, 0xDC, 0x78, 0x52, 0x78, 0x58, 0xBB, 0x38, 0x6B, 0xA2, 0xF4, 0xEC, 0xC0, 0xF3, 0xA0, 0x62, 0xCB, 0xDF, 0xF2, ++ 0xA4, 0x8F, 0x23, 0x71, 0x60, 0x58, 0x59, 0xEE, 0x81, 0xD6, 0xF8, 0xEA, 0x88, 0x6E, 0x00, 0x60, 0x66, 0x19, 0x34, 0x32, 0xAF, 0xCD, 0x97, 0x08, 0xE8, 0x38, 0x2B, 0x1C, 0xC2, 0xE8, 0x3C, 0x79, ++ 0x2D, 0xF4, 0xB4, 0xB9, 0xE0, 0xE0, 0x5D, 0x42, 0x34, 0x79, 0xE2, 0x54, 0xCC, 0xA4, 0xDF, 0x99, 0x90, 0x80, 0x26, 0x1D, 0x45, 0x0C, 0x3E, 0xD7, 0x33, 0x0E, 0x6F, 0xFF, 0xFF, 0x5E, 0x6D, 0x6C, ++ 0x89, 0x37, 0x20, 0xD3, 0x1B, 0x4E, 0x83, 0xB5, 0x14, 0x80, 0x5B, 0xFF, 0x76, 0x58, 0x6B, 0x63, 0x05, 0xD7, 0xBE, 0x0A, 0x96, 0xD7, 0x4F, 0x2B, 0x86, 0xC9, 0x74, 0xED, 0x21, 0x0F, 0x5C, 0xF7, ++ 0xFF, 0xAD, 0xE8, 0x54, 0x53, 0xA9, 0xFA, 0x1B, 0xF3, 0x40, 0xBD, 0x0B, 0xD8, 0xA5, 0xAC, 0x15, 0x2B, 0xE5, 0x59, 0x8D, 0x77, 0xB0, 0x08, 0x15, 0x22, 0x66, 0xA0, 0x1E, 0xFE, 0x20, 0x61, 0x5D, ++ 0xC2, 0x51, 0x48, 0x4D, 0xF4, 0xCF, 0xF5, 0xF5, 0x71, 0xA7, 0x32, 0xDA, 0x1A, 0x9E, 0xD8, 0x9F, 0x6C, 0x44, 0x61, 0x7F, 0x32, 0x72, 0xA0, 0xF4, 0xE7, 0x27, 0x58, 0x18, 0x6B, 0xD4, 0xDC, 0xA1, ++ 0xB4, 0xA4, 0x5D, 0xBA, 0x23, 0x2A, 0xE7, 0xF2, 0x21, 0x48, 0xA4, 0x95, 0xBC, 0xEA, 0x2E, 0xC3, 0x76, 0x1D, 0x1E, 0x06, 0x10, 0x3B, 0xCC, 0xE3, 0x6F, 0xAC, 0x74, 0xBD, 0x2F, 0x8E, 0x42, 0xAF, ++ 0xBB, 0xE8, 0x0B, 0x25, 0xDC, 0xB8, 0x09, 0xD4, 0x4E, 0xF9, 0x5D, 0xBF, 0x7F, 0x1A, 0x96, 0x5E, 0xDA, 0xF9, 0x89, 0xAF, 0xA3, 0xBB, 0xF4, 0x9C, 0x2F, 0xEA, 0x9E, 0xE2, 0x09, 0xE8, 0xF1, 0x17, ++ 0x8F, 0x5D, 0x01, 0x8B, 0xF9, 0xC0, 0x15, 0xC4, 0x51, 0x12, 0xEC, 0x17, 0xAE, 0x38, 0x0B, 0x09, 0xB2, 0x31, 0xE0, 0x15, 0xFF, 0xE2, 0xC3, 0x50, 0x48, 0x1A, 0xA8, 0xE1, 0x1B, 0x2B, 0xB5, 0x9A, ++ 0x25, 0x1B, 0x0D, 0xEA, 0x0D, 0x30, 0x79, 0xF0, 0x40, 0xF3, 0x3B, 0x6A, 0x6C, 0xCE, 0x48, 0xB6, 0xAB, 0x24, 0x00, 0x8A, 0xAB, 0xE1, 0x81, 0xE3, 0x1B, 0x55, 0x3A, 0xE4, 0x95, 0xB0, 0xFD, 0x76, ++ 0xA1, 0x3E, 0x07, 0x62, 0x0A, 0x72, 0x4B, 0x25, 0x6E, 0x34, 0x4F, 0x0B, 0x54, 0x1A, 0x57, 0x46, 0x0F, 0x6A, 0x75, 0x27, 0xC8, 0x26, 0xA4, 0x63, 0x67, 0x53, 0xB7, 0xDE, 0xD6, 0x28, 0x48, 0xDB, ++ 0x83, 0xDC, 0xE4, 0xBD, 0x08, 0x54, 0xD9, 0x98, 0x1D, 0x38, 0xA9, 0x63, 0xC6, 0xC7, 0x87, 0xF3, 0xE1, 0x82, 0x6B, 0xF6, 0xDA, 0x44, 0xD9, 0x5A, 0x31, 0x55, 0xB0, 0x3D, 0xA5, 0xC9, 0xA4, 0x27, ++ 0xCF, 0x6A, 0xD3, 0x6B, 0x6D, 0x67, 0x6F, 0x0D, 0xF8, 0x21, 0x10, 0x61, 0xFE, 0x33, 0x23, 0xF3, 0x20, 0x37, 0x74, 0x78, 0x70, 0x04, 0x36, 0xD9, 0xFE, 0xEC, 0x76, 0xF8, 0x10, 0xFE, 0x20, 0xBC, ++ 0xA5, 0xD0, 0xBA, 0xBB, 0xD0, 0x2E, 0xD8, 0xA3, 0x8B, 0xA4, 0x28, 0x04, 0x49, 0x20, 0xFE, 0x0C, 0x68, 0xDC, 0x6A, 0xDE, 0x9F, 0xA6, 0xE3, 0x97, 0x68, 0x0C, 0x03, 0xED, 0x81, 0x5F, 0x68, 0x48, ++ 0x59, 0xE6, 0x7C, 0xFA, 0x06, 0x37, 0xBE, 0x55, 0x56, 0xF9, 0x5F, 0x27, 0x0D, 0x5E, 0xC9, 0x1C, 0x64, 0x42, 0x94, 0xCB, 0xA9, 0x65, 0xDF, 0xD9, 0x61, 0x71, 0x3E, 0xCE, 0x53, 0x32, 0x8D, 0x99, ++ 0x17, 0xB1, 0xCE, 0xF8, 0x9C, 0xF1, 0x7B, 0x9F, 0x5B, 0x65, 0x57, 0x49, 0xD8, 0x6C, 0x10, 0x95, 0x63, 0x7B, 0xAD, 0x53, 0x2A, 0xFC, 0x5B, 0x39, 0xF3, 0xDA, 0xA0, 0x1F, 0x74, 0x0C, 0xBF, 0x49, ++ 0xF7, 0x57, 0x0F, 0x4B, 0xDC, 0xF1, 0x92, 0x41, 0xB6, 0x14, 0x9C, 0x8C, 0xF2, 0x49, 0x2B, 0x02, 0x57, 0xCA, 0x67, 0xC3, 0x95, 0xEC, 0xB1, 0x9C, 0x04, 0x95, 0x9A, 0x85, 0x93, 0x79, 0xB6, 0x54, ++ 0xDB, 0x7B, 0x67, 0xCC, 0xB7, 0xAE, 0x99, 0xDA, 0x88, 0xC1, 0x84, 0x1F, 0xD6, 0xEE, 0x6E, 0xA5, 0x21, 0xA6, 0x06, 0x9E, 0x64, 0x26, 0xD3, 0x82, 0xF8, 0x8C, 0xD2, 0x57, 0x17, 0xD8, 0x04, 0x51, ++ 0xD1, 0xA8, 0xF1, 0x09, 0x7D, 0xA5, 0xD7, 0x15, 0x28, 0xF4, 0x48, 0xF3, 0x72, 0xA2, 0x25, 0x53, 0x60, 0x62, 0x67, 0x85, 0x8E, 0x1C, 0x9D, 0xEF, 0x6F, 0x45, 0x66, 0x98, 0x5C, 0xDE, 0xC3, 0x17, ++ 0xCD, 0xCE, 0x2D, 0x59, 0x56, 0x08, 0x66, 0x86, 0xFA, 0x9E, 0xDC, 0x49, 0xDB, 0xEB, 0xF2, 0x60, 0xEB, 0x23, 0xB8, 0x57, 0x3B, 0x98, 0x07, 0x6E, 0x4B, 0x11, 0xA7, 0x13, 0xE7, 0x24, 0x78, 0xD2, ++ 0x0D, 0x10, 0xE9, 0xE9, 0x20, 0xB1, 0xFC, 0xC5, 0x62, 0xE0, 0x8F, 0x9A, 0xB7, 0xA6, 0xDB, 0x96, 0x00, 0x58, 0xD7, 0x99, 0x30, 0x31, 0x53, 0xB1, 0x3D, 0x2F, 0xC2, 0x54, 0x47, 0x07, 0x46, 0x92, ++ 0xD6, 0xD4, 0x6F, 0x8B, 0x5C, 0x7C, 0xE9, 0xF6, 0x17, 0xDC, 0x28, 0x13, 0x58, 0xF9, 0xF1, 0x0E, 0x26, 0x87, 0xDA, 0x06, 0x54, 0x1B, 0x50, 0xD1, 0x05, 0x06, 0xBA, 0x3A, 0xF2, 0x98, 0x75, 0x5A, ++ 0xA1, 0xB4, 0x7D, 0x8D, 0x56, 0x13, 0x5E, 0xCA, 0xFE, 0xD1, 0xD1, 0xCD, 0xE7, 0xD5, 0xBF, 0xD0, 0x9E, 0x37, 0xB4, 0x64, 0x9B, 0xFE, 0x06, 0x55, 0x7B, 0x4E, 0x86, 0xF9, 0x04, 0xD3, 0xA8, 0xCB, ++ 0x7F, 0x28, 0x21, 0x71, 0x57, 0xA8, 0x3C, 0x5E, 0x04, 0x2D, 0x19, 0xC1, 0x2D, 0x8E, 0xD0, 0x9D, 0x68, 0xB2, 0xAB, 0x73, 0x07, 0xBB, 0x6C, 0xAF, 0x63, 0x9B, 0x3A, 0xEE, 0xB5, 0x13, 0xD3, 0x3C, ++ 0xEE, 0x09, 0x8D, 0x6D, 0xD0, 0x36, 0x0C, 0x83, 0x2C, 0x3B, 0x7B, 0x18, 0x3D, 0xB5, 0xE7, 0xFD, 0xB4, 0x55, 0x8D, 0x93, 0x3E, 0x56, 0x10, 0xBC, 0x2A, 0x08, 0x2E, 0x16, 0x9E, 0x04, 0xFE, 0x34, ++ 0x1B, 0x07, 0x84, 0xAE, 0xB5, 0x29, 0x10, 0xE7, 0xA2, 0x01, 0x82, 0x0F, 0x6B, 0x3C, 0x57, 0x2B, 0x37, 0x74, 0xF2, 0x9A, 0x7B, 0xF1, 0x61, 0xAC, 0xBA, 0xBE, 0x5F, 0x0B, 0x14, 0xB3, 0xC1, 0xDE, ++ 0x8D, 0x8F, 0xBB, 0x20, 0x5E, 0xE7, 0x40, 0x0A, 0x06, 0x81, 0xF7, 0x98, 0x52, 0xE6, 0xBF, 0x1B, 0x5A, 0x50, 0x33, 0xD9, 0x04, 0x01, 0x47, 0xE0, 0x64, 0xDC, 0x10, 0xEA, 0xC0, 0x42, 0x11, 0x0C, ++ 0x43, 0x09, 0x2D, 0xD4, 0x40, 0x2B, 0x64, 0x58, 0x4A, 0x81, 0xD6, 0xD2, 0x11, 0xD4, 0x00, 0x8E, 0xE1, 0xF1, 0x9E, 0xB0, 0x0E, 0x84, 0xDC, 0x3A, 0x3D, 0xBE, 0x22, 0x1A, 0xE8, 0x6E, 0xAC, 0xAE, ++ 0xA6, 0x83, 0x24, 0xD2, 0xF1, 0xA5, 0x73, 0x0F, 0x03, 0x32, 0xEA, 0xD6, 0x4F, 0x02, 0xB9, 0xB5, 0x97, 0x09, 0xF1, 0x51, 0x03, 0xE2, 0x6D, 0x89, 0x71, 0xB7, 0xB6, 0xDB, 0xCF, 0xC8, 0x75, 0x04, ++ 0xFE, 0xB0, 0x0E, 0xD4, 0x1A, 0x02, 0x78, 0x9E, 0xB9, 0x79, 0xE2, 0xCB, 0xF7, 0x47, 0x26, 0x89, 0x64, 0xAB, 0xC8, 0x41, 0x2A, 0x53, 0x93, 0x70, 0xBF, 0x52, 0x0D, 0x9A, 0xAE, 0xF9, 0x29, 0xE8, ++ 0xBA, 0xFD, 0x8E, 0x18, 0x5B, 0xE2, 0xAA, 0xB0, 0x40, 0xA7, 0x7A, 0x7B, 0xF6, 0x80, 0x7F, 0x0A, 0x8A, 0x41, 0xAC, 0x61, 0x89, 0xBF, 0x00, 0xAB, 0xC7, 0x7C, 0x62, 0x05, 0x17, 0xBE, 0xAF, 0xBF, ++ 0x0A, 0x63, 0x05, 0x8D, 0x8D, 0x47, 0x8F, 0xCB, 0xC4, 0x2C, 0x6A, 0x77, 0x83, 0xC7, 0x69, 0x51, 0x6F, 0x24, 0x06, 0xD4, 0x4C, 0x23, 0x52, 0x99, 0xBF, 0x2E, 0x4E, 0x1C, 0xFF, 0xB7, 0xBE, 0xA0, ++ 0x04, 0x0C, 0x94, 0x58, 0xA1, 0xC7, 0x74, 0x18, 0x63, 0x66, 0xC1, 0x17, 0x4B, 0x04, 0xB5, 0x43, 0xF7, 0x2B, 0xD5, 0x4A, 0x30, 0xFF, 0x99, 0x47, 0xE8, 0x2E, 0x90, 0x47, 0x4C, 0xDD, 0xC6, 0xF0, ++ 0x69, 0xB4, 0x1F, 0xC7, 0x68, 0xB8, 0x0A, 0x02, 0xED, 0x29, 0xC8, 0x30, 0xAD, 0x27, 0xCD, 0xFC, 0x68, 0x6C, 0x64, 0x6A, 0xEA, 0x27, 0x9B, 0x22, 0xE6, 0x09, 0x2E, 0xD3, 0xA1, 0x72, 0x72, 0x19, ++ 0xB2, 0x81, 0xE9, 0x72, 0xF5, 0x0C, 0x88, 0x66, 0xF4, 0x4E, 0x19, 0x8B, 0x0F, 0x24, 0xFF, 0xA6, 0xA7, 0x39, 0x5D, 0x1E, 0x41, 0x05, 0x84, 0x2A, 0x60, 0xE0, 0x17, 0x35, 0x50, 0x48, 0x1C, 0x64, ++ 0x12, 0xF6, 0xB5, 0xAE, 0x7F, 0xF6, 0x54, 0xFD, 0x43, 0xC0, 0xD6, 0x7E, 0x8A, 0x65, 0xB6, 0x6D, 0x6D, 0x52, 0x47, 0xD6, 0xB1, 0xD5, 0xC6, 0x60, 0xCB, 0xAC, 0xF2, 0xCB, 0xDF, 0x0D, 0x81, 0xA1, ++ 0x68, 0xED, 0x6C, 0x82, 0x7D, 0xDC, 0xDB, 0xA0, 0xAF, 0x5B, 0xF2, 0x50, 0x42, 0x72, 0x85, 0xF3, 0x0F, 0x5C, 0x6D, 0x20, 0xED, 0x03, 0x47, 0x20, 0x33, 0x76, 0x4F, 0x2B, 0x19, 0x88, 0x4F, 0x66, ++ 0x2D, 0x45, 0x45, 0xBA, 0x21, 0x89, 0xD2, 0xA2, 0xA3, 0xC2, 0x9F, 0x4E, 0x89, 0xD5, 0xF5, 0x5E, 0xC6, 0xDC, 0x8E, 0x49, 0x7B, 0xA6, 0x75, 0xFE, 0x22, 0x42, 0xDA, 0x34, 0x80, 0x8C, 0x8D, 0xA5, ++ 0xD0, 0xE5, 0x68, 0xE7, 0x86, 0x91, 0x96, 0xCB, 0x45, 0x9D, 0x6B, 0x65, 0xA2, 0x77, 0x82, 0x0F, 0x7D, 0xD7, 0x8A, 0x31, 0xA5, 0x3B, 0x2F, 0xE7, 0x02, 0x1C, 0x9F, 0x51, 0xBB, 0x63, 0x41, 0xCB, ++ 0xE3, 0xCF, 0xA5, 0xF6, 0x89, 0xB8, 0xE5, 0x4F, 0x00, 0x28, 0x51, 0x71, 0x4B, 0xAA, 0x8D, 0x2D, 0x8E, 0xF9, 0x13, 0xDB, 0x9A, 0x14, 0x4B, 0x6F, 0xF6, 0x6A, 0xEC, 0x4C, 0xEF, 0x06, 0xE9, 0xD2, ++ 0x73, 0x49, 0x60, 0xD7, 0xFA, 0xEC, 0x0E, 0x64, 0x2D, 0xC5, 0x69, 0xCA, 0xFA, 0xB3, 0xA9, 0x32, 0x08, 0x81, 0xAE, 0xAF, 0xF8, 0x02, 0x72, 0x36, 0x18, 0xB5, 0x77, 0x69, 0x1C, 0x93, 0x72, 0x02, ++ 0x1D, 0x40, 0x92, 0xE0, 0xBD, 0x91, 0x3D, 0x38, 0xD7, 0x69, 0x55, 0xAA, 0x79, 0x2A, 0x85, 0x20, 0x2B, 0x5A, 0x90, 0x62, 0xD9, 0x7F, 0xE6, 0x57, 0x45, 0xD8, 0xC5, 0x50, 0xCF, 0xD0, 0xD4, 0x18, ++ }, ++ .t1_len = 2560, ++ .t1 = { ++ 0x2C, 0xAF, 0xB7, 0x2F, 0x71, 0x55, 0x72, 0xBF, 0x43, 0x28, 0x38, 0xE0, 0x80, 0xCA, 0x4A, 0x19, 0x8A, 0x28, 0x4B, 0xBD, 0xF0, 0xC4, 0x54, 0xF0, 0x94, 0x5E, 0x95, 0x3D, 0xD0, 0x71, 0x99, 0xD2, ++ 0xC6, 0x21, 0x0E, 0x59, 0xE6, 0xED, 0x17, 0x7D, 0xA8, 0xF0, 0xBB, 0x19, 0xEF, 0x02, 0x9E, 0x6F, 0xDB, 0x3B, 0xAC, 0x91, 0x00, 0x13, 0x11, 0x60, 0x51, 0x8B, 0xB2, 0xA8, 0x85, 0x56, 0xA8, 0xF4, ++ 0x8A, 0xA1, 0x97, 0x23, 0x6B, 0x4F, 0x00, 0x46, 0x78, 0x6C, 0xF0, 0xD2, 0x37, 0x4D, 0xA1, 0x9A, 0x5D, 0xF8, 0x0B, 0x19, 0xB1, 0x3D, 0xB3, 0x33, 0xB0, 0xD3, 0x0D, 0x7B, 0x1C, 0xE8, 0xD8, 0x1F, ++ 0x71, 0x66, 0xB0, 0x5E, 0x0E, 0x45, 0x67, 0x02, 0x92, 0x34, 0x83, 0x41, 0xCE, 0xF0, 0xCF, 0xEC, 0xB2, 0xC6, 0x1F, 0xAE, 0x5B, 0x5E, 0x8C, 0x05, 0x3E, 0xB2, 0x94, 0x71, 0xE1, 0x79, 0xA2, 0x1F, ++ 0x0D, 0xDF, 0x15, 0xB7, 0xA9, 0xF2, 0x8C, 0xF3, 0x58, 0x0F, 0x7D, 0x0E, 0xBA, 0x06, 0xE7, 0x22, 0x67, 0xEB, 0xBA, 0x35, 0xAB, 0xDC, 0xD3, 0x12, 0xBD, 0x3B, 0xBE, 0x6A, 0xC8, 0xEF, 0x24, 0x64, ++ 0xD0, 0xB4, 0xBC, 0xA5, 0x44, 0x16, 0x7A, 0xF7, 0x53, 0x19, 0x5B, 0x40, 0x57, 0x00, 0x27, 0x3A, 0xDB, 0xAF, 0x24, 0x5F, 0x73, 0x3B, 0x1F, 0xD7, 0x74, 0xBC, 0x5D, 0xE7, 0x7C, 0xE2, 0xD8, 0x27, ++ 0x2B, 0xCF, 0x6F, 0x99, 0xCC, 0x2C, 0xB2, 0x3E, 0x08, 0x27, 0xA0, 0x2F, 0x3F, 0x0F, 0xCA, 0x3B, 0xEC, 0x62, 0x22, 0xAE, 0xFC, 0x76, 0x22, 0x52, 0x5D, 0x86, 0xF7, 0x59, 0xF5, 0x19, 0xE4, 0xCE, ++ 0xD5, 0x5B, 0x93, 0xD5, 0x6E, 0xA1, 0x09, 0x18, 0x2F, 0x0A, 0x75, 0x65, 0xD9, 0xF8, 0x4D, 0x74, 0x6A, 0x9A, 0x32, 0xB4, 0x42, 0x7B, 0xF6, 0x92, 0x99, 0x53, 0x36, 0x63, 0x37, 0xAE, 0x46, 0xCF, ++ 0x78, 0xAB, 0xE2, 0x11, 0x92, 0xBD, 0x6A, 0x6C, 0x90, 0xAC, 0x8D, 0xAD, 0x66, 0xBF, 0x71, 0x37, 0x48, 0xC1, 0xA3, 0xE6, 0x73, 0x7D, 0xB3, 0x93, 0xB0, 0x18, 0x6C, 0xEA, 0x9D, 0x0E, 0xBA, 0x62, ++ 0x47, 0xB9, 0x0C, 0x94, 0x32, 0x86, 0xED, 0x0E, 0x13, 0x4C, 0xF2, 0x89, 0x27, 0xA3, 0x29, 0xD3, 0x56, 0x45, 0x5A, 0x6E, 0x56, 0x5D, 0x14, 0xDD, 0xDF, 0x5F, 0xA7, 0x0B, 0xF3, 0xAD, 0x13, 0xF4, ++ 0xEE, 0x51, 0x65, 0x8A, 0x92, 0x38, 0xCB, 0x97, 0x90, 0x24, 0xE5, 0x8D, 0x64, 0xF3, 0x79, 0x6F, 0x4C, 0xE3, 0x7C, 0x23, 0xF1, 0x0E, 0x44, 0x1F, 0x50, 0xD9, 0x76, 0x38, 0x8C, 0x6D, 0xEC, 0xED, ++ 0x8E, 0xD9, 0x35, 0xD2, 0xC6, 0xC6, 0xBB, 0x12, 0xC6, 0x12, 0xAF, 0xB7, 0xA0, 0x2D, 0x91, 0x34, 0x26, 0xB6, 0xAE, 0x22, 0x39, 0x00, 0x4E, 0xEC, 0x58, 0xAD, 0xA2, 0xFE, 0x3C, 0x67, 0xC4, 0xE2, ++ 0xA9, 0xF0, 0x3E, 0x49, 0x03, 0x50, 0xFC, 0x47, 0x18, 0xF3, 0x6A, 0x86, 0x1D, 0x93, 0xD2, 0x47, 0x3C, 0xCB, 0x31, 0xB7, 0xF1, 0xD7, 0xAD, 0xAE, 0xD5, 0xE0, 0xCE, 0x6A, 0xA9, 0x38, 0x18, 0x57, ++ 0x9E, 0x15, 0x71, 0x27, 0x19, 0x0A, 0xB4, 0x08, 0x40, 0x20, 0x40, 0x4C, 0x61, 0xC2, 0xE5, 0xC6, 0x78, 0xDC, 0x37, 0xCB, 0x53, 0x65, 0x40, 0xA4, 0x3F, 0x5C, 0xC6, 0x99, 0xDC, 0x40, 0x95, 0xFE, ++ 0x03, 0xFB, 0x7C, 0xEC, 0x5E, 0xFD, 0x3D, 0x9C, 0x87, 0x50, 0x32, 0xDF, 0x94, 0x57, 0x16, 0x46, 0x2B, 0xA3, 0xAE, 0x6D, 0xBF, 0x6C, 0x5B, 0xC8, 0x99, 0xAB, 0x8A, 0x7C, 0x59, 0xC5, 0xF6, 0x6B, ++ 0x74, 0x78, 0xB1, 0x61, 0xF4, 0x22, 0x98, 0x6C, 0xDA, 0x91, 0xD0, 0x8B, 0xE7, 0x58, 0x49, 0x4B, 0xA1, 0x75, 0x9B, 0x1E, 0x05, 0x7E, 0x31, 0xA4, 0x15, 0xD7, 0x0A, 0xCC, 0xC0, 0x80, 0xC7, 0x6D, ++ 0x6C, 0x32, 0x09, 0x9C, 0xF7, 0x45, 0xAC, 0x61, 0xCC, 0x42, 0xA9, 0x6E, 0x59, 0x4F, 0x3D, 0x78, 0x76, 0x98, 0x31, 0x3D, 0x62, 0xAD, 0x6C, 0xD4, 0x6A, 0xF5, 0x90, 0x66, 0xE1, 0xE5, 0xCA, 0x9F, ++ 0x83, 0xC7, 0xE5, 0xC6, 0x8C, 0xAE, 0x2D, 0x63, 0x2C, 0xF4, 0xF6, 0xA1, 0x7A, 0xA8, 0x0F, 0xF5, 0x34, 0x97, 0xB6, 0xFE, 0x50, 0xB3, 0xE6, 0x21, 0x5C, 0x2F, 0xE4, 0x65, 0x7B, 0xB1, 0xE2, 0x56, ++ 0x94, 0xE0, 0x79, 0x7E, 0xA4, 0x0E, 0x95, 0x75, 0x8B, 0xE6, 0x8E, 0xF3, 0x0E, 0xB9, 0xE3, 0xF5, 0xB6, 0xAF, 0xFF, 0x45, 0xA7, 0x7D, 0xAC, 0xD0, 0xEA, 0xB5, 0xC1, 0x03, 0x14, 0xE3, 0x1B, 0x6C, ++ 0xDF, 0x85, 0xF4, 0x74, 0x1B, 0xFF, 0xE6, 0xD0, 0x1C, 0xE2, 0xA2, 0xB9, 0xC3, 0xDF, 0x0A, 0xE8, 0x7A, 0x4A, 0x7A, 0x99, 0x02, 0xBC, 0xA1, 0x24, 0x90, 0xDC, 0x27, 0x9B, 0x81, 0xC0, 0x37, 0xA4, ++ 0xF9, 0xE8, 0xAF, 0xB9, 0xC9, 0xD8, 0x52, 0x4F, 0x84, 0x7D, 0xED, 0xF8, 0x0C, 0x41, 0xBB, 0xE2, 0x36, 0xCC, 0x0D, 0x1C, 0xD7, 0x9D, 0x46, 0x3B, 0xFF, 0x96, 0xCD, 0x7C, 0x31, 0x87, 0x95, 0x24, ++ 0x76, 0x32, 0xAB, 0x01, 0xA1, 0xF0, 0x52, 0xF4, 0xF7, 0x30, 0xDD, 0xD1, 0x7B, 0xD1, 0x0A, 0xBF, 0x36, 0x34, 0x41, 0x52, 0xD5, 0xB8, 0x41, 0x15, 0x5B, 0x71, 0x79, 0x2B, 0xB4, 0x1F, 0x5C, 0x9E, ++ 0x33, 0x16, 0x5D, 0x3D, 0xCE, 0x8E, 0xA5, 0xFE, 0xFE, 0xC6, 0x3F, 0xAD, 0x10, 0x8B, 0x26, 0xC0, 0xC3, 0x77, 0x33, 0x92, 0x57, 0x0D, 0x13, 0x6D, 0x67, 0xFC, 0xEF, 0xC7, 0x10, 0x8D, 0x1E, 0x9D, ++ 0x99, 0x30, 0x2B, 0xD5, 0x78, 0x45, 0x33, 0xD5, 0x62, 0x44, 0xE0, 0x12, 0x67, 0x54, 0x0F, 0x5D, 0x06, 0xC1, 0xD4, 0xCA, 0xF6, 0x5B, 0x4E, 0xAA, 0x67, 0x38, 0x51, 0x48, 0xCB, 0xD1, 0xC7, 0x3E, ++ 0xAD, 0x46, 0x74, 0x31, 0x9A, 0xBF, 0x03, 0x14, 0x03, 0x05, 0x4A, 0x39, 0x05, 0x49, 0x52, 0x48, 0x47, 0xE6, 0x9C, 0x93, 0x29, 0x40, 0x22, 0x0C, 0xB6, 0xFC, 0x18, 0xE0, 0x6F, 0x11, 0x29, 0x89, ++ 0xA2, 0x37, 0xAB, 0x7F, 0x3B, 0x65, 0x41, 0xF6, 0x99, 0xE0, 0x2F, 0x71, 0x43, 0x53, 0x99, 0x59, 0x15, 0xFF, 0xB7, 0x34, 0xC6, 0xC0, 0xB7, 0x15, 0x0D, 0x5D, 0xD4, 0xB1, 0x72, 0x83, 0x6F, 0x7A, ++ 0x75, 0xD1, 0x0C, 0x58, 0xCE, 0x5F, 0x68, 0x62, 0x1F, 0x2C, 0x6C, 0xB6, 0xDC, 0x49, 0xF1, 0x14, 0xCE, 0x55, 0x6C, 0xDB, 0xF5, 0xF4, 0x73, 0x91, 0x21, 0x2F, 0x1B, 0xCB, 0xFB, 0xB4, 0xAA, 0x7C, ++ 0x99, 0x27, 0x80, 0xFC, 0x51, 0x2D, 0x21, 0x5E, 0xCC, 0xB1, 0x60, 0x52, 0x4E, 0x4E, 0xAC, 0x73, 0x8A, 0x04, 0x83, 0x0A, 0xE4, 0x11, 0xA0, 0x9D, 0xFC, 0xEE, 0x5D, 0xEF, 0x02, 0xC9, 0x75, 0xD2, ++ 0xCD, 0x08, 0x88, 0xAD, 0x16, 0xA2, 0xDF, 0x46, 0x99, 0xD5, 0xE7, 0x10, 0xFF, 0xFC, 0x45, 0xF0, 0x2C, 0x4C, 0xC9, 0xD9, 0x64, 0x7F, 0x1A, 0xAC, 0x14, 0x06, 0x00, 0x12, 0x23, 0xFE, 0x56, 0x4D, ++ 0xD5, 0xA4, 0x3C, 0xBA, 0xAE, 0xFE, 0xD2, 0xBC, 0x94, 0x4F, 0x1C, 0x10, 0x8A, 0x8C, 0x2D, 0xA4, 0x48, 0x53, 0xFF, 0xE8, 0x38, 0x4A, 0x07, 0x4D, 0xD7, 0x26, 0x96, 0xDC, 0x68, 0x3F, 0x64, 0x48, ++ 0x17, 0x4B, 0xF0, 0x4B, 0x6A, 0x4F, 0x8A, 0x09, 0xE8, 0x21, 0xDC, 0xD4, 0xEF, 0x92, 0xB4, 0xDC, 0x54, 0x0C, 0x7C, 0x46, 0x54, 0x53, 0x67, 0x37, 0x33, 0x2B, 0xE9, 0x61, 0xC0, 0xD9, 0xBA, 0xC6, ++ 0xC4, 0x4C, 0xE8, 0x78, 0x92, 0x94, 0x2E, 0xA4, 0xE6, 0x81, 0xD7, 0xAB, 0x65, 0xAB, 0x2F, 0xCA, 0x41, 0x83, 0x7E, 0x0F, 0x45, 0x5F, 0x4E, 0x55, 0xC9, 0xE5, 0x11, 0xA7, 0xD9, 0xD7, 0x60, 0x25, ++ 0xA7, 0x9B, 0x43, 0x45, 0x6F, 0xEA, 0x7F, 0xB3, 0x49, 0x2E, 0xF8, 0xAA, 0x06, 0x9C, 0x46, 0x8C, 0xF7, 0x4D, 0x02, 0xA6, 0xB5, 0x52, 0xD1, 0xB8, 0xA1, 0x44, 0x18, 0x8C, 0xD6, 0x8A, 0x8A, 0x60, ++ 0x99, 0x85, 0xAB, 0x62, 0xD1, 0xCC, 0xBC, 0xCA, 0x7E, 0xFF, 0x91, 0xDE, 0x5C, 0xC6, 0xE0, 0x80, 0x1D, 0x04, 0xE3, 0x30, 0x93, 0xEB, 0x70, 0x49, 0x8E, 0xA8, 0xCB, 0x05, 0x06, 0x18, 0xB2, 0x72, ++ 0xAF, 0x06, 0x2D, 0xD4, 0xDC, 0x10, 0x9C, 0x19, 0xC8, 0x63, 0xAA, 0x59, 0xF5, 0xB8, 0xAF, 0x74, 0x42, 0xBD, 0xA3, 0xE4, 0x11, 0xCE, 0x36, 0xD1, 0x44, 0xD6, 0xCD, 0x3F, 0x57, 0x2F, 0x1C, 0xFE, ++ 0x67, 0x26, 0x98, 0xB0, 0xC0, 0x74, 0x3B, 0xCE, 0xD7, 0x32, 0x9A, 0xDB, 0x98, 0x45, 0xCA, 0xFF, 0x6C, 0x10, 0xB2, 0x6C, 0x32, 0x51, 0x6F, 0x9E, 0x53, 0x8C, 0x83, 0x0B, 0x61, 0x62, 0x7D, 0x68, ++ 0xEA, 0x76, 0x8D, 0xD0, 0x3E, 0x98, 0x0B, 0x40, 0x2B, 0x76, 0x59, 0xEA, 0x65, 0x66, 0xD7, 0x36, 0xF7, 0x88, 0x1A, 0x8D, 0x0E, 0x42, 0xA8, 0xCA, 0x24, 0x7E, 0x51, 0x29, 0xB0, 0x28, 0x92, 0x5B, ++ 0xE7, 0x53, 0xC3, 0x91, 0xD7, 0x75, 0x03, 0x5A, 0x44, 0x69, 0x6E, 0x26, 0xF8, 0xA6, 0x48, 0x7C, 0x7C, 0x8D, 0xE7, 0xD0, 0x49, 0x22, 0xB8, 0x75, 0xCC, 0xD3, 0xD2, 0x12, 0x11, 0x66, 0xC3, 0x34, ++ 0x6B, 0x51, 0xD5, 0xD5, 0x43, 0x76, 0x53, 0xCC, 0xDB, 0xDF, 0x49, 0x85, 0x65, 0xB1, 0xBF, 0x1B, 0xDF, 0x91, 0x82, 0xC4, 0x3B, 0x15, 0x4B, 0x00, 0xC0, 0x42, 0x48, 0x00, 0xB6, 0xA8, 0xE9, 0x64, ++ 0xF4, 0x37, 0xD3, 0xDF, 0xA6, 0xA6, 0x48, 0x20, 0x0D, 0xC0, 0xE0, 0x7D, 0xD2, 0xDA, 0x98, 0x19, 0xFC, 0xF2, 0xB2, 0x25, 0x8E, 0x07, 0xF0, 0xC5, 0x0A, 0xF4, 0x43, 0x30, 0x43, 0x5B, 0x23, 0x48, ++ 0xB7, 0x4C, 0xCC, 0x5F, 0x24, 0xE5, 0xDC, 0xCF, 0x67, 0xB0, 0x63, 0xDB, 0x59, 0x70, 0xBC, 0x7B, 0x59, 0x04, 0x99, 0xB2, 0xDB, 0x49, 0xFB, 0x2E, 0xB3, 0xF0, 0x88, 0x3E, 0x97, 0x04, 0x20, 0x9A, ++ 0xFF, 0x45, 0xBF, 0xB6, 0x12, 0x70, 0xEB, 0xB1, 0x3D, 0x89, 0x14, 0x60, 0xBD, 0x5E, 0x8B, 0x5F, 0xCE, 0x07, 0x3B, 0x50, 0x82, 0xC6, 0x5B, 0x0F, 0xE3, 0x7C, 0x7D, 0xC4, 0x14, 0xCC, 0xA3, 0xEF, ++ 0xD1, 0x08, 0x5F, 0x58, 0x16, 0xFC, 0x71, 0x0C, 0xF4, 0x5B, 0x45, 0x5B, 0x98, 0xAE, 0x53, 0xA2, 0x4A, 0x2D, 0x92, 0x40, 0x0B, 0xCD, 0x15, 0xA0, 0xFE, 0xA7, 0x94, 0xC4, 0x63, 0xBB, 0x59, 0x15, ++ 0x39, 0xD1, 0x17, 0x19, 0x50, 0xCA, 0xA3, 0x47, 0x61, 0x67, 0x90, 0xCF, 0x8D, 0x22, 0xC5, 0x46, 0xE7, 0x5A, 0x6E, 0xEB, 0x72, 0x68, 0x09, 0xD0, 0xC0, 0x72, 0xFF, 0x21, 0x61, 0xA2, 0xA4, 0x41, ++ 0xFD, 0xF3, 0x9C, 0xAD, 0x7A, 0x18, 0xF2, 0xB0, 0xB4, 0x26, 0x1D, 0xC2, 0xD3, 0xB4, 0x17, 0xB8, 0x44, 0xAD, 0xB7, 0x1E, 0xB7, 0xE7, 0x2F, 0xE2, 0x4F, 0x8D, 0xDE, 0x92, 0xD7, 0xC4, 0xF2, 0xDA, ++ 0x29, 0x3A, 0xCC, 0x92, 0x23, 0xA8, 0x73, 0x3A, 0x84, 0x99, 0x65, 0x63, 0x2D, 0x77, 0x10, 0xF7, 0xA7, 0xBB, 0x87, 0x04, 0x1A, 0x3D, 0x3A, 0x51, 0x66, 0xBA, 0x90, 0x65, 0x7E, 0x03, 0xAF, 0x26, ++ 0xA9, 0xD1, 0x0D, 0x66, 0x19, 0x9E, 0x60, 0xEE, 0x70, 0xD3, 0xFB, 0xF3, 0x9F, 0xE4, 0x6C, 0xFC, 0x8D, 0xDC, 0x73, 0x68, 0x34, 0xE4, 0xE4, 0x05, 0xF8, 0x3C, 0xDD, 0x0C, 0xAA, 0xF8, 0x16, 0x28, ++ 0xC7, 0x98, 0x99, 0xEA, 0xED, 0xBF, 0x25, 0x03, 0x18, 0x77, 0xE1, 0x62, 0x67, 0x5D, 0x9C, 0x57, 0xF6, 0xA4, 0xD9, 0xFF, 0xE0, 0xFD, 0x68, 0x40, 0xF9, 0x9B, 0xEC, 0xE9, 0x06, 0x2C, 0x98, 0xE0, ++ 0x74, 0xBB, 0x30, 0x71, 0x76, 0xA7, 0x8C, 0x4A, 0x4D, 0xCE, 0x9E, 0x40, 0x31, 0xBD, 0x10, 0x28, 0x55, 0x39, 0xC1, 0x80, 0xF4, 0xB8, 0xBD, 0x33, 0xE8, 0xCB, 0x11, 0xBC, 0x9C, 0x1D, 0xD9, 0x37, ++ 0x6D, 0x73, 0xD3, 0x1D, 0x6E, 0xFE, 0x1A, 0xCC, 0x61, 0x7E, 0xC9, 0x92, 0xE3, 0x9B, 0x49, 0x6B, 0x05, 0xB1, 0x1A, 0xCA, 0xFF, 0x35, 0x6D, 0x72, 0x53, 0x7C, 0x60, 0x11, 0x0C, 0x90, 0x51, 0xD6, ++ 0x91, 0x7C, 0x1F, 0xFB, 0x03, 0x1B, 0x69, 0xD3, 0x9B, 0x94, 0x28, 0x85, 0x8A, 0x4B, 0xF7, 0x28, 0x83, 0xB4, 0xC7, 0x87, 0x9F, 0xEF, 0x69, 0xBF, 0xCC, 0x31, 0xA1, 0xCF, 0xB3, 0x39, 0xC5, 0x79, ++ 0x47, 0xFC, 0x79, 0x1B, 0xDA, 0x3E, 0x81, 0x20, 0x5D, 0x04, 0x6E, 0x1B, 0xFA, 0xB8, 0xE0, 0x45, 0x19, 0xEA, 0x65, 0x24, 0xD5, 0xFF, 0x16, 0x6D, 0x56, 0xA8, 0xB3, 0xC2, 0x02, 0xCF, 0x32, 0x5D, ++ 0x29, 0x76, 0x60, 0xDD, 0x94, 0x14, 0xE9, 0xD2, 0xAF, 0x1F, 0xE0, 0x11, 0xC2, 0xA1, 0x6F, 0xCE, 0x6A, 0x5B, 0x75, 0x1E, 0x7B, 0xB0, 0x55, 0xDD, 0x40, 0x23, 0x72, 0xB8, 0xDB, 0xE6, 0x43, 0xDB, ++ 0xAA, 0x8B, 0xAD, 0x19, 0xEA, 0x47, 0xE1, 0x4D, 0xD6, 0xC0, 0x06, 0xC8, 0x82, 0xC0, 0xCE, 0x27, 0x51, 0x82, 0xD5, 0xC7, 0x93, 0xA7, 0x24, 0x6E, 0x35, 0xA7, 0x2F, 0xA9, 0x71, 0x89, 0x48, 0xD8, ++ 0x9D, 0x7C, 0x70, 0x07, 0xE4, 0x65, 0x09, 0x67, 0xF0, 0x1A, 0x6C, 0xCD, 0x2F, 0x9B, 0x23, 0xD8, 0x5C, 0xB7, 0x0E, 0xAB, 0x54, 0x05, 0x96, 0xD4, 0xE7, 0xEF, 0xD3, 0xC4, 0x64, 0x26, 0x69, 0x36, ++ 0xCE, 0x6B, 0xCB, 0x38, 0x86, 0x4A, 0xFC, 0xC9, 0x0C, 0xA7, 0x4D, 0xED, 0xD2, 0x45, 0xDE, 0x19, 0xD8, 0x62, 0x36, 0xD8, 0xB5, 0xF2, 0xAD, 0xD8, 0xEA, 0x9B, 0xA7, 0x4C, 0x3C, 0xC9, 0x7F, 0xC9, ++ 0xDD, 0xE8, 0x60, 0x6F, 0xB3, 0x43, 0xCC, 0xB1, 0x98, 0x37, 0x59, 0xDB, 0x7F, 0xCD, 0x2D, 0x18, 0x7E, 0xE6, 0x42, 0xC9, 0x8B, 0x05, 0x0E, 0xB1, 0x67, 0xF0, 0x19, 0xDB, 0x78, 0x8B, 0x7E, 0x56, ++ 0xD5, 0xD5, 0xB4, 0xC0, 0x77, 0x0B, 0xC0, 0x96, 0x97, 0xCF, 0xA3, 0xF0, 0xC7, 0xBC, 0x6F, 0x30, 0xCE, 0xEE, 0x06, 0xC6, 0x55, 0x84, 0x85, 0xB4, 0xB6, 0x2B, 0xE0, 0x18, 0x3D, 0x79, 0x86, 0x7C, ++ 0x2C, 0x91, 0x04, 0xD3, 0x85, 0xC0, 0xFC, 0xEE, 0xE9, 0x4C, 0x42, 0x49, 0x01, 0x1B, 0x6F, 0x72, 0xE3, 0x7F, 0xD5, 0xE6, 0x6D, 0xCC, 0x00, 0x4F, 0x37, 0xB6, 0x76, 0x1B, 0x6C, 0xE7, 0xC4, 0xD2, ++ 0x08, 0x98, 0xCB, 0xC1, 0x1E, 0x19, 0xD8, 0xCB, 0x88, 0x1A, 0xCE, 0xC8, 0x3C, 0x12, 0x70, 0x4F, 0x26, 0xC1, 0x29, 0x19, 0x14, 0x08, 0x8F, 0xCE, 0x3F, 0x88, 0x05, 0xDF, 0xE5, 0x73, 0x2A, 0xA4, ++ 0xAC, 0xD5, 0x69, 0xDD, 0x4F, 0x80, 0x9B, 0x3A, 0xEC, 0x3B, 0x0A, 0xE8, 0xF8, 0xA4, 0xBA, 0xC2, 0x21, 0x72, 0x96, 0x6C, 0x95, 0x39, 0x15, 0x29, 0x52, 0x43, 0x8F, 0xBD, 0x34, 0xD8, 0x67, 0xC3, ++ 0x28, 0xCD, 0xED, 0x82, 0xAE, 0xD9, 0x64, 0x46, 0x4B, 0xAE, 0x83, 0xBC, 0xE5, 0xCA, 0xF6, 0xE7, 0xE7, 0x19, 0x0F, 0x46, 0x4B, 0xBF, 0x7C, 0x8F, 0x51, 0x58, 0xDB, 0xFA, 0x9A, 0xF4, 0x20, 0xBC, ++ 0xA2, 0xB3, 0xD2, 0xFE, 0x6E, 0xC6, 0x0E, 0xAB, 0xDE, 0x95, 0x86, 0x9C, 0x8A, 0x74, 0xAE, 0x6C, 0x0A, 0x18, 0x6F, 0xBF, 0x75, 0xE3, 0x3C, 0x8E, 0x87, 0x6F, 0x57, 0xD1, 0x67, 0xD5, 0xB7, 0x43, ++ 0x34, 0x5E, 0x21, 0x1E, 0xF3, 0x73, 0x3D, 0x0F, 0xF6, 0x07, 0x98, 0x2E, 0x60, 0xFB, 0x3C, 0x2A, 0x59, 0xEA, 0xC1, 0x67, 0x60, 0x02, 0xED, 0x1E, 0xC8, 0xD1, 0xE2, 0xE6, 0x9E, 0xD0, 0x9B, 0xD4, ++ 0xAB, 0xD8, 0x4B, 0xEE, 0xFA, 0xAA, 0x06, 0xFD, 0x40, 0x09, 0xF6, 0x78, 0x77, 0x85, 0x2E, 0x9E, 0x7E, 0x38, 0xA0, 0x86, 0xEC, 0xBC, 0x42, 0x4E, 0xC7, 0xBA, 0x2C, 0x7E, 0x82, 0x56, 0x9F, 0xB1, ++ 0xD1, 0xDE, 0xF5, 0xD4, 0x47, 0x98, 0xB2, 0x48, 0x06, 0x55, 0x3D, 0xC6, 0x92, 0x33, 0x4D, 0xA0, 0xBC, 0x09, 0xC9, 0x19, 0x19, 0x31, 0x34, 0x0C, 0xAA, 0xA9, 0xD0, 0x9E, 0x45, 0xBA, 0xFD, 0x94, ++ 0x62, 0xA6, 0xDD, 0xE7, 0x62, 0xB4, 0x66, 0x79, 0x6C, 0xC4, 0xAA, 0x7C, 0xA0, 0x6A, 0x3E, 0x25, 0x0E, 0xC7, 0x04, 0x4C, 0xF0, 0x93, 0x2B, 0x45, 0xE1, 0xD7, 0x81, 0xF3, 0xE3, 0xE8, 0x10, 0x5D, ++ 0xFB, 0x56, 0x48, 0x35, 0x04, 0xAD, 0xBB, 0xE5, 0x2A, 0xBA, 0x41, 0xF3, 0xC7, 0x13, 0x88, 0x7A, 0x94, 0x53, 0x4B, 0x92, 0xF9, 0x9D, 0x5F, 0xF7, 0x00, 0xD9, 0x57, 0x8A, 0xF2, 0xBA, 0x61, 0xEF, ++ 0xA3, 0x5F, 0x7D, 0xF3, 0xF0, 0xA0, 0xAD, 0x15, 0x37, 0x2C, 0xBE, 0x39, 0x2C, 0xA3, 0x07, 0x88, 0x0C, 0x28, 0xD1, 0x9A, 0xC4, 0x1F, 0x8E, 0x9A, 0x41, 0x41, 0x63, 0x0F, 0xB6, 0x49, 0x6A, 0xBB, ++ 0x4F, 0xAF, 0x12, 0xB4, 0xC2, 0xF9, 0x8A, 0x34, 0x0A, 0x74, 0x48, 0x3C, 0x17, 0xEF, 0x9F, 0x14, 0x7C, 0x88, 0xBA, 0x65, 0x86, 0xDD, 0xCA, 0x75, 0xC2, 0x27, 0x96, 0xBA, 0xD2, 0xE5, 0x4A, 0x42, ++ 0x64, 0x7A, 0x39, 0x44, 0x4F, 0xDE, 0xA1, 0x81, 0x42, 0xF0, 0x27, 0xCD, 0xA7, 0x65, 0xAD, 0x63, 0x97, 0x12, 0x5F, 0x0A, 0x52, 0xF8, 0xB5, 0xF4, 0x24, 0x84, 0xD7, 0x27, 0x88, 0x76, 0x30, 0x81, ++ 0x4B, 0x20, 0x80, 0xD0, 0xC8, 0xF5, 0x17, 0xBD, 0x57, 0x77, 0xC2, 0x45, 0xAD, 0xDE, 0x98, 0x59, 0x05, 0x73, 0x7D, 0x79, 0x96, 0x1D, 0x81, 0xEE, 0xB0, 0xAF, 0xB4, 0x9A, 0xAC, 0x22, 0x9F, 0x65, ++ 0x79, 0xDE, 0xBC, 0x47, 0xC4, 0xDC, 0xFD, 0x68, 0x63, 0x1B, 0xE8, 0x27, 0x54, 0xFF, 0x8D, 0x84, 0xF0, 0xFE, 0xA3, 0xFB, 0x2B, 0x83, 0xD2, 0xFB, 0x38, 0x4D, 0x40, 0xCF, 0xB4, 0x2E, 0xA8, 0xFF, ++ 0x2B, 0xC0, 0xC5, 0x5C, 0x87, 0xE4, 0xF7, 0x0C, 0x76, 0x58, 0xA5, 0x4D, 0xD2, 0xF5, 0x34, 0x22, 0xAE, 0x1F, 0xE0, 0xFC, 0x28, 0x6E, 0x8B, 0x32, 0xE9, 0xD4, 0x5C, 0x96, 0x7A, 0xF0, 0x0D, 0xAA, ++ 0x9C, 0x68, 0x5F, 0x78, 0x10, 0x98, 0x36, 0x65, 0xE5, 0x94, 0xFD, 0x5B, 0x77, 0x25, 0x8A, 0x06, 0x41, 0x3D, 0x5B, 0x84, 0xC8, 0x01, 0x72, 0x7A, 0xA5, 0x34, 0x71, 0xE0, 0xE8, 0x71, 0x6A, 0xB4, ++ 0x11, 0x0A, 0x8A, 0x05, 0x74, 0x4D, 0xA2, 0x5E, 0xA4, 0x84, 0xBD, 0x11, 0x41, 0x25, 0x3E, 0xB8, 0x7B, 0xD8, 0x67, 0x36, 0xDD, 0xE8, 0x66, 0x2F, 0x77, 0x65, 0x5F, 0x83, 0x61, 0xD4, 0xB4, 0x3B, ++ 0x2B, 0x4F, 0xD3, 0xC5, 0x6C, 0xF7, 0x10, 0x11, 0xDC, 0x1E, 0xD9, 0x18, 0x13, 0x4F, 0x49, 0x74, 0xB4, 0xD5, 0x60, 0x83, 0x72, 0xF1, 0xDF, 0x37, 0x84, 0xBF, 0xF9, 0xAB, 0x1C, 0xB4, 0xAF, 0x5E, ++ 0x53, 0x33, 0xD0, 0x44, 0x51, 0x2D, 0x7C, 0xA5, 0xB3, 0xA8, 0x2F, 0xC2, 0x91, 0x5D, 0xD5, 0x0C, 0x82, 0xA2, 0xFE, 0x52, 0x1D, 0x04, 0x73, 0x8A, 0x76, 0xB8, 0x27, 0xC8, 0xB1, 0x32, 0x75, 0x99, ++ 0xDE, 0xFF, 0xD2, 0x24, 0x59, 0x02, 0x53, 0xB7, 0x56, 0x66, 0xEF, 0xE4, 0x8A, 0x9C, 0x29, 0x66, 0x1F, 0x55, 0xEC, 0x36, 0x8F, 0xE0, 0x36, 0x79, 0x44, 0x95, 0xC8, 0xF6, 0xA4, 0xEE, 0x7F, 0x92, ++ 0xB2, 0x0C, 0x4C, 0x38, 0xFB, 0x09, 0xF9, 0x48, 0x50, 0xBC, 0x0B, 0x97, 0xC2, 0x5C, 0x1E, 0x16, 0x36, 0xD5, 0xE5, 0xAD, 0x7E, 0xF7, 0x37, 0x53, 0xA9, 0x01, 0xD8, 0x38, 0x50, 0x3A, 0x94, 0x4A, ++ }, ++ .pkcs8_len = 0, ++ .spki_len = 0, ++ .msg_len = 66, ++ .msg = { ++ 0x22, 0x5D, 0x5C, 0xE2, 0xCE, 0xAC, 0x61, 0x93, 0x0A, 0x07, 0x50, 0x3F, 0xB5, 0x9F, 0x7C, 0x2F, 0x93, 0x6A, 0x3E, 0x07, 0x54, 0x81, 0xDA, 0x3C, 0xA2, 0x99, 0xA8, 0x0F, 0x8C, 0x5D, 0xF9, 0x22, ++ 0x3A, 0x07, 0x3E, 0x7B, 0x90, 0xE0, 0x2E, 0xBF, 0x98, 0xCA, 0x22, 0x27, 0xEB, 0xA3, 0x8C, 0x1A, 0xB2, 0x56, 0x82, 0x09, 0xE4, 0x6D, 0xBA, 0x96, 0x18, 0x69, 0xC6, 0xF8, 0x39, 0x83, 0xB1, 0x7D, ++ 0xCD, 0x49, ++ }, ++ .sig_len = 4595, ++ .sig = { ++ 0x5C, 0x04, 0x77, 0x77, 0xB8, 0xEB, 0x60, 0x8F, 0x9B, 0xD9, 0x11, 0xCD, 0xF6, 0x2B, 0x8B, 0xEB, 0x36, 0x61, 0xF9, 0x3F, 0xE4, 0xE6, 0x2E, 0x9A, 0x0C, 0x4E, 0x20, 0xA8, 0x88, 0x90, 0x81, 0x2C, ++ 0x2F, 0xC6, 0x4D, 0xEC, 0x6A, 0x3A, 0xDB, 0x78, 0x83, 0xFA, 0x86, 0xAD, 0x62, 0xC4, 0xF0, 0x72, 0x98, 0x89, 0xEC, 0xBD, 0x7B, 0x49, 0xAC, 0x68, 0x89, 0x3C, 0xD0, 0xEE, 0x56, 0x3E, 0x08, 0x41, ++ 0xE5, 0x3E, 0xF9, 0xC5, 0x23, 0x69, 0xA1, 0x70, 0x42, 0x82, 0x68, 0x4F, 0xDA, 0x5C, 0x61, 0x5F, 0x3B, 0x71, 0x24, 0x3B, 0x17, 0x09, 0x85, 0xD9, 0xEB, 0x28, 0x23, 0xB0, 0xAA, 0xDE, 0xAE, 0x32, ++ 0x05, 0xBA, 0x95, 0x63, 0xF3, 0xAD, 0xC9, 0x04, 0x71, 0x95, 0x77, 0x9B, 0x51, 0x72, 0x02, 0x83, 0xC1, 0x88, 0x30, 0x2E, 0x0D, 0xC4, 0xE6, 0x4D, 0xA8, 0xC8, 0xE2, 0x6D, 0x1A, 0x12, 0x6F, 0x1E, ++ 0x23, 0x6A, 0xDA, 0x99, 0x40, 0x3E, 0x4E, 0x29, 0xDF, 0x8D, 0x52, 0x21, 0xB5, 0x18, 0x57, 0x60, 0x80, 0x7E, 0x17, 0x8E, 0x46, 0xB7, 0x59, 0x5A, 0x1E, 0x31, 0x27, 0x30, 0xDA, 0x4C, 0x10, 0xE9, ++ 0x6D, 0x67, 0x45, 0x84, 0x89, 0x92, 0xFA, 0xFB, 0x10, 0x12, 0x58, 0xF8, 0xFE, 0xCE, 0xFA, 0x10, 0x1C, 0xC8, 0xC1, 0x92, 0x46, 0x84, 0xA4, 0x23, 0x4A, 0xB3, 0x47, 0x56, 0xAC, 0x49, 0x61, 0xC9, ++ 0xAB, 0x5D, 0xF0, 0xE1, 0xC8, 0x61, 0x38, 0x0A, 0x88, 0x1F, 0xDC, 0x18, 0xA8, 0x62, 0x45, 0x67, 0x23, 0xE9, 0x4C, 0xA9, 0x54, 0xAE, 0x50, 0xF5, 0x68, 0x83, 0x34, 0x28, 0x8A, 0x93, 0xD4, 0xB7, ++ 0x89, 0x67, 0x3A, 0xC0, 0xBC, 0x57, 0xD8, 0x3B, 0x71, 0x04, 0xF5, 0x6E, 0x40, 0x7D, 0x2A, 0x79, 0x38, 0x31, 0xAA, 0x69, 0x87, 0x19, 0xB2, 0xED, 0xE0, 0xDE, 0x3C, 0x8D, 0x70, 0xDE, 0xAB, 0x53, ++ 0x79, 0x6C, 0x98, 0xF1, 0x01, 0xA3, 0x76, 0xBC, 0x48, 0x88, 0xE7, 0xF8, 0x8D, 0x9D, 0xA1, 0xBD, 0x9C, 0x0A, 0x39, 0x75, 0x5F, 0xFC, 0xB4, 0xFA, 0x96, 0x99, 0x59, 0x60, 0x17, 0x62, 0x54, 0x2A, ++ 0x01, 0xE6, 0xD6, 0x07, 0x9B, 0x38, 0x2A, 0xCF, 0xFC, 0xEE, 0x1F, 0x17, 0x36, 0x91, 0x6B, 0xDC, 0x57, 0xD8, 0x61, 0xC0, 0x47, 0xFD, 0xF9, 0xAB, 0x49, 0x6C, 0x2B, 0x99, 0x97, 0x0C, 0x0F, 0x1D, ++ 0x10, 0x70, 0xFF, 0x37, 0xEB, 0x5A, 0x5C, 0x1A, 0xF6, 0x5B, 0x87, 0x75, 0xA9, 0x13, 0x83, 0x89, 0x9E, 0xBE, 0x44, 0xB3, 0xFC, 0x98, 0x11, 0xAB, 0xE5, 0x3D, 0x74, 0xDF, 0x1E, 0x58, 0xBC, 0x0A, ++ 0xFC, 0xEC, 0x6D, 0xEF, 0xB3, 0xC7, 0x4C, 0xF6, 0xED, 0x4C, 0xC2, 0x13, 0x05, 0xBC, 0xD5, 0x82, 0xF0, 0xD1, 0xD5, 0x5B, 0x81, 0xF3, 0x16, 0x6E, 0x90, 0x04, 0xFF, 0x1D, 0x98, 0x98, 0x21, 0x74, ++ 0xB7, 0x32, 0x57, 0x6C, 0x4F, 0x08, 0x00, 0x4A, 0xA1, 0x72, 0xB6, 0xED, 0xD3, 0x59, 0xEC, 0xAB, 0x95, 0xF9, 0x77, 0x5C, 0x23, 0x2B, 0x11, 0x12, 0xFD, 0xF6, 0x65, 0xB2, 0x45, 0x10, 0x8A, 0x3C, ++ 0xF9, 0x57, 0xD9, 0x08, 0xEB, 0xB1, 0xFA, 0x5E, 0x38, 0x5B, 0xED, 0x36, 0xDD, 0x4A, 0xE0, 0x9C, 0xB3, 0xB4, 0x94, 0x42, 0xC8, 0x1B, 0x49, 0xA0, 0x5C, 0xE7, 0xF3, 0xB8, 0xC7, 0x1F, 0x1A, 0xE2, ++ 0x8E, 0xC4, 0xCD, 0xE8, 0x51, 0xA2, 0x27, 0xB9, 0x9E, 0x4A, 0xDE, 0xB4, 0x7C, 0xBB, 0x12, 0xAF, 0x98, 0xBF, 0x8E, 0x1D, 0xDA, 0x9E, 0xCB, 0x09, 0x68, 0x3A, 0x74, 0xAB, 0x05, 0x3D, 0x62, 0x78, ++ 0xFD, 0xEF, 0xA2, 0x19, 0x83, 0xB3, 0xD3, 0xFE, 0x23, 0x96, 0x3F, 0x1C, 0x2A, 0xD9, 0x6F, 0x46, 0x64, 0xB9, 0xDF, 0x8A, 0x4A, 0xF0, 0x98, 0x5B, 0x73, 0x1E, 0xB3, 0x3C, 0xDB, 0x49, 0x5D, 0xB1, ++ 0x28, 0xE5, 0xDC, 0x5B, 0x36, 0x55, 0x9E, 0xFD, 0xA1, 0x17, 0x17, 0xDD, 0xBB, 0xEC, 0x43, 0x8B, 0xC8, 0x6A, 0xE7, 0x3D, 0x7D, 0x69, 0x66, 0x81, 0xF9, 0x0E, 0x6B, 0xBC, 0x24, 0x43, 0xB6, 0xA6, ++ 0x23, 0x21, 0xF9, 0x26, 0xC6, 0x48, 0xC3, 0x36, 0x05, 0xAB, 0x61, 0x9B, 0x02, 0xEF, 0xFD, 0x5B, 0x48, 0x4B, 0x00, 0x45, 0x15, 0x0A, 0x47, 0x53, 0xB9, 0x22, 0x52, 0x27, 0x9E, 0xA1, 0x20, 0x4F, ++ 0x42, 0xF3, 0x0B, 0xB0, 0xD8, 0x2D, 0x39, 0xD5, 0x58, 0x88, 0x1F, 0xFB, 0x4C, 0xD2, 0x96, 0x75, 0x6E, 0xF2, 0x8D, 0x08, 0x71, 0x20, 0xEB, 0xD5, 0xFC, 0x1D, 0x42, 0x72, 0xBC, 0x7C, 0x75, 0xB9, ++ 0xBB, 0x0F, 0xC3, 0x31, 0x09, 0x51, 0xCE, 0xA4, 0x5A, 0x7D, 0x06, 0xC8, 0xDC, 0xA5, 0x9E, 0xDB, 0x6F, 0x34, 0xEE, 0xEF, 0x55, 0x60, 0xF5, 0xCF, 0xD6, 0xC3, 0x44, 0xC2, 0xEF, 0x06, 0xED, 0x7B, ++ 0xBA, 0x25, 0x74, 0x9A, 0x2E, 0xF5, 0x62, 0xE2, 0x9F, 0xEF, 0x5C, 0xB4, 0x7C, 0x25, 0x50, 0xAB, 0x72, 0xF3, 0xA1, 0x0D, 0x15, 0x89, 0x34, 0xB1, 0xF2, 0x69, 0x51, 0x59, 0x30, 0xD1, 0x05, 0x3E, ++ 0x34, 0xF2, 0xB1, 0xA6, 0x8D, 0x36, 0x94, 0xEE, 0x4B, 0xC2, 0x06, 0xD8, 0x62, 0x66, 0x58, 0x68, 0x90, 0x4C, 0xAF, 0xCD, 0x9E, 0x2D, 0xAD, 0x4B, 0x26, 0x2B, 0x2A, 0x11, 0x18, 0xEE, 0xA1, 0xFA, ++ 0x5B, 0xF0, 0x21, 0x88, 0xE8, 0x5A, 0x8A, 0xFE, 0xA1, 0xF8, 0xBA, 0x8E, 0x36, 0x04, 0xED, 0x67, 0xC0, 0xA8, 0xC4, 0x4D, 0x61, 0x0E, 0xCE, 0x21, 0x03, 0x3D, 0x23, 0x03, 0x4A, 0x28, 0xB9, 0xBC, ++ 0x3F, 0x54, 0xCE, 0x7C, 0xA6, 0x3F, 0xD0, 0xC5, 0x4E, 0xC5, 0x9A, 0x3A, 0xE6, 0xF0, 0xF0, 0x15, 0x33, 0x86, 0xC2, 0xC0, 0x8B, 0x9F, 0x22, 0xC3, 0xC9, 0x21, 0xE9, 0xB6, 0xC5, 0xF6, 0x8C, 0x95, ++ 0x02, 0x58, 0x4B, 0x57, 0x58, 0x92, 0xE6, 0xC1, 0x00, 0xBA, 0x24, 0x38, 0x30, 0x15, 0x75, 0x22, 0x09, 0xCD, 0x36, 0x17, 0x1A, 0x86, 0x42, 0xE1, 0xAB, 0xC1, 0x77, 0xB3, 0x99, 0x58, 0x23, 0xAA, ++ 0x56, 0x2D, 0xC8, 0xCE, 0xD9, 0x22, 0x08, 0x68, 0xD0, 0x98, 0x71, 0x5C, 0x2B, 0xE9, 0x9C, 0x10, 0x14, 0x3B, 0x1C, 0x47, 0x6E, 0x60, 0x73, 0x1B, 0xA5, 0x7E, 0x29, 0x36, 0x4B, 0xDE, 0xC6, 0x38, ++ 0x4C, 0x4F, 0xC8, 0x6C, 0x72, 0x93, 0xEC, 0xBF, 0x24, 0xED, 0xE4, 0x23, 0x1F, 0x63, 0xF4, 0xD7, 0x43, 0x0C, 0x74, 0xB4, 0x5C, 0xBC, 0xD8, 0x8F, 0xA6, 0x3C, 0xA8, 0x19, 0xE3, 0xE9, 0x82, 0x26, ++ 0x3F, 0xAD, 0xDF, 0xEB, 0xA6, 0xFE, 0x21, 0xB3, 0xB2, 0x43, 0x7F, 0x34, 0xF8, 0x6E, 0xB3, 0x76, 0xA9, 0x3B, 0xAF, 0x4E, 0x55, 0x51, 0x99, 0xE1, 0x29, 0x91, 0x7F, 0x6A, 0x60, 0xF0, 0x8E, 0x7E, ++ 0x4F, 0x38, 0x73, 0x09, 0x76, 0x94, 0x6B, 0x73, 0x7E, 0xDF, 0x30, 0x2C, 0x11, 0x45, 0x95, 0x47, 0x42, 0xD1, 0x46, 0x85, 0x43, 0x09, 0x33, 0x53, 0xBF, 0xE6, 0x64, 0x94, 0xEC, 0x60, 0x02, 0x24, ++ 0xAA, 0x5E, 0x76, 0x62, 0x66, 0x04, 0x3F, 0x6B, 0x8E, 0x65, 0xFB, 0x89, 0xF0, 0x85, 0x23, 0x9A, 0xD8, 0xD6, 0x69, 0x3C, 0x23, 0xFD, 0x3A, 0x6F, 0x29, 0x8C, 0x3E, 0xA0, 0xF4, 0x8C, 0x6D, 0x56, ++ 0x3E, 0x62, 0xFD, 0x78, 0x57, 0xD6, 0xA1, 0x1D, 0x10, 0xAF, 0x8C, 0xF3, 0x6F, 0x8B, 0x34, 0xFC, 0x60, 0x66, 0x4E, 0xCE, 0x43, 0xC0, 0xA6, 0x50, 0x3F, 0x68, 0x57, 0x7C, 0x8A, 0x7B, 0xEF, 0xA1, ++ 0xFF, 0x91, 0xBC, 0x51, 0x0B, 0xD7, 0xB9, 0xDA, 0xCA, 0x4A, 0xB6, 0xD4, 0x00, 0xAC, 0x2D, 0x42, 0xD7, 0x07, 0x7A, 0x23, 0xD8, 0xE2, 0xF3, 0x04, 0xE8, 0x57, 0x68, 0xC1, 0x11, 0xDC, 0xAA, 0x8B, ++ 0x1E, 0x8D, 0x05, 0x9A, 0x3E, 0xB2, 0x38, 0x42, 0x88, 0xC9, 0x8C, 0x0F, 0x26, 0xF9, 0xB6, 0x0F, 0x61, 0x71, 0x37, 0x25, 0x4B, 0xA0, 0x77, 0x6C, 0x27, 0x2C, 0xA2, 0x3A, 0x26, 0x81, 0x0E, 0x00, ++ 0x6A, 0x25, 0x43, 0xE3, 0x7B, 0x78, 0x94, 0x57, 0xFE, 0xA7, 0x30, 0x41, 0xD6, 0x55, 0xEC, 0x6B, 0xA3, 0x1C, 0xAA, 0x2C, 0xDE, 0x59, 0xD4, 0x42, 0x09, 0x6A, 0xA7, 0x10, 0xF4, 0xF5, 0x03, 0x19, ++ 0xA2, 0xB6, 0x2D, 0x4C, 0x28, 0xD8, 0xC8, 0x8C, 0xC8, 0xFD, 0x80, 0x8F, 0x26, 0xB6, 0xF8, 0x7C, 0x9D, 0xF4, 0x85, 0xAF, 0xC9, 0xDF, 0xC3, 0x69, 0xDE, 0x7D, 0xB6, 0xFD, 0xE5, 0x12, 0x9A, 0x36, ++ 0xB0, 0xFF, 0xBC, 0x30, 0x13, 0x13, 0x24, 0xDD, 0x0F, 0x33, 0x27, 0xF7, 0x6F, 0x6E, 0xFB, 0x80, 0xD7, 0x84, 0x4A, 0x13, 0x3A, 0xA8, 0x48, 0x70, 0x80, 0x16, 0x59, 0x0B, 0xB3, 0xB5, 0xA4, 0x20, ++ 0x63, 0xD0, 0xC3, 0xCE, 0x9F, 0x7D, 0x23, 0xD6, 0x06, 0x15, 0xAC, 0xEC, 0x34, 0x71, 0x5B, 0x80, 0xEC, 0x4B, 0xFB, 0xBE, 0x78, 0xB4, 0xC1, 0x08, 0x0D, 0xCF, 0xED, 0x7F, 0xE9, 0x08, 0xE1, 0xC7, ++ 0x10, 0xD2, 0x50, 0xB5, 0xA0, 0xCB, 0xBB, 0x6A, 0xCC, 0x45, 0x06, 0x59, 0xB3, 0x47, 0xC6, 0xAD, 0x16, 0xDC, 0xED, 0x0F, 0x6B, 0x6A, 0x56, 0x71, 0x4B, 0x89, 0x9D, 0x4E, 0x25, 0xE1, 0x81, 0x13, ++ 0x89, 0xB9, 0x41, 0x26, 0x91, 0x8E, 0x11, 0x7E, 0x62, 0xB3, 0x3F, 0xE6, 0x63, 0x6C, 0xF8, 0xA2, 0x30, 0x23, 0x24, 0x92, 0xA5, 0x8A, 0x84, 0x6F, 0x7C, 0xCC, 0xF1, 0x65, 0x60, 0xE5, 0xB2, 0x51, ++ 0xB4, 0x2D, 0xD6, 0xCC, 0xEC, 0xED, 0x51, 0xB2, 0x83, 0x83, 0xA4, 0x18, 0x85, 0x11, 0x13, 0x21, 0x0B, 0x8D, 0x81, 0xF7, 0xA9, 0xE5, 0x10, 0xCB, 0xBD, 0x2B, 0xAA, 0xB9, 0x29, 0xC6, 0xBA, 0x85, ++ 0xA1, 0x4A, 0x93, 0xAC, 0xA2, 0x3E, 0xE7, 0x7B, 0xF8, 0x96, 0x52, 0xB3, 0x59, 0x24, 0x3F, 0xEA, 0xAF, 0x9E, 0x91, 0x0D, 0xB4, 0xB9, 0xBE, 0x57, 0x01, 0xCF, 0xD4, 0xDE, 0xDC, 0xF7, 0x99, 0x41, ++ 0xAD, 0xF7, 0x5C, 0xB9, 0xF3, 0x5B, 0x0E, 0xC4, 0xF4, 0x65, 0x80, 0x00, 0x99, 0xA5, 0xF0, 0x96, 0x27, 0x84, 0x6B, 0xE4, 0x67, 0x08, 0x3D, 0xDD, 0x93, 0xF9, 0x44, 0xA1, 0x6A, 0xD7, 0x4B, 0x80, ++ 0x28, 0x5D, 0xEF, 0x16, 0x08, 0x0B, 0x2E, 0xEB, 0xD9, 0xF8, 0xE2, 0x5A, 0x5C, 0x05, 0x26, 0xFC, 0xEB, 0xD9, 0x8E, 0xE7, 0xD0, 0x7F, 0x5E, 0xC7, 0x7B, 0x10, 0x71, 0x19, 0xC0, 0x4A, 0xBB, 0x2E, ++ 0x3F, 0xC3, 0x4D, 0xED, 0xDE, 0x18, 0x58, 0xB9, 0x20, 0x58, 0xF8, 0x26, 0xCC, 0x0B, 0xC9, 0xCA, 0x16, 0x1B, 0xF6, 0x24, 0xCF, 0x04, 0x30, 0xBC, 0x66, 0x11, 0xC8, 0xFB, 0x28, 0xC4, 0xD9, 0x4B, ++ 0x54, 0x25, 0x78, 0x7A, 0xDB, 0x82, 0xD9, 0x99, 0xD5, 0x36, 0xC8, 0xBF, 0xC5, 0xAE, 0xAD, 0x0F, 0xED, 0xB2, 0xDB, 0x1A, 0x84, 0x6D, 0x53, 0x4F, 0x25, 0x19, 0x73, 0x74, 0xC1, 0x0C, 0x99, 0x14, ++ 0xB5, 0xF4, 0x6D, 0xC8, 0x3F, 0x02, 0x26, 0x86, 0x28, 0xFC, 0x8A, 0xC1, 0x24, 0x6B, 0xD3, 0x52, 0x8B, 0x84, 0xBE, 0x0F, 0xA9, 0x41, 0x12, 0x7E, 0xBD, 0x45, 0x97, 0x0C, 0xA2, 0x15, 0x8B, 0xF7, ++ 0x9A, 0xA2, 0x14, 0x1B, 0x59, 0xCC, 0xE0, 0x98, 0x34, 0x17, 0x21, 0xAE, 0x4F, 0xAB, 0x6D, 0x2A, 0xAF, 0x10, 0x9F, 0x5E, 0xF6, 0xC0, 0x06, 0xB8, 0x5C, 0xCD, 0xF5, 0x0F, 0x8F, 0x79, 0xF5, 0x5B, ++ 0xAC, 0x2B, 0xC6, 0x8B, 0x7F, 0x9D, 0x81, 0x3A, 0xE9, 0xBE, 0xCA, 0xE6, 0x11, 0xC4, 0xC0, 0x08, 0xDC, 0xEC, 0x7D, 0xB4, 0xC2, 0xEA, 0x46, 0x37, 0x46, 0x3D, 0xC6, 0xBE, 0x33, 0xDB, 0x94, 0x40, ++ 0x69, 0x1D, 0x66, 0x84, 0x63, 0x6F, 0x14, 0x6A, 0x90, 0x3B, 0x18, 0x9F, 0x52, 0xB3, 0x46, 0x32, 0x29, 0x2C, 0x08, 0xE5, 0xAA, 0x28, 0xAA, 0xAB, 0x37, 0xE9, 0x12, 0x14, 0xFA, 0xFD, 0xB0, 0xDF, ++ 0xCF, 0x92, 0x92, 0x30, 0x2D, 0x6C, 0x97, 0xD0, 0x8E, 0x91, 0x8C, 0x7D, 0x94, 0x7B, 0x8A, 0xFD, 0xB6, 0xAB, 0xF9, 0x6B, 0xDE, 0x5B, 0x44, 0x13, 0xDC, 0xA9, 0xD2, 0x2C, 0xAD, 0xED, 0x06, 0xF8, ++ 0x5C, 0x1E, 0x9D, 0x7A, 0xCC, 0x12, 0xC8, 0x05, 0x53, 0xEC, 0xF5, 0x8C, 0xC6, 0xBC, 0xBB, 0x7C, 0xE3, 0xF7, 0xDB, 0x7C, 0xE9, 0xD9, 0x5B, 0x8C, 0x93, 0x77, 0xD0, 0x39, 0x3A, 0x1A, 0x5B, 0xAF, ++ 0x92, 0x01, 0x39, 0xCC, 0xF1, 0x1B, 0x14, 0xE9, 0xAA, 0x60, 0x3C, 0x41, 0x21, 0x54, 0xD6, 0xFA, 0x08, 0x40, 0x51, 0x08, 0x4C, 0x57, 0x85, 0x00, 0xDE, 0xCF, 0xF3, 0x1F, 0xB6, 0x1E, 0x93, 0x22, ++ 0xC6, 0xD6, 0x3A, 0xEE, 0x3A, 0x3A, 0xDB, 0xA7, 0x45, 0xA9, 0x1C, 0xFA, 0xC0, 0xCE, 0x21, 0x9E, 0x8C, 0x2F, 0xF9, 0x0C, 0x53, 0xE4, 0x23, 0xE2, 0x74, 0xC0, 0x41, 0xEC, 0x74, 0x12, 0xFA, 0xEE, ++ 0x4F, 0x4C, 0xC1, 0x11, 0x6C, 0xDC, 0x97, 0x2A, 0x90, 0xA1, 0xE0, 0x9B, 0x1F, 0x48, 0x5F, 0xDA, 0x1C, 0x17, 0xC6, 0x68, 0x2A, 0xB2, 0x6B, 0x0B, 0x23, 0x11, 0xB4, 0x53, 0x7D, 0x92, 0x39, 0x46, ++ 0x5B, 0x47, 0x00, 0x64, 0x25, 0xFC, 0x71, 0xB2, 0xB8, 0x55, 0x64, 0xE7, 0x37, 0xFD, 0x2B, 0x5C, 0x73, 0xAB, 0xB8, 0xFA, 0xD2, 0x0B, 0x83, 0xBF, 0x54, 0xE0, 0xBE, 0x2F, 0x6E, 0x2D, 0x71, 0xA5, ++ 0x16, 0x32, 0x61, 0x15, 0x31, 0x6E, 0x84, 0x5B, 0xC6, 0xCA, 0x82, 0xE1, 0x51, 0xBA, 0x4F, 0x90, 0xA7, 0x51, 0x93, 0x0E, 0x2B, 0xF3, 0x06, 0xB2, 0x5C, 0xDB, 0x38, 0xC2, 0xDA, 0x27, 0xF9, 0x1E, ++ 0xA1, 0xE9, 0x72, 0xB9, 0xB6, 0x61, 0x00, 0xD7, 0x52, 0x9D, 0x30, 0x2E, 0x88, 0xAF, 0x33, 0x15, 0xD6, 0xBB, 0xC8, 0x6D, 0x0E, 0x71, 0x98, 0xC1, 0x40, 0xD3, 0xFC, 0x41, 0xD5, 0x94, 0xFB, 0x5C, ++ 0x22, 0x02, 0x10, 0x7A, 0xC8, 0xC6, 0x5D, 0xDB, 0xCC, 0x94, 0x86, 0x14, 0xF2, 0x37, 0xA3, 0x3A, 0x87, 0x88, 0x04, 0x10, 0x41, 0xE8, 0x88, 0x8E, 0xB3, 0xEC, 0x65, 0x6F, 0x01, 0xC6, 0x95, 0x7A, ++ 0x87, 0x21, 0x54, 0xD3, 0x6A, 0xEF, 0x53, 0xC4, 0x39, 0xA8, 0x8F, 0x67, 0x5B, 0x5E, 0x4C, 0x12, 0x96, 0x30, 0xB2, 0x95, 0x4E, 0x7E, 0x53, 0x24, 0x72, 0x70, 0x07, 0x5D, 0x0D, 0x1E, 0xB6, 0xF0, ++ 0x8B, 0xEA, 0x6A, 0xA1, 0xD6, 0x13, 0x20, 0xC9, 0x83, 0x3B, 0x65, 0x37, 0xF3, 0x6D, 0x8E, 0x81, 0x99, 0xB5, 0x36, 0xA2, 0xDD, 0xDB, 0x53, 0xD8, 0x12, 0xC2, 0x21, 0x31, 0x49, 0xF2, 0x57, 0xD2, ++ 0x67, 0xCD, 0x6D, 0x07, 0xC0, 0xE6, 0xB1, 0x11, 0x88, 0x3B, 0xD8, 0x31, 0xB2, 0x5A, 0xAF, 0x7E, 0x39, 0xB8, 0x8B, 0x4F, 0xE9, 0x2D, 0x35, 0xE7, 0xC5, 0x3F, 0x65, 0xEE, 0xF9, 0x9C, 0xA7, 0x98, ++ 0x68, 0xF3, 0x50, 0x66, 0xC8, 0x8A, 0xC9, 0x6D, 0xF8, 0x3E, 0xDC, 0xC4, 0x1D, 0x90, 0x43, 0x38, 0xD8, 0xD1, 0x0D, 0x33, 0x16, 0x0F, 0xBD, 0x1B, 0xB5, 0xF6, 0xD4, 0xC6, 0xB6, 0x99, 0x85, 0x4D, ++ 0xDD, 0x50, 0x12, 0x89, 0x02, 0x8F, 0x68, 0xD6, 0xD1, 0xA0, 0xDB, 0x8E, 0xE6, 0x1F, 0xB1, 0x91, 0x12, 0xB3, 0x66, 0x98, 0x23, 0x82, 0x59, 0xB5, 0x2A, 0x32, 0xF4, 0x9E, 0xAD, 0x74, 0x50, 0x74, ++ 0xFA, 0x37, 0xF1, 0xF6, 0x8B, 0x43, 0xA3, 0x31, 0x14, 0xD7, 0xBF, 0xC6, 0x7D, 0xBD, 0xDF, 0xD4, 0x61, 0x1D, 0x41, 0xDC, 0x52, 0x49, 0x81, 0xD6, 0xFE, 0x40, 0x04, 0x01, 0x4D, 0xB9, 0x32, 0x25, ++ 0xA5, 0x38, 0xB5, 0xCB, 0xBA, 0x94, 0xA0, 0xFD, 0x79, 0xE9, 0x1D, 0x48, 0xBD, 0x90, 0xCC, 0x57, 0x28, 0x15, 0x20, 0xFE, 0xB6, 0x46, 0x32, 0x3C, 0x45, 0x27, 0x3B, 0xE9, 0xBD, 0xFB, 0xE9, 0xD9, ++ 0x9A, 0xCB, 0x70, 0x4D, 0xFB, 0x24, 0x36, 0x0F, 0x0C, 0x2E, 0xA0, 0xE8, 0x14, 0xB8, 0x05, 0x6F, 0x77, 0x61, 0xBD, 0x4D, 0x4C, 0x00, 0xC5, 0xE2, 0xBC, 0x1D, 0x1F, 0x8A, 0x4E, 0xC7, 0x79, 0x1F, ++ 0x6A, 0x23, 0xF2, 0xDA, 0xCB, 0x42, 0x3F, 0x29, 0xC8, 0x28, 0x02, 0xE0, 0xD1, 0xED, 0xBB, 0x6F, 0x98, 0x3B, 0x48, 0x99, 0x8B, 0xBB, 0xF4, 0xCF, 0x50, 0x5A, 0x17, 0x3D, 0x14, 0xA5, 0x85, 0xEB, ++ 0xFF, 0xC8, 0x97, 0x7D, 0xBE, 0xE5, 0x99, 0xEC, 0x73, 0x56, 0xE8, 0x3D, 0x65, 0xA0, 0x64, 0x53, 0xA1, 0x52, 0xF1, 0x14, 0xE6, 0x63, 0xE2, 0x73, 0x50, 0x39, 0x35, 0xAA, 0x81, 0x34, 0x2B, 0x67, ++ 0xC5, 0x52, 0x0B, 0x70, 0x84, 0x1B, 0xA1, 0xDF, 0x81, 0x10, 0x33, 0x0B, 0xE9, 0x21, 0x4A, 0x02, 0xCB, 0xB7, 0xAC, 0x17, 0x2F, 0x04, 0x07, 0x4F, 0x4B, 0x5C, 0x07, 0xCB, 0x8E, 0xB7, 0x2D, 0x50, ++ 0xAA, 0xE6, 0x3D, 0x81, 0x56, 0xFF, 0x0A, 0xF3, 0xCC, 0xD5, 0xE5, 0x14, 0x64, 0x39, 0xFE, 0xE0, 0x54, 0x11, 0x20, 0xFA, 0x15, 0xCC, 0x6B, 0xEC, 0xE6, 0xA3, 0xC2, 0xC3, 0xB0, 0x79, 0x55, 0xA7, ++ 0xF5, 0x4D, 0x08, 0x4C, 0x1E, 0x32, 0xA4, 0x55, 0x5E, 0x39, 0x7E, 0x44, 0x6D, 0x78, 0x99, 0x6E, 0xEB, 0xD9, 0x71, 0x15, 0xAF, 0x24, 0xEE, 0xEA, 0xCE, 0x15, 0x6B, 0x92, 0xF8, 0x66, 0xC4, 0xB1, ++ 0xA7, 0x2C, 0x11, 0xBE, 0x1C, 0x50, 0x77, 0x10, 0x5A, 0x19, 0x46, 0xF4, 0x79, 0xA4, 0x08, 0x46, 0x3F, 0xCF, 0x33, 0xAB, 0xDA, 0x84, 0x10, 0x94, 0xD1, 0x6D, 0xEA, 0xB9, 0x97, 0xCA, 0x6D, 0xD4, ++ 0x6E, 0x40, 0x94, 0x34, 0xBD, 0xE4, 0x73, 0x27, 0xA1, 0x35, 0x85, 0xB9, 0x74, 0xCF, 0xE9, 0x22, 0x8D, 0x8C, 0xBD, 0x73, 0x18, 0x5A, 0xDC, 0x02, 0xD0, 0x79, 0xCB, 0x41, 0x0F, 0x16, 0xB2, 0x32, ++ 0x24, 0x85, 0x48, 0x66, 0x92, 0x08, 0x8D, 0x9C, 0xCD, 0x26, 0xAC, 0x9C, 0x6F, 0x30, 0xE9, 0x36, 0xBF, 0x9C, 0xA7, 0x61, 0x59, 0x52, 0x13, 0x57, 0xA8, 0x7A, 0x5B, 0xAA, 0xB1, 0x87, 0x23, 0x7F, ++ 0x24, 0x05, 0x57, 0x2A, 0xD0, 0x06, 0x1A, 0xF6, 0xB6, 0xD8, 0xF8, 0xE3, 0xDD, 0x35, 0xBA, 0xB5, 0x8D, 0x92, 0xD1, 0xA1, 0xB1, 0x9A, 0xA2, 0xAB, 0xFE, 0x70, 0xEE, 0xB8, 0x49, 0xBA, 0xBE, 0x8B, ++ 0x64, 0x46, 0x36, 0x0A, 0xB8, 0x88, 0x5C, 0x26, 0x1D, 0xAC, 0xEB, 0xFB, 0xC4, 0xB8, 0x8C, 0x82, 0x94, 0xE6, 0xFC, 0xA1, 0x40, 0xEA, 0x7B, 0x89, 0x72, 0x36, 0x97, 0x66, 0x65, 0x00, 0xD6, 0xC7, ++ 0x67, 0x9D, 0x64, 0x54, 0x74, 0xC6, 0x77, 0x64, 0x2F, 0x39, 0x96, 0xB0, 0x93, 0xEB, 0xFB, 0xAD, 0xEB, 0x1E, 0x20, 0x06, 0xCA, 0x1B, 0x59, 0x3B, 0x03, 0xAC, 0x40, 0xF9, 0xC2, 0x6C, 0x6A, 0xEC, ++ 0xFB, 0xB9, 0xC9, 0x1A, 0xFB, 0x8B, 0x16, 0xDD, 0x49, 0x67, 0x5A, 0xC5, 0xCD, 0xEB, 0x79, 0x93, 0xC4, 0x19, 0x15, 0xB8, 0x3C, 0x64, 0x5B, 0x59, 0x60, 0xA3, 0xE7, 0x6C, 0x8E, 0x01, 0xAD, 0xE5, ++ 0xBA, 0xE9, 0xB7, 0xD8, 0x9E, 0x80, 0x53, 0x87, 0xF9, 0x39, 0x75, 0x86, 0x30, 0xC7, 0xC3, 0x99, 0xEC, 0xDE, 0x24, 0xF2, 0x15, 0xD1, 0x9D, 0xFE, 0xB3, 0xAC, 0xBA, 0xDB, 0x9E, 0x93, 0x00, 0x4B, ++ 0xCF, 0x2B, 0xE6, 0x2E, 0x4B, 0x39, 0xDF, 0xAA, 0x23, 0xCA, 0x0C, 0x4D, 0xDC, 0x17, 0x6F, 0x20, 0x29, 0xB8, 0xFE, 0x67, 0x6F, 0xAA, 0x1E, 0xCF, 0x2A, 0x0C, 0x05, 0xF1, 0x4A, 0xEF, 0x7F, 0xF2, ++ 0xE8, 0xC3, 0x48, 0xF3, 0xE2, 0x17, 0x91, 0xD1, 0xB5, 0x61, 0x69, 0xCF, 0x57, 0xC0, 0xFA, 0x20, 0x8A, 0xDA, 0x64, 0x2F, 0x9D, 0xCB, 0x69, 0x41, 0x2B, 0x70, 0x38, 0xAE, 0x59, 0x61, 0x5F, 0x49, ++ 0x57, 0x9A, 0xDF, 0x85, 0xF9, 0xD2, 0x14, 0x7A, 0x48, 0x0D, 0xEE, 0x5B, 0xD1, 0x59, 0xBB, 0x71, 0x02, 0x37, 0x83, 0x24, 0xF0, 0xAB, 0xB0, 0xEB, 0x47, 0xAF, 0x6C, 0x0C, 0xDE, 0x08, 0xD8, 0xB2, ++ 0x83, 0x58, 0x98, 0x05, 0x5F, 0x05, 0x3F, 0xD9, 0x93, 0x3E, 0x1D, 0x30, 0x67, 0x36, 0x45, 0xE7, 0x48, 0x8A, 0xEE, 0x87, 0x1B, 0xE3, 0x48, 0xC8, 0x51, 0xF0, 0x96, 0x9A, 0x15, 0x2B, 0xC7, 0x4D, ++ 0x74, 0x4B, 0x2A, 0x09, 0x9E, 0x27, 0x07, 0x0B, 0x8F, 0x56, 0x41, 0x1C, 0x81, 0x67, 0x35, 0x0B, 0x50, 0x88, 0x47, 0x55, 0xBE, 0x80, 0x61, 0xCD, 0xFF, 0x54, 0x0D, 0x35, 0x2C, 0x3D, 0x46, 0xA1, ++ 0x53, 0x45, 0x16, 0x8F, 0x37, 0xD4, 0x30, 0xD6, 0x86, 0x48, 0xF3, 0x27, 0xF2, 0x4B, 0x2B, 0xAD, 0xF5, 0xB4, 0x1C, 0x50, 0x10, 0xED, 0x2F, 0xC4, 0xA6, 0xC3, 0xCB, 0x72, 0x06, 0xF0, 0xDC, 0x2C, ++ 0xDB, 0x84, 0x35, 0xAC, 0x44, 0x1B, 0xFD, 0x57, 0x2B, 0xA2, 0x53, 0xB2, 0x82, 0xFF, 0xEC, 0xD6, 0xB6, 0xD0, 0x83, 0x67, 0x32, 0xB1, 0xFA, 0x19, 0xAD, 0xAA, 0x0D, 0xDB, 0x07, 0x00, 0x6C, 0x4F, ++ 0x2F, 0x6C, 0x12, 0x9B, 0xD9, 0x04, 0x1F, 0x0F, 0x38, 0xB0, 0xDC, 0x37, 0x60, 0x45, 0xAC, 0xD7, 0x96, 0x39, 0x0E, 0x52, 0xEA, 0x80, 0xDD, 0x19, 0x78, 0xC7, 0xD6, 0xD0, 0xD7, 0x9D, 0x53, 0x52, ++ 0xE7, 0x48, 0x4E, 0xEE, 0x97, 0xF2, 0x50, 0xF2, 0xAA, 0xB4, 0xEC, 0x14, 0x0F, 0xCB, 0xC0, 0xB2, 0x45, 0xF4, 0x11, 0x03, 0xEB, 0x39, 0xE5, 0x6C, 0x8C, 0x52, 0x62, 0x0F, 0x3F, 0x84, 0x9D, 0x29, ++ 0x03, 0x98, 0xB1, 0xF8, 0xBF, 0xBE, 0x4E, 0x42, 0xBB, 0x53, 0x71, 0x3C, 0x9F, 0x6E, 0x8D, 0xDA, 0x78, 0x9C, 0x53, 0x4F, 0xA2, 0x2A, 0xB3, 0xF3, 0xEC, 0x30, 0x70, 0x3D, 0x33, 0xB1, 0xDA, 0x70, ++ 0x94, 0x5B, 0x8A, 0x58, 0xD9, 0xAA, 0x49, 0xB1, 0x09, 0x4B, 0x5D, 0xE6, 0x33, 0x5F, 0xF4, 0xB3, 0x26, 0xDC, 0x80, 0xC1, 0x0F, 0x94, 0xA3, 0x03, 0x66, 0x68, 0xB5, 0x7F, 0xEC, 0xB4, 0xFF, 0x7D, ++ 0xC8, 0x53, 0xB3, 0x70, 0x10, 0xB0, 0xA2, 0x02, 0x61, 0x9E, 0x6A, 0x64, 0xDF, 0xFA, 0x17, 0x49, 0x82, 0x2D, 0x9D, 0xA5, 0x72, 0xC4, 0xC6, 0x0C, 0x3C, 0xB0, 0xAF, 0x34, 0xCC, 0x79, 0x13, 0xC5, ++ 0x33, 0xF7, 0x3B, 0x01, 0x82, 0xE3, 0x03, 0x0B, 0x32, 0x07, 0xFA, 0xD2, 0x9C, 0x68, 0xD8, 0xF3, 0xE4, 0x4C, 0xE6, 0xA0, 0x3D, 0xD5, 0x1C, 0x49, 0x1E, 0xD2, 0xC6, 0x90, 0x32, 0x22, 0x61, 0xBF, ++ 0xA8, 0xC5, 0x76, 0x88, 0xB8, 0x6A, 0xE8, 0x6E, 0xB0, 0xA2, 0x7C, 0x01, 0x7E, 0xCD, 0x67, 0xC5, 0xC0, 0x7B, 0xA3, 0x85, 0xDE, 0xDB, 0x8E, 0x5F, 0x3C, 0x80, 0x13, 0x7D, 0x2E, 0x5F, 0x29, 0xA5, ++ 0x99, 0xC6, 0xD2, 0x2B, 0x97, 0x07, 0x96, 0xD6, 0x01, 0x0A, 0x47, 0x27, 0xE4, 0xB3, 0xA4, 0x01, 0xD1, 0x5A, 0xA4, 0x91, 0xDF, 0x9D, 0x30, 0x21, 0xEB, 0xFC, 0xE8, 0xD2, 0xEE, 0xDA, 0x07, 0xD2, ++ 0xFC, 0xEF, 0x4B, 0x21, 0x48, 0x4F, 0x06, 0xB0, 0x6F, 0x4E, 0xC7, 0x9B, 0x7B, 0xFC, 0x05, 0x9E, 0xE7, 0x4E, 0x68, 0x1D, 0x01, 0x2D, 0xE3, 0xA7, 0x22, 0x85, 0x67, 0xCB, 0xA3, 0xF9, 0x7B, 0xCE, ++ 0x91, 0x0D, 0xB0, 0x7F, 0x7C, 0xC0, 0xBE, 0xAF, 0x59, 0x3C, 0x15, 0x3B, 0x2E, 0x2B, 0xFF, 0xA4, 0xF4, 0x21, 0x2E, 0x23, 0x48, 0x2B, 0x16, 0xE8, 0x6B, 0x14, 0xC6, 0x5C, 0xF4, 0x0A, 0xA9, 0xBE, ++ 0x23, 0xF3, 0xA2, 0x8E, 0x7D, 0x90, 0x83, 0xD5, 0x80, 0x41, 0x6C, 0x9B, 0xE5, 0x19, 0x73, 0xBE, 0x3D, 0x15, 0x86, 0xB7, 0x05, 0xCD, 0x1F, 0x1F, 0x9D, 0x1F, 0xF4, 0x1B, 0xEF, 0xDF, 0x1C, 0x0B, ++ 0x58, 0xF7, 0xFB, 0x73, 0x23, 0x50, 0x4C, 0x7E, 0xA6, 0xD0, 0xF9, 0x1F, 0xD4, 0x5B, 0x06, 0x57, 0x3B, 0x8C, 0x93, 0x02, 0x8B, 0xF7, 0xF3, 0xCC, 0xD1, 0xC8, 0xDA, 0xA6, 0x43, 0xE5, 0x97, 0xAE, ++ 0x21, 0x36, 0x0B, 0x97, 0x4D, 0x88, 0x9F, 0x84, 0x0E, 0x9E, 0xF7, 0x15, 0xDB, 0xD9, 0x16, 0x05, 0xE1, 0x81, 0xAE, 0x69, 0xEA, 0xBB, 0x46, 0x5F, 0xEA, 0x09, 0x55, 0xF7, 0xC6, 0x3E, 0xE3, 0x90, ++ 0x95, 0xC1, 0x24, 0x76, 0xE9, 0x69, 0x14, 0x41, 0xBD, 0x5B, 0xB9, 0x92, 0xC2, 0x14, 0xCA, 0x4F, 0x22, 0xBF, 0x9F, 0xC7, 0x31, 0x74, 0xD5, 0x91, 0xD0, 0xA3, 0x5D, 0x4A, 0xA4, 0x89, 0xE6, 0xCC, ++ 0x12, 0xEC, 0xFA, 0xBB, 0x8B, 0x21, 0xE7, 0x84, 0xB7, 0x8E, 0x97, 0x7B, 0xB8, 0x9D, 0x23, 0x80, 0x0A, 0x0F, 0x03, 0x1C, 0x5A, 0xFB, 0x23, 0x41, 0x75, 0xA5, 0xBB, 0x69, 0x8B, 0xA5, 0xD7, 0x98, ++ 0x55, 0x5D, 0x7E, 0xF0, 0xFF, 0xF1, 0x1E, 0x9F, 0x41, 0xE6, 0xF8, 0x2B, 0x93, 0x89, 0xFC, 0x62, 0x05, 0x03, 0xF1, 0x08, 0x1E, 0x74, 0xE0, 0xF1, 0xFD, 0xC8, 0x3D, 0x76, 0xC8, 0xDD, 0x5C, 0xFD, ++ 0x80, 0xD8, 0x2D, 0x29, 0x60, 0x38, 0x08, 0x4A, 0xBA, 0xA2, 0xAF, 0x68, 0xB4, 0xDE, 0xA3, 0xE7, 0x00, 0xED, 0x1A, 0x99, 0xD9, 0xEC, 0xB0, 0xFD, 0x11, 0x05, 0x26, 0x75, 0xBB, 0xDA, 0x90, 0x60, ++ 0x2C, 0xA9, 0xE3, 0x96, 0x69, 0x91, 0x69, 0xC6, 0x22, 0xAC, 0x52, 0x94, 0x9B, 0xFC, 0x98, 0x76, 0xEF, 0xF3, 0xFC, 0xD2, 0xD2, 0x78, 0xAE, 0xA3, 0x27, 0x9E, 0x1A, 0x01, 0x90, 0x0C, 0xA5, 0x55, ++ 0x0F, 0x95, 0x60, 0xD4, 0xE3, 0xD4, 0xFB, 0x5A, 0x7E, 0xF1, 0x16, 0xE0, 0xA0, 0x15, 0x68, 0x54, 0xE0, 0x05, 0xF7, 0x91, 0x35, 0x2F, 0xB6, 0x8D, 0xAC, 0x0D, 0xB0, 0x75, 0x3A, 0xA4, 0xE4, 0xB3, ++ 0xB0, 0x19, 0x11, 0x9E, 0x5C, 0xE2, 0xDE, 0x4E, 0x73, 0x14, 0x28, 0x7E, 0xF3, 0x84, 0xA9, 0x2C, 0x30, 0xBE, 0x01, 0x20, 0x2A, 0x6A, 0x9A, 0xDE, 0x42, 0x62, 0x4A, 0x50, 0xEE, 0x29, 0xA1, 0x8F, ++ 0xA2, 0x19, 0x92, 0xF1, 0x6C, 0xE0, 0x22, 0x66, 0x56, 0x9A, 0x6A, 0xE2, 0x56, 0x04, 0x1D, 0x05, 0x6A, 0xD8, 0xC7, 0x66, 0xA9, 0xA7, 0xCD, 0xF5, 0x1D, 0x90, 0x61, 0xC7, 0x46, 0x94, 0x72, 0xF2, ++ 0x1D, 0x6D, 0x1F, 0x0A, 0x34, 0x6E, 0xC2, 0x80, 0x02, 0x5C, 0x13, 0x87, 0x81, 0x76, 0xD7, 0xE8, 0xF4, 0x55, 0x92, 0x95, 0xBF, 0x63, 0x07, 0x94, 0x67, 0x7D, 0x18, 0x07, 0x6C, 0x55, 0x6D, 0x1C, ++ 0x9D, 0x51, 0x1F, 0xA6, 0xB6, 0xFC, 0x09, 0x2F, 0xC7, 0xA3, 0xEF, 0x8E, 0x0A, 0xE0, 0x2D, 0x65, 0xC9, 0x8C, 0x6D, 0xCE, 0x54, 0xFD, 0xC4, 0x52, 0x5C, 0xF0, 0xBC, 0xA4, 0xF9, 0xAA, 0x85, 0xF4, ++ 0xFE, 0xCC, 0x7A, 0xCD, 0x83, 0x2E, 0xAC, 0xDA, 0xFE, 0x62, 0x40, 0xE8, 0xC7, 0x88, 0xB6, 0x5D, 0xAF, 0x79, 0xAA, 0x70, 0x58, 0x3A, 0x0C, 0x34, 0x15, 0x52, 0x2E, 0x3B, 0xFE, 0xA6, 0x1A, 0x29, ++ 0x8D, 0xD3, 0x9E, 0x1D, 0x22, 0xCA, 0x61, 0xC5, 0x3E, 0xBF, 0x00, 0xDE, 0xC2, 0x73, 0x9B, 0x8E, 0x93, 0xAF, 0xF4, 0x21, 0x97, 0xDD, 0x43, 0x22, 0x7D, 0xEF, 0x25, 0x84, 0x64, 0x9A, 0xF7, 0xBC, ++ 0x7A, 0x0A, 0x60, 0xA5, 0xC4, 0xA7, 0x72, 0x18, 0xB0, 0xBE, 0x6A, 0xE5, 0xAD, 0x84, 0x19, 0x4A, 0x49, 0x01, 0xCD, 0x9F, 0x73, 0xAD, 0xB7, 0x0A, 0xF6, 0x19, 0xC3, 0x8B, 0x71, 0x62, 0x79, 0xBA, ++ 0x41, 0xEF, 0x99, 0xF4, 0x04, 0x40, 0xEE, 0x82, 0xEC, 0x45, 0xAC, 0xDE, 0xD3, 0x25, 0xC8, 0x36, 0xFE, 0x69, 0xB8, 0x65, 0xA5, 0xE5, 0xCD, 0x0F, 0xF8, 0x56, 0xA3, 0x0D, 0xE7, 0xF0, 0x27, 0xD8, ++ 0xC1, 0x3B, 0x40, 0x7D, 0x5B, 0x31, 0x62, 0x9A, 0xC1, 0xA1, 0x62, 0x08, 0xBD, 0x6A, 0xF2, 0xB7, 0xCA, 0x94, 0xB1, 0x88, 0x24, 0x9E, 0x89, 0xDA, 0x3C, 0x0F, 0xBF, 0x18, 0xA4, 0x12, 0xA8, 0x69, ++ 0xF5, 0xF4, 0x97, 0xAD, 0x6F, 0x72, 0xAC, 0xEE, 0xB4, 0xD0, 0x77, 0xA0, 0xB7, 0xEE, 0xDF, 0x30, 0x17, 0xD8, 0x6A, 0x79, 0x9E, 0x4A, 0x68, 0x9E, 0x43, 0x9E, 0xE5, 0x84, 0x17, 0x29, 0xE4, 0xD9, ++ 0x57, 0x2F, 0x8C, 0x6F, 0xE7, 0x67, 0x6E, 0xF7, 0x0A, 0x9D, 0xC0, 0x2E, 0x39, 0x37, 0xF4, 0xDF, 0xB7, 0x9B, 0x3F, 0x53, 0x52, 0x45, 0x79, 0x31, 0x18, 0x07, 0x40, 0xEA, 0xB3, 0xA3, 0x34, 0x18, ++ 0x23, 0x6A, 0x44, 0x29, 0x40, 0x36, 0x48, 0xA9, 0xAA, 0xD6, 0x70, 0x49, 0xE6, 0x33, 0xBD, 0x07, 0x2F, 0xFC, 0xC9, 0x71, 0xEF, 0x0F, 0xC9, 0xEE, 0x5F, 0xD2, 0xB5, 0xAE, 0xFD, 0xFE, 0xE6, 0xFC, ++ 0xBE, 0x0B, 0x64, 0x41, 0x80, 0x6F, 0x48, 0x55, 0x50, 0x70, 0x9B, 0x2B, 0xC4, 0xC3, 0x06, 0xAC, 0x0A, 0xD5, 0x94, 0x84, 0x91, 0xB6, 0x4C, 0xDD, 0x47, 0x32, 0x02, 0x3B, 0xE8, 0x84, 0xAB, 0xBF, ++ 0xBF, 0x57, 0xEA, 0xCF, 0xFF, 0x96, 0xE9, 0x35, 0x8B, 0xEE, 0x7D, 0xD6, 0x71, 0xFB, 0x15, 0xEB, 0xDF, 0x4E, 0xA6, 0x90, 0x2C, 0xB4, 0x91, 0xB5, 0x84, 0x74, 0xC3, 0x53, 0x3B, 0xA9, 0x61, 0x88, ++ 0xA6, 0x0B, 0x5A, 0xE3, 0xC8, 0x33, 0x81, 0xB0, 0x3A, 0x93, 0x1A, 0x65, 0xB7, 0xD7, 0x40, 0x62, 0x6D, 0xCD, 0x9F, 0xC1, 0x9C, 0x75, 0x28, 0x1C, 0x18, 0x31, 0xC9, 0x78, 0xA3, 0xA7, 0x52, 0xF0, ++ 0xE0, 0x0F, 0x0F, 0x90, 0xBB, 0x37, 0x0E, 0x49, 0xD4, 0xAD, 0xAE, 0xC9, 0xC6, 0x1A, 0x00, 0x8B, 0x39, 0x67, 0xC3, 0x5D, 0xE4, 0x7B, 0x27, 0x1C, 0x13, 0x4B, 0xD8, 0xFC, 0x7E, 0xF1, 0x81, 0x36, ++ 0xBD, 0xD4, 0x15, 0x6A, 0xA3, 0xB2, 0x50, 0x34, 0x11, 0xAD, 0x4E, 0x22, 0xE4, 0x42, 0x63, 0x1C, 0x12, 0xE1, 0x60, 0xE8, 0xDD, 0xE9, 0x2B, 0xC4, 0x97, 0xCB, 0xE2, 0x40, 0x6D, 0x6C, 0xA0, 0xC0, ++ 0x8F, 0x36, 0x9A, 0x04, 0x82, 0x6F, 0x27, 0x9E, 0xE2, 0x1C, 0x93, 0x7D, 0xED, 0xA2, 0xEC, 0x96, 0xF8, 0x8C, 0x34, 0x3C, 0xD4, 0xB6, 0xF9, 0x55, 0xA1, 0x4B, 0x27, 0xFF, 0x71, 0xF6, 0x91, 0xE2, ++ 0xBD, 0x41, 0x10, 0x13, 0x1C, 0x16, 0xDA, 0xCB, 0xB5, 0xE4, 0x25, 0xF3, 0x2A, 0xD2, 0x3C, 0x5B, 0x57, 0x7C, 0x95, 0x0F, 0xD6, 0x06, 0x1C, 0xDF, 0x64, 0x06, 0xAA, 0xAF, 0x61, 0x72, 0xA1, 0xFD, ++ 0xF1, 0x56, 0x29, 0x77, 0x8F, 0x7D, 0x0F, 0x8A, 0x2D, 0xF0, 0xE9, 0x79, 0x0E, 0x26, 0xD0, 0x2A, 0x4A, 0xFD, 0xB3, 0x84, 0xA1, 0xAA, 0x0B, 0x2A, 0xDC, 0x46, 0xDB, 0x6A, 0x90, 0xA3, 0xC7, 0x28, ++ 0x14, 0x73, 0xFA, 0x6C, 0x6A, 0x0D, 0x92, 0xA0, 0xCB, 0xDB, 0x4D, 0xCF, 0x7C, 0x36, 0x15, 0xDA, 0x68, 0xA7, 0xCD, 0x84, 0x5A, 0x7F, 0x61, 0xCF, 0xA4, 0x9D, 0x0A, 0x2E, 0x55, 0x62, 0x5C, 0xE0, ++ 0xE9, 0x8A, 0x6F, 0x2B, 0x0D, 0xC8, 0xED, 0xD8, 0xD2, 0xE9, 0x5B, 0x57, 0xDA, 0xCB, 0x4D, 0x6A, 0xFD, 0x17, 0xBA, 0x58, 0x32, 0x55, 0x51, 0x11, 0x50, 0x5A, 0x47, 0x4C, 0x69, 0x8E, 0xFE, 0xED, ++ 0x89, 0x76, 0x6D, 0x14, 0xEE, 0xFD, 0xC3, 0x56, 0xA6, 0x9F, 0xF2, 0x25, 0x58, 0x4F, 0xE3, 0xB1, 0xE2, 0x19, 0x0E, 0xF8, 0x08, 0x43, 0x07, 0x93, 0xC4, 0x8B, 0x8F, 0xEC, 0xE9, 0x02, 0x85, 0xE0, ++ 0x5B, 0xF3, 0x37, 0xAE, 0x0F, 0xF9, 0xF2, 0xA1, 0x91, 0x5C, 0x76, 0xB3, 0x06, 0x80, 0x95, 0xB3, 0x99, 0xFD, 0xA6, 0x2E, 0x11, 0x7D, 0x0B, 0xE9, 0xC3, 0xC8, 0xD5, 0x2C, 0xC1, 0x9D, 0x93, 0x91, ++ 0xA6, 0xA7, 0x5D, 0xDB, 0x8E, 0x04, 0xD1, 0xDB, 0xAE, 0x6E, 0x73, 0x05, 0x0B, 0x5B, 0x7E, 0x9F, 0x72, 0x5E, 0x08, 0x05, 0x5C, 0xCB, 0xE1, 0xD9, 0x10, 0xFD, 0x8E, 0x81, 0xBC, 0x79, 0x07, 0xF6, ++ 0x0B, 0xD1, 0x9F, 0x11, 0xEA, 0x79, 0x88, 0x87, 0xB3, 0xD8, 0x6A, 0x44, 0xC1, 0x57, 0x82, 0x5C, 0x81, 0xE4, 0x88, 0x38, 0xAC, 0x5D, 0x36, 0xB2, 0x5A, 0xBF, 0x6E, 0xB7, 0x2D, 0x3F, 0x32, 0x49, ++ 0xED, 0xED, 0xBB, 0x24, 0xD0, 0xB9, 0xEF, 0xE3, 0x4E, 0x49, 0x1F, 0x9D, 0xD8, 0xC5, 0x12, 0xC1, 0x72, 0x6F, 0x1C, 0x55, 0x61, 0x24, 0xE6, 0xF8, 0x43, 0x00, 0xD7, 0x15, 0xDB, 0xC9, 0x22, 0x90, ++ 0x99, 0x0D, 0x4A, 0xF4, 0x18, 0x22, 0xFE, 0xAD, 0xA6, 0x3B, 0x56, 0xA0, 0xD5, 0x0D, 0xAA, 0xB4, 0x1B, 0xFB, 0x5E, 0x21, 0xB9, 0x41, 0xD0, 0xCD, 0x33, 0x6D, 0xAC, 0xB4, 0xF5, 0x68, 0xE8, 0x2B, ++ 0xB0, 0x44, 0xB4, 0x75, 0xBD, 0xD5, 0x0E, 0x04, 0xD4, 0x3D, 0xC6, 0xB3, 0xA7, 0x33, 0x91, 0x50, 0x10, 0x39, 0x96, 0x42, 0x4E, 0xB7, 0xB0, 0x64, 0x89, 0x6C, 0xFE, 0x2C, 0xDB, 0x6F, 0xFE, 0xE7, ++ 0x30, 0x5F, 0xF5, 0x50, 0x50, 0x27, 0x94, 0xCE, 0x2C, 0x22, 0x4B, 0x6F, 0x1B, 0xD7, 0x3E, 0xD3, 0x79, 0x8B, 0xFC, 0xC0, 0xD7, 0xE5, 0x99, 0x23, 0x34, 0x17, 0x1F, 0x2D, 0xB9, 0xBC, 0x26, 0x79, ++ 0xA5, 0x10, 0x09, 0x19, 0x0E, 0x75, 0x12, 0xDE, 0x95, 0xE4, 0xB1, 0xAC, 0x46, 0xF0, 0x25, 0x2F, 0x0B, 0x34, 0x09, 0xE2, 0x4F, 0x24, 0x47, 0x94, 0x2E, 0x23, 0xA4, 0x2C, 0xCC, 0xC0, 0x79, 0x5C, ++ 0x06, 0x65, 0x1E, 0x18, 0xB3, 0x92, 0xC8, 0xB0, 0xCF, 0x07, 0x5C, 0x73, 0xB1, 0x29, 0xCC, 0x37, 0xDA, 0x9D, 0x81, 0x0A, 0xDE, 0x23, 0x7D, 0x62, 0x97, 0x19, 0xDC, 0x42, 0xAA, 0x7F, 0x33, 0x91, ++ 0x4E, 0x37, 0x9D, 0x30, 0x4F, 0x6A, 0xCE, 0x9F, 0xC0, 0x99, 0xEF, 0x87, 0xA0, 0x0B, 0x63, 0xC2, 0x71, 0x6D, 0x13, 0x35, 0x8D, 0xE6, 0xA6, 0x05, 0xE1, 0xF5, 0xF7, 0x0B, 0x82, 0x85, 0x53, 0x5E, ++ 0x7C, 0xDD, 0x3F, 0x5B, 0xBC, 0x87, 0xE1, 0x5B, 0x39, 0xB0, 0xEF, 0xAC, 0xC3, 0xB3, 0x73, 0xAD, 0x13, 0xD6, 0x9E, 0x0F, 0x56, 0xE5, 0xC1, 0x96, 0x07, 0x3E, 0x60, 0xBF, 0x9C, 0x72, 0xD7, 0x6F, ++ 0xD9, 0x39, 0x51, 0x1E, 0xA2, 0x27, 0x6A, 0xDC, 0x66, 0x03, 0x1B, 0xAF, 0x09, 0xF5, 0x75, 0xA5, 0x10, 0x51, 0x53, 0xAD, 0xC2, 0x55, 0x0C, 0xA3, 0x5A, 0x48, 0xDB, 0x2E, 0x2F, 0xD6, 0x9B, 0x01, ++ 0x3D, 0x20, 0x24, 0xDF, 0x16, 0x7A, 0xDF, 0xA1, 0x36, 0xA7, 0xDF, 0xD7, 0x3C, 0x01, 0xB4, 0x08, 0x7F, 0xEF, 0x30, 0x6F, 0x3C, 0x5B, 0xE5, 0x4A, 0x0F, 0x8A, 0xE9, 0xF1, 0xED, 0x8C, 0x71, 0x48, ++ 0x02, 0x09, 0x25, 0x33, 0x60, 0x6B, 0x9C, 0xA5, 0xAC, 0xBA, 0xC6, 0xE0, 0x31, 0x3F, 0xBC, 0xC7, 0xD5, 0xE2, 0xF1, 0x7E, 0xB2, 0xDC, 0x53, 0x99, 0xE6, 0xF1, 0x12, 0x19, 0x1A, 0x41, 0x7D, 0x99, ++ 0xA3, 0xA6, 0xAB, 0xEC, 0xF9, 0x1F, 0x33, 0xD9, 0xED, 0xFF, 0x05, 0x27, 0x93, 0xC1, 0xC6, 0xFC, 0xAF, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x13, 0x16, 0x1A, 0x25, 0x2A, 0x30, 0x32, ++ }, ++ }, + }; + + #define DILITHIUM_TV_NUM sizeof(dilithium_tv)/sizeof(struct DILITHIUM_TEST_VECTOR) +diff --git a/testcases/crypto/dilithium_func.c b/testcases/crypto/dilithium_func.c +index 0d125e5d..338efc85 100644 +--- a/testcases/crypto/dilithium_func.c ++++ b/testcases/crypto/dilithium_func.c +@@ -21,10 +21,11 @@ + #include "defs.h" + #include "dilithium.h" + #include "mechtable.h" ++#include "pqc_oids.h" + + /** + * Experimental Support for Dilithium keys and signatures +- * with oid = 1.3.6.1.4.1.2.267.1.6.5 ++ * with oid = 1.3.6.1.4.1.2.267.xxx + * + * Only SignInit and Sign(Single) is supported with Dilithium. + * SignUpdate/SignFinal are not supported. Same with Verify. +@@ -34,14 +35,48 @@ typedef struct signVerifyParam { + CK_ULONG inputlen; + } _signVerifyParam; + +-_signVerifyParam signVerifyInput[] = { ++const _signVerifyParam signVerifyInput[] = { + {CKM_IBM_DILITHIUM, 0}, + {CKM_IBM_DILITHIUM, 1}, + {CKM_IBM_DILITHIUM, 32}, + {CKM_IBM_DILITHIUM, 59}, +- {CKM_IBM_DILITHIUM, 5900}, ++ {CKM_IBM_DILITHIUM, 3000}, /* Not all variants support larger sizes */ + }; + ++const CK_BYTE dilithium_r2_65[] = OCK_DILITHIUM_R2_65; ++const CK_ULONG dilithium_r2_65_len = sizeof(dilithium_r2_65); ++const CK_BYTE dilithium_r2_87[] = OCK_DILITHIUM_R2_87; ++const CK_ULONG dilithium_r2_87_len = sizeof(dilithium_r2_87); ++const CK_BYTE dilithium_r3_44[] = OCK_DILITHIUM_R3_44; ++const CK_ULONG dilithium_r3_44_len = sizeof(dilithium_r3_44); ++const CK_BYTE dilithium_r3_65[] = OCK_DILITHIUM_R3_65; ++const CK_ULONG dilithium_r3_65_len = sizeof(dilithium_r3_65); ++const CK_BYTE dilithium_r3_87[] = OCK_DILITHIUM_R3_87; ++const CK_ULONG dilithium_r3_87_len = sizeof(dilithium_r3_87); ++ ++typedef struct variant_info { ++ const char *name; ++ CK_ULONG keyform; ++ const CK_BYTE *oid; ++ CK_ULONG oid_len; ++} _variant_info; ++ ++const _variant_info variants[] = { ++ { "DEFAULT (DILITHIUM_R2_65)", 0, NULL, 0 }, ++ { "DILITHIUM_R2_65", CK_IBM_DILITHIUM_KEYFORM_ROUND2_65, ++ dilithium_r2_65, dilithium_r2_65_len }, ++ { "DILITHIUM_R2_87", CK_IBM_DILITHIUM_KEYFORM_ROUND2_87, ++ dilithium_r2_87, dilithium_r2_87_len }, ++ { "DILITHIUM_R3_44", CK_IBM_DILITHIUM_KEYFORM_ROUND3_44, ++ dilithium_r3_44, dilithium_r3_44_len }, ++ { "DILITHIUM_R3_65", CK_IBM_DILITHIUM_KEYFORM_ROUND3_65, ++ dilithium_r3_65, dilithium_r3_65_len }, ++ { "DILITHIUM_R3_87", CK_IBM_DILITHIUM_KEYFORM_ROUND3_87, ++ dilithium_r3_87, dilithium_r3_87_len }, ++}; ++ ++const CK_ULONG num_variants = sizeof(variants) / sizeof(_variant_info); ++ + CK_RV run_SignVerifyDilithium(CK_SESSION_HANDLE session, + CK_MECHANISM_TYPE mechType, + CK_ULONG inputlen, +@@ -98,7 +133,6 @@ CK_RV run_SignVerifyDilithium(CK_SESSION_HANDLE session, + testcase_error("C_Sign rc=%s", p11_get_ckr(rc)); + goto testcase_cleanup; + } +- + signature = calloc(sizeof(CK_BYTE), signaturelen); + if (signature == NULL) { + testcase_error("Can't allocate memory for %lu bytes", +@@ -242,7 +276,7 @@ CK_RV run_GenerateDilithiumKeyPairSignVerify() + CK_OBJECT_HANDLE publ_key = CK_INVALID_HANDLE, priv_key = CK_INVALID_HANDLE; + CK_SESSION_HANDLE session; + CK_BYTE user_pin[PKCS11_MAX_PIN_LEN]; +- CK_ULONG user_pin_len, j; ++ CK_ULONG user_pin_len, j, i; + CK_FLAGS flags; + CK_MECHANISM_INFO mech_info; + CK_RV rc; +@@ -260,7 +294,7 @@ CK_RV run_GenerateDilithiumKeyPairSignVerify() + rc = funcs->C_GetMechanismInfo(SLOT_ID, mech.mechanism, &mech_info); + if (rc != CKR_OK) { + if (rc == CKR_MECHANISM_INVALID) { +- /* no support for EC key gen? skip */ ++ /* no support for Dilithium key gen? skip */ + testcase_skip("Slot %u doesn't support CKM_IBM_DILITHIUM ", + (unsigned int) SLOT_ID); + rc = CKR_OK; +@@ -271,42 +305,85 @@ CK_RV run_GenerateDilithiumKeyPairSignVerify() + } + } + +- /* Setup attributes for public/private Dilithium key */ +- CK_BBOOL attr_sign = TRUE; +- CK_BBOOL attr_verify = TRUE; +- CK_ATTRIBUTE dilithium_attr_private[] = { +- {CKA_SIGN, &attr_sign, sizeof(CK_BBOOL)}, +- }; +- CK_ATTRIBUTE dilithium_attr_public[] = { +- {CKA_VERIFY, &attr_verify, sizeof(CK_BBOOL)}, +- }; +- +- /* Generate Dilithium key pair */ +- rc = funcs->C_GenerateKeyPair(session, &mech, +- dilithium_attr_public, 1, +- dilithium_attr_private, 1, +- &publ_key, &priv_key); +- testcase_new_assertion(); +- if (rc != CKR_OK) { +- testcase_fail +- ("C_GenerateKeyPair with valid input failed, rc=%s", +- p11_get_ckr(rc)); +- goto testcase_cleanup; +- } +- testcase_pass("*Generate Dilithium key pair passed."); +- +- /* Sign/verify with this key pair */ +- for (j = 0; j < (sizeof(signVerifyInput) / sizeof(_signVerifyParam)); j++) { ++ for (i = 0; i < 2 * num_variants; i++) { ++ /* Setup attributes for public/private Dilithium key */ ++ CK_BBOOL attr_sign = TRUE; ++ CK_BBOOL attr_verify = TRUE; ++ CK_ATTRIBUTE dilithium_attr_private_keyform[] = { ++ {CKA_SIGN, &attr_sign, sizeof(CK_BBOOL)}, ++ {CKA_IBM_DILITHIUM_KEYFORM, ++ (CK_BYTE *)&variants[i % num_variants].keyform, sizeof(CK_ULONG)}, ++ }; ++ CK_ATTRIBUTE dilithium_attr_public_keyform[] = { ++ {CKA_VERIFY, &attr_verify, sizeof(CK_BBOOL)}, ++ {CKA_IBM_DILITHIUM_KEYFORM, ++ (CK_BYTE *)&variants[i % num_variants].keyform, sizeof(CK_ULONG)}, ++ }; ++ CK_ATTRIBUTE dilithium_attr_private_mode[] = { ++ {CKA_SIGN, &attr_sign, sizeof(CK_BBOOL)}, ++ {CKA_IBM_DILITHIUM_MODE, ++ (CK_BYTE *)variants[i % num_variants].oid, variants[i % num_variants].oid_len}, ++ }; ++ CK_ATTRIBUTE dilithium_attr_public_mode[] = { ++ {CKA_VERIFY, &attr_verify, sizeof(CK_BBOOL)}, ++ {CKA_IBM_DILITHIUM_MODE, ++ (CK_BYTE *)variants[i % num_variants].oid, variants[i % num_variants].oid_len}, ++ }; ++ CK_ATTRIBUTE *dilithium_attr_private = i < num_variants ? ++ dilithium_attr_private_keyform : ++ dilithium_attr_private_mode; ++ CK_ATTRIBUTE *dilithium_attr_public = i < num_variants ? ++ dilithium_attr_public_keyform : ++ dilithium_attr_public_mode; ++ CK_ULONG num_dilithium_attrs = ++ (variants[i % num_variants].oid == NULL) ? 1 : 2; ++ ++ /* Generate Dilithium key pair */ ++ rc = funcs->C_GenerateKeyPair(session, &mech, ++ dilithium_attr_public, num_dilithium_attrs, ++ dilithium_attr_private, num_dilithium_attrs, ++ &publ_key, &priv_key); + testcase_new_assertion(); +- rc = run_SignVerifyDilithium(session, +- signVerifyInput[j].mechtype, +- signVerifyInput[j].inputlen, +- priv_key, publ_key); +- if (rc != 0) { +- testcase_fail("run_SignVerifyDilithium failed index=%lu.", j); +- goto testcase_cleanup; ++ if (rc != CKR_OK) { ++ if (rc == CKR_KEY_SIZE_RANGE) { ++ testcase_skip("C_GenerateKeyPair with %s (%s) not supported", ++ variants[i % num_variants].name, ++ i < num_variants ? "KEYFORM" : "MODE"); ++ goto next; ++ } else { ++ testcase_fail("C_GenerateKeyPair with %s (%s) and valid input failed, rc=%s", ++ variants[i % num_variants].name, ++ i < num_variants ? "KEYFORM" : "MODE", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ } ++ testcase_pass("*Generate Dilithium key pair with %s (%s) passed.", ++ variants[i % num_variants].name, ++ i < num_variants ? "KEYFORM" : "MODE"); ++ ++ /* Sign/verify with this key pair */ ++ for (j = 0; j < (sizeof(signVerifyInput) / sizeof(_signVerifyParam)); j++) { ++ testcase_new_assertion(); ++ rc = run_SignVerifyDilithium(session, ++ signVerifyInput[j].mechtype, ++ signVerifyInput[j].inputlen, ++ priv_key, publ_key); ++ if (rc != 0) { ++ testcase_fail("run_SignVerifyDilithium with %s failed index=%lu.", ++ variants[i % num_variants].name, j); ++ goto next; ++ } ++ testcase_pass("*Sign & verify with %s j=%lu passed.", ++ variants[i % num_variants].name, j); + } +- testcase_pass("*Sign & verify j=%lu passed.", j); ++ ++next: ++ if (publ_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, publ_key); ++ publ_key = CK_INVALID_HANDLE; ++ if (priv_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, priv_key); ++ priv_key = CK_INVALID_HANDLE; + } + + rc = CKR_OK; +@@ -345,7 +422,7 @@ CK_RV run_ImportDilithiumKeyPairSignVerify() + rc = funcs->C_GetMechanismInfo(SLOT_ID, mech.mechanism, &mech_info); + if (rc != CKR_OK) { + if (rc == CKR_MECHANISM_INVALID) { +- /* no support for EC key gen? skip */ ++ /* no support for Dilithium key gen? skip */ + testcase_skip("Slot %u doesn't support CKM_IBM_DILITHIUM", + (unsigned int) SLOT_ID); + goto testcase_cleanup; +@@ -357,10 +434,13 @@ CK_RV run_ImportDilithiumKeyPairSignVerify() + + for (i = 0; i < DILITHIUM_TV_NUM; i++) { + +- testcase_begin("Starting Dilithium import key pair, Sign/Verify, KAT index=%lu", i); ++ testcase_begin("Starting Dilithium import key pair, Sign/Verify, %s index=%lu", ++ dilithium_tv[i].name, i); + + /* Create Dilithium private key */ + rc = create_DilithiumPrivateKey(session, ++ dilithium_tv[i].pkcs8, dilithium_tv[i].pkcs8_len, ++ dilithium_tv[i].keyform, + dilithium_tv[i].rho, dilithium_tv[i].rho_len, + dilithium_tv[i].seed, dilithium_tv[i].seed_len, + dilithium_tv[i].tr, dilithium_tv[i].tr_len, +@@ -371,7 +451,11 @@ CK_RV run_ImportDilithiumKeyPairSignVerify() + &priv_key); + testcase_new_assertion(); + if (rc != CKR_OK) { +- if (rc == CKR_POLICY_VIOLATION) { ++ if (rc == CKR_KEY_SIZE_RANGE) { ++ testcase_skip("C_CreateObject with %s not supported", ++ dilithium_tv[i].name); ++ continue; ++ } else if (rc == CKR_POLICY_VIOLATION) { + testcase_skip("Dilithium key import is not allowed by policy"); + continue; + } +@@ -384,12 +468,18 @@ CK_RV run_ImportDilithiumKeyPairSignVerify() + + /* Create Dilithium public key */ + rc = create_DilithiumPublicKey(session, ++ dilithium_tv[i].spki, dilithium_tv[i].spki_len, ++ dilithium_tv[i].keyform, + dilithium_tv[i].rho, dilithium_tv[i].rho_len, + dilithium_tv[i].t1, dilithium_tv[i].t1_len, + &publ_key); + testcase_new_assertion(); + if (rc != CKR_OK) { +- if (rc == CKR_POLICY_VIOLATION) { ++ if (rc == CKR_KEY_SIZE_RANGE) { ++ testcase_skip("C_CreateObject with %s not supported", ++ dilithium_tv[i].name); ++ goto testcase_cleanup; ++ } else if (rc == CKR_POLICY_VIOLATION) { + testcase_skip("Dilithium key import is not allowed by policy"); + goto testcase_cleanup; + } +@@ -553,7 +643,7 @@ CK_RV run_TransferDilithiumKeyPairSignVerify() + rc = funcs->C_GetMechanismInfo(SLOT_ID, mech.mechanism, &mech_info); + if (rc != CKR_OK) { + if (rc == CKR_MECHANISM_INVALID) { +- /* no support for EC key gen? skip */ ++ /* no support for Dilithium key gen? skip */ + testcase_skip("Slot %u doesn't support CKM_IBM_DILITHIUM", + (unsigned int) SLOT_ID); + goto testcase_cleanup; +@@ -569,6 +659,8 @@ CK_RV run_TransferDilithiumKeyPairSignVerify() + + /* Create Dilithium private key */ + rc = create_DilithiumPrivateKey(session, ++ dilithium_tv[i].pkcs8, dilithium_tv[i].pkcs8_len, ++ dilithium_tv[i].keyform, + dilithium_tv[i].rho, dilithium_tv[i].rho_len, + dilithium_tv[i].seed, dilithium_tv[i].seed_len, + dilithium_tv[i].tr, dilithium_tv[i].tr_len, +@@ -579,7 +671,11 @@ CK_RV run_TransferDilithiumKeyPairSignVerify() + &priv_key); + testcase_new_assertion(); + if (rc != CKR_OK) { +- if (rc == CKR_POLICY_VIOLATION) { ++ if (rc == CKR_KEY_SIZE_RANGE) { ++ testcase_skip("C_CreateObject with %s not supported", ++ dilithium_tv[i].name); ++ continue; ++ } else if (rc == CKR_POLICY_VIOLATION) { + testcase_skip("Dilithium key import is not allowed by policy"); + continue; + } +@@ -593,12 +689,18 @@ CK_RV run_TransferDilithiumKeyPairSignVerify() + + /* Create Dilithium public key */ + rc = create_DilithiumPublicKey(session, ++ dilithium_tv[i].spki, dilithium_tv[i].spki_len, ++ dilithium_tv[i].keyform, + dilithium_tv[i].rho, dilithium_tv[i].rho_len, + dilithium_tv[i].t1, dilithium_tv[i].t1_len, + &publ_key); + testcase_new_assertion(); + if (rc != CKR_OK) { +- if (rc == CKR_POLICY_VIOLATION) { ++ if (rc == CKR_KEY_SIZE_RANGE) { ++ testcase_skip("C_CreateObject with %s not supported", ++ dilithium_tv[i].name); ++ goto testcase_cleanup; ++ } else if (rc == CKR_POLICY_VIOLATION) { + testcase_skip("Dilithium key import is not allowed by policy"); + goto testcase_cleanup; + } +-- +2.16.2.windows.1 + diff --git a/SOURCES/0025-COMMON-EP11-Add-Kyber-key-type-and-mechanism.patch b/SOURCES/0025-COMMON-EP11-Add-Kyber-key-type-and-mechanism.patch new file mode 100644 index 0000000..f9a5d14 --- /dev/null +++ b/SOURCES/0025-COMMON-EP11-Add-Kyber-key-type-and-mechanism.patch @@ -0,0 +1,1435 @@ +From 49ce634ed6fa1fddc2bb34fd0f89c0ea0cc368ee Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Tue, 1 Mar 2022 09:15:15 +0100 +Subject: [PATCH 25/34] COMMON/EP11: Add Kyber key type and mechanism + +Kyber requires an EP11 host library of version 4.0 or later, +and a CEX8P crypto card. + +Signed-off-by: Ingo Franzki +--- + usr/lib/api/mechtable.inc | 1 + + usr/lib/api/policy.c | 2 + + usr/lib/common/asn1.c | 563 +++++++++++++++++++++++++++++++++++ + usr/lib/common/h_extern.h | 59 ++++ + usr/lib/common/key.c | 476 +++++++++++++++++++++++++++++ + usr/lib/common/key_mgr.c | 10 + + usr/lib/common/mech_ec.c | 3 + + usr/lib/common/template.c | 12 + + usr/lib/ep11_stdll/ep11_specific.c | 42 ++- + usr/lib/ep11_stdll/ep11cpfilter.conf | 2 +- + 10 files changed, 1167 insertions(+), 3 deletions(-) + +diff --git a/usr/lib/api/mechtable.inc b/usr/lib/api/mechtable.inc +index e3d14e3e..7aa72fbf 100644 +--- a/usr/lib/api/mechtable.inc ++++ b/usr/lib/api/mechtable.inc +@@ -84,6 +84,7 @@ const struct mechrow mechtable_rows[] = + { "CKM_IBM_EC_X448", CKM_IBM_EC_X448, 0, MC_INFORMATION_UNAVAILABLE, MCF_DERIVE }, + { "CKM_IBM_ED25519_SHA512", CKM_IBM_ED25519_SHA512, 128, MC_KEY_DEPENDENT, MCF_SIGNVERIFY }, + { "CKM_IBM_ED448_SHA3", CKM_IBM_ED448_SHA3, 144, MC_KEY_DEPENDENT, MCF_SIGNVERIFY }, ++ { "CKM_IBM_KYBER", CKM_IBM_KYBER, 0, MC_KEY_DEPENDENT, MCF_KEYGEN | MCF_ENCRYPTDECRYPT | MCF_DERIVE | MCF_NEEDSPARAM}, + { "CKM_IBM_SHA3_224", CKM_IBM_SHA3_224, 144, 24, MCF_DIGEST }, + { "CKM_IBM_SHA3_224_HMAC", CKM_IBM_SHA3_224_HMAC, 144, 24, MCF_SIGNVERIFY }, + { "CKM_IBM_SHA3_256", CKM_IBM_SHA3_256, 136, 32, MCF_DIGEST }, +diff --git a/usr/lib/api/policy.c b/usr/lib/api/policy.c +index 4bee5180..b513a8a9 100644 +--- a/usr/lib/api/policy.c ++++ b/usr/lib/api/policy.c +@@ -333,6 +333,7 @@ static CK_RV policy_extract_key_data(get_attr_val_f getattr, void *d, + *comptarget = COMPARE_SYMMETRIC; + break; + case CKK_IBM_PQC_DILITHIUM: ++ case CKK_IBM_PQC_KYBER: + rv = policy_get_pqc_args(*(CK_ULONG *)keytype->pValue, getattr, d, + free_attr, size, siglen, oid, oidlen); + *comptarget = COMPARE_PQC; +@@ -1062,6 +1063,7 @@ static CK_RV policy_update_mech_info(policy_t p, CK_MECHANISM_TYPE mech, + } + break; + case CKM_IBM_DILITHIUM: ++ case CKM_IBM_KYBER: + break; + case CKM_IBM_SHA3_224: + case CKM_IBM_SHA3_256: +diff --git a/usr/lib/common/asn1.c b/usr/lib/common/asn1.c +index 85d3924c..87cc5dfc 100644 +--- a/usr/lib/common/asn1.c ++++ b/usr/lib/common/asn1.c +@@ -4384,3 +4384,566 @@ cleanup: + + return rc; + } ++ ++/** ++ * An IBM Kyber public key is given by: ++ * ++ * SEQUENCE (2 elem) ++ * SEQUENCE (2 elem) ++ * OBJECT IDENTIFIER 1.3.6.1.4.1.2.267.5.xxx ++ * NULL ++ * BIT STRING (1 elem) ++ * SEQUENCE (1 elem) ++ * pk BIT STRING -- public key ++ */ ++CK_RV ber_encode_IBM_KyberPublicKey(CK_BBOOL length_only, ++ CK_BYTE **data, CK_ULONG *data_len, ++ const CK_BYTE *oid, CK_ULONG oid_len, ++ CK_ATTRIBUTE *pk) ++{ ++ CK_BYTE *buf = NULL, *buf2 = NULL, *buf3 = NULL, *buf4 = NULL; ++ CK_BYTE *buf5 = NULL, *algid = NULL; ++ CK_ULONG len, len4, offset, total, total_len, algid_len; ++ CK_RV rc; ++ ++ UNUSED(length_only); ++ ++ offset = 0; ++ rc = 0; ++ total_len = 0; ++ total = 0; ++ ++ /* Calculate storage for AlgID sequence */ ++ rc |= ber_encode_SEQUENCE(TRUE, NULL, &total_len, NULL, ++ oid_len + ber_NULLLen); ++ ++ /* Calculate storage for inner sequence */ ++ rc |= ber_encode_INTEGER(TRUE, NULL, &len, NULL, pk->ulValueLen); ++ offset += len; ++ ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ber_encode_Int failed with rc=0x%lx\n", __func__, rc); ++ return rc; ++ } ++ ++ /* Allocate storage for inner sequence */ ++ buf = (CK_BYTE *) malloc(offset); ++ if (!buf) { ++ TRACE_ERROR("%s Memory allocation failed\n", __func__); ++ return CKR_HOST_MEMORY; ++ } ++ ++ /** ++ * SEQUENCE (1 elem) ++ * BIT STRING -> pk ++ */ ++ offset = 0; ++ rc = ber_encode_BIT_STRING(FALSE, &buf2, &len, ++ pk->pValue, pk->ulValueLen, 0); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ber_encode_Int failed with rc=0x%lx\n", __func__, rc); ++ goto error; ++ } ++ memcpy(buf + offset, buf2, len); ++ offset += len; ++ free(buf2); ++ ++ rc = ber_encode_SEQUENCE(FALSE, &buf2, &len, buf, offset); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ber_encode_Seq failed with rc=0x%lx\n", __func__, rc); ++ goto error; ++ } ++ free(buf); ++ buf = NULL; ++ ++ /* Calculate length of outer sequence */ ++ rc = ber_encode_BIT_STRING(TRUE, NULL, &total, buf2, len, 0); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ber_encode_Oct_Str failed with rc=0x%lx\n", __func__, rc); ++ goto error; ++ } else { ++ total_len += total; ++ } ++ ++ /* Allocate storage for outer sequence and bit string */ ++ buf3 = (CK_BYTE *) malloc(total_len); ++ if (!buf3) { ++ TRACE_ERROR("%s Memory allocation failed\n", __func__); ++ rc = CKR_HOST_MEMORY; ++ goto error; ++ } ++ ++ /* ++ * SEQUENCE (2 elem) ++ * OBJECT IDENTIFIER 1.3.6.1.4.1.2.267.5.xxx ++ * NULL <- no parms for this oid ++ */ ++ buf5 = (CK_BYTE *) malloc(oid_len + ber_NULLLen); ++ if (!buf5) { ++ TRACE_ERROR("%s Memory allocation failed\n", __func__); ++ rc = CKR_HOST_MEMORY; ++ goto error; ++ } ++ memcpy(buf5, oid, oid_len); ++ memcpy(buf5 + oid_len, ber_NULL, ber_NULLLen); ++ ++ rc = ber_encode_SEQUENCE(FALSE, &algid, &algid_len, buf5, ++ oid_len + ber_NULLLen); ++ free(buf5); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ber_encode_SEQUENCE failed with rc=0x%lx\n", __func__, rc); ++ goto error; ++ } ++ ++ total_len = algid_len; ++ memcpy(buf3, algid, algid_len); ++ free(algid); ++ algid = NULL; ++ ++ /* ++ * BIT STRING (1 elem) ++ * SEQUENCE (1 elem) ++ * BIT STRING -> pk ++ */ ++ rc = ber_encode_BIT_STRING(FALSE, &buf4, &len4, buf2, len, 0); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ber_encode_BIT_STRING failed with rc=0x%lx\n", __func__, rc); ++ goto error; ++ } ++ memcpy(buf3 + total_len, buf4, len4); ++ total_len += len4; ++ free(buf4); ++ buf4 = NULL; ++ ++ /** ++ * SEQUENCE (2 elem) ++ * SEQUENCE (2 elem) ++ * OBJECT IDENTIFIER 1.3.6.1.4.1.2.267.5.xxx ++ * NULL -> no parms for this oid ++ * BIT STRING (1 elem) ++ * SEQUENCE (2 elem) ++ * BIT STRING -> pk ++ */ ++ rc = ber_encode_SEQUENCE(FALSE, data, data_len, buf3, total_len); ++ if (rc != CKR_OK) ++ TRACE_ERROR("%s ber_encode_Seq failed with rc=0x%lx\n", __func__, rc); ++ ++error: ++ ++ if (buf) ++ free(buf); ++ if (buf2) ++ free(buf2); ++ if (buf3) ++ free(buf3); ++ ++ return rc; ++} ++ ++CK_RV ber_decode_IBM_KyberPublicKey(CK_BYTE *data, ++ CK_ULONG data_len, ++ CK_ATTRIBUTE **pk_attr, ++ CK_ATTRIBUTE **value_attr, ++ const struct pqc_oid **oid) ++{ ++ CK_ATTRIBUTE *pk_attr_temp = NULL; ++ CK_ATTRIBUTE *value_attr_temp = NULL; ++ ++ CK_BYTE *algoid = NULL; ++ CK_ULONG algoid_len; ++ CK_BYTE *param = NULL; ++ CK_ULONG param_len; ++ CK_BYTE *val = NULL; ++ CK_ULONG val_len; ++ CK_BYTE *seq; ++ CK_ULONG seq_len; ++ CK_BYTE *pk; ++ CK_ULONG pk_len; ++ CK_ULONG field_len, raw_spki_len; ++ CK_RV rc; ++ ++ UNUSED(data_len); // XXX can this parameter be removed ? ++ ++ rc = ber_decode_SPKI(data, &algoid, &algoid_len, ¶m, ¶m_len, ++ &val, &val_len); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("ber_decode_SPKI failed\n"); ++ return rc; ++ } ++ ++ *oid = find_pqc_by_oid(kyber_oids, algoid, algoid_len); ++ if (*oid == NULL) { ++ TRACE_ERROR("%s\n", ock_err(ERR_FUNCTION_FAILED)); ++ return CKR_FUNCTION_FAILED; ++ } ++ ++ /* Decode sequence: ++ * SEQUENCE (1 elem) ++ * BIT STRING = pk ++ */ ++ rc = ber_decode_SEQUENCE(val, &seq, &seq_len, &field_len); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("ber_decode_SEQUENCE failed\n"); ++ return rc; ++ } ++ ++ /* Decode pk */ ++ rc = ber_decode_BIT_STRING(seq, &pk, &pk_len, &field_len); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("ber_decode_INTEGER failed\n"); ++ return rc; ++ } ++ pk++; /* Remove unused-bits byte */ ++ pk_len--; ++ ++ /* Build pk attribute */ ++ rc = build_attribute(CKA_IBM_KYBER_PK, pk, pk_len, &pk_attr_temp); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("build_attribute failed\n"); ++ goto cleanup; ++ } ++ ++ /* Add raw SPKI as CKA_VALUE to public key (z/OS ICSF compatibility) */ ++ rc = ber_decode_SEQUENCE(data, &val, &val_len, &raw_spki_len); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ber_decode_SEQUENCE failed with rc=0x%lx\n", __func__, rc); ++ goto cleanup; ++ } ++ rc = build_attribute(CKA_VALUE, data, raw_spki_len, &value_attr_temp); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("build_attribute failed\n"); ++ goto cleanup; ++ } ++ ++ *pk_attr = pk_attr_temp; ++ *value_attr = value_attr_temp; ++ ++ return CKR_OK; ++ ++cleanup: ++ if (pk_attr_temp) ++ free(pk_attr_temp); ++ if (value_attr_temp) ++ free(value_attr_temp); ++ ++ return rc; ++} ++ ++/** ++ * An IBM Kyber private key is given by: ++ * ++ * KyberPrivateKey ::= SEQUENCE { ++ * version INTEGER, -- v0, reserved 0 ++ * sk BIT STRING, -- private key ++ * pk [0] IMPLICIT OPTIONAL { ++ * pk||rs BIT STRING -- public key (pk) concatenated with 2x32 bytes rs ++ * } ++ * } ++ */ ++CK_RV ber_encode_IBM_KyberPrivateKey(CK_BBOOL length_only, ++ CK_BYTE **data, ++ CK_ULONG *data_len, ++ const CK_BYTE *oid, CK_ULONG oid_len, ++ CK_ATTRIBUTE *sk, ++ CK_ATTRIBUTE *pk) ++{ ++ CK_BYTE *buf = NULL, *buf2 = NULL, *buf3 = NULL; ++ CK_BYTE *algid = NULL, *algid_buf = NULL, *pk_rs = NULL; ++ CK_ULONG len, len2 = 0, offset, algid_len = 0; ++ CK_BYTE version[] = { 0 }; ++ CK_RV rc; ++ ++ /* Calculate storage for sequence */ ++ offset = 0; ++ rc = 0; ++ ++ rc |= ber_encode_SEQUENCE(TRUE, NULL, &algid_len, NULL, ++ oid_len + ber_NULLLen); ++ ++ rc |= ber_encode_INTEGER(TRUE, NULL, &len, NULL, sizeof(version)); ++ offset += len; ++ rc |= ber_encode_BIT_STRING(TRUE, NULL, &len, NULL, sk->ulValueLen, 0); ++ offset += len; ++ if (pk) { ++ rc |= ber_encode_BIT_STRING(TRUE, NULL, &len2, NULL, ++ pk->ulValueLen + 64, 0); ++ rc |= ber_encode_CHOICE(TRUE, 0, NULL, &len, NULL, len2); ++ offset += len; ++ } ++ ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("Calculate storage for sequence failed\n"); ++ return CKR_FUNCTION_FAILED; ++ } ++ ++ if (length_only == TRUE) { ++ rc = ber_encode_SEQUENCE(TRUE, NULL, &len, NULL, offset); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("ber_encode_SEQUENCE failed\n"); ++ return rc; ++ } ++ rc = ber_encode_PrivateKeyInfo(TRUE, ++ NULL, data_len, ++ NULL, algid_len, ++ NULL, len); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("ber_encode_PrivateKeyInfo failed\n"); ++ return rc; ++ } ++ return rc; ++ } ++ ++ /* Allocate storage for sequence */ ++ buf = (CK_BYTE *) malloc(offset); ++ if (!buf) { ++ TRACE_ERROR("%s\n", ock_err(ERR_HOST_MEMORY)); ++ return CKR_HOST_MEMORY; ++ } ++ offset = 0; ++ ++ /* Version */ ++ rc = ber_encode_INTEGER(FALSE, &buf2, &len, version, sizeof(version)); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("ber_encode_INTEGER of version failed\n"); ++ goto error; ++ } ++ memcpy(buf + offset, buf2, len); ++ offset += len; ++ free(buf2); ++ buf2 = NULL; ++ ++ /* sk */ ++ rc = ber_encode_BIT_STRING(FALSE, &buf2, &len, ++ sk->pValue, sk->ulValueLen, 0); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("ber_encode_BIT_STRING of sk failed\n"); ++ goto error; ++ } ++ memcpy(buf + offset, buf2, len); ++ offset += len; ++ free(buf2); ++ buf2 = NULL; ++ ++ /* (pk) Optional bit-string of public key */ ++ if (pk && pk->pValue) { ++ /* append rs to public key */ ++ pk_rs = (CK_BYTE *)malloc(pk->ulValueLen + 64); ++ if (!pk_rs) { ++ TRACE_ERROR("%s\n", ock_err(ERR_HOST_MEMORY)); ++ rc = CKR_HOST_MEMORY; ++ goto error; ++ } ++ ++ memcpy(pk_rs, pk->pValue, pk->ulValueLen); ++ memset(pk_rs + pk->ulValueLen, 0x30, 64); ++ ++ rc = ber_encode_BIT_STRING(FALSE, &buf3, &len2, ++ pk_rs, pk->ulValueLen + 64, 0); ++ rc |= ber_encode_CHOICE(FALSE, 0, &buf2, &len, buf3, len2); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("encoding of pk value failed\n"); ++ goto error; ++ } ++ memcpy(buf + offset, buf2, len); ++ offset += len; ++ free(buf2); ++ buf2 = NULL; ++ } ++ ++ /* Encode sequence */ ++ rc = ber_encode_SEQUENCE(FALSE, &buf2, &len, buf, offset); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("ber_encode_SEQUENCE failed\n"); ++ goto error; ++ } ++ ++ algid_buf = (CK_BYTE *) malloc(oid_len + ber_NULLLen); ++ if (!algid_buf) { ++ TRACE_ERROR("%s Memory allocation failed\n", __func__); ++ rc = CKR_HOST_MEMORY; ++ goto error; ++ } ++ memcpy(algid_buf, oid, oid_len); ++ memcpy(algid_buf + oid_len, ber_NULL, ber_NULLLen); ++ ++ rc = ber_encode_SEQUENCE(FALSE, &algid, &algid_len, algid_buf, ++ oid_len + ber_NULLLen); ++ free(algid_buf); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ber_encode_SEQUENCE failed with rc=0x%lx\n", __func__, rc); ++ goto error; ++ } ++ ++ rc = ber_encode_PrivateKeyInfo(FALSE, ++ data, data_len, ++ algid, algid_len, ++ buf2, len); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("ber_encode_PrivateKeyInfo failed\n"); ++ } ++ ++error: ++ if (buf3) ++ free(buf3); ++ if (buf2) ++ free(buf2); ++ if (buf) ++ free(buf); ++ if (algid) ++ free(algid); ++ if (pk_rs) ++ free(pk_rs); ++ ++ return rc; ++} ++ ++/** ++ * decode an IBM Kyber private key: ++ * ++ * KyberPrivateKey ::= SEQUENCE { ++ * version INTEGER, -- v0, reserved 0 ++ * sk BIT STRING, -- private key ++ * pk [0] IMPLICIT OPTIONAL { ++ * pk||rs BIT STRING -- public key (pk) concatenated with 2x32 bytes rs ++ * } ++ * } ++ */ ++CK_RV ber_decode_IBM_KyberPrivateKey(CK_BYTE *data, ++ CK_ULONG data_len, ++ CK_ATTRIBUTE **sk, ++ CK_ATTRIBUTE **pk, ++ CK_ATTRIBUTE **value, ++ const struct pqc_oid **oid) ++{ ++ CK_ATTRIBUTE *sk_attr = NULL, *pk_attr = NULL, *value_attr = NULL; ++ CK_BYTE *algoid = NULL; ++ CK_BYTE *kyber_priv_key = NULL; ++ CK_BYTE *buf = NULL; ++ CK_BYTE *tmp = NULL; ++ CK_ULONG offset, buf_len, field_len, len, option; ++ CK_RV rc; ++ ++ /* Check if this is a Kyber private key */ ++ rc = ber_decode_PrivateKeyInfo(data, data_len, &algoid, &len, ++ &kyber_priv_key); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("ber_decode_PrivateKeyInfo failed\n"); ++ return rc; ++ } ++ ++ if (len <= ber_NULLLen || ++ memcmp(algoid + len - ber_NULLLen, ber_NULL, ber_NULLLen) != 0) { ++ TRACE_ERROR("%s\n", ock_err(ERR_FUNCTION_FAILED)); ++ return CKR_FUNCTION_FAILED; ++ } ++ len -= ber_NULLLen; ++ *oid = find_pqc_by_oid(kyber_oids, algoid, len); ++ if (*oid == NULL) { ++ TRACE_ERROR("%s\n", ock_err(ERR_FUNCTION_FAILED)); ++ return CKR_FUNCTION_FAILED; ++ } ++ ++ /* Decode private Kyber key */ ++ rc = ber_decode_SEQUENCE(kyber_priv_key, &buf, &buf_len, &field_len); ++ if (rc != CKR_OK) ++ return rc; ++ ++ /* Now build the attributes */ ++ offset = 0; ++ ++ /* Skip the version */ ++ rc = ber_decode_INTEGER(buf + offset, &tmp, &len, &field_len); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("ber_decode_INTEGER failed\n"); ++ goto cleanup; ++ } ++ offset += field_len; ++ ++ /* sk */ ++ rc = ber_decode_BIT_STRING(buf + offset, &tmp, &len, &field_len); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("ber_decode_BIT_STRING of (sk) failed\n"); ++ goto cleanup; ++ } else { ++ tmp++; /* Remove unused-bits byte */ ++ len--; ++ rc = build_attribute(CKA_IBM_KYBER_SK, tmp, len, &sk_attr); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("build_attribute for (sk) failed\n"); ++ goto cleanup; ++ } ++ offset += field_len; ++ } ++ ++ /* pk (optional, within choice) */ ++ if (offset < buf_len) { ++ rc = ber_decode_CHOICE(buf + offset, &tmp, &len, &field_len, &option); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("ber_decode_BIT_STRING of (t1) failed\n"); ++ goto cleanup; ++ } ++ ++ if (option != 0x00) { ++ TRACE_DEVEL("ber_decode_CHOICE returned invalid option %ld\n", ++ option); ++ goto cleanup; ++ } ++ ++ offset += field_len - len; ++ ++ rc = ber_decode_BIT_STRING(buf + offset, &tmp, &len, &field_len); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("ber_decode_BIT_STRING of (pk) failed\n"); ++ goto cleanup; ++ } ++ tmp++; /* Remove unused-bits byte */ ++ len--; ++ ++ if (len > 64) ++ len -= 64; /* Remove 'rs' */ ++ ++ rc = build_attribute(CKA_IBM_KYBER_PK, tmp, len, &pk_attr); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("build_attribute for (pk) failed\n"); ++ goto cleanup; ++ } ++ offset += field_len; ++ } ++ ++ /* Check if buffer big enough */ ++ if (offset > buf_len) { ++ TRACE_ERROR("%s\n", ock_err(ERR_FUNCTION_FAILED)); ++ rc = CKR_FUNCTION_FAILED; ++ goto cleanup; ++ } ++ ++ /* Add private key as CKA_VALUE to public key (z/OS ICSF compatibility) */ ++ rc = ber_decode_SEQUENCE(data, &tmp, &len, &field_len); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ber_decode_SEQUENCE failed with rc=0x%lx\n", __func__, rc); ++ goto cleanup; ++ } ++ rc = build_attribute(CKA_VALUE, data, field_len, &value_attr); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("build_attribute for (t1) failed\n"); ++ goto cleanup; ++ } ++ ++ *sk = sk_attr; ++ *pk = pk_attr; ++ *value = value_attr; ++ ++ return CKR_OK; ++ ++cleanup: ++ ++ if (sk_attr) ++ free(sk_attr); ++ if (pk_attr) ++ free(pk_attr); ++ if (value_attr) ++ free(value_attr); ++ ++ return rc; ++} ++ +diff --git a/usr/lib/common/h_extern.h b/usr/lib/common/h_extern.h +index fdbcacd9..ee1ae08d 100644 +--- a/usr/lib/common/h_extern.h ++++ b/usr/lib/common/h_extern.h +@@ -2505,6 +2505,40 @@ CK_RV ibm_dilithium_priv_unwrap(TEMPLATE *tmpl, CK_BYTE *data, + CK_RV ibm_dilithium_priv_unwrap_get_data(TEMPLATE *tmpl, + CK_BYTE *data, CK_ULONG total_length, + CK_BBOOL add_value); ++ ++// Kyber routines ++// ++CK_RV ibm_kyber_publ_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode); ++CK_RV ibm_kyber_publ_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode); ++CK_RV ibm_kyber_publ_validate_attribute(STDLL_TokData_t *tokdata, TEMPLATE *tmpl, ++ CK_ATTRIBUTE *attr, CK_ULONG mode); ++CK_RV ibm_kyber_publ_get_spki(TEMPLATE *tmpl, CK_BBOOL length_only, ++ CK_BYTE **data, CK_ULONG *data_len); ++CK_RV ibm_kyber_priv_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode); ++CK_RV ibm_kyber_priv_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode); ++CK_RV ibm_kyber_priv_validate_attribute(STDLL_TokData_t *tokdata, TEMPLATE *tmpl, ++ CK_ATTRIBUTE *attr, CK_ULONG mode); ++CK_RV ibm_kyber_priv_wrap_get_data(TEMPLATE *tmpl, CK_BBOOL length_only, ++ CK_BYTE **data, CK_ULONG *data_len); ++CK_RV ibm_kyber_priv_unwrap(TEMPLATE *tmpl, CK_BYTE *data, ++ CK_ULONG total_length, CK_BBOOL add_value); ++CK_RV ibm_kyber_priv_unwrap_get_data(TEMPLATE *tmpl, ++ CK_BYTE *data, CK_ULONG total_length, ++ CK_BBOOL add_value); ++ ++// PQC helper routines ++// ++CK_RV ibm_pqc_publ_get_spki(TEMPLATE *tmpl, CK_KEY_TYPE keytype, ++ CK_BBOOL length_only, ++ CK_BYTE **data, CK_ULONG *data_len); ++CK_RV ibm_pqc_priv_wrap_get_data(TEMPLATE *tmpl, CK_KEY_TYPE keytype, ++ CK_BBOOL length_only, ++ CK_BYTE **data, CK_ULONG *data_len); ++CK_RV ibm_pqc_priv_unwrap(TEMPLATE *tmpl, CK_KEY_TYPE keytype, CK_BYTE *data, ++ CK_ULONG total_length, CK_BBOOL add_value); ++CK_RV ibm_pqc_priv_unwrap_get_data(TEMPLATE *tmpl, CK_KEY_TYPE keytype, ++ CK_BYTE *data, CK_ULONG total_length, ++ CK_BBOOL add_value); + const struct pqc_oid *ibm_pqc_get_keyform_mode(TEMPLATE *tmpl, + CK_MECHANISM_TYPE mech); + CK_RV ibm_pqc_add_keyform_mode(TEMPLATE *tmpl, const struct pqc_oid *oid, +@@ -2782,6 +2816,31 @@ CK_RV ber_decode_IBM_DilithiumPrivateKey(CK_BYTE *data, + CK_ATTRIBUTE **value, + const struct pqc_oid **oid); + ++CK_RV ber_encode_IBM_KyberPublicKey(CK_BBOOL length_only, ++ CK_BYTE **data, CK_ULONG *data_len, ++ const CK_BYTE *oid, CK_ULONG oid_len, ++ CK_ATTRIBUTE *pk); ++ ++CK_RV ber_decode_IBM_KyberPublicKey(CK_BYTE *data, ++ CK_ULONG data_len, ++ CK_ATTRIBUTE **pk_attr, ++ CK_ATTRIBUTE **value_attr, ++ const struct pqc_oid **oid); ++ ++CK_RV ber_encode_IBM_KyberPrivateKey(CK_BBOOL length_only, ++ CK_BYTE **data, ++ CK_ULONG *data_len, ++ const CK_BYTE *oid, CK_ULONG oid_len, ++ CK_ATTRIBUTE *sk, ++ CK_ATTRIBUTE *pk); ++ ++CK_RV ber_decode_IBM_KyberPrivateKey(CK_BYTE *data, ++ CK_ULONG data_len, ++ CK_ATTRIBUTE **sk, ++ CK_ATTRIBUTE **pk, ++ CK_ATTRIBUTE **value, ++ const struct pqc_oid **oid); ++ + typedef CK_RV (*t_rsa_encrypt)(STDLL_TokData_t *, CK_BYTE *in_data, + CK_ULONG in_data_len, CK_BYTE *out_data, + OBJECT *key_obj); +diff --git a/usr/lib/common/key.c b/usr/lib/common/key.c +index ba40cefd..ef329452 100644 +--- a/usr/lib/common/key.c ++++ b/usr/lib/common/key.c +@@ -722,6 +722,9 @@ CK_RV publ_key_get_spki(TEMPLATE *tmpl, CK_ULONG keytype, CK_BBOOL length_only, + case CKK_IBM_PQC_DILITHIUM: + rc = ibm_dilithium_publ_get_spki(tmpl, length_only, data, data_len); + break; ++ case CKK_IBM_PQC_KYBER: ++ rc = ibm_kyber_publ_get_spki(tmpl, length_only, data, data_len); ++ break; + default: + TRACE_ERROR("%s\n", ock_err(ERR_KEY_TYPE_INCONSISTENT)); + return CKR_KEY_TYPE_INCONSISTENT; +@@ -1053,6 +1056,9 @@ CK_RV priv_key_unwrap(TEMPLATE *tmpl, + case CKK_IBM_PQC_DILITHIUM: + rc = ibm_dilithium_priv_unwrap(tmpl, data, data_len, TRUE); + break; ++ case CKK_IBM_PQC_KYBER: ++ rc = ibm_kyber_priv_unwrap(tmpl, data, data_len, TRUE); ++ break; + default: + TRACE_ERROR("%s\n", ock_err(ERR_WRAPPED_KEY_INVALID)); + return CKR_WRAPPED_KEY_INVALID; +@@ -3030,6 +3036,240 @@ error: + return rc; + } + ++/* ++ * Extract the SubjectPublicKeyInfo from the Kyber public key ++ */ ++CK_RV ibm_kyber_publ_get_spki(TEMPLATE *tmpl, CK_BBOOL length_only, ++ CK_BYTE **data, CK_ULONG *data_len) ++{ ++ CK_ATTRIBUTE *pk = NULL; ++ const struct pqc_oid *oid; ++ CK_RV rc; ++ ++ oid = ibm_pqc_get_keyform_mode(tmpl, CKM_IBM_KYBER); ++ if (oid == NULL) ++ return CKR_TEMPLATE_INCOMPLETE; ++ ++ rc = template_attribute_get_non_empty(tmpl, CKA_IBM_KYBER_PK, &pk); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("Could not find CKA_IBM_KYBER_PK for the key.\n"); ++ return rc; ++ } ++ ++ rc = ber_encode_IBM_KyberPublicKey(length_only, data, data_len, ++ oid->oid, oid->oid_len, pk); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("ber_encode_IBM_KyberPublicKey failed.\n"); ++ return rc; ++ } ++ ++ return CKR_OK; ++} ++ ++ ++CK_RV ibm_kyber_priv_wrap_get_data(TEMPLATE *tmpl, ++ CK_BBOOL length_only, ++ CK_BYTE **data, CK_ULONG *data_len) ++{ ++ CK_ATTRIBUTE *sk = NULL, *pk = NULL; ++ const struct pqc_oid *oid; ++ CK_RV rc; ++ ++ oid = ibm_pqc_get_keyform_mode(tmpl, CKM_IBM_KYBER); ++ if (oid == NULL) ++ return CKR_TEMPLATE_INCOMPLETE; ++ ++ rc = template_attribute_get_non_empty(tmpl, CKA_IBM_KYBER_SK, &sk); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("Could not find CKA_IBM_KYBER_SK for the key.\n"); ++ return rc; ++ } ++ ++ rc = template_attribute_get_non_empty(tmpl, CKA_IBM_KYBER_PK, &pk); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("Could not find CKA_IBM_KYBER_PK for the key.\n"); ++ return rc; ++ } ++ ++ rc = ber_encode_IBM_KyberPrivateKey(length_only, data, data_len, ++ oid->oid, oid->oid_len, sk, pk); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("ber_encode_IBM_KyberPrivateKey failed\n"); ++ } ++ ++ return rc; ++} ++ ++CK_RV ibm_kyber_priv_unwrap_get_data(TEMPLATE *tmpl, CK_BYTE *data, ++ CK_ULONG total_length, ++ CK_BBOOL add_value) ++{ ++ CK_ATTRIBUTE *pk = NULL; ++ CK_ATTRIBUTE *value = NULL; ++ const struct pqc_oid *oid; ++ CK_RV rc; ++ ++ rc = ber_decode_IBM_KyberPublicKey(data, total_length, &pk, ++ &value, &oid); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("ber_decode_IBM_KyberPublicKey failed\n"); ++ return rc; ++ } ++ ++ rc = ibm_pqc_add_keyform_mode(tmpl, oid, CKM_IBM_KYBER); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("ibm_pqc_add_keyform_mode failed\n"); ++ return rc; ++ } ++ ++ rc = template_update_attribute(tmpl, pk); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("template_update_attribute failed.\n"); ++ goto error; ++ } ++ pk = NULL; ++ if (add_value) { ++ rc = template_update_attribute(tmpl, value); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("template_update_attribute failed.\n"); ++ goto error; ++ } ++ } else { ++ free(value); ++ } ++ value = NULL; ++ ++ return CKR_OK; ++ ++error: ++ if (pk) ++ free(pk); ++ if (value) ++ free(value); ++ ++ return rc; ++} ++ ++// ++// ++CK_RV ibm_kyber_priv_unwrap(TEMPLATE *tmpl, CK_BYTE *data, ++ CK_ULONG total_length, CK_BBOOL add_value) ++{ ++ CK_ATTRIBUTE *sk = NULL, *pk = NULL, *value = NULL; ++ const struct pqc_oid *oid; ++ CK_RV rc; ++ ++ rc = ber_decode_IBM_KyberPrivateKey(data, total_length, ++ &sk, &pk, &value, &oid); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("ber_decode_IBM_KyberPrivateKey failed\n"); ++ return rc; ++ } ++ ++ rc = ibm_pqc_add_keyform_mode(tmpl, oid, CKM_IBM_KYBER); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("ibm_pqc_add_keyform_mode failed\n"); ++ return rc; ++ } ++ ++ rc = template_update_attribute(tmpl, sk); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("template_update_attribute failed\n"); ++ goto error; ++ } ++ sk = NULL; ++ rc = template_update_attribute(tmpl, pk); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("template_update_attribute failed\n"); ++ goto error; ++ } ++ pk = NULL; ++ if (add_value) { ++ rc = template_update_attribute(tmpl, value); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("template_update_attribute failed.\n"); ++ goto error; ++ } ++ } else { ++ free(value); ++ } ++ value = NULL; ++ ++ return CKR_OK; ++ ++error: ++ if (sk) ++ free(sk); ++ if (pk) ++ free(pk); ++ if (value) ++ free(value); ++ ++ return rc; ++} ++ ++CK_RV ibm_pqc_publ_get_spki(TEMPLATE *tmpl, CK_KEY_TYPE keytype, ++ CK_BBOOL length_only, ++ CK_BYTE **data, CK_ULONG *data_len) ++{ ++ switch (keytype) { ++ case CKK_IBM_PQC_DILITHIUM: ++ return ibm_dilithium_publ_get_spki(tmpl, length_only, data, data_len); ++ case CKK_IBM_PQC_KYBER: ++ return ibm_kyber_publ_get_spki(tmpl, length_only, data, data_len); ++ default: ++ TRACE_DEVEL("Key type 0x%lx not supported.\n", keytype); ++ return CKR_KEY_TYPE_INCONSISTENT; ++ } ++} ++ ++CK_RV ibm_pqc_priv_wrap_get_data(TEMPLATE *tmpl, CK_KEY_TYPE keytype, ++ CK_BBOOL length_only, ++ CK_BYTE **data, CK_ULONG *data_len) ++{ ++ switch (keytype) { ++ case CKK_IBM_PQC_DILITHIUM: ++ return ibm_dilithium_priv_wrap_get_data(tmpl, length_only, data, ++ data_len); ++ case CKK_IBM_PQC_KYBER: ++ return ibm_kyber_priv_wrap_get_data(tmpl, length_only, data, data_len); ++ default: ++ TRACE_DEVEL("Key type 0x%lx not supported.\n", keytype); ++ return CKR_KEY_TYPE_INCONSISTENT; ++ } ++} ++ ++CK_RV ibm_pqc_priv_unwrap(TEMPLATE *tmpl, CK_KEY_TYPE keytype, CK_BYTE *data, ++ CK_ULONG total_length, CK_BBOOL add_value) ++{ ++ switch (keytype) { ++ case CKK_IBM_PQC_DILITHIUM: ++ return ibm_dilithium_priv_unwrap(tmpl, data, total_length, add_value); ++ case CKK_IBM_PQC_KYBER: ++ return ibm_kyber_priv_unwrap(tmpl, data, total_length, add_value); ++ default: ++ TRACE_DEVEL("Key type 0x%lx not supported.\n", keytype); ++ return CKR_KEY_TYPE_INCONSISTENT; ++ } ++} ++ ++CK_RV ibm_pqc_priv_unwrap_get_data(TEMPLATE *tmpl, CK_KEY_TYPE keytype, ++ CK_BYTE *data, CK_ULONG total_length, ++ CK_BBOOL add_value) ++{ ++ switch (keytype) { ++ case CKK_IBM_PQC_DILITHIUM: ++ return ibm_dilithium_priv_unwrap_get_data(tmpl, data, total_length, ++ add_value); ++ case CKK_IBM_PQC_KYBER: ++ return ibm_kyber_priv_unwrap_get_data(tmpl, data, total_length, ++ add_value); ++ default: ++ TRACE_DEVEL("Key type 0x%lx not supported.\n", keytype); ++ return CKR_KEY_TYPE_INCONSISTENT; ++ } ++} ++ + // dsa_publ_check_required_attributes() + // + CK_RV dsa_publ_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode) +@@ -4987,6 +5227,152 @@ error: + return rc; + } + ++// ibm_dilithium_publ_set_default_attributes() ++// ++CK_RV ibm_kyber_publ_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) ++{ ++ CK_ATTRIBUTE *type_attr = NULL; ++ CK_ATTRIBUTE *pk_attr = NULL; ++ CK_ATTRIBUTE *value_attr = NULL; ++ CK_RV rc; ++ ++ publ_key_set_default_attributes(tmpl, mode); ++ ++ type_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE) + sizeof(CK_KEY_TYPE)); ++ pk_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); ++ value_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); ++ ++ if (!type_attr || !pk_attr ||!value_attr) { ++ TRACE_ERROR("%s\n", ock_err(ERR_HOST_MEMORY)); ++ rc = CKR_HOST_MEMORY; ++ goto error; ++ } ++ ++ type_attr->type = CKA_KEY_TYPE; ++ type_attr->ulValueLen = sizeof(CK_KEY_TYPE); ++ type_attr->pValue = (CK_BYTE *) type_attr + sizeof(CK_ATTRIBUTE); ++ *(CK_KEY_TYPE *) type_attr->pValue = CKK_IBM_PQC_KYBER; ++ ++ pk_attr->type = CKA_IBM_KYBER_PK; ++ pk_attr->ulValueLen = 0; ++ pk_attr->pValue = NULL; ++ ++ value_attr->type = CKA_VALUE; ++ value_attr->ulValueLen = 0; ++ value_attr->pValue = NULL; ++ ++ rc = template_update_attribute(tmpl, type_attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("template_update_attribute failed\n"); ++ goto error; ++ } ++ type_attr = NULL; ++ rc = template_update_attribute(tmpl, pk_attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("template_update_attribute failed\n"); ++ goto error; ++ } ++ pk_attr = NULL; ++ rc = template_update_attribute(tmpl, value_attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("template_update_attribute failed\n"); ++ goto error; ++ } ++ value_attr = NULL; ++ ++ return CKR_OK; ++ ++error: ++ if (type_attr) ++ free(type_attr); ++ if (pk_attr) ++ free(pk_attr); ++ if (value_attr) ++ free(value_attr); ++ ++ return rc; ++} ++ ++// ibm_dilithium_priv_set_default_attributes() ++// ++CK_RV ibm_kyber_priv_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode) ++{ ++ CK_ATTRIBUTE *type_attr = NULL; ++ CK_ATTRIBUTE *sk_attr = NULL; ++ CK_ATTRIBUTE *pk_attr = NULL; ++ CK_ATTRIBUTE *value_attr = NULL; ++ CK_RV rc; ++ ++ priv_key_set_default_attributes(tmpl, mode); ++ ++ type_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE) + sizeof(CK_KEY_TYPE)); ++ sk_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); ++ pk_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); ++ value_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE)); ++ ++ if (!type_attr || !sk_attr || !pk_attr || !value_attr) { ++ TRACE_ERROR("%s\n", ock_err(ERR_HOST_MEMORY)); ++ rc = CKR_HOST_MEMORY; ++ goto error; ++ } ++ ++ type_attr->type = CKA_KEY_TYPE; ++ type_attr->ulValueLen = sizeof(CK_KEY_TYPE); ++ type_attr->pValue = (CK_BYTE *) type_attr + sizeof(CK_ATTRIBUTE); ++ *(CK_KEY_TYPE *) type_attr->pValue = CKK_IBM_PQC_KYBER; ++ ++ sk_attr->type = CKA_IBM_KYBER_SK; ++ sk_attr->ulValueLen = 0; ++ sk_attr->pValue = NULL; ++ ++ pk_attr->type = CKA_IBM_KYBER_PK; ++ pk_attr->ulValueLen = 0; ++ pk_attr->pValue = NULL; ++ ++ value_attr->type = CKA_VALUE; ++ value_attr->ulValueLen = 0; ++ value_attr->pValue = NULL; ++ ++ rc = template_update_attribute(tmpl, type_attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("template_update_attribute failed\n"); ++ goto error; ++ } ++ type_attr = NULL; ++ rc = template_update_attribute(tmpl, sk_attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("template_update_attribute failed\n"); ++ goto error; ++ } ++ sk_attr = NULL; ++ rc = template_update_attribute(tmpl, pk_attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("template_update_attribute failed\n"); ++ goto error; ++ } ++ pk_attr = NULL; ++ rc = template_update_attribute(tmpl, value_attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("template_update_attribute failed\n"); ++ goto error; ++ } ++ value_attr = NULL; ++ ++ return CKR_OK; ++ ++error: ++ if (type_attr) ++ free(type_attr); ++ if (sk_attr) ++ free(sk_attr); ++ if (pk_attr) ++ free(pk_attr); ++ if (value_attr) ++ free(value_attr); ++ ++ return rc; ++} ++ + static CK_RV ibm_pqc_check_attributes(TEMPLATE *tmpl, CK_ULONG mode, + CK_MECHANISM_TYPE mech, + CK_ULONG *req_attrs, +@@ -5122,6 +5508,43 @@ CK_RV ibm_dilithium_priv_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode + return priv_key_check_required_attributes(tmpl, mode); + } + ++// ibm_kyber_publ_check_required_attributes() ++// ++CK_RV ibm_kyber_publ_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode) ++{ ++ static CK_ULONG req_attrs[] = { ++ CKA_IBM_KYBER_PK, ++ }; ++ CK_RV rc; ++ ++ rc = ibm_pqc_check_attributes(tmpl, mode, CKM_IBM_KYBER, req_attrs, ++ sizeof(req_attrs) / sizeof(req_attrs[0])); ++ if (rc != CKR_OK) ++ return rc; ++ ++ /* All required attrs found, check them */ ++ return publ_key_check_required_attributes(tmpl, mode); ++} ++ ++// ibm_kyber_priv_check_required_attributes() ++// ++CK_RV ibm_kyber_priv_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode) ++{ ++ static CK_ULONG req_attrs[] = { ++ CKA_IBM_KYBER_SK, ++ CKA_IBM_KYBER_PK, ++ }; ++ CK_RV rc; ++ ++ rc = ibm_pqc_check_attributes(tmpl, mode, CKM_IBM_KYBER, req_attrs, ++ sizeof(req_attrs) / sizeof(req_attrs[0])); ++ if (rc != CKR_OK) ++ return rc; ++ ++ /* All required attrs found, check them */ ++ return priv_key_check_required_attributes(tmpl, mode); ++} ++ + static CK_RV ibm_pqc_validate_keyform_mode(CK_ATTRIBUTE *attr, CK_ULONG mode, + CK_MECHANISM_TYPE mech) + { +@@ -5228,6 +5651,59 @@ CK_RV ibm_dilithium_priv_validate_attribute(STDLL_TokData_t *tokdata, + } + } + ++// ibm_kyber_publ_validate_attribute() ++// ++CK_RV ibm_kyber_publ_validate_attribute(STDLL_TokData_t *tokdata, ++ TEMPLATE *tmpl, CK_ATTRIBUTE *attr, ++ CK_ULONG mode) ++{ ++ CK_RV rc; ++ ++ switch (attr->type) { ++ case CKA_IBM_KYBER_KEYFORM: ++ case CKA_IBM_KYBER_MODE: ++ rc = ibm_pqc_validate_keyform_mode(attr, mode, CKM_IBM_KYBER); ++ if (rc != CKR_OK) ++ return rc; ++ return CKR_OK; ++ case CKA_IBM_KYBER_PK: ++ case CKA_VALUE: ++ if (mode == MODE_CREATE) ++ return CKR_OK; ++ TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_READ_ONLY)); ++ return CKR_ATTRIBUTE_READ_ONLY; ++ default: ++ return publ_key_validate_attribute(tokdata, tmpl, attr, mode); ++ } ++} ++ ++// ibm_kyber_priv_validate_attribute() ++// ++CK_RV ibm_kyber_priv_validate_attribute(STDLL_TokData_t *tokdata, ++ TEMPLATE *tmpl, CK_ATTRIBUTE *attr, ++ CK_ULONG mode) ++{ ++ CK_RV rc; ++ ++ switch (attr->type) { ++ case CKA_IBM_KYBER_KEYFORM: ++ case CKA_IBM_KYBER_MODE: ++ rc = ibm_pqc_validate_keyform_mode(attr, mode, CKM_IBM_KYBER); ++ if (rc != CKR_OK) ++ return rc; ++ return CKR_OK; ++ case CKA_IBM_KYBER_SK: ++ case CKA_IBM_KYBER_PK: ++ case CKA_VALUE: ++ if (mode == MODE_CREATE) ++ return CKR_OK; ++ TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_READ_ONLY)); ++ return CKR_ATTRIBUTE_READ_ONLY; ++ default: ++ return priv_key_validate_attribute(tokdata, tmpl, attr, mode); ++ } ++} ++ + // generic_secret_check_required_attributes() + // + CK_RV generic_secret_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode) +diff --git a/usr/lib/common/key_mgr.c b/usr/lib/common/key_mgr.c +index 01103dc2..8fcdc88e 100644 +--- a/usr/lib/common/key_mgr.c ++++ b/usr/lib/common/key_mgr.c +@@ -1421,6 +1421,16 @@ CK_RV key_mgr_get_private_key_type(CK_BYTE *keydata, + return CKR_OK; + } + } ++ // Check only the OBJECT IDENTIFIERs for KYBER ++ // ++ for (i = 0; kyber_oids[i].oid != NULL; i++) { ++ if (alg_len == kyber_oids[i].oid_len + ber_NULLLen && ++ memcmp(alg, kyber_oids[i].oid, kyber_oids[i].oid_len) == 0 && ++ memcmp(alg + kyber_oids[i].oid_len, ber_NULL, ber_NULLLen) == 0) { ++ *keytype = CKK_IBM_PQC_KYBER; ++ return CKR_OK; ++ } ++ } + + TRACE_ERROR("%s\n", ock_err(ERR_TEMPLATE_INCOMPLETE)); + return CKR_TEMPLATE_INCOMPLETE; +diff --git a/usr/lib/common/mech_ec.c b/usr/lib/common/mech_ec.c +index 9df53b46..3a642f50 100644 +--- a/usr/lib/common/mech_ec.c ++++ b/usr/lib/common/mech_ec.c +@@ -912,6 +912,9 @@ CK_RV pkcs_get_keytype(CK_ATTRIBUTE *attrs, CK_ULONG attrs_len, + case CKM_IBM_DILITHIUM: + *type = CKK_IBM_PQC_DILITHIUM; + break; ++ case CKM_IBM_KYBER: ++ *type = CKK_IBM_PQC_KYBER; ++ break; + default: + return CKR_MECHANISM_INVALID; + } +diff --git a/usr/lib/common/template.c b/usr/lib/common/template.c +index 3338e847..37831efc 100644 +--- a/usr/lib/common/template.c ++++ b/usr/lib/common/template.c +@@ -164,6 +164,8 @@ CK_RV template_add_default_attributes(TEMPLATE *tmpl, TEMPLATE *basetmpl, + return dh_publ_set_default_attributes(tmpl, mode); + case CKK_IBM_PQC_DILITHIUM: + return ibm_dilithium_publ_set_default_attributes(tmpl, mode); ++ case CKK_IBM_PQC_KYBER: ++ return ibm_kyber_publ_set_default_attributes(tmpl, mode); + default: + TRACE_ERROR("%s: %lx\n", ock_err(ERR_ATTRIBUTE_VALUE_INVALID), + subclass); +@@ -181,6 +183,8 @@ CK_RV template_add_default_attributes(TEMPLATE *tmpl, TEMPLATE *basetmpl, + return dh_priv_set_default_attributes(tmpl, mode); + case CKK_IBM_PQC_DILITHIUM: + return ibm_dilithium_priv_set_default_attributes(tmpl, mode); ++ case CKK_IBM_PQC_KYBER: ++ return ibm_kyber_priv_set_default_attributes(tmpl, mode); + default: + TRACE_ERROR("%s: %lx\n", ock_err(ERR_ATTRIBUTE_VALUE_INVALID), + subclass); +@@ -409,6 +413,8 @@ CK_RV template_check_required_attributes(TEMPLATE *tmpl, CK_ULONG class, + return dh_publ_check_required_attributes(tmpl, mode); + case CKK_IBM_PQC_DILITHIUM: + return ibm_dilithium_publ_check_required_attributes(tmpl, mode); ++ case CKK_IBM_PQC_KYBER: ++ return ibm_kyber_publ_check_required_attributes(tmpl, mode); + default: + TRACE_ERROR("%s: %lx\n", ock_err(ERR_ATTRIBUTE_VALUE_INVALID), + subclass); +@@ -426,6 +432,8 @@ CK_RV template_check_required_attributes(TEMPLATE *tmpl, CK_ULONG class, + return dh_priv_check_required_attributes(tmpl, mode); + case CKK_IBM_PQC_DILITHIUM: + return ibm_dilithium_priv_check_required_attributes(tmpl, mode); ++ case CKK_IBM_PQC_KYBER: ++ return ibm_kyber_priv_check_required_attributes(tmpl, mode); + default: + TRACE_ERROR("%s: %lx\n", ock_err(ERR_ATTRIBUTE_VALUE_INVALID), + subclass); +@@ -1642,6 +1650,8 @@ CK_RV template_validate_attribute(STDLL_TokData_t *tokdata, TEMPLATE *tmpl, + return dh_publ_validate_attribute(tokdata, tmpl, attr, mode); + case CKK_IBM_PQC_DILITHIUM: + return ibm_dilithium_publ_validate_attribute(tokdata, tmpl, attr, mode); ++ case CKK_IBM_PQC_KYBER: ++ return ibm_kyber_publ_validate_attribute(tokdata, tmpl, attr, mode); + default: + TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_VALUE_INVALID)); + return CKR_ATTRIBUTE_VALUE_INVALID; // unknown key type +@@ -1658,6 +1668,8 @@ CK_RV template_validate_attribute(STDLL_TokData_t *tokdata, TEMPLATE *tmpl, + return dh_priv_validate_attribute(tokdata, tmpl, attr, mode); + case CKK_IBM_PQC_DILITHIUM: + return ibm_dilithium_priv_validate_attribute(tokdata, tmpl, attr, mode); ++ case CKK_IBM_PQC_KYBER: ++ return ibm_kyber_priv_validate_attribute(tokdata, tmpl, attr, mode); + default: + TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_VALUE_INVALID)); + return CKR_ATTRIBUTE_VALUE_INVALID; // unknown key type +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index 479951cb..44796dba 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -362,6 +362,13 @@ static const version_req_t ibm_dilithium_req_versions[] = { + }; + #define NUM_DILITHIUM_REQ (sizeof(ibm_dilithium_req_versions) / sizeof(version_req_t)) + ++static const CK_VERSION ibm_cex8p_kyber_support = { .major = 8, .minor = 9 }; ++ ++static const version_req_t ibm_kyber_req_versions[] = { ++ { .card_type = 8, .min_firmware_version = &ibm_cex8p_kyber_support } ++}; ++#define NUM_KYBER_REQ (sizeof(ibm_kyber_req_versions) / sizeof(version_req_t)) ++ + static const CK_VERSION ibm_cex6p_reencrypt_single_support = + { .major = 6, .minor = 15 }; + static const CK_VERSION ibm_cex7p_reencrypt_single_support = +@@ -1809,7 +1816,8 @@ static CK_RV check_key_attributes(STDLL_TokData_t * tokdata, + check_types = &check_types_pub[0]; + attr_cnt = sizeof(check_types_pub) / sizeof(CK_ULONG); + } +- /* do nothing for CKM_DH_PKCS_KEY_PAIR_GEN and CKK_IBM_PQC_DILITHIUM */ ++ /* do nothing for CKM_DH_PKCS_KEY_PAIR_GEN, CKK_IBM_PQC_DILITHIUM, ++ and CKK_IBM_PQC_KYBER */ + break; + case CKO_PRIVATE_KEY: + if ((kt == CKK_EC) || (kt == CKK_ECDSA) || (kt == CKK_DSA)) { +@@ -1824,7 +1832,7 @@ static CK_RV check_key_attributes(STDLL_TokData_t * tokdata, + check_types = &check_types_derive[0]; + attr_cnt = sizeof(check_types_derive) / sizeof(CK_ULONG); + } +- /* Do nothing for CKK_IBM_PQC_DILITHIUM */ ++ /* Do nothing for CKK_IBM_PQC_DILITHIUM and CKK_IBM_PQC_KYBER */ + break; + default: + return CKR_OK; +@@ -2029,6 +2037,13 @@ static CK_BBOOL attr_applicable_for_ep11(STDLL_TokData_t * tokdata, + attr->type == CKA_IBM_DILITHIUM_MODE) + return CK_FALSE; + break; ++ case CKK_IBM_PQC_KYBER: ++ if (attr->type == CKA_SIGN || attr->type == CKA_VERIFY || ++ attr->type == CKA_WRAP || attr->type == CKA_UNWRAP || ++ attr->type == CKA_IBM_KYBER_KEYFORM || ++ attr->type == CKA_IBM_KYBER_MODE) ++ return CK_FALSE; ++ break; + default: + break; + } +@@ -9145,6 +9160,10 @@ CK_RV ep11tok_unwrap_key(STDLL_TokData_t * tokdata, SESSION * session, + rc = ibm_dilithium_priv_unwrap_get_data(key_obj->template, + csum, cslen, FALSE); + break; ++ case CKK_IBM_PQC_KYBER: ++ rc = ibm_kyber_priv_unwrap_get_data(key_obj->template, ++ csum, cslen, FALSE); ++ break; + } + + if (rc != 0) { +@@ -9240,6 +9259,7 @@ static const CK_MECHANISM_TYPE ep11_supported_mech_list[] = { + CKM_IBM_EC_X448, + CKM_IBM_ED25519_SHA512, + CKM_IBM_ED448_SHA3, ++ CKM_IBM_KYBER, + CKM_IBM_SHA3_224, + CKM_IBM_SHA3_224_HMAC, + CKM_IBM_SHA3_256, +@@ -9478,6 +9498,7 @@ CK_RV ep11tok_is_mechanism_supported(STDLL_TokData_t *tokdata, + CK_VERSION ver1_3 = { .major = 1, .minor = 3 }; + CK_VERSION ver3 = { .major = 3, .minor = 0 }; + CK_VERSION ver3_1 = { .major = 3, .minor = 0x10 }; ++ CK_VERSION ver4 = { .major = 4, .minor = 0 }; + CK_BBOOL found = FALSE; + CK_ULONG i; + int status; +@@ -9630,6 +9651,23 @@ CK_RV ep11tok_is_mechanism_supported(STDLL_TokData_t *tokdata, + } + break; + ++ case CKM_IBM_KYBER: ++ if (compare_ck_version(&ep11_data->ep11_lib_version, &ver4) < 0) { ++ TRACE_INFO("%s Mech '%s' banned due to host library version\n", ++ __func__, ep11_get_ckm(tokdata, type)); ++ rc = CKR_MECHANISM_INVALID; ++ goto out; ++ } ++ status = check_required_versions(tokdata, ibm_kyber_req_versions, ++ NUM_KYBER_REQ); ++ if (status != 1) { ++ TRACE_INFO("%s Mech '%s' banned due to mixed firmware versions\n", ++ __func__, ep11_get_ckm(tokdata, type)); ++ rc = CKR_MECHANISM_INVALID; ++ goto out; ++ } ++ break; ++ + case CKM_IBM_CPACF_WRAP: + if (compare_ck_version(&ep11_data->ep11_lib_version, &ver3) <= 0) { + TRACE_INFO("%s Mech '%s' banned due to host library version\n", +diff --git a/usr/lib/ep11_stdll/ep11cpfilter.conf b/usr/lib/ep11_stdll/ep11cpfilter.conf +index 9d6a2fc8..4353ec53 100644 +--- a/usr/lib/ep11_stdll/ep11cpfilter.conf ++++ b/usr/lib/ep11_stdll/ep11cpfilter.conf +@@ -73,7 +73,7 @@ XCP_CPB_ALG_EC_25519: CKM_IBM_EC_X25519, CKM_IBM_ED25519_SHA512, CKM_IBM_EC_X448 + XCP_CPB_ALG_NBSI2017: CKM_RSA_PKCS, CKM_SHA1_RSA_PKCS, CKM_SHA224_RSA_PKCS, CKM_SHA256_RSA_PKCS, CKM_SHA384_RSA_PKCS, CKM_SHA512_RSA_PKCS + + #enable support of Dilithium +-XCP_CPB_ALG_PQC: CKM_IBM_DILITHIUM ++XCP_CPB_ALG_PQC: CKM_IBM_DILITHIUM, CKM_IBM_KYBER + + # enable BTC-related functionality + XCP_CPB_BTC: CKM_IBM_BTC_DERIVE +-- +2.16.2.windows.1 + diff --git a/SOURCES/0026-EP11-Add-support-for-generating-and-importing-Kyber-.patch b/SOURCES/0026-EP11-Add-support-for-generating-and-importing-Kyber-.patch new file mode 100644 index 0000000..a0ab0b8 --- /dev/null +++ b/SOURCES/0026-EP11-Add-support-for-generating-and-importing-Kyber-.patch @@ -0,0 +1,479 @@ +From 5b5d1830dadfbbd310c11d26d86426ed63eed936 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Tue, 1 Mar 2022 11:09:26 +0100 +Subject: [PATCH 26/34] EP11: Add support for generating and importing Kyber + keys + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 222 ++++++++++++++++++++++--------------- + 1 file changed, 134 insertions(+), 88 deletions(-) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index 44796dba..bc17b07a 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -3664,14 +3664,14 @@ import_DH_key_end: + } + + /* +- * makes blobs for private imported IBM Dilithium keys and +- * SPKIs for public imported IBM Dilithium keys. ++ * makes blobs for private imported IBM PQC keys and ++ * SPKIs for public imported IBM PQC keys. + * Similar to rawkey_2_blob, but keys must follow a standard BER encoding. + */ +-static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, +- OBJECT *dilithium_key_obj, +- CK_BYTE *blob, size_t *blob_size, +- CK_BYTE *spki, size_t *spki_size) ++static CK_RV import_IBM_pqc_key(STDLL_TokData_t *tokdata, SESSION *sess, ++ OBJECT *pqc_key_obj, CK_KEY_TYPE keytype, ++ CK_BYTE *blob, size_t *blob_size, ++ CK_BYTE *spki, size_t *spki_size) + { + ep11_private_data_t *ep11_data = tokdata->private_data; + CK_RV rc; +@@ -3692,11 +3692,27 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + CK_ATTRIBUTE *value_attr = NULL; + CK_BBOOL data_alloced = TRUE; + const struct pqc_oid *oid; ++ const char *key_type_str; ++ CK_MECHANISM_TYPE pqc_mech; ++ ++ switch (keytype) { ++ case CKK_IBM_PQC_DILITHIUM: ++ key_type_str = "Dilithium"; ++ pqc_mech = CKM_IBM_DILITHIUM; ++ break; ++ case CKK_IBM_PQC_KYBER: ++ key_type_str = "Kyber"; ++ pqc_mech = CKM_IBM_KYBER; ++ break; ++ default: ++ TRACE_ERROR("Invalid key type provided for %s\n ", __func__); ++ return CKR_KEY_TYPE_INCONSISTENT; ++ } + + memcpy(iv, "1234567812345678", AES_BLOCK_SIZE); + + /* need class for secret/public key info */ +- rc = template_attribute_get_ulong(dilithium_key_obj->template, CKA_CLASS, ++ rc = template_attribute_get_ulong(pqc_key_obj->template, CKA_CLASS, + &class); + if (rc != CKR_OK) { + TRACE_ERROR("Could not find CKA_CLASS for the key.\n"); +@@ -3706,20 +3722,20 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + /* m_Unwrap builds key blob in the card, + * tell ep11 the attributes the user specified for that key. + */ +- rc = build_ep11_attrs(tokdata, dilithium_key_obj->template, ++ rc = build_ep11_attrs(tokdata, pqc_key_obj->template, + &p_attrs, &attrs_len, +- CKK_IBM_PQC_DILITHIUM, class, -1, &mech_w); ++ keytype, class, -1, &mech_w); + if (rc != CKR_OK) + goto done; + + if (class != CKO_PRIVATE_KEY) { +- /* Make an SPKI for the public IBM Dilithium key */ ++ /* Make an SPKI for the public IBM PQC key */ + +- /* A public IBM Dilithium key must either have a CKA_VALUE containing ++ /* A public IBM PQC key must either have a CKA_VALUE containing + * the SPKI, or must have a keyform/mode value and the individual + * attributes + */ +- if (template_attribute_find(dilithium_key_obj->template, ++ if (template_attribute_find(pqc_key_obj->template, + CKA_VALUE, &value_attr) && + value_attr->ulValueLen > 0 && value_attr ->pValue != NULL) { + /* CKA_VALUE with SPKI */ +@@ -3731,16 +3747,16 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + * Decode SPKI and add public key attributes. This also adds the + * keyform and mode attributes to the template. + */ +- rc = ibm_dilithium_priv_unwrap_get_data(dilithium_key_obj->template, +- data, data_len, FALSE); ++ rc = ibm_pqc_priv_unwrap_get_data(pqc_key_obj->template, keytype, ++ data, data_len, FALSE); + if (rc != CKR_OK) { + TRACE_ERROR("Failed to decode SPKI from CKA_VALUE.\n"); + goto done; + } + } else { + /* Individual attributes */ +- rc = ibm_dilithium_publ_get_spki(dilithium_key_obj->template, +- FALSE, &data, &data_len); ++ rc = ibm_pqc_publ_get_spki(pqc_key_obj->template, keytype, ++ FALSE, &data, &data_len); + if (rc != CKR_OK) { + TRACE_ERROR("%s public key import class=0x%lx rc=0x%lx " + "data_len=0x%lx\n", __func__, class, rc, data_len); +@@ -3751,15 +3767,13 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + } + + /* Ensure both, keyform and mode attributes are added */ +- oid = ibm_pqc_get_keyform_mode(dilithium_key_obj->template, +- CKM_IBM_DILITHIUM); ++ oid = ibm_pqc_get_keyform_mode(pqc_key_obj->template, pqc_mech); + if (oid == NULL) { + rc = CKR_TEMPLATE_INCOMPLETE; + goto done; + } + +- rc = ibm_pqc_add_keyform_mode(dilithium_key_obj->template, +- oid, CKM_IBM_DILITHIUM); ++ rc = ibm_pqc_add_keyform_mode(pqc_key_obj->template, oid, pqc_mech); + if (rc != CKR_OK) { + TRACE_ERROR("ibm_pqc_add_keyform_mode failed\n"); + goto done; +@@ -3772,7 +3786,7 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + goto done; + } + +- rc = template_update_attribute(dilithium_key_obj->template, ++ rc = template_update_attribute(pqc_key_obj->template, + value_attr); + if (rc != CKR_OK) { + TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", +@@ -3786,7 +3800,7 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + /* save the SPKI as blob although it is not a blob. + * The card expects MACed-SPKIs as public keys. + */ +- rc = make_maced_spki(tokdata, sess, dilithium_key_obj, data, data_len, ++ rc = make_maced_spki(tokdata, sess, pqc_key_obj, data, data_len, + blob, blob_size, -1); + if (rc != CKR_OK) { + TRACE_ERROR("%s failed to make a MACed-SPKI rc=0x%lx\n", +@@ -3798,13 +3812,13 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + + } else { + +- /* imported private IBM Dilithium key goes here */ ++ /* imported private IBM PQC key goes here */ + +- /* A public IBM Dilithium key must either have a CKA_VALUE containing ++ /* A public IBM PQC key must either have a CKA_VALUE containing + * the PKCS#8 encoded private key, or must have a keyform/mode value + * and the individual attributes + */ +- if (template_attribute_find(dilithium_key_obj->template, ++ if (template_attribute_find(pqc_key_obj->template, + CKA_VALUE, &value_attr) && + value_attr->ulValueLen > 0 && value_attr ->pValue != NULL) { + /* CKA_VALUE with SPKI */ +@@ -3813,8 +3827,8 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + data_alloced = FALSE; + + /* Decode PKCS#8 private key and add key attributes */ +- rc = ibm_dilithium_priv_unwrap(dilithium_key_obj->template, +- data, data_len, FALSE); ++ rc = ibm_pqc_priv_unwrap(pqc_key_obj->template, keytype, ++ data, data_len, FALSE); + if (rc != CKR_OK) { + TRACE_ERROR("Failed to decode private key from CKA_VALUE.\n"); + goto done; +@@ -3824,23 +3838,22 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + * padding is done in mechanism. This also adds the keyform and mode + * attributes to the template. + */ +- rc = ibm_dilithium_priv_wrap_get_data(dilithium_key_obj->template, +- FALSE, &data, &data_len); ++ rc = ibm_pqc_priv_wrap_get_data(pqc_key_obj->template, keytype, ++ FALSE, &data, &data_len); + if (rc != CKR_OK) { +- TRACE_DEVEL("%s Dilithium wrap get data failed\n", __func__); ++ TRACE_DEVEL("%s %s wrap get data failed\n", __func__, ++ key_type_str); + goto done; + } + + /* Ensure both, keyform and mode attributes are added */ +- oid = ibm_pqc_get_keyform_mode(dilithium_key_obj->template, +- CKM_IBM_DILITHIUM); ++ oid = ibm_pqc_get_keyform_mode(pqc_key_obj->template, pqc_mech); + if (oid == NULL) { + rc = CKR_TEMPLATE_INCOMPLETE; + goto done; + } + +- rc = ibm_pqc_add_keyform_mode(dilithium_key_obj->template, +- oid, CKM_IBM_DILITHIUM); ++ rc = ibm_pqc_add_keyform_mode(pqc_key_obj->template, oid, pqc_mech); + if (rc != CKR_OK) { + TRACE_ERROR("ibm_pqc_add_keyform_mode failed\n"); + goto done; +@@ -3849,8 +3862,8 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + + /* encrypt */ + RETRY_START(rc, tokdata) +- if (ep11_pqc_obj_strength_supported(target_info, CKM_IBM_DILITHIUM, +- dilithium_key_obj)) ++ if (ep11_pqc_obj_strength_supported(target_info, pqc_mech, ++ pqc_key_obj)) + rc = dll_m_EncryptSingle(ep11_data->raw2key_wrap_blob, + ep11_data->raw2key_wrap_blob_l, + &mech_w, data, data_len, +@@ -3870,8 +3883,7 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + goto done; + } + +- rc = check_key_attributes(tokdata, CKK_IBM_PQC_DILITHIUM, +- CKO_PRIVATE_KEY, ++ rc = check_key_attributes(tokdata, keytype, CKO_PRIVATE_KEY, + p_attrs, attrs_len, + &new_p_attrs, &new_attrs_len, -1); + if (rc != CKR_OK) { +@@ -3880,12 +3892,12 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + goto done; + } + +- trace_attributes(__func__, "Dilithium import:", new_p_attrs, new_attrs_len); ++ trace_attributes(__func__, "PQC import:", new_p_attrs, new_attrs_len); + +- ep11_get_pin_blob(ep11_session, object_is_session_object(dilithium_key_obj), ++ ep11_get_pin_blob(ep11_session, object_is_session_object(pqc_key_obj), + &ep11_pin_blob, &ep11_pin_blob_len); + +- /* calls the card, it decrypts the private Dilithium key, ++ /* calls the card, it decrypts the private PQC key, + * reads its BER format and builds a blob. + */ + RETRY_START(rc, tokdata) +@@ -3908,12 +3920,20 @@ static CK_RV import_IBM_Dilithium_key(STDLL_TokData_t *tokdata, SESSION *sess, + __func__, rc, *blob_size); + } + +- cleanse_attribute(dilithium_key_obj->template, CKA_VALUE); +- cleanse_attribute(dilithium_key_obj->template, CKA_IBM_DILITHIUM_SEED); +- cleanse_attribute(dilithium_key_obj->template, CKA_IBM_DILITHIUM_TR); +- cleanse_attribute(dilithium_key_obj->template, CKA_IBM_DILITHIUM_S1); +- cleanse_attribute(dilithium_key_obj->template, CKA_IBM_DILITHIUM_S2); +- cleanse_attribute(dilithium_key_obj->template, CKA_IBM_DILITHIUM_T0); ++ cleanse_attribute(pqc_key_obj->template, CKA_VALUE); ++ ++ switch (keytype) { ++ case CKK_IBM_PQC_DILITHIUM: ++ cleanse_attribute(pqc_key_obj->template, CKA_IBM_DILITHIUM_SEED); ++ cleanse_attribute(pqc_key_obj->template, CKA_IBM_DILITHIUM_TR); ++ cleanse_attribute(pqc_key_obj->template, CKA_IBM_DILITHIUM_S1); ++ cleanse_attribute(pqc_key_obj->template, CKA_IBM_DILITHIUM_S2); ++ cleanse_attribute(pqc_key_obj->template, CKA_IBM_DILITHIUM_T0); ++ break; ++ case CKK_IBM_PQC_KYBER: ++ cleanse_attribute(pqc_key_obj->template, CKA_IBM_KYBER_SK); ++ break; ++ } + } + + done: +@@ -4020,15 +4040,16 @@ CK_RV token_specific_object_add(STDLL_TokData_t * tokdata, SESSION * sess, + __func__, rc, blobsize); + break; + case CKK_IBM_PQC_DILITHIUM: +- rc = import_IBM_Dilithium_key(tokdata, sess, obj, blob, &blobsize, +- spki, &spkisize); ++ case CKK_IBM_PQC_KYBER: ++ rc = import_IBM_pqc_key(tokdata, sess, obj, keytype, blob, &blobsize, ++ spki, &spkisize); + if (rc != CKR_OK) { +- TRACE_ERROR("%s import IBM Dilithium key rc=0x%lx blobsize=0x%zx\n", +- __func__, rc, blobsize); ++ TRACE_ERROR("%s import IBM PQC key kytype=0x%lx rc=0x%lx blobsize=0x%zx\n", ++ __func__, keytype, rc, blobsize); + return rc; + } +- TRACE_INFO("%s import IBM Dilithium key rc=0x%lx blobsize=0x%zx\n", +- __func__, rc, blobsize); ++ TRACE_INFO("%s import IBM PQC key kytype=0x%lx rc=0x%lx blobsize=0x%zx\n", ++ __func__, keytype, rc, blobsize); + break; + case CKK_DES2: + case CKK_DES3: +@@ -6582,10 +6603,10 @@ error: + return rc; + } + +-static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, +- SESSION *sess, +- CK_MECHANISM_PTR pMechanism, +- TEMPLATE *publ_tmpl, TEMPLATE *priv_tmpl) ++static CK_RV ibm_pqc_generate_keypair(STDLL_TokData_t *tokdata, ++ SESSION *sess, ++ CK_MECHANISM_PTR pMechanism, ++ TEMPLATE *publ_tmpl, TEMPLATE *priv_tmpl) + { + CK_RV rc; + CK_ATTRIBUTE *attr = NULL; +@@ -6593,7 +6614,7 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + size_t privkey_blob_len = sizeof(privkey_blob); + unsigned char spki[MAX_BLOBSIZE]; + size_t spki_len = sizeof(spki); +- CK_ULONG ktype = CKK_IBM_PQC_DILITHIUM; ++ CK_ULONG ktype; + unsigned char *ep11_pin_blob = NULL; + CK_ULONG ep11_pin_blob_len = 0; + ep11_session_t *ep11_session = (ep11_session_t *) sess->private_data; +@@ -6601,9 +6622,19 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + CK_ULONG new_publ_attrs_len = 0, new_priv_attrs_len = 0; + CK_ATTRIBUTE *new_publ_attrs2 = NULL, *new_priv_attrs2 = NULL; + CK_ULONG new_publ_attrs2_len = 0, new_priv_attrs2_len = 0; +- const struct pqc_oid *dilithium_oid; ++ const struct pqc_oid *pqc_oid; ++ const char *key_type_str; + +- if (pMechanism->mechanism != CKM_IBM_DILITHIUM) { ++ switch (pMechanism->mechanism) { ++ case CKM_IBM_DILITHIUM: ++ key_type_str = "Dilithium"; ++ ktype = CKK_IBM_PQC_DILITHIUM; ++ break; ++ case CKM_IBM_KYBER: ++ key_type_str = "Kyber"; ++ ktype = CKK_IBM_PQC_KYBER; ++ break; ++ default: + TRACE_ERROR("Invalid mechanism provided for %s\n ", __func__); + return CKR_MECHANISM_INVALID; + } +@@ -6624,25 +6655,37 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + goto error; + } + +- dilithium_oid = ibm_pqc_get_keyform_mode(publ_tmpl, CKM_IBM_DILITHIUM); +- if (dilithium_oid == NULL) +- dilithium_oid = ibm_pqc_get_keyform_mode(priv_tmpl, CKM_IBM_DILITHIUM); +- if (dilithium_oid == NULL) +- dilithium_oid = find_pqc_by_keyform(dilithium_oids, +- CK_IBM_DILITHIUM_KEYFORM_ROUND2_65); +- if (dilithium_oid == NULL) { +- TRACE_ERROR("%s Failed to determine Dilithium OID\n", __func__); ++ pqc_oid = ibm_pqc_get_keyform_mode(publ_tmpl, pMechanism->mechanism); ++ if (pqc_oid == NULL) ++ pqc_oid = ibm_pqc_get_keyform_mode(priv_tmpl, pMechanism->mechanism); ++ if (pqc_oid == NULL) { ++ switch (pMechanism->mechanism) { ++ case CKM_IBM_DILITHIUM: ++ pqc_oid = find_pqc_by_keyform(dilithium_oids, ++ CK_IBM_DILITHIUM_KEYFORM_ROUND2_65); ++ break; ++ case CKM_IBM_KYBER: ++ pqc_oid = find_pqc_by_keyform(kyber_oids, ++ CK_IBM_KYBER_KEYFORM_ROUND2_1024); ++ break; ++ default: ++ /* pqc_oid stays NULL */ ++ break; ++ } ++ } ++ if (pqc_oid == NULL) { ++ TRACE_ERROR("%s Failed to determine %s OID\n", __func__, key_type_str); + rc = CKR_FUNCTION_FAILED; + goto error; + } + +- TRACE_INFO("%s Generate Dilithium key with keyform %lu\n", __func__, +- dilithium_oid->keyform); ++ TRACE_INFO("%s Generate %s key with keyform %lu\n", __func__, key_type_str, ++ pqc_oid->keyform); + + rc = add_to_attribute_array(&new_publ_attrs, &new_publ_attrs_len, + CKA_IBM_PQC_PARAMS, +- (CK_BYTE *)dilithium_oid->oid, +- dilithium_oid->oid_len); ++ (CK_BYTE *)pqc_oid->oid, ++ pqc_oid->oid_len); + if (rc != CKR_OK) { + TRACE_ERROR("%s add_to_attribute_array failed with rc=0x%lx\n", + __func__, rc); +@@ -6651,8 +6694,8 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + + rc = add_to_attribute_array(&new_priv_attrs, &new_priv_attrs_len, + CKA_IBM_PQC_PARAMS, +- (CK_BYTE *)dilithium_oid->oid, +- dilithium_oid->oid_len); ++ (CK_BYTE *)pqc_oid->oid, ++ pqc_oid->oid_len); + if (rc != CKR_OK) { + TRACE_ERROR("%s add_to_attribute_array failed with rc=0x%lx\n", + __func__, rc); +@@ -6663,8 +6706,8 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + new_publ_attrs, new_publ_attrs_len, + &new_publ_attrs2, &new_publ_attrs2_len, -1); + if (rc != CKR_OK) { +- TRACE_ERROR("%s Dilithium check public key attributes failed with " +- "rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s %s check public key attributes failed with " ++ "rc=0x%lx\n", __func__, key_type_str, rc); + goto error; + } + +@@ -6672,14 +6715,14 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + new_priv_attrs, new_priv_attrs_len, + &new_priv_attrs2, &new_priv_attrs2_len, -1); + if (rc != CKR_OK) { +- TRACE_ERROR("%s Dilithium check private key attributes failed with " +- "rc=0x%lx\n", __func__, rc); ++ TRACE_ERROR("%s %s check private key attributes failed with " ++ "rc=0x%lx\n", __func__, key_type_str, rc); + goto error; + } + +- trace_attributes(__func__, "Dilithium public key attributes:", ++ trace_attributes(__func__, "PQC public key attributes:", + new_publ_attrs2, new_publ_attrs2_len); +- trace_attributes(__func__, "Dilithium private key attributes:", ++ trace_attributes(__func__, "PQC private key attributes:", + new_priv_attrs2, new_priv_attrs2_len); + + ep11_get_pin_blob(ep11_session, +@@ -6691,7 +6734,7 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + + RETRY_START(rc, tokdata) + if (ep11_pqc_strength_supported(target_info, pMechanism->mechanism, +- dilithium_oid)) ++ pqc_oid)) + rc = dll_m_GenerateKeyPair(pMechanism, + new_publ_attrs2, new_publ_attrs2_len, + new_priv_attrs2, new_priv_attrs2_len, +@@ -6752,16 +6795,18 @@ static CK_RV ibm_dilithium_generate_keypair(STDLL_TokData_t *tokdata, + goto error; + } + +- rc = ibm_dilithium_priv_unwrap_get_data(publ_tmpl, spki, spki_len, TRUE); ++ rc = ibm_pqc_priv_unwrap_get_data(publ_tmpl, ktype, ++ spki, spki_len, TRUE); + if (rc != CKR_OK) { +- TRACE_ERROR("%s ibm_dilithium_priv_unwrap_get_data with rc=0x%lx\n", ++ TRACE_ERROR("%s ibm_pqc_priv_unwrap_get_data with rc=0x%lx\n", + __func__, rc); + goto error; + } + +- rc = ibm_dilithium_priv_unwrap_get_data(priv_tmpl, spki, spki_len, FALSE); ++ rc = ibm_pqc_priv_unwrap_get_data(priv_tmpl, ktype, ++ spki, spki_len, FALSE); + if (rc != CKR_OK) { +- TRACE_ERROR("%s ibm_dilithium_priv_unwrap_get_data with rc=0x%lx\n", ++ TRACE_ERROR("%s ibm_pqc_priv_unwrap_get_data with rc=0x%lx\n", + __func__, rc); + goto error; + } +@@ -6854,9 +6899,10 @@ CK_RV ep11tok_generate_key_pair(STDLL_TokData_t * tokdata, SESSION * sess, + private_key_obj->template); + break; + case CKM_IBM_DILITHIUM: +- rc = ibm_dilithium_generate_keypair(tokdata, sess, pMechanism, +- public_key_obj->template, +- private_key_obj->template); ++ case CKM_IBM_KYBER: ++ rc = ibm_pqc_generate_keypair(tokdata, sess, pMechanism, ++ public_key_obj->template, ++ private_key_obj->template); + break; + default: + TRACE_ERROR("%s invalid mech %s\n", __func__, +-- +2.16.2.windows.1 + diff --git a/SOURCES/0027-EP11-Add-support-for-encrypt-decrypt-and-KEM-operati.patch b/SOURCES/0027-EP11-Add-support-for-encrypt-decrypt-and-KEM-operati.patch new file mode 100644 index 0000000..ecb4aea --- /dev/null +++ b/SOURCES/0027-EP11-Add-support-for-encrypt-decrypt-and-KEM-operati.patch @@ -0,0 +1,339 @@ +From 51ed2d7171e5423cfec86c36ffa32e8e9e0de01c Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Tue, 1 Mar 2022 16:55:01 +0100 +Subject: [PATCH 27/34] EP11: Add support for encrypt/decrypt and KEM + operations with Kyber + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 174 ++++++++++++++++++++++++++++++++++--- + usr/lib/ep11_stdll/new_host.c | 24 +++-- + 2 files changed, 180 insertions(+), 18 deletions(-) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index bc17b07a..9efce053 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -5196,6 +5196,126 @@ CK_RV token_specific_aes_cmac(STDLL_TokData_t *tokdata, + return rc; + } + ++struct EP11_KYBER_MECH { ++ CK_MECHANISM mech; ++ struct XCP_KYBER_KEM_PARAMS params; ++}; ++ ++static CK_RV ep11tok_kyber_mech_pre_process(STDLL_TokData_t *tokdata, ++ CK_MECHANISM *mech, ++ struct EP11_KYBER_MECH *mech_ep11, ++ OBJECT **secret_key_obj) ++{ ++ CK_IBM_KYBER_PARAMS *kyber_params; ++ CK_RV rc; ++ ++ kyber_params = mech->pParameter; ++ if (mech->ulParameterLen != sizeof(CK_IBM_KYBER_PARAMS)) { ++ TRACE_ERROR("Mechanism parameter length not as expected\n"); ++ return CKR_MECHANISM_PARAM_INVALID; ++ } ++ ++ if (kyber_params->ulVersion != CK_IBM_KYBER_KEM_VERSION) { ++ TRACE_ERROR("Unsupported version in Kyber mechanism param\n"); ++ return CKR_MECHANISM_PARAM_INVALID; ++ } ++ ++ mech_ep11->mech.mechanism = mech->mechanism; ++ mech_ep11->mech.pParameter = &mech_ep11->params; ++ mech_ep11->mech.ulParameterLen = sizeof(mech_ep11->params); ++ ++ memset(&mech_ep11->params, 0, sizeof(mech_ep11->params)); ++ mech_ep11->params.version = XCP_KYBER_KEM_VERSION; ++ mech_ep11->params.mode = kyber_params->mode; ++ mech_ep11->params.kdf = kyber_params->kdf; ++ mech_ep11->params.prepend = kyber_params->bPrepend; ++ mech_ep11->params.pSharedData = kyber_params->pSharedData; ++ mech_ep11->params.ulSharedDataLen = kyber_params->ulSharedDataLen; ++ ++ switch (kyber_params->mode) { ++ case CK_IBM_KYBER_KEM_ENCAPSULATE: ++ if (kyber_params->ulCipherLen > 0 && kyber_params->pCipher == NULL) { ++ TRACE_ERROR("Unsupported cipher buffer in Kyber mechnism param " ++ "cannot be NULL\n"); ++ return CKR_MECHANISM_PARAM_INVALID; ++ } ++ ++ mech_ep11->params.pCipher = NULL; ++ mech_ep11->params.ulCipherLen = 0; ++ /* Cipher is returned in 2nd output param of m_DeriveKey */ ++ break; ++ ++ case CK_IBM_KEM_DECAPSULATE: ++ mech_ep11->params.pCipher = kyber_params->pCipher; ++ mech_ep11->params.ulCipherLen = kyber_params->ulCipherLen; ++ break; ++ ++ default: ++ TRACE_ERROR("Unsupported mode in Kyber mechanism param\n"); ++ return CKR_MECHANISM_PARAM_INVALID; ++ } ++ ++ if (kyber_params->bPrepend) { ++ rc = h_opaque_2_blob(tokdata, kyber_params->hSecret, ++ &mech_ep11->params.pBlob, ++ &mech_ep11->params.ulBlobLen, ++ secret_key_obj, READ_LOCK); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s failed hSecret=0x%lx\n", __func__, ++ kyber_params->hSecret); ++ return rc; ++ } ++ } ++ ++ return CKR_OK; ++} ++ ++static CK_RV ep11tok_kyber_mech_post_process(STDLL_TokData_t *tokdata, ++ CK_MECHANISM *mech, ++ CK_BYTE *csum, CK_ULONG cslen) ++{ ++ CK_IBM_KYBER_PARAMS *kyber_params; ++ CK_ULONG cipher_len; ++ ++ UNUSED(tokdata); ++ ++ kyber_params = mech->pParameter; ++ if (mech->ulParameterLen != sizeof(CK_IBM_KYBER_PARAMS)) { ++ TRACE_ERROR("Mechanism parameter length not as expected\n"); ++ return CKR_MECHANISM_PARAM_INVALID; ++ } ++ ++ if (kyber_params->mode != CK_IBM_KYBER_KEM_ENCAPSULATE) ++ return CKR_OK; ++ ++ /* ++ * For encapsulate: ++ * Generated cipher is returned in csum prepended with the checksum of ++ * the generated symmetric key and its bit count (in total 7 bytes). ++ */ ++ if (cslen < EP11_CSUMSIZE + 4) { ++ TRACE_ERROR("%s returned cipher size is invalid: %lu\n", ++ __func__, cslen); ++ return CKR_FUNCTION_FAILED; ++ } ++ ++ cipher_len = cslen - (EP11_CSUMSIZE + 4); ++ ++ if (kyber_params->ulCipherLen < cipher_len) { ++ TRACE_ERROR("%s Cipher buffer in kyber mechanism param too small, required: %lu\n", ++ __func__, cipher_len); ++ kyber_params->ulCipherLen = cipher_len; ++ OPENSSL_cleanse(&csum[EP11_CSUMSIZE + 4], cipher_len); ++ return CKR_BUFFER_TOO_SMALL; ++ } ++ ++ memcpy(kyber_params->pCipher, &csum[EP11_CSUMSIZE + 4], cipher_len); ++ kyber_params->ulCipherLen = cipher_len; ++ ++ OPENSSL_cleanse(&csum[EP11_CSUMSIZE + 4], cipher_len); ++ return CKR_OK; ++} ++ + CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, + CK_MECHANISM_PTR mech, CK_OBJECT_HANDLE hBaseKey, + CK_OBJECT_HANDLE_PTR handle, CK_ATTRIBUTE_PTR attrs, +@@ -5236,6 +5356,8 @@ CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, + CK_BYTE *spki = NULL; + CK_ULONG spki_length = 0; + CK_ATTRIBUTE *spki_attr = NULL; ++ struct EP11_KYBER_MECH mech_ep11; ++ OBJECT *kyber_secret_obj = NULL; + + memset(newblob, 0, sizeof(newblob)); + +@@ -5517,16 +5639,29 @@ CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, + } + } + ++ if (mech->mechanism == CKM_IBM_KYBER) { ++ rc = ep11tok_kyber_mech_pre_process(tokdata, mech, &mech_ep11, ++ &kyber_secret_obj); ++ if (rc != CKR_OK) ++ goto error; ++ mech = &mech_ep11.mech; ++ } ++ + trace_attributes(__func__, "Derive:", new_attrs2, new_attrs2_len); + + ep11_get_pin_blob(ep11_session, ep11_is_session_object(attrs, attrs_len), + &ep11_pin_blob, &ep11_pin_blob_len); + + RETRY_START(rc, tokdata) +- rc = +- dll_m_DeriveKey(mech, new_attrs2, new_attrs2_len, keyblob, keyblobsize, +- NULL, 0, ep11_pin_blob, ep11_pin_blob_len, newblob, +- &newblobsize, csum, &cslen, target_info->target); ++ if (ep11_pqc_obj_strength_supported(target_info, mech->mechanism, ++ base_key_obj)) ++ rc = dll_m_DeriveKey(mech, new_attrs2, new_attrs2_len, ++ keyblob, keyblobsize, NULL, 0, ++ ep11_pin_blob, ep11_pin_blob_len, newblob, ++ &newblobsize, csum, &cslen, ++ target_info->target); ++ else ++ rc = CKR_KEY_SIZE_RANGE; + RETRY_END(rc, tokdata, session) + + if (rc != CKR_OK) { +@@ -5610,6 +5745,12 @@ CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, + } + } + ++ if (mech->mechanism == CKM_IBM_KYBER) { ++ rc = ep11tok_kyber_mech_post_process(tokdata, mech_orig, csum, cslen); ++ if (rc != CKR_OK) ++ goto error; ++ } ++ + if (class == CKO_SECRET_KEY && cslen >= EP11_CSUMSIZE) { + /* First 3 bytes of csum is the check value */ + rc = build_attribute(CKA_CHECK_VALUE, csum, EP11_CSUMSIZE, &chk_attr); +@@ -5666,6 +5807,8 @@ error: + + object_put(tokdata, base_key_obj, TRUE); + base_key_obj = NULL; ++ object_put(tokdata, kyber_secret_obj, TRUE); ++ kyber_secret_obj = NULL; + + return rc; + } +@@ -7399,6 +7542,7 @@ CK_BOOL ep11tok_mech_single_only(CK_MECHANISM *mech) + { + switch (mech->mechanism) { + case CKM_IBM_ECDSA_OTHER: ++ case CKM_IBM_KYBER: + return CK_TRUE; + default: + return CK_FALSE; +@@ -8301,9 +8445,14 @@ CK_RV ep11tok_decrypt_single(STDLL_TokData_t *tokdata, SESSION *session, + } + + RETRY_START(rc, tokdata) +- rc = dll_m_DecryptSingle(keyblob, keyblobsize, mech, input_data, +- input_data_len, output_data, p_output_data_len, +- target_info->target); ++ if (ep11_pqc_obj_strength_supported(target_info, mech->mechanism, ++ key_obj)) ++ rc = dll_m_DecryptSingle(keyblob, keyblobsize, mech, input_data, ++ input_data_len, output_data, ++ p_output_data_len, ++ target_info->target); ++ else ++ rc = CKR_KEY_SIZE_RANGE; + RETRY_END(rc, tokdata, session) + if (rc != CKR_OK) { + rc = ep11_error_to_pkcs11_error(rc, session); +@@ -8511,9 +8660,14 @@ CK_RV ep11tok_encrypt_single(STDLL_TokData_t *tokdata, SESSION *session, + } + + RETRY_START(rc, tokdata) +- rc = dll_m_EncryptSingle(keyblob, keyblobsize, mech, input_data, +- input_data_len, output_data, p_output_data_len, +- target_info->target); ++ if (ep11_pqc_obj_strength_supported(target_info, mech->mechanism, ++ key_obj)) ++ rc = dll_m_EncryptSingle(keyblob, keyblobsize, mech, input_data, ++ input_data_len, output_data, ++ p_output_data_len, ++ target_info->target); ++ else ++ rc = CKR_KEY_SIZE_RANGE; + RETRY_END(rc, tokdata, session) + if (rc != CKR_OK) { + rc = ep11_error_to_pkcs11_error(rc, session); +diff --git a/usr/lib/ep11_stdll/new_host.c b/usr/lib/ep11_stdll/new_host.c +index dccdfe96..60027c85 100644 +--- a/usr/lib/ep11_stdll/new_host.c ++++ b/usr/lib/ep11_stdll/new_host.c +@@ -2061,7 +2061,8 @@ CK_RV SC_EncryptInit(STDLL_TokData_t *tokdata, ST_SESSION_HANDLE *sSession, + sess->encr_ctx.multi_init = FALSE; + sess->encr_ctx.multi = FALSE; + +- if (ep11tok_optimize_single_ops(tokdata) && ++ if ((ep11tok_optimize_single_ops(tokdata) || ++ ep11tok_mech_single_only(pMechanism)) && + !ep11tok_pkey_usage_ok(tokdata, sess, hKey, pMechanism)) { + /* In case of a single part encrypt operation we don't need the + * EncryptInit, instead we can use the EncryptSingle which is much +@@ -2159,7 +2160,8 @@ CK_RV SC_Encrypt(STDLL_TokData_t *tokdata, ST_SESSION_HANDLE *sSession, + goto done; + } + +- if (ep11tok_optimize_single_ops(tokdata) && ++ if ((ep11tok_optimize_single_ops(tokdata) || ++ ep11tok_mech_single_only(&sess->encr_ctx.mech)) && + !ep11tok_pkey_usage_ok(tokdata, sess, sess->encr_ctx.key, &sess->encr_ctx.mech)) { + rc = ep11tok_encrypt_single(tokdata, sess, &sess->encr_ctx.mech, + length_only, sess->encr_ctx.key, +@@ -2217,7 +2219,8 @@ CK_RV SC_EncryptUpdate(STDLL_TokData_t *tokdata, ST_SESSION_HANDLE *sSession, + goto done; + } + +- if (sess->encr_ctx.active == FALSE) { ++ if (sess->encr_ctx.active == FALSE || ++ ep11tok_mech_single_only(&sess->encr_ctx.mech)) { + TRACE_ERROR("%s\n", ock_err(ERR_OPERATION_NOT_INITIALIZED)); + rc = CKR_OPERATION_NOT_INITIALIZED; + goto done; +@@ -2293,7 +2296,8 @@ CK_RV SC_EncryptFinal(STDLL_TokData_t * tokdata, ST_SESSION_HANDLE * sSession, + goto done; + } + +- if (sess->encr_ctx.active == FALSE) { ++ if (sess->encr_ctx.active == FALSE || ++ ep11tok_mech_single_only(&sess->encr_ctx.mech)) { + TRACE_ERROR("%s\n", ock_err(ERR_OPERATION_NOT_INITIALIZED)); + rc = CKR_OPERATION_NOT_INITIALIZED; + goto done; +@@ -2385,7 +2389,8 @@ CK_RV SC_DecryptInit(STDLL_TokData_t *tokdata, ST_SESSION_HANDLE *sSession, + sess->decr_ctx.multi_init = FALSE; + sess->decr_ctx.multi = FALSE; + +- if (ep11tok_optimize_single_ops(tokdata) && ++ if ((ep11tok_optimize_single_ops(tokdata) || ++ ep11tok_mech_single_only(pMechanism)) && + !ep11tok_pkey_usage_ok(tokdata, sess, hKey, pMechanism)) { + /* In case of a single part decrypt operation we don't need the + * DecryptInit, instead we can use the EncryptSingle which is much +@@ -2483,7 +2488,8 @@ CK_RV SC_Decrypt(STDLL_TokData_t *tokdata, ST_SESSION_HANDLE *sSession, + goto done; + } + +- if (ep11tok_optimize_single_ops(tokdata) && ++ if ((ep11tok_optimize_single_ops(tokdata) || ++ ep11tok_mech_single_only(&sess->decr_ctx.mech)) && + !ep11tok_pkey_usage_ok(tokdata, sess, sess->decr_ctx.key, &sess->decr_ctx.mech)) { + rc = ep11tok_decrypt_single(tokdata, sess, &sess->decr_ctx.mech, + length_only, sess->decr_ctx.key, +@@ -2541,7 +2547,8 @@ CK_RV SC_DecryptUpdate(STDLL_TokData_t *tokdata, ST_SESSION_HANDLE *sSession, + goto done; + } + +- if (sess->decr_ctx.active == FALSE) { ++ if (sess->decr_ctx.active == FALSE || ++ ep11tok_mech_single_only(&sess->decr_ctx.mech)) { + TRACE_ERROR("%s\n", ock_err(ERR_OPERATION_NOT_INITIALIZED)); + rc = CKR_OPERATION_NOT_INITIALIZED; + goto done; +@@ -2617,7 +2624,8 @@ CK_RV SC_DecryptFinal(STDLL_TokData_t *tokdata, ST_SESSION_HANDLE *sSession, + goto done; + } + +- if (sess->decr_ctx.active == FALSE) { ++ if (sess->decr_ctx.active == FALSE || ++ ep11tok_mech_single_only(&sess->decr_ctx.mech)) { + TRACE_ERROR("%s\n", ock_err(ERR_OPERATION_NOT_INITIALIZED)); + rc = CKR_OPERATION_NOT_INITIALIZED; + goto done; +-- +2.16.2.windows.1 + diff --git a/SOURCES/0028-POLICY-STATISTICS-Check-for-Kyber-KEM-KDFs-and-count.patch b/SOURCES/0028-POLICY-STATISTICS-Check-for-Kyber-KEM-KDFs-and-count.patch new file mode 100644 index 0000000..e7041d2 --- /dev/null +++ b/SOURCES/0028-POLICY-STATISTICS-Check-for-Kyber-KEM-KDFs-and-count.patch @@ -0,0 +1,259 @@ +From 181b11362e95ff8ac4e812073c8f7267a02f1bf1 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Wed, 2 Mar 2022 16:44:27 +0100 +Subject: [PATCH 28/34] POLICY/STATISTICS: Check for Kyber KEM KDFs and count + KDF digest usage + +Signed-off-by: Ingo Franzki +--- + man/man5/policy.conf.5.in | 2 +- + tools/policyexamplegen.c | 8 ++++++- + usr/lib/api/policy.c | 45 ++++++++++++++++++++++++++++++++++++---- + usr/lib/api/statistics.c | 20 +++++++++++++++++- + usr/lib/common/kdf_translation.c | 30 +++++++++++++++++++++++++++ + usr/lib/common/utility_common.c | 5 +++++ + 6 files changed, 103 insertions(+), 7 deletions(-) + +diff --git a/man/man5/policy.conf.5.in b/man/man5/policy.conf.5.in +index 0b8bed27..c04b2adf 100644 +--- a/man/man5/policy.conf.5.in ++++ b/man/man5/policy.conf.5.in +@@ -133,7 +133,7 @@ empty list allows no MGF. + .BR allowedkdfs + + This key specifies the allowed Key Derivation Functions (KDFs) for use +-in ECDH key derivation. The value is a list of ++in ECDH key derivation and Kyber KEM. The value is a list of + .BR CKD_ + constants supported by openCryptoki. This list has the same format as + the +diff --git a/tools/policyexamplegen.c b/tools/policyexamplegen.c +index 1649fc05..362acdf9 100644 +--- a/tools/policyexamplegen.c ++++ b/tools/policyexamplegen.c +@@ -99,7 +99,13 @@ int main(void) + puts(" CKD_SHA224_KDF,"); + puts(" CKD_SHA256_KDF,"); + puts(" CKD_SHA384_KDF,"); +- puts(" CKD_SHA512_KDF"); ++ puts(" CKD_SHA512_KDF,"); ++ puts(" CKD_IBM_HYBRID_NULL,"); ++ puts(" CKD_IBM_HYBRID_SHA1_KDF,"); ++ puts(" CKD_IBM_HYBRID_SHA224_KDF,"); ++ puts(" CKD_IBM_HYBRID_SHA256_KDF,"); ++ puts(" CKD_IBM_HYBRID_SHA384_KDF,"); ++ puts(" CKD_IBM_HYBRID_SHA512_KDF"); + puts(" # No comma after last element!"); + puts(")"); + puts(""); +diff --git a/usr/lib/api/policy.c b/usr/lib/api/policy.c +index b513a8a9..8189dab0 100644 +--- a/usr/lib/api/policy.c ++++ b/usr/lib/api/policy.c +@@ -70,6 +70,7 @@ struct policy_private { + CK_ULONG allowedmgfs; + CK_ULONG allowedvendormgfs; + CK_ULONG allowedkdfs; ++ CK_ULONG allowedvendorkdfs; + CK_ULONG allowedprfs; + CK_ULONG maxcurvesize; + /* Strength struct ordered from highest to lowest. */ +@@ -105,6 +106,7 @@ void policy_private_deactivate(struct policy_private *pp) + pp->allowedmgfs = ~0lu; + pp->allowedvendormgfs = ~0lu; + pp->allowedkdfs = ~0lu; ++ pp->allowedvendorkdfs = ~0lu; + pp->allowedprfs = ~0lu; + pp->maxcurvesize = 521u; + } +@@ -496,8 +498,14 @@ static inline CK_RV policy_is_mgf_allowed(struct policy_private *pp, + static inline CK_RV policy_is_kdf_allowed(struct policy_private *pp, + CK_ULONG kdf) + { +- if (pp->allowedkdfs & (1u << kdf)) +- return CKR_OK; ++ if (kdf > CKD_VENDOR_DEFINED) { ++ if ((kdf - CKD_VENDOR_DEFINED - 1) <= 31 && ++ (pp->allowedvendorkdfs & (1u << (kdf - CKD_VENDOR_DEFINED - 1)))) ++ return CKR_OK; ++ } else { ++ if (kdf <= 31 && (pp->allowedkdfs & (1u << kdf))) ++ return CKR_OK; ++ } + TRACE_WARNING("POLICY VIOLATION: kdf not allowed: 0x%lx\n", kdf); + return CKR_FUNCTION_FAILED; + } +@@ -920,6 +928,16 @@ static CK_RV policy_is_mech_allowed(policy_t p, CK_MECHANISM_PTR mech, + break; + } + break; ++ case CKM_IBM_KYBER: ++ /* Only KEM uses a parameter, KeyGen, Encrypt/Decrypt don't */ ++ if (mech->ulParameterLen != sizeof(CK_IBM_KYBER_PARAMS)) ++ break; ++ if (policy_is_kdf_allowed(pp, ++ ((CK_IBM_KYBER_PARAMS *)mech->pParameter)->kdf) != CKR_OK) { ++ rv = CKR_FUNCTION_FAILED; ++ break; ++ } ++ break; + default: + break; + } +@@ -1533,7 +1551,7 @@ static CK_RV policy_parse_kdfs(struct policy_private *pp, + struct ConfigBaseNode *list) + { + struct ConfigBaseNode *i; +- CK_ULONG kdfs = 0, kdf; ++ CK_ULONG kdfs = 0, vkdfs = 0, kdf; + CK_RV rc = CKR_OK; + int f; + +@@ -1545,10 +1563,28 @@ static CK_RV policy_parse_kdfs(struct policy_private *pp, + i->key, i->line); + break; + } +- kdfs |= (1u << kdf); ++ ++ if (kdf >= CKD_VENDOR_DEFINED) { ++ if ((kdf - CKD_VENDOR_DEFINED - 1) > 31) { ++ TRACE_ERROR("POLICY: KDF invalid: \"%s\" (line %hd)\n", ++ i->key, i->line); ++ rc = CKR_FUNCTION_FAILED; ++ break; ++ } ++ vkdfs |= (1u << (kdf - CKD_VENDOR_DEFINED - 1)); ++ } else { ++ if (kdf > 31) { ++ TRACE_ERROR("POLICY: KDF invalid: \"%s\" (line %hd)\n", ++ i->key, i->line); ++ rc = CKR_FUNCTION_FAILED; ++ break; ++ } ++ kdfs |= (1u << kdf); ++ } + } + } + pp->allowedkdfs = kdfs; ++ pp->allowedvendorkdfs = vkdfs; + return rc; + } + +@@ -1742,6 +1778,7 @@ CK_RV policy_load_policy_cfg(struct policy_private *pp, + if (!allowedkdfs) { + TRACE_DEVEL("POLICY: No KDF restrictions\n"); + pp->allowedkdfs = ~0u; ++ pp->allowedvendorkdfs = ~0u; + } else if (!confignode_hastype(allowedkdfs, CT_BARELIST)) { + TRACE_ERROR("POLICY: allowedkdfs has wrong type!\n"); + OCK_SYSLOG(LOG_ERR, "POLICY: allowedkdfs has wrong type!\n"); +diff --git a/usr/lib/api/statistics.c b/usr/lib/api/statistics.c +index 0830bbeb..e34dfcee 100644 +--- a/usr/lib/api/statistics.c ++++ b/usr/lib/api/statistics.c +@@ -110,7 +110,8 @@ static CK_RV statistics_increment(struct statistics *statistics, + if (mech->pParameter == NULL || + mech->ulParameterLen != sizeof(CK_ECDH1_DERIVE_PARAMS)) + return CKR_MECHANISM_PARAM_INVALID; +- if (((CK_ECDH1_DERIVE_PARAMS *)mech->pParameter)->kdf == CKD_NULL) ++ if (((CK_ECDH1_DERIVE_PARAMS *)mech->pParameter)->kdf == CKD_NULL || ++ ((CK_ECDH1_DERIVE_PARAMS *)mech->pParameter)->kdf == CKD_IBM_HYBRID_NULL) + break; + rc = digest_from_kdf(((CK_ECDH1_DERIVE_PARAMS *)mech->pParameter)->kdf, + &implicit_mech.mechanism); +@@ -156,6 +157,23 @@ static CK_RV statistics_increment(struct statistics *statistics, + break; + } + break; ++ case CKM_IBM_KYBER: ++ /* Only KEM uses a parameter, KeyGen, Encrypt/Decrypt don't */ ++ if (mech->ulParameterLen != sizeof(CK_IBM_KYBER_PARAMS)) ++ break; ++ if (((CK_IBM_KYBER_PARAMS *)mech->pParameter)->kdf == CKD_NULL || ++ ((CK_IBM_KYBER_PARAMS *)mech->pParameter)->kdf == CKD_IBM_HYBRID_NULL) ++ break; ++ rc = digest_from_kdf(((CK_IBM_KYBER_PARAMS *)mech->pParameter)->kdf, ++ &implicit_mech.mechanism); ++ if (rc != CKR_OK) ++ return rc; ++ rc = statistics_increment(statistics, slot, &implicit_mech, ++ POLICY_STRENGTH_IDX_0); ++ if (rc != CKR_OK) ++ return rc; ++ break; ++ + default: + break; + } +diff --git a/usr/lib/common/kdf_translation.c b/usr/lib/common/kdf_translation.c +index 707cb912..f563234f 100644 +--- a/usr/lib/common/kdf_translation.c ++++ b/usr/lib/common/kdf_translation.c +@@ -55,6 +55,36 @@ CK_RV translate_string_to_kdf(const char *str, size_t len, CK_ULONG* kdf) + return CKR_OK; + } + return CKR_FUNCTION_FAILED; ++ case 19: ++ if (strcmp("CKD_IBM_HYBRID_NULL", str) == 0) { ++ *kdf = CKD_IBM_HYBRID_NULL; ++ return CKR_OK; ++ } ++ return CKR_FUNCTION_FAILED; ++ case 23: ++ if (strcmp("CKD_IBM_HYBRID_SHA1_KDF", str) == 0) { ++ *kdf = CKD_IBM_HYBRID_SHA1_KDF; ++ return CKR_OK; ++ } ++ return CKR_FUNCTION_FAILED; ++ case 25: ++ if (strcmp("CKD_IBM_HYBRID_SHA224_KDF", str) == 0) { ++ *kdf = CKD_IBM_HYBRID_SHA224_KDF; ++ return CKR_OK; ++ } ++ if (strcmp("CKD_IBM_HYBRID_SHA256_KDF", str) == 0) { ++ *kdf = CKD_IBM_HYBRID_SHA256_KDF; ++ return CKR_OK; ++ } ++ if (strcmp("CKD_IBM_HYBRID_SHA384_KDF", str) == 0) { ++ *kdf = CKD_IBM_HYBRID_SHA384_KDF; ++ return CKR_OK; ++ } ++ if (strcmp("CKD_IBM_HYBRID_SHA512_KDF", str) == 0) { ++ *kdf = CKD_IBM_HYBRID_SHA512_KDF; ++ return CKR_OK; ++ } ++ return CKR_FUNCTION_FAILED; + default: + return CKR_FUNCTION_FAILED; + } +diff --git a/usr/lib/common/utility_common.c b/usr/lib/common/utility_common.c +index 8d03c699..49ab609f 100644 +--- a/usr/lib/common/utility_common.c ++++ b/usr/lib/common/utility_common.c +@@ -169,18 +169,23 @@ CK_RV digest_from_kdf(CK_EC_KDF_TYPE kdf, CK_MECHANISM_TYPE *mech) + { + switch (kdf) { + case CKD_SHA1_KDF: ++ case CKD_IBM_HYBRID_SHA1_KDF: + *mech = CKM_SHA_1; + break; + case CKD_SHA224_KDF: ++ case CKD_IBM_HYBRID_SHA224_KDF: + *mech = CKM_SHA224; + break; + case CKD_SHA256_KDF: ++ case CKD_IBM_HYBRID_SHA256_KDF: + *mech = CKM_SHA256; + break; + case CKD_SHA384_KDF: ++ case CKD_IBM_HYBRID_SHA384_KDF: + *mech = CKM_SHA384; + break; + case CKD_SHA512_KDF: ++ case CKD_IBM_HYBRID_SHA512_KDF: + *mech = CKM_SHA512; + break; + default: +-- +2.16.2.windows.1 + diff --git a/SOURCES/0029-TESTCASES-Add-tests-for-CKM_IBM_KYBER.patch b/SOURCES/0029-TESTCASES-Add-tests-for-CKM_IBM_KYBER.patch new file mode 100644 index 0000000..76431da --- /dev/null +++ b/SOURCES/0029-TESTCASES-Add-tests-for-CKM_IBM_KYBER.patch @@ -0,0 +1,2783 @@ +From c2ca6d47162e51834d82e61d1469020793aeec94 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Tue, 1 Mar 2022 13:10:51 +0100 +Subject: [PATCH 29/34] TESTCASES: Add tests for CKM_IBM_KYBER + +Signed-off-by: Ingo Franzki +--- + .gitignore | 1 + + testcases/common/common.c | 119 ++++ + testcases/crypto/crypto.mk | 10 +- + testcases/crypto/kyber.h | 1406 +++++++++++++++++++++++++++++++++++++++++ + testcases/crypto/kyber_func.c | 1176 ++++++++++++++++++++++++++++++++++ + 5 files changed, 2710 insertions(+), 2 deletions(-) + create mode 100644 testcases/crypto/kyber.h + create mode 100644 testcases/crypto/kyber_func.c + +diff --git a/.gitignore b/.gitignore +index 33cbb197..88438941 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -20,6 +20,7 @@ testcases/crypto/ec_tests + testcases/crypto/rsa_tests + testcases/crypto/rsaupdate_tests + testcases/crypto/ssl3_tests ++testcases/crypto/kyber_tests + testcases/init_token.sh + testcases/login/digest_init + testcases/login/init_pin +diff --git a/testcases/common/common.c b/testcases/common/common.c +index 9d02a01a..171fe7e1 100644 +--- a/testcases/common/common.c ++++ b/testcases/common/common.c +@@ -740,6 +740,125 @@ CK_RV create_DilithiumPublicKey(CK_SESSION_HANDLE session, + return rc; + } + ++/** Create an IBM Kyber private key using private values **/ ++CK_RV create_KyberPrivateKey(CK_SESSION_HANDLE session, ++ CK_BYTE pkcs8[], CK_ULONG pkcs8_len, ++ CK_ULONG keyform, ++ CK_BYTE sk[], CK_ULONG sk_len, ++ CK_BYTE pk[], CK_ULONG pk_len, ++ CK_OBJECT_HANDLE * priv_key) ++{ ++ CK_OBJECT_CLASS class = CKO_PRIVATE_KEY; ++ CK_KEY_TYPE keyType = CKK_IBM_PQC_KYBER; ++ CK_UTF8CHAR label[] = "A Kyber private key object"; ++ CK_BYTE subject[] = {0}; ++ CK_BYTE id[] = { 123 }; ++ CK_RV rc; ++ ++ CK_BBOOL true = TRUE; ++ CK_ATTRIBUTE template[] = { ++ {CKA_CLASS, &class, sizeof(class)}, ++ {CKA_KEY_TYPE, &keyType, sizeof(keyType)}, ++ {CKA_TOKEN, &true, sizeof(true)}, ++ {CKA_PRIVATE, &true, sizeof(true)}, ++ {CKA_LABEL, label, sizeof(label)}, ++ {CKA_SUBJECT, subject, 0}, ++ {CKA_ID, id, sizeof(id)}, ++ {CKA_SENSITIVE, &true, sizeof(true)}, ++ {CKA_SIGN, &true, sizeof(true)}, ++ {CKA_DERIVE, &true, sizeof(true)}, ++ {CKA_IBM_KYBER_SK, sk, sk_len}, ++ {CKA_IBM_KYBER_PK, pk, pk_len}, ++ {CKA_IBM_KYBER_KEYFORM, &keyform, sizeof(keyform)}, ++ }; ++ CK_ATTRIBUTE template_pkcs8[] = { ++ {CKA_CLASS, &class, sizeof(class)}, ++ {CKA_KEY_TYPE, &keyType, sizeof(keyType)}, ++ {CKA_TOKEN, &true, sizeof(true)}, ++ {CKA_PRIVATE, &true, sizeof(true)}, ++ {CKA_LABEL, label, sizeof(label)}, ++ {CKA_SUBJECT, subject, 0}, ++ {CKA_ID, id, sizeof(id)}, ++ {CKA_SENSITIVE, &true, sizeof(true)}, ++ {CKA_SIGN, &true, sizeof(true)}, ++ {CKA_DERIVE, &true, sizeof(true)}, ++ {CKA_VALUE, pkcs8, pkcs8_len}, ++ }; ++ ++ // create key ++ if (pkcs8_len > 0) ++ rc = funcs->C_CreateObject(session, template_pkcs8, ++ sizeof(template_pkcs8) / sizeof(CK_ATTRIBUTE), ++ priv_key); ++ else ++ rc = funcs->C_CreateObject(session, template, ++ sizeof(template) / sizeof(CK_ATTRIBUTE), ++ priv_key); ++ if (rc != CKR_OK) { ++ if (rc == CKR_KEY_SIZE_RANGE) ++ testcase_notice("C_CreateObject rc=%s", p11_get_ckr(rc)); ++ else if (is_rejected_by_policy(rc, session)) ++ rc = CKR_POLICY_VIOLATION; ++ else ++ testcase_error("C_CreateObject rc=%s", p11_get_ckr(rc)); ++ } ++ ++ return rc; ++} ++ ++/** Create an IBM Kyber public key using public values **/ ++CK_RV create_KyberPublicKey(CK_SESSION_HANDLE session, ++ CK_BYTE spki[], CK_ULONG spki_len, ++ CK_ULONG keyform, ++ CK_BYTE pk[], CK_ULONG pk_len, ++ CK_OBJECT_HANDLE * publ_key) ++{ ++ CK_RV rc; ++ CK_OBJECT_CLASS class = CKO_PUBLIC_KEY; ++ CK_KEY_TYPE keyType = CKK_IBM_PQC_KYBER; ++ CK_UTF8CHAR label[] = "A Kyber public key object"; ++ CK_BBOOL true = TRUE; ++ CK_ATTRIBUTE template[] = { ++ {CKA_CLASS, &class, sizeof(class)}, ++ {CKA_KEY_TYPE, &keyType, sizeof(keyType)}, ++ {CKA_TOKEN, &true, sizeof(true)}, ++ {CKA_LABEL, label, sizeof(label)}, ++ {CKA_VERIFY, &true, sizeof(true)}, ++ {CKA_DERIVE, &true, sizeof(true)}, ++ {CKA_IBM_KYBER_PK, pk, pk_len}, ++ {CKA_IBM_KYBER_KEYFORM, &keyform, sizeof(keyform)}, ++ }; ++ CK_ATTRIBUTE template_spki[] = { ++ {CKA_CLASS, &class, sizeof(class)}, ++ {CKA_KEY_TYPE, &keyType, sizeof(keyType)}, ++ {CKA_TOKEN, &true, sizeof(true)}, ++ {CKA_LABEL, label, sizeof(label)}, ++ {CKA_VERIFY, &true, sizeof(true)}, ++ {CKA_DERIVE, &true, sizeof(true)}, ++ {CKA_VALUE, spki, spki_len}, ++ }; ++ ++ // create key ++ if (spki_len > 0) ++ rc = funcs->C_CreateObject(session, template_spki, ++ sizeof(template_spki) / sizeof(CK_ATTRIBUTE), ++ publ_key); ++ else ++ rc = funcs->C_CreateObject(session, template, ++ sizeof(template) / sizeof(CK_ATTRIBUTE), ++ publ_key); ++ if (rc != CKR_OK) { ++ if (rc == CKR_KEY_SIZE_RANGE) ++ testcase_notice("C_CreateObject rc=%s", p11_get_ckr(rc)); ++ else if (is_rejected_by_policy(rc, session)) ++ rc = CKR_POLICY_VIOLATION; ++ else ++ testcase_error("C_CreateObject rc=%s", p11_get_ckr(rc)); ++ } ++ ++ return rc; ++} ++ + /** Create an DSA public key using the prime 'p', subprime 'q', base 'g' and private value 'y' **/ + CK_RV create_DSAPrivateKey(CK_SESSION_HANDLE session, + CK_BYTE prime[], +diff --git a/testcases/crypto/crypto.mk b/testcases/crypto/crypto.mk +index fc9f2bcb..2516ea6e 100644 +--- a/testcases/crypto/crypto.mk ++++ b/testcases/crypto/crypto.mk +@@ -4,11 +4,13 @@ noinst_PROGRAMS += testcases/crypto/aes_tests \ + testcases/crypto/rsa_tests testcases/crypto/dh_tests \ + testcases/crypto/ssl3_tests testcases/crypto/ec_tests \ + testcases/crypto/rsaupdate_tests \ +- testcases/crypto/dilithium_tests testcases/crypto/ab_tests ++ testcases/crypto/dilithium_tests testcases/crypto/ab_tests \ ++ testcases/crypto/kyber_tests + noinst_HEADERS += \ + testcases/crypto/aes.h testcases/crypto/des.h \ + testcases/crypto/des3.h testcases/crypto/digest.h \ +- testcases/crypto/ec.h testcases/crypto/rsa.h ++ testcases/crypto/ec.h testcases/crypto/rsa.h \ ++ testcases/crypto/dilithium.h testcases/crypto/kyber.h + + testcases_crypto_aes_tests_CFLAGS = ${testcases_inc} + testcases_crypto_aes_tests_LDADD = testcases/common/libcommon.la +@@ -58,3 +60,7 @@ testcases_crypto_rsaupdate_tests_SOURCES = testcases/crypto/rsaupdate_func.c + testcases_crypto_ab_tests_CFLAGS = ${testcases_inc} + testcases_crypto_ab_tests_LDADD = testcases/common/libcommon.la + testcases_crypto_ab_tests_SOURCES = testcases/crypto/abfunc.c ++ ++testcases_crypto_kyber_tests_CFLAGS = ${testcases_inc} ++testcases_crypto_kyber_tests_LDADD = testcases/common/libcommon.la ++testcases_crypto_kyber_tests_SOURCES = testcases/crypto/kyber_func.c +diff --git a/testcases/crypto/kyber.h b/testcases/crypto/kyber.h +new file mode 100644 +index 00000000..dd7d892b +--- /dev/null ++++ b/testcases/crypto/kyber.h +@@ -0,0 +1,1406 @@ ++/* ++ * COPYRIGHT (c) International Business Machines Corp. 2022 ++ * ++ * This program is provided under the terms of the Common Public License, ++ * version 1.0 (CPL-1.0). Any use, reproduction or distribution for this ++ * software constitutes recipient's acceptance of CPL-1.0 terms which can be ++ * found in the file LICENSE file or at ++ * https://opensource.org/licenses/cpl1.0.php ++ */ ++ ++/** ++ * Experimental Support for Kyber keys and KEM ++ * with oid = 1.3.6.1.4.1.2.267.5.xxx ++ * ++ * Public-key encoding; raw public-key field. See RFC 3279 for ++ * subjectPublicKeyInfo (SPKI) structures. ++ * ++ * KyberPublicKey ::= BIT STRING { ++ * SEQUENCE { ++ * pk BIT STRING -- public key ++ * } ++ * } ++ * ++ * Private-key encoding; see RFC 5959 for PKCS#8 structure definitions. ++ * ++ * KyberPrivateKey ::= SEQUENCE { ++ * version INTEGER, -- v0; reserved 0 ++ * sk BIT STRING, -- privet key ++ * pk [0] IMPLICIT OPTIONAL { ++ * pk BIT STRING -- public key ++ * } ++ * } ++ */ ++ ++struct KYBER_TEST_VECTOR { ++ char *name; ++ int version; ++ CK_ULONG keyform; ++ CK_ULONG sk_len; ++ CK_BYTE sk[4096]; ++ CK_ULONG pk_len; ++ CK_BYTE pk[4096]; ++ CK_BYTE pkcs8[8192]; ++ CK_ULONG pkcs8_len; ++ CK_BYTE spki[8192]; ++ CK_ULONG spki_len; ++ CK_BYTE secret[32]; ++ CK_ULONG secret_len; ++ CK_BYTE cipher[2048]; ++ CK_ULONG cipher_len; ++}; ++ ++/** ++ * test vectors from: https://csrc.nist.gov/Projects/post-quantum-cryptography/round-2-submissions ++ */ ++struct KYBER_TEST_VECTOR kyber_tv[] = { ++ { ++ .name = "Kyber Round 2, 786 KAT 0 (PKCS#8/SPKI)", ++ .version = 0, ++ .keyform = 0, ++ .pk_len = 0, ++ .sk_len = 0, ++ .pkcs8_len = 3697, ++ .pkcs8 = { ++ 0x30, 0x82, 0x0e, 0x6d, 0x02, 0x01, 0x00, 0x30, 0x0f, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0b, 0x05, 0x03, 0x03, 0x05, 0x00, 0x04, 0x82, 0x0e, 0x55, 0x30, 0x82, 0x0e, 0x51, ++ 0x02, 0x01, 0x00, 0x03, 0x82, 0x09, 0x61, 0x00, 0x07, 0x63, 0x8f, 0xb6, 0x98, 0x68, 0xf3, 0xd3, 0x20, 0xe5, 0x86, 0x2b, 0xd9, 0x69, 0x33, 0xfe, 0xb3, 0x11, 0xb3, 0x62, 0x09, 0x3c, 0x9b, 0x5d, ++ 0x50, 0x17, 0x0b, 0xce, 0xd4, 0x3f, 0x1b, 0x53, 0x6d, 0x9a, 0x20, 0x4b, 0xb1, 0xf2, 0x26, 0x95, 0x95, 0x0b, 0xa1, 0xf2, 0xa9, 0xe8, 0xeb, 0x82, 0x8b, 0x28, 0x44, 0x88, 0x76, 0x0b, 0x3f, 0xc8, ++ 0x4f, 0xab, 0xa0, 0x42, 0x75, 0xd5, 0x62, 0x8e, 0x39, 0xc5, 0xb2, 0x47, 0x13, 0x74, 0x28, 0x3c, 0x50, 0x32, 0x99, 0xc0, 0xab, 0x49, 0xb6, 0x6b, 0x8b, 0xbb, 0x56, 0xa4, 0x18, 0x66, 0x24, 0xf9, ++ 0x19, 0xa2, 0xba, 0x59, 0xbb, 0x08, 0xd8, 0x55, 0x18, 0x80, 0xc2, 0xbe, 0xfc, 0x4f, 0x87, 0xf2, 0x5f, 0x59, 0xab, 0x58, 0x7a, 0x79, 0xc3, 0x27, 0xd7, 0x92, 0xd5, 0x4c, 0x97, 0x4a, 0x69, 0x26, ++ 0x2f, 0xf8, 0xa7, 0x89, 0x38, 0x28, 0x9e, 0x9a, 0x87, 0xb6, 0x88, 0xb0, 0x83, 0xe0, 0x59, 0x5f, 0xe2, 0x18, 0xb6, 0xbb, 0x15, 0x05, 0x94, 0x1c, 0xe2, 0xe8, 0x1a, 0x5a, 0x64, 0xc5, 0xaa, 0xc6, ++ 0x04, 0x17, 0x25, 0x69, 0x85, 0x34, 0x9e, 0xe4, 0x7a, 0x52, 0x42, 0x0a, 0x5f, 0x97, 0x47, 0x7b, 0x72, 0x36, 0xac, 0x76, 0xbc, 0x70, 0xe8, 0x28, 0x87, 0x29, 0x28, 0x7e, 0xe3, 0xe3, 0x4a, 0x3d, ++ 0xbc, 0x36, 0x83, 0xc0, 0xb7, 0xb1, 0x00, 0x29, 0xfc, 0x20, 0x34, 0x18, 0x53, 0x7e, 0x74, 0x66, 0xba, 0x63, 0x85, 0xa8, 0xff, 0x30, 0x1e, 0xe1, 0x27, 0x08, 0xf8, 0x2a, 0xaa, 0x1e, 0x38, 0x0f, ++ 0xc7, 0xa8, 0x8f, 0x8f, 0x20, 0x5a, 0xb7, 0xe8, 0x8d, 0x7e, 0x95, 0x95, 0x2a, 0x55, 0xba, 0x20, 0xd0, 0x9b, 0x79, 0xa4, 0x71, 0x41, 0xd6, 0x2b, 0xf6, 0xeb, 0x7d, 0xd3, 0x07, 0xb0, 0x8e, 0xca, ++ 0x13, 0xa5, 0xbc, 0x5f, 0x6b, 0x68, 0x58, 0x1c, 0x68, 0x65, 0xb2, 0x7b, 0xbc, 0xdd, 0xab, 0x14, 0x2f, 0x4b, 0x2c, 0xbf, 0xf4, 0x88, 0xc8, 0xa2, 0x27, 0x05, 0xfa, 0xa9, 0x8a, 0x2b, 0x9e, 0xea, ++ 0x35, 0x30, 0xc7, 0x66, 0x62, 0x33, 0x5c, 0xc7, 0xea, 0x3a, 0x00, 0x77, 0x77, 0x25, 0xeb, 0xcc, 0xcd, 0x2a, 0x46, 0x36, 0xb2, 0xd9, 0x12, 0x2f, 0xf3, 0xab, 0x77, 0x12, 0x3c, 0xe0, 0x88, 0x3c, ++ 0x19, 0x11, 0x11, 0x5e, 0x50, 0xc9, 0xe8, 0xa9, 0x41, 0x94, 0xe4, 0x8d, 0xd0, 0xd0, 0x9c, 0xff, 0xb3, 0xad, 0xcd, 0x2c, 0x1e, 0x92, 0x43, 0x09, 0x03, 0xd0, 0x7a, 0xdb, 0xf0, 0x05, 0x32, 0x03, ++ 0x15, 0x75, 0xaa, 0x7f, 0x9e, 0x7b, 0x5a, 0x1f, 0x33, 0x62, 0xde, 0xc9, 0x36, 0xd4, 0x04, 0x3c, 0x05, 0xf2, 0x47, 0x6c, 0x07, 0x57, 0x8b, 0xc9, 0xcb, 0xaf, 0x2a, 0xb4, 0xe3, 0x82, 0x72, 0x7a, ++ 0xd4, 0x16, 0x86, 0xa9, 0x6b, 0x25, 0x48, 0x82, 0x0b, 0xb0, 0x3b, 0x32, 0xf1, 0x1b, 0x28, 0x11, 0xad, 0x62, 0xf4, 0x89, 0xe9, 0x51, 0x63, 0x2a, 0xba, 0x0d, 0x1d, 0xf8, 0x96, 0x80, 0xcc, 0x8a, ++ 0x8b, 0x53, 0xb4, 0x81, 0xd9, 0x2a, 0x68, 0xd7, 0x0b, 0x4e, 0xa1, 0xc3, 0xa6, 0xa5, 0x61, 0xc0, 0x69, 0x28, 0x82, 0xb5, 0xca, 0x8c, 0xc9, 0x42, 0xa8, 0xd4, 0x95, 0xaf, 0xcb, 0x06, 0xde, 0x89, ++ 0x49, 0x8f, 0xb9, 0x35, 0xb7, 0x75, 0x90, 0x8f, 0xe7, 0xa0, 0x3e, 0x32, 0x4d, 0x54, 0xcc, 0x19, 0xd4, 0xe1, 0xaa, 0xbd, 0x35, 0x93, 0xb3, 0x8b, 0x19, 0xee, 0x13, 0x88, 0xfe, 0x49, 0x2b, 0x43, ++ 0x12, 0x7e, 0x5a, 0x50, 0x42, 0x53, 0x78, 0x6a, 0x0d, 0x69, 0xad, 0x32, 0x60, 0x1c, 0x28, 0xe2, 0xc8, 0x85, 0x04, 0xa5, 0xba, 0x59, 0x97, 0x06, 0x02, 0x3a, 0x61, 0x36, 0x3e, 0x17, 0xc6, 0xb9, ++ 0xbb, 0x59, 0xbd, 0xc6, 0x97, 0x45, 0x2c, 0xd0, 0x59, 0x45, 0x19, 0x83, 0xd7, 0x38, 0xca, 0x3f, 0xd0, 0x34, 0xe3, 0xf5, 0x98, 0x88, 0x54, 0xca, 0x05, 0x03, 0x1d, 0xb0, 0x96, 0x11, 0x49, 0x89, ++ 0x88, 0x19, 0x7c, 0x6b, 0x30, 0xd2, 0x58, 0xdf, 0xe2, 0x62, 0x65, 0x54, 0x1c, 0x89, 0xa4, 0xb3, 0x1d, 0x68, 0x64, 0xe9, 0x38, 0x9b, 0x03, 0xcb, 0x74, 0xf7, 0xec, 0x43, 0x23, 0xfb, 0x94, 0x21, ++ 0xa4, 0xb9, 0x79, 0x0a, 0x26, 0xd1, 0x7b, 0x03, 0x98, 0xa2, 0x67, 0x67, 0x35, 0x09, 0x09, 0xf8, 0x4d, 0x57, 0xb6, 0x69, 0x4d, 0xf8, 0x30, 0x66, 0x4c, 0xa8, 0xb3, 0xc3, 0xc0, 0x3e, 0xd2, 0xae, ++ 0x67, 0xb8, 0x90, 0x06, 0x86, 0x8a, 0x68, 0x52, 0x7c, 0xcd, 0x66, 0x64, 0x59, 0xab, 0x7f, 0x05, 0x66, 0x71, 0x00, 0x0c, 0x61, 0x64, 0xd3, 0xa7, 0xf2, 0x66, 0xa1, 0x4d, 0x97, 0xcb, 0xd7, 0x00, ++ 0x4d, 0x6c, 0x92, 0xca, 0xca, 0x77, 0x0b, 0x84, 0x4a, 0x4f, 0xa9, 0xb1, 0x82, 0xe7, 0xb1, 0x8c, 0xa8, 0x85, 0x08, 0x2a, 0xc5, 0x64, 0x6f, 0xcb, 0x4a, 0x14, 0xe1, 0x68, 0x5f, 0xeb, 0x0c, 0x9c, ++ 0xe3, 0x37, 0x2a, 0xb9, 0x53, 0x65, 0xc0, 0x4f, 0xd8, 0x30, 0x84, 0xf8, 0x0a, 0x23, 0xff, 0x10, 0xa0, 0x5b, 0xf1, 0x5f, 0x7f, 0xa5, 0xac, 0xc6, 0xc0, 0xcb, 0x46, 0x2c, 0x33, 0xca, 0x52, 0x4f, ++ 0xa6, 0xb8, 0xbb, 0x35, 0x90, 0x43, 0xba, 0x68, 0x60, 0x9e, 0xaa, 0x25, 0x36, 0xe8, 0x1d, 0x08, 0x46, 0x3b, 0x19, 0x65, 0x3b, 0x54, 0x35, 0xba, 0x94, 0x6c, 0x9a, 0xdd, 0xeb, 0x20, 0x2b, 0x04, ++ 0xb0, 0x31, 0xcc, 0x96, 0x0d, 0xcc, 0x12, 0xe4, 0x51, 0x8d, 0x42, 0x8b, 0x32, 0xb2, 0x57, 0xa4, 0xfc, 0x73, 0x13, 0xd3, 0xa7, 0x98, 0x0d, 0x80, 0x08, 0x2e, 0x93, 0x4f, 0x9d, 0x95, 0xc3, 0x2b, ++ 0x0a, 0x01, 0x91, 0xa2, 0x36, 0x04, 0x38, 0x4d, 0xd9, 0xe0, 0x79, 0xbb, 0xba, 0xa2, 0x66, 0xd1, 0x4c, 0x3f, 0x75, 0x6b, 0x9f, 0x21, 0x33, 0x10, 0x74, 0x33, 0xa4, 0xe8, 0x3f, 0xa7, 0x18, 0x72, ++ 0x82, 0xa8, 0x09, 0x20, 0x3a, 0x4f, 0xaf, 0x84, 0x18, 0x51, 0x83, 0x3d, 0x12, 0x1a, 0xc3, 0x83, 0x84, 0x3a, 0x5e, 0x55, 0xbc, 0x23, 0x81, 0x42, 0x5e, 0x16, 0xc7, 0xdb, 0x4c, 0xc9, 0xab, 0x5c, ++ 0x1b, 0x0d, 0x91, 0xa4, 0x7e, 0x2b, 0x8d, 0xe0, 0xe5, 0x82, 0xc8, 0x6b, 0x6b, 0x0d, 0x90, 0x7b, 0xb3, 0x60, 0xb9, 0x7f, 0x40, 0xab, 0x5d, 0x03, 0x8f, 0x6b, 0x75, 0xc8, 0x14, 0xb2, 0x7d, 0x9b, ++ 0x96, 0x8d, 0x41, 0x98, 0x32, 0xbc, 0x8c, 0x2b, 0xee, 0x60, 0x5e, 0xf6, 0xe5, 0x05, 0x9d, 0x33, 0x10, 0x0d, 0x90, 0x48, 0x5d, 0x37, 0x84, 0x50, 0x01, 0x42, 0x21, 0x73, 0x6c, 0x07, 0x40, 0x7c, ++ 0xac, 0x26, 0x04, 0x08, 0xaa, 0x64, 0x92, 0x66, 0x19, 0x78, 0x8b, 0x86, 0x01, 0xc2, 0xa7, 0x52, 0xd1, 0xa6, 0xcb, 0xf8, 0x20, 0xd7, 0xc7, 0xa0, 0x47, 0x16, 0x20, 0x32, 0x25, 0xb3, 0x89, 0x5b, ++ 0x93, 0x42, 0xd1, 0x47, 0xa8, 0x18, 0x5c, 0xfc, 0x1b, 0xb6, 0x5b, 0xa0, 0x6b, 0x41, 0x42, 0x33, 0x99, 0x03, 0xc0, 0xac, 0x46, 0x51, 0x38, 0x5b, 0x45, 0xd9, 0x8a, 0x8b, 0x19, 0xd2, 0x8c, 0xd6, ++ 0xba, 0xb0, 0x88, 0x78, 0x7f, 0x7e, 0xe1, 0xb1, 0x24, 0x61, 0x76, 0x6b, 0x43, 0xcb, 0xcc, 0xb9, 0x64, 0x34, 0x42, 0x7d, 0x93, 0xc0, 0x65, 0x55, 0x06, 0x88, 0xf6, 0x94, 0x8e, 0xd1, 0xb5, 0x47, ++ 0x5a, 0x42, 0x5f, 0x1b, 0x85, 0x20, 0x9d, 0x06, 0x1c, 0x08, 0xb5, 0x6c, 0x1c, 0xc0, 0x69, 0xf6, 0xc0, 0xa7, 0xc6, 0xf2, 0x93, 0x58, 0xca, 0xb9, 0x11, 0x08, 0x77, 0x32, 0xa6, 0x49, 0xd2, 0x7c, ++ 0x9b, 0x98, 0xf9, 0xa4, 0x88, 0x79, 0x38, 0x7d, 0x9b, 0x00, 0xc2, 0x59, 0x59, 0xa7, 0x16, 0x54, 0xd6, 0xf6, 0xa9, 0x46, 0x16, 0x45, 0x13, 0xe4, 0x7a, 0x75, 0xd0, 0x05, 0x98, 0x6c, 0x23, 0x63, ++ 0xc0, 0x9f, 0x6b, 0x53, 0x7e, 0xca, 0x78, 0xb9, 0x30, 0x3a, 0x5f, 0xa4, 0x57, 0x60, 0x8a, 0x58, 0x6a, 0x65, 0x3a, 0x34, 0x7d, 0xb0, 0x4d, 0xfc, 0xc1, 0x91, 0x75, 0xb3, 0xa3, 0x01, 0x17, 0x25, ++ 0x36, 0x06, 0x2a, 0x65, 0x8a, 0x95, 0x27, 0x75, 0x70, 0xc8, 0x85, 0x2c, 0xa8, 0x97, 0x3f, 0x4a, 0xe1, 0x23, 0xa3, 0x34, 0x04, 0x7d, 0xd7, 0x11, 0xc8, 0x92, 0x7a, 0x63, 0x4a, 0x03, 0x38, 0x8a, ++ 0x52, 0x7b, 0x03, 0x4b, 0xf7, 0xa8, 0x17, 0x0f, 0xa7, 0x02, 0xc1, 0xf7, 0xc2, 0x3e, 0xc3, 0x2d, 0x18, 0xa2, 0x37, 0x48, 0x90, 0xbe, 0x9c, 0x78, 0x7a, 0x94, 0x09, 0xc8, 0x2d, 0x19, 0x2c, 0x4b, ++ 0xb7, 0x05, 0xa2, 0xf9, 0x96, 0xce, 0x40, 0x5d, 0xa0, 0xb7, 0x1f, 0x67, 0xc6, 0xce, 0xc0, 0xd3, 0x56, 0x86, 0xd5, 0x13, 0x42, 0x34, 0x32, 0xe5, 0x12, 0xac, 0x40, 0x44, 0x55, 0x7e, 0x86, 0x8a, ++ 0x62, 0x48, 0x00, 0x10, 0x9a, 0x33, 0x55, 0xf9, 0x8f, 0x15, 0x14, 0x44, 0xe2, 0x85, 0x2e, 0x27, 0xea, 0x6e, 0xdb, 0x19, 0x92, 0xca, 0xd3, 0x97, 0x3c, 0x3a, 0x6f, 0xf7, 0x9a, 0x5a, 0x04, 0x9a, ++ 0x25, 0x9e, 0xb5, 0x41, 0x5a, 0xa2, 0xa2, 0x62, 0x45, 0x6e, 0xc9, 0x49, 0x5b, 0xbb, 0x52, 0x00, 0xd8, 0xd3, 0x16, 0x3a, 0x5b, 0x10, 0x22, 0x62, 0x92, 0xec, 0xa0, 0x10, 0x21, 0x38, 0x9d, 0xa3, ++ 0x78, 0x81, 0xe2, 0x76, 0x30, 0x65, 0x50, 0xc6, 0xef, 0xb6, 0x44, 0x0e, 0xc5, 0x1a, 0x2f, 0x73, 0x48, 0x34, 0x9b, 0x85, 0x1c, 0xd4, 0xaa, 0x01, 0x75, 0xa0, 0x55, 0x02, 0x13, 0xc4, 0x79, 0x1d, ++ 0x91, 0x01, 0x12, 0x20, 0x82, 0x4b, 0x2b, 0x61, 0x65, 0x08, 0x13, 0xad, 0xfd, 0x2c, 0xb1, 0x05, 0x38, 0xbf, 0xab, 0x0a, 0x72, 0x6f, 0x81, 0x12, 0x9e, 0xd2, 0xc0, 0xf0, 0x6a, 0x16, 0xb7, 0x01, ++ 0x09, 0x0b, 0xf0, 0x48, 0xc5, 0xa4, 0x01, 0x26, 0xd5, 0x72, 0xfc, 0xd4, 0x7a, 0xa1, 0x21, 0x8f, 0xb0, 0x15, 0x47, 0xd1, 0x50, 0x79, 0x2d, 0x23, 0x16, 0xcb, 0x32, 0x0d, 0x51, 0x44, 0xba, 0x35, ++ 0x08, 0xa1, 0xeb, 0xbb, 0x5a, 0xc1, 0xc2, 0x29, 0x13, 0xe8, 0x29, 0x5f, 0xab, 0x59, 0xbf, 0x58, 0x37, 0xa7, 0x78, 0xcf, 0x28, 0x22, 0x7e, 0x07, 0xe1, 0x03, 0x2d, 0xab, 0x7d, 0x0e, 0x09, 0xa1, ++ 0x5f, 0x13, 0x41, 0x48, 0xc1, 0x20, 0x09, 0xda, 0x53, 0x6b, 0x22, 0xcc, 0x62, 0x47, 0x4e, 0x69, 0xcc, 0x15, 0x54, 0xc0, 0x81, 0x4d, 0x6c, 0xa0, 0xb7, 0x22, 0x59, 0x43, 0x83, 0xa9, 0xd0, 0xa2, ++ 0xc7, 0x7f, 0xd3, 0x65, 0xa5, 0x54, 0x42, 0x95, 0xfb, 0xb9, 0x73, 0xf9, 0x1e, 0xa5, 0x64, 0x90, 0xd6, 0xca, 0x68, 0x76, 0x49, 0x7b, 0x98, 0xb3, 0xcb, 0x12, 0x41, 0x7c, 0x25, 0x7b, 0x6d, 0x0f, ++ 0x71, 0x83, 0xdb, 0xb6, 0x9e, 0x33, 0x07, 0x5b, 0xeb, 0x01, 0x17, 0xb6, 0x91, 0x4c, 0x69, 0xba, 0x38, 0x34, 0x94, 0x22, 0xf2, 0xf4, 0x33, 0x64, 0x82, 0x2a, 0x25, 0x70, 0x95, 0x2d, 0xd5, 0x07, ++ 0x7b, 0x90, 0x75, 0x5f, 0x15, 0x74, 0x11, 0x5b, 0x8e, 0x22, 0x14, 0x27, 0x58, 0x59, 0x61, 0x91, 0x3a, 0x9b, 0xfa, 0x05, 0x02, 0xb5, 0xd7, 0x9a, 0xb7, 0x81, 0x17, 0x44, 0xe6, 0x56, 0x3c, 0x5b, ++ 0x62, 0xc5, 0xcc, 0x4e, 0x93, 0x23, 0x9a, 0x0a, 0x8c, 0xc6, 0x0f, 0xe8, 0x48, 0xf8, 0x4a, 0x95, 0xf5, 0x90, 0x25, 0x99, 0xb5, 0x4a, 0x06, 0x62, 0x93, 0xa2, 0x02, 0x1d, 0xa1, 0x96, 0x76, 0x6c, ++ 0x17, 0xc7, 0xe8, 0x63, 0xaf, 0x79, 0x0c, 0x27, 0x0b, 0x21, 0x6a, 0x25, 0x13, 0x8d, 0xda, 0x0c, 0x81, 0x26, 0xe0, 0x93, 0x77, 0x87, 0x98, 0x59, 0xdb, 0x35, 0x8f, 0x9b, 0x82, 0xb7, 0xc8, 0xa6, ++ 0x79, 0x2a, 0xce, 0xe9, 0x2a, 0x4c, 0xbd, 0xe3, 0xce, 0xdd, 0x45, 0x00, 0xac, 0xbc, 0x55, 0x5c, 0x28, 0x8e, 0xff, 0x97, 0x95, 0x26, 0x5b, 0x90, 0x05, 0x35, 0x1c, 0x52, 0xe2, 0x65, 0x35, 0x54, ++ 0xab, 0xaa, 0xf8, 0x72, 0xdf, 0x95, 0xca, 0x7f, 0x79, 0x59, 0x03, 0xf0, 0xb0, 0xa1, 0x82, 0xb1, 0x8a, 0xeb, 0x04, 0x75, 0xb2, 0x9f, 0x6e, 0x3a, 0xbf, 0x4c, 0x22, 0x50, 0xfe, 0x7b, 0x84, 0x2a, ++ 0x73, 0x65, 0x50, 0x16, 0xa8, 0xfc, 0x72, 0x9f, 0x39, 0x05, 0x07, 0xac, 0xa9, 0x36, 0x82, 0x5a, 0x98, 0xb3, 0xa3, 0x2e, 0x6b, 0x25, 0x54, 0xce, 0x95, 0x28, 0x94, 0x1a, 0x3b, 0xb8, 0xc9, 0x09, ++ 0x96, 0x00, 0x8d, 0x74, 0xfb, 0xcd, 0x02, 0x0a, 0x02, 0xe7, 0x06, 0xa6, 0xde, 0x7b, 0x02, 0xaf, 0x40, 0x4c, 0x10, 0xdb, 0x00, 0xfa, 0xec, 0x02, 0xd3, 0xea, 0xa6, 0xd9, 0x56, 0x1a, 0x15, 0x65, ++ 0xa7, 0xb0, 0x5c, 0x63, 0x66, 0xd0, 0x9d, 0xa7, 0xa5, 0x37, 0xf2, 0x0c, 0x7b, 0x28, 0x59, 0xa8, 0x3e, 0x02, 0x9e, 0x13, 0xa9, 0xbd, 0x28, 0x91, 0x57, 0xc5, 0xb7, 0x4c, 0x84, 0xea, 0xa3, 0x07, ++ 0x75, 0x3d, 0x43, 0x12, 0x02, 0xa3, 0xd9, 0xb6, 0x16, 0x22, 0x18, 0xbe, 0xc5, 0x34, 0x69, 0x45, 0xbf, 0xef, 0x55, 0xb6, 0x24, 0xc5, 0xc6, 0xe3, 0x73, 0x35, 0x9b, 0xb1, 0xc4, 0x79, 0x95, 0x2b, ++ 0xba, 0xba, 0x4d, 0x65, 0x55, 0xc2, 0x76, 0x57, 0x3e, 0x51, 0x52, 0xb5, 0x53, 0x90, 0x19, 0x99, 0xf6, 0x94, 0x02, 0xd1, 0x50, 0xbe, 0xf7, 0x9d, 0x74, 0xfb, 0x29, 0x53, 0x01, 0x8f, 0xf4, 0x86, ++ 0x66, 0x74, 0x6a, 0xce, 0x60, 0x78, 0x14, 0xa1, 0xfa, 0x33, 0x19, 0x57, 0x20, 0xf8, 0x38, 0x78, 0xd3, 0xb5, 0x75, 0xc7, 0x25, 0x74, 0x4a, 0x72, 0x07, 0x0d, 0xd0, 0x44, 0x01, 0x80, 0x42, 0xda, ++ 0x25, 0x71, 0x4d, 0x17, 0x30, 0x90, 0x32, 0x3a, 0x51, 0xe6, 0xc0, 0x63, 0xd2, 0x03, 0x88, 0x13, 0x80, 0x91, 0x27, 0x61, 0xfc, 0x34, 0x10, 0x83, 0x90, 0x95, 0xf2, 0x6c, 0x0e, 0x68, 0x7a, 0x00, ++ 0x70, 0x54, 0x95, 0xe1, 0x71, 0xb5, 0x71, 0x51, 0xac, 0xe0, 0x49, 0x8e, 0x30, 0xf1, 0x4c, 0xa9, 0xb0, 0x2f, 0x6e, 0x40, 0x83, 0x18, 0x54, 0xc2, 0xe0, 0xab, 0x1e, 0xcd, 0x0c, 0x21, 0xd8, 0xe4, ++ 0xc7, 0xe6, 0x69, 0xcd, 0x72, 0x82, 0x30, 0xb9, 0xd1, 0x1f, 0x72, 0xc2, 0x66, 0xe3, 0x44, 0x66, 0xf9, 0xc0, 0x15, 0x9e, 0xf4, 0x24, 0xf8, 0xf3, 0x1d, 0x95, 0xa5, 0x7b, 0xa0, 0xe2, 0x10, 0x54, ++ 0x3c, 0x10, 0xc6, 0x50, 0x3f, 0xb5, 0xc6, 0x3e, 0xd2, 0x3a, 0xa3, 0x6c, 0xd6, 0xa6, 0xf3, 0x78, 0x26, 0x1b, 0x0b, 0x1e, 0x79, 0x50, 0x9d, 0x8b, 0xeb, 0x36, 0xaa, 0x26, 0x3d, 0xc9, 0x15, 0x45, ++ 0xe5, 0x33, 0x69, 0xdf, 0x26, 0x83, 0x7f, 0x39, 0x4c, 0x56, 0x77, 0x7c, 0x95, 0xb6, 0x48, 0xbd, 0x1a, 0x72, 0x92, 0x1a, 0xbf, 0x49, 0x56, 0x3f, 0x99, 0xcb, 0x9d, 0x98, 0xea, 0xb5, 0xc6, 0x66, ++ 0x66, 0xf6, 0xb1, 0x6f, 0x74, 0x02, 0x24, 0x81, 0xfa, 0x21, 0x4e, 0x61, 0x76, 0x98, 0xd3, 0xbb, 0xd1, 0x3c, 0xb3, 0x08, 0x71, 0x3f, 0xdc, 0xc7, 0xcf, 0xd3, 0x97, 0xb9, 0xca, 0x39, 0xaf, 0xf4, ++ 0xc7, 0x44, 0xd5, 0x71, 0x5d, 0x58, 0x96, 0x6f, 0x2c, 0xf9, 0x70, 0x70, 0x15, 0xc8, 0xf3, 0x54, 0x3e, 0xd2, 0x86, 0xa3, 0xd8, 0xd5, 0xcb, 0xf6, 0x4a, 0xce, 0xdf, 0xc0, 0x29, 0x71, 0xa9, 0x10, ++ 0x72, 0xc6, 0x9d, 0x2e, 0xf4, 0x98, 0x29, 0xf1, 0x03, 0x7f, 0x05, 0x0c, 0x5b, 0x92, 0x22, 0x98, 0x56, 0xcb, 0x12, 0xb4, 0x56, 0xcc, 0x09, 0x52, 0x82, 0xa6, 0x26, 0x87, 0xea, 0x38, 0xc9, 0x77, ++ 0x8a, 0xea, 0x49, 0x1d, 0xff, 0x06, 0x97, 0x11, 0xfb, 0xbe, 0x05, 0xe8, 0xcd, 0x9b, 0xf4, 0x4a, 0x8e, 0x71, 0x26, 0x19, 0x57, 0x3e, 0x12, 0xea, 0xa7, 0xb2, 0x38, 0x29, 0xdc, 0x67, 0x26, 0xbf, ++ 0xe3, 0x3d, 0xa1, 0x36, 0xb8, 0x1e, 0x15, 0x32, 0x51, 0x50, 0x8f, 0x62, 0x85, 0xba, 0x15, 0xb2, 0xc1, 0x23, 0x76, 0x77, 0xfe, 0x5b, 0x14, 0xb4, 0xe3, 0x3f, 0x98, 0xc3, 0x26, 0xbc, 0x58, 0xb9, ++ 0xd8, 0xe0, 0x75, 0xa2, 0x5b, 0x94, 0xc8, 0xa2, 0x32, 0x33, 0x02, 0x9d, 0xcc, 0x78, 0x6b, 0x13, 0x5c, 0x56, 0x16, 0x4b, 0xa3, 0xd1, 0x60, 0xcb, 0xce, 0xa8, 0x54, 0xb7, 0x97, 0x1f, 0x9c, 0xd7, ++ 0x3a, 0x38, 0x3a, 0xac, 0x05, 0x0a, 0x30, 0x2a, 0xd8, 0x3b, 0x3e, 0x3a, 0xb9, 0x02, 0x46, 0xad, 0x16, 0x0a, 0x32, 0x1d, 0x33, 0x0a, 0xcd, 0xec, 0x7c, 0xa6, 0x64, 0x3d, 0x7e, 0xc0, 0x1f, 0x91, ++ 0x69, 0x1f, 0x16, 0x32, 0x5b, 0xdf, 0x39, 0x69, 0x50, 0xb8, 0x8d, 0xaf, 0xe3, 0x69, 0xc6, 0x54, 0xb8, 0x52, 0x05, 0x5c, 0x97, 0x03, 0x62, 0xc6, 0x13, 0x80, 0x46, 0x07, 0x57, 0xc6, 0x58, 0x90, ++ 0xf4, 0xe5, 0x92, 0x22, 0xe4, 0xa4, 0x06, 0x0b, 0x26, 0xc0, 0xeb, 0xc1, 0x01, 0x97, 0x59, 0x0d, 0xe3, 0xc8, 0xf0, 0x95, 0x5d, 0x65, 0x4b, 0x37, 0x1c, 0xcb, 0x90, 0xac, 0xa3, 0x71, 0xb2, 0x94, ++ 0x47, 0x6c, 0x16, 0xa4, 0x59, 0x6a, 0x1d, 0xe8, 0x30, 0x9e, 0x2a, 0x36, 0x12, 0xc6, 0x9b, 0x71, 0x25, 0x31, 0x05, 0x01, 0xe0, 0xc0, 0x49, 0xb8, 0x74, 0x40, 0xd9, 0xa6, 0xd0, 0xec, 0xb9, 0x99, ++ 0xc9, 0xa0, 0x94, 0x2a, 0xa3, 0x40, 0xf6, 0x03, 0x65, 0xea, 0xfd, 0x46, 0x5f, 0xc6, 0x4a, 0x0c, 0x5f, 0x8f, 0x3f, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9d, 0x59, 0xa5, 0x43, 0xd8, 0x20, 0x8c, ++ 0x54, 0xa3, 0x16, 0x65, 0x29, 0xb5, 0x39, 0x22, 0xde, 0xe4, 0xab, 0xa0, 0x00, 0x38, 0x95, 0x81, 0x71, 0x7d, 0x36, 0xf5, 0x6f, 0x39, 0xaf, 0x73, 0x00, 0xb3, 0x1d, 0x83, 0x1a, 0x4d, 0x8c, 0x97, ++ 0x61, 0x28, 0xe0, 0x9d, 0xed, 0xe7, 0x1a, 0x5a, 0x86, 0x26, 0xed, 0x79, 0xd4, 0x51, 0x14, 0x08, 0x00, 0xe0, 0x3b, 0x59, 0xb9, 0x56, 0xf8, 0x21, 0x0e, 0x55, 0x60, 0x67, 0x40, 0x7d, 0x13, 0xdc, ++ 0x90, 0xfa, 0x9e, 0x8b, 0x87, 0x2b, 0xfb, 0x8f, 0xa0, 0x82, 0x04, 0xe5, 0x03, 0x82, 0x04, 0xe1, 0x00, 0xa0, 0xb7, 0x1f, 0x67, 0xc6, 0xce, 0xc0, 0xd3, 0x56, 0x86, 0xd5, 0x13, 0x42, 0x34, 0x32, ++ 0xe5, 0x12, 0xac, 0x40, 0x44, 0x55, 0x7e, 0x86, 0x8a, 0x62, 0x48, 0x00, 0x10, 0x9a, 0x33, 0x55, 0xf9, 0x8f, 0x15, 0x14, 0x44, 0xe2, 0x85, 0x2e, 0x27, 0xea, 0x6e, 0xdb, 0x19, 0x92, 0xca, 0xd3, ++ 0x97, 0x3c, 0x3a, 0x6f, 0xf7, 0x9a, 0x5a, 0x04, 0x9a, 0x25, 0x9e, 0xb5, 0x41, 0x5a, 0xa2, 0xa2, 0x62, 0x45, 0x6e, 0xc9, 0x49, 0x5b, 0xbb, 0x52, 0x00, 0xd8, 0xd3, 0x16, 0x3a, 0x5b, 0x10, 0x22, ++ 0x62, 0x92, 0xec, 0xa0, 0x10, 0x21, 0x38, 0x9d, 0xa3, 0x78, 0x81, 0xe2, 0x76, 0x30, 0x65, 0x50, 0xc6, 0xef, 0xb6, 0x44, 0x0e, 0xc5, 0x1a, 0x2f, 0x73, 0x48, 0x34, 0x9b, 0x85, 0x1c, 0xd4, 0xaa, ++ 0x01, 0x75, 0xa0, 0x55, 0x02, 0x13, 0xc4, 0x79, 0x1d, 0x91, 0x01, 0x12, 0x20, 0x82, 0x4b, 0x2b, 0x61, 0x65, 0x08, 0x13, 0xad, 0xfd, 0x2c, 0xb1, 0x05, 0x38, 0xbf, 0xab, 0x0a, 0x72, 0x6f, 0x81, ++ 0x12, 0x9e, 0xd2, 0xc0, 0xf0, 0x6a, 0x16, 0xb7, 0x01, 0x09, 0x0b, 0xf0, 0x48, 0xc5, 0xa4, 0x01, 0x26, 0xd5, 0x72, 0xfc, 0xd4, 0x7a, 0xa1, 0x21, 0x8f, 0xb0, 0x15, 0x47, 0xd1, 0x50, 0x79, 0x2d, ++ 0x23, 0x16, 0xcb, 0x32, 0x0d, 0x51, 0x44, 0xba, 0x35, 0x08, 0xa1, 0xeb, 0xbb, 0x5a, 0xc1, 0xc2, 0x29, 0x13, 0xe8, 0x29, 0x5f, 0xab, 0x59, 0xbf, 0x58, 0x37, 0xa7, 0x78, 0xcf, 0x28, 0x22, 0x7e, ++ 0x07, 0xe1, 0x03, 0x2d, 0xab, 0x7d, 0x0e, 0x09, 0xa1, 0x5f, 0x13, 0x41, 0x48, 0xc1, 0x20, 0x09, 0xda, 0x53, 0x6b, 0x22, 0xcc, 0x62, 0x47, 0x4e, 0x69, 0xcc, 0x15, 0x54, 0xc0, 0x81, 0x4d, 0x6c, ++ 0xa0, 0xb7, 0x22, 0x59, 0x43, 0x83, 0xa9, 0xd0, 0xa2, 0xc7, 0x7f, 0xd3, 0x65, 0xa5, 0x54, 0x42, 0x95, 0xfb, 0xb9, 0x73, 0xf9, 0x1e, 0xa5, 0x64, 0x90, 0xd6, 0xca, 0x68, 0x76, 0x49, 0x7b, 0x98, ++ 0xb3, 0xcb, 0x12, 0x41, 0x7c, 0x25, 0x7b, 0x6d, 0x0f, 0x71, 0x83, 0xdb, 0xb6, 0x9e, 0x33, 0x07, 0x5b, 0xeb, 0x01, 0x17, 0xb6, 0x91, 0x4c, 0x69, 0xba, 0x38, 0x34, 0x94, 0x22, 0xf2, 0xf4, 0x33, ++ 0x64, 0x82, 0x2a, 0x25, 0x70, 0x95, 0x2d, 0xd5, 0x07, 0x7b, 0x90, 0x75, 0x5f, 0x15, 0x74, 0x11, 0x5b, 0x8e, 0x22, 0x14, 0x27, 0x58, 0x59, 0x61, 0x91, 0x3a, 0x9b, 0xfa, 0x05, 0x02, 0xb5, 0xd7, ++ 0x9a, 0xb7, 0x81, 0x17, 0x44, 0xe6, 0x56, 0x3c, 0x5b, 0x62, 0xc5, 0xcc, 0x4e, 0x93, 0x23, 0x9a, 0x0a, 0x8c, 0xc6, 0x0f, 0xe8, 0x48, 0xf8, 0x4a, 0x95, 0xf5, 0x90, 0x25, 0x99, 0xb5, 0x4a, 0x06, ++ 0x62, 0x93, 0xa2, 0x02, 0x1d, 0xa1, 0x96, 0x76, 0x6c, 0x17, 0xc7, 0xe8, 0x63, 0xaf, 0x79, 0x0c, 0x27, 0x0b, 0x21, 0x6a, 0x25, 0x13, 0x8d, 0xda, 0x0c, 0x81, 0x26, 0xe0, 0x93, 0x77, 0x87, 0x98, ++ 0x59, 0xdb, 0x35, 0x8f, 0x9b, 0x82, 0xb7, 0xc8, 0xa6, 0x79, 0x2a, 0xce, 0xe9, 0x2a, 0x4c, 0xbd, 0xe3, 0xce, 0xdd, 0x45, 0x00, 0xac, 0xbc, 0x55, 0x5c, 0x28, 0x8e, 0xff, 0x97, 0x95, 0x26, 0x5b, ++ 0x90, 0x05, 0x35, 0x1c, 0x52, 0xe2, 0x65, 0x35, 0x54, 0xab, 0xaa, 0xf8, 0x72, 0xdf, 0x95, 0xca, 0x7f, 0x79, 0x59, 0x03, 0xf0, 0xb0, 0xa1, 0x82, 0xb1, 0x8a, 0xeb, 0x04, 0x75, 0xb2, 0x9f, 0x6e, ++ 0x3a, 0xbf, 0x4c, 0x22, 0x50, 0xfe, 0x7b, 0x84, 0x2a, 0x73, 0x65, 0x50, 0x16, 0xa8, 0xfc, 0x72, 0x9f, 0x39, 0x05, 0x07, 0xac, 0xa9, 0x36, 0x82, 0x5a, 0x98, 0xb3, 0xa3, 0x2e, 0x6b, 0x25, 0x54, ++ 0xce, 0x95, 0x28, 0x94, 0x1a, 0x3b, 0xb8, 0xc9, 0x09, 0x96, 0x00, 0x8d, 0x74, 0xfb, 0xcd, 0x02, 0x0a, 0x02, 0xe7, 0x06, 0xa6, 0xde, 0x7b, 0x02, 0xaf, 0x40, 0x4c, 0x10, 0xdb, 0x00, 0xfa, 0xec, ++ 0x02, 0xd3, 0xea, 0xa6, 0xd9, 0x56, 0x1a, 0x15, 0x65, 0xa7, 0xb0, 0x5c, 0x63, 0x66, 0xd0, 0x9d, 0xa7, 0xa5, 0x37, 0xf2, 0x0c, 0x7b, 0x28, 0x59, 0xa8, 0x3e, 0x02, 0x9e, 0x13, 0xa9, 0xbd, 0x28, ++ 0x91, 0x57, 0xc5, 0xb7, 0x4c, 0x84, 0xea, 0xa3, 0x07, 0x75, 0x3d, 0x43, 0x12, 0x02, 0xa3, 0xd9, 0xb6, 0x16, 0x22, 0x18, 0xbe, 0xc5, 0x34, 0x69, 0x45, 0xbf, 0xef, 0x55, 0xb6, 0x24, 0xc5, 0xc6, ++ 0xe3, 0x73, 0x35, 0x9b, 0xb1, 0xc4, 0x79, 0x95, 0x2b, 0xba, 0xba, 0x4d, 0x65, 0x55, 0xc2, 0x76, 0x57, 0x3e, 0x51, 0x52, 0xb5, 0x53, 0x90, 0x19, 0x99, 0xf6, 0x94, 0x02, 0xd1, 0x50, 0xbe, 0xf7, ++ 0x9d, 0x74, 0xfb, 0x29, 0x53, 0x01, 0x8f, 0xf4, 0x86, 0x66, 0x74, 0x6a, 0xce, 0x60, 0x78, 0x14, 0xa1, 0xfa, 0x33, 0x19, 0x57, 0x20, 0xf8, 0x38, 0x78, 0xd3, 0xb5, 0x75, 0xc7, 0x25, 0x74, 0x4a, ++ 0x72, 0x07, 0x0d, 0xd0, 0x44, 0x01, 0x80, 0x42, 0xda, 0x25, 0x71, 0x4d, 0x17, 0x30, 0x90, 0x32, 0x3a, 0x51, 0xe6, 0xc0, 0x63, 0xd2, 0x03, 0x88, 0x13, 0x80, 0x91, 0x27, 0x61, 0xfc, 0x34, 0x10, ++ 0x83, 0x90, 0x95, 0xf2, 0x6c, 0x0e, 0x68, 0x7a, 0x00, 0x70, 0x54, 0x95, 0xe1, 0x71, 0xb5, 0x71, 0x51, 0xac, 0xe0, 0x49, 0x8e, 0x30, 0xf1, 0x4c, 0xa9, 0xb0, 0x2f, 0x6e, 0x40, 0x83, 0x18, 0x54, ++ 0xc2, 0xe0, 0xab, 0x1e, 0xcd, 0x0c, 0x21, 0xd8, 0xe4, 0xc7, 0xe6, 0x69, 0xcd, 0x72, 0x82, 0x30, 0xb9, 0xd1, 0x1f, 0x72, 0xc2, 0x66, 0xe3, 0x44, 0x66, 0xf9, 0xc0, 0x15, 0x9e, 0xf4, 0x24, 0xf8, ++ 0xf3, 0x1d, 0x95, 0xa5, 0x7b, 0xa0, 0xe2, 0x10, 0x54, 0x3c, 0x10, 0xc6, 0x50, 0x3f, 0xb5, 0xc6, 0x3e, 0xd2, 0x3a, 0xa3, 0x6c, 0xd6, 0xa6, 0xf3, 0x78, 0x26, 0x1b, 0x0b, 0x1e, 0x79, 0x50, 0x9d, ++ 0x8b, 0xeb, 0x36, 0xaa, 0x26, 0x3d, 0xc9, 0x15, 0x45, 0xe5, 0x33, 0x69, 0xdf, 0x26, 0x83, 0x7f, 0x39, 0x4c, 0x56, 0x77, 0x7c, 0x95, 0xb6, 0x48, 0xbd, 0x1a, 0x72, 0x92, 0x1a, 0xbf, 0x49, 0x56, ++ 0x3f, 0x99, 0xcb, 0x9d, 0x98, 0xea, 0xb5, 0xc6, 0x66, 0x66, 0xf6, 0xb1, 0x6f, 0x74, 0x02, 0x24, 0x81, 0xfa, 0x21, 0x4e, 0x61, 0x76, 0x98, 0xd3, 0xbb, 0xd1, 0x3c, 0xb3, 0x08, 0x71, 0x3f, 0xdc, ++ 0xc7, 0xcf, 0xd3, 0x97, 0xb9, 0xca, 0x39, 0xaf, 0xf4, 0xc7, 0x44, 0xd5, 0x71, 0x5d, 0x58, 0x96, 0x6f, 0x2c, 0xf9, 0x70, 0x70, 0x15, 0xc8, 0xf3, 0x54, 0x3e, 0xd2, 0x86, 0xa3, 0xd8, 0xd5, 0xcb, ++ 0xf6, 0x4a, 0xce, 0xdf, 0xc0, 0x29, 0x71, 0xa9, 0x10, 0x72, 0xc6, 0x9d, 0x2e, 0xf4, 0x98, 0x29, 0xf1, 0x03, 0x7f, 0x05, 0x0c, 0x5b, 0x92, 0x22, 0x98, 0x56, 0xcb, 0x12, 0xb4, 0x56, 0xcc, 0x09, ++ 0x52, 0x82, 0xa6, 0x26, 0x87, 0xea, 0x38, 0xc9, 0x77, 0x8a, 0xea, 0x49, 0x1d, 0xff, 0x06, 0x97, 0x11, 0xfb, 0xbe, 0x05, 0xe8, 0xcd, 0x9b, 0xf4, 0x4a, 0x8e, 0x71, 0x26, 0x19, 0x57, 0x3e, 0x12, ++ 0xea, 0xa7, 0xb2, 0x38, 0x29, 0xdc, 0x67, 0x26, 0xbf, 0xe3, 0x3d, 0xa1, 0x36, 0xb8, 0x1e, 0x15, 0x32, 0x51, 0x50, 0x8f, 0x62, 0x85, 0xba, 0x15, 0xb2, 0xc1, 0x23, 0x76, 0x77, 0xfe, 0x5b, 0x14, ++ 0xb4, 0xe3, 0x3f, 0x98, 0xc3, 0x26, 0xbc, 0x58, 0xb9, 0xd8, 0xe0, 0x75, 0xa2, 0x5b, 0x94, 0xc8, 0xa2, 0x32, 0x33, 0x02, 0x9d, 0xcc, 0x78, 0x6b, 0x13, 0x5c, 0x56, 0x16, 0x4b, 0xa3, 0xd1, 0x60, ++ 0xcb, 0xce, 0xa8, 0x54, 0xb7, 0x97, 0x1f, 0x9c, 0xd7, 0x3a, 0x38, 0x3a, 0xac, 0x05, 0x0a, 0x30, 0x2a, 0xd8, 0x3b, 0x3e, 0x3a, 0xb9, 0x02, 0x46, 0xad, 0x16, 0x0a, 0x32, 0x1d, 0x33, 0x0a, 0xcd, ++ 0xec, 0x7c, 0xa6, 0x64, 0x3d, 0x7e, 0xc0, 0x1f, 0x91, 0x69, 0x1f, 0x16, 0x32, 0x5b, 0xdf, 0x39, 0x69, 0x50, 0xb8, 0x8d, 0xaf, 0xe3, 0x69, 0xc6, 0x54, 0xb8, 0x52, 0x05, 0x5c, 0x97, 0x03, 0x62, ++ 0xc6, 0x13, 0x80, 0x46, 0x07, 0x57, 0xc6, 0x58, 0x90, 0xf4, 0xe5, 0x92, 0x22, 0xe4, 0xa4, 0x06, 0x0b, 0x26, 0xc0, 0xeb, 0xc1, 0x01, 0x97, 0x59, 0x0d, 0xe3, 0xc8, 0xf0, 0x95, 0x5d, 0x65, 0x4b, ++ 0x37, 0x1c, 0xcb, 0x90, 0xac, 0xa3, 0x71, 0xb2, 0x94, 0x47, 0x6c, 0x16, 0xa4, 0x59, 0x6a, 0x1d, 0xe8, 0x30, 0x9e, 0x2a, 0x36, 0x12, 0xc6, 0x9b, 0x71, 0x25, 0x31, 0x05, 0x01, 0xe0, 0xc0, 0x49, ++ 0xb8, 0x74, 0x40, 0xd9, 0xa6, 0xd0, 0xec, 0xb9, 0x99, 0xc9, 0xa0, 0x94, 0x2a, 0xa3, 0x40, 0xf6, 0x03, 0x65, 0xea, 0xfd, 0x46, 0x5f, 0xc6, 0x4a, 0x0c, 0x5f, 0x8f, 0x3f, 0x90, 0x03, 0x48, 0x94, ++ 0x15, 0x89, 0x9d, 0x59, 0xa5, 0x43, 0xd8, 0x20, 0x8c, 0x54, 0xa3, 0x16, 0x65, 0x29, 0xb5, 0x39, 0x22, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, ++ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, ++ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, ++ }, ++ .spki_len = 1219, ++ .spki = { ++ 0x30, 0x82, 0x04, 0xbf, 0x30, 0x0f, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0b, 0x05, 0x03, 0x03, 0x05, 0x00, 0x03, 0x82, 0x04, 0xaa, 0x00, 0x30, 0x82, 0x04, 0xa5, 0x03, 0x82, ++ 0x04, 0xa1, 0x00, 0xa0, 0xb7, 0x1f, 0x67, 0xc6, 0xce, 0xc0, 0xd3, 0x56, 0x86, 0xd5, 0x13, 0x42, 0x34, 0x32, 0xe5, 0x12, 0xac, 0x40, 0x44, 0x55, 0x7e, 0x86, 0x8a, 0x62, 0x48, 0x00, 0x10, 0x9a, ++ 0x33, 0x55, 0xf9, 0x8f, 0x15, 0x14, 0x44, 0xe2, 0x85, 0x2e, 0x27, 0xea, 0x6e, 0xdb, 0x19, 0x92, 0xca, 0xd3, 0x97, 0x3c, 0x3a, 0x6f, 0xf7, 0x9a, 0x5a, 0x04, 0x9a, 0x25, 0x9e, 0xb5, 0x41, 0x5a, ++ 0xa2, 0xa2, 0x62, 0x45, 0x6e, 0xc9, 0x49, 0x5b, 0xbb, 0x52, 0x00, 0xd8, 0xd3, 0x16, 0x3a, 0x5b, 0x10, 0x22, 0x62, 0x92, 0xec, 0xa0, 0x10, 0x21, 0x38, 0x9d, 0xa3, 0x78, 0x81, 0xe2, 0x76, 0x30, ++ 0x65, 0x50, 0xc6, 0xef, 0xb6, 0x44, 0x0e, 0xc5, 0x1a, 0x2f, 0x73, 0x48, 0x34, 0x9b, 0x85, 0x1c, 0xd4, 0xaa, 0x01, 0x75, 0xa0, 0x55, 0x02, 0x13, 0xc4, 0x79, 0x1d, 0x91, 0x01, 0x12, 0x20, 0x82, ++ 0x4b, 0x2b, 0x61, 0x65, 0x08, 0x13, 0xad, 0xfd, 0x2c, 0xb1, 0x05, 0x38, 0xbf, 0xab, 0x0a, 0x72, 0x6f, 0x81, 0x12, 0x9e, 0xd2, 0xc0, 0xf0, 0x6a, 0x16, 0xb7, 0x01, 0x09, 0x0b, 0xf0, 0x48, 0xc5, ++ 0xa4, 0x01, 0x26, 0xd5, 0x72, 0xfc, 0xd4, 0x7a, 0xa1, 0x21, 0x8f, 0xb0, 0x15, 0x47, 0xd1, 0x50, 0x79, 0x2d, 0x23, 0x16, 0xcb, 0x32, 0x0d, 0x51, 0x44, 0xba, 0x35, 0x08, 0xa1, 0xeb, 0xbb, 0x5a, ++ 0xc1, 0xc2, 0x29, 0x13, 0xe8, 0x29, 0x5f, 0xab, 0x59, 0xbf, 0x58, 0x37, 0xa7, 0x78, 0xcf, 0x28, 0x22, 0x7e, 0x07, 0xe1, 0x03, 0x2d, 0xab, 0x7d, 0x0e, 0x09, 0xa1, 0x5f, 0x13, 0x41, 0x48, 0xc1, ++ 0x20, 0x09, 0xda, 0x53, 0x6b, 0x22, 0xcc, 0x62, 0x47, 0x4e, 0x69, 0xcc, 0x15, 0x54, 0xc0, 0x81, 0x4d, 0x6c, 0xa0, 0xb7, 0x22, 0x59, 0x43, 0x83, 0xa9, 0xd0, 0xa2, 0xc7, 0x7f, 0xd3, 0x65, 0xa5, ++ 0x54, 0x42, 0x95, 0xfb, 0xb9, 0x73, 0xf9, 0x1e, 0xa5, 0x64, 0x90, 0xd6, 0xca, 0x68, 0x76, 0x49, 0x7b, 0x98, 0xb3, 0xcb, 0x12, 0x41, 0x7c, 0x25, 0x7b, 0x6d, 0x0f, 0x71, 0x83, 0xdb, 0xb6, 0x9e, ++ 0x33, 0x07, 0x5b, 0xeb, 0x01, 0x17, 0xb6, 0x91, 0x4c, 0x69, 0xba, 0x38, 0x34, 0x94, 0x22, 0xf2, 0xf4, 0x33, 0x64, 0x82, 0x2a, 0x25, 0x70, 0x95, 0x2d, 0xd5, 0x07, 0x7b, 0x90, 0x75, 0x5f, 0x15, ++ 0x74, 0x11, 0x5b, 0x8e, 0x22, 0x14, 0x27, 0x58, 0x59, 0x61, 0x91, 0x3a, 0x9b, 0xfa, 0x05, 0x02, 0xb5, 0xd7, 0x9a, 0xb7, 0x81, 0x17, 0x44, 0xe6, 0x56, 0x3c, 0x5b, 0x62, 0xc5, 0xcc, 0x4e, 0x93, ++ 0x23, 0x9a, 0x0a, 0x8c, 0xc6, 0x0f, 0xe8, 0x48, 0xf8, 0x4a, 0x95, 0xf5, 0x90, 0x25, 0x99, 0xb5, 0x4a, 0x06, 0x62, 0x93, 0xa2, 0x02, 0x1d, 0xa1, 0x96, 0x76, 0x6c, 0x17, 0xc7, 0xe8, 0x63, 0xaf, ++ 0x79, 0x0c, 0x27, 0x0b, 0x21, 0x6a, 0x25, 0x13, 0x8d, 0xda, 0x0c, 0x81, 0x26, 0xe0, 0x93, 0x77, 0x87, 0x98, 0x59, 0xdb, 0x35, 0x8f, 0x9b, 0x82, 0xb7, 0xc8, 0xa6, 0x79, 0x2a, 0xce, 0xe9, 0x2a, ++ 0x4c, 0xbd, 0xe3, 0xce, 0xdd, 0x45, 0x00, 0xac, 0xbc, 0x55, 0x5c, 0x28, 0x8e, 0xff, 0x97, 0x95, 0x26, 0x5b, 0x90, 0x05, 0x35, 0x1c, 0x52, 0xe2, 0x65, 0x35, 0x54, 0xab, 0xaa, 0xf8, 0x72, 0xdf, ++ 0x95, 0xca, 0x7f, 0x79, 0x59, 0x03, 0xf0, 0xb0, 0xa1, 0x82, 0xb1, 0x8a, 0xeb, 0x04, 0x75, 0xb2, 0x9f, 0x6e, 0x3a, 0xbf, 0x4c, 0x22, 0x50, 0xfe, 0x7b, 0x84, 0x2a, 0x73, 0x65, 0x50, 0x16, 0xa8, ++ 0xfc, 0x72, 0x9f, 0x39, 0x05, 0x07, 0xac, 0xa9, 0x36, 0x82, 0x5a, 0x98, 0xb3, 0xa3, 0x2e, 0x6b, 0x25, 0x54, 0xce, 0x95, 0x28, 0x94, 0x1a, 0x3b, 0xb8, 0xc9, 0x09, 0x96, 0x00, 0x8d, 0x74, 0xfb, ++ 0xcd, 0x02, 0x0a, 0x02, 0xe7, 0x06, 0xa6, 0xde, 0x7b, 0x02, 0xaf, 0x40, 0x4c, 0x10, 0xdb, 0x00, 0xfa, 0xec, 0x02, 0xd3, 0xea, 0xa6, 0xd9, 0x56, 0x1a, 0x15, 0x65, 0xa7, 0xb0, 0x5c, 0x63, 0x66, ++ 0xd0, 0x9d, 0xa7, 0xa5, 0x37, 0xf2, 0x0c, 0x7b, 0x28, 0x59, 0xa8, 0x3e, 0x02, 0x9e, 0x13, 0xa9, 0xbd, 0x28, 0x91, 0x57, 0xc5, 0xb7, 0x4c, 0x84, 0xea, 0xa3, 0x07, 0x75, 0x3d, 0x43, 0x12, 0x02, ++ 0xa3, 0xd9, 0xb6, 0x16, 0x22, 0x18, 0xbe, 0xc5, 0x34, 0x69, 0x45, 0xbf, 0xef, 0x55, 0xb6, 0x24, 0xc5, 0xc6, 0xe3, 0x73, 0x35, 0x9b, 0xb1, 0xc4, 0x79, 0x95, 0x2b, 0xba, 0xba, 0x4d, 0x65, 0x55, ++ 0xc2, 0x76, 0x57, 0x3e, 0x51, 0x52, 0xb5, 0x53, 0x90, 0x19, 0x99, 0xf6, 0x94, 0x02, 0xd1, 0x50, 0xbe, 0xf7, 0x9d, 0x74, 0xfb, 0x29, 0x53, 0x01, 0x8f, 0xf4, 0x86, 0x66, 0x74, 0x6a, 0xce, 0x60, ++ 0x78, 0x14, 0xa1, 0xfa, 0x33, 0x19, 0x57, 0x20, 0xf8, 0x38, 0x78, 0xd3, 0xb5, 0x75, 0xc7, 0x25, 0x74, 0x4a, 0x72, 0x07, 0x0d, 0xd0, 0x44, 0x01, 0x80, 0x42, 0xda, 0x25, 0x71, 0x4d, 0x17, 0x30, ++ 0x90, 0x32, 0x3a, 0x51, 0xe6, 0xc0, 0x63, 0xd2, 0x03, 0x88, 0x13, 0x80, 0x91, 0x27, 0x61, 0xfc, 0x34, 0x10, 0x83, 0x90, 0x95, 0xf2, 0x6c, 0x0e, 0x68, 0x7a, 0x00, 0x70, 0x54, 0x95, 0xe1, 0x71, ++ 0xb5, 0x71, 0x51, 0xac, 0xe0, 0x49, 0x8e, 0x30, 0xf1, 0x4c, 0xa9, 0xb0, 0x2f, 0x6e, 0x40, 0x83, 0x18, 0x54, 0xc2, 0xe0, 0xab, 0x1e, 0xcd, 0x0c, 0x21, 0xd8, 0xe4, 0xc7, 0xe6, 0x69, 0xcd, 0x72, ++ 0x82, 0x30, 0xb9, 0xd1, 0x1f, 0x72, 0xc2, 0x66, 0xe3, 0x44, 0x66, 0xf9, 0xc0, 0x15, 0x9e, 0xf4, 0x24, 0xf8, 0xf3, 0x1d, 0x95, 0xa5, 0x7b, 0xa0, 0xe2, 0x10, 0x54, 0x3c, 0x10, 0xc6, 0x50, 0x3f, ++ 0xb5, 0xc6, 0x3e, 0xd2, 0x3a, 0xa3, 0x6c, 0xd6, 0xa6, 0xf3, 0x78, 0x26, 0x1b, 0x0b, 0x1e, 0x79, 0x50, 0x9d, 0x8b, 0xeb, 0x36, 0xaa, 0x26, 0x3d, 0xc9, 0x15, 0x45, 0xe5, 0x33, 0x69, 0xdf, 0x26, ++ 0x83, 0x7f, 0x39, 0x4c, 0x56, 0x77, 0x7c, 0x95, 0xb6, 0x48, 0xbd, 0x1a, 0x72, 0x92, 0x1a, 0xbf, 0x49, 0x56, 0x3f, 0x99, 0xcb, 0x9d, 0x98, 0xea, 0xb5, 0xc6, 0x66, 0x66, 0xf6, 0xb1, 0x6f, 0x74, ++ 0x02, 0x24, 0x81, 0xfa, 0x21, 0x4e, 0x61, 0x76, 0x98, 0xd3, 0xbb, 0xd1, 0x3c, 0xb3, 0x08, 0x71, 0x3f, 0xdc, 0xc7, 0xcf, 0xd3, 0x97, 0xb9, 0xca, 0x39, 0xaf, 0xf4, 0xc7, 0x44, 0xd5, 0x71, 0x5d, ++ 0x58, 0x96, 0x6f, 0x2c, 0xf9, 0x70, 0x70, 0x15, 0xc8, 0xf3, 0x54, 0x3e, 0xd2, 0x86, 0xa3, 0xd8, 0xd5, 0xcb, 0xf6, 0x4a, 0xce, 0xdf, 0xc0, 0x29, 0x71, 0xa9, 0x10, 0x72, 0xc6, 0x9d, 0x2e, 0xf4, ++ 0x98, 0x29, 0xf1, 0x03, 0x7f, 0x05, 0x0c, 0x5b, 0x92, 0x22, 0x98, 0x56, 0xcb, 0x12, 0xb4, 0x56, 0xcc, 0x09, 0x52, 0x82, 0xa6, 0x26, 0x87, 0xea, 0x38, 0xc9, 0x77, 0x8a, 0xea, 0x49, 0x1d, 0xff, ++ 0x06, 0x97, 0x11, 0xfb, 0xbe, 0x05, 0xe8, 0xcd, 0x9b, 0xf4, 0x4a, 0x8e, 0x71, 0x26, 0x19, 0x57, 0x3e, 0x12, 0xea, 0xa7, 0xb2, 0x38, 0x29, 0xdc, 0x67, 0x26, 0xbf, 0xe3, 0x3d, 0xa1, 0x36, 0xb8, ++ 0x1e, 0x15, 0x32, 0x51, 0x50, 0x8f, 0x62, 0x85, 0xba, 0x15, 0xb2, 0xc1, 0x23, 0x76, 0x77, 0xfe, 0x5b, 0x14, 0xb4, 0xe3, 0x3f, 0x98, 0xc3, 0x26, 0xbc, 0x58, 0xb9, 0xd8, 0xe0, 0x75, 0xa2, 0x5b, ++ 0x94, 0xc8, 0xa2, 0x32, 0x33, 0x02, 0x9d, 0xcc, 0x78, 0x6b, 0x13, 0x5c, 0x56, 0x16, 0x4b, 0xa3, 0xd1, 0x60, 0xcb, 0xce, 0xa8, 0x54, 0xb7, 0x97, 0x1f, 0x9c, 0xd7, 0x3a, 0x38, 0x3a, 0xac, 0x05, ++ 0x0a, 0x30, 0x2a, 0xd8, 0x3b, 0x3e, 0x3a, 0xb9, 0x02, 0x46, 0xad, 0x16, 0x0a, 0x32, 0x1d, 0x33, 0x0a, 0xcd, 0xec, 0x7c, 0xa6, 0x64, 0x3d, 0x7e, 0xc0, 0x1f, 0x91, 0x69, 0x1f, 0x16, 0x32, 0x5b, ++ 0xdf, 0x39, 0x69, 0x50, 0xb8, 0x8d, 0xaf, 0xe3, 0x69, 0xc6, 0x54, 0xb8, 0x52, 0x05, 0x5c, 0x97, 0x03, 0x62, 0xc6, 0x13, 0x80, 0x46, 0x07, 0x57, 0xc6, 0x58, 0x90, 0xf4, 0xe5, 0x92, 0x22, 0xe4, ++ 0xa4, 0x06, 0x0b, 0x26, 0xc0, 0xeb, 0xc1, 0x01, 0x97, 0x59, 0x0d, 0xe3, 0xc8, 0xf0, 0x95, 0x5d, 0x65, 0x4b, 0x37, 0x1c, 0xcb, 0x90, 0xac, 0xa3, 0x71, 0xb2, 0x94, 0x47, 0x6c, 0x16, 0xa4, 0x59, ++ 0x6a, 0x1d, 0xe8, 0x30, 0x9e, 0x2a, 0x36, 0x12, 0xc6, 0x9b, 0x71, 0x25, 0x31, 0x05, 0x01, 0xe0, 0xc0, 0x49, 0xb8, 0x74, 0x40, 0xd9, 0xa6, 0xd0, 0xec, 0xb9, 0x99, 0xc9, 0xa0, 0x94, 0x2a, 0xa3, ++ 0x40, 0xf6, 0x03, 0x65, 0xea, 0xfd, 0x46, 0x5f, 0xc6, 0x4a, 0x0c, 0x5f, 0x8f, 0x3f, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9d, 0x59, 0xa5, 0x43, 0xd8, 0x20, 0x8c, 0x54, 0xa3, 0x16, 0x65, 0x29, ++ 0xb5, 0x39, 0x22, ++ }, ++ .secret_len = 32, ++ .secret = { ++ 0xed, 0x20, 0x14, 0x0c, 0x05, 0xd7, 0x8b, 0x15, 0xf2, 0xe4, 0x12, 0x67, 0x1a, 0x84, 0x15, 0x42, 0x17, 0xfd, 0x77, 0x61, 0x9a, 0x2c, 0x52, 0x2d, 0x3c, 0x3c, 0xb6, 0x88, 0xcb, 0x34, 0xc6, 0x8b, ++ }, ++ .cipher_len = 1088, ++ .cipher = { ++ 0xea, 0xdd, 0x5a, 0xda, 0x14, 0xda, 0x57, 0xf0, 0xae, 0xf3, 0x50, 0x5f, 0x1c, 0xaa, 0x64, 0x85, 0xd4, 0x23, 0x8d, 0x99, 0x9a, 0x3e, 0xf4, 0xb0, 0xa5, 0x9a, 0x1c, 0xdb, 0xe0, 0xa2, 0x7e, 0x47, ++ 0x85, 0x47, 0xa3, 0xa9, 0x9d, 0x2a, 0xb0, 0x9a, 0xc7, 0xd7, 0xc8, 0xf5, 0xae, 0x3d, 0x64, 0x32, 0x04, 0x5c, 0xba, 0x3f, 0xa7, 0x78, 0x34, 0x58, 0x92, 0x54, 0x2b, 0xd8, 0x1c, 0x05, 0xbe, 0xfc, ++ 0xd2, 0xe5, 0xcc, 0x9a, 0x57, 0x9b, 0xef, 0xb7, 0xc5, 0x8d, 0x02, 0xfb, 0x94, 0xf3, 0x33, 0x92, 0xfe, 0x17, 0xf4, 0xeb, 0xa2, 0xcb, 0x51, 0x0e, 0xc7, 0x4c, 0xc9, 0xd1, 0xd8, 0xa8, 0x7c, 0x10, ++ 0x66, 0xa4, 0x86, 0x9a, 0x39, 0x83, 0xe6, 0x64, 0xbf, 0xe9, 0xde, 0xa5, 0xae, 0x4f, 0xdf, 0x31, 0x0c, 0x8f, 0x59, 0x81, 0x5a, 0x67, 0x8f, 0xa3, 0x25, 0xf3, 0x69, 0xaf, 0x84, 0xff, 0xeb, 0xc1, ++ 0xd1, 0x50, 0x43, 0x1f, 0xe3, 0xbd, 0x27, 0x34, 0xf6, 0x36, 0xcf, 0x65, 0x8e, 0x6c, 0x1a, 0x6a, 0x6e, 0x2c, 0xbe, 0x07, 0x1f, 0x9a, 0x7c, 0x26, 0x11, 0x9a, 0xd1, 0x05, 0x09, 0x8e, 0xda, 0x62, ++ 0x2c, 0xab, 0x8e, 0x17, 0x67, 0x62, 0x10, 0x98, 0x77, 0xd9, 0xae, 0x9d, 0x67, 0x29, 0xd4, 0x4a, 0x58, 0xe7, 0x07, 0xd6, 0xb8, 0xad, 0x6e, 0x69, 0x6a, 0x33, 0xc6, 0x72, 0xda, 0x9d, 0x08, 0xda, ++ 0x2a, 0x7f, 0x9e, 0x3b, 0xf0, 0x22, 0x18, 0x23, 0x87, 0x22, 0xa4, 0x6b, 0x31, 0xd4, 0x9d, 0xaf, 0xf9, 0xaf, 0x00, 0xa6, 0x36, 0x3c, 0x3a, 0x42, 0x3b, 0x2e, 0x87, 0x3d, 0xef, 0xdd, 0xbc, 0xd9, ++ 0x69, 0xb7, 0x5a, 0x81, 0x05, 0x3d, 0x9a, 0x97, 0xc0, 0x6d, 0xe2, 0xbf, 0xe3, 0xd0, 0xcf, 0xd3, 0xd3, 0xc7, 0x79, 0x83, 0xb1, 0x8d, 0xbd, 0xe2, 0x3c, 0x07, 0x28, 0x60, 0x4a, 0x71, 0x43, 0x5a, ++ 0xd4, 0x0d, 0xf1, 0x57, 0x90, 0x96, 0xdd, 0xbe, 0x02, 0xe4, 0x61, 0x22, 0x10, 0xca, 0xa0, 0x34, 0xdc, 0xef, 0xb8, 0xb4, 0xd7, 0xb5, 0xe6, 0xd2, 0xeb, 0xa3, 0x7a, 0x79, 0xfb, 0x61, 0xf3, 0x4b, ++ 0x5a, 0xf7, 0xd9, 0xb2, 0x7b, 0x13, 0xe4, 0x93, 0x62, 0x22, 0x41, 0x12, 0x49, 0xb7, 0xfb, 0xb6, 0x9e, 0x73, 0x46, 0x1d, 0xaf, 0x4a, 0xa6, 0xf3, 0xe2, 0xc7, 0x39, 0x44, 0xf1, 0x0c, 0xe6, 0x7c, ++ 0x86, 0xfe, 0xd2, 0x60, 0xbd, 0xa7, 0xb4, 0x0d, 0xb3, 0x9b, 0x1d, 0xe3, 0xc7, 0xd8, 0xf0, 0x9a, 0x77, 0xf3, 0xc8, 0x4b, 0xc6, 0x29, 0x31, 0xd2, 0x28, 0xb2, 0x4a, 0x57, 0x4a, 0xc3, 0xf4, 0xeb, ++ 0x74, 0x5c, 0xff, 0x7e, 0x03, 0x1a, 0x3f, 0xb2, 0xa0, 0x85, 0x95, 0xc1, 0x53, 0x70, 0xa3, 0xc8, 0x2d, 0xb7, 0xd9, 0xf4, 0x1b, 0xb1, 0xd8, 0xec, 0xc4, 0x29, 0xcf, 0xa3, 0xa6, 0x58, 0x33, 0x01, ++ 0x6a, 0xb6, 0xea, 0x60, 0xc9, 0x39, 0x0c, 0xfa, 0x1b, 0x65, 0xcc, 0xea, 0xe5, 0x50, 0x94, 0x07, 0x95, 0x38, 0x6e, 0xd2, 0x41, 0x33, 0xfb, 0xae, 0x8b, 0x30, 0x17, 0x50, 0x2a, 0xf3, 0xcf, 0xe9, ++ 0x51, 0xd7, 0x81, 0xd3, 0x6c, 0xfe, 0xff, 0x85, 0xbf, 0xdf, 0x5a, 0xf0, 0x40, 0xbe, 0x40, 0x65, 0x68, 0x1b, 0x3b, 0x0a, 0x63, 0xc2, 0x74, 0x7f, 0x08, 0x08, 0xcf, 0x3d, 0xa7, 0x25, 0x16, 0x9d, ++ 0xde, 0xd1, 0x00, 0x3d, 0xa6, 0xcd, 0x5d, 0xe4, 0xcb, 0x04, 0x19, 0x42, 0x93, 0x8d, 0x0a, 0x7f, 0x88, 0x02, 0xd4, 0x8f, 0x2e, 0x3c, 0x6e, 0xeb, 0x45, 0xcd, 0x90, 0xaf, 0x6f, 0xc9, 0xf4, 0x50, ++ 0x7e, 0x9f, 0x83, 0x80, 0xac, 0x33, 0xca, 0xca, 0x77, 0x51, 0x48, 0x7f, 0x65, 0x50, 0x04, 0x41, 0xd9, 0x20, 0xb9, 0x48, 0x80, 0xa4, 0x97, 0xd0, 0x1c, 0x08, 0x02, 0xbb, 0x08, 0xd7, 0x4c, 0x5d, ++ 0x4c, 0x6b, 0xf2, 0xd8, 0x65, 0xee, 0x58, 0x22, 0xb3, 0x37, 0x5c, 0x75, 0x5d, 0x1a, 0x5e, 0x3d, 0x32, 0x44, 0xc3, 0x20, 0x51, 0x0a, 0x1e, 0x30, 0x35, 0x77, 0x02, 0xcd, 0x42, 0x52, 0x07, 0x2c, ++ 0xf8, 0x64, 0x37, 0xf7, 0xa9, 0xde, 0x55, 0x61, 0xc7, 0xe5, 0x9b, 0x94, 0xb9, 0x58, 0x41, 0x00, 0x13, 0x1a, 0xc3, 0x99, 0xf4, 0xc1, 0xeb, 0x19, 0xfb, 0x4b, 0xdf, 0x65, 0xe6, 0x27, 0x85, 0xe9, ++ 0x7c, 0x19, 0x4b, 0x87, 0x64, 0xcc, 0xf3, 0x2f, 0xd0, 0x5d, 0x80, 0x4c, 0x2e, 0x43, 0x9d, 0xda, 0x2a, 0x10, 0x92, 0x74, 0xfb, 0xff, 0xa8, 0x1a, 0x83, 0x7c, 0x51, 0xb2, 0x6d, 0x15, 0x4f, 0x97, ++ 0x4b, 0x88, 0x2a, 0x5b, 0x17, 0x4b, 0x30, 0x8f, 0xc4, 0x87, 0x68, 0xd2, 0x22, 0x92, 0x25, 0x32, 0xb1, 0x83, 0xab, 0xdf, 0x6f, 0xbb, 0x0b, 0xc7, 0x49, 0x27, 0x66, 0x97, 0x4d, 0x32, 0x1e, 0xe6, ++ 0xfb, 0x7c, 0x5f, 0x7b, 0x3e, 0xea, 0x23, 0x78, 0xdc, 0x6d, 0x6b, 0xb4, 0x80, 0x19, 0x25, 0x0b, 0x8d, 0x8d, 0x8d, 0xed, 0xb5, 0x22, 0x42, 0x1a, 0xee, 0xdb, 0x31, 0x86, 0x76, 0x98, 0x2a, 0x80, ++ 0xe7, 0x96, 0x1e, 0xc4, 0x0e, 0x6d, 0x7f, 0x33, 0x39, 0x69, 0x42, 0x55, 0xba, 0xff, 0x51, 0xbe, 0x3a, 0x7e, 0xa7, 0xd8, 0x79, 0x3a, 0x10, 0x9b, 0xe3, 0xae, 0x44, 0x23, 0xbf, 0x08, 0x2e, 0x20, ++ 0x6a, 0x57, 0x3b, 0x4f, 0x0f, 0x93, 0xfc, 0x16, 0xdd, 0xe8, 0x1b, 0xd5, 0xdc, 0x58, 0x3f, 0x52, 0x8c, 0x08, 0xa0, 0xa9, 0xab, 0x8e, 0x6c, 0xd5, 0x24, 0xe2, 0x97, 0xc9, 0xcf, 0x0f, 0x43, 0xc3, ++ 0x44, 0x91, 0x38, 0x30, 0xec, 0xb1, 0x6f, 0x91, 0x44, 0x14, 0x77, 0xba, 0x78, 0x2e, 0xdd, 0x4e, 0x73, 0xe7, 0x32, 0x97, 0x9d, 0x3a, 0x66, 0x4e, 0xb9, 0x9e, 0xa5, 0xd2, 0x4b, 0x6c, 0x84, 0xaa, ++ 0x69, 0xf3, 0x77, 0xcb, 0x0c, 0xad, 0x5a, 0xe4, 0xe6, 0x41, 0xe3, 0x8b, 0x19, 0x7a, 0x09, 0x94, 0xd5, 0x8b, 0x23, 0x87, 0xe9, 0x17, 0x60, 0xe9, 0xb6, 0xfe, 0xbc, 0xb4, 0x45, 0xcf, 0x85, 0xbb, ++ 0xa2, 0x4a, 0x94, 0xcd, 0xa7, 0x5e, 0x33, 0x86, 0x74, 0x42, 0x82, 0x49, 0xfe, 0x6d, 0xe4, 0x69, 0x26, 0x01, 0xd1, 0xea, 0xe0, 0xea, 0x02, 0x1d, 0x9b, 0xc8, 0x07, 0x7b, 0xe8, 0x66, 0x5d, 0x07, ++ 0x37, 0x74, 0x8f, 0xa3, 0x0f, 0xcf, 0x80, 0xf7, 0xe4, 0x82, 0x58, 0x46, 0x74, 0xf6, 0x33, 0xa5, 0x00, 0x6a, 0x53, 0x82, 0x67, 0x62, 0x7f, 0xd9, 0x18, 0x54, 0xe0, 0x87, 0x12, 0x68, 0xa6, 0xb0, ++ 0xb0, 0x5d, 0xd5, 0x14, 0x95, 0x13, 0x5d, 0xef, 0xb9, 0x37, 0x6e, 0x9b, 0x84, 0x1b, 0x64, 0xe5, 0xdb, 0xf4, 0x3c, 0xe6, 0xc7, 0x4b, 0xcf, 0x3a, 0xe1, 0xfc, 0x42, 0x7e, 0x81, 0x0b, 0x7c, 0xbf, ++ 0x69, 0x57, 0xdb, 0xf9, 0x04, 0x69, 0x0e, 0x87, 0x84, 0x25, 0x43, 0x89, 0x7d, 0xe7, 0x8f, 0x13, 0xd0, 0x8d, 0x92, 0xeb, 0xd2, 0x7f, 0xb2, 0xcf, 0xcc, 0x0c, 0x76, 0x54, 0x30, 0x58, 0x90, 0x57, ++ 0xb1, 0x6b, 0x15, 0xf2, 0x07, 0xca, 0x1e, 0x6f, 0x08, 0xd5, 0x26, 0x16, 0xdd, 0x57, 0xad, 0x43, 0xef, 0xea, 0x6f, 0xdd, 0xaa, 0xea, 0x18, 0xd3, 0x37, 0x31, 0xfa, 0xc7, 0xec, 0xaa, 0xe9, 0x50, ++ 0xe1, 0xdf, 0x3c, 0x5a, 0x4e, 0x6f, 0xcb, 0x22, 0x3d, 0xf5, 0xe8, 0x6b, 0x48, 0x7f, 0xd7, 0x09, 0x2d, 0x08, 0x22, 0xef, 0xfa, 0xec, 0x82, 0xc4, 0xbe, 0xc1, 0x0c, 0x60, 0x0f, 0xdb, 0x90, 0xe7, ++ 0x74, 0x82, 0x91, 0x1b, 0x15, 0x95, 0x27, 0x77, 0x38, 0x84, 0x14, 0x09, 0xd0, 0xf8, 0xf1, 0x13, 0x19, 0x1d, 0x47, 0xf5, 0xe5, 0x6c, 0x11, 0x5a, 0x05, 0xde, 0xa7, 0x59, 0xaa, 0x6f, 0xb1, 0xd0, ++ 0x47, 0xf9, 0xfc, 0xa4, 0xed, 0x51, 0x9e, 0xa5, 0xd2, 0x1f, 0xe3, 0xba, 0x5b, 0x94, 0x34, 0xfe, 0xa1, 0x28, 0x3d, 0xfa, 0xd6, 0x3d, 0x01, 0x58, 0x9b, 0x0e, 0xb6, 0x1f, 0x24, 0x43, 0x51, 0xd0, ++ 0x33, 0x41, 0xdc, 0xd4, 0xdf, 0x62, 0x26, 0x5a, 0xfc, 0xae, 0xc6, 0x67, 0x6a, 0x87, 0x7d, 0x5c, 0xac, 0xb3, 0x59, 0xeb, 0xb5, 0x31, 0x96, 0x10, 0xdd, 0x44, 0x7d, 0xa9, 0x7e, 0x95, 0x0b, 0x0c, ++ }, ++ }, ++ { ++ .name = "Kyber Round 2, 786 KAT 0", ++ .version = 0, ++ .keyform = CK_IBM_KYBER_KEYFORM_ROUND2_768, ++ .sk_len = 2400, ++ .sk = { ++ 0x07, 0x63, 0x8F, 0xB6, 0x98, 0x68, 0xF3, 0xD3, 0x20, 0xE5, 0x86, 0x2B, 0xD9, 0x69, 0x33, 0xFE, 0xB3, 0x11, 0xB3, 0x62, 0x09, 0x3C, 0x9B, 0x5D, 0x50, 0x17, 0x0B, 0xCE, 0xD4, 0x3F, 0x1B, 0x53, ++ 0x6D, 0x9A, 0x20, 0x4B, 0xB1, 0xF2, 0x26, 0x95, 0x95, 0x0B, 0xA1, 0xF2, 0xA9, 0xE8, 0xEB, 0x82, 0x8B, 0x28, 0x44, 0x88, 0x76, 0x0B, 0x3F, 0xC8, 0x4F, 0xAB, 0xA0, 0x42, 0x75, 0xD5, 0x62, 0x8E, ++ 0x39, 0xC5, 0xB2, 0x47, 0x13, 0x74, 0x28, 0x3C, 0x50, 0x32, 0x99, 0xC0, 0xAB, 0x49, 0xB6, 0x6B, 0x8B, 0xBB, 0x56, 0xA4, 0x18, 0x66, 0x24, 0xF9, 0x19, 0xA2, 0xBA, 0x59, 0xBB, 0x08, 0xD8, 0x55, ++ 0x18, 0x80, 0xC2, 0xBE, 0xFC, 0x4F, 0x87, 0xF2, 0x5F, 0x59, 0xAB, 0x58, 0x7A, 0x79, 0xC3, 0x27, 0xD7, 0x92, 0xD5, 0x4C, 0x97, 0x4A, 0x69, 0x26, 0x2F, 0xF8, 0xA7, 0x89, 0x38, 0x28, 0x9E, 0x9A, ++ 0x87, 0xB6, 0x88, 0xB0, 0x83, 0xE0, 0x59, 0x5F, 0xE2, 0x18, 0xB6, 0xBB, 0x15, 0x05, 0x94, 0x1C, 0xE2, 0xE8, 0x1A, 0x5A, 0x64, 0xC5, 0xAA, 0xC6, 0x04, 0x17, 0x25, 0x69, 0x85, 0x34, 0x9E, 0xE4, ++ 0x7A, 0x52, 0x42, 0x0A, 0x5F, 0x97, 0x47, 0x7B, 0x72, 0x36, 0xAC, 0x76, 0xBC, 0x70, 0xE8, 0x28, 0x87, 0x29, 0x28, 0x7E, 0xE3, 0xE3, 0x4A, 0x3D, 0xBC, 0x36, 0x83, 0xC0, 0xB7, 0xB1, 0x00, 0x29, ++ 0xFC, 0x20, 0x34, 0x18, 0x53, 0x7E, 0x74, 0x66, 0xBA, 0x63, 0x85, 0xA8, 0xFF, 0x30, 0x1E, 0xE1, 0x27, 0x08, 0xF8, 0x2A, 0xAA, 0x1E, 0x38, 0x0F, 0xC7, 0xA8, 0x8F, 0x8F, 0x20, 0x5A, 0xB7, 0xE8, ++ 0x8D, 0x7E, 0x95, 0x95, 0x2A, 0x55, 0xBA, 0x20, 0xD0, 0x9B, 0x79, 0xA4, 0x71, 0x41, 0xD6, 0x2B, 0xF6, 0xEB, 0x7D, 0xD3, 0x07, 0xB0, 0x8E, 0xCA, 0x13, 0xA5, 0xBC, 0x5F, 0x6B, 0x68, 0x58, 0x1C, ++ 0x68, 0x65, 0xB2, 0x7B, 0xBC, 0xDD, 0xAB, 0x14, 0x2F, 0x4B, 0x2C, 0xBF, 0xF4, 0x88, 0xC8, 0xA2, 0x27, 0x05, 0xFA, 0xA9, 0x8A, 0x2B, 0x9E, 0xEA, 0x35, 0x30, 0xC7, 0x66, 0x62, 0x33, 0x5C, 0xC7, ++ 0xEA, 0x3A, 0x00, 0x77, 0x77, 0x25, 0xEB, 0xCC, 0xCD, 0x2A, 0x46, 0x36, 0xB2, 0xD9, 0x12, 0x2F, 0xF3, 0xAB, 0x77, 0x12, 0x3C, 0xE0, 0x88, 0x3C, 0x19, 0x11, 0x11, 0x5E, 0x50, 0xC9, 0xE8, 0xA9, ++ 0x41, 0x94, 0xE4, 0x8D, 0xD0, 0xD0, 0x9C, 0xFF, 0xB3, 0xAD, 0xCD, 0x2C, 0x1E, 0x92, 0x43, 0x09, 0x03, 0xD0, 0x7A, 0xDB, 0xF0, 0x05, 0x32, 0x03, 0x15, 0x75, 0xAA, 0x7F, 0x9E, 0x7B, 0x5A, 0x1F, ++ 0x33, 0x62, 0xDE, 0xC9, 0x36, 0xD4, 0x04, 0x3C, 0x05, 0xF2, 0x47, 0x6C, 0x07, 0x57, 0x8B, 0xC9, 0xCB, 0xAF, 0x2A, 0xB4, 0xE3, 0x82, 0x72, 0x7A, 0xD4, 0x16, 0x86, 0xA9, 0x6B, 0x25, 0x48, 0x82, ++ 0x0B, 0xB0, 0x3B, 0x32, 0xF1, 0x1B, 0x28, 0x11, 0xAD, 0x62, 0xF4, 0x89, 0xE9, 0x51, 0x63, 0x2A, 0xBA, 0x0D, 0x1D, 0xF8, 0x96, 0x80, 0xCC, 0x8A, 0x8B, 0x53, 0xB4, 0x81, 0xD9, 0x2A, 0x68, 0xD7, ++ 0x0B, 0x4E, 0xA1, 0xC3, 0xA6, 0xA5, 0x61, 0xC0, 0x69, 0x28, 0x82, 0xB5, 0xCA, 0x8C, 0xC9, 0x42, 0xA8, 0xD4, 0x95, 0xAF, 0xCB, 0x06, 0xDE, 0x89, 0x49, 0x8F, 0xB9, 0x35, 0xB7, 0x75, 0x90, 0x8F, ++ 0xE7, 0xA0, 0x3E, 0x32, 0x4D, 0x54, 0xCC, 0x19, 0xD4, 0xE1, 0xAA, 0xBD, 0x35, 0x93, 0xB3, 0x8B, 0x19, 0xEE, 0x13, 0x88, 0xFE, 0x49, 0x2B, 0x43, 0x12, 0x7E, 0x5A, 0x50, 0x42, 0x53, 0x78, 0x6A, ++ 0x0D, 0x69, 0xAD, 0x32, 0x60, 0x1C, 0x28, 0xE2, 0xC8, 0x85, 0x04, 0xA5, 0xBA, 0x59, 0x97, 0x06, 0x02, 0x3A, 0x61, 0x36, 0x3E, 0x17, 0xC6, 0xB9, 0xBB, 0x59, 0xBD, 0xC6, 0x97, 0x45, 0x2C, 0xD0, ++ 0x59, 0x45, 0x19, 0x83, 0xD7, 0x38, 0xCA, 0x3F, 0xD0, 0x34, 0xE3, 0xF5, 0x98, 0x88, 0x54, 0xCA, 0x05, 0x03, 0x1D, 0xB0, 0x96, 0x11, 0x49, 0x89, 0x88, 0x19, 0x7C, 0x6B, 0x30, 0xD2, 0x58, 0xDF, ++ 0xE2, 0x62, 0x65, 0x54, 0x1C, 0x89, 0xA4, 0xB3, 0x1D, 0x68, 0x64, 0xE9, 0x38, 0x9B, 0x03, 0xCB, 0x74, 0xF7, 0xEC, 0x43, 0x23, 0xFB, 0x94, 0x21, 0xA4, 0xB9, 0x79, 0x0A, 0x26, 0xD1, 0x7B, 0x03, ++ 0x98, 0xA2, 0x67, 0x67, 0x35, 0x09, 0x09, 0xF8, 0x4D, 0x57, 0xB6, 0x69, 0x4D, 0xF8, 0x30, 0x66, 0x4C, 0xA8, 0xB3, 0xC3, 0xC0, 0x3E, 0xD2, 0xAE, 0x67, 0xB8, 0x90, 0x06, 0x86, 0x8A, 0x68, 0x52, ++ 0x7C, 0xCD, 0x66, 0x64, 0x59, 0xAB, 0x7F, 0x05, 0x66, 0x71, 0x00, 0x0C, 0x61, 0x64, 0xD3, 0xA7, 0xF2, 0x66, 0xA1, 0x4D, 0x97, 0xCB, 0xD7, 0x00, 0x4D, 0x6C, 0x92, 0xCA, 0xCA, 0x77, 0x0B, 0x84, ++ 0x4A, 0x4F, 0xA9, 0xB1, 0x82, 0xE7, 0xB1, 0x8C, 0xA8, 0x85, 0x08, 0x2A, 0xC5, 0x64, 0x6F, 0xCB, 0x4A, 0x14, 0xE1, 0x68, 0x5F, 0xEB, 0x0C, 0x9C, 0xE3, 0x37, 0x2A, 0xB9, 0x53, 0x65, 0xC0, 0x4F, ++ 0xD8, 0x30, 0x84, 0xF8, 0x0A, 0x23, 0xFF, 0x10, 0xA0, 0x5B, 0xF1, 0x5F, 0x7F, 0xA5, 0xAC, 0xC6, 0xC0, 0xCB, 0x46, 0x2C, 0x33, 0xCA, 0x52, 0x4F, 0xA6, 0xB8, 0xBB, 0x35, 0x90, 0x43, 0xBA, 0x68, ++ 0x60, 0x9E, 0xAA, 0x25, 0x36, 0xE8, 0x1D, 0x08, 0x46, 0x3B, 0x19, 0x65, 0x3B, 0x54, 0x35, 0xBA, 0x94, 0x6C, 0x9A, 0xDD, 0xEB, 0x20, 0x2B, 0x04, 0xB0, 0x31, 0xCC, 0x96, 0x0D, 0xCC, 0x12, 0xE4, ++ 0x51, 0x8D, 0x42, 0x8B, 0x32, 0xB2, 0x57, 0xA4, 0xFC, 0x73, 0x13, 0xD3, 0xA7, 0x98, 0x0D, 0x80, 0x08, 0x2E, 0x93, 0x4F, 0x9D, 0x95, 0xC3, 0x2B, 0x0A, 0x01, 0x91, 0xA2, 0x36, 0x04, 0x38, 0x4D, ++ 0xD9, 0xE0, 0x79, 0xBB, 0xBA, 0xA2, 0x66, 0xD1, 0x4C, 0x3F, 0x75, 0x6B, 0x9F, 0x21, 0x33, 0x10, 0x74, 0x33, 0xA4, 0xE8, 0x3F, 0xA7, 0x18, 0x72, 0x82, 0xA8, 0x09, 0x20, 0x3A, 0x4F, 0xAF, 0x84, ++ 0x18, 0x51, 0x83, 0x3D, 0x12, 0x1A, 0xC3, 0x83, 0x84, 0x3A, 0x5E, 0x55, 0xBC, 0x23, 0x81, 0x42, 0x5E, 0x16, 0xC7, 0xDB, 0x4C, 0xC9, 0xAB, 0x5C, 0x1B, 0x0D, 0x91, 0xA4, 0x7E, 0x2B, 0x8D, 0xE0, ++ 0xE5, 0x82, 0xC8, 0x6B, 0x6B, 0x0D, 0x90, 0x7B, 0xB3, 0x60, 0xB9, 0x7F, 0x40, 0xAB, 0x5D, 0x03, 0x8F, 0x6B, 0x75, 0xC8, 0x14, 0xB2, 0x7D, 0x9B, 0x96, 0x8D, 0x41, 0x98, 0x32, 0xBC, 0x8C, 0x2B, ++ 0xEE, 0x60, 0x5E, 0xF6, 0xE5, 0x05, 0x9D, 0x33, 0x10, 0x0D, 0x90, 0x48, 0x5D, 0x37, 0x84, 0x50, 0x01, 0x42, 0x21, 0x73, 0x6C, 0x07, 0x40, 0x7C, 0xAC, 0x26, 0x04, 0x08, 0xAA, 0x64, 0x92, 0x66, ++ 0x19, 0x78, 0x8B, 0x86, 0x01, 0xC2, 0xA7, 0x52, 0xD1, 0xA6, 0xCB, 0xF8, 0x20, 0xD7, 0xC7, 0xA0, 0x47, 0x16, 0x20, 0x32, 0x25, 0xB3, 0x89, 0x5B, 0x93, 0x42, 0xD1, 0x47, 0xA8, 0x18, 0x5C, 0xFC, ++ 0x1B, 0xB6, 0x5B, 0xA0, 0x6B, 0x41, 0x42, 0x33, 0x99, 0x03, 0xC0, 0xAC, 0x46, 0x51, 0x38, 0x5B, 0x45, 0xD9, 0x8A, 0x8B, 0x19, 0xD2, 0x8C, 0xD6, 0xBA, 0xB0, 0x88, 0x78, 0x7F, 0x7E, 0xE1, 0xB1, ++ 0x24, 0x61, 0x76, 0x6B, 0x43, 0xCB, 0xCC, 0xB9, 0x64, 0x34, 0x42, 0x7D, 0x93, 0xC0, 0x65, 0x55, 0x06, 0x88, 0xF6, 0x94, 0x8E, 0xD1, 0xB5, 0x47, 0x5A, 0x42, 0x5F, 0x1B, 0x85, 0x20, 0x9D, 0x06, ++ 0x1C, 0x08, 0xB5, 0x6C, 0x1C, 0xC0, 0x69, 0xF6, 0xC0, 0xA7, 0xC6, 0xF2, 0x93, 0x58, 0xCA, 0xB9, 0x11, 0x08, 0x77, 0x32, 0xA6, 0x49, 0xD2, 0x7C, 0x9B, 0x98, 0xF9, 0xA4, 0x88, 0x79, 0x38, 0x7D, ++ 0x9B, 0x00, 0xC2, 0x59, 0x59, 0xA7, 0x16, 0x54, 0xD6, 0xF6, 0xA9, 0x46, 0x16, 0x45, 0x13, 0xE4, 0x7A, 0x75, 0xD0, 0x05, 0x98, 0x6C, 0x23, 0x63, 0xC0, 0x9F, 0x6B, 0x53, 0x7E, 0xCA, 0x78, 0xB9, ++ 0x30, 0x3A, 0x5F, 0xA4, 0x57, 0x60, 0x8A, 0x58, 0x6A, 0x65, 0x3A, 0x34, 0x7D, 0xB0, 0x4D, 0xFC, 0xC1, 0x91, 0x75, 0xB3, 0xA3, 0x01, 0x17, 0x25, 0x36, 0x06, 0x2A, 0x65, 0x8A, 0x95, 0x27, 0x75, ++ 0x70, 0xC8, 0x85, 0x2C, 0xA8, 0x97, 0x3F, 0x4A, 0xE1, 0x23, 0xA3, 0x34, 0x04, 0x7D, 0xD7, 0x11, 0xC8, 0x92, 0x7A, 0x63, 0x4A, 0x03, 0x38, 0x8A, 0x52, 0x7B, 0x03, 0x4B, 0xF7, 0xA8, 0x17, 0x0F, ++ 0xA7, 0x02, 0xC1, 0xF7, 0xC2, 0x3E, 0xC3, 0x2D, 0x18, 0xA2, 0x37, 0x48, 0x90, 0xBE, 0x9C, 0x78, 0x7A, 0x94, 0x09, 0xC8, 0x2D, 0x19, 0x2C, 0x4B, 0xB7, 0x05, 0xA2, 0xF9, 0x96, 0xCE, 0x40, 0x5D, ++ 0xA0, 0xB7, 0x1F, 0x67, 0xC6, 0xCE, 0xC0, 0xD3, 0x56, 0x86, 0xD5, 0x13, 0x42, 0x34, 0x32, 0xE5, 0x12, 0xAC, 0x40, 0x44, 0x55, 0x7E, 0x86, 0x8A, 0x62, 0x48, 0x00, 0x10, 0x9A, 0x33, 0x55, 0xF9, ++ 0x8F, 0x15, 0x14, 0x44, 0xE2, 0x85, 0x2E, 0x27, 0xEA, 0x6E, 0xDB, 0x19, 0x92, 0xCA, 0xD3, 0x97, 0x3C, 0x3A, 0x6F, 0xF7, 0x9A, 0x5A, 0x04, 0x9A, 0x25, 0x9E, 0xB5, 0x41, 0x5A, 0xA2, 0xA2, 0x62, ++ 0x45, 0x6E, 0xC9, 0x49, 0x5B, 0xBB, 0x52, 0x00, 0xD8, 0xD3, 0x16, 0x3A, 0x5B, 0x10, 0x22, 0x62, 0x92, 0xEC, 0xA0, 0x10, 0x21, 0x38, 0x9D, 0xA3, 0x78, 0x81, 0xE2, 0x76, 0x30, 0x65, 0x50, 0xC6, ++ 0xEF, 0xB6, 0x44, 0x0E, 0xC5, 0x1A, 0x2F, 0x73, 0x48, 0x34, 0x9B, 0x85, 0x1C, 0xD4, 0xAA, 0x01, 0x75, 0xA0, 0x55, 0x02, 0x13, 0xC4, 0x79, 0x1D, 0x91, 0x01, 0x12, 0x20, 0x82, 0x4B, 0x2B, 0x61, ++ 0x65, 0x08, 0x13, 0xAD, 0xFD, 0x2C, 0xB1, 0x05, 0x38, 0xBF, 0xAB, 0x0A, 0x72, 0x6F, 0x81, 0x12, 0x9E, 0xD2, 0xC0, 0xF0, 0x6A, 0x16, 0xB7, 0x01, 0x09, 0x0B, 0xF0, 0x48, 0xC5, 0xA4, 0x01, 0x26, ++ 0xD5, 0x72, 0xFC, 0xD4, 0x7A, 0xA1, 0x21, 0x8F, 0xB0, 0x15, 0x47, 0xD1, 0x50, 0x79, 0x2D, 0x23, 0x16, 0xCB, 0x32, 0x0D, 0x51, 0x44, 0xBA, 0x35, 0x08, 0xA1, 0xEB, 0xBB, 0x5A, 0xC1, 0xC2, 0x29, ++ 0x13, 0xE8, 0x29, 0x5F, 0xAB, 0x59, 0xBF, 0x58, 0x37, 0xA7, 0x78, 0xCF, 0x28, 0x22, 0x7E, 0x07, 0xE1, 0x03, 0x2D, 0xAB, 0x7D, 0x0E, 0x09, 0xA1, 0x5F, 0x13, 0x41, 0x48, 0xC1, 0x20, 0x09, 0xDA, ++ 0x53, 0x6B, 0x22, 0xCC, 0x62, 0x47, 0x4E, 0x69, 0xCC, 0x15, 0x54, 0xC0, 0x81, 0x4D, 0x6C, 0xA0, 0xB7, 0x22, 0x59, 0x43, 0x83, 0xA9, 0xD0, 0xA2, 0xC7, 0x7F, 0xD3, 0x65, 0xA5, 0x54, 0x42, 0x95, ++ 0xFB, 0xB9, 0x73, 0xF9, 0x1E, 0xA5, 0x64, 0x90, 0xD6, 0xCA, 0x68, 0x76, 0x49, 0x7B, 0x98, 0xB3, 0xCB, 0x12, 0x41, 0x7C, 0x25, 0x7B, 0x6D, 0x0F, 0x71, 0x83, 0xDB, 0xB6, 0x9E, 0x33, 0x07, 0x5B, ++ 0xEB, 0x01, 0x17, 0xB6, 0x91, 0x4C, 0x69, 0xBA, 0x38, 0x34, 0x94, 0x22, 0xF2, 0xF4, 0x33, 0x64, 0x82, 0x2A, 0x25, 0x70, 0x95, 0x2D, 0xD5, 0x07, 0x7B, 0x90, 0x75, 0x5F, 0x15, 0x74, 0x11, 0x5B, ++ 0x8E, 0x22, 0x14, 0x27, 0x58, 0x59, 0x61, 0x91, 0x3A, 0x9B, 0xFA, 0x05, 0x02, 0xB5, 0xD7, 0x9A, 0xB7, 0x81, 0x17, 0x44, 0xE6, 0x56, 0x3C, 0x5B, 0x62, 0xC5, 0xCC, 0x4E, 0x93, 0x23, 0x9A, 0x0A, ++ 0x8C, 0xC6, 0x0F, 0xE8, 0x48, 0xF8, 0x4A, 0x95, 0xF5, 0x90, 0x25, 0x99, 0xB5, 0x4A, 0x06, 0x62, 0x93, 0xA2, 0x02, 0x1D, 0xA1, 0x96, 0x76, 0x6C, 0x17, 0xC7, 0xE8, 0x63, 0xAF, 0x79, 0x0C, 0x27, ++ 0x0B, 0x21, 0x6A, 0x25, 0x13, 0x8D, 0xDA, 0x0C, 0x81, 0x26, 0xE0, 0x93, 0x77, 0x87, 0x98, 0x59, 0xDB, 0x35, 0x8F, 0x9B, 0x82, 0xB7, 0xC8, 0xA6, 0x79, 0x2A, 0xCE, 0xE9, 0x2A, 0x4C, 0xBD, 0xE3, ++ 0xCE, 0xDD, 0x45, 0x00, 0xAC, 0xBC, 0x55, 0x5C, 0x28, 0x8E, 0xFF, 0x97, 0x95, 0x26, 0x5B, 0x90, 0x05, 0x35, 0x1C, 0x52, 0xE2, 0x65, 0x35, 0x54, 0xAB, 0xAA, 0xF8, 0x72, 0xDF, 0x95, 0xCA, 0x7F, ++ 0x79, 0x59, 0x03, 0xF0, 0xB0, 0xA1, 0x82, 0xB1, 0x8A, 0xEB, 0x04, 0x75, 0xB2, 0x9F, 0x6E, 0x3A, 0xBF, 0x4C, 0x22, 0x50, 0xFE, 0x7B, 0x84, 0x2A, 0x73, 0x65, 0x50, 0x16, 0xA8, 0xFC, 0x72, 0x9F, ++ 0x39, 0x05, 0x07, 0xAC, 0xA9, 0x36, 0x82, 0x5A, 0x98, 0xB3, 0xA3, 0x2E, 0x6B, 0x25, 0x54, 0xCE, 0x95, 0x28, 0x94, 0x1A, 0x3B, 0xB8, 0xC9, 0x09, 0x96, 0x00, 0x8D, 0x74, 0xFB, 0xCD, 0x02, 0x0A, ++ 0x02, 0xE7, 0x06, 0xA6, 0xDE, 0x7B, 0x02, 0xAF, 0x40, 0x4C, 0x10, 0xDB, 0x00, 0xFA, 0xEC, 0x02, 0xD3, 0xEA, 0xA6, 0xD9, 0x56, 0x1A, 0x15, 0x65, 0xA7, 0xB0, 0x5C, 0x63, 0x66, 0xD0, 0x9D, 0xA7, ++ 0xA5, 0x37, 0xF2, 0x0C, 0x7B, 0x28, 0x59, 0xA8, 0x3E, 0x02, 0x9E, 0x13, 0xA9, 0xBD, 0x28, 0x91, 0x57, 0xC5, 0xB7, 0x4C, 0x84, 0xEA, 0xA3, 0x07, 0x75, 0x3D, 0x43, 0x12, 0x02, 0xA3, 0xD9, 0xB6, ++ 0x16, 0x22, 0x18, 0xBE, 0xC5, 0x34, 0x69, 0x45, 0xBF, 0xEF, 0x55, 0xB6, 0x24, 0xC5, 0xC6, 0xE3, 0x73, 0x35, 0x9B, 0xB1, 0xC4, 0x79, 0x95, 0x2B, 0xBA, 0xBA, 0x4D, 0x65, 0x55, 0xC2, 0x76, 0x57, ++ 0x3E, 0x51, 0x52, 0xB5, 0x53, 0x90, 0x19, 0x99, 0xF6, 0x94, 0x02, 0xD1, 0x50, 0xBE, 0xF7, 0x9D, 0x74, 0xFB, 0x29, 0x53, 0x01, 0x8F, 0xF4, 0x86, 0x66, 0x74, 0x6A, 0xCE, 0x60, 0x78, 0x14, 0xA1, ++ 0xFA, 0x33, 0x19, 0x57, 0x20, 0xF8, 0x38, 0x78, 0xD3, 0xB5, 0x75, 0xC7, 0x25, 0x74, 0x4A, 0x72, 0x07, 0x0D, 0xD0, 0x44, 0x01, 0x80, 0x42, 0xDA, 0x25, 0x71, 0x4D, 0x17, 0x30, 0x90, 0x32, 0x3A, ++ 0x51, 0xE6, 0xC0, 0x63, 0xD2, 0x03, 0x88, 0x13, 0x80, 0x91, 0x27, 0x61, 0xFC, 0x34, 0x10, 0x83, 0x90, 0x95, 0xF2, 0x6C, 0x0E, 0x68, 0x7A, 0x00, 0x70, 0x54, 0x95, 0xE1, 0x71, 0xB5, 0x71, 0x51, ++ 0xAC, 0xE0, 0x49, 0x8E, 0x30, 0xF1, 0x4C, 0xA9, 0xB0, 0x2F, 0x6E, 0x40, 0x83, 0x18, 0x54, 0xC2, 0xE0, 0xAB, 0x1E, 0xCD, 0x0C, 0x21, 0xD8, 0xE4, 0xC7, 0xE6, 0x69, 0xCD, 0x72, 0x82, 0x30, 0xB9, ++ 0xD1, 0x1F, 0x72, 0xC2, 0x66, 0xE3, 0x44, 0x66, 0xF9, 0xC0, 0x15, 0x9E, 0xF4, 0x24, 0xF8, 0xF3, 0x1D, 0x95, 0xA5, 0x7B, 0xA0, 0xE2, 0x10, 0x54, 0x3C, 0x10, 0xC6, 0x50, 0x3F, 0xB5, 0xC6, 0x3E, ++ 0xD2, 0x3A, 0xA3, 0x6C, 0xD6, 0xA6, 0xF3, 0x78, 0x26, 0x1B, 0x0B, 0x1E, 0x79, 0x50, 0x9D, 0x8B, 0xEB, 0x36, 0xAA, 0x26, 0x3D, 0xC9, 0x15, 0x45, 0xE5, 0x33, 0x69, 0xDF, 0x26, 0x83, 0x7F, 0x39, ++ 0x4C, 0x56, 0x77, 0x7C, 0x95, 0xB6, 0x48, 0xBD, 0x1A, 0x72, 0x92, 0x1A, 0xBF, 0x49, 0x56, 0x3F, 0x99, 0xCB, 0x9D, 0x98, 0xEA, 0xB5, 0xC6, 0x66, 0x66, 0xF6, 0xB1, 0x6F, 0x74, 0x02, 0x24, 0x81, ++ 0xFA, 0x21, 0x4E, 0x61, 0x76, 0x98, 0xD3, 0xBB, 0xD1, 0x3C, 0xB3, 0x08, 0x71, 0x3F, 0xDC, 0xC7, 0xCF, 0xD3, 0x97, 0xB9, 0xCA, 0x39, 0xAF, 0xF4, 0xC7, 0x44, 0xD5, 0x71, 0x5D, 0x58, 0x96, 0x6F, ++ 0x2C, 0xF9, 0x70, 0x70, 0x15, 0xC8, 0xF3, 0x54, 0x3E, 0xD2, 0x86, 0xA3, 0xD8, 0xD5, 0xCB, 0xF6, 0x4A, 0xCE, 0xDF, 0xC0, 0x29, 0x71, 0xA9, 0x10, 0x72, 0xC6, 0x9D, 0x2E, 0xF4, 0x98, 0x29, 0xF1, ++ 0x03, 0x7F, 0x05, 0x0C, 0x5B, 0x92, 0x22, 0x98, 0x56, 0xCB, 0x12, 0xB4, 0x56, 0xCC, 0x09, 0x52, 0x82, 0xA6, 0x26, 0x87, 0xEA, 0x38, 0xC9, 0x77, 0x8A, 0xEA, 0x49, 0x1D, 0xFF, 0x06, 0x97, 0x11, ++ 0xFB, 0xBE, 0x05, 0xE8, 0xCD, 0x9B, 0xF4, 0x4A, 0x8E, 0x71, 0x26, 0x19, 0x57, 0x3E, 0x12, 0xEA, 0xA7, 0xB2, 0x38, 0x29, 0xDC, 0x67, 0x26, 0xBF, 0xE3, 0x3D, 0xA1, 0x36, 0xB8, 0x1E, 0x15, 0x32, ++ 0x51, 0x50, 0x8F, 0x62, 0x85, 0xBA, 0x15, 0xB2, 0xC1, 0x23, 0x76, 0x77, 0xFE, 0x5B, 0x14, 0xB4, 0xE3, 0x3F, 0x98, 0xC3, 0x26, 0xBC, 0x58, 0xB9, 0xD8, 0xE0, 0x75, 0xA2, 0x5B, 0x94, 0xC8, 0xA2, ++ 0x32, 0x33, 0x02, 0x9D, 0xCC, 0x78, 0x6B, 0x13, 0x5C, 0x56, 0x16, 0x4B, 0xA3, 0xD1, 0x60, 0xCB, 0xCE, 0xA8, 0x54, 0xB7, 0x97, 0x1F, 0x9C, 0xD7, 0x3A, 0x38, 0x3A, 0xAC, 0x05, 0x0A, 0x30, 0x2A, ++ 0xD8, 0x3B, 0x3E, 0x3A, 0xB9, 0x02, 0x46, 0xAD, 0x16, 0x0A, 0x32, 0x1D, 0x33, 0x0A, 0xCD, 0xEC, 0x7C, 0xA6, 0x64, 0x3D, 0x7E, 0xC0, 0x1F, 0x91, 0x69, 0x1F, 0x16, 0x32, 0x5B, 0xDF, 0x39, 0x69, ++ 0x50, 0xB8, 0x8D, 0xAF, 0xE3, 0x69, 0xC6, 0x54, 0xB8, 0x52, 0x05, 0x5C, 0x97, 0x03, 0x62, 0xC6, 0x13, 0x80, 0x46, 0x07, 0x57, 0xC6, 0x58, 0x90, 0xF4, 0xE5, 0x92, 0x22, 0xE4, 0xA4, 0x06, 0x0B, ++ 0x26, 0xC0, 0xEB, 0xC1, 0x01, 0x97, 0x59, 0x0D, 0xE3, 0xC8, 0xF0, 0x95, 0x5D, 0x65, 0x4B, 0x37, 0x1C, 0xCB, 0x90, 0xAC, 0xA3, 0x71, 0xB2, 0x94, 0x47, 0x6C, 0x16, 0xA4, 0x59, 0x6A, 0x1D, 0xE8, ++ 0x30, 0x9E, 0x2A, 0x36, 0x12, 0xC6, 0x9B, 0x71, 0x25, 0x31, 0x05, 0x01, 0xE0, 0xC0, 0x49, 0xB8, 0x74, 0x40, 0xD9, 0xA6, 0xD0, 0xEC, 0xB9, 0x99, 0xC9, 0xA0, 0x94, 0x2A, 0xA3, 0x40, 0xF6, 0x03, ++ 0x65, 0xEA, 0xFD, 0x46, 0x5F, 0xC6, 0x4A, 0x0C, 0x5F, 0x8F, 0x3F, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9D, 0x59, 0xA5, 0x43, 0xD8, 0x20, 0x8C, 0x54, 0xA3, 0x16, 0x65, 0x29, 0xB5, 0x39, 0x22, ++ 0xDE, 0xE4, 0xAB, 0xA0, 0x00, 0x38, 0x95, 0x81, 0x71, 0x7D, 0x36, 0xF5, 0x6F, 0x39, 0xAF, 0x73, 0x00, 0xB3, 0x1D, 0x83, 0x1A, 0x4D, 0x8C, 0x97, 0x61, 0x28, 0xE0, 0x9D, 0xED, 0xE7, 0x1A, 0x5A, ++ 0x86, 0x26, 0xED, 0x79, 0xD4, 0x51, 0x14, 0x08, 0x00, 0xE0, 0x3B, 0x59, 0xB9, 0x56, 0xF8, 0x21, 0x0E, 0x55, 0x60, 0x67, 0x40, 0x7D, 0x13, 0xDC, 0x90, 0xFA, 0x9E, 0x8B, 0x87, 0x2B, 0xFB, 0x8F, ++ }, ++ .pk_len = 1184, ++ .pk = { ++ 0xA0, 0xB7, 0x1F, 0x67, 0xC6, 0xCE, 0xC0, 0xD3, 0x56, 0x86, 0xD5, 0x13, 0x42, 0x34, 0x32, 0xE5, 0x12, 0xAC, 0x40, 0x44, 0x55, 0x7E, 0x86, 0x8A, 0x62, 0x48, 0x00, 0x10, 0x9A, 0x33, 0x55, 0xF9, ++ 0x8F, 0x15, 0x14, 0x44, 0xE2, 0x85, 0x2E, 0x27, 0xEA, 0x6E, 0xDB, 0x19, 0x92, 0xCA, 0xD3, 0x97, 0x3C, 0x3A, 0x6F, 0xF7, 0x9A, 0x5A, 0x04, 0x9A, 0x25, 0x9E, 0xB5, 0x41, 0x5A, 0xA2, 0xA2, 0x62, ++ 0x45, 0x6E, 0xC9, 0x49, 0x5B, 0xBB, 0x52, 0x00, 0xD8, 0xD3, 0x16, 0x3A, 0x5B, 0x10, 0x22, 0x62, 0x92, 0xEC, 0xA0, 0x10, 0x21, 0x38, 0x9D, 0xA3, 0x78, 0x81, 0xE2, 0x76, 0x30, 0x65, 0x50, 0xC6, ++ 0xEF, 0xB6, 0x44, 0x0E, 0xC5, 0x1A, 0x2F, 0x73, 0x48, 0x34, 0x9B, 0x85, 0x1C, 0xD4, 0xAA, 0x01, 0x75, 0xA0, 0x55, 0x02, 0x13, 0xC4, 0x79, 0x1D, 0x91, 0x01, 0x12, 0x20, 0x82, 0x4B, 0x2B, 0x61, ++ 0x65, 0x08, 0x13, 0xAD, 0xFD, 0x2C, 0xB1, 0x05, 0x38, 0xBF, 0xAB, 0x0A, 0x72, 0x6F, 0x81, 0x12, 0x9E, 0xD2, 0xC0, 0xF0, 0x6A, 0x16, 0xB7, 0x01, 0x09, 0x0B, 0xF0, 0x48, 0xC5, 0xA4, 0x01, 0x26, ++ 0xD5, 0x72, 0xFC, 0xD4, 0x7A, 0xA1, 0x21, 0x8F, 0xB0, 0x15, 0x47, 0xD1, 0x50, 0x79, 0x2D, 0x23, 0x16, 0xCB, 0x32, 0x0D, 0x51, 0x44, 0xBA, 0x35, 0x08, 0xA1, 0xEB, 0xBB, 0x5A, 0xC1, 0xC2, 0x29, ++ 0x13, 0xE8, 0x29, 0x5F, 0xAB, 0x59, 0xBF, 0x58, 0x37, 0xA7, 0x78, 0xCF, 0x28, 0x22, 0x7E, 0x07, 0xE1, 0x03, 0x2D, 0xAB, 0x7D, 0x0E, 0x09, 0xA1, 0x5F, 0x13, 0x41, 0x48, 0xC1, 0x20, 0x09, 0xDA, ++ 0x53, 0x6B, 0x22, 0xCC, 0x62, 0x47, 0x4E, 0x69, 0xCC, 0x15, 0x54, 0xC0, 0x81, 0x4D, 0x6C, 0xA0, 0xB7, 0x22, 0x59, 0x43, 0x83, 0xA9, 0xD0, 0xA2, 0xC7, 0x7F, 0xD3, 0x65, 0xA5, 0x54, 0x42, 0x95, ++ 0xFB, 0xB9, 0x73, 0xF9, 0x1E, 0xA5, 0x64, 0x90, 0xD6, 0xCA, 0x68, 0x76, 0x49, 0x7B, 0x98, 0xB3, 0xCB, 0x12, 0x41, 0x7C, 0x25, 0x7B, 0x6D, 0x0F, 0x71, 0x83, 0xDB, 0xB6, 0x9E, 0x33, 0x07, 0x5B, ++ 0xEB, 0x01, 0x17, 0xB6, 0x91, 0x4C, 0x69, 0xBA, 0x38, 0x34, 0x94, 0x22, 0xF2, 0xF4, 0x33, 0x64, 0x82, 0x2A, 0x25, 0x70, 0x95, 0x2D, 0xD5, 0x07, 0x7B, 0x90, 0x75, 0x5F, 0x15, 0x74, 0x11, 0x5B, ++ 0x8E, 0x22, 0x14, 0x27, 0x58, 0x59, 0x61, 0x91, 0x3A, 0x9B, 0xFA, 0x05, 0x02, 0xB5, 0xD7, 0x9A, 0xB7, 0x81, 0x17, 0x44, 0xE6, 0x56, 0x3C, 0x5B, 0x62, 0xC5, 0xCC, 0x4E, 0x93, 0x23, 0x9A, 0x0A, ++ 0x8C, 0xC6, 0x0F, 0xE8, 0x48, 0xF8, 0x4A, 0x95, 0xF5, 0x90, 0x25, 0x99, 0xB5, 0x4A, 0x06, 0x62, 0x93, 0xA2, 0x02, 0x1D, 0xA1, 0x96, 0x76, 0x6C, 0x17, 0xC7, 0xE8, 0x63, 0xAF, 0x79, 0x0C, 0x27, ++ 0x0B, 0x21, 0x6A, 0x25, 0x13, 0x8D, 0xDA, 0x0C, 0x81, 0x26, 0xE0, 0x93, 0x77, 0x87, 0x98, 0x59, 0xDB, 0x35, 0x8F, 0x9B, 0x82, 0xB7, 0xC8, 0xA6, 0x79, 0x2A, 0xCE, 0xE9, 0x2A, 0x4C, 0xBD, 0xE3, ++ 0xCE, 0xDD, 0x45, 0x00, 0xAC, 0xBC, 0x55, 0x5C, 0x28, 0x8E, 0xFF, 0x97, 0x95, 0x26, 0x5B, 0x90, 0x05, 0x35, 0x1C, 0x52, 0xE2, 0x65, 0x35, 0x54, 0xAB, 0xAA, 0xF8, 0x72, 0xDF, 0x95, 0xCA, 0x7F, ++ 0x79, 0x59, 0x03, 0xF0, 0xB0, 0xA1, 0x82, 0xB1, 0x8A, 0xEB, 0x04, 0x75, 0xB2, 0x9F, 0x6E, 0x3A, 0xBF, 0x4C, 0x22, 0x50, 0xFE, 0x7B, 0x84, 0x2A, 0x73, 0x65, 0x50, 0x16, 0xA8, 0xFC, 0x72, 0x9F, ++ 0x39, 0x05, 0x07, 0xAC, 0xA9, 0x36, 0x82, 0x5A, 0x98, 0xB3, 0xA3, 0x2E, 0x6B, 0x25, 0x54, 0xCE, 0x95, 0x28, 0x94, 0x1A, 0x3B, 0xB8, 0xC9, 0x09, 0x96, 0x00, 0x8D, 0x74, 0xFB, 0xCD, 0x02, 0x0A, ++ 0x02, 0xE7, 0x06, 0xA6, 0xDE, 0x7B, 0x02, 0xAF, 0x40, 0x4C, 0x10, 0xDB, 0x00, 0xFA, 0xEC, 0x02, 0xD3, 0xEA, 0xA6, 0xD9, 0x56, 0x1A, 0x15, 0x65, 0xA7, 0xB0, 0x5C, 0x63, 0x66, 0xD0, 0x9D, 0xA7, ++ 0xA5, 0x37, 0xF2, 0x0C, 0x7B, 0x28, 0x59, 0xA8, 0x3E, 0x02, 0x9E, 0x13, 0xA9, 0xBD, 0x28, 0x91, 0x57, 0xC5, 0xB7, 0x4C, 0x84, 0xEA, 0xA3, 0x07, 0x75, 0x3D, 0x43, 0x12, 0x02, 0xA3, 0xD9, 0xB6, ++ 0x16, 0x22, 0x18, 0xBE, 0xC5, 0x34, 0x69, 0x45, 0xBF, 0xEF, 0x55, 0xB6, 0x24, 0xC5, 0xC6, 0xE3, 0x73, 0x35, 0x9B, 0xB1, 0xC4, 0x79, 0x95, 0x2B, 0xBA, 0xBA, 0x4D, 0x65, 0x55, 0xC2, 0x76, 0x57, ++ 0x3E, 0x51, 0x52, 0xB5, 0x53, 0x90, 0x19, 0x99, 0xF6, 0x94, 0x02, 0xD1, 0x50, 0xBE, 0xF7, 0x9D, 0x74, 0xFB, 0x29, 0x53, 0x01, 0x8F, 0xF4, 0x86, 0x66, 0x74, 0x6A, 0xCE, 0x60, 0x78, 0x14, 0xA1, ++ 0xFA, 0x33, 0x19, 0x57, 0x20, 0xF8, 0x38, 0x78, 0xD3, 0xB5, 0x75, 0xC7, 0x25, 0x74, 0x4A, 0x72, 0x07, 0x0D, 0xD0, 0x44, 0x01, 0x80, 0x42, 0xDA, 0x25, 0x71, 0x4D, 0x17, 0x30, 0x90, 0x32, 0x3A, ++ 0x51, 0xE6, 0xC0, 0x63, 0xD2, 0x03, 0x88, 0x13, 0x80, 0x91, 0x27, 0x61, 0xFC, 0x34, 0x10, 0x83, 0x90, 0x95, 0xF2, 0x6C, 0x0E, 0x68, 0x7A, 0x00, 0x70, 0x54, 0x95, 0xE1, 0x71, 0xB5, 0x71, 0x51, ++ 0xAC, 0xE0, 0x49, 0x8E, 0x30, 0xF1, 0x4C, 0xA9, 0xB0, 0x2F, 0x6E, 0x40, 0x83, 0x18, 0x54, 0xC2, 0xE0, 0xAB, 0x1E, 0xCD, 0x0C, 0x21, 0xD8, 0xE4, 0xC7, 0xE6, 0x69, 0xCD, 0x72, 0x82, 0x30, 0xB9, ++ 0xD1, 0x1F, 0x72, 0xC2, 0x66, 0xE3, 0x44, 0x66, 0xF9, 0xC0, 0x15, 0x9E, 0xF4, 0x24, 0xF8, 0xF3, 0x1D, 0x95, 0xA5, 0x7B, 0xA0, 0xE2, 0x10, 0x54, 0x3C, 0x10, 0xC6, 0x50, 0x3F, 0xB5, 0xC6, 0x3E, ++ 0xD2, 0x3A, 0xA3, 0x6C, 0xD6, 0xA6, 0xF3, 0x78, 0x26, 0x1B, 0x0B, 0x1E, 0x79, 0x50, 0x9D, 0x8B, 0xEB, 0x36, 0xAA, 0x26, 0x3D, 0xC9, 0x15, 0x45, 0xE5, 0x33, 0x69, 0xDF, 0x26, 0x83, 0x7F, 0x39, ++ 0x4C, 0x56, 0x77, 0x7C, 0x95, 0xB6, 0x48, 0xBD, 0x1A, 0x72, 0x92, 0x1A, 0xBF, 0x49, 0x56, 0x3F, 0x99, 0xCB, 0x9D, 0x98, 0xEA, 0xB5, 0xC6, 0x66, 0x66, 0xF6, 0xB1, 0x6F, 0x74, 0x02, 0x24, 0x81, ++ 0xFA, 0x21, 0x4E, 0x61, 0x76, 0x98, 0xD3, 0xBB, 0xD1, 0x3C, 0xB3, 0x08, 0x71, 0x3F, 0xDC, 0xC7, 0xCF, 0xD3, 0x97, 0xB9, 0xCA, 0x39, 0xAF, 0xF4, 0xC7, 0x44, 0xD5, 0x71, 0x5D, 0x58, 0x96, 0x6F, ++ 0x2C, 0xF9, 0x70, 0x70, 0x15, 0xC8, 0xF3, 0x54, 0x3E, 0xD2, 0x86, 0xA3, 0xD8, 0xD5, 0xCB, 0xF6, 0x4A, 0xCE, 0xDF, 0xC0, 0x29, 0x71, 0xA9, 0x10, 0x72, 0xC6, 0x9D, 0x2E, 0xF4, 0x98, 0x29, 0xF1, ++ 0x03, 0x7F, 0x05, 0x0C, 0x5B, 0x92, 0x22, 0x98, 0x56, 0xCB, 0x12, 0xB4, 0x56, 0xCC, 0x09, 0x52, 0x82, 0xA6, 0x26, 0x87, 0xEA, 0x38, 0xC9, 0x77, 0x8A, 0xEA, 0x49, 0x1D, 0xFF, 0x06, 0x97, 0x11, ++ 0xFB, 0xBE, 0x05, 0xE8, 0xCD, 0x9B, 0xF4, 0x4A, 0x8E, 0x71, 0x26, 0x19, 0x57, 0x3E, 0x12, 0xEA, 0xA7, 0xB2, 0x38, 0x29, 0xDC, 0x67, 0x26, 0xBF, 0xE3, 0x3D, 0xA1, 0x36, 0xB8, 0x1E, 0x15, 0x32, ++ 0x51, 0x50, 0x8F, 0x62, 0x85, 0xBA, 0x15, 0xB2, 0xC1, 0x23, 0x76, 0x77, 0xFE, 0x5B, 0x14, 0xB4, 0xE3, 0x3F, 0x98, 0xC3, 0x26, 0xBC, 0x58, 0xB9, 0xD8, 0xE0, 0x75, 0xA2, 0x5B, 0x94, 0xC8, 0xA2, ++ 0x32, 0x33, 0x02, 0x9D, 0xCC, 0x78, 0x6B, 0x13, 0x5C, 0x56, 0x16, 0x4B, 0xA3, 0xD1, 0x60, 0xCB, 0xCE, 0xA8, 0x54, 0xB7, 0x97, 0x1F, 0x9C, 0xD7, 0x3A, 0x38, 0x3A, 0xAC, 0x05, 0x0A, 0x30, 0x2A, ++ 0xD8, 0x3B, 0x3E, 0x3A, 0xB9, 0x02, 0x46, 0xAD, 0x16, 0x0A, 0x32, 0x1D, 0x33, 0x0A, 0xCD, 0xEC, 0x7C, 0xA6, 0x64, 0x3D, 0x7E, 0xC0, 0x1F, 0x91, 0x69, 0x1F, 0x16, 0x32, 0x5B, 0xDF, 0x39, 0x69, ++ 0x50, 0xB8, 0x8D, 0xAF, 0xE3, 0x69, 0xC6, 0x54, 0xB8, 0x52, 0x05, 0x5C, 0x97, 0x03, 0x62, 0xC6, 0x13, 0x80, 0x46, 0x07, 0x57, 0xC6, 0x58, 0x90, 0xF4, 0xE5, 0x92, 0x22, 0xE4, 0xA4, 0x06, 0x0B, ++ 0x26, 0xC0, 0xEB, 0xC1, 0x01, 0x97, 0x59, 0x0D, 0xE3, 0xC8, 0xF0, 0x95, 0x5D, 0x65, 0x4B, 0x37, 0x1C, 0xCB, 0x90, 0xAC, 0xA3, 0x71, 0xB2, 0x94, 0x47, 0x6C, 0x16, 0xA4, 0x59, 0x6A, 0x1D, 0xE8, ++ 0x30, 0x9E, 0x2A, 0x36, 0x12, 0xC6, 0x9B, 0x71, 0x25, 0x31, 0x05, 0x01, 0xE0, 0xC0, 0x49, 0xB8, 0x74, 0x40, 0xD9, 0xA6, 0xD0, 0xEC, 0xB9, 0x99, 0xC9, 0xA0, 0x94, 0x2A, 0xA3, 0x40, 0xF6, 0x03, ++ 0x65, 0xEA, 0xFD, 0x46, 0x5F, 0xC6, 0x4A, 0x0C, 0x5F, 0x8F, 0x3F, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9D, 0x59, 0xA5, 0x43, 0xD8, 0x20, 0x8C, 0x54, 0xA3, 0x16, 0x65, 0x29, 0xB5, 0x39, 0x22, ++ }, ++ .pkcs8_len = 0, ++ .spki_len = 0, ++ .secret_len = 32, ++ .secret = { ++ 0xed, 0x20, 0x14, 0x0c, 0x05, 0xd7, 0x8b, 0x15, 0xf2, 0xe4, 0x12, 0x67, 0x1a, 0x84, 0x15, 0x42, 0x17, 0xfd, 0x77, 0x61, 0x9a, 0x2c, 0x52, 0x2d, 0x3c, 0x3c, 0xb6, 0x88, 0xcb, 0x34, 0xc6, 0x8b, ++ }, ++ .cipher_len = 1088, ++ .cipher = { ++ 0xea, 0xdd, 0x5a, 0xda, 0x14, 0xda, 0x57, 0xf0, 0xae, 0xf3, 0x50, 0x5f, 0x1c, 0xaa, 0x64, 0x85, 0xd4, 0x23, 0x8d, 0x99, 0x9a, 0x3e, 0xf4, 0xb0, 0xa5, 0x9a, 0x1c, 0xdb, 0xe0, 0xa2, 0x7e, 0x47, ++ 0x85, 0x47, 0xa3, 0xa9, 0x9d, 0x2a, 0xb0, 0x9a, 0xc7, 0xd7, 0xc8, 0xf5, 0xae, 0x3d, 0x64, 0x32, 0x04, 0x5c, 0xba, 0x3f, 0xa7, 0x78, 0x34, 0x58, 0x92, 0x54, 0x2b, 0xd8, 0x1c, 0x05, 0xbe, 0xfc, ++ 0xd2, 0xe5, 0xcc, 0x9a, 0x57, 0x9b, 0xef, 0xb7, 0xc5, 0x8d, 0x02, 0xfb, 0x94, 0xf3, 0x33, 0x92, 0xfe, 0x17, 0xf4, 0xeb, 0xa2, 0xcb, 0x51, 0x0e, 0xc7, 0x4c, 0xc9, 0xd1, 0xd8, 0xa8, 0x7c, 0x10, ++ 0x66, 0xa4, 0x86, 0x9a, 0x39, 0x83, 0xe6, 0x64, 0xbf, 0xe9, 0xde, 0xa5, 0xae, 0x4f, 0xdf, 0x31, 0x0c, 0x8f, 0x59, 0x81, 0x5a, 0x67, 0x8f, 0xa3, 0x25, 0xf3, 0x69, 0xaf, 0x84, 0xff, 0xeb, 0xc1, ++ 0xd1, 0x50, 0x43, 0x1f, 0xe3, 0xbd, 0x27, 0x34, 0xf6, 0x36, 0xcf, 0x65, 0x8e, 0x6c, 0x1a, 0x6a, 0x6e, 0x2c, 0xbe, 0x07, 0x1f, 0x9a, 0x7c, 0x26, 0x11, 0x9a, 0xd1, 0x05, 0x09, 0x8e, 0xda, 0x62, ++ 0x2c, 0xab, 0x8e, 0x17, 0x67, 0x62, 0x10, 0x98, 0x77, 0xd9, 0xae, 0x9d, 0x67, 0x29, 0xd4, 0x4a, 0x58, 0xe7, 0x07, 0xd6, 0xb8, 0xad, 0x6e, 0x69, 0x6a, 0x33, 0xc6, 0x72, 0xda, 0x9d, 0x08, 0xda, ++ 0x2a, 0x7f, 0x9e, 0x3b, 0xf0, 0x22, 0x18, 0x23, 0x87, 0x22, 0xa4, 0x6b, 0x31, 0xd4, 0x9d, 0xaf, 0xf9, 0xaf, 0x00, 0xa6, 0x36, 0x3c, 0x3a, 0x42, 0x3b, 0x2e, 0x87, 0x3d, 0xef, 0xdd, 0xbc, 0xd9, ++ 0x69, 0xb7, 0x5a, 0x81, 0x05, 0x3d, 0x9a, 0x97, 0xc0, 0x6d, 0xe2, 0xbf, 0xe3, 0xd0, 0xcf, 0xd3, 0xd3, 0xc7, 0x79, 0x83, 0xb1, 0x8d, 0xbd, 0xe2, 0x3c, 0x07, 0x28, 0x60, 0x4a, 0x71, 0x43, 0x5a, ++ 0xd4, 0x0d, 0xf1, 0x57, 0x90, 0x96, 0xdd, 0xbe, 0x02, 0xe4, 0x61, 0x22, 0x10, 0xca, 0xa0, 0x34, 0xdc, 0xef, 0xb8, 0xb4, 0xd7, 0xb5, 0xe6, 0xd2, 0xeb, 0xa3, 0x7a, 0x79, 0xfb, 0x61, 0xf3, 0x4b, ++ 0x5a, 0xf7, 0xd9, 0xb2, 0x7b, 0x13, 0xe4, 0x93, 0x62, 0x22, 0x41, 0x12, 0x49, 0xb7, 0xfb, 0xb6, 0x9e, 0x73, 0x46, 0x1d, 0xaf, 0x4a, 0xa6, 0xf3, 0xe2, 0xc7, 0x39, 0x44, 0xf1, 0x0c, 0xe6, 0x7c, ++ 0x86, 0xfe, 0xd2, 0x60, 0xbd, 0xa7, 0xb4, 0x0d, 0xb3, 0x9b, 0x1d, 0xe3, 0xc7, 0xd8, 0xf0, 0x9a, 0x77, 0xf3, 0xc8, 0x4b, 0xc6, 0x29, 0x31, 0xd2, 0x28, 0xb2, 0x4a, 0x57, 0x4a, 0xc3, 0xf4, 0xeb, ++ 0x74, 0x5c, 0xff, 0x7e, 0x03, 0x1a, 0x3f, 0xb2, 0xa0, 0x85, 0x95, 0xc1, 0x53, 0x70, 0xa3, 0xc8, 0x2d, 0xb7, 0xd9, 0xf4, 0x1b, 0xb1, 0xd8, 0xec, 0xc4, 0x29, 0xcf, 0xa3, 0xa6, 0x58, 0x33, 0x01, ++ 0x6a, 0xb6, 0xea, 0x60, 0xc9, 0x39, 0x0c, 0xfa, 0x1b, 0x65, 0xcc, 0xea, 0xe5, 0x50, 0x94, 0x07, 0x95, 0x38, 0x6e, 0xd2, 0x41, 0x33, 0xfb, 0xae, 0x8b, 0x30, 0x17, 0x50, 0x2a, 0xf3, 0xcf, 0xe9, ++ 0x51, 0xd7, 0x81, 0xd3, 0x6c, 0xfe, 0xff, 0x85, 0xbf, 0xdf, 0x5a, 0xf0, 0x40, 0xbe, 0x40, 0x65, 0x68, 0x1b, 0x3b, 0x0a, 0x63, 0xc2, 0x74, 0x7f, 0x08, 0x08, 0xcf, 0x3d, 0xa7, 0x25, 0x16, 0x9d, ++ 0xde, 0xd1, 0x00, 0x3d, 0xa6, 0xcd, 0x5d, 0xe4, 0xcb, 0x04, 0x19, 0x42, 0x93, 0x8d, 0x0a, 0x7f, 0x88, 0x02, 0xd4, 0x8f, 0x2e, 0x3c, 0x6e, 0xeb, 0x45, 0xcd, 0x90, 0xaf, 0x6f, 0xc9, 0xf4, 0x50, ++ 0x7e, 0x9f, 0x83, 0x80, 0xac, 0x33, 0xca, 0xca, 0x77, 0x51, 0x48, 0x7f, 0x65, 0x50, 0x04, 0x41, 0xd9, 0x20, 0xb9, 0x48, 0x80, 0xa4, 0x97, 0xd0, 0x1c, 0x08, 0x02, 0xbb, 0x08, 0xd7, 0x4c, 0x5d, ++ 0x4c, 0x6b, 0xf2, 0xd8, 0x65, 0xee, 0x58, 0x22, 0xb3, 0x37, 0x5c, 0x75, 0x5d, 0x1a, 0x5e, 0x3d, 0x32, 0x44, 0xc3, 0x20, 0x51, 0x0a, 0x1e, 0x30, 0x35, 0x77, 0x02, 0xcd, 0x42, 0x52, 0x07, 0x2c, ++ 0xf8, 0x64, 0x37, 0xf7, 0xa9, 0xde, 0x55, 0x61, 0xc7, 0xe5, 0x9b, 0x94, 0xb9, 0x58, 0x41, 0x00, 0x13, 0x1a, 0xc3, 0x99, 0xf4, 0xc1, 0xeb, 0x19, 0xfb, 0x4b, 0xdf, 0x65, 0xe6, 0x27, 0x85, 0xe9, ++ 0x7c, 0x19, 0x4b, 0x87, 0x64, 0xcc, 0xf3, 0x2f, 0xd0, 0x5d, 0x80, 0x4c, 0x2e, 0x43, 0x9d, 0xda, 0x2a, 0x10, 0x92, 0x74, 0xfb, 0xff, 0xa8, 0x1a, 0x83, 0x7c, 0x51, 0xb2, 0x6d, 0x15, 0x4f, 0x97, ++ 0x4b, 0x88, 0x2a, 0x5b, 0x17, 0x4b, 0x30, 0x8f, 0xc4, 0x87, 0x68, 0xd2, 0x22, 0x92, 0x25, 0x32, 0xb1, 0x83, 0xab, 0xdf, 0x6f, 0xbb, 0x0b, 0xc7, 0x49, 0x27, 0x66, 0x97, 0x4d, 0x32, 0x1e, 0xe6, ++ 0xfb, 0x7c, 0x5f, 0x7b, 0x3e, 0xea, 0x23, 0x78, 0xdc, 0x6d, 0x6b, 0xb4, 0x80, 0x19, 0x25, 0x0b, 0x8d, 0x8d, 0x8d, 0xed, 0xb5, 0x22, 0x42, 0x1a, 0xee, 0xdb, 0x31, 0x86, 0x76, 0x98, 0x2a, 0x80, ++ 0xe7, 0x96, 0x1e, 0xc4, 0x0e, 0x6d, 0x7f, 0x33, 0x39, 0x69, 0x42, 0x55, 0xba, 0xff, 0x51, 0xbe, 0x3a, 0x7e, 0xa7, 0xd8, 0x79, 0x3a, 0x10, 0x9b, 0xe3, 0xae, 0x44, 0x23, 0xbf, 0x08, 0x2e, 0x20, ++ 0x6a, 0x57, 0x3b, 0x4f, 0x0f, 0x93, 0xfc, 0x16, 0xdd, 0xe8, 0x1b, 0xd5, 0xdc, 0x58, 0x3f, 0x52, 0x8c, 0x08, 0xa0, 0xa9, 0xab, 0x8e, 0x6c, 0xd5, 0x24, 0xe2, 0x97, 0xc9, 0xcf, 0x0f, 0x43, 0xc3, ++ 0x44, 0x91, 0x38, 0x30, 0xec, 0xb1, 0x6f, 0x91, 0x44, 0x14, 0x77, 0xba, 0x78, 0x2e, 0xdd, 0x4e, 0x73, 0xe7, 0x32, 0x97, 0x9d, 0x3a, 0x66, 0x4e, 0xb9, 0x9e, 0xa5, 0xd2, 0x4b, 0x6c, 0x84, 0xaa, ++ 0x69, 0xf3, 0x77, 0xcb, 0x0c, 0xad, 0x5a, 0xe4, 0xe6, 0x41, 0xe3, 0x8b, 0x19, 0x7a, 0x09, 0x94, 0xd5, 0x8b, 0x23, 0x87, 0xe9, 0x17, 0x60, 0xe9, 0xb6, 0xfe, 0xbc, 0xb4, 0x45, 0xcf, 0x85, 0xbb, ++ 0xa2, 0x4a, 0x94, 0xcd, 0xa7, 0x5e, 0x33, 0x86, 0x74, 0x42, 0x82, 0x49, 0xfe, 0x6d, 0xe4, 0x69, 0x26, 0x01, 0xd1, 0xea, 0xe0, 0xea, 0x02, 0x1d, 0x9b, 0xc8, 0x07, 0x7b, 0xe8, 0x66, 0x5d, 0x07, ++ 0x37, 0x74, 0x8f, 0xa3, 0x0f, 0xcf, 0x80, 0xf7, 0xe4, 0x82, 0x58, 0x46, 0x74, 0xf6, 0x33, 0xa5, 0x00, 0x6a, 0x53, 0x82, 0x67, 0x62, 0x7f, 0xd9, 0x18, 0x54, 0xe0, 0x87, 0x12, 0x68, 0xa6, 0xb0, ++ 0xb0, 0x5d, 0xd5, 0x14, 0x95, 0x13, 0x5d, 0xef, 0xb9, 0x37, 0x6e, 0x9b, 0x84, 0x1b, 0x64, 0xe5, 0xdb, 0xf4, 0x3c, 0xe6, 0xc7, 0x4b, 0xcf, 0x3a, 0xe1, 0xfc, 0x42, 0x7e, 0x81, 0x0b, 0x7c, 0xbf, ++ 0x69, 0x57, 0xdb, 0xf9, 0x04, 0x69, 0x0e, 0x87, 0x84, 0x25, 0x43, 0x89, 0x7d, 0xe7, 0x8f, 0x13, 0xd0, 0x8d, 0x92, 0xeb, 0xd2, 0x7f, 0xb2, 0xcf, 0xcc, 0x0c, 0x76, 0x54, 0x30, 0x58, 0x90, 0x57, ++ 0xb1, 0x6b, 0x15, 0xf2, 0x07, 0xca, 0x1e, 0x6f, 0x08, 0xd5, 0x26, 0x16, 0xdd, 0x57, 0xad, 0x43, 0xef, 0xea, 0x6f, 0xdd, 0xaa, 0xea, 0x18, 0xd3, 0x37, 0x31, 0xfa, 0xc7, 0xec, 0xaa, 0xe9, 0x50, ++ 0xe1, 0xdf, 0x3c, 0x5a, 0x4e, 0x6f, 0xcb, 0x22, 0x3d, 0xf5, 0xe8, 0x6b, 0x48, 0x7f, 0xd7, 0x09, 0x2d, 0x08, 0x22, 0xef, 0xfa, 0xec, 0x82, 0xc4, 0xbe, 0xc1, 0x0c, 0x60, 0x0f, 0xdb, 0x90, 0xe7, ++ 0x74, 0x82, 0x91, 0x1b, 0x15, 0x95, 0x27, 0x77, 0x38, 0x84, 0x14, 0x09, 0xd0, 0xf8, 0xf1, 0x13, 0x19, 0x1d, 0x47, 0xf5, 0xe5, 0x6c, 0x11, 0x5a, 0x05, 0xde, 0xa7, 0x59, 0xaa, 0x6f, 0xb1, 0xd0, ++ 0x47, 0xf9, 0xfc, 0xa4, 0xed, 0x51, 0x9e, 0xa5, 0xd2, 0x1f, 0xe3, 0xba, 0x5b, 0x94, 0x34, 0xfe, 0xa1, 0x28, 0x3d, 0xfa, 0xd6, 0x3d, 0x01, 0x58, 0x9b, 0x0e, 0xb6, 0x1f, 0x24, 0x43, 0x51, 0xd0, ++ 0x33, 0x41, 0xdc, 0xd4, 0xdf, 0x62, 0x26, 0x5a, 0xfc, 0xae, 0xc6, 0x67, 0x6a, 0x87, 0x7d, 0x5c, 0xac, 0xb3, 0x59, 0xeb, 0xb5, 0x31, 0x96, 0x10, 0xdd, 0x44, 0x7d, 0xa9, 0x7e, 0x95, 0x0b, 0x0c, ++ }, ++ }, ++ { ++ .name = "Kyber Round 2, 786 KAT 1 (PKCS#8/SPKI)", ++ .version = 0, ++ .keyform = 0, ++ .pk_len = 0, ++ .sk_len = 0, ++ .pkcs8_len = 3697, ++ .pkcs8 = { ++ 0x30, 0x82, 0x0e, 0x6d, 0x02, 0x01, 0x00, 0x30, 0x0f, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0b, 0x05, 0x03, 0x03, 0x05, 0x00, 0x04, 0x82, 0x0e, 0x55, 0x30, 0x82, 0x0e, 0x51, ++ 0x02, 0x01, 0x00, 0x03, 0x82, 0x09, 0x61, 0x00, 0x07, 0x63, 0x8f, 0xb6, 0x98, 0x68, 0xf3, 0xd3, 0x20, 0xe5, 0x86, 0x2b, 0xd9, 0x69, 0x33, 0xfe, 0xb3, 0x11, 0xb3, 0x62, 0x09, 0x3c, 0x9b, 0x5d, ++ 0x50, 0x17, 0x0b, 0xce, 0xd4, 0x3f, 0x1b, 0x53, 0x6d, 0x9a, 0x20, 0x4b, 0xb1, 0xf2, 0x26, 0x95, 0x95, 0x0b, 0xa1, 0xf2, 0xa9, 0xe8, 0xeb, 0x82, 0x8b, 0x28, 0x44, 0x88, 0x76, 0x0b, 0x3f, 0xc8, ++ 0x4f, 0xab, 0xa0, 0x42, 0x75, 0xd5, 0x62, 0x8e, 0x39, 0xc5, 0xb2, 0x47, 0x13, 0x74, 0x28, 0x3c, 0x50, 0x32, 0x99, 0xc0, 0xab, 0x49, 0xb6, 0x6b, 0x8b, 0xbb, 0x56, 0xa4, 0x18, 0x66, 0x24, 0xf9, ++ 0x19, 0xa2, 0xba, 0x59, 0xbb, 0x08, 0xd8, 0x55, 0x18, 0x80, 0xc2, 0xbe, 0xfc, 0x4f, 0x87, 0xf2, 0x5f, 0x59, 0xab, 0x58, 0x7a, 0x79, 0xc3, 0x27, 0xd7, 0x92, 0xd5, 0x4c, 0x97, 0x4a, 0x69, 0x26, ++ 0x2f, 0xf8, 0xa7, 0x89, 0x38, 0x28, 0x9e, 0x9a, 0x87, 0xb6, 0x88, 0xb0, 0x83, 0xe0, 0x59, 0x5f, 0xe2, 0x18, 0xb6, 0xbb, 0x15, 0x05, 0x94, 0x1c, 0xe2, 0xe8, 0x1a, 0x5a, 0x64, 0xc5, 0xaa, 0xc6, ++ 0x04, 0x17, 0x25, 0x69, 0x85, 0x34, 0x9e, 0xe4, 0x7a, 0x52, 0x42, 0x0a, 0x5f, 0x97, 0x47, 0x7b, 0x72, 0x36, 0xac, 0x76, 0xbc, 0x70, 0xe8, 0x28, 0x87, 0x29, 0x28, 0x7e, 0xe3, 0xe3, 0x4a, 0x3d, ++ 0xbc, 0x36, 0x83, 0xc0, 0xb7, 0xb1, 0x00, 0x29, 0xfc, 0x20, 0x34, 0x18, 0x53, 0x7e, 0x74, 0x66, 0xba, 0x63, 0x85, 0xa8, 0xff, 0x30, 0x1e, 0xe1, 0x27, 0x08, 0xf8, 0x2a, 0xaa, 0x1e, 0x38, 0x0f, ++ 0xc7, 0xa8, 0x8f, 0x8f, 0x20, 0x5a, 0xb7, 0xe8, 0x8d, 0x7e, 0x95, 0x95, 0x2a, 0x55, 0xba, 0x20, 0xd0, 0x9b, 0x79, 0xa4, 0x71, 0x41, 0xd6, 0x2b, 0xf6, 0xeb, 0x7d, 0xd3, 0x07, 0xb0, 0x8e, 0xca, ++ 0x13, 0xa5, 0xbc, 0x5f, 0x6b, 0x68, 0x58, 0x1c, 0x68, 0x65, 0xb2, 0x7b, 0xbc, 0xdd, 0xab, 0x14, 0x2f, 0x4b, 0x2c, 0xbf, 0xf4, 0x88, 0xc8, 0xa2, 0x27, 0x05, 0xfa, 0xa9, 0x8a, 0x2b, 0x9e, 0xea, ++ 0x35, 0x30, 0xc7, 0x66, 0x62, 0x33, 0x5c, 0xc7, 0xea, 0x3a, 0x00, 0x77, 0x77, 0x25, 0xeb, 0xcc, 0xcd, 0x2a, 0x46, 0x36, 0xb2, 0xd9, 0x12, 0x2f, 0xf3, 0xab, 0x77, 0x12, 0x3c, 0xe0, 0x88, 0x3c, ++ 0x19, 0x11, 0x11, 0x5e, 0x50, 0xc9, 0xe8, 0xa9, 0x41, 0x94, 0xe4, 0x8d, 0xd0, 0xd0, 0x9c, 0xff, 0xb3, 0xad, 0xcd, 0x2c, 0x1e, 0x92, 0x43, 0x09, 0x03, 0xd0, 0x7a, 0xdb, 0xf0, 0x05, 0x32, 0x03, ++ 0x15, 0x75, 0xaa, 0x7f, 0x9e, 0x7b, 0x5a, 0x1f, 0x33, 0x62, 0xde, 0xc9, 0x36, 0xd4, 0x04, 0x3c, 0x05, 0xf2, 0x47, 0x6c, 0x07, 0x57, 0x8b, 0xc9, 0xcb, 0xaf, 0x2a, 0xb4, 0xe3, 0x82, 0x72, 0x7a, ++ 0xd4, 0x16, 0x86, 0xa9, 0x6b, 0x25, 0x48, 0x82, 0x0b, 0xb0, 0x3b, 0x32, 0xf1, 0x1b, 0x28, 0x11, 0xad, 0x62, 0xf4, 0x89, 0xe9, 0x51, 0x63, 0x2a, 0xba, 0x0d, 0x1d, 0xf8, 0x96, 0x80, 0xcc, 0x8a, ++ 0x8b, 0x53, 0xb4, 0x81, 0xd9, 0x2a, 0x68, 0xd7, 0x0b, 0x4e, 0xa1, 0xc3, 0xa6, 0xa5, 0x61, 0xc0, 0x69, 0x28, 0x82, 0xb5, 0xca, 0x8c, 0xc9, 0x42, 0xa8, 0xd4, 0x95, 0xaf, 0xcb, 0x06, 0xde, 0x89, ++ 0x49, 0x8f, 0xb9, 0x35, 0xb7, 0x75, 0x90, 0x8f, 0xe7, 0xa0, 0x3e, 0x32, 0x4d, 0x54, 0xcc, 0x19, 0xd4, 0xe1, 0xaa, 0xbd, 0x35, 0x93, 0xb3, 0x8b, 0x19, 0xee, 0x13, 0x88, 0xfe, 0x49, 0x2b, 0x43, ++ 0x12, 0x7e, 0x5a, 0x50, 0x42, 0x53, 0x78, 0x6a, 0x0d, 0x69, 0xad, 0x32, 0x60, 0x1c, 0x28, 0xe2, 0xc8, 0x85, 0x04, 0xa5, 0xba, 0x59, 0x97, 0x06, 0x02, 0x3a, 0x61, 0x36, 0x3e, 0x17, 0xc6, 0xb9, ++ 0xbb, 0x59, 0xbd, 0xc6, 0x97, 0x45, 0x2c, 0xd0, 0x59, 0x45, 0x19, 0x83, 0xd7, 0x38, 0xca, 0x3f, 0xd0, 0x34, 0xe3, 0xf5, 0x98, 0x88, 0x54, 0xca, 0x05, 0x03, 0x1d, 0xb0, 0x96, 0x11, 0x49, 0x89, ++ 0x88, 0x19, 0x7c, 0x6b, 0x30, 0xd2, 0x58, 0xdf, 0xe2, 0x62, 0x65, 0x54, 0x1c, 0x89, 0xa4, 0xb3, 0x1d, 0x68, 0x64, 0xe9, 0x38, 0x9b, 0x03, 0xcb, 0x74, 0xf7, 0xec, 0x43, 0x23, 0xfb, 0x94, 0x21, ++ 0xa4, 0xb9, 0x79, 0x0a, 0x26, 0xd1, 0x7b, 0x03, 0x98, 0xa2, 0x67, 0x67, 0x35, 0x09, 0x09, 0xf8, 0x4d, 0x57, 0xb6, 0x69, 0x4d, 0xf8, 0x30, 0x66, 0x4c, 0xa8, 0xb3, 0xc3, 0xc0, 0x3e, 0xd2, 0xae, ++ 0x67, 0xb8, 0x90, 0x06, 0x86, 0x8a, 0x68, 0x52, 0x7c, 0xcd, 0x66, 0x64, 0x59, 0xab, 0x7f, 0x05, 0x66, 0x71, 0x00, 0x0c, 0x61, 0x64, 0xd3, 0xa7, 0xf2, 0x66, 0xa1, 0x4d, 0x97, 0xcb, 0xd7, 0x00, ++ 0x4d, 0x6c, 0x92, 0xca, 0xca, 0x77, 0x0b, 0x84, 0x4a, 0x4f, 0xa9, 0xb1, 0x82, 0xe7, 0xb1, 0x8c, 0xa8, 0x85, 0x08, 0x2a, 0xc5, 0x64, 0x6f, 0xcb, 0x4a, 0x14, 0xe1, 0x68, 0x5f, 0xeb, 0x0c, 0x9c, ++ 0xe3, 0x37, 0x2a, 0xb9, 0x53, 0x65, 0xc0, 0x4f, 0xd8, 0x30, 0x84, 0xf8, 0x0a, 0x23, 0xff, 0x10, 0xa0, 0x5b, 0xf1, 0x5f, 0x7f, 0xa5, 0xac, 0xc6, 0xc0, 0xcb, 0x46, 0x2c, 0x33, 0xca, 0x52, 0x4f, ++ 0xa6, 0xb8, 0xbb, 0x35, 0x90, 0x43, 0xba, 0x68, 0x60, 0x9e, 0xaa, 0x25, 0x36, 0xe8, 0x1d, 0x08, 0x46, 0x3b, 0x19, 0x65, 0x3b, 0x54, 0x35, 0xba, 0x94, 0x6c, 0x9a, 0xdd, 0xeb, 0x20, 0x2b, 0x04, ++ 0xb0, 0x31, 0xcc, 0x96, 0x0d, 0xcc, 0x12, 0xe4, 0x51, 0x8d, 0x42, 0x8b, 0x32, 0xb2, 0x57, 0xa4, 0xfc, 0x73, 0x13, 0xd3, 0xa7, 0x98, 0x0d, 0x80, 0x08, 0x2e, 0x93, 0x4f, 0x9d, 0x95, 0xc3, 0x2b, ++ 0x0a, 0x01, 0x91, 0xa2, 0x36, 0x04, 0x38, 0x4d, 0xd9, 0xe0, 0x79, 0xbb, 0xba, 0xa2, 0x66, 0xd1, 0x4c, 0x3f, 0x75, 0x6b, 0x9f, 0x21, 0x33, 0x10, 0x74, 0x33, 0xa4, 0xe8, 0x3f, 0xa7, 0x18, 0x72, ++ 0x82, 0xa8, 0x09, 0x20, 0x3a, 0x4f, 0xaf, 0x84, 0x18, 0x51, 0x83, 0x3d, 0x12, 0x1a, 0xc3, 0x83, 0x84, 0x3a, 0x5e, 0x55, 0xbc, 0x23, 0x81, 0x42, 0x5e, 0x16, 0xc7, 0xdb, 0x4c, 0xc9, 0xab, 0x5c, ++ 0x1b, 0x0d, 0x91, 0xa4, 0x7e, 0x2b, 0x8d, 0xe0, 0xe5, 0x82, 0xc8, 0x6b, 0x6b, 0x0d, 0x90, 0x7b, 0xb3, 0x60, 0xb9, 0x7f, 0x40, 0xab, 0x5d, 0x03, 0x8f, 0x6b, 0x75, 0xc8, 0x14, 0xb2, 0x7d, 0x9b, ++ 0x96, 0x8d, 0x41, 0x98, 0x32, 0xbc, 0x8c, 0x2b, 0xee, 0x60, 0x5e, 0xf6, 0xe5, 0x05, 0x9d, 0x33, 0x10, 0x0d, 0x90, 0x48, 0x5d, 0x37, 0x84, 0x50, 0x01, 0x42, 0x21, 0x73, 0x6c, 0x07, 0x40, 0x7c, ++ 0xac, 0x26, 0x04, 0x08, 0xaa, 0x64, 0x92, 0x66, 0x19, 0x78, 0x8b, 0x86, 0x01, 0xc2, 0xa7, 0x52, 0xd1, 0xa6, 0xcb, 0xf8, 0x20, 0xd7, 0xc7, 0xa0, 0x47, 0x16, 0x20, 0x32, 0x25, 0xb3, 0x89, 0x5b, ++ 0x93, 0x42, 0xd1, 0x47, 0xa8, 0x18, 0x5c, 0xfc, 0x1b, 0xb6, 0x5b, 0xa0, 0x6b, 0x41, 0x42, 0x33, 0x99, 0x03, 0xc0, 0xac, 0x46, 0x51, 0x38, 0x5b, 0x45, 0xd9, 0x8a, 0x8b, 0x19, 0xd2, 0x8c, 0xd6, ++ 0xba, 0xb0, 0x88, 0x78, 0x7f, 0x7e, 0xe1, 0xb1, 0x24, 0x61, 0x76, 0x6b, 0x43, 0xcb, 0xcc, 0xb9, 0x64, 0x34, 0x42, 0x7d, 0x93, 0xc0, 0x65, 0x55, 0x06, 0x88, 0xf6, 0x94, 0x8e, 0xd1, 0xb5, 0x47, ++ 0x5a, 0x42, 0x5f, 0x1b, 0x85, 0x20, 0x9d, 0x06, 0x1c, 0x08, 0xb5, 0x6c, 0x1c, 0xc0, 0x69, 0xf6, 0xc0, 0xa7, 0xc6, 0xf2, 0x93, 0x58, 0xca, 0xb9, 0x11, 0x08, 0x77, 0x32, 0xa6, 0x49, 0xd2, 0x7c, ++ 0x9b, 0x98, 0xf9, 0xa4, 0x88, 0x79, 0x38, 0x7d, 0x9b, 0x00, 0xc2, 0x59, 0x59, 0xa7, 0x16, 0x54, 0xd6, 0xf6, 0xa9, 0x46, 0x16, 0x45, 0x13, 0xe4, 0x7a, 0x75, 0xd0, 0x05, 0x98, 0x6c, 0x23, 0x63, ++ 0xc0, 0x9f, 0x6b, 0x53, 0x7e, 0xca, 0x78, 0xb9, 0x30, 0x3a, 0x5f, 0xa4, 0x57, 0x60, 0x8a, 0x58, 0x6a, 0x65, 0x3a, 0x34, 0x7d, 0xb0, 0x4d, 0xfc, 0xc1, 0x91, 0x75, 0xb3, 0xa3, 0x01, 0x17, 0x25, ++ 0x36, 0x06, 0x2a, 0x65, 0x8a, 0x95, 0x27, 0x75, 0x70, 0xc8, 0x85, 0x2c, 0xa8, 0x97, 0x3f, 0x4a, 0xe1, 0x23, 0xa3, 0x34, 0x04, 0x7d, 0xd7, 0x11, 0xc8, 0x92, 0x7a, 0x63, 0x4a, 0x03, 0x38, 0x8a, ++ 0x52, 0x7b, 0x03, 0x4b, 0xf7, 0xa8, 0x17, 0x0f, 0xa7, 0x02, 0xc1, 0xf7, 0xc2, 0x3e, 0xc3, 0x2d, 0x18, 0xa2, 0x37, 0x48, 0x90, 0xbe, 0x9c, 0x78, 0x7a, 0x94, 0x09, 0xc8, 0x2d, 0x19, 0x2c, 0x4b, ++ 0xb7, 0x05, 0xa2, 0xf9, 0x96, 0xce, 0x40, 0x5d, 0xa0, 0xb7, 0x1f, 0x67, 0xc6, 0xce, 0xc0, 0xd3, 0x56, 0x86, 0xd5, 0x13, 0x42, 0x34, 0x32, 0xe5, 0x12, 0xac, 0x40, 0x44, 0x55, 0x7e, 0x86, 0x8a, ++ 0x62, 0x48, 0x00, 0x10, 0x9a, 0x33, 0x55, 0xf9, 0x8f, 0x15, 0x14, 0x44, 0xe2, 0x85, 0x2e, 0x27, 0xea, 0x6e, 0xdb, 0x19, 0x92, 0xca, 0xd3, 0x97, 0x3c, 0x3a, 0x6f, 0xf7, 0x9a, 0x5a, 0x04, 0x9a, ++ 0x25, 0x9e, 0xb5, 0x41, 0x5a, 0xa2, 0xa2, 0x62, 0x45, 0x6e, 0xc9, 0x49, 0x5b, 0xbb, 0x52, 0x00, 0xd8, 0xd3, 0x16, 0x3a, 0x5b, 0x10, 0x22, 0x62, 0x92, 0xec, 0xa0, 0x10, 0x21, 0x38, 0x9d, 0xa3, ++ 0x78, 0x81, 0xe2, 0x76, 0x30, 0x65, 0x50, 0xc6, 0xef, 0xb6, 0x44, 0x0e, 0xc5, 0x1a, 0x2f, 0x73, 0x48, 0x34, 0x9b, 0x85, 0x1c, 0xd4, 0xaa, 0x01, 0x75, 0xa0, 0x55, 0x02, 0x13, 0xc4, 0x79, 0x1d, ++ 0x91, 0x01, 0x12, 0x20, 0x82, 0x4b, 0x2b, 0x61, 0x65, 0x08, 0x13, 0xad, 0xfd, 0x2c, 0xb1, 0x05, 0x38, 0xbf, 0xab, 0x0a, 0x72, 0x6f, 0x81, 0x12, 0x9e, 0xd2, 0xc0, 0xf0, 0x6a, 0x16, 0xb7, 0x01, ++ 0x09, 0x0b, 0xf0, 0x48, 0xc5, 0xa4, 0x01, 0x26, 0xd5, 0x72, 0xfc, 0xd4, 0x7a, 0xa1, 0x21, 0x8f, 0xb0, 0x15, 0x47, 0xd1, 0x50, 0x79, 0x2d, 0x23, 0x16, 0xcb, 0x32, 0x0d, 0x51, 0x44, 0xba, 0x35, ++ 0x08, 0xa1, 0xeb, 0xbb, 0x5a, 0xc1, 0xc2, 0x29, 0x13, 0xe8, 0x29, 0x5f, 0xab, 0x59, 0xbf, 0x58, 0x37, 0xa7, 0x78, 0xcf, 0x28, 0x22, 0x7e, 0x07, 0xe1, 0x03, 0x2d, 0xab, 0x7d, 0x0e, 0x09, 0xa1, ++ 0x5f, 0x13, 0x41, 0x48, 0xc1, 0x20, 0x09, 0xda, 0x53, 0x6b, 0x22, 0xcc, 0x62, 0x47, 0x4e, 0x69, 0xcc, 0x15, 0x54, 0xc0, 0x81, 0x4d, 0x6c, 0xa0, 0xb7, 0x22, 0x59, 0x43, 0x83, 0xa9, 0xd0, 0xa2, ++ 0xc7, 0x7f, 0xd3, 0x65, 0xa5, 0x54, 0x42, 0x95, 0xfb, 0xb9, 0x73, 0xf9, 0x1e, 0xa5, 0x64, 0x90, 0xd6, 0xca, 0x68, 0x76, 0x49, 0x7b, 0x98, 0xb3, 0xcb, 0x12, 0x41, 0x7c, 0x25, 0x7b, 0x6d, 0x0f, ++ 0x71, 0x83, 0xdb, 0xb6, 0x9e, 0x33, 0x07, 0x5b, 0xeb, 0x01, 0x17, 0xb6, 0x91, 0x4c, 0x69, 0xba, 0x38, 0x34, 0x94, 0x22, 0xf2, 0xf4, 0x33, 0x64, 0x82, 0x2a, 0x25, 0x70, 0x95, 0x2d, 0xd5, 0x07, ++ 0x7b, 0x90, 0x75, 0x5f, 0x15, 0x74, 0x11, 0x5b, 0x8e, 0x22, 0x14, 0x27, 0x58, 0x59, 0x61, 0x91, 0x3a, 0x9b, 0xfa, 0x05, 0x02, 0xb5, 0xd7, 0x9a, 0xb7, 0x81, 0x17, 0x44, 0xe6, 0x56, 0x3c, 0x5b, ++ 0x62, 0xc5, 0xcc, 0x4e, 0x93, 0x23, 0x9a, 0x0a, 0x8c, 0xc6, 0x0f, 0xe8, 0x48, 0xf8, 0x4a, 0x95, 0xf5, 0x90, 0x25, 0x99, 0xb5, 0x4a, 0x06, 0x62, 0x93, 0xa2, 0x02, 0x1d, 0xa1, 0x96, 0x76, 0x6c, ++ 0x17, 0xc7, 0xe8, 0x63, 0xaf, 0x79, 0x0c, 0x27, 0x0b, 0x21, 0x6a, 0x25, 0x13, 0x8d, 0xda, 0x0c, 0x81, 0x26, 0xe0, 0x93, 0x77, 0x87, 0x98, 0x59, 0xdb, 0x35, 0x8f, 0x9b, 0x82, 0xb7, 0xc8, 0xa6, ++ 0x79, 0x2a, 0xce, 0xe9, 0x2a, 0x4c, 0xbd, 0xe3, 0xce, 0xdd, 0x45, 0x00, 0xac, 0xbc, 0x55, 0x5c, 0x28, 0x8e, 0xff, 0x97, 0x95, 0x26, 0x5b, 0x90, 0x05, 0x35, 0x1c, 0x52, 0xe2, 0x65, 0x35, 0x54, ++ 0xab, 0xaa, 0xf8, 0x72, 0xdf, 0x95, 0xca, 0x7f, 0x79, 0x59, 0x03, 0xf0, 0xb0, 0xa1, 0x82, 0xb1, 0x8a, 0xeb, 0x04, 0x75, 0xb2, 0x9f, 0x6e, 0x3a, 0xbf, 0x4c, 0x22, 0x50, 0xfe, 0x7b, 0x84, 0x2a, ++ 0x73, 0x65, 0x50, 0x16, 0xa8, 0xfc, 0x72, 0x9f, 0x39, 0x05, 0x07, 0xac, 0xa9, 0x36, 0x82, 0x5a, 0x98, 0xb3, 0xa3, 0x2e, 0x6b, 0x25, 0x54, 0xce, 0x95, 0x28, 0x94, 0x1a, 0x3b, 0xb8, 0xc9, 0x09, ++ 0x96, 0x00, 0x8d, 0x74, 0xfb, 0xcd, 0x02, 0x0a, 0x02, 0xe7, 0x06, 0xa6, 0xde, 0x7b, 0x02, 0xaf, 0x40, 0x4c, 0x10, 0xdb, 0x00, 0xfa, 0xec, 0x02, 0xd3, 0xea, 0xa6, 0xd9, 0x56, 0x1a, 0x15, 0x65, ++ 0xa7, 0xb0, 0x5c, 0x63, 0x66, 0xd0, 0x9d, 0xa7, 0xa5, 0x37, 0xf2, 0x0c, 0x7b, 0x28, 0x59, 0xa8, 0x3e, 0x02, 0x9e, 0x13, 0xa9, 0xbd, 0x28, 0x91, 0x57, 0xc5, 0xb7, 0x4c, 0x84, 0xea, 0xa3, 0x07, ++ 0x75, 0x3d, 0x43, 0x12, 0x02, 0xa3, 0xd9, 0xb6, 0x16, 0x22, 0x18, 0xbe, 0xc5, 0x34, 0x69, 0x45, 0xbf, 0xef, 0x55, 0xb6, 0x24, 0xc5, 0xc6, 0xe3, 0x73, 0x35, 0x9b, 0xb1, 0xc4, 0x79, 0x95, 0x2b, ++ 0xba, 0xba, 0x4d, 0x65, 0x55, 0xc2, 0x76, 0x57, 0x3e, 0x51, 0x52, 0xb5, 0x53, 0x90, 0x19, 0x99, 0xf6, 0x94, 0x02, 0xd1, 0x50, 0xbe, 0xf7, 0x9d, 0x74, 0xfb, 0x29, 0x53, 0x01, 0x8f, 0xf4, 0x86, ++ 0x66, 0x74, 0x6a, 0xce, 0x60, 0x78, 0x14, 0xa1, 0xfa, 0x33, 0x19, 0x57, 0x20, 0xf8, 0x38, 0x78, 0xd3, 0xb5, 0x75, 0xc7, 0x25, 0x74, 0x4a, 0x72, 0x07, 0x0d, 0xd0, 0x44, 0x01, 0x80, 0x42, 0xda, ++ 0x25, 0x71, 0x4d, 0x17, 0x30, 0x90, 0x32, 0x3a, 0x51, 0xe6, 0xc0, 0x63, 0xd2, 0x03, 0x88, 0x13, 0x80, 0x91, 0x27, 0x61, 0xfc, 0x34, 0x10, 0x83, 0x90, 0x95, 0xf2, 0x6c, 0x0e, 0x68, 0x7a, 0x00, ++ 0x70, 0x54, 0x95, 0xe1, 0x71, 0xb5, 0x71, 0x51, 0xac, 0xe0, 0x49, 0x8e, 0x30, 0xf1, 0x4c, 0xa9, 0xb0, 0x2f, 0x6e, 0x40, 0x83, 0x18, 0x54, 0xc2, 0xe0, 0xab, 0x1e, 0xcd, 0x0c, 0x21, 0xd8, 0xe4, ++ 0xc7, 0xe6, 0x69, 0xcd, 0x72, 0x82, 0x30, 0xb9, 0xd1, 0x1f, 0x72, 0xc2, 0x66, 0xe3, 0x44, 0x66, 0xf9, 0xc0, 0x15, 0x9e, 0xf4, 0x24, 0xf8, 0xf3, 0x1d, 0x95, 0xa5, 0x7b, 0xa0, 0xe2, 0x10, 0x54, ++ 0x3c, 0x10, 0xc6, 0x50, 0x3f, 0xb5, 0xc6, 0x3e, 0xd2, 0x3a, 0xa3, 0x6c, 0xd6, 0xa6, 0xf3, 0x78, 0x26, 0x1b, 0x0b, 0x1e, 0x79, 0x50, 0x9d, 0x8b, 0xeb, 0x36, 0xaa, 0x26, 0x3d, 0xc9, 0x15, 0x45, ++ 0xe5, 0x33, 0x69, 0xdf, 0x26, 0x83, 0x7f, 0x39, 0x4c, 0x56, 0x77, 0x7c, 0x95, 0xb6, 0x48, 0xbd, 0x1a, 0x72, 0x92, 0x1a, 0xbf, 0x49, 0x56, 0x3f, 0x99, 0xcb, 0x9d, 0x98, 0xea, 0xb5, 0xc6, 0x66, ++ 0x66, 0xf6, 0xb1, 0x6f, 0x74, 0x02, 0x24, 0x81, 0xfa, 0x21, 0x4e, 0x61, 0x76, 0x98, 0xd3, 0xbb, 0xd1, 0x3c, 0xb3, 0x08, 0x71, 0x3f, 0xdc, 0xc7, 0xcf, 0xd3, 0x97, 0xb9, 0xca, 0x39, 0xaf, 0xf4, ++ 0xc7, 0x44, 0xd5, 0x71, 0x5d, 0x58, 0x96, 0x6f, 0x2c, 0xf9, 0x70, 0x70, 0x15, 0xc8, 0xf3, 0x54, 0x3e, 0xd2, 0x86, 0xa3, 0xd8, 0xd5, 0xcb, 0xf6, 0x4a, 0xce, 0xdf, 0xc0, 0x29, 0x71, 0xa9, 0x10, ++ 0x72, 0xc6, 0x9d, 0x2e, 0xf4, 0x98, 0x29, 0xf1, 0x03, 0x7f, 0x05, 0x0c, 0x5b, 0x92, 0x22, 0x98, 0x56, 0xcb, 0x12, 0xb4, 0x56, 0xcc, 0x09, 0x52, 0x82, 0xa6, 0x26, 0x87, 0xea, 0x38, 0xc9, 0x77, ++ 0x8a, 0xea, 0x49, 0x1d, 0xff, 0x06, 0x97, 0x11, 0xfb, 0xbe, 0x05, 0xe8, 0xcd, 0x9b, 0xf4, 0x4a, 0x8e, 0x71, 0x26, 0x19, 0x57, 0x3e, 0x12, 0xea, 0xa7, 0xb2, 0x38, 0x29, 0xdc, 0x67, 0x26, 0xbf, ++ 0xe3, 0x3d, 0xa1, 0x36, 0xb8, 0x1e, 0x15, 0x32, 0x51, 0x50, 0x8f, 0x62, 0x85, 0xba, 0x15, 0xb2, 0xc1, 0x23, 0x76, 0x77, 0xfe, 0x5b, 0x14, 0xb4, 0xe3, 0x3f, 0x98, 0xc3, 0x26, 0xbc, 0x58, 0xb9, ++ 0xd8, 0xe0, 0x75, 0xa2, 0x5b, 0x94, 0xc8, 0xa2, 0x32, 0x33, 0x02, 0x9d, 0xcc, 0x78, 0x6b, 0x13, 0x5c, 0x56, 0x16, 0x4b, 0xa3, 0xd1, 0x60, 0xcb, 0xce, 0xa8, 0x54, 0xb7, 0x97, 0x1f, 0x9c, 0xd7, ++ 0x3a, 0x38, 0x3a, 0xac, 0x05, 0x0a, 0x30, 0x2a, 0xd8, 0x3b, 0x3e, 0x3a, 0xb9, 0x02, 0x46, 0xad, 0x16, 0x0a, 0x32, 0x1d, 0x33, 0x0a, 0xcd, 0xec, 0x7c, 0xa6, 0x64, 0x3d, 0x7e, 0xc0, 0x1f, 0x91, ++ 0x69, 0x1f, 0x16, 0x32, 0x5b, 0xdf, 0x39, 0x69, 0x50, 0xb8, 0x8d, 0xaf, 0xe3, 0x69, 0xc6, 0x54, 0xb8, 0x52, 0x05, 0x5c, 0x97, 0x03, 0x62, 0xc6, 0x13, 0x80, 0x46, 0x07, 0x57, 0xc6, 0x58, 0x90, ++ 0xf4, 0xe5, 0x92, 0x22, 0xe4, 0xa4, 0x06, 0x0b, 0x26, 0xc0, 0xeb, 0xc1, 0x01, 0x97, 0x59, 0x0d, 0xe3, 0xc8, 0xf0, 0x95, 0x5d, 0x65, 0x4b, 0x37, 0x1c, 0xcb, 0x90, 0xac, 0xa3, 0x71, 0xb2, 0x94, ++ 0x47, 0x6c, 0x16, 0xa4, 0x59, 0x6a, 0x1d, 0xe8, 0x30, 0x9e, 0x2a, 0x36, 0x12, 0xc6, 0x9b, 0x71, 0x25, 0x31, 0x05, 0x01, 0xe0, 0xc0, 0x49, 0xb8, 0x74, 0x40, 0xd9, 0xa6, 0xd0, 0xec, 0xb9, 0x99, ++ 0xc9, 0xa0, 0x94, 0x2a, 0xa3, 0x40, 0xf6, 0x03, 0x65, 0xea, 0xfd, 0x46, 0x5f, 0xc6, 0x4a, 0x0c, 0x5f, 0x8f, 0x3f, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9d, 0x59, 0xa5, 0x43, 0xd8, 0x20, 0x8c, ++ 0x54, 0xa3, 0x16, 0x65, 0x29, 0xb5, 0x39, 0x22, 0xde, 0xe4, 0xab, 0xa0, 0x00, 0x38, 0x95, 0x81, 0x71, 0x7d, 0x36, 0xf5, 0x6f, 0x39, 0xaf, 0x73, 0x00, 0xb3, 0x1d, 0x83, 0x1a, 0x4d, 0x8c, 0x97, ++ 0x61, 0x28, 0xe0, 0x9d, 0xed, 0xe7, 0x1a, 0x5a, 0x86, 0x26, 0xed, 0x79, 0xd4, 0x51, 0x14, 0x08, 0x00, 0xe0, 0x3b, 0x59, 0xb9, 0x56, 0xf8, 0x21, 0x0e, 0x55, 0x60, 0x67, 0x40, 0x7d, 0x13, 0xdc, ++ 0x90, 0xfa, 0x9e, 0x8b, 0x87, 0x2b, 0xfb, 0x8f, 0xa0, 0x82, 0x04, 0xe5, 0x03, 0x82, 0x04, 0xe1, 0x00, 0xa0, 0xb7, 0x1f, 0x67, 0xc6, 0xce, 0xc0, 0xd3, 0x56, 0x86, 0xd5, 0x13, 0x42, 0x34, 0x32, ++ 0xe5, 0x12, 0xac, 0x40, 0x44, 0x55, 0x7e, 0x86, 0x8a, 0x62, 0x48, 0x00, 0x10, 0x9a, 0x33, 0x55, 0xf9, 0x8f, 0x15, 0x14, 0x44, 0xe2, 0x85, 0x2e, 0x27, 0xea, 0x6e, 0xdb, 0x19, 0x92, 0xca, 0xd3, ++ 0x97, 0x3c, 0x3a, 0x6f, 0xf7, 0x9a, 0x5a, 0x04, 0x9a, 0x25, 0x9e, 0xb5, 0x41, 0x5a, 0xa2, 0xa2, 0x62, 0x45, 0x6e, 0xc9, 0x49, 0x5b, 0xbb, 0x52, 0x00, 0xd8, 0xd3, 0x16, 0x3a, 0x5b, 0x10, 0x22, ++ 0x62, 0x92, 0xec, 0xa0, 0x10, 0x21, 0x38, 0x9d, 0xa3, 0x78, 0x81, 0xe2, 0x76, 0x30, 0x65, 0x50, 0xc6, 0xef, 0xb6, 0x44, 0x0e, 0xc5, 0x1a, 0x2f, 0x73, 0x48, 0x34, 0x9b, 0x85, 0x1c, 0xd4, 0xaa, ++ 0x01, 0x75, 0xa0, 0x55, 0x02, 0x13, 0xc4, 0x79, 0x1d, 0x91, 0x01, 0x12, 0x20, 0x82, 0x4b, 0x2b, 0x61, 0x65, 0x08, 0x13, 0xad, 0xfd, 0x2c, 0xb1, 0x05, 0x38, 0xbf, 0xab, 0x0a, 0x72, 0x6f, 0x81, ++ 0x12, 0x9e, 0xd2, 0xc0, 0xf0, 0x6a, 0x16, 0xb7, 0x01, 0x09, 0x0b, 0xf0, 0x48, 0xc5, 0xa4, 0x01, 0x26, 0xd5, 0x72, 0xfc, 0xd4, 0x7a, 0xa1, 0x21, 0x8f, 0xb0, 0x15, 0x47, 0xd1, 0x50, 0x79, 0x2d, ++ 0x23, 0x16, 0xcb, 0x32, 0x0d, 0x51, 0x44, 0xba, 0x35, 0x08, 0xa1, 0xeb, 0xbb, 0x5a, 0xc1, 0xc2, 0x29, 0x13, 0xe8, 0x29, 0x5f, 0xab, 0x59, 0xbf, 0x58, 0x37, 0xa7, 0x78, 0xcf, 0x28, 0x22, 0x7e, ++ 0x07, 0xe1, 0x03, 0x2d, 0xab, 0x7d, 0x0e, 0x09, 0xa1, 0x5f, 0x13, 0x41, 0x48, 0xc1, 0x20, 0x09, 0xda, 0x53, 0x6b, 0x22, 0xcc, 0x62, 0x47, 0x4e, 0x69, 0xcc, 0x15, 0x54, 0xc0, 0x81, 0x4d, 0x6c, ++ 0xa0, 0xb7, 0x22, 0x59, 0x43, 0x83, 0xa9, 0xd0, 0xa2, 0xc7, 0x7f, 0xd3, 0x65, 0xa5, 0x54, 0x42, 0x95, 0xfb, 0xb9, 0x73, 0xf9, 0x1e, 0xa5, 0x64, 0x90, 0xd6, 0xca, 0x68, 0x76, 0x49, 0x7b, 0x98, ++ 0xb3, 0xcb, 0x12, 0x41, 0x7c, 0x25, 0x7b, 0x6d, 0x0f, 0x71, 0x83, 0xdb, 0xb6, 0x9e, 0x33, 0x07, 0x5b, 0xeb, 0x01, 0x17, 0xb6, 0x91, 0x4c, 0x69, 0xba, 0x38, 0x34, 0x94, 0x22, 0xf2, 0xf4, 0x33, ++ 0x64, 0x82, 0x2a, 0x25, 0x70, 0x95, 0x2d, 0xd5, 0x07, 0x7b, 0x90, 0x75, 0x5f, 0x15, 0x74, 0x11, 0x5b, 0x8e, 0x22, 0x14, 0x27, 0x58, 0x59, 0x61, 0x91, 0x3a, 0x9b, 0xfa, 0x05, 0x02, 0xb5, 0xd7, ++ 0x9a, 0xb7, 0x81, 0x17, 0x44, 0xe6, 0x56, 0x3c, 0x5b, 0x62, 0xc5, 0xcc, 0x4e, 0x93, 0x23, 0x9a, 0x0a, 0x8c, 0xc6, 0x0f, 0xe8, 0x48, 0xf8, 0x4a, 0x95, 0xf5, 0x90, 0x25, 0x99, 0xb5, 0x4a, 0x06, ++ 0x62, 0x93, 0xa2, 0x02, 0x1d, 0xa1, 0x96, 0x76, 0x6c, 0x17, 0xc7, 0xe8, 0x63, 0xaf, 0x79, 0x0c, 0x27, 0x0b, 0x21, 0x6a, 0x25, 0x13, 0x8d, 0xda, 0x0c, 0x81, 0x26, 0xe0, 0x93, 0x77, 0x87, 0x98, ++ 0x59, 0xdb, 0x35, 0x8f, 0x9b, 0x82, 0xb7, 0xc8, 0xa6, 0x79, 0x2a, 0xce, 0xe9, 0x2a, 0x4c, 0xbd, 0xe3, 0xce, 0xdd, 0x45, 0x00, 0xac, 0xbc, 0x55, 0x5c, 0x28, 0x8e, 0xff, 0x97, 0x95, 0x26, 0x5b, ++ 0x90, 0x05, 0x35, 0x1c, 0x52, 0xe2, 0x65, 0x35, 0x54, 0xab, 0xaa, 0xf8, 0x72, 0xdf, 0x95, 0xca, 0x7f, 0x79, 0x59, 0x03, 0xf0, 0xb0, 0xa1, 0x82, 0xb1, 0x8a, 0xeb, 0x04, 0x75, 0xb2, 0x9f, 0x6e, ++ 0x3a, 0xbf, 0x4c, 0x22, 0x50, 0xfe, 0x7b, 0x84, 0x2a, 0x73, 0x65, 0x50, 0x16, 0xa8, 0xfc, 0x72, 0x9f, 0x39, 0x05, 0x07, 0xac, 0xa9, 0x36, 0x82, 0x5a, 0x98, 0xb3, 0xa3, 0x2e, 0x6b, 0x25, 0x54, ++ 0xce, 0x95, 0x28, 0x94, 0x1a, 0x3b, 0xb8, 0xc9, 0x09, 0x96, 0x00, 0x8d, 0x74, 0xfb, 0xcd, 0x02, 0x0a, 0x02, 0xe7, 0x06, 0xa6, 0xde, 0x7b, 0x02, 0xaf, 0x40, 0x4c, 0x10, 0xdb, 0x00, 0xfa, 0xec, ++ 0x02, 0xd3, 0xea, 0xa6, 0xd9, 0x56, 0x1a, 0x15, 0x65, 0xa7, 0xb0, 0x5c, 0x63, 0x66, 0xd0, 0x9d, 0xa7, 0xa5, 0x37, 0xf2, 0x0c, 0x7b, 0x28, 0x59, 0xa8, 0x3e, 0x02, 0x9e, 0x13, 0xa9, 0xbd, 0x28, ++ 0x91, 0x57, 0xc5, 0xb7, 0x4c, 0x84, 0xea, 0xa3, 0x07, 0x75, 0x3d, 0x43, 0x12, 0x02, 0xa3, 0xd9, 0xb6, 0x16, 0x22, 0x18, 0xbe, 0xc5, 0x34, 0x69, 0x45, 0xbf, 0xef, 0x55, 0xb6, 0x24, 0xc5, 0xc6, ++ 0xe3, 0x73, 0x35, 0x9b, 0xb1, 0xc4, 0x79, 0x95, 0x2b, 0xba, 0xba, 0x4d, 0x65, 0x55, 0xc2, 0x76, 0x57, 0x3e, 0x51, 0x52, 0xb5, 0x53, 0x90, 0x19, 0x99, 0xf6, 0x94, 0x02, 0xd1, 0x50, 0xbe, 0xf7, ++ 0x9d, 0x74, 0xfb, 0x29, 0x53, 0x01, 0x8f, 0xf4, 0x86, 0x66, 0x74, 0x6a, 0xce, 0x60, 0x78, 0x14, 0xa1, 0xfa, 0x33, 0x19, 0x57, 0x20, 0xf8, 0x38, 0x78, 0xd3, 0xb5, 0x75, 0xc7, 0x25, 0x74, 0x4a, ++ 0x72, 0x07, 0x0d, 0xd0, 0x44, 0x01, 0x80, 0x42, 0xda, 0x25, 0x71, 0x4d, 0x17, 0x30, 0x90, 0x32, 0x3a, 0x51, 0xe6, 0xc0, 0x63, 0xd2, 0x03, 0x88, 0x13, 0x80, 0x91, 0x27, 0x61, 0xfc, 0x34, 0x10, ++ 0x83, 0x90, 0x95, 0xf2, 0x6c, 0x0e, 0x68, 0x7a, 0x00, 0x70, 0x54, 0x95, 0xe1, 0x71, 0xb5, 0x71, 0x51, 0xac, 0xe0, 0x49, 0x8e, 0x30, 0xf1, 0x4c, 0xa9, 0xb0, 0x2f, 0x6e, 0x40, 0x83, 0x18, 0x54, ++ 0xc2, 0xe0, 0xab, 0x1e, 0xcd, 0x0c, 0x21, 0xd8, 0xe4, 0xc7, 0xe6, 0x69, 0xcd, 0x72, 0x82, 0x30, 0xb9, 0xd1, 0x1f, 0x72, 0xc2, 0x66, 0xe3, 0x44, 0x66, 0xf9, 0xc0, 0x15, 0x9e, 0xf4, 0x24, 0xf8, ++ 0xf3, 0x1d, 0x95, 0xa5, 0x7b, 0xa0, 0xe2, 0x10, 0x54, 0x3c, 0x10, 0xc6, 0x50, 0x3f, 0xb5, 0xc6, 0x3e, 0xd2, 0x3a, 0xa3, 0x6c, 0xd6, 0xa6, 0xf3, 0x78, 0x26, 0x1b, 0x0b, 0x1e, 0x79, 0x50, 0x9d, ++ 0x8b, 0xeb, 0x36, 0xaa, 0x26, 0x3d, 0xc9, 0x15, 0x45, 0xe5, 0x33, 0x69, 0xdf, 0x26, 0x83, 0x7f, 0x39, 0x4c, 0x56, 0x77, 0x7c, 0x95, 0xb6, 0x48, 0xbd, 0x1a, 0x72, 0x92, 0x1a, 0xbf, 0x49, 0x56, ++ 0x3f, 0x99, 0xcb, 0x9d, 0x98, 0xea, 0xb5, 0xc6, 0x66, 0x66, 0xf6, 0xb1, 0x6f, 0x74, 0x02, 0x24, 0x81, 0xfa, 0x21, 0x4e, 0x61, 0x76, 0x98, 0xd3, 0xbb, 0xd1, 0x3c, 0xb3, 0x08, 0x71, 0x3f, 0xdc, ++ 0xc7, 0xcf, 0xd3, 0x97, 0xb9, 0xca, 0x39, 0xaf, 0xf4, 0xc7, 0x44, 0xd5, 0x71, 0x5d, 0x58, 0x96, 0x6f, 0x2c, 0xf9, 0x70, 0x70, 0x15, 0xc8, 0xf3, 0x54, 0x3e, 0xd2, 0x86, 0xa3, 0xd8, 0xd5, 0xcb, ++ 0xf6, 0x4a, 0xce, 0xdf, 0xc0, 0x29, 0x71, 0xa9, 0x10, 0x72, 0xc6, 0x9d, 0x2e, 0xf4, 0x98, 0x29, 0xf1, 0x03, 0x7f, 0x05, 0x0c, 0x5b, 0x92, 0x22, 0x98, 0x56, 0xcb, 0x12, 0xb4, 0x56, 0xcc, 0x09, ++ 0x52, 0x82, 0xa6, 0x26, 0x87, 0xea, 0x38, 0xc9, 0x77, 0x8a, 0xea, 0x49, 0x1d, 0xff, 0x06, 0x97, 0x11, 0xfb, 0xbe, 0x05, 0xe8, 0xcd, 0x9b, 0xf4, 0x4a, 0x8e, 0x71, 0x26, 0x19, 0x57, 0x3e, 0x12, ++ 0xea, 0xa7, 0xb2, 0x38, 0x29, 0xdc, 0x67, 0x26, 0xbf, 0xe3, 0x3d, 0xa1, 0x36, 0xb8, 0x1e, 0x15, 0x32, 0x51, 0x50, 0x8f, 0x62, 0x85, 0xba, 0x15, 0xb2, 0xc1, 0x23, 0x76, 0x77, 0xfe, 0x5b, 0x14, ++ 0xb4, 0xe3, 0x3f, 0x98, 0xc3, 0x26, 0xbc, 0x58, 0xb9, 0xd8, 0xe0, 0x75, 0xa2, 0x5b, 0x94, 0xc8, 0xa2, 0x32, 0x33, 0x02, 0x9d, 0xcc, 0x78, 0x6b, 0x13, 0x5c, 0x56, 0x16, 0x4b, 0xa3, 0xd1, 0x60, ++ 0xcb, 0xce, 0xa8, 0x54, 0xb7, 0x97, 0x1f, 0x9c, 0xd7, 0x3a, 0x38, 0x3a, 0xac, 0x05, 0x0a, 0x30, 0x2a, 0xd8, 0x3b, 0x3e, 0x3a, 0xb9, 0x02, 0x46, 0xad, 0x16, 0x0a, 0x32, 0x1d, 0x33, 0x0a, 0xcd, ++ 0xec, 0x7c, 0xa6, 0x64, 0x3d, 0x7e, 0xc0, 0x1f, 0x91, 0x69, 0x1f, 0x16, 0x32, 0x5b, 0xdf, 0x39, 0x69, 0x50, 0xb8, 0x8d, 0xaf, 0xe3, 0x69, 0xc6, 0x54, 0xb8, 0x52, 0x05, 0x5c, 0x97, 0x03, 0x62, ++ 0xc6, 0x13, 0x80, 0x46, 0x07, 0x57, 0xc6, 0x58, 0x90, 0xf4, 0xe5, 0x92, 0x22, 0xe4, 0xa4, 0x06, 0x0b, 0x26, 0xc0, 0xeb, 0xc1, 0x01, 0x97, 0x59, 0x0d, 0xe3, 0xc8, 0xf0, 0x95, 0x5d, 0x65, 0x4b, ++ 0x37, 0x1c, 0xcb, 0x90, 0xac, 0xa3, 0x71, 0xb2, 0x94, 0x47, 0x6c, 0x16, 0xa4, 0x59, 0x6a, 0x1d, 0xe8, 0x30, 0x9e, 0x2a, 0x36, 0x12, 0xc6, 0x9b, 0x71, 0x25, 0x31, 0x05, 0x01, 0xe0, 0xc0, 0x49, ++ 0xb8, 0x74, 0x40, 0xd9, 0xa6, 0xd0, 0xec, 0xb9, 0x99, 0xc9, 0xa0, 0x94, 0x2a, 0xa3, 0x40, 0xf6, 0x03, 0x65, 0xea, 0xfd, 0x46, 0x5f, 0xc6, 0x4a, 0x0c, 0x5f, 0x8f, 0x3f, 0x90, 0x03, 0x48, 0x94, ++ 0x15, 0x89, 0x9d, 0x59, 0xa5, 0x43, 0xd8, 0x20, 0x8c, 0x54, 0xa3, 0x16, 0x65, 0x29, 0xb5, 0x39, 0x22, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, ++ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, ++ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, ++ }, ++ .spki_len = 1219, ++ .spki = { ++ 0x30, 0x82, 0x04, 0xbf, 0x30, 0x0f, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0b, 0x05, 0x03, 0x03, 0x05, 0x00, 0x03, 0x82, 0x04, 0xaa, 0x00, 0x30, 0x82, 0x04, 0xa5, 0x03, 0x82, ++ 0x04, 0xa1, 0x00, 0xa0, 0xb7, 0x1f, 0x67, 0xc6, 0xce, 0xc0, 0xd3, 0x56, 0x86, 0xd5, 0x13, 0x42, 0x34, 0x32, 0xe5, 0x12, 0xac, 0x40, 0x44, 0x55, 0x7e, 0x86, 0x8a, 0x62, 0x48, 0x00, 0x10, 0x9a, ++ 0x33, 0x55, 0xf9, 0x8f, 0x15, 0x14, 0x44, 0xe2, 0x85, 0x2e, 0x27, 0xea, 0x6e, 0xdb, 0x19, 0x92, 0xca, 0xd3, 0x97, 0x3c, 0x3a, 0x6f, 0xf7, 0x9a, 0x5a, 0x04, 0x9a, 0x25, 0x9e, 0xb5, 0x41, 0x5a, ++ 0xa2, 0xa2, 0x62, 0x45, 0x6e, 0xc9, 0x49, 0x5b, 0xbb, 0x52, 0x00, 0xd8, 0xd3, 0x16, 0x3a, 0x5b, 0x10, 0x22, 0x62, 0x92, 0xec, 0xa0, 0x10, 0x21, 0x38, 0x9d, 0xa3, 0x78, 0x81, 0xe2, 0x76, 0x30, ++ 0x65, 0x50, 0xc6, 0xef, 0xb6, 0x44, 0x0e, 0xc5, 0x1a, 0x2f, 0x73, 0x48, 0x34, 0x9b, 0x85, 0x1c, 0xd4, 0xaa, 0x01, 0x75, 0xa0, 0x55, 0x02, 0x13, 0xc4, 0x79, 0x1d, 0x91, 0x01, 0x12, 0x20, 0x82, ++ 0x4b, 0x2b, 0x61, 0x65, 0x08, 0x13, 0xad, 0xfd, 0x2c, 0xb1, 0x05, 0x38, 0xbf, 0xab, 0x0a, 0x72, 0x6f, 0x81, 0x12, 0x9e, 0xd2, 0xc0, 0xf0, 0x6a, 0x16, 0xb7, 0x01, 0x09, 0x0b, 0xf0, 0x48, 0xc5, ++ 0xa4, 0x01, 0x26, 0xd5, 0x72, 0xfc, 0xd4, 0x7a, 0xa1, 0x21, 0x8f, 0xb0, 0x15, 0x47, 0xd1, 0x50, 0x79, 0x2d, 0x23, 0x16, 0xcb, 0x32, 0x0d, 0x51, 0x44, 0xba, 0x35, 0x08, 0xa1, 0xeb, 0xbb, 0x5a, ++ 0xc1, 0xc2, 0x29, 0x13, 0xe8, 0x29, 0x5f, 0xab, 0x59, 0xbf, 0x58, 0x37, 0xa7, 0x78, 0xcf, 0x28, 0x22, 0x7e, 0x07, 0xe1, 0x03, 0x2d, 0xab, 0x7d, 0x0e, 0x09, 0xa1, 0x5f, 0x13, 0x41, 0x48, 0xc1, ++ 0x20, 0x09, 0xda, 0x53, 0x6b, 0x22, 0xcc, 0x62, 0x47, 0x4e, 0x69, 0xcc, 0x15, 0x54, 0xc0, 0x81, 0x4d, 0x6c, 0xa0, 0xb7, 0x22, 0x59, 0x43, 0x83, 0xa9, 0xd0, 0xa2, 0xc7, 0x7f, 0xd3, 0x65, 0xa5, ++ 0x54, 0x42, 0x95, 0xfb, 0xb9, 0x73, 0xf9, 0x1e, 0xa5, 0x64, 0x90, 0xd6, 0xca, 0x68, 0x76, 0x49, 0x7b, 0x98, 0xb3, 0xcb, 0x12, 0x41, 0x7c, 0x25, 0x7b, 0x6d, 0x0f, 0x71, 0x83, 0xdb, 0xb6, 0x9e, ++ 0x33, 0x07, 0x5b, 0xeb, 0x01, 0x17, 0xb6, 0x91, 0x4c, 0x69, 0xba, 0x38, 0x34, 0x94, 0x22, 0xf2, 0xf4, 0x33, 0x64, 0x82, 0x2a, 0x25, 0x70, 0x95, 0x2d, 0xd5, 0x07, 0x7b, 0x90, 0x75, 0x5f, 0x15, ++ 0x74, 0x11, 0x5b, 0x8e, 0x22, 0x14, 0x27, 0x58, 0x59, 0x61, 0x91, 0x3a, 0x9b, 0xfa, 0x05, 0x02, 0xb5, 0xd7, 0x9a, 0xb7, 0x81, 0x17, 0x44, 0xe6, 0x56, 0x3c, 0x5b, 0x62, 0xc5, 0xcc, 0x4e, 0x93, ++ 0x23, 0x9a, 0x0a, 0x8c, 0xc6, 0x0f, 0xe8, 0x48, 0xf8, 0x4a, 0x95, 0xf5, 0x90, 0x25, 0x99, 0xb5, 0x4a, 0x06, 0x62, 0x93, 0xa2, 0x02, 0x1d, 0xa1, 0x96, 0x76, 0x6c, 0x17, 0xc7, 0xe8, 0x63, 0xaf, ++ 0x79, 0x0c, 0x27, 0x0b, 0x21, 0x6a, 0x25, 0x13, 0x8d, 0xda, 0x0c, 0x81, 0x26, 0xe0, 0x93, 0x77, 0x87, 0x98, 0x59, 0xdb, 0x35, 0x8f, 0x9b, 0x82, 0xb7, 0xc8, 0xa6, 0x79, 0x2a, 0xce, 0xe9, 0x2a, ++ 0x4c, 0xbd, 0xe3, 0xce, 0xdd, 0x45, 0x00, 0xac, 0xbc, 0x55, 0x5c, 0x28, 0x8e, 0xff, 0x97, 0x95, 0x26, 0x5b, 0x90, 0x05, 0x35, 0x1c, 0x52, 0xe2, 0x65, 0x35, 0x54, 0xab, 0xaa, 0xf8, 0x72, 0xdf, ++ 0x95, 0xca, 0x7f, 0x79, 0x59, 0x03, 0xf0, 0xb0, 0xa1, 0x82, 0xb1, 0x8a, 0xeb, 0x04, 0x75, 0xb2, 0x9f, 0x6e, 0x3a, 0xbf, 0x4c, 0x22, 0x50, 0xfe, 0x7b, 0x84, 0x2a, 0x73, 0x65, 0x50, 0x16, 0xa8, ++ 0xfc, 0x72, 0x9f, 0x39, 0x05, 0x07, 0xac, 0xa9, 0x36, 0x82, 0x5a, 0x98, 0xb3, 0xa3, 0x2e, 0x6b, 0x25, 0x54, 0xce, 0x95, 0x28, 0x94, 0x1a, 0x3b, 0xb8, 0xc9, 0x09, 0x96, 0x00, 0x8d, 0x74, 0xfb, ++ 0xcd, 0x02, 0x0a, 0x02, 0xe7, 0x06, 0xa6, 0xde, 0x7b, 0x02, 0xaf, 0x40, 0x4c, 0x10, 0xdb, 0x00, 0xfa, 0xec, 0x02, 0xd3, 0xea, 0xa6, 0xd9, 0x56, 0x1a, 0x15, 0x65, 0xa7, 0xb0, 0x5c, 0x63, 0x66, ++ 0xd0, 0x9d, 0xa7, 0xa5, 0x37, 0xf2, 0x0c, 0x7b, 0x28, 0x59, 0xa8, 0x3e, 0x02, 0x9e, 0x13, 0xa9, 0xbd, 0x28, 0x91, 0x57, 0xc5, 0xb7, 0x4c, 0x84, 0xea, 0xa3, 0x07, 0x75, 0x3d, 0x43, 0x12, 0x02, ++ 0xa3, 0xd9, 0xb6, 0x16, 0x22, 0x18, 0xbe, 0xc5, 0x34, 0x69, 0x45, 0xbf, 0xef, 0x55, 0xb6, 0x24, 0xc5, 0xc6, 0xe3, 0x73, 0x35, 0x9b, 0xb1, 0xc4, 0x79, 0x95, 0x2b, 0xba, 0xba, 0x4d, 0x65, 0x55, ++ 0xc2, 0x76, 0x57, 0x3e, 0x51, 0x52, 0xb5, 0x53, 0x90, 0x19, 0x99, 0xf6, 0x94, 0x02, 0xd1, 0x50, 0xbe, 0xf7, 0x9d, 0x74, 0xfb, 0x29, 0x53, 0x01, 0x8f, 0xf4, 0x86, 0x66, 0x74, 0x6a, 0xce, 0x60, ++ 0x78, 0x14, 0xa1, 0xfa, 0x33, 0x19, 0x57, 0x20, 0xf8, 0x38, 0x78, 0xd3, 0xb5, 0x75, 0xc7, 0x25, 0x74, 0x4a, 0x72, 0x07, 0x0d, 0xd0, 0x44, 0x01, 0x80, 0x42, 0xda, 0x25, 0x71, 0x4d, 0x17, 0x30, ++ 0x90, 0x32, 0x3a, 0x51, 0xe6, 0xc0, 0x63, 0xd2, 0x03, 0x88, 0x13, 0x80, 0x91, 0x27, 0x61, 0xfc, 0x34, 0x10, 0x83, 0x90, 0x95, 0xf2, 0x6c, 0x0e, 0x68, 0x7a, 0x00, 0x70, 0x54, 0x95, 0xe1, 0x71, ++ 0xb5, 0x71, 0x51, 0xac, 0xe0, 0x49, 0x8e, 0x30, 0xf1, 0x4c, 0xa9, 0xb0, 0x2f, 0x6e, 0x40, 0x83, 0x18, 0x54, 0xc2, 0xe0, 0xab, 0x1e, 0xcd, 0x0c, 0x21, 0xd8, 0xe4, 0xc7, 0xe6, 0x69, 0xcd, 0x72, ++ 0x82, 0x30, 0xb9, 0xd1, 0x1f, 0x72, 0xc2, 0x66, 0xe3, 0x44, 0x66, 0xf9, 0xc0, 0x15, 0x9e, 0xf4, 0x24, 0xf8, 0xf3, 0x1d, 0x95, 0xa5, 0x7b, 0xa0, 0xe2, 0x10, 0x54, 0x3c, 0x10, 0xc6, 0x50, 0x3f, ++ 0xb5, 0xc6, 0x3e, 0xd2, 0x3a, 0xa3, 0x6c, 0xd6, 0xa6, 0xf3, 0x78, 0x26, 0x1b, 0x0b, 0x1e, 0x79, 0x50, 0x9d, 0x8b, 0xeb, 0x36, 0xaa, 0x26, 0x3d, 0xc9, 0x15, 0x45, 0xe5, 0x33, 0x69, 0xdf, 0x26, ++ 0x83, 0x7f, 0x39, 0x4c, 0x56, 0x77, 0x7c, 0x95, 0xb6, 0x48, 0xbd, 0x1a, 0x72, 0x92, 0x1a, 0xbf, 0x49, 0x56, 0x3f, 0x99, 0xcb, 0x9d, 0x98, 0xea, 0xb5, 0xc6, 0x66, 0x66, 0xf6, 0xb1, 0x6f, 0x74, ++ 0x02, 0x24, 0x81, 0xfa, 0x21, 0x4e, 0x61, 0x76, 0x98, 0xd3, 0xbb, 0xd1, 0x3c, 0xb3, 0x08, 0x71, 0x3f, 0xdc, 0xc7, 0xcf, 0xd3, 0x97, 0xb9, 0xca, 0x39, 0xaf, 0xf4, 0xc7, 0x44, 0xd5, 0x71, 0x5d, ++ 0x58, 0x96, 0x6f, 0x2c, 0xf9, 0x70, 0x70, 0x15, 0xc8, 0xf3, 0x54, 0x3e, 0xd2, 0x86, 0xa3, 0xd8, 0xd5, 0xcb, 0xf6, 0x4a, 0xce, 0xdf, 0xc0, 0x29, 0x71, 0xa9, 0x10, 0x72, 0xc6, 0x9d, 0x2e, 0xf4, ++ 0x98, 0x29, 0xf1, 0x03, 0x7f, 0x05, 0x0c, 0x5b, 0x92, 0x22, 0x98, 0x56, 0xcb, 0x12, 0xb4, 0x56, 0xcc, 0x09, 0x52, 0x82, 0xa6, 0x26, 0x87, 0xea, 0x38, 0xc9, 0x77, 0x8a, 0xea, 0x49, 0x1d, 0xff, ++ 0x06, 0x97, 0x11, 0xfb, 0xbe, 0x05, 0xe8, 0xcd, 0x9b, 0xf4, 0x4a, 0x8e, 0x71, 0x26, 0x19, 0x57, 0x3e, 0x12, 0xea, 0xa7, 0xb2, 0x38, 0x29, 0xdc, 0x67, 0x26, 0xbf, 0xe3, 0x3d, 0xa1, 0x36, 0xb8, ++ 0x1e, 0x15, 0x32, 0x51, 0x50, 0x8f, 0x62, 0x85, 0xba, 0x15, 0xb2, 0xc1, 0x23, 0x76, 0x77, 0xfe, 0x5b, 0x14, 0xb4, 0xe3, 0x3f, 0x98, 0xc3, 0x26, 0xbc, 0x58, 0xb9, 0xd8, 0xe0, 0x75, 0xa2, 0x5b, ++ 0x94, 0xc8, 0xa2, 0x32, 0x33, 0x02, 0x9d, 0xcc, 0x78, 0x6b, 0x13, 0x5c, 0x56, 0x16, 0x4b, 0xa3, 0xd1, 0x60, 0xcb, 0xce, 0xa8, 0x54, 0xb7, 0x97, 0x1f, 0x9c, 0xd7, 0x3a, 0x38, 0x3a, 0xac, 0x05, ++ 0x0a, 0x30, 0x2a, 0xd8, 0x3b, 0x3e, 0x3a, 0xb9, 0x02, 0x46, 0xad, 0x16, 0x0a, 0x32, 0x1d, 0x33, 0x0a, 0xcd, 0xec, 0x7c, 0xa6, 0x64, 0x3d, 0x7e, 0xc0, 0x1f, 0x91, 0x69, 0x1f, 0x16, 0x32, 0x5b, ++ 0xdf, 0x39, 0x69, 0x50, 0xb8, 0x8d, 0xaf, 0xe3, 0x69, 0xc6, 0x54, 0xb8, 0x52, 0x05, 0x5c, 0x97, 0x03, 0x62, 0xc6, 0x13, 0x80, 0x46, 0x07, 0x57, 0xc6, 0x58, 0x90, 0xf4, 0xe5, 0x92, 0x22, 0xe4, ++ 0xa4, 0x06, 0x0b, 0x26, 0xc0, 0xeb, 0xc1, 0x01, 0x97, 0x59, 0x0d, 0xe3, 0xc8, 0xf0, 0x95, 0x5d, 0x65, 0x4b, 0x37, 0x1c, 0xcb, 0x90, 0xac, 0xa3, 0x71, 0xb2, 0x94, 0x47, 0x6c, 0x16, 0xa4, 0x59, ++ 0x6a, 0x1d, 0xe8, 0x30, 0x9e, 0x2a, 0x36, 0x12, 0xc6, 0x9b, 0x71, 0x25, 0x31, 0x05, 0x01, 0xe0, 0xc0, 0x49, 0xb8, 0x74, 0x40, 0xd9, 0xa6, 0xd0, 0xec, 0xb9, 0x99, 0xc9, 0xa0, 0x94, 0x2a, 0xa3, ++ 0x40, 0xf6, 0x03, 0x65, 0xea, 0xfd, 0x46, 0x5f, 0xc6, 0x4a, 0x0c, 0x5f, 0x8f, 0x3f, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9d, 0x59, 0xa5, 0x43, 0xd8, 0x20, 0x8c, 0x54, 0xa3, 0x16, 0x65, 0x29, ++ 0xb5, 0x39, 0x22, ++ }, ++ .secret_len = 32, ++ .secret = { ++ 0xed, 0x20, 0x14, 0x0c, 0x05, 0xd7, 0x8b, 0x15, 0xf2, 0xe4, 0x12, 0x67, 0x1a, 0x84, 0x15, 0x42, 0x17, 0xfd, 0x77, 0x61, 0x9a, 0x2c, 0x52, 0x2d, 0x3c, 0x3c, 0xb6, 0x88, 0xcb, 0x34, 0xc6, 0x8b, ++ }, ++ .cipher_len = 1088, ++ .cipher = { ++ 0xea, 0xdd, 0x5a, 0xda, 0x14, 0xda, 0x57, 0xf0, 0xae, 0xf3, 0x50, 0x5f, 0x1c, 0xaa, 0x64, 0x85, 0xd4, 0x23, 0x8d, 0x99, 0x9a, 0x3e, 0xf4, 0xb0, 0xa5, 0x9a, 0x1c, 0xdb, 0xe0, 0xa2, 0x7e, 0x47, ++ 0x85, 0x47, 0xa3, 0xa9, 0x9d, 0x2a, 0xb0, 0x9a, 0xc7, 0xd7, 0xc8, 0xf5, 0xae, 0x3d, 0x64, 0x32, 0x04, 0x5c, 0xba, 0x3f, 0xa7, 0x78, 0x34, 0x58, 0x92, 0x54, 0x2b, 0xd8, 0x1c, 0x05, 0xbe, 0xfc, ++ 0xd2, 0xe5, 0xcc, 0x9a, 0x57, 0x9b, 0xef, 0xb7, 0xc5, 0x8d, 0x02, 0xfb, 0x94, 0xf3, 0x33, 0x92, 0xfe, 0x17, 0xf4, 0xeb, 0xa2, 0xcb, 0x51, 0x0e, 0xc7, 0x4c, 0xc9, 0xd1, 0xd8, 0xa8, 0x7c, 0x10, ++ 0x66, 0xa4, 0x86, 0x9a, 0x39, 0x83, 0xe6, 0x64, 0xbf, 0xe9, 0xde, 0xa5, 0xae, 0x4f, 0xdf, 0x31, 0x0c, 0x8f, 0x59, 0x81, 0x5a, 0x67, 0x8f, 0xa3, 0x25, 0xf3, 0x69, 0xaf, 0x84, 0xff, 0xeb, 0xc1, ++ 0xd1, 0x50, 0x43, 0x1f, 0xe3, 0xbd, 0x27, 0x34, 0xf6, 0x36, 0xcf, 0x65, 0x8e, 0x6c, 0x1a, 0x6a, 0x6e, 0x2c, 0xbe, 0x07, 0x1f, 0x9a, 0x7c, 0x26, 0x11, 0x9a, 0xd1, 0x05, 0x09, 0x8e, 0xda, 0x62, ++ 0x2c, 0xab, 0x8e, 0x17, 0x67, 0x62, 0x10, 0x98, 0x77, 0xd9, 0xae, 0x9d, 0x67, 0x29, 0xd4, 0x4a, 0x58, 0xe7, 0x07, 0xd6, 0xb8, 0xad, 0x6e, 0x69, 0x6a, 0x33, 0xc6, 0x72, 0xda, 0x9d, 0x08, 0xda, ++ 0x2a, 0x7f, 0x9e, 0x3b, 0xf0, 0x22, 0x18, 0x23, 0x87, 0x22, 0xa4, 0x6b, 0x31, 0xd4, 0x9d, 0xaf, 0xf9, 0xaf, 0x00, 0xa6, 0x36, 0x3c, 0x3a, 0x42, 0x3b, 0x2e, 0x87, 0x3d, 0xef, 0xdd, 0xbc, 0xd9, ++ 0x69, 0xb7, 0x5a, 0x81, 0x05, 0x3d, 0x9a, 0x97, 0xc0, 0x6d, 0xe2, 0xbf, 0xe3, 0xd0, 0xcf, 0xd3, 0xd3, 0xc7, 0x79, 0x83, 0xb1, 0x8d, 0xbd, 0xe2, 0x3c, 0x07, 0x28, 0x60, 0x4a, 0x71, 0x43, 0x5a, ++ 0xd4, 0x0d, 0xf1, 0x57, 0x90, 0x96, 0xdd, 0xbe, 0x02, 0xe4, 0x61, 0x22, 0x10, 0xca, 0xa0, 0x34, 0xdc, 0xef, 0xb8, 0xb4, 0xd7, 0xb5, 0xe6, 0xd2, 0xeb, 0xa3, 0x7a, 0x79, 0xfb, 0x61, 0xf3, 0x4b, ++ 0x5a, 0xf7, 0xd9, 0xb2, 0x7b, 0x13, 0xe4, 0x93, 0x62, 0x22, 0x41, 0x12, 0x49, 0xb7, 0xfb, 0xb6, 0x9e, 0x73, 0x46, 0x1d, 0xaf, 0x4a, 0xa6, 0xf3, 0xe2, 0xc7, 0x39, 0x44, 0xf1, 0x0c, 0xe6, 0x7c, ++ 0x86, 0xfe, 0xd2, 0x60, 0xbd, 0xa7, 0xb4, 0x0d, 0xb3, 0x9b, 0x1d, 0xe3, 0xc7, 0xd8, 0xf0, 0x9a, 0x77, 0xf3, 0xc8, 0x4b, 0xc6, 0x29, 0x31, 0xd2, 0x28, 0xb2, 0x4a, 0x57, 0x4a, 0xc3, 0xf4, 0xeb, ++ 0x74, 0x5c, 0xff, 0x7e, 0x03, 0x1a, 0x3f, 0xb2, 0xa0, 0x85, 0x95, 0xc1, 0x53, 0x70, 0xa3, 0xc8, 0x2d, 0xb7, 0xd9, 0xf4, 0x1b, 0xb1, 0xd8, 0xec, 0xc4, 0x29, 0xcf, 0xa3, 0xa6, 0x58, 0x33, 0x01, ++ 0x6a, 0xb6, 0xea, 0x60, 0xc9, 0x39, 0x0c, 0xfa, 0x1b, 0x65, 0xcc, 0xea, 0xe5, 0x50, 0x94, 0x07, 0x95, 0x38, 0x6e, 0xd2, 0x41, 0x33, 0xfb, 0xae, 0x8b, 0x30, 0x17, 0x50, 0x2a, 0xf3, 0xcf, 0xe9, ++ 0x51, 0xd7, 0x81, 0xd3, 0x6c, 0xfe, 0xff, 0x85, 0xbf, 0xdf, 0x5a, 0xf0, 0x40, 0xbe, 0x40, 0x65, 0x68, 0x1b, 0x3b, 0x0a, 0x63, 0xc2, 0x74, 0x7f, 0x08, 0x08, 0xcf, 0x3d, 0xa7, 0x25, 0x16, 0x9d, ++ 0xde, 0xd1, 0x00, 0x3d, 0xa6, 0xcd, 0x5d, 0xe4, 0xcb, 0x04, 0x19, 0x42, 0x93, 0x8d, 0x0a, 0x7f, 0x88, 0x02, 0xd4, 0x8f, 0x2e, 0x3c, 0x6e, 0xeb, 0x45, 0xcd, 0x90, 0xaf, 0x6f, 0xc9, 0xf4, 0x50, ++ 0x7e, 0x9f, 0x83, 0x80, 0xac, 0x33, 0xca, 0xca, 0x77, 0x51, 0x48, 0x7f, 0x65, 0x50, 0x04, 0x41, 0xd9, 0x20, 0xb9, 0x48, 0x80, 0xa4, 0x97, 0xd0, 0x1c, 0x08, 0x02, 0xbb, 0x08, 0xd7, 0x4c, 0x5d, ++ 0x4c, 0x6b, 0xf2, 0xd8, 0x65, 0xee, 0x58, 0x22, 0xb3, 0x37, 0x5c, 0x75, 0x5d, 0x1a, 0x5e, 0x3d, 0x32, 0x44, 0xc3, 0x20, 0x51, 0x0a, 0x1e, 0x30, 0x35, 0x77, 0x02, 0xcd, 0x42, 0x52, 0x07, 0x2c, ++ 0xf8, 0x64, 0x37, 0xf7, 0xa9, 0xde, 0x55, 0x61, 0xc7, 0xe5, 0x9b, 0x94, 0xb9, 0x58, 0x41, 0x00, 0x13, 0x1a, 0xc3, 0x99, 0xf4, 0xc1, 0xeb, 0x19, 0xfb, 0x4b, 0xdf, 0x65, 0xe6, 0x27, 0x85, 0xe9, ++ 0x7c, 0x19, 0x4b, 0x87, 0x64, 0xcc, 0xf3, 0x2f, 0xd0, 0x5d, 0x80, 0x4c, 0x2e, 0x43, 0x9d, 0xda, 0x2a, 0x10, 0x92, 0x74, 0xfb, 0xff, 0xa8, 0x1a, 0x83, 0x7c, 0x51, 0xb2, 0x6d, 0x15, 0x4f, 0x97, ++ 0x4b, 0x88, 0x2a, 0x5b, 0x17, 0x4b, 0x30, 0x8f, 0xc4, 0x87, 0x68, 0xd2, 0x22, 0x92, 0x25, 0x32, 0xb1, 0x83, 0xab, 0xdf, 0x6f, 0xbb, 0x0b, 0xc7, 0x49, 0x27, 0x66, 0x97, 0x4d, 0x32, 0x1e, 0xe6, ++ 0xfb, 0x7c, 0x5f, 0x7b, 0x3e, 0xea, 0x23, 0x78, 0xdc, 0x6d, 0x6b, 0xb4, 0x80, 0x19, 0x25, 0x0b, 0x8d, 0x8d, 0x8d, 0xed, 0xb5, 0x22, 0x42, 0x1a, 0xee, 0xdb, 0x31, 0x86, 0x76, 0x98, 0x2a, 0x80, ++ 0xe7, 0x96, 0x1e, 0xc4, 0x0e, 0x6d, 0x7f, 0x33, 0x39, 0x69, 0x42, 0x55, 0xba, 0xff, 0x51, 0xbe, 0x3a, 0x7e, 0xa7, 0xd8, 0x79, 0x3a, 0x10, 0x9b, 0xe3, 0xae, 0x44, 0x23, 0xbf, 0x08, 0x2e, 0x20, ++ 0x6a, 0x57, 0x3b, 0x4f, 0x0f, 0x93, 0xfc, 0x16, 0xdd, 0xe8, 0x1b, 0xd5, 0xdc, 0x58, 0x3f, 0x52, 0x8c, 0x08, 0xa0, 0xa9, 0xab, 0x8e, 0x6c, 0xd5, 0x24, 0xe2, 0x97, 0xc9, 0xcf, 0x0f, 0x43, 0xc3, ++ 0x44, 0x91, 0x38, 0x30, 0xec, 0xb1, 0x6f, 0x91, 0x44, 0x14, 0x77, 0xba, 0x78, 0x2e, 0xdd, 0x4e, 0x73, 0xe7, 0x32, 0x97, 0x9d, 0x3a, 0x66, 0x4e, 0xb9, 0x9e, 0xa5, 0xd2, 0x4b, 0x6c, 0x84, 0xaa, ++ 0x69, 0xf3, 0x77, 0xcb, 0x0c, 0xad, 0x5a, 0xe4, 0xe6, 0x41, 0xe3, 0x8b, 0x19, 0x7a, 0x09, 0x94, 0xd5, 0x8b, 0x23, 0x87, 0xe9, 0x17, 0x60, 0xe9, 0xb6, 0xfe, 0xbc, 0xb4, 0x45, 0xcf, 0x85, 0xbb, ++ 0xa2, 0x4a, 0x94, 0xcd, 0xa7, 0x5e, 0x33, 0x86, 0x74, 0x42, 0x82, 0x49, 0xfe, 0x6d, 0xe4, 0x69, 0x26, 0x01, 0xd1, 0xea, 0xe0, 0xea, 0x02, 0x1d, 0x9b, 0xc8, 0x07, 0x7b, 0xe8, 0x66, 0x5d, 0x07, ++ 0x37, 0x74, 0x8f, 0xa3, 0x0f, 0xcf, 0x80, 0xf7, 0xe4, 0x82, 0x58, 0x46, 0x74, 0xf6, 0x33, 0xa5, 0x00, 0x6a, 0x53, 0x82, 0x67, 0x62, 0x7f, 0xd9, 0x18, 0x54, 0xe0, 0x87, 0x12, 0x68, 0xa6, 0xb0, ++ 0xb0, 0x5d, 0xd5, 0x14, 0x95, 0x13, 0x5d, 0xef, 0xb9, 0x37, 0x6e, 0x9b, 0x84, 0x1b, 0x64, 0xe5, 0xdb, 0xf4, 0x3c, 0xe6, 0xc7, 0x4b, 0xcf, 0x3a, 0xe1, 0xfc, 0x42, 0x7e, 0x81, 0x0b, 0x7c, 0xbf, ++ 0x69, 0x57, 0xdb, 0xf9, 0x04, 0x69, 0x0e, 0x87, 0x84, 0x25, 0x43, 0x89, 0x7d, 0xe7, 0x8f, 0x13, 0xd0, 0x8d, 0x92, 0xeb, 0xd2, 0x7f, 0xb2, 0xcf, 0xcc, 0x0c, 0x76, 0x54, 0x30, 0x58, 0x90, 0x57, ++ 0xb1, 0x6b, 0x15, 0xf2, 0x07, 0xca, 0x1e, 0x6f, 0x08, 0xd5, 0x26, 0x16, 0xdd, 0x57, 0xad, 0x43, 0xef, 0xea, 0x6f, 0xdd, 0xaa, 0xea, 0x18, 0xd3, 0x37, 0x31, 0xfa, 0xc7, 0xec, 0xaa, 0xe9, 0x50, ++ 0xe1, 0xdf, 0x3c, 0x5a, 0x4e, 0x6f, 0xcb, 0x22, 0x3d, 0xf5, 0xe8, 0x6b, 0x48, 0x7f, 0xd7, 0x09, 0x2d, 0x08, 0x22, 0xef, 0xfa, 0xec, 0x82, 0xc4, 0xbe, 0xc1, 0x0c, 0x60, 0x0f, 0xdb, 0x90, 0xe7, ++ 0x74, 0x82, 0x91, 0x1b, 0x15, 0x95, 0x27, 0x77, 0x38, 0x84, 0x14, 0x09, 0xd0, 0xf8, 0xf1, 0x13, 0x19, 0x1d, 0x47, 0xf5, 0xe5, 0x6c, 0x11, 0x5a, 0x05, 0xde, 0xa7, 0x59, 0xaa, 0x6f, 0xb1, 0xd0, ++ 0x47, 0xf9, 0xfc, 0xa4, 0xed, 0x51, 0x9e, 0xa5, 0xd2, 0x1f, 0xe3, 0xba, 0x5b, 0x94, 0x34, 0xfe, 0xa1, 0x28, 0x3d, 0xfa, 0xd6, 0x3d, 0x01, 0x58, 0x9b, 0x0e, 0xb6, 0x1f, 0x24, 0x43, 0x51, 0xd0, ++ 0x33, 0x41, 0xdc, 0xd4, 0xdf, 0x62, 0x26, 0x5a, 0xfc, 0xae, 0xc6, 0x67, 0x6a, 0x87, 0x7d, 0x5c, 0xac, 0xb3, 0x59, 0xeb, 0xb5, 0x31, 0x96, 0x10, 0xdd, 0x44, 0x7d, 0xa9, 0x7e, 0x95, 0x0b, 0x0c, ++ }, ++ }, ++ { ++ .name = "Kyber Round 2, 1024 KAT 0 (PKCS#8/SPKI)", ++ .version = 0, ++ .keyform = 0, ++ .pk_len = 0, ++ .sk_len = 0, ++ .pkcs8_len = 4849, ++ .pkcs8 = { ++ 0x30, 0x82, 0x12, 0xed, 0x02, 0x01, 0x00, 0x30, 0x0f, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0b, 0x05, 0x04, 0x04, 0x05, 0x00, 0x04, 0x82, 0x12, 0xd5, 0x30, 0x82, 0x12, 0xd1, ++ 0x02, 0x01, 0x00, 0x03, 0x82, 0x0c, 0x61, 0x00, 0x07, 0x63, 0x8f, 0xb6, 0x98, 0x68, 0xf3, 0xd3, 0x20, 0xe5, 0x86, 0x2b, 0xd9, 0x69, 0x33, 0xfe, 0xb3, 0x11, 0xb3, 0x62, 0x09, 0x3c, 0x9b, 0x5d, ++ 0x50, 0x17, 0x0b, 0xce, 0xd4, 0x3f, 0x1b, 0x53, 0x6d, 0x9a, 0x20, 0x4b, 0xb1, 0xf2, 0x26, 0x95, 0x95, 0x0b, 0xa1, 0xf2, 0xa9, 0xe8, 0xeb, 0x82, 0x8b, 0x28, 0x44, 0x88, 0x76, 0x0b, 0x3f, 0xc8, ++ 0x4f, 0xab, 0xa0, 0x42, 0x75, 0xd5, 0x62, 0x8e, 0x39, 0xc5, 0xb2, 0x47, 0x13, 0x74, 0x28, 0x3c, 0x50, 0x32, 0x99, 0xc0, 0xab, 0x49, 0xb6, 0x6b, 0x8b, 0xbb, 0x56, 0xa4, 0x18, 0x66, 0x24, 0xf9, ++ 0x19, 0xa2, 0xba, 0x59, 0xbb, 0x08, 0xd8, 0x55, 0x18, 0x80, 0xc2, 0xbe, 0xfc, 0x4f, 0x87, 0xf2, 0x5f, 0x59, 0xab, 0x58, 0x7a, 0x79, 0xc3, 0x27, 0xd7, 0x92, 0xd5, 0x4c, 0x97, 0x4a, 0x69, 0x26, ++ 0x2f, 0xf8, 0xa7, 0x89, 0x38, 0x28, 0x9e, 0x9a, 0x87, 0xb6, 0x88, 0xb0, 0x83, 0xe0, 0x59, 0x5f, 0xe2, 0x18, 0xb6, 0xbb, 0x15, 0x05, 0x94, 0x1c, 0xe2, 0xe8, 0x1a, 0x5a, 0x64, 0xc5, 0xaa, 0xc6, ++ 0x04, 0x17, 0x25, 0x69, 0x85, 0x34, 0x9e, 0xe4, 0x7a, 0x52, 0x42, 0x0a, 0x5f, 0x97, 0x47, 0x7b, 0x72, 0x36, 0xac, 0x76, 0xbc, 0x70, 0xe8, 0x28, 0x87, 0x29, 0x28, 0x7e, 0xe3, 0xe3, 0x4a, 0x3d, ++ 0xbc, 0x36, 0x83, 0xc0, 0xb7, 0xb1, 0x00, 0x29, 0xfc, 0x20, 0x34, 0x18, 0x53, 0x7e, 0x74, 0x66, 0xba, 0x63, 0x85, 0xa8, 0xff, 0x30, 0x1e, 0xe1, 0x27, 0x08, 0xf8, 0x2a, 0xaa, 0x1e, 0x38, 0x0f, ++ 0xc7, 0xa8, 0x8f, 0x8f, 0x20, 0x5a, 0xb7, 0xe8, 0x8d, 0x7e, 0x95, 0x95, 0x2a, 0x55, 0xba, 0x20, 0xd0, 0x9b, 0x79, 0xa4, 0x71, 0x41, 0xd6, 0x2b, 0xf6, 0xeb, 0x7d, 0xd3, 0x07, 0xb0, 0x8e, 0xca, ++ 0x13, 0xa5, 0xbc, 0x5f, 0x6b, 0x68, 0x58, 0x1c, 0x68, 0x65, 0xb2, 0x7b, 0xbc, 0xdd, 0xab, 0x14, 0x2f, 0x4b, 0x2c, 0xbf, 0xf4, 0x88, 0xc8, 0xa2, 0x27, 0x05, 0xfa, 0xa9, 0x8a, 0x2b, 0x9e, 0xea, ++ 0x35, 0x30, 0xc7, 0x66, 0x62, 0x33, 0x5c, 0xc7, 0xea, 0x3a, 0x00, 0x77, 0x77, 0x25, 0xeb, 0xcc, 0xcd, 0x2a, 0x46, 0x36, 0xb2, 0xd9, 0x12, 0x2f, 0xf3, 0xab, 0x77, 0x12, 0x3c, 0xe0, 0x88, 0x3c, ++ 0x19, 0x11, 0x11, 0x5e, 0x50, 0xc9, 0xe8, 0xa9, 0x41, 0x94, 0xe4, 0x8d, 0xd0, 0xd0, 0x9c, 0xff, 0xb3, 0xad, 0xcd, 0x2c, 0x1e, 0x92, 0x43, 0x09, 0x03, 0xd0, 0x7a, 0xdb, 0xf0, 0x05, 0x32, 0x03, ++ 0x15, 0x75, 0xaa, 0x7f, 0x9e, 0x7b, 0x5a, 0x1f, 0x33, 0x62, 0xde, 0xc9, 0x36, 0xd4, 0x04, 0x3c, 0x05, 0xf2, 0x47, 0x6c, 0x07, 0x57, 0x8b, 0xc9, 0xcb, 0xaf, 0x2a, 0xb4, 0xe3, 0x82, 0x72, 0x7a, ++ 0xd4, 0x16, 0x86, 0xa9, 0x6b, 0x25, 0x48, 0x82, 0x0b, 0xb0, 0x3b, 0x32, 0xf1, 0x1b, 0x28, 0x11, 0xad, 0x62, 0xf4, 0x89, 0xe9, 0x51, 0x63, 0x2a, 0xba, 0x0d, 0x1d, 0xf8, 0x96, 0x80, 0xcc, 0x8a, ++ 0x8b, 0x53, 0xb4, 0x81, 0xd9, 0x2a, 0x68, 0xd7, 0x0b, 0x4e, 0xa1, 0xc3, 0xa6, 0xa5, 0x61, 0xc0, 0x69, 0x28, 0x82, 0xb5, 0xca, 0x8c, 0xc9, 0x42, 0xa8, 0xd4, 0x95, 0xaf, 0xcb, 0x06, 0xde, 0x89, ++ 0x49, 0x8f, 0xb9, 0x35, 0xb7, 0x75, 0x90, 0x8f, 0xe7, 0xa0, 0x3e, 0x32, 0x4d, 0x54, 0xcc, 0x19, 0xd4, 0xe1, 0xaa, 0xbd, 0x35, 0x93, 0xb3, 0x8b, 0x19, 0xee, 0x13, 0x88, 0xfe, 0x49, 0x2b, 0x43, ++ 0x12, 0x7e, 0x5a, 0x50, 0x42, 0x53, 0x78, 0x6a, 0x0d, 0x69, 0xad, 0x32, 0x60, 0x1c, 0x28, 0xe2, 0xc8, 0x85, 0x04, 0xa5, 0xba, 0x59, 0x97, 0x06, 0x02, 0x3a, 0x61, 0x36, 0x3e, 0x17, 0xc6, 0xb9, ++ 0xbb, 0x59, 0xbd, 0xc6, 0x97, 0x45, 0x2c, 0xd0, 0x59, 0x45, 0x19, 0x83, 0xd7, 0x38, 0xca, 0x3f, 0xd0, 0x34, 0xe3, 0xf5, 0x98, 0x88, 0x54, 0xca, 0x05, 0x03, 0x1d, 0xb0, 0x96, 0x11, 0x49, 0x89, ++ 0x88, 0x19, 0x7c, 0x6b, 0x30, 0xd2, 0x58, 0xdf, 0xe2, 0x62, 0x65, 0x54, 0x1c, 0x89, 0xa4, 0xb3, 0x1d, 0x68, 0x64, 0xe9, 0x38, 0x9b, 0x03, 0xcb, 0x74, 0xf7, 0xec, 0x43, 0x23, 0xfb, 0x94, 0x21, ++ 0xa4, 0xb9, 0x79, 0x0a, 0x26, 0xd1, 0x7b, 0x03, 0x98, 0xa2, 0x67, 0x67, 0x35, 0x09, 0x09, 0xf8, 0x4d, 0x57, 0xb6, 0x69, 0x4d, 0xf8, 0x30, 0x66, 0x4c, 0xa8, 0xb3, 0xc3, 0xc0, 0x3e, 0xd2, 0xae, ++ 0x67, 0xb8, 0x90, 0x06, 0x86, 0x8a, 0x68, 0x52, 0x7c, 0xcd, 0x66, 0x64, 0x59, 0xab, 0x7f, 0x05, 0x66, 0x71, 0x00, 0x0c, 0x61, 0x64, 0xd3, 0xa7, 0xf2, 0x66, 0xa1, 0x4d, 0x97, 0xcb, 0xd7, 0x00, ++ 0x4d, 0x6c, 0x92, 0xca, 0xca, 0x77, 0x0b, 0x84, 0x4a, 0x4f, 0xa9, 0xb1, 0x82, 0xe7, 0xb1, 0x8c, 0xa8, 0x85, 0x08, 0x2a, 0xc5, 0x64, 0x6f, 0xcb, 0x4a, 0x14, 0xe1, 0x68, 0x5f, 0xeb, 0x0c, 0x9c, ++ 0xe3, 0x37, 0x2a, 0xb9, 0x53, 0x65, 0xc0, 0x4f, 0xd8, 0x30, 0x84, 0xf8, 0x0a, 0x23, 0xff, 0x10, 0xa0, 0x5b, 0xf1, 0x5f, 0x7f, 0xa5, 0xac, 0xc6, 0xc0, 0xcb, 0x46, 0x2c, 0x33, 0xca, 0x52, 0x4f, ++ 0xa6, 0xb8, 0xbb, 0x35, 0x90, 0x43, 0xba, 0x68, 0x60, 0x9e, 0xaa, 0x25, 0x36, 0xe8, 0x1d, 0x08, 0x46, 0x3b, 0x19, 0x65, 0x3b, 0x54, 0x35, 0xba, 0x94, 0x6c, 0x9a, 0xdd, 0xeb, 0x20, 0x2b, 0x04, ++ 0xb0, 0x31, 0xcc, 0x96, 0x0d, 0xcc, 0x12, 0xe4, 0x51, 0x8d, 0x42, 0x8b, 0x32, 0xb2, 0x57, 0xa4, 0xfc, 0x73, 0x13, 0xd3, 0xa7, 0x98, 0x0d, 0x80, 0x08, 0x2e, 0x93, 0x4f, 0x9d, 0x95, 0xc3, 0x2b, ++ 0x0a, 0x01, 0x91, 0xa2, 0x36, 0x04, 0x38, 0x4d, 0xd9, 0xe0, 0x79, 0xbb, 0xba, 0xa2, 0x66, 0xd1, 0x4c, 0x3f, 0x75, 0x6b, 0x9f, 0x21, 0x33, 0x10, 0x74, 0x33, 0xa4, 0xe8, 0x3f, 0xa7, 0x18, 0x72, ++ 0x82, 0xa8, 0x09, 0x20, 0x3a, 0x4f, 0xaf, 0x84, 0x18, 0x51, 0x83, 0x3d, 0x12, 0x1a, 0xc3, 0x83, 0x84, 0x3a, 0x5e, 0x55, 0xbc, 0x23, 0x81, 0x42, 0x5e, 0x16, 0xc7, 0xdb, 0x4c, 0xc9, 0xab, 0x5c, ++ 0x1b, 0x0d, 0x91, 0xa4, 0x7e, 0x2b, 0x8d, 0xe0, 0xe5, 0x82, 0xc8, 0x6b, 0x6b, 0x0d, 0x90, 0x7b, 0xb3, 0x60, 0xb9, 0x7f, 0x40, 0xab, 0x5d, 0x03, 0x8f, 0x6b, 0x75, 0xc8, 0x14, 0xb2, 0x7d, 0x9b, ++ 0x96, 0x8d, 0x41, 0x98, 0x32, 0xbc, 0x8c, 0x2b, 0xee, 0x60, 0x5e, 0xf6, 0xe5, 0x05, 0x9d, 0x33, 0x10, 0x0d, 0x90, 0x48, 0x5d, 0x37, 0x84, 0x50, 0x01, 0x42, 0x21, 0x73, 0x6c, 0x07, 0x40, 0x7c, ++ 0xac, 0x26, 0x04, 0x08, 0xaa, 0x64, 0x92, 0x66, 0x19, 0x78, 0x8b, 0x86, 0x01, 0xc2, 0xa7, 0x52, 0xd1, 0xa6, 0xcb, 0xf8, 0x20, 0xd7, 0xc7, 0xa0, 0x47, 0x16, 0x20, 0x32, 0x25, 0xb3, 0x89, 0x5b, ++ 0x93, 0x42, 0xd1, 0x47, 0xa8, 0x18, 0x5c, 0xfc, 0x1b, 0xb6, 0x5b, 0xa0, 0x6b, 0x41, 0x42, 0x33, 0x99, 0x03, 0xc0, 0xac, 0x46, 0x51, 0x38, 0x5b, 0x45, 0xd9, 0x8a, 0x8b, 0x19, 0xd2, 0x8c, 0xd6, ++ 0xba, 0xb0, 0x88, 0x78, 0x7f, 0x7e, 0xe1, 0xb1, 0x24, 0x61, 0x76, 0x6b, 0x43, 0xcb, 0xcc, 0xb9, 0x64, 0x34, 0x42, 0x7d, 0x93, 0xc0, 0x65, 0x55, 0x06, 0x88, 0xf6, 0x94, 0x8e, 0xd1, 0xb5, 0x47, ++ 0x5a, 0x42, 0x5f, 0x1b, 0x85, 0x20, 0x9d, 0x06, 0x1c, 0x08, 0xb5, 0x6c, 0x1c, 0xc0, 0x69, 0xf6, 0xc0, 0xa7, 0xc6, 0xf2, 0x93, 0x58, 0xca, 0xb9, 0x11, 0x08, 0x77, 0x32, 0xa6, 0x49, 0xd2, 0x7c, ++ 0x9b, 0x98, 0xf9, 0xa4, 0x88, 0x79, 0x38, 0x7d, 0x9b, 0x00, 0xc2, 0x59, 0x59, 0xa7, 0x16, 0x54, 0xd6, 0xf6, 0xa9, 0x46, 0x16, 0x45, 0x13, 0xe4, 0x7a, 0x75, 0xd0, 0x05, 0x98, 0x6c, 0x23, 0x63, ++ 0xc0, 0x9f, 0x6b, 0x53, 0x7e, 0xca, 0x78, 0xb9, 0x30, 0x3a, 0x5f, 0xa4, 0x57, 0x60, 0x8a, 0x58, 0x6a, 0x65, 0x3a, 0x34, 0x7d, 0xb0, 0x4d, 0xfc, 0xc1, 0x91, 0x75, 0xb3, 0xa3, 0x01, 0x17, 0x25, ++ 0x36, 0x06, 0x2a, 0x65, 0x8a, 0x95, 0x27, 0x75, 0x70, 0xc8, 0x85, 0x2c, 0xa8, 0x97, 0x3f, 0x4a, 0xe1, 0x23, 0xa3, 0x34, 0x04, 0x7d, 0xd7, 0x11, 0xc8, 0x92, 0x7a, 0x63, 0x4a, 0x03, 0x38, 0x8a, ++ 0x52, 0x7b, 0x03, 0x4b, 0xf7, 0xa8, 0x17, 0x0f, 0xa7, 0x02, 0xc1, 0xf7, 0xc2, 0x3e, 0xc3, 0x2d, 0x18, 0xa2, 0x37, 0x48, 0x90, 0xbe, 0x9c, 0x78, 0x7a, 0x94, 0x09, 0xc8, 0x2d, 0x19, 0x2c, 0x4b, ++ 0xb7, 0x05, 0xa2, 0xf9, 0x96, 0xce, 0x40, 0x5d, 0x85, 0xa4, 0xc1, 0xa1, 0xab, 0x9b, 0x6a, 0xeb, 0x49, 0xcc, 0xe1, 0xc2, 0xf8, 0xa9, 0x7c, 0x35, 0x16, 0xc7, 0x2a, 0x00, 0xa4, 0x62, 0x63, 0xba, ++ 0xa6, 0x96, 0xbf, 0x25, 0x72, 0x77, 0x19, 0xc3, 0x21, 0x64, 0x23, 0x61, 0x8f, 0xf3, 0x33, 0x80, 0x93, 0x4a, 0x6c, 0x10, 0x54, 0x5c, 0x4c, 0x5c, 0x51, 0x55, 0xb1, 0x24, 0x86, 0x18, 0x1f, 0xc7, ++ 0xa2, 0x31, 0x98, 0x73, 0x97, 0x8b, 0x6a, 0x2a, 0x67, 0x49, 0x0f, 0x82, 0x56, 0xbd, 0x21, 0x96, 0xfe, 0x17, 0x92, 0xa4, 0xc0, 0x00, 0x77, 0xb8, 0x12, 0xea, 0xe8, 0xbe, 0xd3, 0x57, 0x24, 0x99, ++ 0x68, 0x4a, 0xb3, 0x37, 0x18, 0x76, 0x76, 0x1e, 0x45, 0x0c, 0x9f, 0x9d, 0x27, 0x68, 0xa3, 0x68, 0x06, 0xd7, 0xab, 0x20, 0x46, 0xc9, 0x1f, 0x17, 0x59, 0x9e, 0x9a, 0xc5, 0x92, 0x99, 0x08, 0x08, ++ 0xdc, 0xd7, 0xb4, 0xd0, 0x91, 0x90, 0x72, 0xf1, 0x4e, 0xc3, 0x61, 0x77, 0x3b, 0x72, 0x52, 0x44, 0x4c, 0x32, 0x3c, 0x30, 0x83, 0x26, 0xf4, 0xa3, 0x0f, 0x86, 0x80, 0xd2, 0xf7, 0x48, 0xf5, 0x6a, ++ 0x13, 0x2b, 0x82, 0x67, 0x4e, 0xd0, 0x18, 0x46, 0x20, 0xb8, 0x2a, 0xd2, 0xcb, 0x18, 0x2c, 0x97, 0xb4, 0x81, 0x62, 0x66, 0x47, 0x49, 0x12, 0x90, 0xa0, 0x11, 0xcc, 0x73, 0x82, 0x86, 0x85, 0xa8, ++ 0xc3, 0x67, 0xa5, 0xb9, 0xcf, 0x8d, 0x62, 0x1b, 0x0d, 0x5c, 0x1e, 0xff, 0x03, 0x17, 0x27, 0x58, 0xbd, 0x00, 0x49, 0x78, 0xc2, 0x51, 0xcd, 0x51, 0x34, 0x22, 0x28, 0x98, 0x9c, 0xae, 0x63, 0x32, ++ 0xac, 0x48, 0x64, 0x37, 0xcb, 0x5c, 0x57, 0xd4, 0x30, 0x74, 0x62, 0x86, 0x52, 0x53, 0xbe, 0x21, 0x7b, 0x35, 0x15, 0xc7, 0x3d, 0xf4, 0x05, 0xb7, 0xf2, 0x82, 0x17, 0xad, 0x0b, 0x8c, 0xf6, 0x0c, ++ 0x2f, 0xff, 0xaa, 0x0a, 0x00, 0x48, 0xb1, 0xfb, 0x4a, 0xcd, 0xcd, 0xc3, 0x8b, 0x52, 0x50, 0xcf, 0xec, 0x35, 0x6a, 0x6d, 0xe2, 0x6c, 0xfa, 0x7a, 0x58, 0x8f, 0xdc, 0x86, 0xf9, 0x8c, 0x85, 0x4a, ++ 0xc6, 0x4c, 0x7b, 0xfa, 0xa9, 0x6f, 0x5a, 0x32, 0xcc, 0x06, 0x10, 0x93, 0x4b, 0xaa, 0x6a, 0x58, 0x6b, 0x9a, 0x20, 0x54, 0xf1, 0x3b, 0xa2, 0x74, 0x17, 0x4a, 0xa0, 0xd2, 0xb3, 0xa8, 0x1b, 0x96, ++ 0xa9, 0x40, 0x66, 0x6f, 0x78, 0x9b, 0x5a, 0x6b, 0xcd, 0xc0, 0xa6, 0xa0, 0x17, 0x8a, 0x0c, 0x9a, 0x02, 0x57, 0x8a, 0x49, 0x3f, 0x6e, 0xea, 0x0d, 0x2e, 0x6c, 0x13, 0x95, 0x1c, 0x9f, 0x24, 0x9a, ++ 0x5e, 0x8d, 0xd7, 0x1d, 0xd4, 0x9a, 0x74, 0x2d, 0x45, 0x1f, 0x1a, 0xbb, 0xa1, 0x9a, 0xf8, 0xc5, 0x47, 0x85, 0x5e, 0x0a, 0xfc, 0x72, 0x8e, 0x90, 0xab, 0xb4, 0x99, 0xc9, 0xbe, 0xeb, 0x76, 0x6f, ++ 0x47, 0x29, 0xcd, 0xa2, 0x22, 0x63, 0xe3, 0x24, 0xda, 0x18, 0x71, 0x2d, 0x31, 0x6e, 0x98, 0xdc, 0x7a, 0xc8, 0xc3, 0xca, 0x47, 0x37, 0x0e, 0xbd, 0x77, 0x0c, 0xe3, 0x2b, 0x3b, 0xd4, 0xb1, 0xa0, ++ 0xc9, 0x52, 0x9a, 0xc6, 0xec, 0x8e, 0xe0, 0x28, 0xb1, 0xcd, 0xb2, 0x65, 0x1c, 0xb5, 0xa6, 0xbb, 0x3c, 0x0c, 0x6d, 0xf1, 0x24, 0x0a, 0x3b, 0x91, 0x4b, 0x56, 0x56, 0xc0, 0xdc, 0x51, 0xc2, 0xb9, ++ 0x1b, 0xfc, 0xbc, 0x37, 0xa4, 0x66, 0x02, 0x87, 0xd4, 0x4f, 0x81, 0xf8, 0x53, 0xc7, 0xf4, 0x9a, 0x6d, 0x06, 0x03, 0xd6, 0xd7, 0x23, 0xcb, 0xec, 0x01, 0x5f, 0xbc, 0x43, 0x4a, 0x38, 0x24, 0x1c, ++ 0x10, 0x9c, 0x7e, 0xd5, 0xb1, 0xcc, 0x46, 0x1a, 0x2c, 0xcb, 0x9a, 0xb7, 0x14, 0x0f, 0x19, 0xf3, 0x7a, 0x13, 0xbb, 0x70, 0x1e, 0x14, 0x2b, 0xd5, 0x4b, 0x64, 0xec, 0x6b, 0x76, 0xfe, 0xc3, 0x3b, ++ 0x69, 0xc2, 0x91, 0x8c, 0xb0, 0x17, 0xc4, 0x14, 0x34, 0x23, 0x00, 0x9a, 0x3c, 0x07, 0xb5, 0xc1, 0x81, 0xb0, 0xc1, 0xeb, 0x49, 0x4a, 0x62, 0xab, 0xc8, 0x39, 0x13, 0x97, 0x08, 0x9e, 0xa6, 0x64, ++ 0x09, 0x67, 0xc1, 0x20, 0x49, 0x84, 0xcd, 0x48, 0x4c, 0xcc, 0xb0, 0x0a, 0x9a, 0x17, 0xd0, 0x87, 0x21, 0x84, 0x28, 0xef, 0x3b, 0xb7, 0x08, 0x78, 0x3e, 0x12, 0x82, 0x71, 0x04, 0x41, 0x73, 0x75, ++ 0xb6, 0x95, 0x6f, 0xb5, 0x00, 0x53, 0xd0, 0x48, 0xa4, 0x79, 0x14, 0x95, 0x82, 0x4a, 0x34, 0x80, 0xa5, 0xb7, 0x83, 0x02, 0x56, 0x09, 0x6f, 0xdd, 0x72, 0x5c, 0x30, 0x8b, 0x3b, 0xe8, 0x4a, 0x07, ++ 0xf3, 0x63, 0x2e, 0x24, 0x95, 0xc6, 0x2e, 0x96, 0x39, 0x9d, 0x80, 0xbf, 0xa7, 0x45, 0xb9, 0x84, 0x1a, 0x18, 0x33, 0xbc, 0x1d, 0x27, 0xba, 0x45, 0xa5, 0x21, 0x68, 0xee, 0x59, 0x00, 0x6c, 0x3a, ++ 0x3a, 0x8c, 0x4a, 0x5a, 0x4f, 0x50, 0x88, 0xfc, 0x73, 0x71, 0x81, 0xab, 0x51, 0x96, 0xf7, 0xb1, 0xb4, 0x9a, 0x2e, 0xd8, 0x13, 0x13, 0x4e, 0x11, 0x2f, 0x73, 0x0b, 0x99, 0x1c, 0x54, 0xa7, 0x19, ++ 0x6b, 0xcf, 0x5f, 0xc7, 0x6e, 0x13, 0x4c, 0x58, 0x43, 0xe1, 0x69, 0x88, 0x51, 0xb2, 0xf8, 0x69, 0xaf, 0xaf, 0xb0, 0x27, 0x87, 0xd9, 0xc2, 0xf1, 0x36, 0x90, 0x2d, 0xc7, 0xa7, 0xf3, 0xd6, 0x21, ++ 0x56, 0xd1, 0x5e, 0xc3, 0x09, 0x56, 0x40, 0x92, 0xc6, 0x1d, 0x83, 0xb0, 0x98, 0x6c, 0x48, 0x40, 0x99, 0x81, 0xf3, 0xc1, 0x86, 0x88, 0x0a, 0x2f, 0x63, 0xd5, 0x86, 0x0a, 0xb6, 0x01, 0xde, 0xac, ++ 0x2b, 0x6b, 0xa1, 0xb4, 0x28, 0x17, 0x9d, 0x73, 0x53, 0x3e, 0xb7, 0xa3, 0xa5, 0x11, 0x3b, 0x85, 0x61, 0xf1, 0x0b, 0x45, 0xc3, 0xcd, 0xe2, 0x82, 0xb6, 0xea, 0xd6, 0xab, 0x6c, 0x60, 0x4f, 0x09, ++ 0xc1, 0x7b, 0xfd, 0xa0, 0x83, 0x13, 0xa3, 0x26, 0x07, 0x67, 0x5a, 0xdf, 0x64, 0x31, 0xca, 0x87, 0x18, 0xe9, 0xc4, 0x3a, 0x73, 0x73, 0x32, 0x27, 0xe7, 0x3b, 0xc6, 0x1a, 0xc8, 0x45, 0xba, 0x90, ++ 0x77, 0x55, 0xce, 0xc6, 0x89, 0x25, 0xe5, 0xe2, 0xbf, 0xe9, 0x12, 0x95, 0x9d, 0xb8, 0x6f, 0xbf, 0xe2, 0x15, 0x6f, 0xd5, 0xbb, 0xdb, 0xf0, 0xc9, 0xdf, 0x8b, 0x53, 0x02, 0xaa, 0x8d, 0x90, 0xa2, ++ 0x2d, 0x12, 0x27, 0x0e, 0x00, 0x65, 0x51, 0xe4, 0x76, 0x7e, 0x45, 0x26, 0x8e, 0xd9, 0x69, 0x26, 0x54, 0x44, 0x78, 0x11, 0xea, 0xb8, 0x4f, 0x04, 0x99, 0xa8, 0xa5, 0x8c, 0xf7, 0xc0, 0x4a, 0x59, ++ 0x56, 0x98, 0x52, 0x80, 0x45, 0xf2, 0x98, 0x97, 0xc8, 0xfa, 0x96, 0xd0, 0x6c, 0xce, 0x51, 0xe6, 0xaf, 0xea, 0xc4, 0x33, 0x95, 0x89, 0xc9, 0x41, 0xc8, 0x55, 0x63, 0xd7, 0x0f, 0xac, 0xe1, 0x92, ++ 0x88, 0x94, 0xba, 0xc0, 0x36, 0x19, 0xdf, 0xf4, 0xbe, 0x3f, 0x43, 0x14, 0xa3, 0xf7, 0x35, 0x1a, 0x09, 0xa4, 0x86, 0xb5, 0x04, 0x1e, 0x7c, 0xb2, 0xda, 0x8b, 0x96, 0xbc, 0x66, 0x26, 0xa4, 0x93, ++ 0x17, 0x35, 0x7c, 0x41, 0x52, 0xa5, 0x1b, 0xa3, 0xc2, 0x8c, 0x7e, 0x0c, 0x9d, 0xb4, 0x1a, 0x06, 0xa2, 0x82, 0x90, 0xf2, 0x18, 0x73, 0x11, 0x07, 0xc9, 0x54, 0xd8, 0xa6, 0x6f, 0x80, 0x1d, 0x7d, ++ 0xe1, 0x2a, 0x03, 0x71, 0x16, 0x99, 0x0b, 0x6c, 0x53, 0xc1, 0x29, 0xf1, 0x85, 0xc3, 0x45, 0xf2, 0x7e, 0x51, 0x8b, 0x2d, 0x5a, 0x91, 0x25, 0xa0, 0x70, 0x76, 0xd9, 0x91, 0xb7, 0xda, 0xc7, 0xcc, ++ 0x65, 0xa8, 0x56, 0x2e, 0xfb, 0xcc, 0x32, 0xa9, 0xca, 0x4a, 0xd9, 0x02, 0x63, 0xb0, 0x4a, 0x4f, 0x90, 0x36, 0x11, 0x6c, 0x7b, 0x97, 0x48, 0x04, 0x96, 0x31, 0x75, 0x75, 0x65, 0x0d, 0xcc, 0x21, ++ 0x52, 0xb5, 0xbc, 0x0e, 0x74, 0x40, 0x7e, 0x12, 0xfa, 0x8e, 0x4f, 0xfc, 0xcc, 0xff, 0x76, 0xc0, 0x1a, 0x97, 0x4b, 0xd6, 0x11, 0x02, 0xe1, 0xf5, 0x29, 0x64, 0x96, 0xc7, 0x1d, 0x07, 0x64, 0xe1, ++ 0x32, 0x29, 0xff, 0xe7, 0x84, 0x6f, 0x33, 0x6e, 0x34, 0xca, 0xc9, 0x04, 0xca, 0x56, 0x70, 0xf8, 0xcd, 0x50, 0x52, 0x42, 0x7a, 0x79, 0xc0, 0x91, 0xa9, 0x71, 0x21, 0x0c, 0x5c, 0xff, 0x66, 0x7a, ++ 0xac, 0x24, 0x93, 0x66, 0xe1, 0x0d, 0x2b, 0x11, 0x37, 0x6c, 0xa3, 0x9d, 0x93, 0x52, 0x04, 0xb1, 0x2c, 0xc5, 0x85, 0xe9, 0x40, 0x54, 0x03, 0x62, 0x5f, 0xb3, 0x2c, 0xb5, 0xe5, 0xc3, 0x1b, 0x62, ++ 0x34, 0x81, 0x60, 0x51, 0x5c, 0xcc, 0x4f, 0xda, 0xf5, 0x70, 0x2d, 0x6b, 0xab, 0x5c, 0x37, 0x3d, 0xb6, 0xf3, 0x50, 0xd3, 0xe6, 0x3a, 0x5c, 0xe3, 0xca, 0x54, 0x74, 0xa0, 0xcf, 0x15, 0x67, 0x04, ++ 0x2c, 0xa3, 0x25, 0x89, 0x86, 0xff, 0x75, 0xbd, 0xfc, 0xd9, 0x29, 0xe6, 0x46, 0x2f, 0x36, 0xbc, 0xcc, 0x3f, 0x5a, 0x93, 0x35, 0x2a, 0x2b, 0x36, 0xcb, 0x16, 0x2e, 0x18, 0x74, 0xc7, 0x42, 0x87, ++ 0x0a, 0x97, 0xb1, 0x67, 0xa0, 0x50, 0x37, 0x36, 0x24, 0xea, 0xeb, 0x7e, 0x50, 0x73, 0x25, 0x6b, 0x72, 0x11, 0xb2, 0xd9, 0x4b, 0x84, 0x06, 0xcd, 0x6c, 0x95, 0x33, 0xb1, 0x53, 0x64, 0x08, 0xab, ++ 0x0a, 0x29, 0xe5, 0xb2, 0xf0, 0xc9, 0x54, 0xec, 0xe0, 0x0f, 0xbb, 0xeb, 0x17, 0x6d, 0x72, 0x4d, 0x4c, 0xf4, 0x43, 0xcf, 0x70, 0x20, 0xd5, 0xfa, 0x70, 0x94, 0xcc, 0x1b, 0x1b, 0xe6, 0x97, 0xba, ++ 0xd3, 0x36, 0x74, 0xe4, 0x09, 0x9e, 0xc7, 0xbb, 0x18, 0xf4, 0x57, 0x71, 0x28, 0xcd, 0xd9, 0x7c, 0xcd, 0x6d, 0x44, 0x62, 0xe5, 0x60, 0x7c, 0x51, 0x2a, 0x3e, 0x36, 0x24, 0x8e, 0x3d, 0xda, 0xa2, ++ 0xec, 0x08, 0x9a, 0xef, 0xc4, 0xce, 0x48, 0x5c, 0x49, 0xd7, 0xb0, 0x09, 0xc8, 0xd6, 0x31, 0x15, 0xfc, 0x81, 0xff, 0x3a, 0x62, 0xd1, 0x5a, 0x88, 0x44, 0x1c, 0x03, 0xea, 0x1c, 0x2e, 0x72, 0xc4, ++ 0x88, 0x39, 0xfc, 0x6a, 0xd7, 0x3a, 0x30, 0x74, 0x4a, 0x62, 0xb7, 0xb2, 0x16, 0x45, 0xa6, 0xaf, 0x7d, 0x61, 0xb6, 0x38, 0x3b, 0x22, 0x1e, 0x21, 0x90, 0x55, 0x57, 0xcd, 0x29, 0xd9, 0x24, 0xa6, ++ 0x09, 0x86, 0xc5, 0x11, 0xc1, 0xeb, 0xbc, 0x31, 0x6d, 0x56, 0x30, 0xa2, 0x41, 0x43, 0x23, 0xf5, 0x3a, 0xd5, 0x59, 0x94, 0xf6, 0xb3, 0x65, 0x39, 0xf9, 0xc4, 0x40, 0x75, 0xa5, 0x33, 0xe4, 0x81, ++ 0xc0, 0x84, 0x45, 0xd9, 0xca, 0x9e, 0x9d, 0x38, 0x21, 0x19, 0x38, 0x8b, 0xd1, 0xd7, 0x50, 0x52, 0x21, 0x7a, 0x94, 0x4c, 0xcc, 0x7b, 0xe9, 0x09, 0xe2, 0x19, 0x71, 0x1f, 0xcc, 0x79, 0x24, 0x76, ++ 0x92, 0x13, 0xa1, 0x92, 0x53, 0x4a, 0x55, 0x80, 0x08, 0x15, 0x7a, 0x39, 0x6e, 0xdf, 0xf4, 0x80, 0xcc, 0x3b, 0x52, 0x0f, 0xf8, 0x18, 0xb3, 0x8b, 0x13, 0x5c, 0x18, 0xa8, 0x0d, 0x51, 0x05, 0xe6, ++ 0x78, 0x83, 0x6c, 0x39, 0x5c, 0x28, 0xe9, 0x2f, 0x7a, 0x3c, 0x4e, 0x93, 0xc0, 0x10, 0x35, 0xf3, 0x41, 0x11, 0xcc, 0x49, 0x02, 0xd0, 0xc0, 0x33, 0xa6, 0x3f, 0x23, 0x6a, 0x71, 0xda, 0x97, 0x4a, ++ 0x6f, 0x40, 0x4f, 0x7a, 0xa7, 0xb5, 0xe5, 0x82, 0xc7, 0x58, 0x14, 0x2f, 0xc1, 0x82, 0x6b, 0xba, 0x98, 0xb2, 0x7d, 0x57, 0xc2, 0xe2, 0x10, 0x3e, 0x10, 0xe3, 0x0d, 0x32, 0x79, 0x7b, 0x96, 0x77, ++ 0x14, 0xd1, 0x56, 0x61, 0x11, 0x13, 0x71, 0xa2, 0xd9, 0xc5, 0x39, 0x98, 0x12, 0x46, 0x46, 0x22, 0x63, 0x5b, 0x44, 0x21, 0x26, 0xb0, 0x98, 0x36, 0xb0, 0x81, 0x82, 0x72, 0x47, 0xd0, 0x54, 0x22, ++ 0x97, 0x2b, 0xd0, 0x32, 0x0d, 0x8f, 0x42, 0xbf, 0x57, 0xe3, 0x49, 0x46, 0x12, 0x34, 0xe4, 0xd9, 0x4f, 0x01, 0x18, 0x50, 0xba, 0xb5, 0xc0, 0x49, 0xb6, 0x2a, 0x59, 0x43, 0x38, 0x66, 0xfc, 0xce, ++ 0x69, 0x66, 0x49, 0x5c, 0x26, 0x5c, 0x47, 0x65, 0xa5, 0x6c, 0x06, 0xb9, 0xfc, 0x42, 0x76, 0x54, 0x87, 0x85, 0xf4, 0x68, 0x28, 0xca, 0x60, 0x2d, 0xc6, 0xd0, 0x54, 0x1f, 0x25, 0x07, 0x89, 0xc4, ++ 0x9e, 0x8b, 0x06, 0x55, 0x9c, 0x43, 0x44, 0x60, 0xa8, 0x43, 0x80, 0x98, 0x54, 0xe5, 0xb4, 0x6e, 0x89, 0x38, 0x9f, 0x10, 0xf4, 0x89, 0x66, 0x74, 0x91, 0xc1, 0x93, 0x5e, 0x8a, 0xfb, 0x9e, 0xb4, ++ 0x71, 0x8f, 0x86, 0xac, 0x45, 0x89, 0x32, 0xbc, 0xf3, 0x3c, 0x9a, 0xbe, 0xcb, 0x2d, 0xc0, 0xc0, 0x93, 0xa7, 0xe8, 0x1d, 0xa0, 0x32, 0x7b, 0xb6, 0x37, 0x52, 0x81, 0x05, 0xc3, 0x58, 0xeb, 0x76, ++ 0x8d, 0x32, 0x3a, 0x37, 0xd4, 0x0a, 0x8c, 0x19, 0x9b, 0x7c, 0x4b, 0xb1, 0xd7, 0x2b, 0x72, 0xb6, 0x90, 0xb3, 0x6d, 0xd2, 0x7a, 0x93, 0x55, 0x19, 0x1b, 0x3c, 0x3a, 0xa6, 0x75, 0xa7, 0xe6, 0xf8, ++ 0x55, 0xeb, 0x50, 0x5f, 0x57, 0x98, 0x65, 0xdb, 0xd8, 0x91, 0x05, 0x65, 0x50, 0x5e, 0x7c, 0x0f, 0xdd, 0x54, 0x5c, 0xbb, 0xb8, 0x71, 0xb0, 0xb2, 0xcc, 0x01, 0x25, 0xb7, 0x4f, 0x6b, 0x0c, 0x9b, ++ 0x79, 0x67, 0x0a, 0x62, 0x02, 0xd1, 0xb9, 0x15, 0x4a, 0xc7, 0x76, 0x6b, 0x19, 0x19, 0xc4, 0x89, 0x58, 0x90, 0x86, 0xad, 0x8b, 0x45, 0xbe, 0x0d, 0x79, 0xc9, 0x76, 0xc3, 0xc3, 0x9d, 0x6b, 0x25, ++ 0x21, 0x3b, 0xb0, 0xb7, 0x8a, 0x57, 0x50, 0xe6, 0xa8, 0xeb, 0x34, 0x33, 0x0b, 0xb3, 0xcf, 0xf2, 0xb1, 0xc0, 0x72, 0x2a, 0xc8, 0x83, 0xb0, 0x48, 0xf4, 0xb8, 0xcd, 0x06, 0x19, 0x6d, 0xa8, 0xaa, ++ 0x8b, 0x05, 0xda, 0x42, 0x67, 0x55, 0x2b, 0xf8, 0x7a, 0xbc, 0xa5, 0x12, 0x4d, 0xc3, 0x58, 0xa8, 0x38, 0x10, 0x40, 0xe9, 0xb8, 0x1f, 0xb0, 0x84, 0x43, 0x15, 0x02, 0x15, 0xd6, 0x92, 0x23, 0x28, ++ 0x00, 0x0a, 0xc0, 0xb7, 0x88, 0xb1, 0x21, 0x93, 0x1a, 0x26, 0x7d, 0x80, 0x61, 0x9c, 0xe7, 0xd2, 0x9c, 0xd7, 0x6b, 0x60, 0xcf, 0x65, 0x83, 0xdc, 0xe8, 0xce, 0xbc, 0x49, 0x01, 0x85, 0x73, 0x6c, ++ 0x81, 0x8b, 0x25, 0xad, 0x26, 0x0b, 0x66, 0x7b, 0x1f, 0xfd, 0x46, 0x20, 0x6d, 0x01, 0x04, 0x55, 0x3a, 0xa9, 0xfb, 0x30, 0x45, 0x54, 0xa2, 0x1c, 0x32, 0x72, 0x44, 0xce, 0x78, 0xaf, 0xdb, 0xd3, ++ 0xb4, 0x62, 0x36, 0x1b, 0xb0, 0x68, 0xa1, 0x55, 0x63, 0x64, 0x09, 0xf5, 0x74, 0xc5, 0x71, 0x65, 0x72, 0xe2, 0xa5, 0xf2, 0xa4, 0xb0, 0x4f, 0xb8, 0xaa, 0xd1, 0x23, 0x66, 0x84, 0x84, 0x17, 0x87, ++ 0x56, 0x2a, 0xaf, 0x46, 0xc2, 0xc0, 0xda, 0x46, 0x65, 0xea, 0xfd, 0x46, 0x5f, 0xc6, 0x4a, 0x0c, 0x5f, 0x8f, 0x3f, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9d, 0x59, 0xa5, 0x43, 0xd8, 0x20, 0x8c, ++ 0x54, 0xa3, 0x16, 0x65, 0x29, 0xb5, 0x39, 0x22, 0xa5, 0x89, 0x9a, 0x0b, 0xc4, 0x65, 0xee, 0x5f, 0xc2, 0xc0, 0x41, 0x55, 0x58, 0x2a, 0x40, 0xac, 0x70, 0x97, 0x61, 0xd2, 0xbe, 0x61, 0xfd, 0xc7, ++ 0x6c, 0x59, 0x30, 0x44, 0xce, 0xbc, 0xc7, 0xf2, 0x86, 0x26, 0xed, 0x79, 0xd4, 0x51, 0x14, 0x08, 0x00, 0xe0, 0x3b, 0x59, 0xb9, 0x56, 0xf8, 0x21, 0x0e, 0x55, 0x60, 0x67, 0x40, 0x7d, 0x13, 0xdc, ++ 0x90, 0xfa, 0x9e, 0x8b, 0x87, 0x2b, 0xfb, 0x8f, 0xa0, 0x82, 0x06, 0x65, 0x03, 0x82, 0x06, 0x61, 0x00, 0xda, 0x18, 0x71, 0x2d, 0x31, 0x6e, 0x98, 0xdc, 0x7a, 0xc8, 0xc3, 0xca, 0x47, 0x37, 0x0e, ++ 0xbd, 0x77, 0x0c, 0xe3, 0x2b, 0x3b, 0xd4, 0xb1, 0xa0, 0xc9, 0x52, 0x9a, 0xc6, 0xec, 0x8e, 0xe0, 0x28, 0xb1, 0xcd, 0xb2, 0x65, 0x1c, 0xb5, 0xa6, 0xbb, 0x3c, 0x0c, 0x6d, 0xf1, 0x24, 0x0a, 0x3b, ++ 0x91, 0x4b, 0x56, 0x56, 0xc0, 0xdc, 0x51, 0xc2, 0xb9, 0x1b, 0xfc, 0xbc, 0x37, 0xa4, 0x66, 0x02, 0x87, 0xd4, 0x4f, 0x81, 0xf8, 0x53, 0xc7, 0xf4, 0x9a, 0x6d, 0x06, 0x03, 0xd6, 0xd7, 0x23, 0xcb, ++ 0xec, 0x01, 0x5f, 0xbc, 0x43, 0x4a, 0x38, 0x24, 0x1c, 0x10, 0x9c, 0x7e, 0xd5, 0xb1, 0xcc, 0x46, 0x1a, 0x2c, 0xcb, 0x9a, 0xb7, 0x14, 0x0f, 0x19, 0xf3, 0x7a, 0x13, 0xbb, 0x70, 0x1e, 0x14, 0x2b, ++ 0xd5, 0x4b, 0x64, 0xec, 0x6b, 0x76, 0xfe, 0xc3, 0x3b, 0x69, 0xc2, 0x91, 0x8c, 0xb0, 0x17, 0xc4, 0x14, 0x34, 0x23, 0x00, 0x9a, 0x3c, 0x07, 0xb5, 0xc1, 0x81, 0xb0, 0xc1, 0xeb, 0x49, 0x4a, 0x62, ++ 0xab, 0xc8, 0x39, 0x13, 0x97, 0x08, 0x9e, 0xa6, 0x64, 0x09, 0x67, 0xc1, 0x20, 0x49, 0x84, 0xcd, 0x48, 0x4c, 0xcc, 0xb0, 0x0a, 0x9a, 0x17, 0xd0, 0x87, 0x21, 0x84, 0x28, 0xef, 0x3b, 0xb7, 0x08, ++ 0x78, 0x3e, 0x12, 0x82, 0x71, 0x04, 0x41, 0x73, 0x75, 0xb6, 0x95, 0x6f, 0xb5, 0x00, 0x53, 0xd0, 0x48, 0xa4, 0x79, 0x14, 0x95, 0x82, 0x4a, 0x34, 0x80, 0xa5, 0xb7, 0x83, 0x02, 0x56, 0x09, 0x6f, ++ 0xdd, 0x72, 0x5c, 0x30, 0x8b, 0x3b, 0xe8, 0x4a, 0x07, 0xf3, 0x63, 0x2e, 0x24, 0x95, 0xc6, 0x2e, 0x96, 0x39, 0x9d, 0x80, 0xbf, 0xa7, 0x45, 0xb9, 0x84, 0x1a, 0x18, 0x33, 0xbc, 0x1d, 0x27, 0xba, ++ 0x45, 0xa5, 0x21, 0x68, 0xee, 0x59, 0x00, 0x6c, 0x3a, 0x3a, 0x8c, 0x4a, 0x5a, 0x4f, 0x50, 0x88, 0xfc, 0x73, 0x71, 0x81, 0xab, 0x51, 0x96, 0xf7, 0xb1, 0xb4, 0x9a, 0x2e, 0xd8, 0x13, 0x13, 0x4e, ++ 0x11, 0x2f, 0x73, 0x0b, 0x99, 0x1c, 0x54, 0xa7, 0x19, 0x6b, 0xcf, 0x5f, 0xc7, 0x6e, 0x13, 0x4c, 0x58, 0x43, 0xe1, 0x69, 0x88, 0x51, 0xb2, 0xf8, 0x69, 0xaf, 0xaf, 0xb0, 0x27, 0x87, 0xd9, 0xc2, ++ 0xf1, 0x36, 0x90, 0x2d, 0xc7, 0xa7, 0xf3, 0xd6, 0x21, 0x56, 0xd1, 0x5e, 0xc3, 0x09, 0x56, 0x40, 0x92, 0xc6, 0x1d, 0x83, 0xb0, 0x98, 0x6c, 0x48, 0x40, 0x99, 0x81, 0xf3, 0xc1, 0x86, 0x88, 0x0a, ++ 0x2f, 0x63, 0xd5, 0x86, 0x0a, 0xb6, 0x01, 0xde, 0xac, 0x2b, 0x6b, 0xa1, 0xb4, 0x28, 0x17, 0x9d, 0x73, 0x53, 0x3e, 0xb7, 0xa3, 0xa5, 0x11, 0x3b, 0x85, 0x61, 0xf1, 0x0b, 0x45, 0xc3, 0xcd, 0xe2, ++ 0x82, 0xb6, 0xea, 0xd6, 0xab, 0x6c, 0x60, 0x4f, 0x09, 0xc1, 0x7b, 0xfd, 0xa0, 0x83, 0x13, 0xa3, 0x26, 0x07, 0x67, 0x5a, 0xdf, 0x64, 0x31, 0xca, 0x87, 0x18, 0xe9, 0xc4, 0x3a, 0x73, 0x73, 0x32, ++ 0x27, 0xe7, 0x3b, 0xc6, 0x1a, 0xc8, 0x45, 0xba, 0x90, 0x77, 0x55, 0xce, 0xc6, 0x89, 0x25, 0xe5, 0xe2, 0xbf, 0xe9, 0x12, 0x95, 0x9d, 0xb8, 0x6f, 0xbf, 0xe2, 0x15, 0x6f, 0xd5, 0xbb, 0xdb, 0xf0, ++ 0xc9, 0xdf, 0x8b, 0x53, 0x02, 0xaa, 0x8d, 0x90, 0xa2, 0x2d, 0x12, 0x27, 0x0e, 0x00, 0x65, 0x51, 0xe4, 0x76, 0x7e, 0x45, 0x26, 0x8e, 0xd9, 0x69, 0x26, 0x54, 0x44, 0x78, 0x11, 0xea, 0xb8, 0x4f, ++ 0x04, 0x99, 0xa8, 0xa5, 0x8c, 0xf7, 0xc0, 0x4a, 0x59, 0x56, 0x98, 0x52, 0x80, 0x45, 0xf2, 0x98, 0x97, 0xc8, 0xfa, 0x96, 0xd0, 0x6c, 0xce, 0x51, 0xe6, 0xaf, 0xea, 0xc4, 0x33, 0x95, 0x89, 0xc9, ++ 0x41, 0xc8, 0x55, 0x63, 0xd7, 0x0f, 0xac, 0xe1, 0x92, 0x88, 0x94, 0xba, 0xc0, 0x36, 0x19, 0xdf, 0xf4, 0xbe, 0x3f, 0x43, 0x14, 0xa3, 0xf7, 0x35, 0x1a, 0x09, 0xa4, 0x86, 0xb5, 0x04, 0x1e, 0x7c, ++ 0xb2, 0xda, 0x8b, 0x96, 0xbc, 0x66, 0x26, 0xa4, 0x93, 0x17, 0x35, 0x7c, 0x41, 0x52, 0xa5, 0x1b, 0xa3, 0xc2, 0x8c, 0x7e, 0x0c, 0x9d, 0xb4, 0x1a, 0x06, 0xa2, 0x82, 0x90, 0xf2, 0x18, 0x73, 0x11, ++ 0x07, 0xc9, 0x54, 0xd8, 0xa6, 0x6f, 0x80, 0x1d, 0x7d, 0xe1, 0x2a, 0x03, 0x71, 0x16, 0x99, 0x0b, 0x6c, 0x53, 0xc1, 0x29, 0xf1, 0x85, 0xc3, 0x45, 0xf2, 0x7e, 0x51, 0x8b, 0x2d, 0x5a, 0x91, 0x25, ++ 0xa0, 0x70, 0x76, 0xd9, 0x91, 0xb7, 0xda, 0xc7, 0xcc, 0x65, 0xa8, 0x56, 0x2e, 0xfb, 0xcc, 0x32, 0xa9, 0xca, 0x4a, 0xd9, 0x02, 0x63, 0xb0, 0x4a, 0x4f, 0x90, 0x36, 0x11, 0x6c, 0x7b, 0x97, 0x48, ++ 0x04, 0x96, 0x31, 0x75, 0x75, 0x65, 0x0d, 0xcc, 0x21, 0x52, 0xb5, 0xbc, 0x0e, 0x74, 0x40, 0x7e, 0x12, 0xfa, 0x8e, 0x4f, 0xfc, 0xcc, 0xff, 0x76, 0xc0, 0x1a, 0x97, 0x4b, 0xd6, 0x11, 0x02, 0xe1, ++ 0xf5, 0x29, 0x64, 0x96, 0xc7, 0x1d, 0x07, 0x64, 0xe1, 0x32, 0x29, 0xff, 0xe7, 0x84, 0x6f, 0x33, 0x6e, 0x34, 0xca, 0xc9, 0x04, 0xca, 0x56, 0x70, 0xf8, 0xcd, 0x50, 0x52, 0x42, 0x7a, 0x79, 0xc0, ++ 0x91, 0xa9, 0x71, 0x21, 0x0c, 0x5c, 0xff, 0x66, 0x7a, 0xac, 0x24, 0x93, 0x66, 0xe1, 0x0d, 0x2b, 0x11, 0x37, 0x6c, 0xa3, 0x9d, 0x93, 0x52, 0x04, 0xb1, 0x2c, 0xc5, 0x85, 0xe9, 0x40, 0x54, 0x03, ++ 0x62, 0x5f, 0xb3, 0x2c, 0xb5, 0xe5, 0xc3, 0x1b, 0x62, 0x34, 0x81, 0x60, 0x51, 0x5c, 0xcc, 0x4f, 0xda, 0xf5, 0x70, 0x2d, 0x6b, 0xab, 0x5c, 0x37, 0x3d, 0xb6, 0xf3, 0x50, 0xd3, 0xe6, 0x3a, 0x5c, ++ 0xe3, 0xca, 0x54, 0x74, 0xa0, 0xcf, 0x15, 0x67, 0x04, 0x2c, 0xa3, 0x25, 0x89, 0x86, 0xff, 0x75, 0xbd, 0xfc, 0xd9, 0x29, 0xe6, 0x46, 0x2f, 0x36, 0xbc, 0xcc, 0x3f, 0x5a, 0x93, 0x35, 0x2a, 0x2b, ++ 0x36, 0xcb, 0x16, 0x2e, 0x18, 0x74, 0xc7, 0x42, 0x87, 0x0a, 0x97, 0xb1, 0x67, 0xa0, 0x50, 0x37, 0x36, 0x24, 0xea, 0xeb, 0x7e, 0x50, 0x73, 0x25, 0x6b, 0x72, 0x11, 0xb2, 0xd9, 0x4b, 0x84, 0x06, ++ 0xcd, 0x6c, 0x95, 0x33, 0xb1, 0x53, 0x64, 0x08, 0xab, 0x0a, 0x29, 0xe5, 0xb2, 0xf0, 0xc9, 0x54, 0xec, 0xe0, 0x0f, 0xbb, 0xeb, 0x17, 0x6d, 0x72, 0x4d, 0x4c, 0xf4, 0x43, 0xcf, 0x70, 0x20, 0xd5, ++ 0xfa, 0x70, 0x94, 0xcc, 0x1b, 0x1b, 0xe6, 0x97, 0xba, 0xd3, 0x36, 0x74, 0xe4, 0x09, 0x9e, 0xc7, 0xbb, 0x18, 0xf4, 0x57, 0x71, 0x28, 0xcd, 0xd9, 0x7c, 0xcd, 0x6d, 0x44, 0x62, 0xe5, 0x60, 0x7c, ++ 0x51, 0x2a, 0x3e, 0x36, 0x24, 0x8e, 0x3d, 0xda, 0xa2, 0xec, 0x08, 0x9a, 0xef, 0xc4, 0xce, 0x48, 0x5c, 0x49, 0xd7, 0xb0, 0x09, 0xc8, 0xd6, 0x31, 0x15, 0xfc, 0x81, 0xff, 0x3a, 0x62, 0xd1, 0x5a, ++ 0x88, 0x44, 0x1c, 0x03, 0xea, 0x1c, 0x2e, 0x72, 0xc4, 0x88, 0x39, 0xfc, 0x6a, 0xd7, 0x3a, 0x30, 0x74, 0x4a, 0x62, 0xb7, 0xb2, 0x16, 0x45, 0xa6, 0xaf, 0x7d, 0x61, 0xb6, 0x38, 0x3b, 0x22, 0x1e, ++ 0x21, 0x90, 0x55, 0x57, 0xcd, 0x29, 0xd9, 0x24, 0xa6, 0x09, 0x86, 0xc5, 0x11, 0xc1, 0xeb, 0xbc, 0x31, 0x6d, 0x56, 0x30, 0xa2, 0x41, 0x43, 0x23, 0xf5, 0x3a, 0xd5, 0x59, 0x94, 0xf6, 0xb3, 0x65, ++ 0x39, 0xf9, 0xc4, 0x40, 0x75, 0xa5, 0x33, 0xe4, 0x81, 0xc0, 0x84, 0x45, 0xd9, 0xca, 0x9e, 0x9d, 0x38, 0x21, 0x19, 0x38, 0x8b, 0xd1, 0xd7, 0x50, 0x52, 0x21, 0x7a, 0x94, 0x4c, 0xcc, 0x7b, 0xe9, ++ 0x09, 0xe2, 0x19, 0x71, 0x1f, 0xcc, 0x79, 0x24, 0x76, 0x92, 0x13, 0xa1, 0x92, 0x53, 0x4a, 0x55, 0x80, 0x08, 0x15, 0x7a, 0x39, 0x6e, 0xdf, 0xf4, 0x80, 0xcc, 0x3b, 0x52, 0x0f, 0xf8, 0x18, 0xb3, ++ 0x8b, 0x13, 0x5c, 0x18, 0xa8, 0x0d, 0x51, 0x05, 0xe6, 0x78, 0x83, 0x6c, 0x39, 0x5c, 0x28, 0xe9, 0x2f, 0x7a, 0x3c, 0x4e, 0x93, 0xc0, 0x10, 0x35, 0xf3, 0x41, 0x11, 0xcc, 0x49, 0x02, 0xd0, 0xc0, ++ 0x33, 0xa6, 0x3f, 0x23, 0x6a, 0x71, 0xda, 0x97, 0x4a, 0x6f, 0x40, 0x4f, 0x7a, 0xa7, 0xb5, 0xe5, 0x82, 0xc7, 0x58, 0x14, 0x2f, 0xc1, 0x82, 0x6b, 0xba, 0x98, 0xb2, 0x7d, 0x57, 0xc2, 0xe2, 0x10, ++ 0x3e, 0x10, 0xe3, 0x0d, 0x32, 0x79, 0x7b, 0x96, 0x77, 0x14, 0xd1, 0x56, 0x61, 0x11, 0x13, 0x71, 0xa2, 0xd9, 0xc5, 0x39, 0x98, 0x12, 0x46, 0x46, 0x22, 0x63, 0x5b, 0x44, 0x21, 0x26, 0xb0, 0x98, ++ 0x36, 0xb0, 0x81, 0x82, 0x72, 0x47, 0xd0, 0x54, 0x22, 0x97, 0x2b, 0xd0, 0x32, 0x0d, 0x8f, 0x42, 0xbf, 0x57, 0xe3, 0x49, 0x46, 0x12, 0x34, 0xe4, 0xd9, 0x4f, 0x01, 0x18, 0x50, 0xba, 0xb5, 0xc0, ++ 0x49, 0xb6, 0x2a, 0x59, 0x43, 0x38, 0x66, 0xfc, 0xce, 0x69, 0x66, 0x49, 0x5c, 0x26, 0x5c, 0x47, 0x65, 0xa5, 0x6c, 0x06, 0xb9, 0xfc, 0x42, 0x76, 0x54, 0x87, 0x85, 0xf4, 0x68, 0x28, 0xca, 0x60, ++ 0x2d, 0xc6, 0xd0, 0x54, 0x1f, 0x25, 0x07, 0x89, 0xc4, 0x9e, 0x8b, 0x06, 0x55, 0x9c, 0x43, 0x44, 0x60, 0xa8, 0x43, 0x80, 0x98, 0x54, 0xe5, 0xb4, 0x6e, 0x89, 0x38, 0x9f, 0x10, 0xf4, 0x89, 0x66, ++ 0x74, 0x91, 0xc1, 0x93, 0x5e, 0x8a, 0xfb, 0x9e, 0xb4, 0x71, 0x8f, 0x86, 0xac, 0x45, 0x89, 0x32, 0xbc, 0xf3, 0x3c, 0x9a, 0xbe, 0xcb, 0x2d, 0xc0, 0xc0, 0x93, 0xa7, 0xe8, 0x1d, 0xa0, 0x32, 0x7b, ++ 0xb6, 0x37, 0x52, 0x81, 0x05, 0xc3, 0x58, 0xeb, 0x76, 0x8d, 0x32, 0x3a, 0x37, 0xd4, 0x0a, 0x8c, 0x19, 0x9b, 0x7c, 0x4b, 0xb1, 0xd7, 0x2b, 0x72, 0xb6, 0x90, 0xb3, 0x6d, 0xd2, 0x7a, 0x93, 0x55, ++ 0x19, 0x1b, 0x3c, 0x3a, 0xa6, 0x75, 0xa7, 0xe6, 0xf8, 0x55, 0xeb, 0x50, 0x5f, 0x57, 0x98, 0x65, 0xdb, 0xd8, 0x91, 0x05, 0x65, 0x50, 0x5e, 0x7c, 0x0f, 0xdd, 0x54, 0x5c, 0xbb, 0xb8, 0x71, 0xb0, ++ 0xb2, 0xcc, 0x01, 0x25, 0xb7, 0x4f, 0x6b, 0x0c, 0x9b, 0x79, 0x67, 0x0a, 0x62, 0x02, 0xd1, 0xb9, 0x15, 0x4a, 0xc7, 0x76, 0x6b, 0x19, 0x19, 0xc4, 0x89, 0x58, 0x90, 0x86, 0xad, 0x8b, 0x45, 0xbe, ++ 0x0d, 0x79, 0xc9, 0x76, 0xc3, 0xc3, 0x9d, 0x6b, 0x25, 0x21, 0x3b, 0xb0, 0xb7, 0x8a, 0x57, 0x50, 0xe6, 0xa8, 0xeb, 0x34, 0x33, 0x0b, 0xb3, 0xcf, 0xf2, 0xb1, 0xc0, 0x72, 0x2a, 0xc8, 0x83, 0xb0, ++ 0x48, 0xf4, 0xb8, 0xcd, 0x06, 0x19, 0x6d, 0xa8, 0xaa, 0x8b, 0x05, 0xda, 0x42, 0x67, 0x55, 0x2b, 0xf8, 0x7a, 0xbc, 0xa5, 0x12, 0x4d, 0xc3, 0x58, 0xa8, 0x38, 0x10, 0x40, 0xe9, 0xb8, 0x1f, 0xb0, ++ 0x84, 0x43, 0x15, 0x02, 0x15, 0xd6, 0x92, 0x23, 0x28, 0x00, 0x0a, 0xc0, 0xb7, 0x88, 0xb1, 0x21, 0x93, 0x1a, 0x26, 0x7d, 0x80, 0x61, 0x9c, 0xe7, 0xd2, 0x9c, 0xd7, 0x6b, 0x60, 0xcf, 0x65, 0x83, ++ 0xdc, 0xe8, 0xce, 0xbc, 0x49, 0x01, 0x85, 0x73, 0x6c, 0x81, 0x8b, 0x25, 0xad, 0x26, 0x0b, 0x66, 0x7b, 0x1f, 0xfd, 0x46, 0x20, 0x6d, 0x01, 0x04, 0x55, 0x3a, 0xa9, 0xfb, 0x30, 0x45, 0x54, 0xa2, ++ 0x1c, 0x32, 0x72, 0x44, 0xce, 0x78, 0xaf, 0xdb, 0xd3, 0xb4, 0x62, 0x36, 0x1b, 0xb0, 0x68, 0xa1, 0x55, 0x63, 0x64, 0x09, 0xf5, 0x74, 0xc5, 0x71, 0x65, 0x72, 0xe2, 0xa5, 0xf2, 0xa4, 0xb0, 0x4f, ++ 0xb8, 0xaa, 0xd1, 0x23, 0x66, 0x84, 0x84, 0x17, 0x87, 0x56, 0x2a, 0xaf, 0x46, 0xc2, 0xc0, 0xda, 0x46, 0x65, 0xea, 0xfd, 0x46, 0x5f, 0xc6, 0x4a, 0x0c, 0x5f, 0x8f, 0x3f, 0x90, 0x03, 0x48, 0x94, ++ 0x15, 0x89, 0x9d, 0x59, 0xa5, 0x43, 0xd8, 0x20, 0x8c, 0x54, 0xa3, 0x16, 0x65, 0x29, 0xb5, 0x39, 0x22, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, ++ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, ++ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, ++ }, ++ .spki_len = 1603, ++ .spki = { ++ 0x30, 0x82, 0x06, 0x3f, 0x30, 0x0f, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0b, 0x05, 0x04, 0x04, 0x05, 0x00, 0x03, 0x82, 0x06, 0x2a, 0x00, 0x30, 0x82, 0x06, 0x25, 0x03, 0x82, ++ 0x06, 0x21, 0x00, 0xda, 0x18, 0x71, 0x2d, 0x31, 0x6e, 0x98, 0xdc, 0x7a, 0xc8, 0xc3, 0xca, 0x47, 0x37, 0x0e, 0xbd, 0x77, 0x0c, 0xe3, 0x2b, 0x3b, 0xd4, 0xb1, 0xa0, 0xc9, 0x52, 0x9a, 0xc6, 0xec, ++ 0x8e, 0xe0, 0x28, 0xb1, 0xcd, 0xb2, 0x65, 0x1c, 0xb5, 0xa6, 0xbb, 0x3c, 0x0c, 0x6d, 0xf1, 0x24, 0x0a, 0x3b, 0x91, 0x4b, 0x56, 0x56, 0xc0, 0xdc, 0x51, 0xc2, 0xb9, 0x1b, 0xfc, 0xbc, 0x37, 0xa4, ++ 0x66, 0x02, 0x87, 0xd4, 0x4f, 0x81, 0xf8, 0x53, 0xc7, 0xf4, 0x9a, 0x6d, 0x06, 0x03, 0xd6, 0xd7, 0x23, 0xcb, 0xec, 0x01, 0x5f, 0xbc, 0x43, 0x4a, 0x38, 0x24, 0x1c, 0x10, 0x9c, 0x7e, 0xd5, 0xb1, ++ 0xcc, 0x46, 0x1a, 0x2c, 0xcb, 0x9a, 0xb7, 0x14, 0x0f, 0x19, 0xf3, 0x7a, 0x13, 0xbb, 0x70, 0x1e, 0x14, 0x2b, 0xd5, 0x4b, 0x64, 0xec, 0x6b, 0x76, 0xfe, 0xc3, 0x3b, 0x69, 0xc2, 0x91, 0x8c, 0xb0, ++ 0x17, 0xc4, 0x14, 0x34, 0x23, 0x00, 0x9a, 0x3c, 0x07, 0xb5, 0xc1, 0x81, 0xb0, 0xc1, 0xeb, 0x49, 0x4a, 0x62, 0xab, 0xc8, 0x39, 0x13, 0x97, 0x08, 0x9e, 0xa6, 0x64, 0x09, 0x67, 0xc1, 0x20, 0x49, ++ 0x84, 0xcd, 0x48, 0x4c, 0xcc, 0xb0, 0x0a, 0x9a, 0x17, 0xd0, 0x87, 0x21, 0x84, 0x28, 0xef, 0x3b, 0xb7, 0x08, 0x78, 0x3e, 0x12, 0x82, 0x71, 0x04, 0x41, 0x73, 0x75, 0xb6, 0x95, 0x6f, 0xb5, 0x00, ++ 0x53, 0xd0, 0x48, 0xa4, 0x79, 0x14, 0x95, 0x82, 0x4a, 0x34, 0x80, 0xa5, 0xb7, 0x83, 0x02, 0x56, 0x09, 0x6f, 0xdd, 0x72, 0x5c, 0x30, 0x8b, 0x3b, 0xe8, 0x4a, 0x07, 0xf3, 0x63, 0x2e, 0x24, 0x95, ++ 0xc6, 0x2e, 0x96, 0x39, 0x9d, 0x80, 0xbf, 0xa7, 0x45, 0xb9, 0x84, 0x1a, 0x18, 0x33, 0xbc, 0x1d, 0x27, 0xba, 0x45, 0xa5, 0x21, 0x68, 0xee, 0x59, 0x00, 0x6c, 0x3a, 0x3a, 0x8c, 0x4a, 0x5a, 0x4f, ++ 0x50, 0x88, 0xfc, 0x73, 0x71, 0x81, 0xab, 0x51, 0x96, 0xf7, 0xb1, 0xb4, 0x9a, 0x2e, 0xd8, 0x13, 0x13, 0x4e, 0x11, 0x2f, 0x73, 0x0b, 0x99, 0x1c, 0x54, 0xa7, 0x19, 0x6b, 0xcf, 0x5f, 0xc7, 0x6e, ++ 0x13, 0x4c, 0x58, 0x43, 0xe1, 0x69, 0x88, 0x51, 0xb2, 0xf8, 0x69, 0xaf, 0xaf, 0xb0, 0x27, 0x87, 0xd9, 0xc2, 0xf1, 0x36, 0x90, 0x2d, 0xc7, 0xa7, 0xf3, 0xd6, 0x21, 0x56, 0xd1, 0x5e, 0xc3, 0x09, ++ 0x56, 0x40, 0x92, 0xc6, 0x1d, 0x83, 0xb0, 0x98, 0x6c, 0x48, 0x40, 0x99, 0x81, 0xf3, 0xc1, 0x86, 0x88, 0x0a, 0x2f, 0x63, 0xd5, 0x86, 0x0a, 0xb6, 0x01, 0xde, 0xac, 0x2b, 0x6b, 0xa1, 0xb4, 0x28, ++ 0x17, 0x9d, 0x73, 0x53, 0x3e, 0xb7, 0xa3, 0xa5, 0x11, 0x3b, 0x85, 0x61, 0xf1, 0x0b, 0x45, 0xc3, 0xcd, 0xe2, 0x82, 0xb6, 0xea, 0xd6, 0xab, 0x6c, 0x60, 0x4f, 0x09, 0xc1, 0x7b, 0xfd, 0xa0, 0x83, ++ 0x13, 0xa3, 0x26, 0x07, 0x67, 0x5a, 0xdf, 0x64, 0x31, 0xca, 0x87, 0x18, 0xe9, 0xc4, 0x3a, 0x73, 0x73, 0x32, 0x27, 0xe7, 0x3b, 0xc6, 0x1a, 0xc8, 0x45, 0xba, 0x90, 0x77, 0x55, 0xce, 0xc6, 0x89, ++ 0x25, 0xe5, 0xe2, 0xbf, 0xe9, 0x12, 0x95, 0x9d, 0xb8, 0x6f, 0xbf, 0xe2, 0x15, 0x6f, 0xd5, 0xbb, 0xdb, 0xf0, 0xc9, 0xdf, 0x8b, 0x53, 0x02, 0xaa, 0x8d, 0x90, 0xa2, 0x2d, 0x12, 0x27, 0x0e, 0x00, ++ 0x65, 0x51, 0xe4, 0x76, 0x7e, 0x45, 0x26, 0x8e, 0xd9, 0x69, 0x26, 0x54, 0x44, 0x78, 0x11, 0xea, 0xb8, 0x4f, 0x04, 0x99, 0xa8, 0xa5, 0x8c, 0xf7, 0xc0, 0x4a, 0x59, 0x56, 0x98, 0x52, 0x80, 0x45, ++ 0xf2, 0x98, 0x97, 0xc8, 0xfa, 0x96, 0xd0, 0x6c, 0xce, 0x51, 0xe6, 0xaf, 0xea, 0xc4, 0x33, 0x95, 0x89, 0xc9, 0x41, 0xc8, 0x55, 0x63, 0xd7, 0x0f, 0xac, 0xe1, 0x92, 0x88, 0x94, 0xba, 0xc0, 0x36, ++ 0x19, 0xdf, 0xf4, 0xbe, 0x3f, 0x43, 0x14, 0xa3, 0xf7, 0x35, 0x1a, 0x09, 0xa4, 0x86, 0xb5, 0x04, 0x1e, 0x7c, 0xb2, 0xda, 0x8b, 0x96, 0xbc, 0x66, 0x26, 0xa4, 0x93, 0x17, 0x35, 0x7c, 0x41, 0x52, ++ 0xa5, 0x1b, 0xa3, 0xc2, 0x8c, 0x7e, 0x0c, 0x9d, 0xb4, 0x1a, 0x06, 0xa2, 0x82, 0x90, 0xf2, 0x18, 0x73, 0x11, 0x07, 0xc9, 0x54, 0xd8, 0xa6, 0x6f, 0x80, 0x1d, 0x7d, 0xe1, 0x2a, 0x03, 0x71, 0x16, ++ 0x99, 0x0b, 0x6c, 0x53, 0xc1, 0x29, 0xf1, 0x85, 0xc3, 0x45, 0xf2, 0x7e, 0x51, 0x8b, 0x2d, 0x5a, 0x91, 0x25, 0xa0, 0x70, 0x76, 0xd9, 0x91, 0xb7, 0xda, 0xc7, 0xcc, 0x65, 0xa8, 0x56, 0x2e, 0xfb, ++ 0xcc, 0x32, 0xa9, 0xca, 0x4a, 0xd9, 0x02, 0x63, 0xb0, 0x4a, 0x4f, 0x90, 0x36, 0x11, 0x6c, 0x7b, 0x97, 0x48, 0x04, 0x96, 0x31, 0x75, 0x75, 0x65, 0x0d, 0xcc, 0x21, 0x52, 0xb5, 0xbc, 0x0e, 0x74, ++ 0x40, 0x7e, 0x12, 0xfa, 0x8e, 0x4f, 0xfc, 0xcc, 0xff, 0x76, 0xc0, 0x1a, 0x97, 0x4b, 0xd6, 0x11, 0x02, 0xe1, 0xf5, 0x29, 0x64, 0x96, 0xc7, 0x1d, 0x07, 0x64, 0xe1, 0x32, 0x29, 0xff, 0xe7, 0x84, ++ 0x6f, 0x33, 0x6e, 0x34, 0xca, 0xc9, 0x04, 0xca, 0x56, 0x70, 0xf8, 0xcd, 0x50, 0x52, 0x42, 0x7a, 0x79, 0xc0, 0x91, 0xa9, 0x71, 0x21, 0x0c, 0x5c, 0xff, 0x66, 0x7a, 0xac, 0x24, 0x93, 0x66, 0xe1, ++ 0x0d, 0x2b, 0x11, 0x37, 0x6c, 0xa3, 0x9d, 0x93, 0x52, 0x04, 0xb1, 0x2c, 0xc5, 0x85, 0xe9, 0x40, 0x54, 0x03, 0x62, 0x5f, 0xb3, 0x2c, 0xb5, 0xe5, 0xc3, 0x1b, 0x62, 0x34, 0x81, 0x60, 0x51, 0x5c, ++ 0xcc, 0x4f, 0xda, 0xf5, 0x70, 0x2d, 0x6b, 0xab, 0x5c, 0x37, 0x3d, 0xb6, 0xf3, 0x50, 0xd3, 0xe6, 0x3a, 0x5c, 0xe3, 0xca, 0x54, 0x74, 0xa0, 0xcf, 0x15, 0x67, 0x04, 0x2c, 0xa3, 0x25, 0x89, 0x86, ++ 0xff, 0x75, 0xbd, 0xfc, 0xd9, 0x29, 0xe6, 0x46, 0x2f, 0x36, 0xbc, 0xcc, 0x3f, 0x5a, 0x93, 0x35, 0x2a, 0x2b, 0x36, 0xcb, 0x16, 0x2e, 0x18, 0x74, 0xc7, 0x42, 0x87, 0x0a, 0x97, 0xb1, 0x67, 0xa0, ++ 0x50, 0x37, 0x36, 0x24, 0xea, 0xeb, 0x7e, 0x50, 0x73, 0x25, 0x6b, 0x72, 0x11, 0xb2, 0xd9, 0x4b, 0x84, 0x06, 0xcd, 0x6c, 0x95, 0x33, 0xb1, 0x53, 0x64, 0x08, 0xab, 0x0a, 0x29, 0xe5, 0xb2, 0xf0, ++ 0xc9, 0x54, 0xec, 0xe0, 0x0f, 0xbb, 0xeb, 0x17, 0x6d, 0x72, 0x4d, 0x4c, 0xf4, 0x43, 0xcf, 0x70, 0x20, 0xd5, 0xfa, 0x70, 0x94, 0xcc, 0x1b, 0x1b, 0xe6, 0x97, 0xba, 0xd3, 0x36, 0x74, 0xe4, 0x09, ++ 0x9e, 0xc7, 0xbb, 0x18, 0xf4, 0x57, 0x71, 0x28, 0xcd, 0xd9, 0x7c, 0xcd, 0x6d, 0x44, 0x62, 0xe5, 0x60, 0x7c, 0x51, 0x2a, 0x3e, 0x36, 0x24, 0x8e, 0x3d, 0xda, 0xa2, 0xec, 0x08, 0x9a, 0xef, 0xc4, ++ 0xce, 0x48, 0x5c, 0x49, 0xd7, 0xb0, 0x09, 0xc8, 0xd6, 0x31, 0x15, 0xfc, 0x81, 0xff, 0x3a, 0x62, 0xd1, 0x5a, 0x88, 0x44, 0x1c, 0x03, 0xea, 0x1c, 0x2e, 0x72, 0xc4, 0x88, 0x39, 0xfc, 0x6a, 0xd7, ++ 0x3a, 0x30, 0x74, 0x4a, 0x62, 0xb7, 0xb2, 0x16, 0x45, 0xa6, 0xaf, 0x7d, 0x61, 0xb6, 0x38, 0x3b, 0x22, 0x1e, 0x21, 0x90, 0x55, 0x57, 0xcd, 0x29, 0xd9, 0x24, 0xa6, 0x09, 0x86, 0xc5, 0x11, 0xc1, ++ 0xeb, 0xbc, 0x31, 0x6d, 0x56, 0x30, 0xa2, 0x41, 0x43, 0x23, 0xf5, 0x3a, 0xd5, 0x59, 0x94, 0xf6, 0xb3, 0x65, 0x39, 0xf9, 0xc4, 0x40, 0x75, 0xa5, 0x33, 0xe4, 0x81, 0xc0, 0x84, 0x45, 0xd9, 0xca, ++ 0x9e, 0x9d, 0x38, 0x21, 0x19, 0x38, 0x8b, 0xd1, 0xd7, 0x50, 0x52, 0x21, 0x7a, 0x94, 0x4c, 0xcc, 0x7b, 0xe9, 0x09, 0xe2, 0x19, 0x71, 0x1f, 0xcc, 0x79, 0x24, 0x76, 0x92, 0x13, 0xa1, 0x92, 0x53, ++ 0x4a, 0x55, 0x80, 0x08, 0x15, 0x7a, 0x39, 0x6e, 0xdf, 0xf4, 0x80, 0xcc, 0x3b, 0x52, 0x0f, 0xf8, 0x18, 0xb3, 0x8b, 0x13, 0x5c, 0x18, 0xa8, 0x0d, 0x51, 0x05, 0xe6, 0x78, 0x83, 0x6c, 0x39, 0x5c, ++ 0x28, 0xe9, 0x2f, 0x7a, 0x3c, 0x4e, 0x93, 0xc0, 0x10, 0x35, 0xf3, 0x41, 0x11, 0xcc, 0x49, 0x02, 0xd0, 0xc0, 0x33, 0xa6, 0x3f, 0x23, 0x6a, 0x71, 0xda, 0x97, 0x4a, 0x6f, 0x40, 0x4f, 0x7a, 0xa7, ++ 0xb5, 0xe5, 0x82, 0xc7, 0x58, 0x14, 0x2f, 0xc1, 0x82, 0x6b, 0xba, 0x98, 0xb2, 0x7d, 0x57, 0xc2, 0xe2, 0x10, 0x3e, 0x10, 0xe3, 0x0d, 0x32, 0x79, 0x7b, 0x96, 0x77, 0x14, 0xd1, 0x56, 0x61, 0x11, ++ 0x13, 0x71, 0xa2, 0xd9, 0xc5, 0x39, 0x98, 0x12, 0x46, 0x46, 0x22, 0x63, 0x5b, 0x44, 0x21, 0x26, 0xb0, 0x98, 0x36, 0xb0, 0x81, 0x82, 0x72, 0x47, 0xd0, 0x54, 0x22, 0x97, 0x2b, 0xd0, 0x32, 0x0d, ++ 0x8f, 0x42, 0xbf, 0x57, 0xe3, 0x49, 0x46, 0x12, 0x34, 0xe4, 0xd9, 0x4f, 0x01, 0x18, 0x50, 0xba, 0xb5, 0xc0, 0x49, 0xb6, 0x2a, 0x59, 0x43, 0x38, 0x66, 0xfc, 0xce, 0x69, 0x66, 0x49, 0x5c, 0x26, ++ 0x5c, 0x47, 0x65, 0xa5, 0x6c, 0x06, 0xb9, 0xfc, 0x42, 0x76, 0x54, 0x87, 0x85, 0xf4, 0x68, 0x28, 0xca, 0x60, 0x2d, 0xc6, 0xd0, 0x54, 0x1f, 0x25, 0x07, 0x89, 0xc4, 0x9e, 0x8b, 0x06, 0x55, 0x9c, ++ 0x43, 0x44, 0x60, 0xa8, 0x43, 0x80, 0x98, 0x54, 0xe5, 0xb4, 0x6e, 0x89, 0x38, 0x9f, 0x10, 0xf4, 0x89, 0x66, 0x74, 0x91, 0xc1, 0x93, 0x5e, 0x8a, 0xfb, 0x9e, 0xb4, 0x71, 0x8f, 0x86, 0xac, 0x45, ++ 0x89, 0x32, 0xbc, 0xf3, 0x3c, 0x9a, 0xbe, 0xcb, 0x2d, 0xc0, 0xc0, 0x93, 0xa7, 0xe8, 0x1d, 0xa0, 0x32, 0x7b, 0xb6, 0x37, 0x52, 0x81, 0x05, 0xc3, 0x58, 0xeb, 0x76, 0x8d, 0x32, 0x3a, 0x37, 0xd4, ++ 0x0a, 0x8c, 0x19, 0x9b, 0x7c, 0x4b, 0xb1, 0xd7, 0x2b, 0x72, 0xb6, 0x90, 0xb3, 0x6d, 0xd2, 0x7a, 0x93, 0x55, 0x19, 0x1b, 0x3c, 0x3a, 0xa6, 0x75, 0xa7, 0xe6, 0xf8, 0x55, 0xeb, 0x50, 0x5f, 0x57, ++ 0x98, 0x65, 0xdb, 0xd8, 0x91, 0x05, 0x65, 0x50, 0x5e, 0x7c, 0x0f, 0xdd, 0x54, 0x5c, 0xbb, 0xb8, 0x71, 0xb0, 0xb2, 0xcc, 0x01, 0x25, 0xb7, 0x4f, 0x6b, 0x0c, 0x9b, 0x79, 0x67, 0x0a, 0x62, 0x02, ++ 0xd1, 0xb9, 0x15, 0x4a, 0xc7, 0x76, 0x6b, 0x19, 0x19, 0xc4, 0x89, 0x58, 0x90, 0x86, 0xad, 0x8b, 0x45, 0xbe, 0x0d, 0x79, 0xc9, 0x76, 0xc3, 0xc3, 0x9d, 0x6b, 0x25, 0x21, 0x3b, 0xb0, 0xb7, 0x8a, ++ 0x57, 0x50, 0xe6, 0xa8, 0xeb, 0x34, 0x33, 0x0b, 0xb3, 0xcf, 0xf2, 0xb1, 0xc0, 0x72, 0x2a, 0xc8, 0x83, 0xb0, 0x48, 0xf4, 0xb8, 0xcd, 0x06, 0x19, 0x6d, 0xa8, 0xaa, 0x8b, 0x05, 0xda, 0x42, 0x67, ++ 0x55, 0x2b, 0xf8, 0x7a, 0xbc, 0xa5, 0x12, 0x4d, 0xc3, 0x58, 0xa8, 0x38, 0x10, 0x40, 0xe9, 0xb8, 0x1f, 0xb0, 0x84, 0x43, 0x15, 0x02, 0x15, 0xd6, 0x92, 0x23, 0x28, 0x00, 0x0a, 0xc0, 0xb7, 0x88, ++ 0xb1, 0x21, 0x93, 0x1a, 0x26, 0x7d, 0x80, 0x61, 0x9c, 0xe7, 0xd2, 0x9c, 0xd7, 0x6b, 0x60, 0xcf, 0x65, 0x83, 0xdc, 0xe8, 0xce, 0xbc, 0x49, 0x01, 0x85, 0x73, 0x6c, 0x81, 0x8b, 0x25, 0xad, 0x26, ++ 0x0b, 0x66, 0x7b, 0x1f, 0xfd, 0x46, 0x20, 0x6d, 0x01, 0x04, 0x55, 0x3a, 0xa9, 0xfb, 0x30, 0x45, 0x54, 0xa2, 0x1c, 0x32, 0x72, 0x44, 0xce, 0x78, 0xaf, 0xdb, 0xd3, 0xb4, 0x62, 0x36, 0x1b, 0xb0, ++ 0x68, 0xa1, 0x55, 0x63, 0x64, 0x09, 0xf5, 0x74, 0xc5, 0x71, 0x65, 0x72, 0xe2, 0xa5, 0xf2, 0xa4, 0xb0, 0x4f, 0xb8, 0xaa, 0xd1, 0x23, 0x66, 0x84, 0x84, 0x17, 0x87, 0x56, 0x2a, 0xaf, 0x46, 0xc2, ++ 0xc0, 0xda, 0x46, 0x65, 0xea, 0xfd, 0x46, 0x5f, 0xc6, 0x4a, 0x0c, 0x5f, 0x8f, 0x3f, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9d, 0x59, 0xa5, 0x43, 0xd8, 0x20, 0x8c, 0x54, 0xa3, 0x16, 0x65, 0x29, ++ 0xb5, 0x39, 0x22, ++ }, ++ .secret_len = 32, ++ .secret = { ++ 0xfb, 0xc4, 0xee, 0xa6, 0x91, 0xee, 0xf4, 0xc1, 0xb4, 0x76, 0xa2, 0x99, 0x36, 0x45, 0x3f, 0x4c, 0x3d, 0x48, 0x81, 0x79, 0x4e, 0xe3, 0x7b, 0xaf, 0x0f, 0xd7, 0x28, 0x40, 0x74, 0x3e, 0x7b, 0x7d, ++ }, ++ .cipher_len = 1568, ++ .cipher = { ++ 0xc2, 0x7f, 0x01, 0x24, 0x4d, 0x4b, 0x3f, 0xb2, 0x1d, 0x84, 0x37, 0xf8, 0x40, 0x01, 0x7c, 0xcc, 0xb7, 0xb7, 0xda, 0xd5, 0xfb, 0x2b, 0x47, 0xb9, 0xb5, 0x7e, 0xae, 0x4f, 0x77, 0xd0, 0xa4, 0x55, ++ 0x5e, 0x50, 0x92, 0xa2, 0x49, 0x69, 0xf2, 0x27, 0x3e, 0x97, 0x02, 0x88, 0x4a, 0x08, 0x47, 0x7b, 0x56, 0x8d, 0x80, 0x17, 0xf1, 0x38, 0x75, 0xd1, 0xf5, 0xa6, 0xd4, 0x13, 0xbd, 0xd2, 0x28, 0xeb, ++ 0xb1, 0x12, 0x60, 0xf7, 0xf4, 0x52, 0x9c, 0xbc, 0xeb, 0xf9, 0xb6, 0x86, 0x2e, 0x8a, 0x84, 0x12, 0x35, 0xf2, 0x9f, 0x60, 0xf8, 0xe8, 0x41, 0x74, 0x34, 0x18, 0x9d, 0x57, 0x99, 0x20, 0xfe, 0x6b, ++ 0x98, 0xdb, 0xe7, 0x13, 0xec, 0x16, 0xc3, 0xfd, 0xdb, 0xb8, 0x1e, 0x73, 0x1d, 0x95, 0x6b, 0x06, 0xdb, 0x49, 0x80, 0xf4, 0x9c, 0x26, 0xf2, 0x86, 0x61, 0xff, 0x9c, 0xe6, 0xe9, 0xd8, 0x61, 0xec, ++ 0x7a, 0x09, 0x84, 0x0c, 0x19, 0xde, 0x0e, 0xb6, 0x72, 0x20, 0x71, 0xf8, 0xaa, 0x48, 0x36, 0x2d, 0x2f, 0xf1, 0x27, 0xa4, 0xae, 0x46, 0xf9, 0x93, 0x37, 0x82, 0x68, 0x32, 0xad, 0xac, 0x23, 0x91, ++ 0x65, 0xf2, 0x25, 0x85, 0xbb, 0x57, 0xa8, 0x89, 0xc9, 0xc6, 0xaf, 0x82, 0x36, 0x7e, 0xc7, 0xb0, 0x72, 0x37, 0xc0, 0x53, 0x5b, 0x31, 0xb3, 0x8c, 0x1c, 0xac, 0x40, 0xac, 0x1a, 0x0c, 0x95, 0x8a, ++ 0x18, 0x87, 0xfe, 0x34, 0x71, 0x10, 0x83, 0xfd, 0x37, 0xaf, 0x4b, 0xc5, 0xb1, 0xb4, 0xe1, 0xe2, 0xee, 0x28, 0x43, 0x69, 0x3d, 0x57, 0xdd, 0x1e, 0x65, 0x7d, 0x4c, 0x24, 0xed, 0x20, 0x7e, 0xe7, ++ 0x12, 0xad, 0x2a, 0x08, 0x91, 0x45, 0x81, 0x80, 0xe9, 0xe8, 0xbd, 0x36, 0xfc, 0x14, 0xd8, 0xd6, 0x33, 0xf5, 0xb7, 0x41, 0xce, 0xa1, 0x08, 0xd2, 0xd4, 0xfd, 0x75, 0x1c, 0x5a, 0x67, 0xb0, 0x5e, ++ 0x30, 0x32, 0x4a, 0x67, 0xe9, 0xdd, 0x75, 0xc9, 0x93, 0xd4, 0xfe, 0x08, 0x54, 0xfb, 0x78, 0xdf, 0x6f, 0x3d, 0x45, 0xa2, 0xa9, 0xc8, 0xe4, 0x25, 0x10, 0xf0, 0xc3, 0xd8, 0x02, 0x03, 0x71, 0x2f, ++ 0xb3, 0x9e, 0x36, 0xb5, 0xdd, 0x8b, 0x5c, 0xcd, 0x3d, 0x09, 0xce, 0xa9, 0x42, 0x03, 0xba, 0xf8, 0x72, 0x08, 0x45, 0x71, 0xec, 0xf9, 0x78, 0xbd, 0xb9, 0x54, 0x8a, 0x25, 0x0e, 0xe4, 0x90, 0x7b, ++ 0x4a, 0xfc, 0x31, 0xb2, 0x1f, 0x31, 0x9a, 0xe4, 0xbf, 0x0a, 0xb1, 0x9c, 0xbd, 0x11, 0xeb, 0xe1, 0x33, 0x59, 0xd1, 0xaa, 0xf4, 0xfd, 0xb8, 0x3b, 0x65, 0x02, 0x50, 0x14, 0x22, 0xa5, 0xfe, 0x50, ++ 0xa8, 0xa3, 0x8e, 0xf5, 0x3d, 0xeb, 0x60, 0x3c, 0xe2, 0x3f, 0xd9, 0x79, 0x2b, 0x04, 0xde, 0xb3, 0x78, 0x71, 0x9a, 0xb7, 0x69, 0xaa, 0x58, 0x97, 0xcc, 0x65, 0xe9, 0xb1, 0x63, 0x04, 0xce, 0xa5, ++ 0x37, 0xe1, 0x76, 0x2b, 0xd8, 0xc9, 0xb1, 0x09, 0xda, 0x14, 0xa8, 0x29, 0xe6, 0x41, 0x9f, 0x1b, 0x9f, 0xf8, 0xa4, 0x66, 0xe2, 0xa6, 0xd6, 0xb3, 0x4d, 0x74, 0xff, 0xe1, 0xa5, 0x92, 0x99, 0x18, ++ 0x17, 0x59, 0xd0, 0xd3, 0x87, 0xfc, 0xed, 0x1d, 0x90, 0x7f, 0x5f, 0xb5, 0xed, 0xb4, 0x26, 0xc0, 0x51, 0x30, 0xe6, 0xca, 0x59, 0x09, 0xb2, 0x76, 0xd1, 0xa4, 0x7e, 0x71, 0x3c, 0x30, 0xd9, 0x96, ++ 0xda, 0x5e, 0x8e, 0x57, 0xe7, 0x12, 0xc7, 0x77, 0x38, 0xf2, 0x1b, 0xe7, 0x4b, 0x42, 0xb5, 0x18, 0x43, 0x2d, 0xad, 0x7e, 0xf7, 0x3e, 0x6a, 0x8c, 0x43, 0xaa, 0x9a, 0x62, 0x69, 0x94, 0xd7, 0x1a, ++ 0x31, 0x81, 0x28, 0x51, 0x80, 0x6e, 0x9f, 0xbb, 0x1f, 0x2b, 0xd3, 0x56, 0xce, 0xa3, 0x9d, 0x95, 0xf2, 0xf8, 0x7c, 0xa3, 0x0d, 0xaf, 0x6f, 0x27, 0x33, 0xf7, 0xbc, 0xe7, 0x9f, 0x8d, 0xa9, 0x95, ++ 0x05, 0x1e, 0x49, 0xa7, 0xfd, 0x22, 0x64, 0x37, 0x9c, 0x0a, 0x75, 0x2e, 0x55, 0x3e, 0xd6, 0x08, 0xeb, 0x93, 0x44, 0xc7, 0x94, 0x98, 0xf6, 0x91, 0x53, 0x85, 0x64, 0xc5, 0x4f, 0x82, 0x3b, 0xb7, ++ 0x0b, 0x12, 0xb5, 0x9e, 0x88, 0x24, 0xb4, 0xa4, 0xbb, 0x1e, 0xea, 0xc6, 0x7c, 0x81, 0x0c, 0xcc, 0x2e, 0x23, 0x74, 0x47, 0x83, 0xce, 0x95, 0x80, 0x97, 0xf7, 0xa6, 0xbc, 0x6e, 0x1f, 0x17, 0x59, ++ 0x75, 0x21, 0xb8, 0xc3, 0xd1, 0xee, 0x85, 0x96, 0xa2, 0x9f, 0xfe, 0xf1, 0x4e, 0xd9, 0x16, 0x32, 0x09, 0x7c, 0x16, 0xd5, 0x06, 0x5d, 0xb2, 0xa9, 0x63, 0xca, 0x73, 0x83, 0xac, 0x60, 0xad, 0x8f, ++ 0x4e, 0xd0, 0xd4, 0x1b, 0xd0, 0xbc, 0x3b, 0xaf, 0x19, 0x8c, 0x51, 0x25, 0xae, 0x91, 0x15, 0x06, 0xc9, 0x26, 0xd4, 0xc1, 0x17, 0x85, 0xfd, 0x61, 0x82, 0x29, 0xbf, 0xf5, 0x4c, 0xb1, 0x16, 0x1a, ++ 0xb8, 0xfc, 0x7b, 0x51, 0xda, 0xec, 0xcc, 0xd9, 0x13, 0x1e, 0xdf, 0x43, 0x7d, 0x8e, 0x52, 0x8e, 0x75, 0x81, 0xb8, 0x2c, 0x66, 0x0e, 0x8c, 0x5e, 0x25, 0x12, 0xd5, 0xf6, 0x38, 0x0a, 0x52, 0x8f, ++ 0x2a, 0xe4, 0xae, 0xe2, 0x63, 0xdb, 0x96, 0x76, 0x02, 0x4b, 0xc7, 0xad, 0x39, 0x8b, 0xc9, 0xcd, 0xda, 0xd6, 0x07, 0x96, 0x8b, 0xba, 0xb2, 0x23, 0x29, 0xe0, 0x4d, 0x6e, 0x77, 0x1f, 0xe6, 0x47, ++ 0x10, 0x7a, 0xc4, 0x66, 0x67, 0xa5, 0x1a, 0xd5, 0x58, 0xa6, 0x35, 0xf0, 0x26, 0x95, 0x1f, 0x4f, 0x48, 0xc8, 0x88, 0xd7, 0x01, 0xc2, 0xaf, 0xf4, 0xea, 0xb4, 0xe3, 0x4a, 0xdb, 0x15, 0x9a, 0xbb, ++ 0xbf, 0xab, 0xe5, 0x9b, 0x3f, 0x4c, 0xf8, 0xaa, 0xb1, 0xdd, 0x66, 0x1e, 0x4d, 0xd0, 0xc5, 0x55, 0x8d, 0xc0, 0x59, 0x20, 0x2e, 0xe6, 0x46, 0x25, 0xa3, 0xb4, 0xb9, 0x2f, 0xf4, 0xd1, 0x56, 0x97, ++ 0xf1, 0x6c, 0x18, 0xd4, 0xd2, 0x33, 0x8c, 0xfb, 0x49, 0x6e, 0x07, 0x03, 0x52, 0x68, 0x71, 0xc9, 0x78, 0x4b, 0xac, 0x8e, 0xba, 0xe8, 0x27, 0x9c, 0xf2, 0x71, 0x3a, 0xf3, 0xcc, 0x2d, 0x44, 0x0e, ++ 0x8c, 0xd2, 0x00, 0x86, 0x7b, 0x85, 0x18, 0xaa, 0xd3, 0xb9, 0xe2, 0x85, 0x02, 0x7d, 0xa0, 0xad, 0xd9, 0xf0, 0x22, 0x9e, 0xd4, 0xe8, 0x42, 0xd0, 0x5e, 0x22, 0x6a, 0xda, 0xc1, 0x3a, 0x39, 0x52, ++ 0xe3, 0x83, 0x5c, 0x8f, 0xb0, 0xa4, 0x28, 0x74, 0xc9, 0x4c, 0x66, 0x1b, 0x39, 0xdf, 0x7b, 0x72, 0x88, 0x7d, 0x22, 0x7d, 0x58, 0x3c, 0xe6, 0xb3, 0xbd, 0x65, 0xf7, 0x95, 0x10, 0x7b, 0xd0, 0x93, ++ 0x38, 0x9b, 0xfe, 0xfd, 0x17, 0x68, 0xa5, 0x71, 0x6f, 0x68, 0x5b, 0x17, 0x4e, 0xd2, 0x3e, 0x94, 0xa5, 0x95, 0x6e, 0x29, 0xbb, 0x2d, 0xdb, 0x79, 0x21, 0x03, 0xe6, 0x2f, 0x68, 0x92, 0x8a, 0xcc, ++ 0x60, 0x3e, 0xec, 0x2f, 0xf5, 0x6d, 0xb1, 0x4c, 0x08, 0xb7, 0xcb, 0xe4, 0xe2, 0xb4, 0xf2, 0xe0, 0xea, 0xee, 0x54, 0x16, 0x2e, 0x95, 0xbb, 0x35, 0xef, 0x36, 0x30, 0x3e, 0xe3, 0xe6, 0xcc, 0x61, ++ 0x06, 0x13, 0x73, 0x87, 0x6f, 0x7a, 0x09, 0x6a, 0x8a, 0xf5, 0x7d, 0x78, 0x2f, 0x8c, 0x82, 0x03, 0xde, 0x93, 0x42, 0x3a, 0x37, 0x91, 0x22, 0xfe, 0x7d, 0xad, 0x77, 0x0c, 0x36, 0x90, 0xf9, 0x78, ++ 0x22, 0x84, 0x60, 0xd0, 0x25, 0xce, 0x93, 0xb1, 0xb3, 0x36, 0xc5, 0x73, 0xe4, 0xe5, 0x58, 0x40, 0xea, 0x65, 0xcf, 0xdd, 0x61, 0x22, 0xc6, 0x72, 0xc9, 0x12, 0xf5, 0x29, 0x39, 0xd9, 0xea, 0x5b, ++ 0xe0, 0x62, 0x10, 0xf5, 0xe7, 0xed, 0xb6, 0x5b, 0x66, 0x94, 0x5d, 0x70, 0x56, 0xf5, 0x59, 0xa7, 0xd6, 0x92, 0x53, 0xf4, 0xbd, 0xbc, 0x57, 0x9d, 0xe9, 0x64, 0xf3, 0xe9, 0x3a, 0x86, 0xfa, 0x38, ++ 0xb6, 0xa2, 0xc0, 0xb5, 0x43, 0x38, 0xdc, 0xe0, 0x93, 0xf0, 0xb4, 0x68, 0x4e, 0xe3, 0x61, 0x44, 0x9f, 0x16, 0xc2, 0x79, 0xa7, 0x2b, 0x77, 0x31, 0xe4, 0x46, 0x00, 0xa7, 0x02, 0x77, 0x68, 0xfd, ++ 0xd0, 0xf6, 0x43, 0xed, 0x10, 0x06, 0x4b, 0x98, 0xa9, 0xda, 0x03, 0x2f, 0x1f, 0x5d, 0xea, 0xd3, 0x11, 0xe1, 0x77, 0x33, 0x50, 0x94, 0xdb, 0x4e, 0x38, 0x51, 0x4e, 0xae, 0x15, 0xa8, 0xf8, 0xec, ++ 0xf2, 0xf2, 0x41, 0x4e, 0x37, 0x8e, 0xfb, 0xf9, 0x97, 0xb1, 0x06, 0x6b, 0x6f, 0x69, 0xd6, 0x69, 0x09, 0xa4, 0x7e, 0x29, 0x8a, 0x7f, 0xec, 0x96, 0x1a, 0x83, 0x78, 0x2e, 0x0e, 0x47, 0x0f, 0xe0, ++ 0x71, 0xde, 0xcf, 0x4b, 0x26, 0xac, 0xa6, 0xed, 0x68, 0x83, 0x59, 0xe1, 0x08, 0x50, 0x55, 0xfd, 0x2b, 0x5a, 0xe9, 0xf4, 0x91, 0x87, 0x49, 0x89, 0x7a, 0xf1, 0x33, 0x60, 0x60, 0x53, 0xd5, 0xf6, ++ 0xa8, 0x52, 0x8c, 0xcb, 0x31, 0xab, 0x7f, 0x3f, 0x2d, 0x89, 0xa9, 0x5c, 0x5f, 0x05, 0xb1, 0x57, 0x00, 0xe5, 0x32, 0xad, 0x81, 0xd5, 0x9d, 0x9d, 0xb8, 0xa2, 0xc2, 0x9c, 0xac, 0x93, 0x6e, 0x3f, ++ 0x33, 0xdf, 0xe2, 0x4b, 0x0b, 0x1b, 0x71, 0x90, 0x2d, 0xc9, 0xc3, 0x0e, 0xc8, 0xc7, 0x0b, 0xda, 0xba, 0x48, 0x4f, 0xcd, 0x2b, 0x94, 0x6d, 0x73, 0x5f, 0x16, 0xee, 0xad, 0x04, 0x03, 0x1c, 0xaf, ++ 0xde, 0x9e, 0xe0, 0x16, 0x96, 0xec, 0x9f, 0x0a, 0x8d, 0x5f, 0x36, 0xb6, 0x9c, 0x64, 0x2f, 0xfd, 0x0a, 0xd0, 0xd2, 0x54, 0x4f, 0x5e, 0x7f, 0xd8, 0x9a, 0x80, 0x49, 0x8e, 0xf6, 0x8e, 0x18, 0x16, ++ 0x17, 0xfa, 0xd4, 0x1e, 0x0b, 0xd5, 0x9b, 0xaa, 0xff, 0xee, 0xfe, 0x2f, 0x99, 0x72, 0x4c, 0x71, 0x9d, 0x47, 0xa2, 0xec, 0xba, 0x72, 0x1d, 0x76, 0xf2, 0x37, 0xeb, 0xa7, 0x3d, 0xb4, 0x7d, 0x88, ++ 0xb6, 0x99, 0xe3, 0x58, 0x2b, 0x07, 0x3c, 0x7e, 0xad, 0x2a, 0x5b, 0x3c, 0xf0, 0x24, 0x46, 0x63, 0x96, 0xf9, 0xf2, 0x82, 0x6c, 0xb7, 0x54, 0xf6, 0x60, 0x18, 0xe9, 0x50, 0x3f, 0x4a, 0xd1, 0xf9, ++ 0xd9, 0x21, 0x21, 0xaa, 0x99, 0x56, 0x50, 0x60, 0x51, 0xd5, 0x96, 0xff, 0xd4, 0x67, 0xe1, 0xaa, 0x8d, 0x96, 0x4c, 0x17, 0x67, 0xc9, 0x25, 0xb4, 0x68, 0xbb, 0xc9, 0x85, 0x06, 0x00, 0xc8, 0x43, ++ 0x49, 0x05, 0x41, 0xe8, 0x55, 0x5a, 0x3d, 0x8b, 0xd9, 0xf1, 0x87, 0x91, 0xef, 0x9e, 0xbd, 0x35, 0x94, 0xe7, 0x4c, 0x1f, 0xe3, 0xd3, 0xb8, 0x09, 0x40, 0xa8, 0xa0, 0x79, 0xf8, 0xd2, 0xca, 0x8d, ++ 0x30, 0x13, 0x4f, 0xc6, 0x6f, 0x87, 0x00, 0x81, 0x26, 0xe4, 0x3b, 0xd0, 0x6e, 0xb6, 0xe4, 0x1c, 0x3a, 0x70, 0xfa, 0x47, 0x39, 0x31, 0x9b, 0xf1, 0xa9, 0x32, 0xf0, 0x2c, 0x30, 0x64, 0x56, 0x56, ++ 0x0c, 0xda, 0x44, 0xdd, 0xac, 0x43, 0xed, 0x6d, 0x90, 0x04, 0x45, 0xf5, 0xbf, 0x85, 0xbb, 0x0c, 0xe3, 0x25, 0x94, 0x74, 0x36, 0xe0, 0xd0, 0x68, 0x5e, 0x41, 0xb1, 0x6b, 0xc7, 0x16, 0x95, 0x18, ++ 0x25, 0x9e, 0x57, 0x34, 0xfd, 0xce, 0x08, 0x0f, 0xfe, 0x85, 0x19, 0x1b, 0x1d, 0x8d, 0x8d, 0xe4, 0xdb, 0x48, 0x14, 0x3f, 0xb5, 0x64, 0x03, 0x8a, 0xce, 0x80, 0x10, 0x4d, 0x3a, 0x8d, 0x07, 0x12, ++ 0x45, 0xe2, 0xaa, 0x56, 0xc7, 0x19, 0x33, 0xf4, 0xdc, 0xf9, 0x25, 0xee, 0xe8, 0x44, 0xc8, 0x0f, 0xdd, 0xf3, 0x25, 0x1f, 0x74, 0x00, 0x6a, 0x23, 0x41, 0x33, 0x18, 0xbb, 0xfd, 0x2e, 0xd9, 0xe0, ++ 0x53, 0x51, 0xb5, 0xaa, 0xeb, 0xcc, 0x77, 0xcf, 0xac, 0x8d, 0x5f, 0x03, 0x64, 0x23, 0x1a, 0x50, 0xea, 0x86, 0x47, 0xc7, 0x2f, 0x71, 0x3e, 0x81, 0x7a, 0x20, 0x75, 0x32, 0x30, 0x29, 0xe3, 0xb8, ++ 0x8b, 0x72, 0x44, 0x22, 0x64, 0xc5, 0x97, 0xb0, 0xf1, 0xfc, 0x09, 0xf9, 0x40, 0x1c, 0xe8, 0x8a, 0xc9, 0x7c, 0x55, 0x22, 0xa5, 0x63, 0x64, 0x52, 0x3c, 0x37, 0xfe, 0xa2, 0xd6, 0xbd, 0x06, 0xb2, ++ }, ++ }, ++ { ++ .name = "Kyber Round 2, 1024 KAT 0", ++ .version = 0, ++ .keyform = CK_IBM_KYBER_KEYFORM_ROUND2_1024, ++ .sk_len = 3168, ++ .sk = { ++ 0x07, 0x63, 0x8F, 0xB6, 0x98, 0x68, 0xF3, 0xD3, 0x20, 0xE5, 0x86, 0x2B, 0xD9, 0x69, 0x33, 0xFE, 0xB3, 0x11, 0xB3, 0x62, 0x09, 0x3C, 0x9B, 0x5D, 0x50, 0x17, 0x0B, 0xCE, 0xD4, 0x3F, 0x1B, 0x53, ++ 0x6D, 0x9A, 0x20, 0x4B, 0xB1, 0xF2, 0x26, 0x95, 0x95, 0x0B, 0xA1, 0xF2, 0xA9, 0xE8, 0xEB, 0x82, 0x8B, 0x28, 0x44, 0x88, 0x76, 0x0B, 0x3F, 0xC8, 0x4F, 0xAB, 0xA0, 0x42, 0x75, 0xD5, 0x62, 0x8E, ++ 0x39, 0xC5, 0xB2, 0x47, 0x13, 0x74, 0x28, 0x3C, 0x50, 0x32, 0x99, 0xC0, 0xAB, 0x49, 0xB6, 0x6B, 0x8B, 0xBB, 0x56, 0xA4, 0x18, 0x66, 0x24, 0xF9, 0x19, 0xA2, 0xBA, 0x59, 0xBB, 0x08, 0xD8, 0x55, ++ 0x18, 0x80, 0xC2, 0xBE, 0xFC, 0x4F, 0x87, 0xF2, 0x5F, 0x59, 0xAB, 0x58, 0x7A, 0x79, 0xC3, 0x27, 0xD7, 0x92, 0xD5, 0x4C, 0x97, 0x4A, 0x69, 0x26, 0x2F, 0xF8, 0xA7, 0x89, 0x38, 0x28, 0x9E, 0x9A, ++ 0x87, 0xB6, 0x88, 0xB0, 0x83, 0xE0, 0x59, 0x5F, 0xE2, 0x18, 0xB6, 0xBB, 0x15, 0x05, 0x94, 0x1C, 0xE2, 0xE8, 0x1A, 0x5A, 0x64, 0xC5, 0xAA, 0xC6, 0x04, 0x17, 0x25, 0x69, 0x85, 0x34, 0x9E, 0xE4, ++ 0x7A, 0x52, 0x42, 0x0A, 0x5F, 0x97, 0x47, 0x7B, 0x72, 0x36, 0xAC, 0x76, 0xBC, 0x70, 0xE8, 0x28, 0x87, 0x29, 0x28, 0x7E, 0xE3, 0xE3, 0x4A, 0x3D, 0xBC, 0x36, 0x83, 0xC0, 0xB7, 0xB1, 0x00, 0x29, ++ 0xFC, 0x20, 0x34, 0x18, 0x53, 0x7E, 0x74, 0x66, 0xBA, 0x63, 0x85, 0xA8, 0xFF, 0x30, 0x1E, 0xE1, 0x27, 0x08, 0xF8, 0x2A, 0xAA, 0x1E, 0x38, 0x0F, 0xC7, 0xA8, 0x8F, 0x8F, 0x20, 0x5A, 0xB7, 0xE8, ++ 0x8D, 0x7E, 0x95, 0x95, 0x2A, 0x55, 0xBA, 0x20, 0xD0, 0x9B, 0x79, 0xA4, 0x71, 0x41, 0xD6, 0x2B, 0xF6, 0xEB, 0x7D, 0xD3, 0x07, 0xB0, 0x8E, 0xCA, 0x13, 0xA5, 0xBC, 0x5F, 0x6B, 0x68, 0x58, 0x1C, ++ 0x68, 0x65, 0xB2, 0x7B, 0xBC, 0xDD, 0xAB, 0x14, 0x2F, 0x4B, 0x2C, 0xBF, 0xF4, 0x88, 0xC8, 0xA2, 0x27, 0x05, 0xFA, 0xA9, 0x8A, 0x2B, 0x9E, 0xEA, 0x35, 0x30, 0xC7, 0x66, 0x62, 0x33, 0x5C, 0xC7, ++ 0xEA, 0x3A, 0x00, 0x77, 0x77, 0x25, 0xEB, 0xCC, 0xCD, 0x2A, 0x46, 0x36, 0xB2, 0xD9, 0x12, 0x2F, 0xF3, 0xAB, 0x77, 0x12, 0x3C, 0xE0, 0x88, 0x3C, 0x19, 0x11, 0x11, 0x5E, 0x50, 0xC9, 0xE8, 0xA9, ++ 0x41, 0x94, 0xE4, 0x8D, 0xD0, 0xD0, 0x9C, 0xFF, 0xB3, 0xAD, 0xCD, 0x2C, 0x1E, 0x92, 0x43, 0x09, 0x03, 0xD0, 0x7A, 0xDB, 0xF0, 0x05, 0x32, 0x03, 0x15, 0x75, 0xAA, 0x7F, 0x9E, 0x7B, 0x5A, 0x1F, ++ 0x33, 0x62, 0xDE, 0xC9, 0x36, 0xD4, 0x04, 0x3C, 0x05, 0xF2, 0x47, 0x6C, 0x07, 0x57, 0x8B, 0xC9, 0xCB, 0xAF, 0x2A, 0xB4, 0xE3, 0x82, 0x72, 0x7A, 0xD4, 0x16, 0x86, 0xA9, 0x6B, 0x25, 0x48, 0x82, ++ 0x0B, 0xB0, 0x3B, 0x32, 0xF1, 0x1B, 0x28, 0x11, 0xAD, 0x62, 0xF4, 0x89, 0xE9, 0x51, 0x63, 0x2A, 0xBA, 0x0D, 0x1D, 0xF8, 0x96, 0x80, 0xCC, 0x8A, 0x8B, 0x53, 0xB4, 0x81, 0xD9, 0x2A, 0x68, 0xD7, ++ 0x0B, 0x4E, 0xA1, 0xC3, 0xA6, 0xA5, 0x61, 0xC0, 0x69, 0x28, 0x82, 0xB5, 0xCA, 0x8C, 0xC9, 0x42, 0xA8, 0xD4, 0x95, 0xAF, 0xCB, 0x06, 0xDE, 0x89, 0x49, 0x8F, 0xB9, 0x35, 0xB7, 0x75, 0x90, 0x8F, ++ 0xE7, 0xA0, 0x3E, 0x32, 0x4D, 0x54, 0xCC, 0x19, 0xD4, 0xE1, 0xAA, 0xBD, 0x35, 0x93, 0xB3, 0x8B, 0x19, 0xEE, 0x13, 0x88, 0xFE, 0x49, 0x2B, 0x43, 0x12, 0x7E, 0x5A, 0x50, 0x42, 0x53, 0x78, 0x6A, ++ 0x0D, 0x69, 0xAD, 0x32, 0x60, 0x1C, 0x28, 0xE2, 0xC8, 0x85, 0x04, 0xA5, 0xBA, 0x59, 0x97, 0x06, 0x02, 0x3A, 0x61, 0x36, 0x3E, 0x17, 0xC6, 0xB9, 0xBB, 0x59, 0xBD, 0xC6, 0x97, 0x45, 0x2C, 0xD0, ++ 0x59, 0x45, 0x19, 0x83, 0xD7, 0x38, 0xCA, 0x3F, 0xD0, 0x34, 0xE3, 0xF5, 0x98, 0x88, 0x54, 0xCA, 0x05, 0x03, 0x1D, 0xB0, 0x96, 0x11, 0x49, 0x89, 0x88, 0x19, 0x7C, 0x6B, 0x30, 0xD2, 0x58, 0xDF, ++ 0xE2, 0x62, 0x65, 0x54, 0x1C, 0x89, 0xA4, 0xB3, 0x1D, 0x68, 0x64, 0xE9, 0x38, 0x9B, 0x03, 0xCB, 0x74, 0xF7, 0xEC, 0x43, 0x23, 0xFB, 0x94, 0x21, 0xA4, 0xB9, 0x79, 0x0A, 0x26, 0xD1, 0x7B, 0x03, ++ 0x98, 0xA2, 0x67, 0x67, 0x35, 0x09, 0x09, 0xF8, 0x4D, 0x57, 0xB6, 0x69, 0x4D, 0xF8, 0x30, 0x66, 0x4C, 0xA8, 0xB3, 0xC3, 0xC0, 0x3E, 0xD2, 0xAE, 0x67, 0xB8, 0x90, 0x06, 0x86, 0x8A, 0x68, 0x52, ++ 0x7C, 0xCD, 0x66, 0x64, 0x59, 0xAB, 0x7F, 0x05, 0x66, 0x71, 0x00, 0x0C, 0x61, 0x64, 0xD3, 0xA7, 0xF2, 0x66, 0xA1, 0x4D, 0x97, 0xCB, 0xD7, 0x00, 0x4D, 0x6C, 0x92, 0xCA, 0xCA, 0x77, 0x0B, 0x84, ++ 0x4A, 0x4F, 0xA9, 0xB1, 0x82, 0xE7, 0xB1, 0x8C, 0xA8, 0x85, 0x08, 0x2A, 0xC5, 0x64, 0x6F, 0xCB, 0x4A, 0x14, 0xE1, 0x68, 0x5F, 0xEB, 0x0C, 0x9C, 0xE3, 0x37, 0x2A, 0xB9, 0x53, 0x65, 0xC0, 0x4F, ++ 0xD8, 0x30, 0x84, 0xF8, 0x0A, 0x23, 0xFF, 0x10, 0xA0, 0x5B, 0xF1, 0x5F, 0x7F, 0xA5, 0xAC, 0xC6, 0xC0, 0xCB, 0x46, 0x2C, 0x33, 0xCA, 0x52, 0x4F, 0xA6, 0xB8, 0xBB, 0x35, 0x90, 0x43, 0xBA, 0x68, ++ 0x60, 0x9E, 0xAA, 0x25, 0x36, 0xE8, 0x1D, 0x08, 0x46, 0x3B, 0x19, 0x65, 0x3B, 0x54, 0x35, 0xBA, 0x94, 0x6C, 0x9A, 0xDD, 0xEB, 0x20, 0x2B, 0x04, 0xB0, 0x31, 0xCC, 0x96, 0x0D, 0xCC, 0x12, 0xE4, ++ 0x51, 0x8D, 0x42, 0x8B, 0x32, 0xB2, 0x57, 0xA4, 0xFC, 0x73, 0x13, 0xD3, 0xA7, 0x98, 0x0D, 0x80, 0x08, 0x2E, 0x93, 0x4F, 0x9D, 0x95, 0xC3, 0x2B, 0x0A, 0x01, 0x91, 0xA2, 0x36, 0x04, 0x38, 0x4D, ++ 0xD9, 0xE0, 0x79, 0xBB, 0xBA, 0xA2, 0x66, 0xD1, 0x4C, 0x3F, 0x75, 0x6B, 0x9F, 0x21, 0x33, 0x10, 0x74, 0x33, 0xA4, 0xE8, 0x3F, 0xA7, 0x18, 0x72, 0x82, 0xA8, 0x09, 0x20, 0x3A, 0x4F, 0xAF, 0x84, ++ 0x18, 0x51, 0x83, 0x3D, 0x12, 0x1A, 0xC3, 0x83, 0x84, 0x3A, 0x5E, 0x55, 0xBC, 0x23, 0x81, 0x42, 0x5E, 0x16, 0xC7, 0xDB, 0x4C, 0xC9, 0xAB, 0x5C, 0x1B, 0x0D, 0x91, 0xA4, 0x7E, 0x2B, 0x8D, 0xE0, ++ 0xE5, 0x82, 0xC8, 0x6B, 0x6B, 0x0D, 0x90, 0x7B, 0xB3, 0x60, 0xB9, 0x7F, 0x40, 0xAB, 0x5D, 0x03, 0x8F, 0x6B, 0x75, 0xC8, 0x14, 0xB2, 0x7D, 0x9B, 0x96, 0x8D, 0x41, 0x98, 0x32, 0xBC, 0x8C, 0x2B, ++ 0xEE, 0x60, 0x5E, 0xF6, 0xE5, 0x05, 0x9D, 0x33, 0x10, 0x0D, 0x90, 0x48, 0x5D, 0x37, 0x84, 0x50, 0x01, 0x42, 0x21, 0x73, 0x6C, 0x07, 0x40, 0x7C, 0xAC, 0x26, 0x04, 0x08, 0xAA, 0x64, 0x92, 0x66, ++ 0x19, 0x78, 0x8B, 0x86, 0x01, 0xC2, 0xA7, 0x52, 0xD1, 0xA6, 0xCB, 0xF8, 0x20, 0xD7, 0xC7, 0xA0, 0x47, 0x16, 0x20, 0x32, 0x25, 0xB3, 0x89, 0x5B, 0x93, 0x42, 0xD1, 0x47, 0xA8, 0x18, 0x5C, 0xFC, ++ 0x1B, 0xB6, 0x5B, 0xA0, 0x6B, 0x41, 0x42, 0x33, 0x99, 0x03, 0xC0, 0xAC, 0x46, 0x51, 0x38, 0x5B, 0x45, 0xD9, 0x8A, 0x8B, 0x19, 0xD2, 0x8C, 0xD6, 0xBA, 0xB0, 0x88, 0x78, 0x7F, 0x7E, 0xE1, 0xB1, ++ 0x24, 0x61, 0x76, 0x6B, 0x43, 0xCB, 0xCC, 0xB9, 0x64, 0x34, 0x42, 0x7D, 0x93, 0xC0, 0x65, 0x55, 0x06, 0x88, 0xF6, 0x94, 0x8E, 0xD1, 0xB5, 0x47, 0x5A, 0x42, 0x5F, 0x1B, 0x85, 0x20, 0x9D, 0x06, ++ 0x1C, 0x08, 0xB5, 0x6C, 0x1C, 0xC0, 0x69, 0xF6, 0xC0, 0xA7, 0xC6, 0xF2, 0x93, 0x58, 0xCA, 0xB9, 0x11, 0x08, 0x77, 0x32, 0xA6, 0x49, 0xD2, 0x7C, 0x9B, 0x98, 0xF9, 0xA4, 0x88, 0x79, 0x38, 0x7D, ++ 0x9B, 0x00, 0xC2, 0x59, 0x59, 0xA7, 0x16, 0x54, 0xD6, 0xF6, 0xA9, 0x46, 0x16, 0x45, 0x13, 0xE4, 0x7A, 0x75, 0xD0, 0x05, 0x98, 0x6C, 0x23, 0x63, 0xC0, 0x9F, 0x6B, 0x53, 0x7E, 0xCA, 0x78, 0xB9, ++ 0x30, 0x3A, 0x5F, 0xA4, 0x57, 0x60, 0x8A, 0x58, 0x6A, 0x65, 0x3A, 0x34, 0x7D, 0xB0, 0x4D, 0xFC, 0xC1, 0x91, 0x75, 0xB3, 0xA3, 0x01, 0x17, 0x25, 0x36, 0x06, 0x2A, 0x65, 0x8A, 0x95, 0x27, 0x75, ++ 0x70, 0xC8, 0x85, 0x2C, 0xA8, 0x97, 0x3F, 0x4A, 0xE1, 0x23, 0xA3, 0x34, 0x04, 0x7D, 0xD7, 0x11, 0xC8, 0x92, 0x7A, 0x63, 0x4A, 0x03, 0x38, 0x8A, 0x52, 0x7B, 0x03, 0x4B, 0xF7, 0xA8, 0x17, 0x0F, ++ 0xA7, 0x02, 0xC1, 0xF7, 0xC2, 0x3E, 0xC3, 0x2D, 0x18, 0xA2, 0x37, 0x48, 0x90, 0xBE, 0x9C, 0x78, 0x7A, 0x94, 0x09, 0xC8, 0x2D, 0x19, 0x2C, 0x4B, 0xB7, 0x05, 0xA2, 0xF9, 0x96, 0xCE, 0x40, 0x5D, ++ 0x85, 0xA4, 0xC1, 0xA1, 0xAB, 0x9B, 0x6A, 0xEB, 0x49, 0xCC, 0xE1, 0xC2, 0xF8, 0xA9, 0x7C, 0x35, 0x16, 0xC7, 0x2A, 0x00, 0xA4, 0x62, 0x63, 0xBA, 0xA6, 0x96, 0xBF, 0x25, 0x72, 0x77, 0x19, 0xC3, ++ 0x21, 0x64, 0x23, 0x61, 0x8F, 0xF3, 0x33, 0x80, 0x93, 0x4A, 0x6C, 0x10, 0x54, 0x5C, 0x4C, 0x5C, 0x51, 0x55, 0xB1, 0x24, 0x86, 0x18, 0x1F, 0xC7, 0xA2, 0x31, 0x98, 0x73, 0x97, 0x8B, 0x6A, 0x2A, ++ 0x67, 0x49, 0x0F, 0x82, 0x56, 0xBD, 0x21, 0x96, 0xFE, 0x17, 0x92, 0xA4, 0xC0, 0x00, 0x77, 0xB8, 0x12, 0xEA, 0xE8, 0xBE, 0xD3, 0x57, 0x24, 0x99, 0x68, 0x4A, 0xB3, 0x37, 0x18, 0x76, 0x76, 0x1E, ++ 0x45, 0x0C, 0x9F, 0x9D, 0x27, 0x68, 0xA3, 0x68, 0x06, 0xD7, 0xAB, 0x20, 0x46, 0xC9, 0x1F, 0x17, 0x59, 0x9E, 0x9A, 0xC5, 0x92, 0x99, 0x08, 0x08, 0xDC, 0xD7, 0xB4, 0xD0, 0x91, 0x90, 0x72, 0xF1, ++ 0x4E, 0xC3, 0x61, 0x77, 0x3B, 0x72, 0x52, 0x44, 0x4C, 0x32, 0x3C, 0x30, 0x83, 0x26, 0xF4, 0xA3, 0x0F, 0x86, 0x80, 0xD2, 0xF7, 0x48, 0xF5, 0x6A, 0x13, 0x2B, 0x82, 0x67, 0x4E, 0xD0, 0x18, 0x46, ++ 0x20, 0xB8, 0x2A, 0xD2, 0xCB, 0x18, 0x2C, 0x97, 0xB4, 0x81, 0x62, 0x66, 0x47, 0x49, 0x12, 0x90, 0xA0, 0x11, 0xCC, 0x73, 0x82, 0x86, 0x85, 0xA8, 0xC3, 0x67, 0xA5, 0xB9, 0xCF, 0x8D, 0x62, 0x1B, ++ 0x0D, 0x5C, 0x1E, 0xFF, 0x03, 0x17, 0x27, 0x58, 0xBD, 0x00, 0x49, 0x78, 0xC2, 0x51, 0xCD, 0x51, 0x34, 0x22, 0x28, 0x98, 0x9C, 0xAE, 0x63, 0x32, 0xAC, 0x48, 0x64, 0x37, 0xCB, 0x5C, 0x57, 0xD4, ++ 0x30, 0x74, 0x62, 0x86, 0x52, 0x53, 0xBE, 0x21, 0x7B, 0x35, 0x15, 0xC7, 0x3D, 0xF4, 0x05, 0xB7, 0xF2, 0x82, 0x17, 0xAD, 0x0B, 0x8C, 0xF6, 0x0C, 0x2F, 0xFF, 0xAA, 0x0A, 0x00, 0x48, 0xB1, 0xFB, ++ 0x4A, 0xCD, 0xCD, 0xC3, 0x8B, 0x52, 0x50, 0xCF, 0xEC, 0x35, 0x6A, 0x6D, 0xE2, 0x6C, 0xFA, 0x7A, 0x58, 0x8F, 0xDC, 0x86, 0xF9, 0x8C, 0x85, 0x4A, 0xC6, 0x4C, 0x7B, 0xFA, 0xA9, 0x6F, 0x5A, 0x32, ++ 0xCC, 0x06, 0x10, 0x93, 0x4B, 0xAA, 0x6A, 0x58, 0x6B, 0x9A, 0x20, 0x54, 0xF1, 0x3B, 0xA2, 0x74, 0x17, 0x4A, 0xA0, 0xD2, 0xB3, 0xA8, 0x1B, 0x96, 0xA9, 0x40, 0x66, 0x6F, 0x78, 0x9B, 0x5A, 0x6B, ++ 0xCD, 0xC0, 0xA6, 0xA0, 0x17, 0x8A, 0x0C, 0x9A, 0x02, 0x57, 0x8A, 0x49, 0x3F, 0x6E, 0xEA, 0x0D, 0x2E, 0x6C, 0x13, 0x95, 0x1C, 0x9F, 0x24, 0x9A, 0x5E, 0x8D, 0xD7, 0x1D, 0xD4, 0x9A, 0x74, 0x2D, ++ 0x45, 0x1F, 0x1A, 0xBB, 0xA1, 0x9A, 0xF8, 0xC5, 0x47, 0x85, 0x5E, 0x0A, 0xFC, 0x72, 0x8E, 0x90, 0xAB, 0xB4, 0x99, 0xC9, 0xBE, 0xEB, 0x76, 0x6F, 0x47, 0x29, 0xCD, 0xA2, 0x22, 0x63, 0xE3, 0x24, ++ 0xDA, 0x18, 0x71, 0x2D, 0x31, 0x6E, 0x98, 0xDC, 0x7A, 0xC8, 0xC3, 0xCA, 0x47, 0x37, 0x0E, 0xBD, 0x77, 0x0C, 0xE3, 0x2B, 0x3B, 0xD4, 0xB1, 0xA0, 0xC9, 0x52, 0x9A, 0xC6, 0xEC, 0x8E, 0xE0, 0x28, ++ 0xB1, 0xCD, 0xB2, 0x65, 0x1C, 0xB5, 0xA6, 0xBB, 0x3C, 0x0C, 0x6D, 0xF1, 0x24, 0x0A, 0x3B, 0x91, 0x4B, 0x56, 0x56, 0xC0, 0xDC, 0x51, 0xC2, 0xB9, 0x1B, 0xFC, 0xBC, 0x37, 0xA4, 0x66, 0x02, 0x87, ++ 0xD4, 0x4F, 0x81, 0xF8, 0x53, 0xC7, 0xF4, 0x9A, 0x6D, 0x06, 0x03, 0xD6, 0xD7, 0x23, 0xCB, 0xEC, 0x01, 0x5F, 0xBC, 0x43, 0x4A, 0x38, 0x24, 0x1C, 0x10, 0x9C, 0x7E, 0xD5, 0xB1, 0xCC, 0x46, 0x1A, ++ 0x2C, 0xCB, 0x9A, 0xB7, 0x14, 0x0F, 0x19, 0xF3, 0x7A, 0x13, 0xBB, 0x70, 0x1E, 0x14, 0x2B, 0xD5, 0x4B, 0x64, 0xEC, 0x6B, 0x76, 0xFE, 0xC3, 0x3B, 0x69, 0xC2, 0x91, 0x8C, 0xB0, 0x17, 0xC4, 0x14, ++ 0x34, 0x23, 0x00, 0x9A, 0x3C, 0x07, 0xB5, 0xC1, 0x81, 0xB0, 0xC1, 0xEB, 0x49, 0x4A, 0x62, 0xAB, 0xC8, 0x39, 0x13, 0x97, 0x08, 0x9E, 0xA6, 0x64, 0x09, 0x67, 0xC1, 0x20, 0x49, 0x84, 0xCD, 0x48, ++ 0x4C, 0xCC, 0xB0, 0x0A, 0x9A, 0x17, 0xD0, 0x87, 0x21, 0x84, 0x28, 0xEF, 0x3B, 0xB7, 0x08, 0x78, 0x3E, 0x12, 0x82, 0x71, 0x04, 0x41, 0x73, 0x75, 0xB6, 0x95, 0x6F, 0xB5, 0x00, 0x53, 0xD0, 0x48, ++ 0xA4, 0x79, 0x14, 0x95, 0x82, 0x4A, 0x34, 0x80, 0xA5, 0xB7, 0x83, 0x02, 0x56, 0x09, 0x6F, 0xDD, 0x72, 0x5C, 0x30, 0x8B, 0x3B, 0xE8, 0x4A, 0x07, 0xF3, 0x63, 0x2E, 0x24, 0x95, 0xC6, 0x2E, 0x96, ++ 0x39, 0x9D, 0x80, 0xBF, 0xA7, 0x45, 0xB9, 0x84, 0x1A, 0x18, 0x33, 0xBC, 0x1D, 0x27, 0xBA, 0x45, 0xA5, 0x21, 0x68, 0xEE, 0x59, 0x00, 0x6C, 0x3A, 0x3A, 0x8C, 0x4A, 0x5A, 0x4F, 0x50, 0x88, 0xFC, ++ 0x73, 0x71, 0x81, 0xAB, 0x51, 0x96, 0xF7, 0xB1, 0xB4, 0x9A, 0x2E, 0xD8, 0x13, 0x13, 0x4E, 0x11, 0x2F, 0x73, 0x0B, 0x99, 0x1C, 0x54, 0xA7, 0x19, 0x6B, 0xCF, 0x5F, 0xC7, 0x6E, 0x13, 0x4C, 0x58, ++ 0x43, 0xE1, 0x69, 0x88, 0x51, 0xB2, 0xF8, 0x69, 0xAF, 0xAF, 0xB0, 0x27, 0x87, 0xD9, 0xC2, 0xF1, 0x36, 0x90, 0x2D, 0xC7, 0xA7, 0xF3, 0xD6, 0x21, 0x56, 0xD1, 0x5E, 0xC3, 0x09, 0x56, 0x40, 0x92, ++ 0xC6, 0x1D, 0x83, 0xB0, 0x98, 0x6C, 0x48, 0x40, 0x99, 0x81, 0xF3, 0xC1, 0x86, 0x88, 0x0A, 0x2F, 0x63, 0xD5, 0x86, 0x0A, 0xB6, 0x01, 0xDE, 0xAC, 0x2B, 0x6B, 0xA1, 0xB4, 0x28, 0x17, 0x9D, 0x73, ++ 0x53, 0x3E, 0xB7, 0xA3, 0xA5, 0x11, 0x3B, 0x85, 0x61, 0xF1, 0x0B, 0x45, 0xC3, 0xCD, 0xE2, 0x82, 0xB6, 0xEA, 0xD6, 0xAB, 0x6C, 0x60, 0x4F, 0x09, 0xC1, 0x7B, 0xFD, 0xA0, 0x83, 0x13, 0xA3, 0x26, ++ 0x07, 0x67, 0x5A, 0xDF, 0x64, 0x31, 0xCA, 0x87, 0x18, 0xE9, 0xC4, 0x3A, 0x73, 0x73, 0x32, 0x27, 0xE7, 0x3B, 0xC6, 0x1A, 0xC8, 0x45, 0xBA, 0x90, 0x77, 0x55, 0xCE, 0xC6, 0x89, 0x25, 0xE5, 0xE2, ++ 0xBF, 0xE9, 0x12, 0x95, 0x9D, 0xB8, 0x6F, 0xBF, 0xE2, 0x15, 0x6F, 0xD5, 0xBB, 0xDB, 0xF0, 0xC9, 0xDF, 0x8B, 0x53, 0x02, 0xAA, 0x8D, 0x90, 0xA2, 0x2D, 0x12, 0x27, 0x0E, 0x00, 0x65, 0x51, 0xE4, ++ 0x76, 0x7E, 0x45, 0x26, 0x8E, 0xD9, 0x69, 0x26, 0x54, 0x44, 0x78, 0x11, 0xEA, 0xB8, 0x4F, 0x04, 0x99, 0xA8, 0xA5, 0x8C, 0xF7, 0xC0, 0x4A, 0x59, 0x56, 0x98, 0x52, 0x80, 0x45, 0xF2, 0x98, 0x97, ++ 0xC8, 0xFA, 0x96, 0xD0, 0x6C, 0xCE, 0x51, 0xE6, 0xAF, 0xEA, 0xC4, 0x33, 0x95, 0x89, 0xC9, 0x41, 0xC8, 0x55, 0x63, 0xD7, 0x0F, 0xAC, 0xE1, 0x92, 0x88, 0x94, 0xBA, 0xC0, 0x36, 0x19, 0xDF, 0xF4, ++ 0xBE, 0x3F, 0x43, 0x14, 0xA3, 0xF7, 0x35, 0x1A, 0x09, 0xA4, 0x86, 0xB5, 0x04, 0x1E, 0x7C, 0xB2, 0xDA, 0x8B, 0x96, 0xBC, 0x66, 0x26, 0xA4, 0x93, 0x17, 0x35, 0x7C, 0x41, 0x52, 0xA5, 0x1B, 0xA3, ++ 0xC2, 0x8C, 0x7E, 0x0C, 0x9D, 0xB4, 0x1A, 0x06, 0xA2, 0x82, 0x90, 0xF2, 0x18, 0x73, 0x11, 0x07, 0xC9, 0x54, 0xD8, 0xA6, 0x6F, 0x80, 0x1D, 0x7D, 0xE1, 0x2A, 0x03, 0x71, 0x16, 0x99, 0x0B, 0x6C, ++ 0x53, 0xC1, 0x29, 0xF1, 0x85, 0xC3, 0x45, 0xF2, 0x7E, 0x51, 0x8B, 0x2D, 0x5A, 0x91, 0x25, 0xA0, 0x70, 0x76, 0xD9, 0x91, 0xB7, 0xDA, 0xC7, 0xCC, 0x65, 0xA8, 0x56, 0x2E, 0xFB, 0xCC, 0x32, 0xA9, ++ 0xCA, 0x4A, 0xD9, 0x02, 0x63, 0xB0, 0x4A, 0x4F, 0x90, 0x36, 0x11, 0x6C, 0x7B, 0x97, 0x48, 0x04, 0x96, 0x31, 0x75, 0x75, 0x65, 0x0D, 0xCC, 0x21, 0x52, 0xB5, 0xBC, 0x0E, 0x74, 0x40, 0x7E, 0x12, ++ 0xFA, 0x8E, 0x4F, 0xFC, 0xCC, 0xFF, 0x76, 0xC0, 0x1A, 0x97, 0x4B, 0xD6, 0x11, 0x02, 0xE1, 0xF5, 0x29, 0x64, 0x96, 0xC7, 0x1D, 0x07, 0x64, 0xE1, 0x32, 0x29, 0xFF, 0xE7, 0x84, 0x6F, 0x33, 0x6E, ++ 0x34, 0xCA, 0xC9, 0x04, 0xCA, 0x56, 0x70, 0xF8, 0xCD, 0x50, 0x52, 0x42, 0x7A, 0x79, 0xC0, 0x91, 0xA9, 0x71, 0x21, 0x0C, 0x5C, 0xFF, 0x66, 0x7A, 0xAC, 0x24, 0x93, 0x66, 0xE1, 0x0D, 0x2B, 0x11, ++ 0x37, 0x6C, 0xA3, 0x9D, 0x93, 0x52, 0x04, 0xB1, 0x2C, 0xC5, 0x85, 0xE9, 0x40, 0x54, 0x03, 0x62, 0x5F, 0xB3, 0x2C, 0xB5, 0xE5, 0xC3, 0x1B, 0x62, 0x34, 0x81, 0x60, 0x51, 0x5C, 0xCC, 0x4F, 0xDA, ++ 0xF5, 0x70, 0x2D, 0x6B, 0xAB, 0x5C, 0x37, 0x3D, 0xB6, 0xF3, 0x50, 0xD3, 0xE6, 0x3A, 0x5C, 0xE3, 0xCA, 0x54, 0x74, 0xA0, 0xCF, 0x15, 0x67, 0x04, 0x2C, 0xA3, 0x25, 0x89, 0x86, 0xFF, 0x75, 0xBD, ++ 0xFC, 0xD9, 0x29, 0xE6, 0x46, 0x2F, 0x36, 0xBC, 0xCC, 0x3F, 0x5A, 0x93, 0x35, 0x2A, 0x2B, 0x36, 0xCB, 0x16, 0x2E, 0x18, 0x74, 0xC7, 0x42, 0x87, 0x0A, 0x97, 0xB1, 0x67, 0xA0, 0x50, 0x37, 0x36, ++ 0x24, 0xEA, 0xEB, 0x7E, 0x50, 0x73, 0x25, 0x6B, 0x72, 0x11, 0xB2, 0xD9, 0x4B, 0x84, 0x06, 0xCD, 0x6C, 0x95, 0x33, 0xB1, 0x53, 0x64, 0x08, 0xAB, 0x0A, 0x29, 0xE5, 0xB2, 0xF0, 0xC9, 0x54, 0xEC, ++ 0xE0, 0x0F, 0xBB, 0xEB, 0x17, 0x6D, 0x72, 0x4D, 0x4C, 0xF4, 0x43, 0xCF, 0x70, 0x20, 0xD5, 0xFA, 0x70, 0x94, 0xCC, 0x1B, 0x1B, 0xE6, 0x97, 0xBA, 0xD3, 0x36, 0x74, 0xE4, 0x09, 0x9E, 0xC7, 0xBB, ++ 0x18, 0xF4, 0x57, 0x71, 0x28, 0xCD, 0xD9, 0x7C, 0xCD, 0x6D, 0x44, 0x62, 0xE5, 0x60, 0x7C, 0x51, 0x2A, 0x3E, 0x36, 0x24, 0x8E, 0x3D, 0xDA, 0xA2, 0xEC, 0x08, 0x9A, 0xEF, 0xC4, 0xCE, 0x48, 0x5C, ++ 0x49, 0xD7, 0xB0, 0x09, 0xC8, 0xD6, 0x31, 0x15, 0xFC, 0x81, 0xFF, 0x3A, 0x62, 0xD1, 0x5A, 0x88, 0x44, 0x1C, 0x03, 0xEA, 0x1C, 0x2E, 0x72, 0xC4, 0x88, 0x39, 0xFC, 0x6A, 0xD7, 0x3A, 0x30, 0x74, ++ 0x4A, 0x62, 0xB7, 0xB2, 0x16, 0x45, 0xA6, 0xAF, 0x7D, 0x61, 0xB6, 0x38, 0x3B, 0x22, 0x1E, 0x21, 0x90, 0x55, 0x57, 0xCD, 0x29, 0xD9, 0x24, 0xA6, 0x09, 0x86, 0xC5, 0x11, 0xC1, 0xEB, 0xBC, 0x31, ++ 0x6D, 0x56, 0x30, 0xA2, 0x41, 0x43, 0x23, 0xF5, 0x3A, 0xD5, 0x59, 0x94, 0xF6, 0xB3, 0x65, 0x39, 0xF9, 0xC4, 0x40, 0x75, 0xA5, 0x33, 0xE4, 0x81, 0xC0, 0x84, 0x45, 0xD9, 0xCA, 0x9E, 0x9D, 0x38, ++ 0x21, 0x19, 0x38, 0x8B, 0xD1, 0xD7, 0x50, 0x52, 0x21, 0x7A, 0x94, 0x4C, 0xCC, 0x7B, 0xE9, 0x09, 0xE2, 0x19, 0x71, 0x1F, 0xCC, 0x79, 0x24, 0x76, 0x92, 0x13, 0xA1, 0x92, 0x53, 0x4A, 0x55, 0x80, ++ 0x08, 0x15, 0x7A, 0x39, 0x6E, 0xDF, 0xF4, 0x80, 0xCC, 0x3B, 0x52, 0x0F, 0xF8, 0x18, 0xB3, 0x8B, 0x13, 0x5C, 0x18, 0xA8, 0x0D, 0x51, 0x05, 0xE6, 0x78, 0x83, 0x6C, 0x39, 0x5C, 0x28, 0xE9, 0x2F, ++ 0x7A, 0x3C, 0x4E, 0x93, 0xC0, 0x10, 0x35, 0xF3, 0x41, 0x11, 0xCC, 0x49, 0x02, 0xD0, 0xC0, 0x33, 0xA6, 0x3F, 0x23, 0x6A, 0x71, 0xDA, 0x97, 0x4A, 0x6F, 0x40, 0x4F, 0x7A, 0xA7, 0xB5, 0xE5, 0x82, ++ 0xC7, 0x58, 0x14, 0x2F, 0xC1, 0x82, 0x6B, 0xBA, 0x98, 0xB2, 0x7D, 0x57, 0xC2, 0xE2, 0x10, 0x3E, 0x10, 0xE3, 0x0D, 0x32, 0x79, 0x7B, 0x96, 0x77, 0x14, 0xD1, 0x56, 0x61, 0x11, 0x13, 0x71, 0xA2, ++ 0xD9, 0xC5, 0x39, 0x98, 0x12, 0x46, 0x46, 0x22, 0x63, 0x5B, 0x44, 0x21, 0x26, 0xB0, 0x98, 0x36, 0xB0, 0x81, 0x82, 0x72, 0x47, 0xD0, 0x54, 0x22, 0x97, 0x2B, 0xD0, 0x32, 0x0D, 0x8F, 0x42, 0xBF, ++ 0x57, 0xE3, 0x49, 0x46, 0x12, 0x34, 0xE4, 0xD9, 0x4F, 0x01, 0x18, 0x50, 0xBA, 0xB5, 0xC0, 0x49, 0xB6, 0x2A, 0x59, 0x43, 0x38, 0x66, 0xFC, 0xCE, 0x69, 0x66, 0x49, 0x5C, 0x26, 0x5C, 0x47, 0x65, ++ 0xA5, 0x6C, 0x06, 0xB9, 0xFC, 0x42, 0x76, 0x54, 0x87, 0x85, 0xF4, 0x68, 0x28, 0xCA, 0x60, 0x2D, 0xC6, 0xD0, 0x54, 0x1F, 0x25, 0x07, 0x89, 0xC4, 0x9E, 0x8B, 0x06, 0x55, 0x9C, 0x43, 0x44, 0x60, ++ 0xA8, 0x43, 0x80, 0x98, 0x54, 0xE5, 0xB4, 0x6E, 0x89, 0x38, 0x9F, 0x10, 0xF4, 0x89, 0x66, 0x74, 0x91, 0xC1, 0x93, 0x5E, 0x8A, 0xFB, 0x9E, 0xB4, 0x71, 0x8F, 0x86, 0xAC, 0x45, 0x89, 0x32, 0xBC, ++ 0xF3, 0x3C, 0x9A, 0xBE, 0xCB, 0x2D, 0xC0, 0xC0, 0x93, 0xA7, 0xE8, 0x1D, 0xA0, 0x32, 0x7B, 0xB6, 0x37, 0x52, 0x81, 0x05, 0xC3, 0x58, 0xEB, 0x76, 0x8D, 0x32, 0x3A, 0x37, 0xD4, 0x0A, 0x8C, 0x19, ++ 0x9B, 0x7C, 0x4B, 0xB1, 0xD7, 0x2B, 0x72, 0xB6, 0x90, 0xB3, 0x6D, 0xD2, 0x7A, 0x93, 0x55, 0x19, 0x1B, 0x3C, 0x3A, 0xA6, 0x75, 0xA7, 0xE6, 0xF8, 0x55, 0xEB, 0x50, 0x5F, 0x57, 0x98, 0x65, 0xDB, ++ 0xD8, 0x91, 0x05, 0x65, 0x50, 0x5E, 0x7C, 0x0F, 0xDD, 0x54, 0x5C, 0xBB, 0xB8, 0x71, 0xB0, 0xB2, 0xCC, 0x01, 0x25, 0xB7, 0x4F, 0x6B, 0x0C, 0x9B, 0x79, 0x67, 0x0A, 0x62, 0x02, 0xD1, 0xB9, 0x15, ++ 0x4A, 0xC7, 0x76, 0x6B, 0x19, 0x19, 0xC4, 0x89, 0x58, 0x90, 0x86, 0xAD, 0x8B, 0x45, 0xBE, 0x0D, 0x79, 0xC9, 0x76, 0xC3, 0xC3, 0x9D, 0x6B, 0x25, 0x21, 0x3B, 0xB0, 0xB7, 0x8A, 0x57, 0x50, 0xE6, ++ 0xA8, 0xEB, 0x34, 0x33, 0x0B, 0xB3, 0xCF, 0xF2, 0xB1, 0xC0, 0x72, 0x2A, 0xC8, 0x83, 0xB0, 0x48, 0xF4, 0xB8, 0xCD, 0x06, 0x19, 0x6D, 0xA8, 0xAA, 0x8B, 0x05, 0xDA, 0x42, 0x67, 0x55, 0x2B, 0xF8, ++ 0x7A, 0xBC, 0xA5, 0x12, 0x4D, 0xC3, 0x58, 0xA8, 0x38, 0x10, 0x40, 0xE9, 0xB8, 0x1F, 0xB0, 0x84, 0x43, 0x15, 0x02, 0x15, 0xD6, 0x92, 0x23, 0x28, 0x00, 0x0A, 0xC0, 0xB7, 0x88, 0xB1, 0x21, 0x93, ++ 0x1A, 0x26, 0x7D, 0x80, 0x61, 0x9C, 0xE7, 0xD2, 0x9C, 0xD7, 0x6B, 0x60, 0xCF, 0x65, 0x83, 0xDC, 0xE8, 0xCE, 0xBC, 0x49, 0x01, 0x85, 0x73, 0x6C, 0x81, 0x8B, 0x25, 0xAD, 0x26, 0x0B, 0x66, 0x7B, ++ 0x1F, 0xFD, 0x46, 0x20, 0x6D, 0x01, 0x04, 0x55, 0x3A, 0xA9, 0xFB, 0x30, 0x45, 0x54, 0xA2, 0x1C, 0x32, 0x72, 0x44, 0xCE, 0x78, 0xAF, 0xDB, 0xD3, 0xB4, 0x62, 0x36, 0x1B, 0xB0, 0x68, 0xA1, 0x55, ++ 0x63, 0x64, 0x09, 0xF5, 0x74, 0xC5, 0x71, 0x65, 0x72, 0xE2, 0xA5, 0xF2, 0xA4, 0xB0, 0x4F, 0xB8, 0xAA, 0xD1, 0x23, 0x66, 0x84, 0x84, 0x17, 0x87, 0x56, 0x2A, 0xAF, 0x46, 0xC2, 0xC0, 0xDA, 0x46, ++ 0x65, 0xEA, 0xFD, 0x46, 0x5F, 0xC6, 0x4A, 0x0C, 0x5F, 0x8F, 0x3F, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9D, 0x59, 0xA5, 0x43, 0xD8, 0x20, 0x8C, 0x54, 0xA3, 0x16, 0x65, 0x29, 0xB5, 0x39, 0x22, ++ 0xA5, 0x89, 0x9A, 0x0B, 0xC4, 0x65, 0xEE, 0x5F, 0xC2, 0xC0, 0x41, 0x55, 0x58, 0x2A, 0x40, 0xAC, 0x70, 0x97, 0x61, 0xD2, 0xBE, 0x61, 0xFD, 0xC7, 0x6C, 0x59, 0x30, 0x44, 0xCE, 0xBC, 0xC7, 0xF2, ++ 0x86, 0x26, 0xED, 0x79, 0xD4, 0x51, 0x14, 0x08, 0x00, 0xE0, 0x3B, 0x59, 0xB9, 0x56, 0xF8, 0x21, 0x0E, 0x55, 0x60, 0x67, 0x40, 0x7D, 0x13, 0xDC, 0x90, 0xFA, 0x9E, 0x8B, 0x87, 0x2B, 0xFB, 0x8F, ++ }, ++ .pk_len = 1568, ++ .pk = { ++ 0xDA, 0x18, 0x71, 0x2D, 0x31, 0x6E, 0x98, 0xDC, 0x7A, 0xC8, 0xC3, 0xCA, 0x47, 0x37, 0x0E, 0xBD, 0x77, 0x0C, 0xE3, 0x2B, 0x3B, 0xD4, 0xB1, 0xA0, 0xC9, 0x52, 0x9A, 0xC6, 0xEC, 0x8E, 0xE0, 0x28, ++ 0xB1, 0xCD, 0xB2, 0x65, 0x1C, 0xB5, 0xA6, 0xBB, 0x3C, 0x0C, 0x6D, 0xF1, 0x24, 0x0A, 0x3B, 0x91, 0x4B, 0x56, 0x56, 0xC0, 0xDC, 0x51, 0xC2, 0xB9, 0x1B, 0xFC, 0xBC, 0x37, 0xA4, 0x66, 0x02, 0x87, ++ 0xD4, 0x4F, 0x81, 0xF8, 0x53, 0xC7, 0xF4, 0x9A, 0x6D, 0x06, 0x03, 0xD6, 0xD7, 0x23, 0xCB, 0xEC, 0x01, 0x5F, 0xBC, 0x43, 0x4A, 0x38, 0x24, 0x1C, 0x10, 0x9C, 0x7E, 0xD5, 0xB1, 0xCC, 0x46, 0x1A, ++ 0x2C, 0xCB, 0x9A, 0xB7, 0x14, 0x0F, 0x19, 0xF3, 0x7A, 0x13, 0xBB, 0x70, 0x1E, 0x14, 0x2B, 0xD5, 0x4B, 0x64, 0xEC, 0x6B, 0x76, 0xFE, 0xC3, 0x3B, 0x69, 0xC2, 0x91, 0x8C, 0xB0, 0x17, 0xC4, 0x14, ++ 0x34, 0x23, 0x00, 0x9A, 0x3C, 0x07, 0xB5, 0xC1, 0x81, 0xB0, 0xC1, 0xEB, 0x49, 0x4A, 0x62, 0xAB, 0xC8, 0x39, 0x13, 0x97, 0x08, 0x9E, 0xA6, 0x64, 0x09, 0x67, 0xC1, 0x20, 0x49, 0x84, 0xCD, 0x48, ++ 0x4C, 0xCC, 0xB0, 0x0A, 0x9A, 0x17, 0xD0, 0x87, 0x21, 0x84, 0x28, 0xEF, 0x3B, 0xB7, 0x08, 0x78, 0x3E, 0x12, 0x82, 0x71, 0x04, 0x41, 0x73, 0x75, 0xB6, 0x95, 0x6F, 0xB5, 0x00, 0x53, 0xD0, 0x48, ++ 0xA4, 0x79, 0x14, 0x95, 0x82, 0x4A, 0x34, 0x80, 0xA5, 0xB7, 0x83, 0x02, 0x56, 0x09, 0x6F, 0xDD, 0x72, 0x5C, 0x30, 0x8B, 0x3B, 0xE8, 0x4A, 0x07, 0xF3, 0x63, 0x2E, 0x24, 0x95, 0xC6, 0x2E, 0x96, ++ 0x39, 0x9D, 0x80, 0xBF, 0xA7, 0x45, 0xB9, 0x84, 0x1A, 0x18, 0x33, 0xBC, 0x1D, 0x27, 0xBA, 0x45, 0xA5, 0x21, 0x68, 0xEE, 0x59, 0x00, 0x6C, 0x3A, 0x3A, 0x8C, 0x4A, 0x5A, 0x4F, 0x50, 0x88, 0xFC, ++ 0x73, 0x71, 0x81, 0xAB, 0x51, 0x96, 0xF7, 0xB1, 0xB4, 0x9A, 0x2E, 0xD8, 0x13, 0x13, 0x4E, 0x11, 0x2F, 0x73, 0x0B, 0x99, 0x1C, 0x54, 0xA7, 0x19, 0x6B, 0xCF, 0x5F, 0xC7, 0x6E, 0x13, 0x4C, 0x58, ++ 0x43, 0xE1, 0x69, 0x88, 0x51, 0xB2, 0xF8, 0x69, 0xAF, 0xAF, 0xB0, 0x27, 0x87, 0xD9, 0xC2, 0xF1, 0x36, 0x90, 0x2D, 0xC7, 0xA7, 0xF3, 0xD6, 0x21, 0x56, 0xD1, 0x5E, 0xC3, 0x09, 0x56, 0x40, 0x92, ++ 0xC6, 0x1D, 0x83, 0xB0, 0x98, 0x6C, 0x48, 0x40, 0x99, 0x81, 0xF3, 0xC1, 0x86, 0x88, 0x0A, 0x2F, 0x63, 0xD5, 0x86, 0x0A, 0xB6, 0x01, 0xDE, 0xAC, 0x2B, 0x6B, 0xA1, 0xB4, 0x28, 0x17, 0x9D, 0x73, ++ 0x53, 0x3E, 0xB7, 0xA3, 0xA5, 0x11, 0x3B, 0x85, 0x61, 0xF1, 0x0B, 0x45, 0xC3, 0xCD, 0xE2, 0x82, 0xB6, 0xEA, 0xD6, 0xAB, 0x6C, 0x60, 0x4F, 0x09, 0xC1, 0x7B, 0xFD, 0xA0, 0x83, 0x13, 0xA3, 0x26, ++ 0x07, 0x67, 0x5A, 0xDF, 0x64, 0x31, 0xCA, 0x87, 0x18, 0xE9, 0xC4, 0x3A, 0x73, 0x73, 0x32, 0x27, 0xE7, 0x3B, 0xC6, 0x1A, 0xC8, 0x45, 0xBA, 0x90, 0x77, 0x55, 0xCE, 0xC6, 0x89, 0x25, 0xE5, 0xE2, ++ 0xBF, 0xE9, 0x12, 0x95, 0x9D, 0xB8, 0x6F, 0xBF, 0xE2, 0x15, 0x6F, 0xD5, 0xBB, 0xDB, 0xF0, 0xC9, 0xDF, 0x8B, 0x53, 0x02, 0xAA, 0x8D, 0x90, 0xA2, 0x2D, 0x12, 0x27, 0x0E, 0x00, 0x65, 0x51, 0xE4, ++ 0x76, 0x7E, 0x45, 0x26, 0x8E, 0xD9, 0x69, 0x26, 0x54, 0x44, 0x78, 0x11, 0xEA, 0xB8, 0x4F, 0x04, 0x99, 0xA8, 0xA5, 0x8C, 0xF7, 0xC0, 0x4A, 0x59, 0x56, 0x98, 0x52, 0x80, 0x45, 0xF2, 0x98, 0x97, ++ 0xC8, 0xFA, 0x96, 0xD0, 0x6C, 0xCE, 0x51, 0xE6, 0xAF, 0xEA, 0xC4, 0x33, 0x95, 0x89, 0xC9, 0x41, 0xC8, 0x55, 0x63, 0xD7, 0x0F, 0xAC, 0xE1, 0x92, 0x88, 0x94, 0xBA, 0xC0, 0x36, 0x19, 0xDF, 0xF4, ++ 0xBE, 0x3F, 0x43, 0x14, 0xA3, 0xF7, 0x35, 0x1A, 0x09, 0xA4, 0x86, 0xB5, 0x04, 0x1E, 0x7C, 0xB2, 0xDA, 0x8B, 0x96, 0xBC, 0x66, 0x26, 0xA4, 0x93, 0x17, 0x35, 0x7C, 0x41, 0x52, 0xA5, 0x1B, 0xA3, ++ 0xC2, 0x8C, 0x7E, 0x0C, 0x9D, 0xB4, 0x1A, 0x06, 0xA2, 0x82, 0x90, 0xF2, 0x18, 0x73, 0x11, 0x07, 0xC9, 0x54, 0xD8, 0xA6, 0x6F, 0x80, 0x1D, 0x7D, 0xE1, 0x2A, 0x03, 0x71, 0x16, 0x99, 0x0B, 0x6C, ++ 0x53, 0xC1, 0x29, 0xF1, 0x85, 0xC3, 0x45, 0xF2, 0x7E, 0x51, 0x8B, 0x2D, 0x5A, 0x91, 0x25, 0xA0, 0x70, 0x76, 0xD9, 0x91, 0xB7, 0xDA, 0xC7, 0xCC, 0x65, 0xA8, 0x56, 0x2E, 0xFB, 0xCC, 0x32, 0xA9, ++ 0xCA, 0x4A, 0xD9, 0x02, 0x63, 0xB0, 0x4A, 0x4F, 0x90, 0x36, 0x11, 0x6C, 0x7B, 0x97, 0x48, 0x04, 0x96, 0x31, 0x75, 0x75, 0x65, 0x0D, 0xCC, 0x21, 0x52, 0xB5, 0xBC, 0x0E, 0x74, 0x40, 0x7E, 0x12, ++ 0xFA, 0x8E, 0x4F, 0xFC, 0xCC, 0xFF, 0x76, 0xC0, 0x1A, 0x97, 0x4B, 0xD6, 0x11, 0x02, 0xE1, 0xF5, 0x29, 0x64, 0x96, 0xC7, 0x1D, 0x07, 0x64, 0xE1, 0x32, 0x29, 0xFF, 0xE7, 0x84, 0x6F, 0x33, 0x6E, ++ 0x34, 0xCA, 0xC9, 0x04, 0xCA, 0x56, 0x70, 0xF8, 0xCD, 0x50, 0x52, 0x42, 0x7A, 0x79, 0xC0, 0x91, 0xA9, 0x71, 0x21, 0x0C, 0x5C, 0xFF, 0x66, 0x7A, 0xAC, 0x24, 0x93, 0x66, 0xE1, 0x0D, 0x2B, 0x11, ++ 0x37, 0x6C, 0xA3, 0x9D, 0x93, 0x52, 0x04, 0xB1, 0x2C, 0xC5, 0x85, 0xE9, 0x40, 0x54, 0x03, 0x62, 0x5F, 0xB3, 0x2C, 0xB5, 0xE5, 0xC3, 0x1B, 0x62, 0x34, 0x81, 0x60, 0x51, 0x5C, 0xCC, 0x4F, 0xDA, ++ 0xF5, 0x70, 0x2D, 0x6B, 0xAB, 0x5C, 0x37, 0x3D, 0xB6, 0xF3, 0x50, 0xD3, 0xE6, 0x3A, 0x5C, 0xE3, 0xCA, 0x54, 0x74, 0xA0, 0xCF, 0x15, 0x67, 0x04, 0x2C, 0xA3, 0x25, 0x89, 0x86, 0xFF, 0x75, 0xBD, ++ 0xFC, 0xD9, 0x29, 0xE6, 0x46, 0x2F, 0x36, 0xBC, 0xCC, 0x3F, 0x5A, 0x93, 0x35, 0x2A, 0x2B, 0x36, 0xCB, 0x16, 0x2E, 0x18, 0x74, 0xC7, 0x42, 0x87, 0x0A, 0x97, 0xB1, 0x67, 0xA0, 0x50, 0x37, 0x36, ++ 0x24, 0xEA, 0xEB, 0x7E, 0x50, 0x73, 0x25, 0x6B, 0x72, 0x11, 0xB2, 0xD9, 0x4B, 0x84, 0x06, 0xCD, 0x6C, 0x95, 0x33, 0xB1, 0x53, 0x64, 0x08, 0xAB, 0x0A, 0x29, 0xE5, 0xB2, 0xF0, 0xC9, 0x54, 0xEC, ++ 0xE0, 0x0F, 0xBB, 0xEB, 0x17, 0x6D, 0x72, 0x4D, 0x4C, 0xF4, 0x43, 0xCF, 0x70, 0x20, 0xD5, 0xFA, 0x70, 0x94, 0xCC, 0x1B, 0x1B, 0xE6, 0x97, 0xBA, 0xD3, 0x36, 0x74, 0xE4, 0x09, 0x9E, 0xC7, 0xBB, ++ 0x18, 0xF4, 0x57, 0x71, 0x28, 0xCD, 0xD9, 0x7C, 0xCD, 0x6D, 0x44, 0x62, 0xE5, 0x60, 0x7C, 0x51, 0x2A, 0x3E, 0x36, 0x24, 0x8E, 0x3D, 0xDA, 0xA2, 0xEC, 0x08, 0x9A, 0xEF, 0xC4, 0xCE, 0x48, 0x5C, ++ 0x49, 0xD7, 0xB0, 0x09, 0xC8, 0xD6, 0x31, 0x15, 0xFC, 0x81, 0xFF, 0x3A, 0x62, 0xD1, 0x5A, 0x88, 0x44, 0x1C, 0x03, 0xEA, 0x1C, 0x2E, 0x72, 0xC4, 0x88, 0x39, 0xFC, 0x6A, 0xD7, 0x3A, 0x30, 0x74, ++ 0x4A, 0x62, 0xB7, 0xB2, 0x16, 0x45, 0xA6, 0xAF, 0x7D, 0x61, 0xB6, 0x38, 0x3B, 0x22, 0x1E, 0x21, 0x90, 0x55, 0x57, 0xCD, 0x29, 0xD9, 0x24, 0xA6, 0x09, 0x86, 0xC5, 0x11, 0xC1, 0xEB, 0xBC, 0x31, ++ 0x6D, 0x56, 0x30, 0xA2, 0x41, 0x43, 0x23, 0xF5, 0x3A, 0xD5, 0x59, 0x94, 0xF6, 0xB3, 0x65, 0x39, 0xF9, 0xC4, 0x40, 0x75, 0xA5, 0x33, 0xE4, 0x81, 0xC0, 0x84, 0x45, 0xD9, 0xCA, 0x9E, 0x9D, 0x38, ++ 0x21, 0x19, 0x38, 0x8B, 0xD1, 0xD7, 0x50, 0x52, 0x21, 0x7A, 0x94, 0x4C, 0xCC, 0x7B, 0xE9, 0x09, 0xE2, 0x19, 0x71, 0x1F, 0xCC, 0x79, 0x24, 0x76, 0x92, 0x13, 0xA1, 0x92, 0x53, 0x4A, 0x55, 0x80, ++ 0x08, 0x15, 0x7A, 0x39, 0x6E, 0xDF, 0xF4, 0x80, 0xCC, 0x3B, 0x52, 0x0F, 0xF8, 0x18, 0xB3, 0x8B, 0x13, 0x5C, 0x18, 0xA8, 0x0D, 0x51, 0x05, 0xE6, 0x78, 0x83, 0x6C, 0x39, 0x5C, 0x28, 0xE9, 0x2F, ++ 0x7A, 0x3C, 0x4E, 0x93, 0xC0, 0x10, 0x35, 0xF3, 0x41, 0x11, 0xCC, 0x49, 0x02, 0xD0, 0xC0, 0x33, 0xA6, 0x3F, 0x23, 0x6A, 0x71, 0xDA, 0x97, 0x4A, 0x6F, 0x40, 0x4F, 0x7A, 0xA7, 0xB5, 0xE5, 0x82, ++ 0xC7, 0x58, 0x14, 0x2F, 0xC1, 0x82, 0x6B, 0xBA, 0x98, 0xB2, 0x7D, 0x57, 0xC2, 0xE2, 0x10, 0x3E, 0x10, 0xE3, 0x0D, 0x32, 0x79, 0x7B, 0x96, 0x77, 0x14, 0xD1, 0x56, 0x61, 0x11, 0x13, 0x71, 0xA2, ++ 0xD9, 0xC5, 0x39, 0x98, 0x12, 0x46, 0x46, 0x22, 0x63, 0x5B, 0x44, 0x21, 0x26, 0xB0, 0x98, 0x36, 0xB0, 0x81, 0x82, 0x72, 0x47, 0xD0, 0x54, 0x22, 0x97, 0x2B, 0xD0, 0x32, 0x0D, 0x8F, 0x42, 0xBF, ++ 0x57, 0xE3, 0x49, 0x46, 0x12, 0x34, 0xE4, 0xD9, 0x4F, 0x01, 0x18, 0x50, 0xBA, 0xB5, 0xC0, 0x49, 0xB6, 0x2A, 0x59, 0x43, 0x38, 0x66, 0xFC, 0xCE, 0x69, 0x66, 0x49, 0x5C, 0x26, 0x5C, 0x47, 0x65, ++ 0xA5, 0x6C, 0x06, 0xB9, 0xFC, 0x42, 0x76, 0x54, 0x87, 0x85, 0xF4, 0x68, 0x28, 0xCA, 0x60, 0x2D, 0xC6, 0xD0, 0x54, 0x1F, 0x25, 0x07, 0x89, 0xC4, 0x9E, 0x8B, 0x06, 0x55, 0x9C, 0x43, 0x44, 0x60, ++ 0xA8, 0x43, 0x80, 0x98, 0x54, 0xE5, 0xB4, 0x6E, 0x89, 0x38, 0x9F, 0x10, 0xF4, 0x89, 0x66, 0x74, 0x91, 0xC1, 0x93, 0x5E, 0x8A, 0xFB, 0x9E, 0xB4, 0x71, 0x8F, 0x86, 0xAC, 0x45, 0x89, 0x32, 0xBC, ++ 0xF3, 0x3C, 0x9A, 0xBE, 0xCB, 0x2D, 0xC0, 0xC0, 0x93, 0xA7, 0xE8, 0x1D, 0xA0, 0x32, 0x7B, 0xB6, 0x37, 0x52, 0x81, 0x05, 0xC3, 0x58, 0xEB, 0x76, 0x8D, 0x32, 0x3A, 0x37, 0xD4, 0x0A, 0x8C, 0x19, ++ 0x9B, 0x7C, 0x4B, 0xB1, 0xD7, 0x2B, 0x72, 0xB6, 0x90, 0xB3, 0x6D, 0xD2, 0x7A, 0x93, 0x55, 0x19, 0x1B, 0x3C, 0x3A, 0xA6, 0x75, 0xA7, 0xE6, 0xF8, 0x55, 0xEB, 0x50, 0x5F, 0x57, 0x98, 0x65, 0xDB, ++ 0xD8, 0x91, 0x05, 0x65, 0x50, 0x5E, 0x7C, 0x0F, 0xDD, 0x54, 0x5C, 0xBB, 0xB8, 0x71, 0xB0, 0xB2, 0xCC, 0x01, 0x25, 0xB7, 0x4F, 0x6B, 0x0C, 0x9B, 0x79, 0x67, 0x0A, 0x62, 0x02, 0xD1, 0xB9, 0x15, ++ 0x4A, 0xC7, 0x76, 0x6B, 0x19, 0x19, 0xC4, 0x89, 0x58, 0x90, 0x86, 0xAD, 0x8B, 0x45, 0xBE, 0x0D, 0x79, 0xC9, 0x76, 0xC3, 0xC3, 0x9D, 0x6B, 0x25, 0x21, 0x3B, 0xB0, 0xB7, 0x8A, 0x57, 0x50, 0xE6, ++ 0xA8, 0xEB, 0x34, 0x33, 0x0B, 0xB3, 0xCF, 0xF2, 0xB1, 0xC0, 0x72, 0x2A, 0xC8, 0x83, 0xB0, 0x48, 0xF4, 0xB8, 0xCD, 0x06, 0x19, 0x6D, 0xA8, 0xAA, 0x8B, 0x05, 0xDA, 0x42, 0x67, 0x55, 0x2B, 0xF8, ++ 0x7A, 0xBC, 0xA5, 0x12, 0x4D, 0xC3, 0x58, 0xA8, 0x38, 0x10, 0x40, 0xE9, 0xB8, 0x1F, 0xB0, 0x84, 0x43, 0x15, 0x02, 0x15, 0xD6, 0x92, 0x23, 0x28, 0x00, 0x0A, 0xC0, 0xB7, 0x88, 0xB1, 0x21, 0x93, ++ 0x1A, 0x26, 0x7D, 0x80, 0x61, 0x9C, 0xE7, 0xD2, 0x9C, 0xD7, 0x6B, 0x60, 0xCF, 0x65, 0x83, 0xDC, 0xE8, 0xCE, 0xBC, 0x49, 0x01, 0x85, 0x73, 0x6C, 0x81, 0x8B, 0x25, 0xAD, 0x26, 0x0B, 0x66, 0x7B, ++ 0x1F, 0xFD, 0x46, 0x20, 0x6D, 0x01, 0x04, 0x55, 0x3A, 0xA9, 0xFB, 0x30, 0x45, 0x54, 0xA2, 0x1C, 0x32, 0x72, 0x44, 0xCE, 0x78, 0xAF, 0xDB, 0xD3, 0xB4, 0x62, 0x36, 0x1B, 0xB0, 0x68, 0xA1, 0x55, ++ 0x63, 0x64, 0x09, 0xF5, 0x74, 0xC5, 0x71, 0x65, 0x72, 0xE2, 0xA5, 0xF2, 0xA4, 0xB0, 0x4F, 0xB8, 0xAA, 0xD1, 0x23, 0x66, 0x84, 0x84, 0x17, 0x87, 0x56, 0x2A, 0xAF, 0x46, 0xC2, 0xC0, 0xDA, 0x46, ++ 0x65, 0xEA, 0xFD, 0x46, 0x5F, 0xC6, 0x4A, 0x0C, 0x5F, 0x8F, 0x3F, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9D, 0x59, 0xA5, 0x43, 0xD8, 0x20, 0x8C, 0x54, 0xA3, 0x16, 0x65, 0x29, 0xB5, 0x39, 0x22, ++ }, ++ .pkcs8_len = 0, ++ .spki_len = 0, ++ .secret_len = 32, ++ .secret = { ++ 0xfb, 0xc4, 0xee, 0xa6, 0x91, 0xee, 0xf4, 0xc1, 0xb4, 0x76, 0xa2, 0x99, 0x36, 0x45, 0x3f, 0x4c, 0x3d, 0x48, 0x81, 0x79, 0x4e, 0xe3, 0x7b, 0xaf, 0x0f, 0xd7, 0x28, 0x40, 0x74, 0x3e, 0x7b, 0x7d, ++ }, ++ .cipher_len = 1568, ++ .cipher = { ++ 0xc2, 0x7f, 0x01, 0x24, 0x4d, 0x4b, 0x3f, 0xb2, 0x1d, 0x84, 0x37, 0xf8, 0x40, 0x01, 0x7c, 0xcc, 0xb7, 0xb7, 0xda, 0xd5, 0xfb, 0x2b, 0x47, 0xb9, 0xb5, 0x7e, 0xae, 0x4f, 0x77, 0xd0, 0xa4, 0x55, ++ 0x5e, 0x50, 0x92, 0xa2, 0x49, 0x69, 0xf2, 0x27, 0x3e, 0x97, 0x02, 0x88, 0x4a, 0x08, 0x47, 0x7b, 0x56, 0x8d, 0x80, 0x17, 0xf1, 0x38, 0x75, 0xd1, 0xf5, 0xa6, 0xd4, 0x13, 0xbd, 0xd2, 0x28, 0xeb, ++ 0xb1, 0x12, 0x60, 0xf7, 0xf4, 0x52, 0x9c, 0xbc, 0xeb, 0xf9, 0xb6, 0x86, 0x2e, 0x8a, 0x84, 0x12, 0x35, 0xf2, 0x9f, 0x60, 0xf8, 0xe8, 0x41, 0x74, 0x34, 0x18, 0x9d, 0x57, 0x99, 0x20, 0xfe, 0x6b, ++ 0x98, 0xdb, 0xe7, 0x13, 0xec, 0x16, 0xc3, 0xfd, 0xdb, 0xb8, 0x1e, 0x73, 0x1d, 0x95, 0x6b, 0x06, 0xdb, 0x49, 0x80, 0xf4, 0x9c, 0x26, 0xf2, 0x86, 0x61, 0xff, 0x9c, 0xe6, 0xe9, 0xd8, 0x61, 0xec, ++ 0x7a, 0x09, 0x84, 0x0c, 0x19, 0xde, 0x0e, 0xb6, 0x72, 0x20, 0x71, 0xf8, 0xaa, 0x48, 0x36, 0x2d, 0x2f, 0xf1, 0x27, 0xa4, 0xae, 0x46, 0xf9, 0x93, 0x37, 0x82, 0x68, 0x32, 0xad, 0xac, 0x23, 0x91, ++ 0x65, 0xf2, 0x25, 0x85, 0xbb, 0x57, 0xa8, 0x89, 0xc9, 0xc6, 0xaf, 0x82, 0x36, 0x7e, 0xc7, 0xb0, 0x72, 0x37, 0xc0, 0x53, 0x5b, 0x31, 0xb3, 0x8c, 0x1c, 0xac, 0x40, 0xac, 0x1a, 0x0c, 0x95, 0x8a, ++ 0x18, 0x87, 0xfe, 0x34, 0x71, 0x10, 0x83, 0xfd, 0x37, 0xaf, 0x4b, 0xc5, 0xb1, 0xb4, 0xe1, 0xe2, 0xee, 0x28, 0x43, 0x69, 0x3d, 0x57, 0xdd, 0x1e, 0x65, 0x7d, 0x4c, 0x24, 0xed, 0x20, 0x7e, 0xe7, ++ 0x12, 0xad, 0x2a, 0x08, 0x91, 0x45, 0x81, 0x80, 0xe9, 0xe8, 0xbd, 0x36, 0xfc, 0x14, 0xd8, 0xd6, 0x33, 0xf5, 0xb7, 0x41, 0xce, 0xa1, 0x08, 0xd2, 0xd4, 0xfd, 0x75, 0x1c, 0x5a, 0x67, 0xb0, 0x5e, ++ 0x30, 0x32, 0x4a, 0x67, 0xe9, 0xdd, 0x75, 0xc9, 0x93, 0xd4, 0xfe, 0x08, 0x54, 0xfb, 0x78, 0xdf, 0x6f, 0x3d, 0x45, 0xa2, 0xa9, 0xc8, 0xe4, 0x25, 0x10, 0xf0, 0xc3, 0xd8, 0x02, 0x03, 0x71, 0x2f, ++ 0xb3, 0x9e, 0x36, 0xb5, 0xdd, 0x8b, 0x5c, 0xcd, 0x3d, 0x09, 0xce, 0xa9, 0x42, 0x03, 0xba, 0xf8, 0x72, 0x08, 0x45, 0x71, 0xec, 0xf9, 0x78, 0xbd, 0xb9, 0x54, 0x8a, 0x25, 0x0e, 0xe4, 0x90, 0x7b, ++ 0x4a, 0xfc, 0x31, 0xb2, 0x1f, 0x31, 0x9a, 0xe4, 0xbf, 0x0a, 0xb1, 0x9c, 0xbd, 0x11, 0xeb, 0xe1, 0x33, 0x59, 0xd1, 0xaa, 0xf4, 0xfd, 0xb8, 0x3b, 0x65, 0x02, 0x50, 0x14, 0x22, 0xa5, 0xfe, 0x50, ++ 0xa8, 0xa3, 0x8e, 0xf5, 0x3d, 0xeb, 0x60, 0x3c, 0xe2, 0x3f, 0xd9, 0x79, 0x2b, 0x04, 0xde, 0xb3, 0x78, 0x71, 0x9a, 0xb7, 0x69, 0xaa, 0x58, 0x97, 0xcc, 0x65, 0xe9, 0xb1, 0x63, 0x04, 0xce, 0xa5, ++ 0x37, 0xe1, 0x76, 0x2b, 0xd8, 0xc9, 0xb1, 0x09, 0xda, 0x14, 0xa8, 0x29, 0xe6, 0x41, 0x9f, 0x1b, 0x9f, 0xf8, 0xa4, 0x66, 0xe2, 0xa6, 0xd6, 0xb3, 0x4d, 0x74, 0xff, 0xe1, 0xa5, 0x92, 0x99, 0x18, ++ 0x17, 0x59, 0xd0, 0xd3, 0x87, 0xfc, 0xed, 0x1d, 0x90, 0x7f, 0x5f, 0xb5, 0xed, 0xb4, 0x26, 0xc0, 0x51, 0x30, 0xe6, 0xca, 0x59, 0x09, 0xb2, 0x76, 0xd1, 0xa4, 0x7e, 0x71, 0x3c, 0x30, 0xd9, 0x96, ++ 0xda, 0x5e, 0x8e, 0x57, 0xe7, 0x12, 0xc7, 0x77, 0x38, 0xf2, 0x1b, 0xe7, 0x4b, 0x42, 0xb5, 0x18, 0x43, 0x2d, 0xad, 0x7e, 0xf7, 0x3e, 0x6a, 0x8c, 0x43, 0xaa, 0x9a, 0x62, 0x69, 0x94, 0xd7, 0x1a, ++ 0x31, 0x81, 0x28, 0x51, 0x80, 0x6e, 0x9f, 0xbb, 0x1f, 0x2b, 0xd3, 0x56, 0xce, 0xa3, 0x9d, 0x95, 0xf2, 0xf8, 0x7c, 0xa3, 0x0d, 0xaf, 0x6f, 0x27, 0x33, 0xf7, 0xbc, 0xe7, 0x9f, 0x8d, 0xa9, 0x95, ++ 0x05, 0x1e, 0x49, 0xa7, 0xfd, 0x22, 0x64, 0x37, 0x9c, 0x0a, 0x75, 0x2e, 0x55, 0x3e, 0xd6, 0x08, 0xeb, 0x93, 0x44, 0xc7, 0x94, 0x98, 0xf6, 0x91, 0x53, 0x85, 0x64, 0xc5, 0x4f, 0x82, 0x3b, 0xb7, ++ 0x0b, 0x12, 0xb5, 0x9e, 0x88, 0x24, 0xb4, 0xa4, 0xbb, 0x1e, 0xea, 0xc6, 0x7c, 0x81, 0x0c, 0xcc, 0x2e, 0x23, 0x74, 0x47, 0x83, 0xce, 0x95, 0x80, 0x97, 0xf7, 0xa6, 0xbc, 0x6e, 0x1f, 0x17, 0x59, ++ 0x75, 0x21, 0xb8, 0xc3, 0xd1, 0xee, 0x85, 0x96, 0xa2, 0x9f, 0xfe, 0xf1, 0x4e, 0xd9, 0x16, 0x32, 0x09, 0x7c, 0x16, 0xd5, 0x06, 0x5d, 0xb2, 0xa9, 0x63, 0xca, 0x73, 0x83, 0xac, 0x60, 0xad, 0x8f, ++ 0x4e, 0xd0, 0xd4, 0x1b, 0xd0, 0xbc, 0x3b, 0xaf, 0x19, 0x8c, 0x51, 0x25, 0xae, 0x91, 0x15, 0x06, 0xc9, 0x26, 0xd4, 0xc1, 0x17, 0x85, 0xfd, 0x61, 0x82, 0x29, 0xbf, 0xf5, 0x4c, 0xb1, 0x16, 0x1a, ++ 0xb8, 0xfc, 0x7b, 0x51, 0xda, 0xec, 0xcc, 0xd9, 0x13, 0x1e, 0xdf, 0x43, 0x7d, 0x8e, 0x52, 0x8e, 0x75, 0x81, 0xb8, 0x2c, 0x66, 0x0e, 0x8c, 0x5e, 0x25, 0x12, 0xd5, 0xf6, 0x38, 0x0a, 0x52, 0x8f, ++ 0x2a, 0xe4, 0xae, 0xe2, 0x63, 0xdb, 0x96, 0x76, 0x02, 0x4b, 0xc7, 0xad, 0x39, 0x8b, 0xc9, 0xcd, 0xda, 0xd6, 0x07, 0x96, 0x8b, 0xba, 0xb2, 0x23, 0x29, 0xe0, 0x4d, 0x6e, 0x77, 0x1f, 0xe6, 0x47, ++ 0x10, 0x7a, 0xc4, 0x66, 0x67, 0xa5, 0x1a, 0xd5, 0x58, 0xa6, 0x35, 0xf0, 0x26, 0x95, 0x1f, 0x4f, 0x48, 0xc8, 0x88, 0xd7, 0x01, 0xc2, 0xaf, 0xf4, 0xea, 0xb4, 0xe3, 0x4a, 0xdb, 0x15, 0x9a, 0xbb, ++ 0xbf, 0xab, 0xe5, 0x9b, 0x3f, 0x4c, 0xf8, 0xaa, 0xb1, 0xdd, 0x66, 0x1e, 0x4d, 0xd0, 0xc5, 0x55, 0x8d, 0xc0, 0x59, 0x20, 0x2e, 0xe6, 0x46, 0x25, 0xa3, 0xb4, 0xb9, 0x2f, 0xf4, 0xd1, 0x56, 0x97, ++ 0xf1, 0x6c, 0x18, 0xd4, 0xd2, 0x33, 0x8c, 0xfb, 0x49, 0x6e, 0x07, 0x03, 0x52, 0x68, 0x71, 0xc9, 0x78, 0x4b, 0xac, 0x8e, 0xba, 0xe8, 0x27, 0x9c, 0xf2, 0x71, 0x3a, 0xf3, 0xcc, 0x2d, 0x44, 0x0e, ++ 0x8c, 0xd2, 0x00, 0x86, 0x7b, 0x85, 0x18, 0xaa, 0xd3, 0xb9, 0xe2, 0x85, 0x02, 0x7d, 0xa0, 0xad, 0xd9, 0xf0, 0x22, 0x9e, 0xd4, 0xe8, 0x42, 0xd0, 0x5e, 0x22, 0x6a, 0xda, 0xc1, 0x3a, 0x39, 0x52, ++ 0xe3, 0x83, 0x5c, 0x8f, 0xb0, 0xa4, 0x28, 0x74, 0xc9, 0x4c, 0x66, 0x1b, 0x39, 0xdf, 0x7b, 0x72, 0x88, 0x7d, 0x22, 0x7d, 0x58, 0x3c, 0xe6, 0xb3, 0xbd, 0x65, 0xf7, 0x95, 0x10, 0x7b, 0xd0, 0x93, ++ 0x38, 0x9b, 0xfe, 0xfd, 0x17, 0x68, 0xa5, 0x71, 0x6f, 0x68, 0x5b, 0x17, 0x4e, 0xd2, 0x3e, 0x94, 0xa5, 0x95, 0x6e, 0x29, 0xbb, 0x2d, 0xdb, 0x79, 0x21, 0x03, 0xe6, 0x2f, 0x68, 0x92, 0x8a, 0xcc, ++ 0x60, 0x3e, 0xec, 0x2f, 0xf5, 0x6d, 0xb1, 0x4c, 0x08, 0xb7, 0xcb, 0xe4, 0xe2, 0xb4, 0xf2, 0xe0, 0xea, 0xee, 0x54, 0x16, 0x2e, 0x95, 0xbb, 0x35, 0xef, 0x36, 0x30, 0x3e, 0xe3, 0xe6, 0xcc, 0x61, ++ 0x06, 0x13, 0x73, 0x87, 0x6f, 0x7a, 0x09, 0x6a, 0x8a, 0xf5, 0x7d, 0x78, 0x2f, 0x8c, 0x82, 0x03, 0xde, 0x93, 0x42, 0x3a, 0x37, 0x91, 0x22, 0xfe, 0x7d, 0xad, 0x77, 0x0c, 0x36, 0x90, 0xf9, 0x78, ++ 0x22, 0x84, 0x60, 0xd0, 0x25, 0xce, 0x93, 0xb1, 0xb3, 0x36, 0xc5, 0x73, 0xe4, 0xe5, 0x58, 0x40, 0xea, 0x65, 0xcf, 0xdd, 0x61, 0x22, 0xc6, 0x72, 0xc9, 0x12, 0xf5, 0x29, 0x39, 0xd9, 0xea, 0x5b, ++ 0xe0, 0x62, 0x10, 0xf5, 0xe7, 0xed, 0xb6, 0x5b, 0x66, 0x94, 0x5d, 0x70, 0x56, 0xf5, 0x59, 0xa7, 0xd6, 0x92, 0x53, 0xf4, 0xbd, 0xbc, 0x57, 0x9d, 0xe9, 0x64, 0xf3, 0xe9, 0x3a, 0x86, 0xfa, 0x38, ++ 0xb6, 0xa2, 0xc0, 0xb5, 0x43, 0x38, 0xdc, 0xe0, 0x93, 0xf0, 0xb4, 0x68, 0x4e, 0xe3, 0x61, 0x44, 0x9f, 0x16, 0xc2, 0x79, 0xa7, 0x2b, 0x77, 0x31, 0xe4, 0x46, 0x00, 0xa7, 0x02, 0x77, 0x68, 0xfd, ++ 0xd0, 0xf6, 0x43, 0xed, 0x10, 0x06, 0x4b, 0x98, 0xa9, 0xda, 0x03, 0x2f, 0x1f, 0x5d, 0xea, 0xd3, 0x11, 0xe1, 0x77, 0x33, 0x50, 0x94, 0xdb, 0x4e, 0x38, 0x51, 0x4e, 0xae, 0x15, 0xa8, 0xf8, 0xec, ++ 0xf2, 0xf2, 0x41, 0x4e, 0x37, 0x8e, 0xfb, 0xf9, 0x97, 0xb1, 0x06, 0x6b, 0x6f, 0x69, 0xd6, 0x69, 0x09, 0xa4, 0x7e, 0x29, 0x8a, 0x7f, 0xec, 0x96, 0x1a, 0x83, 0x78, 0x2e, 0x0e, 0x47, 0x0f, 0xe0, ++ 0x71, 0xde, 0xcf, 0x4b, 0x26, 0xac, 0xa6, 0xed, 0x68, 0x83, 0x59, 0xe1, 0x08, 0x50, 0x55, 0xfd, 0x2b, 0x5a, 0xe9, 0xf4, 0x91, 0x87, 0x49, 0x89, 0x7a, 0xf1, 0x33, 0x60, 0x60, 0x53, 0xd5, 0xf6, ++ 0xa8, 0x52, 0x8c, 0xcb, 0x31, 0xab, 0x7f, 0x3f, 0x2d, 0x89, 0xa9, 0x5c, 0x5f, 0x05, 0xb1, 0x57, 0x00, 0xe5, 0x32, 0xad, 0x81, 0xd5, 0x9d, 0x9d, 0xb8, 0xa2, 0xc2, 0x9c, 0xac, 0x93, 0x6e, 0x3f, ++ 0x33, 0xdf, 0xe2, 0x4b, 0x0b, 0x1b, 0x71, 0x90, 0x2d, 0xc9, 0xc3, 0x0e, 0xc8, 0xc7, 0x0b, 0xda, 0xba, 0x48, 0x4f, 0xcd, 0x2b, 0x94, 0x6d, 0x73, 0x5f, 0x16, 0xee, 0xad, 0x04, 0x03, 0x1c, 0xaf, ++ 0xde, 0x9e, 0xe0, 0x16, 0x96, 0xec, 0x9f, 0x0a, 0x8d, 0x5f, 0x36, 0xb6, 0x9c, 0x64, 0x2f, 0xfd, 0x0a, 0xd0, 0xd2, 0x54, 0x4f, 0x5e, 0x7f, 0xd8, 0x9a, 0x80, 0x49, 0x8e, 0xf6, 0x8e, 0x18, 0x16, ++ 0x17, 0xfa, 0xd4, 0x1e, 0x0b, 0xd5, 0x9b, 0xaa, 0xff, 0xee, 0xfe, 0x2f, 0x99, 0x72, 0x4c, 0x71, 0x9d, 0x47, 0xa2, 0xec, 0xba, 0x72, 0x1d, 0x76, 0xf2, 0x37, 0xeb, 0xa7, 0x3d, 0xb4, 0x7d, 0x88, ++ 0xb6, 0x99, 0xe3, 0x58, 0x2b, 0x07, 0x3c, 0x7e, 0xad, 0x2a, 0x5b, 0x3c, 0xf0, 0x24, 0x46, 0x63, 0x96, 0xf9, 0xf2, 0x82, 0x6c, 0xb7, 0x54, 0xf6, 0x60, 0x18, 0xe9, 0x50, 0x3f, 0x4a, 0xd1, 0xf9, ++ 0xd9, 0x21, 0x21, 0xaa, 0x99, 0x56, 0x50, 0x60, 0x51, 0xd5, 0x96, 0xff, 0xd4, 0x67, 0xe1, 0xaa, 0x8d, 0x96, 0x4c, 0x17, 0x67, 0xc9, 0x25, 0xb4, 0x68, 0xbb, 0xc9, 0x85, 0x06, 0x00, 0xc8, 0x43, ++ 0x49, 0x05, 0x41, 0xe8, 0x55, 0x5a, 0x3d, 0x8b, 0xd9, 0xf1, 0x87, 0x91, 0xef, 0x9e, 0xbd, 0x35, 0x94, 0xe7, 0x4c, 0x1f, 0xe3, 0xd3, 0xb8, 0x09, 0x40, 0xa8, 0xa0, 0x79, 0xf8, 0xd2, 0xca, 0x8d, ++ 0x30, 0x13, 0x4f, 0xc6, 0x6f, 0x87, 0x00, 0x81, 0x26, 0xe4, 0x3b, 0xd0, 0x6e, 0xb6, 0xe4, 0x1c, 0x3a, 0x70, 0xfa, 0x47, 0x39, 0x31, 0x9b, 0xf1, 0xa9, 0x32, 0xf0, 0x2c, 0x30, 0x64, 0x56, 0x56, ++ 0x0c, 0xda, 0x44, 0xdd, 0xac, 0x43, 0xed, 0x6d, 0x90, 0x04, 0x45, 0xf5, 0xbf, 0x85, 0xbb, 0x0c, 0xe3, 0x25, 0x94, 0x74, 0x36, 0xe0, 0xd0, 0x68, 0x5e, 0x41, 0xb1, 0x6b, 0xc7, 0x16, 0x95, 0x18, ++ 0x25, 0x9e, 0x57, 0x34, 0xfd, 0xce, 0x08, 0x0f, 0xfe, 0x85, 0x19, 0x1b, 0x1d, 0x8d, 0x8d, 0xe4, 0xdb, 0x48, 0x14, 0x3f, 0xb5, 0x64, 0x03, 0x8a, 0xce, 0x80, 0x10, 0x4d, 0x3a, 0x8d, 0x07, 0x12, ++ 0x45, 0xe2, 0xaa, 0x56, 0xc7, 0x19, 0x33, 0xf4, 0xdc, 0xf9, 0x25, 0xee, 0xe8, 0x44, 0xc8, 0x0f, 0xdd, 0xf3, 0x25, 0x1f, 0x74, 0x00, 0x6a, 0x23, 0x41, 0x33, 0x18, 0xbb, 0xfd, 0x2e, 0xd9, 0xe0, ++ 0x53, 0x51, 0xb5, 0xaa, 0xeb, 0xcc, 0x77, 0xcf, 0xac, 0x8d, 0x5f, 0x03, 0x64, 0x23, 0x1a, 0x50, 0xea, 0x86, 0x47, 0xc7, 0x2f, 0x71, 0x3e, 0x81, 0x7a, 0x20, 0x75, 0x32, 0x30, 0x29, 0xe3, 0xb8, ++ 0x8b, 0x72, 0x44, 0x22, 0x64, 0xc5, 0x97, 0xb0, 0xf1, 0xfc, 0x09, 0xf9, 0x40, 0x1c, 0xe8, 0x8a, 0xc9, 0x7c, 0x55, 0x22, 0xa5, 0x63, 0x64, 0x52, 0x3c, 0x37, 0xfe, 0xa2, 0xd6, 0xbd, 0x06, 0xb2, ++ }, ++ }, ++ { ++ .name = "Kyber Round 2, 1024 KAT 1 (PKCS#8/SPKI)", ++ .version = 0, ++ .keyform = 0, ++ .pk_len = 0, ++ .sk_len = 0, ++ .pkcs8_len = 4849, ++ .pkcs8 = { ++ 0x30, 0x82, 0x12, 0xed, 0x02, 0x01, 0x00, 0x30, 0x0f, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0b, 0x05, 0x04, 0x04, 0x05, 0x00, 0x04, 0x82, 0x12, 0xd5, 0x30, 0x82, 0x12, 0xd1, ++ 0x02, 0x01, 0x00, 0x03, 0x82, 0x0c, 0x61, 0x00, 0x07, 0x63, 0x8f, 0xb6, 0x98, 0x68, 0xf3, 0xd3, 0x20, 0xe5, 0x86, 0x2b, 0xd9, 0x69, 0x33, 0xfe, 0xb3, 0x11, 0xb3, 0x62, 0x09, 0x3c, 0x9b, 0x5d, ++ 0x50, 0x17, 0x0b, 0xce, 0xd4, 0x3f, 0x1b, 0x53, 0x6d, 0x9a, 0x20, 0x4b, 0xb1, 0xf2, 0x26, 0x95, 0x95, 0x0b, 0xa1, 0xf2, 0xa9, 0xe8, 0xeb, 0x82, 0x8b, 0x28, 0x44, 0x88, 0x76, 0x0b, 0x3f, 0xc8, ++ 0x4f, 0xab, 0xa0, 0x42, 0x75, 0xd5, 0x62, 0x8e, 0x39, 0xc5, 0xb2, 0x47, 0x13, 0x74, 0x28, 0x3c, 0x50, 0x32, 0x99, 0xc0, 0xab, 0x49, 0xb6, 0x6b, 0x8b, 0xbb, 0x56, 0xa4, 0x18, 0x66, 0x24, 0xf9, ++ 0x19, 0xa2, 0xba, 0x59, 0xbb, 0x08, 0xd8, 0x55, 0x18, 0x80, 0xc2, 0xbe, 0xfc, 0x4f, 0x87, 0xf2, 0x5f, 0x59, 0xab, 0x58, 0x7a, 0x79, 0xc3, 0x27, 0xd7, 0x92, 0xd5, 0x4c, 0x97, 0x4a, 0x69, 0x26, ++ 0x2f, 0xf8, 0xa7, 0x89, 0x38, 0x28, 0x9e, 0x9a, 0x87, 0xb6, 0x88, 0xb0, 0x83, 0xe0, 0x59, 0x5f, 0xe2, 0x18, 0xb6, 0xbb, 0x15, 0x05, 0x94, 0x1c, 0xe2, 0xe8, 0x1a, 0x5a, 0x64, 0xc5, 0xaa, 0xc6, ++ 0x04, 0x17, 0x25, 0x69, 0x85, 0x34, 0x9e, 0xe4, 0x7a, 0x52, 0x42, 0x0a, 0x5f, 0x97, 0x47, 0x7b, 0x72, 0x36, 0xac, 0x76, 0xbc, 0x70, 0xe8, 0x28, 0x87, 0x29, 0x28, 0x7e, 0xe3, 0xe3, 0x4a, 0x3d, ++ 0xbc, 0x36, 0x83, 0xc0, 0xb7, 0xb1, 0x00, 0x29, 0xfc, 0x20, 0x34, 0x18, 0x53, 0x7e, 0x74, 0x66, 0xba, 0x63, 0x85, 0xa8, 0xff, 0x30, 0x1e, 0xe1, 0x27, 0x08, 0xf8, 0x2a, 0xaa, 0x1e, 0x38, 0x0f, ++ 0xc7, 0xa8, 0x8f, 0x8f, 0x20, 0x5a, 0xb7, 0xe8, 0x8d, 0x7e, 0x95, 0x95, 0x2a, 0x55, 0xba, 0x20, 0xd0, 0x9b, 0x79, 0xa4, 0x71, 0x41, 0xd6, 0x2b, 0xf6, 0xeb, 0x7d, 0xd3, 0x07, 0xb0, 0x8e, 0xca, ++ 0x13, 0xa5, 0xbc, 0x5f, 0x6b, 0x68, 0x58, 0x1c, 0x68, 0x65, 0xb2, 0x7b, 0xbc, 0xdd, 0xab, 0x14, 0x2f, 0x4b, 0x2c, 0xbf, 0xf4, 0x88, 0xc8, 0xa2, 0x27, 0x05, 0xfa, 0xa9, 0x8a, 0x2b, 0x9e, 0xea, ++ 0x35, 0x30, 0xc7, 0x66, 0x62, 0x33, 0x5c, 0xc7, 0xea, 0x3a, 0x00, 0x77, 0x77, 0x25, 0xeb, 0xcc, 0xcd, 0x2a, 0x46, 0x36, 0xb2, 0xd9, 0x12, 0x2f, 0xf3, 0xab, 0x77, 0x12, 0x3c, 0xe0, 0x88, 0x3c, ++ 0x19, 0x11, 0x11, 0x5e, 0x50, 0xc9, 0xe8, 0xa9, 0x41, 0x94, 0xe4, 0x8d, 0xd0, 0xd0, 0x9c, 0xff, 0xb3, 0xad, 0xcd, 0x2c, 0x1e, 0x92, 0x43, 0x09, 0x03, 0xd0, 0x7a, 0xdb, 0xf0, 0x05, 0x32, 0x03, ++ 0x15, 0x75, 0xaa, 0x7f, 0x9e, 0x7b, 0x5a, 0x1f, 0x33, 0x62, 0xde, 0xc9, 0x36, 0xd4, 0x04, 0x3c, 0x05, 0xf2, 0x47, 0x6c, 0x07, 0x57, 0x8b, 0xc9, 0xcb, 0xaf, 0x2a, 0xb4, 0xe3, 0x82, 0x72, 0x7a, ++ 0xd4, 0x16, 0x86, 0xa9, 0x6b, 0x25, 0x48, 0x82, 0x0b, 0xb0, 0x3b, 0x32, 0xf1, 0x1b, 0x28, 0x11, 0xad, 0x62, 0xf4, 0x89, 0xe9, 0x51, 0x63, 0x2a, 0xba, 0x0d, 0x1d, 0xf8, 0x96, 0x80, 0xcc, 0x8a, ++ 0x8b, 0x53, 0xb4, 0x81, 0xd9, 0x2a, 0x68, 0xd7, 0x0b, 0x4e, 0xa1, 0xc3, 0xa6, 0xa5, 0x61, 0xc0, 0x69, 0x28, 0x82, 0xb5, 0xca, 0x8c, 0xc9, 0x42, 0xa8, 0xd4, 0x95, 0xaf, 0xcb, 0x06, 0xde, 0x89, ++ 0x49, 0x8f, 0xb9, 0x35, 0xb7, 0x75, 0x90, 0x8f, 0xe7, 0xa0, 0x3e, 0x32, 0x4d, 0x54, 0xcc, 0x19, 0xd4, 0xe1, 0xaa, 0xbd, 0x35, 0x93, 0xb3, 0x8b, 0x19, 0xee, 0x13, 0x88, 0xfe, 0x49, 0x2b, 0x43, ++ 0x12, 0x7e, 0x5a, 0x50, 0x42, 0x53, 0x78, 0x6a, 0x0d, 0x69, 0xad, 0x32, 0x60, 0x1c, 0x28, 0xe2, 0xc8, 0x85, 0x04, 0xa5, 0xba, 0x59, 0x97, 0x06, 0x02, 0x3a, 0x61, 0x36, 0x3e, 0x17, 0xc6, 0xb9, ++ 0xbb, 0x59, 0xbd, 0xc6, 0x97, 0x45, 0x2c, 0xd0, 0x59, 0x45, 0x19, 0x83, 0xd7, 0x38, 0xca, 0x3f, 0xd0, 0x34, 0xe3, 0xf5, 0x98, 0x88, 0x54, 0xca, 0x05, 0x03, 0x1d, 0xb0, 0x96, 0x11, 0x49, 0x89, ++ 0x88, 0x19, 0x7c, 0x6b, 0x30, 0xd2, 0x58, 0xdf, 0xe2, 0x62, 0x65, 0x54, 0x1c, 0x89, 0xa4, 0xb3, 0x1d, 0x68, 0x64, 0xe9, 0x38, 0x9b, 0x03, 0xcb, 0x74, 0xf7, 0xec, 0x43, 0x23, 0xfb, 0x94, 0x21, ++ 0xa4, 0xb9, 0x79, 0x0a, 0x26, 0xd1, 0x7b, 0x03, 0x98, 0xa2, 0x67, 0x67, 0x35, 0x09, 0x09, 0xf8, 0x4d, 0x57, 0xb6, 0x69, 0x4d, 0xf8, 0x30, 0x66, 0x4c, 0xa8, 0xb3, 0xc3, 0xc0, 0x3e, 0xd2, 0xae, ++ 0x67, 0xb8, 0x90, 0x06, 0x86, 0x8a, 0x68, 0x52, 0x7c, 0xcd, 0x66, 0x64, 0x59, 0xab, 0x7f, 0x05, 0x66, 0x71, 0x00, 0x0c, 0x61, 0x64, 0xd3, 0xa7, 0xf2, 0x66, 0xa1, 0x4d, 0x97, 0xcb, 0xd7, 0x00, ++ 0x4d, 0x6c, 0x92, 0xca, 0xca, 0x77, 0x0b, 0x84, 0x4a, 0x4f, 0xa9, 0xb1, 0x82, 0xe7, 0xb1, 0x8c, 0xa8, 0x85, 0x08, 0x2a, 0xc5, 0x64, 0x6f, 0xcb, 0x4a, 0x14, 0xe1, 0x68, 0x5f, 0xeb, 0x0c, 0x9c, ++ 0xe3, 0x37, 0x2a, 0xb9, 0x53, 0x65, 0xc0, 0x4f, 0xd8, 0x30, 0x84, 0xf8, 0x0a, 0x23, 0xff, 0x10, 0xa0, 0x5b, 0xf1, 0x5f, 0x7f, 0xa5, 0xac, 0xc6, 0xc0, 0xcb, 0x46, 0x2c, 0x33, 0xca, 0x52, 0x4f, ++ 0xa6, 0xb8, 0xbb, 0x35, 0x90, 0x43, 0xba, 0x68, 0x60, 0x9e, 0xaa, 0x25, 0x36, 0xe8, 0x1d, 0x08, 0x46, 0x3b, 0x19, 0x65, 0x3b, 0x54, 0x35, 0xba, 0x94, 0x6c, 0x9a, 0xdd, 0xeb, 0x20, 0x2b, 0x04, ++ 0xb0, 0x31, 0xcc, 0x96, 0x0d, 0xcc, 0x12, 0xe4, 0x51, 0x8d, 0x42, 0x8b, 0x32, 0xb2, 0x57, 0xa4, 0xfc, 0x73, 0x13, 0xd3, 0xa7, 0x98, 0x0d, 0x80, 0x08, 0x2e, 0x93, 0x4f, 0x9d, 0x95, 0xc3, 0x2b, ++ 0x0a, 0x01, 0x91, 0xa2, 0x36, 0x04, 0x38, 0x4d, 0xd9, 0xe0, 0x79, 0xbb, 0xba, 0xa2, 0x66, 0xd1, 0x4c, 0x3f, 0x75, 0x6b, 0x9f, 0x21, 0x33, 0x10, 0x74, 0x33, 0xa4, 0xe8, 0x3f, 0xa7, 0x18, 0x72, ++ 0x82, 0xa8, 0x09, 0x20, 0x3a, 0x4f, 0xaf, 0x84, 0x18, 0x51, 0x83, 0x3d, 0x12, 0x1a, 0xc3, 0x83, 0x84, 0x3a, 0x5e, 0x55, 0xbc, 0x23, 0x81, 0x42, 0x5e, 0x16, 0xc7, 0xdb, 0x4c, 0xc9, 0xab, 0x5c, ++ 0x1b, 0x0d, 0x91, 0xa4, 0x7e, 0x2b, 0x8d, 0xe0, 0xe5, 0x82, 0xc8, 0x6b, 0x6b, 0x0d, 0x90, 0x7b, 0xb3, 0x60, 0xb9, 0x7f, 0x40, 0xab, 0x5d, 0x03, 0x8f, 0x6b, 0x75, 0xc8, 0x14, 0xb2, 0x7d, 0x9b, ++ 0x96, 0x8d, 0x41, 0x98, 0x32, 0xbc, 0x8c, 0x2b, 0xee, 0x60, 0x5e, 0xf6, 0xe5, 0x05, 0x9d, 0x33, 0x10, 0x0d, 0x90, 0x48, 0x5d, 0x37, 0x84, 0x50, 0x01, 0x42, 0x21, 0x73, 0x6c, 0x07, 0x40, 0x7c, ++ 0xac, 0x26, 0x04, 0x08, 0xaa, 0x64, 0x92, 0x66, 0x19, 0x78, 0x8b, 0x86, 0x01, 0xc2, 0xa7, 0x52, 0xd1, 0xa6, 0xcb, 0xf8, 0x20, 0xd7, 0xc7, 0xa0, 0x47, 0x16, 0x20, 0x32, 0x25, 0xb3, 0x89, 0x5b, ++ 0x93, 0x42, 0xd1, 0x47, 0xa8, 0x18, 0x5c, 0xfc, 0x1b, 0xb6, 0x5b, 0xa0, 0x6b, 0x41, 0x42, 0x33, 0x99, 0x03, 0xc0, 0xac, 0x46, 0x51, 0x38, 0x5b, 0x45, 0xd9, 0x8a, 0x8b, 0x19, 0xd2, 0x8c, 0xd6, ++ 0xba, 0xb0, 0x88, 0x78, 0x7f, 0x7e, 0xe1, 0xb1, 0x24, 0x61, 0x76, 0x6b, 0x43, 0xcb, 0xcc, 0xb9, 0x64, 0x34, 0x42, 0x7d, 0x93, 0xc0, 0x65, 0x55, 0x06, 0x88, 0xf6, 0x94, 0x8e, 0xd1, 0xb5, 0x47, ++ 0x5a, 0x42, 0x5f, 0x1b, 0x85, 0x20, 0x9d, 0x06, 0x1c, 0x08, 0xb5, 0x6c, 0x1c, 0xc0, 0x69, 0xf6, 0xc0, 0xa7, 0xc6, 0xf2, 0x93, 0x58, 0xca, 0xb9, 0x11, 0x08, 0x77, 0x32, 0xa6, 0x49, 0xd2, 0x7c, ++ 0x9b, 0x98, 0xf9, 0xa4, 0x88, 0x79, 0x38, 0x7d, 0x9b, 0x00, 0xc2, 0x59, 0x59, 0xa7, 0x16, 0x54, 0xd6, 0xf6, 0xa9, 0x46, 0x16, 0x45, 0x13, 0xe4, 0x7a, 0x75, 0xd0, 0x05, 0x98, 0x6c, 0x23, 0x63, ++ 0xc0, 0x9f, 0x6b, 0x53, 0x7e, 0xca, 0x78, 0xb9, 0x30, 0x3a, 0x5f, 0xa4, 0x57, 0x60, 0x8a, 0x58, 0x6a, 0x65, 0x3a, 0x34, 0x7d, 0xb0, 0x4d, 0xfc, 0xc1, 0x91, 0x75, 0xb3, 0xa3, 0x01, 0x17, 0x25, ++ 0x36, 0x06, 0x2a, 0x65, 0x8a, 0x95, 0x27, 0x75, 0x70, 0xc8, 0x85, 0x2c, 0xa8, 0x97, 0x3f, 0x4a, 0xe1, 0x23, 0xa3, 0x34, 0x04, 0x7d, 0xd7, 0x11, 0xc8, 0x92, 0x7a, 0x63, 0x4a, 0x03, 0x38, 0x8a, ++ 0x52, 0x7b, 0x03, 0x4b, 0xf7, 0xa8, 0x17, 0x0f, 0xa7, 0x02, 0xc1, 0xf7, 0xc2, 0x3e, 0xc3, 0x2d, 0x18, 0xa2, 0x37, 0x48, 0x90, 0xbe, 0x9c, 0x78, 0x7a, 0x94, 0x09, 0xc8, 0x2d, 0x19, 0x2c, 0x4b, ++ 0xb7, 0x05, 0xa2, 0xf9, 0x96, 0xce, 0x40, 0x5d, 0x85, 0xa4, 0xc1, 0xa1, 0xab, 0x9b, 0x6a, 0xeb, 0x49, 0xcc, 0xe1, 0xc2, 0xf8, 0xa9, 0x7c, 0x35, 0x16, 0xc7, 0x2a, 0x00, 0xa4, 0x62, 0x63, 0xba, ++ 0xa6, 0x96, 0xbf, 0x25, 0x72, 0x77, 0x19, 0xc3, 0x21, 0x64, 0x23, 0x61, 0x8f, 0xf3, 0x33, 0x80, 0x93, 0x4a, 0x6c, 0x10, 0x54, 0x5c, 0x4c, 0x5c, 0x51, 0x55, 0xb1, 0x24, 0x86, 0x18, 0x1f, 0xc7, ++ 0xa2, 0x31, 0x98, 0x73, 0x97, 0x8b, 0x6a, 0x2a, 0x67, 0x49, 0x0f, 0x82, 0x56, 0xbd, 0x21, 0x96, 0xfe, 0x17, 0x92, 0xa4, 0xc0, 0x00, 0x77, 0xb8, 0x12, 0xea, 0xe8, 0xbe, 0xd3, 0x57, 0x24, 0x99, ++ 0x68, 0x4a, 0xb3, 0x37, 0x18, 0x76, 0x76, 0x1e, 0x45, 0x0c, 0x9f, 0x9d, 0x27, 0x68, 0xa3, 0x68, 0x06, 0xd7, 0xab, 0x20, 0x46, 0xc9, 0x1f, 0x17, 0x59, 0x9e, 0x9a, 0xc5, 0x92, 0x99, 0x08, 0x08, ++ 0xdc, 0xd7, 0xb4, 0xd0, 0x91, 0x90, 0x72, 0xf1, 0x4e, 0xc3, 0x61, 0x77, 0x3b, 0x72, 0x52, 0x44, 0x4c, 0x32, 0x3c, 0x30, 0x83, 0x26, 0xf4, 0xa3, 0x0f, 0x86, 0x80, 0xd2, 0xf7, 0x48, 0xf5, 0x6a, ++ 0x13, 0x2b, 0x82, 0x67, 0x4e, 0xd0, 0x18, 0x46, 0x20, 0xb8, 0x2a, 0xd2, 0xcb, 0x18, 0x2c, 0x97, 0xb4, 0x81, 0x62, 0x66, 0x47, 0x49, 0x12, 0x90, 0xa0, 0x11, 0xcc, 0x73, 0x82, 0x86, 0x85, 0xa8, ++ 0xc3, 0x67, 0xa5, 0xb9, 0xcf, 0x8d, 0x62, 0x1b, 0x0d, 0x5c, 0x1e, 0xff, 0x03, 0x17, 0x27, 0x58, 0xbd, 0x00, 0x49, 0x78, 0xc2, 0x51, 0xcd, 0x51, 0x34, 0x22, 0x28, 0x98, 0x9c, 0xae, 0x63, 0x32, ++ 0xac, 0x48, 0x64, 0x37, 0xcb, 0x5c, 0x57, 0xd4, 0x30, 0x74, 0x62, 0x86, 0x52, 0x53, 0xbe, 0x21, 0x7b, 0x35, 0x15, 0xc7, 0x3d, 0xf4, 0x05, 0xb7, 0xf2, 0x82, 0x17, 0xad, 0x0b, 0x8c, 0xf6, 0x0c, ++ 0x2f, 0xff, 0xaa, 0x0a, 0x00, 0x48, 0xb1, 0xfb, 0x4a, 0xcd, 0xcd, 0xc3, 0x8b, 0x52, 0x50, 0xcf, 0xec, 0x35, 0x6a, 0x6d, 0xe2, 0x6c, 0xfa, 0x7a, 0x58, 0x8f, 0xdc, 0x86, 0xf9, 0x8c, 0x85, 0x4a, ++ 0xc6, 0x4c, 0x7b, 0xfa, 0xa9, 0x6f, 0x5a, 0x32, 0xcc, 0x06, 0x10, 0x93, 0x4b, 0xaa, 0x6a, 0x58, 0x6b, 0x9a, 0x20, 0x54, 0xf1, 0x3b, 0xa2, 0x74, 0x17, 0x4a, 0xa0, 0xd2, 0xb3, 0xa8, 0x1b, 0x96, ++ 0xa9, 0x40, 0x66, 0x6f, 0x78, 0x9b, 0x5a, 0x6b, 0xcd, 0xc0, 0xa6, 0xa0, 0x17, 0x8a, 0x0c, 0x9a, 0x02, 0x57, 0x8a, 0x49, 0x3f, 0x6e, 0xea, 0x0d, 0x2e, 0x6c, 0x13, 0x95, 0x1c, 0x9f, 0x24, 0x9a, ++ 0x5e, 0x8d, 0xd7, 0x1d, 0xd4, 0x9a, 0x74, 0x2d, 0x45, 0x1f, 0x1a, 0xbb, 0xa1, 0x9a, 0xf8, 0xc5, 0x47, 0x85, 0x5e, 0x0a, 0xfc, 0x72, 0x8e, 0x90, 0xab, 0xb4, 0x99, 0xc9, 0xbe, 0xeb, 0x76, 0x6f, ++ 0x47, 0x29, 0xcd, 0xa2, 0x22, 0x63, 0xe3, 0x24, 0xda, 0x18, 0x71, 0x2d, 0x31, 0x6e, 0x98, 0xdc, 0x7a, 0xc8, 0xc3, 0xca, 0x47, 0x37, 0x0e, 0xbd, 0x77, 0x0c, 0xe3, 0x2b, 0x3b, 0xd4, 0xb1, 0xa0, ++ 0xc9, 0x52, 0x9a, 0xc6, 0xec, 0x8e, 0xe0, 0x28, 0xb1, 0xcd, 0xb2, 0x65, 0x1c, 0xb5, 0xa6, 0xbb, 0x3c, 0x0c, 0x6d, 0xf1, 0x24, 0x0a, 0x3b, 0x91, 0x4b, 0x56, 0x56, 0xc0, 0xdc, 0x51, 0xc2, 0xb9, ++ 0x1b, 0xfc, 0xbc, 0x37, 0xa4, 0x66, 0x02, 0x87, 0xd4, 0x4f, 0x81, 0xf8, 0x53, 0xc7, 0xf4, 0x9a, 0x6d, 0x06, 0x03, 0xd6, 0xd7, 0x23, 0xcb, 0xec, 0x01, 0x5f, 0xbc, 0x43, 0x4a, 0x38, 0x24, 0x1c, ++ 0x10, 0x9c, 0x7e, 0xd5, 0xb1, 0xcc, 0x46, 0x1a, 0x2c, 0xcb, 0x9a, 0xb7, 0x14, 0x0f, 0x19, 0xf3, 0x7a, 0x13, 0xbb, 0x70, 0x1e, 0x14, 0x2b, 0xd5, 0x4b, 0x64, 0xec, 0x6b, 0x76, 0xfe, 0xc3, 0x3b, ++ 0x69, 0xc2, 0x91, 0x8c, 0xb0, 0x17, 0xc4, 0x14, 0x34, 0x23, 0x00, 0x9a, 0x3c, 0x07, 0xb5, 0xc1, 0x81, 0xb0, 0xc1, 0xeb, 0x49, 0x4a, 0x62, 0xab, 0xc8, 0x39, 0x13, 0x97, 0x08, 0x9e, 0xa6, 0x64, ++ 0x09, 0x67, 0xc1, 0x20, 0x49, 0x84, 0xcd, 0x48, 0x4c, 0xcc, 0xb0, 0x0a, 0x9a, 0x17, 0xd0, 0x87, 0x21, 0x84, 0x28, 0xef, 0x3b, 0xb7, 0x08, 0x78, 0x3e, 0x12, 0x82, 0x71, 0x04, 0x41, 0x73, 0x75, ++ 0xb6, 0x95, 0x6f, 0xb5, 0x00, 0x53, 0xd0, 0x48, 0xa4, 0x79, 0x14, 0x95, 0x82, 0x4a, 0x34, 0x80, 0xa5, 0xb7, 0x83, 0x02, 0x56, 0x09, 0x6f, 0xdd, 0x72, 0x5c, 0x30, 0x8b, 0x3b, 0xe8, 0x4a, 0x07, ++ 0xf3, 0x63, 0x2e, 0x24, 0x95, 0xc6, 0x2e, 0x96, 0x39, 0x9d, 0x80, 0xbf, 0xa7, 0x45, 0xb9, 0x84, 0x1a, 0x18, 0x33, 0xbc, 0x1d, 0x27, 0xba, 0x45, 0xa5, 0x21, 0x68, 0xee, 0x59, 0x00, 0x6c, 0x3a, ++ 0x3a, 0x8c, 0x4a, 0x5a, 0x4f, 0x50, 0x88, 0xfc, 0x73, 0x71, 0x81, 0xab, 0x51, 0x96, 0xf7, 0xb1, 0xb4, 0x9a, 0x2e, 0xd8, 0x13, 0x13, 0x4e, 0x11, 0x2f, 0x73, 0x0b, 0x99, 0x1c, 0x54, 0xa7, 0x19, ++ 0x6b, 0xcf, 0x5f, 0xc7, 0x6e, 0x13, 0x4c, 0x58, 0x43, 0xe1, 0x69, 0x88, 0x51, 0xb2, 0xf8, 0x69, 0xaf, 0xaf, 0xb0, 0x27, 0x87, 0xd9, 0xc2, 0xf1, 0x36, 0x90, 0x2d, 0xc7, 0xa7, 0xf3, 0xd6, 0x21, ++ 0x56, 0xd1, 0x5e, 0xc3, 0x09, 0x56, 0x40, 0x92, 0xc6, 0x1d, 0x83, 0xb0, 0x98, 0x6c, 0x48, 0x40, 0x99, 0x81, 0xf3, 0xc1, 0x86, 0x88, 0x0a, 0x2f, 0x63, 0xd5, 0x86, 0x0a, 0xb6, 0x01, 0xde, 0xac, ++ 0x2b, 0x6b, 0xa1, 0xb4, 0x28, 0x17, 0x9d, 0x73, 0x53, 0x3e, 0xb7, 0xa3, 0xa5, 0x11, 0x3b, 0x85, 0x61, 0xf1, 0x0b, 0x45, 0xc3, 0xcd, 0xe2, 0x82, 0xb6, 0xea, 0xd6, 0xab, 0x6c, 0x60, 0x4f, 0x09, ++ 0xc1, 0x7b, 0xfd, 0xa0, 0x83, 0x13, 0xa3, 0x26, 0x07, 0x67, 0x5a, 0xdf, 0x64, 0x31, 0xca, 0x87, 0x18, 0xe9, 0xc4, 0x3a, 0x73, 0x73, 0x32, 0x27, 0xe7, 0x3b, 0xc6, 0x1a, 0xc8, 0x45, 0xba, 0x90, ++ 0x77, 0x55, 0xce, 0xc6, 0x89, 0x25, 0xe5, 0xe2, 0xbf, 0xe9, 0x12, 0x95, 0x9d, 0xb8, 0x6f, 0xbf, 0xe2, 0x15, 0x6f, 0xd5, 0xbb, 0xdb, 0xf0, 0xc9, 0xdf, 0x8b, 0x53, 0x02, 0xaa, 0x8d, 0x90, 0xa2, ++ 0x2d, 0x12, 0x27, 0x0e, 0x00, 0x65, 0x51, 0xe4, 0x76, 0x7e, 0x45, 0x26, 0x8e, 0xd9, 0x69, 0x26, 0x54, 0x44, 0x78, 0x11, 0xea, 0xb8, 0x4f, 0x04, 0x99, 0xa8, 0xa5, 0x8c, 0xf7, 0xc0, 0x4a, 0x59, ++ 0x56, 0x98, 0x52, 0x80, 0x45, 0xf2, 0x98, 0x97, 0xc8, 0xfa, 0x96, 0xd0, 0x6c, 0xce, 0x51, 0xe6, 0xaf, 0xea, 0xc4, 0x33, 0x95, 0x89, 0xc9, 0x41, 0xc8, 0x55, 0x63, 0xd7, 0x0f, 0xac, 0xe1, 0x92, ++ 0x88, 0x94, 0xba, 0xc0, 0x36, 0x19, 0xdf, 0xf4, 0xbe, 0x3f, 0x43, 0x14, 0xa3, 0xf7, 0x35, 0x1a, 0x09, 0xa4, 0x86, 0xb5, 0x04, 0x1e, 0x7c, 0xb2, 0xda, 0x8b, 0x96, 0xbc, 0x66, 0x26, 0xa4, 0x93, ++ 0x17, 0x35, 0x7c, 0x41, 0x52, 0xa5, 0x1b, 0xa3, 0xc2, 0x8c, 0x7e, 0x0c, 0x9d, 0xb4, 0x1a, 0x06, 0xa2, 0x82, 0x90, 0xf2, 0x18, 0x73, 0x11, 0x07, 0xc9, 0x54, 0xd8, 0xa6, 0x6f, 0x80, 0x1d, 0x7d, ++ 0xe1, 0x2a, 0x03, 0x71, 0x16, 0x99, 0x0b, 0x6c, 0x53, 0xc1, 0x29, 0xf1, 0x85, 0xc3, 0x45, 0xf2, 0x7e, 0x51, 0x8b, 0x2d, 0x5a, 0x91, 0x25, 0xa0, 0x70, 0x76, 0xd9, 0x91, 0xb7, 0xda, 0xc7, 0xcc, ++ 0x65, 0xa8, 0x56, 0x2e, 0xfb, 0xcc, 0x32, 0xa9, 0xca, 0x4a, 0xd9, 0x02, 0x63, 0xb0, 0x4a, 0x4f, 0x90, 0x36, 0x11, 0x6c, 0x7b, 0x97, 0x48, 0x04, 0x96, 0x31, 0x75, 0x75, 0x65, 0x0d, 0xcc, 0x21, ++ 0x52, 0xb5, 0xbc, 0x0e, 0x74, 0x40, 0x7e, 0x12, 0xfa, 0x8e, 0x4f, 0xfc, 0xcc, 0xff, 0x76, 0xc0, 0x1a, 0x97, 0x4b, 0xd6, 0x11, 0x02, 0xe1, 0xf5, 0x29, 0x64, 0x96, 0xc7, 0x1d, 0x07, 0x64, 0xe1, ++ 0x32, 0x29, 0xff, 0xe7, 0x84, 0x6f, 0x33, 0x6e, 0x34, 0xca, 0xc9, 0x04, 0xca, 0x56, 0x70, 0xf8, 0xcd, 0x50, 0x52, 0x42, 0x7a, 0x79, 0xc0, 0x91, 0xa9, 0x71, 0x21, 0x0c, 0x5c, 0xff, 0x66, 0x7a, ++ 0xac, 0x24, 0x93, 0x66, 0xe1, 0x0d, 0x2b, 0x11, 0x37, 0x6c, 0xa3, 0x9d, 0x93, 0x52, 0x04, 0xb1, 0x2c, 0xc5, 0x85, 0xe9, 0x40, 0x54, 0x03, 0x62, 0x5f, 0xb3, 0x2c, 0xb5, 0xe5, 0xc3, 0x1b, 0x62, ++ 0x34, 0x81, 0x60, 0x51, 0x5c, 0xcc, 0x4f, 0xda, 0xf5, 0x70, 0x2d, 0x6b, 0xab, 0x5c, 0x37, 0x3d, 0xb6, 0xf3, 0x50, 0xd3, 0xe6, 0x3a, 0x5c, 0xe3, 0xca, 0x54, 0x74, 0xa0, 0xcf, 0x15, 0x67, 0x04, ++ 0x2c, 0xa3, 0x25, 0x89, 0x86, 0xff, 0x75, 0xbd, 0xfc, 0xd9, 0x29, 0xe6, 0x46, 0x2f, 0x36, 0xbc, 0xcc, 0x3f, 0x5a, 0x93, 0x35, 0x2a, 0x2b, 0x36, 0xcb, 0x16, 0x2e, 0x18, 0x74, 0xc7, 0x42, 0x87, ++ 0x0a, 0x97, 0xb1, 0x67, 0xa0, 0x50, 0x37, 0x36, 0x24, 0xea, 0xeb, 0x7e, 0x50, 0x73, 0x25, 0x6b, 0x72, 0x11, 0xb2, 0xd9, 0x4b, 0x84, 0x06, 0xcd, 0x6c, 0x95, 0x33, 0xb1, 0x53, 0x64, 0x08, 0xab, ++ 0x0a, 0x29, 0xe5, 0xb2, 0xf0, 0xc9, 0x54, 0xec, 0xe0, 0x0f, 0xbb, 0xeb, 0x17, 0x6d, 0x72, 0x4d, 0x4c, 0xf4, 0x43, 0xcf, 0x70, 0x20, 0xd5, 0xfa, 0x70, 0x94, 0xcc, 0x1b, 0x1b, 0xe6, 0x97, 0xba, ++ 0xd3, 0x36, 0x74, 0xe4, 0x09, 0x9e, 0xc7, 0xbb, 0x18, 0xf4, 0x57, 0x71, 0x28, 0xcd, 0xd9, 0x7c, 0xcd, 0x6d, 0x44, 0x62, 0xe5, 0x60, 0x7c, 0x51, 0x2a, 0x3e, 0x36, 0x24, 0x8e, 0x3d, 0xda, 0xa2, ++ 0xec, 0x08, 0x9a, 0xef, 0xc4, 0xce, 0x48, 0x5c, 0x49, 0xd7, 0xb0, 0x09, 0xc8, 0xd6, 0x31, 0x15, 0xfc, 0x81, 0xff, 0x3a, 0x62, 0xd1, 0x5a, 0x88, 0x44, 0x1c, 0x03, 0xea, 0x1c, 0x2e, 0x72, 0xc4, ++ 0x88, 0x39, 0xfc, 0x6a, 0xd7, 0x3a, 0x30, 0x74, 0x4a, 0x62, 0xb7, 0xb2, 0x16, 0x45, 0xa6, 0xaf, 0x7d, 0x61, 0xb6, 0x38, 0x3b, 0x22, 0x1e, 0x21, 0x90, 0x55, 0x57, 0xcd, 0x29, 0xd9, 0x24, 0xa6, ++ 0x09, 0x86, 0xc5, 0x11, 0xc1, 0xeb, 0xbc, 0x31, 0x6d, 0x56, 0x30, 0xa2, 0x41, 0x43, 0x23, 0xf5, 0x3a, 0xd5, 0x59, 0x94, 0xf6, 0xb3, 0x65, 0x39, 0xf9, 0xc4, 0x40, 0x75, 0xa5, 0x33, 0xe4, 0x81, ++ 0xc0, 0x84, 0x45, 0xd9, 0xca, 0x9e, 0x9d, 0x38, 0x21, 0x19, 0x38, 0x8b, 0xd1, 0xd7, 0x50, 0x52, 0x21, 0x7a, 0x94, 0x4c, 0xcc, 0x7b, 0xe9, 0x09, 0xe2, 0x19, 0x71, 0x1f, 0xcc, 0x79, 0x24, 0x76, ++ 0x92, 0x13, 0xa1, 0x92, 0x53, 0x4a, 0x55, 0x80, 0x08, 0x15, 0x7a, 0x39, 0x6e, 0xdf, 0xf4, 0x80, 0xcc, 0x3b, 0x52, 0x0f, 0xf8, 0x18, 0xb3, 0x8b, 0x13, 0x5c, 0x18, 0xa8, 0x0d, 0x51, 0x05, 0xe6, ++ 0x78, 0x83, 0x6c, 0x39, 0x5c, 0x28, 0xe9, 0x2f, 0x7a, 0x3c, 0x4e, 0x93, 0xc0, 0x10, 0x35, 0xf3, 0x41, 0x11, 0xcc, 0x49, 0x02, 0xd0, 0xc0, 0x33, 0xa6, 0x3f, 0x23, 0x6a, 0x71, 0xda, 0x97, 0x4a, ++ 0x6f, 0x40, 0x4f, 0x7a, 0xa7, 0xb5, 0xe5, 0x82, 0xc7, 0x58, 0x14, 0x2f, 0xc1, 0x82, 0x6b, 0xba, 0x98, 0xb2, 0x7d, 0x57, 0xc2, 0xe2, 0x10, 0x3e, 0x10, 0xe3, 0x0d, 0x32, 0x79, 0x7b, 0x96, 0x77, ++ 0x14, 0xd1, 0x56, 0x61, 0x11, 0x13, 0x71, 0xa2, 0xd9, 0xc5, 0x39, 0x98, 0x12, 0x46, 0x46, 0x22, 0x63, 0x5b, 0x44, 0x21, 0x26, 0xb0, 0x98, 0x36, 0xb0, 0x81, 0x82, 0x72, 0x47, 0xd0, 0x54, 0x22, ++ 0x97, 0x2b, 0xd0, 0x32, 0x0d, 0x8f, 0x42, 0xbf, 0x57, 0xe3, 0x49, 0x46, 0x12, 0x34, 0xe4, 0xd9, 0x4f, 0x01, 0x18, 0x50, 0xba, 0xb5, 0xc0, 0x49, 0xb6, 0x2a, 0x59, 0x43, 0x38, 0x66, 0xfc, 0xce, ++ 0x69, 0x66, 0x49, 0x5c, 0x26, 0x5c, 0x47, 0x65, 0xa5, 0x6c, 0x06, 0xb9, 0xfc, 0x42, 0x76, 0x54, 0x87, 0x85, 0xf4, 0x68, 0x28, 0xca, 0x60, 0x2d, 0xc6, 0xd0, 0x54, 0x1f, 0x25, 0x07, 0x89, 0xc4, ++ 0x9e, 0x8b, 0x06, 0x55, 0x9c, 0x43, 0x44, 0x60, 0xa8, 0x43, 0x80, 0x98, 0x54, 0xe5, 0xb4, 0x6e, 0x89, 0x38, 0x9f, 0x10, 0xf4, 0x89, 0x66, 0x74, 0x91, 0xc1, 0x93, 0x5e, 0x8a, 0xfb, 0x9e, 0xb4, ++ 0x71, 0x8f, 0x86, 0xac, 0x45, 0x89, 0x32, 0xbc, 0xf3, 0x3c, 0x9a, 0xbe, 0xcb, 0x2d, 0xc0, 0xc0, 0x93, 0xa7, 0xe8, 0x1d, 0xa0, 0x32, 0x7b, 0xb6, 0x37, 0x52, 0x81, 0x05, 0xc3, 0x58, 0xeb, 0x76, ++ 0x8d, 0x32, 0x3a, 0x37, 0xd4, 0x0a, 0x8c, 0x19, 0x9b, 0x7c, 0x4b, 0xb1, 0xd7, 0x2b, 0x72, 0xb6, 0x90, 0xb3, 0x6d, 0xd2, 0x7a, 0x93, 0x55, 0x19, 0x1b, 0x3c, 0x3a, 0xa6, 0x75, 0xa7, 0xe6, 0xf8, ++ 0x55, 0xeb, 0x50, 0x5f, 0x57, 0x98, 0x65, 0xdb, 0xd8, 0x91, 0x05, 0x65, 0x50, 0x5e, 0x7c, 0x0f, 0xdd, 0x54, 0x5c, 0xbb, 0xb8, 0x71, 0xb0, 0xb2, 0xcc, 0x01, 0x25, 0xb7, 0x4f, 0x6b, 0x0c, 0x9b, ++ 0x79, 0x67, 0x0a, 0x62, 0x02, 0xd1, 0xb9, 0x15, 0x4a, 0xc7, 0x76, 0x6b, 0x19, 0x19, 0xc4, 0x89, 0x58, 0x90, 0x86, 0xad, 0x8b, 0x45, 0xbe, 0x0d, 0x79, 0xc9, 0x76, 0xc3, 0xc3, 0x9d, 0x6b, 0x25, ++ 0x21, 0x3b, 0xb0, 0xb7, 0x8a, 0x57, 0x50, 0xe6, 0xa8, 0xeb, 0x34, 0x33, 0x0b, 0xb3, 0xcf, 0xf2, 0xb1, 0xc0, 0x72, 0x2a, 0xc8, 0x83, 0xb0, 0x48, 0xf4, 0xb8, 0xcd, 0x06, 0x19, 0x6d, 0xa8, 0xaa, ++ 0x8b, 0x05, 0xda, 0x42, 0x67, 0x55, 0x2b, 0xf8, 0x7a, 0xbc, 0xa5, 0x12, 0x4d, 0xc3, 0x58, 0xa8, 0x38, 0x10, 0x40, 0xe9, 0xb8, 0x1f, 0xb0, 0x84, 0x43, 0x15, 0x02, 0x15, 0xd6, 0x92, 0x23, 0x28, ++ 0x00, 0x0a, 0xc0, 0xb7, 0x88, 0xb1, 0x21, 0x93, 0x1a, 0x26, 0x7d, 0x80, 0x61, 0x9c, 0xe7, 0xd2, 0x9c, 0xd7, 0x6b, 0x60, 0xcf, 0x65, 0x83, 0xdc, 0xe8, 0xce, 0xbc, 0x49, 0x01, 0x85, 0x73, 0x6c, ++ 0x81, 0x8b, 0x25, 0xad, 0x26, 0x0b, 0x66, 0x7b, 0x1f, 0xfd, 0x46, 0x20, 0x6d, 0x01, 0x04, 0x55, 0x3a, 0xa9, 0xfb, 0x30, 0x45, 0x54, 0xa2, 0x1c, 0x32, 0x72, 0x44, 0xce, 0x78, 0xaf, 0xdb, 0xd3, ++ 0xb4, 0x62, 0x36, 0x1b, 0xb0, 0x68, 0xa1, 0x55, 0x63, 0x64, 0x09, 0xf5, 0x74, 0xc5, 0x71, 0x65, 0x72, 0xe2, 0xa5, 0xf2, 0xa4, 0xb0, 0x4f, 0xb8, 0xaa, 0xd1, 0x23, 0x66, 0x84, 0x84, 0x17, 0x87, ++ 0x56, 0x2a, 0xaf, 0x46, 0xc2, 0xc0, 0xda, 0x46, 0x65, 0xea, 0xfd, 0x46, 0x5f, 0xc6, 0x4a, 0x0c, 0x5f, 0x8f, 0x3f, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9d, 0x59, 0xa5, 0x43, 0xd8, 0x20, 0x8c, ++ 0x54, 0xa3, 0x16, 0x65, 0x29, 0xb5, 0x39, 0x22, 0xa5, 0x89, 0x9a, 0x0b, 0xc4, 0x65, 0xee, 0x5f, 0xc2, 0xc0, 0x41, 0x55, 0x58, 0x2a, 0x40, 0xac, 0x70, 0x97, 0x61, 0xd2, 0xbe, 0x61, 0xfd, 0xc7, ++ 0x6c, 0x59, 0x30, 0x44, 0xce, 0xbc, 0xc7, 0xf2, 0x86, 0x26, 0xed, 0x79, 0xd4, 0x51, 0x14, 0x08, 0x00, 0xe0, 0x3b, 0x59, 0xb9, 0x56, 0xf8, 0x21, 0x0e, 0x55, 0x60, 0x67, 0x40, 0x7d, 0x13, 0xdc, ++ 0x90, 0xfa, 0x9e, 0x8b, 0x87, 0x2b, 0xfb, 0x8f, 0xa0, 0x82, 0x06, 0x65, 0x03, 0x82, 0x06, 0x61, 0x00, 0xda, 0x18, 0x71, 0x2d, 0x31, 0x6e, 0x98, 0xdc, 0x7a, 0xc8, 0xc3, 0xca, 0x47, 0x37, 0x0e, ++ 0xbd, 0x77, 0x0c, 0xe3, 0x2b, 0x3b, 0xd4, 0xb1, 0xa0, 0xc9, 0x52, 0x9a, 0xc6, 0xec, 0x8e, 0xe0, 0x28, 0xb1, 0xcd, 0xb2, 0x65, 0x1c, 0xb5, 0xa6, 0xbb, 0x3c, 0x0c, 0x6d, 0xf1, 0x24, 0x0a, 0x3b, ++ 0x91, 0x4b, 0x56, 0x56, 0xc0, 0xdc, 0x51, 0xc2, 0xb9, 0x1b, 0xfc, 0xbc, 0x37, 0xa4, 0x66, 0x02, 0x87, 0xd4, 0x4f, 0x81, 0xf8, 0x53, 0xc7, 0xf4, 0x9a, 0x6d, 0x06, 0x03, 0xd6, 0xd7, 0x23, 0xcb, ++ 0xec, 0x01, 0x5f, 0xbc, 0x43, 0x4a, 0x38, 0x24, 0x1c, 0x10, 0x9c, 0x7e, 0xd5, 0xb1, 0xcc, 0x46, 0x1a, 0x2c, 0xcb, 0x9a, 0xb7, 0x14, 0x0f, 0x19, 0xf3, 0x7a, 0x13, 0xbb, 0x70, 0x1e, 0x14, 0x2b, ++ 0xd5, 0x4b, 0x64, 0xec, 0x6b, 0x76, 0xfe, 0xc3, 0x3b, 0x69, 0xc2, 0x91, 0x8c, 0xb0, 0x17, 0xc4, 0x14, 0x34, 0x23, 0x00, 0x9a, 0x3c, 0x07, 0xb5, 0xc1, 0x81, 0xb0, 0xc1, 0xeb, 0x49, 0x4a, 0x62, ++ 0xab, 0xc8, 0x39, 0x13, 0x97, 0x08, 0x9e, 0xa6, 0x64, 0x09, 0x67, 0xc1, 0x20, 0x49, 0x84, 0xcd, 0x48, 0x4c, 0xcc, 0xb0, 0x0a, 0x9a, 0x17, 0xd0, 0x87, 0x21, 0x84, 0x28, 0xef, 0x3b, 0xb7, 0x08, ++ 0x78, 0x3e, 0x12, 0x82, 0x71, 0x04, 0x41, 0x73, 0x75, 0xb6, 0x95, 0x6f, 0xb5, 0x00, 0x53, 0xd0, 0x48, 0xa4, 0x79, 0x14, 0x95, 0x82, 0x4a, 0x34, 0x80, 0xa5, 0xb7, 0x83, 0x02, 0x56, 0x09, 0x6f, ++ 0xdd, 0x72, 0x5c, 0x30, 0x8b, 0x3b, 0xe8, 0x4a, 0x07, 0xf3, 0x63, 0x2e, 0x24, 0x95, 0xc6, 0x2e, 0x96, 0x39, 0x9d, 0x80, 0xbf, 0xa7, 0x45, 0xb9, 0x84, 0x1a, 0x18, 0x33, 0xbc, 0x1d, 0x27, 0xba, ++ 0x45, 0xa5, 0x21, 0x68, 0xee, 0x59, 0x00, 0x6c, 0x3a, 0x3a, 0x8c, 0x4a, 0x5a, 0x4f, 0x50, 0x88, 0xfc, 0x73, 0x71, 0x81, 0xab, 0x51, 0x96, 0xf7, 0xb1, 0xb4, 0x9a, 0x2e, 0xd8, 0x13, 0x13, 0x4e, ++ 0x11, 0x2f, 0x73, 0x0b, 0x99, 0x1c, 0x54, 0xa7, 0x19, 0x6b, 0xcf, 0x5f, 0xc7, 0x6e, 0x13, 0x4c, 0x58, 0x43, 0xe1, 0x69, 0x88, 0x51, 0xb2, 0xf8, 0x69, 0xaf, 0xaf, 0xb0, 0x27, 0x87, 0xd9, 0xc2, ++ 0xf1, 0x36, 0x90, 0x2d, 0xc7, 0xa7, 0xf3, 0xd6, 0x21, 0x56, 0xd1, 0x5e, 0xc3, 0x09, 0x56, 0x40, 0x92, 0xc6, 0x1d, 0x83, 0xb0, 0x98, 0x6c, 0x48, 0x40, 0x99, 0x81, 0xf3, 0xc1, 0x86, 0x88, 0x0a, ++ 0x2f, 0x63, 0xd5, 0x86, 0x0a, 0xb6, 0x01, 0xde, 0xac, 0x2b, 0x6b, 0xa1, 0xb4, 0x28, 0x17, 0x9d, 0x73, 0x53, 0x3e, 0xb7, 0xa3, 0xa5, 0x11, 0x3b, 0x85, 0x61, 0xf1, 0x0b, 0x45, 0xc3, 0xcd, 0xe2, ++ 0x82, 0xb6, 0xea, 0xd6, 0xab, 0x6c, 0x60, 0x4f, 0x09, 0xc1, 0x7b, 0xfd, 0xa0, 0x83, 0x13, 0xa3, 0x26, 0x07, 0x67, 0x5a, 0xdf, 0x64, 0x31, 0xca, 0x87, 0x18, 0xe9, 0xc4, 0x3a, 0x73, 0x73, 0x32, ++ 0x27, 0xe7, 0x3b, 0xc6, 0x1a, 0xc8, 0x45, 0xba, 0x90, 0x77, 0x55, 0xce, 0xc6, 0x89, 0x25, 0xe5, 0xe2, 0xbf, 0xe9, 0x12, 0x95, 0x9d, 0xb8, 0x6f, 0xbf, 0xe2, 0x15, 0x6f, 0xd5, 0xbb, 0xdb, 0xf0, ++ 0xc9, 0xdf, 0x8b, 0x53, 0x02, 0xaa, 0x8d, 0x90, 0xa2, 0x2d, 0x12, 0x27, 0x0e, 0x00, 0x65, 0x51, 0xe4, 0x76, 0x7e, 0x45, 0x26, 0x8e, 0xd9, 0x69, 0x26, 0x54, 0x44, 0x78, 0x11, 0xea, 0xb8, 0x4f, ++ 0x04, 0x99, 0xa8, 0xa5, 0x8c, 0xf7, 0xc0, 0x4a, 0x59, 0x56, 0x98, 0x52, 0x80, 0x45, 0xf2, 0x98, 0x97, 0xc8, 0xfa, 0x96, 0xd0, 0x6c, 0xce, 0x51, 0xe6, 0xaf, 0xea, 0xc4, 0x33, 0x95, 0x89, 0xc9, ++ 0x41, 0xc8, 0x55, 0x63, 0xd7, 0x0f, 0xac, 0xe1, 0x92, 0x88, 0x94, 0xba, 0xc0, 0x36, 0x19, 0xdf, 0xf4, 0xbe, 0x3f, 0x43, 0x14, 0xa3, 0xf7, 0x35, 0x1a, 0x09, 0xa4, 0x86, 0xb5, 0x04, 0x1e, 0x7c, ++ 0xb2, 0xda, 0x8b, 0x96, 0xbc, 0x66, 0x26, 0xa4, 0x93, 0x17, 0x35, 0x7c, 0x41, 0x52, 0xa5, 0x1b, 0xa3, 0xc2, 0x8c, 0x7e, 0x0c, 0x9d, 0xb4, 0x1a, 0x06, 0xa2, 0x82, 0x90, 0xf2, 0x18, 0x73, 0x11, ++ 0x07, 0xc9, 0x54, 0xd8, 0xa6, 0x6f, 0x80, 0x1d, 0x7d, 0xe1, 0x2a, 0x03, 0x71, 0x16, 0x99, 0x0b, 0x6c, 0x53, 0xc1, 0x29, 0xf1, 0x85, 0xc3, 0x45, 0xf2, 0x7e, 0x51, 0x8b, 0x2d, 0x5a, 0x91, 0x25, ++ 0xa0, 0x70, 0x76, 0xd9, 0x91, 0xb7, 0xda, 0xc7, 0xcc, 0x65, 0xa8, 0x56, 0x2e, 0xfb, 0xcc, 0x32, 0xa9, 0xca, 0x4a, 0xd9, 0x02, 0x63, 0xb0, 0x4a, 0x4f, 0x90, 0x36, 0x11, 0x6c, 0x7b, 0x97, 0x48, ++ 0x04, 0x96, 0x31, 0x75, 0x75, 0x65, 0x0d, 0xcc, 0x21, 0x52, 0xb5, 0xbc, 0x0e, 0x74, 0x40, 0x7e, 0x12, 0xfa, 0x8e, 0x4f, 0xfc, 0xcc, 0xff, 0x76, 0xc0, 0x1a, 0x97, 0x4b, 0xd6, 0x11, 0x02, 0xe1, ++ 0xf5, 0x29, 0x64, 0x96, 0xc7, 0x1d, 0x07, 0x64, 0xe1, 0x32, 0x29, 0xff, 0xe7, 0x84, 0x6f, 0x33, 0x6e, 0x34, 0xca, 0xc9, 0x04, 0xca, 0x56, 0x70, 0xf8, 0xcd, 0x50, 0x52, 0x42, 0x7a, 0x79, 0xc0, ++ 0x91, 0xa9, 0x71, 0x21, 0x0c, 0x5c, 0xff, 0x66, 0x7a, 0xac, 0x24, 0x93, 0x66, 0xe1, 0x0d, 0x2b, 0x11, 0x37, 0x6c, 0xa3, 0x9d, 0x93, 0x52, 0x04, 0xb1, 0x2c, 0xc5, 0x85, 0xe9, 0x40, 0x54, 0x03, ++ 0x62, 0x5f, 0xb3, 0x2c, 0xb5, 0xe5, 0xc3, 0x1b, 0x62, 0x34, 0x81, 0x60, 0x51, 0x5c, 0xcc, 0x4f, 0xda, 0xf5, 0x70, 0x2d, 0x6b, 0xab, 0x5c, 0x37, 0x3d, 0xb6, 0xf3, 0x50, 0xd3, 0xe6, 0x3a, 0x5c, ++ 0xe3, 0xca, 0x54, 0x74, 0xa0, 0xcf, 0x15, 0x67, 0x04, 0x2c, 0xa3, 0x25, 0x89, 0x86, 0xff, 0x75, 0xbd, 0xfc, 0xd9, 0x29, 0xe6, 0x46, 0x2f, 0x36, 0xbc, 0xcc, 0x3f, 0x5a, 0x93, 0x35, 0x2a, 0x2b, ++ 0x36, 0xcb, 0x16, 0x2e, 0x18, 0x74, 0xc7, 0x42, 0x87, 0x0a, 0x97, 0xb1, 0x67, 0xa0, 0x50, 0x37, 0x36, 0x24, 0xea, 0xeb, 0x7e, 0x50, 0x73, 0x25, 0x6b, 0x72, 0x11, 0xb2, 0xd9, 0x4b, 0x84, 0x06, ++ 0xcd, 0x6c, 0x95, 0x33, 0xb1, 0x53, 0x64, 0x08, 0xab, 0x0a, 0x29, 0xe5, 0xb2, 0xf0, 0xc9, 0x54, 0xec, 0xe0, 0x0f, 0xbb, 0xeb, 0x17, 0x6d, 0x72, 0x4d, 0x4c, 0xf4, 0x43, 0xcf, 0x70, 0x20, 0xd5, ++ 0xfa, 0x70, 0x94, 0xcc, 0x1b, 0x1b, 0xe6, 0x97, 0xba, 0xd3, 0x36, 0x74, 0xe4, 0x09, 0x9e, 0xc7, 0xbb, 0x18, 0xf4, 0x57, 0x71, 0x28, 0xcd, 0xd9, 0x7c, 0xcd, 0x6d, 0x44, 0x62, 0xe5, 0x60, 0x7c, ++ 0x51, 0x2a, 0x3e, 0x36, 0x24, 0x8e, 0x3d, 0xda, 0xa2, 0xec, 0x08, 0x9a, 0xef, 0xc4, 0xce, 0x48, 0x5c, 0x49, 0xd7, 0xb0, 0x09, 0xc8, 0xd6, 0x31, 0x15, 0xfc, 0x81, 0xff, 0x3a, 0x62, 0xd1, 0x5a, ++ 0x88, 0x44, 0x1c, 0x03, 0xea, 0x1c, 0x2e, 0x72, 0xc4, 0x88, 0x39, 0xfc, 0x6a, 0xd7, 0x3a, 0x30, 0x74, 0x4a, 0x62, 0xb7, 0xb2, 0x16, 0x45, 0xa6, 0xaf, 0x7d, 0x61, 0xb6, 0x38, 0x3b, 0x22, 0x1e, ++ 0x21, 0x90, 0x55, 0x57, 0xcd, 0x29, 0xd9, 0x24, 0xa6, 0x09, 0x86, 0xc5, 0x11, 0xc1, 0xeb, 0xbc, 0x31, 0x6d, 0x56, 0x30, 0xa2, 0x41, 0x43, 0x23, 0xf5, 0x3a, 0xd5, 0x59, 0x94, 0xf6, 0xb3, 0x65, ++ 0x39, 0xf9, 0xc4, 0x40, 0x75, 0xa5, 0x33, 0xe4, 0x81, 0xc0, 0x84, 0x45, 0xd9, 0xca, 0x9e, 0x9d, 0x38, 0x21, 0x19, 0x38, 0x8b, 0xd1, 0xd7, 0x50, 0x52, 0x21, 0x7a, 0x94, 0x4c, 0xcc, 0x7b, 0xe9, ++ 0x09, 0xe2, 0x19, 0x71, 0x1f, 0xcc, 0x79, 0x24, 0x76, 0x92, 0x13, 0xa1, 0x92, 0x53, 0x4a, 0x55, 0x80, 0x08, 0x15, 0x7a, 0x39, 0x6e, 0xdf, 0xf4, 0x80, 0xcc, 0x3b, 0x52, 0x0f, 0xf8, 0x18, 0xb3, ++ 0x8b, 0x13, 0x5c, 0x18, 0xa8, 0x0d, 0x51, 0x05, 0xe6, 0x78, 0x83, 0x6c, 0x39, 0x5c, 0x28, 0xe9, 0x2f, 0x7a, 0x3c, 0x4e, 0x93, 0xc0, 0x10, 0x35, 0xf3, 0x41, 0x11, 0xcc, 0x49, 0x02, 0xd0, 0xc0, ++ 0x33, 0xa6, 0x3f, 0x23, 0x6a, 0x71, 0xda, 0x97, 0x4a, 0x6f, 0x40, 0x4f, 0x7a, 0xa7, 0xb5, 0xe5, 0x82, 0xc7, 0x58, 0x14, 0x2f, 0xc1, 0x82, 0x6b, 0xba, 0x98, 0xb2, 0x7d, 0x57, 0xc2, 0xe2, 0x10, ++ 0x3e, 0x10, 0xe3, 0x0d, 0x32, 0x79, 0x7b, 0x96, 0x77, 0x14, 0xd1, 0x56, 0x61, 0x11, 0x13, 0x71, 0xa2, 0xd9, 0xc5, 0x39, 0x98, 0x12, 0x46, 0x46, 0x22, 0x63, 0x5b, 0x44, 0x21, 0x26, 0xb0, 0x98, ++ 0x36, 0xb0, 0x81, 0x82, 0x72, 0x47, 0xd0, 0x54, 0x22, 0x97, 0x2b, 0xd0, 0x32, 0x0d, 0x8f, 0x42, 0xbf, 0x57, 0xe3, 0x49, 0x46, 0x12, 0x34, 0xe4, 0xd9, 0x4f, 0x01, 0x18, 0x50, 0xba, 0xb5, 0xc0, ++ 0x49, 0xb6, 0x2a, 0x59, 0x43, 0x38, 0x66, 0xfc, 0xce, 0x69, 0x66, 0x49, 0x5c, 0x26, 0x5c, 0x47, 0x65, 0xa5, 0x6c, 0x06, 0xb9, 0xfc, 0x42, 0x76, 0x54, 0x87, 0x85, 0xf4, 0x68, 0x28, 0xca, 0x60, ++ 0x2d, 0xc6, 0xd0, 0x54, 0x1f, 0x25, 0x07, 0x89, 0xc4, 0x9e, 0x8b, 0x06, 0x55, 0x9c, 0x43, 0x44, 0x60, 0xa8, 0x43, 0x80, 0x98, 0x54, 0xe5, 0xb4, 0x6e, 0x89, 0x38, 0x9f, 0x10, 0xf4, 0x89, 0x66, ++ 0x74, 0x91, 0xc1, 0x93, 0x5e, 0x8a, 0xfb, 0x9e, 0xb4, 0x71, 0x8f, 0x86, 0xac, 0x45, 0x89, 0x32, 0xbc, 0xf3, 0x3c, 0x9a, 0xbe, 0xcb, 0x2d, 0xc0, 0xc0, 0x93, 0xa7, 0xe8, 0x1d, 0xa0, 0x32, 0x7b, ++ 0xb6, 0x37, 0x52, 0x81, 0x05, 0xc3, 0x58, 0xeb, 0x76, 0x8d, 0x32, 0x3a, 0x37, 0xd4, 0x0a, 0x8c, 0x19, 0x9b, 0x7c, 0x4b, 0xb1, 0xd7, 0x2b, 0x72, 0xb6, 0x90, 0xb3, 0x6d, 0xd2, 0x7a, 0x93, 0x55, ++ 0x19, 0x1b, 0x3c, 0x3a, 0xa6, 0x75, 0xa7, 0xe6, 0xf8, 0x55, 0xeb, 0x50, 0x5f, 0x57, 0x98, 0x65, 0xdb, 0xd8, 0x91, 0x05, 0x65, 0x50, 0x5e, 0x7c, 0x0f, 0xdd, 0x54, 0x5c, 0xbb, 0xb8, 0x71, 0xb0, ++ 0xb2, 0xcc, 0x01, 0x25, 0xb7, 0x4f, 0x6b, 0x0c, 0x9b, 0x79, 0x67, 0x0a, 0x62, 0x02, 0xd1, 0xb9, 0x15, 0x4a, 0xc7, 0x76, 0x6b, 0x19, 0x19, 0xc4, 0x89, 0x58, 0x90, 0x86, 0xad, 0x8b, 0x45, 0xbe, ++ 0x0d, 0x79, 0xc9, 0x76, 0xc3, 0xc3, 0x9d, 0x6b, 0x25, 0x21, 0x3b, 0xb0, 0xb7, 0x8a, 0x57, 0x50, 0xe6, 0xa8, 0xeb, 0x34, 0x33, 0x0b, 0xb3, 0xcf, 0xf2, 0xb1, 0xc0, 0x72, 0x2a, 0xc8, 0x83, 0xb0, ++ 0x48, 0xf4, 0xb8, 0xcd, 0x06, 0x19, 0x6d, 0xa8, 0xaa, 0x8b, 0x05, 0xda, 0x42, 0x67, 0x55, 0x2b, 0xf8, 0x7a, 0xbc, 0xa5, 0x12, 0x4d, 0xc3, 0x58, 0xa8, 0x38, 0x10, 0x40, 0xe9, 0xb8, 0x1f, 0xb0, ++ 0x84, 0x43, 0x15, 0x02, 0x15, 0xd6, 0x92, 0x23, 0x28, 0x00, 0x0a, 0xc0, 0xb7, 0x88, 0xb1, 0x21, 0x93, 0x1a, 0x26, 0x7d, 0x80, 0x61, 0x9c, 0xe7, 0xd2, 0x9c, 0xd7, 0x6b, 0x60, 0xcf, 0x65, 0x83, ++ 0xdc, 0xe8, 0xce, 0xbc, 0x49, 0x01, 0x85, 0x73, 0x6c, 0x81, 0x8b, 0x25, 0xad, 0x26, 0x0b, 0x66, 0x7b, 0x1f, 0xfd, 0x46, 0x20, 0x6d, 0x01, 0x04, 0x55, 0x3a, 0xa9, 0xfb, 0x30, 0x45, 0x54, 0xa2, ++ 0x1c, 0x32, 0x72, 0x44, 0xce, 0x78, 0xaf, 0xdb, 0xd3, 0xb4, 0x62, 0x36, 0x1b, 0xb0, 0x68, 0xa1, 0x55, 0x63, 0x64, 0x09, 0xf5, 0x74, 0xc5, 0x71, 0x65, 0x72, 0xe2, 0xa5, 0xf2, 0xa4, 0xb0, 0x4f, ++ 0xb8, 0xaa, 0xd1, 0x23, 0x66, 0x84, 0x84, 0x17, 0x87, 0x56, 0x2a, 0xaf, 0x46, 0xc2, 0xc0, 0xda, 0x46, 0x65, 0xea, 0xfd, 0x46, 0x5f, 0xc6, 0x4a, 0x0c, 0x5f, 0x8f, 0x3f, 0x90, 0x03, 0x48, 0x94, ++ 0x15, 0x89, 0x9d, 0x59, 0xa5, 0x43, 0xd8, 0x20, 0x8c, 0x54, 0xa3, 0x16, 0x65, 0x29, 0xb5, 0x39, 0x22, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, ++ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, ++ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, ++ }, ++ .spki_len = 1603, ++ .spki = { ++ 0x30, 0x82, 0x06, 0x3f, 0x30, 0x0f, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0b, 0x05, 0x04, 0x04, 0x05, 0x00, 0x03, 0x82, 0x06, 0x2a, 0x00, 0x30, 0x82, 0x06, 0x25, 0x03, 0x82, ++ 0x06, 0x21, 0x00, 0xda, 0x18, 0x71, 0x2d, 0x31, 0x6e, 0x98, 0xdc, 0x7a, 0xc8, 0xc3, 0xca, 0x47, 0x37, 0x0e, 0xbd, 0x77, 0x0c, 0xe3, 0x2b, 0x3b, 0xd4, 0xb1, 0xa0, 0xc9, 0x52, 0x9a, 0xc6, 0xec, ++ 0x8e, 0xe0, 0x28, 0xb1, 0xcd, 0xb2, 0x65, 0x1c, 0xb5, 0xa6, 0xbb, 0x3c, 0x0c, 0x6d, 0xf1, 0x24, 0x0a, 0x3b, 0x91, 0x4b, 0x56, 0x56, 0xc0, 0xdc, 0x51, 0xc2, 0xb9, 0x1b, 0xfc, 0xbc, 0x37, 0xa4, ++ 0x66, 0x02, 0x87, 0xd4, 0x4f, 0x81, 0xf8, 0x53, 0xc7, 0xf4, 0x9a, 0x6d, 0x06, 0x03, 0xd6, 0xd7, 0x23, 0xcb, 0xec, 0x01, 0x5f, 0xbc, 0x43, 0x4a, 0x38, 0x24, 0x1c, 0x10, 0x9c, 0x7e, 0xd5, 0xb1, ++ 0xcc, 0x46, 0x1a, 0x2c, 0xcb, 0x9a, 0xb7, 0x14, 0x0f, 0x19, 0xf3, 0x7a, 0x13, 0xbb, 0x70, 0x1e, 0x14, 0x2b, 0xd5, 0x4b, 0x64, 0xec, 0x6b, 0x76, 0xfe, 0xc3, 0x3b, 0x69, 0xc2, 0x91, 0x8c, 0xb0, ++ 0x17, 0xc4, 0x14, 0x34, 0x23, 0x00, 0x9a, 0x3c, 0x07, 0xb5, 0xc1, 0x81, 0xb0, 0xc1, 0xeb, 0x49, 0x4a, 0x62, 0xab, 0xc8, 0x39, 0x13, 0x97, 0x08, 0x9e, 0xa6, 0x64, 0x09, 0x67, 0xc1, 0x20, 0x49, ++ 0x84, 0xcd, 0x48, 0x4c, 0xcc, 0xb0, 0x0a, 0x9a, 0x17, 0xd0, 0x87, 0x21, 0x84, 0x28, 0xef, 0x3b, 0xb7, 0x08, 0x78, 0x3e, 0x12, 0x82, 0x71, 0x04, 0x41, 0x73, 0x75, 0xb6, 0x95, 0x6f, 0xb5, 0x00, ++ 0x53, 0xd0, 0x48, 0xa4, 0x79, 0x14, 0x95, 0x82, 0x4a, 0x34, 0x80, 0xa5, 0xb7, 0x83, 0x02, 0x56, 0x09, 0x6f, 0xdd, 0x72, 0x5c, 0x30, 0x8b, 0x3b, 0xe8, 0x4a, 0x07, 0xf3, 0x63, 0x2e, 0x24, 0x95, ++ 0xc6, 0x2e, 0x96, 0x39, 0x9d, 0x80, 0xbf, 0xa7, 0x45, 0xb9, 0x84, 0x1a, 0x18, 0x33, 0xbc, 0x1d, 0x27, 0xba, 0x45, 0xa5, 0x21, 0x68, 0xee, 0x59, 0x00, 0x6c, 0x3a, 0x3a, 0x8c, 0x4a, 0x5a, 0x4f, ++ 0x50, 0x88, 0xfc, 0x73, 0x71, 0x81, 0xab, 0x51, 0x96, 0xf7, 0xb1, 0xb4, 0x9a, 0x2e, 0xd8, 0x13, 0x13, 0x4e, 0x11, 0x2f, 0x73, 0x0b, 0x99, 0x1c, 0x54, 0xa7, 0x19, 0x6b, 0xcf, 0x5f, 0xc7, 0x6e, ++ 0x13, 0x4c, 0x58, 0x43, 0xe1, 0x69, 0x88, 0x51, 0xb2, 0xf8, 0x69, 0xaf, 0xaf, 0xb0, 0x27, 0x87, 0xd9, 0xc2, 0xf1, 0x36, 0x90, 0x2d, 0xc7, 0xa7, 0xf3, 0xd6, 0x21, 0x56, 0xd1, 0x5e, 0xc3, 0x09, ++ 0x56, 0x40, 0x92, 0xc6, 0x1d, 0x83, 0xb0, 0x98, 0x6c, 0x48, 0x40, 0x99, 0x81, 0xf3, 0xc1, 0x86, 0x88, 0x0a, 0x2f, 0x63, 0xd5, 0x86, 0x0a, 0xb6, 0x01, 0xde, 0xac, 0x2b, 0x6b, 0xa1, 0xb4, 0x28, ++ 0x17, 0x9d, 0x73, 0x53, 0x3e, 0xb7, 0xa3, 0xa5, 0x11, 0x3b, 0x85, 0x61, 0xf1, 0x0b, 0x45, 0xc3, 0xcd, 0xe2, 0x82, 0xb6, 0xea, 0xd6, 0xab, 0x6c, 0x60, 0x4f, 0x09, 0xc1, 0x7b, 0xfd, 0xa0, 0x83, ++ 0x13, 0xa3, 0x26, 0x07, 0x67, 0x5a, 0xdf, 0x64, 0x31, 0xca, 0x87, 0x18, 0xe9, 0xc4, 0x3a, 0x73, 0x73, 0x32, 0x27, 0xe7, 0x3b, 0xc6, 0x1a, 0xc8, 0x45, 0xba, 0x90, 0x77, 0x55, 0xce, 0xc6, 0x89, ++ 0x25, 0xe5, 0xe2, 0xbf, 0xe9, 0x12, 0x95, 0x9d, 0xb8, 0x6f, 0xbf, 0xe2, 0x15, 0x6f, 0xd5, 0xbb, 0xdb, 0xf0, 0xc9, 0xdf, 0x8b, 0x53, 0x02, 0xaa, 0x8d, 0x90, 0xa2, 0x2d, 0x12, 0x27, 0x0e, 0x00, ++ 0x65, 0x51, 0xe4, 0x76, 0x7e, 0x45, 0x26, 0x8e, 0xd9, 0x69, 0x26, 0x54, 0x44, 0x78, 0x11, 0xea, 0xb8, 0x4f, 0x04, 0x99, 0xa8, 0xa5, 0x8c, 0xf7, 0xc0, 0x4a, 0x59, 0x56, 0x98, 0x52, 0x80, 0x45, ++ 0xf2, 0x98, 0x97, 0xc8, 0xfa, 0x96, 0xd0, 0x6c, 0xce, 0x51, 0xe6, 0xaf, 0xea, 0xc4, 0x33, 0x95, 0x89, 0xc9, 0x41, 0xc8, 0x55, 0x63, 0xd7, 0x0f, 0xac, 0xe1, 0x92, 0x88, 0x94, 0xba, 0xc0, 0x36, ++ 0x19, 0xdf, 0xf4, 0xbe, 0x3f, 0x43, 0x14, 0xa3, 0xf7, 0x35, 0x1a, 0x09, 0xa4, 0x86, 0xb5, 0x04, 0x1e, 0x7c, 0xb2, 0xda, 0x8b, 0x96, 0xbc, 0x66, 0x26, 0xa4, 0x93, 0x17, 0x35, 0x7c, 0x41, 0x52, ++ 0xa5, 0x1b, 0xa3, 0xc2, 0x8c, 0x7e, 0x0c, 0x9d, 0xb4, 0x1a, 0x06, 0xa2, 0x82, 0x90, 0xf2, 0x18, 0x73, 0x11, 0x07, 0xc9, 0x54, 0xd8, 0xa6, 0x6f, 0x80, 0x1d, 0x7d, 0xe1, 0x2a, 0x03, 0x71, 0x16, ++ 0x99, 0x0b, 0x6c, 0x53, 0xc1, 0x29, 0xf1, 0x85, 0xc3, 0x45, 0xf2, 0x7e, 0x51, 0x8b, 0x2d, 0x5a, 0x91, 0x25, 0xa0, 0x70, 0x76, 0xd9, 0x91, 0xb7, 0xda, 0xc7, 0xcc, 0x65, 0xa8, 0x56, 0x2e, 0xfb, ++ 0xcc, 0x32, 0xa9, 0xca, 0x4a, 0xd9, 0x02, 0x63, 0xb0, 0x4a, 0x4f, 0x90, 0x36, 0x11, 0x6c, 0x7b, 0x97, 0x48, 0x04, 0x96, 0x31, 0x75, 0x75, 0x65, 0x0d, 0xcc, 0x21, 0x52, 0xb5, 0xbc, 0x0e, 0x74, ++ 0x40, 0x7e, 0x12, 0xfa, 0x8e, 0x4f, 0xfc, 0xcc, 0xff, 0x76, 0xc0, 0x1a, 0x97, 0x4b, 0xd6, 0x11, 0x02, 0xe1, 0xf5, 0x29, 0x64, 0x96, 0xc7, 0x1d, 0x07, 0x64, 0xe1, 0x32, 0x29, 0xff, 0xe7, 0x84, ++ 0x6f, 0x33, 0x6e, 0x34, 0xca, 0xc9, 0x04, 0xca, 0x56, 0x70, 0xf8, 0xcd, 0x50, 0x52, 0x42, 0x7a, 0x79, 0xc0, 0x91, 0xa9, 0x71, 0x21, 0x0c, 0x5c, 0xff, 0x66, 0x7a, 0xac, 0x24, 0x93, 0x66, 0xe1, ++ 0x0d, 0x2b, 0x11, 0x37, 0x6c, 0xa3, 0x9d, 0x93, 0x52, 0x04, 0xb1, 0x2c, 0xc5, 0x85, 0xe9, 0x40, 0x54, 0x03, 0x62, 0x5f, 0xb3, 0x2c, 0xb5, 0xe5, 0xc3, 0x1b, 0x62, 0x34, 0x81, 0x60, 0x51, 0x5c, ++ 0xcc, 0x4f, 0xda, 0xf5, 0x70, 0x2d, 0x6b, 0xab, 0x5c, 0x37, 0x3d, 0xb6, 0xf3, 0x50, 0xd3, 0xe6, 0x3a, 0x5c, 0xe3, 0xca, 0x54, 0x74, 0xa0, 0xcf, 0x15, 0x67, 0x04, 0x2c, 0xa3, 0x25, 0x89, 0x86, ++ 0xff, 0x75, 0xbd, 0xfc, 0xd9, 0x29, 0xe6, 0x46, 0x2f, 0x36, 0xbc, 0xcc, 0x3f, 0x5a, 0x93, 0x35, 0x2a, 0x2b, 0x36, 0xcb, 0x16, 0x2e, 0x18, 0x74, 0xc7, 0x42, 0x87, 0x0a, 0x97, 0xb1, 0x67, 0xa0, ++ 0x50, 0x37, 0x36, 0x24, 0xea, 0xeb, 0x7e, 0x50, 0x73, 0x25, 0x6b, 0x72, 0x11, 0xb2, 0xd9, 0x4b, 0x84, 0x06, 0xcd, 0x6c, 0x95, 0x33, 0xb1, 0x53, 0x64, 0x08, 0xab, 0x0a, 0x29, 0xe5, 0xb2, 0xf0, ++ 0xc9, 0x54, 0xec, 0xe0, 0x0f, 0xbb, 0xeb, 0x17, 0x6d, 0x72, 0x4d, 0x4c, 0xf4, 0x43, 0xcf, 0x70, 0x20, 0xd5, 0xfa, 0x70, 0x94, 0xcc, 0x1b, 0x1b, 0xe6, 0x97, 0xba, 0xd3, 0x36, 0x74, 0xe4, 0x09, ++ 0x9e, 0xc7, 0xbb, 0x18, 0xf4, 0x57, 0x71, 0x28, 0xcd, 0xd9, 0x7c, 0xcd, 0x6d, 0x44, 0x62, 0xe5, 0x60, 0x7c, 0x51, 0x2a, 0x3e, 0x36, 0x24, 0x8e, 0x3d, 0xda, 0xa2, 0xec, 0x08, 0x9a, 0xef, 0xc4, ++ 0xce, 0x48, 0x5c, 0x49, 0xd7, 0xb0, 0x09, 0xc8, 0xd6, 0x31, 0x15, 0xfc, 0x81, 0xff, 0x3a, 0x62, 0xd1, 0x5a, 0x88, 0x44, 0x1c, 0x03, 0xea, 0x1c, 0x2e, 0x72, 0xc4, 0x88, 0x39, 0xfc, 0x6a, 0xd7, ++ 0x3a, 0x30, 0x74, 0x4a, 0x62, 0xb7, 0xb2, 0x16, 0x45, 0xa6, 0xaf, 0x7d, 0x61, 0xb6, 0x38, 0x3b, 0x22, 0x1e, 0x21, 0x90, 0x55, 0x57, 0xcd, 0x29, 0xd9, 0x24, 0xa6, 0x09, 0x86, 0xc5, 0x11, 0xc1, ++ 0xeb, 0xbc, 0x31, 0x6d, 0x56, 0x30, 0xa2, 0x41, 0x43, 0x23, 0xf5, 0x3a, 0xd5, 0x59, 0x94, 0xf6, 0xb3, 0x65, 0x39, 0xf9, 0xc4, 0x40, 0x75, 0xa5, 0x33, 0xe4, 0x81, 0xc0, 0x84, 0x45, 0xd9, 0xca, ++ 0x9e, 0x9d, 0x38, 0x21, 0x19, 0x38, 0x8b, 0xd1, 0xd7, 0x50, 0x52, 0x21, 0x7a, 0x94, 0x4c, 0xcc, 0x7b, 0xe9, 0x09, 0xe2, 0x19, 0x71, 0x1f, 0xcc, 0x79, 0x24, 0x76, 0x92, 0x13, 0xa1, 0x92, 0x53, ++ 0x4a, 0x55, 0x80, 0x08, 0x15, 0x7a, 0x39, 0x6e, 0xdf, 0xf4, 0x80, 0xcc, 0x3b, 0x52, 0x0f, 0xf8, 0x18, 0xb3, 0x8b, 0x13, 0x5c, 0x18, 0xa8, 0x0d, 0x51, 0x05, 0xe6, 0x78, 0x83, 0x6c, 0x39, 0x5c, ++ 0x28, 0xe9, 0x2f, 0x7a, 0x3c, 0x4e, 0x93, 0xc0, 0x10, 0x35, 0xf3, 0x41, 0x11, 0xcc, 0x49, 0x02, 0xd0, 0xc0, 0x33, 0xa6, 0x3f, 0x23, 0x6a, 0x71, 0xda, 0x97, 0x4a, 0x6f, 0x40, 0x4f, 0x7a, 0xa7, ++ 0xb5, 0xe5, 0x82, 0xc7, 0x58, 0x14, 0x2f, 0xc1, 0x82, 0x6b, 0xba, 0x98, 0xb2, 0x7d, 0x57, 0xc2, 0xe2, 0x10, 0x3e, 0x10, 0xe3, 0x0d, 0x32, 0x79, 0x7b, 0x96, 0x77, 0x14, 0xd1, 0x56, 0x61, 0x11, ++ 0x13, 0x71, 0xa2, 0xd9, 0xc5, 0x39, 0x98, 0x12, 0x46, 0x46, 0x22, 0x63, 0x5b, 0x44, 0x21, 0x26, 0xb0, 0x98, 0x36, 0xb0, 0x81, 0x82, 0x72, 0x47, 0xd0, 0x54, 0x22, 0x97, 0x2b, 0xd0, 0x32, 0x0d, ++ 0x8f, 0x42, 0xbf, 0x57, 0xe3, 0x49, 0x46, 0x12, 0x34, 0xe4, 0xd9, 0x4f, 0x01, 0x18, 0x50, 0xba, 0xb5, 0xc0, 0x49, 0xb6, 0x2a, 0x59, 0x43, 0x38, 0x66, 0xfc, 0xce, 0x69, 0x66, 0x49, 0x5c, 0x26, ++ 0x5c, 0x47, 0x65, 0xa5, 0x6c, 0x06, 0xb9, 0xfc, 0x42, 0x76, 0x54, 0x87, 0x85, 0xf4, 0x68, 0x28, 0xca, 0x60, 0x2d, 0xc6, 0xd0, 0x54, 0x1f, 0x25, 0x07, 0x89, 0xc4, 0x9e, 0x8b, 0x06, 0x55, 0x9c, ++ 0x43, 0x44, 0x60, 0xa8, 0x43, 0x80, 0x98, 0x54, 0xe5, 0xb4, 0x6e, 0x89, 0x38, 0x9f, 0x10, 0xf4, 0x89, 0x66, 0x74, 0x91, 0xc1, 0x93, 0x5e, 0x8a, 0xfb, 0x9e, 0xb4, 0x71, 0x8f, 0x86, 0xac, 0x45, ++ 0x89, 0x32, 0xbc, 0xf3, 0x3c, 0x9a, 0xbe, 0xcb, 0x2d, 0xc0, 0xc0, 0x93, 0xa7, 0xe8, 0x1d, 0xa0, 0x32, 0x7b, 0xb6, 0x37, 0x52, 0x81, 0x05, 0xc3, 0x58, 0xeb, 0x76, 0x8d, 0x32, 0x3a, 0x37, 0xd4, ++ 0x0a, 0x8c, 0x19, 0x9b, 0x7c, 0x4b, 0xb1, 0xd7, 0x2b, 0x72, 0xb6, 0x90, 0xb3, 0x6d, 0xd2, 0x7a, 0x93, 0x55, 0x19, 0x1b, 0x3c, 0x3a, 0xa6, 0x75, 0xa7, 0xe6, 0xf8, 0x55, 0xeb, 0x50, 0x5f, 0x57, ++ 0x98, 0x65, 0xdb, 0xd8, 0x91, 0x05, 0x65, 0x50, 0x5e, 0x7c, 0x0f, 0xdd, 0x54, 0x5c, 0xbb, 0xb8, 0x71, 0xb0, 0xb2, 0xcc, 0x01, 0x25, 0xb7, 0x4f, 0x6b, 0x0c, 0x9b, 0x79, 0x67, 0x0a, 0x62, 0x02, ++ 0xd1, 0xb9, 0x15, 0x4a, 0xc7, 0x76, 0x6b, 0x19, 0x19, 0xc4, 0x89, 0x58, 0x90, 0x86, 0xad, 0x8b, 0x45, 0xbe, 0x0d, 0x79, 0xc9, 0x76, 0xc3, 0xc3, 0x9d, 0x6b, 0x25, 0x21, 0x3b, 0xb0, 0xb7, 0x8a, ++ 0x57, 0x50, 0xe6, 0xa8, 0xeb, 0x34, 0x33, 0x0b, 0xb3, 0xcf, 0xf2, 0xb1, 0xc0, 0x72, 0x2a, 0xc8, 0x83, 0xb0, 0x48, 0xf4, 0xb8, 0xcd, 0x06, 0x19, 0x6d, 0xa8, 0xaa, 0x8b, 0x05, 0xda, 0x42, 0x67, ++ 0x55, 0x2b, 0xf8, 0x7a, 0xbc, 0xa5, 0x12, 0x4d, 0xc3, 0x58, 0xa8, 0x38, 0x10, 0x40, 0xe9, 0xb8, 0x1f, 0xb0, 0x84, 0x43, 0x15, 0x02, 0x15, 0xd6, 0x92, 0x23, 0x28, 0x00, 0x0a, 0xc0, 0xb7, 0x88, ++ 0xb1, 0x21, 0x93, 0x1a, 0x26, 0x7d, 0x80, 0x61, 0x9c, 0xe7, 0xd2, 0x9c, 0xd7, 0x6b, 0x60, 0xcf, 0x65, 0x83, 0xdc, 0xe8, 0xce, 0xbc, 0x49, 0x01, 0x85, 0x73, 0x6c, 0x81, 0x8b, 0x25, 0xad, 0x26, ++ 0x0b, 0x66, 0x7b, 0x1f, 0xfd, 0x46, 0x20, 0x6d, 0x01, 0x04, 0x55, 0x3a, 0xa9, 0xfb, 0x30, 0x45, 0x54, 0xa2, 0x1c, 0x32, 0x72, 0x44, 0xce, 0x78, 0xaf, 0xdb, 0xd3, 0xb4, 0x62, 0x36, 0x1b, 0xb0, ++ 0x68, 0xa1, 0x55, 0x63, 0x64, 0x09, 0xf5, 0x74, 0xc5, 0x71, 0x65, 0x72, 0xe2, 0xa5, 0xf2, 0xa4, 0xb0, 0x4f, 0xb8, 0xaa, 0xd1, 0x23, 0x66, 0x84, 0x84, 0x17, 0x87, 0x56, 0x2a, 0xaf, 0x46, 0xc2, ++ 0xc0, 0xda, 0x46, 0x65, 0xea, 0xfd, 0x46, 0x5f, 0xc6, 0x4a, 0x0c, 0x5f, 0x8f, 0x3f, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9d, 0x59, 0xa5, 0x43, 0xd8, 0x20, 0x8c, 0x54, 0xa3, 0x16, 0x65, 0x29, ++ 0xb5, 0x39, 0x22, ++ }, ++ .secret_len = 32, ++ .secret = { ++ 0xfb, 0xc4, 0xee, 0xa6, 0x91, 0xee, 0xf4, 0xc1, 0xb4, 0x76, 0xa2, 0x99, 0x36, 0x45, 0x3f, 0x4c, 0x3d, 0x48, 0x81, 0x79, 0x4e, 0xe3, 0x7b, 0xaf, 0x0f, 0xd7, 0x28, 0x40, 0x74, 0x3e, 0x7b, 0x7d, ++ }, ++ .cipher_len = 1568, ++ .cipher = { ++ 0xc2, 0x7f, 0x01, 0x24, 0x4d, 0x4b, 0x3f, 0xb2, 0x1d, 0x84, 0x37, 0xf8, 0x40, 0x01, 0x7c, 0xcc, 0xb7, 0xb7, 0xda, 0xd5, 0xfb, 0x2b, 0x47, 0xb9, 0xb5, 0x7e, 0xae, 0x4f, 0x77, 0xd0, 0xa4, 0x55, ++ 0x5e, 0x50, 0x92, 0xa2, 0x49, 0x69, 0xf2, 0x27, 0x3e, 0x97, 0x02, 0x88, 0x4a, 0x08, 0x47, 0x7b, 0x56, 0x8d, 0x80, 0x17, 0xf1, 0x38, 0x75, 0xd1, 0xf5, 0xa6, 0xd4, 0x13, 0xbd, 0xd2, 0x28, 0xeb, ++ 0xb1, 0x12, 0x60, 0xf7, 0xf4, 0x52, 0x9c, 0xbc, 0xeb, 0xf9, 0xb6, 0x86, 0x2e, 0x8a, 0x84, 0x12, 0x35, 0xf2, 0x9f, 0x60, 0xf8, 0xe8, 0x41, 0x74, 0x34, 0x18, 0x9d, 0x57, 0x99, 0x20, 0xfe, 0x6b, ++ 0x98, 0xdb, 0xe7, 0x13, 0xec, 0x16, 0xc3, 0xfd, 0xdb, 0xb8, 0x1e, 0x73, 0x1d, 0x95, 0x6b, 0x06, 0xdb, 0x49, 0x80, 0xf4, 0x9c, 0x26, 0xf2, 0x86, 0x61, 0xff, 0x9c, 0xe6, 0xe9, 0xd8, 0x61, 0xec, ++ 0x7a, 0x09, 0x84, 0x0c, 0x19, 0xde, 0x0e, 0xb6, 0x72, 0x20, 0x71, 0xf8, 0xaa, 0x48, 0x36, 0x2d, 0x2f, 0xf1, 0x27, 0xa4, 0xae, 0x46, 0xf9, 0x93, 0x37, 0x82, 0x68, 0x32, 0xad, 0xac, 0x23, 0x91, ++ 0x65, 0xf2, 0x25, 0x85, 0xbb, 0x57, 0xa8, 0x89, 0xc9, 0xc6, 0xaf, 0x82, 0x36, 0x7e, 0xc7, 0xb0, 0x72, 0x37, 0xc0, 0x53, 0x5b, 0x31, 0xb3, 0x8c, 0x1c, 0xac, 0x40, 0xac, 0x1a, 0x0c, 0x95, 0x8a, ++ 0x18, 0x87, 0xfe, 0x34, 0x71, 0x10, 0x83, 0xfd, 0x37, 0xaf, 0x4b, 0xc5, 0xb1, 0xb4, 0xe1, 0xe2, 0xee, 0x28, 0x43, 0x69, 0x3d, 0x57, 0xdd, 0x1e, 0x65, 0x7d, 0x4c, 0x24, 0xed, 0x20, 0x7e, 0xe7, ++ 0x12, 0xad, 0x2a, 0x08, 0x91, 0x45, 0x81, 0x80, 0xe9, 0xe8, 0xbd, 0x36, 0xfc, 0x14, 0xd8, 0xd6, 0x33, 0xf5, 0xb7, 0x41, 0xce, 0xa1, 0x08, 0xd2, 0xd4, 0xfd, 0x75, 0x1c, 0x5a, 0x67, 0xb0, 0x5e, ++ 0x30, 0x32, 0x4a, 0x67, 0xe9, 0xdd, 0x75, 0xc9, 0x93, 0xd4, 0xfe, 0x08, 0x54, 0xfb, 0x78, 0xdf, 0x6f, 0x3d, 0x45, 0xa2, 0xa9, 0xc8, 0xe4, 0x25, 0x10, 0xf0, 0xc3, 0xd8, 0x02, 0x03, 0x71, 0x2f, ++ 0xb3, 0x9e, 0x36, 0xb5, 0xdd, 0x8b, 0x5c, 0xcd, 0x3d, 0x09, 0xce, 0xa9, 0x42, 0x03, 0xba, 0xf8, 0x72, 0x08, 0x45, 0x71, 0xec, 0xf9, 0x78, 0xbd, 0xb9, 0x54, 0x8a, 0x25, 0x0e, 0xe4, 0x90, 0x7b, ++ 0x4a, 0xfc, 0x31, 0xb2, 0x1f, 0x31, 0x9a, 0xe4, 0xbf, 0x0a, 0xb1, 0x9c, 0xbd, 0x11, 0xeb, 0xe1, 0x33, 0x59, 0xd1, 0xaa, 0xf4, 0xfd, 0xb8, 0x3b, 0x65, 0x02, 0x50, 0x14, 0x22, 0xa5, 0xfe, 0x50, ++ 0xa8, 0xa3, 0x8e, 0xf5, 0x3d, 0xeb, 0x60, 0x3c, 0xe2, 0x3f, 0xd9, 0x79, 0x2b, 0x04, 0xde, 0xb3, 0x78, 0x71, 0x9a, 0xb7, 0x69, 0xaa, 0x58, 0x97, 0xcc, 0x65, 0xe9, 0xb1, 0x63, 0x04, 0xce, 0xa5, ++ 0x37, 0xe1, 0x76, 0x2b, 0xd8, 0xc9, 0xb1, 0x09, 0xda, 0x14, 0xa8, 0x29, 0xe6, 0x41, 0x9f, 0x1b, 0x9f, 0xf8, 0xa4, 0x66, 0xe2, 0xa6, 0xd6, 0xb3, 0x4d, 0x74, 0xff, 0xe1, 0xa5, 0x92, 0x99, 0x18, ++ 0x17, 0x59, 0xd0, 0xd3, 0x87, 0xfc, 0xed, 0x1d, 0x90, 0x7f, 0x5f, 0xb5, 0xed, 0xb4, 0x26, 0xc0, 0x51, 0x30, 0xe6, 0xca, 0x59, 0x09, 0xb2, 0x76, 0xd1, 0xa4, 0x7e, 0x71, 0x3c, 0x30, 0xd9, 0x96, ++ 0xda, 0x5e, 0x8e, 0x57, 0xe7, 0x12, 0xc7, 0x77, 0x38, 0xf2, 0x1b, 0xe7, 0x4b, 0x42, 0xb5, 0x18, 0x43, 0x2d, 0xad, 0x7e, 0xf7, 0x3e, 0x6a, 0x8c, 0x43, 0xaa, 0x9a, 0x62, 0x69, 0x94, 0xd7, 0x1a, ++ 0x31, 0x81, 0x28, 0x51, 0x80, 0x6e, 0x9f, 0xbb, 0x1f, 0x2b, 0xd3, 0x56, 0xce, 0xa3, 0x9d, 0x95, 0xf2, 0xf8, 0x7c, 0xa3, 0x0d, 0xaf, 0x6f, 0x27, 0x33, 0xf7, 0xbc, 0xe7, 0x9f, 0x8d, 0xa9, 0x95, ++ 0x05, 0x1e, 0x49, 0xa7, 0xfd, 0x22, 0x64, 0x37, 0x9c, 0x0a, 0x75, 0x2e, 0x55, 0x3e, 0xd6, 0x08, 0xeb, 0x93, 0x44, 0xc7, 0x94, 0x98, 0xf6, 0x91, 0x53, 0x85, 0x64, 0xc5, 0x4f, 0x82, 0x3b, 0xb7, ++ 0x0b, 0x12, 0xb5, 0x9e, 0x88, 0x24, 0xb4, 0xa4, 0xbb, 0x1e, 0xea, 0xc6, 0x7c, 0x81, 0x0c, 0xcc, 0x2e, 0x23, 0x74, 0x47, 0x83, 0xce, 0x95, 0x80, 0x97, 0xf7, 0xa6, 0xbc, 0x6e, 0x1f, 0x17, 0x59, ++ 0x75, 0x21, 0xb8, 0xc3, 0xd1, 0xee, 0x85, 0x96, 0xa2, 0x9f, 0xfe, 0xf1, 0x4e, 0xd9, 0x16, 0x32, 0x09, 0x7c, 0x16, 0xd5, 0x06, 0x5d, 0xb2, 0xa9, 0x63, 0xca, 0x73, 0x83, 0xac, 0x60, 0xad, 0x8f, ++ 0x4e, 0xd0, 0xd4, 0x1b, 0xd0, 0xbc, 0x3b, 0xaf, 0x19, 0x8c, 0x51, 0x25, 0xae, 0x91, 0x15, 0x06, 0xc9, 0x26, 0xd4, 0xc1, 0x17, 0x85, 0xfd, 0x61, 0x82, 0x29, 0xbf, 0xf5, 0x4c, 0xb1, 0x16, 0x1a, ++ 0xb8, 0xfc, 0x7b, 0x51, 0xda, 0xec, 0xcc, 0xd9, 0x13, 0x1e, 0xdf, 0x43, 0x7d, 0x8e, 0x52, 0x8e, 0x75, 0x81, 0xb8, 0x2c, 0x66, 0x0e, 0x8c, 0x5e, 0x25, 0x12, 0xd5, 0xf6, 0x38, 0x0a, 0x52, 0x8f, ++ 0x2a, 0xe4, 0xae, 0xe2, 0x63, 0xdb, 0x96, 0x76, 0x02, 0x4b, 0xc7, 0xad, 0x39, 0x8b, 0xc9, 0xcd, 0xda, 0xd6, 0x07, 0x96, 0x8b, 0xba, 0xb2, 0x23, 0x29, 0xe0, 0x4d, 0x6e, 0x77, 0x1f, 0xe6, 0x47, ++ 0x10, 0x7a, 0xc4, 0x66, 0x67, 0xa5, 0x1a, 0xd5, 0x58, 0xa6, 0x35, 0xf0, 0x26, 0x95, 0x1f, 0x4f, 0x48, 0xc8, 0x88, 0xd7, 0x01, 0xc2, 0xaf, 0xf4, 0xea, 0xb4, 0xe3, 0x4a, 0xdb, 0x15, 0x9a, 0xbb, ++ 0xbf, 0xab, 0xe5, 0x9b, 0x3f, 0x4c, 0xf8, 0xaa, 0xb1, 0xdd, 0x66, 0x1e, 0x4d, 0xd0, 0xc5, 0x55, 0x8d, 0xc0, 0x59, 0x20, 0x2e, 0xe6, 0x46, 0x25, 0xa3, 0xb4, 0xb9, 0x2f, 0xf4, 0xd1, 0x56, 0x97, ++ 0xf1, 0x6c, 0x18, 0xd4, 0xd2, 0x33, 0x8c, 0xfb, 0x49, 0x6e, 0x07, 0x03, 0x52, 0x68, 0x71, 0xc9, 0x78, 0x4b, 0xac, 0x8e, 0xba, 0xe8, 0x27, 0x9c, 0xf2, 0x71, 0x3a, 0xf3, 0xcc, 0x2d, 0x44, 0x0e, ++ 0x8c, 0xd2, 0x00, 0x86, 0x7b, 0x85, 0x18, 0xaa, 0xd3, 0xb9, 0xe2, 0x85, 0x02, 0x7d, 0xa0, 0xad, 0xd9, 0xf0, 0x22, 0x9e, 0xd4, 0xe8, 0x42, 0xd0, 0x5e, 0x22, 0x6a, 0xda, 0xc1, 0x3a, 0x39, 0x52, ++ 0xe3, 0x83, 0x5c, 0x8f, 0xb0, 0xa4, 0x28, 0x74, 0xc9, 0x4c, 0x66, 0x1b, 0x39, 0xdf, 0x7b, 0x72, 0x88, 0x7d, 0x22, 0x7d, 0x58, 0x3c, 0xe6, 0xb3, 0xbd, 0x65, 0xf7, 0x95, 0x10, 0x7b, 0xd0, 0x93, ++ 0x38, 0x9b, 0xfe, 0xfd, 0x17, 0x68, 0xa5, 0x71, 0x6f, 0x68, 0x5b, 0x17, 0x4e, 0xd2, 0x3e, 0x94, 0xa5, 0x95, 0x6e, 0x29, 0xbb, 0x2d, 0xdb, 0x79, 0x21, 0x03, 0xe6, 0x2f, 0x68, 0x92, 0x8a, 0xcc, ++ 0x60, 0x3e, 0xec, 0x2f, 0xf5, 0x6d, 0xb1, 0x4c, 0x08, 0xb7, 0xcb, 0xe4, 0xe2, 0xb4, 0xf2, 0xe0, 0xea, 0xee, 0x54, 0x16, 0x2e, 0x95, 0xbb, 0x35, 0xef, 0x36, 0x30, 0x3e, 0xe3, 0xe6, 0xcc, 0x61, ++ 0x06, 0x13, 0x73, 0x87, 0x6f, 0x7a, 0x09, 0x6a, 0x8a, 0xf5, 0x7d, 0x78, 0x2f, 0x8c, 0x82, 0x03, 0xde, 0x93, 0x42, 0x3a, 0x37, 0x91, 0x22, 0xfe, 0x7d, 0xad, 0x77, 0x0c, 0x36, 0x90, 0xf9, 0x78, ++ 0x22, 0x84, 0x60, 0xd0, 0x25, 0xce, 0x93, 0xb1, 0xb3, 0x36, 0xc5, 0x73, 0xe4, 0xe5, 0x58, 0x40, 0xea, 0x65, 0xcf, 0xdd, 0x61, 0x22, 0xc6, 0x72, 0xc9, 0x12, 0xf5, 0x29, 0x39, 0xd9, 0xea, 0x5b, ++ 0xe0, 0x62, 0x10, 0xf5, 0xe7, 0xed, 0xb6, 0x5b, 0x66, 0x94, 0x5d, 0x70, 0x56, 0xf5, 0x59, 0xa7, 0xd6, 0x92, 0x53, 0xf4, 0xbd, 0xbc, 0x57, 0x9d, 0xe9, 0x64, 0xf3, 0xe9, 0x3a, 0x86, 0xfa, 0x38, ++ 0xb6, 0xa2, 0xc0, 0xb5, 0x43, 0x38, 0xdc, 0xe0, 0x93, 0xf0, 0xb4, 0x68, 0x4e, 0xe3, 0x61, 0x44, 0x9f, 0x16, 0xc2, 0x79, 0xa7, 0x2b, 0x77, 0x31, 0xe4, 0x46, 0x00, 0xa7, 0x02, 0x77, 0x68, 0xfd, ++ 0xd0, 0xf6, 0x43, 0xed, 0x10, 0x06, 0x4b, 0x98, 0xa9, 0xda, 0x03, 0x2f, 0x1f, 0x5d, 0xea, 0xd3, 0x11, 0xe1, 0x77, 0x33, 0x50, 0x94, 0xdb, 0x4e, 0x38, 0x51, 0x4e, 0xae, 0x15, 0xa8, 0xf8, 0xec, ++ 0xf2, 0xf2, 0x41, 0x4e, 0x37, 0x8e, 0xfb, 0xf9, 0x97, 0xb1, 0x06, 0x6b, 0x6f, 0x69, 0xd6, 0x69, 0x09, 0xa4, 0x7e, 0x29, 0x8a, 0x7f, 0xec, 0x96, 0x1a, 0x83, 0x78, 0x2e, 0x0e, 0x47, 0x0f, 0xe0, ++ 0x71, 0xde, 0xcf, 0x4b, 0x26, 0xac, 0xa6, 0xed, 0x68, 0x83, 0x59, 0xe1, 0x08, 0x50, 0x55, 0xfd, 0x2b, 0x5a, 0xe9, 0xf4, 0x91, 0x87, 0x49, 0x89, 0x7a, 0xf1, 0x33, 0x60, 0x60, 0x53, 0xd5, 0xf6, ++ 0xa8, 0x52, 0x8c, 0xcb, 0x31, 0xab, 0x7f, 0x3f, 0x2d, 0x89, 0xa9, 0x5c, 0x5f, 0x05, 0xb1, 0x57, 0x00, 0xe5, 0x32, 0xad, 0x81, 0xd5, 0x9d, 0x9d, 0xb8, 0xa2, 0xc2, 0x9c, 0xac, 0x93, 0x6e, 0x3f, ++ 0x33, 0xdf, 0xe2, 0x4b, 0x0b, 0x1b, 0x71, 0x90, 0x2d, 0xc9, 0xc3, 0x0e, 0xc8, 0xc7, 0x0b, 0xda, 0xba, 0x48, 0x4f, 0xcd, 0x2b, 0x94, 0x6d, 0x73, 0x5f, 0x16, 0xee, 0xad, 0x04, 0x03, 0x1c, 0xaf, ++ 0xde, 0x9e, 0xe0, 0x16, 0x96, 0xec, 0x9f, 0x0a, 0x8d, 0x5f, 0x36, 0xb6, 0x9c, 0x64, 0x2f, 0xfd, 0x0a, 0xd0, 0xd2, 0x54, 0x4f, 0x5e, 0x7f, 0xd8, 0x9a, 0x80, 0x49, 0x8e, 0xf6, 0x8e, 0x18, 0x16, ++ 0x17, 0xfa, 0xd4, 0x1e, 0x0b, 0xd5, 0x9b, 0xaa, 0xff, 0xee, 0xfe, 0x2f, 0x99, 0x72, 0x4c, 0x71, 0x9d, 0x47, 0xa2, 0xec, 0xba, 0x72, 0x1d, 0x76, 0xf2, 0x37, 0xeb, 0xa7, 0x3d, 0xb4, 0x7d, 0x88, ++ 0xb6, 0x99, 0xe3, 0x58, 0x2b, 0x07, 0x3c, 0x7e, 0xad, 0x2a, 0x5b, 0x3c, 0xf0, 0x24, 0x46, 0x63, 0x96, 0xf9, 0xf2, 0x82, 0x6c, 0xb7, 0x54, 0xf6, 0x60, 0x18, 0xe9, 0x50, 0x3f, 0x4a, 0xd1, 0xf9, ++ 0xd9, 0x21, 0x21, 0xaa, 0x99, 0x56, 0x50, 0x60, 0x51, 0xd5, 0x96, 0xff, 0xd4, 0x67, 0xe1, 0xaa, 0x8d, 0x96, 0x4c, 0x17, 0x67, 0xc9, 0x25, 0xb4, 0x68, 0xbb, 0xc9, 0x85, 0x06, 0x00, 0xc8, 0x43, ++ 0x49, 0x05, 0x41, 0xe8, 0x55, 0x5a, 0x3d, 0x8b, 0xd9, 0xf1, 0x87, 0x91, 0xef, 0x9e, 0xbd, 0x35, 0x94, 0xe7, 0x4c, 0x1f, 0xe3, 0xd3, 0xb8, 0x09, 0x40, 0xa8, 0xa0, 0x79, 0xf8, 0xd2, 0xca, 0x8d, ++ 0x30, 0x13, 0x4f, 0xc6, 0x6f, 0x87, 0x00, 0x81, 0x26, 0xe4, 0x3b, 0xd0, 0x6e, 0xb6, 0xe4, 0x1c, 0x3a, 0x70, 0xfa, 0x47, 0x39, 0x31, 0x9b, 0xf1, 0xa9, 0x32, 0xf0, 0x2c, 0x30, 0x64, 0x56, 0x56, ++ 0x0c, 0xda, 0x44, 0xdd, 0xac, 0x43, 0xed, 0x6d, 0x90, 0x04, 0x45, 0xf5, 0xbf, 0x85, 0xbb, 0x0c, 0xe3, 0x25, 0x94, 0x74, 0x36, 0xe0, 0xd0, 0x68, 0x5e, 0x41, 0xb1, 0x6b, 0xc7, 0x16, 0x95, 0x18, ++ 0x25, 0x9e, 0x57, 0x34, 0xfd, 0xce, 0x08, 0x0f, 0xfe, 0x85, 0x19, 0x1b, 0x1d, 0x8d, 0x8d, 0xe4, 0xdb, 0x48, 0x14, 0x3f, 0xb5, 0x64, 0x03, 0x8a, 0xce, 0x80, 0x10, 0x4d, 0x3a, 0x8d, 0x07, 0x12, ++ 0x45, 0xe2, 0xaa, 0x56, 0xc7, 0x19, 0x33, 0xf4, 0xdc, 0xf9, 0x25, 0xee, 0xe8, 0x44, 0xc8, 0x0f, 0xdd, 0xf3, 0x25, 0x1f, 0x74, 0x00, 0x6a, 0x23, 0x41, 0x33, 0x18, 0xbb, 0xfd, 0x2e, 0xd9, 0xe0, ++ 0x53, 0x51, 0xb5, 0xaa, 0xeb, 0xcc, 0x77, 0xcf, 0xac, 0x8d, 0x5f, 0x03, 0x64, 0x23, 0x1a, 0x50, 0xea, 0x86, 0x47, 0xc7, 0x2f, 0x71, 0x3e, 0x81, 0x7a, 0x20, 0x75, 0x32, 0x30, 0x29, 0xe3, 0xb8, ++ 0x8b, 0x72, 0x44, 0x22, 0x64, 0xc5, 0x97, 0xb0, 0xf1, 0xfc, 0x09, 0xf9, 0x40, 0x1c, 0xe8, 0x8a, 0xc9, 0x7c, 0x55, 0x22, 0xa5, 0x63, 0x64, 0x52, 0x3c, 0x37, 0xfe, 0xa2, 0xd6, 0xbd, 0x06, 0xb2, ++ }, ++ ++ }, ++}; ++ ++#define KYBER_TV_NUM sizeof(kyber_tv)/sizeof(struct KYBER_TEST_VECTOR) ++ +diff --git a/testcases/crypto/kyber_func.c b/testcases/crypto/kyber_func.c +new file mode 100644 +index 00000000..2e6177b3 +--- /dev/null ++++ b/testcases/crypto/kyber_func.c +@@ -0,0 +1,1176 @@ ++/* ++ * COPYRIGHT (c) International Business Machines Corp. 2022 ++ * ++ * This program is provided under the terms of the Common Public License, ++ * version 1.0 (CPL-1.0). Any use, reproduction or distribution for this ++ * software constitutes recipient's acceptance of CPL-1.0 terms which can be ++ * found in the file LICENSE file or at ++ * https://opensource.org/licenses/cpl1.0.php ++ */ ++ ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include "pkcs11types.h" ++#include "regress.h" ++#include "common.c" ++#include "defs.h" ++#include "kyber.h" ++#include "mechtable.h" ++#include "pqc_oids.h" ++#include "ec_curves.h" ++ ++/** ++ * Experimental Support for Kyber keys and KEM ++ * with oid = 1.3.6.1.4.1.2.267.5.xxx ++ */ ++ ++const CK_BYTE kyber_r2_768[] = OCK_KYBER_R2_768; ++const CK_ULONG kyber_r2_768_len = sizeof(kyber_r2_768); ++const CK_BYTE kyber_r2_1024[] = OCK_KYBER_R2_1024; ++const CK_ULONG kyber_r2_1024_len = sizeof(kyber_r2_1024); ++ ++const CK_BYTE prime256v1[] = OCK_PRIME256V1; ++ ++typedef struct variant_info { ++ const char *name; ++ CK_ULONG keyform; ++ const CK_BYTE *oid; ++ CK_ULONG oid_len; ++} _variant_info; ++ ++const _variant_info variants[] = { ++ { "DEFAULT (KYBER_R2_1024)", 0, NULL, 0 }, ++ { "KYBER_R2_768", CK_IBM_KYBER_KEYFORM_ROUND2_768, ++ kyber_r2_768, kyber_r2_768_len }, ++ { "KYBER_R2_1024", CK_IBM_KYBER_KEYFORM_ROUND2_1024, ++ kyber_r2_1024, kyber_r2_1024_len }, ++}; ++ ++const CK_ULONG num_variants = sizeof(variants) / sizeof(_variant_info); ++ ++typedef struct kemParam { ++ CK_IBM_KYBER_KDF_TYPE kdf; ++ CK_ULONG secret_key_len; ++ CK_ULONG shard_data_len; ++ CK_BYTE shared_data[32]; ++ CK_BBOOL hybrid; ++} _kemParam; ++ ++const _kemParam kemInput[] = { ++ { CKD_NULL, 32, 0, {0x00}, CK_FALSE }, ++ { CKD_IBM_HYBRID_SHA1_KDF, 16, 0, {0x00}, CK_TRUE }, ++ { CKD_IBM_HYBRID_SHA1_KDF, 32, 16, ++ { 0x32,0x3F,0xA3,0x16,0x9D,0x8E,0x9C,0x65,0x93,0xF5,0x94,0x76,0xBC,0x14,0x20,0x00 }, ++ CK_TRUE }, ++ { CKD_IBM_HYBRID_SHA224_KDF, 16, 0, {0x00}, CK_TRUE }, ++ { CKD_IBM_HYBRID_SHA224_KDF, 32, 16, ++ { 0x32,0x3F,0xA3,0x16,0x9D,0x8E,0x9C,0x65,0x93,0xF5,0x94,0x76,0xBC,0x14,0x20,0x00 }, ++ CK_TRUE }, ++ { CKD_IBM_HYBRID_SHA256_KDF, 16, 0, {0x00}, CK_TRUE }, ++ { CKD_IBM_HYBRID_SHA256_KDF, 32, 16, ++ { 0x32,0x3F,0xA3,0x16,0x9D,0x8E,0x9C,0x65,0x93,0xF5,0x94,0x76,0xBC,0x14,0x20,0x00 }, ++ CK_TRUE }, ++ { CKD_IBM_HYBRID_SHA384_KDF, 16, 0, {0x00}, CK_TRUE }, ++ { CKD_IBM_HYBRID_SHA384_KDF, 32, 16, ++ { 0x32,0x3F,0xA3,0x16,0x9D,0x8E,0x9C,0x65,0x93,0xF5,0x94,0x76,0xBC,0x14,0x20,0x00 }, ++ CK_TRUE }, ++ { CKD_IBM_HYBRID_SHA512_KDF, 16, 0, {0x00}, CK_TRUE }, ++ { CKD_IBM_HYBRID_SHA512_KDF, 32, 16, ++ { 0x32,0x3F,0xA3,0x16,0x9D,0x8E,0x9C,0x65,0x93,0xF5,0x94,0x76,0xBC,0x14,0x20,0x00 }, ++ CK_TRUE }, ++}; ++ ++static const char *p11_get_ckd(CK_EC_KDF_TYPE kdf) ++{ ++ switch (kdf) { ++ case CKD_NULL: ++ return "CKD_NULL"; ++ case CKD_SHA1_KDF: ++ return "CKD_SHA1_KDF"; ++ case CKD_SHA224_KDF: ++ return "CKD_SHA224_KDF"; ++ case CKD_SHA256_KDF: ++ return "CKD_SHA256_KDF"; ++ case CKD_SHA384_KDF: ++ return "CKD_SHA384_KDF"; ++ case CKD_SHA512_KDF: ++ return "CKD_SHA512_KDF"; ++ case CKD_IBM_HYBRID_NULL: ++ return "CKD_IBM_HYBRID_NULL"; ++ case CKD_IBM_HYBRID_SHA1_KDF: ++ return "CKD_IBM_HYBRID_SHA1_KDF"; ++ case CKD_IBM_HYBRID_SHA224_KDF: ++ return "CKD_IBM_HYBRID_SHA224_KDF"; ++ case CKD_IBM_HYBRID_SHA256_KDF: ++ return "CKD_IBM_HYBRID_SHA256_KDF"; ++ case CKD_IBM_HYBRID_SHA384_KDF: ++ return "CKD_IBM_HYBRID_SHA384_KDF"; ++ case CKD_IBM_HYBRID_SHA512_KDF: ++ return "CKD_IBM_HYBRID_SHA512_KDF"; ++ default: ++ return "UNKNOWN"; ++ } ++} ++ ++#define NUM_KEM_INPUTS sizeof(kemInput)/sizeof(_kemParam) ++ ++/* ++ * Perform a HMAC sign to verify that the key is usable. ++ */ ++CK_RV run_HMACSign(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE h_key1, ++ CK_OBJECT_HANDLE h_key2, CK_ULONG key_len) ++{ ++ CK_MECHANISM mech = { .mechanism = CKM_SHA_1_HMAC, ++ .pParameter = NULL, .ulParameterLen = 0 }; ++ CK_BYTE data[32] = { 0 }; ++ CK_BYTE mac[SHA1_HASH_SIZE] = { 0 }; ++ CK_ULONG mac_len = sizeof(mac); ++ CK_RV rc = CKR_OK; ++ ++ if (!mech_supported(SLOT_ID, CKM_SHA_1_HMAC)) { ++ testcase_notice("Mechanism CKM_SHA_1_HMAC is not supported with slot " ++ "%lu. Skipping key check", SLOT_ID); ++ return CKR_OK; ++ } ++ if (!check_supp_keysize(SLOT_ID, CKM_SHA_1_HMAC, key_len * 8)) { ++ testcase_notice("Mechanism CKM_SHA_1_HMAC can not be used with keys " ++ "of size %lu. Skipping key check", key_len); ++ return CKR_OK; ++ } ++ ++ rc = funcs->C_SignInit(session, &mech, h_key1); ++ if (rc != CKR_OK) { ++ testcase_notice("C_SignInit rc=%s", p11_get_ckr(rc)); ++ goto error; ++ } ++ ++ /** do signing **/ ++ rc = funcs->C_Sign(session, data, sizeof(data), mac, &mac_len); ++ if (rc != CKR_OK) { ++ testcase_notice("C_Sign rc=%s", p11_get_ckr(rc)); ++ goto error; ++ } ++ ++ rc = funcs->C_VerifyInit(session, &mech, h_key2); ++ if (rc != CKR_OK) { ++ testcase_notice("C_VerifyInit rc=%s", p11_get_ckr(rc)); ++ goto error; ++ } ++ ++ /** do verify **/ ++ rc = funcs->C_Verify(session, data, sizeof(data), mac, mac_len); ++ if (rc != CKR_OK) { ++ testcase_notice("C_Verify rc=%s", p11_get_ckr(rc)); ++ goto error; ++ } ++ ++error: ++ return rc; ++} ++ ++CK_RV ecdh_derive_secret(CK_SESSION_HANDLE session, CK_ULONG secret_key_len, ++ CK_EC_KDF_TYPE kdf, CK_OBJECT_HANDLE *hybrid_key) ++{ ++ CK_OBJECT_HANDLE publ_key = CK_INVALID_HANDLE; ++ CK_OBJECT_HANDLE priv_key = CK_INVALID_HANDLE; ++ CK_ECDH1_DERIVE_PARAMS ecda_params; ++ CK_MECHANISM mech; ++ CK_RV rc; ++ ++ CK_BYTE pubkey_value[256]; ++ CK_ATTRIBUTE extr_tmpl[] = { ++ {CKA_EC_POINT, pubkey_value, sizeof(pubkey_value)}, ++ }; ++ CK_ULONG extr_tmpl_len = sizeof(extr_tmpl)/sizeof(CK_ATTRIBUTE); ++ ++ CK_OBJECT_CLASS class = CKO_SECRET_KEY; ++ CK_KEY_TYPE key_type = CKK_GENERIC_SECRET; ++ CK_BBOOL true = CK_TRUE; ++ CK_BBOOL false = CK_FALSE; ++ CK_ATTRIBUTE derive_tmpl[] = { ++ {CKA_CLASS, &class, sizeof(class)}, ++ {CKA_KEY_TYPE, &key_type, sizeof(key_type)}, ++ {CKA_SENSITIVE, &false, sizeof(false)}, ++ {CKA_VALUE_LEN, &secret_key_len, sizeof(CK_ULONG)}, ++ {CKA_IBM_USE_AS_DATA, &true, sizeof(true)}, ++ }; ++ CK_ULONG secret_tmpl_len = ++ sizeof(derive_tmpl) / sizeof(CK_ATTRIBUTE); ++ ++ if (!mech_supported(SLOT_ID, CKM_EC_KEY_PAIR_GEN)) { ++ testcase_notice("Slot %u doesn't support CKM_EC_KEY_PAIR_GEN\n", ++ (unsigned int) SLOT_ID); ++ return CKR_FUNCTION_NOT_SUPPORTED; ++ } ++ ++ rc = generate_EC_KeyPair(session, (CK_BYTE *)prime256v1, sizeof(prime256v1), ++ &publ_key, &priv_key); ++ if (rc != CKR_OK) { ++ testcase_notice("generate_EC_KeyPair rc=%s", p11_get_ckr(rc)); ++ goto error; ++ } ++ ++ rc = funcs->C_GetAttributeValue(session, publ_key, extr_tmpl, extr_tmpl_len); ++ if (rc != CKR_OK) { ++ testcase_notice("C_GetAttributeValue: rc = %s", p11_get_ckr(rc)); ++ goto error; ++ } ++ ++ mech.mechanism = CKM_ECDH1_DERIVE; ++ mech.pParameter = &ecda_params; ++ mech.ulParameterLen = sizeof(ecda_params); ++ ++ memset(&ecda_params, 0, sizeof(ecda_params)); ++ ecda_params.kdf = kdf; ++ ecda_params.pPublicData = extr_tmpl[0].pValue; ++ ecda_params.ulPublicDataLen = extr_tmpl[0].ulValueLen; ++ ++ rc = funcs->C_DeriveKey(session, &mech, priv_key, derive_tmpl, ++ secret_tmpl_len, hybrid_key); ++ if (rc != CKR_OK) { ++ testcase_notice("C_DeriveKey: rc = %s", p11_get_ckr(rc)); ++ goto error; ++ } ++ ++error: ++ if (publ_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, publ_key); ++ if (priv_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, priv_key); ++ ++ return rc; ++} ++ ++CK_RV run_EnDecapsulateKyber(CK_SESSION_HANDLE session, ++ CK_OBJECT_HANDLE priv_key, ++ CK_OBJECT_HANDLE publ_key, ++ CK_ULONG secret_key_len, ++ CK_IBM_KYBER_KDF_TYPE kdf, ++ CK_BBOOL hybrid, ++ const CK_BYTE *pSharedData, ++ CK_ULONG ulSharedDataLen, ++ const CK_BYTE *pCipher, ++ CK_ULONG ulCipherLen, ++ const CK_BYTE *pExpectedSecret, ++ CK_ULONG ulExpectedSecret) ++{ ++ CK_MECHANISM mech; ++ CK_MECHANISM_INFO mech_info; ++ CK_IBM_KYBER_PARAMS kyber_params; ++ CK_BYTE *cipher = NULL; ++ CK_ULONG cipher_len = 0; ++ CK_OBJECT_HANDLE secret_key1 = CK_INVALID_HANDLE; ++ CK_OBJECT_HANDLE secret_key2 = CK_INVALID_HANDLE; ++ CK_OBJECT_HANDLE hybrid_key = CK_INVALID_HANDLE; ++ CK_OBJECT_HANDLE expected_secret_key = CK_INVALID_HANDLE; ++ CK_RV rc; ++ ++ CK_OBJECT_CLASS class = CKO_SECRET_KEY; ++ CK_KEY_TYPE key_type = CKK_GENERIC_SECRET; ++ CK_BBOOL true = CK_TRUE; ++ CK_BBOOL false = CK_FALSE; ++ CK_ATTRIBUTE derive_tmpl[] = { ++ {CKA_CLASS, &class, sizeof(class)}, ++ {CKA_KEY_TYPE, &key_type, sizeof(key_type)}, ++ {CKA_SENSITIVE, &false, sizeof(false)}, ++ {CKA_VALUE_LEN, &secret_key_len, sizeof(secret_key_len)}, ++ {CKA_SIGN, &true, sizeof(true)}, ++ {CKA_VERIFY, &true, sizeof(true)}, ++ }; ++ CK_ULONG secret_tmpl_len = sizeof(derive_tmpl) / sizeof(CK_ATTRIBUTE); ++ ++ mech.mechanism = CKM_IBM_KYBER; ++ mech.ulParameterLen = sizeof(kyber_params); ++ mech.pParameter = &kyber_params; ++ ++ /* Query the slot, check if this mech if supported */ ++ rc = funcs->C_GetMechanismInfo(SLOT_ID, mech.mechanism, &mech_info); ++ if (rc != CKR_OK) { ++ if (rc == CKR_MECHANISM_INVALID) { ++ /* no support for Kyber? skip */ ++ testcase_skip("Slot %u doesn't support %s", ++ (unsigned int) SLOT_ID, ++ p11_get_ckm(&mechtable_funcs, mech.mechanism)); ++ rc = CKR_OK; ++ goto testcase_cleanup; ++ } else { ++ testcase_error("C_GetMechanismInfo() rc = %s", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ } ++ ++ if (hybrid) { ++ rc = ecdh_derive_secret(session, 32, CKD_IBM_HYBRID_NULL, &hybrid_key); ++ if (rc != CKR_OK) { ++ testcase_error("ecdh_derive_secret() rc = %s", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ } ++ ++ if (pCipher != NULL && ulCipherLen != 0) { ++ cipher_len = ulCipherLen; ++ cipher = (CK_BYTE *)pCipher; ++ goto decapsulate; ++ } ++ ++ /* Perform encapsulation with public key */ ++ memset(&kyber_params, 0, sizeof(kyber_params)); ++ kyber_params.ulVersion = CK_IBM_KYBER_KEM_VERSION; ++ kyber_params.mode = CK_IBM_KYBER_KEM_ENCAPSULATE; ++ kyber_params.kdf = kdf; ++ kyber_params.pSharedData = (CK_BYTE *)pSharedData; ++ kyber_params.ulSharedDataLen = ulSharedDataLen; ++ kyber_params.bPrepend = (hybrid_key != CK_INVALID_HANDLE); ++ kyber_params.hSecret = hybrid_key; ++ ++ /* Size query */ ++ rc = funcs->C_DeriveKey(session, &mech, publ_key, derive_tmpl, ++ secret_tmpl_len, &secret_key1); ++ if (rc != CKR_BUFFER_TOO_SMALL) { ++ testcase_error("C_DeriveKey (size query) rc=%s (expected CKR_BUFFER_TOO_SMALL)", ++ p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ ++ cipher_len = kyber_params.ulCipherLen; ++ cipher = calloc(sizeof(CK_BYTE), cipher_len); ++ if (cipher == NULL) { ++ testcase_error("Can't allocate memory for %lu bytes", ++ sizeof(CK_BYTE) * cipher_len); ++ rc = CKR_HOST_MEMORY; ++ goto testcase_cleanup; ++ } ++ ++ kyber_params.ulCipherLen = cipher_len; ++ kyber_params.pCipher = cipher; ++ ++ /* Encapsulation */ ++ rc = funcs->C_DeriveKey(session, &mech, publ_key, derive_tmpl, ++ secret_tmpl_len, &secret_key1); ++ if (rc != CKR_OK) { ++ testcase_error("C_DeriveKey (encapsulation) rc=%s", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ ++decapsulate: ++ /* Perform Decapsulation with private key */ ++ memset(&kyber_params, 0, sizeof(kyber_params)); ++ kyber_params.ulVersion = CK_IBM_KYBER_KEM_VERSION; ++ kyber_params.mode = CK_IBM_KYBER_KEM_DECAPSULATE; ++ kyber_params.kdf = kdf; ++ kyber_params.pSharedData = (CK_BYTE *)pSharedData; ++ kyber_params.ulSharedDataLen = ulSharedDataLen; ++ kyber_params.bPrepend = (hybrid_key != CK_INVALID_HANDLE); ++ kyber_params.hSecret = hybrid_key; ++ kyber_params.ulCipherLen = cipher_len; ++ kyber_params.pCipher = cipher; ++ ++ rc = funcs->C_DeriveKey(session, &mech, priv_key, derive_tmpl, ++ secret_tmpl_len, &secret_key2); ++ if (rc != CKR_OK) { ++ testcase_error("C_DeriveKey (decapsulation) rc=%s", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ ++ if (secret_key1 != CK_INVALID_HANDLE) { ++ rc = run_HMACSign(session, secret_key1, secret_key2, secret_key_len); ++ if (rc != CKR_OK) { ++ testcase_fail("Derived keys are not usable or not the same: %s", ++ p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ } ++ ++ if (pExpectedSecret != NULL && ulExpectedSecret != 0) { ++ rc = create_GenericSecretKey(session, (CK_BYTE *)pExpectedSecret, ++ ulExpectedSecret, &expected_secret_key); ++ if (rc != CKR_OK) { ++ testcase_fail("create_GenericSecretKey failed: %s", ++ p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ ++ rc = run_HMACSign(session, expected_secret_key, secret_key2, ++ secret_key_len); ++ if (rc != CKR_OK) { ++ testcase_fail("Derived secret key is not the expected one: %s", ++ p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ } ++ ++ rc = CKR_OK; ++ ++testcase_cleanup: ++ if (cipher != NULL && cipher != pCipher) ++ free(cipher); ++ if (secret_key1 != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, secret_key1); ++ if (secret_key2 != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, secret_key2); ++ if (hybrid_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, hybrid_key); ++ if (expected_secret_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, expected_secret_key); ++ ++ return rc; ++} ++ ++CK_RV run_EncrypDecryptKyber(CK_SESSION_HANDLE session, ++ CK_OBJECT_HANDLE priv_key, ++ CK_OBJECT_HANDLE publ_key) ++{ ++ CK_MECHANISM mech; ++ CK_BYTE_PTR data = NULL, encrypted = NULL, decrypted = NULL; ++ CK_ULONG i, datalen, encrypted_len, decrypted_len; ++ CK_MECHANISM_INFO mech_info; ++ CK_RV rc; ++ ++ mech.mechanism = CKM_IBM_KYBER; ++ mech.ulParameterLen = 0; ++ mech.pParameter = NULL; ++ ++ datalen = 32; /* Kyber can encrypt blocks of 32 bytes */ ++ ++ /* Query the slot, check if this mech if supported */ ++ rc = funcs->C_GetMechanismInfo(SLOT_ID, mech.mechanism, &mech_info); ++ if (rc != CKR_OK) { ++ if (rc == CKR_MECHANISM_INVALID) { ++ /* no support for Kyber? skip */ ++ testcase_skip("Slot %u doesn't support %s", ++ (unsigned int) SLOT_ID, ++ p11_get_ckm(&mechtable_funcs, mech.mechanism)); ++ rc = CKR_OK; ++ goto testcase_cleanup; ++ } else { ++ testcase_error("C_GetMechanismInfo() rc = %s", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ } ++ ++ data = calloc(sizeof(CK_BYTE), datalen); ++ if (data == NULL) { ++ testcase_error("Can't allocate memory for %lu bytes", ++ sizeof(CK_BYTE) * datalen); ++ rc = CKR_HOST_MEMORY; ++ goto testcase_cleanup; ++ } ++ ++ for (i = 0; i < datalen; i++) { ++ data[i] = (i + 1) % 255; ++ } ++ ++ /* Encrypt */ ++ rc = funcs->C_EncryptInit(session, &mech, publ_key); ++ if (rc != CKR_OK) { ++ testcase_error("C_EncryptInit rc=%s", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ ++ rc = funcs->C_Encrypt(session, data, datalen, NULL, &encrypted_len); ++ if (rc != CKR_OK) { ++ testcase_error("C_Encrypt rc=%s", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ ++ encrypted = calloc(sizeof(CK_BYTE), encrypted_len); ++ if (encrypted == NULL) { ++ testcase_error("Can't allocate memory for %lu bytes", ++ sizeof(CK_BYTE) * encrypted_len); ++ rc = CKR_HOST_MEMORY; ++ goto testcase_cleanup; ++ } ++ ++ rc = funcs->C_Encrypt(session, data, datalen, encrypted, &encrypted_len); ++ if (rc != CKR_OK) { ++ testcase_error("C_Encrypt rc=%s", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ ++ /* Decrypt */ ++ rc = funcs->C_DecryptInit(session, &mech, priv_key); ++ if (rc != CKR_OK) { ++ testcase_error("C_DecryptInit rc=%s", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ ++ rc = funcs->C_Decrypt(session, encrypted, encrypted_len, ++ NULL, &decrypted_len); ++ if (rc != CKR_OK) { ++ testcase_error("C_Decrypt rc=%s", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ ++ decrypted = calloc(sizeof(CK_BYTE), decrypted_len); ++ if (decrypted == NULL) { ++ testcase_error("Can't allocate memory for %lu bytes", ++ sizeof(CK_BYTE) * decrypted_len); ++ rc = CKR_HOST_MEMORY; ++ goto testcase_cleanup; ++ } ++ ++ rc = funcs->C_Decrypt(session, encrypted, encrypted_len, ++ decrypted, &decrypted_len); ++ if (rc != CKR_OK) { ++ testcase_error("C_Decrypt rc=%s", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ ++ if (decrypted_len != datalen || ++ memcmp(decrypted, data, datalen) != 0) { ++ testcase_error("Decrypted data (%lu bytes) does not match original data (%lu bytes)", ++ decrypted_len, datalen); ++ goto testcase_cleanup; ++ } ++ ++ rc = CKR_OK; ++ ++testcase_cleanup: ++ if (data) ++ free(data); ++ if (encrypted) ++ free(encrypted); ++ if (decrypted) ++ free(decrypted); ++ ++ return rc; ++} ++ ++CK_RV run_GenerateKyberKeyPairEnDecryptKEM(void) ++{ ++ CK_MECHANISM mech; ++ CK_OBJECT_HANDLE publ_key = CK_INVALID_HANDLE, priv_key = CK_INVALID_HANDLE; ++ CK_SESSION_HANDLE session; ++ CK_BYTE user_pin[PKCS11_MAX_PIN_LEN]; ++ CK_ULONG user_pin_len, i, j; ++ CK_FLAGS flags; ++ CK_MECHANISM_INFO mech_info; ++ CK_RV rc; ++ ++ testcase_rw_session(); ++ testcase_user_login(); ++ ++ mech.mechanism = CKM_IBM_KYBER; ++ mech.ulParameterLen = 0; ++ mech.pParameter = NULL; ++ ++ /* query the slot, check if this mech is supported */ ++ rc = funcs->C_GetMechanismInfo(SLOT_ID, mech.mechanism, &mech_info); ++ if (rc != CKR_OK) { ++ if (rc == CKR_MECHANISM_INVALID) { ++ /* no support for Kyber key gen? skip */ ++ testcase_skip("Slot %u doesn't support CKM_IBM_KYBER ", ++ (unsigned int) SLOT_ID); ++ rc = CKR_OK; ++ goto testcase_cleanup; ++ } else { ++ testcase_error("C_GetMechanismInfo() rc = %s", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ } ++ ++ for (i = 0; i < 2 * num_variants; i++) { ++ /* Setup attributes for public/private Kyber key */ ++ CK_BBOOL attr_enc = TRUE; ++ CK_BBOOL attr_dec = TRUE; ++ CK_BBOOL attr_derive = TRUE; ++ CK_ATTRIBUTE kyber_attr_private_keyform[] = { ++ {CKA_DECRYPT, &attr_dec, sizeof(CK_BBOOL)}, ++ {CKA_DERIVE, &attr_derive, sizeof(CK_BBOOL)}, ++ {CKA_IBM_KYBER_KEYFORM, ++ (CK_BYTE *)&variants[i % num_variants].keyform, sizeof(CK_ULONG)}, ++ }; ++ CK_ATTRIBUTE kyber_attr_public_keyform[] = { ++ {CKA_ENCRYPT, &attr_enc, sizeof(CK_BBOOL)}, ++ {CKA_DERIVE, &attr_derive, sizeof(CK_BBOOL)}, ++ {CKA_IBM_KYBER_KEYFORM, ++ (CK_BYTE *)&variants[i % num_variants].keyform, sizeof(CK_ULONG)}, ++ }; ++ CK_ATTRIBUTE kyber_attr_private_mode[] = { ++ {CKA_DECRYPT, &attr_dec, sizeof(CK_BBOOL)}, ++ {CKA_DERIVE, &attr_derive, sizeof(CK_BBOOL)}, ++ {CKA_IBM_KYBER_MODE, ++ (CK_BYTE *)variants[i % num_variants].oid, variants[i % num_variants].oid_len}, ++ }; ++ CK_ATTRIBUTE kyber_attr_public_mode[] = { ++ {CKA_ENCRYPT, &attr_enc, sizeof(CK_BBOOL)}, ++ {CKA_DERIVE, &attr_derive, sizeof(CK_BBOOL)}, ++ {CKA_IBM_KYBER_MODE, ++ (CK_BYTE *)variants[i % num_variants].oid, variants[i % num_variants].oid_len}, ++ }; ++ CK_ATTRIBUTE *kyber_attr_private = i < num_variants ? ++ kyber_attr_private_keyform : ++ kyber_attr_private_mode; ++ CK_ATTRIBUTE *kyber_attr_public = i < num_variants ? ++ kyber_attr_public_keyform : ++ kyber_attr_public_mode; ++ CK_ULONG num_kyber_attrs = ++ (variants[i % num_variants].oid == NULL) ? 2 : 3; ++ ++ testcase_begin("Starting Kyber generate key pair with %s.", ++ variants[i % num_variants].name); ++ ++ /* Generate Kyber key pair */ ++ rc = funcs->C_GenerateKeyPair(session, &mech, ++ kyber_attr_public, num_kyber_attrs, ++ kyber_attr_private, num_kyber_attrs, ++ &publ_key, &priv_key); ++ testcase_new_assertion(); ++ if (rc != CKR_OK) { ++ if (rc == CKR_KEY_SIZE_RANGE) { ++ testcase_skip("C_GenerateKeyPair with %s (%s) not supported", ++ variants[i % num_variants].name, ++ i < num_variants ? "KEYFORM" : "MODE"); ++ goto next; ++ } else { ++ testcase_fail("C_GenerateKeyPair with %s (%s) failed, rc=%s", ++ variants[i % num_variants].name, ++ i < num_variants ? "KEYFORM" : "MODE", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ } ++ testcase_pass("*Generate Kyber key pair with %s (%s) passed.", ++ variants[i % num_variants].name, ++ i < num_variants ? "KEYFORM" : "MODE"); ++ ++ testcase_new_assertion(); ++ rc = run_EncrypDecryptKyber(session, priv_key, publ_key); ++ if (rc != 0) { ++ testcase_fail("run_EncrypDecryptKyber with %s failed.", ++ variants[i % num_variants].name); ++ goto next; ++ } ++ testcase_pass("*Encrypt & decrypt with %s passed.", ++ variants[i % num_variants].name); ++ ++ for (j = 0; j < NUM_KEM_INPUTS; j++) { ++ testcase_new_assertion(); ++ rc = run_EnDecapsulateKyber(session, priv_key, publ_key, ++ kemInput[j].secret_key_len, ++ kemInput[j].kdf, ++ kemInput[j].hybrid, ++ kemInput[j].shared_data, ++ kemInput[j].shard_data_len, ++ NULL, 0, NULL, 0); ++ if (rc != 0) { ++ testcase_fail("run_EnDecapsulateKyber with %s, %s, Shared data len %lu (index %lu) failed.", ++ variants[i % num_variants].name, ++ p11_get_ckd(kemInput[j].kdf), ++ kemInput[j].shard_data_len, ++ j); ++ goto next; ++ } ++ testcase_pass("*%sEncapsulate & Decapsulate (KEM) with %s, %s, Shared data len %lu (index %lu) passed.", ++ kemInput[j].hybrid ? "Hybrid " : "", ++ variants[i % num_variants].name, ++ p11_get_ckd(kemInput[j].kdf), ++ kemInput[j].shard_data_len, ++ j); ++ } ++ ++next: ++ if (publ_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, publ_key); ++ publ_key = CK_INVALID_HANDLE; ++ if (priv_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, priv_key); ++ priv_key = CK_INVALID_HANDLE; ++ } ++ ++ rc = CKR_OK; ++ ++testcase_cleanup: ++ if (publ_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, publ_key); ++ if (priv_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, priv_key); ++ ++ testcase_user_logout(); ++ testcase_close_session(); ++ ++ return rc; ++} ++ ++CK_RV run_ImportKyberKeyPairKEM(void) ++{ ++ CK_MECHANISM mech; ++ CK_OBJECT_HANDLE publ_key = CK_INVALID_HANDLE, priv_key = CK_INVALID_HANDLE; ++ CK_SESSION_HANDLE session; ++ CK_BYTE user_pin[PKCS11_MAX_PIN_LEN]; ++ CK_ULONG user_pin_len, i; ++ CK_FLAGS flags; ++ CK_MECHANISM_INFO mech_info; ++ CK_RV rc; ++ ++ testcase_rw_session(); ++ testcase_user_login(); ++ ++ mech.mechanism = CKM_IBM_KYBER; ++ mech.ulParameterLen = 0; ++ mech.pParameter = NULL; ++ ++ /* query the slot, check if this mech is supported */ ++ rc = funcs->C_GetMechanismInfo(SLOT_ID, mech.mechanism, &mech_info); ++ if (rc != CKR_OK) { ++ if (rc == CKR_MECHANISM_INVALID) { ++ /* no support for Kyber key gen? skip */ ++ testcase_skip("Slot %u doesn't support CKM_IBM_KYBER", ++ (unsigned int) SLOT_ID); ++ goto testcase_cleanup; ++ } else { ++ testcase_error("C_GetMechanismInfo() rc = %s", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ } ++ ++ for (i = 0; i < KYBER_TV_NUM; i++) { ++ ++ testcase_begin("Starting Kyber import key pair, KEM, %s index=%lu", ++ kyber_tv[i].name, i); ++ ++ /* Create Kyber private key */ ++ rc = create_KyberPrivateKey(session, ++ kyber_tv[i].pkcs8, kyber_tv[i].pkcs8_len, ++ kyber_tv[i].keyform, ++ kyber_tv[i].sk, kyber_tv[i].sk_len, ++ kyber_tv[i].pk, kyber_tv[i].pk_len, ++ &priv_key); ++ testcase_new_assertion(); ++ if (rc != CKR_OK) { ++ if (rc == CKR_KEY_SIZE_RANGE) { ++ testcase_skip("C_CreateObject with key form %lu not supported", ++ kyber_tv[i].keyform); ++ continue; ++ } ++ if (rc == CKR_POLICY_VIOLATION) { ++ testcase_skip("Kyber key import is not allowed by policy"); ++ continue; ++ } ++ testcase_fail("C_CreateObject (Kyber Private Key) failed at i=%lu, " ++ "rc=%s", i, p11_get_ckr(rc)); ++ goto next; ++ } ++ testcase_pass("*Import Kyber private key (%s) index=%lu passed.", ++ kyber_tv[i].name, i); ++ ++ /* Create Kyber public key */ ++ rc = create_KyberPublicKey(session, ++ kyber_tv[i].spki, kyber_tv[i].spki_len, ++ kyber_tv[i].keyform, ++ kyber_tv[i].pk, kyber_tv[i].pk_len, ++ &publ_key); ++ testcase_new_assertion(); ++ if (rc != CKR_OK) { ++ if (rc == CKR_KEY_SIZE_RANGE) { ++ testcase_skip("C_CreateObject with key form %lu not supported", ++ kyber_tv[i].keyform); ++ continue; ++ } ++ if (rc == CKR_POLICY_VIOLATION) { ++ testcase_skip("Kyber key import is not allowed by policy"); ++ goto testcase_cleanup; ++ } ++ testcase_fail("C_CreateObject (Kyber Public Key) failed at i=%lu, " ++ "rc=%s", i, p11_get_ckr(rc)); ++ goto next; ++ } ++ testcase_pass("*Import Kyber public key (%s) index=%lu passed.", ++ kyber_tv[i].name, i); ++ ++ testcase_new_assertion(); ++ rc = run_EnDecapsulateKyber(session, priv_key, publ_key, ++ kyber_tv[i].secret_len, ++ CKD_NULL, CK_FALSE, NULL, 0, ++ kyber_tv[i].cipher, kyber_tv[i].cipher_len, ++ kyber_tv[i].secret, kyber_tv[i].secret_len); ++ if (rc != 0) { ++ testcase_fail("run_EnDecapsulateKyber with %s failed.", ++ variants[i % num_variants].name); ++ goto next; ++ } ++ testcase_pass("*Encapsulate & Decapsulate (KEM) with %s index=%lu passed.", ++ variants[i % num_variants].name, i); ++ ++ ++next: ++ /* Clean up */ ++ rc = funcs->C_DestroyObject(session, publ_key); ++ if (rc != CKR_OK) { ++ testcase_error("C_DestroyObject(), rc=%s.", p11_get_ckr(rc)); ++ } ++ ++ rc = funcs->C_DestroyObject(session, priv_key); ++ if (rc != CKR_OK) { ++ testcase_error("C_DestroyObject(), rc=%s.", p11_get_ckr(rc)); ++ } ++ } ++ ++ goto done; ++ ++testcase_cleanup: ++ if (publ_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, publ_key); ++ if (priv_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, priv_key); ++ ++done: ++ testcase_user_logout(); ++ testcase_close_session(); ++ ++ return rc; ++} ++ ++/** ++ * Wraps the given key with the given secret key using the given wrapping ++ * mechanism. ++ */ ++CK_RV wrapKey(CK_SESSION_HANDLE session, CK_MECHANISM *wrap_mech, ++ CK_OBJECT_HANDLE secret_key, CK_OBJECT_HANDLE key_to_wrap, ++ CK_BYTE_PTR *wrapped_key, CK_ULONG *wrapped_keylen) ++{ ++ CK_BYTE_PTR tmp_key; ++ CK_ULONG tmp_len; ++ CK_RV rc; ++ ++ /* Determine length of wrapped key */ ++ rc = funcs->C_WrapKey(session, wrap_mech, secret_key, key_to_wrap, ++ NULL, &tmp_len); ++ if (rc != CKR_OK) ++ goto done; ++ ++ /* Allocate memory for wrapped_key */ ++ tmp_key = calloc(sizeof(CK_BYTE), tmp_len); ++ if (!tmp_key) { ++ rc = CKR_HOST_MEMORY; ++ goto done; ++ } ++ ++ /* Now wrap the key */ ++ rc = funcs->C_WrapKey(session, wrap_mech, secret_key, key_to_wrap, ++ tmp_key, &tmp_len); ++ if (rc != CKR_OK) { ++ free(tmp_key); ++ tmp_key = NULL; ++ goto done; ++ } ++ ++ *wrapped_key = tmp_key; ++ *wrapped_keylen = tmp_len; ++ ++ rc = CKR_OK; ++ ++done: ++ ++ return rc; ++} ++ ++/** ++ * Unwraps the given wrapped_key using the given secret_key and wrapping ++ * mechanism. ++ */ ++CK_RV unwrapKey(CK_SESSION_HANDLE session, CK_MECHANISM *wrap_mech, ++ CK_BYTE_PTR wrapped_key, CK_ULONG wrapped_keylen, ++ CK_OBJECT_HANDLE secret_key, CK_OBJECT_HANDLE *unwrapped_key) ++{ ++ CK_OBJECT_CLASS class = CKO_PRIVATE_KEY; ++ CK_KEY_TYPE key_type = CKK_IBM_PQC_KYBER; ++ CK_OBJECT_HANDLE tmp_key = CK_INVALID_HANDLE; ++ CK_BYTE unwrap_label[] = "unwrapped_private_Kyber_Key"; ++ CK_BYTE subject[] = {0}; ++ CK_BYTE id[] = { 123 }; ++ CK_BBOOL true = TRUE; ++ CK_RV rc; ++ ++ CK_ATTRIBUTE unwrap_tmpl[] = { ++ {CKA_CLASS, &class, sizeof(class)}, ++ {CKA_KEY_TYPE, &key_type, sizeof(key_type)}, ++ {CKA_TOKEN, &true, sizeof(true)}, ++ {CKA_LABEL, &unwrap_label, sizeof(unwrap_label)}, ++ {CKA_SUBJECT, subject, sizeof(subject)}, ++ {CKA_ID, id, sizeof(id)}, ++ {CKA_SENSITIVE, &true, sizeof(true)}, ++ {CKA_DECRYPT, &true, sizeof(true)}, ++ {CKA_DERIVE, &true, sizeof(true)}, ++ }; ++ ++ rc = funcs->C_UnwrapKey(session, wrap_mech, secret_key, ++ wrapped_key, wrapped_keylen, ++ unwrap_tmpl, ++ sizeof(unwrap_tmpl) / sizeof(CK_ATTRIBUTE), ++ &tmp_key); ++ if (rc != CKR_OK) ++ goto done; ++ ++ *unwrapped_key = tmp_key; ++ ++ rc = CKR_OK; ++ ++done: ++ ++ return rc; ++} ++ ++CK_RV run_TransferKyberKeyPair(void) ++{ ++ CK_MECHANISM mech; ++ CK_OBJECT_HANDLE publ_key = CK_INVALID_HANDLE, priv_key = CK_INVALID_HANDLE; ++ CK_SESSION_HANDLE session; ++ CK_BYTE user_pin[PKCS11_MAX_PIN_LEN]; ++ CK_ULONG user_pin_len, i; ++ CK_FLAGS flags; ++ CK_MECHANISM_INFO mech_info; ++ CK_RV rc; ++ CK_OBJECT_HANDLE secret_key = CK_INVALID_HANDLE; ++ CK_BYTE_PTR wrapped_key = NULL; ++ CK_ULONG wrapped_keylen; ++ CK_OBJECT_HANDLE unwrapped_key = CK_INVALID_HANDLE; ++ CK_MECHANISM wrap_mech, wkey_mech; ++ ++ testcase_rw_session(); ++ testcase_user_login(); ++ ++ mech.mechanism = CKM_IBM_KYBER; ++ mech.ulParameterLen = 0; ++ mech.pParameter = NULL; ++ ++ /* query the slot, check if this mech is supported */ ++ rc = funcs->C_GetMechanismInfo(SLOT_ID, mech.mechanism, &mech_info); ++ if (rc != CKR_OK) { ++ if (rc == CKR_MECHANISM_INVALID) { ++ /* no support for Kyber key gen? skip */ ++ testcase_skip("Slot %u doesn't support CKM_IBM_KYBER", ++ (unsigned int) SLOT_ID); ++ goto testcase_cleanup; ++ } else { ++ testcase_error("C_GetMechanismInfo() rc = %s", p11_get_ckr(rc)); ++ goto testcase_cleanup; ++ } ++ } ++ ++ for (i = 0; i < KYBER_TV_NUM; i++) { ++ ++ testcase_begin("Starting Kyber transfer key pair, Encrypt/Decrypt %s index=%lu.", ++ kyber_tv[i].name, i); ++ ++ /* Create Kyber private key */ ++ rc = create_KyberPrivateKey(session, ++ kyber_tv[i].pkcs8, kyber_tv[i].pkcs8_len, ++ kyber_tv[i].keyform, ++ kyber_tv[i].sk, kyber_tv[i].sk_len, ++ kyber_tv[i].pk, kyber_tv[i].pk_len, ++ &priv_key); ++ ++ testcase_new_assertion(); ++ if (rc != CKR_OK) { ++ if (rc == CKR_KEY_SIZE_RANGE) { ++ testcase_skip("C_CreateObject with key form %lu not supported", ++ kyber_tv[i].keyform); ++ continue; ++ } ++ if (rc == CKR_POLICY_VIOLATION) { ++ testcase_skip("Kyber key import is not allowed by policy"); ++ continue; ++ } ++ testcase_fail ++ ("C_CreateObject (Kyber Private Key) failed at i=%lu, rc=%s", i, ++ p11_get_ckr(rc)); ++ goto next; ++ } ++ testcase_pass("*Import Kyber private key (%s) index=%lu passed.", ++ kyber_tv[i].name, i); ++ ++ /* Create Kyber public key */ ++ rc = create_KyberPublicKey(session, ++ kyber_tv[i].spki, kyber_tv[i].spki_len, ++ kyber_tv[i].keyform, ++ kyber_tv[i].pk, kyber_tv[i].pk_len, ++ &publ_key); ++ testcase_new_assertion(); ++ if (rc != CKR_OK) { ++ if (rc == CKR_KEY_SIZE_RANGE) { ++ testcase_skip("C_CreateObject with key form %lu not supported", ++ kyber_tv[i].keyform); ++ continue; ++ } ++ if (rc == CKR_POLICY_VIOLATION) { ++ testcase_skip("Kyber key import is not allowed by policy"); ++ goto testcase_cleanup; ++ } ++ testcase_fail ++ ("C_CreateObject (Kyber Public Key) failed at i=%lu, rc=%s", i, ++ p11_get_ckr(rc)); ++ goto next; ++ } ++ testcase_pass("*Import Kyber public key (%s) index=%lu passed.", ++ kyber_tv[i].name, i); ++ ++ /* Create wrapping key (secret key) */ ++ wkey_mech.mechanism = CKM_AES_KEY_GEN; ++ wkey_mech.pParameter = NULL; ++ wkey_mech.ulParameterLen = 0; ++ rc = generate_AESKey(session, 32, CK_TRUE, &wkey_mech, &secret_key); ++ if (rc != CKR_OK) { ++ if (rc == CKR_POLICY_VIOLATION) { ++ testcase_skip("AES key generation is not allowed by policy"); ++ goto testcase_cleanup; ++ } ++ ++ testcase_error("generate_AESKey, rc=%s", p11_get_ckr(rc)); ++ goto next; ++ } ++ ++ /* Setup wrapping mechanism */ ++ wrap_mech.mechanism = CKM_AES_CBC_PAD; ++ wrap_mech.pParameter = "0123456789abcdef"; ++ wrap_mech.ulParameterLen = 16; ++ ++ /* Wrap Kyber private key with secret key */ ++ rc = wrapKey(session, &wrap_mech, secret_key, priv_key, ++ &wrapped_key, &wrapped_keylen); ++ testcase_new_assertion(); ++ if (rc != CKR_OK) { ++ testcase_error("wrapKey, rc=%s", p11_get_ckr(rc)); ++ goto next; ++ } ++ testcase_pass("*Wrap Kyber private key (%s) index=%lu passed.", ++ kyber_tv[i].name, i); ++ ++ /* Unwrap Kyber private key */ ++ rc = unwrapKey(session, &wrap_mech, wrapped_key, wrapped_keylen, ++ secret_key, &unwrapped_key); ++ testcase_new_assertion(); ++ if (rc != CKR_OK) { ++ testcase_error("unwrapKey, rc=%s", p11_get_ckr(rc)); ++ goto next; ++ } ++ testcase_pass("*Unwrap Kyber private key (%s) index=%lu passed.", ++ kyber_tv[i].name, i); ++ ++ free(wrapped_key); ++ wrapped_key = NULL; ++ ++ /* Encrypt/Decrypt with unwrapped key */ ++ testcase_new_assertion(); ++ rc = run_EncrypDecryptKyber(session, unwrapped_key, publ_key); ++ if (rc != 0) { ++ testcase_fail("run_EncrypDecryptKyber with %s failed.", ++ kyber_tv[i].name); ++ goto next; ++ } ++ testcase_pass("*Encrypt & decrypt with unwrapped private key with %s index=%lu passed.", ++ kyber_tv[i].name, i); ++ ++ testcase_new_assertion(); ++ rc = run_EnDecapsulateKyber(session, unwrapped_key, publ_key, ++ kyber_tv[i].secret_len, ++ CKD_NULL, CK_FALSE, NULL, 0, ++ kyber_tv[i].cipher, kyber_tv[i].cipher_len, ++ kyber_tv[i].secret, kyber_tv[i].secret_len); ++ if (rc != 0) { ++ testcase_fail("run_EnDecapsulateKyber with %s failed.", ++ variants[i % num_variants].name); ++ goto next; ++ } ++ testcase_pass("*Encapsulate & Decapsulate (KEM) with unwrapped private key with %s index=%lu passed.", ++ variants[i % num_variants].name, i); ++ ++next: ++ /* Clean up */ ++ rc = funcs->C_DestroyObject(session, publ_key); ++ if (rc != CKR_OK) { ++ testcase_error("C_DestroyObject(), rc=%s.", p11_get_ckr(rc)); ++ } ++ ++ rc = funcs->C_DestroyObject(session, priv_key); ++ if (rc != CKR_OK) { ++ testcase_error("C_DestroyObject(), rc=%s.", p11_get_ckr(rc)); ++ } ++ ++ rc = funcs->C_DestroyObject(session, secret_key); ++ if (rc != CKR_OK) { ++ testcase_error("C_DestroyObject(), rc=%s.", p11_get_ckr(rc)); ++ } ++ ++ rc = funcs->C_DestroyObject(session, unwrapped_key); ++ if (rc != CKR_OK) { ++ testcase_error("C_DestroyObject(), rc=%s.", p11_get_ckr(rc)); ++ } ++ } ++ ++ goto done; ++ ++testcase_cleanup: ++ if (publ_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, publ_key); ++ if (priv_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, priv_key); ++ if (secret_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, secret_key); ++ if (unwrapped_key != CK_INVALID_HANDLE) ++ funcs->C_DestroyObject(session, unwrapped_key); ++ ++ if (wrapped_key) ++ free(wrapped_key); ++ ++done: ++ testcase_user_logout(); ++ testcase_close_session(); ++ ++ return rc; ++} ++ ++int main(int argc, char **argv) ++{ ++ CK_C_INITIALIZE_ARGS cinit_args; ++ int rc; ++ CK_RV rv; ++ ++ rc = do_ParseArgs(argc, argv); ++ if (rc != 1) ++ return rc; ++ ++ printf("Using slot #%lu...\n\n", SLOT_ID); ++ printf("With option: no_init: %d\n", no_init); ++ ++ rc = do_GetFunctionList(); ++ if (!rc) { ++ PRINT_ERR("ERROR do_GetFunctionList() Failed , rc = 0x%0x\n", rc); ++ return rc; ++ } ++ ++ memset(&cinit_args, 0x0, sizeof(cinit_args)); ++ cinit_args.flags = CKF_OS_LOCKING_OK; ++ ++ funcs->C_Initialize(&cinit_args); ++ ++ { ++ CK_SESSION_HANDLE hsess = 0; ++ ++ rc = funcs->C_GetFunctionStatus(hsess); ++ if (rc != CKR_FUNCTION_NOT_PARALLEL) ++ return rc; ++ ++ rc = funcs->C_CancelFunction(hsess); ++ if (rc != CKR_FUNCTION_NOT_PARALLEL) ++ return rc; ++ } ++ ++ testcase_setup(); ++ ++ rv = run_GenerateKyberKeyPairEnDecryptKEM(); ++ ++ rv = run_ImportKyberKeyPairKEM(); ++ ++ rv = run_TransferKyberKeyPair(); ++ ++ testcase_print_result(); ++ ++ funcs->C_Finalize(NULL); ++ ++ return testcase_return(rv); ++} +-- +2.16.2.windows.1 + diff --git a/SOURCES/0030-p11sak-Support-additional-Dilithium-variants.patch b/SOURCES/0030-p11sak-Support-additional-Dilithium-variants.patch new file mode 100644 index 0000000..1616ac0 --- /dev/null +++ b/SOURCES/0030-p11sak-Support-additional-Dilithium-variants.patch @@ -0,0 +1,156 @@ +From 3f8b4270a7601b42f15f13f54b9b5fc207a14723 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Tue, 8 Nov 2022 16:46:26 +0100 +Subject: [PATCH 30/34] p11sak: Support additional Dilithium variants + +Support the following Dilithium versions to be specified with the +generate-key command: r2_65 (as of today), r2_87, r3_44, r3_65, r3_87. + +Signed-off-by: Ingo Franzki +--- + man/man1/p11sak.1.in | 12 ++++++++++- + usr/sbin/p11sak/p11sak.c | 53 ++++++++++++++++++++++++++++++++++++++++++++---- + 2 files changed, 60 insertions(+), 5 deletions(-) + +diff --git a/man/man1/p11sak.1.in b/man/man1/p11sak.1.in +index a2c2b879..6938b203 100644 +--- a/man/man1/p11sak.1.in ++++ b/man/man1/p11sak.1.in +@@ -262,7 +262,7 @@ Use the + command and key argument to generate an IBM Dilithium key, where + .I VERSION + specifies the version of the IBM Dilithium keypair. The following arguments can be used for respective keys: +-.B r2_65 ++.B r2_65 | r2_87 | r3_44 | r3_65 | r3_87 + .PP + The + .B \-\-slot +@@ -368,6 +368,16 @@ to select the EC curve used to generate the key. + . + . + ++.SS "r2_6|r2_87|r3_44|r3_65|r3_875" ++the ++.B ibm-dilithium ++argument has to be followed by either of these ++.I VERSION ++to select the IBM dilithium version used to generate the key. ++.PP ++. ++. ++. + .SH OPTIONS + + .SS "\-\-slot SLOTID" +diff --git a/usr/sbin/p11sak/p11sak.c b/usr/sbin/p11sak/p11sak.c +index 8cfcb21d..5ceb145b 100644 +--- a/usr/sbin/p11sak/p11sak.c ++++ b/usr/sbin/p11sak/p11sak.c +@@ -387,7 +387,7 @@ static void print_gen_help(void) + printf(" brainpoolP320r1 | brainpoolP320t1 | brainpoolP384r1 | brainpoolP384t1 | \n"); + printf(" brainpoolP512r1 | brainpoolP512t1 | curve25519 | curve448 | ed25519 | \n"); + printf(" ed448]\n"); +- printf(" ibm-dilithium [r2_65]\n"); ++ printf(" ibm-dilithium [r2_65 | r2_87 | r3_44 | r3_65 | r3_87]\n"); + printf("\n Options:\n"); + printf( + " --slot SLOTID openCryptoki repository token SLOTID.\n"); +@@ -526,6 +526,10 @@ static void print_gen_ibm_dilithium_help(void) + printf("\n Usage: p11sak generate-key ibm-dilithium [ARGS] [OPTIONS]\n"); + printf("\n Args:\n"); + printf(" r2_65\n"); ++ printf(" r2_87\n"); ++ printf(" r3_44\n"); ++ printf(" r3_65\n"); ++ printf(" r3_87\n"); + printf("\n Options:\n"); + printf( + " --slot SLOTID openCryptoki repository token SLOTID.\n"); +@@ -764,6 +768,35 @@ static CK_RV read_ec_args(const char *ECcurve, CK_ATTRIBUTE *pubattr, + + return CKR_OK; + } ++/** ++ * Builds the CKA_IBM_DILITHIUM_KEYFORM attribute from the given version. ++ */ ++static CK_RV read_dilithium_args(const char *dilithium_ver, CK_ULONG *keyform, ++ CK_ATTRIBUTE *pubattr, CK_ULONG *pubcount) ++{ ++ if (strcasecmp(dilithium_ver, "r2_65") == 0) { ++ *keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_65; ++ } else if (strcasecmp(dilithium_ver, "r2_87") == 0) { ++ *keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND2_87; ++ } else if (strcasecmp(dilithium_ver, "r3_44") == 0) { ++ *keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_44; ++ } else if (strcasecmp(dilithium_ver, "r3_65") == 0) { ++ *keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_65; ++ } else if (strcasecmp(dilithium_ver, "r3_87") == 0) { ++ *keyform = CK_IBM_DILITHIUM_KEYFORM_ROUND3_87; ++ } else { ++ fprintf(stderr, "Unexpected case while parsing dilithium version.\n"); ++ fprintf(stderr, "Note: not all tokens support all versions.\n"); ++ return CKR_ARGUMENTS_BAD; ++ } ++ ++ pubattr[*pubcount].type = CKA_IBM_DILITHIUM_KEYFORM; ++ pubattr[*pubcount].ulValueLen = sizeof(CK_ULONG); ++ pubattr[*pubcount].pValue = keyform; ++ (*pubcount)++; ++ ++ return CKR_OK; ++} + /** + * Builds two CKA_LABEL attributes from given label. + */ +@@ -1096,6 +1129,8 @@ static CK_RV key_pair_gen(CK_SESSION_HANDLE session, CK_SLOT_ID slot, + if (rc != CKR_OK) { + if (is_rejected_by_policy(rc, session)) + fprintf(stderr, "Key pair generation rejected by policy\n"); ++ else if (kt == kt_IBM_DILITHIUM && rc == CKR_KEY_SIZE_RANGE) ++ fprintf(stderr, "IBM Dilithum version is not supported\n"); + else + fprintf(stderr, "Key pair generation failed (error code 0x%lX: %s)\n", rc, + p11_get_ckr(rc)); +@@ -1845,11 +1880,15 @@ static CK_RV check_args_gen_key(p11sak_kt *kt, CK_ULONG keylength, + case kt_IBM_DILITHIUM: + if (dilithium_ver == NULL) { + fprintf(stderr, +- "Cipher key type [%d] supported but Dilithium version not set in arguments. Try adding argument \n", ++ "Cipher key type [%d] supported but Dilithium version not set in arguments. Try adding argument , , , , or \n", + *kt); + return CKR_ARGUMENTS_BAD; + } +- if (strcasecmp(dilithium_ver, "r2_65") == 0) { ++ if (strcasecmp(dilithium_ver, "r2_65") == 0 || ++ strcasecmp(dilithium_ver, "r2_87") == 0 || ++ strcasecmp(dilithium_ver, "r3_44") == 0 || ++ strcasecmp(dilithium_ver, "r3_65") == 0 || ++ strcasecmp(dilithium_ver, "r3_87") == 0) { + break; + } else { + fprintf(stderr, "IBM Dilithium version [%s] not supported \n", dilithium_ver); +@@ -2450,7 +2489,7 @@ static CK_RV generate_asymmetric_key(CK_SESSION_HANDLE session, CK_SLOT_ID slot, + CK_ATTRIBUTE prv_attr[KEY_MAX_BOOL_ATTR_COUNT + 2]; + CK_ULONG prv_acount = 0; + CK_MECHANISM mech; +- CK_ULONG i; ++ CK_ULONG i, keyform; + CK_RV rc; + const char separator = ':'; + +@@ -2475,6 +2514,12 @@ static CK_RV generate_asymmetric_key(CK_SESSION_HANDLE session, CK_SLOT_ID slot, + } + break; + case kt_IBM_DILITHIUM: ++ rc = read_dilithium_args(dilithium_ver, &keyform, ++ pub_attr, &pub_acount); ++ if (rc) { ++ fprintf(stderr, "Error parsing Dilithium parameters!\n"); ++ goto done; ++ } + printf("Generating Dilithium keypair with %s\n", dilithium_ver); + break; + default: +-- +2.16.2.windows.1 + diff --git a/SOURCES/0031-p11sak-Add-support-for-IBM-Kyber-key-type.patch b/SOURCES/0031-p11sak-Add-support-for-IBM-Kyber-key-type.patch new file mode 100644 index 0000000..9db7a28 --- /dev/null +++ b/SOURCES/0031-p11sak-Add-support-for-IBM-Kyber-key-type.patch @@ -0,0 +1,551 @@ +From d257df88500b3e55156d198ec305042799e2bff9 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Tue, 8 Nov 2022 17:03:11 +0100 +Subject: [PATCH 31/34] p11sak: Add support for IBM Kyber key type + +Support the following Kyber versions to be specified with the +generate-key command: r2_768, r2_1024. + +Signed-off-by: Ingo Franzki +--- + man/man1/p11sak.1.in | 65 ++++++++++++-- + usr/sbin/p11sak/p11sak.c | 141 +++++++++++++++++++++++++----- + usr/sbin/p11sak/p11sak.h | 1 + + usr/sbin/p11sak/p11sak_defined_attrs.conf | 6 +- + 4 files changed, 183 insertions(+), 30 deletions(-) + +diff --git a/man/man1/p11sak.1.in b/man/man1/p11sak.1.in +index 6938b203..2b75b117 100644 +--- a/man/man1/p11sak.1.in ++++ b/man/man1/p11sak.1.in +@@ -16,7 +16,7 @@ p11sak \- generate and list token keys in an openCryptoki token repository. + + .SH DESCRIPTION + .B p11sak can be used to generate, list and delete the token keys in an openCryptoki token repository. +-The utility provides a flexible key management tool in openCryptoki to list and generate symmetric (DES; 3DES, AES) and asymetric (RSA, EC) keys. ++The utility provides a flexible key management tool in openCryptoki to list and generate symmetric (DES, 3DES, AES) and asymmetric (RSA, EC, IBM Dilithium, IBM Kyber) keys. + This tool is especially capable of a well defined listing of keys with their PKCS #11 attributes. + . + . +@@ -282,11 +282,54 @@ attribute of the key and + can be used to set the binary attributes of the key (see below for detailed description of the attributes). + . + .PP ++.SS "Generating IBM Kyber keys" ++. ++.B p11sak ++.BR generate-key | gen-key | gen ++.BR ibm-kyber ++.BR VERSION ++.B \-\-slot ++.IR SLOTID ++.B \-\-pin ++.IR PIN ++.B \-\-label ++.IR LABEL ++.B \-\-attr ++.I [M R L S E D G V W U A X N T] ++.B \-\-help | \-h ++.PP ++Use the ++.B generate-key ++.B ibm-kyber ++.B VERSION ++command and key argument to generate an IBM Kyber key, where ++.I VERSION ++specifies the version of the IBM Kyber keypair. The following arguments can be used for respective keys: ++.B r2_768 | r2_1024 ++.PP ++The ++.B \-\-slot ++.IR SLOTID ++and ++.B \-\-pin ++.IR PIN ++options are required to set the token to ++.IR SLOTID ++and the token PIN. The ++.B \-\-label ++option allows the user to set the ++.IR LABEL ++attribute of the key and ++.B \-\-attr ++.I [M R L S E D G V W U A X N T] ++can be used to set the binary attributes of the key (see below for detailed description of the attributes). ++. ++.PP + .SS "Listing symmetric and asymmetric keys" + . + .B p11sak + .BR list-key | ls-key | ls +-.BR des | 3des | aes | rsa | ec | ibm-dilithium | public | private | secret | all ++.BR des | 3des | aes | rsa | ec | ibm-dilithium | ibm-kyber | public | private | secret | all + .B \-\-slot + .IR SLOTID + .B \-\-pin +@@ -298,14 +341,14 @@ can be used to set the binary attributes of the key (see below for detailed desc + .PP + Use the + .B list-key | ls-key | ls +-command and key argument to list DES, 3DES, AES, RSA, EC, or IBM Dilithium keys, respectively. Public, private, secret, or all keys can also be listed irrespective of key type. ++command and key argument to list DES, 3DES, AES, RSA, EC, IBM Dilithium, or IBM Kyber keys, respectively. Public, private, secret, or all keys can also be listed irrespective of key type. + . + .PP + .SS "Deleting symmetric and asymmetric keys" + . + .B p11sak + .BR remove-key | rm-key | rm +-.BR des | 3des | aes | rsa | ec | ibm-dilithium ++.BR des | 3des | aes | rsa | ec | ibm-dilithium | ibm-kyber + .B \-\-slot + .IR SLOTID + .B \-\-pin +@@ -317,7 +360,7 @@ command and key argument to list DES, 3DES, AES, RSA, EC, or IBM Dilithium keys, + .PP + Use the + .B remove-key | rm-key | rm +-command and key argument to delete DES, 3DES, AES, RSA, EC, or IBM Dilithium keys, respectively. All specified cipher keys will be prompted to be deleted unless ++command and key argument to delete DES, 3DES, AES, RSA, EC, IBM Dilithium, or IBM Kyber keys, respectively. All specified cipher keys will be prompted to be deleted unless + a specific key with the + .B \-\-label + .IR LABEL +@@ -331,7 +374,7 @@ option. + . + .SH ARGS + . +-.SS "des | 3des | aes | rsa | ec | ibm-dilithium | public | private | secret | all" ++.SS "des | 3des | aes | rsa | ec | ibm-dilithium | ibm-kyber | public | private | secret | all" + + selects the respective symmetric or asymetric key to be generated or listed. The + .B public|private|secret|all +@@ -378,6 +421,16 @@ to select the IBM dilithium version used to generate the key. + . + . + . ++.SS "r2_768|r2_1024" ++the ++.B ibm-kyber ++argument has to be followed by either of these ++.I VERSION ++to select the IBM kyber version used to generate the key. ++.PP ++. ++. ++. + .SH OPTIONS + + .SS "\-\-slot SLOTID" +diff --git a/usr/sbin/p11sak/p11sak.c b/usr/sbin/p11sak/p11sak.c +index 5ceb145b..38564155 100644 +--- a/usr/sbin/p11sak/p11sak.c ++++ b/usr/sbin/p11sak/p11sak.c +@@ -130,6 +130,8 @@ static const char* kt2str(p11sak_kt ktype) + return "EC"; + case kt_IBM_DILITHIUM: + return "IBM DILITHIUM"; ++ case kt_IBM_KYBER: ++ return "IBM KYBER"; + case kt_GENERIC: + return "GENERIC"; + case kt_SECRET: +@@ -170,6 +172,9 @@ static CK_RV kt2CKK(p11sak_kt ktype, CK_KEY_TYPE *a_key_type) + case kt_IBM_DILITHIUM: + *a_key_type = CKK_IBM_PQC_DILITHIUM; + break; ++ case kt_IBM_KYBER: ++ *a_key_type = CKK_IBM_PQC_KYBER; ++ break; + case kt_GENERIC: + *a_key_type = CKK_GENERIC_SECRET; + break; +@@ -277,6 +282,8 @@ static const char* CKK2a(CK_KEY_TYPE t) + return "EC"; + case CKK_IBM_PQC_DILITHIUM: + return "IBM DILILTHIUM"; ++ case CKK_IBM_PQC_KYBER: ++ return "IBM KYBER"; + case CKK_RSA: + return "RSA"; + case CKK_DH: +@@ -358,6 +365,7 @@ static void print_listkeys_help(void) + printf(" rsa\n"); + printf(" ec\n"); + printf(" ibm-dilithium\n"); ++ printf(" ibm-kyber\n"); + printf(" public\n"); + printf(" private\n"); + printf(" secret\n"); +@@ -388,6 +396,7 @@ static void print_gen_help(void) + printf(" brainpoolP512r1 | brainpoolP512t1 | curve25519 | curve448 | ed25519 | \n"); + printf(" ed448]\n"); + printf(" ibm-dilithium [r2_65 | r2_87 | r3_44 | r3_65 | r3_87]\n"); ++ printf(" ibm-kyber [r2_768 | r2_1024]\n"); + printf("\n Options:\n"); + printf( + " --slot SLOTID openCryptoki repository token SLOTID.\n"); +@@ -415,6 +424,7 @@ static void print_removekeys_help(void) + printf(" rsa\n"); + printf(" ec\n"); + printf(" ibm-dilithium\n"); ++ printf(" ibm-kyber\n"); + printf("\n Options:\n"); + printf( + " --slot SLOTID openCryptoki repository token SLOTID.\n"); +@@ -545,6 +555,25 @@ static void print_gen_ibm_dilithium_help(void) + printf(" -h, --help Show this help\n\n"); + } + ++static void print_gen_ibm_kyber_help(void) ++{ ++ printf("\n Usage: p11sak generate-key ibm-kyber [ARGS] [OPTIONS]\n"); ++ printf("\n Args:\n"); ++ printf(" r2_768\n"); ++ printf(" r2_1024\n"); ++ printf("\n Options:\n"); ++ printf(" --slot SLOTID openCryptoki repository token SLOTID.\n"); ++ printf(" --pin PIN pkcs11 user PIN\n"); ++ printf(" --force-pin-prompt enforce user PIN prompt\n"); ++ printf(" --label LABEL key label LABEL to be listed\n"); ++ printf(" --label PUB_LABEL:PRIV_LABEL\n"); ++ printf(" for asymmetric keys: set individual labels for public and private key\n"); ++ printf(" --attr [M R L S E D G V W U A X N] set key attributes\n"); ++ printf(" --attr [[pub_attrs]:[priv_attrs]] \n"); ++ printf(" for asymmetric keys: set individual key attributes, values see above\n"); ++ printf(" -h, --help Show this help\n\n"); ++} ++ + /** + * Print help for generate-key command + */ +@@ -572,6 +601,9 @@ static CK_RV print_gen_keys_help(p11sak_kt *kt) + case kt_IBM_DILITHIUM: + print_gen_ibm_dilithium_help(); + break; ++ case kt_IBM_KYBER: ++ print_gen_ibm_kyber_help(); ++ break; + case no_key_type: + print_gen_help(); + break; +@@ -797,6 +829,29 @@ static CK_RV read_dilithium_args(const char *dilithium_ver, CK_ULONG *keyform, + + return CKR_OK; + } ++/** ++ * Builds the CKA_IBM_KYBER_KEYFORM attribute from the given version. ++ */ ++static CK_RV read_kyber_args(const char *kyber_ver, CK_ULONG *keyform, ++ CK_ATTRIBUTE *pubattr, CK_ULONG *pubcount) ++{ ++ if (strcasecmp(kyber_ver, "r2_768") == 0) { ++ *keyform = CK_IBM_KYBER_KEYFORM_ROUND2_768; ++ } else if (strcasecmp(kyber_ver, "r2_1024") == 0) { ++ *keyform = CK_IBM_KYBER_KEYFORM_ROUND2_1024; ++ } else { ++ fprintf(stderr, "Unexpected case while parsing kyber version.\n"); ++ fprintf(stderr, "Note: not all tokens support all versions.\n"); ++ return CKR_ARGUMENTS_BAD; ++ } ++ ++ pubattr[*pubcount].type = CKA_IBM_KYBER_KEYFORM; ++ pubattr[*pubcount].ulValueLen = sizeof(CK_ULONG); ++ pubattr[*pubcount].pValue = keyform; ++ (*pubcount)++; ++ ++ return CKR_OK; ++} + /** + * Builds two CKA_LABEL attributes from given label. + */ +@@ -860,6 +915,9 @@ static CK_RV key_pair_gen_mech(p11sak_kt kt, CK_MECHANISM *pmech) + case kt_IBM_DILITHIUM: + pmech->mechanism = CKM_IBM_DILITHIUM; + break; ++ case kt_IBM_KYBER: ++ pmech->mechanism = CKM_IBM_KYBER; ++ break; + default: + return CKR_MECHANISM_INVALID; + break; +@@ -1131,6 +1189,8 @@ static CK_RV key_pair_gen(CK_SESSION_HANDLE session, CK_SLOT_ID slot, + fprintf(stderr, "Key pair generation rejected by policy\n"); + else if (kt == kt_IBM_DILITHIUM && rc == CKR_KEY_SIZE_RANGE) + fprintf(stderr, "IBM Dilithum version is not supported\n"); ++ else if (kt == kt_IBM_KYBER && rc == CKR_KEY_SIZE_RANGE) ++ fprintf(stderr, "IBM Kyber version is not supported\n"); + else + fprintf(stderr, "Key pair generation failed (error code 0x%lX: %s)\n", rc, + p11_get_ckr(rc)); +@@ -1191,6 +1251,7 @@ static CK_RV tok_key_list_init(CK_SESSION_HANDLE session, p11sak_kt kt, + case kt_RSAPKCS: + case kt_EC: + case kt_IBM_DILITHIUM: ++ case kt_IBM_KYBER: + tmplt[count].type = CKA_KEY_TYPE; + tmplt[count].pValue = &a_key_type; + tmplt[count].ulValueLen = sizeof(CK_KEY_TYPE); +@@ -1871,27 +1932,42 @@ static CK_RV tok_key_get_key_type(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE hk + * Check args for gen_key command. + */ + static CK_RV check_args_gen_key(p11sak_kt *kt, CK_ULONG keylength, +- char *ECcurve, char *dilithium_ver) ++ char *ECcurve, char *pqc_ver) + { + switch (*kt) { + case kt_DES: + case kt_3DES: + break; + case kt_IBM_DILITHIUM: +- if (dilithium_ver == NULL) { ++ if (pqc_ver == NULL) { + fprintf(stderr, + "Cipher key type [%d] supported but Dilithium version not set in arguments. Try adding argument , , , , or \n", + *kt); + return CKR_ARGUMENTS_BAD; + } +- if (strcasecmp(dilithium_ver, "r2_65") == 0 || +- strcasecmp(dilithium_ver, "r2_87") == 0 || +- strcasecmp(dilithium_ver, "r3_44") == 0 || +- strcasecmp(dilithium_ver, "r3_65") == 0 || +- strcasecmp(dilithium_ver, "r3_87") == 0) { ++ if (strcasecmp(pqc_ver, "r2_65") == 0 || ++ strcasecmp(pqc_ver, "r2_87") == 0 || ++ strcasecmp(pqc_ver, "r3_44") == 0 || ++ strcasecmp(pqc_ver, "r3_65") == 0 || ++ strcasecmp(pqc_ver, "r3_87") == 0) { + break; + } else { +- fprintf(stderr, "IBM Dilithium version [%s] not supported \n", dilithium_ver); ++ fprintf(stderr, "IBM Dilithium version [%s] not supported \n", pqc_ver); ++ return CKR_ARGUMENTS_BAD; ++ } ++ break; ++ case kt_IBM_KYBER: ++ if (pqc_ver == NULL) { ++ fprintf(stderr, ++ "Cipher key type [%d] supported but Kyber version not set in arguments. Try adding argument or \n", ++ *kt); ++ return CKR_ARGUMENTS_BAD; ++ } ++ if (strcasecmp(pqc_ver, "r2_768") == 0 || ++ strcasecmp(pqc_ver, "r2_1024") == 0) { ++ break; ++ } else { ++ fprintf(stderr, "IBM Kyber version [%s] not supported \n", pqc_ver); + return CKR_ARGUMENTS_BAD; + } + break; +@@ -1947,6 +2023,7 @@ static CK_RV check_args_list_key(p11sak_kt *kt) + case kt_3DES: + case kt_EC: + case kt_IBM_DILITHIUM: ++ case kt_IBM_KYBER: + case kt_GENERIC: + case kt_SECRET: + case kt_PUBLIC: +@@ -1973,6 +2050,7 @@ static CK_RV check_args_remove_key(p11sak_kt *kt) + case kt_RSAPKCS: + case kt_EC: + case kt_IBM_DILITHIUM: ++ case kt_IBM_KYBER: + case kt_GENERIC: + case kt_SECRET: + case kt_PUBLIC: +@@ -2069,6 +2147,8 @@ static CK_RV parse_list_key_args(char *argv[], int argc, p11sak_kt *kt, + *kt = kt_EC; + } else if (strcasecmp(argv[i], "ibm-dilithium") == 0) { + *kt = kt_IBM_DILITHIUM; ++ } else if (strcasecmp(argv[i], "ibm-kyber") == 0) { ++ *kt = kt_IBM_KYBER; + } else if (strcasecmp(argv[i], "generic") == 0) { + *kt = kt_GENERIC; + } else if (strcasecmp(argv[i], "secret") == 0) { +@@ -2158,7 +2238,7 @@ static CK_RV parse_gen_key_args(char *argv[], int argc, p11sak_kt *kt, + CK_ULONG *keylength, char **ECcurve, + CK_SLOT_ID *slot, const char **pin, + CK_ULONG *exponent, char **label, +- char **attr_string, char **dilithium_ver, ++ char **attr_string, char **pqc_ver, + int *force_pin_prompt) + { + CK_RV rc; +@@ -2190,7 +2270,11 @@ static CK_RV parse_gen_key_args(char *argv[], int argc, p11sak_kt *kt, + i++; + } else if (strcasecmp(argv[i], "ibm-dilithium") == 0) { + *kt = kt_IBM_DILITHIUM; +- *dilithium_ver = get_string_arg(i + 1, argv, argc); ++ *pqc_ver = get_string_arg(i + 1, argv, argc); ++ i++; ++ } else if (strcasecmp(argv[i], "ibm-kyber") == 0) { ++ *kt = kt_IBM_KYBER; ++ *pqc_ver = get_string_arg(i + 1, argv, argc); + i++; + /* Get options */ + } else if (strcmp(argv[i], "--slot") == 0) { +@@ -2281,7 +2365,7 @@ static CK_RV parse_gen_key_args(char *argv[], int argc, p11sak_kt *kt, + } + + /* Check args */ +- rc = check_args_gen_key(kt, *keylength, *ECcurve, *dilithium_ver); ++ rc = check_args_gen_key(kt, *keylength, *ECcurve, *pqc_ver); + + /* Check required options */ + if (*label == NULL) { +@@ -2331,6 +2415,8 @@ static CK_RV parse_remove_key_args(char *argv[], int argc, p11sak_kt *kt, + *kt = kt_EC; + } else if (strcasecmp(argv[i], "ibm-dilithium") == 0) { + *kt = kt_IBM_DILITHIUM; ++ } else if (strcasecmp(argv[i], "ibm-kyber") == 0) { ++ *kt = kt_IBM_KYBER; + /* Get options */ + } else if (strcmp(argv[i], "--slot") == 0) { + if (i + 1 < argc) { +@@ -2415,7 +2501,7 @@ static CK_RV parse_cmd_args(p11sak_cmd cmd, char *argv[], int argc, + CK_SLOT_ID *slot, const char **pin, + CK_ULONG *exponent, char **label, + char **attr_string, int *long_print, int *full_uri, +- CK_BBOOL *forceAll, char **dilithium_ver, ++ CK_BBOOL *forceAll, char **pqc_ver, + int *force_pin_prompt) + { + CK_RV rc; +@@ -2423,7 +2509,7 @@ static CK_RV parse_cmd_args(p11sak_cmd cmd, char *argv[], int argc, + switch (cmd) { + case gen_key: + rc = parse_gen_key_args(argv, argc, kt, keylength, ECcurve, slot, pin, +- exponent, label, attr_string, dilithium_ver, force_pin_prompt); ++ exponent, label, attr_string, pqc_ver, force_pin_prompt); + break; + case list_key: + rc = parse_list_key_args(argv, argc, kt, keylength, slot, pin, +@@ -2481,7 +2567,7 @@ done: + static CK_RV generate_asymmetric_key(CK_SESSION_HANDLE session, CK_SLOT_ID slot, + p11sak_kt kt, CK_ULONG keylength, + CK_ULONG exponent, char *ECcurve, +- char *label, char *attr_string, char *dilithium_ver) ++ char *label, char *attr_string, char *pqc_ver) + { + CK_OBJECT_HANDLE pub_keyh, prv_keyh; + CK_ATTRIBUTE pub_attr[KEY_MAX_BOOL_ATTR_COUNT + 2]; +@@ -2514,13 +2600,21 @@ static CK_RV generate_asymmetric_key(CK_SESSION_HANDLE session, CK_SLOT_ID slot, + } + break; + case kt_IBM_DILITHIUM: +- rc = read_dilithium_args(dilithium_ver, &keyform, ++ rc = read_dilithium_args(pqc_ver, &keyform, + pub_attr, &pub_acount); + if (rc) { + fprintf(stderr, "Error parsing Dilithium parameters!\n"); + goto done; + } +- printf("Generating Dilithium keypair with %s\n", dilithium_ver); ++ printf("Generating Dilithium keypair with %s\n", pqc_ver); ++ break; ++ case kt_IBM_KYBER: ++ rc = read_kyber_args(pqc_ver, &keyform, pub_attr, &pub_acount); ++ if (rc) { ++ fprintf(stderr, "Error parsing Kyber parameters!\n"); ++ goto done; ++ } ++ printf("Generating Kyber keypair with %s\n", pqc_ver); + break; + default: + fprintf(stderr, "The key type %d is not yet supported.\n", kt); +@@ -2626,7 +2720,7 @@ done: + static CK_RV generate_ckey(CK_SESSION_HANDLE session, CK_SLOT_ID slot, + p11sak_kt kt, CK_ULONG keylength, char *ECcurve, + CK_ULONG exponent, char *label, char *attr_string, +- char *dilithium_ver) ++ char *pqc_ver) + { + switch (kt) { + case kt_DES: +@@ -2637,8 +2731,9 @@ static CK_RV generate_ckey(CK_SESSION_HANDLE session, CK_SLOT_ID slot, + case kt_RSAPKCS: + case kt_EC: + case kt_IBM_DILITHIUM: ++ case kt_IBM_KYBER: + return generate_asymmetric_key(session, slot, kt, keylength, exponent, +- ECcurve, label, attr_string, dilithium_ver); ++ ECcurve, label, attr_string, pqc_ver); + default: + fprintf(stderr, "Error: cannot create a key of type %i (%s)\n", kt, kt2str(kt)); + return CKR_ARGUMENTS_BAD; +@@ -3030,13 +3125,13 @@ static CK_RV execute_cmd(CK_SESSION_HANDLE session, CK_SLOT_ID slot, + p11sak_cmd cmd, p11sak_kt kt, CK_ULONG keylength, + CK_ULONG exponent, char *ECcurve, char *label, + char *attr_string, int long_print, int full_uri, +- CK_BBOOL *forceAll, char *dilithium_ver) ++ CK_BBOOL *forceAll, char *pqc_ver) + { + CK_RV rc; + switch (cmd) { + case gen_key: + rc = generate_ckey(session, slot, kt, keylength, ECcurve, exponent, +- label, attr_string, dilithium_ver); ++ label, attr_string, pqc_ver); + break; + case list_key: + rc = list_ckey(session, slot, kt, long_print, label, full_uri); +@@ -3177,7 +3272,7 @@ int main(int argc, char *argv[]) + char *ECcurve = NULL; + char *attr_string = NULL; + CK_ULONG keylength = 0; +- char *dilithium_ver = NULL; ++ char *pqc_ver = NULL; + CK_RV rc = CKR_OK; + CK_SESSION_HANDLE session; + const char *pin = NULL; +@@ -3203,7 +3298,7 @@ int main(int argc, char *argv[]) + /* Parse command args */ + rc = parse_cmd_args(cmd, argv, argc, &kt, &keylength, &ECcurve, &slot, &pin, + &exponent, &label, &attr_string, &long_print, &full_uri, &forceAll, +- &dilithium_ver, &force_pin_prompt); ++ &pqc_ver, &force_pin_prompt); + if (rc != CKR_OK) { + goto done; + } +@@ -3240,7 +3335,7 @@ int main(int argc, char *argv[]) + + /* Execute command */ + rc = execute_cmd(session, slot, cmd, kt, keylength, exponent, ECcurve, +- label, attr_string, long_print, full_uri, &forceAll, dilithium_ver); ++ label, attr_string, long_print, full_uri, &forceAll, pqc_ver); + if (rc == CKR_CANCEL) { + fprintf(stderr, "Cancel execution: p11sak %s command (error code 0x%lX: %s)\n", cmd2str(cmd), rc, + p11_get_ckr(rc)); +diff --git a/usr/sbin/p11sak/p11sak.h b/usr/sbin/p11sak/p11sak.h +index 2b7e9c64..9d5a461a 100644 +--- a/usr/sbin/p11sak/p11sak.h ++++ b/usr/sbin/p11sak/p11sak.h +@@ -25,6 +25,7 @@ typedef enum { + kt_RSAPKCS, + kt_EC, + kt_IBM_DILITHIUM, ++ kt_IBM_KYBER, + kt_GENERIC, + kt_SECRET, + kt_PUBLIC, +diff --git a/usr/sbin/p11sak/p11sak_defined_attrs.conf b/usr/sbin/p11sak/p11sak_defined_attrs.conf +index 520d28d5..53080ef5 100644 +--- a/usr/sbin/p11sak/p11sak_defined_attrs.conf ++++ b/usr/sbin/p11sak/p11sak_defined_attrs.conf +@@ -33,10 +33,14 @@ attribute { + id = 0x00000120 + type = CK_BYTE + } +- + attribute { + name = CKA_IBM_DILITHIUM_KEYFORM + id = 0x800d0001 + type = CK_ULONG + } ++attribute { ++ name = CKA_IBM_KYBER_KEYFORM ++ id = 0x800d0009 ++ type = CK_ULONG ++} + +-- +2.16.2.windows.1 + diff --git a/SOURCES/0032-testcase-Enhance-p11sak-testcase-to-generate-IBM-Kyb.patch b/SOURCES/0032-testcase-Enhance-p11sak-testcase-to-generate-IBM-Kyb.patch new file mode 100644 index 0000000..ae9912f --- /dev/null +++ b/SOURCES/0032-testcase-Enhance-p11sak-testcase-to-generate-IBM-Kyb.patch @@ -0,0 +1,111 @@ +From 3247a4f1d1d8a9b8d7f3bc6c1dd85234dd184cbb Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Wed, 9 Nov 2022 09:45:21 +0100 +Subject: [PATCH 32/34] testcase: Enhance p11sak testcase to generate IBM Kyber + keys + +Signed-off-by: Ingo Franzki +--- + testcases/misc_tests/p11sak_test.sh | 44 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 44 insertions(+) + +diff --git a/testcases/misc_tests/p11sak_test.sh b/testcases/misc_tests/p11sak_test.sh +index a0d3c644..b3374c6a 100755 +--- a/testcases/misc_tests/p11sak_test.sh ++++ b/testcases/misc_tests/p11sak_test.sh +@@ -38,6 +38,9 @@ P11SAK_EC_POST=p11sak-ec-post.out + P11SAK_IBM_DIL_PRE=p11sak-ibm-dil-pre.out + P11SAK_IBM_DIL_LONG=p11sak-ibm-dil-long.out + P11SAK_IBM_DIL_POST=p11sak-ibm-dil-post.out ++P11SAK_IBM_KYBER_PRE=p11sak-ibm-kyber-pre.out ++P11SAK_IBM_KYBER_LONG=p11sak-ibm-kyber-long.out ++P11SAK_IBM_KYBER_POST=p11sak-ibm-kyber-post.out + P11SAK_ALL_PINOPT=p11sak-all-pinopt + P11SAK_ALL_PINENV=p11sak-all-pinenv + P11SAK_ALL_PINCON=p11sak-all-pincon +@@ -83,6 +86,12 @@ if [[ -n $( pkcsconf -m -c $SLOT | grep CKM_IBM_DILITHIUM) ]]; then + else + echo "Skip generating ibm-dilithium keys, slot does not support CKM_IBM_DILITHIUM" + fi ++# ibm-kyber ++if [[ -n $( pkcsconf -m -c $SLOT | grep CKM_IBM_KYBER) ]]; then ++ p11sak generate-key ibm-kyber r2_1024 --slot $SLOT --pin $PKCS11_USER_PIN --label p11sak-ibm-kyber ++else ++ echo "Skip generating ibm-kyber keys, slot does not support CKM_IBM_KYBER" ++fi + + + echo "** Now list keys and redirect output to pre-files - 'p11sak_test.sh'" +@@ -102,6 +111,7 @@ p11sak list-key aes --slot $SLOT --pin $PKCS11_USER_PIN --long &> $P11SAK_AES_LO + p11sak list-key rsa --slot $SLOT --pin $PKCS11_USER_PIN --long &> $P11SAK_RSA_LONG + p11sak list-key ec --slot $SLOT --pin $PKCS11_USER_PIN --long &> $P11SAK_EC_LONG + p11sak list-key ibm-dilithium --slot $SLOT --pin $PKCS11_USER_PIN --long &> $P11SAK_IBM_DIL_LONG ++p11sak list-key ibm-kyber --slot $SLOT --pin $PKCS11_USER_PIN --long &> $P11SAK_IBM_KYBER_LONG + + p11sak list-key all --slot $SLOT --pin $PKCS11_USER_PIN &> $P11SAK_ALL_PINOPT + RC_P11SAK_PINOPT=$? +@@ -143,6 +153,9 @@ p11sak remove-key ec --slot $SLOT --pin $PKCS11_USER_PIN --label p11sak-ec-secp5 + # remove ibm dilithium keys + p11sak remove-key ibm-dilithium --slot $SLOT --pin $PKCS11_USER_PIN --label p11sak-ibm-dilithium:pub -f + p11sak remove-key ibm-dilithium --slot $SLOT --pin $PKCS11_USER_PIN --label p11sak-ibm-dilithium:prv -f ++# remove ibm kyber keys ++p11sak remove-key ibm-kyber --slot $SLOT --pin $PKCS11_USER_PIN --label p11sak-ibm-kyber:pub -f ++p11sak remove-key ibm-kyber --slot $SLOT --pin $PKCS11_USER_PIN --label p11sak-ibm-kyber:prv -f + + + echo "** Now list keys and rediirect to post-files - 'p11sak_test.sh'" +@@ -155,6 +168,7 @@ p11sak list-key aes --slot $SLOT --pin $PKCS11_USER_PIN &> $P11SAK_AES_POST + p11sak list-key rsa --slot $SLOT --pin $PKCS11_USER_PIN &> $P11SAK_RSA_POST + p11sak list-key ec --slot $SLOT --pin $PKCS11_USER_PIN &> $P11SAK_EC_POST + p11sak list-key ibm-dilithium --slot $SLOT --pin $PKCS11_USER_PIN &> $P11SAK_IBM_DIL_POST ++p11sak list-key ibm-kyber --slot $SLOT --pin $PKCS11_USER_PIN &> $P11SAK_IBM_KYBER_POST + + + echo "** Now checking output files to determine PASS/FAIL of tests - 'p11sak_test.sh'" +@@ -670,6 +684,33 @@ else + echo "* TESTCASE list-key ibm-dilithium SKIP Listed random ibm-dilithium public keys CK_BYTE attribute" + fi + ++if [[ -n $( pkcsconf -m -c $SLOT | grep CKM_IBM_KYBER) ]]; then ++ # CK_BBOOL ++ if [[ $(grep -A 35 'p11sak-ibm-kyber' $P11SAK_IBM_KYBER_LONG | grep -c 'CK_TRUE') == "12" ]]; then ++ echo "* TESTCASE list-key ibm-kyber PASS Listed random ibm-kyber public keys CK_BBOOL attribute" ++ else ++ echo "* TESTCASE list-key ibm-kyber FAIL Failed to list ibm-kyber public keys CK_BBOOL attribute" ++ status=1 ++ fi ++ # CK_ULONG ++ if [[ $(grep -A 35 'p11sak-ibm-kyber' $P11SAK_IBM_KYBER_LONG | grep -c 'CKA_MODULUS_BITS:') == "0" ]]; then ++ echo "* TESTCASE list-key ibm-kyber PASS Listed random ibm-kyber public keys CK_ULONG attribute" ++ else ++ echo "* TESTCASE list-key ibm-kyber FAIL Failed to list ibm-kyber public keys CK_ULONG attribute" ++ status=1 ++ fi ++ # CK_BYTE ++ if [[ $(grep -A 35 'p11sak-ibm-kyber' $P11SAK_IBM_KYBER_LONG | grep -c 'CKA_MODULUS:') == "0" ]]; then ++ echo "* TESTCASE list-key ibm-kyber PASS Listed random ibm-kyber public keys CK_BYTE attribute" ++ else ++ echo "* TESTCASE list-key ibm-kyber FAIL Failed to list ibm-kyber public keys CK_BYTE attribute" ++ status=1 ++ fi ++else ++ echo "* TESTCASE list-key ibm-kyber SKIP Listed random ibm-kyber public keys CK_BBOOL attribute" ++ echo "* TESTCASE list-key ibm-kyber SKIP Listed random ibm-kyber public keys CK_ULONG attribute" ++ echo "* TESTCASE list-key ibm-kyber SKIP Listed random ibm-kyber public keys CK_BYTE attribute" ++fi + + # check token pin handling + if [ $RC_P11SAK_PINOPT = 0 ]; then +@@ -724,6 +765,9 @@ rm -f $P11SAK_EC_POST + rm -f $P11SAK_IBM_DIL_PRE + rm -f $P11SAK_IBM_DIL_LONG + rm -f $P11SAK_IBM_DIL_POST ++rm -f $P11SAK_IBM_KYBER_PRE ++rm -f $P11SAK_IBM_KYBER_LONG ++rm -f $P11SAK_IBM_KYBER_POST + rm -f $P11SAK_ALL_PINOPT + rm -f $P11SAK_ALL_PINENV + rm -f $P11SAK_ALL_PINCON +-- +2.16.2.windows.1 + diff --git a/SOURCES/0033-EP11-Supply-CKA_PUBLIC_KEY_INFO-with-CKM_IBM_BTC_DER.patch b/SOURCES/0033-EP11-Supply-CKA_PUBLIC_KEY_INFO-with-CKM_IBM_BTC_DER.patch new file mode 100644 index 0000000..5a27080 --- /dev/null +++ b/SOURCES/0033-EP11-Supply-CKA_PUBLIC_KEY_INFO-with-CKM_IBM_BTC_DER.patch @@ -0,0 +1,356 @@ +From df874a780108fa1390e4cb99144b9acb0667f76b Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Fri, 4 Nov 2022 11:33:50 +0100 +Subject: [PATCH 33/34] EP11: Supply CKA_PUBLIC_KEY_INFO with + CKM_IBM_BTC_DERIVE of private key + +When deriving a private EC key with the CKM_IBM_BTC_DERIVE mechanism, +also supply the SPKI in the CKA_PUBLIC_KEY_INFO attribute. + +To get the SPKI, use m_GetAttributeValue() with CKA_PUBLIC_KEY_INFO. +On newer EP11 host libraries this returns the SPKI of the corresponding +public key of the private key blob. In case the EP11 host library fails +to get the SPKI from the blob, ignore and do not supply an SPKI. + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 266 +++++++++++++++++++++++-------------- + 1 file changed, 168 insertions(+), 98 deletions(-) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index 9efce053..d4ece223 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -5316,7 +5316,148 @@ static CK_RV ep11tok_kyber_mech_post_process(STDLL_TokData_t *tokdata, + return CKR_OK; + } + +-CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, ++static CK_RV ep11tok_btc_mech_pre_process(STDLL_TokData_t *tokdata, ++ OBJECT *key_obj, ++ CK_ATTRIBUTE **new_attrs, ++ CK_ULONG *new_attrs_len) ++{ ++ CK_ATTRIBUTE *ec_params; ++ CK_ULONG i, privlen; ++ CK_RV rc; ++ ++ UNUSED(tokdata); ++ ++ /* ++ * CKM_IBM_BTC_DERIVE requires CKA_VALUE_LEN to specify the byte length ++ * of the to be derived EC key. CKA_VALUE_LEN is dependent on the ++ * curve used. ++ * CKA_VALUE_LEN can not be already in the user supplied template, ++ * since this is not allowed by the key template check routines. ++ */ ++ rc = template_attribute_get_non_empty(key_obj->template, CKA_EC_PARAMS, ++ &ec_params); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("CKA_EC_PARAMS is required in derive template\n"); ++ return rc; ++ } ++ ++ for (i = 0; i < NUMEC; i++) { ++ if (der_ec_supported[i].data_size == ec_params->ulValueLen && ++ memcmp(ec_params->pValue, der_ec_supported[i].data, ++ ec_params->ulValueLen) == 0) { ++ privlen = (der_ec_supported[i].len_bits + 7) / 8; ++ rc = add_to_attribute_array(new_attrs, new_attrs_len, ++ CKA_VALUE_LEN, ++ (CK_BYTE_PTR)&privlen, ++ sizeof(privlen)); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("Adding attribute failed type=CKA_VALUE_LEN " ++ "rc=0x%lx\n", rc); ++ return rc; ++ } ++ break; ++ } ++ } ++ ++ return CKR_OK; ++} ++ ++static CK_RV ep11tok_btc_mech_post_process(STDLL_TokData_t *tokdata, ++ SESSION *session, CK_MECHANISM *mech, ++ CK_ULONG class, CK_ULONG ktype, ++ OBJECT *key_obj, ++ CK_BYTE *blob, CK_ULONG bloblen, ++ CK_BYTE *csum, CK_ULONG cslen) ++{ ++ CK_IBM_BTC_DERIVE_PARAMS *btc_params = NULL; ++ CK_BYTE *spki = NULL; ++ CK_ULONG spki_length = 0; ++ CK_BYTE buf[MAX_BLOBSIZE]; ++ CK_ATTRIBUTE get_attr[1] = {{ CKA_PUBLIC_KEY_INFO, &buf, sizeof(buf) }}; ++ CK_ATTRIBUTE *spki_attr = NULL; ++ CK_BBOOL allocated = FALSE; ++ CK_RV rc = CKR_OK; ++ ++ if (mech->ulParameterLen != sizeof(CK_IBM_BTC_DERIVE_PARAMS) || ++ mech->pParameter == NULL) { ++ TRACE_ERROR("%s Param NULL or len for %s wrong: %lu\n", ++ __func__, ep11_get_ckm(tokdata, mech->mechanism), ++ mech->ulParameterLen); ++ return CKR_MECHANISM_PARAM_INVALID; ++ } ++ ++ btc_params = (CK_IBM_BTC_DERIVE_PARAMS *)mech->pParameter; ++ ++ if (btc_params != NULL && btc_params->pChainCode != NULL && ++ cslen >= CK_IBM_BTC_CHAINCODE_LENGTH) { ++ memcpy(btc_params->pChainCode, csum, CK_IBM_BTC_CHAINCODE_LENGTH); ++ btc_params->ulChainCodeLen = CK_IBM_BTC_CHAINCODE_LENGTH; ++ } ++ ++ switch (class) { ++ case CKO_PUBLIC_KEY: ++ /* Derived blob is an SPKI, extract public EC key attributes */ ++ rc = ecdsa_priv_unwrap_get_data(key_obj->template, blob, bloblen); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s ecdsa_priv_unwrap_get_data failed with " ++ "rc=0x%lx\n", __func__, rc); ++ return rc; ++ } ++ ++ /* Extract the SPKI and add CKA_PUBLIC_KEY_INFO to key */ ++ rc = publ_key_get_spki(key_obj->template, ktype, FALSE, ++ &spki, &spki_length); ++ if (rc != CKR_OK) { ++ TRACE_DEVEL("publ_key_get_spki failed\n"); ++ return rc; ++ } ++ ++ allocated = TRUE; ++ break; ++ ++ case CKO_PRIVATE_KEY: ++ RETRY_START(rc, tokdata) ++ rc = dll_m_GetAttributeValue(blob, bloblen, get_attr, 1, ++ target_info->target); ++ RETRY_END(rc, tokdata, session) ++ ++ /* Only newer EP11 libs support this, ignore if error */ ++ if (rc != CKR_OK) ++ return CKR_OK; ++ ++ spki = get_attr[0].pValue; ++ spki_length = get_attr[0].ulValueLen; ++ break; ++ ++ default: ++ /* do nothing */ ++ return CKR_OK; ++ } ++ ++ rc = build_attribute(CKA_PUBLIC_KEY_INFO, spki, spki_length, ++ &spki_attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", ++ __func__, rc); ++ goto out; ++ } ++ ++ rc = template_update_attribute(key_obj->template, spki_attr); ++ if (rc != CKR_OK) { ++ TRACE_ERROR("%s template_update_attribute failed with rc=0x%lx\n", ++ __func__, rc); ++ free(spki_attr); ++ goto out; ++ } ++ ++out: ++ if (allocated && spki != NULL) ++ free(spki); ++ ++ return rc; ++} ++ ++CK_RV ep11tok_derive_key(STDLL_TokData_t *tokdata, SESSION *session, + CK_MECHANISM_PTR mech, CK_OBJECT_HANDLE hBaseKey, + CK_OBJECT_HANDLE_PTR handle, CK_ATTRIBUTE_PTR attrs, + CK_ULONG attrs_len) +@@ -5345,17 +5486,12 @@ CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, + CK_ULONG ecpoint_len, field_len, key_len = 0; + CK_ATTRIBUTE *new_attrs1 = NULL, *new_attrs2 = NULL; + CK_ULONG new_attrs1_len = 0, new_attrs2_len = 0; +- CK_ULONG privlen, i; ++ CK_ULONG privlen; + int curve_type; + CK_BBOOL allocated = FALSE; + ep11_target_info_t* target_info; + CK_ULONG used_firmware_API_version; + CK_MECHANISM_PTR mech_orig = mech; +- CK_ATTRIBUTE *ec_params; +- CK_IBM_BTC_DERIVE_PARAMS *btc_params = NULL; +- CK_BYTE *spki = NULL; +- CK_ULONG spki_length = 0; +- CK_ATTRIBUTE *spki_attr = NULL; + struct EP11_KYBER_MECH mech_ep11; + OBJECT *kyber_secret_obj = NULL; + +@@ -5476,18 +5612,6 @@ CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, + } + } + +- if (mech->mechanism == CKM_IBM_BTC_DERIVE) { +- if (mech->ulParameterLen != sizeof(CK_IBM_BTC_DERIVE_PARAMS) || +- mech->pParameter == NULL) { +- TRACE_ERROR("%s Param NULL or len for %s wrong: %lu\n", +- __func__, ep11_get_ckm(tokdata, mech->mechanism), +- mech->ulParameterLen); +- return CKR_MECHANISM_PARAM_INVALID; +- } +- +- btc_params = (CK_IBM_BTC_DERIVE_PARAMS *)mech->pParameter; +- } +- + rc = h_opaque_2_blob(tokdata, hBaseKey, &keyblob, &keyblobsize, + &base_key_obj, READ_LOCK); + if (rc != CKR_OK) { +@@ -5605,46 +5729,24 @@ CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, + goto error; + } + +- if (mech->mechanism == CKM_IBM_BTC_DERIVE) { +- /* +- * CKM_IBM_BTC_DERIVE requires CKA_VALUE_LEN to specify the byte length +- * of the to be derived EC key. CKA_VALUE_LEN is dependent on the +- * curve used. +- * CKA_VALUE_LEN can not be already in the user supplied template, +- * since this is not allowed by the key template check routines. +- */ +- rc = template_attribute_get_non_empty(key_obj->template, CKA_EC_PARAMS, +- &ec_params); +- if (rc != CKR_OK) { +- TRACE_ERROR("CKA_EC_PARAMS is required in derive template\n"); ++ switch (mech->mechanism) { ++ case CKM_IBM_BTC_DERIVE: ++ rc = ep11tok_btc_mech_pre_process(tokdata, key_obj, &new_attrs2, ++ &new_attrs2_len); ++ if (rc != CKR_OK) + goto error; +- } +- +- for (i = 0; i < NUMEC; i++) { +- if (der_ec_supported[i].data_size == ec_params->ulValueLen && +- memcmp(ec_params->pValue, der_ec_supported[i].data, +- ec_params->ulValueLen) == 0) { +- privlen = (der_ec_supported[i].len_bits + 7) / 8; +- rc = add_to_attribute_array(&new_attrs2, &new_attrs2_len, +- CKA_VALUE_LEN, +- (CK_BYTE_PTR)&privlen, +- sizeof(privlen)); +- if (rc != CKR_OK) { +- TRACE_ERROR("Adding attribute failed type=CKA_VALUE_LEN " +- "rc=0x%lx\n", rc); +- goto error; +- } +- break; +- } +- } +- } ++ break; + +- if (mech->mechanism == CKM_IBM_KYBER) { ++ case CKM_IBM_KYBER: + rc = ep11tok_kyber_mech_pre_process(tokdata, mech, &mech_ep11, + &kyber_secret_obj); + if (rc != CKR_OK) + goto error; + mech = &mech_ep11.mech; ++ break; ++ ++ default: ++ break; + } + + trace_attributes(__func__, "Derive:", new_attrs2, new_attrs2_len); +@@ -5695,47 +5797,6 @@ CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, + } + opaque_attr = NULL; + +- if (mech->mechanism == CKM_IBM_BTC_DERIVE && +- btc_params != NULL && btc_params->pChainCode != NULL && +- cslen >= CK_IBM_BTC_CHAINCODE_LENGTH) { +- memcpy(btc_params->pChainCode, csum, CK_IBM_BTC_CHAINCODE_LENGTH); +- btc_params->ulChainCodeLen = CK_IBM_BTC_CHAINCODE_LENGTH; +- } +- +- if (mech->mechanism == CKM_IBM_BTC_DERIVE && class == CKO_PUBLIC_KEY) { +- /* Derived blob is an SPKI, extract public EC key attributes */ +- rc = ecdsa_priv_unwrap_get_data(key_obj->template, +- newblob, newblobsize); +- if (rc != CKR_OK) { +- TRACE_ERROR("%s ecdsa_priv_unwrap_get_data failed with rc=0x%lx\n", +- __func__, rc); +- goto error; +- } +- +- /* Extract the SPKI and add CKA_PUBLIC_KEY_INFO to key */ +- rc = publ_key_get_spki(key_obj->template, ktype, FALSE, +- &spki, &spki_length); +- if (rc != CKR_OK) { +- TRACE_DEVEL("publ_key_get_spki failed\n"); +- goto error; +- } +- +- rc = build_attribute(CKA_PUBLIC_KEY_INFO, spki, spki_length, &spki_attr); +- if (rc != CKR_OK) { +- TRACE_ERROR("%s build_attribute failed with rc=0x%lx\n", +- __func__, rc); +- goto error; +- } +- +- rc = template_update_attribute(key_obj->template, spki_attr); +- if (rc != CKR_OK) { +- TRACE_ERROR("%s template_update_attribute failed with " +- "rc=0x%lx\n", __func__, rc); +- goto error; +- } +- spki_attr = NULL; +- } +- + if (class == CKO_SECRET_KEY || class == CKO_PRIVATE_KEY) { + rc = update_ep11_attrs_from_blob(tokdata, session, key_obj->template); + if (rc != CKR_OK) { +@@ -5745,10 +5806,23 @@ CK_RV ep11tok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, + } + } + +- if (mech->mechanism == CKM_IBM_KYBER) { ++ switch (mech->mechanism) { ++ case CKM_IBM_BTC_DERIVE: ++ rc = ep11tok_btc_mech_post_process(tokdata, session, mech, class, ktype, ++ key_obj, newblob, newblobsize, ++ csum, cslen); ++ if (rc != CKR_OK) ++ goto error; ++ break; ++ ++ case CKM_IBM_KYBER: + rc = ep11tok_kyber_mech_post_process(tokdata, mech_orig, csum, cslen); + if (rc != CKR_OK) + goto error; ++ break; ++ ++ default: ++ break; + } + + if (class == CKO_SECRET_KEY && cslen >= EP11_CSUMSIZE) { +@@ -5792,10 +5866,6 @@ error: + free(opaque_attr); + if (chk_attr != NULL) + free(chk_attr); +- if (spki_attr != NULL) +- free(spki_attr); +- if (spki != NULL) +- free(spki); + if (new_attrs) + free_attribute_array(new_attrs, new_attrs_len); + if (new_attrs1) +-- +2.16.2.windows.1 + diff --git a/SOURCES/0034-EP11-Fix-setting-unknown-CPs-to-ON.patch b/SOURCES/0034-EP11-Fix-setting-unknown-CPs-to-ON.patch new file mode 100644 index 0000000..27d0355 --- /dev/null +++ b/SOURCES/0034-EP11-Fix-setting-unknown-CPs-to-ON.patch @@ -0,0 +1,46 @@ +From 45bc6dd09fb59d78ce9b2bca7125cfc2275f9bd1 Mon Sep 17 00:00:00 2001 +From: Ingo Franzki +Date: Wed, 25 Jan 2023 13:21:44 +0100 +Subject: [PATCH 34/34] EP11: Fix setting unknown CPs to ON + +The very last control point must also be applied from the queried bits to +the combined bits. Otherwise the very last control point is always treated +as being ON, although it might be OFF, and this can lead to mechanisms being +used that are disabled by that control point. + +Fixes https://github.com/opencryptoki/opencryptoki/commit/97248f73495695436f11fafd74c2ec41a5a6f796 + +Signed-off-by: Ingo Franzki +--- + usr/lib/ep11_stdll/ep11_specific.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c +index d5d3de91..25ce82fe 100644 +--- a/usr/lib/ep11_stdll/ep11_specific.c ++++ b/usr/lib/ep11_stdll/ep11_specific.c +@@ -11340,8 +11340,8 @@ static CK_RV control_point_handler(uint_32 adapter, uint_32 domain, + if (data->first) { + data->first_adapter = adapter; + data->first_domain = domain; +- /* Apply CP bits 0 to max_cp_index-1 only */ +- for (i = 0; i < max_cp_index; i++) { ++ /* Apply CP bits 0 to max_cp_index only */ ++ for (i = 0; i <= max_cp_index; i++) { + data->combined_cp[CP_BYTE_NO(i)] &= + (cp[CP_BYTE_NO(i)] | ~CP_BIT_MASK(i)); + } +@@ -11362,8 +11362,8 @@ static CK_RV control_point_handler(uint_32 adapter, uint_32 domain, + data->first_domain); + } + +- for (i = 0; i < max_cp_index; i++) { +- /* Apply CP bits 0 to max_cp_index-1 only */ ++ for (i = 0; i <= max_cp_index; i++) { ++ /* Apply CP bits 0 to max_cp_index only */ + data->combined_cp[CP_BYTE_NO(i)] &= + (cp[CP_BYTE_NO(i)] | ~CP_BIT_MASK(i)); + } +-- +2.16.2.windows.1 + diff --git a/SOURCES/opencryptoki-3.18.0-fix-json-output.patch b/SOURCES/opencryptoki-3.18.0-fix-json-output.patch deleted file mode 100644 index baa6ff7..0000000 --- a/SOURCES/opencryptoki-3.18.0-fix-json-output.patch +++ /dev/null @@ -1,47 +0,0 @@ -commit 1600eebb422ae2a733de3a0bd47464620e39ab0d -Author: Ingo Franzki -Date: Tue Jun 7 08:58:16 2022 +0200 - - pkcsstats: Fix JSON output in case of errors - - Produce correct JSON output, even if an error occurs during obtaining - of the statistics for a user. - - Signed-off-by: Ingo Franzki - -diff --git a/usr/sbin/pkcsstats/pkcsstats.c b/usr/sbin/pkcsstats/pkcsstats.c -index 8eb049dd..65d4833f 100644 ---- a/usr/sbin/pkcsstats/pkcsstats.c -+++ b/usr/sbin/pkcsstats/pkcsstats.c -@@ -789,7 +789,7 @@ int main(int argc, char **argv) - bool reset = false, reset_all = false; - bool delete = false, delete_all = false; - bool slot_id_specified = false; -- bool json = false; -+ bool json = false, json_started = false; - CK_SLOT_ID slot_id = 0; - void *dll = NULL; - CK_FUNCTION_LIST *func_list = NULL; -@@ -949,8 +949,11 @@ int main(int argc, char **argv) - goto done; - } - -- if (json && print_json_start() != 0) -- goto done; -+ if (json) { -+ if (print_json_start() != 0) -+ goto done; -+ json_started = true; -+ } - - dd.func_list = func_list; - dd.num_slots = num_slots; -@@ -972,7 +975,7 @@ int main(int argc, char **argv) - } - - done: -- if (rc == 0 && json) -+ if (json && json_started) - printf("\n\t]\n}\n"); - - if (slots != NULL) diff --git a/SOURCES/opencryptoki-3.18.0-memory_leak.patch b/SOURCES/opencryptoki-3.18.0-memory_leak.patch deleted file mode 100644 index 743b9d7..0000000 --- a/SOURCES/opencryptoki-3.18.0-memory_leak.patch +++ /dev/null @@ -1,33 +0,0 @@ -commit d5ccb00e52f5b0c66533f085cda36f63f7583d44 -Author: Ingo Franzki -Date: Tue Jul 19 16:16:55 2022 +0200 - - common: fix memory leak in save_private_token_object - - Reported by coverty scan: - - Error: RESOURCE_LEAK (CWE-772): - opencryptoki-3.18.0/usr/lib/common/loadsave.c:2311: alloc_fn: - Storage is returned from allocation function "fopen". - opencryptoki-3.18.0/usr/lib/common/loadsave.c:2311: var_assign: - Assigning: "fp" = storage returned from "fopen(fname, "r")". - opencryptoki-3.18.0/usr/lib/common/loadsave.c:2316: noescape: - Resource "fp" is not freed or pointed-to in "fileno". - opencryptoki-3.18.0/usr/lib/common/loadsave.c:2407: overwrite_var: - Overwriting "fp" in "fp = fopen(fname, "w")" leaks the storage that "fp" points to. - - Signed-off-by: Ingo Franzki - -diff --git a/usr/lib/common/loadsave.c b/usr/lib/common/loadsave.c -index bbd691c0..91955f47 100644 ---- a/usr/lib/common/loadsave.c -+++ b/usr/lib/common/loadsave.c -@@ -2344,6 +2344,8 @@ CK_RV save_private_token_object(STDLL_TokData_t *tokdata, OBJECT *obj) - /* New token objects files created by mkstemp have a size of zero */ - if (sb.st_size == 0) { - new = 1; -+ fclose(fp); -+ fp = NULL; - goto do_work; - } - diff --git a/SOURCES/opencryptoki-3.18.0-returning_CKR_BUFFER_TOO_SMALL.patch b/SOURCES/opencryptoki-3.18.0-returning_CKR_BUFFER_TOO_SMALL.patch deleted file mode 100644 index 9dbbb74..0000000 --- a/SOURCES/opencryptoki-3.18.0-returning_CKR_BUFFER_TOO_SMALL.patch +++ /dev/null @@ -1,32 +0,0 @@ -commit b545050b338e46c29936a2748aab7200e69a5c91 -Author: Ingo Franzki -Date: Tue Jul 26 15:11:06 2022 +0200 - - EP11: Fix C_GetMechanismList returning CKR_BUFFER_TOO_SMALL - - For mixed card levels, the size query call and the call to obtain the - list may run on different cards. When the size query call runs on a - card with less mechanisms than the second call, will fail, but it - returns the larger larger number of mechanisms. - - The code already re-allocates the buffer for retrieving the mechanism - list, but does not return the larger number in pulCount. This will - lead to a CKR_BUFFER_TOO_SMALL when the application calls C_GetMechanismList - again to obtain the list of mechanisms, because the applications buffer - is too small. - - Signed-off-by: Ingo Franzki - -diff --git a/usr/lib/ep11_stdll/ep11_specific.c b/usr/lib/ep11_stdll/ep11_specific.c -index 8d796452..1629e664 100644 ---- a/usr/lib/ep11_stdll/ep11_specific.c -+++ b/usr/lib/ep11_stdll/ep11_specific.c -@@ -8977,6 +8977,8 @@ CK_RV ep11tok_get_mechanism_list(STDLL_TokData_t * tokdata, - if (rc != CKR_BUFFER_TOO_SMALL) - goto out; - } -+ /* counter was updated in case of CKR_BUFFER_TOO_SMALL */ -+ *pulCount = counter; - } while (rc == CKR_BUFFER_TOO_SMALL); - - for (i = 0; i < counter; i++) { diff --git a/SOURCES/opencryptoki-3.19.0-fix-memory-leak.patch b/SOURCES/opencryptoki-3.19.0-fix-memory-leak.patch new file mode 100644 index 0000000..89da088 --- /dev/null +++ b/SOURCES/opencryptoki-3.19.0-fix-memory-leak.patch @@ -0,0 +1,51 @@ +commit cb4d7b125c7166602cb9094497a201b2f5a56985 +Author: Ingo Franzki +Date: Tue Oct 4 13:21:32 2022 +0200 + + pkcsicsf: Fix memory leak + + Use confignode_deepfree() to also free appended config nodes. + + Signed-off-by: Ingo Franzki + +diff --git a/usr/sbin/pkcsicsf/pkcsicsf.c b/usr/sbin/pkcsicsf/pkcsicsf.c +index 44f5ef34..b02d1fe5 100644 +--- a/usr/sbin/pkcsicsf/pkcsicsf.c ++++ b/usr/sbin/pkcsicsf/pkcsicsf.c +@@ -129,7 +129,8 @@ static void add_token_config_entry(struct ConfigIdxStructNode *s, char *key, cha + return; + + v = confignode_allocstringvaldumpable(key, value, 0, NULL); +- confignode_append(s->value, &v->base); ++ if (v != NULL) ++ confignode_append(s->value, &v->base); + } + + static int add_token_config(const char *configname, +@@ -150,7 +151,7 @@ static int add_token_config(const char *configname, + confignode_freeeoc(eoc1); + confignode_freeeoc(eoc2); + } +- confignode_freeidxstruct(s); ++ confignode_deepfree(&s->base); + fprintf(stderr, "Failed to add an entry for %s token\n", token.name); + return -1; + } +@@ -179,7 +180,7 @@ static int add_token_config(const char *configname, + if (tfp == NULL) { + fprintf(stderr, "fopen failed, line %d: %s\n", + __LINE__, strerror(errno)); +- confignode_freeidxstruct(s); ++ confignode_deepfree(&s->base); + return -1; + } + +@@ -188,7 +189,7 @@ static int add_token_config(const char *configname, + confignode_dump(tfp, &s->base, NULL, 2); + + fclose(tfp); +- confignode_freeidxstruct(s); ++ confignode_deepfree(&s->base); + + return 0; + } diff --git a/SPECS/opencryptoki.spec b/SPECS/opencryptoki.spec index 2e91da4..fc90d35 100644 --- a/SPECS/opencryptoki.spec +++ b/SPECS/opencryptoki.spec @@ -1,7 +1,7 @@ Name: opencryptoki Summary: Implementation of the PKCS#11 (Cryptoki) specification v3.0 -Version: 3.18.0 -Release: 5%{?dist} +Version: 3.19.0 +Release: 2%{?dist} License: CPL URL: https://github.com/opencryptoki/opencryptoki Source0: https://github.com/opencryptoki/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz @@ -12,9 +12,41 @@ Patch1: opencryptoki-3.11.0-lockdir.patch # add missing p11sak_defined_attrs.conf, strength.conf Patch2: opencryptoki-3.18.0-p11sak.patch # upstream patches -Patch100: opencryptoki-3.18.0-fix-json-output.patch -Patch101: opencryptoki-3.18.0-returning_CKR_BUFFER_TOO_SMALL.patch -Patch102: opencryptoki-3.18.0-memory_leak.patch +Patch100: opencryptoki-3.19.0-fix-memory-leak.patch +Patch101: 0001-EP11-Unify-key-pair-generation-functions.patch +Patch102: 0002-EP11-Do-not-report-DSA-DH-parameter-generation-as-be.patch +Patch103: 0003-EP11-Do-not-pass-empty-CKA_PUBLIC_KEY_INFO-to-EP11-h.patch +Patch104: 0004-Mechtable-CKM_IBM_DILITHIUM-can-also-be-used-for-key.patch +Patch105: 0005-EP11-Remove-DSA-DH-parameter-generation-mechanisms-f.patch +Patch106: 0006-EP11-Pass-back-chain-code-for-CKM_IBM_BTC_DERIVE.patch +Patch107: 0007-EP11-Supply-CKA_PUBLIC_KEY_INFO-with-CKM_IBM_BTC_DER.patch +Patch108: 0008-EP11-Supply-CKA_PUBLIC_KEY_INFO-when-importing-priva.patch +Patch109: 0009-EP11-Fix-memory-leak-introduced-with-recent-commit.patch +Patch110: 0010-p11sak-Fix-segfault-when-dilithium-version-is-not-sp.patch +Patch111: 0011-EP11-remove-dead-code-and-unused-variables.patch +Patch112: 0012-EP11-Update-EP11-host-library-header-files.patch +Patch113: 0013-EP11-Support-EP11-host-library-version-4.patch +Patch114: 0014-EP11-Add-new-control-points.patch +Patch115: 0015-EP11-Default-unknown-CPs-to-ON.patch +Patch116: 0016-COMMON-Add-defines-for-Dilithium-round-2-and-3-varia.patch +Patch117: 0017-COMMON-Add-defines-for-Kyber.patch +Patch118: 0018-COMMON-Add-post-quantum-algorithm-OIDs.patch +Patch119: 0019-COMMON-Dilithium-key-BER-encoding-decoding-allow-dif.patch +Patch120: 0020-COMMON-EP11-Add-CKA_VALUE-holding-SPKI-PKCS-8-of-key.patch +Patch121: 0021-COMMON-EP11-Allow-to-select-Dilithium-variant-via-mo.patch +Patch122: 0022-EP11-Query-supported-PQC-variants-and-restrict-usage.patch +Patch123: 0023-POLICY-Dilithium-strength-and-signature-size-depends.patch +Patch124: 0024-TESTCASES-Test-Dilithium-variants.patch +Patch125: 0025-COMMON-EP11-Add-Kyber-key-type-and-mechanism.patch +Patch126: 0026-EP11-Add-support-for-generating-and-importing-Kyber-.patch +Patch127: 0027-EP11-Add-support-for-encrypt-decrypt-and-KEM-operati.patch +Patch128: 0028-POLICY-STATISTICS-Check-for-Kyber-KEM-KDFs-and-count.patch +Patch129: 0029-TESTCASES-Add-tests-for-CKM_IBM_KYBER.patch +Patch130: 0030-p11sak-Support-additional-Dilithium-variants.patch +Patch131: 0031-p11sak-Add-support-for-IBM-Kyber-key-type.patch +Patch132: 0032-testcase-Enhance-p11sak-testcase-to-generate-IBM-Kyb.patch +Patch133: 0033-EP11-Supply-CKA_PUBLIC_KEY_INFO-with-CKM_IBM_BTC_DER.patch +Patch134: 0034-EP11-Fix-setting-unknown-CPs-to-ON.patch Requires(pre): coreutils diffutils Requires: (selinux-policy >= 34.1.8-1 if selinux-policy-targeted) @@ -286,6 +318,7 @@ fi %files devel %{_includedir}/%{name}/ +%{_libdir}/pkgconfig/%{name}.pc %files swtok %{_libdir}/opencryptoki/stdll/libpkcs11_sw.* @@ -318,6 +351,7 @@ fi %files ccatok %doc doc/README.cca_stdll +%config(noreplace) %{_sysconfdir}/%{name}/ccatok.conf %{_sbindir}/pkcscca %{_mandir}/man1/pkcscca.1* %{_libdir}/opencryptoki/stdll/libpkcs11_cca.* @@ -341,9 +375,15 @@ fi %changelog -* Thu Oct 13 2022 Than Ngo - 3.18.0-5 -- opencryptoki C_GenerateKeyPair() fails after generating > 500 RSA keys with CEX7 crypto cards -Resolves: #2128611 +* Mon Jan 30 2023 Than Ngo - 3.19.0-2 +- Resolves: #2044182, Support of ep11 token for new IBM Z Hardware (IBM z16) + +* Tue Oct 11 2022 Than Ngo - 3.19.0-1 +- Resolves: #2126294, opencryptoki fails after generating > 500 RSA keys +- Resolves: #2110314, rebase to 3.19.0 +- Resolves: #2110989, openCryptoki key generation with expected MKVP only on CCA and EP11 tokens +- Resolves: #2110476, openCryptoki ep11 token: master key consistency +- Resolves: #2018458, openCryptoki ep11 token: vendor specific key derivation * Fri Jul 29 2022 Than Ngo - 3.18.0-4 - Related: #2044179, do not touch opencryptoki.conf if it is in place already and even if it is unchanged