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