diff -Nru gnutls28-3.5.6/debian/changelog gnutls28-3.5.6/debian/changelog --- gnutls28-3.5.6/debian/changelog 2016-11-14 11:47:23.000000000 +0000 +++ gnutls28-3.5.6/debian/changelog 2016-11-17 07:39:43.000000000 +0000 @@ -1,3 +1,11 @@ +gnutls28 (3.5.6-4ubuntu2) zesty; urgency=medium + + * d/p/dname-api-*.patch fix gnutls api breakage on dname order in + gnutls 3.5.6 (LP: #1641615) + - d/libgnutls30.symbols add new symbols added by the upstream fix + + -- Christian Ehrhardt Thu, 17 Nov 2016 08:39:43 +0100 + gnutls28 (3.5.6-4ubuntu1) zesty; urgency=medium * Merge with Debian. Remaining changes: diff -Nru gnutls28-3.5.6/debian/libgnutls30.symbols gnutls28-3.5.6/debian/libgnutls30.symbols --- gnutls28-3.5.6/debian/libgnutls30.symbols 2016-11-13 12:28:15.000000000 +0000 +++ gnutls28-3.5.6/debian/libgnutls30.symbols 2016-11-17 07:39:43.000000000 +0000 @@ -286,6 +286,7 @@ gnutls_ocsp_resp_get_extension@GNUTLS_3_4 3.5.0 gnutls_ocsp_resp_get_nonce@GNUTLS_3_4 3.5.0 gnutls_ocsp_resp_get_produced@GNUTLS_3_4 3.5.0 + gnutls_ocsp_resp_get_responder2@GNUTLS_3_4 3.5.6-4ubuntu2~ gnutls_ocsp_resp_get_responder@GNUTLS_3_4 3.5.0 gnutls_ocsp_resp_get_responder_raw_id@GNUTLS_3_4 3.5.0 gnutls_ocsp_resp_get_response@GNUTLS_3_4 3.5.0 @@ -798,6 +799,7 @@ gnutls_x509_crl_get_extension_info@GNUTLS_3_4 3.5.0 gnutls_x509_crl_get_extension_oid@GNUTLS_3_4 3.5.0 gnutls_x509_crl_get_issuer_dn2@GNUTLS_3_4 3.5.0 + gnutls_x509_crl_get_issuer_dn3@GNUTLS_3_4 3.5.6-4ubuntu2~ gnutls_x509_crl_get_issuer_dn@GNUTLS_3_4 3.5.0 gnutls_x509_crl_get_issuer_dn_by_oid@GNUTLS_3_4 3.5.0 gnutls_x509_crl_get_next_update@GNUTLS_3_4 3.5.0 @@ -835,6 +837,7 @@ gnutls_x509_crq_get_basic_constraints@GNUTLS_3_4 3.5.0 gnutls_x509_crq_get_challenge_password@GNUTLS_3_4 3.5.0 gnutls_x509_crq_get_dn2@GNUTLS_3_4 3.5.0 + gnutls_x509_crq_get_dn3@GNUTLS_3_4 3.5.6-4ubuntu2~ gnutls_x509_crq_get_dn@GNUTLS_3_4 3.5.0 gnutls_x509_crq_get_dn_by_oid@GNUTLS_3_4 3.5.0 gnutls_x509_crq_get_dn_oid@GNUTLS_3_4 3.5.0 @@ -899,6 +902,7 @@ gnutls_x509_crt_get_ca_status@GNUTLS_3_4 3.5.0 gnutls_x509_crt_get_crl_dist_points@GNUTLS_3_4 3.5.0 gnutls_x509_crt_get_dn2@GNUTLS_3_4 3.5.0 + gnutls_x509_crt_get_dn3@GNUTLS_3_4 3.5.6-4ubuntu2~ gnutls_x509_crt_get_dn@GNUTLS_3_4 3.5.0 gnutls_x509_crt_get_dn_by_oid@GNUTLS_3_4 3.5.0 gnutls_x509_crt_get_dn_oid@GNUTLS_3_4 3.5.0 @@ -915,6 +919,7 @@ gnutls_x509_crt_get_issuer_alt_name@GNUTLS_3_4 3.5.0 gnutls_x509_crt_get_issuer_alt_othername_oid@GNUTLS_3_4 3.5.0 gnutls_x509_crt_get_issuer_dn2@GNUTLS_3_4 3.5.0 + gnutls_x509_crt_get_issuer_dn3@GNUTLS_3_4 3.5.6-4ubuntu2~ gnutls_x509_crt_get_issuer_dn@GNUTLS_3_4 3.5.0 gnutls_x509_crt_get_issuer_dn_by_oid@GNUTLS_3_4 3.5.0 gnutls_x509_crt_get_issuer_dn_oid@GNUTLS_3_4 3.5.0 @@ -1001,6 +1006,7 @@ gnutls_x509_dn_export2@GNUTLS_3_4 3.5.0 gnutls_x509_dn_export@GNUTLS_3_4 3.5.0 gnutls_x509_dn_get_rdn_ava@GNUTLS_3_4 3.5.0 + gnutls_x509_dn_get_str2@GNUTLS_3_4 3.5.6-4ubuntu2~ gnutls_x509_dn_get_str@GNUTLS_3_4 3.5.0 gnutls_x509_dn_import@GNUTLS_3_4 3.5.0 gnutls_x509_dn_init@GNUTLS_3_4 3.5.0 @@ -1086,6 +1092,7 @@ gnutls_x509_privkey_sign_hash@GNUTLS_3_4 3.5.0 gnutls_x509_privkey_verify_params@GNUTLS_3_4 3.5.0 gnutls_x509_privkey_verify_seed@GNUTLS_3_4 3.5.0 + gnutls_x509_rdn_get2@GNUTLS_3_4 3.5.6-4ubuntu2~ gnutls_x509_rdn_get@GNUTLS_3_4 3.5.0 gnutls_x509_rdn_get_by_oid@GNUTLS_3_4 3.5.0 gnutls_x509_rdn_get_oid@GNUTLS_3_4 3.5.0 diff -Nru gnutls28-3.5.6/debian/patches/dname-api-1-7-Introduced-new-functions-to-allow-multiple-DN-parsin.patch gnutls28-3.5.6/debian/patches/dname-api-1-7-Introduced-new-functions-to-allow-multiple-DN-parsin.patch --- gnutls28-3.5.6/debian/patches/dname-api-1-7-Introduced-new-functions-to-allow-multiple-DN-parsin.patch 1970-01-01 00:00:00.000000000 +0000 +++ gnutls28-3.5.6/debian/patches/dname-api-1-7-Introduced-new-functions-to-allow-multiple-DN-parsin.patch 2016-11-17 07:39:43.000000000 +0000 @@ -0,0 +1,1044 @@ +Description: fix gnutls api breakage on dname order 1/7 +This is yet to be released in gnutls, but breaks some users of gnutls like +libvirt - can very likely be dropped on next gnutls release. +Author: Christian Ehrhardt +Last-Update: 2016-11-17 + +From 70bf8475bb0ab178fe36ee4c601a6cfec8e70a3f Mon Sep 17 00:00:00 2001 +From: Nikos Mavrogiannopoulos +Date: Fri, 11 Nov 2016 16:20:01 +0100 +Subject: [PATCH 01/15] Introduced new functions to allow multiple DN parsing + modes + +The old DN parsing functions are changed to return the original +non-fully compliant with RFC4514 string format, while the new +ones return the compliant string by default. This allows applications +which relied on the previous format to continue functioning without +changes. +--- + lib/includes/gnutls/ocsp.h | 3 + + lib/includes/gnutls/x509.h | 17 +++ + lib/libgnutls.map | 7 + + lib/x509/crl.c | 47 ++++++- + lib/x509/crq.c | 42 +++++- + lib/x509/dn.c | 341 +++++++++++++++++++++++++++------------------ + lib/x509/ocsp.c | 76 ++++++---- + lib/x509/x509.c | 87 +++++++++++- + lib/x509/x509_dn.c | 33 ++++- + lib/x509/x509_int.h | 6 +- + 10 files changed, 483 insertions(+), 176 deletions(-) + +diff --git a/lib/includes/gnutls/ocsp.h b/lib/includes/gnutls/ocsp.h +index 1a96ce8..8ade965 100644 +--- a/lib/includes/gnutls/ocsp.h ++++ b/lib/includes/gnutls/ocsp.h +@@ -211,6 +211,9 @@ int gnutls_ocsp_resp_get_response(gnutls_ocsp_resp_t resp, + int gnutls_ocsp_resp_get_version(gnutls_ocsp_resp_t resp); + int gnutls_ocsp_resp_get_responder(gnutls_ocsp_resp_t resp, + gnutls_datum_t * dn); ++int gnutls_ocsp_resp_get_responder2(gnutls_ocsp_resp_t resp, ++ gnutls_datum_t * dn, ++ unsigned flags); + + /* the raw key ID of the responder */ + #define GNUTLS_OCSP_RESP_ID_KEY 1 +diff --git a/lib/includes/gnutls/x509.h b/lib/includes/gnutls/x509.h +index f665c34..249b22b 100644 +--- a/lib/includes/gnutls/x509.h ++++ b/lib/includes/gnutls/x509.h +@@ -171,6 +171,8 @@ int gnutls_x509_crt_get_issuer_dn(gnutls_x509_crt_t cert, + char *buf, size_t * buf_size); + int gnutls_x509_crt_get_issuer_dn2(gnutls_x509_crt_t cert, + gnutls_datum_t * dn); ++int gnutls_x509_crt_get_issuer_dn3(gnutls_x509_crt_t cert, ++ gnutls_datum_t * dn, unsigned flags); + int gnutls_x509_crt_get_issuer_dn_oid(gnutls_x509_crt_t cert, + unsigned indx, void *oid, + size_t * oid_size); +@@ -178,9 +180,12 @@ int gnutls_x509_crt_get_issuer_dn_by_oid(gnutls_x509_crt_t cert, + const char *oid, unsigned indx, + unsigned int raw_flag, + void *buf, size_t * buf_size); ++ + int gnutls_x509_crt_get_dn(gnutls_x509_crt_t cert, char *buf, + size_t * buf_size); + int gnutls_x509_crt_get_dn2(gnutls_x509_crt_t cert, gnutls_datum_t * dn); ++int gnutls_x509_crt_get_dn3(gnutls_x509_crt_t cert, gnutls_datum_t * dn, unsigned flags); ++ + int gnutls_x509_crt_get_dn_oid(gnutls_x509_crt_t cert, unsigned indx, + void *oid, size_t * oid_size); + int gnutls_x509_crt_get_dn_by_oid(gnutls_x509_crt_t cert, +@@ -663,6 +668,10 @@ int gnutls_x509_crt_get_raw_dn(gnutls_x509_crt_t cert, + */ + int gnutls_x509_rdn_get(const gnutls_datum_t * idn, + char *buf, size_t * sizeof_buf); ++int ++gnutls_x509_rdn_get2(const gnutls_datum_t * idn, ++ gnutls_datum_t *str, unsigned flags); ++ + int gnutls_x509_rdn_get_oid(const gnutls_datum_t * idn, + unsigned indx, void *buf, size_t * sizeof_buf); + +@@ -687,6 +696,10 @@ int gnutls_x509_dn_get_rdn_ava(gnutls_x509_dn_t dn, int irdn, + int iava, gnutls_x509_ava_st * ava); + + int gnutls_x509_dn_get_str(gnutls_x509_dn_t dn, gnutls_datum_t *str); ++ ++#define GNUTLS_X509_DN_FLAG_COMPAT 1 ++int gnutls_x509_dn_get_str2(gnutls_x509_dn_t dn, gnutls_datum_t *str, unsigned flags); ++ + int + gnutls_x509_dn_set_str(gnutls_x509_dn_t dn, const char *str, const char **err); + +@@ -728,6 +741,9 @@ int gnutls_x509_crl_get_issuer_dn(gnutls_x509_crl_t crl, + char *buf, size_t * sizeof_buf); + int gnutls_x509_crl_get_issuer_dn2(gnutls_x509_crl_t crl, + gnutls_datum_t * dn); ++int gnutls_x509_crl_get_issuer_dn3(gnutls_x509_crl_t crl, ++ gnutls_datum_t * dn, unsigned flags); ++ + int gnutls_x509_crl_get_issuer_dn_by_oid(gnutls_x509_crl_t crl, + const char *oid, unsigned indx, + unsigned int raw_flag, +@@ -1231,6 +1247,7 @@ int gnutls_x509_crq_get_private_key_usage_period(gnutls_x509_crq_t + int gnutls_x509_crq_get_dn(gnutls_x509_crq_t crq, char *buf, + size_t * sizeof_buf); + int gnutls_x509_crq_get_dn2(gnutls_x509_crq_t crq, gnutls_datum_t * dn); ++int gnutls_x509_crq_get_dn3(gnutls_x509_crq_t crq, gnutls_datum_t * dn, unsigned flags); + int gnutls_x509_crq_get_dn_oid(gnutls_x509_crq_t crq, unsigned indx, + void *oid, size_t * sizeof_oid); + int gnutls_x509_crq_get_dn_by_oid(gnutls_x509_crq_t crq, +diff --git a/lib/libgnutls.map b/lib/libgnutls.map +index c0186f5..9b947ba 100644 +--- a/lib/libgnutls.map ++++ b/lib/libgnutls.map +@@ -1124,6 +1124,13 @@ GNUTLS_3_4 + gnutls_anon_set_server_known_dh_params; + gnutls_psk_set_server_known_dh_params; + gnutls_x509_crt_check_key_purpose; ++ gnutls_ocsp_resp_get_responder2; ++ gnutls_x509_crt_get_issuer_dn3; ++ gnutls_x509_crt_get_dn3; ++ gnutls_x509_rdn_get2; ++ gnutls_x509_dn_get_str2; ++ gnutls_x509_crl_get_issuer_dn3; ++ gnutls_x509_crq_get_dn3; + local: + *; + }; +diff --git a/lib/x509/crl.c b/lib/x509/crl.c +index 5f0abe3..036703a 100644 +--- a/lib/x509/crl.c ++++ b/lib/x509/crl.c +@@ -1,5 +1,6 @@ + /* +- * Copyright (C) 2003-2012 Free Software Foundation, Inc. ++ * Copyright (C) 2003-2016 Free Software Foundation, Inc. ++ * Copyright (C) 2015-2016 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * +@@ -194,6 +195,9 @@ gnutls_x509_crl_import(gnutls_x509_crl_t crl, + * + * If buf is %NULL then only the size will be filled. + * ++ * This function does not output a fully RFC4514 compliant string, if ++ * that is required see gnutls_x509_crl_get_issuer_dn3(). ++ * + * Returns: %GNUTLS_E_SHORT_MEMORY_BUFFER if the provided buffer is + * not long enough, and in that case the sizeof_buf will be updated + * with the required size, and 0 on success. +@@ -210,7 +214,7 @@ gnutls_x509_crl_get_issuer_dn(const gnutls_x509_crl_t crl, char *buf, + + return _gnutls_x509_parse_dn(crl->crl, + "tbsCertList.issuer.rdnSequence", +- buf, sizeof_buf); ++ buf, sizeof_buf, GNUTLS_X509_DN_FLAG_COMPAT); + } + + /** +@@ -303,6 +307,9 @@ gnutls_x509_crl_get_dn_oid(gnutls_x509_crl_t crl, + * described in RFC4514. The output string will be ASCII or UTF-8 + * encoded, depending on the certificate data. + * ++ * This function does not output a fully RFC4514 compliant string, if ++ * that is required see gnutls_x509_crl_get_issuer_dn3(). ++ * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * +@@ -317,7 +324,41 @@ gnutls_x509_crl_get_issuer_dn2(gnutls_x509_crl_t crl, gnutls_datum_t * dn) + } + + return _gnutls_x509_get_dn(crl->crl, +- "tbsCertList.issuer.rdnSequence", dn); ++ "tbsCertList.issuer.rdnSequence", ++ dn, GNUTLS_X509_DN_FLAG_COMPAT); ++} ++ ++/** ++ * gnutls_x509_crl_get_issuer_dn3: ++ * @crl: should contain a #gnutls_x509_crl_t type ++ * @dn: a pointer to a structure to hold the name ++ * @flags: zero or %GNUTLS_X509_DN_FLAG_COMPAT ++ * ++ * This function will allocate buffer and copy the name of the CRL issuer. ++ * The name will be in the form "C=xxxx,O=yyyy,CN=zzzz" as ++ * described in RFC4514. The output string will be ASCII or UTF-8 ++ * encoded, depending on the certificate data. ++ * ++ * When the flag %GNUTLS_X509_DN_FLAG_COMPAT is specified, the output ++ * format will match the format output by previous to 3.5.6 versions of GnuTLS ++ * which was not not fully RFC4514-compliant. ++ * ++ * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a ++ * negative error value. ++ * ++ * Since: 3.5.7 ++ **/ ++int ++gnutls_x509_crl_get_issuer_dn3(gnutls_x509_crl_t crl, gnutls_datum_t * dn, unsigned flags) ++{ ++ if (crl == NULL) { ++ gnutls_assert(); ++ return GNUTLS_E_INVALID_REQUEST; ++ } ++ ++ return _gnutls_x509_get_dn(crl->crl, ++ "tbsCertList.issuer.rdnSequence", ++ dn, flags); + } + + /** +diff --git a/lib/x509/crq.c b/lib/x509/crq.c +index 6a9ccca..50c3e63 100644 +--- a/lib/x509/crq.c ++++ b/lib/x509/crq.c +@@ -255,6 +255,9 @@ gnutls_x509_crq_get_private_key_usage_period(gnutls_x509_crq_t crq, + * @buf will be ASCII or UTF-8 encoded, depending on the certificate + * data. + * ++ * This function does not output a fully RFC4514 compliant string, if ++ * that is required see gnutls_x509_crq_get_dn3(). ++ * + * Returns: %GNUTLS_E_SHORT_MEMORY_BUFFER if the provided buffer is not + * long enough, and in that case the *@buf_size will be updated with + * the required size. On success 0 is returned. +@@ -269,7 +272,7 @@ gnutls_x509_crq_get_dn(gnutls_x509_crq_t crq, char *buf, size_t * buf_size) + + return _gnutls_x509_parse_dn(crq->crq, + "certificationRequestInfo.subject.rdnSequence", +- buf, buf_size); ++ buf, buf_size, GNUTLS_X509_DN_FLAG_COMPAT); + } + + /** +@@ -282,6 +285,9 @@ gnutls_x509_crq_get_dn(gnutls_x509_crq_t crq, char *buf, size_t * buf_size) + * described in RFC4514. The output string will be ASCII or UTF-8 + * encoded, depending on the certificate data. + * ++ * This function does not output a fully RFC4514 compliant string, if ++ * that is required see gnutls_x509_crq_get_dn3(). ++ * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. and a negative error code on error. + * +@@ -296,7 +302,39 @@ int gnutls_x509_crq_get_dn2(gnutls_x509_crq_t crq, gnutls_datum_t * dn) + + return _gnutls_x509_get_dn(crq->crq, + "certificationRequestInfo.subject.rdnSequence", +- dn); ++ dn, GNUTLS_X509_DN_FLAG_COMPAT); ++} ++ ++/** ++ * gnutls_x509_crq_get_dn3: ++ * @crq: should contain a #gnutls_x509_crq_t type ++ * @dn: a pointer to a structure to hold the name ++ * @flags: zero or %GNUTLS_X509_DN_FLAG_COMPAT ++ * ++ * This function will allocate buffer and copy the name of the Certificate ++ * request. The name will be in the form "C=xxxx,O=yyyy,CN=zzzz" as ++ * described in RFC4514. The output string will be ASCII or UTF-8 ++ * encoded, depending on the certificate data. ++ * ++ * When the flag %GNUTLS_X509_DN_FLAG_COMPAT is specified, the output ++ * format will match the format output by previous to 3.5.6 versions of GnuTLS ++ * which was not not fully RFC4514-compliant. ++ * ++ * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a ++ * negative error value. and a negative error code on error. ++ * ++ * Since: 3.5.7 ++ **/ ++int gnutls_x509_crq_get_dn3(gnutls_x509_crq_t crq, gnutls_datum_t * dn, unsigned flags) ++{ ++ if (crq == NULL) { ++ gnutls_assert(); ++ return GNUTLS_E_INVALID_REQUEST; ++ } ++ ++ return _gnutls_x509_get_dn(crq->crq, ++ "certificationRequestInfo.subject.rdnSequence", ++ dn, flags); + } + + /** +diff --git a/lib/x509/dn.c b/lib/x509/dn.c +index 7209cdb..3395941 100644 +--- a/lib/x509/dn.c ++++ b/lib/x509/dn.c +@@ -33,194 +33,215 @@ + * Name (you need a parser just to read a name in the X.509 protocols!!!) + */ + +-int +-_gnutls_x509_get_dn(ASN1_TYPE asn1_struct, +- const char *asn1_rdn_name, gnutls_datum_t * dn) ++static int append_elements(ASN1_TYPE asn1_struct, const char *asn1_rdn_name, gnutls_buffer_st *str, int k1, unsigned last) + { +- gnutls_buffer_st out_str; +- int k2, k1, result, max_k2; ++ int k2, result, max_k2; ++ int len; ++ uint8_t value[MAX_STRING_LEN]; + char tmpbuffer1[ASN1_MAX_NAME_SIZE]; + char tmpbuffer2[ASN1_MAX_NAME_SIZE]; + char tmpbuffer3[ASN1_MAX_NAME_SIZE]; +- uint8_t value[MAX_STRING_LEN]; +- gnutls_datum_t td = { NULL, 0 }, tvd = { +- NULL, 0}; + const char *ldap_desc; + char oid[MAX_OID_SIZE]; +- int len; ++ gnutls_datum_t td = { NULL, 0 }; ++ gnutls_datum_t tvd = { NULL, 0 }; + +- _gnutls_buffer_init(&out_str); ++ /* create a string like "tbsCertList.issuer.rdnSequence.?1" ++ */ ++ if (asn1_rdn_name[0] != 0) ++ snprintf(tmpbuffer1, sizeof(tmpbuffer1), "%s.?%u", ++ asn1_rdn_name, k1); ++ else ++ snprintf(tmpbuffer1, sizeof(tmpbuffer1), "?%u", ++ k1); + +- result = asn1_number_of_elements(asn1_struct, asn1_rdn_name, &k1); +- if (result != ASN1_SUCCESS) { ++ len = sizeof(value) - 1; ++ result = ++ asn1_read_value(asn1_struct, tmpbuffer1, value, &len); ++ ++ if (result != ASN1_VALUE_NOT_FOUND && result != ASN1_SUCCESS) { /* expected */ + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + +- if (k1 == 0) { ++ k2 = 0; ++ ++ result = asn1_number_of_elements(asn1_struct, tmpbuffer1, &max_k2); ++ if (result != ASN1_SUCCESS) { + gnutls_assert(); +- result = GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; ++ result = _gnutls_asn2err(result); + goto cleanup; + } + +- while (k1 > 0) { +- /* create a string like "tbsCertList.issuer.rdnSequence.?1" +- */ +- if (asn1_rdn_name[0] != 0) +- snprintf(tmpbuffer1, sizeof(tmpbuffer1), "%s.?%u", +- asn1_rdn_name, k1); ++ do { /* Move to the attibute type and values ++ */ ++ k2++; ++ ++ if (tmpbuffer1[0] != 0) ++ snprintf(tmpbuffer2, sizeof(tmpbuffer2), ++ "%s.?%u", tmpbuffer1, k2); + else +- snprintf(tmpbuffer1, sizeof(tmpbuffer1), "?%u", +- k1); +- k1--; ++ snprintf(tmpbuffer2, sizeof(tmpbuffer2), ++ "?%u", k2); ++ ++ /* Try to read the RelativeDistinguishedName attributes. ++ */ + + len = sizeof(value) - 1; + result = +- asn1_read_value(asn1_struct, tmpbuffer1, value, &len); ++ asn1_read_value(asn1_struct, tmpbuffer2, value, ++ &len); + ++ if (result == ASN1_ELEMENT_NOT_FOUND) ++ break; + if (result != ASN1_VALUE_NOT_FOUND && result != ASN1_SUCCESS) { /* expected */ + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + +- k2 = 0; ++ /* Read the OID ++ */ ++ _gnutls_str_cpy(tmpbuffer3, sizeof(tmpbuffer3), ++ tmpbuffer2); ++ _gnutls_str_cat(tmpbuffer3, sizeof(tmpbuffer3), ++ ".type"); ++ ++ len = sizeof(oid) - 1; ++ result = ++ asn1_read_value(asn1_struct, tmpbuffer3, oid, ++ &len); + +- result = asn1_number_of_elements(asn1_struct, tmpbuffer1, &max_k2); +- if (result != ASN1_SUCCESS) { ++ if (result == ASN1_ELEMENT_NOT_FOUND) ++ break; ++ else if (result != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + +- do { /* Move to the attibute type and values +- */ +- k2++; +- +- if (tmpbuffer1[0] != 0) +- snprintf(tmpbuffer2, sizeof(tmpbuffer2), +- "%s.?%u", tmpbuffer1, k2); +- else +- snprintf(tmpbuffer2, sizeof(tmpbuffer2), +- "?%u", k2); ++ /* Read the Value ++ */ ++ _gnutls_str_cpy(tmpbuffer3, sizeof(tmpbuffer3), ++ tmpbuffer2); ++ _gnutls_str_cat(tmpbuffer3, sizeof(tmpbuffer3), ++ ".value"); + +- /* Try to read the RelativeDistinguishedName attributes. +- */ ++ len = 0; + +- len = sizeof(value) - 1; +- result = +- asn1_read_value(asn1_struct, tmpbuffer2, value, +- &len); ++ result = ++ _gnutls_x509_read_value(asn1_struct, ++ tmpbuffer3, &tvd); ++ if (result < 0) { ++ gnutls_assert(); ++ goto cleanup; ++ } ++#define STR_APPEND(y) if ((result=_gnutls_buffer_append_str( str, y)) < 0) { \ ++ gnutls_assert(); \ ++ goto cleanup; \ ++} ++#define DATA_APPEND(x,y) if ((result=_gnutls_buffer_append_data( str, x,y)) < 0) { \ ++ gnutls_assert(); \ ++ goto cleanup; \ ++} ++ /* The encodings of adjoining RelativeDistinguishedNames are separated ++ * by a comma character (',' ASCII 44). ++ */ + +- if (result == ASN1_ELEMENT_NOT_FOUND) +- break; +- if (result != ASN1_VALUE_NOT_FOUND && result != ASN1_SUCCESS) { /* expected */ +- gnutls_assert(); +- result = _gnutls_asn2err(result); +- goto cleanup; +- } ++ ldap_desc = ++ gnutls_x509_dn_oid_name(oid, ++ GNUTLS_X509_DN_OID_RETURN_OID); + +- /* Read the OID +- */ +- _gnutls_str_cpy(tmpbuffer3, sizeof(tmpbuffer3), +- tmpbuffer2); +- _gnutls_str_cat(tmpbuffer3, sizeof(tmpbuffer3), +- ".type"); ++ STR_APPEND(ldap_desc); ++ STR_APPEND("="); + +- len = sizeof(oid) - 1; +- result = +- asn1_read_value(asn1_struct, tmpbuffer3, oid, +- &len); ++ result = ++ _gnutls_x509_dn_to_string(oid, tvd.data, ++ tvd.size, &td); ++ if (result < 0) { ++ gnutls_assert(); ++ _gnutls_debug_log ++ ("Cannot parse OID: '%s' with value '%s'\n", ++ oid, _gnutls_bin2hex(tvd.data, ++ tvd.size, ++ tmpbuffer3, ++ sizeof ++ (tmpbuffer3), ++ NULL)); ++ goto cleanup; ++ } + +- if (result == ASN1_ELEMENT_NOT_FOUND) +- break; +- else if (result != ASN1_SUCCESS) { +- gnutls_assert(); +- result = _gnutls_asn2err(result); +- goto cleanup; +- } ++ DATA_APPEND(td.data, td.size); ++ _gnutls_free_datum(&td); ++ _gnutls_free_datum(&tvd); + +- /* Read the Value +- */ +- _gnutls_str_cpy(tmpbuffer3, sizeof(tmpbuffer3), +- tmpbuffer2); +- _gnutls_str_cat(tmpbuffer3, sizeof(tmpbuffer3), +- ".value"); ++ /* Where there is a multi-valued RDN, the outputs from adjoining ++ * AttributeTypeAndValues are separated by a plus ('+' ASCII 43) ++ * character. ++ */ ++ if (k2 < max_k2) { ++ STR_APPEND("+"); ++ } else if (!last) { ++ STR_APPEND(","); ++ } ++ } ++ while (1); + +- len = 0; ++ result = 0; + +- result = +- _gnutls_x509_read_value(asn1_struct, +- tmpbuffer3, &tvd); +- if (result < 0) { +- gnutls_assert(); +- goto cleanup; +- } +-#define STR_APPEND(y) if ((result=_gnutls_buffer_append_str( &out_str, y)) < 0) { \ +- gnutls_assert(); \ +- goto cleanup; \ +-} +-#define DATA_APPEND(x,y) if ((result=_gnutls_buffer_append_data( &out_str, x,y)) < 0) { \ +- gnutls_assert(); \ +- goto cleanup; \ ++ cleanup: ++ _gnutls_free_datum(&td); ++ _gnutls_free_datum(&tvd); ++ return result; + } +- /* The encodings of adjoining RelativeDistinguishedNames are separated +- * by a comma character (',' ASCII 44). +- */ + +- ldap_desc = +- gnutls_x509_dn_oid_name(oid, +- GNUTLS_X509_DN_OID_RETURN_OID); ++int ++_gnutls_x509_get_dn(ASN1_TYPE asn1_struct, ++ const char *asn1_rdn_name, gnutls_datum_t * dn, ++ unsigned flags) ++{ ++ gnutls_buffer_st out_str; ++ int i, k1, result; + +- STR_APPEND(ldap_desc); +- STR_APPEND("="); ++ _gnutls_buffer_init(&out_str); + +- result = +- _gnutls_x509_dn_to_string(oid, tvd.data, +- tvd.size, &td); ++ result = asn1_number_of_elements(asn1_struct, asn1_rdn_name, &k1); ++ if (result != ASN1_SUCCESS) { ++ gnutls_assert(); ++ result = _gnutls_asn2err(result); ++ goto cleanup; ++ } ++ ++ if (k1 == 0) { ++ gnutls_assert(); ++ result = GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; ++ goto cleanup; ++ } ++ ++ if (flags & GNUTLS_X509_DN_FLAG_COMPAT) { ++ for (i=0;i 0) { +- STR_APPEND(","); ++ } ++ } else { ++ while (k1 > 0) { ++ result = append_elements(asn1_struct, asn1_rdn_name, &out_str, k1, k1==1?1:0); ++ if (result < 0) { ++ gnutls_assert(); ++ goto cleanup; + } +- ++ k1--; + } +- while (1); + } + +- result = _gnutls_buffer_to_datum(&out_str, dn, 1); +- if (result < 0) +- gnutls_assert(); +- +- goto cleanup1; ++ return _gnutls_buffer_to_datum(&out_str, dn, 1); + +- cleanup: ++ cleanup: + _gnutls_buffer_clear(&out_str); +- cleanup1: +- _gnutls_free_datum(&td); +- _gnutls_free_datum(&tvd); + return result; + + } +@@ -235,7 +256,7 @@ _gnutls_x509_get_dn(ASN1_TYPE asn1_struct, + int + _gnutls_x509_parse_dn(ASN1_TYPE asn1_struct, + const char *asn1_rdn_name, char *buf, +- size_t * buf_size) ++ size_t * buf_size, unsigned flags) + { + int ret; + gnutls_datum_t dn = {NULL, 0}; +@@ -250,7 +271,7 @@ _gnutls_x509_parse_dn(ASN1_TYPE asn1_struct, + else + *buf_size = 0; + +- ret = _gnutls_x509_get_dn(asn1_struct, asn1_rdn_name, &dn); ++ ret = _gnutls_x509_get_dn(asn1_struct, asn1_rdn_name, &dn, flags); + if (ret < 0) + return gnutls_assert_val(ret); + +@@ -760,6 +781,9 @@ _gnutls_x509_set_dn_oid(ASN1_TYPE asn1_struct, + * name will be in the form "C=xxxx,O=yyyy,CN=zzzz" as described in + * RFC4514. + * ++ * This function does not output a fully RFC4514 compliant string, if ++ * that is required see gnutls_x509_rdn_get2(). ++ * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, or + * %GNUTLS_E_SHORT_MEMORY_BUFFER is returned and *@buf_size is + * updated if the provided buffer is not long enough, otherwise a +@@ -796,7 +820,56 @@ gnutls_x509_rdn_get(const gnutls_datum_t * idn, + return _gnutls_asn2err(result); + } + +- result = _gnutls_x509_parse_dn(dn, "rdnSequence", buf, buf_size); ++ result = _gnutls_x509_parse_dn(dn, "rdnSequence", buf, buf_size, GNUTLS_X509_DN_FLAG_COMPAT); ++ ++ asn1_delete_structure(&dn); ++ return result; ++ ++} ++ ++/** ++ * gnutls_x509_rdn_get2: ++ * @idn: should contain a DER encoded RDN sequence ++ * @buf: a pointer to a structure to hold the peer's name ++ * @buf_size: holds the size of @buf ++ * @flags: ++ * ++ * This function will return the name of the given RDN sequence. The ++ * name will be in the form "C=xxxx,O=yyyy,CN=zzzz" as described in ++ * RFC4514. ++ * ++ * When the flag %GNUTLS_X509_DN_FLAG_COMPAT is specified, the output ++ * format will match the format output by previous to 3.5.6 versions of GnuTLS ++ * which was not not fully RFC4514-compliant. ++ * ++ * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, or ++ * %GNUTLS_E_SHORT_MEMORY_BUFFER is returned and *@buf_size is ++ * updated if the provided buffer is not long enough, otherwise a ++ * negative error value. ++ **/ ++int ++gnutls_x509_rdn_get2(const gnutls_datum_t * idn, ++ gnutls_datum_t *str, unsigned flags) ++{ ++ int result; ++ ASN1_TYPE dn = ASN1_TYPE_EMPTY; ++ ++ if ((result = ++ asn1_create_element(_gnutls_get_pkix(), ++ "PKIX1.Name", &dn)) != ASN1_SUCCESS) { ++ gnutls_assert(); ++ return _gnutls_asn2err(result); ++ } ++ ++ result = _asn1_strict_der_decode(&dn, idn->data, idn->size, NULL); ++ if (result != ASN1_SUCCESS) { ++ /* couldn't decode DER */ ++ gnutls_assert(); ++ asn1_delete_structure(&dn); ++ return _gnutls_asn2err(result); ++ } ++ ++ result = _gnutls_x509_get_dn(dn, "rdnSequence", str, flags); + + asn1_delete_structure(&dn); + return result; +diff --git a/lib/x509/ocsp.c b/lib/x509/ocsp.c +index eb41fcb..92f0370 100644 +--- a/lib/x509/ocsp.c ++++ b/lib/x509/ocsp.c +@@ -1103,16 +1103,58 @@ int gnutls_ocsp_resp_get_version(gnutls_ocsp_resp_t resp) + * The caller needs to deallocate memory by calling gnutls_free() on + * @dn->data. + * ++ * This function does not output a fully RFC4514 compliant string, if ++ * that is required see gnutls_ocsp_resp_get_responder2(). ++ * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a +- * negative error code is returned. ++ * negative error code is returned. When no data exist it will ++ * return success and set @dn elements to zero. + **/ + int + gnutls_ocsp_resp_get_responder(gnutls_ocsp_resp_t resp, + gnutls_datum_t * dn) + { + int ret; +- size_t l = 0; + ++ ret = gnutls_ocsp_resp_get_responder2(resp, dn, GNUTLS_X509_DN_FLAG_COMPAT); ++ if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { ++ dn->data = NULL; ++ dn->size = 0; ++ return 0; /* for backwards compatibility */ ++ } ++ ++ return ret; ++} ++ ++/** ++ * gnutls_ocsp_resp_get_responder2: ++ * @resp: should contain a #gnutls_ocsp_resp_t type ++ * @dn: newly allocated buffer with name ++ * @flags: zero or %GNUTLS_X509_DN_FLAG_COMPAT ++ * ++ * This function will extract the name of the Basic OCSP Response in ++ * the provided buffer. The name will be in the form ++ * "C=xxxx,O=yyyy,CN=zzzz" as described in RFC2253. The output string ++ * will be ASCII or UTF-8 encoded, depending on the certificate data. ++ * ++ * If the responder ID is not a name but a hash, this function ++ * will return zero and the @dn elements will be set to %NULL. ++ * ++ * The caller needs to deallocate memory by calling gnutls_free() on ++ * @dn->data. ++ * ++ * When the flag %GNUTLS_X509_DN_FLAG_COMPAT is specified, the output ++ * format will match the format output by previous to 3.5.6 versions of GnuTLS ++ * which was not not fully RFC4514-compliant. ++ * ++ * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a ++ * negative error code is returned. When no data exist it will return ++ * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE. ++ **/ ++int ++gnutls_ocsp_resp_get_responder2(gnutls_ocsp_resp_t resp, ++ gnutls_datum_t * dn, unsigned flags) ++{ + if (resp == NULL || dn == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; +@@ -1121,33 +1163,9 @@ gnutls_ocsp_resp_get_responder(gnutls_ocsp_resp_t resp, + dn->data = NULL; + dn->size = 0; + +- ret = _gnutls_x509_parse_dn +- (resp->basicresp, "tbsResponseData.responderID.byName", +- NULL, &l); +- if (ret != GNUTLS_E_SHORT_MEMORY_BUFFER) { +- if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) +- return 0; /* for backwards compatibility */ +- gnutls_assert(); +- return ret; +- } +- +- dn->data = gnutls_malloc(l); +- if (dn->data == NULL) { +- gnutls_assert(); +- return GNUTLS_E_MEMORY_ERROR; +- } +- +- ret = _gnutls_x509_parse_dn +- (resp->basicresp, "tbsResponseData.responderID.byName", +- (char *) dn->data, &l); +- if (ret != GNUTLS_E_SUCCESS) { +- gnutls_assert(); +- return ret; +- } +- +- dn->size = l; +- +- return GNUTLS_E_SUCCESS; ++ return _gnutls_x509_get_dn(resp->basicresp, ++ "tbsResponseData.responderID.byName", ++ dn, flags); + } + + /** +diff --git a/lib/x509/x509.c b/lib/x509/x509.c +index a9adff2..043d38b 100644 +--- a/lib/x509/x509.c ++++ b/lib/x509/x509.c +@@ -482,6 +482,9 @@ gnutls_x509_crt_import(gnutls_x509_crt_t cert, + * + * If @buf is null then only the size will be filled. + * ++ * This function does not output a fully RFC4514 compliant string, if ++ * that is required see gnutls_x509_crt_get_issuer_dn3(). ++ * + * Returns: %GNUTLS_E_SHORT_MEMORY_BUFFER if the provided buffer is not + * long enough, and in that case the @buf_size will be updated + * with the required size. %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE if +@@ -498,7 +501,7 @@ gnutls_x509_crt_get_issuer_dn(gnutls_x509_crt_t cert, char *buf, + + return _gnutls_x509_parse_dn(cert->cert, + "tbsCertificate.issuer.rdnSequence", +- buf, buf_size); ++ buf, buf_size, GNUTLS_X509_DN_FLAG_COMPAT); + } + + /** +@@ -511,6 +514,9 @@ gnutls_x509_crt_get_issuer_dn(gnutls_x509_crt_t cert, char *buf, + * described in RFC4514. The output string will be ASCII or UTF-8 + * encoded, depending on the certificate data. + * ++ * This function does not output a fully RFC4514 compliant string, if ++ * that is required see gnutls_x509_crt_get_issuer_dn3(). ++ * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * +@@ -526,7 +532,40 @@ gnutls_x509_crt_get_issuer_dn2(gnutls_x509_crt_t cert, gnutls_datum_t * dn) + + return _gnutls_x509_get_dn(cert->cert, + "tbsCertificate.issuer.rdnSequence", +- dn); ++ dn, GNUTLS_X509_DN_FLAG_COMPAT); ++} ++ ++/** ++ * gnutls_x509_crt_get_issuer_dn3: ++ * @cert: should contain a #gnutls_x509_crt_t type ++ * @dn: a pointer to a structure to hold the name ++ * @flags: zero or %GNUTLS_X509_DN_FLAG_COMPAT ++ * ++ * This function will allocate buffer and copy the name of issuer of the Certificate. ++ * The name will be in the form "C=xxxx,O=yyyy,CN=zzzz" as ++ * described in RFC4514. The output string will be ASCII or UTF-8 ++ * encoded, depending on the certificate data. ++ * ++ * When the flag %GNUTLS_X509_DN_FLAG_COMPAT is specified, the output ++ * format will match the format output by previous to 3.5.6 versions of GnuTLS ++ * which was not not fully RFC4514-compliant. ++ * ++ * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a ++ * negative error value. ++ * ++ * Since: 3.5.7 ++ **/ ++int ++gnutls_x509_crt_get_issuer_dn3(gnutls_x509_crt_t cert, gnutls_datum_t *dn, unsigned flags) ++{ ++ if (cert == NULL) { ++ gnutls_assert(); ++ return GNUTLS_E_INVALID_REQUEST; ++ } ++ ++ return _gnutls_x509_get_dn(cert->cert, ++ "tbsCertificate.issuer.rdnSequence", ++ dn, flags); + } + + /** +@@ -627,6 +666,9 @@ gnutls_x509_crt_get_issuer_dn_oid(gnutls_x509_crt_t cert, + * + * If @buf is null then only the size will be filled. + * ++ * This function does not output a fully RFC4514 compliant string, if ++ * that is required see gnutls_x509_crt_get_dn3(). ++ * + * Returns: %GNUTLS_E_SHORT_MEMORY_BUFFER if the provided buffer is not + * long enough, and in that case the @buf_size will be updated + * with the required size. %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE if +@@ -643,7 +685,7 @@ gnutls_x509_crt_get_dn(gnutls_x509_crt_t cert, char *buf, + + return _gnutls_x509_parse_dn(cert->cert, + "tbsCertificate.subject.rdnSequence", +- buf, buf_size); ++ buf, buf_size, GNUTLS_X509_DN_FLAG_COMPAT); + } + + /** +@@ -656,6 +698,9 @@ gnutls_x509_crt_get_dn(gnutls_x509_crt_t cert, char *buf, + * described in RFC4514. The output string will be ASCII or UTF-8 + * encoded, depending on the certificate data. + * ++ * This function does not output a fully RFC4514 compliant string, if ++ * that is required see gnutls_x509_crt_get_dn3(). ++ * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * +@@ -670,7 +715,39 @@ int gnutls_x509_crt_get_dn2(gnutls_x509_crt_t cert, gnutls_datum_t * dn) + + return _gnutls_x509_get_dn(cert->cert, + "tbsCertificate.subject.rdnSequence", +- dn); ++ dn, GNUTLS_X509_DN_FLAG_COMPAT); ++} ++ ++/** ++ * gnutls_x509_crt_get_dn3: ++ * @cert: should contain a #gnutls_x509_crt_t type ++ * @dn: a pointer to a structure to hold the name ++ * @flags: zero or %GNUTLS_X509_DN_FLAG_COMPAT ++ * ++ * This function will allocate buffer and copy the name of the Certificate. ++ * The name will be in the form "C=xxxx,O=yyyy,CN=zzzz" as ++ * described in RFC4514. The output string will be ASCII or UTF-8 ++ * encoded, depending on the certificate data. ++ * ++ * When the flag %GNUTLS_X509_DN_FLAG_COMPAT is specified, the output ++ * format will match the format output by previous to 3.5.6 versions of GnuTLS ++ * which was not not fully RFC4514-compliant. ++ * ++ * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a ++ * negative error value. ++ * ++ * Since: 3.5.7 ++ **/ ++int gnutls_x509_crt_get_dn3(gnutls_x509_crt_t cert, gnutls_datum_t *dn, unsigned flags) ++{ ++ if (cert == NULL) { ++ gnutls_assert(); ++ return GNUTLS_E_INVALID_REQUEST; ++ } ++ ++ return _gnutls_x509_get_dn(cert->cert, ++ "tbsCertificate.subject.rdnSequence", ++ dn, flags); + } + + /** +@@ -1461,7 +1538,7 @@ _gnutls_parse_general_name2(ASN1_TYPE src, const char *src_name, + } + } else if (type == GNUTLS_SAN_DN) { + _gnutls_str_cat(nptr, sizeof(nptr), ".directoryName"); +- ret = _gnutls_x509_get_dn(src, nptr, dname); ++ ret = _gnutls_x509_get_dn(src, nptr, dname, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; +diff --git a/lib/x509/x509_dn.c b/lib/x509/x509_dn.c +index a64ca3e..8936a23 100644 +--- a/lib/x509/x509_dn.c ++++ b/lib/x509/x509_dn.c +@@ -662,5 +662,36 @@ gnutls_x509_dn_get_str(gnutls_x509_dn_t dn, gnutls_datum_t *str) + return GNUTLS_E_INVALID_REQUEST; + } + +- return _gnutls_x509_get_dn(dn->asn, "rdnSequence", str); ++ return _gnutls_x509_get_dn(dn->asn, "rdnSequence", str, GNUTLS_X509_DN_FLAG_COMPAT); ++} ++ ++/** ++ * gnutls_x509_dn_get_str: ++ * @dn: a pointer to DN ++ * @str: a datum that will hold the name ++ * @flags: zero or %GNUTLS_X509_DN_FLAG_COMPAT ++ * ++ * This function will allocate buffer and copy the name in the provided DN. ++ * The name will be in the form "C=xxxx,O=yyyy,CN=zzzz" as ++ * described in RFC4514. The output string will be ASCII or UTF-8 ++ * encoded, depending on the certificate data. ++ * ++ * When the flag %GNUTLS_X509_DN_FLAG_COMPAT is specified, the output ++ * format will match the format output by previous to 3.5.6 versions of GnuTLS ++ * which was not not fully RFC4514-compliant. ++ * ++ * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a ++ * negative error value. ++ * ++ * Since: 3.5.7 ++ **/ ++int ++gnutls_x509_dn_get_str2(gnutls_x509_dn_t dn, gnutls_datum_t *str, unsigned flags) ++{ ++ if (dn == NULL) { ++ gnutls_assert(); ++ return GNUTLS_E_INVALID_REQUEST; ++ } ++ ++ return _gnutls_x509_get_dn(dn->asn, "rdnSequence", str, flags); + } +diff --git a/lib/x509/x509_int.h b/lib/x509/x509_int.h +index 25e013f..4fe0e3d 100644 +--- a/lib/x509/x509_int.h ++++ b/lib/x509/x509_int.h +@@ -165,11 +165,13 @@ int _gnutls_x509_pkix_sign(ASN1_TYPE src, const char *src_name, + + int _gnutls_x509_parse_dn(ASN1_TYPE asn1_struct, + const char *asn1_rdn_name, char *buf, +- size_t * sizeof_buf); ++ size_t * sizeof_buf, ++ unsigned flags); + + int + _gnutls_x509_get_dn(ASN1_TYPE asn1_struct, +- const char *asn1_rdn_name, gnutls_datum_t * dn); ++ const char *asn1_rdn_name, gnutls_datum_t * dn, ++ unsigned flags); + + int + _gnutls_x509_parse_dn_oid(ASN1_TYPE asn1_struct, +-- +2.7.4 + diff -Nru gnutls28-3.5.6/debian/patches/dname-api-2-7-_gnutls_x509_get_dn-when-no-data-ensure-we-return-GN.patch gnutls28-3.5.6/debian/patches/dname-api-2-7-_gnutls_x509_get_dn-when-no-data-ensure-we-return-GN.patch --- gnutls28-3.5.6/debian/patches/dname-api-2-7-_gnutls_x509_get_dn-when-no-data-ensure-we-return-GN.patch 1970-01-01 00:00:00.000000000 +0000 +++ gnutls28-3.5.6/debian/patches/dname-api-2-7-_gnutls_x509_get_dn-when-no-data-ensure-we-return-GN.patch 2016-11-17 07:39:43.000000000 +0000 @@ -0,0 +1,39 @@ +Description: fix gnutls api breakage on dname order 2/7 +This is yet to be released in gnutls, but breaks some users of gnutls like +libvirt - can very likely be dropped on next gnutls release. +Author: Christian Ehrhardt +Last-Update: 2016-11-17 + +From 1fc2cb4e1bfa8300b532650ce1d899a836a6a813 Mon Sep 17 00:00:00 2001 +From: Nikos Mavrogiannopoulos +Date: Mon, 14 Nov 2016 13:31:34 +0100 +Subject: [PATCH 02/15] _gnutls_x509_get_dn: when no data ensure we return + GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE + +This aligns with the previous (prior to RFC4514 improvements) behavior of the function. +--- + lib/x509/dn.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/lib/x509/dn.c b/lib/x509/dn.c +index 3395941..b1b8a54 100644 +--- a/lib/x509/dn.c ++++ b/lib/x509/dn.c +@@ -208,8 +208,12 @@ _gnutls_x509_get_dn(ASN1_TYPE asn1_struct, + + result = asn1_number_of_elements(asn1_struct, asn1_rdn_name, &k1); + if (result != ASN1_SUCCESS) { +- gnutls_assert(); +- result = _gnutls_asn2err(result); ++ if (result == ASN1_ELEMENT_NOT_FOUND || result == ASN1_VALUE_NOT_FOUND) { ++ result = gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); ++ } else { ++ gnutls_assert(); ++ result = _gnutls_asn2err(result); ++ } + goto cleanup; + } + +-- +2.7.4 + diff -Nru gnutls28-3.5.6/debian/patches/dname-api-3-7-tests-account-for-the-strict-RFC4514-compliance-reve.patch gnutls28-3.5.6/debian/patches/dname-api-3-7-tests-account-for-the-strict-RFC4514-compliance-reve.patch --- gnutls28-3.5.6/debian/patches/dname-api-3-7-tests-account-for-the-strict-RFC4514-compliance-reve.patch 1970-01-01 00:00:00.000000000 +0000 +++ gnutls28-3.5.6/debian/patches/dname-api-3-7-tests-account-for-the-strict-RFC4514-compliance-reve.patch 2016-11-17 07:39:43.000000000 +0000 @@ -0,0 +1,156 @@ +Description: fix gnutls api breakage on dname order 3/7 +This is yet to be released in gnutls, but breaks some users of gnutls like +libvirt - can very likely be dropped on next gnutls release. +Author: Christian Ehrhardt +Last-Update: 2016-11-17 + +From ef9c82b20b278f23e637e7278f378cbdc473efd5 Mon Sep 17 00:00:00 2001 +From: Nikos Mavrogiannopoulos +Date: Mon, 14 Nov 2016 09:52:16 +0100 +Subject: [PATCH 07/15] tests: account for the strict RFC4514 compliance + reversal + +Test the new functions only for the strict RFC4514 compliance to +output strings, and test the old functions for the legacy format. +--- + tests/dn.c | 21 ++++++++++++++++++++- + tests/x509-dn-decode.c | 31 ++++++++++++++++++++++++++++--- + 2 files changed, 48 insertions(+), 4 deletions(-) + +diff --git a/tests/dn.c b/tests/dn.c +index 7a2177b..a242d37 100644 +--- a/tests/dn.c ++++ b/tests/dn.c +@@ -117,15 +117,34 @@ void doit(void) + if (ret < 0) + fail("get_subject %d\n", ret); + ++ /* test the original function behavior */ + ret = gnutls_x509_dn_get_str(xdn, &strdn); + if (ret < 0) + fail("gnutls_x509_dn_get_str %d\n", ret); + +- if (strdn.size != 44 || strcmp((char*)strdn.data, "EMAIL=simon@josefsson.org,CN=CAcert WoT User") != 0) { ++ if (strdn.size != 44 || strcmp((char*)strdn.data, "CN=CAcert WoT User,EMAIL=simon@josefsson.org") != 0) { + fail("gnutls_x509_dn_get_str string comparison failed: '%s'/%d\n", strdn.data, strdn.size); + } + gnutls_free(strdn.data); + ++ /* test the new function behavior */ ++ ret = gnutls_x509_dn_get_str2(xdn, &strdn, 0); ++ if (ret < 0) ++ fail("gnutls_x509_dn_get_str2 %d\n", ret); ++ if (strdn.size != 44 || strcmp((char*)strdn.data, "EMAIL=simon@josefsson.org,CN=CAcert WoT User") != 0) { ++ fail("gnutls_x509_dn_get_str2 string comparison failed: '%s'/%d\n", strdn.data, strdn.size); ++ } ++ gnutls_free(strdn.data); ++ ++ /* test the new/compat function behavior */ ++ ret = gnutls_x509_dn_get_str2(xdn, &strdn, GNUTLS_X509_DN_FLAG_COMPAT); ++ if (ret < 0) ++ fail("gnutls_x509_dn_get_str2 %d\n", ret); ++ if (strdn.size != 44 || strcmp((char*)strdn.data, "CN=CAcert WoT User,EMAIL=simon@josefsson.org") != 0) { ++ fail("gnutls_x509_dn_get_str2 string comparison failed: '%s'/%d\n", strdn.data, strdn.size); ++ } ++ gnutls_free(strdn.data); ++ + if (debug) { + printf("Subject:\n"); + print_dn(xdn); +diff --git a/tests/x509-dn-decode.c b/tests/x509-dn-decode.c +index 17e1aac..76c942f 100644 +--- a/tests/x509-dn-decode.c ++++ b/tests/x509-dn-decode.c +@@ -34,7 +34,7 @@ + + #include "utils.h" + +-static void decode(const char *test_name, const gnutls_datum_t *raw, const char *expected) ++static void decode(const char *test_name, const gnutls_datum_t *raw, const char *expected, const char *expected_compat) + { + int ret; + gnutls_datum_t out; +@@ -50,7 +50,7 @@ static void decode(const char *test_name, const gnutls_datum_t *raw, const char + test_fail("%s\n", gnutls_strerror(ret)); + } + +- ret = gnutls_x509_dn_get_str(dn, &out); ++ ret = gnutls_x509_dn_get_str2(dn, &out, 0); + if (ret < 0) { + test_fail("%s\n", gnutls_strerror(ret)); + } +@@ -68,6 +68,26 @@ static void decode(const char *test_name, const gnutls_datum_t *raw, const char + } + + gnutls_free(out.data); ++ ++ /* compat mode */ ++ ret = gnutls_x509_dn_get_str(dn, &out); ++ if (ret < 0) { ++ test_fail("%s\n", gnutls_strerror(ret)); ++ } ++ ++ if (out.size != strlen(expected_compat)) { ++ test_fail("The length of the output (%d) doesn't match the expected (%d)\n", (int)out.size, (int)strlen(expected_compat)); ++ } ++ ++ if (memcmp(out.data, expected_compat, out.size) != 0) { ++ test_fail("The string output (%s) doesn't match the expected (%s)\n", (char*)out.data, expected_compat); ++ } ++ ++ if (out.data[out.size] != 0) { ++ test_fail("The string output isn't null terminated\n"); ++ } ++ ++ gnutls_free(out.data); + gnutls_x509_dn_deinit(dn); + + return; +@@ -139,6 +159,7 @@ struct tests_st { + const char *name; + gnutls_datum_t raw; + const char *str; ++ const char *compat_str; /* GNUTLS_X509_DN_FLAG_COMPAT */ + unsigned can_encode; + }; + +@@ -146,23 +167,27 @@ struct tests_st tests[] = { + { + .name = "simple DN", + .str = "C=GR,ST=Attiki,O=Koko inc.,OU=sleeping dept.,UID=clauper,CN=Cindy Lauper", ++ .compat_str = "CN=Cindy Lauper,UID=clauper,OU=sleeping dept.,O=Koko inc.,ST=Attiki,C=GR", + .raw = {(void*)"\x30\x7b\x31\x15\x30\x13\x06\x03\x55\x04\x03\x13\x0c\x43\x69\x6e\x64\x79\x20\x4c\x61\x75\x70\x65\x72\x31\x17\x30\x15\x06\x0a\x09\x92\x26\x89\x93\xf2\x2c\x64\x01\x01\x13\x07\x63\x6c\x61\x75\x70\x65\x72\x31\x17\x30\x15\x06\x03\x55\x04\x0b\x13\x0e\x73\x6c\x65\x65\x70\x69\x6e\x67\x20\x64\x65\x70\x74\x2e\x31\x12\x30\x10\x06\x03\x55\x04\x0a\x13\x09\x4b\x6f\x6b\x6f\x20\x69\x6e\x63\x2e\x31\x0f\x30\x0d\x06\x03\x55\x04\x08\x13\x06\x41\x74\x74\x69\x6b\x69\x31\x0b\x30\x09\x06\x03\x55\x04\x06\x13\x02\x47\x52", 125}, + .can_encode = 1 + }, + { + .name = "UTF8 DN", + .str = "C=GR,ST=Αττική,O=Μεγάλη εταιρία,CN=🐨", ++ .compat_str = "CN=🐨,O=Μεγάλη εταιρία,ST=Αττική,C=GR", + .raw = {(void*)"\x30\x59\x31\x0d\x30\x0b\x06\x03\x55\x04\x03\x0c\x04\xf0\x9f\x90\xa8\x31\x24\x30\x22\x06\x03\x55\x04\x0a\x0c\x1b\xce\x9c\xce\xb5\xce\xb3\xce\xac\xce\xbb\xce\xb7\x20\xce\xb5\xcf\x84\xce\xb1\xce\xb9\xcf\x81\xce\xaf\xce\xb1\x31\x15\x30\x13\x06\x03\x55\x04\x08\x0c\x0c\xce\x91\xcf\x84\xcf\x84\xce\xb9\xce\xba\xce\xae\x31\x0b\x30\x09\x06\x03\x55\x04\x06\x13\x02\x47\x52", 91}, + .can_encode = 1 + }, + { + .name = "combo DN", ++ .compat_str = "C=\\,\\ ,OU=\\ X\\ ,CN=\\#XXX", + .str = "CN=\\#XXX,OU=\\ X\\ ,C=\\,\\ ", + .raw = {(void*)"\x30\x2b\x31\x0b\x30\x09\x06\x03\x55\x04\x06\x13\x02\x2c\x20\x31\x0d\x30\x0b\x06\x03\x55\x04\x0b\x13\x04\x20\x20\x58\x20\x31\x0d\x30\x0b\x06\x03\x55\x04\x03\x0c\x04\x23\x58\x58\x58", 45}, + .can_encode = 1 + }, + { + .name = "very long DN", ++ .compat_str = "C=ES,ST=CACERES,L=CACERES,O=DIPUTACION PROVINCIAL DE CACERES,OU=DIPUTACION PROVINCIAL DE CACERES,CN=www.dip-caceres.es,EMAIL=webmaster@dip-caceres.es,2.5.29.17=#1382304b444e532e313d6162616469612e65732c444e532e323d61626572747572612e65732c444e532e333d616365626f2e65732c444e532e343d61636568756368652e65732c444e532e353d6163656974756e612e65732c444e532e363d61686967616c2e65732c444e532e373d616c61676f6e64656c72696f2e65732c444e532e383d616c636f6c6c6172696e2e65732c444e532e393d6179746f616c62616c612e65732c444e532e31303d6179746f616c63616e746172612e65732c444e532e31313d616c637565736361722e65732c444e532e31323d616c64656163656e74656e6572612e65732c444e532e31333d616c64656164656c63616e6f2e65732c444e532e31343d6c61616c64656164656c6f626973706f2e65732c444e532e31353d616c6465616e7565766164656c61766572612e65732c444e532e31363d616c6465616e7565766164656c63616d696e6f2e65732c444e532e31373d616c64656875656c6164656c6a657274652e65732c444e532e31383d6179746f616c69612e65732c444e532e31393d616c69736564612e65732c444e532e32303d616c6d6172617a2e65732c444e532e32313d616c6d6f686172696e2e65732c444e532e32323d6179746f6172726f796f64656c616c757a2e65732c444e532e32333d6172726f796f6d6f6c696e6f732e65732c444e532e32343d6172726f796f6d6f6c696e6f7364656c61766572612e65732c444e532e32353d62616e6f7364656d6f6e74656d61796f722e65732c444e532e32363d6261727261646f2e65732c444e532e32373d62656c76697364656d6f6e726f792e65732c444e532e32383d62656e71756572656e6369612e65732c444e532e32393d626572726f63616c656a6f2e65732c444e532e33303d6265727a6f63616e612e65732c444e532e33313d626f686f6e616c646569626f722e65732c444e532e33323d626f74696a612e65732c444e532e33333d62726f7a61732e65732c444e532e33343d636162616e617364656c63617374696c6c6f2e65732c444e532e33353d636162657a6162656c6c6f73612e65732c444e532e33363d636162657a75656c6164656c76616c6c652e65732c444e532e33373d6361627265726f2e65732c444e532e33383d636163686f7272696c6c612e65732c444e532e33393d636164616c736f2e65732c444e532e34303d63616c7a6164696c6c612e65732c444e532e34313d63616d696e6f6d6f726973636f2e65732c444e532e34323d63616d70696c6c6f646564656c6569746f73612e65732c444e532e34333d63616d706f6c756761722e65732c444e532e34343d63616e616d65726f2e65732c444e532e34353d63616e61766572616c2e65732c444e532e34363d63617262616a6f2e65732c444e532e34373d6361726361626f736f2e65732c444e532e34383d63617272617363616c656a6f2e65732c444e532e34393d63617361726465636163657265732e65732c444e532e35303d6361736172646570616c6f6d65726f2e65732c444e532e35313d6361736172657364656c61736875726465732e65732c444e532e35323d63617361736465646f6e616e746f6e696f2e65732c444e532e35333d63617361736465646f6e676f6d657a2e65732c444e532e35343d636173617364656c63617374616e61722e65732c444e532e35353d636173617364656c6d6f6e74652e65732c444e532e35363d636173617364656d696c6c616e2e65732c444e532e35373d636173617364656d697261766574652e65732c444e532e35383d6361736174656a6164612e65732c444e532e35393d636173696c6c61736465636f7269612e65732c444e532e36303d63617374616e6172646569626f722e65732c444e532e36313d6365636c6176696e2e65732c444e532e36323d636564696c6c6f2e65732c444e532e36333d636572657a6f2e65732c444e532e36343d63696c6c65726f732e65732c444e532e36353d636f6c6c61646f2e65732c444e532e36363d636f6e71756973746164656c617369657272612e65732c444e532e36373d636f7269612e65732c444e532e36383d637561636f73646579757374652e65732c444e532e36393d6c6163756d6272652e65732c444e532e37303d64656c6569746f73612e65732c444e532e37313d64657363617267616d617269612e65732c444e532e37323d656c6a61732e65732c444e532e37333d657363757269616c2e65732c444e532e37343d667265736e65646f736f646569626f722e65732c444e532e37353d67616c697374656f2e65732c444e532e37363d6761726369617a2e65732c444e532e37373d6c6167617267616e74612e65732c444e532e37383d67617267616e74616c616f6c6c612e65732c444e532e37393d67617267616e74696c6c612e65732c444e532e38303d67617267756572612e65732c444e532e38313d676172726f76696c6c61736465616c636f6e657461722e65732c444e532e38323d67617276696e2e65732c444e532e38333d676174612e65732c444e532e38343d6179746f656c676f72646f2e65732c444e532e38353d6c616772616e6a612e65732c444e532e38363d6c616772616e6a6164656772616e6164696c6c612e65732c444e532e38373d6179756e74616d69656e746f646567756164616c7570652e65732c444e532e38383d6775696a6f6465636f7269612e65732c444e532e38393d6775696a6f646567616c697374656f2e65732c444e532e39303d6775696a6f64656772616e6164696c6c612e65732c444e532e39313d6775696a6f646573616e7461626172626172612e65732c444e532e39323d6865726775696a75656c612e65732c444e532e39333d6865726e616e706572657a2e65732c444e532e39343d686572726572616465616c63616e746172612e65732c444e532e39353d68657272657275656c612e65732c444e532e39363d6865727661732e65732c444e532e39373d686967756572612e65732c444e532e39383d68696e6f6a616c2e65732c444e532e39393d686f6c67756572612e65732c444e532e3130303d686f796f732e65732c444e532e3130313d6875656c6167612e65732c444e532e3130323d6962616865726e616e646f2e65732c444e532e3130333d6a6172616963656a6f2e65732c444e532e3130343d6a617261697a64656c61766572612e65732c444e532e3130353d6a6172616e64696c6c6164656c61766572612e65732c444e532e3130363d6a6172696c6c612e65732c444e532e3130373d6a657274652e65732c444e532e3130383d6c616472696c6c61722e65732c444e532e3130393d6c6f67726f73616e2e65732c444e532e3131303d6c6f73617264656c61766572612e65732c444e532e3131313d6d6164726967616c656a6f2e65732c444e532e3131323d6d6164726967616c64656c61766572612e65732c444e532e3131333d6d6164726f6e6572612e65732c444e532e3131343d6d616a616461732e65732c444e532e3131353d6d616c706172746964616465636163657265732e65732c444e532e3131363d6d616c706172746964616465706c6173656e6369612e65732c444e532e3131373d6d617263686167617a2e65732c444e532e3131383d6d6174616465616c63616e746172612e65732c444e532e3131393d6d656d6272696f2e65732c444e532e3132303d6d65736173646569626f722e65732c444e532e3132313d6d69616a616461732e65732c444e532e3132323d6d696c6c616e65732e65732c444e532e3132333d6d69726162656c2e65732c444e532e3132343d6d6f686564617364656772616e6164696c6c612e65732c444e532e3132353d6d6f6e726f792e65732c444e532e3132363d6d6f6e74616e6368657a2e65732c444e532e3132373d6d6f6e74656865726d6f736f2e65732c444e532e3132383d6d6f72616c656a612e65732c444e532e3132393d6d6f7263696c6c6f2e65732c444e532e3133303d6e617661636f6e63656a6f2e65732c444e532e3133313d6e6176616c76696c6c6172646569626f722e65732c444e532e3133323d6e6176616c6d6f72616c64656c616d6174612e65732c444e532e3133333d6e6176617364656c6d6164726f6e6f2e65732c444e532e3133343d6e6176617472617369657272612e65732c444e532e3133353d6e6176657a75656c61732e65732c444e532e3133363d6e756e6f6d6f72616c2e65732c444e532e3133373d6f6c6976616465706c6173656e6369612e65732c444e532e3133383d70616c6f6d65726f2e65732c444e532e3133393d70617361726f6e64656c61766572612e65732c444e532e3134303d706564726f736f64656163696d2e65732c444e532e3134313d706572616c65646164656c616d6174612e65732c444e532e3134323d706572616c656461646573616e726f6d616e2e65732c444e532e3134333d706572616c657364656c70756572746f2e65732c444e532e3134343d7065736375657a612e65732c444e532e3134353d6c6170657367612e65732c444e532e3134363d70696564726173616c6261732e65732c444e532e3134373d70696e6f6672616e71756561646f2e65732c444e532e3134383d70696f726e616c2e65732c444e532e3134393d706c6173656e7a75656c612e65732c444e532e3135303d706f7274616a652e65732c444e532e3135313d706f7274657a75656c6f2e65732c444e532e3135323d706f7a75656c6f64657a61727a6f6e2e65732c444e532e3135333d707565626c6f6e7565766f64656d6972616d6f6e7465732e65732c444e532e3135343d70756572746f646573616e74616372757a2e65732c444e532e3135353d7265626f6c6c61722e65732c444e532e3135363d72696f6c6f626f732e65732c444e532e3135373d726f626c6564696c6c6f6465676174612e65732c444e532e3135383d726f626c6564696c6c6f64656c61766572612e65732c444e532e3135393d726f626c6564696c6c6f64657472756a696c6c6f2c444e532e3136303d726f626c65646f6c6c616e6f2e65732c444e532e3136313d726f6d616e676f72646f2e65732c444e532e3136323d7275616e65732e65732c444e532e3136333d73616c6f72696e6f2e65732c444e532e3136343d73616c7661746965727261646573616e746961676f2e65732c444e532e3136353d73616e6d617274696e646574726576656a6f2e65732c444e532e3136363d6179746f73616e7461616e612e65732c444e532e3136373d73616e74616372757a64656c617369657272612e65732c444e532e3136383d73616e74616372757a646570616e69616775612e65732c444e532e3136393d73616e74616d6172746164656d6167617363612e65732c444e532e3137303d73616e746961676f64656c63616d706f2e65732c444e532e3137313d73616e746962616e657a656c616c746f2e65732c444e532e3137323d73616e746962616e657a656c62616a6f2e65732c444e532e3137333d736175636564696c6c612e65732c444e532e3137343d7365677572616465746f726f2e65732c444e532e3137353d736572726164696c6c612e65732c444e532e3137363d73657272656a6f6e2e65732c444e532e3137373d73696572726164656675656e7465732e65732c444e532e3137383d74616c6176616e2e65732c444e532e3137393d74616c6176657275656c6164656c61766572612e65732c444e532e3138303d74616c617975656c612e65732c444e532e3138313d74656a65646164657469657461722e65732c444e532e3138323d746f72696c2e65732c444e532e3138333d746f726e6176616361732e65732c444e532e3138343d6179746f656c746f726e6f2e65732c444e532e3138353d746f72726563696c6c6164656c6f73616e67656c65732e65732c444e532e3138363d746f72726563696c6c617364656c6174696573612e65732c444e532e3138373d746f7272656465646f6e6d696775656c2e65732c444e532e3138383d746f727265646573616e74616d617269612e65732c444e532e3138393d746f7272656a6f6e656c727562696f2e65732c444e532e3139303d746f7272656a6f6e63696c6c6f2e65732c444e532e3139313d746f7272656d656e67612e65732c444e532e3139323d746f7272656d6f6368612e65732c444e532e3139333d746f7272656f7267617a2e65732c444e532e3139343d746f7272657175656d6164612e65732c444e532e3139353d76616c64617374696c6c61732e65732c444e532e3139363d76616c646563616e6173646574616a6f2e65732c444e532e3139373d76616c64656675656e7465732e65732c444e532e3139383d76616c646568756e6361722e65732c444e532e3139393d76616c6465696e69676f732e65732c444e532e3230303d76616c64656c6163617361646574616a6f2e65732c444e532e3230313d76616c64656d6f72616c65732e65732c444e532e3230323d76616c64656f626973706f2e65732c444e532e3230333d76616c646573616c6f722e65732c444e532e3230343d76616c72696f2e65732c444e532e3230353d76616c656e6369616465616c63616e746172612e65732c444e532e3230363d76616c766572646564656c61766572612e65732c444e532e3230373d76616c766572646564656c667265736e6f2e65732c444e532e3230383d766567617669616e612e65732c444e532e3230393d7669616e64617264656c61766572612e65732c444e532e3231303d76696c6c6164656c63616d706f2e65732c444e532e3231313d76696c6c6164656c7265792e65732c444e532e3231323d76696c6c616d65736961732e65732c444e532e3231333d76696c6c616d69656c2e65732c444e532e3231343d76696c6c616e7565766164656c617369657272612e65732c444e532e3231353d76696c6c617264656c706564726f736f2e65732c444e532e3231363d76696c6c61726465706c6173656e6369612e65732c444e532e3231373d76696c6c61736275656e61736465676174612e65732c444e532e3231383d7a61727a6164656772616e6164696c6c612e65732c444e532e3231393d7a61727a6164656d6f6e74616e6368657a2e65732c444e532e3232303d7a61727a616c616d61796f722e65732c444e532e3232313d7a6f726974612e65732c444e532e3232323d726f73616c656a6f2e65732c444e532e3232333d766567617669616e612e65732c444e532e3232343d616c61676f6e64656c72696f2e65732c444e532e3232353d7469657461722e65732c444e532e3232363d76616c646573616c6f722e65732c444e532e3232373d6e6176617472617369657272612e65732c444e532e3232383d7269766572616465667265736e65646f73612e65732c444e532e3232393d656c6d73616e67696c2e65732c444e532e3233303d74616a6f73616c6f722e65732c444e532e3233313d76616c6c65616d62726f7a2e65732c444e532e3233323d6d616e636f6d756e6964616476616c6c6564656c616c61676f6e2e65732c444e532e3233333d6d616e636f6d756e6964616476616c6c6564656c6a657274652e65732c444e532e3233343d6d616e636f6d756e696461647665676173616c7461732e65732c444e532e3233353d6d616e636f6d756e6964616464656c61766572612e65732c444e532e3233363d6d616e636f6d756e696461647a6f6e6163656e74726f2e65732c444e532e3233373d76696c6c7565726361732d69626f7265732d6a6172612e65732c444e532e3233383d7777772e6162616469612e65732c444e532e3233393d7777772e61626572747572612e65732c444e532e3234303d7777772e616365626f2e65732c444e532e3234313d7777772e61636568756368652e65732c444e532e3234323d7777772e6163656974756e612e65732c444e532e3234333d7777772e61686967616c2e65732c444e532e3234343d7777772e616c61676f6e64656c72696f2e65732c444e532e3234353d7777772e616c636f6c6c6172696e2e65732c444e532e3234363d7777772e6179746f616c62616c612e65732c444e532e3234373d7777772e6179746f616c63616e746172612e65732c444e532e3234383d7777772e616c637565736361722e65732c444e532e3234393d7777772e616c64656163656e74656e6572612e65732c444e532e3235303d7777772e616c64656164656c63616e6f2e65732c444e532e3235313d7777772e6c61616c64656164656c6f626973706f2e65732c444e532e3235323d7777772e616c6465616e7565766164656c61766572612e65732c444e532e3235333d7777772e616c6465616e7565766164656c63616d696e6f2e65732c444e532e3235343d7777772e616c64656875656c6164656c6a657274652e65732c444e532e3235353d7777772e6179746f616c69612e65732c444e532e3235363d7777772e616c69736564612e65732c444e532e3235373d7777772e616c6d6172617a2e65732c444e532e3235383d7777772e616c6d6f686172696e2e65732c444e532e3235393d7777772e6179746f6172726f796f64656c616c757a2e65732c444e532e3236303d7777772e6172726f796f6d6f6c696e6f732e65732c444e532e3236313d7777772e6172726f796f6d6f6c696e6f7364656c61766572612e65732c444e532e3236323d7777772e62616e6f7364656d6f6e74656d61796f722e65732c444e532e3236333d7777772e6261727261646f2e65732c444e532e3236343d7777772e62656c76697364656d6f6e726f792e65732c444e532e3236353d7777772e62656e71756572656e6369612e65732c444e532e3236363d7777772e626572726f63616c656a6f2e65732c444e532e3236373d7777772e6265727a6f63616e612e65732c444e532e3236383d7777772e626f686f6e616c646569626f722e65732c444e532e3236393d7777772e626f74696a612e65732c444e532e3237303d7777772e62726f7a61732e65732c444e532e3237313d7777772e636162616e617364656c63617374696c6c6f2e65732c444e532e3237323d7777772e636162657a6162656c6c6f73612e65732c444e532e3237333d7777772e636162657a75656c6164656c76616c6c652e65732c444e532e3237343d7777772e6361627265726f2e65732c444e532e3237353d7777772e636163686f7272696c6c612e65732c444e532e3237363d7777772e636164616c736f2e65732c444e532e3237373d7777772e63616c7a6164696c6c612e65732c444e532e3237383d7777772e63616d696e6f6d6f726973636f2e65732c444e532e3237393d7777772e63616d70696c6c6f646564656c6569746f73612e65732c444e532e3238303d7777772e63616d706f6c756761722e65732c444e532e3238313d7777772e63616e616d65726f2e65732c444e532e3238323d7777772e63616e61766572616c2e65732c444e532e3238333d7777772e63617262616a6f2e65732c444e532e3238343d7777772e6361726361626f736f2e65732c444e532e3238353d7777772e63617272617363616c656a6f2e65732c444e532e3238363d7777772e63617361726465636163657265732e65732c444e532e3238373d7777772e6361736172646570616c6f6d65726f2e65732c444e532e3238383d7777772e6361736172657364656c61736875726465732e65732c444e532e3238393d7777772e63617361736465646f6e616e746f6e696f2e65732c444e532e3239303d7777772e63617361736465646f6e676f6d657a2e65732c444e532e3239313d7777772e636173617364656c63617374616e61722e65732c444e532e3239323d7777772e636173617364656c6d6f6e74652e65732c444e532e3239333d7777772e636173617364656d696c6c616e2e65732c444e532e3239343d7777772e636173617364656d697261766574652e65732c444e532e3239353d7777772e6361736174656a6164612e65732c444e532e3239363d7777772e636173696c6c61736465636f7269612e65732c444e532e3239373d7777772e63617374616e6172646569626f722e65732c444e532e3239383d7777772e6365636c6176696e2e65732c444e532e3239393d7777772e636564696c6c6f2e65732c444e532e3330303d7777772e636572657a6f2e65732c444e532e3330313d7777772e63696c6c65726f732e65732c444e532e3330323d7777772e636f6c6c61646f2e65732c444e532e3330333d7777772e636f6e71756973746164656c617369657272612e65732c444e532e3330343d7777772e636f7269612e65732c444e532e3330353d7777772e637561636f73646579757374652e65732c444e532e3330363d7777772e6c6163756d6272652e65732c444e532e3330373d7777772e64656c6569746f73612e65732c444e532e3330383d7777772e64657363617267616d617269612e65732c444e532e3330393d7777772e656c6a61732e65732c444e532e3331303d7777772e657363757269616c2e65732c444e532e3331313d7777772e667265736e65646f736f646569626f722e65732c444e532e3331323d7777772e67616c697374656f2e65732c444e532e3331333d7777772e6761726369617a2e65732c444e532e3331343d7777772e6c6167617267616e74612e65732c444e532e3331353d7777772e67617267616e74616c616f6c6c612e65732c444e532e3331363d7777772e67617267616e74696c6c612e65732c444e532e3331373d7777772e67617267756572612e65732c444e532e3331383d7777772e676172726f76696c6c61736465616c636f6e657461722e65732c444e532e3331393d7777772e67617276696e2e65732c444e532e3332303d7777772e676174612e65732c444e532e3332313d7777772e6179746f656c676f72646f2e65732c444e532e3332323d7777772e6c616772616e6a612e65732c444e532e3332333d7777772e6c616772616e6a6164656772616e6164696c6c612e65732c444e532e3332343d7777772e6179756e74616d69656e746f646567756164616c7570652e65732c444e532e3332353d7777772e6775696a6f6465636f7269612e65732c444e532e3332363d7777772e6775696a6f646567616c697374656f2e65732c444e532e3332373d7777772e6775696a6f64656772616e6164696c6c612e65732c444e532e3332383d7777772e6775696a6f646573616e7461626172626172612e65732c444e532e3332393d7777772e6865726775696a75656c612e65732c444e532e3333303d7777772e6865726e616e706572657a2e65732c444e532e3333313d7777772e686572726572616465616c63616e746172612e65732c444e532e3333323d7777772e68657272657275656c612e65732c444e532e3333333d7777772e6865727661732e65732c444e532e3333343d7777772e686967756572612e65732c444e532e3333353d7777772e68696e6f6a616c2e65732c444e532e3333363d7777772e686f6c67756572612e65732c444e532e3333373d7777772e686f796f732e65732c444e532e3333383d7777772e6875656c6167612e65732c444e532e3333393d7777772e6962616865726e616e646f2e65732c444e532e3334303d7777772e6a6172616963656a6f2e65732c444e532e3334313d7777772e6a617261697a64656c61766572612e65732c444e532e3334323d7777772e6a6172616e64696c6c6164656c61766572612e65732c444e532e3334333d7777772e6a6172696c6c612e65732c444e532e3334343d7777772e6a657274652e65732c444e532e3334353d7777772e6c616472696c6c61722e65732c444e532e3334363d7777772e6c6f67726f73616e2e65732c444e532e3334373d7777772e6c6f73617264656c61766572612e65732c444e532e3334383d7777772e6d6164726967616c656a6f2e65732c444e532e3334393d7777772e6d6164726967616c64656c61766572612e65732c444e532e3335303d7777772e6d6164726f6e6572612e65732c444e532e3335313d7777772e6d616a616461732e65732c444e532e3335323d7777772e6d616c706172746964616465636163657265732e65732c444e532e3335333d7777772e6d616c706172746964616465706c6173656e6369612e65732c444e532e3335343d7777772e6d617263686167617a2e65732c444e532e3335353d7777772e6d6174616465616c63616e746172612e65732c444e532e3335363d7777772e6d656d6272696f2e65732c444e532e3335373d7777772e6d65736173646569626f722e65732c444e532e3335383d7777772e6d69616a616461732e65732c444e532e3335393d7777772e6d696c6c616e65732e65732c444e532e3336303d7777772e6d69726162656c2e65732c444e532e3336313d7777772e6d6f686564617364656772616e6164696c6c612e65732c444e532e3336323d7777772e6d6f6e726f792e65732c444e532e3336333d7777772e6d6f6e74616e6368657a2e65732c444e532e3336343d7777772e6d6f6e74656865726d6f736f2e65732c444e532e3336353d7777772e6d6f72616c656a612e65732c444e532e3336363d7777772e6d6f7263696c6c6f2e65732c444e532e3336373d7777772e6e617661636f6e63656a6f2e65732c444e532e3336383d7777772e6e6176616c76696c6c6172646569626f722e65732c444e532e3336393d7777772e6e6176616c6d6f72616c64656c616d6174612e65732c444e532e3337303d7777772e6e6176617364656c6d6164726f6e6f2e65732c444e532e3337313d7777772e6e6176617472617369657272612e65732c444e532e3337323d7777772e6e6176657a75656c61732e65732c444e532e3337333d7777772e6e756e6f6d6f72616c2e65732c444e532e3337343d7777772e6f6c6976616465706c6173656e6369612e65732c444e532e3337353d7777772e70616c6f6d65726f2e65732c444e532e3337363d7777772e70617361726f6e64656c61766572612e65732c444e532e3337373d7777772e706564726f736f64656163696d2e65732c444e532e3337383d7777772e706572616c65646164656c616d6174612e65732c444e532e3337393d7777772e706572616c656461646573616e726f6d616e2e65732c444e532e3338303d7777772e706572616c657364656c70756572746f2e65732c444e532e3338313d7777772e7065736375657a612e65732c444e532e3338323d7777772e6c6170657367612e65732c444e532e3338333d7777772e70696564726173616c6261732e65732c444e532e3338343d7777772e70696e6f6672616e71756561646f2e65732c444e532e3338353d7777772e70696f726e616c2e65732c444e532e3338363d7777772e706c6173656e7a75656c612e65732c444e532e3338373d7777772e706f7274616a652e65732c444e532e3338383d7777772e706f7274657a75656c6f2e65732c444e532e3338393d7777772e706f7a75656c6f64657a61727a6f6e2e65732c444e532e3339303d7777772e707565626c6f6e7565766f64656d6972616d6f6e7465732e65732c444e532e3339313d7777772e70756572746f646573616e74616372757a2e65732c444e532e3339323d7777772e7265626f6c6c61722e65732c444e532e3339333d7777772e72696f6c6f626f732e65732c444e532e3339343d7777772e726f626c6564696c6c6f6465676174612e65732c444e532e3339353d7777772e726f626c6564696c6c6f64656c61766572612e65732c444e532e3339363d7777772e726f626c6564696c6c6f64657472756a696c6c6f2c444e532e3339373d7777772e726f626c65646f6c6c616e6f2e65732c444e532e3339383d7777772e726f6d616e676f72646f2e65732c444e532e3339393d7777772e7275616e65732e65732c444e532e3430303d7777772e73616c6f72696e6f2e65732c444e532e3430313d7777772e73616c7661746965727261646573616e746961676f2e65732c444e532e3430323d7777772e73616e6d617274696e646574726576656a6f2e65732c444e532e3430333d7777772e6179746f73616e7461616e612e65732c444e532e3430343d7777772e73616e74616372757a64656c617369657272612e65732c444e532e3430353d7777772e73616e74616372757a646570616e69616775612e65732c444e532e3430363d7777772e73616e74616d6172746164656d6167617363612e65732c444e532e3430373d7777772e73616e746961676f64656c63616d706f2e65732c444e532e3430383d7777772e73616e746962616e657a656c616c746f2e65732c444e532e3430393d7777772e73616e746962616e657a656c62616a6f2e65732c444e532e3431303d7777772e736175636564696c6c612e65732c444e532e3431313d7777772e7365677572616465746f726f2e65732c444e532e3431323d7777772e736572726164696c6c612e65732c444e532e3431333d7777772e73657272656a6f6e2e65732c444e532e3431343d7777772e73696572726164656675656e7465732e65732c444e532e3431353d7777772e74616c6176616e2e65732c444e532e3431363d7777772e74616c6176657275656c6164656c61766572612e65732c444e532e3431373d7777772e74616c617975656c612e65732c444e532e3431383d7777772e74656a65646164657469657461722e65732c444e532e3431393d7777772e746f72696c2e65732c444e532e3432303d7777772e746f726e6176616361732e65732c444e532e3432313d7777772e6179746f656c746f726e6f2e65732c444e532e3432323d7777772e746f72726563696c6c6164656c6f73616e67656c65732e65732c444e532e3432333d7777772e746f72726563696c6c617364656c6174696573612e65732c444e532e3432343d7777772e746f7272656465646f6e6d696775656c2e65732c444e532e3432353d7777772e746f727265646573616e74616d617269612e65732c444e532e3432363d7777772e746f7272656a6f6e656c727562696f2e65732c444e532e3432373d7777772e746f7272656a6f6e63696c6c6f2e65732c444e532e3432383d7777772e746f7272656d656e67612e65732c444e532e3432393d7777772e746f7272656d6f6368612e65732c444e532e3433303d7777772e746f7272656f7267617a2e65732c444e532e3433313d7777772e746f7272657175656d6164612e65732c444e532e3433323d7777772e76616c64617374696c6c61732e65732c444e532e3433333d7777772e76616c646563616e6173646574616a6f2e65732c444e532e3433343d7777772e76616c64656675656e7465732e65732c444e532e3433353d7777772e76616c646568756e6361722e65732c444e532e3433363d7777772e76616c6465696e69676f732e65732c444e532e3433373d7777772e76616c64656c6163617361646574616a6f2e65732c444e532e3433383d7777772e76616c64656d6f72616c65732e65732c444e532e3433393d7777772e76616c64656f626973706f2e65732c444e532e3434303d7777772e76616c646573616c6f722e65732c444e532e3434313d7777772e76616c72696f2e65732c444e532e3434323d7777772e76616c656e6369616465616c63616e746172612e65732c444e532e3434333d7777772e76616c766572646564656c61766572612e65732c444e532e3434343d7777772e76616c766572646564656c667265736e6f2e65732c444e532e3434353d7777772e766567617669616e612e65732c444e532e3434363d7777772e7669616e64617264656c61766572612e65732c444e532e3434373d7777772e76696c6c6164656c63616d706f2e65732c444e532e3434383d7777772e76696c6c6164656c7265792e65732c444e532e3434393d7777772e76696c6c616d65736961732e65732c444e532e3435303d7777772e76696c6c616d69656c2e65732c444e532e3435313d7777772e76696c6c616e7565766164656c617369657272612e65732c444e532e3435323d7777772e76696c6c617264656c706564726f736f2e65732c444e532e3435333d7777772e76696c6c61726465706c6173656e6369612e65732c444e532e3435343d7777772e76696c6c61736275656e61736465676174612e65732c444e532e3435353d7777772e7a61727a6164656772616e6164696c6c612e65732c444e532e3435363d7777772e7a61727a6164656d6f6e74616e6368657a2e65732c444e532e3435373d7777772e7a61727a616c616d61796f722e65732c444e532e3435383d7777772e7a6f726974612e65732c444e532e3435393d7777772e726f73616c656a6f2e65732c444e532e3436303d7777772e766567617669616e612e65732c444e532e3436313d7777772e616c61676f6e64656c72696f2e65732c444e532e3436323d7777772e7469657461722e65732c444e532e3436333d7777772e76616c646573616c6f722e65732c444e532e3436343d7777772e6e6176617472617369657272612e65732c444e532e3436353d7777772e7269766572616465667265736e65646f73612e65732c444e532e3436363d7777772e656c6d73616e67696c2e65732c444e532e3436373d7777772e74616a6f73616c6f722e65732c444e532e3436383d7777772e76616c6c65616d62726f7a2e65732c444e532e3436393d7777772e6d616e636f6d756e6964616476616c6c6564656c616c61676f6e2e65732c444e532e3437303d7777772e6d616e636f6d756e6964616476616c6c6564656c6a657274652e65732c444e532e3437313d7777772e6d616e636f6d756e696461647665676173616c7461732e65732c444e532e3437323d7777772e6d616e636f6d756e6964616464656c61766572612e65732c444e532e3437333d7777772e6d616e636f6d756e696461647a6f6e6163656e74726f2e65732c444e532e3437343d7777772e76696c6c7565726361732d69626f7265732d6a6172612e6573", + .str = "2.5.29.17=#1382304b444e532e313d6162616469612e65732c444e532e323d61626572747572612e65732c444e532e333d616365626f2e65732c444e532e343d61636568756368652e65732c444e532e353d6163656974756e612e65732c444e532e363d61686967616c2e65732c444e532e373d616c61676f6e64656c72696f2e65732c444e532e383d616c636f6c6c6172696e2e65732c444e532e393d6179746f616c62616c612e65732c444e532e31303d6179746f616c63616e746172612e65732c444e532e31313d616c637565736361722e65732c444e532e31323d616c64656163656e74656e6572612e65732c444e532e31333d616c64656164656c63616e6f2e65732c444e532e31343d6c61616c64656164656c6f626973706f2e65732c444e532e31353d616c6465616e7565766164656c61766572612e65732c444e532e31363d616c6465616e7565766164656c63616d696e6f2e65732c444e532e31373d616c64656875656c6164656c6a657274652e65732c444e532e31383d6179746f616c69612e65732c444e532e31393d616c69736564612e65732c444e532e32303d616c6d6172617a2e65732c444e532e32313d616c6d6f686172696e2e65732c444e532e32323d6179746f6172726f796f64656c616c757a2e65732c444e532e32333d6172726f796f6d6f6c696e6f732e65732c444e532e32343d6172726f796f6d6f6c696e6f7364656c61766572612e65732c444e532e32353d62616e6f7364656d6f6e74656d61796f722e65732c444e532e32363d6261727261646f2e65732c444e532e32373d62656c76697364656d6f6e726f792e65732c444e532e32383d62656e71756572656e6369612e65732c444e532e32393d626572726f63616c656a6f2e65732c444e532e33303d6265727a6f63616e612e65732c444e532e33313d626f686f6e616c646569626f722e65732c444e532e33323d626f74696a612e65732c444e532e33333d62726f7a61732e65732c444e532e33343d636162616e617364656c63617374696c6c6f2e65732c444e532e33353d636162657a6162656c6c6f73612e65732c444e532e33363d636162657a75656c6164656c76616c6c652e65732c444e532e33373d6361627265726f2e65732c444e532e33383d636163686f7272696c6c612e65732c444e532e33393d636164616c736f2e65732c444e532e34303d63616c7a6164696c6c612e65732c444e532e34313d63616d696e6f6d6f726973636f2e65732c444e532e34323d63616d70696c6c6f646564656c6569746f73612e65732c444e532e34333d63616d706f6c756761722e65732c444e532e34343d63616e616d65726f2e65732c444e532e34353d63616e61766572616c2e65732c444e532e34363d63617262616a6f2e65732c444e532e34373d6361726361626f736f2e65732c444e532e34383d63617272617363616c656a6f2e65732c444e532e34393d63617361726465636163657265732e65732c444e532e35303d6361736172646570616c6f6d65726f2e65732c444e532e35313d6361736172657364656c61736875726465732e65732c444e532e35323d63617361736465646f6e616e746f6e696f2e65732c444e532e35333d63617361736465646f6e676f6d657a2e65732c444e532e35343d636173617364656c63617374616e61722e65732c444e532e35353d636173617364656c6d6f6e74652e65732c444e532e35363d636173617364656d696c6c616e2e65732c444e532e35373d636173617364656d697261766574652e65732c444e532e35383d6361736174656a6164612e65732c444e532e35393d636173696c6c61736465636f7269612e65732c444e532e36303d63617374616e6172646569626f722e65732c444e532e36313d6365636c6176696e2e65732c444e532e36323d636564696c6c6f2e65732c444e532e36333d636572657a6f2e65732c444e532e36343d63696c6c65726f732e65732c444e532e36353d636f6c6c61646f2e65732c444e532e36363d636f6e71756973746164656c617369657272612e65732c444e532e36373d636f7269612e65732c444e532e36383d637561636f73646579757374652e65732c444e532e36393d6c6163756d6272652e65732c444e532e37303d64656c6569746f73612e65732c444e532e37313d64657363617267616d617269612e65732c444e532e37323d656c6a61732e65732c444e532e37333d657363757269616c2e65732c444e532e37343d667265736e65646f736f646569626f722e65732c444e532e37353d67616c697374656f2e65732c444e532e37363d6761726369617a2e65732c444e532e37373d6c6167617267616e74612e65732c444e532e37383d67617267616e74616c616f6c6c612e65732c444e532e37393d67617267616e74696c6c612e65732c444e532e38303d67617267756572612e65732c444e532e38313d676172726f76696c6c61736465616c636f6e657461722e65732c444e532e38323d67617276696e2e65732c444e532e38333d676174612e65732c444e532e38343d6179746f656c676f72646f2e65732c444e532e38353d6c616772616e6a612e65732c444e532e38363d6c616772616e6a6164656772616e6164696c6c612e65732c444e532e38373d6179756e74616d69656e746f646567756164616c7570652e65732c444e532e38383d6775696a6f6465636f7269612e65732c444e532e38393d6775696a6f646567616c697374656f2e65732c444e532e39303d6775696a6f64656772616e6164696c6c612e65732c444e532e39313d6775696a6f646573616e7461626172626172612e65732c444e532e39323d6865726775696a75656c612e65732c444e532e39333d6865726e616e706572657a2e65732c444e532e39343d686572726572616465616c63616e746172612e65732c444e532e39353d68657272657275656c612e65732c444e532e39363d6865727661732e65732c444e532e39373d686967756572612e65732c444e532e39383d68696e6f6a616c2e65732c444e532e39393d686f6c67756572612e65732c444e532e3130303d686f796f732e65732c444e532e3130313d6875656c6167612e65732c444e532e3130323d6962616865726e616e646f2e65732c444e532e3130333d6a6172616963656a6f2e65732c444e532e3130343d6a617261697a64656c61766572612e65732c444e532e3130353d6a6172616e64696c6c6164656c61766572612e65732c444e532e3130363d6a6172696c6c612e65732c444e532e3130373d6a657274652e65732c444e532e3130383d6c616472696c6c61722e65732c444e532e3130393d6c6f67726f73616e2e65732c444e532e3131303d6c6f73617264656c61766572612e65732c444e532e3131313d6d6164726967616c656a6f2e65732c444e532e3131323d6d6164726967616c64656c61766572612e65732c444e532e3131333d6d6164726f6e6572612e65732c444e532e3131343d6d616a616461732e65732c444e532e3131353d6d616c706172746964616465636163657265732e65732c444e532e3131363d6d616c706172746964616465706c6173656e6369612e65732c444e532e3131373d6d617263686167617a2e65732c444e532e3131383d6d6174616465616c63616e746172612e65732c444e532e3131393d6d656d6272696f2e65732c444e532e3132303d6d65736173646569626f722e65732c444e532e3132313d6d69616a616461732e65732c444e532e3132323d6d696c6c616e65732e65732c444e532e3132333d6d69726162656c2e65732c444e532e3132343d6d6f686564617364656772616e6164696c6c612e65732c444e532e3132353d6d6f6e726f792e65732c444e532e3132363d6d6f6e74616e6368657a2e65732c444e532e3132373d6d6f6e74656865726d6f736f2e65732c444e532e3132383d6d6f72616c656a612e65732c444e532e3132393d6d6f7263696c6c6f2e65732c444e532e3133303d6e617661636f6e63656a6f2e65732c444e532e3133313d6e6176616c76696c6c6172646569626f722e65732c444e532e3133323d6e6176616c6d6f72616c64656c616d6174612e65732c444e532e3133333d6e6176617364656c6d6164726f6e6f2e65732c444e532e3133343d6e6176617472617369657272612e65732c444e532e3133353d6e6176657a75656c61732e65732c444e532e3133363d6e756e6f6d6f72616c2e65732c444e532e3133373d6f6c6976616465706c6173656e6369612e65732c444e532e3133383d70616c6f6d65726f2e65732c444e532e3133393d70617361726f6e64656c61766572612e65732c444e532e3134303d706564726f736f64656163696d2e65732c444e532e3134313d706572616c65646164656c616d6174612e65732c444e532e3134323d706572616c656461646573616e726f6d616e2e65732c444e532e3134333d706572616c657364656c70756572746f2e65732c444e532e3134343d7065736375657a612e65732c444e532e3134353d6c6170657367612e65732c444e532e3134363d70696564726173616c6261732e65732c444e532e3134373d70696e6f6672616e71756561646f2e65732c444e532e3134383d70696f726e616c2e65732c444e532e3134393d706c6173656e7a75656c612e65732c444e532e3135303d706f7274616a652e65732c444e532e3135313d706f7274657a75656c6f2e65732c444e532e3135323d706f7a75656c6f64657a61727a6f6e2e65732c444e532e3135333d707565626c6f6e7565766f64656d6972616d6f6e7465732e65732c444e532e3135343d70756572746f646573616e74616372757a2e65732c444e532e3135353d7265626f6c6c61722e65732c444e532e3135363d72696f6c6f626f732e65732c444e532e3135373d726f626c6564696c6c6f6465676174612e65732c444e532e3135383d726f626c6564696c6c6f64656c61766572612e65732c444e532e3135393d726f626c6564696c6c6f64657472756a696c6c6f2c444e532e3136303d726f626c65646f6c6c616e6f2e65732c444e532e3136313d726f6d616e676f72646f2e65732c444e532e3136323d7275616e65732e65732c444e532e3136333d73616c6f72696e6f2e65732c444e532e3136343d73616c7661746965727261646573616e746961676f2e65732c444e532e3136353d73616e6d617274696e646574726576656a6f2e65732c444e532e3136363d6179746f73616e7461616e612e65732c444e532e3136373d73616e74616372757a64656c617369657272612e65732c444e532e3136383d73616e74616372757a646570616e69616775612e65732c444e532e3136393d73616e74616d6172746164656d6167617363612e65732c444e532e3137303d73616e746961676f64656c63616d706f2e65732c444e532e3137313d73616e746962616e657a656c616c746f2e65732c444e532e3137323d73616e746962616e657a656c62616a6f2e65732c444e532e3137333d736175636564696c6c612e65732c444e532e3137343d7365677572616465746f726f2e65732c444e532e3137353d736572726164696c6c612e65732c444e532e3137363d73657272656a6f6e2e65732c444e532e3137373d73696572726164656675656e7465732e65732c444e532e3137383d74616c6176616e2e65732c444e532e3137393d74616c6176657275656c6164656c61766572612e65732c444e532e3138303d74616c617975656c612e65732c444e532e3138313d74656a65646164657469657461722e65732c444e532e3138323d746f72696c2e65732c444e532e3138333d746f726e6176616361732e65732c444e532e3138343d6179746f656c746f726e6f2e65732c444e532e3138353d746f72726563696c6c6164656c6f73616e67656c65732e65732c444e532e3138363d746f72726563696c6c617364656c6174696573612e65732c444e532e3138373d746f7272656465646f6e6d696775656c2e65732c444e532e3138383d746f727265646573616e74616d617269612e65732c444e532e3138393d746f7272656a6f6e656c727562696f2e65732c444e532e3139303d746f7272656a6f6e63696c6c6f2e65732c444e532e3139313d746f7272656d656e67612e65732c444e532e3139323d746f7272656d6f6368612e65732c444e532e3139333d746f7272656f7267617a2e65732c444e532e3139343d746f7272657175656d6164612e65732c444e532e3139353d76616c64617374696c6c61732e65732c444e532e3139363d76616c646563616e6173646574616a6f2e65732c444e532e3139373d76616c64656675656e7465732e65732c444e532e3139383d76616c646568756e6361722e65732c444e532e3139393d76616c6465696e69676f732e65732c444e532e3230303d76616c64656c6163617361646574616a6f2e65732c444e532e3230313d76616c64656d6f72616c65732e65732c444e532e3230323d76616c64656f626973706f2e65732c444e532e3230333d76616c646573616c6f722e65732c444e532e3230343d76616c72696f2e65732c444e532e3230353d76616c656e6369616465616c63616e746172612e65732c444e532e3230363d76616c766572646564656c61766572612e65732c444e532e3230373d76616c766572646564656c667265736e6f2e65732c444e532e3230383d766567617669616e612e65732c444e532e3230393d7669616e64617264656c61766572612e65732c444e532e3231303d76696c6c6164656c63616d706f2e65732c444e532e3231313d76696c6c6164656c7265792e65732c444e532e3231323d76696c6c616d65736961732e65732c444e532e3231333d76696c6c616d69656c2e65732c444e532e3231343d76696c6c616e7565766164656c617369657272612e65732c444e532e3231353d76696c6c617264656c706564726f736f2e65732c444e532e3231363d76696c6c61726465706c6173656e6369612e65732c444e532e3231373d76696c6c61736275656e61736465676174612e65732c444e532e3231383d7a61727a6164656772616e6164696c6c612e65732c444e532e3231393d7a61727a6164656d6f6e74616e6368657a2e65732c444e532e3232303d7a61727a616c616d61796f722e65732c444e532e3232313d7a6f726974612e65732c444e532e3232323d726f73616c656a6f2e65732c444e532e3232333d766567617669616e612e65732c444e532e3232343d616c61676f6e64656c72696f2e65732c444e532e3232353d7469657461722e65732c444e532e3232363d76616c646573616c6f722e65732c444e532e3232373d6e6176617472617369657272612e65732c444e532e3232383d7269766572616465667265736e65646f73612e65732c444e532e3232393d656c6d73616e67696c2e65732c444e532e3233303d74616a6f73616c6f722e65732c444e532e3233313d76616c6c65616d62726f7a2e65732c444e532e3233323d6d616e636f6d756e6964616476616c6c6564656c616c61676f6e2e65732c444e532e3233333d6d616e636f6d756e6964616476616c6c6564656c6a657274652e65732c444e532e3233343d6d616e636f6d756e696461647665676173616c7461732e65732c444e532e3233353d6d616e636f6d756e6964616464656c61766572612e65732c444e532e3233363d6d616e636f6d756e696461647a6f6e6163656e74726f2e65732c444e532e3233373d76696c6c7565726361732d69626f7265732d6a6172612e65732c444e532e3233383d7777772e6162616469612e65732c444e532e3233393d7777772e61626572747572612e65732c444e532e3234303d7777772e616365626f2e65732c444e532e3234313d7777772e61636568756368652e65732c444e532e3234323d7777772e6163656974756e612e65732c444e532e3234333d7777772e61686967616c2e65732c444e532e3234343d7777772e616c61676f6e64656c72696f2e65732c444e532e3234353d7777772e616c636f6c6c6172696e2e65732c444e532e3234363d7777772e6179746f616c62616c612e65732c444e532e3234373d7777772e6179746f616c63616e746172612e65732c444e532e3234383d7777772e616c637565736361722e65732c444e532e3234393d7777772e616c64656163656e74656e6572612e65732c444e532e3235303d7777772e616c64656164656c63616e6f2e65732c444e532e3235313d7777772e6c61616c64656164656c6f626973706f2e65732c444e532e3235323d7777772e616c6465616e7565766164656c61766572612e65732c444e532e3235333d7777772e616c6465616e7565766164656c63616d696e6f2e65732c444e532e3235343d7777772e616c64656875656c6164656c6a657274652e65732c444e532e3235353d7777772e6179746f616c69612e65732c444e532e3235363d7777772e616c69736564612e65732c444e532e3235373d7777772e616c6d6172617a2e65732c444e532e3235383d7777772e616c6d6f686172696e2e65732c444e532e3235393d7777772e6179746f6172726f796f64656c616c757a2e65732c444e532e3236303d7777772e6172726f796f6d6f6c696e6f732e65732c444e532e3236313d7777772e6172726f796f6d6f6c696e6f7364656c61766572612e65732c444e532e3236323d7777772e62616e6f7364656d6f6e74656d61796f722e65732c444e532e3236333d7777772e6261727261646f2e65732c444e532e3236343d7777772e62656c76697364656d6f6e726f792e65732c444e532e3236353d7777772e62656e71756572656e6369612e65732c444e532e3236363d7777772e626572726f63616c656a6f2e65732c444e532e3236373d7777772e6265727a6f63616e612e65732c444e532e3236383d7777772e626f686f6e616c646569626f722e65732c444e532e3236393d7777772e626f74696a612e65732c444e532e3237303d7777772e62726f7a61732e65732c444e532e3237313d7777772e636162616e617364656c63617374696c6c6f2e65732c444e532e3237323d7777772e636162657a6162656c6c6f73612e65732c444e532e3237333d7777772e636162657a75656c6164656c76616c6c652e65732c444e532e3237343d7777772e6361627265726f2e65732c444e532e3237353d7777772e636163686f7272696c6c612e65732c444e532e3237363d7777772e636164616c736f2e65732c444e532e3237373d7777772e63616c7a6164696c6c612e65732c444e532e3237383d7777772e63616d696e6f6d6f726973636f2e65732c444e532e3237393d7777772e63616d70696c6c6f646564656c6569746f73612e65732c444e532e3238303d7777772e63616d706f6c756761722e65732c444e532e3238313d7777772e63616e616d65726f2e65732c444e532e3238323d7777772e63616e61766572616c2e65732c444e532e3238333d7777772e63617262616a6f2e65732c444e532e3238343d7777772e6361726361626f736f2e65732c444e532e3238353d7777772e63617272617363616c656a6f2e65732c444e532e3238363d7777772e63617361726465636163657265732e65732c444e532e3238373d7777772e6361736172646570616c6f6d65726f2e65732c444e532e3238383d7777772e6361736172657364656c61736875726465732e65732c444e532e3238393d7777772e63617361736465646f6e616e746f6e696f2e65732c444e532e3239303d7777772e63617361736465646f6e676f6d657a2e65732c444e532e3239313d7777772e636173617364656c63617374616e61722e65732c444e532e3239323d7777772e636173617364656c6d6f6e74652e65732c444e532e3239333d7777772e636173617364656d696c6c616e2e65732c444e532e3239343d7777772e636173617364656d697261766574652e65732c444e532e3239353d7777772e6361736174656a6164612e65732c444e532e3239363d7777772e636173696c6c61736465636f7269612e65732c444e532e3239373d7777772e63617374616e6172646569626f722e65732c444e532e3239383d7777772e6365636c6176696e2e65732c444e532e3239393d7777772e636564696c6c6f2e65732c444e532e3330303d7777772e636572657a6f2e65732c444e532e3330313d7777772e63696c6c65726f732e65732c444e532e3330323d7777772e636f6c6c61646f2e65732c444e532e3330333d7777772e636f6e71756973746164656c617369657272612e65732c444e532e3330343d7777772e636f7269612e65732c444e532e3330353d7777772e637561636f73646579757374652e65732c444e532e3330363d7777772e6c6163756d6272652e65732c444e532e3330373d7777772e64656c6569746f73612e65732c444e532e3330383d7777772e64657363617267616d617269612e65732c444e532e3330393d7777772e656c6a61732e65732c444e532e3331303d7777772e657363757269616c2e65732c444e532e3331313d7777772e667265736e65646f736f646569626f722e65732c444e532e3331323d7777772e67616c697374656f2e65732c444e532e3331333d7777772e6761726369617a2e65732c444e532e3331343d7777772e6c6167617267616e74612e65732c444e532e3331353d7777772e67617267616e74616c616f6c6c612e65732c444e532e3331363d7777772e67617267616e74696c6c612e65732c444e532e3331373d7777772e67617267756572612e65732c444e532e3331383d7777772e676172726f76696c6c61736465616c636f6e657461722e65732c444e532e3331393d7777772e67617276696e2e65732c444e532e3332303d7777772e676174612e65732c444e532e3332313d7777772e6179746f656c676f72646f2e65732c444e532e3332323d7777772e6c616772616e6a612e65732c444e532e3332333d7777772e6c616772616e6a6164656772616e6164696c6c612e65732c444e532e3332343d7777772e6179756e74616d69656e746f646567756164616c7570652e65732c444e532e3332353d7777772e6775696a6f6465636f7269612e65732c444e532e3332363d7777772e6775696a6f646567616c697374656f2e65732c444e532e3332373d7777772e6775696a6f64656772616e6164696c6c612e65732c444e532e3332383d7777772e6775696a6f646573616e7461626172626172612e65732c444e532e3332393d7777772e6865726775696a75656c612e65732c444e532e3333303d7777772e6865726e616e706572657a2e65732c444e532e3333313d7777772e686572726572616465616c63616e746172612e65732c444e532e3333323d7777772e68657272657275656c612e65732c444e532e3333333d7777772e6865727661732e65732c444e532e3333343d7777772e686967756572612e65732c444e532e3333353d7777772e68696e6f6a616c2e65732c444e532e3333363d7777772e686f6c67756572612e65732c444e532e3333373d7777772e686f796f732e65732c444e532e3333383d7777772e6875656c6167612e65732c444e532e3333393d7777772e6962616865726e616e646f2e65732c444e532e3334303d7777772e6a6172616963656a6f2e65732c444e532e3334313d7777772e6a617261697a64656c61766572612e65732c444e532e3334323d7777772e6a6172616e64696c6c6164656c61766572612e65732c444e532e3334333d7777772e6a6172696c6c612e65732c444e532e3334343d7777772e6a657274652e65732c444e532e3334353d7777772e6c616472696c6c61722e65732c444e532e3334363d7777772e6c6f67726f73616e2e65732c444e532e3334373d7777772e6c6f73617264656c61766572612e65732c444e532e3334383d7777772e6d6164726967616c656a6f2e65732c444e532e3334393d7777772e6d6164726967616c64656c61766572612e65732c444e532e3335303d7777772e6d6164726f6e6572612e65732c444e532e3335313d7777772e6d616a616461732e65732c444e532e3335323d7777772e6d616c706172746964616465636163657265732e65732c444e532e3335333d7777772e6d616c706172746964616465706c6173656e6369612e65732c444e532e3335343d7777772e6d617263686167617a2e65732c444e532e3335353d7777772e6d6174616465616c63616e746172612e65732c444e532e3335363d7777772e6d656d6272696f2e65732c444e532e3335373d7777772e6d65736173646569626f722e65732c444e532e3335383d7777772e6d69616a616461732e65732c444e532e3335393d7777772e6d696c6c616e65732e65732c444e532e3336303d7777772e6d69726162656c2e65732c444e532e3336313d7777772e6d6f686564617364656772616e6164696c6c612e65732c444e532e3336323d7777772e6d6f6e726f792e65732c444e532e3336333d7777772e6d6f6e74616e6368657a2e65732c444e532e3336343d7777772e6d6f6e74656865726d6f736f2e65732c444e532e3336353d7777772e6d6f72616c656a612e65732c444e532e3336363d7777772e6d6f7263696c6c6f2e65732c444e532e3336373d7777772e6e617661636f6e63656a6f2e65732c444e532e3336383d7777772e6e6176616c76696c6c6172646569626f722e65732c444e532e3336393d7777772e6e6176616c6d6f72616c64656c616d6174612e65732c444e532e3337303d7777772e6e6176617364656c6d6164726f6e6f2e65732c444e532e3337313d7777772e6e6176617472617369657272612e65732c444e532e3337323d7777772e6e6176657a75656c61732e65732c444e532e3337333d7777772e6e756e6f6d6f72616c2e65732c444e532e3337343d7777772e6f6c6976616465706c6173656e6369612e65732c444e532e3337353d7777772e70616c6f6d65726f2e65732c444e532e3337363d7777772e70617361726f6e64656c61766572612e65732c444e532e3337373d7777772e706564726f736f64656163696d2e65732c444e532e3337383d7777772e706572616c65646164656c616d6174612e65732c444e532e3337393d7777772e706572616c656461646573616e726f6d616e2e65732c444e532e3338303d7777772e706572616c657364656c70756572746f2e65732c444e532e3338313d7777772e7065736375657a612e65732c444e532e3338323d7777772e6c6170657367612e65732c444e532e3338333d7777772e70696564726173616c6261732e65732c444e532e3338343d7777772e70696e6f6672616e71756561646f2e65732c444e532e3338353d7777772e70696f726e616c2e65732c444e532e3338363d7777772e706c6173656e7a75656c612e65732c444e532e3338373d7777772e706f7274616a652e65732c444e532e3338383d7777772e706f7274657a75656c6f2e65732c444e532e3338393d7777772e706f7a75656c6f64657a61727a6f6e2e65732c444e532e3339303d7777772e707565626c6f6e7565766f64656d6972616d6f6e7465732e65732c444e532e3339313d7777772e70756572746f646573616e74616372757a2e65732c444e532e3339323d7777772e7265626f6c6c61722e65732c444e532e3339333d7777772e72696f6c6f626f732e65732c444e532e3339343d7777772e726f626c6564696c6c6f6465676174612e65732c444e532e3339353d7777772e726f626c6564696c6c6f64656c61766572612e65732c444e532e3339363d7777772e726f626c6564696c6c6f64657472756a696c6c6f2c444e532e3339373d7777772e726f626c65646f6c6c616e6f2e65732c444e532e3339383d7777772e726f6d616e676f72646f2e65732c444e532e3339393d7777772e7275616e65732e65732c444e532e3430303d7777772e73616c6f72696e6f2e65732c444e532e3430313d7777772e73616c7661746965727261646573616e746961676f2e65732c444e532e3430323d7777772e73616e6d617274696e646574726576656a6f2e65732c444e532e3430333d7777772e6179746f73616e7461616e612e65732c444e532e3430343d7777772e73616e74616372757a64656c617369657272612e65732c444e532e3430353d7777772e73616e74616372757a646570616e69616775612e65732c444e532e3430363d7777772e73616e74616d6172746164656d6167617363612e65732c444e532e3430373d7777772e73616e746961676f64656c63616d706f2e65732c444e532e3430383d7777772e73616e746962616e657a656c616c746f2e65732c444e532e3430393d7777772e73616e746962616e657a656c62616a6f2e65732c444e532e3431303d7777772e736175636564696c6c612e65732c444e532e3431313d7777772e7365677572616465746f726f2e65732c444e532e3431323d7777772e736572726164696c6c612e65732c444e532e3431333d7777772e73657272656a6f6e2e65732c444e532e3431343d7777772e73696572726164656675656e7465732e65732c444e532e3431353d7777772e74616c6176616e2e65732c444e532e3431363d7777772e74616c6176657275656c6164656c61766572612e65732c444e532e3431373d7777772e74616c617975656c612e65732c444e532e3431383d7777772e74656a65646164657469657461722e65732c444e532e3431393d7777772e746f72696c2e65732c444e532e3432303d7777772e746f726e6176616361732e65732c444e532e3432313d7777772e6179746f656c746f726e6f2e65732c444e532e3432323d7777772e746f72726563696c6c6164656c6f73616e67656c65732e65732c444e532e3432333d7777772e746f72726563696c6c617364656c6174696573612e65732c444e532e3432343d7777772e746f7272656465646f6e6d696775656c2e65732c444e532e3432353d7777772e746f727265646573616e74616d617269612e65732c444e532e3432363d7777772e746f7272656a6f6e656c727562696f2e65732c444e532e3432373d7777772e746f7272656a6f6e63696c6c6f2e65732c444e532e3432383d7777772e746f7272656d656e67612e65732c444e532e3432393d7777772e746f7272656d6f6368612e65732c444e532e3433303d7777772e746f7272656f7267617a2e65732c444e532e3433313d7777772e746f7272657175656d6164612e65732c444e532e3433323d7777772e76616c64617374696c6c61732e65732c444e532e3433333d7777772e76616c646563616e6173646574616a6f2e65732c444e532e3433343d7777772e76616c64656675656e7465732e65732c444e532e3433353d7777772e76616c646568756e6361722e65732c444e532e3433363d7777772e76616c6465696e69676f732e65732c444e532e3433373d7777772e76616c64656c6163617361646574616a6f2e65732c444e532e3433383d7777772e76616c64656d6f72616c65732e65732c444e532e3433393d7777772e76616c64656f626973706f2e65732c444e532e3434303d7777772e76616c646573616c6f722e65732c444e532e3434313d7777772e76616c72696f2e65732c444e532e3434323d7777772e76616c656e6369616465616c63616e746172612e65732c444e532e3434333d7777772e76616c766572646564656c61766572612e65732c444e532e3434343d7777772e76616c766572646564656c667265736e6f2e65732c444e532e3434353d7777772e766567617669616e612e65732c444e532e3434363d7777772e7669616e64617264656c61766572612e65732c444e532e3434373d7777772e76696c6c6164656c63616d706f2e65732c444e532e3434383d7777772e76696c6c6164656c7265792e65732c444e532e3434393d7777772e76696c6c616d65736961732e65732c444e532e3435303d7777772e76696c6c616d69656c2e65732c444e532e3435313d7777772e76696c6c616e7565766164656c617369657272612e65732c444e532e3435323d7777772e76696c6c617264656c706564726f736f2e65732c444e532e3435333d7777772e76696c6c61726465706c6173656e6369612e65732c444e532e3435343d7777772e76696c6c61736275656e61736465676174612e65732c444e532e3435353d7777772e7a61727a6164656772616e6164696c6c612e65732c444e532e3435363d7777772e7a61727a6164656d6f6e74616e6368657a2e65732c444e532e3435373d7777772e7a61727a616c616d61796f722e65732c444e532e3435383d7777772e7a6f726974612e65732c444e532e3435393d7777772e726f73616c656a6f2e65732c444e532e3436303d7777772e766567617669616e612e65732c444e532e3436313d7777772e616c61676f6e64656c72696f2e65732c444e532e3436323d7777772e7469657461722e65732c444e532e3436333d7777772e76616c646573616c6f722e65732c444e532e3436343d7777772e6e6176617472617369657272612e65732c444e532e3436353d7777772e7269766572616465667265736e65646f73612e65732c444e532e3436363d7777772e656c6d73616e67696c2e65732c444e532e3436373d7777772e74616a6f73616c6f722e65732c444e532e3436383d7777772e76616c6c65616d62726f7a2e65732c444e532e3436393d7777772e6d616e636f6d756e6964616476616c6c6564656c616c61676f6e2e65732c444e532e3437303d7777772e6d616e636f6d756e6964616476616c6c6564656c6a657274652e65732c444e532e3437313d7777772e6d616e636f6d756e696461647665676173616c7461732e65732c444e532e3437323d7777772e6d616e636f6d756e6964616464656c61766572612e65732c444e532e3437333d7777772e6d616e636f6d756e696461647a6f6e6163656e74726f2e65732c444e532e3437343d7777772e76696c6c7565726361732d69626f7265732d6a6172612e6573,EMAIL=webmaster@dip-caceres.es,CN=www.dip-caceres.es,OU=DIPUTACION PROVINCIAL DE CACERES,O=DIPUTACION PROVINCIAL DE CACERES,L=CACERES,ST=CACERES,C=ES", + .raw = {(void*)"\x30\x82\x31\x29\x31\x0b\x30\x09\x06\x03\x55\x04\x06\x13\x02\x45\x53\x31\x10\x30\x0e\x06\x03\x55\x04\x08\x13\x07\x43\x41\x43\x45\x52\x45\x53\x31\x10\x30\x0e\x06\x03\x55\x04\x07\x13\x07\x43\x41\x43\x45\x52\x45\x53\x31\x29\x30\x27\x06\x03\x55\x04\x0a\x13\x20\x44\x49\x50\x55\x54\x41\x43\x49\x4f\x4e\x20\x50\x52\x4f\x56\x49\x4e\x43\x49\x41\x4c\x20\x44\x45\x20\x43\x41\x43\x45\x52\x45\x53\x31\x29\x30\x27\x06\x03\x55\x04\x0b\x13\x20\x44\x49\x50\x55\x54\x41\x43\x49\x4f\x4e\x20\x50\x52\x4f\x56\x49\x4e\x43\x49\x41\x4c\x20\x44\x45\x20\x43\x41\x43\x45\x52\x45\x53\x31\x1b\x30\x19\x06\x03\x55\x04\x03\x13\x12\x77\x77\x77\x2e\x64\x69\x70\x2d\x63\x61\x63\x65\x72\x65\x73\x2e\x65\x73\x31\x27\x30\x25\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x09\x01\x16\x18\x77\x65\x62\x6d\x61\x73\x74\x65\x72\x40\x64\x69\x70\x2d\x63\x61\x63\x65\x72\x65\x73\x2e\x65\x73\x31\x82\x30\x58\x30\x82\x30\x54\x06\x03\x55\x1d\x11\x13\x82\x30\x4b\x44\x4e\x53\x2e\x31\x3d\x61\x62\x61\x64\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x3d\x61\x62\x65\x72\x74\x75\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x3d\x61\x63\x65\x62\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x3d\x61\x63\x65\x68\x75\x63\x68\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x35\x3d\x61\x63\x65\x69\x74\x75\x6e\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x36\x3d\x61\x68\x69\x67\x61\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x37\x3d\x61\x6c\x61\x67\x6f\x6e\x64\x65\x6c\x72\x69\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x38\x3d\x61\x6c\x63\x6f\x6c\x6c\x61\x72\x69\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x39\x3d\x61\x79\x74\x6f\x61\x6c\x62\x61\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x30\x3d\x61\x79\x74\x6f\x61\x6c\x63\x61\x6e\x74\x61\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x31\x3d\x61\x6c\x63\x75\x65\x73\x63\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x32\x3d\x61\x6c\x64\x65\x61\x63\x65\x6e\x74\x65\x6e\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x33\x3d\x61\x6c\x64\x65\x61\x64\x65\x6c\x63\x61\x6e\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x34\x3d\x6c\x61\x61\x6c\x64\x65\x61\x64\x65\x6c\x6f\x62\x69\x73\x70\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x35\x3d\x61\x6c\x64\x65\x61\x6e\x75\x65\x76\x61\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x36\x3d\x61\x6c\x64\x65\x61\x6e\x75\x65\x76\x61\x64\x65\x6c\x63\x61\x6d\x69\x6e\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x37\x3d\x61\x6c\x64\x65\x68\x75\x65\x6c\x61\x64\x65\x6c\x6a\x65\x72\x74\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x38\x3d\x61\x79\x74\x6f\x61\x6c\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x39\x3d\x61\x6c\x69\x73\x65\x64\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x30\x3d\x61\x6c\x6d\x61\x72\x61\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x31\x3d\x61\x6c\x6d\x6f\x68\x61\x72\x69\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x32\x3d\x61\x79\x74\x6f\x61\x72\x72\x6f\x79\x6f\x64\x65\x6c\x61\x6c\x75\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x33\x3d\x61\x72\x72\x6f\x79\x6f\x6d\x6f\x6c\x69\x6e\x6f\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x34\x3d\x61\x72\x72\x6f\x79\x6f\x6d\x6f\x6c\x69\x6e\x6f\x73\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x35\x3d\x62\x61\x6e\x6f\x73\x64\x65\x6d\x6f\x6e\x74\x65\x6d\x61\x79\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x36\x3d\x62\x61\x72\x72\x61\x64\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x37\x3d\x62\x65\x6c\x76\x69\x73\x64\x65\x6d\x6f\x6e\x72\x6f\x79\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x38\x3d\x62\x65\x6e\x71\x75\x65\x72\x65\x6e\x63\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x39\x3d\x62\x65\x72\x72\x6f\x63\x61\x6c\x65\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x30\x3d\x62\x65\x72\x7a\x6f\x63\x61\x6e\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x31\x3d\x62\x6f\x68\x6f\x6e\x61\x6c\x64\x65\x69\x62\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x32\x3d\x62\x6f\x74\x69\x6a\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x33\x3d\x62\x72\x6f\x7a\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x34\x3d\x63\x61\x62\x61\x6e\x61\x73\x64\x65\x6c\x63\x61\x73\x74\x69\x6c\x6c\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x35\x3d\x63\x61\x62\x65\x7a\x61\x62\x65\x6c\x6c\x6f\x73\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x36\x3d\x63\x61\x62\x65\x7a\x75\x65\x6c\x61\x64\x65\x6c\x76\x61\x6c\x6c\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x37\x3d\x63\x61\x62\x72\x65\x72\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x38\x3d\x63\x61\x63\x68\x6f\x72\x72\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x39\x3d\x63\x61\x64\x61\x6c\x73\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x30\x3d\x63\x61\x6c\x7a\x61\x64\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x31\x3d\x63\x61\x6d\x69\x6e\x6f\x6d\x6f\x72\x69\x73\x63\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x32\x3d\x63\x61\x6d\x70\x69\x6c\x6c\x6f\x64\x65\x64\x65\x6c\x65\x69\x74\x6f\x73\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x33\x3d\x63\x61\x6d\x70\x6f\x6c\x75\x67\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x34\x3d\x63\x61\x6e\x61\x6d\x65\x72\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x35\x3d\x63\x61\x6e\x61\x76\x65\x72\x61\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x36\x3d\x63\x61\x72\x62\x61\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x37\x3d\x63\x61\x72\x63\x61\x62\x6f\x73\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x38\x3d\x63\x61\x72\x72\x61\x73\x63\x61\x6c\x65\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x39\x3d\x63\x61\x73\x61\x72\x64\x65\x63\x61\x63\x65\x72\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x35\x30\x3d\x63\x61\x73\x61\x72\x64\x65\x70\x61\x6c\x6f\x6d\x65\x72\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x35\x31\x3d\x63\x61\x73\x61\x72\x65\x73\x64\x65\x6c\x61\x73\x68\x75\x72\x64\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x35\x32\x3d\x63\x61\x73\x61\x73\x64\x65\x64\x6f\x6e\x61\x6e\x74\x6f\x6e\x69\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x35\x33\x3d\x63\x61\x73\x61\x73\x64\x65\x64\x6f\x6e\x67\x6f\x6d\x65\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x35\x34\x3d\x63\x61\x73\x61\x73\x64\x65\x6c\x63\x61\x73\x74\x61\x6e\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x35\x35\x3d\x63\x61\x73\x61\x73\x64\x65\x6c\x6d\x6f\x6e\x74\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x35\x36\x3d\x63\x61\x73\x61\x73\x64\x65\x6d\x69\x6c\x6c\x61\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x35\x37\x3d\x63\x61\x73\x61\x73\x64\x65\x6d\x69\x72\x61\x76\x65\x74\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x35\x38\x3d\x63\x61\x73\x61\x74\x65\x6a\x61\x64\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x35\x39\x3d\x63\x61\x73\x69\x6c\x6c\x61\x73\x64\x65\x63\x6f\x72\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x36\x30\x3d\x63\x61\x73\x74\x61\x6e\x61\x72\x64\x65\x69\x62\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x36\x31\x3d\x63\x65\x63\x6c\x61\x76\x69\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x36\x32\x3d\x63\x65\x64\x69\x6c\x6c\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x36\x33\x3d\x63\x65\x72\x65\x7a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x36\x34\x3d\x63\x69\x6c\x6c\x65\x72\x6f\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x36\x35\x3d\x63\x6f\x6c\x6c\x61\x64\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x36\x36\x3d\x63\x6f\x6e\x71\x75\x69\x73\x74\x61\x64\x65\x6c\x61\x73\x69\x65\x72\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x36\x37\x3d\x63\x6f\x72\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x36\x38\x3d\x63\x75\x61\x63\x6f\x73\x64\x65\x79\x75\x73\x74\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x36\x39\x3d\x6c\x61\x63\x75\x6d\x62\x72\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x37\x30\x3d\x64\x65\x6c\x65\x69\x74\x6f\x73\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x37\x31\x3d\x64\x65\x73\x63\x61\x72\x67\x61\x6d\x61\x72\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x37\x32\x3d\x65\x6c\x6a\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x37\x33\x3d\x65\x73\x63\x75\x72\x69\x61\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x37\x34\x3d\x66\x72\x65\x73\x6e\x65\x64\x6f\x73\x6f\x64\x65\x69\x62\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x37\x35\x3d\x67\x61\x6c\x69\x73\x74\x65\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x37\x36\x3d\x67\x61\x72\x63\x69\x61\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x37\x37\x3d\x6c\x61\x67\x61\x72\x67\x61\x6e\x74\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x37\x38\x3d\x67\x61\x72\x67\x61\x6e\x74\x61\x6c\x61\x6f\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x37\x39\x3d\x67\x61\x72\x67\x61\x6e\x74\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x38\x30\x3d\x67\x61\x72\x67\x75\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x38\x31\x3d\x67\x61\x72\x72\x6f\x76\x69\x6c\x6c\x61\x73\x64\x65\x61\x6c\x63\x6f\x6e\x65\x74\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x38\x32\x3d\x67\x61\x72\x76\x69\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x38\x33\x3d\x67\x61\x74\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x38\x34\x3d\x61\x79\x74\x6f\x65\x6c\x67\x6f\x72\x64\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x38\x35\x3d\x6c\x61\x67\x72\x61\x6e\x6a\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x38\x36\x3d\x6c\x61\x67\x72\x61\x6e\x6a\x61\x64\x65\x67\x72\x61\x6e\x61\x64\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x38\x37\x3d\x61\x79\x75\x6e\x74\x61\x6d\x69\x65\x6e\x74\x6f\x64\x65\x67\x75\x61\x64\x61\x6c\x75\x70\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x38\x38\x3d\x67\x75\x69\x6a\x6f\x64\x65\x63\x6f\x72\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x38\x39\x3d\x67\x75\x69\x6a\x6f\x64\x65\x67\x61\x6c\x69\x73\x74\x65\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x39\x30\x3d\x67\x75\x69\x6a\x6f\x64\x65\x67\x72\x61\x6e\x61\x64\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x39\x31\x3d\x67\x75\x69\x6a\x6f\x64\x65\x73\x61\x6e\x74\x61\x62\x61\x72\x62\x61\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x39\x32\x3d\x68\x65\x72\x67\x75\x69\x6a\x75\x65\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x39\x33\x3d\x68\x65\x72\x6e\x61\x6e\x70\x65\x72\x65\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x39\x34\x3d\x68\x65\x72\x72\x65\x72\x61\x64\x65\x61\x6c\x63\x61\x6e\x74\x61\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x39\x35\x3d\x68\x65\x72\x72\x65\x72\x75\x65\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x39\x36\x3d\x68\x65\x72\x76\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x39\x37\x3d\x68\x69\x67\x75\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x39\x38\x3d\x68\x69\x6e\x6f\x6a\x61\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x39\x39\x3d\x68\x6f\x6c\x67\x75\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x30\x30\x3d\x68\x6f\x79\x6f\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x30\x31\x3d\x68\x75\x65\x6c\x61\x67\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x30\x32\x3d\x69\x62\x61\x68\x65\x72\x6e\x61\x6e\x64\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x30\x33\x3d\x6a\x61\x72\x61\x69\x63\x65\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x30\x34\x3d\x6a\x61\x72\x61\x69\x7a\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x30\x35\x3d\x6a\x61\x72\x61\x6e\x64\x69\x6c\x6c\x61\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x30\x36\x3d\x6a\x61\x72\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x30\x37\x3d\x6a\x65\x72\x74\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x30\x38\x3d\x6c\x61\x64\x72\x69\x6c\x6c\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x30\x39\x3d\x6c\x6f\x67\x72\x6f\x73\x61\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x31\x30\x3d\x6c\x6f\x73\x61\x72\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x31\x31\x3d\x6d\x61\x64\x72\x69\x67\x61\x6c\x65\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x31\x32\x3d\x6d\x61\x64\x72\x69\x67\x61\x6c\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x31\x33\x3d\x6d\x61\x64\x72\x6f\x6e\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x31\x34\x3d\x6d\x61\x6a\x61\x64\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x31\x35\x3d\x6d\x61\x6c\x70\x61\x72\x74\x69\x64\x61\x64\x65\x63\x61\x63\x65\x72\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x31\x36\x3d\x6d\x61\x6c\x70\x61\x72\x74\x69\x64\x61\x64\x65\x70\x6c\x61\x73\x65\x6e\x63\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x31\x37\x3d\x6d\x61\x72\x63\x68\x61\x67\x61\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x31\x38\x3d\x6d\x61\x74\x61\x64\x65\x61\x6c\x63\x61\x6e\x74\x61\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x31\x39\x3d\x6d\x65\x6d\x62\x72\x69\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x32\x30\x3d\x6d\x65\x73\x61\x73\x64\x65\x69\x62\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x32\x31\x3d\x6d\x69\x61\x6a\x61\x64\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x32\x32\x3d\x6d\x69\x6c\x6c\x61\x6e\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x32\x33\x3d\x6d\x69\x72\x61\x62\x65\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x32\x34\x3d\x6d\x6f\x68\x65\x64\x61\x73\x64\x65\x67\x72\x61\x6e\x61\x64\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x32\x35\x3d\x6d\x6f\x6e\x72\x6f\x79\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x32\x36\x3d\x6d\x6f\x6e\x74\x61\x6e\x63\x68\x65\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x32\x37\x3d\x6d\x6f\x6e\x74\x65\x68\x65\x72\x6d\x6f\x73\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x32\x38\x3d\x6d\x6f\x72\x61\x6c\x65\x6a\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x32\x39\x3d\x6d\x6f\x72\x63\x69\x6c\x6c\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x33\x30\x3d\x6e\x61\x76\x61\x63\x6f\x6e\x63\x65\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x33\x31\x3d\x6e\x61\x76\x61\x6c\x76\x69\x6c\x6c\x61\x72\x64\x65\x69\x62\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x33\x32\x3d\x6e\x61\x76\x61\x6c\x6d\x6f\x72\x61\x6c\x64\x65\x6c\x61\x6d\x61\x74\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x33\x33\x3d\x6e\x61\x76\x61\x73\x64\x65\x6c\x6d\x61\x64\x72\x6f\x6e\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x33\x34\x3d\x6e\x61\x76\x61\x74\x72\x61\x73\x69\x65\x72\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x33\x35\x3d\x6e\x61\x76\x65\x7a\x75\x65\x6c\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x33\x36\x3d\x6e\x75\x6e\x6f\x6d\x6f\x72\x61\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x33\x37\x3d\x6f\x6c\x69\x76\x61\x64\x65\x70\x6c\x61\x73\x65\x6e\x63\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x33\x38\x3d\x70\x61\x6c\x6f\x6d\x65\x72\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x33\x39\x3d\x70\x61\x73\x61\x72\x6f\x6e\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x34\x30\x3d\x70\x65\x64\x72\x6f\x73\x6f\x64\x65\x61\x63\x69\x6d\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x34\x31\x3d\x70\x65\x72\x61\x6c\x65\x64\x61\x64\x65\x6c\x61\x6d\x61\x74\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x34\x32\x3d\x70\x65\x72\x61\x6c\x65\x64\x61\x64\x65\x73\x61\x6e\x72\x6f\x6d\x61\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x34\x33\x3d\x70\x65\x72\x61\x6c\x65\x73\x64\x65\x6c\x70\x75\x65\x72\x74\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x34\x34\x3d\x70\x65\x73\x63\x75\x65\x7a\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x34\x35\x3d\x6c\x61\x70\x65\x73\x67\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x34\x36\x3d\x70\x69\x65\x64\x72\x61\x73\x61\x6c\x62\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x34\x37\x3d\x70\x69\x6e\x6f\x66\x72\x61\x6e\x71\x75\x65\x61\x64\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x34\x38\x3d\x70\x69\x6f\x72\x6e\x61\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x34\x39\x3d\x70\x6c\x61\x73\x65\x6e\x7a\x75\x65\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x35\x30\x3d\x70\x6f\x72\x74\x61\x6a\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x35\x31\x3d\x70\x6f\x72\x74\x65\x7a\x75\x65\x6c\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x35\x32\x3d\x70\x6f\x7a\x75\x65\x6c\x6f\x64\x65\x7a\x61\x72\x7a\x6f\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x35\x33\x3d\x70\x75\x65\x62\x6c\x6f\x6e\x75\x65\x76\x6f\x64\x65\x6d\x69\x72\x61\x6d\x6f\x6e\x74\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x35\x34\x3d\x70\x75\x65\x72\x74\x6f\x64\x65\x73\x61\x6e\x74\x61\x63\x72\x75\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x35\x35\x3d\x72\x65\x62\x6f\x6c\x6c\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x35\x36\x3d\x72\x69\x6f\x6c\x6f\x62\x6f\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x35\x37\x3d\x72\x6f\x62\x6c\x65\x64\x69\x6c\x6c\x6f\x64\x65\x67\x61\x74\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x35\x38\x3d\x72\x6f\x62\x6c\x65\x64\x69\x6c\x6c\x6f\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x35\x39\x3d\x72\x6f\x62\x6c\x65\x64\x69\x6c\x6c\x6f\x64\x65\x74\x72\x75\x6a\x69\x6c\x6c\x6f\x2c\x44\x4e\x53\x2e\x31\x36\x30\x3d\x72\x6f\x62\x6c\x65\x64\x6f\x6c\x6c\x61\x6e\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x36\x31\x3d\x72\x6f\x6d\x61\x6e\x67\x6f\x72\x64\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x36\x32\x3d\x72\x75\x61\x6e\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x36\x33\x3d\x73\x61\x6c\x6f\x72\x69\x6e\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x36\x34\x3d\x73\x61\x6c\x76\x61\x74\x69\x65\x72\x72\x61\x64\x65\x73\x61\x6e\x74\x69\x61\x67\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x36\x35\x3d\x73\x61\x6e\x6d\x61\x72\x74\x69\x6e\x64\x65\x74\x72\x65\x76\x65\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x36\x36\x3d\x61\x79\x74\x6f\x73\x61\x6e\x74\x61\x61\x6e\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x36\x37\x3d\x73\x61\x6e\x74\x61\x63\x72\x75\x7a\x64\x65\x6c\x61\x73\x69\x65\x72\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x36\x38\x3d\x73\x61\x6e\x74\x61\x63\x72\x75\x7a\x64\x65\x70\x61\x6e\x69\x61\x67\x75\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x36\x39\x3d\x73\x61\x6e\x74\x61\x6d\x61\x72\x74\x61\x64\x65\x6d\x61\x67\x61\x73\x63\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x37\x30\x3d\x73\x61\x6e\x74\x69\x61\x67\x6f\x64\x65\x6c\x63\x61\x6d\x70\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x37\x31\x3d\x73\x61\x6e\x74\x69\x62\x61\x6e\x65\x7a\x65\x6c\x61\x6c\x74\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x37\x32\x3d\x73\x61\x6e\x74\x69\x62\x61\x6e\x65\x7a\x65\x6c\x62\x61\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x37\x33\x3d\x73\x61\x75\x63\x65\x64\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x37\x34\x3d\x73\x65\x67\x75\x72\x61\x64\x65\x74\x6f\x72\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x37\x35\x3d\x73\x65\x72\x72\x61\x64\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x37\x36\x3d\x73\x65\x72\x72\x65\x6a\x6f\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x37\x37\x3d\x73\x69\x65\x72\x72\x61\x64\x65\x66\x75\x65\x6e\x74\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x37\x38\x3d\x74\x61\x6c\x61\x76\x61\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x37\x39\x3d\x74\x61\x6c\x61\x76\x65\x72\x75\x65\x6c\x61\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x38\x30\x3d\x74\x61\x6c\x61\x79\x75\x65\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x38\x31\x3d\x74\x65\x6a\x65\x64\x61\x64\x65\x74\x69\x65\x74\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x38\x32\x3d\x74\x6f\x72\x69\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x38\x33\x3d\x74\x6f\x72\x6e\x61\x76\x61\x63\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x38\x34\x3d\x61\x79\x74\x6f\x65\x6c\x74\x6f\x72\x6e\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x38\x35\x3d\x74\x6f\x72\x72\x65\x63\x69\x6c\x6c\x61\x64\x65\x6c\x6f\x73\x61\x6e\x67\x65\x6c\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x38\x36\x3d\x74\x6f\x72\x72\x65\x63\x69\x6c\x6c\x61\x73\x64\x65\x6c\x61\x74\x69\x65\x73\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x38\x37\x3d\x74\x6f\x72\x72\x65\x64\x65\x64\x6f\x6e\x6d\x69\x67\x75\x65\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x38\x38\x3d\x74\x6f\x72\x72\x65\x64\x65\x73\x61\x6e\x74\x61\x6d\x61\x72\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x38\x39\x3d\x74\x6f\x72\x72\x65\x6a\x6f\x6e\x65\x6c\x72\x75\x62\x69\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x39\x30\x3d\x74\x6f\x72\x72\x65\x6a\x6f\x6e\x63\x69\x6c\x6c\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x39\x31\x3d\x74\x6f\x72\x72\x65\x6d\x65\x6e\x67\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x39\x32\x3d\x74\x6f\x72\x72\x65\x6d\x6f\x63\x68\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x39\x33\x3d\x74\x6f\x72\x72\x65\x6f\x72\x67\x61\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x39\x34\x3d\x74\x6f\x72\x72\x65\x71\x75\x65\x6d\x61\x64\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x39\x35\x3d\x76\x61\x6c\x64\x61\x73\x74\x69\x6c\x6c\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x39\x36\x3d\x76\x61\x6c\x64\x65\x63\x61\x6e\x61\x73\x64\x65\x74\x61\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x39\x37\x3d\x76\x61\x6c\x64\x65\x66\x75\x65\x6e\x74\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x39\x38\x3d\x76\x61\x6c\x64\x65\x68\x75\x6e\x63\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x31\x39\x39\x3d\x76\x61\x6c\x64\x65\x69\x6e\x69\x67\x6f\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x30\x30\x3d\x76\x61\x6c\x64\x65\x6c\x61\x63\x61\x73\x61\x64\x65\x74\x61\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x30\x31\x3d\x76\x61\x6c\x64\x65\x6d\x6f\x72\x61\x6c\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x30\x32\x3d\x76\x61\x6c\x64\x65\x6f\x62\x69\x73\x70\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x30\x33\x3d\x76\x61\x6c\x64\x65\x73\x61\x6c\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x30\x34\x3d\x76\x61\x6c\x72\x69\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x30\x35\x3d\x76\x61\x6c\x65\x6e\x63\x69\x61\x64\x65\x61\x6c\x63\x61\x6e\x74\x61\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x30\x36\x3d\x76\x61\x6c\x76\x65\x72\x64\x65\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x30\x37\x3d\x76\x61\x6c\x76\x65\x72\x64\x65\x64\x65\x6c\x66\x72\x65\x73\x6e\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x30\x38\x3d\x76\x65\x67\x61\x76\x69\x61\x6e\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x30\x39\x3d\x76\x69\x61\x6e\x64\x61\x72\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x31\x30\x3d\x76\x69\x6c\x6c\x61\x64\x65\x6c\x63\x61\x6d\x70\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x31\x31\x3d\x76\x69\x6c\x6c\x61\x64\x65\x6c\x72\x65\x79\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x31\x32\x3d\x76\x69\x6c\x6c\x61\x6d\x65\x73\x69\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x31\x33\x3d\x76\x69\x6c\x6c\x61\x6d\x69\x65\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x31\x34\x3d\x76\x69\x6c\x6c\x61\x6e\x75\x65\x76\x61\x64\x65\x6c\x61\x73\x69\x65\x72\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x31\x35\x3d\x76\x69\x6c\x6c\x61\x72\x64\x65\x6c\x70\x65\x64\x72\x6f\x73\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x31\x36\x3d\x76\x69\x6c\x6c\x61\x72\x64\x65\x70\x6c\x61\x73\x65\x6e\x63\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x31\x37\x3d\x76\x69\x6c\x6c\x61\x73\x62\x75\x65\x6e\x61\x73\x64\x65\x67\x61\x74\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x31\x38\x3d\x7a\x61\x72\x7a\x61\x64\x65\x67\x72\x61\x6e\x61\x64\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x31\x39\x3d\x7a\x61\x72\x7a\x61\x64\x65\x6d\x6f\x6e\x74\x61\x6e\x63\x68\x65\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x32\x30\x3d\x7a\x61\x72\x7a\x61\x6c\x61\x6d\x61\x79\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x32\x31\x3d\x7a\x6f\x72\x69\x74\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x32\x32\x3d\x72\x6f\x73\x61\x6c\x65\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x32\x33\x3d\x76\x65\x67\x61\x76\x69\x61\x6e\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x32\x34\x3d\x61\x6c\x61\x67\x6f\x6e\x64\x65\x6c\x72\x69\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x32\x35\x3d\x74\x69\x65\x74\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x32\x36\x3d\x76\x61\x6c\x64\x65\x73\x61\x6c\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x32\x37\x3d\x6e\x61\x76\x61\x74\x72\x61\x73\x69\x65\x72\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x32\x38\x3d\x72\x69\x76\x65\x72\x61\x64\x65\x66\x72\x65\x73\x6e\x65\x64\x6f\x73\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x32\x39\x3d\x65\x6c\x6d\x73\x61\x6e\x67\x69\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x33\x30\x3d\x74\x61\x6a\x6f\x73\x61\x6c\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x33\x31\x3d\x76\x61\x6c\x6c\x65\x61\x6d\x62\x72\x6f\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x33\x32\x3d\x6d\x61\x6e\x63\x6f\x6d\x75\x6e\x69\x64\x61\x64\x76\x61\x6c\x6c\x65\x64\x65\x6c\x61\x6c\x61\x67\x6f\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x33\x33\x3d\x6d\x61\x6e\x63\x6f\x6d\x75\x6e\x69\x64\x61\x64\x76\x61\x6c\x6c\x65\x64\x65\x6c\x6a\x65\x72\x74\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x33\x34\x3d\x6d\x61\x6e\x63\x6f\x6d\x75\x6e\x69\x64\x61\x64\x76\x65\x67\x61\x73\x61\x6c\x74\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x33\x35\x3d\x6d\x61\x6e\x63\x6f\x6d\x75\x6e\x69\x64\x61\x64\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x33\x36\x3d\x6d\x61\x6e\x63\x6f\x6d\x75\x6e\x69\x64\x61\x64\x7a\x6f\x6e\x61\x63\x65\x6e\x74\x72\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x33\x37\x3d\x76\x69\x6c\x6c\x75\x65\x72\x63\x61\x73\x2d\x69\x62\x6f\x72\x65\x73\x2d\x6a\x61\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x33\x38\x3d\x77\x77\x77\x2e\x61\x62\x61\x64\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x33\x39\x3d\x77\x77\x77\x2e\x61\x62\x65\x72\x74\x75\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x34\x30\x3d\x77\x77\x77\x2e\x61\x63\x65\x62\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x34\x31\x3d\x77\x77\x77\x2e\x61\x63\x65\x68\x75\x63\x68\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x34\x32\x3d\x77\x77\x77\x2e\x61\x63\x65\x69\x74\x75\x6e\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x34\x33\x3d\x77\x77\x77\x2e\x61\x68\x69\x67\x61\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x34\x34\x3d\x77\x77\x77\x2e\x61\x6c\x61\x67\x6f\x6e\x64\x65\x6c\x72\x69\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x34\x35\x3d\x77\x77\x77\x2e\x61\x6c\x63\x6f\x6c\x6c\x61\x72\x69\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x34\x36\x3d\x77\x77\x77\x2e\x61\x79\x74\x6f\x61\x6c\x62\x61\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x34\x37\x3d\x77\x77\x77\x2e\x61\x79\x74\x6f\x61\x6c\x63\x61\x6e\x74\x61\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x34\x38\x3d\x77\x77\x77\x2e\x61\x6c\x63\x75\x65\x73\x63\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x34\x39\x3d\x77\x77\x77\x2e\x61\x6c\x64\x65\x61\x63\x65\x6e\x74\x65\x6e\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x35\x30\x3d\x77\x77\x77\x2e\x61\x6c\x64\x65\x61\x64\x65\x6c\x63\x61\x6e\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x35\x31\x3d\x77\x77\x77\x2e\x6c\x61\x61\x6c\x64\x65\x61\x64\x65\x6c\x6f\x62\x69\x73\x70\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x35\x32\x3d\x77\x77\x77\x2e\x61\x6c\x64\x65\x61\x6e\x75\x65\x76\x61\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x35\x33\x3d\x77\x77\x77\x2e\x61\x6c\x64\x65\x61\x6e\x75\x65\x76\x61\x64\x65\x6c\x63\x61\x6d\x69\x6e\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x35\x34\x3d\x77\x77\x77\x2e\x61\x6c\x64\x65\x68\x75\x65\x6c\x61\x64\x65\x6c\x6a\x65\x72\x74\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x35\x35\x3d\x77\x77\x77\x2e\x61\x79\x74\x6f\x61\x6c\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x35\x36\x3d\x77\x77\x77\x2e\x61\x6c\x69\x73\x65\x64\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x35\x37\x3d\x77\x77\x77\x2e\x61\x6c\x6d\x61\x72\x61\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x35\x38\x3d\x77\x77\x77\x2e\x61\x6c\x6d\x6f\x68\x61\x72\x69\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x35\x39\x3d\x77\x77\x77\x2e\x61\x79\x74\x6f\x61\x72\x72\x6f\x79\x6f\x64\x65\x6c\x61\x6c\x75\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x36\x30\x3d\x77\x77\x77\x2e\x61\x72\x72\x6f\x79\x6f\x6d\x6f\x6c\x69\x6e\x6f\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x36\x31\x3d\x77\x77\x77\x2e\x61\x72\x72\x6f\x79\x6f\x6d\x6f\x6c\x69\x6e\x6f\x73\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x36\x32\x3d\x77\x77\x77\x2e\x62\x61\x6e\x6f\x73\x64\x65\x6d\x6f\x6e\x74\x65\x6d\x61\x79\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x36\x33\x3d\x77\x77\x77\x2e\x62\x61\x72\x72\x61\x64\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x36\x34\x3d\x77\x77\x77\x2e\x62\x65\x6c\x76\x69\x73\x64\x65\x6d\x6f\x6e\x72\x6f\x79\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x36\x35\x3d\x77\x77\x77\x2e\x62\x65\x6e\x71\x75\x65\x72\x65\x6e\x63\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x36\x36\x3d\x77\x77\x77\x2e\x62\x65\x72\x72\x6f\x63\x61\x6c\x65\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x36\x37\x3d\x77\x77\x77\x2e\x62\x65\x72\x7a\x6f\x63\x61\x6e\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x36\x38\x3d\x77\x77\x77\x2e\x62\x6f\x68\x6f\x6e\x61\x6c\x64\x65\x69\x62\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x36\x39\x3d\x77\x77\x77\x2e\x62\x6f\x74\x69\x6a\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x37\x30\x3d\x77\x77\x77\x2e\x62\x72\x6f\x7a\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x37\x31\x3d\x77\x77\x77\x2e\x63\x61\x62\x61\x6e\x61\x73\x64\x65\x6c\x63\x61\x73\x74\x69\x6c\x6c\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x37\x32\x3d\x77\x77\x77\x2e\x63\x61\x62\x65\x7a\x61\x62\x65\x6c\x6c\x6f\x73\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x37\x33\x3d\x77\x77\x77\x2e\x63\x61\x62\x65\x7a\x75\x65\x6c\x61\x64\x65\x6c\x76\x61\x6c\x6c\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x37\x34\x3d\x77\x77\x77\x2e\x63\x61\x62\x72\x65\x72\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x37\x35\x3d\x77\x77\x77\x2e\x63\x61\x63\x68\x6f\x72\x72\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x37\x36\x3d\x77\x77\x77\x2e\x63\x61\x64\x61\x6c\x73\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x37\x37\x3d\x77\x77\x77\x2e\x63\x61\x6c\x7a\x61\x64\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x37\x38\x3d\x77\x77\x77\x2e\x63\x61\x6d\x69\x6e\x6f\x6d\x6f\x72\x69\x73\x63\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x37\x39\x3d\x77\x77\x77\x2e\x63\x61\x6d\x70\x69\x6c\x6c\x6f\x64\x65\x64\x65\x6c\x65\x69\x74\x6f\x73\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x38\x30\x3d\x77\x77\x77\x2e\x63\x61\x6d\x70\x6f\x6c\x75\x67\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x38\x31\x3d\x77\x77\x77\x2e\x63\x61\x6e\x61\x6d\x65\x72\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x38\x32\x3d\x77\x77\x77\x2e\x63\x61\x6e\x61\x76\x65\x72\x61\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x38\x33\x3d\x77\x77\x77\x2e\x63\x61\x72\x62\x61\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x38\x34\x3d\x77\x77\x77\x2e\x63\x61\x72\x63\x61\x62\x6f\x73\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x38\x35\x3d\x77\x77\x77\x2e\x63\x61\x72\x72\x61\x73\x63\x61\x6c\x65\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x38\x36\x3d\x77\x77\x77\x2e\x63\x61\x73\x61\x72\x64\x65\x63\x61\x63\x65\x72\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x38\x37\x3d\x77\x77\x77\x2e\x63\x61\x73\x61\x72\x64\x65\x70\x61\x6c\x6f\x6d\x65\x72\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x38\x38\x3d\x77\x77\x77\x2e\x63\x61\x73\x61\x72\x65\x73\x64\x65\x6c\x61\x73\x68\x75\x72\x64\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x38\x39\x3d\x77\x77\x77\x2e\x63\x61\x73\x61\x73\x64\x65\x64\x6f\x6e\x61\x6e\x74\x6f\x6e\x69\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x39\x30\x3d\x77\x77\x77\x2e\x63\x61\x73\x61\x73\x64\x65\x64\x6f\x6e\x67\x6f\x6d\x65\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x39\x31\x3d\x77\x77\x77\x2e\x63\x61\x73\x61\x73\x64\x65\x6c\x63\x61\x73\x74\x61\x6e\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x39\x32\x3d\x77\x77\x77\x2e\x63\x61\x73\x61\x73\x64\x65\x6c\x6d\x6f\x6e\x74\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x39\x33\x3d\x77\x77\x77\x2e\x63\x61\x73\x61\x73\x64\x65\x6d\x69\x6c\x6c\x61\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x39\x34\x3d\x77\x77\x77\x2e\x63\x61\x73\x61\x73\x64\x65\x6d\x69\x72\x61\x76\x65\x74\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x39\x35\x3d\x77\x77\x77\x2e\x63\x61\x73\x61\x74\x65\x6a\x61\x64\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x39\x36\x3d\x77\x77\x77\x2e\x63\x61\x73\x69\x6c\x6c\x61\x73\x64\x65\x63\x6f\x72\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x39\x37\x3d\x77\x77\x77\x2e\x63\x61\x73\x74\x61\x6e\x61\x72\x64\x65\x69\x62\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x39\x38\x3d\x77\x77\x77\x2e\x63\x65\x63\x6c\x61\x76\x69\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x32\x39\x39\x3d\x77\x77\x77\x2e\x63\x65\x64\x69\x6c\x6c\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x30\x30\x3d\x77\x77\x77\x2e\x63\x65\x72\x65\x7a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x30\x31\x3d\x77\x77\x77\x2e\x63\x69\x6c\x6c\x65\x72\x6f\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x30\x32\x3d\x77\x77\x77\x2e\x63\x6f\x6c\x6c\x61\x64\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x30\x33\x3d\x77\x77\x77\x2e\x63\x6f\x6e\x71\x75\x69\x73\x74\x61\x64\x65\x6c\x61\x73\x69\x65\x72\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x30\x34\x3d\x77\x77\x77\x2e\x63\x6f\x72\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x30\x35\x3d\x77\x77\x77\x2e\x63\x75\x61\x63\x6f\x73\x64\x65\x79\x75\x73\x74\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x30\x36\x3d\x77\x77\x77\x2e\x6c\x61\x63\x75\x6d\x62\x72\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x30\x37\x3d\x77\x77\x77\x2e\x64\x65\x6c\x65\x69\x74\x6f\x73\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x30\x38\x3d\x77\x77\x77\x2e\x64\x65\x73\x63\x61\x72\x67\x61\x6d\x61\x72\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x30\x39\x3d\x77\x77\x77\x2e\x65\x6c\x6a\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x31\x30\x3d\x77\x77\x77\x2e\x65\x73\x63\x75\x72\x69\x61\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x31\x31\x3d\x77\x77\x77\x2e\x66\x72\x65\x73\x6e\x65\x64\x6f\x73\x6f\x64\x65\x69\x62\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x31\x32\x3d\x77\x77\x77\x2e\x67\x61\x6c\x69\x73\x74\x65\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x31\x33\x3d\x77\x77\x77\x2e\x67\x61\x72\x63\x69\x61\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x31\x34\x3d\x77\x77\x77\x2e\x6c\x61\x67\x61\x72\x67\x61\x6e\x74\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x31\x35\x3d\x77\x77\x77\x2e\x67\x61\x72\x67\x61\x6e\x74\x61\x6c\x61\x6f\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x31\x36\x3d\x77\x77\x77\x2e\x67\x61\x72\x67\x61\x6e\x74\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x31\x37\x3d\x77\x77\x77\x2e\x67\x61\x72\x67\x75\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x31\x38\x3d\x77\x77\x77\x2e\x67\x61\x72\x72\x6f\x76\x69\x6c\x6c\x61\x73\x64\x65\x61\x6c\x63\x6f\x6e\x65\x74\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x31\x39\x3d\x77\x77\x77\x2e\x67\x61\x72\x76\x69\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x32\x30\x3d\x77\x77\x77\x2e\x67\x61\x74\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x32\x31\x3d\x77\x77\x77\x2e\x61\x79\x74\x6f\x65\x6c\x67\x6f\x72\x64\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x32\x32\x3d\x77\x77\x77\x2e\x6c\x61\x67\x72\x61\x6e\x6a\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x32\x33\x3d\x77\x77\x77\x2e\x6c\x61\x67\x72\x61\x6e\x6a\x61\x64\x65\x67\x72\x61\x6e\x61\x64\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x32\x34\x3d\x77\x77\x77\x2e\x61\x79\x75\x6e\x74\x61\x6d\x69\x65\x6e\x74\x6f\x64\x65\x67\x75\x61\x64\x61\x6c\x75\x70\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x32\x35\x3d\x77\x77\x77\x2e\x67\x75\x69\x6a\x6f\x64\x65\x63\x6f\x72\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x32\x36\x3d\x77\x77\x77\x2e\x67\x75\x69\x6a\x6f\x64\x65\x67\x61\x6c\x69\x73\x74\x65\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x32\x37\x3d\x77\x77\x77\x2e\x67\x75\x69\x6a\x6f\x64\x65\x67\x72\x61\x6e\x61\x64\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x32\x38\x3d\x77\x77\x77\x2e\x67\x75\x69\x6a\x6f\x64\x65\x73\x61\x6e\x74\x61\x62\x61\x72\x62\x61\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x32\x39\x3d\x77\x77\x77\x2e\x68\x65\x72\x67\x75\x69\x6a\x75\x65\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x33\x30\x3d\x77\x77\x77\x2e\x68\x65\x72\x6e\x61\x6e\x70\x65\x72\x65\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x33\x31\x3d\x77\x77\x77\x2e\x68\x65\x72\x72\x65\x72\x61\x64\x65\x61\x6c\x63\x61\x6e\x74\x61\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x33\x32\x3d\x77\x77\x77\x2e\x68\x65\x72\x72\x65\x72\x75\x65\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x33\x33\x3d\x77\x77\x77\x2e\x68\x65\x72\x76\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x33\x34\x3d\x77\x77\x77\x2e\x68\x69\x67\x75\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x33\x35\x3d\x77\x77\x77\x2e\x68\x69\x6e\x6f\x6a\x61\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x33\x36\x3d\x77\x77\x77\x2e\x68\x6f\x6c\x67\x75\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x33\x37\x3d\x77\x77\x77\x2e\x68\x6f\x79\x6f\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x33\x38\x3d\x77\x77\x77\x2e\x68\x75\x65\x6c\x61\x67\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x33\x39\x3d\x77\x77\x77\x2e\x69\x62\x61\x68\x65\x72\x6e\x61\x6e\x64\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x34\x30\x3d\x77\x77\x77\x2e\x6a\x61\x72\x61\x69\x63\x65\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x34\x31\x3d\x77\x77\x77\x2e\x6a\x61\x72\x61\x69\x7a\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x34\x32\x3d\x77\x77\x77\x2e\x6a\x61\x72\x61\x6e\x64\x69\x6c\x6c\x61\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x34\x33\x3d\x77\x77\x77\x2e\x6a\x61\x72\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x34\x34\x3d\x77\x77\x77\x2e\x6a\x65\x72\x74\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x34\x35\x3d\x77\x77\x77\x2e\x6c\x61\x64\x72\x69\x6c\x6c\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x34\x36\x3d\x77\x77\x77\x2e\x6c\x6f\x67\x72\x6f\x73\x61\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x34\x37\x3d\x77\x77\x77\x2e\x6c\x6f\x73\x61\x72\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x34\x38\x3d\x77\x77\x77\x2e\x6d\x61\x64\x72\x69\x67\x61\x6c\x65\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x34\x39\x3d\x77\x77\x77\x2e\x6d\x61\x64\x72\x69\x67\x61\x6c\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x35\x30\x3d\x77\x77\x77\x2e\x6d\x61\x64\x72\x6f\x6e\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x35\x31\x3d\x77\x77\x77\x2e\x6d\x61\x6a\x61\x64\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x35\x32\x3d\x77\x77\x77\x2e\x6d\x61\x6c\x70\x61\x72\x74\x69\x64\x61\x64\x65\x63\x61\x63\x65\x72\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x35\x33\x3d\x77\x77\x77\x2e\x6d\x61\x6c\x70\x61\x72\x74\x69\x64\x61\x64\x65\x70\x6c\x61\x73\x65\x6e\x63\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x35\x34\x3d\x77\x77\x77\x2e\x6d\x61\x72\x63\x68\x61\x67\x61\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x35\x35\x3d\x77\x77\x77\x2e\x6d\x61\x74\x61\x64\x65\x61\x6c\x63\x61\x6e\x74\x61\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x35\x36\x3d\x77\x77\x77\x2e\x6d\x65\x6d\x62\x72\x69\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x35\x37\x3d\x77\x77\x77\x2e\x6d\x65\x73\x61\x73\x64\x65\x69\x62\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x35\x38\x3d\x77\x77\x77\x2e\x6d\x69\x61\x6a\x61\x64\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x35\x39\x3d\x77\x77\x77\x2e\x6d\x69\x6c\x6c\x61\x6e\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x36\x30\x3d\x77\x77\x77\x2e\x6d\x69\x72\x61\x62\x65\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x36\x31\x3d\x77\x77\x77\x2e\x6d\x6f\x68\x65\x64\x61\x73\x64\x65\x67\x72\x61\x6e\x61\x64\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x36\x32\x3d\x77\x77\x77\x2e\x6d\x6f\x6e\x72\x6f\x79\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x36\x33\x3d\x77\x77\x77\x2e\x6d\x6f\x6e\x74\x61\x6e\x63\x68\x65\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x36\x34\x3d\x77\x77\x77\x2e\x6d\x6f\x6e\x74\x65\x68\x65\x72\x6d\x6f\x73\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x36\x35\x3d\x77\x77\x77\x2e\x6d\x6f\x72\x61\x6c\x65\x6a\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x36\x36\x3d\x77\x77\x77\x2e\x6d\x6f\x72\x63\x69\x6c\x6c\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x36\x37\x3d\x77\x77\x77\x2e\x6e\x61\x76\x61\x63\x6f\x6e\x63\x65\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x36\x38\x3d\x77\x77\x77\x2e\x6e\x61\x76\x61\x6c\x76\x69\x6c\x6c\x61\x72\x64\x65\x69\x62\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x36\x39\x3d\x77\x77\x77\x2e\x6e\x61\x76\x61\x6c\x6d\x6f\x72\x61\x6c\x64\x65\x6c\x61\x6d\x61\x74\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x37\x30\x3d\x77\x77\x77\x2e\x6e\x61\x76\x61\x73\x64\x65\x6c\x6d\x61\x64\x72\x6f\x6e\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x37\x31\x3d\x77\x77\x77\x2e\x6e\x61\x76\x61\x74\x72\x61\x73\x69\x65\x72\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x37\x32\x3d\x77\x77\x77\x2e\x6e\x61\x76\x65\x7a\x75\x65\x6c\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x37\x33\x3d\x77\x77\x77\x2e\x6e\x75\x6e\x6f\x6d\x6f\x72\x61\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x37\x34\x3d\x77\x77\x77\x2e\x6f\x6c\x69\x76\x61\x64\x65\x70\x6c\x61\x73\x65\x6e\x63\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x37\x35\x3d\x77\x77\x77\x2e\x70\x61\x6c\x6f\x6d\x65\x72\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x37\x36\x3d\x77\x77\x77\x2e\x70\x61\x73\x61\x72\x6f\x6e\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x37\x37\x3d\x77\x77\x77\x2e\x70\x65\x64\x72\x6f\x73\x6f\x64\x65\x61\x63\x69\x6d\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x37\x38\x3d\x77\x77\x77\x2e\x70\x65\x72\x61\x6c\x65\x64\x61\x64\x65\x6c\x61\x6d\x61\x74\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x37\x39\x3d\x77\x77\x77\x2e\x70\x65\x72\x61\x6c\x65\x64\x61\x64\x65\x73\x61\x6e\x72\x6f\x6d\x61\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x38\x30\x3d\x77\x77\x77\x2e\x70\x65\x72\x61\x6c\x65\x73\x64\x65\x6c\x70\x75\x65\x72\x74\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x38\x31\x3d\x77\x77\x77\x2e\x70\x65\x73\x63\x75\x65\x7a\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x38\x32\x3d\x77\x77\x77\x2e\x6c\x61\x70\x65\x73\x67\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x38\x33\x3d\x77\x77\x77\x2e\x70\x69\x65\x64\x72\x61\x73\x61\x6c\x62\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x38\x34\x3d\x77\x77\x77\x2e\x70\x69\x6e\x6f\x66\x72\x61\x6e\x71\x75\x65\x61\x64\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x38\x35\x3d\x77\x77\x77\x2e\x70\x69\x6f\x72\x6e\x61\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x38\x36\x3d\x77\x77\x77\x2e\x70\x6c\x61\x73\x65\x6e\x7a\x75\x65\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x38\x37\x3d\x77\x77\x77\x2e\x70\x6f\x72\x74\x61\x6a\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x38\x38\x3d\x77\x77\x77\x2e\x70\x6f\x72\x74\x65\x7a\x75\x65\x6c\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x38\x39\x3d\x77\x77\x77\x2e\x70\x6f\x7a\x75\x65\x6c\x6f\x64\x65\x7a\x61\x72\x7a\x6f\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x39\x30\x3d\x77\x77\x77\x2e\x70\x75\x65\x62\x6c\x6f\x6e\x75\x65\x76\x6f\x64\x65\x6d\x69\x72\x61\x6d\x6f\x6e\x74\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x39\x31\x3d\x77\x77\x77\x2e\x70\x75\x65\x72\x74\x6f\x64\x65\x73\x61\x6e\x74\x61\x63\x72\x75\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x39\x32\x3d\x77\x77\x77\x2e\x72\x65\x62\x6f\x6c\x6c\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x39\x33\x3d\x77\x77\x77\x2e\x72\x69\x6f\x6c\x6f\x62\x6f\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x39\x34\x3d\x77\x77\x77\x2e\x72\x6f\x62\x6c\x65\x64\x69\x6c\x6c\x6f\x64\x65\x67\x61\x74\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x39\x35\x3d\x77\x77\x77\x2e\x72\x6f\x62\x6c\x65\x64\x69\x6c\x6c\x6f\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x39\x36\x3d\x77\x77\x77\x2e\x72\x6f\x62\x6c\x65\x64\x69\x6c\x6c\x6f\x64\x65\x74\x72\x75\x6a\x69\x6c\x6c\x6f\x2c\x44\x4e\x53\x2e\x33\x39\x37\x3d\x77\x77\x77\x2e\x72\x6f\x62\x6c\x65\x64\x6f\x6c\x6c\x61\x6e\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x39\x38\x3d\x77\x77\x77\x2e\x72\x6f\x6d\x61\x6e\x67\x6f\x72\x64\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x33\x39\x39\x3d\x77\x77\x77\x2e\x72\x75\x61\x6e\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x30\x30\x3d\x77\x77\x77\x2e\x73\x61\x6c\x6f\x72\x69\x6e\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x30\x31\x3d\x77\x77\x77\x2e\x73\x61\x6c\x76\x61\x74\x69\x65\x72\x72\x61\x64\x65\x73\x61\x6e\x74\x69\x61\x67\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x30\x32\x3d\x77\x77\x77\x2e\x73\x61\x6e\x6d\x61\x72\x74\x69\x6e\x64\x65\x74\x72\x65\x76\x65\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x30\x33\x3d\x77\x77\x77\x2e\x61\x79\x74\x6f\x73\x61\x6e\x74\x61\x61\x6e\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x30\x34\x3d\x77\x77\x77\x2e\x73\x61\x6e\x74\x61\x63\x72\x75\x7a\x64\x65\x6c\x61\x73\x69\x65\x72\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x30\x35\x3d\x77\x77\x77\x2e\x73\x61\x6e\x74\x61\x63\x72\x75\x7a\x64\x65\x70\x61\x6e\x69\x61\x67\x75\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x30\x36\x3d\x77\x77\x77\x2e\x73\x61\x6e\x74\x61\x6d\x61\x72\x74\x61\x64\x65\x6d\x61\x67\x61\x73\x63\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x30\x37\x3d\x77\x77\x77\x2e\x73\x61\x6e\x74\x69\x61\x67\x6f\x64\x65\x6c\x63\x61\x6d\x70\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x30\x38\x3d\x77\x77\x77\x2e\x73\x61\x6e\x74\x69\x62\x61\x6e\x65\x7a\x65\x6c\x61\x6c\x74\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x30\x39\x3d\x77\x77\x77\x2e\x73\x61\x6e\x74\x69\x62\x61\x6e\x65\x7a\x65\x6c\x62\x61\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x31\x30\x3d\x77\x77\x77\x2e\x73\x61\x75\x63\x65\x64\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x31\x31\x3d\x77\x77\x77\x2e\x73\x65\x67\x75\x72\x61\x64\x65\x74\x6f\x72\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x31\x32\x3d\x77\x77\x77\x2e\x73\x65\x72\x72\x61\x64\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x31\x33\x3d\x77\x77\x77\x2e\x73\x65\x72\x72\x65\x6a\x6f\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x31\x34\x3d\x77\x77\x77\x2e\x73\x69\x65\x72\x72\x61\x64\x65\x66\x75\x65\x6e\x74\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x31\x35\x3d\x77\x77\x77\x2e\x74\x61\x6c\x61\x76\x61\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x31\x36\x3d\x77\x77\x77\x2e\x74\x61\x6c\x61\x76\x65\x72\x75\x65\x6c\x61\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x31\x37\x3d\x77\x77\x77\x2e\x74\x61\x6c\x61\x79\x75\x65\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x31\x38\x3d\x77\x77\x77\x2e\x74\x65\x6a\x65\x64\x61\x64\x65\x74\x69\x65\x74\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x31\x39\x3d\x77\x77\x77\x2e\x74\x6f\x72\x69\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x32\x30\x3d\x77\x77\x77\x2e\x74\x6f\x72\x6e\x61\x76\x61\x63\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x32\x31\x3d\x77\x77\x77\x2e\x61\x79\x74\x6f\x65\x6c\x74\x6f\x72\x6e\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x32\x32\x3d\x77\x77\x77\x2e\x74\x6f\x72\x72\x65\x63\x69\x6c\x6c\x61\x64\x65\x6c\x6f\x73\x61\x6e\x67\x65\x6c\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x32\x33\x3d\x77\x77\x77\x2e\x74\x6f\x72\x72\x65\x63\x69\x6c\x6c\x61\x73\x64\x65\x6c\x61\x74\x69\x65\x73\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x32\x34\x3d\x77\x77\x77\x2e\x74\x6f\x72\x72\x65\x64\x65\x64\x6f\x6e\x6d\x69\x67\x75\x65\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x32\x35\x3d\x77\x77\x77\x2e\x74\x6f\x72\x72\x65\x64\x65\x73\x61\x6e\x74\x61\x6d\x61\x72\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x32\x36\x3d\x77\x77\x77\x2e\x74\x6f\x72\x72\x65\x6a\x6f\x6e\x65\x6c\x72\x75\x62\x69\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x32\x37\x3d\x77\x77\x77\x2e\x74\x6f\x72\x72\x65\x6a\x6f\x6e\x63\x69\x6c\x6c\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x32\x38\x3d\x77\x77\x77\x2e\x74\x6f\x72\x72\x65\x6d\x65\x6e\x67\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x32\x39\x3d\x77\x77\x77\x2e\x74\x6f\x72\x72\x65\x6d\x6f\x63\x68\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x33\x30\x3d\x77\x77\x77\x2e\x74\x6f\x72\x72\x65\x6f\x72\x67\x61\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x33\x31\x3d\x77\x77\x77\x2e\x74\x6f\x72\x72\x65\x71\x75\x65\x6d\x61\x64\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x33\x32\x3d\x77\x77\x77\x2e\x76\x61\x6c\x64\x61\x73\x74\x69\x6c\x6c\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x33\x33\x3d\x77\x77\x77\x2e\x76\x61\x6c\x64\x65\x63\x61\x6e\x61\x73\x64\x65\x74\x61\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x33\x34\x3d\x77\x77\x77\x2e\x76\x61\x6c\x64\x65\x66\x75\x65\x6e\x74\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x33\x35\x3d\x77\x77\x77\x2e\x76\x61\x6c\x64\x65\x68\x75\x6e\x63\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x33\x36\x3d\x77\x77\x77\x2e\x76\x61\x6c\x64\x65\x69\x6e\x69\x67\x6f\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x33\x37\x3d\x77\x77\x77\x2e\x76\x61\x6c\x64\x65\x6c\x61\x63\x61\x73\x61\x64\x65\x74\x61\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x33\x38\x3d\x77\x77\x77\x2e\x76\x61\x6c\x64\x65\x6d\x6f\x72\x61\x6c\x65\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x33\x39\x3d\x77\x77\x77\x2e\x76\x61\x6c\x64\x65\x6f\x62\x69\x73\x70\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x34\x30\x3d\x77\x77\x77\x2e\x76\x61\x6c\x64\x65\x73\x61\x6c\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x34\x31\x3d\x77\x77\x77\x2e\x76\x61\x6c\x72\x69\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x34\x32\x3d\x77\x77\x77\x2e\x76\x61\x6c\x65\x6e\x63\x69\x61\x64\x65\x61\x6c\x63\x61\x6e\x74\x61\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x34\x33\x3d\x77\x77\x77\x2e\x76\x61\x6c\x76\x65\x72\x64\x65\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x34\x34\x3d\x77\x77\x77\x2e\x76\x61\x6c\x76\x65\x72\x64\x65\x64\x65\x6c\x66\x72\x65\x73\x6e\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x34\x35\x3d\x77\x77\x77\x2e\x76\x65\x67\x61\x76\x69\x61\x6e\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x34\x36\x3d\x77\x77\x77\x2e\x76\x69\x61\x6e\x64\x61\x72\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x34\x37\x3d\x77\x77\x77\x2e\x76\x69\x6c\x6c\x61\x64\x65\x6c\x63\x61\x6d\x70\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x34\x38\x3d\x77\x77\x77\x2e\x76\x69\x6c\x6c\x61\x64\x65\x6c\x72\x65\x79\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x34\x39\x3d\x77\x77\x77\x2e\x76\x69\x6c\x6c\x61\x6d\x65\x73\x69\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x35\x30\x3d\x77\x77\x77\x2e\x76\x69\x6c\x6c\x61\x6d\x69\x65\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x35\x31\x3d\x77\x77\x77\x2e\x76\x69\x6c\x6c\x61\x6e\x75\x65\x76\x61\x64\x65\x6c\x61\x73\x69\x65\x72\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x35\x32\x3d\x77\x77\x77\x2e\x76\x69\x6c\x6c\x61\x72\x64\x65\x6c\x70\x65\x64\x72\x6f\x73\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x35\x33\x3d\x77\x77\x77\x2e\x76\x69\x6c\x6c\x61\x72\x64\x65\x70\x6c\x61\x73\x65\x6e\x63\x69\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x35\x34\x3d\x77\x77\x77\x2e\x76\x69\x6c\x6c\x61\x73\x62\x75\x65\x6e\x61\x73\x64\x65\x67\x61\x74\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x35\x35\x3d\x77\x77\x77\x2e\x7a\x61\x72\x7a\x61\x64\x65\x67\x72\x61\x6e\x61\x64\x69\x6c\x6c\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x35\x36\x3d\x77\x77\x77\x2e\x7a\x61\x72\x7a\x61\x64\x65\x6d\x6f\x6e\x74\x61\x6e\x63\x68\x65\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x35\x37\x3d\x77\x77\x77\x2e\x7a\x61\x72\x7a\x61\x6c\x61\x6d\x61\x79\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x35\x38\x3d\x77\x77\x77\x2e\x7a\x6f\x72\x69\x74\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x35\x39\x3d\x77\x77\x77\x2e\x72\x6f\x73\x61\x6c\x65\x6a\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x36\x30\x3d\x77\x77\x77\x2e\x76\x65\x67\x61\x76\x69\x61\x6e\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x36\x31\x3d\x77\x77\x77\x2e\x61\x6c\x61\x67\x6f\x6e\x64\x65\x6c\x72\x69\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x36\x32\x3d\x77\x77\x77\x2e\x74\x69\x65\x74\x61\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x36\x33\x3d\x77\x77\x77\x2e\x76\x61\x6c\x64\x65\x73\x61\x6c\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x36\x34\x3d\x77\x77\x77\x2e\x6e\x61\x76\x61\x74\x72\x61\x73\x69\x65\x72\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x36\x35\x3d\x77\x77\x77\x2e\x72\x69\x76\x65\x72\x61\x64\x65\x66\x72\x65\x73\x6e\x65\x64\x6f\x73\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x36\x36\x3d\x77\x77\x77\x2e\x65\x6c\x6d\x73\x61\x6e\x67\x69\x6c\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x36\x37\x3d\x77\x77\x77\x2e\x74\x61\x6a\x6f\x73\x61\x6c\x6f\x72\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x36\x38\x3d\x77\x77\x77\x2e\x76\x61\x6c\x6c\x65\x61\x6d\x62\x72\x6f\x7a\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x36\x39\x3d\x77\x77\x77\x2e\x6d\x61\x6e\x63\x6f\x6d\x75\x6e\x69\x64\x61\x64\x76\x61\x6c\x6c\x65\x64\x65\x6c\x61\x6c\x61\x67\x6f\x6e\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x37\x30\x3d\x77\x77\x77\x2e\x6d\x61\x6e\x63\x6f\x6d\x75\x6e\x69\x64\x61\x64\x76\x61\x6c\x6c\x65\x64\x65\x6c\x6a\x65\x72\x74\x65\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x37\x31\x3d\x77\x77\x77\x2e\x6d\x61\x6e\x63\x6f\x6d\x75\x6e\x69\x64\x61\x64\x76\x65\x67\x61\x73\x61\x6c\x74\x61\x73\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x37\x32\x3d\x77\x77\x77\x2e\x6d\x61\x6e\x63\x6f\x6d\x75\x6e\x69\x64\x61\x64\x64\x65\x6c\x61\x76\x65\x72\x61\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x37\x33\x3d\x77\x77\x77\x2e\x6d\x61\x6e\x63\x6f\x6d\x75\x6e\x69\x64\x61\x64\x7a\x6f\x6e\x61\x63\x65\x6e\x74\x72\x6f\x2e\x65\x73\x2c\x44\x4e\x53\x2e\x34\x37\x34\x3d\x77\x77\x77\x2e\x76\x69\x6c\x6c\x75\x65\x72\x63\x61\x73\x2d\x69\x62\x6f\x72\x65\x73\x2d\x6a\x61\x72\x61\x2e\x65\x73", 12589}, + .can_encode = 1 +@@ -263,7 +288,7 @@ void doit(void) + unsigned i; + + for (i=0;i +Last-Update: 2016-11-17 + +From 1a82866b24da2e5ed50631a9cc77b912fefec5e5 Mon Sep 17 00:00:00 2001 +From: Nikos Mavrogiannopoulos +Date: Mon, 14 Nov 2016 14:03:58 +0100 +Subject: [PATCH 09/15] updated auto-generated files for new functions + +--- + doc/Makefile.am | 14 ++++++++++++++ + doc/manpages/Makefile.am | 7 +++++++ + 3 files changed, 21 insertions(+) + +diff --git a/doc/Makefile.am b/doc/Makefile.am +index 8770635..1ca47a1 100644 +--- a/doc/Makefile.am ++++ b/doc/Makefile.am +@@ -1154,6 +1154,8 @@ FUNCS += functions/gnutls_ocsp_resp_get_produced + FUNCS += functions/gnutls_ocsp_resp_get_produced.short + FUNCS += functions/gnutls_ocsp_resp_get_responder + FUNCS += functions/gnutls_ocsp_resp_get_responder.short ++FUNCS += functions/gnutls_ocsp_resp_get_responder2 ++FUNCS += functions/gnutls_ocsp_resp_get_responder2.short + FUNCS += functions/gnutls_ocsp_resp_get_responder_raw_id + FUNCS += functions/gnutls_ocsp_resp_get_responder_raw_id.short + FUNCS += functions/gnutls_ocsp_resp_get_response +@@ -2164,6 +2166,8 @@ FUNCS += functions/gnutls_x509_crl_get_issuer_dn + FUNCS += functions/gnutls_x509_crl_get_issuer_dn.short + FUNCS += functions/gnutls_x509_crl_get_issuer_dn2 + FUNCS += functions/gnutls_x509_crl_get_issuer_dn2.short ++FUNCS += functions/gnutls_x509_crl_get_issuer_dn3 ++FUNCS += functions/gnutls_x509_crl_get_issuer_dn3.short + FUNCS += functions/gnutls_x509_crl_get_issuer_dn_by_oid + FUNCS += functions/gnutls_x509_crl_get_issuer_dn_by_oid.short + FUNCS += functions/gnutls_x509_crl_get_next_update +@@ -2238,6 +2242,8 @@ FUNCS += functions/gnutls_x509_crq_get_dn + FUNCS += functions/gnutls_x509_crq_get_dn.short + FUNCS += functions/gnutls_x509_crq_get_dn2 + FUNCS += functions/gnutls_x509_crq_get_dn2.short ++FUNCS += functions/gnutls_x509_crq_get_dn3 ++FUNCS += functions/gnutls_x509_crq_get_dn3.short + FUNCS += functions/gnutls_x509_crq_get_dn_by_oid + FUNCS += functions/gnutls_x509_crq_get_dn_by_oid.short + FUNCS += functions/gnutls_x509_crq_get_dn_oid +@@ -2366,6 +2372,8 @@ FUNCS += functions/gnutls_x509_crt_get_dn + FUNCS += functions/gnutls_x509_crt_get_dn.short + FUNCS += functions/gnutls_x509_crt_get_dn2 + FUNCS += functions/gnutls_x509_crt_get_dn2.short ++FUNCS += functions/gnutls_x509_crt_get_dn3 ++FUNCS += functions/gnutls_x509_crt_get_dn3.short + FUNCS += functions/gnutls_x509_crt_get_dn_by_oid + FUNCS += functions/gnutls_x509_crt_get_dn_by_oid.short + FUNCS += functions/gnutls_x509_crt_get_dn_oid +@@ -2398,6 +2406,8 @@ FUNCS += functions/gnutls_x509_crt_get_issuer_dn + FUNCS += functions/gnutls_x509_crt_get_issuer_dn.short + FUNCS += functions/gnutls_x509_crt_get_issuer_dn2 + FUNCS += functions/gnutls_x509_crt_get_issuer_dn2.short ++FUNCS += functions/gnutls_x509_crt_get_issuer_dn3 ++FUNCS += functions/gnutls_x509_crt_get_issuer_dn3.short + FUNCS += functions/gnutls_x509_crt_get_issuer_dn_by_oid + FUNCS += functions/gnutls_x509_crt_get_issuer_dn_by_oid.short + FUNCS += functions/gnutls_x509_crt_get_issuer_dn_oid +@@ -2570,6 +2580,8 @@ FUNCS += functions/gnutls_x509_dn_get_rdn_ava + FUNCS += functions/gnutls_x509_dn_get_rdn_ava.short + FUNCS += functions/gnutls_x509_dn_get_str + FUNCS += functions/gnutls_x509_dn_get_str.short ++FUNCS += functions/gnutls_x509_dn_get_str2 ++FUNCS += functions/gnutls_x509_dn_get_str2.short + FUNCS += functions/gnutls_x509_dn_import + FUNCS += functions/gnutls_x509_dn_import.short + FUNCS += functions/gnutls_x509_dn_init +@@ -2740,6 +2752,8 @@ FUNCS += functions/gnutls_x509_privkey_verify_seed + FUNCS += functions/gnutls_x509_privkey_verify_seed.short + FUNCS += functions/gnutls_x509_rdn_get + FUNCS += functions/gnutls_x509_rdn_get.short ++FUNCS += functions/gnutls_x509_rdn_get2 ++FUNCS += functions/gnutls_x509_rdn_get2.short + FUNCS += functions/gnutls_x509_rdn_get_by_oid + FUNCS += functions/gnutls_x509_rdn_get_by_oid.short + FUNCS += functions/gnutls_x509_rdn_get_oid +diff --git a/doc/manpages/Makefile.am b/doc/manpages/Makefile.am +index 97697be..86eb165 100644 +--- a/doc/manpages/Makefile.am ++++ b/doc/manpages/Makefile.am +@@ -371,6 +371,7 @@ APIMANS += gnutls_ocsp_resp_get_extension.3 + APIMANS += gnutls_ocsp_resp_get_nonce.3 + APIMANS += gnutls_ocsp_resp_get_produced.3 + APIMANS += gnutls_ocsp_resp_get_responder.3 ++APIMANS += gnutls_ocsp_resp_get_responder2.3 + APIMANS += gnutls_ocsp_resp_get_responder_raw_id.3 + APIMANS += gnutls_ocsp_resp_get_response.3 + APIMANS += gnutls_ocsp_resp_get_signature.3 +@@ -876,6 +877,7 @@ APIMANS += gnutls_x509_crl_get_extension_info.3 + APIMANS += gnutls_x509_crl_get_extension_oid.3 + APIMANS += gnutls_x509_crl_get_issuer_dn.3 + APIMANS += gnutls_x509_crl_get_issuer_dn2.3 ++APIMANS += gnutls_x509_crl_get_issuer_dn3.3 + APIMANS += gnutls_x509_crl_get_issuer_dn_by_oid.3 + APIMANS += gnutls_x509_crl_get_next_update.3 + APIMANS += gnutls_x509_crl_get_number.3 +@@ -913,6 +915,7 @@ APIMANS += gnutls_x509_crq_get_basic_constraints.3 + APIMANS += gnutls_x509_crq_get_challenge_password.3 + APIMANS += gnutls_x509_crq_get_dn.3 + APIMANS += gnutls_x509_crq_get_dn2.3 ++APIMANS += gnutls_x509_crq_get_dn3.3 + APIMANS += gnutls_x509_crq_get_dn_by_oid.3 + APIMANS += gnutls_x509_crq_get_dn_oid.3 + APIMANS += gnutls_x509_crq_get_extension_by_oid.3 +@@ -977,6 +980,7 @@ APIMANS += gnutls_x509_crt_get_ca_status.3 + APIMANS += gnutls_x509_crt_get_crl_dist_points.3 + APIMANS += gnutls_x509_crt_get_dn.3 + APIMANS += gnutls_x509_crt_get_dn2.3 ++APIMANS += gnutls_x509_crt_get_dn3.3 + APIMANS += gnutls_x509_crt_get_dn_by_oid.3 + APIMANS += gnutls_x509_crt_get_dn_oid.3 + APIMANS += gnutls_x509_crt_get_expiration_time.3 +@@ -993,6 +997,7 @@ APIMANS += gnutls_x509_crt_get_issuer_alt_name2.3 + APIMANS += gnutls_x509_crt_get_issuer_alt_othername_oid.3 + APIMANS += gnutls_x509_crt_get_issuer_dn.3 + APIMANS += gnutls_x509_crt_get_issuer_dn2.3 ++APIMANS += gnutls_x509_crt_get_issuer_dn3.3 + APIMANS += gnutls_x509_crt_get_issuer_dn_by_oid.3 + APIMANS += gnutls_x509_crt_get_issuer_dn_oid.3 + APIMANS += gnutls_x509_crt_get_issuer_unique_id.3 +@@ -1079,6 +1084,7 @@ APIMANS += gnutls_x509_dn_export.3 + APIMANS += gnutls_x509_dn_export2.3 + APIMANS += gnutls_x509_dn_get_rdn_ava.3 + APIMANS += gnutls_x509_dn_get_str.3 ++APIMANS += gnutls_x509_dn_get_str2.3 + APIMANS += gnutls_x509_dn_import.3 + APIMANS += gnutls_x509_dn_init.3 + APIMANS += gnutls_x509_dn_oid_known.3 +@@ -1164,6 +1170,7 @@ APIMANS += gnutls_x509_privkey_sign_hash.3 + APIMANS += gnutls_x509_privkey_verify_params.3 + APIMANS += gnutls_x509_privkey_verify_seed.3 + APIMANS += gnutls_x509_rdn_get.3 ++APIMANS += gnutls_x509_rdn_get2.3 + APIMANS += gnutls_x509_rdn_get_by_oid.3 + APIMANS += gnutls_x509_rdn_get_oid.3 + APIMANS += gnutls_x509_tlsfeatures_add.3 +-- +2.7.4 + diff -Nru gnutls28-3.5.6/debian/patches/dname-api-5-7-certtool-use-the-new-APIs-for-DN-extraction.patch gnutls28-3.5.6/debian/patches/dname-api-5-7-certtool-use-the-new-APIs-for-DN-extraction.patch --- gnutls28-3.5.6/debian/patches/dname-api-5-7-certtool-use-the-new-APIs-for-DN-extraction.patch 1970-01-01 00:00:00.000000000 +0000 +++ gnutls28-3.5.6/debian/patches/dname-api-5-7-certtool-use-the-new-APIs-for-DN-extraction.patch 2016-11-17 07:39:43.000000000 +0000 @@ -0,0 +1,180 @@ +Description: fix gnutls api breakage on dname order 5/7 +This is yet to be released in gnutls, but breaks some users of gnutls like +libvirt - can very likely be dropped on next gnutls release. +Author: Christian Ehrhardt +Last-Update: 2016-11-17 + +From 0b1140a58ddf70ee1052e77df3743bc1f9f6991a Mon Sep 17 00:00:00 2001 +From: Nikos Mavrogiannopoulos +Date: Fri, 11 Nov 2016 18:42:59 +0100 +Subject: [PATCH 01/13] certtool: use the new APIs for DN extraction + +--- + src/certtool.c | 66 +++++++++++++++++++++++++++------------------------------- + 1 file changed, 31 insertions(+), 35 deletions(-) + +diff --git a/src/certtool.c b/src/certtool.c +index a593908..ef1a7a4 100644 +--- a/src/certtool.c ++++ b/src/certtool.c +@@ -2171,29 +2171,25 @@ static int detailed_verification(gnutls_x509_crt_t cert, + gnutls_x509_crl_t crl, + unsigned int verification_output) + { +- char name[512]; + char tmp[255]; +- char issuer_name[512]; +- size_t name_size; +- size_t issuer_name_size; ++ size_t tmp_size; ++ gnutls_datum_t name = {NULL,0}, issuer_name = {NULL,0}; ++ gnutls_datum_t serial = {NULL,0}; + int ret; + +- issuer_name_size = sizeof(issuer_name); + ret = +- gnutls_x509_crt_get_issuer_dn(cert, issuer_name, +- &issuer_name_size); ++ gnutls_x509_crt_get_issuer_dn3(cert, &issuer_name, 0); + if (ret < 0) { + fprintf(stderr, "gnutls_x509_crt_get_issuer_dn: %s\n", + gnutls_strerror(ret)); + exit(1); + } + +- name_size = sizeof(name); +- ret = gnutls_x509_crt_get_dn(cert, name, &name_size); ++ ret = gnutls_x509_crt_get_dn3(cert, &name, 0); + if (ret < 0) { + if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { +- name[0] = 0; +- name_size = 0; ++ name.data = 0; ++ name.size = 0; + } else { + fprintf(stderr, "gnutls_x509_crt_get_dn: %s\n", + gnutls_strerror(ret)); +@@ -2201,14 +2197,13 @@ static int detailed_verification(gnutls_x509_crt_t cert, + } + } + +- fprintf(outfile, "\tSubject: %s\n", name); +- fprintf(outfile, "\tIssuer: %s\n", issuer_name); ++ fprintf(outfile, "\tSubject: %s\n", name.data); ++ fprintf(outfile, "\tIssuer: %s\n", issuer_name.data); + + if (issuer != NULL) { +- issuer_name_size = sizeof(issuer_name); ++ gnutls_free(issuer_name.data); + ret = +- gnutls_x509_crt_get_dn(issuer, issuer_name, +- &issuer_name_size); ++ gnutls_x509_crt_get_dn3(issuer, &issuer_name, 0); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_crt_get_issuer_dn: %s\n", +@@ -2216,16 +2211,15 @@ static int detailed_verification(gnutls_x509_crt_t cert, + exit(1); + } + +- fprintf(outfile, "\tChecked against: %s\n", issuer_name); ++ fprintf(outfile, "\tChecked against: %s\n", issuer_name.data); + } + + if (crl != NULL) { + gnutls_datum_t data; ++ gnutls_free(issuer_name.data); + +- issuer_name_size = sizeof(issuer_name); + ret = +- gnutls_x509_crl_get_issuer_dn(crl, issuer_name, +- &issuer_name_size); ++ gnutls_x509_crl_get_issuer_dn3(crl, &issuer_name, 0); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_crl_get_issuer_dn: %s\n", +@@ -2233,17 +2227,16 @@ static int detailed_verification(gnutls_x509_crt_t cert, + exit(1); + } + +- name_size = sizeof(tmp); ++ tmp_size = sizeof(tmp); + ret = +- gnutls_x509_crl_get_number(crl, tmp, &name_size, NULL); +- if (ret < 0) +- strcpy(name, "unnumbered"); +- else { ++ gnutls_x509_crl_get_number(crl, tmp, &tmp_size, NULL); ++ if (ret < 0) { ++ serial.data = (void*)gnutls_strdup("unnumbered"); ++ } else { + data.data = (void *) tmp; +- data.size = name_size; ++ data.size = tmp_size; + +- name_size = sizeof(name); +- ret = gnutls_hex_encode(&data, name, &name_size); ++ ret = gnutls_hex_encode2(&data, &serial); + if (ret < 0) { + fprintf(stderr, "gnutls_hex_encode: %s\n", + gnutls_strerror(ret)); +@@ -2251,7 +2244,7 @@ static int detailed_verification(gnutls_x509_crt_t cert, + } + } + fprintf(outfile, "\tChecked against CRL[%s] of: %s\n", +- name, issuer_name); ++ serial.data, issuer_name.data); + } + + fprintf(outfile, "\tOutput: "); +@@ -2259,6 +2252,10 @@ static int detailed_verification(gnutls_x509_crt_t cert, + + fputs("\n\n", outfile); + ++ gnutls_free(serial.data); ++ gnutls_free(name.data); ++ gnutls_free(issuer_name.data); ++ + return 0; + } + +@@ -2662,8 +2659,8 @@ static void verify_certificate(common_info_st * cinfo) + + void verify_crl(common_info_st * cinfo) + { +- size_t size, dn_size; +- char dn[128]; ++ size_t size; ++ gnutls_datum_t dn; + unsigned int output; + int ret; + gnutls_datum_t pem, pout; +@@ -2674,14 +2671,13 @@ void verify_crl(common_info_st * cinfo) + + fprintf(outfile, "\nCA certificate:\n"); + +- dn_size = sizeof(dn); +- ret = gnutls_x509_crt_get_dn(issuer, dn, &dn_size); ++ ret = gnutls_x509_crt_get_dn3(issuer, &dn, 0); + if (ret < 0) { + fprintf(stderr, "crt_get_dn: %s\n", gnutls_strerror(ret)); + exit(1); + } + +- fprintf(outfile, "\tSubject: %s\n\n", dn); ++ fprintf(outfile, "\tSubject: %s\n\n", dn.data); + + ret = gnutls_x509_crl_init(&crl); + if (ret < 0) { +@@ -2749,7 +2745,7 @@ static void print_dn(const char *prefix, const gnutls_datum_t *raw) + if (ret < 0) + goto cleanup; + +- ret = gnutls_x509_dn_get_str(dn, &str); ++ ret = gnutls_x509_dn_get_str2(dn, &str, 0); + if (ret < 0) + goto cleanup; + +-- +2.7.4 + diff -Nru gnutls28-3.5.6/debian/patches/dname-api-6-7-x509-output-use-the-new-functions-for-DN-output.patch gnutls28-3.5.6/debian/patches/dname-api-6-7-x509-output-use-the-new-functions-for-DN-output.patch --- gnutls28-3.5.6/debian/patches/dname-api-6-7-x509-output-use-the-new-functions-for-DN-output.patch 1970-01-01 00:00:00.000000000 +0000 +++ gnutls28-3.5.6/debian/patches/dname-api-6-7-x509-output-use-the-new-functions-for-DN-output.patch 2016-11-17 07:39:43.000000000 +0000 @@ -0,0 +1,329 @@ +Description: fix gnutls api breakage on dname order 6/7 +This is yet to be released in gnutls, but breaks some users of gnutls like +libvirt - can very likely be dropped on next gnutls release. +Author: Christian Ehrhardt +Last-Update: 2016-11-17 + +From 4adc22ebe23a9059466111040037d65e77134071 Mon Sep 17 00:00:00 2001 +From: Nikos Mavrogiannopoulos +Date: Fri, 11 Nov 2016 18:52:03 +0100 +Subject: [PATCH 03/13] x509 output: use the new functions for DN output + +--- + lib/x509/ocsp_output.c | 17 ++-- + lib/x509/output.c | 210 +++++++++++++------------------------------------ + 2 files changed, 60 insertions(+), 167 deletions(-) + +diff --git a/lib/x509/ocsp_output.c b/lib/x509/ocsp_output.c +index 7dbd4bd..d5f3ee7 100644 +--- a/lib/x509/ocsp_output.c ++++ b/lib/x509/ocsp_output.c +@@ -278,11 +278,11 @@ print_resp(gnutls_buffer_st * str, gnutls_ocsp_resp_t resp, + + /* responderID */ + { +- gnutls_datum_t dn; ++ gnutls_datum_t dn = {NULL, 0}; + +- ret = gnutls_ocsp_resp_get_responder(resp, &dn); +- if (ret < 0 || dn.data == NULL) { +- if (dn.data == 0) { ++ ret = gnutls_ocsp_resp_get_responder2(resp, &dn, 0); ++ if (ret < 0) { ++ if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { + ret = gnutls_ocsp_resp_get_responder_raw_id(resp, GNUTLS_OCSP_RESP_ID_KEY, &dn); + + if (ret >= 0) { +@@ -292,15 +292,12 @@ print_resp(gnutls_buffer_st * str, gnutls_ocsp_resp_t resp, + } + gnutls_free(dn.data); + } else { +- addf(str, "error: get_dn: %s\n", ++ addf(str, "error: get_responder2: %s\n", + gnutls_strerror(ret)); + } + } else { +- if (dn.data != NULL) { +- addf(str, _("\tResponder ID: %.*s\n"), dn.size, +- dn.data); +- gnutls_free(dn.data); +- } ++ addf(str, _("\tResponder ID: %s\n"), dn.data); ++ gnutls_free(dn.data); + } + } + +diff --git a/lib/x509/output.c b/lib/x509/output.c +index ff0f77c..87ef1fb 100644 +--- a/lib/x509/output.c ++++ b/lib/x509/output.c +@@ -1415,36 +1415,18 @@ print_cert(gnutls_buffer_st * str, gnutls_x509_crt_t cert, + + /* Issuer. */ + if (format != GNUTLS_CRT_PRINT_UNSIGNED_FULL) { +- char *dn; +- size_t dn_size = 0; ++ gnutls_datum_t dn; + int err; + +- err = gnutls_x509_crt_get_issuer_dn(cert, NULL, &dn_size); +- if (err != GNUTLS_E_SHORT_MEMORY_BUFFER) { +- if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) +- addf(str, _("\tIssuer:\n")); +- else +- addf(str, "error: get_issuer_dn: %s\n", +- gnutls_strerror(err)); ++ err = gnutls_x509_crt_get_issuer_dn3(cert, &dn, 0); ++ if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { ++ addf(str, _("\tIssuer:\n")); ++ } else if (err < 0) { ++ addf(str, "error: get_issuer_dn: %s\n", ++ gnutls_strerror(err)); + } else { +- dn = gnutls_malloc(dn_size); +- if (!dn) +- addf(str, "error: malloc (%d): %s\n", +- (int) dn_size, +- gnutls_strerror +- (GNUTLS_E_MEMORY_ERROR)); +- else { +- err = +- gnutls_x509_crt_get_issuer_dn(cert, dn, +- &dn_size); +- if (err < 0) +- addf(str, +- "error: get_issuer_dn: %s\n", +- gnutls_strerror(err)); +- else +- addf(str, _("\tIssuer: %s\n"), dn); +- gnutls_free(dn); +- } ++ addf(str, _("\tIssuer: %s\n"), dn.data); ++ gnutls_free(dn.data); + } + } + +@@ -1493,36 +1475,18 @@ print_cert(gnutls_buffer_st * str, gnutls_x509_crt_t cert, + + /* Subject. */ + { +- char *dn; +- size_t dn_size = 0; ++ gnutls_datum_t dn; + int err; + +- err = gnutls_x509_crt_get_dn(cert, NULL, &dn_size); +- if (err != GNUTLS_E_SHORT_MEMORY_BUFFER) { +- if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) +- addf(str, _("\tSubject:\n")); +- else +- addf(str, "error: get_dn: %s\n", +- gnutls_strerror(err)); ++ err = gnutls_x509_crt_get_dn3(cert, &dn, 0); ++ if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { ++ addf(str, _("\tSubject:\n")); ++ } else if (err < 0) { ++ addf(str, "error: get_dn: %s\n", ++ gnutls_strerror(err)); + } else { +- dn = gnutls_malloc(dn_size); +- if (!dn) +- addf(str, "error: malloc (%d): %s\n", +- (int) dn_size, +- gnutls_strerror +- (GNUTLS_E_MEMORY_ERROR)); +- else { +- err = +- gnutls_x509_crt_get_dn(cert, dn, +- &dn_size); +- if (err < 0) +- addf(str, "error: get_dn: %s\n", +- gnutls_strerror(err)); +- else +- addf(str, _("\tSubject: %s\n"), +- dn); +- gnutls_free(dn); +- } ++ addf(str, _("\tSubject: %s\n"), dn.data); ++ gnutls_free(dn.data); + } + } + +@@ -1682,65 +1646,33 @@ static void print_oneline(gnutls_buffer_st * str, gnutls_x509_crt_t cert) + + /* Subject. */ + { +- char *dn; +- size_t dn_size = 0; ++ gnutls_datum_t dn; + +- err = gnutls_x509_crt_get_dn(cert, NULL, &dn_size); +- if (err != GNUTLS_E_SHORT_MEMORY_BUFFER) { +- if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) +- addf(str, _("no subject,")); +- else +- addf(str, "unknown subject (%s), ", +- gnutls_strerror(err)); ++ err = gnutls_x509_crt_get_dn3(cert, &dn, 0); ++ if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { ++ addf(str, _("no subject,")); ++ } else if (err < 0) { ++ addf(str, "unknown subject (%s), ", ++ gnutls_strerror(err)); + } else { +- dn = gnutls_malloc(dn_size); +- if (!dn) +- addf(str, "unknown subject (%s), ", +- gnutls_strerror +- (GNUTLS_E_MEMORY_ERROR)); +- else { +- err = +- gnutls_x509_crt_get_dn(cert, dn, +- &dn_size); +- if (err < 0) +- addf(str, "unknown subject (%s), ", +- gnutls_strerror(err)); +- else +- addf(str, "subject `%s', ", dn); +- gnutls_free(dn); +- } ++ addf(str, "subject `%s', ", dn.data); ++ gnutls_free(dn.data); + } + } + + /* Issuer. */ + { +- char *dn; +- size_t dn_size = 0; ++ gnutls_datum_t dn; + +- err = gnutls_x509_crt_get_issuer_dn(cert, NULL, &dn_size); +- if (err != GNUTLS_E_SHORT_MEMORY_BUFFER) { +- if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) +- addf(str, _("no issuer,")); +- else +- addf(str, "unknown issuer (%s), ", +- gnutls_strerror(err)); ++ err = gnutls_x509_crt_get_issuer_dn3(cert, &dn, 0); ++ if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { ++ addf(str, _("no issuer,")); ++ } else if (err < 0) { ++ addf(str, "unknown issuer (%s), ", ++ gnutls_strerror(err)); + } else { +- dn = gnutls_malloc(dn_size); +- if (!dn) +- addf(str, "unknown issuer (%s), ", +- gnutls_strerror +- (GNUTLS_E_MEMORY_ERROR)); +- else { +- err = +- gnutls_x509_crt_get_issuer_dn(cert, dn, +- &dn_size); +- if (err < 0) +- addf(str, "unknown issuer (%s), ", +- gnutls_strerror(err)); +- else +- addf(str, "issuer `%s', ", dn); +- gnutls_free(dn); +- } ++ addf(str, "issuer `%s', ", dn.data); ++ gnutls_free(dn.data); + } + } + +@@ -1952,36 +1884,18 @@ print_crl(gnutls_buffer_st * str, gnutls_x509_crl_t crl, int notsigned) + + /* Issuer. */ + if (!notsigned) { +- char *dn; +- size_t dn_size = 0; ++ gnutls_datum_t dn; + int err; + +- err = gnutls_x509_crl_get_issuer_dn(crl, NULL, &dn_size); +- if (err != GNUTLS_E_SHORT_MEMORY_BUFFER) { +- if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) +- addf(str, _("\tIssuer:\n")); +- else +- addf(str, "error: get_issuer_dn: %s\n", +- gnutls_strerror(err)); ++ err = gnutls_x509_crl_get_issuer_dn3(crl, &dn, 0); ++ if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { ++ addf(str, _("\tIssuer:\n")); ++ } else if (err < 0) { ++ addf(str, "error: get_issuer_dn: %s\n", ++ gnutls_strerror(err)); + } else { +- dn = gnutls_malloc(dn_size); +- if (!dn) +- addf(str, "error: malloc (%d): %s\n", +- (int) dn_size, +- gnutls_strerror +- (GNUTLS_E_MEMORY_ERROR)); +- else { +- err = +- gnutls_x509_crl_get_issuer_dn(crl, dn, +- &dn_size); +- if (err < 0) +- addf(str, +- "error: get_issuer_dn: %s\n", +- gnutls_strerror(err)); +- else +- addf(str, _("\tIssuer: %s\n"), dn); +- } +- gnutls_free(dn); ++ addf(str, _("\tIssuer: %s\n"), dn.data); ++ gnutls_free(dn.data); + } + } + +@@ -2338,36 +2252,18 @@ print_crq(gnutls_buffer_st * str, gnutls_x509_crq_t cert, + + /* Subject */ + { +- char *dn; +- size_t dn_size = 0; ++ gnutls_datum_t dn; + int err; + +- err = gnutls_x509_crq_get_dn(cert, NULL, &dn_size); +- if (err != GNUTLS_E_SHORT_MEMORY_BUFFER) { +- if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) +- addf(str, _("\tSubject:\n")); +- else +- addf(str, "error: get_dn: %s\n", ++ err = gnutls_x509_crq_get_dn3(cert, &dn, 0); ++ if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { ++ addf(str, _("\tSubject:\n")); ++ } else if (err < 0) { ++ addf(str, "error: get_dn: %s\n", + gnutls_strerror(err)); + } else { +- dn = gnutls_malloc(dn_size); +- if (!dn) +- addf(str, "error: malloc (%d): %s\n", +- (int) dn_size, +- gnutls_strerror +- (GNUTLS_E_MEMORY_ERROR)); +- else { +- err = +- gnutls_x509_crq_get_dn(cert, dn, +- &dn_size); +- if (err < 0) +- addf(str, "error: get_dn: %s\n", +- gnutls_strerror(err)); +- else +- addf(str, _("\tSubject: %s\n"), +- dn); +- gnutls_free(dn); +- } ++ addf(str, _("\tSubject: %s\n"), dn.data); ++ gnutls_free(dn.data); + } + } + +-- +2.7.4 + diff -Nru gnutls28-3.5.6/debian/patches/dname-api-7-7-pkcs7-output-use-the-new-functions-for-DN-output.patch gnutls28-3.5.6/debian/patches/dname-api-7-7-pkcs7-output-use-the-new-functions-for-DN-output.patch --- gnutls28-3.5.6/debian/patches/dname-api-7-7-pkcs7-output-use-the-new-functions-for-DN-output.patch 1970-01-01 00:00:00.000000000 +0000 +++ gnutls28-3.5.6/debian/patches/dname-api-7-7-pkcs7-output-use-the-new-functions-for-DN-output.patch 2016-11-17 07:39:43.000000000 +0000 @@ -0,0 +1,31 @@ +Description: fix gnutls api breakage on dname order 7/7 +This is yet to be released in gnutls, but breaks some users of gnutls like +libvirt - can very likely be dropped on next gnutls release. +Author: Christian Ehrhardt +Last-Update: 2016-11-17 + +From 76c2bf66944ea8ee60caa1c472032bac0ac82e5c Mon Sep 17 00:00:00 2001 +From: Nikos Mavrogiannopoulos +Date: Mon, 14 Nov 2016 10:03:29 +0100 +Subject: [PATCH 06/13] pkcs7 output: use the new functions for DN output + +--- + lib/x509/pkcs7-output.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/x509/pkcs7-output.c b/lib/x509/pkcs7-output.c +index b3da94d..3042720 100644 +--- a/lib/x509/pkcs7-output.c ++++ b/lib/x509/pkcs7-output.c +@@ -52,7 +52,7 @@ static void print_dn(gnutls_buffer_st * str, const char *prefix, + goto cleanup; + } + +- ret = gnutls_x509_dn_get_str(dn, &output); ++ ret = gnutls_x509_dn_get_str2(dn, &output, 0); + if (ret < 0) { + addf(str, "%s: [error]\n", prefix); + goto cleanup; +-- +2.7.4 + diff -Nru gnutls28-3.5.6/debian/patches/series gnutls28-3.5.6/debian/patches/series --- gnutls28-3.5.6/debian/patches/series 2016-11-14 11:47:23.000000000 +0000 +++ gnutls28-3.5.6/debian/patches/series 2016-11-17 07:39:43.000000000 +0000 @@ -4,3 +4,10 @@ 40_02_gnutls-cli-debug-terminate-sessions-which-cannot-be-.patch disable_global_init_override_test.patch add-openssl-test-link.patch +dname-api-1-7-Introduced-new-functions-to-allow-multiple-DN-parsin.patch +dname-api-2-7-_gnutls_x509_get_dn-when-no-data-ensure-we-return-GN.patch +dname-api-3-7-tests-account-for-the-strict-RFC4514-compliance-reve.patch +dname-api-4-7-updated-auto-generated-files-for-new-functions.patch +dname-api-5-7-certtool-use-the-new-APIs-for-DN-extraction.patch +dname-api-6-7-x509-output-use-the-new-functions-for-DN-output.patch +dname-api-7-7-pkcs7-output-use-the-new-functions-for-DN-output.patch