[pve-devel] applied: [PATCH 5/8] switch to submodule build

Thomas Lamprecht t.lamprecht at proxmox.com
Wed Aug 21 17:25:23 CEST 2019


and omit the 1.9 and 1.10 cherry-picks directly by checking out the
submodule already at the v1.10 tag

Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---
 .gitmodules                                   |     3 +
 Makefile                                      |    17 +-
 patches/0002-cherry-pick-1.9-as-patches.patch |   776 -
 .../0003-cherry-pick-1.10-as-patches.patch    | 14716 ----------------
 patches/0006-cherry-pick-pmtud-fixes.patch    |     6 +-
 patches/series                                |     2 -
 upstream                                      |     1 +
 upstream/kronosnet_1.10.orig.tar.xz           |   Bin 462580 -> 0 bytes
 8 files changed, 13 insertions(+), 15508 deletions(-)
 create mode 100644 .gitmodules
 delete mode 100644 patches/0002-cherry-pick-1.9-as-patches.patch
 delete mode 100644 patches/0003-cherry-pick-1.10-as-patches.patch
 create mode 160000 upstream
 delete mode 100644 upstream/kronosnet_1.10.orig.tar.xz

diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..1b90eab
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "upstream"]
+	path = upstream
+	url = ../mirror_kronosnet
diff --git a/Makefile b/Makefile
index ceae235..953f4b3 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@ DEBRELEASE=0+really1.8-2
 PVERELEASE=pve2
 
 BUILDDIR=kronosnet-${VERSION}
-SRCARCHIVE=kronosnet_${VERSION}.orig.tar.xz
+SRC_SUBMODULE=upstream
 
 ARCH:=$(shell dpkg-architecture -qDEB_BUILD_ARCH)
 
@@ -22,11 +22,9 @@ DSC=kronosnet-${VERSION}-${PVERELEASE}.dsc
 all:
 	ls -1 ${DEBS}
 
-${BUILDDIR}: upstream/${SRCARCHIVE} patches/*
+${BUILDDIR}: upstream/README patches/*
 	rm -rf ${BUILDDIR}
-	mkdir ${BUILDDIR}
-	ln -sf upstream/${SRCARCHIVE} ${SRCARCHIVE}
-	tar -x -C ${BUILDDIR} --strip-components=1 -f upstream/${SRCARCHIVE}
+	cp -a upstream ${BUILDDIR}
 	cp -a debian/ ${BUILDDIR}
 	cd ${BUILDDIR}; ln -s ../patches patches
 	cd ${BUILDDIR}; quilt push -a
@@ -42,11 +40,10 @@ dsc: ${DSC}
 ${DSC}: ${BUILDDIR}
 	cd ${BUILDDIR}; dpkg-buildpackage -S -us -uc -d -nc
 
-download:
-	rm -rf upstream/
-	mkdir upstream
-	cd upstream; dget https://deb.debian.org/debian/pool/main/k/kronosnet/kronosnet_${VERSION}-${DEBRELEASE}.dsc
-	cd upstream; rm -rf *.asc *.dsc ${BUILDDIR}
+# make sure submodules were initialized
+.PHONY: submodule
+submodule:
+	test -f "${SRC_SUBMODULE}/README" || git submodule update --init ${SRC_SUBMODULE}
 
 .PHONY: upload
 upload: ${DEBS}
diff --git a/patches/0002-cherry-pick-1.9-as-patches.patch b/patches/0002-cherry-pick-1.9-as-patches.patch
deleted file mode 100644
index adcf1ee..0000000
--- a/patches/0002-cherry-pick-1.9-as-patches.patch
+++ /dev/null
@@ -1,776 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= <f.gruenbichler at proxmox.com>
-Date: Wed, 19 Jun 2019 09:17:04 +0200
-Subject: [PATCH kronosnet] cherry-pick 1.9 as patches
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
----
- ...ther-exception-to-valgrind-nss-combo.patch |  35 +++
- .../crypto-remove-libnss-3des-support.patch   |  74 +++++
- debian/patches/man-Tidy-manpages-215.patch    | 297 ++++++++++++++++++
- debian/patches/man-Tidy-more-man-pages.patch  |  47 +++
- ...net_host_set_policy-parameters-order.patch |  27 ++
- ...-errors-detected-by-newly-added-test.patch |  41 +++
- ...e-minimum-crypto-key-size-to-1024bit.patch |  35 +++
- ...eck-to-verify-doxy-header-order-and-.patch |  37 +++
- ...or-message-decoding-from-ICMP-errors.patch |  38 +++
- ...udp-use-defines-vs-hardcoded-numbers.patch |  36 +++
- debian/patches/series                         |  10 +
- 11 files changed, 677 insertions(+)
- create mode 100644 debian/patches/build-add-another-exception-to-valgrind-nss-combo.patch
- create mode 100644 debian/patches/crypto-remove-libnss-3des-support.patch
- create mode 100644 debian/patches/man-Tidy-manpages-215.patch
- create mode 100644 debian/patches/man-Tidy-more-man-pages.patch
- create mode 100644 debian/patches/man-fix-knet_host_set_policy-parameters-order.patch
- create mode 100644 debian/patches/man-fix-libknet.h-for-errors-detected-by-newly-added-test.patch
- create mode 100644 debian/patches/reduce-minimum-crypto-key-size-to-1024bit.patch
- create mode 100644 debian/patches/tests-add-man-page-check-to-verify-doxy-header-order-and-.patch
- create mode 100644 debian/patches/udp-improve-error-message-decoding-from-ICMP-errors.patch
- create mode 100644 debian/patches/udp-use-defines-vs-hardcoded-numbers.patch
-
-diff --git a/debian/patches/build-add-another-exception-to-valgrind-nss-combo.patch b/debian/patches/build-add-another-exception-to-valgrind-nss-combo.patch
-new file mode 100644
-index 0000000..4b60b6b
---- /dev/null
-+++ b/debian/patches/build-add-another-exception-to-valgrind-nss-combo.patch
-@@ -0,0 +1,35 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 29 Jan 2019 05:33:51 +0100
-+Subject: [build] add another exception to valgrind nss combo
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit a6746007986b9324760822aa0190d035b8da7352)
-+---
-+ build-aux/knet_valgrind_memcheck.supp | 17 +++++++++++++++++
-+ 1 file changed, 17 insertions(+)
-+
-+diff --git a/build-aux/knet_valgrind_memcheck.supp b/build-aux/knet_valgrind_memcheck.supp
-+index 8b3f95f..e0f49d0 100644
-+--- a/build-aux/knet_valgrind_memcheck.supp
-++++ b/build-aux/knet_valgrind_memcheck.supp
-+@@ -588,3 +588,20 @@
-+    obj:/usr/lib64/libnss3.so
-+    obj:/usr/lib64/libnss3.so
-+ }
-++{
-++   nss internal leak (3.41) non recurring (spotted on f29)
-++   Memcheck:Leak
-++   match-leak-kinds: definite
-++   fun:malloc
-++   obj:*
-++   obj:*
-++   obj:*
-++   obj:*
-++   obj:*
-++   obj:*
-++   obj:*
-++   obj:*
-++   obj:*
-++   obj:*
-++   obj:/usr/lib64/libnss3.so
-++}
-diff --git a/debian/patches/crypto-remove-libnss-3des-support.patch b/debian/patches/crypto-remove-libnss-3des-support.patch
-new file mode 100644
-index 0000000..c8d1123
---- /dev/null
-+++ b/debian/patches/crypto-remove-libnss-3des-support.patch
-@@ -0,0 +1,74 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Thu, 11 Apr 2019 13:36:56 +0200
-+Subject: [crypto] remove libnss 3des support
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit acb5adb7f3ea6eaaf858d86e064a9b3fe477ea11)
-+---
-+ libknet/libknet.h    |  2 +-
-+ libknet/crypto_nss.c | 14 ++++----------
-+ 2 files changed, 5 insertions(+), 11 deletions(-)
-+
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index 0331b1f..d0c90e4 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -617,7 +617,7 @@ struct knet_handle_crypto_cfg {
-+  *                         It can be set to "none" to disable
-+  *                         encryption.
-+  *                         Currently supported by "nss" model:
-+- *                         "3des", "aes128", "aes192" and "aes256".
-++ *                         "aes128", "aes192" and "aes256".
-+  *                         "openssl" model supports more modes and it strictly
-+  *                         depends on the openssl build. See: EVP_get_cipherbyname
-+  *                         openssl API call for details.
-+diff --git a/libknet/crypto_nss.c b/libknet/crypto_nss.c
-+index 35afa0f..a17ff62 100644
-+--- a/libknet/crypto_nss.c
-++++ b/libknet/crypto_nss.c
-+@@ -64,32 +64,28 @@ enum nsscrypto_crypt_t {
-+ 	CRYPTO_CIPHER_TYPE_NONE = 0,
-+ 	CRYPTO_CIPHER_TYPE_AES256 = 1,
-+ 	CRYPTO_CIPHER_TYPE_AES192 = 2,
-+-	CRYPTO_CIPHER_TYPE_AES128 = 3,
-+-	CRYPTO_CIPHER_TYPE_3DES = 4
-++	CRYPTO_CIPHER_TYPE_AES128 = 3
-+ };
-+ 
-+ CK_MECHANISM_TYPE cipher_to_nss[] = {
-+ 	0,				/* CRYPTO_CIPHER_TYPE_NONE */
-+ 	CKM_AES_CBC_PAD,		/* CRYPTO_CIPHER_TYPE_AES256 */
-+ 	CKM_AES_CBC_PAD,		/* CRYPTO_CIPHER_TYPE_AES192 */
-+-	CKM_AES_CBC_PAD,		/* CRYPTO_CIPHER_TYPE_AES128 */
-+-	CKM_DES3_CBC_PAD 		/* CRYPTO_CIPHER_TYPE_3DES */
-++	CKM_AES_CBC_PAD			/* CRYPTO_CIPHER_TYPE_AES128 */
-+ };
-+ 
-+ size_t nsscipher_key_len[] = {
-+ 	0,				/* CRYPTO_CIPHER_TYPE_NONE */
-+ 	AES_256_KEY_LENGTH,		/* CRYPTO_CIPHER_TYPE_AES256 */
-+ 	AES_192_KEY_LENGTH,		/* CRYPTO_CIPHER_TYPE_AES192 */
-+-	AES_128_KEY_LENGTH,		/* CRYPTO_CIPHER_TYPE_AES128 */
-+-	24				/* CRYPTO_CIPHER_TYPE_3DES */
-++	AES_128_KEY_LENGTH		/* CRYPTO_CIPHER_TYPE_AES128 */
-+ };
-+ 
-+ size_t nsscypher_block_len[] = {
-+ 	0,				/* CRYPTO_CIPHER_TYPE_NONE */
-+ 	AES_BLOCK_SIZE,			/* CRYPTO_CIPHER_TYPE_AES256 */
-+ 	AES_BLOCK_SIZE,			/* CRYPTO_CIPHER_TYPE_AES192 */
-+-	AES_BLOCK_SIZE,			/* CRYPTO_CIPHER_TYPE_AES128 */
-+-	0				/* CRYPTO_CIPHER_TYPE_3DES */
-++	AES_BLOCK_SIZE			/* CRYPTO_CIPHER_TYPE_AES128 */
-+ };
-+ 
-+ /*
-+@@ -155,8 +151,6 @@ static int nssstring_to_crypto_cipher_type(const char* crypto_cipher_type)
-+ 		return CRYPTO_CIPHER_TYPE_AES192;
-+ 	} else if (strcmp(crypto_cipher_type, "aes128") == 0) {
-+ 		return CRYPTO_CIPHER_TYPE_AES128;
-+-	} else if (strcmp(crypto_cipher_type, "3des") == 0) {
-+-		return CRYPTO_CIPHER_TYPE_3DES;
-+ 	}
-+ 	return -1;
-+ }
-diff --git a/debian/patches/man-Tidy-manpages-215.patch b/debian/patches/man-Tidy-manpages-215.patch
-new file mode 100644
-index 0000000..f0b5b37
---- /dev/null
-+++ b/debian/patches/man-Tidy-manpages-215.patch
-@@ -0,0 +1,297 @@
-+From: Chrissie Caulfield <ccaulfie at redhat.com>
-+Date: Tue, 16 Apr 2019 14:46:01 +0100
-+Subject: man: Tidy manpages (#215)
-+
-+* man: Tidy manpages for libnozzle
-+
-+doxygen works in mysterious ways, adding a blank line before
-+ at brief makes the lines following that much tidier.
-+
-+So now instead of
-+
-+nozzle_close nozzle - pointer to the nozzle struct to destroy
-+
-+we get:
-+
-+nozzle_close
-+
-+       nozzle - pointer to the nozzle struct to destroy
-+
-+* doxyxml: Cope with pointers-to-pointers passed as params
-+
-+Double pointers showed as ' * *name' when they should be '  **name'.
-+
-+Also tidy STRUCTURES display so that they are not indented too much,
-+
-+* man: Similar @brief fixes for libknet.h
-+
-+* doxyxml: Tidy descriptions of functions as parameters
-+
-+If a complex function pointer was passed as a parameter then doxyxml
-+tryied to line up all the other parameters with it - making a mess
-+by having lots of blank space between the type and the name.
-+
-+Now we enforce a maximum type length (a line-ish) so that shorter
-+tyopes will line up OK and the really long ones will be left to their
-+own devices.
-+
-+(cherry picked from commit 652e355252adf6d248123d564c607c338e899f98)
-+---
-+ libknet/libknet.h     |  3 +++
-+ libnozzle/libnozzle.h | 24 +++++++++++++++++++++---
-+ man/doxyxml.c         | 30 ++++++++++++++++++++----------
-+ 3 files changed, 44 insertions(+), 13 deletions(-)
-+
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index d0c90e4..181724a 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -275,6 +275,7 @@ int knet_handle_add_datafd(knet_handle_t knet_h, int *datafd, int8_t *channel);
-+ 
-+ /**
-+  * knet_handle_remove_datafd
-++ *
-+  * @brief Remove a file descriptor from knet
-+  *
-+  * knet_h   - pointer to knet_handle_t
-+@@ -293,6 +294,7 @@ int knet_handle_remove_datafd(knet_handle_t knet_h, int datafd);
-+ 
-+ /**
-+  * knet_handle_get_channel
-++ *
-+  * @brief Get the channel associated with a file descriptor
-+  *
-+  * knet_h  - pointer to knet_handle_t
-+@@ -313,6 +315,7 @@ int knet_handle_get_channel(knet_handle_t knet_h, const int datafd, int8_t *chan
-+ 
-+ /**
-+  * knet_handle_get_datafd
-++ *
-+  * @brief Get the file descriptor associated with a channel
-+  *
-+  * knet_h   - pointer to knet_handle_t
-+diff --git a/libnozzle/libnozzle.h b/libnozzle/libnozzle.h
-+index 82ca74d..b8ab7d6 100644
-+--- a/libnozzle/libnozzle.h
-++++ b/libnozzle/libnozzle.h
-+@@ -25,6 +25,7 @@ typedef struct nozzle_iface *nozzle_t;
-+ 
-+ /**
-+  * nozzle_open
-++ *
-+  * @brief create a new tap device on the system.
-+  *
-+  * devname - pointer to device name of at least size IFNAMSIZ.
-+@@ -55,6 +56,7 @@ nozzle_t nozzle_open(char *devname, size_t devname_size, const char *updownpath)
-+ 
-+ /**
-+  * nozzle_close
-++ *
-+  * @brief deconfigure and destroy a nozzle device
-+  *
-+  * nozzle - pointer to the nozzle struct to destroy
-+@@ -74,9 +76,8 @@ int nozzle_close(nozzle_t nozzle);
-+ 
-+ /**
-+  * nozzle_run_updown
-+- * @brief execute updown commands associated with a nozzle device. It is
-+- *        the application responsibility to call helper scripts
-+- *        before or after creating/destroying interfaces or IP addresses.
-++ *
-++ * @brief execute updown commands associated with a nozzle device.
-+  *
-+  * nozzle - pointer to the nozzle struct
-+  *
-+@@ -86,6 +87,9 @@ int nozzle_close(nozzle_t nozzle);
-+  *               The string is malloc'ed, the caller needs to free the buffer.
-+  *               If the script generates no output this string might be NULL.
-+  *
-++ * It is the application responsibility to call helper scripts
-++ * before or after creating/destroying interfaces or IP addresses.
-++ *
-+  * @return
-+  * 0 on success
-+  * -1 on error and errno is set (sanity checks and internal calls.
-+@@ -96,6 +100,7 @@ int nozzle_run_updown(const nozzle_t nozzle, uint8_t action, char **exec_string)
-+ 
-+ /**
-+  * nozzle_set_up
-++ *
-+  * @brief equivalent of ifconfig up
-+  *
-+  * nozzle - pointer to the nozzle struct
-+@@ -109,6 +114,7 @@ int nozzle_set_up(nozzle_t nozzle);
-+ 
-+ /**
-+  * nozzle_set_down
-++ *
-+  * @brief equivalent of ifconfig down
-+  *
-+  * nozzle - pointer to the nozzle struct
-+@@ -122,6 +128,7 @@ int nozzle_set_down(nozzle_t nozzle);
-+ 
-+ /**
-+  * nozzle_add_ip
-++ *
-+  * @brief equivalent of ip addr or ifconfig <ipaddress/prefix>
-+  *
-+  * nozzle - pointer to the nozzle struct
-+@@ -142,6 +149,7 @@ int nozzle_add_ip(nozzle_t nozzle, const char *ipaddr, const char *prefix);
-+ 
-+ /**
-+  * nozzle_del_ip
-++ *
-+  * @brief equivalent of ip addr del or ifconfig del <ipaddress/prefix>
-+  *
-+  * nozzle - pointer to the nozzle struct
-+@@ -170,6 +178,7 @@ struct nozzle_ip {
-+ 
-+ /**
-+  * nozzle_get_ips
-++ *
-+  * @brief retrieve the list of all configured ips for a given interface
-+  *
-+  * nozzle - pointer to the nozzle struct
-+@@ -191,6 +200,7 @@ int nozzle_get_ips(const nozzle_t nozzle, struct nozzle_ip **nozzle_ip);
-+ 
-+ /**
-+  * nozzle_get_mtu
-++ *
-+  * @brief retrieve mtu on a given nozzle interface
-+  *
-+  * nozzle - pointer to the nozzle struct
-+@@ -204,6 +214,7 @@ int nozzle_get_mtu(const nozzle_t nozzle);
-+ 
-+ /**
-+  * nozzle_set_mtu
-++ *
-+  * @brief set mtu on a given nozzle interface
-+  *
-+  * nozzle - pointer to the nozzle struct
-+@@ -219,6 +230,7 @@ int nozzle_set_mtu(nozzle_t nozzle, const int mtu);
-+ 
-+ /**
-+  * nozzle_reset_mtu
-++ *
-+  * @brief reset mtu on a given nozzle interface to the system default
-+  *
-+  * nozzle - pointer to the nozzle struct
-+@@ -232,6 +244,7 @@ int nozzle_reset_mtu(nozzle_t nozzle);
-+ 
-+ /**
-+  * nozzle_get_mac
-++ *
-+  * @brief retrieve mac address on a given nozzle interface
-+  *
-+  * nozzle - pointer to the nozzle struct
-+@@ -247,6 +260,7 @@ int nozzle_get_mac(const nozzle_t nozzle, char **ether_addr);
-+ 
-+ /**
-+  * nozzle_set_mac
-++ *
-+  * @brief set mac address on a given nozzle interface
-+  *
-+  * nozzle - pointer to the nozzle struct
-+@@ -262,6 +276,7 @@ int nozzle_set_mac(nozzle_t nozzle, const char *ether_addr);
-+ 
-+ /**
-+  * nozzle_reset_mac
-++ *
-+  * @brief reset mac address on a given nozzle interface to system default
-+  *
-+  * nozzle - pointer to the nozzle struct
-+@@ -275,6 +290,7 @@ int nozzle_reset_mac(nozzle_t nozzle);
-+ 
-+ /**
-+  * nozzle_get_handle_by_name
-++ *
-+  * @brief find a nozzle handle by device name
-+  *
-+  * devname - string containing the name of the interface
-+@@ -288,6 +304,7 @@ nozzle_t nozzle_get_handle_by_name(const char *devname);
-+ 
-+ /**
-+  * nozzle_get_name_by_handle
-++ *
-+  * @brief retrieve nozzle interface name by handle
-+  *
-+  * nozzle - pointer to the nozzle struct
-+@@ -301,6 +318,7 @@ const char *nozzle_get_name_by_handle(const nozzle_t nozzle);
-+ 
-+ /**
-+  * nozzle_get_fd
-++ *
-+  * @brief
-+  *
-+  * nozzle - pointer to the nozzle struct
-+diff --git a/man/doxyxml.c b/man/doxyxml.c
-+index b4b49a9..b623711 100644
-+--- a/man/doxyxml.c
-++++ b/man/doxyxml.c
-+@@ -34,6 +34,14 @@
-+ #define XML_DIR "../man/xml-knet"
-+ #define XML_FILE "libknet_8h.xml"
-+ 
-++/*
-++ * This isn't a maximum size, it just defines how long a parameter
-++ * type can get before we decide it's not worth lining everything up to.
-++ * it's mainly to stop function pointer types (which can get VERY long because
-++ * of all *their* parameters) making everything else 'line-up' over separate lines
-++ */
-++#define LINE_LENGTH 80
-++
-+ static int print_ascii = 1;
-+ static int print_man = 0;
-+ static int print_params = 0;
-+@@ -332,19 +340,25 @@ static int read_structure_from_xml(char *refid, char *name)
-+ 
-+ static void print_param(FILE *manfile, struct param_info *pi, int field_width, int bold, const char *delimiter)
-+ {
-+-	char asterisk = ' ';
-++	char *asterisks = "  ";
-+ 	char *type = pi->paramtype;
-+ 
-+ 	/* Reformat pointer params so they look nicer */
-+ 	if (pi->paramtype[strlen(pi->paramtype)-1] == '*') {
-+-		asterisk='*';
-++		asterisks=" *";
-+ 		type = strdup(pi->paramtype);
-+ 		type[strlen(type)-1] = '\0';
-++
-++		/* Cope with double pointers */
-++		if (pi->paramtype[strlen(type)-1] == '*') {
-++			asterisks="**";
-++			type[strlen(type)-1] = '\0';
-++		}
-+ 	}
-+ 
-+-	fprintf(manfile, "    %s%-*s%c%s\\fI%s\\fP%s\n",
-++	fprintf(manfile, "    %s%-*s%s%s\\fI%s\\fP%s\n",
-+ 		bold?"\\fB":"", field_width, type,
-+-		asterisk, bold?"\\fP":"", pi->paramname, delimiter);
-++		asterisks, bold?"\\fP":"", pi->paramname, delimiter);
-+ 
-+ 	if (type != pi->paramtype) {
-+ 		free(type);
-+@@ -504,7 +518,8 @@ static void print_manpage(char *name, char *def, char *brief, char *args, char *
-+ 	qb_list_for_each(iter, &params_list) {
-+ 		pi = qb_list_entry(iter, struct param_info, list);
-+ 
-+-		if (strlen(pi->paramtype) > max_param_type_len) {
-++		if ((strlen(pi->paramtype) < LINE_LENGTH) &&
-++		    (strlen(pi->paramtype) > max_param_type_len)) {
-+ 			max_param_type_len = strlen(pi->paramtype);
-+ 		}
-+ 		if (strlen(pi->paramname) > max_param_name_len) {
-+@@ -559,11 +574,6 @@ static void print_manpage(char *name, char *def, char *brief, char *args, char *
-+ 
-+ 		map_iter = qb_map_iter_create(used_structures_map);
-+ 		for (p = qb_map_iter_next(map_iter, &data); p; p = qb_map_iter_next(map_iter, &data)) {
-+-			fprintf(manfile, ".SS \"\"\n");
-+-			fprintf(manfile, ".PP\n");
-+-			fprintf(manfile, ".sp\n");
-+-			fprintf(manfile, ".sp\n");
-+-			fprintf(manfile, ".RS\n");
-+ 			fprintf(manfile, ".nf\n");
-+ 			fprintf(manfile, "\\fB\n");
-+ 
-diff --git a/debian/patches/man-Tidy-more-man-pages.patch b/debian/patches/man-Tidy-more-man-pages.patch
-new file mode 100644
-index 0000000..21c6e04
---- /dev/null
-+++ b/debian/patches/man-Tidy-more-man-pages.patch
-@@ -0,0 +1,47 @@
-+From: Christine Caulfield <ccaulfie at redhat.com>
-+Date: Mon, 29 Apr 2019 15:16:27 +0100
-+Subject: man: Tidy more man pages
-+
-+Followup to previous 'tidy'
-+
-+(cherry picked from commit 4ff309b82bbd11300e761ecdcafde596115fc7f7)
-+---
-+ libknet/libknet.h | 4 ++++
-+ 1 file changed, 4 insertions(+)
-+
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index 181724a..7b5a9e3 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -151,6 +151,7 @@ knet_handle_t knet_handle_new(knet_node_id_t host_id,
-+ 
-+ /**
-+  * knet_handle_free
-++ *
-+  * @brief Destroy a knet handle, free all resources
-+  *
-+  * knet_h   - pointer to knet_handle_t
-+@@ -165,6 +166,7 @@ int knet_handle_free(knet_handle_t knet_h);
-+ 
-+ /**
-+  * knet_handle_enable_sock_notify
-++ *
-+  * @brief Register a callback to receive socket events
-+  *
-+  * knet_h   - pointer to knet_handle_t
-+@@ -336,6 +338,7 @@ int knet_handle_get_datafd(knet_handle_t knet_h, const int8_t channel, int *data
-+ 
-+ /**
-+  * knet_recv
-++ *
-+  * @brief Receive data from knet nodes
-+  *
-+  * knet_h   - pointer to knet_handle_t
-+@@ -358,6 +361,7 @@ ssize_t knet_recv(knet_handle_t knet_h,
-+ 
-+ /**
-+  * knet_send
-++ *
-+  * @brief Send data to knet nodes
-+  *
-+  * knet_h   - pointer to knet_handle_t
-diff --git a/debian/patches/man-fix-knet_host_set_policy-parameters-order.patch b/debian/patches/man-fix-knet_host_set_policy-parameters-order.patch
-new file mode 100644
-index 0000000..5d50b61
---- /dev/null
-+++ b/debian/patches/man-fix-knet_host_set_policy-parameters-order.patch
-@@ -0,0 +1,27 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 30 Apr 2019 05:06:47 +0200
-+Subject: [man] fix knet_host_set_policy parameters order
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 73e1b520482cef7ced995423aa3f6f53d16b66c4)
-+---
-+ libknet/libknet.h | 4 ++--
-+ 1 file changed, 2 insertions(+), 2 deletions(-)
-+
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index 7b5a9e3..7c0c440 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -1027,10 +1027,10 @@ int knet_host_get_host_list(knet_handle_t knet_h,
-+ /**
-+  * knet_host_set_policy
-+  *
-+- * knet_h   - pointer to knet_handle_t
-+- *
-+  * @brief Set the switching policy for a host's links
-+  *
-++ * knet_h   - pointer to knet_handle_t
-++ *
-+  * host_id  - see knet_host_add(3)
-+  *
-+  * policy   - there are currently 3 kind of simple switching policies
-diff --git a/debian/patches/man-fix-libknet.h-for-errors-detected-by-newly-added-test.patch b/debian/patches/man-fix-libknet.h-for-errors-detected-by-newly-added-test.patch
-new file mode 100644
-index 0000000..79925df
---- /dev/null
-+++ b/debian/patches/man-fix-libknet.h-for-errors-detected-by-newly-added-test.patch
-@@ -0,0 +1,41 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 30 Apr 2019 05:42:48 +0200
-+Subject: [man] fix libknet.h for errors detected by newly added test
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 8e00c883883f0ee183aa3472e5ee72210318ce14)
-+---
-+ libknet/libknet.h | 6 +++---
-+ 1 file changed, 3 insertions(+), 3 deletions(-)
-+
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index 7c0c440..c7f44d7 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -1144,7 +1144,7 @@ struct knet_host_status {
-+ };
-+ 
-+ /**
-+- * knet_host_status_get
-++ * knet_host_get_status
-+  *
-+  * @brief Get the status of a host
-+  *
-+@@ -1939,7 +1939,7 @@ struct knet_log_msg {
-+ };
-+ 
-+ /**
-+- * knet_log_set_log_level
-++ * knet_log_set_loglevel
-+  *
-+  * @brief Set the logging level for a subsystem
-+  *
-+@@ -1962,7 +1962,7 @@ int knet_log_set_loglevel(knet_handle_t knet_h, uint8_t subsystem,
-+ 			  uint8_t level);
-+ 
-+ /**
-+- * knet_log_get_log_level
-++ * knet_log_get_loglevel
-+  *
-+  * @brief Get the logging level for a subsystem
-+  *
-diff --git a/debian/patches/reduce-minimum-crypto-key-size-to-1024bit.patch b/debian/patches/reduce-minimum-crypto-key-size-to-1024bit.patch
-new file mode 100644
-index 0000000..065a53b
---- /dev/null
-+++ b/debian/patches/reduce-minimum-crypto-key-size-to-1024bit.patch
-@@ -0,0 +1,35 @@
-+From: =?utf-8?q?Fabian_Gr=C3=BCnbichler?= <f.gruenbichler at proxmox.com>
-+Date: Wed, 3 Apr 2019 14:28:50 +0200
-+Subject: reduce minimum crypto key size to 1024bit
-+MIME-Version: 1.0
-+Content-Type: text/plain; charset="utf-8"
-+Content-Transfer-Encoding: 8bit
-+
-+Since the key is used for AES/3DES and HMAC operations only, this is
-+safe. AES/3DES use keys in the 128- to 256-bit range, HMAC with
-+MD5/SHA1/SHA2 should use keys with a minimum of 128- to 512-bit (in both
-+cases, depending on the actual algorithm used).
-+
-+This reduction also keeps knet compatible with existing Corosync 2.x
-+keyfiles, which are 1024-bit.
-+
-+Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
-+(cherry picked from commit 4e648f76930af8c376a833677d940b2b0efc3c86)
-+---
-+ libknet/libknet.h | 3 +--
-+ 1 file changed, 1 insertion(+), 2 deletions(-)
-+
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index 36fefa5..0331b1f 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -587,8 +587,7 @@ int knet_handle_pmtud_get(knet_handle_t knet_h,
-+ 				unsigned int *data_mtu);
-+ 
-+ 
-+-
-+-#define KNET_MIN_KEY_LEN  256
-++#define KNET_MIN_KEY_LEN  128
-+ #define KNET_MAX_KEY_LEN 4096
-+ 
-+ struct knet_handle_crypto_cfg {
-diff --git a/debian/patches/tests-add-man-page-check-to-verify-doxy-header-order-and-.patch b/debian/patches/tests-add-man-page-check-to-verify-doxy-header-order-and-.patch
-new file mode 100644
-index 0000000..2ac3e8a
---- /dev/null
-+++ b/debian/patches/tests-add-man-page-check-to-verify-doxy-header-order-and-.patch
-@@ -0,0 +1,37 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 30 Apr 2019 05:42:16 +0200
-+Subject: [tests] add man page check to verify doxy header order and
-+ definitions
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 8b73fbca799114ed579acb73ce0bbcdf45b1f171)
-+---
-+ man/api-to-man-page-coverage | 15 +++++++++++++++
-+ 1 file changed, 15 insertions(+)
-+
-+diff --git a/man/api-to-man-page-coverage b/man/api-to-man-page-coverage
-+index 92e60a5..b9dc18f 100755
-+--- a/man/api-to-man-page-coverage
-++++ b/man/api-to-man-page-coverage
-+@@ -14,6 +14,21 @@ target="$2"
-+ headerapicalls="$(grep ${target}_ "$srcdir"/lib${target}/lib${target}.h | grep -v "^ \*" | grep -v ^struct | grep -v "^[[:space:]]" | grep -v typedef | sed -e 's/(.*//g' -e 's/^const //g' -e 's/\*//g' | awk '{print $2}')"
-+ manpages="$(grep ${target}_ "$srcdir"/man/Makefile.am |grep -v man3 |grep -v xml | sed -e 's/\.3.*//g')"
-+ 
-++echo "Checking for header format errors"
-++
-++for i in $headerapicalls; do
-++	echo "Checking $i"
-++	header="$(grep " \* ${i}$" "$srcdir"/lib${target}/lib${target}.h -A2)"
-++	brief="$(echo "$header" | tail -n 1 |grep "@brief")"
-++	if [ -z "$brief" ]; then
-++		echo "Error found in $i doxy header section"
-++		echo "$header"
-++		echo ""
-++		echo "$brief"
-++		exit 1
-++	fi
-++done
-++
-+ echo "Checking for symbols in header file NOT distributed as manpages"
-+ 
-+ for i in $headerapicalls; do
-diff --git a/debian/patches/udp-improve-error-message-decoding-from-ICMP-errors.patch b/debian/patches/udp-improve-error-message-decoding-from-ICMP-errors.patch
-new file mode 100644
-index 0000000..876bdd3
---- /dev/null
-+++ b/debian/patches/udp-improve-error-message-decoding-from-ICMP-errors.patch
-@@ -0,0 +1,38 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Wed, 1 May 2019 06:51:19 +0200
-+Subject: [udp] improve error message decoding from ICMP errors
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit c8522bfa627045932c0bd2c1b31005534efbc495)
-+---
-+ libknet/transport_udp.c | 10 +++++++++-
-+ 1 file changed, 9 insertions(+), 1 deletion(-)
-+
-+diff --git a/libknet/transport_udp.c b/libknet/transport_udp.c
-+index 3decb66..e4f6fdb 100644
-+--- a/libknet/transport_udp.c
-++++ b/libknet/transport_udp.c
-+@@ -296,6 +296,8 @@ static int read_errs_from_sock(knet_handle_t knet_h, int sockfd)
-+ 	struct sockaddr_storage *origin;
-+ 	char addr_str[KNET_MAX_HOST_LEN];
-+ 	char port_str[KNET_MAX_PORT_LEN];
-++	char addr_remote_str[KNET_MAX_HOST_LEN];
-++	char port_remote_str[KNET_MAX_PORT_LEN];
-+ 
-+ 	iov.iov_base = &icmph;
-+ 	iov.iov_len = sizeof(icmph);
-+@@ -367,7 +369,13 @@ static int read_errs_from_sock(knet_handle_t knet_h, int sockfd)
-+ 								log_debug(knet_h, KNET_SUB_TRANSP_UDP, "Received ICMP error from unknown source: %s", strerror(sock_err->ee_errno));
-+ 
-+ 							} else {
-+-								log_debug(knet_h, KNET_SUB_TRANSP_UDP, "Received ICMP error from %s: %s", addr_str, strerror(sock_err->ee_errno));
-++								if (knet_addrtostr(&remote, sizeof(remote),
-++									       addr_remote_str, KNET_MAX_HOST_LEN,
-++									       port_remote_str, KNET_MAX_PORT_LEN) < 0) {
-++									log_debug(knet_h, KNET_SUB_TRANSP_UDP, "Received ICMP error from %s: %s destination unknown", addr_str, strerror(sock_err->ee_errno));
-++								} else {
-++									log_debug(knet_h, KNET_SUB_TRANSP_UDP, "Received ICMP error from %s: %s %s", addr_str, strerror(sock_err->ee_errno), addr_remote_str);
-++								}
-+ 							}
-+ 							break;
-+ 					}
-diff --git a/debian/patches/udp-use-defines-vs-hardcoded-numbers.patch b/debian/patches/udp-use-defines-vs-hardcoded-numbers.patch
-new file mode 100644
-index 0000000..65a5d88
---- /dev/null
-+++ b/debian/patches/udp-use-defines-vs-hardcoded-numbers.patch
-@@ -0,0 +1,36 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Wed, 1 May 2019 06:39:53 +0200
-+Subject: [udp] use defines vs hardcoded numbers
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 77adcf11ee390cfc7158f3f05617beef980429d8)
-+---
-+ libknet/transport_udp.c | 8 ++++----
-+ 1 file changed, 4 insertions(+), 4 deletions(-)
-+
-+diff --git a/libknet/transport_udp.c b/libknet/transport_udp.c
-+index acfbab4..3decb66 100644
-+--- a/libknet/transport_udp.c
-++++ b/libknet/transport_udp.c
-+@@ -325,8 +325,8 @@ static int read_errs_from_sock(knet_handle_t knet_h, int sockfd)
-+ 				sock_err = (struct sock_extended_err*)(void *)CMSG_DATA(cmsg);
-+ 				if (sock_err) {
-+ 					switch (sock_err->ee_origin) {
-+-						case 0: /* no origin */
-+-						case 1: /* local source (EMSGSIZE) */
-++						case SO_EE_ORIGIN_NONE: /* no origin */
-++						case SO_EE_ORIGIN_LOCAL: /* local source (EMSGSIZE) */
-+ 							if (sock_err->ee_errno == EMSGSIZE) {
-+ 								if (pthread_mutex_lock(&knet_h->kmtu_mutex) != 0) {
-+ 									log_debug(knet_h, KNET_SUB_TRANSP_UDP, "Unable to get mutex lock");
-+@@ -358,8 +358,8 @@ static int read_errs_from_sock(knet_handle_t knet_h, int sockfd)
-+ 							 * those errors are way too noisy
-+ 							 */
-+ 							break;
-+-						case 2: /* ICMP */
-+-						case 3: /* ICMP6 */
-++						case SO_EE_ORIGIN_ICMP:  /* ICMP */
-++						case SO_EE_ORIGIN_ICMP6: /* ICMP6 */
-+ 							origin = (struct sockaddr_storage *)(void *)SO_EE_OFFENDER(sock_err);
-+ 							if (knet_addrtostr(origin, sizeof(origin),
-+ 									   addr_str, KNET_MAX_HOST_LEN,
-diff --git a/debian/patches/series b/debian/patches/series
-index 7fbd139..c16ea6e 100644
---- a/debian/patches/series
-+++ b/debian/patches/series
-@@ -1 +1,11 @@
- send-test-skip-the-SCTP-test-if-SCTP-is-not-supported-by-.patch
-+build-add-another-exception-to-valgrind-nss-combo.patch
-+reduce-minimum-crypto-key-size-to-1024bit.patch
-+crypto-remove-libnss-3des-support.patch
-+man-Tidy-manpages-215.patch
-+man-Tidy-more-man-pages.patch
-+man-fix-knet_host_set_policy-parameters-order.patch
-+tests-add-man-page-check-to-verify-doxy-header-order-and-.patch
-+man-fix-libknet.h-for-errors-detected-by-newly-added-test.patch
-+udp-use-defines-vs-hardcoded-numbers.patch
-+udp-improve-error-message-decoding-from-ICMP-errors.patch
diff --git a/patches/0003-cherry-pick-1.10-as-patches.patch b/patches/0003-cherry-pick-1.10-as-patches.patch
deleted file mode 100644
index ec886d6..0000000
--- a/patches/0003-cherry-pick-1.10-as-patches.patch
+++ /dev/null
@@ -1,14716 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= <f.gruenbichler at proxmox.com>
-Date: Wed, 19 Jun 2019 09:31:57 +0200
-Subject: [PATCH kronosnet] cherry-pick 1.10 as patches
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
----
- ...e-entry-per-file-to-match-README.lic.patch | 2928 +++++++++++++++++
- ...n-shared-code-to-trigger-PMTUd-rerun.patch |   79 +
- ...-rerun-API-to-allow-full-PMTUd-reset.patch |   74 +
- ...sts-add-access-lists-support-to-sctp.patch |   96 +
- ...documentation-for-enable_access_list.patch |   58 +
- ...dd-errno-around-and-start-using-them.patch |  195 ++
- ...rnal-API-calls-to-manage-access-list.patch |  746 +++++
- ...more-extensive-test-for-links_acl_ip.patch |  717 ++++
- .../access-lists-add-public-API-tests.patch   | 1019 ++++++
- ...s-add-tests-for-default-access-lists.patch |   63 +
- ...et_bench-to-enable-disable-access-li.patch |   61 +
- ...cally-add-and-remove-point-to-point-.patch |  283 ++
- .../access-lists-cleanup-API-a-bit.patch      |   98 +
- ...access-lists-data-structs-within-the.patch |  226 ++
- ...ccess-lists-for-GENERIC_ACL-protocol.patch |   80 +
- ...eneric-access-lists-only-for-protoco.patch |   55 +
- ...d-on-BSD-and-add-some-include-files-.patch |   64 +
- .../access-lists-fix-build-on-freebsd.patch   |   54 +
- ...improve-checks-on-various-data-types.patch |   74 +
- ...e-more-generic-to-accept-more-than-I.patch |  436 +++
- ...s-lists-make-internal-API-consistent.patch |   73 +
- ...-of-generic-wrappers-and-remove-dupl.patch |   72 +
- ...ess-lists-structs-and-data-types-to-.patch |  168 +
- ...-acl-wrappers-to-links_acl-and-split.patch | 1025 ++++++
- ...-lists-remove-2-unnecessary-wrappers.patch |   70 +
- ...p1-2-to-ss1-2-to-keep-it-more-generi.patch |  219 ++
- ...licit-access-lists-management-for-UD.patch |   50 +
- ...ays-to-access-per-protocol-functions.patch |  309 ++
- ...better-name-for-fd_tracker-structure.patch |   95 +
- .../acl-Fix-English-in-commments.patch        |  106 +
- ..._handle_enable_access_lists-api-call.patch |  235 ++
- ...o-libknet-dir-and-rename-to-links_ac.patch |  186 ++
- ...ump-soname-to-indicate-new-API-calls.patch |   23 +
- .../compress-add-support-for-libzstd.patch    |  342 ++
- ...o-fix-openssl1.0-initialization-code.patch |   98 +
- ...e-errors-generated-by-openssl-1.1.1c.patch |  137 +
- ...lear-all-security-info-on-crypto_fin.patch |   51 +
- ...rigger-a-PMTUd-rerun-on-each-good-cr.patch |   25 +
- ...alls-to-RAND_seed-as-they-don-t-real.patch |   65 +
- ...crypto-openssl-error-strings-release.patch |   28 +
- ...ndle_crypto-external-API-to-be-more-.patch |  598 ++++
- ...ight-from-541d7faf9068d10e12b4278c35.patch |   23 +
- ...al-update-copyright-across-the-board.patch |  129 +
- debian/patches/global-update-copyrights.patch |   21 +
- ...operly-initialize-fd-tracker-buffers.patch |   26 +
- ..._type-to-transport-to-avoid-confusio.patch |   77 +
- ...t_type-to-transport-to-avoid-confusi.patch |  196 ++
- ...g-target-of-recently-added-API-calls.patch |   52 +
- ...rrors-detected-by-newly-added-test-1.patch |   50 +
- .../patches/manpages-Document-enums-206.patch |   39 +
- .../misc-Fix-more-covscan-warnings.patch      |  191 ++
- debian/patches/misc-some-coverity-fixes.patch |  224 ++
- ...bout-plugins-version-and-architectur.patch |  167 +
- ...-up-useless-conditionals-and-defines.patch |  376 +++
- .../spec-drop-support-for-init-scripts.patch  |  108 +
- .../spec-fix-a-bunch-of-rpmlint-errors.patch  |   51 +
- ...s-to-point-to-https-and-official-rel.patch |   30 +
- ...ora-spec-file-into-upstream-spec-fil.patch |  374 +++
- ...ditionals-to-determine-BuildRequires.patch |   59 +
- ...dconfig_scriptlets-only-when-defined.patch |   40 +
- ...m-internal-memory-leak-non-recurring.patch |   25 +
- ...r-packet-implementation-to-flush-log.patch |  135 +
- .../patches/tests-remove-stray-comment.patch  |   22 +
- ...t-add-internal-API-to-gather-which-f.patch |  161 +
- ...ation-about-the-nature-of-the-transp.patch |  115 +
- ...ect-merge-when-cherry-picking-7033dd.patch |   29 +
- debian/patches/series                         |   66 +
- 67 files changed, 14167 insertions(+)
- create mode 100644 debian/patches/global-clarify-license-entry-per-file-to-match-README.lic.patch
- create mode 100644 debian/patches/PMTUd-create-common-shared-code-to-trigger-PMTUd-rerun.patch
- create mode 100644 debian/patches/PMTUd-extend-internal-rerun-API-to-allow-full-PMTUd-reset.patch
- create mode 100644 debian/patches/access-lists-add-access-lists-support-to-sctp.patch
- create mode 100644 debian/patches/access-lists-add-documentation-for-enable_access_list.patch
- create mode 100644 debian/patches/access-lists-add-errno-around-and-start-using-them.patch
- create mode 100644 debian/patches/access-lists-add-external-API-calls-to-manage-access-list.patch
- create mode 100644 debian/patches/access-lists-add-more-extensive-test-for-links_acl_ip.patch
- create mode 100644 debian/patches/access-lists-add-public-API-tests.patch
- create mode 100644 debian/patches/access-lists-add-tests-for-default-access-lists.patch
- create mode 100644 debian/patches/access-lists-allow-knet_bench-to-enable-disable-access-li.patch
- create mode 100644 debian/patches/access-lists-automatically-add-and-remove-point-to-point-.patch
- create mode 100644 debian/patches/access-lists-cleanup-API-a-bit.patch
- create mode 100644 debian/patches/access-lists-confine-access-lists-data-structs-within-the.patch
- create mode 100644 debian/patches/access-lists-enable-access-lists-for-GENERIC_ACL-protocol.patch
- create mode 100644 debian/patches/access-lists-enable-generic-access-lists-only-for-protoco.patch
- create mode 100644 debian/patches/access-lists-fix-build-on-BSD-and-add-some-include-files-.patch
- create mode 100644 debian/patches/access-lists-fix-build-on-freebsd.patch
- create mode 100644 debian/patches/access-lists-improve-checks-on-various-data-types.patch
- create mode 100644 debian/patches/access-lists-make-code-more-generic-to-accept-more-than-I.patch
- create mode 100644 debian/patches/access-lists-make-internal-API-consistent.patch
- create mode 100644 debian/patches/access-lists-more-use-of-generic-wrappers-and-remove-dupl.patch
- create mode 100644 debian/patches/access-lists-move-access-lists-structs-and-data-types-to-.patch
- create mode 100644 debian/patches/access-lists-move-all-acl-wrappers-to-links_acl-and-split.patch
- create mode 100644 debian/patches/access-lists-remove-2-unnecessary-wrappers.patch
- create mode 100644 debian/patches/access-lists-rename-ip1-2-to-ss1-2-to-keep-it-more-generi.patch
- create mode 100644 debian/patches/access-lists-test-implicit-access-lists-management-for-UD.patch
- create mode 100644 debian/patches/access-lists-use-arrays-to-access-per-protocol-functions.patch
- create mode 100644 debian/patches/access-lists-use-better-name-for-fd_tracker-structure.patch
- create mode 100644 debian/patches/acl-Fix-English-in-commments.patch
- create mode 100644 debian/patches/acl-add-knet_handle_enable_access_lists-api-call.patch
- create mode 100644 debian/patches/acl-move-poc-code-into-libknet-dir-and-rename-to-links_ac.patch
- create mode 100644 debian/patches/build-bump-soname-to-indicate-new-API-calls.patch
- create mode 100644 debian/patches/compress-add-support-for-libzstd.patch
- create mode 100644 debian/patches/crypto-fix-openssl1.0-initialization-code.patch
- create mode 100644 debian/patches/crypto-hide-errors-generated-by-openssl-1.1.1c.patch
- create mode 100644 debian/patches/crypto-make-sure-to-clear-all-security-info-on-crypto_fin.patch
- create mode 100644 debian/patches/crypto-make-sure-to-trigger-a-PMTUd-rerun-on-each-good-cr.patch
- create mode 100644 debian/patches/crypto-openssl-drop-calls-to-RAND_seed-as-they-don-t-real.patch
- create mode 100644 debian/patches/crypto-openssl-error-strings-release.patch
- create mode 100644 debian/patches/crypto-rework-knet_handle_crypto-external-API-to-be-more-.patch
- create mode 100644 debian/patches/doc-fix-a-merge-oversight-from-541d7faf9068d10e12b4278c35.patch
- create mode 100644 debian/patches/global-update-copyright-across-the-board.patch
- create mode 100644 debian/patches/global-update-copyrights.patch
- create mode 100644 debian/patches/handle-properly-initialize-fd-tracker-buffers.patch
- create mode 100644 debian/patches/links-rename-tranport_type-to-transport-to-avoid-confusio.patch
- create mode 100644 debian/patches/links-rename-transport_type-to-transport-to-avoid-confusi.patch
- create mode 100644 debian/patches/logging-fix-log-target-of-recently-added-API-calls.patch
- create mode 100644 debian/patches/man-fix-libknet.h-for-errors-detected-by-newly-added-test-1.patch
- create mode 100644 debian/patches/manpages-Document-enums-206.patch
- create mode 100644 debian/patches/misc-Fix-more-covscan-warnings.patch
- create mode 100644 debian/patches/misc-some-coverity-fixes.patch
- create mode 100644 debian/patches/spec-be-more-strict-about-plugins-version-and-architectur.patch
- create mode 100644 debian/patches/spec-clean-up-useless-conditionals-and-defines.patch
- create mode 100644 debian/patches/spec-drop-support-for-init-scripts.patch
- create mode 100644 debian/patches/spec-fix-a-bunch-of-rpmlint-errors.patch
- create mode 100644 debian/patches/spec-fix-upstream-URLs-to-point-to-https-and-official-rel.patch
- create mode 100644 debian/patches/spec-reconciliate-fedora-spec-file-into-upstream-spec-fil.patch
- create mode 100644 debian/patches/spec-use-distro-conditionals-to-determine-BuildRequires.patch
- create mode 100644 debian/patches/spec-use-ldconfig_scriptlets-only-when-defined.patch
- create mode 100644 debian/patches/tests-hide-an-arm-internal-memory-leak-non-recurring.patch
- create mode 100644 debian/patches/tests-improve-wait-for-packet-implementation-to-flush-log.patch
- create mode 100644 debian/patches/tests-remove-stray-comment.patch
- create mode 100644 debian/patches/transports-access-list-add-internal-API-to-gather-which-f.patch
- create mode 100644 debian/patches/transports-add-information-about-the-nature-of-the-transp.patch
- create mode 100644 debian/patches/transports-fix-incorrect-merge-when-cherry-picking-7033dd.patch
-
-diff --git a/debian/patches/global-clarify-license-entry-per-file-to-match-README.lic.patch b/debian/patches/global-clarify-license-entry-per-file-to-match-README.lic.patch
-new file mode 100644
-index 0000000..ba15cf0
---- /dev/null
-+++ b/debian/patches/global-clarify-license-entry-per-file-to-match-README.lic.patch
-@@ -0,0 +1,2928 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Wed, 12 Jun 2019 05:21:24 +0200
-+Subject: [global] clarify license entry per file to match README.licence
-+
-+libraries code: LGPL-2.0+
-+binaries code and other files: GPL-2.0+
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit dd52554d5dfc0c5c37697842092cd3b99d6d40a4)
-+---
-+ README                                                           | 2 +-
-+ autogen.sh                                                       | 2 +-
-+ configure.ac                                                     | 2 +-
-+ Makefile.am                                                      | 2 +-
-+ init/Makefile.am                                                 | 2 +-
-+ kronosnetd/Makefile.am                                           | 2 +-
-+ libknet/Makefile.am                                              | 2 +-
-+ libknet/tests/Makefile.am                                        | 2 +-
-+ libnozzle/Makefile.am                                            | 2 +-
-+ libnozzle/tests/Makefile.am                                      | 2 +-
-+ man/Makefile.am                                                  | 2 +-
-+ poc-code/Makefile.am                                             | 2 +-
-+ poc-code/iov-hash/Makefile.am                                    | 2 +-
-+ kronosnetd/cfg.h                                                 | 2 +-
-+ kronosnetd/etherfilter.h                                         | 2 +-
-+ kronosnetd/logging.h                                             | 2 +-
-+ kronosnetd/vty.h                                                 | 2 +-
-+ kronosnetd/vty_auth.h                                            | 2 +-
-+ kronosnetd/vty_cli.h                                             | 2 +-
-+ kronosnetd/vty_cli_cmds.h                                        | 2 +-
-+ kronosnetd/vty_utils.h                                           | 2 +-
-+ libknet/common.h                                                 | 2 +-
-+ libknet/compat.h                                                 | 2 +-
-+ libknet/compress.h                                               | 2 +-
-+ libknet/compress_model.h                                         | 2 +-
-+ libknet/crypto.h                                                 | 2 +-
-+ libknet/crypto_model.h                                           | 2 +-
-+ libknet/host.h                                                   | 2 +-
-+ libknet/internals.h                                              | 2 +-
-+ libknet/libknet.h                                                | 2 +-
-+ libknet/links.h                                                  | 2 +-
-+ libknet/links_acl.h                                              | 2 +-
-+ libknet/links_acl_ip.h                                           | 2 +-
-+ libknet/links_acl_loopback.h                                     | 2 +-
-+ libknet/logging.h                                                | 2 +-
-+ libknet/netutils.h                                               | 2 +-
-+ libknet/onwire.h                                                 | 2 +-
-+ libknet/tests/test-common.h                                      | 2 +-
-+ libknet/threads_common.h                                         | 2 +-
-+ libknet/threads_dsthandler.h                                     | 2 +-
-+ libknet/threads_heartbeat.h                                      | 2 +-
-+ libknet/threads_pmtud.h                                          | 2 +-
-+ libknet/threads_rx.h                                             | 2 +-
-+ libknet/threads_tx.h                                             | 2 +-
-+ libknet/transport_common.h                                       | 2 +-
-+ libknet/transport_loopback.h                                     | 2 +-
-+ libknet/transport_sctp.h                                         | 2 +-
-+ libknet/transport_udp.h                                          | 2 +-
-+ libknet/transports.h                                             | 2 +-
-+ libnozzle/internals.h                                            | 2 +-
-+ libnozzle/libnozzle.h                                            | 2 +-
-+ libnozzle/tests/test-common.h                                    | 2 +-
-+ init/kronosnetd.in                                               | 2 +-
-+ init/kronosnetd.service.in                                       | 2 +-
-+ kronosnetd/kronosnetd.logrotate.in                               | 2 +-
-+ libknet/libknet.pc.in                                            | 2 +-
-+ libnozzle/libnozzle.pc.in                                        | 2 +-
-+ man/Doxyfile-knet.in                                             | 2 +-
-+ man/Doxyfile-nozzle.in                                           | 2 +-
-+ kronosnetd/cfg.c                                                 | 2 +-
-+ kronosnetd/etherfilter.c                                         | 2 +-
-+ kronosnetd/keygen.c                                              | 2 +-
-+ kronosnetd/logging.c                                             | 2 +-
-+ kronosnetd/main.c                                                | 2 +-
-+ kronosnetd/vty.c                                                 | 2 +-
-+ kronosnetd/vty_auth.c                                            | 2 +-
-+ kronosnetd/vty_cli.c                                             | 2 +-
-+ kronosnetd/vty_cli_cmds.c                                        | 2 +-
-+ kronosnetd/vty_utils.c                                           | 2 +-
-+ libknet/common.c                                                 | 2 +-
-+ libknet/compat.c                                                 | 2 +-
-+ libknet/compress.c                                               | 2 +-
-+ libknet/compress_bzip2.c                                         | 2 +-
-+ libknet/compress_lz4.c                                           | 2 +-
-+ libknet/compress_lz4hc.c                                         | 2 +-
-+ libknet/compress_lzma.c                                          | 2 +-
-+ libknet/compress_lzo2.c                                          | 2 +-
-+ libknet/compress_zlib.c                                          | 2 +-
-+ libknet/compress_zstd.c                                          | 2 +-
-+ libknet/crypto.c                                                 | 2 +-
-+ libknet/crypto_nss.c                                             | 2 +-
-+ libknet/crypto_openssl.c                                         | 2 +-
-+ libknet/handle.c                                                 | 2 +-
-+ libknet/host.c                                                   | 2 +-
-+ libknet/links.c                                                  | 2 +-
-+ libknet/links_acl.c                                              | 2 +-
-+ libknet/links_acl_ip.c                                           | 2 +-
-+ libknet/links_acl_loopback.c                                     | 2 +-
-+ libknet/logging.c                                                | 2 +-
-+ libknet/netutils.c                                               | 2 +-
-+ libknet/tests/api_knet_addrtostr.c                               | 2 +-
-+ libknet/tests/api_knet_get_compress_list.c                       | 2 +-
-+ libknet/tests/api_knet_get_crypto_list.c                         | 2 +-
-+ libknet/tests/api_knet_get_transport_id_by_name.c                | 2 +-
-+ libknet/tests/api_knet_get_transport_list.c                      | 2 +-
-+ libknet/tests/api_knet_get_transport_name_by_id.c                | 2 +-
-+ libknet/tests/api_knet_handle_add_datafd.c                       | 2 +-
-+ libknet/tests/api_knet_handle_clear_stats.c                      | 2 +-
-+ libknet/tests/api_knet_handle_compress.c                         | 2 +-
-+ libknet/tests/api_knet_handle_crypto.c                           | 2 +-
-+ libknet/tests/api_knet_handle_enable_access_lists.c              | 2 +-
-+ libknet/tests/api_knet_handle_enable_filter.c                    | 2 +-
-+ libknet/tests/api_knet_handle_enable_pmtud_notify.c              | 2 +-
-+ libknet/tests/api_knet_handle_enable_sock_notify.c               | 2 +-
-+ libknet/tests/api_knet_handle_free.c                             | 2 +-
-+ libknet/tests/api_knet_handle_get_channel.c                      | 2 +-
-+ libknet/tests/api_knet_handle_get_datafd.c                       | 2 +-
-+ libknet/tests/api_knet_handle_get_stats.c                        | 2 +-
-+ libknet/tests/api_knet_handle_get_transport_reconnect_interval.c | 2 +-
-+ libknet/tests/api_knet_handle_new.c                              | 2 +-
-+ libknet/tests/api_knet_handle_new_limit.c                        | 2 +-
-+ libknet/tests/api_knet_handle_pmtud_get.c                        | 2 +-
-+ libknet/tests/api_knet_handle_pmtud_getfreq.c                    | 2 +-
-+ libknet/tests/api_knet_handle_pmtud_setfreq.c                    | 2 +-
-+ libknet/tests/api_knet_handle_remove_datafd.c                    | 2 +-
-+ libknet/tests/api_knet_handle_set_transport_reconnect_interval.c | 2 +-
-+ libknet/tests/api_knet_handle_setfwd.c                           | 2 +-
-+ libknet/tests/api_knet_host_add.c                                | 2 +-
-+ libknet/tests/api_knet_host_enable_status_change_notify.c        | 2 +-
-+ libknet/tests/api_knet_host_get_host_list.c                      | 2 +-
-+ libknet/tests/api_knet_host_get_id_by_host_name.c                | 2 +-
-+ libknet/tests/api_knet_host_get_name_by_host_id.c                | 2 +-
-+ libknet/tests/api_knet_host_get_policy.c                         | 2 +-
-+ libknet/tests/api_knet_host_get_status.c                         | 2 +-
-+ libknet/tests/api_knet_host_remove.c                             | 2 +-
-+ libknet/tests/api_knet_host_set_name.c                           | 2 +-
-+ libknet/tests/api_knet_host_set_policy.c                         | 2 +-
-+ libknet/tests/api_knet_link_add_acl.c                            | 2 +-
-+ libknet/tests/api_knet_link_clear_acl.c                          | 2 +-
-+ libknet/tests/api_knet_link_clear_config.c                       | 2 +-
-+ libknet/tests/api_knet_link_get_config.c                         | 2 +-
-+ libknet/tests/api_knet_link_get_enable.c                         | 2 +-
-+ libknet/tests/api_knet_link_get_link_list.c                      | 2 +-
-+ libknet/tests/api_knet_link_get_ping_timers.c                    | 2 +-
-+ libknet/tests/api_knet_link_get_pong_count.c                     | 2 +-
-+ libknet/tests/api_knet_link_get_priority.c                       | 2 +-
-+ libknet/tests/api_knet_link_get_status.c                         | 2 +-
-+ libknet/tests/api_knet_link_insert_acl.c                         | 2 +-
-+ libknet/tests/api_knet_link_rm_acl.c                             | 2 +-
-+ libknet/tests/api_knet_link_set_config.c                         | 2 +-
-+ libknet/tests/api_knet_link_set_enable.c                         | 2 +-
-+ libknet/tests/api_knet_link_set_ping_timers.c                    | 2 +-
-+ libknet/tests/api_knet_link_set_pong_count.c                     | 2 +-
-+ libknet/tests/api_knet_link_set_priority.c                       | 2 +-
-+ libknet/tests/api_knet_log_get_loglevel.c                        | 2 +-
-+ libknet/tests/api_knet_log_get_loglevel_id.c                     | 2 +-
-+ libknet/tests/api_knet_log_get_loglevel_name.c                   | 2 +-
-+ libknet/tests/api_knet_log_get_subsystem_id.c                    | 2 +-
-+ libknet/tests/api_knet_log_get_subsystem_name.c                  | 2 +-
-+ libknet/tests/api_knet_log_set_loglevel.c                        | 2 +-
-+ libknet/tests/api_knet_recv.c                                    | 2 +-
-+ libknet/tests/api_knet_send.c                                    | 2 +-
-+ libknet/tests/api_knet_send_compress.c                           | 2 +-
-+ libknet/tests/api_knet_send_crypto.c                             | 2 +-
-+ libknet/tests/api_knet_send_loopback.c                           | 2 +-
-+ libknet/tests/api_knet_send_sync.c                               | 2 +-
-+ libknet/tests/api_knet_strtoaddr.c                               | 2 +-
-+ libknet/tests/int_links_acl_ip.c                                 | 2 +-
-+ libknet/tests/int_timediff.c                                     | 2 +-
-+ libknet/tests/knet_bench.c                                       | 2 +-
-+ libknet/tests/pckt_test.c                                        | 2 +-
-+ libknet/tests/test-common.c                                      | 2 +-
-+ libknet/threads_common.c                                         | 2 +-
-+ libknet/threads_dsthandler.c                                     | 2 +-
-+ libknet/threads_heartbeat.c                                      | 2 +-
-+ libknet/threads_pmtud.c                                          | 2 +-
-+ libknet/threads_rx.c                                             | 2 +-
-+ libknet/threads_tx.c                                             | 2 +-
-+ libknet/transport_common.c                                       | 2 +-
-+ libknet/transport_loopback.c                                     | 2 +-
-+ libknet/transport_sctp.c                                         | 2 +-
-+ libknet/transport_udp.c                                          | 2 +-
-+ libknet/transports.c                                             | 2 +-
-+ libnozzle/internals.c                                            | 2 +-
-+ libnozzle/libnozzle.c                                            | 2 +-
-+ libnozzle/tests/api_nozzle_add_ip.c                              | 2 +-
-+ libnozzle/tests/api_nozzle_close.c                               | 2 +-
-+ libnozzle/tests/api_nozzle_del_ip.c                              | 2 +-
-+ libnozzle/tests/api_nozzle_get_fd.c                              | 2 +-
-+ libnozzle/tests/api_nozzle_get_handle_by_name.c                  | 2 +-
-+ libnozzle/tests/api_nozzle_get_ips.c                             | 2 +-
-+ libnozzle/tests/api_nozzle_get_mac.c                             | 2 +-
-+ libnozzle/tests/api_nozzle_get_mtu.c                             | 2 +-
-+ libnozzle/tests/api_nozzle_get_name_by_handle.c                  | 2 +-
-+ libnozzle/tests/api_nozzle_open.c                                | 2 +-
-+ libnozzle/tests/api_nozzle_run_updown.c                          | 2 +-
-+ libnozzle/tests/api_nozzle_set_down.c                            | 2 +-
-+ libnozzle/tests/api_nozzle_set_mac.c                             | 2 +-
-+ libnozzle/tests/api_nozzle_set_mtu.c                             | 2 +-
-+ libnozzle/tests/api_nozzle_set_up.c                              | 2 +-
-+ libnozzle/tests/int_execute_bin_sh_command.c                     | 2 +-
-+ libnozzle/tests/test-common.c                                    | 2 +-
-+ man/doxyxml.c                                                    | 2 +-
-+ poc-code/iov-hash/main.c                                         | 2 +-
-+ build-aux/check.mk                                               | 2 +-
-+ build-aux/release.mk                                             | 2 +-
-+ build-aux/update-copyright.sh                                    | 4 ++--
-+ init/kronosnetd.default                                          | 2 +-
-+ libknet/libknet_exported_syms                                    | 2 +-
-+ libknet/tests/api-check.mk                                       | 2 +-
-+ libknet/tests/api-test-coverage                                  | 2 +-
-+ libnozzle/libnozzle_exported_syms                                | 2 +-
-+ libnozzle/tests/api-test-coverage                                | 2 +-
-+ libnozzle/tests/nozzle_run_updown_exit_false                     | 2 +-
-+ libnozzle/tests/nozzle_run_updown_exit_true                      | 2 +-
-+ man/api-to-man-page-coverage                                     | 2 +-
-+ man/knet-keygen.8                                                | 2 +-
-+ man/kronosnetd.8                                                 | 2 +-
-+ 208 files changed, 209 insertions(+), 209 deletions(-)
-+
-+diff --git a/README b/README
-+index 7b5e7ce..f8f3ea6 100644
-+--- a/README
-++++ b/README
-+@@ -3,7 +3,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ Upstream resources
-+diff --git a/autogen.sh b/autogen.sh
-+index 8fb1e58..92e9483 100755
-+--- a/autogen.sh
-++++ b/autogen.sh
-+@@ -4,7 +4,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ # Run this to generate all the initial makefiles, etc.
-+diff --git a/configure.ac b/configure.ac
-+index 501053e..e962592 100644
-+--- a/configure.ac
-++++ b/configure.ac
-+@@ -4,7 +4,7 @@
-+ # Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #          Federico Simoncelli <fsimon at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ #                                               -*- Autoconf -*-
-+diff --git a/Makefile.am b/Makefile.am
-+index 82cb1f5..dc5f8a5 100644
-+--- a/Makefile.am
-++++ b/Makefile.am
-+@@ -3,7 +3,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ MAINTAINERCLEANFILES	= Makefile.in aclocal.m4 configure depcomp \
-+diff --git a/init/Makefile.am b/init/Makefile.am
-+index 4d59a9e..fe0d9b0 100644
-+--- a/init/Makefile.am
-++++ b/init/Makefile.am
-+@@ -3,7 +3,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ MAINTAINERCLEANFILES	= Makefile.in
-+diff --git a/kronosnetd/Makefile.am b/kronosnetd/Makefile.am
-+index 0b6f673..5ce8fa5 100644
-+--- a/kronosnetd/Makefile.am
-++++ b/kronosnetd/Makefile.am
-+@@ -3,7 +3,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ MAINTAINERCLEANFILES	= Makefile.in kronostnetd.logrotate
-+diff --git a/libknet/Makefile.am b/libknet/Makefile.am
-+index 8adcc40..d080732 100644
-+--- a/libknet/Makefile.am
-++++ b/libknet/Makefile.am
-+@@ -4,7 +4,7 @@
-+ # Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #          Federico Simoncelli <fsimon at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ MAINTAINERCLEANFILES	= Makefile.in
-+diff --git a/libknet/tests/Makefile.am b/libknet/tests/Makefile.am
-+index 015587c..3346596 100644
-+--- a/libknet/tests/Makefile.am
-++++ b/libknet/tests/Makefile.am
-+@@ -3,7 +3,7 @@
-+ #
-+ # Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ MAINTAINERCLEANFILES	= Makefile.in
-+diff --git a/libnozzle/Makefile.am b/libnozzle/Makefile.am
-+index 2ffbd08..8ac438a 100644
-+--- a/libnozzle/Makefile.am
-++++ b/libnozzle/Makefile.am
-+@@ -3,7 +3,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ MAINTAINERCLEANFILES	= Makefile.in
-+diff --git a/libnozzle/tests/Makefile.am b/libnozzle/tests/Makefile.am
-+index b9e16ae..cdc42a3 100644
-+--- a/libnozzle/tests/Makefile.am
-++++ b/libnozzle/tests/Makefile.am
-+@@ -3,7 +3,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ MAINTAINERCLEANFILES	= Makefile.in
-+diff --git a/man/Makefile.am b/man/Makefile.am
-+index 0ad12f6..a473e90 100644
-+--- a/man/Makefile.am
-++++ b/man/Makefile.am
-+@@ -4,7 +4,7 @@
-+ # Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #          Federico Simoncelli <fsimon at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ MAINTAINERCLEANFILES	= Makefile.in
-+diff --git a/poc-code/Makefile.am b/poc-code/Makefile.am
-+index 15d12f7..ddbea08 100644
-+--- a/poc-code/Makefile.am
-++++ b/poc-code/Makefile.am
-+@@ -3,7 +3,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ MAINTAINERCLEANFILES	= Makefile.in
-+diff --git a/poc-code/iov-hash/Makefile.am b/poc-code/iov-hash/Makefile.am
-+index a41ed99..acd6b51 100644
-+--- a/poc-code/iov-hash/Makefile.am
-++++ b/poc-code/iov-hash/Makefile.am
-+@@ -3,7 +3,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ MAINTAINERCLEANFILES	= Makefile.in
-+diff --git a/kronosnetd/cfg.h b/kronosnetd/cfg.h
-+index 0260bff..56fa4d5 100644
-+--- a/kronosnetd/cfg.h
-++++ b/kronosnetd/cfg.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #ifndef __KNETD_CFG_H__
-+diff --git a/kronosnetd/etherfilter.h b/kronosnetd/etherfilter.h
-+index d805dd6..63e18b6 100644
-+--- a/kronosnetd/etherfilter.h
-++++ b/kronosnetd/etherfilter.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #ifndef __KNETD_ETHERFILTER_H__
-+diff --git a/kronosnetd/logging.h b/kronosnetd/logging.h
-+index e4d5ce2..1bc12b9 100644
-+--- a/kronosnetd/logging.h
-++++ b/kronosnetd/logging.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #ifndef __KNETD_LOGGING_H__
-+diff --git a/kronosnetd/vty.h b/kronosnetd/vty.h
-+index 86bd821..3c3e6e0 100644
-+--- a/kronosnetd/vty.h
-++++ b/kronosnetd/vty.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #ifndef __KNETD_VTY_H__
-+diff --git a/kronosnetd/vty_auth.h b/kronosnetd/vty_auth.h
-+index c42989b..58d75cb 100644
-+--- a/kronosnetd/vty_auth.h
-++++ b/kronosnetd/vty_auth.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #ifndef __KNETD_VTY_AUTH_H__
-+diff --git a/kronosnetd/vty_cli.h b/kronosnetd/vty_cli.h
-+index 9bbdcc7..0d7e515 100644
-+--- a/kronosnetd/vty_cli.h
-++++ b/kronosnetd/vty_cli.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #ifndef __KNETD_VTY_CLI_H__
-+diff --git a/kronosnetd/vty_cli_cmds.h b/kronosnetd/vty_cli_cmds.h
-+index ac07573..ba40ddf 100644
-+--- a/kronosnetd/vty_cli_cmds.h
-++++ b/kronosnetd/vty_cli_cmds.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #ifndef __KNETD_VTY_CLI_CMDS_H__
-+diff --git a/kronosnetd/vty_utils.h b/kronosnetd/vty_utils.h
-+index 07e339b..7ac318a 100644
-+--- a/kronosnetd/vty_utils.h
-++++ b/kronosnetd/vty_utils.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #ifndef __KNETD_VTY_UTILS_H__
-+diff --git a/libknet/common.h b/libknet/common.h
-+index ddea7fc..6128b16 100644
-+--- a/libknet/common.h
-++++ b/libknet/common.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "internals.h"
-+diff --git a/libknet/compat.h b/libknet/compat.h
-+index e9af804..903fdfb 100644
-+--- a/libknet/compat.h
-++++ b/libknet/compat.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Jan Friesse <jfriesse at redhat.com>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_COMPAT_H__
-+diff --git a/libknet/compress.h b/libknet/compress.h
-+index 47edddf..d43a9d5 100644
-+--- a/libknet/compress.h
-++++ b/libknet/compress.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_COMPRESS_H__
-+diff --git a/libknet/compress_model.h b/libknet/compress_model.h
-+index 909f5a1..e69e491 100644
-+--- a/libknet/compress_model.h
-++++ b/libknet/compress_model.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_COMPRESS_MODEL_H__
-+diff --git a/libknet/crypto.h b/libknet/crypto.h
-+index 707de32..f80cb43 100644
-+--- a/libknet/crypto.h
-++++ b/libknet/crypto.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_CRYPTO_H__
-+diff --git a/libknet/crypto_model.h b/libknet/crypto_model.h
-+index 9bb4f17..70f6238 100644
-+--- a/libknet/crypto_model.h
-++++ b/libknet/crypto_model.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_CRYPTO_MODEL_H__
-+diff --git a/libknet/host.h b/libknet/host.h
-+index 4336b17..307b6e7 100644
-+--- a/libknet/host.h
-++++ b/libknet/host.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_HOST_H__
-+diff --git a/libknet/internals.h b/libknet/internals.h
-+index 12f613c..3f105a1 100644
-+--- a/libknet/internals.h
-++++ b/libknet/internals.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_INTERNALS_H__
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index 907213f..acd1c86 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __LIBKNET_H__
-+diff --git a/libknet/links.h b/libknet/links.h
-+index 7c0250d..e14958d 100644
-+--- a/libknet/links.h
-++++ b/libknet/links.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_LINK_H__
-+diff --git a/libknet/links_acl.h b/libknet/links_acl.h
-+index 60f7812..4617c9b 100644
-+--- a/libknet/links_acl.h
-++++ b/libknet/links_acl.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_LINKS_ACL_H__
-+diff --git a/libknet/links_acl_ip.h b/libknet/links_acl_ip.h
-+index b33ffb1..f566c1e 100644
-+--- a/libknet/links_acl_ip.h
-++++ b/libknet/links_acl_ip.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_LINKS_ACL_IP_H__
-+diff --git a/libknet/links_acl_loopback.h b/libknet/links_acl_loopback.h
-+index b51d2bf..d10764c 100644
-+--- a/libknet/links_acl_loopback.h
-++++ b/libknet/links_acl_loopback.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_LINKS_ACL_LOOPBACK_H__
-+diff --git a/libknet/logging.h b/libknet/logging.h
-+index bdcd85e..01dcaf1 100644
-+--- a/libknet/logging.h
-++++ b/libknet/logging.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_LOGGING_H__
-+diff --git a/libknet/netutils.h b/libknet/netutils.h
-+index bdc605e..b293115 100644
-+--- a/libknet/netutils.h
-++++ b/libknet/netutils.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_NETUTILS_H__
-+diff --git a/libknet/onwire.h b/libknet/onwire.h
-+index ea45bfb..9815bc3 100644
-+--- a/libknet/onwire.h
-++++ b/libknet/onwire.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_ONWIRE_H__
-+diff --git a/libknet/tests/test-common.h b/libknet/tests/test-common.h
-+index a498a09..f1375ab 100644
-+--- a/libknet/tests/test-common.h
-++++ b/libknet/tests/test-common.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_TEST_COMMON_H__
-+diff --git a/libknet/threads_common.h b/libknet/threads_common.h
-+index cff7691..596de14 100644
-+--- a/libknet/threads_common.h
-++++ b/libknet/threads_common.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_THREADS_COMMON_H__
-+diff --git a/libknet/threads_dsthandler.h b/libknet/threads_dsthandler.h
-+index 0c968ff..db9117c 100644
-+--- a/libknet/threads_dsthandler.h
-++++ b/libknet/threads_dsthandler.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_THREADS_DSTHANDLER_H__
-+diff --git a/libknet/threads_heartbeat.h b/libknet/threads_heartbeat.h
-+index 2fcc9a0..b2580d1 100644
-+--- a/libknet/threads_heartbeat.h
-++++ b/libknet/threads_heartbeat.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_THREADS_HEARTBEAT_H__
-+diff --git a/libknet/threads_pmtud.h b/libknet/threads_pmtud.h
-+index 2cdcdbc..5ed3155 100644
-+--- a/libknet/threads_pmtud.h
-++++ b/libknet/threads_pmtud.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_THREADS_PMTUD_H__
-+diff --git a/libknet/threads_rx.h b/libknet/threads_rx.h
-+index ff8bd6e..b88c098 100644
-+--- a/libknet/threads_rx.h
-++++ b/libknet/threads_rx.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_THREADS_RX_H__
-+diff --git a/libknet/threads_tx.h b/libknet/threads_tx.h
-+index 7c4b2c0..28c4958 100644
-+--- a/libknet/threads_tx.h
-++++ b/libknet/threads_tx.h
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_THREADS_TX_H__
-+diff --git a/libknet/transport_common.h b/libknet/transport_common.h
-+index 778af8b..0ca21d0 100644
-+--- a/libknet/transport_common.h
-++++ b/libknet/transport_common.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_TRANSPORT_COMMON_H__
-+diff --git a/libknet/transport_loopback.h b/libknet/transport_loopback.h
-+index 6ce3ed3..a848ff8 100644
-+--- a/libknet/transport_loopback.h
-++++ b/libknet/transport_loopback.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/transport_sctp.h b/libknet/transport_sctp.h
-+index 83a638b..0b8f320 100644
-+--- a/libknet/transport_sctp.h
-++++ b/libknet/transport_sctp.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/transport_udp.h b/libknet/transport_udp.h
-+index 6de18e3..1dec863 100644
-+--- a/libknet/transport_udp.h
-++++ b/libknet/transport_udp.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/transports.h b/libknet/transports.h
-+index 38f69ba..3a29ce6 100644
-+--- a/libknet/transports.h
-++++ b/libknet/transports.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __KNET_TRANSPORTS_H__
-+diff --git a/libnozzle/internals.h b/libnozzle/internals.h
-+index 853e14e..c9192a8 100644
-+--- a/libnozzle/internals.h
-++++ b/libnozzle/internals.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __NOZZLE_INTERNALS_H__
-+diff --git a/libnozzle/libnozzle.h b/libnozzle/libnozzle.h
-+index b8ab7d6..ad7c474 100644
-+--- a/libnozzle/libnozzle.h
-++++ b/libnozzle/libnozzle.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #ifndef __LIBNOZZLE_H__
-+diff --git a/libnozzle/tests/test-common.h b/libnozzle/tests/test-common.h
-+index 4562ea2..fcfafef 100644
-+--- a/libnozzle/tests/test-common.h
-++++ b/libnozzle/tests/test-common.h
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #ifndef __NOZZLE_TEST_COMMON_H__
-+diff --git a/init/kronosnetd.in b/init/kronosnetd.in
-+index 1823a3b..1da3273 100644
-+--- a/init/kronosnetd.in
-++++ b/init/kronosnetd.in
-+@@ -5,7 +5,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ # chkconfig: - 20 80
-+diff --git a/init/kronosnetd.service.in b/init/kronosnetd.service.in
-+index 4d2a32a..cfc80f7 100644
-+--- a/init/kronosnetd.service.in
-++++ b/init/kronosnetd.service.in
-+@@ -3,7 +3,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ [Unit]
-+diff --git a/kronosnetd/kronosnetd.logrotate.in b/kronosnetd/kronosnetd.logrotate.in
-+index 4ed1fd2..a8a6969 100644
-+--- a/kronosnetd/kronosnetd.logrotate.in
-++++ b/kronosnetd/kronosnetd.logrotate.in
-+@@ -3,7 +3,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ @LOGDIR at kronosnetd.log {
-+diff --git a/libknet/libknet.pc.in b/libknet/libknet.pc.in
-+index bb7b25c..021b2c4 100644
-+--- a/libknet/libknet.pc.in
-++++ b/libknet/libknet.pc.in
-+@@ -3,7 +3,7 @@
-+ #
-+ # Author: Federico Simoncelli <fsimon at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under LGPL-2.0+
-+ #
-+ 
-+ prefix=@prefix@
-+diff --git a/libnozzle/libnozzle.pc.in b/libnozzle/libnozzle.pc.in
-+index d6b2a15..9df0918 100644
-+--- a/libnozzle/libnozzle.pc.in
-++++ b/libnozzle/libnozzle.pc.in
-+@@ -3,7 +3,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under LGPL-2.0+
-+ #
-+ 
-+ prefix=@prefix@
-+diff --git a/man/Doxyfile-knet.in b/man/Doxyfile-knet.in
-+index f78e313..4750c9a 100644
-+--- a/man/Doxyfile-knet.in
-++++ b/man/Doxyfile-knet.in
-+@@ -4,7 +4,7 @@
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #         Christine Caulfield <ccaulfie at redhat.com>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ PROJECT_NAME	       = @PACKAGE_NAME@
-+ PROJECT_NUMBER         = @PACKAGE_VERSION@
-+diff --git a/man/Doxyfile-nozzle.in b/man/Doxyfile-nozzle.in
-+index 2855e50..793d49d 100644
-+--- a/man/Doxyfile-nozzle.in
-++++ b/man/Doxyfile-nozzle.in
-+@@ -4,7 +4,7 @@
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #         Christine Caulfield <ccaulfie at redhat.com>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ PROJECT_NAME	       = @PACKAGE_NAME@
-+ PROJECT_NUMBER         = @PACKAGE_VERSION@
-+diff --git a/kronosnetd/cfg.c b/kronosnetd/cfg.c
-+index 69d209a..406532a 100644
-+--- a/kronosnetd/cfg.c
-++++ b/kronosnetd/cfg.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/kronosnetd/etherfilter.c b/kronosnetd/etherfilter.c
-+index 8542061..5f0d9fb 100644
-+--- a/kronosnetd/etherfilter.c
-++++ b/kronosnetd/etherfilter.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/kronosnetd/keygen.c b/kronosnetd/keygen.c
-+index eb91473..42706ad 100644
-+--- a/kronosnetd/keygen.c
-++++ b/kronosnetd/keygen.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/kronosnetd/logging.c b/kronosnetd/logging.c
-+index b3ef0d1..9c141cd 100644
-+--- a/kronosnetd/logging.c
-++++ b/kronosnetd/logging.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/kronosnetd/main.c b/kronosnetd/main.c
-+index c1a8c2b..ec43871 100644
-+--- a/kronosnetd/main.c
-++++ b/kronosnetd/main.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/kronosnetd/vty.c b/kronosnetd/vty.c
-+index d624bf4..2c5d4d3 100644
-+--- a/kronosnetd/vty.c
-++++ b/kronosnetd/vty.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/kronosnetd/vty_auth.c b/kronosnetd/vty_auth.c
-+index cf997f9..30e0929 100644
-+--- a/kronosnetd/vty_auth.c
-++++ b/kronosnetd/vty_auth.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/kronosnetd/vty_cli.c b/kronosnetd/vty_cli.c
-+index 68ff0da..95e4c8f 100644
-+--- a/kronosnetd/vty_cli.c
-++++ b/kronosnetd/vty_cli.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/kronosnetd/vty_cli_cmds.c b/kronosnetd/vty_cli_cmds.c
-+index 18b11a0..e5ad496 100644
-+--- a/kronosnetd/vty_cli_cmds.c
-++++ b/kronosnetd/vty_cli_cmds.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/kronosnetd/vty_utils.c b/kronosnetd/vty_utils.c
-+index 3c5cc86..2cf5117 100644
-+--- a/kronosnetd/vty_utils.c
-++++ b/kronosnetd/vty_utils.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/common.c b/libknet/common.c
-+index be46f23..30e537e 100644
-+--- a/libknet/common.c
-++++ b/libknet/common.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/compat.c b/libknet/compat.c
-+index a60bca2..e808f33 100644
-+--- a/libknet/compat.c
-++++ b/libknet/compat.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Jan Friesse <jfriesse at redhat.com>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/compress.c b/libknet/compress.c
-+index 864828f..24755c7 100644
-+--- a/libknet/compress.c
-++++ b/libknet/compress.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/compress_bzip2.c b/libknet/compress_bzip2.c
-+index 521e206..5a972ff 100644
-+--- a/libknet/compress_bzip2.c
-++++ b/libknet/compress_bzip2.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ #define KNET_MODULE
-+ 
-+diff --git a/libknet/compress_lz4.c b/libknet/compress_lz4.c
-+index 22b926f..60aa196 100644
-+--- a/libknet/compress_lz4.c
-++++ b/libknet/compress_lz4.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ #define KNET_MODULE
-+ 
-+diff --git a/libknet/compress_lz4hc.c b/libknet/compress_lz4hc.c
-+index 9a69ab4..781bf12 100644
-+--- a/libknet/compress_lz4hc.c
-++++ b/libknet/compress_lz4hc.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ #define KNET_MODULE
-+ 
-+diff --git a/libknet/compress_lzma.c b/libknet/compress_lzma.c
-+index e9ba2e3..7fdd178 100644
-+--- a/libknet/compress_lzma.c
-++++ b/libknet/compress_lzma.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ #define KNET_MODULE
-+ 
-+diff --git a/libknet/compress_lzo2.c b/libknet/compress_lzo2.c
-+index e66d3dc..12066ed 100644
-+--- a/libknet/compress_lzo2.c
-++++ b/libknet/compress_lzo2.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ #define KNET_MODULE
-+ 
-+diff --git a/libknet/compress_zlib.c b/libknet/compress_zlib.c
-+index 8807bb4..2fb12f5 100644
-+--- a/libknet/compress_zlib.c
-++++ b/libknet/compress_zlib.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ #define KNET_MODULE
-+ 
-+diff --git a/libknet/compress_zstd.c b/libknet/compress_zstd.c
-+index 6f9b499..f76ea5f 100644
-+--- a/libknet/compress_zstd.c
-++++ b/libknet/compress_zstd.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ #define KNET_MODULE
-+ 
-+diff --git a/libknet/crypto.c b/libknet/crypto.c
-+index 6c340f5..9f05fba 100644
-+--- a/libknet/crypto.c
-++++ b/libknet/crypto.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/crypto_nss.c b/libknet/crypto_nss.c
-+index 5c3a437..330b40c 100644
-+--- a/libknet/crypto_nss.c
-++++ b/libknet/crypto_nss.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ #define KNET_MODULE
-+ 
-+diff --git a/libknet/crypto_openssl.c b/libknet/crypto_openssl.c
-+index 999ed93..0cbc6f5 100644
-+--- a/libknet/crypto_openssl.c
-++++ b/libknet/crypto_openssl.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ #define KNET_MODULE
-+ 
-+diff --git a/libknet/handle.c b/libknet/handle.c
-+index 251d332..4835e99 100644
-+--- a/libknet/handle.c
-++++ b/libknet/handle.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/host.c b/libknet/host.c
-+index 66826c1..abb1f89 100644
-+--- a/libknet/host.c
-++++ b/libknet/host.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/links.c b/libknet/links.c
-+index 8011a6d..4ec308c 100644
-+--- a/libknet/links.c
-++++ b/libknet/links.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index 776408a..eb77e7b 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/links_acl_ip.c b/libknet/links_acl_ip.c
-+index 9310f21..e479bbd 100644
-+--- a/libknet/links_acl_ip.c
-++++ b/libknet/links_acl_ip.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/links_acl_loopback.c b/libknet/links_acl_loopback.c
-+index 044a51c..0a0adec 100644
-+--- a/libknet/links_acl_loopback.c
-++++ b/libknet/links_acl_loopback.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/logging.c b/libknet/logging.c
-+index 5c91257..2efee1b 100644
-+--- a/libknet/logging.c
-++++ b/libknet/logging.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/netutils.c b/libknet/netutils.c
-+index 72bc659..e37f4fe 100644
-+--- a/libknet/netutils.c
-++++ b/libknet/netutils.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_addrtostr.c b/libknet/tests/api_knet_addrtostr.c
-+index 9adbf31..9cdf502 100644
-+--- a/libknet/tests/api_knet_addrtostr.c
-++++ b/libknet/tests/api_knet_addrtostr.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_get_compress_list.c b/libknet/tests/api_knet_get_compress_list.c
-+index 230e203..53e4192 100644
-+--- a/libknet/tests/api_knet_get_compress_list.c
-++++ b/libknet/tests/api_knet_get_compress_list.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_get_crypto_list.c b/libknet/tests/api_knet_get_crypto_list.c
-+index 4121aa4..760adab 100644
-+--- a/libknet/tests/api_knet_get_crypto_list.c
-++++ b/libknet/tests/api_knet_get_crypto_list.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_get_transport_id_by_name.c b/libknet/tests/api_knet_get_transport_id_by_name.c
-+index 973814f..9bcd673 100644
-+--- a/libknet/tests/api_knet_get_transport_id_by_name.c
-++++ b/libknet/tests/api_knet_get_transport_id_by_name.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_get_transport_list.c b/libknet/tests/api_knet_get_transport_list.c
-+index c748901..9ab5c10 100644
-+--- a/libknet/tests/api_knet_get_transport_list.c
-++++ b/libknet/tests/api_knet_get_transport_list.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_get_transport_name_by_id.c b/libknet/tests/api_knet_get_transport_name_by_id.c
-+index a797cec..3233a1d 100644
-+--- a/libknet/tests/api_knet_get_transport_name_by_id.c
-++++ b/libknet/tests/api_knet_get_transport_name_by_id.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_add_datafd.c b/libknet/tests/api_knet_handle_add_datafd.c
-+index 7159399..3088797 100644
-+--- a/libknet/tests/api_knet_handle_add_datafd.c
-++++ b/libknet/tests/api_knet_handle_add_datafd.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_clear_stats.c b/libknet/tests/api_knet_handle_clear_stats.c
-+index 07f059a..0867b13 100644
-+--- a/libknet/tests/api_knet_handle_clear_stats.c
-++++ b/libknet/tests/api_knet_handle_clear_stats.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_compress.c b/libknet/tests/api_knet_handle_compress.c
-+index 1525e6a..40b6f39 100644
-+--- a/libknet/tests/api_knet_handle_compress.c
-++++ b/libknet/tests/api_knet_handle_compress.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_crypto.c b/libknet/tests/api_knet_handle_crypto.c
-+index 9dbf5bc..1eed96e 100644
-+--- a/libknet/tests/api_knet_handle_crypto.c
-++++ b/libknet/tests/api_knet_handle_crypto.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_enable_access_lists.c b/libknet/tests/api_knet_handle_enable_access_lists.c
-+index d08f175..be54bc4 100644
-+--- a/libknet/tests/api_knet_handle_enable_access_lists.c
-++++ b/libknet/tests/api_knet_handle_enable_access_lists.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_enable_filter.c b/libknet/tests/api_knet_handle_enable_filter.c
-+index 63b2166..e518b42 100644
-+--- a/libknet/tests/api_knet_handle_enable_filter.c
-++++ b/libknet/tests/api_knet_handle_enable_filter.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_enable_pmtud_notify.c b/libknet/tests/api_knet_handle_enable_pmtud_notify.c
-+index 726c2cc..f11abc3 100644
-+--- a/libknet/tests/api_knet_handle_enable_pmtud_notify.c
-++++ b/libknet/tests/api_knet_handle_enable_pmtud_notify.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_enable_sock_notify.c b/libknet/tests/api_knet_handle_enable_sock_notify.c
-+index 9c90600..adefb5a 100644
-+--- a/libknet/tests/api_knet_handle_enable_sock_notify.c
-++++ b/libknet/tests/api_knet_handle_enable_sock_notify.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_free.c b/libknet/tests/api_knet_handle_free.c
-+index 75319fc..53b6dc6 100644
-+--- a/libknet/tests/api_knet_handle_free.c
-++++ b/libknet/tests/api_knet_handle_free.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_get_channel.c b/libknet/tests/api_knet_handle_get_channel.c
-+index 3ade302..0196136 100644
-+--- a/libknet/tests/api_knet_handle_get_channel.c
-++++ b/libknet/tests/api_knet_handle_get_channel.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_get_datafd.c b/libknet/tests/api_knet_handle_get_datafd.c
-+index 8838b69..57aedf5 100644
-+--- a/libknet/tests/api_knet_handle_get_datafd.c
-++++ b/libknet/tests/api_knet_handle_get_datafd.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_get_stats.c b/libknet/tests/api_knet_handle_get_stats.c
-+index e8a83b4..38a0c97 100644
-+--- a/libknet/tests/api_knet_handle_get_stats.c
-++++ b/libknet/tests/api_knet_handle_get_stats.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_get_transport_reconnect_interval.c b/libknet/tests/api_knet_handle_get_transport_reconnect_interval.c
-+index 7a43823..f013a5b 100644
-+--- a/libknet/tests/api_knet_handle_get_transport_reconnect_interval.c
-++++ b/libknet/tests/api_knet_handle_get_transport_reconnect_interval.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_new.c b/libknet/tests/api_knet_handle_new.c
-+index b7af566..9559d4a 100644
-+--- a/libknet/tests/api_knet_handle_new.c
-++++ b/libknet/tests/api_knet_handle_new.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_new_limit.c b/libknet/tests/api_knet_handle_new_limit.c
-+index d51db97..fc3bdcd 100644
-+--- a/libknet/tests/api_knet_handle_new_limit.c
-++++ b/libknet/tests/api_knet_handle_new_limit.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_pmtud_get.c b/libknet/tests/api_knet_handle_pmtud_get.c
-+index a1b1d12..803a288 100644
-+--- a/libknet/tests/api_knet_handle_pmtud_get.c
-++++ b/libknet/tests/api_knet_handle_pmtud_get.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_pmtud_getfreq.c b/libknet/tests/api_knet_handle_pmtud_getfreq.c
-+index 5c5c7e0..23e3239 100644
-+--- a/libknet/tests/api_knet_handle_pmtud_getfreq.c
-++++ b/libknet/tests/api_knet_handle_pmtud_getfreq.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_pmtud_setfreq.c b/libknet/tests/api_knet_handle_pmtud_setfreq.c
-+index b4eebda..2a720c3 100644
-+--- a/libknet/tests/api_knet_handle_pmtud_setfreq.c
-++++ b/libknet/tests/api_knet_handle_pmtud_setfreq.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_remove_datafd.c b/libknet/tests/api_knet_handle_remove_datafd.c
-+index 08a42ab..ace5df7 100644
-+--- a/libknet/tests/api_knet_handle_remove_datafd.c
-++++ b/libknet/tests/api_knet_handle_remove_datafd.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_set_transport_reconnect_interval.c b/libknet/tests/api_knet_handle_set_transport_reconnect_interval.c
-+index 80bbacb..c561559 100644
-+--- a/libknet/tests/api_knet_handle_set_transport_reconnect_interval.c
-++++ b/libknet/tests/api_knet_handle_set_transport_reconnect_interval.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_handle_setfwd.c b/libknet/tests/api_knet_handle_setfwd.c
-+index 9658075..21a5c9f 100644
-+--- a/libknet/tests/api_knet_handle_setfwd.c
-++++ b/libknet/tests/api_knet_handle_setfwd.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_host_add.c b/libknet/tests/api_knet_host_add.c
-+index 762d0df..65104f5 100644
-+--- a/libknet/tests/api_knet_host_add.c
-++++ b/libknet/tests/api_knet_host_add.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_host_enable_status_change_notify.c b/libknet/tests/api_knet_host_enable_status_change_notify.c
-+index 96d133d..b0467a5 100644
-+--- a/libknet/tests/api_knet_host_enable_status_change_notify.c
-++++ b/libknet/tests/api_knet_host_enable_status_change_notify.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_host_get_host_list.c b/libknet/tests/api_knet_host_get_host_list.c
-+index 76fb23b..fc573bb 100644
-+--- a/libknet/tests/api_knet_host_get_host_list.c
-++++ b/libknet/tests/api_knet_host_get_host_list.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_host_get_id_by_host_name.c b/libknet/tests/api_knet_host_get_id_by_host_name.c
-+index 81ad504..745dbfa 100644
-+--- a/libknet/tests/api_knet_host_get_id_by_host_name.c
-++++ b/libknet/tests/api_knet_host_get_id_by_host_name.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_host_get_name_by_host_id.c b/libknet/tests/api_knet_host_get_name_by_host_id.c
-+index d239821..4604525 100644
-+--- a/libknet/tests/api_knet_host_get_name_by_host_id.c
-++++ b/libknet/tests/api_knet_host_get_name_by_host_id.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_host_get_policy.c b/libknet/tests/api_knet_host_get_policy.c
-+index 3160503..8511815 100644
-+--- a/libknet/tests/api_knet_host_get_policy.c
-++++ b/libknet/tests/api_knet_host_get_policy.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_host_get_status.c b/libknet/tests/api_knet_host_get_status.c
-+index b13c57a..3b46f0c 100644
-+--- a/libknet/tests/api_knet_host_get_status.c
-++++ b/libknet/tests/api_knet_host_get_status.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_host_remove.c b/libknet/tests/api_knet_host_remove.c
-+index 12d1f8f..36dd47c 100644
-+--- a/libknet/tests/api_knet_host_remove.c
-++++ b/libknet/tests/api_knet_host_remove.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_host_set_name.c b/libknet/tests/api_knet_host_set_name.c
-+index 88d6ce9..c899d33 100644
-+--- a/libknet/tests/api_knet_host_set_name.c
-++++ b/libknet/tests/api_knet_host_set_name.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_host_set_policy.c b/libknet/tests/api_knet_host_set_policy.c
-+index 41102d2..2583114 100644
-+--- a/libknet/tests/api_knet_host_set_policy.c
-++++ b/libknet/tests/api_knet_host_set_policy.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_add_acl.c b/libknet/tests/api_knet_link_add_acl.c
-+index ff7a2e2..52d6022 100644
-+--- a/libknet/tests/api_knet_link_add_acl.c
-++++ b/libknet/tests/api_knet_link_add_acl.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_clear_acl.c b/libknet/tests/api_knet_link_clear_acl.c
-+index 234a76b..3516b4d 100644
-+--- a/libknet/tests/api_knet_link_clear_acl.c
-++++ b/libknet/tests/api_knet_link_clear_acl.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_clear_config.c b/libknet/tests/api_knet_link_clear_config.c
-+index 8d7800d..ff9c473 100644
-+--- a/libknet/tests/api_knet_link_clear_config.c
-++++ b/libknet/tests/api_knet_link_clear_config.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_get_config.c b/libknet/tests/api_knet_link_get_config.c
-+index 111b406..60a56fd 100644
-+--- a/libknet/tests/api_knet_link_get_config.c
-++++ b/libknet/tests/api_knet_link_get_config.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_get_enable.c b/libknet/tests/api_knet_link_get_enable.c
-+index 410c017..b0e1348 100644
-+--- a/libknet/tests/api_knet_link_get_enable.c
-++++ b/libknet/tests/api_knet_link_get_enable.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_get_link_list.c b/libknet/tests/api_knet_link_get_link_list.c
-+index e3dd73e..6114f83 100644
-+--- a/libknet/tests/api_knet_link_get_link_list.c
-++++ b/libknet/tests/api_knet_link_get_link_list.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_get_ping_timers.c b/libknet/tests/api_knet_link_get_ping_timers.c
-+index 5f0e9b1..414619f 100644
-+--- a/libknet/tests/api_knet_link_get_ping_timers.c
-++++ b/libknet/tests/api_knet_link_get_ping_timers.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_get_pong_count.c b/libknet/tests/api_knet_link_get_pong_count.c
-+index bbc993d..e032b96 100644
-+--- a/libknet/tests/api_knet_link_get_pong_count.c
-++++ b/libknet/tests/api_knet_link_get_pong_count.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_get_priority.c b/libknet/tests/api_knet_link_get_priority.c
-+index 29d7d2e..80538fe 100644
-+--- a/libknet/tests/api_knet_link_get_priority.c
-++++ b/libknet/tests/api_knet_link_get_priority.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_get_status.c b/libknet/tests/api_knet_link_get_status.c
-+index fe56734..5139692 100644
-+--- a/libknet/tests/api_knet_link_get_status.c
-++++ b/libknet/tests/api_knet_link_get_status.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_insert_acl.c b/libknet/tests/api_knet_link_insert_acl.c
-+index 79d04df..2f55c16 100644
-+--- a/libknet/tests/api_knet_link_insert_acl.c
-++++ b/libknet/tests/api_knet_link_insert_acl.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_rm_acl.c b/libknet/tests/api_knet_link_rm_acl.c
-+index d132c54..7217a4f 100644
-+--- a/libknet/tests/api_knet_link_rm_acl.c
-++++ b/libknet/tests/api_knet_link_rm_acl.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_set_config.c b/libknet/tests/api_knet_link_set_config.c
-+index b96c628..c43a4de 100644
-+--- a/libknet/tests/api_knet_link_set_config.c
-++++ b/libknet/tests/api_knet_link_set_config.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_set_enable.c b/libknet/tests/api_knet_link_set_enable.c
-+index f48f1c0..17e6e03 100644
-+--- a/libknet/tests/api_knet_link_set_enable.c
-++++ b/libknet/tests/api_knet_link_set_enable.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_set_ping_timers.c b/libknet/tests/api_knet_link_set_ping_timers.c
-+index d823a81..46170f6 100644
-+--- a/libknet/tests/api_knet_link_set_ping_timers.c
-++++ b/libknet/tests/api_knet_link_set_ping_timers.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_set_pong_count.c b/libknet/tests/api_knet_link_set_pong_count.c
-+index 70fc57f..b8974e3 100644
-+--- a/libknet/tests/api_knet_link_set_pong_count.c
-++++ b/libknet/tests/api_knet_link_set_pong_count.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_link_set_priority.c b/libknet/tests/api_knet_link_set_priority.c
-+index a89392e..aac0ea2 100644
-+--- a/libknet/tests/api_knet_link_set_priority.c
-++++ b/libknet/tests/api_knet_link_set_priority.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_log_get_loglevel.c b/libknet/tests/api_knet_log_get_loglevel.c
-+index 4a62ead..4d4a52c 100644
-+--- a/libknet/tests/api_knet_log_get_loglevel.c
-++++ b/libknet/tests/api_knet_log_get_loglevel.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_log_get_loglevel_id.c b/libknet/tests/api_knet_log_get_loglevel_id.c
-+index 1053dff..379ba71 100644
-+--- a/libknet/tests/api_knet_log_get_loglevel_id.c
-++++ b/libknet/tests/api_knet_log_get_loglevel_id.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_log_get_loglevel_name.c b/libknet/tests/api_knet_log_get_loglevel_name.c
-+index 317ebb1..ef19af2 100644
-+--- a/libknet/tests/api_knet_log_get_loglevel_name.c
-++++ b/libknet/tests/api_knet_log_get_loglevel_name.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_log_get_subsystem_id.c b/libknet/tests/api_knet_log_get_subsystem_id.c
-+index 0b47805..cff9e8a 100644
-+--- a/libknet/tests/api_knet_log_get_subsystem_id.c
-++++ b/libknet/tests/api_knet_log_get_subsystem_id.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_log_get_subsystem_name.c b/libknet/tests/api_knet_log_get_subsystem_name.c
-+index 1b11fe6..0384730 100644
-+--- a/libknet/tests/api_knet_log_get_subsystem_name.c
-++++ b/libknet/tests/api_knet_log_get_subsystem_name.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_log_set_loglevel.c b/libknet/tests/api_knet_log_set_loglevel.c
-+index e729113..7a9232a 100644
-+--- a/libknet/tests/api_knet_log_set_loglevel.c
-++++ b/libknet/tests/api_knet_log_set_loglevel.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_recv.c b/libknet/tests/api_knet_recv.c
-+index 6e23353..99bd7bc 100644
-+--- a/libknet/tests/api_knet_recv.c
-++++ b/libknet/tests/api_knet_recv.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_send.c b/libknet/tests/api_knet_send.c
-+index ca16e3d..ab9715a 100644
-+--- a/libknet/tests/api_knet_send.c
-++++ b/libknet/tests/api_knet_send.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_send_compress.c b/libknet/tests/api_knet_send_compress.c
-+index b03f4e7..6d5f445 100644
-+--- a/libknet/tests/api_knet_send_compress.c
-++++ b/libknet/tests/api_knet_send_compress.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_send_crypto.c b/libknet/tests/api_knet_send_crypto.c
-+index e33a808..11de857 100644
-+--- a/libknet/tests/api_knet_send_crypto.c
-++++ b/libknet/tests/api_knet_send_crypto.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_send_loopback.c b/libknet/tests/api_knet_send_loopback.c
-+index 2feca68..741b51d 100644
-+--- a/libknet/tests/api_knet_send_loopback.c
-++++ b/libknet/tests/api_knet_send_loopback.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_send_sync.c b/libknet/tests/api_knet_send_sync.c
-+index f2718c9..96cb716 100644
-+--- a/libknet/tests/api_knet_send_sync.c
-++++ b/libknet/tests/api_knet_send_sync.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/api_knet_strtoaddr.c b/libknet/tests/api_knet_strtoaddr.c
-+index 57a8a0a..a0be1da 100644
-+--- a/libknet/tests/api_knet_strtoaddr.c
-++++ b/libknet/tests/api_knet_strtoaddr.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/int_links_acl_ip.c b/libknet/tests/int_links_acl_ip.c
-+index 93dff63..41e7d59 100644
-+--- a/libknet/tests/int_links_acl_ip.c
-++++ b/libknet/tests/int_links_acl_ip.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/int_timediff.c b/libknet/tests/int_timediff.c
-+index 12735d8..a878a31 100644
-+--- a/libknet/tests/int_timediff.c
-++++ b/libknet/tests/int_timediff.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/knet_bench.c b/libknet/tests/knet_bench.c
-+index 00cd58b..dfe5238 100644
-+--- a/libknet/tests/knet_bench.c
-++++ b/libknet/tests/knet_bench.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/tests/pckt_test.c b/libknet/tests/pckt_test.c
-+index 56cf018..f3e2100 100644
-+--- a/libknet/tests/pckt_test.c
-++++ b/libknet/tests/pckt_test.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include <stdio.h>
-+diff --git a/libknet/tests/test-common.c b/libknet/tests/test-common.c
-+index a4ff297..cd3f6c4 100644
-+--- a/libknet/tests/test-common.c
-++++ b/libknet/tests/test-common.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/threads_common.c b/libknet/threads_common.c
-+index 53a6f9f..1f3e1e3 100644
-+--- a/libknet/threads_common.c
-++++ b/libknet/threads_common.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/threads_dsthandler.c b/libknet/threads_dsthandler.c
-+index 2633188..0776107 100644
-+--- a/libknet/threads_dsthandler.c
-++++ b/libknet/threads_dsthandler.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/threads_heartbeat.c b/libknet/threads_heartbeat.c
-+index 8def9b8..8f8a7ec 100644
-+--- a/libknet/threads_heartbeat.c
-++++ b/libknet/threads_heartbeat.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/threads_pmtud.c b/libknet/threads_pmtud.c
-+index b4ee632..603f595 100644
-+--- a/libknet/threads_pmtud.c
-++++ b/libknet/threads_pmtud.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/threads_rx.c b/libknet/threads_rx.c
-+index 626cbc4..b2a5dad 100644
-+--- a/libknet/threads_rx.c
-++++ b/libknet/threads_rx.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/threads_tx.c b/libknet/threads_tx.c
-+index 8096906..32d65d5 100644
-+--- a/libknet/threads_tx.c
-++++ b/libknet/threads_tx.c
-+@@ -4,7 +4,7 @@
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *          Federico Simoncelli <fsimon at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/transport_common.c b/libknet/transport_common.c
-+index fe40ad8..7286643 100644
-+--- a/libknet/transport_common.c
-++++ b/libknet/transport_common.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/transport_loopback.c b/libknet/transport_loopback.c
-+index 54129d7..17253f5 100644
-+--- a/libknet/transport_loopback.c
-++++ b/libknet/transport_loopback.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/transport_sctp.c b/libknet/transport_sctp.c
-+index 2c1cdcc..d97d6f9 100644
-+--- a/libknet/transport_sctp.c
-++++ b/libknet/transport_sctp.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/transport_udp.c b/libknet/transport_udp.c
-+index 1537438..53d2ba0 100644
-+--- a/libknet/transport_udp.c
-++++ b/libknet/transport_udp.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libknet/transports.c b/libknet/transports.c
-+index 51712df..93119c5 100644
-+--- a/libknet/transports.c
-++++ b/libknet/transports.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/internals.c b/libnozzle/internals.c
-+index f056e3b..53c0cdb 100644
-+--- a/libnozzle/internals.c
-++++ b/libnozzle/internals.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/libnozzle.c b/libnozzle/libnozzle.c
-+index b6e9566..15863ec 100644
-+--- a/libnozzle/libnozzle.c
-++++ b/libnozzle/libnozzle.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under LGPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_add_ip.c b/libnozzle/tests/api_nozzle_add_ip.c
-+index bb81ba7..a9d76c6 100644
-+--- a/libnozzle/tests/api_nozzle_add_ip.c
-++++ b/libnozzle/tests/api_nozzle_add_ip.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_close.c b/libnozzle/tests/api_nozzle_close.c
-+index f1cbc77..7ba17c4 100644
-+--- a/libnozzle/tests/api_nozzle_close.c
-++++ b/libnozzle/tests/api_nozzle_close.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_del_ip.c b/libnozzle/tests/api_nozzle_del_ip.c
-+index 0178bb0..625484f 100644
-+--- a/libnozzle/tests/api_nozzle_del_ip.c
-++++ b/libnozzle/tests/api_nozzle_del_ip.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_get_fd.c b/libnozzle/tests/api_nozzle_get_fd.c
-+index 9b29faf..5dc5b4c 100644
-+--- a/libnozzle/tests/api_nozzle_get_fd.c
-++++ b/libnozzle/tests/api_nozzle_get_fd.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_get_handle_by_name.c b/libnozzle/tests/api_nozzle_get_handle_by_name.c
-+index 83c39bb..1fa5a0a 100644
-+--- a/libnozzle/tests/api_nozzle_get_handle_by_name.c
-++++ b/libnozzle/tests/api_nozzle_get_handle_by_name.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_get_ips.c b/libnozzle/tests/api_nozzle_get_ips.c
-+index c41024f..446a79a 100644
-+--- a/libnozzle/tests/api_nozzle_get_ips.c
-++++ b/libnozzle/tests/api_nozzle_get_ips.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_get_mac.c b/libnozzle/tests/api_nozzle_get_mac.c
-+index 1318ba5..f4c72cc 100644
-+--- a/libnozzle/tests/api_nozzle_get_mac.c
-++++ b/libnozzle/tests/api_nozzle_get_mac.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_get_mtu.c b/libnozzle/tests/api_nozzle_get_mtu.c
-+index 07b05ee..1b1f85e 100644
-+--- a/libnozzle/tests/api_nozzle_get_mtu.c
-++++ b/libnozzle/tests/api_nozzle_get_mtu.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_get_name_by_handle.c b/libnozzle/tests/api_nozzle_get_name_by_handle.c
-+index 5b8152b..0fe9eb4 100644
-+--- a/libnozzle/tests/api_nozzle_get_name_by_handle.c
-++++ b/libnozzle/tests/api_nozzle_get_name_by_handle.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_open.c b/libnozzle/tests/api_nozzle_open.c
-+index ee15316..413f2c2 100644
-+--- a/libnozzle/tests/api_nozzle_open.c
-++++ b/libnozzle/tests/api_nozzle_open.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_run_updown.c b/libnozzle/tests/api_nozzle_run_updown.c
-+index c80216a..1536b5b 100644
-+--- a/libnozzle/tests/api_nozzle_run_updown.c
-++++ b/libnozzle/tests/api_nozzle_run_updown.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_set_down.c b/libnozzle/tests/api_nozzle_set_down.c
-+index 90623ba..9466bdb 100644
-+--- a/libnozzle/tests/api_nozzle_set_down.c
-++++ b/libnozzle/tests/api_nozzle_set_down.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_set_mac.c b/libnozzle/tests/api_nozzle_set_mac.c
-+index dba7d49..244e866 100644
-+--- a/libnozzle/tests/api_nozzle_set_mac.c
-++++ b/libnozzle/tests/api_nozzle_set_mac.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_set_mtu.c b/libnozzle/tests/api_nozzle_set_mtu.c
-+index fc8ee1c..ce4ccbb 100644
-+--- a/libnozzle/tests/api_nozzle_set_mtu.c
-++++ b/libnozzle/tests/api_nozzle_set_mtu.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/api_nozzle_set_up.c b/libnozzle/tests/api_nozzle_set_up.c
-+index d8de39d..d258b6a 100644
-+--- a/libnozzle/tests/api_nozzle_set_up.c
-++++ b/libnozzle/tests/api_nozzle_set_up.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/int_execute_bin_sh_command.c b/libnozzle/tests/int_execute_bin_sh_command.c
-+index 87531c0..97422a2 100644
-+--- a/libnozzle/tests/int_execute_bin_sh_command.c
-++++ b/libnozzle/tests/int_execute_bin_sh_command.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/libnozzle/tests/test-common.c b/libnozzle/tests/test-common.c
-+index c84aac1..b36be79 100644
-+--- a/libnozzle/tests/test-common.c
-++++ b/libnozzle/tests/test-common.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ #include "config.h"
-+diff --git a/man/doxyxml.c b/man/doxyxml.c
-+index 7d9a60c..2f28976 100644
-+--- a/man/doxyxml.c
-++++ b/man/doxyxml.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ 
-+diff --git a/poc-code/iov-hash/main.c b/poc-code/iov-hash/main.c
-+index 61d2e12..fa407a2 100644
-+--- a/poc-code/iov-hash/main.c
-++++ b/poc-code/iov-hash/main.c
-+@@ -3,7 +3,7 @@
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-++ * This software licensed under GPL-2.0+
-+  */
-+ 
-+ /* Example code to illustrate DES enccryption/decryption using NSS.
-+diff --git a/build-aux/check.mk b/build-aux/check.mk
-+index 6da4417..f42e552 100644
-+--- a/build-aux/check.mk
-++++ b/build-aux/check.mk
-+@@ -3,7 +3,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ VALGRIND = $(VALGRIND_EXEC) -q --error-exitcode=127 --gen-suppressions=all
-+diff --git a/build-aux/release.mk b/build-aux/release.mk
-+index de3599d..003125d 100644
-+--- a/build-aux/release.mk
-++++ b/build-aux/release.mk
-+@@ -3,7 +3,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ # to build official release tarballs, handle tagging and publish.
-+diff --git a/build-aux/update-copyright.sh b/build-aux/update-copyright.sh
-+index fd50f8e..62c449c 100755
-+--- a/build-aux/update-copyright.sh
-++++ b/build-aux/update-copyright.sh
-+@@ -1,10 +1,10 @@
-+ #!/bin/sh
-+ #
-+-# Copyright (C) 2017 Red Hat, Inc.  All rights reserved.
-++# Copyright (C) 2017-2019 Red Hat, Inc.  All rights reserved.
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ # script to update copyright dates across the tree
-+diff --git a/init/kronosnetd.default b/init/kronosnetd.default
-+index ed94648..9f6755c 100644
-+--- a/init/kronosnetd.default
-++++ b/init/kronosnetd.default
-+@@ -4,7 +4,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ 
-+diff --git a/libknet/libknet_exported_syms b/libknet/libknet_exported_syms
-+index d8a55e2..1d8bddb 100644
-+--- a/libknet/libknet_exported_syms
-++++ b/libknet/libknet_exported_syms
-+@@ -4,7 +4,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under LGPL-2.0+
-+ #
-+ 
-+ LIBKNET {
-+diff --git a/libknet/tests/api-check.mk b/libknet/tests/api-check.mk
-+index 427c388..102ec52 100644
-+--- a/libknet/tests/api-check.mk
-++++ b/libknet/tests/api-check.mk
-+@@ -3,7 +3,7 @@
-+ #
-+ # Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ api_checks		= \
-+diff --git a/libknet/tests/api-test-coverage b/libknet/tests/api-test-coverage
-+index bf0ccc3..e988ab1 100755
-+--- a/libknet/tests/api-test-coverage
-++++ b/libknet/tests/api-test-coverage
-+@@ -4,7 +4,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ srcdir="$1"/libknet/tests
-+diff --git a/libnozzle/libnozzle_exported_syms b/libnozzle/libnozzle_exported_syms
-+index 934b204..f6f62d2 100644
-+--- a/libnozzle/libnozzle_exported_syms
-++++ b/libnozzle/libnozzle_exported_syms
-+@@ -4,7 +4,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under LGPL-2.0+
-+ #
-+ 
-+ LIBNOZZLE {
-+diff --git a/libnozzle/tests/api-test-coverage b/libnozzle/tests/api-test-coverage
-+index cd99edf..4049ad9 100755
-+--- a/libnozzle/tests/api-test-coverage
-++++ b/libnozzle/tests/api-test-coverage
-+@@ -4,7 +4,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ srcdir="$1"/libnozzle/tests
-+diff --git a/libnozzle/tests/nozzle_run_updown_exit_false b/libnozzle/tests/nozzle_run_updown_exit_false
-+index 3f03ff6..795456a 100755
-+--- a/libnozzle/tests/nozzle_run_updown_exit_false
-++++ b/libnozzle/tests/nozzle_run_updown_exit_false
-+@@ -5,7 +5,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ exit 1
-+diff --git a/libnozzle/tests/nozzle_run_updown_exit_true b/libnozzle/tests/nozzle_run_updown_exit_true
-+index bbdcdd6..7b6e355 100755
-+--- a/libnozzle/tests/nozzle_run_updown_exit_true
-++++ b/libnozzle/tests/nozzle_run_updown_exit_true
-+@@ -5,7 +5,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ exit 0
-+diff --git a/man/api-to-man-page-coverage b/man/api-to-man-page-coverage
-+index b9dc18f..a1f54a3 100755
-+--- a/man/api-to-man-page-coverage
-++++ b/man/api-to-man-page-coverage
-+@@ -4,7 +4,7 @@
-+ #
-+ # Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ #
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-++# This software licensed under GPL-2.0+
-+ #
-+ 
-+ err=0
-+diff --git a/man/knet-keygen.8 b/man/knet-keygen.8
-+index 67ecf1f..96109c6 100644
-+--- a/man/knet-keygen.8
-++++ b/man/knet-keygen.8
-+@@ -5,7 +5,7 @@
-+ .\" *
-+ .\" * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ .\" *
-+-.\" * This software licensed under GPL-2.0+, LGPL-2.0+
-++.\" * This software licensed under GPL-2.0+
-+ .\" */
-+ .TH "KRONOSNETD" "8" "November 2012" "kronosnetd key generator." "System Administration Utilities"
-+ 
-+diff --git a/man/kronosnetd.8 b/man/kronosnetd.8
-+index 5661e1c..f4480be 100644
-+--- a/man/kronosnetd.8
-++++ b/man/kronosnetd.8
-+@@ -5,7 +5,7 @@
-+ .\" *
-+ .\" * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+ .\" *
-+-.\" * This software licensed under GPL-2.0+, LGPL-2.0+
-++.\" * This software licensed under GPL-2.0+
-+ .\" */
-+ .TH "KRONOSNETD" "8" "November 2012" "kronosnetd Usage:" "System Administration Utilities"
-+ 
-diff --git a/debian/patches/PMTUd-create-common-shared-code-to-trigger-PMTUd-rerun.patch b/debian/patches/PMTUd-create-common-shared-code-to-trigger-PMTUd-rerun.patch
-new file mode 100644
-index 0000000..2404d7a
---- /dev/null
-+++ b/debian/patches/PMTUd-create-common-shared-code-to-trigger-PMTUd-rerun.patch
-@@ -0,0 +1,79 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Mon, 27 May 2019 12:37:15 +0200
-+Subject: [PMTUd] create common/shared code to trigger PMTUd rerun
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 5b02bef11afda959dc8cea4adc383f80ff0e9273)
-+---
-+ libknet/threads_common.h |  1 +
-+ libknet/threads_common.c | 20 ++++++++++++++++++++
-+ libknet/transport_udp.c  | 17 +----------------
-+ 3 files changed, 22 insertions(+), 16 deletions(-)
-+
-+diff --git a/libknet/threads_common.h b/libknet/threads_common.h
-+index 79aaed2..19336ce 100644
-+--- a/libknet/threads_common.h
-++++ b/libknet/threads_common.h
-+@@ -45,5 +45,6 @@ int shutdown_in_progress(knet_handle_t knet_h);
-+ int get_global_wrlock(knet_handle_t knet_h);
-+ int set_thread_status(knet_handle_t knet_h, uint8_t thread_id, uint8_t status);
-+ int wait_all_threads_status(knet_handle_t knet_h, uint8_t status);
-++void force_pmtud_run(knet_handle_t knet_h, uint8_t subsystem);
-+ 
-+ #endif
-+diff --git a/libknet/threads_common.c b/libknet/threads_common.c
-+index b6012a2..61ffd82 100644
-+--- a/libknet/threads_common.c
-++++ b/libknet/threads_common.c
-+@@ -156,3 +156,23 @@ int wait_all_threads_status(knet_handle_t knet_h, uint8_t status)
-+ 
-+ 	return 0;
-+ }
-++
-++void force_pmtud_run(knet_handle_t knet_h, uint8_t subsystem)
-++{
-++	/*
-++	 * we can only try to take a lock here. This part of the code
-++	 * can be invoked by any thread, including PMTUd that is already
-++	 * holding a lock at that stage.
-++	 * If PMTUd is holding the lock, most likely it is already running
-++	 * and we don't need to notify it back.
-++	 */
-++	if (!pthread_mutex_trylock(&knet_h->pmtud_mutex)) {
-++		if (!knet_h->pmtud_running) {
-++			if (!knet_h->pmtud_forcerun) {
-++				log_debug(knet_h, subsystem, "Notifying PMTUd to rerun");
-++				knet_h->pmtud_forcerun = 1;
-++			}
-++		}
-++		pthread_mutex_unlock(&knet_h->pmtud_mutex);
-++	}
-++}
-+diff --git a/libknet/transport_udp.c b/libknet/transport_udp.c
-+index 3fd69ee..232dbcb 100644
-+--- a/libknet/transport_udp.c
-++++ b/libknet/transport_udp.c
-+@@ -340,22 +340,7 @@ static int read_errs_from_sock(knet_handle_t knet_h, int sockfd)
-+ 									pthread_mutex_unlock(&knet_h->kmtu_mutex);
-+ 								}
-+ 
-+-								/*
-+-								 * we can only try to take a lock here. This part of the code
-+-								 * can be invoked by any thread, including PMTUd that is already
-+-								 * holding a lock at that stage.
-+-								 * If PMTUd is holding the lock, most likely it is already running
-+-								 * and we don't need to notify it back.
-+-								 */
-+-								if (!pthread_mutex_trylock(&knet_h->pmtud_mutex)) {
-+-									if (!knet_h->pmtud_running) {
-+-										if (!knet_h->pmtud_forcerun) {
-+-											log_debug(knet_h, KNET_SUB_TRANSP_UDP, "Notifying PMTUd to rerun");
-+-											knet_h->pmtud_forcerun = 1;
-+-										}
-+-									}
-+-									pthread_mutex_unlock(&knet_h->pmtud_mutex);
-+-								}
-++								force_pmtud_run(knet_h, KNET_SUB_TRANSP_UDP);
-+ 							}
-+ 							/*
-+ 							 * those errors are way too noisy
-diff --git a/debian/patches/PMTUd-extend-internal-rerun-API-to-allow-full-PMTUd-reset.patch b/debian/patches/PMTUd-extend-internal-rerun-API-to-allow-full-PMTUd-reset.patch
-new file mode 100644
-index 0000000..31f4550
---- /dev/null
-+++ b/debian/patches/PMTUd-extend-internal-rerun-API-to-allow-full-PMTUd-reset.patch
-@@ -0,0 +1,74 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 28 May 2019 05:35:24 +0200
-+Subject: [PMTUd] extend internal rerun API to allow full PMTUd reset
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 6542aa98cccb2c9bc2c201ef47538a787a5e05fd)
-+---
-+ libknet/threads_common.h |  2 +-
-+ libknet/handle.c         |  2 +-
-+ libknet/threads_common.c | 11 ++++++++++-
-+ libknet/transport_udp.c  |  2 +-
-+ 4 files changed, 13 insertions(+), 4 deletions(-)
-+
-+diff --git a/libknet/threads_common.h b/libknet/threads_common.h
-+index 19336ce..cff7691 100644
-+--- a/libknet/threads_common.h
-++++ b/libknet/threads_common.h
-+@@ -45,6 +45,6 @@ int shutdown_in_progress(knet_handle_t knet_h);
-+ int get_global_wrlock(knet_handle_t knet_h);
-+ int set_thread_status(knet_handle_t knet_h, uint8_t thread_id, uint8_t status);
-+ int wait_all_threads_status(knet_handle_t knet_h, uint8_t status);
-+-void force_pmtud_run(knet_handle_t knet_h, uint8_t subsystem);
-++void force_pmtud_run(knet_handle_t knet_h, uint8_t subsystem, uint8_t reset_mtu);
-+ 
-+ #endif
-+diff --git a/libknet/handle.c b/libknet/handle.c
-+index e95c6c1..251d332 100644
-+--- a/libknet/handle.c
-++++ b/libknet/handle.c
-+@@ -1408,7 +1408,7 @@ int knet_handle_crypto(knet_handle_t knet_h, struct knet_handle_crypto_cfg *knet
-+ 
-+ exit_unlock:
-+ 	if (!err) {
-+-		force_pmtud_run(knet_h, KNET_SUB_CRYPTO);
-++		force_pmtud_run(knet_h, KNET_SUB_CRYPTO, 1);
-+ 	}
-+ 	pthread_rwlock_unlock(&knet_h->global_rwlock);
-+ 	errno = err ? savederrno : 0;
-+diff --git a/libknet/threads_common.c b/libknet/threads_common.c
-+index 61ffd82..53a6f9f 100644
-+--- a/libknet/threads_common.c
-++++ b/libknet/threads_common.c
-+@@ -157,8 +157,17 @@ int wait_all_threads_status(knet_handle_t knet_h, uint8_t status)
-+ 	return 0;
-+ }
-+ 
-+-void force_pmtud_run(knet_handle_t knet_h, uint8_t subsystem)
-++void force_pmtud_run(knet_handle_t knet_h, uint8_t subsystem, uint8_t reset_mtu)
-+ {
-++	if (reset_mtu) {
-++		log_debug(knet_h, subsystem, "PMTUd has been reset to default");
-++		knet_h->data_mtu = KNET_PMTUD_MIN_MTU_V4 - KNET_HEADER_ALL_SIZE - knet_h->sec_header_size;
-++		if (knet_h->pmtud_notify_fn) {
-++			knet_h->pmtud_notify_fn(knet_h->pmtud_notify_fn_private_data,
-++						knet_h->data_mtu);
-++		}
-++	}
-++
-+ 	/*
-+ 	 * we can only try to take a lock here. This part of the code
-+ 	 * can be invoked by any thread, including PMTUd that is already
-+diff --git a/libknet/transport_udp.c b/libknet/transport_udp.c
-+index 232dbcb..1537438 100644
-+--- a/libknet/transport_udp.c
-++++ b/libknet/transport_udp.c
-+@@ -340,7 +340,7 @@ static int read_errs_from_sock(knet_handle_t knet_h, int sockfd)
-+ 									pthread_mutex_unlock(&knet_h->kmtu_mutex);
-+ 								}
-+ 
-+-								force_pmtud_run(knet_h, KNET_SUB_TRANSP_UDP);
-++								force_pmtud_run(knet_h, KNET_SUB_TRANSP_UDP, 0);
-+ 							}
-+ 							/*
-+ 							 * those errors are way too noisy
-diff --git a/debian/patches/access-lists-add-access-lists-support-to-sctp.patch b/debian/patches/access-lists-add-access-lists-support-to-sctp.patch
-new file mode 100644
-index 0000000..d962193
---- /dev/null
-+++ b/debian/patches/access-lists-add-access-lists-support-to-sctp.patch
-@@ -0,0 +1,96 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Sun, 17 Feb 2019 07:49:13 +0100
-+Subject: [access lists] add access lists support to sctp
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit d2333aab530d06ec502131aea03281ac13263d99)
-+---
-+ libknet/transport_sctp.c | 33 +++++++++++++++++++++++++++++++++
-+ 1 file changed, 33 insertions(+)
-+
-+diff --git a/libknet/transport_sctp.c b/libknet/transport_sctp.c
-+index cb64a32..0d69a33 100644
-+--- a/libknet/transport_sctp.c
-++++ b/libknet/transport_sctp.c
-+@@ -19,6 +19,7 @@
-+ #include "compat.h"
-+ #include "host.h"
-+ #include "links.h"
-++#include "links_acl.h"
-+ #include "logging.h"
-+ #include "common.h"
-+ #include "transport_common.h"
-+@@ -728,6 +729,15 @@ static void _handle_incoming_sctp(knet_handle_t knet_h, int listen_sock)
-+ 
-+ 	log_debug(knet_h, KNET_SUB_TRANSP_SCTP, "Incoming: received connection from: %s port: %s",
-+ 						addr_str, port_str);
-++	if (knet_h->use_access_lists) {
-++		if (!ipcheck_validate(&knet_h->knet_transport_fd_tracker[listen_sock].match_entry, &ss)) {
-++			savederrno = EINVAL;
-++			err = -1;
-++			log_debug(knet_h, KNET_SUB_TRANSP_SCTP, "Connection rejected from %s/%s", addr_str, port_str);
-++			close(new_fd);
-++			goto exit_error;
-++		}
-++	}
-+ 
-+ 	/*
-+ 	 * Keep a track of all accepted FDs
-+@@ -936,6 +946,11 @@ static sctp_listen_link_info_t *sctp_link_listener_start(knet_handle_t knet_h, s
-+ 	 */
-+ 	knet_list_for_each_entry(info, &handle_info->listen_links_list, list) {
-+ 		if (memcmp(&info->src_address, &kn_link->src_addr, sizeof(struct sockaddr_storage)) == 0) {
-++			err = ipcheck_addip(&knet_h->knet_transport_fd_tracker[info->listen_sock].match_entry,
-++					    &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-++			if (err) {
-++				return NULL;
-++			}
-+ 			return info;
-+ 		}
-+ 	}
-+@@ -990,6 +1005,15 @@ static sctp_listen_link_info_t *sctp_link_listener_start(knet_handle_t knet_h, s
-+ 		goto exit_error;
-+ 	}
-+ 
-++	if (ipcheck_addip(&knet_h->knet_transport_fd_tracker[listen_sock].match_entry,
-++			  &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) {
-++		savederrno = errno;
-++		err = -1;
-++		log_err(knet_h, KNET_SUB_TRANSP_SCTP, "Unable to configure default access lists: %s",
-++			strerror(savederrno));
-++		goto exit_error;
-++	}
-++
-+ 	memset(&ev, 0, sizeof(struct epoll_event));
-+ 	ev.events = EPOLLIN;
-+ 	ev.data.fd = listen_sock;
-+@@ -1012,6 +1036,8 @@ exit_error:
-+ 		if (info->on_listener_epoll) {
-+ 			epoll_ctl(handle_info->listen_epollfd, EPOLL_CTL_DEL, listen_sock, &ev);
-+ 		}
-++		ipcheck_rmip(&knet_h->knet_transport_fd_tracker[listen_sock].match_entry,
-++			     &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+ 		if (listen_sock >= 0) {
-+ 			close(listen_sock);
-+ 		}
-+@@ -1050,6 +1076,11 @@ static int sctp_link_listener_stop(knet_handle_t knet_h, struct knet_link *kn_li
-+ 		}
-+ 	}
-+ 
-++	if (ipcheck_rmip(&knet_h->knet_transport_fd_tracker[info->listen_sock].match_entry,
-++			 &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) {
-++		log_debug(knet_h, KNET_SUB_TRANSP_SCTP, "Unable to remove default access lists for %d", info->listen_sock);
-++	}
-++
-+ 	if (found) {
-+ 		this_link_info->listener = NULL;
-+ 		log_debug(knet_h, KNET_SUB_TRANSP_SCTP, "SCTP listener socket %d still in use", info->listen_sock);
-+@@ -1080,6 +1111,8 @@ static int sctp_link_listener_stop(knet_handle_t knet_h, struct knet_link *kn_li
-+ 		goto exit_error;
-+ 	}
-+ 
-++	check_rmall(&knet_h->knet_transport_fd_tracker[info->listen_sock].match_entry);
-++
-+ 	close(info->listen_sock);
-+ 
-+ 	for (i=0; i< MAX_ACCEPTED_SOCKS; i++) {
-diff --git a/debian/patches/access-lists-add-documentation-for-enable_access_list.patch b/debian/patches/access-lists-add-documentation-for-enable_access_list.patch
-new file mode 100644
-index 0000000..e07e54a
---- /dev/null
-+++ b/debian/patches/access-lists-add-documentation-for-enable_access_list.patch
-@@ -0,0 +1,58 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Sat, 2 Mar 2019 07:49:19 +0100
-+Subject: [access lists] add documentation for enable_access_list
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 21cf1a648999774053a9c7386b13eb5a64c1c7db)
-+---
-+ libknet/libknet.h | 28 ++++++++++++++++++++++------
-+ 1 file changed, 22 insertions(+), 6 deletions(-)
-+
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index 4283afe..03bbd97 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -505,21 +505,37 @@ int knet_handle_setfwd(knet_handle_t knet_h, unsigned int enabled);
-+ /**
-+  * knet_handle_enable_access_lists
-+  *
-+- * @brief Start packet forwarding
-++ * @brief Enable or disable usage of access lists (default: off)
-+  *
-+  * knet_h   - pointer to knet_handle_t
-+  *
-+- * enable   - set to 1 to use ip access lists, 0 to disable ip access_lists.
-++ * enable   - set to 1 to use access lists, 0 to disable access_lists.
-+  *
-+  * @return
-+  * knet_handle_enable_access_lists returns
-+  * 0 on success
-+  * -1 on error and errno is set.
-+  *
-+- * By default access lists usage is off, but default internal access lists
-+- * will be populated regardless, but not enforced. TODO add long explanation
-+- * on internal access lists for point to point connections vs global
-+- * listeners etc.
-++ * access lists are bound to links. There are 2 types of links:
-++ * 1) point to point, where both source and destinations are well known
-++ *    at configuration time.
-++ * 2) open links, where only the source is known at configuration time.
-++ *
-++ * knet will automatically generate access lists for point to point links.
-++ *
-++ * For open links, knet provides 3 API calls to manipulate access lists:
-++ * knet_link_add_acl, knet_link_rm_acl and knet_link_clear_acl.
-++ * Those API calls will work only and exclusively on open links as they
-++ * provide no use for point to point links.
-++ *
-++ * knet will not enforce any access list unless specifically enabled by
-++ * knet_handle_enable_access_lists.
-++ *
-++ * From a security / programming perspective we recommend to:
-++ * - create the knet handle
-++ * - enable access lists
-++ * - configure hosts and links
-++ * - configure access lists for open links
-+  */
-+ 
-+ int knet_handle_enable_access_lists(knet_handle_t knet_h, unsigned int enabled);
-diff --git a/debian/patches/access-lists-add-errno-around-and-start-using-them.patch b/debian/patches/access-lists-add-errno-around-and-start-using-them.patch
-new file mode 100644
-index 0000000..12c0f24
---- /dev/null
-+++ b/debian/patches/access-lists-add-errno-around-and-start-using-them.patch
-@@ -0,0 +1,195 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 26 Feb 2019 10:43:04 +0100
-+Subject: [access lists] add errno around and start using them
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 9a5babce2066ecb61a5647345792675c2f9f416b)
-+---
-+ libknet/links.c          | 14 +++++++-------
-+ libknet/links_acl.c      |  9 +++++++++
-+ libknet/links_acl_ip.c   | 12 ++++++++++--
-+ libknet/transport_sctp.c | 16 +++++++---------
-+ 4 files changed, 33 insertions(+), 18 deletions(-)
-+
-+diff --git a/libknet/links.c b/libknet/links.c
-+index dd64a15..1d21d05 100644
-+--- a/libknet/links.c
-++++ b/libknet/links.c
-+@@ -245,9 +245,9 @@ int knet_link_set_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t l
-+ 	    (link->dynamic == KNET_LINK_STATIC)) {
-+ 		log_debug(knet_h, KNET_SUB_LINK, "Configuring default access lists for host: %u link: %u socket: %d",
-+ 			  host_id, link_id, link->outsock);
-+-		if (check_add(knet_h, link->outsock, transport,
-+-			      &link->dst_addr, &link->dst_addr,
-+-			      CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) {
-++		if ((check_add(knet_h, link->outsock, transport,
-++			       &link->dst_addr, &link->dst_addr,
-++			       CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) && (errno != EEXIST)) {
-+ 			log_warn(knet_h, KNET_SUB_LINK, "Failed to configure default access lists for host: %u link: %u", host_id, link_id);
-+ 			savederrno = errno;
-+ 			err = -1;
-+@@ -428,11 +428,11 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+ 	 */
-+ 	if ((transport_get_acl_type(knet_h, link->transport) == USE_GENERIC_ACL) &&
-+ 	    (link->dynamic == KNET_LINK_STATIC)) {
-+-		if (check_rm(knet_h, link->outsock, link->transport,
-+-			     &link->dst_addr, &link->dst_addr,
-+-			     CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) {
-++		if ((check_rm(knet_h, link->outsock, link->transport,
-++			      &link->dst_addr, &link->dst_addr,
-++			      CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) && (errno != ENOENT)) {
-+ 			err = -1;
-+-			savederrno = EBUSY;
-++			savederrno = errno;
-+ 			log_err(knet_h, KNET_SUB_LINK, "Host %u link %u: unable to remove default access list",
-+ 				host_id, link_id);
-+ 			goto exit_unlock;
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index cfcc1fd..7605fe9 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -8,6 +8,7 @@
-+ 
-+ #include "config.h"
-+ 
-++#include <errno.h>
-+ #include <stdint.h>
-+ #include <string.h>
-+ #include <stdlib.h>
-+@@ -19,6 +20,11 @@
-+ #include "links_acl.h"
-+ #include "links_acl_ip.h"
-+ 
-++/*
-++ * all those functions will return errno from the
-++ * protocol specific functions
-++ */
-++
-+ int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 	      struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 	      check_type_t type, check_acceptreject_t acceptreject)
-+@@ -27,6 +33,7 @@ int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 
-+ 	switch(transport_get_proto(knet_h, transport)) {
-+ 		case LOOPBACK:
-++			errno = 0;
-+ 			err = 0;
-+ 			break;
-+ 		case IP_PROTO:
-+@@ -47,6 +54,7 @@ int check_rm(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 
-+ 	switch(transport_get_proto(knet_h, transport)) {
-+ 		case LOOPBACK:
-++			errno = 0;
-+ 			err = 0;
-+ 			break;
-+ 		case IP_PROTO:
-+@@ -80,6 +88,7 @@ int check_validate(knet_handle_t knet_h, int sock, uint8_t transport, struct soc
-+ {
-+ 	switch(transport_get_proto(knet_h, transport)) {
-+ 		case LOOPBACK:
-++			errno = 0;
-+ 			return 1;
-+ 			break;
-+ 		case IP_PROTO:
-+diff --git a/libknet/links_acl_ip.c b/libknet/links_acl_ip.c
-+index ffd18a4..58c7b28 100644
-+--- a/libknet/links_acl_ip.c
-++++ b/libknet/links_acl_ip.c
-+@@ -8,6 +8,7 @@
-+ 
-+ #include "config.h"
-+ 
-++#include <errno.h>
-+ #include <sys/socket.h>
-+ #include <netinet/in.h>
-+ #include <stdint.h>
-+@@ -202,6 +203,7 @@ int ipcheck_rmip(struct acl_match_entry **match_entry_head,
-+ 
-+ 	rm_match_entry = ipcheck_findmatch(match_entry_head, ip1, ip2, type, acceptreject);
-+ 	if (!rm_match_entry) {
-++		errno = ENOENT;
-+ 		return -1;
-+ 	}
-+ 
-+@@ -237,24 +239,30 @@ int ipcheck_addip(struct acl_match_entry **match_entry_head,
-+ 	struct acl_match_entry *match_entry = *match_entry_head;
-+ 
-+ 	if (!ip1) {
-++		errno = EINVAL;
-+ 		return -1;
-+ 	}
-+ 
-+ 	if ((type != CHECK_TYPE_ADDRESS) && (!ip2)) {
-++		errno = EINVAL;
-+ 		return -1;
-+ 	}
-+ 
-+ 	if (type == CHECK_TYPE_RANGE &&
-+-	    (ip1->ss_family != ip2->ss_family))
-++	    (ip1->ss_family != ip2->ss_family)) {
-++		errno = EINVAL;
-+ 		return -1;
-++	}
-+ 
-+ 	if (ipcheck_findmatch(match_entry_head, ip1, ip2, type, acceptreject) != NULL) {
-++		errno = EEXIST;
-+ 		return -1;
-+ 	}
-+ 
-+ 	new_match_entry = malloc(sizeof(struct acl_match_entry));
-+-	if (!new_match_entry)
-++	if (!new_match_entry) {
-+ 		return -1;
-++	}
-+ 
-+ 	memmove(&new_match_entry->addr1, ip1, sizeof(struct sockaddr_storage));
-+ 	memmove(&new_match_entry->addr2, ip2, sizeof(struct sockaddr_storage));
-+diff --git a/libknet/transport_sctp.c b/libknet/transport_sctp.c
-+index ff7903c..aa0de9d 100644
-+--- a/libknet/transport_sctp.c
-++++ b/libknet/transport_sctp.c
-+@@ -948,9 +948,8 @@ static sctp_listen_link_info_t *sctp_link_listener_start(knet_handle_t knet_h, s
-+ 	 */
-+ 	knet_list_for_each_entry(info, &handle_info->listen_links_list, list) {
-+ 		if (memcmp(&info->src_address, &kn_link->src_addr, sizeof(struct sockaddr_storage)) == 0) {
-+-			err = check_add(knet_h, info->listen_sock, KNET_TRANSPORT_SCTP,
-+-					&kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+-			if (err) {
-++			if ((check_add(knet_h, info->listen_sock, KNET_TRANSPORT_SCTP,
-++				       &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) && (errno != EEXIST)) {
-+ 				return NULL;
-+ 			}
-+ 			return info;
-+@@ -1007,8 +1006,8 @@ static sctp_listen_link_info_t *sctp_link_listener_start(knet_handle_t knet_h, s
-+ 		goto exit_error;
-+ 	}
-+ 
-+-	if (check_add(knet_h, listen_sock, KNET_TRANSPORT_SCTP,
-+-		      &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) {
-++	if ((check_add(knet_h, listen_sock, KNET_TRANSPORT_SCTP,
-++		       &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) && (errno != EEXIST)) {
-+ 		savederrno = errno;
-+ 		err = -1;
-+ 		log_err(knet_h, KNET_SUB_TRANSP_SCTP, "Unable to configure default access lists: %s",
-+@@ -1038,8 +1037,7 @@ exit_error:
-+ 		if (info->on_listener_epoll) {
-+ 			epoll_ctl(handle_info->listen_epollfd, EPOLL_CTL_DEL, listen_sock, &ev);
-+ 		}
-+-		check_rm(knet_h, listen_sock, KNET_TRANSPORT_SCTP,
-+-			 &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-++		check_rmall(knet_h, listen_sock, KNET_TRANSPORT_SCTP);
-+ 		if (listen_sock >= 0) {
-+ 			close(listen_sock);
-+ 		}
-+@@ -1078,8 +1076,8 @@ static int sctp_link_listener_stop(knet_handle_t knet_h, struct knet_link *kn_li
-+ 		}
-+ 	}
-+ 
-+-	if (check_rm(knet_h, info->listen_sock, KNET_TRANSPORT_SCTP,
-+-		     &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) {
-++	if ((check_rm(knet_h, info->listen_sock, KNET_TRANSPORT_SCTP,
-++		      &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) && (errno != ENOENT)) {
-+ 		log_debug(knet_h, KNET_SUB_TRANSP_SCTP, "Unable to remove default access lists for %d", info->listen_sock);
-+ 	}
-+ 
-diff --git a/debian/patches/access-lists-add-external-API-calls-to-manage-access-list.patch b/debian/patches/access-lists-add-external-API-calls-to-manage-access-list.patch
-new file mode 100644
-index 0000000..e872279
---- /dev/null
-+++ b/debian/patches/access-lists-add-external-API-calls-to-manage-access-list.patch
-@@ -0,0 +1,746 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Mon, 4 Mar 2019 13:07:04 +0100
-+Subject: [access lists] add external API calls to manage access lists
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 6373dd2358b816beab2cc87bdf8ff196480b60cc)
-+---
-+ man/Makefile.am               |   7 +-
-+ libknet/libknet.h             | 157 +++++++++++++++++++++-
-+ libknet/links_acl.h           |  15 +--
-+ libknet/links_acl_ip.h        |   2 +-
-+ libknet/links_acl_loopback.h  |   2 +-
-+ libknet/links.c               | 306 +++++++++++++++++++++++++++++++++++++++++-
-+ libknet/links_acl.c           |   4 +-
-+ libknet/links_acl_ip.c        |  49 ++++---
-+ libknet/links_acl_loopback.c  |   2 +-
-+ libknet/tests/int_links_acl.c |   4 +-
-+ libknet/transport_sctp.c      |   4 +-
-+ 11 files changed, 504 insertions(+), 48 deletions(-)
-+
-+diff --git a/man/Makefile.am b/man/Makefile.am
-+index 6c15f0d..0ad12f6 100644
-+--- a/man/Makefile.am
-++++ b/man/Makefile.am
-+@@ -95,7 +95,12 @@ knet_man3_MANS = \
-+ 		knet_recv.3 \
-+ 		knet_send.3 \
-+ 		knet_send_sync.3 \
-+-		knet_strtoaddr.3
-++		knet_strtoaddr.3 \
-++		knet_handle_enable_access_lists.3 \
-++		knet_link_add_acl.3 \
-++		knet_link_insert_acl.3 \
-++		knet_link_rm_acl.3 \
-++		knet_link_clear_acl.3
-+ 
-+ if BUILD_LIBNOZZLE
-+ nozzle_man3_MANS = \
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index 03bbd97..d616e11 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -524,12 +524,12 @@ int knet_handle_setfwd(knet_handle_t knet_h, unsigned int enabled);
-+  * knet will automatically generate access lists for point to point links.
-+  *
-+  * For open links, knet provides 3 API calls to manipulate access lists:
-+- * knet_link_add_acl, knet_link_rm_acl and knet_link_clear_acl.
-++ * knet_link_add_acl(3), knet_link_rm_acl(3) and knet_link_clear_acl(3).
-+  * Those API calls will work only and exclusively on open links as they
-+  * provide no use for point to point links.
-+  *
-+  * knet will not enforce any access list unless specifically enabled by
-+- * knet_handle_enable_access_lists.
-++ * knet_handle_enable_access_lists(3).
-+  *
-+  * From a security / programming perspective we recommend to:
-+  * - create the knet handle
-+@@ -1477,6 +1477,159 @@ int knet_link_get_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t l
-+ 
-+ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_id);
-+ 
-++/*
-++ * access lists management for open links
-++ * see also knet_handle_enable_access_lists(3)
-++ */
-++
-++/*
-++ * CHECK_TYPE_ADDRESS is the equivalent of a single entry / IP address.
-++ *                    for example: 10.1.9.3/32
-++ *                    and the entry is stored in ss1. ss2 can be NULL.
-++ *
-++ * CHECK_TYPE_MASK    is used to configure network/netmask.
-++ *                    for example: 192.168.0.0/24
-++ *                    the network is stored in ss1 and the netmask in ss2.
-++ *
-++ * CHECK_TYPE_RANGE   defines a value / range of ip addresses.
-++ *                    for example: 172.16.0.1-172.16.0.10
-++ *                    the start is stored in ss1 and the end in ss2.
-++ *
-++ * Please be aware that the above examples refers only to IP based protocols.
-++ * Other protocols might use ss1 and ss2 in slightly different ways.
-++ * At the moment knet only supports IP based protocol and that might change
-++ * in the future.
-++ */
-++
-++typedef enum {
-++	CHECK_TYPE_ADDRESS,
-++	CHECK_TYPE_MASK,
-++	CHECK_TYPE_RANGE
-++} check_type_t;
-++
-++/*
-++ * accept or reject incoming packets defined in the access list entry
-++ */
-++
-++typedef enum {
-++	CHECK_ACCEPT,
-++	CHECK_REJECT
-++} check_acceptreject_t;
-++
-++/**
-++ * knet_link_add_acl
-++ *
-++ * @brief Add access list entry to an open link
-++ *
-++ * knet_h    - pointer to knet_handle_t
-++ *
-++ * host_id   - see knet_host_add(3)
-++ *
-++ * link_id   - see knet_link_set_config(3)
-++ *
-++ * ss1 / ss2 / type / acceptreject - see typedef definitions for details
-++ *
-++ * IMPORTANT: the order in which access lists are added is critical and it
-++ *            is left to the user to add them in the right order. knet
-++ *            will do no attempt to logically sort them.
-++ *
-++ *            For example:
-++ *            1 - accept from 10.0.0.0/8
-++ *            2 - reject from 10.0.0.1/32
-++ *
-++ *            is not the same as:
-++ *
-++ *            1 - reject from 10.0.0.1/32
-++ *            2 - accept from 10.0.0.0/8
-++ *
-++ *            In the first example, rule number 2 will never match because
-++ *            packets from 10.0.0.1 will be accepted by rule number 1.
-++ *
-++ * @return
-++ * knet_link_add_acl
-++ * 0 on success.
-++ * -1 on error and errno is set.
-++ */
-++
-++int knet_link_add_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_id,
-++		      struct sockaddr_storage *ss1,
-++		      struct sockaddr_storage *ss2,
-++		      check_type_t type, check_acceptreject_t acceptreject);
-++
-++/**
-++ * knet_link_insert_acl
-++ *
-++ * @brief Insert access list entry to an open link at given index
-++ *
-++ * knet_h    - pointer to knet_handle_t
-++ *
-++ * host_id   - see knet_host_add(3)
-++ *
-++ * link_id   - see knet_link_set_config(3)
-++ *
-++ * index     - insert at position "index" where 0 is the first entry and -1
-++ *             append to the current list.
-++ *
-++ * ss1 / ss2 / type / acceptreject - see typedef definitions for details
-++ *
-++ * @return
-++ * knet_link_insert_acl
-++ * 0 on success.
-++ * -1 on error and errno is set.
-++ */
-++
-++int knet_link_insert_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_id,
-++			 int index,
-++			 struct sockaddr_storage *ss1,
-++			 struct sockaddr_storage *ss2,
-++			 check_type_t type, check_acceptreject_t acceptreject);
-++
-++/**
-++ * knet_link_rm_acl
-++ *
-++ * @brief Remove access list entry from an open link
-++ *
-++ * knet_h    - pointer to knet_handle_t
-++ *
-++ * host_id   - see knet_host_add(3)
-++ *
-++ * link_id   - see knet_link_set_config(3)
-++ *
-++ * ss1 / ss2 / type / acceptreject - see typedef definitions for details
-++ *
-++ * IMPORTANT: the data passed to this API call must match exactly the ones used
-++ *            in knet_link_add_acl(3).
-++ *
-++ * @return
-++ * knet_link_rm_acl
-++ * 0 on success.
-++ * -1 on error and errno is set.
-++ */
-++
-++int knet_link_rm_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_id,
-++		     struct sockaddr_storage *ss1,
-++		     struct sockaddr_storage *ss2,
-++		     check_type_t type, check_acceptreject_t acceptreject);
-++
-++/**
-++ * knet_link_clear_acl
-++ *
-++ * @brief Remove all access list entries from an open link
-++ *
-++ * knet_h    - pointer to knet_handle_t
-++ *
-++ * host_id   - see knet_host_add(3)
-++ *
-++ * link_id   - see knet_link_set_config(3)
-++ *
-++ * @return
-++ * knet_link_clear_acl
-++ * 0 on success.
-++ * -1 on error and errno is set.
-++ */
-++
-++int knet_link_clear_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_id);
-++
-+ /**
-+  * knet_link_set_enable
-+  *
-+diff --git a/libknet/links_acl.h b/libknet/links_acl.h
-+index a64faa1..60f7812 100644
-+--- a/libknet/links_acl.h
-++++ b/libknet/links_acl.h
-+@@ -11,23 +11,12 @@
-+ 
-+ #include "internals.h"
-+ 
-+-typedef enum {
-+-	CHECK_TYPE_ADDRESS,
-+-	CHECK_TYPE_MASK,
-+-	CHECK_TYPE_RANGE
-+-} check_type_t;
-+-
-+-typedef enum {
-+-	CHECK_ACCEPT,
-+-	CHECK_REJECT
-+-} check_acceptreject_t;
-+-
-+ typedef struct {
-+ 	uint8_t				transport_proto;
-+ 
-+ 	int (*protocheck_validate)	(void *fd_tracker_match_entry_head, struct sockaddr_storage *checkip);
-+ 
-+-	int (*protocheck_add)		(void *fd_tracker_match_entry_head,
-++	int (*protocheck_add)		(void *fd_tracker_match_entry_head, int index,
-+ 					 struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 					 check_type_t type, check_acceptreject_t acceptreject);
-+ 
-+@@ -38,7 +27,7 @@ typedef struct {
-+ 	void (*protocheck_rmall)	(void *fd_tracker_match_entry_head);
-+ } check_ops_t;
-+ 
-+-int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-++int check_add(knet_handle_t knet_h, int sock, uint8_t transport, int index,
-+ 	      struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 	      check_type_t type, check_acceptreject_t acceptreject);
-+ int check_rm(knet_handle_t knet_h, int sock, uint8_t transport,
-+diff --git a/libknet/links_acl_ip.h b/libknet/links_acl_ip.h
-+index e069b99..fac58e2 100644
-+--- a/libknet/links_acl_ip.h
-++++ b/libknet/links_acl_ip.h
-+@@ -14,7 +14,7 @@
-+ 
-+ int ipcheck_validate(void *fd_tracker_match_entry_head, struct sockaddr_storage *checkip);
-+ 
-+-int ipcheck_addip(void *fd_tracker_match_entry_head,
-++int ipcheck_addip(void *fd_tracker_match_entry_head, int index,
-+ 		  struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 		  check_type_t type, check_acceptreject_t acceptreject);
-+ 
-+diff --git a/libknet/links_acl_loopback.h b/libknet/links_acl_loopback.h
-+index 73a9704..e75c4a4 100644
-+--- a/libknet/links_acl_loopback.h
-++++ b/libknet/links_acl_loopback.h
-+@@ -14,7 +14,7 @@
-+ 
-+ int loopbackcheck_validate(void *fd_tracker_match_entry_head, struct sockaddr_storage *checkip);
-+ 
-+-int loopbackcheck_add(void *fd_tracker_match_entry_head,
-++int loopbackcheck_add(void *fd_tracker_match_entry_head, int index,
-+ 		      struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 		      check_type_t type, check_acceptreject_t acceptreject);
-+ 
-+diff --git a/libknet/links.c b/libknet/links.c
-+index 1d21d05..0f02006 100644
-+--- a/libknet/links.c
-++++ b/libknet/links.c
-+@@ -245,7 +245,7 @@ int knet_link_set_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t l
-+ 	    (link->dynamic == KNET_LINK_STATIC)) {
-+ 		log_debug(knet_h, KNET_SUB_LINK, "Configuring default access lists for host: %u link: %u socket: %d",
-+ 			  host_id, link_id, link->outsock);
-+-		if ((check_add(knet_h, link->outsock, transport,
-++		if ((check_add(knet_h, link->outsock, transport, -1,
-+ 			       &link->dst_addr, &link->dst_addr,
-+ 			       CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) && (errno != EEXIST)) {
-+ 			log_warn(knet_h, KNET_SUB_LINK, "Failed to configure default access lists for host: %u link: %u", host_id, link_id);
-+@@ -1148,3 +1148,307 @@ exit_unlock:
-+ 	errno = err ? savederrno : 0;
-+ 	return err;
-+ }
-++
-++int knet_link_add_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_id,
-++		      struct sockaddr_storage *ss1,
-++		      struct sockaddr_storage *ss2,
-++		      check_type_t type, check_acceptreject_t acceptreject)
-++{
-++	int savederrno = 0, err = 0;
-++	struct knet_host *host;
-++	struct knet_link *link;
-++
-++	if (!knet_h) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	if (!ss1) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	if ((type != CHECK_TYPE_ADDRESS) && (!ss2)) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	if ((type == CHECK_TYPE_RANGE) &&
-++	    (ss1->ss_family != ss2->ss_family)) {
-++			errno = EINVAL;
-++			return -1;
-++	}
-++
-++	if (link_id >= KNET_MAX_LINK) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	savederrno = get_global_wrlock(knet_h);
-++	if (savederrno) {
-++		log_err(knet_h, KNET_SUB_HOST, "Unable to get write lock: %s",
-++			strerror(savederrno));
-++		errno = savederrno;
-++		return -1;
-++	}
-++
-++	host = knet_h->host_index[host_id];
-++	if (!host) {
-++		err = -1;
-++		savederrno = EINVAL;
-++		log_err(knet_h, KNET_SUB_LINK, "Unable to find host %u: %s",
-++			host_id, strerror(savederrno));
-++		goto exit_unlock;
-++	}
-++
-++	link = &host->link[link_id];
-++
-++	if (!link->configured) {
-++		err = -1;
-++		savederrno = EINVAL;
-++		log_err(knet_h, KNET_SUB_LINK, "host %u link %u is not configured: %s",
-++			host_id, link_id, strerror(savederrno));
-++		goto exit_unlock;
-++	}
-++
-++	if (link->dynamic != KNET_LINK_DYNIP) {
-++		err = -1;
-++		savederrno = EINVAL;
-++		log_err(knet_h, KNET_SUB_LINK, "host %u link %u is a point to point connection: %s",
-++			host_id, link_id, strerror(savederrno));
-++		goto exit_unlock;
-++	}
-++
-++	err = check_add(knet_h, transport_link_get_acl_fd(knet_h, link), link->transport, -1,
-++			ss1, ss2, type, acceptreject);
-++	savederrno = errno;
-++
-++exit_unlock:
-++	pthread_rwlock_unlock(&knet_h->global_rwlock);
-++
-++	errno = savederrno;
-++	return err;
-++}
-++
-++int knet_link_insert_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_id,
-++			 int index,
-++			 struct sockaddr_storage *ss1,
-++			 struct sockaddr_storage *ss2,
-++			 check_type_t type, check_acceptreject_t acceptreject)
-++{
-++	int savederrno = 0, err = 0;
-++	struct knet_host *host;
-++	struct knet_link *link;
-++
-++	if (!knet_h) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	if (!ss1) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	if ((type != CHECK_TYPE_ADDRESS) && (!ss2)) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	if ((type == CHECK_TYPE_RANGE) &&
-++	    (ss1->ss_family != ss2->ss_family)) {
-++			errno = EINVAL;
-++			return -1;
-++	}
-++
-++	if (link_id >= KNET_MAX_LINK) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	savederrno = get_global_wrlock(knet_h);
-++	if (savederrno) {
-++		log_err(knet_h, KNET_SUB_HOST, "Unable to get write lock: %s",
-++			strerror(savederrno));
-++		errno = savederrno;
-++		return -1;
-++	}
-++
-++	host = knet_h->host_index[host_id];
-++	if (!host) {
-++		err = -1;
-++		savederrno = EINVAL;
-++		log_err(knet_h, KNET_SUB_LINK, "Unable to find host %u: %s",
-++			host_id, strerror(savederrno));
-++		goto exit_unlock;
-++	}
-++
-++	link = &host->link[link_id];
-++
-++	if (!link->configured) {
-++		err = -1;
-++		savederrno = EINVAL;
-++		log_err(knet_h, KNET_SUB_LINK, "host %u link %u is not configured: %s",
-++			host_id, link_id, strerror(savederrno));
-++		goto exit_unlock;
-++	}
-++
-++	if (link->dynamic != KNET_LINK_DYNIP) {
-++		err = -1;
-++		savederrno = EINVAL;
-++		log_err(knet_h, KNET_SUB_LINK, "host %u link %u is a point to point connection: %s",
-++			host_id, link_id, strerror(savederrno));
-++		goto exit_unlock;
-++	}
-++
-++	err = check_add(knet_h, transport_link_get_acl_fd(knet_h, link), link->transport, index,
-++			ss1, ss2, type, acceptreject);
-++	savederrno = errno;
-++
-++exit_unlock:
-++	pthread_rwlock_unlock(&knet_h->global_rwlock);
-++
-++	errno = savederrno;
-++	return err;
-++}
-++
-++int knet_link_rm_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_id,
-++		     struct sockaddr_storage *ss1,
-++		     struct sockaddr_storage *ss2,
-++		     check_type_t type, check_acceptreject_t acceptreject)
-++{
-++	int savederrno = 0, err = 0;
-++	struct knet_host *host;
-++	struct knet_link *link;
-++
-++	if (!knet_h) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	if (!ss1) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	if ((type != CHECK_TYPE_ADDRESS) && (!ss2)) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	if ((type == CHECK_TYPE_RANGE) &&
-++	    (ss1->ss_family != ss2->ss_family)) {
-++			errno = EINVAL;
-++			return -1;
-++	}
-++
-++	if (link_id >= KNET_MAX_LINK) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	savederrno = get_global_wrlock(knet_h);
-++	if (savederrno) {
-++		log_err(knet_h, KNET_SUB_HOST, "Unable to get write lock: %s",
-++			strerror(savederrno));
-++		errno = savederrno;
-++		return -1;
-++	}
-++
-++	host = knet_h->host_index[host_id];
-++	if (!host) {
-++		err = -1;
-++		savederrno = EINVAL;
-++		log_err(knet_h, KNET_SUB_LINK, "Unable to find host %u: %s",
-++			host_id, strerror(savederrno));
-++		goto exit_unlock;
-++	}
-++
-++	link = &host->link[link_id];
-++
-++	if (!link->configured) {
-++		err = -1;
-++		savederrno = EINVAL;
-++		log_err(knet_h, KNET_SUB_LINK, "host %u link %u is not configured: %s",
-++			host_id, link_id, strerror(savederrno));
-++		goto exit_unlock;
-++	}
-++
-++	if (link->dynamic != KNET_LINK_DYNIP) {
-++		err = -1;
-++		savederrno = EINVAL;
-++		log_err(knet_h, KNET_SUB_LINK, "host %u link %u is a point to point connection: %s",
-++			host_id, link_id, strerror(savederrno));
-++		goto exit_unlock;
-++	}
-++
-++	err = check_rm(knet_h, transport_link_get_acl_fd(knet_h, link), link->transport,
-++		       ss1, ss2, type, acceptreject);
-++	savederrno = errno;
-++
-++exit_unlock:
-++	pthread_rwlock_unlock(&knet_h->global_rwlock);
-++
-++	errno = savederrno;
-++	return err;
-++}
-++
-++int knet_link_clear_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_id)
-++{
-++	int savederrno = 0, err = 0;
-++	struct knet_host *host;
-++	struct knet_link *link;
-++
-++	if (!knet_h) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	if (link_id >= KNET_MAX_LINK) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	savederrno = get_global_wrlock(knet_h);
-++	if (savederrno) {
-++		log_err(knet_h, KNET_SUB_HOST, "Unable to get write lock: %s",
-++			strerror(savederrno));
-++		errno = savederrno;
-++		return -1;
-++	}
-++
-++	host = knet_h->host_index[host_id];
-++	if (!host) {
-++		err = -1;
-++		savederrno = EINVAL;
-++		log_err(knet_h, KNET_SUB_LINK, "Unable to find host %u: %s",
-++			host_id, strerror(savederrno));
-++		goto exit_unlock;
-++	}
-++
-++	link = &host->link[link_id];
-++
-++	if (!link->configured) {
-++		err = -1;
-++		savederrno = EINVAL;
-++		log_err(knet_h, KNET_SUB_LINK, "host %u link %u is not configured: %s",
-++			host_id, link_id, strerror(savederrno));
-++		goto exit_unlock;
-++	}
-++
-++	if (link->dynamic != KNET_LINK_DYNIP) {
-++		err = -1;
-++		savederrno = EINVAL;
-++		log_err(knet_h, KNET_SUB_LINK, "host %u link %u is a point to point connection: %s",
-++			host_id, link_id, strerror(savederrno));
-++		goto exit_unlock;
-++	}
-++
-++	check_rmall(knet_h, transport_link_get_acl_fd(knet_h, link), link->transport);
-++
-++exit_unlock:
-++	pthread_rwlock_unlock(&knet_h->global_rwlock);
-++
-++	errno = savederrno;
-++	return err;
-++}
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index 0b1fcd0..776408a 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -31,12 +31,12 @@ static check_ops_t proto_check_modules_cmds[] = {
-+  * protocol specific functions
-+  */
-+ 
-+-int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-++int check_add(knet_handle_t knet_h, int sock, uint8_t transport, int index,
-+ 	      struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 	      check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+ 	return proto_check_modules_cmds[transport_get_proto(knet_h, transport)].protocheck_add(
-+-			&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head,
-++			&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head, index,
-+ 			ss1, ss2, type, acceptreject);
-+ }
-+ 
-+diff --git a/libknet/links_acl_ip.c b/libknet/links_acl_ip.c
-+index 2682a70..642027b 100644
-+--- a/libknet/links_acl_ip.c
-++++ b/libknet/links_acl_ip.c
-+@@ -242,29 +242,14 @@ int ipcheck_rmip(void *fd_tracker_match_entry_head,
-+ 	return 0;
-+ }
-+ 
-+-int ipcheck_addip(void *fd_tracker_match_entry_head,
-++int ipcheck_addip(void *fd_tracker_match_entry_head, int index,
-+ 		  struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 		  check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+ 	struct ip_acl_match_entry **match_entry_head = (struct ip_acl_match_entry **)fd_tracker_match_entry_head;
-+ 	struct ip_acl_match_entry *new_match_entry;
-+ 	struct ip_acl_match_entry *match_entry = *match_entry_head;
-+-
-+-	if (!ss1) {
-+-		errno = EINVAL;
-+-		return -1;
-+-	}
-+-
-+-	if ((type != CHECK_TYPE_ADDRESS) && (!ss2)) {
-+-		errno = EINVAL;
-+-		return -1;
-+-	}
-+-
-+-	if (type == CHECK_TYPE_RANGE &&
-+-	    (ss1->ss_family != ss2->ss_family)) {
-+-		errno = EINVAL;
-+-		return -1;
-+-	}
-++	int i = 0;
-+ 
-+ 	if (ipcheck_findmatch(match_entry_head, ss1, ss2, type, acceptreject) != NULL) {
-+ 		errno = EEXIST;
-+@@ -283,12 +268,32 @@ int ipcheck_addip(void *fd_tracker_match_entry_head,
-+ 	new_match_entry->next = NULL;
-+ 
-+ 	if (match_entry) {
-+-		/* Find the end of the list */
-+-		/* is this OK, or should we use a doubly-linked list or bulk-load API call? */
-+-		while (match_entry->next) {
-+-			match_entry = match_entry->next;
-++		/*
-++		 * special case for index 0, since we need to update
-++		 * the head of the list
-++		 */
-++		if (index == 0) {
-++			*match_entry_head = new_match_entry;
-++			new_match_entry->next = match_entry;
-++		} else {
-++			/*
-++			 * find the end of the list or stop at "index"
-++			 */
-++			while ((match_entry->next) || (i < index)) {
-++				match_entry = match_entry->next;
-++				i++;
-++			}
-++			/*
-++			 * insert if there are more entries in the list
-++			 */
-++			if (match_entry->next) {
-++				new_match_entry->next = match_entry->next;
-++			}
-++			/*
-++			 * add if we are at the end
-++			 */
-++			match_entry->next = new_match_entry;
-+ 		}
-+-		match_entry->next = new_match_entry;
-+ 	} else {
-+ 		/*
-+ 		 * first entry in the list
-+diff --git a/libknet/links_acl_loopback.c b/libknet/links_acl_loopback.c
-+index bb69130..97f8198 100644
-+--- a/libknet/links_acl_loopback.c
-++++ b/libknet/links_acl_loopback.c
-+@@ -33,7 +33,7 @@ int loopbackcheck_rm(void *fd_tracker_match_entry_head,
-+ 	return 0;
-+ }
-+ 
-+-int loopbackcheck_add(void *fd_tracker_match_entry_head,
-++int loopbackcheck_add(void *fd_tracker_match_entry_head, int index,
-+ 		      struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 		      check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+diff --git a/libknet/tests/int_links_acl.c b/libknet/tests/int_links_acl.c
-+index 05bd829..15e8e07 100644
-+--- a/libknet/tests/int_links_acl.c
-++++ b/libknet/tests/int_links_acl.c
-+@@ -165,9 +165,9 @@ static int load_file(void)
-+ 		}
-+ 		else {
-+ 			if (addr1.ss_family == AF_INET) {
-+-				ipcheck_addip(&match_entry_v4, &addr1, &addr2, type, acceptreject);
-++				ipcheck_addip(&match_entry_v4, -1, &addr1, &addr2, type, acceptreject);
-+ 			} else {
-+-				ipcheck_addip(&match_entry_v6, &addr1, &addr2, type, acceptreject);
-++				ipcheck_addip(&match_entry_v6, -1, &addr1, &addr2, type, acceptreject);
-+ 			}
-+ 		}
-+ 	next_record: {} /* empty statement to mollify the compiler */
-+diff --git a/libknet/transport_sctp.c b/libknet/transport_sctp.c
-+index 819bc9a..bdfc98d 100644
-+--- a/libknet/transport_sctp.c
-++++ b/libknet/transport_sctp.c
-+@@ -948,7 +948,7 @@ static sctp_listen_link_info_t *sctp_link_listener_start(knet_handle_t knet_h, s
-+ 	 */
-+ 	knet_list_for_each_entry(info, &handle_info->listen_links_list, list) {
-+ 		if (memcmp(&info->src_address, &kn_link->src_addr, sizeof(struct sockaddr_storage)) == 0) {
-+-			if ((check_add(knet_h, info->listen_sock, KNET_TRANSPORT_SCTP,
-++			if ((check_add(knet_h, info->listen_sock, KNET_TRANSPORT_SCTP, -1,
-+ 				       &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) && (errno != EEXIST)) {
-+ 				return NULL;
-+ 			}
-+@@ -1006,7 +1006,7 @@ static sctp_listen_link_info_t *sctp_link_listener_start(knet_handle_t knet_h, s
-+ 		goto exit_error;
-+ 	}
-+ 
-+-	if ((check_add(knet_h, listen_sock, KNET_TRANSPORT_SCTP,
-++	if ((check_add(knet_h, listen_sock, KNET_TRANSPORT_SCTP, -1,
-+ 		       &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) && (errno != EEXIST)) {
-+ 		savederrno = errno;
-+ 		err = -1;
-diff --git a/debian/patches/access-lists-add-more-extensive-test-for-links_acl_ip.patch b/debian/patches/access-lists-add-more-extensive-test-for-links_acl_ip.patch
-new file mode 100644
-index 0000000..30639fd
---- /dev/null
-+++ b/debian/patches/access-lists-add-more-extensive-test-for-links_acl_ip.patch
-@@ -0,0 +1,717 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Thu, 7 Mar 2019 15:31:28 +0100
-+Subject: [access lists] add more extensive test for links_acl_ip
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 8d42be74c7fdb58b8082c4a4d369d2facca467a9)
-+---
-+ libknet/tests/int_links_acl.txt  |   8 -
-+ libknet/tests/Makefile.am        |  33 ++--
-+ libknet/tests/int_links_acl.c    | 211 ---------------------
-+ libknet/tests/int_links_acl_ip.c | 399 +++++++++++++++++++++++++++++++++++++++
-+ 4 files changed, 415 insertions(+), 236 deletions(-)
-+ delete mode 100644 libknet/tests/int_links_acl.txt
-+ delete mode 100644 libknet/tests/int_links_acl.c
-+ create mode 100644 libknet/tests/int_links_acl_ip.c
-+
-+diff --git a/libknet/tests/int_links_acl.txt b/libknet/tests/int_links_acl.txt
-+deleted file mode 100644
-+index 5776d54..0000000
-+--- a/libknet/tests/int_links_acl.txt
-++++ /dev/null
-+@@ -1,8 +0,0 @@
-+-AA192.168.1.1
-+-AA192.168.1.2
-+-RA192.168.0.3
-+-AR192.168.0.0-192.168.0.250
-+-AM192.168.2.0/255.255.255.0
-+-AM1740::0/FFF0::0
-+-RA1000::666
-+-AR1000::1-2000::7FF
-+diff --git a/libknet/tests/Makefile.am b/libknet/tests/Makefile.am
-+index eae5c80..3e74ea8 100644
-+--- a/libknet/tests/Makefile.am
-++++ b/libknet/tests/Makefile.am
-+@@ -13,8 +13,7 @@ include $(top_srcdir)/libknet/tests/api-check.mk
-+ 
-+ EXTRA_DIST		= \
-+ 			  api-test-coverage \
-+-			  api-check.mk \
-+-			  int_links_acl.txt
-++			  api-check.mk
-+ 
-+ AM_CPPFLAGS		= -I$(top_srcdir)/libknet
-+ AM_CFLAGS		+= $(PTHREAD_CFLAGS)
-+@@ -34,6 +33,7 @@ check_PROGRAMS		= \
-+ 			  $(fun_checks)
-+ 
-+ int_checks		= \
-++			  int_links_acl_ip_test \
-+ 			  int_timediff_test
-+ 
-+ fun_checks		=
-+@@ -45,7 +45,6 @@ benchmarks		= \
-+ noinst_PROGRAMS		= \
-+ 			  api_knet_handle_new_limit_test \
-+ 			  pckt_test \
-+-			  int_links_acl_test \
-+ 			  $(benchmarks) \
-+ 			  $(check_PROGRAMS)
-+ 
-+@@ -67,20 +66,20 @@ check-api-test-coverage:
-+ 
-+ pckt_test_SOURCES	= pckt_test.c
-+ 
-+-int_links_acl_test_SOURCES = int_links_acl.c \
-+-			     ../common.c \
-+-			     ../compat.c \
-+-			     ../logging.c \
-+-			     ../netutils.c \
-+-			     ../threads_common.c \
-+-			     ../transports.c \
-+-			     ../transport_common.c \
-+-			     ../transport_loopback.c \
-+-			     ../transport_sctp.c \
-+-			     ../transport_udp.c \
-+-			     ../links_acl.c \
-+-			     ../links_acl_ip.c \
-+-			     ../links_acl_loopback.c
-++int_links_acl_ip_test_SOURCES = int_links_acl_ip.c \
-++				../common.c \
-++				../compat.c \
-++				../logging.c \
-++				../netutils.c \
-++				../threads_common.c \
-++				../transports.c \
-++				../transport_common.c \
-++				../transport_loopback.c \
-++				../transport_sctp.c \
-++				../transport_udp.c \
-++				../links_acl.c \
-++				../links_acl_ip.c \
-++				../links_acl_loopback.c
-+ 
-+ int_timediff_test_SOURCES = int_timediff.c
-+ 
-+diff --git a/libknet/tests/int_links_acl.c b/libknet/tests/int_links_acl.c
-+deleted file mode 100644
-+index 15e8e07..0000000
-+--- a/libknet/tests/int_links_acl.c
-++++ /dev/null
-+@@ -1,211 +0,0 @@
-+-/*
-+- * Copyright (C) 2016-2019 Red Hat, Inc.  All rights reserved.
-+- *
-+- * Author: Christine Caulfield <ccaulfie at redhat.com>
-+- *
-+- * This software licensed under GPL-2.0+, LGPL-2.0+
-+- */
-+-
-+-#include "config.h"
-+-
-+-#include <sys/types.h>
-+-#include <sys/socket.h>
-+-#include <netinet/in.h>
-+-#include <stdio.h>
-+-#include <stdlib.h>
-+-#include <string.h>
-+-#include <netdb.h>
-+-
-+-#include "internals.h"
-+-#include "links_acl.h"
-+-#include "links_acl_ip.h"
-+-
-+-static struct acl_match_entry *match_entry_v4;
-+-static struct acl_match_entry *match_entry_v6;
-+-
-+-/* This is a test program .. remember! */
-+-#define BUFLEN 1024
-+-
-+-static int get_ipaddress(char *buf, struct sockaddr_storage *addr)
-+-{
-+-	struct addrinfo *info;
-+-	struct addrinfo hints;
-+-	int res;
-+-
-+-	memset(&hints, 0, sizeof(hints));
-+-	hints.ai_family = AF_UNSPEC;
-+-
-+-	res = getaddrinfo(buf, NULL, &hints, &info);
-+-	if (!res) {
-+-		memmove(addr, info->ai_addr, info->ai_addrlen);
-+-		freeaddrinfo(info);
-+-	}
-+-	return res;
-+-}
-+-
-+-static int read_address(char *buf, struct sockaddr_storage *addr)
-+-{
-+-	return get_ipaddress(buf, addr);
-+-}
-+-
-+-static int read_mask(char *buf, struct sockaddr_storage *addr, struct sockaddr_storage *addr2)
-+-{
-+-	char tmpbuf[BUFLEN];
-+-	char *slash;
-+-	int ret;
-+-
-+-	slash = strchr(buf, '/');
-+-	if (!slash)
-+-		return 1;
-+-
-+-	strncpy(tmpbuf, buf, slash-buf);
-+-	tmpbuf[slash-buf] = '\0';
-+-
-+-	ret = get_ipaddress(tmpbuf, addr);
-+-        if (ret)
-+-		return ret;
-+-
-+-	ret = get_ipaddress(slash+1, addr2);
-+-        if (ret)
-+-		return ret;
-+-
-+-	return 0;
-+-}
-+-
-+-static int read_range(char *buf, struct sockaddr_storage *addr1, struct sockaddr_storage *addr2)
-+-{
-+-	char tmpbuf[BUFLEN];
-+-	char *hyphen;
-+-	int ret;
-+-
-+-	hyphen = strchr(buf, '-');
-+-	if (!hyphen)
-+-		return 1;
-+-
-+-	strncpy(tmpbuf, buf, hyphen-buf);
-+-	tmpbuf[hyphen-buf] = '\0';
-+-
-+-	ret = get_ipaddress(tmpbuf, addr1);
-+-        if (ret)
-+-		return ret;
-+-
-+-	ret = get_ipaddress(hyphen+1, addr2);
-+-        if (ret)
-+-		return ret;
-+-
-+-	return 0;
-+-}
-+-
-+-
-+-static int load_file(void)
-+-{
-+-	FILE *filterfile;
-+-	char filebuf[BUFLEN];
-+-	int line = 0;
-+-	int ret;
-+-	check_type_t type;
-+-	check_acceptreject_t acceptreject;
-+-	struct sockaddr_storage addr1;
-+-	struct sockaddr_storage addr2;
-+-
-+-	ipcheck_rmall(&match_entry_v4);
-+-	ipcheck_rmall(&match_entry_v6);
-+-
-+-	filterfile = fopen("int_links_acl.txt", "r");
-+-	if (!filterfile) {
-+-		fprintf(stderr, "Cannot open int_links_acl.txt\n");
-+-		return 1;
-+-	}
-+-
-+-	while (fgets(filebuf, sizeof(filebuf), filterfile)) {
-+-		filebuf[strlen(filebuf)-1] = '\0'; /* remove trailing LF */
-+-		line++;
-+-
-+-		/*
-+-		 * First char is A (accept) or R (Reject)
-+-		 */
-+-		switch(filebuf[0] & 0x5F) {
-+-		case 'A':
-+-			acceptreject = CHECK_ACCEPT;
-+-			break;
-+-		case 'R':
-+-			acceptreject = CHECK_REJECT;
-+-			break;
-+-		default:
-+-			fprintf(stderr, "Unknown record type on line %d: %s\n", line, filebuf);
-+-			goto next_record;
-+-		}
-+-
-+-		/*
-+-		 * Second char is the filter type:
-+-		 * A Address
-+-		 * M Mask
-+-		 * R Range
-+-		 */
-+-		switch(filebuf[1] & 0x5F) {
-+-		case 'A':
-+-			type = CHECK_TYPE_ADDRESS;
-+-			ret = read_address(filebuf+2, &addr1);
-+-			break;
-+-		case 'M':
-+-			type = CHECK_TYPE_MASK;
-+-			ret = read_mask(filebuf+2, &addr1, &addr2);
-+-			break;
-+-		case 'R':
-+-			type = CHECK_TYPE_RANGE;
-+-			ret = read_range(filebuf+2, &addr1, &addr2);
-+-			break;
-+-		default:
-+-			fprintf(stderr, "Unknown filter type on line %d: %s\n", line, filebuf);
-+-			goto next_record;
-+-			break;
-+-		}
-+-		if (ret) {
-+-			fprintf(stderr, "Failed to parse address on line %d: %s\n", line, filebuf);
-+-		}
-+-		else {
-+-			if (addr1.ss_family == AF_INET) {
-+-				ipcheck_addip(&match_entry_v4, -1, &addr1, &addr2, type, acceptreject);
-+-			} else {
-+-				ipcheck_addip(&match_entry_v6, -1, &addr1, &addr2, type, acceptreject);
-+-			}
-+-		}
-+-	next_record: {} /* empty statement to mollify the compiler */
-+-	}
-+-	fclose(filterfile);
-+-
-+-	return 0;
-+-}
-+-
-+-int main(int argc, char *argv[])
-+-{
-+-	struct sockaddr_storage saddr;
-+-	struct acl_match_entry *match_entry;
-+-	int ret;
-+-	int i;
-+-
-+-	if (load_file())
-+-		return 1;
-+-
-+-	for (i=1; i<argc; i++) {
-+-		ret = get_ipaddress(argv[i], &saddr);
-+-		if (ret) {
-+-			fprintf(stderr, "Cannot parse address %s\n", argv[i]);
-+-		} else {
-+-			if (saddr.ss_family == AF_INET) {
-+-				match_entry = match_entry_v4;
-+-			} else {
-+-				match_entry = match_entry_v6;
-+-			}
-+-			if (ipcheck_validate(&match_entry, &saddr)) {
-+-				printf("%s is VALID\n", argv[i]);
-+-			} else {
-+-				printf("%s is not allowed\n", argv[i]);
-+-			}
-+-		}
-+-	}
-+-
-+-	ipcheck_rmall(&match_entry_v4);
-+-	ipcheck_rmall(&match_entry_v6);
-+-	return 0;
-+-}
-+diff --git a/libknet/tests/int_links_acl_ip.c b/libknet/tests/int_links_acl_ip.c
-+new file mode 100644
-+index 0000000..a7d2aed
-+--- /dev/null
-++++ b/libknet/tests/int_links_acl_ip.c
-+@@ -0,0 +1,399 @@
-++/*
-++ * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ *
-++ * Author: Christine Caulfield <ccaulfie at redhat.com>
-++ *
-++ * This software licensed under GPL-2.0+, LGPL-2.0+
-++ */
-++
-++#include "config.h"
-++
-++#include <sys/types.h>
-++#include <sys/socket.h>
-++#include <netinet/in.h>
-++#include <stdio.h>
-++#include <stdlib.h>
-++#include <string.h>
-++#include <netdb.h>
-++#include <errno.h>
-++
-++#include "internals.h"
-++#include "links_acl.h"
-++#include "links_acl_ip.h"
-++
-++#include "test-common.h"
-++
-++static struct acl_match_entry *match_entry_v4;
-++static struct acl_match_entry *match_entry_v6;
-++
-++/* This is a test program .. remember! */
-++#define BUFLEN 1024
-++
-++static int get_ipaddress(const char *buf, struct sockaddr_storage *addr)
-++{
-++	struct addrinfo *info;
-++	struct addrinfo hints;
-++
-++	memset(&hints, 0, sizeof(hints));
-++	hints.ai_family = AF_UNSPEC;
-++
-++	if (getaddrinfo(buf, NULL, &hints, &info)) {
-++		return -1;
-++	}
-++
-++	memmove(addr, info->ai_addr, info->ai_addrlen);
-++	freeaddrinfo(info);
-++	return 0;
-++}
-++
-++static int read_2ip(const char *buf, const char *delim, struct sockaddr_storage *addr, struct sockaddr_storage *addr2)
-++{
-++	char tmpbuf[BUFLEN];
-++	char *deli;
-++
-++	deli = strstr(buf, delim);
-++	if (!deli) {
-++		return -1;
-++	}
-++
-++	strncpy(tmpbuf, buf, deli-buf);
-++	tmpbuf[deli-buf] = '\0';
-++
-++	if (get_ipaddress(tmpbuf, addr)) {
-++		return -1;
-++	}
-++
-++	if (get_ipaddress(deli+1, addr2)) {
-++		return -1;
-++	}
-++
-++	return 0;
-++}
-++
-++/*
-++ * be aware that ordering is important
-++ * so we can test all the rules with few
-++ * ipcheck_validate calls
-++ */
-++
-++const char *rules[100] = {
-++	/*
-++	 * ipv4
-++	 */
-++	"RA192.168.0.3",		/* reject address */
-++	"AA192.168.0.1",		/* accept address */
-++	"RR192.168.0.10-192.168.0.20",	/* reject range */
-++	"AR192.168.0.0-192.168.0.255",	/* accept range */
-++	"RM192.168.2.0/255.255.255.0",	/* reject mask */
-++	"AM192.168.2.0/255.255.254.0",	/* accept mask */
-++	/*
-++	 * ipv6
-++	 */
-++	"RA3ffe::3",
-++	"AA3ffe::1",
-++	"RR3ffe::10-3ffe::20",
-++	"AR3ffe::0-3ffe::ff",
-++	"RM3ffe:1::0/ffff:ffff:ffff:ffff:ffff:ffff:ffff:0",
-++	"AM3ffe:1::0/ffff:ffff:ffff:ffff::0"
-++};
-++
-++static int _ipcheck_addip(void *fd_tracker_match_entry_head,
-++			  struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-++			  check_type_t type, check_acceptreject_t acceptreject)
-++{
-++	return ipcheck_addip(fd_tracker_match_entry_head, -1, ss1, ss2, type, acceptreject);
-++}
-++
-++static int default_rules(int load)
-++{
-++	int ret;
-++	check_type_t type;
-++	check_acceptreject_t acceptreject;
-++	struct sockaddr_storage addr1;
-++	struct sockaddr_storage addr2;
-++	int i = 0;
-++	int (*loadfn)(void *fd_tracker_match_entry_head, struct sockaddr_storage *ss1, struct sockaddr_storage *ss2, check_type_t type, check_acceptreject_t acceptreject);
-++
-++	if (load) {
-++		loadfn = _ipcheck_addip;
-++	} else {
-++		loadfn = ipcheck_rmip;
-++	}
-++
-++	while (rules[i] != NULL) {
-++		printf("Parsing rule: %s\n", rules[i]);
-++		memset(&addr1, 0, sizeof(struct sockaddr_storage));
-++		memset(&addr2, 0, sizeof(struct sockaddr_storage));
-++		/*
-++		 * First char is A (accept) or R (Reject)
-++		 */
-++		switch(rules[i][0] & 0x5F) {
-++			case 'A':
-++				acceptreject = CHECK_ACCEPT;
-++				break;
-++			case 'R':
-++				acceptreject = CHECK_REJECT;
-++				break;
-++			default:
-++				fprintf(stderr, "Unknown record type on line %d: %s\n", i, rules[i]);
-++				goto next_record;
-++		}
-++
-++		/*
-++		 * Second char is the filter type:
-++		 * A Address
-++		 * M Mask
-++		 * R Range
-++		 */
-++		switch(rules[i][1] & 0x5F) {
-++			case 'A':
-++				type = CHECK_TYPE_ADDRESS;
-++				ret = get_ipaddress(rules[i]+2, &addr1);
-++				break;
-++			case 'M':
-++				type = CHECK_TYPE_MASK;
-++				ret = read_2ip(rules[i]+2, "/", &addr1, &addr2);
-++				break;
-++			case 'R':
-++				type = CHECK_TYPE_RANGE;
-++				ret = read_2ip(rules[i]+2, "-", &addr1, &addr2);
-++				break;
-++			default:
-++				fprintf(stderr, "Unknown filter type on line %d: %s\n", i, rules[i]);
-++				goto next_record;
-++				break;
-++		}
-++
-++		if (ret) {
-++			fprintf(stderr, "Failed to parse address on line %d: %s\n", i, rules[i]);
-++			return -1;
-++		} else {
-++			if (addr1.ss_family == AF_INET) {
-++				if (loadfn(&match_entry_v4, &addr1, &addr2, type, acceptreject) < 0) {
-++					fprintf(stderr, "Failed to add/rm address on line %d: %s (errno: %s)\n", i, rules[i], strerror(errno));
-++					return -1;
-++				}
-++			} else {
-++				if (loadfn(&match_entry_v6, &addr1, &addr2, type, acceptreject) < 0) {
-++					fprintf(stderr, "Failed to add/rm address on line %d: %s (errno: %s)\n", i, rules[i], strerror(errno));
-++					return -1;
-++				}
-++			}
-++		}
-++
-++	next_record:
-++		i++;
-++	}
-++
-++	return 0;
-++}
-++
-++const char *tests[100] = {
-++	/*
-++	 * ipv4
-++	 */
-++	"R192.168.0.3",		/* reject address */
-++	"A192.168.0.1",		/* accept address */
-++	"R192.168.0.11",	/* reject range */
-++	"A192.168.0.8",		/* accept range */
-++	"R192.168.2.1",		/* reject mask */
-++	"A192.168.3.1",		/* accept mask */
-++	/*
-++	 * ipv6
-++	 */
-++	"R3ffe::3",
-++	"A3ffe::1",
-++	"R3ffe::11",
-++	"A3ffe::8",
-++	"R3ffe:1::1",
-++	"A3ffe:1::1:1"
-++};
-++
-++const char *after_insert_tests[100] = {
-++	/*
-++	 * ipv4
-++	 */
-++	"R192.168.0.3",		/* reject address */
-++	"A192.168.0.1",		/* accept address */
-++	"R192.168.0.11",	/* reject range */
-++	"A192.168.0.8",		/* accept range */
-++	"A192.168.2.1",		/* reject mask */
-++	"A192.168.3.1",		/* accept mask */
-++	/*
-++	 * ipv6
-++	 */
-++	"R3ffe::3",
-++	"A3ffe::1",
-++	"R3ffe::11",
-++	"A3ffe::8",
-++	"A3ffe:1::1",
-++	"A3ffe:1::1:1"
-++};
-++
-++int test(void)
-++{
-++	int i = 0;
-++	int expected;
-++	struct sockaddr_storage saddr;
-++	struct acl_match_entry *match_entry;
-++
-++	/*
-++	 * default tests
-++	 */
-++	while (tests[i] != NULL) {
-++		/*
-++		 * First char is A (accept) or R (Reject)
-++		 */
-++		switch(tests[i][0] & 0x5F) {
-++			case 'A':
-++				expected = 1;
-++				break;
-++			case 'R':
-++				expected = 0;
-++				break;
-++			default:
-++				fprintf(stderr, "Unknown record type on line %d: %s\n", i, tests[i]);
-++				return FAIL;
-++				break;
-++		}
-++
-++		if (get_ipaddress(tests[i]+1, &saddr)) {
-++				fprintf(stderr, "Cannot parse address %s\n", tests[i]+1);
-++				return FAIL;
-++		}
-++
-++		if (saddr.ss_family == AF_INET) {
-++			match_entry = match_entry_v4;
-++		} else {
-++			match_entry = match_entry_v6;
-++		}
-++
-++		if (ipcheck_validate(&match_entry, &saddr) != expected) {
-++			fprintf(stderr, "Failed to check access list for ip: %s\n", tests[i]);
-++			return FAIL;
-++		}
-++		i++;
-++	}
-++
-++	/*
-++	 * insert tests
-++	 */
-++
-++	if (get_ipaddress("192.168.2.1", &saddr)) {
-++		fprintf(stderr, "Cannot parse address 192.168.2.1\n");
-++		return FAIL;
-++	}
-++
-++	if (ipcheck_addip(&match_entry_v4, 3, &saddr, &saddr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) {
-++		fprintf(stderr, "Unable to insert address in position 3 192.168.2.1\n");
-++		return FAIL;
-++	}
-++
-++	if (get_ipaddress("3ffe:1::1", &saddr)) {
-++		fprintf(stderr, "Cannot parse address 3ffe:1::1\n");
-++		return FAIL;
-++	}
-++
-++	if (ipcheck_addip(&match_entry_v6, 3, &saddr, &saddr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) {
-++		fprintf(stderr, "Unable to insert address in position 3 3ffe:1::1\n");
-++		return FAIL;
-++	}
-++
-++	while (after_insert_tests[i] != NULL) {
-++		/*
-++		 * First char is A (accept) or R (Reject)
-++		 */
-++		switch(after_insert_tests[i][0] & 0x5F) {
-++			case 'A':
-++				expected = 1;
-++				break;
-++			case 'R':
-++				expected = 0;
-++				break;
-++			default:
-++				fprintf(stderr, "Unknown record type on line %d: %s\n", i, after_insert_tests[i]);
-++				return FAIL;
-++				break;
-++		}
-++
-++		if (get_ipaddress(after_insert_tests[i]+1, &saddr)) {
-++				fprintf(stderr, "Cannot parse address %s\n", after_insert_tests[i]+1);
-++				return FAIL;
-++		}
-++
-++		if (saddr.ss_family == AF_INET) {
-++			match_entry = match_entry_v4;
-++		} else {
-++			match_entry = match_entry_v6;
-++		}
-++
-++		if (ipcheck_validate(&match_entry, &saddr) != expected) {
-++			fprintf(stderr, "Failed to check access list for ip: %s\n", after_insert_tests[i]);
-++			return FAIL;
-++		}
-++		i++;
-++	}
-++	return PASS;
-++}
-++
-++int main(int argc, char *argv[])
-++{
-++	struct sockaddr_storage saddr;
-++	struct acl_match_entry *match_entry;
-++	int ret = PASS;
-++	int i;
-++
-++	if (default_rules(1) < 0) {
-++		return -1;
-++	}
-++
-++	if (argc > 1) {
-++		/*
-++		 * run manual check against default access lists
-++		 */
-++		for (i=1; i<argc; i++) {
-++			if (get_ipaddress(argv[i], &saddr)) {
-++				fprintf(stderr, "Cannot parse address %s\n", argv[i]);
-++				ret = FAIL;
-++				goto out;
-++			} else {
-++				if (saddr.ss_family == AF_INET) {
-++					match_entry = match_entry_v4;
-++				} else {
-++					match_entry = match_entry_v6;
-++				}
-++				if (ipcheck_validate(&match_entry, &saddr)) {
-++					printf("%s is VALID\n", argv[i]);
-++					ret = PASS;
-++				} else {
-++					printf("%s is not allowed\n", argv[i]);
-++					ret = FAIL;
-++				}
-++			}
-++		}
-++	} else {
-++		/*
-++		 * run automatic tests
-++		 */
-++		ret = test();
-++	}
-++
-++	/*
-++	 * test memory leaks with ipcheck_rmip
-++	 */
-++	if (default_rules(0) < 0) {
-++		return FAIL;
-++	}
-++
-++	/*
-++	 * test memory leaks with ipcheck_rmall
-++	 */
-++	if (default_rules(1) < 0) {
-++		return FAIL;
-++	}
-++out:
-++	ipcheck_rmall(&match_entry_v4);
-++	ipcheck_rmall(&match_entry_v6);
-++
-++	return ret;
-++}
-diff --git a/debian/patches/access-lists-add-public-API-tests.patch b/debian/patches/access-lists-add-public-API-tests.patch
-new file mode 100644
-index 0000000..2be97b8
---- /dev/null
-+++ b/debian/patches/access-lists-add-public-API-tests.patch
-@@ -0,0 +1,1019 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Wed, 6 Mar 2019 13:08:34 +0100
-+Subject: [access lists] add public API tests
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 31da8fa7b5d034980c38c2f5dcc6e3730f2031fa)
-+---
-+ libknet/tests/api_knet_link_add_acl.c    | 246 +++++++++++++++++++++++++++++
-+ libknet/tests/api_knet_link_clear_acl.c  | 196 +++++++++++++++++++++++
-+ libknet/tests/api_knet_link_insert_acl.c | 246 +++++++++++++++++++++++++++++
-+ libknet/tests/api_knet_link_rm_acl.c     | 256 +++++++++++++++++++++++++++++++
-+ libknet/tests/api-check.mk               |  18 ++-
-+ 5 files changed, 961 insertions(+), 1 deletion(-)
-+ create mode 100644 libknet/tests/api_knet_link_add_acl.c
-+ create mode 100644 libknet/tests/api_knet_link_clear_acl.c
-+ create mode 100644 libknet/tests/api_knet_link_insert_acl.c
-+ create mode 100644 libknet/tests/api_knet_link_rm_acl.c
-+
-+diff --git a/libknet/tests/api_knet_link_add_acl.c b/libknet/tests/api_knet_link_add_acl.c
-+new file mode 100644
-+index 0000000..b018165
-+--- /dev/null
-++++ b/libknet/tests/api_knet_link_add_acl.c
-+@@ -0,0 +1,246 @@
-++/*
-++ * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ *
-++ * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-++ *
-++ * This software licensed under GPL-2.0+, LGPL-2.0+
-++ */
-++
-++#include "config.h"
-++
-++#include <errno.h>
-++#include <stdio.h>
-++#include <stdlib.h>
-++#include <string.h>
-++#include <unistd.h>
-++#include <inttypes.h>
-++
-++#include "libknet.h"
-++
-++#include "internals.h"
-++#include "netutils.h"
-++#include "test-common.h"
-++
-++static void test(void)
-++{
-++	knet_handle_t knet_h;
-++	int logfds[2];
-++	struct knet_host *host;
-++	struct knet_link *link;
-++	struct sockaddr_storage lo, lo6;
-++
-++	if (make_local_sockaddr(&lo, 0) < 0) {
-++		printf("Unable to convert loopback to sockaddr: %s\n", strerror(errno));
-++		exit(FAIL);
-++	}
-++
-++	if (make_local_sockaddr6(&lo6, 0) < 0) {
-++		printf("Unable to convert loopback to sockaddr: %s\n", strerror(errno));
-++		exit(FAIL);
-++	}
-++
-++	printf("Test knet_link_add_acl incorrect knet_h\n");
-++
-++	if ((!knet_link_add_acl(NULL, 1, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_add_acl accepted invalid knet_h or returned incorrect error: %s\n", strerror(errno));
-++		exit(FAIL);
-++	}
-++
-++	setup_logpipes(logfds);
-++
-++	knet_h = knet_handle_start(logfds, KNET_LOG_DEBUG);
-++
-++	printf("Test knet_link_add_acl with unconfigured host\n");
-++
-++	if ((!knet_link_add_acl(knet_h, 1, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_add_acl accepted unconfigured host or returned incorrect error: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_add_acl with unconfigured link\n");
-++
-++	if (knet_host_add(knet_h, 1) < 0) {
-++		printf("knet_host_add failed: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if ((!knet_link_add_acl(knet_h, 1, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_add_acl accepted unconfigured link or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_add_acl with invalid link\n");
-++
-++	if ((!knet_link_add_acl(knet_h, 1, KNET_MAX_LINK, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_add_acl accepted invalid link or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_add_acl with invalid ss1\n");
-++
-++	if ((!knet_link_add_acl(knet_h, 1, 0, NULL, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_add_acl accepted invalid ss1 or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_add_acl with invalid ss2\n");
-++
-++	if ((!knet_link_add_acl(knet_h, 1, 0, &lo, NULL, CHECK_TYPE_RANGE, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_add_acl accepted invalid ss2 or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_add_acl with non matching families\n");
-++
-++	if ((!knet_link_add_acl(knet_h, 1, 0, &lo, &lo6, CHECK_TYPE_RANGE, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_add_acl accepted non matching families or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_add_acl with wrong check_type\n");
-++
-++	if ((!knet_link_add_acl(knet_h, 1, 0, &lo, &lo, CHECK_TYPE_RANGE + CHECK_TYPE_MASK + CHECK_TYPE_ADDRESS + 1, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_add_acl accepted incorrect check_type or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_add_acl with wrong acceptreject\n");
-++
-++	if ((!knet_link_add_acl(knet_h, 1, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT + CHECK_REJECT + 1)) || (errno != EINVAL)) {
-++		printf("knet_link_add_acl accepted incorrect check_type or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_add_acl with point to point link\n");
-++
-++	if (knet_link_set_config(knet_h, 1, 0, KNET_TRANSPORT_UDP, &lo, &lo, 0) < 0) {
-++		printf("Unable to configure link: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if ((!knet_link_add_acl(knet_h, 1, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_add_acl accepted point ot point link or returned incorrect error: %s\n", strerror(errno));
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	knet_link_clear_config(knet_h, 1, 0);
-++
-++	printf("Test knet_link_add_acl with dynamic link\n");
-++
-++	if (knet_link_set_config(knet_h, 1, 0, KNET_TRANSPORT_UDP, &lo, NULL, 0) < 0) {
-++		printf("Unable to configure link: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	host = knet_h->host_index[1];
-++	link = &host->link[0];
-++
-++	if (knet_h->knet_transport_fd_tracker[link->outsock].access_list_match_entry_head) {
-++		printf("match list not empty!");
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if (knet_link_add_acl(knet_h, 1, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) {
-++		printf("knet_link_add_acl did not accept dynamic link error: %s\n", strerror(errno));
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if (!knet_h->knet_transport_fd_tracker[link->outsock].access_list_match_entry_head) {
-++		printf("match list empty!");
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++	knet_link_clear_config(knet_h, 1, 0);
-++	knet_host_remove(knet_h, 1);
-++	knet_handle_free(knet_h);
-++	flush_logs(logfds[0], stdout);
-++	close_logpipes(logfds);
-++}
-++
-++int main(int argc, char *argv[])
-++{
-++	test();
-++
-++	return PASS;
-++}
-+diff --git a/libknet/tests/api_knet_link_clear_acl.c b/libknet/tests/api_knet_link_clear_acl.c
-+new file mode 100644
-+index 0000000..78b7d79
-+--- /dev/null
-++++ b/libknet/tests/api_knet_link_clear_acl.c
-+@@ -0,0 +1,196 @@
-++/*
-++ * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ *
-++ * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-++ *
-++ * This software licensed under GPL-2.0+, LGPL-2.0+
-++ */
-++
-++#include "config.h"
-++
-++#include <errno.h>
-++#include <stdio.h>
-++#include <stdlib.h>
-++#include <string.h>
-++#include <unistd.h>
-++#include <inttypes.h>
-++
-++#include "libknet.h"
-++
-++#include "internals.h"
-++#include "netutils.h"
-++#include "test-common.h"
-++
-++static void test(void)
-++{
-++	knet_handle_t knet_h;
-++	int logfds[2];
-++	struct knet_host *host;
-++	struct knet_link *link;
-++	struct sockaddr_storage lo;
-++
-++	if (make_local_sockaddr(&lo, 0) < 0) {
-++		printf("Unable to convert loopback to sockaddr: %s\n", strerror(errno));
-++		exit(FAIL);
-++	}
-++
-++	printf("Test knet_link_clear_acl incorrect knet_h\n");
-++
-++	if ((!knet_link_clear_acl(NULL, 1, 0)) || (errno != EINVAL)) {
-++		printf("knet_link_clear_acl accepted invalid knet_h or returned incorrect error: %s\n", strerror(errno));
-++		exit(FAIL);
-++	}
-++
-++	setup_logpipes(logfds);
-++
-++	knet_h = knet_handle_start(logfds, KNET_LOG_DEBUG);
-++
-++	printf("Test knet_link_clear_acl with unconfigured host\n");
-++
-++	if ((!knet_link_clear_acl(knet_h, 1, 0)) || (errno != EINVAL)) {
-++		printf("knet_link_clear_acl accepted unconfigured host or returned incorrect error: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_clear_acl with unconfigured link\n");
-++
-++	if (knet_host_add(knet_h, 1) < 0) {
-++		printf("knet_host_add failed: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if ((!knet_link_clear_acl(knet_h, 1, 0)) || (errno != EINVAL)) {
-++		printf("knet_link_clear_acl accepted unconfigured link or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_clear_acl with invalid link\n");
-++
-++	if ((!knet_link_clear_acl(knet_h, 1, KNET_MAX_LINK)) || (errno != EINVAL)) {
-++		printf("knet_link_clear_acl accepted invalid link or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_clear_acl with point to point link\n");
-++
-++	if (knet_link_set_config(knet_h, 1, 0, KNET_TRANSPORT_UDP, &lo, &lo, 0) < 0) {
-++		printf("Unable to configure link: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if ((!knet_link_clear_acl(knet_h, 1, 0)) || (errno != EINVAL)) {
-++		printf("knet_link_clear_acl accepted point ot point link or returned incorrect error: %s\n", strerror(errno));
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	knet_link_clear_config(knet_h, 1, 0);
-++
-++	printf("Test knet_link_clear_acl with dynamic link\n");
-++
-++	if (knet_link_set_config(knet_h, 1, 0, KNET_TRANSPORT_UDP, &lo, NULL, 0) < 0) {
-++		printf("Unable to configure link: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	host = knet_h->host_index[1];
-++	link = &host->link[0];
-++
-++	if (knet_h->knet_transport_fd_tracker[link->outsock].access_list_match_entry_head) {
-++		printf("match list NOT empty!");
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if (knet_link_add_acl(knet_h, 1, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) {
-++		printf("knet_link_clear_acl did not accept dynamic link error: %s\n", strerror(errno));
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if (!knet_h->knet_transport_fd_tracker[link->outsock].access_list_match_entry_head) {
-++		printf("match list empty!");
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if (knet_link_clear_acl(knet_h, 1, 0) < 0) {
-++		printf("knet_link_clear_acl failed to clear. error: %s\n", strerror(errno));
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if (knet_h->knet_transport_fd_tracker[link->outsock].access_list_match_entry_head) {
-++		printf("match list NOT empty!");
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++	knet_link_clear_config(knet_h, 1, 0);
-++	knet_host_remove(knet_h, 1);
-++	knet_handle_free(knet_h);
-++	flush_logs(logfds[0], stdout);
-++	close_logpipes(logfds);
-++}
-++
-++int main(int argc, char *argv[])
-++{
-++	test();
-++
-++	return PASS;
-++}
-+diff --git a/libknet/tests/api_knet_link_insert_acl.c b/libknet/tests/api_knet_link_insert_acl.c
-+new file mode 100644
-+index 0000000..547f92b
-+--- /dev/null
-++++ b/libknet/tests/api_knet_link_insert_acl.c
-+@@ -0,0 +1,246 @@
-++/*
-++ * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ *
-++ * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-++ *
-++ * This software licensed under GPL-2.0+, LGPL-2.0+
-++ */
-++
-++#include "config.h"
-++
-++#include <errno.h>
-++#include <stdio.h>
-++#include <stdlib.h>
-++#include <string.h>
-++#include <unistd.h>
-++#include <inttypes.h>
-++
-++#include "libknet.h"
-++
-++#include "internals.h"
-++#include "netutils.h"
-++#include "test-common.h"
-++
-++static void test(void)
-++{
-++	knet_handle_t knet_h;
-++	int logfds[2];
-++	struct knet_host *host;
-++	struct knet_link *link;
-++	struct sockaddr_storage lo, lo6;
-++
-++	if (make_local_sockaddr(&lo, 0) < 0) {
-++		printf("Unable to convert loopback to sockaddr: %s\n", strerror(errno));
-++		exit(FAIL);
-++	}
-++
-++	if (make_local_sockaddr6(&lo6, 0) < 0) {
-++		printf("Unable to convert loopback to sockaddr: %s\n", strerror(errno));
-++		exit(FAIL);
-++	}
-++
-++	printf("Test knet_link_insert_acl incorrect knet_h\n");
-++
-++	if ((!knet_link_insert_acl(NULL, 1, 0, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_insert_acl accepted invalid knet_h or returned incorrect error: %s\n", strerror(errno));
-++		exit(FAIL);
-++	}
-++
-++	setup_logpipes(logfds);
-++
-++	knet_h = knet_handle_start(logfds, KNET_LOG_DEBUG);
-++
-++	printf("Test knet_link_insert_acl with unconfigured host\n");
-++
-++	if ((!knet_link_insert_acl(knet_h, 1, 0, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_insert_acl accepted unconfigured host or returned incorrect error: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_insert_acl with unconfigured link\n");
-++
-++	if (knet_host_add(knet_h, 1) < 0) {
-++		printf("knet_host_add failed: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if ((!knet_link_insert_acl(knet_h, 1, 0, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_insert_acl accepted unconfigured link or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_insert_acl with invalid link\n");
-++
-++	if ((!knet_link_insert_acl(knet_h, 1, KNET_MAX_LINK, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_insert_acl accepted invalid link or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_insert_acl with invalid ss1\n");
-++
-++	if ((!knet_link_insert_acl(knet_h, 1, 0, 0, NULL, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_insert_acl accepted invalid ss1 or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_insert_acl with invalid ss2\n");
-++
-++	if ((!knet_link_insert_acl(knet_h, 1, 0, 0, &lo, NULL, CHECK_TYPE_RANGE, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_insert_acl accepted invalid ss2 or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_insert_acl with non matching families\n");
-++
-++	if ((!knet_link_insert_acl(knet_h, 1, 0, 0, &lo, &lo6, CHECK_TYPE_RANGE, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_insert_acl accepted non matching families or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_insert_acl with wrong check_type\n");
-++
-++	if ((!knet_link_insert_acl(knet_h, 1, 0, 0, &lo, &lo, CHECK_TYPE_RANGE + CHECK_TYPE_MASK + CHECK_TYPE_ADDRESS + 1, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_insert_acl accepted incorrect check_type or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_insert_acl with wrong acceptreject\n");
-++
-++	if ((!knet_link_insert_acl(knet_h, 1, 0, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT + CHECK_REJECT + 1)) || (errno != EINVAL)) {
-++		printf("knet_link_insert_acl accepted incorrect check_type or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_insert_acl with point to point link\n");
-++
-++	if (knet_link_set_config(knet_h, 1, 0, KNET_TRANSPORT_UDP, &lo, &lo, 0) < 0) {
-++		printf("Unable to configure link: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if ((!knet_link_insert_acl(knet_h, 1, 0, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_insert_acl accepted point ot point link or returned incorrect error: %s\n", strerror(errno));
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	knet_link_clear_config(knet_h, 1, 0);
-++
-++	printf("Test knet_link_insert_acl with dynamic link\n");
-++
-++	if (knet_link_set_config(knet_h, 1, 0, KNET_TRANSPORT_UDP, &lo, NULL, 0) < 0) {
-++		printf("Unable to configure link: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	host = knet_h->host_index[1];
-++	link = &host->link[0];
-++
-++	if (knet_h->knet_transport_fd_tracker[link->outsock].access_list_match_entry_head) {
-++		printf("match list not empty!");
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if (knet_link_insert_acl(knet_h, 1, 0, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) {
-++		printf("knet_link_insert_acl did not accept dynamic link error: %s\n", strerror(errno));
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if (!knet_h->knet_transport_fd_tracker[link->outsock].access_list_match_entry_head) {
-++		printf("match list empty!");
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++	knet_link_clear_config(knet_h, 1, 0);
-++	knet_host_remove(knet_h, 1);
-++	knet_handle_free(knet_h);
-++	flush_logs(logfds[0], stdout);
-++	close_logpipes(logfds);
-++}
-++
-++int main(int argc, char *argv[])
-++{
-++	test();
-++
-++	return PASS;
-++}
-+diff --git a/libknet/tests/api_knet_link_rm_acl.c b/libknet/tests/api_knet_link_rm_acl.c
-+new file mode 100644
-+index 0000000..49a82d9
-+--- /dev/null
-++++ b/libknet/tests/api_knet_link_rm_acl.c
-+@@ -0,0 +1,256 @@
-++/*
-++ * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ *
-++ * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-++ *
-++ * This software licensed under GPL-2.0+, LGPL-2.0+
-++ */
-++
-++#include "config.h"
-++
-++#include <errno.h>
-++#include <stdio.h>
-++#include <stdlib.h>
-++#include <string.h>
-++#include <unistd.h>
-++#include <inttypes.h>
-++
-++#include "libknet.h"
-++
-++#include "internals.h"
-++#include "netutils.h"
-++#include "test-common.h"
-++
-++static void test(void)
-++{
-++	knet_handle_t knet_h;
-++	int logfds[2];
-++	struct knet_host *host;
-++	struct knet_link *link;
-++	struct sockaddr_storage lo, lo6;
-++
-++	if (make_local_sockaddr(&lo, 0) < 0) {
-++		printf("Unable to convert loopback to sockaddr: %s\n", strerror(errno));
-++		exit(FAIL);
-++	}
-++
-++	if (make_local_sockaddr6(&lo6, 0) < 0) {
-++		printf("Unable to convert loopback to sockaddr: %s\n", strerror(errno));
-++		exit(FAIL);
-++	}
-++
-++	printf("Test knet_link_rm_acl incorrect knet_h\n");
-++
-++	if ((!knet_link_rm_acl(NULL, 1, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_rm_acl accepted invalid knet_h or returned incorrect error: %s\n", strerror(errno));
-++		exit(FAIL);
-++	}
-++
-++	setup_logpipes(logfds);
-++
-++	knet_h = knet_handle_start(logfds, KNET_LOG_DEBUG);
-++
-++	printf("Test knet_link_rm_acl with unconfigured host\n");
-++
-++	if ((!knet_link_rm_acl(knet_h, 1, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_rm_acl accepted unconfigured host or returned incorrect error: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_rm_acl with unconfigured link\n");
-++
-++	if (knet_host_add(knet_h, 1) < 0) {
-++		printf("knet_host_add failed: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if ((!knet_link_rm_acl(knet_h, 1, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_rm_acl accepted unconfigured link or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_rm_acl with invalid link\n");
-++
-++	if ((!knet_link_rm_acl(knet_h, 1, KNET_MAX_LINK, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_rm_acl accepted invalid link or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_rm_acl with invalid ss1\n");
-++
-++	if ((!knet_link_rm_acl(knet_h, 1, 0, NULL, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_rm_acl accepted invalid ss1 or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_rm_acl with invalid ss2\n");
-++
-++	if ((!knet_link_rm_acl(knet_h, 1, 0, &lo, NULL, CHECK_TYPE_RANGE, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_rm_acl accepted invalid ss2 or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_rm_acl with non matching families\n");
-++
-++	if ((!knet_link_rm_acl(knet_h, 1, 0, &lo, &lo6, CHECK_TYPE_RANGE, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_rm_acl accepted non matching families or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_rm_acl with wrong check_type\n");
-++
-++	if ((!knet_link_rm_acl(knet_h, 1, 0, &lo, &lo, CHECK_TYPE_RANGE + CHECK_TYPE_MASK + CHECK_TYPE_ADDRESS + 1, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_rm_acl accepted incorrect check_type or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_rm_acl with wrong acceptreject\n");
-++
-++	if ((!knet_link_rm_acl(knet_h, 1, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT + CHECK_REJECT + 1)) || (errno != EINVAL)) {
-++		printf("knet_link_rm_acl accepted incorrect check_type or returned incorrect error: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_link_rm_acl with point to point link\n");
-++
-++	if (knet_link_set_config(knet_h, 1, 0, KNET_TRANSPORT_UDP, &lo, &lo, 0) < 0) {
-++		printf("Unable to configure link: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if ((!knet_link_rm_acl(knet_h, 1, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) || (errno != EINVAL)) {
-++		printf("knet_link_rm_acl accepted point ot point link or returned incorrect error: %s\n", strerror(errno));
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	knet_link_clear_config(knet_h, 1, 0);
-++
-++	printf("Test knet_link_rm_acl with dynamic link\n");
-++
-++	if (knet_link_set_config(knet_h, 1, 0, KNET_TRANSPORT_UDP, &lo, NULL, 0) < 0) {
-++		printf("Unable to configure link: %s\n", strerror(errno));
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	host = knet_h->host_index[1];
-++	link = &host->link[0];
-++
-++	if (knet_h->knet_transport_fd_tracker[link->outsock].access_list_match_entry_head) {
-++		printf("match list not empty!");
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if (knet_link_add_acl(knet_h, 1, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) {
-++		printf("Failed to add an access list: %s\n", strerror(errno));
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if (knet_link_rm_acl(knet_h, 1, 0, &lo, &lo, CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) {
-++		printf("knet_link_rm_acl did not accept dynamic link error: %s\n", strerror(errno));
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if (knet_h->knet_transport_fd_tracker[link->outsock].access_list_match_entry_head) {
-++		printf("match list NOT empty!");
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++	knet_link_clear_config(knet_h, 1, 0);
-++	knet_host_remove(knet_h, 1);
-++	knet_handle_free(knet_h);
-++	flush_logs(logfds[0], stdout);
-++	close_logpipes(logfds);
-++}
-++
-++int main(int argc, char *argv[])
-++{
-++	test();
-++
-++	return PASS;
-++}
-+diff --git a/libknet/tests/api-check.mk b/libknet/tests/api-check.mk
-+index 247ed58..427c388 100644
-+--- a/libknet/tests/api-check.mk
-++++ b/libknet/tests/api-check.mk
-+@@ -68,7 +68,11 @@ api_checks		= \
-+ 			  api_knet_link_set_enable_test \
-+ 			  api_knet_link_get_enable_test \
-+ 			  api_knet_link_get_link_list_test \
-+-			  api_knet_link_get_status_test
-++			  api_knet_link_get_status_test \
-++			  api_knet_link_add_acl_test \
-++			  api_knet_link_insert_acl_test \
-++			  api_knet_link_rm_acl_test \
-++			  api_knet_link_clear_acl_test
-+ 
-+ api_knet_handle_new_test_SOURCES = api_knet_handle_new.c \
-+ 				   test-common.c
-+@@ -256,3 +260,15 @@ api_knet_link_get_link_list_test_SOURCES = api_knet_link_get_link_list.c \
-+ 
-+ api_knet_link_get_status_test_SOURCES = api_knet_link_get_status.c \
-+ 					test-common.c
-++
-++api_knet_link_add_acl_test_SOURCES = api_knet_link_add_acl.c \
-++				     test-common.c
-++
-++api_knet_link_insert_acl_test_SOURCES = api_knet_link_insert_acl.c \
-++					test-common.c
-++
-++api_knet_link_rm_acl_test_SOURCES = api_knet_link_rm_acl.c \
-++				    test-common.c
-++
-++api_knet_link_clear_acl_test_SOURCES = api_knet_link_clear_acl.c \
-++				       test-common.c
-diff --git a/debian/patches/access-lists-add-tests-for-default-access-lists.patch b/debian/patches/access-lists-add-tests-for-default-access-lists.patch
-new file mode 100644
-index 0000000..24d97e5
---- /dev/null
-+++ b/debian/patches/access-lists-add-tests-for-default-access-lists.patch
-@@ -0,0 +1,63 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Thu, 14 Feb 2019 06:47:41 +0100
-+Subject: [access lists] add tests for default access lists
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit c48b048e3b340ea7696c3300fb64928b22018233)
-+---
-+ libknet/tests/api_knet_link_set_config.c | 28 ++++++++++++++++++++++++++++
-+ 1 file changed, 28 insertions(+)
-+
-+diff --git a/libknet/tests/api_knet_link_set_config.c b/libknet/tests/api_knet_link_set_config.c
-+index 8679428..5fed9be 100644
-+--- a/libknet/tests/api_knet_link_set_config.c
-++++ b/libknet/tests/api_knet_link_set_config.c
-+@@ -24,6 +24,8 @@
-+ static void test(void)
-+ {
-+ 	knet_handle_t knet_h;
-++	struct knet_host *host;
-++	struct knet_link *link;
-+ 	int logfds[2];
-+ 	char src_portstr[32];
-+ 	char dst_portstr[32];
-+@@ -140,6 +142,19 @@ static void test(void)
-+ 		exit(FAIL);
-+ 	}
-+ 
-++	host = knet_h->host_index[1];
-++	link = &host->link[0];
-++
-++	if (knet_h->knet_transport_fd_tracker[link->outsock].match_entry) {
-++		printf("found access lists for dynamic dst_addr!\n");
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-+ 	if (knet_link_get_status(knet_h, 1, 0, &link_status, sizeof(struct knet_link_status)) < 0) {
-+ 		printf("Unable to get link status: %s\n", strerror(errno));
-+ 		knet_link_clear_config(knet_h, 1, 0);
-+@@ -244,6 +259,19 @@ static void test(void)
-+ 		exit(FAIL);
-+ 	}
-+ 
-++	host = knet_h->host_index[1];
-++	link = &host->link[0];
-++
-++	if (!knet_h->knet_transport_fd_tracker[link->outsock].match_entry) {
-++		printf("Unable to find default access lists for static dst_addr!\n");
-++		knet_link_clear_config(knet_h, 1, 0);
-++		knet_host_remove(knet_h, 1);
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-+ 	if (knet_link_get_status(knet_h, 1, 0, &link_status, sizeof(struct knet_link_status)) < 0) {
-+ 		printf("Unable to get link status: %s\n", strerror(errno));
-+ 		knet_link_clear_config(knet_h, 1, 0);
-diff --git a/debian/patches/access-lists-allow-knet_bench-to-enable-disable-access-li.patch b/debian/patches/access-lists-allow-knet_bench-to-enable-disable-access-li.patch
-new file mode 100644
-index 0000000..a9b0ea7
---- /dev/null
-+++ b/debian/patches/access-lists-allow-knet_bench-to-enable-disable-access-li.patch
-@@ -0,0 +1,61 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Thu, 14 Feb 2019 07:23:09 +0100
-+Subject: [access lists] allow knet_bench to enable/disable access lists
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit a7fa047d1bdae266cfef18fc31d87072b7dfd6d3)
-+---
-+ libknet/tests/knet_bench.c | 12 +++++++++++-
-+ 1 file changed, 11 insertions(+), 1 deletion(-)
-+
-+diff --git a/libknet/tests/knet_bench.c b/libknet/tests/knet_bench.c
-+index b208b3e..00cd58b 100644
-+--- a/libknet/tests/knet_bench.c
-++++ b/libknet/tests/knet_bench.c
-+@@ -46,6 +46,7 @@ static int wait_for_perf_rx = 0;
-+ static char *compresscfg = NULL;
-+ static char *cryptocfg = NULL;
-+ static int machine_output = 0;
-++static int use_access_lists = 0;
-+ 
-+ static int bench_shutdown_in_progress = 0;
-+ static pthread_mutex_t shutdown_mutex = PTHREAD_MUTEX_INITIALIZER;
-+@@ -78,6 +79,7 @@ static void print_help(void)
-+ 	printf("knet_bench usage:\n");
-+ 	printf(" -h                                        print this help (no really)\n");
-+ 	printf(" -d                                        enable debug logs (default INFO)\n");
-++	printf(" -f                                        enable use of access lists (default: off)\n");
-+ 	printf(" -c [implementation]:[crypto]:[hashing]    crypto configuration. (default disabled)\n");
-+ 	printf("                                           Example: -c nss:aes128:sha1\n");
-+ 	printf(" -z [implementation]:[level]:[threshold]   compress configuration. (default disabled)\n");
-+@@ -248,7 +250,7 @@ static void setup_knet(int argc, char *argv[])
-+ 
-+ 	memset(nodes, 0, sizeof(nodes));
-+ 
-+-	while ((rv = getopt(argc, argv, "aCT:S:s:ldom:wb:t:n:c:p:X::P:z:h")) != EOF) {
-++	while ((rv = getopt(argc, argv, "aCT:S:s:ldfom:wb:t:n:c:p:X::P:z:h")) != EOF) {
-+ 		switch(rv) {
-+ 			case 'h':
-+ 				print_help();
-+@@ -260,6 +262,9 @@ static void setup_knet(int argc, char *argv[])
-+ 			case 'd':
-+ 				debug = KNET_LOG_DEBUG;
-+ 				break;
-++			case 'f':
-++				use_access_lists = 1;
-++				break;
-+ 			case 'c':
-+ 				if (cryptocfg) {
-+ 					printf("Error: -c can only be specified once\n");
-+@@ -456,6 +461,11 @@ static void setup_knet(int argc, char *argv[])
-+ 		exit(FAIL);
-+ 	}
-+ 
-++	if (knet_handle_enable_access_lists(knet_h, use_access_lists) < 0) {
-++		printf("Unable to knet_handle_enable_access_lists: %s\n", strerror(errno));
-++		exit(FAIL);
-++	}
-++
-+ 	if (cryptocfg) {
-+ 		memset(&knet_handle_crypto_cfg, 0, sizeof(knet_handle_crypto_cfg));
-+ 		cryptomodel = strtok(cryptocfg, ":");
-diff --git a/debian/patches/access-lists-automatically-add-and-remove-point-to-point-.patch b/debian/patches/access-lists-automatically-add-and-remove-point-to-point-.patch
-new file mode 100644
-index 0000000..5c0c247
---- /dev/null
-+++ b/debian/patches/access-lists-automatically-add-and-remove-point-to-point-.patch
-@@ -0,0 +1,283 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Thu, 14 Feb 2019 06:32:42 +0100
-+Subject: [access lists] automatically add and remove point to point access
-+ lists
-+
-+those are not used just yet.
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit a08389d536726927f2438a7e0bfe6b86244779ab)
-+---
-+ libknet/links_acl.h           |  7 +++-
-+ libknet/links.c               | 96 +++++++++++++++++++++++++++++++++++++++++++
-+ libknet/links_acl.c           | 62 +++++++++++++++++++++++++++-
-+ libknet/tests/int_links_acl.c |  8 ++--
-+ 4 files changed, 166 insertions(+), 7 deletions(-)
-+
-+diff --git a/libknet/links_acl.h b/libknet/links_acl.h
-+index 26b0f36..f4713d6 100644
-+--- a/libknet/links_acl.h
-++++ b/libknet/links_acl.h
-+@@ -13,10 +13,13 @@
-+ 
-+ int ipcheck_validate(struct acl_match_entry **match_entry_head, struct sockaddr_storage *checkip);
-+ 
-+-void ipcheck_clear(struct acl_match_entry **match_entry_head);
-+-
-+ int ipcheck_addip(struct acl_match_entry **match_entry_head,
-+ 		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 		  check_type_t type, check_acceptreject_t acceptreject);
-+ 
-++int ipcheck_rmip(struct acl_match_entry **match_entry_head,
-++		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		  check_type_t type, check_acceptreject_t acceptreject);
-++
-++void check_rmall(struct acl_match_entry **match_entry_head);
-+ #endif
-+diff --git a/libknet/links.c b/libknet/links.c
-+index 010aeb6..6c75c35 100644
-+--- a/libknet/links.c
-++++ b/libknet/links.c
-+@@ -20,6 +20,56 @@
-+ #include "transports.h"
-+ #include "host.h"
-+ #include "threads_common.h"
-++#include "links_acl.h"
-++
-++static void _link_del_all_acl(knet_handle_t knet_h, int sock)
-++{
-++	check_rmall(&knet_h->knet_transport_fd_tracker[sock].match_entry);
-++}
-++
-++static int _link_add_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-++{
-++	int err = -1;
-++
-++	switch(transport_get_proto(knet_h, kh_link->transport_type)) {
-++		case LOOPBACK:
-++			/*
-++			 * loopback does not require access lists
-++			 */
-++			err = 0;
-++			break;
-++		case IP_PROTO:
-++			err = ipcheck_addip(&knet_h->knet_transport_fd_tracker[kh_link->outsock].match_entry,
-++					    &kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-++			break;
-++		default:
-++			break;
-++	}
-++
-++	return err;
-++}
-++
-++static int _link_rm_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-++{
-++	int err = -1;
-++
-++	switch(transport_get_proto(knet_h, kh_link->transport_type)) {
-++		case LOOPBACK:
-++			/*
-++			 * loopback does not require access lists
-++			 */
-++			err = 0;
-++			break;
-++		case IP_PROTO:
-++			err = ipcheck_rmip(&knet_h->knet_transport_fd_tracker[kh_link->outsock].match_entry,
-++					   &kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-++			break;
-++		default:
-++			break;
-++	}
-++
-++	return err;
-++}
-+ 
-+ int _link_updown(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_id,
-+ 		 unsigned int enabled, unsigned int connected)
-+@@ -234,6 +284,21 @@ int knet_link_set_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t l
-+ 		err = -1;
-+ 		goto exit_unlock;
-+ 	}
-++
-++	/*
-++	 * we can only configure default access lists if we know both endpoints
-++	 */
-++	if (link->dynamic == KNET_LINK_STATIC) {
-++		log_debug(knet_h, KNET_SUB_LINK, "Configuring default access lists for host: %u link: %u",
-++			  host_id, link_id);
-++		if (_link_add_default_acl(knet_h, link) < 0) {
-++			log_warn(knet_h, KNET_SUB_LINK, "Failed to configure default access lists for host: %u link: %u", host_id, link_id);
-++			savederrno = errno;
-++			err = -1;
-++			goto exit_unlock;
-++		}
-++	}
-++
-+ 	link->configured = 1;
-+ 	log_debug(knet_h, KNET_SUB_LINK, "host: %u link: %u is configured",
-+ 		  host_id, link_id);
-+@@ -351,6 +416,7 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+ 	int savederrno = 0, err = 0;
-+ 	struct knet_host *host;
-+ 	struct knet_link *link;
-++	int sock;
-+ 
-+ 	if (!knet_h) {
-+ 		errno = EINVAL;
-+@@ -397,6 +463,28 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+ 		goto exit_unlock;
-+ 	}
-+ 
-++	/*
-++	 * remove well known access lists here.
-++	 * After the transport has done clearing the config,
-++	 * then we can remove any leftover access lists if the link
-++	 * is no longer in use.
-++	 */
-++	if (link->dynamic == KNET_LINK_STATIC) {
-++		if (_link_rm_default_acl(knet_h, link) < 0) {
-++			err = -1;
-++			savederrno = EBUSY;
-++			log_err(knet_h, KNET_SUB_LINK, "Host %u link %u: unable to remove default access list",
-++				host_id, link_id);
-++			goto exit_unlock;
-++		}
-++	}
-++
-++	/*
-++	 * cache it for later as we don't know if the transport
-++	 * will clear link info during clear_config.
-++	 */
-++	sock = link->outsock;
-++
-+ 	if ((transport_link_clear_config(knet_h, link) < 0)  &&
-+ 	    (errno != EBUSY)) {
-+ 		savederrno = errno;
-+@@ -404,6 +492,14 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+ 		goto exit_unlock;
-+ 	}
-+ 
-++	/*
-++	 * remove any other access lists when the socket is no
-++	 * longer in use by the transport.
-++	 */
-++	if (knet_h->knet_transport_fd_tracker[sock].transport == KNET_MAX_TRANSPORTS) {
-++		_link_del_all_acl(knet_h, sock);
-++	}
-++
-+ 	memset(link, 0, sizeof(struct knet_link));
-+ 	link->link_id = link_id;
-+ 
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index fe84088..2ad3e90 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -150,7 +150,7 @@ int ipcheck_validate(struct acl_match_entry **match_entry_head, struct sockaddr_
-+  * Routines to manuipulate access lists
-+  */
-+ 
-+-void ipcheck_clear(struct acl_match_entry **match_entry_head)
-++void check_rmall(struct acl_match_entry **match_entry_head)
-+ {
-+ 	struct acl_match_entry *next_match_entry;
-+ 	struct acl_match_entry *match_entry = *match_entry_head;
-+@@ -163,6 +163,62 @@ void ipcheck_clear(struct acl_match_entry **match_entry_head)
-+ 	*match_entry_head = NULL;
-+ }
-+ 
-++static struct acl_match_entry *ipcheck_findmatch(struct acl_match_entry **match_entry_head,
-++						 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++						 check_type_t type, check_acceptreject_t acceptreject)
-++{
-++	struct acl_match_entry *match_entry = *match_entry_head;
-++
-++	while (match_entry) {
-++		if ((!memcmp(&match_entry->addr1, ip1, sizeof(struct sockaddr_storage))) &&
-++		    (!memcmp(&match_entry->addr2, ip2, sizeof(struct sockaddr_storage))) &&
-++		    (match_entry->type == type) &&
-++		    (match_entry->acceptreject == acceptreject)) {
-++			return match_entry;
-++		}
-++		match_entry = match_entry->next;
-++	}
-++
-++	return NULL;
-++}
-++
-++int ipcheck_rmip(struct acl_match_entry **match_entry_head,
-++		 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		 check_type_t type, check_acceptreject_t acceptreject)
-++{
-++	struct acl_match_entry *next_match_entry = NULL;
-++	struct acl_match_entry *rm_match_entry;
-++	struct acl_match_entry *match_entry = *match_entry_head;
-++
-++	rm_match_entry = ipcheck_findmatch(match_entry_head, ip1, ip2, type, acceptreject);
-++	if (!rm_match_entry) {
-++		return -1;
-++	}
-++
-++	while (match_entry) {
-++		next_match_entry = match_entry->next;
-++		/*
-++		 * we are removing the list head, be careful
-++		 */
-++		if (rm_match_entry == match_entry) {
-++			*match_entry_head = next_match_entry;
-++			free(match_entry);
-++			break;
-++		}
-++		/*
-++		 * the next one is the one we need to remove
-++		 */
-++		if (rm_match_entry == next_match_entry) {
-++			match_entry->next = next_match_entry->next;
-++			free(next_match_entry);
-++			break;
-++		}
-++		match_entry = next_match_entry;
-++	}
-++
-++	return 0;
-++}
-++
-+ int ipcheck_addip(struct acl_match_entry **match_entry_head,
-+ 		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 		  check_type_t type, check_acceptreject_t acceptreject)
-+@@ -182,6 +238,10 @@ int ipcheck_addip(struct acl_match_entry **match_entry_head,
-+ 	    (ip1->ss_family != ip2->ss_family))
-+ 		return -1;
-+ 
-++	if (ipcheck_findmatch(match_entry_head, ip1, ip2, type, acceptreject) != NULL) {
-++		return -1;
-++	}
-++
-+ 	new_match_entry = malloc(sizeof(struct acl_match_entry));
-+ 	if (!new_match_entry)
-+ 		return -1;
-+diff --git a/libknet/tests/int_links_acl.c b/libknet/tests/int_links_acl.c
-+index 1e7f426..129aabe 100644
-+--- a/libknet/tests/int_links_acl.c
-++++ b/libknet/tests/int_links_acl.c
-+@@ -106,8 +106,8 @@ static int load_file(void)
-+ 	struct sockaddr_storage addr1;
-+ 	struct sockaddr_storage addr2;
-+ 
-+-	ipcheck_clear(&match_entry_v4);
-+-	ipcheck_clear(&match_entry_v6);
-++	check_rmall(&match_entry_v4);
-++	check_rmall(&match_entry_v6);
-+ 
-+ 	filterfile = fopen("int_links_acl.txt", "r");
-+ 	if (!filterfile) {
-+@@ -203,7 +203,7 @@ int main(int argc, char *argv[])
-+ 		}
-+ 	}
-+ 
-+-	ipcheck_clear(&match_entry_v4);
-+-	ipcheck_clear(&match_entry_v6);
-++	check_rmall(&match_entry_v4);
-++	check_rmall(&match_entry_v6);
-+ 	return 0;
-+ }
-diff --git a/debian/patches/access-lists-cleanup-API-a-bit.patch b/debian/patches/access-lists-cleanup-API-a-bit.patch
-new file mode 100644
-index 0000000..b88c2b5
---- /dev/null
-+++ b/debian/patches/access-lists-cleanup-API-a-bit.patch
-@@ -0,0 +1,98 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Fri, 22 Feb 2019 05:21:29 +0100
-+Subject: [access lists] cleanup API a bit
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 34d87fab04c1e1329f0066adf595d575dac3d0de)
-+---
-+ libknet/links_acl.h      |  3 ++-
-+ libknet/links_acl.c      | 26 +++++++++++++-------------
-+ libknet/threads_rx.c     |  2 +-
-+ libknet/transport_sctp.c |  2 +-
-+ 4 files changed, 17 insertions(+), 16 deletions(-)
-+
-+diff --git a/libknet/links_acl.h b/libknet/links_acl.h
-+index 020ec05..0ad50e6 100644
-+--- a/libknet/links_acl.h
-++++ b/libknet/links_acl.h
-+@@ -37,8 +37,9 @@ int check_rm(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 	     struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 	     check_type_t type, check_acceptreject_t acceptreject);
-+ void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport);
-++int check_validate(knet_handle_t knet_h, int sockfd, struct sockaddr_storage *checkip);
-++
-+ int _link_add_default_acl(knet_handle_t knet_h, struct knet_link *kh_link);
-+ int _link_rm_default_acl(knet_handle_t knet_h, struct knet_link *kh_link);
-+-int _generic_filter_packet_by_acl(knet_handle_t knet_h, int sockfd, struct sockaddr_storage *checkip);
-+ 
-+ #endif
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index 85a792d..520a934 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -71,22 +71,10 @@ void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport)
-+ 	}
-+ }
-+ 
-+-int _link_add_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-+-{
-+-	return check_add(knet_h, kh_link->outsock, kh_link->transport_type,
-+-			&kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+-}
-+-
-+-int _link_rm_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-+-{
-+-	return check_rm(knet_h, kh_link->outsock, kh_link->transport_type,
-+-			&kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+-}
-+-
-+ /*
-+  * return 0 to reject and 1 to accept a packet
-+  */
-+-int _generic_filter_packet_by_acl(knet_handle_t knet_h, int sockfd, struct sockaddr_storage *checkip)
-++int check_validate(knet_handle_t knet_h, int sockfd, struct sockaddr_storage *checkip)
-+ {
-+ 	switch(transport_get_proto(knet_h, knet_h->knet_transport_fd_tracker[sockfd].transport)) {
-+ 		case LOOPBACK:
-+@@ -103,3 +91,15 @@ int _generic_filter_packet_by_acl(knet_handle_t knet_h, int sockfd, struct socka
-+ 	 */
-+ 	return 0;
-+ }
-++
-++int _link_add_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-++{
-++	return check_add(knet_h, kh_link->outsock, kh_link->transport_type,
-++			&kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-++}
-++
-++int _link_rm_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-++{
-++	return check_rm(knet_h, kh_link->outsock, kh_link->transport_type,
-++			&kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-++}
-+diff --git a/libknet/threads_rx.c b/libknet/threads_rx.c
-+index 06a0168..5fa51c4 100644
-+--- a/libknet/threads_rx.c
-++++ b/libknet/threads_rx.c
-+@@ -808,7 +808,7 @@ static void _handle_recv_from_links(knet_handle_t knet_h, int sockfd, struct kne
-+ 				 */
-+ 				if ((knet_h->use_access_lists) &&
-+ 				    (transport_get_acl_type(knet_h, transport) == USE_GENERIC_ACL)) {
-+-					if (!_generic_filter_packet_by_acl(knet_h, sockfd, msg[i].msg_hdr.msg_name)) {
-++					if (!check_validate(knet_h, sockfd, msg[i].msg_hdr.msg_name)) {
-+ 						char src_ipaddr[KNET_MAX_HOST_LEN];
-+ 						char src_port[KNET_MAX_PORT_LEN];
-+ 
-+diff --git a/libknet/transport_sctp.c b/libknet/transport_sctp.c
-+index ce3e98e..50a237b 100644
-+--- a/libknet/transport_sctp.c
-++++ b/libknet/transport_sctp.c
-+@@ -731,7 +731,7 @@ static void _handle_incoming_sctp(knet_handle_t knet_h, int listen_sock)
-+ 	log_debug(knet_h, KNET_SUB_TRANSP_SCTP, "Incoming: received connection from: %s port: %s",
-+ 						addr_str, port_str);
-+ 	if (knet_h->use_access_lists) {
-+-		if (!_generic_filter_packet_by_acl(knet_h, listen_sock, &ss)) {
-++		if (!check_validate(knet_h, listen_sock, &ss)) {
-+ 			savederrno = EINVAL;
-+ 			err = -1;
-+ 			log_debug(knet_h, KNET_SUB_TRANSP_SCTP, "Connection rejected from %s/%s", addr_str, port_str);
-diff --git a/debian/patches/access-lists-confine-access-lists-data-structs-within-the.patch b/debian/patches/access-lists-confine-access-lists-data-structs-within-the.patch
-new file mode 100644
-index 0000000..219cd34
---- /dev/null
-+++ b/debian/patches/access-lists-confine-access-lists-data-structs-within-the.patch
-@@ -0,0 +1,226 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 26 Feb 2019 11:37:49 +0100
-+Subject: [access lists] confine access lists data structs within the protocol
-+ itself
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 6abcbf579695dd050da0b5262f1e0a63325bbe52)
-+---
-+ libknet/links_acl.h    |  8 --------
-+ libknet/links_acl_ip.h | 13 +++++++------
-+ libknet/links_acl.c    |  8 ++++----
-+ libknet/links_acl_ip.c | 48 ++++++++++++++++++++++++++++++------------------
-+ 4 files changed, 41 insertions(+), 36 deletions(-)
-+
-+diff --git a/libknet/links_acl.h b/libknet/links_acl.h
-+index f871403..84ae6b9 100644
-+--- a/libknet/links_acl.h
-++++ b/libknet/links_acl.h
-+@@ -22,14 +22,6 @@ typedef enum {
-+ 	CHECK_REJECT
-+ } check_acceptreject_t;
-+ 
-+-struct acl_match_entry {
-+-	check_type_t type;
-+-	check_acceptreject_t acceptreject;
-+-	struct sockaddr_storage addr1; /* Actual IP address, mask top or low IP */
-+-	struct sockaddr_storage addr2; /* high IP address or address bitmask */
-+-	struct acl_match_entry *next;
-+-};
-+-
-+ int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 	      struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 	      check_type_t type, check_acceptreject_t acceptreject);
-+diff --git a/libknet/links_acl_ip.h b/libknet/links_acl_ip.h
-+index 9e21e00..c475db9 100644
-+--- a/libknet/links_acl_ip.h
-++++ b/libknet/links_acl_ip.h
-+@@ -12,15 +12,16 @@
-+ #include "internals.h"
-+ #include "links_acl.h"
-+ 
-+-int ipcheck_validate(struct acl_match_entry **match_entry_head, struct sockaddr_storage *checkip);
-++int ipcheck_validate(void *fd_tracker_match_entry_head, struct sockaddr_storage *checkip);
-+ 
-+-int ipcheck_addip(struct acl_match_entry **match_entry_head,
-++int ipcheck_addip(void *fd_tracker_match_entry_head,
-+ 		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 		  check_type_t type, check_acceptreject_t acceptreject);
-+ 
-+-int ipcheck_rmip(struct acl_match_entry **match_entry_head,
-+-		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+-		  check_type_t type, check_acceptreject_t acceptreject);
-++int ipcheck_rmip(void *fd_tracker_match_entry_head,
-++		 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		 check_type_t type, check_acceptreject_t acceptreject);
-++
-++void ipcheck_rmall(void *fd_tracker_match_entry_head);
-+ 
-+-void ipcheck_rmall(struct acl_match_entry **match_entry_head);
-+ #endif
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index 7605fe9..b1d7ab4 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -37,7 +37,7 @@ int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 			err = 0;
-+ 			break;
-+ 		case IP_PROTO:
-+-			err = ipcheck_addip((struct acl_match_entry **)&knet_h->knet_transport_fd_tracker[sock].match_entry,
-++			err = ipcheck_addip(&knet_h->knet_transport_fd_tracker[sock].match_entry,
-+ 					    ip1, ip2, type, acceptreject);
-+ 			break;
-+ 		default:
-+@@ -58,7 +58,7 @@ int check_rm(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 			err = 0;
-+ 			break;
-+ 		case IP_PROTO:
-+-			err = ipcheck_rmip((struct acl_match_entry **)&knet_h->knet_transport_fd_tracker[sock].match_entry,
-++			err = ipcheck_rmip(&knet_h->knet_transport_fd_tracker[sock].match_entry,
-+ 					   ip1, ip2, type, acceptreject);
-+ 			break;
-+ 		default:
-+@@ -74,7 +74,7 @@ void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport)
-+ 			return;
-+ 			break;
-+ 		case IP_PROTO:
-+-			ipcheck_rmall((struct acl_match_entry **)&knet_h->knet_transport_fd_tracker[sock].match_entry);
-++			ipcheck_rmall(&knet_h->knet_transport_fd_tracker[sock].match_entry);
-+ 			break;
-+ 		default:
-+ 			break;
-+@@ -92,7 +92,7 @@ int check_validate(knet_handle_t knet_h, int sock, uint8_t transport, struct soc
-+ 			return 1;
-+ 			break;
-+ 		case IP_PROTO:
-+-			return ipcheck_validate((struct acl_match_entry **)&knet_h->knet_transport_fd_tracker[sock].match_entry, checkip);
-++			return ipcheck_validate(&knet_h->knet_transport_fd_tracker[sock].match_entry, checkip);
-+ 			break;
-+ 		default:
-+ 			break;
-+diff --git a/libknet/links_acl_ip.c b/libknet/links_acl_ip.c
-+index 58c7b28..e72a382 100644
-+--- a/libknet/links_acl_ip.c
-++++ b/libknet/links_acl_ip.c
-+@@ -21,6 +21,14 @@
-+ #include "links_acl.h"
-+ #include "links_acl_ip.h"
-+ 
-++struct ip_acl_match_entry {
-++	check_type_t type;
-++	check_acceptreject_t acceptreject;
-++	struct sockaddr_storage addr1; /* Actual IP address, mask top or low IP */
-++	struct sockaddr_storage addr2; /* high IP address or address bitmask */
-++	struct ip_acl_match_entry *next;
-++};
-++
-+ /*
-+  * s6_addr32 is not defined in BSD userland, only kernel.
-+  * definition is the same as linux and it works fine for
-+@@ -34,7 +42,7 @@
-+  * IPv4 See if the address we have matches the current match entry
-+  */
-+ 
-+-static int ip_matches_v4(struct sockaddr_storage *checkip, struct acl_match_entry *match_entry)
-++static int ip_matches_v4(struct sockaddr_storage *checkip, struct ip_acl_match_entry *match_entry)
-+ {
-+ 	struct sockaddr_in *ip_to_check;
-+ 	struct sockaddr_in *match1;
-+@@ -96,7 +104,7 @@ static int ip6addr_cmp(struct in6_addr *a, struct in6_addr *b)
-+  * IPv6 See if the address we have matches the current match entry
-+  */
-+ 
-+-static int ip_matches_v6(struct sockaddr_storage *checkip, struct acl_match_entry *match_entry)
-++static int ip_matches_v6(struct sockaddr_storage *checkip, struct ip_acl_match_entry *match_entry)
-+ {
-+ 	struct sockaddr_in6 *ip_to_check;
-+ 	struct sockaddr_in6 *match1;
-+@@ -134,10 +142,11 @@ static int ip_matches_v6(struct sockaddr_storage *checkip, struct acl_match_entr
-+ }
-+ 
-+ 
-+-int ipcheck_validate(struct acl_match_entry **match_entry_head, struct sockaddr_storage *checkip)
-++int ipcheck_validate(void *fd_tracker_match_entry_head, struct sockaddr_storage *checkip)
-+ {
-+-	struct acl_match_entry *match_entry = *match_entry_head;
-+-	int (*match_fn)(struct sockaddr_storage *checkip, struct acl_match_entry *match_entry);
-++	struct ip_acl_match_entry **match_entry_head = (struct ip_acl_match_entry **)fd_tracker_match_entry_head;
-++	struct ip_acl_match_entry *match_entry = *match_entry_head;
-++	int (*match_fn)(struct sockaddr_storage *checkip, struct ip_acl_match_entry *match_entry);
-+ 
-+ 	if (checkip->ss_family == AF_INET){
-+ 		match_fn = ip_matches_v4;
-+@@ -161,10 +170,11 @@ int ipcheck_validate(struct acl_match_entry **match_entry_head, struct sockaddr_
-+  * Routines to manuipulate access lists
-+  */
-+ 
-+-void ipcheck_rmall(struct acl_match_entry **match_entry_head)
-++void ipcheck_rmall(void *fd_tracker_match_entry_head)
-+ {
-+-	struct acl_match_entry *next_match_entry;
-+-	struct acl_match_entry *match_entry = *match_entry_head;
-++	struct ip_acl_match_entry **match_entry_head = (struct ip_acl_match_entry **)fd_tracker_match_entry_head;
-++	struct ip_acl_match_entry *next_match_entry;
-++	struct ip_acl_match_entry *match_entry = *match_entry_head;
-+ 
-+ 	while (match_entry) {
-+ 		next_match_entry = match_entry->next;
-+@@ -174,11 +184,11 @@ void ipcheck_rmall(struct acl_match_entry **match_entry_head)
-+ 	*match_entry_head = NULL;
-+ }
-+ 
-+-static struct acl_match_entry *ipcheck_findmatch(struct acl_match_entry **match_entry_head,
-++static struct ip_acl_match_entry *ipcheck_findmatch(struct ip_acl_match_entry **match_entry_head,
-+ 						 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 						 check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+-	struct acl_match_entry *match_entry = *match_entry_head;
-++	struct ip_acl_match_entry *match_entry = *match_entry_head;
-+ 
-+ 	while (match_entry) {
-+ 		if ((!memcmp(&match_entry->addr1, ip1, sizeof(struct sockaddr_storage))) &&
-+@@ -193,13 +203,14 @@ static struct acl_match_entry *ipcheck_findmatch(struct acl_match_entry **match_
-+ 	return NULL;
-+ }
-+ 
-+-int ipcheck_rmip(struct acl_match_entry **match_entry_head,
-++int ipcheck_rmip(void *fd_tracker_match_entry_head,
-+ 		 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 		 check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+-	struct acl_match_entry *next_match_entry = NULL;
-+-	struct acl_match_entry *rm_match_entry;
-+-	struct acl_match_entry *match_entry = *match_entry_head;
-++	struct ip_acl_match_entry **match_entry_head = (struct ip_acl_match_entry **)fd_tracker_match_entry_head;
-++	struct ip_acl_match_entry *next_match_entry = NULL;
-++	struct ip_acl_match_entry *rm_match_entry;
-++	struct ip_acl_match_entry *match_entry = *match_entry_head;
-+ 
-+ 	rm_match_entry = ipcheck_findmatch(match_entry_head, ip1, ip2, type, acceptreject);
-+ 	if (!rm_match_entry) {
-+@@ -231,12 +242,13 @@ int ipcheck_rmip(struct acl_match_entry **match_entry_head,
-+ 	return 0;
-+ }
-+ 
-+-int ipcheck_addip(struct acl_match_entry **match_entry_head,
-++int ipcheck_addip(void *fd_tracker_match_entry_head,
-+ 		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 		  check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+-	struct acl_match_entry *new_match_entry;
-+-	struct acl_match_entry *match_entry = *match_entry_head;
-++	struct ip_acl_match_entry **match_entry_head = (struct ip_acl_match_entry **)fd_tracker_match_entry_head;
-++	struct ip_acl_match_entry *new_match_entry;
-++	struct ip_acl_match_entry *match_entry = *match_entry_head;
-+ 
-+ 	if (!ip1) {
-+ 		errno = EINVAL;
-+@@ -259,7 +271,7 @@ int ipcheck_addip(struct acl_match_entry **match_entry_head,
-+ 		return -1;
-+ 	}
-+ 
-+-	new_match_entry = malloc(sizeof(struct acl_match_entry));
-++	new_match_entry = malloc(sizeof(struct ip_acl_match_entry));
-+ 	if (!new_match_entry) {
-+ 		return -1;
-+ 	}
-diff --git a/debian/patches/access-lists-enable-access-lists-for-GENERIC_ACL-protocol.patch b/debian/patches/access-lists-enable-access-lists-for-GENERIC_ACL-protocol.patch
-new file mode 100644
-index 0000000..636f0ab
---- /dev/null
-+++ b/debian/patches/access-lists-enable-access-lists-for-GENERIC_ACL-protocol.patch
-@@ -0,0 +1,80 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Fri, 15 Feb 2019 10:57:45 +0100
-+Subject: [access lists] enable access lists for GENERIC_ACL protocols (udp
-+ for example)
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit fe077a47ad551d6dcc9f136a1f29b2b98b718beb)
-+---
-+ libknet/threads_rx.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
-+ 1 file changed, 44 insertions(+)
-+
-+diff --git a/libknet/threads_rx.c b/libknet/threads_rx.c
-+index 8435d13..833938d 100644
-+--- a/libknet/threads_rx.c
-++++ b/libknet/threads_rx.c
-+@@ -20,6 +20,7 @@
-+ #include "crypto.h"
-+ #include "host.h"
-+ #include "links.h"
-++#include "links_acl.h"
-+ #include "logging.h"
-+ #include "transports.h"
-+ #include "transport_common.h"
-+@@ -720,6 +721,27 @@ out_pmtud:
-+ 	}
-+ }
-+ 
-++/*
-++ * return 0 to reject and 1 to accept a packet
-++ */
-++static int _generic_filter_packet_by_acl(knet_handle_t knet_h, int sockfd, const struct knet_mmsghdr *msg)
-++{
-++	switch(transport_get_proto(knet_h, knet_h->knet_transport_fd_tracker[sockfd].transport)) {
-++		case LOOPBACK:
-++			return 1;
-++			break;
-++		case IP_PROTO:
-++			return ipcheck_validate(&knet_h->knet_transport_fd_tracker[sockfd].match_entry, msg->msg_hdr.msg_name);
-++			break;
-++		default:
-++			break;
-++	}
-++	/*
-++	 * reject by default
-++	 */
-++	return 0;
-++}
-++
-+ static void _handle_recv_from_links(knet_handle_t knet_h, int sockfd, struct knet_mmsghdr *msg)
-+ {
-+ 	int err, savederrno;
-+@@ -802,6 +824,28 @@ static void _handle_recv_from_links(knet_handle_t knet_h, int sockfd, struct kne
-+ 				goto exit_unlock;
-+ 				break;
-+ 			case 2: /* packet is data and should be parsed as such */
-++				/*
-++				 * processing incoming packets vs access lists
-++				 */
-++				if ((knet_h->use_access_lists) &&
-++				    (transport_get_acl_type(knet_h, transport) == USE_GENERIC_ACL)) {
-++					if (!_generic_filter_packet_by_acl(knet_h, sockfd, &msg[i])) {
-++						char src_ipaddr[KNET_MAX_HOST_LEN];
-++						char src_port[KNET_MAX_PORT_LEN];
-++
-++						memset(src_ipaddr, 0, KNET_MAX_HOST_LEN);
-++						memset(src_port, 0, KNET_MAX_PORT_LEN);
-++						knet_addrtostr(msg->msg_hdr.msg_name, sockaddr_len(msg->msg_hdr.msg_name),
-++							       src_ipaddr, KNET_MAX_HOST_LEN,
-++							       src_port, KNET_MAX_PORT_LEN);
-++
-++						log_debug(knet_h, KNET_SUB_RX, "Packet rejected from %s/%s", src_ipaddr, src_port);
-++						/*
-++						 * continue processing the other packets
-++						 */
-++						continue;
-++					}
-++				}
-+ 				_parse_recv_from_links(knet_h, sockfd, &msg[i]);
-+ 				break;
-+ 		}
-diff --git a/debian/patches/access-lists-enable-generic-access-lists-only-for-protoco.patch b/debian/patches/access-lists-enable-generic-access-lists-only-for-protoco.patch
-new file mode 100644
-index 0000000..a27bd22
---- /dev/null
-+++ b/debian/patches/access-lists-enable-generic-access-lists-only-for-protoco.patch
-@@ -0,0 +1,55 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Sun, 17 Feb 2019 07:32:59 +0100
-+Subject: [access lists] enable generic access lists only for protocols that
-+ use them
-+
-+protocols such as SCTP that use their own access list tracking will
-+need to setup access lists in transport_link_set/clear_config
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 862446dbc84165963b34f05e2157d3361b5b8f8a)
-+---
-+ libknet/links.c | 15 ++++++++++-----
-+ 1 file changed, 10 insertions(+), 5 deletions(-)
-+
-+diff --git a/libknet/links.c b/libknet/links.c
-+index 6c75c35..85b50e5 100644
-+--- a/libknet/links.c
-++++ b/libknet/links.c
-+@@ -287,10 +287,13 @@ int knet_link_set_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t l
-+ 
-+ 	/*
-+ 	 * we can only configure default access lists if we know both endpoints
-++	 * and the protocol uses GENERIC_ACL, otherwise the protocol has
-++	 * to setup their own access lists above in transport_link_set_config.
-+ 	 */
-+-	if (link->dynamic == KNET_LINK_STATIC) {
-+-		log_debug(knet_h, KNET_SUB_LINK, "Configuring default access lists for host: %u link: %u",
-+-			  host_id, link_id);
-++	if ((transport_get_acl_type(knet_h, transport) == USE_GENERIC_ACL) &&
-++	    (link->dynamic == KNET_LINK_STATIC)) {
-++		log_debug(knet_h, KNET_SUB_LINK, "Configuring default access lists for host: %u link: %u socket: %d",
-++			  host_id, link_id, link->outsock);
-+ 		if (_link_add_default_acl(knet_h, link) < 0) {
-+ 			log_warn(knet_h, KNET_SUB_LINK, "Failed to configure default access lists for host: %u link: %u", host_id, link_id);
-+ 			savederrno = errno;
-+@@ -469,7 +472,8 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+ 	 * then we can remove any leftover access lists if the link
-+ 	 * is no longer in use.
-+ 	 */
-+-	if (link->dynamic == KNET_LINK_STATIC) {
-++	if ((transport_get_acl_type(knet_h, link->transport_type) == USE_GENERIC_ACL) &&
-++	    (link->dynamic == KNET_LINK_STATIC)) {
-+ 		if (_link_rm_default_acl(knet_h, link) < 0) {
-+ 			err = -1;
-+ 			savederrno = EBUSY;
-+@@ -496,7 +500,8 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+ 	 * remove any other access lists when the socket is no
-+ 	 * longer in use by the transport.
-+ 	 */
-+-	if (knet_h->knet_transport_fd_tracker[sock].transport == KNET_MAX_TRANSPORTS) {
-++	if ((transport_get_acl_type(knet_h, link->transport_type) == USE_GENERIC_ACL) &&
-++	    (knet_h->knet_transport_fd_tracker[sock].transport == KNET_MAX_TRANSPORTS)) {
-+ 		_link_del_all_acl(knet_h, sock);
-+ 	}
-+ 
-diff --git a/debian/patches/access-lists-fix-build-on-BSD-and-add-some-include-files-.patch b/debian/patches/access-lists-fix-build-on-BSD-and-add-some-include-files-.patch
-new file mode 100644
-index 0000000..27b0e57
---- /dev/null
-+++ b/debian/patches/access-lists-fix-build-on-BSD-and-add-some-include-files-.patch
-@@ -0,0 +1,64 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Fri, 22 Feb 2019 07:08:29 +0100
-+Subject: [access lists] fix build on BSD and add some include files around
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit f1919ce88831032c123bb28771ef2cabf03a148e)
-+---
-+ libknet/tests/Makefile.am     | 1 +
-+ libknet/links_acl.c           | 2 ++
-+ libknet/links_acl_ip.c        | 2 ++
-+ libknet/tests/int_links_acl.c | 2 ++
-+ 4 files changed, 7 insertions(+)
-+
-+diff --git a/libknet/tests/Makefile.am b/libknet/tests/Makefile.am
-+index d46553a..2f22293 100644
-+--- a/libknet/tests/Makefile.am
-++++ b/libknet/tests/Makefile.am
-+@@ -69,6 +69,7 @@ pckt_test_SOURCES	= pckt_test.c
-+ 
-+ int_links_acl_test_SOURCES = int_links_acl.c \
-+ 			     ../common.c \
-++			     ../compat.c \
-+ 			     ../logging.c \
-+ 			     ../netutils.c \
-+ 			     ../threads_common.c \
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index 8592f1f..cfcc1fd 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -6,6 +6,8 @@
-+  * This software licensed under GPL-2.0+, LGPL-2.0+
-+  */
-+ 
-++#include "config.h"
-++
-+ #include <stdint.h>
-+ #include <string.h>
-+ #include <stdlib.h>
-+diff --git a/libknet/links_acl_ip.c b/libknet/links_acl_ip.c
-+index 2aef14b..ffd18a4 100644
-+--- a/libknet/links_acl_ip.c
-++++ b/libknet/links_acl_ip.c
-+@@ -6,6 +6,8 @@
-+  * This software licensed under GPL-2.0+, LGPL-2.0+
-+  */
-+ 
-++#include "config.h"
-++
-+ #include <sys/socket.h>
-+ #include <netinet/in.h>
-+ #include <stdint.h>
-+diff --git a/libknet/tests/int_links_acl.c b/libknet/tests/int_links_acl.c
-+index 8d9f4e0..05bd829 100644
-+--- a/libknet/tests/int_links_acl.c
-++++ b/libknet/tests/int_links_acl.c
-+@@ -6,6 +6,8 @@
-+  * This software licensed under GPL-2.0+, LGPL-2.0+
-+  */
-+ 
-++#include "config.h"
-++
-+ #include <sys/types.h>
-+ #include <sys/socket.h>
-+ #include <netinet/in.h>
-diff --git a/debian/patches/access-lists-fix-build-on-freebsd.patch b/debian/patches/access-lists-fix-build-on-freebsd.patch
-new file mode 100644
-index 0000000..385cc85
---- /dev/null
-+++ b/debian/patches/access-lists-fix-build-on-freebsd.patch
-@@ -0,0 +1,54 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Sun, 17 Feb 2019 09:49:06 +0100
-+Subject: [access lists] fix build on freebsd
-+
-+don't use malloc.h, obsoleted by stdlib.h
-+define s6_addr32 that's only available in kernel space
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 12ee796ceca832c18054e87a0e310dcd9a6c16c6)
-+---
-+ libknet/links_acl.c           | 11 ++++++++++-
-+ libknet/tests/int_links_acl.c |  1 -
-+ 2 files changed, 10 insertions(+), 2 deletions(-)
-+
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index 2ad3e90..854f273 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -10,13 +10,22 @@
-+ #include <netinet/in.h>
-+ #include <stdint.h>
-+ #include <string.h>
-+-#include <malloc.h>
-++#include <stdlib.h>
-+ 
-+ #include "internals.h"
-+ #include "logging.h"
-+ #include "transports.h"
-+ #include "links_acl.h"
-+ 
-++/*
-++ * s6_addr32 is not defined in BSD userland, only kernel.
-++ * definition is the same as linux and it works fine for
-++ * what we need.
-++ */
-++#ifndef s6_addr32
-++#define s6_addr32 __u6_addr.__u6_addr32
-++#endif
-++
-+ /*
-+  * IPv4 See if the address we have matches the current match entry
-+  */
-+diff --git a/libknet/tests/int_links_acl.c b/libknet/tests/int_links_acl.c
-+index 129aabe..133cd5a 100644
-+--- a/libknet/tests/int_links_acl.c
-++++ b/libknet/tests/int_links_acl.c
-+@@ -13,7 +13,6 @@
-+ #include <stdlib.h>
-+ #include <string.h>
-+ #include <netdb.h>
-+-#include <malloc.h>
-+ 
-+ #include "internals.h"
-+ #include "links_acl.h"
-diff --git a/debian/patches/access-lists-improve-checks-on-various-data-types.patch b/debian/patches/access-lists-improve-checks-on-various-data-types.patch
-new file mode 100644
-index 0000000..1a8d531
---- /dev/null
-+++ b/debian/patches/access-lists-improve-checks-on-various-data-types.patch
-@@ -0,0 +1,74 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Wed, 6 Mar 2019 09:43:10 +0100
-+Subject: [access lists] improve checks on various data types
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit f6f08c08179a051aa51fadc48a1acfb71a6f55b4)
-+---
-+ libknet/links.c | 39 +++++++++++++++++++++++++++++++++++++++
-+ 1 file changed, 39 insertions(+)
-+
-+diff --git a/libknet/links.c b/libknet/links.c
-+index 0f02006..038a8a4 100644
-+--- a/libknet/links.c
-++++ b/libknet/links.c
-+@@ -1168,6 +1168,19 @@ int knet_link_add_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link
-+ 		return -1;
-+ 	}
-+ 
-++	if ((type != CHECK_TYPE_ADDRESS) &&
-++	    (type != CHECK_TYPE_MASK) &&
-++	    (type != CHECK_TYPE_RANGE)) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	if ((acceptreject != CHECK_ACCEPT) &&
-++	    (acceptreject != CHECK_REJECT)) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-+ 	if ((type != CHECK_TYPE_ADDRESS) && (!ss2)) {
-+ 		errno = EINVAL;
-+ 		return -1;
-+@@ -1250,6 +1263,19 @@ int knet_link_insert_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t l
-+ 		return -1;
-+ 	}
-+ 
-++	if ((type != CHECK_TYPE_ADDRESS) &&
-++	    (type != CHECK_TYPE_MASK) &&
-++	    (type != CHECK_TYPE_RANGE)) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	if ((acceptreject != CHECK_ACCEPT) &&
-++	    (acceptreject != CHECK_REJECT)) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-+ 	if ((type != CHECK_TYPE_ADDRESS) && (!ss2)) {
-+ 		errno = EINVAL;
-+ 		return -1;
-+@@ -1331,6 +1357,19 @@ int knet_link_rm_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_
-+ 		return -1;
-+ 	}
-+ 
-++	if ((type != CHECK_TYPE_ADDRESS) &&
-++	    (type != CHECK_TYPE_MASK) &&
-++	    (type != CHECK_TYPE_RANGE)) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	if ((acceptreject != CHECK_ACCEPT) &&
-++	    (acceptreject != CHECK_REJECT)) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-+ 	if ((type != CHECK_TYPE_ADDRESS) && (!ss2)) {
-+ 		errno = EINVAL;
-+ 		return -1;
-diff --git a/debian/patches/access-lists-make-code-more-generic-to-accept-more-than-I.patch b/debian/patches/access-lists-make-code-more-generic-to-accept-more-than-I.patch
-new file mode 100644
-index 0000000..30cafa3
---- /dev/null
-+++ b/debian/patches/access-lists-make-code-more-generic-to-accept-more-than-I.patch
-@@ -0,0 +1,436 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 12 Feb 2019 07:21:20 +0100
-+Subject: [access lists] make code more generic to accept more than IP
-+ protocol and start to bind it to each fd
-+
-+access lists are unique per file descriptor, each fd can have its own protocol and list.
-+
-+remane around ipcheck* with check* to be more generic.
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 45b1d526876aa89986e7bd379c45f8856056fe68)
-+---
-+ libknet/internals.h           |  24 +++++++++
-+ libknet/links_acl.h           |  18 ++++---
-+ libknet/links_acl.c           | 114 ++++++++++++++++++++----------------------
-+ libknet/tests/int_links_acl.c |  46 +++++++++++------
-+ 4 files changed, 120 insertions(+), 82 deletions(-)
-+
-+diff --git a/libknet/internals.h b/libknet/internals.h
-+index 106b49d..78e718d 100644
-+--- a/libknet/internals.h
-++++ b/libknet/internals.h
-+@@ -129,11 +129,35 @@ struct knet_sock {
-+ 			  * and socket has been removed from epoll */
-+ };
-+ 
-++/*
-++ * access lists
-++ */
-++
-++typedef enum {
-++	CHECK_TYPE_ADDRESS,
-++	CHECK_TYPE_MASK,
-++	CHECK_TYPE_RANGE
-++} check_type_t;
-++
-++typedef	enum {
-++	CHECK_ACCEPT,
-++	CHECK_REJECT
-++} check_acceptreject_t;
-++
-++struct acl_match_entry {
-++	check_type_t type;
-++	check_acceptreject_t acceptreject;
-++	struct sockaddr_storage addr1; /* Actual IP address, mask top or low IP */
-++	struct sockaddr_storage addr2; /* high IP address or address bitmask */
-++	struct acl_match_entry *next;
-++};
-++
-+ struct knet_fd_trackers {
-+ 	uint8_t transport; /* transport type (UDP/SCTP...) */
-+ 	uint8_t data_type; /* internal use for transport to define what data are associated
-+ 			    * to this fd */
-+ 	void *data;	   /* pointer to the data */
-++	struct acl_match_entry *match_entry;
-+ };
-+ 
-+ #define KNET_MAX_FDS KNET_MAX_HOST * KNET_MAX_LINK * 4
-+diff --git a/libknet/links_acl.h b/libknet/links_acl.h
-+index eca4566..26b0f36 100644
-+--- a/libknet/links_acl.h
-++++ b/libknet/links_acl.h
-+@@ -6,11 +6,17 @@
-+  * This software licensed under GPL-2.0+, LGPL-2.0+
-+  */
-+ 
-+-typedef enum {IPCHECK_TYPE_ADDRESS, IPCHECK_TYPE_MASK, IPCHECK_TYPE_RANGE} ipcheck_type_t;
-+-typedef	enum {IPCHECK_ACCEPT, IPCHECK_REJECT} ipcheck_acceptreject_t;
-++#ifndef __KNET_LINKS_ACL_H__
-++#define __KNET_LINKS_ACL_H__
-+ 
-+-int ipcheck_validate(struct sockaddr_storage *checkip);
-++#include "internals.h"
-+ 
-+-void ipcheck_clear(void);
-+-int ipcheck_addip(struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+-		  ipcheck_type_t type, ipcheck_acceptreject_t acceptreject);
-++int ipcheck_validate(struct acl_match_entry **match_entry_head, struct sockaddr_storage *checkip);
-++
-++void ipcheck_clear(struct acl_match_entry **match_entry_head);
-++
-++int ipcheck_addip(struct acl_match_entry **match_entry_head,
-++		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		  check_type_t type, check_acceptreject_t acceptreject);
-++
-++#endif
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index e7b5602..fe84088 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -11,26 +11,17 @@
-+ #include <stdint.h>
-+ #include <string.h>
-+ #include <malloc.h>
-+-#include "links_acl.h"
-+-
-+-struct ip_match_entry {
-+-	ipcheck_type_t type;
-+-	ipcheck_acceptreject_t acceptreject;
-+-	struct sockaddr_storage addr1; /* Actual IP address, mask top or low IP */
-+-	struct sockaddr_storage addr2; /* high IP address or address bitmask */
-+-	struct ip_match_entry *next;
-+-};
-+ 
-+-
-+-/* Lists of things to match against. These are dummy structs to provide a quick list head */
-+-static struct ip_match_entry match_entry_head_v4;
-+-static struct ip_match_entry match_entry_head_v6;
-++#include "internals.h"
-++#include "logging.h"
-++#include "transports.h"
-++#include "links_acl.h"
-+ 
-+ /*
-+  * IPv4 See if the address we have matches the current match entry
-+- *
-+  */
-+-static int ip_matches_v4(struct sockaddr_storage *checkip, struct ip_match_entry *match_entry)
-++
-++static int ip_matches_v4(struct sockaddr_storage *checkip, struct acl_match_entry *match_entry)
-+ {
-+ 	struct sockaddr_in *ip_to_check;
-+ 	struct sockaddr_in *match1;
-+@@ -41,16 +32,16 @@ static int ip_matches_v4(struct sockaddr_storage *checkip, struct ip_match_entry
-+ 	match2 = (struct sockaddr_in *)&match_entry->addr2;
-+ 
-+ 	switch(match_entry->type) {
-+-	case IPCHECK_TYPE_ADDRESS:
-++	case CHECK_TYPE_ADDRESS:
-+ 		if (ip_to_check->sin_addr.s_addr == match1->sin_addr.s_addr)
-+ 			return 1;
-+ 		break;
-+-	case IPCHECK_TYPE_MASK:
-++	case CHECK_TYPE_MASK:
-+ 		if ((ip_to_check->sin_addr.s_addr & match2->sin_addr.s_addr) ==
-+ 		    match1->sin_addr.s_addr)
-+ 			return 1;
-+ 		break;
-+-	case IPCHECK_TYPE_RANGE:
-++	case CHECK_TYPE_RANGE:
-+ 		if ((ntohl(ip_to_check->sin_addr.s_addr) >= ntohl(match1->sin_addr.s_addr)) &&
-+ 		    (ntohl(ip_to_check->sin_addr.s_addr) <= ntohl(match2->sin_addr.s_addr)))
-+ 			return 1;
-+@@ -60,7 +51,10 @@ static int ip_matches_v4(struct sockaddr_storage *checkip, struct ip_match_entry
-+ 	return 0;
-+ }
-+ 
-+-/* Compare two IPv6 addresses */
-++/*
-++ * Compare two IPv6 addresses
-++ */
-++
-+ static int ip6addr_cmp(struct in6_addr *a, struct in6_addr *b)
-+ {
-+ 	uint64_t a_high, a_low;
-+@@ -89,9 +83,9 @@ static int ip6addr_cmp(struct in6_addr *a, struct in6_addr *b)
-+ 
-+ /*
-+  * IPv6 See if the address we have matches the current match entry
-+- *
-+  */
-+-static int ip_matches_v6(struct sockaddr_storage *checkip, struct ip_match_entry *match_entry)
-++
-++static int ip_matches_v6(struct sockaddr_storage *checkip, struct acl_match_entry *match_entry)
-+ {
-+ 	struct sockaddr_in6 *ip_to_check;
-+ 	struct sockaddr_in6 *match1;
-+@@ -103,12 +97,12 @@ static int ip_matches_v6(struct sockaddr_storage *checkip, struct ip_match_entry
-+ 	match2 = (struct sockaddr_in6 *)&match_entry->addr2;
-+ 
-+ 	switch(match_entry->type) {
-+-	case IPCHECK_TYPE_ADDRESS:
-++	case CHECK_TYPE_ADDRESS:
-+ 		if (!memcmp(ip_to_check->sin6_addr.s6_addr32, match1->sin6_addr.s6_addr32, sizeof(struct in6_addr)))
-+ 			return 1;
-+ 		break;
-+ 
-+-	case IPCHECK_TYPE_MASK:
-++	case CHECK_TYPE_MASK:
-+ 		/*
-+ 		 * Note that this little loop will quit early if there is a non-match so the
-+ 		 * comparison might look backwards compared to the IPv4 one
-+@@ -119,7 +113,7 @@ static int ip_matches_v6(struct sockaddr_storage *checkip, struct ip_match_entry
-+ 				return 0;
-+ 		}
-+ 		return 1;
-+-	case IPCHECK_TYPE_RANGE:
-++	case CHECK_TYPE_RANGE:
-+ 		if ((ip6addr_cmp(&ip_to_check->sin6_addr, &match1->sin6_addr) >= 0) &&
-+ 		    (ip6addr_cmp(&ip_to_check->sin6_addr, &match2->sin6_addr) <= 0))
-+ 			return 1;
-+@@ -129,24 +123,20 @@ static int ip_matches_v6(struct sockaddr_storage *checkip, struct ip_match_entry
-+ }
-+ 
-+ 
-+-/*
-+- * YOU ARE HERE
-+- */
-+-int ipcheck_validate(struct sockaddr_storage *checkip)
-++int ipcheck_validate(struct acl_match_entry **match_entry_head, struct sockaddr_storage *checkip)
-+ {
-+-	struct ip_match_entry *match_entry;
-+-	int (*match_fn)(struct sockaddr_storage *checkip, struct ip_match_entry *match_entry);
-++	struct acl_match_entry *match_entry = *match_entry_head;
-++	int (*match_fn)(struct sockaddr_storage *checkip, struct acl_match_entry *match_entry);
-+ 
-+ 	if (checkip->ss_family == AF_INET){
-+-		match_entry = match_entry_head_v4.next;
-+ 		match_fn = ip_matches_v4;
-+ 	} else {
-+-		match_entry = match_entry_head_v6.next;
-+ 		match_fn = ip_matches_v6;
-+ 	}
-++
-+ 	while (match_entry) {
-+ 		if (match_fn(checkip, match_entry)) {
-+-			if (match_entry->acceptreject == IPCHECK_ACCEPT)
-++			if (match_entry->acceptreject == CHECK_ACCEPT)
-+ 				return 1;
-+ 			else
-+ 				return 0;
-+@@ -157,47 +147,42 @@ int ipcheck_validate(struct sockaddr_storage *checkip)
-+ }
-+ 
-+ /*
-+- * Routines to manuipulate the lists
-++ * Routines to manuipulate access lists
-+  */
-+ 
-+-void ipcheck_clear(void)
-++void ipcheck_clear(struct acl_match_entry **match_entry_head)
-+ {
-+-	struct ip_match_entry *match_entry;
-+-	struct ip_match_entry *next_match_entry;
-++	struct acl_match_entry *next_match_entry;
-++	struct acl_match_entry *match_entry = *match_entry_head;
-+ 
-+-	match_entry = match_entry_head_v4.next;
-+-	while (match_entry) {
-+-		next_match_entry = match_entry->next;
-+-		free(match_entry);
-+-		match_entry = next_match_entry;
-+-	}
-+-
-+-	match_entry = match_entry_head_v6.next;
-+ 	while (match_entry) {
-+ 		next_match_entry = match_entry->next;
-+ 		free(match_entry);
-+ 		match_entry = next_match_entry;
-+ 	}
-++	*match_entry_head = NULL;
-+ }
-+ 
-+-int ipcheck_addip(struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+-		  ipcheck_type_t type, ipcheck_acceptreject_t acceptreject)
-++int ipcheck_addip(struct acl_match_entry **match_entry_head,
-++		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		  check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+-	struct ip_match_entry *match_entry;
-+-	struct ip_match_entry *new_match_entry;
-++	struct acl_match_entry *new_match_entry;
-++	struct acl_match_entry *match_entry = *match_entry_head;
-+ 
-+-	if (type == IPCHECK_TYPE_RANGE &&
-+-	    (ip1->ss_family != ip2->ss_family))
-++	if (!ip1) {
-+ 		return -1;
-++	}
-+ 
-+-	if (ip1->ss_family == AF_INET){
-+-		match_entry = &match_entry_head_v4;
-+-	} else {
-+-		match_entry = &match_entry_head_v6;
-++	if ((type != CHECK_TYPE_ADDRESS) && (!ip2)) {
-++		return -1;
-+ 	}
-+ 
-++	if (type == CHECK_TYPE_RANGE &&
-++	    (ip1->ss_family != ip2->ss_family))
-++		return -1;
-+ 
-+-	new_match_entry = malloc(sizeof(struct ip_match_entry));
-++	new_match_entry = malloc(sizeof(struct acl_match_entry));
-+ 	if (!new_match_entry)
-+ 		return -1;
-+ 
-+@@ -207,12 +192,19 @@ int ipcheck_addip(struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 	new_match_entry->acceptreject = acceptreject;
-+ 	new_match_entry->next = NULL;
-+ 
-+-	/* Find the end of the list */
-+-	/* is this OK, or should we use a doubly-linked list or bulk-load API call? */
-+-	while (match_entry->next) {
-+-		match_entry = match_entry->next;
-++	if (match_entry) {
-++		/* Find the end of the list */
-++		/* is this OK, or should we use a doubly-linked list or bulk-load API call? */
-++		while (match_entry->next) {
-++			match_entry = match_entry->next;
-++		}
-++		match_entry->next = new_match_entry;
-++	} else {
-++		/*
-++		 * first entry in the list
-++		 */
-++		*match_entry_head = new_match_entry;
-+ 	}
-+-	match_entry->next = new_match_entry;
-+ 
-+ 	return 0;
-+ }
-+diff --git a/libknet/tests/int_links_acl.c b/libknet/tests/int_links_acl.c
-+index 27ac545..1e7f426 100644
-+--- a/libknet/tests/int_links_acl.c
-++++ b/libknet/tests/int_links_acl.c
-+@@ -14,8 +14,13 @@
-+ #include <string.h>
-+ #include <netdb.h>
-+ #include <malloc.h>
-++
-++#include "internals.h"
-+ #include "links_acl.h"
-+ 
-++static struct acl_match_entry *match_entry_v4;
-++static struct acl_match_entry *match_entry_v6;
-++
-+ /* This is a test program .. remember! */
-+ #define BUFLEN 1024
-+ 
-+@@ -31,7 +36,7 @@ static int get_ipaddress(char *buf, struct sockaddr_storage *addr)
-+ 	res = getaddrinfo(buf, NULL, &hints, &info);
-+ 	if (!res) {
-+ 		memmove(addr, info->ai_addr, info->ai_addrlen);
-+-		free(info);
-++		freeaddrinfo(info);
-+ 	}
-+ 	return res;
-+ }
-+@@ -96,12 +101,13 @@ static int load_file(void)
-+ 	char filebuf[BUFLEN];
-+ 	int line = 0;
-+ 	int ret;
-+-	ipcheck_type_t type;
-+-	ipcheck_acceptreject_t acceptreject;
-++	check_type_t type;
-++	check_acceptreject_t acceptreject;
-+ 	struct sockaddr_storage addr1;
-+ 	struct sockaddr_storage addr2;
-+ 
-+-	ipcheck_clear();
-++	ipcheck_clear(&match_entry_v4);
-++	ipcheck_clear(&match_entry_v6);
-+ 
-+ 	filterfile = fopen("int_links_acl.txt", "r");
-+ 	if (!filterfile) {
-+@@ -118,10 +124,10 @@ static int load_file(void)
-+ 		 */
-+ 		switch(filebuf[0] & 0x5F) {
-+ 		case 'A':
-+-			acceptreject = IPCHECK_ACCEPT;
-++			acceptreject = CHECK_ACCEPT;
-+ 			break;
-+ 		case 'R':
-+-			acceptreject = IPCHECK_REJECT;
-++			acceptreject = CHECK_REJECT;
-+ 			break;
-+ 		default:
-+ 			fprintf(stderr, "Unknown record type on line %d: %s\n", line, filebuf);
-+@@ -136,15 +142,15 @@ static int load_file(void)
-+ 		 */
-+ 		switch(filebuf[1] & 0x5F) {
-+ 		case 'A':
-+-			type = IPCHECK_TYPE_ADDRESS;
-++			type = CHECK_TYPE_ADDRESS;
-+ 			ret = read_address(filebuf+2, &addr1);
-+ 			break;
-+ 		case 'M':
-+-			type = IPCHECK_TYPE_MASK;
-++			type = CHECK_TYPE_MASK;
-+ 			ret = read_mask(filebuf+2, &addr1, &addr2);
-+ 			break;
-+ 		case 'R':
-+-			type = IPCHECK_TYPE_RANGE;
-++			type = CHECK_TYPE_RANGE;
-+ 			ret = read_range(filebuf+2, &addr1, &addr2);
-+ 			break;
-+ 		default:
-+@@ -156,7 +162,11 @@ static int load_file(void)
-+ 			fprintf(stderr, "Failed to parse address on line %d: %s\n", line, filebuf);
-+ 		}
-+ 		else {
-+-			ipcheck_addip(&addr1, &addr2, type, acceptreject);
-++			if (addr1.ss_family == AF_INET) {
-++				ipcheck_addip(&match_entry_v4, &addr1, &addr2, type, acceptreject);
-++			} else {
-++				ipcheck_addip(&match_entry_v6, &addr1, &addr2, type, acceptreject);
-++			}
-+ 		}
-+ 	next_record: {} /* empty statement to mollify the compiler */
-+ 	}
-+@@ -168,6 +178,7 @@ static int load_file(void)
-+ int main(int argc, char *argv[])
-+ {
-+ 	struct sockaddr_storage saddr;
-++	struct acl_match_entry *match_entry;
-+ 	int ret;
-+ 	int i;
-+ 
-+@@ -178,16 +189,21 @@ int main(int argc, char *argv[])
-+ 		ret = get_ipaddress(argv[i], &saddr);
-+ 		if (ret) {
-+ 			fprintf(stderr, "Cannot parse address %s\n", argv[i]);
-+-		}
-+-		else {
-+-			if (ipcheck_validate(&saddr)) {
-+-				printf("%s is VALID\n", argv[i]);
-++		} else {
-++			if (saddr.ss_family == AF_INET) {
-++				match_entry = match_entry_v4;
-++			} else {
-++				match_entry = match_entry_v6;
-+ 			}
-+-			else {
-++			if (ipcheck_validate(&match_entry, &saddr)) {
-++				printf("%s is VALID\n", argv[i]);
-++			} else {
-+ 				printf("%s is not allowed\n", argv[i]);
-+ 			}
-+ 		}
-+ 	}
-+ 
-++	ipcheck_clear(&match_entry_v4);
-++	ipcheck_clear(&match_entry_v6);
-+ 	return 0;
-+ }
-diff --git a/debian/patches/access-lists-make-internal-API-consistent.patch b/debian/patches/access-lists-make-internal-API-consistent.patch
-new file mode 100644
-index 0000000..a5d000c
---- /dev/null
-+++ b/debian/patches/access-lists-make-internal-API-consistent.patch
-@@ -0,0 +1,73 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Fri, 22 Feb 2019 06:53:48 +0100
-+Subject: [access lists] make internal API consistent
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit fb462d4f238b98ab685f9efae945a0e527f399ba)
-+---
-+ libknet/links_acl.h      | 2 +-
-+ libknet/links_acl.c      | 6 +++---
-+ libknet/threads_rx.c     | 2 +-
-+ libknet/transport_sctp.c | 2 +-
-+ 4 files changed, 6 insertions(+), 6 deletions(-)
-+
-+diff --git a/libknet/links_acl.h b/libknet/links_acl.h
-+index b083753..f871403 100644
-+--- a/libknet/links_acl.h
-++++ b/libknet/links_acl.h
-+@@ -37,6 +37,6 @@ int check_rm(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 	     struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 	     check_type_t type, check_acceptreject_t acceptreject);
-+ void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport);
-+-int check_validate(knet_handle_t knet_h, int sockfd, struct sockaddr_storage *checkip);
-++int check_validate(knet_handle_t knet_h, int sock, uint8_t transport, struct sockaddr_storage *checkip);
-+ 
-+ #endif
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index 93cc5af..8592f1f 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -74,14 +74,14 @@ void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport)
-+ /*
-+  * return 0 to reject and 1 to accept a packet
-+  */
-+-int check_validate(knet_handle_t knet_h, int sockfd, struct sockaddr_storage *checkip)
-++int check_validate(knet_handle_t knet_h, int sock, uint8_t transport, struct sockaddr_storage *checkip)
-+ {
-+-	switch(transport_get_proto(knet_h, knet_h->knet_transport_fd_tracker[sockfd].transport)) {
-++	switch(transport_get_proto(knet_h, transport)) {
-+ 		case LOOPBACK:
-+ 			return 1;
-+ 			break;
-+ 		case IP_PROTO:
-+-			return ipcheck_validate((struct acl_match_entry **)&knet_h->knet_transport_fd_tracker[sockfd].match_entry, checkip);
-++			return ipcheck_validate((struct acl_match_entry **)&knet_h->knet_transport_fd_tracker[sock].match_entry, checkip);
-+ 			break;
-+ 		default:
-+ 			break;
-+diff --git a/libknet/threads_rx.c b/libknet/threads_rx.c
-+index 6417261..ae39b38 100644
-+--- a/libknet/threads_rx.c
-++++ b/libknet/threads_rx.c
-+@@ -808,7 +808,7 @@ static void _handle_recv_from_links(knet_handle_t knet_h, int sockfd, struct kne
-+ 				 */
-+ 				if ((knet_h->use_access_lists) &&
-+ 				    (transport_get_acl_type(knet_h, transport) == USE_GENERIC_ACL)) {
-+-					if (!check_validate(knet_h, sockfd, msg[i].msg_hdr.msg_name)) {
-++					if (!check_validate(knet_h, sockfd, transport, msg[i].msg_hdr.msg_name)) {
-+ 						char src_ipaddr[KNET_MAX_HOST_LEN];
-+ 						char src_port[KNET_MAX_PORT_LEN];
-+ 
-+diff --git a/libknet/transport_sctp.c b/libknet/transport_sctp.c
-+index 50a237b..ff7903c 100644
-+--- a/libknet/transport_sctp.c
-++++ b/libknet/transport_sctp.c
-+@@ -731,7 +731,7 @@ static void _handle_incoming_sctp(knet_handle_t knet_h, int listen_sock)
-+ 	log_debug(knet_h, KNET_SUB_TRANSP_SCTP, "Incoming: received connection from: %s port: %s",
-+ 						addr_str, port_str);
-+ 	if (knet_h->use_access_lists) {
-+-		if (!check_validate(knet_h, listen_sock, &ss)) {
-++		if (!check_validate(knet_h, listen_sock, KNET_TRANSPORT_SCTP, &ss)) {
-+ 			savederrno = EINVAL;
-+ 			err = -1;
-+ 			log_debug(knet_h, KNET_SUB_TRANSP_SCTP, "Connection rejected from %s/%s", addr_str, port_str);
-diff --git a/debian/patches/access-lists-more-use-of-generic-wrappers-and-remove-dupl.patch b/debian/patches/access-lists-more-use-of-generic-wrappers-and-remove-dupl.patch
-new file mode 100644
-index 0000000..b69fa50
---- /dev/null
-+++ b/debian/patches/access-lists-more-use-of-generic-wrappers-and-remove-dupl.patch
-@@ -0,0 +1,72 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Fri, 22 Feb 2019 05:17:57 +0100
-+Subject: [access lists] more use of generic wrappers and remove duplicate code
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit be01691050bea1aabe0d8736d2017974d966a1c0)
-+---
-+ libknet/links_acl.c | 44 ++++++--------------------------------------
-+ 1 file changed, 6 insertions(+), 38 deletions(-)
-+
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index 32763de..85a792d 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -73,51 +73,19 @@ void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport)
-+ 
-+ int _link_add_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-+ {
-+-	int err = -1;
-+-
-+-	switch(transport_get_proto(knet_h, kh_link->transport_type)) {
-+-		case LOOPBACK:
-+-			/*
-+-			 * loopback does not require access lists
-+-			 */
-+-			err = 0;
-+-			break;
-+-		case IP_PROTO:
-+-			err = ipcheck_addip((struct acl_match_entry **)&knet_h->knet_transport_fd_tracker[kh_link->outsock].match_entry,
-+-					    &kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+-			break;
-+-		default:
-+-			break;
-+-	}
-+-
-+-	return err;
-++	return check_add(knet_h, kh_link->outsock, kh_link->transport_type,
-++			&kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+ }
-+ 
-+ int _link_rm_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-+ {
-+-	int err = -1;
-+-
-+-	switch(transport_get_proto(knet_h, kh_link->transport_type)) {
-+-		case LOOPBACK:
-+-			/*
-+-			 * loopback does not require access lists
-+-			 */
-+-			err = 0;
-+-			break;
-+-		case IP_PROTO:
-+-			err = ipcheck_rmip((struct acl_match_entry **)&knet_h->knet_transport_fd_tracker[kh_link->outsock].match_entry,
-+-					   &kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+-			break;
-+-		default:
-+-			break;
-+-	}
-+-
-+-	return err;
-++	return check_rm(knet_h, kh_link->outsock, kh_link->transport_type,
-++			&kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+ }
-+ 
-+ /*
-+- *  * return 0 to reject and 1 to accept a packet
-+- *   */
-++ * return 0 to reject and 1 to accept a packet
-++ */
-+ int _generic_filter_packet_by_acl(knet_handle_t knet_h, int sockfd, struct sockaddr_storage *checkip)
-+ {
-+ 	switch(transport_get_proto(knet_h, knet_h->knet_transport_fd_tracker[sockfd].transport)) {
-diff --git a/debian/patches/access-lists-move-access-lists-structs-and-data-types-to-.patch b/debian/patches/access-lists-move-access-lists-structs-and-data-types-to-.patch
-new file mode 100644
-index 0000000..a96ab6b
---- /dev/null
-+++ b/debian/patches/access-lists-move-access-lists-structs-and-data-types-to-.patch
-@@ -0,0 +1,168 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Fri, 22 Feb 2019 05:04:20 +0100
-+Subject: [access lists] move access lists structs and data types to
-+ links_acl.*
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit c374aef3fda1c01b282a5baf193e0ac7870d1eb2)
-+---
-+ libknet/internals.h    | 25 +------------------------
-+ libknet/links_acl.h    | 19 +++++++++++++++++++
-+ libknet/links_acl_ip.h |  1 +
-+ libknet/links_acl.c    | 12 ++++++------
-+ libknet/links_acl_ip.c |  1 +
-+ 5 files changed, 28 insertions(+), 30 deletions(-)
-+
-+diff --git a/libknet/internals.h b/libknet/internals.h
-+index 78e718d..0d6ee3f 100644
-+--- a/libknet/internals.h
-++++ b/libknet/internals.h
-+@@ -129,35 +129,12 @@ struct knet_sock {
-+ 			  * and socket has been removed from epoll */
-+ };
-+ 
-+-/*
-+- * access lists
-+- */
-+-
-+-typedef enum {
-+-	CHECK_TYPE_ADDRESS,
-+-	CHECK_TYPE_MASK,
-+-	CHECK_TYPE_RANGE
-+-} check_type_t;
-+-
-+-typedef	enum {
-+-	CHECK_ACCEPT,
-+-	CHECK_REJECT
-+-} check_acceptreject_t;
-+-
-+-struct acl_match_entry {
-+-	check_type_t type;
-+-	check_acceptreject_t acceptreject;
-+-	struct sockaddr_storage addr1; /* Actual IP address, mask top or low IP */
-+-	struct sockaddr_storage addr2; /* high IP address or address bitmask */
-+-	struct acl_match_entry *next;
-+-};
-+-
-+ struct knet_fd_trackers {
-+ 	uint8_t transport; /* transport type (UDP/SCTP...) */
-+ 	uint8_t data_type; /* internal use for transport to define what data are associated
-+ 			    * to this fd */
-+ 	void *data;	   /* pointer to the data */
-+-	struct acl_match_entry *match_entry;
-++	void *match_entry; /* pointer to access list match_entry list head */
-+ };
-+ 
-+ #define KNET_MAX_FDS KNET_MAX_HOST * KNET_MAX_LINK * 4
-+diff --git a/libknet/links_acl.h b/libknet/links_acl.h
-+index 9a20754..020ec05 100644
-+--- a/libknet/links_acl.h
-++++ b/libknet/links_acl.h
-+@@ -11,6 +11,25 @@
-+ 
-+ #include "internals.h"
-+ 
-++typedef enum {
-++	CHECK_TYPE_ADDRESS,
-++	CHECK_TYPE_MASK,
-++	CHECK_TYPE_RANGE
-++} check_type_t;
-++
-++typedef enum {
-++	CHECK_ACCEPT,
-++	CHECK_REJECT
-++} check_acceptreject_t;
-++
-++struct acl_match_entry {
-++	check_type_t type;
-++	check_acceptreject_t acceptreject;
-++	struct sockaddr_storage addr1; /* Actual IP address, mask top or low IP */
-++	struct sockaddr_storage addr2; /* high IP address or address bitmask */
-++	struct acl_match_entry *next;
-++};
-++
-+ int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 	      struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 	      check_type_t type, check_acceptreject_t acceptreject);
-+diff --git a/libknet/links_acl_ip.h b/libknet/links_acl_ip.h
-+index 575b5ff..9e21e00 100644
-+--- a/libknet/links_acl_ip.h
-++++ b/libknet/links_acl_ip.h
-+@@ -10,6 +10,7 @@
-+ #define __KNET_LINKS_ACL_IP_H__
-+ 
-+ #include "internals.h"
-++#include "links_acl.h"
-+ 
-+ int ipcheck_validate(struct acl_match_entry **match_entry_head, struct sockaddr_storage *checkip);
-+ 
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index 34bcce3..32763de 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -28,7 +28,7 @@ int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 			err = 0;
-+ 			break;
-+ 		case IP_PROTO:
-+-			err = ipcheck_addip(&knet_h->knet_transport_fd_tracker[sock].match_entry,
-++			err = ipcheck_addip((struct acl_match_entry **)&knet_h->knet_transport_fd_tracker[sock].match_entry,
-+ 					    ip1, ip2, type, acceptreject);
-+ 			break;
-+ 		default:
-+@@ -48,7 +48,7 @@ int check_rm(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 			err = 0;
-+ 			break;
-+ 		case IP_PROTO:
-+-			err = ipcheck_rmip(&knet_h->knet_transport_fd_tracker[sock].match_entry,
-++			err = ipcheck_rmip((struct acl_match_entry **)&knet_h->knet_transport_fd_tracker[sock].match_entry,
-+ 					   ip1, ip2, type, acceptreject);
-+ 			break;
-+ 		default:
-+@@ -64,7 +64,7 @@ void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport)
-+ 			return;
-+ 			break;
-+ 		case IP_PROTO:
-+-			ipcheck_rmall(&knet_h->knet_transport_fd_tracker[sock].match_entry);
-++			ipcheck_rmall((struct acl_match_entry **)&knet_h->knet_transport_fd_tracker[sock].match_entry);
-+ 			break;
-+ 		default:
-+ 			break;
-+@@ -83,7 +83,7 @@ int _link_add_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-+ 			err = 0;
-+ 			break;
-+ 		case IP_PROTO:
-+-			err = ipcheck_addip(&knet_h->knet_transport_fd_tracker[kh_link->outsock].match_entry,
-++			err = ipcheck_addip((struct acl_match_entry **)&knet_h->knet_transport_fd_tracker[kh_link->outsock].match_entry,
-+ 					    &kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+ 			break;
-+ 		default:
-+@@ -105,7 +105,7 @@ int _link_rm_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-+ 			err = 0;
-+ 			break;
-+ 		case IP_PROTO:
-+-			err = ipcheck_rmip(&knet_h->knet_transport_fd_tracker[kh_link->outsock].match_entry,
-++			err = ipcheck_rmip((struct acl_match_entry **)&knet_h->knet_transport_fd_tracker[kh_link->outsock].match_entry,
-+ 					   &kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+ 			break;
-+ 		default:
-+@@ -125,7 +125,7 @@ int _generic_filter_packet_by_acl(knet_handle_t knet_h, int sockfd, struct socka
-+ 			return 1;
-+ 			break;
-+ 		case IP_PROTO:
-+-			return ipcheck_validate(&knet_h->knet_transport_fd_tracker[sockfd].match_entry, checkip);
-++			return ipcheck_validate((struct acl_match_entry **)&knet_h->knet_transport_fd_tracker[sockfd].match_entry, checkip);
-+ 			break;
-+ 		default:
-+ 			break;
-+diff --git a/libknet/links_acl_ip.c b/libknet/links_acl_ip.c
-+index edc3ae1..2aef14b 100644
-+--- a/libknet/links_acl_ip.c
-++++ b/libknet/links_acl_ip.c
-+@@ -15,6 +15,7 @@
-+ #include "internals.h"
-+ #include "logging.h"
-+ #include "transports.h"
-++#include "links_acl.h"
-+ #include "links_acl_ip.h"
-+ 
-+ /*
-diff --git a/debian/patches/access-lists-move-all-acl-wrappers-to-links_acl-and-split.patch b/debian/patches/access-lists-move-all-acl-wrappers-to-links_acl-and-split.patch
-new file mode 100644
-index 0000000..6f3b9d3
---- /dev/null
-+++ b/debian/patches/access-lists-move-all-acl-wrappers-to-links_acl-and-split.patch
-@@ -0,0 +1,1025 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Fri, 22 Feb 2019 04:53:23 +0100
-+Subject: [access lists] move all acl wrappers to links_acl* and split
-+ links_acl_ip to their own files
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 0cb8e8bab46b30487a4821004ee757ee8f9eb91e)
-+---
-+ libknet/Makefile.am           |   2 +
-+ libknet/tests/Makefile.am     |  12 +-
-+ libknet/links_acl.h           |  20 +--
-+ libknet/links_acl_ip.h        |  25 ++++
-+ libknet/links.c               |  53 +------
-+ libknet/links_acl.c           | 322 ++++++++++++------------------------------
-+ libknet/links_acl_ip.c        | 277 ++++++++++++++++++++++++++++++++++++
-+ libknet/tests/int_links_acl.c |   9 +-
-+ libknet/threads_rx.c          |  25 +---
-+ libknet/transport_sctp.c      |  24 ++--
-+ 10 files changed, 438 insertions(+), 331 deletions(-)
-+ create mode 100644 libknet/links_acl_ip.h
-+ create mode 100644 libknet/links_acl_ip.c
-+
-+diff --git a/libknet/Makefile.am b/libknet/Makefile.am
-+index 4ea42d9..b60427c 100644
-+--- a/libknet/Makefile.am
-++++ b/libknet/Makefile.am
-+@@ -32,6 +32,7 @@ sources			= \
-+ 			  host.c \
-+ 			  links.c \
-+ 			  links_acl.c \
-++			  links_acl_ip.c \
-+ 			  logging.c \
-+ 			  netutils.c \
-+ 			  threads_common.c \
-+@@ -63,6 +64,7 @@ noinst_HEADERS		= \
-+ 			  internals.h \
-+ 			  links.h \
-+ 			  links_acl.h \
-++			  links_acl_ip.h \
-+ 			  logging.h \
-+ 			  netutils.h \
-+ 			  onwire.h \
-+diff --git a/libknet/tests/Makefile.am b/libknet/tests/Makefile.am
-+index f74cb04..d46553a 100644
-+--- a/libknet/tests/Makefile.am
-++++ b/libknet/tests/Makefile.am
-+@@ -68,7 +68,17 @@ check-api-test-coverage:
-+ pckt_test_SOURCES	= pckt_test.c
-+ 
-+ int_links_acl_test_SOURCES = int_links_acl.c \
-+-			     ../links_acl.c
-++			     ../common.c \
-++			     ../logging.c \
-++			     ../netutils.c \
-++			     ../threads_common.c \
-++			     ../transports.c \
-++			     ../transport_common.c \
-++			     ../transport_loopback.c \
-++			     ../transport_sctp.c \
-++			     ../transport_udp.c \
-++			     ../links_acl.c \
-++			     ../links_acl_ip.c
-+ 
-+ int_timediff_test_SOURCES = int_timediff.c
-+ 
-+diff --git a/libknet/links_acl.h b/libknet/links_acl.h
-+index f4713d6..9a20754 100644
-+--- a/libknet/links_acl.h
-++++ b/libknet/links_acl.h
-+@@ -11,15 +11,15 @@
-+ 
-+ #include "internals.h"
-+ 
-+-int ipcheck_validate(struct acl_match_entry **match_entry_head, struct sockaddr_storage *checkip);
-++int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-++	      struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++	      check_type_t type, check_acceptreject_t acceptreject);
-++int check_rm(knet_handle_t knet_h, int sock, uint8_t transport,
-++	     struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++	     check_type_t type, check_acceptreject_t acceptreject);
-++void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport);
-++int _link_add_default_acl(knet_handle_t knet_h, struct knet_link *kh_link);
-++int _link_rm_default_acl(knet_handle_t knet_h, struct knet_link *kh_link);
-++int _generic_filter_packet_by_acl(knet_handle_t knet_h, int sockfd, struct sockaddr_storage *checkip);
-+ 
-+-int ipcheck_addip(struct acl_match_entry **match_entry_head,
-+-		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+-		  check_type_t type, check_acceptreject_t acceptreject);
-+-
-+-int ipcheck_rmip(struct acl_match_entry **match_entry_head,
-+-		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+-		  check_type_t type, check_acceptreject_t acceptreject);
-+-
-+-void check_rmall(struct acl_match_entry **match_entry_head);
-+ #endif
-+diff --git a/libknet/links_acl_ip.h b/libknet/links_acl_ip.h
-+new file mode 100644
-+index 0000000..575b5ff
-+--- /dev/null
-++++ b/libknet/links_acl_ip.h
-+@@ -0,0 +1,25 @@
-++/*
-++ * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ *
-++ * Author: Christine Caulfield <ccaulfie at redhat.com>
-++ *
-++ * This software licensed under GPL-2.0+, LGPL-2.0+
-++ */
-++
-++#ifndef __KNET_LINKS_ACL_IP_H__
-++#define __KNET_LINKS_ACL_IP_H__
-++
-++#include "internals.h"
-++
-++int ipcheck_validate(struct acl_match_entry **match_entry_head, struct sockaddr_storage *checkip);
-++
-++int ipcheck_addip(struct acl_match_entry **match_entry_head,
-++		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		  check_type_t type, check_acceptreject_t acceptreject);
-++
-++int ipcheck_rmip(struct acl_match_entry **match_entry_head,
-++		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		  check_type_t type, check_acceptreject_t acceptreject);
-++
-++void ipcheck_rmall(struct acl_match_entry **match_entry_head);
-++#endif
-+diff --git a/libknet/links.c b/libknet/links.c
-+index 85b50e5..07ef26e 100644
-+--- a/libknet/links.c
-++++ b/libknet/links.c
-+@@ -22,55 +22,6 @@
-+ #include "threads_common.h"
-+ #include "links_acl.h"
-+ 
-+-static void _link_del_all_acl(knet_handle_t knet_h, int sock)
-+-{
-+-	check_rmall(&knet_h->knet_transport_fd_tracker[sock].match_entry);
-+-}
-+-
-+-static int _link_add_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-+-{
-+-	int err = -1;
-+-
-+-	switch(transport_get_proto(knet_h, kh_link->transport_type)) {
-+-		case LOOPBACK:
-+-			/*
-+-			 * loopback does not require access lists
-+-			 */
-+-			err = 0;
-+-			break;
-+-		case IP_PROTO:
-+-			err = ipcheck_addip(&knet_h->knet_transport_fd_tracker[kh_link->outsock].match_entry,
-+-					    &kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+-			break;
-+-		default:
-+-			break;
-+-	}
-+-
-+-	return err;
-+-}
-+-
-+-static int _link_rm_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-+-{
-+-	int err = -1;
-+-
-+-	switch(transport_get_proto(knet_h, kh_link->transport_type)) {
-+-		case LOOPBACK:
-+-			/*
-+-			 * loopback does not require access lists
-+-			 */
-+-			err = 0;
-+-			break;
-+-		case IP_PROTO:
-+-			err = ipcheck_rmip(&knet_h->knet_transport_fd_tracker[kh_link->outsock].match_entry,
-+-					   &kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+-			break;
-+-		default:
-+-			break;
-+-	}
-+-
-+-	return err;
-+-}
-+-
-+ int _link_updown(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_id,
-+ 		 unsigned int enabled, unsigned int connected)
-+ {
-+@@ -420,6 +371,7 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+ 	struct knet_host *host;
-+ 	struct knet_link *link;
-+ 	int sock;
-++	uint8_t transport;
-+ 
-+ 	if (!knet_h) {
-+ 		errno = EINVAL;
-+@@ -488,6 +440,7 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+ 	 * will clear link info during clear_config.
-+ 	 */
-+ 	sock = link->outsock;
-++	transport = link->transport_type;
-+ 
-+ 	if ((transport_link_clear_config(knet_h, link) < 0)  &&
-+ 	    (errno != EBUSY)) {
-+@@ -502,7 +455,7 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+ 	 */
-+ 	if ((transport_get_acl_type(knet_h, link->transport_type) == USE_GENERIC_ACL) &&
-+ 	    (knet_h->knet_transport_fd_tracker[sock].transport == KNET_MAX_TRANSPORTS)) {
-+-		_link_del_all_acl(knet_h, sock);
-++		check_rmall(knet_h, sock, transport);
-+ 	}
-+ 
-+ 	memset(link, 0, sizeof(struct knet_link));
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index 854f273..34bcce3 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -6,8 +6,6 @@
-+  * This software licensed under GPL-2.0+, LGPL-2.0+
-+  */
-+ 
-+-#include <sys/socket.h>
-+-#include <netinet/in.h>
-+ #include <stdint.h>
-+ #include <string.h>
-+ #include <stdlib.h>
-+@@ -15,265 +13,125 @@
-+ #include "internals.h"
-+ #include "logging.h"
-+ #include "transports.h"
-++#include "transport_common.h"
-+ #include "links_acl.h"
-++#include "links_acl_ip.h"
-+ 
-+-/*
-+- * s6_addr32 is not defined in BSD userland, only kernel.
-+- * definition is the same as linux and it works fine for
-+- * what we need.
-+- */
-+-#ifndef s6_addr32
-+-#define s6_addr32 __u6_addr.__u6_addr32
-+-#endif
-+-
-+-/*
-+- * IPv4 See if the address we have matches the current match entry
-+- */
-+-
-+-static int ip_matches_v4(struct sockaddr_storage *checkip, struct acl_match_entry *match_entry)
-+-{
-+-	struct sockaddr_in *ip_to_check;
-+-	struct sockaddr_in *match1;
-+-	struct sockaddr_in *match2;
-+-
-+-	ip_to_check = (struct sockaddr_in *)checkip;
-+-	match1 = (struct sockaddr_in *)&match_entry->addr1;
-+-	match2 = (struct sockaddr_in *)&match_entry->addr2;
-+-
-+-	switch(match_entry->type) {
-+-	case CHECK_TYPE_ADDRESS:
-+-		if (ip_to_check->sin_addr.s_addr == match1->sin_addr.s_addr)
-+-			return 1;
-+-		break;
-+-	case CHECK_TYPE_MASK:
-+-		if ((ip_to_check->sin_addr.s_addr & match2->sin_addr.s_addr) ==
-+-		    match1->sin_addr.s_addr)
-+-			return 1;
-+-		break;
-+-	case CHECK_TYPE_RANGE:
-+-		if ((ntohl(ip_to_check->sin_addr.s_addr) >= ntohl(match1->sin_addr.s_addr)) &&
-+-		    (ntohl(ip_to_check->sin_addr.s_addr) <= ntohl(match2->sin_addr.s_addr)))
-+-			return 1;
-+-		break;
-+-
-+-	}
-+-	return 0;
-+-}
-+-
-+-/*
-+- * Compare two IPv6 addresses
-+- */
-+-
-+-static int ip6addr_cmp(struct in6_addr *a, struct in6_addr *b)
-++int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-++	      struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++	      check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+-	uint64_t a_high, a_low;
-+-	uint64_t b_high, b_low;
-++	int err = -1;
-+ 
-+-	/* Not sure why '&' doesn't work below, so I used '+' instead which is effectively
-+-	   the same thing because the bottom 32bits are always zero and the value unsigned */
-+-	a_high = ((uint64_t)htonl(a->s6_addr32[0]) << 32) + (uint64_t)htonl(a->s6_addr32[1]);
-+-	a_low  = ((uint64_t)htonl(a->s6_addr32[2]) << 32) + (uint64_t)htonl(a->s6_addr32[3]);
-+-
-+-	b_high = ((uint64_t)htonl(b->s6_addr32[0]) << 32) + (uint64_t)htonl(b->s6_addr32[1]);
-+-	b_low  = ((uint64_t)htonl(b->s6_addr32[2]) << 32) + (uint64_t)htonl(b->s6_addr32[3]);
-+-
-+-	if (a_high > b_high)
-+-		return 1;
-+-	if (a_high < b_high)
-+-		return -1;
-+-
-+-	if (a_low > b_low)
-+-		return 1;
-+-	if (a_low < b_low)
-+-		return -1;
-+-
-+-	return 0;
-+-}
-+-
-+-/*
-+- * IPv6 See if the address we have matches the current match entry
-+- */
-+-
-+-static int ip_matches_v6(struct sockaddr_storage *checkip, struct acl_match_entry *match_entry)
-+-{
-+-	struct sockaddr_in6 *ip_to_check;
-+-	struct sockaddr_in6 *match1;
-+-	struct sockaddr_in6 *match2;
-+-	int i;
-+-
-+-	ip_to_check = (struct sockaddr_in6 *)checkip;
-+-	match1 = (struct sockaddr_in6 *)&match_entry->addr1;
-+-	match2 = (struct sockaddr_in6 *)&match_entry->addr2;
-+-
-+-	switch(match_entry->type) {
-+-	case CHECK_TYPE_ADDRESS:
-+-		if (!memcmp(ip_to_check->sin6_addr.s6_addr32, match1->sin6_addr.s6_addr32, sizeof(struct in6_addr)))
-+-			return 1;
-+-		break;
-+-
-+-	case CHECK_TYPE_MASK:
-+-		/*
-+-		 * Note that this little loop will quit early if there is a non-match so the
-+-		 * comparison might look backwards compared to the IPv4 one
-+-		 */
-+-		for (i=sizeof(struct in6_addr)/4-1; i>=0; i--) {
-+-			if ((ip_to_check->sin6_addr.s6_addr32[i] & match2->sin6_addr.s6_addr32[i]) !=
-+-			    match1->sin6_addr.s6_addr32[i])
-+-				return 0;
-+-		}
-+-		return 1;
-+-	case CHECK_TYPE_RANGE:
-+-		if ((ip6addr_cmp(&ip_to_check->sin6_addr, &match1->sin6_addr) >= 0) &&
-+-		    (ip6addr_cmp(&ip_to_check->sin6_addr, &match2->sin6_addr) <= 0))
-+-			return 1;
-+-		break;
-++	switch(transport_get_proto(knet_h, transport)) {
-++		case LOOPBACK:
-++			err = 0;
-++			break;
-++		case IP_PROTO:
-++			err = ipcheck_addip(&knet_h->knet_transport_fd_tracker[sock].match_entry,
-++					    ip1, ip2, type, acceptreject);
-++			break;
-++		default:
-++			break;
-+ 	}
-+-	return 0;
-++	return err;
-+ }
-+ 
-+-
-+-int ipcheck_validate(struct acl_match_entry **match_entry_head, struct sockaddr_storage *checkip)
-++int check_rm(knet_handle_t knet_h, int sock, uint8_t transport,
-++	     struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++	     check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+-	struct acl_match_entry *match_entry = *match_entry_head;
-+-	int (*match_fn)(struct sockaddr_storage *checkip, struct acl_match_entry *match_entry);
-++	int err = -1;
-+ 
-+-	if (checkip->ss_family == AF_INET){
-+-		match_fn = ip_matches_v4;
-+-	} else {
-+-		match_fn = ip_matches_v6;
-+-	}
-+-
-+-	while (match_entry) {
-+-		if (match_fn(checkip, match_entry)) {
-+-			if (match_entry->acceptreject == CHECK_ACCEPT)
-+-				return 1;
-+-			else
-+-				return 0;
-+-		}
-+-		match_entry = match_entry->next;
-++	switch(transport_get_proto(knet_h, transport)) {
-++		case LOOPBACK:
-++			err = 0;
-++			break;
-++		case IP_PROTO:
-++			err = ipcheck_rmip(&knet_h->knet_transport_fd_tracker[sock].match_entry,
-++					   ip1, ip2, type, acceptreject);
-++			break;
-++		default:
-++			break;
-+ 	}
-+-	return 0; /* Default reject */
-++	return err;
-+ }
-+ 
-+-/*
-+- * Routines to manuipulate access lists
-+- */
-+-
-+-void check_rmall(struct acl_match_entry **match_entry_head)
-++void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport)
-+ {
-+-	struct acl_match_entry *next_match_entry;
-+-	struct acl_match_entry *match_entry = *match_entry_head;
-+-
-+-	while (match_entry) {
-+-		next_match_entry = match_entry->next;
-+-		free(match_entry);
-+-		match_entry = next_match_entry;
-++	switch(transport_get_proto(knet_h, transport)) {
-++		case LOOPBACK:
-++			return;
-++			break;
-++		case IP_PROTO:
-++			ipcheck_rmall(&knet_h->knet_transport_fd_tracker[sock].match_entry);
-++			break;
-++		default:
-++			break;
-+ 	}
-+-	*match_entry_head = NULL;
-+ }
-+ 
-+-static struct acl_match_entry *ipcheck_findmatch(struct acl_match_entry **match_entry_head,
-+-						 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+-						 check_type_t type, check_acceptreject_t acceptreject)
-++int _link_add_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-+ {
-+-	struct acl_match_entry *match_entry = *match_entry_head;
-+-
-+-	while (match_entry) {
-+-		if ((!memcmp(&match_entry->addr1, ip1, sizeof(struct sockaddr_storage))) &&
-+-		    (!memcmp(&match_entry->addr2, ip2, sizeof(struct sockaddr_storage))) &&
-+-		    (match_entry->type == type) &&
-+-		    (match_entry->acceptreject == acceptreject)) {
-+-			return match_entry;
-+-		}
-+-		match_entry = match_entry->next;
-++	int err = -1;
-++
-++	switch(transport_get_proto(knet_h, kh_link->transport_type)) {
-++		case LOOPBACK:
-++			/*
-++			 * loopback does not require access lists
-++			 */
-++			err = 0;
-++			break;
-++		case IP_PROTO:
-++			err = ipcheck_addip(&knet_h->knet_transport_fd_tracker[kh_link->outsock].match_entry,
-++					    &kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-++			break;
-++		default:
-++			break;
-+ 	}
-+ 
-+-	return NULL;
-++	return err;
-+ }
-+ 
-+-int ipcheck_rmip(struct acl_match_entry **match_entry_head,
-+-		 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+-		 check_type_t type, check_acceptreject_t acceptreject)
-++int _link_rm_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-+ {
-+-	struct acl_match_entry *next_match_entry = NULL;
-+-	struct acl_match_entry *rm_match_entry;
-+-	struct acl_match_entry *match_entry = *match_entry_head;
-+-
-+-	rm_match_entry = ipcheck_findmatch(match_entry_head, ip1, ip2, type, acceptreject);
-+-	if (!rm_match_entry) {
-+-		return -1;
-+-	}
-+-
-+-	while (match_entry) {
-+-		next_match_entry = match_entry->next;
-+-		/*
-+-		 * we are removing the list head, be careful
-+-		 */
-+-		if (rm_match_entry == match_entry) {
-+-			*match_entry_head = next_match_entry;
-+-			free(match_entry);
-++	int err = -1;
-++
-++	switch(transport_get_proto(knet_h, kh_link->transport_type)) {
-++		case LOOPBACK:
-++			/*
-++			 * loopback does not require access lists
-++			 */
-++			err = 0;
-++			break;
-++		case IP_PROTO:
-++			err = ipcheck_rmip(&knet_h->knet_transport_fd_tracker[kh_link->outsock].match_entry,
-++					   &kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+ 			break;
-+-		}
-+-		/*
-+-		 * the next one is the one we need to remove
-+-		 */
-+-		if (rm_match_entry == next_match_entry) {
-+-			match_entry->next = next_match_entry->next;
-+-			free(next_match_entry);
-++		default:
-+ 			break;
-+-		}
-+-		match_entry = next_match_entry;
-+ 	}
-+ 
-+-	return 0;
-++	return err;
-+ }
-+ 
-+-int ipcheck_addip(struct acl_match_entry **match_entry_head,
-+-		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+-		  check_type_t type, check_acceptreject_t acceptreject)
-++/*
-++ *  * return 0 to reject and 1 to accept a packet
-++ *   */
-++int _generic_filter_packet_by_acl(knet_handle_t knet_h, int sockfd, struct sockaddr_storage *checkip)
-+ {
-+-	struct acl_match_entry *new_match_entry;
-+-	struct acl_match_entry *match_entry = *match_entry_head;
-+-
-+-	if (!ip1) {
-+-		return -1;
-+-	}
-+-
-+-	if ((type != CHECK_TYPE_ADDRESS) && (!ip2)) {
-+-		return -1;
-+-	}
-+-
-+-	if (type == CHECK_TYPE_RANGE &&
-+-	    (ip1->ss_family != ip2->ss_family))
-+-		return -1;
-+-
-+-	if (ipcheck_findmatch(match_entry_head, ip1, ip2, type, acceptreject) != NULL) {
-+-		return -1;
-+-	}
-+-
-+-	new_match_entry = malloc(sizeof(struct acl_match_entry));
-+-	if (!new_match_entry)
-+-		return -1;
-+-
-+-	memmove(&new_match_entry->addr1, ip1, sizeof(struct sockaddr_storage));
-+-	memmove(&new_match_entry->addr2, ip2, sizeof(struct sockaddr_storage));
-+-	new_match_entry->type = type;
-+-	new_match_entry->acceptreject = acceptreject;
-+-	new_match_entry->next = NULL;
-+-
-+-	if (match_entry) {
-+-		/* Find the end of the list */
-+-		/* is this OK, or should we use a doubly-linked list or bulk-load API call? */
-+-		while (match_entry->next) {
-+-			match_entry = match_entry->next;
-+-		}
-+-		match_entry->next = new_match_entry;
-+-	} else {
-+-		/*
-+-		 * first entry in the list
-+-		 */
-+-		*match_entry_head = new_match_entry;
-++	switch(transport_get_proto(knet_h, knet_h->knet_transport_fd_tracker[sockfd].transport)) {
-++		case LOOPBACK:
-++			return 1;
-++			break;
-++		case IP_PROTO:
-++			return ipcheck_validate(&knet_h->knet_transport_fd_tracker[sockfd].match_entry, checkip);
-++			break;
-++		default:
-++			break;
-+ 	}
-+-
-++	/*
-++	 * reject by default
-++	 */
-+ 	return 0;
-+ }
-+diff --git a/libknet/links_acl_ip.c b/libknet/links_acl_ip.c
-+new file mode 100644
-+index 0000000..edc3ae1
-+--- /dev/null
-++++ b/libknet/links_acl_ip.c
-+@@ -0,0 +1,277 @@
-++/*
-++ * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ *
-++ * Author: Christine Caulfield <ccaulfie at redhat.com>
-++ *
-++ * This software licensed under GPL-2.0+, LGPL-2.0+
-++ */
-++
-++#include <sys/socket.h>
-++#include <netinet/in.h>
-++#include <stdint.h>
-++#include <string.h>
-++#include <stdlib.h>
-++
-++#include "internals.h"
-++#include "logging.h"
-++#include "transports.h"
-++#include "links_acl_ip.h"
-++
-++/*
-++ * s6_addr32 is not defined in BSD userland, only kernel.
-++ * definition is the same as linux and it works fine for
-++ * what we need.
-++ */
-++#ifndef s6_addr32
-++#define s6_addr32 __u6_addr.__u6_addr32
-++#endif
-++
-++/*
-++ * IPv4 See if the address we have matches the current match entry
-++ */
-++
-++static int ip_matches_v4(struct sockaddr_storage *checkip, struct acl_match_entry *match_entry)
-++{
-++	struct sockaddr_in *ip_to_check;
-++	struct sockaddr_in *match1;
-++	struct sockaddr_in *match2;
-++
-++	ip_to_check = (struct sockaddr_in *)checkip;
-++	match1 = (struct sockaddr_in *)&match_entry->addr1;
-++	match2 = (struct sockaddr_in *)&match_entry->addr2;
-++
-++	switch(match_entry->type) {
-++	case CHECK_TYPE_ADDRESS:
-++		if (ip_to_check->sin_addr.s_addr == match1->sin_addr.s_addr)
-++			return 1;
-++		break;
-++	case CHECK_TYPE_MASK:
-++		if ((ip_to_check->sin_addr.s_addr & match2->sin_addr.s_addr) ==
-++		    match1->sin_addr.s_addr)
-++			return 1;
-++		break;
-++	case CHECK_TYPE_RANGE:
-++		if ((ntohl(ip_to_check->sin_addr.s_addr) >= ntohl(match1->sin_addr.s_addr)) &&
-++		    (ntohl(ip_to_check->sin_addr.s_addr) <= ntohl(match2->sin_addr.s_addr)))
-++			return 1;
-++		break;
-++
-++	}
-++	return 0;
-++}
-++
-++/*
-++ * Compare two IPv6 addresses
-++ */
-++
-++static int ip6addr_cmp(struct in6_addr *a, struct in6_addr *b)
-++{
-++	uint64_t a_high, a_low;
-++	uint64_t b_high, b_low;
-++
-++	a_high = ((uint64_t)htonl(a->s6_addr32[0]) << 32) | (uint64_t)htonl(a->s6_addr32[1]);
-++	a_low  = ((uint64_t)htonl(a->s6_addr32[2]) << 32) | (uint64_t)htonl(a->s6_addr32[3]);
-++
-++	b_high = ((uint64_t)htonl(b->s6_addr32[0]) << 32) | (uint64_t)htonl(b->s6_addr32[1]);
-++	b_low  = ((uint64_t)htonl(b->s6_addr32[2]) << 32) | (uint64_t)htonl(b->s6_addr32[3]);
-++
-++	if (a_high > b_high)
-++		return 1;
-++	if (a_high < b_high)
-++		return -1;
-++
-++	if (a_low > b_low)
-++		return 1;
-++	if (a_low < b_low)
-++		return -1;
-++
-++	return 0;
-++}
-++
-++/*
-++ * IPv6 See if the address we have matches the current match entry
-++ */
-++
-++static int ip_matches_v6(struct sockaddr_storage *checkip, struct acl_match_entry *match_entry)
-++{
-++	struct sockaddr_in6 *ip_to_check;
-++	struct sockaddr_in6 *match1;
-++	struct sockaddr_in6 *match2;
-++	int i;
-++
-++	ip_to_check = (struct sockaddr_in6 *)checkip;
-++	match1 = (struct sockaddr_in6 *)&match_entry->addr1;
-++	match2 = (struct sockaddr_in6 *)&match_entry->addr2;
-++
-++	switch(match_entry->type) {
-++	case CHECK_TYPE_ADDRESS:
-++		if (!memcmp(ip_to_check->sin6_addr.s6_addr32, match1->sin6_addr.s6_addr32, sizeof(struct in6_addr)))
-++			return 1;
-++		break;
-++
-++	case CHECK_TYPE_MASK:
-++		/*
-++		 * Note that this little loop will quit early if there is a non-match so the
-++		 * comparison might look backwards compared to the IPv4 one
-++		 */
-++		for (i=sizeof(struct in6_addr)/4-1; i>=0; i--) {
-++			if ((ip_to_check->sin6_addr.s6_addr32[i] & match2->sin6_addr.s6_addr32[i]) !=
-++			    match1->sin6_addr.s6_addr32[i])
-++				return 0;
-++		}
-++		return 1;
-++	case CHECK_TYPE_RANGE:
-++		if ((ip6addr_cmp(&ip_to_check->sin6_addr, &match1->sin6_addr) >= 0) &&
-++		    (ip6addr_cmp(&ip_to_check->sin6_addr, &match2->sin6_addr) <= 0))
-++			return 1;
-++		break;
-++	}
-++	return 0;
-++}
-++
-++
-++int ipcheck_validate(struct acl_match_entry **match_entry_head, struct sockaddr_storage *checkip)
-++{
-++	struct acl_match_entry *match_entry = *match_entry_head;
-++	int (*match_fn)(struct sockaddr_storage *checkip, struct acl_match_entry *match_entry);
-++
-++	if (checkip->ss_family == AF_INET){
-++		match_fn = ip_matches_v4;
-++	} else {
-++		match_fn = ip_matches_v6;
-++	}
-++
-++	while (match_entry) {
-++		if (match_fn(checkip, match_entry)) {
-++			if (match_entry->acceptreject == CHECK_ACCEPT)
-++				return 1;
-++			else
-++				return 0;
-++		}
-++		match_entry = match_entry->next;
-++	}
-++	return 0; /* Default reject */
-++}
-++
-++/*
-++ * Routines to manuipulate access lists
-++ */
-++
-++void ipcheck_rmall(struct acl_match_entry **match_entry_head)
-++{
-++	struct acl_match_entry *next_match_entry;
-++	struct acl_match_entry *match_entry = *match_entry_head;
-++
-++	while (match_entry) {
-++		next_match_entry = match_entry->next;
-++		free(match_entry);
-++		match_entry = next_match_entry;
-++	}
-++	*match_entry_head = NULL;
-++}
-++
-++static struct acl_match_entry *ipcheck_findmatch(struct acl_match_entry **match_entry_head,
-++						 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++						 check_type_t type, check_acceptreject_t acceptreject)
-++{
-++	struct acl_match_entry *match_entry = *match_entry_head;
-++
-++	while (match_entry) {
-++		if ((!memcmp(&match_entry->addr1, ip1, sizeof(struct sockaddr_storage))) &&
-++		    (!memcmp(&match_entry->addr2, ip2, sizeof(struct sockaddr_storage))) &&
-++		    (match_entry->type == type) &&
-++		    (match_entry->acceptreject == acceptreject)) {
-++			return match_entry;
-++		}
-++		match_entry = match_entry->next;
-++	}
-++
-++	return NULL;
-++}
-++
-++int ipcheck_rmip(struct acl_match_entry **match_entry_head,
-++		 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		 check_type_t type, check_acceptreject_t acceptreject)
-++{
-++	struct acl_match_entry *next_match_entry = NULL;
-++	struct acl_match_entry *rm_match_entry;
-++	struct acl_match_entry *match_entry = *match_entry_head;
-++
-++	rm_match_entry = ipcheck_findmatch(match_entry_head, ip1, ip2, type, acceptreject);
-++	if (!rm_match_entry) {
-++		return -1;
-++	}
-++
-++	while (match_entry) {
-++		next_match_entry = match_entry->next;
-++		/*
-++		 * we are removing the list head, be careful
-++		 */
-++		if (rm_match_entry == match_entry) {
-++			*match_entry_head = next_match_entry;
-++			free(match_entry);
-++			break;
-++		}
-++		/*
-++		 * the next one is the one we need to remove
-++		 */
-++		if (rm_match_entry == next_match_entry) {
-++			match_entry->next = next_match_entry->next;
-++			free(next_match_entry);
-++			break;
-++		}
-++		match_entry = next_match_entry;
-++	}
-++
-++	return 0;
-++}
-++
-++int ipcheck_addip(struct acl_match_entry **match_entry_head,
-++		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		  check_type_t type, check_acceptreject_t acceptreject)
-++{
-++	struct acl_match_entry *new_match_entry;
-++	struct acl_match_entry *match_entry = *match_entry_head;
-++
-++	if (!ip1) {
-++		return -1;
-++	}
-++
-++	if ((type != CHECK_TYPE_ADDRESS) && (!ip2)) {
-++		return -1;
-++	}
-++
-++	if (type == CHECK_TYPE_RANGE &&
-++	    (ip1->ss_family != ip2->ss_family))
-++		return -1;
-++
-++	if (ipcheck_findmatch(match_entry_head, ip1, ip2, type, acceptreject) != NULL) {
-++		return -1;
-++	}
-++
-++	new_match_entry = malloc(sizeof(struct acl_match_entry));
-++	if (!new_match_entry)
-++		return -1;
-++
-++	memmove(&new_match_entry->addr1, ip1, sizeof(struct sockaddr_storage));
-++	memmove(&new_match_entry->addr2, ip2, sizeof(struct sockaddr_storage));
-++	new_match_entry->type = type;
-++	new_match_entry->acceptreject = acceptreject;
-++	new_match_entry->next = NULL;
-++
-++	if (match_entry) {
-++		/* Find the end of the list */
-++		/* is this OK, or should we use a doubly-linked list or bulk-load API call? */
-++		while (match_entry->next) {
-++			match_entry = match_entry->next;
-++		}
-++		match_entry->next = new_match_entry;
-++	} else {
-++		/*
-++		 * first entry in the list
-++		 */
-++		*match_entry_head = new_match_entry;
-++	}
-++
-++	return 0;
-++}
-+diff --git a/libknet/tests/int_links_acl.c b/libknet/tests/int_links_acl.c
-+index 133cd5a..8d9f4e0 100644
-+--- a/libknet/tests/int_links_acl.c
-++++ b/libknet/tests/int_links_acl.c
-+@@ -16,6 +16,7 @@
-+ 
-+ #include "internals.h"
-+ #include "links_acl.h"
-++#include "links_acl_ip.h"
-+ 
-+ static struct acl_match_entry *match_entry_v4;
-+ static struct acl_match_entry *match_entry_v6;
-+@@ -105,8 +106,8 @@ static int load_file(void)
-+ 	struct sockaddr_storage addr1;
-+ 	struct sockaddr_storage addr2;
-+ 
-+-	check_rmall(&match_entry_v4);
-+-	check_rmall(&match_entry_v6);
-++	ipcheck_rmall(&match_entry_v4);
-++	ipcheck_rmall(&match_entry_v6);
-+ 
-+ 	filterfile = fopen("int_links_acl.txt", "r");
-+ 	if (!filterfile) {
-+@@ -202,7 +203,7 @@ int main(int argc, char *argv[])
-+ 		}
-+ 	}
-+ 
-+-	check_rmall(&match_entry_v4);
-+-	check_rmall(&match_entry_v6);
-++	ipcheck_rmall(&match_entry_v4);
-++	ipcheck_rmall(&match_entry_v6);
-+ 	return 0;
-+ }
-+diff --git a/libknet/threads_rx.c b/libknet/threads_rx.c
-+index 833938d..06a0168 100644
-+--- a/libknet/threads_rx.c
-++++ b/libknet/threads_rx.c
-+@@ -721,27 +721,6 @@ out_pmtud:
-+ 	}
-+ }
-+ 
-+-/*
-+- * return 0 to reject and 1 to accept a packet
-+- */
-+-static int _generic_filter_packet_by_acl(knet_handle_t knet_h, int sockfd, const struct knet_mmsghdr *msg)
-+-{
-+-	switch(transport_get_proto(knet_h, knet_h->knet_transport_fd_tracker[sockfd].transport)) {
-+-		case LOOPBACK:
-+-			return 1;
-+-			break;
-+-		case IP_PROTO:
-+-			return ipcheck_validate(&knet_h->knet_transport_fd_tracker[sockfd].match_entry, msg->msg_hdr.msg_name);
-+-			break;
-+-		default:
-+-			break;
-+-	}
-+-	/*
-+-	 * reject by default
-+-	 */
-+-	return 0;
-+-}
-+-
-+ static void _handle_recv_from_links(knet_handle_t knet_h, int sockfd, struct knet_mmsghdr *msg)
-+ {
-+ 	int err, savederrno;
-+@@ -829,13 +808,13 @@ static void _handle_recv_from_links(knet_handle_t knet_h, int sockfd, struct kne
-+ 				 */
-+ 				if ((knet_h->use_access_lists) &&
-+ 				    (transport_get_acl_type(knet_h, transport) == USE_GENERIC_ACL)) {
-+-					if (!_generic_filter_packet_by_acl(knet_h, sockfd, &msg[i])) {
-++					if (!_generic_filter_packet_by_acl(knet_h, sockfd, msg[i].msg_hdr.msg_name)) {
-+ 						char src_ipaddr[KNET_MAX_HOST_LEN];
-+ 						char src_port[KNET_MAX_PORT_LEN];
-+ 
-+ 						memset(src_ipaddr, 0, KNET_MAX_HOST_LEN);
-+ 						memset(src_port, 0, KNET_MAX_PORT_LEN);
-+-						knet_addrtostr(msg->msg_hdr.msg_name, sockaddr_len(msg->msg_hdr.msg_name),
-++						knet_addrtostr(msg[i].msg_hdr.msg_name, sockaddr_len(msg[i].msg_hdr.msg_name),
-+ 							       src_ipaddr, KNET_MAX_HOST_LEN,
-+ 							       src_port, KNET_MAX_PORT_LEN);
-+ 
-+diff --git a/libknet/transport_sctp.c b/libknet/transport_sctp.c
-+index 0d69a33..ce3e98e 100644
-+--- a/libknet/transport_sctp.c
-++++ b/libknet/transport_sctp.c
-+@@ -20,6 +20,7 @@
-+ #include "host.h"
-+ #include "links.h"
-+ #include "links_acl.h"
-++#include "links_acl_ip.h"
-+ #include "logging.h"
-+ #include "common.h"
-+ #include "transport_common.h"
-+@@ -730,12 +731,13 @@ static void _handle_incoming_sctp(knet_handle_t knet_h, int listen_sock)
-+ 	log_debug(knet_h, KNET_SUB_TRANSP_SCTP, "Incoming: received connection from: %s port: %s",
-+ 						addr_str, port_str);
-+ 	if (knet_h->use_access_lists) {
-+-		if (!ipcheck_validate(&knet_h->knet_transport_fd_tracker[listen_sock].match_entry, &ss)) {
-++		if (!_generic_filter_packet_by_acl(knet_h, listen_sock, &ss)) {
-+ 			savederrno = EINVAL;
-+ 			err = -1;
-+ 			log_debug(knet_h, KNET_SUB_TRANSP_SCTP, "Connection rejected from %s/%s", addr_str, port_str);
-+ 			close(new_fd);
-+-			goto exit_error;
-++			errno = savederrno;
-++			return;
-+ 		}
-+ 	}
-+ 
-+@@ -946,8 +948,8 @@ static sctp_listen_link_info_t *sctp_link_listener_start(knet_handle_t knet_h, s
-+ 	 */
-+ 	knet_list_for_each_entry(info, &handle_info->listen_links_list, list) {
-+ 		if (memcmp(&info->src_address, &kn_link->src_addr, sizeof(struct sockaddr_storage)) == 0) {
-+-			err = ipcheck_addip(&knet_h->knet_transport_fd_tracker[info->listen_sock].match_entry,
-+-					    &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-++			err = check_add(knet_h, info->listen_sock, KNET_TRANSPORT_SCTP,
-++					&kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+ 			if (err) {
-+ 				return NULL;
-+ 			}
-+@@ -1005,8 +1007,8 @@ static sctp_listen_link_info_t *sctp_link_listener_start(knet_handle_t knet_h, s
-+ 		goto exit_error;
-+ 	}
-+ 
-+-	if (ipcheck_addip(&knet_h->knet_transport_fd_tracker[listen_sock].match_entry,
-+-			  &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) {
-++	if (check_add(knet_h, listen_sock, KNET_TRANSPORT_SCTP,
-++		      &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) {
-+ 		savederrno = errno;
-+ 		err = -1;
-+ 		log_err(knet_h, KNET_SUB_TRANSP_SCTP, "Unable to configure default access lists: %s",
-+@@ -1036,8 +1038,8 @@ exit_error:
-+ 		if (info->on_listener_epoll) {
-+ 			epoll_ctl(handle_info->listen_epollfd, EPOLL_CTL_DEL, listen_sock, &ev);
-+ 		}
-+-		ipcheck_rmip(&knet_h->knet_transport_fd_tracker[listen_sock].match_entry,
-+-			     &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-++		check_rm(knet_h, listen_sock, KNET_TRANSPORT_SCTP,
-++			 &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+ 		if (listen_sock >= 0) {
-+ 			close(listen_sock);
-+ 		}
-+@@ -1076,8 +1078,8 @@ static int sctp_link_listener_stop(knet_handle_t knet_h, struct knet_link *kn_li
-+ 		}
-+ 	}
-+ 
-+-	if (ipcheck_rmip(&knet_h->knet_transport_fd_tracker[info->listen_sock].match_entry,
-+-			 &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) {
-++	if (check_rm(knet_h, info->listen_sock, KNET_TRANSPORT_SCTP,
-++		     &kn_link->dst_addr, &kn_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT)) {
-+ 		log_debug(knet_h, KNET_SUB_TRANSP_SCTP, "Unable to remove default access lists for %d", info->listen_sock);
-+ 	}
-+ 
-+@@ -1111,7 +1113,7 @@ static int sctp_link_listener_stop(knet_handle_t knet_h, struct knet_link *kn_li
-+ 		goto exit_error;
-+ 	}
-+ 
-+-	check_rmall(&knet_h->knet_transport_fd_tracker[info->listen_sock].match_entry);
-++	check_rmall(knet_h, info->listen_sock, KNET_TRANSPORT_SCTP);
-+ 
-+ 	close(info->listen_sock);
-+ 
-diff --git a/debian/patches/access-lists-remove-2-unnecessary-wrappers.patch b/debian/patches/access-lists-remove-2-unnecessary-wrappers.patch
-new file mode 100644
-index 0000000..7fd5b1c
---- /dev/null
-+++ b/debian/patches/access-lists-remove-2-unnecessary-wrappers.patch
-@@ -0,0 +1,70 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Fri, 22 Feb 2019 05:29:07 +0100
-+Subject: [access lists] remove 2 unnecessary wrappers
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit f5cba0f7608bed1e142f30c9e04e05b4ba56606c)
-+---
-+ libknet/links_acl.h |  3 ---
-+ libknet/links.c     |  8 ++++++--
-+ libknet/links_acl.c | 12 ------------
-+ 3 files changed, 6 insertions(+), 17 deletions(-)
-+
-+diff --git a/libknet/links_acl.h b/libknet/links_acl.h
-+index 0ad50e6..b083753 100644
-+--- a/libknet/links_acl.h
-++++ b/libknet/links_acl.h
-+@@ -39,7 +39,4 @@ int check_rm(knet_handle_t knet_h, int sock, uint8_t transport,
-+ void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport);
-+ int check_validate(knet_handle_t knet_h, int sockfd, struct sockaddr_storage *checkip);
-+ 
-+-int _link_add_default_acl(knet_handle_t knet_h, struct knet_link *kh_link);
-+-int _link_rm_default_acl(knet_handle_t knet_h, struct knet_link *kh_link);
-+-
-+ #endif
-+diff --git a/libknet/links.c b/libknet/links.c
-+index 07ef26e..1693df6 100644
-+--- a/libknet/links.c
-++++ b/libknet/links.c
-+@@ -245,7 +245,9 @@ int knet_link_set_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t l
-+ 	    (link->dynamic == KNET_LINK_STATIC)) {
-+ 		log_debug(knet_h, KNET_SUB_LINK, "Configuring default access lists for host: %u link: %u socket: %d",
-+ 			  host_id, link_id, link->outsock);
-+-		if (_link_add_default_acl(knet_h, link) < 0) {
-++		if (check_add(knet_h, link->outsock, transport,
-++			      &link->dst_addr, &link->dst_addr,
-++			      CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) {
-+ 			log_warn(knet_h, KNET_SUB_LINK, "Failed to configure default access lists for host: %u link: %u", host_id, link_id);
-+ 			savederrno = errno;
-+ 			err = -1;
-+@@ -426,7 +428,9 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+ 	 */
-+ 	if ((transport_get_acl_type(knet_h, link->transport_type) == USE_GENERIC_ACL) &&
-+ 	    (link->dynamic == KNET_LINK_STATIC)) {
-+-		if (_link_rm_default_acl(knet_h, link) < 0) {
-++		if (check_rm(knet_h, link->outsock, link->transport_type,
-++			     &link->dst_addr, &link->dst_addr,
-++			     CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) {
-+ 			err = -1;
-+ 			savederrno = EBUSY;
-+ 			log_err(knet_h, KNET_SUB_LINK, "Host %u link %u: unable to remove default access list",
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index 520a934..93cc5af 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -91,15 +91,3 @@ int check_validate(knet_handle_t knet_h, int sockfd, struct sockaddr_storage *ch
-+ 	 */
-+ 	return 0;
-+ }
-+-
-+-int _link_add_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-+-{
-+-	return check_add(knet_h, kh_link->outsock, kh_link->transport_type,
-+-			&kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+-}
-+-
-+-int _link_rm_default_acl(knet_handle_t knet_h, struct knet_link *kh_link)
-+-{
-+-	return check_rm(knet_h, kh_link->outsock, kh_link->transport_type,
-+-			&kh_link->dst_addr, &kh_link->dst_addr, CHECK_TYPE_ADDRESS, CHECK_ACCEPT);
-+-}
-diff --git a/debian/patches/access-lists-rename-ip1-2-to-ss1-2-to-keep-it-more-generi.patch b/debian/patches/access-lists-rename-ip1-2-to-ss1-2-to-keep-it-more-generi.patch
-new file mode 100644
-index 0000000..a4628d7
---- /dev/null
-+++ b/debian/patches/access-lists-rename-ip1-2-to-ss1-2-to-keep-it-more-generi.patch
-@@ -0,0 +1,219 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Thu, 28 Feb 2019 08:22:43 +0100
-+Subject: [access lists] rename ip1/2 to ss1/2 to keep it more generic
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 118c7c415fbe9e47137c34607f26ac9b5b42fbf4)
-+---
-+ libknet/links_acl.h          |  8 ++++----
-+ libknet/links_acl_ip.h       |  4 ++--
-+ libknet/links_acl_loopback.h |  4 ++--
-+ libknet/links_acl.c          |  8 ++++----
-+ libknet/links_acl_ip.c       | 24 ++++++++++++------------
-+ libknet/links_acl_loopback.c |  4 ++--
-+ 6 files changed, 26 insertions(+), 26 deletions(-)
-+
-+diff --git a/libknet/links_acl.h b/libknet/links_acl.h
-+index cc4fdaf..a64faa1 100644
-+--- a/libknet/links_acl.h
-++++ b/libknet/links_acl.h
-+@@ -28,21 +28,21 @@ typedef struct {
-+ 	int (*protocheck_validate)	(void *fd_tracker_match_entry_head, struct sockaddr_storage *checkip);
-+ 
-+ 	int (*protocheck_add)		(void *fd_tracker_match_entry_head,
-+-					 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++					 struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 					 check_type_t type, check_acceptreject_t acceptreject);
-+ 
-+ 	int (*protocheck_rm)		(void *fd_tracker_match_entry_head,
-+-					 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++					 struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 					 check_type_t type, check_acceptreject_t acceptreject);
-+ 
-+ 	void (*protocheck_rmall)	(void *fd_tracker_match_entry_head);
-+ } check_ops_t;
-+ 
-+ int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-+-	      struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++	      struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 	      check_type_t type, check_acceptreject_t acceptreject);
-+ int check_rm(knet_handle_t knet_h, int sock, uint8_t transport,
-+-	     struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++	     struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 	     check_type_t type, check_acceptreject_t acceptreject);
-+ void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport);
-+ int check_validate(knet_handle_t knet_h, int sock, uint8_t transport, struct sockaddr_storage *checkip);
-+diff --git a/libknet/links_acl_ip.h b/libknet/links_acl_ip.h
-+index c475db9..e069b99 100644
-+--- a/libknet/links_acl_ip.h
-++++ b/libknet/links_acl_ip.h
-+@@ -15,11 +15,11 @@
-+ int ipcheck_validate(void *fd_tracker_match_entry_head, struct sockaddr_storage *checkip);
-+ 
-+ int ipcheck_addip(void *fd_tracker_match_entry_head,
-+-		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		  struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 		  check_type_t type, check_acceptreject_t acceptreject);
-+ 
-+ int ipcheck_rmip(void *fd_tracker_match_entry_head,
-+-		 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		 struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 		 check_type_t type, check_acceptreject_t acceptreject);
-+ 
-+ void ipcheck_rmall(void *fd_tracker_match_entry_head);
-+diff --git a/libknet/links_acl_loopback.h b/libknet/links_acl_loopback.h
-+index 0f86222..73a9704 100644
-+--- a/libknet/links_acl_loopback.h
-++++ b/libknet/links_acl_loopback.h
-+@@ -15,11 +15,11 @@
-+ int loopbackcheck_validate(void *fd_tracker_match_entry_head, struct sockaddr_storage *checkip);
-+ 
-+ int loopbackcheck_add(void *fd_tracker_match_entry_head,
-+-		      struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		      struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 		      check_type_t type, check_acceptreject_t acceptreject);
-+ 
-+ int loopbackcheck_rm(void *fd_tracker_match_entry_head,
-+-		     struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		     struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 		     check_type_t type, check_acceptreject_t acceptreject);
-+ 
-+ void loopbackcheck_rmall(void *fd_tracker_match_entry_head);
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index a941dde..0b1fcd0 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -32,21 +32,21 @@ static check_ops_t proto_check_modules_cmds[] = {
-+  */
-+ 
-+ int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-+-	      struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++	      struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 	      check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+ 	return proto_check_modules_cmds[transport_get_proto(knet_h, transport)].protocheck_add(
-+ 			&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head,
-+-			ip1, ip2, type, acceptreject);
-++			ss1, ss2, type, acceptreject);
-+ }
-+ 
-+ int check_rm(knet_handle_t knet_h, int sock, uint8_t transport,
-+-	     struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++	     struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 	     check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+ 	return proto_check_modules_cmds[transport_get_proto(knet_h, transport)].protocheck_rm(
-+ 			&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head,
-+-			ip1, ip2, type, acceptreject);
-++			ss1, ss2, type, acceptreject);
-+ }
-+ 
-+ void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport)
-+diff --git a/libknet/links_acl_ip.c b/libknet/links_acl_ip.c
-+index e72a382..2682a70 100644
-+--- a/libknet/links_acl_ip.c
-++++ b/libknet/links_acl_ip.c
-+@@ -185,14 +185,14 @@ void ipcheck_rmall(void *fd_tracker_match_entry_head)
-+ }
-+ 
-+ static struct ip_acl_match_entry *ipcheck_findmatch(struct ip_acl_match_entry **match_entry_head,
-+-						 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++						 struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 						 check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+ 	struct ip_acl_match_entry *match_entry = *match_entry_head;
-+ 
-+ 	while (match_entry) {
-+-		if ((!memcmp(&match_entry->addr1, ip1, sizeof(struct sockaddr_storage))) &&
-+-		    (!memcmp(&match_entry->addr2, ip2, sizeof(struct sockaddr_storage))) &&
-++		if ((!memcmp(&match_entry->addr1, ss1, sizeof(struct sockaddr_storage))) &&
-++		    (!memcmp(&match_entry->addr2, ss2, sizeof(struct sockaddr_storage))) &&
-+ 		    (match_entry->type == type) &&
-+ 		    (match_entry->acceptreject == acceptreject)) {
-+ 			return match_entry;
-+@@ -204,7 +204,7 @@ static struct ip_acl_match_entry *ipcheck_findmatch(struct ip_acl_match_entry **
-+ }
-+ 
-+ int ipcheck_rmip(void *fd_tracker_match_entry_head,
-+-		 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		 struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 		 check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+ 	struct ip_acl_match_entry **match_entry_head = (struct ip_acl_match_entry **)fd_tracker_match_entry_head;
-+@@ -212,7 +212,7 @@ int ipcheck_rmip(void *fd_tracker_match_entry_head,
-+ 	struct ip_acl_match_entry *rm_match_entry;
-+ 	struct ip_acl_match_entry *match_entry = *match_entry_head;
-+ 
-+-	rm_match_entry = ipcheck_findmatch(match_entry_head, ip1, ip2, type, acceptreject);
-++	rm_match_entry = ipcheck_findmatch(match_entry_head, ss1, ss2, type, acceptreject);
-+ 	if (!rm_match_entry) {
-+ 		errno = ENOENT;
-+ 		return -1;
-+@@ -243,30 +243,30 @@ int ipcheck_rmip(void *fd_tracker_match_entry_head,
-+ }
-+ 
-+ int ipcheck_addip(void *fd_tracker_match_entry_head,
-+-		  struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		  struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 		  check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+ 	struct ip_acl_match_entry **match_entry_head = (struct ip_acl_match_entry **)fd_tracker_match_entry_head;
-+ 	struct ip_acl_match_entry *new_match_entry;
-+ 	struct ip_acl_match_entry *match_entry = *match_entry_head;
-+ 
-+-	if (!ip1) {
-++	if (!ss1) {
-+ 		errno = EINVAL;
-+ 		return -1;
-+ 	}
-+ 
-+-	if ((type != CHECK_TYPE_ADDRESS) && (!ip2)) {
-++	if ((type != CHECK_TYPE_ADDRESS) && (!ss2)) {
-+ 		errno = EINVAL;
-+ 		return -1;
-+ 	}
-+ 
-+ 	if (type == CHECK_TYPE_RANGE &&
-+-	    (ip1->ss_family != ip2->ss_family)) {
-++	    (ss1->ss_family != ss2->ss_family)) {
-+ 		errno = EINVAL;
-+ 		return -1;
-+ 	}
-+ 
-+-	if (ipcheck_findmatch(match_entry_head, ip1, ip2, type, acceptreject) != NULL) {
-++	if (ipcheck_findmatch(match_entry_head, ss1, ss2, type, acceptreject) != NULL) {
-+ 		errno = EEXIST;
-+ 		return -1;
-+ 	}
-+@@ -276,8 +276,8 @@ int ipcheck_addip(void *fd_tracker_match_entry_head,
-+ 		return -1;
-+ 	}
-+ 
-+-	memmove(&new_match_entry->addr1, ip1, sizeof(struct sockaddr_storage));
-+-	memmove(&new_match_entry->addr2, ip2, sizeof(struct sockaddr_storage));
-++	memmove(&new_match_entry->addr1, ss1, sizeof(struct sockaddr_storage));
-++	memmove(&new_match_entry->addr2, ss2, sizeof(struct sockaddr_storage));
-+ 	new_match_entry->type = type;
-+ 	new_match_entry->acceptreject = acceptreject;
-+ 	new_match_entry->next = NULL;
-+diff --git a/libknet/links_acl_loopback.c b/libknet/links_acl_loopback.c
-+index 42559f3..bb69130 100644
-+--- a/libknet/links_acl_loopback.c
-++++ b/libknet/links_acl_loopback.c
-+@@ -27,14 +27,14 @@ void loopbackcheck_rmall(void *fd_tracker_match_entry_head)
-+ }
-+ 
-+ int loopbackcheck_rm(void *fd_tracker_match_entry_head,
-+-		     struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		     struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 		     check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+ 	return 0;
-+ }
-+ 
-+ int loopbackcheck_add(void *fd_tracker_match_entry_head,
-+-		      struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		      struct sockaddr_storage *ss1, struct sockaddr_storage *ss2,
-+ 		      check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+ 	return 0;
-diff --git a/debian/patches/access-lists-test-implicit-access-lists-management-for-UD.patch b/debian/patches/access-lists-test-implicit-access-lists-management-for-UD.patch
-new file mode 100644
-index 0000000..91c2bb8
---- /dev/null
-+++ b/debian/patches/access-lists-test-implicit-access-lists-management-for-UD.patch
-@@ -0,0 +1,50 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 5 Mar 2019 05:16:29 +0100
-+Subject: [access lists] test implicit access lists management for UDP,
-+ SCTP and LOOPBACK
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit dc7731abeff323785291207b91d23173bf0bb458)
-+---
-+ libknet/tests/api_knet_send.c          | 8 ++++++++
-+ libknet/tests/api_knet_send_loopback.c | 8 ++++++++
-+ 2 files changed, 16 insertions(+)
-+
-+diff --git a/libknet/tests/api_knet_send.c b/libknet/tests/api_knet_send.c
-+index 1c55db1..9e81d03 100644
-+--- a/libknet/tests/api_knet_send.c
-++++ b/libknet/tests/api_knet_send.c
-+@@ -145,6 +145,14 @@ static void test(uint8_t transport)
-+ 
-+ 	printf("Test knet_send with valid data\n");
-+ 
-++	if (knet_handle_enable_access_lists(knet_h, 1) < 0) {
-++		printf("knet_handle_enable_access_lists failed: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-+ 	if (knet_handle_enable_sock_notify(knet_h, &private_data, sock_notify) < 0) {
-+ 		printf("knet_handle_enable_sock_notify failed: %s\n", strerror(errno));
-+ 		knet_handle_free(knet_h);
-+diff --git a/libknet/tests/api_knet_send_loopback.c b/libknet/tests/api_knet_send_loopback.c
-+index 16a4624..0cfd29f 100644
-+--- a/libknet/tests/api_knet_send_loopback.c
-++++ b/libknet/tests/api_knet_send_loopback.c
-+@@ -168,6 +168,14 @@ static void test(void)
-+ 	flush_logs(logfds[0], stdout);
-+ 	printf("Test knet_send with valid data\n");
-+ 
-++	if (knet_handle_enable_access_lists(knet_h, 1) < 0) {
-++		printf("knet_handle_enable_access_lists failed: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-+ 	if (knet_link_clear_config(knet_h, 1, 0) < 0) {
-+ 		printf("Failed to clear existing UDP link: %s\n", strerror(errno));
-+ 		knet_host_remove(knet_h, 1);
-diff --git a/debian/patches/access-lists-use-arrays-to-access-per-protocol-functions.patch b/debian/patches/access-lists-use-arrays-to-access-per-protocol-functions.patch
-new file mode 100644
-index 0000000..bb00a3f
---- /dev/null
-+++ b/debian/patches/access-lists-use-arrays-to-access-per-protocol-functions.patch
-@@ -0,0 +1,309 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 26 Feb 2019 13:34:11 +0100
-+Subject: [access lists] use arrays to access per-protocol functions
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit ce8b773ed76102719c1e4a8859854e01a250b482)
-+---
-+ libknet/Makefile.am          |  2 ++
-+ libknet/tests/Makefile.am    |  3 +-
-+ libknet/internals.h          |  8 ++---
-+ libknet/links_acl.h          | 16 ++++++++++
-+ libknet/links_acl_loopback.h | 27 +++++++++++++++++
-+ libknet/links_acl.c          | 71 ++++++++++----------------------------------
-+ libknet/links_acl_loopback.c | 41 +++++++++++++++++++++++++
-+ libknet/transports.c         |  6 ++--
-+ 8 files changed, 110 insertions(+), 64 deletions(-)
-+ create mode 100644 libknet/links_acl_loopback.h
-+ create mode 100644 libknet/links_acl_loopback.c
-+
-+diff --git a/libknet/Makefile.am b/libknet/Makefile.am
-+index b60427c..0be4fff 100644
-+--- a/libknet/Makefile.am
-++++ b/libknet/Makefile.am
-+@@ -33,6 +33,7 @@ sources			= \
-+ 			  links.c \
-+ 			  links_acl.c \
-+ 			  links_acl_ip.c \
-++			  links_acl_loopback.c \
-+ 			  logging.c \
-+ 			  netutils.c \
-+ 			  threads_common.c \
-+@@ -65,6 +66,7 @@ noinst_HEADERS		= \
-+ 			  links.h \
-+ 			  links_acl.h \
-+ 			  links_acl_ip.h \
-++			  links_acl_loopback.h \
-+ 			  logging.h \
-+ 			  netutils.h \
-+ 			  onwire.h \
-+diff --git a/libknet/tests/Makefile.am b/libknet/tests/Makefile.am
-+index 2f22293..eae5c80 100644
-+--- a/libknet/tests/Makefile.am
-++++ b/libknet/tests/Makefile.am
-+@@ -79,7 +79,8 @@ int_links_acl_test_SOURCES = int_links_acl.c \
-+ 			     ../transport_sctp.c \
-+ 			     ../transport_udp.c \
-+ 			     ../links_acl.c \
-+-			     ../links_acl_ip.c
-++			     ../links_acl_ip.c \
-++			     ../links_acl_loopback.c
-+ 
-+ int_timediff_test_SOURCES = int_timediff.c
-+ 
-+diff --git a/libknet/internals.h b/libknet/internals.h
-+index 27eea2a..d482674 100644
-+--- a/libknet/internals.h
-++++ b/libknet/internals.h
-+@@ -265,10 +265,8 @@ extern pthread_rwlock_t shlib_rwlock;       /* global shared lib load lock */
-+  * to use for access lists and other operations
-+  */
-+ 
-+-typedef enum {
-+-	LOOPBACK,
-+-	IP_PROTO
-+-} transport_proto;
-++#define TRANSPORT_PROTO_LOOPBACK 0
-++#define TRANSPORT_PROTO_IP_PROTO 1
-+ 
-+ /*
-+  * some transports like SCTP can filter incoming
-+@@ -299,7 +297,7 @@ typedef struct knet_transport_ops {
-+ 	const uint8_t transport_id;
-+ 	const uint8_t built_in;
-+ 
-+-	transport_proto transport_protocol;
-++	uint8_t transport_protocol;
-+ 	transport_acl transport_acl_type;
-+ 
-+ /*
-+diff --git a/libknet/links_acl.h b/libknet/links_acl.h
-+index 84ae6b9..cc4fdaf 100644
-+--- a/libknet/links_acl.h
-++++ b/libknet/links_acl.h
-+@@ -22,6 +22,22 @@ typedef enum {
-+ 	CHECK_REJECT
-+ } check_acceptreject_t;
-+ 
-++typedef struct {
-++	uint8_t				transport_proto;
-++
-++	int (*protocheck_validate)	(void *fd_tracker_match_entry_head, struct sockaddr_storage *checkip);
-++
-++	int (*protocheck_add)		(void *fd_tracker_match_entry_head,
-++					 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++					 check_type_t type, check_acceptreject_t acceptreject);
-++
-++	int (*protocheck_rm)		(void *fd_tracker_match_entry_head,
-++					 struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++					 check_type_t type, check_acceptreject_t acceptreject);
-++
-++	void (*protocheck_rmall)	(void *fd_tracker_match_entry_head);
-++} check_ops_t;
-++
-+ int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 	      struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 	      check_type_t type, check_acceptreject_t acceptreject);
-+diff --git a/libknet/links_acl_loopback.h b/libknet/links_acl_loopback.h
-+new file mode 100644
-+index 0000000..0f86222
-+--- /dev/null
-++++ b/libknet/links_acl_loopback.h
-+@@ -0,0 +1,27 @@
-++/*
-++ * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ *
-++ * Author: Christine Caulfield <ccaulfie at redhat.com>
-++ *
-++ * This software licensed under GPL-2.0+, LGPL-2.0+
-++ */
-++
-++#ifndef __KNET_LINKS_ACL_LOOPBACK_H__
-++#define __KNET_LINKS_ACL_LOOPBACK_H__
-++
-++#include "internals.h"
-++#include "links_acl.h"
-++
-++int loopbackcheck_validate(void *fd_tracker_match_entry_head, struct sockaddr_storage *checkip);
-++
-++int loopbackcheck_add(void *fd_tracker_match_entry_head,
-++		      struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		      check_type_t type, check_acceptreject_t acceptreject);
-++
-++int loopbackcheck_rm(void *fd_tracker_match_entry_head,
-++		     struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		     check_type_t type, check_acceptreject_t acceptreject);
-++
-++void loopbackcheck_rmall(void *fd_tracker_match_entry_head);
-++
-++#endif
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index f2c772d..a941dde 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -19,6 +19,12 @@
-+ #include "transport_common.h"
-+ #include "links_acl.h"
-+ #include "links_acl_ip.h"
-++#include "links_acl_loopback.h"
-++
-++static check_ops_t proto_check_modules_cmds[] = {
-++	{ TRANSPORT_PROTO_LOOPBACK, loopbackcheck_validate, loopbackcheck_add, loopbackcheck_rm, loopbackcheck_rmall },
-++	{ TRANSPORT_PROTO_IP_PROTO, ipcheck_validate, ipcheck_addip, ipcheck_rmip, ipcheck_rmall }
-++};
-+ 
-+ /*
-+  * all those functions will return errno from the
-+@@ -29,56 +35,24 @@ int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 	      struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 	      check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+-	int err = -1;
-+-
-+-	switch(transport_get_proto(knet_h, transport)) {
-+-		case LOOPBACK:
-+-			errno = 0;
-+-			err = 0;
-+-			break;
-+-		case IP_PROTO:
-+-			err = ipcheck_addip(&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head,
-+-					    ip1, ip2, type, acceptreject);
-+-			break;
-+-		default:
-+-			break;
-+-	}
-+-	return err;
-++	return proto_check_modules_cmds[transport_get_proto(knet_h, transport)].protocheck_add(
-++			&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head,
-++			ip1, ip2, type, acceptreject);
-+ }
-+ 
-+ int check_rm(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 	     struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-+ 	     check_type_t type, check_acceptreject_t acceptreject)
-+ {
-+-	int err = -1;
-+-
-+-	switch(transport_get_proto(knet_h, transport)) {
-+-		case LOOPBACK:
-+-			errno = 0;
-+-			err = 0;
-+-			break;
-+-		case IP_PROTO:
-+-			err = ipcheck_rmip(&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head,
-+-					   ip1, ip2, type, acceptreject);
-+-			break;
-+-		default:
-+-			break;
-+-	}
-+-	return err;
-++	return proto_check_modules_cmds[transport_get_proto(knet_h, transport)].protocheck_rm(
-++			&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head,
-++			ip1, ip2, type, acceptreject);
-+ }
-+ 
-+ void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport)
-+ {
-+-	switch(transport_get_proto(knet_h, transport)) {
-+-		case LOOPBACK:
-+-			return;
-+-			break;
-+-		case IP_PROTO:
-+-			ipcheck_rmall(&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head);
-+-			break;
-+-		default:
-+-			break;
-+-	}
-++	proto_check_modules_cmds[transport_get_proto(knet_h, transport)].protocheck_rmall(
-++		&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head);
-+ }
-+ 
-+ /*
-+@@ -86,19 +60,6 @@ void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport)
-+  */
-+ int check_validate(knet_handle_t knet_h, int sock, uint8_t transport, struct sockaddr_storage *checkip)
-+ {
-+-	switch(transport_get_proto(knet_h, transport)) {
-+-		case LOOPBACK:
-+-			errno = 0;
-+-			return 1;
-+-			break;
-+-		case IP_PROTO:
-+-			return ipcheck_validate(&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head, checkip);
-+-			break;
-+-		default:
-+-			break;
-+-	}
-+-	/*
-+-	 * reject by default
-+-	 */
-+-	return 0;
-++	return proto_check_modules_cmds[transport_get_proto(knet_h, transport)].protocheck_validate(
-++			&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head, checkip);
-+ }
-+diff --git a/libknet/links_acl_loopback.c b/libknet/links_acl_loopback.c
-+new file mode 100644
-+index 0000000..42559f3
-+--- /dev/null
-++++ b/libknet/links_acl_loopback.c
-+@@ -0,0 +1,41 @@
-++/*
-++ * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ *
-++ * Author: Christine Caulfield <ccaulfie at redhat.com>
-++ *
-++ * This software licensed under GPL-2.0+, LGPL-2.0+
-++ */
-++
-++#include "config.h"
-++
-++#include <errno.h>
-++
-++#include "internals.h"
-++#include "logging.h"
-++#include "transports.h"
-++#include "links_acl.h"
-++#include "links_acl_loopback.h"
-++
-++int loopbackcheck_validate(void *fd_tracker_match_entry_head, struct sockaddr_storage *checkip)
-++{
-++	return 1;
-++}
-++
-++void loopbackcheck_rmall(void *fd_tracker_match_entry_head)
-++{
-++	return;
-++}
-++
-++int loopbackcheck_rm(void *fd_tracker_match_entry_head,
-++		     struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		     check_type_t type, check_acceptreject_t acceptreject)
-++{
-++	return 0;
-++}
-++
-++int loopbackcheck_add(void *fd_tracker_match_entry_head,
-++		      struct sockaddr_storage *ip1, struct sockaddr_storage *ip2,
-++		      check_type_t type, check_acceptreject_t acceptreject)
-++{
-++	return 0;
-++}
-+diff --git a/libknet/transports.c b/libknet/transports.c
-+index 69ea091..6ded675 100644
-+--- a/libknet/transports.c
-++++ b/libknet/transports.c
-+@@ -30,11 +30,11 @@
-+ #define empty_module -1, -1, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
-+ 
-+ static knet_transport_ops_t transport_modules_cmd[KNET_MAX_TRANSPORTS] = {
-+-	{ "LOOPBACK", KNET_TRANSPORT_LOOPBACK, 1, LOOPBACK, USE_NO_ACL, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED, KNET_PMTUD_LOOPBACK_OVERHEAD, loopback_transport_init, loopback_transport_free, loopback_transport_link_set_config, loopback_transport_link_clear_config, loopback_transport_link_dyn_connect, loopback_transport_rx_sock_error, loopback_transport_tx_sock_error, loopback_transport_rx_is_data },
-+-	{ "UDP", KNET_TRANSPORT_UDP, 1, IP_PROTO, USE_GENERIC_ACL, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED, KNET_PMTUD_UDP_OVERHEAD, udp_transport_init, udp_transport_free, udp_transport_link_set_config, udp_transport_link_clear_config, udp_transport_link_dyn_connect, udp_transport_rx_sock_error, udp_transport_tx_sock_error, udp_transport_rx_is_data },
-++	{ "LOOPBACK", KNET_TRANSPORT_LOOPBACK, 1, TRANSPORT_PROTO_LOOPBACK, USE_NO_ACL, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED, KNET_PMTUD_LOOPBACK_OVERHEAD, loopback_transport_init, loopback_transport_free, loopback_transport_link_set_config, loopback_transport_link_clear_config, loopback_transport_link_dyn_connect, loopback_transport_rx_sock_error, loopback_transport_tx_sock_error, loopback_transport_rx_is_data },
-++	{ "UDP", KNET_TRANSPORT_UDP, 1, TRANSPORT_PROTO_IP_PROTO, USE_GENERIC_ACL, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED, KNET_PMTUD_UDP_OVERHEAD, udp_transport_init, udp_transport_free, udp_transport_link_set_config, udp_transport_link_clear_config, udp_transport_link_dyn_connect, udp_transport_rx_sock_error, udp_transport_tx_sock_error, udp_transport_rx_is_data },
-+ 	{ "SCTP", KNET_TRANSPORT_SCTP,
-+ #ifdef HAVE_NETINET_SCTP_H
-+-				       1, IP_PROTO, USE_PROTO_ACL, TRANSPORT_PROTO_IS_CONNECTION_ORIENTED, KNET_PMTUD_SCTP_OVERHEAD, sctp_transport_init, sctp_transport_free, sctp_transport_link_set_config, sctp_transport_link_clear_config, sctp_transport_link_dyn_connect, sctp_transport_rx_sock_error, sctp_transport_tx_sock_error, sctp_transport_rx_is_data },
-++				       1, TRANSPORT_PROTO_IP_PROTO, USE_PROTO_ACL, TRANSPORT_PROTO_IS_CONNECTION_ORIENTED, KNET_PMTUD_SCTP_OVERHEAD, sctp_transport_init, sctp_transport_free, sctp_transport_link_set_config, sctp_transport_link_clear_config, sctp_transport_link_dyn_connect, sctp_transport_rx_sock_error, sctp_transport_tx_sock_error, sctp_transport_rx_is_data },
-+ #else
-+ empty_module
-+ #endif
-diff --git a/debian/patches/access-lists-use-better-name-for-fd_tracker-structure.patch b/debian/patches/access-lists-use-better-name-for-fd_tracker-structure.patch
-new file mode 100644
-index 0000000..cbba12f
---- /dev/null
-+++ b/debian/patches/access-lists-use-better-name-for-fd_tracker-structure.patch
-@@ -0,0 +1,95 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 26 Feb 2019 12:12:09 +0100
-+Subject: [access lists] use better name for fd_tracker structure
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit bc25626d5585ac267029470cf518852017d3740b)
-+---
-+ libknet/internals.h                      | 10 +++++-----
-+ libknet/links_acl.c                      |  8 ++++----
-+ libknet/tests/api_knet_link_set_config.c |  4 ++--
-+ 3 files changed, 11 insertions(+), 11 deletions(-)
-+
-+diff --git a/libknet/internals.h b/libknet/internals.h
-+index 2135fb8..27eea2a 100644
-+--- a/libknet/internals.h
-++++ b/libknet/internals.h
-+@@ -130,11 +130,11 @@ struct knet_sock {
-+ };
-+ 
-+ struct knet_fd_trackers {
-+-	uint8_t transport; /* transport type (UDP/SCTP...) */
-+-	uint8_t data_type; /* internal use for transport to define what data are associated
-+-			    * to this fd */
-+-	void *data;	   /* pointer to the data */
-+-	void *match_entry; /* pointer to access list match_entry list head */
-++	uint8_t transport;		    /* transport type (UDP/SCTP...) */
-++	uint8_t data_type;		    /* internal use for transport to define what data are associated
-++					     * to this fd */
-++	void *data;			    /* pointer to the data */
-++	void *access_list_match_entry_head; /* pointer to access list match_entry list head */
-+ };
-+ 
-+ #define KNET_MAX_FDS KNET_MAX_HOST * KNET_MAX_LINK * 4
-+diff --git a/libknet/links_acl.c b/libknet/links_acl.c
-+index b1d7ab4..f2c772d 100644
-+--- a/libknet/links_acl.c
-++++ b/libknet/links_acl.c
-+@@ -37,7 +37,7 @@ int check_add(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 			err = 0;
-+ 			break;
-+ 		case IP_PROTO:
-+-			err = ipcheck_addip(&knet_h->knet_transport_fd_tracker[sock].match_entry,
-++			err = ipcheck_addip(&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head,
-+ 					    ip1, ip2, type, acceptreject);
-+ 			break;
-+ 		default:
-+@@ -58,7 +58,7 @@ int check_rm(knet_handle_t knet_h, int sock, uint8_t transport,
-+ 			err = 0;
-+ 			break;
-+ 		case IP_PROTO:
-+-			err = ipcheck_rmip(&knet_h->knet_transport_fd_tracker[sock].match_entry,
-++			err = ipcheck_rmip(&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head,
-+ 					   ip1, ip2, type, acceptreject);
-+ 			break;
-+ 		default:
-+@@ -74,7 +74,7 @@ void check_rmall(knet_handle_t knet_h, int sock, uint8_t transport)
-+ 			return;
-+ 			break;
-+ 		case IP_PROTO:
-+-			ipcheck_rmall(&knet_h->knet_transport_fd_tracker[sock].match_entry);
-++			ipcheck_rmall(&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head);
-+ 			break;
-+ 		default:
-+ 			break;
-+@@ -92,7 +92,7 @@ int check_validate(knet_handle_t knet_h, int sock, uint8_t transport, struct soc
-+ 			return 1;
-+ 			break;
-+ 		case IP_PROTO:
-+-			return ipcheck_validate(&knet_h->knet_transport_fd_tracker[sock].match_entry, checkip);
-++			return ipcheck_validate(&knet_h->knet_transport_fd_tracker[sock].access_list_match_entry_head, checkip);
-+ 			break;
-+ 		default:
-+ 			break;
-+diff --git a/libknet/tests/api_knet_link_set_config.c b/libknet/tests/api_knet_link_set_config.c
-+index 5fed9be..b96c628 100644
-+--- a/libknet/tests/api_knet_link_set_config.c
-++++ b/libknet/tests/api_knet_link_set_config.c
-+@@ -145,7 +145,7 @@ static void test(void)
-+ 	host = knet_h->host_index[1];
-+ 	link = &host->link[0];
-+ 
-+-	if (knet_h->knet_transport_fd_tracker[link->outsock].match_entry) {
-++	if (knet_h->knet_transport_fd_tracker[link->outsock].access_list_match_entry_head) {
-+ 		printf("found access lists for dynamic dst_addr!\n");
-+ 		knet_link_clear_config(knet_h, 1, 0);
-+ 		knet_host_remove(knet_h, 1);
-+@@ -262,7 +262,7 @@ static void test(void)
-+ 	host = knet_h->host_index[1];
-+ 	link = &host->link[0];
-+ 
-+-	if (!knet_h->knet_transport_fd_tracker[link->outsock].match_entry) {
-++	if (!knet_h->knet_transport_fd_tracker[link->outsock].access_list_match_entry_head) {
-+ 		printf("Unable to find default access lists for static dst_addr!\n");
-+ 		knet_link_clear_config(knet_h, 1, 0);
-+ 		knet_host_remove(knet_h, 1);
-diff --git a/debian/patches/acl-Fix-English-in-commments.patch b/debian/patches/acl-Fix-English-in-commments.patch
-new file mode 100644
-index 0000000..7e55364
---- /dev/null
-+++ b/debian/patches/acl-Fix-English-in-commments.patch
-@@ -0,0 +1,106 @@
-+From: Christine Caulfield <ccaulfie at redhat.com>
-+Date: Thu, 7 Mar 2019 10:04:41 +0000
-+Subject: acl: Fix English in commments
-+
-+(cherry picked from commit e9b656bebb0615c2b2419929cadfb71e3941af34)
-+---
-+ libknet/internals.h |  2 +-
-+ libknet/libknet.h   | 27 ++++++++++++++-------------
-+ 2 files changed, 15 insertions(+), 14 deletions(-)
-+
-+diff --git a/libknet/internals.h b/libknet/internals.h
-+index 8976a8c..12f613c 100644
-+--- a/libknet/internals.h
-++++ b/libknet/internals.h
-+@@ -132,7 +132,7 @@ struct knet_sock {
-+ struct knet_fd_trackers {
-+ 	uint8_t transport;		    /* transport type (UDP/SCTP...) */
-+ 	uint8_t data_type;		    /* internal use for transport to define what data are associated
-+-					     * to this fd */
-++					     * with this fd */
-+ 	void *data;			    /* pointer to the data */
-+ 	void *access_list_match_entry_head; /* pointer to access list match_entry list head */
-+ };
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index d616e11..50ed70d 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -523,15 +523,16 @@ int knet_handle_setfwd(knet_handle_t knet_h, unsigned int enabled);
-+  *
-+  * knet will automatically generate access lists for point to point links.
-+  *
-+- * For open links, knet provides 3 API calls to manipulate access lists:
-+- * knet_link_add_acl(3), knet_link_rm_acl(3) and knet_link_clear_acl(3).
-+- * Those API calls will work only and exclusively on open links as they
-+- * provide no use for point to point links.
-++ * For open links, knet provides 4 API calls to manipulate access lists:
-++ * knet_link_add_acl(3), knet_link_rm_acl(3), knet_link_insert_acl(3)
-++ * and knet_link_clear_acl(3).
-++ * Those API calls will work exclusively on open links as they
-++ * are of no use on point to point links.
-+  *
-+  * knet will not enforce any access list unless specifically enabled by
-+  * knet_handle_enable_access_lists(3).
-+  *
-+- * From a security / programming perspective we recommend to:
-++ * From a security / programming perspective we recommend:
-+  * - create the knet handle
-+  * - enable access lists
-+  * - configure hosts and links
-+@@ -1478,13 +1479,13 @@ int knet_link_get_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t l
-+ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_id);
-+ 
-+ /*
-+- * access lists management for open links
-++ * Access lists management for open links
-+  * see also knet_handle_enable_access_lists(3)
-+  */
-+ 
-+ /*
-+  * CHECK_TYPE_ADDRESS is the equivalent of a single entry / IP address.
-+- *                    for example: 10.1.9.3/32
-++ *                    for example: 10.1.9.3
-+  *                    and the entry is stored in ss1. ss2 can be NULL.
-+  *
-+  * CHECK_TYPE_MASK    is used to configure network/netmask.
-+@@ -1495,9 +1496,9 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+  *                    for example: 172.16.0.1-172.16.0.10
-+  *                    the start is stored in ss1 and the end in ss2.
-+  *
-+- * Please be aware that the above examples refers only to IP based protocols.
-++ * Please be aware that the above examples refer only to IP based protocols.
-+  * Other protocols might use ss1 and ss2 in slightly different ways.
-+- * At the moment knet only supports IP based protocol and that might change
-++ * At the moment knet only supports IP based protocol, though that might change
-+  * in the future.
-+  */
-+ 
-+@@ -1531,7 +1532,7 @@ typedef enum {
-+  *
-+  * IMPORTANT: the order in which access lists are added is critical and it
-+  *            is left to the user to add them in the right order. knet
-+- *            will do no attempt to logically sort them.
-++ *            will not attempt to logically sort them.
-+  *
-+  *            For example:
-+  *            1 - accept from 10.0.0.0/8
-+@@ -1568,7 +1569,7 @@ int knet_link_add_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link
-+  * link_id   - see knet_link_set_config(3)
-+  *
-+  * index     - insert at position "index" where 0 is the first entry and -1
-+- *             append to the current list.
-++ *             appends to the current list.
-+  *
-+  * ss1 / ss2 / type / acceptreject - see typedef definitions for details
-+  *
-+@@ -1597,8 +1598,8 @@ int knet_link_insert_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t l
-+  *
-+  * ss1 / ss2 / type / acceptreject - see typedef definitions for details
-+  *
-+- * IMPORTANT: the data passed to this API call must match exactly the ones used
-+- *            in knet_link_add_acl(3).
-++ * IMPORTANT: the data passed to this API call must match exactly that passed
-++ *            to knet_link_add_acl(3).
-+  *
-+  * @return
-+  * knet_link_rm_acl
-diff --git a/debian/patches/acl-add-knet_handle_enable_access_lists-api-call.patch b/debian/patches/acl-add-knet_handle_enable_access_lists-api-call.patch
-new file mode 100644
-index 0000000..683d8e6
---- /dev/null
-+++ b/debian/patches/acl-add-knet_handle_enable_access_lists-api-call.patch
-@@ -0,0 +1,235 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Fri, 8 Feb 2019 14:29:50 +0100
-+Subject: [acl] add knet_handle_enable_access_lists api call
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 2a325c9fc388c91fd9969378d5822db87b9d364b)
-+---
-+ libknet/internals.h                                |   1 +
-+ libknet/libknet.h                                  |  22 +++++
-+ libknet/handle.c                                   |  36 ++++++++
-+ .../tests/api_knet_handle_enable_access_lists.c    | 100 +++++++++++++++++++++
-+ libknet/tests/api-check.mk                         |   4 +
-+ 5 files changed, 163 insertions(+)
-+ create mode 100644 libknet/tests/api_knet_handle_enable_access_lists.c
-+
-+diff --git a/libknet/internals.h b/libknet/internals.h
-+index 57da5b4..d33646f 100644
-+--- a/libknet/internals.h
-++++ b/libknet/internals.h
-+@@ -158,6 +158,7 @@ struct knet_handle {
-+ 	int send_to_links_epollfd;
-+ 	int recv_from_links_epollfd;
-+ 	int dst_link_handler_epollfd;
-++	uint8_t use_access_lists; /* set to 0 for disable, 1 for enable */
-+ 	unsigned int pmtud_interval;
-+ 	unsigned int data_mtu;	/* contains the max data size that we can send onwire
-+ 				 * without frags */
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index c7f44d7..4283afe 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -502,6 +502,28 @@ int knet_handle_enable_filter(knet_handle_t knet_h,
-+ 
-+ int knet_handle_setfwd(knet_handle_t knet_h, unsigned int enabled);
-+ 
-++/**
-++ * knet_handle_enable_access_lists
-++ *
-++ * @brief Start packet forwarding
-++ *
-++ * knet_h   - pointer to knet_handle_t
-++ *
-++ * enable   - set to 1 to use ip access lists, 0 to disable ip access_lists.
-++ *
-++ * @return
-++ * knet_handle_enable_access_lists returns
-++ * 0 on success
-++ * -1 on error and errno is set.
-++ *
-++ * By default access lists usage is off, but default internal access lists
-++ * will be populated regardless, but not enforced. TODO add long explanation
-++ * on internal access lists for point to point connections vs global
-++ * listeners etc.
-++ */
-++
-++int knet_handle_enable_access_lists(knet_handle_t knet_h, unsigned int enabled);
-++
-+ #define KNET_PMTUD_DEFAULT_INTERVAL 60
-+ 
-+ /**
-+diff --git a/libknet/handle.c b/libknet/handle.c
-+index b7aa2fd..6cd49f5 100644
-+--- a/libknet/handle.c
-++++ b/libknet/handle.c
-+@@ -1186,6 +1186,42 @@ int knet_handle_setfwd(knet_handle_t knet_h, unsigned int enabled)
-+ 	return 0;
-+ }
-+ 
-++int knet_handle_enable_access_lists(knet_handle_t knet_h, unsigned int enabled)
-++{
-++	int savederrno = 0;
-++
-++	if (!knet_h) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	if (enabled > 1) {
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	savederrno = get_global_wrlock(knet_h);
-++	if (savederrno) {
-++		log_err(knet_h, KNET_SUB_HANDLE, "Unable to get write lock: %s",
-++			strerror(savederrno));
-++		errno = savederrno;
-++		return -1;
-++	}
-++
-++	knet_h->use_access_lists = enabled;
-++
-++	if (enabled) {
-++		log_debug(knet_h, KNET_SUB_HANDLE, "Links access lists are enabled");
-++	} else {
-++		log_debug(knet_h, KNET_SUB_HANDLE, "Links access lists are disabled");
-++	}
-++
-++	pthread_rwlock_unlock(&knet_h->global_rwlock);
-++
-++	errno = 0;
-++	return 0;
-++}
-++
-+ int knet_handle_pmtud_getfreq(knet_handle_t knet_h, unsigned int *interval)
-+ {
-+ 	int savederrno = 0;
-+diff --git a/libknet/tests/api_knet_handle_enable_access_lists.c b/libknet/tests/api_knet_handle_enable_access_lists.c
-+new file mode 100644
-+index 0000000..fc3bcc1
-+--- /dev/null
-++++ b/libknet/tests/api_knet_handle_enable_access_lists.c
-+@@ -0,0 +1,100 @@
-++/*
-++ * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ *
-++ * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-++ *
-++ * This software licensed under GPL-2.0+, LGPL-2.0+
-++ */
-++
-++#include "config.h"
-++
-++#include <errno.h>
-++#include <stdio.h>
-++#include <stdlib.h>
-++#include <string.h>
-++#include <unistd.h>
-++
-++#include "libknet.h"
-++#include "internals.h"
-++
-++#include "test-common.h"
-++
-++static void test(void)
-++{
-++	knet_handle_t knet_h;
-++	int logfds[2];
-++
-++	printf("Test knet_handle_enable_access_lists with invalid knet_h\n");
-++
-++	if ((!knet_handle_enable_access_lists(NULL, 0)) || (errno != EINVAL)) {
-++		printf("knet_handle_enable_access_lists accepted invalid knet_h parameter\n");
-++		exit(FAIL);
-++	}
-++
-++	setup_logpipes(logfds);
-++
-++	printf("Test knet_handle_enable_access_lists with invalid param (2) \n");
-++
-++	knet_h = knet_handle_start(logfds, KNET_LOG_DEBUG);
-++
-++	if ((!knet_handle_enable_access_lists(knet_h, 2)) || (errno != EINVAL)) {
-++		printf("knet_handle_enable_access_lists accepted invalid param for enabled: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_handle_enable_access_lists with valid param (1) \n");
-++
-++	if (knet_handle_enable_access_lists(knet_h, 1) < 0) {
-++		printf("knet_handle_enable_access_lists failed: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if (knet_h->use_access_lists != 1) {
-++		printf("knet_handle_enable_access_lists failed to set correct value");
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_handle_enable_access_lists with valid param (0) \n");
-++
-++	if (knet_handle_enable_access_lists(knet_h, 0) < 0) {
-++		printf("knet_handle_enable_access_lists failed: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	if (knet_h->use_access_lists != 0) {
-++		printf("knet_handle_enable_access_lists failed to set correct value");
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	knet_handle_free(knet_h);
-++	flush_logs(logfds[0], stdout);
-++	close_logpipes(logfds);
-++}
-++
-++int main(int argc, char *argv[])
-++{
-++	test();
-++
-++	return PASS;
-++}
-+diff --git a/libknet/tests/api-check.mk b/libknet/tests/api-check.mk
-+index 7beba53..247ed58 100644
-+--- a/libknet/tests/api-check.mk
-++++ b/libknet/tests/api-check.mk
-+@@ -12,6 +12,7 @@ api_checks		= \
-+ 			  api_knet_handle_compress_test \
-+ 			  api_knet_handle_crypto_test \
-+ 			  api_knet_handle_setfwd_test \
-++			  api_knet_handle_enable_access_lists_test \
-+ 			  api_knet_handle_enable_filter_test \
-+ 			  api_knet_handle_enable_sock_notify_test \
-+ 			  api_knet_handle_add_datafd_test \
-+@@ -87,6 +88,9 @@ api_knet_handle_crypto_test_SOURCES = api_knet_handle_crypto.c \
-+ api_knet_handle_setfwd_test_SOURCES = api_knet_handle_setfwd.c \
-+ 				      test-common.c
-+ 
-++api_knet_handle_enable_access_lists_test_SOURCES = api_knet_handle_enable_access_lists.c \
-++						   test-common.c
-++
-+ api_knet_handle_enable_filter_test_SOURCES = api_knet_handle_enable_filter.c \
-+ 					     test-common.c
-+ 
-diff --git a/debian/patches/acl-move-poc-code-into-libknet-dir-and-rename-to-links_ac.patch b/debian/patches/acl-move-poc-code-into-libknet-dir-and-rename-to-links_ac.patch
-new file mode 100644
-index 0000000..c9a98b3
---- /dev/null
-+++ b/debian/patches/acl-move-poc-code-into-libknet-dir-and-rename-to-links_ac.patch
-@@ -0,0 +1,186 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Sat, 5 Jan 2019 09:04:38 +0100
-+Subject: [acl] move poc-code into libknet dir and rename to links_acl.*
-+MIME-Version: 1.0
-+Content-Type: text/plain; charset="utf-8"
-+Content-Transfer-Encoding: 8bit
-+
-+code is not integrated yet and test suite can´t run standalone
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit d7fb8af3a8be37f12e0149d49280762e2bdb9b16)
-+---
-+ .../tests/int_links_acl.txt                        |  0
-+ configure.ac                                       |  1 -
-+ libknet/Makefile.am                                |  2 ++
-+ libknet/tests/Makefile.am                          |  8 +++++++-
-+ poc-code/Makefile.am                               |  2 +-
-+ poc-code/access-list/Makefile.am                   | 22 ----------------------
-+ .../access-list/ipcheck.h => libknet/links_acl.h   |  0
-+ .../access-list/ipcheck.c => libknet/links_acl.c   |  2 +-
-+ .../tests/int_links_acl.c                          |  6 +++---
-+ 9 files changed, 14 insertions(+), 29 deletions(-)
-+ rename poc-code/access-list/test_ipcheck.txt => libknet/tests/int_links_acl.txt (100%)
-+ delete mode 100644 poc-code/access-list/Makefile.am
-+ rename poc-code/access-list/ipcheck.h => libknet/links_acl.h (100%)
-+ rename poc-code/access-list/ipcheck.c => libknet/links_acl.c (99%)
-+ rename poc-code/access-list/test_ipcheck.c => libknet/tests/int_links_acl.c (96%)
-+
-+diff --git a/poc-code/access-list/test_ipcheck.txt b/libknet/tests/int_links_acl.txt
-+similarity index 100%
-+rename from poc-code/access-list/test_ipcheck.txt
-+rename to libknet/tests/int_links_acl.txt
-+diff --git a/configure.ac b/configure.ac
-+index 9df6831..30c57f0 100644
-+--- a/configure.ac
-++++ b/configure.ac
-+@@ -463,7 +463,6 @@ AC_CONFIG_FILES([
-+ 		man/Doxyfile-nozzle
-+ 		poc-code/Makefile
-+ 		poc-code/iov-hash/Makefile
-+-		poc-code/access-list/Makefile
-+ 		])
-+ 
-+ if test "x$VERSION" = "xUNKNOWN"; then
-+diff --git a/libknet/Makefile.am b/libknet/Makefile.am
-+index 906fd01..4ea42d9 100644
-+--- a/libknet/Makefile.am
-++++ b/libknet/Makefile.am
-+@@ -31,6 +31,7 @@ sources			= \
-+ 			  handle.c \
-+ 			  host.c \
-+ 			  links.c \
-++			  links_acl.c \
-+ 			  logging.c \
-+ 			  netutils.c \
-+ 			  threads_common.c \
-+@@ -61,6 +62,7 @@ noinst_HEADERS		= \
-+ 			  host.h \
-+ 			  internals.h \
-+ 			  links.h \
-++			  links_acl.h \
-+ 			  logging.h \
-+ 			  netutils.h \
-+ 			  onwire.h \
-+diff --git a/libknet/tests/Makefile.am b/libknet/tests/Makefile.am
-+index c00e624..f74cb04 100644
-+--- a/libknet/tests/Makefile.am
-++++ b/libknet/tests/Makefile.am
-+@@ -13,7 +13,8 @@ include $(top_srcdir)/libknet/tests/api-check.mk
-+ 
-+ EXTRA_DIST		= \
-+ 			  api-test-coverage \
-+-			  api-check.mk
-++			  api-check.mk \
-++			  int_links_acl.txt
-+ 
-+ AM_CPPFLAGS		= -I$(top_srcdir)/libknet
-+ AM_CFLAGS		+= $(PTHREAD_CFLAGS)
-+@@ -40,9 +41,11 @@ fun_checks		=
-+ benchmarks		= \
-+ 			  knet_bench_test
-+ 
-++# int_links_acl_test can´t run yet standalone
-+ noinst_PROGRAMS		= \
-+ 			  api_knet_handle_new_limit_test \
-+ 			  pckt_test \
-++			  int_links_acl_test \
-+ 			  $(benchmarks) \
-+ 			  $(check_PROGRAMS)
-+ 
-+@@ -64,6 +67,9 @@ check-api-test-coverage:
-+ 
-+ pckt_test_SOURCES	= pckt_test.c
-+ 
-++int_links_acl_test_SOURCES = int_links_acl.c \
-++			     ../links_acl.c
-++
-+ int_timediff_test_SOURCES = int_timediff.c
-+ 
-+ knet_bench_test_SOURCES	= knet_bench.c \
-+diff --git a/poc-code/Makefile.am b/poc-code/Makefile.am
-+index e1b1a73..15d12f7 100644
-+--- a/poc-code/Makefile.am
-++++ b/poc-code/Makefile.am
-+@@ -10,4 +10,4 @@ MAINTAINERCLEANFILES	= Makefile.in
-+ 
-+ include $(top_srcdir)/build-aux/check.mk
-+ 
-+-SUBDIRS			= access-list iov-hash
-++SUBDIRS			= iov-hash
-+diff --git a/poc-code/access-list/Makefile.am b/poc-code/access-list/Makefile.am
-+deleted file mode 100644
-+index 80c49c2..0000000
-+--- a/poc-code/access-list/Makefile.am
-++++ /dev/null
-+@@ -1,22 +0,0 @@
-+-#
-+-# Copyright (C) 2016-2019 Red Hat, Inc.  All rights reserved.
-+-#
-+-# Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+-#
-+-# This software licensed under GPL-2.0+, LGPL-2.0+
-+-#
-+-
-+-MAINTAINERCLEANFILES	= Makefile.in
-+-
-+-include $(top_srcdir)/build-aux/check.mk
-+-
-+-# override global LIBS that pulls in lots of craft we don't need here
-+-LIBS			=
-+-
-+-EXTRA_DIST		= test_ipcheck.txt
-+-
-+-noinst_PROGRAMS		= test_ipcheck
-+-
-+-noinst_HEADERS		= ipcheck.h
-+-
-+-test_ipcheck_SOURCES	= ipcheck.c test_ipcheck.c
-+diff --git a/poc-code/access-list/ipcheck.h b/libknet/links_acl.h
-+similarity index 100%
-+rename from poc-code/access-list/ipcheck.h
-+rename to libknet/links_acl.h
-+diff --git a/poc-code/access-list/ipcheck.c b/libknet/links_acl.c
-+similarity index 99%
-+rename from poc-code/access-list/ipcheck.c
-+rename to libknet/links_acl.c
-+index 9774a46..e7b5602 100644
-+--- a/poc-code/access-list/ipcheck.c
-++++ b/libknet/links_acl.c
-+@@ -11,7 +11,7 @@
-+ #include <stdint.h>
-+ #include <string.h>
-+ #include <malloc.h>
-+-#include "ipcheck.h"
-++#include "links_acl.h"
-+ 
-+ struct ip_match_entry {
-+ 	ipcheck_type_t type;
-+diff --git a/poc-code/access-list/test_ipcheck.c b/libknet/tests/int_links_acl.c
-+similarity index 96%
-+rename from poc-code/access-list/test_ipcheck.c
-+rename to libknet/tests/int_links_acl.c
-+index 46a750b..27ac545 100644
-+--- a/poc-code/access-list/test_ipcheck.c
-++++ b/libknet/tests/int_links_acl.c
-+@@ -14,7 +14,7 @@
-+ #include <string.h>
-+ #include <netdb.h>
-+ #include <malloc.h>
-+-#include "ipcheck.h"
-++#include "links_acl.h"
-+ 
-+ /* This is a test program .. remember! */
-+ #define BUFLEN 1024
-+@@ -103,9 +103,9 @@ static int load_file(void)
-+ 
-+ 	ipcheck_clear();
-+ 
-+-	filterfile = fopen("test_ipcheck.txt", "r");
-++	filterfile = fopen("int_links_acl.txt", "r");
-+ 	if (!filterfile) {
-+-		fprintf(stderr, "Cannot open test_ipcheck.txt\n");
-++		fprintf(stderr, "Cannot open int_links_acl.txt\n");
-+ 		return 1;
-+ 	}
-+ 
-diff --git a/debian/patches/build-bump-soname-to-indicate-new-API-calls.patch b/debian/patches/build-bump-soname-to-indicate-new-API-calls.patch
-new file mode 100644
-index 0000000..a5aabe1
---- /dev/null
-+++ b/debian/patches/build-bump-soname-to-indicate-new-API-calls.patch
-@@ -0,0 +1,23 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Thu, 9 May 2019 16:36:07 +0200
-+Subject: [build] bump soname to indicate new API calls
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 460fca5e33d52c560e34b1edf60f350efb6023a5)
-+---
-+ libknet/Makefile.am | 2 +-
-+ 1 file changed, 1 insertion(+), 1 deletion(-)
-+
-+diff --git a/libknet/Makefile.am b/libknet/Makefile.am
-+index 90ddfba..8adcc40 100644
-+--- a/libknet/Makefile.am
-++++ b/libknet/Makefile.am
-+@@ -18,7 +18,7 @@ EXTRA_DIST		= $(SYMFILE)
-+ SUBDIRS			= . tests
-+ 
-+ # https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
-+-libversion		= 2:0:1
-++libversion		= 3:0:2
-+ 
-+ # override global LIBS that pulls in lots of craft we don't need here
-+ LIBS			=
-diff --git a/debian/patches/compress-add-support-for-libzstd.patch b/debian/patches/compress-add-support-for-libzstd.patch
-new file mode 100644
-index 0000000..78b54fb
---- /dev/null
-+++ b/debian/patches/compress-add-support-for-libzstd.patch
-@@ -0,0 +1,342 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Wed, 10 Apr 2019 08:40:50 +0200
-+Subject: [compress] add support for libzstd
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 592d0451494e815c4c8c74b914aaff69b640d1a2)
-+---
-+ configure.ac            |   2 +
-+ Makefile.am             |   5 ++
-+ libknet/Makefile.am     |   7 +++
-+ libknet/libknet.h       |   1 +
-+ kronosnet.spec.in       |  29 +++++++++
-+ libknet/compress.c      |   1 +
-+ libknet/compress_zstd.c | 160 ++++++++++++++++++++++++++++++++++++++++++++++++
-+ libknet/logging.c       |   1 +
-+ 8 files changed, 206 insertions(+)
-+ create mode 100644 libknet/compress_zstd.c
-+
-+diff --git a/configure.ac b/configure.ac
-+index 30c57f0..501053e 100644
-+--- a/configure.ac
-++++ b/configure.ac
-+@@ -124,6 +124,8 @@ AC_ARG_ENABLE([compress-all],
-+ 	[AS_HELP_STRING([--disable-compress-all],[disable libknet all compress modules support])],,
-+ 	[ enable_compress_all="yes" ])
-+ 
-++KNET_OPTION_DEFINES([zstd],[compress],[PKG_CHECK_MODULES([libzstd], [libzstd])])
-++
-+ KNET_OPTION_DEFINES([zlib],[compress],[PKG_CHECK_MODULES([zlib], [zlib])])
-+ KNET_OPTION_DEFINES([lz4],[compress],[PKG_CHECK_MODULES([liblz4], [liblz4])])
-+ KNET_OPTION_DEFINES([lzo2],[compress],[
-+diff --git a/Makefile.am b/Makefile.am
-+index 24a13a6..82cb1f5 100644
-+--- a/Makefile.am
-++++ b/Makefile.am
-+@@ -138,6 +138,11 @@ if BUILD_COMPRESS_BZIP2
-+ else
-+ 	sed -i -e "s#@bzip2@#bcond_with#g" $@-t
-+ endif
-++if BUILD_COMPRESS_ZSTD
-++	sed -i -e "s#@zstd@#bcond_without#g" $@-t
-++else
-++	sed -i -e "s#@zstd@#bcond_with#g" $@-t
-++endif
-+ if BUILD_KRONOSNETD
-+ 	sed -i -e "s#@kronosnetd@#bcond_without#g" $@-t
-+ else
-+diff --git a/libknet/Makefile.am b/libknet/Makefile.am
-+index 0be4fff..90ddfba 100644
-+--- a/libknet/Makefile.am
-++++ b/libknet/Makefile.am
-+@@ -103,6 +103,13 @@ pkglib_LTLIBRARIES	=
-+ # MODULE_LDFLAGS would mean a target-specific variable for Automake
-+ MODULELDFLAGS		= $(AM_LDFLAGS) -module -avoid-version -export-dynamic
-+ 
-++if BUILD_COMPRESS_ZSTD
-++pkglib_LTLIBRARIES	+= compress_zstd.la
-++compress_zstd_la_LDFLAGS = $(MODULELDFLAGS)
-++compress_zstd_la_CFLAGS	= $(AM_CFLAGS) $(libzstd_CFLAGS)
-++compress_zstd_la_LIBADD	= $(libzstd_LIBS)
-++endif
-++
-+ if BUILD_COMPRESS_ZLIB
-+ pkglib_LTLIBRARIES	+= compress_zlib.la
-+ compress_zlib_la_LDFLAGS = $(MODULELDFLAGS)
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index d16eb5d..3098eab 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -2053,6 +2053,7 @@ int knet_link_get_status(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t l
-+ #define KNET_SUB_LZO2COMP      73 /* compress_lzo.c */
-+ #define KNET_SUB_LZMACOMP      74 /* compress_lzma.c */
-+ #define KNET_SUB_BZIP2COMP     75 /* compress_bzip2.c */
-++#define KNET_SUB_ZSTDCOMP      76 /* compress_zstd.c */
-+ 
-+ #define KNET_SUB_UNKNOWN       UINT8_MAX - 1
-+ #define KNET_MAX_SUBSYSTEMS    UINT8_MAX
-+diff --git a/kronosnet.spec.in b/kronosnet.spec.in
-+index 2d4d059..442f3ae 100644
-+--- a/kronosnet.spec.in
-++++ b/kronosnet.spec.in
-+@@ -24,6 +24,7 @@
-+ %@lzo2@ lzo2
-+ %@lzma@ lzma
-+ %@bzip2@ bzip2
-++%@zstd@ zstd
-+ %@kronosnetd@ kronosnetd
-+ %@libnozzle@ libnozzle
-+ %@runautogen@ runautogen
-+@@ -60,6 +61,9 @@
-+ %if %{with bzip2}
-+ %global buildcompressbzip2 1
-+ %endif
-++%if %{with zstd}
-++%global buildcompresszstd 1
-++%endif
-+ %if %{with libnozzle}
-+ %global buildlibnozzle 1
-+ %endif
-+@@ -123,6 +127,9 @@ BuildRequires: xz-devel
-+ %if %{defined buildcompressbzip2}
-+ BuildRequires: /usr/include/bzlib.h
-+ %endif
-++%if %{defined buildcompresszstd}
-++BuildRequires: libzstd-devel
-++%endif
-+ %if %{defined buildkronosnetd}
-+ BuildRequires: pam-devel
-+ %endif
-+@@ -194,6 +201,11 @@ BuildRequires: libtool
-+ %else
-+ 	--disable-compress-bzip2 \
-+ %endif
-++%if %{defined buildcompresszstd}
-++	--enable-compress-zstd \
-++%else
-++	--disable-compress-zstd \
-++%endif
-+ %if %{defined buildkronosnetd}
-+ 	--enable-kronosnetd \
-+ %endif
-+@@ -490,6 +502,20 @@ Requires: libknet1 = %{version}-%{release}
-+ %{_libdir}/kronosnet/compress_bzip2.so
-+ %endif
-+ 
-++%if %{defined buildcompresszstd}
-++%package -n libknet1-compress-zstd-plugin
-++Group: System Environment/Libraries
-++Summary: libknet1 zstd support
-++Requires: libknet1 = %{version}-%{release}
-++
-++%description -n libknet1-compress-zstd-plugin
-++ zstd compression support for libknet1.
-++
-++%files -n libknet1-compress-zstd-plugin
-++%defattr(-,root,root,-)
-++%{_libdir}/kronosnet/compress_zstd.so
-++%endif
-++
-+ %package -n libknet1-crypto-plugins-all
-+ Group: System Environment/Libraries
-+ Summary: libknet1 crypto plugins meta package
-+@@ -523,6 +549,9 @@ Requires: libknet1-compress-lzma-plugin
-+ %if %{defined buildcompressbzip2}
-+ Requires: libknet1-compress-bzip2-plugin
-+ %endif
-++%if %{defined buildcompresszstd}
-++Requires: libknet1-compress-zstd-plugin
-++%endif
-+ 
-+ %description -n libknet1-compress-plugins-all
-+  meta package to install all of libknet1 compress plugins
-+diff --git a/libknet/compress.c b/libknet/compress.c
-+index 278ff44..7eab454 100644
-+--- a/libknet/compress.c
-++++ b/libknet/compress.c
-+@@ -40,6 +40,7 @@ static compress_model_t compress_modules_cmds[] = {
-+ 	{ "lzo2" , 4, WITH_COMPRESS_LZO2 , 0, NULL },
-+ 	{ "lzma" , 5, WITH_COMPRESS_LZMA , 0, NULL },
-+ 	{ "bzip2", 6, WITH_COMPRESS_BZIP2, 0, NULL },
-++	{ "zstd" , 7, WITH_COMPRESS_ZSTD, 0, NULL },
-+ 	{ NULL, 255, 0, 0, NULL }
-+ };
-+ 
-+diff --git a/libknet/compress_zstd.c b/libknet/compress_zstd.c
-+new file mode 100644
-+index 0000000..6f9b499
-+--- /dev/null
-++++ b/libknet/compress_zstd.c
-+@@ -0,0 +1,160 @@
-++/*
-++ * Copyright (C) 2017-2019 Red Hat, Inc.  All rights reserved.
-++ *
-++ * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-++ *
-++ * This software licensed under GPL-2.0+, LGPL-2.0+
-++ */
-++#define KNET_MODULE
-++
-++#include "config.h"
-++
-++#include <errno.h>
-++#include <stdlib.h>
-++#include <string.h>
-++#include <zstd.h>
-++
-++#include "logging.h"
-++#include "compress_model.h"
-++
-++struct zstd_ctx {
-++	ZSTD_CCtx* cctx;
-++	ZSTD_DCtx* dctx;
-++};
-++
-++static int zstd_is_init(
-++	knet_handle_t knet_h,
-++	int method_idx)
-++{
-++	if (knet_h->compress_int_data[method_idx]) {
-++		return 1;
-++	}
-++	return 0;
-++}
-++
-++static void zstd_fini(
-++	knet_handle_t knet_h,
-++	int method_idx)
-++{
-++	struct zstd_ctx *zstd_ctx = knet_h->compress_int_data[knet_h->compress_model];
-++
-++	if (zstd_ctx) {
-++		if (zstd_ctx->cctx) {
-++			ZSTD_freeCCtx(zstd_ctx->cctx);
-++		}
-++		if (zstd_ctx->dctx) {
-++			ZSTD_freeDCtx(zstd_ctx->dctx);
-++		}
-++		free(knet_h->compress_int_data[method_idx]);
-++		knet_h->compress_int_data[method_idx] = NULL;
-++	}
-++	return;
-++}
-++
-++static int zstd_init(
-++	knet_handle_t knet_h,
-++	int method_idx)
-++{
-++	struct zstd_ctx *zstd_ctx;
-++	int err = 0;
-++
-++	if (!knet_h->compress_int_data[method_idx]) {
-++		zstd_ctx = malloc(sizeof(struct zstd_ctx));
-++		if (!zstd_ctx) {
-++			errno = ENOMEM;
-++			return -1;
-++		}
-++		memset(zstd_ctx, 0, sizeof(struct zstd_ctx));
-++
-++		zstd_ctx->cctx = ZSTD_createCCtx();
-++		if (!zstd_ctx->cctx) {
-++			log_err(knet_h, KNET_SUB_ZSTDCOMP, "Unable to create compression context");
-++			err = -1;
-++			goto out_err;
-++		}
-++
-++		zstd_ctx->dctx = ZSTD_createDCtx();
-++		if (!zstd_ctx->dctx) {
-++			log_err(knet_h, KNET_SUB_ZSTDCOMP, "Unable to create decompression context");
-++			err = -1;
-++			goto out_err;
-++		}
-++
-++		knet_h->compress_int_data[method_idx] = zstd_ctx;
-++	}
-++
-++out_err:
-++	if (err) {
-++		zstd_fini(knet_h, method_idx);
-++	}
-++	return err;
-++}
-++
-++static int zstd_compress(
-++	knet_handle_t knet_h,
-++	const unsigned char *buf_in,
-++	const ssize_t buf_in_len,
-++	unsigned char *buf_out,
-++	ssize_t *buf_out_len)
-++{
-++	struct zstd_ctx *zstd_ctx = knet_h->compress_int_data[knet_h->compress_model];
-++	size_t compress_size;
-++
-++	compress_size = ZSTD_compressCCtx(zstd_ctx->cctx,
-++					  buf_out, *buf_out_len,
-++					  buf_in, buf_in_len,
-++					  knet_h->compress_level);
-++
-++	if (ZSTD_isError(compress_size)) {
-++		log_err(knet_h, KNET_SUB_ZSTDCOMP, "error compressing packet: %s", ZSTD_getErrorName(compress_size));
-++		/*
-++		 * ZSTD has lots of internal errors that are not easy to map
-++		 * to standard errnos. Use a generic one for now
-++		 */
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	*buf_out_len = compress_size;
-++
-++	return 0;
-++}
-++
-++static int zstd_decompress(
-++	knet_handle_t knet_h,
-++	const unsigned char *buf_in,
-++	const ssize_t buf_in_len,
-++	unsigned char *buf_out,
-++	ssize_t *buf_out_len)
-++{
-++	struct zstd_ctx *zstd_ctx = knet_h->compress_int_data[knet_h->compress_model];
-++	size_t decompress_size;
-++
-++	decompress_size = ZSTD_decompressDCtx(zstd_ctx->dctx,
-++					      buf_out, *buf_out_len,
-++					      buf_in, buf_in_len);
-++
-++	if (ZSTD_isError(decompress_size)) {
-++		log_err(knet_h, KNET_SUB_ZSTDCOMP, "error decompressing packet: %s", ZSTD_getErrorName(decompress_size));
-++		/*
-++		 * ZSTD has lots of internal errors that are not easy to map
-++		 * to standard errnos. Use a generic one for now
-++		 */
-++		errno = EINVAL;
-++		return -1;
-++	}
-++
-++	*buf_out_len = decompress_size;
-++
-++	return 0;
-++}
-++
-++compress_ops_t compress_model = {
-++	KNET_COMPRESS_MODEL_ABI,
-++	zstd_is_init,
-++	zstd_init,
-++	zstd_fini,
-++	NULL,
-++	zstd_compress,
-++	zstd_decompress
-++};
-+diff --git a/libknet/logging.c b/libknet/logging.c
-+index 98bcfd1..5c91257 100644
-+--- a/libknet/logging.c
-++++ b/libknet/logging.c
-+@@ -47,6 +47,7 @@ static struct pretty_names subsystem_names[] =
-+ 	{ "lzo2comp", KNET_SUB_LZO2COMP },
-+ 	{ "lzmacomp", KNET_SUB_LZMACOMP },
-+ 	{ "bzip2comp", KNET_SUB_BZIP2COMP },
-++	{ "zstdcomp", KNET_SUB_ZSTDCOMP },
-+ 	{ "unknown", KNET_SUB_UNKNOWN }		/* unknown MUST always be last in this array */
-+ };
-+ 
-diff --git a/debian/patches/crypto-fix-openssl1.0-initialization-code.patch b/debian/patches/crypto-fix-openssl1.0-initialization-code.patch
-new file mode 100644
-index 0000000..e01d382
---- /dev/null
-+++ b/debian/patches/crypto-fix-openssl1.0-initialization-code.patch
-@@ -0,0 +1,98 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 28 May 2019 06:14:29 +0200
-+Subject: [crypto] fix openssl1.0 initialization code
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 0b20488500e8d13f17b7f584bdc7a301f44dbfe1)
-+---
-+ libknet/crypto_openssl.c | 28 ++++++++++++++++------------
-+ 1 file changed, 16 insertions(+), 12 deletions(-)
-+
-+diff --git a/libknet/crypto_openssl.c b/libknet/crypto_openssl.c
-+index 5c7a74a..26acea8 100644
-+--- a/libknet/crypto_openssl.c
-++++ b/libknet/crypto_openssl.c
-+@@ -12,6 +12,7 @@
-+ #include <string.h>
-+ #include <errno.h>
-+ #include <dlfcn.h>
-++#include <stdlib.h>
-+ #include <openssl/conf.h>
-+ #include <openssl/evp.h>
-+ #include <openssl/hmac.h>
-+@@ -43,6 +44,8 @@ struct opensslcrypto_instance {
-+ 	const EVP_MD *crypto_hash_type;
-+ };
-+ 
-++static int openssl_is_init = 0;
-++
-+ /*
-+  * crypt/decrypt functions openssl1.0
-+  */
-+@@ -438,6 +441,11 @@ static void openssl_internal_lock_cleanup(void)
-+ 	return;
-+ }
-+ 
-++static void openssl_atexit_handler(void)
-++{
-++	openssl_internal_lock_cleanup();
-++}
-++
-+ static int openssl_internal_lock_setup(void)
-+ {
-+ 	int savederrno = 0, err = 0;
-+@@ -461,6 +469,9 @@ static int openssl_internal_lock_setup(void)
-+ 	CRYPTO_set_id_callback((void *)openssl_internal_thread_id);
-+ 	CRYPTO_set_locking_callback((void *)&openssl_internal_locking_callback);
-+ 
-++	if (atexit(openssl_atexit_handler)) {
-++		err = -1;
-++	}
-+ out:
-+ 	if (err) {
-+ 		openssl_internal_lock_cleanup();
-+@@ -477,9 +488,6 @@ static void opensslcrypto_fini(
-+ 	struct opensslcrypto_instance *opensslcrypto_instance = crypto_instance->model_instance;
-+ 
-+ 	if (opensslcrypto_instance) {
-+-#ifdef BUILDCRYPTOOPENSSL10
-+-		openssl_internal_lock_cleanup();
-+-#endif
-+ 		if (opensslcrypto_instance->private_key) {
-+ 			free(opensslcrypto_instance->private_key);
-+ 			opensslcrypto_instance->private_key = NULL;
-+@@ -496,7 +504,6 @@ static int opensslcrypto_init(
-+ 	struct crypto_instance *crypto_instance,
-+ 	struct knet_handle_crypto_cfg *knet_handle_crypto_cfg)
-+ {
-+-	static int openssl_is_init = 0;
-+ 	struct opensslcrypto_instance *opensslcrypto_instance = NULL;
-+ 	int savederrno;
-+ 
-+@@ -509,6 +516,11 @@ static int opensslcrypto_init(
-+ #ifdef BUILDCRYPTOOPENSSL10
-+ 		ERR_load_crypto_strings();
-+ 		OPENSSL_add_all_algorithms_noconf();
-++		if (openssl_internal_lock_setup() < 0) {
-++			log_err(knet_h, KNET_SUB_OPENSSLCRYPTO, "Unable to init openssl");
-++			errno = EAGAIN;
-++			return -1;
-++		}
-+ #endif
-+ #ifdef BUILDCRYPTOOPENSSL11
-+ 		if (!OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \
-+@@ -521,14 +533,6 @@ static int opensslcrypto_init(
-+ 		openssl_is_init = 1;
-+ 	}
-+ 
-+-#ifdef BUILDCRYPTOOPENSSL10
-+-	if (openssl_internal_lock_setup() < 0) {
-+-		log_err(knet_h, KNET_SUB_OPENSSLCRYPTO, "Unable to init openssl");
-+-		errno = EAGAIN;
-+-		return -1;
-+-	}
-+-#endif
-+-
-+ 	crypto_instance->model_instance = malloc(sizeof(struct opensslcrypto_instance));
-+ 	if (!crypto_instance->model_instance) {
-+ 		log_err(knet_h, KNET_SUB_OPENSSLCRYPTO, "Unable to allocate memory for openssl model instance");
-diff --git a/debian/patches/crypto-hide-errors-generated-by-openssl-1.1.1c.patch b/debian/patches/crypto-hide-errors-generated-by-openssl-1.1.1c.patch
-new file mode 100644
-index 0000000..5818833
---- /dev/null
-+++ b/debian/patches/crypto-hide-errors-generated-by-openssl-1.1.1c.patch
-@@ -0,0 +1,137 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 11 Jun 2019 11:54:08 +0200
-+Subject: [crypto] hide errors generated by openssl 1.1.1c
-+
-+see also:
-+https://github.com/kronosnet/kronosnet/issues/226
-+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=930061#12
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 5333de6a056af75d12eb0a2cc2e46e7b2bbf9082)
-+---
-+ build-aux/knet_valgrind_memcheck.supp | 115 ++++++++++++++++++++++++++++++++++
-+ 1 file changed, 115 insertions(+)
-+
-+diff --git a/build-aux/knet_valgrind_memcheck.supp b/build-aux/knet_valgrind_memcheck.supp
-+index a34ab93..92eabba 100644
-+--- a/build-aux/knet_valgrind_memcheck.supp
-++++ b/build-aux/knet_valgrind_memcheck.supp
-+@@ -612,3 +612,118 @@
-+    fun:malloc
-+    fun:dl_open_worker
-+ }
-++{
-++   openssl 1.1.1c missing fix from master
-++   Memcheck:Cond
-++   obj:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
-++   fun:RAND_DRBG_generate
-++   obj:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
-++   fun:RAND_DRBG_instantiate
-++   obj:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
-++   fun:RAND_DRBG_get0_public
-++   obj:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
-++   fun:encrypt_openssl
-++   fun:opensslcrypto_encrypt_and_signv
-++   fun:opensslcrypto_encrypt_and_sign
-++   fun:_handle_check_each
-++   fun:_send_pings
-++   fun:_handle_heartbt_thread
-++   fun:start_thread
-++}
-++{
-++   openssl 1.1.1c missing fix from master
-++   Memcheck:Cond
-++   obj:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
-++   obj:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
-++   fun:RAND_DRBG_generate
-++   obj:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
-++   fun:RAND_DRBG_instantiate
-++   obj:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
-++   fun:RAND_DRBG_get0_public
-++   obj:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
-++   fun:encrypt_openssl
-++   fun:opensslcrypto_encrypt_and_signv
-++   fun:opensslcrypto_encrypt_and_sign
-++   fun:_handle_check_each
-++   fun:_send_pings
-++   fun:_handle_heartbt_thread
-++}
-++{
-++   openssl 1.1.1c missing fix from master
-++   Memcheck:Cond
-++   obj:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
-++   obj:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
-++   fun:RAND_DRBG_generate
-++   fun:RAND_DRBG_bytes
-++   fun:encrypt_openssl
-++   fun:opensslcrypto_encrypt_and_signv
-++   fun:opensslcrypto_encrypt_and_sign
-++   fun:_handle_check_each
-++   fun:_send_pings
-++   fun:_handle_heartbt_thread
-++   fun:start_thread
-++   fun:clone
-++}
-++{
-++   openssl 1.1.1c missing fix from master
-++   Memcheck:Cond
-++   obj:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
-++   fun:RAND_DRBG_generate
-++   fun:RAND_DRBG_bytes
-++   fun:encrypt_openssl
-++   fun:opensslcrypto_encrypt_and_signv
-++   fun:opensslcrypto_encrypt_and_sign
-++   fun:_handle_check_each
-++   fun:_send_pings
-++   fun:_handle_heartbt_thread
-++   fun:start_thread
-++   fun:clone
-++}
-++{
-++   openssl 1.1.1c missing fix from master
-++   Memcheck:Param
-++   socketcall.sendto(msg)
-++   fun:sendto
-++   fun:_handle_check_each
-++   fun:_send_pings
-++   fun:_handle_heartbt_thread
-++   fun:start_thread
-++   fun:clone
-++}
-++{
-++
-++   openssl 1.1.1c missing fix from master
-++   Memcheck:Param
-++   socketcall.sendto(msg)
-++   fun:sendto
-++   fun:_parse_recv_from_links
-++   fun:_handle_recv_from_links
-++   fun:_handle_recv_from_links_thread
-++   fun:start_thread
-++   fun:clone
-++}
-++{
-++   openssl 1.1.1c missing fix from master
-++   Memcheck:Param
-++   socketcall.sendto(msg)
-++   fun:sendto
-++   fun:_handle_check_link_pmtud
-++   fun:_handle_check_pmtud
-++   fun:_handle_pmtud_link_thread
-++   fun:start_thread
-++   fun:clone
-++}
-++{
-++   openssl 1.1.1c missing fix from master
-++   Memcheck:Param
-++   sendmsg(msg.msg_iov[0])
-++   fun:__libc_sendmsg
-++   fun:sendmsg
-++   fun:_sendmmsg
-++   fun:_dispatch_to_links
-++   fun:_parse_recv_from_sock
-++   fun:_handle_send_to_links
-++   fun:_handle_send_to_links_thread
-++   fun:start_thread
-++   fun:clone
-++}
-diff --git a/debian/patches/crypto-make-sure-to-clear-all-security-info-on-crypto_fin.patch b/debian/patches/crypto-make-sure-to-clear-all-security-info-on-crypto_fin.patch
-new file mode 100644
-index 0000000..0d373a8
---- /dev/null
-+++ b/debian/patches/crypto-make-sure-to-clear-all-security-info-on-crypto_fin.patch
-@@ -0,0 +1,51 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Mon, 27 May 2019 12:25:55 +0200
-+Subject: [crypto] make sure to clear all security info on crypto_fini
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 6888d04108a7eff36f4c562d464190e9886a073a)
-+---
-+ libknet/crypto.c         | 4 ++++
-+ libknet/crypto_nss.c     | 1 -
-+ libknet/crypto_openssl.c | 1 -
-+ 3 files changed, 4 insertions(+), 2 deletions(-)
-+
-+diff --git a/libknet/crypto.c b/libknet/crypto.c
-+index 41d67c9..5d39048 100644
-+--- a/libknet/crypto.c
-++++ b/libknet/crypto.c
-+@@ -178,6 +178,10 @@ void crypto_fini(
-+ 			crypto_modules_cmds[model].ops->fini(knet_h);
-+ 		}
-+ 		free(knet_h->crypto_instance);
-++		knet_h->sec_header_size = 0;
-++		knet_h->sec_block_size = 0;
-++		knet_h->sec_hash_size = 0;
-++		knet_h->sec_salt_size = 0;
-+ 		knet_h->crypto_instance = NULL;
-+ 	}
-+ 
-+diff --git a/libknet/crypto_nss.c b/libknet/crypto_nss.c
-+index 640b560..cc83827 100644
-+--- a/libknet/crypto_nss.c
-++++ b/libknet/crypto_nss.c
-+@@ -740,7 +740,6 @@ static void nsscrypto_fini(
-+ 		}
-+ 		free(nsscrypto_instance);
-+ 		knet_h->crypto_instance->model_instance = NULL;
-+-		knet_h->sec_header_size = 0;
-+ 	}
-+ 
-+ 	return;
-+diff --git a/libknet/crypto_openssl.c b/libknet/crypto_openssl.c
-+index 03d1014..73058cc 100644
-+--- a/libknet/crypto_openssl.c
-++++ b/libknet/crypto_openssl.c
-+@@ -485,7 +485,6 @@ static void opensslcrypto_fini(
-+ 		}
-+ 		free(opensslcrypto_instance);
-+ 		knet_h->crypto_instance->model_instance = NULL;
-+-		knet_h->sec_header_size = 0;
-+ 	}
-+ 
-+ 	return;
-diff --git a/debian/patches/crypto-make-sure-to-trigger-a-PMTUd-rerun-on-each-good-cr.patch b/debian/patches/crypto-make-sure-to-trigger-a-PMTUd-rerun-on-each-good-cr.patch
-new file mode 100644
-index 0000000..8c99023
---- /dev/null
-+++ b/debian/patches/crypto-make-sure-to-trigger-a-PMTUd-rerun-on-each-good-cr.patch
-@@ -0,0 +1,25 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Mon, 27 May 2019 12:42:33 +0200
-+Subject: [crypto] make sure to trigger a PMTUd rerun on each good crypto
-+ config change
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit c9edaa7b632ee853351730ad4dcad7471919bb91)
-+---
-+ libknet/handle.c | 3 +++
-+ 1 file changed, 3 insertions(+)
-+
-+diff --git a/libknet/handle.c b/libknet/handle.c
-+index fd26bea..7009cc3 100644
-+--- a/libknet/handle.c
-++++ b/libknet/handle.c
-+@@ -1408,6 +1408,9 @@ int knet_handle_crypto(knet_handle_t knet_h, struct knet_handle_crypto_cfg *knet
-+ 	}
-+ 
-+ exit_unlock:
-++	if (!err) {
-++		force_pmtud_run(knet_h, KNET_SUB_CRYPTO);
-++	}
-+ 	pthread_rwlock_unlock(&knet_h->global_rwlock);
-+ 	errno = err ? savederrno : 0;
-+ 	return err;
-diff --git a/debian/patches/crypto-openssl-drop-calls-to-RAND_seed-as-they-don-t-real.patch b/debian/patches/crypto-openssl-drop-calls-to-RAND_seed-as-they-don-t-real.patch
-new file mode 100644
-index 0000000..cf918e1
---- /dev/null
-+++ b/debian/patches/crypto-openssl-drop-calls-to-RAND_seed-as-they-don-t-real.patch
-@@ -0,0 +1,65 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 11 Jun 2019 09:26:02 +0200
-+Subject: =?utf-8?q?=5Bcrypto=5D_openssl=3A_drop_calls_to_RAND=5Fseed_as_th?=
-+ =?utf-8?q?ey_don=C2=B4t_really_help_RNG?=
-+
-+See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=930061#12 for reference
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit a3c5adee1d30a751e76386ef31c1a817595bfd1b)
-+---
-+ libknet/crypto_openssl.c | 20 --------------------
-+ 1 file changed, 20 deletions(-)
-+
-+diff --git a/libknet/crypto_openssl.c b/libknet/crypto_openssl.c
-+index 615a9e5..999ed93 100644
-+--- a/libknet/crypto_openssl.c
-++++ b/libknet/crypto_openssl.c
-+@@ -69,11 +69,6 @@ static int encrypt_openssl(
-+ 
-+ 	EVP_CIPHER_CTX_init(&ctx);
-+ 
-+-	/*
-+-	 * contribute to PRNG for each packet we send/receive
-+-	 */
-+-	RAND_seed((unsigned char *)iov[iovcnt - 1].iov_base, iov[iovcnt - 1].iov_len);
-+-
-+ 	if (!RAND_bytes(salt, SALT_SIZE)) {
-+ 		ERR_error_string_n(ERR_get_error(), sslerr, sizeof(sslerr));
-+ 		log_err(knet_h, KNET_SUB_OPENSSLCRYPTO, "Unable to get random salt data: %s", sslerr);
-+@@ -130,11 +125,6 @@ static int decrypt_openssl (
-+ 
-+ 	EVP_CIPHER_CTX_init(&ctx);
-+ 
-+-	/*
-+-	 * contribute to PRNG for each packet we send/receive
-+-	 */
-+-	RAND_seed(buf_in, buf_in_len);
-+-
-+ 	/*
-+ 	 * add warning re keylength
-+ 	 */
-+@@ -181,11 +171,6 @@ static int encrypt_openssl(
-+ 
-+ 	ctx = EVP_CIPHER_CTX_new();
-+ 
-+-	/*
-+-	 * contribute to PRNG for each packet we send/receive
-+-	 */
-+-	RAND_seed((unsigned char *)iov[iovcnt - 1].iov_base, iov[iovcnt - 1].iov_len);
-+-
-+ 	if (!RAND_bytes(salt, SALT_SIZE)) {
-+ 		ERR_error_string_n(ERR_get_error(), sslerr, sizeof(sslerr));
-+ 		log_err(knet_h, KNET_SUB_OPENSSLCRYPTO, "Unable to get random salt data: %s", sslerr);
-+@@ -248,11 +233,6 @@ static int decrypt_openssl (
-+ 
-+ 	ctx = EVP_CIPHER_CTX_new();
-+ 
-+-	/*
-+-	 * contribute to PRNG for each packet we send/receive
-+-	 */
-+-	RAND_seed(buf_in, buf_in_len);
-+-
-+ 	/*
-+ 	 * add warning re keylength
-+ 	 */
-diff --git a/debian/patches/crypto-openssl-error-strings-release.patch b/debian/patches/crypto-openssl-error-strings-release.patch
-new file mode 100644
-index 0000000..6bcd03a
---- /dev/null
-+++ b/debian/patches/crypto-openssl-error-strings-release.patch
-@@ -0,0 +1,28 @@
-+From: yuan ren <yren at suse.com>
-+Date: Thu, 6 Jun 2019 13:46:01 +0800
-+Subject: [crypto]openssl error strings release
-+
-+In versions prior to OpenSSL 1.1.0, ERR_free_strings() releases
-+any resources created by ERR_load_crypto_strings.
-+
-+Signed-off-by: yuan ren <yren at suse.com>
-+(cherry picked from commit 80b7d93723e779b914f73ec2e8cd2ac632972eda)
-+---
-+ libknet/crypto_openssl.c | 4 ++++
-+ 1 file changed, 4 insertions(+)
-+
-+diff --git a/libknet/crypto_openssl.c b/libknet/crypto_openssl.c
-+index 26acea8..615a9e5 100644
-+--- a/libknet/crypto_openssl.c
-++++ b/libknet/crypto_openssl.c
-+@@ -496,6 +496,10 @@ static void opensslcrypto_fini(
-+ 		crypto_instance->model_instance = NULL;
-+ 	}
-+ 
-++#ifdef BUILDCRYPTOOPENSSL10
-++	ERR_free_strings();
-++#endif
-++
-+ 	return;
-+ }
-+ 
-diff --git a/debian/patches/crypto-rework-knet_handle_crypto-external-API-to-be-more-.patch b/debian/patches/crypto-rework-knet_handle_crypto-external-API-to-be-more-.patch
-new file mode 100644
-index 0000000..a555595
---- /dev/null
-+++ b/debian/patches/crypto-rework-knet_handle_crypto-external-API-to-be-more-.patch
-@@ -0,0 +1,598 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 28 May 2019 05:24:47 +0200
-+Subject: [crypto] rework knet_handle_crypto external API to be more solid
-+
-+the API was rather weak and could potentially leave traffic uncrypted
-+in case of certain, corner case, failures.
-+
-+this patch is a subset of a bigger rework of the crypto layer that
-+will in future allow runtime reconfiguration without traffic disruption
-+of the crypto config.
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 50b998f37c9285bf334eb578319030c06af141e0)
-+---
-+ libknet/crypto_model.h                 | 10 +++-
-+ libknet/libknet.h                      |  4 +-
-+ libknet/crypto.c                       | 63 ++++++++++++++--------
-+ libknet/crypto_nss.c                   | 56 +++++++++++---------
-+ libknet/crypto_openssl.c               | 30 ++++++-----
-+ libknet/handle.c                       |  3 +-
-+ libknet/tests/api_knet_handle_crypto.c | 96 +++++++++++++++++++++++++++++++++-
-+ 7 files changed, 190 insertions(+), 72 deletions(-)
-+
-+diff --git a/libknet/crypto_model.h b/libknet/crypto_model.h
-+index f11299a..9bb4f17 100644
-+--- a/libknet/crypto_model.h
-++++ b/libknet/crypto_model.h
-+@@ -14,9 +14,13 @@
-+ struct crypto_instance {
-+ 	int	model;
-+ 	void	*model_instance;
-++	size_t	sec_header_size;
-++	size_t	sec_block_size;
-++	size_t	sec_hash_size;
-++	size_t	sec_salt_size;
-+ };
-+ 
-+-#define KNET_CRYPTO_MODEL_ABI 1
-++#define KNET_CRYPTO_MODEL_ABI 2
-+ 
-+ /*
-+  * see compress_model.h for explanation of the various lib related functions
-+@@ -24,8 +28,10 @@ struct crypto_instance {
-+ typedef struct {
-+ 	uint8_t abi_ver;
-+ 	int (*init)	(knet_handle_t knet_h,
-++			 struct crypto_instance *crypto_instance,
-+ 			 struct knet_handle_crypto_cfg *knet_handle_crypto_cfg);
-+-	void (*fini)	(knet_handle_t knet_h);
-++	void (*fini)	(knet_handle_t knet_h,
-++			 struct crypto_instance *crypto_instance);
-+ 	int (*crypt)	(knet_handle_t knet_h,
-+ 			 const unsigned char *buf_in,
-+ 			 const ssize_t buf_in_len,
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index 183c92d..85c06cc 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -700,9 +700,7 @@ struct knet_handle_crypto_cfg {
-+  *              1) failure to obtain locking
-+  *              2) errors to initializing the crypto level.
-+  *   This can happen even in subsequent calls to knet_handle_crypto.
-+- *   A failure in crypto init, might leave your traffic unencrypted!
-+- *   It's best to stop data forwarding (see knet_handle_setfwd(3)), change crypto config,
-+- *   start forward again.
-++ *   A failure in crypto init will restore the previous crypto configuration.
-+  *
-+  * @return
-+  * knet_handle_crypto returns:
-+diff --git a/libknet/crypto.c b/libknet/crypto.c
-+index 5d39048..6c340f5 100644
-+--- a/libknet/crypto.c
-++++ b/libknet/crypto.c
-+@@ -80,8 +80,11 @@ int crypto_init(
-+ 	knet_handle_t knet_h,
-+ 	struct knet_handle_crypto_cfg *knet_handle_crypto_cfg)
-+ {
-+-	int savederrno = 0;
-++	int err = 0, savederrno = 0;
-+ 	int model = 0;
-++	struct crypto_instance *current = NULL, *new = NULL;
-++
-++	current = knet_h->crypto_instance;
-+ 
-+ 	model = crypto_get_model(knet_handle_crypto_cfg->crypto_model);
-+ 	if (model < 0) {
-+@@ -105,16 +108,18 @@ int crypto_init(
-+ 		crypto_modules_cmds[model].ops = load_module (knet_h, "crypto", crypto_modules_cmds[model].model_name);
-+ 		if (!crypto_modules_cmds[model].ops) {
-+ 			savederrno = errno;
-++			err = -1;
-+ 			log_err(knet_h, KNET_SUB_CRYPTO, "Unable to load %s lib", crypto_modules_cmds[model].model_name);
-+-			goto out_err;
-++			goto out;
-+ 		}
-+ 		if (crypto_modules_cmds[model].ops->abi_ver != KNET_CRYPTO_MODEL_ABI) {
-++			savederrno = EINVAL;
-++			err = -1;
-+ 			log_err(knet_h, KNET_SUB_CRYPTO,
-+ 				"ABI mismatch loading module %s. knet ver: %d, module ver: %d",
-+ 				crypto_modules_cmds[model].model_name, KNET_CRYPTO_MODEL_ABI,
-+ 				crypto_modules_cmds[model].ops->abi_ver);
-+-			savederrno = EINVAL;
-+-			goto out_err;
-++			goto out;
-+ 		}
-+ 		crypto_modules_cmds[model].loaded = 1;
-+ 	}
-+@@ -125,12 +130,13 @@ int crypto_init(
-+ 		  knet_handle_crypto_cfg->crypto_cipher_type,
-+ 		  knet_handle_crypto_cfg->crypto_hash_type);
-+ 
-+-	knet_h->crypto_instance = malloc(sizeof(struct crypto_instance));
-++	new = malloc(sizeof(struct crypto_instance));
-+ 
-+-	if (!knet_h->crypto_instance) {
-+-		log_err(knet_h, KNET_SUB_CRYPTO, "Unable to allocate memory for crypto instance");
-++	if (!new) {
-+ 		savederrno = ENOMEM;
-+-		goto out_err;
-++		err = -1;
-++		log_err(knet_h, KNET_SUB_CRYPTO, "Unable to allocate memory for crypto instance");
-++		goto out;
-+ 	}
-+ 
-+ 	/*
-+@@ -138,32 +144,44 @@ int crypto_init(
-+ 	 * it will clean everything by itself.
-+ 	 * crypto_modules_cmds.ops->fini is not invoked on error.
-+ 	 */
-+-	knet_h->crypto_instance->model = model;
-+-	if (crypto_modules_cmds[knet_h->crypto_instance->model].ops->init(knet_h, knet_handle_crypto_cfg)) {
-++	new->model = model;
-++	if (crypto_modules_cmds[model].ops->init(knet_h, new, knet_handle_crypto_cfg)) {
-+ 		savederrno = errno;
-+-		goto out_err;
-++		err = -1;
-++		goto out;
-+ 	}
-+ 
-+ 	log_debug(knet_h, KNET_SUB_CRYPTO, "security network overhead: %zu", knet_h->sec_header_size);
-+-	pthread_rwlock_unlock(&shlib_rwlock);
-+-	return 0;
-+ 
-+-out_err:
-+-	if (knet_h->crypto_instance) {
-+-		free(knet_h->crypto_instance);
-+-		knet_h->crypto_instance = NULL;
-++out:
-++	if (!err) {
-++		knet_h->crypto_instance = new;
-++		knet_h->sec_header_size = new->sec_header_size;
-++		knet_h->sec_block_size = new->sec_block_size;
-++		knet_h->sec_hash_size = new->sec_hash_size;
-++		knet_h->sec_salt_size = new->sec_salt_size;
-++
-++		if (current) {
-++			if (crypto_modules_cmds[current->model].ops->fini != NULL) {
-++				crypto_modules_cmds[current->model].ops->fini(knet_h, current);
-++			}
-++			free(current);
-++		}
-++	} else {
-++		if (new) {
-++			free(new);
-++		}
-+ 	}
-+ 
-+ 	pthread_rwlock_unlock(&shlib_rwlock);
-+-	errno = savederrno;
-+-	return -1;
-++	errno = err ? savederrno : 0;
-++	return err;
-+ }
-+ 
-+ void crypto_fini(
-+ 	knet_handle_t knet_h)
-+ {
-+ 	int savederrno = 0;
-+-	int model = 0;
-+ 
-+ 	savederrno = pthread_rwlock_wrlock(&shlib_rwlock);
-+ 	if (savederrno) {
-+@@ -173,9 +191,8 @@ void crypto_fini(
-+ 	}
-+ 
-+ 	if (knet_h->crypto_instance) {
-+-		model = knet_h->crypto_instance->model;
-+-		if (crypto_modules_cmds[model].ops->fini != NULL) {
-+-			crypto_modules_cmds[model].ops->fini(knet_h);
-++		if (crypto_modules_cmds[knet_h->crypto_instance->model].ops->fini != NULL) {
-++			crypto_modules_cmds[knet_h->crypto_instance->model].ops->fini(knet_h, knet_h->crypto_instance);
-+ 		}
-+ 		free(knet_h->crypto_instance);
-+ 		knet_h->sec_header_size = 0;
-+diff --git a/libknet/crypto_nss.c b/libknet/crypto_nss.c
-+index cc83827..5c3a437 100644
-+--- a/libknet/crypto_nss.c
-++++ b/libknet/crypto_nss.c
-+@@ -155,9 +155,11 @@ static int nssstring_to_crypto_cipher_type(const char* crypto_cipher_type)
-+ 	return -1;
-+ }
-+ 
-+-static PK11SymKey *nssimport_symmetric_key(knet_handle_t knet_h, enum sym_key_type key_type)
-++static PK11SymKey *nssimport_symmetric_key(knet_handle_t knet_h,
-++					   struct crypto_instance *crypto_instance,
-++					   enum sym_key_type key_type)
-+ {
-+-	struct nsscrypto_instance *instance = knet_h->crypto_instance->model_instance;
-++	struct nsscrypto_instance *instance = crypto_instance->model_instance;
-+ 	SECItem key_item;
-+ 	PK11SlotInfo *slot;
-+ 	PK11SymKey *res_key;
-+@@ -323,15 +325,15 @@ exit_res_key:
-+ 	return (res_key);
-+ }
-+ 
-+-static int init_nss_crypto(knet_handle_t knet_h)
-++static int init_nss_crypto(knet_handle_t knet_h, struct crypto_instance *crypto_instance)
-+ {
-+-	struct nsscrypto_instance *instance = knet_h->crypto_instance->model_instance;
-++	struct nsscrypto_instance *instance = crypto_instance->model_instance;
-+ 
-+ 	if (!cipher_to_nss[instance->crypto_cipher_type]) {
-+ 		return 0;
-+ 	}
-+ 
-+-	instance->nss_sym_key = nssimport_symmetric_key(knet_h, SYM_KEY_TYPE_CRYPT);
-++	instance->nss_sym_key = nssimport_symmetric_key(knet_h, crypto_instance, SYM_KEY_TYPE_CRYPT);
-+ 	if (instance->nss_sym_key == NULL) {
-+ 		errno = ENXIO; /* NSS reported error */
-+ 		return -1;
-+@@ -512,15 +514,15 @@ static int nssstring_to_crypto_hash_type(const char* crypto_hash_type)
-+ 	return -1;
-+ }
-+ 
-+-static int init_nss_hash(knet_handle_t knet_h)
-++static int init_nss_hash(knet_handle_t knet_h, struct crypto_instance *crypto_instance)
-+ {
-+-	struct nsscrypto_instance *instance = knet_h->crypto_instance->model_instance;
-++	struct nsscrypto_instance *instance = crypto_instance->model_instance;
-+ 
-+ 	if (!hash_to_nss[instance->crypto_hash_type]) {
-+ 		return 0;
-+ 	}
-+ 
-+-	instance->nss_sym_key_sign = nssimport_symmetric_key(knet_h, SYM_KEY_TYPE_HASH);
-++	instance->nss_sym_key_sign = nssimport_symmetric_key(knet_h, crypto_instance, SYM_KEY_TYPE_HASH);
-+ 	if (instance->nss_sym_key_sign == NULL) {
-+ 		errno = ENXIO; /* NSS reported error */
-+ 		return -1;
-+@@ -594,7 +596,7 @@ out:
-+  * global/glue nss functions
-+  */
-+ 
-+-static int init_nss(knet_handle_t knet_h)
-++static int init_nss(knet_handle_t knet_h, struct crypto_instance *crypto_instance)
-+ {
-+ 	static int at_exit_registered = 0;
-+ 
-+@@ -617,11 +619,11 @@ static int init_nss(knet_handle_t knet_h)
-+ 		nss_db_is_init = 1;
-+ 	}
-+ 
-+-	if (init_nss_crypto(knet_h) < 0) {
-++	if (init_nss_crypto(knet_h, crypto_instance) < 0) {
-+ 		return -1;
-+ 	}
-+ 
-+-	if (init_nss_hash(knet_h) < 0) {
-++	if (init_nss_hash(knet_h, crypto_instance) < 0) {
-+ 		return -1;
-+ 	}
-+ 
-+@@ -725,9 +727,10 @@ static int nsscrypto_authenticate_and_decrypt (
-+ }
-+ 
-+ static void nsscrypto_fini(
-+-	knet_handle_t knet_h)
-++	knet_handle_t knet_h,
-++	struct crypto_instance *crypto_instance)
-+ {
-+-	struct nsscrypto_instance *nsscrypto_instance = knet_h->crypto_instance->model_instance;
-++	struct nsscrypto_instance *nsscrypto_instance = crypto_instance->model_instance;
-+ 
-+ 	if (nsscrypto_instance) {
-+ 		if (nsscrypto_instance->nss_sym_key) {
-+@@ -739,7 +742,7 @@ static void nsscrypto_fini(
-+ 			nsscrypto_instance->nss_sym_key_sign = NULL;
-+ 		}
-+ 		free(nsscrypto_instance);
-+-		knet_h->crypto_instance->model_instance = NULL;
-++		crypto_instance->model_instance = NULL;
-+ 	}
-+ 
-+ 	return;
-+@@ -747,6 +750,7 @@ static void nsscrypto_fini(
-+ 
-+ static int nsscrypto_init(
-+ 	knet_handle_t knet_h,
-++	struct crypto_instance *crypto_instance,
-+ 	struct knet_handle_crypto_cfg *knet_handle_crypto_cfg)
-+ {
-+ 	struct nsscrypto_instance *nsscrypto_instance = NULL;
-+@@ -757,14 +761,14 @@ static int nsscrypto_init(
-+ 		  knet_handle_crypto_cfg->crypto_cipher_type,
-+ 		  knet_handle_crypto_cfg->crypto_hash_type);
-+ 
-+-	knet_h->crypto_instance->model_instance = malloc(sizeof(struct nsscrypto_instance));
-+-	if (!knet_h->crypto_instance->model_instance) {
-++	crypto_instance->model_instance = malloc(sizeof(struct nsscrypto_instance));
-++	if (!crypto_instance->model_instance) {
-+ 		log_err(knet_h, KNET_SUB_NSSCRYPTO, "Unable to allocate memory for nss model instance");
-+ 		errno = ENOMEM;
-+ 		return -1;
-+ 	}
-+ 
-+-	nsscrypto_instance = knet_h->crypto_instance->model_instance;
-++	nsscrypto_instance = crypto_instance->model_instance;
-+ 
-+ 	memset(nsscrypto_instance, 0, sizeof(struct nsscrypto_instance));
-+ 
-+@@ -792,16 +796,16 @@ static int nsscrypto_init(
-+ 	nsscrypto_instance->private_key = knet_handle_crypto_cfg->private_key;
-+ 	nsscrypto_instance->private_key_len = knet_handle_crypto_cfg->private_key_len;
-+ 
-+-	if (init_nss(knet_h) < 0) {
-++	if (init_nss(knet_h, crypto_instance) < 0) {
-+ 		savederrno = errno;
-+ 		goto out_err;
-+ 	}
-+ 
-+-	knet_h->sec_header_size = 0;
-++	crypto_instance->sec_header_size = 0;
-+ 
-+ 	if (nsscrypto_instance->crypto_hash_type > 0) {
-+-		knet_h->sec_header_size += nsshash_len[nsscrypto_instance->crypto_hash_type];
-+-		knet_h->sec_hash_size = nsshash_len[nsscrypto_instance->crypto_hash_type];
-++		crypto_instance->sec_header_size += nsshash_len[nsscrypto_instance->crypto_hash_type];
-++		crypto_instance->sec_hash_size = nsshash_len[nsscrypto_instance->crypto_hash_type];
-+ 	}
-+ 
-+ 	if (nsscrypto_instance->crypto_cipher_type > 0) {
-+@@ -817,16 +821,16 @@ static int nsscrypto_init(
-+ 			}
-+ 		}
-+ 
-+-		knet_h->sec_header_size += (block_size * 2);
-+-		knet_h->sec_header_size += SALT_SIZE;
-+-		knet_h->sec_salt_size = SALT_SIZE;
-+-		knet_h->sec_block_size = block_size;
-++		crypto_instance->sec_header_size += (block_size * 2);
-++		crypto_instance->sec_header_size += SALT_SIZE;
-++		crypto_instance->sec_salt_size = SALT_SIZE;
-++		crypto_instance->sec_block_size = block_size;
-+ 	}
-+ 
-+ 	return 0;
-+ 
-+ out_err:
-+-	nsscrypto_fini(knet_h);
-++	nsscrypto_fini(knet_h, crypto_instance);
-+ 	errno = savederrno;
-+ 	return -1;
-+ }
-+diff --git a/libknet/crypto_openssl.c b/libknet/crypto_openssl.c
-+index 73058cc..5c7a74a 100644
-+--- a/libknet/crypto_openssl.c
-++++ b/libknet/crypto_openssl.c
-+@@ -471,9 +471,10 @@ out:
-+ #endif
-+ 
-+ static void opensslcrypto_fini(
-+-	knet_handle_t knet_h)
-++	knet_handle_t knet_h,
-++	struct crypto_instance *crypto_instance)
-+ {
-+-	struct opensslcrypto_instance *opensslcrypto_instance = knet_h->crypto_instance->model_instance;
-++	struct opensslcrypto_instance *opensslcrypto_instance = crypto_instance->model_instance;
-+ 
-+ 	if (opensslcrypto_instance) {
-+ #ifdef BUILDCRYPTOOPENSSL10
-+@@ -484,7 +485,7 @@ static void opensslcrypto_fini(
-+ 			opensslcrypto_instance->private_key = NULL;
-+ 		}
-+ 		free(opensslcrypto_instance);
-+-		knet_h->crypto_instance->model_instance = NULL;
-++		crypto_instance->model_instance = NULL;
-+ 	}
-+ 
-+ 	return;
-+@@ -492,6 +493,7 @@ static void opensslcrypto_fini(
-+ 
-+ static int opensslcrypto_init(
-+ 	knet_handle_t knet_h,
-++	struct crypto_instance *crypto_instance,
-+ 	struct knet_handle_crypto_cfg *knet_handle_crypto_cfg)
-+ {
-+ 	static int openssl_is_init = 0;
-+@@ -527,14 +529,14 @@ static int opensslcrypto_init(
-+ 	}
-+ #endif
-+ 
-+-	knet_h->crypto_instance->model_instance = malloc(sizeof(struct opensslcrypto_instance));
-+-	if (!knet_h->crypto_instance->model_instance) {
-++	crypto_instance->model_instance = malloc(sizeof(struct opensslcrypto_instance));
-++	if (!crypto_instance->model_instance) {
-+ 		log_err(knet_h, KNET_SUB_OPENSSLCRYPTO, "Unable to allocate memory for openssl model instance");
-+ 		errno = ENOMEM;
-+ 		return -1;
-+ 	}
-+ 
-+-	opensslcrypto_instance = knet_h->crypto_instance->model_instance;
-++	opensslcrypto_instance = crypto_instance->model_instance;
-+ 
-+ 	memset(opensslcrypto_instance, 0, sizeof(struct opensslcrypto_instance));
-+ 
-+@@ -576,11 +578,11 @@ static int opensslcrypto_init(
-+ 	memmove(opensslcrypto_instance->private_key, knet_handle_crypto_cfg->private_key, knet_handle_crypto_cfg->private_key_len);
-+ 	opensslcrypto_instance->private_key_len = knet_handle_crypto_cfg->private_key_len;
-+ 
-+-	knet_h->sec_header_size = 0;
-++	crypto_instance->sec_header_size = 0;
-+ 
-+ 	if (opensslcrypto_instance->crypto_hash_type) {
-+-		knet_h->sec_hash_size = EVP_MD_size(opensslcrypto_instance->crypto_hash_type);
-+-		knet_h->sec_header_size += knet_h->sec_hash_size;
-++		crypto_instance->sec_hash_size = EVP_MD_size(opensslcrypto_instance->crypto_hash_type);
-++		crypto_instance->sec_header_size += crypto_instance->sec_hash_size;
-+ 	}
-+ 
-+ 	if (opensslcrypto_instance->crypto_cipher_type) {
-+@@ -588,16 +590,16 @@ static int opensslcrypto_init(
-+ 
-+ 		block_size = EVP_CIPHER_block_size(opensslcrypto_instance->crypto_cipher_type);
-+ 
-+-		knet_h->sec_header_size += (block_size * 2);
-+-		knet_h->sec_header_size += SALT_SIZE;
-+-		knet_h->sec_salt_size = SALT_SIZE;
-+-		knet_h->sec_block_size = block_size;
-++		crypto_instance->sec_header_size += (block_size * 2);
-++		crypto_instance->sec_header_size += SALT_SIZE;
-++		crypto_instance->sec_salt_size = SALT_SIZE;
-++		crypto_instance->sec_block_size = block_size;
-+ 	}
-+ 
-+ 	return 0;
-+ 
-+ out_err:
-+-	opensslcrypto_fini(knet_h);
-++	opensslcrypto_fini(knet_h, crypto_instance);
-+ 
-+ 	errno = savederrno;
-+ 	return -1;
-+diff --git a/libknet/handle.c b/libknet/handle.c
-+index 7009cc3..e95c6c1 100644
-+--- a/libknet/handle.c
-++++ b/libknet/handle.c
-+@@ -1374,11 +1374,10 @@ int knet_handle_crypto(knet_handle_t knet_h, struct knet_handle_crypto_cfg *knet
-+ 		return -1;
-+ 	}
-+ 
-+-	crypto_fini(knet_h);
-+-
-+ 	if ((!strncmp("none", knet_handle_crypto_cfg->crypto_model, 4)) || 
-+ 	    ((!strncmp("none", knet_handle_crypto_cfg->crypto_cipher_type, 4)) &&
-+ 	     (!strncmp("none", knet_handle_crypto_cfg->crypto_hash_type, 4)))) {
-++		crypto_fini(knet_h);
-+ 		log_debug(knet_h, KNET_SUB_CRYPTO, "crypto is not enabled");
-+ 		err = 0;
-+ 		goto exit_unlock;
-+diff --git a/libknet/tests/api_knet_handle_crypto.c b/libknet/tests/api_knet_handle_crypto.c
-+index 1805909..9dbf5bc 100644
-+--- a/libknet/tests/api_knet_handle_crypto.c
-++++ b/libknet/tests/api_knet_handle_crypto.c
-+@@ -17,13 +17,15 @@
-+ #include "libknet.h"
-+ 
-+ #include "internals.h"
-++#include "crypto_model.h"
-+ #include "test-common.h"
-+ 
-+-static void test(const char *model)
-++static void test(const char *model, const char *model2)
-+ {
-+ 	knet_handle_t knet_h;
-+ 	int logfds[2];
-+ 	struct knet_handle_crypto_cfg knet_handle_crypto_cfg;
-++	struct crypto_instance *current = NULL;
-+ 
-+ 	memset(&knet_handle_crypto_cfg, 0, sizeof(struct knet_handle_crypto_cfg));
-+ 
-+@@ -152,6 +154,96 @@ static void test(const char *model)
-+ 
-+ 	flush_logs(logfds[0], stdout);
-+ 
-++	printf("Test knet_handle_crypto reconfig with %s/aes128/sha1 and normal key\n", model2);
-++
-++	current = knet_h->crypto_instance;
-++
-++	memset(&knet_handle_crypto_cfg, 0, sizeof(struct knet_handle_crypto_cfg));
-++	strncpy(knet_handle_crypto_cfg.crypto_model, model, sizeof(knet_handle_crypto_cfg.crypto_model) - 1);
-++	strncpy(knet_handle_crypto_cfg.crypto_cipher_type, "aes128", sizeof(knet_handle_crypto_cfg.crypto_cipher_type) - 1);
-++	strncpy(knet_handle_crypto_cfg.crypto_hash_type, "sha1", sizeof(knet_handle_crypto_cfg.crypto_hash_type) - 1);
-++	knet_handle_crypto_cfg.private_key_len = 2000;
-++
-++	if (knet_handle_crypto(knet_h, &knet_handle_crypto_cfg)) {
-++		printf("knet_handle_crypto failed with correct config: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	if (current == knet_h->crypto_instance) {
-++		printf("knet_handle_crypto failed to install new correct config: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_handle_crypto reconfig with %s/aes128/sha1 and normal key\n", model);
-++
-++	current = knet_h->crypto_instance;
-++
-++	memset(&knet_handle_crypto_cfg, 0, sizeof(struct knet_handle_crypto_cfg));
-++	strncpy(knet_handle_crypto_cfg.crypto_model, model, sizeof(knet_handle_crypto_cfg.crypto_model) - 1);
-++	strncpy(knet_handle_crypto_cfg.crypto_cipher_type, "aes128", sizeof(knet_handle_crypto_cfg.crypto_cipher_type) - 1);
-++	strncpy(knet_handle_crypto_cfg.crypto_hash_type, "sha1", sizeof(knet_handle_crypto_cfg.crypto_hash_type) - 1);
-++	knet_handle_crypto_cfg.private_key_len = 2000;
-++
-++	if (knet_handle_crypto(knet_h, &knet_handle_crypto_cfg)) {
-++		printf("knet_handle_crypto failed with correct config: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	if (current == knet_h->crypto_instance) {
-++		printf("knet_handle_crypto failed to install new correct config: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	printf("Test knet_handle_crypto reconfig with %s/aes129/sha1 and normal key\n", model);
-++
-++	current = knet_h->crypto_instance;
-++
-++	memset(&knet_handle_crypto_cfg, 0, sizeof(struct knet_handle_crypto_cfg));
-++	strncpy(knet_handle_crypto_cfg.crypto_model, model, sizeof(knet_handle_crypto_cfg.crypto_model) - 1);
-++	strncpy(knet_handle_crypto_cfg.crypto_cipher_type, "aes129", sizeof(knet_handle_crypto_cfg.crypto_cipher_type) - 1);
-++	strncpy(knet_handle_crypto_cfg.crypto_hash_type, "sha1", sizeof(knet_handle_crypto_cfg.crypto_hash_type) - 1);
-++	knet_handle_crypto_cfg.private_key_len = 2000;
-++
-++	if (!knet_handle_crypto(knet_h, &knet_handle_crypto_cfg)) {
-++		printf("knet_handle_crypto failed to detect incorrect config: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-++	if (current != knet_h->crypto_instance) {
-++		printf("knet_handle_crypto failed to restore correct config: %s\n", strerror(errno));
-++		knet_handle_free(knet_h);
-++		flush_logs(logfds[0], stdout);
-++		close_logpipes(logfds);
-++		exit(FAIL);
-++	}
-++
-++	flush_logs(logfds[0], stdout);
-++
-+ 	printf("Test knet_handle_crypto with %s/aes128/none and normal key\n", model);
-+ 
-+ 	memset(&knet_handle_crypto_cfg, 0, sizeof(struct knet_handle_crypto_cfg));
-+@@ -233,7 +325,7 @@ int main(int argc, char *argv[])
-+ 	}
-+ 
-+ 	for (i=0; i < crypto_list_entries; i++) {
-+-		test(crypto_list[i].name);
-++		test(crypto_list[i].name, crypto_list[0].name);
-+ 	}
-+ 
-+ 	return PASS;
-diff --git a/debian/patches/doc-fix-a-merge-oversight-from-541d7faf9068d10e12b4278c35.patch b/debian/patches/doc-fix-a-merge-oversight-from-541d7faf9068d10e12b4278c35.patch
-new file mode 100644
-index 0000000..a079030
---- /dev/null
-+++ b/debian/patches/doc-fix-a-merge-oversight-from-541d7faf9068d10e12b4278c35.patch
-@@ -0,0 +1,23 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 11 Jun 2019 16:09:54 +0200
-+Subject: [doc] fix a merge oversight from
-+ 541d7faf9068d10e12b4278c35825ce1353db081
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit ef89e9d900db037c82e03406dcf426ff62649e7d)
-+---
-+ libknet/libknet.h | 1 +
-+ 1 file changed, 1 insertion(+)
-+
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index 85c06cc..907213f 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -1511,6 +1511,7 @@ typedef enum {
-+ 
-+ /**
-+  * check_acceptreject_t
-++ *
-+  * @brief enum for accept/reject in knet access lists
-+  *
-+  * accept or reject incoming packets defined in the access list entry
-diff --git a/debian/patches/global-update-copyright-across-the-board.patch b/debian/patches/global-update-copyright-across-the-board.patch
-new file mode 100644
-index 0000000..9230a7c
---- /dev/null
-+++ b/debian/patches/global-update-copyright-across-the-board.patch
-@@ -0,0 +1,129 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 26 Mar 2019 13:45:52 +0100
-+Subject: [global] update copyright across the board
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 27a7d1cb61bd66d8e36dd663075cf5d0f2d385e4)
-+---
-+ libknet/links_acl_ip.h                              | 2 +-
-+ libknet/links_acl_loopback.h                        | 2 +-
-+ libknet/links_acl_ip.c                              | 2 +-
-+ libknet/links_acl_loopback.c                        | 2 +-
-+ libknet/tests/api_knet_handle_enable_access_lists.c | 2 +-
-+ libknet/tests/api_knet_link_add_acl.c               | 2 +-
-+ libknet/tests/api_knet_link_clear_acl.c             | 2 +-
-+ libknet/tests/api_knet_link_insert_acl.c            | 2 +-
-+ libknet/tests/api_knet_link_rm_acl.c                | 2 +-
-+ libknet/tests/int_links_acl_ip.c                    | 2 +-
-+ 10 files changed, 10 insertions(+), 10 deletions(-)
-+
-+diff --git a/libknet/links_acl_ip.h b/libknet/links_acl_ip.h
-+index fac58e2..b33ffb1 100644
-+--- a/libknet/links_acl_ip.h
-++++ b/libknet/links_acl_ip.h
-+@@ -1,5 +1,5 @@
-+ /*
-+- * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ * Copyright (C) 2016-2019 Red Hat, Inc.  All rights reserved.
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+diff --git a/libknet/links_acl_loopback.h b/libknet/links_acl_loopback.h
-+index e75c4a4..b51d2bf 100644
-+--- a/libknet/links_acl_loopback.h
-++++ b/libknet/links_acl_loopback.h
-+@@ -1,5 +1,5 @@
-+ /*
-+- * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ * Copyright (C) 2019 Red Hat, Inc.  All rights reserved.
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+diff --git a/libknet/links_acl_ip.c b/libknet/links_acl_ip.c
-+index 642027b..9310f21 100644
-+--- a/libknet/links_acl_ip.c
-++++ b/libknet/links_acl_ip.c
-+@@ -1,5 +1,5 @@
-+ /*
-+- * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ * Copyright (C) 2016-2019 Red Hat, Inc.  All rights reserved.
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+diff --git a/libknet/links_acl_loopback.c b/libknet/links_acl_loopback.c
-+index 97f8198..044a51c 100644
-+--- a/libknet/links_acl_loopback.c
-++++ b/libknet/links_acl_loopback.c
-+@@ -1,5 +1,5 @@
-+ /*
-+- * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ * Copyright (C) 2019 Red Hat, Inc.  All rights reserved.
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-+diff --git a/libknet/tests/api_knet_handle_enable_access_lists.c b/libknet/tests/api_knet_handle_enable_access_lists.c
-+index fc3bcc1..d08f175 100644
-+--- a/libknet/tests/api_knet_handle_enable_access_lists.c
-++++ b/libknet/tests/api_knet_handle_enable_access_lists.c
-+@@ -1,5 +1,5 @@
-+ /*
-+- * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ * Copyright (C) 2016-2019 Red Hat, Inc.  All rights reserved.
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+diff --git a/libknet/tests/api_knet_link_add_acl.c b/libknet/tests/api_knet_link_add_acl.c
-+index b018165..ff7a2e2 100644
-+--- a/libknet/tests/api_knet_link_add_acl.c
-++++ b/libknet/tests/api_knet_link_add_acl.c
-+@@ -1,5 +1,5 @@
-+ /*
-+- * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ * Copyright (C) 2019 Red Hat, Inc.  All rights reserved.
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+diff --git a/libknet/tests/api_knet_link_clear_acl.c b/libknet/tests/api_knet_link_clear_acl.c
-+index 78b7d79..234a76b 100644
-+--- a/libknet/tests/api_knet_link_clear_acl.c
-++++ b/libknet/tests/api_knet_link_clear_acl.c
-+@@ -1,5 +1,5 @@
-+ /*
-+- * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ * Copyright (C) 2016-2019 Red Hat, Inc.  All rights reserved.
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+diff --git a/libknet/tests/api_knet_link_insert_acl.c b/libknet/tests/api_knet_link_insert_acl.c
-+index 547f92b..79d04df 100644
-+--- a/libknet/tests/api_knet_link_insert_acl.c
-++++ b/libknet/tests/api_knet_link_insert_acl.c
-+@@ -1,5 +1,5 @@
-+ /*
-+- * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ * Copyright (C) 2019 Red Hat, Inc.  All rights reserved.
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+diff --git a/libknet/tests/api_knet_link_rm_acl.c b/libknet/tests/api_knet_link_rm_acl.c
-+index 49a82d9..d132c54 100644
-+--- a/libknet/tests/api_knet_link_rm_acl.c
-++++ b/libknet/tests/api_knet_link_rm_acl.c
-+@@ -1,5 +1,5 @@
-+ /*
-+- * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ * Copyright (C) 2019 Red Hat, Inc.  All rights reserved.
-+  *
-+  * Authors: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-+diff --git a/libknet/tests/int_links_acl_ip.c b/libknet/tests/int_links_acl_ip.c
-+index a7d2aed..93dff63 100644
-+--- a/libknet/tests/int_links_acl_ip.c
-++++ b/libknet/tests/int_links_acl_ip.c
-+@@ -1,5 +1,5 @@
-+ /*
-+- * Copyright (C) 2016-2018 Red Hat, Inc.  All rights reserved.
-++ * Copyright (C) 2019 Red Hat, Inc.  All rights reserved.
-+  *
-+  * Author: Christine Caulfield <ccaulfie at redhat.com>
-+  *
-diff --git a/debian/patches/global-update-copyrights.patch b/debian/patches/global-update-copyrights.patch
-new file mode 100644
-index 0000000..4557faf
---- /dev/null
-+++ b/debian/patches/global-update-copyrights.patch
-@@ -0,0 +1,21 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Wed, 12 Jun 2019 05:23:47 +0200
-+Subject: [global] update copyrights
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 5d6813ecfb9187d031a1195a6670bd174680d478)
-+---
-+ libknet/compress_zstd.c | 2 +-
-+ 1 file changed, 1 insertion(+), 1 deletion(-)
-+
-+diff --git a/libknet/compress_zstd.c b/libknet/compress_zstd.c
-+index f76ea5f..e234f8d 100644
-+--- a/libknet/compress_zstd.c
-++++ b/libknet/compress_zstd.c
-+@@ -1,5 +1,5 @@
-+ /*
-+- * Copyright (C) 2017-2019 Red Hat, Inc.  All rights reserved.
-++ * Copyright (C) 2019 Red Hat, Inc.  All rights reserved.
-+  *
-+  * Author: Fabio M. Di Nitto <fabbione at kronosnet.org>
-+  *
-diff --git a/debian/patches/handle-properly-initialize-fd-tracker-buffers.patch b/debian/patches/handle-properly-initialize-fd-tracker-buffers.patch
-new file mode 100644
-index 0000000..ca34a5d
---- /dev/null
-+++ b/debian/patches/handle-properly-initialize-fd-tracker-buffers.patch
-@@ -0,0 +1,26 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Wed, 13 Feb 2019 09:14:45 +0100
-+Subject: [handle] properly initialize fd tracker buffers
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 4a76e6de56d50c6c4c78af996d0f97d8df34dadd)
-+---
-+ libknet/handle.c | 5 ++++-
-+ 1 file changed, 4 insertions(+), 1 deletion(-)
-+
-+diff --git a/libknet/handle.c b/libknet/handle.c
-+index 6cd49f5..0a2f75a 100644
-+--- a/libknet/handle.c
-++++ b/libknet/handle.c
-+@@ -309,7 +309,10 @@ static int _init_buffers(knet_handle_t knet_h)
-+ 	}
-+ 	memset(knet_h->send_to_links_buf_compress, 0, KNET_DATABUFSIZE_COMPRESS);
-+ 
-+-	memset(knet_h->knet_transport_fd_tracker, KNET_MAX_TRANSPORTS, sizeof(knet_h->knet_transport_fd_tracker));
-++	memset(knet_h->knet_transport_fd_tracker, 0, sizeof(knet_h->knet_transport_fd_tracker));
-++	for (i = 0; i < KNET_MAX_FDS; i++) {
-++		knet_h->knet_transport_fd_tracker[i].transport = KNET_MAX_TRANSPORTS;
-++	}
-+ 
-+ 	return 0;
-+ 
-diff --git a/debian/patches/links-rename-tranport_type-to-transport-to-avoid-confusio.patch b/debian/patches/links-rename-tranport_type-to-transport-to-avoid-confusio.patch
-new file mode 100644
-index 0000000..ba846ab
---- /dev/null
-+++ b/debian/patches/links-rename-tranport_type-to-transport-to-avoid-confusio.patch
-@@ -0,0 +1,77 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Thu, 9 May 2019 15:44:41 +0200
-+Subject: [links] rename tranport_type to transport to avoid confusion (part 2)
-+
-+complements be9d053efafc822cabd696914d53b5dfe25fb4fd due to early
-+cherry-pick of 7033ddab505a0cf3655115fe5037579b7c882a8c
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit e1345c4f44efd7db79376a3985e4a6aab1461c6f)
-+---
-+ libknet/threads_heartbeat.c | 2 +-
-+ libknet/threads_pmtud.c     | 2 +-
-+ libknet/threads_rx.c        | 4 ++--
-+ libknet/threads_tx.c        | 2 +-
-+ 4 files changed, 5 insertions(+), 5 deletions(-)
-+
-+diff --git a/libknet/threads_heartbeat.c b/libknet/threads_heartbeat.c
-+index 413b5b7..8def9b8 100644
-+--- a/libknet/threads_heartbeat.c
-++++ b/libknet/threads_heartbeat.c
-+@@ -85,7 +85,7 @@ static void _handle_check_each(knet_handle_t knet_h, struct knet_host *dst_host,
-+ 		}
-+ 
-+ retry:
-+-		if (transport_get_connection_oriented(knet_h, dst_link->transport_type) == TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED) {
-++		if (transport_get_connection_oriented(knet_h, dst_link->transport) == TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED) {
-+ 			len = sendto(dst_link->outsock, outbuf, outlen,	MSG_DONTWAIT | MSG_NOSIGNAL,
-+ 				     (struct sockaddr *) &dst_link->dst_addr, sizeof(struct sockaddr_storage));
-+ 		} else {
-+diff --git a/libknet/threads_pmtud.c b/libknet/threads_pmtud.c
-+index 1a84540..0050557 100644
-+--- a/libknet/threads_pmtud.c
-++++ b/libknet/threads_pmtud.c
-+@@ -172,7 +172,7 @@ restart:
-+ 		return -1;
-+ 	}
-+ retry:
-+-	if (transport_get_connection_oriented(knet_h, dst_link->transport_type) == TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED) {
-++	if (transport_get_connection_oriented(knet_h, dst_link->transport) == TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED) {
-+ 		len = sendto(dst_link->outsock, outbuf, data_len, MSG_DONTWAIT | MSG_NOSIGNAL,
-+ 			     (struct sockaddr *) &dst_link->dst_addr, sizeof(struct sockaddr_storage));
-+ 	} else {
-+diff --git a/libknet/threads_rx.c b/libknet/threads_rx.c
-+index 4670829..6417261 100644
-+--- a/libknet/threads_rx.c
-++++ b/libknet/threads_rx.c
-+@@ -578,7 +578,7 @@ static void _parse_recv_from_links(knet_handle_t knet_h, int sockfd, const struc
-+ 		}
-+ 
-+ retry_pong:
-+-		if (transport_get_connection_oriented(knet_h, src_link->transport_type) == TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED) {
-++		if (transport_get_connection_oriented(knet_h, src_link->transport) == TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED) {
-+ 			len = sendto(src_link->outsock, outbuf, outlen, MSG_DONTWAIT | MSG_NOSIGNAL,
-+ 				     (struct sockaddr *) &src_link->dst_addr, sizeof(struct sockaddr_storage));
-+ 		} else {
-+@@ -674,7 +674,7 @@ retry_pong:
-+ 			goto out_pmtud;
-+ 		}
-+ retry_pmtud:
-+-		if (transport_get_connection_oriented(knet_h, src_link->transport_type) == TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED) {
-++		if (transport_get_connection_oriented(knet_h, src_link->transport) == TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED) {
-+ 			len = sendto(src_link->outsock, outbuf, outlen, MSG_DONTWAIT | MSG_NOSIGNAL,
-+ 				     (struct sockaddr *) &src_link->dst_addr, sizeof(struct sockaddr_storage));
-+ 		} else {
-+diff --git a/libknet/threads_tx.c b/libknet/threads_tx.c
-+index b904e12..e987eb1 100644
-+--- a/libknet/threads_tx.c
-++++ b/libknet/threads_tx.c
-+@@ -68,7 +68,7 @@ retry:
-+ 		cur = &msg[prev_sent];
-+ 
-+ 		sent_msgs = _sendmmsg(dst_host->link[dst_host->active_links[link_idx]].outsock,
-+-				      transport_get_connection_oriented(knet_h, dst_host->link[dst_host->active_links[link_idx]].transport_type),
-++				      transport_get_connection_oriented(knet_h, dst_host->link[dst_host->active_links[link_idx]].transport),
-+ 				      &cur[0], msgs_to_send - prev_sent, MSG_DONTWAIT | MSG_NOSIGNAL);
-+ 		savederrno = errno;
-+ 
-diff --git a/debian/patches/links-rename-transport_type-to-transport-to-avoid-confusi.patch b/debian/patches/links-rename-transport_type-to-transport-to-avoid-confusi.patch
-new file mode 100644
-index 0000000..48df681
---- /dev/null
-+++ b/debian/patches/links-rename-transport_type-to-transport-to-avoid-confusi.patch
-@@ -0,0 +1,196 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Fri, 22 Feb 2019 05:31:42 +0100
-+Subject: [links] rename transport_type to transport to avoid confusion
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit c02c06feed59b18948d0107d2ec4cc2a9182554a)
-+---
-+ libknet/internals.h         |  2 +-
-+ libknet/links.c             | 10 +++++-----
-+ libknet/threads_heartbeat.c |  6 +++---
-+ libknet/threads_pmtud.c     |  4 ++--
-+ libknet/threads_rx.c        |  4 ++--
-+ libknet/threads_tx.c        |  4 ++--
-+ libknet/transports.c        |  6 +++---
-+ 7 files changed, 18 insertions(+), 18 deletions(-)
-+
-+diff --git a/libknet/internals.h b/libknet/internals.h
-+index 0d6ee3f..2135fb8 100644
-+--- a/libknet/internals.h
-++++ b/libknet/internals.h
-+@@ -62,7 +62,7 @@ struct knet_link {
-+ 	struct knet_link_status status;
-+ 	/* internals */
-+ 	uint8_t link_id;
-+-	uint8_t transport_type;                 /* #defined constant from API */
-++	uint8_t transport;                      /* #defined constant from API */
-+ 	knet_transport_link_t transport_link;   /* link_info_t from transport */
-+ 	int outsock;
-+ 	unsigned int configured:1;		/* set to 1 if src/dst have been configured transport initialized on this link*/
-+diff --git a/libknet/links.c b/libknet/links.c
-+index 1693df6..dd64a15 100644
-+--- a/libknet/links.c
-++++ b/libknet/links.c
-+@@ -351,7 +351,7 @@ int knet_link_get_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t l
-+ 
-+ 	memmove(src_addr, &link->src_addr, sizeof(struct sockaddr_storage));
-+ 
-+-	*transport = link->transport_type;
-++	*transport = link->transport;
-+ 	*flags = link->flags;
-+ 
-+ 	if (link->dynamic == KNET_LINK_STATIC) {
-+@@ -426,9 +426,9 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+ 	 * then we can remove any leftover access lists if the link
-+ 	 * is no longer in use.
-+ 	 */
-+-	if ((transport_get_acl_type(knet_h, link->transport_type) == USE_GENERIC_ACL) &&
-++	if ((transport_get_acl_type(knet_h, link->transport) == USE_GENERIC_ACL) &&
-+ 	    (link->dynamic == KNET_LINK_STATIC)) {
-+-		if (check_rm(knet_h, link->outsock, link->transport_type,
-++		if (check_rm(knet_h, link->outsock, link->transport,
-+ 			     &link->dst_addr, &link->dst_addr,
-+ 			     CHECK_TYPE_ADDRESS, CHECK_ACCEPT) < 0) {
-+ 			err = -1;
-+@@ -444,7 +444,7 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+ 	 * will clear link info during clear_config.
-+ 	 */
-+ 	sock = link->outsock;
-+-	transport = link->transport_type;
-++	transport = link->transport;
-+ 
-+ 	if ((transport_link_clear_config(knet_h, link) < 0)  &&
-+ 	    (errno != EBUSY)) {
-+@@ -457,7 +457,7 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+ 	 * remove any other access lists when the socket is no
-+ 	 * longer in use by the transport.
-+ 	 */
-+-	if ((transport_get_acl_type(knet_h, link->transport_type) == USE_GENERIC_ACL) &&
-++	if ((transport_get_acl_type(knet_h, link->transport) == USE_GENERIC_ACL) &&
-+ 	    (knet_h->knet_transport_fd_tracker[sock].transport == KNET_MAX_TRANSPORTS)) {
-+ 		check_rmall(knet_h, sock, transport);
-+ 	}
-+diff --git a/libknet/threads_heartbeat.c b/libknet/threads_heartbeat.c
-+index 5d4189f..413b5b7 100644
-+--- a/libknet/threads_heartbeat.c
-++++ b/libknet/threads_heartbeat.c
-+@@ -98,7 +98,7 @@ retry:
-+ 		dst_link->status.stats.tx_ping_bytes += outlen;
-+ 
-+ 		if (len != outlen) {
-+-			err = transport_tx_sock_error(knet_h, dst_link->transport_type, dst_link->outsock, len, savederrno);
-++			err = transport_tx_sock_error(knet_h, dst_link->transport, dst_link->outsock, len, savederrno);
-+ 			switch(err) {
-+ 				case -1: /* unrecoverable error */
-+ 					log_debug(knet_h, KNET_SUB_HEARTBEAT,
-+@@ -140,7 +140,7 @@ void _send_pings(knet_handle_t knet_h, int timed)
-+ 	for (dst_host = knet_h->host_head; dst_host != NULL; dst_host = dst_host->next) {
-+ 		for (link_idx = 0; link_idx < KNET_MAX_LINK; link_idx++) {
-+ 			if ((dst_host->link[link_idx].status.enabled != 1) ||
-+-			    (dst_host->link[link_idx].transport_type == KNET_TRANSPORT_LOOPBACK ) ||
-++			    (dst_host->link[link_idx].transport == KNET_TRANSPORT_LOOPBACK ) ||
-+ 			    ((dst_host->link[link_idx].dynamic == KNET_LINK_DYNIP) &&
-+ 			     (dst_host->link[link_idx].status.dynconnected != 1)))
-+ 				continue;
-+@@ -166,7 +166,7 @@ static void _adjust_pong_timeouts(knet_handle_t knet_h)
-+ 	for (dst_host = knet_h->host_head; dst_host != NULL; dst_host = dst_host->next) {
-+ 		for (link_idx = 0; link_idx < KNET_MAX_LINK; link_idx++) {
-+ 			if ((dst_host->link[link_idx].status.enabled != 1) ||
-+-			    (dst_host->link[link_idx].transport_type == KNET_TRANSPORT_LOOPBACK ) ||
-++			    (dst_host->link[link_idx].transport == KNET_TRANSPORT_LOOPBACK ) ||
-+ 			    ((dst_host->link[link_idx].dynamic == KNET_LINK_DYNIP) &&
-+ 			     (dst_host->link[link_idx].status.dynconnected != 1)))
-+ 				continue;
-+diff --git a/libknet/threads_pmtud.c b/libknet/threads_pmtud.c
-+index 63504d6..1a84540 100644
-+--- a/libknet/threads_pmtud.c
-++++ b/libknet/threads_pmtud.c
-+@@ -196,7 +196,7 @@ retry:
-+ 
-+ 	kernel_mtu = 0;
-+ 
-+-	err = transport_tx_sock_error(knet_h, dst_link->transport_type, dst_link->outsock, len, savederrno);
-++	err = transport_tx_sock_error(knet_h, dst_link->transport, dst_link->outsock, len, savederrno);
-+ 	switch(err) {
-+ 		case -1: /* unrecoverable error */
-+ 			log_debug(knet_h, KNET_SUB_PMTUD, "Unable to send pmtu packet (sendto): %d %s", savederrno, strerror(savederrno));
-+@@ -523,7 +523,7 @@ void *_handle_pmtud_link_thread(void *data)
-+ 
-+ 				if ((dst_link->status.enabled != 1) ||
-+ 				    (dst_link->status.connected != 1) ||
-+-				    (dst_host->link[link_idx].transport_type == KNET_TRANSPORT_LOOPBACK) ||
-++				    (dst_host->link[link_idx].transport == KNET_TRANSPORT_LOOPBACK) ||
-+ 				    (!dst_link->last_ping_size) ||
-+ 				    ((dst_link->dynamic == KNET_LINK_DYNIP) &&
-+ 				     (dst_link->status.dynconnected != 1)))
-+diff --git a/libknet/threads_rx.c b/libknet/threads_rx.c
-+index 5fa51c4..4670829 100644
-+--- a/libknet/threads_rx.c
-++++ b/libknet/threads_rx.c
-+@@ -586,7 +586,7 @@ retry_pong:
-+ 		}
-+ 		savederrno = errno;
-+ 		if (len != outlen) {
-+-			err = transport_tx_sock_error(knet_h, src_link->transport_type, src_link->outsock, len, savederrno);
-++			err = transport_tx_sock_error(knet_h, src_link->transport, src_link->outsock, len, savederrno);
-+ 			switch(err) {
-+ 				case -1: /* unrecoverable error */
-+ 					log_debug(knet_h, KNET_SUB_RX,
-+@@ -682,7 +682,7 @@ retry_pmtud:
-+ 		}
-+ 		savederrno = errno;
-+ 		if (len != outlen) {
-+-			err = transport_tx_sock_error(knet_h, src_link->transport_type, src_link->outsock, len, savederrno);
-++			err = transport_tx_sock_error(knet_h, src_link->transport, src_link->outsock, len, savederrno);
-+ 			switch(err) {
-+ 				case -1: /* unrecoverable error */
-+ 					log_debug(knet_h, KNET_SUB_RX,
-+diff --git a/libknet/threads_tx.c b/libknet/threads_tx.c
-+index fa911dc..b904e12 100644
-+--- a/libknet/threads_tx.c
-++++ b/libknet/threads_tx.c
-+@@ -48,7 +48,7 @@ static int _dispatch_to_links(knet_handle_t knet_h, struct knet_host *dst_host,
-+ 
-+ 		cur_link = &dst_host->link[dst_host->active_links[link_idx]];
-+ 
-+-		if (cur_link->transport_type == KNET_TRANSPORT_LOOPBACK) {
-++		if (cur_link->transport == KNET_TRANSPORT_LOOPBACK) {
-+ 			continue;
-+ 		}
-+ 
-+@@ -72,7 +72,7 @@ retry:
-+ 				      &cur[0], msgs_to_send - prev_sent, MSG_DONTWAIT | MSG_NOSIGNAL);
-+ 		savederrno = errno;
-+ 
-+-		err = transport_tx_sock_error(knet_h, dst_host->link[dst_host->active_links[link_idx]].transport_type, dst_host->link[dst_host->active_links[link_idx]].outsock, sent_msgs, savederrno);
-++		err = transport_tx_sock_error(knet_h, dst_host->link[dst_host->active_links[link_idx]].transport, dst_host->link[dst_host->active_links[link_idx]].outsock, sent_msgs, savederrno);
-+ 		switch(err) {
-+ 			case -1: /* unrecoverable error */
-+ 				cur_link->status.stats.tx_data_errors++;
-+diff --git a/libknet/transports.c b/libknet/transports.c
-+index ffebe00..69ea091 100644
-+--- a/libknet/transports.c
-++++ b/libknet/transports.c
-+@@ -88,19 +88,19 @@ int transport_link_set_config(knet_handle_t knet_h, struct knet_link *kn_link, u
-+ 		return -1;
-+ 	}
-+ 	kn_link->transport_connected = 0;
-+-	kn_link->transport_type = transport;
-++	kn_link->transport = transport;
-+ 	kn_link->proto_overhead = transport_modules_cmd[transport].transport_mtu_overhead;
-+ 	return transport_modules_cmd[transport].transport_link_set_config(knet_h, kn_link);
-+ }
-+ 
-+ int transport_link_clear_config(knet_handle_t knet_h, struct knet_link *kn_link)
-+ {
-+-	return transport_modules_cmd[kn_link->transport_type].transport_link_clear_config(knet_h, kn_link);
-++	return transport_modules_cmd[kn_link->transport].transport_link_clear_config(knet_h, kn_link);
-+ }
-+ 
-+ int transport_link_dyn_connect(knet_handle_t knet_h, int sockfd, struct knet_link *kn_link)
-+ {
-+-	return transport_modules_cmd[kn_link->transport_type].transport_link_dyn_connect(knet_h, sockfd, kn_link);
-++	return transport_modules_cmd[kn_link->transport].transport_link_dyn_connect(knet_h, sockfd, kn_link);
-+ }
-+ 
-+ int transport_rx_sock_error(knet_handle_t knet_h, uint8_t transport, int sockfd, int recv_err, int recv_errno)
-diff --git a/debian/patches/logging-fix-log-target-of-recently-added-API-calls.patch b/debian/patches/logging-fix-log-target-of-recently-added-API-calls.patch
-new file mode 100644
-index 0000000..d4e4494
---- /dev/null
-+++ b/debian/patches/logging-fix-log-target-of-recently-added-API-calls.patch
-@@ -0,0 +1,52 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Sat, 9 Mar 2019 07:03:25 +0100
-+Subject: [logging] fix log target of recently added API calls
-+
-+spotted during sctp testing
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit df6f761997d26afc62651f9ff831e0f7327ee41b)
-+---
-+ libknet/links.c | 8 ++++----
-+ 1 file changed, 4 insertions(+), 4 deletions(-)
-+
-+diff --git a/libknet/links.c b/libknet/links.c
-+index 038a8a4..8011a6d 100644
-+--- a/libknet/links.c
-++++ b/libknet/links.c
-+@@ -1199,7 +1199,7 @@ int knet_link_add_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link
-+ 
-+ 	savederrno = get_global_wrlock(knet_h);
-+ 	if (savederrno) {
-+-		log_err(knet_h, KNET_SUB_HOST, "Unable to get write lock: %s",
-++		log_err(knet_h, KNET_SUB_LINK, "Unable to get write lock: %s",
-+ 			strerror(savederrno));
-+ 		errno = savederrno;
-+ 		return -1;
-+@@ -1294,7 +1294,7 @@ int knet_link_insert_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t l
-+ 
-+ 	savederrno = get_global_wrlock(knet_h);
-+ 	if (savederrno) {
-+-		log_err(knet_h, KNET_SUB_HOST, "Unable to get write lock: %s",
-++		log_err(knet_h, KNET_SUB_LINK, "Unable to get write lock: %s",
-+ 			strerror(savederrno));
-+ 		errno = savederrno;
-+ 		return -1;
-+@@ -1388,7 +1388,7 @@ int knet_link_rm_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_
-+ 
-+ 	savederrno = get_global_wrlock(knet_h);
-+ 	if (savederrno) {
-+-		log_err(knet_h, KNET_SUB_HOST, "Unable to get write lock: %s",
-++		log_err(knet_h, KNET_SUB_LINK, "Unable to get write lock: %s",
-+ 			strerror(savederrno));
-+ 		errno = savederrno;
-+ 		return -1;
-+@@ -1450,7 +1450,7 @@ int knet_link_clear_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t li
-+ 
-+ 	savederrno = get_global_wrlock(knet_h);
-+ 	if (savederrno) {
-+-		log_err(knet_h, KNET_SUB_HOST, "Unable to get write lock: %s",
-++		log_err(knet_h, KNET_SUB_LINK, "Unable to get write lock: %s",
-+ 			strerror(savederrno));
-+ 		errno = savederrno;
-+ 		return -1;
-diff --git a/debian/patches/man-fix-libknet.h-for-errors-detected-by-newly-added-test-1.patch b/debian/patches/man-fix-libknet.h-for-errors-detected-by-newly-added-test-1.patch
-new file mode 100644
-index 0000000..445238d
---- /dev/null
-+++ b/debian/patches/man-fix-libknet.h-for-errors-detected-by-newly-added-test-1.patch
-@@ -0,0 +1,50 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 30 Apr 2019 05:42:48 +0200
-+Subject: [man] fix libknet.h for errors detected by newly added test
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 790b1cb387df9ada2b607c0317a85bab8ec7245b)
-+---
-+ libknet/libknet.h | 8 ++++----
-+ 1 file changed, 4 insertions(+), 4 deletions(-)
-+
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index 3098eab..183c92d 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -1553,7 +1553,7 @@ typedef enum {
-+  *            packets from 10.0.0.1 will be accepted by rule number 1.
-+  *
-+  * @return
-+- * knet_link_add_acl
-++ * knet_link_add_acl returns
-+  * 0 on success.
-+  * -1 on error and errno is set.
-+  */
-+@@ -1580,7 +1580,7 @@ int knet_link_add_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link
-+  * ss1 / ss2 / type / acceptreject - see typedef definitions for details
-+  *
-+  * @return
-+- * knet_link_insert_acl
-++ * knet_link_insert_acl returns
-+  * 0 on success.
-+  * -1 on error and errno is set.
-+  */
-+@@ -1608,7 +1608,7 @@ int knet_link_insert_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t l
-+  *            to knet_link_add_acl(3).
-+  *
-+  * @return
-+- * knet_link_rm_acl
-++ * knet_link_rm_acl returns
-+  * 0 on success.
-+  * -1 on error and errno is set.
-+  */
-+@@ -1630,7 +1630,7 @@ int knet_link_rm_acl(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t link_
-+  * link_id   - see knet_link_set_config(3)
-+  *
-+  * @return
-+- * knet_link_clear_acl
-++ * knet_link_clear_acl returns
-+  * 0 on success.
-+  * -1 on error and errno is set.
-+  */
-diff --git a/debian/patches/manpages-Document-enums-206.patch b/debian/patches/manpages-Document-enums-206.patch
-new file mode 100644
-index 0000000..5b6c01e
---- /dev/null
-+++ b/debian/patches/manpages-Document-enums-206.patch
-@@ -0,0 +1,39 @@
-+From: Chrissie Caulfield <ccaulfie at redhat.com>
-+Date: Tue, 12 Mar 2019 13:55:25 +0000
-+Subject: manpages: Document enums (#206)
-+
-+And also fix a bug in structure printing that caused it to print the wrong name for a struct.
-+
-+(cherry picked from commit 541d7faf9068d10e12b4278c35825ce1353db081)
-+---
-+ libknet/libknet.h | 10 ++++++++--
-+ 1 file changed, 8 insertions(+), 2 deletions(-)
-+
-+diff --git a/libknet/libknet.h b/libknet/libknet.h
-+index 50ed70d..d16eb5d 100644
-+--- a/libknet/libknet.h
-++++ b/libknet/libknet.h
-+@@ -1483,7 +1483,10 @@ int knet_link_clear_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t
-+  * see also knet_handle_enable_access_lists(3)
-+  */
-+ 
-+-/*
-++/**
-++ * check_type_t
-++ * @brief address type enum for knet access lists
-++ *
-+  * CHECK_TYPE_ADDRESS is the equivalent of a single entry / IP address.
-+  *                    for example: 10.1.9.3
-+  *                    and the entry is stored in ss1. ss2 can be NULL.
-+@@ -1508,7 +1511,10 @@ typedef enum {
-+ 	CHECK_TYPE_RANGE
-+ } check_type_t;
-+ 
-+-/*
-++/**
-++ * check_acceptreject_t
-++ * @brief enum for accept/reject in knet access lists
-++ *
-+  * accept or reject incoming packets defined in the access list entry
-+  */
-+ 
-diff --git a/debian/patches/misc-Fix-more-covscan-warnings.patch b/debian/patches/misc-Fix-more-covscan-warnings.patch
-new file mode 100644
-index 0000000..1ae8829
---- /dev/null
-+++ b/debian/patches/misc-Fix-more-covscan-warnings.patch
-@@ -0,0 +1,191 @@
-+From: Christine Caulfield <ccaulfie at redhat.com>
-+Date: Fri, 24 May 2019 10:09:47 +0100
-+Subject: misc: Fix more covscan warnings
-+
-+The only serious bug here is in transport_udp.c
-+(see bottom of patch), the rest are mostly detail.
-+
-+covscan still reports a lot of errors against doxyxml, most of
-+which are because it doesn't understand the libqb hashtables.
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit ded574d1dd0c53c70a34fbd1eaa0239b3cde59b9)
-+---
-+ libknet/common.c           | 2 +-
-+ libknet/compress.c         | 6 +++---
-+ libknet/crypto.c           | 1 -
-+ libknet/crypto_nss.c       | 2 +-
-+ libknet/handle.c           | 1 -
-+ libknet/threads_pmtud.c    | 1 -
-+ libknet/threads_rx.c       | 1 -
-+ libknet/threads_tx.c       | 1 -
-+ libknet/transport_common.c | 4 ++--
-+ libknet/transport_sctp.c   | 2 +-
-+ libknet/transport_udp.c    | 3 ++-
-+ 11 files changed, 10 insertions(+), 14 deletions(-)
-+
-+diff --git a/libknet/common.c b/libknet/common.c
-+index c908e23..be46f23 100644
-+--- a/libknet/common.c
-++++ b/libknet/common.c
-+@@ -101,7 +101,7 @@ static void *open_lib(knet_handle_t knet_h, const char *libname, int extra_flags
-+ 		}
-+ 
-+ 		if (S_ISLNK(sb.st_mode)) {
-+-			if (readlink(path, link, sizeof(link)) < 0) {
-++			if (readlink(path, link, sizeof(link)-1) < 0) {
-+ 				log_debug(knet_h, KNET_SUB_COMMON, "Unable to readlink %s: %s", path, strerror(errno));
-+ 				goto out;
-+ 			}
-+diff --git a/libknet/compress.c b/libknet/compress.c
-+index 7eab454..864828f 100644
-+--- a/libknet/compress.c
-++++ b/libknet/compress.c
-+@@ -359,11 +359,11 @@ void compress_fini(
-+ 	}
-+ 
-+ 	while (compress_modules_cmds[idx].model_name != NULL) {
-+-		if ((compress_modules_cmds[idx].built_in == 1) &&
-++		if ((idx < KNET_MAX_COMPRESS_METHODS) && /* check idx first so we don't read bad data */
-++		    (compress_modules_cmds[idx].built_in == 1) &&
-+ 		    (compress_modules_cmds[idx].loaded == 1) &&
-+ 		    (compress_modules_cmds[idx].model_id > 0) &&
-+-		    (knet_h->compress_int_data[idx] != NULL) &&
-+-		    (idx < KNET_MAX_COMPRESS_METHODS)) {
-++		    (knet_h->compress_int_data[idx] != NULL)) {
-+ 			if ((all) || (compress_modules_cmds[idx].model_id == knet_h->compress_model)) {
-+ 				if (compress_modules_cmds[idx].ops->fini != NULL) {
-+ 					compress_modules_cmds[idx].ops->fini(knet_h, idx);
-+diff --git a/libknet/crypto.c b/libknet/crypto.c
-+index 419f9cc..41d67c9 100644
-+--- a/libknet/crypto.c
-++++ b/libknet/crypto.c
-+@@ -129,7 +129,6 @@ int crypto_init(
-+ 
-+ 	if (!knet_h->crypto_instance) {
-+ 		log_err(knet_h, KNET_SUB_CRYPTO, "Unable to allocate memory for crypto instance");
-+-		pthread_rwlock_unlock(&shlib_rwlock);
-+ 		savederrno = ENOMEM;
-+ 		goto out_err;
-+ 	}
-+diff --git a/libknet/crypto_nss.c b/libknet/crypto_nss.c
-+index a17ff62..640b560 100644
-+--- a/libknet/crypto_nss.c
-++++ b/libknet/crypto_nss.c
-+@@ -761,7 +761,7 @@ static int nsscrypto_init(
-+ 	knet_h->crypto_instance->model_instance = malloc(sizeof(struct nsscrypto_instance));
-+ 	if (!knet_h->crypto_instance->model_instance) {
-+ 		log_err(knet_h, KNET_SUB_NSSCRYPTO, "Unable to allocate memory for nss model instance");
-+-		savederrno = ENOMEM;
-++		errno = ENOMEM;
-+ 		return -1;
-+ 	}
-+ 
-+diff --git a/libknet/handle.c b/libknet/handle.c
-+index 268d610..fd26bea 100644
-+--- a/libknet/handle.c
-++++ b/libknet/handle.c
-+@@ -1649,4 +1649,3 @@ int knet_handle_clear_stats(knet_handle_t knet_h, int clear_option)
-+ 	pthread_rwlock_unlock(&knet_h->global_rwlock);
-+ 	return 0;
-+ }
-+-
-+diff --git a/libknet/threads_pmtud.c b/libknet/threads_pmtud.c
-+index c5a2b27..b4ee632 100644
-+--- a/libknet/threads_pmtud.c
-++++ b/libknet/threads_pmtud.c
-+@@ -44,7 +44,6 @@ static int _handle_check_link_pmtud(knet_handle_t knet_h, struct knet_host *dst_
-+ 
-+ 	mutex_retry_limit = 0;
-+ 	failsafe = 0;
-+-	pad_len = 0;
-+ 
-+ 	dst_link->last_bad_mtu = 0;
-+ 
-+diff --git a/libknet/threads_rx.c b/libknet/threads_rx.c
-+index ae39b38..626cbc4 100644
-+--- a/libknet/threads_rx.c
-++++ b/libknet/threads_rx.c
-+@@ -499,7 +499,6 @@ static void _parse_recv_from_links(knet_handle_t knet_h, int sockfd, const struc
-+ 		} else { /* HOSTINFO */
-+ 			knet_hostinfo = (struct knet_hostinfo *)inbuf->khp_data_userdata;
-+ 			if (knet_hostinfo->khi_bcast == KNET_HOSTINFO_UCAST) {
-+-				bcast = 0;
-+ 				knet_hostinfo->khi_dst_node_id = ntohs(knet_hostinfo->khi_dst_node_id);
-+ 			}
-+ 			if (!_seq_num_lookup(src_host, inbuf->khp_data_seq_num, 0, 0)) {
-+diff --git a/libknet/threads_tx.c b/libknet/threads_tx.c
-+index e987eb1..8096906 100644
-+--- a/libknet/threads_tx.c
-++++ b/libknet/threads_tx.c
-+@@ -42,7 +42,6 @@ static int _dispatch_to_links(knet_handle_t knet_h, struct knet_host *dst_host,
-+ 	struct knet_link *cur_link;
-+ 
-+ 	for (link_idx = 0; link_idx < dst_host->active_link_entries; link_idx++) {
-+-		sent_msgs = 0;
-+ 		prev_sent = 0;
-+ 		progress = 1;
-+ 
-+diff --git a/libknet/transport_common.c b/libknet/transport_common.c
-+index 3c3c439..fe40ad8 100644
-+--- a/libknet/transport_common.c
-++++ b/libknet/transport_common.c
-+@@ -405,7 +405,7 @@ int _is_valid_fd(knet_handle_t knet_h, int sockfd)
-+ 		return -1;
-+ 	}
-+ 
-+-	if (sockfd > KNET_MAX_FDS) {
-++	if (sockfd >= KNET_MAX_FDS) {
-+ 		errno = EINVAL;
-+ 		return -1;
-+ 	}
-+@@ -430,7 +430,7 @@ int _set_fd_tracker(knet_handle_t knet_h, int sockfd, uint8_t transport, uint8_t
-+ 		return -1;
-+ 	}
-+ 
-+-	if (sockfd > KNET_MAX_FDS) {
-++	if (sockfd >= KNET_MAX_FDS) {
-+ 		errno = EINVAL;
-+ 		return -1;
-+ 	}
-+diff --git a/libknet/transport_sctp.c b/libknet/transport_sctp.c
-+index bdfc98d..2c1cdcc 100644
-+--- a/libknet/transport_sctp.c
-++++ b/libknet/transport_sctp.c
-+@@ -733,7 +733,6 @@ static void _handle_incoming_sctp(knet_handle_t knet_h, int listen_sock)
-+ 	if (knet_h->use_access_lists) {
-+ 		if (!check_validate(knet_h, listen_sock, KNET_TRANSPORT_SCTP, &ss)) {
-+ 			savederrno = EINVAL;
-+-			err = -1;
-+ 			log_debug(knet_h, KNET_SUB_TRANSP_SCTP, "Connection rejected from %s/%s", addr_str, port_str);
-+ 			close(new_fd);
-+ 			errno = savederrno;
-+@@ -871,6 +870,7 @@ static void _handle_listen_sctp_errors(knet_handle_t knet_h)
-+ 			info->accepted_socks[i] = -1;
-+ 			free(accept_info);
-+ 			close(sockfd);
-++			break; /* Keeps covscan happy */
-+ 		}
-+ 	}
-+ }
-+diff --git a/libknet/transport_udp.c b/libknet/transport_udp.c
-+index e243a91..3fd69ee 100644
-+--- a/libknet/transport_udp.c
-++++ b/libknet/transport_udp.c
-+@@ -71,6 +71,7 @@ int udp_transport_link_set_config(knet_handle_t knet_h, struct knet_link *kn_lin
-+ 		err = -1;
-+ 		goto exit_error;
-+ 	}
-++	memset(info, 0, sizeof(udp_link_info_t));
-+ 
-+ 	sock = socket(kn_link->src_addr.ss_family, SOCK_DGRAM, 0);
-+ 	if (sock < 0) {
-+@@ -363,7 +364,7 @@ static int read_errs_from_sock(knet_handle_t knet_h, int sockfd)
-+ 						case SO_EE_ORIGIN_ICMP:  /* ICMP */
-+ 						case SO_EE_ORIGIN_ICMP6: /* ICMP6 */
-+ 							origin = (struct sockaddr_storage *)(void *)SO_EE_OFFENDER(sock_err);
-+-							if (knet_addrtostr(origin, sizeof(origin),
-++							if (knet_addrtostr(origin, sizeof(*origin),
-+ 									   addr_str, KNET_MAX_HOST_LEN,
-+ 									   port_str, KNET_MAX_PORT_LEN) < 0) {
-+ 								log_debug(knet_h, KNET_SUB_TRANSP_UDP, "Received ICMP error from unknown source: %s", strerror(sock_err->ee_errno));
-diff --git a/debian/patches/misc-some-coverity-fixes.patch b/debian/patches/misc-some-coverity-fixes.patch
-new file mode 100644
-index 0000000..154728f
---- /dev/null
-+++ b/debian/patches/misc-some-coverity-fixes.patch
-@@ -0,0 +1,224 @@
-+From: Christine Caulfield <ccaulfie at redhat.com>
-+Date: Fri, 17 May 2019 08:44:08 +0100
-+Subject: misc: some coverity fixes
-+
-+In rough order of seriousness:
-+
-+1. Fix clock_gettime() in pmtud so that it's always called, as
-+   variable 'clock_now' is always read.
-+2. Allow space for trailing NUL in libnozzle device names
-+3. Fix api_nozzle_run_updown_test so it can run out of the build tree
-+4. Disallow a 0 length prefix in libnozzle
-+5. Fix potential use of NULL pointer on doxyxml
-+6. Free 'name' in doxyxml as it's *not* in the map any more
-+7. Fix dead code in libknet API functions left by code changes
-+
-+(cherry picked from commit eff3f735f19d3ea4c4689a0fa52ff8e29f75808c)
-+---
-+ libknet/handle.c                        | 13 ++++---------
-+ libknet/host.c                          |  5 ++---
-+ libknet/threads_pmtud.c                 | 10 +++++-----
-+ libnozzle/internals.c                   |  2 +-
-+ libnozzle/libnozzle.c                   |  3 ++-
-+ libnozzle/tests/api_nozzle_run_updown.c |  9 +++++++--
-+ man/doxyxml.c                           | 20 ++++++++++----------
-+ 7 files changed, 31 insertions(+), 31 deletions(-)
-+
-+diff --git a/libknet/handle.c b/libknet/handle.c
-+index 0a2f75a..268d610 100644
-+--- a/libknet/handle.c
-++++ b/libknet/handle.c
-+@@ -785,7 +785,7 @@ int knet_handle_enable_sock_notify(knet_handle_t knet_h,
-+ 						int error,
-+ 						int errorno))
-+ {
-+-	int savederrno = 0, err = 0;
-++	int savederrno = 0;
-+ 
-+ 	if (!knet_h) {
-+ 		errno = EINVAL;
-+@@ -811,8 +811,7 @@ int knet_handle_enable_sock_notify(knet_handle_t knet_h,
-+ 
-+ 	pthread_rwlock_unlock(&knet_h->global_rwlock);
-+ 
-+-	errno = err ? savederrno : 0;
-+-	return err;
-++	return 0;
-+ }
-+ 
-+ int knet_handle_add_datafd(knet_handle_t knet_h, int *datafd, int8_t *channel)
-+@@ -1576,7 +1575,6 @@ out_unlock:
-+ int knet_handle_get_stats(knet_handle_t knet_h, struct knet_handle_stats *stats, size_t struct_size)
-+ {
-+ 	int savederrno = 0;
-+-	int err = 0;
-+ 
-+ 	if (!knet_h) {
-+ 		errno = EINVAL;
-+@@ -1616,14 +1614,12 @@ int knet_handle_get_stats(knet_handle_t knet_h, struct knet_handle_stats *stats,
-+ 	stats->size = sizeof(struct knet_handle_stats);
-+ 
-+ 	pthread_rwlock_unlock(&knet_h->global_rwlock);
-+-	errno = err ? savederrno : 0;
-+-	return err;
-++	return 0;
-+ }
-+ 
-+ int knet_handle_clear_stats(knet_handle_t knet_h, int clear_option)
-+ {
-+ 	int savederrno = 0;
-+-	int err = 0;
-+ 
-+ 	if (!knet_h) {
-+ 		errno = EINVAL;
-+@@ -1651,7 +1647,6 @@ int knet_handle_clear_stats(knet_handle_t knet_h, int clear_option)
-+ 	}
-+ 
-+ 	pthread_rwlock_unlock(&knet_h->global_rwlock);
-+-	errno = err ? savederrno : 0;
-+-	return err;
-++	return 0;
-+ }
-+ 
-+diff --git a/libknet/host.c b/libknet/host.c
-+index 480db73..66826c1 100644
-+--- a/libknet/host.c
-++++ b/libknet/host.c
-+@@ -331,7 +331,7 @@ int knet_host_get_id_by_host_name(knet_handle_t knet_h, const char *name,
-+ int knet_host_get_host_list(knet_handle_t knet_h,
-+ 			    knet_node_id_t *host_ids, size_t *host_ids_entries)
-+ {
-+-	int savederrno = 0, err = 0;
-++	int savederrno = 0;
-+ 
-+ 	if (!knet_h) {
-+ 		errno = EINVAL;
-+@@ -355,8 +355,7 @@ int knet_host_get_host_list(knet_handle_t knet_h,
-+ 	*host_ids_entries = knet_h->host_ids_entries;
-+ 
-+ 	pthread_rwlock_unlock(&knet_h->global_rwlock);
-+-	errno = err ? savederrno : 0;
-+-	return err;
-++	return 0;
-+ }
-+ 
-+ int knet_host_set_policy(knet_handle_t knet_h, knet_node_id_t host_id,
-+diff --git a/libknet/threads_pmtud.c b/libknet/threads_pmtud.c
-+index 0050557..c5a2b27 100644
-+--- a/libknet/threads_pmtud.c
-++++ b/libknet/threads_pmtud.c
-+@@ -380,14 +380,14 @@ static int _handle_check_pmtud(knet_handle_t knet_h, struct knet_host *dst_host,
-+ 	struct timespec clock_now;
-+ 	unsigned long long diff_pmtud, interval;
-+ 
-++	if (clock_gettime(CLOCK_MONOTONIC, &clock_now) != 0) {
-++		log_debug(knet_h, KNET_SUB_PMTUD, "Unable to get monotonic clock");
-++		return 0;
-++	}
-++
-+ 	if (!force_run) {
-+ 		interval = knet_h->pmtud_interval * 1000000000llu; /* nanoseconds */
-+ 
-+-		if (clock_gettime(CLOCK_MONOTONIC, &clock_now) != 0) {
-+-			log_debug(knet_h, KNET_SUB_PMTUD, "Unable to get monotonic clock");
-+-			return 0;
-+-		}
-+-
-+ 		timespec_diff(dst_link->pmtud_last, clock_now, &diff_pmtud);
-+ 
-+ 		if (diff_pmtud < interval) {
-+diff --git a/libnozzle/internals.c b/libnozzle/internals.c
-+index 6e68346..f056e3b 100644
-+--- a/libnozzle/internals.c
-++++ b/libnozzle/internals.c
-+@@ -144,7 +144,7 @@ char *generate_v4_broadcast(const char *ipaddr, const char *prefix)
-+ 
-+ 	prefix_len = atoi(prefix);
-+ 
-+-	if ((prefix_len > 32) || (prefix_len < 0))
-++	if ((prefix_len > 32) || (prefix_len <= 0))
-+ 		return NULL;
-+ 
-+ 	if (inet_pton(AF_INET, ipaddr, &address) <= 0)
-+diff --git a/libnozzle/libnozzle.c b/libnozzle/libnozzle.c
-+index 4e5a2d4..b6e9566 100644
-+--- a/libnozzle/libnozzle.c
-++++ b/libnozzle/libnozzle.c
-+@@ -405,7 +405,8 @@ nozzle_t nozzle_open(char *devname, size_t devname_size, const char *updownpath)
-+ 		return NULL;
-+ 	}
-+ 
-+-	if (strlen(devname) > IFNAMSIZ) {
-++	/* Need to allow space for trailing NUL */
-++	if (strlen(devname) >= IFNAMSIZ) {
-+ 		errno = E2BIG;
-+ 		return NULL;
-+ 	}
-+diff --git a/libnozzle/tests/api_nozzle_run_updown.c b/libnozzle/tests/api_nozzle_run_updown.c
-+index a078ad7..c80216a 100644
-+--- a/libnozzle/tests/api_nozzle_run_updown.c
-++++ b/libnozzle/tests/api_nozzle_run_updown.c
-+@@ -29,16 +29,21 @@ static int test(void)
-+ 	nozzle_t nozzle = NULL;
-+ 	char *error_string = NULL;
-+ 	char *tmpdir = NULL;
-+-	char tmpdirsrc[PATH_MAX];
-++	char tmpdirsrc[PATH_MAX*2];
-+ 	char tmpstr[PATH_MAX*2];
-+ 	char srcfile[PATH_MAX];
-+ 	char dstfile[PATH_MAX];
-++	char current_dir[PATH_MAX];
-+ 
-+ 	/*
-+ 	 * create a tmp dir for storing up/down scripts.
-+ 	 * we cannot create symlinks src dir
-+ 	 */
-+-	strcpy(tmpdirsrc, ABSBUILDDIR "/nozzle_test_XXXXXX");
-++	if (getcwd(current_dir, sizeof(current_dir)) == NULL) {
-++		printf("Unable to get current working directory: %s\n", strerror(errno));
-++		return -1;
-++	}
-++	snprintf(tmpdirsrc, sizeof(tmpdirsrc)-1, "%s/nozzle_test_XXXXXX", current_dir);
-+ 
-+ 	tmpdir = mkdtemp(tmpdirsrc);
-+ 	if (!tmpdir) {
-+diff --git a/man/doxyxml.c b/man/doxyxml.c
-+index b623711..7d9a60c 100644
-+--- a/man/doxyxml.c
-++++ b/man/doxyxml.c
-+@@ -695,17 +695,17 @@ static void collect_enums(xmlNode *cur_node, void *arg)
-+ 				}
-+ 			}
-+ 
-+-			si = malloc(sizeof(struct struct_info));
-+-			if (si) {
-+-				si->kind = STRUCTINFO_ENUM;
-+-				qb_list_init(&si->params_list);
-+-				si->structname = strdup(name);
-+-				traverse_node(cur_node, "enumvalue", read_struct, si);
-+-				qb_map_put(structures_map, refid, si);
-++			if (name) {
-++				si = malloc(sizeof(struct struct_info));
-++				if (si) {
-++					si->kind = STRUCTINFO_ENUM;
-++					qb_list_init(&si->params_list);
-++					si->structname = strdup(name);
-++					traverse_node(cur_node, "enumvalue", read_struct, si);
-++					qb_map_put(structures_map, refid, si);
-++				}
-+ 			}
-+-
-+ 		}
-+-
-+ 	}
-+ }
-+ 
-+@@ -786,7 +786,7 @@ static void traverse_members(xmlNode *cur_node, void *arg)
-+ 		free(kind);
-+ 		free(def);
-+ 		free(args);
-+-//		free(name); /* don't free, it's in the map */
-++		free(name);
-+ 	}
-+ }
-+ 
-diff --git a/debian/patches/spec-be-more-strict-about-plugins-version-and-architectur.patch b/debian/patches/spec-be-more-strict-about-plugins-version-and-architectur.patch
-new file mode 100644
-index 0000000..7650221
---- /dev/null
-+++ b/debian/patches/spec-be-more-strict-about-plugins-version-and-architectur.patch
-@@ -0,0 +1,167 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Sun, 25 Feb 2018 09:08:10 +0100
-+Subject: [spec] be more strict about plugins version and architecture
-+ depedencies
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 851525b90235db236cc4bf88a66ed5f7c54ed9f6)
-+---
-+ kronosnet.spec.in | 42 +++++++++++++++++++++---------------------
-+ 1 file changed, 21 insertions(+), 21 deletions(-)
-+
-+diff --git a/kronosnet.spec.in b/kronosnet.spec.in
-+index 3b597d0..de31656 100644
-+--- a/kronosnet.spec.in
-++++ b/kronosnet.spec.in
-+@@ -363,7 +363,7 @@ Summary: Simple userland wrapper around kernel tap devices
-+ %package -n libnozzle1-devel
-+ Group: Development/Libraries
-+ Summary: Simple userland wrapper around kernel tap devices (developer files)
-+-Requires: libnozzle1 = %{version}-%{release}
-++Requires: libnozzle1%{_isa} = %{version}-%{release}
-+ Requires: pkgconfig
-+ 
-+ %description -n libnozzle1-devel
-+@@ -402,7 +402,7 @@ Summary: Kronosnet core switching implementation
-+ %package -n libknet1-devel
-+ Group: Development/Libraries
-+ Summary: Kronosnet core switching implementation (developer files)
-+-Requires: libknet1 = %{version}-%{release}
-++Requires: libknet1%{_isa} = %{version}-%{release}
-+ Requires: pkgconfig
-+ 
-+ %description -n libknet1-devel
-+@@ -424,7 +424,7 @@ Requires: pkgconfig
-+ %package -n libknet1-crypto-nss-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 nss support
-+-Requires: libknet1 = %{version}-%{release}
-++Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-crypto-nss-plugin
-+  NSS crypto support for libknet1.
-+@@ -438,7 +438,7 @@ Requires: libknet1 = %{version}-%{release}
-+ %package -n libknet1-crypto-openssl-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 openssl support
-+-Requires: libknet1 = %{version}-%{release}
-++Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-crypto-openssl-plugin
-+  OpenSSL crypto support for libknet1.
-+@@ -452,7 +452,7 @@ Requires: libknet1 = %{version}-%{release}
-+ %package -n libknet1-compress-zlib-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 zlib support
-+-Requires: libknet1 = %{version}-%{release}
-++Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-compress-zlib-plugin
-+  zlib compression support for libknet1.
-+@@ -465,7 +465,7 @@ Requires: libknet1 = %{version}-%{release}
-+ %package -n libknet1-compress-lz4-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 lz4 and lz4hc support
-+-Requires: libknet1 = %{version}-%{release}
-++Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-compress-lz4-plugin
-+  lz4 and lz4hc compression support for libknet1.
-+@@ -480,7 +480,7 @@ Requires: libknet1 = %{version}-%{release}
-+ %package -n libknet1-compress-lzo2-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 lzo2 support
-+-Requires: libknet1 = %{version}-%{release}
-++Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-compress-lzo2-plugin
-+  lzo2 compression support for libknet1.
-+@@ -494,7 +494,7 @@ Requires: libknet1 = %{version}-%{release}
-+ %package -n libknet1-compress-lzma-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 lzma support
-+-Requires: libknet1 = %{version}-%{release}
-++Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-compress-lzma-plugin
-+  lzma compression support for libknet1.
-+@@ -508,7 +508,7 @@ Requires: libknet1 = %{version}-%{release}
-+ %package -n libknet1-compress-bzip2-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 bzip2 support
-+-Requires: libknet1 = %{version}-%{release}
-++Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-compress-bzip2-plugin
-+  bzip2 compression support for libknet1.
-+@@ -522,7 +522,7 @@ Requires: libknet1 = %{version}-%{release}
-+ %package -n libknet1-compress-zstd-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 zstd support
-+-Requires: libknet1 = %{version}-%{release}
-++Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-compress-zstd-plugin
-+  zstd compression support for libknet1.
-+@@ -536,10 +536,10 @@ Requires: libknet1 = %{version}-%{release}
-+ Group: System Environment/Libraries
-+ Summary: libknet1 crypto plugins meta package
-+ %if %{defined buildcryptonss}
-+-Requires: libknet1-crypto-nss-plugin
-++Requires: libknet1-crypto-nss-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+ %if %{defined buildcryptoopenssl}
-+-Requires: libknet1-crypto-openssl-plugin
-++Requires: libknet1-crypto-openssl-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+ 
-+ %description -n libknet1-crypto-plugins-all
-+@@ -551,22 +551,22 @@ Requires: libknet1-crypto-openssl-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 compress plugins meta package
-+ %if %{defined buildcompresszlib}
-+-Requires: libknet1-compress-zlib-plugin
-++Requires: libknet1-compress-zlib-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+ %if %{defined buildcompresslz4}
-+-Requires: libknet1-compress-lz4-plugin
-++Requires: libknet1-compress-lz4-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+ %if %{defined buildcompresslzo2}
-+-Requires: libknet1-compress-lzo2-plugin
-++Requires: libknet1-compress-lzo2-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+ %if %{defined buildcompresslzma}
-+-Requires: libknet1-compress-lzma-plugin
-++Requires: libknet1-compress-lzma-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+ %if %{defined buildcompressbzip2}
-+-Requires: libknet1-compress-bzip2-plugin
-++Requires: libknet1-compress-bzip2-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+ %if %{defined buildcompresszstd}
-+-Requires: libknet1-compress-zstd-plugin
-++Requires: libknet1-compress-zstd-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+ 
-+ %description -n libknet1-compress-plugins-all
-+@@ -577,8 +577,8 @@ Requires: libknet1-compress-zstd-plugin
-+ %package -n libknet1-plugins-all
-+ Group: System Environment/Libraries
-+ Summary: libknet1 plugins meta package
-+-Requires: libknet1-compress-plugins-all
-+-Requires: libknet1-crypto-plugins-all
-++Requires: libknet1-compress-plugins-all%{_isa} = %{version}-%{release}
-++Requires: libknet1-crypto-plugins-all%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-plugins-all
-+  meta package to install all of libknet1 plugins
-+@@ -589,7 +589,7 @@ Requires: libknet1-crypto-plugins-all
-+ %package -n kronosnet-tests
-+ Group: System Environment/Libraries
-+ Summary: kronosnet test suite
-+-Requires: libknet1 = %{version}-%{release}
-++Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n kronosnet-tests
-+  this package contains all the libknet and libnozzle test suite
-diff --git a/debian/patches/spec-clean-up-useless-conditionals-and-defines.patch b/debian/patches/spec-clean-up-useless-conditionals-and-defines.patch
-new file mode 100644
-index 0000000..3e7dfa5
---- /dev/null
-+++ b/debian/patches/spec-clean-up-useless-conditionals-and-defines.patch
-@@ -0,0 +1,376 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Sun, 12 May 2019 07:22:41 +0200
-+Subject: [spec] clean up useless conditionals and defines
-+
-+fix a couple of minor conditionals in the process
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit dd66ce8b6389772de79e576d6eea542633594cf1)
-+---
-+ kronosnet.spec.in | 144 ++++++++++++++++++++----------------------------------
-+ 1 file changed, 52 insertions(+), 92 deletions(-)
-+
-+diff --git a/kronosnet.spec.in b/kronosnet.spec.in
-+index de31656..b5632ae 100644
-+--- a/kronosnet.spec.in
-++++ b/kronosnet.spec.in
-+@@ -37,50 +37,6 @@
-+ %undefine _enable_debug_packages
-+ %endif
-+ 
-+-%if %{with sctp}
-+-%global buildsctp 1
-+-%endif
-+-%if %{with nss}
-+-%global buildcryptonss 1
-+-%endif
-+-%if %{with openssl}
-+-%global buildcryptoopenssl 1
-+-%endif
-+-%if %{with zlib}
-+-%global buildcompresszlib 1
-+-%endif
-+-%if %{with lz4}
-+-%global buildcompresslz4 1
-+-%endif
-+-%if %{with lzo2}
-+-%global buildcompresslzo2 1
-+-%endif
-+-%if %{with lzma}
-+-%global buildcompresslzma 1
-+-%endif
-+-%if %{with bzip2}
-+-%global buildcompressbzip2 1
-+-%endif
-+-%if %{with zstd}
-+-%global buildcompresszstd 1
-+-%endif
-+-%if %{with libnozzle}
-+-%global buildlibnozzle 1
-+-%endif
-+-%if %{with kronosnetd}
-+-%global buildlibnozzle 1
-+-%global buildkronosnetd 1
-+-%endif
-+-%if %{with runautogen}
-+-%global buildautogen 1
-+-%endif
-+-%if %{with buildman}
-+-%global buildmanpages 1
-+-%endif
-+-%if %{with installtests}
-+-%global installtestsuite 1
-+-%endif
-+-
-+ # main (empty) package
-+ # http://www.rpm.org/max-rpm/s1-rpm-subpack-spec-file-changes.html
-+ 
-+@@ -100,62 +56,60 @@ BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
-+ # Build dependencies
-+ BuildRequires: gcc
-+ # required to build man pages
-+-%if %{defined buildmanpages}
-++%if %{with buildman}
-+ BuildRequires: libqb-devel libxml2-devel doxygen
-+ %endif
-+-%if %{defined buildsctp}
-++%if %{with sctp}
-+ BuildRequires: lksctp-tools-devel
-+ %endif
-+-%if %{defined buildcryptonss}
-++%if %{with nss}
-+ %if 0%{?suse_version}
-+ BuildRequires: mozilla-nss-devel
-+ %else
-+ BuildRequires: nss-devel
-+ %endif
-+ %endif
-+-%if %{defined buildcryptoopenssl}
-++%if %{with openssl}
-+ %if 0%{?suse_version}
-+ BuildRequires: libopenssl-devel
-+ %else
-+ BuildRequires: openssl-devel
-+ %endif
-+ %endif
-+-%if %{defined buildcompresszlib}
-++%if %{with zlib}
-+ BuildRequires: zlib-devel
-+ %endif
-+-%if %{defined buildcompresslz4}
-++%if %{with lz4}
-+ %if 0%{?suse_version}
-+ BuildRequires: liblz4-devel
-+ %else
-+ BuildRequires: lz4-devel
-+ %endif
-+ %endif
-+-%if %{defined buildcompresslzo2}
-++%if %{with lzo2}
-+ BuildRequires: lzo-devel
-+ %endif
-+-%if %{defined buildcompresslzma}
-++%if %{with lzma}
-+ BuildRequires: xz-devel
-+ %endif
-+-%if %{defined buildcompressbzip2}
-++%if %{with bzip2}
-+ %if 0%{?suse_version}
-+ BuildRequires: libbz2-devel
-+ %else
-+ BuildRequires: bzip2-devel
-+ %endif
-+ %endif
-+-%if %{defined buildcompresszstd}
-++%if %{with zstd}
-+ BuildRequires: libzstd-devel
-+ %endif
-+-%if %{defined buildkronosnetd}
-++%if %{with kronosnetd}
-+ BuildRequires: pam-devel
-+ %endif
-+-%if %{defined buildlibnozzle}
-++%if %{with libnozzle}
-+ BuildRequires: libnl3-devel
-+ %endif
-+-%if %{defined buildautogen}
-+-BuildRequires: autoconf
-+-BuildRequires: automake
-+-BuildRequires: libtool
-++%if %{with runautogen}
-++BuildRequires: autoconf automake libtool
-+ %endif
-+ 
-+ %prep
-+@@ -167,66 +121,70 @@ BuildRequires: libtool
-+ %endif
-+ 
-+ %{configure} \
-+-%if %{defined installtestsuite}
-++%if %{with installtests}
-+ 	--enable-install-tests \
-+ %else
-+ 	--disable-install-tests \
-+ %endif
-+-%if %{defined buildmanpages}
-++%if %{with buildman}
-+ 	--enable-man \
-+ %else
-+ 	--disable-man \
-+ %endif
-+-%if %{defined buildsctp}
-++%if %{with sctp}
-+ 	--enable-libknet-sctp \
-+ %else
-+ 	--disable-libknet-sctp \
-+ %endif
-+-%if %{defined buildcryptonss}
-++%if %{with nss}
-+ 	--enable-crypto-nss \
-+ %else
-+ 	--disable-crypto-nss \
-+ %endif
-+-%if %{defined buildcryptoopenssl}
-++%if %{with openssl}
-+ 	--enable-crypto-openssl \
-+ %else
-+ 	--disable-crypto-openssl \
-+ %endif
-+-%if %{defined buildcompresszlib}
-++%if %{with zlib}
-+ 	--enable-compress-zlib \
-+ %else
-+ 	--disable-compress-zlib \
-+ %endif
-+-%if %{defined buildcompresslz4}
-++%if %{with lz4}
-+ 	--enable-compress-lz4 \
-+ %else
-+ 	--disable-compress-lz4 \
-+ %endif
-+-%if %{defined buildcompresslzo2}
-++%if %{with lzo2}
-+ 	--enable-compress-lzo2 \
-+ %else
-+ 	--disable-compress-lzo2 \
-+ %endif
-+-%if %{defined buildcompresslzma}
-++%if %{with lzma}
-+ 	--enable-compress-lzma \
-+ %else
-+ 	--disable-compress-lzma \
-+ %endif
-+-%if %{defined buildcompressbzip2}
-++%if %{with bzip2}
-+ 	--enable-compress-bzip2 \
-+ %else
-+ 	--disable-compress-bzip2 \
-+ %endif
-+-%if %{defined buildcompresszstd}
-++%if %{with zstd}
-+ 	--enable-compress-zstd \
-+ %else
-+ 	--disable-compress-zstd \
-+ %endif
-+-%if %{defined buildkronosnetd}
-++%if %{with kronosnetd}
-+ 	--enable-kronosnetd \
-++%else
-++	--disable-kronosnetd \
-+ %endif
-+-%if %{defined buildlibnozzle}
-++%if %{with libnozzle}
-+ 	--enable-libnozzle \
-++%else
-++	--disable-libnozzle \
-+ %endif
-+ 	--with-initdefaultdir=%{_sysconfdir}/sysconfig/ \
-+ %if %{defined _unitdir}
-+@@ -266,7 +224,7 @@ rm -rf %{buildroot}
-+ %description
-+ kronosnet source
-+ 
-+-%if %{defined buildkronosnetd}
-++%if %{with kronosnetd}
-+ ## Runtime and subpackages section
-+ %package -n kronosnetd
-+ Group: System Environment/Base
-+@@ -341,7 +299,7 @@ fi
-+ %{_mandir}/man8/*
-+ %endif
-+ 
-+-%if %{defined buildlibnozzle}
-++%if %{with libnozzle}
-+ %package -n libnozzle1
-+ Group: System Environment/Libraries
-+ Summary: Simple userland wrapper around kernel tap devices
-+@@ -377,8 +335,10 @@ Requires: pkgconfig
-+ %{_libdir}/libnozzle.so
-+ %{_includedir}/libnozzle.h
-+ %{_libdir}/pkgconfig/libnozzle.pc
-++%if %{with buildman}
-+ %{_mandir}/man3/nozzle*.3.gz
-+ %endif
-++%endif
-+ 
-+ %package -n libknet1
-+ Group: System Environment/Libraries
-+@@ -416,11 +376,11 @@ Requires: pkgconfig
-+ %{_libdir}/libknet.so
-+ %{_includedir}/libknet.h
-+ %{_libdir}/pkgconfig/libknet.pc
-+-%if %{defined buildmanpages}
-++%if %{with buildman}
-+ %{_mandir}/man3/knet*.3.gz
-+ %endif
-+ 
-+-%if %{defined buildcryptonss}
-++%if %{with nss}
-+ %package -n libknet1-crypto-nss-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 nss support
-+@@ -434,7 +394,7 @@ Requires: libknet1%{_isa} = %{version}-%{release}
-+ %{_libdir}/kronosnet/crypto_nss.so
-+ %endif
-+ 
-+-%if %{defined buildcryptoopenssl}
-++%if %{with openssl}
-+ %package -n libknet1-crypto-openssl-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 openssl support
-+@@ -448,7 +408,7 @@ Requires: libknet1%{_isa} = %{version}-%{release}
-+ %{_libdir}/kronosnet/crypto_openssl.so
-+ %endif
-+ 
-+-%if %{defined buildcompresszlib}
-++%if %{with zlib}
-+ %package -n libknet1-compress-zlib-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 zlib support
-+@@ -461,7 +421,7 @@ Requires: libknet1%{_isa} = %{version}-%{release}
-+ %defattr(-,root,root,-)
-+ %{_libdir}/kronosnet/compress_zlib.so
-+ %endif
-+-%if %{defined buildcompresslz4}
-++%if %{with lz4}
-+ %package -n libknet1-compress-lz4-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 lz4 and lz4hc support
-+@@ -476,7 +436,7 @@ Requires: libknet1%{_isa} = %{version}-%{release}
-+ %{_libdir}/kronosnet/compress_lz4hc.so
-+ %endif
-+ 
-+-%if %{defined buildcompresslzo2}
-++%if %{with lzo2}
-+ %package -n libknet1-compress-lzo2-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 lzo2 support
-+@@ -490,7 +450,7 @@ Requires: libknet1%{_isa} = %{version}-%{release}
-+ %{_libdir}/kronosnet/compress_lzo2.so
-+ %endif
-+ 
-+-%if %{defined buildcompresslzma}
-++%if %{with lzma}
-+ %package -n libknet1-compress-lzma-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 lzma support
-+@@ -504,7 +464,7 @@ Requires: libknet1%{_isa} = %{version}-%{release}
-+ %{_libdir}/kronosnet/compress_lzma.so
-+ %endif
-+ 
-+-%if %{defined buildcompressbzip2}
-++%if %{with bzip2}
-+ %package -n libknet1-compress-bzip2-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 bzip2 support
-+@@ -518,7 +478,7 @@ Requires: libknet1%{_isa} = %{version}-%{release}
-+ %{_libdir}/kronosnet/compress_bzip2.so
-+ %endif
-+ 
-+-%if %{defined buildcompresszstd}
-++%if %{with zstd}
-+ %package -n libknet1-compress-zstd-plugin
-+ Group: System Environment/Libraries
-+ Summary: libknet1 zstd support
-+@@ -535,10 +495,10 @@ Requires: libknet1%{_isa} = %{version}-%{release}
-+ %package -n libknet1-crypto-plugins-all
-+ Group: System Environment/Libraries
-+ Summary: libknet1 crypto plugins meta package
-+-%if %{defined buildcryptonss}
-++%if %{with nss}
-+ Requires: libknet1-crypto-nss-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+-%if %{defined buildcryptoopenssl}
-++%if %{with openssl}
-+ Requires: libknet1-crypto-openssl-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+ 
-+@@ -550,22 +510,22 @@ Requires: libknet1-crypto-openssl-plugin%{_isa} = %{version}-%{release}
-+ %package -n libknet1-compress-plugins-all
-+ Group: System Environment/Libraries
-+ Summary: libknet1 compress plugins meta package
-+-%if %{defined buildcompresszlib}
-++%if %{with zlib}
-+ Requires: libknet1-compress-zlib-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+-%if %{defined buildcompresslz4}
-++%if %{with lz4}
-+ Requires: libknet1-compress-lz4-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+-%if %{defined buildcompresslzo2}
-++%if %{with lzo2}
-+ Requires: libknet1-compress-lzo2-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+-%if %{defined buildcompresslzma}
-++%if %{with lzma}
-+ Requires: libknet1-compress-lzma-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+-%if %{defined buildcompressbzip2}
-++%if %{with bzip2}
-+ Requires: libknet1-compress-bzip2-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+-%if %{defined buildcompresszstd}
-++%if %{with zstd}
-+ Requires: libknet1-compress-zstd-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+ 
-diff --git a/debian/patches/spec-drop-support-for-init-scripts.patch b/debian/patches/spec-drop-support-for-init-scripts.patch
-new file mode 100644
-index 0000000..16d60d8
---- /dev/null
-+++ b/debian/patches/spec-drop-support-for-init-scripts.patch
-@@ -0,0 +1,108 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 14 May 2019 05:53:12 +0200
-+Subject: [spec] drop support for init scripts
-+
-+no rpm distros left that support old fashion init scripts
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 1fc28307dc2b537abd30eab8b6920f2b6893e786)
-+---
-+ kronosnet.spec.in | 46 ++--------------------------------------------
-+ 1 file changed, 2 insertions(+), 44 deletions(-)
-+
-+diff --git a/kronosnet.spec.in b/kronosnet.spec.in
-+index ddc3af0..8c60125 100644
-+--- a/kronosnet.spec.in
-++++ b/kronosnet.spec.in
-+@@ -182,11 +182,7 @@ BuildRequires: autoconf automake libtool
-+ 	--disable-libnozzle \
-+ %endif
-+ 	--with-initdefaultdir=%{_sysconfdir}/sysconfig/ \
-+-%if %{defined _unitdir}
-+ 	--with-systemddir=%{_unitdir}
-+-%else
-+-	--with-initddir=%{_sysconfdir}/rc.d/init.d/
-+-%endif
-+ 
-+ make %{_smp_mflags}
-+ 
-+@@ -200,14 +196,8 @@ find %{buildroot} -name "*.a" -exec rm {} \;
-+ # remove libtools leftovers
-+ find %{buildroot} -name "*.la" -exec rm {} \;
-+ 
-+-# handle systemd vs init script
-+-%if %{defined _unitdir}
-+ # remove init scripts
-+ rm -rf %{buildroot}/etc/init.d
-+-%else
-+-# remove systemd specific bits
-+-find %{buildroot} -name "*.service" -exec rm {} \;
-+-%endif
-+ 
-+ # remove docs
-+ rm -rf %{buildroot}/usr/share/doc/kronosnet
-+@@ -221,16 +211,10 @@ rm -rf %{buildroot}/usr/share/doc/kronosnet
-+ %package -n kronosnetd
-+ Summary: Multipoint-to-Multipoint VPN daemon
-+ License: GPLv2+
-+-%if %{defined _unitdir}
-+-# Needed for systemd unit
-+ Requires(post):   systemd-sysv
-+ Requires(post):   systemd-units
-+ Requires(preun):  systemd-units
-+ Requires(postun): systemd-units
-+-%else
-+-Requires(post): chkconfig
-+-Requires(preun): chkconfig, initscripts
-+-%endif
-+ Requires(post):   shadow-utils
-+ Requires(preun):  shadow-utils
-+ Requires: pam, /etc/pam.d/passwd
-+@@ -246,33 +230,11 @@ Requires: pam, /etc/pam.d/passwd
-+  or service disruption.
-+ 
-+ %post -n kronosnetd
-+-%if %{defined _unitdir}
-+- %if 0%{?systemd_post:1}
-+-  %systemd_post kronosnetd.service
-+- %else
-+-  /bin/systemctl daemon-reload >/dev/null 2>&1 || :
-+- %endif
-+-%else
-+-/sbin/chkconfig --add kronosnetd
-+-%endif
-++%systemd_post kronosnetd.service
-+ getent group @defaultadmgroup@ >/dev/null || groupadd --force --system @defaultadmgroup@
-+ 
-+ %preun -n kronosnetd
-+-%if %{defined _unitdir}
-+- %if 0%{?systemd_preun:1}
-+-  %systemd_preun kronosnetd.service
-+- %else
-+-if [ "$1" -eq 0 ]; then
-+-	/bin/systemctl --no-reload disable kronosnetd.service
-+-	/bin/systemctl stop kronosnetd.service >/dev/null 2>&1
-+-fi
-+-%endif
-+-%else
-+-if [ "$1" = 0 ]; then
-+-	/sbin/service kronosnetd stop >/dev/null 2>&1
-+-	/sbin/chkconfig --del kronosnetd
-+-fi
-+-%endif
-++%systemd_preun kronosnetd.service
-+ 
-+ %files -n kronosnetd
-+ %license COPYING.* COPYRIGHT
-+@@ -281,11 +243,7 @@ fi
-+ %config(noreplace) %{_sysconfdir}/sysconfig/kronosnetd
-+ %config(noreplace) %{_sysconfdir}/pam.d/kronosnetd
-+ %config(noreplace) %{_sysconfdir}/logrotate.d/kronosnetd
-+-%if %{defined _unitdir}
-+ %{_unitdir}/kronosnetd.service
-+-%else
-+-%config(noreplace) %{_sysconfdir}/rc.d/init.d/kronosnetd
-+-%endif
-+ %{_sbindir}/*
-+ %{_mandir}/man8/*
-+ %endif
-diff --git a/debian/patches/spec-fix-a-bunch-of-rpmlint-errors.patch b/debian/patches/spec-fix-a-bunch-of-rpmlint-errors.patch
-new file mode 100644
-index 0000000..1066070
---- /dev/null
-+++ b/debian/patches/spec-fix-a-bunch-of-rpmlint-errors.patch
-@@ -0,0 +1,51 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Mon, 13 May 2019 06:55:36 +0200
-+Subject: [spec] fix a bunch of rpmlint errors
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 95198f0dc5b8a4eefe06b58fa1901740209b42a0)
-+---
-+ kronosnet.spec.in | 9 +++++----
-+ 1 file changed, 5 insertions(+), 4 deletions(-)
-+
-+diff --git a/kronosnet.spec.in b/kronosnet.spec.in
-+index a6c87a0..ddc3af0 100644
-+--- a/kronosnet.spec.in
-++++ b/kronosnet.spec.in
-+@@ -340,6 +340,7 @@ License: LGPLv2+
-+ %license COPYING.* COPYRIGHT
-+ %{_libdir}/libknet.so.*
-+ %dir %{_libdir}/kronosnet
-++
-+ %ldconfig_scriptlets -n libknet1
-+ 
-+ %package -n libknet1-devel
-+@@ -505,24 +506,24 @@ Requires: libknet1-compress-zstd-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+ 
-+ %description -n libknet1-compress-plugins-all
-+- Provides meta package to install all of libknet1 compress plugins
-++ Meta package to install all of libknet1 compress plugins
-+ 
-+ %files -n libknet1-compress-plugins-all
-+ 
-+ %package -n libknet1-plugins-all
-+-Summary: libknet1 plugins meta package
-++Summary: Provides libknet1 plugins meta package
-+ License: LGPLv2+
-+ Requires: libknet1-compress-plugins-all%{_isa} = %{version}-%{release}
-+ Requires: libknet1-crypto-plugins-all%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-plugins-all
-+- Provides meta package to install all of libknet1 plugins
-++ Meta package to install all of libknet1 plugins
-+ 
-+ %files -n libknet1-plugins-all
-+ 
-+ %if %{with installtests}
-+ %package -n kronosnet-tests
-+-Summary: kronosnet test suite
-++Summary: Provides kronosnet test suite
-+ License: GPLv2+
-+ Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-diff --git a/debian/patches/spec-fix-upstream-URLs-to-point-to-https-and-official-rel.patch b/debian/patches/spec-fix-upstream-URLs-to-point-to-https-and-official-rel.patch
-new file mode 100644
-index 0000000..d8c82f8
---- /dev/null
-+++ b/debian/patches/spec-fix-upstream-URLs-to-point-to-https-and-official-rel.patch
-@@ -0,0 +1,30 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Sun, 12 May 2019 06:59:00 +0200
-+Subject: [spec] fix upstream URLs to point to https and official release repo
-+
-+Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1708616
-+
-+also to be noted, the Source0: line is different from upstream and Fedora
-+because upstream can handle tarballs during development
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 5884f8dfc6cf4e648e033da855f8c77eafae84df)
-+---
-+ kronosnet.spec.in | 4 ++--
-+ 1 file changed, 2 insertions(+), 2 deletions(-)
-+
-+diff --git a/kronosnet.spec.in b/kronosnet.spec.in
-+index 442f3ae..e430ad2 100644
-+--- a/kronosnet.spec.in
-++++ b/kronosnet.spec.in
-+@@ -90,8 +90,8 @@ Version: @version@
-+ Release: 1%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist}
-+ License: GPLv2+ and LGPLv2+
-+ Group: System Environment/Base
-+-URL: https://github.com/kronosnet/kronosnet/
-+-Source0: https://github.com/kronosnet/kronosnet/archive/%{name}-%{version}%{?numcomm:.%{numcomm}}%{?alphatag:-%{alphatag}}%{?dirty:-%{dirty}}.tar.gz
-++URL: https://kronosnet.org
-++Source0: https://kronosnet.org/releases/%{name}-%{version}%{?numcomm:.%{numcomm}}%{?alphatag:-%{alphatag}}%{?dirty:-%{dirty}}.tar.gz
-+ 
-+ ## Setup/build bits
-+ 
-diff --git a/debian/patches/spec-reconciliate-fedora-spec-file-into-upstream-spec-fil.patch b/debian/patches/spec-reconciliate-fedora-spec-file-into-upstream-spec-fil.patch
-new file mode 100644
-index 0000000..00a6b28
---- /dev/null
-+++ b/debian/patches/spec-reconciliate-fedora-spec-file-into-upstream-spec-fil.patch
-@@ -0,0 +1,374 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Mon, 13 May 2019 06:02:06 +0200
-+Subject: [spec] reconciliate fedora spec file into upstream spec file (part 1)
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit d880374fbff2ebe404f2bbae95c988aa21e60280)
-+---
-+ kronosnet.spec.in | 130 ++++++++++++++++++++++--------------------------------
-+ 1 file changed, 52 insertions(+), 78 deletions(-)
-+
-+diff --git a/kronosnet.spec.in b/kronosnet.spec.in
-+index b5632ae..a6c87a0 100644
-+--- a/kronosnet.spec.in
-++++ b/kronosnet.spec.in
-+@@ -45,14 +45,9 @@ Summary: Multipoint-to-Multipoint VPN daemon
-+ Version: @version@
-+ Release: 1%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist}
-+ License: GPLv2+ and LGPLv2+
-+-Group: System Environment/Base
-+ URL: https://kronosnet.org
-+ Source0: https://kronosnet.org/releases/%{name}-%{version}%{?numcomm:.%{numcomm}}%{?alphatag:-%{alphatag}}%{?dirty:-%{dirty}}.tar.gz
-+ 
-+-## Setup/build bits
-+-
-+-BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
-+-
-+ # Build dependencies
-+ BuildRequires: gcc
-+ # required to build man pages
-+@@ -117,7 +112,7 @@ BuildRequires: autoconf automake libtool
-+ 
-+ %build
-+ %if %{with runautogen}
-+-    ./autogen.sh
-++./autogen.sh
-+ %endif
-+ 
-+ %{configure} \
-+@@ -217,18 +212,15 @@ find %{buildroot} -name "*.service" -exec rm {} \;
-+ # remove docs
-+ rm -rf %{buildroot}/usr/share/doc/kronosnet
-+ 
-+-%clean
-+-rm -rf %{buildroot}
-+-
-+ # main empty package
-+ %description
-+-kronosnet source
-++ The kronosnet source
-+ 
-+ %if %{with kronosnetd}
-+ ## Runtime and subpackages section
-+ %package -n kronosnetd
-+-Group: System Environment/Base
-+ Summary: Multipoint-to-Multipoint VPN daemon
-++License: GPLv2+
-+ %if %{defined _unitdir}
-+ # Needed for systemd unit
-+ Requires(post):   systemd-sysv
-+@@ -239,8 +231,8 @@ Requires(postun): systemd-units
-+ Requires(post): chkconfig
-+ Requires(preun): chkconfig, initscripts
-+ %endif
-+-Requires(post): shadow-utils
-+-Requires(preun): shadow-utils
-++Requires(post):   shadow-utils
-++Requires(preun):  shadow-utils
-+ Requires: pam, /etc/pam.d/passwd
-+ 
-+ %description -n kronosnetd
-+@@ -263,7 +255,7 @@ Requires: pam, /etc/pam.d/passwd
-+ %else
-+ /sbin/chkconfig --add kronosnetd
-+ %endif
-+-/usr/sbin/groupadd --force --system @defaultadmgroup@
-++getent group @defaultadmgroup@ >/dev/null || groupadd --force --system @defaultadmgroup@
-+ 
-+ %preun -n kronosnetd
-+ %if %{defined _unitdir}
-+@@ -283,8 +275,7 @@ fi
-+ %endif
-+ 
-+ %files -n kronosnetd
-+-%defattr(-,root,root,-)
-+-%doc COPYING.* COPYRIGHT 
-++%license COPYING.* COPYRIGHT
-+ %dir %{_sysconfdir}/kronosnet
-+ %dir %{_sysconfdir}/kronosnet/*
-+ %config(noreplace) %{_sysconfdir}/sysconfig/kronosnetd
-+@@ -301,8 +292,8 @@ fi
-+ 
-+ %if %{with libnozzle}
-+ %package -n libnozzle1
-+-Group: System Environment/Libraries
-+ Summary: Simple userland wrapper around kernel tap devices
-++License: LGPLv2+
-+ 
-+ %description -n libnozzle1
-+  This is an over-engineered commodity library to manage a pool
-+@@ -310,17 +301,14 @@ Summary: Simple userland wrapper around kernel tap devices
-+  pre-up.d/up.d/down.d/post-down.d infrastructure.
-+ 
-+ %files -n libnozzle1
-+-%defattr(-,root,root,-)
-+-%doc COPYING.* COPYRIGHT
-++%license COPYING.* COPYRIGHT
-+ %{_libdir}/libnozzle.so.*
-+ 
-+-%post -n libnozzle1 -p /sbin/ldconfig
-+-
-+-%postun -n libnozzle1 -p /sbin/ldconfig
-++%ldconfig_scriptlets -n libnozzle1
-+ 
-+ %package -n libnozzle1-devel
-+-Group: Development/Libraries
-+ Summary: Simple userland wrapper around kernel tap devices (developer files)
-++License: LGPLv2+
-+ Requires: libnozzle1%{_isa} = %{version}-%{release}
-+ Requires: pkgconfig
-+ 
-+@@ -330,8 +318,7 @@ Requires: pkgconfig
-+  pre-up.d/up.d/down.d/post-down.d infrastructure.
-+ 
-+ %files -n libnozzle1-devel
-+-%defattr(-,root,root,-)
-+-%doc COPYING.* COPYRIGHT
-++%license COPYING.* COPYRIGHT
-+ %{_libdir}/libnozzle.so
-+ %{_includedir}/libnozzle.h
-+ %{_libdir}/pkgconfig/libnozzle.pc
-+@@ -341,8 +328,8 @@ Requires: pkgconfig
-+ %endif
-+ 
-+ %package -n libknet1
-+-Group: System Environment/Libraries
-+ Summary: Kronosnet core switching implementation
-++License: LGPLv2+
-+ 
-+ %description -n libknet1
-+  The whole kronosnet core is implemented in this library.
-+@@ -350,18 +337,14 @@ Summary: Kronosnet core switching implementation
-+  information.
-+ 
-+ %files -n libknet1
-+-%defattr(-,root,root,-)
-+-%doc COPYING.* COPYRIGHT
-++%license COPYING.* COPYRIGHT
-+ %{_libdir}/libknet.so.*
-+ %dir %{_libdir}/kronosnet
-+-
-+-%post -n libknet1 -p /sbin/ldconfig
-+-
-+-%postun -n libknet1 -p /sbin/ldconfig
-++%ldconfig_scriptlets -n libknet1
-+ 
-+ %package -n libknet1-devel
-+-Group: Development/Libraries
-+ Summary: Kronosnet core switching implementation (developer files)
-++License: LGPLv2+
-+ Requires: libknet1%{_isa} = %{version}-%{release}
-+ Requires: pkgconfig
-+ 
-+@@ -371,8 +354,7 @@ Requires: pkgconfig
-+  information. 
-+ 
-+ %files -n libknet1-devel
-+-%defattr(-,root,root,-)
-+-%doc COPYING.* COPYRIGHT
-++%license COPYING.* COPYRIGHT
-+ %{_libdir}/libknet.so
-+ %{_includedir}/libknet.h
-+ %{_libdir}/pkgconfig/libknet.pc
-+@@ -382,119 +364,112 @@ Requires: pkgconfig
-+ 
-+ %if %{with nss}
-+ %package -n libknet1-crypto-nss-plugin
-+-Group: System Environment/Libraries
-+-Summary: libknet1 nss support
-++Summary: Provides libknet1 nss support
-++License: LGPLv2+
-+ Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-crypto-nss-plugin
-+- NSS crypto support for libknet1.
-++ Provides NSS crypto support for libknet1.
-+ 
-+ %files -n libknet1-crypto-nss-plugin
-+-%defattr(-,root,root,-)
-+ %{_libdir}/kronosnet/crypto_nss.so
-+ %endif
-+ 
-+ %if %{with openssl}
-+ %package -n libknet1-crypto-openssl-plugin
-+-Group: System Environment/Libraries
-+-Summary: libknet1 openssl support
-++Summary: Provides libknet1 openssl support
-++License: LGPLv2+
-+ Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-crypto-openssl-plugin
-+- OpenSSL crypto support for libknet1.
-++ Provides OpenSSL crypto support for libknet1.
-+ 
-+ %files -n libknet1-crypto-openssl-plugin
-+-%defattr(-,root,root,-)
-+ %{_libdir}/kronosnet/crypto_openssl.so
-+ %endif
-+ 
-+ %if %{with zlib}
-+ %package -n libknet1-compress-zlib-plugin
-+-Group: System Environment/Libraries
-+-Summary: libknet1 zlib support
-++Summary: Provides libknet1 zlib support
-++License: LGPLv2+
-+ Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-compress-zlib-plugin
-+- zlib compression support for libknet1.
-++ Provides zlib compression support for libknet1.
-+ 
-+ %files -n libknet1-compress-zlib-plugin
-+-%defattr(-,root,root,-)
-+ %{_libdir}/kronosnet/compress_zlib.so
-+ %endif
-++
-+ %if %{with lz4}
-+ %package -n libknet1-compress-lz4-plugin
-+-Group: System Environment/Libraries
-+-Summary: libknet1 lz4 and lz4hc support
-++Summary: Provides libknet1 lz4 and lz4hc support
-++License: LGPLv2+
-+ Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-compress-lz4-plugin
-+- lz4 and lz4hc compression support for libknet1.
-++ Provides lz4 and lz4hc compression support for libknet1.
-+ 
-+ %files -n libknet1-compress-lz4-plugin
-+-%defattr(-,root,root,-)
-+ %{_libdir}/kronosnet/compress_lz4.so
-+ %{_libdir}/kronosnet/compress_lz4hc.so
-+ %endif
-+ 
-+ %if %{with lzo2}
-+ %package -n libknet1-compress-lzo2-plugin
-+-Group: System Environment/Libraries
-+-Summary: libknet1 lzo2 support
-++Summary: Provides libknet1 lzo2 support
-++License: LGPLv2+
-+ Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-compress-lzo2-plugin
-+- lzo2 compression support for libknet1.
-++ Provides lzo2 compression support for libknet1.
-+ 
-+ %files -n libknet1-compress-lzo2-plugin
-+-%defattr(-,root,root,-)
-+ %{_libdir}/kronosnet/compress_lzo2.so
-+ %endif
-+ 
-+ %if %{with lzma}
-+ %package -n libknet1-compress-lzma-plugin
-+-Group: System Environment/Libraries
-+-Summary: libknet1 lzma support
-++Summary: Provides libknet1 lzma support
-++License: LGPLv2+
-+ Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-compress-lzma-plugin
-+- lzma compression support for libknet1.
-++ Provides lzma compression support for libknet1.
-+ 
-+ %files -n libknet1-compress-lzma-plugin
-+-%defattr(-,root,root,-)
-+ %{_libdir}/kronosnet/compress_lzma.so
-+ %endif
-+ 
-+ %if %{with bzip2}
-+ %package -n libknet1-compress-bzip2-plugin
-+-Group: System Environment/Libraries
-+-Summary: libknet1 bzip2 support
-++Summary: Provides libknet1 bzip2 support
-++License: LGPLv2+
-+ Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-compress-bzip2-plugin
-+- bzip2 compression support for libknet1.
-++ Provides bzip2 compression support for libknet1.
-+ 
-+ %files -n libknet1-compress-bzip2-plugin
-+-%defattr(-,root,root,-)
-+ %{_libdir}/kronosnet/compress_bzip2.so
-+ %endif
-+ 
-+ %if %{with zstd}
-+ %package -n libknet1-compress-zstd-plugin
-+-Group: System Environment/Libraries
-+-Summary: libknet1 zstd support
-++Summary: Provides libknet1 zstd support
-++License: LGPLv2+
-+ Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-compress-zstd-plugin
-+- zstd compression support for libknet1.
-++ Provides zstd compression support for libknet1.
-+ 
-+ %files -n libknet1-compress-zstd-plugin
-+-%defattr(-,root,root,-)
-+ %{_libdir}/kronosnet/compress_zstd.so
-+ %endif
-+ 
-+ %package -n libknet1-crypto-plugins-all
-+-Group: System Environment/Libraries
-+-Summary: libknet1 crypto plugins meta package
-++Summary: Provides libknet1 crypto plugins meta package
-++License: LGPLv2+
-+ %if %{with nss}
-+ Requires: libknet1-crypto-nss-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+@@ -503,13 +478,13 @@ Requires: libknet1-crypto-openssl-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+ 
-+ %description -n libknet1-crypto-plugins-all
-+- meta package to install all of libknet1 crypto plugins
-++ Provides meta package to install all of libknet1 crypto plugins
-+ 
-+ %files -n libknet1-crypto-plugins-all
-+ 
-+ %package -n libknet1-compress-plugins-all
-+-Group: System Environment/Libraries
-+-Summary: libknet1 compress plugins meta package
-++Summary: Provides libknet1 compress plugins meta package
-++License: LGPLv2+
-+ %if %{with zlib}
-+ Requires: libknet1-compress-zlib-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+@@ -530,32 +505,31 @@ Requires: libknet1-compress-zstd-plugin%{_isa} = %{version}-%{release}
-+ %endif
-+ 
-+ %description -n libknet1-compress-plugins-all
-+- meta package to install all of libknet1 compress plugins
-++ Provides meta package to install all of libknet1 compress plugins
-+ 
-+ %files -n libknet1-compress-plugins-all
-+ 
-+ %package -n libknet1-plugins-all
-+-Group: System Environment/Libraries
-+ Summary: libknet1 plugins meta package
-++License: LGPLv2+
-+ Requires: libknet1-compress-plugins-all%{_isa} = %{version}-%{release}
-+ Requires: libknet1-crypto-plugins-all%{_isa} = %{version}-%{release}
-+ 
-+ %description -n libknet1-plugins-all
-+- meta package to install all of libknet1 plugins
-++ Provides meta package to install all of libknet1 plugins
-+ 
-+ %files -n libknet1-plugins-all
-+ 
-+ %if %{with installtests}
-+ %package -n kronosnet-tests
-+-Group: System Environment/Libraries
-+ Summary: kronosnet test suite
-++License: GPLv2+
-+ Requires: libknet1%{_isa} = %{version}-%{release}
-+ 
-+ %description -n kronosnet-tests
-+- this package contains all the libknet and libnozzle test suite
-++ This package contains all the libknet and libnozzle test suite.
-+ 
-+ %files -n kronosnet-tests
-+-%defattr(-,root,root,-)
-+ %{_libdir}/kronosnet/tests/*
-+ %endif
-+ 
-diff --git a/debian/patches/spec-use-distro-conditionals-to-determine-BuildRequires.patch b/debian/patches/spec-use-distro-conditionals-to-determine-BuildRequires.patch
-new file mode 100644
-index 0000000..500dd1f
---- /dev/null
-+++ b/debian/patches/spec-use-distro-conditionals-to-determine-BuildRequires.patch
-@@ -0,0 +1,59 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Sun, 25 Feb 2018 08:42:55 +0100
-+Subject: [spec] use distro conditionals to determine BuildRequires
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 3a5332772250c1adf2340503ac8903ea07f2d394)
-+---
-+ kronosnet.spec.in | 24 ++++++++++++++++++++----
-+ 1 file changed, 20 insertions(+), 4 deletions(-)
-+
-+diff --git a/kronosnet.spec.in b/kronosnet.spec.in
-+index e430ad2..3b597d0 100644
-+--- a/kronosnet.spec.in
-++++ b/kronosnet.spec.in
-+@@ -107,16 +107,28 @@ BuildRequires: libqb-devel libxml2-devel doxygen
-+ BuildRequires: lksctp-tools-devel
-+ %endif
-+ %if %{defined buildcryptonss}
-+-BuildRequires: /usr/include/nss3/nss.h /usr/include/nspr4/nspr.h
-++%if 0%{?suse_version}
-++BuildRequires: mozilla-nss-devel
-++%else
-++BuildRequires: nss-devel
-++%endif
-+ %endif
-+ %if %{defined buildcryptoopenssl}
-+-BuildRequires: /usr/include/openssl/conf.h
-++%if 0%{?suse_version}
-++BuildRequires: libopenssl-devel
-++%else
-++BuildRequires: openssl-devel
-++%endif
-+ %endif
-+ %if %{defined buildcompresszlib}
-+ BuildRequires: zlib-devel
-+ %endif
-+ %if %{defined buildcompresslz4}
-+-BuildRequires: /usr/include/lz4hc.h
-++%if 0%{?suse_version}
-++BuildRequires: liblz4-devel
-++%else
-++BuildRequires: lz4-devel
-++%endif
-+ %endif
-+ %if %{defined buildcompresslzo2}
-+ BuildRequires: lzo-devel
-+@@ -125,7 +137,11 @@ BuildRequires: lzo-devel
-+ BuildRequires: xz-devel
-+ %endif
-+ %if %{defined buildcompressbzip2}
-+-BuildRequires: /usr/include/bzlib.h
-++%if 0%{?suse_version}
-++BuildRequires: libbz2-devel
-++%else
-++BuildRequires: bzip2-devel
-++%endif
-+ %endif
-+ %if %{defined buildcompresszstd}
-+ BuildRequires: libzstd-devel
-diff --git a/debian/patches/spec-use-ldconfig_scriptlets-only-when-defined.patch b/debian/patches/spec-use-ldconfig_scriptlets-only-when-defined.patch
-new file mode 100644
-index 0000000..46a0fee
---- /dev/null
-+++ b/debian/patches/spec-use-ldconfig_scriptlets-only-when-defined.patch
-@@ -0,0 +1,40 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Tue, 14 May 2019 06:57:36 +0200
-+Subject: [spec] use ldconfig_scriptlets only when defined
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 8a823aa3bf291fe8c7407fd957d71897895e1aec)
-+---
-+ kronosnet.spec.in | 10 ++++++++++
-+ 1 file changed, 10 insertions(+)
-+
-+diff --git a/kronosnet.spec.in b/kronosnet.spec.in
-+index 8c60125..094090b 100644
-+--- a/kronosnet.spec.in
-++++ b/kronosnet.spec.in
-+@@ -262,7 +262,12 @@ License: LGPLv2+
-+ %license COPYING.* COPYRIGHT
-+ %{_libdir}/libnozzle.so.*
-+ 
-++%if 0%{?ldconfig_scriptlets}
-+ %ldconfig_scriptlets -n libnozzle1
-++%else
-++%post -n libnozzle1 -p /sbin/ldconfig
-++%postun -n libnozzle1 -p /sbin/ldconfig
-++%endif
-+ 
-+ %package -n libnozzle1-devel
-+ Summary: Simple userland wrapper around kernel tap devices (developer files)
-+@@ -299,7 +304,12 @@ License: LGPLv2+
-+ %{_libdir}/libknet.so.*
-+ %dir %{_libdir}/kronosnet
-+ 
-++%if 0%{?ldconfig_scriptlets}
-+ %ldconfig_scriptlets -n libknet1
-++%else
-++%post -n libknet1 -p /sbin/ldconfig
-++%postun -n libknet1 -p /sbin/ldconfig
-++%endif
-+ 
-+ %package -n libknet1-devel
-+ Summary: Kronosnet core switching implementation (developer files)
-diff --git a/debian/patches/tests-hide-an-arm-internal-memory-leak-non-recurring.patch b/debian/patches/tests-hide-an-arm-internal-memory-leak-non-recurring.patch
-new file mode 100644
-index 0000000..76b42da
---- /dev/null
-+++ b/debian/patches/tests-hide-an-arm-internal-memory-leak-non-recurring.patch
-@@ -0,0 +1,25 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Thu, 11 Apr 2019 09:30:27 +0200
-+Subject: [tests] hide an arm internal memory leak (non-recurring)
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 43b3f05da8736e7bb286e81f96e7514977541bef)
-+---
-+ build-aux/knet_valgrind_memcheck.supp | 7 +++++++
-+ 1 file changed, 7 insertions(+)
-+
-+diff --git a/build-aux/knet_valgrind_memcheck.supp b/build-aux/knet_valgrind_memcheck.supp
-+index e0f49d0..a34ab93 100644
-+--- a/build-aux/knet_valgrind_memcheck.supp
-++++ b/build-aux/knet_valgrind_memcheck.supp
-+@@ -605,3 +605,10 @@
-+    obj:*
-+    obj:/usr/lib64/libnss3.so
-+ }
-++{
-++   arm internal memory leak
-++   Memcheck:Leak
-++   match-leak-kinds: definite
-++   fun:malloc
-++   fun:dl_open_worker
-++}
-diff --git a/debian/patches/tests-improve-wait-for-packet-implementation-to-flush-log.patch b/debian/patches/tests-improve-wait-for-packet-implementation-to-flush-log.patch
-new file mode 100644
-index 0000000..458da67
---- /dev/null
-+++ b/debian/patches/tests-improve-wait-for-packet-implementation-to-flush-log.patch
-@@ -0,0 +1,135 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Thu, 11 Apr 2019 09:31:00 +0200
-+Subject: [tests] improve wait for packet implementation to flush logs during
-+ wait
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit e7825127477c756b4d0d9311c9907e140575e490)
-+---
-+ libknet/tests/test-common.h                 | 2 +-
-+ libknet/tests/api_knet_handle_clear_stats.c | 2 +-
-+ libknet/tests/api_knet_send.c               | 2 +-
-+ libknet/tests/api_knet_send_compress.c      | 2 +-
-+ libknet/tests/api_knet_send_crypto.c        | 2 +-
-+ libknet/tests/api_knet_send_loopback.c      | 4 ++--
-+ libknet/tests/test-common.c                 | 7 ++++---
-+ 7 files changed, 11 insertions(+), 10 deletions(-)
-+
-+diff --git a/libknet/tests/test-common.h b/libknet/tests/test-common.h
-+index 8742f8d..a498a09 100644
-+--- a/libknet/tests/test-common.h
-++++ b/libknet/tests/test-common.h
-+@@ -70,6 +70,6 @@ int stop_logthread(void);
-+ int make_local_sockaddr(struct sockaddr_storage *lo, uint16_t offset);
-+ int make_local_sockaddr6(struct sockaddr_storage *lo, uint16_t offset);
-+ int wait_for_host(knet_handle_t knet_h, uint16_t host_id, int seconds, int logfd, FILE *std);
-+-int wait_for_packet(knet_handle_t knet_h, int seconds, int datafd);
-++int wait_for_packet(knet_handle_t knet_h, int seconds, int datafd, int logfd, FILE *std);
-+ 
-+ #endif
-+diff --git a/libknet/tests/api_knet_handle_clear_stats.c b/libknet/tests/api_knet_handle_clear_stats.c
-+index 8e64235..07f059a 100644
-+--- a/libknet/tests/api_knet_handle_clear_stats.c
-++++ b/libknet/tests/api_knet_handle_clear_stats.c
-+@@ -160,7 +160,7 @@ static void test(void)
-+ 
-+ 	flush_logs(logfds[0], stdout);
-+ 
-+-	if (wait_for_packet(knet_h, 10, datafd)) {
-++	if (wait_for_packet(knet_h, 10, datafd, logfds[0], stdout)) {
-+ 		printf("Error waiting for packet: %s\n", strerror(errno));
-+ 		knet_link_set_enable(knet_h, 1, 0, 0);
-+ 		knet_link_clear_config(knet_h, 1, 0);
-+diff --git a/libknet/tests/api_knet_send.c b/libknet/tests/api_knet_send.c
-+index 9e81d03..ca16e3d 100644
-+--- a/libknet/tests/api_knet_send.c
-++++ b/libknet/tests/api_knet_send.c
-+@@ -247,7 +247,7 @@ static void test(uint8_t transport)
-+ 
-+ 	flush_logs(logfds[0], stdout);
-+ 
-+-	if (wait_for_packet(knet_h, 10, datafd)) {
-++	if (wait_for_packet(knet_h, 10, datafd, logfds[0], stdout)) {
-+ 		printf("Error waiting for packet: %s\n", strerror(errno));
-+ 		knet_link_set_enable(knet_h, 1, 0, 0);
-+ 		knet_link_clear_config(knet_h, 1, 0);
-+diff --git a/libknet/tests/api_knet_send_compress.c b/libknet/tests/api_knet_send_compress.c
-+index 6de4674..b03f4e7 100644
-+--- a/libknet/tests/api_knet_send_compress.c
-++++ b/libknet/tests/api_knet_send_compress.c
-+@@ -170,7 +170,7 @@ static void test(const char *model)
-+ 
-+ 	flush_logs(logfds[0], stdout);
-+ 
-+-	if (wait_for_packet(knet_h, 10, datafd)) {
-++	if (wait_for_packet(knet_h, 10, datafd, logfds[0], stdout)) {
-+ 		printf("Error waiting for packet: %s\n", strerror(errno));
-+ 		knet_link_set_enable(knet_h, 1, 0, 0);
-+ 		knet_link_clear_config(knet_h, 1, 0);
-+diff --git a/libknet/tests/api_knet_send_crypto.c b/libknet/tests/api_knet_send_crypto.c
-+index f2ca366..e33a808 100644
-+--- a/libknet/tests/api_knet_send_crypto.c
-++++ b/libknet/tests/api_knet_send_crypto.c
-+@@ -171,7 +171,7 @@ static void test(const char *model)
-+ 
-+ 	flush_logs(logfds[0], stdout);
-+ 
-+-	if (wait_for_packet(knet_h, 10, datafd)) {
-++	if (wait_for_packet(knet_h, 10, datafd, logfds[0], stdout)) {
-+ 		printf("Error waiting for packet: %s\n", strerror(errno));
-+ 		knet_link_set_enable(knet_h, 1, 0, 0);
-+ 		knet_link_clear_config(knet_h, 1, 0);
-+diff --git a/libknet/tests/api_knet_send_loopback.c b/libknet/tests/api_knet_send_loopback.c
-+index 0cfd29f..2feca68 100644
-+--- a/libknet/tests/api_knet_send_loopback.c
-++++ b/libknet/tests/api_knet_send_loopback.c
-+@@ -251,7 +251,7 @@ static void test(void)
-+ 
-+ 	flush_logs(logfds[0], stdout);
-+ 
-+-	if (wait_for_packet(knet_h, 10, datafd)) {
-++	if (wait_for_packet(knet_h, 10, datafd, logfds[0], stdout)) {
-+ 		printf("Error waiting for packet: %s\n", strerror(errno));
-+ 		knet_link_set_enable(knet_h, 1, 0, 0);
-+ 		knet_link_clear_config(knet_h, 1, 0);
-+@@ -352,7 +352,7 @@ static void test(void)
-+ 
-+ 	flush_logs(logfds[0], stdout);
-+ 
-+-	if (wait_for_packet(knet_h, 10, datafd)) {
-++	if (wait_for_packet(knet_h, 10, datafd, logfds[0], stdout)) {
-+ 		printf("Error waiting for packet: %s\n", strerror(errno));
-+ 		knet_link_set_enable(knet_h, 1, 0, 0);
-+ 		knet_link_clear_config(knet_h, 1, 0);
-+diff --git a/libknet/tests/test-common.c b/libknet/tests/test-common.c
-+index d0ea1ef..a4ff297 100644
-+--- a/libknet/tests/test-common.c
-++++ b/libknet/tests/test-common.c
-+@@ -485,7 +485,7 @@ int wait_for_host(knet_handle_t knet_h, uint16_t host_id, int seconds, int logfd
-+ 	return -1;
-+ }
-+ 
-+-int wait_for_packet(knet_handle_t knet_h, int seconds, int datafd)
-++int wait_for_packet(knet_handle_t knet_h, int seconds, int datafd, int logfd, FILE *std)
-+ {
-+ 	fd_set rfds;
-+ 	struct timeval tv;
-+@@ -500,7 +500,7 @@ try_again:
-+ 	FD_ZERO(&rfds);
-+ 	FD_SET(datafd, &rfds);
-+ 
-+-	tv.tv_sec = seconds;
-++	tv.tv_sec = 1;
-+ 	tv.tv_usec = 0;
-+ 
-+ 	err = select(datafd+1, &rfds, NULL, NULL, &tv);
-+@@ -509,7 +509,8 @@ try_again:
-+ 	 * pick an arbitrary 10 times loop (multiplied by waiting seconds)
-+ 	 * before failing.
-+ 	 */
-+-	if ((!err) && (i < 10)) {
-++	if ((!err) && (i < seconds)) {
-++		flush_logs(logfd, std);
-+ 		i++;
-+ 		goto try_again;
-+ 	}
-diff --git a/debian/patches/tests-remove-stray-comment.patch b/debian/patches/tests-remove-stray-comment.patch
-new file mode 100644
-index 0000000..dce4422
---- /dev/null
-+++ b/debian/patches/tests-remove-stray-comment.patch
-@@ -0,0 +1,22 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Thu, 7 Mar 2019 18:42:20 +0100
-+Subject: [tests] remove stray comment
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 3f426c317d41c93cefc7735607ec166539223283)
-+---
-+ libknet/tests/Makefile.am | 1 -
-+ 1 file changed, 1 deletion(-)
-+
-+diff --git a/libknet/tests/Makefile.am b/libknet/tests/Makefile.am
-+index 3e74ea8..015587c 100644
-+--- a/libknet/tests/Makefile.am
-++++ b/libknet/tests/Makefile.am
-+@@ -41,7 +41,6 @@ fun_checks		=
-+ benchmarks		= \
-+ 			  knet_bench_test
-+ 
-+-# int_links_acl_test can´t run yet standalone
-+ noinst_PROGRAMS		= \
-+ 			  api_knet_handle_new_limit_test \
-+ 			  pckt_test \
-diff --git a/debian/patches/transports-access-list-add-internal-API-to-gather-which-f.patch b/debian/patches/transports-access-list-add-internal-API-to-gather-which-f.patch
-new file mode 100644
-index 0000000..3d23858
---- /dev/null
-+++ b/debian/patches/transports-access-list-add-internal-API-to-gather-which-f.patch
-@@ -0,0 +1,161 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Thu, 28 Feb 2019 14:55:27 +0100
-+Subject: [transports / access list] add internal API to gather which fd to
-+ use for access lists given a certain link struct
-+
-+this is required for the external API that has to be transport indepedent
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 2eb0040c7b5c99f3157b3922f6400a6c09c80e7e)
-+---
-+ libknet/internals.h          |  6 ++++++
-+ libknet/transport_loopback.h |  1 +
-+ libknet/transport_sctp.h     |  1 +
-+ libknet/transport_udp.h      |  1 +
-+ libknet/transports.h         |  1 +
-+ libknet/transport_loopback.c |  5 +++++
-+ libknet/transport_sctp.c     |  7 +++++++
-+ libknet/transport_udp.c      |  5 +++++
-+ libknet/transports.c         | 13 +++++++++----
-+ 9 files changed, 36 insertions(+), 4 deletions(-)
-+
-+diff --git a/libknet/internals.h b/libknet/internals.h
-+index d482674..8976a8c 100644
-+--- a/libknet/internals.h
-++++ b/libknet/internals.h
-+@@ -338,6 +338,12 @@ typedef struct knet_transport_ops {
-+  */
-+ 	int (*transport_link_dyn_connect)(knet_handle_t knet_h, int sockfd, struct knet_link *link);
-+ 
-++
-++/*
-++ * return the fd to use for access lists
-++ */
-++	int (*transport_link_get_acl_fd)(knet_handle_t knet_h, struct knet_link *link);
-++
-+ /*
-+  * per transport error handling of recvmmsg
-+  * (see _handle_recv_from_links comments for details)
-+diff --git a/libknet/transport_loopback.h b/libknet/transport_loopback.h
-+index 3d072e8..6ce3ed3 100644
-+--- a/libknet/transport_loopback.h
-++++ b/libknet/transport_loopback.h
-+@@ -23,5 +23,6 @@ int loopback_transport_rx_sock_error(knet_handle_t knet_h, int sockfd, int recv_
-+ int loopback_transport_tx_sock_error(knet_handle_t knet_h, int sockfd, int recv_err, int recv_errno);
-+ int loopback_transport_rx_is_data(knet_handle_t knet_h, int sockfd, struct knet_mmsghdr *msg);
-+ int loopback_transport_link_dyn_connect(knet_handle_t knet_h, int sockfd, struct knet_link *kn_link);
-++int loopback_transport_link_get_acl_fd(knet_handle_t knet_h, struct knet_link *kn_link);
-+ 
-+ #endif
-+diff --git a/libknet/transport_sctp.h b/libknet/transport_sctp.h
-+index f27bcf1..83a638b 100644
-+--- a/libknet/transport_sctp.h
-++++ b/libknet/transport_sctp.h
-+@@ -31,6 +31,7 @@ int sctp_transport_rx_sock_error(knet_handle_t knet_h, int sockfd, int recv_err,
-+ int sctp_transport_tx_sock_error(knet_handle_t knet_h, int sockfd, int recv_err, int recv_errno);
-+ int sctp_transport_rx_is_data(knet_handle_t knet_h, int sockfd, struct knet_mmsghdr *msg);
-+ int sctp_transport_link_dyn_connect(knet_handle_t knet_h, int sockfd, struct knet_link *kn_link);
-++int sctp_transport_link_get_acl_fd(knet_handle_t knet_h, struct knet_link *kn_link);
-+ 
-+ #endif
-+ 
-+diff --git a/libknet/transport_udp.h b/libknet/transport_udp.h
-+index bbb6ec9..6de18e3 100644
-+--- a/libknet/transport_udp.h
-++++ b/libknet/transport_udp.h
-+@@ -23,5 +23,6 @@ int udp_transport_rx_sock_error(knet_handle_t knet_h, int sockfd, int recv_err,
-+ int udp_transport_tx_sock_error(knet_handle_t knet_h, int sockfd, int recv_err, int recv_errno);
-+ int udp_transport_rx_is_data(knet_handle_t knet_h, int sockfd, struct knet_mmsghdr *msg);
-+ int udp_transport_link_dyn_connect(knet_handle_t knet_h, int sockfd, struct knet_link *kn_link);
-++int udp_transport_link_get_acl_fd(knet_handle_t knet_h, struct knet_link *kn_link);
-+ 
-+ #endif
-+diff --git a/libknet/transports.h b/libknet/transports.h
-+index 6338140..38f69ba 100644
-+--- a/libknet/transports.h
-++++ b/libknet/transports.h
-+@@ -15,6 +15,7 @@ void stop_all_transports(knet_handle_t knet_h);
-+ int transport_link_set_config(knet_handle_t knet_h, struct knet_link *kn_link, uint8_t transport);
-+ int transport_link_clear_config(knet_handle_t knet_h, struct knet_link *kn_link);
-+ int transport_link_dyn_connect(knet_handle_t knet_h, int sockfd, struct knet_link *kn_link);
-++int transport_link_get_acl_fd(knet_handle_t knet_h, struct knet_link *kn_link);
-+ int transport_rx_sock_error(knet_handle_t knet_h, uint8_t transport, int sockfd, int recv_err, int recv_errno);
-+ int transport_tx_sock_error(knet_handle_t knet_h, uint8_t transport, int sockfd, int recv_err, int recv_errno);
-+ int transport_rx_is_data(knet_handle_t knet_h, uint8_t transport, int sockfd, struct knet_mmsghdr *msg);
-+diff --git a/libknet/transport_loopback.c b/libknet/transport_loopback.c
-+index bf48bb9..54129d7 100644
-+--- a/libknet/transport_loopback.c
-++++ b/libknet/transport_loopback.c
-+@@ -73,3 +73,8 @@ int loopback_transport_link_dyn_connect(knet_handle_t knet_h, int sockfd, struct
-+ {
-+ 	return 0;
-+ }
-++
-++int loopback_transport_link_get_acl_fd(knet_handle_t knet_h, struct knet_link *kn_link)
-++{
-++	return 0;
-++}
-+diff --git a/libknet/transport_sctp.c b/libknet/transport_sctp.c
-+index aa0de9d..819bc9a 100644
-+--- a/libknet/transport_sctp.c
-++++ b/libknet/transport_sctp.c
-+@@ -1537,4 +1537,11 @@ int sctp_transport_link_dyn_connect(knet_handle_t knet_h, int sockfd, struct kne
-+ 	kn_link->transport_connected = 1;
-+ 	return 0;
-+ }
-++
-++int sctp_transport_link_get_acl_fd(knet_handle_t knet_h, struct knet_link *kn_link)
-++{
-++	sctp_connect_link_info_t *this_link_info = kn_link->transport_link;
-++	sctp_listen_link_info_t *info = this_link_info->listener;
-++	return info->listen_sock;
-++}
-+ #endif
-+diff --git a/libknet/transport_udp.c b/libknet/transport_udp.c
-+index e4f6fdb..e243a91 100644
-+--- a/libknet/transport_udp.c
-++++ b/libknet/transport_udp.c
-+@@ -438,3 +438,8 @@ int udp_transport_link_dyn_connect(knet_handle_t knet_h, int sockfd, struct knet
-+ 	kn_link->status.dynconnected = 1;
-+ 	return 0;
-+ }
-++
-++int udp_transport_link_get_acl_fd(knet_handle_t knet_h, struct knet_link *kn_link)
-++{
-++	return kn_link->outsock;
-++}
-+diff --git a/libknet/transports.c b/libknet/transports.c
-+index 6ded675..5181db9 100644
-+--- a/libknet/transports.c
-++++ b/libknet/transports.c
-+@@ -27,14 +27,14 @@
-+ #include "transport_sctp.h"
-+ #include "threads_common.h"
-+ 
-+-#define empty_module -1, -1, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
-++#define empty_module -1, -1, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
-+ 
-+ static knet_transport_ops_t transport_modules_cmd[KNET_MAX_TRANSPORTS] = {
-+-	{ "LOOPBACK", KNET_TRANSPORT_LOOPBACK, 1, TRANSPORT_PROTO_LOOPBACK, USE_NO_ACL, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED, KNET_PMTUD_LOOPBACK_OVERHEAD, loopback_transport_init, loopback_transport_free, loopback_transport_link_set_config, loopback_transport_link_clear_config, loopback_transport_link_dyn_connect, loopback_transport_rx_sock_error, loopback_transport_tx_sock_error, loopback_transport_rx_is_data },
-+-	{ "UDP", KNET_TRANSPORT_UDP, 1, TRANSPORT_PROTO_IP_PROTO, USE_GENERIC_ACL, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED, KNET_PMTUD_UDP_OVERHEAD, udp_transport_init, udp_transport_free, udp_transport_link_set_config, udp_transport_link_clear_config, udp_transport_link_dyn_connect, udp_transport_rx_sock_error, udp_transport_tx_sock_error, udp_transport_rx_is_data },
-++	{ "LOOPBACK", KNET_TRANSPORT_LOOPBACK, 1, TRANSPORT_PROTO_LOOPBACK, USE_NO_ACL, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED, KNET_PMTUD_LOOPBACK_OVERHEAD, loopback_transport_init, loopback_transport_free, loopback_transport_link_set_config, loopback_transport_link_clear_config, loopback_transport_link_dyn_connect, loopback_transport_link_get_acl_fd, loopback_transport_rx_sock_error, loopback_transport_tx_sock_error, loopback_transport_rx_is_data },
-++	{ "UDP", KNET_TRANSPORT_UDP, 1, TRANSPORT_PROTO_IP_PROTO, USE_GENERIC_ACL, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED,KNET_PMTUD_UDP_OVERHEAD, udp_transport_init, udp_transport_free, udp_transport_link_set_config, udp_transport_link_clear_config, udp_transport_link_dyn_connect, udp_transport_link_get_acl_fd, udp_transport_rx_sock_error, udp_transport_tx_sock_error, udp_transport_rx_is_data },
-+ 	{ "SCTP", KNET_TRANSPORT_SCTP,
-+ #ifdef HAVE_NETINET_SCTP_H
-+-				       1, TRANSPORT_PROTO_IP_PROTO, USE_PROTO_ACL, TRANSPORT_PROTO_IS_CONNECTION_ORIENTED, KNET_PMTUD_SCTP_OVERHEAD, sctp_transport_init, sctp_transport_free, sctp_transport_link_set_config, sctp_transport_link_clear_config, sctp_transport_link_dyn_connect, sctp_transport_rx_sock_error, sctp_transport_tx_sock_error, sctp_transport_rx_is_data },
-++				       1, TRANSPORT_PROTO_IP_PROTO, USE_PROTO_ACL, TRANSPORT_PROTO_IS_CONNECTION_ORIENTED, KNET_PMTUD_SCTP_OVERHEAD, sctp_transport_init, sctp_transport_free, sctp_transport_link_set_config, sctp_transport_link_clear_config, sctp_transport_link_dyn_connect, sctp_transport_link_get_acl_fd, sctp_transport_rx_sock_error, sctp_transport_tx_sock_error, sctp_transport_rx_is_data },
-+ #else
-+ empty_module
-+ #endif
-+@@ -103,6 +103,11 @@ int transport_link_dyn_connect(knet_handle_t knet_h, int sockfd, struct knet_lin
-+ 	return transport_modules_cmd[kn_link->transport].transport_link_dyn_connect(knet_h, sockfd, kn_link);
-+ }
-+ 
-++int transport_link_get_acl_fd(knet_handle_t knet_h, struct knet_link *kn_link)
-++{
-++	return transport_modules_cmd[kn_link->transport].transport_link_get_acl_fd(knet_h, kn_link);
-++}
-++
-+ int transport_rx_sock_error(knet_handle_t knet_h, uint8_t transport, int sockfd, int recv_err, int recv_errno)
-+ {
-+ 	return transport_modules_cmd[transport].transport_rx_sock_error(knet_h, sockfd, recv_err, recv_errno);
-diff --git a/debian/patches/transports-add-information-about-the-nature-of-the-transp.patch b/debian/patches/transports-add-information-about-the-nature-of-the-transp.patch
-new file mode 100644
-index 0000000..64e7124
---- /dev/null
-+++ b/debian/patches/transports-add-information-about-the-nature-of-the-transp.patch
-@@ -0,0 +1,115 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Sun, 10 Feb 2019 08:52:22 +0100
-+Subject: [transports] add information about the nature of the transport and
-+ supported access lists
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 7cb7619d9222e09e65c3ec46a9d79a1806c44a25)
-+---
-+ libknet/internals.h  | 31 +++++++++++++++++++++++++++++++
-+ libknet/transports.h |  2 ++
-+ libknet/transports.c | 18 ++++++++++++++----
-+ 3 files changed, 47 insertions(+), 4 deletions(-)
-+
-+diff --git a/libknet/internals.h b/libknet/internals.h
-+index d33646f..106b49d 100644
-+--- a/libknet/internals.h
-++++ b/libknet/internals.h
-+@@ -256,6 +256,34 @@ extern pthread_rwlock_t shlib_rwlock;       /* global shared lib load lock */
-+  *       for every protocol.
-+  */
-+ 
-++/*
-++ * for now knet supports only IP protocols (udp/sctp)
-++ * in future there might be others like ARP
-++ * or TIPC.
-++ * keep this around as transport information
-++ * to use for access lists and other operations
-++ */
-++
-++typedef enum {
-++	LOOPBACK,
-++	IP_PROTO
-++} transport_proto;
-++
-++/*
-++ * some transports like SCTP can filter incoming
-++ * connections before knet has to process
-++ * any packets.
-++ * GENERIC_ACL -> packet has to be read and filterted
-++ * PROTO_ACL -> transport provides filtering at lower levels
-++ *              and packet does not need to be processed
-++ */
-++
-++typedef enum {
-++	USE_NO_ACL,
-++	USE_GENERIC_ACL,
-++	USE_PROTO_ACL
-++} transport_acl;
-++
-+ /*
-+  * make it easier to map values in transports.c
-+  */
-+@@ -270,6 +298,9 @@ typedef struct knet_transport_ops {
-+ 	const uint8_t transport_id;
-+ 	const uint8_t built_in;
-+ 
-++	transport_proto transport_protocol;
-++	transport_acl transport_acl_type;
-++
-+ /*
-+  * connection oriented protocols like SCTP
-+  * don´t need dst_addr in sendto calls and
-+diff --git a/libknet/transports.h b/libknet/transports.h
-+index d58b7a3..6338140 100644
-+--- a/libknet/transports.h
-++++ b/libknet/transports.h
-+@@ -18,6 +18,8 @@ int transport_link_dyn_connect(knet_handle_t knet_h, int sockfd, struct knet_lin
-+ int transport_rx_sock_error(knet_handle_t knet_h, uint8_t transport, int sockfd, int recv_err, int recv_errno);
-+ int transport_tx_sock_error(knet_handle_t knet_h, uint8_t transport, int sockfd, int recv_err, int recv_errno);
-+ int transport_rx_is_data(knet_handle_t knet_h, uint8_t transport, int sockfd, struct knet_mmsghdr *msg);
-++int transport_get_proto(knet_handle_t knet_h, uint8_t transport);
-++int transport_get_acl_type(knet_handle_t knet_h, uint8_t transport);
-+ int transport_get_connection_oriented(knet_handle_t knet_h, uint8_t transport);
-+ 
-+ #endif
-+diff --git a/libknet/transports.c b/libknet/transports.c
-+index b6f3b64..ffebe00 100644
-+--- a/libknet/transports.c
-++++ b/libknet/transports.c
-+@@ -27,14 +27,14 @@
-+ #include "transport_sctp.h"
-+ #include "threads_common.h"
-+ 
-+-#define empty_module 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
-++#define empty_module -1, -1, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
-+ 
-+ static knet_transport_ops_t transport_modules_cmd[KNET_MAX_TRANSPORTS] = {
-+-	{ "LOOPBACK", KNET_TRANSPORT_LOOPBACK, 1, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED, KNET_PMTUD_LOOPBACK_OVERHEAD, loopback_transport_init, loopback_transport_free, loopback_transport_link_set_config, loopback_transport_link_clear_config, loopback_transport_link_dyn_connect, loopback_transport_rx_sock_error, loopback_transport_tx_sock_error, loopback_transport_rx_is_data },
-+-	{ "UDP", KNET_TRANSPORT_UDP, 1, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED, KNET_PMTUD_UDP_OVERHEAD, udp_transport_init, udp_transport_free, udp_transport_link_set_config, udp_transport_link_clear_config, udp_transport_link_dyn_connect, udp_transport_rx_sock_error, udp_transport_tx_sock_error, udp_transport_rx_is_data },
-++	{ "LOOPBACK", KNET_TRANSPORT_LOOPBACK, 1, LOOPBACK, USE_NO_ACL, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED, KNET_PMTUD_LOOPBACK_OVERHEAD, loopback_transport_init, loopback_transport_free, loopback_transport_link_set_config, loopback_transport_link_clear_config, loopback_transport_link_dyn_connect, loopback_transport_rx_sock_error, loopback_transport_tx_sock_error, loopback_transport_rx_is_data },
-++	{ "UDP", KNET_TRANSPORT_UDP, 1, IP_PROTO, USE_GENERIC_ACL, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED, KNET_PMTUD_UDP_OVERHEAD, udp_transport_init, udp_transport_free, udp_transport_link_set_config, udp_transport_link_clear_config, udp_transport_link_dyn_connect, udp_transport_rx_sock_error, udp_transport_tx_sock_error, udp_transport_rx_is_data },
-+ 	{ "SCTP", KNET_TRANSPORT_SCTP,
-+ #ifdef HAVE_NETINET_SCTP_H
-+-				       1, TRANSPORT_PROTO_IS_CONNECTION_ORIENTED, KNET_PMTUD_SCTP_OVERHEAD, sctp_transport_init, sctp_transport_free, sctp_transport_link_set_config, sctp_transport_link_clear_config, sctp_transport_link_dyn_connect, sctp_transport_rx_sock_error, sctp_transport_tx_sock_error, sctp_transport_rx_is_data },
-++				       1, IP_PROTO, USE_PROTO_ACL, TRANSPORT_PROTO_IS_CONNECTION_ORIENTED, KNET_PMTUD_SCTP_OVERHEAD, sctp_transport_init, sctp_transport_free, sctp_transport_link_set_config, sctp_transport_link_clear_config, sctp_transport_link_dyn_connect, sctp_transport_rx_sock_error, sctp_transport_tx_sock_error, sctp_transport_rx_is_data },
-+ #else
-+ empty_module
-+ #endif
-+@@ -118,6 +118,16 @@ int transport_rx_is_data(knet_handle_t knet_h, uint8_t transport, int sockfd, st
-+ 	return transport_modules_cmd[transport].transport_rx_is_data(knet_h, sockfd, msg);
-+ }
-+ 
-++int transport_get_proto(knet_handle_t knet_h, uint8_t transport)
-++{
-++	return transport_modules_cmd[transport].transport_protocol;
-++}
-++
-++int transport_get_acl_type(knet_handle_t knet_h, uint8_t transport)
-++{
-++	return transport_modules_cmd[transport].transport_acl_type;
-++}
-++
-+ int transport_get_connection_oriented(knet_handle_t knet_h, uint8_t transport)
-+ {
-+ 	return transport_modules_cmd[transport].transport_is_connection_oriented;
-diff --git a/debian/patches/transports-fix-incorrect-merge-when-cherry-picking-7033dd.patch b/debian/patches/transports-fix-incorrect-merge-when-cherry-picking-7033dd.patch
-new file mode 100644
-index 0000000..d3b6e32
---- /dev/null
-+++ b/debian/patches/transports-fix-incorrect-merge-when-cherry-picking-7033dd.patch
-@@ -0,0 +1,29 @@
-+From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
-+Date: Mon, 3 Jun 2019 18:13:04 +0200
-+Subject: [transports] fix incorrect merge when cherry-picking
-+ 7033ddab505a0cf3655115fe5037579b7c882a8c
-+
-+Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
-+(cherry picked from commit 02097c450e14afe1f5b34e7fd22a93f7d253b614)
-+---
-+ libknet/transports.c | 4 ++--
-+ 1 file changed, 2 insertions(+), 2 deletions(-)
-+
-+diff --git a/libknet/transports.c b/libknet/transports.c
-+index 5181db9..51712df 100644
-+--- a/libknet/transports.c
-++++ b/libknet/transports.c
-+@@ -27,11 +27,11 @@
-+ #include "transport_sctp.h"
-+ #include "threads_common.h"
-+ 
-+-#define empty_module -1, -1, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
-++#define empty_module 0, -1, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
-+ 
-+ static knet_transport_ops_t transport_modules_cmd[KNET_MAX_TRANSPORTS] = {
-+ 	{ "LOOPBACK", KNET_TRANSPORT_LOOPBACK, 1, TRANSPORT_PROTO_LOOPBACK, USE_NO_ACL, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED, KNET_PMTUD_LOOPBACK_OVERHEAD, loopback_transport_init, loopback_transport_free, loopback_transport_link_set_config, loopback_transport_link_clear_config, loopback_transport_link_dyn_connect, loopback_transport_link_get_acl_fd, loopback_transport_rx_sock_error, loopback_transport_tx_sock_error, loopback_transport_rx_is_data },
-+-	{ "UDP", KNET_TRANSPORT_UDP, 1, TRANSPORT_PROTO_IP_PROTO, USE_GENERIC_ACL, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED,KNET_PMTUD_UDP_OVERHEAD, udp_transport_init, udp_transport_free, udp_transport_link_set_config, udp_transport_link_clear_config, udp_transport_link_dyn_connect, udp_transport_link_get_acl_fd, udp_transport_rx_sock_error, udp_transport_tx_sock_error, udp_transport_rx_is_data },
-++	{ "UDP", KNET_TRANSPORT_UDP, 1, TRANSPORT_PROTO_IP_PROTO, USE_GENERIC_ACL, TRANSPORT_PROTO_NOT_CONNECTION_ORIENTED, KNET_PMTUD_UDP_OVERHEAD, udp_transport_init, udp_transport_free, udp_transport_link_set_config, udp_transport_link_clear_config, udp_transport_link_dyn_connect, udp_transport_link_get_acl_fd, udp_transport_rx_sock_error, udp_transport_tx_sock_error, udp_transport_rx_is_data },
-+ 	{ "SCTP", KNET_TRANSPORT_SCTP,
-+ #ifdef HAVE_NETINET_SCTP_H
-+ 				       1, TRANSPORT_PROTO_IP_PROTO, USE_PROTO_ACL, TRANSPORT_PROTO_IS_CONNECTION_ORIENTED, KNET_PMTUD_SCTP_OVERHEAD, sctp_transport_init, sctp_transport_free, sctp_transport_link_set_config, sctp_transport_link_clear_config, sctp_transport_link_dyn_connect, sctp_transport_link_get_acl_fd, sctp_transport_rx_sock_error, sctp_transport_tx_sock_error, sctp_transport_rx_is_data },
-diff --git a/debian/patches/series b/debian/patches/series
-index c16ea6e..e58890e 100644
---- a/debian/patches/series
-+++ b/debian/patches/series
-@@ -9,3 +9,69 @@ tests-add-man-page-check-to-verify-doxy-header-order-and-.patch
- man-fix-libknet.h-for-errors-detected-by-newly-added-test.patch
- udp-use-defines-vs-hardcoded-numbers.patch
- udp-improve-error-message-decoding-from-ICMP-errors.patch
-+acl-move-poc-code-into-libknet-dir-and-rename-to-links_ac.patch
-+acl-add-knet_handle_enable_access_lists-api-call.patch
-+transports-add-information-about-the-nature-of-the-transp.patch
-+access-lists-make-code-more-generic-to-accept-more-than-I.patch
-+handle-properly-initialize-fd-tracker-buffers.patch
-+access-lists-automatically-add-and-remove-point-to-point-.patch
-+access-lists-add-tests-for-default-access-lists.patch
-+access-lists-allow-knet_bench-to-enable-disable-access-li.patch
-+access-lists-enable-access-lists-for-GENERIC_ACL-protocol.patch
-+access-lists-enable-generic-access-lists-only-for-protoco.patch
-+access-lists-add-access-lists-support-to-sctp.patch
-+access-lists-fix-build-on-freebsd.patch
-+access-lists-move-all-acl-wrappers-to-links_acl-and-split.patch
-+access-lists-move-access-lists-structs-and-data-types-to-.patch
-+access-lists-more-use-of-generic-wrappers-and-remove-dupl.patch
-+access-lists-cleanup-API-a-bit.patch
-+access-lists-remove-2-unnecessary-wrappers.patch
-+links-rename-transport_type-to-transport-to-avoid-confusi.patch
-+links-rename-tranport_type-to-transport-to-avoid-confusio.patch
-+access-lists-make-internal-API-consistent.patch
-+access-lists-fix-build-on-BSD-and-add-some-include-files-.patch
-+access-lists-add-errno-around-and-start-using-them.patch
-+access-lists-confine-access-lists-data-structs-within-the.patch
-+access-lists-use-better-name-for-fd_tracker-structure.patch
-+access-lists-use-arrays-to-access-per-protocol-functions.patch
-+access-lists-rename-ip1-2-to-ss1-2-to-keep-it-more-generi.patch
-+transports-access-list-add-internal-API-to-gather-which-f.patch
-+access-lists-add-documentation-for-enable_access_list.patch
-+access-lists-add-external-API-calls-to-manage-access-list.patch
-+access-lists-test-implicit-access-lists-management-for-UD.patch
-+access-lists-improve-checks-on-various-data-types.patch
-+access-lists-add-public-API-tests.patch
-+acl-Fix-English-in-commments.patch
-+access-lists-add-more-extensive-test-for-links_acl_ip.patch
-+logging-fix-log-target-of-recently-added-API-calls.patch
-+tests-remove-stray-comment.patch
-+manpages-Document-enums-206.patch
-+compress-add-support-for-libzstd.patch
-+tests-hide-an-arm-internal-memory-leak-non-recurring.patch
-+tests-improve-wait-for-packet-implementation-to-flush-log.patch
-+man-fix-libknet.h-for-errors-detected-by-newly-added-test-1.patch
-+global-update-copyright-across-the-board.patch
-+build-bump-soname-to-indicate-new-API-calls.patch
-+spec-fix-upstream-URLs-to-point-to-https-and-official-rel.patch
-+spec-use-distro-conditionals-to-determine-BuildRequires.patch
-+spec-be-more-strict-about-plugins-version-and-architectur.patch
-+spec-clean-up-useless-conditionals-and-defines.patch
-+spec-reconciliate-fedora-spec-file-into-upstream-spec-fil.patch
-+spec-fix-a-bunch-of-rpmlint-errors.patch
-+spec-drop-support-for-init-scripts.patch
-+spec-use-ldconfig_scriptlets-only-when-defined.patch
-+misc-some-coverity-fixes.patch
-+misc-Fix-more-covscan-warnings.patch
-+crypto-make-sure-to-clear-all-security-info-on-crypto_fin.patch
-+PMTUd-create-common-shared-code-to-trigger-PMTUd-rerun.patch
-+crypto-make-sure-to-trigger-a-PMTUd-rerun-on-each-good-cr.patch
-+crypto-rework-knet_handle_crypto-external-API-to-be-more-.patch
-+PMTUd-extend-internal-rerun-API-to-allow-full-PMTUd-reset.patch
-+crypto-fix-openssl1.0-initialization-code.patch
-+transports-fix-incorrect-merge-when-cherry-picking-7033dd.patch
-+crypto-openssl-error-strings-release.patch
-+crypto-openssl-drop-calls-to-RAND_seed-as-they-don-t-real.patch
-+crypto-hide-errors-generated-by-openssl-1.1.1c.patch
-+doc-fix-a-merge-oversight-from-541d7faf9068d10e12b4278c35.patch
-+global-clarify-license-entry-per-file-to-match-README.lic.patch
-+global-update-copyrights.patch
diff --git a/patches/0006-cherry-pick-pmtud-fixes.patch b/patches/0006-cherry-pick-pmtud-fixes.patch
index 9653db7..92c28a0 100644
--- a/patches/0006-cherry-pick-pmtud-fixes.patch
+++ b/patches/0006-cherry-pick-pmtud-fixes.patch
@@ -246,10 +246,8 @@ diff --git a/debian/patches/series b/debian/patches/series
 index e58890e..c5950b7 100644
 --- a/debian/patches/series
 +++ b/debian/patches/series
-@@ -75,3 +75,7 @@ crypto-hide-errors-generated-by-openssl-1.1.1c.patch
- doc-fix-a-merge-oversight-from-541d7faf9068d10e12b4278c35.patch
- global-clarify-license-entry-per-file-to-match-README.lic.patch
- global-update-copyrights.patch
+@@ -1,1 +1,5 @@ crypto-hide-errors-generated-by-openssl-1.1.1c.patch
+ send-test-skip-the-SCTP-test-if-SCTP-is-not-supported-by-.patch
 +crypto-fix-log-information.patch
 +udp-log-information-about-detected-kernel-MTU.patch
 +docs-add-knet-packet-layout.patch
diff --git a/patches/series b/patches/series
index ede59da..f3241cb 100644
--- a/patches/series
+++ b/patches/series
@@ -1,3 +1 @@
-0002-cherry-pick-1.9-as-patches.patch
-0003-cherry-pick-1.10-as-patches.patch
 0006-cherry-pick-pmtud-fixes.patch
diff --git a/upstream b/upstream
new file mode 160000
index 0000000..fce6957
--- /dev/null
+++ b/upstream
@@ -0,0 +1 @@
+Subproject commit fce69571d6564cf2955381e71ecc8bc5a7b2bed5
diff --git a/upstream/kronosnet_1.10.orig.tar.xz b/upstream/kronosnet_1.10.orig.tar.xz
deleted file mode 100644
index f03a60676d2439fbd62d8c08f8eebab3d89e2757..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 462580
zcmV(qK<~f(H+ooF000E$*0e?f03iVu0001VFXf};Q#9}XT>v$liXw<{$Vf?!j*!!-
z!k%(=*YvV`m7g(mM}E9obyTh{Im%`Yq&IoVenobBtc#t6j~KHzEe0?eVywio)B!~@
z3v&08q;yP4*ByR#rf}oKgz{4P+aIM<i^?<+o76K>J!p=YW)MLvO#kZrLcYkwp+fEu
zBqc_Z2J{6cvm09OG8f$ie?6zN-oHXZO#7}{Y<h#l0U;EyvCuu)MU1!8Aw>Voo$DZu
zaHtA0p%)DGRPjZvQ18SjgoIeP;>IY<l_QVQyQgb*Afrpwq`e at qO6OyW)?rl3h$$^#
zcvhs)2#4OuW7=xABK|TEK+L<GNXQlxa;ur-*mNtlOTC<Qqs=jT9okRj?icL#zBiD5
z;$7|3wPCQwqt*dLEVDXUTRqKTwGpkM(j#`+%c?|HAOTG0W4Sm{B>Myd$h**X(oXDN
zJZwRE02b=StdSdRm%Ql}3P=7zr@~*>&_877X-8VrY5Iz}f~T(21MD|X|ERv4i3lho
z%4H|wlq2i{R6cj^<H#Id2f|MYJ at KrzZz&m)f}{#=+QeE#YUM>x_klPDAu}1e&5L9~
zj;G%r3o^9w^vZ1q-(>s<p?Mv4rWfnv8*-U-_5I37E at nZ!!=3zQ(QHJ%2B&N%*3KE1
zBi!gGDLL?aR~pW9Wv<GbGC6VYO_R(|Nv_JT0oMMyOF_jWt56p}3Ltr<lb$kN#pS&y
zVpaA>8iv at k-^Mr!G>dFHIXN#Iumq<i5p1f=UHITuB{HX0d}@$pIx>g`v%T%25<R)R
zd~Y$qzr&rj+7+7*qB$+tqibMlrLmleR-wSO;zZq%4*4MGGmDvt_>Mp at Ga;SNSC<&_
zmx=urIsq(cbFys!0^!bNlkc$uk>3z=u3m8^P6ZU6+<|)(8ohFKt9i(v6=c6<>G&vg
z%kzYVT+dVQ2gVj#Ia-?BvG)1rDt8q%`FpWtK7-r}K1L*#`6whq!!|K(s#h}Hx$yI>
z%t2<wuTKGhMuF071+M|Aa$D|v4X`yc)PDs7{V%<Sy?2JL*|JqV7&rJD(z&tTmtqp@
zu_;-+`(e?g{9iaUh5auaKR}!Js%3yuFjM`O4ARm=$07EMQ*X7`B#ojhRgn~r^dm+z
zoVfDcOg2NnT3;Y5_OW#9Ze+ET{k1jdFn$U!c3#L{sFB$R8`xYr+f(W`i5uaWVi~Lk
zu*F>TzyqCHh8v|by7BwZ&Gr)%7e+Qjxfls^uICCyVU=t%#LsnifEtYC>mso2+KB8u
zpfhdsuDsi=w69sT$Rx5jzmB><1sh^50Ul>d<<$fhAzxdHU%cZn#SB!TeZ8UfVtyLp
ztYLRtzQrXgm2z&@`2vfoqxWyJ&<+MqD*%?Orh6%%f##{>2S0|cp*>^6LaUNMVZ)Th
zIl^=*7moJ691z!N0r|H!^Mp#yR%NOjA|<4tHMfEL{FIECH92=wW94uNH{4jB0OHv{
z+$*!Hc>fXf&X-CyG(Tsz$){$&N~r*=yw0c6e$ef@#R5p5Z+P_3moE|FA{dF2t383G
zhCJk&0l|xqZOC at Gb61rMdgn3=AJua{(0vj&{s0%lGbK4rujpGXPp at 8udKTFDYHvz5
z+{4_LKcu)YJ!mkDe}Cdo%)$^iZ8KWFwH<4&RX1_ZvkpSuUkk9kJii=%`%L>Kl6ku#
zsU1<<D?`zVC;bEt6Mw at +fG3a;Y^m&kQ9J^HfeLP=ns18V8EkZU9$V;)AGP=B^ez1?
z)1SF_eR&;*r^ymbU()#0$wM at 3#$${ZfhPgZI2*nVpVj0t_wcx<^(}RE!G6B8+-nh-
zp(D7B{?E_BwMX$U(L?s=S}cSZPbF1jR at Ov>(^C9=oY$|j3Ewho`nfSF$o+$*KBW&Y
z4x#mfrWuw7?VmaV+((z{=!zXZBLLCTO9R9$eiR~w*M+l6vCH=@uW#a^XL?E%j*)6|
zRuVhsNsyzCq0Kf5PT7m5)K}KakJi|gg4TY4dGKGb_(TFX8~q4S`}$<8J_bSG;FeE?
zg^s7^jAuG4u%CB|+muLP)pPjQhhVkc56^+SYyJ1*D~ktJi3uc1KyvYB`U~vT*}Nsj
z7wdVBTFsL}{PlSveGFvy%~Z;<`!kl>iOR0?eNl%;6giy}gIKrJ0kNnlaJ=Q9K(+3E
z6j at ej0-R`<n`-G7bLLePKMhZUM2Q{{imlb7o(7z9xn(CCT%RwoY2Q+Pc at S<E_OisE
zpdE0GmzX$0XAnZL3(cq~xB at xgR%37v=*gKEw&lRJ6g}^^zmbjGUECM&m?VG6iMUnV
zoS{em- at 5~#5JnnDKm215ARMEdBgA>WRgJP6es at wy^L$pA#g4M%JpWd)(|7F~Ah^9S
zc<g;3&Cf_BBitv?`N`5Qg;Yb9MACi7UcB;GwW4pVF+Y|GF#M53V|L%%mXBv$d}Nz1
zTUd%nxS+?clKVE`5PR+y`4y^$cmeVtnMk(oo^@?NS_b$lBzJhMF{B3m5B?^QV(Q$D
zr3>E@`d@$MzW%@4Q5qDcL{nVQ7cu#KO_I=L%ingA8<<}9?3VX?d~HuUR+0 at _H+vC*
zM1{%0Y`Ioyl+zdrKSjH4xcd03A*5R}{v?Um`y~sd>+Q#p<1GgwvgB47T-ng}m}&(J
zDHz>cT}w;Syqzyo+MrY}@zoP^s!NpV-g6BON~wG&HciScN(NDCDKF(>A52jAAA#&f
z8`)@*TlrVu4^6)$SuTP$Cmt$3{-Mc%guO+#YF5vZIF-S3MYt)cWh@!THBru+^Swm_
zQ2UcbL%VTA<96qVucr6LLaUC?6|ZCKv9v`<t<c|(-emZuHSosSG|0Xc?yTg$TlQ~g
zaen1_d_g5p2RC)e91Hzxgdm1>{nSQWnz>)K4YN9uxrZxUQbFV at SJdUgn7f~FLQp2r
z2E at lHuM>68C_j^E75*mb3~TB6TaSsI?UAf;xMoYN*}o_c-0zkqd<z`%c3w0D!z(fT
z`uk;c{`{;x&w9TvyLT at _lY0Z`Jc75aZ6q)M<Y;TjL{&tIzZC`VfG+)wWCS^nsfvzJ
z#hRPc<SfA-vw=DWo at oJX&?#KpQl!_?3%L<yP!ohTe(%9{dn`S(Ipx=05xq$=sL6ZZ
zt%Q<1ss{QCGpvCwslN~a><n`VXQc+*ZUIP!PnP2JMn0}*1GaCTA(57#=0?zos%sYL
zn`!t>kS(9L>C^f_b?xhyXQsX20C^@hbDGO@&=6p|MvRvSTLE at kr;x=1-;Qp}kh3<W
znZH*g(htSz>4Gu3Z4T~^{)RjG at 9`UuVT5ujrCo|){m<i`IB-%7VQULN&Pcjz8A}N|
zk|OP9+fB;Xq&h=r8&`@ywbRsWPe|bPgkq0Bry)SWrm)alzxh1t=ct4t5;T09YlNu+
z3D!}m+PqfVEc+-rHba`<NGag^QuPQN20trGw^SG_15V|ot*J%lbU<{K=q86HAzQE{
zZBNOEy{?xsrD5TtO_}hxIkOmM2G^3?@jY_bQp|=t)SKoyoeD`x1$yRfLP+?}M$ziA
zH%UJRar&8@(<&j1-)A5!dDiPbci;#w<U$vsjfT>=yM<5e>mAHc(mx^4riwQa>Zzu$
zFzG6D7jp9CJ}}Ir5<q5!31F9bm`cucxx!##Td<vxgt|t+B~xf~>zxBRz&?+;8xfY=
za*o<dXDX7EvV`UR212v96PgNw;f0#l3g9SntRP@@c=c}DH=S-D8L at Q(XDSWboIkzf
z1-D_q{5AT at 6`ut_0#{t(TH?mp%K_-up$h<Zg>&ph$XT~JS0WZPn)Q&lIq!b&jXgt0
zhK9SLHT0hbjz?d?)FOH^AZ9djzbTEP=A`C+8?nn|y}|+`UD7Y$9wjDAVB*3Z^$Ug@
zyK>6+TE%?ub9IiqEviI{w{cg6twclZR~z_`lU8M2 at Ey-g{`B+Rgkc;mho^Aune<P@
zg<%ePYfY?gj~a2Nck+V6RUTp1|19dbZ>0<GDe>yK_O8F#Mh6_VIt)rtA2mJ02SL0M
z$lYCsjA4HC(W(#RLDV`ldqs}wWreoEXuzST;&;)rk+=1#Q=`#LtlHNv0LQ^-O2WDT
zE}6T4OHd{FmC&5(aqsnZ^&@L3q9^-REK?VQAw*a`Y*N?~h6dGMwscd{*2#m!IxX&p
zNMBK2^n8k-uQ}5{R%=umZ)5dRD)wRc;U2~Y<HtXm`*#U;(ZpjtEg5tcxJOJGGwNOU
zD0rGLa?Ixd8dc)!H at UAEG+!-hR0AfQtt?sO`>8>QBSSRS_Pv^6e6&-uyIBxi=yM*F
z<M8$}K#74-!&q0+{S{NWCXo-~msclpLE`%5+jlY9?EdY%O0X~hMVWQz*2gvjPG4~R
zczXKPN)@<N<axIeEV;aB%|@#i at pJ)ST82Kk#w2Y at eM1;{7ZF($C28yUN_1pmLMB`+
z#=vjL2&M=RA#$hc*fK&%1NNHQ;`#ziAD2_RHSq!K62a!a%ObV{j9i!|u`L!@-L)2W
z(1|3E0mC`q78+t=2%7oz+YqXN8k0D!^=^7_*cW{&m1x&t-7y6L5Fx4qiM={qId)$6
zQW(-uq|=t~HWTtwLnmrDr>Jq#UeB3L)2yW5Be}26$Qj7#&j1UE0^QmkWPSZJa;28o
zfT2WhYDuo!(s;|sq3sV8k&y&jip0eSl11!6p%<#SGh)!)mcN9N^t5UsEhAJW+bYi@
zdX=Tp8Q at atm#(dhC%1M at g&@V4rOyFr9SbhaNiGj`ky9tjxy}=7t)q*Mv(V8WitceA
zc}NxH^bTSfN$M?562}X(5|g$e<;jGxpmZ9;7gj#@|9)S&7ewx>xwJO}%=vrN$bo+W
zHo{iM%~yw3=DfLKBVCI4p9b6{Ul*k7YfyZl(kf&wd!n9tdv2?-HP<JmYu}-^PF!|l
zpXwbukMBrg%z|>szmqXcdb;bOT!E<S!s=3KD3MCH>&)Y4(iTu^dC|=7)Q5(f`X*gz
zUWpe*%ck;n-wc>^HI!(w9I)8nW$sWWZLs0%K`oA>Pne1P%e(oR$#pJe+r7lpl&~1A
zK<l&@mCNYL`|Q((=Y4jIHO3z^dT;hvNtTP&<R=cKBUpsZMH@$it$V+1$Cbg4nlg6o
zCjK9J-v>jWJXY}@-f47qp)=QkqDb6 at q|1F$KH?Hq>cw*XbZ2IY3`9;;JC4hQdg04+
zY2w3+u$z2e7kY>N#mAm_ at 8KJk2u@N9m0xGzeJv^vU9r>8D!1xZI56M$jofLsePZX0
ziBr~-OOlX{{-wBv&vkORss}~Wfu{S*YJNw-hbFY at YokXt*<DBBhO*22=+SJ#2AkEl
z1sQhi=KGOKQ+St9E;!+8F+hV=ME#j^10`ffP`R3_a>{UY8i;xTE;36#vCY~u at Vm^!
z)2Hy0d99v1HB#){*<^VU5t>SPdi4_0iOBC3r?WFsnCDO4iBu}DXpL@|!Nc=o20-HE
z)DB+giE1mjz>B_qIxnQiqb&~5noo+eTgw}-O2ap&wbIP&RjTM5^>hb+?~SQ>-1xcQ
zH_K^a##R5d{zGRF4(lp8p76Nxq=G9as0kqM*{p$v5neH_s#jJn$uk1z1FaHmriX{r
zp3%$pdKc~o0+uKon>jacMK2Zm1Ql9LSUvPn5g at NuY2X?b<UWm&bXj|g0+C at iAA%vN
zqU%NfMXAFrA?`v at P-YY-hwedZs5ktG2q@EOsqaw0Ip5w2_j}_<;T6a#kfXhM^0={+
z@!}^5hoIg;Gfy`6DZv6pffQ)d at ojwpZ1)wiBSeJ$Sx+n^fD9UnLr%v at ZE#+W?B{7U
zTwZQn{&F?mUrqOfKGEKaAME0)&*zG->OM at B{*23S3 at c*EMq*HEIML79E3r22A7k!l
zZ&mX=#rX8+kzTQbVni8X1sjL2`_XT at kM*d*1k405Txv5^vOcU3P{aaFl8qNkx5_BG
z{3E;kDAbkeZeC&$5VqmtjUAfGKQ(%DYUIBU2h)ZJ(%Qav=pdc#Tr5YCK;$61*8dC5
zy-<&j)j^g}<PR?qQYeXDRWBKUNbmka`hp#-)3V9uxaSaHTEpm6 at tS_P$_<rBs-GdD
zK99&>^}C&R=cT1VjcksKq~wy8z*e=v<9T$+Ee`lZfTwHY9szZ0(mS6Q+kqs~nTkF3
z{{_csm!&CZj;DMmV#S=vszkApf;{WU>2a2&AQ{4L&98HON6{1o7CVJ~V69;#7Te2#
z|LJ<iJ7dsJu4r))uOe~TL$n|WBd)j$$HPHy2rXzEd-ttClXLJ^Nlu|Vt^g}HXHGjm
zc|ac*5mzk~N3z5^^jPpd1diNjG1eVgO$zm9x)F!z08C(SWV~<T$L9#{;ak;+ at Je*P
z)ug4vExhcJQeqqPL~v2?dvg+dcE*_q6cSzzw1N06W{g8BM&b2C=5#`74WS(HZuLdW
zr<%a~Rajv?q2m#<CT2nI$+IAd)1vs?R;4E!;_67R51p1(t0f&7;H9Zveq!N^Rk2AN
zN-wv1x>)TDFJB5+vTHmFKgTXL>;9h54Q1km?75}pQm_HKcY7mjv@%G0SegrernW7U
z69PWFv$+euT;6N-8j_*~$j1H9a+0(pmHOZb^{X{aMf>ErSh=G9GRL-DUiSN43 at fTE
z#g2QQg5fYAD4xc{%&W^1_fmRN%*q6*G-e0Sfa92~4joMbJs;1J=R$NwVZx^hK0jWa
zHl)^gC7Ya=NJWwJc9jpmCeU5 at dN({&HsnH&Soz;M?W;jmTSYzo;sKk4YQ%T2NWoMr
zY=Lr at AWPOxaFGT9wKfrRe<w`TX-?6y6~2)D_>@8_MI<i;fLsq8LR4QUCin^FxtF~&
z8#@K!34(j115BRRu8%YJwi!&f9aD|nY?Ctd=X1Y-0rZg8rnJioUB4&|-JGEi0=87*
zA8LIGDT+o$L%^7vhxD#4QUI3SCKr?mXD%oxOgs0zd}ZsgGLSm-zxJ7!O~- at EQ;Ih4
znq$!(y)n!q?t47ZA=BO2mzh&d87=T+*h3W?@5P>Z?R_^sx*1{`5{Y343A=f11Hn|x
z*of}%uuN`voPJGjY1I-*#SUtesMD<r3^fj{JmTcoMpJgg*FW}NFMq7Mgqo=qYPTP!
z`cghk*>-PYKx*fGZ?qsQnxYWN2M4MMV`x*71f6_k(&}JnpPys-ye!Co2VeKudih*4
zr(2d~YAh*2Y~{4*;f)z3{O|qLpjV43y*6=MXi~FWhNp2r&qiQM5Dp}Gg3}oZp$z}B
zx)+`{3OKz#6S3FLu!zcqBzYo<#6i^K4L3O3XBBxhE8w?BN+1E??7EEcFXHe>&8IB0
zQ7?ro!#;BTgB!<dv|nf1TY+(IY`fHi=&d*-3<aLf{UGaAXkTM4J^efIJ&gl#ZFhdK
z9uZwYCA=v)=9-B}Z=ej$y at bCJ*+Yc{!-?r+xB`B!CK?^v|M9hF4&-BF5f65xjfpKo
zyrc>=9ZyS$C<YaC2UW`QxLcq7SxIz>B{j<x at pJv(u{UI1H|DPG%4f-Z;ldx2AsI!H
z3rjNEF~dNpXnV-01GyxJ?rK`h49kq)WMsbJuT<$i5#pHX;F2xd%%I~8D8tmvf+?%k
z^NQq7odOjDZLF_HIcw~;(NABi#|laOWgH&<*3P>}l~@h-6ilMk>X4uMj$>P`=Nr4d
z0V!A*(JTLNY+Fv^t1c@`?ea_x82{(#$H~NHgaCUZ<;rUSY@|OfJP!&z)hv4A7b_qG
zw0vHYDG&E9hR|(*>rJWBNUN5v2;XAeH+-1y#5WxYb?W0|44{cfrMXF?rjs^c#Iznx
z@^eKjlA~%ip^EE$T<F{7d2tm3;g;?Hp#%W-tFc#*+C((n_#qS}!5ZJ7l4oi6&0hvF
z=k?z{A^<3dD0~Z9FX!=6+&Gfr{409e8~~Q^rC3t2xAL{E)LJWZJ8I&UoyblE`=<5w
z=2o1GR3SvS5<1s{8<=MI{9fM%YT5LAlY=o}KWzC{;%cj@*Hl4&5sDSq($MIs^y+vl
z{V6-$jRO>1T8nK^-2?F&<@U*;Sf?l7fe%MIJk#~A9)ZI1rmKf$ws0rtFmU5AS5((-
z!3L)jl_5nW;vx%Fp{*)f(7+%J5=j@`3rgl<!JTREVBOU1MBx`mWcMNzOiIKF_2Hd^
zDF3Os{aD)330Z1e<f}z0>0au6mxQE9VoO93_C=#5X>|s&&=z7rjljP6#dGBY0K;fC
zlCcVh*SrW`=eFedNQehNdsWRV9J7`$CC|hRspSV|yBmFZ&pfE?6R^^Qs0c-ymV>@D
z*uz)jf%f1NP0V9gm#e<|<Yza at D|&DL5rajRw`67v3hF=TZ;O;is)j5P%f(-N838ve
zljLvfk_4PVKjItqG)*U_TBIl4!WA9<i1T=?*D7Es^Gy1Ve}oCU1F^-7USfYEF`FU+
zzl+<n*xn9hIddnU%BMU`$C35haC!b#N60^)OOLR-CLRx2=$E0#8<c46zBbu!=={HA
zn{42D?1NCR?<WXE|CAtxRVvTS0R}`B7F4{iD*NgC0~O|@yY9>b4Cx57frtmWrT9JK
z22kY)2u$LJ#$vE=QgT}{l9t!0v&=Bd1+G4+UT+P8{_{4*Jw)Z^9Y+BTn!dSf3zxa!
ze>=8iA!*mn?fc6|2R=guV|lHxDf2|RKB}q{Lf^CZB5CQH*vZ!0Q)Rmh0!JhAZtnP|
zYmC4_=+>kknh#(?OSW6=XLajDTPO!Gn_mwd3f5pa3Fcidm!-EwZoApTS*MwDF0AQ0
zr;6Q~wO)nZlAn?~1R0$N0Yi3IWJv=enCSEQxRDr?;Ii#>g2GAEpp6~4(~Q^7Hgsym
z+MXl6CtAKu0ja5uBbYT2*<P?W_^(RwaglVVTe0{*A!$K(z|!n8w`Sden2kUiN!;V4
zdqt;>-Nl=4?fyHth$l2qYvH<?+6HlJ4wQ7!&?3yIwaZ<-VgCg6(h&YN<ksL-K;y66
z9PY2rLzEHAINl6+1o13U`Wr_5C9ThVDx-|5CiAT#cEe@(J2Q~gALHYYdE?h`cFEhk
zU|F3tFzKESUGM#s9c<MtudGY(x72RiYfkJp2tjf-&Ny<>(B&EXmL2uw&28n{<NH%t
zjiXwQV1rT)`_n(n40hp3bT=2p8KOr+4llNp!gb_mpBJh0XX~{)eISWtTXN`bB?i$L
z?S`z2T67*UC<r5^h_|LxzTc at Nr~C1&C^SmPhx_igbl{lB at 6jAM7Q~L8BV(K at 9{%4Q
zlXk;H+Dwal1H_}8`}3)k07Fx%w%sQm6~<&*xVZyg|IW0VkrF9b-u!l-jUyB=QXDkD
z8<7Q?SN?DJCrN()sD<gZ<)V&;2`7*!0nCthP}}WB87KvI590>v;J$KC1u$KDc4UmK
zkaX;eThONQbEGWRXNo7!#s^586F}G-y&)e)Lu^?Jgi1foYUAJv!h6+vloK3SZ_=v0
z`$U#8^0{+&K@|FxPl6Zy5KwQ9>Kr=`YG6sW)7ST{i{1aeGZ4n7Ibs4=Q9^5B;%Ku%
zvXm=A`SA+eFYTI((#>eAb3qHOKZ|169*i&B&xT5Bq*VD=92mRQ>K9{~@)vbRPY;Gg
zbMVAnu}U;x%C@}ip%A%rP<K#fHMQtE^)GfC-F?0%adDG)%6 at k(f##q at GpiUL{}s*z
zQuSbp)L_#TjhcndlLJeU4I{PtRPc2JaGwBgq1}>*gBgpWGicebVPCugE&o=}W`Zb<
zVRVc$#jwQ5<B?=#2jO48DP|ES%8EMfa89*m4Zr61k=Rb=HRr~<hBD&;31+ipI@>iz
z94$%?^+hhIk+|7JpYPVgyR2J&8E(rP{SMx|;o5#3SeP=3zBEtKjAe{WBBtMJVRvuz
z6o;6 at GxC+_2kAMN<xzgx2uvrW6Oao{8RH at W3WnY~T_^ev4m~_nGcKUon at y?B%#*s0
z_owzx!(fRJ+x3`F#^^r;&ela8CeP1HB-BbKc!KC5rJtBe%^z*@m*pPFzJyOnIP62c
z_OZXWBzkBMsN*XzEdH-h99JUAY5U=&IO&^8RXRj}Gi`CU1*ryb#C`G-3+Bm^@gK{d
zRjCCQ7|XxZE_P#_mjJf>gSw->BjrxpR}PcZWH3ZeSA#BwCvMX9V*ClW^D9bVEG^i6
z7ZYVz{VbzA&<-Cd{9DW-dR at c^2sH4q4huyWjS8qh=9L`j%PQ#KrtM#SKE`&OvF*tV
zP^zP(ZQW4qvDUSk=RxwVsaWyVLZ=0Sh2+X at LPS#y>4(6zEBl;r>Z3(V&~AUC6tOUv
z)5x;v7w|L5p8%y}yuw|i!SxWPu5SA!Pza$>QhN6SLU>A6-W;$kfMVgUDVzMlSdid3
z9F?TkeAfP1Kzh{;>$8L_P`v0pzP9NzN#3l@^cQfMI`I^=%&+3I1nnAQPZQkA-#1G>
zAS}eCoRrhnaLYDJ6sN0wAK;ytS?5Ots&WpbM||;nD_(P5a?4!EvQlfhuSCiljkhE9
zVf3V>9 at jcu*UT*W+%xJ|l+1&KgR=T9C-EL5>Em%&p*-hwPPg7o)Ma>}TR_Jj2c5%!
ztzQzsJr{?NnWc+`mTnDn{TiUIEqz1zpXLpwJC=dzKOE1JR<Lj2wOg!E6du2W(|x?p
z0=0L7Ow!6t^@G5R!RrVYeLRy5ePnppCUjL%{6<?L^qb9QvB`0iso?eJ0gsOw{fYD2
z?9hfKSuVelzA~#CNMjE at 9i%eLO#bTI_QwR8Pv;iNGrBbsIeM5y>+gfv6=muC_8L1I
zOKjZ9oQG!Tha!#Gycad{{!ESRr&>+UNpj}@vLYty&aIzgL^nI1bd7AWU#sq3mKB=H
z$&QzF#IU04fsHSUUu--%*cRZR;Q*$E#^o$f7=JWA+6w(RKCuBo$Yfk}#h<It|1zKv
z7i1h3^>T3um3;WL6blz+D3O^&!4K`fCDV^=wz+=fGeXY)+V5V~_Ra`A%^3!o;qR9h
zV={(+kNRf+!Oh3HP<Nbdoa&tHY_g$GqTZ%^wvy`&@2d6a`5S+{j77U!ZJdv9IA?{9
zcZy&(qHIqPuORuel$B0|o$DSv;68YD_NDz)myK3S2fxTeENI7WZQll&zcTYMCkt%<
zuz=KLypal10_wZcbaM>8w77R16lp43BOW<KZE$8QU0<nD!wC~V7%$aHf~n^z$darX
zt0Xrj_N<hj8(5^}$@>}xabBSrXhzY4p-C7`*mbOi-D^702m~&Lo{2k^NnX;tMDWdm
zgJ0P>tz1sFI8^>zI`2J9dYn;YgWi}<GTCQ`P>gB~UYSQED=J`GzyqdFS=KP-vQs9Y
zN$pfI;Q#>m(%0-$J+B at x8rl>9bZ at +*==Zq!#@vxe!vbyjrVuy6xkh7~7xlsvC0C~~
zdA`zx)x-Mz6l2dmPa>I95xr+3#=Gxf9I8<EM;J7mTW3!JLEzKQ+#v-o6)+th-y9a-
zt=7rj$-JHk_0dWO$PZ(l43LxtPiy-|CQ$zO-ewX%CZKCHa+8wxydb-Br8Z-8)BKmk
zH^2c-M=8D_?$iJb at k=t`Jvul5cyLWcYN}cZTqmCFu!$xtp+~ItWlg-?Yt(1C-p(fb
zp~6!P&)9}7A4E^w`%VTSav8zE#*P|cYB?@^goCLo;%>m;VUNt=Qu8vYVqjg3IiUuy
zC at VvJHGaZBMhC*t$Y6MqW$>o#%?c)@?u^HKt;!`(HX&Sj2FhF{@IAUcbt;TzZ2}|y
z*GNlLSo<+GUcR)V%<F_OPe-0t2s at 2hb*TSuIf(kBRD~z$sqbh5MZwDYO<T|U#{PHD
zX^H6w!T0Ld$=FZ=5-|J1vjCW(h|4T6wHLm)D8s}q3aF-u!pI2}h!dt2XAPUL^9Mn$
zxfB2F`;AlM7^IDay=z;}QXOk)jkOxJm+0{(vG7v7UFBh`)r<Q7@}P at J(C8{!SP90K
z`bY_O!Q0ItYG>k6n0rM6S&hj;1LvN?UvZ*{W_GLFE^+<>AakR-<COb{M9xQ=-as<W
z<<VZVn$T$f!GW(9U~CBSgmQnb?R{nPnT)Xdx%qS_QFalY9Ri_*UFLxOY4A at t5<n+>
z_ttqjels3uft-FdxAiFqaogkyv^e^^*lE3Tvs8;af`v3T03!Co_8-u7d;S#Z9i;fJ
zQ|@JogujEHDpGFUu|~$3{nc9B|5g0;qI?gU`oUa!wtoPCDlaza;4y-CsE*JwWpfi0
zBc&!%$ApX#YKrfoQ4(zhLZP)`q*xnTqiN2>Me5n%8nF7FHt~3XrzImb{8dq}7h$DI
zB$BEv?lJr at geNOAbsCY@{)NyQUs(;JHC#zPHic+HX_Py-mO`YeM(kwC066Fc|6uaU
zGHJa}xuEUf1{MCK0OHdjEe<K^*ABGrwM^6&xU{T9Y=p9k?q3)(Nn1|X(bVT<awJ`n
zYevbx0-`IY-qPhxK1!AnsgZq3AC{wtyt>J9mCf>^DWvN)N~Dz>6dfCbjL?~1d^J_9
z*=Ol5Ogl#vAS39sTuDS!$L~z76%xe$`L=R>Nh^Hva at t_(2ZsubZs5TMh_GY?Q4?mY
zG>jF at VPjAD3j_2jXC6C0Mx7u2t}bR&tMzb(9X4^fyWvylI)oB9m=1a-hSkUn$1%}#
z&7l+yN at i)(mE#Cmx&kAUt_fpNefeRG(3DhCZAOk3Bv)zcKe~l2+-}LH!8KHcuAyk8
zQPHP70l!E8PfJhVZ;)aCTR<@9xY=POM(wyXf)~zWcAe7=X=GgO#>3BFloY$g at mLKU
zIO;**51<9x7TYp*<>_CP?RKi}_Py_N0mPT0wv&zr9OCMO`3wzRA(5RD17KPmKnr#3
z_&#lP8`+wb<@l%Yb)n)U4vSgpQEVdA9X(BYiJxd~So3UHvHB47mTOlt2qHWb+}p-V
z>eOE}X*M_1_VINpP75iv2yh*B+eGu7?n at tWNtUgIe%sVUgJ|b*t+$3&ZZgWM(Djz{
zA at Xdk`=L at a+%cMUL!bw at _gh|~BV(aObE)b{&&t(-gIgj&7bWA79Q_HsiN{Ch6KR8b
zBRP<;$e2hn%#E)heTjbM3*;P;?X9wdiE%@=t+TNw-BfU7qk01cvl|HtQRS7X|HWrf
z5 at wsG`I$mn at MveJBzuxvV-`m(*yEw;r{1)Wl_V7*0a7v+g^AW3IZbur^4l|Vbd<qf
zcTotbyc4%`I^dZxQ2iCR{gGn2C!c}uBaf#&cOc-xSFuI6DDS19$gq6Wqd~`Tq-^vF
z+et9)hB-2q|8s>kF5Jo6)TFS1W%c;tLw5CN&ahxIM8fLeQMXqKa&nWsF4-<mg5%Xc
z$(CSZ&I?$UWSTFF;Hj^7!{ZFpjPjP)<wS=Y8v^By^8HKGLc_!|vYP+H<O$pgB8AWm
zXI`$GbE_K9ulh}fFJV+yx*%^LESa!Y4aDPHuEYE2{|vUdN~JN at VC`l9JnJD$^iUy)
zZxRV_M*{YmtgEu8uI$AeZtlMg_4zgOS&IBeJ1`eWZ;1Xqh-HFvO&L_4Qyhm-rScq!
z_>|@ZO@@&`zT+lYvst9=?V4o^E(##QfIwoL?-^A_ajpW1AOpQnT;!*l>PsLzpET%o
zvOd`(h}$l1IV^^xkrzgm;AgKs5Pxv3xrNBO+zq_ZwkMT>^sU9eloq>8QHizWh9 at Y*
zB$tV0p!!*P>#KHXhg&aRVQn~v)nJsn9=xH1-A_-FFoolAYY?M!aOYbVvt9VGF+*h{
zt3-#=K#;b=C$M?;9L;)UC|N?VYBFym6ez2ch3z?_M%eVihpic09Lqxae5^9o2*i(Q
z;EP)iY~)D+&Z?4S^OPB)v^LDoK#MD+*cAU3gu*Z at rl@^|eyIy52rYC{Kb(<Y(PwL@
z`&dM4GwXyZCwNLk!Jo(=;j0$Foc5PL|AWtc6cKG#k$&Ie*8}Vzr{4bpU*J*gPvR6v
z3ll5A?CvJi#2sY at nz4-fD71i>OCDQ_xhv?k(H<r>c|OTjm+N?qu^j`;#SiH-Jd;A&
z{TMSEc%iE9S%KD95G!na*x(F at f#8MdIAJKj;I{JBN1zp<#xo)Jh1;HPZQH?fF(jx!
zX$ip+bd~$h=`I;!NeB490VGqQrF#LnR|`|h=3WR7U2b;~xfuD at s)?U46o(U%$YUkc
zP&<z#HTj<0LVTN^l&I%~8Bn!pvZ2!N8aZ%>y)!x-yhPg~r-s`J5GgY9gT*Xmh((ic
z#jg2ync|VsimXx3(Y>N-#Un6>7*&jJAm9amLV6`j^%|ld7~xr)yxo6PORwzRp(@xh
zh#V(RDov#5bhFeS&iT-co`8Uy%a(PYKt_F7=K(qLA<F<E9}3c*RFf;tUss&GX3w|D
zIgP8GL1-xPN at 1xUH`_QK`9R`XEC+Zxi%s+~;27RYlFjqKYv=T_4m5l!;%fD$sPh!2
z&t68&T0FT4e#uZ at P~6dv=lpL+NC4W%sye#b8b7t9+pf6j=oX>;0^P|ok0)RL6YhuI
zp!l?Y20(Oqh~UnAhQ|nZz82XzMf{cWdM2@;gZ6{}0-yhLJogOerK;B2NmDaaKgKFc
zu>T_N3%?J;w>d1=6;jWCY}44&R%%^x at 1UWf>Tz$3A3GA6nF$XNpw%i-(wxGZ^EgNO
ztt1D8Vg at cw8WoEK0;wmA<hLHnc{Lr}$_M4Kz9ZLuLf=>2BJA?r#F+)4j<|H^IJ%zp
zVBBEo`;Z2wnPT6a$zSh^Q5NsRXdiI(oTy0R*rJk9h6DQqeqQ;eO^P4sQ#-=M*XsDi
zkW0V+KW|mG=gcrQ3sbde<4MudEw_x|6YT9p$`x)5Y|7RCD<}HT6?j9+o%)39$+M*@
z!nipg%4KzkhpFX=1jlnZY#VcyR|tx77d3uzkP$uN6dcX*o!2K!?>wErf=4-o)}{@!
z=p9KAJET_kjOoyHCuhd2)&z>yApUPho!78KMiu1eIw<3RAgF1xx0n|lZaQ*Xn5)tV
zeaR`Of|$^A_rS7k7(0Cir1PKEwJlh#lc~H5d5>pont101c!8+LN{?|ei+uj*E|Xh6
zOeN}@OFad)=N;7IX3Jo%%0g3|mASw-j=aZhNDu{A_0br-`F!78)FdS at +~iyp2R~Ww
z0{52BU{eH at G~+vw`}{(`!I@=9L-)s~d{oaTf>01WoOAPU at w}+AZJ{aZTN<v8?jBIi
z8XFEpnk??sTq)goJRK)*Cqj!o+SX{oB56G$y at C9w0UV26q_g8_jqGxHnmePP`5g*j
zrVq?m0NW{Dx1y*trGjMn-qjzsx~8QXS5U8TxMS^cvwJnaK);foGSY&@ngRJ at N+@bL
zP5fTQ;b~MbB;|L6lc7iAq{JO%=T$!Pj?UTMfH}`cgCHlWW$=w=m18rVxZ4wi1oWW^
zc1(5}Str$E3 at Z;*gI*tpGkyq^Op6OeG6<s at LG&!4XVPYm;&JpU$ASvWzFi<((==E2
zPt3z)5Rw?L%Ra*KuKfMz(;y59tuNi00_L at r-{g>gRdv^QGt#zP>>${QjDSb?l4443
zZ_D{T>}W6S2o*UIe=K76NPD{|M~r+tXj at -0o_b}8@^y&_rf#H4%^-?5sDm$N&QTw>
z|6S+ubuib}S6P1^d+7V=h%wFI<nH$@(NZ?Sa%IrVTh>e0jCueS*yn@@FZxDOmVoOE
z*aU|vULlg$_O7Urci-&Qu*y(xMeYrYG~Ifw?HYXgh)h<U51W1&cj$tY9i at b!cL-{9
zI5|h1wLJ){$vuJ?^4(5})0VQf!h&*Y;-iwisQ8~g$f0AF?U4iGA~MGv7N7?In^XXD
zT^J2<qP?d&nav4Z0=|HrUW`C+RE{jCc#4|OoXRn(ESZ#%T;e+bV!f&PlnEBvY-`#l
z`T)$7cff?mrZc17B!OrR!PohYc|;i#<WuG1wTsAa at GVo}r`*1a+++1jR-K3Wro+<Y
zc`T=vXfDi}so>WeEI%zk7g#_`6pM^dWX<$TT7Fx|{xVXIpM2-0C6&VJA&59hQ)Mo!
z%@pWUIje9o3Iby62A+83Yg2S7G0$xWSxIQGSY-g(8THlDR6&=;hrS1n-i`clyspjR
zbhqgQ^rA?+{xF!R>@ps2#E#=RIcXEo)`vOz8e|v#UHP_ePFD_x{a%PAvdMGcy}>y|
zu`ZG=`Hf3`0Mqv&iwT*m=PW&9ka|dbqU=CzA?Q<NzfMwWk>uTCRB1S^`PdE;)j3Y#
z>oxT$6;x&C>fL at z#D5>K#ZKGVRhI%n=_XpK9%?m6VamgCdPD<^QNW6<JJkaT9PJf3
z_NWkYgG9iQnN7?C(`P0 at 83G<iVj%Nf(pd=A)zpU&dy&hT49=xWB;k?hdYA%VRL~2H
zX;L&-RM?(+1v;^^a_*xUzxXp^fBbPf%V)04R{c;=*YA^FCodkhaOF{&7sk8oz2Xbg
ztd4LwL8{m}YRD3VXzZSm|JRKJp+Aj<HAxn6Zt0*<V%q9%{dJb4;b{1#7BoDb1_p;}
zp<AMgEWrvi*C|DY1!-Kl;Rd$_W at u^kzFqYse7*y&Bt))q73>fFcoQCPlj77zUOm$0
z`|&sf6<blnde+b=6&54WtT1%D%U66P|5IiiwaC1dSOTA|ohSZRnT at CHL$&7=PGqdA
zL?n*>6NeI}+||Zv0LHC$W;zQ4QluT;%br68_XVX5;VqDgFTVSC(`WZ|28N(0X(jf0
zW|EZ^fv2K&2^U6xb!NCSAH9T|1a5jGehHNHu7<+kQ^||FSTFtgXI3<MspYxgI2Ax5
z!wW9RD<C2vC=2jSVFfGt8h76=9q9H(NS1YCfGj<-d+RGVZxJzu<k6aF;Njj*b?R1b
zhU$tylMiApfsOMIRK#bajdg6PML!C{l!*amRqd7MciohSL&iY}0cr!0b;6ZVy!N$7
zk%K>@>qUlc%3oo_-$)A-y8d5DJVf8=b&hz%URNOjU0oCkF17a!C=R7RyypF3PkfQC
zfim^9X;JHAhf0ynH{<g?$al)laGIAU$cQtwL5z!*A7&{JsgNEQOId*4?bN|oU>{{#
zO#%kowFnE(xv;TMDo~DyK4O`>e}X_;#r$3%<u42r7*X`2ba3(48RGu8S5ufO(O4N}
z17Ar6^?dcMIy02lL|qD;FB6eW`y9U?1-qcka2^*M#ue<9@<UCL+x0Obt9rt>x%5Tr
z-xqA@!JPF#tT6Jh9i!Q9@?)Omxuwf63fGC9Ns)^CbJ4Obsw;jrv}Z0>sieRA<{LyG
zD%F-Bg!ewx%C)%3V9bWpa6jiPT<C-dgn@~ol|f}$Cx90&HDOA>WCo9XF<xw{QD-+e
zxxucBi}BU}-~I<iCDs(95BviIu5u;}(2{cCooty?VHlUvy*mL}8EeL at G+@yIt2dmv
zLx)Z#!z*PDz~lgS+1({chKQws4q3l?12q01NmY09g}C7;SodKJ+DiGLH$GmlK+?U7
zM0`>g(hL-El?QMDcse_|YByz=CM~GIabO4o5Q_GVl5GU&16Wd_JX6M-ZlMu%FZR?x
zNU=fX`c4x7Dyi^Ukt?wyoKTR5zvbsJQ>c8hU=7$=wO>CcLiw-IS=hqX)n5c^^(#?o
z#chuaSp5RFE1`IcPhPJaK;zwE1ts`!!iDzizJ#J^y1JsaZhrucSRAeH$-iGtuib}0
ztLZc2uHInSH{+WdENk#xvI;_W+jNeA>wt|&fbffX>Ym$0M9c)bVWG=2ZrlDN0)2VT
zJ1N$H*0y%3HkY_=q(yeZko!7$9~<p`Lnb(J*890ak8H?^fkZI(^12dn(jjFF{0CJc
zuH%++{?`=dhUvPA at a7I`{h<@Yf at f^(FF8*eNL1!6kOm+AJ37dF3MRJrV9}Ss`mV~P
zI1W~7pY)JI1<`#<`Cu`_!Z7PmA{vQ(vT{ndeFD=<H-e!+-A0+- at lo+Wm*=?_YxL`!
zLPRf03Smof&!1Xr*%j3DL;Oy684oqUE>!qK+e<<Ou^M~0UV%r-9ikT`p9LP+A1cHD
z&`+`0V24;qC<ev~yRpyy4r-_wkEv(-N~S9fZ}dru!haoZJfqTstDy6fo%w6XV2>w}
zy1<9|NjcAn)}r}ps*tZZX`f+Ize92u?{oO>Ok5a21ZV at 2?)C9^OoGO`_B#0mE&7O1
zYCuIAR9(R)%sLU at sl7d>{BA8_;0W at DQIahbu|FEykMy8XYQ?GLlS~x9jML$l+}uta
zMQw4yT(;rQ<I7v<OjmArEZYBOGsq9;3C0wOF#@Z|H$1t8>+ZZ?UY!*@6s<nxr=(0&
zGrWe%cSZBJw>CChHo~DvO5N%8$Z}2?VH25Gh at IK>ivgoHWrkhL)~;#F{cfZLW^~ie
z#5HC=up}ZC=F7TILn{OUtHr`axDIs6{>xsa^r=JhFLI)5ju3to_dB0<dz+W=V9$v#
zcL7M%8t&6e8I}O at 8NqpM{-S_{KQ%^$fgH>d>n- at zM`+iI2n18sT-56RD at v&tA|2YU
z$Ev<-DD?J<RJ3!mvdWmDxyOnE2Js&5Z<DheO39V9JLTGs><*f-!jmr^=FxdzW$g5@
z^7pIL$xkoo-FaZXe%^&=BkJr5Ns8?=)$?H70&!8pP<P5`Fx^D*RL at nq6Ue$W%Ln3o
zHbWS;P$zbEqEz9#)h3$3$UF at 3v^k;3bY^nnRqvbd$ODhNPrF%qbb<B*dkmq1C^>Yf
zfr*!>F-rZPU(d6 at mwPhsrsIUyc#^y;5%GNbqn#Zr!}}Q2Xye)RDN)k_uy>EVb<ht5
z=AX0CIlNwKXE9^s=To)nJ!i)cK6b)vctdrG=FgZ6MVHcV7YtElfxkRm8D6=$e7XU#
z0v6R)3C6NK?B6*<MBqa6)N|k_AQb6VR8ZFmKHOvap$?L<nPoqizx4l`MSATs8}QjC
zmDqF0zvBQFCAaz-FipvjGl6)Ve!5X>(ll?L+$2<+aOja|kdlF7CdAl(1P@)*NYz!D
z_16z^NaqlUk0XB?m`R3Gr&0-I3#fFD=DN=Q|Ly@*SH&6O84qgUM<9FbR%qLlK8qlD
zv`?pA*BRpzC at r#hg0C#t5E2Ks4525uczPk{LUNAlmOPFCwH+sSC>eBH at HW=|T{j!0
zMZboS%L+6R#<$PG?wp>_JT#jDYB5noCZKUH4|CgwsH+ONm8alWP5 at f|?Fa=mrP^QT
zV7qWa!&$9ZDhy*z>P1BtbVmOtj-fBqoW7{7*YUJ(QP>31ulaL=t3_T;!ky_jS1o<w
zOqBD^o;(2wv01^s$C<9p>votBlQ58m<9XW!v36vnwOq5&r8mi#@0_n=KwK8wfq#84
zpG)b6j&l5J%92Ofok|(L+na<!G>U?rZ0U`;X%h9-oy(gx(zND{so3JKI$Vs=AtGlz
z70QJuZoV<!)|Ets8#ukNwr2FAs0mK!{)qa=xC)$lJvq@}O(iyad!NPKAJXXcljGS^
zhF3T(xOam|Htry8IA{Mh^zh)ud$~!e$y#pT*RHlJgMzPHBx2qN5t`FmQ7WJ{{YX7C
z3wW<G^nZGx-=7d?c+!^uL(4fpZhP6KAoU8Z^<Fdjxg&@r(zNHgUM^e*PXn1r at gfpQ
z0k=B|Z&ll(NtM5=C}hq462Nav%0th|HTVEVQ%FC0?SfXxllZ}V{+fYHc<*|+LMq3<
z!t0GAxVC--gpGM?55~8GgcL_9N~{$Yq&Doi;pEL(tOp_6$7HcqkBAn^$^J5Es_ns3
z?`sxelHWL;Ye2dPPmc-5pa1v$DKqE&2Wp at QfoS*CBp|T#_Tb<PrU=H)yl0U`MZ{~|
zC6|B-oAr~Wvm7%KW`Yl7?O9RWB}@1mc1b(7d+ZadI&@!oqkaJMRb-}5AR^nQG3}SH
z5HS;2WmFdmM6~P|%g&T+nOoZzi^9`6Ad4}&`3srsV^v8gW}sDKg6q|ta6F)ZAl9Jn
zd6Zi`arpEt<%eL*b}Ud!2YB|X&AKeV8vK$*_anuhUZn>Sd|=0(&D}5sO>*DQpic|3
z@$B#1vK7*>sNn8i>s(`Is&Gc)2oWrxeDzhQ&78pP%jujlG6mZxLF;q_q!!1Q*paC5
zsWH0T-|Q&CwNI=M=n-o+b|?41Q{OdMybxi)f_ZglYK>J9C2CuvhV1gdg=Le~?b*E1
zM$}TLzgHp0i7PbF>5eB3c2|4R;X2b2t(E_xEHFm^s|I|p#9es{Dm8;G=p=%dWi<7*
zRP7i1L#_qL7`^U~mgXVY-id at oJMZyyOi^aMLNV+D9OPu{A>?kKxuz{p{=?V|pGXB{
z_D~Y})9Yk7a?u4iH$grzHvy|h4(v_MERPHb((Bl{>t9#gG8}&IIpIEi32n^DWIs&g
z at g0`edS({Gs8KDo(7DdKn&%4Xp1_|2O_-Ly%>;rurdor&F-<$Anp<5ID3G3zw+&bd
z<&vmR>hQoY<V{0Cg{QIzhs8)Yf)FHF)8I1pVH0`Nkmg995=1VoYP0 at 9({3~d_0$)f
zv`SdDk)}>}rF5n=KM_WDI0C_{X`Fh!Z6JJG)Ay$B198)b-}bpaGdZ#DkkU7ZNK&M%
zX*M9`H8aL{eXr~adr;&U$t3MbC=-h;x;fBvBUHl}*b0!QI#V!?G{#eWPt!VLHG`|Y
zc?BKa at BJd-#DJM;VPOv*?(9oE=GM+-q{)#NH2#?pk|`}REFUqam~DWl?xg6eQs8m#
ziuw%zZMHQKxS|^GZEjokwD0d?yLo&9bbtf`&}EkaJz5n7ohL^CBvitQZrgqP8)@sS
z&*FlcHuQP_c<@^}9Y?JjD at 4d%vz|Vz^sN$)q%o- at Z3`4Dgdn#T?|<RLX;aTW3|w$m
z{wsfjTkXB$``OJ;=2e*dTqJR%J2~E1J;ksNFn)v#8?>S+TRh3j8dc>$hb1fOB=R}^
z#&znRV_UR&>!%lE1MoL{Em$SwUK)|!8G-Y)!VBB_1p?z5qBYGTbZeO&^;-&T7ZKM7
zyO%v2Iq&7X$V4b!50`9DUS?h)^6kWPL$aV_1=NBnnu6BUc?~L)2MTcO4>x{#i3&d#
z3A~a}y>0XI4PvMS9M1GqayOw|_HIui at ct&wt_iS-h}|CBTXeXp8tOg>i5v^U$ku-F
zhHu&PWAR0kC|fKHYK*rm`zAf{QaxEM)zS`dTcvxqXN(dC-ebR7l`n+5c?;%WDwtvz
z#ZTaIZA9 at i0(6UK8-mt<IQgoWfRe+IdRdSoN^UQrd?>$;WcpGC#Nlh0b}qI}x4;XJ
zqZd*!%F$_W)&CuWjc~Zqo1T^Yx(J;Q(fVKk>5F$_wBZC1u0=O0HEt&y4FWOtifw)M
z7QDuVr^4fF?iH=o83mky?uAK+ at 0dHRbxb``u1zogc$5JY>e#fQ!QOHvPjw#CkZ~1n
zvO!?f#FnfE8jR;GU}zp+ec72Sj2??XuMXGY{kE1}?$2uW8>amB8lV_gAE}nR6g1AM
z&Lrw}T5-~$_zZ06S#<+$E^}sQDhk6#cEZb?_bzPs;70aTZKAgnKy&#(Yljc6HC#8u
z$ALv9<Po!b-$iYNMW9xar;}19h)UtvGxQjmvJl#RpznWI0kU);>sNeLwhg%YBCm_G
zQ9hbn2rlk?4X_r&0Ii7YakKn@?#ME{9U~kw#zzX^>evybXXkoU1I=C4KI9ioz7)_N
zT*PC+C^?4G{nSkbyffzV+nRo3Z+k!9zA~2pB|zH0qTLMVLP}HHMO=*=`gDupF=3Mf
zrL)>8db$f^mp{r;WvEXW#jH5zgRo3|rbdh_suCAP(D(TY(uG7{#+E9WIow?TBX5gj
zXH;QIj`s~$wZGI3pW7rw+0?PM1YEc5-12AA6{!rI<j(ZjbGAC`0s?#f=jMMQk=EdT
zAu%!tT0cjey^kwcnb5a?n%g(Qgq$bh3<p`@TA}HpBQ>;U?oR<r^G~W(^L?THrU%9s
zLGa>4BfcFA3ivEJI>uhc#kV at h(3iMtn*<`2fOB3m7Qe}S1<<uSw2sJe^h>U?SF{b<
zvFm<`@B?Fg1$^|d83BBdli1BCqar*;#j^Xe8sy+G;}(CJPH7RzS8=fwP5)J~Z=i&#
z>s*-NjU&?Br0AO9Njx<T{6sFzrR`RkONEAZ(3QlV)j1J}A_VmqrEWhC>Ol|#VQicb
z7CeLaO>hTTGJ~~4rjQ<;)GBd-a&D8&ub+fAaA8su{QRF~eFp3DNTg=w#cC&EkC3P3
zgH$a^1_jfy><BG(N<LG<q>(SQ)$o^jC&QXvQjov%O|_n3jl*ny`b~dLxt7XR?n25?
zqV92EwUz7S%Id`_&C34XInqIXIiaX~ge(nYxSxj`&B1*8H#rYd4!;uZlX~;RtWX@`
z)p8RR3OQCOTqo|}(9+mb9SdHm^2&#<2FcIS>$c5UO*Mm;T(7<ScDCoVe^BaND$93(
zIJ#x-=w7!%XbphK>{%TBKjQ7)Ep?#x{Q$lP6$^v-fqeyf*_uHy>a%V{sk7GJ;h2$g
zH(;3W#<5-y7mrt7Xy62>yXv&8sl2p4!2WtbCI?dOg2hRjeg|+Wn0 at _nhyDVHBgQ7Z
zj%b)sJk4plQp3tcL|UI*fdb+N`R{ux{r at 7)JTu7KwY1aSnFu=FX_Ks#?M#RZ6f!01
z3<qNoET_r19O7(@)jvND<S|7Oj9#hyOoLwGaDZScUYv#GX at 0F{%&bZ#fjHo`h5Chd
zHgVx9W~@<zbY1L6W0;q-2@(fJr>1MS^YNI>Gb&K=z=`+`fDMH;KKU8-FFfe#pDExl
z9AahmMt*rhN0y=>6yf|X*i41QYB8G&zpUzE7D6mm^meNw{}_XF6iuKZ9YEd2*+rbm
zho};BH-*>Gh%f5xdQ2RaDN(Wj?NnxS#`yDIf=@H#-F-KgG0$N8SADCMo9$2Bnfs3y
zgYU>uT(^*@GF$LoF#~_Z=U$^vUC1zfVQBCye*%A)ZhHJQ at W=*{lT*91XLc`_O!J*U
zLF$iJS0jd4&lFE;UnBL-uamUy$e8$B)W$D=%|~0)!UhTi&rRkv({1DDZQ*;U=k4}}
zxRP7j!rjoO-G!9o3e~r4MgEW-V5J}Xx?WPHAxG10ac96cqHeUMIN#y_EaC6aHexU}
zrP^jCLo*}r`E9?h*qc$vN^8q?XY+kO-|uF6a#2imQo){78|3`v$#Exm&e2L8eES at 4
zcF)*LXIHulr&ps#AWGxvGvoR1-pSAjjde1k)utInasX{MpKHu9nt7upbE6c-EnuOj
z`7S}^&QDkXF9pCc{R^k>p(NQK2 at _W*h2Lm(h>4JoL-*mi>b>}yGe*weGO}4*N`T2p
zmoWkb-(5TST4{61K}+{mBQ`>9!zjS|`EJE?E8S;3e6v)c^DQ(}Y{hkNe at ZP`p>K|8
zcTm+wM;6ot<4|t>dxMypZ!Y4Jh4mZ~>G}4Ma3+tEwQE93kLn&IstLAeNHoYYX-vKq
zefERZK2W*wJdby8 at 50h3ieiB4JgkfLW5%VQ^SEa16Qv=4ZUN}w?wl>VGKZ|<a?&bR
ztaFvc==k&01avtjDV>xuTvbe8ClZK7kk&{_8Z-3uqWa^xz!;T at F*+qN7}qN&BG*>z
zVGBn`QeS4j9m7 at Nc&9aVAVBBbC$nWh@{&>ILX_*D|EBg#cToTQbbX^%EMGrFn%mw(
zu0Oq}ca!tLNH7fU_|e#-qqy#o-e}Ob)3b2IJck-)dv~}68#3KKwDl`~jXl3C{L8{!
z&agyDO5){;=TbELb&AsWl6Ia_wuuZ+ECH`F7MTW!<c%I;^Ug9?Jl6bxp?OCUtjO~0
zwvbe-S(>3c6ScuX3O_np4VdygP8HlG{RLrwi}ot3F-(;E3&ajLA0LMT@#4<SYs=!=
z1sRQMEiwKD)3U%o9J`(EK^_ItTQ3DNAQFxHbNfDRcnE3_<upBt<=is|0Qd^H+oA~I
zJD-zdx;`Kq)65czC8aEib1BVP%Qd`a90w}5uj`%s8;4YVU!>A1C&E)up&lQjMa~tD
z^?T?M2&uvz(g^`@5u=J>q%yKTOD5?8XflMumy69sMKOX^Y~Rw0-L9bXdYm6U74{E0
z5qFfA&K4M5J9#E%6jHmC80G-6A+8$fLs-D~IjtsWI`^=NgOu+rJFXrO;|YbctuAwo
z(wN=%RM)&O&zv1GBF$VeR2b#erPja#2)4TUvj_KxpAWdmpN-!!@1+=7T76jjKN}_~
zM~@A9Ma5>hx2|6j5p^oT2X(ns02hV94{_*C?uMCXKnu%TnhAulR#n`sXqx5W*zgde
zH_C>ORX2!oHuD%VB#5nyg`}&j>m<idg6KrL`Rl)HVj8pwQ8v?R&K!8s556h=(bTA|
zs1ok%W+;P^v(uP- at H{yVxjGInh75VBTI^Sfb4-(GyGWevu!ywhXe2zD7G0p#F21T<
z6gVXJ2t}!vJ4hwqe&68IiG3aqu#E^A{U89hw<W!^x*Yr8Q}AL~<`oXN?x7A5ZfgIt
z#(KS3QG>v-hb*!3_WG${jASNT at C8el*Y7p9uD#5Jj4dCAYEyKldW=UrA|}%4(Vta#
zB3Jdho~v!ftdSqX?A_Q_hGNM6_TUnh%BUSTfZSS^uz-uUDLa-RRZIyOqpOMa%r2|u
zq`1El)YUu|rOQ}70%A7Xk7*51B(%LU#36s@!4xVOw-$m%U+<7?f;D&%89d_O1Fqo(
z>%?*-|H~N&8DK_#_LRqbn=^&A%K1ryc|`!zK+}U8x%{*j`t<n9jJH^V*jTtVwGX71
z3>Ikc*+$bFlaH2mBfwWs0`ELkk&=r9gV$VXsJ3rgPrb!<Z;E;SW1>a|i*JY`!br7@
zFw-Hh-+(M^21Qp4&zDBTXj^&;fQ6)?sSK-l6cpO2mSl^8^z{6MXljxb#J*8+MI^YK
zJY0Z at I7|yBSAb)B=L1!Icn)M6$oDE}IF<&<oNN@*T4$piNh2FIR^JZB1T!)l$wg>P
zJ+yWMRl|~q>WZA&JALKG7;$dlWCO|qY)`k0tdd?B=T(nB%sAZYO|2UM8%8{vS3Hm(
z7QsZEBi95>pnO4-_wGtB6I+Y?(e7{rWIenfR12NE?TC`>NR<`a5P409A{f2MQ=TH4
zXXCqwsjtd%uuEpej0o}&Oybgyo2IZXS>|A~qA6!Qq|0DGPyrPDM$n>`p<JlbM!sp`
zsgflXsvlZORBPM1C<1G`jN+sAu5o}UX9zgK%3pWq)kt2p1XMk75K)3Fd=Q$v{p`xY
zU45Mm3SXtZnqB61VHYl663SQ2C+`N}4rOeZ(_;%zBowj#;qgn{wkuX2)8ocblUN~S
zJzBMy&}#(V|1^e9Mg|RU0XKoZM{&^uO-bg8$<b)P5zf!)-QR7XqDn(q-xtgzrMuGW
zuJ+0i-a%~Cy4|B$V#*TT30dV~TqM7SMf%ObruJVDj_Pcq=Nf^w_fE>;b75C9tS#K7
z+Km=LiDNd at WB!tJ=vWo0lc8!-AQ{_o&vhp2vRd at X_ySqxeh|u3aQIsCn6rS~)(Egh
zaLsbV^k^!oVlL8M={`VkIZ9W`gV#=`tQB3bJn6PYM`;*Eg{I5^JQMtKqNtrXT?MD(
z65b&B)uYssF at OGYU|p_iy;Sv99>cPy*<w|x>~g+S7)%oVe+=fJ_L)X3k-Bq0vvV~Y
z93vuYnXb>FPEd}KynX=N_%RBnPi*Y^T5vQQOsndpy_bf`XptKLEGaSmEwR)GQf|!D
z-+lV#TbAdnH+tS3Usj+pQ>ONisEay<O)J$udeDodIn6EiQaJi_poo9Br2Y^09j;j5
zumocoD*J6CS2>)eqe$agp<>>OHk6zjmGgJL0dmTr`Qa~JIztyZjMFgMnJ)W(ydHc!
z#*v^?jV>QKvm|Cwq<u^~I6K0LRc$og-&6;gEuQ!xNTNz=Ui~=!vO|K1ng?Pq<hi3r
zLSh-51<Alt;o)~YC_WD$=)DU?+9IOKcIw*Un7wBoPOvv)P~b at 4xxjDJKS;YIdpF*f
zHJhfLp!TNTeM%JNuq+3U`4-Lj!T6rPxd at 1g^QZ_clq!aTZn*99`&lztrt{V08K$kP
ze1~*S+AlyHVLS)g#HbGOln2Rp9pziMK at yWJK1`)-=13KVX&UoB*_KVd%<0K;#qQbv
z!uB}p5J90#{PRUKCf4bTeQlNxvvw?sPGN2MO#Y;w7kAUDn6QkwG{5kf#AFWYOz4vK
z9zyHw at i>E`RZ&25C)NlBUOm&geGFe%(HP>J at M7AVed?n*jd~J5sFE0vdsC`Xuc+CD
zQ#4jvJ<tV1a?*T~_1;AVApzQDu7&&tauHh74sg2LWcMiYVnY7(XEB&vWA%5;()60+
zgt7D-6_8DwX?OZ&t&*G(MDo7ag0nd2YTKmG0deVN#hAU*g|_3^dXJL2U%c5hMWRQh
z*CJE&=u1eaUtp>NE+t32ake9xwwqy>+wa{>Q(0q$j1jKsrupR`-IgSN{TAx<el33Y
zc$%_OPvUF!!Dv!10i_$5WzeBs#7zR7l)9S+TWIE)pA_*7 at C9pHJeN{Qehf1Eio55w
zxc4OA?218{3 at azg!$!{oEh<_~gHcv*WU1_@$ztKJg`fH*Ux*s&7^}eWZUb6s0+H6C
zV20RCIV&(Jg3P$iI}rh)Z8`DnFtO=aA39L6>IC<xh%V|?eiR9mEMktth&LFGsJc~*
zITejy at WB_)t{tQRk*Hz!@3msWbiMu`5Zq=2U(UGH<}9rSb=;(C-P9N1nd22y>T||%
zTdg@^`_`Yig!YSO`Kv(>#*2%#u?sDR=EGRwy`nz>D`cz%N4{cjgUdj}Bl+y~;`P0L
z<W^nQ at fyx<PU&8eDum+>mo#?ehd&2<el1{xF;A at MpV>w+fXufb*3jlGHn^0|eYY|~
z6gqhjdy02~1_&|5hP?2at2{O1JsD!ZVFMG|wrV(-UJ?!zyj$=>4YVmN<{Wk)W(|eX
zh#}uRrD$)1z`o92T(U~<$82%$tR1vQk?TZpOxl=m|CVNOs;^gIN{T*1gG#hBc)pBw
zF96 at ZVl{!i&~*islhCF67Dj%=zIvtTHspa+JVIKQuUiHEE=8Yj(k-Y<oZ$!fOW8Y6
z9R{IC`aB|^uL)Dw>h<eK_UZA-XSmyu0G^<tl3x!HW^f3VpaiCwyi)mtoeJirkb;m;
zeL2_UZ+8+(zt}vg1Dgx?h3&uU3R-77?cUf3*=qjeTm3;?xt#J1OopJ8 at K-n^%%t``
zH?9U}$sr>De(MX_ at gH?V_ at F^AOTAQYvbAib22&QALfQi&CDLAmM2j#MDTEGJ3DyDC
zJG6jHn#V2PgDD_GY?;D>=U~I#4M(<Z5G&P=Ya5(lHqt+#YoQ}rMJ4RA0E^DY8NV1M
zBOv!-qM)?7naqf>sCu5=Dn+-5HvVV()INf7nn9%=0-BEPZUmgF9H%Ys(Knly3>=wr
zGrv|a75WCs7?>=8LQEwSILR$u!*QQlfJr7ra!0s;kq&3hc3a~?B0fByk~-p}`f6eA
z0g%FtV%D5TIa%e>R4z6GEswKPIelV0nS##=LE2IUt9AWJXsPPnmfbWcQJlUQ^+jcm
z<__&wD0>xe+AwDjCFrMeE#vP!_<6d530L{3Jyu%^i!iZ=4J(PojMZ*_=<B+M1iJ4|
zl|V_8$dtQ0xtSx=c8mKN8DOuDO|<}0pYuFV1vc=<t`cr-=H_h81WoZwk4TlxAW3#x
z(w4ECGR?w&76`}B`fktAkj&~S7*uzh$q`dS8fq<l7|1<rRcNG)z7)|VK?!Z`qb at zf
z1?C6WdXYWUPxySK`v>_kolh$)Z%<74>5V|B!^nfxi1Vtw7A}){?jSwstH?a{H2AC$
z6)#GXdlQ~`Xp6){4N%hcKUXb8FY|K9#!f&S{`3f%GXUiiIuPa>uzaWLyrNALjITU+
zA>v1+ at fXLjNp3&Bm4{ZMGPF852ih?i$I~Nt1NSN_uO|xZoGP&bI$^)Cmg!i;KVfv?
zb4mFKFc`)rW>yhnl94}3l(Uyl?PZ(nQ7||<s+CQZJ at V}UR2=z}ZNYwDa}->%!bp5j
ze~=Gm at i*ib^dzA4$pTHYZE8#1S~$wis(9|+<HT(*Uz<>s_)lkKP70%+*9wBjnk`rm
zL^_UvHYiC~J6ENLL%ceb?c-BtI(Dh8RNq<pABQs6e&hU{=#a(*l;!@ss?0C|I`G^2
zk`U|9r&Ery21Px+#E?;ko0TZpB07)|RV)JjxgT_=-kyQTEY2Pe1cDr%xJ5bzx$OdK
z(l1(NJaqLTB}t5Ctnlu~+$3;7h1D~&c0r4a6!>5V+6~YMPAMyYZGRKUZBepE3Ah>p
zbCo at zZ&VMCBJv#Mm7R6oNQfQc8AK$Yyfr(Im{}APY%hEXSR|zy;>z6$tTU*)u;2B)
zp8dcuP~UZV!OtNx)2G$y&0(vVSJN!an0&}elk3&fEH^P%0>5YES0iV#`>oY<uUkE;
ze3O%WhWY>fS`<_Sa#4v;^0jtYB!pSPp1u|0ti75`v+p at w#OWA}GfTeJmE2w&`6PC2
z`MMS8%bq2vcpNS%6bu70De=+j(?%gtNLVhflhF7SLo^=A5!mTa9FvsW)B$*Glbj)1
z&L#@ssTMC)V~*uZ&iQNtm|JKtA^8Hv!}X0b#|Y*<LX$yQtv2OK91z_b6o%nhq{Cf0
zG(<|xv at -BW5lNw)!~YE^=C<f;prnI$fU_oU;tj5e1MJcXyho=v6Ob-1jSxeuOsBLS
zOr?l4GOeBdFCnaxF%|Mx)pE90I1q%35U+ddz6m|#+FWoh^28VbNaT38zOkQ)WyFu@
zV&AK1j5-u@%RA~?P|RPWDy<n{Dt9Ps&jm3!pS_&S?BY5ZXQC?pwEV(7u8wV)L at SF8
ziN?RtYT7MBBac=2vOX$Pp0!=3?UmG~C>r0(6djV|T4v-DNA^3PF{JIp^Jc+<#r@@=
zr*lW2tqk6B%<S{`2Ir3ygN!7HUs{h{NExu|>_6I=9#N}wP3eCvnaP`tx|>sUw-KF(
z0);(!PoI=_i#fB_q%J#5`8+x>5`62w^#KTk);Wan*fOK^fAb(AFwsIA4~<H at 7hB1k
zF^-pK#UdO7w1Q5sMVt(oE4t83?@UVwqenl#)T@{Z|2kML<XUuyS=7}Q`oZu(L!6KM
zwV-6Iw>gzF^Me2f$i%-gI0=0r723}}<#}SUY6W!_1curmJiRG?U_E4{rQ{~ep=^ix
z9DhDsrd}Pnd;1LvK1Mec!O|e&0W_j;t_teTIii5J<%GSl7RS7}$sxubF>NQDB}|>x
zCWHet23;T4(y-x~%3eB!GaAxg4)XpVG+*4p3`=Fu_ at 1fySZKhbH_wPH;blfFbqO`^
zffu=eE5ZW{_z!ruMqkY;30(2lrKq>x(7-Vx1nlp=-w5y_F^r`EIG|00DdG7UzT1}B
zhPLF|kwKylct}BXsX3K?1}ZvX9j9>nyJPE|$W+^uCtOP5=*JV)4Evv|pJ~({vfc|q
zXjuoz0Dxv!eFLtLhu2*xaaiA)UWQ+-l)I6H>T5G0a#FQUW6J(=anc6u=SD&^p#gm@
z&dbrRFZY4M|2CKQ;=+xd7APSeW)HpOxBuZBn(;|Kc)9kdF!#dXFrbIl1I`iHv|Z8X
zOS&@O!6+NV?B}l?HC6Q_|A%vST5+CxUcsdvjOk3CF#-@{(77Z|h;Nil68L5}=E*K!
zArA|FLPSg=w+RTFc7X6mTlSNceWKxE at 7&nUd1>u+>B!WDr at g28`?KyOpIy!NwGTQ%
z%S<mMNYilDyP4+qPGtRUpEPmrEnlUZeZJ$KngWljimW~k<BShkLL^d^4r&o!bAvHz
zlVZPRlOQ|T@=0rON!jZC1oB6T`i7&`HTO8(YZBE3A6Ybx=LX81 at kh%OF*%~*sP}FK
zGl3>5dMfL74z7Y{psSxxSDvVS1;E%l-7XROC<fz}i9OrAix#O4U2eI*9y*Qu`9-+&
zV1gA2>(-!Z6KdEB`>{fxAQ&A4qo-Ld6mp3N5eo9GqK18AW`1*EQf%p@^1nk$7Q&O3
zVUFE+QsKstXuL2!dpawT4>-lH^_7+}#VEAZ-~nOr#5;8HZt?Vk7UM2cr~`kS19;=G
z787Opl`weM5~NzgN42$d>dKB#H2rleV~0c+XvghlJ_K&R<S2<gL!ev7vPA#-W!u)n
zEk<%vsRoP!qjj#NyQ0Lg&qqK6Q?zXS8rdR7e|s_xbB~*yqDvW}0MJ#m&Jq~MQ;Xg6
zy9CpjUtx3MD@&$v#HMW`QPlEVa=_b$y4`4x{s2mQhlwS at J#grR^r~IRZBZRebL6NU
zK=G81tiBNUO%{(TLhk#b%xJVw{fZ2@%2u$bBFh2#81OM;pAe!}Cpqf>9As;A<33tA
zvGZXZJy(%sl=$-o=??be;r>~}20^o;JO+aZ<RwCjTNv&fa$E7<KA4kXN&OC;W5&zz
zEHQ~)Y;zm~M-V8h3)K8)UYhhuVz65xj at c<gi01UJ8#YSn`Y+ti)zyw{>%_cY{<){y
z7!do-7hGL_s+WZ<D;{O+ at HS{log=I at dzW`^3Wn6K*LZJ at 1nMEKy~QenqLNs3=U^xU
zc22deuzL1xlVFR+t_2WNfDJ`N8JzuC6<&MMTC2%cYJz<2+Wlci(J_y(bKsAhKQEYy
zy3_-GxgHyfzYXbDx7X-t92L4B4yOy!ZG2bduhb~D+EICE%L)$qfCYL%hg&cNHVY89
z<ytPsw?!zH3gDbAVKE5ZLD4S;(|X+oDw at UxxSH@tSq$!GyO4uGTb;ft{5rKf=-d}I
zX5r_Xfu7si13+wxz}jHVvUH)ZNNW@!)V67G>>G_Y|Dzu|d~hY3&Gtpaxnpy5U`UUB
zaO4q2PJ;@TCs%#wZeSwi6X`$1DJ>M29e<VDc$nR`^^19W0Wp8}fQ8HjV5JGFtgN{f
z*h*&#9W&%cG5u`1v-|#55E1sZ)|?VrcpYVFGhDu`9hm^m;jiBG!Fn8tB76Fb(b44I
zlRuQd(G*>!6z=%gtVRnAaS>_wDNSNcK-lO5>?-gDZhD=)%rtr)qPLI~z*E3L6+tO}
zy9*oQ1@(Ky1f=B{nhN0dJ9liLGmtOfAo6TEGRgj|;V1M~^hI0}^D}eH7i#pPA{q8A
zd&1I>Q?-WbdyvF<x80+Vg<Lc~&b{TMe(%XaX^=}h>x~?E7RK at iNOt@yy!}yEllRnV
zo7V%ac_>|>)_e<qm1bHFE2+F!>=Ok74WI#E&tTN#1CfbEkrTl?vyD|OWl_{7iH1i&
zx;ifvV<0okFt=Mr*ua`Tsl+V_0JgL;o*^t2?Im9nZwo>~4yZ|<X6!XVi1oY0l%$BE
z2b1^kuFLg#)`O(E?lts!cQ*jqTLVhaGB*?G*d$1k2j9N}0*86L*Gb~*_2rQ4BPsVO
zQ%zYw-m@$lUF at Krq}h$M;4H6NaY6R&4?iR|Vg5 at j|10<03+56f7zPLg$%ixF$cxnB
z>B)J at I)<&s&4JC@{DGcUct~A3e at 2g9Gzv!^mq;Wh68F9;B_LOG(In^>3}(n-8{Aqw
zRM;=Ay}~Bm!Qn#jaRQ6X3j;6iJ<TgUZ@;`?3wm;c1sPl4UoP^K8Yq%(lP{*3QdZ$b
z;T3>{E8Z(}O|D^#>MduHly9H>@HGgzI#)z0A1;Ui+qb*%V1M?lZl<5l_dL^XcjJ%&
z3-Hw;KL4Eq7l=n_&n~&`6~lw~fJ-lBR}HuIDfnioze9h9P*IDe1E<czdaKkMMry<O
zz6l4J6RYekc^1pR7h at vl;rrnCE~0I+U=bcAMze0Phc`LEcfB$!NLvch%`b at V-iXUx
zz`PiH3H!LB&xM5QSaSHA`sUK%Fu9%P40?KSao3-lJ}DQV;^l5YxWWx1QA$Z-%4bsN
zcZ!e?eldwM-yL-m&hEbVs=5)>)7g1^Z`SYR#K1$7|C?%$5IK=D7jIxb314rAZp+Ni
zo`(l%2-kvvXPw8tly8hPwBNk>&Qy>K2ey_|D(3Jm$8jixit&ByrHi(2OXc_MI%mSa
zym07^f(cyBQhvUJInEO at JW6NLrC>k at 1jk_SI>k9$s|gx2LKT_rm(LZ%rQ=1PT}rzW
zQ6HJhRe<^!ozp#|4TVgC)<HJbX_?wLg_;D=Kya>B^1>i#aEDV-J-d<Gy4+Q)!$YJK
z-hPUj(A}dw65K57t5|o!MM-Hx)9?Zn+KzS*Rby>3dS0>Gl%9(~xHNGp58D|}o25Qc
z%4mxe at 2a$Qi at 3@H7zL%?+iZpi>IfF-RHRxNy3ak6)*!ahyG-}po}I1spEwFd at CUz5
z$7Q~GIMpgB5`15;pMGL599Hv&6kNz>bA3I@$w}58lV=XBgoqUrp{Vk at 1R#nXz!F^x
zxy?d%AkSxNT2vb-rlr#!y8ATIUG}`vfj!EErtq3jmk<`b;ijA0e}zKFSJR4l61V%4
zm^5?HOf)|jk}w0304isg+t}um&ySC#;*WCq at Sk_8z0M!}d(mJtE2V*b2MWs4JIO{#
zFl%kZR^f*^K3ZkrP%*ODIpTE{sKF8j2Q0RN7Od;kVkUK*qGT)E%uBuPD7$B~s|iIl
z8$efBK|?^Hp-%&WA=zi(x4FDyWj&AJxoS)`wNgesQ0GboOXs&W9Mxg=2%u#pg4Ljm
zqXc3l)^{`Me7+EQ0Wu=keVfAf-H}zsL+h6Att^q?LLJM;Vs!xFaFvDa|CxZClIH-%
zQkxYifT0{WmBK7rh3*n0PwWog-ok?oXVK=Whl{1Vch8XLtGiN|NXkq!@cx0 at y8nl3
zcSd#~*cfesB~oOI4Fnbp&=)L>)bDa%m(ElfzW3eCa(MSK8dMTKsQ}IKXcx&Ru|(c$
zkpK6;q{E+|F9PmD-mZ)yp%4)#XT8T{09dat1A#^mbqJG^Vcg%8Ccjvc*Eb89H0wYN
zua2q=jeoo7`w^<?tcoUh1$tlQ35^2-Ix^KMIqu{qEFM#G_jGRtUVEdLkL*SZdW1q@
zJ2{io;_Z0Hck+78i_}*KJ&)5w7D8*HRK4K$lQX*zc);inBfn()GuJtG`wq<Z1uyL;
zq{Nx23AXI0+r;5xp)R9aMe|07GxH4LSECDN?WyU(TgFzos`U+Pgz%=-030Bv1<mJ?
z4J|pki;xjj{a5!hrz6MBWZ5A3RwCk-(Bb!6lYrPA==%xmSLlFJ)YK?MdS_{sg!g9-
z<ETN at 2Y=FWr_EQUs*bn~vfdZGrN at WWp+}?^f%DO*m(-^TFX^i$rr1LuR&NME`W-rN
zO}C!NJnMq5q86h7^b(rTkfSz6x$Sjd@)IxO(DXO5yyMbPHW~nulzKOKgr9w&?j=wU
zNDzr334T`}Z`e%7phkpLMjRI>LEg_vuCj&VM*IS`3RR)hjf|hpT~LHOGyLf{*R*zw
zAiqMe4zaBhhjK+j+(3y!GZm)oh+SJb$`b at e`zX}Wogv1>%0YEu_#v0hhH2L!(ZmV~
z&NVIONf{Q1Ey|=dnV}6xj4dswWWP)N0J<1e at V>6}Ukkl(s$2|Tv6co9=_r*Y{<?>p
zM#FvtojVV+>HXgpbVE{)!bzzGKJ2UfHD!mwt+Hqg{gQy1-i1CSBUO2{9TcPN?7-J-
z1$=aBk$jsoG^z9V=9<MM6GediG%>gQU%Wu=z3{2tJ-}RulCq26N7MW1UQ+*}qln%u
z%Euk_?@8;~9as_Z)IX$HKpSkPRS0@;71`UwPUdG~@YW7w+0RJ;uU3**xk9GrwR~d;
zCkG*$Tc;Rgl&%wRgpd~!uPS9lzC_Ii7B5jdxopB at N90OQNsO@W#Y1=5UzAvpKxb-_
z&cv8Q(^hpsrN7<gBjuniq-kz(-TN9C9~l^-Qf0TTIrHude-f0;C0xX|0)4sKi at 1?>
zRWd_E55e;IC`5pyOz5R19-{Y%ZGr|KH{8d#85ChHJrw-2LryyEvx#CY at gM$D at Ihq~
z>NUNR0ot{k4IRU1 at +pU|YXK2<7vT|mrQyxqdbrX_Jo-GB4TX!FGQyO}vc!jFC#^{J
zVM*EY!dZM?L_SZlj;-J0a{#eO9cB(s8h+-0Ar2p*=x^bdLM5Iy>wh5io9cLt3ftYB
z7W&HM6itk7z<G%8B%z|<tUfqX2rv6(lw1Squ!j3<)1gb9mA<VDlXRr(9Oe(5S5Tc#
z>NWkF8zfIuZ}HU at Q7MT`0Z<u+eDAy_ml9QYKzL_$6J6sXF4y2BB78hOH|V)a&B*|R
zqDuhp`)JB#%NpI<P}O}U)^(u1ff)%@Kr&%`{c2)V0q<9Cp$Ka5vZS_WK%GFnc~@1s
zQ_`?SWX|&2LZ2-}m6rE&6pbSTwWDRiQ2!fv2m#dmJl)>2g#I+NPj{YMT0)=EFN9?<
zF^Y3;Ib%BJ#GW|N5smu(L~fut{$^Ie$njkFZqG#s`Alv^eI?#VyP^gS`bpUOx58>v
zYdJpnU4pV`z-luv`h|GVRc_J7y;q^Fz!sdkYo9q5&f!*~q_M`!LpUa#v`2m>sEZ`K
z_!MlFS!9^~{ll^#ix15p5Uo>Dv_-sZWt7~te2UHU at Oo6Bf%QO(H}>_*uW8n9=iFT)
zGbJ6 at w=$K)|HFE<4kxpnyr$B&P9H)9hPJG8U?(D-yAf8Gt>8Q6e%0mJF`K?I2Nqod
zPip~QkNMC1mgNPV$H}L}#dP&WqB0&B_zAp>7GBLKZ2sW}*cnsjmQXb?z2#X<w~7{#
zYpjqf=1+%x2!8EA at 1D)Iqrgrm@#+$tH*sXB)+t~aoi?w1h~X&d<Z2R$=I8Eu4wFc+
zxW{96GRvIz^>B1ty?Nm-c#Ozf<|^aAY{$^Q=++6;iL5 at N-jzx`y at E#b?<AS{jEgz(
zqOtw%yAq!58=sLpunkRQC8k6Gu6$PtJ75Rg#=u)bJ-hRi&qgjt<Y*mQ`jc`_@!Ha-
z1q&b3rORf)-ZyUG)Fwr)c41eu#u(Ycn!n^KQDyR~Ww`v%Y>2E5gh at o=Xm&w)I+eMo
z(Etk`*WPu#cI+1tD_EzN4KlVxk5g3~$7R&M1L6tQgMgTSJH?_cdripY3 at nn~dYco1
zQ@%$qH+L6yuzZ4m at 1V;ArLWJ%eo3xd-k1&%+PV%EqcY-sa9TX4vD}2hIz5DiLm7yW
z_<FK(ZdP$_ve<Y*@_o?|7<QCq2|($dA9McyOjha*U)Hld2BAS9OYx4KD8qJM=Pz)F
zHouP{?vlpwlu>$UI`%g9=b=|g>u;j^J$XDTfRgO*9TNwXuLPXo0GM5ENOWCV{;bq_
z9tAp)%`jVPer$fvKCjh+R*qA{@YB8F3{K)p0>78Mf<szsy0FphC8gAaN~7{<%_nHs
z)PUQuL=f;s*OWc at xmg5hzmdWBo~h<!JxA}Uh7<TS$Wj$TvYCu!v#j#rmY{|)JD`r=
zdZdm^Bre4K(l{HQmW|e17)en1T)bPIR8CqEtlGG_Hy$K)Y~HtKPeS0yCQ$QuSHuo9
z!Fd_%fgrJlO_<_dRY!Q`0$PkKDUb5g<MjVX<vX(w|9Y+8SlJ?fgQj(p5o at 9!{OvcQ
zVtw?XybI#XT(wI7I22iZ9R1g$Y1E+y8rQRJn&{jxTCBg1`RNW*a}f9i*|)}Gsfmw=
z7^eF_1QS#>z3&S+LrBn#HYNr^d`_i at P>v|kFM<5`Ea_cRw7dIhZowNQKtWVk4ByLw
zc#GmwnY(kV4(5}oEL-xC(ambY-$&_;aB_!hQ9e=rW at 2kn^{2MHbcF?W)Hx(bcZj(`
zmKQy~tqH!!6X3D8QI(99G%0i`)qidK5c1NbsmA+6YL{-oZz<ajLyn+s{=_jCH7a7o
za)wc?n$o!tJttGmh^Ef#>sHgrlLwD7;1dxNy4(Xt?)-2fgE7v_uM3}{@4*%?JnogG
z=60mzssDHFkeCMRQJhbiOK%^uVVDwIRD`V0p>nWEB-nv|G_j66{kWPYXDY3#QMD3%
ze4lUPl>fNuoC^Fikx}<Zy*T|TF*UAwQmM}nZUGPLcPe2~z586~)~nUJ3T0^IeUtfD
zJyVPniC~V2DI!vjG`b|n^*t|<@B7a#c;;pG)P2MILo+Nfc*3fCRibiAgRYpnwmEKJ
zvsoEZoJrnSZ8;a25xY#axD!B*F(Xxc8Nv`6cCAcKp(1(6H~S1qWrN- at XPY)7sGb`X
zBdARP5T`l?XPiBn!KliKX;!N#uaaykkx1ycfXkqyW|1ce>Ds=&dV4-R2ZwOzC@|6)
z#V+k_(HqNj$L>aRIP?`_f#Y~E3;1XOC8EF5dF`YX(z{c;aKsFTxXCB!!?2|{EN6J$
zap}Ob3nwMf6E(W6DU3T^apJ^Pe#2EffUk at k=^V4GVI+w8S4q(~5^YWZf0OX|7H?U4
zKmnW3MP%%${d#}g4Pxf>vhj(XYSdswfPT6OtcPtH;~4I at QaIt%oW+oxA9`}4krrOa
zzc*t`IPQBeajZBRB at 47nAy<89=OQZ(^$Jz+0NU=5PQZ~szF0iL#U;^_GL=h%C9Rg=
zd4ws#z!1jxTZ|xSyI`Rt$Fnf4eeEuxeyvAq{<^Q at v4bqYsD<I%7e!M$UaxiLZ1~~u
zpuGwrk#2Tm3wcthqS<7=4nJFU67P5j^p{Bm2t6O at z=c6cau0bveL0}2DZ-merTb{n
z5Qxik#k;*Z=neSK?KD7~F_ER-k4SjvN7Gqx{$z7Ck47|z<pG{$lP;A$=Fup=kW29|
zRdm&w)KOFL^Lyd7_6Z+n`1Hu&=8pMfDsmi%HPmR{d~&u(@S<byPf5PrK7QQdBu^HX
zON8N~7zD!*o(~*kJUk^yH|+w`pq_+N6hD6K5xwfpBfo;=GAqaQt%cNWh&go at GftD(
z;fy at kp#0HO2LfK6rISYcHF34bjC5(>W_OyReirwmxytD$xyt8V^1#>_W0m{BXp~lO
zc1bZ5S9X?}mj#FuJNW%;Hxr`dCPivE+{56=(;m2uW-6N-uiHEnX#Y5x-JkqA8LuOC
zc$@&K%!G&L<D;k6k0K+jvoQU^HJO^STfXrAk!((Q{4^|}wh7R<dKC;Xvk(y6e$<tf
z`PXT;ak{i!mR4mVG+#9i;z)?DdVH~&106hY>%xPJ1gAW)5Y^l1v%FfEq(|g+8V7sa
z^}K83Y+-EBRO&7l43pOe{#HIc(Ftd;Xk|x-soPdodLu2n?ikwsByYWS0TQ&!)hx`|
z$6Rn+mL6QA@&j|q>hs^k#{TIg^^(F1oe3yl8l$D$%vS%i{pNTIg2zdT6)V at G+1zA(
z_h`8f$`SuaXaV9T5c~M3_JMsWoP1Yx&EWzz8Sss$o^-t?_zeGOg=qV9mskhvo$Lex
zLPv19=HgVA5qxq{OV9Zz9Ii^{FfyYA85z?bnxx}m>gYHtL);_Cm=pA0X#*Aw+*wLG
zB%Y4EtMkfA?qDs366tVZ7<|ZH at +Q$8^rQ$^tCCjF#PkL;rp*~asGQw)a932-u5ik|
z+^`Cn+F at OKjFF7kc6~~#d2C$|eO98hBR6O3N?+Y6q4h%anuMdR;31};?I8$)+Bgq(
z8MbygCNRIibfm|^!gWLlRfZ8#J at j@0_UpaQL-mF6vm8*ArPfg7V63WYCz@$TNApri
za%jIoi8}d##LY`AVdj8L3MJD~&gl9fFG`GlP&xW;Bm`e3Q9!N}yzSp82Ck{NQwNR*
z!UON_8OttXps<8|_-+CeD$d`&(f^^%1#!Ws)w3zt%Q3QM^7CQ83v=1T0cAzxxc`=N
z1I9Fbd+fmJWL3XiO$^bs>X2_$u`!_4s>Wd7&smdRN0^X8bcA~(5w-$iiPQO<#d&QS
z at s=(;V$8AJH at KI_E*PGRLTYvron7+?4Pf%gXrzz90$R1ajyvao$z at GfnY}u+%EmZe
zq>udZZ-(wmh69>x0CEXNF&Y#B`--8!(TsOvP1Ki+DSsD=l*V$<mk|tQaP>aMO!>Dp
zULsc`7(}dV?SSA!*fMqYBN4<BjUG!uFAS0bg^tzLPrZ_{d2Em17lQWR3%;VM$Blui
zJZ9Q>PgMrA3sEDD2t>q}Lq(||U#zAlprA{6X+3*`sro{PO}UY-Ch60<^)bq^(1^$#
zHn>SoqP1tKJ58&#nq at E!{l at m8!^LA)kQ#G7)lj<zGZZeHjChzMOELzH!pNqI+0m|&
zD6Tj-^FppwS<wS9CcFwv-F2NPWy1Rw+I18K7d;?6F7HQGJke#!W3#yqmXSc_n$ts2
zD(RfOn at nvk)Bl=IJm0d)i8PK#psilz$JCDi0JjpT?`MAf`!4IyVvj7#2 at j?ubAueB
zU0*pui2k#{meylCIJ=07M*R)0Z`RCc5z7&gfDN6AHm{>iDykMoO`4y%YOu96Hz`Gt
z<@&o}zZIF;XQs=|h5E=0TqPh{LgSm>SeNmME<S<zI}86fQxg|3`b=2P-zTVPq*VpM
zMQ4F at V_#cVx*i`3IpQyuJMvG6cnFClmJM~6k*Qp&?1&db0LDmSfjbnVBs%}<o|ooq
zQlY2<q`YP}3gS>3$l?oBuc5q*a{Gg$z=!Hy7iVZnm$m(n)65|Pc;hS*-Gwr1vnA{0
zFPD at F*K*JASdt9 at ny}YNUM#lxTT=yo))}J4-$`72>^3GU`O0>Vo)~7nX_}jLN=j;o
zl5T8B=ymn^S9<s=Q(GL<q8xDTSG91#bfMl7b`YtG%yvz16<uA*7rRwx!L5-KEo~!O
zKTL1ay{wL_*)iDcm~%6q|H at XgVh`bxS33#s{MXF_Rj?#&kr7jDyI@#r)FaZ0z+1zS
zsY at yyE9n=2#NLDW^gxqtX~F2`&|8T>Q3C>FfL^VnECRj>%&<~ob=~t>%UAonew)wT
zqu`hQuGrbYK(6b!A~Z<5mzv#EFBi25{Ai*}4_<_NsK64JsvVuzyQkQ|>J_$r5jCXV
zgvqyT*HLGn=RLtdvC*^>Gi~2*t?d4`&{P1 at zLvaE$8IQXZld_*1tuOaB_%ZXc8ToN
z=V3`dvZupD-MP>W`f+-OT5hD7kq!Q4zD_9{`TH>Iog$9=Y at mc;+uVwwvwL%-XUGcy
zjf|x5Y8je~Q>Q6w<)bkm)_Xm!5GA^!0G`2Iy~)F*tzj=4Y6CU&a}{sMlF8CDa^*Ng
zMy05a1c}<W(-=4gCPf|zI_;Mr^OQKQnUN&})20DXaqI1q$fT`&HXZlR^+uYN$G9pf
zO!N9+Ym_)#d4_qHiJL)}t=j+Y<LhMcnul=I%o<LP?%u%-&?;)jnKPA>DHxx!MAVF<
zEjXsNYqryy<hT+BQ at 9SPepp%N&mo^W$Ym#_w*159n0uvxe_r`Lu8b?Zoe&lR&CBXO
zZ$X7nP5RyxMKCl0q;qFk@%<K}gPd3I)&|XNuIiA-;#Tff+dE%|#04GLGo>(-D9hrs
z^KZI^&W|lec|OA&UK-kGPceibt^j)OBIDbqN=`1!aJa#z@)za~t5~Q(#5m-h#fscl
zN<v`!!r4aFajbc7($wVw*mt`UQ7h6sj{<C2!v~LHy<+upCuTB#j3 at S6L;xt(E<dl-
z$j`<dksz{8>Y?;KvN^tA$@hvwMW>@us at J~+$#5hH3T!3<U$Ud@?vWpmgu6cEi%Z|Z
zj#80{t}^e+W4o>EGC_RsTw=5n>N2xpY>`v%$DD#8>-q{*7N#WfGVdTy4)oz~m at WMl
zcv?8vL-Ag6;Ko9Sg;0-C2~eD at Up}!S2CJ5D-B{!ZZHx^O2bQDF5VpXnV5iy9QR4re
z0;ArW_g8%6XFT>i$mRr}_3i_vl<JonEU)uk0*ahBFK^IM<(i9_TE?fsb)?(aO)yU(
znZtL^viq_V>bQ7|PL>djZMlfKsin?_VMWsx;<m{|VCYkS1=0w-nGu|A1MtaR8a!$c
zao#wk+nM%VI0Z7tywDx<@DEPmA1Nfy<bimg&ja-zSQ8RqwG<qlV-Q~e;O$v!<g>Gq
z-H6ILI(`Lc+n1&33d36|sYm=gS2$reoNRugR{8%_7FYev5U4o4N!2+5b#a_>Ia!L7
zQ at Yf*_A=N1d4M1zGq&Et&*Z8*q+<w74MBLA$<crggWN%DJsjedpz0f+?jMgvx^Osr
zEOf+RKG^KFvPGByq1&M(Lrc5HY4oE9(j?;Gt5jMGp>(vWknWc5avzkzVaDkyk{%=N
zGLGmJ7r$e;C5~#YBEY3%+3T}e7Q<Uu3Jk`|S_Gd%NtWq?vEe`|%wcj648ev8I(hz4
z_r8wob2I at AlK;0{=jPEeWnTLN7r(T-G6Y+- at W=^W;0y=&?l>-stzw2WXv#ApW958c
z1m)7E&Ad=>v at U5ZTk<#kXC|nXTMg@%mn;sQw2huu*yqsP+_gUYPP~*^i<xYh26nGG
zQpO*xx=ZyDZ!|~#vy`o(rekG{=Zo-kIBMI*R{SY5e;7}2xM(NP3|Zr{QgFjmpNE?+
zX-k at 7%JruK5^{jb$CQ+Y0TJ=_I5F^idY!o0pTBEOF02k;(i0jDc4K;BWoqDI9TH0;
zNVA6tz(>iJ&?p&|9!(@UsK_>z++kc6BdO8QQNe3X2 at nI=)xtDFT?Tn_*~_uDhV(;?
z8h#9WDn at H$gBTh)u=jvnC7_gqXxM0H!F6a&a)~O(S)~zzHi#(QowTkq&duUTW$5Yo
z>+q<EhEXFb3$@}PJN<`ayX76F`T at PDYDxQ9r>Nz{z^V_vD7_?h5I3HL)`N+v`ODiS
z*X?pIl}ptyUt3WHhE4T{%u4{W?$pmTQPx;-b*QosX4}a5R)Vz<f*+Jc1(IM9fB`W7
zZ6&LtaH-b%3ePO~U}EX45sok0*JH!@eKfni+&?jyg^{dwt(*{ZBKS05BIkEW00gC>
zYYYGs77{ErJyV-e_xANUwzO&-vYGB%w^~q-_ccH6&N~M0K(o+|@h~<HiB-ch5Ic2I
zeO5=ivsV>OTb(%~Qd~9}5V$@khtM%dWjW7w at 9vT@dPN7rWwjm)BE4Wz at 4AdCM)I!w
z$gV%oso?4vCgSu{TR5XNIH#z2uHi{G(_TFgmUkE>j0etUp_Cx^W$PFq6^F20kx=GU
zfCbZsi#5bd02o?ptLAQtfD1u)<kh8(nc|zbf?XIuD<~c_b#3Yeg%+(On~j_Js|Rfi
z?OqCG^MI|UvY=7XvfS#~5<a|tLnDt1=JOqA;*I>2Qbz)4O?jH7db-*YRm)9M<Y!es
zT<u2-pJ)uz{OGA;6TkkiVkNU0);G<w)*a%oPi=vZ60#80K1inF_<n)+NjV*N+>qE2
zt)~cm at ri~sstr|56?4zODuMM&8SRzgSOT%uX4ek{({>IzkLsA}ui%%#(e2n$Ac_dp
z4|BTADZa?ffl)eZdprMz5 at WopJU`J^bcr>pKClY5w at YEP-E2~oMf|>xyE7KmB8zp#
zaWS_r6aBE0mQGE2;U(d2ull at 5WDczk*X(!*YyYSL%H<`@-H0I9o~Ri+ur6t?VhG8o
zEb1!>1>roW*0HigPcrCe-$ZWzagp)$(exZPK%be0 at zYg@6x#4;!gJ%ISRxNPT*@kr
ze at qK#UIXB!h70cABuO~UMkgd)plUJ;dA-go&jF+$5!VxI0t3}}{1oKMw>W4x_jrr@
zzma58aK`pJRsIt?pzLzds>5`5pQ9e*jTkoeH`TR`do5P at ph4QV37lV6hR-wy20iL=
z<|t*z6OQw9O%)8>)oFh9&nQIuC<BjrE`0aN=1AmTt_NMD!^XWp0aeEfbN6+8y9xsD
z!D#Flp)b1nww!#&{_VKiWz@!`?2{|LKlZ%x;S;_Jji{i&-iB_s at HBY4t<E4}TqqZ$
z5qG4EQi%^rq#O0;{jfDDb*vt_OVa|B?@6ZaS$Vqsp^lX$;AW6qZp=RAv6%W+vcJ{T
zH=v9A+saH?qeWm<KRCR~E~SPkaV3X6cXU}@rnV2WG>C(K6?OOz#_VL>%Jzlv!AlZ`
zWv)NK$WP$g4-^M;44|}Lv&Q2AK5=8q?bLH7dWbi7Lny1R4SUBa<1^hrVZ(Z_TA-ej
z2C8};Xig$G4jNn&AZ2zrcyasaH)}2m8VcX7_epV#sjXec6q$D6mP(;AvUD*a32}N)
zEqyZ)FY|`lM-X2IZ7uOrXdhXS=oYY=$k1(YYyUqijMx2KD5{cnb`-pDCY)M9MF-x1
z+rHWfheOV;K}C+#3a8odb{Q#B9lt{r&_!UH17Ef6j5uQjl8-k!Zuz4;5%*<V%uK4w
z(GhU&7TsXv9fKfJs^J*oqB0GMaV02=sQ#$(*h5jd$oL?a$hH at l6w@B at lI=wG=+!w`
z`R)lm;q`^TcLcG~1H}62pKVaxqoS{1DEgvpr!NOGbx5T~BOR)z2pNjsJQ+KZ1o1!K
zO^1^$Kk^O2uC`%2YYk`)eL2CVjzMGjB_+V#7j~`Vaz%alFa))yFN at Hla&T|wF%}&*
zW}Ijr?A5Dp>Q5>gtad5RDVq5FB at sPaFSfUe*W>zyO4~e_+VThw(j*|zuOuGvo}{Mu
zX!cyQHyqFb9(d=gpNBzS>y?jjq06?&7&x#Uc1nF2px|TFEz{G5-v^pTW;+W=b65#3
zcwuUk){)Y?PBna~J at JSZe)nyA!4^UQ>hRhY&&TmKQ$NF5)f&}<a>DtZr?Ob?5S2X$
z7T<p*9;z3=4rxI|xc8586^a79owU}b$*inyi3bBSiCFuU*M$IidI#{-`HZc~0!thB
zvQqiWtvs at 8VXqbdWjJduhqELS2vYdm>%5Re&TCM&K`mY>3f(=yGWPK&qJ at P~doT5&
z^l4KKh{4Y1qHbC at Tg$UnKG>32$Hi~jQQ?EI9~rJNj7wr2 at OID&nkJ6N<xYG<pb6ND
z-rC1iDPI96ZhJd`6;*&7nDPzj9rJGr2{2*BR at t*7J{oC~>VP<-)4QG9La at vyOb}4R
zFdXCln3U)(%P#T=!_L`Kh8m at 7qpYbRptwB|-lHC^u$d_+a2Vw`4%$lw__HP$fYi(F
zt~9sZANW6K=eotih%m`fz($JlY$X=?e0}8vU))~RFfZ}S2En?Y9oh4hLXIW9D9zn-
zIjMZnr{UU=2PjkwJgc&)3<%;<$x%b!cpk9IZR7Zz&h~?4 at xEW%SodwU{xPi;YWQxn
za!A~kUb~S`_J}zyK#}EV+B?)r*slJB5ttSjPnkRTpKDr*e5RyEnxlzaY5B|6IP>$(
z5X##5(I|^<7KYyHM`cd%@MUaFf+HL+hbGq6Po2A4kXw^+1Gp5~kQlcrd6Z)UbT&JV
zbUjyP`m6RRk6OefLbg}-&`$*<w;Wj$wIxq`iHhP~`F6=aFH>2`W)(cZ at -`8a0yh0n
zkj`d5<|?IFRCGOaqM+&9E at O{eEQy{&6B}`cZS6PmNc)H4$dRDt>-&agO=2FUGj4WX
zmDrKf8*)Lr-siG{+D#8q9d#1WJ^(sE#lNIJC~(Mt9OeI!2hZUb!I(bawnh$mGN|?i
zMIykxLhx*dKjyg4UwC#~YesYFI86H?1VOuo7(<=hw(J1-c0!-($Yv2yu&z-0TSI?J
z9*}(kdba6D5Oc)Ou&5gkM)AqcK^^)B=p8YLXMspN_n^}aM5Qa#o+CO<<k%FfQQSGl
z2!U5yN at deOQXH;F0}rR)M128{-Mz2R)u0!sctY>CESH at P-`hZ2_1y9k1W1zyR*81-
z*y>66$(73ER1&)`_8dtg2|boK)CtBj=3+k%0~w5;%j5yM31;HC;nl$Uhj$REjpV*I
zB at 9lNj|kA9Or9#!IMPh_J(&*zh{PWy at 3SA55u;$NI$Av&a#MB&#S*~HN966A8A&G}
zOz6os*gLsBlYJGn5hqa^FVDK5 at EKln!S$^ssACes_U{;Gj=0t+Hi7H^y+Q-D*tHS+
z4$Lc7J7u1i at O+=Qq@)v+gEL_&=R&KJmbNU)(3~Ah^fEs$sp3BeHx>2eg28NMtQve%
zDOzOqoPMC2P0Jq!!cN`yV(9P$NH*{1_|UxfgSS77Yqb|`DWdI4 at jkXZ`&VQ5RhJZ~
zc8WC8t-O8`yMP1jangwXPAGEnI<&>=hIUf7K#Gbj<2GcOgR|~2Ur(U=t{%LQ)i~eC
zlV^0_#o_WI8ZWr2(@oEk5~Zw9un(7zB`-JTr)_vgK%+l`JgCTP?w{@J372p%A|Y&g
z&jRayMIrAW9yh{y#v6=M&1_Fts#6+IRQv2f6HXH-8*$bBZR5dYIae`rIhH$MfL~Gu
z7BgN52jU1IY!~G?EPVfX5bY;WSH&tnE>@A+hdJF*(F*`NI=lCpgp++4N`&5cCeYr<
zqX`;Q($3_iZOO(KMdPR&MQ^Bmko56cl?*l6+>I;}7-T;q;C4$^{hBXP!|;<S3AsL9
zUaxSK+fpHc3I1w-K`xeMEp9C0upn6AWuFL;Nvq2T9|6{7pxvnuREMB}DNizf?$6h|
zf@!*Jt8xp-++qMR?MSVqY!hfq7ed$>MHr_yu at NjptPme)9VDyiN8{CjE76v>(a6ZY
zg}21k+(>W`5O71SC0Pk89t&04%-Fh6KM;t=i%QWU0rBnu$oG7wRTx^-PznNAR#2ve
z;x&Ber-M3Y;yA`&64A$AmmvFkkR!2^R!4P`x0Hk<@^^SK#qaOE<#rS6*4iAzKHa7F
zCYk+iC?HXW&fL?uz?x3I9R=`)=sRRKv+}Bz!JXh5bdz(dnN#;&prr(pnnXKl$fi^3
ztv=?SNwP at q)k4Pd(t>M=a#u)N#hriAA4oFYMdheoE4RAW!@Ngr%Gu!_4NP_sI41(W
zfvS|YiAEecpfrfpc615gsgdhA#b4U5v5~T>NsC-gHG1Sc{;e>7{h68QB!kLP|13Y+
zX{Z#OOVZ_rr>8HU-GbkE;B~LUh(LQ%n2<t%npRqO(!f!<KUq`<dW~*RdMC}H>4Wv!
zPu<6MZWz}+Z at C=`h77<jf%SmxeI|To17KuG5p*8Nnc~ax at KI)kMZ#sx#}>N6pZXz}
zDDbwW%0(EY0Q^d;`i%B-*J2XUxTH*=y+q56ox at wW?D!2WG&b+3o3JMI`TpH1_ro-2
zxe!}T8%1)K{T|Wj*Y|-q at _V<*vld<mo)xH*muY`%@+0U<fabtabHsz8?4X?YKd6vb
z`?8)7xP7#OT33e@>l?LDJwTMU?-03WU;q8ze?TWQk5Ue+5x0FLO;ijq6NM#ULtKdC
z0<ZHxD7K(DYUG!epDu!YHXpWfG7tO+VJ|YSKsGomw(cqKxJdh at H7Nq8-`5{yE*_FF
zSreZSCKCSwkruV2;fyj!_EoSr+fQsdX$dCZbq*&=>XX0FsOTVd#4vur*E+nZ2UL6s
z)Yu19>)RR*tJyRwfLYAP^5`an1Uo0a#YL|(UQ4$ipa+oK3F$5mAI0mPp_mW4cbNbR
zdBicT5+M0MXjbS&0Yukr9??YHuU;v=W193oEcQfu5}x7~1zabEl6LZ%RuH=1_SzCC
zKw(GZde-F<GQDRKc#eN+ap;lEcOU9Y!42i7sjeuebVMLFHsV>mzTx_;hfWg<1YmH3
z7}zHx3!vSO#Z={$k+ngS(Za9TfrTK%ZnnZUfTGVyTM{p2#07xb1F5ZFJdWfWj84%E
zclFYOl>ZCcY%^>=u0C6i)lG}4rmM;;KCjt<9y+Z2pT2g at eOla+!^~0&b`r1Fmv&E7
z-n9vj8UoxKhmu*#7;pMVHgYmq7dQX`E1{wYh0-`OYvm}XI`#Aj(Kb^Dnj~mZSJKP&
zbFc)=M2G~kQ)tqj3OMYbmZY$OtZ|7P^<4kgNavwaksg#?1Jg(&y=GNHUuUs%#b9Q+
zL_kM6b at OC8S&1tSOSyG0`iw>G|AlfLEHHJEAf=&a$22#4gH*P&O1wMWc#MY4W6z{q
z*}ZH2Srw*2T|!i54lNm9WhKl}MZGt!iA=yp84<)kq<Q;!4SL9Ki0av;;Ae4-*+y4V
z&s(u}uc4P>S3|^gGb at Q`6#A?>YRa%12s#RMrwppUq#S0%Z6D-djXo_ at R#H)ftS70=
zWhHd)S0lME3O_{T_E`M)C^Ht);(=LRP5vpqhbUV3D at qSZQzae9>{iA|uUlkC0OHnK
zqy*KPQ<F0Y;T+$bZPhqP6HcS~^;@jkOZNJGLw}0O{UL_JMz_c{^TT)b71j0&l)W3h
zJCW&cTmjyzX93Db_)>G<y~e at D1!S0Am21rsBVu#$+=&BM;b%ooie<|7;(agO($buP
zeOLec6`dV;#nSU?WzEd=Z|~cA_#W(6vw*E$mH%Qr8Bsw at iqdzNi|KAks_SZp73t1e
zDm?ko?_)qzzfp=gEB|Ta%W7AbsAZVUWZ?b&*bJC&RBO>)(=n5P=Umz;&+%L49qvy7
zqkca68;Ag2z?#5ewQCvAc;5&g>p6z*H=zi=zRg;WoMPl<!N at Np^2Dnj$(eoN&KNV$
zqFva6kTg**<2X8k2e><iY5J*a^hxFjw5l^5EeW2u_Nt?1zJd`+ml+VbeUuSu*!VMj
zBelvKK&?$wa5G at r5A)Qs*E)#Xg|^i$f$U at jY$O&0Z_z)2rZ^7!e0r&xoUux8z5wSJ
zIpA3>PpcoCa0}CWlI9dypB_z2__ah(S~-`l$82Y3Vs-^?6F7mv0Huz5U-`T_$OI=1
z(glfCTY~n&Hb`0Mo2XOLE~+JWUU+b988lT~czqr<Zno24St`~%+vCU`gD6Kngb_wE
zw|={-z5$TYCQze!kL_`{j`!<g4xs?<GlTvnkSN^+qs3_Fd?8?B2gD_~gP#YZ!wHbe
z at 2fN2(w<&gIceUt))FWmze=Zl<wDYGP#T7osNKg+0vZH at ge|D`^G1_O_w}q*v${`_
zvuxv|B(;<~O#u>o at oQ_VW2n`hYaknv`rL=Xdxz+QxOX63caBlJ@#|5I=YX0XwPggw
z!}EdBgv06MnmOBaCiwz<Q%gN%<iBtm(4_6=1s8Z(tbzx7e5;K1F#p?QC51~jeUOZ^
z7*f2`los^Az8zuS;!K~&JaOQNlX*cUf5QU42MVfI>tp at MnFuj4>h%P1Uptr4fBHew
zpMM$ijuCyA;S(IlneJAi#0yP{(B~5Djb*Bht9OSH?a{F5kC$$X6YXy1q%VQzqT}4(
z1bIl4b3#{)xH#C%@qg>yK_Fd%n(BbIA7zze0QQ*L-J7QU_!PR>-iqMBSkL6t-Dyz#
zcH<<wTUtW~2?~JrC(f2PcIiU~SN=*nNf^JjnA#;7l3xz=rK2NnU&IJLy?RDC;zRD}
zTf>~IOOU~dVEwEhSRi24IvTCseG)1hqJnbECow05vfJsty^99z9%CCKlT2_^QW>3F
z0vuoq0|$aF@^ZaF4s6hDcPwp3H%jqdDr3U!R0?S%?YpU92Cx_QQfxnzTg}M#|BwDI
zzHSn24HEB3{mZYa{ZA~rwIFUyfrctN8W13LuO`Ifc5%gXz}LovRKC_KxA_b_pj5Rl
zdvI!iA(r5!P^Q`;QrmG#NLk?VE?&g1UKY(<6r_-)>bxwgFuWv5S=tV?b#7bgr)(#D
z2q5>X47Fo1_XEV^kO}Y^P}H*t-m}<|J{4DQ9uJqsgt#|d`dwMgDO>&O9IBhzg$u$j
zlEIX!^Pj7V2T^+n_gUuzLyQwsU=Xb at Nw0+2Z+%NnJ&~_+$ixiJicdrwcm%Onv%Vwj
zi9j&m=0_ at 3#0Z>8Y*b1zM5M at UOjx9j^LhI}VP=y<V+=1F$t##`=tC{M8_|XjJjb{m
zQmtwGc7>C3;qrtO at PEgAYf#oyiUTBdn#+y+CXxaIilE9fT|{;N!)t_w0l}8FyG9X^
zc6J1Ik>RVhgoA1l^1<)mC^<{w|LLLR&jI8LTWN#h$XH!GrA6CQZ2T^Y4VyU%Q6{=j
zjx9#*UMkcu{wdvk;0j;!z(bCii~-Z<$oKAlh`FfVk2u!Y0UT=wVt&NkW?%c^+svr{
zn{=Be*k?6HgOJ2;$QxEhFi=g_m7NHsCf*aZ1;wCOvbsbD9PaOMxMQFQ4$i}E%vBy<
z&JNJbVv3Zj;o at Fz$PAr+t(F9H(_qD+^3U2S(0{XPj2>D{xG#1BERlS4hZNz&B>eTw
zeMlwrW>wUS4qUYp4lw2GG?*?hKpU;2Uffs?s1-7X41*TJ>>79X?5B%PkLU{E`;o^x
zO%Y+JNwgn$&L at h0Oef~ZMF3`sBt=;kfwG>9G5&%2*fv+RPx07)Z<Tpv*zI$?b}q`k
zW02v*g_j>_paFwa)?DAuu>3zCN*UFZ0FmY|q3HonlcVSbGt9m%FV at fRU`RR;=VXpY
z?#`z7{~?r89L>@Mu>5#pt6VFtNk<gnNyI$Xpxg|%8e0OS?n2!>m<a1%2{OVkrzx6a
z4kTSNmw8bHQRzf6E0rbuOFfTEMH!d;cUPnFSo#Za{pgr(#f9}n+w~3GEy0F6UbWKs
z<G9Tslt)-qZ2Syqi&Ww+Y~Q at d8e40Uz&mCLtyEs`4%TBlYYGL<vCbaF3;x}E4L#Zd
z!9exm!LNS)aj);oe)KbFnJWtVFwwgQ8Q=VSR!`3{T0cFG_;=APG95Pw at _b-(;y#<{
z=kf&iP(JDiCMUJj`sjGhz|lc|D{6q`)VvKi)c{b*UDGJ9TZyQ65?8#atWj~?V<h8x
zUng)cTUz#m)RS{#5v4;P8?Yw~oCp>`QcI&VnjF&ZLFYg(w<13x6p90}eUaQT3%5+k
z0DsxS6>b}UraPDEapw+=gPBS%<q?v9eIdmq`$?BsVvY5Vkq)Y;p8y*8#TTSpdFg<K
zEfcBCspcSaj7M1?Cl1)rT!Vs at s`;*zPpz9}+fo=lE$-_X$_R@{$;XbLu^C?hxR-#%
zTo$H=6499<WVt_1@~MPZ|9;3L(QS1LO^w-u`S-1OE~29o_kzVq#XUQqbT!u=8x!bf
zrml9T3w4n!5e1?mDMgy1`P7DRqfrYe)_eNtf1ql`ppgs^xy3cbnL-i3ik(jyWI at -U
zW$&y%nj>&Z=PNKnhNPBO4e6`I=J`((v~XaoHx`23H}NCUz2X~0uLnQ-&2L&PCAsYe
z1VZbQDryq94M)tzr5N$Hao&ZotGZv*k-!Z8YRgaQwx51tW^(VFKdE<m$azf|Kk!}T
zfp~{AO)d&sbtFZvH&(>W2P?g5kAk=hQ;3(wL0ckIiq;t?x`!2(Sn1k8tzk|rAhPh3
zjIxf~=rx??=z(@JetUlq;G(^9k8g)H7a(!?2=D~G#JB+oXD$%LMrEq0*EPP{$uAgE
zG*^Lfs5LT-c@;(Vm^Df%O-p?@X}L@|Jk3(Js{Ex^=6gh2H63wMr;B)A`N4k_Wq&J4
zbE}!=pdnQ+3Esl6xmGJ<{BKAHp>Y0X>rAv1o+I{(a3w3`w`a+Iq7W>8VhN6q!EAY9
z(?OK@$Y#wzU4;=V`bV~ES`;k7tba~xjIMqWchVL82up;jEj{yxFYPC)0OR%-oY+YZ
zKzg34i*7)QJWu6EJq1L9T{As;`k~Rz`73v(?{c764tJNOSVv-dyI{ib at V}2ddU2RI
zR+1_=mNr==;13JVh^U1c=$G4{GwV9?-5308*6&q+ at r>p6_V;lNE4H=?i at 7TWvVGNx
zL{TG{S7dOflOlE)eFj665FZe4cZ+`-NWltO(0E&D?71NTjjwIgmL4AKHu3AI<W0%k
zP)MtHYy{ir6 at S^x(bXUf{qo&twYc&zzr|Sa$ru53eo>JqzhcPZ at NkzVdp1{i8RC-a
zp|X1}-P<3FQsN<=r4%H0!$s45&7nVS_c*i>G1@|1840m>Qiy^MVE6|6gFIJNW)iCN
z>(OQ9k7-r}AHM(GpY1B&-V0P##Y<r*nl at c>7E*=$LkjEAT*TbS%qCeyQz%tNIKLrN
z<@7cY2=3w`D9@=)4(E}l$(M$5qP4mKC_|ar?NoPFHStErZYwkgb-7GQ#b19)aRwOv
z?g;Ywz2g-#uE?H3YMmBYXOJ%;)0>FhB#vb3|4@{bHLIXCZ6B>8K6qb2EceJg#T40&
zG?-X~ppF>di}-s&mZvuPb{6pE25M at bffD!Y7BX>vNWFxPxR6uh)R8IWq(bhMW}K<n
z(|8cgy)=Sq3K1jPlm~Tb+j9o-4UZ>^n{Jc4$aZR1^Lv{2IL9U at S1I;=X)?cAoVC;B
znv8%-QVcELhok0fQNG)zYOyQ|RL^Q|sg=j%TgNlp4qw at b0b_p>^cObFtmnVP<p;%n
zoJ$-Fr+my~V+E}!?!K8K*!5(Ox)-{!@@RM3#Rwh20!Px|v1?vu_(EnRQd%Dg+ZJ@@
zJiJ5Z)*)5`#nAG at S5N}OWQ1^U7;_5#+<U?l2FI9Z^U`L{n00LB|21e-haBISXHM9H
z^p?cl6sjGRGnEm%Qiu@!J&GE20qLer(rH)NtYPHAUS)?%#mrLO?@oy`Ar8~Cg;=d4
ztro84yOmrk)5?8;TfleB%|>F-^!dDr&?~Wf=EySNDC)!g)F~y#6+!T7Y#3%Kz;wq)
zE_ at sA5BXm|(?K at ZpmECafiOlRQf-DULsrL;y5_8v at 89J*wW+*kPKl}X{yRdfWXdxX
z1d^_z_S}*A3t#TZcl~`3q{>er=n<s$Sc^v;sSGJ)Xh~6vyO4iH!I5-gsh&P%0oBdk
zPsb~BgxqD2Z0P6ogI~9gG(?A;a-RsbD($9<Ps7@<7kKdvPa^t3sp!{Im-YH(uGc}>
zz;cZ9-2~wl167mJ4Du(?ie+E?-ydWTs>HIl<-l+Ce1HT)sA&SKVx5(Y?yM9ZKhR0-
z1*8x6D3uJ)Xc+}U%Hjun$Yl4OMW-Rm<2}{pI0fq|im6U!2#TyV2QpfJQVxdEk+DkL
z<=(YKGl1tcpPnUZmReI at igCJ+UzL3os#rt~nvGue+!QARzrzTHx$B`BKqO>TK#e0M
z5QLE1Sgx;>=j!Lo{Aa{r`T}$F?t8ZkpUSCU3uv|DQx2UYFhi3T9UQ^Ap%SB~k^n13
zcwTtHobxIYRZM1-X`bXLBZiy6&Yg8t at +<+zturfnNp(jsQctgF5CB(A=h=`<5*=M)
z(Q}b4a@}2O3u<XbjT_&t<3DUUD6a<slvRnvi(O;;1~zIxYG#?iZrj8|v~@rwYk#Q<
zw*n(bn?*4-3qDxD1BK;%$PE4mBmWoX3K^ucwSLYfx#Y<TYK$4IYg6z at yU#kSN20k%
zD)AXK9x25Et}(tN5w>H7is)62>%%HS1BU2X*{&ET925w_&al at -BE#}9v4Ey%5THwa
zgHt&Eq8e(33a%~?va**m^~6_wx&e3C0GFP(?w~f at Gg*2|*8tHGBhn_DN^Dz`&cRo;
zxe>F6v(Uf-ikdEfQIjvSs*&;h0=FCOHuL<n6J_V6NGxQ4?=tr7KRHSfilKWi#E{-4
ziu<vm_crT{P8e4I at 4-2UDNYzUzqyLNu-ssI)#yIQ3m<t>U-{Ejo+6+^q7N-NATrU?
z-4=!SaxfGwmJCS%op_B%e09nSV~c5O(dqSrYzt%Q<VPLIYA(2Z-kFke>sl<11U8Yb
zb?bwBrIHpBEwHJs78sYh#5#s}1MdxhSh4#&lt%l|%(r8mb-4-&)mLm?a8CMQr==Xx
zR6}6jJ9~#<0A8mU2bYIA57#dHc>c{eCh8$Ja>r{hC3}}y!*y8ZPhaUMEE}LP))0W3
z8%%1Xmg$D02nVQY6s5hmiofsXH1|FTq*9E*xEmO at 9Nod<gT9WWPHOa=c5H1eo{k(K
zeZ=LN81?h62}DcDllv&*pS;_dRylrx3$x?HIv91{_DiJz0k2}VV(Z(Oh0NLUnx0$X
z%>Zl~FrK?K+R*)vR!e>yCe}lUcj3}e?1s+_5L^M0BpTar;V6SP<vv;4*ez~(vC(Im
zx3Ziw{h&D{3gokP7ylM^o2IxIgNAGOH+P_S$2wlGk3MEvb$f#>Xp9eq-QT(vJ=M#C
zvAZz7LTVhNKPC+j*odZ~N;o6&AmQZ~XL`ut#Q&;yKMoZXFHa{CiFJ6h_~nW6CcwGf
z(#2)9-amQ2_<So?Z?OR*N<X4fI}l6!88RcWFt7}`6UP<qcs+di;$x}>XIRMof40km
zVc)UiN(0jow)t at hf!-H_7B=<>J?=OV`dnDw$lr<D&qeoX+g1b|(7!+^rbnf48Y`O~
zh;h^zeX0 at ZEPF4xXc0XODL-%RrGWy?C5-yq1bZyEuV<OZ(>jKIWykH}OX+}G<TI#N
z0(*x6!Zq&yaQVq0>(;sE$wamrRPMGJguP!l0`$)iu{UOu4$jy$t+nb7=UKvpq0-Lk
zp4!f(1s<I!*{s^uKSnv%W*hg+{%#Di!9tK*kROnpHvr#mI!9(MbK{uxf%e!iH&Z$Y
zcI5G^e&7;Zx5hbh at xY!{cXz|mH_-f!{^MZAWqfkyU#D<WkbFLCez4KESr0~KJ{CN(
zpUR(g1&CW%m)r6_%pXX)oc=QkJH|1r=$&QbS5l`0-OfM!;pJty{621>5MC$+S!DBU
z`Kmf#C!-s{+0UFWh9))rC$^))xSQO5C6Hb7K<C>0+tn*euQooX1QpylULSPgzC04h
zdU;>d??ht+vwKX&0)Vrunof+TsE-=Tmgrb|Y$I&ve3A6P!?Vq9b6A0`v@;x(!c^2b
zp)qj^LsHw#K)cRhjqfBw+dC9$rbQx^>U($(tn9>2X4u;MfazGFK+k3QPMfdb6f at AQ
zT!4~MS%n73X)uM~91AA5;&K+P1PjC&QfBCB#>XJNCdew8>7F9Tdw*{A9{tDOz1N6n
zbkWTyN*V$ds@=aupt0W!GIg8ywhp)OTQ%k*02`AoTH`c~@*5^hz_>iRU`nZB)rR43
z5E at C^k=5fnDLjM%O^%S1B~7v)^ww;TI_&FdnVZn|&WbvpaH4KooH3`0IecKd9(OVF
z0*)t^%l<Xb2~Ds-y3UCB33T`YUi1B-Q=unW%&TsJR;p3#B*+J?`=x8>#LwDt*$bDI
zDkg2m!hej+jhc>=GwfCr(T^i8KkS<)SlTAz320_59H_r=R)$%Z0pB3XJCQI%(Q;eY
zbQN2?x3ptQtNnmOVhkJyXrjyrT5Iv_HsWmabY;K-u;`)ve(*1QRPEep+E<I9ApZ(>
zv5Tf0<Mk23!$g_ps7^X5#8C^?WG6sC=%s*%%8F8PVVj>_<WMkW{c>zN*uUSFVI3zY
zj8#7FfU7N(2d?s#XYXH_Cfz^O-D4!~#)LXe(^`<aB_ox(Z%MXht-}#_nmJM>n>8To
z-(JES2R`|&$iHI<rB&FJ!|<#_+nS$DZlvSbu|i)5Mzz3-U0&74{H=n({-+0rG%6bW
z6*lY!rtF;IKlqw17rz_R*HYwPKc7zgc&ASxOD>6tDN4sJ0fX}FWD%vL$1=BFO`Zq;
za^8$Wma7}QizQe!TXzkLTyUxM-FjFQ at dj(6<-9Fw>xQrcF<|b3IWH#${66-VQtMv6
zt}4~>WQRE}knyag{p-N3q+6bXpJ+ig*(ptWBKt^Le#S0g13F|r%SMj97{cAD>Z9`D
zfAs50N*4(Yz^p7B>JifJ%-x#Fvtfyab}t4M2(>{{smA>aD%hwc+lCQZpig!CfRAnx
zYdjH3qHq$QzYu=)oW>QB!1eSizb`w}w4mQM at pelRb)`S&b7aFhs%hfSX=WxUv_Ocp
zyT2_JW_2_A)5L$@6B(a&R`JSD*JJ#zyFg%n#OB-v+KvqP?aceL9E9kM+jMr66>K5_
zHmFjt;Z~&Qf|7NN>2Wx{#DVv81FSJ0b+k-v#v$Cv+rI%NR=z|;8yE@)E`oTD!W&-y
zXbMEcIV;ptj(s!Bm=`WPE&F}u9&F`<L1J53e?xB!_U$qw^^4`-y%nSz!8kpqqhu~I
zS3+ca)-}K5=LZ&C(Q}og;Iyf})f)~Ym2kkd=e|HgO&j`x2Q(J$pwc>RgI?kq+ve2w
z->jrmHs`&*uS5IWM4_XmHOMs7(1yYOBcN)Yhr&#gv4G{WcR at -wEg{gxokQ7jGqkXS
z9idDy0w2LE%Cmhckb)Op=z at fy0@PY|Sim2q$t;+U!U`}PoXiu_dgUdaiO*j2wC0sM
zq8l$q5)@QR$1aQPuF@}6!OPnhrT~1ZR*3VlJgwqcidE6hO6PkE{!~l>;9pvO3;r-1
z8tujYWU_<xzeV9z at D(XVieQ{8t}w`9cp9iuFol?5;8x;l!>W1(c%P=E?6sY(jHqzb
z%qc^wWvu3e2l>vjY3#+KZ$YC(wBDfwXY#S}mrnmKSOg?k|D^<>z%iqtQE=06u}DkW
zcFvx<p!5t-RSCA+NG4*&=b+2#Q19a${EGN%jFVQIkS4}@0>KK8c{k`pAqS%m5v8Aq
zFCtJT<ZS@}bwx#^dTmEH at aAOQ%PYbQePu8eP)-nj*W~4Z{o-J@{oG?mQ at w3%qEMV4
zpwRE>p|0V?aMT<OR7`Ev(>HPL=xgNtbH*UjGih4)hgZ&7OD-&&MFwQAnzwQN0ZL=N
zPu~LOBv)6ijaVU`9r>~uCpN0GGyhI6gdFR!5QP{!kW~AjrU~0;+xSeWO!pg^{PU!1
z)-f~2r1AP>LErbut_;gZZh at fV56raWn;@&n&miY2Ioeeg)jPjE42EqG40&DUsZW{m
zGT<Li@}5wz+7ElT0L<B}rtE;0h`a=u8h&>)X4cVrq62y`zBrC#?Qw`A$X^Qh{2I*r
z1{5IK4AEDjNkvz<Rh240 at 5?)NMz4I*SA$1axpuHA<M!lL)!FaJvQ5WN`pMOs5{zp!
z5B9F0BmT~QB+JuJ4*gspIujp*OJyb91AXK_yU)G_)==z#-hob)Y}|#lRR7CFw3*O;
z$Ik6~MEeML!8RiAV!C&hkUHA8a=_&|gQ-JJSd*tR9qMTAFfn%UI<<>-FacdY9iSy{
z7QJ0=?>PiSdNGprBmP5a7g at yYt^A=@Wn%-H*pk{C^scB4t|pP^#%p5*V;)(4SmW!<
zY=I$tCcqS at 4J;_1<Tnd|j at +9kK7DUmx4CQf+GDg{P$GWlfxl^Jo;L&mRK6?}%Ixhn
z)urfPxN|fOmE{d?XWE)g9PEkZ9bPcJ%b*hx?7YsPdQ+V+J7-A1|BQtFT^~uBQ$SS@
ziMbvb8{HdY9g~gRXKUaJ>v(8V0<O6fO9MHFe(c5CLCPhtyFFfRG|4@>ytx<UQ2^NK
zGDGq#-NeXuN?O)e<<HIMo$i#JkDUCh_FL{Wk&*?C3f?k%Xyf`_ at Iwk+P+$ZZJ;_A&
z-O%B{f)FY-9%QNBA08xLYSv2bxD+*F7?3306zpH&{E!)PpepJ|iE)^a>;vxxl9d(|
z0e%e$lzwftrQwHT at VCBc@IRh+EPF>r*ZJ>OOH`Sa1(O%}*1h3UL>wQN7ip+1w6eaM
z_j0ztn>#BfvFyR6Hj2cV<=3vz$oZg*ZAR(Ag6vCN26L4LDu#Zm7@#Zl;FpANBXwx8
z7hIX!vL at 2yVA!g-=Por0J+f9VMjpvuxO at m77R~*epHaW7va)q$6Ba#;bbZVMDEsB$
zDbxDB>BJVdWY;jDfq+oo=HceW^d9<<!3}8Ls_LAu`PkOX`Gpt69%?njPs at 4m<xr($
z8~6BRFNkt>WyJSTlXY{cB@<4KgamN{wJf<p;BqBnlpHEjVR_eU&2W$-3jKL27C=Zq
zYKTxhXrjs34X=Y1uALWxKmCd|>E+d`$HjE^P}(rv5rm8FnYz0Pdjl_hM2&}Cxgy-^
zgkt15pU22Pw-SeJ2g|j(x+urpKn at lIkM|XvZ5 at N(9rOy_o_ggwSj)4#o~x5<dZSda
zG<SA<E;m=`I6f#D%B}Od71Dw2d at Lk>rD=4B?tOuyUss^yGMDjN0(^x&hhW$S2wW0>
z(8NGlx<l)%J-Mwf8CF&2=!*yLS)6$ZZ_5~()bM?(jA9tc2W%@rz at B;>q71&}C6WD3
zSzz6=uTe$pCmZ(@&b|suFRfX_HWT|UUAt5(h;FP$6Z*qg3W?rX@~i3-A2!PFIV5WS
z3>USl(8P5z0aCI#_};z-=zr~qS?`!S8aJe-cI8GuhL^IYpDoFHKQ-k+SYM1MC`9XO
ze()Fh*cbG$@W?aHFd89r0MiG;z8@&kpw$WCZ6qFZEU<Ww$7pVM;3Dl^Xjwu*I8=kh
z_4Cfp4SgVL8gc|il)>W<h#Fi=GH{9&dl%m^EB)w3JyK<MiUs+_w2(n$*)c9AVZ$Hy
z4IqqLAJ-Vo$P^K2(c;oVX2qplMKD#HgsP`fJYz^fS1P%cp!`O;sF%s)Pku*RMIoHf
zEN>R-jt|`;S$Ms}*(r|vS~R-0c{*YkUK3_loxdEs!H_$?|0u`o?tc>*fCunAPxeqR
zxC9qWvL;TdB!b8rs_U~k$?9aMUrdE%Xnmk&Lj8%u=G#4;U)l)`9xN`WC&t~xmPANi
znP at inO9Eh@aa0iYHDkFEads;%F#K>=0%q9MGh?`NUj*W at GXsvb1GFw5yWj#}?2v0O
zP^HzQuK(@~Lt(@G$O<mz7}p!S!<r>2(n4x*h3wt9KuBp9i>fjHJweA^7pXd(&wpJG
zPm<jNlmmHr8nf*8HEEJ&0}q`*sXZJcM(5a~9rgj;@5Ui$%|2YkwEn=j<JSv3ks}wf
zNejxoU|Zi6bK~`7+R|=G^}@ZX+vEE3*e-FA&z*Ubeipt~(;zsB%G=2q2?J&UP+a!|
zloFHpR at 32Zj*-S8`(pGfgkWfBdyt}t at D0JMZV`>KQ*b<m+;k!I$y2Px3;{jMYxouI
zbJ(T=eDSXr-%7QM-aOt72sf_`ZtWqGIiZPsVGC-d2>gy!NQoJ|H^dxD at iR|?oT>^K
zl>Kalda*A4EtBqQ)$+G7RTU=BOOnO4VKHZCdW1N at 1yGy9r(h?Y8Wsm2;JX-Ir6+X`
z5UV1F;-cV7g9sAGM37nrmR*Hxp_yOp_gG4vbPt$<(Zu%rln+>ty3T|WZff_^L+;BT
ze!|%j11E{vU?bGqU1rMM>7)*{*}v!6a-T*rTKJnI34-b#z<+%6sMIM4)w^H}Xv5D{
zR+2rOf`@$VZ>QUicF}9o9K%Ev=hP#{gxqb~_?TykiSO6((8LCqEC$>4gA0%3Q4wJC
zfw*H>AD#5Nq<OW)2=b(d;d~a`m*LGKzIH}y?=689i!tGah}Kt==4Www4bLM8^&VYY
z8 at b)DVMAe0))*Yu#H<L?aeW{7rwWl?k^f?+h#mH1m{&tpew|R*VJF=EF*Mw$I8g4P
zq(KdacbeE~o)O+jBD0PHl)YU(%qtX*RE at tT)qP#)f at -q-zb^N%72dXHw5cAR#)05C
zbdlvQ>#-GV0G&_!!*{POZ|e&JFUH7+5NHDbPS(n0k_Xy+w=0=su(J9m#2Rdg%)k-S
z;u5-Qq8Kjm&W9_k5+vbx%k7;X0e>?hr|_jHn<-%5UkesrND|Rj>5}h%jqa6JY=;bR
z2`z>+>XXn!@|e$hNY(-0&BeW&S+T3P{>+gma at tLlu^`qE!f#I>EGbRYw&_H*$#9`$
zZq39#;@;dIaV<a*r*#6H!V7-B2{zK}pH`xr>pIgAYb{C9O1CiIXgRdqN$liXeVh8e
zMvI|d*(MDKeq`|Eu!yfEh7RJCLI<kcS1zx+^hzU11tAO-g|6SiQKPH9IjLdWG*^zz
zPPg)H56=s}+3>;*6p;mAGRA_QBzmH0d52G*p|6d2Xm61Ol6uWNe;`w{cA78bzy&}S
zYzLi#JQmXvk0&VL6oGHV*-KbNvi`021du1C%SY-6b5^d#P8;alzz%%n<7CKLWHAJI
zwffj6+NS1V4K5RjM_UxU{>dJLySAm8&&+{Q(2p|wEV)0+H~ZLWNDa8|B;MM~bOb8R
zmXMoQZ5w<?wimI?!(J6k4Zx#9<-H%a(&MBQ?ypn-^f(erS7Cco&CY82oTu^skLo|A
zJCZ2eOnL7~GML(>KFSNhj#uZfQzXa#J}9S@{g%?UfA$NscYzUVdwlj;hjEn)a|F1L
z{X2Z##zrl`naP)@`rIbK*QVC^@{9m8$?}B&DmLWz(q at BZTXrfy!HX!Rdn&V8JAtk+
z$kO|}{Hlc3T3taN*B^^n{afYk`dIxL{S|Mhi1u?q-9J*5!mE?B>>C1&G#}~1N7rfF
z%IwNe7N%N9FyLly_hYweft?1IN at QdqX#N+Col4E^(@Ul_=q;~JL6GFB=Rr%>U!Ut}
zzo?V3{q#$OeHH;OlTomreU!afCCr3@^eOrw6ra~SB=TD6S1Xtx3e4X2zZa_xgE2sK
z#2UD_ouU}lPB+T#ME~mmW@|u>I9fk^=!GLYt-~lmU}G at y;f?fgD{$RZqV5~Eaxuhl
zOc+0xNGHOik}${OftQm)`ffBM&u~z`zpwo};wQsgg_0#*XSQ2p)8>+wAQj$^uGsDy
z-QH at lgr&K-Fn2Nk=|iO&0-GzHG%0a#W-!J*Rqj6pbj-0mIx>U}^8zph<7?OBduVb#
z7%1Eq6n=rjO>-&^8 at 55c&cOlTnq8Lg)80EEv at h{7OLP*&UE6dJ=O$ORQ(>j2T7)+p
zmg5V at A-NEDh-vhg<8MKjYkGiFE82m?@=E0~Fh2<22i-~L+8h^xOrp2U{{Gs<y-c#0
z)`z!K<nyJe2aB()Gxe!ePQJbF+iV%8<5=q0h%ersYWAfYV&<8?T^GyP-8a~73d%c5
zMhRw^cZ1{@hR?9^u*DwdCsG;8i`VD2u2;NQx{u<C!4L4W?2oU{n)vP(PUu02m=~w4
z2M0)vnClrO?8zw&nj}H61$4JDa3;w at tg<fGdAWNFn_YlV1RWl|ts|<LMg+8BgTrKn
zXj()nwZ$GNR0VyWAv~t+k%@5^Co=QemB1o<&ibKJ74S)3b)GOKJ01*MkaxK(*wTI{
zgiAlGn2eX-_ at omh&j&{(mPpjBvQ1!O*}QPu;2$w`@w6|7s0DSfi`@#9d8Nx1;i7c-
zib?-1KNi!G*n(ti>ZCG~5!WjpLse4b*C|ViM>Pmzg1dC{?91fuYu5RcwdeO+AP8Bl
z at 0h*j|GhGazzMm;`dIRv>Ajx)Fz2de62Zk>5L`{%NP^`Lhnpqr;5|Fm%qKNw>mW>O
z_Aev+q{1jn(Ya&or+U-rdl$*eCt8c86;9U6#qz*@F-~ig9y0%U#pCCrQ=4lJ<uSA}
z<qQj;DvX{XSd{vO802EoVSFz>e={N1p^FFX4DLgDdzj`RMlDF}DDTx2PS?1MAwB`d
z38afru<jkLZ-P>2a32l|a;TY&vI0oyy2yF4sn30&#NYd8epe0?c_ibvzKQvV=J%_=
zKd7!=S{3sOx4zATxIAgqtb=`3Or(!jFS4f+`&9dEYtjWX(5m`tx?uxaE-B~m^5B)|
zc2iV7f<Sr9SarSLirW@(N~1RsFQvN)C4uOSb(;{kS)?VoKhf4^<$a9_3>4dT0PHHe
z7zS!s#wzT;2k`b3#D5l?zFWiMW?RZ4mevIBdIPMK%|F5Ns00FOv9xQNJfPipQSkvk
z(yv(Tkk+E_M3*j?Vn#qQ^r6NetZyAty#{yHG_iX&)+EJny7)uHt!{WYyqQ|0!$7X$
zpUco_w;55a7fDvx|B~2z11$z1P+VHF6Bl%<X6MUZil6Sj4qlRpN=!TW3o1E#8GT+H
z$bJo_!oTMi`h<9`VF(Fzxku9f*2A?Q1=eJ1+9?+djv4ZNvT3_MWFR%x%z=!Pb*{&9
z at dx0*(bS;+ov)MYM?4bq*|rvtAUsKTycJUy`-5UgL~F^z*6s)#1}EAh&1GG_9eM8+
z>S=6UZ|J=4+if{;z&@`TK4!i&>1<miv6+9JS4H8~mb0gtCR6fpDRRq!@@7SHtSg$5
zyXDE!Shs6bnXe`#qL&HR at b#1AdH+eCm01A1<WAmt1X6qZc^sdI+?1rl(xVmJ4oM5;
z%2%Lq%l+C@`&B8|4GOgCO~J=+#v>m38e2SHAEu~dboldb9GPn<Kzg)JUK)CSX{a1<
zgS?$IuyIoJ0}^OBz&tMq`C%0p9A?gYOupAFI2*y+^ehjm01JNtiFGzKMa1^kLmSEy
z=)R)41X^r=_Wu88AJha#4LAPbM0B$<3B#o~a0l4jAz?_Kh`O50X7tQ;;|-&1{T**3
zIQd2g;c9g4WI8eDn$)#(nTs_;^Ej>7*00Gxp8xDlKKx}iQ0lG=h5iS%bH`!&cE?2z
z0G54$NgW(#DD|pFtk_dEuOX0OZ?Rn-`=BxFs6gRm at w=6ZtcsUR!jZxSZ9L})W=lZ1
zOnaM#(f0EPyb;f<O;N%{j`+9i2p$28x^U4t4WQl<;!GP$hnie-53z>q!c+KGN{4|C
z8dX(VB~Xkx&Ock3XDwN{JrPNZXc>lJoN{X+ni|-s-#8OC1<x(f19`%+_Tp|lZ6aw!
z7T=s!j${ySzd4`dB)zs at z!KlAF35S6jzD*^8JnJ3n3V+iN{cskmvZtp!mmHk?ZYIb
zSyFR<G at HbFq0Dk;&i5KL9*e6l*;1d|5b=e%TZB<9CB(!@IgUiivivA=k7JXc7pP;}
zjBylTn?g1Yo5<1Cnu{RnF_ng$1pag!IiC-%Zdwq~vePStZ<rZ-Xind=8|x!u2rk4T
zTcF1Z<4QL-3*&3TuukC-BbU()JuT*1&T0Q<q}^!8HZo(Wu95$fvFe?sTNLID<jtZv
zN2!~h8BqALO|Ff|%rP+(9~YP5JS|0wZYI3+hFP2QqsEIb^7M&djp2ey6-ctkq{mIA
zxHG&_Hd(VhC-nt`Ivjt8jIL4qLXo~gXud7SUO*-R6$-9&I!{xF)8kVREVBUa35Pj(
zGKNIBRvi+rgLV+XK#bds#_rGQ93shuNb5w=Rd5t2Y0DW<!^tyhWB{}r`*jXQXH>Uh
zmQ_MSNeoh&0?U_B_K%QfLk>kQF5EDyb=29vKs~__ywS?;DctiG)VNJ%fpddQTwuFH
zpKlbPcX3~UIF&$KsO1)I#@jK%N_P;KTK@=1<in+|j-7))k-hXiiX%^F(MR$Gwiw5-
z_8*mNJoaxM)Tf9Il?tyXn!Az{s`uB?-0g2;{!)xlm!fOBQK1a6!6mPb`oj!JtB2Kd
z%Y|&mjz=S#QJ+cGIQih)AhrdE;Gy#`fn6nb0tbF at 6c!P)t-<_hG-DOMTZ^TB>sc`o
zmBhC9E>3!K2<)jb%v&i{di)!XS7{@zhoaApcNv^T;DLMe;irSyHkbNeG~3HsEtYAC
zHJc$n4JjNt-9ABJZj(<;?fuIO-3^RxJ|z%rmIUma9}`GmclCJkFvZtTCB#Rxz1i9o
zncnqkgvQQKgoz5IFJ!aI*)n)Bt@)(l$s)ZFo~6;JL&rQw8Z!(f8H;j$gLqNjIF~V|
z<`A!DckYlEl4nYfu2AKBtBZjDAxmmj!O6P}EtU<`)x_e=cU+z&vMx(SDgfV4_M1(D
z4W()YOpwQ9`&;F0O-JL%xOg|#gh8LlRPd=}=1t4k;eFJGjplws#1r at 7&R44^M>Y9!
zyKYvIe<y$50(QPG{0NN_Y at Ui4<U8HQ=pL7qGsfoAL#qe4vLI4$po$HAAZE3OgB;k_
zCmO1NuO)-T!IslmF)`_v=Cpxv=5z7Ov0J5Tqv`pV^Lgx%@oR{u?BM7B@*1qA*C1Xn
zycMmV+|Rv)O~;n{NrTp4$?#&!anm5tChCWv4Qz7^5 at Ejj>IND+d=K2aV{ro#)ynH=
zLkQQA2iIoKKq^>V0QEG7mKcRkTZ_ps$0TlQWUqNEl&R7~+o}IVU&a`wE$$hRA6x<!
zCaeou=riUwOhIBkQXy$b1pB9|C;i at vw$c at MkK)L119SJaUGohf+6(Ib(O)QE&8jS2
zWd!9+v_ies;P<A8R`k1mJ6&f-3obk_fXj`Wgz}EVv0xQLr4 at yCD>rQ8M^RtCkARlh
zP7BB*-AVbJ{?B><PtLk3Lrt1u!%e&i?m!3I(bjYGOO~)+hW>l%0fpF;A;W&cSCfG2
zf#tkV;%wcF*Mz)%bVs&8FN?9|8c%di1u+p at FvhKa@J@=19&d+ at K0;MEQcZWztpJcp
z{q>APO%|}X+{B`f4fF|1GF5hRyJckJzM`QL+cl6irs;<4SD*PWrRRf5SElX+a56O&
z|Kdv~#HAYo{3(P9f8__uq at P4LrP+4mqD2iu)MDYqS)YSqyWWICtM`Z?*Pi^Z33{&$
zYs=E+7SH5;2iV*(UQ*jTx9G_RT-s}i+BzInylG>L#j+wdxUkA&HQm6)nQxOu3>6@~
z)@EXDX&3CuuWUo9=Rk)trhIP$FbzE_<;WzDc$<dbwvQ5iQDOS{5mm_R&L`F at W(@5-
zJ5&3SN>Lee&(^GH&;_dFPmfs9JY$5+q#`bu;}Xz}snK$LV%S(bmR`?*9*p5|g8?Yc
zMEFd*L6_w?dax7zrdORIOr|Mx0fA=V$6bVdZh6h9YoJ{0HUmhm5n1&$uW+XTYz=AM
z9-kt*ev-#ho>t%%#vYaIFs}Ru4jcDX{iZ*;6{LdM!>CYFn2w!oThHUru7^qzbS=`X
zG=7ML^bHrQyHBChU358g?un>5_N_A~!<S2kJLJW3e0BdJSCn90snmTMyGBrKj%WTK
zYPN3-uv<bm;@O1*F!@%2wAdW!A)Ap?`0QNIK1M0lG8(N;mQ$^sy*l^1k+jg48O!|}
z%9^uQ+{}wt!zkl@$PZVj#of(gK<l(}a)a>|j!ErI3Y|Y}J`XjouiS#(&@NZOlafiK
z{L~BB5_ArXqhWV5yAiz*S8u80O@>s at lRuNp%uCC{8}1=L{A-r1ZPU7LAz$XeU7xsN
z0>gET1-8)(<?L}B5p5{ad+ehR#t~mr$o&1I?dDjFtoIaExx|&}N;3xK3`w+q-CF*#
zTwadSTHlhZ1*B!3PFm+2Pankp9B;sVmaP$h>`U|%kqFWv at nDV~N3tFcE*B)91D+x&
zgoTZC1Y<E)mPokTLhv+SG8_H%Y5x;Jx+?o2|6E+3!e|h>KcW``GXBRy#4Q at dP+{95
z6Rg;|G;4$vH at 99PnvJYz-_xUpNr|?<O<YN`>>dm~_Lh6=({{F?fMJ;S^`*EZqK9jy
z7J(>VyCSE<tBS)nq(x0<@?7*2^qGncv~8PgtL?w^NnOu?PkcGm37qtPddc+Rf^-U$
zGdzTN359+R-5_66#eS;3Ne`_hDrpDDY=Wt}uCaN|4%c|Lh0ws&)ak#s&cO8-dwn83
znLLv?z~$#8VR91{9S8;<ksj?McZLu;OoFDU-I8qdx8xf8n=>x}F`o7%nDO1al>$nm
z3tb#V&o0uq4IG1doF^)L2 at LnkC6`@WPOT at O2n}8pXh{E5GfxApvszD3s*c!d<SALA
z3w`A$8b#-1YK+wWjM%lOd}NeJbR0ctXs4B at f`IfAFHxupBklh6lw{B06|gdOGqtS~
zg)&%%C32jlApxQXhXj-$ue;|1OcJQc<HYV1Bp5{f^cQD+L!JTLu at Ktl%zWN4su4Kn
zo=(2_eED|F%Ev;09w^?e&>_?{zq38nce!(^0S#wG6z=-ny*}cwRd<mX0z8!}*^udZ
zQGlj)c%8Y*3MLyCtbm4~4&4<3a<UIxTL={G9y`q1H`lE!@N*8&9F;Bl^7f%t4WJt?
z((nY~f%cPqR;nh>2jy~+L$H3?bcjH*@Koj|+8^H_?KoOv0R={_12(;ZfAd^=zD?78
zHJ8m;qUk_&G{rT_T{?JP7FpZT!TI`o-v=67cIzmI7Z_lC$T-#~LrF$0LY1!Mk?(^s
zs2!y>B6=sUyi3VpC!;P4ner1iPWgnxrbZ4Z&d?I!698Z##^>7STaya_(S3|0R&Lt*
zk@}SGV6`n~_%wo5;|fL(FYq^3F);sEkuRf(CDrGpD<}DxOfD`-7c#mI`ivnR!i54#
z;ui9}5h86wpsC}@Vf1k|IYycOB2B!`uBF5ow>t1M6JBddd#4xMXB@%7zXK|bfo?a%
zwVyN!f4vL^$7C%UIa`$vAcERWZ4iUu(hg*@EO%GG(6sD3-_DW8L9d>hLF67N5Pj8f
z!kteyK;0 at hzf54&N7ymFkZ?c_40fFAkY%||2ir?-O9xMxTWVR47Pz`ReOiKOphx3G
zY^z*hbRP&yud=~Je0OyPc7do at +<TISRuLtibBl8*>CtZ#v|KJQ!g9$xljv{a9eeAl
zRvT_naiVD at 4dp?+z;-il5grT7N;H)-zcN|q5mC(0LV$fpIvR2Jc`VJFNi)<MxJ_1c
z{G0YDD86$z3_{!Ci)0$*^d>tk21av_M%c62U64A>KehGT06l);!exl8EV$h`!lUN_
zC;_)OZGFU}7Fc*1vJ3pxc{gnd3VVC?VmNB6bC5TVB!GjkcMLRV`fI4kHR^S3k3TOQ
zCO_(|@G_$G*-bjZOl?5T>Z0qedyfezK%!BifR^yZV7s{-9AqG!`OGo)N0$@qb{2B8
zk^26D-~EY1J7IoEI_FQDgagZBKWG$*G&`D5^!0RE0Kx*eq)uckf(>huG}o3hU`hrO
z_CKzc2vKCPXY~DFdliPU;bf^dXdT6-Kb0pTxBP<KhIgD8<L{Mn1Qg6DiWf{OGx_6B
zlv~l2n9#Pyvt~v at 54kXBHX#O`R0Yc9C{_^~bOj=LwqPpkz1OvYr{@r>gCxSx+UuuH
zsK3%lv!ZNJBp!HBijdAMBN9uOrWyYvBQZwCI#kCk&nwumJ72-(5zZCY;~+Bzluq{A
zgEtuV;Qlf%jk_t5g$MBFCuMDNv_nwwS^Qj)pu3|*S*V|QYZiG}9y+0j5@?K-4C8-x
z3s`{qyp*3Bh<TB4a<V<1rHMk+Ph8Gp-AMB&{!ntlp&GRRx=gDaAnd+epnThJr%oRS
z=r=8ZfdvzyClJY%j$yeL>uEblYa*&M&xF?NRsy-GVAj4u(;-*<_%qiTOc#r*R(uaq
z&L?azu61N>oGFB(oE4d><<L#e1Xk(LZ8rtkC%!%QqE&}60-rOQwYSCjV<f}8iPV54
z3)Q4`iMNiUTrOKnr+PSFVQ;>dgFzZ4Fsv^rN4t=wF%hKN%b#Mip|c-<`M1ve(L15O
znh9Y+U^mFH8p@(ZWCH*R<jjY#^c0V+)mOp-<XFNwAjxnno!?o?x-f-M at H$rK_s6E5
zptpfrrX>oqLAGY!h at B%#oPLd=BD4M8D at gumYekFqN^Lq?069R$zX9cgvhdtJsC4pX
zqle(SKF0zH;YWS%KZ+e)cy!s#P~{6_s}c~GszrKq7UK3E>mD&XWy(-bdGuTkxT|KO
zl(XL01OqW6uA05zSrf20>}yP?3Dn^LL{UP2x&gWcQ at MhR3^hu!Mog6#Z96l}*}%U7
zsj+mWKIJ`-Uu{=51nr7(R^vz0HyWP20^q#535hAUUlpfj;*r^^(#4c;^^o_8rK#on
zu*^7pYg9)qy}7Z2w-vASak8P<6S1z`GuA4l+5LdEP0vDGEqUMVSIAq-4coenQ=WeF
zgl5>*e`augHb at 8rn9uEfS<1`2?oLLYXfVL%McpZzx(CReOGuA06L{CgoW|voII#1j
zjASxTW3=;fzDvm#8F<H6H{HUHgaTSVgUd)_HZKmpIHQF0<$>Uk=8LAm#~kia6wZb@
zVRKk`5dGt=aqy~ai4ofANddlAJ=lK8p+`s>o-I$_11No*V!)vduqSmI79o8cKuMZc
z@^kxvC%m9%!!)M4qOyf63sIS{xP}FWa<um#8EF99FT_vX;s5MS)m-^sWoz#8a6IsK
zeoVlS5j9!Xq8q`T`0Sv=rp9-3!aVC_scbd at mdHXWeYPe<jb!wgcN|@XxMDX>*W04+
z_4PX2(k-(ruPS$xHMnZDO65Nr`fq9Hc;|}&PK5l;s6iyOM<$UW$CQg^iBWt<_cBBE
zU+$(PmpB^QWwyY?Ep{4ny21zJmzxlSp<-ekM=sB~UE=DCOu8JEi*n|Xa(Czx@!fq=
z9H8buY|1e|$#~#BTC at dH@e)5GzoO5yvqL%0Hf$h~>AwgvV`IK^?lyLAIfR6V*EO|{
zI+1qSb8|$aFnAF|jn`zm9H>EYbo&9lu;|PkO(Oq;+fkdAotXq~$t^QJ58jCY(^j!X
z7rR8ZNYy2H(vNZL$mN#)q}ftyDl{saJGW at Zij14G_ek9wm>e#!-K->y!lgqvXc}92
zICRX<z0qv(TYML%XH!12YW^YXKfRc$XdY}f@!Bj9>yPS;5{b};?U5|w)<NeXwg(A-
zzj8Acb8^*K58;z6Kq?2d?)f|{tkC|(5#aSqq#wZTFDfUH>7$QkGdzG{41nON`kMt+
ztO>CJv&%6+Tpecc(72*A;_jV1bgX;sz7xKV+#~H~GxmiXvA;3h0}BqOt4fmDv}1ZW
zr|`b1m{h8TukV=hikbXs*qbj;IrhrUIlIZFWxAz3|BnOV+;$QoTp>P2!r^UQEZ5bH
z%^s}z^WK5=<RX#mZM;2W$*=|wHv|kG(v(kW<$<?AO-C?kpex5hiB|6E*dKZT8%4mp
z**L_RNc3y=$t?He*VG)h$diX7D+CgP)f!Fi9e-tISeT)@x1`Y66Ra{i`O!S9l28U+
zjov5`yE>)@YX6SN0BK?@dYgaT$0GY%(LFyp>(!ReD3!y)*#jB!jQxdIdn+K=te!TA
z^nP?%w4m|z-WNj~eo$#P+05qEvC}!e9|B8KW72y^0{T`Cglfqc&0ci at 0pJdtIZFM1
zMa9;Q*dl1CwaRLB{&DI8<O>WTqx0Ap3A=ww(Vq0=7mFcB4v~JnIjk!U*BYc*WO{@@
zCiOf##LVIeQW1vVFVI==Ue;No>%d`V^E^eX(TDM`1&4J|*R+<YT)aGX0hp>R88u+n
z%MZn|noY3^sjBG6ok_kog5dC;Y`Vx^jW(2G07$zcY+L?ZVFwgt(hX}t;a*+F@&y`;
zXcc=q8R`vLSDLZ<$TlGW$&ntUfW$$9!pf3Xe3e4qVSY{*8pIsuf6Zl9?yWCp*18bS
z+w=etSXFI+u;$9i at c*N|2sQt}(a_5ozQeRdMOUV9W~p9v)KU+1EhSgwJ@;H-%)Ol(
zQDsIBc{B4)6}f0Rpi`jg_*w?fW4b$Ays7in_INT^468E|)73|*Ph<h}%WGEr5xZBG
z4pU}r)UOYpfRo7=lq)NMDLPNuPPW%t6MW;DP({4QzsTx#kp49l=1tSljYgA?5{;BA
z(#ehK2Wh{TN~D_N<78z5O#LufanqlQQc_wC_c at T<2MiQ^z(L4(r;)c_*-upQ>xz+d
zL_r|DF at u`&>rDwRs$G1CEyjkd<|$DVj at Jd4)FeY;u<8TSgBRX~`(r5ZxfG?~mOM4?
z;c6`vtcTxmj(}7vtoLxb2}t&bAO&1M2H%+#Cg9CB27_zG2Wzh9fyhqr#SDJ|%A5Cu
zk+cihFH=wjE+RjQ1L(9jNhEmom3<;bcg|)383m#Fm1vJE;AFifT_bQkv*M&p?$T%z
z1{{$|72zjnpYT*QkW{$)%_6t-#|+ffqs at hyvk)~)gRsI}j*;V1d(?HaaFMLQ+2|s4
z>O{Ln%sElC0;e3VDI at -wBU=YM0^!x{b9^T&43UqH9VZljK0F0X-zNqB+%E1aeLH&I
z{AmnU+h&18LtowNx53VGbK2cCegS3}!17)v!&dH#&KXcnvbpjN5vnrjS828336Q)g
zU1K&chD$`*9POQ8(7xRJ&q(-7d^_v;OC0!-TWj8U3 at N1STMP#yZ<{4RxJMV?AmcVb
z<<$u5t4eFzx03SD%A)_bL4l^P4ZC*9YU&eYnFN(I;0X6KP`1$&Srgr<g7INR_A37X
z4Gz at _(ffO at NM`p=R3%VXD$=2!>YQc<Ov5%9Rowo~XU^)UCdHRzduh6$CjqbmlW?{-
zf6kXD$^Y-4yL!py<IJ-c*@@s;8vc^mg at BCpj$m-X@|+wmb=s9Sm9<DOs$=iKR;Dnb
za+b>j&{m)Q^+R|C8GkN?0aFr?%{?G)GY0o(>-FEA!29hNmzA`<3Z>Lkr$5G#{Jqp+
z`Iww(c(BteQ<kCgse@=QZ<_9E*FMk=F|rjy>r!!=C&}j9XbL46@?k5J3i=@EzfG4O
zG#G}vTZ=D+?z=S=i-58x3#Y4WvaD(rc+ucDkMq`%kmuWyno}GyCg)$7yH&}sL`ZP~
z_&E%0rkK%z(-hde{jN1;?7tU5&}}mYGNPsibD{5(3^!U?`P^9Vo)!G-gy>Eb{zKvY
z#H=`^^8<_mM>$NC!kleO>^TXGdbpg>W5vhJHrz0uZBgD|lWZ5-+&OSD$7+i$-{UD$
zEq9z~C$4JRATc+WaLZ2-1N`=P%~|Ohm1L78otDC9V{eRlQ(IY`=Bc$j<hIx0-1Vi4
zI5a(EZnBrO*3-tVhSN1-WNjQY+o#l|O3T>dKwjI+{lLNuiG_#*18T|~6g;4QI~DBD
zeZ<_<!f6F2;P0>kb at 162@2Tde at a*+dW=0o7nL4B~_*e)UNH^~1i)=qDchVyx$cfJ(
z?2jS8`!eA9G(V>xkxNUw$t at z-cUim6ox(Q19&1W~?htEXjji-lV#;Y0stX9XP{i|Z
zy(o2~@COsJYZcUg3*CvuV|{ErYkGqx>gw3_=mB|cbW3D081-U$Bns{wZl~PFCfk<#
z{y%_kS;~{?A58raD<(~waZA6qAf at 48YORGR0&VDlh5zzTq4lR}vK*Bggf=cBv0Iu<
zB#Zm9uGXTjib<rh#z<#Rc$Zl0rY)_Nip5;3Yq9bpBuezA>ZTpWYQSyYw4h+0>q{!#
z<Re}wbkllY6I<H~Rts|9XZt^LHh1meCSocjHGLn_!1rr4d1s23k!4BD?0n3bBBb&U
zP}o4~%uz>pLvI^plJ at O>{mnD^8%-)G4_HAOAY7pd#wT5<&Na6$UnM0Xi4p)*7dt+}
z$YG(I+5NNTSKTk9>)Ki7L8>z at h)3e3^C-)6LC*$cUZfV77Fu|!K?v|6yHAbPTa^ag
z-aI6k+rKEM&9*2S3R-3yp(Q0GtcRnggRIy_e at R?jS4NbO-9AYX31khkjH*2Ul4?Ps
z=74=6O1D)LdfJaBQ;y3~O&g>{Cf at CX>F4Ih9=5911&?MNzPWp at J=QKaT`)Z_QgM>N
zx->d<<eLFa8QXxq%bHXlS(?ynI8zj92VY>Wkuw+Ru^O#?d8c+KLA9VqshK2zpDmLL
zGG(mC*5teXc<92>D%A6BM>Zma*H-RVX7e<(LPC_vPRm9gc4I7mC2(l^Q$@a$k4Xc4
zy+S5_e7iT+s4nC0F8rsGT-jN~d0)&~0&=- at dBniqW^`luFO$`lX?g+jHj!>nXw>-d
z+D$x9DwNxSSkH?=DDKi2tWdHp<pWBgx$eqle_VNOAopXPvR2YWY4D(u%R&2HJOzNc
zm>@y}W)n}=r|(xA7{D%mbOZ!V5t5`s1{1nOA$i9mV$BM(s9FSNPpJcYh_hG`hY5mS
z0<9pIR^K4fz_hS1g2#@eutUR<+RFzH2QqbgTiq<Ii@@7>;9>LL$t*J*?ohDoX_$)F
zB->&Dc&lx-%82Ej*cDj$<^!=Y`{Bs(x8IC(6+|=6>}#{pXe@=-s>fGb2?Gwgfzk$F
zCe$QgXx~i~u|LdbJE<9TD_>EbtPOTpDmn*y=L_Q3G4nlcRAFDIJt1o=+Sx$CchKvL
z=gBf~imLWc9_bOH`b5xFmKhfsRv$EQGVyCoL(k at 0O*L=wVZGx#QLds4cUy<(<dpsi
zg-i}cYT3rKwW0fTIGz&c1ymN(FKg8bn;byXv)+ZA8du_75+0vQe&jn3gr-~k{hLat
zDz3M|2t%ufoc8;sqGJ4OGs!T#3p83<1zZ%@o*G|yWfNYte`l065Hjww`Qbde1EEPB
z1Qi*vn?{OQoCdNgK$VI=b)T*MNa!ju==#w$`UH<H56kRi9aWtfmHxeA1kK%**}l80
zlm$)kN18i>kY?nUVkaRiu_97e%j-61<YzZ47>BP;e<6c};rbX46T2+YQY!kw&n)f1
zsBm|9uMK*~4(vljM&&y5e%ie$fSBUTGuqEhT2SnZZ8H{x)D6&yGNma?<-WzZLy at 9)
zX-0q!u)-rbP>6gMBdxK6((ilYs8XL#JjH+_=wd2un<JoSlGCTF{(Cup at IaWWfEio)
zsn3R=z0xqgKo?nC46lSO4_FrR6u-j4&!3UP>Qb0&yzVZ(6bTo1wP2>)FzWpHps-%{
z%xc_NQrTRp9#`oSxXFp+Y5pEpG?OwSa5hpD+a&5*?h*)9G5{SWU7ludb+#=k22ztN
z>WV|n#v<r*U{UGh=jiFjx-`?`RV1Fd_OncLfkp&qPj6JKyxtmvry>7rYiAVoph4I9
zkz<}E(vDXyBLn&7#4micgh at rgqw^sN^O5_dW*lz227-TL<`vObCqzsV at kRDaPqrHf
z2BQXurhw{?+Xzt!PmgR`D)!CS7(CdZhL)nEZ}=mm-{6USc5PY(%TBhTSdg;`uV?+*
z-4iZk{~j34AF>&5wsJjCv-v##u0az%HU<HFh`s#duZX;&%QT!J#VMC(D}^-L?ixeB
zDa6V}*tf$Xw!K^R75l==#{3;OJz8uk;YJr at lCQR3!(X;JS42T?P+A(`nqt|MZm-mU
z#9<Cyw%KT=Q^EFPd>}T$;kpxbyPV#*goE!^9c8t?X`$BFr&j>RtN}k3NT^Gw*n{5N
zm2dCtI&FP{3W}@Os{2MdKLmO)Tlc!gzzrzb!FjB&F%`El0`;p9L}q--cmo2(sN1^@
z$gX<iwX3Q=27I}lY(=qynM2gB;ba4<Ph{Vi3_#-Yvh`;CzShI8jk at u+h9rFq#A>V%
za3<aOl&2~3W7yi#m4lp!92bN04H@!@VCo$U!9~$JBm3+saU{SHmprI`lFK1yn$|+6
zzP`^s at oF~KJWjR$gvLxm$}RW#kvt)K^TMn$LewB0Q#Rc2Sgn%JD_NDTb&SZ<+FOay
zcYLlu`Sewb#?o4v71s%moT=ScC_uX)z5xp0)MRis{^xoaEi`AI3JX!B;tk(K{CXd5
z9sBPKe`P)NJU$xc`Se*0*}hJ_>1x-l>nXR3x|^2 at sByiKQbREzXULl8$|W2m<PP_o
zIsRCF++t)degT$EQq+G7a?R}qM(SXkXrK&zz=Q>B_XWqzef$uOgnm)@{}P5|x;8Dj
zRFjsODow1yFz}n8b|D6Dn{H%<J){VYv1?Y4!}*UGfwEh$<MS=?*Xbn!v845KvfAd2
z+N-vS_R6mt>A<cZG|n)qB8-wcP1=fM;xk6!A_sJG6f=t#i6`p7l*xySc97ljHox0v
z^5V~u9T2l+x)q#qUtjCI?nb}D#3nXgWgv8IH1%g3W>MUj at lL|f=kx%Ha=^N>HRT*^
zur5KI({ZGC9TtZ?zLRqTz_&{_SVY?KM(VUWsmsKTt4s}<qwt=(;H52`^U%#>>Bik*
zdf&T%n0DoH^XpmyR&m8Fx{*c1dmGJ|oIzyF>7-g4 at 6i<60%`fFI*v!}LYX4LL*z&+
z_ at hqVkaR?D<VeHA{ji23s|R=Hkd|~J?sS^*08$@kl;P7NbthBuULrpDN=TLu5Z`=n
zPqUBmF8hJV-2hK5f`h`E;Yn21XI;haYYf88+Qs`LtN}>blGGy;oG%e}a)aQU7h2RX
z9>wFyTwsQRD~mlNMBHDmqT0IaCAesjfJ9^7s?p6<(gPP{n#postjQk{hhS#xn51<Q
z at o=*p;ps9{>UY at zQcBCIOk@Q1SPX*h#X;rO$<+t#fb%<}f)B68H#=T;x9`98k~|e!
zgnX`Q-nGaXIHM9$bVD1IZ^J$mh~C>4Oa__Ot}^onO6M_K_YlO(#3NH=A_V>AVZ|E(
zuC>Apv>>Mh at I-KTZq#X!Y68aAziBLL!a4WJfPo~<jRc{ST0j_595Jb!KmGDx9jF&k
z==4nu>Oadt7skw2%QcJ+YQH=Mv8uiV)=LCaHAOX+DYL-c2fQdeui at yDo(p8nAsV;V
zXcl1NC2-QLWt+vv$6DD|4x7dWAu8J4lO}ER`zV-4hu`Cj{i7mfQcwoHiq~Df96r?B
zCt&vXi%4Urk*SnXPrgxptoo6{6|BjkRB>+cR%}J<A<b!kkQRUeDT`ksMCpTy(2$BF
zbiNlL_(|yh@~rjydr3NxEWmQFh*OWY?pALBFYH06-19$NM!{-O55l%BP?+{G7Fy4M
zy>Hhk``JD>F3$N>f|<P!B49gp;zdV;RD_4iW+Tc2u%S1MSP!mc5(@?B7YXbs=z1m@
z>Oh2iE5iYk8GJwuN%L2BF`7Z1BdlnPdMU(5#>bJD at WKc2H8j#M at k9)%i at D)r%!D}S
z`o+_vPGAhLr(z)Xm;B&DY%Fg8mC~}l?+;|_&-Wl3iM_Bz9MupNkWKi#)Cl#7b=eb8
zy)`5!>--*A==9*ezk)lYV at 1%ryZ(S%4YB~lf5hY=FIol>2`C(nq~f}S;NjwG4jfb@
zzQKZ<E`CSK_T*CAfagap?M`64%`(N4SN2%hE|N&!e%o({iU|n=Q(mz?CR()BjhwRp
zet)#`pH`PFjIzZ$9696I5Tqcy9lN|B__0G2Jp4=OlE0)|skUydq+4lP&2o$j3Ha$>
z8c|jdT}cCg(`k9({Dg0MIYu8~j?xuoUQx_v<(D8}C%s7Dqw}pQYCy_xL=VW%%r{#_
z#6ER5$n8az#^Dcn8r$odu(CsoX?ELb-%IZcez at 0T`-tRgC0*5?(MDyQ_P$xSfK604
z+HVf;h)~JBL+KwyABb2QkCvE)^wiXU)4|<J+F at Wcs_@k>nKHqO85x(XSavZGiQN;C
zwQ}~wfI1)cxzL2v#q*wsy!KE$C2&YyZ<2U=uSjmi@#9hCp4GnY7uzmx0VpcsB@=In
zKJnFpB0808wBnfyO)`b-<Y_r(7GlCXBxTB57j$5g>0z;m(MP=<z5ouw3gmXk*$(Ei
z#Qc|?@=S^XV9}U6v?y~TSIph>V&rHzTtgC at 78iHjnun(T2S|7J1mG0iuPJWvGWY>t
zNp;`?%dKnl!^VBXlav5?W5Dp~#~%Jy`5$+75dmY|1<8`t_Ys$0i@?i?m>r`g*Q_*g
zeWb<wqRWX at yv`3Fp5sBgB`F>)Cf$sk(j#vTf1OZz1{10w at Y%Hk-Pt8U&Ga&|v;oKp
zS)J!n`#tO@;=-|l_l`- at Qr~at2&r0o-+IhQu#)~Qvz<zGQ~4kNosmp1V+*Q{-;cI<
zl|whhEf02+xyrTNzn0LfAeS)h@|u_PYswU)LqP4<{mB~GIXdaGpoQW5fufF1rCERV
zN~s9-9LU*>SO~T2z3N`AdFdO)(67mg6>h)@5p)|VvOUG5#AS={dTx*V$8^~mB(?!P
z+ezw;LtkHt^UTLCeYlnYGFBb_C!p+nX(Hz&ZJGkO(nQX-=cuoXGQ0auM9sYq<)CtM
z)4`zBfK}b2fsTUe)n8 at xJxJzn21)XeBob6~D|4=2Wp}i^n~L)VVfv8$qU!q~<fE at 6
z+-B(79MdEyRo&00<x`9;TW3mscI}o|SK28KYExl;ELDyrm(Yq`s+m1apB*^nJ2cXL
zs69TV^fnbW1Y+(CF=c3yB<ZZUV=oEUGi*XF at xmG@S7M&}OI)n%D4rPHMnlD3FyfcN
z4QQP5;P|or7 at y~auN!?Sfo?_Nukb*MqQzV>1V}c+^+UG&#8&hxRdP4b;bXJ)*W%oP
zazf#*x}-XXVg$FNDV2XvLBf)bxP(9=v2c#p6R at Y0D624hN@Of|@PpZp<sAeTcB^79
zx09 at QBfNizUXj<XFpIH^jnk|`WC^0W at l7IGJYW8SsvG-db;#!J{RdHz_|(^nV_>Z^
zuZd=*CWBZn&OVLTq6STV%mU51L^_I*oP*AX0R$L7qc+*{OZq6lynjldkQWstdDJSa
zri|Eq`bg0Xzt at 5t4&-?S^0y9g%+%C3f;i^<(qc&7Sj^8jcFwcBUJZVwXQO?p>Ue5f
zT;$ic8Ozm-Gq9ThDtwnftue3rBdkJ>dMxhYxaCPPb^UYagf$T(xY{B5%&te|!eN?*
zian=><&6oK8qDuj8>jIR*XvVOMyW=6LL)$LV at H|-3(!o{2)02#Ao29K8&lMNW>^2(
zRIUh^@}FU?G(ofxUNcX%YjyD7b{~9tjz_gY2}d`fLFZBO7*;~tanr2H>5LusixN->
zp?~GEl;R=E;4i6)DB-fGXH#a*Yj{hn*7)e at meUHprTlv?YrfP!Vpg;lbFrPw`=#?(
z at gGd>oEy24Ky58Y$?On7N=oZ)6RK`dOy4qst{ov>ZJ!Ztorz^#*gi9ySIK`R-}<-f
z%tP+oH_l?Q6UW{)eGXQ at ncSzc(Dj+<XU*xf)qSrl#P?U%)BKMg#@Lg7F+*$<U%of}
z8e1OcyEQ}Xd5B-=)dAmYl2Wz!)a?g%*=$~f*<blR|11xdPgo=4)<7v_*|<_)^3LI=
z$K|B;g0{!7 at f`}UnwmNeN!a+*XPB71)lpPsvi}PP+i;Qk0=A%~^8+2gu|tIg`A{5#
zlfQ)*`*3##;;?pp+#U<96`OvteElZv%-xupr30<aNs^rFlJ1+5ykBANkce0Jpuf?m
z(9%6dX!nB^oj^jw#~2k%4Tn#iRdk^3I*kZ^Y$^JuOnX3_#-C`({Q`hMg~K#YUbcXT
z662%KS>aBrIBV^0REJM1|0})z?%haM%xDqyGc;g>YDTZRd^_#rG4v$-Z}D(5>sfet
z8njha=9?x~JXjA->!3UI?!D@$L`$OQsw{d;ufw>bLgq?AZyb5b#p8g_#d7scUL3fw
zQD)H*=tPE<yJL0!bua5AbU at HC+A&F<j68c7n>$f#!F-Ii)pE0_%p@<Y-{Du<)mKpf
z$H26iHt;nhiJba8`H$`)?9n}<P(ArVlc$isLPes<Gar3L&sMvuy)p#k8tl*iB%Sw2
z3}$LAopN_U2J2+dP`9(N6n0&b!fjpM4*<GqC0fB$q}jb?ri{xho0yJTxlE9n0?yrF
zdOQ;9iJg;-3vwIAsu>N&54_~?eylc(x0`k{p2R9_RaZ4<<KIV_>E+|GBHFB3^#%pm
z+-{50cZ;LWoVg7wUX->Q*zZr~!hIk|br)V-*m=qptOTjyqpbmFz+eDS_vB=DaE#bk
zXm&BY8L-d9dx at p8z(&6v=54QHSaX-L;pV=Shmi%iZ`|qaq;2TkeEKyb#K2T0!sMC-
zoaENEp!^^7mcVQRd|#6=NTn~@h=V`Gb8H6MpUG2Jy#bRji&6~Bj(@QU^hVd01cj1)
z#(^DE79xchrsne;Q0zr)bw!Bbu_%!QB0VeZVCtBo2;{Km7FFGfk7l`Fl1&1PwDc14
zW8C!`zx&MySltl6Qc-~s=+ba#UWOXD3LyD*!v<?ZY3gpQmlG9n5M_q&Onr1e(!Dfc
zeAg|X?@jGG)QcndbzOj7(pT}AR+lV8p_O)j4_GQ(=!Yhu_cq4FmgFkiQ=82a;0RfT
z!%j`USveL+eDhSuNG71DQfp8T3G15%`0D+wY!ah^(u40bohE>aQ=PjI;*v^idW-sx
zAa3A&v)Y#iuy4J(C&gxwsQOZdWX=Y9_QR2;ooEzmdf%tQO#O7%5N at UdU`-Zxv3bP6
z!AVQKxvr~^9@@=j1#fImi`480%y{U at kXu6mAl~JIU*v_la9qmMoSR4Ci0B7=3I<W5
zbCx$+%&9ps1 at X!A7&(B98>b-Nh~BxMlpmt;d%9pG>utKI*NFsSzOPw(>8 at n4zE)Mp
za8*1*um9fhF4(EEkZmg0l#X$4Dk7TrUKa+}D?&k<T|F&k?ADY+k#*|C6<kN&L9pHb
zavh9d;>hW01XZ}Ft1|o4mSaK7mJDKz)ZgmLD7rM3xCp$(a_3=3Kivpe0rV^mymFug
zCxAp)(#*+$gr9^k@|m+Nd41aJ2|(3``sDuFCs8{)gfmO-o%oI-h#dooJdUzw{;Whg
z<3RF56bmwQi=W@~Zo(k&fWwBl?WXU-DIbA at z`jYu#B4+}+~o}EJ;|?2cbbqbqe!Fn
zd=L`2nb)GD9nk_s(x6NaliS{At;;u2Pr>u~f10b}g}4#=JVp5)Nnrv6x(JKFObD3f
zG<3m}WZIrJ^&xp~KuVWS1j4N&S%nX;E;P5$s8w?ZFZ;Ryl at tjJ8sTu>onAdqxS=Zn
z+F%`BN!T1?NFi1`c<dTPu5T7(9T2nyPAu at XwXV=ImaLjq%S)m~acjiu5&hnOHq-`x
zg>p<u@@;Xa4Of<Ii-nj)Z%kU at f&$!dFwXWbGwAz*P_%#dscC?XSP8M{5$C(J7oT`E
zpWHCE%`uf#%J$QpxJ$RMnG{cUL;GzTlm}k3l%#Wy6L%0u<RtI=Id`}cfx0`!i3-Hm
zv;K8^=4jI2CUrBwf~tm{4Vn-WeGwnElE?y{(gq%q->;I8jbz_s(q&sqEk%pv>?>#%
zh4isM;H#8d&_Ab5IHC9x-hbKjPss|Lb-Vfe!>nAuHfeMF4wQD>>r^EzE?Aw%Ad at nx
z`3|zDl~9#NQ1DTBArPyV)i2yH0&?_bHHdLRNaccviASVWxLHt#)a#W0e|EbW>HJC>
z;EUgdEB~9Q)JU2fyn<`~7+5GZ|L5H%FK{fxQDjSn)j;8vyc_m?amL-hbKgAo;FV?>
z`5yeHA_+lC9$7SILPgZwEU=8PF9}+39vtl!%R3naK|hz|#v4V;@@y$@H*@Yxd><uc
zNSbl#kAvWSW=yM at 1)w^ayPlB$FDj{E$+W$gX*KwnqheVPR||mXZXp?xvN&Ms5+4Os
zG1U?;T;TLkMz3X at i#xIk6})X+n?kPHc#a?~+y9W1sXF at y@qkI|E at Zl^CAQ;NwP}`+
znsf|Fl2tP$K)x_NoV|!?r%+pi_jt{_@(QdtnFE-PR2e)~O}L}34(S3l;F6=DZfKAR
zBm at FQ!Tj33h!Ee&*a>_iUnhA at YIIJWH|0vI&SZV at OapDI+g1k>v+;}(IJ*gPWhK2?
zz0D-f!S^BKA(sMC&1 at V6HP{dq at j4$- at BglJK6_byT=dkNAHLRC;6veY{lm{KdhGFL
z0iRNAf_SAF7Fk5H{36torqi7?!<38_6#ei1Lzmre)PRRX^bF)nb}Btu0AarD at -uph
zMV27kbftvW)*;&|iaQ}_)Ra)vgN0T=f&?lshJXaC%v3nCF=zz>bT(w|bFz3Q;C}HN
zwC%7?;iP5$5xIjm)Bnuj0`(~sL^3?}9s4-QhEJk^Ia*uVz3EX2`})of05L7oZweT{
zQ7j@){-z#BGK(Z|2)pLdx`;_De?JN4^A_h!vo3y_h!o59K<H2zuRgJt7rzn}LM<Yf
z)BK{mXKWxKJB^|qYU<OcrsuN~0c6QwE}jib1C{5tGFZNElyN}WYKqsjLTKfq=Lg at D
zkRx~7WxUU<6RuW({1hDo{$XRpT|VOyhF`NFMymc#8t(xKTlax4_c1Y$tky2jMUa(k
zp|p+#n}NxC1*boa4 at c$+4$=;Q!7C6%*e5SD%t_Xd?16pZI7I>Ir^VzVFv2&DroqDg
zV#<}T2TO)Yh+t6?K?`rzot7L#IVO;_X!F~zIN)B`E7JQ%coi+h;OU$_WTr;K at +&@g
z$3&<4La-a3n5Fx`{}1P&NYQWO4wq#@H8*~f0@!egQ2CYzuT0{oyA~OsG)}V|F$}O=
z*SNiFtFW&2*gOgVS-bk+f2J`)WUjucG`?@g48ci}5o0K4s)}3S6nLL0vygi^m at BaJ
zA{(4ZC43bckK96Irz03kTK)mjOeg8$pww%fu*~|f5XfkR>kt;)@1^)4 at mO*+f<C!X
zO}3KUV3q8IQ#yJ2?z)14Oxp;Onvk<FD)S`Th&wq56i1YcL&@LhE`Vn&x{xF_62Vp5
z_e;u*ArqiY8Nl+Luqv4O41+YFQMM!M44r<yaDZj=K0)PuntX7zA2)3`9La|pg#N~5
zb0?}rW{-#JL)IU_nyAaVhD*bR;7_$t7GwkQZDnl+NVBKa?j116a~i82T3k!7D+f{_
z at i4YtU)YpZg&@O!O|!T<uyzWsjMZSrbSwefxs%}5`;m|}6&KiH_4WOrE9k<STcr&k
zR#a?9BfPY3xbF!a^18Mu9&lfWN1GM1-8YX$rtcj|LmEVuzVdfdGZLP=9-4GfJx{2i
zW=glBm5pPhNcuDpfoEf!OYSpt7t;S#`Dy!HF2VClAyyb%Vp<+M!TsBAk1K{HFN?kS
zE!TiM<2{IPf%2GGm9ye4H**<?mD$19-V#uApjCRAKZ3*&4~6kOPnWNvEKSB-hCc<F
zM4`bedp9Eh6V)}YBv<~*5!y%AEFMqjs*7&nh%v)Le*LWlTs>5Z#It)KHzB5|5FYOc
zh9S{3c7EvwXD0YNXyhsQ??{SeFGZQQ>Yc=EP}tktfQeEt6c4ER-3b(G=gKRtkuibP
z+&p6<EY&M9h=DIV{*1OxIien6sIc~+DzSt9X3r^glqso?@RFG8O+(HU1v!R9X0yyE
zhz53Kz`<ro1{(WgsFS;{F2|{}9rk%H7!d82Qcjr5A|a$82yG0$_K2D5DQ|_J=n2 at 5
z4ABjiSKNA<oZw+OuggESy2WA&Jl--U3!hAwh}r)(e%;3JG1U4Kel<7c)+i%7#YOKO
z6&ln4qj4bM>BU-NDe!~`=^-BhBr^=%uX;(gJ$$AxUevYPZ3i-A8(BvI2SKG?>Js$u
z8l6ECniFk_X(Yn^>kP&>o&c`{EEaW8l=5+Cq-lB==`ZG%wB^@z)LN(zmuKOA9NXA<
z9ML;^=)fNJ#~x?oQt-xLbvquRLABvc*OVEH6f at 5DHEqKt;<Xmj#}wSO3^8FsU3BgS
z_V+7Gqo$}f)LA}akHqH>d at an}=S>hnRwa!Q2VhQL;%O<dhakHE5(jqrL7Lm$Btr6B
zJpuZ{hX^#u)h9zv)m0AwsQl5h(Dh`IH9rH;c&VS(o!D2F$>~$Kx_4G8X&@F_O-BVL
zsR1jg;?m6Q$ZV$u=`l%Rr4hw%U5Z`7NKeiP2FWheBjQey*t!hm86LhVX)X$Jj at R);
zl+ZSrHf%f?e`QmsnaFn5(@dqmuusQ5ZE-5f-rLE_%aQ=ABba5`6De)6Ux>a{iKw|J
zon+xKMc+W;nu at g00P!(yRT#t2$INfD;e4D at grTBqp?Qtr at C*ZNZdX_!PwovLm$njt
zt!r<0zij$Mhl%yV3H`9}8_K~Qn61BY6lVQ at 3%_c#!v4}2MVt=#;<y??@fe){k>L^w
zMabsK9Y>$Ki?<+vs^is`Q at i`fNKRfwmNp5oj1VL4n&oV!q3ITC;~FQIgwayF^jsGP
z(}h>6*IU;Cr8R_I*LvxzZ6Y|=n!Ue09_4^b3VF##oZbdB&adH5aRE!~gyec7P27K@
zW3#!lO;!(~5v at 1-mvk5||AuNb#FgJ6+dxxX(zquKA8S&!A at P)5m;T31ZY!u?akR at F
zi^)2NMVZZ%kMm#T-?Aw>F=LfMAad|gizf(iO8a2xpUVK1x&Q>p+Gd>v#_PxjHPWMy
zqWFH>_lxVmru%Cgbl2#QQhajJ<NR?j?O4mNz=8fg4YiJslaQ^vQC2BrVh4o0LzWh}
zYnzHLPdhO`2^jxfPrws^jiepR0?%B+Fev<~C{JrkZ_28q<KjVILw%BrE{9Vn$`(n>
zUVc9)JgNHraNygf%yQ4pci69ic^UUi>A7CKUKNE|G-l<#At^f`is($AB{tOyPy(T<
z%jI)IxOoz7WDD7$9-9jRZbN<fhd<U9%{^-xk1&}Y(lsKZmTO-nhr^l5f(o}$^-u-;
z&54}Lzh^R0oJPtJV9td))ljslYkB}F!2wnmxevt6TeUvItgmmO_Ici(O%}>pC<o~z
zI}I<QJhE;7`a~5A1G-lP8(Z#DkE7yO*W8A}H<#|3`)1i<>9L6>tW~b*5tri?zyfGo
zjAz_6$`Jj2+?>hB<XFZUjthBaMS|TLvszhkJq6Ixec7S{@3uZ4Xn_Cd$1p=P?06G0
zP_%L at S?`Y%9+a17O(ZuHF0GL|wrz#T4Ct5?j<PmD8)ZdOpYDJ)MXk-n=iuVI5}HL>
ze1OiK`VpO(cLdh!(hK&Ltjn<7ZwW`YZHFpU1I)J)^7_M52i(|{?V^i9V0!?R0xWSl
zBK<RhR{P^zmCEkGk^Z;H at W-6Y*W%SJG+gzGUOi~Q^pl%o$D8QuXnbeppE)|=S@;@$
zT<Vz%6sc}G<JJe7Qy7ax7y7YZoq$wcAU-M+{l6lQ+wemO91ZJS7b2MA4Plf)ik=85
zm6(QhC?)@0Rg)2^%5ji86BC5aBfLyU#+FT3@*BEJ0hvjajNLjm^y!P#?dGoJ)9|jc
zYvVmFrM0k09nG6l!%mZgh22B`LgUtFe@%K|?4MzhBc=X+s|yZ%Cl?*|c@@lc^`*QH
zW5q8|Pn>Z>J2#RXP8IwE)Bva?!2;NT`q)!SYM>W9405jjPswAvv$UzY+>8E10z`dO
zu1@^M14SupoSKC5%}m(<0Go$lrAa-U$Lf5?$?Ra~;?2Qa=N}+`jjeQ_B?~skGg28?
zjch514YO^FBea7yg&5izv;FK6X<dMAK2qGQHF}OP1`CJ0+1tr#Kpjk>*)g-bzFYWd
zN(B;<X#DgikR>#g#E#f47TPp(N((#Q5;yz{?Zx0zIZ8zWcekHxFc5HUo?0E&F1(}z
z at g^Zn at r&2`Y?rz|^1<VrsAd3{!rWfwStQeDBQ)&0WxoGP6bj0?M}gEzp-UlG=i5m!
zD@|=80)zoHWXfG?#cGK$Afrj>MgZY@;*9wp4UEgeG8Sx$l!UGX#2$b}TK1rRzKjmH
zsF8{BY0!AUQxeL+8t`B25;;_24G%ZSS-K2Ub#r&%<kU><w3WF-uA`Ra32OpW+WWm+
z2Jv*7f+0xQA!7-c9i4Rbi}-Vi$a6U)#ERMVhECOW#o2=F7CF#Dv(+bfT1`1);j2N@
zn&~k5W8+R}V)y+i!ODIXBahj5(z70LH=av*vgzN^uR<tU<Mk*mc3(P1u0OT>*7!e|
z9&^aVo+z?ru26$2A@=C(j)G%(4W3r>gNnpnc at 8R;b+O2HN2^G|6&9wdq<5?`f>9ek
zU`tP2K at eX$d61KG7eTN|gaDI0Sac0hvh=Y^g|7@};i4AzGpo?ZLbe!9ZpX4wq63@@
zKFBrNt4V;2Uj)tgT{ZYqGO}ZEURNMP9zZl+v<?n_QGUxc^I^<`=$$hH>0xo>msH3T
zAlt9!+ftl{m_@@d=!rGP#8MHzzu*f>Xp#VgmKg8=0OQ1Hx4 at I}ZvBnIdb22Nnn=zv
zV)JePW<C1(?8*$`ExSVUn(7KT_GRo(g`^Q;Q at WGXKCPV}n+20z!VL9Ejd-?DseI~A
zl at KJ!2B^?G*?F9BPW3l|HLICJ(`r4vV(tzFg2#D<JDXYU$j29)Y)|lVTiEQ(CNXkQ
z3TiY_(|@(N`&1n)!;2ioXc?Dzjclu4bX}z<$>%cF?+fUcI12v-O_b@!+2>6eXM#Lq
zzQmjJ>YR^*#<mfTox-pb$>`tHGSV;Rooau-e<FRk0FC}G^OO)LQcfgz{av<@;0#ow
zk#$zVAVJC(uJd6K2_h at g!wg~hw_?0(PI)|VRR$Ami%~#YYOK_fongf3WJlw~AdhI!
zV#m{2^mW4UQ$MXr=D*{73WMiLE)6F{^#HZwtv?~>o*s#CKt`Pp>--SN<>|<o>+jPE
zDE_~m|9O~q at MvdN8(6H&O%ppUluN$&=tMY}7eIMV$u*RL58AHPC%^-Aj8MOA%!pE-
zD9C3^mvrH)+wJ)fm|`N%>4gwONW3HhIv8*B2!cU*q|1rkoG;|T|0WC$wMpWWv~ALB
znpgjYctUc5y8HfkuS=_YApC}%SmRcCx=`;ep^z)LJ?n2AwSE~c!rbfp at k_&6#Xh77
z-ksJABhI?%?Vn3!lBEoPx6q~e2)OVxx+wm)W_oMY-uTRi at V;Szj$y;mxA*hwy$`u+
zM_a5hzf;FneQ~S}Z~q4H`yn-Xzopv%)WUXN9chN}`7AY;J2WTE_YCM^tQr<HA3>`{
zdlYWi`tf#4#IhXwzc5{@mjU?L#e69V9&Hq#QueIr3yVWqhXv;0Uix}>n at JQO1&-K9
z>BkRDj_tDbcUQEp?1Tszg`fx38~!kO>b)eC_<P7niK<u&K#y8j0CTubM9H7 at +nr2%
z+ft$_{|k&s?W~o7n-+Y@?RVtMEQ6x4IF8T)MM|>^0FRPt#oWBSir)88-UK<>vZ8;8
z$MPj*_5!d^EZhp>m|nJO#L*xf)`KuR&#OO3^}DoI8n^i}5gW!PReLm7Icx+J<qAG(
z78~1m6-Lb4H_rlXw_ZRLmP+zK^Qo at O65J9^I<%3)qGijmCtqt^@2u`p&iv%dW*76w
zf+8dCkBBengP)xi+;c9fxAlw&KHgF^1Cs)~tL|kYzWE7QfUve`oZ=`efIKt0ZRPYy
zQ^5Id>cq5~s|QWtp!iIf&~fSDcUGbbxzLuG`G^}gU?ha1o6JFG88*mN83Xa^>LKRW
z`dZLAGDg9zW^QXj7i%|7<<Sm)svTI|_|(ke?P1*AhHM55n4MTCB=f1ucgXO#T?Zbg
zgp8 at 4KO-c~s82Up)P))4+8{N|oom_5PLpyAuFykb>OFLPZ<@kX at 8%IlpYNJVT<6Y9
zb1d(^AX#E(c09+4<x3r1ErDUa%}JgnCzU|kUaJf_O9>tz<xO>suqQRt3K9c at PeG<*
zz4x^D^qN#wyFX`V<xz2v2}a=i;A)BlhcUBJ<b2W3OVf-n#`V*uZs`q*?X`wUQ#5U|
zNl`tJ2RSl<M$ZS(oORXlPR9g2i+q|s%a9xSEg+U9QeMD8et1VqZGlx8Z;EyDdCK8D
z-Q(A<8FZ!T)Dt6KQ0Nge2}(-|Gar&_9I-YHePxa<t9jsM7217^INDY#+8cYJ68dC(
z0LjhERgec4C9QG2R+&F^JhpPEr(UjB;VD&-td#&$(id&xZyH(tt1YZojNBk(-!V*4
z`fd~a0{F>9RwZ<rbPs0CxX<_r3TDQvSc&<!=#A;CR&vfZf%4Y+GEb)e5FYKvKcnmg
zexg34%pof9pdz5fKJe52H|ZNkRY1trMx<tQS~4 at x+=c^mqU*;CKWSv=N9QV#Op{9z
z@=KB at BQ_*<YwbA@@2*J>r`E%m(A1y^c9bFS6`EG?RDS7$75 at 5Xd#+;|S(CEwM|0q|
zJ<I_%yus6RhXVMbSehyx)TM>+*C5A(WnS?I|Aacs1(GafgO8~C%wYttZuRam$i^)+
zItX(BobIe1CvK|-M9e`Td}!T}fUzm+L1_dTQafkrR=jmI&*>hHfwr55yNUMsn$PNK
z1UDi6Q&#@>5*)6CxJ^25*DXzLXk@>s1uqnNt5Y%XqbH$>lAtEi0j(eUqh+zu1gvWO
z*00KQ0dzOH9wD2=8<(A9Y~PL#$v+PuBAZNa&=K<VHc|Ti%gj>);T1e9T^<${DEiv0
zPm*`@d|W<^S8qcS=FpK4W*OX9U1gk0e2v*f^QwfbIR65P+mM+jWjtm?Qa%QukHF@}
z%U{_rkDj<uB>1W72J{-u^K(2h90nq-A5$tPPSy8RSB4(X8;oTl0-d+~@Zj~ZhSaFZ
z&49rfedk7YB$*@1IoI*Eg;HbiUgXqWb^+JBW<2hpjV{WEW)R6G7Vtc;#b5bONk3HG
zdp8B#1D7ATg(awC_vFzepeksRY#mnR_H-+o;BI;2cDkNPIw$Am1KJSssDxTy{oq#t
z2=!zPe4^LF4o0DVboLKKg%?-{^N>6V&Sa1Fht+MKnlcBmWr&S|?1>^&kXAOdXWzo&
z!tsmSubGNgcU9+RbC^f&|B-AAA4QzU?xoqXTrj2ZW0<PL))qTZYOs)EijA1cU+~9w
zT0p+5ZQ`qs0IoTq3b^<8)AL0kLA~59!O2mDiRv<N8u%?IxpwA%vRFQR$T#LHq|kEl
zM)6iL@%&M!pA}xL&l`mCsOS8Mf at D?#I0sAyz%)_VtE+%2D5IaGo_B=!6lrJ|HfK6p
zDGFL$-V)6-IdSBWnddJD8&Sq{Dru~$kmCui;XI3=G%+<BSoA133xJ}Q?rz81r+L%{
z at 9Z=lHm)i90AF@#nc1BPv;{$okGbM*#3AZc_Fwe{Q`(-Z)^H_wx9uip1I7oE2Ae+e
zGPMKhv%C-(hlmIu^Tz#gB at 9k@%}N*{yqa=r#dO%X0Fh%X9&j}~kOuRvX>|%<Nhd)f
z<Z(j62qgM#My*Z#?@yu9Q##^%tH9`yO3Y7SUZKl1mUDVY;b-x7;i+c^(n>C*9-|be
zK3F|kAb5B=UX|#Dl}0X at sq(WwYu~CExW08}ksQe at sv(Yz2wt!y{8S&tPhR=gA3OMN
z)V0+-Z9KXbWvh_lcIHV{H?gS;Xac3%hZ_13*ciS2b7)QeuS2=^=lRZoKxe2QGz4((
zhCNIQ*$n<8bTjgZU;(zm{(up63DkPwa|pp(g5$#4c>}~@oo58ugtf+IIzHZQoQOom
zqQdlEyVA;o&Lc-;)~$VDQap at qT0me|Jcv=$AYayvN_Q*i=1PRDQAFzD;KB8qVyry#
zWNj#_$etceSI&txPnmK4kgwGUiEQCxWGXK<{p-QdBvv|wTcX*U7m^_CwVfy;n)kZh
zkaHsd&0nbaOda}Thaq0StstOmL9GSp2H?cHnKV<WM6-(g;Y<;c1glQ^N&mqCPLj$}
zJ#(fG{=*1tasTNm*oZ9ig;VP$xaXeKlu?9qE-&@zoL047U6XLBYJEaSs-th{{7#k=
zs6We;Nl!QVWp;W at fBxkM;W at cM&4i972<Ep8u)<?m*v at u@S2>}qTIQP6ibv{6nw<e(
ztV9sgYh*oBOx}Ae=orJ;t=Mr)d^j<akv04hROB|!u6ud(tcAD+{<&l>Z=dYf1!fb>
za|#lK-NYP#*OzTRBhPqsc8sfNv3!bG$BZ(=<Cr|G4f_69vhehs5QNAn;nPy9H9XTk
z%3BiPUa)dqP!c{KVE06(v_O3uf8QM~mc2{S{mIorN8WM(?nxmeBcfxPN$VZa=qKX;
z%xJgZoD_XdPc}2%4n9ExjcD((90t=~0=WDzUsN!j$|xuyh8UMwwKc~(O6)3d*uW8w
zE at b@v?~iB8JOMmC)L6kuRM<+#Sx#i|ZW2bnEVuxX^*xJ7evUL{Rjf3YCy0kO>#0vV
z4Kp9hcKXFN2~)4=#He6Ok1~`PA at BQ<$!&>H^a>6`;|yb%d}+!Yi%9DWEcsF=A-{a0
zuXiQ7WCMNW?S&P>F)$~EbViEIA~c#Hrd#Zie5KDtz)<hu(P)MRe5bzs{nd#Qy2rsh
zE9tT^$4F|2B*q0Dm037{vstlqQF_Vnz(AVaokgrl^ym;6zl)PcB?^kMn~r4A4VF*)
z at -gF2A<eKa>u$JmK}K5)HM&*A7qK>}m>)18ITa4uTMd9ii~@X5Rj~vogIhzZ at Mr&s
z<{VhQH{3;)jgP^C;Qx)8Qq%Z}6*4qN7SK|_c-G0S@$*O9{-O4QNMpX~K}#X-9Fmua
zu1<&Vk6plNofKpy!S%(3o at 5D&b9x1caa3ce@%jJ!@b2P0dwu?^N2zJWP`_Y=QAIoS
zGJqA+XrDg$-u-?sXCPDL27kVcW|>KKfZY5W{n1HiVn3*x=E(dTo0lpvatQJ?=M~9S
z$eSYBvGwYIWl0k~7YaDrCN6*wyy7(HeFIM_0~!2!S8&w|I-Y7?zDoX{a+oRbXgcC=
z>Nm8iH1fFcYti>&(J6LJg7UTm59MF8fumUwY8f)n_RksOMRkeX3#_AYbr_&QbKZfP
zwW#jczO6AZ6ti)G|Cgu&9k2?C9+?_{sSLT1Y_pC3NN^hfR3}I7oc5Z{_Q<}p;n1%0
zZ4mBUU~8(a?u<Q2 at +<y;-yBuDG#-s5_w&(;O4yU=;^TJ+iF~%z`LVU4oj&;{3hs!?
z7vpnZhciPGW|g%<y0fyZTb%i;Sf92<dDiVEIYVK`t#U$LC9t{UNxBNA+mLlRE5 at 7F
z7K&EODcQm4WS%IEZjw_h050w(kcX06bgnUH`u!azbMOTiKo<+)0>>2q6h6_?`6<~&
zAcuk*33#Jt at +$yZY6<D#&(wGTE4^MUv+9nim<06v at OE%-ovi4TK{#+4%K9|PuooYE
zc#VB?)dc$1=V_imp^4MO(@1(iBTfGOY--~i2KH2HZq*C$;6Ob8m4fPi6!D(r#K>+s
zcSNG0qtyV;R$l=z)dxx3T#y9-nvG_3$(a6=7iHZPIBV-i1BVzxqDx at b<W?uK*O&5l
z9Y6g-gxuYr=A<+%UMhz`#(=;M*NoS<GLB_#ejISX04s%Iou0E^dYY3w-`7rV-D#w>
zl&iHkb#)BlHW8gT_PPgQ-PPme2Rn>6L3IR6B7Z4AtMNRh9%FEnpn}S_E9NRn>|@}z
z)>r{Nkz5PRhvHb`+iaMroLYJO=$BOT>fCl&PVcHN_ofJmc)_Y0>LC=vTTbCxWK60W
zc_>9<%0I0yE<Y!anvL}u&%ga at XZIdb5p%v)aB+*U1-_(jY at M}XsWlG>La5#pKGT(;
z3Q%C=AP<g-5Gr-9;LNQ4f;?7i`C<Q93qYD};d0hmFe)n<TXjily`|=Bvs7ix2ai^T
zgwn2hpqGUr<mmzLQzLXg<Kk766^|tZLpB<>U#h2gT@|+^se^fBrGkiXPbStYRGIt@
z;!Xb(83h=Ji0;ApzGuJ@*^}K~O-A>QRZ-yLq3zf&B7NbPFKa{9cp^zL8EsHRGs|ms
z9FH-I(v5~gtlGeE%r6Ki>rtkKhgh?o-$}ITaF+EIrO8spj|0+U$^IKT_G0pr7_0zC
zK)Amq*Yy{h;-&HWySN50Ws$VB5whh%!o5xZeH3s*p#<hHULD-PiC_ZwG~#tM at tloz
z{;5;gu=>|~QAwWRJXR~dgfbo)CYWqo!@_(zjY1X+&(-Y@=kKu=21J%I*Ep<^k=0u%
zezs%&P<n<+4&qd>VOa%z8gnBuK^h_J5Tc^>1S8QRTWCw+>0t9}aH58*R&V7Aws;F5
z+lPCK@%3uWx^@ovA*)QsCg)Wo&Wxi_+XY8-_##!&5C+(@J2{~KJZVuPE+$`Kb$g=j
zV%qwYn0b%a8b=J?LRh4BXL<4c%7ydQrs7)|-X_Fy$cNZdyvRoUlIFM44Ch3dzMjN2
zyVKw)^@EonrO9%^vYz1CSv6QJ<hw?5fo`UAcbQxS)<9Q&PhOcg0A(dW^*fxfo)*qM
z^H)!AEHHjK47FGw8N5(L6*VJ5(Vvs!29&!^vMO|m2YcUwt6y3AM%>i>WD4WN*o|B+
zgyZkm9|3dG!Du2(-obd)WyMOEDqOx6b}fU_RqbkwEs=<gOx@}UDRguKRSjrMuf68*
z?7kprfEfmxn(<6_V70Wo4m`2k5fg}CJWv_yr$Pp=+fq`|jvh!dm^maUK)sPh`Th=F
z at 7`C}+df)VTW8U%&yYrL#zZj&EZnRs-+k>12pgG at A`>eYP_1mr7$CXD at K>D`Eh&MB
zHV6bIvu;i=thT=SsFAIiac&|@BOZ(95C(|%Lv;<cs_F<U-($M8GmL8+uYPHND>iR>
zJ7Mp3OzZ|%M4z<_buX`yqsk7}-6VZ#>)<gcclIE%{F!;o66BvJk9bvgbV{6eS<DV~
z!`g>1)XxmBIj$iAv_Xz{@Sf~Hd5?qafeccr`W1T&dKO{chjlgzB9HF0jKGsvVYn}e
z<XgVd2vOSICx>9uI at cOpfmT??DRa5IVL>bu_7QiSZEF9|>PVWq+GlPuF+2f6ERZnB
z_A}mPsiVz|Z{yp$(?36cR4F^)<*BqJAR3-3JL)5oz&KOGY}kN%1<fmw#-cmpqs?2@
z at sJ8hi<3JC?pgGzsk0v9{dv|uGkbkjPy0>nY6hOrJvV!Mny4-eZx}dm?`b)zaUz*T
zvqzFlH at b_iQ-$@|xHGR3M~8~Wkl3- at grv4VItE2jGES>p?_SwEZZ-z&#A9-Zd=^T=
ze{bKJ(hPs`_-6-{CLw4DTB0jF^=(u=6E67f{b-h|Pn(Qup_~ge&BSwzPhzTFvXyOd
zg_Hnu2ZUa<u at OZd#5hy6oaHofp#Q2ZGS8+j$*|?3vyjzHTii~q{A?I|m(k1gORYN=
zEeOcPI^){_%QLTM>M+TudB|&#4GW0L4p;*YT1MsgLsWEGpp&bF9p0Pps01!GgLDk|
z){*h5q;zqW2A5^*_xOuV0P*D+EMrL+(U(%$YE#+)ZD5<}5H6)Ax-*lWPZffe47c^-
zf7anqI<Ul`+7WPn3#rdWTfqf*2-yqM03v4M*kQjoCrF>B{zLAGjQy^uMUfO{S{}CZ
zexi1vV~d8lub7T%nw%!lc<mzY-af{?rz;)sT^D)RQdQ)&qB?jrzK;Dx7Zupi85*+n
zF%N(;AyxA=aLS!BWWU32JY=@*bLV4%+3QZmL=y}G)Vy$b&Lagg5>h0BFkXzS`eVOV
zn?jb5Mh`b6XJ=uPcUX5DkjdR)3ihm-Ku&IEVXl~)9iI_7JF4e-Nq~<9O at D6aFlMO6
zlnp- at g-zL1lfyLotpG1X4_Dgj6Gu%hg-0}}Rg#9T^xPxhlAtD~T$5n at P)$GXZCxHQ
z3^sF}a&&th<a61x0Y(0B&kYOb3*!1LVCDdIBuE?W`nK!wyTi(I at qP@+e_Y1<0q~l2
zxyMjB-iYZ|>Cb*`g#hGqoe-M6R=IK|LFDv{1Dzx6ZZ}{$;;j}xOz-o at vf$)^lMi{B
zI45I)=z3ujp at Tr&Oc0<QYeie(p23Mt#l(wNAo{b_StHBrpNDaiSA74)X4#-ldJ*(u
ze+ldSh9WIvjt>pOBGa*knvR4)I}-h+!w!?&GEZu5^YX#Awzh9%u;|<rM#b%>1CN6x
zNfuIc8DAI>>Om9?Zk{s(eAZ#s8~-eLdUB*J-dhHLho~z&PiMr=WU^sLs9DOH=Tj%)
zyPfXw{opX&`&eP5i#99$&oISj^&?|?lbG9PH+(hRVfj2Bu&2z_YaDR5Eu0;k4>2{n
zTMkM=(_Z-=Y#@|lw^9N1g`p$)8YTG6mi+{xp>5`F05- at WS^vdrwnr)pad}R3_|a%L
zloy+bNh?DyGXih97E}H}CUp(hV+JBr&XOOoJLf`FT6=kPLqmpbrE9inRdje1U^zrH
z)4-=CRhc!Hkf;XrO}FQC5yY%OL|et3BKNX|B~L+YD-+V6;fNSDc9=aj)Sak7bao|a
zI-iL}6|`qBnj&Tz8lf^;EUA>+wQX&CDLy>|fB1an(-OE4mr=5U1k)#8XuuFXWC at DW
z<x1*#B?O=o8I=hZ{gkf>tX#biU&fA#DCJC(8mK6G{AH!K)1PoL(DN1xlUH_-@&$a+
z4(*WoV2*^5UlPz-d+cET^PAnYAmlZNms$W(>xk_aSTbaIA?mR$Xn-cbVgI}ysEcDe
zol1^Td at -`><Js)*#jJInx8mOHVD^uxA at 0gJ8P8kg*-gKR-oW*&vK$K!nr<7ju9N}q
zEFtS*rcnOgZJp~h2a5_Jb7D$aEYptPi|mW^E;{eCm9u#2n;WJzyrZyu_s=jwz3pJI
zPe5=F at I=0Y6G#syGAw+EEjDx85!$bfHFcX(cdJrMwwW=*TXnIVQmM-}VtE)Jyfxln
zp~BitodQeT6Sv5S=^m;#2Ypcgx-4n&Yz~)7w`kO$J`XS0R9kc>{&9<DqEIlFBkTb$
z?GrE}ET!PZ(%~}R8>#$0b&mMuo{P6U>7rjaiqv5{X>$=pgayqmQ1p5%fIyUts#Nzg
zLY`rR9=3F!R~96A-|YZ+4LhH+nyqKo-ndVXtlcC%w<hC(Ql(C79psBzidGL%+xWD~
z+d9o29iorhD1Y^`BcSDvHT+1s3xVFy=9mMEZrMl1SVL{twu|3c7w5ic4=3Z^A|{Nf
z;L1ED(CMjzo<4-`tI#+LtHUDoJy03;fk~&9DNR;!t$zE&N1T??F^MY>`z>xrv7sHQ
zNM-y~;>5xIxMf=h_PM;XiwQc#W||)QbB;7-tg=sc2w at NcNKxiuF*s+F+AKh=%}mh%
zJ&y4PFy|%D8X69~+g0zL=!uzM+w2#QpZ1+|G(jE&rVbMs2Dpw^%rQ^--3mM>c!Q&6
zhO~@Gz6_VyE3Uyi&sjj^WPe@!pY)tesT#PYTkg!p&`D=EOj?!j^i;}~hcLXkNNYq`
zc`(ARdkTa%!f$HSMLQ#7v|}R37ijG%JPpEBBQKG9`-%Ls^01?%M;?bhJA1|h7!{=^
zcG4zxb}e+Sf9=)gr!=x3O|{ry1<3_}3(Z<+2hlayFNx5aYrVQSzh)tqBn9(*yKT-F
zRVd(4Qmg7Y@*`6jRgtrQP)i52z+f)-bGsE6eJa_*nN+5He?qY%a*sVi`h9p}uk$Yy
z*x|8DQo>`?uPm}T*|p^d*#V8hLu8B1TT%S9Fwy-tasl20br<GD(LYoGCBYK;YKqM|
z3W#bi_PwyyY|TgQBR=g2zG7wV*pz2 at r2X~k%jJ!9(%u}yqpOX~W)Q`zs97DywGO4P
zSk;TIw7;qI=Pc3KW`;_B$lk5~6~>7!2J;Ht-F%+j;M1$I*%#xk%!DPuH%8j9knHCF
z6nWjb_j8^_a?g=JXIn|uw(pKh2bB{y1khdv-TdJH=ZAN216HqVWSw+2oc+kIex=g+
zN5b^Aw*v_{W72G<QVz`+TIZvTE at G>b{X=qEDDPmpH5rkAndqh+hBYFmRHf$!(Ey at c
z$e+w9qZAMC5ymC!2!bw<Y1+3KOQiU;9TmQ8Ezq~LUS<eND|3-O$#suyI!gLg?8dFH
zola*k6DM=ehzdOIG)G6$FbhbSv<VR1WGU;_%o0H{l#eTrVa0W!+iLznEt*qS#Y*u(
z at vjv#QG=vWgm at 2hztD)<eBqo#`pT;eh@<b~kmWvmea^~&{*r9yBFap*)}PKU5&nh9
z=!~?q4CT;(YQB9I`$BCadyI9iVk8Qn0nKEV!hC?|W+h2dw-N|;+_aM!=yRNKGAIT9
z59D?I11JC(8<*3T(3G7}nz?G!H#stt?xm!Zwdo~+V;awG1t}B!j6<HkM}0tDKdo4!
z;$DaDA*8{1!1yePZ8G%FOxsmxlu7yjB|=-r2V$k={s&o(V2R~hYXDz>N@>l&ZBMQ1
zaH)G0d{PgRBP7<*X`(F+$)qY<&QE7ylN9d4l)VHtOG1EvV_45E7~rn{cV3Ft+_s%4
z7&2lxHhY@~gu#*dH5T2sN2D1m;vi*)NFwwk=7EuDzPY<ypperw8tJS*yOd!FWaFrS
zN<Oc()k?<JWU)@=M&%t&RE0QLYji-rfo$5cA+Lx|>%2I+AYlftHaSLIooQd>uaXrG
zgB+hjpTOTMBy at duSI$p{kKudKMUM-=IppVi8+Kef$~eq7vOSKmro;c-c=U3v<A<D#
z7VpzCc9)!tNn1(@&?Ew(?Dsfb^F(klG$wgeSn3`lXU_oGr7_CazmoLtvn9Ivb$X(z
z76a3#x~EE<&UB!C{TL~b4CQ%_;=<EEfvOuedH=VFQA}D%v)K{})(9D68FodU%-+ra
zO4JA%=p=~mMAj4b!2jq<Cz;{1F)_5(@5g4^1Ho>ow$7E!^0fSp1ykV`l81faa^Jfg
zx`xy-!~O`J;ya;h96*1S$|Ail8~?C+fV^SJacWkLlc*n8!pk7TwrIaiE#oc;r;AUL
zC!BXC&<dW(hi;B7gl6IKZVmN9b~=r&E?21%p6<%EnChq9PHlf;mtyHWYo at Hx;|zPl
zhD$XL9d&}s;se^4mQ<uapHUj55E|`Cjl#(XD6JEwHYY{ot4_X^ROX=%Vy<YlRDL4d
ztAtk&V}%DmsJrx`e_O9(axXlVEhR%4k*o=oRpFgm(|UCwZKAI(qBXX`u*H{ET6NDE
z={}bejK~jE at DxdDTTFyEdg~+2^5#cgBB0tGDLSCTFp>is5}8yB=Rm4g_wgw#p?`da
z3DrC at zz3X(k9xc&gwHk9&44e8Uw5A7GJG0|W`s6-S?cL5=wfX0G#xi!429HUl7`C`
zqT3z6ZBhMT$6#y5-_Oa-+~!N7b)*E!s>`FZ4hc9R3vYs-Uar~#+jPuu#%4FqD5NX;
z!!pL&A5y1j#7?GWIXagj!e=~@enEj}BuOBVw6F_Do0YJ|M)Cz^-5sE!R*U*Tb)tyf
z!EJW>>TuKac~TarlW{H!XS=Y)rMU$Y6(TH{!N?FHl~C#E#Js2eUTQiJVMVG}>c|I4
z&Ca9)aCzt_XpLXjDojB1ggD1Vr(~Jk`597C?)h&Pji7+(>|77{0tY&4!Z7*IYW|Jg
z;-|GgYnP1w{I^6P{F~Xk?1|?p;{IarPkYi3ROWFYD)9BHsG!Q9SqI`<C=Sh(*$fGM
zhLcwCb8UhEY!Z{}CP^EX21^Rglkga>Iuqq-Q1Tr?3EDI-=;~{HPxLK#LQ!49+*^C?
zZma`qkaC%8uys#3&vK8Q3qhD{^pe9gJ00&9M4yd1;RD$slsLODf7i{jnV`V$4+hDh
zZ`5ANUbyS0Tt-p<-0HHt&+k%p12>f}ipX)dqHvg-(5vczmHZ5UT4Gts$hz~L8`h`K
zO#D3D{|vcmm7hs at Jjps6PEgyM9XrWg&x`&8Px32-mxQ}^C at JVgzcoDHHbW_F8%uHI
z-{Iv<`Xrh+8X9Y#p#@!MYDK at yPF)8Is?<c}bh0qOyHktiEw at -ON5W=Xgwc{Z-d7c$
zK3?6xpgvd~Y$9b-G-Gj}3}MO1D*y7uUT=!~Ab(^yQ_y-~3#oO7l|?IVpatV{!dDOV
zBGu5ENthMyBnw+_%OKR$PUN!*^Q{+w2n=5c2|Xq%&4$PFy*nwU)}4=w9*<wRZT*r8
zpZVcL at m=obZT0eG`)X!Dv<;<Ge*9o(SXthdS^-pGiO9!7`VJC?0zgyzt+nFr#s;5O
z+PUt5icXHK-8dGEY~Mfdab+%~H5ivX=v_ZY{+=7HYpYb_K=iP1Z_V9?kCsnP<dunR
zm!+3l2*^&k95%#D#H$WLr0*8gQl6^}4CU5##>qHU%K|?;WM2nwP}0xZQ9BR7W}Ycz
zZX|I!i&9I9(@;)ShKRQ6fJDv{j;kc+43qcR4R*DWRdfcK#-tWnX4m=5p{Fqq{X_{B
zr at FHnJqR~L21!4<VO-U(pn8s?%U>@Z`dSKEKmD$$*4uDd_M5Q}Py!tGWh?yx-D#i`
z!p^QOUl3yEDUzu0LyDwz5|gQfXp!KD1<@z at Dac#BD at 2Z4nPRMOIB)~*QJgqo(gqEP
zL{Ak^tSjsuezq7UuM)1Qk%XX`lNKYy`){}8_9E_F<T?9h#R#nka_VRD>hWIcJo~L`
z5GONS@)%ZOqr@%JkZ4bwJm?;ZjAd`BD_t~vkv64R21O1)a!0yvs at 6sW<g(ji`s^o=
zKtkH--&(s`u^=a$3Z`j+BYvH~@Po>GsBhELx}75^kOMjDUEOS8N~~4@^iwq(A~3rS
z{F&~wkRZ9>D$<ny^KZ*q&P)!X@*ci6f2%Z^2B9h`Y};c)5_QZ`Wh<roys2pEk-=>O
z(VB9O9jEknT~#aX^7j{))c at B`7r3Hi1YDMYtSK;yF?TBDp987iW&F3tWcxm6(d!I}
zxIVEFX76rbIe+M4pq%}JT<tRKP+M0yaLy}uwnbvn0AUwc1fmDx9=bI%>|wY{E<!WG
z3=iZ1b>>L_+^+iUK5Rb>e*T<d-_dS&MqKWz!+NQzj#Jc^RkFQSzld8j428j%q9w`*
zQbMFKtI@(NJ|I7l29}wG>iwx|#iZH<FZ`98&{&|Nvimt<04K_Qu=2uVv1raF`Il#=
zU>8{;ZE^XWF1u786%^WB^+T&*PMYu;HC3f#3;xdvW$0URIeoZ~6~M#aaR9r_9m5m6
zy{6xvW@}O+8d~dc@)z9`7lF>}DmziX0)#y$XcwEq>pZVL)TYW4mJKFWDh6caE5nn&
z>tve)8#WGc`!um_FCLNLz?>q(x|9aHe`;9|__LjYSLw5mA4gB#f}umpB?A-c8*3ds
z^V+WOjOn?=$(;X(>`B_?V2_7>{|*ec?CnrRzq#NcpPK|!3Vq#;Jl#p+7vl$?Jw$13
zMrsYq>$j5~3>#K#df?cVPU;?WH8I%n7+0Xk$Rjc^pqwm?Bc28ciqc0??*tkaqyy5K
z at xo7U=QRJgFyXX18&=(yx?AdaW}QM?$F?LY#bUlBxoEcoqz~4jP)A2FqoD??3o7FO
z-#6BV<CPLQCf-#`+{)#+j+_DMx}wt(d=hQdcyuSAA_g8oE(){ALzx>!K-zdA&A`O2
zS%EkXgFX8%SmjH>*a$w~b<Qd<9D*F at j*7QgUgVgKr0Bd#*w)#VsPIVXfH9mIFWo(B
zz^ImU^RK3DatiM?5k#>8U2hnA40=)0;I-rpc2W87zNH?547~(#LIP52GR1wt0&Be<
z=DBW{4Iiw at _Dxw_58_4F*p~v6g)Pnu;6Suco7wSD#5GxjaJM|?ZW{#98z{S0PUR!O
z1Qivuo}>SUt|ZO=$Z9w_KL{wr9xidxk?hoUabxh*eB at K<(odw2Zv(yeyGKWY>9ut{
zyYD*U^^vl&hXu#h>I8fdHjKk^FMe<lxR=q$OXR$b#-gO)2h<Wd?!>qyZyxPI=H4JR
zM+WThgJPGS3~W`s2^2uuyJ+R{CXTI+4Sg$=L%|=nRg{b3kbLtW{wg*6EMnmxFgOg;
zv-64xaaX$bQxviC4~0w3wShXSByUcmYju*Fg6||rL(=~W|CdwBtUf-3n&Lg5vSAV{
zPJZQRKPg8lH)|vz at DZR4W=U`uJ4$jUaYLNN!MA$Gu<UoZv07~kGU=03j<hBGeLsKN
z(U5iw2f_b*92`4SP=Xfx-b((__P^aU7o|taAff%y_91>Mf-4Ucfb%-tD+Ptf<=v{I
z2}KyYtRLqc#t`Ze*bcZ^S1M+aCL$jKKiz9GB4Cd}(cOAENVK5-2^_4g3qKNGV~)|f
zw`M-V0uk_Ch_;B<2Zz|iG|r*PmnH=2p!vd$6PK++>VM<R%b&KCTnboAlub~nYP~cc
z^#D$Yl4_*h4~VfH?_Cmd-?!LKX%vn#wcofryv6TBkrM6Roa&9KJ2S<EJKH_Di$u>g
z;HSq?GC1Mp=^`Ag%0d~F0}eE$vS`0j_%LZf at m`8up(5R6s)Sl#8a=;b>OG1B-ffs@
z_JBpY=X!=H70Bwl4sA&#X?)H(jqWE)0BMAKL^!dJP<-5#u1cL6%*?rOjwmd>la65k
z)#K*KD0&=K--L0^a<;ONB at JG8o>qrEg4ytxZB^5F=eUBC%b7kn4p3{8nj}QqNhE at T
zb}P8cEY_1vG3Jph4Z}e*<9%G676ok8C_#tw!JN!7z#X8w06c9eGiFwHy-1CO<kruT
z!=1J5MxI1)D3mL^UYPzT9NEKmg75#sx3#k`XTG=`W(_t<iyntB_bA03nx5Trm{4dD
zVjVuJi!SnAKdie^paDXvq&<lOFX2WEa)A at WChU*M#<$UYL9-v?OxsXOTEe4%E?Tc|
zPgi4y@^>DQS?AzM-Z<}UMRWN(wfm=!`_m1-Kk3UhM#xJn>-TL^NN>qJdsk$Zewd_c
zC%60s;%Q$O?+W0Vh{(HO6R7iMiaG5h{o0zWOpKcZMbzF8i+N9`@FUx;zuwX`S;8!*
z!|*RJ_?FX!keGAWBRDQM0S-Tc7)^J)k-T;5RvIOKB^i0CmxL^yq?Df6JDun(N$H{R
z&*ec#h8ZDAmvY$!*V{@_mSoa=X04ZmnHkXc(=<G3v27tYH37za2%)!cB~?6I0+%|B
zXl_|PF?gKw#P(~Y8`}W at Z~Q6fdUr!aVC#lZPoUmC!2S&kCRP at n0jwRDhzZXl9WwoA
zhXSKCV_%*1 at M8X>^nP>2(R}8E4}RMeUNzD8r*;1-dC}~FZ3 at CDVIo#DIKXCkRe}k@
zOl?VQ)xhaHN~npGdf0Hti5;hvuObcZU{>5{I}D at YTUCBfAKnO&i>9zJJN!P{sdxfE
zgo1*oB4X{u%VN5hZ!(m77(em)KjNSyouQZ@?Ts<Vgpa14=B8LOLod;DMKa4MSbg~z
z1}gEUwWgsU)_j%(FWsSzR?oOS!qm3f;{vX$-%<7dXTbucQNu#x;R#LE4gVad_9G7U
z18ub)9JU*R&0n4;&mpJGBoZ-++5ei^)fF3pxZv8U!F(gP#l(yD_Wr5>;kU#CRS(q<
zxNpv->Z4_ohVk?erm0Ppl at IxUC)sx?n2-3Mb0nm(2 at Y~2Qa7W6kloaUpoQDwwf?YC
z93O*K)L27RHUMDbZfiVMwkAJT<(Sop8y{!vJnzznDo8zK3iDsXeDkn?`Up#OlRXV+
zVBJFKY!A9y=9Qgm0Ujxd?%ay@<}-l1mq)9uu|T7;{9jn-(v;35jEZaY>9Dq^n)g#k
z_-I!Btmq>Kr(7TRkM5<wnCs!ipxvH{a*1Dl>E_)@oxDx)w&TVvV+rzt<rmC;lR|x>
zm6xHr;1CKWz*GIL;G~ZqE|Ph)_!77vk+)!=vLz8AI^pku5Rz8u*XE*lcJqd3twTRt
zd`qTry5rapG)-X)NL7iJd#Z#+5 at u6UdTESX_2eI;FQM**w~05 at -+Vn(ZIt|ogAwQk
zI%E)7b<?vrBB!#{#dgwqiT4#!RCzZD47r-36_`23nOi;xX~sklTtp8-5E`32uxy-%
znlfcD3E2YzDDG@>b3+7+t(Y8hO(mR47YtZRC!yy%D!r2cuO|E364w^%oApj#61Y-(
z=%}CTMTdTfrRW4dvg;%`hhI^AsFpG~srt73T|ll_s1Mys%7gI8CS6xkM#4_zcy0-@
z>=eYQlj)`um_OP{k8GBD&>y76^=iYx^SY0h{qU|n3#=`01oDk^<^-p69TPgbBCw-P
z<M3gm5eCdcWb#H`s3$KI7|IKa*D?vuDB7;FB2t#x&3>1SeOe2t!hYBMN#W~!(AgFZ
zzF(~|$~`4BQ#&}4Ntr%z_w(fj1a(Z2u;jsKok>mz`s-XLvzRMT2r2;47N2o%jN;6j
zZyMAC%)q~S{hGqzhthkygDaRpMjaPFnJCOkn!MXRTTO}AdR|~fQlRtf1>44P;6er7
zxa at 5@uED{+xEAIL!PAa78dg9~+&5>g17(!1z#PEI`pHA`u|LiXYICq<2GjyHdqJ~X
zz&hTyGc+1S3Xx^$%1z^8IQX$f<l3)vrmd~1u8iuU(5vJS7Jyx)09%-pWX at AwTqR(s
z<DxDB?sQ&eK$y<0$1;H>3CV!Q8VBgd>?n{<{UBIsvg6*SKxj`Kf*U$Py9Vfi`kt`<
zprq`zM!v4H{*8Ow^Du`Gp)(K4_CX*<aMdeh5MQrKjzg!3;A4@*9s4SvG6`iEW(-cN
zQ`2hB%-jyCaVQsO?(;wR>GbY^C29a*Bgji~Yr8j<xdR?~x6)wiSwH`ff>n)TEuN|)
zk!?=Ea8LuWL%mM6-o=uagQ||IW4P+>NPOrw)K!V@?`!EXf8T*jHD)+ElLIGU6K#7x
z%zFLLIHY-X^)6Y@$V5B1XXx>tG-f)Q5X(Ezo1|-wcsg4q{WH~%);$*NU?>PFOKP8M
zEvRjg)PcLzKlO7>iSaUC{qWhjwmQ2c270#Qd8=T@)aY2tAG0_ht*kwDTfxt;%9<pY
zj}kSP=-S>fTCL}2KLI2Ao#`;hvUK5YhU9q6?B-%nUrCCAfbI=U$A>|)=`H3n0H(hJ
z-hWfJ9Cz5s3f`H1;jPFM*jTe(!ey-=4`4Sc#Y>@i6SqEplnc!t-J)UO{xw;dRG0_F
z{Q1nK2Aan7A};2?lWGsKGP~#NHldz2R|D&%yhxqPLqIqlxe&ls;A1oxFws~+0V-1#
zbpBRhsDCJPQgw^nOV{gSFnRDlnvc)5D~qq#tJZKNBPrL?#%sLPfOZ|_(PpU<7sQ&;
zq!cdyBLMR-s?~7A67J<(C0H#&6K~X=m_dqQ#jsfd?O8}eN0A)<qV}$ni~Ag0A=MJ|
z%51b4`dwO!B2n<~zHbGzS&|U6ITh?&b+wR{t!g{X8MkBPAobq+SxE#gCsHY0nYT6$
z!ysmSpIxyF=@FCB^M$#%jgm6CQnn6MmEP(0!hyoO)Ig8lhPIQmVjHEGVb`-~=95LO
z-F<mjQ9-ny=50eK?@f=C4qEExL-$THjX$!RRag468>=lb<#N{*;_P{AjB$$X)wh}r
zT0^LO787;{hHZAUqPXsC0mau&f8j`kNm<bNY}6=dYJbu%0cO9`pgd at b6qB6w#&et+
zsYM9<26HZKvEAQ>vfC+sjhTB|m$9L9?Nm0^a%a~K6<2kiuF)Hqp{QsqQyYV-GEKcI
z{TNeMw#}Z<v at rn29ktb9Z|4T#8VE=8^CyXF^8#oSlBt$AIS7+*hpv%oz`y5~JIZdZ
zWahcal^Hv?UktF(CUP`~hSGxm*w~w+KPOxi`xN~s&VU5Nl<>VpWJko*6Wr5t#$=mf
z|E+H~E0tG52_A(|q8JOIproh_6uL+H`Ku&i1`0Xf4)<PB56dp3 at 89Go<C9T8;QsK%
zm&CSK+Cik7e=~<_lYU!3K9-|1J*i@@zTqA&r)w?PEKbgDSc#Dhh}a6yC0(hn{-n3k
zw7S4o^MGDJbSe-;tna<E?aI6S3Fk+xo!Qu5o${L-{W{p!_&c;kJn_1!M1>Mpmg>nd
zX+Sx)Ht%9=<C<9KzhFdR*1#0W^vHL~iL2p7Gt<H at _RlO>u`TlXZ2#zjx)?amQ^MoC
zrT$VHf#D!IgAP!M5bl4#$Vs{cpub-sVbIQ)WVsP)>$riQ4vyAQUzt)Iy-2iH;E^4x
z*W?Ej at G;(3!qa}}5E#{iK)w{4TMw1^Z~Fw-W(sdi6dT*}1{(CD5^}{8FePXo;RmsC
zD`9)Qw at MH-Nmu_o(J79Mn?)$OWBjpgx*kY<Pt{g+<_SJQ_(I)oe8cS at 5ZB;1RTVVb
zRkYZRpl#3C>qj53Xc|UeE}5_Bm{U9y%cCk4awA>(bi5Ez{rNOo#ekCIwN#__{^MmJ
zgWw1#`&CsL6!$+FIHRhC^qCcksLq@>;W$e$>sbpxW>qBMQ<~pT6rjYYv~=j_znaV-
zrmY;Vz|tg|mzu$;!sb}@SiMxy%-H7qyXaLlm at N$>=X&b8t#34ok06MeEPTvxOf+40
z)WcySPaSB%f{ewCkzmQnyLn>sUs%@1{e1iET<x?`I;^z{u30r#4awZxf7cfg$dV5w
zt9#f<byTsd<{_c#HIg}VVVQYpJEF_fRqy2`lEIpAua_p*QJM8f$BXbyETf&>;q)Z~
z0>YZ at B-TH$p@*32r%e_kGMxH_KmP#XF)XQaYe%}S=we1caG=X&Zv#X24FjdB&%T(v
z$D}F&1v!|gVLtsl8L>S()#Nn000 at Q-ebtxIY>NJ<#7<B23_BWYrjE1w3QC=J&2c_n
zp5P_O`fJ#6EE^v0G($CubXA{8(kQv173CpTR>w_HDgKP|Mv#5_=lOU(Kgh6FA+xAx
zh$Bj)NYIzL?%rDy>~Fy(0M^nG|K9xdOhd3&SIjr?O-A at g@MnEM#Y}J#Oq0DX$CJ?W
z<{M at io67S-pYKM~vMD|H^tet+iW6IedhqIF)y=FM-9_8%=9<d|!DOY!Lk)DI at x@un
z9nLZ9IoQYCYarSrjEM6vkO;}VcClp8a~Q8Dv>PmzKfYIF8O2xwiD!AO)ujQel&yl2
z#`zD|k!+pla2R`u56M+<<dK1X at nvE4M$~tp8s%Vgjcw_~Vr=$|I@^ccKFrN_({gm^
z<zK;fM_ewamGW_3H35>9CzPBiBgvB07~ViOmb%&rm;T_I#*rfnvRT1rEikHjg>JV3
z;qgEKpw`AR^n!j=msuelOVN#jY5-0pijwBTf)Ys1N(LqQrLWvxnyoC0_&dEEjIYQi
z4T7MetOR7cMEj4$gY5STpZU5MQz-X^F>znV8JCa_dmDj?8QqrV#bDR?s}eHMDwS;Z
zXlF^hF7?N^LBT^VY!(59g3GtNGV-2*XwoMYKK;}&sAj()-FHCRI#pZk(xw-Y^?JWD
z<&X-|k?^fCQD9G+o9V&tCT8k at njLa*bdZB=)C2Lx#f8Z)2uK&K*GxqGff45 at u33m^
z$pv%}ugYYWSe3-zc-3c5Xs2XBfXXzk=utT6hw at n$QOiUYZjm`Nb_k}@fX<njiT~x2
zdgv?HE at psvV<<Xkb4`_)098Q|7C2{&kvr3!+5U1O0Py7A4`yd!xMZ0l0!5o_u}PFt
z7Sic0=Qz&LUym^3Y3jCcYHD}?3ELhPFv$BD#~*>Db8=>ymnfYy&ftM=30rNB!FC{T
zSxBDqv34<F))<!P7pDeE&3IL3AbTXfZq$*+XedeFBV-}tpnR64L^noX)Mf?Lj73Ck
zDKUS)?(GwKGzt8eT9=*P6~>xm#TC3j`+xGx37{aAu?f+bP!6v^Ihs5Spr)o#_d(~H
zVLxgzV9jvD&N>*Qg?WJTummDyp4gE at 7zaKvK$sf>XrU^x*H7 at Ic{+(wmY$Isfo(B(
zUWPgFwX>(exJ;uxb_jiPA^OJnE;4kf+WSo+j at fxwl4HmxmrH|YSR46YcD6ELP0WYA
zKyIcnKTrthyh>Q at BZ$ppz09cUlq=edfim6LPpIlriss%c%Gx28Dsk0=A#$_dqD<$g
z;AaCQ+z1Z7$zxcCP>i)p42_8iJ%W%FUxF_rpB5DD51q_?=)#OFF8KoNpTf_p1)2i`
zeorjXWAo&#Z`(*jDha+V826=9L=oG?I!81uPINDpO{F at DudTN>CRX=!fu!Vn6#~c^
zVr~MXI%yj5V(QpDZDR>7zfBdeS#k`h>*c=oAO=z at uDN)$tnr##i@=I-R70c7 at hpH`
zkZRz4?XHmJZ|stm9=BS45!uv5%{x13<-<`G#0IZL1&e(p6_dlrrmgG{<w6u@^j2RU
zUL0iSy}hVQD at aOv&SJzugE3A^s`*%+L!I<qBlyVfW~r^1HA0cw8*7`~M&?t*kYG>u
zq%a>>nT^I=qz3n3oGJ(l1ImXzL-Rf5bi|90(WpBh4A?L6vaaGq0TKc-08cAzyO{R*
zhbo26)7T6Sa{bN-)~JI~pK3 at DP48~aY-l%qm7Wu7=Ek<q-aKocno14e3IIYj1$P&p
zGAB-A`az`&^z+`%^jpji0)fTly76sZGb$ei*`ZlF5)gT{%J(sHeDXSO63POcGiJU$
zoMbrVKt+R^qBdJ3DQPaspi9|y6K`g;O<XECl=l=W44||x93O*8{o3 at -BbVp=bgnD9
z6-_C?0h-5&tK90DFct2|-N!|I;`Ba-L}e01+uB4-cx|<r==<7bQ6?ZXnetIbhleqe
zl=Tu2*kA1GF_$jnUIg{85OQYn-~MCr(QCdqO`8JQz`_a|ET#nN8`G{t(XbZD)LAx1
ziZtmYftU-eIo&_U3H^(~?cIfFrS+*5p=yx*73jM;PbMwgr>B*MGH5ia-jS}cCe2jy
zaI+|^kCnh_Kzc?DN2HW$W>W$b5iOE0>!#nP-4GaQ&5l7`Ezu`26PJ677#A{AYS(y;
zNL(@Ms at I1cT#7-SLhK1<+)8dEsL(Dy7ZB<Dfr<RYvtVl+ig~^<Tb9q%Ee(l)LoBMD
zWdxMo#wcj?N3yR&U&<-1wuo@@NozJf86eHh02sOWdXs#%<ocM~vqH=hk`a5g%h^#K
zWej#&%Y7r*bqJB7j65ADi3;#Y0jM>skAbL>$Y}sQ*V!>CNdiRL<$46(X1~{#;LnUo
z<_p8YyVl$u at 2Zh<3kUJ*8$A+MlVu!U&U!rcLHyR=a>HL@&5P?~0ysOfN#d1VfDQZM
z&_Y=2HXb8y`853OtsvV<EW9mv4!|Br-wav)y-c+%W1Vx?QZyX3_KdLnnDseDtZ)}(
zOL!;|)0}o(rL(Ql;F$h36dr<xBUkX?n=z71Geb7o-dmMMa9I+*0vtkQWV*i8>OK`*
zDz>?UVYjSTk(G=IqlFrzsge&W{a^&@Y}K7PnM}4R#7cOQ2p<-DCOlW}KG?aH=)tEb
z-h_ilCmzBBA)&dVnn({XmiAthp4l#AlJ{j5O14$nE{SGi|4uLN!h?1zQ^NQv8+7aq
z+uC5%{kZsuPcKx2UY-4en42lT*EWbuXa@=p9M65of;IC5L at GX;0i<(|z8OCCPd?#p
zoAKVyJX(QxM=Jj_w4q3yi(kzew25<~y0d?_VUnooLusyR-B`6fDn%|_B{;t?bcDE`
zNfyC~sV_gy6YL`~C#`$}R^d#|5TWPg!j>SnFiqti$@DR-xIk?X62Iz$*aHA4r`<7R
z55axEU%NevyX!armcJ!<ZSd?&tv90(?WLw;xK-N>#V8JEVl!P|uV9}k%!3OX^>kiF
zA{h(3Gu`hhf2TF10A=S+OJ-cT!FF9`LJ73OD1tQqzh8ZiE8IOVXHTR`FP%`1>aAQ-
zX;?n_b}*%%&jj30WC6+XY#hnF93$V~B&WZcu3|B387rmlC+}LW<_&To7!#!dF<2vW
z(wf(kE6fh<cX;ni1-*F4Mw0fy at -M!ohuEn-SVXcdnQ!S at U2{fV&`#b at AZ(_<@uq0*
zDlKf;f)Tm1Hm{mC8o+$ypA*(jvAc-OeCxGnLyJP(U$X&HA~Alfoa9ETaNuj)yLCrY
zNI=Jjq0Bqj8T4?`+I-AU6^#D!@Ge)V<%drLvzY1%+ytKbW<j;t)6Q=p*`)Z=dB4z1
zeBbvWTuLOnxVQ?4JeGb5g9hUBPryiM3j|62FQ at 2TsQxUcrfd@PuUMpUrarq$H5aMJ
zDYLQ<DvY%&VF4hk2L(r+7(PF(2b|_q4%d+%JmdntJBLO+q_B=zV+`>n$E#Wnp at X46
z*vF&v&{@m%-p_cse{PWHFlR2^rD1}XMhg=wn)iMe4s4<KFzE=9O at Em*7#5^{AP6OJ
z`QYMI)h4 at F>xyWx3KoLg6!mZ?cY?#RK3ej*LZF~3M9adf1*`57C>ZKS+v$|HL#c^i
z-$9<kW+jm(v4+xxP%&6FQjj;*tb5d!nBgs+LjuvAR3~}_Ybf(YOH;}rsHqQ%7cdhV
zgIX at -v40E|D1P_#bY2V15L;g)Q4%bmS-0`kH-G at m=ib1}IUg#?Luw&RA8N?#PH at fh
zH&8<8Hc*W{f`5qG(kKJm<dYwcV2>EE*)H2#vp-a2lRscH{>@v6e2`zK0m at E>@hD(;
zjNhcZ6B=(rSJ55F9g_a_w2 at qg4q#H$weuK=rplNi(Ztg}*)wjPl#a=V4#usn1P(;K
zZmt0v8%se=loZ@<40s*$FWof2?qmz^Vn{fMrBrHo{`i6cIUZ#Dr&G1uj1i&%O^$-#
zWFso9*W=sxlmJSTK8K#ekmF*|H}c~P0>^3{>8$8+D2c-is+q@{6P|{Y&~C-vfmdip
z*6!koMm#aV><gwB&B>b at YmlY=sJNN9(-syfoEMq6e&wgTAOUoLD!y8#o258?l{ia|
z- at YwIINAO>i`3F8b>V at Kf}1p=FrclS+LcZTdoi1<wd+Ob_!1?J9rR|fP3J_7*8p|l
z?Tt^V(^mI>YKaO)A5l5ucNETG0RIk3lO=2`9+brpDO(jgp(mKVlqn+l3wI|sG^5JT
zGr(#Bw~6&-q1J8bzBDy)<qL9VD8gbeEcV*!OVucy5_=&U{=NsW+h7iaP)w)vqHFm{
zV2|LGHCMR<fa{clXd&9QGPp2&VC!7{2-fnR7?+UGYQ&^46t)`Us~_AWeLjmTmc&1%
z4a~^m9`BW?o(^9mO3Y2f$e8uR*PUcDsByP+1F8 at 6(+?B!0pE7b`Gu~p6Qy!Qx$Eyg
zp5A|zQ*o+FuZ28O?5rJlM=YkHOuRh8$Aq*-4Rp`v39$Y7-s*Bj=73qi&0ruaCH9X`
zV&*0i2U;Ep+d_JS at kP8DscNeBB^5hPSb}-WpJ}iDFZL#{+wgSGzFnL;Wr%_%(TBQ}
zs10a-L9e=!?2+x1MTx_ at huo79%Y&b^{Fsvk-h=D5pC9RlR%mK2AB7Kpwdte~Dgf*o
zzv at aU`hAfOuE@`!Nqsk*O1%0WzS^Nv(38N@;8HZ{7F{pz*Q@)q$t)JH!S$0_Vc5w!
zD6 at ao0{Q=ZnQ6k#C50RcPd=lVi}otg%i!BJpgEZIRw>Z@>i^D~PSs~>z}}TiCRQd@
zOFgo4)OA7+5-#R;sDRfy=nB|CSe}N;pjZ(`lz1I7#^FF?dJ at pk^)g~|^f~Yj?TKEe
zRQs7WliwHEqM$CW$HX$EV$kE7)A$Uw0z_#G#G?Z3X2Ry|>n8}hfA)kUooWsgQj<J~
zGwKz(a9xXg7riolb<#%oV=PKIcu>EN1d{vV_IhFHvellU0);TEbr1pohEX(YCYhui
z;%fmey;AA(6B<TzeVk1?uzWH&2px&Ao`GPMOSEY1A~PtakE>M6U!OAzq6ZCR5%*Lv
z|2u=2`BRy~g`%dVC!D}LRxP_%H$p$o(&rzTE#3JEg1$vl-CMsunv>I<i)LwT4D9AV
zm+kjzv4zSM){~moh{vb4l_OEp?}kqO2|4+jS*9|KW at ThsNZIWmJBwf*C3u**Gh0q-
z$c);YN?S)neR|f&x{h4Dn8e$#;Qf9dDyHwa)vqkbM;E%F9p47oa2advk98R#H+T&S
z72)W_ID+2a)w0uK+-5|z696vZ0NTbQb5nL!i+{5%Ab_KO32Yn0j;I}R5~V*qiVXrp
zs)JYcfTrhO at FH~uG0>DUdIAzDCv{6_A at r%#eDoZALxO+gq(+aMtS4pj0G;1$(d_D5
z{p^I+43{09zg9&44;OQTCky(Sl@*8JAtf)2L~yn1*VsUdg&p?HnbMrFs-&B(WKn7o
z##V9Tz`6?zj&ALXL9hM!F`-yD5>#U^S4vuBBTB2;REnoZo7O1+t1D%zkarzLg4}0H
zT><M>V#5^Pn7;<hahBspb at R3gg5w(gafswjdhsAvwm-?j*ZcDYPwxFn3mtZR`%bB6
z;Jt;QACyme5 at 8u~nC7so&iJ(u^@)l7H-QbVd;2~t?k|DaBg7e<>4NV9g2mHksIl-a
zNS|aW`w_*bkL8KV%~7wTEQ(qC$Tj`VyIXxb1YZ?+33uQw`(?{}pZwkH45CJrMD;Sr
z$|+lbSr(k~7gAH$#ZCNO8sF;{=UM;dPyYCg;AQExD`62J;_?S4eQZohXJr3u2Z7T0
zdd^n2076f5iE4+dU5%Q;xX$D6C<gmOp+;Mx5}MLiifes^TeK_!p84Wcdb@(U;SsUi
zq#4ZRaNdkSr!gMsf<8)K3K6r;&81BSuo$lwg?=MblAQ2U0;kxN`WH~u^bxEbsQ-Os
z6U2;}ZZ<!G>D~$}{P4Flh-OKFtJ8vrY?8xwBvu%|;9?yKanRw>(^I>=BsoWgCx-Dy
zGspA8hqJ_)YmWflc?XZEd#vBgPe%{S_`TM@)rq3($Xy7cB?S78>#51PrKfuUgG^Z|
zT3lgRlknlJLsYYMx|OSNhQPw-h!6F^dK9|d6O*GX&3G2ZLXvlc#L^J;#gzn2OM|i1
z`rcJM$cwY`e$%?l)&(05Wk;{r<8;i661S7k7cTZ3 at k>BT66ge&yG4kKc<bc^YOG-!
z2e4`dKvzYEkFu?@`_hlWOIec4xK!IVw27m?w7-dJ@<);b$8|2vf)cdL3nr1`AJh at U
zoV)Xur08<u<5+Va-e6mBLH(A(ghCJml1!{={*R8|fdq$;9DhL>fmg{YdLV?un~>K1
zojDy2yynUg`oN&`CB6$mSb?5IX-_?ix1m0`t0Izf;D?-G!5}w+udizdL$!c7l|zu=
z;X$`bAyR7gc0a2|V-Gd6OUfZm^JOt=JnpgYD>=2m{R&b%zQyeo5L8grWtxniajC~t
z4Kz`&`^VHtHY`TfzihY-<?2C?d_3bDU~9w9+)406lRT%%Ze6FgVr_OBfF6K9)@6#-
z(U}knqgm%v`j$@lnDji^!OB9VePT~hev_iK>=sg&P#N8oJi!qsmn=#e4CUHg4V~D*
zQ=>j5+<t0uodHyb^}R4#0ia9?#RGWL`ZNVTu2aTIGhKAYWz}U}E{Bk!8lO0(mM at N(
zZ8+m2P at Oz;NL at 7TtxQ*MURek9_T7`g%Ib;5xByOTkZ$*qc8oEVES!_8Ha8LJfF0!d
zc<c-Wq;aJ)uaEQ`3vjXy2Xfc8PpVxg0%XIk?VGCiT)^bNTc~ye+88fuU86vPAT+xj
zioQp8Qo)4V`w>cRw<!_d8G`3J_Yf!n1Q&2aF0#)#6|LU{9*%_bRHE(X(6FJf{pdwN
z|E!neUbvHIS_ at j^JDe{GJMtxM$Un2So#PT)L(IXkGxJW)={h7~$z2sjMz44p0|_Q?
zE_i$*cStNoCI7`(U5BR7qOOT)nA79VibmMSuO}%49t|O)kpoJgv<o_Evpm2T8S+EI
zljt!~&~nU(yGr`R4ckd7_o`|KTM*0ypZmD3nz<|)iUm#^I49K?_U^+$t1XMBV=wp<
z<kybatTb!9U8CJIOwEeCnD<~L2El>4Cq=`>JB)xK=Tc?M1}1sPO)vzl+$bf~h!wqM
z!oL^4YGmAO5GsqFdrBebpx-=7+5GtuC;i8QlOFHR^4wC9V4kcy0Er{@win#y;P}Dv
zip`i%>T+LxoLY3HfK2`|$a6~aWpCwX4=y`cS+s>;SB~a1^`7 at QF#wd2FX%X_Ly*~m
z$xx1~N&VbObGgtarAi at vIeXvKmDUm(j>o*f&AxC_m{m at ujO1GcD3dk8?roKmdXxr=
zehS`P*RA3|;Y=VNtL|e_8&~l+Z%G1)Q^23}c1ROkBPF?AK7c`I{=X2{ZE^nYq-5=M
z-;DLSO#+O)yDla9b4#!axf4c!`Q51-S>#CU38 at mJ#|>?RSqX;R0?yLJ3t?lV at 6~5H
zHC!7&`wGf1;HG&hPYGNJHlLF2VGPmN<_>;G8;mBa={R5UsRVS`q?~%=0N20VVJ8Gp
zC-d~w*4gC3$4z<JRwotAW)lN0L(4ba0PLc?h;}0vzo8Vm!VK at 2O=K#(3+Z at zxAyew
zDy^?Z19%#5VYuD3q!jVcAnu?xTP7U7g=wNie#~diQNhBanioH$f3uY_HQMG^(A5w4
zVJKBDm;dKrrLEIxHKWzX3zc6vfRJFU+ at z1$iqlGY7gR%;I+hc=R%8LxxKdTV7H`EM
z&Eu7i*_3aA25jix?z&epRPU4RA*Mx>0SiE#A&H1$pYfBo|MWW;PO&9Oe9`F0-odVb
z{-4;8dF-+O9!Qzn)$hfD<BGDSV*yQ%MHGhE6Wg%%#-*9T0auuaqqwhl at -0A(r-E{Y
z+J<uU9x3Lu8JBL<4LY}No?YVS=%=zghPLpk9vd&a(4bzV4<|U-XhOuPaMavram`F_
z(OU_x4?Eur+PBc;ZOGi~%QPFb6vA{O#_NAftU~BU0K@*cAX2MAVi(eu;GuT(rFWQ|
zQcl#CJAS4wDWEK~O at 0An?V*J$i*QldE?PfHBrVTzU9Fd|@SfCw{<&>^y*Kp*7(f7X
zpcUv?yX`Hvp98CHj_2m%S>n_Ftc_z`1{Zb`_N7et^Q1?;h!=evf>neh-?cvcSqt)4
zdBKR5eTO;is*Y=A*L{F=e^V$8^XjxCqptfFjc at 1Lpq^2x)weC)Kl3bOkz&kpu#s{L
zA at 9_90a+!m7 at hl(+(OJcOF-;YCB$5e>onS<oOGfLWASF>EagLIJEuxWFxl?^GCwWM
z(UQZCP~uwJ_%=B6;cNe?;<}QYz8{rY8zwv)0rbid!>*(O2KgGqCnpf1Hj8pw{ZTNZ
zB%Ei@$>30xRpj+T%MC(NaIY~tepX`Tdfv0>cCW7a!CEiO_{5={7f|Pf`tm4eywG7@
zZ~-+iO7IJsOqb6 at y6zK>ilU-G{}EJzLg%vP&4m2N;b+~7C)7wekiF})sMp>@RsR48
z6-1Lh-}UINo&%V~kJTn{#&Xv^&_wJ3x`zv9__Tp^v*gP{%veirF84bv<gimHtfJPz
zm9+fE17sNW%S`Wp?6No7Ta751VKgr(>rU~iH+a?3)WethMIydNQ7bHBRKX04go=bp
z+L1jiiq~?q%UNk#aSy;wS4i>-fq8 at HwF{*#_Ze$UF-|uSK3EWQp`k&M8j*06yy8&3
ziX;zxXC+rV&7CL|1s}?J0>YJzkzpO}W59_=9+zOoP$TWDakyTnvSKbuG7(2-XH_tY
zX)Px`#=<_1L(GPSB9$w(v=k%i{Gd*eLEx51&OzSjz0g)kn at xDK;}dNiCzEEnMIQJO
z!A&1^DV}jX;oRgd0#w#6cayUr9 at yu;fwmx3l{;EGAA#BNY`IrXbE}dWM|}0KtRfV$
zx-NH|yyszvXxSuA!Q`hGj)PtDI0VBj7&HE0<yohRCxqn2>J4&=zF-(Rid9Px*z^Dw
zDZowbP|;i+*P`BCfk6wQ&g;J+orCgKIx(_7m6)}jhoK+MmmCKeX}sg`uzp3r+jTee
za#%U3fstzo_op55vV`!SG~N0)?}zcLPdETGK+L~4g}sup0{60%wsX&#il#Gj{Q+w^
z%&}K)b8N{c&m4GpS^C?hyhYi=fxQ{UAy)%jCT?C*>>mL#F7#go9WbkCA`$R>+By)O
zG-yW!5gQi~D!6&!HDi4fR5e!@!VG)c6{=u9oqtyLni_ASpNz^9wea(i(KI*l1GZnq
z$Qw4fH4U4rK>B`iHx=!m{uZ~ZZkE3IF?p(sM1ZsrR{AGi++v7#i{iI4gDmkBxT$M7
zVak&xW6y2Ms|q)xNPjq5c7)5pyZ~PKb)5b?Tb^bJyH!f_Iu=Io)6UOQ7(MePvEMXI
z)eZ)ThGOP-Ka=B`X^)|{@(XLz1-7%2i?vtxt7OC3RK1HPpcGJo!_8Fs>uc&o>K-uB
z;;#7!z_G;6!*gfcZ(w{xsu5s*_*(dKPL|LpOaa$Ipr+GRqyM)kxjfZF0F0hrgJ&=^
zxlu-OasKYxuDegdt|H at M`c^q$1Ot4jc(5^ScFKMxbIwQ8*vmfSPjQs3Hx27D=T7Hm
zZz6cJ_Dq=F#Zt4VHZs0NF#AD(KgazP)RK#7ieImh+7wRpfSpp-V7QRteCE64S<Qf|
za~@3|5Yx3;**HtKt!FtW>Tt>sgU6ToBr~soeNmnhv-cL}*l$7`y_gr>d~mGl8W+g6
z5>HeE0$12YrT*DYg5+WYf6Qci;p$W29~(=@Q7zZZDr at hrgh-BH*$4`4R1DJ`rbhD9
z_6kbpJ-F}vw%ZA#CIr&!$%b9CORNnz47j$dV2E!O(e(6V#Wvj?o=Ll|Q(e!YbmA`^
z3h^!!4DO78SeT!&l-i at Tm!T(r9XSZ}{fH};EGgWwii~=Qeah~yO|>jGLb<K0J+|H2
zAi9wkb$(TeE-cBAa3)R9cl+Tnj#ZZ2D9QslF(@&#7G$q7HHA<+-$XBtm_S=Grd-cN
zQYLt#6*wI$vXd3nOHe3r#0mwDh}=@%mKbQHnfFfdUgjjTmkmXlYu?O2>Ft-JvfbVA
zS6xzYKTxZpPYS4U%4IBfIvTaaM-B#9cmv at N*n^s=yUSwcGAHPu4klvJUw{X5@=lg|
zcvXgz3scKTDHFUeJWjnZ0>|JF1yD4lM2*7zt)CV0+w57v)Jc)h7p7HbPl<L_j9;@B
z$6O#7>zP6yRE<N8c3 at 7qK<2A~ALG4VJ9H36iyKN9Tg-^J2g{?SK*Ol7xsiK<$>R!d
zq4#wJ-bwzX_+@$pjshSfhWDe=UaD~t`Z8hHFntSAXP@$885GKC-(*_QgxADo$ALW%
z80Tw|L>M4?=6P!BV&iVSGETj$aQVm@;SQa|Mvx3H6D(UXQvaG`_`Yrpk4S5z0)NH&
zd%CtAXw2Gu)atyC!Zf99VbxG;;Zzlcq{WEFLVe{2ZSsoQ46OYm<eE(XV3!^7GXHx4
z9K<Hj>T&jZyORRsvU#!@slo at _OKd1TG5%c|hNE)cyD^eC95GpgnWEFM)c~a|#tR7^
z`aLcDGExG59ysF&@VIH?Vv)<i96dkuyZv<ERX7(=oZbVEe+BX*#p(p{C^eET5`4x1
zyxRqY-O22J!VvSmwJkjZc_)qYX^x92(*k>&(HlUMoAC at uC;A@*FPu<K$(82tV9>dd
zQ;BE*IcHn6YwJ{h0Sx{{XOAP6fXyQxAYBD-jW`ltGDG{iAhL at Q%G3$ckx2}05Pp=B
zFUdQX9x&2aEtz_MCTwzj%tp3InEjlRoR7C>8{xQNd)F>0>qxzv*)8Of=ecz{zA8#y
z=t=q at HodT{-=}k_lhFY3sF%b7hZ}o@%)19{J`q;CHFVTznURmfiqqVC9kTy2B}!Cd
zKQqR7y^h<cO+<={PG8UAh}2;tkK~Tcp2`}`K>2hh!OF|uGYL_gc4UL&$CpGNr7=&X
zXioduTdeM)U8^(&H8PaylQM_pVT3n2_^JWb7G`BbuD_QuolwTALpx9J)||0=1TKtt
z71*^%XPpq~w9<dF^LAh?wu9_SAmsikxEUBa%;}1K^*?5Dn>rjQ$I!6=N?;mW^+?ag
z1o!`;xK1;!+4hG&{;hw#a^HR>*I?!GF$=mjX;EJ`A~LCap^DVnmEIs!>6n8lGZs5m
z=*HNo-Qc41$@FbqyS)a$p+GhBvNoXR^~T#t16O#_Kx`&SVTGM6+6Ji8z{W*{3#2&9
zVUihU5XRW;=w&gV&XC$X!k&`#Mo>GzY+u at 2T`g;TQL2D1!$+$L)*(i;jN=>wB$iBK
zjKV%>zEQ$gOYMESsK?&6^Dj?7>R!hA^y08=hvhdeXHrgJ4*GU2TY5=XR}SkJx3zN)
zVekUSqK<*wpeIH>r;By&5`*uNu8Fj=aRzdYT#)I1ILj<(u&1?W>f}|;Yeg7Iitde!
zLh0E!))<kvQ!Qa(&9UwhcIQ!@bJIy8Pzi2|C&Lj1iFkZTG?Sf_M{tsp0;)Vs3-?W3
z3_Ac%@U-6^2Zddas|;X%NnJ>ksd202_q%C35jR at 0PHM|m!5!?h%%qMCq`4KaQ88(+
z>*pgC4B|u>h7<34BZYzL;zy|CDzDrcju^<#l9m&r9xVA##PTsznk%bw)Bwi<uJ7&!
zxvz+oH~Q=^u15agCORSP^m#ym3yGa*?O^+I_{Pf#8fW0k)N`{BNUR)2E3D!9a*YJ5
z*Ey3o=kF;`l}i6DNvcdG at BCvnuqBp{?f~~n<<sfB9obRbyu6Ko`iWySPw^!}n8j@=
zp(gMYc0Njvvhl+^tU9*dP3b0f^ts=TXM>CR at qfn%FL_yIo`&`&gW8Fa at k;4Swq{^6
z-JuP%Fn;M{el=$oz4q!Ce+?$oWLahTM#V)ob~A8{JSeeY8!@f^*=#J|l#ORe at PyT3
z09~@TJq29waoPzj&r?5an;6x`pU6C<KJ)WvPEfo6;1BMj%sRA|7%J5&2~!SX{SeF#
zc+lN-(F<1p2l9dPoaAX4)CsgmE)IXPxyoYiJxxEy-pLnhc*q_AvK-QF3QF)6JTWG{
zKjQHQY($&$q`)2L$xLW<%v(vOfA0097?_2B0kH6wbaaf6jf?ajbpMcS4aBdt4-!6%
z03opHkw%X1w at xa?qRlH94bNA|3yWS`?ZIX?;R7B;#R-Uv*csIb<c~t3-~)!SDwbs`
zLFkO`rM-X6p7h`|L+N>Zl9rJR4Kz7TTdx?_-Hp{U;zSOLge4YOy_b_;fr4o<#%pJB
z1ltF^)ys%`jZ*WcY;<5_zT=N0ZT73?Q|M1mv?6~54I6b=@v&aF9{9UQ18~yIJ>ZBH
zdE|04|359r7XL>jd}0M7lDH-(>Tel2%iY6vnI4wFXMRm?U*FSTPzU9l{d;YydMsp6
z%qo-*SAH}(u!p7#*i0kV2bgTvI3wQ$s|)6VMB(#jXAkT6z-~CdS{1N@@_QC7uz(=X
zH%hd=7|V*NNumf>kjL&8YDjG2ibn<sp}eKc(8+c$cD8WHrzP!+Ltj>TIxwL#p*MUZ
z$KmuGjcmn!McYxQPi#UM3)h2{_;_!W?rFaI3;J^q{YX1_-Che1OIPmoc;?0%P5w6%
z6qJ@;bYmcMs*nuW2!fK32FktY+%lIO$3w2Qqo?SC^lnlu{jVVK7Mrh7L}9@=HGfzZ
zl=XJ6g`i4v<o;Avl=zIK?78w(4Or9X+qxKQhVE%-IIlk?X3j;W$pVwucP$63L0(P0
z!METKMFWD$wt1@}Sa;m6iXWqVHjooX#qfbV53&nOzOrj+RXYG^khCO2noB+XX6$Bs
z9C3$(Guk)PExI4eq~0MLJDG>JFN_l*V1j3SXeYN$NB>0C1r<_e0{uw)8pRHStRg$Z
zzQnl%|KEH<7 at -q8+>Zo_%JLa3m~8SQR?3tOa-8IY%y^7ZTt{(D*l00*<SA|Q%G at a_
z=z(ghW!0t3f4lC$VzW>txyawPikGV&Zm3(9wBjHG*uy(c?856{%S<1jC~}JC^EWc6
zVb~p)=#%(Y)nW%lql#A&zG>^t2)v?0okU_>MxCvi!&Y^7{JFR)iSu-c09tM`i0Qh@
z;n}80VWsnVMu8^Bz~86>Koz`=IRi^Sk1Lum*nR8ai#2R3a^1Y8Jb{hROiu=;^KY-1
zi3*Vg^F4L$E}Z(w7O9RT7x|J9QCMbmAoyRUV_^OD%$o4$6#skrtwA6v|6BGaNJtt~
zY>__Pds%DAXuUWj3GF1&bqCKT+Q$4dVdjg-y~2%39$+GH&X)uK#sl!D>O*-Zw#$fU
zIFDWD<KT5E&v#j~7SC#pNt%;uVpDOV at 0o3ahPG|=tdPdKS|D>#t|0W<vCJd)ls%7n
z3jrCgC%H^g^05&wl1AO?i`53wkd|l`-XQ!>6B^Li-U_L=`DDD<V`Q&iD%!O;zdu%$
zq`DqmmV!hT$meDsOT%t8JFSqa>@+my)@e|NJ;?_|>%6|(BoS?aJUbOl)|xI{+YO4g
z?c~@!vv at kzM*`msYEaCtc~|a2?yZ)s*b5wH$P{_n?fc0K$g6|=Y&Zpr$;d0$tOzW)
zPC|+!);W;#$R5a=fp&SxT%c=Ol at 04&1-)GKiYWwZLKp|P*;`BRV#91UM20A{R{0FV
z9lmjh)0<g3M|N2zUz~-q5_bD_cu#1-cb?m&)L9n&XD(rPZc?TwRl;?pd6%F_Mvum|
zytO!D3#r!FMi%*})!+yM2PHzui>I~2K{_d#?saWP*?ca4emE9oLtqtQ(zgnCROj!y
z6>*xeTNM!5)NUs)o3^>Q-(G_qldt0-1dF;RfnyUy6eUTF^t!3F6N-Y9Z+B(k45spU
zkZYb+6Z>F?cvd6!oC`}-qlmIt$5G^8O)Su>1hmAZrIh2AimwFrRwqm*TQ~*exjS64
zl0CAG6ADv2Wv||Zc|XUXuEJI4;pVo7^pPV?$b{H-fq~2T{Z3e1huPbdrJ|esUofAR
z2{p&Q2x*LEqNqFjvvN(%Qz0N&>NL~BG+RxVeSwhdx-y9D{P%^J(sqsUg2?7#ir?6w
zXEOX+vu>T2y56BfldqM?l0=u7P9;|}wtgdV7xA at ZmGn_1Lrygu12zsQSOL8)u7S$i
zZQOZ>WpG)M`4bA>9H0Ql2HHd!KtT{Ew*lG9K%^%au<9CYz0T~n7>S%%EXrP07;0m#
zYm&TK44xAYxMmrdM2ASf5>HPRs$ryUvAA}`DPx9fwXWGXg(vcfHvB1GSCw$QzRx*O
zge7vBseCAEDAk at SL{+rKAG>ZPQ0k0TTQ(CRT)#_E^LxDJNav_E`-cEfYU0|vZkl(&
zI5iSF%#&sz5`Q#sr}yBSM+Aw}3RVi(13$xgxionLJbTXc-atrxmN=3Bl}L4PL$Uxl
zm93#^iG#^Px-na7-$yu0)L01T+~;qI^bdC!JDC?J{pt~_0|+9s0|1C6zOz^@M4YTs
z5cP6}XoI%UR(9ugtCU2SiyCIaC&RIFpJL#sB87%4l92Eci8$?N>t+xUI$*l``J=;V
zDd`@m)0;bOsv~h}rL;mcc?|DC{^{et4eeNj*O3vvz;~dw at z1c7Jrn0W4{?xcOrJSF
z>`n+teSamFJHifbx2I#N;eYkD(H+UEf7=;1tB2~7tSk3CLpI-SXY~4$+%k`d*$Wbg
zaNYuxqLN9#Ys(7_ at K&&u?|xn5=bD8RN+klr?^8C%C=gUc$fC<q3qs|q>e&6jR?Td$
zQrZANi=y~6E~%EJDKVZ^P--DEa0?nZM++oyG$nN>a8LSZeY)!T)b!ZO+&@s7S)8Bk
zDSMdb<dmBgYrU963d>PatMcXN7s_NW^>_YsPFvp|i&KHa4FQuy6|+ALMiRO at M{$<R
z_*30Tbs8v1YSFey^^5j^;VmZdybWgR;F?yQ-0(1l|51we)FR>-7!Bp|{q{Mo#plDe
zUR*>3g`Uiyhd<b>GcCwz`(Y3qoXmrp^f8~UB&$ukb!Qs7{)fL|lzn<QA{|sgP1<u5
zjjXT56qNT~@3Jg|4vApd2^v1qLPGTG%wH&8+>O13DT{ek(|32I2B`(Y4Ca%~<fX`i
zhYH at Jw08fl-cZi#w5Y=_imo1fdEb9AKx=VSGrRhl|FYxNvfeYr5&d_Q$yH}_gcjsj
zJfExokVNUBL3l6=S(5o at gT27CFFzeIAdg5Jl#mqXKkk^&dGN at 9wrDAwp-B&<Tw;9U
zBBmZwrSDI{Q*oIN(qQJSybg$u%yPW|ycy;Q8Zu{LcuJGmfxf~}7!T@<hhv0Q$_HCd
zCi^fEwnBC1gP)`){t_?z?rDaKmHf6UUJxkyId|X37jmw%4-=?$O1qogNL9XMPnR&n
z+hzXGue_*2E+)c4ePy5&lpTo~yFyx4qTvQ_wq+)kCi&wPFeNoXuc(0Umaca&+-zow
zzz?u4Y18U!W4J)^<Mk;Hr;(Ie_BtaBJ6HD9Tq#KVc}4LEP|jGX(01t`hwnydP!Bmf
z^(%8yk{LUQ90$ERKJ~uG2T}GtirKcW>eZ2;=Q3YnD-fq)<&{giQ`V_f$4gNXBKvS(
z7|I5NoDGM5iKj%d#m6GYu^svWnhZe9uhJ#vJljj~HH&e+&^H2vHc>jDCjEe_^x<kf
z>y-?u;fD}0$ag^1&kKUx%51z6*CoQw*Q#s%_EFooYHBKsX=()Wj#$}x(WBogrDBqQ
zc8ry5^37f&v-7S>AN`HdjCH&5eO4E=KZ!ri-ePQVNd?)c*}HQ={Sg0HQ9Sxm(0A2H
z^cG#W_9$TtysIqd0%Klc<8#n`R};viq^6>%7&ii4xoL9O!UdKOsO4)lj5196hm2Wi
z4waw?xr7DmKzbq2x%Ib$F|r;kmo|l+#sbja_g4?FMCX~4gsXL`x{4|0WB}UAaK|GG
zpbjJiO2;oh&(vBjx1`V527O8|tg9qTGn7XGb`TpVY%pcj0BcsZC5}AqT&rusLAf=J
zEsI_I3R74nk*U9&j*^=&YhCXhwX!RLm6`Dp1D82(TdQ_SK48yxzD=-~2c5TG3t!fD
zkcpM5{fE2p<r0nkqN}z^_VJy_Y)oSMo!D&6uLqKG5+C_eS#p#euQ at GhrL?nrLp?p)
zqHWigPb5pzBwNDu at 5B|J6EYd_SeIgTri=~b#gZ!;%iQTMu6~w!B77q9ByRVXB6^96
zbZn-~;8<pr<2%xeO9 at jZ$}9~SMmpRWxLiUG)gT>ezBL{RrqL%pECdTp!+Ps^%&(fM
zUT;}=rAx~Q5yXk)uCPZ5n)EcmE{Dt1?tUQ^2v_bh;%*I6rw%sng=jTV)Vix1I?#Q$
z%eO~v%f=ESl1vbJ56F$hT1xN*!TfdN=;5*XK2E3nlx0%oyeHGe=D>b|V>PRT`HYU4
zW~03pBN=)JAFOIg?T=6c%<AsnmO>M2W}!FQ3Gx`Q{F3TO+i(25E2kF#&3^H at Pg5IA
zpABh4XNX2(M}9JCF}uD6;qN~aD;+jsQ4DTAtEm(z2f^o1>U!x3wVK_yuJ30A<2rkB
zg+isP_B~tUK<j1Mm={^4-Ch-o$P;F!#|m@{(5}uQc?yApTWn&RZ at _#Z at B~dM2d+WZ
z(ld%A{_&Gu?YZxB=q7vL08<)GsTzjIj at e%zVvluvXI`*WOyMC*;mAa3+~sZdY*mrU
z8`vf<@l6ZCfSVW_Nc)OEfqA3wNFB-yEMVzX at Y_WN8}E->9IHrZa1`)*=UsJaj^t7F
z@{$|jdHu!Vaaq(oG2`{Cl7sxUG}mTqp<kI~F7il6CY2a+dG3fNxiKEoCVSJJ|2N(i
zHKnSZ1C4&<yKkT9Gd-46&t3?D;OqXXdOq|E#!j>*Gvc63EH!qU-V&x at DbPG0Ju+vN
zvanC{vgp|Hnl9&ID`rYIZrcYwEAY+WBFdf3?-*j-=qpK7%D^@e^H11N(M+!6W1hz(
z`jG{j2(kCQS7ANuwqKH&D~OhVhN<k>Zb60WJ|~ipv>f9vi~?odHO&<yCkCkl6xLH8
zShdpP>zjs>estDAa)Y;doh;5l(Qb4C1^8j_We4^~ZUgsTmgy at qEIYSBdr?=Wpkc7g
z*#1;<$zqEqUeqO^iO_lFm;+hv#~!Y=4oZ`@kiJ(L;y$@=yGhIwxzyrSe}3aUm;Xnh
ztz>L4WVSRM*DVOp*^nO{;8U36q&=Hofj?liv1O<HZT?Y496MOiCafxRG?gZ2EfaSL
ztxEm#I?pjt&*dUYU at l3qByIw+<)^E|{iZ%7Hwi3=aWS0$+-ipouOqNphMJw!2o92E
zTv<d~wwHhx6BaC at BqTu-`le$#Ez_Wo7EwzR4JP_63}OQVYg8V#t`fUDj;9+cbsO1I
z=lvlW9Z<ZUkilm?ABd>3;QPm*-3gI~FsRyhwOP&h=d=nu;7tw~x0w=pQ;1Eg2q8cx
ztEDcnfv9+${k+?DN&M{_d)r`)<L*G6h54daaDNg$Kecvw5ll7rXL%NYdW+ZdVGvZ!
z)w3MT4Y#s<PJ~$gdZG-2stKVKh^{Ia{8mGQ4%bjQqZhoW1fcHpvnPE+$vQ>^l!q|x
zSWR0c>10?L>F{4Uc`-bac)Js{Q9FpzJ4^gS6IxA$LGrJ<lStfcNsMcS3wQUXBn%4t
zo`F78Pf1GRH!S;^zRg4QhqTp4m0eDMD7=OCEHN{oqX(ciCm>f;+O(8>FU+#AwHoe_
z2c=d7STz0r6|9v??kie;^ETL<I;-ErAKZEKCcpB0c-PE7PS?0;{t0KD29`U{qpn4m
zLNoDZ5(9A;m~()_<dorS64f`{@wr3<ku51V&9o`|aV}x9k?d_uWWG$sHwPero`<Yx
zUNQxQrM6NzO~g)@P+qZjosTS{(kW2EH<G|Zdl{;$@ywwmrZE)vl}?|~z#X<5TvJPR
z4cF{<Yfk49)D&X{cAqMqtbV3B&dYP$XRDC)&i;jl1o}tDq-2GeP_+`dEOcPj`<>MU
zdQ42ft|7!8;-ace#)ezeJr#2w&n{69*to&iV?03A*%=hQH-LL!KAT$ya%`kewA(Vt
z8e-1z?U1N$G0(J!m<!kKxu^a(@}h&_!KoA-Vu4!K&LjrPoRFhcpn$k%$K7JIlEHGo
zM at V023uh462Lj800-|L-7#Z0o;I+b|75}-Ed|n^_a_zpJzn^Xg1)x6##nSL@%~gjv
zXNak}4V1-WOJZG<_Wjo8lA=5%tdcYw{&?WEnrmS58$&weu?j!HTG~(jM7e_Fp=7hS
zC;BV`OeBVXW3KH$;nvD`gWSDpf at WL(*;%V=Lv$)9Oedgrn=qnA8G94JDH&sNb)Y46
z#&XQJ`mn at DCByW-98np$!|WXEOJKa8)Y7S;XI41y+}?g<Tt1<SyV&&nB2TPB(8+dd
zJMYLph_z_M`J?Nc<jBC8yO(979=cayo`Tpo5K!>9g)Gl3(F^z;2*lN+?+3ayM(iO7
ziG_!loc_X25kebw^1 at eKbF!@|Osxp~5GU=S4Jr at CPZGFJ00`q`awuem819CnjfukQ
zz6HA^-|9w7sdS+3k;&Em8-B?lf60?Ljp5+AR~7&!e}m9ab~O)CWur*bZI_<r>23l!
z^yBcx45g4WT6)JGw1CVhqiN3^25)`yn7#f3#s6IxxK>-BO}GO$b(jSZ<A3;b(+6-=
z_S~*)-_*C(fVeQQn{h$~GU~^HJad3xFpZo0m(V(D45*Kndvbb!l7a+rp7;l(ie_Zj
zrChWut!nVTym-_Uj{ssSuT1My-<%gqI3d=b!H*$uFA+R;;NL#VC2#XQiIa`-!wO at 5
zu(i3wpQD1i={-MK9_}El73eT1dUWx1mn-B$LQ=4|)2t+UknA4gpnBTH4eS!&6rH*J
zT%vK5pcc(@iTT$_=Abm8IB(MvVdddxm|n=FM#wHNkbETStg0NZz4lb<gS+X{_7-&?
z8`Rl&;XNr%Eg!}v=GRWDlFE>A|DNQq2R~x)4}T`?3?#WZ=mmsS4BYHQa`?L(;`MMP
zn=-@|9EG6C#hwBVnO+KA!i8$PUgRIE0tBrhkfR~;1{U?o(g3)&up7RB%}o9^tc-S8
zg|wJAM=R|rcZIl&3SipA at C*OCvp6VX0p)mR;qoTe!B=F?Wk}ZhCZz(Jg?aXXYNO#T
zN{- at q)hjhaJg9~PMv^L*?isPYPrvWJd+Dw+_ZOjza{@6M^;HNs`k785t7AJMFEnkQ
zY~Bvl=Jw4yT&$*Ct4@(Sa&TM>5kG88`FMH(1B at b4Jr>AOipw(@KgGv_rFvi0UD$I@
zXfFS7q at 0%;h-n5<Jz0}-kK^xqqi;CM;{sYMiT$006%MB}{6h?@=CG&*<A7h>VXv3j
zH0^vf-l(9`I>{WA&4^~2^hq?;<D0vaiQ7ZR_#>RK;y2gci3v}XTn4Myq%79E*-E7W
zc9KLEVh6CpuG-Y-GlqKr71;voE?sc6{%CA9aQM+N|Cl8hI009!F1+M1Dg=P740~)n
zux8{iQv>hzMT~nti{^QF#<f$!<phf6iDIL8#h<C~n<tQv!8aAY>aaK}EB)h}_TD#1
z8!~Kw1i99ZUZ{%g0<{;O)Gotz*p}6h-oL?YFZzO*nX|g;t@`lS`SN!=;&m3mV}|cq
zZhzJ^ydp^P2?S{OthWSo%A;c2DnZXxBD;DiKIM`Fbk3zyv0>j=(HN5McIs$#qNQdQ
zcu#s?A%RRQ;Q(+74cU|Hn;+ at yqM344owbNDUMAHtGFILMm<hI>1#kLS^YO9VRQ*Sy
ze|U<s?KrzzL~%S0Yj~HSOpAZf6dK{1s8Y|smG4ykS3^(rO2fxNKo|5|WH24m;<f17
ztBfk7IPGrjNkOEkX0c@;2ndooLp_0?oYH7x+JL_bQ^=v2;Hq7*;8ZuiN6P%Tt($Iu
zH#!aeTC?=sf}`}|<?-dVfIv$;4+}+CooXSkI=CJ{sf=EyNem;>bTSk3sDYcQ^9G#L
zBAVU6#n8C{TN7dkN%*4M>%?u;ha$eAf2ql(xA#VYoR7fa3~iNg#JXEuFDuh1tAC#R
zSfzXdQ=#dn)M8 at ldLHpa(W44VNh&fK`X($A(cALrdme^^ReD$?_a9>3dC%t>S5CAt
zbPFi^UHk9hW60tjya(h&1OaJUn^>O9YHEketRL$Z-9QQ<_-R6`IC-PzT&-uukj!Pv
z=6qs|`wpB<>|(mxHP9q1LJzQ9wf~gCBX->@xbO(FK-M?U!LwlKz$U%)G-~nMUR~3L
z<J-LEH%No0oo9j#Y?f(e&@kZxo`cLm(F%{@T}eM)e27v2g(#a8avZ{y=Q&!!88;u^
zcDwt@^iO^M(a`Vb)kuAc){SHqn^vg1|G`2^7_}ARm5w9R*;i$Iz<ID;EL{NmOhgcZ
zhb?c7!tiEg=R$B{4m0{)oX>190nh}pwdfZ3oZhaQ6>Z(rN4aGk?8hD_D<KiDk1*4c
z(Vq_x&f6N9e at oy<lLhM=M7Wg&0rQ1zw*%o^TY&(H$x<N!DGJb?oubP at o;=3EYY9oY
zLJ$Q38twvA{g|TTMyc#uojymjvwDd5rFFFPQVdo#CLHdIRq2B^R1j-0Ji92_dXxYj
zq!3Yd6&FxVC9bIqjuJR5C_X49sdK9<bG6eOvO+CdQ&-luTr$Y*E}p$>3z`g0RdUr%
zR<Ockezj)dr2fBxZHl<bNfx?r<JTpbT$rsE+14FDWyFIX3CLCk%qLDP$wr8yvkSai
z++8Ze^WQIS0&&1q9l1q<5GI(6l_+Jeg?C9K^@z^~p#&NQ>j!uEOwBbDtGK8RbYUK3
z at 3+OZDM(-N1#Nq(6XJRF-;UW{V+L=*wcDeT>nZM$238=cBBi=)dne at lk^NCXz9MQU
zYba&XOsY#Ocim4t at i|CHm6nA<16ce#tnq(LjH6 at Qzw&fQ+=S^7^k;kijXJl3I~mqh
z6^5I{rW?i+4z*UM>5>;81h*d^6>7(roCCfcdQ?^nL<jC2Ben)mPszl@<(9-L at x<PP
zNc=PW)ogHP`b<|yjs9?VDItxM*JN8!V4oJ<Jq<Ax&4hiMZaKASTD+$LxLb1FP;Xu~
z9xMg**ubT1SyXX0DMq{@mqHJqsA at 1{BoyF?GF64r-)F~nHxb385@`?u6k-tk_S|YU
z<6(2tv1b%&afdSYaMHRAz43HuSV$+goQ`@&pdou?tFs2UH;n|j&XH`mdVs~BWEDA1
zzwc=r)ne#9U#g+$;kWOjj#(nFA_z0 at t76?Nh$IW`mD!hjt^((a1vWbOk3>Z{hs{J=
z$WFH=JYoNo{Y&@52Nb_>h9rwUuwRDI?DkLt0lp39{22IU$KRm~Z|mm#)_#{Gq)J|H
zRc~udq6)$j+!rWl<IRkdaI?W&t-m`Br~^?1sjL-+l?q4Vi-D7|*1N!qB-fZQYmkP{
z!8p*BRCO9+k-cgF;WFhG<N7Ob8OjU-^18BfM?C7TsA at DhXnr<tNbJS-uM=jDc)=JN
zXI>`befu86%d?F(ajnt+%DqD_V_w9y?|HX<oU5|RBcdk*Gr{ry#2NLzSI_Q|>U%^N
zI&|z0+tZBz at Ss4ePts76w-}G941x=D-$PvQ(h3PY^dd;byc8{wanjcOpf{4VP^3Ts
zHLO9%=p;Z&R&48~`);DYLy}t;XKDQstftU$d_1vr5`Df=nufq%Ef#}vf!=B)fMBAX
zWAIce!Zm_jilJ&?`6IY9u9sdg`^cA<!?R3-urSfax>r4R2!L>nwJs!h#`;Wnt$~Rm
zb8XuSQ!vU&;C#pjR?7Ha(wi=w!UF&z9<n<$xtc7mu<3$>MXjmN<vt at kl6KuwSLkj;
zk?T&v5Q%$RI1UxRJUV>E2%0k{m^C$T;eK&<O$z`Fu$kA(7uBd(3GaeX@#B(!!PM1h
zdRd(DWEx-fz`>uSW(c+L9m8u}N&lo2{E?})K^^sBAr4!WiK=W?qKzesvvDM6rv!&&
z?e7G>Vyj}wGg7I5LmERZQy;FQc^87-_#EG^Vt(4hfuyI^*5ZTwCdL#oN9t7LdS&12
z6K89D=mjOn{C75C%n=GjWZn_jCLTI*`l8<Qq85Ahnb?WsOZ^y%!XmAHjwJUco#IE2
zTM^q{B%cR;p5o31aX=YSBF(WKErE<d-M-2m%T_Puc;_d^PFuYA>^6BUAs8z?bMSAY
z;7%X^DA7C{PD>jHmefGTu&E9%DbGI0I^JlpDHgVem455ZQ|H76d4wQ)8 at wg-_?p+d
ziWLqMcWhB^4H)f_s8)J!4;yrS&C2U)LbGW0!sy^kmQ<oBRh*yv-Bv142~`)BvvZmO
ztUX0ZNB0e)zETiYsXzszx5FuO7_T6Of*SyLY(NVuL5=C4c48t at EuvDMZ3N--$?;+$
z(OEY^)QmVoMA9etVGX0yX(pxNXy>cAoCkhxk52{tEIjFVinojyLU*?PZgTfbiv6u)
zf+KO^UjnN4vkj*R*Q=?DeN1PMbC$MfiVVgBlj3PoSA_#oEei*GWE?V2i40*RAwRzi
zn<D-h%8cUdp{FQBO3yS%qTVq~V-oQm0~$p!ci6s53xG>HsZce8z4NIm!OmZ)6|rgQ
zx^YQHmIV)f24Sv&JEq{V&gwo#il8jDk(#kDlO^+Aq3A=rR1UW4)v}Dmf~mK84jC5r
zN?DbKAS4N&c8$KO+#^@d08NVJM7NkT^nh=CI|2>{ZunjCnWn0G_4#Z&F)B1(*P$V3
znGs6G2CQ5Xdd)JnFqNxm$;%11{o&%E1BI*4kt>5L$Ax=E_j<TXxoD-J%95`YhHbg4
z7GupXX#VUJK?e3 at tr-soJO(?^%SJhAfO6hipdApY{I;=$O2{mPGci_Bmb)?(tb)d;
zGQxgm{zC!_?D*YEIzD=osgyG)^1zzHq?D)wtKr>f<)!C8)6TCL+XD{|1bP{t+wmls
z68oUjylxdP4DmC3?~?7EbI(+xr5vSNA)YkCM1*;rJLBF8?et`Vq=^r`1izb%cU$kb
zhi7~xgy$<+IwH6FFneMYUXM+~@~ZGw!n<;F<&Ao#2agTCqLAB`ITLd*30cq*B^z2V
zW4H2wvJNW$RYsQEJ<3fE5vVZ|7m6}6U?T=KYU>9;Ct;Mvn}wTrq7OB*fCQR9Oj_nz
zajMGIKW!3>zO$1XpREL$xV(CaCjD@~V&ug3)N{g8ZRDpt`}uGA{n<l3im$If<N4Cy
z{yj0w;y_R5{^~nR5Om2rNQwnZn5Eju|HFxit+I<J#7+pt>-$g(cV+sCscmt4Z`6-R
zEIP{|Q*)5Z*L0l;!*LU!VmM6(y=QM6L{TqwU&WfV&`Ac9g_XW^nkRcg&3YfkS?u2N
z at pv#M___HNpC!>#MzRLS3zZDKa#KJ9MQINZ at 0IKj*)+HWMeh2fh<nZ<1|4Nc%xTCs
z>K0=HE3c$&1t!7;8`K#3L$34XjWgsrofl9S;5)|2N`7a#_0YBL8c6z&EeX5$zR=?j
zTa8N1tNfbXW$jo_!1C2vs|G7wOBUJzXIso*&B1GzD-*Pmfug&D$$Bhjo4gmImPeW+
zzxBY)YAn-hJ}VyY- at IRR<|1bSl*GJ8TKEfH<A+L{d2Ogws4KpIZ9mkVYEc2UnkenS
zbR=$L^teYdVp}B8A}tdRl`7i&LgD)6S+8$Dc!J-mpm(*B4Aud?2s*Z%tf*ieL?0|Y
zD!F2 at AH*~(!i|${rQ!OfI##lBvm;=s^nW8#Uy*W8uD;9hyXmtsp)PVgy>OeEL8ksp
zX#vRIBWibBi)t=VIr%zbRhe+*FU{P|Tj$8wLq)ji+Abck7pD(>JGZv*1kw?TJhCuA
z4=&6*V28J6A(b`y4WaA;7}ZLNX)NW0XP{RY1|Xp&&;0&jA}-zrRj&=iDK|lUniAg#
z`5pp8NMX0(g9tyVvw=4y=b)77xlx#}P0TSO>}u}KbJC;F{;Eu|w(~Sj=}2VLzTY8D
z+WcW?euRg2Z6$guXJezLCP0+X;s8;11wV|nj#I>u{$hHP-Y<4eTi=Ndx0QGE6TIag
zq^Hh3)`Aj4eVJ$?c at XT+?RJR2K}fTg*7hW?4yqcwtheL8EJZTGCgGu{M<hB4q~4WW
zr}lb?4sO=~V39*E<YeAFwEjNWHex5bd9rZT0Nhg12Mi-%`82Q5s1!f6%{(uMv`AN}
z!iRmW5!UsvXk|hfIY?a at UQ4ZvNHUuXrZl?g)=9^N(jBk~=#^NwViN{fVh+^oR^<uQ
z?<&Nuq>>MTyX;OOlyc<jr7`{v>-P-ctZ^`h&to5)MnwPve(H0A_N5D_r2Uoy-?EqA
zD9sbfOPZ$C*K31rH-Mtq^GD&XlSkS*HHB(G;QKbb*&Mu$j+pp$**p|LXDXIxiaHAg
z1m^zk3EB|)_=z>&+0s#>@=BLrAKXT7?Nu`}-WKg>=?w!p#d|6FY3XeCCUDO(wrLzP
zPCd=n?z~ck#@Gav6zqeS7;3P;@W>cRFG+a!=jL_lFyP_7E9&!>dqbT_vY%g}-#02s
zW%|Y;!VBsmv(+?G2)F7zF{)6IlaX)Cxv$9ip3 at T`i4Jyrf8{#SH}Mft<;gr&m}4Ql
z#GUT#Qx{+||FLoMOi^dmt#)ANjYnYWTtbXSToN}zitwk7a*$nM7qTtx{ChKS!-wUO
z-6r4{Bh^mK8^~KjjC>5O#6R+8B;e`UEBtN13Mmg)UoW8`#S at lX{zkm!m`YqEk71 at N
z3YGnG-=nHwS_apWgKMye(oWzC;Q~8=gSII>vFX;rEHsBcKCVy&87H66 at gug@O>k}9
zY7}-+#ut?#Aw$RKeB5>=V`dvMaJBr!h;&&D)OdTGjE9qiq)MhmQK?+p<GN<_9ZmIN
zfa^F73?Ial(d at nu4otyytAa4P9X{5ffLz7H2&WGclOy$<i{(5~Av;tUVVUseTJQ;$
ztA$gv&Oid86io?!`v-D62LBV86pF64d_pa&b-Km`8(^antsxWCEpS4W;|yF<NXTlc
z9eZQ#P8a`%-xrc4ynnm%@Qt)}gP8?(o!2c4P)ytohxTSoRb6uGVYfB)j&E85){)(C
zxgZUDVh-cht??1doH9drxrAAtK?wq6n=jYb2&yB at BBChJ*pA;8ohHX0HQlibE}bwy
z)-ksUFo{CE-xTtsHa9~jERXWdZP&}i9(c9fe-H;8@&I5D0xG`yo#34FT`m9npm49(
zY0?tyo`x**V2klhcEOF{>M0e%k(=GqWLum|vZ85nYz;`bXOS08i|Vo|$o<AaekSDG
z<Lrxuv88oH%`W at BU^90n2j%6p(tH{gwsUOb*vid>f-Slm(wrMl{Ff`Ap*^}%+^;2#
z+6K5$3FczLvKoi;^aLZMr_ at rf(R>}X{~*)Y={=Pc3P!;-y>y#ThDK_U;;wkAozc#$
zpFz5;Y>?Qy;kvzRFX<6yh+P}?@k@$AImsCbOK2`R!knZ}6tQ?5{Ob{Zsa8*Of8 at w@
zVH#_7+(99~JG-Tj3lz}D1NXf=yF4wkQF=VXb&MUfpw`|pd~+?ZqsgYmRcX69b?`BD
z53F>57L7G9j48LRFA&~}-CeeZE9i#`z+sJ7$ve+m>4 at k$vLqrzO<R4CQYSiMs4Lhl
z(-d;tqOU~mY at Jz=kDz9*SlR!2>$<z^pO15QY-ee#&-|_*635CK1D>RlEiMSEB?h)j
zIEE}oEk<ISmp)dsEeIoz;!c2cxg~RviZ2U at oyUy6{4Rlw$Ba&}vhg)WWiZ4|FCQ7M
zu7%%XhLbH-Ln%7)VBdIB18wA8p^1c(vN3<|!k<e?=ho1mi(4G6_Uo439Jq?(dX`|#
zMH|U9vD}G7`ooaDC(y6xwAjeOsE9K|O at mq(VT(!b5$o+(%gZX~BBrE3n(SVFRO~Po
z8jhW6dt*zt1nn<5kLp5#ESwu!2;c)nGIkjl_)W!$p5*g7F(Lw<dvJX1eK-CkUZeQa
zfXE`t$fMKc at G{b;->4ggxm6*I;-%uvt`ckZa27*R0bZLRXllrH4Nu~q&?*oKLZAq=
zE2zuVtn!5Jim?%<Il#1$qy*<*@Q^xx421+<f+R3&P6*aR)ns5q7KYUMa8tnwJ0p>-
zfjV1t{JJqe*oD9ot(JEdjtCI0OxZv>h~RtJ9j?uvXzGb05&9Xv*@fie5TZY%c1M-2
zPcfOJ{I#-YtCxma&7$LV6ME}ybgmWzls0T*Qz2T5c^rm;3 at jg?9_RD!;zN#>fsfT|
z9wjr<6shpZ$HD{iUYLekW(2l*PNJNg42^jo>zxlIoEAcy8N&9FLvCA>6O#)QllB1{
zb+hD8_*5xFp9>*AOHq0l3`bsgkq%!e$Vp&~%j-$_RX+eBB6Ei at Vs5x-op@&8RG)Nm
zz7}{u|LY%^seNk??@R at 3>IOq%(v!_FLAvjSX5|tgsjti{D4qc)*o_7wEMiu_FF=5{
zW`zn(b3idKM6~e@%e!H-d{B?sD7(`8s@}MG-fvUPnQ)km39X<u4&9<+o+)WaV;c3r
zSTM;IEPs3 at uk0{f1a8!Eg7r~BC}5~-Q3u=7($d6&w=E7<GD%t){glTMa$<s(Atl6!
z97^NWzUs@|RE0$I<e+x?wXDc1kV^VZh|gc|6Z3Uur-=Wq34b(sE}zYrsFfDQ?zfA+
zoXWKxuPkXPP8OU%hA+gGt%rdY%XtlXiJa|6n~E%IS6uYPWCK_ at R^9=~JwW~-Fx|9_
zJL3qKa5gCs5Q)0mW0sv&ky;8Q^I+(ZZ at W30bTiHv7!^zI*K+Mfz_~2EQ!TDMCp~x6
z!xw{h%2!_S`x`Qv8l55}Mf^v??Y-jQ_^2PFoKDZbuzC%RN1sHk*KAdKu&ARH4 at v>G
z!%kiO*1{I7H*fMc%63XYH!pq((GED^E0?@1PJL!<`IQ1}ufeG}!D_{fQOOn|Mtw5q
zXg|~a60st)_6nF#6gZw5coJdRK0D|Gd?B#x_Kg4Qi3MDC6~l>$lpz|<FFibq0n&LD
zVEeE%O<iPgCaP}Y55JTKrg?MrF>lH+JOOX0w|6P@$O$qc9HI{X${TJirzLs-UF0RO
zvS6%-CF&$F00-eL#rB!VzAphGe2F%OkI+b&uYZj(2!R5ODEb>=?FcwI36iQ at V_9X1
zVOG_RnW=0rMv^!ENlS}PHrxsr(r9j~&lDB+Fpu6b=RSI|>q~ITo*3 at EzccAg^yq5s
zF%j)^&kV`@Z~6#+oY*%!*0+dgsE)GwJ78rIW1neRaR!Wc#R`xCF|+mZsThmSGGtcd
zW5E=2pz~xR6G at K!bA%HF*aNoB^SwqbSDMH@<sTpThE<yArbP?A!66}<b_-cn#x6|P
z90RgJxf|udc!WNduZ_~(1x!RSe4$a}6762-(h)tZFByfaBe5|4QW84eLD>mKlfeQS
zzaJY<qUCPomH^7OVh0#5-sOy}a#Pl at RB~>a3xVO3J_#=0UUlE+Gr(2Y+5DW%#D^|^
zMkfVH(7n6+$WC}yvW*^k>o*xkTjA>e3 at 7o39$ERiTA`99w80UwrIPJu+z14gj~sJB
zCM%PA*3|QDpPBQ9>YCjl#97QL?_N*tDRLHmrBS9)bR>l199}d=t)J0c%I at E_RM_mG
znwi&Icc-%-%rJl?Ta=pY{NT(?N2*NmiMIQ11!todD!Llq-*0uK>t{QOS5jD<F2QfR
zuIP6W=8E$<f3Kfjg+2(Yxd`G1-GGH<0^9AKoH6C$=xJ$`QyPM}@-xlk2h&17LeR%F
zo?ek2WWoALVd at FY&5_s;c``W1{=v;tW2u_f;nFEh#Nn7nA*5akR}<Tc%ZGB_i>qmL
zPs9F+e!n!vusD*7sr$KknUUH25Z5xQp_eNhGMDgx$mI+>d`&N3jt)!>(CD)=X%H85
zz#63gH*-UU at B>UxaRm#9*+mL^+IGA at HV-bobMDU(IgX%n?coTd^&<i!ME?03Q_dg@
zYQT*@G9}#GMD(6hWf8s(xh(^U>0{>{$rBK0P(^5Jd>AigS|+3k4Sx9ca~bIv9CU~t
zj+VW>n>~Ia;`(SexwVL}w;dfU2g1sm$-`y{oXvLd)<BmiL0C004kDW-3tPq5pBBgQ
z-#Q;&Z2)?nv40PQ#21JO|Cix{tb)ITM3_e(;|o%+0a>9EJ?O+gsX}X2!`^A*F$Lbp
zGJbzN+)0I;_SC%bsjiRav#3k`9b2>I*dI1MRaPxoKqKOTd*4Ek at F=}(K^#Y?4-La4
zkMFe6>s_%H$z-Uu7JM#zX_OliCK76B=xnpn=K=693 at YWq=^0fd1-9yp;Ay70kn&22
z(FfSeS?Mb{k!2bY%04Qya24TP8%zI0{ns2LfY<JC&6(?GNIuKq&Ygh3Ps|+*MM{(|
zQhSI>Zgn4do}(j87e%7?Ik;TqoMYzmIS0YjkUn-ZW7+#J9N^zs{M1xX)?mB1FG?Wf
z=)6ylNJFY4-okRy_>;d?4p@<jh}yFx!l-+q+8CORrDexUYQ;+zq9^r|pbJ$=c&*+B
z^x4*a4Z`y}I(QxI91RK$alARHL3Inrq4jLZ_O~K5nwX;(o+6FwJ4>*n(Ylls!X1(Z
zRkWY1OcyCS1DI#N)@JTs^ff)5A-(?0$8MHEPsF-^H?%|%^s#;v(Lsc7gSI5i>%<$>
zq{21}^SzS!Phx+7$<0W3M6*~YZbY at i+*9Dio|XXEDFc*iEPJhCihMIKZ>~e=C=WL^
z&0nk;`7BX=<L+q7#Y{cm`|V1o$JGKe!pZ^Nlw9u2oc-iWEe}w&D-oPqF=zQay`F-E
zC1`ms^9$Rvkfy<PZWw39kWNjKp`5StN?Hsx8qp*+qfKJ^16-tTzm@|V{g at zHqstT%
z8vt>-z5kMPEQrhk#?Tm-Tpdo9%e}5)CDBcLeu2qVPNO_o5y>Z)eN##3iR)w%)uQMa
z<8*s*zOR`n&+Ljzo^yL`?ZsG2-8ok==?(%7cI`r}aZfUW0qHXwi{125uhAHbpo4b}
zjZBCbJ)^Ib=l{{zi*X0Bd1mklr%{!6 at ce-(%s_E2 at w4E{F&C4Eyi#=BuzB-t`^oC0
zVxo8Fvywa27H5SP5<wA2+eQi}mWe>6ocp4~Lw2)*cUpW{%HaP|5r0DCLn%6`#di{X
z+O9|-BfRk!v;xjI(x>FQF+7tBD%m3iX?%Q_37@?TdA}F9Bq`tdh0z>{3goI41*pie
z;3Rjx#wWY&@s at neD(f*XaDQX>E_{nUbd^F3B<OrMkegc_DfKRf;o$2Gkv<~ekacos
z(Mi8yhUr+XJM2ivz+Lu<lC$+lYucTQ7xLmP8ehR0mfjj7Qp-IQ9_6*YNFe)F^Hup^
zf5PZ2J)pCm%b at A>!<b1)+bcdNcXKBP0N$P@`{>agABV5<<5V<Z|8cnc2m$}hpttBy
zcmdiD%Q#uNqJDtwy|<a~oZ6pH0|saYUtM|oVRksOAWyM~bx!3=IOv+bDQO(uxhR=Y
zu-*oA<7)$~CspvE)3QmSZ3IwJ#t5X!lI_q)d;A1;52Xa_L&m`OS at 4P90UoA2afMRk
z3N^(vxDch#1ntPL>6a(>o}&#n;d+QX{U2jmaVi#LZ4kh8rnALETMXZ`fE!)Mwc8zw
z3zCJo<SPU#G6XL`DP!i%^;Rt;=_c>RTd8m~+ at wv?%jopjEZv$}{RYz}vrQ3Dh%S^V
zV~odq0p_re1mvi|g8f5#`#mhZ3y}DzgmG`YmT&f<yEtkLFoW=UOUhf4j?^!>6UWit
z<|}7 at L*JL!yK5yBZf|3qeUs{!V;lIy_7GrTzMzxp1ue%bH-{0p>OPNfYLtdp0f)hq
zVwrAfhSdF^^2ZPjFQkOfUX5k)Fm%tfDQHXv^wr;Brt!Y4K8LU1XLc8}V>IIZS7#bu
zY+qfaHmVku=@dOY_-jMhp-NLs#c>`sQXB;g6R=LjzdQI3QCJ`;nzH4V3??c3`#w!V
zI#ss*aeD4fPch3a@(+QJ=%o*M{fQj5f7yFvO{hbMR2Ebx49K7*PqSHAc9q(SYbVzT
zsSr+XIpo})k|C~~B}xLPSIW;>%x at T@hHwV)vCPfwZbKt)l8ZOI$lsri24z?}FsOI-
zD6I1oN}mG1r99xQ^R>qLdVV1DrybIQCsF-V7mLEXe1IvzJ{t5kry>Y$YVGl9c4c;e
z#Hu|)oTg%k(G)mt{g$N=pq5~Qa=GE|y>V&P<dLIJJs4s0vin#}>i0K9FuYQPOtvOE
zLA^EN2;5#&ntgrXU&i$Lbt_rd_E0dGQW%oH1PNKHFA~}nEU>+?Rnl&UOXsrk<}I1l
z(!Mc_qIuTkY3(}|WDnk`AApm*c94KwyPcz5%8LfF6qk=fmEv=1#BjEM`4u;Ouyfd7
zaVLkh<pylayI4NNB8;+oqS#{N<53O_!`3A at W<m6RBAFlyTn}GZaPFq3YaRKA!EoR!
zBEhDOql>&v+h{Y=<MA0RliAMr_>8gB&fA$EXdmzpEFV<wH=U^{@y at yRTj=W>GuF9E
zT2f`jVDVR`$6F>IQe5cX%WpFg04BdnPUpv9Lqs`qF at H2k#2f1;k(ZpR(_m0p5356+
z>QcH*E5C2|3u6L-kTyPg7czbF{YJFP8~H7JQU5<yi<QMrA7nk>B(aX=Q at 0*b2YH*6
z4HI+~ZmB&b;e4y;zffh03z0)y0>5|uKxoosEkQtaq3hVQ61R6YUANH4(oSv!aWlk!
z-KdM>vH*2RZgz}CKswYwvs%k=vXy&0ne}<kXQU~t_V<|hHZ=#rAaNQ#%xDJqY6vl=
zW|FTbQ>7;F%+MO%r*To)dg9BoN~wi at j>iC2#ULS*{;2>xK*GODG(wR~&o6EZk8%&7
z at vFL`uptg)JcJcN)}Fr83aAbvQF;bumaB~7K;r6^1SWQ&qLGdmcZEld8PKJeY36~;
zM2%fH4I}!Kkx9>XmFDaauV%uOu3nO{JA;k)64PxhuYp&KAkxb<J+^O$+d8`{8Gz<e
zAD%?#BkLDePo0)>?sYOgE9xl=t#~e6w}!AmZ2}xMJibhzP*nTcGwSigjDHLMwS9w-
z*P`$_>W{j-{VKG64e$D(cKvh37<-h5WD^K6Y4teP2 at vCD;1M6XHdcULEpID<>)p2r
zvv7epqg}X^h8fYN>Qdjk;&CgLHJX?@Jx0kk-AZa-dSoyGq|x2!yDjM_xJE!n2Sf%-
zl4h-F4;V`-(;k3Oqm at 30IT!eJU_?VxZm{1+vmG(Xhsh4MUx!u6c^7g@#8~BD?&=>g
zD>aCnP0|apTxN;a!XPZHRTW#}=GM+bbxXlk9q3k$Gg0HG1KYCwq>BmR&MY_^>7Nuw
z$M2N-DViP&)9~oZu$^n6w=o4Jvhk2SeB0b2hKJ0B_;Ou-`)duX60;)bVvnv=CODU(
z+qrpNIPn#3R;9;EhMC562kFe6c<-)N&>W20L3VdogNzCO=N_t6SF>pBqEXxOjwsH!
zK+d_|uk)g@(VAd$cxwV50jzWZcx>ZH<74R{Lt$Ar1G=nHAla{1#C}Z_Sr#-ss@#<(
zIKgrcz_}Fm!$Y`p at d>XN+!Fgdf2p>{Ww^V5b{hd<thYm_??0gS^5pczhAL7GtP)~3
z>J=EA-7N928I69hg2Y*aNby)#M^d=LKE-SW^&Kn3d4fo{VV}6xALdfVUD){CsFlV&
zR%J?ebzUcjeuRNTM23>(8q1|5SfLa)x!>_wzX%d|oz6H>?RXt{$M)Tj_XNV>I^!-2
zsjM{3W%`$|@T|x74G{kr5nzeXQq+FSNVda~5f<7Z-W$mgZ1c^{_O2nmjeBo2cibU#
zj05%m>d$zhZ&$-(2*muxcIo7T3b_)$&UCwqN|WI5j2AxJC<0f1o9pXI at t1tYCcZgR
zN50NVV4AAm0SL}ULd<;Q?F;Td&+f at ZYRn2+ejo&0scZ|KS$%zS5EDx_AJZt#Xq=1g
z%Lkr3jOD%!YQ4I1PLqwxPw(~Z)z;paoc5IP9 at yGri=1D(VsmZ4z&(gCH^c1}eray=
znAnA?HtaEP^^~Sx%f*W<7sCmbK(se;Y}!34s+i{T)_MI9QruXYCYv0By$c<G`FJ^p
z<-TA%tz4|^Un1cuK*hkrII?(t9e?y~&6H=cgAoncanqW0p0pnOchPV;-9T%pZS+pY
zMct<<e_I4a4DB7Xu9~~6QnHn1mh=c#HXCA-F8k<bKj?t5-<j%tlXP}86Byt%N_bl@
zY*F`DaMs1<jp9NSA4Ymsz at 5YG0NgatmGt#D16!tGsVMx{UGV-VS?is;cYhowz6qX9
zN<KJXhuCE7+!Lg#BnP|V*gJVtJjw5%e2e2e5 at me;K at l^pLBLCgcLY6ouYDTE-w%c1
zvc}L*S(&H&)OIQtLOZ3^2WM-VhF=9Ds|iY67JXfxqmq8VY*&LBXqT0rA9zo<^D0ea
z8p?58W<CA3opkJiDn{T|==g<h{+=gDsGjlwB}>Q#AK-#PZk#m>u-!0pctnS1m1NLi
z2-pWI6zG*n{8+>eo3ge0Ba&T?GxDh3Q^B+TPIHCbD%75S-<<|DIcsWVY~P<pGW>>6
z_OcymBF{7`43 at MO=8P&6zgXt8vQVS-K*Dr56gsHE>;Q(8rTrWFQi~acokM^H+B`Nk
zrqO}d_<(Y<U<xxv=)AVeR;`0C2=+)_kSi>QkHs(_JxUf98W`24la6%ui_oyMq-<3B
zcyJVYK;=^qpC!qTnu=yk5;lj$a5mbO+GZp8+xt86ky14`?8|2yOtNDd!tm2{omt!t
zVWoegMa})E9S at L7ywgm|Oc%=Q*EcC$VB(JSv0Z}I>@8E}V{0qNLe?$K%}~@-U3(=4
zH>wYVXf09QQsckUKgdJ9x4tJ=X>Wxggui8%?(t<qTnQ=`x&<EHLq2LYP@$bG6|O#`
z#QKH4f=}<ku5HoTnhGTM0n_Vk=z(<yKODuQfV9kib?g><!H&&K88UFctzVm-Lnc||
zyX|hm45*Fjg~iazGkN^LP at Z3t$L38D1>)Y9Amw<<d8XW=mnC!r2<0xuY^R<9K*OEL
zR8wZ?pXX}KP)$l~UF+*bsBi#97u63K4N_~5){TlnlfYPvcwN~NhuI(hsNw{=j_)wQ
zyW5ngy<2}bRf2VRRu`=gO_PIMm*2FD(<x2 at 8CmvT5V}qd at yzAa-Vb~$ZB6XFz$s8y
zd%a}b1N>gMVpsrk%TmjE1JJ{HGyInrHx9YykLa^KG?UCj4glZ>9ZSz_=$0(2o1)=F
z=&w)w^OezP_q4A_ZfypLUL|;YdBsybDo&$UmC={t1a=V%QTM at sJlKPbuNKLwhl;Ir
z&KHVVf5aXlq|fY${qyq9a6`Eftj=S!kEzN9J6yR^57b*L+~7{*i@&~kpQ`@N{rK(^
z+96^{c81^LZFk)vVq{;L;p5^&UJ*)ND9&FPH{q9`;jAef7=ybEV#n?m^@L)Xv1E3Z
z`T!@18Dlnq0E~~za!S!k?izJd7VK-=GOX*tZ at Wt9FRs<TiM=%Kh)m$?|I7l`n)LM8
zQ-BDs6WlC87=scAHzy9lMB_r~4StkeX%iyRlApCN(*WkmhS@!j9|o|x9>r%Cay7{d
zO`Z2hk6k4VH7cQW8x&7JU^x&wr&$T;nqM{wET!~IJoxEqY3+9bT9cNyZn_`Dseh-v
zd9`>(D__&SVl8qJn+oEV$S0{6tv9K4<605<DSi1dr7Wr9z~TIw5 at JUF_c|B+(aa4V
z73n1$RlJ08`;(ip6Zue>PxM%uFa<%L?4!cpl>bQpp}X~Xif@?h$MeV1jFDqyh<Ac$
zpRC5`0xR7ABzwTqo|9!^9pmM}#7B(;V|YL9Ks!?mD8n at v`x)DPnEy6QcK*`3nipBl
zvsfz`mq!pPq05 at vN|DfvhZ$%MiXEFN1-XTcf_?WJoFrZl3Jjjc422R>e%&Y!pZL2y
zVc$-ny^)B?j7PXN2oW7+X;fnEO2+Ew&Hn83?Fx#1*f!lv&5W%EeE*|{<g9j|e=jRu
z<mw>~eb%LL-JYZ)oqRaleriAPq*A^mTnoXyzfMN)QW$%sGgg_*y-x;K<8g&FN8?d8
zMfvp^&E2`A1wa8=DnMU-JBDs?c6^cjo|26rfSUaL8cw|}M?jUCnf~*{FIDLk<0PLE
z<ob&3Ui<^=6Vk;YYb!*qvERZoTIMA0lE0hI{S<y6o+Wh<sogl004F3(4bzQ_KWz`$
z62IPYN*h3S^)|5Vher>NhW?t28p&4ZrT)y}4m_}~*M1NTMXi!28r6I3WHu{~6T=-1
z5x|Qgz1ZCCq1jR8`L<$yjJ5hI|JFR}kUb0b=4}@Jf*5&Sh~pjo6R;02lIw|%|2a~p
z`*ZdNOcTI-EdH$6xIw$R$>ZJT<&rYfMZ@%@m^SIf_EVDo=g$00axf7wXLhBbSF4Ky
z?w>-m0X!1rIPxnE_)~+k#LEKBvTglHPK&_H%|X=fqAj{Ie)V=pjbxY0g~1j%16qEN
z3&#gI%`_0DzOQ&O{bKr*Vcq3t=7xe6*%ezwbX8+1LYa-htF5Z7RXj;xt~`|c?=?;e
za5iyF_kbpW_OcKai<_V1!Gy+4$Vi3Im`QJ`n)z2eBM!}yqW84fHNZ!wwfW^Oj4kf9
z=c<5U!T`4lrsnjKr}avF(0GDwJs$G7QNrnKen6V%t}$g&EFAm`gP>1L;~@`Bb}VJS
zIb)0d?<^Ct?!44sRSD`2Jre-<M1)0&ZOIC_jVu|vk&)@$(me>@E{E>OJX*o8X00`1
zrL|s%Wk6&J6iW-`TJyMv*B%_30p$n7P}vA{V^*j%ur#&X;sN^@eJ$m@|I-`&^N2#x
z_Zs9f>^Zuc at alS4Q!&A>0Q6=zSyHTMn_ at D-hQHQtIha>W*7e|khBsIRoN2yZ?kme0
zzKIBj!;7I#oONC(RPWz9)4hTfD>jUKtPcC9KRqwqJuR%$&lNCjuO0L;P81nEs*7d<
zT|6y)9&Ecr2F`qjC)p(Okt0#Pf@?B84`Y;qzWiIyQz<d at S7YPpYF-M+rPlMJ(x3s9
z6=LB_HBvkZdam9#f`G8}=rr05pE-id2L(Mx at 9Sa48Tw6)t4lYA0QIRdwTIz+yDqN&
z#4@`r1`D64dYj#`yo&)9bZIE_yD+H>Hu|G)$S)AwpI_>!*K(l`<f&6Y0 at V{PcUT11
z`N5W~ef)ptD31PYrf71`Mp0~Oc10OZAngpZ?y-3OWbEXSH9f%*)#bdo(kjtayQ at Mi
z+Kh&&rVpP>lSPx-{b^9Kn`&WJmb!uFWjTuc22w#1$cX+^!ZrgR+S$0rrJUfab4RGZ
zRsK;I%Qmv5kRVbM{p$b!fR_-HoZlTFKH(87ol%H{q%y|Su%!qE3T#&f=hc0npu9ov
zVMY}u`!bUvlae*}pKvMOtc at Qu$1}R9Q5d`eMV}-beL~d&_a4!4uCb#0P*QI-_I#8e
z$NS0xMR&X#0xR0{lqH%cQlprSklQOMUSXPg7Y&5;TCBt-pv4wij09$SXaQJE{IJxO
zQX(S-pSnh#jp0ElBwM?whtBS$sAuGuDgzy{O3o9&q-UW>P2l!`)LGI4ZegH0Z|AMr
z>NmKwlA}i_VHD<caRC>Q|F at A68W&%u$P+k_Zs9lEUNek#hrx9I(%^Wg^1tCryp`Tr
z=!dXAjYXz1i69FMZ=^_8xv at lf8AZ;MUM=2DQ4&Fo5%T;hGPk_NaRqP7r+|Igr0jk3
zQIXB!g1(dh*uoZ6^SlP?!~@Fs7ym_R`56v(_f5sUz*=M0Oe3_`EM8U9A}h4%-g4+K
zM?7VT{nVWlF5l9t8wqdA9CeM)a$Q*&=({bRKd=biY=<6^^~8)ZJV^v>`uv1AvU(sX
zuj*yAKfgqMgR at W|MDv*x4x+pncNj^5!Bx{{`1x$!hSXUg&mR`SL=ych866#aZ(JBM
z=E)^v3N28OK1u_mH_t#t8KVA9|KzjAUOyRch=qWUKoa*50j;Yy6$S9)Zo76OnSg;G
zJqT~p5R^(zq~i<KSW2vyOObjN34avDoNtW_o5P)t|L_sCgDJ3Cc*;%UT*KLVmx6Gt
zIYqbmoYA>`GD%>e9i|+AShT&@drm%(L!cg(B{#^gA~tRp)1v+XJ;+`1Y|%$*YT?*F
zFD%?aQh6Bi74Ti__cJmw*V=aK<vL;`<5#R1+95XQ5TZ;#weqt3Sf#K%^Sh<RVbG9>
z7p2yNWm(Q#hRULI%!e$^LCc|011Sy~OMgiAs38(SLDdG~jE5F~5>k`liF8Mdaj7J;
z!4tc;hQB!FRE{O at EU8Hdw1Oihp^6~7KYONz>kd3Wn$yAu7mqK$I&@4CmLD|shW+f+
zL8XvqDTrfCVsfAPG4Ol^_1}!!l+H*AZ5yHUgxX>#XD+)<hs7(b$^<7dKhyrZ`Q{mD
z at UC1&exJpz0vZCQ-x>UVxd?jTF1Sr9N`xWQMGymsUKhg+v_b~L46Tn5xDe)~Fw^NB
zQY)BHGkqm1H#l8abHkIYqVerj`0a{`C!j0FDaN=Bo+jtQOTsqX3I!qZxgfGmEXmBl
z<L~a3=93YC2G}Js2Sh$78l2j{9QsAuYZ{AmJIeC0>&|5BY{ihk_~K1 at OFb322vjX=
z&ccr2Z$soo8AIJEmU;nf^^<7pl0N8*Oj<W_eZDLy0eR6}Wn!@g#G8VC0RzhAOMBL`
zf?0#l;Y}h8BQpWiySbGS>B>{!2JiBep{vX}fYfQRkyQ`+><9H7#?C&Yldwzl!3%w3
z+IUSpJj&CT6+*f^&M>?A;CZH;lk0?1&DRTBeDp!S0{u9T+zwDp*qMxeyt+t(ZZb+z
z2|9ETF)h0U3C5xqj at eU5w0ndfI-P41DmulE?aXK8ICTNrrcv^xwK3Gh>yd8+e&yLO
zya6X>T at k%M9f~aaSj?Fl?17moPU|E6z0k1UlPdhCAR7CI`;ifQ;W^Fq$af~)bifw7
zEA$dwm!Y(_QD-xcd0<6Dx(yY6+c^~ufs`{22(Mnfj8<{6+<=L})gLik8T}tpGN;1w
zJZ)HF;F+>!(abZJ1^;v&CQa{OQ-WX~O_Af!@hn{bDgZufvxscePD`1$i}->j(LAGv
zO at 4TMzRp{din+19B2Mb6Sy9NuW-0D`5q00@)a`KT3T%86i|enr+Y|L^4Ce>Vqw#bY
zABgvd?6lfW!{bR2T^pwx&xVKvRHee7Bmr)^J~H?bU?r;F8>?DuoEDX?`^-7H_ULm(
zl76LQ=<r45K%GRIqIHgramK;wrOHf1c;NofC)m{W$q&@;u4{v9-Tz`ItLqaJ*`n(v
z`emQs{{0GwBhV9LB at _u1XhmG(9KB1cD(EOl{yqMW3L=A&9ch9P3&27aBOGpKxP#eu
zG)3A`%()h?I_yIKJ*uS)gR<a~!e%99(#u=Gm>rJjCo_(7oVUhFrYJ16ea;_z4?%;A
z%K#tbv_y{_DWQL*Mcfk%dgG;&Hz-r)fb8Z9yBy?Ae=f}tz)!re76?;GJidD%>Ao11
zt1LR`yp7-#d!fXic1!MVHs<WKp1$_!Qu$zjD)`wOFn$dj9xM=at>`X~Be2*?);P}q
zbp^=iwxq?NQpB?C))vHlTFw{9o$W#bnGkD!Gh+P-uPo_wfwsnitUA97G42j=PFK5u
z#yHauwJ@)!i#hnb=l}FRVj~+iyR6gN-sY2sTxEWWCMZ}H72=%53A5u~nOAJSjQR at 4
zUvW=Hq173rBxuc0eIyr6qFT{4-|%a|9}5b^T>1htXO+jx!_q_FHxvtgA14wcUYu6W
z6Ff-fX87f7N}r#)s$aAZ(N4jIy~SWc-L*7^5=MwA#QOclm;+&-c9~nKQCE|_=N>+L
zx$QJb?)E23=1FB$>=Gx-QHnDjTrS1XL2z+Wab<{usW3<u;MrY3AC6LjHE=8f+h+s6
zK>DxQ<1L~!cYW!y&%!Q8z#wRG5)7&~fu(XVkmMmKR_FTvlaU01Q3xwyp8IjORPo7s
zg=10{hp}P$ZN#rgWu*anu}n3kN7W&ylpu#V6LfKY^fzb&n+fAeenNZ3_i|7!IqzTh
zC>XLI|4%HeVR=yW_26}kCt>SP6imZOU#}8`wW0J}^kGccPa0O at eQ=Z#@x<WS_vyJz
z6M|#y4VcEeoi1)gT8i(e=bh?d*}z)eo`-}yf4C*Rmsv5EhjRy6u-yDJf;td%WK$+l
zR~+&nJo&BKTGqma32N9BKWd95ehWIa2PR38KMn8%TJco~0QNf1k?E~<bwrHJ%T!`0
z?Tn|!s!;K$m#zDC^%7rfD$Fg)sIzmAIOZ1!V&t+GRwDiK)lCJLkGQFSR>9yfjU>gO
zzf4H%ceR>B2M*(BS3M8Q=&?~8-C-$N9{sR8YjRom1-Mv11!&x!3G3;i<(!KzBKgJp
zMz5r^E*&3YDZ>*esBe>k5J)-)q<^B}mBjO|B{%OZxC;$9K*z(LObka?0)CSA3=Zd9
z4cf~!3~=%m(jsBa*5TIn*^k)4U}d!QqW at Cuo`Dw+N9a%^h#;>bEn4$?tHdK0@|M at J
z<O6}zsEvYfnC)TmZ?epwJUtGh1n|PS!&okEg&~k<R$!5P2Z3_&FHmIG_)<nqzndP0
zq+<l-SG#9BB90YeLv&|dux|=<@_OC9dAF*1aB-22_^^V6qz<Z}LYp$EZBuQ{3}FW5
zaAfxS)HljX?7Uk-HMB}*uJV~y2_ at G$*zK<puhi%c2Ys1WpE!zY?oi}fZDqb*YDh}T
zh;=Y|^FPnKh*?K`il?S*o#>bG3`JLee-27G`}+6}L at hbd%^%vz(ly9_q9O)M)b}eD
z8PP1u?#+R@`?6{Zde}6LZICA0OSFxCz9v2uNA+SZ at c06tM<?eLqWCAm)^~Pm^0ghi
zWihroG9k6*QXcIF!k at 3s<L_Q%=}5q}Y1|OirOl$d$;_!=iO-R#2URy-<(DV~NSx#{
z6&YnMFd*hn<CYh?jow`MS$=ml`!goi6VL$NO!=&kBV%c%KPi0lfOq<X-SO6|lQRz0
zP&_ZpF6ERdj`R at p%xqJRr6lL4jrLV_<~n4HCwlY0#4+>oD9lhLUl at yf?s@^jZeZ?V
zrj~xt)_W6;0+V-Xj)|Yaq=!G_LDGnpg5e6HK<6SgRP at jrL23;d82(Y_Jwr()HH)c?
zUtA#Me8iWupF+Drv+%b-Xl6sRLhc0UUBI&%2Z#=+3iCS_l5)M!*SFLg#o9w=(wd at 2
z2+s_0p$Zj=P&EA4*6pgIZx-{MQh at NCwFN@h6P3jUs<4)I9r^}>biPb<f+|9$*$Ci^
z{B)C~FRUO8-!{vX`0t)r>gN!ns4fb|IwY53KiBa%P?6ao2&CgsxTl_c4MXi%EvOQF
zxBI^LOgUd~)v3o{=D>S at SLHvfonbyo&#D{xm_ObzqX>SU+jgXAAvY3L5yC2#Wf{~k
zV^BcwcRu-ZuRz+8yYksyGsJ?3ixgT6S%A*XUHLOC!U_r6qNqXh`aA$#he=Y06k(rI
zb2$2_^!C>n28Le6x0e4Qu##1u19^Xe{H}p4g)q?1poRv at WC80Y92XSsqHBAN{y{pY
z35Q>f9>PdJlt_t*??6ZmK>9Mvqz+T{(!y=e0w;jj!FF;gr~T;%a5o;Zuw>_6EIzE6
zyPd;-j>RXb43n`e9VTfwPb;1OfH7Z{rhgwO%7i;;={jQC5U#76UGB8|3)tIUY}?>A
zhS=YDr6OGNDv`|l#fZ`h(a)2eJq3W at C>p{Lxzwm=nFQQ1pJ#L_{%;*QDk-`q4ov}o
zwjcTon$~{t-JN6#XkTJ&;SfsCy-^UiO^To}Y9$O+*5j0PjS?*1kN~9E;Y8Q`cB(^E
zcr7ZlWkELm-W?Sz at b<`B$K}%g0(7zde;kiG_=82N#z&Q=6Ae5%hP%69;Q4HK?Dr0!
z<sVPCRrveF?mgj{<&)hSwJ2VGClB0ZK&Dbde;hddsmdhtPn6ZDaC(9XfNDs5pAL1{
zfmD@=l~3!X2!Sh>o?uQdxpW`Yfv`<FsNx#W at MXfkyF>zL`001=E8a6KpZ;C3!wj!T
z=PRr8YG71xHZfjrsL(<&-}^_zOW_PmN-ma}D*%^7zU`4jRl$V<psg6p1jJLPH-=>E
zcfXZ%J9sTJ;`m~&3q;fjW}P|IR~iPTY5`?Y4>1_|Y^eATDxKu`4-?fao&JZ)oI+3Y
zgDx;MXl6*4TD`=${^Z)2kXs15wCMg=#2Td?;OdvS5HI#OxdW>nq|U-cFj4Oi!p%^2
zN=sUpZ4{%!tv1}ykwdml?~#)4gGSAIfIBy-)J9<<aE=>YeyD}W{wkOfI^tw;lt0%g
zrh)9GSt!Ru8>97<SN22M=6;jUyGFor2wdK369UmdVd#_^4Hz5TK7QIlS|T(JI*uh+
z;jVK+SSIBEVBJ$g?Gm`r8XvOnOx3Hl3+C;#1q>64;LDhiWUa94Sb9NW`y1zc@?o?w
zO(Iarefp-aVPr3Xn~vemuUzXy<owu0>!1h6<D;gKG9T%U_~uz<-BbHK3)C0dE}S-7
zW(m!BPJUqxh%#a59haqeq6CypWAEh=+>S_=c+UqSivbDPAM-bzvt#`f&8Et3;Q9iJ
z{pm)uW}A5~j;N}o+YG`*EY0{n3YHtCU at Ie%8Qa+pCZ>#$Op}E1=YbE at I`n5C-ky=t
z$W0c;^cEorc|@M<w;0;u*P{b;ACIOBNcX8^J|#{cY1z7AfK(^_<)|Qn4FFblC(m1y
zw17sOIhsWCSPun<fEx at nvaBDlX7jaZubA1-nZ?&J;C0<KryULQ>x$zg6C#AS0CMpI
z!3Xkv{9<U~o&NJXV;s at ScQ~*An9T?cStbjwrpibjZHOygQm)I3SoTxrP0q at Fik;TH
z7)1fEjlO*1vjo!GdOaP#^3ohB=+M#pnr4XAS!UaZGTSHkx3L<x$3ybd?>blJ0~`Bd
zpU;=<7$vGWkM=6FCH$2b8H&x-Eu~dAtKjKuyENtl5aWMHv&s9Eu<IWYU2tid#5!xL
z*nS?IM#HRN_bO_%JFH**kwqx?mxWAlP3>VZf;zG=R=IxIW`x4*n0JXW#ZkB!_=csb
zimkT5$!|lES$;{PzQzjfHSR*Q`b{5#xJf~m at 9V3h5mH?fjPTKU2loFopEIhxa-E5A
z;j+BAcpIF+!$Gq3jT8crj<x~5g#W4?t{=}fIZ0AV{u4hg-S!E+7{><>6Eh{^h+(kj
z+utC7-a%i_CU^`i(p_D}RZcmJ9=~nq7I#Zu>^{b{KDSi`?~nWCVpZlHr`g at y9l!X0
zbqY9Z1gQu`AYd$idz1!c%F<MjQ0nBmYw!^<f!T*GG~8>!D-e5b7+h|HNm>Q;brh|h
z&KNBm;t`3BDpiIgH)u-~(wDK6E|RlFeee$2!#y at cFdLs0e~?3*yO-yjb(SBhy;zl(
zIpaW at w>8nUTu5EJ4)f2Kf71{0=R6(aa0x149A~_*R-ALmga`lr5XdcXemwjx<dDiO
zz!nvxj;pK_E#R&vo-&O_i}hmH+y*&8$3a at zAom>!#t?G-yVXekERZR0?5~A>DIyw}
zgwE1eWBG!K7{EPQHT5AB*i9(pw#)`ROVSvxWu`G4YfqBe0z3XzZ^y)TekxnfpB+h-
z>_opXlu>K)R%uHW966_B3{t-_Hrm%!wy$4qtdbBA7f*Q~0a+$?!Sa9sek7P6w1}z+
zHPQcCm~8{<r$ld=`6liwV*1ilkS%@Wq>305+z`Jq9U;|&a_9&l^2|HEFztP1 at J`B{
z5)tQH at tMp0W_EN@FOj}_)ZF{=ZEr)n`VM{#&?<L$ZRz~pX4y^{eaji#FH)MJOvSTF
zY2Bo(YR7|O<?N1fnOj|JUvnM!qx_1+`5G3SM?o!o_2rFHzZxKT`v=l4 at pBpMr!x#Q
z`^sp<gN-x$6Y>zl0jVk{`?RnEA9)v7>+NyepgZX!>7zR;ft!fq0hnt|w!;$8gN0k?
zdZIg?On5$(?j4^tk9^87T(iWq&BW-7dL;+aiQ#TtEppZ#Emrw>^RYgnMqWmeczVh=
zb8ggRHF4cxJ`P>UZA4$!&bZ`205V)V8CB%}bb|Eu$n$XrbzQPUrFxOz?whuLtd<&F
zZcK|JZR1WiQy0Psf$9nwwTod;$eH8bUCR2VI#>IMQQvG1M2qO at u$*lh>O;GjH?;|s
z?!*%_^Y2jN<r0b=gQDizG=MW{>8Btn4qvMG)ITr7ppfOKZWmuwCNZz(03&-XBh1}8
zNrU=NVraTAa|{F|tgcDKjH=o#S`A~bYliPKRALxFG7oC26Xv74$9HE$Y%~ZZc2xJo
zCf(&yQjL`b-`8&)*dU`m<`PozW)6Z{-#&fH6;gGl at DC)Rg}4fipaQ?_5HC5a9+8Aj
z9|asUFp>N*q~`bX-}6ZTn9769PKy1_!PBaRPmi|-xcflrwrORR2<MY^t$lRsJ+BH#
zn2Wg)LH6aW?Lq|^z}{dR;1YXp<OrVYIIk$p7XQ%G<@fpnF!sbSF!(CE9sRL4dbM^m
zS;T1<&~UC&WfpweHhe5UosZRbT`ZL5Pd?&@c5CKI=6(8?BZ?TZ3a}W6J`dixa7h2S
z{P^j=DFqanCoK6L?y0SH+?`c-Bit8))@%h%gaivD^0a6{?;lrCpGItBFK1>&ezH}<
zgF0Y0r3b;D$NAk}b^h^`BK_!s=7;3dP at ABYYA_4-<eO8!u&w}OFDo)EdEVm*?}5R}
zcBoS>vC_d;8SQVYA2`#G%-nRWm{BckFPXj3CMZFt+|i`j0Cb%pGD+HH&>c5`n=D5Z
zEf*_DQJI6eD1Pw&-jszT76WVQFQ{Oo6VX~T?1<ZxKE<sLhbqunGWwx5y%mi#AX|>W
zuou1NKgcxXX4kOAE=$Jl<J$iX08B|6Wt&GF3E;ixFXLfjo)|u=4s)bKOSchaek_Tf
zYXmUqoI$va7D1l!&;ZWH5;M>)k#5gG*t|cq9~_G9izYiXkPn-laByOy=T;rIIKrai
zYy%PXB->SKxgCzmXf+S9BHRZryMK?cCBlgXv|1xH^ASy4nIBKWaHaKHbZQML?{Cid
zEzOr4G{#Bvl8Tk5f>kS_1DhF)26$)0%wrYpDWL=oM?(>Tus3IVHqYgosoPbJ_rz7X
z%?CUmiH!s{ZK2QKrvoL7j86Iu3H_UaoF_yClkK=bF3)Yr;NT7|NZbRS1v(HhCqy8f
zkQ9WSg2%z|KxR30T+s6A$`+T{72#D0RjbPrVhGz79|efynS>~}zRx%qNY13-kJ#V2
znm!S70K6J?q4X4SLp{U2he#Eteymc0+1TvmYxI1=jqoC`>TOSOiq)QH at A|#1QzBPC
z!;H*Ht1Y69L%Z!yYy3rRjhL8`CXwN!6Xro7)8{?-zmtr!rafyIImB%B-*Jb}TPR|{
zlLA3~$Z&LclVzqh+Y#e9!;m<cY9M<@Vs<pa%;uSD3+9e1noq;r(NC&Q$;ZJ<YU^Ml
zjFQB>#5(y8yu5t!4k3uW!@6uUVODxOiv%zBZe&r0Jjm(-4$jJQ(g2<;MRNtyO~3|}
zL<`@ul_^V*B;TeFGQ%3larT;;NuORIf}TGSY~XgwKfP+UG|rezbEo3;;gShKe^+-a
zFfxz+>HAZLLsIK47!DE{T+tlC6VC7A44u!;+97%{n~+300qtNN7)P1ceZ~YN7;ueT
zH#U|uJtSEjYfiLm#nb~L%N)no`ADig`e5B7Wc9Dh{6QoRdb_kTW=y)mZwA<%ssdba
zpA&4i;$-<ya(^nH&lFnOq|<rqgi(ce at YnY$C5FPDDA&oz_TN{eJKHtO$pe6nNYewG
zC!EVwnkv2+<Zf>iVe^5r+3GB3E~bxwzT$i1mjRra*oR<uc8Ca0v46f=dG7U55jE|~
ze6?=4x`p%6xKc;U*$M6`*j(~f{~{SO8~QqpOPH&j6C1HL|D!vqD&vFnjpy)zBDh6l
zIoM|f1zIh3y3>mzv1Jz=l~Ov}LVeayi5m`QI&e_<r0;2O26V(9n~6dgI79P-vk%ng
zn|YG at 98Ki)BObxz!<&+hDrXWTpzuC3@>RZkfHm4dr!CUiF4Lhguw+--DhoiY8$FyK
ztK8<!3MuY7yZSZ16Kh-R$^bVjV9<<qt_I%uRP%`^?+KgD$^vk7C!a#vi^gZ-!Xi7N
zrJDc5{lR!@#`~uLdb1DjdD08%g at -be5Xg;o=RIr7cOL~_P{TdFou-gth~UR`$%MPC
ztO#L#fEiRNE#aYf^M{-ACk@{*#+^|1>YBvP^S1s|3>6Oy<zKzNRFhkw0)E|`mN?J?
zqz at 8(>wl7RDGArEW;}IjwXGX!Cw&_n;VA}%JKuLM^dD={P`3j2dDVlJ(HF at Z>~e&7
z`q@|8?px(!)sPlbvUy}}-^+1&Et57I{Gd=kxCVZW$~}5#4}CZoLS$F{x|<hc;9#L|
z({<^m#1k at _Zmr2fkR*3?`1#{ASvu8ym}=8sU-CRZ++t#2*E$UqC(KKq*_4<F`*`|*
zj_({(egGkuUXiK#+5T65v38|tg2o!l^NFc~`Zs_IwVr%o<Vmx*s?_ja7ZltAop*a_
zL<DqG7;+=n;x0hd_{Byh$3^C59K<0D3l2Skn}d6Vx4!f<TC6Iht;1z5<GG_+LNGjE
zx#)hSOU3<}xgN>hlh=)$(t#6g`$=N&=|_!T&2;zL{S-66rjoO4Jvnu1MEjoOAIv`A
zX;1;vJ$&E$2)>BNX;*!M*45CQNm~+jt*C_uW9Ea{!=nl9^Hf+{>dP?V8l<#zJ2}-W
zn_AAA^DofN`){_xBxnJu9 at fM)pwuxf-ho=4Umj-%&ETQC_9DJ4%U($UEHaL1K2~3!
z9lWbsHrJ*CPvD64H1{SYk)!nI$W2o^)_xc#e$J#dA-UD~Z4?T at 7!|wbuR(HHDVQu6
zOpDs5o~c-Fvy}M;6WDEWaFS_*@U`G6zB)0kZ2tKuNC(yrI++twAsddg2YY*T^Ou~P
z8oaM+vsoV(I>%7hY=gU<wULLDB(*ksF=F!LB%sn<fgzpLhVPC$AyAO(Y4d1|r&W70
zQc%?Y{ziQ{*JZRm>0kD&7a+heMIgL+S!pLtLKDE<@(nP#jCaWtVDz(|QEnDYh~c%T
z*n<HU8iaOf5uJAmdq7sU$hB-0zrE>4e9Y|c5P3+%^P&;W7HcTBiPhm(Lj at nKHvW$D
zB3B~@DpwO75Y}hx9scQGbIc;``zJY1gSBx!sR=Dajajj3QbN4&no~8LZFDlGkgPd`
zaGgdEo0Yv}I*tmmsh4_eS0^}$b2J=W-NC}oXP``%E%>7|*eHniYLGE5Kbj<6?OrXj
z?gF^je6*k{jdVH#R_CkFTkTvzBG1dH{@0Pl+4NG1*7}|U;CYq%mFM*OX`)O`0H?5y
zkjF?c_}pb`8?{JOMyx!QL%}k?Qq`e{q(NC1FjH$Qmw<<?{T?yAyYj>L`pElG=0<q%
z+K?BuAJvHPr4C>t6eKwA0aPrqMydn4GU-eOt2i~p{$*Rh-ijuciJ^H{ef4i1Gz&J8
ziqR?>m0*Pth&+oxLx9L-WE7z0vA=&@$WG9e%Y18mfCOsRNBzbC!#9C-cqxU<-^H*!
zHhsWR at s@_xeXst<y4!%;m-J%h2mEKmexKeyd20D|ER;Y-6Zf{$HJSN$+d+XF11`v_
zYicxSdp$z}_x5C at 2JQEdrZ<e9hH~MJtJ$QZ+F#vMDa)^M2Euqd&N7Yc%=V}}z$;vV
z_n9m8>c+Q_TM^vu@;8g0frx~Ceh~jX;W3pC6Rk(d!z_+Ej|AA4b?S1uh;Me%w{OfE
z)jz*}u?)eioJfo(f*HeQy~%<u at 4az#mLSrJD`6LZ%GukSrrhq^5PseUkgF{&Wy1e)
z94aRW5Kg`0HWS`FeNG8lG^h_VS9(!hk-}6jNQK9fGsd&lI;{nJ`yaeJ7}El8jH?r&
zWh<9 at t!e*o at a&0SaI`%jo!+PL4D$>Mv)XY64jHTR-`1LcRYB1soLzqMst)AH at iu6H
zlAiY-xzivQ$9`q6scL#LF2`iFxWjk_0M%V_Cybb7?UiB<xNxd|8aoeP(K+d{Fj;T(
z(OCwbaUeetFC9!5eI<mJ6^;td_63quK5~VBZ3MfZNAMn#59d>R at ZcR+?;O?9g$&jl
zo2Fk3T|+hgc<q$sTU2~@?FY=h6bqfe*c)-=0H_gd7%hAzp)cEa;tnbn{l`@CCnKq9
zFsTjF++wKt?;Lw=x at rB{+S`QqSLR(mAS at l5MNI`>M at JnILJ=skJg1zD)$&rvi&NT7
zUNVVP(1$lCP%Bb=0I{qT&q2uxYzfc^pS+&?keg3w7iZOcPD}V{^K4F+TA(y9!6&X%
z8(Gd6=4S<dzO~J473V)Ww at nzG88{{`Z7<B-W)$mM-cI#kt?@KH6he+i+DGDs-a;-=
zn5ki+%zqivCZTNtEEFvV71}PJ7eFsqU|)9e>|m7J%CGTS0+qltj0OhV`81dD{0Wow
z<=nm1ssh^C6FVkrl<71`vd4Q*+;}=-uLP4&&XmsE>nUJ(OPIjDd_RV~{zjjHZxh)T
zq}$P-K^2vr-nx@)YqII4Z at awST^$@rC#(an3@!};+&vQSJL^1a)h`u5BE!uD-GP<U
zqgQi|5rPT7 at -xqnC;Xbu&tDvn`GekYx88w#T#tS at 9GxQb_C$sxQgqBZDjjg<{2|>i
zYM at gY;!<DhjRElFMJ<Ratlq*V2EyC&PefqUd|kfkW at Oz6*MJ?s30%QqHXcXUOsl3M
z;Pn~extxf-G%CxMv;ot^7zvTWPg9yM?4LL+sAjv=BU_pYOiUOGLp5mr=KdYXYI9&6
zvg{$e!jo7)rV`phclH at l&5+c}fX6+5SOxXv-i6a=8g7TVA3umW&7Ez`eUCp^qvA=<
z)C<zdSELThX%Oq-D-jxuIuiyOIB_fOqEB%Mmbe8J%w)A{Z}<!u!&d-ipcMt1VWGxx
zm+MhSVhCte3QFNRI#b4fVg at Qf(P%hw*RyL7Mleo?_+7b<qXjgyRtT}_RH3Tos>)-5
z=fZ5Wme8&u6ySrMmimSRv~J>`9`xRrXZ{LKo!iJKk%>sgA}J`l;y13U%zhoC1sq**
z1l=ar>m?H!Zb*ZEa}YBy-<WqE5^cmzx=X+ZFg=wky3?y-4mV{G3BDOyLD^9aBSUHI
zm~wL$DiMF^;NA1k4+xX??QqLp-?>4 at mS7#8Ek;WSA0Wwp?W4ms=(M<{S(#hf*S6jF
zFB5fu8Wm$+t!{Tof9AvB!@_eWkLi*@&I5v{J_zUrc;Q8NpcR}0&2Gq?tcCm(pbWgk
zk~?@yOQXBzHJuJED2Tr{q*naSz{Q)fj9-hUgFTb6=E-B?E0Ns4r(S(rg|_7E*txD|
z@&&@^dYT~WlB4<j563LoMKMl>pcfd(V6#uA?~p;|^_Iq#Qb;Oy6=|qnF$Vi^Mr~^{
z{~#3 at --=<XWFpD=8#;dZIJ*4(@nbR at Itj%ld8TfMqd<$VW^DBAp#&sU(|p6&Rb-cw
z!OyQwitKSokG9O$wVrAnTOgSI5Ns{pjt>}9v1zhTnp!PXl8HrbRE|$(SErou6j6aj
zx-qSJ?jSOG)1+Z|iOTxY{5m~Gre{<Bu?{od5x+;gX3YB$H!%F<2 at Cuj)NEJv?iFNw
zmYKlAP*&&O|9jUepv at -S0M8@ncVsh&dJO`{pVFs<@^?z{y+4Cg+kvXCRNfj<z-OwQ
zN*p2PfW4!- at Mxl0WfGoY;zIoB8TM at +i6!QQSSSz{?7))<G0S$0eL1u6UgnOH#H5TM
zPk1cDR*U}LNo;?J^cmWCQR!4gB<1N=i7my6VKv#^fFYq#BQd|WKYf#8J#W~AyqTX0
zwt_LHPiJ;ELgpi1PX^lxp5S4M*wbVLiWt#oT>WDl^1#4BIpsTM^pdxOcGB}>4>y|$
z=x_xNK|pMhC8KvJ0a?1 at gx<}Pl}=FJlq04iHfK~(o21=^3wl9A7SWB42qe3q9T8bE
zThbf;g>PU17(Yn9y9sf&bMh~luAxA(Scl!_h;p$|jj^;YbIU3s!EO~;r(bNuR;m9{
z*3jLaAx#;4M4S86(dK~@E(dg{qOlw|MV?RUD!3LW?~3-&h_2bT(9S(N+^*k?=5#f6
z9m3I~(HKX<l}?x|mHM^}Hnuf09G5a*8EGYaUXDS0;I>eS5CIICnoO!aLul%I4~1BS
znPrF2$4K|0pXiU=o1ws}tci&Q7hX(>&JFY$&z6UCk%=UV-T`ZK#e)=~;m;V`C)KQc
z_0-a#-Ns2YJYLHF0zAy>Jnn+v$6KmhpL&v(Su3W8Of{pr&bsAKgt#qA66rE&g3uJ1
zm=Ph+kE!GxC&9D7gib at eZ};9CpaQ&qaqQZi=nzh|%919kFg$t(-2hf;=?K>HA+T==
zo at 9X%<`jv_QV(i|GL4HkJ)+7u6pNkvPBH$^8d=P-HzGn4Ks{#@Y at D)T7Z)N=`6 at 0z
zBYVNB<SZJ`An~)zx>6jc&WFrjG41_6wM6PH<!L~O#d(FUB1SltmwqR^xcv7OgCmA_
z=AfgKfW(}wx^K<0cYZf1<Yb#6d>imw0|@xTMRckS56-|<zs~?Na5C0o6V0n022TT8
zoE&~~m!d}Ru01|Wm901?wF;pe0Y#_euXvvDPcD_}yOUn2Mhn~u4 at IGqWDhz+@ogk3
zi3MYUS|&uei(>nGIn6Rm+^V*#-7N2Yu;XNM at 10ArA4v1)TU!5HkprN>7{Z~NtESN=
zk_sWI>3Q33MYPUhR!<A8i<}jFBz`YP`ZRAt0|+xl=u+A}gbBHo+Q-Pc9<Lir%TqCl
ztE%dpp3p{A2wIxp0XMmPM8mC@`bbJ(rr8oRzj}3Yv;?p1^K`C1E9u6Ygsb(Sw&*y7
z0SRn$RxAkcQo4cHj7G(9th_s3RHb6!E>&3C5(uiC46IDQ3LEh6xYo8hL0`(=7)u=N
zY=565E#9$mnTY)58#(7bXIB3$GTlgTsDM#DF at AzQGrzia6*bd2CF=BVDhzCGeFl<T
zbisKx at Abl_Q5g*-qUmiOe|5FVeqtp3mYZrL at Q0bf6AdSF2fRz22th24{eWVua%I6M
zK`O0dAG~<LE*Dz2D{+&-8Ez1?I&|Td8Pt}NK4p97$OS2>q~n7rofssKi5N>5KN=2w
zfj{PFgui&X!Nd>NrMMj!feSrPuF4(gcjy224my~V>h3uH$Y`VRFVCs*e3QfH!^+ud
zo0fR6jZ7_sS*wXsOxR;&sxRLQ9~h4Kx*6VGU+)0|{eNbk4}CR>-BaNTKRkCms7{qH
zyw-6k&eL#J@>gie$66M^e&;gI7mHL8Ws|bgQ-jPrczAp6bmwhi9y<zjQ=#zoVR+70
zQY2Qj(y3emTYNyrMgAEBzLqSQUz4Xqbko~{ZzjNd;F!R90>^Y1n{SeAU=;D~|IaxY
z at 5E4GJ5toHO$SS#E4rQleyEc6qg1T&TQH?DbQL+vKN_Qxa|Vlm2Mxd{rvDWo>O}x^
zA7G?t!%h%WBwxtOHa7Mc;m|pwmH)P}Qy!7jFuYtn(FabczulAK5X?o?D5Kfy4DqPQ
zo at F138~?=E^{0XCZG=Z%l9G%sAr(>h*DztQbQbM7fVi^uuc6*Urzn$c7SqMJyG~Gi
zn<LnF%iruPX)}q$xdE!C;`#24Skk0`wv0uZbRaF+<^VUV(gSF6ye4ZlRnkt`^B6iP
zJ)J6z5v=AJ6b-W5LB=lPcn|&qZlSJi%0d<K&}rqt%a;7X1Z9-WESY96_9fe^BSC5(
zpHIG^b&AQNW3Nb;P<G0eNil!KxvB$_>}}njm|O-bs5fk?GZKkpM%#W-`<rTAXdWoJ
zt2Pn=?Q;+#69$aDIf at tfz%>IHRV4+jhDQ9R(8Xr{t}CQd)MGQPNuTcwx9QrGLQChm
zbs at iB4B(E`rQ5~21HNLpSCIbQt;;dwwNibQJZsqB6ynGNwWZt)Rz;^|0+z;yb}*x}
z8RYDZsUxfMv%|jWi#yX;)xredL1We!XL99;#%lem8!*^i;ga at reHLTIl!tO&yK;PC
zJF-*jr<zyr+z7ivH}vmt+SnvAR$qKucZEU!z>m(3-~OU^i?#8AiwB%-vg)wpFgqrm
zA|}ZqJZL?|v&7 at YTyf}2e!@2DEpfBoOH`_u9bgMA3A1E<Dr;~6e5ElN%68~5wa8WP
zOsA at t7$-+_r3>f+t7INz@=*$O5+)jzKCAS+y?cJGsxpP8LiEh?(LjF4WpDF<G0k;3
zQda%CU6r{tS$k>1|7}+#KZe}nO at tZ=9*|cmo;9BFui6HK__!F6r(G1L+JMmKaVF|3
z$hE^$JTv=Ja6hY9!#^53-<ZlMF@*_1bRM!B9Y=(r-VtU%eIpv${z7q6ewP}TJjFO5
zgBe+B0{^P at Osxzj$l}eK8C3DP;ZS&1d-vlM at d>NHWDhAJ+Gk=?fow;?B at eh13Q@Q0
z*+Q_76g|6d21_)i4_nDLJ2zs5ahF^}kmEWkT12t(`}B8DKI*3=&XWdwhzt}AT{f+b
zpQggS`3jVN@#2cA6c^fjMWbo>I&Sn6y+|o+BpW|Z%XU>%mV`L&`H%%~^2#%$u11LD
z_sLpFzBG}%u%~52ZKr(@*ioZHF&uXD=xS37TKzF#=+;MhJOnc%$kClr6&1ZEdH471
zgOR|*tqb}RUKRMuG8)|5k$~?Tf!gjJw+3>RM#%ig8^FF!XwRXWHVfOB4K_GwW6$~j
zc7`5^`=w80)BfAEVnloE*f;@zQ)+4?;e`a}5@%!=WYJLI0?+G6)RE}0?g~Q8JT1)?
zj{GG4CFs)NieORNu*sqD612TS|CS_S$do4<WnFq`n}#VeCmaozSBOcrWxexlbKCI_
zXYk3By^IiIz)=%b2r~)a at 5=sNxH;f4S@*T#rU~Ih*@8ftd!gCX0){3vxt&<Fluq0t
zQhN(8J*7S4;f_lrwq1++0ypPa;=`8+Yjo;1SEMQ>A^kG*e<87l*C0^fa`rZ}6f%rx
zWUE6UZBktcS8ilbGO|UT=oO=rVYUECM$e at fIeD20x1PZ0n4|-DWK=I3 at npN_^-2$y
zyzvah8FNQY3uEq}d<&u9+(XtoZtV-f80;Cd;B=8k_3q-irnyG!AOu$+kVA7{NdEO4
zxyTgG7vM+lxDaKho!ovfA at 9mv;LxL3a7>^qN!gfNaYQoz3h>TvOA)E}%;v!yxF=vl
zJsGR)Hv!tqzK0?u`er`$!M`6OchBY73}~4WgDOQ3+S;|nE*lXNOIuIxxPR{+1zk%F
zfx{nI--p;kERgwb$ZzU9HGESQ^h*S|I#FQk#p at gvGW#JwH_hlCGZud7o`LK-Vp1kh
zUc>yw7WH3Ta;wWQkn~9D;6@|7 at 7|1ZZ^+MUY_Ky80qzn^RV8SYD at bsGI%_#op at -HI
z&n0S8oVPWwK<9{vI5&r?S=x)#HVMqZ4`XII`TA{@6J`h@^J%l&q>;*{Mi^x;%kT$W
z=*Y;(D990RL~eA5>Z=9CT914i25a%%$_gJIZe}=x5q-Bx0?wLZejv at U+aMh)9xM7@
z;nHe7ByEZqkQ``!+lIc;>;7v}t)5Gb;0{FL7J-1Dz<e3|ui%0s(S7(VqN*M+n~dih
zty(-fWJTQI_?B5S2T>3*GThq at cv<k(?MlWZd)rd-cIY#lUH~*hFI{jDgRVg?u*C4o
z3Xl2??$_O)RQ-0GuoyG+P!kos>0=w|UaT+2grW7jXY0f#vZ6+0I>uW22=}N*?a2CY
zyByZjV06N+#&d^oU$slHy5Vdxx#At4ZLRT-z1GkyzlVls3AfvkBl|z*WoFlQ%o-IL
zmdi`DU+jc`Q#+v99yEk(HxZS!GBLv+-vrV3uLVT;?SI at -nBME{wh*e!h4K38`6+j|
zKf!dTb0eAhz|b`iEuW5iF>~kXh?+>hf7O!H6UVJIbD*uY{Lod09(PaLSz@;doe&LD
zsEx%TD at 9R(5ORLyk{;WTKL&9slp7HX%3%l&FzUh{XR_eli&Gy9%6qvy%9!Y}C`*A}
zp-Vl%_A3WWvlFDh#a@<+A%_W=Oi))@SY5_|MaF||rQkA4F#Q&V$#VX;F5NuPVY$We
z2htnhIrZW{hnbRS%Qk7r(Y84=u}Iu%IY`1dtli!EFaTF?#%lU2PKchQn4#D)8sC`G
z*h5eooZ-<kydiBBQQX|Wsp|?S_8qmo*=G@|X)5}`A8EIK&hmzopGW}P_u_n`P+NJy
zWa&E)`VSMPh`{_$hj)ZKy0~IErh+=J^quN(?c2D`IH`xWgu7>ddUIKh7ZL=?-Tv+_
z at UQ)0CojRExo$h?3DqWt(jeAegeA>G;_(l!SPRiTkx-FkH at LLxF6Atx(pw}tB0tZ_
zhMGCwT5&{MkU3@&TPI(Tfo}2pn7flL4N9s?m!*rhQjj4*c2U;$t3~md1ZDmIg>9xJ
zjd2%e*wN^vS4$H$e?H2ZNZtPDS0ZmJaNzX2;_w=#;w|P{F><CnG+qSem7)yO(^mQ+
z05d?$zj*_%qcdjLjx|}h&c8||U?HDbqCe|#V>&W=J;RZU#_c5nqlbdkS)rgFqm!d$
z?w~rUK$|J~i#S|zU~dmvuA*Bo{b*=SRHAk at ZT0J)$e`5^w(VU0ZU0Bc2<488C|8IV
z|1$pgvgK^f)%YT1 at G1Dps>Zn?oENxHGTwtoKp}W*XHAm>XeYdw<A0 at K-8nw&^yQni
z6qFfGX+u5O6jPyU>OH!h`{g11OiMZvBCe%{jm^aT$`r at v9<}t{*)5nwL%<%8dw7L@
ze;W%N;fBjN<@i%Pl`>#4LlwAJ?BSkY#`DeKBXBBy#A+M&OUQ(_pgXoJTb7?yLd(!(
z21Ea*c8%yWB0=!PO!JO38(2!7gfVlzyqg4$Fby!R=gN!I*Y`^^g<&k|D&+#lb{|`j
zq$&Nor~3!r9 at Fwo1k%fj`QwlYL`i1E`V0b~g$fSVWc?Rfi7CrBbXa<O0r`%%D6}t`
zhNkW8oK5RM61n4*N#;&mYI*MXWMwCE$qs9T%*^@E|7Qx*twBwVLKC5QpE>V2l!_uh
zF{mB{)g{>=?jGaemnLa)R?lvO-_!=L<jN?L8D7-`3Y0e$EKR1i#U*%bmK^8E^Fd&0
z3rZoNAUWxnjYD-ViD2nKok5uR6g%Lx01|;qTmb{Bue0-T;>Tihqt4dson4`|zBaCR
zpxPGlpmlNk_HIH>2M^tx>#+lrJw0n_P!V1BwWhgBE7#U`ZY*=0jWZ<Y(gN!Ea*L}+
zf;V^OPEcmMD<(bNxzwgF2iVp#<x{v`p2PMn^%gZM&3Ji+LZ}3ubekciC*c7X*ZgO|
zq#AcLWpl<#>ffn7tRj%;>!IGnVo<$}?p7(40kOd+!JGKx&$mUv-{yfh-Q2yXP^%5b
z3SFi@!qi at -SM}`}!g2g<2nI%d7F-$_@*(<weVi at aR)Lu1_A7en)ny!G(MAiB5@{LW
zgVwY2L6+T}=KxI4Fs>W=q%dM)oc23G5atNh1&yX;R<kb+;?i_u&nU+7`6S1mr$DLI
z;n>uxKNfwOPWL67OG=fw+3ciOhImSn-$y}ublV|aUG7#6mk*j^L5iSGs6 at f8g^DWO
z70%}TBF%QPl7v!kVB1 at gr3EIJrU?rtNo>|k1-k`sBtW|(82?^)qvVLj{8AGUWqbnL
z(cs7`wRR)Nq~#>WL?NXF?6IBB(E%ZSM6!~MewP3pd3!!$iUCD19Dj`TmR+2kEiE{f
zfG7yxH6+h#+T9ObHUX1dh#q{xsOAG^^ZJ0kHAVoO&7 at h-f4LP1oXg1`dzUH{rcP96
z?_Nr%Q#uEbIoP9HCipwPE8fgiB at DYq%TdcVmZa;F^bX&c<?ks at yM{7AljoSmuoczu
z1SV*%Ud at H^1OCaGJ$8zF+)RkIR{RUE>MEolXooA$Fhv~0N7()pS^@#^y#1(xrWiI|
zWubvqDp<!3^kiHDu+G-oC9juC!biZA%sPPEBuUSxtrzTnP});188|X_eBTDXgf8tH
zs+Qz|Alpkpg2zPqnkSVp@&{tMN4Q4X9$sTeL_1v%YtpNR-p+M>r0eEzQcS0-Zx!6I
zxlL@*g2&GgLdDE(Wa7s3B)g0>MYOzj`|M^nFtvS2=33}$D2=vC5mrZ_wBAZhlBst_
zW!!`1-by(zVsZ`obXW+|^I2RTcP|9rZp>0<Q1%+;tk1CvUS1D1t5^P-QC&$*?Ie|6
z7um at WO;XYvho@;2TkerbeVOUr^<D|wJ6b?udWP=QS!n=fmod=5-C*ne)R~N)zzjc_
zsjaR-!ysQ59z?)Zk0+3fq9#7flz9|YM{l|_&PhAzbPoEq|6E*D%jBrmnOQ=BUN4=u
zz+6vS<eb#wKYD~G9dje&`KCe7^tSGJ+TmHum&PdkG1d*z4M~KJfWe?xP%FnoyE41x
z|LShcGTn4GwFDg=i|~agj=@R&pjn42NE$W at P(G5;n)FIac^XSDvd*XDb&z!={R>pj
z$v6Ee2Dv2ggD$poDq389y$F&iEpD0>?-;-Vr)68M*R~dseU<N9PIrZcTyqCV!c#@D
zxr=sT#z#aqQ~T7>!<&w%#vdAq<}>j{i+ja*w?nOo at u_!5yXYwzY~m^v($Z-?$@~yr
z0QnG0(S~o%Cr`(dN4|6u(r!(0T!tk-r02zyvC!gov2c$hCq?9%$fUQx#G!|Q!6D*E
zoJKl(noB at B*iZ*W<~>%)=u)vh*@Ubxv=x;~GNi_S+Yj$)B2%qVEgN<wm$h*AanR%Y
z@^EE0r2rapWimn{&~p3tFzQ!J(s?Hejq@}m=C{#IEQk3NqP#pQkQ6}rDI0b7LXAei
zp%voNF>id1!~8s8e at i)P?oSi(I=W1a%R0J$ys9C~e<<Q_-MO;SCQS#;QzVj^B|Wn8
ztM{kU-Dpm2Ln;}21~A1jP>`Ml(ri^?+J-?zuEY1I+VkBc^fW_U{S;QuvP%5pVpQ;B
zRvjI1S0~G)Z>lsmR41*4SNMCtGWcD(d&Uzq;Y^E2KJkaU?TOk)sSjKV- at 3^J9itED
z&tTF%7Zu7fLY-nps>O{;EgIR*oKr_90sHx?t0X>0<E-1PZPQ9$jd%@LOHY1;seLuo
z`O at -x58de7wA_Cw715S#9a>Gl9j-}c?=g-HH!m_aC>`kia&ytAW=Sf?wCLg%%U~TQ
zuStx9i3z??ZwlSIU*hA4FpLef*9=xre!W|G)Hwk_kbRb;Eu7*io0}u8Ov=^aD6Y at r
z?gdZ%{>N-Y{V-ooiR(snrQXF2VYrbQV=|u|VOouW>#AG6zKUOD%2UMWLP at c#PBm;C
z(PI95F$lIIU+-`xv+?PdSy6mRU3KSFc67E;OQr at hS)lKF!TgX{!!T__lKh6neR+p5
zQU{Ygada8IDKH9Z+obuwJ_Oa6i)ri5#d~L_jFVsPj|Q}(QhJNWr;jBJ%qWXXekdJJ
z9S96WCtP=uQ8j^`9;pVw*VL8qmC-wm*-|;%);34$J3o-z<oMTMm+a4`Z?Jcebzh{e
zXb?<YoRF_w8gU|mbIRdEUSu~upf-2NO;O8Zeieu=$f}4bRnBjLi4I>D!ki}Q^8JgS
z(a?U~Jsa$gL+JG5cBO9~RX6U at 6hAPo=*1R%n7Z~}<1h8e??6m7neaP|kCqe4C*2$>
z4&^YF%%6HKn|w=#6y9>UC9&zZt~U{O13IeB&VKzN{gV6)U}Q>8@`gLL4kwCe`a*-A
zSh4>Zg?TpPkB>WM7bWnOdsTL)z8;OanLCXq0xjtR;jvfvn3k1MDRZ5u`tlX?qN`X2
z|24NHu_9*NVk&~W>R*vyVJAqRpePA+ at v4_=zwtAmt;tYMugjCG31mDV*+u$+8+1ES
zL%2k6JCT6WT1Vz2j}h{x4`1<&(t!DsVr`P<Q??vX<uT|W+h^Q_zpAM^RUv?2P%iOK
zj*EF^-UNEc%s;<!Y4^SMEczPD=^FnmL}b&BaVFig7VS(X(fWZ6#b4%bh-8sQyZI(7
zZQ6Fn$pf;j#pu;A;$=vzBa2DrM^-UNd5B_ at _d7`6G>_O3YUAk{&PWu_yjVp_=oDCX
z2_A=iT#Q&P+1RPTF3fd!L2i+tu%MYgNQF?!Jd(o>9q_Ckn3p^=gaX>0mJ&&07exA8
zZLkmale!U_9VPh<(pb8F(;+8xGhUry#Kk`_0<L_wI#$2=Tde}qmBS^`RH>zvMzQ!F
z*bRm}qPm+j9m}?$2))Ro8pOLk3R3rrFIxTz*c-%(q{U{Gy$8!DF0;~*W at a>K;2JPA
z?9zniAq+MpG6>bHUTrgg{ztc`oL>=?AC9VMDf<4X5&_#jN#CcAZtfGnOF?P<_*3iU
zMW-YKNWS7Ogu-!XCYUYGCvyzyOf*a$_D8;C*THNLG1IUMMDQ$f>EDq=N$KzZm^0&H
zR);A^9{mF1`3b5+62_R*lI_ak<5>8wj3vl57~+g*2!QUck>&2ury8oRT!WLji~q2+
z<>6UsN0yX|@&qE at K*%TKvoq>?&Oqz8k at AA2XbF{4hbYf1G)AhsbmRcFZmgoxYBo~4
z^S>qNOIec>=H|o|(e0l*(6%7BznT(I5l_}BwMCS0lz&8>A+S)G97E&wF-<8HS64wf
zUmD|<uVT^hunrpsD(`Vk?nGL7yPa-e5>twRxSYN|cY(QmV#_F1B;8Q-=yGH|Y&}c0
z<fw4T8CsuvfTvipOUvVclOmC1`tF3)qKs95T`1AK$^J*kvnB}b)Nib^;*?Y*{x(tW
zJ;Gg`nSGc8DLft}i161{k0^A1>xVmmL-m?PJNE$>sg}*pfDBYX%GBGz%H`Ken9;+l
zSH$HWt*1;ixUGRXLq>moIPauur;<J&b;@+dW80y<_jsiF>jAmpxR=@%B;bbdg;R#q
zbO!QYOCV{%zRu&F`L4;w)^oj5G0|P?ImAlb!Iny)T<rc3(x&vmUwLQ at qwP^vT{X?}
z2*8!`c@?LdbHwVEs)!0TM{sKh`csQo><IusorU{jGc#;jJEB-sxU2q)_Z6jV?@HDS
zn<tbCS{(|zj}^&75o9N>*IYTKZ~V=<{c-4Q-bTPI5PErVI-wpyKG1+GkHGK_&zcSr
z?i?e_UUqF#`5$BLp9}HC4_r7(bBxJ2CgQAOQ*e;k^0yi+-Gh3`nu)Fw`UhLc%Fs&Y
z>B>xp at V~&a^AcQHQ-<<5QXOnT$8&_+G<8gC8C9ik>8{WU2|Lqh!+{KS9roR0vn>%0
zc-Jk3#*uftEcxk|`1N!LC^$jGuqSbavVHOr7w*H(*?9eijSrTROxa;L+aI8;M4R8p
z0U*%TZo?AmhuBlhjW+Y1;BlHGbs)ZtD-bP2>mXH=)Tq3cBL(>3my4od^r?U+RY_!4
zPcp14CYpf$R429D(8TDIdUw;-Xr*S%BE4e-!e>~l?f~R?FPbW5KqD$|jqg8p@!3#~
zGT|YfqjOto7$>qk0fD;xeCvH$1(42!e)GJ7%2TKgu2&kl7Wgz%(wghn1C_ng^msu8
z8XB53!Gex-`{xhp at UfZ7Z(8||!K1O1vWK4*iJ!SRt375!@rj^OsPx6YiV?|xRgZIx
zS*xz!{NT+T?{%!duMa=o;+jI_=n|M|D}Z7v``!P^7#(g+!9YFBoUsgC1$l-DV=wLw
zbhaX}2GJb|B+}}2ndGFL_idtyt^b2!kPjiaUN^2{ceM at 7eLDDl`A=dE`3Y?e`s!6d
zK00iGf at AaEkhs4Rb>g(-p&*#nY7Hpr4BZTtW_&&I--ZZXhtBW1*WE9*MJygVYJkfP
z+lYgUj>8k7-+gubh^{*fw~8;iGz-LUuz4WShp)JzXIL at F@Xc=%%VRMgD58l{3-^eE
z52 at HSx-I{t*chC}q-rU~IIA2fOY9{WBxrvEYsc;i$>nvZf8;CiQvr$D?}d)^$rjQ<
zFh!gCK344_8}Zcac(I>_*)CL<@p&JCC%t3{|9(Z0j84(eUK0m0DbSzUs4Zsub#CY8
zEl<pep9ZcrW*~C~SCMYIKff{tDV`Q=7B4J;zIBbnb$28$h-fiuEe+v70=$;m)&ad(
z*4s$tTiS^e&2Q0WsmgVtrKp=ZA$sF at JS)&O5bDlGYkN4Hqi{3-+>V^5yzsDHFsQpC
z6S|{(PlI#0VLNZ!foa<IU0VSEwDH=HCVhX6<OC>92h&SXV=u&ZL!SSaM~-&R08 at l|
zo%wG;@q5FAd(HMH{=<Kdwk#GxdK`MMqnRu#V1rA|)uSH?mXcI~2W^%*g52B6P at SD-
zPl5*&sF7mvQu~$2LlgQ%p+<tgq at FW7mTcU2150Y8%0~4p%B`IuecSMiBCrt~^O2Qh
zz#_}7lU_~k at W|k8$V30G*+FHe;d$5rkMEMOdmRJ&>t}9BWvg8!$js-H8glhZY<SG!
z;8Lu0tt_nH&Vbi5mR@`IdvwG*`rNr2R5Apg0Mdfp_wF~~=AM>B#yYcekaEP|LL>j8
zaCt2|O@;ebNq_%mObMyQ%i3cP<%ppr*{3;dj0p1Tsr5$jz-dU6jD~w!=ok9qt0^J<
zoO>v{3Z*#Ty^wczWr+rRhFB)8xTBy9se4`~a)+YAd+$8bvI~*Mn1YX86^!PM0;Okk
z$6yPNG^>pqy$L$Kz3e}O+ZBG630ZQ3KmkDqW@=AS{V}5Wx0ct9QPY}qCT7~DPpiNw
zrL?_+s4U#C-L(Ym_SePpt5ZBf{Bb&Xq}<7;oxC`uc(d*H>eVKHKi(4R=t-|TU%8(7
zG#sj0`r1OaVs-F(rduv$Mvr;8^S}n1Po5CVd!Y2$?-Pb>&pMtZct4>6C?WTogCTEI
z>GB{5dt_23z`vH6tP8)sfjH|Q<xKQ^JP|lQyYQC at B<Gn_q0)hOG1a5t&^t at VPYaV9
z*4tid$$OubQ at 76Qi49=W5W>&C;l+5+WD3RYz}qovq7YmR#7334B6EDo<*6u*OLmWY
zCZ}disx;cWw$aT+FN)+dFq!3lThU!#wY62l&fbL`HyOnGPD7c38(#iuJau4}{G0_h
z<kxdT^^zT9E%aaHy^O8QMa9GYxUG!p6ev>;w)ka1v&8nBwhDQ9|6>T>8Z}|wO%}+N
ziMs(0^L<q((ksu8L>w=`2=1-M0_*G>FW~Dd-5e11x)#3T9a^a%>1VYOcN3ml!Tgeu
z>eXW;fP;J=T$n(tT?QwDhyFjo8N2cai|r_TRh1<-{snF%ZBP1)GysFN155LZPe7o$
z-p1<<V8seb=EkSTSaKP!1KsWC1zVrc*2X#Y<4VfFyf!V)!~{I5#UZwK*M>ih2%7ZV
z*DOM-9mn$krV%Q_8(zSqPC5{y?M(L)(`n(acnb^r0Zj&E>`xQU3a-RSM!T9DD5zLL
z(NuxA>^H70oER8zGvkhrtP+nSH4tc#vaWXredhv!>w_x%vZiBXIb}zWKCvaODT6*`
zB-<)DddK32DsRpczbV$Mo-gAdMi-7nq|O4|63fz}%gf)EK=*%ALEwIKN0rXEm5IvU
zg{En`$H?4e4Fw(}W+kdveUu~oVSL0DkV7c_pEp8bhkq}pG`z+uFN9QX0~pFPMv1qt
zXuB`<Q#9Md{X5NPO<3_=9fuoSQj!)Y+KBiFJFG?p2uLcu<2Zh^;KA{Z?M+Ymg<xQL
z--5tH?xevj)2s$cJn;+DLp4)=C{5vna0<iTTFkP4-rI#kL}dD8H<@^n7Ub5{cU+P~
zh{H!dJ(_VMB%)|?<*dl~3x1|-1B%Ma_i2|$2Jp#SL%2iT;aBHH8l#J2y(wr!X at UjS
z7~E@^9_s3-%RVnf!e>rB^1Lbl;*2l0zCt{`Gi3AX&vWwMEmH{F{s<3MSd2qS*<CK}
zPKtCGTdX=@5jDm&)wH)yOPF+emjjye)XuM;MzuHF1eD12d at zQJGt{A*c at P?Q at DUD>
z17A76^n7@*Nwxf<{Siv;rb)AdH3ng|gAXExWPqSB1f!w|x(KC|mo!mJlRbmh at 1G~=
zkXRbEj9n<>`hpwO`0dGm3O!}nQR{wI^xkmXXSW9qfH&tPpe`PvW*<Dc(*O>!elZh|
z at I~hy`0u>L>q>(iz>d4vdf6zrFDOTyWnn0VSjmHBmbz_jPnt54v29u)60))gj~v|v
zga+6yX&K0qq(Ag$-PO{if=Xs+@(XZBe5MUr5Fv(0BhrC}C!0f*x8aDm!$9^ls<7x6
zyfne%QqAiWtIO`mIMf(0*cA$`c(6AbKAq*AAaC|`H?-dW3lW(x^WCI}&fr(i`;;Bi
z(}8~D<t;M4;`Ve;j#f<3A}Dw at 4OJtFbpKz^Ucff$i?~U?UDBOy6B0-bR5|QXADnaJ
zQ at Z-TMcRgg&={Sh=~Y#5|2zlR<>B9d`UbZmi<&%_UmHBc2Plz<xCGW;pM!)YdC0X0
z$t}pC at pCW#bc&z;m}Mv$SMaSel0 at mPsom^-pqynZSu&!mCgj1G9*65$6}Qd<c at 7MW
zuyz7AWXNtGwt$+q5yVTd{kW7wA~C<uO(_8K2h&()9f_xmX0~MQ*S8agte at ovztIuM
zV?wInLrnb`*Vx%<78{G7h;H?(h%xa at df--$uh5iKqmLZS at 2<l88E%EZM-xN>Pt8{`
z7q3uu*e|5JSA3M!NCx~OCUT}6LuTo92#KXB_)FFGa}k$>OYz;y0Avc<jhZ)4U&Qo9
zl{MR`bZPWpht$sWyAUKp>u$LKeE1FA7SC)u0X29bh+q17+nE}xb#jh<JeC4MVH<M}
zZ9$QP(+y9etJp$xE_er<aL|tn=@igEHvrGLVprCLiZ%ESprxDEP7dqcSRWax#IHBb
z0;J<@u|oPl8dK86SuJfz|3CnrffZe-5{jo8*C4k*a5s0Sm*gjEClF<z;e25YaKvH|
z=NA(1^!JF${D!sO$#B{9vwWa;w%tb-GW{RAeNvyz2fo|q%2;2D-tk|iS+DahsF~hy
zpXQXHgjpw?H%JLvH179Z6SFpnV6xVRh=<7Ai-|hZwo3wW2jEy=*5yk#%A{C-vT$9J
zSFWq4Wm{t;j*`ThIE<HyZ2hZZSnY{8Ulj}|rR;q1U^##kBL-xl_Fl2>iepdu&)REW
zCQ1BULLma#LW^F&$=+?R*_=;c0r?LLLW2XzWBj%w*uUO*5hUicXaY_PB+a{(gFf=X
zQ1<+vs$`KnLP6ZABiG=pYg}wOR}xz6oaVHJJ(Jb<)PR>L@}AkUH4aChqo>WPOx}y~
z at 4`!;v?8Bx2K(U<<$3`wjoaqyO=4%RzFHtY<IY!2p=E`b>wdGRf8 at Aps)d{Wg{Y;8
zr5NLSzw*oe*|S{lV9)=~MIJ93004hugRslF(r{z<+4$>l!r~<1R&pLAH6e6LZ*ISB
zz5wWAoB-$3Dbo^2kUKxOZb9&H_aC|x)O at 5b(ZUtzW><CYB4)3hL3+Rw5(fD*o$uU3
zirY#gp*8_lirW>-WnR0juDZP;vG1DY+w*b~E+{11#dLqpu#K)4b8;NjOy$EW^MMlQ
ze}bp{=YXv>|5&Ks#(oO{VmR+g3WU64Z-lnAueEnH7B<h$pZEDzla-+E`$2!@CuM}&
zC#IiJGgW!9{weVf0sz+GNpwiPmo=V8dpTz1=&se$1ktoMe6NkH<(wM3gnogeA?N~5
zc=@m6<^1OCb(aKW7(XPb(@Xp46)(PNbUA=)R!jiZB6zXV?)%)H(c#n=e*wwK>FAYX
zq8Exj>$Op_g(KJAMB2R!xXx&$X;W4+c(bR^(@h8zoz{Q{=SlA`55KC?HPq0g>5=|v
zd<rCGkma1r;D={#JoP->>JpNeYj-j)GNIJa|DrZMWohad%9{qvaTOoV!*YOQ*?B>I
z#X&<6jE*l6eE%K_<!iRV<{iR@<8(kM-m&K8nfy7bEr3G|l2%dUj0eAY77D7iZ(vs0
zGLmYY*g=JjTdlODT8{N}Yok3bqUXAv1w1+M%Oki%c?O<W1x?{hz$|L<dW>=|nxMUr
zxRgtKb)ab#@_=OO6IBUsZv`8beZxkRBlf8PG5>aBl~gtol6doqAflPn1w1NQtbc`j
z1VPxdH)Gss1bL^UtJOTeh%#-?-E2EGJNZAXY!41yT>Q;TQa1-5L<hh-*;MAt)y_41
zcuzQr at zxn$*g+ at UlO5vTFy&MIL^4-7iQkJ6i0<DW2&e)l(g6%t!)VK?>In&uc=zH~
z!zOS-N{zW5X>@syjWR^m=0vv9jH#LF>F5pPTQ at FS%!m2aBRS0Jsb*`W at k&gXfB$7X
zvuQXz81b(FM4R6AQuu8>ZtSkunV86d$vdzx%rFuZ-#cROz)LfTW{mb!&;X$9-iOt1
z^~!^tQ0J{ZuFJZZ0q{yyX9&K|=<BJMC}?T8U at sE*kPAlfnXx=9+>a;$byAE11Rv at i
z=#4LvMY<WWZEx0$8xMIv+hE#y&-+hir6=mz?&m45hHP$NOG(>fhvfumqZKa9GNhuF
zax&t?-{jvSb#Gu)C}YzGhU1TsvV?%0&+EmTY|-6Vv34k}zwXT`+uEb3OHy`6FonGV
zv1idD>$P_es-UWtdBnYa8~`b#?QtHxOiouN7qi&wA4j#VOP(AUU_8C6$$&qwJy6t(
z?afSpEHC&K%#E;ptqL+vEVdXrM^}WMZ`Nk0U~4s_xRlbHTit+91HVn)gDWFEBeZV|
z at aOc#yoE(q<Q$E&^PkAX)01~#^ESl2W$TdT94>x|59`DxVjsBJ1*e17Zg#WWi9N+#
z0#sgpyD;3axc1>^Zbk&$z6l4Gb)MtC)&g-<&MOX1bvjQ>dzp{FzCkc62npbN!gl(s
zYp74QeJlPV#?luDgk46%tZ)4+afI at i$cV);J~Lerkh)a6MP_<X0bt}WWZhA62OR$6
zDI<e;?hi`khj+E#BJ<_fOLz1pa at 4b1kS%PW0EQ*#@BRRuOUZGiM*uCg>#&t7bwe6H
zPKJ^)XsYP6J=v>-him=7F>K;>OS;Ebepbi%&@}A_n!=^F4R6DdEPnm1tH&)T8-6#?
zoqAN^TT@`aMPOBp|0fOXYt6zpOk6#6*~Dcj`}B~O?NW`O$84#!BDy!&|GWQ<HH`r&
zs-3z_t+KWRsoUtQVaD0@)6ED0I;V*U<tTfoG+Y@^Mmg>CQEApfs6~WS<zDJO2_~l^
zcqkD;OvB2 at wHK8aj)S6#lmD(Z(vWdp at E}vy_3#qOa!lrj!x}K81*Rv3PRzH#44g^V
zy{pBVRCKO^gm(GbssXEW?-<Xn?VU<brTxE*aU2&!zI~#@8dd(N+g{hN-|uE1bXibs
zWvmE8=Dv>r*CMQpMTaFgg at LXig)2Ca!T2bH2>U6Qi-%2%4xL$lT{#u%toZ*kjx)(2
zvUFb>@DEGp`18$U at 1FlI5eQmKF6ox27<7QJ7g$4&YoaWlKC;O6WsvQ9nMr2UKjwe3
z_^Z^ZYW8gZ at FJ1tu2}TN)nrG@!Fo>Y_9{5agab3~Jb<jg^(V!jcGLY}tYF^s<9UC<
z20JEo)9J<jL<s5dwehpb6z9b`KDG;7=f1Le%(#l!oHm*j#8G{n3QN!EkTD(f33H%q
z^L#y3+OJ)_*8Bn19PKo5xEF-H0jB=g1T0>~Ri}(r9IX^LDLg^?T&Ej=JHe%L&pLlc
zrq;GTj?@|n!8Kq1V+R0Ef?`AQQk(G|de#<aM>6#iSoL5{8+er;z(uh9H+G&WPSGLw
zU4FLju<+L$sZ&zu+92{dKS&L|N(wRMX0{6Fe!l0=8{jj3x3%J||N0in`a>3p=2S;|
zpk3wscFNCaY$OsG at Hba0Jg_!|nP&pLk*1Q(($!?xW2`S(mzNoif+%V%Q#qb@<67x_
z(Lnz;hFg(To(AI&#O{fC2A`$i1W-9=9V8B=K)IweB5CnAid_O_=NDy4Td(W{(01iH
z4Ulm00?>DNCH~$YoJf at d1GHW5^)?wHI4`NN-!~gsaQi<JN!K#Am1n%>Qrt?=4yGqf
zsa(i?yGN*E-^pkeYTNJps7P)IPrzR__0&VnWc^FSMOO*kLCDO~eq1^-IE3tnp(ok~
z#Obo`kXX)?<wDXT7eI7cHxiaD7`L-4c78+7(i~@lHg7+6%bMFNhQc4CA+3|kNKhJ)
zwfveBOX~PeUw3y<79*}e at cknuEO|T~D#+H^I`cB7k12e2t=7hNM{?0fr^A+^RTCfz
zyXYpHMfOYcoszKaS2rR>Z>(Fov*W1FpKXX0pp6LGbkH-je_Nlm_)M0kIT`(Sp5RPC
z>O5nlY8jVqs90^jSam`Be<X06oExh>VKf-e7i=1oArDnxhL-E>S!|=TDviX3O!jyP
zbKp;4m1Z{KOtvN)$;hjjScy^CHu;wH`8H8~^kpZ~KoUi#Vtp%}fE>(9zw5<aoNWsH
zlYa#q1EztRa0lat*VpG$eU-f0_{ffycC5Sk5=se|a&A4QAiW*CTL7+PuQom>`=VH&
zz*25D)+9z#(n!@6j1YFD{yO(MHBg;spuohdKDR9Sk8w+h9<;h`lUJkgW2~bL;%Q=|
zXqMV8;zYFcsoT at P2~Fc%C=h8FGU+T04jg5Dd3<ggRvtK5(zg#z_aQ}_57<b`!IU%l
zD=rBSp2dtE!j8(GORVMqM3=`4qrHEV>Gkjj^ZNVJv^JAb1(K~@k37aallu={U}REs
z!|o#jd-?x>p>q*nyuFS6we#{*ST at Fs&pF^<uLJKT>a*$>OA?}N$r}e7T+VX0%sGa{
zrL+gc2X3{X1l<WnV)VcKh#?wt8P_{dg9E{Ql-FEyJ*;2L_*;4jj)jiOVYV-zng#Qj
zds9SP1HW=r%WOS^c5U4M582r_`q2DnvSUP9%#a~_Bz;ry!7GpGc>T|mNSLt;XCp2M
z6i#aJp at 7)c$5^%mX_g;~i at b&KQSzu%tWhyeotdlA%o^8ANQmN&*vxzk>Fo!=yGu+R
zF$QC#+6VXYR;Jl;iavr3Gpda{Grlm1K+iKnPR6WpmVV3 at 8?lDcxc>;y7+YQoVk^k7
z!0ZK1(P+J}BO2~h55HBv6hB{yo$Xys_)&;VbP+iUvt*i-Mt(?eHnwCIEM6W&cjsER
z(HF&~)0&tMx-a`B5Uwh=%-(+?4urzLb3N9&Sa(XozCZ&J1eVIw+rKft)Y3es@(cvl
z_8`WavfDX&N}_}y2xFKJ59`UtY{j at QYCD@?YpTaL3sA2pQ=#`RQrf=39(}hr#Bf^9
z&>^wb%`**A#>bs%{b_NtI+~-%KuoX?CHcp>CIpS5I=-=a``|RomOT@>#W8 at k<T~SI
z3IG-L%6lL~;F$f%gb>h+pha+q0P0=byud4!^o76MaKY6%xw~L2GUQz*uKEs(wH?6B
z_Wd{X<Tp;#w^`C|stqAOD>1^hD)Y*C2(KzyD7M(w{X1Pqg95cQ(*Rdnb8KRWko2(V
zA-Au$G*$9?^`Bh-Gqt6vR8C(4<-9+C^Z<cvxz0Tvs(ro>j<_beVPEv1y~9+NvOBXD
znANtbG!HtS{a(3thc%L883<2UgPj00=n;;_SZUfl2 at KDPJIJF{^H<6M!gnae6xy7>
z*Svm=b^WA6MF;H^a`vL^RX~h|8t=sTM5qQ=OD;ePOu*Zm7we-6r>^3^q@*X8kIS=M
z^^>ID#L5?gm2XCp81(s1THptj5S5R}|NCoz2fn;j(WPZL_+BiFQJ3&2>M*$-IUb;P
zTp_ro)!A)SLF6xx<B0?5He&(3Dq;#QjW+i~_t$|bU=uW706m7#fw(J~VGad6UQs6&
zqYz#pgfeR0JF^a1AC5eYihe6!EInV*ttwu1`|%fYw#oSDh3HwA6Vaa=9Tel)XH!_9
zp*0uo)&D{Dn>Rd`2JVzdxl(W}rOrc<Y}zzw+1~cB9y6oFwZ5}F)wOZ#PcbWw6?a20
ztAl;tK3YDmxR5^y#DcHT^)>a^?&%H^2P-%h5d`xT6)&65!ORuLfLF=;@h#Pl$w+5?
z9=+g?D=_w3#%d=mWH&KWnv&O`s*=bANzq`!3zz#0A;|kh<JSpQLhnvqy5e<D5pz)#
z!nQ=(i~g<Mr9dyhZXdA<-MXt44*KHk at jk58_yKmcpHHMW1cj$cJE|l&*+|L!L6Hr!
z^@#mX)$equ7Y;AZIo*EQAjd|Uqp*Has;0?cC<9(37TPw5hEw%Kd3=_G+-7?GCBI2b
z;6p(PavA^iK0hrpYY&$p8Y%wDeu at a&v?O9yjyXTfYOu(FM2xI8fhNN#;^zP!#up5+
zR6%KOc2dTPDixd$V<8Fp2h~J?!YLLbt=nRm_P0DLYrpnM=DOj+PVaqrsr!h1QcSvP
z8F9xGT%#i(Dd&)38%l=V-=@QMun0(MO!EnL41Q%VIP555 at d6<gP#TF+v<}w2wf)1u
zs}Pkxt2iGafU+)GSU(Q9n|*CJISKde5Mid3iFO<8Y>$Zn+8_NPg6X9|l;LFRCRw@%
zOBCV+Ud<v>qIZwiW;%a(jBY>k!azA|aPrw*o;Y+2#b14CrIzhF*7{@kq|4uY<?7j6
zcFL%n`Lwv_+9Dqjxk`zvKji(#8Rt2AyV}yXk2TKug|T#IcB{Wk41^(g^o1Mt?KkkL
z!NRE$4i=l2VbXInwh&%kycJjdYmS<&<lUV1^~>|%$L(RRGbjX6jtHL-iPZZiET=im
zBqR$eo`%C99u7gVdUIj7Q=HdQ6R>i<Naxq`8V;E at NW7AS9Wr=)i;1>m<`xPFEwUo3
zp at 0dvS$*^fNo&b1(%$WTHMejrMi;R-RNQpYPMT_y?QZrTA$}s_6?L7ArJP<C81x6t
zt8M25+A9k2#Xf|<T3c4ydeCJGj0?&6UvtRE#X?X5RYq|sb(xG}Cgjf0Hcm$;q--L=
z>T-2Uwb)Gn`>qw~M6R4OD^3(@w}j3zwFq1iU?&XB5WBV^#+mp@?PS2FgGNo6-y6Am
z!k>N$o{DP7;+0J}Wq)GqX29=y_GU6}TV~$_lB(r;q-O3X#OAl66|qyh9jB<<J at 5cQ
zti|W(#!=6qw1y*PA9^sudxM;E^*$uL57+$T3^{e~C!iAWGLVyG!{dEVKG7(CNXPU}
zGLwy*$E*7M5X7AO%8&JQIRQ(ha5iGoNxyCyMxVcnLuZWoJn_8Qv_*NC(|TA&OZRA%
zdzQ^fSm(UvNE1h%ag283q{h@#$^=Y~ufhz636O+0^M-icAf#+eaOF$QMJBL6 at v2Ql
zK7VXK)OR_P71bJl)PvB#ij|%hY8 at g~023_PY(te-fA)v>Pz^?+9V3MQ=!c%|OD3gK
z-ttW2=M$4#4JPcoF+|O+Qg^It2HjBgV>FH+db61xywB)lfKKoCwo|4cILwddW!kmU
zrtvu`L0xhTWVCv^Ad(*yt{c+vhF&NGat=4IwFh*stQH!8rfNNyYoGoDy3|2J#|JAh
zY~s2oYI&^AE-08vX!wc5@|rW8eO1n7qrmvlxc^hqH5LK+0hRs5fg`67bb`bjF<qbZ
z3tb%ncr|(tg8vxV05jTN2kle)MoDe%o$@6EBu0R&V)up12a131Q6!+y=-HYW5|$yl
zph}JOG?t3MZ~{;!j~EwS)14TxeM}~2E@=m4`?Gx|V4f0<dNF?90M8b<saTqF;{D%T
zhmLN2>!4*{<)F?9%r~7Pf#Yo{bdB=|&dYWe?qo~oKK9~+BRpu26<VOGplz|csg?hw
z2<46#v(G*J)WjD=d$}}10#zutG;KsQxz#W6YnA&Hour&G@!hC34xF>f$`ng~j(m1#
zh1lK>l3Q(v@=51|N9Tvfz(*j6bk0$o1!~*|%eHK9rRw=n=L>0l?iz#OCKSd|{I4WA
zhzi}S&PjwZO4S-K=mLdDF8?QR=%C8-!4)t5De-XdH;d218dB9GI9(90I5+4zzafNS
z!TxXaH;Q=T2w#}j6d`>7SXO|BW|860pnAeW90dBaBtS2_Vy9<d<Mbno5*MPyJTNry
zS9T3jHo4RDTZQsyU5s_?GG8OWT&<uB{Hp(S3S=1EIWZZbjA0a`XDXHJ9#Fa;7q%LG
z6m@^jp80Y&6F9&v2SsasvT(5hQ~GI{<Y7*2l*%%}lD&leMBuOF3A?Rmy;Vd8C6P=o
z%z`y4=O=Va)B;_R1)I|tN-{zU8$-|#e4;Ete1Sy~V&1YU{rQ{-06;Vu&n;$}Ha{HV
ze)Cae93gSl#aYcU01 at c_P16Go{iJrP{+#wbtd_Xm<d#AEl+ANY3FJd0AMWbhobf<5
z)v&8JrG!TW7ZC6II#=?bd48YY0q*@wFcepGI{64h&-2TS492_S=NRFIY@^23%JLX=
zQJ%0BWLY^jwgN?NXaS(~$GZnE9l$<xvJ6Qi4h+SA@(h#O9TEqkd|P&a<?G~IBm-G2
z3Xq!(rut)HFzwHqG<Dy^250hM<_BEtA%V(}Ftwy6Ck99<{vTz6QCv)mp~_S@;W~z_
z6(cHR_5*b?Y5D!5-lh5-Bbn1Gq-@|BPVMMLP~fE&Of&?4kan->NN8JW`SEkT)&j6`
zF1v&Lf^w at 8FQXL?WJglKyak(J at -I-~W79Uv0OkRN$GUuX2=$l=h1xp)usrBcRUUtm
z|N20Ri1;D=jupS-r2u$K9n|{mAL(C7%*hCL at 6vtflZ$Y-jt9f5GYkINQ4Ys9lc(Q*
zCL=F6XN!r;(_Mds|Dxtw7oAWn+%IowQPv&Gx3!>y`v-IpFq at Z2mFQI*;`Orb46}Eb
zW_t#&gP|dexKMAvc&2S=)G^|*(!TvW3q`%b<qMH{lK=nPFUi&j1lcb?e2c=r!_Q+=
z&%hM)<%6Jh(uqZMO8vL*URo~zs6SJ$x0=d+j1ca!;}VTJ1t`OAsi-;L*PgJ?Y`4*Y
zT|qTQ@`$1+w|~!FBj`(5p|Ayp!Se8v#i;8wsLvUr(Znl6H&Z!9bAA?Rtxj0U*^eq3
z;zG&ccLl*(5WgYyG~oe(+o$ZUOo{{ws$%VbaQ!vHKKf4}@0F=1OGzZVt4OGBOx62~
z2UTy>D)VtQoYNbFb?JzLJNO?CIimE#@5PcjU+X)@-YjN?pEAmnCEW|O9EJ}o0uIfp
zNV&S{dix#ndcE(^L7#;JEIrB0S5pe>pI6|;{Q;M?nq66d`P*;OK`FC3WK`6RQSq|?
z>Oy`>h|XU#^FRd8&o3 at SwaF+}bdq?1Zf35!ETUC+rgtEkKVMg-s-5!Fg&h|CGiJ+B
zB-c89S~rY8#eHpx8FVShDcr8kIh%af?-sHJZp)~BBl=n8Z>nO2WBKNSXcM)eB%O?5
z80G6+|B)(6e17pkfX>PqTsa92s>8XYfzj0`Q1A`$ZMB5Y4PS7DJ|=y>DZUL6mGG{S
zq3)}NC8llU0)J|~n!!V^3BDb|s-jKeax{*!u$`Has*y^%vhq=SjpLHxpP<mSONwHv
zNI;&w&2fsGdHCWc2>O-!-z*{_59#ELVI`*`A4Xm(0rB>SI)2InS#$9oPUxXs#wkCc
z at KBQ<*u_R4LVmpL3=n!krFQ%fM7|$QxztRfV*@yeS;vS$&V%}sIUk-`6*@e^nw=2^
zug5KtvVN;iWMJB?4$DuJ<A=qomk33lwkRBOeSsZlAV?8C?GPwAqvyXUF~8$~7C0as
zr;Ks<hH$oqc-4wp#_RhDEapp<E+P2)!op?#+R+gMZ0#q^h%lu&`OU+u!{@S>9zVN$
z5z*+WoszBAYwl*qc||Kt%>o at 0F%QRa&V~XP*UkEZRP8ems-2A27IixE5%?Oq^HtBd
zj3PxZ+BStjTtLgNO|B#VWg^PYrOua_G6FtVd2IQ|#{}JcywExcVLK^z$JoyoUT%Gr
zOlGtM(DV%v33PGr|67@*s-}ZqxInN{X5=j$fvl5tU2bp%L9uB){0}f8uksJxLtZjX
zQ_o3?d3y+J at y$zQZ(`ag<ULx!Z}V$YQ9}gca1Z=^V7l4qC-jR8XtQDt!4}EMLnCZW
zMuFw?MLB_4%=6(568V(Ig4>9#(cpv(TmdL!u+F3`nnGKL at -;6h)an7X2CCqc2FY!o
zJzEiKfFT`{bD>#J&+ at B)NVrX_WP|b93wLL#Z3>w0cMPT&K9{w#OQL}&-Z(G3;fMRq
z&lA`rgO1I0c}%&esMEJOdiwM`P0PgkEeImva<q8=7WVLIUAQ2Bnb<?W<s{U)>#&ay
z9#QDc1Injrp={;yk}i;&SnKp=lQ0N9Q=H-I8Mh88VfkGeE3k};WW$R0sM{eobV~A8
zuTg=cM(mL(CQ*s2M!*}ydQoKbl(**dY*LqJkGOAI&--RmO|V9>#qOkjRujIt`cVI_
zi}Gn_na-GrZMpSwrZ+LfF{v!=#>_|G!dr_=%PD%!rFMv`{esWUQgru|MlAMhA)r82
zMcVwp7r0NJ&?aC1AfE28{`K#stP<|3B935d&!gZF5mlhlXPz at -f>_R}4hIOy4ir`Z
zOqyg8Zx4W$OpG@^JrP(6J0z6`q)S2swQ}cv#o@*~UIiPI!iPwF<;T+eS}fybz63ap
zo^FWM)&7x81oqJmIrv*IP~y at Vk%#P1oWljWu)APxh&^djkfM{NNA*m=7*TUKvpMV<
zL7-CVWa4zDWe`d>Kh%2&vew`iD353qb5DObbL0ev#!F+Yrjxr2x{xF^%>biG%DI0I
z2?D8c!D}hU29IDqKqy|ATsmv>!)(Xjqpg{A`s|X%+bN37W*Q4T4{I4%$9^&-uSdKa
zH at wI8`HHT0v2LfxY|WuDWh*2_?L!mss<f^=?Ss#^b$!;M5K_aIPIFi?@<Elg^)tvl
ztJrl{4*j$Nji97rW>g8KJm18a4>%X(LZh at DqFTCgnA%lC>fRw-`j1T`=Um3Bp{%7U
z6rYhrAXBbuT^|5J(WnP|)ze07(DmP8LZocD&7r$QqGx3-^i1RvTi=nY`q(4hRxErH
zUF>et>E7AG;xUU2V6@*a6i`LQX0djp!Wa2kzE4ennvt?C`=02-Smy!{_}TB?>nX;i
z4^u<lbDu?CT6|^PYyw^~%bu8ewg>I|QMU;s>G&sa{`o%}KaXK0Q7n*gTwe8VuB7f>
zN~(a3cFLM3OvUoSNw#4m`hz(c0CoX=C at gG&=z?}nVYx%l&wSB_X|dWo30-_A+VLEQ
z0}eq|$d6h_qR&9Ad)%?6 at T37-3=G{Qfo7|?)1T8DEV()`l)|%Rui*Nh4kXhKv07Uk
zms_}UBDby1=3(QppwCI%liRdq?MSq2CZ88I7oIU(zQ^8TWi?=xF+6fK{w!}+NFzAV
zr39+8;aJo|XdjHX!w(?FqqK0(qsrhL4+3nz!U8aI4J;FEs3Iad{zBpz6rWY<oL at H%
zC7+GT${F^?bm~dP at Z#WJ_kR}rdRudkhh}ccWrwwUOWgV3X4glD&@Y92XjO{ymqx%s
zX{pie`hSrCDEK_?)Ru}!-vJy#mw4u^!NovE*ql%|E(P~^e1RsW-~Z-I9GHpqGJbaJ
zsNMd*z-)o|DG(NArKOBMc9JG($iUkeoKOXd$q5Y1m0;!Wvtjisbe6Gv9SiIAZ)vBI
z`clYY>?J^Kc~JzQZ-oZ3i;<DWaSKhWrZ-c|eY3Pj&eo~mkyPgf8qH3GvT(?*t3iI-
zNz(SSp|=ix=y##N<vwFFnoj|+qQq#&@0sbTLd0K8Yhn`obFAMt6Q`DQ9kGdpY_SiD
z$8nLGDC|CFC?UKDsAx~Jk;+Kxt(8!N9Y`L?Q1!5%%8QFcRL?Krm{!Y&K=1yc|D%tN
z6oTv-o3Cn>a;|otglnUP>gRZ=I1N%Z!{yRa<Na=)=SQMb75N*`)`G|nwV3Cc)ray9
zN|C6mx)nRRiV9<K_n`aDZ0!}3r6Wqt?HlZSbzbyjb8NG{cQtS7O$`fzsqe7h{lY{z
zgIh)SAo7y<o|lA_Q{xvq_$<6%l7aP$VH)8CXUZqCyOpdAUjktlZ^Yjwt|Gya#LdHS
znXfN&n#UK%!DT0F^o6n9f8L4e;SlxXNt78)pS~A-xlorf)|3DDx-y*K2bDqPGKbKX
zA_}T1F@}og9x(@$MYGrN<6`b;JGyWS1bo9_M&g_sJtyIA?FC0tut-zI`dfm;ZKt0^
zkV6RBOd at b)rto6#820k1E at pq@^V^AU;n7yb7^6XSTr@>ZjR*g at HFBrs>9rZKdZ(Jb
z-&K`V))|pJt)a~yuKYygz!~JxV-%yPV_v{n3>?xAUsZVk5JgK%R^XF3p7A_OE0T`e
z#sDJ7OSIF>q1r}60;6Bx2}IYiB8R7N%)ZmNIg8zFfZOFIX_&^gM~8hc#Ym0{%Fr`#
z-PXj_v#^|@1CQvA;{DxZ1 at ht&Eu39$fR3cVuoYyd3j{6mBg}}P^I>BZ78BmIDmj4Y
zydvB_8l`d-&x0_8=3 at hA!lw`O?<(wC$cN7!V}8FPH-p3ec7kpxHz&6=3I1Xw|8Yp9
zgzMYdId_$cJgYk*Re>dT4qV4)fIUf^3HE3n=UNs3_>Kn`_MeT9&yZnm8|Q-4m$+#c
z-;p^C1$YoJ89-yz2^b&Zokh6X*yqkcA at 7$P2rj2?M(%&P#CToR;i>0$-l@`%uNG<n
ze<Qwc*&3K+gU&!wN%Cr=>Avm^sx~ic$6K9dh$MT_dc$S>q*N_PDR4N(u3f_2%2?J^
z-v<$O!%xN8u|kZ=$N2c~Q9kfxT;tr(5g|9nBLc^>{&|^r1;l!Mw4V|;Q9H`RkrK(G
z!0wV<gM4}7=k6IScx=w4LU{2<lq_?hpx1?iuWWpxB+5rKC{nCdd4eiqqNJ)a+Hzs0
zJ#{Zy>^IlDz|npM<Y#T37i=%H7K2&EJ5RadAI~wy<SZTO2WE@`SQIKAj^jq7E(iZ<
z^|t;zBtzOAMt{&rz~r<r$`|p1=&rX2Y&f`A?SWQ|QtA0C*~IP6Zh}-ZBcqB`qSW#P
zpcUHdCix)v4nZP5<ynxedTmJvfryDYki|t|P^e>@9<dB$6D$h%12MH-GlAYUA-^iM
zPFR==80PB3vkv8OWl<jfG&MY9kx+<*77Tv67lO$KtmNC1y!d+XCId(`<*EC|W#JuV
zY<s}mdp}OFpD|<xXq9}6BsYJjhNNdg21EU5i#;|E+xF<n*i at K=v;4hS`OXju6+ at iT
zX>HfO$rHt9q(k;_#ab!YD{8s>ITWhbVlFJ{8BVC5Jq@?DiH2=B80?UV-+OX5q?GF4
zzne-!gqZoHyLNJM)SM{p#(E;;A`)e^u?`+<Cos2>4KzC)V-0e~n&o_|ycDQQ{<W&y
z0(*WrhnN^JEc!CS6A1HnKOlqmPcxH!M^3yK6)jL);krEcfVz87q3or>FN3L$L1j#*
z<-$r;GdNAY7|*k&ZMVHR->Z~EWBZt}8EXu_54Qv<YRs-t?p=y$@%f=mKhE<X`7RgP
zFl+eC;Qc5-6=7PXfW+FZD=lGVR1IA!HDVpLdR7PGI<U9Q)V<QAH!#hmyU~U;S*y);
z3vVsxMKP%%Ntu3dcZr9z2U_ho*LVRyXhkNq-o({$R5Cu9Mu5EgB-x{yOzN<5LGg0#
z<)@ZC at QE1@znXN>n0QJ*+^?$hr<pa#nNh50y!`<?{QdPQwF|@Q6QnfE>HVdvuCI$c
zwzCSxPN{wn(ViJsMn(=Gg^VM>G|rPABDrxl6)Wvj{O at Xy$_iUBz5f>d_ at uXrEsC;p
zyku0S5qgUqm4tAh at BkxdZlhixqFXxD1s*m49Ru>fToN*t8^aOw4lsfR>pzm#N6(Ut
zVt82k;L at Yr%f at RV;A=d~D7W9R6*y2i-5L=(g|->m2naEpvI9PL381{_;?2jEoU>X2
z*|ubA>?Rm=-E0nwV{>PXpxpPljrxr`v!yTfoeNMN(8t%&3gv}l0HqeBhr6#a!Os_r
z9&{<V9f8%A#Y$=>3PdL}xndO2GpXSyx^#RWLhH^Ya=cR*Myw3~^ypOd*Yr`kdBF78
zb(Sze$$w|EL=RQ#s$68Y*KrCQ;y+YqxWG>JKv=~)`W_#MP>H=5U1#8v%s~fe*AId6
z%B&S at -Q4{4nsBK}nMsA?s+ at VnyyFuhf@j-_+oyfX^7>xfO?F~7_TD&z?e__5Sb`5M
z%e4*@G>T3n(}Frcg6E*YcY*7-RbdDV<G%Bk^i at o+CO{J0kH(<x*}E<amCn<pefXNP
zYa<dtS(DVZ^LV(>PVetMO*N_ut3vum1-|&({&S#6IzWxUrhecJHR9kB!o?C?L$p(3
zt%4`TljWx107XE$zr1V(!p>MX+JUn_2h&Kt5}1#@Rki&{r9H0oZ2L8QN3UQ%!1S4t
z{-eLUvN}BuA+iY7=W=AgOxYS9%p}6x`4BpWZ6hKf4r3Sc2@*b2O}LcOt>!I#xF9b9
z>V_gg0Ls!e65IHAU49Im!I%-rf`-5}3}?T}7)TeYd?`dD_P~C#HiYg)g?1IM^i}&%
zA*dS2xxK#Thx0;4sTZ?Dk&6#6oBAQN1nsVMr+c6rtya0YZSQ^!?}ZkhQ$D+;o=Ci5
z5$En|JI48uQBaDzHZnUHTOQ>ESo at 2ye~sgJ>Qib+ee<~(dOMS)fA(86=cS*Kry4pd
z;EYkso|(2LHyX;cPu5c0w)v83$%l~v7N+k9`q9RD_LHR2M2 at h`1}|SUDv4(0uommu
zArPeROcmj&iG~WV^O;fv7=)s2k<X|VaOZ=+1C6r)M(tW;GjwouR%`m4IG9FhsX2YQ
z$Dmz?9g3?egK9b)qeneTD9d&M)-X34nuzMk8PnHm{?I28SO>;tSs3xnqN^Vv7ebiO
z<dmd!YcFxb9fWMTpT;b^_2Nd`lXSh|(8<U$t!$pWm3f&07#5R)Gq*%$=Zs{g=_$;9
zj9ARq&o)>vl(Z}$eceb)2oMYDF9(@a099**Q#6tZ?{@UE#k0t^FB=K*^88-4VjK;7
ztxzKB3-zqq&|hUL`J_hVqkf(TW7t>oftk<AgF!@+38_yWMIyN08b^siiaWIu%tXbw
zp21*W2TTWlLe?Z*cJeTKlyJp1)1AdZn4MI6X~G|!_Z7yn>2bw?;w>CFX_+av12Gjj
zG0aMVfg??ckSDHse5ukId2JV{MCREuX3u#ieO&%q8sDU(e#B;6 at GNfmMc(>+=F6FH
zQ}hQxA-$DxpUUMQxZ$|r8Q8(og-uUL5fC(bXC?{7DBNB7Wb8Jr7EvK&2&*;|il2><
zf1XMB+&UOOE{nP`xy9eD3=x8}yJcL at t1*x5oMMWWuFBO}vj!zGn80A<>^A^ZafN0v
zUX at cVu80%;{Y{K$AFqZ`n-4&5u{MW}aaA`a&JlgspZ+l+Ywk8NF!oeNe22d%n|Nuv
zxwD3n5ly`vd<mjr-_=HmH=xC#3YRfJq}or*F}B0(;|!i9T7zmc>1TywKwI3%4eRX*
z=d+bKD#yOG#0{C<u=(}0TGi3EzLrRsSuWVMnT2v#AkKp^(-PgeQ^=yKKH<=j31XB;
zspEQ#+tgC=n>1WB62L@=am~`rnk{?&bBl(>Ew8Y{L}&aS*cp?d(owQ_b$ib1pyD^!
zLP*5u&lC9GH_X(xQd`T5pCpPR@#JHI!g6ctgyIN7x>&$b9bAFf6qM(`$qv?IMRscw
zh^ffb(Z?G_VQ!De{;xDzV(R at t4neSVNpCT^#?%c7nSMjaiZ7lyM;&4p7thTcbAEmR
zP=uPWO|4}(Q279+X!e^W8k*qpmPBh;Eh$|pfUIZ=6JV_+?sE4y0Qj0=XXlM!U&C2+
z8_+!gfecLUL+QkeDHl`FViBhrTvG#mEnpyp&8y!mDe~)qyOo=#-Tul&pn=gMP6wr6
zTh^kHjM*Fqgth<J9>Wy~5w at BhHSR_-L%4Vb&aDid33>>{4zwtkOEN8DugqzK_`u!D
zks_3`_n#e at bUvAoqD4p>W>G_Qt~GT<PHD$AxvA8wFHtG*E}R*dJAN`25T<0lo`mK~
z3DB$Nk~g_R8j_o|&AlB{SwWss`<<Y5yBD~@JtxJxw=x-{{?zD0hR-04(%D8^hgjH`
zlR@;_Rl!u{N~SJ~szO^|-+K=<Qz0nC(DxcTWs5#-)LJ_2{@Vx{8s;v!B%ms)Jk~4P
zFIDU~Cc5K4+@(HU#KQQg`I$^TWq0Psr%NlXCf4SG%!Y75XE&%H=$KxNG&$;v-`joI
zw%(p-&Rq;bhSNMyn at c^a>+AQ6aeh9FJSb(?bv<GOJItO~H0eN0B}EIl(XfoAz5ITU
zT4yPe7W*^H#4|qY at 6O;`<Bn2`w5v(pS1ph1S+#{W(?+1hIO|fWMuB&06!_V9zZgbJ
zEp8E8S58w<Ob1~_XX(om7x#@SCJKD at fXXWBA|`}^Z2c*FT~8BVHpxh($-O7?i+^X)
zj+|!SP6hGOC#`KJLYUHpO{|D6x1xI}1bj8^RL$p3gc0h_)v5^p_%Mf(_U<Slr4UWk
z*w=%n<iuHw*r^%Zy`rUC!GZpVK&K88$<6bntXFY_1M%}$0`|ez5fJumYli#UvYNnd
zI8XZZuZ{(V;EpiV-GK(=F{%0Naq(Z!!FG-6A<g3-#bUYzaJtF0)kCt}1QXe3PU+j5
zn1$Li0aGzkQ#Vx8rp8ghY?BZ3wOv2tEwtg6zU$gxrpaTX2m1*CeDDx^PY03?zS*Yp
z5BLa~#GCl$xsJe$ayW7=f!J}8|Lw8+vKSF9GhX?4P<$Lu1ALOQ`poAd3%IEGJ=5cc
z>;Sztan(jk|Iyj$us4dvt?`Z!P;zKawoevCsJCK})2b6aWx2)Mw;5+cG79Q)du$7e
zdVwJ;Dp6gA0Jn}Ml8G~;>}*;%I_b8z{W8}Mrs?aMqG{lqFl%3*F5T7zJ09VYat}=K
z88|<7 at Cca$ZHuI>nVU>bD_QkeSxh1*tz-)(r>+b!jD=PBZ at p<I7#4)|tfx_D82rdb
zKheke%wJg9Uk(Qb)b!K5lDZgIH>xdg#l!w-_-RU^WVhQ6u%gZTbH-37vHJnr+JfF2
zNy;04Iwi}M##w~pqU={f1eDjuN>%$sKtu*pg=o2<o(U2Qf1Uxf%Y6mXfAamRB})nz
zsBtM}$OES7tZ<SFM>_gU?e3z%)RT!+apQ0PYA-m2duaNLkrMd>n?iv3aK}Bz=@S0r
zhY2VhNH9cZQJFv>>d<LYdH5d5piyUgd^DVOcci*KX5|fc(3jknh}ibXqnrbH>->u|
zYtmraEhASGrM;*ShS!7x=)6Li+WFKXvlx(Sw~axyC8o^e1Oo}Y!yR1D=rr-;U_Ut5
zJq>swrfqO!uS8gFLWCWT7aa%XcwC7vFK}26E~_-HG}<dD#AQ=>Q`HXX72EFm#OEec
zdX$Z<lW~^KRYUMyn#I_-e11ymLwDLVQAhi9-~jkfc3(i4G3(bO-Ne at kXWr&&h~MVi
zpewv^hA*@(O-`grqC&eq>pR}hC>q=#mkAF?qZvKQ1#be!&(`52113yzsO~bd`e)zI
zk5n=Cqu?|2m4fT+_Q-Ayr}a(PxHrGKeWSfap)wkE!N3j-PMjXVpHADFGxBv9&6Xby
zJWhpG_Dh5 at 9{o<9!ZW@=m&;^zt at VU_pJugl%2-%EF(dAO`;bk$^{DqX(8}>p`~Cz2
zo#G_gj+lH~8Favujx-jrcz~*K6<b2h^4by;Ki%Snh7iGsJ0Q4KKEd?hY;c@|Yb?Aw
z_=GGHNc`MLr-qnN3IP9?TDl!Q<i);e?0S+(4gRePt=ywfnQ45DxpSt+V|&I|RP~CL
z8#Hd}v6t?fu53w6_3f8cw?7;`@WVavkO11~`p?y6C&AjML~Dw;f%4r$WF9 at 8*W{Y;
zeaIW6I{e5_xxk|$x4uJgQ at KJX%A~ZIv!Cw|o|^9X?ql+%0$3OrJq!LV8lzbk8 at Ugu
zHh_xKJmjT+cdoLY0R%Swlq6~4ey$PcY5D<+gqTPFUP4?xb`@HzexzO<2uh?`a=uMp
zUP-H4U`0=)K(PNJbf=2E-1co)MWnDPb12uCn48w!kM(hv4-4Q=>H1-zvnb|=6BJV<
zIM1Ft3UhI at 1ko%Xpg~h62NbEeag_82g3!_+Euw%17WXl}%H14yK_VhZ#4<X7+A_P+
z=u!8kgaS-Ve>eHws;L+gmoQFic at p#jKrIYj9}Cjqh5<{&?ogLQc`T?HLT=Y;J(xc|
zTBLeZpHWkk+<hb7xa9clESJSe=+qjJQ@@Sr%D|WlA(Ob9fm#d01+NT3kEdlAQ<Hgl
zY2 at tma+i&ZFg9MllPrgl?Xa_7DgH|!pV1VP`ASxGD&l2&cQ%%+95U75pmQ=IenZX7
z*lVZ_!3)=K6bcz58z=(+$<8xG4~0P?Tik4``^O*27x~?o>ixk!6#}xpiDrJ}*jeeK
z(mYAZLe{#$N(EGCaCN`jM3ik^<uoQONB=vXyZ>3~_!L{;W>h(@E&tUSeZxfd(GR16
z2=?Zfu~oYAJrMr>GMib=UEGDksP^V9$Fy16pr}Sjm&D0HO9Ra3R8GE%r<~d_gc@@O
z?Nn%0xuH99rqF;@B}t)6Q at 4xhiXXHgNTwoZ^6PJ0E?oDRLn-p}`*fu{fhRa98~!)3
zZbpP=y#9ZmlI(#@<{oJM^+jlpqztFG*1(URnRC7T5&S>}<_kqIKVQ!5rYc0#Oi)#=
z08SrC0~|DkGiZWA?f&7;;)_9KIwZhF`YWN2Q)HuO_EZ52Pv?dTEhwM;v|hznnOeDb
zU~>iY<uAsc(@^&)uhG_H63=#ro}S3#W7a&>(lpK!0ejB*>G8cZ-V$P-3K0YvWwzGl
ze;|>8Lj2i$!lL<DZ>%c)FR!QOU9v519|Bqep94~&+?${ix~H#ke4kJu))*t15R4%A
zBW~suNCs1k<fC*^3jO$&i;S#(%H(<PIXwZ<JGsy9Ajnh>oWtIKCNQUAuk!5&$5j0v
z_5siP0O-rsp~yq;N%M25DQITnkc<`sns4+B%OSFgfY^T4rQmca;9$XirH-W4?p|bj
zQugY_l6&+f;Nl+r2qP?p;2QB{raDA1lK=EyC#~dvciJ>rU<*(=;25)k!L2uG^!fSD
zHiAFpO!H0>=sO<{1ILMA;Ny-XmfFbo^ILg;Y0eoo4=(pm(6r81f1XL_WxfQd;@!O}
z#^<>3^c?pW>}|a6qxtK55a~iIGcwT at LE5~WQO#CkS03WJR{slNh^^1y5$E?#Ig*%B
zm7!(XW>6qt#!$G!SOrkqRH_iH11jS|)(*pdpbVu;*3o%Ie`GNRcYF!X<X2$CvVD7j
z`0>Yl&z5~5&qkGDPgD5Qj9U<i3DhP!4Z1-p(;Z{B at eth11tc=<<Ube^dPExEawh&{
zv;u^*1dNBr<7>tn1jY7zM~jm_smX{1OOHU?c%nhTs|KraUwE?Kj7Kh*FE#_#esfk~
zQp8!c75kypK?{PpBeLbs`yjs>r=r^xZCU9sZZJuOkbH2OstLsPh^0aZU1(jawY28W
zx5?hf=_aGfHzY&t0S&u1UNus!5y#T!7Eagm(>SLRpox|%;JR!JF*G{~#!LAe>!PyD
zN4!m`8s;4qYyhz7LC|yJP^h>^a{fW^o$YZ|nJG`(w=7<Vf0Qqj-yfM*DoQI&hB@{k
zayjWlZbExl&AJY^jNo1zkK;08XN;xQQ+!SJ>ox?iYQ#?m!Im(AcXF5gTPD2DGYaU0
zG4^qu5E{_Xh8$%E_rEm*v)k4iguh+%dDDgNw*&eHdMuaX2p}g<*d)8<{PB(^c$Oxm
zQ}i1vQc&P_e{=U~?zHPUnuXvMB1KwbusBZ9fmOx2g$9nZT4D0}I}bJ>_oLVrx*SjL
zoaN(OmaJDXAdq9<ABOdSn)>SbQ;@HX!%v)S{-WRKX%T=oqNxqPMNmA(ra<{qgf_s6
z#9<*H at VLe2d%(JBYck|!t>l##s-70tL=`3}jyx389v@~D+e`Cj;YqqrW&YhuHQW}V
zFtM-P&H%Cm-iVFANPGxrK2~Dg$g$~~7#gvdEon5*AGOfV39-0}GL-VfkOcu1WEUP)
zdW9V(=0$B?h~%cS#d)e<Yv)BZL%76^va2lM`}iRN(bzWbh7ZDGNucy7*sNM at QB|de
z8NeW$PM5c*!^}F3cn=4^Uspe3hRx?IPQgP=_!-!5_3uC>O6XY<<|mJPBjCErqKC9L
zJl)#<n^mZtYnxYME#lGZ$QQ<ja)0Iu#;-8eqDH_Hf{;n<ok?jUWd*aDEBG-RSB82<
zwQ!~edI~M4xi2L#4JgAh7>~_QW~JY~#%m&hQPG^kYU_{D=vk3Q3AqyMPH68?Ru!^}
ze3wiS8EmaKNTIhe3o%8A&bpJf`*5fhL!GydvP8YWkTmI9FT{5hZ;9en&T%g?^WYAB
zJ9UIVw<wF=42A41tzNNGmlU{kT7uVgnsJC&$bj6dY`2(K;5lG!XI#SGAY$`D_>A31
zj(Q}+-x0!+u%Yo6tf?mmWd-sj+OA!#%}n2Kt?JZ}g6)av5;ikHLVnD{IQg%80SpMM
zxyxSfn^pPj&R4GELtr2ze4ohN#3Cf<lCGU&KSc#JTj}&zdHXdej=<iDN~^8WRZEln
z{maRt)3u|gSZvZVN)3xXv6>Yxn-53?S43XV1W9Vunid%j9Qs=(wp0FsGWNmhKSRPa
zAS_$Ou{>*dh4l^pj-}SOiKQ4n5AWGHIZTPHBatDak}?VS#n?HgSl!;i at h+V!Z&+xZ
z92gDgAlfe#fvJ8M&K{92=p;jNKkUpiA$m4VRLMAW&)*ceMAF%Ptqrz@%XRl^CO`+O
z3DO);DlVCg0gKTjLXW|^f1xJHN4TRKoaR2$!g>*!Gz70~K6toM at GlzWY9)(LhBv-q
z*8NCyG!Bj(>1;;GHAcnc at 0MpJH(%pUzT{G-^&^gDiHio_Mw5l5S}#=HBm#14HR4Zb
zau?`CaaWlCgq(P&QWaPRz~JUlN`MRcj3ZmGC8<iP2C@#0Q$u7ZAD5I*jK#21G);fN
z2I!-_i^geiWlO_umenfl1#`X3OH+skvPQA6bD0@?P=R-xQi{Vpnb1qWvJ6c^sTd-W
zVR<a{vkiyMv}vyQb7$g71}ppr4p5MKfP?HS1=t2Ri6j!>!t8rBRC0|B&ZXpR|BqwR
z{#$Sp;wa2{4lN-2?b*CymCz12q%Cdo=ifex0p%j2<b~7_b^<VM{3v(OGL-u}hy2-m
zRo(J0+&N=dQRyRFcg6lg_m at KjEj>_74jQ=_9>2NNap9S1aG+dDDduWi5Wh at _%@PF=
z=^34~A1Ui at C$spybqEPau4))OvE56>MtA95Pzc|M$#@i7eeaau8!2}o#PEcg5B;KF
zeDv*oSPp79&0!qc+G*ek3^1j^+L2nV7Hx;An-9^!7C&x5-A-*_Cw*isjI4o#A3sgZ
zp9xT5Ju7Yx2WWan%(^WRISsa<eYiCeA;B!ZMp$BVW!BFPhc~S(EFozM6dg$T6c?r2
zwz(onI;tEYH=_&XM4y{4;)*wMHu$8uo1}G(<|uF~1OvQORnmjvGlQ<?Vras?=zA;a
zu>Cbp5j$bCh~}Kx3=W8&{f^EcJRwC&J9Xu`t3ys*x!gF|2CWWazEaN3c{7S+(OR2<
z$D-feSJIuK?6#)Xg*v!hlr(+v>&Z<Nre>grNnSm<SergZ&UwxX>?U9(w4`g1#<yM<
z;3DT7Qbmh<yq{yeY2>EdZ8ZZP0Hnjz9D#E0 at 0bforzPPN07`J1F?2$A at k47@Jchft
z*`*MS?BbbqAyH2el}0}lhu-6366XZgX_@|4pvVN=Yu0WLFD}!uMdLL^-eGlAy|f78
z%nX+)CW$*|-LpK(>&o`&6li81VPJDj!RI*{zb}gQ_|^&MtlY6mw+ri>BE!FBDaatZ
zmGNG}w2sf;f?x6-?NgEWYu9-M`Ruv-;Njn0QQ!#hbL^3c)gV8Y#U4-m_aH-l_2ogh
z8cbZ}78&g)VO5b|HzQnr*;_|$;DM+_vYOBjEiQWb04L@>R~;h?nQxIlN;@Yqa1tky
z29o^Cg1O%f9Ci<LV;F(zaPyfOPz~m{B2Qzr4mA5UIc4?eMym^@!K&H=Np!%Iu{2?U
zw>n>vJ}@}>kR>j at n5bxdKZR+6Bkpgn?#Seinb*&%V45I8!adyHg-EyB+taD7ciC{)
zH{b<Rk5$_^T#%5{M{A(pDMtZC0CIY$Rzo&yUfNj4MOj5lqhJTIS;3$+QFh(r*Mm{0
zw#%|lOF&v!U+Fz82P$JVJ64%G7<qDq$o`Xa=_0Wn2P!d_qay$sNw9PJU8)8sTr6I$
z1_`;2tZiMgAb8p_S#4_a*OdYhhms?ZE48%FNU}1QIA3Lz%A}GYTMa6Y8WhE|JhOt`
zsUAr?=}1ib?dOM;U?Z-%Gis99UeO4=L}1ll(v430`)iRzFxDL5LaXl(o(Q=;!fU!Q
zoz--&nRv7>WE5SydJy}6B7p=bbh4Z+I-WgbMXEJUDYtMH40=??;`rX#N0#da+s-Hn
z;!OQxA2Ki+{Y8vKRY=XyPD;+kGPC~gqb=3L5~+t6`-ntaR1jubzcwKq9Gve*vCWyI
z1B9vVJA3I8RhJR&HUYk6R{QRTOpW-}7?&`3nUB3KyLO-g(&&!;G&T$E);*gdPV6!6
zhmC~ibIL)d-#0o at PN}^Q_{us^m_?{x=u&FE53|?>;CH@$?-s0ENuljvrk-?kFOahn
zKIm&_Hyd%Aq;;#~#>kwmcyL}}8qo2fdJ^MZtW~e6)ICp06!C2At>KsxpJ*;%+e+uG
zA=DF*k8g1zt(E8UeF54Vj1E|YuFm;~!a^9V5<0S1%O^2bCe3Gb{?#Br#IwvI+qZSj
z<ZhWNwa}in2tZY*LQ-kCdps at v<lR;u_H`&CvVW*NaXJSzPwtAGP|5Zu3el6D+*;Cd
z+D#4POZ*p-^ZVV==OfNUWAxvz9u&b764F0`x~&7hbAtjh)&EJ!oh~4X(k9s)U9I*N
zx<BuSoReaXR`~)jLucDrH^CHmp4EIiM<eT&)id~D2^Y&H{%oj5Yn`5s?GF8YR@#3s
zdlLEq%pXOMr9Z7iJK<L-UJ?J}pd?2TFtO=V4RXXBRGN=|FW^)=%n)0J;X~h{yUuSf
z9smkg_TKI!^md2X=#?`+mx5a-N4{bZN2=`YG(!=VsbnVLyX4-s3TrKbQi}(0J)tvY
z(8*MxaM$%SGbu{O)nui5)DzS<wvpD8b7X+%TkB4Anwj$s=HD|-90ROCiUm_+?&7*L
zdL<+Uc0LFlxxSNuB~ScOh^Iq)lZz`zTn&hl{9W0gh{Niu-xaLuQRjPYHb?^U{}$ml
zr|_myDa>a%kW<&wN+g(^o0p{HQeyXkNP+D(SR5r;f?o(vOZWnx`sOG8>`ez%*MrQR
z=a4l;@21sK$nv&img<=Mw&e;efB^w16v?zFX643zF(xtX52Okp#4f at Sgf6nq`DT$B
zM&tf;H=VOp=GtzlYIVB9 at OYpz<gBqe=A}WaV~{Ny0U-y#O|IvK5loIPfhL9C_6)+b
z3C1Xbtt+{Jdq{%<#phgeNP0Vwq8Co4(q(kFq?1i{v~LN}%Mdfs?8lM;y>C2R at v_X)
z(1ZyO7i9%7ImQtKE5HK2>eZ+hNn9<}+KmM#j-M-UB(4ohD*ib8;uAlQePxRSH at Q`Q
z!(NT93v^~ns+1wSEM3o#O1f9OKGUjshEaj$8)FuKiY4o;roYb<0@|4iRAYi*FS;Cc
zyv*BdBDK=vCDiWr!eOwWTaB|gS**T)23O_u=HQ<J+}(&37gE#v%`15Z_A06e(e|*U
z&fQhUC9k}B-S4MiR2+F;a&>=IM^FU#!y_#_N6I#IB{JU>2&Y5xlovf+c=`&sjTrtJ
zEL+G6ht-1LGuFSsXb-#@uE(5Nv09D!FaMB%gIiJBhr8)cC=JTlKyVN>ziCM7tmLCM
zy!j)EH>^>O`9;>KgZ&VQ`=#sPh3YWUiniUzkk(ZXzEBSDm#xJ1m9LolP8)S(GSyQ1
ze4dz*yf1bsat**hAd<Wl;uvTN3-2#!)mTS-M8|<?8c0Zf?UYl4z{717f at TC17|e*k
z$Hyrcr8Q;L8L~a|FrydZGpTAqrKgd99efQFXl;LNRBqS|AevgyJU(Jo0SC-f_6|;3
zQ(`ryzngJT`ke8LqBLx+C6P-*iAe=JrUlC#yFt}nn`QYCmU(e$&a=T7dMMJPP?+|-
zG9EFATEdz-- at -87N+T$2pm1-eLPvG0sSGDOAqM;VoHEk{eM0H3wY^98%R?6tmWYZw
zxCm{)`>?F|#Gz$NQ at D^HWW0g7Rg?!0;fX_Oz(wpE at 2O-QOL_-bOx~nFyd5iHTvE%2
z>Tdh`caLkn!jAD{!x8AN62dF9hI2)HkI3Edk4Ra^P(&ivI<R}3abcR+JYTucHuf=J
zp<>yuj6;nNPt(2bz;{D4>uTeGdDP<P2SnZb_Q at ZhI}^bGZdI%dWR4&un-3au&-)8$
zD-<tHdJU$-H(6x1T*k at tq+!4k_d9(S%<iCFY at Z*m6TwO`%%Ku(By38GykyiSx^<}m
z=eFv<?a7eVZJ0k-h at Fl5LnP<@2#;+ueA)}zEyOrKCldWzA*{^#(Jz{5gqysB!a)$y
z at AhXNKIbTy*mss)7K0sU>qvhXASWjG2zYjnMXXQ-8v64dd at inRql04g94*9mH(j*d
zlg>!Q5U~(TNI?V=$_>R9yRuFac6N5mxJSg>m_*104+^tNae~dq`z3?iX$pUL7J-!)
zX>lU$yLZXCe^L at v9cXThhE=5BxQLf7J4S)5qSQUA<Ab11qeZOf&PQ{K=jp2p%jCf|
zg>mu8K)6&6nHKBDF{Bf%OCj~q3}L&$a3zZduSP<x^G`(gswx%+nO1cstEWRdEkMk8
zn-^y;LT>n~x^*&e_G!^}{Er62W?m*?-<0)RCsnh1Tt|xcpH|$jl^cnN4{WVVZ_(Qz
zK05+kTYfFNeW_fjO6ET#(5_;hX9LR~yv4t%bBEJln<My1sY%Jn?SXbuyI`h>Z>Kfo
z@)WF9Xn<fpk&{cS8d~2<J2Kv~C2;5SNFp)oLhY+-C>bDRz&rF{%&@dYdmE5$ONilB
zXjq!=BdRwWwO2};HO=5f!cP`JM9q5VTK@`-_B17nj)f%y&XN$j^rrBvOt^$QsfnvK
zdoftXknb|Z8}WRYP(fkEfy;9<bCw{8p=QW-Y!`2$mFMa at ri9t*ktV%xBw2{V2)?25
z6cPObF{KH;@B(EViFb!mu at Z~^8nRWW{JTA27 at Tge2?IH#|FteE5YLSB+3A8T9W+ct
zL0sTCfh8l&PII2Sl65Fe34_f>cV5j!BO^c$zr(DR9u>cu-OS3=U%IM4x%=*!yb!FF
z?Yg+h9x{>5ES22$F_V`A{thY$<O<F0`P{3AlRz(%vNL-^q?N%n7a%MmO61j@|B at x(
zc*3>imPs8J=Zs!-Q)BV)7lqsHH+Xs9ln|aX at WC;Ixi?E&aumVzE?tNCYF+4*%JY4c
z^zB at 9XI1V;&o-BNb|oB|8UfP(Mt1y`sdO9IeQD7JhR4Q=1IM{?gS5sn04O6W4^a_e
zcgNc3mo)v$L^i8-D(9tYlQRPmyle86Kyx$+ZDjDb)`O8A$%I>jtNBacoVF(*nn5{a
zmP!?rBUr^&v1mkUNXjvF(E;Sp2l;}G4kWcpB)5WUd4grC3Zn>fl2s|E)!|D_uB&AR
z)IBU_bDtpxf#zxFMA#|$4x0&UMB_%=>=!v$NBSv&^Bb<ws~OQq-zkFN5%5JrzkZ3w
z1M2QqT7BZpehf9HON58)I)_i*)*95P`avF5=5x`iwDm=hfH}FceFRJQph9=e-!{WK
z?R?NtICQn0K}k_%fgm}$CVz=JVTpWEvPlU}_WlZq9MA+sKOWt|rJbzJX+3Ni1D<cK
z6$rHES(*O9EnzEV!E!4;@cxw*>3q#u$(m;^wY~~{Xa&!jr2P}W8(-j+L!_KKDH9F$
zY<*BoM)Zjc%q*BP7Z7rcseK at Fl>l13V>meZA_0;`ARJz#>2P2a1_pZ%8q8C$#fSRR
zlB8s+6;voUVbslOEK(}Bxe7891<9!WD{#>)WMe{LgwKwwDN0YHnNj)SCIKj8mYl=u
zSd9$eZin(~OuBZg_Ln(=WT8_%&hi5B_5QcpeGli{<9<sm<5vaHuIZi;0F}4aQ<g<o
z&7t-$$upx$rkVrO#zbo4JQTdl>tK>eI#ZGa=t4-RJQ8NFxpRCa(xQvnwQ^eICs=xf
zihX at 8G>H<;^Nh_)dL+HKSDnpCZVSrT2j_iAn6RazAJ|jNk9e$PhPB%+$jQan{0`BM
z&_8T??)ipMu98MmKIJKV5wFTwt<1iNp9N}@`iA9&(ML40KC%0ZbY`bET$^J#)vCR`
zr~82f9}-|tBCUCYOsZi$(_OwWgNb0Ff5Ea?#ym&p-&QNuPPldpS(}7vmRWAZS40Qj
zCSa^JAyfC15~@wFuD?2M?gqu~p*<ehnW@)D7FA=l_x-I749$B^IxOd;Z1oRzNoZal
zZGe<n1~fKUb&8H!JswRPdqPH;tqnphWtMA6QM)MyMu4 at gqt-nKbP()jIpotWaqwcn
zbK`ipu-95r?2sAY63NQQYur*y*^Dz8n(9IP#nu?}3YjWSEr at rd(y&H=K*qW`kv+tC
z`z*X|CY-9Jqx*GWfdgw at crYdJIO%SvONIq_3+z>|@6AU+Tv_H8I^0&-e}BE>Gh!C5
zEq+A<O#8s^)r_WUesO+eq>iIzq&cb$Cp+U>@FznKRUSyrzp6<~&JD4_T>sM|RYx@?
zVn{lLj1YxF?eJ-&gxM_*RxNK%C$#voETjh)wjD65i at UZam|N_|1#;$|6NglmZ!f1$
zB``){(iJM)J&IIN9D9RqS<U~_wD0q$JVQqI&(X%9gIPgzgbR~$NQ<5u-AYez=zXO9
za#30oVOQe0Kr6hB6Sew;lEU5;>x|F1%hqt+uDE{Sb7%z4K5!o}w3WF^LS;9CE4I$I
ze;hyb{rgLdm*3=RFzu2)s&SzXF48rKEK&b)(z0Q0MLW@%)dmjAT?KDBLRnAozDyir
z2SS&ERwUYIlNx8_7+kRY)gQ4>?{88q47hn at -!(G~asveR6ZHt($nlYNZzS675F`5n
z;E*?$)`k`ZqR|#q!PpY`MuUzbVec`k9bolV-a$uT&TDXz0`SBl3pqH3%Jj8nR!1Sv
zH|}@>P}=>1s+K_|M0vu{5ddZ^GlbShQSsRYO_wI9qqAn at al>HfsKW9tI1CF@&{kt=
zKXroxNB}qW3Y<#D`5!=eYV$sW9&UD)G-VRBV6RCTl4z9R6b`<MUiQG#cV(2F at kB#T
zX|P}fIz!R_{U!K;$#`VJj78+ at 4QCbAX#EAyip56ckz!%w_zz3NUNV>PyW{}qZQEGu
zn>Xkfhjs^nv^xLsr9Kpmq1m})r`J1QtF4d6UZ_X&0MSY7+oA at Cj!}Kl9n-*0070tP
zMj9PR*&L|6FwZ2sVd;=!mDi3<WbRg=?}}APA*IQu5`9x3h#vt=$G=%+Et33{j=(dg
zQ6QNyRz4;VnfhZ>t9xG^gXWcp9$}51#}30B*X<Q^K|f$}KPS_Mq9BJ9D7`_0mTrkB
z)G$+*oc%xXE#=7P0CgJOM{{}DrJt1n3%Ha11+VEyJVC$WPuC1i0LeD%WglOlW9W}r
zGB?=NBbN&>fb0m`CH+v?V6~sC^CF$;Irk?+&Q8?6vM&()ZDaXcQGZd^T|*$5lwDje
zv+yDti1{GQm1R4-0NP!Y$@S-F^%<Q|B2XZv*>b2bsxYE$Bt_a{HWRYs?F?*Q<l+Q3
zm>6%?9!=p%Hn^d)L!L7~ePH8|dgg}Bp06U)&ii~yVpi7;+}RaR^nK4_<%tj!p6b#d
zP at Z3_#L8*m?0;{_S^AR7M_P<;2u$A3OyR5Hg~C28<uEvZ{@N*Nf*N2#f)J6Djh2FK
zSap_S<iec+jmP}{W at nsbiF~ObaRLa^k7;#MVPTkitX0k+q~~$0ay=M3P&YJ)R}Hem
zHmyDTh%)uzFKyQem3dmSZdJl|#tZimuRixd;vUW(#~oGHP2eMahPH$PH?5w}o+1^D
z?Z!{epnbt5pf)g=`VF3izo2NY)-%EF>cwJpfw&mZweW0Km$p5z$@lh}AAKJnBm-Vk
zBxPhCC~Wwd5S^HlC5`;MpaYe7 at BYl=_=pFqSfym)Awk%9v2 at +fgZ^)atj$-)NXzHZ
zyPL<)A3WZ{VC+z9t6^;ezcC%mYjonY3ReE&1FSTH?XSbs7zwvEJrq%6bur~XOMP&$
zVlJfI*yIY#P<6u8ugn&eSN`PT7mr(v at V+F**h)EQsCx2?SFndsKJTJlM&{W3%T6q+
z<3hfcdDOjv#1PFU+L%E5QX at E9l_s)&WqXFg*`T$;t2;sl;;L({fx1&*=`i`Xy!bfm
z_f!04xiyM*J-ft@>H=64)Qp6tp}mG~#<~@3&DRi#iipO>mNE#b-SeOwgcUzR$}eSv
z`_vt4yRP0v+HE9#O7$3Was8wkcLg4~w{9p(ZCx$uQS<lYbFr)&+FK}bud_s+)%BNr
zTW+|fOY9Y&C2c at w#^VJSg;7N$cj1+N31n-fyd4#!BRfE~xG_T>3?yw~-Wu3~wNQoW
zQaD-zJn#8@%qTJz|02x@>%PMJ%otWIYRYn>JO<3$YF5cIYPo?uZuD(|PEA?8#u-Y^
z5NydIvlF=}HZ*Ts6M}1sI&9^u(IAa>oEmDVY+IrurF)`(PY$gFdW1)R%Ml-F8P~=K
z8zKGS4v!B6J9EA;z3(T<N#DTd*fF&Rm{-8y9^<$x0@?*>w2gq8+8e~`OQ}`<$!lVg
z;oDCVH9<KD>s3>YtCtck%YioI;&!kI+(YE7hd6>#(4t9Xp)B};rp%8DDGN-;3dCLH
zY*PMfzXvlZkK{V+;D<bm>28HwTb6Rx^;9T8a4Lahxbc#<j~<*1uNP)#rP>io^d&%-
z!J!dtQ?Y~;Ru9oQ_4rlqD{i|#G9TbrmZzQbLF1L4hHyl&*qnbteRNX|60oRx^_JPn
zW;8kbCN95f0#ofks=j=6%!UU5z;}Gf at M!D?=8PNv{kh$n=UP7{a6Xw6q^jW~;>6(p
zp$|{7K3x`PS_RhtaJv-?bgH{Ah2!)CV()*+O?Q+|lDH0qP1pFhvHi at p`<)Xuh~fhC
zy(kBUwWxd5EZc5Rxc<atNE)}~8}cN$s6t;wI8zM+^FCL${u3$~F9BI&Y`vq1%wLJ=
zI33iRTxj{rDiL0r+RAl_wJhP!+$0vpO3s#OKflT=zY}CYT*QeiI9fGstZoINP{^&c
ztG-eAZLK34e at 1xv0$qyXR3Mz~9l~P#(AR%yKLbgU(16K{Wg^tM6S!~#THol&W1?CH
zmG^rIfs^{(jpq%s_f;&&ZJ?_!@SZBh8&cgN27G5u5GR6P`*=!UCIx;F?2bD_v7q4{
zm8G&a5ah$v!eAj(g#_oGO5-S$6!`F_z>w3Toh2~4AtnM2uBNOS71_Bl;C;Y%^V|&{
zs+rUQBiyI0-DxaggL8HYu!pfa|HGqNTX`5PTmbTZR<|Wa8VLyOZo5D0?{L8J89_7~
zEKB5`Fyc&RKQkoAJE5XTo7|I_l at tWHkP=Er;tXkVEIz}w%)t$D(BVjz^Fb3AHpKm)
z)y4OM&{b5APV6&n88dI%Ku`#OwrgbEWGHj#Mdmg=;u!XLw+NdHb_Y*_s2g)kbxN~3
ziy+%@i76bTkefUGtox<}>~2KLOKmk7OiN!2Zezd&A<KbewLB`9^NN|L8{}+a6 at gD2
zubIMjdnVd)nexdZUI-tum~=kYf9=fez#;MV4>7j&C2ZpKX5w%}QAgx(7%2T>o1i04
zav`9<ruzwVyTzwoBEPfH_NWKdJ`zOuZX at v%P;Vl~vJ`Y1n?7rBHK)d!7RwKANoiH#
zc3u;JNQnbjt~)8Icf7vzN5ro{-SNc#VasyOjOe$xVk=we#P6Ssx22b{1=Ehb^V*#6
zD-AkJv{>GeeEQI2DiV5;-CcGd&R~>8*;RTK+bU2d)UeTHXVjZ$M|O)d0>U+=+JvbL
zV^YNNKwas#^aOW)r{p}*I>;MKeP`_&;t^CFyDuzLF#yQs4zhtvPVbBcQW8oz<HYf(
zpeKv=HaK;!0dCo54HEl5TAY$A7ZAhpaFmawUZ|d<E;h`Q(+Sz(2~-BuC3iRW*69VB
z<qnz23K$J~WwL8S%hlpqt5$AG85Ql5)O>-=9|;LjvWgSBHU5TI;{M0D0O?)=Z6M!J
z2Kmk+DPQ;Z at z1O$u3s3>^`?iT0Q!O%?-N%eLAbI_)#3%u5V7lIp5L}-zoZqAsx$64
zLA7j!3R6LK;A=#|V<9LiI!v&pMn5worjScPl26r^G73^zJWE38D*X16^HND+)u|{~
z8^hE{+xo9nNW%t7X@%vnW3WyQ7v)xXKjjbZe2ITv82oZY<nc3Z#<xr(ZkAbC=U~Ep
zg#@rhH<(wqhq}+erKrS{cH4pzKzKnMimcs>y%Bz|4Ns?9uAFGb+?Zi=JqUZn?CR{@
z!~JT9Dlzmk<T5=Zy$N&lNp>YjjbQv at Jr%3coREsz-_P(I78ft!-<BpZT3~=B1_w7q
zP1x_a5-T`8oD=6TZ~R-QxR%D(d7~`OB!sArDrCg26G}IJp}g!lkF$v{|LO(O?Q)yV
z5qq=QQ$7NblW1C9BZVSYK{yMvk~avU`Mb7e&8wTdROaEBMd(y|c=o)S&!qhPe&gHI
z#S>9Lc=-vXx=aHmf2E|dj5=zU-^6=}&MEyvGBC+Wss8-<1qf7<@Q5Ouh9xb?0_+#D
zOoLheBZv1?r{HaE!uG~UclF?i-lbRD=?!nU(zoM>Uqexu^q7M9z<YnR?&}9c65pzN
zmtveCT96S_bP<3W5F1;{E!5C5o4zVQgb3DY$JI7eYaeH-=V^Gq4|WXN|9_bMSJ at lo
z(%mr1oOasiuhg5<JLaB)zX_4P0+yGh^cZtdZFE0PKh_3qc4}};QnhjhE|Y$iLuD^8
zP4<Vp?i_kZzN9>N4bwp7MV5V27U#6?;%x&)*?MBs?;9vrVn`IXcw5e1Z8hc_&5a-k
z01nA5CT>)}$|ygcg{n30EDzjF9;8fAmA&Gn1iy(7OS<-$oR`LYtAm`+UQ>-JU%&DN
zVK<|cm%6G)h=GZoVrMX4muc6U`b<c9PfX`};Ns&!$lmJ(8IJgxXZ`tUk;?uUUSc91
zdJYHRfUp1Rom(QA)mIRgkxW8i*hWBL$!Kt>0j(NGS)@VE5v|%6hv8^72xqH&aM=CR
zCI9!`9baCqNMuT}Y+k1r>-KO8Vpyc2LXJtpl`F8TOJhG1!O!07`s^iG)GM<L#HMx)
z()ZiMXmz at 2{_t*Lg&#r!)ei(f`Pg<5i9u3QsyVf~#OX7_VoMxSst*(P#D{_wr^JMd
zE}_E=UWP%o78QptQC<OXr|bl;k56y|n<k4<Nk2<yPSEy|%=Sj~v(BEv2ACLvTqaW(
z&g}?76{3=IrxL1YjBh<}6ImcpCP2l3${xxbST@?eQ`=YVJK{75GwAWw0>8?Wb8eV`
zR48=1(5TaYv!?9?5cjNcSmxokI22yI3k3k3dbZ}jsetK8;UBN?!Y!}x&wYvAxq;(^
zh5lbITFEo)#KmFO9T0_q&M6}NN8yyoPy at S5o56aLoN{J9q+b>g=pLg02)T0hdMgnZ
zuX`xPIQUP41cyyiY`y5#p)m_x8>HQ~<K5Ok;`rxJhGuQFFN%zovt^-?W40OR^gCxF
zur_=a*^nuMkg%>E!8{iqWn+S_U;yWoJ=J%N1KDfYR2|;^%${PMdg^3&uc~Zsa5bZa
z_HKoW6H%!punNf64yPu&aA&w}9G33YDGF&jDRFca7WlbPD18??NPKO|Cjm~#uFCu2
zapD)BMS37H5Dl2?hw#ybE-alYZ6 at bUM{Ir{z80t3(s%M?l^(9O=CXT#Ikz{o1IW7p
zo{<(Z)s!LO)_m>W;+3nAbdCjI9B{!XbE(phL2MsG+B^j8Z1kpHPJw(_u=WKK<G612
zU)2rR#o<4^_HNmo#hMWcK}iLMCspHny6w%u at UG|uw?}%TLb=8gj(T0QB#(GYIBKVU
zY*)^fZmzjLjcr at yZoylL<C1l=1q at k)FahN$70eI64WMiT!$`m8TuR^3QLBp~yo3xT
zLdI4qUc+iZTMB%D<|skJEW?JzS`N87XNQY6MQY!8eu{+rlQi(g_*o)q^`QQZzio{d
zZHo+}YhvdQbGm`6l+3}9`SWlm5=o$~M`0+%+_kFUU(som^BjJLXOk9`-S$gg*Lpxj
z`-rN+`ZpP~6NLaf-t>O1a${AA4DSEbD~ZX}?7EO2PDVgJ9MYbcJ_FpS))gN)0$4jt
zW#@AF<w4QrKs#Z|X4*yVg?Ia-6_+(#;a{;#xTD}Z at f%<ghsD7d-37S(DVWh4hq?`x
zP#yT+v<uu=a|x?;noo^w2mj~_7{qZ7K at 6jP-{uh5aFmR>b|q!uK(#{V`RvNyFEWI?
z4&XH!In=So&}0j#6)8-$JMBFq!J-7^q`9w>K+6MBxf6#+QJ8&M#BX3qI>h{&<dER4
zi%Fi+lmmin)~=JCkRyWp?<NU?z?e_oA<n2{{Hh3%*{q5XxKJ6 at oCp&-#@j!N|5@~(
zJh+8Y6!0CLGLISaMFZ00)gb;P??e3Wtx;ee%rHQ5+*ACsZ6dE*DLYg#`M!GO9}K15
zsd?!7KLNG7r6s2<HRctu&@9dex5`Vqmhw at gHuo|64|P7OrJO{eRx*}v8E|V~Y0H36
zp(1g0o93BThob#TN=*N>0iO<e$%+w!){PENrw5g7Uel$Hq$?nF@#cap7xT?Hn6?q#
z4N at d{93wH<_+gdpU(4f1VRHL5fC(Mqzq6ecu%g$%_O2b;=j#tlUYPyky1;0kuh7)3
zP+Rc!@V)qKyfB!oYNY%Oo55|Q-9vQa63=ZepnNZse-H0>+w9FgJl9 at Nj|O7U^U9hp
zU at po3-nXgmk^n_sVvYC+duymF)$0 at adA14(WHD8ur%7Vay;76vjro_}x(*NS-kfp;
zXb#d}kI+H07fSbTV}65 at NOc_e4l@iz5TnrChex~d_R1k3q(6Z1|MKznyVG6q^=EFz
zyU|5c->!rG@}5{<g>=<AJp9>rk*RgG3zR9JGI#dwmYANXN{+#d`ihP(#wf|-C=Tz8
z|JWpor?Du`=6m^!u?_xFnPMk%`>k)Q4q^f01!dum7ts!BYn{ph-v!8j;Pe;6(@XWR
z(&XARS45}@mJM4QiiK7RCa0WCNMb`j-#FnpN&-a<<K_{}qy-~=t}^Pfs&VEEt-Sn-
zrB!`i9pyTAxsO0_S*pu`3cd0s8wTmWa5Ah50LL)6*szbAWL``pGV?{D1 at LccymQI)
zXyWsR3+<)F_A*dnqd*K at w+!qK5fl-kwheyeJk{Cf$_Cwbf}-mHa;6~55G2?xOe&5M
zL$9=b=FhYTBxo=;SZSFdr{gz)e_Gf_#rbZFViP(K4>}eC_HO_d`0v2k9iQSgR`8)@
z8fvPh38|cnw9AJ3qn2VRTDX;{#_I!<OP4O!vA@}!ouJd79CC!@oBeLY+ZUClABmkl
zuiGR)GPo_ at gM99C)lX*Xqt2?9u))rRd+judmI0PGND`E%lY`D6J?o2g#PPY_2w2Yo
zfl$c?WHtwALuN#f_5yG60%z8&&$buXg&P6#$f%-v^Ax_V!lxVv-deO&f71dkshKD)
zw9ddWyg9ECeZzgWrnjT)kIw%7m|N2~sZDeCO7a5p*4d_fwgc!~g<aat(~xi|!Q2~E
zef5!a5#^RU`v`@16K80kbOIf~|90myUp5OPQgQUjC0=Z^@)7ibiS at eG-kqS}0!bi^
z{AQZL8|)uC(Q+-8F;z9B0dbac9$G&(-b`o)O>@gqE?AU!9+F1Z0kCo84O5HN4yYeV
zX~land&`QHpIctQ(?Yj{w?*xql(vyQ5u0`>On-;<uApOzq~`TxU82%3dbwEA_`IHU
z1~vQlWE5k|eMc(2?C1rdghx`k+notjtvHiGNfDQ3h`2+?(Qfwr-y8e{>K$o16Rm7o
z-Oq)N5&(eLHdJY{oFqpD<rH88xaJ%2^?ze)N_}ntNO%;$ohC%ngRd&xnV8m4i+=~>
zh;KzZk2pssL_QGl$EBL8Zgt3QANz}d(Dy2tJh=Hn at Wo~Yfc3``PKL>{P6P`+HZ*QI
z;SFhtY5V at V%J=Hhfco+|;vtm%Lt`1yk9vR`wV)7K$KRWtpY)~zPZI3*`$HXK)VtKf
zq5yyF&ljHe78^`9%e{I`=Fj>KzJ at RPCiV=<FAnLq_lm)P?F~r(YDVlVy)enA>`P4g
z*$=rx)2SSBY=XSB>sw&!M&@(p+n&pV*ev{S<S(rd`7I+Lb_&IGw<`@%$*k2OwN<NU
z^nGP6x7qXeTx3s9D=}VHW^ra2Z*b1IVP_sK*eCnHpf9Igo06~vS!yg3Z#s#vH$1(!
zDG4uAT;SF)tK#~+d126dtazrt_ZR%plllh65<D1x83%pKC+o^U%(LMVvV9V<N5T5P
z5+*&YYK0*og`)r996+fkdma1`!)vvibJ<d!t<qZ02u70XcWbvXuaI!s at 3y?cn)oGr
zmI;U6E=4?#ulM=E(1nU#`M$hQeTJ$c#xWzu-hd-&6=%xM(k^Rek=I}=qOf<Q%tufI
zyraPFeY&}8-_ipxA1E9ZIb~R{WUqiA!Yf~GW-0KT%oqc~D^7xJR4Tu6%+EpU88BC5
zD|zj$B>gT!+ejeXA!ZC3CC-&_PfQKOX6Vzr)j|tL2m~GBUidBWI>oIN|GklD*J5BI
z$(D(d1FH2zTw+(C)(Z(qwYl%lU`J*eL}<tG&;XimXmyFqT at d)w2pEJUp0?Y#M at -kD
zG37`AJHCDGWK}{YkGWyUw_SdR@(9DTtG`Td!N5nx%3mYV+<zA6Kdq0Di`?<u-s#wG
z8<*qw=!cR(b$UHHI9_XIdK(Z*o7}N`SnJy(j3!o9r5z3$+pPv6s`HX*ELsRJQAehY
zq;^>q*Jk3a1Ur(}5ht9bq=HWOlO~~GQahDuMZdw+D8=9jj2_2==29)tG~cJhXMU=A
z3Pab)<Gcw!VGJ3baC44sK;+Oz^VXLiFcf0+^ChSLSv{`zh>TukdiEj$v7k`3Ac)xj
zm#s6vkoN2aXH+6QBlQ5NHNE$NruR1uJH?*-VE$b#oM%XE%cRcC&tG>FBYyI+3=YjS
zSXsCG;0tLzY*f(tHgTT#$f@@YNf3AmZ3!&zg=`@!8nJ09Df{dRGK)@_OJ{AHWjfZV
zpw&#<h^*FND>gioIblS#eez|G;XK at 9h+%i2)L8qH2cyyL{dDh+QFWg-c2>GB3|ZDi
zHIDxDzU`$dIt1`kp`R~B*Lv_>%=8UZ*xm@;LCTOK?zd2(nlJoY-9kn$G;G|hP7XIL
z4|NbQkeqlUOdt}e+v!=(oQ9 at g+H{4FIz(G~oS&#halSw`;y`<!uiO7#=Fgg`^rEQ!
z*#MKF!})1Fko^m%Tns3UiDen at 0_Jscr~HX?qv22IQH9vD6(RFCZO$P-_aSRU%au;X
z)DeGG7kbeHHq3+w^P3%wfSvXpHt##u(?C+>*iCm(*kbN>dj{@uJbEi0wj|G`v%}7#
zI012J*?ncrK4Pus+w=fIFMcLCx@;A4;yim~ELPSj!HeKjf$d_8ETaE<{C_TT4i0+=
zDY>5Q*G-izE1Xilf>-wDZ&d|I^m9z%2i6ds84m}0$a~Sq29xT~14biy(2wJL<=X<q
z8YY;O<O4y&{s3{k;?oua1@&U!Ry|R2U^|@bF9CcB^j1$!kxpc~0l?%zgx(@9Dy_tM
zW^KJ&+hm}RZgwbDOl6R{1AUyrkwHV(;&u;j2kMj7P$2*_K+M0U1H@;U;oPWsuYW8m
zGn at 0=OgkJku;ksTVwsdoNOa99zm*MrDmpERz?duuLN*ZF!DSm^FB9A?L{csE=c-rQ
zEb4cd at H-tEKe%V{wQg+J(?PEIp1_1$IAY*n1!W%l{L1}!f}{wuAl at OdDcNb_O9sUj
z(UKSzzVH3sbM*hq>2Z}(W8Ku>K!{TQYTcX=;{b>Oi7ME!9=SaVeUK+!2Mr$*%~S}y
zTdn(9{~$brNz!*71Vv+v_Jlm&RC0uy**uYCiBX_L*7hNp3Jry(`1tB+BJlIUi7iIy
zusr<@l$82tlzi4|m19i0wP4 at 8=^HHSH-6rm?Urfv*40|X;J(p)HY}zH#M-6_;!hBZ
zv9(-O at lwJ)yx-XRI4g&w5i^5IPI!YjNHtLvcy!HjmsF7C<w8Q*;enqAFDs8+KUT%c
zd~`XIkqvCniJ(6xb=~K`*`QuT?k8Fabj at b5U==SNw9)#drzz*PD}!nesWTm^Enyw3
zL5ZXNo8Ypa8AQfEBHi#L6u(UPJn3|GyPCJoRNrhY@%Xd7*<*O>$-<pM$yP1tuATy~
zBMGfkBT(4D-iW!C#=Y7?0S at mg)Pwq0h4<=}$dndUfdtX;^zT*nD^An)9bp=+H;-A6
zhG!j>J()G)STr=#0e=Dy@==aWc&H~t6`#pM9>zEA=T7#VZPWW($@4vils^!F*+6Cv
z`RPRa7^3~W^r%!UVGC_~_iI4wy&crfOef#F_RyKWcx(l>_697)UBE)-Eck at n%$C#x
zoWXfbySl5s6x4fO<1Pav6pfTigOuj+&-6RL%rk6Q at _28y>i;b%^aluZ;dJ)Wpg|c-
zWfU1AYje5OnY2g|RA{@(C6O3>++ki<r_X3yhMveGRe%X|)!U^Wd~gx~W`GJ14;>e5
zCg7h4+sr#WO||j!pCdL3{gNJ%X!z<qr7TnE;hcFI at wrYHK$j?ARm;iCYVb=azp<}F
z?}{L#<FOgN;?qMR_?Ah at b4#A5e11q|qu at YeU!b|quCF`(f%X`;hckKUQZ!Y?eCSfi
zhE+SmpqbU4hl5;NCl6!%f>C1T36DZX at FwEX31P>*RHe*~yiItCX~ll?3gtE)Ig+1u
zYidD9DwVp2&_??aftM;0etRiT4z(@pyl~$aclFI4yML%?Er}&(!J8Wtdo<-J<Iz~*
z$`_f$hxN*`7`Uz1Qr#BPminII=tXssIpg|?Wee<l0wI4E7t}u9jmlQzIx^Q%0Q?@6
z|MW@;B*@OWeYg!KKa7%370^QSJ$+xpr|qUcU?eKMOmsD{>cNDM+lECD>#7m?1k!iN
zC<$0u=By5uvy;!#!7zdKQp>B~KW(bD)ws?Fo3aMm++39XX`VuoeMG#JLzOT0#mfX`
z^JN4z{-nossIY9_?V!zQSPnw7Qd}R%IZ7 at sF&|?RB22$<V&n^_LM)f_(;~;Nm?u2Z
zw#=BLKkk^|9^{S#GSiACOX)b0QSGN3BU)&1+}9zvj80<h at naf@r=?0>XSlG&{F1yu
zr_nX}89xLCXtXJY%D9B}b+%;H7M3b>n*>4&JKY6OdUS at 4(+x5YzaH?yiLCtZH01<w
zmvZ9EKknf<8UXccf*Fi76vXwscI(0Lr6<7zEa-{)U=%^IUCh-ugpf+oK&HuL%&WwP
zk`9hn%XbtSXDtCC;6eAc at I4NWGA^9AA;2MiH>qKqQu=Vn)bHX8Jlk9HrV;qX2VyP9
z-^-(!*FHG)vs~B73Q|L3{QD*ERyLREY!Qg~tC3pENV<s&tM)#p6rs+=mTfKr!OUMo
z%~$OCFm6NG8+!f)`%oNd-&Ph>?VWj`^HMeuauV30d;5B*UF at vPE#>K!faqI&o}HM@
z$mFKMsoM6@@{c(;Gw0dOCySBFHiIxJ^yMl4J^c&MV at 0rW>Fd{csKCkHib1GUMmosj
zorON(RldVxoZL7Wzc|_@*FreTAp1k5j>f>_I2d6PK~k#nMl`qloWVAKVSh%KCe}zw
z```ex!xev<q3?Z4yJru`c=awyupuirrvy^~V}57-jVikyJPs+zS0p~b6>!Ua2pul}
z&V%n=Vyp^40qCs_W!%gyg&#OZ00~W?<{4(lbSSMA-<eM&P8v05B8ZjH_NJ<OpcDDN
zO00=<^$m-~P~y_~DtgP3TCE$`r;<>n%*DnvklNhG+GZXu4zWffhK|T_bXUkK?Lpp6
z!o*Wjbp=69J{2HoVTTE)hTCNYOf*Y{G~z>O1Gfq1nAT-}dRIqQX2<4Se6i$M>@R5I
zCf{W@@8N0Je!~rdR@!SvwCReIA)5zG;n;`VNQ$8Z9PJU)ZTl&0M$M%F!%_Q+UI#dO
z{NMrDhhRCag{W*&gc#!Zb7kqE<Pl_O at iBXR3lvDy?W at gu(aw{G#2YpbX>7rxv2^dv
z at Gf@h3cg=6D67#k1c^YKCmO4`Ds$+dqawdo#@q6ZxI(u-*O$UnrcQ)t62;@fFMo57
z11k$36J*xIa+MG2ml~iCKF>xV0h2~JXFD?#S6EziROBjIjwx3~92Oj{&GBF?N_#CJ
z&qo$a2g=EXB_+yv at 2H&#g!=DrWoEA;0ph|QO;Tqe>tj?Or}7|V=}nVcM?r5 at N_h&W
z1~uV8tc3<8w!6AzDYwVn?ZZo4j+OOoI~N*a2dxTH9)mDO9z>1y7Ik&`_*W5zQ-U5d
zpvy`lsmc|=g?M}3QytPw5 at KTCb$A`NU1tCsY0qYAdIO29w)y=_uFhZ3i*SO&(8B!6
z_J`|4s59Q=zEs{FFsc}PlupAv`t*@}<Q?pzna^iW&d at G`+lvPizJ(n}BC`ps-D%Wl
z+c4jMh`{?#a^fc)T at BjMK%zIf*6Aw`U2EJ10#&maQQMpEHWNmqr1om~NJNPP at k*_Z
zWd)LcB&BZ~P81K%Sg*T-%U7+ee9SX9=oA0%ZpXxpE=Euy=PS1`l{jVcb4gm!w9m5*
zT|*o-ZLqhcm$Evm85P9$=`M?OLZrrKS6)Hl;X<VklWBDfdsSoDAsQQruLUf7*l+qZ
zyu)Z=>~a}ggSjRHHZA)SM1ZTK at f=eJ**>FS&Ld~qUqLFW8Wk)bYGXAg7ae6#XD*jQ
zP=sKz>1<DI(kj6K$!x_r(kzN5h?Y~(WjqWV4HonP^11ie6k70qB|E{ISm)>9N0lL8
zwPmjAH+(D7OrQD3EvmuODLsZ(kbdLxOZ&+ at E7itX<6u8DF0HVKC51jF2CkXmpHR(x
zybT6=nUoP_8b4hVQm$m0%K}x$Nde85_2Olpm&6a!946R;XrFj>-dK at Fu~(MKr%t&l
zPl0_OtWstt36bd1{0EpQg(}7i{SLJ`02w)*z_H9f6dn0v_xI&_8+CHpDB-WI=B_+E
zv}K-0z*y7P!81Bbfh~x)*fX#uK;CQ3lS_k8JO0bd?3JmiCH!Ylk9LaQtuht8MzQ#M
zx89WP1l?dPJ-{3CWs~r9Kv0EJ^~(aapf%@|;L{o-%E3 at eF#I=8l6uz`F7B3dZ{A<j
z3;yPID}zca5nKde&aMeI^XRvRF`9X!jL|#{VfAiY3VP<tSiHy~pmv6(sWv41aza8X
z{nPQB2twcARuAVn>u%9Ni}?ti!ty59Ls&B%q3uB2RI%9{rZ1tJ*Xn(R2{NV5#h^G1
zAbA%0JH$hO<oKWdzGt63wXGm(LSDoVGz7N?sb|-B{%QSpWlmMvX at jGsgfR*`g$lPL
zPhm<X0onG{vR#k+8`uZuiQGzfO-O-0pwZqb>RH(sn58p`0&K!xX-{dv_J#3Gie3ud
z=R>`p at dJu(9(H5=9&s}Bl6LC_8H7qYR1j0EDEnLF^r9%v@*XO`s7a(ZGPyYqi-q<C
zcH8809z&8$!kx0ssY59J7b_&io95DW?_rI({7*BQtq9E>@!9pxuo+zXTt*azXI0?-
z>|#CsJ^=A5#Vp7Wzh0f$=9<n|cN#QIL(rK)rfCSq{SAkkmCZs$REK~4kZz`Hq(^K}
zx_}3_@!5g@!Y)M3LkYq5tNOoLA1Q7NyeUCD08N1cbT|RP2Tvb$jSkZmA*4Qkbd0C!
z1U8C`(MrTr%u?6*sC^vA^&#A&CC-n<{TPN9gHL?$VkfsU5T;0;8MJllR1>I1O^OH#
zkb^B>(?TK_?SD1i;5<sK4%j*3+rmEka+W(PZs}PktYk7%gD%hlWIz-zA~6`)mi=80
z1Gm!E{ss!wQaE{ayVH1&Tn4qcmBNZy$o9@|&wkG`ho^nRG5X%6g(EaxF-WTW25!}~
zVhwjo7or&vysYQw?G(9^%kc~et5A=IMhEG-?!wYRLq}8XdN94F1wLX8FOiWFk$!TM
zrSESxN#;T0=pEK%Pp0g334G?*MTO?FoJ!hltYo6xKWDQ3UsX+lD(#Yzzg^#K1P7(h
z^PLo+`$Fplk>A(XtLee${c4Xx0K+e}68Xn+jRf_ at WTa470NzY8hU=G{BG*Y<Q*rx$
zb&6~f!vbvmmL%;BBBj at 0TnV@$&7mi&BHsbi%;%~ydhzaWFX%6R`7`J|Z4_|{@fpDf
zv218s{Oyig1jxXnlrRUIunY at 040zZb3#NFyfP9wTiqzIi^hPB>%P!Q<n~hF`)3aA(
z8SvRh6Z)qB5nDlv05YiRlNOXjZiOP-#6{k8MhpMj8)G6~d)5g#uk1QAAgP^V2o8 at o
z{W?VSUf-mD^U>r&^iSKYHqNZaQ>eJr4quLbnZ;>-=cVRO1incd##{@9^%GJ(OlV!~
zu5UWR%3b&;t(ULIhCn>=*sZ{^=9JQ{QQ({EDkUos9}d!ON12EA26BQCge$3kd%W8V
z@^d&G!b%wkUdtFH4G_29=i2S{;RL-yoc6m63PMJEMqLMUWX at FaA71&O3V(~R&32H*
zXbVv4<7N0x{^K`nBN9=ac(it{qO6|oT2*<+fbW;nSwxcu{l9Cr5aZN$@ZAV)6e|s-
zE%NQeU<3c03q;@HQ0(Y%kJ=-2!PLQPG$5HSqOH9i%3HcPjWkE|d<9t{cG;>7tF#}(
z>N+#pF2(vsgX{bnFDNCbJ|kip1&TdM_-;)D1(OXZk>DG}S`oWS6&%XsMc*Y>-dCp+
zmkyH}>K==B5fQ#a$;X_3+*kCs;V{^I4YuvBtA-i(V&x<20>Pl#{17lfmf{y`3kCYw
zpbMIj-8Z)`2HmY;7Hn4>YaI~BJ^hZWc36HI^m=H`9ps(L1u&Thc>PsBnwpscNM1L3
z82|9lR$r(O|5CV6Jh`UGps&GY)vCu|^0F{$n7qkB1C0Z*o<ZM9fID!x#d{CR0t at uy
zOWD@?YSuu>fcs#%5j<wVmK9#S!M<Ma1$R`nJ&JUg+<a}l3KQfEmsFmqY2r6J_HJc;
zr*(-0!a?6<aBxW_8HRWL0nP9UHIn+{%YhNzxZuJo7M0qP{C#qde at Lvhd5tIwmy`GI
zitc3qaV92W(g;)^ohj7|yS~+R(lUS`1ZMX-xwFr>3yAfpw4vCTzw(bfm%ciX+{j at f
z9QXg+7r~cx)_2!*FkLY~Vi639)USNjX4x at rTPQeCa_udfuLn(PA>UA>*htn$2sfQx
z8w6rW25XYVM^N71Q1z}%hX8YyyWCpehZKUVUX#y!{7jWr>f^j5x5pP~vR_MMNV7J0
zTc93yq{K>C&Ep2`DXg#N9o_Xbs_ol at q<7hSnqmD<=6w-MM{D%MtuOI*=3ruD&m1LQ
z<m5e((Z&41mx0H{X4XRa6;+Evn@<cW$64px>p-Ae{w)k#V)OqmhLCxnXIu{O7C~lm
zi+*rP(=)y0d{-o~dLQgL7MNP#E5izbvW(**BUo-Fwur-w6j(en at P($Yp{yx9NS{%V
z)Ilpy)S<kbnnTlsVyizKt~;7vU7&U^wYA?*zS&s$6zy!J*`3TWkt(r45 at cJukIn(G
zM6gYy%-BV>z_F<gZjmnjQ(bG4EnT at Tt%zypTKp8C1Y}B}giH3=OniziEHZ~=29_gC
z5qI_aE#s7h4m$@S!7<*eS!Ew=u()+plbrQ6>92;}Ax6Yc%e(GMu{H`6CYRv&lW7q>
z^e8BwQN`6S2)EdL-bO_KyF@}&xneGPri_@}KNL}(z3_^i^#9%~b)ViT#N|T at UWw{l
z1UbXC3<pS`0)yUa=VTbDI{xZ5gQ4wgNw<j-buFyC+@=iNzaTu}v&s4)+ma%%NX?(G
z5J?Hjz#Es_H0_WeUI{r+m{{lTri`GjOdWNFo&eN49#@opXBFS5S{s(0%PSqz8&Xs#
zGdH650Y-Y~boWb)N4w6kdN&IJsVjQ$%>_a6w4eAz#poHeomrVQ?JydrC}dW)A+xOL
zKJOjq0v9L6om|A46&<iF$CDE$ypUZ<Z?C85i9fA?%YeS8l_ at 0yA-gf5Is*nLG?+iY
zh~o=ku38>(gQ*;g6wXg<*%b<)iaaaF4Lk$&fNq7we1ejX8>}XhE<l*fZ<kPA@}*3J
z#!+M<McAOk-%zY$E8T-w-)Z#--{s0m27Bw;ebgcs>?GU%J~44!=YKTRSy at x~k=}+&
z9YL<7JZM?-n4I}>Q;Dr at MgEG|{M_tFIK2WXkfD+0?=2N~KP4e&=i>XcI3En;6qrQV
zPj&n&!8{nD`EsGD*@4GW6CAzEa<NEbRz200*5?ujrDNqG=YVAu)&}eU!9?eF;*Q?D
zXsL#={51+eA|+~duq!@-J08-d4@$q4$v*H at VSNq+dzy%Nv at oa{x#-ln&mC7us?6w4
zde{f!4mt3R=rYi}z$iX5sCQ32)7GB{3AJxQj5&acIoqelyek*{SZKO|;pYSw+Ioo1
zg+*MR7DkRMK$2xwyS=I^?IXP+CHp2(@u5DE2xJ2*vNg+6K&XrQt*h;u;ImPXLMTM>
zuCAvwy6j-tUQ-Xw#oKYaE%Gly5V1Ym4*A%0Q4PpBDubivJ?ngw(>Avfp?LH0XoXVY
zasG1;cY4mb;Yz*S+<j_r1=Ya3S#>|75%H|uyv`>8@>YO;4rjt|6lypT*k=n{P))>v
ze1w>7C!iEY-Li*xD0;e*m4e1=wL!96#JuB at A2n<0z&qpf3B{=*Kbyw4dm`<dC<6*l
zUq at das<=D6q*9<D`(D|aMD+ij>E=k2t0<ra6?Sf*$Msb3SY4MzhOOI1bl&X at yHPx=
zR)?*nv0nIjTMZQS$p4P<k~##F0QWbOZlA>ngO1n~i{&b7HvMwkX>wQ<s at bS#lWI17
zh3m0oEYd*E&r4^!q};Aa;~jzzVOUOqelCZb0*#_?Zc^t|>EVafA#$ehg1P5Zv1p1^
zS%Ej&q32Jy-(voz(&S*xoxGgajY63F9r|_EfsqM0;jXlH(Rw#k73*QGLvE!EbPoXX
z`z!U2j|8n<P91bB%F!E8<_=ZdEK at 3xoX@5aMQi3+sS}@5nrac9ZH)xC96j4!W$NNI
zrC%aO#bUo?91{UxZW?Z!kbi1iS25(5CvBxTLscK1Zj;MDi{uvc(@RO`21l*3WL0l=
z6BwP1C*qVQsY40`r-=emsR*p7EW2SCgC%webT%`tMFHADI$fhnoS@?Q=E!o0q(lQE
z$FtEQ3A%Kgbop}$l<j`N_1^h0p=Kt88D4vSO)0M(Tg!~A$N5XVOfXZTe)S+2xDH=6
zI-&m}-f61YlK_+9oDO^-S+`Y``~kmaKHCf4&gb>o4mv;Tb14b7ZA|jIZ--{t9{*~$
zo|QSxlY at A6nUTd1;<WAneHJjIl|GTFh>+<;R&MDH)tLy;c{ZYF9*VWiN}+RM$;Aq%
zQ{m$_SHLayOjc!V`U)e`!jNo={20%GkVC8<^a2V}J6g>ETxn*WK{mB+uRF$^*i>7N
zmBdmj^VnIGHq$__2~KkUPp~w>RO26fArj at xvVla^B8(P9rqr!F7CHhsI^P3u<=y8Z
zUUt^iI0Ta at FNr;Cwt at yyd253wI})LI5FSupj$CP^2fC4yViO5 at nKqDLb7tVcIz{-a
zRWwZeSy76O|1v|spkN<>gownThm_Kx!tEtTqw9q%6#8urM|)h_(<hfOJ~Z`Qp3H`S
zL2_$sH~OyC-D|RkEZ*;H;mM>ot_f3AOH+)l4?q*)j&X=Thm-X>RteJ1vmYBwKaQ0N
zGa$0e&r&1l;k#IlElpg6wDxQvUT+pR)E1=L>SP1i_qMQd`5_}V6dBnt%@S1qCGS06
zgcTlW(H&(WUM<EGpfWNufpn8IBXpe3e7_+dR-LpIIvoRWRlfBJ#a-@}nccfuC_~x{
zNnXyzv>!N+D`*2A&jLeJ>~Q$kxNQ|j@#r!s0 at ey>2th=mc^aCiR934qE0%KnWY0kv
zl}fX^{?uCAVqr!RZd((Qo}Q`ON$-3FVd>Z_xH6$WyZ&4RPhYFqI7|E=Ic at W}>|eF0
zSw<2L2p$${rGbXCN4xI_kGP}b{L*yCK at N6xEuV0tv=z#yg at Jw4nG4T1z%?4|jkp=P
zlb&V-1yjVuJ{Sb!=0e%)D~|AGo-anLiQ_(nHXCgHcPkNYdILdp6WV-rOK7&K8|`i5
zqo2NTDzcg~I_qV at JJ-W5n9-?Y_OoO-wr=&2sFY9tnWg35oucJ>6-RV$@10)Bq5;=d
ze3P&$?S*v>fNRuC_orP7Qp|7nCSb%@)&mC~T>!IrzO9nIFyZ+*tXrr}-)px9%N}Aa
zM5+-bACtxF7&bOI_jxKm=WKO|8Iu?<?k)NR^4z_b7Q$6d(ubbZA14}Z(@-LgCaLpL
z_ZixL(?TB7cu=YOC7(vuMn1$!&Xf`Oz5CS*BW=a*(^&)shV(*B<MYbZ{e`RFpP-w&
z(tRjKu6*Ggl_AIe2bE|-KrG<#C1*7!X&YMEc-DD{|M<R#mmC6)wU(!cvHs^-<dNUl
zsfsG6<#lzv(|!(vg at Id)u|sEKwp;D26(Db!E(6)5GZA^P<~B at c-5}gQDoMiq#Wx at X
zps<^GuiWkdiL0>I5(gX#MEqS3s(~95t{iM+o%}9n at u&YkyUC~7%g=rkBQ5XVU&3~n
zl3zm;yd&qN3j#6a at Gx^J!mjlESFr=elSOCV=TlIYjhOWH?gbC{Rt-Nj?>_A|maRU4
zM5G}#za28e^NjL<bJUY%W`-jQx8bmyZN|9 at db=`-5#ZD;P^Y+U6mv=lcVCX5wdEQ%
z1_*$e;&~gSjOxZHtzZ!}m9PG?*Sa8A at 0(-2`2bq1x5SafON(i;KtV)j;zX#5(A?yp
z9ZXnf;s0B`2<`drsSg+B3V?X1S`$+$)xP+0N}|)Gsn3+>bAXLj#X+u!AXAIr{FLs{
zfy&yFMSDN)i<B|qRe#O`@Z|;ZN2QbqW)<ceGm7EbY6?}FEO>|A_mki`6r%Ty%rb4`
z at mkQyllK31A0dE}QJpa-SZSw=*!b7T_c0?@K<3evmXAPg#|Z5))D9 at 3h2J*1G}qQi
zP^(06;3%Q#Raad>vMah(82>Y*RD|Q0cCs)}-ng5)^qn75=>!ThB7&v(TcT7C1KJ&|
z^EkP+{$k`9c5)atnq}A0L-;54E$%K^itTf=%O_w~oWJctDf1lG0b5H7Dc|PgFjxV4
zfFIcJBn@)aKM>iQ-psQ0I=`*gh{o<$9^Oj#>XiqpOOVq}Oy|9Ehh1Fb?wK|(L|6P)
z)SKwqJjeCsi^1Ju9v!EFxEQ1e)<vU7UQ{=yo`2#y3f`ayXku^p(^rX4y)oZJ5b^JD
zS%zJ<tLjiz7UTeIH>@$5QA%S@^0!tTda5LeO#Wrc+V@>?26*c6l6tKGp}Ps!k#}o)
zs3K_pi56D9n*gRON4d*W_+Kxmh`&V9?nmWCh}A at SZJF%SF^NP{eTO_t_{dy|2D$6k
zoFUUj+n?v`x5`e&Ria+6ah^&gKo#$DOjjbeK)~oGWpYiB?3nQde}5;yCN!;h??o#5
zzInl`^^>k$_F=sJw%c^Hjg#eFdvQfL-wjm=iwQHyEwWtsibmnY1DGg6q|SwZei!sD
zt`1e=a?^)f5BW~sOH>^#79sZN$kg|*Hhu=X1 at A}j^Eorj7XY4l{CaGsyOXT9Btn(s
z0*gAeQ|U+tgES1-(-Z41S;tND&X<EQHFHnq(e;y}KswR}dFy*PjR`EHxW&C7^s+_y
zpP at nhdf7jrk(AL0=<ZO5TzLJ8gOcIX!sf_3<gbc6M&<ViypqF!!!%HpxE5K}RuvpU
zy<L8}#eR9&)$`(Zkr2bic#$1<kH~f=+Ls<mdNJFz`)52FKW0F^?6&yW*uXit8#X(Q
z`KiLfZmGtE!)&J-wgXTE#J=}DbAm^- at NJB<-nVnRJIg{?g73_E(?PI{?S-V3%%%|{
z*9O{cWdpXy(qZ-f9^8AZ>hZ=ZBQc+e`|wl{+oE8R{hKm|1#osF6wNCM?H(1S_#ewL
zqxjOCTpq2hVzTxyv(KslV#hi|39ghqT#i(FdxfMRo at eK3zHchb{-)stWN89z9G(8r
zHIyK_b>q({Kt<`eDa{r)&DF#yk*eTvxaY*K5b at Kr%@XCJCZwH6gX^x_jP87vMm4o3
ze<^fHN{tG{hGZTJ#5X7OgEabPP9H9wFo_PX5aPfMW+MWJkO at Jx9#|w=ImeTq!4CnJ
z at 05kmcWc@oVhhAnxY%95U!RYX2uR8Epw9rIndN&?yXn^gSeMNd)rfbyeT>g-{Ug*l
zvf#&$0Eop+RO5smKc}nxx|n^^+)y?mPr9|lEMt#)h9D#CvJIu#)sWLT&0_G3QZYyN
zxk at Dd?ijPU at tQBqq8bVQ9WjUuK(DBAk_>Hr#O44o-$-g<Xw;7d5}h2(@dZu<=T~w@
z0kRZS<bFDkVzJEt4y0Q6Eu)65UtwR9Ni_5W9{+bRO#jBaoUo at _q@R5=HO<zmfP3Ku
z{JLZVHESzaF*YQyFX}DCxTO~>Cd>{qSK~A6uku7kAos2e?_6yz1a=tAI18;u&XzN?
zvAsT#3WT;aVRiRJ`9K~9$qXR8ywfVXT at dFHbmmAjvOUX&l-`oCG%08=So&K8qL^pa
z(IsHhKAjkg<G@=x5I5pO^7k`y<-{<sSxD%YUS%74725To#%^?Cqf7f(m}_JXsiHtW
z7bmXb-;2XK_RL=B?-Fi3rbGE8x at o9E*1jOiUB+6D`peqTh;OD>r)U2Qj3zRXob2ml
z{6>iw_5pD!j2Bp3u7Q@{xH>iSGVa$(GE-1dz$U&Hyr8=lAiia8kcLG<iVXwQ<M~?Q
z>P&#TP7Z*@8B3$QqZJ0_`=Lxof&i=_cT?EE3hLily55diAsNa;$><Q at T^-mKkVrt+
z*>8M~5})*ny55(45yV>;-oZ8OTo}i0poLl*hRs#42qWiVAi=m#!Z&ISuk at v1D*w<W
z3XG9)D+`1WUFD#b&#4<u*;6>nKMGy|c&YcYcFW-5*4|l_m)!O#xaNFZ`PtSTd2UK5
z{6V{3&!rOSM=iJ?ggEuQ<VAQhf?#3&WW16W8=8C8IH}OLLNq(|Ps^ft6ds^19U;Ia
zrfG(No at 9_Jy)tGzw^eQ0U#$85Aw~_7_R&%TM9G at 0G{!s_ZQsG6Q`2(r^G^^EUW{ee
zu)DRGt!Q3b=8oWi+fja>t2Avn=u&Lz0}!<W6Iehz;D9jJ(GC_72DbWbr6X3tJ$=66
zvp7<qvu0sBK}v<-e1lI>$|Yq?_*GA!h3r2Zr^JgB3XgYv8Lrx(E1}{gE}6V~Mu}z8
zsrQO!vs6A8Ih6gPB;Z{#<q^tUYS)M+gs%9>8~(CbNzU=ucQ{Ugh=+E6<7+y3i{pMX
z>WJMg8KneBDDb9nM7Y7&CGg6*qZG=V9T9sN$_6NFL9TyA7JD8``~w8Ofu9X>>>t~2
ze4RmR6_riGP~CR at 0|1SaUsRQO%7(|RjV%TI&L>yMYJ2l>|4eyQY?x(~f4yVvDlMV}
zK|#M67P{2ET8YZ at dgJS}$f;xX8UM-ufvYYjby;GZ(nf+_WF}v>XPWg^yfyai?T5IJ
zMxo}8MI<L}$lKo1m$=$OXA$rWVWw7+#X)BlZcsS=7XX?4asQkG4GEY?dh;hv3~&2#
zJX1I!4)W%s5Ckra52#ui-_`bG!d at sLmz_Q>k4BEZEnxFma>}~mz$zpxwnY<l+`wz>
zPNNtyf$;fJP~rX}X;ISclY0VzimKNXpNCCe%$}4=iO4sqZ8TXAN1leN1mbZvo27)}
z%ZnS9?5imB^|#cxaFr3i*mL*<sj5~S%dCF0d at DUy>2pqv_tUUr?{@a2#m{@LVZTRK
zH6`%$lLuVaO6C~Xzgho(zm)r_4CUleqLuKqD$5q5^2q8sW6YI$)V<9IF=+WdP`e}B
z)YyxuiiuBT4$1I45g$Yb##V at fU*D;2d?0VU(O$g^8bK4504YL=4nd-HqGgy+dSZ7<
z)ZW^e;F3{OdsEQM9=bR`S_;cX)}!0Xo=WSTl_EwXnX6t7(cr at yK&9FNJqUt9YR7kv
zY`{H>f-w#Yan<qh%Sa_z*LP7o=Fz^JU!-?VLq(2+)OmFCQ>Mbt+Jznn2dHpl0K?#?
zP&g`?pQ=|;_%?-_)$kSR%P3P3jcE$&1K4>+robdc=Vn}9<iN9KZ3z;rd0H;1#0Vai
zv^ncPH$4rGb+nY=2?o#ON=TM8L#3Yb?)~uz{hXc*9GF}2QR|*R8WzrNRjZ+QDxBv6
zJCAga(^q-2ohl%frp#zXN@>EOa;l`L=6){x7G#x*6j~dLK+3YBJg0Wmi+#;%toH<y
z5F&o^<U7u;lvW3v|MB0M(t7Zk{rAJcfd&u;EpjdX>R~T%8p`iDZuyQ2$X?Vwqe50i
z50sVW?ZrJ=Fu6HH1s^^62hP$-A&V24%D<fp3AZ$rRdD9|_06U1Dg7$9o##UWM at Y+O
zi33fiYNA+%yJ*YL{SK~-l(P}tF8GHi0=B7V*FJmzJG;?@sR*FNs6GXZKVt<REIexK
z$~nQzB_%uC1<CQJ%(9=w6_^dLhc~XF2vX(b+c^RR3*ZM80<?45McP1uqR{iurRNY-
z;zAgjozYNW^)`187^NqD(TW(L&J^)wo_FkUMeB(>yH=gW+ at eGYU8}LpVk;H0GX7Sj
zl!Dp#O#HN|&EVMkol;FgWx~VY{2)pG6|U?`Sk>ug*)Z|{(_8ESQF%m9<lEA<&HFlw
zmf5XC^XJ at 3;7V*0EVO#)J~@{#PgE+^`xEZaBX=W^<^b{(8Iw4A4s7&}8TMwWv>9YL
z;0li^-tOBI_m5*2iLyb6M|PFlX=1PAkD#q6yI0z^qGN-=$~QKMjhH6a%<C!*)<BZw
z06-JJq1AjZXF%aO<tl}p^ERfRLKrM)DdtCs*j|t&!jyE2``SwlS4yqrbEANbC}UOm
zrbDDnZ(V72EJqDkloa*IZO{8~r#boeMZze1U<D|DBRwvhqN|HVwp+lo&Kogu^8e8h
zd6|sRxJG+))~dx;TMn|eS64qf{c|dLR;+k|*~nCt$-^QQb#t*d6?x$L{}#hNx^utU
zLP2E3zP$JIjEv|3CJ~TpRo&=GHFylr;!Q at uRLzFx(Fz=4gY;6m_MC-0&0LyYstTmG
z^8 at a66HA;M5DsN4XzDgIRb<Nl{T}R;R~ii*CDxyXQ6^7XXf=M-S-ZDO7Bn9dwEfqZ
zd8%EA)8JkLEgNEX&buSCw9qnPjuP+~V`g-rHYNNdlGFQDA9q6;sWs24(QHGE33F$q
z_QXNVH8X6Z2iQK^123vGCEaF(PknFlO)e at Sh2F0iS@ce7;~5uW;v=Aen3vq^Wpt=o
z(d8{K+wJadIKtxswRU+vzT15~0k|9ZItc@%_W#9&|Kz_=+#l`8``62KNRq`#b}n?C
zege?6Eh&V)>vb6cftJHS)7<1=ql_~N4E%krbpz)p?gD!4kkG^hV at j(0`Ye)pX9XFD
z1gkq7m&;h=SuPop?Ab%{thMp8+SO9ul1|DY*Ou=mEv0uH&Uge~AJ=#-VwCKu^kdJ{
zZqBULnbEYsI!2Kh)-g at yO*RUV!2lX^3X*;^n>)Jf at ma0iisQXsb3I#DKo;Lg6V3NV
zXW37WT(yZ(1Lko4Lklm!ij10<d4Hdyq6!l$iTB21kLVh=&^S}EbhmJ_bv4d)JC-)|
z$f at Z#0zyxO;$pv_Y at ELQYAqNh38b)iGbo;@=OK)Z8FvL}NQyvabr1YEBUz896u#?h
zL>JKMdVh29S)iX*Db94;Z+aW|6kSjdE&1S2#6u|T)l8#x5mr$T)M<?xecGeG^d)3C
zmz{f3oTxVQx*ZX#u9qOnlz?@A$=%BB0cLN-=ty0`2`zPhHzdU?-rQ$b1D8woiwQ**
zGiTM6uyoxdtDiuRiEY1s?J3euQ9gy$h(0VKIS!{MsyxTPpVgUN7b$a<7s4UOIt9B(
zY<b~Kk7WbPHvj>u*1qfh={9wr6ve6Rg_py1G|8$dk8YN}z+Vk~!1cFBVafqTOeisa
zL1^(27x;u(+1^({tSSq`9Ccp8c|qUuR6o?`xaz$c8IFs(3K|SyOUp*Tr)DAg3c4-C
zYAgaV9)Eh3+`U?jJtm7z721bWwa6v{3Si!323pvY6z;jUm?*%@<6q$`nAQ+lqNz1`
z6zKWEeM05>pz?KBwp<#^0l4TYM-%WY-!oq&|4=Ggd*L5N`d3_D_~ljW@<y3^iGLT&
z3HIZZcxub`{V}Gy6TmBd4yh&2Zzv6Y^0Q*pWv<lt#8x_>z&HETq_dk0Hz`F0ed!6<
z5Wfhi&Y<Z#Tl)0CR~g at V3>$`K^t#`~1D-0Tih}IXkH}iF$3UVNb-M at m<H765(`Dg`
zno8YpgM`;wcH$_cbv|~^mTvE+$BmKy%iZRUL1PE|-3+|3;k$nQYhIge8>+nGO1yN9
zR7~c<-k=ti*Iwl4Y&@v^e}(DjcW>-0gNjiZ?(V|0c{0(9Jf`*zRS4P9Y}+`nW-4)-
z^VC_rmn?{^GrQI1suCx|^{r`JY^OJTXe<n2H|ZEnbmQF>*R>}@3{zVI`=E82rg#p6
zn`6i<^z;x2*1C!rIF~t_38K7w)aGSjh^F>V>5){TBTAHr+k>fklta;gRSm=<O#2^Y
z!h$mCQZ-}vgEhAiUw$(cU9(NkXc{j%SS1jVJW(@rEnVgCu%-*1Bw~ds4yuAg=|SQp
z)!^J2P8$`ccm)~j5B2FbKji3cmVn)V4ZASl-SKt(E_XZwiM7JBhi6hWOY-QE)yYDL
zug6}Z1R9-z1?r}GNm*~wo5WJ`-La3hmL!~i>SNww3BSZ$D|eRs!BK?@wuu`gv90*3
zz}cNYpSNn$lD%Gk4)oBts=?7M+MG__N7SLWS^W%S$)JMuSL%^YFCsqm?pm0rE8#r&
zbh(D}3f%`ro>=+P4e7q?YM-x4zaeL+koS!xRB)mWalUApPe%vxXAvkX0EFZx8e4NU
zJtAic7q{4wup9sl%G4F(zhqLj>m?+d(Thue>c^FLtiW2&K^b;MXNEM>9_^iIvEA0S
zcyS*fkz~CMnoI48D9ghQ1V9CaCr^DJt9G{vG*M3J%+`#+S1-(FM+WXM*wj#rBQQ{f
zNGhJ{tHfeZ$21G)DRE~e`T~RyxoN6uMGv?Igu;N|;z%918Ko_k0BnY4DwL7 at M++XD
ziU~XxO78;aZ7v;l8Xd7sJPsI3WGmAJKGPEAo=KB92*L6maYr3Er0TpYeGBOD$fxlZ
z6W6q6z`%>Q50uD9#aTJXFmLs5@=j0ck(vu%p7R;-4Hq)q`gmxfz at SZ$rQTqZY_rQk
z0Jx%6qO}#2e}u5zbS`(^?2eAS92Vx;W^&$!;}}Lh;G(K()r5<?XC=7~_ITEahoX-o
zgBa$pW{8pbYi4w;QV75r*}etCYHN1 at +>513oSYlXWK0OJdp|*l$Gqj+NGAjXjH&i;
zMw28ECh$n>M|<wgFM+=}R1j$fPQw(FuK#yinx%MZPSYY0=WuoUlIE;U;SHF#u`7rH
zm9n5#u`Nm~7IT%@I_FaWVr-#cG4jL%m7jVp8(HKk?UJ;ogpMZrXVfkEDWK-^HyL^n
z0y4l?okl79!5VjVM0W}sSBR9?_<s+S;O6H4glMjsY<W<+iH80i2?c%T+&V+{WsmP?
zc2X;(Kb at HRZbB-x8HEVSjycC0*Ae}L6;x9`vr(`Vgqf-Tw=u|Dk)}9lE$VxSfDGEM
zzobh4+d?$p?%~-ekA518kXX)ytw&$yd#g+$DR4X`c6<M2<+}C(+H3^(1_Z8vCs**c
z8`;GftX-?+n*6z)z0IHAL`iRDzJ^CJDx)j~b>nWcR$Z5el!W6isjt-)cg{f0mqW`R
z_*6ATFw#)0%>+-&Of*SVpQ;am0-(;argzd#oP$<EIyr04p97I3Fyi`84x at S}8o|p>
z>xG-Uyvq#=t{a}AT#@}d-FgEMl`Sc;0KgrGob^M*<CI^)D}y5eZXb#683FDd$gci$
zhkTq_($gs|kY;4%WPm{P?DDoi&F4k4@&YDUrq88-gBB8h?rp8j5 at 9UfQnFu*v`F>2
z37Pg}3(DtK2Lmk(yl-&|r{2y+6G((Y55t+oZiLhtz!M-M3P!f!K?I2!%wbseNGl&u
zmh0*>F~;<M5GuOhO(~YNKo)qKRjqk|U}dof^`~e{+bfNTI@<~%I+DL33&=#g*4>@Q
zX!YanY~OmD?28ZPn8HJvC~+Ro`kaB2naLSMF4!f^3iX5{(vTDG)A5nhO=?I*vyN7B
zgF9s&<F2eH>2liRi=xD4=T{OZ<m{WVhGBSaDN3+Zlk>zttMH(nq%^6GUX}A|Jf^*&
z>9VV2x0DFS704D(0wFd!FdH<U;r8QXD|y)EwvTmAKODZEs}S^AhG%2NwZNiJW(UK4
zH&i}Hb>-|{VOi2yyo3CH at F68GLN&9hqAlLIYE%4}afQfPTWbOk*4u^XKNX1`-%@M5
z^71poV4u?se*~=o(l1@#%R_a&L0ef2+6Z#kdILn=&Z!~Z5mW6hHY}mC41T#yfZi$&
zUPxVeKWk&p+r``qLCe^T`J*4YQ~lKe$UlYLk16h0a9Kgx7atg0)DToUHcl`T)sW2}
zOud*89b08#d0<kxUiSg*bpj at llP&X&v4Tj#y4`rJi#BoxwYkbVv$K05>_f|Bu?-op
z<cPx8pXlOI&sHxF0Lh%7G*3E3=|Rq@)USw$#!xIVvqF_Wsl=PP1UHSA-R&T=AzOy{
zuXGn1gs>EpLkbS7A~DD3;Hoi>+4zE75LZE83p~pviNbyr)H-Swa8#YT)1 at mCr4<+2
z$Ugb_zLUlD2m<_0pn&4ub~0u1!C{X$B*>3*-Lq$VudrCxJlcZM{~U$^U%ob-?n<e0
zr6a~QiNF*0=Y$M2-1R>bb|84oN#pmaqx(UKv%o&;s9_SoUZ2^-CLx44j|E7#7xTWA
z<ANb6+O9pJ3#z0PHc#Kjn)`~~{;dP{21t;F<$FdfJX!0R6((Jpf^)oHoS(n$J!DCL
z2pnsrP_zv4&#>k{gO+DS;$mrU537CDQb8};=ej=<Ztg}1z2tEQj>eaPk7^=OR~Wi;
z%fAxzv3P5=T0h%`wt&^lp%=D<pd=XD-T#*JZS}0TSe?3=g`&`YW*VB*1s~>s(9M~(
zL>i9hoTJS9;NI`mP>x77I_g|?q|`>gC(~bnl00Ah?1Dfq0SaNm;g`BpVyW_=_G;8b
zc>TMaMW$+PDt>83;O0i{UXU=8kABM{+XpJ<)n2blt#IhMkP08CuKNdoFcS)XeS}E-
zG7XIo(gch^&SUjL-9G$ey;)x`LC07zj$LG0Fo7b7 at Y;GKV?}U#nW26Bq*w>Dai!xU
zCyL93`Op>?y!gUv(qo&ackv~Nx6+2)xhtugyuR{c^IE{@7+#5+s#Hq7;DQ)CO89<^
z*dFmPY({_3ArQD3jy4&BBaw5bC#<eNE4q at HcL3|qVM(H;CBe)>#O`3(uj;<#51!Jn
zP=M*K76R^}Z!#~Y-FC3-zjT(ekoR`CES7Hb=3Q_;Ib$-dNH3SIZ&Y>(Ru47pd9-eI
zkPfp_&jBCXCz=*bNn=0F=fDUl)5qJ#Z{0lblxmp+gCX!f23PNlSko}-ZQ0XPDGpN~
z{}q#?d0F&>R;~N#2|+*Ks45t2zfEM?-CQv2^2Mt#1Ys%_P!t`7$L>hAbEtn9ZfdH_
zoVR%wdvEGKSNJ5S5v|OT8piY5;x-c}_S=NVO4uyu at +MG`#ti;DOrGpjrR at zxY*X$2
z%?98T?4MgWdys;npjH26H&U=wMz=o at 968qH(b;<<2%OZX^7sh?<FQBnaI*VNx=9A=
z<g>enp$DSLwrXfbGgL4v;3h<08n0GT(SWKKX2kd$JZx!s=ymy328WoD{#GW;DplJK
zUhfP3hXC4Y`<JpvuSpNqit~fRdsflO)<gy at TG`Xpz=)GU;H`B<r&4R0KIVS_234 at M
zi;NwETD~X$ZCoaVCw(^k6c20IcBVfUzId8IcUGvWWsM_lKWCU5kIFfVhDEmdAOWce
zhq6!(d3lO4Hb6;4!p7Y9 at 5-AyUt@?S)KWc`2F at yS17vz=KZ9!MI^V?tsXA<xJ~`NM
zG|`xS#m-K#pz#F#0-vnmcb`Acnl;2|gI$+HK+8OtJJQ5N%>GWGrS<FoB@=cL9<Q#9
zCM~*-{_Q&&tRv0uq=w1Z&JPWl!a)zt(6CPTja{Quj(b3Mkn|1LtppL2MT%Fj2kHVq
zlK`Esuc9|NQzy8}iXAYf%rE<{g3q4Eg+M%>0+?M<0E67a^dQMm%P<QLjM7jX(7j{W
zZBKY>G)m`>u`CJh<qP9!peWBLsK)Nf%GZ`z)>f>H%39OFf#xwWKu~9$5~p6*Nj}Cd
zae{m>v<4u=A<OtxNhiLuD at r~OJ^dD>eIz8;qxN`_$#SbV$Q1>e$J4K=g2oI<bwaR%
ziz!z+&yq^c-?}(jwm@@cjmxKfZ(s<p-1ccI14w2PpX#6A531e9y(uvFqkIvucwcw$
zfb}cz)m~`ztqr`R3Ty1QX>>hA1-_amkvvFOmJBEzL`tl(#=YvRGl5!=4 at I_y<kmL9
zs;c^uoOH4pG579?`yBZD4S?JVDtg;4oJGrLzRi;ak4*A~&a49oegsqlBEuIMPqI|T
zXxEXdMm-I70rs~$)(7pjt!2h&ZEv!qv{}X8{vF#c+?I62HyY#>*eMwZFB_q0J+b?!
zGS!HfKa at 5ahFg}q5I#yhU{ZbKMB43JN7o9Tv`#m8d+^~T*&p#8IkV-?ec9?xiYLhC
zcgm)*sJG(DA_)bRy at ZqgAr><Oo3B^VJOY)wQZs-XG94h27jYmV{$jjZ&XRHa?V7e4
z8$(qoJYXm29yjK?m?`3;ukaDNxB at RrNG9HH-SFe?5=Gfk5uYTUgiblrQdhm-5F-H2
zjq1#ebxCm{msOq3p{MjUwQKBV at RU8JD@UGT^H{h^qx%=s=1S3-Y;8(1InO0Kspq2z
z=Q0E*HsG4CsvvzWEY6d2 at v7pix$WlAl=h}E6=Zdw$QE#Cg*H>sy&n{1oeX8Z`X>WX
zw_Pc9%2I|bCT1L`>DhC#hA|(#DuY~nSJKJDRJR9g_}F`D>nZ3gLTaj-uc2yEXmxdg
zl5mAqDnp55?nsHx=!&dr9(WvhA=$X(G-&J;LT~a5|5ezT8qIm%f0Ft9tP;KRXt1Gl
z7;BVfLWV7z)ne`+K`IrR%dMMW`$S^wgV^FRrJ*=ppB-=a!NSuR3ThFzMvQ2b-x at 7w
ziOK`C4d1olz;?s1v9+T+vBhus#fwxLF>jplH$|FHw~5Q8Adejv at IO@zskT%7Y6NRJ
zsmpo{!d<RCzB1prnRO5=U+Jf%j;N{W8RS6)hI!f|vHvxR0-Dvo^EF8bs%IYk-!||8
z=IP%~^BCp0S*6O`9=!-(>=RaFCtG@`;Ybx+!jVI=6VW*X<=@~@daa(@jUt%c+EEfS
z#P!W&aZ-1J!tZ9luT+XZLb5I+tOw3G;Y8NRWUBygdTqt&HkZ%Dbm<!xyDUd_wl}~p
zk-cIx@;KiIPCfqjj8POH?3&G}<qe+ at CXLYmGvJQ&e)MlLMcgIJ4tRyBk_)T at vfGQW
z8(F(UP1&5%zyCH5#HQ!8EmLr%q|)&HUn4{u-o`0=NW}E}B(8F$pDU at 1`i at a(jVa^L
zB=Gi=0S%v<0gcyB0Y2HfYgs21y7x?|`cIdHQ+Hx+O$xm=EN0=%U6Oy!tEa#`26)Sd
z>FDPJ<t4ia?<lb!rCm3HxL$<_7}GA`731i!R3mIskc(adUXK&e-YUjErujMZeFU&o
zaopnU9CP{m?E7{KCG_>7oP^kV`j()vs<YbqvVOOy=Gm=89X_b-N&`u4!Oz#cdZkfm
zE)<M^OAlvVa?j2BSbG1KyADtz0F%4^b`a;!O=|X{y#Al5p at kg(P~UxO#M5J+bQ(br
zk=F-dU_;}v7n6TKcA5ufDS)B16geu{>E`_G;@p>HIzv-!f7v*C9_j at jSCejFD_-x<
zZJxik`9Y~7jX8H6(h{iq7i;@r8ev5K{4MF*Yc~wGLvJ2)wq=An)o~vbs^aU0k9v;{
z4_euTW=;`A<R|>OCZP|Gf+OVSr{ha*`DSGahp!dnP^=?H%`i}%5i)ts&f&B#Pqsi4
z9<~!?9IjWtQ1ZMo*n$5}AJfX at -u}75u^Rox#GFpwO>b^S2R>hx7bbI>9Q9?;RX&P@
z5=7-0a)zVDwqhesOgXYz5^Qs1qs2{-v9b`jJ%NoFIM+VFQ&M4 at yHHJ8%I~+&Lk#&9
zhj0HO-^#S5x+B-CZ6~@&BHb4Ets1_9PMh~W*+K>sdjx4*=!ZsVE!v5mo#HzQr2nj$
zb)YWO_)TL{EjiJ=q_HV+nD#cI2<a=QG70^T at Z;A3m#nAP#|DmsCbiiJkXaiKzwY#+
zz37 at vJs&`YfHG1)HTbE#WLJ1F9z>IfZ=F}5oK#kOfa2%^6muqYv|d8_HxbQo_ at uF*
zX#kYA>t`D=@vtmI(yt*!P4(y%4ky?Kl<#pXcV5p{tq9e-H>uO{M+PUo8E$o~I1|e8
zA93lKhKA_NPhoV_LoB?DarRKZ5WWACrvW1H`LL1 at m$rx*9K3irXNY)oYFd=H-)!V}
zBk{eC4xHz9gvM|8z{M8tZ<Ll`LXB7pGb)33(9!Ak(lF~;M^mfckoFr_fAGU24T5fF
z(j5a5^{x34A72vAS*&nK1SY*d at gXhYh?P|QI~ANIaQ83yp3`W#!4tm<sJX^um5WG)
zXF>Bl#--pBDWJ?bNpP_H-O;95{&(bIso;)tRcg`LuP2Z^f6vh2mH4CEx(cfQ1+mGS
zp1R&yeBpoibTe7ba7HI?TnV*5frSr$CB`RMQ6@`Zjf0fXAgGys3pzLG_c-{j$N`JH
zFgE<C&GeX*shFV`rVbmG`T%O)&q(kxK<(OuVP9niD|@RQGQOy`)Iovb+if#U`-S~#
z;<|}Ua3 at FY9=C(N5TBM$$u7!nBil?L+V;}mYHGx7e$K5sSpldJ#O)+oRT1UMwk^5z
zS>1wZ+E{<R!negM>T!iSIpDO9thgcb$e;?N?MV>adM|3C2n;2!>#n|2c<Wk-{)BX(
z(p0V2gcuDe)$hCuw at I3Hh=wzCqiy%cB_=_=<f(_~YRH at 0HG_TpG95>^mF(J-Gb<Vt
ztu2%=pLxFFMybZ>NhrBXFkzQjZY-Rl2!SbJXy6`gQb`HmZ<p>iD1iVyK*GOR#Oi+#
z`dk$K$Z_c7HWpcN1iYV3j~yuGmllP<LEy9bUdj5pYN^S>ZpG=Jw!l at vMc-gLDRR^?
zl08=YvKbf<ODfuCvRy#l#f{Y_c=PV=56M%NARr1jY?$Pvbb+4CHF&5kyNs*~ih2Z|
z`D#K$4D;J{`G5~03W(EPAm0$c$R9;IVKNIrzp<5Fl|O7GCE1K^8oi{CPU at LI%W*+Z
zBJCvxJo|}MI~o|+1qwh-^q;HAY5=Y5xVG^pt_I$*T)72AhqFI2P;RSz954=C`9)uW
zQNUD?9*?(a35!ZGu+V5B(nG+ACyFqRoa~R{!!@aJROFi at gBDgB*+RiqpceAF+Pnve
z^}xJ6*2Yc>nF=~kmCLUTWmH^T*o|f)q0OwQ?zCXy`VB6%DoQoBoYlLL_D2$UXwY$F
z?+S26s$dCAG!*%3w8=&W)4Rc7Ks at Lc92x~O>?J8M at JgSYr~e)wT-M{I+dd at Kid=H8
z)X~`3aLyDz61_ZU&|sp_HnvyTKQzS#r<#wRZ-TMPY=<nX?E8v{r6 at 8AU9i+kT<6Yo
zWu}I-6t27eZO32faVqRA(~$p#coK_%d%k-8l7xJGP{+2cacu1?bKBFr*i<6Qmda0c
zS9COnsO at Iwh~8oNAp^=#sRVw&o?GeYi*IvzZn<j at S>k@{2kp|muhH8+I3J9Fv7ji;
zP#<z_Mqp!RJG7j^ryZulrHxhBN+X_`Epf`v$A~3GP|vy+wD6<pXP0O-%B_Dq!ir^8
zL;zn)3GTO-PRG+jGk7+Y at 6}6%p&;tcg>h?9)59 at 1r?Vt at 3KQ~qEQ4SMHsEmHqeOaj
z at N7C{c!Kd-0O9J)#IhIF;-+i%dXlN)NZaNqR{T36{Vip^&1IAVZB!y>H$RS{P^Wq;
zkaP|D*>r|X*Tl$%@IGwA+{Ug8WG#QJGRxKZN%N;9d#DbLp)Fk$8$It)6OI-p>Dx&o
zR;7+kq80{C5bixSL6B()+)Tc%UqLo;mPEN07t{58Phcfz;Sq{7Xk*&>c5xEG4R(i$
zsxGxLM+Z;aF(6z;!Z&ZdLN(pCk$3j++t0ePj|sv8MI_2UZ3sp8ZDd!UIUm`j-7kDN
zx<l#37f?i6Tw4!frh1B&ZQDF`>6{c-%tJDL+V4Fe7d6dM$emGH`@MM`BoZ^ga7a)+
z;xH-xPr>`mh=62LQIH0ZmH1cNg#F4RCKsV}Olr<#b%UP|CgNF?%C&u$kNRWVg#0yZ
zQ^>L+7g$8dc)d(<%d{jwKnsXOn#`|GI5%k9M-qfV`rZRbnH_g$GOL*Z)-G+M%mIV$
z=KP-E=htJWRCSV&jhXpT^IPely6uc9r0UY(HZ;$m%n?%Jm3kbaN^w6~DEK7C<|zB4
zbLh#rcU;)y?Tj5CKr&<j3kUx4M{>w}E at -aXn>5^$k|q)7R$Sz<z#daC)^&di8#{Uj
zjBH{s#6Tf8!&#2dM^n-&tT*Q<LU_oYp%;>$X8Q~-!CX5oXLY=;_Cs+s5k+L()josb
zONg at IeXgO;i=>D4;gKbj{MG82=rwovI%ruT^u1gtch(ZoydVd2j9DF>M=p2w7F`&f
z9<81HE=~l2AjMtu((GX=VEAx#TI$5^Qjif&EDvmm*NYx3pV<Z7xNU-u)oI0&-B~lS
z17Fv9kQBvG=(cHgJuyvgk*`Ww|Nd->+MMYw9x?cr1-Dtu#zckP3)W8iuz1$}&2<iA
zHGJKNe+x{<0l*h&4a#6|R4R1Wm>$$!ywM5G)_e46pv}1YW!*o_=d>{>A2~;z&zKAh
zO=yFdou4Rz&~(&ZfNx at 0+f#}J!XSJ)a0`{RA~!(cH{24WRpp|!0*G6L=4gB+6FPIl
zqP?9Wcl4J4k=hCJS0Lr_MjC;?S?<^O^hUr%H_gK>p~u(z?r at l|3FD;09)EFHBH}GO
zRkK}twqNZvz6SfetoN`lYQ%wWH4%z`xQPE07OsaG at B^5lTchC5liu2I2XVAy7t)Bu
z-%4Z7*?@kdy-Zct3D_5&VYXg2vZ)-X{_R`Oh`<U}WhOY at v98ilMM<<#^NEE at TlK3+
zO}6AQ;;Je4BPR(cynPQh&T>5<Oea|pSmT%!-e^hssl<&w at Y2j-$;fCiK}IBQWyUrT
zp2$K&NRoxv<ndrA>7Hr)w6NmD3PyC*J>(2vk4GkO5DN!v!mn9%EKuP-=+K#GgY`pg
z2{fl9JJFdSi3(0n`|qrW&Bv&QqfJK|_G206eg0YVyp2f{iRwYS)7i=s4_Gswr8C#b
z<QwGI!CWNGXBN;=m`2Mw5bZByGcgr=NA1gc1?`|rO2lmfVqu}4*`*cmFlJ7~HG9c|
zC!N7H0(&@$58<<0M0k3zk7I`CcMG;27NHrc9b7a>a=uV`J-Y0Mh=S%%;28CRq&pF8
zNyB<FxxY=&7`&gg+=@`~z~O{RnXnpDjGvD+P0cY3Lkg<hwTSj<`9sq}`g7GrpNqbs
zxznlbw=B7n4KodL_+sw{m`9b8T_j+z8N>&%hMPQ=;deZc(K?~^e|Yh1c&Y<s2RYl!
zmskIkCU~QFHbGHu6KRK)&@J12S)Iq}XE)}H2p*VAGO;QSG_BBla>R#e6<d`SB|Em{
z54e(QTrr9yx%ef0fzSErE}>t0 at jad3X2GkP6Ssr!o8_DQMr>D$xc@&|a7VHr(NvHr
zpSV-AF8yZOm)L(LuF0}d5C6vV=|{CB1<ouG)5K+EpXp|QEy6VAHf$&7;QFi2_>Ejt
znrc)?lhMp0$feyJiVZ{b%)X1_K*LNtS5CG+2DpxQ$9zQ`>k<Bo08SxtVOXq{TYg_j
z(D1l$b(TUmumrb(YsGnwOcpu(+>3-icVWr$kvM^-{$?tX3A%sOy-m)vEEg at 3W6{ZX
zuL^-3hz=rf?00-O2~b~+Ao;@fp_U=)eSB+5;MCtA!hkW}byEBcRZz{KNH~Orl1M4)
z?!nT at pR?C~$2j<M3!OSnpt48_75Y#!!i&}B{?I=c>Nt0e?j=s&k2UORwNd3a>eLwJ
zB3$<$de%n=0XTbg&Q}n3brguJbUVQdd2qX(WdRI=Y5r(Lx3|S3B>LwebSe^30%E)3
z=+Fm03)WDKO2I@&qG?vLlC%B)g`oPfSJT)U)SAXZr2V5(hr1|(;|zyW>>Qt2t-Ql`
zs0tn`X~)U9p5OLW|Cch&Px^l*qJE-76eqAS3N=?<*}VN=G~CgF;<SrN_R1EY;2#5~
zCr>lVxZ+oYnjtCCkS1Fe$ij|fS0gSCbuWrSV$p!Nayh4QYLs at I9Wan92shb@f|g)s
zl`X%JWEo^^aHU`rO&t1KLl}pxW#O~2VgKb-AR_A+Dse4{4;5M2+{i!#G+qQ%?1b-e
ze-q4j$v~|KOw)DNbnpINm=b!+^=mb;VyN*M5^8;4t3z`hv`6q`Dked~s4JF41$hLX
zC{(|eu>^8DH8 at ZnlPAk+lS4fVks709zU)vss~E5O->`(oq}-EDf=7PBj~#CahO{<E
zCC=t|xMq4 at Kkz9hqSS*t2|sH`tGB+|p5T<Z&noG50y5CMzIs>z`IF?3>M#P5KSE<K
zK^^4BRH(XOv{vdk!W}CtpJ~hkllc6&ZlT9w(6`Qd6-)M_FGnT5!;BAZdiq5xh}6Ln
zd{7bh3;tvghrZ-sTJ&fX^j`3%mIHQ<E}9xfNkc93{6=gphoRo&vh;pngg1<DfE?St
z4u_e`&Kb?-gNUUb7A?yvlUeC%C;%zBFXv;D?{iwKlpJR2SOWGil#-h>>QU_ at Bhck?
zW7X-5hX!o~p&sza9HO5NEs}?Brn16!<&E8gsJ5JH+Gz7~k<{^6l=S7zYgB4&Te$|v
zP9l=?TfRqbmaVS8%<rucG1IJHx@(F#qkv0jZdks##hnXbUR10L214JVd(#Y{DN2xo
zy9sTeo+5Gq62-}yJ%;FiLp9pWV|4OeSx&&B<zlkCKn1&aOnEf;bJm-iCrV}cqc at eB
zwYt`H$cqX~K=Ep*e!(1T9p<O!pB}d4kIJzj`E3emK|2|GxV|wM3nZ9+(*6r`@^s6?
zN!Ac&YbceDVnE)<U*;@Sa=4v>5VX at 2t{1k`EmP7ivY7n=fkjRZjvcH>O4gF(zr^Uk
z({$7N2#lWk-*vxr>ql=R&nP_EC_AP=(#9 at G2O8^I`O&3`AiCVNs{dml at O%YYDHhwx
zJ0o_Exf|s|M at 2a&L=uGI at wu?V0w6-Kvx78u6swQu^AFcg>Tg(1V1DgSGL)oyqKS_`
z)a5MF_pD<D3XJAlja{*lhs*V*BpgdL@@DxucgDc!i at 5f`$hZr7zG`S_lzF#4xe0#I
zheAc{YyBXiYtW;g$+CFbU_)~8G5IezFtfO#MrEq`o4 at q#q){m-t7>)!v1DD6_wSeS
zf6hq7MZ3$*vwp?@p6eNmOK}yU2_zZ6Jldi==spyF7?{cCNVNEF{&>eh89c<Md&X35
ze9b<PWO1F_R=*?DdRx!y(0^XVb*UiEL$t<Tv7+8P0L`BU1T~Zq208R#SPILqvX5Ze
z);aq!!w|m(E5mV{NL~0HT8F|NxJSBQg^^Rd9oC<xhCikb-8N`#dW-!JJOXg1SF at RE
zdQ+N1708A<d=hXlYs~GOg1QvKDku389;d+%{FIS at h|#?td)tw87^O*3+*i%A3!Ud*
z+*H9{7WaZx;-;KU<>#1Wqy*q&>(Q)aD#Fua(5 at RP#O!$HcRn>^d{gW_on~V6i#-$E
z11se|mmmzMU42qa(UPSO$Hhrq^aa!)9LQdB3-ntU7pFGYgRk29#*y((17Pg+951g)
zp6X4lvo0Y<r3%#pwx>0}$0>I?7<s);zqArESS16U#GS?jP%*NRrbsqDtNFL0kulkD
z%DQNgwvUYWXAlgG96&hea#p_Y%q(`Cig=V at nqD3}^0m>;HM!BRKzth#6qh;gX~3!H
z#3`v^yU|1uPY_ljL+fHrIOe=6o`BbE$!BSG?*x$OE6?xHX)&v&qOkdN8fuj^y1nP<
zv=j3)>i*uloW4f1|4Iv#w$@xS+}2Y{-maKy`EI7(5g$MP85D4^@O#*Cf+=*30Y!bG
z(0#D}#IKO8nh0cM7$wPct*U$~Xn?R9_Bf1YT7ueZ4065RYO?19f7b;CY_nG at +J4qa
z51C^R#eSW~l9fkEr42G|whG5`l5Uzk^nTS53IQQ^<oC2+=o?6sLw1!Bu-o_Uune>D
zhGU`_scFwsd|ppIC^YpvEb>k$IxF at dkPNwYr)I9E%eW&zW0)okS%cF7kbO1Db&0i?
zPjx?L<nJW3YkFLt-HdGO)lh}2Lvs_F#dODtn at i_Jdt`UxmEC)w at DH$xGn at C{0AL5M
zem}<zLCS;sdHQp98QJsPVRV!ByR-SssEmlc4X2C`?&}50H=bQg=MMRQ at D!9-d;F;A
z&ZWCMH2w_sSy_Z8ts57trw<(K;$Tw%gA`4^Itzc}Wj~t}a)qZRIV|IX&VU-C(O8Pq
zm at Bay%!WiYxSOtFv(=-cBh?a*V48M-9Rz?OpVCzliIkj=&i$*2#em8mwNfPp*9D!H
zvb>ifi{e;$OHFzxczbu)tEy_1(eHN0uR^1^Np|x6;H~9|Kw%3q1v7aoLj!|=0nt?V
z)l<-7VGTpanrop-<j<y?AH=7nk{@yE92S at W)@JvTnBX6aElT6#V{GVSpzbObii_i&
z{4aj+K02viw1ur-P|-wG%E?fOp at i5LwLm8{`5Z<yza$_50C#RI*X<kF1Dy)tm-(kr
zJIA9T++KYfDwL!mPs_?kriIf~aalIt7w<cbhZJ=!2}289I8#zIJz5z*s(b<uZ(A!-
z9U1$_B!nmv*L$!{R76@(g*C2ZiVMQ6FWF7W&z{e0_{|0*f*`9n;!@fD7WjutIlc7h
zP|u+J$M;+FtHm8w)>vIn%1}Q`ZLbVCzsxzb{|fLdua at 2G-?n`WT6L~nX*bWEX>>A8
z--a|f at 0gy#3M1FosSnESd1oqGEtKtv<TNc(mopBcq1s*dD+V6yun|-pf&#?v2ic}%
zwKZm!xMC~2(wd831Sn{45NK>D>?A{A<Yl=_uJFtiTbhbZqp at 3={^j at Vs=rMCpyQki
z`9lFSu{T$w^nw7cpU=EW*ywma1stv-&1v((oNH~f68)*~^Z%!$N9Pj}FtG7q<)(mM
zd at b?^4xZ{n`Tdy(9i15+?W%FbYE%mZ+1mBR$w%{k-)YcLzj&eIj5TJ*Ite=%o`QJ%
zi{wbVXb%(SEf08=7wqnZ;D9CwKu91=gH>AssJ$%DEaw_o>2Qq~VzZ~Bm(5o at OE$6<
zHB!W_(goF at 5(>F?*3s`stR8NSygyM_$~|eM7BdCV*&{T+J`{yiG!w(<5dF)24>Uq|
zljQV2qg at C958HSj7><%XO^okjGn~h=02PMhV!MI-vwku>%XjpvB_+X7LSW#mTYikU
z(Y)owma;AW(?^Z7*TRb8&QpASUV9mm=XsJ!KRs1w6^eY)1>Wg at b5WxLJLN~2?NYyz
zBa)u!bJ4<QDzuD41-;R6G?SjEPV@#Y>S_nkQOeCGDFmF8A9g5<vlCzVf&mM0;2m04
zr+_$^Mi8t~0FYeVSsycYzdQxHe>FeI4W^jnZslUdO-ZH7<sg+DX6+(RF6U~8J6Q+_
zKL^!@91<-MtQ|m&_+KVQjf_dLP8Jmf08WIrni>dG!0o`u;Jd){qhsQoI$@gCw)B{#
zsU6kVE%F#MeZL{v(=<OfIp1Ov`<0c!HRrDrvt;_I at m6Hg_s@yc^i{U7Ra*HdqF at yN
z#gB1MX(&S0!c*LgQU93Nq6R1HKFwqAZW(fT<dx2u^I!<&)ewnr)KKYXmEf+Ia|tkX
z5J)sW<`hGy3Qu^NC**XI>V0H)e7MM^NIdF4Hf>0U4-Ktpp0b8<Yr at e7Sb`0x4y7?e
zYxeOn<f}EG*!pherg-gUe01p1pF%}asonq{SKD`h_qkgSJ!cGmJ3S2fpjy*1=u#UF
zBGa{Z=H*r9T$;q`0dl!YoNuHOZAQo<j8KMbN97Z-uT-ZNbmyz^XG^<QWYb&2M2ZiU
zE_?GnhX+?=Rne)L28=It at +pFlU2H2<F9&;wmn)@(qtxdw()jirL1jD~KCo<3_Mh+K
zm7!n8stv+Ez2fwbKc~Q&;CDcGED|84-3&7lRrPl}qR)V{gb>!gKws=`z{QV*-S{e^
zBOO<{tP7`T>wPZ$D8G(GGiCYCd(CCtkdi2SipBtvqysqfre<lRbu;rMw!*j2UBI)q
zeS_Z#P#)o3d at jOcR`Nz)9{|=gyh5GUH2}(F1&Q>c%wP)_6;Z9X%)Q{nZMms=4}7jI
zl5F*wK%JvfmkoB5upg)cmK04uz`_V3JUqYiwn!qX4C0dS9x^ghpR-|%hf)mvL5RN|
zjnxUDWM=qJ(D%PP(+ZlX(}dz|3@$mtif1<`Q at OVi(oNz>mG$3qAH?~#2sRSb(Yv_a
zcRzRjpGaaq&515$z0cyo!bM#Bn4Jil%!B+)V0?3 at p6$F0R?{mCtcQ*<%34GKx at m#u
zL1}PBsZi}MFABQB#mQ(L@!VsM`vK!@sI$sdV$nM?^7MbsNS}4VJ??IJnO+HxcZFxc
zrZ1sHbc3Pz7`nhVG7&#~dnw3kV7ouKCv4=i;<L2um1_CXcQHAEvpuP|F=X at xa`Nd+
zQ;2e`7{>AJ$(6|)l)GB(V+O;xyeKHc?lenH2YhP0iy4*47>GFXC>;7}M?3EF$1g&e
z)FlkK&TI8$+LtM!4A+Q!6}N%mf&8||weLjMUY`!}<^v|}72V7pjP0Z^>dW$M`~-!2
zZ6?KV`=;sYiQgEsWrpv~TP8- at nYLUrl9&@{i at _q<|9YY!;Jj+9^|~eOeLKj9*<&8f
zYu0h#`0k{1Q|_{?Z1`b$XLr&`7pQ~1<Oc)8XW>>2B_pyfbMMp%tb=R*58=|;=wNl&
zU+xgx>INI;Sj-Cm1f0NB{pxGxc%cDRcn384ebVIgFoBs9J*2EdInbGH#jhwZ1IPM9
zd_hD80ICHn7GiJGZ|4=^yEF4(t5vp;4-c~==eM0#8`6tD>UES%rmZe@@7!OVNY{D#
z9dK}g)rpVj at gJ`0SIt(cW#1zA`)cGhAFr{g`7VMmz{J;}6!9Sc$oah|HRxna(-Y*T
zt9Jd_2saY1R5W3(oRF!GzY=LC4a{Wd5N6ieEF_R&!B>|^p;Op<4{U(^w4dXaqVg?B
zJ32C9lfOTd2O_t)7sb&Qf#z|jb1xcqhfT%<>}6eY1b2t05fI)O6AJU3ymQ+qmyj3Q
zkl!HcPq5YVQ71mk{T3M%-`AC{v9#z`gSWkjjMqhLBVw5h?0>^;QfY7rbwuQR<Qu)b
z;o_!Hev`Rk&gnm9dWBC)o>R#pa8pbw8u+ at nadhguNC43L^fUu%y4Aq1lX37 at h0LV>
zzE8|fcWHSyUdA?-e_P=*8=MxZXcI*{;O`^Gv{k&E$EJ)`+B#}oNeFuuO^*qhD)>rM
z-D+mv-`P0}XWBQOc&EOl`$UHXJr)TUG>R?}U$m%(6+GOw8Ff2EbFwzJ7&0C2Rqhjf
zU0QyxAk at 13*Guo6j?Lt4uEjb#=lu&nAn_apEqK=$ng+0FOn$;925wO)tDs4~vRiZP
z_3L at ZlA6ggzJug#4?Jy(^dhB=tz?W_nsA{b*JvlwG$1RevG(mK2X1k?s<t`@=lFD=
zx{vhKIslgDv%-;~RDkUjfDS*J#)XbCRWtTVL-b$MANTw>Lu{uaDvsWw-Y}nmM+jTp
zXuoyjmyf6b8SgdSwUA3Cd^&1ccAJ&?;*WXHfF++XTKv{m6JPp(QU!lh^=}~|xAZcQ
z6MK;QmwpbdQhm_D93UlrQ18bQWoR)cCuCGO&vIhFkvjx|%G|46)vAx*GL2~d;(oOg
z6lBX!lXMiZO|#1kJBCL$VbNcQdwP>AQSbsQ83$zWbXd9ra{r at fA~mX1IKdPy_Leif
zHI+LXOewHiV_ESOPCnitjLE~@Y$IaV-Fmtg at -BS=vONfN|63XHnR4~D0GYF>YU|Y5
z_3MveC#e;n#Y~fzV{bQq;p!^bA;TUJc6O^dc~<FQ*Wx4lv8=(W<rQ#%NkKj;n0y7(
z7k{`YOv}{901+75Yz}jBBJVZ1<nE1bPGRR)m~vB^m(Xgzxg8yd0xL-5=$q^nCP~~?
z+kP<H%=fn?B&g+(&Z$1Mhhc1s_5`Mip&ZO1h9tgCUq6oF*MC>Dx~qa45ak@(Zt3~O
z+8#SLmBj=aHw9NB%pC{avR{N}r7DV2n%DVaOVWp(^JU5iewu6v5j3Sgm>hYeaws>M
z8&C{LAt1$ibkEfzaEQ>j0duvc$#ZuBL&vWT?`>2Z+g~(C5;;3F3sQ8QgDB~`<oA8N
zomoC2%PEf2u7;l$bJM7d9XqW*;cQExGWa+w(ZlO%Q8JsqT{=kOq7`@Td!$Y;bPW!}
zt%^0d-X>OaNhC2O`CvHZ_`qm#WV4<Ec}k|gv^0PO9RfK*z5YPxAKGtk5xBfZk3ozn
zJipeMTh_Vq4b9~uJXMk8`wu@*6MVK_O*{~Wkva-+5Dd56E2`fmxS0b^{Z0;CZGk6w
zqmbM8xft=kdKN}B)s=nrM)X!&CA(}- at bPX%Gd*{2`Q_8l>~{Vh_>U)_;U6%ic7*6V
zjL{<UI>Tv~Y%8d?>mj%>T&E|CI_{}4QQW2%W%$_gK|EXGkNqO%ygLBgULZk2&dOYJ
z*aCTw`Qw4acGU8npobnr#!;42cWIiG*(b5Yh at ho7AQcOsqcbyp=#191E1<k0Qt-dy
zxdUxb3pJXBzN9ybH`JFor&|U&qCEr+4p{cPk5~e%NM6S;HHKQtKg;##j{3`k+<qMm
z8E7+pGS}9>01($g6GJn!i2L>6gSwR-mfAqr$?{`Tj$H8l{Fgs~e1yK93{&NimHLzy
z&4Cl#ZqhbbUFD?63&DafWu`(2yyj#uzsbr6x0hN|Lk~4aL)hKAM*nCB-<`NbhV%aC
ze5YvB!ax}~A-`sHdqa=jJHE5~|BJZxoR6%@T+c#q2;E4w6*YZ%yTV*M`-4~)0K5{=
zyDoR^x1H%gFh<|^FniB&q%5A@#;~6d at I+ZVmVr|m$+j)NhYq~Ykl!-BT|?H~P2#Nk
zCms#5#XE_^EeU>Uhu_&hj}#M4KsBf%HU24C<kSzIG^{EWHJxgbuWuz8+%Lb+{RhMk
zKHQFaQ~@8%oC=^<zI!6P{~%U_f4WdJR1Wm}v*QH-Xuf`zzQk3>=11QOK&Wg9FuL#A
z4Kn`bRD>a9YN|$5ucpi))?FoJ)Tx~XVH{FuWy52>*QwIU_?E!}MK#y_1ZJ|zb3C<l
zjQrf*w_1y$6CjAzRLv6*H`sM!*9wlfXmXR5guFb<=^F>Fvu!YkD6`<Bz}Y_gt#3n{
z<J1F)pini*5tSZBxz3&O)#eDjiBcJyC_Y5R at LcURlJTAmzJz4T+DsCMte@{kamr-H
zhhq_`8VTAO2|NMZt2xl<9wXahuT|)MA=3U_)abEFxwg)@Aqab348Eh??2f7bj0VlJ
z+xrqw^hI8WctcD{mTK?~P`XbaNE!Zrb6>qJXW3fc#@(A-1Evm1JfQp;7ta$VV4>d_
zW~tpv at 70Wp+eB4C7)(_ls6FBNJM}qNC-KZ<s>9MMoS**f#k+AeNl4)zDfBS2YwL$Q
zX3Mj0F4BW~GHpMh0)9ZhzEE-6+EZ^#V3JNg6be9AfG$<=F<cNDPOKRN-+a!y!`;4Z
z$j7zNT7e^^PHS6U at XdfhIQ{~r+Z^CBjBt$m5R&(E@%Ks=FNa^h<T%F?f60|ZaX64<
z+hm1n;L3JZFIaBZQ~WTVMAbkQlyN4YEqP4A0rWhGhIPG=!33)wsbelY$$5!qJTIqD
zxtRT<tL_K)!YwU5Scp`G(?SmVvoAeoQPYwo#hj{8Vu+Sic{qsm2NqL4BhA|VfPp$G
zIU;QQHN5YTQ*2sy(q1_Wq43r1TFgt&7?d*P22%aG-kL)8X5Q{Yg5Ij_Xqa?rHJErz
ziJNF^p|cgZ#X7VSAq2^L&K4x)E%j&xsRLThHDQ)4E6`Q^Jlsa42Ho6cZcgR3@<1z0
zyT<RT$EKNDr9VZTgj&W2?ZMw=u{?PRTbS8ahZJ_m03H!;w5EaX!&)8Sb1O_iCcmb|
zW$MiCXVy4 at mAf^<zY4Gk$nhBHvDuO`7xXEzM(3HH<*+PnttFkZk{+e;RBo(A#YG8t
z8b<QLD0Qgjg)6$mw^gr-wgEvnv;IV*GwIKgmT&BXTd25ep6~tA`r52kS}IWExbV=;
zJQEiCkRz_cxjs!U7H+;NQ$|`*HmM*B3*{J6516lkmb`-wBgsf;m#Sn|oZkMZU#O*5
zI3H$n8uta#Xs`%C8M6-n7IPgdEQj7xQJmU^s4;rltxN)wCGnSD2tg<6#^5$D<q0s4
z+LY-4Sin~T-!UNFzLTOrCY<s>9mfuXMs)PG(t}*7305xT>3SW5%~?W-uSI^a#eK~{
zn=-xRcEp|;p(Zw#k at 54n^+NN at b+!pz0=;r?QaF<_`gmghkBN|N2!J2}^ijz@)(xIV
zI0e#I>ZWL*A-#UJ6hbS4DMt6|m59jpsmu2unD)%InI%^Fi?>DRHgB(ZsdK_1l5wGY
zj4GsvODKTGe2gBN-{%9Zdv1V7;$iOPZ5sEj&q1zy^rGdd7hfL|P3)07z6oWaUh@}>
zo#;43x#IT!Dh=ZH2VS5lq3;-%R0$B^E%y#ScA3SA$RJrOo00(c9*RUjr$SCK^*T0@
zx{?gQ1j%VB-6|_6jOR+X<XQ*ukh at Lv&4X95*tTWqq3{EnCs3(!vT3z<P5s<__W~Wy
zAc!Z~#%4X$A>tJdCD(`AzOjFvRN#d6`3U1Z3Wl>3E9F9U$MqD=LRTzMK2|$E?_h|m
zy|?*UfuKL|QH%mTM492W_%ZE&ikDrsIInonKy6L0n95`H+kJ_kL!0|!H)XWbV0tzL
zqQ^pC2@%KfjS7pW+L#T|!keye%=vx8$mWqdAzFz0fKW at 3D>*#1WYFTbGW>O<Nps=}
z{f8BJalR&qokkuvRIa#S0RKN%o*-Gn$E5(C0F)y8{iTxM<X5*1tCHfT4JE;|V=Ju{
zoCD3JhshH^Mn;BiZdh5P!fP!0V&nK^l8*vmzx@{*NJ`)+i6b+Ek+P3T!?v+S>1;GH
zDFT;ee9x~oKhl-Jx}C<?8{K at E3K#g0W;842SfjLkm0!by66DCoQ5x5(8P9CD>ytx?
z2d7D*Q&X^VT^r%7z;KzXf><~e-q*=70Pv-&MjZCEAWb1N91tj4N0z?>Xd8Qb9aPD4
zIL!Sk2wOn;>15iTXe6 at o9`YhO4sj(b1Ej^^aqElc8vAN(TpNjZO=vBNgI!t9;c^Dp
zjHwZ;#rIg|T<SOmWoRUkg{tDdIq^oHY=}S8s{jnPAAtjQly+YYX(~HD+er{6U<ih?
z2;BhOocadCZ9GCwP!S&9r2t0M1n2LfysIFCPH)(;;&GmdRH&8NGW1*-TwM;*zF{iI
z<-N&ei^@aXpZFvOvIw4ZCT^OGm~Tp%;E4fX*^NVb!#iOXp3$j}DL^4xACZ1XBwUlD
z#uhbah$8}WTt}Yc56NdXwDW at e<`qT%jT-Tq!ZMZAiW(zjSP5&J%K9FvB+=|Bc3E5o
z(#dy2geEQ$?f%_tkfsJ^K&-mrL at FYZMs)1e+*wk4_ZTTzDve~ZxEhXy+W?__M&E9l
z1F9Q^QylFoW~2-b_c+csMuL!_74^|svCm_(h%!K0dm<ga<#Q9FF=Y(^$y|%j8q6#e
zBB9Uv5dZ6}eQI)x36F|d19oV`{I9m}j`9U_8uV=`XO5CD7X at Trd6;OBmqpQmd`^di
zXVKbeu^8NSq#RK;?}YS{w_*Qj9?~A+yy?o6uaSI)+_4RP$D+z!?8CB~Ip$iWnWy-9
z#vFm{GCeQWT8blgrPnD*&jHrz?z=bpReJ)4%s1RT-nX_U%#=her^(t0Q_ARg+&l$i
zf(=DpaErypRQ5q;UdvGpe~xA20Npl<A31>B1Cnkn<JB|J`GVI7KHTg<!MFGZ{geto
zdHN5e-ov at MAM5q9%z(^UsqKuu!i?6KJ)ba(m^UQn&Qs{8uy}8Z2KULIwUE2>Uo9F=
z6)UAW(+EZ?N!4g8wu;Yb4}i4{$KaqOZ!$Was|D=U?Lk;nO~ols%*tGjbB^oQIIZCd
zf*jpVkdsv3s`#Zrs+huijnPvVKz7P-Qx5amTKK5m8A6KuVenibdBg>;cxaJ$ja-<%
zC<39jp$jQP+jMg)p%gbl0>|T4$VqG&^E&bbz(c}V`UwggKemY!R6fhtIwT*)e(;ik
z;wnE=+IP2Wi!a2|CkQ~!g-g^qtsj>(=CiksD#9Bo9>`}~&#S-Fymfln#LKOf3~B5F
z-B0!!9c1fSS1%atS&doT<_mnEz76QS=A(OC#z&C?*vzHJc|Wfe3Y4=(Luu;y3t^^S
ztAVpVc0^1R*5TWIlX`mQ`0t2=neKuYtR at 91aJS$$e3ct4j9v`?P>=Pv1K=7kYgyXF
zQn9SKEIFGGv&}@l$h<`HpG5x?iv5kDn)uu#3m`ZZTmSTNd}#)_{)&hf2DEbB)a2e~
zk0IWeM`+QUAWU`!7lqX}VFvE|ooH&@VVyOyh{~r8Z({#>--D{ZsZu5W%+ArdgIvmx
z4|QYIE~H<M{@DUwGx}@~P9(&Lq2o8^7jO0%`m7<vDkLMz4r^Zh#1eIHg<+X~b_T(%
zv5fN3e>^mc`bK~;-SPhpte=jgG(Z}Dz6$dti|20QJ)#i|x$;lS6RYU%va<J+;TM!)
zi at w0p7t&j4Y|aH!gz5U>%#y6Z*Q%@FPpvtyOYnuv3G%p6t}rQs4at{=Tg2k=pW9}^
zl%HCc*MnL^@}N-zBI5k?BO)B!BQ?>-5xn5L|90QL4Fh_dQVj@<Xhwf3kh&ar*L`BK
zTX-;Mz?mc#lKh(&(wIAF!e%|P?*C!lBBcd$#z6H9b(q{iz<@HrS%v`>NhSW0BQg+}
zk^TM6PGUK%>2W4*3O*Voo6Uru&!d*@P*xhcdG2Bv0mJ&5;4WLExQi|*n1iF0Q_;c)
z>;L(FCp-a!Xpf1!+Re0P`Jj^lzmf76ox;Bl0<B)6ti-}+8gKu4V3G*nY{~Sa(5Y(l
z%zlCV>>_wS0tyCUm9feS<wny;namC~?&6~RV}SgK1<@-*!ghf4KxQvJU9<AZ4#|F~
z>c-9L%Ol~zqJ*D)*e7+-VrP1t&7gH%#L`Yy#zM_gP=OX1BTX3&Z1thb5(*1E$D(n=
zs at I<aN?q5m&%`h2k%8fynj}Ccp0LL9+nzdSVnP5!K}%fbhj~z at NsuP*c&zaXdF7-L
zvtU$O#F%KMysLidN}v|nw3f+qpc}WJ`mm3^gSxonFqR?MEoub~tpVGfe3BTYkJp9q
z#tHO$k4VF7E9%oFoFk~dOB2P}w*1B;{6QW&x?Xif%A_ifvf6l|M~z-|SC_b3S~(2+
z-TiH`E$CqQHooz2G at IKO`kT*^2QiMwuYg2Uw4aH;UI5sh7mvx%fCT?^6L+BF%z50$
z<bftu*P at N+aC(W(Q_H8=0Bo at B(B7kG&@cNb-IIYTI)Jl1(`}bPXD4INp<z1m<EKp4
zXic7v>dLMAZgT=!i8?h>C=AO6i|=|Ya-hT>vi5^V8PgV{MSUBVli#1!65vILs%=_&
zF*c%C#@e0ij57$1?@!{#$R8V3p`<dk&}+)l?CE5lDau+9YO0 at ij<`nngy664WI;6#
z2ILAKI_?(hB5mKDbIupLwYnD9Ft1 at Fv8g$Z#!yJ3V`m`Vt`+ZwH%)UeK-s#)e5It%
zXe6o^-wQ!KoGXe$1PX|NSRe^4Ia4y^+8s@&1k4TSyxrE7!Y_6}ja%&svMBa2YBX7B
zBe*ql3?XLd>wCtH@?3+MSiwffId5b0Ce}y6y&Z1j4cS%hvH>(d&<iz09LdEXbmkf#
zYD3b~mUO{bj#{<QDbt1PV+<fd at 082uQeXe?JrK_(27NBsp=We8E^|tgJ{hu$2VO<E
zAB#?0Q(1_{h#*f{&hdq_#9OXkHX`YDm5d+(<<}2uZ4>Qsi!Q*eAZzxTuHo4|d_wkO
zC}9FtX3Y^+(x82VL?X*nfsrm56dmb=p2 at djJh~~nPx)&a7zAxkiYSb^$M{h!-6sMA
zDSz=g*Eil~u1Aw6*QXb6&|P`&w at d72yG!V5S7O$F>65{{UIt=qRW+f_QOsvCzb>od
zb5o0- at _WkfJSyy;a at Qh<jd*p|xzG<WGuZ8Tu3E{#kyoUa2TWLg=k^vkk)bMf+E?sZ
z?d7{aDVUdW$tDGL;wc}Had&~f!Qbf=mW0+m=NE4h0Vax>W1tjwJTPnIv7*LwxHg_W
z?X_;11XfZ{5~RR16KByVII?cQzuK&G7v(Mg8}Z|^Kzl8ab)V%yNf^e>Y5AZ+bq$f?
zC{o?q?>IRkBpKJWb$gDZiz|MC9|YPp+F1cD)1|)fQZcKr`dp>dq+<NPM at T!HwCVO(
z{8Y0RBz^tu4x0zh8$5K9`|2*{1ZAS%W_D7+!-M&4Q!f3`b1nNX8VlKAAc&`y;C07h
zpvgNGP1-Q=>mCgnn+_9sD02a;ER+Ow<CQZ(yzHu!vTIcNdxI#=Zp6$Xs9D!D^2gK7
zb>9|{VJJ8lRtRL|zO^{%4Q`D_O6~k`gI*#{ok$er%3B~;o5kru?2WApehuKras(>*
zx~#D+f8ckaG#aW3)4E at rbm6gioMg+YmVWm2H*N?aoJIbVbp;)&B1VrzP(R8?Hfq at G
zIT<uN=sRcMeg@@$D!GWR=;9777m{TQx-Xt+zC9W9OZT5)%yI18`O<snm}}R$v84Qn
zgf}uOeJgwM?<l{}jCg}zo(k(z3f`6jt_97IX{{lc;bKWTS9<2fBLn=xCdk1e0!<cw
z+x7SL{L_)_1e4A-`4-XI<}z45?ol8U<4saB)2RK<CU2S!4(Hg&vS$G?)Und+1F8g3
z0|Z<1w#-o?N$;)|VqRVWnDro*+8j6Wc!R7 at d<_}+y|Zxgy6HK##Va3930YlyguV@=
z#Wf1Gc|l+~Io^`-ED93DI9r<sgrrcz!$xrb>3DOk^hsvh2-oY7JNk&(0X<fA>)WgD
zjLxc(#53HkPwH07(9_~A8wqVrqdpk#&AZM-vwUTK1iOQFkJ2h4+2R`_%bSE7h_C{_
zycM2WKJizOc!9&%!$p_mh=y=)tLlZ983sXX`yE&}#0I$i@(!o7Si=ai8UgEbJj~#;
zBl5SK%KtEtoF`pyNe?Yr?lz)iz`k0xT3WvGWB at 7ujEOhbk^L8eWoZ#g*$DWn?zvlA
z%Q*onw%+;O4<ks}%sGs@&=re66@|VXWRr9*!hcpmHkhD^g}Y at Ko9>BcG}TOe6kUmd
zyVR$K;%CMZ|Kvm}7SNJJkcv!G{o=1vmxUc`%iJR*KVs9-Srip4sEl at vFUde5{)uC#
zif98cpK*SXw at C8L&}~_Zp?tLLy!4@%PiJ^xlrcfqtqq<JnZTEZ+Fmd>9NOm;g)@~<
z|GbzGH)%&WqS<^b;Tf at UCdNS)xc<CRay|oX)cAv6_7pUXC*j_2 at rB>ujh7i5$;Km{
z?0(xC%RZlls8cJ)kQBx^y%9<*QsaqzPctCob?&@F8z6L|vpV;D-j at CG3qC(Iq0<R`
zud)svNrr25iliAQ47|En-{8|_5T+d{ZcDBcTbs+78kLjeAV+^8>z92Vs->Dh+4?IY
zaDNm7s^1<v;i(&LCN+PUwf+rGzCnbu2JIj-2Il1Fw)%^&QdWiwpx%`LB<MAsrl#Fg
z02UgLntKB=S5e9?Vj}g+c0a5faUI%a?|AJAiJ0>n^m+)A^1!{WYLqJ7&57w*@AgOc
zqhUq?Gs)YonGST+)Pu#QTHwHV at Nt|Qrn3+rQ8zcFzjHCq`9!uKQPTF$WT1MViewrQ
z{a5=nu{6AL2-TYSm>8i%{RpTI0ZwjunfGesbFc%N`GwA5DYxqA%5hi*zJ=K;IWV|W
z?A8I%rSH%1i1nna?SLLfkDL?7ae#iVs`q~@ZTvfx&EwJ*7Q}rYd at NlG+&w9(7Z}F`
z`ePsT at jYl%;;4k43t_VR_MinQtP;xuF#N6|7xpEik~+^Ttc at V@d5rQ!o1;O`t5qhe
z*VTi&@(3BhJ8Xn#&)c^%30iPp5LbUO+GsYWeJSex#mA)%VZkgUfYRr4Q+C at mwtJgn
z7Xem>?SwrJs$N{CrIGkrCQd1GKs4wI<&9X66q6*^HzjSC21pt#0Y%<*HD5U$=K!jv
z#&GtUi7yNm5Jt_8%qI7cV%&3^i_B>=HqNrdCF}(k`lcD`Y>7mKh9o;M!4K=U9|Xl{
z4O}<-BtmKa3bQHuZtqtqbeD+KyhkA$ecKjnfSL%MZajLaX5)6lfSkeYM{0JqHRl=;
z8SM~C^=Ym(w%od&we;vDA8CGR3W;)!&L2 at D!9Xhwn7@&4`xZDd949~Lo^;{M;vI)b
z`+2Z{MovXa)z6r0N-f%@sI47K$y7Y9J2xzBDVXrcmUikBx`A6-P>l-<xdXvHdS>G_
z!hXcrF|s!4tsD+cX;WbvSZB2#S|nX#`P2VRc-*1c+ry!H6X_#}{`G%V at 50JiO7;LC
z!ij0)tg2RCfjssXU`a%uPHwhYoa{!afPNGDs1X$+Cf$-)-l_)g>=V^~s??z%RJ;*c
zRssAuFF>g at jMD7L&=X8!FiFG7K)$<Klr=22VTFpA)UiAO=7`1HHdg6qER=30&pi`E
z-Z_DllXzqeonaDrr@>E^?;+R~(5;45E)}sB at Zee=+l<Mk0+bZ_Ui~JjS&ZRBc-DPi
z(7(H2_FmO)?&FhJ(O2GPkAr`GwM(FRjF6mmk+#e16@?+3Z+k5ypcuaLvy5Y>fb8z>
zFPzK!7wv8^nDlG*Sn+L|j}mreh^UbC0Sa6}LHhBBX+|0gPmxQS91dulhUxVg2<s#K
zmAPT4*T8?_5Gun`Rkc<jjyHe{oHPh{pl5r|N<(%IXMJ)~6_ZUw at 7l>r_ke}yghuDY
znn5SZm-Ezgdi1Z?LtUCq{t9grzfpf_bnqk?yXyU0`azXXH at 3V7zd|DSfxYFhB1>q>
zkzIJ}9MNm$X}T&!H15Xok(GTy&_2vN2VB<KOl|%6S5Y0L4{cB5njJ&;G?-8d&df=6
zeXML7r~YWl3e{LweFn>1%XMFpetI6BV+nZj6rhn>jzcN)cUh`P10(sb{=2tro)W}J
z&YlwE{X9#@ZSe`vnYd|VjX-7Qz!T?A{p*4ms_$<P^<%4zlZZ_%hJ@;l4yq`~b0})O
z1YvEw3$n^ClCT&6*e<f9=_J=DhYmk487jxi7)IBD#_h8+ts*2rxyw2qvo(g5g4^9I
z0_eW(x?$x*e;>O<G5FG1T^l25%W#{=B{;JbB;tqCI=CB~N^o3j7~eJw)5ombtGfGu
zUQQnA60MUFB<)A`Qg2&%$&C^QphDv6OkhW3#)!13c}MAQ3xa at B@BU+wQ`dzkfWQs{
zAyrG3fGPoW6RJpGpa&B6k}6s^Md2pKPBW-vn3ZH{Po3y*4E=jjAMRJ_2V2+GmZ{TM
zH5eYyU>myak+WwXi{8rok-?+ADiNM(B_5#{a7GZ~m*{d47p%0*T_P<sEu>TEt?~Zm
zp$9lYz+RvQome#Hj&W%D?r44Z7s8!A)~W6w%GqP- at ju=m<9!yY36$IlD_}+M{)dhE
zd=w{>W+kq7lYyX5{N$C;qLd~Dyl0BTb7~}17|mA}I&^jLxQG|&zaBy?#3KD9O-%0(
zm~&8}w&qM5K_DSR at 1*57d}xuGtdiAt at IV6&d<Q#4!H5v(D5gvL*>c`T;B1PUTc%Xa
z*uX!<{CZpnf1e4d-8-J<xcQvf$NT7;Kmrul<C2>7dFNgyWL%MX$RCCG9YmZXB3P?4
zgs4C$#G0D=Xsk${kFpXMlIGP1P}U!Xs&*9S^Q<P|ax531kMmwTJ5<3;3B+2Q-x!Y!
za3~=13S|qCn&>+o{&L*h9;pAJJxl98;N;swyN%yR at C)wJxDm`FI9tb)sIN_khPKtS
zqP7~==R36*FD|ey^2)^iTwH6Yxe)xNV|V{W^4x at oGWFvcV1YGYI9m~fimaYR;;8Cc
zMP{meZ%}{ojzIJ4M761QPeMD$*K+6D7jWjCzxyG9)K_`B5;f6fp;uk7oKwaKMKitA
zQy?*Lejp*s`52Ac8aG_WA%3yoUYXQ5jU>8QaIpT}Bhn~~J(ZPJ(g(BeyK08HEYRqZ
zip3G1IcrnsECb4k601yhEDL at M>2npWWO%kB&!6Q?vioJvA7>`<e+GcGE9VjwKfNsf
zGCa|-M(f-_&3(!d`xNODwYF9n>>bOP;|z^CqTIVH<u2(P(|qIq&QELss~KbvA1;yN
zw2;ehNkml{PX-|@;v<N}L4fsce>0K$C#Y!Y){@7$8*H_s#Ayd9XUP*J^q%!~4pW)E
zO|@xNEngUEe_dD7Jkfs!dTuV!0=rj>$q?uh#=w!<{Mk$HooOPwg&(e2-2ky$oz{R~
znG`s~-*}HjzQUuPSQ_p4B$k~^$miq0gtO_v9d0F@<r%~0m86C1Iv!DMdB2uMc&KLi
z`AWPZ>=y&P&`!R^6S7-^MA`F(WK?2U{)GsM=Wj?8Jq_|K!2?ha8N7VbdOvs3OYRss
zm7IX&-Z%+J at e#wp@?&|zvyFsvfc8*`DwJ%htQ=9*KOg0GlNO`!8x`l%#;%9)^HfOe
zRP<08LF&sW*yHCr!_~{aA^#0qq~z+7Gh~V7j};u-sq0tq;goGl$pNcS1gI}<(~ptr
z+8Sl9SpDUJt?ZMxlSU}<1H<0J>WC<7EeM};aKbRMkccYpx|uyR*NJRAb+5>qe{0e|
z&F{52*T<U}dns)}iP<9`QYq-?QT0Q&aB?DRB at Hgb=}C?ocJ9s~Tx?k7VLO$b&UE)&
z{I^_2KzUQh{<Pp$db&xPx94uPU6rETp-8nYAE`GZL2*w(U$Xh2Sadp$9J%VC_J1D$
zE_wHR#vf)D$@~vEN86K%Vi$$}tYI}DVbgtnK*sGXduabmSJwG<4Rqyu1WMpG)7cM_
z^>78@<TBp}(RU5v6-qBohQtJBqAW%d at Mjk(CZL<%4b9=(@uABwv?c7yDjh{bdD_-&
zl`jZgJdb8do33{<+r2QG@$N`S at xgNoG#)}|2s-Rs{|lJm<FI`T=gP7WdWF^qvf-}n
z7CD<~S}Q1^J)@6G?OSpzEjpJw0Ok0Pq3>MM?+L}Pb1+ui>?pHY$)59H<QJ{+bl2H0
zCYJLG1x`I>CK0hqz|tcN8u~?EDId}TfQ^<yNoncbCz#PxK~Tiu|8io`2>&~vg4We?
z0?5Gfe(@kF4_Fp0a#SpVGssT9STL>)!5hIS;lknBWQ+o?eY7&P!#p!Io at Fho+AE`?
zP~1Wi6Or;XLcWqw8{Y55itX#Gz&oOzZESOYG?oTlZFtGyMQUn22>J>k_a|q*40O0f
zg~FH(%6l(DCW<xMdgnJ`Eo|0Yn+s4 at ycuO5X(`yTO^YP<ITP*0JoKUaAb+c40py9(
z{kvk$aY}M2;htN6dzIcDyMk<v9<Pm0id!XRa7Uby*s0#3U at BeJ>}}4#IxQ^W{21{(
zy8Ef0);Wvx#wLl0t0$1u>IUGNO4Zo1BKz4`7#5O9J*KF?y at txiuv%I+ at y<lR&h~~)
zTvY7hAnT+M7ZqVUguYje9O at 6@Sr_AqI5DJw#o4|#^{n(z0OJ;(uj<y(%ABKU{42`~
zL7|<3l<#TA5MwRJg&pJ>N&~%{yNZyXuuZCs29n!EO^@YU9I$`unzYgtXf3b0I!B&-
zCd)-}8p^Ws at aN$p;whf{Y44n7*E4JXoA=Cz`#cEXpUFU*{LtY>XM=CR?vreFm#K(I
zCUmm;Q5QW>nuzl?&NTRS9(-hURuX5f!@j~(5s`=`UW}$&(r4l=>w^de30rN9a2?1@
zBU=|k`aV~QNBjRHxm+r#q}k6rC%MUJt<-?@4DTQDOjYNtv#Bjaz>p4)ZHJIZIzV=T
zf$utnqS`Sb-{8nl6Uc2ThFjpj?}RR+#-}`}M5$hQ6_`TQh|3 at 4L!S#8M1j5E3TJm+
ze>wH3=VtB at f!jTs8*-$-jgF52g- at Zyw*5yXPmCfN1zS?%Vq3;hGQsB;=LXNwf=3&a
z_r;``)nUNTGwwm6{tNqdSNjy2#7_B)VBs(e?x;Xn=9eNm<sc3t`PLR6;k~<G(y1ND
zdmsLq7v9jziT1dHNk}LW%a at m$&jTR8WZm+PY=0P$t9{C6*3F;kfD8)d${~kPqB6Z~
zdpaMO#dKXu^b=q*ZoW-SyAa+MICnEvl1I)!26wNZ2wuAKamE9t0q3<J+ko~*&EK1?
zlrxVvJwcnF`KXKSd(Uv6_y2KugEh%aSbY)mtolwY7CUWwE!AxX&I-O_?pe873(p06
zMU4Fyi`q7*(k)rxU}jE^wT&@v$bnCztUL-WQPK7NRnwR&s5gK|+$s_zx5(cu!-4v}
ztBbow3jG{-wcFp;k+FNNLY<RIz;WsCzNOo&xA?8bJ$B-js9Nfqh4-@^d};3`SQm^_
zU_FClccN7405d?$zfnsgIT9A6jW!tmXGGu*bzxT=A-}7cH-XW9*fBmXj%RLv2y5W+
z)|}rDczmP{eT$RSc#4V at j;RHQmeemK#406~aHu}5sTv)z7uMiGx0vGvl)k9YVHHMu
zckAnsGp5(9CDJA0E2dP{pidG{@lIpZYqM3vC3IiYW$LsPyD@;0 at lv`~)`q3$jKP;X
zh-)pn77kv$&E${B8OUS{Bxma_2sW<tSL++A>Ps!q7R+wbMF>OY;5prga+~8Z)tQzp
z-$^GmpBKMi_&N^=dl;@a)q8F`T+3w|fBfw9Bl)?XJrBkmAZJCoSnEoR!;4A at vEw`Y
z4Fyq){RhT!h}HIvMEA!`jd4SV8_0_^{TNjrg%k3*QCbRpdKn1-2Ndf+yQIed6eBdG
zqerQj&*y1Rc;T>K5ro$rL|w$PVRG^DIFSm-ukvn{2)DlOEiBI{Lw1$AYK^?3;v8@&
zjfpXpUyg8JV|tKvd#ju71&5?+U;*x1*^j5HYQ|6o)d}NNGyPjan2d4XcLx}E3VtS)
zn|ip_yPz-Yv*ko@<7`D06SPG(J at RedWzCJO23*AEP at saF&5m)#;!YsBRnUn8Eh-4p
zrjUmf*Z1-A;^wB+T>avZh at dRP3ke3^85z&D+rxP at Z?PBY0jr<-w=XAVMc(sl^1h&H
z)PXu;dFO~jB5`H4Ffz3?mC(7I6)YQ9Mivfjv1y-^#_bo015xhj+w{GNxxVQ{Ij>id
zN@<bty$e+BuND?{r8_aphsF~D)e;B=2}0V+b&!x9^e)giK6<Enm!Q#$OS=alx|grx
zc7V-58^9qpEPCulSVLb`b=B%~;Sc$vOXB!EevWFU-_K#j5WXI)Pf5 at omGw?!i5gT8
z>R*&L^xOwsjEANckr`7x*4?rdO0BP^fZPWA<RNby5t^k*Itk8DF)#ZfRQdw-XNTRc
zsjre^<|NqnC1se)&(@y1(T#z|xIfyz^|DHO!1&4x_A9rBarRX;5TG?VXgp~wIBQ4t
zP8yXoO5MC;O|*G-s!%*<4m(2P5n>?tmV8pSZBTN~@n8|{f4#r^kp`|>xxzUo$hhp#
zzQ!TqoePG~F9^od3n4Th33j73hTqBy7~g(ea`(Fno1H-fs99D%pxzy5>r?3zRs`uR
zR`IQi%Gp9b#JhX5H3k$}&act00eBaa*F<499gT})cFNrC?{0cr;EcQ+sixrRXsv6V
zeA}w2creH-<o6W>ffilvE~{-%J9i8)f;B$YMVcPN2kB*cROl*dk0<_quLz(i2p9te
zdD$tFU5tzJ=GqIC&DGATSB^UcORF>accUb`Aan+Dzmy8&-2*nFSvAzWLoPGw?Yk_w
z3WVN7epy57PsWE`_GX}9&wIR#S9N>b4v(<@X$t(3H|{a5H9~m at M>hhXP4gmfj>ZK?
zzR at Z97hFp4;)QwLXaX0QL?j9`*6a;?uiwG-10V2QQN|grbI*GVnKx3aPZT?_gFt{Q
zeAJ$=f1ujC#QWd1`&g`jKmEn@#ONUp&i2~ola|n61rGke_Zkg?kN at EQC)-?hv1Sir
z$Dfk86iqD01!5!0pI~-Fc-UKVJ&ylHN=$!6^`^lwX!s`O>od$G6ZhL0x^^Te<cPic
z6m3EqxD#}{wQTBeQ5HB=XazyK#rotq;e8(gSm1K&i at mKn9^c#S+Th4Ls>_H at +GIUu
zZ<Adg<JVzt9FZ$fhoHHej<z2&x^VU<|G>$Ll6TI05+&(T;alqcJCoNT<Hbwq*mv(k
z2402X#<pBt{r<FNx8iKfbc9niP+QAmWH1ZFw3vVcx#92q at 5SLQU$xWP<`ZaKb`>KL
zi at M=3QH;edpbaAB#2SR;o((#mezx5CKT>6*>dz6?`oktKw8iJ{rPT2HVpMloaTXEs
z^c~H?W$T-bzu%i-VP)EVI>_K~Tlh73b~*mJh6OCqi+<(e{96GA7i>A!O;CJu!36KL
zt*?(A4iliS!d|1nV>1wOa|G6kk&h4tz_r~HF>aR!FCJ-8Wbs$*OqA#M!csoKhAJ$0
zVz*WU(ozrC$C~0ls7%z?B4wU5!4zU7l!gv9LfK!haRKWk8y3nmMp+InZq+qRm^OR(
zkQIL~@{)^271$N^gJe1i^$Iqd)tRaw+PXazVEuT*_%=QY#uL4y9-q@!^_kyR8o+4K
ziph7?F249J&xb-!G$H92CC16&jK-Ktp9TWgIT5te6HxHnvHb&EEQ0Q1xZIsJ7NWTI
zG3IAN2yr_#Cfq~KAkJ#=l1Z at 8t?v0(<|dL3e+aviy`fpUd?&{6I>_F8aSa6x*0hz=
zL{8K9`yD8ND*!9OQ!*Hp#4_X4%LU&YP8DsdGQuJcau_P>Bunz8Kol-9VG_N>n$pPR
zYyi;*voJpR2U at VM^KoX5x6z07tM7XNH)rRCecw;VLcD|ji7On}sVleW&8spr%772j
zwi&J&gQZfgVi;Sk5|#$&&C>elMz8Vx`oI^`0v-!~s*t}FD-_SNM7Pk30g`rkR3p|v
z!PzKt%E;J<<5nM~vBBk1K+s7&RNDx!jT5q0kSch^0R4d0`IXSsMDd4dI!)mwE7vW)
zk#ua1sL=S at re>KqPZErDWZ(y20l}6KQ#G#cT@>2grwM*Z#<NSGrlemgM(B<tVvLN>
zxJIAO6u`DzYd<iUZOkyV^s|ypLk5B7VZ0Ip(o(i~WWhSC#V`b6=~dEl*<Z;-rVdq|
zR(+`>VTB&TBv265Xjz_tvZ!a^T$UNVXQ{*l%`YCNT?^!NW}-M}X+{^F-v9LDt%T?Z
z0_y&4-;3S67q&0gI7fp)v==)LVWmH^cO;B0ETtRM6dUVyDrMyf+?hJ$mo7Ny=K3zT
zuZl8NXMm>c-5ctTry!j%Q;|LrB+kuuyr-)r8njXT8?qt!z0)et*YZ38<ZHuIc`Z78
zk0fJIq~r)5u}7No>#6grVpUfjpbic_!lO4Qdypt95qeHS!FL4tq1^i1o5DSR1MDSx
z`<m!Hk at ZS0@UFUa=GSn0j$zg|%NI=BzoX<f?`A)sJd;{2*N6Z+cYY2xn7eQ9{z3cp
z6$4D#vKEyFl(-kFUrr<0?4llI>D at Eg*O&(xdVKv}9KkKZc%1<+b$D2Nm=|m%>uzuZ
zzs(;?e^l^7WD}7R%$0<FmH^7y6)XZZj*0h{H5RflKK at qq{yEuMsr4AQghQgc0UVAx
zec3MixVK(?Hg7m{eX2-3qt1bP1*ZbQWW{<<RRnH`RV1_?i%}iIG`{@o5R?^!@B!YG
zVZw}1NT+Tb-pLbVW015xl!a{>wqgk`)8x{V9sKIsEzcdnG`mlR!QNwE0IFSP7O$nc
zYL*SyDD1~LyI1r1+g!kls}3CWjG#=P>|Z;2 at X=VP0IMmOh0%`Hg;e<P<#k}SX4W0;
zgHAMB5djtWDd)IRZ#&4WDHoxLAxp^x_>H28%ty{*^MH#vFGNHyzYvR1KD~_F>_AOo
z%XN4lwuoltBySg(8a%D6%V^z4UmM6(aBNaQv11T}m4Bc#Ti^l6;?b38*@cV=w3-$1
z?McG|N+*sx4I>A3=*>GMd@<1CxnY at W%cpF=)Qz+4n|{x2h%vTUXiu=q7L~=#TFJ@%
zWny`|n9PWq<HPIb5YanF*Wr^4f_*aOuFIcXyv}C)IS3Y+OhG526GUTNm=0tHO;kVF
zrN?^A4skEAsjB0pvim+>_-CyTr;cktVQi}oA|Q3%=%TyHo%AYohE!j0gVY4w_EMN-
zGWw>0C_ at S`$9SQpBXLrkP0ZF4yrD4(jn^0x<3c=sH;^@lL0pNv0OfuUc(UhV@$`+G
zDv+iLrG5flVu3V(nlXM>YJmSWxLbZxALfO*g*!Q0i``Cy2vHcWIhzjbRry)=2fdit
z_4Zqe%lFn_nt%;NK;i4t$mpGvcbu2E0;+>*NLT>aPx0oi0ythQDg+DkX$k}sp}?K7
zj&1+G;VVA%mN<gYx?LrCARF~)Keth%$yB2#VU#Z<B-Cfc52VCx{gvba^BQqCysMPC
z48@!`AXG%9VXJ-mF+BSzCwK<EuEBVQ;U%h28Zyvq+Hq$zLGu}d`)EyQ at z8#&H{zZ`
z0Se=HLqZ+8Lr7JlG|V{Nxu at jTojFA97`XVSTg7s(#rmfP;x7V-#jL{&*zgVIE_MLG
zoAWf*B>X$e)dS<Y5ZBHM^~LSchXeLCPe1C6e0d)oo|>w-^f<WId}I3MX at 7dYwmR1S
z*olU5VivHjrLN%mTf*)&y06N5+BGx^7>!U9x5!)W-`}yNQp5dcwHGu4T4C6F$atuW
z#iTd#-n6IG at qXzYe3Qsy2@<dBqNLu-Fo9)SQOo9*vC<m6G#QfxoR53)4+7hw2#J9%
zD(L8|>W}%nKV;9USzzB*tD4t_q{~?`6>{CMW`Qd at lv6p>`l+cnaYo%7(cabbA6s`5
z(D~scsNGTtAG;Bo9ne0RGyGeL$j&hx;2nJgUVd#e#fl7((mmqZNQ{agZ7qjK?3XzS
zp%fV!ainr#J=R-DF3fcil}|m$?HOxSY1#KY!cVm>(Kk&rWMCP{AaIPM-G0WErqn>Y
z=+hEVSYgwwaYLM%SvJ`DlnR2m=p&Oji$VJdvKiHC<4y&~^(`znHyNcD5!?k3S~jH)
zwUZWRD-Br);fI3g(6SG%7_<}EHIv_ip>yE9?1bcj at BRSL2z;x)xcmUyhHo!dGTK%F
z6pEPM=1)CMt#Xn2cg=}_VY(97*q0r6%nF-CBK<~|8FY+#1oO{u5H at rn+L6IV36dNu
z6hxg$^Y^cA;k<Z<oSv~-%KKb41#jVqYfGC3C2AZJfao0dVTm^b|4r+Z0NRq~3l4q(
zF>nn at A^g++#N;JsnRe`oL&wWUZ?Kfiv{Dv1V2N6OtDcbKXQ2ISbi499j73+Th(x)L
zjM8PY0Evd}&CzWR0PThcKaVqGPabdxX+gU=JGZet?cc&ZGR7BuWDwp2UuQ%flkd{1
zJ$p!qmB}8+{R0$=lVm>a*4E}ZH-?x)uc#>_hu?~I2!_DKTA;tw{C@<S{GsmqZ0Cpw
zCqvqgQaxOB at yb1eM;7wEywXYuVR==9hi~=j1+uDC4778lSj5ehi2Y#gL%*H*{E(}$
z3<f1D$|0&0msIRvAf7Bk1?-3kvx?F&Xn!T_ir43j;O;4(Ib)>@72WZ$?CR80=|qSj
znvob{j?s5z2HvM at 7XK%^hp`#Wh&x~lW&oYg53#qu8tyT<6h#++Sf{}}WQfbX1FVCV
zp;z at 9IeZzy$D+)4BEv{7;BHgQr4X|F_g=Z_zb?l7U(R1}p*T}LA3YM=>d!)Jt7}JG
z%<+UaK~T*sEI;4y_R`RVoaz;$RU4nHK>tAJ!s+p?&s?!fiW#3$%;n#7X3(2y9)+w_
z2$1Ow0!Rw98!#P;smpY(Z+dW8>}Qf@%V+m9i}>3W5uNX8V1&zieffC-XStTsnM2Eu
z^_k_*GyvICMg>?0hqJ#8`0?HN92`wAjwYsrx1*kObgtM-&rfw6a%?507t(uMqF)|v
z%r&6f`fIRqQRGpuN{x2DNqvSvWcYh9I;u{qR;_Uf#5y`4o*i(Ed`Ar(aLvB{xNxEE
z>zx($A!)qO`>%SX*Lc*=4JEq=idX7FtWVz(+&E)uU)0y{cNBN&et-<SbkkTTGG7Ts
zy(xHJI_whP69`$#)b8tWq{{wQVXbu)cQ8F(lE9t*FF4G&p=i-};5_TQ4p5wHB%oS~
zv3kjE!PaGO(+Q!S0nQFsE8Ji4 at HaD~i!sxj9xkrGr_|F#RBz;-JJAymC(udDRRjNE
z{lDTy=*+(CuxW=Fn&v<uc05M{$eo+e0a_AjT2_^YOKY5zHfq?2Etzl&rC;wYOs*(7
z^akr5HdG|7voCy|B=Q))aU`|~&tWVQ4n$kKhAktyG99IPGPacgk;WK-A}Whh1Aggt
z+DH9ub%5AGb4(3cu-htgHR6wk!JOj5w+pCLwC^L)))fJP^ncOQe5u-LY*~OqaL^ND
zM_X6~-ScmLdC#48uKeb1gYOk_iU5a>tiLn!B<jv`aB3ioGR~f?;qmIgF>ilnF6%1G
zstQ)n|1`|~eC$uZYk59w{w!B8w(;&I*hT}mxyJ(oXRmiH(TA%J?+(R!c$jw%HR_jy
zL21I)CHGvETB>KLQ78>I^u}=@*MI9Z4ZRKjn44L~R`IJHG>gCGi4xU at SjG6m*1B&s
z3!*lkLXixI*?w%~)~JC<VOS%N>6B$`n10Lt7uW_|qaGhj2%ZA`e1Nu<SOETOLL9UX
zQCH at hZyqa5$8*Z+EL&lEirYB8VP(WR{P7l#l_evpj<K;FtU-x4{7)u~Vu4n8XUMd*
zL at mDVrcAXS6$L#MJZsZGyEVqDBazmZQV_L)G3Mxgw%e2i1`$XDeTfb`pz$j_AOUIN
z^;9M7(YQTDNZne-ZM;BKJ!woFF4E=Dj*ayZh~#7+O2#o0;mi-=d6o!1 at dD0qpEYA{
zyx at svz6IB&0zvkXTxyn*pIWy+n-|<xBTAMGM=Co3vALhelKM$65DhFUN8JoOp~h8g
zpr=nM=`YMuD%Q9sGx(<0`hct!<_uId?t^zm@*_|RK_iqSb|GnNFn)uLPo$*i*Woh5
zk?qgV?3ZK#8Gp5L>o?)sxC3>2V<eF8s3j7<OEkg5SQ##w9IJ3c;fCSo&62qNAqVIQ
zd1Ub7zWjSbnIAX>8gEM8sNuE=XkvGiD-(TB7QFa!+wsz78>p}Bd*2J-Lk_hnb=6+R
z=o?_RdqHy+=S%TCo6pR7`F at XBa?v1Cm7}bcPCfzR#CqeX)(Zr_FNaWSd0u_=Mv^Ss
zL1#$C=P~xAeRm1mo2jWHmd^Mz4HQ8rQ~pP at +(~re%78Aw3&Gy(LpUBo8Npg7th(~x
z at pc8K8ClIk*)tM*hMHX)NLW9x76^Adt-%Uny+K91i?tn52&CJSB-dUj>rkY4HVe(6
z>!&YD=S5F>gRnh&)N#cHamMB^%ZQ|lI5puXxa&22i|6iGYpd^#zDqul<CN&)?k>X%
z%DH-j1ew1!P4{r~d4uK{DRHl?MUWq%n~lx`f{3Me#2J3B$2RS at Qr%YEZjg!kr&z7k
zLTdnaM#>%dD<DoTDtd?{4O8weP1OkhQQ)1y6K1AuJ at ZMa001eY^`|U+`9V_Wsq!*{
zxWJ32#UFTwjjhI;R03quS#@&XdsZ;?IcuWQ#?K}LQo9?XmLzBv at 1v0{w9@=fXEvoZ
z<%!zlx-vNv8HfJ1a<y1yIKYn;uB1yXFH_(INPnxUass4nx3K-ho^|$f)n9g12Cxls
zXBXkc7WwI<3o3QmA7QCtAZg<zkJtfmjyK*Zfyx^;3E!wPo1cOo&pB!P%9#z?8W5-_
zY%sjMLL(TYEYqRz<A9`z$2J3}Cu2K$eKJMz3QY_TAiO7wC^1sNfJrT3JM#33>r`{E
zYz<~DlX;#tF=Gn|&<bWBcb>?7JTMNcSNqZUqN3^_z*K49&ZnNmScu^eedCJvN2H<&
zf&>!0rKq{q-W4{#wGB`GkZV_A=~#^_s8 at x5O3|2xNte0*tHD#@Zj9^$X$`>eNnc^{
zDneA&W%A-Oc=wiV9BsAQwAeNjm}+A1bj>dr#q!mtMK?F$h-Y~=JeFopk^L)US~=lA
z%BthS?O_;4X_f}RXtT_F&=2rRT!kiT<)wC5GbB2 at cB@eH0-KKhRWREZ1m5?@qG{Oe
z-vHqD`~)oyizCKd)wLxTI*vh#@R+z?VUru=(Ka;B{dqo8BoXH>SGVF2=J6 at c?$}n~
zdk9xifjS)PUofdC_9j`W)Ab(qWP+klOfz%8o4jL5I8c(3lq~0bxHm48P-t*R-iwxo
zLf;t`;5oiRHw2e0&$VgNnGSyjeY^picQb~k*Qh|M_O6E%U#dp6vwr*^_3Ik0>V3YO
zQfjc0W}eNs5cDr}BjRgU)iExNw$}J8u4N?k-Za*z+C<*U5s4LpjlMo-lx`8m>r*c3
zCy5 at 4Q((fmGMU&u8QR1&#S}|>xGxxC+;z at nAZ@OA7;_e*KMM*gJWV!55<h)C^y+_3
zC>O`_7(ZuPo?qe!>Tjv6j`E at 5Bq%;5<a-g`rOH^+f;?M+8Da2&0<|#@W}wM~jwzM!
zZm$!qi6E45$J7D|&t`MT^v-4Eo+QSsGmJw}D8kJ(R>E+xvUo6BC+>ievAZHyg_AYH
zArk*&eRwFCX5Qq}(2W*~pvV&v at R-KWNa%mTr+Hi!4P0n71&@@%2w9_58+o*GW_65F
z{C6Dh9iMRadR-7=qjvB2_Q)5YhwVv5ZwdLfNn3Lr75wsMM~hBs(*4IkAa++;?VGf*
zqVXD(RB=_!CuQi1=>rL7*n8$xi{#Z8`LcT^{gy7UjsR)3a!i;`{70P8cX6Nu$XZ4%
zi(1%rKW#up!rP9OdGJU;PtK+nu<g6e8*6aqeeMCXSebZjGbqQ1CUDx=+$8B^I|5Ph
z5ayGi|5R?O)V50+l;Frr3}>olBPMBL(lTcQ5}B?X7CT!F+Id|_7i}Bv<?PDG1U*OG
zMPbJaSaj2y`y*gEJK1KSOtx{t3)ETwjfo=mj1|bt=GOvnBsUsMmiO9+eDHY-!b`@*
z!B8#{k(Sq7X*}s)D?>}<YYij*ByCoPgJ!_2<SAuE>EUAjZk-0GAj6^}A7y3Oj2P2o
zVdW0E@}|IrsF{t#3N at iJ*vX$|2Dr at 2u*qV}ZwK%|xa4JYxlwNoA)O|i(wE;c(S`}q
z<i>#pqGQbEQyYyK(Aa)taS at qe4?|GGDMI?hjAnB1nN+t#1T0RW816~@S>(7SdsDis
zVlezd<8g2gYtawpD0q2DuM7PiyMB{kzt at X<z$AoOZ%2)(v0&B*9+d4%t?izfjZ at ts
za0fPsoH<j1Gg(jxL9F6Ze4SHK4H&dlde){MHX$ILzZ)dV+-9`w+S;;1CvEY-r(_yM
ze3Xi!-yCC6lo-EwRBdO9(v$NE1p|&k&S}?nXD`I;p&#Lt8k^<Clh8`5ypD`RlXPMm
z5+NAfM(8Qs0u^V9GaPvV{`K=sTMsNW8wuP0(27Et^$fG&x-xWBip?BXykk}_6uSxB
zCW1nIehrmvPj;kvPJS)Jo$!r4?t;)unyUj}lHmkjZvQ_TgxO*JtdgJ>O&B1*H|Kyg
zwh(AA{WA166mZi>9lhXfgO2emR2Z at p%2>Mx+Y+!98+4hM<|auf{^4v#Y5RM_fRvqX
zcocRvZ9HoT-+ at zxCXItExXAy>b{a7jUG5DGA?bF4DS60`L5H*K=2P!GOd1q~|JukF
zt>z;D?Y6;H9S`1o>ndf{s$CaqSH=WpsW>mzHD3(fEtwR`yAG78rC1%PFtH%H0ff2|
zQQyFMW|S>3iIo1ebz18xWQwM-Sw=@#D|D at P=<A at 4Alv&bhtU6GEaDQRf5t#=l<M at -
zN}{4UhO7gW2hNnu9tb4T+A@%NyLgD1PBDn}4m+>#-V94y+AXGdOSRg+_=&Em4$<Qx
z`nM at PLYAtWFsVYd0~A=$a6+ at kH5|&i<^VyydnOBR<1Z_6l8^U0=C{KGPTL>dPTtN|
zTc9X=Km_=~d*`a5g`hYq#UK)e<x=BRM0OWhn%UKWK;5F at BFn}Alx1<|YSxYfg0n@!
z1cxsv;tdOf%g-W9W33ro$nT%<ngGMfL5y>;)2XU?YZev;Mq?wYqX(BozBY0UO2Dd|
z#+*e-*%p|8hndd4>{B5QWzuatS8<p3-%>KB=-8;W7F$O5WBsrO&*%;J0F^Pf+0|&(
zw-2DvwNDN=OsjY`wP0_X3K{y!X^TK0NpauHt19`!f*E+qEtb!qTq`B7!~n1GKp?J8
ze3F>A at C>bU1$7B#;!z}b3Dj{+f8nfF{^t`9;l}A|M)6ZYX;A)MCw}O``%uVG(?i;=
zW)0 at 01Bw(6hE0RWE~F6iWO6wP8Gu1n>Gep!*cXikFQkTluv+1N<Qg(ty-8bGi7aJ0
zO`_C+jj)1kW+wzsqrcHv0-~ZH{vBaRHLZ-?)%Z=En>%t139Zy);8n+AB-vnD8c{bh
zVz@??77EU_qCOu+sHw*I^+#i&9tzG$$L}GMQu>K4>)&#pMc>cak{K|<5Mj0~)uAr`
zqY|p at hfZnTpSL+XdHNfjuvB#wu!P+;+RE$-Tu8Q^DJ`RL$t*$go;f~)*)GeDMO9Mx
zZpEZe(h%gxo!wZM(5=rP0~wfbYF%F1ksVZcQvE)v)#q&MV%HTO$Y?}<-H<5BHZ5{}
zlFGTVSFTQuaJ1<N*M8Q<uQDqQkgO>(7?_ycex8i!7DAuTjeShG<A9xWDLq!-BFiIi
zt7e8jMR3XTi|j!R at uDcspk4LEvEIjU*89Th0y#t<oIS+S?Z0Gu%O`vU=l%xKMfveB
z6M+5OB(jNIq=Q-`>lPg96`J;U1>sIrXwO+UxQ0E!345#tCxC9TZ{M-qji>P~_F6^g
z-s^c4t4^+VKW<JKr5v3{BG^px!UsYsGbVc1$ZJZ9W_n}=>6xP|ad0$mp at UsXO&{Mm
zrY at x*?(blOt(jF)$)1FJZ{g3k`>LZ-f$qlZUJy_kMLgb>oX&ar8VfFVgCvjg=`+ct
zY5%hu)0FG+2zvjmZ9~2i;ow<rjI9zVWn>Kk%sLDM?_?VYorhzfYipPE+ynC5)~7q|
zyGSQiZrdU at AGg_C!pclZh_;v<8M$6LbAKNVsfbHD7t}D|?yO5;vbAFSEMUuHYK at J%
zeiHq94X at h=G09lGinCd*lhf1&{sQG9$%k-nFc;zxC(l9P6kuK_8*_}!r~2KgLsHkw
zC0BzbC2(SkA0sq1cXOzl5)?umVbM~I)<{UZRs3Q+ITguA at xRCp0zo3FjdAGE4!p*Z
zZ!mNKD9u!C0te8LMxcc-dsQL}b89LhKspYaaaV5h%$!5j)~3y?K5R5|rJvSgb<nX+
z=&MBXF*S6Gnd?QGPZw6f!9fwmTM9qz^P at Zad((j at M?jGy>8Ob|qZR?uE|pqrY+*q6
zGQId7TtE+#yZ^+ZzD;)19JN}dxA==2T^k%GyE8CxA64io1iu3UAD!(tY%01Tq)REz
zfZf2;?OCU+ze5lC01fSun&c?yC0;TXzXn%l^oWq^nom5gnn~KFDXl#ujF6w_0K*LC
zXy+!b)}}^Pxw%i+iQ`c<`{+lT*=}+mvY$!to5M3{!J?fUl|N5L#=(X1tkL03zJww7
zmNX(eK|^%OWDOCB1$0(nf<0O`KE0Fo_2?%(yV=1 at l|Q}lRyUQUK>DW9sSB;glx(Y(
zpnom5RXDRiNje7-ZuY9gH7lxR5t6Y7>V+nno>zFog2YmH4c{!yuvh9#!3mzGVHSP8
z8-Q_#Kgl`Hyoy51!Z+-)0T%<W8mvzRwxk%TR?Rh7iVE4fBEzwy?r5j<XR1?<xGRUi
zMp?r#{U2?!ni2y+HeFP~lfp*?>^&7To=vWz><2g at S!7*ez_-qZ!ki_44Rv%Ax6v0_
ztEds-Q+04sh|UMylPDsGt1x497_}kv<5;(m at Gkl#Y5jK~Z at SCmDg23fa^gSBHiJ*m
z(TKHJB2{g%ED{x%fKuA33pl6kP;1<(zQ9!;oq(gO3dVGxc at t<o&D%<U?PXIQQ57`q
z@`GU{?!E)kWSL;{_NU<xhSr2b(!FaE)^%7G39AtmyH?mPgC~#(smiBOh#D+zaT0I4
zINXW-yYGV^KJ;n;1_gc>4;%j>bpsmTm%{8d87~)VT;9Zi^JtGQn`81#+V8AQ`%&V{
zoA}Wu*Ga+7hcFZC;SEgTWQ<35`>E5n^&SuOj0WBoUUGBR!7*C<#JhN2qtfxuKz1BK
zy?qX8e|uu1Ow*1ryg06x$A%K2gZj*OKU<;#(2I?SY$@%R=#NZIxkVaTib1m!@>n^I
z!`>PwCpY3B$!E72S47j8bN+Xvg%%di+`}rM;HZdv?2I_c;W%J6#yt4f3M=;7$A+xu
zbf>heDVU>O(s0bG^nHkhE?rx+2o$yj`^6H|0ABq&nCY`d at Y*|Xr7G%r>DR=rE{2zi
zYu(nJ)c<Q(k+^GI(jK{CbBd<%L*~x&6=^@^(_?}K)YmhT9&vwB873z`YOt%eV<=Pu
zk$i%KZp7g at K}V9D%5 at MyX^EWPDUgvQYrfEjUhWCQIEs)%F9e?(c(;G5ti)eR!X#ls
z=Jf%|qigO- at +QuI4}$)s>o9epa8(1TKxiGoF8q~TYHu!_S?4hY62L}Tn|3g8QjCj&
zs;;)5)zmy6)*kj<5mKY{+JeUpS7YIqpmd)XrgEU at UbXpE+2}&_XEA?&F(znMnYZ8{
ztQg`LirC@$gOJJ5;u>Qn+!IPl;Zl8Jb|G9LA{CzMk{?~4LI!%V3EY>z_`0%JnUBw@
zEeb?+uP4uJ!(l_)Y38%mmy1%F)hrIzO)dW4)jT}wj)Uh_$(BVvU<qe0jbts;3<c&s
zpqAr<V)UtiTG;XF_tp39r~96<=(NnFXVS8j*T%wSi2qFip{oO;DeI`vkPES65rp0a
zaO;SYfBftIvuhp{yPXQW<nmENncrBQ#D}oz8+Xi6@<4VB9m|>N4F=K88Ze8F!=p`*
zQNQ@}%$|qAicF7hbNik{Lye$p9M33gVJwb9hFX9iqwRAl#f!|TtI1^b$+3-3h6B;;
zWpETgK_{LEcf>Ru_?~RV#*h#}l}?<(eyYd6eL)6y9ususel2QM at yr*|Ou38N6GZLo
zQqr)T+C$i3?eKi2;JaK!Y(I7P6LAbBw70e^Uj at k4hvGNVTU~YWJ&(1+J(0l9E=2AA
zNS?hQIaS59 at v-Y69kdh%+tZ-~%sblxX-kU@{jR+g(aPnC<xq>50o&`xi$1A}{dy#7
zN+u~~3yI+O9j5Q0W$7;NC6Zn+HD=<b8>^2LMWO!zDLI1Szb2t8Oqyv~V2gIr9-OfD
zG$N%457K*>212y at bg6}ea<qX5tEJ+_zbZpxSG-*1M2m^c9-zQo`d56d1LuHp?i`DI
zS&C4<;%*s=V-<NQ*vNQ^)xUr)&$sxO($_~2vc)7wlhS|#9`+~)Y>km^LBRCjj+0qW
zcMq%{C5c>G+f}>IM;Z;Ghv;V|Iy!5JkD4*EkfePJnZrXXi#EI+Xc}=^W8A^IOw@{A
zf^8DQHRmiv-ArfDO(du040UM?9CSCbgQ=~dgTkti4GoEez5SB?E_r$uEXQ&2bObdn
zt_wFWqQshB$~<a0a4Ey-{F>;|(*L%>n^IK#nXIXAXs6^V%(jYNw0t9JWNKG*i$Y~G
zN+$>8dur`g+Dz44PovGeBsoEbxaE0|esb`pv+KTG0GKGoOlNgBtF*Rx93GsZm!Imd
z&%{ytJ?v3`%N+hLW$7e7nBiJhg$0FQm%@QSb at sf7Ys3qlKbT#XD6%hsHE4yxX#FV+
z&MCMfKsR+DEDK;u82cz0DyjcQhABT(Hy?|KF5<~7;yp%YNo*Dy$&-P5fHHUP$n*?D
zGJ24!u2h0Pq}{%!x`L~;7%}0?%Ow8rTR#_Vp_`kOqrZgcsP^CN&RZnx3XU)FI2oM?
zUkw2c1ZV3dQ9YI$=ZSPibm(VFM>H=L;E1#t-*Ez&Uqu at lyDFHT#<^<+su{^bMLhs4
z<lk4Be->8UShIy_e#0 at -C*EN3AtYcMWQeRjNJ)9|aEhT_suR%lRxT3!R4qN<>+0Kb
z>${Lb$K`OSTa-o`)+cVw=;7NiZSsEEb-=LnjLP<=G=R|02GoC`+GA*&_m>ntvsFly
z^qGF at DZt7E@UU=N8r5joP)w<mi;C2J4;K~?q!YAbkknmM&>NX5CX|ueH74`@zZ9z-
zQ?V7?N^|cdCJpeAQQu0hEtsek*Ku*Ek8V#=LLY(d(c#8~(b5JQ8SU at ME(=Dm1mT%H
zquqo8_5EeL!>b~y{swt*{((wEc~wI#iO+m&=*y}Bz|)E+mhI`9I~zk}u4d{tv13L9
z=1-{46cV)!d8$1Tx@)wi<;>R{SAh>sf0_<31}9|W7;c}wrQ!@J8$cdQuduV)8YO32
zCQjtphEPk|qCLE&T`RU_4|vKR3LIm^(Q7rDFi at MoI4AB#*^M^(KzNC^YlF;&%eurP
zJGx%5G+bn{jQ!qJ1Wrg;Y5H;G17V(^3l|PFKdQu~cSlcC32e`vl5=KxCXdk+4ds>l
zUWLR+<+_GxeSI^MhaL at Kff?N%b_x)KP>QRgdf)RrvBNwTBMQs(iBQoNyBi(6B+_^R
zUNI-zXO4S243MQN`Kj`BXxylN1v{2uoLp+B5}(v9?T^pfVf9Q=()!bUi8)*7V%o}X
zw!l1?iym%UdrhcGH|h;Yx5j`~2r1$eS2g_p_c#=mr(>!4F5OHqip8u2x~n0CLc(>)
zO8z8 at Y{%s(R)H+J0z2DP{C-AO9EA;QGUKRuz(5+*RHSO9aLh_{FQ&TzUEOUVoaKAM
z*Ab|RWOc2e#6!_C)!cJ{9E){PDC|)OnpaJ@=?g{NDReS+WfXQtD1r+ZYZ2OB2OQR?
zPgBlDmNvdD?CAtW9eM_?13d#)%_)wQX}mherHqWqP`!D!^jl({6Lr3-X-M at 0ej*hm
zN&p%U;{E`j{BYm}S$6MfyR(lI^Fb+6`#LfsgdZRIdZ#cX(?kVAdtqMqAdD`?;Xhpx
zgWu@`124|qfB- at cMrY7!m`zq4flg7FZ?RoCvd8wOUzmZJ4zYeRVZ)Z~GQI?KYS<<A
zs=a=BMBnlw#cpcvn3yGLGA!HC&s5<VV3_M_7YI)dFMYE6huUP7`cRR^Rd4~ld|4m|
z0+!qZo4Uy2YD8I;o!g<3B$`X8cR5jjH=1R9y8ZRTxg|`8geO^&z_~u1VOzk<ePh>Y
ze9Gy*l(7(gxqAUpv-iA0m}jgFT_q)zd%6rTgjjTy3QoY7>vWCy=V{0C2yPKBe^>B*
z2Hh5f`iPewo}wST^p9s3*EL4G-KY|Vsjg|zq%I`rt*cttX6VD9J<11kpl>29 at A|Ov
zC$~cjz1DQr*0QSUrCo!mdH_u^A7FO&Dtmg>!?4&pS}d3MaWnvPL)NtFiE37X#axmZ
zR9TW1=CY^MEaNIJnOoD6hI!DYYBgcCp(fBSW`wC1TI0g2$#UwIpxvA%ZJ=}(!+V7F
z<25%Jw7&3;qlIpj1>d%T&|VBQJ19MG#u=*vHSitNCHCtk&yoxBBvS^I5}CFYSdQ$v
zQR%HunNM8wWn+!Xj1$xp+T at w`^k=H&n)q?NdJ8b-th0y<0l7kFJ3bN6v_#nCMymVA
zg8P=1PBmVcbap!HeQt9VuRDiFvo#Y1{Yz3Hja3!6{A=x|*IB&d%LGHEh7oI_KFU%q
z`P56mmW~qy=Ao`qriFF+`#H8g<PC^|#J{v=3!x}-A#tr^UIjw~hW3Txt*i^9 at -yl5
z{3Enwm!#BBiimlA2)lGb;t1f-gugPevsMX2$kSF-WqZ4kEaGhMueTL2DFwzGt`T-I
zcIb1!2U{Ef?u0i88eU!Yh$CVpIJO0Nw9SWxBJ<|>1%C><b4A-g at J~t2i<G`;@GOTu
z1QmlNGX$%8<kt at V$aj>hE<?hLrw=u{2$Em{xqJ&<Haw$dfgJ6Km62%gc>jf$uQiV4
zOfe!3_O_5oQ=QTo%Lb^f5FTZa`Vc*2gABfktWWy4Bmv at 38CdZ#>FW(D8|0O at D6&ka
z{9kf_yt3N}<w1?*hUx&Gtzu_0HDb4F7o7 at gKvM6_sPdILKP`@)5Bnt|65Lf?0`Fjv
zG)B=}N{Zc`%IUEz&?ipIhS2I-a9SFdM!-xRppko-{NC`$)&E>T4Ix1MYY_(dJdcLr
z9+zp|K*5FF-B8BT5>iRT7%{-57h<si%K`omV8+ at pwI~Vwh^$|}ib1%yQlLh?{8+_<
z6;96mEVH*IoWL$^`s%**gpY|613An^z(KzEM9rU)S)Ce}iX;^jyWDRw%7c#?xcDu7
zT*dBjy|cR}(Itj9B{f#(c;MBafzI(eUhO6IEDDr9Z;|wmLFAM+I0m>1xd2w$FS&XN
z-sXIrJIK>cdmVJ~m8+(6Lbs%+_Uw7Ym((wXbcur7Rk}2+Xfog9jbvsagzh;5AM_w$
zk<`<Q*Ew41CkwISj>O)+7=4An;|XGVj-yR)W~3-HC;|@?6}QaWX{8t+3n5;{HKB?K
zJm}yctN7vWf{Dg&3ZaoyB&2>8057G at fTxt}CX)NTlbq8*zjFPg!Xt|0+-kFgYXHl~
z0F)G@%aD)MOHqLk3Hqsm2;28>&iT6|LIHu6P57c84`<Bv)ZJ^GvMtAc`CW^iIF2RZ
zsvYsnLB%TgjFA8c&yRWny!o?b*kf=QflOmgsICf1DOC6vp<2?RO4bnz_)tA7WwGq{
zT?1&nR#3Xc`c-d-E0HV0`$|i~(9mu1pLXU1Jh}9wR5k~zG^*Xoq4>e#Lez%#Xiu%V
zoMcY3)`-?;aZxnJ)j!FJPX85*m0_5o^a%HRL7)p{FO5j**Xq_mpO3<ls>db|8ySxE
zPzAa&9`@5|fgEc>g6G|=&TLeYpn}9V2F7R9%*@D>;w^y4Wqdp@)eyHE60}m02F9iR
zI)fFeu}#E58A<i)aYX?hM at PKYHevT>gNoF{vb>8-YLr6%M<l^a9E_eJ-`+slk at pQt
zokY&ZECQwO(*Z#jh43Eqp<^DFJ<?CTZ-P1jt8OMg>WXiwE8d8FcGlASe|wD+Ree|r
zJSxiT<+hn1P(RcyQ$)j-1eH8_K|No27Pgq1qC>A7EDXmKrcua{#Bna0@~4mj0~gBd
z+)PwUiEAtxYV=tBal)yBPA%6OL!3IQ8NfZ{M?4y-4*fJw>MLPi-9jv920TT at Cb=)Q
z at A!U#*-%w=%m8Dco9 at 5=%5Pb)4AOxdS7IOBkqJp(`5)OndaL-4lYT4Sp%3h?u#^|$
zSv@?7jCMC9-0)HF*U2JU1#+0Rp+ganCX*(|?YpE7$XMH?d{>0)4`k|{ydq973325(
zjhjSCHeZeAi2v|5jXm}x5{!Sp%TH0DRBQSVg5PE~Whz$@zuh#G-}#sUA2Vw49XS(n
zBoFxX*OZ37J;b_i^j|mQeu7M+CHs&L%Ox9{S)+c$ugo7K&A(zc04zEZlx!?G>+>H8
z=V7<?rJ#__jb)enSnBwm at a{uvnp|m6iUuF!euHGWi$<V#5{rVXB!}}PMYc=fK6Y_X
z_9pxh(-|Z#bZDdwe^YsmtslNzZpusWSvMl5W-Oe4iuYl2g2^Vbs30q9gtiwOruk<=
z`p3lR1UPWi#|2YWz>WfxAk%$bt4k1Da2`OBfYnnJ_PJ!OKiO-B07>(=fw8~4F2XAC
zcK*)voR}E9MXbX4RhMZ46f7LnBt0cu?p;J^n?SPO=&)Q6!_PSC6F9!pcC at 3tkSlRR
zTINq0nLF`whUH>asgz-WcgHj<U(i?|OhdQDjT3XQC_QlaB8#!hM$l&g(e#<r18!wl
zXN!?+n4lrC=xWhe)%^Lt<(ibrMbv}P-_<2G`8m|q(;ndkebU?{TJkyVtcY&29m4`q
z825K09!5d*SoGNQFb~!;{iD^KS6_)$S9yYD9|@jhzE`8AET}m$34vV4uaZW;`nW`^
z&dlhP*H`1ZG6AH}UO7xgw+hGsDvayutF5!~ibcWoqyZAETA!koH+zAA>iRVo at k)Z(
zyh<VF4QBDD`@rTOLFyZ!aGp(9C-bO7<j3k_Rd_WlKWyeEo}#7=v*|O*bVATQ*UH&I
z&jJ45mRmILK-vWQ)`9?Xr2BH_{Tt4-=h>xi^ho5(%`c(II}Xn}LXEf}_szxYT?#u`
z>xczYS9s?4%4xrrX&+iRqYyb^vw$0_R=nFBh_kbr4s$t4Fp|D)P6#|NQ9T>I*1abc
z=3JU!hxD3sBHZdzM$~Nrl_v3zsRW4^ddR_Ry_YIGsZLY;1wmn;TNi&pOR;pzEtByD
z=8Sk8k%7}#RgNRDVF4wI87kXGf|bv2M3%~LDx9_<GPHf!g2!o1&bN=IF3`E2-I>HI
zJQM6k2F^CeIu at Ade|af9>CN!cSPf#)#9)pQbyb9%sShJV&3n`@0^Gp2ac#5zimr!Z
zJLYF$W#@(wtMrA5++eM;4W^5~5#^tZZ~G+N`+&GH0jwg=T;A)i7qW&eA;Byiw1|B+
zXk>)0D9JGbONtun5fYnY)v>M2%JsuMoj&`f{wGx&$zl+_GmLOs|CTwv_>lkmhfDV#
zajhW~vuQS&D4vOUIaY26WXZ4bLI+nEtJ_n~C{2p;6uLMWczm`WFhXqvWXv@!{Z><h
zhkinIcr!n6S?*W};wN at 0)6Na&QZ<Rr9&Ky$Bi9ggRcm-}i?}po8G28Z?LWjOqmrm-
z)Z#=BaJAJw9)E5$U0(mA-kBuN at k2l(?@1i;F4_G{LmuzIodlmF2XJflWdD!qUqdoG
z(^VTZ0Q*`a6+2JFm%DX1)RJ)7a>WB3#&qIfP&wFj1gNcI5yj>!Az4Gl4nd^$x9BmQ
zb)EMKC~V3NrB2xQ#CA`QaM~&Ce6f#?sHYMLj260ODJRY`G`<{SH?nogQ)6RX!&*K8
zH%=KqPi)Nf=IBY{C*B~3JAPE1=0BZ;iZHy<_Hd3#o9|FXnW-{8##fp#y(W{t!T5kU
zOU6;pzx!%_Gk9dqtqA~uf6_UGuqzN@<9fg=5!@(+bM)a}f)$>i4m-=Su^j&z at Mnfd
z$>1;$=^Q)2qsn||uNWRz;`11av9(jg)E`|lr_-@`41I>UYj?jeH&TZ+pL|^vO}5%l
zkh-e1S3y2vDpGnur0{AK#d6KO(f|^Ij-cH&9P-QFx0nuww?Dx7>NBE(ro}P1Y^Bi4
zrlOFP7?nw3wiHh`)X%1>@R%y&o!t7M!x$xBw9i&MeCPKg+LNxIp>^7yhEBgQdk7n=
zNjYDmD at fHZnsR7AeHmRuYs3!>@W`YF-?Kt9LcbZxR#y8V?eM>{g*+qV`f3bZFZIY#
z(a&CuFy6W7&=E1+C)XV?^Ul~Y9qzPBp#>`<85q&31`9p77^XDDh{ozg))gh at Q@Io)
z#x-pERlijW2)Q*0qL$+5nN7SHZ`5;B+Ayag&{wI29H9BA-!|HrG_pHppC=|;TH#n#
z($UBJU-DedWhnmfHq-C{XS1gmA`?g7a6FT at h=Ct;Zkom>US48Kf2?{+zWdQBH(w=;
zcR;PNi`jjwq&jS_h}p$xWGOb|D`MUSRka6~IZcQ4XDVcMC)xp(F at O}Poe*a~@m0C^
z)V;>yzs|UoXau&sX}tUZf)3&D6i^R1w`h=8jSdF<%5=LyuopAf1}%6DavzxG*~X7i
zCXf~Z=7zbP>}!oSTvACSLFP at 990|&C&g~s_5BXU at HbhP%q|p&eM6do~t7%;1zsnl@
zlO at C<emc}cc`Qhs>}ugRVBOR8_kxjQpQ at C4s2B~jMMS>+jAHX=2QEVTO19|DFFAqI
zw4*tVcalLffDY*_n-`TOe^@^uKV4QayLylm7@}f7N1$H;xR>9HM!ljswaRV3_qt!A
zD0 at woThYyx7`WyB(sh|sgE*%1nZP2ghtzI>9)4mE;>KfE!sj#(P<9jDy3de9gwx&T
zRd`&;+=T`8FWr<7w(^8xNhMHw^tmg%H`i^FXDOpG7)l}yzLGmY5UWijs1_mhDm+;Q
zNvx*)k60o_wJxcROMX7cCejFSXQt^yheqkvxuU<+9?;vX8}u9W0fW#$?m at PZ1r`Sh
zUNec8I@@%DR6ez_eyZqLz8Y@)6c)Z8F5{7qli;A9G7Z(OIr|n+KwuD&-j~yRO70Ih
z`4)qKeM*GVnP5-f;)zJIS(EM;Q&oRar(8rUTVso~2hms(8BCQ9jQ5#$P)YGZ)~yQ;
ztLnqAa!rF?Ej2rE&S{PF0hf+ at -4?b~_B#~S8tgnHIJ8tw!^N3z>mNt*{qN2pLwTqY
ztNn->^59_A#4pEIObg!w_cH)%Jt{w5h^6IqFz%fK9J3l;08HpV2e|ICqsDmMMVHJG
zSmWp#W(}V;agMqtw7yWfM#R53m4TFy#5zEY?Psuwzr}4sM<5(cY9cz}PW`KhPmP$1
zw at Ev)L#~+arE<LuMHxt$P&X6+3GZw#*?@1GfA)aKs-|YULX!kjnN7tiH&&xLdE3dT
zc?JuclOcXccKsm8FjmNV|4r{c_hndOz-EfzY*)uJ0mcTbcj-C78K1yfX3C0;&E<{v
zV0zX|u-_~rM7BT!lxSI?2&MEYoBAv_Hm?K~BwsF%-gIxCQTiZL+*&tN at 3K9aa2=)_
zM7v{+7qAWg>WIjM4$0eG2ClVZEpY^?r<1atyIfn{pptU0XD1pk3;Y4Xp|SbwC?>10
z6VM+{E5#T5V54|Cjy-M*yF{*h at aeURIV+LwW^|C-{z*myi4Q*I$&IHpDk?7fZet*v
zE%W5KjD=<SIw_MiRHW?NXb7nK;PwL5o578}*qTZ%1yiCthHsANnRtviyFseE%enq7
zke7!dl%)@f&jKkW$sxp!icLMZ`g9t%CAH*=fPHIywC44yn?@dP4}@;TVU(=W5ruj>
z6gg1yg<#&+lEpMB=JpL9_eUVG^s{Wfz at t46-acnb8)%R6fKl^DVM%3W4Lw)gk<nSB
zwe-%)WmB<~$2qQ at qnlGA8_&ujB4w(~)FDql%I+Nh$$M`$*q_>wD)*-4>6f~xT*Qeu
zmw|*?o(;jtU3niHF|xqi+U at az1@LR at Ge>s9xSb={2%<DVfGCd$L&O}t%qRy&19o={
zMqKV~u`}jIih`E}X`JZ$do|@vWOl*jD&EPFf48PrFu3pmU2wJ!&}x=j^55h>QN<0X
zE+aN;>U~!5)S7(7<z$5q3$BqwS0Mw9k?0Z23Z>fwShI517Xq?JnlslB(w6gZ!opCU
z#Kvl0g1=rjTj(X*GW&Ld at Np$M$iyGHDa+bCJQ~mF+;ZvL6TRG5)gB`qG1CfW=9Jnd
z$G!saY?bF84s*8H;TDrZgi at O1zi&x3ciq#n6l$Gj(Inn13n^LqW9{<N)X}3Ey)g3i
z&DqJFjlCZpgHWP(7|h>XCv!W<yP5)Z4=fi}Dn5Nxv$LGNX>0)~z<sEVZDJoL-QHyo
zpKWcfF<eo~HY>e#Ct|^b=PRM-AFh*A9E^{vx}0kE6`wP;v%%jRrF6rJ$*3f;05q;=
z;taC}QbtGIVbigX8?@Yw*twCG+StAVP(P1Io76F+6iQ)#`gtxT3%=;9J%Xhb-P}Kq
zUH(-?uIPYMiA}F5tCS<b`T~qL6%`jQRORy`yV6+*)q_cUt$CF+Hl4oISU3_|Xk at J}
zGG=Bhl8m92gC%|fhGK3%a<t$jF9XNZx>f2;XKJ45b+VzHrE!nCkv0Ftxh at nWZj&eM
zavOk|Xzln}P{lpiK(#6OoqGJgKwTloEvUKt0*}ijKIT8;D+)E-#T?^d?p!!EX#hVK
zVtXOD32`%g4qmy%FDjR_P4G)v$p)ntaQ>xq4w+PYw~;gZ3~oNp<e6zsb1^Vbx>qvg
z)qWJ+3^hw6kS?2v9_e0~iM8ibHVr#jJ8)=BtAFEmm%P4{x=TK#i-9z3_$WLKY9Mks
zDBGU at Qz$Z(ykU_Ru2gDOYbS8t3QrP(f+)pAp!O|7B$o58&Nvy5$Nh=gy(-eSpy!-p
z4C+};;5HI&POBxJ3ax*z098P$zlR1;)|uN(b<O~&uEcua>*@MT-^mYHMsZ`5 at _ne-
z(j-*W8Bus&UgEY at sN7#9 at 1u(`=?a8oSOTxySXEIyJgR9k=@N at Mzjdj<&o#pE9!g at a
zQsfGVmArnkn}|hH`WBW2RK_g%es<@Aby9$h0q|BeN79IA1B59A9)FE;EvLtr^jO`U
z&cDv%c)nAy%(00e+=&pO77wc1zJZD$aMS}^pZ}!2FGH3OwiVmmpEnREZP}Hc-CB*O
z_Ski*bM~`$prC69Z~?&3cjGm><$~VXfAMSV+)I at Czb&V%39yS4(|2}w%^ob}JOvM^
z_00(0$r`?Y?Vo!kX;SOxZGB{1J1qccZ=OEWECDcV5dLo>c9fA?H9a(w#8k~6l|6Nt
z?2#5OKJ2&nP?1+WVdDp8 at VY_E`h%k$bacvhT_KKEhm+BP>`|PZQ<qEsj6oX*ydEpC
zkcD{zOOzEGAz^$j2E#ZkU=?JuXI`d>LIN9ecojxFuPo at 2R;1?kb%eJe^lg4Z8|FO{
z8Yk}c2^;Cb at S4TGT+MsKS`X#1)_r5>iBtK=aQXlJV8}ZTfMt05m`?8idgOm>Aw73q
ziuM=kSV~O9)$?&DIMA4Q!s|=k8%7N at Yo2+xVL9pjhd$Q0Z~VtuY~#Amak;8xPWYLE
ztatRAI&RQqmnOgyJ^Zh{{X5p*S-l}461aju+o%C!BYBzjAEvhRNMSXNI?u?5L|B2O
z=MuKso8!8_G^bcsce&4YKZ-ZQo1FQBrw-1z*pykdbmrF>l%jh$)ju<0)d81|qn!x4
z&)*B`pfPZs{sJR$TwnPV0H9(EzAI7<ON+T0 at Zg_Z|M5x3QLy|`=H&n8WWEDhP({>7
z#t%|4XqEY;ZHNeF+_g0e;w;>6XVOYS3e1PiBZjfmtQLoA@$iTXY{Qwwr3o-vqiJa$
z=DyjY at 9V%)Due%o*<CKCDqG%)xJ?mi&BByMBXn*Y6KW6!FV+l3?-CTaNiAF>>=&?x
z7O4L{t33deOrP+5RC(CRh>l&-7V}%g031dYDlp)AeT>{)dz;5HI6jKe5M)?QHn*iT
znf`QXPrsq2m_IgSHe`J}w#2jIee6#zxSi_*_!S&ber`wo;Q^A*@0S$tIZP}H?Zxvm
z@;Zw-zeR%hG6^e5?%%Y4jG=<un7^ZE2pjLT)a#EnsM>9pSnPP~eYpV{<scRnHn94x
z*#6Rrkr{nj&K_XZcM`s$V$DSXRm8g at lk5W>X9;ECr2 at y=W)-ZJ_-{I2mJ+}X1CyPL
z^7G(ZaU`MfxwCCn{p`Be)ehsQda!WSaK5jU^A$a^&5_&KjjS-0>fg~n^5etGCwmH>
zfO*Gm^Y?pKFhZ;kBURbx=<rVPqy at T3l4F{u5(Zi?8R<;*d$Lvey{_kVj{uThUTP^)
zyCAf5hX(jpPUG7XRJA+LHyjxL&oBuMDoejU(JPG=EE}cRm1T?4sb%tAK8vtM*4+aU
zQ044-c=*!>dwkrJ8h0Gk4DMot?J_~9gi3~hM-!F2PB-wjIl&n9<wj+y$7!^|wJR%_
z+oln32w6E4RDJjfuSMaukclNg-;+ydD0L<Nk^(_iTN>#zUQXV{o9^{fGC at 91%}Rgb
zFNz|0lTH|p#1ZV2i4>LrOVGvRICcj0f2;dyEj<$se9{5HxZdF`erDhB7QyPmEPz!?
zy6k!Se9FV8!~zI*U>{=QbpgH$<TPNO1;XLg1b_^tBtm`T-gi^#cQvMIR?Rf(ZDJuC
zt{FWupjZadbvyr5e4`gdgA;g55Jw!|e!(_yi`taW8$fcx0WZY(kX;0<d8&);nMhn%
z+p+A`MexPMTxZ+PYOmT+TYHb>XXpU-IbvBYnIVS~rBc>9NvgSEkGGr)dEcuBHNrc}
zhO(YwgQ%<wlCOaD;)g~0{4}$`1D0DkE8m8<9I3ajRcC1kniy<d21JyLDGyqirUB at D
zmUxc3AC^}=lOAmkafHATK$G^?N!yH3lulh*;Hk+V?hAXI%IAr)=;s%3Ki>CUF47?;
zFlA-l;im7zNYOmSS~(FiLDL%_XV*Z9Pl~`Y#(6<r%9UD}Rh$g?X=#V6Y{{G?p8YUV
zcS7&-e^bpP5srJZjM#HIq$G$R`0-fm4I>{PA$x_>^GYzRHn1=@hQK^CFf&W at -F-JQ
zgi#;JLm_J4v-)`QJ>Ov?3{ma#-B3O#(&qXy>p%T&o{xa7epOnDd at D7uAR&t}isRoH
zOiO at uzsNWj2KBe}LLC%ci<i#5wrft1kK3PnVUuoyIaLlS{fJf|i0+;HQcdrCui$;W
z@$*%rmXFfaIphpq{2ugu&MdE*i;{(+-!49UmdAZi)t}eZ6XNX6e$RR*>*bIt&%+(5
z)5<VcvvY$Yu}2~(l5_THl-%35{oQf+iKRy$1_hzZ-=o%|DHe41G77Ym2h?j<e@)wN
zIy*f>f;Cx7Z`RcBx*{SG{LE=JUB9;K at 1c0WP(0245|N9R_j$Nt$uze3 at pyjnt!h at l
zZ#_%&RG&a|TYM5uXJW<7=&7v?VrC98_IXjI4C+-Un<@yvDgPQ$brpp at 5`xy#_J!w#
zTomtKMD=ndb3f{Qmr$b6yE*&utE#62p*wge>*2yP^<&rn&LBBj2qBYmMW$8u<i29<
zr{JU>@H`i!7*q at j;6C`CFi0RK5F=D4jo)*o+dwz2UwGW~*GrYHrS%Ab6=Ep!BnbQ6
zJp`BQY3%mmGR1;Zk1cZsNOlPdYQF&1>Vtgf{5ee1mBkc~Kg6z@$bCiaMeo#Vj8iSL
zevG9{PyOui-t<a535}5k-Wv1Ecdk<Tc+b=~=mQoc=10|JNQ=6Jtfa8QDMXRcW~W<8
zq>hyxcn#Gp5sk%oqeUdr3&MxmxE5f&<c}4)9+sq8U|-RW9pwjG;qy~ZWpsFdy}q(+
zT}-Fso<W#UbYVP}A|xjWicmwdH at d^!d(D^N)=)7N+d=N89=~_ll--2=It+Yav4^PT
zo%y8A4=q5%kjP<ufK^kNycO9!w1$WI#60(d at vUs6#)ofW!0%UZcf=dK#58Pq;kmf<
z^VS03#DT|+_~&7Yxw}X>P0<z2)K{rwX_n<5qgTx8AV3bfu}Yu2t&{$>vyZ99;D_ug
zg0d2X8+%_ZT0sUIn1#d=xk(aq3VR)j0VL6|<V16DtXjk1z0nzSUCaOys)ZLrgvyg5
z{nd1vbt|?J8#iE`ABoGT15{FTO+gr$C~Esf85am|(e*HF4c at I>5i(C4^sjyJ#4;5U
zEZza}BKD$aKq2G(?QPOI5oId%d0&(+pkJwiiXp+ltp8|FgYPBl_u3X at eN4}9C;Ik~
z{F9=(?aD?*1e40_4#Hrj=n!C>9B!r(ADU$sg~#r`(>9}0Y)H~LvXEwpN$P#bBbTT+
znbTVoM=8;d5PfQ8`echVytLOAbR96_x07MFa?h(-c%fYLl8b$HZ{_a$^|H2)rrLR}
z|Al<wrncVkB`H5b*vFumyzEC_Yk6GC5!lpLRGVc%%kbE)kAFcOa@{u8^DWEs-F}(T
zy7d)!^b|M!ZiU(d-zw?oMpN at gVE)=k59iqKkvGZCIEu`gNNfV7f0N0;c;7p%_pEZu
zz0R#p>pvDzb<y;_jNn{r{RiDhns+gvQ|=*G!MT-*rw^4wUN-}eZlm*$<>mV08TFwE
zHr{daw23%lY2k1lO9frbOGUWmW1MGIZti7!z-7_0R|Fl>WaV)#D$2Of%z*(j3+ppz
zsWU8-o*TnGClH!n<$;>jhPHT}`tI?rPn<eDY7E8+<6ttRK?2RZSh$`eFa<w<r_Sj%
z<J-5A(#yrHo!2oZ5w<X;dyzfu-{xbSg*-jV>x%VIN$c0nQd~-87J1;^4|%tf4dmRu
zYyB$I|GJf2jbQE+0;Gs&k%%?Yjtm)xY;Gkfd!!-{Gfizb*FPyMmfF>cr(m=uobp>Z
z^B4_d<tF;MP|JTPeG87~82y6#lW55yS^)(KtgXx at 9ST-c^21tqh-|^e=FU>T%(4N<
z<bfz<7jeO-+LLvJ(M&>Nv!(Il7C_IH0o-(}Gx|{WPch;k0d`=o7emgXPtI(7eX1Un
zp!1?4+H$1v at 85E1&>y<*Tqv4ks0VONS#e`Q2~~4dRh at ua)FT6v)y-HaJb-k5lxoFg
zyjI=gf$<3fI4+r=TpEBtcMr2H=PSp@(a+JQwAu5{KEfvM)#ekqJPiji3d{tO6OeU1
zk;y&k(kQL*ZO|`^lyLm)bBR+IdJG&sE+{3S0$?llcO)-!o>`5e^Mz`U4vUb|zUgs8
zE<AKF3xQu3T<u9`We-P*ZzHqFfka0&98zF3`6Xz_?DT%a;J3po!DA%bV*zW`qF7c`
zBPb=wh&f?IuK<1mFwRnOROE at A+E0Z9YFzy0TfrL&s%)~PPxE<wPA8-z at +sK5NOk*l
zIO<kL(W%PbDv#zKA!}zS^BTLhB)>ZfL-hRA`-_bb$xrK_4ac&ldZbaH6z>N3i|v1|
z=p7FGz>YT&MBRq=r;IQT4BhgLGxX!_$ESkcH0xUCiS;bj;hZQMc%kAnw)2K=VecgY
z6nXw at ZihL-k5?;yo{lb<BGTZ|Cu&9aVS(mbbSJYyJN~cwgpm5pbZr!?WIcf2?H=u4
zd}<fc7B9{Yej$ZL;Cfn1b9&D{AYy{=ss9FIqiKQh+GRvudz(XAScHPI>4rAP1%cRb
zc)7>d^1x|1smAgeT*<-&8&4(X at 8!VJ>-b|B4CQQgCdr!}d;A8$y+BazU=3FMY5cGO
zX*Z0d!3fnD5Ij5ncxiNFc+V}rFG?b;C?t}HeFuf6{l4c7o=c2__He at mrhsgiTGg2m
zq)9YLD|%@qF*)s_Ta97HD|0c~RhaNdu}FCq68!6_Nr1W?Yx*QNydS`Yh|0#AG{+AU
zbiOywo)aqgLYAiW$wFVC^aOV^SqJJKM_hl9s?3P|Wihhs$t1HXCg|ntDB%d6`FFoz
zp9K+PTx4VrT5Y*p5dYklrbvAt>G8F3X$`gZtRiv2V$*Q!^y+w2ip4RPGel8;2dK#X
z5UG0pahq6?(ybq6u}a2vk&JGzoi(wHg(T-A#we9d5Mbo%rLty*OxGf+!k(bSCX~=v
z2_uaFIQJAcrspLxELuTYbUIq*u_uyI9YgG#WeVE0?7xUUN!*wHuP>CaFM3*dBHLSd
ztxtCL(d3W3)${&F_>8UgfSlb)259|HGZ(lh(Uda%(Qc&tEIG@%722gVGrb*suvrZR
z(ArWT0#IOZFX-P5EbpKGt<>l86&~a}DBBNk&Z)}wccssZ!FQ!UxXL^@aZtaetuz)#
zq8hD%LA;`!&J>MLWvB=un=;8QIEnamIh()_cy*V%VuM$rzD+FI7Pf9+q7SmN3o-1e
z$xFt}QW-m3U>AcHe)0VIz+}~H)$9}qI98eHrwI;Gnx!Eh*<iixZo=mNu>?8x=0UQl
zK+U5*)?8x~fb;v#&B0H1c at jr?)99VdsXYXkF4|od0R3A7j2vkOd at Ba^oCtE_`}fp<
zAWWZ*NRqvF%H0H~EB>`#)!~mVZkZP7jpjK38Sg+B_){D>9Qy#kP at oFo<2aF10#_E<
z9OHdRWcZ<iXj6oUSr-#ckghLC5N?64?U!lc61m?LA={xB8g>HaUg*p?W)h6F$+xNp
z_`L9ygV%3UCZloze{sCJ{<;t;6Uk{ln4E`gwa&)Rj{!y;h1Y~Q#Ke7g_}fa5LvU|t
zR*5NhWu^DhGwl|z9{d~3+{|>L8%7+X4tP|>5Rmoz!k~t4^71{G{01D>O#I!HHytE}
zcBR;Th`L&2sB?h5N6<Jn7t#Z;^D;Ycr*?QTt)UUW;_nP9)tY>T;R0gl533nK)HX;z
z_K~krliA2M_{LNWGV?3~<xq-*ifM|!K0}s)!rtPV+{pbZvjooE>}KExx|*z5?8~(a
zk!voqUC+|Xti|ei2&9L$Juo6RA+|#vXfNiQI7I*izt75C`bjQ+R42>n%X}W4yNG0x
zE?jnKJbnq|rKVmHllQ52EBK$Ql-}#CnXdyN*}r7un|4+T(t?t at Kyl~M{0r-Rr0Ku5
zk1!cVn at VwU`VP66imR*SyLxCFX9t!aJkR<ppc&(kdAYWeQ-8cKOo^9X{-AX|9t*1v
ztnd?0O+xt!Ygm8x^{FqEY$qN?%}2a0IaLtwj-Hbzx9YhNfM6S4L0<evX5uS$l at o!@
z;`c(=K2~yo+NLFGWnb6g*>>$4_ZV0RSz#7&_?Ho;0J>aivoonoc+_%sqPJS-Hw1sg
z at 5xY^M|=hX?xyLcm}R#qKbH_1*Z9?~O|K`@=yre#0{YKvoQ`t}ry$MO+AgN5#~Pw<
zO4{BDf8=7ETNF==M;eDPiYMj8X3}z6p!+LF=ruTG_pog(kKZfhuSe}DsxBWA)23PM
zL>b)Exat?NL#$19oW_^<y^s(;e;RBL-Kj~dp3Z?wKz`CgM;}i(Ugj!2i*^c$B82d`
zrUJa(O>=WPn$s-TsAJgp_~EUmYgB#5N(^T=gGhBp1R^y%7!C99t%vRFyRrgqh3GII
zZ63)tB6%ru+u{HA^odt#v-NF-?hd!a3NvELFdAuBjD at 9Rd$&}o+vz%gGvF%+H*cmu
zIEd(<#fSM0iKR|(4n8^-dnQa2Zz3Lg8a!ct-M#hUY`p~R0+QWoC>&bOLAgT{zL=JI
zPgpe71xOoVVOx8HWsI`TSXv|V45dNts76U_3P7n0_NrDA?K at pUDO<2z*GOaL`49j2
zn+WRH46(kt>}ir=aY6?U(I at +7yW$3g-GjPtdeKZ~S(K^t;acGslr5tA5@<u=35VQB
z2^9dKzE`<a;Xm6PG)s5fCu`*lJW$zez2{pCq1&$9;*d43e|75U=&(!C-LH>IoFI>W
z8COpg;>_j|PlBAfC^$Ugi_Rt1p<Dz-EEdsMI1a+0t?B^Yg|DIP4!HO!+-YBmdJ|B!
z=X~lJGnZ8}2i8_^isQ9ApLDY+sF^PwF(|~zh;aKP{n$SE0~Q?>Hq{MXL+P2xr(HUq
z>u)lae(lv68;{tutSzUut^l;_pX5aSz9fdl{+puvh&0-ZVo2e6dh-WI<<Slm1OW9F
zfG68;W&`Ej-6Xe4lHyDwuqrV)oiul>{i9r|81=pcLm`Nn60+vst6;68mnwG3Z%FDn
z^ij<iA~_sh4xPedog?uTL4o+<K2H;$;ns{w!0M#{GwYY~C>LgKzGo&<+zt1e>~*hJ
z`t2FlwGF$_maV0Tk$%WCn&YjY0LqDHok|^TD3<OkiZn4a>00nPO*Hn6StXy~q5nMx
z6!70lB#}OYe~R>$Ke-IA#zE_?SJsg*@z1)2an;pXE)DxX*P1$lke!J8;?(A83Y at EP
z`-qbln8}Q9;i*1%u}`goiyq&fcktAR;;X*EtmzXvvmvY7b6Ilc-l+f^rj^N*_qf9Z
zhb*2_VGwj?sQxj?Mj$qE$e-Z937U6al(9X9dse--DO<}hm+>QquZUUWObyj~O8OWG
z31%ZuRKMQwjveHL>!0`u0p(4HRxjujm;Rv8&`JbX3bHN)Tznjg1i!W=`$`R27dn%H
zx*thI8CS&C^m=X|{ZkXwBhzhi*_wJv5s2l`!RzTm at g<kb)kzJWnD*ubE&X0afaRDg
z93A~IbAABg?&*c~GDHY#$kR<!<cR_OA!qlOyw9 at z<vV3ayI{On9tj>!V3NGTqx%%-
z2esK^H<Uyt+zW(bizWB=8Zsmfve~ubp3NGArHjOLQ`szO)%f~bRT2vgj2VO5%MUm&
zPe at 90ZyBM;nUPX#ZCVf`(zfyc{HMc#Hf<vKdC66oOvnX@#ghm!lRf+8k<5U;;8ZS+
zFO^Y1h5<n{B+*-+i}iS5<!B;hQp}D^5KIZJ3km})@^tW+0!SXH7O-`13A|FKw|%kp
zC at N3%nGo8mc7HIjvlZnm{CRagcx>Z=qo9joH$oW=0Y{GlaYp?7=B$greTi~TmP-xx
zc5*{fM9Vz!Y$B4aXe3qVhU~J1`?0?*$Nd03bcc&uSgo}ovtlof!4*DW&EPA^ZVQk-
z6D=`Pa6xCQY4vVp0&BBn2G91KnhKlCR>F0;Rj}4x+QX2Gy;sPpz?7)3>=voz>fYto
zUMQ at TRCLAa{0sEc-IGF74~EZF`Rn#Y89}K`o+jC-INuw08#0S&?quVR^^EQRk7FYU
z%9XwGB(ja&j(N>Pv}|5tJVvhb=SlVU at hYxXE6x|x+St1BS?l2mm7<c^>%p;^uAv+0
zFA=mHmuVDm6O?jRRi?(6Tat?U)P<M(5>Of%ZA{N;oiy9P-Vwn)CqNhHYaFBw at b>~G
z{tNYk=&--OQiOX-qnu^R(>YPLW&jiKSe=0A<rY<y3kjBXo4mZ5K^EWg3`GT{{=+6N
z5<Kzi3_hM$^IR+gpRCq-I>E8ov?^$)RN<j%GJ_D<*)w#9CXfyPg1X?qfmfGP#wWc#
z^>{lssSZB*9fz!3Q1_4%try7PTT#A50ue&QLsxSrdz$t4uUeXgPxhFvQ2c64#Nb27
z0&{-uN661gP#imy<xyqxko+iA^a5+DOAZ=9BYyQZz<a!IEOWu~JZuNGX+q{?I9QWn
zHa;J4GckM_k>3D&Zn<gmF4VXLmv}nor-{Sq(_>sJF^f|~KCVuO?@3AA#G(#=xYO{<
zg6Me<-qorP=L>Qro9n#&GocI6riuEcnG)|!Lr3dJP-_E@?0#}vWj9m)$<Eq16pO=C
z&&h4IZN=dO5b{|6VBe%9*mGI$46nd;XM|({gz>Uocm{z9xC|u%?>@lI=lU!^yEUec
zvN9^O%2!|DwpN!m<V9W&ePQ=d<n(9@=kad|T#XgeaWYG<xcU&gp;G8UR%1xzBVkv7
zu{Kr?)N->kn7~C_sb{Yh$z<1C1bpHGUF)Jx>&<305spMm!*?_G7?S^rO&vuR3dNF%
z2uh979`WSrI}*$-uIU at Kc><7(rTif(XTtL0!xe(V`(G$YgEoKKs~|yq53%Pa>IZ?Z
znwi-)j~}$xy;5_^RSkK!8Jorh0<h9Q5+m({Q4K64)Dho7g+j at JcykTU__2P{8LK5;
z<}3ZaOe<5m+ZsstMK%ghi$)%2t3h_1dd%BEe&*~7uX`87s^`2K`Mh?ndUT|N?LkV?
zBuKS<sK19oF8pz_G7S#_Vsiz1l!QH<HKu~$F4VZsHPEAhC6GHjaEzje=Mg5`HC-$B
z(KMZ<Z4elk1Q2Fd;k*Hkr~s&U>v_Ttw?wf0lZ4z|v2W$^g&BQE<ZKN{14301GJW}Z
zeRXl<S_C*}{G=3?3^WgH3r^C{NvP1~Upkem#{IhghyMR~)ygN_w}=v+V};)wf;VT@
zVa}d05P1g-5a~cBn{>=45sDQmu=;hDp)Z*0V_5kqBJ=kyD3LeB7eS?Ke2Myy9tOPQ
zW<HDVILgWkCiYH!iFmTa;@^toD_yfnYBdM+nU7#%3i<6Zha*|dS~$WQS9y(d{%V~o
z>ylfX)rT1DfyS6HuIEo0p&P1BGC21)>SS{g1CcvbOYnB9u-4PdZ({c-A(WsG&0)Z+
z^6<C_zR!806o)olY!-(Pr)$Db5f+G)#ydG!9^f*h?q|k05kc at C_zGN~rl>^-fY)F3
zcYnujs%Ju8&-%y=jgmTk3YXC)PEV)@MqfP7Z>GWDiVO~Rgs8(m-Ye+r!cW0ObTe9`
z_3n67uD|=m$j`T)E~+<zHB}{U=7qPJ|5JM7UlT>%;?mvlreGO%!<c|*`#8DN at c9>K
zCo-V=)rBSGc!gz}nm5OR%t!btGPbj*l?c*BtDpMLa at ErXUokyNhaaS*7TOzcKEGi1
zpgx^Bw>Skn(f6gRFpO7VuzeOF_}~iwphTz`V&@kr*G3}?lZ8~sjxt?|NT1Rnz^0zs
z44H^)o}pPaz*r=|=~V4jf4H4yK<Z8&bCLJ#Jd_9xDYkQBqW1SKH<+X0VBjZf*z0Q9
zQ-qP-5Pm3<j-+c+x9BRWvN)ljL#dsa6IlKkmi7-o!-FKXV5QzT?)%m__En%4IRjT3
z`yMU)d&JW at XG;&>14z7P3lO`i`v30x5cT;}&DU3IOTS*|C9R<?b~UVyR)`>F!eDC<
zv7zQeiYjCC=cRv)NewXUeU`*HxJ$<u67o$zLy^Fo7K10~^7LejU*p|^oCpD1i6lT9
zd``M()ZcY{vy{xtDL(Yp30p%ET7h0b!K-BA({p_j7-9>e9b*;chJT(;r+H;5v8R!;
z65BV+J2{Q_?%zkXPUMXO85oGcN3XRmEkv`*Gmkd83jW!yxu}!B^Ed16*S~sM?oEZX
zm^#n*;e`Y=qj~b=c-9XGQA=MI{U?b~lNmj)ST#SPqAl at kcvL&a&#NhDOm&?Y&5KsY
zc(=D(=Xe)n6Z3DnBL}EiW!Ipp8i05>0u-;d>Bk>bP0L`gF>X%Zh35wC at M(h=nP=C1
zXx7jB&nvY|1mgJr!zG+6OHV7$`8WHJGWF5#GMb+UuUJ)n{(~Y9D214DYSL1mXN89&
z8E|CuMxdo($<>UZKXga^AeR$(VX;zb;2$5ZWVyGRHTfW_2tFpLsboqVzTjoWv)Rlm
zpYOS(G{!%pigK`YrLC&C378V|r&!>Q_PWbsFw+8Zd53%NSRo_d5i8W+?-Ih+4wue^
z+_06yH4r8B8UvA*3VamoGK`7<hF3bM>Czcm&Lw~bWJxL$WvZBhuE at z%1fHj4q`XD2
zh&W-XWtxK{ki>b#7HZ;rUNjf|#~;M#z^TEtIj2i|P;a|=4wKilkh}W5Hs2CIBCvuL
zkXl&bl%4oaLg{zjNpv+(z3mqL+1*RxXcv8<2~IrSGaaJWvZ_;!3Or{E>Y+{Hy%a~M
zEYkZTA!B*m>4ppf4hU8Pkb}e#uS^9w8GAPqq<aWoO_pCVMF87ftcC5=hErRt)nmIy
zRhwrNg|ilZ={*LBJf=yq{?tVQs-j%_VhGf3_B6nNj$s_GYt%gA-w9}PhWI4ob6^UR
zN(Ehp^$rl2X9rt-pT+GTUAI2BAD>ZLSO`YbEZ}cr<J9-*a7C`XQtGfG6Z;Ie<;MdG
zc%eo at tsd9#p{G6ph9YM2j38blA`)c3pqd2kpM$ee;F0IltQ7hT8Fbnb;YzBa3YlSw
za*9geafYW9w|;|-a#FMsIXDr18wvG*hwUN at Twcjo4F^JAdeTR-VF$&WHO6QOD<<fj
za|snu{<~=I?Xn+jB-;Ye&wppcJm;2W1;93Q^PLbXnpM1U{GGXD&5*C}HLhg{l{=aE
z4s*8eJ2`kf$xJ+MXsDYX0}(<~OwPMQCylrwg^@v6<QKb(606y%v-OBRroh<AuISZu
zJ`NGxif)@5bNNwLq1W~VXSf_SEZx<Xr}Mn#rhI7WLaq_R-oC&H!U$!?j3czC-Drg{
zUqP%LB*?X-RI9t#Uf=w|)kkOfX*pZcg077e^N`YE*he&OIX}=K2>$d4VY|212Z$)#
zQW0Rhya)Iy!0zqkPcPSCX1dKa{f`yYDk#~J+;Ao-L*6g8jvRagBVB=aZ1%t4J1#+O
zJUjMJi0}}f<7;Trd5|CPTaLbBV$RWUc|xXOTY(T_ at N-#4G-q&k{cx?P`&R^nE9GyB
zxZ4c`<LD%=eej8Lm$%Ha3GsNgr7#>3d=)KBQlyHG%Cm#N8 at To!Cdz#Fius03Wt-KR
z+3%REJZTnh9Fw;mCxgGPlOQX`S~7<H8~x34uuLs06^Ibk6R!#w0U`|&e0<6!j*Q`x
zto^D>=z|}*=QU1H51*di2lk*^D$8m?5AUI2C3pBIkz)x?Q~s(O$VjMnJKU!bUy1N)
zhnyO+WJM4>MGHz<A5L at -40H?j`LPxap%g7pgwed2p87a4sawG^U=3V5o at sj24!nE>
z#_R>EhB0vMS?LEqTnEK&+35n8y%sh(d-Oq>abKsaErcFs9iMJ`czHJ+wC{m^kf#2R
z#}ox2D$`o{l=~3XMmrQ^1A=R_RDwW}fkln at hLw3!+xo9*vDCisNOc<JYo6 at Ks_djB
zyOcr(o_`HzSU`G5sT@;e#F^o>DiAM|#Hlt=YF6l*R4#o{j68L#4Sjr}y4qGaSXxWk
zn(n{G$V&i6&g{}WCDpSrmCYU=7(|R6Dq;*we-J_diRwX2PsiJaLfEA)$0lQ=%ZDy$
zwjDqKG5A?g8s384QJQQ16YS4#JB1f4=9AYs8o*L`CoRt!j{J~w7A}b+LTcAk8)iGX
zpD at HxEQvyrbsG73jAJE)5 at my@y~F??FPGQXB-$6w1XyEH4y`^dtSm1eIP;#{eCfP>
zr!i at ISR>*lFUsEob{d2a!1kJ!>Vgk<njw{TBf#D_5*$E8v<}WyEqP$3(wUBj5=cLM
zpf$4M!B#fU at H0D!N0;0$Ys6ieNkF_Xt*dj}<@}jvSk;h+PRej}hG4<abD+1Pq^yEq
za^-l5j>7&QiE+~$VJ8%_PsBLEphF{I!i`s_6|C>{Arrt^rgzcqTSN7f;3)px;e1Ov
zq=~b2vbu|y^pQAD+S|?MtUI$D_`RY}f5W}M;gtN{=sMak-h?$>4EZ?W%49rz9uy2^
zzf}j)(W_$PXs!r#9lGn>9`Y->#qGw0Za91*9A$ERJw)|Q636~Vb<&hOg9~w8Z at GBG
zwoNIL`AaI5hg{J2*4c*<>F_nm8RKt_87_&e!dx|kx7I2baUK7+*>n-S{vQ%s^E2gr
zM|(GUXPQ7pHD`Il?tyS$Sab?I1vNJfl`8F+KVKe3!-^85W%<M#gG6e5?7`hvZcJ+9
z!B&}i<MW^Eri+J7OloLiwF;+L;DYYM7a at ZlIAe7BH2g}+X?UqOUxL$`=N_Sdu)5(t
zBK^-qwY*SbkqNYo3YN2_nPXANm69GIcIoCGy7d?b*ji$1yb=__XC``q;Uo`)@J)RY
z8&$cqK0GHel}y at 1*QB<dCsL1hQk2rBE?p}MY~wtI-u)9w0n+|QMG6H6cMMEV-}I7#
zClYmC)eslR#befC8~TE4_X2hWP-t-|4b_pI at 8)!gy