diff --git a/Makefile.in b/Makefile.in
index d41474129684bde1e9e28897e071663fd60a99aa..0d4d226a61da9258865404030dedd21f68c7b3e4 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -223,7 +223,10 @@ hogweed_SOURCES = sexp.c sexp-format.c \
 		  ed25519-sha512.c ed25519-sha512-pubkey.c \
 		  ed25519-sha512-sign.c ed25519-sha512-verify.c \
 		  ed448-shake256.c ed448-shake256-pubkey.c \
-		  ed448-shake256-sign.c ed448-shake256-verify.c
+		  ed448-shake256-sign.c ed448-shake256-verify.c \
+		  hpke-dhkem.c hpke-hkdf.c hpke-hkdf-hpke.c hpke-hkdf-kem.c \
+			hpke.c hpke-types.c hpke-dhkem-p256.c \
+		  hpke-hkdf-sha256.c hpke-aead-aes128.c hpke-aead-export.c
 
 OPT_SOURCES = fat-arm.c fat-arm64.c fat-ppc.c fat-s390x.c fat-x86_64.c mini-gmp.c
 
@@ -235,6 +238,7 @@ HEADERS = aes.h arcfour.h arctwo.h asn1.h blowfish.h balloon.h \
 	  gcm.h gostdsa.h gosthash94.h hmac.h \
 	  knuth-lfib.h hkdf.h \
 	  macros.h \
+	  hpke.h \
 	  cmac.h siv-cmac.h siv-gcm.h \
 	  md2.h md4.h \
 	  md5.h md5-compat.h \
@@ -276,7 +280,7 @@ DISTFILES = $(SOURCES) $(HEADERS) getopt.h getopt_int.h \
 	ctr-internal.h chacha-internal.h sha3-internal.h \
 	salsa20-internal.h umac-internal.h hogweed-internal.h \
 	rsa-internal.h pkcs1-internal.h dsa-internal.h eddsa-internal.h \
-	gmp-glue.h ecc-internal.h fat-setup.h \
+	gmp-glue.h ecc-internal.h fat-setup.h hpke-internal.h \
 	mini-gmp.h asm.m4 m4-utils.m4 \
 	nettle.texinfo nettle.info nettle.html nettle.pdf sha-example.c
 
diff --git a/hpke-aead-aes128.c b/hpke-aead-aes128.c
new file mode 100644
index 0000000000000000000000000000000000000000..cd0dca325876ac3c6a08147b14a6eba162e34276
--- /dev/null
+++ b/hpke-aead-aes128.c
@@ -0,0 +1,45 @@
+/* hpke-aead-aes128.c
+
+   Copyright (C) 2022 Red Hat, Inc.
+
+   Author: Norbert Pócs
+
+   This file is part of GNU Nettle.
+
+   GNU Nettle is free software: you can redistribute it and/or
+   modify it under the terms of either:
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at your
+       option) any later version.
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at your
+       option) any later version.
+
+   or both in parallel, as here.
+
+   GNU Nettle is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see http://www.gnu.org/licenses/.
+*/
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "hpke-internal.h"
+
+const struct hpke_aead nettle_hpke_aead_aes128 = 
+  {
+    HPKE_AEAD_AES_128_GCM,
+    16,
+    &nettle_gcm_aes128,
+  };
diff --git a/hpke-aead-export.c b/hpke-aead-export.c
new file mode 100644
index 0000000000000000000000000000000000000000..8640f6be974ab3b96ec350d6cfaddba808e3d90c
--- /dev/null
+++ b/hpke-aead-export.c
@@ -0,0 +1,45 @@
+/* hpke-aead-export.c
+
+   Copyright (C) 2022 Red Hat, Inc.
+
+   Author: Norbert Pócs
+
+   This file is part of GNU Nettle.
+
+   GNU Nettle is free software: you can redistribute it and/or
+   modify it under the terms of either:
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at your
+       option) any later version.
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at your
+       option) any later version.
+
+   or both in parallel, as here.
+
+   GNU Nettle is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see http://www.gnu.org/licenses/.
+*/
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "hpke-internal.h"
+
+const struct hpke_aead nettle_hpke_aead_export = 
+  {
+    HPKE_AEAD_EXPORT_ONLY,
+    0, NULL,
+  };
+
diff --git a/hpke-dhkem-p256.c b/hpke-dhkem-p256.c
new file mode 100644
index 0000000000000000000000000000000000000000..495e0c5d88bf4b83e2c783b74c6323155870e30e
--- /dev/null
+++ b/hpke-dhkem-p256.c
@@ -0,0 +1,51 @@
+/* hpke-dhkem-p256.c
+
+   Copyright (C) 2022 Red Hat, Inc.
+
+   Author: Norbert Pócs
+
+   This file is part of GNU Nettle.
+
+   GNU Nettle is free software: you can redistribute it and/or
+   modify it under the terms of either:
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at your
+       option) any later version.
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at your
+       option) any later version.
+
+   or both in parallel, as here.
+
+   GNU Nettle is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see http://www.gnu.org/licenses/.
+*/
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "hpke-internal.h"
+#include "ecc-internal.h"
+#include "ecc.h"
+
+const struct hpke_dhkem nettle_hpke_dhkem_p256 = 
+  {
+    HPKE_DHKEM_P256,
+    32, 32, 0xff,
+    &_nettle_secp_256r1,
+    &nettle_hmac_sha256,
+    _nettle_hpke_encap_prime,
+    _nettle_hpke_decap_prime,
+    NULL, NULL,
+  };
diff --git a/hpke-dhkem.c b/hpke-dhkem.c
new file mode 100644
index 0000000000000000000000000000000000000000..f5b77a21d42312bac9f3492b3fa5f5898be3aade
--- /dev/null
+++ b/hpke-dhkem.c
@@ -0,0 +1,214 @@
+/* hpke-dhkem->h
+
+   DHKEM Encapsulation and Decapsulation.
+
+   Copyright (C) 2022 Red Hat, Inc.
+
+   Author: Norbert Pócs
+
+   This file is part of GNU Nettle.
+
+   GNU Nettle is free software: you can redistribute it and/or
+   modify it under the terms of either:
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at your
+       option) any later version.
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at your
+       option) any later version.
+
+   or both in parallel, as here.
+
+   GNU Nettle is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see http://www.gnu.org/licenses/.
+*/
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "hpke.h"
+
+#include "ecc.h"
+#include "ecc-curve.h"
+#include "gmp-glue.h"
+#include "nettle-internal.h"
+#include "curve25519.h"
+#include "curve448.h"
+
+int
+_nettle_hpke_encap_prime (const struct hpke_dhkem *dhkem,
+                          uint8_t *pkr, size_t pkr_len,
+                          uint8_t **dh_ser, size_t *dh_ser_len,
+                          uint8_t **enc, size_t *enc_len,
+                          uint8_t *entropy)
+{
+  struct ecc_point p, dh, pR;
+  struct ecc_scalar key;
+  mpz_t x;
+  int r = 1;
+
+  ecc_point_init (&pR, dhkem->ecc);
+  _nettle_octet_to_ecc_point (&pR, pkr, pkr_len);
+
+  ecc_point_init (&p, dhkem->ecc);
+  ecc_scalar_init (&key, dhkem->ecc);
+
+  r = _nettle_derive_key_pair_p (entropy, dhkem->nsk, dhkem, &key, &p);
+  if (!r)
+    return 0;
+
+  ecc_point_init (&dh, dhkem->ecc);
+  ecc_point_mul (&dh, &key, &pR);
+
+  mpz_init (x);
+  ecc_point_get (&dh, x, NULL);
+  *dh_ser_len = (ecc_bit_size(dhkem->ecc) + 7) / 8;
+  *dh_ser = malloc (*dh_ser_len);
+  if (!dh_ser)
+    {
+      r = 0;
+      goto out;
+    }
+
+  nettle_mpz_get_str_256 (*dh_ser_len, *dh_ser, x);
+
+  _nettle_ecc_point_to_octet (enc, enc_len, &p, dhkem);
+
+out:
+  mpz_clear (x);
+  ecc_point_clear (&p);
+  ecc_point_clear (&pR);
+  ecc_point_clear (&dh);
+  ecc_scalar_clear (&key);
+
+  return r;
+}
+
+int
+_nettle_hpke_decap_prime (const struct hpke_dhkem *dhkem,
+                          uint8_t *enc, size_t enc_len,
+                          uint8_t *skr, size_t skr_len,
+                          uint8_t **dh_ser, size_t *dh_ser_len)
+{
+  struct ecc_point pkE, dh;
+  struct ecc_scalar skR;
+  mpz_t x, z;
+  ecc_point_init (&pkE, dhkem->ecc);
+  ecc_point_init (&dh, dhkem->ecc);
+  ecc_scalar_init (&skR, dhkem->ecc);
+  int r = 1;
+
+  mpz_init (z);
+  nettle_mpz_set_str_256_u (z, skr_len, skr);
+  ecc_scalar_set (&skR, z);
+  mpz_clear (z);
+
+  r = _nettle_octet_to_ecc_point (&pkE, enc, enc_len);
+  if (!r)
+    goto out;
+
+  ecc_point_mul (&dh, &skR, &pkE);
+
+  mpz_init (x);
+  ecc_point_get (&dh, x, NULL);
+  *dh_ser_len = (ecc_bit_size(dhkem->ecc) + 7) / 8;
+  *dh_ser = malloc (*dh_ser_len);
+  if (!dh_ser)
+    {
+      r = 0;
+      goto out;
+    }
+
+  nettle_mpz_get_str_256 (*dh_ser_len, *dh_ser, x);
+
+out:
+  mpz_clear (x);
+  ecc_point_clear (&pkE);
+  ecc_point_clear (&dh);
+  ecc_scalar_clear (&skR);
+
+  return r;
+}
+
+/* pkR is an octet string representing the
+ * point on the ec */
+int
+nettle_hpke_encap (uint8_t *pkr, size_t pkr_len,
+                   uint8_t **enc, size_t *enc_len,
+                   uint8_t **shared_secret,
+                   const struct hpke_dhkem *dhkem,
+                   void *random_ctx, nettle_random_func *random)
+{
+  uint8_t *dh_ser;
+  size_t dh_ser_len;
+  uint8_t entropy[HPKE_NSK_MAX];
+  int r;
+
+  random (random_ctx, HPKE_NSK_MAX, entropy);
+
+  r = dhkem->encap (dhkem, pkr, pkr_len, &dh_ser, &dh_ser_len,
+                    enc, enc_len, (uint8_t*)entropy);
+  if (!r)
+    return 0;
+
+  TMP_DECL (kem_context, uint8_t, *enc_len + pkr_len);
+  TMP_ALLOC (kem_context, *enc_len + pkr_len);
+  memcpy (kem_context, *enc, *enc_len);
+  memcpy (kem_context + *enc_len, pkr, pkr_len);
+
+  *shared_secret = _nettle_extract_and_expand_kem (dh_ser,
+                                                   dh_ser_len,
+                                                   kem_context,
+                                                   *enc_len+pkr_len,
+                                                   dhkem);
+  free (dh_ser);
+  if (!shared_secret)
+      return 0;
+
+  return 1;
+}
+
+int
+nettle_hpke_decap (uint8_t *enc, size_t enc_len, uint8_t *pkr, size_t pkr_len,
+                   uint8_t *skr, size_t skr_len, const struct hpke_dhkem *dhkem,
+                   uint8_t **shared_secret)
+{
+  uint8_t *dh_ser;
+  size_t dh_ser_len;
+  int r;
+
+  r = dhkem->decap (dhkem, enc, enc_len, skr, skr_len, &dh_ser, &dh_ser_len);
+  if (!r)
+    return 0;
+
+  TMP_DECL (kem_context, uint8_t, enc_len + pkr_len);
+  TMP_ALLOC (kem_context, enc_len + pkr_len);
+
+  memcpy (kem_context, enc, enc_len);
+  memcpy (kem_context + enc_len, pkr, pkr_len);
+
+  *shared_secret = _nettle_extract_and_expand_kem (dh_ser,
+                                                  dh_ser_len,
+                                                  kem_context,
+                                                  enc_len+pkr_len,
+                                                  dhkem);
+  free (dh_ser);
+  if (!*shared_secret)
+    return 0;
+
+  return 1;
+}
diff --git a/hpke-hkdf-hpke.c b/hpke-hkdf-hpke.c
new file mode 100644
index 0000000000000000000000000000000000000000..e76f050b194feedd4470ec327b4068705b638c3b
--- /dev/null
+++ b/hpke-hkdf-hpke.c
@@ -0,0 +1,186 @@
+/* hpke-hkdf-hpke.h
+
+   HKDF used anywhere else than the KEM part.
+
+   Copyright (C) 2022 Red Hat, Inc.
+
+   Author: Norbert Pócs
+
+   This file is part of GNU Nettle.
+
+   GNU Nettle is free software: you can redistribute it and/or
+   modify it under the terms of either:
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at your
+       option) any later version.
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at your
+       option) any later version.
+
+   or both in parallel, as here.
+
+   GNU Nettle is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see http://www.gnu.org/licenses/.
+*/
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "hpke-internal.h"
+#include "hpke.h"
+
+#include "gmp-glue.h"
+#include "hkdf.h"
+#include "nettle-internal.h"
+#include "hmac.h"
+
+uint8_t *
+_nettle_labeled_extract_hpke (uint8_t *salt, size_t salt_len, char *label,
+                              uint8_t *ikm, size_t ikm_len,
+                              const struct hpke_dhkem *dhkem,
+                              const struct hpke_hkdf *hkdf,
+                              const struct hpke_aead *aead)
+{
+  uint8_t *dst;
+  mpz_t id_conv;
+
+  size_t labeled_ikm_offset = HPKE_RFC_NUM_LEN;
+  const size_t label_len = strlen(label);
+  const size_t labeled_ikm_len = HPKE_RFC_NUM_LEN + 10
+                                 + label_len + ikm_len;
+  const struct nettle_mac *hmac_s = hkdf->hmac;
+
+  TMP_DECL (labeled_ikm, uint8_t, labeled_ikm_len);
+  TMP_ALLOC (labeled_ikm, labeled_ikm_len);
+  memcpy (labeled_ikm, HPKE_RFC_NUM, HPKE_RFC_NUM_LEN);
+
+  uint8_t id[2];
+
+  mpz_init_set_ui (id_conv, dhkem->dhkem);
+  nettle_mpz_get_str_256 (2, id, id_conv);
+  mpz_clear (id_conv);
+
+  memcpy (labeled_ikm + labeled_ikm_offset, "HPKE", 4);
+  labeled_ikm_offset += 4;
+  memcpy (labeled_ikm + labeled_ikm_offset, id, 2);
+  labeled_ikm_offset += 2;
+
+  mpz_init_set_ui (id_conv, hkdf->hkdf);
+  nettle_mpz_get_str_256 (2, id, id_conv);
+  mpz_clear (id_conv);
+  memcpy (labeled_ikm + labeled_ikm_offset, id, 2);
+  labeled_ikm_offset += 2;
+
+  mpz_init_set_ui (id_conv, aead->aead);
+  nettle_mpz_get_str_256 (2, id, id_conv);
+  mpz_clear (id_conv);
+  memcpy (labeled_ikm + labeled_ikm_offset, id, 2);
+  labeled_ikm_offset += 2;
+
+  memcpy (labeled_ikm + labeled_ikm_offset, label, label_len);
+  labeled_ikm_offset += label_len;
+  memcpy (labeled_ikm + labeled_ikm_offset, ikm, ikm_len);
+
+  TMP_DECL_ALIGN (ctx, hmac_s->context_size);
+  TMP_ALLOC_ALIGN (ctx, hmac_s->context_size);
+  if (hkdf->hkdf == HPKE_HKDF_SHA256)
+    hmac_sha256_set_key (ctx, salt_len, salt);
+  else
+    hmac_sha512_set_key (ctx, salt_len, salt);
+  dst = gmp_alloc (hmac_s->digest_size);
+  if (!dst)
+    return NULL;
+  hkdf_extract (ctx,
+                hmac_s->update,
+                hmac_s->digest,
+                hmac_s->digest_size,
+                labeled_ikm_len,
+                labeled_ikm,
+                dst);
+
+  return dst;
+}
+
+uint8_t *
+_nettle_labeled_expand_hpke (uint8_t *prk, char *label,
+                             uint8_t *info, size_t info_len, uint16_t l,
+                             const struct hpke_dhkem *dhkem,
+                             const struct hpke_hkdf *hkdf,
+                             const struct hpke_aead *aead)
+{
+  uint8_t id[2];
+  uint8_t *dst;
+  mpz_t id_conv;
+
+  size_t labeled_info_offset = 2;
+  const size_t label_len = strlen(label);
+  const size_t labeled_info_len = 2 + HPKE_RFC_NUM_LEN + 10
+                                  + label_len + info_len;
+  const struct nettle_mac *hmac_s = hkdf->hmac;
+
+  TMP_DECL (labeled_info, uint8_t, labeled_info_len);
+  TMP_ALLOC (labeled_info, labeled_info_len);
+  dst = gmp_alloc (l);
+  if (!dst)
+    return NULL;
+
+  mpz_init_set_ui (id_conv, l);
+  nettle_mpz_get_str_256 (2, id, id_conv);
+  mpz_clear (id_conv);
+  memcpy (labeled_info, id, 2);
+  memcpy (labeled_info + labeled_info_offset, HPKE_RFC_NUM, HPKE_RFC_NUM_LEN);
+  labeled_info_offset += HPKE_RFC_NUM_LEN;
+
+  mpz_init_set_ui (id_conv, dhkem->dhkem);
+  nettle_mpz_get_str_256 (2, id, id_conv);
+  mpz_clear (id_conv);
+
+  memcpy (labeled_info + labeled_info_offset, "HPKE", 4);
+  labeled_info_offset += 4;
+  memcpy (labeled_info + labeled_info_offset, id, 2);
+  labeled_info_offset += 2;
+
+  mpz_init_set_ui (id_conv, hkdf->hkdf);
+  nettle_mpz_get_str_256 (2, id, id_conv);
+  mpz_clear (id_conv);
+  memcpy (labeled_info + labeled_info_offset, id, 2);
+  labeled_info_offset += 2;
+
+  mpz_init_set_ui (id_conv, aead->aead);
+  nettle_mpz_get_str_256 (2, id, id_conv);
+  mpz_clear (id_conv);
+  memcpy (labeled_info + labeled_info_offset, id, 2);
+  labeled_info_offset += 2;
+
+  memcpy (labeled_info + labeled_info_offset, label, label_len);
+  labeled_info_offset += label_len;
+  memcpy (labeled_info + labeled_info_offset, info, info_len);
+
+  TMP_DECL_ALIGN (ctx, hmac_s->context_size);
+  TMP_ALLOC_ALIGN (ctx, hmac_s->context_size);
+  hmac_s->set_key (ctx, prk);
+  hkdf_expand (ctx,
+               hmac_s->update,
+               hmac_s->digest,
+               hmac_s->digest_size,
+               labeled_info_len,
+               labeled_info,
+               l,
+               dst);
+
+  return dst;
+}
diff --git a/hpke-hkdf-kem.c b/hpke-hkdf-kem.c
new file mode 100644
index 0000000000000000000000000000000000000000..2de70e33384b2d03edd7fd0e3c515329aeacc7e2
--- /dev/null
+++ b/hpke-hkdf-kem.c
@@ -0,0 +1,176 @@
+/* hpke-hkdf-kem.h
+
+   HKDF used in KEM part of HPKE.
+
+   Copyright (C) 2022 Red Hat, Inc.
+
+   Author: Norbert Pócs
+
+   This file is part of GNU Nettle.
+
+   GNU Nettle is free software: you can redistribute it and/or
+   modify it under the terms of either:
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at your
+       option) any later version.
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at your
+       option) any later version.
+
+   or both in parallel, as here.
+
+   GNU Nettle is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see http://www.gnu.org/licenses/.
+*/
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "hpke-internal.h"
+#include "hpke.h"
+
+#include "gmp-glue.h"
+#include "hkdf.h"
+#include "nettle-internal.h"
+#include "hmac.h"
+
+uint8_t *
+_nettle_labeled_extract_kem (uint8_t *salt, size_t salt_len, char *label,
+                             uint8_t *ikm, size_t ikm_len,
+                             const struct hpke_dhkem *dhkem)
+{
+  uint8_t id[2];
+  uint8_t *dst;
+  mpz_t id_conv;
+
+  size_t labeled_ikm_offset = HPKE_RFC_NUM_LEN;
+  const size_t label_len = strlen(label);
+  const size_t labeled_ikm_len = HPKE_RFC_NUM_LEN + 5
+                                 + label_len + ikm_len;
+  const struct nettle_mac *hmac_s = dhkem->hmac;
+
+  TMP_DECL (labeled_ikm, uint8_t, labeled_ikm_len);
+  TMP_ALLOC (labeled_ikm, labeled_ikm_len);
+  memcpy (labeled_ikm, HPKE_RFC_NUM, HPKE_RFC_NUM_LEN);
+
+  mpz_init_set_ui (id_conv, dhkem->dhkem);
+  nettle_mpz_get_str_256 (2, id, id_conv);
+  mpz_clear (id_conv);
+
+  memcpy (labeled_ikm + labeled_ikm_offset, "KEM", 3);
+  labeled_ikm_offset += 3;
+  memcpy (labeled_ikm + labeled_ikm_offset, id, 2);
+  labeled_ikm_offset += 2;
+
+  memcpy (labeled_ikm + labeled_ikm_offset, label, label_len);
+  labeled_ikm_offset += label_len;
+  memcpy (labeled_ikm + labeled_ikm_offset, ikm, ikm_len);
+
+  TMP_DECL_ALIGN (ctx, hmac_s->context_size);
+  TMP_ALLOC_ALIGN (ctx, hmac_s->context_size);
+  if (dhkem->dhkem == HPKE_DHKEM_P256)
+    hmac_sha256_set_key (ctx, salt_len, salt);
+  else
+    hmac_sha512_set_key (ctx, salt_len, salt);
+  dst = gmp_alloc (hmac_s->digest_size);
+  if (!dst)
+    return NULL;
+  hkdf_extract (ctx,
+                hmac_s->update,
+                hmac_s->digest,
+                hmac_s->digest_size,
+                labeled_ikm_len,
+                labeled_ikm,
+                dst);
+
+  return dst;
+}
+
+uint8_t *
+_nettle_labeled_expand_kem (uint8_t *prk, char *label,
+                            uint8_t *info, size_t info_len, uint16_t l,
+                            const struct hpke_dhkem *dhkem)
+{
+  uint8_t id[2];
+  uint8_t *dst;
+  mpz_t id_conv;
+
+  size_t labeled_info_offset = 2;
+  const size_t label_len = strlen(label);
+  const size_t labeled_info_len = 2 + HPKE_RFC_NUM_LEN + 5
+                                  + label_len + info_len;
+  const struct nettle_mac *hmac_s = dhkem->hmac;
+
+  TMP_DECL (labeled_info, uint8_t, labeled_info_len);
+  TMP_ALLOC (labeled_info, labeled_info_len);
+  dst = gmp_alloc (l);
+  if (!dst)
+    return NULL;
+
+  mpz_init_set_ui (id_conv, l);
+  nettle_mpz_get_str_256 (2, id, id_conv);
+  mpz_clear (id_conv);
+
+  memcpy (labeled_info, id, 2);
+  memcpy (labeled_info + labeled_info_offset, HPKE_RFC_NUM, HPKE_RFC_NUM_LEN);
+  labeled_info_offset += HPKE_RFC_NUM_LEN;
+  mpz_init_set_ui (id_conv, dhkem->dhkem);
+  nettle_mpz_get_str_256 (2, id, id_conv);
+  mpz_clear (id_conv);
+
+  memcpy (labeled_info + labeled_info_offset, "KEM", 3);
+  labeled_info_offset += 3;
+  memcpy (labeled_info + labeled_info_offset, id, 2);
+  labeled_info_offset += 2;
+
+  memcpy (labeled_info + labeled_info_offset, label, label_len);
+  labeled_info_offset += label_len;
+  memcpy (labeled_info + labeled_info_offset, info, info_len);
+
+  TMP_DECL_ALIGN (ctx, hmac_s->context_size);
+  TMP_ALLOC_ALIGN (ctx, hmac_s->context_size);
+  if (prk != NULL)
+    hmac_s->set_key (ctx, prk);
+  hkdf_expand (ctx,
+               hmac_s->update,
+               hmac_s->digest,
+               hmac_s->digest_size,
+               labeled_info_len,
+               labeled_info,
+               l,
+               dst);
+
+  return dst;
+}
+
+uint8_t *
+_nettle_extract_and_expand_kem (uint8_t *dh, size_t dh_len,
+                                uint8_t *kem_context, size_t kem_context_len,
+                                const struct hpke_dhkem *dhkem)
+{
+  uint8_t *eae_prk;
+  uint8_t *ret;
+
+  eae_prk = _nettle_labeled_extract_kem (NULL, 0, "eae_prk",
+                                         dh, dh_len, dhkem);
+  ret = _nettle_labeled_expand_kem (eae_prk, "shared_secret", kem_context,
+                                    kem_context_len, dhkem->Nsecret,
+                                    dhkem);
+  free (eae_prk);
+
+  return ret;
+}
diff --git a/hpke-hkdf-sha256.c b/hpke-hkdf-sha256.c
new file mode 100644
index 0000000000000000000000000000000000000000..8b3357b57e62c40798b21a80152be1c3eae03481
--- /dev/null
+++ b/hpke-hkdf-sha256.c
@@ -0,0 +1,45 @@
+/* hpke-hkdf-sha256.c
+
+   Copyright (C) 2022 Red Hat, Inc.
+
+   Author: Norbert Pócs
+
+   This file is part of GNU Nettle.
+
+   GNU Nettle is free software: you can redistribute it and/or
+   modify it under the terms of either:
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at your
+       option) any later version.
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at your
+       option) any later version.
+
+   or both in parallel, as here.
+
+   GNU Nettle is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see http://www.gnu.org/licenses/.
+*/
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "hpke-internal.h"
+
+const struct hpke_hkdf nettle_hpke_hkdf_sha256 = 
+  {
+    HPKE_HKDF_SHA256,
+    32,
+    &nettle_hmac_sha256,
+  };
diff --git a/hpke-hkdf.c b/hpke-hkdf.c
new file mode 100644
index 0000000000000000000000000000000000000000..803e7b7830222dc45a1c6e31d96c9f2b60af9166
--- /dev/null
+++ b/hpke-hkdf.c
@@ -0,0 +1,112 @@
+/* hpke-hkdf.h
+
+   HKDF for P and X curves.
+
+   Copyright (C) 2022 Red Hat, Inc.
+
+   Author: Norbert Pócs
+
+   This file is part of GNU Nettle.
+
+   GNU Nettle is free software: you can redistribute it and/or
+   modify it under the terms of either:
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at your
+       option) any later version.
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at your
+       option) any later version.
+
+   or both in parallel, as here.
+
+   GNU Nettle is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see http://www.gnu.org/licenses/.
+*/
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdlib.h>
+
+#include "hpke-internal.h"
+#include "hpke.h"
+
+#include "gmp-glue.h"
+
+int
+_nettle_derive_key_pair_p (uint8_t *ikm, size_t ikm_len,
+                           const struct hpke_dhkem *dhkem,
+                           struct ecc_scalar *sk, struct ecc_point *pk)
+{
+  int r = 1, counter = 0;
+  uint8_t *dkp_prk = NULL, *bytes = NULL;
+  mpz_t z, t;
+
+  mpz_init (z);
+
+  dkp_prk = _nettle_labeled_extract_kem (NULL, 0, "dkp_prk", ikm, ikm_len,
+                                         dhkem);
+  if (!dkp_prk)
+    {
+      r = 0;
+      goto out;
+    }
+  while (mpz_cmp_ui (z, 0) == 0 ||
+         mpz_cmp (z, mpz_roinit_n(t,
+                                  dhkem->ecc->q.m,
+                                  dhkem->ecc->p.size)) != -1)
+    {
+      if (counter > 255)
+        {
+          r = 0;
+          goto out;
+        }
+      uint8_t counter_oct[1];
+      nettle_mpz_get_str_256 (1, counter_oct, z);
+      bytes = _nettle_labeled_expand_kem (dkp_prk,
+                                          "candidate",
+                                          counter_oct,
+                                          1,
+                                          dhkem->nsk,
+                                          dhkem);
+      if (!bytes)
+        {
+          r = 0;
+          goto out;
+        }
+        bytes[0] &= dhkem->byte_mask;
+      /*
+       * keeping this here as a note when other algos
+       * will be added
+      if (dhkem->dhkem == HPKE_DHKEM_P256)
+        bytes[0] &= 0xff;
+      else
+        bytes[0] &= 0x01;
+      */
+
+      nettle_mpz_set_str_256_u (z, dhkem->nsk, bytes);
+      counter++;
+      free (bytes);
+    }
+
+  ecc_scalar_set (sk, z);
+
+  ecc_point_mul_g (pk, sk);
+
+out:
+  free (dkp_prk);
+  mpz_clear (z);
+
+  return r;
+}
diff --git a/hpke-internal.h b/hpke-internal.h
new file mode 100644
index 0000000000000000000000000000000000000000..0911962840bd66259defdabadd238902f6e90936
--- /dev/null
+++ b/hpke-internal.h
@@ -0,0 +1,173 @@
+/* hpke-internal.h
+
+   HPKE private functions.
+
+   Copyright (C) 2022 Red Hat, Inc.
+
+   Author: Norbert Pócs
+
+   This file is part of GNU Nettle.
+
+   GNU Nettle is free software: you can redistribute it and/or
+   modify it under the terms of either:
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at your
+       option) any later version.
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at your
+       option) any later version.
+
+   or both in parallel, as here.
+
+   GNU Nettle is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef __HPKE_INTERNAL__
+#define __HPKE_INTERNAL__
+
+#include <stdint.h>
+
+#include "ecc.h"
+#include "nettle-meta.h"
+#include "ecc-internal.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define HPKE_RFC_NUM      "HPKE-v1"
+#define HPKE_RFC_NUM_LEN  7
+#define HPKE_AEAD_NN      12
+#define HPKE_NSK_MAX      66
+
+struct hpke_dhkem;
+
+typedef int nettle_hpke_encap_helper (const struct hpke_dhkem *dhkem,
+                                      uint8_t *pkr, size_t pkr_len,
+                                      uint8_t **dh_ser, size_t *dh_ser_len,
+                                      uint8_t **enc, size_t *enc_len,
+                                      uint8_t *entropy);
+
+typedef int nettle_hpke_decap_helper (const struct hpke_dhkem *dhkem,
+                                      uint8_t *enc, size_t enc_len,
+                                      uint8_t *skr, size_t skr_len,
+                                      uint8_t **dh_ser, size_t *dh_ser_len);
+
+enum hpke_mode_e {  
+  HPKE_MODE_BASE=0,
+  HPKE_MODE_PSK=1,
+  HPKE_MODE_AUTH,
+  HPKE_MODE_AUTH_PSK,
+};
+
+enum hpke_hkdf_e {
+  HPKE_HKDF_SHA256=1,
+  HPKE_HKDF_SHA384,
+  HPKE_HKDF_SHA512,
+};
+
+enum hpke_aead_e {
+  HPKE_AEAD_AES_128_GCM=1,
+  HPKE_AEAD_AES_256_GCM,
+  HPKE_AEAD_CHACHA20POLY1305,
+  HPKE_AEAD_EXPORT_ONLY=0xffff,
+};
+
+enum hpke_dhkem_e {
+  HPKE_DHKEM_P256=0x0010,
+  HPKE_DHKEM_P384=0x0011,
+  HPKE_DHKEM_P521=0x0012,
+  HPKE_DHKEM_X25519=0x0020,
+  HPKE_DHKEM_X448=0x0021,
+};
+
+struct hpke_dhkem
+{
+  enum hpke_dhkem_e dhkem;
+  uint8_t Nsecret;
+  uint8_t nsk;
+  uint8_t byte_mask;
+  const struct ecc_curve *ecc;
+  const struct nettle_mac *hmac;
+  nettle_hpke_encap_helper *encap;
+  nettle_hpke_decap_helper *decap;
+  void (*mul)(uint8_t *q, const uint8_t *n, const uint8_t *p);
+  void (*mul_g)(uint8_t *q, const uint8_t *n);
+};
+
+struct hpke_hkdf
+{
+  enum hpke_hkdf_e hkdf;
+  uint8_t nh;
+  const struct nettle_mac *hmac;
+};
+
+struct hpke_aead
+{
+  enum hpke_aead_e aead;
+  uint8_t nk;
+  const struct nettle_aead *alg;
+};
+
+int
+_nettle_ecc_point_to_octet (uint8_t **s, size_t *s_len, struct ecc_point *p,
+                            const struct hpke_dhkem *dhkem);
+
+int
+_nettle_octet_to_ecc_point (struct ecc_point *p, uint8_t *s, size_t s_len);
+
+/* the sizes of the outputs of extract and expand functions are
+ * dependent on the digest size */
+uint8_t *
+_nettle_labeled_extract_kem (uint8_t *salt, size_t salt_len, char *label,
+                             uint8_t *ikm, size_t ikm_len,
+                             const struct hpke_dhkem *dhkem);
+
+uint8_t *
+_nettle_labeled_expand_kem (uint8_t *prk, char *label,
+                            uint8_t *info, size_t info_len, uint16_t l,
+                            const struct hpke_dhkem *dhkem);
+
+uint8_t *
+_nettle_extract_and_expand_kem (uint8_t *dh, size_t dh_len,
+                                uint8_t *kem_context, size_t kem_context_len,
+                                const struct hpke_dhkem *dhkem);
+
+uint8_t *
+_nettle_labeled_extract_hpke (uint8_t *salt, size_t salt_len, char *label,
+                              uint8_t *ikm, size_t ikm_len,
+                              const struct hpke_dhkem *dhkem,
+                              const struct hpke_hkdf *hkdf,
+                              const struct hpke_aead *aead);
+
+uint8_t *
+_nettle_labeled_expand_hpke (uint8_t *prk, char *label,
+                             uint8_t *info, size_t info_len, uint16_t l,
+                             const struct hpke_dhkem *dhkem,
+                             const struct hpke_hkdf *hkdf,
+                             const struct hpke_aead *aead);
+
+int
+_nettle_derive_key_pair_p (uint8_t *ikm, size_t ikm_len,
+                           const struct hpke_dhkem *dhkem,
+                           struct ecc_scalar *sk, struct ecc_point *pk);
+
+nettle_hpke_encap_helper _nettle_hpke_encap_prime;
+nettle_hpke_decap_helper _nettle_hpke_decap_prime;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __HPKE_INTERNAL__ */
diff --git a/hpke-types.c b/hpke-types.c
new file mode 100644
index 0000000000000000000000000000000000000000..25f1898012d7752a6916a44a8c648402c48219b1
--- /dev/null
+++ b/hpke-types.c
@@ -0,0 +1,111 @@
+/* hpke-types.h
+
+   Helper and context functions.
+
+   Copyright (C) 2022 Red Hat, Inc.
+
+   Author: Norbert Pócs
+
+   This file is part of GNU Nettle.
+
+   GNU Nettle is free software: you can redistribute it and/or
+   modify it under the terms of either:
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at your
+       option) any later version.
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at your
+       option) any later version.
+
+   or both in parallel, as here.
+
+   GNU Nettle is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see http://www.gnu.org/licenses/.
+*/
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "hpke-internal.h"
+#include "hpke.h"
+
+#include <stdint.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "gmp-glue.h"
+
+#include "hmac.h"
+#include "ecc.h"
+#include "ecc-internal.h"
+#include "ecc-curve.h"
+#include "curve25519.h"
+#include "curve448.h"
+
+int
+_nettle_ecc_point_to_octet (uint8_t **s, size_t *s_len, struct ecc_point *p,
+                            const struct hpke_dhkem *dhkem)
+{
+  if (!*p->p)
+    {
+      *s = gmp_alloc (1);
+      **s = 0x00;
+      return 1;
+    }
+  size_t bit_size = (ecc_bit_size(dhkem->ecc) + 7) / 8;
+
+  mpz_t x,y;
+  mpz_init (x);
+  mpz_init (y);
+  ecc_point_get (p, x, y);
+
+  *s_len = 2*bit_size+1;
+  *s = gmp_alloc (*s_len);
+  if (!*s)
+    return 0;
+  **s = 0x04;
+
+  nettle_mpz_get_str_256 (bit_size, (*s)+1, x);
+  nettle_mpz_get_str_256 (bit_size, (*s)+1+bit_size, y);
+
+  mpz_clear (x);
+  mpz_clear (y);
+
+  return 1;
+}
+
+int
+_nettle_octet_to_ecc_point (struct ecc_point *p, uint8_t *s, size_t s_len)
+{
+  mpz_t x, y;
+  int r = 1;
+
+  mpz_init (x);
+  mpz_init (y);
+
+  if (!s[0])
+    r = ecc_point_set (p, x, y);
+  else if (s[0] == 0x04)
+    {
+      unsigned bit_size = ((s_len-1)/2);
+      nettle_mpz_set_str_256_u (x, bit_size, s+1);
+      nettle_mpz_set_str_256_u (y, bit_size, s+1+bit_size);
+      r = ecc_point_set (p, x, y);
+    }
+
+  mpz_clear (x);
+  mpz_clear (y);
+
+  return r;
+}
diff --git a/hpke.c b/hpke.c
new file mode 100644
index 0000000000000000000000000000000000000000..24f2405a3e03fd9f7df8f1ecea19b0d5128bcc69
--- /dev/null
+++ b/hpke.c
@@ -0,0 +1,322 @@
+/* hpke.h
+
+   Main HPKE workflow.
+
+   Copyright (C) 2022 Red Hat, Inc.
+
+   Author: Norbert Pócs
+
+   This file is part of GNU Nettle.
+
+   GNU Nettle is free software: you can redistribute it and/or
+   modify it under the terms of either:
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at your
+       option) any later version.
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at your
+       option) any later version.
+
+   or both in parallel, as here.
+
+   GNU Nettle is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see http://www.gnu.org/licenses/.
+*/
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+#include "hpke.h"
+
+#include "gmp-glue.h"
+#include "nettle-internal.h"
+#include "memxor.h"
+#include "gcm.h"
+#include "chacha-poly1305.h"
+#include "sha2.h"
+
+// FIXME remove later
+#define HPKE_SKIP_NON_BASIC
+
+int
+hpke_key_schedule (uint8_t *psk, size_t psk_len,
+                   uint8_t *psk_id, size_t psk_id_len,
+                   uint8_t *info, size_t info_len,
+                   uint8_t *shared_secret,
+                   const struct hpke_dhkem *dhkem,
+                   const struct hpke_hkdf *hkdf,
+                   const struct hpke_aead *aead,
+                   enum hpke_mode_e mode,
+                   uint8_t **key,
+                   uint8_t **base_nonce,
+                   uint8_t **exporter_secret)
+{
+  uint8_t *psk_id_hash = NULL, *info_hash = NULL, *secret = NULL;
+  int r;
+
+  psk_id_hash = _nettle_labeled_extract_hpke (NULL,
+                                              0,
+                                              "psk_id_hash",
+                                              psk_id,
+                                              psk_id_len,
+                                              dhkem,
+                                              hkdf,
+                                              aead);
+  if (!psk_id_hash)
+    return 0;
+  info_hash = _nettle_labeled_extract_hpke (NULL,
+                                            0,
+                                            "info_hash",
+                                            info,
+                                            info_len,
+                                            dhkem,
+                                            hkdf,
+                                            aead);
+  if (!info_hash)
+    return 0;
+
+  const size_t key_schedule_cnt_len = 2*(hkdf->hmac->digest_size)+1;
+
+  TMP_DECL (key_schedule_cnt, uint8_t, key_schedule_cnt_len);
+  TMP_ALLOC (key_schedule_cnt, key_schedule_cnt_len);
+  *key_schedule_cnt = mode;
+  memcpy (key_schedule_cnt+1, psk_id_hash, hkdf->hmac->digest_size);
+  memcpy (key_schedule_cnt+1+hkdf->hmac->digest_size, info_hash,
+          hkdf->hmac->digest_size);
+
+  secret = _nettle_labeled_extract_hpke (shared_secret,
+                                         hkdf->nh,
+                                         "secret",
+                                         psk,
+                                         psk_len,
+                                         dhkem,
+                                         hkdf,
+                                         aead);
+  if (!secret)
+    return 0;
+
+  if (aead->aead != HPKE_AEAD_EXPORT_ONLY)
+    {
+      *key = _nettle_labeled_expand_hpke (secret,
+                                         "key",
+                                         key_schedule_cnt,
+                                         key_schedule_cnt_len,
+                                         aead->nk,
+                                         dhkem,
+                                         hkdf,
+                                         aead);
+      if (!key)
+        return 0;
+
+      *base_nonce = _nettle_labeled_expand_hpke (secret,
+                                                "base_nonce",
+                                                key_schedule_cnt,
+                                                key_schedule_cnt_len,
+                                                HPKE_AEAD_NN,
+                                                dhkem,
+                                                hkdf,
+                                                aead);
+      if (!base_nonce)
+        {
+          free (key);
+          key = NULL;
+          return 0;
+        }
+    }
+
+  *exporter_secret = _nettle_labeled_expand_hpke (secret,
+                                                 "exp",
+                                                 key_schedule_cnt,
+                                                 key_schedule_cnt_len,
+                                                 hkdf->nh,
+                                                 dhkem,
+                                                 hkdf,
+                                                 aead);
+  if (!exporter_secret)
+    {
+      free (key);
+      free (base_nonce);
+      key = NULL;
+      base_nonce = NULL;
+      return 0;
+    }
+
+  free (psk_id_hash);
+  free (info_hash);
+
+  return r;
+}
+
+#ifndef HPKE_SKIP_NON_BASIC
+// TODO maybe these setup functions can be emitted and shown as example
+int
+hpke_setup_base_s (uint8_t *pkr, size_t pkr_len, uint8_t **enc,
+                   size_t *enc_len, uint8_t *info,
+                   size_t info_len, void *random_ctx,
+                   nettle_random_func *random,
+                   const struct hpke_dhkem *dhkem,
+                   const struct hpke_hkdf *hkdf,
+                   const struct hpke_aead *aead,
+                   uint8_t **key, uint8_t **base_nonce,
+                   uint8_t **exporter_secret)
+{
+  int r;
+  uint8_t *shared_secret = NULL;
+
+  r = nettle_hpke_encap (pkr, pkr_len, enc, enc_len,
+                         &shared_secret, dhkem, random_ctx, random);
+  if (!r)
+    return r;
+
+  r = hpke_key_schedule (NULL, 0,
+                         NULL, 0,
+                         info, info_len,
+                         shared_secret,
+                         dhkem, hkdf, aead,
+                         HPKE_MODE_BASE,
+                         key, base_nonce, exporter_secret);
+  free (shared_secret);
+  return r;
+}
+
+int
+hpke_setup_base_r (uint8_t *enc, size_t enc_len, uint8_t *pkr, size_t pkr_len,
+                   uint8_t *skr, size_t skr_len, uint8_t *info,
+                   size_t info_len, const struct hpke_dhkem *dhkem,
+                   const struct hpke_hkdf *hkdf, const struct hpke_aead *aead,
+                   uint8_t **key, uint8_t **base_nonce,
+                   uint8_t **exporter_secret)
+{
+  int r;
+  uint8_t *shared_secret = NULL;
+
+  r = nettle_hpke_decap (enc, enc_len, pkr, pkr_len,
+                         skr, skr_len, dhkem, &shared_secret);
+  if (!r)
+    return r;
+
+  r = hpke_key_schedule (NULL, 0,
+                         NULL, 0,
+                         info, info_len,
+                         shared_secret,
+                         dhkem, hkdf, aead,
+                         HPKE_MODE_BASE,
+                         key, base_nonce, exporter_secret);
+  
+  free (shared_secret);
+  return r;
+}
+#endif /* HPKE_SKIP_NON_BASIC */
+
+int
+hpke_seal (uint8_t *aad, size_t aad_len, uint8_t *pt,
+           size_t pt_len, uint8_t **ct, size_t *ct_len,
+           const struct hpke_aead *aead, uint8_t *key,
+           uint8_t *base_nonce, uint64_t *seq_n)
+{
+  if (aead->aead == HPKE_AEAD_EXPORT_ONLY)
+    return -1;
+  uint8_t seq_octet[HPKE_AEAD_NN] = {0};
+  uint8_t nonce[HPKE_AEAD_NN];
+  mpz_t seq;
+  const struct nettle_aead *n_aead = aead->alg;
+
+  mpz_init_set_ui (seq, *seq_n);
+  nettle_mpz_get_str_256 (HPKE_AEAD_NN, seq_octet, seq);
+  mpz_clear (seq);
+
+  memxor3 (nonce, base_nonce, seq_octet, HPKE_AEAD_NN);
+
+  *ct_len = pt_len + n_aead->digest_size;
+  *ct = gmp_alloc (*ct_len);
+
+  TMP_DECL_ALIGN (c, n_aead->context_size);
+  TMP_ALLOC_ALIGN (c, n_aead->context_size);
+  n_aead->set_encrypt_key (c, key);
+  n_aead->set_nonce (c, nonce);
+  n_aead->update (c, aad_len, aad);
+  n_aead->encrypt (c, pt_len, *ct, pt);
+  n_aead->digest (c, n_aead->digest_size, (*ct)+pt_len);
+
+  ++*seq_n;
+
+  return 1;
+}
+
+int
+hpke_open (uint8_t *aad, size_t aad_len, uint8_t *ct,
+           size_t ct_len, uint8_t **pt, size_t *pt_len,
+           const struct hpke_aead *aead, uint8_t *key,
+           uint8_t *base_nonce, uint64_t *seq_n)
+{
+  if (aead->aead == HPKE_AEAD_EXPORT_ONLY)
+    return 0;
+  int r;
+  uint8_t seq_octet[HPKE_AEAD_NN] = {0};
+  uint8_t nonce[HPKE_AEAD_NN];
+  uint8_t tag[GCM_DIGEST_SIZE];
+  mpz_t seq;
+  const struct nettle_aead *n_aead = aead->alg;
+
+  mpz_init_set_ui (seq, *seq_n);
+  nettle_mpz_get_str_256 (HPKE_AEAD_NN, seq_octet, seq);
+  mpz_clear (seq);
+
+  memxor3 (nonce, base_nonce, seq_octet, HPKE_AEAD_NN);
+
+  *pt_len = ct_len - n_aead->digest_size;
+  *pt = gmp_alloc (*pt_len);
+
+  TMP_DECL_ALIGN (c, n_aead->context_size);
+  TMP_ALLOC_ALIGN (c, n_aead->context_size);
+  n_aead->set_decrypt_key (c, key);
+  n_aead->set_nonce (c, nonce);
+  n_aead->update (c, aad_len, aad);
+  n_aead->decrypt (c, ct_len-n_aead->digest_size, *pt, ct);
+  n_aead->digest (c, n_aead->digest_size, tag);
+
+  memxor (tag, ct+(ct_len - n_aead->digest_size), n_aead->digest_size);
+  int tag_cmp = 0;
+  for (int i = 0; i < n_aead->digest_size; i++)
+    tag_cmp += tag[i];
+  r = tag_cmp == 0;
+
+  ++*seq_n;
+
+  return !r;
+}
+
+uint8_t *
+hpke_export_secret (const struct hpke_dhkem *dhkem,
+                    const struct hpke_hkdf *hkdf,
+                    const struct hpke_aead *aead,
+                    uint8_t *exporter_secret, uint8_t *exporter_context,
+                    size_t exporter_context_len, size_t l)
+{
+  if (l > 255 * hkdf->nh)
+    return NULL;
+
+  return _nettle_labeled_expand_hpke (exporter_secret,
+                                      "sec",
+                                      exporter_context,
+                                      exporter_context_len,
+                                      l,
+                                      dhkem,
+                                      hkdf,
+                                      aead);
+}
diff --git a/hpke.h b/hpke.h
new file mode 100644
index 0000000000000000000000000000000000000000..1f893c1247d48bcb5054a55497ea9f6c4c2fbf3b
--- /dev/null
+++ b/hpke.h
@@ -0,0 +1,121 @@
+/* hpke.h
+
+   HPKE public functions.
+
+   Copyright (C) 2022 Red Hat, Inc.
+
+   Author: Norbert Pócs
+
+   This file is part of GNU Nettle.
+
+   GNU Nettle is free software: you can redistribute it and/or
+   modify it under the terms of either:
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at your
+       option) any later version.
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at your
+       option) any later version.
+
+   or both in parallel, as here.
+
+   GNU Nettle is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef __HPKE_HPKE_H__
+#define __HPKE_HPKE_H__
+
+#include <stdint.h>
+
+#include "ecc.h"
+#include "hpke-internal.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Name mangling */
+#define hpke_setup_base_s nettle_hpke_setup_base_s
+#define hpke_setup_base_r nettle_hpke_setup_base_r
+#define hpke_encap nettle_hpke_encap
+#define hpke_decap nettle_hpke_decap
+#define hpke_seal nettle_hpke_seal
+#define hpke_open nettle_hpke_open
+#define hpke_export_secret nettle_hpke_export_secret
+#define hpke_key_schedule nettle_hpke_key_schedule
+
+extern const struct hpke_dhkem nettle_hpke_dhkem_p256;
+
+extern const struct hpke_hkdf nettle_hpke_hkdf_sha256;
+
+extern const struct hpke_aead nettle_hpke_aead_aes128;
+extern const struct hpke_aead nettle_hpke_aead_export;
+
+enum hpke_mode_e;
+
+int
+hpke_encap (uint8_t *pkr, size_t pkr_len,
+            uint8_t **enc, size_t *enc_len,
+            uint8_t **shared_secret,
+            const struct hpke_dhkem *dhkem,
+            void *random_ctx, nettle_random_func *random);
+
+int
+hpke_decap (uint8_t *enc, size_t enc_len, uint8_t *pkr, size_t pkr_len,
+            uint8_t *skr, size_t skr_len, const struct hpke_dhkem *dhkem,
+            uint8_t **shared_secret);
+
+/*
+ * lengths:
+ * key - aead->nk
+ * base_nonce - HPKE_AEAD_NN
+ * exporter_secret - hkdf->nh
+ */
+int
+hpke_key_schedule (uint8_t *psk, size_t psk_len,
+                   uint8_t *psk_id, size_t psk_id_len,
+                   uint8_t *info, size_t info_len,
+                   uint8_t *shared_secret,
+                   const struct hpke_dhkem *dhkem,
+                   const struct hpke_hkdf *hkdf,
+                   const struct hpke_aead *aead,
+                   enum hpke_mode_e mode,
+                   uint8_t **key,
+                   uint8_t **base_nonce,
+                   uint8_t **exporter_secret);
+
+int
+hpke_seal (uint8_t *aad, size_t aad_len, uint8_t *pt,
+           size_t pt_len, uint8_t **ct, size_t *ct_len,
+           const struct hpke_aead *aead, uint8_t *key,
+           uint8_t *base_nonce, uint64_t *seq_n);
+
+int
+hpke_open (uint8_t *aad, size_t aad_len, uint8_t *ct,
+           size_t ct_len, uint8_t **pt, size_t *pt_len,
+           const struct hpke_aead *aead, uint8_t *key,
+           uint8_t *base_nonce, uint64_t *seq_n);
+
+uint8_t *
+hpke_export_secret (const struct hpke_dhkem *dhkem,
+                    const struct hpke_hkdf *hkdf,
+                    const struct hpke_aead *aead,
+                    uint8_t *exporter_secret, uint8_t *exporter_context,
+                    size_t exporter_context_len, size_t l);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __HPKE_HPKE_H__ */
diff --git a/nettle.texinfo b/nettle.texinfo
index 3d1626f36180add8217dfe0e72b91d9dbd91c653..c7caa676979cc6c3993985e7fbed2e9199b32b9b 100644
--- a/nettle.texinfo
+++ b/nettle.texinfo
@@ -139,6 +139,7 @@ Public-key algorithms
 * RSA::                         The RSA public key algorithm.
 * DSA::                         The DSA digital signature algorithm.
 * Elliptic curves::             Elliptic curves and ECDSA
+* HPKE::                        Hybrid Public Key Encryption scheme
 
 Elliptic curves
 
@@ -4884,6 +4885,7 @@ key, and to no others''.
 * RSA::                         The RSA public key algorithm.
 * DSA::                         The DSA digital signature algorithm.
 * Elliptic curves::             Elliptic curves and ECDSA
+* HPKE::                        Hybrid Public Key Encryption scheme
 @end menu
 
 @node RSA
@@ -5976,6 +5978,87 @@ Verifies a message using the provided public key. Returns 1 if the
 signature is valid, otherwise 0.
 @end deftypefun
 
+@node HPKE
+@subsection @acronym{HPKE}
+Hybrid public key encryption scheme is combining symmetric and
+asymmetric algorithms to create encapsulation with the approach: "generate the
+symmetric key and its encapsulation with the public key". The scheme is described in RFC9180.
+
+HPKE consists of three building blocks: @acronym{HKDF} for key derivation, DHKEM - a
+diffie-hellman key encapsulation method and @acronym{AEAD} for encryption. Each one
+supports a list of algorithms, which can be used independently of each other to
+create an encryption context, then the context can be used for encrypted one-way communication.
+
+Provides 3 authenticated variants: base mode, authentication using a pre-shared key, an
+asymmetric key and using both pre-shared and asymmetric key.
+
+HPKE supports single message and multi message communication too.
+
+@deftp {Context struct} {hpke_ctx}
+@end deftp
+
+@deftypefun void hpke_ctx_init (struct hpke_ctx *@var{c}, const struct hpke_dhkem @var{dhkem}, const struct hpke_hkdf @var{hkdf}, const struct hpke_aead @var{aead}, enum hpke_mode_e @var{mode})
+Inits the context based upon the provided algorithms by the given algorithms and mode.
+@end deftypefun
+
+@deftypefun void hpke_ctx_clear (struct hpke_ctx *@var{c})
+Deallocates the context.
+@end deftypefun
+
+@deftypefun int hpke_setup_base_s (uint8_t *@var{pkr}, size_t @var{pkr_len}, uint8_t *@var{info}, size_t @var{info_len}, struct hpke_ctx *@var{h_ctx}, void *@var{random_ctx}, nettle_random_func *@var{random})
+Creates and sets up the context (@var{h_ctx}) used for encryption and decryption for the Sender. To set up the context,
+some data is needed: public key of the Receiver, application-supplied information (optional), random function for key generation.
+This function generates internally an ephemeral key pair used only for the setup of the context. This context works in Base mode of hpke.
+@end deftypefun
+
+@deftypefun int hpke_setup_base_r (uint8_t *@var{enc}, size_t @var{enc_len}, uint8_t *@var{pkr}, size_t @var{pkr_len}, uint8_t *@var{skr}, size_t @var{skr_len}, uint8_t *@var{info}, size_t @var{info_len}, struct hpke_ctx *@var{h_ctx})
+Creates and sets up the context (@var{h_ctx}) used for encryption and decryption for the Receiver. To set up the context,
+some data is needed: The ephemeral public key generated by the Sender, the public and private key
+of the Receiver, application-supplied information (optional). This context works in Base mode of hpke.
+@end deftypefun
+
+@deftypefun int hpke_setup_psk_s (uint8_t *@var{pkr}, size_t @var{pkr_len}, uint8_t *@var{info}, size_t @var{info_len}, uint8_t *@var{psk}, size_t @var{psk_len}, uint8_t *@var{psk_id}, size_t @var{psk_id_len}, struct hpke_ctx *@var{h_ctx}, void *@var{random_ctx}, nettle_random_func *@var{random})
+Same as @code{hpke_setup_base_s} with the difference that it creates a context which works in Psk mode. This mode
+authenticates with a symmetric pre-shared key. @var{psk_id} is used to determine which PSK to use.
+@end deftypefun
+
+@deftypefun int hpke_setup_psk_r (uint8_t *@var{enc}, size_t @var{enc_len}, uint8_t *@var{pkr}, size_t @var{pkr_len}, uint8_t *@var{skr}, size_t @var{skr_len}, uint8_t *@var{info}, size_t @var{info_len}, uint8_t *@var{psk}, size_t @var{psk_len}, uint8_t *@var{psk_id}, size_t @var{psk_id_len}, struct hpke_ctx *@var{h_ctx})
+Same as @code{hpke_setup_base_r} with the difference that it creates a context wich works in Psk mode. This mode
+authenticates with a symmetric pre-shared key. @var{psk_id} is used to determine which PSK to use.
+@end deftypefun
+
+@deftypefun int hpke_setup_auth_s (uint8_t *@var{pkr}, size_t @var{pkr_len}, uint8_t *@var{pks}, size_t @var{pks_len}, uint8_t *@var{sks}, size_t @var{sks_len}, uint8_t *@var{info}, size_t @var{info_len}, struct hpke_ctx *@var{h_ctx}, void *@var{random_ctx}, nettle_random_func *@var{random})
+Same as @code{hpke_setup_base_s} with the difference that it creates a context which works in Auth mode. This mode
+authenticates with an assymmetric key.
+@end deftypefun
+
+@deftypefun int hpke_setup_auth_r (uint8_t *@var{enc}, size_t @var{enc_len}, uint8_t *@var{pks}, size_t @var{pks_len}, uint8_t *@var{pkr}, size_t @var{pkr_len}, uint8_t *@var{skr}, size_t @var{skr_len}, uint8_t *@var{info}, size_t @var{info_len}, struct hpke_ctx *@var{h_ctx})
+Same as @code{hpke_setup_base_r} with the difference that it creates a context wich works in Auth mode. This mode
+authenticates with an asymmetric key.
+@end deftypefun
+
+@deftypefun int hpke_setup_auth_psk_s (uint8_t *@var{pkr}, size_t @var{pkr_len}, uint8_t *@var{pks}, size_t @var{pks_len}, uint8_t *@var{sks}, size_t @var{sks_len}, uint8_t *@var{psk}, size_t @var{psk_len}, uint8_t *@var{psk_id}, size_t @var{psk_id_len}, uint8_t *@var{info}, size_t @var{info_len}, struct hpke_ctx *@var{h_ctx}, void *@var{random_ctx}, nettle_random_func *@var{random})
+Same as @code{hpke_setup_base_s} with the difference that this function creates a context which works in AuthPsk mode. This combines both authentication with a pre-shared symmetric key and an assymmetric key.
+@end deftypefun
+
+@deftypefun int hpke_setup_auth_psk_r (uint8_t *@var{enc}, size_t @var{enc_len}, uint8_t *@var{pks}, size_t @var{pks_len}, uint8_t *@var{pkr}, size_t @var{pkr_len}, uint8_t *@var{skr}, size_t @var{skr_len}, uint8_t *@var{psk}, size_t @var{psk_len}, uint8_t *@var{psk_id}, size_t @var{psk_id_len}, uint8_t *@var{info}, size_t @var{info_len}, struct hpke_ctx *@var{h_ctx})
+Same as @code{hpke_setup_base_r} with the difference that this function creates a context which works in AuthPsk mode. This combines both authentication with a pre-shared symmetric key and an assymmetric key.
+@end deftypefun
+
+@deftypefun int hpke_seal (struct hpke_ctx @var{ctx}, uint8_t *@var{aad}, size_t @var{aad_len}, uint8_t *@var{pt}, size_t @var{pt_len}, uint8_t **@var{ct}, size_t *@var{ct_len})
+Encrypts a plaintext using an hpke context and an
+optional additional authenticated data into ciphertext.
+@end deftypefun
+
+@deftypefun int hpke_open (struct hpke_ctx @var{ctx}. uint8_t *@var{aad}, size_t @var{aad_len}, uint8_t *@var{ct}, size_t @var{ct_len}, uint8_t **@var{pt}, size_t *@var{pt_len})
+Decrypts a ciphertext using an hpke context and an optional additional
+authenticated data into plaintext.
+@end deftypefun
+
+@deftypefun uint8_t *hpke_export_secret (struct hpke_ctx *@var{h_ctx}, uint8_t *@var{exporter_context}, size_t @var{exporter_context_len}, size_t @var{l});
+Exports a secret derived from the internal secret of a desired @var{l} length. The max size of @var{l} is 255*Nh (Nh is defined by the hkdf in use). This function takes @var{exporter_context} as an input to the derivation.
+@end deftypefun
+
 @node Randomness
 @section Randomness
 
diff --git a/testsuite/.gitignore b/testsuite/.gitignore
index 3fa9b0b1cd15a165a74214fdf2cef3bb76132b4a..9352fb12a272799eebe53be3b685222c483142a2 100644
--- a/testsuite/.gitignore
+++ b/testsuite/.gitignore
@@ -53,6 +53,7 @@
 /gosthash94-test
 /hkdf-test
 /hmac-test
+/hpke-test
 /knuth-lfib-test
 /md2-test
 /md4-test
diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in
index c4513005642a258ce613cbe45694edb417e0f76a..fb6e6418f8a80672e4c1aa64dc53fb426c6d23fb 100644
--- a/testsuite/Makefile.in
+++ b/testsuite/Makefile.in
@@ -56,7 +56,8 @@ TS_HOGWEED_SOURCES = sexp-test.c sexp-format-test.c \
 		     eddsa-compress-test.c eddsa-sign-test.c \
 		     eddsa-verify-test.c ed25519-test.c ed448-test.c \
 		     gostdsa-sign-test.c gostdsa-verify-test.c \
-		     gostdsa-keygen-test.c gostdsa-vko-test.c
+		     gostdsa-keygen-test.c gostdsa-vko-test.c \
+		     hpke-test.c
 
 TS_SOURCES = $(TS_NETTLE_SOURCES) $(TS_HOGWEED_SOURCES)
 CXX_SOURCES = cxx-test.cxx
diff --git a/testsuite/hpke-test.c b/testsuite/hpke-test.c
new file mode 100644
index 0000000000000000000000000000000000000000..1862cd2f695f67f7deb8a8b85f6fcdbc9443e76f
--- /dev/null
+++ b/testsuite/hpke-test.c
@@ -0,0 +1,4363 @@
+#include "testutils.h"
+
+#include <assert.h>
+#include <string.h>
+#include <sys/random.h>
+
+#include "hpke.h"
+#include "yarrow.h"
+#include "memxor.h"
+#include "curve25519.h"
+#include "curve448.h"
+
+#define HPKE_SKIP_NON_BASIC
+#define HPKE_FOR_REMOVAL
+
+struct data {
+  int mode, kem_id, kdf_id, aead_id, exporter_l;
+  const char *info, *pkr, *skr, *pke, *ske, *key, *base_nonce,
+        *exporter_secret, *psk, *psk_id, *pks, *sks, *shared_secret,
+        *ikme, *ikmr, *exporter_context, *exported_value;
+};
+
+struct encryption {
+  const char *aad, *ciphertext, *nonce;
+};
+
+int seal_open_i = 0;
+
+/* test vectors are from:
+ * https://github.com/cfrg/draft-irtf-cfrg-hpke/blob/5f503c564da00b0687b3de75f1dfbdfc4079ad31/test-vectors.json
+ */
+const struct data d[128] = 
+{
+  {
+    0, 32, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "3948cfe0ad1ddb695d780e59077195da6c56506b027329794ab02bca80815c4d",
+    "4612c550263fc8ad58375df3f557aac531d26850903e55a9f23f21d8534e8ac8",
+    "37fda3567bdbd628e88668c3c8d7e97d1d1253b6d4ea6d44c150f741f1bf4431",
+    "52c4a758a802cd8b936eceea314432798d5baf2d7e9235dc084ab1b9cfa2f736",
+    "4531685d41d65f03dc48f6b8302c05b0",
+    "56d890e5accaaf011cff4b7d",
+    "45ff1c2e220db587171952c0592d5f5ebe103f1561a2614e38f2ffd47e99e3f8",
+    NULL, NULL,
+    NULL, NULL,
+    "fe0e18c9f024ce43799ae393c7e8fe8fce9d218875e8227b0187c04e7d2ea1fc",
+    "7268600d403fce431561aef583ee1613527cff655c1343f29812e66706df3234",
+    "6db9df30aa07dd42ee5e8181afdb977e538f5e1fec8a06223f33f7013e525037",
+    "54657374436f6e74657874",
+    "e9e43065102c3836401bed8c3c3c75ae46be1639869391d62c61f1ec7af54931"
+  },
+  {
+    1, 32, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "9fed7e8c17387560e92cc6462a68049657246a09bfa8ade7aefe589672016366",
+    "c5eb01eb457fe6c6f57577c5413b931550a162c71a03ac8d196babbd4e5ce0fd",
+    "0ad0950d9fb9588e59690b74f1237ecdf1d775cd60be2eca57af5a4b0471c91b",
+    "463426a9ffb42bb17dbe6044b9abd1d4e4d95f9041cef0e99d7824eef2b6f588",
+    "15026dba546e3ae05836fc7de5a7bb26",
+    "9518635eba129d5ce0914555",
+    "3d76025dbbedc49448ec3f9080a1abab6b06e91c0b11ad23c912f043a0ee7655",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "727699f009ffe3c076315019c69648366b69171439bd7dd0807743bde76986cd",
+    "78628c354e46f3e169bd231be7b2ff1c77aa302460a26dbfa15515684c00130b",
+    "d4a09d09f575fef425905d2ab396c1449141463f698f8efdb7accfaff8995098",
+    "54657374436f6e74657874",
+    "8aff52b45a1be3a734bc7a41e20b4e055ad4c4d22104b0c20285a7c4302401cd"
+  },
+  {
+    2, 32, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "1632d5c2f71c2b38d0a8fcc359355200caa8b1ffdf28618080466c909cb69b2e",
+    "fdea67cf831f1ca98d8e27b1f6abeb5b7745e9d35348b80fa407ff6958f9137e",
+    "23fb952571a14a25e3d678140cd0e5eb47a0961bb18afcf85896e5453c312e76",
+    "ff4442ef24fbc3c1ff86375b0be1e77e88a0de1e79b30896d73411c5ff4c3518",
+    "b062cb2c4dd4bca0ad7c7a12bbc341e6",
+    "a1bc314c1942ade7051ffed0",
+    "ee1a093e6e1c393c162ea98fdf20560c75909653550540a2700511b65c88c6f1",
+    NULL, NULL,
+    "8b0c70873dc5aecb7f9ee4e62406a397b350e57012be45cf53b7105ae731790b",
+    "dc4a146313cce60a278a5323d321f051c5707e9c45ba21a3479fecdf76fc69dd",
+    "2d6db4cf719dc7293fcbf3fa64690708e44e2bebc81f84608677958c0d4448a7",
+    "6e6d8f200ea2fb20c30b003a8b4f433d2f4ed4c2658d5bc8ce2fef718059c9f7",
+    "f1d4a30a4cef8d6d4e3b016e6fd3799ea057db4f345472ed302a67ce1c20cdec",
+    "54657374436f6e74657874",
+    "5a0131813abc9a522cad678eb6bafaabc43389934adb8097d23c5ff68059eb64"
+  },
+  {
+    3, 32, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "1d11a3cd247ae48e901939659bd4d79b6b959e1f3e7d66663fbc9412dd4e0976",
+    "cb29a95649dc5656c2d054c1aa0d3df0493155e9d5da6d7e344ed8b6a64a9423",
+    "820818d3c23993492cc5623ab437a48a0a7ca3e9639c140fe1e33811eb844b7c",
+    "14de82a5897b613616a00c39b87429df35bc2b426bcfd73febcb45e903490768",
+    "1364ead92c47aa7becfa95203037b19a",
+    "99d8b5c54669807e9fc70df1",
+    "f048d55eacbf60f9c6154bd4021774d1075ebf963c6adc71fa846f183ab2dde6",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "2bfb2eb18fcad1af0e4f99142a1c474ae74e21b9425fc5c589382c69b50cc57e",
+    "fc1c87d2f3832adb178b431fce2ac77c7ca2fd680f3406c77b5ecdf818b119f4",
+    "f9d0e870aba28d04709b2680cb8185466c6a6ff1d6e9d1091d5bf5e10ce3a577",
+    "4303619085a20ebcf18edd22782952b8a7161e1dbae6e46e143a52a96127cf84",
+    "4b16221f3b269a88e207270b5e1de28cb01f847841b344b8314d6a622fe5ee90",
+    "54657374436f6e74657874",
+    "a30c20370c026bbea4dca51cb63761695132d342bae33a6a11527d3e7679436d"
+  },
+  {
+    0, 32, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "430f4b9859665145a6b1ba274024487bd66f03a2dd577d7753c68d7d7d00c00c",
+    "497b4502664cfea5d5af0b39934dac72242a74f8480451e1aee7d6a53320333d",
+    "6c93e09869df3402d7bf231bf540fadd35cd56be14f97178f0954db94b7fc256",
+    "179d4b53b6365c45b600c4163b61d95cbc2f4d9e36f1695558dce265ab8bab11",
+    "f50b0609186798729ed0564b36ef2ef8044f1f9d05636874d1f46c819c7a669f",
+    "151d9929e2449747889bc923",
+    "86017151bbff6a1940e8abae2ac9e0e7032e33df1eaaecc02ca6259b130d62df",
+    NULL, NULL,
+    NULL, NULL,
+    "3101c54c3a4f87439eaac080699ed9bbcc726ffe44e860c0424ccb7e3e2ead7b",
+    "2cd7c601cefb3d42a62b04b7a9041494c06c7843818e0ce28a8f704ae7ab20f9",
+    "dac33b0e9db1b59dbbea58d59a14e7b5896e9bdf98fad6891e99d1686492b9ee",
+    "54657374436f6e74657874",
+    "7c5ded445732c14fe09727d29b4251c0fd38455fe8440571e687f0886aac94d2"
+  },
+  {
+    1, 32, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "62a61ceb338540516edde460e27923a8df6749bc38e27b1001cd5b8b9102e44c",
+    "d99132243a09c24a7497f3da8608f0ba808c21a575d33679f4b24603e96d27ad",
+    "4f3e44d4dde1d0d12a724242df8cef0a68ea53617dab8a6aade4239d404a5154",
+    "e24413c8dc5760ffbedbfbfb48d087f85ae448b62575db480763d430636663af",
+    "de08a0822c00994ffd1a4136a3caaf2703b4ce0c083c2656e598345fcd27510f",
+    "02b1fe14a5b6ad526ccff550",
+    "8bb2d1661275a9c505481682c41171dcec9d4c468276878d71c98a050bddd53c",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "cb095862cd41f4cb5be5f63e11d17728c84b4d0f66ebe6bcb1ed0ce8d895aa1d",
+    "82a09463e824b97331c06be1d3eebd9a3e023e08b9ed22bc6a4af2ff024817dd",
+    "f1c6eccfde050607555cae11893fcfe895f85eadc7c77c42c1544391d0cb7a20",
+    "54657374436f6e74657874",
+    "83c8f8266bad56783567d44f9cd2a1c0070e1ea179d147e1424622037e7fb61c"
+  },
+  {
+    2, 32, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "3668d659cec6f338f4f8dc6da6733118d2a633f186a3c1415c895111a8eb7c7d",
+    "47f1eee3670dfaaf27c30a83d06ee9f257af174727c17b35328ef730dfc1cd81",
+    "9e59f4b1fa5c876f684765290c34e51145894cc4f244342b9fb1a4bdfd8bb426",
+    "805b278cabd22c9dbd461bf25771703eda4950ed3ef35b369163097899555356",
+    "db0218adcafe73ee2e320bd08146d232cedfbd45c7e43d1fae3f1c79dc179b40",
+    "41da94323642095905a34938",
+    "ca56d3b4d84d60bc3cd4a0749adeb578ff9c19c9d49a5848632c23c5c912c5ea",
+    NULL, NULL,
+    "4a91c3d0893433f5e31a79fc520f885527a1bc60bf2b0c72693dd7f0b2e41a5a",
+    "98fdf9b9773578a79d4ba82fbe483c74cc2e3b8d9525d148a18969fd79a74876",
+    "6579475ca739247fad60b7713b0077f1e966e0eaf6f95bff8fa41e446db4b226",
+    "734369ab3061f71ee85e090fae308553cac8e7b3fbd45b4ba83d05e0cd05b1c4",
+    "f59761a1e479c2a291b91a5af2b35dd2cace1b2042b570f88a16b226f6f30774",
+    "54657374436f6e74657874",
+    "25f7c731201fe73978b5c66405f17de3e59b7f1c4bbe21e9ff57541d152841ac"
+  },
+  {
+    3, 32, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "49823d14040d46e3d405e21f421a810a4968a361bc96c5abcf2f36e66b15a36e",
+    "a494cc9d803df57792c866f6ab716ba8ce953236e3ec71914908cd80fb721c15",
+    "d38af616e071a4e3717ad1575fc8df781c541b4d0cc02cdf98f2d156a9eda15f",
+    "489982fb92e71f638c2957a971f4d635af14d725481bbf4db187006600a26557",
+    "501e5469a0814eb5e6be3c9711d884765835aaec5d15947054aa2b4c5a467efd",
+    "1455fb0f644ca05dec2dc40e",
+    "23d5857f167856ec7d9200832e9ae284d046df2d9abf11aef698f3d6b6a2534e",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "f94a4aad51983c18a48a960f2072c14818b9bf1eac2cc4575e32d8d029387a2e",
+    "06d5b0b9a559a48588a2447b51f153ef5a03fae0c022c831e64ad85bb3d3ab41",
+    "40d16ac46fa9b4c4c02937e106ecb5a67109ae60ebb66262cfc704880d907d58",
+    "72f439eae7e59017d8b27ef1c19b178c1bbae606aed33a1c36e0bacf7dd3ffac",
+    "cb00bcfe70c59318fffcba7e8c4ac10c0913e7ea68004b042fc12e27e205655e",
+    "54657374436f6e74657874",
+    "d4a4033268f372ee2725be064512c4de92591f94740efdb1ed4be226c5d4e20f"
+  },
+  {
+    0, 32, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "4310ee97d88cc1f088a5576c77ab0cf5c3ac797f3d95139c6c84b5429c59662a",
+    "8057991eef8f1f1af18f4a9491d16a1ce333f695d4db8e38da75975c4478e0fb",
+    "1afa08d3dec047a643885163f1180476fa7ddb54c6a8029ea33f95796bf2ac4a",
+    "f4ec9b33b792c372c1d2c2063507b684ef925b8c75a42dbcbf57d63ccd381600",
+    "ad2744de8e17f4ebba575b3f5f5a8fa1f69c2a07f6e7500bc60ca6e3e3ec1c91",
+    "5c4d98150661b848853b547f",
+    "a3b010d4994890e2c6968a36f64470d3c824c8f5029942feb11e7a74b2921922",
+    NULL, NULL,
+    NULL, NULL,
+    "0bbe78490412b4bbea4812666f7916932b828bba79942424abb65244930d69a7",
+    "909a9b35d3dc4713a5e72a4da274b55d3d3821a37e5d099e74a647db583a904b",
+    "1ac01f181fdf9f352797655161c58b75c656a6cc2716dcb66372da835542e1df",
+    "54657374436f6e74657874",
+    "5acb09211139c43b3090489a9da433e8a30ee7188ba8b0a9a1ccf0c229283e53"
+  },
+  {
+    1, 32, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "13640af826b722fc04feaa4de2f28fbd5ecc03623b317834e7ff4120dbe73062",
+    "77d114e0212be51cb1d76fa99dd41cfd4d0166b08caa09074430a6c59ef17879",
+    "2261299c3f40a9afc133b969a97f05e95be2c514e54f3de26cbe5644ac735b04",
+    "0c35fdf49df7aa01cd330049332c40411ebba36e0c718ebc3edf5845795f6321",
+    "600d2fdb0313a7e5c86a9ce9221cd95bed069862421744cfb4ab9d7203a9c019",
+    "112e0465562045b7368653e7",
+    "73b506dc8b6b4269027f80b0362def5cbb57ee50eed0c2873dac9181f453c5ac",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "4be079c5e77779d0215b3f689595d59e3e9b0455d55662d1f3666ec606e50ea7",
+    "35706a0b09fb26fb45c39c2f5079c709c7cf98e43afa973f14d88ece7e29c2e3",
+    "26b923eade72941c8a85b09986cdfa3f1296852261adedc52d58d2930269812b",
+    "54657374436f6e74657874",
+    "ad40e3ae14f21c99bfdebc20ae14ab86f4ca2dc9a4799d200f43a25f99fa78ae"
+  },
+  {
+    2, 32, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "1a478716d63cb2e16786ee93004486dc151e988b34b475043d3e0175bdb01c44",
+    "3ca22a6d1cda1bb9480949ec5329d3bf0b080ca4c45879c95eddb55c70b80b82",
+    "f7674cc8cd7baa5872d1f33dbaffe3314239f6197ddf5ded1746760bfc847e0e",
+    "c94619e1af28971c8fa7957192b7e62a71ca2dcdde0a7cc4a8a9e741d600ab13",
+    "b071fd1136680600eb447a845a967d35e9db20749cdf9ce098bcc4deef4b1356",
+    "d20577dff16d7cea2c4bf780",
+    "be2d93b82071318cdb88510037cf504344151f2f9b9da8ab48974d40a2251dd7",
+    NULL, NULL,
+    "f0f4f9e96c54aeed3f323de8534fffd7e0577e4ce269896716bcb95643c8712b",
+    "2def0cb58ffcf83d1062dd085c8aceca7f4c0c3fd05912d847b61f3e54121f05",
+    "d2d67828c8bc9fa661cf15a31b3ebf1febe0cafef7abfaaca580aaf6d471e3eb",
+    "938d3daa5a8904540bc24f48ae90eed3f4f7f11839560597b55e7c9598c996c0",
+    "64835d5ee64aa7aad57c6f2e4f758f7696617f8829e70bc9ac7a5ef95d1c756c",
+    "54657374436f6e74657874",
+    "1df39dc5dd60edcbf5f9ae804e15ada66e885b28ed7929116f768369a3f950ee"
+  },
+  {
+    3, 32, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "a5099431c35c491ec62ca91df1525d6349cb8aa170c51f9581f8627be6334851",
+    "7b36a42822e75bf3362dfabbe474b3016236408becb83b859a6909e22803cb0c",
+    "656a2e00dc9990fd189e6e473459392df556e9a2758754a09db3f51179a3fc02",
+    "5e6dd73e82b856339572b7245d3cbb073a7561c0bee52873490e305cbb710410",
+    "49c7e6d7d2d257aded2a746fe6a9bf12d4de8007c4862b1fdffe8c35fb65054c",
+    "abac79931e8c1bcb8a23960a",
+    "7c6cc1bb98993cd93e2599322247a58fd41fdecd3db895fb4c5fd8d6bbe606b5",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "3ac5bd4dd66ff9f2740bef0d6ccb66daa77bff7849d7895182b07fb74d087c45",
+    "90761c5b0a7ef0985ed66687ad708b921d9803d51637c8d1cb72d03ed0f64418",
+    "86a6c0ed17714f11d2951747e660857a5fd7616c933ef03207808b7a7123fe67",
+    "49d6eac8c6c558c953a0a252929a818745bb08cd3d29e15f9f5db5eb2e7d4b84",
+    "f3304ddcf15848488271f12b75ecaf72301faabf6ad283654a14c398832eb184",
+    "54657374436f6e74657874",
+    "d3bae066aa8da27d527d85c040f7dd6ccb60221c902ee36a82f70bcd62a60ee4"
+  },
+  {
+    0, 32, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "194141ca6c3c3beb4792cd97ba0ea1faff09d98435012345766ee33aae2d7664",
+    "33d196c830a12f9ac65d6e565a590d80f04ee9b19c83c87f2c170d972a812848",
+    "e5e8f9bfff6c2f29791fc351d2c25ce1299aa5eaca78a757c0b4fb4bcd830918",
+    "095182b502f1f91f63ba584c7c3ec473d617b8b4c2cec3fad5af7fa6748165ed",
+    "",
+    "",
+    "79dc8e0509cf4a3364ca027e5a0138235281611ca910e435e8ed58167c72f79b",
+    NULL, NULL,
+    NULL, NULL,
+    "e81716ce8f73141d4f25ee9098efc968c91e5b8ce52ffff59d64039e82918b66",
+    "55bc245ee4efda25d38f2d54d5bb6665291b99f8108a8c4b686c2b14893ea5d9",
+    "683ae0da1d22181e74ed2e503ebf82840deb1d5e872cade20f4b458d99783e31",
+    "54657374436f6e74657874",
+    "ffaabc85a776136ca0c378e5d084c9140ab552b78f039d2e8775f26efff4c70e"
+  },
+  {
+    1, 32, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "d53af36ea5f58f8868bb4a1333ed4cc47e7a63b0040eb54c77b9c8ec456da824",
+    "98f304d4ecb312689690b113973c61ffe0aa7c13f2fbe365e48f3ed09e5a6a0c",
+    "d3805a97cbcd5f08babd21221d3e6b362a700572d14f9bbeb94ec078d051ae3d",
+    "1d72396121a6a826549776ef1a9d2f3a2907fc6a38902fa4e401afdb0392e627",
+    "",
+    "",
+    "04261818aeae99d6aba5101bd35ddf3271d909a756adcef0d41389d9ed9ab153",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "024573db58c887decb4c57b6ed39f2c9a09c85600a8a0ecb11cac24c6aaec195",
+    "c51211a8799f6b8a0021fcba673d9c4067a98ebc6794232e5b06cb9febcbbdf5",
+    "5e0516b1b29c0e13386529da16525210c796f7d647c37eac118023a6aa9eb89a",
+    "54657374436f6e74657874",
+    "7c9d79876a288507b81a5a52365a7d39cc0fa3f07e34172984f96fec07c44cba"
+  },
+  {
+    2, 32, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "ffd7ac24694cb17939d95feb7c4c6539bb31621deb9b96d715a64abdd9d14b10",
+    "ed88cda0e91ca5da64b6ad7fc34a10f096fa92f0b9ceff9d2c55124304ed8b4a",
+    "5ac1671a55c5c3875a8afe74664aa8bc68830be9ded0c5f633cd96400e8b5c05",
+    "83d3f217071bbf600ba6f081f6e4005d27b97c8001f55cb5ff6ea3bbea1d9295",
+    "",
+    "",
+    "276d87e5cb0655c7d3dad95e76e6fc02746739eb9d968955ccf8a6346c97509e",
+    NULL, NULL,
+    "89eb1feae431159a5250c5186f72a15962c8d0debd20a8389d8b6e4996e14306",
+    "c85f136e06d72d28314f0e34b10aadc8d297e9d71d45a5662c2b7c3b9f9f9405",
+    "e204156fd17fd65b132d53a0558cd67b7c0d7095ee494b00f47d686eb78f8fb3",
+    "43b078912a54b591a7b09b16ce89a1955a9dd60b29fb611e044260046e8b061b",
+    "fc9407ae72ed614901ebf44257fb540f617284b5361cfecd620bafc4aba36f73",
+    "54657374436f6e74657874",
+    "ff3b0e37a9954247fea53f251b799e2edd35aac7152c5795751a3da424feca73"
+  },
+  {
+    3, 32, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "f47cd9d6993d2e2234eb122b425accfb486ee80f89607b087094e9f413253c2d",
+    "c4962a7f97d773a47bdf40db4b01dc6a56797c9e0deaab45f4ea3aa9b1d72904",
+    "81cbf4bd7eee97dd0b600252a1c964ea186846252abb340be47087cc78f3d87c",
+    "a2b43f5c67d0d560ee04de0122c765ea5165e328410844db97f74595761bbb81",
+    "",
+    "",
+    "695b1faa479c0e0518b6414c3b46e8ef5caea04c0a192246843765ae6a8a78e0",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "29a5bf3867a6128bbdf8e070abe7fe70ca5e07b629eba5819af73810ee20112f",
+    "6175b2830c5743dff5b7568a7e20edb1fe477fb0487ca21d6433365be90234d0",
+    "d69246bcd767e579b1eec80956d7e7dfbd2902dad920556f0de69bd54054a2d1",
+    "94efae91e96811a3a49fd1b20eb0344d68ead6ac01922c2360779aa172487f40",
+    "4dfde6fadfe5cb50fced4034e84e6d3a104aa4bf2971360032c1c0580e286663",
+    "54657374436f6e74657874",
+    "84f3466bd5a03bde6444324e63d7560e7ac790da4e5bbab01e7c4d575728c34a"
+  },
+  {
+    0, 32, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "adf16c696b87995879b27d470d37212f38a58bfe7f84e6d50db638b8f2c22340",
+    "ddfbb71d7ea8ebd98fa9cc211aa7b535d258fe9ab4a08bc9896af270e35aad35",
+    "8998da4c3d6ade83c53e861a022c046db909f1c31107196ab4c2f4dd37e1a949",
+    "b2ddee7e705637e56848f7d79722037df28ac5a4343502dd83a896c7133c1713",
+    "5470dd5c2a9dd27cc3afcc0a22db8b7f",
+    "674e489fcfed0d05867cf633",
+    "80af20f76b14d0b2a62f6c8f35a8dbfc5daeec7ac991a3cd44296e4f1dcd05b3a03b97c1701629ac5f5408a00244d2c769b83c07462b15ff1146d5a0bf040187",
+    NULL, NULL,
+    NULL, NULL,
+    "3b5f8cba3b53c7d4711f5c6a5a0397bda23762e9a6a5319081443372a1c12e66",
+    "895221ae20f39cbf46871d6ea162d44b84dd7ba9cc7a3c80f16d6ea4242cd6d4",
+    "59a9b44375a297d452fc18e5bba1a64dec709f23109486fce2d3a5428ed2000a",
+    "54657374436f6e74657874",
+    "8b9f09cc299227800f159c64a8026b27538f5be27c33789d511ecc0aaa1ad1ae"
+  },
+  {
+    1, 32, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "a268e077bf5458cf2c1aaf7abc539598b32b7c4d22a9c9db18952b9a7182ed2e",
+    "d16a548d4228623e62db73f4a1b3d1fe7dacdbc3ccaa99df9311afc15f2e7833",
+    "557f2ad9994ecd48e299947c7a609621bb48a3675f91f93c379c956e82fed744",
+    "2c8593887c023446e36e9027d2cac5e586c544da87360bdc70b9c794dbf64f18",
+    "c77cd5e8efef3b074662056ced6e4be5",
+    "e849f28fc830cc8b4380b6d4",
+    "6d0c8d626d3f80e2910dbfd186ae10bf3d47b1c94668c6ba2b6286d048550eff9c6d1235be920142e1bc6994430a0d0e5271694b865dc4735b09778edcdabdc1",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "10a111d8208f53967c18f2ab4d9caf3281c96e31eb329a0318ff7d99e2d11be9",
+    "660bdad797e2bfbc40021b04b599b7e71eeba930c99614bdcf248302ad0851f8",
+    "8582f3727a3dd1410542537ec63d0540c4aabcc291075c6a29dfc85c2dcb01e8",
+    "54657374436f6e74657874",
+    "456d3bb18092c49437c3f84d4a33f02df323e6494ae1eca4b04f1878015025af"
+  },
+  {
+    2, 32, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "9144025cd5cf5049cd429d95efefa7e7ba1a896054cdb1d6c93bac79134b1f5f",
+    "1ea5548fb3412eca9ca9d5165a382bea32877415b12253fb2c594b0cfa4e8197",
+    "cbbf4bf8393f27f04cdbc5e67a449cadc22df22dcf0c14f61d17471c8b49687f",
+    "899bcc666197a9a9629248daaf7b2cae2020f450b42e2aa633a5dab67031c021",
+    "d9d173d39d6b281a0aec686097a9ebec",
+    "8895a6427778c6d6219b1056",
+    "0f22ca936c399d0c4041ff33cfbfac1e7786f4718040afc4a173f866ea09331bf62e6076512f176840ee2d7a42aff59c5af739b9b9bf5423e414e5f168279110",
+    NULL, NULL,
+    "4b65143baa4aaeae70c23e052972ca61467aa42883b1c3ef388821496f120717",
+    "bee14df75c1654067db5b7551d3ebd0a5e2e18495733639e6a054c91bde97a17",
+    "8d75921a2cfd345a076ac2dc64dd2af08598322dd3aadb90a43395c13445c654",
+    "3a7a2bb7ac023e7f2645c4ba7f9f63e0eed809c794ec5a6963b5dac1326b3c1f",
+    "b456248e5f6a41868f17ac31def0bdc98ceafd38216ad45ba63a02db53bdbbee",
+    "54657374436f6e74657874",
+    "b7f6b8b0755634589c47321fe3996ac102e76b41a0c79c8440b065670de7d044"
+  },
+  {
+    3, 32, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "8a3ee49d145eeda1ce67c97719d1549ea3db1f6e1ddc08c5a96424cb626af40c",
+    "2e88db2354b96b778742281a8b7ed4053ca87e5fc7182875d5fce63c34f970f8",
+    "d16f9195a7ec9fa5bdae0492d8ba39af16170953cd0e14293b869f19248c511b",
+    "4a9c54eb2bec2abf51d73b1debfe4c5c77706498ef41ea3d01e05d47002e8dec",
+    "ca48fc901a9d2b5badb98aac9b63fe04",
+    "34846c33e043809eac003484",
+    "ea7f1197df2007ce693f297e2010a6d81cf070330eab8bbd8bd14072430d14bb81836e26a1a268feea24105122baefb2e024cc89d4d8e5d3a689b6512bfd7e9b",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "29f9e969591e0dc2871e753bc917199865cd9c4777f5c02fcadc0116d0a26837",
+    "d19c4ac7b0f6b25a86bccaafddc9e3e1e593cb4a54f517a545be8107633ce772",
+    "4521e4db04361cb8c86b836ec49a0470f9bb6484bcff7ce27e602dcc956b9404",
+    "04b92f7078ce31fedbd8ca25e8525297f3ca828ca605ec164035611e7dc8fae1",
+    "0ff3dc19ba7bf8d09850e072a0e5382001f9008149e4cc4bb4da8766f54efb20",
+    "54657374436f6e74657874",
+    "7acb7cff7302ea5c5819fea2f0b69d6ebabc664a17476cb7771af1598eb5c8c6"
+  },
+  {
+    3, 32, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "740730cdce9e8dab82ca0648a3cc2df40281d4c2166e9f6c3698e6aa666e4930",
+    "8dc885ddff9915dee8a360309675d770d4c9facb8f214d24f7baf130153e0a1a",
+    "473a5c15d5e0b488c7b321e99172e1663be514efe79387ffb1da4a53b806c461",
+    "5386934a3f61c6cdb2a70b18fb67106d7e7a77c8b4d4126c016a350be0ab3217",
+    "d96b2d9043a9b875fc4b2b7079dccd0d6e2c7b431a0517065e73a349b625bb24",
+    "7782f07d1ce3bd345b1de3da",
+    "b47dad6405736797e6583defa8ee9adab77fe62c3c0730ed6672a08c63fc10b8bc4fad3cb8c2016358419fc2266afd1856c81e9353baf32b007c5f7bbd55a9e0",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "99ce50c3f04d367deac454e1c04c662fa2b398ea2fae15d93d163aa07d6dba49",
+    "ac9e7ab12c37daeaa9b2098502a7db2118d536e6b3b9e8385d79a52ee7f71541",
+    "d22ed5c53b896b89c11940993dbc6924a8f0e17f11ca0d095804060bf9909106",
+    "c0f45a75ec0ad58980873f9b10a6ff0375770ce0237e4119d12f908c39202859",
+    "e10e1ad65ab26cdead9619c5cd75d54532fe4aef355f85280c6834590ca726ff",
+    "54657374436f6e74657874",
+    "cf3817737cfd63c25ff9fec3541fdc0ed2a7279dfc5cef3cdde9a18648644808"
+  },
+  {
+    0, 32, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "aa7bddcf5ca0b2c0cf760b5dffc62740a8e761ec572032a809bebc87aaf7575e",
+    "bdd8943c1e60191f3ea4e69fc4f322aa1086db9650f1f952fdce88395a4bd1af",
+    "c12ba9fb91d7ebb03057d8bea4398688dcc1d1d1ff3b97f09b96b9bf89bd1e4a",
+    "dc926085fd67a0338320c3b47944b56eec296981d646ab5e3492e3460bebaf51",
+    "f3354d286a48f67ca0c22029feb446938efb1b9b8a410852d7bdd3404acd0c09",
+    "d654f65e557737ea2a0b5489",
+    "74536eda135901a81409ab3f8f4767d2cf41933136bbd194427cec8e6fe2253f3ac0beae54180a7837dea9277a3290749777f65a874fdd2ca69c7ef5ee5bbcfe",
+    NULL, NULL,
+    NULL, NULL,
+    "96fe0a805d100153533f0646095a652eecb19346db433089666ee539a796ffb2",
+    "e72b39232ee9ef9f6537a72afe28f551dbe632006aa1b300a00518883a3f2dc1",
+    "a0484936abc95d587acf7034156229f9970e9dfa76773754e40fb30e53c9de16",
+    "54657374436f6e74657874",
+    "af616a8dc3fa47900b8e68f878fba983134b4b608bcad9c0f743d2aa7c1a781b"
+  },
+  {
+    1, 32, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "7891026ecbfe6339d804da654cdd6797e9bedf85f3abc56ae46a693eeef55743",
+    "7ef44e93d5b9df2b8c7f7e3bec24a1581b98624a6c0d4f5df9fdb383fbca1750",
+    "67867a1c41afa75cbce4f726304adda5062c2793c2e6b307dd0191a204a4db5b",
+    "245b6a48b7cf15a0d89b40b932804edb018b3a6de68e4f3f7c33f64ba3d8d2e6",
+    "0976c6d00ce1f600195b827db4d60232bda81c1f577d1de13e19ad00ebbc38ba",
+    "fa603a394e9e6bd93d21cd52",
+    "348e036205f78026df40a27b87f7e474015a20e5a8e9a828cd396f18aa3fa0e38a943bda9604865ce99481c93c481068f746ab7e87fd9842f2c12b07fc96f29f",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "360d4f9490b0822e944c012ce6dac05f3331a1ae2695a2e64d6f42e3ef63abb9",
+    "3dcd4d71f3eab99ce6af93faaca0e3f837c952ba2be7ce40dbb5fbf16459e4f4",
+    "e8124b9055d132d400a0a246f06617b06204e83ad35e8bd90b6ecbf06b4f42f0",
+    "54657374436f6e74657874",
+    "202e2a37a076d0e683cdbc27c03eaeeb2d73519eb018d8bdabe467743d1d3bfb"
+  },
+  {
+    2, 32, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "c05b1ec51b2ddb9f226074582fd6e259cc9ca35e92c73a24c7b5062e2ac3f712",
+    "6ade1a44d2ee24ca4e44648119ccaf2e2f0de11fee18536f5b5b4ff543f1621c",
+    "3e276b60dab1aeddce9176e30201795fc7c32736912f670c8f09e1334008a354",
+    "c38ab7cc90dfb49776bc0f1137eda624e62371bead515cbc93c69000eff747c5",
+    "948cd9484623c2e148e2294619ca39e99ebee2bd59494841458c45b99e09367d",
+    "a46aebcafe409e3c97ed0970",
+    "8534e883089b983739244d4b6dfb5409e7bc8664cde57937b0322d9ddfb0047a92508ebe5932355004dc1050136d52ec5d8c6f47581a16995bb2c05a0188f1b4",
+    NULL, NULL,
+    "80ffae75685b9d176ad0ed7f721c64f3c274b50f5a1b113165c44915db7c5217",
+    "163665f9be4038f7f4b78bf097690ce1820afeca2d7502d6b342c4df9132bcac",
+    "039e572d8d6928e925dd19e3400d080dad8e469723897558bdc5694196556787",
+    "67aa79119924c7684b3db28cadd4abfe42fa6c3735bcf1fa4742ddc224c2f90a",
+    "1bc10ced780691e8d6a2559fcfba8d7ea32ef2df8ffaa32954649b551e6d0083",
+    "54657374436f6e74657874",
+    "7080e8ab74a5c901cb4556cacb48570737ffb5acdf895c2c9e6e436cf865b773"
+  },
+  {
+    0, 32, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "06aa193a5612d89a1935c33f1fda3109fcdf4b867da4c4507879f184340b0e0e",
+    "fad15f488c09c167bd18d8f48f282e30d944d624c5676742ad820119de44ea91",
+    "1d38fc578d4209ea0ef3ee5f1128ac4876a9549d74dc2d2f46e75942a6188244",
+    "76bb47b1f20139b5506a2f44fd80210e92a6fa32f8ecaf65a42c1e8060c8eb30",
+    "855901be1fd77ee5e6ce4a44e74fd553fbf0940d090d3a3fdf913c723b84920d",
+    "6a6a5c9d22e9c26961fd202d",
+    "3d29344e6384990232ec822334a97cb099714e3f778b604e919743010929280f8d1d8cc4fb13093ef6257abf17271097b9d2b9231639e69667a7e0d0fdc05994",
+    NULL, NULL,
+    NULL, NULL,
+    "7ca45a4b0fd3491569e88d54471bcc83777566e88b02244493720d412dddd03f",
+    "636d1237a5ae674c24caa0c32a980d3218d84f916ba31e16699892d27103a2a9",
+    "969bb169aa9c24a501ee9d962e96c310226d427fb6eb3fc579d9882dbc708315",
+    "54657374436f6e74657874",
+    "b0b5c19ae0daf8d005593f5755d6e8cab29bd3c5c8245823586d009d15aa5237"
+  },
+  {
+    1, 32, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "2b54cf0ed6c4ef3ef5c2303a85abd3db8f540a5c53a22f8bf9639921c81a324b",
+    "408882e1f5e554b270a1174ec38e6c647ad1394a408ebafc228c0410dbf98a24",
+    "bc441a64a700843a8efd5cd574c20e9909c3a2ff7d35e260f9328cbb8e555d56",
+    "eca9fe586030d7de742a2fc531685684d9c4cf32ea1af4aba1f85895d9c2f563",
+    "a6185e8133becdb0ee3acbc901c6085bd5d5a3e7cce9949c57647a7f81c437e3",
+    "f4fee6a6f8e2f5657369f3bc",
+    "bc3b934f4bba7bf8adb625c8cdf255d8db109aa16ef4a99f180cdd817a0c90e04b857a6a42d669b6f52eb1f2264495b45c827a0bb763656cd199a3bde2b3974f",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "cbd7eeb81ca7cc4b76411df346291e840990b7f059e507b055158575e656ff7b",
+    "16854ff5f1184ebfc559f9d21a595e45212f4658f2804bcbe4375d524353ecb0",
+    "92c0e581f1b0ad231dd7346d69071afa23eb4dacdf0b868b644a20bd5121dc07",
+    "54657374436f6e74657874",
+    "3a3980d8a63287c12db540669ded019a0643e236e25896f2f3197edda044b3ce"
+  },
+  {
+    2, 32, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "f14842fb034d3725cd7c6a2fd86daaa1151b7d3f6e732d42d2fcd6cc90c11617",
+    "b3e6af7ec768ad8afbf7d4b1686f055dc5607d4dfbfff43ef798ab7eb9225400",
+    "331597d5612993d3cad921fc4ba43cef927b0e371b3a2881e6e7c45b10d6ea35",
+    "6ccbd501372c8976c2ecb9d69949311a23de77b6dd1cbd917566e28200f2ab8d",
+    "fd6ef19ab54900b95d3dd5a524c53ee6abf7a2646265ef676c4138d6aad6e3fd",
+    "256c397646960f5fe361c7f6",
+    "987ba4ffced939f3d55945ff86bfe4beee4461fcfcc4dba0cc00d04b47629b926b255f8ddd15134ac538a1d7d81000f2e04b539ebfbf8e67af35e385ecf38484",
+    NULL, NULL,
+    "679cebc8fe9b8b0e559e938fce8e91d52aa703de6a7b1ffc9ba968f587f08553",
+    "cec1b09bc81db8f6087e86fe02586b09e5e68166cda9655d5221a7be1528d5e6",
+    "aadac9b340124ae5d0d0793b56fc50a9d3b7699fb44d8e583d4e863dfeacd406",
+    "43b5c9e73526213dd69a4fae8bc905f4303f1f8ad78e601144147daf1bdb0764",
+    "25782afd448caad143f0416f19e147793ecdd2d7b42b75ca3605ab7a1573c05f",
+    "54657374436f6e74657874",
+    "2014260af052a892da042c3c5dd83743826660d84338c1d4bdf36e810fda3c90"
+  },
+  {
+    3, 32, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "6a8e4ccc7a70b66b4682dae9fa35e4e53869e15bde9d21ac100f4efa1c099e6c",
+    "d791b71bd90aafed576683312da4f0d6b43bc026e614db1ab99590b5a8394772",
+    "75f842965c219379c24a25dcc7985ef4fa23307de9ec96d8700b1990a907ff3a",
+    "e819eee9d9331740deaa7acb05789f106fb85fa9e5a1888387c715b1df3c8f82",
+    "387a1a482c6b659c86f74c6bc5eb6dc67bbefe2a74173674af7279f535286e47",
+    "4ec80a1044d5881196f55265",
+    "50ce7c982b0f0a9b9a986b26124d226202bf18b5182a7116751c0f6fe3b22e9e441bdc9105babfb8b75298fa43b63ffe81d8d833e8158c39345d1f7877a5f2e6",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "50c0cf51b4a336fbc3bfc085112e87a41fc7a43d02795bac17d5348903029833",
+    "5924132e9437a0728d80b8ecb9f0fd4bf9cb1af869deebf98ad125e6e704bd29",
+    "3b38cd8e6540ef714a0b21a1cd82bb85af3159f1fa0eee44c3361d97e6f84cae",
+    "e49d29b7a4619f656938e1e6cc162bae09afba0937954e5a3332d794a59299b6",
+    "b4ea665372433059a456b9ee3dea173ef8e5a4846242db8f5767c917128fb8ec",
+    "54657374436f6e74657874",
+    "ba08d8f7983e7256dd5b0d2cd9bd341524d70a01c1049696ed41deb507dd91a9"
+  },
+  {
+    0, 32, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "9a83674c1bc12909fd59635ba1445592b82a7c01d4dad3ffc8f3975e76c43732",
+    "7596739457c72bbd6758c7021cfcb4d2fcd677d1232896b8f00da223c5519c36",
+    "444fbbf83d64fef654dfb2a17997d82ca37cd8aeb8094371da33afb95e0c5b0e",
+    "4c58cfefe23a4b358a6478b0a354a17c775a1d97ae3eafc83116d94bbf685404",
+    "",
+    "",
+    "d764d7210767209a17580bfb2d4579214d7d874a88d66c957750a6f737450ec40b3e2553e64809c6199910d5b08c9bec5caff7aa4264a93c5163394abad8458d",
+    NULL, NULL,
+    NULL, NULL,
+    "8640e0fb0f711034cc9d4172db55f24bd6ed92e26c094ad203ed55f4a9ae6d0b",
+    "3cfbc97dece2c497126df8909efbdd3d56b3bbe97ddf6555c99a04ff4402474c",
+    "dff9a966e02b161472f167c0d4252d400069449e62384beb78111cb596220921",
+    "54657374436f6e74657874",
+    "cf6fd26feb7a558cf682dd0fb9852120036763024338b0b2622e44296b828cfb"
+  },
+  {
+    1, 32, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0c91b07699f0d3ef774098af66a9f5520247fbc2ecf774adca2b10c0c0d05141",
+    "5d3a033fee5d8d878dc762af58daf6587543c6772db9ddd1118a40bf46da95a9",
+    "35ae5d785f67f181f4031f834b05feb36c19317e38c9f687e30d89dda09be01f",
+    "2a925c28080d915008368aef7235b52997602c7a12bcbcd660a4996a6965bad0",
+    "",
+    "",
+    "1eafd45597a3c51986b95770fee742f80a0dd5aee3608ac07f4e2fe2ca4655171ad0f6f0e126a64c70a7bc2d63c03c50465dcfadcc5b8ec63fe9f53e00a776b0",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "609ad7e1d3760159e09fb3a2cb9002744c746c75413718cfe3378a6e04c4f7a2",
+    "eb4b7cc486a3b7cb0133e8a6dba14dc3af7ffdd254aa9c5c0c2f9cad043c0d4a",
+    "3a5afa71e1fdf1687c12b706810d31a9721f0eab4db5bcaa484a8afc805b0905",
+    "54657374436f6e74657874",
+    "5b8bc279941710c9fe22b3e4f00a2efbed4fce662057ea2b6e37f3081fe050c5"
+  },
+  {
+    2, 32, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "2cf91c8e086e8c7954534ff96b22507acc103d07ef8545d53a16edc6b0b08538",
+    "e5522733c069d8c0437a4c3a35170b8e4b328a9636eac315c38f0914260335f7",
+    "c639727ac6313c1b0dd33c67a5f62ef9a6a97ef058a229db84f06ae9a113fb46",
+    "c2b48c51d6d4684b41a2ef482055a4296252eb86d4aa3e46228b1a925b3764d6",
+    "",
+    "",
+    "b5349942ee5bab24d97d011614ec126ea49f0b988c8716d70971fab4dc4797d19792635ffed3bf0bece5dc79cda417c1ecde386f0fa8c23b4ba2f8b976ffd1d7",
+    NULL, NULL,
+    "fc43f7df334080185c2d9a8869d7c25845b3b42486b108dd59656b69f4e1885e",
+    "b65a9bf6ec32e934640e35c60b3ff783eaf9939ec5229346a65756bf037a1e23",
+    "c32b36c3e550e4a3ef44e5b59f5bfc09309a3763f348fa173a11a4b87cb5c2f8",
+    "95b7da893cc742334319b331f4a335dc04e1f5a06ed7d515844d0d9866f84435",
+    "5531469a99e1b97a0d87d1a6f96f82f852b1be47fea61365a044282c25f089d7",
+    "54657374436f6e74657874",
+    "f3c619054300478ad0a04b3e2eb29fdcec895ef16a7a7cf46b8b3592bbe45cfd"
+  },
+  {
+    3, 32, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "016b76f044f44547d79ca3c93dab96b88472232390ba1c5d613dcce8fad85826",
+    "e37c2a39eef41660b611bd807510452fe2f6e44e56260419be372a09f356818e",
+    "6a36791cf5ff1dda9df3fb6515b41febd56fa722a839b9b9343a8e38698a1740",
+    "4f98adf00e32206c66254454a434b2e804f798b01be15a97b83220dfc791aed6",
+    "",
+    "",
+    "48b47afc93504a070570021bce776553f03e13ef18dbd24af856904d3622f07dedb1bfdaed3b7b7b42a51cf599eba3dbc2ae6e4c2448f9c654bb2847bc021e45",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "8b379ee6d1a8388c78ad9dae16deed3268ceb6377dfc18048ccbe70517e2ca28",
+    "427ce55904f92d7fde0bb527dfe8b4ac5f5f1df75507839b33ad1e3c9b6f8ba6",
+    "cf92a6a79d8a1a0672c6834171272eda2098f6ce354e5ebed594f4224f04fb93",
+    "4b622248df8f6433a3f5e2e665c6e02dcd4d0e7ece7706def74b9afadef983ab",
+    "60d057243e87d14e50a393ffda20ceadf6ae05d05457d58a718f82fa82bcc0dc",
+    "54657374436f6e74657874",
+    "ff79e3c7d5bc241c2b53aaee182e3534b5ecf59c9e983cb2cf5cfb54f43a0fea"
+  },
+  {
+    0, 33, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "145d083ea7a6379dbb32dcbd8aff4c206ea5d069b75e96c6dd2a3e38f441471ac97adca641fdad66685a96f32b7c3e064635fab3cc89234e",
+    "27a4354608f3bdd38f1f5af305f3e0682efe4e25808249d8fcb55927f6a9f446b8dc1d0a2c3b8cb133a5673b59a6d55ce754ec0c9a555401",
+    "71b965384ed06d5ddf43ae816ca30d8cd61235e98d13fe011cfdba7d19488134c626f087d3fd9b6aaa4d4115ef80e9074b53f2c0fa3d5ecc",
+    "a284fb66158038679a7c1106afe253385ed683e67cdf5c89e9e3e6f0374190343a1d81ae18626a0f9a75f17a7cd9b14aaf27206a5d2eb6fc",
+    "d4d5d94e1d939765fcaa90743669ee31",
+    "cdd67aa5eb2aebfe64df27c0",
+    "3c0234b6819e09215a6d9d3b399e15520a037e9a66e7aa1f7d424c309c356100",
+    NULL, NULL,
+    NULL, NULL,
+    "e0f1ddf832f530335c9aabe5274f61e354d39f32ba4e33556446ee01877db6150b046748d1f25d0c7f66bdb2632915c8d64e04649d23b4a3f0249c5a835434bf",
+    "6e7c63cb3a0b77cdb1ac289e1ac02749f97f0f18b4f2a6e0e3ca170173d0c02d48838081b9c5d98af919e8a79ab93e17fa7093a6af6fda01",
+    "d45d1652df74920abf94a2883c83050f502ff512ffb56f07b6d833ec8dda74b6a1c1cc4d42a22641c0963d3c21ed8261f344dc9e0501a81c",
+    "54657374436f6e74657874",
+    "f0a800d92eee73ae8951c6e2ac108cc5b71a6025173c6d1c0bf3cdd95537db17"
+  },
+  {
+    1, 33, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "f09bad30f2fa351f70947d372026a1106683150aa7f0d5ccc1f45dd7821e3df8cbef56342a12ade1beb16e466b42418d32f06ad4c688ee58",
+    "f6a70984d2724715fa3b876785ad79fc22fb828df3dafb5c8f90867db41e0302de019d37ae2e95dd04a8cf7f0602b5dc2fa2bfb14684c95b",
+    "ce3c6a238c40cccf3f63cd48ea0aea71d4a8518945f37f14a5134cd65b8b66886a44aa63dbc2f99c7951384ba8fddbcb51382f110b38af0b",
+    "25945fc54c60e0b10989a335b31348cc8b971da716f45e00698e1be0549bdcb105ec0261003fc99e26a88b19da6b0bcf49d5ec31f912110b",
+    "96b97b194d24170da7cdc9fecef8f12a",
+    "35b0f52854df93c8e1b28843",
+    "7f2df2dd16d695ba0f4d762ca6c80255e5f4d6585e6a5a90c111daf840951f55",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "0a651a537afc761c441ef57b9b058fea1e0d443e77ce3b679c236d440c6f2bf1e67c2faae0d9993333980d160949d04b8939770a20cb2931eaf3836c0e19a1f0",
+    "288b0fff7ed610f7a301c85241d502f1e9fad2f11c81eff7e5bf2ed36e0271cccfa1f2bcce754415cbc5a858eaab659845844ec3549506d6",
+    "89e7b6d416379de85a002fa859e80f164a5e599eabcfcc4b5acf7d1d0bb8d966d960e18bb910ed4512ee1bd6eea9fb81d9098c24e299f263",
+    "54657374436f6e74657874",
+    "56c8460b24deed4c6a89d1cb21037c256275f20f558c35e439d5214a98e43714"
+  },
+  {
+    2, 33, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "8aa332975597c3c5185199e63daeb2b3de96b6307d01ec670287354d7090c9febf19617f18142cfbbec97c710875c6c5d2b728c4132280eb",
+    "7bbcb2dcb4b0228718b6f01609feffe7e29ebf11583106df319091415e54e82fc6360d7dfa6b482fff6690fadee2c6b85aca4eee0ccddb7d",
+    "6bdadccd4639d76f6a75148a173b01ffbbaac0396d39fd5bb76e7ceda46ea1afd115bd8ce24cfa165b92fae3b29240285fbbc6d4c90705ad",
+    "f88037e8f95744954e9112ae595e17182a199d85d34091ef2be5b78282792d88f4db54a1d4ab5825f71adf7200b908e752b3970881bd689d",
+    "3500ba3adb6e5592b4bd746b22e8bf59",
+    "3c7336d68f6e9b1ad104c198",
+    "f91589bae4fd9adb9ec7367e6942e51f7fd4dce40241f6b46a3c3f1bd6332e85",
+    NULL, NULL,
+    "51aa49db2c674fa0fba4b1aba7212af16b7b08166330149573680cdce0916e6b9a2245666af06ab54203e3e986365384306f677e47a73cbc",
+    "435ba58b5b6790935e4b108815e4fe6dc3cc87e296d3717631b1251c910c516799d6145c05352ead3afd820f5ade1fd07655eeb42d8bc228",
+    "1df5567445202c83908136b0c9dcb777ca19b36bb3a901ed75fc5a4d460c90b43bbf4a30e67b938c87fe796d9e63caad08715f69ed413490876cf5e0c0be73fb",
+    "57f1c4769946dec8d5f1caef27dd2b97dec19c10873ee486bfe27e4f2178f9040847b59b08ac740c18bc555fca466964778d117d6031838b",
+    "b0f9ddecb790b0866097b119b8252aeb6076d44f95fb5e9bc06c71c6db0d4f2c59a1bec8e11fc111792155eb0dd46b8de06d0388101016fc",
+    "54657374436f6e74657874",
+    "6e16ef83a1b33eb3823e3f3a9757f0a87f2a5452d2abe407f4731d94c653c60e"
+  },
+  {
+    3, 33, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "c8ae5c36571653a57cc199b17bb90ea5efa612707e20134a934bec38409913b362bf9fbf316da01f69fe33376bfdb940d129b28ec5cdadfb",
+    "1107fe86fe7d3c495919045fe3ede1c6fccce9975153f31f9bba05cac2ed85ea79b64242a463345cdb9713476097cd38000ac10aab92ff7b",
+    "71e09a0285d1e9a01431a4616059427f2d1d797961486455d080c928d05f2cacbe04174ce6c5719cf13444d433921d1045547ef632fdabaf",
+    "c53c1a583c3574b590a6f777a09376b36c4fbfc6804d277cb1350365ea9edcd471463622bf259daf73a58a6787a9e21e8ad4bd0551e3a262",
+    "d276d31e1adefbc7bdce57a0738b7cff",
+    "0347719316e747f1ed3d5ea6",
+    "fadf2b5bd48a97fd10599a6c7e0502f0233767b4dd7a93e47119716a8ccf720a",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "987cb72c79c992bb0a92b00ab2954d9a84fadd9a599fca2f78768b237a70ccbe7bb84b1662788586866fc1c5ad19c95dfe7fe972219799a0",
+    "04d5983629c10b0f6d9fb75672b66446423f3899b77c1d3c7b42793fed08781caf31c0b8f54adc5d22ba1db3efff8b4aadcbaa5a65f5e32a",
+    "4aedee0ae0a588bab71cbc8078bf142e1d7683d3adc138ec64368578f8942d8bb20b8dbff96028a212cc0f86d65ddd4abd4308d46f8829d2cac4097b214c8129",
+    "a370c646146db2ff94bf8e1ec3900e30b1751037cd94950395333d121d557cbd378bd6923594be784b5e0a4f883ca14ad2ff1ae5d74a9663",
+    "93935a76910608461cd0098abdcfe8d0cb806f271d241060995319e023f081e04b1ba26aa7681f6960abb30a4ef61b0f965fb7101228deb7",
+    "54657374436f6e74657874",
+    "939faf04795b38c5a4136564d24e04ff070446cbefcb9126c90da179e6e7fa37"
+  },
+  {
+    0, 33, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "b8217077a587f4d980c7feea2d6034d279d1896857beb957eaf138f360c8d77b1cba04f0b1ae44e72e41bf58aa07c425d0797f0045628b9f",
+    "4ae89000eb6091df4b18f6600387c3febd8b77f262f74b8e973c28e0fd34bad7097c69ad13bb6a09c62af89d488883faa67b73f4f2890a51",
+    "c604eb4407cf12aacfd66c4cc9710ae2aee02b1569b67d58b914a47cfa6b73fc26600f96207d7c9ac851e4ba7cce467648079d01621dfb1e",
+    "befabaac1d2743a03bfe21f0e171c11d780084fdd2971f1462de7f0e5d827ad45ed8b2293a82d7b44162439b3e9fa778f4554963ecc7a95a",
+    "14e19f216bcbc4f47fe704dfc843eea270d54974a9ec86a77c320ba9640d811b",
+    "8b6f664c2d04568aaaf762d2",
+    "a6ca25f8b7850c4e06e10748b97b0e2afc87fbba3c2e5c1024704a7d69187b06",
+    NULL, NULL,
+    NULL, NULL,
+    "ff4c150016ee5f9b154a051ddc7677dc4e78f4d6f7d1c904273f61d5a88082687818575b2e0630b7568d182f2639f8744168077cb3ce83b092d7804bffcf1b0a",
+    "4516b1d53d96f6287ac8b2adbca0c15115841c26ee6bff8d4430995b58cbd9c0f1628fd0b73a2844a092da7defb6cd091b02c5d646a57f3c",
+    "81dc7034d30516bfbce0a0730637504181416545d9f49910144dec573712c38b60cf197196ea4a69912af00fc48cfef76ced9e167fc71208",
+    "54657374436f6e74657874",
+    "ddcf3d00bdd2537cd2bf5c3aea15ab70cb5b163ffe6a49058d7fb69bb851299b"
+  },
+  {
+    1, 33, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "6c0b1af495eb8e1166b7d9ffeefff1cb0752fb98a87a696d66b6700ff93e8b267b629b37cefc504391fd7010e6e9395868d633259a9b49d9",
+    "c45d5053dfc27f277dc210d6a9c08b88672eb7962ceaf7d6378dba5acb4e02b942402b224cf1fd237910abc62f188a7a48db3f90fd893d7e",
+    "55fb747ac31b562c1ebecbe67b805ca3229a4d700173b2b323188cd99916ef79fffd397ed19a42f12793b99a6134661f372410b0d1fb9801",
+    "f512e685095563e4aecb3fdc49c99b631480e990a13996ebcea4116816cb4b4f5bbd1113ee96098d7252fd684ea54cf0c3ee64ac01aae3ab",
+    "e8036058ad004764ff9fe90da9e50b079af936103927a2131c0fb2f12aea59f6",
+    "5053d83aa9e4943c9d7277d6",
+    "3828f89551abf8a8f25339d88d6c3bece7504274326ca140c9399d2b103feb7c",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "09095f1e3a0dd824b2de5ae79723926a0bea197b4a5decebefda6a2aef17ffdb3ab3e9e4773d5f250cfbc3284f9aeb36697b15dff3e3a05b7e759327688692bf",
+    "cb29ad4ec154d7ead2cb72290a82674a43815021e4bafea2a1bd83ecc2da2f4ef899a70604debf4b0c26e1006c50d5c808f6f3dcc9f8eea0",
+    "8941b742736e9cb71cca9102b83ef28d5fce4fd4797bc6d2b74e88095f2b2830f559167820db7e20519e8308f964c36389a88a0541ce257a",
+    "54657374436f6e74657874",
+    "390b6f1aa233267bf10c60efce4c3a02ac0b8957f19a56ca3861e36d7090a36d"
+  },
+  {
+    2, 33, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "c6eb59c10ecd7a904e10cbc297ea9672dd6a4cee0b61e0ab91815cac8e053efdbc34c3e02b90c0e2c630e87e2eb2d9be9b45e68caaa12f1d",
+    "ea6d19624778df8951d7e44437860cb2b0aeec8076173ed3d45d6704fa2761e4317826b24ef7bf6cb87bba0dd2f0e519fdd460ca58952f16",
+    "ce777d61261b29770d11eabd4ce8a5926d143694e73e33046afecdd1ea6d92e857ee65dc3daedf883788d850fc9ff3a53a0a417141a758f2",
+    "8b70abe5e84d750ebac2e09112a3ac38a23e8dc28aec946e8aa7957f6a4d5b32a4180c6d98f13699629dc9b75cb556139d0b35724c0ba6fe",
+    "951e8a518a609d9dc778de6442709538c93a3d700d04d869e63b70d045182e8f",
+    "11fde49869f0a0f13c03a5ac",
+    "f42de42b885acbae636e32823485f804e7b233973bd2b188d7710fee0795c2bd",
+    NULL, NULL,
+    "624f3cc5a220b100a2f0077bb91cf79778bdd3b16a36c31c4a737c3b511927abb18b7d3b7c95990f83cde7e64ecf2f814596d23ecfc47ac7",
+    "77c5e5fb6a88b1e12a97b5c9c1ee22be6906159c07bbc7a8eed2d081dc8259079dd7d84b724fdccd861b403bc4729726de0be85c8bdab3f5",
+    "1d492822a8a88096462edb4b403579c9ca4d0b3b418f7626aba4438f166c62b613054f15d6cd08cfeda95a41ff8b6cb2d38196261331c4c5a3803b815784610a",
+    "342aa4b1d6f00726aed24cb3a84cdccade2c6a6fc8cbcef398ebf09e6a88e597b9f74cf144ab7b50cc822ad44981c8793cdf66e079ea273d",
+    "465269748ce839d35ca1c9042ce0e578bc798a6bd8cfa398638c6bd625c61a6b9501cf131349f783da3e9f97694998a72982d4879d45fce3",
+    "54657374436f6e74657874",
+    "5781eb8582c3617ccad506776e961a8870fcc7218839b928cece508d956f4fc4"
+  },
+  {
+    3, 33, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "2798eb814338c87e14b856ca47f3f3d6ec953be4835c6c8c4e0b651e431769405370c74051201f0f44f1d74c502902a7571626c53a620495",
+    "3686635799e49ee07e962469aaa246deb3332aee2e848470cac2be96cae194ef96e484d93f12942e8b240a6b95b9f7673308891053e17a99",
+    "cbc1f684ca4213d3589800116ff1bfa72e22f3076f7292e1295b8f98a0cc2adeb65b61c5aaf016e3b3f51ff6964f952857cce1aa6e1ef7cc",
+    "54b703b618635120cc1aed0015910c09a7b3ff1c75f49dc03210e25f9cd72ef3d123aae26bae960b4d5245c63ec8e1ff5261552668ecb4fc",
+    "5281a6c2efbb56b2f7241ed4285fe9ea0fca2fa50b580889cfe9a9fc65195bf9",
+    "dbd4628be6344767aa2831be",
+    "483c6dfe9690d9f8de1ff3a643f76d206e893ff5ff4619ca9ac5dfc71c502cdf",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "bef0ae8d22fd4f7bc978a07b4561ff9b26e48cb109f1137f5da08c46b99fbdd814d66cd449740b9d088ca47b9297d92c4f72656476c7701a",
+    "c1c4dd5e6c82fccf5e542d68861c7994282c186ed1396232b927206a075583bc46db587d3e8f429619d3e7fed5d44ab794a7ff8226ccf1e7",
+    "3c32430c641185e09a591d232db99c7c78a5a73899be31e47377a0bd0951feb0e74b83c570cce6f17a9370d21c80b802d87227bb6cf83592143fd9aca30de9c9",
+    "a87407737c19509698b4f32b2c71843b7c461b667df620053c2daf965bda1850439af9e9554bf7be5e27e9318dccfeaf4459a7163bf0ea41",
+    "c0a319e88cd40381c1bb9cdd3c74c2ac40e9a023133997376180c2a6241f911fb7b8b69b6798362696bbfcbd9f9a399c73643d030f870314",
+    "54657374436f6e74657874",
+    "0f147c1f6999fd42f3a3725a3a13d40320e5dbb1cc16bb932b61f5966e0f7595"
+  },
+  {
+    0, 33, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "c70ec25a5e997736b9c395a74a683fbf742bbeaa4cd93f06022462c150a67380c7e800609d1716d5f8532e731d1d2231b95d7a365e17790f",
+    "94bda07103ce810ab9bef5b3c4e76312b4b9064869a8594d08e6379497046ce8570c29e227e64cd7d57dda9dd6d3e9c3006fe23f1abe72c8",
+    "c64ddfde61fb5bd108572adcba96ca0a113a45eac9e6e337b98b116b052f46ff2d92d1aba0eeee1e5ffa15899823d25345147bab7274f3e3",
+    "56d9fa8f4a54efa5817404ae375c018fd7f4ead03730cfe8030dadb8607baf06bb2acdedd7796d4570897014eeba6b7d6b05b7940939bf80",
+    "4302f647bcb0bee815af1a991ad7cc4057ae9e378b006c2b862a8e3e86e661c1",
+    "4adcf8c45d079e82e55ff144",
+    "56bfafd499504d64edf66204ac530aee1e67a401b0aec3ea7ccfb78ad05dae05",
+    NULL, NULL,
+    NULL, NULL,
+    "0d3ece252ccb001e47224140b43435925e43f5d6b540f6f5a5ad93da02d92b6091a57c3fc859e4ab3d461b27274baf99050e59117fedb8acd1985b2dbabcaf24",
+    "ce9e5c87d4c79ee6028006d37f42baab9cc891a20c7a07cb8c4d37e293d18479e942053eb01992e3cdbddbf912575752e1979b713ec7e8d3",
+    "d3635df911ad963d5a2b758ce9b55b7af2e2d0a497ba925c8be77b4fb71534d8dc413cd16290b948ec1c3401c0c2e987269f1e6a641cdcb0",
+    "54657374436f6e74657874",
+    "f12a3e4d4b39ce777247eef171fcb0d2428961309711d82cf16245d8b77091a0"
+  },
+  {
+    1, 33, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "a95a6becd206fd64769fcf76b28faac3d7e52b545cd1f2e9eb7968fbc05dba5bdfcd6544979658a3fbcaac9c82cb1c3991dcd512776e467a",
+    "b52ef8a5894934a06645f8bcbcb718fe484d27b5bd9f1994e4c0c9ab336f55c04ed2c656baf5f45f4e881444a095476303f938b0db5fa6b4",
+    "6a235a423e95b2006649ebd4d7932bb1a927c7df309925e0762a6fbeb86946e5050e26608bbbedde5f7e8f80f5b5b18297bcb2bccff0176f",
+    "0f66e14292aa5afc74bf3da18329b11eab905e0eb32fe5181959b738f704460fc6d68cd618ddaaf08f73a5c948f3da3d666ddf2e9d373b8c",
+    "9fb12061a1fa7a02e489a06bda8ada3aecad975fe12260b9ae3d06c29f5330a8",
+    "8254fae617fbec374ba350f3",
+    "df582c27bf56952e026046b2ff9b86221e8897c50aafe86c08d7ed90bae63e7d",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "33bca4f15c8be101fec6005bbf5b2a09a5054caf03257e2d1d8898161fde08fc726d587ba00f52ba9cd3d05dec9fc8253054b6b1f19bd2c6a200c6f2281017bf",
+    "3298a68e863532fc24b5f10dc82c502541b12eaaf4d645e3bfb82395ae4b7644ac5ea07ccf1dc79d43c8bb10038d8f385a71359e6298d459",
+    "608fe9e61ea86ebef92b661c12371842a5dffdd4c32a01a7bf3c911fadac5bd6508be1589a14127f5caef327371822aebec642001b85d21a",
+    "54657374436f6e74657874",
+    "3ad68ce8719b87225d7bf1baca77adb0fb521f342408f5a1b73ea743563774fd"
+  },
+  {
+    2, 33, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "e7a7f36ba67b811b44d0b021fed67274f895cfd5bfcd4793a1ecfa2681abde2b017a8dfb44f859a2d20f410d070019b48635fef7cfeeba85",
+    "3ab544b27bbb8e09a7a4abaf71f67f7ff04c74113295741ea623032ac4728dd289661e6a1d0f850fd6f49b6ca4d308feb83047eca5aa6a2c",
+    "3e9715bb5997ca103085325b83950e083edaf742ed2ac9a2d6c88e82ea8a50238b6565c99875bf72657e140a3b9429202bda7651227b139d",
+    "989395653f469791e8ace5553fbd7506049a5142f4b0df4bfb503a5caba21fcb374c4458e606685a7771e19a84fbbd8b979b263e9e53ff1e",
+    "568d92be5fb16be10597b38fb82732efd13634a9e5441ec1f42ac6c164dc29ee",
+    "9b995c1946a6df0f6cd5f989",
+    "6509e5b43638aa036023b12c993cac5bd7341350685c62dd3b761098bff767c9",
+    NULL, NULL,
+    "831ab21d939c7fc9c4e692f51dc813e0510a78002378e977ffc09549d91cafc9414e02fb4aa634620e72aed53d1691531a0c600a59b67899",
+    "f8c34d3370f43c7c27bf3386b23c93e6849b78c32d25176b1509aa67e66e8ad033839458adc4bb74b15c697b38901bb54b11a1d4ce6877c5",
+    "0e8a20e01e3745f347ef28f1eefa0812a9066aef4b28f4adb28b391b098adac514d20eb6ee591c488ab9de89b8cb52fde9e605736cc8198317ac36fafaead8a2",
+    "6b650d09f40c56f49809cf98300dfb3083432152bc7cdd2783ead4ea0128a811bc6e3a13ae3e5c657609cfa808ef255834ad85411db9e425",
+    "0268a009c00abb420442b56cd7065228c26f9e8a59754ffd161640e896b833d959421e66e107879b16783f6a15a9fc39fd6df09e75c87323",
+    "54657374436f6e74657874",
+    "f5dbdbf9f63e89131d302b687f43780a92de3514bbc524bedb3de818b4c1d5d4"
+  },
+  {
+    3, 33, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "4ee65833d14d0ffa9e670b94fc8f64b49208262c9e8f9f544a2fa4353d99aa93137b99c6e703a4d0b2713d5cd3799418b3b23be266442a58",
+    "ef27fa3ddabd365b91a6adc7d38d7210c81317cd2ca648b6c5e95cb757e315ad86c61b299433d3e86441d097fce3d6bcedc967d32db77984",
+    "802fed8c9e8dfab9d2b4f84a368c0ab6ab8cbf0f4595a2aa24c246b6dc7b1239023c3a457cf78182507466d0430a358a383b33dbf37a99fe",
+    "0c634f9bd5547923fc122b7291bdb2234d310677892828149bbff104cc8e31a2d8765c0707fe58daa768257d6b64705d389d31826a6b419d",
+    "cc453f24222a0051b555cbf2454a74c405dd240d6e7a70d0e2adfd40c4faaf0b",
+    "58065fcb2ba37e0945a53db7",
+    "a8f80fc85c76e30ff88e0d8dcb3ad46d8664c8bccc06ebb4d6df1e0d210cc32b",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "f2e136485f001925ab5a4d4c7715d84f658453e2922435420bd77160df5cc27f5e76e8ecf21911acecd3c78170ce02310c562e3ad9840af4",
+    "3a3a692d85797d53c0513dde7f1c483de77277559f6b8779568b857066e46217e427bb14b041b5c333f16de596c3a976183dae5b0bb6b212",
+    "a82470e4149c14882b4ac24c6c20456ede0801e9d7f908f1e6393ada5c35acf18ebce2599d5327c6ae01dd1ae80686092793dcf3b5e9b4bf7ebaf6bdd8f4feb2",
+    "47788d5e4d665f34d3a20b165788e2acca4ece447ab106bec366946b41646a5d0eca436c6cdebc14103eca35017c2d0f8073e3c14eec432e",
+    "543c5f4943cb0812554172f952c030733c767ab2934889200000000000000000000000000000000000000000000000000000000000000000",
+    "54657374436f6e74657874",
+    "51c5659a772834d42e8c0969ec1849976ed842c25fc69add5b52d601aa1d6fdf"
+  },
+  {
+    2, 33, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "e3d4ba6d08493787a4cb8e815639ff37a586e0f3d248b83d1e24ca4ca7d7086646390edf72b07d9e8234a30425b5f7853cb9c0a692156de0",
+    "24b518cbb90dca7b9c9ee8cd44ce743705d3db0cb62c7b25dc4c45911a4af59d1d514fb9b0b848540f8fdb029f7d547d3dad784708da46ca",
+    "decba1629939ec19de5ba970a65939e903ad8bf0de12fdefea3cda538f4399d0b7b3566205df1f07a02a6d997c3c0c8ee80d1692eabcea56",
+    "d183d9261d3aecc1ed7203f6281fc05dcaabd5cc4a6c946ef02eb7252ba79ac605790696989ee4e32f1e6d20ffeb246cd8f4093707c177fb",
+    "",
+    "",
+    "3c89edb3d2510b08ecbb250b2184a767272bf86bc6c1191f6b79e5a3b30258d0",
+    NULL, NULL,
+    "cc9143b9430e3869b40c287f7db3ccbbad6ffa24952af770e6d0a478ab5591cce58445205e5b8528c6afc33a1e8cf1795f555622b8e00c6e",
+    "2f2e9cea55f428b7ed841da95b50a1b75016db4e3f5ff76489384a07b3512611b642cfaddccf3684595305179b8c401da30c06b6dad91656",
+    "9ffc6e0f3fdad2d69f94e5dc9663f3398abbb8d4c82afd063a0bcab436a40561f18d90ed0c53b8a41bf38b79b0b9da48e289d2ccb209e236ded06d5e154a074c",
+    "597c075bcdf5b29a07b0aeed46afd82bc5dfa73633964f1c2a5128b7a522ac3eb0077657f105b62e22fd4fa2487833cf0610b599d44a641c",
+    "e09e98faa275b3cf0530b525b49ea140f08cf90abfca34879671a0930429685bb55204f6720369c15bc718dbd5f44d1a67d605735b4e14a6",
+    "54657374436f6e74657874",
+    "7f5b9b4c35ae1038e8def604abbc402a7f947966c76522b8e8b13e01aeb3cce3"
+  },
+  {
+    3, 33, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "c4692f670323b205cf696e1b12d9930854dca24b8caa1b109442d1dfc36bb46077ada797704a3a089273431a28ef1144f009c6bd8617c246",
+    "394b563e6c50b482b229e1802b279f04571eb887c449fa2f79ac1a0b30c56e97cff75cb02ce73ffc3e8bf4329966e933375f0cf4bb824127",
+    "52ae9c67e7d194218758ce16945552f65f61d8ff12fd0f427b98a8f8875a111359c4313773275c12638de1d737f4ae041ec1e2e803bd5bd8",
+    "1e86d571df884a080870dff9504a65bcb7a9973a536c15f9ac86b328ba094c3769a268d6c8e7c2210f26c3d1d7bb2e3b10be87a702f467f8",
+    "",
+    "",
+    "c8cff5b79308f3d62a73774692ffb28a1e6e1226fdc12aa11957312acf6c0e72",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "6ddc58241eeafae58df984bb58670a24f0a450156c0e254ff2236efb284b2bbcb7ac88d9fe7199e2df352bd09936f7d1aac3a8f8e4852d7b",
+    "0350c6835e0413d4094e9094d4f6b8b9728b2d60d01904edede5ea631be7997b9444ec6d0095ed0ca1f630218132b4af5176571ceb778e5c",
+    "18b3bdbe56a170983249264db97912131fbc9ef2593fcf3ef37d13ee079cd9d230f4838f2bba3d0966092028925dbd057836365713ea6b40630623f024dcc5a4",
+    "c4ba3dedd565e618f0769c2621db6c960623cc86396b9f4e03b42af463324dbc39295658572c538a5f40e6369cdf57f2879039bade32a4c0",
+    "5be628a9b85c32dd14f47a72396f366badb75ec168491879aca639e205e84fca9820bd2ab6aee73dc9ffcaf6c58e42fc5728d31538a1effe",
+    "54657374436f6e74657874",
+    "76d035753e462a41b9ea2ed1c3157a8fdf2f69cb29522858fe7f7a483bebe156"
+  },
+  {
+    0, 33, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "119ad846c810635111122b374ffc246e3cb2f65f386da982609723f0ecb3293b53a394f35bb674fea3bc86542c7b173322518d1bb5dba4cd",
+    "f862acee5e4c5cd7972c17131336f16592705ec1f3f5e5d4d8bb683097aba592d5bab308d77c98ffe46e9fb6475189795bfa68f27faf8153",
+    "b78deed63727d31261a710e9fa65f1687daf1d5fe115145cf92c9e21b734964ceccadbdd7da26d7660c5084f36e8a0dabe1bab51307c9e7b",
+    "06bd67405342463a37d9b87c6b003febc253bfcd94f7211b7b6358f1593a2d156d4106882cacc836118abc86cd75fada64628c3ecdcf29c4",
+    "",
+    "",
+    "c7dafad0ad4c93d1673c31cb48b941c11c722a3a6dd9920903898b0a4071e038",
+    NULL, NULL,
+    NULL, NULL,
+    "3c770c37c9a14158ebdd2be64dbb612f1441b8f3c523f3cb0a95a1d01f8c8210a58b0ec265df6cc25b026ecb311d9acaf397ed4ad9dcad00c15941faf1759777",
+    "828cefdb56ea2d8c352051f526af238d699c8d11f2b7bfd12af5bf66c9c9331419e68bdd47d6ac95ac8703ed64b9456ad5b2950158cd5f62",
+    "9961bcf84fe5dda13e56909560105b19aebfe4b567d14f60b1e4956f0fd380736f3cd44b9f9b5c0237956458fafebe0c711d8e48a15b9bb5",
+    "54657374436f6e74657874",
+    "2ea59ce1213bd38c795de75ef3f322c98fee8da66ccbe9442a9d114d54ee0926"
+  },
+  {
+    1, 33, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "9aad2f6ceb015a9d492ec8f3ddcdad5451a344310910ccba512992c59f906f3d88b53049d08d64c2c286657deac152db861e1899525f8909",
+    "fb90712a77cc381effd4afafcca104d6b355138ae0494571a4abacf64ac1bb2f496e5b1c01fc3860789dcc3ad5b610a86e4bd3bcd2e394e8",
+    "3edfe68a7987ef178ca81678258417fe3d15d4335042c18d3d90c18ac41c9582939ffbecd864cd850a62d939db29afea7a75816a19b78134",
+    "33a3e684cd8eb38c6346c8c0fe7d9142470157b28969b1ed8619c1fb94d7fa7d3f74ea506087540b38abfa631cdb3d5f7d285fdef95c484b",
+    "",
+    "",
+    "0085113dc6c7f66dd6c344056db13a8be3c3b92a0145735c2c46e06fe0c1e2d1",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "962f61e0b1dc7c2417612333d740eb53e419ec32fc61bb1f490ec6ea7b784db5601e14008d54b360c23aed92899e2fd01867fd4462801d2633438ec4239804f2",
+    "45bf39a645fbb6669d6981a3ec14e0158a5bcc94232ba1755a949152c5d5c3c615ce745a77274ed8e33bc9b686c251cb995662ee17c54268",
+    "1d8d7fbe0b138deaf54ddbd806fb32c0e5d7ef73da400918e87e3526d4efe740f572db621b8bffc1e4b42ce5353e086416fa7b339fb513fd",
+    "54657374436f6e74657874",
+    "a8efc9af050a0bebdde5437874d56dba66dce0a0786e7b8affdc9f5ac725dc13"
+  },
+  {
+    3, 33, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "e932b05161f2ab2de7c7e9ee7da7e9ad5a6c61b1d06bb5fa1f510d8066b974a1a7905f83908e0e78b50224ba45b1d01f5e719358b1930ff4",
+    "78d6921806284e036415bb7288995a8edfb6378ed27bb4fe119299030c81227b324afa94d79963903240f2bfddc9d8963a529578ae6909df",
+    "47b06ca32bcbbac329566113c27752ba508bc89d8c69f8fa8d8355764ac1e784bc20212b14981fa2d45e82d77b9f7e97e0d468e1398861f3",
+    "1825898c853f498c734fb5d657ceb1d34ccd3e0d8d73eb6306be8bfe7eb5fe410916d61463811328898ace64ebfddb960f158ba8031d76b8",
+    "fcf4baa0cf9fc4fa01ab2829fef9f087",
+    "c88b7e625d7b6ea3e834866e",
+    "9dc95cf4fe755e506a8dca9ba68b6016a5c78decbb298bd57e3c1acc1f4be13389c26ee15add9f52140aba723669c86a81f0b2ce528a3f9f830b45a340d96401",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "906a22a7b4eba6e3620646e9ee036b1b9ebcf8f914cf5a0e2dfd32df67d866715ce5c6f90fe0b30e1d6fc6e2439d62239f77963e024e9257",
+    "e9f06289c943d691d24da22c112e261421de8cb4e281ec1b60ce99b3ace245dc9d6031346b35829956acba95fd95b6f652c764e327095f2d",
+    "066fe8b6193b3f5f31e8727711fcda2670bde7806b85ab30f530f60175b544dee3bde5810ae7b38deb249611462eb2ba68717e09e345e442cd10a40423cb3fef",
+    "da4a83ad6352dce79b6a0d7a96338670fcded42abc00de8cd155086a9d0dc91bfe0961b0645279f68cac01b6c99666861331a36ed0b88305",
+    "1b5825b7e4e12ffe9850bb1d6fcae6c1993380982cfe3b328cc0c83558aca1e05fde8d92f0ae82308a4c0167970a9c3d2ae4a722e3e56ae0",
+    "54657374436f6e74657874",
+    "14c1213dc56398617089c7369f6b7bcb42f319f38eb8d0645ce50bcb37e6b877"
+  },
+  {
+    0, 33, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "66614788404568d059741319ed47991d42a545a56c2ffc51738460b4338342aa4ee6d48a4eaf6b4490f86185cd17f443925964f3dfbf03f5",
+    "b59d33ccc522678b38224e14f46197b9f3d54d23ee6f3d93b971d6901863038b6c2d0a1ae85cb0b0f57e6f738a571552a1d4d2a69321c4f4",
+    "0aea40233b445e66f997ce3efe0584e4609b9f4ea217074aed73fe4b36aecaaf55897530e55bea8cd18360ca4dbcac0966cb3deb8f5aad85",
+    "f283abf2888eda7b0db0f1bdbfc7f4fad526041bdc6cc8a3c3a6961c926bd2749e9b243c31a76f830f99aa2ac2a07a3391b7c94c18167838",
+    "7acd507e78e52c19d8e0d77046e97fd9",
+    "ef8694a7ae7a9c221d36432c",
+    "6b0b03ecd48acc6e7a9661b2397b8cc66fd5bdaedc584250bd094d39badf4a0599639742194d1678337338d6256bae82b529fdaff13ca81467552cae3b83c115",
+    NULL, NULL,
+    NULL, NULL,
+    "377c79f666ff19c3bdab01902bb4321d6ceee377fab181e7862a4f4b08bc0812b018e08cfcc94914b5c9b4139fc0b5d0078dc96f9c901634e4c45f1139ff92e1",
+    "28001d9a01eb2f2738a713d4785d139b8fc68a9393eb4e13fff9678c83fe26249748c692cd3f7664b930a40b37906131377f9481ba84a885",
+    "e4228208165477bd7e6fd51dbd5e1261234b4e5de5e83643b99bee8d4c6d76e0e702a14535b3f7748399d5e95e6abaedf88ab9ed08e627bd",
+    "54657374436f6e74657874",
+    "1293be0746dadac170a94e56971204b34b1eba8375f1e8acaf5775f171796723"
+  },
+  {
+    1, 33, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "407a582531f4d45125732a39a315fb3ff1665e0375cd1b975364474ccf9fa83f7b8f9b4ab4ed154619bb4130f299789bab01473884595c57",
+    "ebb63c56b0e8248374a87b8cd4ae3fb3122651bbe89a7fe614972dc10a89a391e5d32429f1c9ba32a7b70f936ee5a285766e7480714fc923",
+    "4b0e5a62bedd3ee8ce257f048675980a2c9431bc4c2b3679887e3675148a690376c5f8ab73fb5db1d56251cdb22c2d7dfe3452a3c1f68886",
+    "7b6862262ff4d85da11998e5d10b4eba6c2540a2c3bd9ddfb4700b251988d310b894922de1fcff8556329e0dad7a676e9e82f31ca82172b5",
+    "39f795e15e3b297f7cb9bfb533c14036",
+    "ecb7926e7ac3de323dd0b6e4",
+    "49bbe2cbbdaed6e3c4ff5702a53a0c18c638052cba22a18d8854c5c3603a964bf0501ed548febd35da3d88fcfa3c77b8cb097258e80759441cc38ed6ba608408",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "74e8c9b3684f742dccf142a8a65999f3ae7b8609bc6a2af66aca1fb928f537a6dabb19f8b49313bb1066f795e1719fcc1bdfd5e4e314305ed972122d720a8e66",
+    "8cdbdcdbdef748c6282896b51dff1c92e3d6151313f02725cfe4dc69da4ced34cb49748bc7fd987158352abe9f0638f79e6751fcf7202e3d",
+    "659d357f67d539ea93e85be062b62fdd1c1d805b2e60dd3617eb86b8a3e135e5304fcb8b375df7b44fd60df053ca3c93f9ede651a8c5c7ea",
+    "54657374436f6e74657874",
+    "1242eb6b4aedb5e7f2c5d996d109b30e446541ae4d5864eabb268448d7170cae"
+  },
+  {
+    2, 33, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "5f340db11681ca2c98546235ccaaf5b20f633ec750fc09c353a28df0cdd851a89d1b31df61e8b5450b08bd77a4d3860116b2e16f8db358b0",
+    "7230e55eccc935b606d814b8c8f52c5652f2b77755ecf25f27ba748f4b44e7c9035efdcbb62b8709d0ffb52008530809f607931277b4cc91",
+    "169096591292f2dd46698209f820eb3fee58610c801d375b7ab1d05797114ab6efe206a026cf55209ee3e5be02515c2395d66e1ffbb8d7a5",
+    "20e9cf8d559daa347d71df7e3c18723f2e84e03dd51dc92b7e6b481659d92a2f10afb67e9792eb3e867af4080ec8367c56a832638e04a4dd",
+    "39f928fd01ab69fd1ae98745d3d5cee2",
+    "e763503a1e4610955b238414",
+    "5b25b3709d57a5d1acbe3fb78ac63db0f2aac095206ac5a9c64f63a55dbb4411338f083809660e782fedec79ca459fad155ae15abebcd959e1e5a5861e2fc7aa",
+    NULL, NULL,
+    "c04dab742a70bc1626d85013537c7595997e774c12d1b48b938e05e0df26a521fb519c458565f2dd062ee3c90310f7762ba8ecdfeb26495c",
+    "a79d5ad1a19152341311da382aef909216257292165ce26e1dcfbfea51c7e2bb06ff93c0ef2a419be3a9c84b2ab4dc109ebee6e5094a0019",
+    "72b8ee5472ab3759ab36cba38f262e8d38465fffd68361591b00b30d77bbf488d5f72b0f2174dbeba18842f4525dca95712351e4d26d3dcf37ce1e7e86ee9fef",
+    "d0eadd52d001c27c4672a95e2acf070a0de416600ac31a8ee1b523b748acd13241a25bbd19c043b5d93a7eefeaa1e2ed213edd4921978da8",
+    "1263af791f251d642bff5763141389f31e4afaf77f67f420b51e0e6764acfde0c618d0628f91c4d4151b56c646c4c683da1e72caf476e030",
+    "54657374436f6e74657874",
+    "baa58363eb069726ac344933a11b0bd82292c89a1f5ef75b393176886cf379dd"
+  },
+  {
+    3, 33, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "c7ee35fad5e4f037be232a42ae3fed719cabed1821a36bdbca6c0744666b8c89107f6a45f446a03e03673ba794d277ce853cf611fcbaaee6",
+    "42de52528e201c54e957bc3450483b746c823c5611dca14e72d10c15becd26c857809572de29fd62f85ab2b7be58c1fd0b3e2b71edfeb80a",
+    "ed3d98b01f655e7b018dc5d5e4db776eb586e2f32b17e89cec73ddbe17992b76ec7727e2df9236045e91d54e4778bf43881747d9516028e0",
+    "9d600d585e200b8c23becd299ec8b7d27bcf5e9afb5e73abd3d9718e730af9260f7ab94e2badc10e1b6f2592232a9a6edc19fa26e75d4867",
+    "38dbb92d983980b56701a447e5fa57cb2bce46802fd37d36b832f8b6040c921c",
+    "cbdbb5c8aa3799f442ee9e39",
+    "8abfee6d498f464a2e9857ad9fa23b9bb10851a98e6a7bb4b92a3562786cee90aff55722b677cf9baeeee516e92be25d2b0e0b0e4727381c4aaa867e2106d65f",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "c8624a594b38255672d0a64da532e19c690f8ac596a8691b702922f4b35b4132b3fe737f0db787ca5400b85f8a439f9b4147d9f8c395fecc",
+    "7705fe76fb3db2fb7dc6234aceaabc6156997a4e6bace550c60942d7917b4df5d4965b0c4b6fa1b1b764e63dd1a9774e00887ef4e78b5d7f",
+    "28da730fef73b72d4b1317b2a111107a4a8644ecdae50c9cc9bafd733f8b68a6043b4730756c374ce324e314eb3f5be82dbaa773cf9423242295cfa77c89d79c",
+    "a6235e664b75eabf4bb1b94cbe9c68e40e3a4c289ad1d2304487a2e064538b91a7b2c87cfb71746b4837f61b284a268ba5a639f70abff8cc",
+    "e0c80e89442ea1bb8d19d98baa6daf1e49ebeba73f293b916857a99a29ceeab0a33f5c37aa6ca859486394dadb613f057208bf9646909d7c",
+    "54657374436f6e74657874",
+    "1db995dafba45d278d9a0c36c90ad3163b54c827cd933fe19798da8482fa6314"
+  },
+  {
+    0, 33, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "d920db89afdb25df110a44cf0d7dc4e4d4b74f09ceaba5e76a12d3cafefcd962e244804a58bfd12303732be21d511f877ddc2ed694447b3d",
+    "c4e72a57af1640806c01617b947ee6d1bbe5eb1a5b4616fb705a5d2ed30b7f4317365c504249750e090805d44a2ddc2970172414a90a09e5",
+    "390f2971ca97d513915a2bc5aac0cb81b832d9424d2264eaa9e868d80862edd7918276883a8d0434309e049408fec2340ae5799702f948d7",
+    "9abfbdf9132c22e95f4d25dc6ae16ca1269d3692e75f32e3aeecd4aee7cb8edb4e26da9422afb940c42caf388a1d1215b405795a28d43a60",
+    "5011eed55726d94fae0cd116b80e7832ecde3a457ef816a4a42f862ec2820ade",
+    "c9899ce0c487a96933695f69",
+    "775a6404afd0eaeec9e0806a55332118f5fd7ec983e1cbf69d0fe9ce197d8f8ab64fa31de4b7f4db637eea2157a6d9c294840ad4db7b3d2542f310e04be2bbfd",
+    NULL, NULL,
+    NULL, NULL,
+    "081f8572019ac78daca420cf23c5183027e9bdaa7fe4b5f8e55b2ff24bc5cdc8bf4362965e6ccd2b832af12b0ed6f2f669b15b42cb6f4361d36d99b88b7dc5a6",
+    "39ed47496020ec7c2afc214425fc6a15fb6f1e16759c2b066265b6624c84ed50ee6c3129d9ed71318b19a96e5c5cc6b27aca5e1ae9cdc7e0",
+    "93e714430d3cb00e8e8a03dd820dcbcc7f0141f93c63a7dede2dfb152b5b23982a1a55f2d86dd9e0f5a0f53b9c21605257ec1349d7f89e53",
+    "54657374436f6e74657874",
+    "419d16ff65523a00452d37ba2fd5f2b1a9261aeb30f1b1736cc2f3febb16c884"
+  },
+  {
+    1, 33, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "2934e6cfda250d153cda5fb2bce3aa1a97792f3d07e625057370b2eef1c83836d2ebad17239ef6fbcbdf88e0d45f6f88fa5ddbb1e3648c98",
+    "33e82a078b98ef25c903ec4c358445a0a7bbe943ea63d38b8e06d3b90a8564bd8013824d48988f0b63dc6d262357bec1de7961f17b85cab0",
+    "47bbdd48e99178176f58289b3c6cc2bca1fc39576f671aec3d96a2f2801e328446c62f0bdaf6d6465eb1ceaec310853e76bb08dde233c104",
+    "df8e495103958d61652e287eb0a3db9dd1f43c4d08de2ea6dc07ead691862ba5efdeaf3081a5370611265ca50d2988730045dda943a5a5d0",
+    "88eccd78107f504133e82467cf28e9b5df365b8f721affd2e74813f533ba68bd",
+    "d6d3dc03d0dd0182b77992ca",
+    "39f49a049c608c5a5b89029fdb552b8a203e3cc64bd9d871e876a5aff994d9b6d2d3820520e19b9b4a58fbb8c618c58e55bc96b55e7bea0fc22e78c74f4e5fac",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "a329b2a09f82c1f6e951b8e2c2db0109220e3d6c8f7326e8e234e10b448401919de5c0e1a0aa74e2d96a59b6630a179b8c45935ccbee20765a7b9da81aa51999",
+    "2870b40c892dc1d110309c27b9e9531e3bbb50bae8e07decda83f7d9d2c9a1fe18aa4b7881c8278b006a27f8c705b8e75dbca9c5f3956b29",
+    "a0d7afcf2ce0b11135e6a7632f92a491f9c58afb6b90262ef50ecc422d3a666f69992cf4a54a70dec6ae29f0fd13f01c60334bd1d0b548f8",
+    "54657374436f6e74657874",
+    "771c2ea82258393ff55bc9517018c5a2e2f60ce9a7789178ae202709d356032e"
+  },
+  {
+    2, 33, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "ed1edd4783b6ac84d2a44d30d65ee03f30453a8ac210b16c89cdc2a34f89715d435eb02ce775567768f9fc059ceceb90f447093203ef8de1",
+    "f3cbc1c35a482ce6b2ca5b326411de4c6a3dba2ab872012c220f54a0893919e5c3110f91cf96eee667312620e20fa637970d9cd12e564f03",
+    "92edc3d24df7517ef897b3f139d4f200d1b640894637c20203390b4cb8b7a2098d8e22a46630d21ea6413fc788c4c29469407240f7cab9a5",
+    "0c2285ebddd4dc41568c651c0b9b43768e79170226aef39636163bed641896083224cf6a381c3e897fd510ef2cc6870332605ead83fca644",
+    "57a79f5e6d9523748300adebbad4497e1294b76b947c8827ced1d8ec2454f085",
+    "c670655429970de87f9ece9c",
+    "9a55848cb33321279335a1b49ffcb2c6ecb878cb67a294b2ab0a94317a5676932352284d4de7cfee9a2aee6c06f709e4da22007c6f2057a6f948460210142a0b",
+    NULL, NULL,
+    "17a980c6d157cd76dd6f280cf6f51a30a27050ef13502a20907eb7918a82064ca1be64bc223c129877c7432e33479fe43d118cf76e91058a",
+    "4ff9a267051e4c818a4977453145582aa0771554fbceaf9b42587658cf705331c3c9cd7f4edf64e242d4b9ce4e7b05719d683678860482e9",
+    "8e1d19fd62f5500572e4776d767e109595117194871f7bc5624a5633a379a8f5aa1dafaf43eb728f1fad7b562e3d25a275fcc6f50ef0b02d53bb17dd560da00e",
+    "594f4608f2570cdf34c7d4e015d89770f18671c42845f8a154f30931bf3ff08fe65e0eb8db330056761fd1c604d3b227ad61df504955430f",
+    "8ce253179fdbc6a04ad80fb469ef659b1623d3109dd85f3e163e019eeb02c9bdf88ca11891fdcbed524d23dd93e54453085be5c57b961d5b",
+    "54657374436f6e74657874",
+    "9a084c4f33bf9dc46ee6a04e38514f50a1a31995a8dc06643c9ba765cf49dc87"
+  },
+  {
+    0, 33, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "f2fdb31a7829a6d2d78b9d8b670397457c92cb2417af37dbe0c1c12a9547e4eda9fde09fc3fe0f359bb7b4151e8a6fb592530af71d9dc0b5",
+    "c2f51845154d6bb6917e44ef0fa0a1fbf1d80f61d199486e75295e8a7e50432d548a7f8040953826c4f1bce79e433dedb4469391c3cc98a1",
+    "3d4f6aa08c635205bcd96a0791695d08638714474b4d2c0132b69e25cdb826e1a2a84bc0c40c4fc75f52051b034e0afa82b8457e28794f92",
+    "fa7562b37eef0c60126a0cac505c9a8854223794ee5c195f44ede823f9a74c41697c8927d056f8920ba7e021bde91b749751a1253a964aa6",
+    "87ad565738a70049699288c975dc90faddb076f6280136cee4c26c3111f64e0d",
+    "b76f001f82b908e92ad2639a",
+    "d42d015324e068d95aa4e5d3dc53a7165f4963a5c30c8d073ce286ee4ecd29e37df81b897e1698e943d4273397f860299c37db445aafe499ece9f6cb1bbfb768",
+    NULL, NULL,
+    NULL, NULL,
+    "cc20a83a9af44bc5a03a53f06beb01af474d5a85dd3c4f2082197ccdfe32a275996e497433e58460726459a1b40e31e6141e1fb605fb8ae0580b90bd7398f318",
+    "178e4db14a03ebf5b5205e11a3c3918431b4d4bb143b62a52bebdd61d107d23122868395cca3dbc46e98964d4c1dfdc4b0e05cbb2934d9e5",
+    "1a91ec4a112661d663caad07437e07486dcc80b499c83c6bf17fb2faba77c180404d983bd32ed4284fa1aee3bb3887b61402036b058c3c8d",
+    "54657374436f6e74657874",
+    "f4b7df9f1f608657f97084d9847cab976e88083fd2d35f3636dcaa9a14ce62e5"
+  },
+  {
+    1, 33, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "41033113ea776a299d8eaf4354dd5477818c8f14265f73d191e3252568f388d1b989e716008404cefa00745771311531d0499f6481ff6f42",
+    "9e01ad4b9f9a1170dbfac72f439bd97e3f01a930fc7daa1535e0e8eeb66ef654816ac5dc219b35c1a6eb6bdae0d69e63750f717480e69ecb",
+    "75741f5d9ecd9ab8b3d15666b5856d4243bcaabf27fc588f5bd468a753af612d306c0492436b8f26291e907d832c9ff40504c40bbd90398b",
+    "0fe661eaec30be6399ebb6eab01bdda3b17b1d4d96eb937f8838671b07040416df38dbdc2eed33bcd4be66e58eb30f36bd14f9dbffaf5e57",
+    "dbb43009e430acca43e9f35b103e01557d21b8a67dd0cbc8f4a0a5a37bcb1337",
+    "b3149427bbc69e27327f383c",
+    "a36aa73981119571d244a76f0b89a404a40be82221f8c7fbfe644b3406e1b37cbcf175b7a65a1e3a3cac164302c0239e8f9c24f7206e8c2528f22f4b2fc2fe64",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "b4155c5a688af2d5e64f314a289ed6280c505865349e2701ff9bf17de3cb306f5f3646e6d32f3465d4c08ae41999f9345313b665fff90e68273742439e17eca8",
+    "b7ca83ba7dc1b760f4cc288d3fb7a0a0fd8ff1488a161e69254dfef16e2f062c9206feb81b842c622d94a8c4520cef0f2b876ca5732bc3dc",
+    "4640f81db9dd5ee1d80263c4a72728025fff429abe005d6baafc9d02e9ef5aa46ff85cec12ab80942517034ae6a0db6e0b770121801fd7fb",
+    "54657374436f6e74657874",
+    "8ee0a10d83c0807f3832a6db6f5f33c5824a6759ae924b7826bdae65d6489fc6"
+  },
+  {
+    2, 33, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "9c561c7c3d41e3a66cc914c799dfb5668303c4d1a85cc454feba58352a3ad3498c4e41bd6d320570b4fd01efd7aef2f00952ae1e0049395a",
+    "0a5586f2c06b5d7a3d311f6f67b083ab407328688643a907069d5dca4fafe56c1ac33b560a43e58a01eafae32b0788f009f00bd92d0cdcc7",
+    "7ead564cb686f604e7188879d5f99ceb2d254f856870b9241337d5da9ffb06caa11df0d42e93b2baedc9cee31e7c2a2cc84db1f85b3d5a47",
+    "09bca5604fc75f3e964120d246859a1fc02877433cce0c793a2da0f7e50952c8ef40dac04eb89383ec32061fdec77850f6248f6fea4153ea",
+    "459bcc9df3d480b8323d558f1fc6909bb1bef3eea7b996c64e97ee4605c2f6e3",
+    "fa64ed7f04d78bacdee5e0dc",
+    "e5f15f90064b627ff6892d7804d43c9ec9737db85d0b0993e8f8bc40a6eff74b3016a2198400d7e6e2a604b30848caf3803205c81316fe6a013d15f223c143a4",
+    NULL, NULL,
+    "da84339b04c25dd373a76444fa5fd4528594f8955b80f99d01cbfdacd275187aa83a2919ba13dc5f6b6fdca4a4e07b736276aa6afefbfb18",
+    "58a37ee25f8d9ad8b9e898f7cbe4b8496edf792252e709fae1abaf83ed2e6975943a19d31f8c0079b146548d50f34899663bc24518649369",
+    "ec59b59ffa9829d6aa08afe7db6f2cb6117f8eb695c551d6cd652c69249a3a58bd9f1c098820d580bed15b14e47de53453f63a89489055f35a9fb250fb2f0b9f",
+    "c5b7f9eac5dcd7b4b5ed8a196e5860ca006d803541de8a447a722305aef7d0e1821150f37bd6c379dcbc3cc3c4d750960ef24093b43582e8",
+    "0b032c5f415e7158cadf0c8d57817781482953bf6c980c23e93eda3a6a3743786f4e225326fd26d97c2c42bb9776370c436756c3dd9e3c89",
+    "54657374436f6e74657874",
+    "5f56f8dd5c61a47ba30dbe92797f5ace73e7c29e2f7f51dceb59eae74d7bcb77"
+  },
+  {
+    3, 33, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "3e594e34092e43967bb2de3ff8238240ec42ac0ead806f220909ebea97e5bad54dff5ce4e42cb9fec8f9e1080cce7bab3e432d6c4e40fcab",
+    "c6c5c40c8d6e90140dceadd36207a3663d63d1e3c77ce66c64eff2f7842106b2e1f7eb27308c1b5059937dcb1d0219ac7aada27641913810",
+    "154435de9c8b92bf3619abe9ec981b1d4116b77fdcd38da89d0bb6e0dbacfe1921f08e8afaed9dc2972c14c24516aaa9de168fcb14a65344",
+    "78822c96c182f144f076b84bd2453b8d14318b3677dbf991513517a8dad512e947433ba387c14482a9aeedde292386c3ced1b1a168c3346d",
+    "c4f74b6c33abac5e5d38f8d6dd7ef2dfa22102bf1183ddd3a635882ce328ac83",
+    "3903dda4a1f7d6f915790a0b",
+    "afff14fec0130383cc29c6d36209271ea5f6fedaa91b46dd1b58eaacc27cd208113456e84a774bbba159addf3c6450af0ca02e2b4067482d92d84445a45e0c92",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "a30529359f7e0c3d9ff9fc337ef7e58bec802f8a70c1e5a79eb7b0a86f37225c79d337f8d450b329bba26a2afbfc807fd3b6061903ac650e",
+    "bae3d60bb34fa70342191b76605d27b3a2efe762e48653516bc9ce1d0e9bab920d3cf3da28ac6ab062495037af2a8f5a95b3cf943b29e499",
+    "31e8b5febfc8894e74800635f796de9ff7a2dfdbb7d8eb2c54be131572b6455886808e4a862b9c75a2255811d6284e18c10c6ae4d144c62a26760fe2c07fe6b7",
+    "963266c3f339c24f0bd233a2951a8b829efcdb7b598cb48b6c5cb30446f986ffc2a78f3fdebab08c58431f2b67c6beb4a2167e9b423feca0",
+    "abb2f8e7bece4050fccbc8ae0a70ea83bb2d829dbbc20d480238f3226cd8f42a93cc83e72010fff033c1638a20421ceac4288ca372d2c088",
+    "54657374436f6e74657874",
+    "65bdf3ccccae2d2b1dbc3fe2939b4a88d43f068105d149aca16356174abe73cd"
+  },
+  {
+    0, 33, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "e049b8fe98be54332bde59c76df7b178bf10b5a32b559f5090f29921a29e0d528b447edd468ac3f47e46906f791383fef836387c17fbf0b8",
+    "86fca43d13352c8cf2b5ff9ed2e7c350a31cba8a556a5fd0e2d0669edcb773a601a76a29f7db13838880dc42399a720fbf548ab19352d6c5",
+    "dabc59b3963c151fbb7c6d442f2c3440312a1078207eb11fb62c034cb85b85912c7500fbb992f28ceee449405a8b776c79746b2182984f37",
+    "c25cd08a7271de72052f14c3376cdd15df67d82b3e3085dfa22a56e50f36755732b6ad79e1c85784748f03f44b861dc61934b2c76660d5ae",
+    "",
+    "",
+    "0618de9b12ce06835e1daad463e21f4c602edced632980ed7fa4f876a649cb7da3c7890c21e8061f943de1fa5b963af855e37b8a6236358ef179f59c0d3502f7",
+    NULL, NULL,
+    NULL, NULL,
+    "4484abe672b06e8de5bab2dc066e8ca9aff3bcb41a76ab7504e581a355f6bdbed693a86a8178b8f03f8744575eb9f08c93c3b064e3a1488f29a0a5b0c045db03",
+    "e69397fe1aba5d55aaa486996aed51a104d32f0e566d1bdf4d860ac5c8b04b191f1cc7c28a06080f192acd7eab45b5b8aff0db40e2b7e7e7",
+    "52ccb09542f76169c8f36836dcd62868d664d168ff53248da4000e2a33bd42fdf7cb1d29704543721f46e025fab4be7a2c0bc5ea7ccbb1c7",
+    "54657374436f6e74657874",
+    "9aff60c41fde98ca6d10591bc2da1cb4dccdda0b3368c12cbde5a6a3bd864582"
+  },
+  {
+    1, 33, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "d47fd94e4ca6fa56a6dba5806cf88fe103e998d1b026c77ad2b12443c2b9710a1b28463639f49469847c8e51d984c19de3bdf18934617963",
+    "01b418c973cbd7faf011a128838667520fecd527aefcfef885868a94548b2888e1100ed9b6dbf671f1a3d81d824469e71f137dde5cd6e30b",
+    "3c0a177580fb4e30dcf1e6a3682ce1aba7f619c6c67b9fe5ec9e2d6d6cd67e243a5c1ff98ef035550f2e42e0cba998668451557f54f022f0",
+    "78654d588f42855c566243ad801565619fd567423ce97c8c18b5aff805183c4950962c886aa876c362fda96d23ad45d2fddf821f8a3ec413",
+    "",
+    "",
+    "2c59e425a2715afa79934dbcd5dd928923e03e662e3ca60b04700910f8bc46fc7ae95e5226cc346d4a70078ff909add6e5a4ad92665a9a5b03592d8d9e5d85a3",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "d8d9c7aeea827e39324eba3bbf105aacdc7f63413db5b591f08fb2feb52adf0017e8f1770d8ae0c6aa61cb3579bc07be7ee8425e010a1247cad3db12c266955a",
+    "f08cfbd83ffcad7e5f24cf24d7f3de8237d2c1abb78c8b69c716cd7e6ae9493acb5c8d403293b27a390c83c60f5bbb28f1204cc5151dc832",
+    "a8e3880aa3fc80acc6ed74f348c5f16db551cd4ee2a348e538410a862cbf11c444851f31f7b0f00ace94ae8f4ca5210877f6b7a098629f15",
+    "54657374436f6e74657874",
+    "7c7fc1dc707e4ac150b6dc4754db7bff3f3652536888f787529998b39948fb8c"
+  },
+  {
+    2, 33, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "34fe4d99ec57a7be7a742f2e1af494a433879f8f124f92204f6e32ba06a471de83a84598ae8e4135abbb848bb3a31af15a720f4c801d9e2b",
+    "4a872305a80eea80870a1f400514f76b89bc5e2a4ae76e8f2a36f26c23c6bcc80c492828ec4cb86df50661ff40bc33b13eb815b8a1a5e709",
+    "8583b27ff0edb74a9c051ebafb1850fb31887d3e6a1b0fb9b42678fa8ad403e4cf18db3048857a911b07adf4f9002bdb561e5d7b7d4ca4c5",
+    "ef4b5f50dcef5b432f377d052c27aa1c027b4897d93ffeaef1dbaed14c599da8507f0f1287c20afa5ef5f8a4b74b8ad9095cda499eaa995e",
+    "",
+    "",
+    "a27c6f313ba9896a6261c7fb8b0cf9887039ae703a05929ae783fc24b7fd25edb0226def30c28d0f4e1297f82f77643f23415b9ac0c1b132b6ffcdfc4f4d4c8a",
+    NULL, NULL,
+    "b95b9cc3884a5b92cbb80226d607109fd07a735cb5925acee629898a1d2b7eeee41d75ba9a732ba57e5652a9a78eba4d8e0d3dbb4ba5d31b",
+    "b3bb283c65301c70a73b371abbbd4253578132f5d2297c0c395da007d86f2f9c4cda644fefcab1f58f3e5d8b41c524dfecb7a6badb2ba414",
+    "f25f7893107af6a961d8ef131db152e185f05b9ec15e1983456f4e7449032cebf99d4ca9a6b2f53b82aeab307197a8836e83349842a8f42adbc1582f3df4b1aa",
+    "f3f0b097d7c60e6f73d19f7b05ea277ea123e331bae592b7320bf07fc6f43557634aa83d0ec44b96ded475384fd99f776ad2c64a167fa178",
+    "5f6bbd044983e434dc06925d5389c1284fac66dc2d3a78736cba9a5a8e33543927c8ee556b94902983258c864908d2e6ccc2938bd6bed479",
+    "54657374436f6e74657874",
+    "6ebba8143e42b092a4e7a2f7b62a9f6068281ac9b7145c4b4936680451dd6f61"
+  },
+  {
+    3, 33, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "d3fb0e65e61290932072eea3678149dbd31cf154231334081af5a0a0fe88709e404d4acd9d4d899e3942262325af1de443d2e5f02f79c3f0",
+    "48d7abad68078fd1bf06739152b7cfe56b27bed70d83df6d2b9292259e46ec91806270c0f7b402b8d9e25e49a336800834855b35f34c61a6",
+    "b118422303e8b206b9052e283ad57da6dedeb445d1de3046a007b00e7e1f328ac683c3c98148182eee443bf55f9f151164fe15443a70df05",
+    "9d37082cb11239c37e347d2016c7d00a2e5ab379fe4ac434b1aac9577a16d139f22fada469596711c0c6530e120a34959865b58c0cb0d654",
+    "",
+    "",
+    "ccf37f8db74226001c6890970118cdf5f5985699020b0daade098e97e5cd8d24bf4726a1f2a72932e4c360b3617827bd8f3769524044a991870f1fb0c5978738",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "4b17fcf1f56912df85e463a17f512cb6a255a0006b3c07de7eb4cd508c6fec60b50da73aa9854d80ad93f445b584beae24fa3b0d67cf1ec8",
+    "acc9dc9cdb923d306f1595d763705e47c36602b0610d5b1b89f03fb8cb672e58111ce0ed046dd0453cbdd40fd3baac31dfd4b91b7f728a25",
+    "8ff25fed3d6b19bb06117ee110952ecfc2f98666a030f94f9a668e4c71bdc800d8f7724be9984097df4d42a0fedf4dc6585a367658e51313dce4ae45f12d4396",
+    "48b2f7b629ec684d6fc45e33d29d960037c4c301bcb018d81cc1cf4b686ca74897c62f0d74b4960ee80959cfd5b010286f8342e454e656d1",
+    "f9521ace0192f9e7878482d9dc27707a7b322d46e75e86e55a2b8c54e56f4537816a1ca27e85d9724bc437b010a20b730c20bcbb1b4351c5",
+    "54657374436f6e74657874",
+    "e96093211d8750b6d993a06f4470256bb7c8f006fe5a198df43ff0a4117f2428"
+  },
+  {
+    1, 16, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "040d97419ae99f13007a93996648b2674e5260a8ebd2b822e84899cd52d87446ea394ca76223b76639eccdf00e1967db10ade37db4e7db476261fcc8df97c5ffd1",
+    "438d8bcef33b89e0e9ae5eb0957c353c25a94584b0dd59c991372a75b43cb661",
+    "04305d35563527bce037773d79a13deabed0e8e7cde61eecee403496959e89e4d0ca701726696d1485137ccb5341b3c1c7aaee90a4a02449725e744b1193b53b5f",
+    "57427244f6cc016cddf1c19c8973b4060aa13579b4c067fd5d93a5d74e32a90f",
+    "55d9eb9d26911d4c514a990fa8d57048",
+    "b595dc6b2d7e2ed23af529b1",
+    "895a723a1eab809804973a53c0ee18ece29b25a7555a4808277ad2651d66d705",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "2e783ad86a1beae03b5749e0f3f5e9bb19cb7eb382f2fb2dd64c99f15ae0661b",
+    "2afa611d8b1a7b321c761b483b6a053579afa4f767450d3ad0f84a39fda587a6",
+    "d42ef874c1913d9568c9405407c805baddaffd0898a00f1e84e154fa787b2429",
+    "54657374436f6e74657874",
+    "164e02144d44b607a7722e58b0f4156e67c0c2874d74cf71da6ca48a4cbdc5e0"
+  },
+  {
+    2, 16, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04423e363e1cd54ce7b7573110ac121399acbc9ed815fae03b72ffbd4c18b01836835c5a09513f28fc971b7266cfde2e96afe84bb0f266920e82c4f53b36e1a78d",
+    "d929ab4be2e59f6954d6bedd93e638f02d4046cef21115b00cdda2acb2a4440e",
+    "042224f3ea800f7ec55c03f29fc9865f6ee27004f818fcbdc6dc68932c1e52e15b79e264a98f2c535ef06745f3d308624414153b22c7332bc1e691cb4af4d53454",
+    "6b8de0873aed0c1b2d09b8c7ed54cbf24fdf1dfc7a47fa501f918810642d7b91",
+    "19aa8472b3fdc530392b0e54ca17c0f5",
+    "b390052d26b67a5b8a8fcaa4",
+    "f152759972660eb0e1db880835abd5de1c39c8e9cd269f6f082ed80e28acb164",
+    NULL, NULL,
+    "04a817a0902bf28e036d66add5d544cc3a0457eab150f104285df1e293b5c10eef8651213e43d9cd9086c80b309df22cf37609f58c1127f7607e85f210b2804f73",
+    "1120ac99fb1fccc1e8230502d245719d1b217fe20505c7648795139d177f0de9",
+    "d4aea336439aadf68f9348880aa358086f1480e7c167b6ef15453ba69b94b44f",
+    "798d82a8d9ea19dbc7f2c6dfa54e8a6706f7cdc119db0813dacf8440ab37c857",
+    "7bc93bde8890d1fb55220e7f3b0c107ae7e6eda35ca4040bb6651284bf0747ee",
+    "54657374436f6e74657874",
+    "14fe634f95ca0d86e15247cca7de7ba9b73c9b9deb6437e1c832daf7291b79d5"
+  },
+  {
+    3, 16, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04d824d7e897897c172ac8a9e862e4bd820133b8d090a9b188b8233a64dfbc5f725aa0aa52c8462ab7c9188f1c4872f0c99087a867e8a773a13df48a627058e1b3",
+    "bdf4e2e587afdf0930644a0c45053889ebcadeca662d7c755a353d5b4e2a8394",
+    "046a1de3fc26a3d43f4e4ba97dbe24f7e99181136129c48fbe872d4743e2b131357ed4f29a7b317dc22509c7b00991ae990bf65f8b236700c82ab7c11a84511401",
+    "36f771e411cf9cf72f0701ef2b991ce9743645b472e835fe234fb4d6eb2ff5a0",
+    "4d567121d67fae1227d90e11585988fb",
+    "67c9d05330ca21e5116ecda6",
+    "3f479020ae186788e4dfd4a42a21d24f3faabb224dd4f91c2b2e5e9524ca27b2",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "049f158c750e55d8d5ad13ede66cf6e79801634b7acadcad72044eac2ae1d0480069133d6488bf73863fa988c4ba8bde1c2e948b761274802b4d8012af4f13af9e",
+    "b0ed8721db6185435898650f7a677affce925aba7975a582653c4cb13c72d240",
+    "d4c27698391db126f1612d9e91a767f10b9b19aa17e1695549203f0df7d9aebe",
+    "3c1fceb477ec954c8d58ef3249e4bb4c38241b5925b95f7486e4d9f1d0d35fbb",
+    "abcc2da5b3fa81d8aabd91f7f800a8ccf60ec37b1b585a5d1d1ac77f258b6cca",
+    "54657374436f6e74657874",
+    "18ee4d001a9d83a4c67e76f88dd747766576cac438723bad0700a910a4d717e6"
+  },
+  {
+    0, 16, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04fe8c19ce0905191ebc298a9245792531f26f0cece2460639e8bc39cb7f706a826a779b4cf969b8a0e539c7f62fb3d30ad6aa8f80e30f1d128aafd68a2ce72ea0",
+    "f3ce7fdae57e1a310d87f1ebbde6f328be0a99cdbcadf4d6589cf29de4b8ffd2",
+    "04a92719c6195d5085104f469a8b9814d5838ff72b60501e2c4466e5e67b325ac98536d7b61a1af4b78e5b7f951c0900be863c403ce65c9bfcb9382657222d18c4",
+    "4995788ef4b9d6132b249ce59a77281493eb39af373d236a1fe415cb0c2d7beb",
+    "868c066ef58aae6dc589b6cfdd18f97e",
+    "4e0bc5018beba4bf004cca59",
+    "14ad94af484a7ad3ef40e9f3be99ecc6fa9036df9d4920548424df127ee0d99f",
+    NULL, NULL,
+    NULL, NULL,
+    "c0d26aeab536609a572b07695d933b589dcf363ff9d93c93adea537aeabb8cb8",
+    "4270e54ffd08d79d5928020af4686d8f6b7d35dbe470265f1f5aa22816ce860e",
+    "668b37171f1072f3cf12ea8a236a45df23fc13b82af3609ad1e354f6ef817550",
+    "54657374436f6e74657874",
+    "d8f1ea7942adbba7412c6d431c62d01371ea476b823eb697e1f6e6cae1dab85a"
+  },
+  {
+    0, 16, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04abc7e49a4c6b3566d77d0304addc6ed0e98512ffccf505e6a8e3eb25c685136f853148544876de76c0f2ef99cdc3a05ccf5ded7860c7c021238f9e2073d2356c",
+    "317f915db7bc629c48fe765587897e01e282d3e8445f79f27f65d031a88082b2",
+    "04c06b4f6bebc7bb495cb797ab753f911aff80aefb86fd8b6fcc35525f3ab5f03e0b21bd31a86c6048af3cb2d98e0d3bf01da5cc4c39ff5370d331a4f1f7d5a4e0",
+    "90345e3a1d116c1dd39ae76d95ab858c142223a63e44f8f85318cfa91a84858e",
+    "ee16802a936d5f544771131900ee6973d0551de9e852ece2ef34bf0d5f9e1d1d",
+    "9bc50980832a7b4b58c40161",
+    "a8e9a7e62621879fdc89cea7da8e6153458f463e2851baaf009a7461d699cfb6",
+    NULL, NULL,
+    NULL, NULL,
+    "48893fecd82f7c3456af6a42d8f56325d21e08c10fa81299986aaff54cde7b49",
+    "a90d3417c3da9cb6c6ae19b4b5dd6cc9529a4cc24efb7ae0ace1f31887a8cd6c",
+    "a0ce15d49e28bd47a18a97e147582d814b08cbe00109fed5ec27d1b4e9f6f5e3",
+    "54657374436f6e74657874",
+    "76c6b4f404990ae362be3efe0d60d9669d87017f9dfe33b8c2ed9fd31d295182"
+  },
+  {
+    1, 16, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04349f377dc7fcbb0d52d09e7caa97f53a1badc59aac6959f74a4f5a965f1015d4eeced4cd89f4b3d06c7a716e741d4a9863d8313843c987b96f756b111080f07c",
+    "dd70766222d5a88e72c247bd8ad9c28ea49125ee463a63902cc6db68c34f76a6",
+    "04a3cd1fd41bb0915973a14325a6c7612b336630e6c2fd3f3ae5a311bfe950d493155f446f3fc4a45d439073e998624fca9490ac7eca4c312271d8720f8e6d7a74",
+    "5171dce7db66a978110f345b97bfbdd836338c368d1b819bc125daffd90703db",
+    "2a3c038fe08ade60865e1ff54064471a20dcb4ef90bb692fff3d036f68c03b24",
+    "2b272740b827c1e16070c32f",
+    "b24a488883ad4461ab2b218b48b82063038b5aa6d7d71fbc6612a32539c26fa2",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "aeb4e12a4b956e80588b330a6105a9158b580382427a40dc7c480472dfa346a7",
+    "3f9edbfb0f212a16692104c98023db64197b8c94831cbc0c1e62d752d0a097e6",
+    "0af0766dd39ca8eefef6b6f6b782bbed2e44f85380b794759d490b5fdbb1cfd6",
+    "54657374436f6e74657874",
+    "86f23bd9b57d6fc2ca1501d9707b83ecb0309f629cfb5a3c8a98a8f0da6d5a0b"
+  },
+  {
+    2, 16, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04cd38ef80923e26f157e06c9887f80177c97e1005a41104127271237f946df22eda13d40801bce6184f1a631c44b0807a1a5e8d039975ed0f6079fcbd2dfe6652",
+    "d9f10996a02cd6c9dbda1d1f225f18f781ea3c893b8c2a6cb2e266e59f3cd9a9",
+    "04a7aeac79fda402674ef247c12d6f5fdfd21498d896b67ff04ec181382d4516b7662be32b4a2ae817c2d57104ecb6fcaa527438939810612d1b3d0af36ffc66ce",
+    "7a6cb29fab4e249d1796f95645288a6504d2167c7ff463bc447ab6022462af42",
+    "640064834667025be3ce7abf1eb42ccc0dea2db9782b9823519f474e054524e7",
+    "29240057274f71e55bfcca28",
+    "5b03fe338463543c9d4b195ef8f9c5a914a7503a2a490efc6b6a466f5f85f306",
+    NULL, NULL,
+    "04ece9b48cc98ee03ba742fe1218a3fbec960cc34b6e1defdcd3285276f39028e95b90f9526607565888766a1101f429dc3ec87364b5c8c613f0a081881950427f",
+    "6e7b14befe49443dc501def1cc2f0f293d9c5cfa045a23e9a2e0e7703b42705d",
+    "4b6e403bf494c60342caaa46b3738ee0423892720751607338034b0a067cc1db",
+    "d6c49e442aad90bcc1bc0d166e5c4d3df845c803ba08b8a4d891af2eeae4f97e",
+    "3c56756948f1c27aed3eb27a923c891dc073eccf94bb6c1b64a8bfaa95f1f8f7",
+    "54657374436f6e74657874",
+    "e04a3d5ec48b3729b57b61e02d66eb6f67f4bf013f2767ebd2281592ea3ccef8"
+  },
+  {
+    3, 16, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0436d96b06fc928e8ccebcaf62291265a2fab8c9a0bc27414fcf86ddd8fc47286caabe02a1fe4a9881984ab1abc8475cc5008fddec1eea72082d4854f190982f6f",
+    "711abbbfd2c99aca70eb0f4f057c8bc1d32dfe09409a2d28a8d74da3b85e604d",
+    "04060c9ead3a3787e8e84cfe055a5211c11fc228e661aee80dbe9b0daa76f3915e2a8084284618ff1c18b0cd4af90a6a2f901a09df7b1ba88957b4101c9391607c",
+    "d593197688dc6d7b5c898368edaf017d625b2099ea76d685303a460a0409e793",
+    "7887c4773caf8a64c4d98505645db1fd7f6e5fcafe520d0f4862ea812442fe2a",
+    "9d1500195f9750f4f42e34c4",
+    "47f32a7f67c037f2168625ea1569baf4c9f96503e542d232514976a916befcd2",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "048387ea40e9944a81e20ae3b8efe7abb3f5b89b1560179f55a8ea40b56a0341c9ef414590f4f9bf1f33a21d6f860c4d428ec2e6309f8bf1ee1816bb5746391491",
+    "81dd6b76fe0fdd5871f75ac19c5008f12d6e6963645c02dda572f402d036135c",
+    "03d3d0a77139bd73e237854a1a740c8b037101df499e88b1e5af17ccd82b43a6",
+    "a1bc1ce12c6d8c609a69dc0128616ef952006ca13d9982f5a3d4ec1f81606102",
+    "8a6b1f2c285b3bbf72c6a3afc99bb4a04da7e6d6504e3078a4ee37702eea416a",
+    "54657374436f6e74657874",
+    "a8fa1145e7439b054cf2ab7d45652b684d96fef8a45bbf74741c37f67b086029"
+  },
+  {
+    3, 16, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04d383fd920c42d018b9d57fd73a01f1eee480008923f67d35169478e55d2e8817068daf62a06b10e0aad4a9e429fa7f904481be96b79a9c231a33e956c20b81b6",
+    "c29fc577b7e74d525c0043f1c27540a1248e4f2c8d297298e99010a92e94865c",
+    "043539917ee26f8ae0aa5f784a387981b13de33124a3cde88b94672030183110f331400115855808244ff0c5b6ca6104483ac95724481d41bdcd9f15b430ad16f6",
+    "11b7e4de2d919240616a31ab14944cced79bc2372108bb98f6792e3b645fe546",
+    "31e140c8856941315d4067239fdc4ebe077fbf45a6fc78a61e7a6c8b3bacb10a",
+    "75838a8010d2e4760254dd56",
+    "600895965755db9c5027f25f039a6e3e506c35b3b7084ce33c4a48d59ee1f0e3",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "0492cf8c9b144b742fe5a63d9a181a19d416f3ec8705f24308ad316564823c344e018bd7c03a33c926bb271b28ef5bf28c0ca00abff249fee5ef7f33315ff34fdb",
+    "53541bd995f874a67f8bfd8038afa67fd68876801f42ff47d0dc2a4deea067ae",
+    "87584311791036a3019bc36803cdd42e9a8931a98b13c88835f2f8a9036a4fd6",
+    "f3a07f194703e321ef1f753a1b9fe27a498dfdfa309151d70bedd896c239c499",
+    "1240e55a0a03548d7f963ef783b6a7362cb505e6b31dfd04c81d9b294543bfbd",
+    "54657374436f6e74657874",
+    "e01dd49e8bfc3d9216abc1be832f0418adf8b47a7b5a330a7436c31e33d765d7"
+  },
+  {
+    0, 16, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04a697bffde9405c992883c5c439d6cc358170b51af72812333b015621dc0f40bad9bb726f68a5c013806a790ec716ab8669f84f6b694596c2987cf35baba2a006",
+    "a4d1c55836aa30f9b3fbb6ac98d338c877c2867dd3a77396d13f68d3ab150d3b",
+    "04c07836a0206e04e31d8ae99bfd549380b072a1b1b82e563c935c095827824fc1559eac6fb9e3c70cd3193968994e7fe9781aa103f5b50e934b5b2f387e381291",
+    "7550253e1147aae48839c1f8af80d2770fb7a4c763afe7d0afa7e0f42a5b3689",
+    "a8f45490a92a3b04d1dbf6cf2c3939ad8bfc9bfcb97c04bffe116730c9dfe3fc",
+    "726b4390ed2209809f58c693",
+    "4f9bd9b3a8db7d7c3a5b9d44fdc1f6e37d5d77689ade5ec44a7242016e6aa205",
+    NULL, NULL,
+    NULL, NULL,
+    "806520f82ef0b03c823b7fc524b6b55a088f566b9751b89551c170f4113bd850",
+    "f1f1a3bc95416871539ecb51c3a8f0cf608afb40fbbe305c0a72819d35c33f1f",
+    "61092f3f56994dd424405899154a9918353e3e008171517ad576b900ddb275e7",
+    "54657374436f6e74657874",
+    "477a50d804c7c51941f69b8e32fe8288386ee1a84905fe4938d58972f24ac938"
+  },
+  {
+    1, 16, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "041eb8f4f20ab72661af369ff3231a733672fa26f385ffb959fd1bae46bfda43ad55e2d573b880831381d9367417f554ce5b2134fbba5235b44db465feffc6189e",
+    "12ecde2c8bc2d5d7ed2219c71f27e3943d92b344174436af833337c557c300b3",
+    "04f336578b72ad7932fe867cc4d2d44a718a318037a0ec271163699cee653fa805c1fec955e562663e0c2061bb96a87d78892bff0cc0bad7906c2d998ebe1a7246",
+    "7d6e4e006cee68af9b3fdd583a0ee8962df9d59fab029997ee3f456cbc857904",
+    "6d61cb330b7771168c8619498e753f16198aad9566d1f1c6c70e2bc1a1a8b142",
+    "0de7655fb65e1cd51a38864e",
+    "754ca00235b245e72d1f722a7718e7145bd113050a2aa3d89586d4cb7514bfdb",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "ac4f260dce4db6bf45435d9c92c0e11cfdd93743bd3075949975974cc2b3d79e",
+    "e1a4e1d50c4bfcf890f2b4c7d6b2d2aca61368eddc3c84162df2856843e1057a",
+    "ee51dec304abf993ef8fd52aacdd3b539108bbf6e491943266c1de89ec596a17",
+    "54657374436f6e74657874",
+    "6f6fbd0d1c7733f796461b3235a856cc34f676fe61ed509dfc18fa16efe6be78"
+  },
+  {
+    2, 16, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0444f6ee41818d9fe0f8265bffd016b7e2dd3964d610d0f7514244a60dbb7a11ece876bb110a97a2ac6a9542d7344bf7d2bd59345e3e75e497f7416cf38d296233",
+    "3cb2c125b8c5a81d165a333048f5dcae29a2ab2072625adad66dbb0f48689af9",
+    "040d5176aedba55bc41709261e9195c5146bb62d783031280775f32e507d79b5cbc5748b6be6359760c73cfe10ca19521af704ca6d91ff32fc0739527b9385d415",
+    "085fd5d5e6ce6497c79df960cac93710006b76217d8bcfafbd2bb2c20ea03c42",
+    "cf292f8a4313280a462ce55cde05b5aa5744fe4ca89a5d81b0146a5eaca8092d",
+    "7e45c21e20e869ae00492123",
+    "dba6e307f71769ba11e2c687cc19592f9d436da0c81e772d7a8a9fd28e54355f",
+    NULL, NULL,
+    "04265529a04d4f46ab6fa3af4943774a9f1127821656a75a35fade898a9a1b014f64d874e88cddb24c1c3d79004d3a587db67670ca357ff4fba7e8b56ec013b98b",
+    "39b19402e742d48d319d24d68e494daa4492817342e593285944830320912519",
+    "1a45aa4792f4b166bfee7eeab0096c1a6e497480e2261b2a59aad12f2768d469",
+    "0ecd212019008138a31f9104d5dba76b9f8e34d5b996041fff9e3df221dd0d5d",
+    "d32236d8378b9563840653789eb7bc33c3c720e537391727bf1c812d0eac110f",
+    "54657374436f6e74657874",
+    "eb0d312b6263995b4c7761e64b688c215ffd6043ff3bad2368c862784cbe6eff"
+  },
+  {
+    0, 16, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "046c6bb9e1976402c692fef72552f4aaeedd83a5e5079de3d7ae732da0f397b15921fb9c52c9866affc8e29c0271a35937023a9245982ec18bab1eb157cf16fc33",
+    "62c3868357a464f8461d03aa0182c7cebcde841036aea7230ddc7339f1088346",
+    "04d804370b7e24b94749eb1dc8df6d4d4a5d75f9effad01739ebcad5c54a40d57aaa8b4190fc124dbde2e4f1e1d1b012a3bc4038157dc29b55533a932306d8d38d",
+    "2f18b059576a0ec5a17121c0fe7ec8f00ea86f7b046fa3889ac8f21f89dbd484",
+    "",
+    "",
+    "7c0347d69a219f33301056411e78672ae2d78698d10ee067f883ba266ef586a1",
+    NULL, NULL,
+    NULL, NULL,
+    "7e5b6dd51bca56d4f30c95ff658af26c08eb0c073aa7180686cc4dbeabcb34f1",
+    "3800bb050bb4882791fc6b2361d7adc2543e4e0abbac367cf00a0c4251844350",
+    "c6638d8079a235ea4054885355a7caefee67151c6ff2a04f4ba26d099c3a8b02",
+    "54657374436f6e74657874",
+    "f53fb127f67dabf35b14fae14b53e6ce5c49e572f95eb4ef7a3b3cb9cd85f12b"
+  },
+  {
+    1, 16, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "043c491a9ad8d09c6a5884ef51e1928e97b8912bd88ee2713f638b8c480117082a633fb2959724d7c9bae6307d9f54a73e956d37b4c5e7061007c2b1ddafaf2383",
+    "1d36bb434a273601b8add26c53c542a3e7b66344ed0e819728b9563ddab249b7",
+    "042ea16526086415dd0682e11f0a957afc945df48887cd83e452b0bccde946fa4f93da4ccd71900126b0f9edee7528c25764bc2fad0ece82a01bc9dc1a22840f9f",
+    "141a8815e1da9c0b7bb475ec35ff40e241b7e9b7b3bcbba00be4c76b9554e5a5",
+    "",
+    "",
+    "5a3109227dae2d50b0051b34c0a20e9006b3d8cfd8c8850e324149c8e8a3724c",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "f6d85dc06e13f02e460ecfc1b6fdbcce8c1517aa957ef423786493339292e2f2",
+    "a5da27efc1fd8936a871888bd44478ebe08d33775f26a470c0035749ba40bfaf",
+    "a9a63cabea9ff10089a86cd8fba072c64986ffadb0886bfd2cbfdca9ad56a60d",
+    "54657374436f6e74657874",
+    "8c5281532de02daf25208f7ffe2a377a8768ecb3dfdcc66d9c7de0087323d795"
+  },
+  {
+    2, 16, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0473d6a15efe09154aa0a21ed9f34723c055a9307f652a9fa2f43d16a3f633843e9381f76dafacb383da8c3a8b93d65df9b050db7e3931cfa5085545b993e48164",
+    "df694582fd039a35940e0a1b3e97f4a1faaacf55ba9d6d838bfbe71affb98d17",
+    "0418ea35546b901f2cd712396d05763e79276e7e7393aacd9d244f00f42e7e634aa866c2043c1ed2a60108151838fa337ada8bae2049d4ece5e7d63cfffcdd3bfe",
+    "09228047560804d1c9c99341d7e0921645fb5be1783568ceac4cbebdce86e975",
+    "",
+    "",
+    "c92e728e11b5ae7b9e9d4e6b44a461cd4226f7eef618aacf8c9b8755fe3e0bd6",
+    NULL, NULL,
+    "04730929f48619ac8544cf08d5a7a41e5a8964eb2dfa9cf76e37d357aef84fc6cc3f78040e8ab87ca436c2497bc042008d5bbe08fdc8664c261d623660b3a8ca67",
+    "20208fa66d40cf87d737f292e0d11ca3b6c2314a704a313f652fa11f7ca53d2e",
+    "c843773058feb53d705fef07e7afc4a0c1c958f6453f36f3f72a2708d3194be4",
+    "62a90be4b3936c8b158e84c4fdaf5f0e2d15fa5c528fbf75cdad03d24dbb2d09",
+    "521087d8a3531509821cfa89075ce54174f7985f34f5925258d8214675fc7582",
+    "54657374436f6e74657874",
+    "e495136695183e2d5476b3467fb7f8e3a67101722c5e19be8a4fd6c7088b7d5e"
+  },
+  {
+    3, 16, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04aa734f1e1d8a3de7374341e7aa48d90492056eef68671309401cf74772ea3a80b2ae88be6d2091ae55142ac94ac45d83e487324b487c5488359cca9b865c3195",
+    "f344668ae714bad57d489c330384449e1339ff112f69cac5b05a83ae858f9590",
+    "044169d0160baa97d4f76452b19a7251fde47d770316cd7cbbad318f8834147242bc0ed137274f4659833bd98e41b3a0fa0dfbc33c4a73a49b5e84961d966e59b5",
+    "58993a8358a0ef9cae0199a244f02a2a5e3645edf6bfef043f0b615724adb7ee",
+    "",
+    "",
+    "1861d2c4a8db612a270bb943f40b53e1aeb9731d13441beaddc24c78c84f9625",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "0484ba0e85e2954c0e030d53a2e90b4acaab51d62ea265175eb3d4d36239a7be426939cef3528657291225d53a137824b9d5ae7c62e12321d3c297f6fb81c6c345",
+    "843d5658565cbdb33065c5578383100e893651f5ae393bbab610bf14dadac145",
+    "d2b5a234c0ed5d55dc161273f07bca6ac9e24ec69f323b069b4f5c65356260ce",
+    "d99b3d6a1805e53d6ffe58b9d658012b52de80535096324150e1029d24b3388e",
+    "c885433aa71160645c997052d2f3473eaf973fb67d7a64f4832746a469268af0",
+    "54657374436f6e74657874",
+    "08101fa712a67b24e23952393263870e853a44f6883693e2124bb5f16a9b3bb1"
+  },
+  {
+    0, 16, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04085aa5b665dc3826f9650ccbcc471be268c8ada866422f739e2d531d4a8818a9466bc6b449357096232919ec4fe9070ccbac4aac30f4a1a53efcf7af90610edd",
+    "3ac8530ad1b01885960fab38cf3cdc4f7aef121eaa239f222623614b4079fb38",
+    "0493ed86735bdfb978cc055c98b45695ad7ce61ce748f4dd63c525a3b8d53a15565c6897888070070c1579db1f86aaa56deb8297e64db7e8924e72866f9a472580",
+    "2292bf14bb6e15b8c81a0f45b7a6e93e32d830e48cca702e0affcfb4d07e1b5c",
+    "090ca96e5f8aa02b69fac360da50ddf9",
+    "9c995e621bf9a20c5ca45546",
+    "4a7abb2ac43e6553f129b2c5750a7e82d149a76ed56dc342d7bca61e26d494f4855dff0d0165f27ce57756f7f16baca006539bb8e4518987ba610480ac03efa8",
+    NULL, NULL,
+    NULL, NULL,
+    "02f584736390fc93f5b4ad039826a3fa08e9911bd1215a3db8e8791ba533cafd",
+    "4ab11a9dd78c39668f7038f921ffc0993b368171d3ddde8031501ee1e08c4c9a",
+    "ea9ff7cc5b2705b188841c7ace169290ff312a9cb31467784ca92d7a2e6e1be8",
+    "54657374436f6e74657874",
+    "93fb9411430b2cfa2cf0bed448c46922a5be9beff20e2e621df7e4655852edbc"
+  },
+  {
+    1, 16, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "043f5266fba0742db649e1043102b8a5afd114465156719cea90373229aabdd84d7f45dabfc1f55664b888a7e86d594853a6cccdc9b189b57839cbbe3b90b55873",
+    "bc6f0b5e22429e5ff47d5969003f3cae0f4fec50e23602e880038364f33b8522",
+    "04a307934180ad5287f95525fe5bc6244285d7273c15e061f0f2efb211c35057f3079f6e0abae200992610b25f48b63aacfcb669106ddee8aa023feed301901371",
+    "a5901ff7d6931959c2755382ea40a4869b1dec3694ed3b009dda2d77dd488f18",
+    "0b910ba8d9cfa17e5f50c211cb32839a",
+    "0c29e714eb52de5b7415a1b7",
+    "50c0a182b6f94b4c0bd955c4aa20df01f282cc12c43065a0812fe4d4352790171ed2b2c4756ad7f5a730ba336c8f1edd0089d8331192058c385bae39c7cc8b57",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "2912aacc6eaebd71ff715ea50f6ef3a6637856b2a4c58ea61e0c3fc159e3bc16",
+    "c11d883d6587f911d2ddbc2a0859d5b42fb13bf2c8e89ef408a25564893856f5",
+    "75bfc2a3a3541170a54c0b06444e358d0ee2b4fb78a401fd399a47a33723b700",
+    "54657374436f6e74657874",
+    "2f6d4f7a18ec48de1ef4469f596aada4afdf6d79b037ed3c07e0118f8723bffc"
+  },
+  {
+    2, 16, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04378bad519aab406e04d0e5608bcca809c02d6afd2272d4dd03e9357bd0eee8adf84c8deba3155c9cf9506d1d4c8bfefe3cf033a75716cc3cc07295100ec96276",
+    "1ea4484be482bf25fdb2ed39e6a02ed9156b3e57dfb18dff82e4a048de990236",
+    "04fec59fa9f76f5d0f6c1660bb179cb314ed97953c53a60ab38f8e6ace60fd59178084d0dd66e0f79172992d4ddb2e91172ce24949bcebfff158dcc417f2c6e9c6",
+    "93cddd5288e7ef4884c8fe321d075df01501b993ff49ffab8184116f39b3c655",
+    "9d4b1c83129f3de6db95faf3d539dcf1",
+    "ea4fd7a485ee5f1f4b62c1b7",
+    "ca2410672369aae1afd6c2639f4fe34ca36d35410c090608d2924f60def17f910d7928575434d7f991b1f19d3e8358b8278ff59ced0d5eed4774cec72e12766e",
+    NULL, NULL,
+    "0404d3c1f9fca22eb4a6d326125f0814c35593b1da8ea0d11a640730b215a259b9b98a34ad17e21617d19fe1d4fa39a4828bfdb306b729ec51c543caca3b2d9529",
+    "02b266d66919f7b08f42ae0e7d97af4ca98b2dae3043bb7e0740ccadc1957579",
+    "1ed49f6d7ada333d171cd63861a1cb700a1ec4236755a9cd5f9f8f67a2f8e7b3",
+    "6bb031aa9197562da0b44e737db2b9e61f6c3ea1138c37de28fc37ac29bc7350",
+    "649a3f92edbb7a2516a0ade0b7dccc58a37240c4ba06f9726a952227b4adf6ff",
+    "54657374436f6e74657874",
+    "70c405c707102fd0041ea716090753be47d68d238b111d542846bd0d84ba907c"
+  },
+  {
+    3, 16, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04a4ca7af2fc2cce48edbf2f1700983e927743a4e85bb5035ad562043e25d9a111cbf6f7385fac55edc5c9d2ca6ed351a5643de95c36748e11dbec98730f4d43e9",
+    "00510a70fde67af487c093234fc4215c1cdec09579c4b30cc8e48cb530414d0e",
+    "04801740f4b1b35823f7fb2930eac2efc8c4893f34ba111c0bb976e3c7d5dc0aef5a7ef0bf4057949a140285f774f1efc53b3860936b92279a11b68395d898d138",
+    "778f2254ae5d661d5c7fca8c4a7495a25bd13f26258e459159f3899df0de76c1",
+    "b68bb0e2fbf7431cedb46cc3b6f1fe9e",
+    "76af62719d33d39a1cb6be9f",
+    "7f72308ae68c9a2b3862e686cb547b16d33d00fe482c770c4717d8b54e9b1e547244c3602bdd86d5a788a8443befea0a7658002b23f1c96a62a64986fffc511a",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "04b59a4157a9720eb749c95f842a5e3e8acdccbe834426d405509ac3191e23f2165b5bb1f07a6240dd567703ae75e13182ee0f69fc102145cdb5abf681ff126d60",
+    "d743b20821e6326f7a26684a4beed7088b35e392114480ca9f6c325079dcf10b",
+    "02bee8be0dda755846115db45071c0cf59c25722e015bde1c124de849c0fea52",
+    "37ae06a521cd555648c928d7af58ad2aa4a85e34b8cabd069e94ad55ab872cc8",
+    "7466024b7e2d2366c3914d7833718f13afb9e3e45bcfbb510594d614ddd9b4e7",
+    "54657374436f6e74657874",
+    "bed80f2e54f1285895c4a3f3b3625e6206f78f1ed329a0cfb5864f7c139b3c6a"
+  },
+  {
+    0, 16, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0400f209b1bf3b35b405d750ef577d0b2dc81784005d1c67ff4f6d2860d7640ca379e22ac7fa105d94bc195758f4dfc0b82252098a8350c1bfeda8275ce4dd4262",
+    "9648e8711e9b6cb12dc19abf9da350cf61c3669c017b1db17bb36913b54a051d",
+    "0404dc39344526dbfa728afba96986d575811b5af199c11f821a0e603a4d191b25544a402f25364964b2c129cb417b3c1dab4dfc0854f3084e843f731654392726",
+    "109449871ed61c0fdd8cecdc56be12fd6f946e13c5c7a863903c592e022904cc",
+    "490666b45bd4aece6eaab989af2e1eb1800ca326955db2be0ce31343c72efc76",
+    "ad23d477d0f9ec0c12282360",
+    "073cabf2b9f230a76c75d63051f22c16d257e58d900f85aa650a4ab181bb5c222a43f576894c3bbf7f59a0bb3c435e185d72fbfff459c3310e8a5f7e347dd77e",
+    NULL, NULL,
+    NULL, NULL,
+    "fcc960a01d9bc0f30605eb29cbd3f9c2b9dab0c7083e88bb266fb17951876376",
+    "0c4b7c8090d9995e298d6fd61c7a0a66bb765a12219af1aacfaac99b4deaf8ad",
+    "a2f6e7c4d9e108e03be268a64fe73e11a320963c85375a30bfc9ec4a214c6a55",
+    "54657374436f6e74657874",
+    "1a677fc144ec3f0df86cfebd6578a0a1a402beeb6f6c36235006369f1211edfa"
+  },
+  {
+    1, 16, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0480080438469055361f6ba695975ca3f0d14cfd61ae17c4a67886ab44e04ad86db30c5a6d90ea007e7d5ff3625a4c5156a6cfbfaee71da2dccf75ccd944d3039f",
+    "564fc2a44c6961fcf0ef8eec0024ef50bcf31f43812114c975e8ffe87c17606f",
+    "048739ebbaea3156cbd5e39b4ef41ee7e3b52c8cb4958d087112b17b778897152c7e99307095b1cee54b807077f6f5092970a27fbb57ce2835263132c75e52e7e0",
+    "859601134f7ee1728c4a56fde416f2967cfea85b9387061d83593c93f7f07a2b",
+    "28b3e9411cd47cda728f7dea88faa449f103f90ca2afebbc5791e315bd355de6",
+    "f2a9f537ec6d21162c70efbc",
+    "1fcdfcfacccf116fc8808ce22e8983bcf1121d0a96ca8bae2af6b14ff707fd5c7c3126da658100b4ff8cf756765c4a9ae1b7d22f042a28d876e081aec8f44b58",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "27ad900ec494ed811a9f14087e816cbe85fa0b54bf0a652cad3efcf0802eb44d",
+    "92a316d4c52d5ed7eda925071741acb98a59457dde4c3b959c79acb09a00ab68",
+    "509212d2ac43d399abd9050ae3c41c030b82623da0494c0d9f8f26ac56b7e188",
+    "54657374436f6e74657874",
+    "32b9b0b8315cfc2415852b21e9353e79c233233f400def9623404e21657bdab5"
+  },
+  {
+    2, 16, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04ba835cdff4e075ba97db2cf705f18471eff67d54039377be8a01fbe93a85bdde3265013c562b977969654d2dbf855b2cbe5950282f8226d94794eefb175bddab",
+    "1b18d5fa894ff8cc9682a3b540c56a93ed146711f1c7d4a7cf985bc2bf8bd20a",
+    "048728fc2d342b8eba23e97b31731f85125ff14130829ba01a843d76487d1262fb8f1e67d9fd9f2fbcf8e0399968c21716be6b93c84134ba36b2529803f173c262",
+    "27d7c7c966f345f7084d81e7a835c26e4ad01afbc41736975ac62a07e7d284f8",
+    "d9d10a6e718b8a230e259b97a7de54690f87d710623379021f60124e53fad1d8",
+    "06ab4f04d6a36db110566315",
+    "f6e20045902aa6eb6aea9a2c5ce7f839b61cb50392d92db47f57d83de3b18ec6eea8ee547aadc59e1577aed5dd6452c8ed400d1d1fe88afd14f4554ff49da346",
+    NULL, NULL,
+    "04c5f644ac06da9242231782dca7f0753abb82f909deae17d3ac041a8df848075dd50ece4df6fcd98bafb69441600477c76cacc6cada8d4ca67a6208a7f6e278ce",
+    "7f209ec8f791935eefe39fdbb2b8b574747c69e9e082660a4fa194f1fac28664",
+    "d4e32a68e5e4f00c1eb737975c6d16f4c0d2a7e0406dd13139f39ca95b7ede2c",
+    "d76e98d0bf2c7be050d328ac9efa266db8db37cff9b4ced6f7d24e90dc060058",
+    "e0ea0b1753ebf24fcd204f9fd86a5bd5aefd7550f653ebbc9dfdf68256dca4b5",
+    "54657374436f6e74657874",
+    "7b602374c2ff1d79e029684721f6bdbb53c18c6c8eeab01ff7dc49399893732e"
+  },
+  {
+    3, 16, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04ba7f6721d4721645ae7ddc399a22aa28493443188abed3d0461739793134896a6f18f71d9f6b6f97b5e440a58ce863a13a7d230c7b115e26aedd5d5c94f2fd46",
+    "0ef201dfa67e8bebb4ec676766fdc50f491c8478b71d2bafdfa5b78fc9cff590",
+    "04634dbc3ecb06a564d7703453b871b113f54e8343f4dcafd15759b56233291f564cc04defb5567534f2649687bb9ea92732ec4c08cadc027bb2637c3c6d43f310",
+    "6d3a013f71ac08608e41c5730d32129f9a7bdcf46edfa6ecca7e9f167f87eee6",
+    "6c172fa64100161b14386d0496b98a350b1d3b8e9ccbda515cd09eacc980b447",
+    "37d649d5002b2c68ebb689b8",
+    "9f481f55ce166ab296b786dc483b2b1eb2816d455797c31cc7664aa6e4ef494548b031af63cc28fde7efd4689286e888384a9af0fab1419c863133581f6e9958",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "041ae41c99c53bcbdef12be6caba1ba534568512748bfb77f81a8ba945aad1595f65940f08b62b18de2c27852af6dadb1754225993494dc2d2efc7cc2a0cbda8d5",
+    "4ba160d72272103fb74e880ab0a7c372a5009c910fb3c0914e19cb62e0eaed5c",
+    "7c6c091d7cfff77a14cb4b84c7601d4cdeecce18289367fd399e5740e42063a9",
+    "f228860ce5a3c55199094bd799602113d6afcd860f9fc57ad0ba2bf90dc6b4d6",
+    "ae64a8fd36e1ba98611029e15ce8768dd8ed535b965ffb9d2c36eceaef241d5d",
+    "54657374436f6e74657874",
+    "67fd7c5a4cbf7d12f3f92876913a46578b9cdbca4f8031f61c11424991c20ef5"
+  },
+  {
+    2, 16, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "043ebb4a2ee7a6d228f11c71f02dd3cf66698e61216691a3baaa6e8f9a7bd50b179a72a62056124797e2580b4fb81856f339bfc674d62feb7559e249629aace4ea",
+    "fa7e84221081c521fcae967681ec5e3f657306e846c926379024f34b07d41ae1",
+    "049fafd3c13356c526754bf9ac57d2875fb04814ff0feb446b1fd6dcf0bbd99c99bd2a362ac625e10659e199336f906acd7e42955f907f8ec80941d9cd76e009f7",
+    "2b6ea1342943b50473e43a5204b7a7eec0d411fd749c3aa2a235852b91d89610",
+    "5c0e0156d0118f8c8565550c9af908af1377736a6266d34cca42c6f97a8a70ef",
+    "862a93b766411f32b0e10f78",
+    "3df3a047627d05fa1b0de290be6f87316d8da529be9f102ca8f1abd8e78e43135fe0fbf6d74eeb9614ac11cc7b4168d8ef2f54a1123fdf87c27523811cdf7b8d",
+    NULL, NULL,
+    "041863c08ca8b01735bb2514f4f38ab8e505873b2f2a706a1b8b76cba95c1589f67618688bea6b5f2cb001f0d4cee7deb72f4102b8bb0095a3a466a65817c5d4f1",
+    "d4b47742dc88c21a27e7e21486aefbbecd5de72ae85a3c03d65b15931a2e2a0c",
+    "646e82a31c200d31ee3f4d6716fd4a1706b3fe94ccac9bb01a2cc602f04c2428",
+    "56d3c2f1cf5e24599ec7bcd4132213f2e459b04236083cc10f1f5bac63263e47",
+    "86053562bf3f5a220a3c61223cd56c4113767d544dcceeff502dcb1edb7e9a1b",
+    "54657374436f6e74657874",
+    "9a7c1f201f0daf12e6a6f55d850cd6a0f552a00a4676fe6c452771517287047e"
+  },
+  {
+    3, 16, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "049c331117efee994348cdcd7f7ec6d1cfde4ef9948ae7a1cbcba8d20fc4843a01e15c59ccbbf0af817207a88d564234f2f968bb19d79c12c69087f31f61a07fb3",
+    "bc29193d846d960edb11b846e80b43738d6341e5444dc0e69dcc5ae0d97de6cc",
+    "0417d935019f332ebf4d3c2307f933368c49818518efbf71d14d860e226936e44c426b0469d8111feca002488512912b9a3625aac02bac7ac429113cf0c280cc0b",
+    "56dc4cb1e5fac070b762935f32411ab3c802b4fc9fb6ab030322cc2bdd4fb088",
+    "dea3edc0191d27e7026e5046fe37e8f6cfe862cf580f3a4f5be198d844c23028",
+    "a97875b9a3444d718ec08055",
+    "344fa684a7524362e6eddca84a0532cfd296e769654354d95d66794e7de22ee8f6d2aa693b1ef8e4318577b7e3a4d21e5d1ee27dde1050e7008aa47beadab97d",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "0431923a7243d37a2653263106c77504052a95d4b119d9b5de3bc76d7c150b591db6c2e4338bf3737efee490fdd7ba6950ab03a5a76e8c127a803ed7285687bf2c",
+    "d780ccebb177b388675e9cd8f80a2fb105fc953a8243e4a1c9a6f7ece22c662d",
+    "c2218b04e7e39da9fcafe21842d521416160e98160d2a7ad0de07cbc09363bca",
+    "899203b428a8a5374d47b48930874ce4757f786c39e13a489115d64cc4e5ce9e",
+    "c528dc13f6aed77af876146e637b4601583be2b82db6d4d298792c5e1e84cb7c",
+    "54657374436f6e74657874",
+    "c55181900ac721c1e1c7d88fd8d46ac5434f60239b1aa2dcff7d2f953f0fe23d"
+  },
+  {
+    0, 16, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "048fed808e948d46d95f778bd45236ce0c464567a1dc6f148ba71dc5aeff2ad52a43c71851b99a2cdbf1dad68d00baad45007e0af443ff80ad1b55322c658b7372",
+    "ebedc3ca088ad03dfbbfcd43f438c4bb5486376b8ccaea0dc25fc64b2f7fc0da",
+    "044415d6537c2e9dd4c8b73f2868b5b9e7e8e3d836990dc2fd5b466d1324c88f2df8436bac7aa2e6ebbfd13bd09eaaa7c57c7495643bacba2121dca2f2040e1c5f",
+    "9c00a6ecce7eac4a73094bfad06d17b2c195ce5d891a76c466d9ce17e2927aff",
+    "a438e7fa5713046c634b7ebf36efe9175d2aa63164a430ad1871c21cbce28ef1",
+    "80e67dfe703b591e18cdb04e",
+    "c585a0c00032a14c67e7b4f6b1e02f1e9059415607e91db6a75fd09ecd239f87ed97c1e5cd6938aaff851b01a92319344ed6b01e82de3ca2aa43aea64f09f605",
+    NULL, NULL,
+    NULL, NULL,
+    "918406d83412cb2ae65becc752da66323801933dd73df81c4e4e7c747181574e",
+    "02bd2bdbb430c0300cea89b37ada706206a9a74e488162671d1ff68b24deeb5f",
+    "8d283ea65b27585a331687855ab0836a01191d92ab689374f3f8d655e702d82f",
+    "54657374436f6e74657874",
+    "62816ce52594cc9bdfa3abf9a72422b1a03b1abd0716741f0e7c6421617520ef"
+  },
+  {
+    1, 16, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "044f44490804b7f3ec5a8da8eddc0a6b27c0dab0d7134c92144e3f99ec3dabecc657f6b54eabcfa05d60bac063a70db2125a7a16a051df4643dbaaa5076a25efa4",
+    "eee2a31e38d131ee6172aa8409d0c920f002f63ee5aeefbadcd50720efb6630e",
+    "041422d399504a8c51e81dbba8ddda0a5b7e712c6305b5eb4a7dbb9b93f1ec82d9c3bcfb0d0b282ceb7c9950ef28742250e5e34a942e239bb0547629340afec33e",
+    "871b25f4b1e214da16ca38ae3d45d7f7d57b403a930b52a44d8427e5bf12aa09",
+    "a122f5dbe80a805bb66929c084844c123538ead6fd44a0e3d7ba3dbe3b2f952c",
+    "dc892fcb09fd090b4cfcd093",
+    "877fca15c1166285ac739430225c5df5ad93b404bcc4a3e333b63f1462b5d9be63164ad9aae04ddaa62e45823c79bc9218b0ad73149917541a5b878f1293753b",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "8424c8c9eb1a482a8b6dfefe729f5fe33ea6de7f07ba37a58fe30b256cf54e9d",
+    "b3b01fdc9dc5a48412b7989479b0714db48a953fb7b530d3f30ebb289d33d174",
+    "5bf2f0c78ae190a871258199aaad7a46aeb280c85f82b857b430c6bc774f98c0",
+    "54657374436f6e74657874",
+    "d2ac77a91477ba9e423c756545781370a5a03254deb31914e7d51b214cfe4cab"
+  },
+  {
+    0, 16, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0453a4d1a4333b291e32d50a77ac9157bbc946059941cf9ed5784c15adbc7ad8fe6bf34a504ed81fd9bc1b6bb066a037da30fccd6c0b42d72bf37b9fef43c8e498",
+    "9d34abe85f6da91b286fbbcfbd12c64402de3d7f63819e6c613037746b4eae6b",
+    "04f910248e120076be2a4c93428ac0c8a6b89621cfef19f0f9e113d835cf39d5feabbf6d26444ebbb49c991ec22338ade3a5edff35a929be67c4e5f33dcff96706",
+    "c039fdf5b97974a87d8a537667d350157f40a38afe2319743026ae9c6c361ed5",
+    "",
+    "",
+    "2fafb269b7c536436177b7a1fbdb7997c8136034760ffd1b0d9c00479dd5813adbd282173ee1cd009eb1889f3193a7d15c8813613b7b5d36495c58dc5deb4ba5",
+    NULL, NULL,
+    NULL, NULL,
+    "e55150d4ec509c78bf3b3c704d786806b0f2633b076918366e6eef6183ff99bb",
+    "497efeca99592461588394f7e9496129ed89e62b58204e076d1b7141e999abda",
+    "49b7cbfc1756e8ae010dc80330108f5be91268b3636f3e547dbc714d6bcd3d16",
+    "54657374436f6e74657874",
+    "3780898ef07bd65b134a72804b57d902d24ba59e7beb6db5d2a445c02260af77"
+  },
+  {
+    1, 16, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "040d52b4c60c3b21c32f73dcada65c5cde6037b5c8ea282ee7d9200c6803b9d3f2e60e1fd8fae15241f91607e52878415b19e74b568bc407b554625e5002367e8a",
+    "3eafd14a79d1a69791f284d98d3444a374301e2c3c723ccd82fc21723ab5295a",
+    "0457501a26b8ba0afb3eda3df8a13fe3e28a28f823d47a1105fc3fab8bdcfbc89cb09b1baed1a634c7a787e4df3dc0d027e0e365d5b366f5dc23a07effcd0fafa6",
+    "28ecd812fe9d7c88a643c8e291bb9247f96b953f08cb8cb11a459e6096840f5a",
+    "",
+    "",
+    "2526df0e365d99e0bee54e6b18fc60d4127945f931ba02357f58e141d7846ae359371a988a6edf073e34e561ad762a810b45f405dc699a7a97017d193977f705",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "dfda22118f24b61e377dd5dcb5d02fed544125db2d9c0de7031082c55a0bd2ba",
+    "5836f394d93989d14bc436bc8e28e258a70aa96eb45a8f1ea43b98d3bde15793",
+    "548121f19a18a33ee6945d345d916d79c690c77e344c2918b89b0a415c6eb5d9",
+    "54657374436f6e74657874",
+    "d9688e4bcc1af04b1afe1e73dab9d0112718f3f8a08ac2f969e926efd3e48443"
+  },
+  {
+    2, 16, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04835fa814a6645865218b1dab2e4b89c3d186b179370fc2111e12649b7ae935d25e3790006e814a93ae398392892ae8c0de12f4afceb244ee71443c2423625edc",
+    "fb4493caeb7dc4309d1f2ac348a66ce49b6c365e076c30c5f9515e082d7404cf",
+    "041dc0502c629099d441d234e90b55074f0cf068509d51740ff07308be0351d2044a0fe71e5de188f279d4dc8a5c006db10747496489e43ba6d061ccd33e4d4646",
+    "e551229fd7900de695b5f2bc1a34e2a3fdf3c0c20e15944de6a87a26ab1832e4",
+    "",
+    "",
+    "852c3076c18db210831178dd28d220b1be5578352a6bc08801d6fb7517195bddfb6a8790c9b37403d305f602363a2e8ccffe9c2166a8c630204c4ed8f8eafb75",
+    NULL, NULL,
+    "0468d893b5d18689553750a94536bce7654ab504057c204500e5acbd5108cd6bb9fc1039fda160b3aad1f4a73eae2c17486f916fb5d295a3b2447debac9edecd87",
+    "6c49689f3264a6df14ad0fa344e198d0363bfb97898974daf1faca2205248ac0",
+    "2fbc179d4ecd6b4b142643f6fe3b717bec7d135457e1e1a1c894682ddcd3a092",
+    "506893ef5f7f8fc9e10b1d89e51d561e05ef8c47568414fec054582e6178cb72",
+    "6048559fb734d7ca081dbc49c8d9eda028e4b951be948cb8dbe82e4921403827",
+    "54657374436f6e74657874",
+    "3356735c7a6d2c93905ebd584f0e61215d937eed84e9692a1a7e334d96a9725a"
+  },
+  {
+    3, 16, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0405bc5f5cc9f31d49329185dbbbfbe4a3abb9e06334bf5028e5cf7eedac695e0f558fc87f70c04008c18998fae0c35e082b22a96951e3b638835e8f9b6452497a",
+    "1518f15e4f4bd49d4cf57dc4f8e2df8afc83d3c21ee77645d959d8f866c3a66c",
+    "047c9e5e8ac6f75876d0376b232b39d3da328066da51892063b4f365f5b42e4605f600b60472111a2ce26ed8db2250a1683bb27db838a7744b5d891d21d3d5e53b",
+    "554b1749ca575e932cb12238e90803c0e8d3c290b365d99b8b63ad19b335ee54",
+    "",
+    "",
+    "8ec131437f058d7a038b8a5ade68de8d2616c4694786512362d89fc2930c367b1c2b02f0bcacdf710267acdf4f072bf798ef167346365b58f8a32ad4ab8ff456",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "04388b1113349d52ef507fca3294237a2f3b2740880e40a7a6302169a764e88f4d87ff3a346f9ab32bfbbdbcf8d21ba4c7287eac36db56af28bf778a1020561e28",
+    "9b280e091ad4d85ddaa58e9249e6510e8f81377444129b35f0aeda30d86d0e83",
+    "ec4e7ca1c6cafdd309c0d03ddbf187a670f4c97176ba8d75a8f8890759971307",
+    "b35db1205bfe660921803ec94334747197a76c5689da591539109b24fe2123cc",
+    "07fd5fdc756bb9e7cb4e3edbc9d41dc648efdc8d73d486c7c7a38be89359a293",
+    "54657374436f6e74657874",
+    "8a97d534bb0ffdc25c6328dda68cc83a29b15396f5a8307677e3092e0320cf8f"
+  },
+  {
+    0, 18, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0400b81073b1612cf7fdb6db07b35cf4bc17bda5854f3d270ecd9ea99f6c07b46795b8014b66c523ceed6f4829c18bc3886c891b63fa902500ce3ddeb1fbec7e608ac70050b76a0a7fc081dbf1cb30b005981113e635eb501a973aba662d7f16fcc12897dd752d657d37774bb16197c0d9724eecc1ed65349fb6ac1f280749e7669766f8cd",
+    "009227b4b91cf1eb6eecb6c0c0bae93a272d24e11c63bd4c34a581c49f9c3ca01c16bbd32a0a1fac22784f2ae985c85f183baad103b2d02aee787179dfc1a94fea11",
+    "0400bec215e31718cd2eff5ba61d55d062d723527ec2029d7679a9c867d5c68219c9b217a9d7f78562dc0af3242fef35d1d6f4a28ee75f0d4b31bc918937b559b70762004c4fd6ad7373db7e31da8735fbd6171bbdcfa770211420682c760a40a482cc24f4125edbea9cb31fe71d5d796cfe788dc408857697a52fef711fb921fa7c385218",
+    "000ae237a3250c6365acb81ceb2c1d517404bc68e9d6ecbf0bc42cd2d02a18a2944e13d9b11830d632ce4a0348dcbcb479450d6e29c39f5784fb07df25e6573eb280",
+    "829f508524d2cf6fa51616d9ccd9f862",
+    "f9ac336746772688d4d87ab0",
+    "81c6f475e112ea4139f032e6edc40e55e630d29438a3ab42dd2e92bcde147880",
+    NULL, NULL,
+    NULL, NULL,
+    "59501bad207bf432781371e7c9c26e908958301ad138a3332c6315e18215308dc13191d9c0258b88341569ce97dfb6e54f0a4ebf70d19166256c48343de6a9ff",
+    "5040af7a10269b11f78bb884812ad20041866db8bbd749a6a69e3f33e54da7164598f005bce09a9fe190e29c2f42df9e9e3aad040fccc625ddbd7aa99063fc594f40",
+    "39a28dc317c3e48b908948f99d608059f882d3d09c0541824bc25f94e6dee7aa0df1c644296b06fbb76e84aef5008f8a908e08fbabadf70658538d74753a85f8856a",
+    "54657374436f6e74657874",
+    "2c1d9ac662c578e0739fdd44fc98dae7888816c3f779853fbee596a987e0ef9b"
+  },
+  {
+    1, 18, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04012e8e7975a4bedd89c4536917c7696011ed70dff9d3743e92421e4c515d0bee54613b84a48fe6eb0dc5c397ecc8e10001ed3a52c508a32a556126944bbb04468024007555833b07bab58559ddfc0116ad8dbcadc2ebd54149140218a3042c0c916df7ca952f9061977d29150c51534c5a790230cae9df06e90fd4c5fba197f4f9414e62",
+    "00e28b0281c417a1db047b20dab9eaab8c57fcde9f82becc94356ae168968107a7f9507e77a77f5946840ed5107b8a77eb53145815e942f4c01d251b91272a9864ea",
+    "0400557890041cccad0afae552ccc920f6e1242830df929fb0c552e299463471d16b5537c27c3627e46aa6decf5d0b600566592a7c4c315281798b37fa9874cdac3f050150b8429bf35a38250341eadfee6ecae5cd317dbc9262d0b3a6c44efaa555d26822bf7fc370e75dbf1db5ceeece20b5ae7ed8bd9f384226a4a43aa33093b15a8be3",
+    "0195ebf694a7d579ddb5537b6ebc3c998f62ffc44deee53b73833765c2cc776cfae5a72f5b7d3fddbf854c6a419908c299f215cb212eff21ca6422a43f68689ce8c0",
+    "674ceb6b6d927faaf7f6adfb8fc3c024",
+    "cd67bab65c8acc84e73c2448",
+    "1549772bf8739a6fd35bacf3607b3ab636f1779905672f25e441b8819e3b0b24",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "753ec759fa73213126a8d5eed5f9931fd70a80ae52626ed46f70d0b3d27725f8cadee6d6bdf3553804e03962ce66f659e12a294429efe6841ff475f4a2c6a8b3",
+    "1948430536ca540c53351ae59d7a22408f1a0f201c1387e238ca8c52ea162da7ffe27652fbbfef9b60b66a039c80853a4224c01fd83155a17373c92f3d41bc254943",
+    "3c9a57ce2773fc44d2b03a9fed866e9f8dfd18bfc844c4ddc254fe0c836643b9fd3f54ce090caf5f07829fd017ebdf4b4340857985f21056d5a2dd461dd61da9afce",
+    "54657374436f6e74657874",
+    "3a5a2a565a2ea22cb7ba1ca8757dca20d3af4512e20b64ec4ad34678b180a995"
+  },
+  {
+    2, 18, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0401b3a70626fe69612cbf072bcc521577f78141e9eb2cfb3514ad9e160460976b5ab6c6e50740894b16929ed9774868f178d44f7e1b519b5dbaa9a19468c3d3d2c89a00d3e3ab413c3874b459eca453bd575e2268ca909e2a287d0d026d3499bdff7dcc6bdf1cfcd8eb3e328401a7daca8b20b721c0c2150f1367573abad488e6eac1ae8a",
+    "01d12cbd0eb8b421b5945d7f12c308b0554fed0040ebf279e51b1459597a4ce3e4705e7f06ec78ac076fe4f8df5a45094660510d55156f966fb6d326abd208e79f0e",
+    "040167ad166ce1411e22e0ac24e70c5259e81de2689a05d838e6dcb894c6c372ec0636f3889c16a03dfef4ee399ac83f073483a13ac0966ebc8c21a7dc13d4f4de258601dff805c2254f447051674861a787e571f2cc19b45ccc09c20658cae8917d5acb92252ee81cafd420ab3cef7ba483208174e1764a94d7ca1299e6eb35607b43b8d3",
+    "007b25ed6e784d7abad90c5cfa48075e45a96a9b0232a1b54b209479b0a069e651d186ea05821e38e32379577721cd3f07b837f89dfc57ddeaa4c9af5dc76eeaccfb",
+    "b4c1e183807099d092faa5a28377140b",
+    "625b600a33be34bdd14b2476",
+    "5b7d30e90aadfb13362d0ecbe0ae0ed07df278a470673fd19c8d0f9078c25fd2",
+    NULL, NULL,
+    "0400ef22f755a8b24e272a773464dca9fc5026148375779135853c12b43457835dac6494379d01420b1697a8bd1b275956c32dc7938e0001d0b506a891de69f7826b8a004878cf3ff41c0d47150c61feec702eeaa9a1f29d5f35d4aef965b9a58989b3bc558f78cdb2c3320572ea5b5ce199c1f6d8adf4be80f55fa97252a55dcf25439ce2",
+    "01f8eb931a8c7cfd939008b2153c5ecacc375d7b8b4e77cb059af73a4c3f206ea5524b105f1e4f12f5dc641e6c3c883e85db6e89f42ed9dd5915b6624052d446e4fe",
+    "9f799a200a9be8def31a2e686bfe514a70e7935b90951bda4f7d56ae8c3ad7de5a0a1ccbf193a858b51ef22e7973fbaff8ba6816a03448293c09ed02860d9cdc",
+    "d45cc999ba65eb6bec00cf9bdf308ae757558d628938ada2d7bbf97bf58b401dea5710d5c1f733fd30dade616806669acce09ba32cc57d58020269553a19d632d1f7",
+    "fd95b48b2a8e53cd12da39ecc343c273ce282b00f185b6e980d3b4b855e938ea0ba841e8dfe5ac194ba830a523a7c5d1faff6482ff5e46ea8f25b126b8545c6deb11",
+    "54657374436f6e74657874",
+    "2df8fba4f83b8f2e3e501e6eb7642c688339173d3fe0fb00e0705638d6985c83"
+  },
+  {
+    3, 18, 1, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04006bbee56eaa2fb413c0ae03cc3ce9adacc0cee742ddd3b2c147dc21a6b3124be6fa4ac3406d869b9b330ebbbcb6761e63d853cfad75bc73254b35c88e6e95a4171a017c53e5bfcd8818217abff317c03bf542eaa466a6f8f41be6cfbeae9b255f2361878cbe1fbe18efbebce0131e5bad132df514bae9e9154ef68c18074206b2f0db69",
+    "01b5ba66ae400d58a9e77b7cb924a2801fdecc849a0c059c29c665f1bc855e119d75e0ea7c693dc48a576c860637da2c9b4d595aaf6b33df78fe32087013c6d11f74",
+    "0401a514f452f316bda875c37ca40dd2ee5d93be7c80a81c423fb1500974d87314ffbe8d5aefd34e69d44f310cdf752519cad0a2ef1a240d67049e57222291aaffbb85004680e6232e8555c97eba731c7e0a47a1063e039d4c9e915da35f53ce5310ebdc0a9586b222ebad01ed9bbfb844c3fab4e49c06de034ef780bfc74b774cfabe93ac",
+    "01e1b006811a044a56ce62427cd2ea34b19ef6990c510f6e08ed5e1056c2ac39f61687134d292ae559fd070e31428ab2873b798908c3579e7a6f57e2e26d0dc532e7",
+    "da50f1a50722933796f292d361a6da56",
+    "90915fae644b85b3a550cf53",
+    "84a78abdbeea07967c522611183f194899fc7167c655b2df0d2316f0203911f8",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "040090a5544d64bea56f73d091ba0de8760f59f350852e533290afaf2fe4fcd12451f81889a6b53e30c495003b4483a620a2dc56f056756182eaa74db2b4d86b83e31b01a95d029e05524788257fccb07477073b5010ef95da7b41bc34188cd2355a2783c973e0e2999d9ba6ce8642c83abe78cd3ddc7991f5c444cb788a7fa625e46f4dbd",
+    "005273388f9eb91d7266e53e859a601b2c4091f50d894c2ebfc252d047fab9e2c0cc7d1242ac81a959a55801211b0c378cc3a1d64becbe6d5e37213035e4e6b33b21",
+    "3b37201be7adf77d3e9c2cad6c40c7a202a171c6c3e494ae31ea2e3355c208ddb9ee1f4bc93b6a5d3457f104c2b1c693c1c1dc7b4bff41bf0e6629a2fcaa0b87",
+    "2270197b9f64f86e0eecd49076d05f8fb9f5272c0e7ea519182ae76417b69e7a16f4b0e44116023857b509b84c8a7e48686940cb3ff7e1266ab7c0f3a7ff7770f21b",
+    "ddf35cb77a81c300cb58c8f69cacd45756edafd11246a7908ce09866244759c7b1a88bcbca26baeded33c51ed121c722a16dd3781cbe19463f854c656a2454eef3c4",
+    "54657374436f6e74657874",
+    "1d8d89638a1d3ab795003099f4a59560614b23116f3268081fa1be40d431b54a"
+  },
+  {
+    0, 18, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0400eb4010ca82412c044b52bdc218625c4ea797e061236206843e318882b3c1642e7e14e7cc1b4b171a433075ac0c8563043829eee51059a8b68197c8a7f6922465650075f40b6f440fdf525e2512b0c2023709294d912d8c68f94140390bff228097ce2d5f89b2b21f50d4c0892cfb955c380293962d5fe72060913870b61adc8b111953",
+    "01a27e65890d64a121cfe59b41484b63fd1213c989c00e05a049ac4ede1f5caeec52bf43a59bdc36731cb6f8a0b7d7724b047ff52803c421ee99d61d4ea2e569c825",
+    "0401c1cf49cafa9e26e24a9e20d7fa44a50a4e88d27236ef17358e79f3615a97f825899a985b3edb5195cad24a4fb64828701e81fbfd9a7ef673efde508e789509bd7c00fd5bfe053377bbee22e40ae5d64aa6fb47b314b5ab7d71b652db9259962dce742317d54084f0cf62a4b7e3f3caa9e6afb8efd6bf1eb8a2e13a7e73ec9213070d68",
+    "006c3ecd07198614d1c97c0c6874e522853efb5056f5272fb8d516db13d6767187b849bf59f0421b01af8f44b53f6bc7c73d608030086fd6fa08ee9a519c9b19cf1d",
+    "9e2062cb229bffa17e7ffcd25d30e3544391c2709eb6936f777ca5cfca69bb3c",
+    "12cbc5e68d45d54c95ad63b5",
+    "6c62a3c65dc9bdaec6f45b2550fd90ed45a93cdb4c8c8d9839b5774d34791866",
+    NULL, NULL,
+    NULL, NULL,
+    "6dd281daf38db958f858ed1a9c822d923c82d897007c8378e858647cffbccf5ee8af816cac5d6e43b4814b0002bf625580695fd622dc90adb603fbff60947917",
+    "9953fbd633be69d984fc4fffc4d7749f007dbf97102d36a647a8108b0bb7c609e826b026aec1cd47b93fc5acb7518fa455ed38d0c29e900c56990635612fd3d220d2",
+    "17320bc93d9bc1d422ba0c705bf693e9a51a855d6e09c11bddea5687adc1a1122ec81384dc7e47959cae01c420a69e8e39337d9ebf9a9b2f3905cb76a35b0693ac34",
+    "54657374436f6e74657874",
+    "23483d76811e31fbfed8cb718a4f10d64cb739347cb7e73d76ef2b2ba2bc731f"
+  },
+  {
+    1, 18, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0401ce0f6e35b58a81f9da07980a8051e034f5ad9554985ecbb0e50502f2cd4f0dd1c7c003ed44b8dc4b4178453b81120aec0a30c97913add713f2eaac32a300ca575a01e68fc627924b920f1786e3520ab32acb2b8b65f63ee23bc06a8c42ff14b618175dd38de50a8ef1bf5a92af8d574e852550ff622bc6cb4c9480f353cd58c437188d",
+    "005517e1337af451eb4d3c145634525875ada40a250e463d24f901d78547f22991fe87d262cd3a2cda249a90b33515666cd01e58e742040d99c98a2314589e8cf282",
+    "040101c4c5d4a42f0e4e70f265a9f0fb14182f609b4f6eb5a6364b851258f16f1a01ec9456fc26df789f9f9d929af40506944d5008db42b4ebb80027a074165d70add50102c2b502ccbf139723014f7c409811d3f1fc84c77d3e4bf4b144b51eadbc156370b904fe76194b9eaf940973d21d6416ddb91067b9694fb631510d4e1c2218a542",
+    "018a197a6dceeb465b00eb46838c3bd6ab65a3ee30e678d8bcbf00629574ab8329260b8dea9a0aafe31e4a7830ab0937a32b21be30c3a0cdea681e29f20499a2d4b8",
+    "222f6bc59eaf5650a7f64e3fc993cb5d4da065025f301eb1dbc242511efb2b77",
+    "519f891feadb8532857bd5a8",
+    "f117bba347d702df5c933551b79cd3857365c25704c11119a026f4a85fa66483",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "f34844ed2ffef87116a66d91bb381323529fad6f20f05201177bb319e3a0741ff990ffb1d0e21465ec1ca70832965a3c1696ed751666bf75a3d185aa1e525342",
+    "c9e63306d81c66ccb93086b3f42a583faaee255e025a1d7774d229339b7edffc5372a2aead72cb3b2cf7215e5687e88150e023b54a0630069608f55d9cf646fe92b4",
+    "cf25aa242d3d7994fe291dc6c6ad6e5936d1dc27e14e78589219b161d3e9ccf1f9fdd9f3de5378f64ff46453c1570f8af4fcfef7c6b826a9d967512e8407dbc33b40",
+    "54657374436f6e74657874",
+    "adf0e43fe7a497f0452585f56e3453df84753a0597d48e886f3dcc6a08928433"
+  },
+  {
+    2, 18, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04003f4ee80bb93b48744c5b020d929baf96a38457fb289ea1d19a9581a9fc157e85c9577e531a08dd74ed8990e2f90c795d4aa94134d45dbb966048cdb63625729c0701008c060684ac2f2fabcdc8286bf7f8fde3d3065c6b2c45429b666c993d0d3b74589f1dd5ae11d2377fb3b7098c60d24663b3653173a0368f18b7a2befb90b4d7c1",
+    "01af4ca8764d37e42d76ef87d8565669fe2e7a133b8e443d122153ecf9f2bc98a4c0a93d6c0e6c267d9e1f9702bfc4ae5cd07b8357709c0af85f6276284324552aa0",
+    "0401c0407cd50c52d85dfc2da79838d2f6cc0edbe573db15bc3d459e16a7255feee1091be59d07bd41a1c1f2114ffc53767dc32c83d51dc00d7dafef0e93f0e96eba2100bc0ad8614d5cd5021e0fad6dbeb713e65045bca5cbc2332751580a25ee906da9c5ab9b83fee5c07121cd57b8f5a9b667911ef8c5c68f4b6f5f8c463a3fbd754ebc",
+    "0144cdba2de4ee23f0a3055f85d976340ce6db93c3a3ccec6f397f953d621e21c6645220a9cda5322e44980ebe25b4c4ddcf85784ef3ab9d484275aef71ecd52d13f",
+    "3e2d82420d5a8427a1e89802fd7626797149611ca25119b8cfdeea953264baa2",
+    "c482bb57df0a9c4c0cf2ecd9",
+    "eb90f6528bfa97ec831aa7583e331347fbaee11a66112619375f88c864c1359e",
+    NULL, NULL,
+    "0401a6880df48ddfcef6dbc01073efdb0d4951983f8adbf949f9271a3b09a5fa417fb226b3f4dde9f22745f918c815d36bb88e8dd2eef35535cecad8769fc77f1dbca501bac4e3c599518cfafa9310c4ffc2b518d2ba2a0c72554ab7ca2929fa58b2eae7c83fd67f36149d78442c8c060433ab71320ff326f3edb8a07eb8599063fa45c605",
+    "01e73d20acd52cd2b05cb2b4421ccea7400d2b7704d14d3cb5bb9ff44a67651e965c49fa3b181a2ee650e6e65acfc43d0b74b64fac869130f6695ab40112204cb30a",
+    "4106dea2e745bfaa6eed969944796139b90b47c6cc56f177613d545688ba5bb1d4deafbb39147982e3d1d2ef652910f664b1f11afc8e36c2802c44b732a02b32",
+    "aa06e3ca5498f28677b060c838c564e97ed0c86f62f15d0dd9906ab8e1d18f1f32b39c966f92e62c256c11937a911bab0c1da6e12729f82b052bf3a87832d38444d2",
+    "61fd4ee9dd1c99ec1d5ffea6be6a75c849251054de861a7b2bbd58b815fd982275bd2ad1a85b57badf10da25ca3da9d6fb75b871c600be74618884ca51ace844667f",
+    "54657374436f6e74657874",
+    "81b8c13ad42f10a512eb97705ecbdc4e8c1ccfee9a867a89739c58adeedd61a9"
+  },
+  {
+    3, 18, 1, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0400b7312b4f4dbbb221eb34fe21b56ad5f777a8d297666959819a356d6d2c2c494ce849ec0ba279ab692df1db4be7542e9fd230c5d5e5532ee4a5404d10b3a95cc58700f7cabfe05d845ab7fead770529d768c81c78e4f83a675fb35252459dc47facce676c82e94763cca3adf7de3a9e891fef60b0c0e8abb90e081b5950930c30beff60",
+    "00de3a538e7613215f792e61ac9c63381ab9995727d9b3430cc64f3da418992c3c5e74a5c4c35f42984a6d47d56500c7bd89a8cab30d4e7164dc99b6b11ca84e0500",
+    "04018f8f047f5cf53a77b45935b52b5b10f2da5a9389d76ea972114c44f6e011a3049bd45e27c7adaf02e25adc8ce199557dd75bcaaab53e7f91683c13edc2fc603a9801e689403f62005ccd3c7ff3d8ebfe94b37c68fa569787f47fda314439c934f6a01b52c9fe577682265106e0cfc883ddb874027f5fbd70e70848a2976c6b137e25ca",
+    "01fb165240e92eff9a3945c1091cbaa10f78c0497e1468ca8532cd9b5377ae718d4ee676028da6dfaa6cca95807f4d14ca0406997c240cb1aeb08d55276aaca04c45",
+    "8448bec9def51f26dadd558a64d0d6ec2bcff36acd2dcae33b516a4881b27098",
+    "052ade27332de87413caf28e",
+    "20fc575028cfc8a86754d1fee57ecbca66ea1dd8ffdc824af1a9ed6223c8bf43",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "040024f21bc628ff53946a172ace1f17effc65c2c99b202221a042a926012cbc564fbab64f82000c9aa7c7cba5f85934bbe8bf6d670708f1ab5e95c17204892948212f01f86c1b5e5dc20e1ec560fce0fd6de0dfdd5db1da6d28d516e6905c0e46176da98e2dfce940d46dcb952233bb9514791a37078af54e3d421b20394b9fbcaace2c69",
+    "007a98f9c99ad3be564e1b87988feb0e9e5f2d3df50ae6a925770e310d598ae6cfffba08e6677f691c5ac706f904591bb0e30a159d48c4f3f9d8430576c19799c2f3",
+    "75cde6105cef5b1178af64a6b0d007865b41a0c81a2382d746c31db74d6b21569fae8cb61106b6a68efbc2957c7eb3c7e253b814e304b8d6531fcc33d2f988b8",
+    "c15db130208d5e620c8cf79ea218f5568973032220cd78927b5c17298206a534ce3b4b95e792572640f7ebef77e0261a7c13111e958cd8c2f8f360611003c3c92866",
+    "bcf488d68ce224f3961f6fbe4c03a41855adc246052d57f9a4d2583a0f7a927f393020e61b00e01552c45310b455407d7f005a4b90bdd470d70cc346ac94869ec40e",
+    "54657374436f6e74657874",
+    "5276eac204dc27736052c619d0fdffc5da0b6a5d43a6a2baed8299c613a61c6e"
+  },
+  {
+    0, 18, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "040086b1a785a52af34a9a830332999896e99c5df0007a2ec3243ee3676ba040e60fde21bacf8e5f8db26b5acd42a2c81160286d54a2f124ca8816ac697993727431e50002aa5f5ebe70d88ff56445ade400fb979b466c9046123bbf5be72db9d90d1cde0bb7c217cff8ea0484445150eaf60170b039f54a5f6baeb7288bc62b1dedb59a1b",
+    "0168c8bf969b30bd949e154bf2db1964535e3f230f6604545bc9a33e9cd80fb17f4002170a9c91d55d7dd21db48e687cea83083498768cc008c6adf1e0ca08a309bd",
+    "0401f828650ec526a647386324a31dadf75b54550b06707ae3e1fb83874b2633c935bb862bc4f07791ccfafbb08a1f00e18c531a34fec76f2cf3d581e7915fa40bbc3b010ab7c3d9162ea69928e71640ecff08b97f4fa9e8c66dfe563a13bf561cee7635563f91d387e2a38ee674ea28b24c633a988d1a08968b455e96307c64bda3f094b7",
+    "0027d3b66bd43e58c81a0403bbd83a0a22f74080c7d2e03db9e6ca533e7fd440b581190f693e884e99c1976476411a751e05799e3eb633159988df7d403b378eab6e",
+    "f4ae46e447f44ddb7af4edf67b7bbce376d774b6e06a8d88571ecfefdec87745",
+    "adbd83083d1c47d3d3c30bac",
+    "65cad52078696c8602ca1b56fc7051ac5eec9958ae6862140f04545926f6f1b6",
+    NULL, NULL,
+    NULL, NULL,
+    "e73f28d166cffc37eadd9f78c770d70c2007bacd02dd7a7b2390956401e89c0157d395fa13fe60fa8902578b8cca9a20ed00be644b7eb6f77e3332ecfc63b601",
+    "566568b6cbfd1c6c06d1b0a2dc22d4e4965858bf3d54bf6cba5c018be0fad7a5cd9237937800f3cb57f10fa5691faeecab1685aa6da9b667469224a0989ff82b822b",
+    "f9f594556282cfe3eb30958ca2ef90ecd2a6ffd2661d41eb39ba184f3dae9f914aad297dd80cc763cb6525437a61ceae448aeeb304de137dc0f28dd007f0d592e137",
+    "54657374436f6e74657874",
+    "88d45aed98aeac9b4627805a5aafa8aeff81457a18dc211db691ef64c5b14a1d"
+  },
+  {
+    1, 18, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0401f458bb82512325b1b1d43c800ad8ead076e9611d89f4758d9e219c670c011a0cbe855afd3eb26efda09267ae810e63bd74c8031de8137d25521f94840714d5ec6001f0282cd80999bccf62d33b77e772f7a39d6ea2724fa5b609b0a721d6a640b73c9caa49f861806d56a5b9659b0cd9f3ad2e15512d7ecc4354f272cce22d6294779a",
+    "007c35842a7906baa88e0c4fc379de1568765d7db7381960b9ee36bd57e3938dca3a6dbfed7045e0fe43679e0528a7687dc23f8348bbba0aeb56330e39eda544781d",
+    "04008c8deff5ecfc636ea8056b3f4187bed210ac4cf82bc3bb8045c514a3dd61863cea0218b0f0253624ea3c6a8d9195f2f17f5bcab5ab0d7140bcd4c40cab455707da01eed3c38fb1e0a1d1506b0fd25abea429f39113d7963a626243be616455337baacbf54b1c14c50e0ecfdf59e67574bde945d24f689bcb8680202afe6326b0174a89",
+    "01c71d9b7e300c944ef7f65b97282f6a8d912477a9f7feb3a7eb7c4d9ae56a9edc30a536190c86375bd09d961fb59ba39541e9776b3ff4182e2fcd34b3384f0a0aaf",
+    "c898d4bbf1832410da205971346124a84a0c12b3763a7c06a394166d21f5e1dd",
+    "b26d9a2cf1357cae1e929442",
+    "25b8635587e67edf4a9b70ddaa922e0b6cef4b9bee83e948dd414947d0aae700",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "7ff3f72d99113ce0667e6800829a3e6f07c4df79c34fb9d7a3394207fd23e1969d1dfd968711eee244772af20147929517d86cc9f6c1d2ef311f804622ee3fa4",
+    "550b5a79048708038f3f4580b294bbff64a8713281c8c6d6a5b95139702ac0789f62293abbf4b6c3acf2e2ed784d3fa43cc6c679814b253976b7d86f2e9d8c979a6b",
+    "6966251372739d3fcce3adbcf8dee4d8ea954dd81999a0e8476248c90b64e53fe413defab99d61f14d3600e6ee69c6df47a0e34588b274cfa21fc6e88edc80f89e03",
+    "54657374436f6e74657874",
+    "10b098f36e0c0c3f62ab038d160c7da1e6207d7fdb72074308502c4a3721ce84"
+  },
+  {
+    2, 18, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04011da0436077e26578b5a50dffd8d56832e6941e0465c4aab3875447ed6965ca10a4dcc19400170dca865592d483cb58fc28e59dbf9ebaaaf1ded87cf146ab1fbb1901581bd0e13600ea4d398dded9e899ba02109075e920751576ffdc9466a68a46549344d326f808eb1280dba9ad15e2ac71470cf4a627c62ae9bd74149023fb28a38b",
+    "01897555bcd43ee0157c13b31f850d8091db285b9c181e9bd4a056e2b77b732e9be5cea23d529cb4cae7d1421abfb62c410b1f897d41d9fc11e6dadcd832c4a73c41",
+    "0401043bf4020a8f010412a53856e1e142944badc3974337bd4f258ff8a5304d3b3878dbc4db63d9c0dff93c8fed5ca6adc5971ee8010b37db0fe4fd217bea144baf4301ad7d27dbdf711b951aba6ee0aafe8f0de942f8dd082c8377fc7b727da2f1d22a0871011640b73dd3a046ea64466a7b985d347bbe7662edd23626678a07207ac1f9",
+    "01891ef8fcd1a2418fc2903e42e77383357483a4275baa930a74b534786454f6db0123ecf5322b1c9f9006d16c496328398021f421deb2894d74ff58dbb0a787fc7c",
+    "eb9544e4423332342dc1784d086ec5789cee7776f97dc2df814b57535e51bf1b",
+    "45da82d75544a7dae10e9831",
+    "45f4cb758582f08b8b2b3074ba1bc3e9299153122913eeae305fd227887bc547",
+    NULL, NULL,
+    "04003723436e3499ce249df96832287fd0fd377de596baaeb744cc2a1a06c989acef296f1d6d887e7ca1fb98b7a13e00146e2bf5e23d73c89b82cd898df126f898015a01d89ac13e4c88b93ca7d7d4ba4290d360f67ec3ba7c6a88afa51955c55609d9df091f091dde3632ae1f4abcb6f45f956f2587e948929558096e6abb65c0deaedf80",
+    "002c885bdee68225fadac861b86632a91f0d2cc3900fa576af2da27ae5f1e3fb9c8c641e342df80e612bae341fcfb6d5b14f2a84188d9fdbcd5e6a16fd371d87164c",
+    "9198c6fee952700cf6e7ed7f0b1efbd375b5c5e6dfeda06ffa5e127c9ac9e6fbd02a1a547ee268aecfa19ced505cd91bb69c407380e1a741507e487a55c3c428",
+    "83842a22a00d22e346d2c65f8f99f359d3131bfbe6451a14f1b6cec4703cbfe96eb4c3475de5b5064ac58d67d164a5da0c19682b2341255bb727a5bd3594125765a6",
+    "f18b799ba37c1dacc3cc7c735b1482f1e3e0c41f18c80f13185ad984d8ee61d4dcd593bb4e7f3d1a66768c5f03db6dbae527a880715a0522a060ba11ed4f25cd1f04",
+    "54657374436f6e74657874",
+    "23570916bb52bc4b83b98fbc640d521eee2244f42b75b6fd0b4ed7ffcfe6548c"
+  },
+  {
+    3, 18, 1, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0401155517c52eab850375772ad82adb0a829f6532953a4683e3618d74d1bc4bfa865f1ac8b45b3399764dbe399795aa91c8f14399747631286417ee1c1f82afa7dc2d01c4c4c11af9539f16e895891996df4f7a49226b543481612be56f8147d4b1f5e27537324bf1148b0c63defa7efdce3e2264a63dc2520ed173510f3be437cd8d548e",
+    "003de4f3598ff9c250efa793d0860a3b72926aa851e911e1350ab191a31d1c887cf56a5d5bac1278dd911e65e996906bfff166f440eb6d7b31c91e34feb06aa2398c",
+    "0400e5adef7e178bce0c908cd5122f337ee0f8dc5cede93b6e342d7de0a19f4487a13b63a7ef98131d356a8658ff8a42e0dec9bb7022187c282a032191609fd65dffa80024eb16e156af999055e7e11d842232e9e3d9be9eef33cd2ebd6c348d863e66f18701cd249c7ca907131ca98b775b3acacd1e0c5331ff574e8e8aa9bb2f204b4aef",
+    "00a4149da44e7a0bf65d02995521b18b18aa8f4eab11758e0ddb02e7be778bfc6e852e9e7fc0fd0b3c91b9905c0fae5368bee1e82b27fa2b73c51ec3430cac727428",
+    "6c92626445d925377438c758a713fa26e50eaabec852118b9b9eed7f54cce894",
+    "3b29b8bb622ba14d9ff4d4dd",
+    "45caa601cdb71555ca48db1b72e2ee49f22589d43d4ce5a54cf1c9fd05da24a3",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "04019217082e755b3ec4c6db3e05fb707020e1bfa3e739d304ff42c92fcceddf03ad2ecaea1181830078edc065c13d08d7ca611536e407fc5dcbe4763a098a6edfef65013aabc7ddcfc5bfce0dfabe31bbcede6728e3be66f783332903d3e1d54f1e7b1ed3632df7ca00c72d0439d4b14c17d52212b5999bbc92c6c9bde3a5da1343f13fea",
+    "015fe14b0d7e41d92cc4737dc12e460677ff250b90512dfc330ed16c567849ef75491cbd93e168543759dec5bb4857feded56a47089808a6a5c6be6af7b46aa6c18e",
+    "1259bdd55fa19a54f83e7ce8a76ac50fa4b3b806e4570a07a474e2e83b15434126df0c1a1061ba10b92721278293cec27b44c25329b67283a28391015272e78a",
+    "c1bbed1e99d49672e94e765946244124ba12f9f6e311f0e780ad34dc2d5693d72eb11939f67922e976c2c9c27fe50977a85e470f64c963c0d33aaa6d3a31ece4cf41",
+    "9b9e1102922a799135fb0da419932a5948bb49cf5bf72f66517bfde4b85dd07c2bd0cb23ba6e56b257e23ad86978d218924801783f81fcdbde6ac467a29a3969309e",
+    "54657374436f6e74657874",
+    "cfb6062516e1cae6235e147efde9ed51ff1d10e740cb5bc58f79dbbc7af8a286"
+  },
+  {
+    0, 18, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "040143b7db23907d3ae1c43ef4882a6cdb142ca05a21c2475985c199807dd143e898136c65faf1ca1b6c6c2e8a92d67a0ab9c24f8c5cff7610cb942a73eb2ec4217c26018d67621cc78a60ec4bd1e23f90eb772adba2cf5a566020ee651f017b280a155c016679bd7e7ebad49e28e7ab679f66765f4ef34eae6b38a99f31bc73ea0f0d694d",
+    "01ca47cf2f6f36fef46a01a46b393c30672224dd566aa3dd07a229519c49632c83d800e66149c3a7a07b840060549accd0d480ec5c71d2a975f88f6aa2fc0810b393",
+    "040073dda7343ce32926c028c3be28508cccb751e2d4c6187bcc4e9b1de82d3d70c5702c6c866a920d9d9a574f5a4d4a0102db76207d5b3b77da16bb57486c5cc2a95f006b5d2e15efb24e297bdf8f2b6d7b25bf226d1b6efca47627b484d2942c14df6fe018d82ab9fb7306370c248864ea48fe5ca94934993517aacaa3b6bca8f92efc84",
+    "01d8f4fb0d87e60cd581caaf4b00bfb904de56fa909cd63dff2d38dddbb0123c3a2a52ae3e1b77f83e18a8d3e78f1837b61549477869bb57448d3230a43b8d7b2778",
+    "",
+    "",
+    "4b4678b3a4a658660395597ed44997c63044ab64a07586b42ef761acdd165cb2",
+    NULL, NULL,
+    NULL, NULL,
+    "9945faae6a58ec6039cdaa5632776dcb1f167fc919555d49a5b0232b1fd126925634c654cba83452f2e9772570c1ac0a5b790f42922715b450af7def7747a76c",
+    "5dfb76f8b4708970acb4a6efa35ec4f2cebd61a3276a711c2fa42ef0bc9c191ea9dac7c0ac907336d830cea4a8394ab69e9171f344c4817309f93170cb34914987a5",
+    "9fd2aad24a653787f53df4a0d514c6d19610ca803298d7812bc0460b76c21da99315ebfec2343b4848d34ce526f0d39ce5a8dfddd9544e1c4d4b9a62f4191d096b42",
+    "54657374436f6e74657874",
+    "da64da3dc243d0e22c46e1cefdf138f1406bfa72bda595997d112ca267129a01"
+  },
+  {
+    1, 18, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0401b1f870c8f9b656e535da0ce7da8c1649c0692b66633597a214a9b3b5cf6e8d1c133d85cde43af1996c4ca23ca5557b4ea2954672c39985303c8d59317c0a170588003f46747c28e5ce5c0e09274ddb56dc7878de6fef643c3c74844ff11c7123ead49bd813cb3eeb6d57e2fa76b6747dc9546a98d56d96cfb3c99304a2a3ecc2285f9e",
+    "0001dfbe81215700def602b65a5137fb3b166ea0179c6ed00cc35d441511dd071c2b75cae051232906d401d0abff3cc16f9e84d003def4d9a0db950074b2b99c8b99",
+    "04011f5bb5b1336e9c1d816f877db5efa3bf6dd1b8fef01ddb277936b0bad8cbdc3fbf989dc0a7c5e624aafda75bf7c61cac8761a7e4db6894ea2d786fad89b8f5583100a9f86cb86de0c16389263a217146d842624704e2e7b7314ffe511594420904288d8e24250661fc42997b7523bb4338c563fadb098b755a323dcc9ed4cb8129bb24",
+    "0102800dd74b3e960f2853667d5deeb498d19253f5e3d8e41257a98447119ecda2cdc6f86fadcaefdd2e400829ceaea9c9aa0d71999870cac6fa4d0bd51a70ca7d90",
+    "",
+    "",
+    "c6a52c5c96a5b70e02a42b7093bcc56e3b6bdf8c5020b28e2b98f4a71b4cb5ec",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "494dc4f3e79c0c9f58a1299fc11b3fe078605567258e47c76ef7bc4f411625fdd9b9df3795a86d3016091611bc722fd99f862282deb61894db055a4c31941d06",
+    "14108527fe36ab61723a7f1025a49ad1d0e61649bb5c51e49a3acdf18e3aa981861b9b88872c19611c698320e0a3c7426eb192027f031130c776da4e8d1ede0c3d41",
+    "8a6d932bddc4a88d61c8415d20da2a594047820e761bccaf383f0d8570ba1f0bdb93c7f71464141ad39e04ac6403d594247b93b0f4d9db68b7bbd4ecf80ae3e21bb0",
+    "54657374436f6e74657874",
+    "58ac39db67372c73b741750eb21d3fa8b709f913f4db1c6eb39ac7ed371683f6"
+  },
+  {
+    2, 18, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0401b7596ab901aeb7a6bf99787a6d1774bb7b13033d0ac06d175d8817b9e3ba8b568aa06203b8dcb883c5a6092a5e406c2bf3cc97c6de568c4b6811aff4729ebaa05b01408c2bd36d3dea3168e9e1ebe7ce9ed1e324c8f5f0b08286d1cc6674037ccb3bdf4e406b4b1c518fe618e356fb02789d5b159d62e915c9c15f56827c191b232c5b",
+    "0067afe9f7fb005752f98c488be6b218465f952c4e49e12417a25103631e9ae98b46010090e9d8b3d4b910f921891520384d40ad59ec065044455a31f9da585a078b",
+    "04007c715a22b25f5b8f0a50eb583bd1f578bd823aa54e2241f59b90f383152f04e5b78231e0328bb4f53097ccc2c3633a4ed79529e3668c60a6c0e4723d635bc9192a01c9f8be1ed7240616ade9225b408d6019bddb78c19014b5ae6a6658ef5fb2dd7785d97774afbc0e8d7ce0f5e0e4b90a5b5d025d8ff97897c2465334ae5b3d3c84c4",
+    "010d65d7d484e83cc88057efe172271735f67e560ef0e2142bcb3ddef26d797cef13085dd5e6967715294ebcd9ebcc0b0c6421cb2eb59851f241eef3b41956d56af1",
+    "",
+    "",
+    "abef7e38be7abbacc23aca422bce1a411f45b110d5c4abaf9fb6474f47184086",
+    NULL, NULL,
+    "0400d25048b30d80b3bdae671d10e8f55de6fe3ffc54f7b9f477e6d449692c7a25edcba7412af475849a4d498ec169ce9dc1715ec6a8576fd6b06c58de7d60d73df99b00735d6b2bc3a3b4718f8f512ca545b452f5df5e80fd1200a188638021e23a2fb5d45caedbb01b281da8706bba0507530937a5909b6bde103db0d393a414c675ad96",
+    "0144af44602b50945c7095c85710bf033b81a79f5ae4eb5cc19f9f4ca6ad52c44580390d762c197c2598c4f754699fafff9fbacf88e72acfdee4fb5bae9048e148bc",
+    "c160edcd910986af4fd1848e4750f9ce0c1aeecf4ac33d80627d3ee39ac78883233c7f93f4137a214866989b002bd3f6d5ba2f55bf1faf8e8c8819cd6b1bfe6d",
+    "148e13a815510ccb5eef1889244ac9395385aa27228fdd0eedd13210707e07e9a874ba083bbf31ad170b45b18369dbc4cd437ec214d226946ce47743406fb083b981",
+    "915b197dade93af0286c7811f7d8aa4168281cb08af68f3a77bef66d617d7b592a9a3ba7a7b07c21adf430ad36a47331902a5eaf334410a20e2936675c97fb20c794",
+    "54657374436f6e74657874",
+    "a04ccbbed6ca968a03c3601d7f899c1ede9500294d588573add2b81e2dd7f1cd"
+  },
+  {
+    3, 18, 1, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0401bbbaba9999652f5498cc981105804a2737f1c69e439b35af39451102d8c806294f76af5e4f5052baf2161bd877c77afa018e6058c68f0fd95623da9e52e8d52d9d00b553f4c3655dea6c71971bee2578abc67d018e455b1ece39d617caf971b0ca8ac44ffd1cb48028cd98e97df74a84e98a45a9a5dea53989870bd95fe0c546eb082a",
+    "005b03bd1cc789e864073f28c6e5b3e69d8aae86b6dd56460e8eb8788b757bbe0aef9c60010704557bbe07c34db04bc8d72788b38216610af41bf793e0c91665a718",
+    "0401b5306af102a65dc126626442e850198780c1f342f83f4d6812e94875f4d79f84b97e507dd711cbb0ae4c9a40355e6337109a3a81b60f0b72765a99068d93c5baf8000e960a64d0b8ff5c33d41dcbb4d354d740a4f1d233260876b7ff88b495042d049c6285fd228b20daf309f51839c93fcf4ca9112c970035e60e73fb2a977375fea9",
+    "019e67c66febeabad416bcaf2daec2d86badbe12968b82940dcf192b36d490440a53a1161bb1d6f2d56e852fd5e044d62749cd45b0d2884ed2c25b626ef565136cfc",
+    "",
+    "",
+    "f6004bd36e1090ce8d118c33503a12dd638bc1aee48b6a96d09d639f7c75516c",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "04000602564ad40d5c82eb2eba0af2d3cf77f62e0a32b2db05f1b04aaf64a97d604fc509d4b98979446197877af380e1e3f6e6fd9db10bf735b6cf5c5d3c6c98d3f3470146398de0acc2031208175fb261fc270cd4ef46c306154d5da0cb8b7966267b827fc39f35b960a64c022b91ba54fa49395b44e61f758e1f6a63c1a2bb5d2a3d2279",
+    "010665c45ef2f85860c4768290844a9d76a44edc9eeba7f29c032ff5f66105a20927c971d8ef4cc3d4c49d6be2383541f0a6526adde1ca6f2cbb69072cc44fbb704f",
+    "dec73be01e079070d6d354fa772a5e88b2c2970e94253dfcaa25ff9492c63d62bd21d6fb0b9f3a985e9984896635092ac843559fc1299c3ca63fa10e242885f4",
+    "3272424289aea1ada2fbcf9e21c2f4841819945373e6b7710ebeab2ebbfc88a16c287863a1a469ae1e5d8a26ceb88a5bc883e1a3610581af7720f8addb435a302d09",
+    "0ed7b46351efab3ec0d5cf27b4e010a823c614299f6977230cae5c9007bb1539c2c6c8de9a7d3c6b20d0b93ce3cb81724a9c75e8319cbdca8265049eb8ce1377b9f8",
+    "54657374436f6e74657874",
+    "d0114653f1cedaf8bf5d032e019cb23675ff0a732602966b55d21bdbdd3d45b8"
+  },
+  {
+    0, 18, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0401e06b350786c48a60dfc50eed324b58ecafc4efba26242c46c14274bd97f0989487a6fae0626188fea971ae1cb53f5d0e87188c1c62af92254f17138bbcebf5acd0018e574ee1d695813ce9dc45b404d2cf9c04f27627c4c55da1f936d813fd39435d0713d4a3cdc5409954a1180eb2672bdfc4e0e79c04eda89f857f625e058742a1c8",
+    "019db24a3e8b1f383436cd06997dd864eb091418ff561e3876cee2e4762a0cc0b69688af9a7a4963c90d394b2be579144af97d4933c0e6c2c2d13e7505ea51a06b0d",
+    "0400ac8d1611948105f23cf5e6842b07bd39b352d9d1e7bff2c93ac063731d6372e2661eff2afce604d4a679b49195f15e4fa228432aed971f2d46c1beb51fb3e5812501fe199c3d94c1b199393642500443dd82ce1c01701a1279cc3d74e29773030e26a70d3512f761e1eb0d7882209599eb9acd295f5939311c55e737f11c19988878d6",
+    "01bbe3a4e3be70cf3c589d340fcb0e221ea6db07af3ac673bdc2d74188ca70b9086aeba2e39e497461363419cd1691d9ae453f8092e4df26eaa63f866738310d9328",
+    "b7ae4daeaffb64e9de88beaa81aa4da3",
+    "fb856a6033ee142b92d6eb63",
+    "4b569893084d0e6467a0bd1cd3dce3c8f2d2bc146b175026e84f70ee9d05b4951993b51e769eec791f061af0ed3aba0757972d78d54f4c0ecc2dde01deebb195",
+    NULL, NULL,
+    NULL, NULL,
+    "e8d9d4ebf5911a6048e15638b2248753c5f5a76d4229fef34e905d7e60a320fe2a7b0a61ddc8aa7c3988dd439eded7be497c0f054d3788218c9c34febab2b445",
+    "018b6bb1b8bbcefbd91e66db4e1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+    "7bf9fd92611f2ff4e6c2ab4dd636a320e0397d6a93d014277b025a7533684c3255a02aa1f2a142be5391eebfc60a6a9c729b79c2428b8d78fa36497b1e89e446d402",
+    "54657374436f6e74657874",
+    "e3be1ae143f77450427b7e3123d3323083902ff3e4600e8c6e070f383f4ef8dd"
+  },
+  {
+    1, 18, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04019f3b493f53634d1e44224f6af757b80e071ff26220e33fc1feb87bf68e2d40484a636c04be45a05f6d423cab3e9081f6799a03c22ad5d98f01401fa8303e5ebde7010c1c068404dabc80cdf3adab9e00e415e05a6935028858d9e5231d6c4ec3db83fdea587a35c6ea4fa5bd1edc702e026b7713af68cc16bda1591a250c25d7b22162",
+    "0014baa1efbe9dfd4a61dc592455859defeed5f2b8e6492d942737fc2696745f585a71a82eeaf1f086a075a19ada572a37b7b2295f62a56537ed406ab3cf5b24aeaa",
+    "0401fcd057ff1053a2ab2810de6941b64c0dd8139a208fc4808ea78353c4a1c36f772e53c7a26de7ed1f3184880db678a02937e3e40ca9aae17ef3371ee57ad48c1d2700471a52fcf4e95f57db377e82069d3757a02e98b588e935fab2604bc790eeb8b72067fd1b505b9feca5c5c86c62bdf80a3a3870429e545ecf3ab2f3e2f83bd8d67a",
+    "01a1ebd77adf3b478a030c69fe82f842be5986c54b8841e6775e7a6234dd990c715d054662c84f5ee419e9fc32434ae1b69e40339d4d8155e90eacb956f031730d4a",
+    "a97b660812a5caa28088fa2f491a9d9e",
+    "dc98071f41d23172e43f33d8",
+    "2bcd1d1816fe0ba14e9bccd9f813db78beec530ef70dd58d23725da8763b461ec3500f819ed34093c50e62585ce74942fe5ecf842d2f511d4ee5d8a5ffa69b4c",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "eb7e17024fcbf53d8120f14db3769651cf3d281b24d430d2b32568c643247625f3b8c58f3e3078958819af06644a6bd21287ff77dc87b934084da52ccb854521",
+    "87db9cd862f265f74eadd3c6deccb94e48e19f26a5b2d4656516dd6e0ef32e8c0e183d7a4eaacc504226a44109dab753025e667999a8618bc9739a000675cd239b4d",
+    "c6138e0f7d76d20c54502dbee72383bd3515f4ad78c93e742a20078c2c2e490cdfc96d7d2835eac4a586f769b08f76bbf711bea343d3684342e5f92ec43a83593b80",
+    "54657374436f6e74657874",
+    "95a5fcc552ce75c2ae8a0575b540f9d15bbae266adab2dd11fc9f14b92005d2d"
+  },
+  {
+    2, 18, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0401c42330bb25c88eace11f73d297f9e59cc8a956e6d3252b42f521dbe61915eb7f99086589fcc31414e97c59f2b03873300638806eaa2a107c25f3b0519ea0be13f50094d6b1ca47230bc95dc5a2a22e37d01ff12fb484f6e6b8ab99171a4b5b59000ed70d23315924cabf790c6c267f40d0c6e1072af93bc529edae30e27b1c2da14f8e",
+    "01f65e54fbfe298b8704595b2b6ed235f76284c21e669f3fc3e88f0423a7706cef6e060ae4078c436cd9a4aaf312787c08991a817ee14dc48c487c658580d4267881",
+    "04004631acc6884f44ca28527f8e92212709437e53e990cf855cdd910f4ca93e067d7611541b19a4c2c37e3ecf1d781b4838840d9d2bfb64338175802345138c245cec019ac62ab2dce06e584cc407b933e682eb6848611efbc9b6ce68c24d1ac91befd737f63021b93654fc5a8f4ca35b0899f42b78920a2def54f57bfd51ff8059074a87",
+    "017d1ac3449371ed0f117f4086a8a0a7be5eb548f4b2e87203f4becb43e4c1801e07a49cbf02f9872e72f950d525c51f9ea82fba0c45e222b30de8188a7e3f077688",
+    "78f10a425764ca95a2d51c6fe88909b2",
+    "3211ef1fea85ca6c115d9c90",
+    "9a3e8e19d6fc389a8fae4e2ce008c0905233185f3239c9ade248195307cfb583d547c776f45748c72d2a788c8f7754b2693f5c4b229bc9cbebb29c0cf8f118ce",
+    NULL, NULL,
+    "0401a22556675e3a5cc3d1512023a39048491e6609ab1a0dcab6b91fdeb9ea709514e0955be23a93c37c0b8a00bf94fa61a15c27e0af39d8598b2168792d02000ecf0f00c48c856b0998a1d9dac0cedf9bdd694a9a0e2d95efc85362ca563dd0be6c4a1ba140b49f30fd97d9e07c4044fb60fb3784129b3ccfacccaf676b4090484dc98595",
+    "00f3579410baac65c169bd06ed6cf516e9d289e49cd48cc9c352c6ab992f4104c8e5411b66efc2ec728da4ad8b8a9f052b632516c2e265e5985b9c6352a4ff141b5b",
+    "04d117f3e55a8cf97884b544a4182fccd747499e785199b3cc9379c2d43a7a5a6c392257cb97e5bcb978858477257a9bb992ac89e9295c7cd8ec29e7de7f9b07",
+    "88ab68f695462c3726286bf8db6c274d45f6484474c29b82006a43f44cc8b187ffa492d79d0f4fda41bd9eaa1a2f6b5b4e98ead4a3982971d80cebccc3d103b84ce0",
+    "3a098fae968a721b6eab085904ffa73c2ad7576212d9a6fd7421a57c7d74dc8af2e5f503a0f7ac4acf5510569c110a1f53a86294239a8d4207e31a1451894624476f",
+    "54657374436f6e74657874",
+    "c1d7f3417b5551f903a88ff004cc87a3e2ad0455ccf6d513422007a46ad121c3"
+  },
+  {
+    3, 18, 3, 1, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04004e7fd8134b992f93661a949b11e93966a571f05d73a3535897a068a83379f19a348ab4f8bf3891d0c8e9ee3be87b9dc342c573116f5fadb9e694ae64269eb2597500b0b0b2d54c62a5e9beb1b3f6463fb6eae34ab32ff097d1a38ec72675ba042117b54850c0eb6a6c7594588f7cdd8a5ac3e0283890d125e2aec49e7427d105efae52",
+    "01d2082b6a2af4c8b3896f27d49b5aa1a29df49300111d4339d91438346e84611e6597ccfc864dcb4e7f5c26afea9f7ebaa599b62bd6b9baed5d39b8494bf59f8511",
+    "0400f30cea3e9069e2d74658751ffcd54578005c82bb253f6710e2873ac093f58dc19887bea69b6003e1e636d05f72ed9ecd38ff166a93e042efe57dca426ca223033c005e036d6e38eb9fa718434f35380942aea351ebb6473bace137fe792d241215ee7d145db452298615aabc3178550ed9a3b5ac12407780a9d57266a552b8452a4c52",
+    "01db124eff897bac7192fa70b925b4d7de5fc8df534a54b0ad6f67b2e73202615600879e396106a60bcc2f1897e99cd76ae8fe2a1d7650cbddf42173c0f33edc9cf9",
+    "7dd39181d6245abf310006a567c31b74",
+    "16e906b45a0515f7e542b5c5",
+    "fa8766377a9f11a2e7ef0fcc984365230a3239573da413290992fe48fc688c93c2830154828266da1393a6a662dd8c8633de940c425382c23e990c48fc93cf10",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "0401440a728d61959fb582a1e7c2978f0d173d5d4346368fa16af6cb94a2bd83a484d9766d1924f8265bdf99f2859f58b141ae2df528027b0859c4dfd0297fc3fc44f5004f173ca1a114d5b8a2fb394b1c19d8d084914ada66b885fed5679b2c0a8f6d5b48d629ab09473c755fd0a790154006b8c15a1d78d2e87ce01642ca272878106249",
+    "01bae43ef5a5d2690c5b175dfd70b94b05857c4d5d34aefe8bdfe59c1a1e63140747533bbfd3dfaa3751ecce4df12468d37ab94e09d6f25637a9c64e4a55fbc72a43",
+    "184d2c20295675c3ac521597664ffef56d0e0dcd9c034ac149bcb58eee7e84631a58c64b705d8b84cbb1d24ab8063311d43bc6dfcd469ff9345bc06175a776a4",
+    "6998c313d748fb5709c30e2c95ac60e29e2f3da7238b6ccc89df967c4da4626a888168f260815b4968f7032b789fe30e2de586acba70a124bfd450efa1e5b6b18b64",
+    "14ae8d3bd341166f7d28890720d2a729f5062b1eb29bc43f7c5cf6fd1ff83d825dff531adeee5318ecf030b824c37ca286d85fc4bfdd5d4f1feb10d422d414fdde4a",
+    "54657374436f6e74657874",
+    "ba593ad3d22c0f3e8fadf4838e71c80727b358a28af718496c61317abe049022"
+  },
+  {
+    0, 18, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0401b45498c1714e2dce167d3caf162e45e0642afc7ed435df7902ccae0e84ba0f7d373f646b7738bbbdca11ed91bdeae3cdcba3301f2457be452f271fa6837580e661012af49583a62e48d44bed350c7118c0d8dc861c238c72a2bda17f64704f464b57338e7f40b60959480c0e58e6559b190d81663ed816e523b6b6a418f66d2451ec64",
+    "01462680369ae375e4b3791070a7458ed527842f6a98a79ff5e0d4cbde83c27196a3916956655523a6a2556a7af62c5cadabe2ef9da3760bb21e005202f7b2462847",
+    "040138b385ca16bb0d5fa0c0665fbbd7e69e3ee29f63991d3e9b5fa740aab8900aaeed46ed73a49055758425a0ce36507c54b29cc5b85a5cee6bae0cf1c21f2731ece2013dc3fb7c8d21654bb161b463962ca19e8c654ff24c94dd2898de12051f1ed0692237fb02b2f8d1dc1c73e9b366b529eb436e98a996ee522aef863dd5739d2f29b0",
+    "014784c692da35df6ecde98ee43ac425dbdd0969c0c72b42f2e708ab9d535415a8569bdacfcc0a114c85b8e3f26acf4d68115f8c91a66178cdbd03b7bcc5291e374b",
+    "751e346ce8f0ddb2305c8a2a85c70d5cf559c53093656be636b9406d4d7d1b70",
+    "55ff7a7d739c69f44b25447b",
+    "e4ff9dfbc732a2b9c75823763c5ccc954a2c0648fc6de80a58581252d0ee3215388a4455e69086b50b87eb28c169a52f42e71de4ca61c920e7bd24c95cc3f992",
+    NULL, NULL,
+    NULL, NULL,
+    "776ab421302f6eff7d7cb5cb1adaea0cd50872c71c2d63c30c4f1d5e43653336fef33b103c67e7a98add2d3b66e2fda95b5b2a667aa9dac7e59cc1d46d30e818",
+    "7f06ab8215105fc46aceeb2e3dc5028b44364f960426eb0d8e4026c2f8b5d7e7a986688f1591abf5ab753c357a5d6f0440414b4ed4ede71317772ac98d9239f70904",
+    "2ad954bbe39b7122529f7dde780bff626cd97f850d0784a432784e69d86eccaade43b6c10a8ffdb94bf943c6da479db137914ec835a7e715e36e45e29b587bab3bf1",
+    "54657374436f6e74657874",
+    "f389beaac6fcf6c0d9376e20f97e364f0609a88f1bc76d7328e9104df8477013"
+  },
+  {
+    1, 18, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04006917e049a2be7e1482759fb067ddb94e9c4f7f5976f655088dec45246614ff924ed3b385fc2986c0ecc39d14f907bf837d7306aada59dd5889086125ecd038ead400603394b5d81f89ebfd556a898cc1d6a027e143d199d3db845cb91c5289fb26c5ff80832935b0e8dd08d37c6185a6f77683347e472d1edb6daa6bd7652fea628fae",
+    "011bafd9c7a52e3e71afbdab0d2f31b03d998a0dc875dd7555c63560e142bde264428de03379863b4ec6138f813fa009927dc5d15f62314c56d4e7ff2b485753eb72",
+    "040085eff0835cc84351f32471d32aa453cdc1f6418eaaecf1c2824210eb1d48d0768b368110fab21407c324b8bb4bec63f042cfa4d0868d19b760eb4beba1bff793b30036d2c614d55730bd2a40c718f9466faf4d5f8170d22b6df98dfe0c067d02b349ae4a142e0c03418f0a1479ff78a3db07ae2c2e89e5840f712c174ba2118e90fdcb",
+    "012e5cfe0daf5fe2a1cd617f4c4bae7c86f1f527b3207f115e262a98cc65268ec88cb8645aec73b7aa0a472d0292502d1078e762646e0c093cf873243d12c39915f6",
+    "f764a5a4b17e5d1ffba6e699d65560497ebaea6eb0b0d9010a6d979e298a39ff",
+    "479afdf3546ddba3a9841f38",
+    "5c3d4b65a13570502b93095ef196c42c8211a4a188c4590d35863665c705bb140ecba6ce9256be3fad35b4378d41643867454612adfd0542a684b61799bf293f",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "0d52de997fdaa4797720e8b1bebd3df3d03c4cf38cc8c1398168d36c3fc7626428c9c254dd3f9274450909c64a5b3acbe45e2d850a2fd69ac0605fe5c8a057a5",
+    "f3ebfa9a69a924e672114fcd9e06fa9559e937f7eccce4181a2b506df53dbe514be12f094bb28e01de19dd345b4f7ede5ad7eaa6b9c3019592ec68eaae9a14732ce0",
+    "a2a2458705e278e574f835effecd18232f8a4c459e7550a09d44348ae5d3b1ea9d95c51995e657ad6f7cae659f5e186126a471c017f8f5e41da9eba74d4e0473e179",
+    "54657374436f6e74657874",
+    "0c7cfc0976e25ae7680cf909ae2de1859cd9b679610a14bec40d69b91785b2f6"
+  },
+  {
+    2, 18, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04007d419b8834e7513d0e7cc66424a136ec5e11395ab353da324e3586673ee73d53ab34f30a0b42a92d054d0db321b80f6217e655e304f72793767c4231785c4a4a6e008f31b93b7a4f2b8cd12e5fe5a0523dc71353c66cbdad51c86b9e0bdfcd9a45698f2dab1809ab1b0f88f54227232c858accc44d9a8d41775ac026341564a2d749f4",
+    "013ef326940998544a899e15e1726548ff43bbdb23a8587aa3bef9d1b857338d87287df5667037b519d6a14661e9503cfc95a154d93566d8c84e95ce93ad05293a0b",
+    "04017de12ede7f72cb101dab36a111265c97b3654816dcd6183f809d4b3d111fe759497f8aefdc5dbb40d3e6d21db15bdc60f15f2a420761bcaeef73b891c2b117e9cf01e29320b799bbc86afdc5ea97d941ea1c5bd5ebeeac7a784b3bab524746f3e640ec26ee1bd91255f9330d974f845084637ee0e6fe9f505c5b87c86a4e1a6c3096dd",
+    "0185f03560de87bb2c543ef03607f3c33ac09980000de25eabe3b224312946330d2e65d192d3b4aa46ca92fc5ca50736b624402d95f6a80dc04d1f10ae9517137261",
+    "01fced239845e53f0ec616e71777883a1f9fcab22a50f701bdeee17ad040e44d",
+    "9752b85fe8c73eda183f9e80",
+    "80466a9d9cc5112ddad297e817e038801e15fa18152bc4dc010a35d7f534089c87c98b4bacd7bbc6276c4002a74085adcd9019fca6139826b5292569cfb7fe47",
+    NULL, NULL,
+    "04015cc3636632ea9a3879e43240beae5d15a44fba819282fac26a19c989fafdd0f330b8521dff7dc393101b018c1e65b07be9f5fc9a28a1f450d6a541ee0d76221133001e8f0f6a05ab79f9b9bb9ccce142a453d59c5abebb5674839d935a3ca1a3fbc328539a60b3bc3c05fed22838584a726b9c176796cad0169ba4093332cbd2dc3a9f",
+    "001018584599625ff9953b9305849850d5e34bd789d4b81101139662fbea8b6508ddb9d019b0d692e737f66beae3f1f783e744202aaf6fea01506c27287e359fe776",
+    "26648fa2a2deb0bfc56349a590fd4cb7108a51797b634694fc02061e8d91b3576ac736a68bf848fe2a58dfb1956d266e68209a4d631e513badf8f4dcfc00f30a",
+    "fe1c589c2a05893895a537f38c7cb4300b5a7e8fef3d6ccb8f07a498029c61e90262e009dc254c7f6235f9c6b2fd6aeff0a714db131b09258c16e217b7bd2aa619b0",
+    "8feea0438481fc0ecd470d6adfcda334a759c6b8650452c5a5dd9b2dd2cc9be33d2bb7ee64605fc07ab4664a58bb9a8de80defe510b6c97d2daf85b92cd4bb0a66bf",
+    "54657374436f6e74657874",
+    "620b176d737cf366bcc20d96adb54ec156978220879b67923689e6dca36210ed"
+  },
+  {
+    3, 18, 3, 2, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0401655b5d3b7cfafaba30851d25edc44c6dd17d99410efbed8591303b4dbeea8cb1045d5255f9a60384c3bbd4a3386ae6e6fab341dc1f8db0eed5f0ab1aaac6d7838e00dadf8a1c2c64b48f89c633721e88369e54104b31368f26e35d04a442b0b428510fb23caada686add16492f333b0f7ba74c391d779b788df2c38d7a7f4778009d91",
+    "0053c0bc8c1db4e9e5c3e3158bfdd7fc716aef12db13c8515adf821dd692ba3ca53041029128ee19c8556e345c4bcb840bb7fd789f97fe10f17f0e2c6c2528072843",
+    "04000a5096a6e6e002c83517b494bfc2e36bfb8632fae8068362852b70d0ff71e560b15aff96741ecffb63d8ac3090c3769679009ac59a99a1feb4713c5f090fc0dbed01ad73c45d29d369e36744e9ed37d12f80700c16d816485655169a5dd66e4ddf27f2acffe0f56f7f77ea2b473b4bf0518b975d9527009a3d14e5a4957e3e8a9074f8",
+    "003430af19716084efeced1241bb1a5625b6c826f11ef31649095eb27952619e36f62a79ea28001ac452fb20ddfbb66e62c6c0b1be03c0d28c97794a1fb638207a83",
+    "1316ed34bd52374854ed0e5cb0394ca0a79b2d8ce7f15d5104f21acdfb594286",
+    "d9c64ec8deb8a0647fafe8ff",
+    "6cb00ff99aebb2e4a05042ce0d048326dd2c03acd61a601b1038a65398406a96ab8b5da3187412b2324089ea16ba4ff7e6f4fe55d281fc8ae5f2049032b69ebd",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "040013761e97007293d57de70962876b4926f69a52680b4714bee1d4236aa96c19b840c57e80b14e91258f0a350e3f7ba59f3f091633aede4c7ec4fa8918323aa45d5901076dec8eeb22899fda9ab9e1960003ff0535f53c02c40f2ae4cdc6070a3870b85b4bdd0bb77f1f889e7ee51f465a308f08c666ad3407f75dc046b2ff5a24dbe2ed",
+    "003f64675fc8914ec9e2b3ecf13585b26dbaf3d5d805042ba487a5070b8c5ac1d39b17e2161771cc1b4d0a3ba6e866f4ea4808684b56af2a49b5e5111146d45d9326",
+    "9e1d5f62cb38229f57f68948a0fbc1264499910cce50ec62cb24188c5b0a98868f3c1cfa8c5baa97b3f24db3cdd30df6e04eae83dc4347be8a981066c3b5b945",
+    "54272797b1fbc128a6967ff1fd606e0c67868f7762ce1421439cbc9e90ce1b28d566e6c2acbce712e48eebf236696eb680849d6873e9959395b2931975d61d38bd6c",
+    "3db434a8bc25b27eb0c590dc64997ab1378a99f52b2cb5a5a5b2fa540888f6c0f09794c654f4468524e040e6b4eca2c9dcf229f908b9d318f960cc9e9baa92c5eee6",
+    "54657374436f6e74657874",
+    "f8b4e72cefbff4ca6c4eabb8c0383287082cfcbb953d900aed4959afd0017095"
+  },
+  {
+    2, 18, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04003c9de1cfc53be54b93f6625b07aae4e7ff8ecaebe121625ceec371c2efd83209487e83c776a36cd7937f66f829e9b2c4dcb5370d86546522210f731408f8aeeb84000e8033559064487ae5fd4748f1edbbf221ef467a3f259c5775ee79b76e12027c8e2364346f3f1bda51bd0fbab45d818a1a775ad01c06f7c8f540dd08a050605615",
+    "0118c813417d40b8edd14cec6fc04e67ede1967a9b26e8a19c20aa433251fb4dc76a7de2878177a44384800bae570da38e0f58193b6d1799227f27de33ef7eb2c76b",
+    "0400d19e637f640b36e8d25a91f267ea590cbcf5e0e2a0e02ad7e486b3fe1ce34713ddda91232727274cb0d1a3e84f1543d69e8e91aa6b714d3b1d918c997a90b1936000296f83b54b7a362a87c5aef836cd81ad5f286f1bfa6a771ad1825e5f8d97c8a34883e276f9a9b1ee3ca713362a1d470951701cd6a9d16c2d44d03d0beb0041f296",
+    "0054109f96b8e312dd854ad3df5706c0ad6d19224c63d779585dd88fec37cc7fda8de430f6cb26a14110b780fd12861f3f7e5419e35d1d51f3148cb238ee73e98b1a",
+    "7d88479b678ab85e45db85f3e8b6c5c35600751973ca9929dffd743c4ffe6c1d",
+    "a5c06c7297a23aa7e5009b6a",
+    "f1410ad4c18dea9338815bd3bab6851c4deae3fccdce17af3731e9f84d480658d2414868beaae9e59bc1ee4ce64b58c9f0bad942be3616ed576f1c478e403dc4",
+    NULL, NULL,
+    "0400b880652e5b7de84d11246b873bb121cb99e8a2e7d884c331b1e3888f509c8131df4646f423678e85038dca6c1624e5a468c8da4d545a000ddb4269cbe96b59586001e352373c051af38e1daa8e0f42beb0642f3872f908bcf3ad674db18915c497ff5fdc088cbf346b2c13e950543867cc91f6968b59c93400e5824a0c17de3b2d7e46",
+    "00ab69acecec74b36e54e505c664e2f3b940a4528f9a770d9a1bbd92355d99b622fab6ffed999e8d7ec58204c49a3d53655964ff2b5396f03742c88d7e2094cb2227",
+    "470da194ec939201e6e57c36d8e67a9bdb22fdc3480172d33378c152321fe149d264100fe90e36ffb81e83cdfa8b34ae2f68691a55fe5f13edbf59cffaa4e84f",
+    "c453e6ea553a88e7ff7725d054df233008fa95f03131655b6fad3c2a0e151bccfe26fae75a166d309c414ef0ead6be95d035614428e1d20ec134d305872c543ae52d",
+    "e3729c324d35f3e670bea8fad197426484b2b061df21be8d066bd192b8c1e78df8f1c4e0b8f69dac50be65086000a86924fa2ecd592835e07502bb0306fcc121c5fe",
+    "54657374436f6e74657874",
+    "59834b87a34da2a4a5755776433bb256f93405af062295fc8abc14f930000228"
+  },
+  {
+    3, 18, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0400afc1d169b7e8027b75156154e11b5754f13a96e548e5c47e242949f24f548e8269cb6d12d3a7533c5e13b860afc9901e7d8db21831690a5c542f4f4c6d095b025c0096b1a947ff2471242554dcfa7b7ad6cdf9c8d73fa1e106c482b6297c7ca5ec32c62fc25b7870768debf9ddd66106cb85988b97aa469f596ef23bc5af48e554a2be",
+    "007f8fae6d32b959c91b3cc76b573307ab27a099ea9155a5f25fe3f2f0ec4ce323a70f3085f732d44ecd9fd36499101539f8dd9b2614e48ad15f22021fb40b480391",
+    "0401981ba1148049207d76bc908afa6e199d66ba827942f65854d8639a412aa04414ab36c81e0b093bd4b25b4315c42199a82f639070e0c22e97eed8d37c2368e8face01c8e679eb8d192f8c894bd69fba735c8dfdd17775eb16bfedc2f9a34d7f10c6b289831ef411f9ce36ce1a1bd720f684bdfdb6502e569e4e686f967949cbeb5e2e04",
+    "019a861a0628b4aedc7f47f68750768b472256be2fae3ee65a29038adb18760239748c8b68be813714802429c989ef0c882271236983a67c6a80a9b47b383c215ce3",
+    "698542f4438ffe5c9cafe3579bf9843368dc0c28e9593b9030e89152d80a9ed0",
+    "383130f26a480c36c62db4f6",
+    "539c5af254cca2a5160b4f2cbc37b066206028ed9b88154dc4c91d24acd4b0a7d1251d3ee1a0577b1355f898118e4c3e55c016eedc80a029f1c508a1bb4011a4",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "04005fcfe2fdc539fd13c51e068e4be3221d02500c47640c71a9a015ceac68b08744aa892592d1750fb270327eb436ec1bb9c481f6be3b59fc02ce524f1b97f3ae7946019043e72f8b11b60b71460ee2a5efe22d3478f503eb9ed38036e600f8491bafd0193cf772520e7464ac7b615a93bd97c9bdbd2743d91e51b69d7617dd64be8941af",
+    "0147106ca69a1b194530545332d0a204c19dc51ab3b308a34bf3287ec8df8cc787d5853608ffbbf130b2816732274d6b825a28bdc279d8a01262dfeec8f945c3406c",
+    "f762103fb8eb34ccbfa54f8ce4a8e53676ae047da7ffbdd66d68a788c8164f21dbb5312624ff8f92b768f781d2f12753a557cc511c9e5648550385be3d52393c",
+    "27364ed854add7b95201b41f12d8565e2a0928d1dde3e04a250b798147cad060bbb63fadbc71d9533c0084ad59ef4a3a198fe0f0684cf81a9a2ef732ec05308375d3",
+    "3dee1b7031a574cf07a1ffe35dd3e878c52b845de748007dc587e2bf401a4dab7638d031a226ae004ac372e4f0eee6382c08d1f0cbcb029ad70cb449840ee0af8911",
+    "54657374436f6e74657874",
+    "da1a7f0897e21869b5560658bfc8413f36ee79b918f30a56a1455e234ea94d0f"
+  },
+  {
+    0, 18, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "040084698a47358f06a92926ee826a6784341285ee45f4b8269de271a8c6f03d5e8e24f628de13f5c37377b7cabfbd67bc98f9e8e758dfbee128b2fe752cd32f0f3ccd0061baec1ed7c6b52b7558bc120f783e5999c8952242d9a20baf421ccfc2a2b87c42d7b5b806fea6d518d5e9cd7bfd6c85beb5adeb72da41ac3d4f27bba83cff24d7",
+    "015b59f17366a1d4442e5b92d883a8f35fe8d88fea0e5bac6dfac7153c78fd0c6248c618b083899a7d62ba6e00e8a22cdde628dd5399b9a3377bb898792ff6f54ab9",
+    "0400edc201c9b32988897a7f7b19104ebb54fc749faa41a67e9931e87ec30677194898074afb9a5f40a97df2972368a0c594e5b60e90d1ff83e9e35f8ff3ad200fd6d70028b5645debe9f1f335dbc1225c066218e85cf82a05fbe361fa477740b906cb3083076e4d17232513d102627597d38e354762cf05b3bd0f33dc4d0fb78531afd3fd",
+    "013fed613d0626aa01fef8d67ff6a683a9a173ce683fba2e833b1e4edf8598234736149ef1e91088e78a91ac4691d0f45e22505dc818a934897981955b3c6d4c080d",
+    "a0a8a428a5149b3ac93e07bbe8868945972a8964956fac14fc6a79e5c279d836",
+    "9deefcbfd747d7a666450f00",
+    "bd98618e98c9856ca25cd63d9a72c3ef99af7fe55e29a8cc6773e315a670637bb07017ffbab0cf5e5a17aa0f63a6f3527d7f1725b28f92407fc27dbd6f34bffd",
+    NULL, NULL,
+    NULL, NULL,
+    "fe235ce991496c6c8395405da1c684f02206d24544d660f53412bb93bcb6ed6d1195414f020489f1c93e1df86c4d6ad71b7052b77e17f81960cb1b920edcedbc",
+    "f9d540fde009bb1e5e71617c122a079862306b97144c8c4dca45ef6605c2ec9c43527c150800f5608a7e4cff771226579e7c776fb3def4e22e68e9fdc92340e94b6e",
+    "5273f7762dea7a2408333dbf8db9f6ef2ac4c475ad9e81a3b0b8c8805304adf5c876105d8703b42117ad8ee350df881e3d52926aafcb5c90f649faf94be81952c78a",
+    "54657374436f6e74657874",
+    "2d712f50c15cced5f3f83f19b3925ef77c577a19f64eb29fa7d51feacd71d94b"
+  },
+  {
+    1, 18, 3, 3, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0401ab406318b4ee13c97b3154665b517cbf26cb507923cc617934fc77deff9470df98af6483285f6ce82e01f02c3529a2762294415626d9110b9cc34e26c1ccf7050b014f64fba39a23215af98ec36a2a32f18e57cb4d4c29fa4f1e65fb9b3b23bd710615034937f3a3cd2b8c97f34d759edaec1e75e60fc3288cd46e640aec92146dfc3e",
+    "00fd82ee56c24eb02563aa1a5a4e082687f4dd2b6e5696255025cb688fccc81a673035060982e0269b68d80ff1dc7cdc2f5b15e2db20dc59bc0d4810efd35e963acb",
+    "040073046b12656d7bdbf4ddf4f38f6f657861793f26f61fb5ce68798b8dab3ca239e4717ad4e76b807970f0bd353224ff48075415f41af17bb2a6845f47cb239d1dee001e311f82795bc49f5df716d2a38251cd2b9e9eb5e310f9078ff75a7f0615332571ec2a6d26e92a75988bf28b60f1a197dbfe06f26250666f04ed163207934142ab",
+    "00545c9a59cb75f01a70a597911606380d21dade65949c2746e18ebe945f9b4cfa16c34a22739e477ee24bdd5662d2a9b765b7eb3225fc58fab27959a6d416f53525",
+    "e18b5c59550a61f02dd5b9e48489590731028a3a138155e00d943291bbaed34b",
+    "04c09a0a7e9194a1a1730e95",
+    "cdff6de2b9d6190587f29c0fc7c1c2dad5bf278feb9223e3fd15a11186eeaf9f78e37cf082f44c44ecb7326cec825aab12dbfd8e3e528e2ed307107dab94a74b",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "ebbd082d1fcf9eac2304cb48d70f2406f0f8a18f54a344c4d947a9e788a23954e0abee03bc886ea4efa8d6905f74defec757118dd98f79168f27547d896db339",
+    "fe1507c2727175304d5ce4d86bab23fb11d838d33f24d08b6380c780f9413045af5edf9b0f68dbf417d886b10283dafd617f2429da89b980ed71d7c479b215b4d8c7",
+    "9a43109acdde684a28972b73791bedd1e40c7d40cec01b2e659fe4e3befd82cdb920897d8ebe8987c80159951ff6b19678743051ed75bc02569d051f014482c6504c",
+    "54657374436f6e74657874",
+    "83ac3835390f7317131823b89b27391c53b29174d6eb7403607c410ce3ed5124"
+  },
+  {
+    0, 18, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "0401635b3074ad37b752696d5ca311da9cc790a899116030e4c71b83edd06ced92fdd238f6c921132852f20e6a2cbcf2659739232f4a69390f2b14d80667bcf9b71983000a919d29366554f53107a6c4cc7f8b24fa2de97b42433610cbd236d5a2c668e991ff4c4383e9fe0a9e7858fc39064e31fca1964e809a2f898c32fba46ce33575b8",
+    "0045fe00b1d55eb64182d334e301e9ac553d6dbafbf69935e65f5bf89c761b9188c0e4d50a0167de6b98af7bebd05b2627f45f5fca84690cd86a61ba5a612870cf53",
+    "0400932d9ff83ca4b799968bda0dd9dac4d02c9232cdcf133db7c53cfbf3d80a299fd99bc42da38bb78f57976bdb69988819b6e2924fadacdad8c05052997cf50b29110139f000af5b2c599b05fc63537d60a8384ca984821f8cd12621577a974ebadaf98bfdad6d1643dd4316062d7c0bda5ba0f0a2719992e993af615568abf19a256993",
+    "012a86116970d32360496bc00b7180b5d7b7754fa568b6071f37e43db8a99f80d5bccc783bf9cee3ddc13e81f0b969b0b2a05b32796990b8983855919a7f44c96dbb",
+    "",
+    "",
+    "76fb29d2ac24967825c4bb3adf90ec7f8ebc559969f8b7517da7d828a2dd796ea632da532b33d087d5778bd53059c573ef080282c52020d610064c3588e7b695",
+    NULL, NULL,
+    NULL, NULL,
+    "3ecf6066a2ce767236c976cd91e63060fef16a4ddd03eeea4865038fb0659806853267102927acba630a0ea2e375159e6d42e4e8cc398ae006e8e32a92421ff0",
+    "3018d74c67d0c61b5e4075190621fc192996e928b8859f45b3ad2399af8599df69c34b7a3eefeda7ee49ae73d4579300b85dde1654c0dfc3a3f78143d239a628cf72",
+    "a243eff510b99140034c72587e9f131809b9bce03a9da3da458771297f535cede0f48167200bf49ac123b52adfd789cf0adfd5cded6be2f146aeb00c34d4e6d234fc",
+    "54657374436f6e74657874",
+    "a2ddca42064b213cd7cb77bcfa9def157d5dd874131df64fa33b07d5b91c534d"
+  },
+  {
+    1, 18, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "040079832f3d45ca835c2429171d73cdb133d4636d0a002c5e35c531a41a31fda13a2bfe44e55f0b563711c2b882d40d4ba7a2ff3c90cc7b7fc802dfc069b7b8fe31b4005ee1890df11a61d5d3d4e576188a070d86c497f4bb94f88f5a0002c2b48965df204f66c7fff0a2f5fe1d12ac04bb7d9efad6aba2a2b62fad39551961a44537dcc6",
+    "00722177dff1a35774110e3647e6fe9637acbe6055f8c9742b49a741d46c812a1ee5cfa4c95c09deddb9df0d4e0235cde6366cf552e9b6543b7360faa5c27051b6c1",
+    "04000b6ca9ca258c4d2752546f419d4ee9335b19fb7f49a7b3ef16ec4302bf5d4883215bccc9ef065dcb6d54fd6d86a022ed2c1b6754d9eaaf2b981f6bb961c77642e10097232fe807a272168fe37c8ab284157bdcf5fd02d546ae881549ea8fc3efe447722575c30ab3d5b4b54f43972ee409443d305a65f95c68399f6b1d181ac00715d1",
+    "00a0b7fefa1156cc59d802bd0bd375e3e151fdc96c59de6fe32fa2aa211520e079852f5d236f0445789b9444f5e11f10e434b51c060775312d173bcd6f9c5d77013a",
+    "",
+    "",
+    "b29953740a088b63fbb2ec35a0956dcbf109367f17547e1331b0b948859b6fa52c66f48f5c7830493ec67a8b5d972e4a34a5e27678eefca78422b69d902eb5e1",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    NULL, NULL,
+    "2baadbaf11dd59fcfe3b268ed4f9e1d843fb2fc804e22d86299742373719c793129b37339d8bef29f5f5e0ea3c9f0599a04e084b0c338fa4c8305210199c8f4f",
+    "0dc7aacf252c9fd76a4a11693e02cb172d98040327cfa3df822b2b6cc8bd33d878ef5a5fedaab182fad0f0c0a1fa119ed5a346d313b7acff3127e20bc80137277964",
+    "97f11485a3253a5dde5317307f8ecccdbffb309fa17593505f023968c5d8dc192bea443636a2529cc1ed0d6972c3d4e77f412d971c7b08a7fde4210df349d8b4dcd6",
+    "54657374436f6e74657874",
+    "2f9c544e197a9fd24b3054f59e02757d655c4d98a387a587552d9cf6408ab763"
+  },
+  {
+    2, 18, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "04017cca11f9d2d775d30c5288a04f7c5921de1dea516f039d4316539a6c0cc4abd4d17cb55b85a4790a7b3f88a0c793457ed36c9113bbc29711744df1117cacfcad39007efcdd977b6e7c2c0702f982d2f48cfbafc6a4ef1fd7492f5cd31c0fbf662e3a3cc1491900deb8849d1c541e4c192e4d1efad57e18f8f070a2729bd762ef1dfaa7",
+    "010a3a5b5e9823341e6b4b2ed8c06450f0bea021a22dbecc7ee2a3e45432fb9a54eed4ae02feb7f2029bae10fd63a81de37ed5ec99d9f770a86a452a7d57d8bd552b",
+    "04019caefc36581768192c67591cd08b7d7f27614af35f375ee4f33871a936c2d1d79b5c48feed1c66b53045c1aeac3f3cef5bdd641cac7380a962aa11e842ff7da63a012e5ead61569f7d254b411a437789210c61faf9ac375a714a391108ccdb1f69b28d1507389fcd1f4e11a37577414d8903f7bd9a7ffee557f748780a2dca862273b1",
+    "0006aa77c7d29cdba3d755afa9680c86de4fd2d6442a2a46b9f4461a1ae6ee4ad5fb797064284cc27ad13ed832ab31d9b660fce0cad3a4debdaef92a04c718d43652",
+    "",
+    "",
+    "916f05c5b4e77beada4a3f5ab477d831a4ef9b7499db3e0539a12ba06ef3dc96dd307e45af4745d02ab676190a3c162b0d87bba72338c7f5407f9da7d4af348d",
+    NULL, NULL,
+    "040062fea584c5502e0eb1a67fcb951ffe54ab67418ee0fdf548af176e0a7650458065dd34d788ebf961c45ce97faff87941e71dbcda28f7cdbd200ec3382d5ae2a7c900a195445b0cf2d5e814c4771cd365b21f4489dfe0b55ef923e3eff2db8b903e1d291e389d23f8e7a101a35727cedda6e29beeb0baa8bb248edeaefbb99785204c60",
+    "00ba0f6321418cf979ee88c58f84d52d3165b152e1428fa607797e8b5bc250d2a106cf0d1ab9cb9209c0b3a8ff04d4b10e873ec9654fdcd2c399c9b36a09bd69acd5",
+    "6c2e7cf8d93c1db673ff1da58165e593f6131f3d5d69393053002aefc7b897134fa245b4e868e0cf37a451164ab004ba0427b2041e77804264651208b014631a",
+    "1465328251d9a584ae31c76138e6329a24dd2b83651b2b358a75bd330599a50cb23b4de656f5ec07cbeca8a6b43bc9d3f79a59ef4238b9be787ef4fcb132eabc78a2",
+    "28b3186871db5de148a629c56138256952c00bb1541a420683c998633d3fb77c10b5d5f6c75b9f49635b0ba1121be7d32628d61ba45e311e0221537b4f8ade08af43",
+    "54657374436f6e74657874",
+    "278d7f777df8d18ac47d7fc49bba3fad3402bbc8ff81fe01d873119995060c1d"
+  },
+  {
+    3, 18, 3, 65535, 32,
+    "4f6465206f6e2061204772656369616e2055726e",
+    "040158e8919adf8ffc2f6c1f6edd74c8cc7be2fc3156a3a343bd3f13c3b362a5cd880859e994086116a5f0343b0dcd5ddf77bb5d6067c65f7807659143e852e8b7166501680968996a5153b20a93d0a6175d509519fa0ed710374017a5cd74e9aaf89abcada2611005390f8e29ac954615eeaa984d227777de635f42c269163388c50f7ecd",
+    "01d1d2915dc251253282c2565d8c3d74422f7027efdbfbfb07fd613b6ae435e30fe2b0822148ad01c69389299a93744e6401e01f4037f24d6a4d9eaf63215c51bd2e",
+    "0400560f8301fae25fe7bdb385e37783f3454b9d19fc9dd974724c04a7d563f7149dc84c8f671a6b36bcce244b7937004c07bb0db28c4054c0be0e53553a2deefed3f001d69428f495ee8f1da8052a8d6984a33c0c9cb03e59118c86080e8e50a5ca384ca7f7ea63e75067a90977711649b031b10e2df034a042327586db6bf2d5b9cabcb4",
+    "01d2db2f071962424d5a54f8a72b29ce10e2eef866642671c1dc63dbfb3a8785e2b732828a870b925542406c1c9495ffd0c63137aa21e3f8dc5370d493eb1f245b9b",
+    "",
+    "",
+    "6efc3c405815cb482416930c64ef0fc9912be2e83d53080fcaead68599fa98659b33ed1bf5bfa213f22a3467e5650c50bfb0320df6a4485843f0beb82f452d76",
+    "0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82",
+    "456e6e796e20447572696e206172616e204d6f726961",
+    "04011f21e2b7d52ab73dba6c1f77700ffe018476bec4c9970a20680eb7ab807e95ac9bbd3d4ef04b83cba6cdda780d0f9e4d9e9028ae1463c186ac0bc05d7064ace8090110e0f03a363b03ae50a4888de6050beb40b5a08ca6a57afb0214806c7f5ebd8758ebdbab8d8265b126b161bea50726d7e123526d93fbb41ac9d1c3755763f4fff0",
+    "01361d336420e99fb98f64c02a736755f333fdc73729a6f02bb0f9f101a907e1884c0afe494f1e7bfe9b6e9c42b1db6a85d330ac5bfad5dc27bafb259213567f7d73",
+    "973953edbcdc82290466eeb3aeeaab1e9a584c22cb08a894fbc69023e4bd0d387d3a152db0deafb28d8671aa2ad2b48b7e8782ef4a520bf40e1106944089cd2e",
+    "1f60e2fb7f270698612834c6cba4cb36095a62ad6d0d596717db15c84a4951dc6a3b0627e534d6b446b0b78b4fd06346f1adc59b71d3e11ac239862f99c1972f575b",
+    "a5cc6fff6603ad72fa11862a53ed08695d272764330d96723a89b7e06fbfabba222f2a897eb335f7ad84978717b9fe30b44c5e081dd5f4bfdaf79907127b66ebb6c2",
+    "54657374436f6e74657874",
+    "69eb994ac941859abf71c86623abd13040fea633a4da115195bb3eb59417f8d0"
+  },
+};
+
+const char *plaintext = "4265617574792069732074727574682c20747275746820626561757479";
+
+const struct encryption encryptions[192] = 
+{
+  {
+    "436f756e742d30",
+    "f938558b5d72f1a23810b4be2ab4f84331acc02fc97babc53a52ae8218a355a96d8770ac83d07bea87e13c512a",
+    "56d890e5accaaf011cff4b7d"
+  },
+  {
+    "436f756e742d323536",
+    "957f9800542b0b8891badb026d79cc54597cb2d225b54c00c5238c25d05c30e3fbeda97d2e0e1aba483a2df9f2",
+    "56d890e5accaaf011cff4a7d"
+  },
+  {
+    "436f756e742d30",
+    "e52c6fed7f758d0cf7145689f21bc1be6ec9ea097fef4e959440012f4feb73fb611b946199e681f4cfc34db8ea",
+    "9518635eba129d5ce0914555"
+  },
+  {
+    "436f756e742d323536",
+    "c5bf246d4a790a12dcc9eed5eae525081e6fb541d5849e9ce8abd92a3bc1551776bea16b4a518f23e237c14b59",
+    "9518635eba129d5ce0914455"
+  },
+  {
+    "436f756e742d30",
+    "5fd92cc9d46dbf8943e72a07e42f363ed5f721212cd90bcfd072bfd9f44e06b80fd17824947496e21b680c141b",
+    "a1bc314c1942ade7051ffed0"
+  },
+  {
+    "436f756e742d323536",
+    "42fa248a0e67ccca688f2b1d13ba4ba84755acf764bd797c8f7ba3b9b1dc3330326f8d172fef6003c79ec72319",
+    "a1bc314c1942ade7051fffd0"
+  },
+  {
+    "436f756e742d30",
+    "a84c64df1e11d8fd11450039d4fe64ff0c8a99fca0bd72c2d4c3e0400bc14a40f27e45e141a24001697737533e",
+    "99d8b5c54669807e9fc70df1"
+  },
+  {
+    "436f756e742d323536",
+    "13239bab72e25e9fd5bb09695d23c90a24595158b99127505c8a9ff9f127e0d657f71af59d67d4f4971da028f9",
+    "99d8b5c54669807e9fc70cf1"
+  },
+  {
+    "436f756e742d30",
+    "e5d84cd531cfb583096e7cfa9641bd3079cf3a91cda813c52deb5f512be9931980a41de125a925cdad859d5b7a",
+    "151d9929e2449747889bc923"
+  },
+  {
+    "436f756e742d323536",
+    "53624f4f9f173453b14e633b45390ff54cacaa4428d44baee1bff8133fab1ab3afe60f88e4634b525c54e92eda",
+    "151d9929e2449747889bc823"
+  },
+  {
+    "436f756e742d30",
+    "316d9b4214a33182212888e86f23005b0706c30db2b1052c4e28c2c100fcdb85cc934b0a64c8db0d7dd339b64c",
+    "02b1fe14a5b6ad526ccff550"
+  },
+  {
+    "436f756e742d323536",
+    "13d9bb62272359bf8006e85d5a2b8bd5c0d8d9ca1f9f8b6ae704c1bc715254c14c78c01053ff7904c59eda9532",
+    "02b1fe14a5b6ad526ccff450"
+  },
+  {
+    "436f756e742d30",
+    "10b964283ac2cc0bdc4c85ab617291b446bf3832e9359b2c3a0facc50ea75a3c1afd08aeaacd6041d02eb560ec",
+    "41da94323642095905a34938"
+  },
+  {
+    "436f756e742d323536",
+    "16bc024eb0af9037260c822d45fa786e3c259aab1b7a4a196a72c3e794e78446440ba42b531da44d3d36d0a042",
+    "41da94323642095905a34838"
+  },
+  {
+    "436f756e742d30",
+    "49d13e16bc1f0e45805ac211e0c2e6bf5d436ed00df5f02f16c4c8eaeda0418d3f614636e2f026949bbd6dd281",
+    "1455fb0f644ca05dec2dc40e"
+  },
+  {
+    "436f756e742d323536",
+    "111bc7955e6b95f96f39d8d8313dd070770af62b06362062d0d99eacb6f41aab1fd702ffec08d9e0e47466d81f",
+    "1455fb0f644ca05dec2dc50e"
+  },
+  {
+    "436f756e742d30",
+    "1c5250d8034ec2b784ba2cfd69dbdb8af406cfe3ff938e131f0def8c8b60b4db21993c62ce81883d2dd1b51a28",
+    "5c4d98150661b848853b547f"
+  },
+  {
+    "436f756e742d323536",
+    "7a4a13e9ef23978e2c520fd4d2e757514ae160cd0cd05e556ef692370ca53076214c0c40d4c728d6ed9e727a5b",
+    "5c4d98150661b848853b557f"
+  },
+  {
+    "436f756e742d30",
+    "4a177f9c0d6f15cfdf533fb65bf84aecdc6ab16b8b85b4cf65a370e07fc1d78d28fb073214525276f4a89608ff",
+    "112e0465562045b7368653e7"
+  },
+  {
+    "436f756e742d323536",
+    "c567ae1c3f0f75abe1dd9e4532b422600ed4a6e5b9484dafb1e43ab9f5fd662b28c00e2e81d3cde955dae7e218",
+    "112e0465562045b7368652e7"
+  },
+  {
+    "436f756e742d30",
+    "ab1a13c9d4f01a87ec3440dbd756e2677bd2ecf9df0ce7ed73869b98e00c09be111cb9fdf077347aeb88e61bdf",
+    "d20577dff16d7cea2c4bf780"
+  },
+  {
+    "436f756e742d323536",
+    "3be14e8b3bbd1028cf2b7d0a691dbbeff71321e7dec92d3c2cfb30a0994ab246af76168480285a60037b4ba13a",
+    "d20577dff16d7cea2c4bf680"
+  },
+  {
+    "436f756e742d30",
+    "9aa52e29274fc6172e38a4461361d2342585d3aeec67fb3b721ecd63f059577c7fe886be0ede01456ebc67d597",
+    "abac79931e8c1bcb8a23960a"
+  },
+  {
+    "436f756e742d323536",
+    "9b7f84224922d2a9edd7b2c2057f3bcf3a547f17570575e626202e593bfdd99e9878a1af9e41ded58c7fb77d2f",
+    "abac79931e8c1bcb8a23970a"
+  },
+  {
+    "436f756e742d30",
+    "d3a676359d7db814f1f7a12cbe98ab334c834e14d61def40616dfc7e53dc5fc92e1e05d8c8139596dc8e7b04f5",
+    "674e489fcfed0d05867cf633"
+  },
+  {
+    "436f756e742d323536",
+    "fbffd44e00cb6d71d0beb484b5989ef167dff313c8bcc3c1e61c9db26152b5f2436b0899744bfcd71213a28a94",
+    "674e489fcfed0d05867cf733"
+  },
+  {
+    "436f756e742d30",
+    "b8a853057198e1d230b5708d9eb9861086a468ddf649e60f3c5d1ca9e50d1bef7be47151bd8c297bda37d4c279",
+    "e849f28fc830cc8b4380b6d4"
+  },
+  {
+    "436f756e742d323536",
+    "20e6e0ed34a866f91686700eea8772ecff7fe5032bced04f65eca9373cb51a5160fd39235d448b510dc9780b6c",
+    "e849f28fc830cc8b4380b7d4"
+  },
+  {
+    "436f756e742d30",
+    "4bf8568019638be84f424742a6fa07b29acaa39d0b56f67ab9dceaf5371f49bafccf6294f18da4d32a1a563175",
+    "8895a6427778c6d6219b1056"
+  },
+  {
+    "436f756e742d323536",
+    "ddbf74069973b625f8853aedb1e03b119789e88bb26e9777bdecbce454dd1a0828d9a33c4229f3a57585ebffd5",
+    "8895a6427778c6d6219b1156"
+  },
+  {
+    "436f756e742d30",
+    "a0dd42c7babfcb6977040a71f1a387663f9904ac26ea8d8b9f7f42ec1d0c853449776887b76ea0c7a46bb19499",
+    "34846c33e043809eac003484"
+  },
+  {
+    "436f756e742d323536",
+    "86da6f73bfcbae3556363062b8335ca1abe90eb187927794a2b6cc9795d8ab965f51f997f7477130248b31adf5",
+    "34846c33e043809eac003584"
+  },
+  {
+    "436f756e742d30",
+    "2ea1d1a353b0aba7bb38ed44f518adf446e08fc09f0957587ab42c16986ec2c673b0c1b4874b2ef68f1faaa67b",
+    "7782f07d1ce3bd345b1de3da"
+  },
+  {
+    "436f756e742d323536",
+    "97bd4ea0478d8dab4f1c89d25e06d166c51670dbfb1b8287794a419d583f5cc40ee7d67fe504f5530f7f1d3d80",
+    "7782f07d1ce3bd345b1de2da"
+  },
+  {
+    "436f756e742d30",
+    "186cbeffd80fd68862b09d968a944c9f1ecc1c3f5dbcd1e26973ec30a9856f006f7bb472c3e30fff57ced669fc",
+    "d654f65e557737ea2a0b5489"
+  },
+  {
+    "436f756e742d323536",
+    "ded681b1585b7fab0daff1bb000eacbb470dc304b2387bacdc7e230e54ccf86dd0fa9c5efe63f0c4ab7be889a6",
+    "d654f65e557737ea2a0b5589"
+  },
+  {
+    "436f756e742d30",
+    "018c929f81250301f7839048f814448a679e94f0e19b944737b54ced9e623e535e5ebc439e6eb49ca00b04883e",
+    "fa603a394e9e6bd93d21cd52"
+  },
+  {
+    "436f756e742d323536",
+    "fbb454b340faeaab3ef6c4633f87ec87e3371faaf9ccdd9900ee6081b672556023bcda2252af186bedf0363334",
+    "fa603a394e9e6bd93d21cc52"
+  },
+  {
+    "436f756e742d30",
+    "3866644bbf36102c2360070942108b1459b725a28c6bd3d4224deff4ae11c04b7bb484cc688395222c0287a010",
+    "a46aebcafe409e3c97ed0970"
+  },
+  {
+    "436f756e742d323536",
+    "b20478b3790cf63e09e578fc84bb699f54abc06326de816c8e03bf15c0c0fe711a4a41f239ae15cfc651e031f5",
+    "a46aebcafe409e3c97ed0870"
+  },
+  {
+    "436f756e742d30",
+    "72da9627fd7eb3a8b7169c6d97419b80adefca751c6b52b39a2e084d35ce3eb4487aadaca5a9c590e0938c48b9",
+    "6a6a5c9d22e9c26961fd202d"
+  },
+  {
+    "436f756e742d323536",
+    "72ee01b4e386712f8147d357f6506e5769f5cb8c38dd0bfa7c77fc498bde22d43d84200e5c213042ab1e8a9b16",
+    "6a6a5c9d22e9c26961fd212d"
+  },
+  {
+    "436f756e742d30",
+    "65a46e483d921343f20cba85da69976b2e0e52f450db7919f7796604977d6708d884a40d5e4fd5b820211264aa",
+    "f4fee6a6f8e2f5657369f3bc"
+  },
+  {
+    "436f756e742d323536",
+    "6a50e3b6dcddf2cc50d4c81ef4a06de0869d70bc09573a08d529e8114917bd7a4d416c76173e362f91db389542",
+    "f4fee6a6f8e2f5657369f2bc"
+  },
+  {
+    "436f756e742d30",
+    "adbd321208ae0bcda6521dcc01a1cd232aaab5b882730de597c580a9b6222d0e6038af6dfe09f3d46a1fdc7f8f",
+    "256c397646960f5fe361c7f6"
+  },
+  {
+    "436f756e742d323536",
+    "1ccec5f8bc5ccdf558a5f51fe924d91da8531c95fbb03961cbe1f5e0f37d25b5486ec1d351aa6e3ebb63ca3915",
+    "256c397646960f5fe361c6f6"
+  },
+  {
+    "436f756e742d30",
+    "1782237de6ce3dc25dde59dd1aeeb242d99f46a3b625f4ed83875df5ac029785a954f290663eb40913307109dc",
+    "4ec80a1044d5881196f55265"
+  },
+  {
+    "436f756e742d323536",
+    "f119ef2d90455a706185974a508100f8dd0098b463c31db699971f3c20a3f6b8783d4b99948edd6c2663f68781",
+    "4ec80a1044d5881196f55365"
+  },
+  {
+    "436f756e742d30",
+    "fd9bb512ccb5032a34cf289f1c1bcbaa4e4df667b39a2c9d1277ded6255c375388308668d6e7f80b93764528d6",
+    "cdd67aa5eb2aebfe64df27c0"
+  },
+  {
+    "436f756e742d323536",
+    "b2768f0dd87ef18e65b540e8fa8e2c2517754030887e691a677029a1405fd1725a0391ef8134e29155143f1af7",
+    "cdd67aa5eb2aebfe64df26c0"
+  },
+  {
+    "436f756e742d30",
+    "e50d1a2bed3b67d869ac0506d318dfebd8377d786fcbea89b8a9baf1c43a0d355039a1fd4c2806c318fe667243",
+    "35b0f52854df93c8e1b28843"
+  },
+  {
+    "436f756e742d323536",
+    "8b677fcbb5b409598bed2384d3d3c7b01e08fa5d9223cf1c2d135f66b200d44c9d80629175e3af3bc043177ce5",
+    "35b0f52854df93c8e1b28943"
+  },
+  {
+    "436f756e742d30",
+    "35fb796ff99d8b6bbc8a93a7a301560eada91ad7b4ed42dc90001bfa5284cba662ab4a101d172dd0f19374cb40",
+    "3c7336d68f6e9b1ad104c198"
+  },
+  {
+    "436f756e742d323536",
+    "1970ea1ac73414c2a635866a42a2193f3b4196432c4bd90a2e05e88fec56a8113c67cbfa5611c1bb60b8ce2644",
+    "3c7336d68f6e9b1ad104c098"
+  },
+  {
+    "436f756e742d30",
+    "a7e09436e88683eed891c2fdb80d215396e2be9bfe63f011ebd2dcfbb552db34f91c287c796d916f75a1e3f43c",
+    "0347719316e747f1ed3d5ea6"
+  },
+  {
+    "436f756e742d323536",
+    "598dbe2c80d6678e965b934fb8da9663564797c21dec6bc58dd911d7525a9b1019ac2079b86f5687e876bb1c98",
+    "0347719316e747f1ed3d5fa6"
+  },
+  {
+    "436f756e742d30",
+    "0ddc9bbeff5ce00ea28569f79fd57b5a4a88d0a8b921f877cbca9f59be2ec1ce139c468897d7fd3fc4168d76ee",
+    "8b6f664c2d04568aaaf762d2"
+  },
+  {
+    "436f756e742d323536",
+    "60ca071fb3f7033bfe8aec7575cf51a75011f5c7fba80479de91209ad7456c2c834c4bbf1b7059c7a080b1b821",
+    "8b6f664c2d04568aaaf763d2"
+  },
+  {
+    "436f756e742d30",
+    "178ed869a7ba019c318e35b0d1fd2b998a735eb1ea5cbd02ffcd4ce25a81b508b9283416cf6ceb33836a257f7e",
+    "5053d83aa9e4943c9d7277d6"
+  },
+  {
+    "436f756e742d323536",
+    "88b4e48c70c4767a51e2e4fe07b8415c4335c59e494ead733c0ae710af06f7c94c8c9e070eed17e677cf26e650",
+    "5053d83aa9e4943c9d7276d6"
+  },
+  {
+    "436f756e742d30",
+    "120c5cbbd1560432ef5b1ef8a900dc4a1be2e0de548245b4cf34b510a8f6df720d3fa93df07df8ee560bb32caf",
+    "11fde49869f0a0f13c03a5ac"
+  },
+  {
+    "436f756e742d323536",
+    "ca14250b8819cd91833ea7591255bfbb5e8a5577385ab2899671465fa334f20011825e94915ba1dffd5d5f6342",
+    "11fde49869f0a0f13c03a4ac"
+  },
+  {
+    "436f756e742d30",
+    "da45e62c0c80c452b5905012bfe4163fa8634f4a7cb109f34a567d403ba21f352739fde4967f07e735c28e943c",
+    "dbd4628be6344767aa2831be"
+  },
+  {
+    "436f756e742d323536",
+    "d9a41b2feff54d1788df4191e05a3747c2b954383a5274c14972ddc0e9cccc5ff89dc2d88489c8a3409aaa2c6d",
+    "dbd4628be6344767aa2830be"
+  },
+  {
+    "436f756e742d30",
+    "515186f105ce87114afb7bef27634c68b1d459bc2cbf72704101fbbbbc79300ffdd54de55e13de9ae4b124e19d",
+    "4adcf8c45d079e82e55ff144"
+  },
+  {
+    "436f756e742d323536",
+    "9b5f2cd10f5cc75ba83514ab2c9d663e7d8a6e1599722011ae2601cba9d8d4a53d97fe5922a7ea507cb9263a6b",
+    "4adcf8c45d079e82e55ff044"
+  },
+  {
+    "436f756e742d30",
+    "7bbf9864d9e970a6315b7b7bb7afb3638d3fc8375fc5127628d0cd15f4484a5b47187f63ca3f231094054080c6",
+    "8254fae617fbec374ba350f3"
+  },
+  {
+    "436f756e742d323536",
+    "2be3c7e24695c013178e55d177c61597db3e23eb4f668e51a68c71804ff4c2fdeae17ad2de8d8ff730d79d43ee",
+    "8254fae617fbec374ba351f3"
+  },
+  {
+    "436f756e742d30",
+    "66325502b4b5ac234005ea1460a25cb18233dc6173e2e789854e36a6629be8fb5a57780347932a3a670e05dc9f",
+    "9b995c1946a6df0f6cd5f989"
+  },
+  {
+    "436f756e742d323536",
+    "91fcee3744a7330b2cf7045ae38f59ebc7d74a062bda0efd8c3aaf4ed422dcde32921900ca2c3bac8324dd6848",
+    "9b995c1946a6df0f6cd5f889"
+  },
+  {
+    "436f756e742d30",
+    "820bd9d668cf8c47e4d5e0f16d41240cca1efa83f368f126996c7359409436e5cd1b8e57b0e914ea5a4c9903c5",
+    "58065fcb2ba37e0945a53db7"
+  },
+  {
+    "436f756e742d323536",
+    "79b85a9c95084dc0905190e4a25f8c5b5fff4f6b8c9e5fd240532a3488ffe88f985fe0dedebbd2adb6eb2357b3",
+    "58065fcb2ba37e0945a53cb7"
+  },
+  {
+    "436f756e742d30",
+    "b56a272eaa9635cc682d47f1e44b4f26499a07618c4f09f11b48ebb8bafca4ca88f39ad4c1c2867373f37605b3",
+    "c88b7e625d7b6ea3e834866e"
+  },
+  {
+    "436f756e742d323536",
+    "3fb96669eeacf6248cc3e021cb16a4e8fac7ef809c2c252eb10e86156bb523d3cf9af043dcd4ef47a42b042646",
+    "c88b7e625d7b6ea3e834876e"
+  },
+  {
+    "436f756e742d30",
+    "ede82da58afd1cd19165542875456530df4c92ede352d427bccabf08884a22b81e3da8e0055c637d549fb11f40",
+    "ef8694a7ae7a9c221d36432c"
+  },
+  {
+    "436f756e742d323536",
+    "890896f035e4c2259df91c5741d68c61b119596634b7f17752764075b6895d36f98e73254376a9fb1b4fb04d1a",
+    "ef8694a7ae7a9c221d36422c"
+  },
+  {
+    "436f756e742d30",
+    "cab1c86059737935d9288d666c9f97e56bc4d51417a7cf16683396f121d893806fda0c3c11f2095df8a9b87a54",
+    "ecb7926e7ac3de323dd0b6e4"
+  },
+  {
+    "436f756e742d323536",
+    "8f090288c322341990513e294cc5864db3b646d5ddca1e9f6cacd6c2e7e9cf7b0f1c4f41d51e62c22bbd9ac65e",
+    "ecb7926e7ac3de323dd0b7e4"
+  },
+  {
+    "436f756e742d30",
+    "bae206ce434275939be05eee854becce0ba3c2aea77c5991bd88ac5d440a78b80f538f0cfc1dc0ce7a60711f97",
+    "e763503a1e4610955b238414"
+  },
+  {
+    "436f756e742d323536",
+    "05b5e4edd5dc07247b19e83b4d109bd755c20d47c35fb1134f375a066e6520baa8ce4e383dfbf6821acc0f544d",
+    "e763503a1e4610955b238514"
+  },
+  {
+    "436f756e742d30",
+    "d4780fa0c76e5becfeeff3edd769c495a546eb1c38632912d24a1a18c749943bdecd03a4d5d30ea8fc78d1987e",
+    "cbdbb5c8aa3799f442ee9e39"
+  },
+  {
+    "436f756e742d323536",
+    "fbc6a2aa4a8da1d6152a3edd6351625d7305802106b5b49e900d6f7da7342dd72d0a68d8bdd21c68e7b3ad3f6a",
+    "cbdbb5c8aa3799f442ee9f39"
+  },
+  {
+    "436f756e742d30",
+    "6a5ef0f8c88a17c6d26bee63b4468cd43360eb69804fb392d8c9b8eba2f9bd806726c7d99cb9073022000ce41a",
+    "c9899ce0c487a96933695f69"
+  },
+  {
+    "436f756e742d323536",
+    "b95626b3bb9157add21d649345efbfcf56e5ea9861d067cf1d7656879a3c51e4fa4c3b9fb4d259ac445269c5c7",
+    "c9899ce0c487a96933695e69"
+  },
+  {
+    "436f756e742d30",
+    "8896497920bdd942d19178c2f1544284c437cf164be998d6b502c85fd7764cb0f8616f2ae2a19fb47418477f64",
+    "d6d3dc03d0dd0182b77992ca"
+  },
+  {
+    "436f756e742d323536",
+    "98b118c1587bd057ec65202a7b9370282e0a75b61ea1586de87dfc56fca114daf27f352a7587dbcc10b3849087",
+    "d6d3dc03d0dd0182b77993ca"
+  },
+  {
+    "436f756e742d30",
+    "f4946f817008cde92398ed079cd9ad910e9d415f9cba3590f78cc24516211d7a5c66f285a6c6d5cfaaa5c02f92",
+    "c670655429970de87f9ece9c"
+  },
+  {
+    "436f756e742d323536",
+    "dd3c0e3f64119e4c82408120cc404a44ad06bb3c089b445305be6bb59571490133a1a2a914cebb1b5d9441aa28",
+    "c670655429970de87f9ecf9c"
+  },
+  {
+    "436f756e742d30",
+    "4df124bd68d45b84dd5b82146597cdab8b56ab618166f814c2fe98ce35f43b09917283a58810aac71e852bff0a",
+    "b76f001f82b908e92ad2639a"
+  },
+  {
+    "436f756e742d323536",
+    "5fb4eb4203afa6d24d86577d09062dd989cdfac0ec2b979bade53cad9fd9972a2426d58337bbe4d862f12285c9",
+    "b76f001f82b908e92ad2629a"
+  },
+  {
+    "436f756e742d30",
+    "17e4a47f4cdb783c5fbdde94e53faf106e320518c82205af8786e2f3e0a4ad8d5079e411239cba9ff9bc1ec5de",
+    "b3149427bbc69e27327f383c"
+  },
+  {
+    "436f756e742d323536",
+    "82b7b46bb449aeb561c5a04caa92919a8f103dd7c2c7cb9ecb5829423ab490ea943865f26a9a988f151c0c3bb1",
+    "b3149427bbc69e27327f393c"
+  },
+  {
+    "436f756e742d30",
+    "9929617b88e456c7729143607900ea33582c07725052a9e0d85017fe57307ed1f14a05d0c213ee1292436c03de",
+    "fa64ed7f04d78bacdee5e0dc"
+  },
+  {
+    "436f756e742d323536",
+    "6d56478f2796860f846a1d495c89730ce48234fc66b8fdfd6ff32eaa5fdcb395c4f9cc9500387b1b7c38d2e7fc",
+    "fa64ed7f04d78bacdee5e1dc"
+  },
+  {
+    "436f756e742d30",
+    "b792898afbc2f976bd287e3975d4f1ef838e4af161f77f1d78dbf0027fe846fd33a4b120e5d67a0acd12d904d4",
+    "3903dda4a1f7d6f915790a0b"
+  },
+  {
+    "436f756e742d323536",
+    "f6c7c47c6fabde774f6e8cec6ced7d05e1070f6aa456125d6209f537956d7528ebba2c06dbb4423ad8c259974b",
+    "3903dda4a1f7d6f915790b0b"
+  },
+  {
+    "436f756e742d30",
+    "90c4deb5b75318530194e4bb62f890b019b1397bbf9d0d6eb918890e1fb2be1ac2603193b60a49c2126b75d0eb",
+    "b595dc6b2d7e2ed23af529b1"
+  },
+  {
+    "436f756e742d323536",
+    "faf985208858b1253b97b60aecd28bc18737b58d1242370e7703ec33b73a4c31a1afee300e349adef9015bbbfd",
+    "b595dc6b2d7e2ed23af528b1"
+  },
+  {
+    "436f756e742d30",
+    "82ffc8c44760db691a07c5627e5fc2c08e7a86979ee79b494a17cc3405446ac2bdb8f265db4a099ed3289ffe19",
+    "b390052d26b67a5b8a8fcaa4"
+  },
+  {
+    "436f756e742d323536",
+    "28e874512f8940fafc7d06135e7589f6b4198bc0f3a1c64702e72c9e6abaf9f05cb0d2f11b03a517898815c934",
+    "b390052d26b67a5b8a8fcba4"
+  },
+  {
+    "436f756e742d30",
+    "b9f36d58d9eb101629a3e5a7b63d2ee4af42b3644209ab37e0a272d44365407db8e655c72e4fa46f4ff81b9246",
+    "67c9d05330ca21e5116ecda6"
+  },
+  {
+    "436f756e742d323536",
+    "f380e19d291e12c5e378b51feb5cd50f6d00df6cb2af8393794c4df342126c2e29633fe7e8ce49587531affd4d",
+    "67c9d05330ca21e5116ecca6"
+  },
+  {
+    "436f756e742d30",
+    "5ad590bb8baa577f8619db35a36311226a896e7342a6d836d8b7bcd2f20b6c7f9076ac232e3ab2523f39513434",
+    "4e0bc5018beba4bf004cca59"
+  },
+  {
+    "436f756e742d323536",
+    "10f179686aa2caec1758c8e554513f16472bd0a11e2a907dde0b212cbe87d74f367f8ffe5e41cd3e9962a6afb2",
+    "4e0bc5018beba4bf004ccb59"
+  },
+  {
+    "436f756e742d30",
+    "58c61a45059d0c5704560e9d88b564a8b63f1364b8d1fcb3c4c6ddc1d291742465e902cd216f8908da49f8f96f",
+    "9bc50980832a7b4b58c40161"
+  },
+  {
+    "436f756e742d323536",
+    "fcc4c798b73d45d4a241f4d05886befed63b8bdf0252454072c9f6170f6e262f2738cf2ea290053b2181ad46d6",
+    "9bc50980832a7b4b58c40061"
+  },
+  {
+    "436f756e742d30",
+    "1552f6db424acdef53728dbfab35b85266681af9f9c42fa60e30cc858da8eb1fe05437fea881290cdeaad317d0",
+    "2b272740b827c1e16070c32f"
+  },
+  {
+    "436f756e742d323536",
+    "321901b5c0e9d2327de5f12ac1e2c0c689d6f473e6f318141ac84eb52e0cbc0509c5984996a08c717294663e05",
+    "2b272740b827c1e16070c22f"
+  },
+  {
+    "436f756e742d30",
+    "59b9890aabf94c1d502c39d8d356989ab0880ed43e984255db7b32a8d7b0ad5beba799a4ec326a0ddca3dd5e5d",
+    "29240057274f71e55bfcca28"
+  },
+  {
+    "436f756e742d323536",
+    "df400deaab08719cdc7b278b9d2daf898e6aec30e0b1746552d53a20397c519c409a8b73e5e6672985a09c0942",
+    "29240057274f71e55bfccb28"
+  },
+  {
+    "436f756e742d30",
+    "9b575da82843bf4561f9ba910e533d6991705e4abda231f62b6a3659ce2cdce44fc1240271727a58edc27f4c8d",
+    "9d1500195f9750f4f42e34c4"
+  },
+  {
+    "436f756e742d323536",
+    "612fe5f5462e6ad59dc20fc5f217a1070f0af4d84eb1e5a26d22460f6ed25e5c1a501b6751aaceb78411dfdcc7",
+    "9d1500195f9750f4f42e35c4"
+  },
+  {
+    "436f756e742d30",
+    "9eadfa0f954835e7e920ffe56dec6b31a046271cf71fdda55db72926e1d8fae94cc6280fcfabd8db71eaa65c05",
+    "75838a8010d2e4760254dd56"
+  },
+  {
+    "436f756e742d323536",
+    "fb857f4185ce5286c1a52431867537204963ea66a3eee8d2a74419fd8751faee066d08277ac7880473aa4143ba",
+    "75838a8010d2e4760254dc56"
+  },
+  {
+    "436f756e742d30",
+    "6469c41c5c81d3aa85432531ecf6460ec945bde1eb428cb2fedf7a29f5a685b4ccb0d057f03ea2952a27bb458b",
+    "726b4390ed2209809f58c693"
+  },
+  {
+    "436f756e742d323536",
+    "b45b69d419a9be7219d8c94365b89ad6951caf4576ea4774ea40e9b7047a09d6537d1aa2f7c12d6ae4b729b4d0",
+    "726b4390ed2209809f58c793"
+  },
+  {
+    "436f756e742d30",
+    "21433eaff24d7706f3ed5b9b2e709b07230e2b11df1f2b1fe07b3c70d5948a53d6fa5c8bed194020bd9df0877b",
+    "0de7655fb65e1cd51a38864e"
+  },
+  {
+    "436f756e742d323536",
+    "1ea6326c8098ed0437a553c466550114fb2ca1412cca7de98709b9ccdf19206e52c3d39180e2cf62b3e9f4baf4",
+    "0de7655fb65e1cd51a38874e"
+  },
+  {
+    "436f756e742d30",
+    "25881f219935eec5ba70d7b421f13c35005734f3e4d959680270f55d71e2f5cb3bd2daced2770bf3d9d4916872",
+    "7e45c21e20e869ae00492123"
+  },
+  {
+    "436f756e742d323536",
+    "e2276ec5047bc4b6ed57d6da7da2fb47a77502f0a30f17d040247c73da336d722bc6c89adf68396a0912c6d152",
+    "7e45c21e20e869ae00492023"
+  },
+  {
+    "436f756e742d30",
+    "d3cf4984931484a080f74c1bb2a6782700dc1fef9abe8442e44a6f09044c88907200b332003543754eb51917ba",
+    "9c995e621bf9a20c5ca45546"
+  },
+  {
+    "436f756e742d323536",
+    "62092672f5328a0dde095e57435edf7457ace60b26ee44c9291110ec135cb0e14b85594e4fea11247d937deb62",
+    "9c995e621bf9a20c5ca45446"
+  },
+  {
+    "436f756e742d30",
+    "57624b6e320d4aba0afd11f548780772932f502e2ba2a8068676b2a0d3b5129a45b9faa88de39e8306da41d4cc",
+    "0c29e714eb52de5b7415a1b7"
+  },
+  {
+    "436f756e742d323536",
+    "cc161f5a179831d456d119d2f2c19a6817289c75d1c61cd37ac8a450acd9efba02e0ac00d128c17855931ff69a",
+    "0c29e714eb52de5b7415a0b7"
+  },
+  {
+    "436f756e742d30",
+    "2480179d880b5f458154b8bfe3c7e8732332de84aabf06fc440f6b31f169e154157fa9eb44f2fa4d7b38a9236e",
+    "ea4fd7a485ee5f1f4b62c1b7"
+  },
+  {
+    "436f756e742d323536",
+    "247da592cc4ce834a94de2c79f5730ee49342470a021e4a4bc2bb77c53b17413e94d94f57b4fdaedcf97cfe7b1",
+    "ea4fd7a485ee5f1f4b62c0b7"
+  },
+  {
+    "436f756e742d30",
+    "840669634db51e28df54f189329c1b727fd303ae413f003020aff5e26276aaa910fc4296828cb9d862c2fd7d16",
+    "76af62719d33d39a1cb6be9f"
+  },
+  {
+    "436f756e742d323536",
+    "9f659482ebc52f8303f9eac75656d807ec38ce2e50c72e3078cd13d86b30e3f890690a873277620f8a6a42d836",
+    "76af62719d33d39a1cb6bf9f"
+  },
+  {
+    "436f756e742d30",
+    "949f58e87c39b3f55390b6a970de27dfac44aadc2fbc9d623dcde1a08b628c83ad07dbbee6aede7fcfbf955670",
+    "ad23d477d0f9ec0c12282360"
+  },
+  {
+    "436f756e742d323536",
+    "6fba181536043104dbe021c28638b223618ed04fd0a5fe0572174e26d84e2585047d903b8393865a52d54fb329",
+    "ad23d477d0f9ec0c12282260"
+  },
+  {
+    "436f756e742d30",
+    "351d83aa6f2ba77c4b9b89aa22fcb18aff3f792bb04e999de9f76f03f99e92c8d9203605cc0dcbb5eb08a9db6b",
+    "f2a9f537ec6d21162c70efbc"
+  },
+  {
+    "436f756e742d323536",
+    "47c0fe1084f141973870ca35b470f03d0135517f22e12788a621b6775cc281d2c697a68680e237cda57fdf3c76",
+    "f2a9f537ec6d21162c70eebc"
+  },
+  {
+    "436f756e742d30",
+    "860171a270f1f02f3635047a054241c977878028491fb1dde6bf232e8c21b4e325a53d2f9816195f8563ceab3d",
+    "06ab4f04d6a36db110566315"
+  },
+  {
+    "436f756e742d323536",
+    "56764313736cbd47a2e745a873673614b823f33718114aded47b02fcd0382321c4d4cb4eed9cd5a15d56017379",
+    "06ab4f04d6a36db110566215"
+  },
+  {
+    "436f756e742d30",
+    "39b23f5c413932ee827c2214644439973869613c670b169d90b5d4ca304af1fd40a04dbc3cba713bf282ee748c",
+    "37d649d5002b2c68ebb689b8"
+  },
+  {
+    "436f756e742d323536",
+    "a76792233f7a6a77b0cb8d2e12f247fc61442907c97195d72c45f0565c5dede7b90aaf0ebce9ac4e32b416257a",
+    "37d649d5002b2c68ebb688b8"
+  },
+  {
+    "436f756e742d30",
+    "b5ff8ee759239c6fa1810740c971bc35c708bc02901a0629e7bcbc4d69754629229cfb9fe95e70b8a82430ba6d",
+    "862a93b766411f32b0e10f78"
+  },
+  {
+    "436f756e742d323536",
+    "66f9108fa15e7bb05fd47cfc7a364ce118f9e64245c6a9cb0faf1d26f3c054d00a79a8a48c775b7725b65a001f",
+    "862a93b766411f32b0e10e78"
+  },
+  {
+    "436f756e742d30",
+    "5526be92443bb658fcaf9ca8a220ecf00d70888bffd88ffae51bfdcccd6e148ecc65f1e93b63a7523f40f4a76e",
+    "a97875b9a3444d718ec08055"
+  },
+  {
+    "436f756e742d323536",
+    "af272c54df5de36a63c4d14a5ecb2d655d3bf9d636283fce0cc54e9fb328e986165ba2d779b28adaac01a71e1c",
+    "a97875b9a3444d718ec08155"
+  },
+  {
+    "436f756e742d30",
+    "81a1f54372913f6dd88f45d7889dab174942baef7b1f3a32ee42058bd4b5ca5e8323301420b9e3f3c7b56fa8b4",
+    "80e67dfe703b591e18cdb04e"
+  },
+  {
+    "436f756e742d323536",
+    "9db34daacba1042ed51fbf4f71a120a9d04fee8724682ce1497ade14ec1ff1d4a73267b81e2ee20b8d47d77269",
+    "80e67dfe703b591e18cdb14e"
+  },
+  {
+    "436f756e742d30",
+    "0454bcbe4969734b80276bc16cf8fa2ce6e8f9f48d8a0724772cdbae5d7d49b2b74996274ed7bf45d973fd3bf2",
+    "dc892fcb09fd090b4cfcd093"
+  },
+  {
+    "436f756e742d323536",
+    "8b38c0457f025e9a361292eb6a701787b96470bd2807357f59d02712edc69840f02e9f4896312410b1dd26e364",
+    "dc892fcb09fd090b4cfcd193"
+  },
+  {
+    "436f756e742d30",
+    "025404c525808e9087ae0f62204c31076cf5d6473f5d9b4e437e03c84158497341d2c941e8b94c8050190c8947",
+    "f9ac336746772688d4d87ab0"
+  },
+  {
+    "436f756e742d323536",
+    "6213c7c2dce765f87eae5376493f8ae7d2af2a27aa72e110924f77ce7a37db4c774392b1f2b557f56e086d8b90",
+    "f9ac336746772688d4d87bb0"
+  },
+  {
+    "436f756e742d30",
+    "5824d9da9f1cdfba1fd76bcaf5f80f65947b9d68dede981638a49d9a61256f3a0dfe77db6a4c9c8ab6d37e9952",
+    "cd67bab65c8acc84e73c2448"
+  },
+  {
+    "436f756e742d323536",
+    "6fc44526860004bba5b5e28208d4542052b8d0267057aa66c62072102c6bd1318b15197e9d176dd8c3bd046d06",
+    "cd67bab65c8acc84e73c2548"
+  },
+  {
+    "436f756e742d30",
+    "684863861429e719e3874931b126f3fefaa0b701e3d9f81f5928e1b04c1a7df136ec31c8823b205b104d0cd563",
+    "625b600a33be34bdd14b2476"
+  },
+  {
+    "436f756e742d323536",
+    "b9debb1d7c56d4ec76818dd665f1a33d4686f4f852cba23c5681328363e60320c2187b9dbb716253b6e395023d",
+    "625b600a33be34bdd14b2576"
+  },
+  {
+    "436f756e742d30",
+    "3d2d1ac9e475e0d02d8f28c9d4dba172115a9051959c1a444b8c75d31b068b416f0ed314379b51e12040711b7f",
+    "90915fae644b85b3a550cf53"
+  },
+  {
+    "436f756e742d323536",
+    "d39d0497789286df9baefbad41c2e71bd62a2be285db9de1a42730ecc1a685bc37de593eb307e13b3b0c68af8e",
+    "90915fae644b85b3a550ce53"
+  },
+  {
+    "436f756e742d30",
+    "0d743e13c26783dfff2e2c7c33b7db67550980f8797556e2a4f9cdc7135fc85d0e1ed31bb1b6165729f724b95a",
+    "12cbc5e68d45d54c95ad63b5"
+  },
+  {
+    "436f756e742d323536",
+    "de0b16e4f95e7f7592fc028e4d2a99d474feeab0ad5a56f8767bc520c701ee113e23eba375790acb66589c55b4",
+    "12cbc5e68d45d54c95ad62b5"
+  },
+  {
+    "436f756e742d30",
+    "a5501dd5d0e16f4ed33afc76edb6fdd737271c840ddabdfa4732354945cebc4d4fc870679d11e31770866892fc",
+    "519f891feadb8532857bd5a8"
+  },
+  {
+    "436f756e742d323536",
+    "ae051307b0630d64ecfb71a25e9f37c1876f962fc0abc3a2afeb2e6881d60ff3ae4a881d68e3a25c79b1c2de12",
+    "519f891feadb8532857bd4a8"
+  },
+  {
+    "436f756e742d30",
+    "70f68b3482bc302bce585df7d3d7373dff6566242e943e9c56349f7f8197d7823fbbfb77db69007dfb09024ddb",
+    "c482bb57df0a9c4c0cf2ecd9"
+  },
+  {
+    "436f756e742d323536",
+    "10090ba0cfe754278e78e252ee5f57ca29c04a11d5bdff1a94457b5d425e5608dd029cffc280e1e6186e5567f1",
+    "c482bb57df0a9c4c0cf2edd9"
+  },
+  {
+    "436f756e742d30",
+    "58fbb7f351e806e4fa2e5c865805c9334a1445e9a01eefabb0cbf7fb39b53cc32d0c323300e260382e314a8f3c",
+    "052ade27332de87413caf28e"
+  },
+  {
+    "436f756e742d323536",
+    "dc8963b752113e591f6dffec5bb7e86ad3e0bdfe8b6921e0dd86f63c36497b0ca7ea47530be55d9ac7441e5db4",
+    "052ade27332de87413caf38e"
+  },
+  {
+    "436f756e742d30",
+    "7a0f34ffa87168b3308f5518e4046a538cc64dba1b704e24451478cb3a173599cf99f954138c0f384551548ca4",
+    "adbd83083d1c47d3d3c30bac"
+  },
+  {
+    "436f756e742d323536",
+    "5bc2079c23cb053cd4b09bcd2eb2977145a63cb7adb694188cad73201cd55e82740dc985af2eb42510db126992",
+    "adbd83083d1c47d3d3c30aac"
+  },
+  {
+    "436f756e742d30",
+    "1a2a4d9dd2d72a08ab153c2b63d3265d3c380833bff40f1df8b407023a9a74bfafde8688096ad6e745e285d6d1",
+    "b26d9a2cf1357cae1e929442"
+  },
+  {
+    "436f756e742d323536",
+    "e07c2b9f08f077ffe4646d00d4cc401b23f9f502d511c829f04bf208d6d3bb37959755b4c3be2b1df3a1d42c74",
+    "b26d9a2cf1357cae1e929542"
+  },
+  {
+    "436f756e742d30",
+    "1f9aba3b0ee7bb6ad69ba428d1a09296ccc663238e9d26cd8b13b2a5ce3d4ba41baaca58ce37ebb84f2be057fc",
+    "45da82d75544a7dae10e9831"
+  },
+  {
+    "436f756e742d323536",
+    "573cc95967540f5babdcc134b892c96ffda5176c36553890c93c075a1de1bae4c683a08e386825858e599f41d8",
+    "45da82d75544a7dae10e9931"
+  },
+  {
+    "436f756e742d30",
+    "d112aaf02c1d29a86f07dae92dc20d5756c8fdc2fee0d1516155bd717c8a90ea092271472f84ae45b136cf65cd",
+    "3b29b8bb622ba14d9ff4d4dd"
+  },
+  {
+    "436f756e742d323536",
+    "927ba5b5505e0b1a2aff1a9fbefdbb3d85546971939188a69e999cbd1e5ff3330304cf24873e4080467c8ab245",
+    "3b29b8bb622ba14d9ff4d5dd"
+  },
+  {
+    "436f756e742d30",
+    "15eeadf40282492721baac39290f4ff45b85884fb72f5ae9f491ec3d9ba72c7e1cd73d73fa9c110b3dbf0d867c",
+    "fb856a6033ee142b92d6eb63"
+  },
+  {
+    "436f756e742d323536",
+    "a8c995a51ac8e58c0992556ffb90f5dbc3fe6c75fd7ceb58367081b02854132602498ee1dee09322b868ca780c",
+    "fb856a6033ee142b92d6ea63"
+  },
+  {
+    "436f756e742d30",
+    "6b314d3918da44e15f1693cf1ca23584cd71fd6a9f9ed6733810a13709a1eccd8ae9c9f2e2a1b33f31c2ed03f8",
+    "dc98071f41d23172e43f33d8"
+  },
+  {
+    "436f756e742d323536",
+    "7485838f785d7382c8fa591a1b1f652d52d6211065a0f3695a5f269956e5a7702acbf323792f80fbcaada879d4",
+    "dc98071f41d23172e43f32d8"
+  },
+  {
+    "436f756e742d30",
+    "259d273d16006a91072733bd69ff2a683422745d56a8aa5ebf96f3b58af9d51e19366f3d67e7bba007377fd4e4",
+    "3211ef1fea85ca6c115d9c90"
+  },
+  {
+    "436f756e742d323536",
+    "13e8860263296d71558d0e0631194d60670b933d688257b501b0afbc22a4aa24e5152b92f2f3bf901d64a5bd36",
+    "3211ef1fea85ca6c115d9d90"
+  },
+  {
+    "436f756e742d30",
+    "9153a7fcf8ec932b91bab63f777265ac545eb9a3f23eaac388a9143aa16c6915a27bfb3e97ea57fc6d829a8fcd",
+    "16e906b45a0515f7e542b5c5"
+  },
+  {
+    "436f756e742d323536",
+    "ed9e7a8a9143bd6d400189b971625929a1f19d159b769d6270528c3905a678cc9e0574c6c734adf3e205bd6e36",
+    "16e906b45a0515f7e542b4c5"
+  },
+  {
+    "436f756e742d30",
+    "170f8beddfe949b75ef9c387e201baf4132fa7374593dfafa90768788b7b2b200aafcc6d80ea4c795a7c5b841a",
+    "55ff7a7d739c69f44b25447b"
+  },
+  {
+    "436f756e742d323536",
+    "dbbfc44ae037864e75f136e8b4b4123351d480e6619ae0e0ae437f036f2f8f1ef677686323977a1ccbb4b4f16a",
+    "55ff7a7d739c69f44b25457b"
+  },
+  {
+    "436f756e742d30",
+    "de69e9d943a5d0b70be3359a19f317bd9aca4a2ebb4332a39bcdfc97d5fe62f3a77702f4822c3be531aa7843a1",
+    "479afdf3546ddba3a9841f38"
+  },
+  {
+    "436f756e742d323536",
+    "eecc2173ce1ac14b27ee67041e90ed50b7809926e55861a579949c07f6d26137bf9cf0d097f60b5fd2fbf348ec",
+    "479afdf3546ddba3a9841e38"
+  },
+  {
+    "436f756e742d30",
+    "0116aeb3a1c405c61b1ce47600b7ecd11d89b9c08c408b7e2d1e00a4d64696d12e6881dc61688209a8207427f9",
+    "9752b85fe8c73eda183f9e80"
+  },
+  {
+    "436f756e742d323536",
+    "0dfcfc22ea768880b4160fec27ab10c75fb27766c6bb97aed373a9b6eae35d31afb08257401075cbb602ac5abb",
+    "9752b85fe8c73eda183f9f80"
+  },
+  {
+    "436f756e742d30",
+    "942a2a92e0817cf032ce61abccf4f3a7c5d21b794ed943227e07b7df2d6dd92c9b8a9371949e65cca262448ab7",
+    "d9c64ec8deb8a0647fafe8ff"
+  },
+  {
+    "436f756e742d323536",
+    "24f9d8dadd2107376ccd143f70f9bafcd2b21d8117d45ff327e9a78f603a32606e42a6a8bdb57a852591d20907",
+    "d9c64ec8deb8a0647fafe9ff"
+  },
+  {
+    "436f756e742d30",
+    "39e0033eac3039372dc1ce46592c0c4dd2dcbe591e47da6b13d3845467a97379ab3ec8bb81c46ce22afee06f5f",
+    "a5c06c7297a23aa7e5009b6a"
+  },
+  {
+    "436f756e742d323536",
+    "8a638b1fd40bc1404207e7fcc668ffe3fb373736bbafdf39cc746d72e176fe23128c20cf19672be80786d85b9f",
+    "a5c06c7297a23aa7e5009a6a"
+  },
+  {
+    "436f756e742d30",
+    "08deb82f4f04940e7c69cb2d88dc7cf33b3c44631b3456580aa3804685c5420a55c8d4bec6b48b2c5a6e4d3a1d",
+    "383130f26a480c36c62db4f6"
+  },
+  {
+    "436f756e742d323536",
+    "ca786b827c6df041c1eb7d8ec058725df67fa5b754b42905019b07d4969ae911061232dc3f84bddd4266f47028",
+    "383130f26a480c36c62db5f6"
+  },
+  {
+    "436f756e742d30",
+    "16d0a57d7dc5106a947b8ed6cb759af864fe8f60aa7f7e4665df083167aebecc9e423badf1ccb4937ac4ee96df",
+    "9deefcbfd747d7a666450f00"
+  },
+  {
+    "436f756e742d323536",
+    "b00796d08dea71e3bb9309886d1fde0f35c68b093c7c15d4cc2a1df40ba157a982deac8a2251b4d6f942cc8d76",
+    "9deefcbfd747d7a666450e00"
+  },
+  {
+    "436f756e742d30",
+    "268e957e2b55b77a1737826c1164f1bf157c237a12f6a08354b8860529aff59be21b1940f729a38dcaa6a2083c",
+    "04c09a0a7e9194a1a1730e95"
+  },
+  {
+    "436f756e742d323536",
+    "ae921e72db3b81160354e84fa89a2a67bdf701cfd6befebb7a587c1f114846acf0d8f9ec0a92a503de126ac9c5",
+    "04c09a0a7e9194a1a1730f95"
+  },
+};
+
+static int
+hpke_encap_testable (char *pkR, char *pkE, char *skE, const struct hpke_dhkem *dhkem,
+                     uint8_t **enc, size_t *enc_len, uint8_t **shared_secret)
+{
+  struct tstring *pkRm;
+  uint8_t *dh_ser, *kem_context;
+  size_t dh_ser_len;
+
+  pkRm = SHEX(pkR);
+
+  if (dhkem->dhkem == HPKE_DHKEM_P256
+      || dhkem->dhkem == HPKE_DHKEM_P384
+      || dhkem->dhkem == HPKE_DHKEM_P521)
+    {
+      struct tstring *pke, *ske;
+      struct ecc_point p, dh, pR;
+      struct ecc_scalar key;
+      mpz_t x, z;
+
+      ecc_point_init(&pR, dhkem->ecc);
+      _nettle_octet_to_ecc_point(&pR, pkRm->data, pkRm->length);
+
+      ecc_point_init(&p, dhkem->ecc);
+      ecc_scalar_init(&key, dhkem->ecc);
+
+      mpz_init(z);
+
+      pke = SHEX(pkE);
+      ske = SHEX(skE);
+      _nettle_octet_to_ecc_point(&p, pke->data, pke->length);
+      nettle_mpz_set_str_256_u(z, ske->length, ske->data);
+      ecc_scalar_set(&key, z);
+
+      mpz_clear(z);
+
+      ecc_point_init(&dh, dhkem->ecc);
+      ecc_point_mul(&dh, &key, &pR);
+
+      mpz_init(x);
+      ecc_point_get(&dh, x, NULL);
+      dh_ser_len = (ecc_bit_size(dhkem->ecc) + 7) / 8;
+      dh_ser = gmp_alloc(dh_ser_len);
+      nettle_mpz_get_str_256(dh_ser_len, dh_ser, x);
+      mpz_clear(x);
+
+      _nettle_ecc_point_to_octet(enc, enc_len, &p, dhkem);
+
+      ecc_point_clear(&p);
+      ecc_point_clear(&pR);
+      ecc_point_clear(&dh);
+      ecc_scalar_clear(&key);
+    }
+  else
+    {
+      struct tstring *sk, *enc_tmp;
+
+      sk = SHEX(skE);
+      enc_tmp = SHEX(pkE);
+      *enc = gmp_alloc(enc_tmp->length);
+      memcpy(*enc, enc_tmp->data, enc_tmp->length);
+      *enc_len = enc_tmp->length;
+
+      dh_ser = gmp_alloc(dhkem->nsk);
+      dh_ser_len = dhkem->nsk;
+      dhkem->mul (dh_ser, sk->data, pkRm->data);
+    }
+
+  kem_context = gmp_alloc(*enc_len + pkRm->length);
+  memcpy(kem_context, *enc, *enc_len);
+  memcpy(kem_context + *enc_len, pkRm->data, pkRm->length);
+
+  *shared_secret = _nettle_extract_and_expand_kem(dh_ser,
+                                                  dh_ser_len,
+                                                  kem_context,
+                                                  *enc_len+pkRm->length,
+                                                  dhkem);
+
+  free(dh_ser);
+  free(kem_context);
+
+  return 0;
+}
+
+#ifndef HPKE_SKIP_NON_BASIC
+static int
+hpke_encap_auth_testable (char *pkR, char *pkE, char *skE, char *pkS,
+                          char *skS, const struct hpke_dhkem *dhkem,
+                          uint8_t **enc, size_t *enc_len, uint8_t **shared_secret)
+{
+  struct tstring *pkRm;
+  uint8_t *dh_ser, *kem_context;
+  size_t dh_ser_len;
+
+  pkRm = SHEX(pkR);
+
+  if (dhkem->dhkem == HPKE_DHKEM_P256
+      || dhkem->dhkem == HPKE_DHKEM_P384
+      || dhkem->dhkem == HPKE_DHKEM_P521)
+    {
+      struct tstring *pke, *ske;
+      struct ecc_point p, dh_e, dh_s, pR;
+      struct ecc_scalar key_e, key_s;
+      mpz_t x, z;
+
+      ecc_point_init(&pR, dhkem->ecc);
+      _nettle_octet_to_ecc_point(&pR, pkRm->data, pkRm->length);
+
+      ecc_point_init(&p, dhkem->ecc);
+      ecc_scalar_init(&key_e, dhkem->ecc);
+
+      mpz_init(z);
+
+      pke = SHEX(pkE);
+      ske = SHEX(skE);
+      _nettle_octet_to_ecc_point(&p, pke->data, pke->length);
+      nettle_mpz_set_str_256_u(z, ske->length, ske->data);
+      ecc_scalar_set(&key_e, z);
+
+      mpz_clear(z);
+
+      ecc_point_init(&dh_e, dhkem->ecc);
+      ecc_point_mul(&dh_e, &key_e, &pR);
+
+      ecc_scalar_init(&key_s, dhkem->ecc);
+      mpz_init_set_str(z, skS, 16);
+      ecc_scalar_set(&key_s, z);
+      mpz_clear(z);
+
+      ecc_point_init(&dh_s, dhkem->ecc);
+      ecc_point_mul(&dh_s, &key_s, &pR);
+
+      mpz_init(x);
+      ecc_point_get(&dh_e, x, NULL);
+      dh_ser_len = ((ecc_bit_size(dhkem->ecc) + 7) / 8) * 2;
+      size_t one_dh_len = dh_ser_len / 2;
+      dh_ser = calloc(dh_ser_len, 1);
+      nettle_mpz_get_str_256(one_dh_len, dh_ser, x);
+      mpz_clear(x);
+
+      mpz_init(x);
+      ecc_point_get(&dh_s, x, NULL);
+      nettle_mpz_get_str_256(one_dh_len, dh_ser + one_dh_len, x);
+      mpz_clear(x);
+
+      _nettle_ecc_point_to_octet(enc, enc_len, &p, dhkem);
+
+      ecc_point_clear(&p);
+      ecc_point_clear(&pR);
+      ecc_point_clear(&dh_e);
+      ecc_point_clear(&dh_s);
+      ecc_scalar_clear(&key_e);
+      ecc_scalar_clear(&key_s);
+    }
+  else
+    {
+      struct tstring *sk, *sksm, *enc_tmp;
+
+      enc_tmp = SHEX(pkE);
+      *enc_len = enc_tmp->length;
+      *enc = gmp_alloc(*enc_len);
+      memcpy(*enc, enc_tmp->data, *enc_len);
+      sk = SHEX(skE);
+      sksm = SHEX(skS);
+
+      dh_ser_len = dhkem->nsk * 2;
+      dh_ser = calloc(dh_ser_len, 1);
+      dhkem->mul(dh_ser, sk->data, pkRm->data);
+      dhkem->mul(dh_ser + dhkem->nsk, sksm->data, pkRm->data);
+    }
+
+  struct tstring *pksm;
+
+  pksm = SHEX(pkS);
+
+  kem_context = calloc(*enc_len + pkRm->length + pksm->length, 1);
+  memcpy(kem_context, *enc, *enc_len);
+  memcpy(kem_context + *enc_len, pkRm->data, pkRm->length);
+  memcpy(kem_context + *enc_len + pkRm->length, pksm->data, pksm->length);
+
+  *shared_secret = _nettle_extract_and_expand_kem(dh_ser,
+      dh_ser_len,
+      kem_context,
+      *enc_len+pkRm->length+pksm->length,
+      dhkem);
+
+  free(dh_ser);
+  free(kem_context);
+
+  return 0;
+}
+#endif /* HPKE_SKIP_NON_BASIC */
+
+static const struct hpke_dhkem *
+get_dhkem (const uint16_t dhkem)
+{
+  if (dhkem == HPKE_DHKEM_P256)
+    return &nettle_hpke_dhkem_p256;
+#ifndef HPKE_SKIP_NON_BASIC
+  else if (dhkem == HPKE_DHKEM_P384)
+    return &nettle_hpke_dhkem_p384;
+  else if (dhkem == HPKE_DHKEM_P521)
+    return &nettle_hpke_dhkem_p521;
+  else if (dhkem == HPKE_DHKEM_X25519)
+    return &nettle_hpke_dhkem_x25519;
+  else if (dhkem == HPKE_dhkem_X448)
+    return &nettle_hpke_dhkem_x448;
+#endif /* HPKE_SKIP_NON_BASIC */
+  else
+    return NULL;
+}
+
+static const struct hpke_hkdf *
+get_hkdf (const uint16_t hkdf)
+{
+  if (hkdf == HPKE_HKDF_SHA256)
+    return &nettle_hpke_hkdf_sha256;
+#ifndef HPKE_SKIP_NON_BASIC
+  else if (hkdf == HPKE_HKDF_SHA384)
+    return &nettle_hpke_hkdf_sha384;
+  else if (hkdf == HPKE_HKDF_SHA512)
+    return &nettle_hpke_hkdf_sha512;
+#endif /* HPKE_SKIP_NON_BASIC */
+  else
+    return NULL;
+}
+
+static const struct hpke_aead *
+get_aead (const uint16_t aead)
+{
+  if (aead == HPKE_AEAD_AES_128_GCM)
+    return &nettle_hpke_aead_aes128;
+  else if (aead == HPKE_AEAD_EXPORT_ONLY)
+    return &nettle_hpke_aead_export;
+#ifndef HPKE_SKIP_NON_BASIC
+  else if (aead == HPKE_AEAD_AES_256_GCM)
+    return &nettle_hpke_aead_aes256;
+  else if (aead == HPKE_AEAD_CHACHA20POLY1305)
+    return &nettle_hpke_aead_chachapoly;
+#endif /* HPKE_SKIP_NON_BASIC */
+  else
+    return NULL;
+}
+
+#ifndef HPKE_FOR_REMOVAL
+static int
+hpke_setup_base_s_testable (char *pkR, char *pkE, char *skE, uint8_t *info,
+                            size_t info_len, const uint16_t dhkem_id,
+                            const uint16_t hkdf_id, const uint16_t aead_id,
+                            uint8_t **key, uint8_t **base_nonce,
+                            uint8_t **exporter_secret)
+{
+  int r;
+  uint8_t *enc = NULL, *shared_secret = NULL;
+  size_t enc_len;
+  const struct hpke_dhkem *dhkem = get_dhkem(dhkem_id);
+  const struct hpke_hkdf *hkdf = get_hkdf(hkdf_id);
+  const struct hpke_aead *aead = get_aead(aead_id);
+
+  r = hpke_encap_testable(pkR, pkE, skE, dhkem, &enc, &enc_len, &shared_secret);
+  if (r < 0)
+    return r;
+
+  r = hpke_key_schedule(NULL, 0,
+                        NULL, 0,
+                        info, info_len,
+                        shared_secret,
+                        dhkem, hkdf, aead,
+                        HPKE_MODE_BASE,
+                        key, base_nonce, exporter_secret);
+  if (r < 0)
+    {
+      free(enc);
+      free(shared_secret);
+    }
+  return r;
+}
+#endif
+
+#ifndef HPKE_SKIP_NON_BASIC
+static int
+hpke_setup_psk_s_testable (char *pkR, char *pkE, char *skE,
+                           uint8_t *info, size_t info_len,
+                           uint8_t *psk, size_t psk_len, uint8_t *psk_id,
+                           size_t psk_id_len, const uint16_t dhkem,
+                           const uint16_t hkdf, const uint16_t aead,
+                           struct hpke_ctx *h)
+{
+  int r;
+
+  hpke_ctx_init(h, get_dhkem(dhkem), get_hkdf(hkdf), get_aead(aead), HPKE_MODE_PSK);
+
+  r = hpke_encap_testable(pkR, pkE, skE, h);
+  if (r < 0)
+    goto out;
+
+  r = _nettle_hpke_ctx_add_info(h, info, info_len);
+  if (r < 0)
+    goto out;
+  r = _nettle_hpke_ctx_add_psk(h, psk, psk_len, psk_id, psk_id_len); 
+  if (r < 0)
+    goto out;
+
+  r = _nettle_hpke_key_schedule(h);
+  if (r < 0)
+    goto out;
+
+out:
+  if (h->psk)
+    {
+      free(h->psk);
+      h->psk = NULL;
+      h->psk_len = 0;
+    }
+  if (h->psk_id)
+    {
+      free(h->psk_id);
+      h->psk_id = NULL;
+      h->psk_id_len = 0;
+    }
+
+  return r;
+}
+
+static int
+hpke_setup_auth_s_testable (char *pkr, char *pks, char *sks,
+                            char *pke, char *ske,
+                            uint8_t *info, size_t info_len,
+                            const uint16_t dhkem, const uint16_t hkdf,
+                            const uint16_t aead, struct hpke_ctx *h)
+{
+  int r;
+
+  hpke_ctx_init(h, get_dhkem(dhkem), get_hkdf(hkdf), get_aead(aead), HPKE_MODE_AUTH);
+
+  r = hpke_encap_auth_testable(pkr, pke, ske, pks, sks, h);
+  if (r < 0)
+    return r;
+
+  r = _nettle_hpke_ctx_add_info(h, info, info_len);
+  if (r < 0)
+    return r;
+
+  return _nettle_hpke_key_schedule(h);
+}
+
+static int
+hpke_setup_auth_psk_s_testable (char *pkr, char *pks, char *sks,
+                                char *pke, char *ske,
+                                uint8_t *psk, size_t psk_len,
+                                uint8_t *psk_id, size_t psk_id_len,
+                                uint8_t *info, size_t info_len,
+                                const uint16_t dhkem, const uint16_t hkdf,
+                                const uint16_t aead, struct hpke_ctx *h)
+{
+  int r;
+
+  hpke_ctx_init(h, get_dhkem(dhkem), get_hkdf(hkdf), get_aead(aead), HPKE_MODE_AUTH_PSK);
+
+  r = hpke_encap_auth_testable(pkr, pke, ske, pks, sks, h);
+  if (r < 0)
+    goto out;
+
+  r = _nettle_hpke_ctx_add_info(h, info, info_len);
+  if (r < 0)
+    goto out;
+  r = _nettle_hpke_ctx_add_psk(h, psk, psk_len, psk_id, psk_id_len); 
+  if (r < 0)
+    goto out;
+
+  r = _nettle_hpke_key_schedule(h);
+  if (r < 0)
+    goto out;
+
+out:
+  if (h->psk)
+    {
+      free(h->psk);
+      h->psk = NULL;
+      h->psk_len = 0;
+    }
+  if (h->psk_id)
+    {
+      free(h->psk_id);
+      h->psk_id = NULL;
+      h->psk_id_len = 0;
+    }
+
+  return r;
+}
+#endif /* HPKE_SKIP_NON_BASIC */
+
+#ifndef HPKE_FOR_REMOVAL
+static void
+test_setup_sender (const struct data *d)
+{
+  struct tstring *info;
+  uint8_t *key = NULL, *base_nonce = NULL, *exporter_secret = NULL;
+
+  info = SHEX(d->info);
+
+  if (d->mode == HPKE_MODE_BASE) 
+    hpke_setup_base_s_testable((char*)d->pkr, (char*)d->pke, (char*)d->ske,
+                               info->data, info->length, d->kem_id, d->kdf_id,
+                               d->aead_id, &key, &base_nonce, &exporter_secret);
+#ifndef HPKE_SKIP_NON_BASIC
+  else if (d->mode == HPKE_MODE_PSK)
+    {
+      struct tstring *psk, *psk_id;
+
+      psk = SHEX(d->psk);
+      psk_id = SHEX(d->psk_id);
+
+      hpke_setup_psk_s_testable((char*)d->pkr, (char*)d->pke, (char*)d->ske,
+                                info->data, info->length, psk->data,
+                                psk->length, psk_id->data, psk_id->length,
+                                d->kem_id, d->kdf_id, d->aead_id, &ctx);
+    }
+  else if (d->mode == HPKE_MODE_AUTH)
+    {
+      hpke_setup_auth_s_testable((char*)d->pkr, (char*)d->pks, (char*)d->sks,
+                                 (char*)d->pke, (char*)d->ske, info->data,
+                                 info->length, d->kem_id, d->kdf_id,
+                                 d->aead_id, &ctx);
+    }
+  else if (d->mode == HPKE_MODE_AUTH_PSK)
+    {
+      struct tstring *psk, *psk_id;
+
+      psk = SHEX(d->psk);
+      psk_id = SHEX(d->psk_id);
+
+      hpke_setup_auth_psk_s_testable((char*)d->pkr, (char*)d->pks,
+                                     (char*)d->sks, (char*)d->pke,
+                                     (char*)d->ske, psk->data,
+                                     psk->length, psk_id->data,
+                                     psk_id->length, info->data, info->length,
+                                     d->kem_id, d->kdf_id, d->aead_id, &ctx);
+    }
+#endif /* HPKE_SKIP_NON_BASIC */
+  else
+    return;
+
+  if (d->aead_id != HPKE_AEAD_EXPORT_ONLY)
+    {
+      struct tstring *key, *base_nonce;
+      key = SHEX(d->key);
+      base_nonce = SHEX(d->base_nonce);
+      assert(memcmp(key, key->data, key->length) == 0);
+      assert(memcmp(base_nonce, base_nonce->data, base_nonce->length) == 0);
+    }
+
+  struct tstring *exporter_s;
+  exporter_s = SHEX(d->exporter_secret);
+  assert(memcmp(exporter_secret, exporter_s->data,
+                exporter_s->length) == 0);
+
+  tstring_clear();
+  free(key);
+  free(base_nonce);
+  free(exporter_secret);
+}
+
+static void
+test_setup_receiver (const struct data *d)
+{
+  struct tstring *pkr, *skr, *pke, *info;
+  uint8_t *key = NULL, *base_nonce = NULL, *exporter_secret = NULL;
+  const struct hpke_dhkem *dhkem = get_dhkem(d->kem_id);
+  const struct hpke_hkdf *hkdf = get_hkdf(d->kdf_id);
+  const struct hpke_aead *aead = get_aead(d->aead_id);
+
+  pkr = SHEX(d->pkr);
+  skr = SHEX(d->skr);
+  pke = SHEX(d->pke);
+  info = SHEX(d->info);
+
+  if (d->mode == HPKE_MODE_BASE)
+      hpke_setup_base_r(pke->data, pke->length, pkr->data, pkr->length,
+                        skr->data, skr->length, info->data, info->length, dhkem,
+                        hkdf, aead, &key, &base_nonce, &exporter_secret);
+#ifndef HPKE_SKIP_NON_BASIC
+  else if (d->mode == HPKE_MODE_PSK)
+    {
+      struct tstring *psk, *psk_id;
+
+      psk = SHEX(d->psk);
+      psk_id = SHEX(d->psk_id);
+
+      hpke_ctx_init(&ctx, get_dhkem(d->kem_id), get_hkdf(d->kdf_id),
+                    get_aead(d->aead_id), HPKE_MODE_PSK);
+      hpke_setup_psk_r(pke->data, pke->length, pkr->data, pkr->length,
+                       skr->data, skr->length, info->data, info->length,
+                       psk->data, psk->length, psk_id->data, psk_id->length,
+                       &ctx);
+    }
+  else if (d->mode == HPKE_MODE_AUTH)
+    {
+      struct tstring *pks;
+
+      pks = SHEX(d->pks);
+
+      hpke_ctx_init(&ctx, get_dhkem(d->kem_id), get_hkdf(d->kdf_id),
+                    get_aead(d->aead_id), HPKE_MODE_AUTH);
+      hpke_setup_auth_r(pke->data, pke->length, pks->data, pks->length,
+                        pkr->data, pkr->length, skr->data, skr->length,
+                        info->data, info->length, &ctx);
+    }
+  else if (d->mode == HPKE_MODE_AUTH_PSK)
+    {
+      struct tstring *pks, *psk, *psk_id;
+
+      pks = SHEX(d->pks);
+      psk = SHEX(d->psk);
+      psk_id = SHEX(d->psk_id);
+
+      hpke_ctx_init(&ctx, get_dhkem(d->kem_id), get_hkdf(d->kdf_id),
+                    get_aead(d->aead_id), HPKE_MODE_AUTH_PSK);
+      hpke_setup_auth_psk_r(pke->data, pke->length, pks->data, pks->length,
+                            pkr->data, pkr->length, skr->data, skr->length,
+                            psk->data, psk->length, psk_id->data,
+                            psk_id->length, info->data, info->length, &ctx);
+    }
+#endif /* HPKE_SKIP_NON_BASIC */
+  else
+    {
+      tstring_clear();
+      return;
+    }
+
+  if (d->aead_id != HPKE_AEAD_EXPORT_ONLY)
+    {
+      struct tstring *key, *base_nonce;
+      key = SHEX(d->key);
+      base_nonce = SHEX(d->base_nonce);
+      assert(memcmp(key, key->data, key->length) == 0);
+      assert(memcmp(base_nonce, base_nonce->data, base_nonce->length) == 0);
+    }
+
+  struct tstring *exporter_s;
+  exporter_s = SHEX(d->exporter_secret);
+  assert(memcmp(exporter_secret, exporter_s->data,
+                exporter_s->length) == 0);
+
+  tstring_clear();
+  free(key);
+  free(base_nonce);
+  free(exporter_secret);
+}
+#endif /* HPKE_FOR_REMOVAL */
+
+static void
+test_hpke_encap (const struct data *d)
+{
+  struct tstring *shared_secret_t;
+  uint8_t *enc = NULL, *shared_secret = NULL;
+  size_t enc_len;
+  const struct hpke_dhkem *dhkem = get_dhkem(d->kem_id);
+
+#ifndef HPKE_SKIP_NON_BASIC
+  if (d->mode == HPKE_MODE_BASE || d->mode == HPKE_MODE_PSK)
+#endif
+    hpke_encap_testable((char*)d->pkr, (char*)d->pke, (char*)d->ske, dhkem,
+                        &enc, &enc_len, &shared_secret);
+#ifndef HPKE_SKIP_NON_BASIC
+  else
+    hpke_encap_auth_testable((char*)d->pkr, (char*)d->pke, (char*)d->ske,
+                             (char*)d->pks, (char*)d->sks, &c);
+#endif
+
+  shared_secret_t = SHEX(d->shared_secret);
+  assert(memcmp(shared_secret_t->data, shared_secret,
+                shared_secret_t->length) == 0);
+
+  tstring_clear();
+  free(enc);
+  free(shared_secret);
+}
+
+static void
+test_hpke_decap (const struct data *d)
+{
+  const struct hpke_dhkem *dhkem = get_dhkem(d->kem_id);
+  uint8_t *shared_secret = NULL;
+
+  struct tstring *shared_secret_t, *pkrm, *skrm, *pke;
+
+  shared_secret_t = SHEX(d->shared_secret);
+  pkrm = SHEX(d->pkr);
+  skrm = SHEX(d->skr);
+  pke = SHEX(d->pke);
+
+  if (d->mode == HPKE_MODE_BASE || d->mode == HPKE_MODE_PSK)
+    nettle_hpke_decap(pke->data, pke->length, pkrm->data, pkrm->length, skrm->data,
+        skrm->length, dhkem, &shared_secret);
+#ifndef HPKE_SKIP_NON_BASIC
+  else
+  {
+    struct tstring *pks;
+
+    pks = SHEX(d->pks);
+
+    _nettle_hpke_decap_auth(pke->data, pke->length, pks->data, pks->length, pkrm->data,
+        pkrm->length, skrm->data, skrm->length, &c);
+  }
+#endif /* HPKE_SKIP_NON_BASIC */
+
+  assert(memcmp(shared_secret_t->data, shared_secret, shared_secret_t->length) == 0);
+
+  tstring_clear();
+  free(shared_secret);
+}
+
+static void
+test_hpke_encap_hpke_decap (const struct data *d)
+{
+  uint8_t *shared_sec, *tmp_shared, *enc, *pub_ser, *skr_oct = NULL;
+  size_t shared_sec_len, enc_len, pub_ser_len, skr_oct_len = 0;
+  const struct hpke_dhkem *dhkem = get_dhkem(d->kem_id);
+
+  uint8_t *ikm = calloc(dhkem->nsk, 1);
+  getrandom((void*)ikm, dhkem->nsk, 0);
+
+  if (d->kem_id == HPKE_DHKEM_P256
+      || d->kem_id == HPKE_DHKEM_P384
+      || d->kem_id == HPKE_DHKEM_P521)
+    {
+      struct ecc_point pkr;
+      struct ecc_scalar skr;
+      ecc_point_init(&pkr, dhkem->ecc);
+      ecc_scalar_init(&skr, dhkem->ecc);
+
+      _nettle_derive_key_pair_p(ikm, dhkem->nsk, dhkem, &skr, &pkr);
+
+      _nettle_ecc_point_to_octet(&pub_ser, &pub_ser_len, &pkr, dhkem);
+
+      mpz_t z;
+      mpz_init(z);
+
+      ecc_scalar_get(&skr, z);
+      skr_oct_len = nettle_mpz_sizeinbase_256_u(z);
+      skr_oct = calloc(skr_oct_len, 1);
+      nettle_mpz_get_str_256(skr_oct_len, skr_oct, z);
+      mpz_clear(z);
+      ecc_point_clear(&pkr);
+      ecc_scalar_clear(&skr);
+    }
+#ifndef HPKE_SKIP_NON_BASIC
+  else
+    {
+      _nettle_derive_key_pair_x(ikm, h_ctx.dhkem->nsk, &h_ctx, &skr_oct);
+      pub_ser = h_ctx.enc;
+      pub_ser_len = h_ctx.dhkem->nsk;
+      skr_oct_len = h_ctx.dhkem->nsk;
+    }
+#endif /* HPKE_SKIP_NON_BASIC */
+
+  free(ikm);
+
+  struct yarrow256_ctx yarrow_ctx;
+  uint8_t entropy[YARROW256_SEED_FILE_SIZE];
+  getrandom(entropy, YARROW256_SEED_FILE_SIZE, 0);
+  yarrow256_init(&yarrow_ctx, 0, NULL);
+  yarrow256_seed(&yarrow_ctx, YARROW256_SEED_FILE_SIZE, entropy);
+
+  nettle_hpke_encap(pub_ser, pub_ser_len, &enc, &enc_len, &shared_sec, dhkem, &yarrow_ctx,
+                     (nettle_random_func*)yarrow256_random);
+  shared_sec_len = dhkem->Nsecret;
+
+  nettle_hpke_decap(enc, enc_len, pub_ser, pub_ser_len, skr_oct,
+                     skr_oct_len, dhkem, &tmp_shared);
+  assert(memcmp(shared_sec, tmp_shared, shared_sec_len) == 0);
+
+  free(shared_sec);
+  free(tmp_shared);
+  free(skr_oct);
+  free(pub_ser);
+  free(enc);
+}
+
+static int
+test_key_schedule (const struct data *d)
+{
+  struct tstring *info, *shared_secret, *key, *base_nonce, *exporter_secret;
+  const struct hpke_dhkem *dhkem = get_dhkem(d->kem_id);
+  const struct hpke_hkdf *hkdf = get_hkdf(d->kdf_id);
+  const struct hpke_aead *aead = get_aead(d->aead_id);
+  uint8_t *k = NULL, *bn = NULL, *es = NULL;
+
+  info = SHEX(d->info);
+  shared_secret = SHEX(d->shared_secret);
+#ifndef HPKE_SKIP_NON_BASIC
+  if (d->mode == HPKE_MODE_PSK || d->mode == HPKE_MODE_AUTH_PSK)
+    {
+      psk = SHEX(d->psk);
+      psk_id = SHEX(d->psk_id);
+      _nettle_hpke_ctx_add_psk(&h, psk->data, psk->length, psk_id->data,
+                               psk_id->length);
+    }
+#endif /* HPKE_SKIP_NON_BASIC */
+
+  if (nettle_hpke_key_schedule(NULL, 0,
+                               NULL, 0,
+                               info->data, info->length,
+                               shared_secret->data,
+                               dhkem, hkdf, aead,
+                               HPKE_MODE_BASE,
+                               &k, &bn, &es) < 0)
+    {
+      tstring_clear();
+      return -1;
+    }
+
+  if (d->aead_id != HPKE_AEAD_EXPORT_ONLY)
+    {
+      key = SHEX(d->key);
+      base_nonce = SHEX(d->base_nonce);
+      assert(memcmp(key->data, k, key->length) == 0);
+      assert(memcmp(base_nonce->data, bn, base_nonce->length) == 0);
+    }
+
+  exporter_secret = SHEX(d->exporter_secret);
+  assert(memcmp(exporter_secret->data, es,
+                exporter_secret->length) == 0);
+
+  tstring_clear();
+  free(k);
+  free(bn);
+  free(es);
+
+  return 0;
+}
+
+static void
+test_derive_p (char *ikm, char *skm, char *pkm, const struct hpke_dhkem *dhkem)
+{
+  struct tstring *ikm_o, *pk_o, *sk_o;
+  struct ecc_scalar sk;
+  struct ecc_point pk;
+
+  ecc_scalar_init(&sk, dhkem->ecc);
+  ecc_point_init(&pk, dhkem->ecc);
+
+  ikm_o = SHEX(ikm);
+  pk_o = SHEX(pkm);
+  sk_o = SHEX(skm);
+
+  _nettle_derive_key_pair_p(ikm_o->data, ikm_o->length, dhkem, &sk, &pk);
+
+  uint8_t *pk_der;
+  size_t pk_der_len;
+
+  _nettle_ecc_point_to_octet(&pk_der, &pk_der_len, &pk, dhkem);
+
+  mpz_t s;
+  uint8_t *sk_der;
+
+  mpz_init(s);
+  ecc_scalar_get(&sk, s);
+  sk_der = calloc(dhkem->nsk, 1);
+  nettle_mpz_get_str_256(dhkem->nsk, sk_der, s); 
+
+  assert(memcmp(pk_o->data, pk_der, pk_o->length) == 0);
+  assert(memcmp(sk_o->data, sk_der, sk_o->length) == 0);
+
+  ecc_scalar_clear(&sk);
+  ecc_point_clear(&pk);
+  mpz_clear(s);
+  free(pk_der);
+  free(sk_der);
+  tstring_clear();
+}
+
+#ifndef HPKE_SKIP_NON_BASIC
+static void
+test_derive_x (char *ikm, char *skm, char *pkm, struct hpke_ctx *h_ctx)
+{
+  struct tstring *ikm_o, *sk_o, *pk_o;
+
+  ikm_o = SHEX(ikm);
+
+  uint8_t *sk, *pk;
+
+  _nettle_derive_key_pair_x(ikm_o->data, ikm_o->length, h_ctx, &sk);
+  pk = h_ctx->enc;
+
+  sk_o = SHEX(skm);
+  pk_o = SHEX(pkm);
+
+  assert(memcmp(sk_o->data, sk, sk_o->length) == 0);
+  assert(memcmp(pk_o->data, pk, pk_o->length) == 0);
+
+  free(sk);
+  free(h_ctx->enc);
+  h_ctx->enc = NULL;
+}
+#endif /* HPKE_SKIP_NON_BASIC */
+
+static void
+test_derive_key_pair (const struct data *d)
+{
+  const struct hpke_dhkem *dhkem = get_dhkem(d->kem_id);
+
+  if (d->kem_id == HPKE_DHKEM_P256
+      || d->kem_id == HPKE_DHKEM_P384
+      || d->kem_id == HPKE_DHKEM_P521)
+    {
+      test_derive_p((char*)d->ikmr, (char*)d->skr, (char*)d->pkr, dhkem);
+      test_derive_p((char*)d->ikme, (char*)d->ske, (char*)d->pke, dhkem);
+    }
+#ifndef HPKE_SKIP_NON_BASIC
+  else
+    {
+      test_derive_x((char*)d->ikmr, (char*)d->skr, (char*)d->pkr, &s);
+      test_derive_x((char*)d->ikme, (char*)d->ske, (char*)d->pke, &s);
+    }
+#endif /* HPKE_SKIP_NON_BASIC */
+}
+
+static void
+test_seal_open (const struct data *d)
+{
+  struct tstring *key, *base_nonce, *pt;
+  uint64_t seq_n = 0;
+  const struct hpke_aead *aead = get_aead(d->aead_id);
+
+  key = SHEX(d->key);
+  base_nonce = SHEX(d->base_nonce);
+  pt = SHEX(plaintext);
+
+  for (int counter=0; counter<2; counter++)
+    {
+      struct tstring *aad, *nonce, *ct;
+      uint8_t *ct_o, *pt_open;
+      size_t ct_o_len, pt_open_len;
+      uint8_t *seq_octet = calloc(HPKE_AEAD_NN, 1);
+      uint8_t *nonce_o = calloc(HPKE_AEAD_NN, 1);
+
+      aad = SHEX(encryptions[seal_open_i].aad);
+
+      if (counter)
+        seq_n = 256;
+
+      //test nonce counting
+      mpz_t seq;
+      mpz_init_set_ui(seq, seq_n);
+      nettle_mpz_get_str_256(HPKE_AEAD_NN, seq_octet, seq);
+      mpz_clear(seq);
+
+      memxor3 (nonce_o, base_nonce->data, seq_octet, HPKE_AEAD_NN);
+
+      nonce = SHEX(encryptions[seal_open_i].nonce);
+      assert(memcmp(nonce->data, nonce_o, nonce->length) == 0);
+      free(seq_octet);
+      free(nonce_o);
+
+      hpke_seal(aad->data, aad->length, pt->data, pt->length, &ct_o,
+                &ct_o_len, aead, key->data, base_nonce->data, &seq_n);
+
+      ct = SHEX(encryptions[seal_open_i].ciphertext);
+      assert(memcmp(ct->data, ct_o, ct->length) == 0);
+
+      --seq_n;
+
+      hpke_open(aad->data, aad->length, ct_o, ct_o_len, &pt_open,
+                &pt_open_len, aead, key->data, base_nonce->data, &seq_n);
+
+      assert(memcmp(pt->data, pt_open, pt->length) == 0);
+
+      ++seal_open_i;
+
+      free(ct_o);
+      free(pt_open);
+    }
+
+  tstring_clear();
+}
+
+static void
+test_export (const struct data *d)
+{
+  uint8_t *exp_out;
+  struct tstring *exp_s, *exp_c, *exp_v;
+  const struct hpke_dhkem *dhkem = get_dhkem(d->kem_id);
+  const struct hpke_hkdf *hkdf = get_hkdf(d->kdf_id);
+  const struct hpke_aead *aead = get_aead(d->aead_id);
+
+  exp_s = SHEX(d->exporter_secret);
+  exp_c = SHEX(d->exporter_context);
+  exp_v = SHEX(d->exported_value);
+
+  exp_out = hpke_export_secret(dhkem, hkdf, aead, exp_s->data,
+                               exp_c->data, exp_c->length, d->exporter_l);
+
+  assert(memcmp(exp_v->data, exp_out, exp_v->length) == 0);
+
+  free(exp_out);
+  tstring_clear();
+}
+
+void
+test_main (void)
+{
+  for (int i=0; i<128; i++)
+    {
+#ifdef HPKE_SKIP_NON_BASIC
+      if (d[i].mode != HPKE_MODE_BASE ||
+          d[i].kem_id != HPKE_DHKEM_P256 ||
+          d[i].kdf_id != HPKE_HKDF_SHA256 ||
+          (d[i].aead_id != HPKE_AEAD_AES_128_GCM &&
+          d[i].aead_id != HPKE_AEAD_EXPORT_ONLY))
+        {
+        if (d[i].aead_id != HPKE_AEAD_EXPORT_ONLY)
+            seal_open_i += 2;
+          continue;
+        }
+#endif /* HPKE_SKIP_NON_BASIC */
+      test_derive_key_pair(&d[i]);
+      test_key_schedule(&d[i]);
+      test_hpke_encap(&d[i]);
+      test_hpke_decap(&d[i]);
+      test_hpke_encap_hpke_decap(&d[i]);
+#ifndef HPKE_FOR_REMOVAL
+      test_setup_sender(&d[i]);
+      test_setup_receiver(&d[i]);
+#endif
+      if (d[i].aead_id != HPKE_AEAD_EXPORT_ONLY)
+        test_seal_open(&d[i]);
+      test_export(&d[i]);
+    }
+}