From 708da8bb6121073868f262eaea479530ad2abbcb Mon Sep 17 00:00:00 2001 From: hugogogo Date: Wed, 20 Jul 2022 17:11:24 +0200 Subject: [PATCH] wip put poll version inside luke version --- README.md | 16 +- srcs/Webserv.cpp | 259 ++++++++++++++++++--- srcs/Webserv.hpp | 15 +- srcs/main.cpp | 44 +--- srcs/main_select.cpp | 523 ++++++++++++++++++++++--------------------- webserv | Bin 123032 -> 138360 bytes 6 files changed, 523 insertions(+), 334 deletions(-) diff --git a/README.md b/README.md index 7e55273..03e292a 100644 --- a/README.md +++ b/README.md @@ -80,13 +80,16 @@ ## code architecture -``` +``` + functions action in this scenario : ______ sd = SOCKET() : create a listening socket descriptor __________ SETSOCKOPT(sd) : allow socket descriptor to be reuseable _____ IOCTL(sd) : set listening socket and all incoming socket to be non-blocking + _____ + FCNTL(sd) : set listening socket and all incoming socket to be non-blocking ____ BIND(port) : associate listening socket to a port ______ @@ -115,7 +118,7 @@ compare architectures : ``` - POLL SELECT + POLL SELECT ______ ______ ______ lstn_sd = SOCKET() | lstn_sd = SOCKET() | lstn_sd = SOCKET() | __________ | __________ @@ -138,6 +141,7 @@ compare architectures : . | . loop through fds[] | . loop i++ < max_fd . | . . | . . . | . . POLLIN && lstn_sd ? | . . FD_ISSET(i) & lstn_fd ? + . | . . loop | . . loop . ______ | . . . ______ | . . . ______ . ACCEPT() | . . . new_sd = ACCEPT() | . . . new_sd = ACCEPT() . | . . . | . . . @@ -145,7 +149,8 @@ compare architectures : . | . . | . . . . | . . | . . . max_sd = new_sd . | . . | . . - . | . . POLLIN ? | . . FD_ISSET ? + . | . . or POLLIN ? | . . or FD_ISSET ? + . | . . loop | . . loop . ____ | . . . ____ | . . . ____ . RECV() | . . . RECV() | . . . RECV() . ____ | . . . ____ | . . . ____ @@ -156,5 +161,10 @@ compare architectures : . CLOSE(fds[]) | . CLOSE(fds[]) | . CLOSE(fds[]) +first, create the socket, add some options, bind it, and listen to it. +then, do a loop starting with POLL or SELECT + if it's incomming connexions, accept and add them all to the list + if it's accepted connexions, read their datas and write new datas + ``` diff --git a/srcs/Webserv.cpp b/srcs/Webserv.cpp index 9055390..216dca0 100644 --- a/srcs/Webserv.cpp +++ b/srcs/Webserv.cpp @@ -3,30 +3,41 @@ Webserv::Webserv() { + int on = 1; + std::cout << "Server init\n"; - // _socket_fd = ::socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0); - _socket_fd = ::socket(AF_INET, SOCK_STREAM, 0); + + //_socket_fd = ::socket(AF_INET, SOCK_STREAM, 0); + _socket_fd = ::socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0); if (_socket_fd == -1) { - ::perror("err socket(): "); + ::perror("err socket()"); throw std::runtime_error("Socket init"); } + + // allow socket descriptor to be reuseable + if (setsockopt(_socket_fd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) < 0) + { + ::perror("setsockopt() failed"); + throw std::runtime_error("Socket init"); + } + } -/* Webserv::Webserv(Webserv const &src) -{ - -} */ +//Webserv::Webserv(Webserv const &src) +//{ +// +//} Webserv::~Webserv() { std::cout << "Server destroyed\n"; } -/* Webserv & Webserv::operator=(Webserv const &rhs) -{ - -} */ +//Webserv & Webserv::operator=(Webserv const &rhs) +//{ +// +//} /////////////// @@ -34,13 +45,10 @@ Webserv::~Webserv() void Webserv::bind(in_port_t port) { - // cast invalid ? how to ? - // const struct sockaddr* cast_test = static_cast(addr); - struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = ::htons(port); - addr.sin_addr.s_addr = ::htonl(INADDR_ANY); // htonl useless with 0 value (INADDR_ANY) + addr.sin_addr.s_addr = ::htonl(INADDR_ANY); if (::bind(_socket_fd, (const sockaddr*)&addr, sizeof addr) == -1) { @@ -61,19 +69,221 @@ void Webserv::listen(unsigned int max_connections) #define BUFSIZE 8192 #define MSG_TEST "Le Webserv / 20 =D\n" #define MSG_BOUNCE "bounced properly ;)\n" // placeholder +#define TRUE 1 +#define FALSE 0 void Webserv::start() { - struct sockaddr_in addr; - socklen_t addr_len; - int accepted_fd; - struct pollfd poll_s; - char buf[BUFSIZE]; // WIP buffer. need to try with std::vector or std::string. - int ret; + int len, rc; + int listen_sd = -1, new_sd = -1; + int end_server = FALSE, compress_array = FALSE; + int close_conn; + char buffer[80]; +// struct sockaddr_in addr; + struct pollfd fds[200]; + int nfds = 1, current_size = 0, i, j; + + memset(fds, 0 , sizeof(fds)); + fds[0].fd = listen_sd; + fds[0].events = POLLIN; std::cout << "Server started\n"; - while (1) + while (end_server == FALSE) { + // *********************************************************** + // * Call poll() * + // *********************************************************** + poll(fds, nfds, -1); + + // *********************************************************** + // * One or more descriptors are readable. Need to * + // * determine which ones they are. * + // *********************************************************** + current_size = nfds; + for (i = 0; i < current_size; i++) + { + // ********************************************************* + // * Loop through to find the descriptors that returned * + // * POLLIN and determine whether it's the listening * + // * or the active connection. * + // ********************************************************* + if(fds[i].revents == 0) + continue; + + // ********************************************************* + // * If revents is not POLLIN, it's an unexpected result, * + // * log and end the server. * + // ********************************************************* + if(fds[i].revents != POLLIN) + { + printf(" Error! revents = %d\n", fds[i].revents); + end_server = TRUE; + break; + + } + if (fds[i].fd == listen_sd) + { + // ******************************************************* + // * Listening descriptor is readable. * + // ******************************************************* + printf(" Listening socket is readable\n"); + + // ******************************************************* + // * Accept all incoming connections that are * + // * queued up on the listening socket before we * + // * loop back and call poll again. * + // ******************************************************* + do + { + // ***************************************************** + // * Accept each incoming connection. If * + // * accept fails with EWOULDBLOCK, then we * + // * have accepted all of them. Any other * + // * failure on accept will cause us to end the * + // * server. * + // ***************************************************** + new_sd = accept(listen_sd, NULL, NULL); + if (new_sd < 0) + { + if (errno != EWOULDBLOCK) + { + perror(" accept() failed"); + end_server = TRUE; + } + break; + } + + // ***************************************************** + // * Add the new incoming connection to the * + // * pollfd structure * + // ***************************************************** + printf(" New incoming connection - %d\n", new_sd); + fds[nfds].fd = new_sd; + fds[nfds].events = POLLIN; + nfds++; + + // ***************************************************** + // * Loop back up and accept another incoming * + // * connection * + // ***************************************************** + } while (new_sd != -1); + } + + // ********************************************************* + // * This is not the listening socket, therefore an * + // * existing connection must be readable * + // ********************************************************* + + else + { + printf(" Descriptor %d is readable\n", fds[i].fd); + close_conn = FALSE; + // ******************************************************* + // * Receive all incoming data on this socket * + // * before we loop back and call poll again. * + // ******************************************************* + + do + { + // ***************************************************** + // * Receive data on this connection until the * + // * recv fails with EWOULDBLOCK. If any other * + // * failure occurs, we will close the * + // * connection. * + // ***************************************************** + rc = recv(fds[i].fd, buffer, sizeof(buffer), 0); + if (rc < 0) + { + if (errno != EWOULDBLOCK) + { + perror(" recv() failed"); + close_conn = TRUE; + } + break; + } + + // ***************************************************** + // * Check to see if the connection has been * + // * closed by the client * + // ***************************************************** + if (rc == 0) + { + printf(" Connection closed\n"); + close_conn = TRUE; + break; + } + + // ***************************************************** + // * Data was received * + // ***************************************************** + len = rc; + printf(" %d bytes received\n", len); + + // ***************************************************** + // * Echo the data back to the client * + // ***************************************************** + rc = send(fds[i].fd, buffer, len, 0); + if (rc < 0) + { + perror(" send() failed"); + close_conn = TRUE; + break; + } + + } while(TRUE); + + // ******************************************************* + // * If the close_conn flag was turned on, we need * + // * to clean up this active connection. This * + // * clean up process includes removing the * + // * descriptor. * + // ******************************************************* + if (close_conn) + { + close(fds[i].fd); + fds[i].fd = -1; + compress_array = TRUE; + } + + + } // End of existing connection is readable + } // End of loop through pollable descriptors + + // *********************************************************** + // * If the compress_array flag was turned on, we need * + // * to squeeze together the array and decrement the number * + // * of file descriptors. We do not need to move back the * + // * events and revents fields because the events will always* + // * be POLLIN in this case, and revents is output. * + // *********************************************************** + if (compress_array) + { + compress_array = FALSE; + for (i = 0; i < nfds; i++) + { + if (fds[i].fd == -1) + { + for(j = i; j < nfds; j++) + { + fds[j].fd = fds[j+1].fd; + } + i--; + nfds--; + } + } + } + } + + +/* + + struct sockaddr_in addr; + socklen_t addr_len; + int accepted_fd; + struct pollfd poll_s; + char buf[BUFSIZE]; // WIP buffer. need to try with std::vector or std::string. + int ret; + std::cout << "----------\n"; std::cout << "accept()\n"; addr_len = sizeof addr; @@ -102,10 +312,6 @@ void Webserv::start() ::close(accepted_fd); continue; } - /* - if (ret == BUFSIZE) - // send error like "request too long" to client - */ buf[ret] = '\0'; std::cout << "send()\n"; @@ -115,5 +321,6 @@ void Webserv::start() ::perror("err send(): "); ::close(accepted_fd); +*/ } } diff --git a/srcs/Webserv.hpp b/srcs/Webserv.hpp index 70b54a3..6a77ce3 100644 --- a/srcs/Webserv.hpp +++ b/srcs/Webserv.hpp @@ -4,8 +4,6 @@ # include # include -# include // errno -# include // perror # include # include # include // close @@ -19,6 +17,19 @@ # include // poll # include // fcntl +# include // close +# include // exit +# include // cout, cin +# include // errno +# include // perror +# include // memset +# include // socket, accept, listen, send, recv, bind, connect, setsockopt, getsockname +# include // sockaddr_in +# include // inet_ntoa, inet_addr, htonl, htons, ntohl, ntohs +# include // poll +# include // fcntl +# include // ioctl + class Webserv { public: diff --git a/srcs/main.cpp b/srcs/main.cpp index fd4391b..615141f 100644 --- a/srcs/main.cpp +++ b/srcs/main.cpp @@ -12,7 +12,7 @@ int main(void) // https://security.stackexchange.com/questions/169213/how-to-chose-a-port-to-run-an-application-on-localhost serv.bind(4040); - serv.listen(512); // 512 max connections arbitrary + serv.listen(20); serv.start(); } catch (std::exception& e) @@ -22,45 +22,3 @@ int main(void) return (0); } -/* - - - ______ - listen_fd = SOCKET() : create a listening socket - __________ - SETSOCKOPT() : Allow socket descriptor to be reuseable - _____ - IOCTL() : set listen_fd and all incoming socket to be non-blocking - ____ - BIND(port) : associate listen_fd to a port - ______ - LISTEN(nb_queue) : queue the incoming connections to listen_fd, up to a chosen number - - fds[1] = listen_fd - - loop - . ____ - . POLL(fds[]) : - . - . loop through fds[] - . . - . . POLLIN && listen_fd ? : readable socket and this is the listening one - . . . ______ - . . . new_fd = ACCEPT() : extract first connection request in queue of listen_fd - . . . and creates a new socket that is connected - . . . - . . . fds[] += new_fd - . . - . . POLLIN ? : readable socket and this is an active one - . . . ____ - . . . RECV() : read data in socket created by accept() - . . . ____ - . . . SEND() : write data in socket created by accept() - - loop through fds[] : - . _____ - . CLOSE(fds[]) - - -*/ - diff --git a/srcs/main_select.cpp b/srcs/main_select.cpp index 3bad22e..5b2da66 100644 --- a/srcs/main_select.cpp +++ b/srcs/main_select.cpp @@ -1,4 +1,6 @@ +// https://www.ibm.com/docs/en/i/7.2?topic=designs-example-nonblocking-io-select + # include // close # include # include @@ -16,288 +18,289 @@ int main () { - int i, len, rc, on = 1; - int listen_sd, max_sd, new_sd; - int desc_ready, end_server = FALSE; - int close_conn; - char buffer[80]; - struct sockaddr_in6 addr; - struct timeval timeout; - fd_set master_set, working_set; + int i, len, rc; + int on = 1; + int listen_sd, max_sd, new_sd; + int desc_ready, end_server = FALSE; + int close_conn; + char buffer[80]; + struct sockaddr_in6 addr; + struct timeval timeout; + fd_set master_set, working_set; - /*************************************************************/ - /* Create an AF_INET6 stream socket to receive incoming */ - /* connections on */ - /*************************************************************/ - listen_sd = socket(AF_INET6, SOCK_STREAM, 0); - if (listen_sd < 0) - { - perror("socket() failed"); - exit(-1); - } + /*************************************************************/ + /* Create an AF_INET6 stream socket to receive incoming */ + /* connections on */ + /*************************************************************/ + listen_sd = socket(AF_INET6, SOCK_STREAM, 0); +// listen_sd = socket(AF_INET6, SOCK_STREAM | SOCK_NONBLOCK, 0); + if (listen_sd < 0) + { + perror("socket() failed"); + exit(-1); + } - /*************************************************************/ - /* Allow socket descriptor to be reuseable */ - /*************************************************************/ - rc = setsockopt(listen_sd, SOL_SOCKET, SO_REUSEADDR, - (char *)&on, sizeof(on)); - if (rc < 0) - { - perror("setsockopt() failed"); - close(listen_sd); - exit(-1); - } + /*************************************************************/ + /* Allow socket descriptor to be reuseable */ + /*************************************************************/ + rc = setsockopt(listen_sd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)); + if (rc < 0) + { + perror("setsockopt() failed"); + close(listen_sd); + exit(-1); + } - /*************************************************************/ - /* Set socket to be nonblocking. All of the sockets for */ - /* the incoming connections will also be nonblocking since */ - /* they will inherit that state from the listening socket. */ - /*************************************************************/ - rc = ioctl(listen_sd, FIONBIO, (char *)&on); - if (rc < 0) - { - perror("ioctl() failed"); - close(listen_sd); - exit(-1); - } + /*************************************************************/ + /* Set socket to be nonblocking. All of the sockets for */ + /* the incoming connections will also be nonblocking since */ + /* they will inherit that state from the listening socket. */ + /*************************************************************/ + rc = ioctl(listen_sd, FIONBIO, (char *)&on); + if (rc < 0) + { + perror("ioctl() failed"); + close(listen_sd); + exit(-1); + } - /*************************************************************/ - /* Bind the socket */ - /*************************************************************/ - memset(&addr, 0, sizeof(addr)); - addr.sin6_family = AF_INET6; - memcpy(&addr.sin6_addr, &in6addr_any, sizeof(in6addr_any)); - addr.sin6_port = htons(SERVER_PORT); - rc = bind(listen_sd, - (struct sockaddr *)&addr, sizeof(addr)); - if (rc < 0) - { - perror("bind() failed"); - close(listen_sd); - exit(-1); - } + /*************************************************************/ + /* Bind the socket */ + /*************************************************************/ + memset(&addr, 0, sizeof(addr)); + addr.sin6_family = AF_INET6; + memcpy(&addr.sin6_addr, &in6addr_any, sizeof(in6addr_any)); + addr.sin6_port = htons(SERVER_PORT); + rc = bind(listen_sd, + (struct sockaddr *)&addr, sizeof(addr)); + if (rc < 0) + { + perror("bind() failed"); + close(listen_sd); + exit(-1); + } - /*************************************************************/ - /* Set the listen back log */ - /*************************************************************/ - rc = listen(listen_sd, 32); - if (rc < 0) - { - perror("listen() failed"); - close(listen_sd); - exit(-1); - } + /*************************************************************/ + /* Set the listen back log */ + /*************************************************************/ + rc = listen(listen_sd, 32); + if (rc < 0) + { + perror("listen() failed"); + close(listen_sd); + exit(-1); + } - /*************************************************************/ - /* Initialize the master fd_set */ - /*************************************************************/ - FD_ZERO(&master_set); - max_sd = listen_sd; - FD_SET(listen_sd, &master_set); + /*************************************************************/ + /* Initialize the master fd_set */ + /*************************************************************/ + FD_ZERO(&master_set); + max_sd = listen_sd; + FD_SET(listen_sd, &master_set); - /*************************************************************/ - /* Initialize the timeval struct to 3 minutes. If no */ - /* activity after 3 minutes this program will end. */ - /*************************************************************/ - timeout.tv_sec = 3 * 60; - timeout.tv_usec = 0; + /*************************************************************/ + /* Initialize the timeval struct to 3 minutes. If no */ + /* activity after 3 minutes this program will end. */ + /*************************************************************/ + timeout.tv_sec = 3 * 60; + timeout.tv_usec = 0; - /*************************************************************/ - /* Loop waiting for incoming connects or for incoming data */ - /* on any of the connected sockets. */ - /*************************************************************/ - do - { - /**********************************************************/ - /* Copy the master fd_set over to the working fd_set. */ - /**********************************************************/ - memcpy(&working_set, &master_set, sizeof(master_set)); + /*************************************************************/ + /* Loop waiting for incoming connects or for incoming data */ + /* on any of the connected sockets. */ + /*************************************************************/ + do + { + /**********************************************************/ + /* Copy the master fd_set over to the working fd_set. */ + /**********************************************************/ + memcpy(&working_set, &master_set, sizeof(master_set)); - /**********************************************************/ - /* Call select() and wait 3 minutes for it to complete. */ - /**********************************************************/ - printf("Waiting on select()...\n"); - rc = select(max_sd + 1, &working_set, NULL, NULL, &timeout); + /**********************************************************/ + /* Call select() and wait 3 minutes for it to complete. */ + /**********************************************************/ + printf("\nWaiting on select()...\n"); + rc = select(max_sd + 1, &working_set, NULL, NULL, &timeout); - /**********************************************************/ - /* Check to see if the select call failed. */ - /**********************************************************/ - if (rc < 0) - { - perror(" select() failed"); - break; - } + /**********************************************************/ + /* Check to see if the select call failed. */ + /**********************************************************/ + if (rc < 0) + { + perror(" select() failed"); + break; + } - /**********************************************************/ - /* Check to see if the 3 minute time out expired. */ - /**********************************************************/ - if (rc == 0) - { - printf(" select() timed out. End program.\n"); - break; - } + /**********************************************************/ + /* Check to see if the 3 minute time out expired. */ + /**********************************************************/ + if (rc == 0) + { + printf(" select() timed out. End program.\n"); + break; + } - /**********************************************************/ - /* One or more descriptors are readable. Need to */ - /* determine which ones they are. */ - /**********************************************************/ - desc_ready = rc; - for (i=0; i <= max_sd && desc_ready > 0; ++i) - { - /*******************************************************/ - /* Check to see if this descriptor is ready */ - /*******************************************************/ - if (FD_ISSET(i, &working_set)) - { - /****************************************************/ - /* A descriptor was found that was readable - one */ - /* less has to be looked for. This is being done */ - /* so that we can stop looking at the working set */ - /* once we have found all of the descriptors that */ - /* were ready. */ - /****************************************************/ - desc_ready -= 1; + /**********************************************************/ + /* One or more descriptors are readable. Need to */ + /* determine which ones they are. */ + /**********************************************************/ + desc_ready = rc; + for (i=0; i <= max_sd && desc_ready > 0; ++i) + { + /*******************************************************/ + /* Check to see if this descriptor is ready */ + /*******************************************************/ + if (FD_ISSET(i, &working_set)) + { + /****************************************************/ + /* A descriptor was found that was readable - one */ + /* less has to be looked for. This is being done */ + /* so that we can stop looking at the working set */ + /* once we have found all of the descriptors that */ + /* were ready. */ + /****************************************************/ + desc_ready -= 1; - /****************************************************/ - /* Check to see if this is the listening socket */ - /****************************************************/ - if (i == listen_sd) - { - printf(" Listening socket is readable\n"); - /*************************************************/ - /* Accept all incoming connections that are */ - /* queued up on the listening socket before we */ - /* loop back and call select again. */ - /*************************************************/ - do - { - /**********************************************/ - /* Accept each incoming connection. If */ - /* accept fails with EWOULDBLOCK, then we */ - /* have accepted all of them. Any other */ - /* failure on accept will cause us to end the */ - /* server. */ - /**********************************************/ - new_sd = accept(listen_sd, NULL, NULL); - if (new_sd < 0) - { - if (errno != EWOULDBLOCK) - { - perror(" accept() failed"); - end_server = TRUE; - } - break; - } + /****************************************************/ + /* Check to see if this is the listening socket */ + /****************************************************/ + if (i == listen_sd) + { + printf("\n Listening socket is readable\n"); + /*************************************************/ + /* Accept all incoming connections that are */ + /* queued up on the listening socket before we */ + /* loop back and call select again. */ + /*************************************************/ + do + { + /**********************************************/ + /* Accept each incoming connection. If */ + /* accept fails with EWOULDBLOCK, then we */ + /* have accepted all of them. Any other */ + /* failure on accept will cause us to end the */ + /* server. */ + /**********************************************/ + new_sd = accept(listen_sd, NULL, NULL); + if (new_sd < 0) + { + if (errno != EWOULDBLOCK) + { + perror(" accept() failed"); + end_server = TRUE; + } + break; + } - /**********************************************/ - /* Add the new incoming connection to the */ - /* master read set */ - /**********************************************/ - printf(" New incoming connection - %d\n", new_sd); - FD_SET(new_sd, &master_set); - if (new_sd > max_sd) - max_sd = new_sd; + /**********************************************/ + /* Add the new incoming connection to the */ + /* master read set */ + /**********************************************/ + printf(" New incoming connection - %d\n", new_sd); + FD_SET(new_sd, &master_set); + if (new_sd > max_sd) + max_sd = new_sd; - /**********************************************/ - /* Loop back up and accept another incoming */ - /* connection */ - /**********************************************/ - } while (new_sd != -1); - } + /**********************************************/ + /* Loop back up and accept another incoming */ + /* connection */ + /**********************************************/ + } while (new_sd != -1); + } - /****************************************************/ - /* This is not the listening socket, therefore an */ - /* existing connection must be readable */ - /****************************************************/ - else - { - printf(" Descriptor %d is readable\n", i); - close_conn = FALSE; - /*************************************************/ - /* Receive all incoming data on this socket */ - /* before we loop back and call select again. */ - /*************************************************/ - do - { - /**********************************************/ - /* Receive data on this connection until the */ - /* recv fails with EWOULDBLOCK. If any other */ - /* failure occurs, we will close the */ - /* connection. */ - /**********************************************/ - rc = recv(i, buffer, sizeof(buffer), 0); - if (rc < 0) - { - if (errno != EWOULDBLOCK) - { - perror(" recv() failed"); - close_conn = TRUE; - } - break; - } + /****************************************************/ + /* This is not the listening socket, therefore an */ + /* existing connection must be readable */ + /****************************************************/ + else + { + printf("\n Descriptor %d is readable\n", i); + close_conn = FALSE; + /*************************************************/ + /* Receive all incoming data on this socket */ + /* before we loop back and call select again. */ + /*************************************************/ + do + { + /**********************************************/ + /* Receive data on this connection until the */ + /* recv fails with EWOULDBLOCK. If any other */ + /* failure occurs, we will close the */ + /* connection. */ + /**********************************************/ + rc = recv(i, buffer, sizeof(buffer), 0); + if (rc < 0) + { + if (errno != EWOULDBLOCK) + { + perror(" recv() failed"); + close_conn = TRUE; + } + break; + } - /**********************************************/ - /* Check to see if the connection has been */ - /* closed by the client */ - /**********************************************/ - if (rc == 0) - { - printf(" Connection closed\n"); - close_conn = TRUE; - break; - } + /**********************************************/ + /* Check to see if the connection has been */ + /* closed by the client */ + /**********************************************/ + if (rc == 0) + { + printf(" Connection closed\n"); + close_conn = TRUE; + break; + } - /**********************************************/ - /* Data was received */ - /**********************************************/ - len = rc; - printf(" %d bytes received\n", len); + /**********************************************/ + /* Data was received */ + /**********************************************/ + len = rc; + printf(" %d bytes received\n", len); - /**********************************************/ - /* Echo the data back to the client */ - /**********************************************/ - rc = send(i, buffer, len, 0); - if (rc < 0) - { - perror(" send() failed"); - close_conn = TRUE; - break; - } + /**********************************************/ + /* Echo the data back to the client */ + /**********************************************/ + rc = send(i, buffer, len, 0); + if (rc < 0) + { + perror(" send() failed"); + close_conn = TRUE; + break; + } - } while (TRUE); + } while (TRUE); - /*************************************************/ - /* If the close_conn flag was turned on, we need */ - /* to clean up this active connection. This */ - /* clean up process includes removing the */ - /* descriptor from the master set and */ - /* determining the new maximum descriptor value */ - /* based on the bits that are still turned on in */ - /* the master set. */ - /*************************************************/ - if (close_conn) - { - close(i); - FD_CLR(i, &master_set); - if (i == max_sd) - { - while (FD_ISSET(max_sd, &master_set) == FALSE) - max_sd -= 1; - } - } - } /* End of existing connection is readable */ - } /* End of if (FD_ISSET(i, &working_set)) */ - } /* End of loop through selectable descriptors */ + /*************************************************/ + /* If the close_conn flag was turned on, we need */ + /* to clean up this active connection. This */ + /* clean up process includes removing the */ + /* descriptor from the master set and */ + /* determining the new maximum descriptor value */ + /* based on the bits that are still turned on in */ + /* the master set. */ + /*************************************************/ + if (close_conn) + { + close(i); + FD_CLR(i, &master_set); + if (i == max_sd) + { + while (FD_ISSET(max_sd, &master_set) == FALSE) + max_sd -= 1; + } + } + } /* End of existing connection is readable */ + } /* End of if (FD_ISSET(i, &working_set)) */ + } /* End of loop through selectable descriptors */ - } while (end_server == FALSE); + } while (end_server == FALSE); - /*************************************************************/ - /* Clean up all of the sockets that are open */ - /*************************************************************/ - for (i=0; i <= max_sd; ++i) - { - if (FD_ISSET(i, &master_set)) - close(i); - } + /*************************************************************/ + /* Clean up all of the sockets that are open */ + /*************************************************************/ + for (i=0; i <= max_sd; ++i) + { + if (FD_ISSET(i, &master_set)) + close(i); + } } diff --git a/webserv b/webserv index 6062bbdfcfae079d92724809cfc5c2230d29d14e..4711c3c9aa3d09debfe73d0d4623772efeae76da 100755 GIT binary patch literal 138360 zcmeEvXLuD=7w+s+a!yXdNr6BJ?MMwhR0BwFL6QiBA~iq=H54HrC@4yih@q$`3L*+B zHdIhS1VKTu^6^;_8x}ONVnaR^x$nF7o;fEW`EGgcbAR2#Gqd(y@4I%NJ$q($7T5R9 z?B`O-vVU%?o5k3m1g+^|fb^;^6SAxxR=O39b0e#v6$PyaM-PLRm*-5J4 zud%abyeYpe?fNkp9zzXYUiJaTpDoGdZ_w$&NeoxJM4}hTTUZhNY-!sKh8@fKzxsb=rbxwe{Ch{`zvYB zv`W%xUP->LO8D1QlJBuf`1QaK;VA!mu#$WmRFY2nO6rvezM0y~WWnn-R7RsCT`JKh zR+9ci@GI)aH7I|Am12d`LXvPi%E8}tke681t*vHWP1b75!u&F?a8h3L=A2VHTDiGX zX3n0KJFjrU+``;kD|f)qtlUZYbMvQ6n^%}WcW74cg4wh3hfbJSkgu_dkx|(>69(k< z?bD|30xK7h!t`mg=jBeEFfYITfLYTDwLW*s!iBkW^5@Q*J!?Y2w8BNX3(_?C(%js< zg$vuXY10-K)ACT5xzlD%8IYG#*rrY1)CqHQ3+GOlRyYqCNG^SQx9K}*VBU~{Iqgv3 zQIiS=AycF| z5KL{5O@*~F`kcaoc`z(r#J)qIYo{wR8#T$FFmpiO(A>T`9dh$fTISWJ-Q4-J3a8CP zspig|J@@~t5lox1+J#f+&c0fwQZ8xJA^-bDMf+BmAnHD3Ao}-zx6AsPW}iGazf50@ z$|-E0H+y~|hvk$!bUjC98!LC%tgEM?hlb?On?Ez3V4fbX^JeGG$S<^}7S5hkAm@1& zMwB!n$8g?^+`OqXawkuiRsbW6V7t391Qt#!wC17Pt%*q4nlrngz?z$%x4_CPm_0Aw znvlowVV80mN9Z;A*5tfdg#}Qu0OlH*Ibqr?tAFp_x$Rn|S^YBy^y+=(l?b8)5=d97^Vw7Kfsov`*;qfGprCuSfM zw>8bNcUjMv^g*|(O`BGQD~UqGpPw=G;jOXQyMwUu_){L#}arIte)+kI+ZXrzaxxbtCwvBJ`I;=u0B>4I=bs zBJ>R-^yeb?D^CPzCHg_&-I=CJJl*ALAC+&uzw{H zdUU7rI}@QdT`1VO2)(^F7Qobt>Fd#`lk!LCBiGOI5qi7NXptPD#{hDEp$L7z(W34V zdJJ&qmlmOqb+mXMiqK=gI=>zf`k-pJXc`7e?r-N9dPE=xapiS4HTZdq41X5&D`D{EZQMbIA$1H9}u2g1;j| zUnfHUWQ3k;F8jAPLLah~kcT4ljUx0J%f9z#toGg$3RxK|4i&mC9M4#G#DCafT<9>p zUdX!8r~v1eqy(jF2|WSm2{ zG)>|G#yMn5LlSo}&Y@ZwFY!O?A|7PilK3x-b7+>H`3H(d-!jf2S$az1Uog(0SbALI zCmH9IS9(a|Z!^vzS^A{JUuT>{v2?4%Ut*j?uymco_c6|)SGrWdc^_nZ@3_(H0rSRT_xs`ZZV=k|x9Ex43$Jh;+RRkzpCd-t~|foz7(xoi412 zA=Q~t45=z(FPxg(Dz4sgNq_8Nj-qfJ_9ICw?l44>Y5EWBGhY11ol$fqDf*vf%!08q5&qz+O zI7?ZuUk@Wm)Q9x3rIW#6sOQieTnY z9}9YB(W#80liyhx%l=e_e&&{d?xTF}Z^{)5QRa-*Mu2uGK4Ue~-yr&;4{%`@y@J;M zt~Q#X@%alEUf?xC`;my0Y{#i|8j~nGTyiHO8AT@uK1Q$xAJRnN&Z7IUz&G)0t{K=>*|PJnWdS9r-RgwP=9hl9-G z3AS|cu!D#nLRL>QE2vXN4HX)==(CamPV{KWSSDbsUu1Z-H>FkxRxiQ+R1JncD@lg| zJDjN^xu)QK=hh0zc9oRkvyu>GX3>}5;o3MHS@S#BeXpdU79oE~Dren7LrGcW*zm{7~HTC#Wy(nvA-Y{0>BS@oI#0 z7eB$qf0MN>9`=Ok;&ZsMP~BJ5P8UyhqDM=vVFJZ{#rji*S9>q58G;qN_Ku@mWb%NV(FFmb8V*MZH!`-m)X(onDK$R*L3tFV}3Vhiyl@V2BsJ zk2*|%?M1E802M6x23N0c4PM6)1O5eO7as6l(;AnG+G&j|o#@e$0w!Pv{Bed?dz&WP zt?^Se-5UL25YZax;MuJq1O84a#b+h0Ax&#Egvmv%aXopFV>si6?+1k}wD^I&pIx{R z*&63KZFd-gbpwXLH@NUh>eINm!xdWfE>&?_m7!HHQuX&A7cLxK@g`D}VYPY%6XrnM zKwU<0@hJ)!Z3&75~qN8#fC}{)& z3iFN3VO{$(=NqBY^r96fklf^>D?Wx$$Xnw3ki!L;*f>C+)(Py?2}Ci0o}zl@42*O- z&mlu=pM?g3!Mw99?YjV%9pL%G{2Y{a0qjdo0E)EWVg-ep0t|-Jfo9m_2zS=vu6Z=t z<`{u<2eK~R0<+bUL&nBemU~$aCeuq7F|Rs`xJ8VZeMa8#jNUv|)c@>$_9hFO4>s;+ckps9?(iH`7}yKt z;yzlk7uo%{`x)<+nA*MXP8)I6b-_S$_Zm7 z1lyxMLgcI)YiuKOV7iwPv(qhyUGu+)h3^NP?2+haFyyQz(f6sDLXANm#}N81#l8&y z+zf@e0ZozqIAYKCk?p}`HvX3qJzW+H$qlM#{;7;*OHNsZ1CjeFJBhModxO~<^cE>O znr-#4QxU~qrHhZA=zHqBolbk%{jj=6e0a5E_a8I6*|9rXa0_>hDntujG#lcY`E!|zRDWiG`Dkmq~(u^yvW*iLlvBwGfG!<1jkx?}N zc;xh`SGC_DS3r{E1G-{ZH6AS~Ww;3Uv%cRLv?t~=9mT4MnXy^J%Zp3&ND%(fk~LzE zgs~p_70bz2f8jNKBo#OR3hJ$|j8@E`=tU%ZW*>qGV{P@Xk`m^nmyYZayI#(Sl9uax zhFSe7RvfN&Bc7!OQDa}O&Ccnh%a(}7%MOK@-j~3&W!Wpk!1I2V@g`Tw6okuM3&RQO z#n@~x_(6uYM?0aO6se^FQuo83-jw~}YjW1~-F<b#@kUuvx4PQh87T#Ki^xN#zrkzm=d9f{+ z&6|{u&j+&?$l&M1Ye9( z&3EHAtivef#M$#_<>gNb&6ztJuiXn4g}Rso_+nkmbs%76=7&b)Pn?Guhgyf)riHrp z30SI@yUQwEG->GF%pWgYco*Ro=&QdWFN53;*$*SKJsyb0VK|O~d00T z;X*?^&hCWFge<`n&UepeaU6fzTXE97#>Ly&7BPeI-X$rqqcLxv!KgzNzs zz%$f%$m)U>0r>^wtB^lJmO$3W9p8_|KsU%#$T5%^kUJpfKpur$2YD9qNk|Xo z^W%_-kY^ypAv-PTrH^pUT#mX|R5#)w z;QcDWS*H@D-3vJH3Z8#?!ewQhBKm-DXbUSzhxx1mKIgySJAfAe&j;6O50~yl+P?~X z7jXIZW7jcDw<+-w;M;*;8fkCZoH+M2><5llEaCL~h3!*;KlESH&j5bcf5G`i`WE1w zBGWGnr@spLgTO26haJH02VPP6*bj4nuK~URVNVVsb{nuCR)_OB1L$w?I!2b`sxTgp zE=0<9&>;Pk$&As`;pqdA#~}$V}WNP?BN6-S&v@f ze7Nr{4ZM1h>5K~FCxEvG-YOEG7RJv3?*<%inZtPu2;<4PoLc-BJRNw-f64z!gICs$ z3xRw8OZppu|AuyM5Lv!);qvVTehzqL>7M|82j-B9=FAY%JO}(B@QUV4X4wZvZQOsh zB9DA3dIjUxx_SkZ*SPxzL&ct6!PHy48NsxbQ5nJXWxlLnkGaA0p24)9!PH*C5P0DC z3i{>SGdJ43igeJM&hNsermF5G-aD0QTYrgrGy_`|%Jh*+{6kqQTnJ)jSz>LC!q=b+ zs!>xYI(hfGtjxfbbWqh1G*!BJr!D zh2;t9Kur_3_kqZK4;|MV{H17N+50AL8 z{%*$oi$9t7Anp8Q9uq{L49$AARY(-}+_TpN>~$}e&ho2aiJ6ZU@W@(C`8 z)0&k=-eKf}Mm}rgD@ML=*{o6B$i_x?G*XxD|NLz4M=GBJc93-rr4E~jjezq*m$vHADy?O^ z`4Ve$U7Pe)Y3-Y8t&S!0LWL+rTOb;5^5{sQHk!D7 zA#W?kf2LggRTGy5H0)h!v3Z{o5bMf@WZmjx)|0RzZ_6Y=D7@x~@@+xIg8yFP=<@yDCEED(|2 z@^XBr%KS!RJAV(Dp4V=~ z1ED+XPK3Q@UqVXm)x}6K>N56?@87sbxHnQ^`H8yMbjQ$MjA-<41JM9P0woAx_CAPe zxyLL@$Bid8-hJO*=&Ia__uTIL{{*4R4dA-BQESBvN<;X{2S^Q46Zg@hP~;y$Q2CB8 zM0nE`B>J*$LU=PN{`k9aj!!6h9GXG77&0-B4M%XquTZPtKRCzyz6^>{Yng1!PYjQ~ zTf)z=WMh|0csAv}>C^B@BqLVQ;mJh{vVtKCuaD!uBot4%({Jjoo zoa|b~vTg@_w@tAUzr;1>{`|cTmi0K4yhBG8Y)TH$Kki*%S#JROs0T18U$iDH4#IN+HD~2 zzL;!P`(+1s{nW`;slMoj zI^*)c2yezLCa5pajvXCbiYiT8{j=4;3)KW%gu@-2BRs&9rSXNTbQS9C;N6MyWbh?w z1Il)XgG(WKGWZSZKD7L^4$i9SrmFGjGUUHfoqou&-a#4PBS(tIla+W`fAsu6!$IP= z&0lfoo=-(DT1g!+YCRp5%ERn{h14ZDA_j&eBUwpWNe8BaovrGk+#SH|dokNe?t|Nd zd%N0>4Am$Q#@i&Tra+IYYS5_pI4!jyJ?ClDXH>Bt_y%BG9b5{l@t4%GyMaFg?DaCZ zuC&aan)z?l3fHsx46NTOU`mxV^K*47Zsgbf=jj zndjBuF8O=_&Qj$Wz z*SO~7;zIy>R=o%Ol+6i9`)STIt}eJBg!3QZ9-m!bxmq;mkn1Phn}t&cc&fvZ5ufr3 zM|_&Q%B_~gA+CA??{9M~4X3+@yDf_&T#W}bnXt?iwfKh!?jG)vM~(IMfL1ux8qRQc zZfLBx0NUCA5tfpttiZ(V-snC$P)|y#6CmEe4P1LA;4SVAn5Ef!>PkT4 z!tf2W-sbL)(JS!PfR;FLa`9wz#%Q%?IxP8z3HK9n?ml{s7Lxk~_ieX>v zoVA`U4;xNY0Dn$~LzhNh48qyyX@HKEi=i3t4h~0O4EvTMujf6jdm2tQ@R1Hj=Ovss zJsE|DGZ*+xWjNu9#!39C!7#t=_?-sx|WeGQ~{%McCctjCS3O{(w% z@beDGnPsfx2N$6pUA!Z+&@+iKmQ@FbZVO${?#RV`xz}sgp(F5~4oBBhI9GZ9wcKPj z3i#|YoXC0#`vxzchoxw%z})DtBkC!{_1cV*s_-Tg| zQP0;{&*-RHLr~8@L5RbWMAuX9*)7NV}U5DTI{#hOKkgF%{c zF)_04VzMl%U6L_b4*FeXO(GgV*mp$LtZmr4znL;MJ&Gi8b8D|jes z#2PabN27sj;?T{Jhig<%J1K{zqRsw}y4mi4wg~ich>{{tmL|seW?WYH%FPZ!2JzufeyzLAcS0i5u5oGLDFzmkelP zYH-2#@y&+a2F!sKu*=sV-QNZGSIJ-!=+{+X5?<%(cIxflhCw1GcY^*@1twCBh=OJN z?;2oCUI+cF3QWSQah=OZ|F_x3Q+N3qu100L+014N= z+DVLD&jac_E*n;50@&A9U=i++YI~N#Vv0I%M(=H4Z*wfdyp%K~=Q*jSU?yOGYClN- zCXu&c{pjM9$g2Gd9tl02PcH=VG)QNh6j>@Or4(y)cZolF3qJLrqg6CUP#g|(Pv1HX z@NfQuxL*sL$^jOJFJM5sebJrP;dzop=?^F?439w(J=;7lbu}fO4Cq=L4nKd%rD&y) z?QRr3Yq4S94(4`;&2b({>>GU-T38z307!2+#E6!X{EvD<=sY2Q4boYM$m`6cIGS1K zMIZDSVjONE^>FAWjmVlr&xfA=(+x2lq%4Q%WF498ZPAVIH|)t^F1VO&rAV?rdG5K( z5Z8iquS1L|=+lp*pu3{28HTtQq*oncL_taPSl)!jhWI&1XB}esf=aSqMt?Bdu;Z$t z{y22~9X1x1%>R$*pBorrI!GA~F`}TW?*lO^kb}`DO+Nvos~loPK}qz)d+)`?D8!pV zy4N8(S(_G>WG@Y5V_hWdySDH)BFVP%w#Kqt*B_+29b!a5 zS7C;8KN?W83~@I|haF->i<0Q+=JnJ!#E(Jx*&&uMs3iMwU{e#r4q!Qwg5#pDmt==} zYusXpT(|Ugh!F)%YJ`IR6R45`oRh*BkO~|kD``6ObIv^pF-3S9;sdN&0n$2$$QoHG z&-Qshk?J~aGb=<0zlYTd%x{$*dKs-wi31!BBCUoB5w=K4N{W0>c|>LxDiZA zHhR}!t`kl>;291lToN|0VejzXQ_HX?fO%~tY+Z;t4{XOPOteGY^Yifdkc_|!c!rU; z#z8iuRnK=m9U|oI@hxZ}@9L={itk5`A@7>KBG$euVqH`(D%W2k;?`awZW}A&_C+E# zY!GqBqayCyBVywxBJOe_$B_5#x*|3W5V3iZh%MKM*t$u?eS1XQ|F($j=R`b|+=u3m zbQST~SP?rHig@xi5l=lQV%Iw&cK;yaX?Wc5gHi z@#bYB-Wnz1*g_Hixz*GRt>(xi0Z5!9D?`b zP}H$GRt?@yqxz^f{CHafqnW2jb_yt$!46cj-sSg93^Kx$X1P$Y|lBW!EM+J3*>Vm(t0&U z`%bpaJuI|z?0QvPs7rP? zQ33{K$8Jy!(SeJg+*=ma9ebBbbL)=%nD90l%PFE`cc>FBbjO~xIi_QGt9ENJ+F+D| zSu1R)^Vc2wlB$NW{V+J)$YCH%v}#DlzOEKOtT_`a;z-B7t%fewoRtnoI+l%QI`*Wx z6B8j7TgiC>d6|y=RNahW!RFjYL|RXG>=$bGL%M-Jv~9GZ?%1!@c09n)P+lTn3HdvIaXH1Me?z2xiB?rrh6j_-#ZAw&$EUZk-{D*b(FETljD(VwxLiG< z6`(~I@SAJ1qK+u7lFxF{vsp7GU-P1`;?s_b;rFxXxx7^<`NkGK?+6wk`Wstx;p+_7 zK7JKA%X;03@V&_C0UXg^0I@W(A{|S4^>EY(&2&u6-SrDAB9CV#uizfWEY0{hGM> z)eQkeFH{MqQHSV7yus9&>CyKdj8ev1BxAg{xX)!-E%!~pUl5~4tx|iyEHKigTHn1C z?KQ!*3uS3t+63W=E)L0LG6G{=W9|iUFib|^i0;hWcv=%e<6KFIsHwJEmj}%pGh`ru zP)tq_5kuv^7BhT|#70~tV&qB@qc@2d^Q4HeuZtM>nTXuqM2wHlVqz2OikR3=L|%r7 zNn=Ii&lNHG77vE#bz?#DGb;X~X%VvGGinm*MGU-Y{^ zhV!kAK9-7Tw})_+=unIlSNAJ$W;Eehrnrk`Y1$?qNUs(+zfR-?Q+$TCYucbIkluB1 z{)*AZF=}0XcHk`0PCF3o+a6~|+cqWn@)UGmyTfQ6pC^~IT3+9J_!f8#CQPe+Qv{Xe zU4An|!N$ z#MKmh(K8$mgiu~-1A!=_{!2FjJ@(yAmNmsjFk=u?aW51@b!qOfHWr%(fwmH`ytkt- z@=lu*?C_aDW6%>=N5;0|^h^d=JOxq=5`cV-x zJ`qvykBFIdF-}79SEY-XJ61&DViEH zQ^ZZLTchK!7Xb0+a72I4+Gt>7O-x;HLivFW1b!h}Ck~~S z1Ui3nDQ-u>{VF#NAFqnqF!F%QH6QoHC|25vS_M-p>O3xde^SwYNRYB;8iy&rwnLCdtUhS@~;}xKn6{kj5*M}cRi2%Um}SZ!T}o z`UD%eCxNB9a;s0Up?jJ{xW6aZ*gZ=k-1rl0;-1Gy$`Mwpn`<9BCZ2grM?!OOL|11c zXtirnpgo^;JC0tuzzF-XYb3Jnh_98*6cHp!#46kPe2f9|HBD-<8jskj%uq2-R z&o;nUxbo@)`U2`7Y$!msmHZaw*Wggs(iy;AjWLLDh^gQKwuzOpF%_iou8p^uJeq^l z(IE;ac`ati;8a)NRY+(cu;C7_GwR8LtaGKHEnG8zEhvkpxMl-?)s=h~#u+kotp&cp z=2#kjlP;002U*RXfSx9-8)x(dS5bL7gU#{^JO^MGFV(wNqfiAdyy2g|?8C@S>i(B1z&kDNT zi#Hmpc7(K*KtA{TON|v@P8usIVT}9FB2&U?VMt0C=MHQ)C0rhcWU*7#y&%c7%Dv&d z1ghcA8E0B#U)W04HMQKMk(adPdtobq>bdi7F;-_BtCT4i`@!#hKW|0Dhj4*KH^uCY zLth4|as^C6rGv5lY|Na(X$d^N9Ot!m;0*EKI>vAY1E1hWT!O|GFvl=+UGl5mD7wQ!p=zAVHvM{Xy_bEe>v7m2i znmpPUhm|iYJ_f|ANahtI<5Nb5A@5{+%uWOg#3<11?&bx6{(?HDxt*ijpW3rYwEaf+hI>E? zfzaF`Ns}d~G5x3ANw}q`9>50LxL!oaHlpD6s4MznnT!P0B;d1cPC(K~$;d+*``rP| zf4n`bRlwJfqh}ZHG727YcR~NLanwVA9w)4C9s(b6KkU=ZpCSkFbZA8IW-LZHR zAl9b=edkzf_)YiYg~r;0`UG&8yt&ILc-;LV7Veia?*@RH64rSO{H}X^dyE9ay#Qqp z)+OgQqTmU4a#dqJ0nn7NwZI>{gRPA<9i^`fTXUyP@RWNnT8GOgbuXX?!Z0@>1;28? zkcrQ37|-ejKu5wbcNqms+`$e8{shpM4xG#{g2C5)hvvfa9MtZXrcwcRla=xvGq3M& zTMrMQyoJ{W-o)X^6_t{|8JuqZLzum!X?p-4SdKGeFgPtehw=?)67WKYBU6ID!!E}N z3#NOf;+`al6@zq71;nI;D?xlPdeIH|Dhzyo8IGmlr=xG&U|Gijohkzdn4y)-Z4ANb zo;~wXvEM>4~BeP^+`3}P@QtK*P?Y&aixL#zE9-R(M4>(;uTUPhSQPZ_Y^0@M?9rhm~=J)e~_Gr zbcD0h^KrCE=OFOc$&rar=k@j=q*Ltc*Wa?1uxY*o{$n^DHeHHv9`|+VgJO{5!zmF* zWZn0#K{{4o;H~CbY!1AQ&B5DoWgd*qAwjOI>)bjPi+3z{>zv1;ma|$Ne#hZ5+6wY{ zCjFxXoN_1O4cqMx;M8ISqHQp=(@&!6>HlegrSQvW>9oYWwn!%7mRJ-@KM8R|OXB+5 zkh>Mb#eL%B-UzDTBhbWr+8K%|TJby;T>-YpWxsEya+Z&nHa2Ix;a3B6@CF<SwxxmzU8QcDIK>$ZT>2}>0^-e%fhph$Pq=sXJiS=86-U(atW|H`tdV7f( zz~2M7B?Ch5T zfQAxgvjirw;kjEgF~N0ThM^PyzPbWRitANeYSWp@TEKUc!k*Kq$iBA3TJBT0gypuh z8~6)OGIN-d<_vfD!E_~E`~mQ991c|hA<7h;nB;j4{h|H_!Pnj{GD&)aT4Ezl@f=g@ z5b)*>N2;aM7~t8_18MXCHpsyxBS}bZwuz%XZM%Y$55gRW#9^!_@5ITT4BVE~3Sg^k z+>*6X;%rY#r2h#DrM3flgs>jYw{1hqU+sB!C`K{i!+>53!~9m4c(dn$X{IT@0Q3Xl zaL35hpSaBvJHQOuD6AL~a6~pcr~bsfp1W(<{SUlDIS!}w#N(bPye6+~;3LV2$V)h- zo+Z6ZUUPvjDVGkX^~Cd@ez;KCdg>0~_mxXWI0@cKqf9#cfWKTW9Zu_st-P;9nW_I% z;HBl#5zavGVSDO#VXCcyBckrk-0r-ls%uZ_@@ZaA={KRIEgEB$m_8qiBFjA&_jKQd z5;R-SlMf@PR4*J^NIK*_r@s&@^M%-@zYsTb<1wZ|D5-_KVNPn<23_Z=y#fu8)VXmw z>dDtKNnPcwjC@5(>b@Jr)?bm5dW63sCG`w{MM~5oeWv zcCU>?mxQ_SJ^38jpkW31bU^?0f=^9Hu!{uep#Q6PUy94C z&*R9TdJk&rj6p5$-t;)LLs6hNY?7Gpay{TlQAk7@8ke|zh400w$G4Oj*}KkVtM6z zV~tIPP|GLB8k@gI$-}KF%Oieuv|4P+!s+?pFdB?S6dLz+7@5Yc6K-4yR^GV$EN^-L znjqWC zlY#^*Pl2D5@x9^+{So6y{So6S{SjlA{)n-gA2B?&xk5|oJm|6tXA1ddA>W&mdhjEi z{@$F_bE$+msFHf|nNI2X;EEQHAsp8QY8=tLz1uUzIwDP>ZEquiTLsoLMIkOQl>sQn zhRe(pZ{Lo06=(-F1MmV;Ho`dYB~p04z|9@X4MNc)ve6=wN^ih9q_Bj6!Jw2Gk$-V* zJq7sH4u_cw(H@Zp7F!k#)mm^ikjE0)BXVv}AP+cVkr4PE65(Fl5VwYuYD^@)*z`DQl6S(gu zRHg1&on@~(5dMp6FTd}XWQ6}_INmpE3ip68ob2m24dH(n4*9OZO`z@thEp?VU_Pm9 zDMr#VS6_>Wl1O^yy|i{oq(^3_zKD1vl94%g10r6D49bkfvr644iCmfKX2h@V$hNHU znadj@5>T5FnVOlP5Q&wYgmW^-Zbl?tB88cWn-ED<-O%z2GY_L1>Q-0lP{pO0gC9kt zhU$;v-k6!^K_pq-kJOfBuEYYOZf&&-kyV-1nLr~o012$iyns7L-Ij`dyfJeJR{nKc zNn~qg)N({xOJql86-Lq|@?>T;M%txV=5x;q-=*W8)4+v?V$D|pCeYn%V__4 zK6XVvmv1r3ljY|PJIIx8_RbKRwzll3`%nAlQ#nU z&Gj2pJOXl}nZts%pU2xDZ6D;moa`Z3hlEZ`YTQ5@pi+~w`=N-Tzg#rGjF6m6ZVHO* z>lFxHg~08$VrB}t9W58?BM`UXYKRG3VP$W}^c|Wh829Ct!A7xiC!{#stgA~hC%2RSgdzQlJYTsYw*cYK&ErRa+7tqP}bnO zxS&JJh;ZL^B(jp#9l=Dn6+1Gu>bO6Jo@dRuJ3GQA`-xUSdb*fDEX0t) znO6EGJ_daY74p#cWnXuc^b)yNJiZ5)A{@iA`F)$0AsowatZ(QHgsU(d?;AV|VVT&g z`3h0uOXSv&>{~kz;dpXt`<7q^yCi|(kgw==gsX93o$70d)$Aon9I9#9gN>35ehPPt z(5EagcbZGhtikPJ63S;oaNl{jA>`t+2H)WYJd>$&KYF+|4E#|Qz+-65ed^_{vv*?( z42_VUy_L9huY{!8O!u-E2Y<>ag%EK=ujYvfBh4KakqX3p79kZ_$k z3j%kC=ulo`|PHKA5&~F9$`y8pY`*5Z@>r&63edD1l*?-@4wt) zU!FVoiK@VFVg?-$3VF%`DXx9DaAHUBKYs5^Xd z1=RQP%p&qH1#~MgL94?9IE7y3nJE8&K%~)YW1#Uqj>N{-Z^td$zUgzZ zkL6NcNtW**237rZhW);;MkCyf;dtLam@Dh|VK~{BQy<~J42OJ^Y1@zCRNwQo?ay$U z?-Xq_7*6-qS%dHZhI{zuYv7u_YQ?-*qf^n+{(0u{RdBL4ez7Du-iy@Pzc9J*eQg+NO*#T;m0tS zHB6RyA>jtxIU9w@$nqaXnj>=jtZ9xc8MFL+RhQ%EYt$@r=BuV0zYB9)j-TNyKdxB) z2ob;_mr}+-t5*kfWw)ICS;=3o1_g# zl3D&%DA?ec7)FhASyFCk*Hhf!mUzk3IG;*xa5u_(@Ls3!tyFTmyHP%W6_it{PK_c9sZ|EKFf%0K0xn18VFJ~Ib$n@zKcjd99RURk>y zYUys%2DQU4%g+toL2jzd@^ia-mY*9xbL5=mF9s{e|2xoOKcS6MTe72v{e&J%Z6#NI zeA8MlU}nw9#$?k088xlVrz^|X2VLK^4xcUkc;f>`)4Hv|8QI`*H0RykuV-TBsk@a= zZ@vYCpt_Gi%XeTo!uRtz&hP7p_=&wY62P z^bb+_;V&*l8r>E3!>`AhsBRA(z5z9;+f%{`FQIhJvRQ*5_j(W8%lJ(!!>|`HUYo6w z;CfgzE0SPnBVL81uwVo3!E}(0i)WNIjF(39S}hS7R*!_bBn&%GZ9Qs7Z)6I;yJjF9 z;0Xoi^Y!2x(6G&plFeP^8p?h#3d%p^2Fp$6Mq5%B+W&}_d(O3X@D~q5`z90M4s=8P zgGK*DCJ1gwH`*5pp#4Y^IA?1E452WreD(xP2hG~M*tgudt`}rX+T@juyG^qa7N0xX z^-~s?kXCjSru=3rU0gPBmwSNE#rgq^Dr0`U1xP>Ad~q3bQ@rC#0Y9c|O+}wO`uBfaT(5z#7a4Wu1ewPfT%vIc&AJHbGN2LLI*2RtbI@8fF zwt}X<;+}n7JGQiy-FywyjioHy#~+6D-AUGBLwDzZbT8Xv@E)ubnmtZiZuHm1%|0>| z%Il?d_{vOJ~b&7Xn|f>jDrn4{p!R1^$@eeDkg= zsUO__&9tu+h;QS|rETnI;fB`iNg*w8?8E5~-{Qr0kNU3mxaNm%Ww@b)hh2?ZO3Q|< z=&-a+2)1S058I7fTFXl%_%HNr%PtHi+=ZKUtK=$}e-iFi2-Zwy@EzQoTcxyP@WXX@ zh`IV@M8>0sC+w&D=8wFmZAv?z09QM|_+ecU!|wZ$%1UGTUKpRI~M03}*THsyxg8 zE6zC*&XI7IpD)jI{QR(yWzPKMn&anRY2^4B&hqn*4zm1w1D)kxhI5XDb0m!Ey(=|* z5uIhu_lhn5fFjG!t^PSC1#Yv?@$>Hha{Mdh{JosH6+g@Wx$tu_pmY4(kD22?DQB%o zZbXgd@N+Qk8FJ?Kog6q~pCJehbGnLCf_*46dB7&piUGXF6f&ocm=x{8cVO*N^S70XIW* z^wOo*jsF`D4Gj>!aQ)c#Z^eB@)JzAz>nD7MX3i(7f7efZAO@d;QCR+xw6N6XyyJ_o zz%Xj8UFD}X|BbvS{gHyQC$n)~>kB5mjQQA(O||l$MsmtW(DwG4jP~G9Z5}=xwPUa& z0#lZwl~oL@?OuQ8I%}%_4>eFaGVq(0kNrb5aj!4Ajy--UMuOF17T;Aj$Gy#;E6!zi zJ*Az?qEDS)O%I-B=vcO%^#R(a5BCtnpT80Vq0wtM;vprFH3Z>!aV#5H{Q&Gzn`4%+ zy#KC(*=HjaR#l<_$Fb}!P`N%uVHHtzkX=3DcTjrn!gn?sbp49k2Id2Phz^Vi;-XU% zeV)C%{cL#|K;QJ;_!BdH9SGd_6{2Z$L>suj6v?LDP>kRUu9d(FQgRB-2Yzw1Lg!_$M)g_-J~f4Gj7Xwz2%q77(Iv}~*EfvmMrU5uTVL*JC1Xam|4EuG8m zEz6;)5@MZQgFw`tXsJC8;;DthaXd3`huj8I7 zkZ!$Z^h6ubo@jelgwqpkKzpL)hZ=4F6^klO+l-!Q1KJbqG6&}fS3Fr7*Pdv%Id}na zo(!%%(H?eiDI`w@*Pdvh5GjnSTH+XLeND57B+hkH&pRnr4g!PcH=CxSWmVzw1Wce4TGiS{NCifxkB zUm)X&_I{`zw;?@2YE$Eh_9b9%Ik*&7+JkdT4!fOsmQsMwJ z8TV$h8c(#Jf>mlW^-aW`6aub2(bngL;__iBi6dNVOLMd*TH!PX-p1j`g{L{%6RmJA z2R_W<$cT4yTW>&nqLpzz3wWW;u{5kb(aJC{26P)?nJXI86Kz0yq801M0PS+DHLN|+ ziuD_S{_R-1`9~lD?THo+KrHnwpfirOhP5Z!g@mL1xP#)*dAqr9H=sSyighZWR)l%y zu{5kb(Ta6{Kv`jH?%NG$PqflKlK~ZkVR~^1Xiu~PuK=_<40D55KzpJUcsrm+95{}i zXk&~g+JjL4i;&z9ouOa}DPTO&egy(Qm4``|o1SO`+7qo<`Ee@@;?UKPqbJ%J_KzpL)M5`tOno3wY)h)Yqv?tmOw)+i$Zn0rK zduWdKM9cq4PCWqpNpiv^Xgs0N3TRKXlFX}s-zl4nP_!pnN##4hXUnGIrU%)8_Cza# zI4*##4>)vAGMQ+O_Czb3cEGzi9DOlJI@%Mha7F;1=y3GKux}~y(w=CAb1m?d4oBxD z9PNo#IQIg7x(p{`N^%QZd!iNgTVQ_Tu$_6v(nRfvR)}Xo;@%HkOpE1a8vZ!W`$tf#QGCt6`Y z1Ln&PJEERK)ShUC_$f%GWr&trINB4fa9mhvB;p7UE`7U>qgU5}@kHAMgv%U~%tqlB zaSKy>qLn0vftl~Hg{Z47MD2-Ih}VI%@nT|R-Ni(Eq7{>;K!2sINkjt(TYI7v_Ge)J zbTQk~Mb@5Zh3LneQwK*xE0nL`A@M{jb?*pfKZm`J*QoA${s~t=d!m(Ob3vNz5G6&P zEVmG~Ct68y6-c)^M5bss+7qpw|AFr>!%><@532#~iB@ub52SA$qLZuAogi%OiB{Nd zEbHpyC|`B5BYQ&Zv?p4z>jIl$71%{|hnQ$jv|=&~^ktQpSZ-l!Pqf0`4Cb>Hup>G~ zOb&@BS~2+-=wCS|(lK(1sJZq;E9~=N*1&pS*F4NFUjyxlR!q`B?^}t9se$%HE9`M# zF06oEz6RP8t(dF_{m}|c!s}e!PTCW#m>dE9(+W(a8a$bTX-~9b@(1V%@fX)z#u-n> zM0=tYlV+gzslX(>K(CW933pBHiIyf~z+T{3gok0c_I2oqHb#4*rNtVscT`{z?vOfr zmcl}NqNT+lu#YPfd!iNMw;=uL5F=Vj^4Fedg;+HaFS>B( zmg2l-vgRKE1hgkwAzlVjrbCR#n#36GiB^dDAYJ1Sovb61)t+dDeH)nDE@tEZ_hGWy z6Ri;UgY>3Dj40^SkE5X46Ri+WgY>&Yj3_9HG1?QY5Q9}wbsW0tOq7@?lM~*igV)=qfvf2}^ zuup^e`^9X_Ekx~!R*1oB__&1QqOPYW*nsv#E5u7d>hBOE3QA&(_Czbh@gU82h~*0^ z$!bru!d?UBmW$bzTawkDXoa{3q@xZoqDAQmHlRJx3h@+3XB=WgK}n3!o@j*_orJ36 zsJQDTS?!5d*q4IY|6;b~mSnXjS|N@HX^umTC}>h66jXbn#hX4jmjUT6hbXo@S#G+; z3}{cZd~2b0fpowjvPPN{qdn0I=Y8PcIUFZ3vjAXT&3*mt{vT0K`sv zq7}Q#VAJ2RW8a#RXiv1l84rBE!wIJy!PcH=g}nyM9hI>4Y*BT?P89xFjTbHJ2#6oz z2waZ{)6+Ayj4?UQ#>;4{>cfXYDQR^SmjKDo1!lZju|cjFFo(e3e;>dXdc-^a7X$pQ z(sp=H!3^2r{5*VJz&ziAe@`thy`$Kz){yw~?IAK&Ab%Bmc}APpAghdwpN=xCD!Dfz z_0%ai;T7|iV^rmBph}8v#TN^E$_}bX#p`;yY^~YW6YSx~0QLk|--_Hl!Q$soe@}4D zzeKG4PQc!Hb8 zi`aavh%M_yY~3Z|zGEWpFBP#pE{g^awHEQnP!W$6irBeU#FLMRcExq+P&0N#Nh!V zj!YBr@+uLpY!Pwv1re`)D&n<&M7&;iFwNiSAmUAaMD_&Vnl9qlDiQyBP{i>g5a~g` z`bK25at&cTpz1>o7=o9FDz2((j0mc5Ngf!Yrenyor-R+N>WWuD)U{AF<0D#} zcCh;p;;I+YP#HK`-Qi$2PCMA;%Y~PT5-=$Iu*PWzyF|Y%i`L}z8>b!YGA|#$H;tmP zoLDxiCST3OX$QMhTw-&qnp`HtX$QOH_q7qJl+M2<9qh(w2fO3JnMMu+kvVW-7N;HT z5-P5UBMqP(?2_}8!(o{e8_lXYlFg_c>{9UtIg>%QYSO`OoOZCw<~&VATCXM@?8a#a zyKEp2Q=^SG97+efaoWKy4TsH9plb)ajBAz^y}mWB)^FZI6AlmuyK&2v2d~a`$F5Wf zxO$>`BWc~SHz{7CQA4579jhJeE@j>Y%zG{iEgh>J?6PEAh!QX;J61c`CAz;XsykLY z*k#9_BD|2sa*F6!?O>ORKW&cbSnXh!{JQApu%XUhcdT}>dmT8v$YCH%v}#JnY6rW7 zCRfCfj@1r!$+_9#NXN3#Ovh>myHso^XF15GW3_`_Hs=dOr1f;iY6rV)pigWYZKyj| zJJ_Y6?pW<$mvPOqGQ^i|!tf~eW=s0gO%PwY{I4OSeUs4XB^S`Vjl`F(r{HI(JJs!s zf+_j3=$S2*kdKs}tK@ktmR|rpbLDO%UkN?))}wg(E1{?GPKFccOV^`)>8?SNx8ra< z&H8FY`_kP3?QR>_XW+af%P9qC)ilXz+DP&iMagWb;e;RD%Z?Mjv3Syf)Uy13~1SDIGeruCq(;>DG! z%KsXGm#$RR^dtnWXu1PbQ&O=q@zRy5nlTV+zn895RRP2C-knPkp2=`>v^;Z8Z3lWa zx)4+1N|n$S9Et%0h%41=5Z^<90jt_zR7i;{RT7UA5R2ggh$~eRHQS0}CF1EOHC62x zgIaj$N>x2VwdJKNRrM%4F;tZtC9YKKgO-ZJ)d?lEs?wFJ5?88SpzLP@st?gAbfv1q zmFh4X!GIB0s!=ao3so(;Qf1R1&{hIgytq=0I{rK0PArt=_WrsXJ@h_#miOrp!XGf~ zue$9?gvFKWb08kX;kuk84Tvk%x1pp_5i#96g3KAUL=;>mV&)hTS1k}Rcaw<1eIn+c6tUnh5ew-i z$y0Sv6A_EsiMVcnh-ITiET1D{#mypa+ALz#ZV{_bh$#M2#M*Nro~t^NY3^$;;`yN> z_Rkh^;C6^E`zByp$0e3EHMIv?qZ<4~kGOj&2G0c7TNv*nN}C`&(Zz`)j*M!?PjqdV z)W_ipj6xGnYeLBQiEd}B&CUeNlQg6jSe~Suco9QoU6wSwg~Uem6fttRh|x1dj9DsT z?A;>9Js~3Zh=}nYikR@Dh>7meOgb-F#H5xY@_UJxJVwNnt3*s)DPr0th%WRK{Syj$ z@ha8oLO;>`>t4Zl$C4Fn$6Bap7y5~AVq;}iw^o(17??E!vZ)U2~=_fi` z{6v!+O+V4qi{C+6TGCH+wD^f03#8>^sfdc7Xo=EKbhP-1W;B|9qO0#>Sz6LhbhP-1 z-av$YqN_i{+O=%Z6>;$s{RD~h=MXJ^q9sZ{(b3{3n$a2b6CHi|=@6y?I@s+Ib(|Zm zI^Ca+irbeRH?dgevg?ju$Xs?!_hUZ^*d1}WMvVnxF1yS3VJQG5mm~tngO+~Uy7GQp zvR}V}HUT)_Cg@=!mn3sTpsmHMtf*g5%0}Yx*HbW}A&PcKFQ_ZJ!>|PQ-9tS7(z)#0 z%wY}7X6_#1@%L+Jf3^{Im%#e&As&Cd$R{3$80w-GRNIQwarbBoy}5&oK~U}>Ie2!p zE^qz>24&G*sJj{%iAXByTV`TK6(iS1;u+Xe@G)4OQu{((QFR`TsE&9H-URx6I9#7a zR7X4pKLhO{8__vkuB#&+gOA&gxj3U(@ObeUTw_5r${uhp#)=E&2+(7&1n4oC6M!{9 zJO#C&Jcgqe=a^n(F7fmjJYJo62H{kF zhnfEt3_f8OhuXB-iSVhq&tXRwl34}P8XPV*gQdZ*svW?06vQ6@@F>A&2?oyL#5AlZ zc0|0mBUWpwHpZZ(J7Tqtxm#7~j#!C1;?szKNBc9h*MPVq{s+ov*a@KilGN#rSP~d0 z?ugZX^>|zSjhMJ2R&Ymr82nVWsFk{p`J{e_o2S1i-4QG8j(8{-qnN512V5iC9q}w^ z7ukr44a3?UaWSBK9GJyXiR4_l3W+a0gok#3&)Edsy8)-XQ6V7h>8e;ARMCCWJg-8L zNms?{h>M`*N|Ck65yjh|D@9fwFDouRTq$%_tX@%Ue^&}!6|19)?d?iQM4zj6E{+ow zRSP$Zl-sK#*xtoXP*E+Z;kGZ8?n*{+RSNf+sZK6g4yJIonCjxgXJOk!uz_D7`1!KL`Rh;(gG~qm?T@{m;3{C@w zrzvz*thB3Qc3v02{Txa^)=~DoDebCw6rg+urh!$b*BGRrT@^EvC4g@&Ly?x&3nxw1 zu8LXlM?gGCGOtz{pE9Nlncjz$c2&%jKLGLjN>diHc2&%jJuUHW0Y`-?$I&0LGOmhS zfz_T&nG!T)Ton(1dZZ1>tyE>QNi@m0DxL+xB8MbR7Drdb%D5_C1MDsv*Y`KsXQs5P z;vua0F5m}jj*>Lo8F>J-t76`|)%(CdCP&X~+=iwOiK}8ZjyRY7%T7XXLsQySv5c^4 zt#FgVp{-?~nbNL`#kw6Jx|Y?ApkeK*SgeNty3(ua zE8%s3?g(3R8=BItip83L$Nx;&T43#}Sgh$@_T8{Gw_>SN;;NYIHuVFbU&AnWsVVKM zIFotDw#H5v9H!N{4NYlR#R4}6)W(71_{mrqSH=CH9!!YiLb01HH(eDg?W*_{-omE? zpYL$wigMFcvFawSilu4S0Kcmohpvj1c2z8#UBF**IMU?$4og?XO1ml+;zuBTR{^mp zpTU)OReS+>0IL;Ua3*GHSi35&3#e5YSP3VN+gFrvRookdY=^|GEsYyj#d*MHIk?!% z_7|mH6-(RlPe*QbII^17X&6_<4*}cb;8MMajEt*d`jP$EAxX!_hvNG*fK(v7lds<23eL39$B(1*~Wl3 z83foE+iV8%7>!2KU};8~8Cf<7OMwKMKmtkH(AFtrZPF$XNRyC2SONsH5t^h~N|P^X z$ondCb6aJd4DBXhhNa3+OS3{6i^0 zw4w_Vx>^zUy$D=KQ^m7L;fD@Nzl*X*=v~sk!X^&=wL&(e^+WdvRud(V(7OeNT}Fe% zA!VxgUC8jgctV#FqogH7nJWGye4jQUYPCr)j!ONcm@0lA;Xicaq!=uVNl2M0&cMTd z3E?w=d!+KhRBMmMzzR;G$2_1y@1znfZCi;yx^{90!I2!ft;Q>$QQs`y$4e+NPT z>ZRst5mKg#CH3zav>K0eugElql&NA#y%0f*8LZmP#U!Lm6$=2bL(m2w6 ziJ;RN>**6C9yUerG489jp3We|g5r}!oOCLiP zwU0cG4CE9=F;2185La7`@4gSg$9yJ?C1Xa%1JLPsl#&!P#vg<8@s<?o!XQ@T1CKC=2i7qMN%jdZ*(Z6Pr;D#+v)o7g6q)=Y0|?JBWKLU=A)Ld z1^*T?q-SLL*~^{U+%K}cH$D5PDo>Wk#SaF{v$`fgTUuLa@wxFOp5Tp(wx(^rw$Zl# z1=;SRY3Bu})HM8Bi7eP!WFaIX3pJ6`$iAwHtY9B35sS}}bq}2mWI^s$P=D^nl6qgi_aSnzQc_p$r#aEOoSg1i_em91aZ=g#~N9) zY4JItEI!`|-?tU!z`n9(({yS?S$zHg!f91j)r6%esF0)FTAo2SJ`Lcu7xsqM1AWor z^TKt%#h@QYgTM<<7bng6EdwrTt!b9D)XTmv`9atw8pQ)ppz+-=FH-4ycYn{q&s}qaQ zH@YFB%d3Lf-a4`Pe6S$cn#;bd6N}G``EiDdR@huxe6ACV&-{MY4LFq+pX@cV%W7A*|F9Y~L6ZS4=?=RU@HqXgFjYb-h`{Kbbrd@=YL{5Y$;WhW_Ecy|&+XU+@NYyMlJ^apxbsNSIzMpZ}20MoOSfX9D=&bNcU@$4> zPJ|zH^HFjB{_l~`=J3-`=(0YJ@W%rASnQCq!+-X;&ga_*e<6_1Bh2T#aL1Q)KD0|0 zJ*%)jiDAUKAbjB?z)q~?VuX`7ruyAQ`!laaqu|ZW2-ILN}lN(zH*-w*GHO^_{XhJlsYkAc)iko}MN zd7g374w8p8tlSO=&NKKI`1!3DtYPH^6r4wVd(H;1!|iQ~e`c^E&*Vgf-onBYQKnFWxPHv9#`-^Vy?gS`jUbz$X_Pv~MkgYah< zhux&(Xju8|M|4@=NBB<|$CrkOD)`-WSkA{^brmoa^8N$06$CrvP;3#5r{if(RSM#QehE-Cho~Q>g18&Z%?wk<>v< z%rETa3AS!Utyc$ePMrfKtw47yK|e&+t=dwO?vN93k+F(w;5n(S=?>CKO2#U(iHtT| zQ5VX7{LfLFU*ic)BE--gVn2S?X4DgpgxEJqu%bJ}e*CEj>M_9ubO-In--|5m?Fhb% zQEp|apM#g7JAM|2K_EtXErMU~M)|5lQFI6G$4f5nK=At*g*CL_!&H8{L+r;ti126J zIFgJJ4c$Te@sjX+i1S0nV~q^mA@<{c3*VXOS5=DSAWTV3cRX<_iainG%L?Ln)TmX< zacva)@pWB1*4I?Shfi^df_vc9L;>x`Z$VZxE^FV-hFt)cAqr?e{+(_JD4_j#X7mMyieQ5#3TQu`-~Z|cXrh4j>K%*YN$239-K>!3rY9e*9+;^o$8EfJoYp-+&PNd-(ZxM)@{Ny%a73k+dIwKBI)u zlm2ojw;^xJgC|;)sSzLTOsFf4$`ts9CK4s=_p9J~>7F9MatVPOd z{UT-CbdfSizDU``ujNVrH;tbzvc>A@B4zcomiRfVjL+AS`d_5X<<=7G!cD8Hio)c7oA-NNh;n&Gdd*9@B8Up((! zbkg+x$+drgvz8hbGiZAMl*lP?Ha>nWw%o11q{w81_5@mARK?Kre(UeJGl)ih-VFEe z>28ed8HW20bT>z6dcXCLbhkukdcXB0y4#y*dcRfaBd%HSt)loQu9(e!?6NIo_+ z(e!?6jeMNbl>IY&MC4;f6HV{8*2>4FO*FmV8nwTE5%}*-G`-(C)BY!Xj5N{oe(Nlu zwZ@xhdcU<%KJra8z2DkoZ{Lk+*+kR(t@G{Aoecu5iKh2kkF&prj~km3HTY<@zlYpz zYNF}=)liu>4On`#N^|iCYs)F?U0WTHqrEc z>q`0fXcJBEw|3d*AkBkKG`-)tO6vAl6HV{8uC`x9IZs+MXnKE19fzVW$|+Dw0y}zd z3wWc8M97}nFN&Ou(&m2KH$#-d`~iLWgJjJ}9Hq_uwqJzm0bhJ<`QcESSd?pAq-^fj z(jBGE{k9)SZd9fb5q}jqN}Ky_zZ2xUi$U^ZN@H5u+;2NWB2e{4lIcp)=6>5238FfV z3StJUtSD{nw~a{{b#w~C_ONl^lIl=#N7dwV+T3sZuJ}f2bH8nsbSW=7QhX?Our2o< z)kO*0QQF*ZYnNEm^-&!m3>+_Nls5O6xM4UkYD z>mG!K!yJApB?)w>Zi>Da{n2)@B%?`LuVZa~qGh{~C`z0AZSR&?)ME<9iqhtOTSCIA z;1sBx$|_2m`)wbQNK}9FYN*3$bHD915>CA+6)v@i(&m2Kha~8413?eH89^(g(}_c5 z>Z|V5V@s4)%b*4t-fxQ&zNuoRD#;$Q8fbXG?P>x&wXVFHSq&#*I=9`#5GrE%Luh!v z?Golj-7J4@G`!#T5C@0qTD~+<9@w{S4m0TWZX$OSZTg|hn=ZgkjE47@*3lWEO_`-L z6n3TI{iQSMu8Dl$2Dt0#jz$gw+?URxdsc*o_m>_+cVmQx_m?)%JvTzb`%7gpXpX!! z2X`a=7e%g}1@~;aTOu^PzjQ7azV-+W?=PK4cwK4L-iW$2+~1D+f0q@e>Y236YM|l$ zwj?`(ifCR($e36SG`!z7#@wl(=JkdSrs4gzE0~&!Yr)jfkBuPs5{Y{+!)1)cCEcdS zn4{Q0!~1QI(wj*k*@Ooz6?Ck=nwg2*2OvDoZ`PV0Z(K?YG^+N>l&Nmp#3#D2?s6 zwMbr6%#)dGMd!W&z9I3Yo}SlK)u&M!+i$Ct%&5Rulxsi0zpY-pso7T){yfNVm4m%+Q+qe*CmO z#b1U}i_mM1HJ4`g+r-#DL#bToPfIiVZDMSnq0~9_r~LvJ$Tl&y&rq`Uy|lU^G`8P% zgWZI_4uNH=!qvdi*nZom?0N*9To9xOmR9!L9<#rVf!$Ohygo`by!z-q{4P=!^J{rf zS|>hrI`kHaL%pv0=mq$#)4$5+D)G4ksV3^9L}T@`(AP!D;;tndzCOw`h&ugCK5Z>^ zr4Sp=#*d&=uWDaKWu^#??YH-G_E-@b+izb(cQo?C<#3-#cVmRc_S?76-5jB@{q{b( zTOu^J-@cXZ_6Tz3nMhP-@cvhoe>(_Z{I=pt_Y3ox9_BTcZA0F+jrA_QRJ6na9>XM#St3YZ@+@> zOCmJ3-|o^9~?V;_zav+F~Z3#_Ie}|YTU-{m)J@yzdHk;d9=H~ z{2pdIk9PN$znf|2(eD284@d;s-CusMM4;XM<@YhdYTDgj-Ym_SLA(2>wlGG0lrT~k z#eA@8X=haS0koqfB_E5Rvlv95x+sqn>!UBg1L@Gv`e?8GDt|_-i&B!mmh$6u(I3KD z7p44rEtSLS#aS199gsgz6bFkzO_JN;ycIcqG|TkkKcei&a&yh`uZH)8`%o>)9f7!Sh17;{#>*Pi6*Ui ze?|qKxVv=z9`Qio0XHqbPC>`Tmm8f`i%O|!?oBQQh-H|n*oxKyLB!q|;?hU0IoS{irdB`F;s%;# zkNqdzRH^fl>*_ss1A;%STFr1ql;v6DZJK6}eNV!F>4wvV>aSz|~odfU0$zMOKui*<)=|7wQFiLE@zr zyenv$J$5&n)bPnkI6uO)R2)>*jnXuG?0V@Pa^+Q0)dSR|jO`X5a_ZHva;T)XSpI36 zJ@!6{KpwuTfb5?X5&tPHBe4%lIGOvZkt&F$*<+VV5E=e~y!HNorrBd3l}LZ@ruXvi zejV`X%6T@g{9a8n?JG|XeF^dEqHN>pd+5_DKJ#d-y|b0x^H%;9oL%hrd6cB->=h@C zwRfIQXI=CMEkN76ETpTARNM?+7P4w(8|d)5=$R<1VGNPG97d*Iqax87cv(nSlAhFZ z)Sg_jyJVE9^Qb*}SxDCiV^RZBd-Af7uDj_;eMs@NsY+=zyr&5vqYR;nq>j$ZLb}H3 zNrg%6c`HkspeNNQwdecMny&ryq%x)U>CW&t}i_*m`*0LeCYR z=lcPWUANJbN|-u1FAG`K%Pl8WGR4!TPN>zu%R;(7zz}L_>gcQA1SiixaO$bT%R;*TikrJ^8Wdg*o*a^v<2?S-+c+*i(BAC99r@3ot()yV#UArYj1;lYh&*>-hlT?TJi7w z<~!+p%MEaT>u>0!760CEe-chBLM#5g|8zOsR_z6NoyX6B45-*wi>tkBcu zJ8aGS!9B>~Us>!tTJi6FfzHM`=$*#i|5$J(%E&$p@1LqJdGOiyZN zaMwgW_))lj#pqG%R&G&_2RCJ@(`t#2R-#so^pY{kYCC@)l!eMK1wan`Y1i>qEt!* zhXTK~JZh+mQn|2RJnF?=7bOq8mVEm9C=V$>!O1U~$+gs^tdIUPoOMwu@6}QvuwLid z(gqKz?A1r9<5wU3y8NzNN;g&M!1Q4h3jWqbKhgy!<$LR+)FP>mwo5#E*GGrM&DeEO z%5K$Cf~`Kfc@=*tjax6?b=pla+xlpY{LYi#HvBI66QmqjJO4rly}RrkP&zn8^)zoD zSlh~cqmgsp4)+qe*UV=8wd&@9Z=$^K;0ZCYHJdjNtW`G;{0zRoHz9)dt=TIvwbrVe z2O1H7As$I+6EdvXym?@)x_O`jLF?RLQnJ>$zZ*cXx_RJS6U2tU9i`N={Q4+6AB5&v zbd&n2i&9RYUVPB2XVCo|U>^&z#G%hMytIIP)NQ=9;7g|iTjFp3>v(CwH}S+{8!s)mO1zm5{;t24mlo`0sJ^t| zx?f^$ym=cNUkv^Qu;`Lhr1z6$vNSMUx`a$Im}!A4$MV7^AI`QJs} zp#el2#dFO0k3b9%@Mf)N%E&{O^>(~(M!oq5G%J7hLHZuV)6A5iJ4dWdl*s!6K3uuF zQ-1a_hI1)A<$lan<+Me{ZWAT&{)Mq`c*-wX7vlj|B#utdC88hY&pt@sWq3|x6`w^F zQEHFlj6=waCrqI`uew1Fy+U_hYHg>`-i11g1~-czR7?mvQQg_tv5gq3=iVG&2i!$b2eghn~dO*YLP1*^=`+P^da~ zI*Dn1{y0Wt02_CmtA1fr={pyXo4lDBBKzhq%lj&8GZjpG5e0`h^5->|zFY7}kFDl( z;y6)Sag13Sc|a2F$5o9{-k_cFAoSo%JMM~Ypp zi~SRuCwR}FsOpHNR{rdRp#&B$$B9GcjAv?QOzUpuVIIa5VQGZ%td0X4<6-y`q3bWVW~OAh7tjRUd+_l!Jg#*&$?qkQBBwlnRlEKx0#yHYuW{NmnRcVS z14K^!H(y{Gv4uc>FCvS_bdf!(Wb_|>o05fa)XNDEHD?=*=7`2_M)K8&v|J|#T9rTh zAbl?^On#0^KBALvu;zbt3G#6eD}_fY|DtpT6FvZ{=?=V4Eb0vU{so?9retT#zoiw9 zzrol2cqE@6FrSkc>*Hwcw-{09;|(T#zmKPxDWy}tjZXa)J{Aq3Q;h|@!cLv}W4BY4 z(-w<(vG<`T&O)+h7O5ViuriaM(nhFLDu&BIK)hq#Xn{58Br=)f+xzS--*iE}f?bb@UAlql1`* zbo7QcI2z%#0FPu?_ZrmpB*tn2s@{nARXU$uw;A+37f&-&N=MVg;8pmz0nbz&{d=#Y z#c9n?A;-{LkmNo*Qu+&o^=qC&CU1E^0&lX3%VxesBwst2`JX-j*v9)gJgrRH`cD45 z2S3()5upAqoIk@O`Mr0izk52E>Zh1Kp%Ktgcv>0Rnm@D-Ui0zYg2zo~buh|bJPibf zcQ2k+#<4b2hkXxR+lvN`zQcI@pkc+RF#IO?{#b)508;+!gY^A;Vf;%Ke4JjV=H!l> z?U!^iLxsEnopQjkH|iKjK3@!jd=sw!i$@y3`QpLFNi5{q&tbtumw!p;=S>{?F2K{w zECen@HMkvKU3erzt~}OBjP?CTztOWz zFe2~3`!DgdGO{&aZqE21oL|7>rrY5-Iq1g877=bh#vhbWbO)23i{B3K-kqBRcrv&(RyM7N+^3Og<-|ygQW)@sY-)O%JbDPFXeoCLcI#W(>U#3j*n$Lm~MEJU* z@uY7To@U8{i1|-fA+HVaIv0=B@-+e%jCI^su-C`?#G-uYdkvmurX*Zk$o)ikZUUTPT_gpVfPdb#4yyrIj6D4!2&v@nJ0V;ZwK?3*ULOZgo3b9lrCP>#Z}m!3)o` zo9;E^F<>Ao>#o}WSE|A6;aUFz#qwE-yftsTQyFbe|88BZ|F8f!j0TkyD9S|>4H z&1WEtjrVhNR2KW(`qTG9Jk3nW)>~(Y7E~e>hX+o!Jpl35jw!Bs6uch1Lq(86-}m8Z zW)_5$&DU8LgAKNj&r{{ruy;E}d4$U2EJZ+aF&@M+7s zN9VP~&5OQ^@H8_e%e~d6sZc>UFbzuMpO{Ru?IjI!>cb5S8)n;0b&Xi_LTl}CbY1=F z^)|XEjE@HMQ4_*PeZBdN%qjS+U1asoSyPYQ?=hB2qducC`>f-YN4jDC@q@^9Mg&p2 zkH<`*1C-u;H$@jRn01`(m2!-i8(_6f;vehzoppRy{d(loc#JN6wwD*y`(W8@(;UBN z{~T6{-g8~=NV>uEp6B;AapxC$GWl_SFD9pFv)_{yRYe^i^iJr21^$5kIbMo|62M`R z%6S2c+!Xcc2G9G14)iFy_C)145nXiBI*UWs4BwWh>s&0(2z^gptA_yui#xUvwxd;d zYJ^!XDXfcXXf-cWVwPN0>PWq&3nF zXLtj_CZFkM>VgH6oh9D7l^#%R2znc^+o%UV0{)NyiGagqH*;yLm(Lde^kdul{4v$o zY;Cpb>(2yY0jfO~P8_Mv(X%?;z&iHZcE8NKa~EUgb|3<*&q{P+kiD0zxV$%T~BLWN>%b&Dw=Mh23gA^}IK8F8 z9nKl1GdbKd4Hm06gEh+wCj1}6)~cnX!L5!v;>WsPsG$eGjqWUyIX2skRe(X83PG@7 z(J*-2TQYpuV4l~X3Vg6woIR(dUUklKUXQ5I=7`lPLshUS7@%EHINui;2gjY$G)X7E&GVxi(T))%s<&o+EY9*!|K2$U|n#L zne=O$Wa6#}UjHvO6TaP049nc|&;--D%L_eOuTxzw)Js+MG;e)dVLIN!>@jwIQL8&l zZ!pi5-hg0n@E5=_P<`2DkoYPhn{IDRupsC{UEI)vp7BkaUj2!14#XO7wO#A2b?eOH zcDlE?tv8iavvzRKJJpb#!6tEn8;Cm7G+UM6;eHJcY^1{cf*)14ZS=;E)!M{N84)<& z-(kAUEq*Gn&#Z-8{bbtNZqMntX4aN-{7XJCzFz-@tT@+AUSO$3eEZ?wH`Bh%5tN;s>t%^Lp(#u6x3$m5NY5y>cnU2d@jTZ0t2Rl?B9 zc{SK1T3-%h_h|pF;TZhd+(6^8bJ;}B>X^u7J5uSy=)_>MBXR1f9la&Iz$MEEqV8YQ zrxch3nOr`b1ZM!OqJelWm2mK#N)N|I zEc9=IPd<^LUt%&b63;R|-%dUoM9!fDa#wanGNyJB!j2a)MJD5($NGI~COj_m1n6PuD zK4hfe1Q3m9lY_}2bjF~Q8Q0ZDQI5ZYm=@`Yv1AsV;kFKb5~aWg3~F`#z(i^^ zzao`B6QF2KrqX#Qj}Yu79A|7GmyhR@#v}0QI9vPA?^AIBF{uokGr(qYJ*C6pIg{Oy zok$?(F&$kxSOp1~sHFMS7&{E{(dA=k#$+Zt2oH>j>gp9HOO&I0RP74Dj zV~JSO)hZ-+Amx+FP} zOJ?`QMieB1D-+t&#Lk0e;D>+oNOVqgPWYNnhi85IvT!c?Oz7kVKMbvHj6V8}Z&;xk zyLPB1R2%NP1BicnXqmnK+$hk%?da{0bvv3_gcyo(f|}P;AdC)o4j%%K6iru!7mDVh z#v?v_@jnhR6m(BfyD;JfGZA>hn_u`aBT1YRnCu7*PA}jP-#kWyz{EoMSY{u=2VpLL z!k`vlBMB|=A$~#%RKnq0@MbDJSzs!k%n}6&=8-6z|4gAU8ZlM@Mq`i>Ug12G7hrevwH$Q|w38)Dn$nf#Q|6BO>L;N zDf;u!DXQ*9vL*a%4J^2~nYtSpoA9%~x*H*$@KcNnopV(iBL`H_i$>xo{C{lpNfYDN zqUJ_uDf|`Neny7r=X#W+%Z%Vu_#L+Wa|QZ!NM$6m!Z+D=^o-B~RdplW75+>Oy0TVz z8bP!0M#7?mK~lEU9YDs^D!cb zUUxZrw(rWXadr*}4cm_oNFpTm@9*sF?DDT&{fS-q&Q9Oz)1T!T&Dc=6` zcCB{sAK#rTon6V%WFp_0%lGeEL$B`9WG>e)!Ey2GTaC3Ymqbw4DpNe^xm?~|2369t z9T0%I@qz4KYZT%8EUEHzYuTGkj*rF@$-c3%9p@#+Ea&3*sO9(wMT^v8GHp3SsnKLQ zV>#y~50qEb8fP1*Pqu9gRo`lOFBtaq{I=!fo&NwT^?GqKqjzEuG1Z#XU-+e@9|hw}UZU>hiE`)cka&}u3R5RR^}r?ZX}zTBqZr+?u;bkgUPIQ_V$ZfHlKRx+BGe` zvDLAaEi1CzgU$wor+&`2N(`gqmX$0Oj0BCYz@q25t@NL_cb9w8XztIjHlcEo4c9c zDm{Uwo4O~J#!fTeHzsu=!b>N{#?e>F^u84O6|V94V3(@eDzFX8!_)wX045IL?!Lax z&e6{5H%l!|k;9~vr`_##LX;>>zb1}#8hXf!pJ!jgbh?(Fj~*tGF{$iYqwIQ>{( zap$BWmB%w!HL;R|5-Q*aJM;Py+nm8vZajk>!akgL?00gh zYd|KIL-grQ6k%kWL*V8cbi+1)t`HI92l&p7gMuh0|DJe`)EU89C_AhG)~gCFve}2C zDAnr0m4V&UwbC8zy-5(#imdN9L{k}5IrhhbW=269w+v<`25{PR$SS$J>2eAKq0ra2 zg=lRuqfgBoM{)H55`r>#I&;{tAcVJU|5g9#?yD#TmfEk#u3R#&ncFgC6)jV>4jACP zU7MthWngmO<`8qJoJlx+nvtuIx7#y#>s3kBSXhz=Q^Tpl1lqBLKAZuUho{Mh}5QvGEc%SFb*{>QTI@zN?AL_YY;&^qV$^0MI<2%_hV)sJ{sy< z4{s?OwVNrg*0Kx3!C7_|1~a*22v{EA)R z_L4#FWYWU3vz#pW3rUi~PX3y7d`zeWtTq*0-c~2Ta1uZ z)f&Fp!A?*0E6@-cI%u#^aAyRb0lBDPN_bQCFmMJI9>7QCk*(QBkPAsRzGj@Mx!k$h zrE3-I7oCC?W}5?H7*DW>amyfZdax_SqRNfxP-dJ*C{@F5-q8zDo44)v*oE8-;TXoj z)J)}5@lou&uwNP?Kvc2btJIQDbTO2TC$K#P!6RGgGRDItIL%QPwwu5#*^HcL`5>`~ zz22+i0rpjAOc(C`tDGfFc54VAR&GnoL!J8A*-JwL4LnrNQsNqwRi&|@kd%k)wxStx_zPq&k5+K>OSGi6 zP`+`i4BaUt4%XG&WPBWJ+eQccJ{%Kdvl-0$a`s;sGvR&=-~d^l4!Km*(d0?tG#E@C zIVf@<(Fl5hy}Aa-UXIk%K7U^>Jr40$*n^%NOO9c)%r<*{-i1Cd%__w4+G+@b#`pJG zz~Ul@b_UY|168H9y=ZJUlgVSD!WK~4WDStbXyM>IqjnHgs#*``E%-xZVwPTIRJT=h zLYr;k_(Wa_2bKleLT{_uP8ZjA_V8%M8I40?gRJDt5HTB2bz&k5QY!&Th67^*nQAg| zJ39eG=pfnJ$Zn?;Nr2{i^P{t9Q8ZoT#W}uQc0w*MeNhbo|D1x@sDdDS%_pR7iuLy2OUAR3m@S!k);?n|I3+YjJ0y7 zWzN*9DumyJ;4e(SiXwA8D*%U{CPuk4wKQ55mcxN`0$L@Lsr(3ZXsDRt%HB|9NKL@$ zE(1Mr9Q1-=X*SE~s_ACY+2ySydKKZ`RIwvuPNHf+fCZs$fs97{SFnimv2q(TW6_O4Y-g`t)%JMO3z;BKmmPqO7NusyKo& zcp3;Y6Z$BiDpYA_H(KeJZJ2`5Fa>LMCq;S4;4cq!Wd~3KK0GiE(l3X<7xtI}WT9VY z7)fjZ=6ZDofppzyawtER$#H)G;kaxngQJB5VA0RsCEQFoB?CL*VZ&7cx3EoWozv7yHXvRqZF z2-9XiM_CXhcT~RY8b)y2zz(VnD@B_!J>+}&fi3gDslOrjah)20{9;cFw%IT{evoaAmvDDE;U1@OQn+^N3l{l9N6Yi0al5b zUgy`ZAbk!sddl+UCPsx)s}_~uVRtA%P(~7a2nsz?8NwRMCm~ zFk+|`9&L4Ujbm$B5*4b$%^)f*<*qRE~SpK z(IH0{yH702AWgZ@!>I$WjtG@}y~{t+ z15*`hpg@(n9L~sEwBM+HBp||eUB3o>07^widX3S$Ahz?Ed}_Ny>^I`gD@Mev2&kTY@XSX7UCUJJAm_sEo)nP4G zJzApza7+ny2a{?*b!|n5v@32@AdbRDPRtP~s~WC46zu|e5)ew3PPKcwl*aV8dJqW{ zsW5Z;V8}06cc|ncgc41v7O%DV5Fa%uwd#t1r;Gm70R{2B;;FfN0<{}Z7F9J8n(oMT z_WA_uv^XW^0qxW58&cA*5PLU@0h9V@iBdg02QRZw!&Xq*IAq=DGZU`by)hTrP1;{= zai~K~adkOUsNUM(8YEE!q&q-IQyAOy9W_aMoC%S(CW^F%L?XAm`MY*}A~ynK35mUw zI1iq3inwGY4wyKguyrC<8Z?L4-~&06Bgnhu7Kfav+FY)d$C^YOCeI+ep|*Tl2Sp}Z znQ&b~piCcVOm|vNAE9pF)#LPI6;;R4MJf*g@!}F_=dhMgQA+el?4W$|vPPz8XB)sxqfqhiQR?MQLc?rQ>b{EMJAHx*%gHtn zrFm^Dg(qt6dZ7kmuwE3x8QUHcwKK*8!&U2gvh3JB+bAM%lLX z*88w#qakR8l_lZcnY0F^A{Alb`nXaaI7Sxkr>}h_)L0H* z+O*GIyr{WH(+#A5mDap_9I5eBN&2XAVmQSzLI3N-N4YK2#%npfIFrm#XEzmg`tqgZ zW?$9zWln1u$Ye&*?kUtF*DEWfkQ5R*)cEN5h_S3UZR|zPcaiiq*Z^HlClxYqY6SsG zd8>0uSIlMFB^Aj}k|G6fsKojw?ekW_A}KTXv=OFbU_?h`IwAfw!TUmJ!EKDHTOe(6 z%JiWBh61DCbrkS%z}_Ix2I*d!P?f@~vrGp0=AdWdqtL!pOZRjK)!mC|Lo}dF0W3V5 z9vY{$LhAZLHVXeO+~1O=s%%b}q{G?F#5iuuv4-7v)XLXX({!t`7K2@&^8=DYidvNWQaZYE$8>0DgKw#lu+GB~bs9kw;t+<^Xcc@@@m1s8>|X`uZAw-spt z25r@EjQr)Yz(w?Ag0~5|XZdEZ%RrhXKuBp^sd`rQoIoLLC6_?Ci_%?aSOK_sg~yYF zxr{Rc;Ty$^E~CY()jcd+K=q!uaL^`UMH4K1YH9IA0?QS|ooS+~ypiis_ytCAiDI-R zPFb#}JqrTnaP&!iHYq2-WQyR*7N7mk0Hy9z%o7l-3Vj4IS03l%!Yw(J;DO6jCXy7| zu3l9Yh8FqAEslFk(!NZL3v#c6mKZSz-+EDkK@B@gezU}#G)sI)g4nNx2Bf*q6~(C9 zy6eg*A9|^UhP*p*WEsI_PJ5vR$;pJf#-IjDAr7PRKJ5umY-L8z0RaC2C_$?kS{=aV z5~T?f;Y>}n1JGct%*+WKREgQ*7kY>3J#DD49E9rI0hEzEXyr?GHZtuiy7(yehS7GZ zXi<9d=!LGdAw-XBT_tdklefWaW?Yz7Qz2!ZjwjOjtX%m)HqiD0ZPfCXNU?B=)q(n#j6M9%9`?OXM_uQ=)2EdzpFG#-P*orxmqE(&jS7Ho&JE4FI%Gn zvNbBEU_lH8i?UmI&t(pV(Lyt}w5AUyM(9{A9aE5i%F-3@Rn)Dm z%A(>Eq?vv@O9^*^Iih)a0r4k&5TNyYOC1py=3!Mj!X-aSs!2iqtW1~;$n0rqLKdHC z6DP9MbtzjBw;|CFhM+bJtRTK{vjIxayT+4-)y6EI47=p!sbUScO2`HjFs3VX64l`b zWq=^JWT|`f%ItC1pobh%DB(GUPpSe~#X?1(V0_0=+@Q$KTQ4V+P2@H{I+3HA2zHI- zUgBo(d(co|v4ypwN*as`jP~dtPkzCNTIGT+54J2qm89U3*3XbDW06EHES|a!GUj>~ztw$6qZIQEBFs z(uN?@Ld%OwcE0_7(NS(CCZ_LZfGQ$OpAIdcW^4cXeWHM%1-$`bm7Ujx+e{ajkLK~7 zdv^__nqcNbt1TQcbEC#c%#qIU|J!Tf)$Fb$r`l_`$PMcxYmG2;XOEJP9#S?Oz*K^w zCzwiF519@ngXG^qrP8?PA(u>6^Nt3n(Z)~JKupgBFs^ayDwD>fchO;9~xW<$_TpsK_Mikqo3wSN%^(s+pMy@W-I z>qGo3(%^B@WS_DYqqe0&b5RLgZon;<;1t0+b=|7$enhy^Wd@Y7>dKBm?`bUQ8+~hV zHi_#{a76=7z<8}Z7Jt50saLmpt>zH<7T40u^a6{HykQ$hLkeIDH&>p~njMp4Vzb7V zbzt32Xw~yW3et)EoRh=ZD5|S9C{}@fDF;@~v6k9%;;tcFoI=sjfQzv11KZ!nmxk+UNcg`yV=_&!lzQCkZY7}N#25*8RuY`;!Wk*{m zNwdn*y0*nF^k8zR#c}qdID%hebV_b{Sx}4(gu0>`K6MBhi9+QGoE8XzXHA3aiB^U~ zRuH|z8i1*`s*6jnGvPYRSqxk$`HTD(ws%nb2PUGi8jUq#-;~o)rJ`{dQh^H6rVBpic<+_XJW3#C z2b_J$Y-&huP^>i9!*3_1`eOr>V^s5u5@=~eujY1qzrOKV%qZnxaG^}`H*-$`$}a~) z6yI*M5wd*PxlLxWa#=tbnY!mTB8zPaa|)X{oHS=atw3f+lj^Qih?2kJ)Wcl~0CMRH zZ$t93_q(OieU_;66zTMo2l&%pb11-xJ1gWmL|QPX?SqN2a;15EV>*4L|3ASP3op)c zaRE=t{3!hp!>O)4<8bD(iCo7RuAy^AC-x>|iSco@4K$at7Lp&l-rFZ%g~J74BT&)f zICLy?UUB!YZoKN-X`~^mvuN^$Bj4RyJUQXLfw@d#FQiO{n3;b&r8?Cq%LR%fKCpZdxf zfxDpfr#7^(wdV}reowWEfNLQ4snd)Zx}yvXB6a9{Wy`+6qO3jD>9gVmOlE;$TFE_i zqnTk5O~qZc1@M6*?gE?I{bD`XZ}NZ)v{IUTJp2}LIiwjTPFz>)fk|Fb@j@VI!3dan zfI<+oaH$|X33f&9K+Z{PJ@hh`W+miQpr+_)CG2{I)#$JZ99;C(96>h8|@=tFWJR2c}B+83D7RC0XPYn4DA_9)mG zD_Bzs5{kqZJ6fPw^yS=z>h>fjUX`;IVg;}aMhk0BJS~i(YJn6tRz8sOw7}FIO`Zwh zjBJ81|EdD|L6iB)q;xshz*Fzjn6fJEImC5cn_<2UmW~y|oi5!#ejrZOz(g{t8s+6f z)-aj$=B^RXvYg~sAv@cOX}HaSwOWxuRCTY)0QIOtoI{)jZHC~+Zr0GSJXeeH2D8vq zrPgxv=wG)DqlDOfy0ApT#LEFE#UpCx_XU*US&>_0*z~$A&X}Z zI71Xq1zG+okp9zF<_H{xyhJKF`&5MiMOS;eF4Ki0a}2}HAJ6s2N6TjP3tPZwM35tC zZUn*r%B@)Ba>$0OD$~!^9Mq@>+CNa36-9y<>NsAMB9--GEf?*GDu`>uQ8<|6L6My4BW$C(#>0QV zooCD0myZvOCJhJSWgx5q66$IT2W{Fk<}!f8#;$V__)ZAF?rA>+eIi?<>Jmzd@MBzljxQ^R+`!{i%vN^Vmw2RqpD@isE{)!!d9u%4vNCj7+7s@2f^B z2rL^I_F31F!nI&*(zzy?&0tv@jYBMvYB+$AG}wrs|0q{Ux(dfD*yks6xy;aEHk78@ zckFhQp@0IQIcmLJKt1fl^>90OZ2|=$C)JlE2WSUS&Z#j&{Rf_GZ!WLRH@e78mRF{+ok!o?JfD^R& zL_pCmvNe4&f>kz#Z@KMD=S4*L<;JtT%EQ19Rx@WPmBj>t$Uo0(eHXt7%570xzay>o zG&P=^u9^lmkQvxWiRUxfQ(e~zG(^y|!IIL7BZ;u5TTLDRNVZ#PNui~X_7r?b`6jN< zKHPiMkdvpNOw0tV6o>F>9+uIaL8wgxYE^3fm5GwDxiK`!kzU)>Z5=`@a4|uz7GXPH z?9;~`{AxEyEzAA8oxaXq*VAA}vV?e~STPJemQvl}1A$VVT^_zr1bKfNEW-Z0nsTpT zV9P7ZjH|C9M-7%?$zm6->fwKz5B zq73cs^`pObj^v4j|W@E103eF8|1GoVd6YPJ0ok1kYcw6?_9%1b;`i zCbET7TjFxqafOHUvLN>D+bvTzKa#2-^=dXF?jq~k5HF|dIApo=aVWJGZIP>Vj%r}3 z!kR%cl;e<6f@Cgt!D~!E9GX~JO?%%;3s@Of1))+|T1B=Wfl}3~QI!J(->fRQ;o`7% zqdoyl|I~nv{mP+Cb~2tF^oUC6QCiN{$w8O4GK{CddUWIv`B=Y?cs|Ufx^HvWD_U5q zH2J0+U9QE~`MD1Y1kuTIT+-R)=fw3Vunq+5NGqA$00*O@D|``8ly)16uv}$$2Eqe& zH{7R6XB`olf8Ar1Mvh`PO|!5CA(Q+dlMu!a$xAm)TXBZxJkz=k7G{f8Qtk*HH8o8LZ3A5$L%14(&X)%D#94D17kVq3 ztI2FXxEFl`U~7A@4$hgo{#1@lp{VZuw7;mrniikumUm>OccPWbd>^m^C8koEA3|dY zn7vpfR(b?zS%eozgq|#{^kv2zqMKYUSVmRYe7@T_)%io^P?aK1c1jm)lpb)Q#USbB zWb>K>p6LpszQQ9nS>dWAcavh2|Hxj5B_Jc{<>heI`!>7?+qu>U5K zIEqQamZwk|-~?0=^hzurMNRjS)JN(h*{ou~pFz7c5;Tw+Ou=#vk9c7VB!G1N2(i>2 zsZ5dy)V7dJ6{bw3eG4r0ca?tMq~Gt?@8IjXIm+iAozT3W(%+xcZ+oGN7t-$&^!r5p zUaQ~h^!pMeEo%;JO{eExY{c-(m-cRfA zXY|`XLAOW0PtflZ^?R9qFW2u!_4_gXelhU2Pt^J8cTeDbq5j^f-{XPz!}{C2pV!~! zJ>w*m|4jXE4!qm+w|V#J@2&cMVc_lP@2m9tCjGuyzu&6gs?_QHhArD#6Dm#-wnEnK zlKx>UU(&zEx~rsr#Coixf30;_ZK-nWtdnP!@{d~kOZv~SqV=WX&$MoxRm#8K+HhgS;!^ROtb0x_@@^q+6tQ_}x9>%o%#&DJxqQu!ZmSu0EVFR)rl`fHRCXhPW1Q@zMvPu(Ja zJ>`o0OHYNc)e?xQKEqaV=i3OXv3~YaFag0SWHnef1jfBV`#%=&XU>e@*i@KPFFtK+ zfwi);MFLnJ|F+_>ON`eT{F%>=Kt2Z~e(|{91^-g@|A53_V08w{{kYCQt5=tPeDm)I zcv$X3+JBz-TGnsyK2-i)Q{=x%uTCca2pZ1(->m&j{!{gTD*|k*$=Xr^{!7)TOFFiA ze)UN{#c;k|;?FIbFOK#P&abTGQ#>zjh5yNDmst&By5Hsl4+e%%LYBdw@y%-0qvL;G z`3r6~pZS>8>U^EgP1@hAHfDzW6#k9Y@kR6W#VPWiS)=kdtGsE;9oj#n zr>dFZ{{?>&M^{B&H4*wZScaO}C;e+#ZF4QF1@#Hylevh`b{Xo$UkpkOQ2xu7s!qE-=h;X>-w*oA|Gc8|JTBQcIbF3 z8o-m+O%eZ2__H4j^dLh1eegGNbQj3$KjFU^bbqdIUV9BkKCJrQ58 z{TGP8KL_RB1(e-n6|Z-vPZ57R{7b>-JK@jzGzRK(-xT>gq4P1+>Kckl>W2^M_(8ax0Xm};yp6-ZR6aNB_=Y+*<-VZ(4V9eK^;`}(XFnVI;Z*H^0|u^C z{!hW5^$CvedMrrvH`KZ*_aXR~%IEt!zM=X}{QbwMd<->d;OC#=Un-v$b$qkCF!@}G zg^=|zRI^#3ABTUbe4@?tFQ&)7Ge!KL!JqRbNLTzpmuq$prmVX_&l$JwVtG9ef7a7b z=SVJpnMUPrb_=E-eyIJ;?&8mM{5Q>J{tede=PQo}jR)?AKl2a5!%N!V?9xux`7A~y zXM-Lv?P}EdtbsrC3HI~d+TZN5NKf#u2kW%N*B#%jysanTUus@|P5gBv->Vhy$#o%! zhdbfV{LQXxtxmHC^=(A`*XVWMWc5`Y-|S{gKgWPym`|{u->?0Ha5w|~%lKxuW!A5K z+CK=-#~i2P2l2yg+TZM&m*|TA4gA?ZGXanMGy9>3#9#UOf4>ZWw%3f83H$aG@&Bmv zze88t;DH8|$94th@9i=#Os?Mh->2}e!%&ri^LF?%{~-Nv%M|hN*71XMLOtlS7Oxtv zYbpGhe-Pj1;a{pgw@u;y0iBQ8B^x+79f*bb2iNPnwSN)(%X-vceO9ku>-0S8*Z!sv zAgko>GWaw9AUxzHzS~UK@pkxQ3K#v|5C4`TU(0%I3jcqaBLBIlFX1pq7ySp~FSfk> zng&y=5%gB6eqIfKw##q}PBC>$Wb?WF#L!SIVL|LZIShfBWY&RtR|2MJXq?&^%s9iN znE^1{1|eV#j_bsJ*o=onRuadbvEH7wYf47~Co`RL;@NEc0Q79~&bM*;KbM% zt@HZ6HdlF`$bOQIok7_Ejuk|%Vpa)ZtLHSFxJm)2!wC^9-^P_R_21OTX*&C zc6M*vbiT5!;$tx%#S_!Pq!x)!Ld??WlZ@n{KeJ)O+2{9f+U#`2x?*Dazgl7&G*Dtp z5**r=cV&(MI>G#fa`|A14mljwKV(}Ci~Yz*wZ0PJo1{qOE4z&)+EW#&E1K1DFP;*) zj7msa_HE`kDzS~CmYXAUi6c_W6*ZA2#o!QQU!WqqY=M`!IlNjcaI9K%_HsC|C&y0g z4~jU&Rqw;nH1vWuY}kD1r5iW(JDssrIuv+3KAO5F8K|tJG|0no&7l=!ki)eR!DPNG z;)ifq?PwsJM|o8OL-(2q8Rk7|^ zSEse*k{IrJi8;>j{{0R#rgA((OXUwZ`{eFFGYeFyGQLCEWO9nJ{{*MKWx3x6pFD}C|8ggIRgnsb0|~Kl}#D4-BDsmLkzTi zSAH}{so8)?DX1~18z{lk3~rD~#>e^-P)tGgP&g}?*)O+HR01yvuvQIKd&_j^s_aBM zpTf2R25B?dBCIFCRh{+3*X;$OI|e2XwUitV4&~bJc95892rdPxQz|;yO(RQy{b4DD zmC~8X!*Vu+p7ugwGUZ#4x-DK!luQTksIz<9X0w&68URzfa5OoTm+g#;nhHpb>EnfB ztWYIN>JZlT3Iv0X1_kBLgeoC{)mQ>v>19-g{_0VH+jq50)JiRluJCe^oK?a7Us#}E ze`>;zBZ`6j+Q=tKc+ z!CeDbfKcNnzfIW|s8-8)HGyka^AL<65>q~*U`l|}UQB;^*XK=b_2sCbFFgw?N-P|O zGF+i?n!Hokqe|1q6%sBa%BqWPyoptiskx$I0y{eRqO}2#q@Lul(2Td;z9pzk}Bp52xKx(fOgYzp#a8_sE6X1T$G*! zJKfot%uS4utGIbH7*xW65=BaqYz3po;;XgZmQBkZ&X9Rp0ae?f_<*GVQ5t&MprdY{ zjP%iVl#5Du?x#>mF)|arfr=`43KtEhf;+ST(=PxDxDtvgenfISjU&*O1X-M4=7KD1 z$vJ>v0@+K47obhz=AuZ4T918Qcchde3hcfqn{QSucVG;5Me)vO)qBLaaCb;DJ8s3& znS3$^X8sDQq^Ymr^h9i6A~ia=A~k5m_%#xTDcIQHfi&_{Zx{iS5SpCk1tgE*t~lSyyn8ZL%EqnPwYPr$t2q|+mc`~~~(HSm4OSAU~VVBR}*I#YjB zj(P7z_#b`gjoyKI-=Wj9{;Z0rzxKASfrEW&@-zAg=6!>%uqof9H|@V!r{APAG6s>&{w?rh5v(8ojJ|_;Lma8#FF5{xico)gqZeV`-wSj&#N*`8yx$Q>zd;Ml zn765~PUhC%_`fTV-pEOs_X9>iNM~TmHTk_akiMoxg_t+QJ`4VW?f(!$*+esbjV&s= zdDjHmA54FLAidG=Fz?%5CjFy<^!J>s$~W&1nt@f`ZvW{|>+^y1Mqk9d|G`Am?_m9( zhd;a6Ofw_*e#2=hfq_$<+%4aX-;WSLRT`7t=%3uB)0=oxrT=dPu!~H3qo;Du6y*oU zpNY-fWEn=E??N6GR>K#na{tfyu=GI@S_}zi|AB?+oiuBh|;RJtwJ4@wb zeuL?E>h!_>Yi&|7ultHgsoo~Nd0(m17sj%z_k3T)xawv4kFf$#B&+BPDt)w3<$MZW v>+l%(G4qo6&A^U|seT)Oq0)a^>uH!U-YP<2&`@&I>Xvw3C13r5Wjec{Zjrd1G6*Y&v;dlgW8g3uZT&-L`d;)-BU!PD^Vp<)(ddukJrY za-tbi6@phnnlj=qMa^s0KDOh3GOw$Cp~Pwet#af;%aQ+Hj{M_t z`M;|iJ1>_buYd}@lAT7V;48`5pRXhzU5-4j9QhOF$cxG;*ZOk!%gXWdrgG%$byxEL z_Hyj6DM!A&9Qobl*gsbe|NV007t66TuN?m2a>_fm96Pz?@N0q}#8&p#shoVzgLtL- zJW~!op`8B4c_COfQ=~hTBmc1+`(wesl0VbIuca!hY%@+QZP|NjUcQ!R zO_)79YkKaCnbW3@nVgqDCu>%^Cb!AT%9%a8S+i!%p^=vZXJ+J0ozOdHP=2#!ITOds z$jYBFCNF;`GLT$)c5l{mK;N8!eFwFG!z0H{9)L_?VNBMT$&;t$jLFZ<%AK8)J3T*d z+EmGau0iLDt{M5@-pH)QjDo58c~hW1W5%=@|98HbqSBlEi8H3%tgVzWZR%-I{^Xg= zw@e{>4x}%-DyE?>a>q>RoijMA=b%O`kS-vYL^bGYi~&Ix}s0zRH`HlRsJI zOrAC~SB=SGhpB9ZccBytI{m%9q zvHWzZ%#glA^)vQCSC#VeDsaU($nXoQ=0&lDqYd9)Z`$j`>;!6I-Dl<{TmDroEgxP+ z9yENPnXhcVoj%wlD2iMQ+86~VBIJp}(7U1tdF=@K=?Hnf2>F=^dHo1^afCcILVi9% z-Y`NQF#fadgAsCj-sT#g>p%Nv&)bwYwuK1od7E;s3GLsG&OwQKv1cCkZ+CP3!B3BnM;@o!M#xQ97Ojj3 zInNF3UuJ~7vMoe7AVPjsgnW2}+&;z=&W?~*iQrF+kXMb6PmhpSi;&NbklW{`gcn4} zt4HvcM#yVK$X7+kYevY|MaXMK$TvmE>qN-6M#xhlm+H>LKCWg4VoXn@PRW@|_|=`kG>2G8k)$Uv z&7oCtP|{Do+lsFb8jx+>EgA|*jd$1}~LQ4)}JG}9asB}&o`rsJ4C z{|^Lp|7?OZhd{|0N&mz&yM9TLq`zgFUB2X?r2ow{yL!nENq@vNyLibaNx#iBr{t1V zl75Y8cJ-14l0M8dyLicTN$+8rUArV(($6u?E?qJ}(oZqXu3VBK>CH^D3zwuz`T?fd zbxVShUc)rIY)L@U%b2dgw3754OtXuYoWIEO&t*Eu^chLdV47XEq)5_}kRHDZY56t# zzIWkUH)Iz6J9FXL^8*I=TjBl|WzSquVWtF~z6R@3Vt?rT5?8YakxsWGF(h+^dk(_P zb{8@Wzsj$Iu34K&bj=E*FP#~m7FTnT*dKj_y)vAJepeD#v}!MA8vFzO%tQY;GYijW z9xCpVX&uXa>!1827%XY54aU%5dG;1`ibDIVf~J`ZJKYThcm{uBGM9IH4XNS^sFC7K z?2fs=Kzo)?-OJieGM#UXTj zG24*(d$`+A*#Y+D;-i0Gx>UG$IM9XrxL0#3qo^;UUlsR8wI4tRmx>P{mbqdrtt}UB z*WDawnT2od;eZr#g~yBA0xw)VN^Ehj=G1|$xwLf=*=SYp*gv%4@nsF~uQgby!sEMP zRTWPJdbz#Mw6`tN9{Y#3S6S>WUVsetuq*DTolIoe1pM*G1&CH?qkZ+!M#~fTGbmiV z6#UG>wX5jY2@J{Nm4AU=xcCmrSFE5p?YtPxEIb8^w}5iFb2~6Vivy9)wFo&kCnVk< zgj=vN43f)j%%zQ!FdwS0AHdTEY=xLq&dZ!B&?cM2^$-63IrHhl3x%&0uFZy^aPhd1 z%Y}@x-32zmwEWm1yA9z%$#GH%lE!Y13IJihrX?96)il|r9sgic96nDneY5N zv#=;L>Ud`1pQIPwEA-6ci>E_t7d<$>cs8Plp*k0fGt1X*g#@+AX%MxV%3%589TYBK zyIW(NGJ&<#*g=h*&={vzVC?iFS*m;dz(Aad1&DIzv zVEEz_Vb2Abg+rDiCr;ClCTZy^NY|nJ{*8(*j+NG6MXs1_q1IXa%oS3?-i1Xkv-mQw zG7FCtcl)z!qgI5OlQi@DAD1qb+<{}(!hJG63W&T$WE+%9cr;rsbh;f38NtV-aO4(_@L2TdcA@RvXjxcWaEvQ)*NDd?{|x zTX3nQdZ@<4qwSarv`16m(ecHDSv>qQR}^g0^`x7A0A#3%bs&`<&W(ywSQK3oPm5-! zn>oRJAF?Mku?mpgCz4PVIpnOD+G3vMoSSZUjfs#fU(CHY**E0miQjA>GpDGGk8rO_ zS@+@!Td=RM=v1BAjV$HTIcwFzeNx`IMK2|o~do?9~)9`x}b7Q|}Rq}wtbV0uNXX;@^U5uZv4s^a&4#gPxq zWe)K?Iv0QO3wp|7Di#K~XLrQV{sb7*Izzko2B;mt@KeQSLC!2ZlDVSi0cJ4-E@rM6 zascUr$STOJAl?tYh|mKIKQF!%N**u%k_L?SFv^#^ch?C*>oD|(1{wRj_%i^#3y*3O z$BVZ^=bTduB-RGYe1Czm?Em1%+Z%w_XvU zx<9063y%)CzU!#bQtPbqB-D8^JR2AT-ZJez{&>$F4i)!O&wEjvOFwZr((}0k zXdzYn$j@lcp1a`Dy5;csnjL%Ca(Y$r6_{+@dk-$cw7#A46`hviET#AsXz3=l5YtV( zopm*Xj;$E7-83;zX(;}fEVjCC;$&eldAwL@NVM}AU+#XdRuEcj;+ZuV`@Hxs01-`m z5{}tTEQ%ed2;LC@{R+>}?rDfFYqdJ$Ej*eXYPE>5QdqF1Otmc^vIX^mE?)RP4E}zl z+PDYn-r^}hbZz|nBmD?<_;JiG+~EsArfYA2A5j~z!qTjzm!ikCXtx$kplA(5#}}W3HR)E%7t=61+FHu696rN9*1-3l z=K-$>>4p2aza$Hq0vIcfft8Y#77rXm_VA+Nex5Ygi~Fac3;%}coWHM$oRgrV>4l3= zLkSD^PY_thThe=w!zDS{V3myo8wP4<1JBUF2V(Pu^H9=u%*qTE1cg6-pttV=T)2<> zO9g{aGhf58;v1kCseyAyWZLQjU{E{*#Y}rt;T&y6r+28-AfyCNKX_BJ5o*gNhs<@y z7P;vM%{&J-l%nWjOHpF>a*QtPD=f{pEVo?d_6o$2F7nJDwr|ibcDhU{ok~kWN-+E+ zvM%`>rz3L4xbV9`;rzb~3ob02|F>1p{Py`cuH$^P0UW)Fj{3pQT#?w3!x`B?gpOTV z2KVve&ak^mAG-Ea?Eo5D6>mYE>e&qwYXDQ*1&qZD#{t1r#Mo-=0?=F~J{U&k@eDXi z&JfYaEF6FXRVa>gYUm!%2$HjEw9$>ofp$9*v+b6_=KddI;o|`(dl>y3ik#IX`938R zC^6_Z6!%RD2kjOxwcx-^Bd#}NOF8k7p#Z{E@8Y7GdLI;?TRk0lUT1XGgfPOc~MLE z1mR=-A?h%Eyx93YE}-1-9hzq0(NrA#uTXA1GSZj<&bgQOJTIr;a^QWlxR`nAp~ewq zmn+nxq~>~_XI6h2r^A)_8zo2@{W5iSL7Oh^5tSDnM6bhA4!G7VJu(dZ$G6hoWTbqL zc&V}Q2|>LWvvlDv8w(MhuS3_h3%T$+WR9tWaN&?*G!V9HOxHL?zeYy-ZTfEME>@-& z>zrWncyYHfx@CH6xP8hvp=)?3N>!$pnd@?0hjks=yYPdqL%QNxWZhnga;dRNe}sd& z7GCUK_*=gQU!l!>nTIYqi@zyG?mDXL=&m<(%{sCwd_D5#BWPLL0|Qaqi*jJEl)e+3+91e#ySd{c?#G5@ zdAumN@81gA|6>RZIA4bsxmR4|mXbCT>M<-CX~AI6 zspEpvXH1(gW6YE^AqIo}2nO{X__9@du|)#Jc{*4R1u zx%4I{H*Z$1SmizNu;QTH8MAU{z>U28XoVZ%rU0m5|%mz7+)4#;1Hyv{_ab~9;U@?` zLijhre-I|49s*diEkL*c;R%HNafQmCHFu!0W(TZlF<##)%Nw9P8QU4ONh1=>@5+3I zCv7!<`q@jD(owf6Hqa|JsZX5$X5RwUrD}(UEmCUJ1oeAhn+?0NSfda><~0i2+;1*j zI!NET#s-!+x>xWxU-7~v!RJBzE!wy)!VsQKRO@d*cpi9%NPJcp-wSyRE<{v|#D|7) zimkZ=`bkZAA6%OdRMm8S=<>0Q5B%rSrCI2cuKH*g+sCW#axQc^Cs{B>PCsnLSh&$& zS84>W=R&7rhR%{hi zgFG4AZeWd3H|3T6H1O1NaQYeqo&uc5OxL5XaM@X=0pU6fqV0#4V~2iZ03Y~Y@ND4y zf#-r7s$Yk0Wa=*felKv`+X&;=g!A77dK_EY5jd_+g!Oxc_0Iq={4e(L zXpOq%zu=sQrUGvlX+J+~KLhwu;N`VLHgL{kSMrbT!1-@F@U@7$>Vs^zGuvT#IG?S6 zcy+9Gq#rkh@e{y*DJLJ+Q!(%}z*|P@PYdh&&;_VpUO7^Mb1c?~)E}YsS&r$j{~zES zD=t118Ci~Q;e4jUPCUkJ%}6^V!}u!T6@klYz_yVW#&-Y@0*{T&J{&s`S9dV-5RcE(P6U19v;R#U`zE_KXd#aCM7Ky~~{$o4&-88QXTD z_nO#@8L@4<#-?|TP3;yN1P}afu|9bgEg8p}9k7Ge4E=D~rEUY*Z|BA>-hLe)bExMn zccDWaw%mB-;%CbZ$vX}ZKnzrKcTPS#Zdz<|Eu2usc)mP8mPW9LE3TX)2Uo}lFGGI)SyOBzPFaz8Fe*de1|JA_% zYT$o0@V^@PUk&`P2L4wA|G%pN`#lExy#@O{h5yrn;`CR3WkbHZ!JjSXyB7S#=s@{+ z^AkTj@F2f&^>tXqr0w@D}w{!{&Q&>)9Xxr_9`~XT-U); zTz)4E&TDP_<>9=GKRI7P$m<6DMZR;vw4teWor6p&V@9PLz`hP-vQzdm?x#(`ZTWPQ zk?prUi4A+W+bTahe>qQt#OC4Bmy{3nDk9t*lJpr<5M1b&wCyKOaU^|*!EuRB(l~wl z|Kw-CUtQLCYtw+eOgPkp<4rirgiB0#p9vo~;fp3bX2SPP__YatGoi=4%uv~c^-S2> zguP5S)P&WJc7VwKTo1(F)eqkq#z3%B1Z9J-bZ$-ZJSOCd~_L{6*K% zp{-x9OuCy%=W3eTYSMOn?=fk)00z!aCT$P+i)Hw6DcX>&U)!YR0v4cACT;sO+oWxK zi%gmqr1-09Dn>3mAw9sPZT={emJ3V3SDCbJ{~43ECxq8bniq=rt6WcqazO^sRwgYM zfRG+%(sIEC=^16x3(DwkGHKhtr_1p7n6#-j^;sFd_9na!py#+G>9a055#R4ts*Ojf zD|I}F<+}|Whr`>|fxzY64o!#8`xFDqb2~8S4UE@q!o9=&6eWCU-cg?w=yJL7nx%5$ z0*G=n=s=FoeFlNE63yOq8>2svzCxni;EUs4iS{D-K1SU>k8clCmS-unyo@{9eVnJe zVedBu=iGj zAld~Jr#-(u4sCxM2t2=$q5P;Q<@rl;@n2;8Z^i@uKVZ;vk?|ydB1oQp7!Ueuz<@^{ zAy19@oN;9lNROF~y~mP7+nCPG!6Au^7=9|jNZ|JOpIDETY@D6(XSGt z?wTgSibWEvTra`h&q}cRv;_D5EWv$ISmh)}txu8Qfi4m}c#{MVt(M@?=OlP+zXXpL zN$|wC5^Rma5hgL}$y5oR?kvGG<0Lr0U0nL&=Wtq^{!*Jh zt8IRzZGNLODyHcw#+S8iqP{xLjN@I()AC!G&-Q zf@(g0hxTY@*1o?g9QAi(o2ld(xl@$C6XSSox&s*g&UL`47Vvjp0V`}K&F{f^%kXyLP)PPzdxgfe=XxaPLv-*=DZs_|A2*%MK?x{ff(QCR67o9G0__U zD*qkuImZ74qR3_wfC|l+XSD?tIxYj`L@oR8f^LNjM$tQIApubt0&&X8zE`2ww~%6P ze+-Q3A2E-*&SoHad^|cxukDLS)zA*ebr94Hz5xyY00--ZFCJEvw+}tOsfgFAJ(k7J zO@uvm*s7ddRqX-_CsKjk*9hlQcq2V$XV${tKGt$GC+8UU?Qrf@k3pn&bpfb4Y;yl~ zPBt35zl=lKso)kGx!J*qmqWsszJby~PPQ6HNLA)6I~Du^QUCo;I>=EY3X+!!rogs; zvy-`J5t1ECrE!lh7gC4I%|`{jj0cY+=6^tpanP03NGV}v9h@AARawrmC9CVFqp!*| znG((Taf<`BDvzhCb~Mcwu!1>kwW~Z9s@my9cCc6+$zep-N^Rb`@bBsdm?OL_9DIjx z1#z20UvL#%47&d@DLx;`tjapADlygwy2NBS5gddL<=-f}9KV{y%24%o)9eff$Fpgj z1`zvuJK60yy!AK@@}(L7FeisEM|;E&uFZ`6)5+%qpdG7yn!V=)g`5t`mZmnpALW0e z1{#mk#AR@GR@E)B(B||JhE?rdw0mnZklv+{#Mt^WA;-30mrIOo$&OTK%-EUA-&0DS zPd>X4z}7b)kr>-X=I+?GGIz(eles&#z0BRQ9cA{6?JRS5Y=+F;vE60vj_o0HcWh6Y zyJN4GxjQyf=I+=&GIz)JmAN~%pUmB{*T~!*+h6AH*a0$k$6m*|yMAvJ$m?R?shrdg zXQQe4D7%%q2HrbT&tvaQJqw8|^$*0|sr5kjq>e#@MmONI|D0qR-mgPvUkKuoxq^r; zL^KfCJ`WcCt)UaxN#n|2O!;#ZJM^*lE<|PGsi2~#-w1ORTkfP1zkpP+wbYmYAt+Up z<(UgziW-f`ac09}e9{2yoqOO>e3h|`7Qx;4s`-pIK?5h;d>q{9Aku+^cN$^g+&GZ% zehq|8jzB5lgLFnKLMh>N2BRsAemDS8a9&ucm(CzLuluPHuvVq-hzrSsZ~RY_}}n3v8kVcE&u^U~jiMLYS)y!59@ zPSoVR^V0W{Y?24(rLSeOvPO^2OaB-JwyvUc&ef}KOHZMxq*1ZFar6K$Hp_{H5>3&bmQoRWvXCP(pJfhzW*L_)XPV^0|@u(O1s|??>xmK&GKETOm53X1O7l-4*Qr$rhW6q1dW+38$ z7K>pedii5OQyW#s-n|y$=yepR1ftO^591;Ud{B2`b9^=!juN#F48(p+b5I_uh9jd5 zI)1(yQ5Dm=5_Ct!b_8>**R>nM=#8%e==pOk6h-w4L_cyC$@KTP0@+*wv+0g)h(1cG ziplPR`0(~r_fV2k=}ic7&m(Hx=3a9z5)bwz(>)O0L~kI+H;x$uqFyS3WWX=bjd^M^ zqQipdcb11AKa08c5eP=6&~8j`#;NKD`FFM1MX{#yaz)g6+jw6(M%{@ z2hHP4(Rw^9<`vb5OcR!$0{VJhF4hM?CY45;&7ThR?F9$$6cJkccA$5XpbgKFX39$ociX5qX+7Hq@&;Sjby`_VzWzz2vAt%SRLxaD+JHF)w4 zu=`tQy?8Vg%o&%nRa{PYxUD=UHl!y=t@?r$z?EL> zFt9g5xHzlv!`6ho!2b>G_foj_R;F6be9Jn2KbSF??rUKS7dxVQH1i9~kJ-X%4c35i zn2|32Y(0p6Y4Id?ZipW0QIX7x*0nRiyc?{COEV+<^g8~9!-=&EgnxxdXVE&+!Hl`F ztkxxtMol6946G8HsShH~uNwnj>DW07rw3?R%YinkfGu2Vr8zG+Mqoe)rylTTA&&GW z%{k~e+|Y3P03QE}~{=i3~m;kM52qLq?vz5>uagk>(Q$8WJk zXEzoh31!5Jb55r$l`%&kqR}8!b&{H8e?zLMnwyw8UE`rwwAbyjO93Vnn zK?x~(zw_!BKspP;52Z-Tc^400A2>hDHhK7PauSP87e8+HD&&!5y)ql>bs$b76v{)z zjl_f#{i|~u4%k+AU_3E0Rr4?pO&6WLmg$Ms8ViUY7cv$5(?q~At{pGq;tK2ic0hO8 zu%11f!l~~1c?BLmCg(BWJID!pP;X4Wif-;&{f04f0`NPf%?RacSIRMCSQVSjNhTA`x!ZLP2M`$yEr53par9siJL_EQ(Xhf927GLYqX)wm z8<5v4u1BvkoLhh|32}5@!a3>cakt?-418B9PQ;Yt6!vM?@K%QX2AFalA@vlRXOt#> z<$4e^ytwxph!zebx|q5MV(d3pU#wk(Qx$l_5GSH*6|6-$I=Gi+!A2Jl`h-ZjoL=M- z-N$X&Wyk?OHN?^76wXcV>o=Rs?gYM}6eqHr!oJ=8ES4tX+6!R58e&J3Q;4hG&*DHW z#Lqw~DMeIH;cRyAOEw$_4l?oB!ktSWuHznLIiox)CZL@4LFgDF$y^q$5vMSRcs>I` zvK@j*Zip>JU2Gvv_SDHW#9KjHcR4Y#?4q*Jv$&>F*$Miw(kc-ZAnf}*XX_dE=V1PD zIa_I$pY_zk5EGYu6>!N9TSP6CE#N^<$7jt<+#1YYA@(YcQQh{>;J6?Cx92;|U}824 zB!0A^j9KLrVx0GlH;l!lAl(xp(xTzi_V#|sp8tXGEyb}kvE^&XwZFHET}SVM^lgYJ z<%nnmVUP1}yUF3BL7K!+}mz(n0T8j*2P4C2!p)4f_T#XJ3I`wghc`1HqCERwMHC6;#6OTwPDy zeV^lyCMrik|Lh7XQVi~lWBq+QM;eviL9ZCNyyP;nxicywd>@W6Dh)yJaRrs|0=@d7 zTX57|YW<$4RYrk5E2I(bhT+mzZ-$=hf6V$4!-hp!3HH`2XoMT2`e!(b_$OF@&CnVL z!7d7Egn3Thl=XjPt*UPh@FgJqLn7B!`qU=mk*fH|YOvcsaWA0wikJzo>ES@Hl(YLI z7+}S|+YaJ%6!mGf2HuezS*SU0UI_RX-zzH(JOt47Vfb(gU~iOrC(b8PwN^f$xna0I zT=YNcYTVy=dJmwjHXJ_xlA)-aWJlMH>V@@-_w3&OC+ce)P=weKq<$e{MAjtwKXlbtWQe&S@l$8o zVkqlKv-d>xc-64)0rSzz*~%$qe{iMP>%zStoeU8p96kIN9DOe813Uk(K>9UAjBu1h zzjEK$!ekwbvz0p7uI#9o{W5CtGQ0d>_Pd;|oI?CPYG5VU-{{_N7-B50 zI@G{+S<`nZfTJU#Cyg@1HXvOcB1Sk$qQ9PdRFNTOgH#YAmUUFjE{krm&#+g5x$$zg za*Ej&?nbK&@gLBuhTR6tt1oBc-XqNpb}xR~5VJv=9wJ6KI;}Yz{U^F81^3t3qJ4-uu2xx-CX z&OH_VfxY^wh4mar`$9yPNOSxX-EZ7wIPU{L7vhAB$sygaZ*~vvYuGNVR_b8WMK8^c zTmaA$f1&%gsz$FPbgmBRv2Bg*b?%Wn4JR9TL5LH!9l_q}o`~fdugF*{!Q5I7ThA5= z{KAU=)cv<9bri%8u|+prpyypZV@n^C-83wNRl+-Wf>Qhr&P;wK8M5dDPhD9dOB9$x z^xq$h$DKN)TmKgY6@BEmQf$=5e_-w(jrDosD)(TPua1m8Y*sZea1nh*Wj5S`;>GmI z{NWjd6-ETUMFFe|S$DvC>I7!10w*wLtO_~2R-P)ZtH7_@D4MX9B2twav>usMY3_>6 z@b$(O``G1ckh?2(#mlIDSM16+CAj;X1gol}gwb}7eHE;#T(J+dlHkE?2{zm!!N%1RYd3I6qu1h3V&j_R+s zlHg=N3Er3_!KtMZy!p5UMMn{|jrCdINEl@~1~MIO)kfI6a5~yCF2QPqm1oO+>A2F8 zC?^b_NodWM_br8>vc(bLxdnoTJVlF3wt7J838bxVuwi9lr@G|cq~d~B|2F#K!mC6H z7<6*Jic7JwQJuWB{$**j3de6;W9y&QdbD{lj;)bYmK}XlRd{J8uDz8s5xp3KS~f>j z;W8nvht|-s>&W#<0PvcJf+}ua>j$Ks@%i+oNj&aJl+Ea@)Z%Oy($A11If4k zRZCZpi`J;46$j@|8?WMKTNh!HibGoaK%ZwF>!#D1rJ_*zD)7x4Xs+J3$dO z*A2VGs)*6!=?>GnVehm!L_LEc&<(r7Vn<)VyeBj78FX42cC}S_xAtr!Q33{K!>+ZK zZqn%9(x`6O_13Xy-LPi}&!)2MA{ut9wWfn^*gtKKY1rqjq-Sxi0;L+bFc4PM`Rj%~ zY<+@`c`G>G$YCT*R8^#5U$g#oQgg;%i6agBwzUR5k?PAr9BEiqnrYaNtX3;=n*o9? zAm_ZrE?FQCJwzkY=e& z{$B^H;!qD;v&rNhI7J#g0s9yvqh7iNjb3~Sjb8Ve&7ip^{|Irr8tvhjC3hBG)1(k` zlhSpQoUg_34xnp>9F62Ip=;)9)|%WUbmiaAc*R@q0%u{z-H5M*$$POmcCow~S$rN{ z(b@{>^ERTdbXR<)2#U*hVxqH-1A5zr^@Z--)6D?5W?NBXPzKi=9+aXVLkW4jLWgA9 z72oPrVjDyp#$@d>F|nYde_GgvqFh1lnI-ii2R#slv6HXuHQ@uaAFq)%)C zdL>0G)7L(w6rqjSEJh4)^CcWK=OXRw%MUIiU^3tPyrS{k3|rPnyox6 zL|`FwQmw6{YQn)b3jjVvv2w5PiuluP#9#tB*0wDvILibr6`P|SJX8rox&t^g=SKX$ zAqacffYpQOgyOwGPpQW-dDsX#Osi~2J^OEgs9M&LW{OpVNOOs(z)CcIz*F=q;C6IM zIoJmTca&htC<$(w zCBcjbCCJ|+LBU57%=$}$*%dK^xDw{nmtbBC32yBz!NTh$STtRN#mgkPbAtp+pO;|y zX$e+*DZ$+rBzQSt1a0nVDZwj)CD=Pnf_?WQ=Mrq=t2sV8l=fuD?-&Q41s({eT2FY?mPGs07&`N-*X>5{z|TPt!R` z5{zpiL2fq*#*dOR1FHK_FVTS1B z#eOu1O-8pyvh#54CE0&Bl3jXZ&ty~~Ej~wIntU-2>29B3zm~`Ll4SV`Z^(ZlgDkgp;A z(MGKG0_&s4`CWkB$R~hJ6t!!UJ0AgnqepYd%@Ks}naB}jP+i#X(=Y~|vak}p=o^WM z73*7OqC6{*Yu#B`Gom=3fYmOwC&X7O&eJqx4u)eUBK{!gk6?3rF8<14a`8XIfxH0e zK^xII_0h%IdkiqosYS^QP7fUqxUn{{u9_7E-=k05ug|)pPuY=oyX%#M>Ya_QU|lue z>JMV-7tmDI&o9As;@d4Z4yc?YS_0{T&G8srmTL;q)M&-&rWKh>;N)grxIg^@4e2Ay zb0?tiDVsRhtS1k9X9iH4(n{K7H7E_99Wf5~QILKNz|#a@Bp5xxs}yZ04;vy- z6Jy=7RwmR#r_Gv$_$ubE65@I6UGqi~R=`M~qyBm7YhYbHjF5jIjDns3)?Z@%BUFhP z=zCoz`n$E)+J@dZWqk${k2xGiz)xk3s?HP?zZ5>H)*Q%Ngs@2XR%fYIA zTFmO;;6SiEBgo~WU{)RHa~$MV`7D@~;(SRGd;rX<=iDm^J{e}!cOGKGIfKRO>^Rs9 z3v}kO8;15{bEF`pG~CUxp0pJl5~hW*pNlGisS$Aum(E{76TsuEV~qLu}+lp91gNp zwxb{C8|Eev08Vr)dK~zAU|T}C&M4~`@Kufz%YnZP>}YA+xuX#H3CF{G zuzp3Rj!%JqX>*i@Pda{UjECUr0sfm%18lmI0@p#i$T5Gu(XIxl7GYh*0>A6{rM=N^ z4=5w7JqS))ryUKjppd*r0Llt$3;c;A=_aE+8_=y`?HDY1tuu~mq7bll?g#V`VV$?Y zXB}^%uf!655zt=3+VfW?LG7Gl%0PU`hy{BO(8pnIfq!sRT5t0H1<;=%?I7n_>t_dV z=XIg+#D+*S8$8hYB%;4NlCc8i4ChD>Lu)uX|8hJs2LZME5@PNuD9|Oxq5F)t;|a0G zRd4`iG|TC9qJ>23_OO;fUgvKcjMj#*mU!rQw%ckvd?^fxhjGr-c_`-%)tnDJVYKQH(&ZAUrt__*jaKK7mU9&PzV)3q?kKJl z)I@X`pt0Db{j3Z<0$v6X<=x8)N@)qTlLs zA2P%fAf3JfvHBpaO{{M`-a;&Xpne`4zHqA@W4WxG(2}b9YR*H-yYaB*C4o~X#M2ao zVpubsZPBi5ybgeSg($sPMtSbdYVWD^F)KAMlz|6sc)_ znOc*t_r7%xu1i4sDG(2k%swyuQ~H!4|G@gV(Oa>dw)_Ez-<4}w$hUac;J``Ct|qv) zfbEKw`3aU^YY49bbYEDTkD*zo zoeirS?d^bG2x|-ciStA!qkRg{yJ2lUie;T~u0ic^-DZ6c=;tuZr_`*o&RiNa&+CF^4OdaDP zd=l`25JyIov-f@goqeAjH&we5`1&%O`s2ZA;_}{VIL`q;9OB57ppUS}*u&bo4!1DG zk3l+j1!99)Q$c(@>fwj*4L0D>>9*rErZl`Os_;cDH2~qCvzl^AUc!mv<15xA*Ym3o zbO)h-h{P_UG=7uo$2)=N0Gk@ZMPD9&u?|HgzHaLFPT*@o99d0k8%tdHkITw>0@zC- zT)JUIM$25&JRqF};gb-lthaAOO>G0xk04mh>>|m-0CE#w9_h1IyT0VwtuhG7Hc81n zck6W2=Iy3tTLH?jVLbt9&R0=M+srT+0el=eGF?fDoV~8415v3Dm{QLNzO)RdJEzFa zu5X5#ydDAm3^~%Z^pQk3kGo#P(MC%7D)6F^9nJY^7VJFb+Jcp{R96Y`U&`1K&a!2~Uc!dQyoV&5@Qul1`^Fcwwo$didy-UV??(u?~x0Nd9;2?kgA zjtx@p^0J5HA!#SMOzhaGCmXKy9h+oMl$SspkH`c#V#=85%CY@1tWB+lVDM3Fj^Q`J zzo~-kSyC0qOOPJ75q-4DAxCQ;9l(=~kAZ(3;^YyQgNY;EDq5!0GzhFqz@uB594yV@ z$%12`^gnYIZf2NOrGb#g77Av^}qgpjrz zEgVy=cBpmHUI1uGNL#}3&$F3+$%==Z$daNG1>w@XuX63glJa-REx0An+FrezpTCMO$Tld zC?gE>VB$DsZA0(LW!@tIWrblLOdRi6Ylj(lHlSO>FrWB!oVDW7wzsfd?gzA)Fbihg z&Wh*bypD>Fyb*@72k@&`pj36V#yoW=^*#k$ObSb&t;mCqj%v>Hoy}p%LNmu;(>bkR zPMR~+`D}mFNOgg?3UQ>}geX(ABhhsV?P2u+VMr;GeuB|a*VSRUDfLv~b3z;`mbTH` zm3$p+tOT|(giA);DLL3Wu6J#?2Bhaf*dHRX8|&w>9phaO-46U6VC=l6S-CcHOmjUl z05`taFh2phKv*~HPRuTjn_aypp%)Xb*ap{nuo;+lJsrzj^A?(_NC(t`aJXS)>UTWq zdKWDtopvzrEZc;sc250{-L3}cn$kUH17BE%!)e`7zH59)RbfZ4VIbNR-e_(K=Z8r$=|JW8SG`}Z(0*R9YH zCOrEO!GPRF(HBl}tl?a(0<}?XR)u}ec9`q=ZLSIj_#{PC!7Yd$3St2n#kU759Oliq zD88{*;Rx@)MOQ>MQKkZiFbJ&*&$XuoQF}40_7d;sX|>(Fg(qs1sY;*cDU~$#nQb@$ zgKOiV9sL;Q3fk09?@5f#s7lB8BHuS&0`CoMOUdoM(Qqebk+I|jTup1b3$F6A;8S2o z&B)>BMo3hpFPPu5sc2;8Cx^(?Ze{aR%}4A9xd&gp30&ei=k(4<2Q2F*Z2yMYK?kF; z%&+5$y`Udiu*@S14vUX0xZI6-`O4*P!aAtCbu$X%ZvP4ns&Wu>cM9L@bax5g>vU&G zVdY+@yKDGfr@NcJ*ZKS%xJY^JF4Vp?w>@rxV{<%&>{LZTu6ryA$i0w0Y$MiIfuEz| z&~aS6Jr8KV4eMT1OQEZ}M-=wL#d#ps``CR!%Ck_m`Xi<^Wpo#;NV}2p2X=e~TvJ90 zB|Z^Wa$Iwam1Mw;Nuh^ULuxG(X9DEqzvzb`1NeXtM=~c-)#8NjzI`)}bD}sAoT=o| zBUN!r6`-p>z7-bkfRuOTbuMCob)_oqtOw3oUhcFW2fniuNB0W3mFwX>=s;)m7^_+v zM@LLw>mNd|Y5yl0{i>yl5bYq*eOQ@P>oNqkuUdePR4s$j=#3}^pFB~4TWP`DoUf?L zQ1Q<0gQkz-Eo|?cp^S3WcyAfYD6e;V=S^jlS3AA)J0n_&73jU)k2>Z%x;faa(}S_& zE4QiNvZ}ILlD*EllHeqh>~mISB5ufDB%+=7VCY$s zkmGc0j=3D?R|^#DJW&(SVu)ASkhOrg^Ic3K$<>^V>*II>$a)gH?c^*GxWhWYHJ#~W zaM&WuQ{Yo!xESS6uH#I78ZQ@tZ+!#kd%}{rQ{aZq*Pp_q52@vWgB7s}EDs_n=cTPM z(bUODzQsgC;OREUz^$Fv`izO*fCk&JF~L<$atCKGoP$UirU0K!4$EMrA!j9T7bSOb z-rU_}vl{q@kR8og*9dmHJ4dfHdA$JqU>Q5NjY!-F%Nv;K*ev8=_mz3sfObN>*M=-PX4rkDGCCzsT&(x7`zz5l! z@X8{huh5h$VY_}}VTXQVVW)m#;W_=p!t;D$A#iOz%vEbs1Y>44fA{LpY%bCAXY)6} zRDma#i-q`ZAqy8WLlz`jz6F^G0|nE>!r-ul|Ac*zX!#bt5g*!a77M(CZA#$@`ykQs zE$~Sz+&OLz3-0zUFi~G&-640t?MI;7u&{fz3vF;F9uR9u70o({sYa1@L?kITy%P*L;`U4(8%2MXa=LYR{ zNAo%Ozu~0Z1bAME^0rX)y5q+JW944JTS%dY)@Eu&t~>hTIBx9*ej>z?%t^G@9iP|7 z`6Ct2fb%tZ^vGU!yj}yypO8kQUUe>FK`u&~b;o=zcWMA{P>K^?jVce@HL$oJc;4o` zt#4Kh&(sMm3N|5X76nnrvjpE^>>j!P z6p)ROK4~M?I|Az-d3X}weSl8baH$^o1SXCQAl4b|&XMvVa~+PD-6LaA5B*4SqA0Q0 zG-aGnbdUVyUSoyN3bZDL9$GD_71<;G$j#~ld}N3tnUiSu$h9~=i{cD$W|K#c>>l~` zb+B+3q#H_GU|rcO;m5{;vjg}mr8v4rN;7%b3j@#KD32bw9utV^k++~R%`$ZwqNYdk zX3P696%C>_iu3muNZCEIZX&vV2qDkFx<_t%7LPWSg6$sJr2@`9Kp#a^o`NwwaxOX@ z(*+^G^vJ&-#z#Oxw&;nH4kr&;4E^8$Zk(-a@VLJ06#ee~n7%NJ%BdxmD*A(@$@(j$ z$@(j$$@=r89v%r0e+&kb^`}ac_4i3VoS$dtFOzz>`cL+`&w%COtc&=^)X-l7OxE88 zOx9ls>~UXXEDqYXhXVtvwC8&XDmf@$69j#j6V==Xq8g`}b08Z&C)LEi&qS|3Hv^x^ zQ#=n^=8^)EWGSXKo_M4WdR?vF6YE?XeFui0U z`c^#Q^szW()=D6%+&yrirBsyfBc2~b zO>s#gGk&WZ3AZE$#PfrwDIQ4-kIz7fQhe6CLvZ~)9<`}bqOFgRm>B;n6EU*ZnjU{E ztpy~JAI}e>ro>zQ2V+>q_hF*4bqrOsApQ)kU1gm?;*NO0DkaG}18WQ8XVXBkbsmYO z@sCrdt~COTRq-|HP7{j_x-Om{L`_MP#HM(D5H+Q#B(}!4WFlP>JL364)Rg8{CUkbk zFQMrc;@iRaVMJP4zagKa_<|q&sq1A^czqlK9xkwb{C9-)lI0wlsl*;LD~1@%fNnd`1|4!NNkqu*pxPl&ow6N?-zO)_uY;$S??>c#+Pa25r0kg z6=VbYOD5kzgk)#uM%`z8AaoJ}U%e4E3_(Ot1_%$i%C=j`?hc8b6}+ks|pX}QW0gS zzBUCQrHIE(N#YI$5@;ZaPF^PlMurSXEHW=?raM@LUyFBqg($KLYc~b-oj`o8NFe2V z`&LN%O9k*PBki1+H8u3+A`osC0^dKcsHV8_-+LOV0L|A-}sVvL)7QM?6oG&<)@lKoaouY@^gv8gM!X6s@wL5{|AUNNP z(ztlxdu1n}Ck1+{4CHzWP!p+i&LJ}Nb# z0^%534J7=G#R}u=bYV?1sTH&YzSH7Smhah>#bXau z2Yx4=URv5bManmS7~r7T+DM#3Sot<>hSVX_{UM{Q16`-SH=hUY5nn&MlGWLqef)y| zb0z$l#=zqQ=PQ4@(46{>{e7G?`pR(RyMR(COwuWwCGthgcLR;MQkNWvAK{)Z@^wL7 z3pA)IRq_ITm3yLmi%_FXsY*X`_&v=%(~pNxt^0gkpheshKHPoMhxi!AN4RrnCx`Ko?$)%E%lP%~hnFHgnekEX4BDB(_-GY7 zuPPFA=``Q^l1A1i6{GlcLF)XgAocqAepu8EsKf?!51{3v_@50L)aL>*s@ju?rgEP1 zv;a5i6jovl8gNA(#s6*4;4aP)Q9n>&g+zZDhv=&$)MmD~K}lBQmP!oP#*LDPr$LgK zkKASr5*`=AEE1j-!gLb0lhCRyX19h(QjDl;b}H2PBzk>(lHbGU$GyI<5%v1c zQP2(ozeK%0KHcf}r9qOo4C;-Wu&{~zPHp2fMn?vkRJ(JnQmesm`%t${lDYa;?yZ{; zug-H1pNd)vMw1$o!I|~F1IyqC0`i{#QZ{jQ@8*93NO^=&*I=9ip}-96r0iwNQl%k)JPLlbN(lQR{T!@DP1heTk$^uq-5y$L}ZrIRpL?0 z*D96PpC$0{-LXXeXMnUj=|kc%(9)JlG~116p+xzg0h(5&W3_kT_&N(pH><=qQH-Y5 zZlneNXMm9dzGd}6 zXesxG_$Hh_WYe_Ct72W?#dM!<$c1kTE8o9}EOGGA_aGsjH_1$`cT(cmWtj2O{=+z5 zsSB$cr_W=#k@k!(HE|N<@NDMoy_&KTTpPxteCfUwiSQN-8tjM?8<7oUj@ zzOARF*H?KH(z7De7UFv13*QUW1?K=0kv`y!s*(rN z!>p57KRd!U68PevG16@kgttlU@T$C4m3sF*ibX-%V3F`jy>3=Em3WK8|54WL79sE& zzIH&)pY$Sr!V2Ke2+oW9x{w;$Oxwc+;syUQw$1s$lIK9$A*5X){jmL(zm3B|DbX5- z$)i;=hEIBJ$4T(KK9;c+{{>8XibxV)#PDpELUH0q46bI)S@DVd7ckA*Nc0cPPR%+n z>h*mU#I(KfUOYrskE^(-eOQdNNUw(*Kwe*GgJWbzG2BTUC(t@*yt^xx*w zDdY>2M)>Ch2n#6W>yt(}uL*>+DdfwPM)=MB5YDHNuT~o2fgKRuK_OqXG{Q9r5Z*~4 zU%NEIEOf}`cTvcfFpaQUBC4qk*Q@MvNCprgtNb?jh1mX>x#C*FN&X`Z<)-)azH*q-)j30;JRC*5475O z08!;G2Bp<=6g%|9e+f}J98|#7Q7~F3RY&Va?Ln_-T_u&#BJ_&ZRl75~alKM)Y9x+A z2KTJRxmcT;JrH;Qic++x6+{#qetN#m&C%opkq)$ZXAR=L0&U)3j4=HO47d5$xAErQzgku-C(u1(|QO4_Sx)1l*b+Nl!xUFSAm zGTX#wY4|Lofv5cR=KHFnk;emLA^t&E$zt@4Hs@IohkFf5)#k@Wh`Zb`2N3_Abf2ny z0F~MhQIln0DmuEaZ3=Hb%^5#VwXMf~fH&Z=)@xgz7gk;FY{pX=_h8KM*&Pq*ULRjJ z^^3qSaj%azQ9QiSicFD2p%1@<1^YVi7AK-4b+ zzr?*hUIX{=I=$b=n-o~V$(|RJJzT>3eV-ue_3`CB4_^rM8>>M$?cpnXejnfQ^ZVYF zef#>1^Hn-r^dW^0{(61enj^~Rd;LDXMdJ6R3XfvHZ@k3G_WJnjmWNM_`F-76aL=c4 z{UY|7I3Kh1`&_b5lzlzy>#pvKE0^smUzdg2{d5;zI;f*-`YP0CyA;~>x&L_{@w$w+ ztw?^mDi2|)XMKSDKE>vsvZ}a>NVWPH-`0N?W>9trUS0Aa4O&c_|>q9qQ#z} zD)Pg+?P@+#9dJ`X?L#nEvZ_zVxqySO9S7XUhFI`>kc)@;`+cl@EHt|?&ef0C$L9q6 zB0;ToV!Q~GGY-hYp=55wMYy1f>EW6ZtY%Mkz-)=%>|2(m<16n-;omFXHo6_wzpubl z#^_x*pnQYaZPyHY5m(^Rs}?M{b>0)LvEoMj(rwo~gqq40G40@Y+x&K@`@XJn3RFyx2ZO2&9 zCS$8me*zw?MSoKrsTqsfxd&m{f7WJgpmYPaBx*WVPsHK0o29*4)4U{&(R)a2{f{Vztbyn7NJmkgu zSdP`%3*@GkWA$*=pAYSo{SS23hEY%tJ*WrW8F+|~x1s5OWx1(535@yJLiJGL>AiRk z12v~QQoH?O-1SAc$+(9p%eY7BHf%{WAqM$Uw&N&L?_dkPk}a0+MW*_;Q%&kLyB#eu z7M;OZtr@aPX(enS^&}dE`J^`_%vRm`f@vF2W*FtzkTRt`ut|-z;&5U+@oB{=G-*GN zsM~2-xSb@by7AuJauV&kS#?%6;9V{fRriOH?Xy6~U6w7SuV9mG8=7oyw|EDyl_95v ze01dC;FXm%2G5-Fo*F!qHuWyz%{;UzQd5EPUL6}YjW@&jR8M7NDO^>QW?++S*@bOe z?zOyc4qK|zh&mYUMUDZW$Glp9u#HI8IHgRaD-Oc0;|FYiMQURMdz`>+ClKJ54xN(HA>_3~dHc)yOwj^pY z-)s2^xXnnsgDv!RH?emKOOZO~G1d9slulJ4+KyWMWZE6p*;WvIaF#WdRt=K`m&jF3 z{b4SYpS6L~_}tR{s0{}^UUTM~ifqv|zMb3(q(v!O4U?czr}Vng>X}-7qEXLKmEW!l zJ6T}mVH4+nlggmtkwa(zgk}Fzr?r97_1KcA$;zmFC$e`ufz(cHV&^N`sY#Z?q4YFD zxl@c}HE|FVzy?acz?MW!sZ@R{?{_4U$D>m1FW{A~)ac?+rRu09U&Kq}d)Qr|R@>AB zhPnK#4U}GwEpkBWnphR8$o_n5IL@fXhg6q94b<6uioqhyy_0#wO)pXAAfCj?~(L0{?;VCu1`_sZ#2gfC{1sspyP)hy)<2icJi9F~g{u zWPP|B$2x>%|8=Xifzm$MlBg*a%})$wBe4Kmc@_P4xS}PhD&sU&IaWetJ2uJvEc^OB z55dUF#{e$0IG07QlqX-C()fH#2nP`sVN0QE%KhAJ#!gk12dF>f?z4yJore}fa-9eM8EIH`uZ@&KeJKp#1_rBMH^&b`Z zc*iBOCr^ARMOc>pX60i22qtC4N==&@c>Fp}4Du)V_E-4u0BFB>aB(xe)t9-f0Oov`gT&KY145#IqB-xa6m zaeDM$-3kv-T>lR~x6`w?|2qBiTlmL%@MHMrvVW2ON8D_A(lklH=IaVQ_wt7^Nc?^W zKDSe4>$=}~E4s21_lNYkSA#%Bb^qiNsHt)N06w=Tjnek^HA;_ceGZ%;eh(i3oqCZQ@E zeSZL1AJ_2F(y14z^l5yy(USxh? zi_h*OWSW`z8p*0>e;@bXcn$XlNk_Ed>=$tV^3UKtPh9zivtPpfFJR+l4v`SM;p~^c z`0V5J-LjQAObu^1`)9asIXI#CA*uf#zxb@E2S)MpN7#<{y_>CflTehI%%kkRKs)re zB_-F?i&Q#~kK4=4*-t(@J$em2K{8V2EDkh&H%VQY+dhJNHvt^z?*X?3D*cUM3m<)U z`bY44<~9<-GG{+zMtv8JI&=2Z&sqZ>Jl-m3oV9)R3`sthG ztsj&NW|vAg)vy-S1Odu}zfDadGleJJHcpbc7&d|@)o>l96w$)f=B5cSJS|^-k-{3wbhaPO{?I8 zAF!x&8=ky2>wdiswRu?7;`OHXM$8n~-bl4?7)!nL25GXsWp;#KbmK-I|_6zRk2sIy-mWh1t0YGk7<|y?+qnh?+xCnZS;CV(6LEi?h=K;tk;B2d;@`6>go zmwP`?5V&pR3e=q~Zd>k>TsvWBfZ97s3W-6n@8C| z*NvqPkBn}X$+_N}5&3o7Mk_Z$6E5J(&?4YVOL?OQn>60HU_!DqAvbv&{;h5&cpbEF zZ_}xvwr?Iwy*7zIjDPhx|C_u=fVpMMX1r57FES_J!==ZoQ54ws*M?xmyo@ zT`m}LoumGJNRxGJ(yDJcJOU(c9jD&P{Ft6TEd8g(Pk1vA27$_H)_Q>9q(^S%JR)?8 zF|}_N;TGa{*6cH|V{Q@e6QVeec-<9vcvR}tw@d=R3po7%7cr3dG0tN_D)qiFv3S2* zz!(l(zL^P3%Hse6AJo|%i}0T7uTBw*@Pwb-7J{7u3%MZ`BsoQITfFlI!kskVr7O&a zb=-B_OiNPkC0PspsiA>e78EoF5;oF96}JZFQ?N4}wsaic9zN~CH%)NW|7u$2np=Qo zsh}R7UIoR5H)@X>G(BG8DUX+Ed5lwA7^e zaLU^V2D3kx@}`Xx7#>!lQw5c_{|MD$C>P}MVQz>}wqlo$q!?SHe;?)FFv_hNFq{^7 zzNAwBxaA7`n<8c$pH#b5Y+K{qc5A#+FIKxHXZ*~bDSK*id$m&Up4q-o??Tes6Nso(=BEL7@t z+o?Lm&RDStZ6-tyYH(~3b7kS+=8{v!cT8QkUcoKCZ-A1<=`@-hyVz(sQW0}fX}Hhu zS5(7mZKu_$;z9YXh!#-Q!m?nH#YVkcS->v9J0$TkP1KO3hg+R8a=dGF@DR zb=9kjX4;M7=|ZX0lJ@D&G4GXEuK-d-jEMpG|MS=7n>w{Zjh&5nMi-eg16r z^VyN~tyK8gY?uB`-!*bBeQew3Gn-#Y|6%I-bLoleUpV*p3+L=}R(eBf)2HxnIy<`Q zE165v`P54G*36Z!X3xFw?Q@^Dv(KlGjr_@%GWM4<_dJ??K6AyVvftt#UO4yCeb9^&wM=dh18?+vQ1Ql z-uOE|m3|BMz>i^q($FBkZvmn@xswuR+t@O2=tYuWUT!a20wRJ+WL|EVSqibPYU*m2-DCb|{9z z)o6TGhreR8R~qyUJ>{0&Hfh6|AIi%m`bNVpck9JYr9qoEvS0MO=@$bG>H(!RTMm#H z&|JxGG|kWTZp~?7Li`g)Z_shd8>kndDh3Y%69o~)GLVW*7zf+Pwrlh4PN9Qmr66=` z+lOY4=H(|vm_R~aAG5l_JF=hu--LM6o6n|6+{(AcD*Ys;I`_=4!$&P+K+xLa2 z@O#M zXSb%`CbO+pip-B+qEos7EvXSC^UrD9%uj4gVcsxv z1Ueh2-)i;DJm>4Tnp87qQ>hQ@>(qps`36D8*D*00Hl=f0v)@eLCVf{Eapre7AQkeR z+IKZpXMWe$ceRFReuwHJcvE_#2KB%!s_8!Srzy9+n95C3s2&@c|Dc6DW9kKx`Ka44 zEs?sMcuNHJ*`;aqa)FXf8s^Ta`%LCrRw{F8cCXp8)QNYx7yHcOBiQ}`X)xvxmNS6w_D1RDw7q`VTXL31Q+ugPUv{!0VX?wBJ z>W~S;wuuegLuGiwgq;IzECE;Ae2*GTkAUjhK&WVbceProETQ_`!!t+h;}0J{a1>vx zYNNg|%Kvoh?aBgZ%qW^g>qs|+e{zKL8r=@ivU8@=VRGIs`JST6Pqon}IKNb#x@DIu zxHPEZf z3N=jD67d-zrZOjXy-;&xaC4_l=BJOz1UIQ`5zlaKyHN#6EtlI6ATar~7B4B-KZFk8^@mh}t)`e%X3$WtVq{RU^b)L3s5brupd)aAY z?ZBX%Hq$s^*|kQ=vC4oR<_3Mh0(pr@ql0W}C8u3vC|#k>7g`Gzc)CKXxG0lYF4QX3 z6&^slu;d72QA;uaULxGldoevalZCoGLSu$_c7|rcrs<|B#JVn3T8+BQ;K7-h6IQv} zK$^#P!PeKw9MjGaBFtuKp5JQ8!jK?LwwAEOoh5w3`jZS;#|ATX0H{ly0$^SN$Tzdt zFt&C0_A-CpZ->&}A<4jQQxaZB_2AlU8gQZF&_lW zi3hfq!F?4^ZwK6VAkQ{h_ziQlK#U7EGp$ht0L44`#PrOO{3*+R?D+k*4f&qX#!kRb z{>&NbI^hm$3Iin==Y5Xtj9yz{uug-O=5j_wm{stAWo%u>EV(IOCbMJr$oMgQf@%vu zTE^6%A2cDD76?qdv{RF2e=y1;UfY8j0uxL(9^se5<){Gs!WV!k-R+diq+E94Li++O zxa^Rl{Bwbe^1C2fwH^F4u~T19JFMMtr4f1buubHsIo~>MRq^|h zba~KT?ru5FYN6=lYqb+cidc;I7O)o|JATB2{~X$^H(IrVClAe{Zk#E}H>^=piQDFtD*ZdJW~fqEF~79-ssqL7GtL-Xy=#>)e-X!{v94U z!gvF$)$$dqyj%g5K)-n1NMhSd5HiZQ_v{0BcI+lPge|gSx0{&$H7=eHTSbp$Zqf!o z?y<3MbJJjI5`%79t$AmmQjfdb0w}`B1lDk8Kslly)p9^}01PV0?{&BM0}u3oHLub= z_l*J<(yzSTA9%pO-MNOT;M??Eyw8-o3K}UL-ADfcwLse-6CcDE%lX}c|D61ZBg=CW zHlP^$Z*YXOYfbYCY&ZvaZLSbk-D>Ag6a{V37FujImWfsvY-lfn0|&vv17JidwXUFz zE}-~S6Fjbw_(3gbBtAsavqZTaCC5w`Mo;J`-pE_f=alj%j{wYTp3ZEqtfTh24%SVI z2rcjB&3L}0)-~-947|FuzO)ajjOLk{}%RHY8Cs*|trz%2!FqoQKyb5Txk zAtvGGN18=bbrvWX)XAeaG*u`u^ee`|2-koF=JznC3K@*XIb+7T6WY#r6cvOtL@~9G zhQ{Xexg0nzFh%o?E`h|{{mEjxIU+b++S(Blj5)H(M4lLUhCD6KQ(aJS$W9Ab40l=v zg*lgB@bBv=2BD}VXKuHR|IN-$hNJQ!Mjtkc>~$Pi2jc;120eR=xPBV~A3jdOdWP@} zNmTaJP79Ji91M}0u%~&aE`p_K0biUbt^s2RzL_*zB1ngd`ANp2#0H+6%h^F=!#d#7 zLCNM&=rCdGVWqi|Nm!Z%wmv$)BcBJzfHAkL z5H+oq0|}Q@77X5%_A>WB9$*tF6Qn8mi^1>^FIlbBDxiQhR*8V5*CF9Ui`BN6yh92E zuT89q9W?QPH|aPFPHQi&hIR*c1Gq9HJAiUMiRb;Ga9uK+i z00fsR?IyHn*k#Hq#oJJ(n}#BXQ9y& z)lp}tOmpRoaLUm3GRI)lG(&x-j2D>Z2yiHG;lVeOPoaRF6o>5`oXsa<9`9X27MFp` z-582z2bJ630LTEGCOD*0WdZ8%SZko$p;k1`Ij|Mbj$?MC-vCt;;Zogrf_6x(1{uE) z)%9cxRtX{tj~(A_X!w*Ud-G2cWjIrA#e@;;ikc_*_=LDfO~zXE7KGsPdkk+!lJc~2 zGJ}fBLAaio@QZG~5rnA3+R^jf*Cwu;c&IZu&H#yx|? zRe>Iyct8=Ga z!w6c5pcBvTN~q4$9*OOMRNEvAlA9JbcBNA(RLK>qX_c{C;JT8SIKNYP6hb!TR-p*_ z8ys32K)U4AagDbwF2}8AbjbC*g_T?!gvh6 zcdj3iEs@Y)1|Y|sC*AIVUqA=BvGIj1Abwp%Xqwi}6nTayh_3Wza!JF*D3%7D^unBI zDd3>jA}291oyr0Z6@e=WU3Id0cB8WMadZk|$=hvon1u33E)@sNi-2sIsUo+;uWpSWbodsMlmyuaCZ&<0g5iveh?44a3O4%`qE!8J$`3mELs(7MtAiZIL;<$ct~U`+(i8eyOS7jH1L<(o}?i@adIRvN1m^>ka&~7YvtI_BH<3o?ZBV$`8`v3<fUUX!yFP#+C_wBc z&`27^PcpmT$GnIe)Op>jg}Gr70S@poBSXdFW;>9(fEyngcZ){jW7eLn)QbpwU9NN% zDZ&Ziwiw#rI+v*e99N*~SFKG9O-63QBN~QafafVuSTI=aHM;4Txay7 za7HH|jmaW~K47sq<|@vFG>;Nq6~`*Cv#YRt?a*!;Ds1I;26RvTl&}-dQy4{&Rj-K& z8pe&`1i1|!0+BKW-8_l)X~d43X-{+J)CI^|BS(IycP3ZGV` zfe6bLQs8>3=b%1+IX@+?Z=ejz;=2=+_Qfktf%{Eq)mLSLx`KTl3`txS&WNu9$Y7Zx z`QTQ_uJn+yB}O_9Ve|}6wfUAIuizFE!CNXQ6WSS^=iwazXT2vW>j-f^v^{-TAqsoN ziy>1T?~v_tYB&I4fe}jrJ5$Zrj?AFi0D?3VCP2^Ayh77S z+=o%MFOr#3^zHCvZ$lrkfGiF0z$Zsp*)W4{QPS&DFOJ>93zF3lVx6hk$hQNU!_PPlTFlSVZhp~OW zPOS5!h$GM8TZI=;q@n6GCrMyY{4yxja2=b^Bb^`#f)P%5q!;4Y@TS`L_bZk zJ|>jOW}*r&SJ4O)KPZu1Oww2bX;%5uLA=iWOgS&Sq;WEJ2719RRe~?j{gay}G*YyVy z!YaBVu=J8Mme+|h`>@qqV#8cDxLKk^_<}X3pt&D2p`nUJ_#8hoYc|2Kao!${6C}Kc z*k_}jl`Sz;Xj?r77Qi-_H#>7sRIH{%gJ1(HwGeMT6gevpEpxyNyGw{!Crh;nqJrg% z{by7@9_j+Wq0*-KG+5zW1OSs6TBJx*AmyBq&5#IULBJPW<|+$|uF-@Q&B^oy0X6=7 zFGg@3GE+ujJpQ*z;MtIDd`-4XB_>wG1srf_&>n%~TA~h-9?%WlP6+daF#sS2exJw= z+gyY)u+x}FDtRPmTx@jP$iLdA^mT@c4;3*5G)%_~-A!_nhd^95*5K@v(mi8H3iIB} z`AK26mSIU1y;da3TNBiY_XFo3qcA2LR*m_Kz)VaOG!xkC+FaI zE*`wh2(7V2P@bste;f(VtQI_yfE`Sr+_JHbk~<+uATj4l^*0ibD#2Kkikl_pJ$eGj zB#BnycMW!!1Af^KhFZS8+#@HfWkP7!>=7nCQ8n?!%%kAX)H-YC*;(052_7}c{_1F{heEB1d*ckNKG#7S(@dk@L1J_mvRyAi$puF0+eI>O zpV#9u9#kMzlH%?pFlJOL#luG*J}`ZhPW+g+XKjpJbJ7TQpA%7?rzC=TSkuz-Cr!!tNGAl!sF-+)2Xm5pvT=eBaUb2WwR})-}*(OC3`<+s< zHTERWFP&nRu(Mc^*nHpQuOIGr^Zvzh1vPnq{G3~4*BC`ZuU_WkMMw)_Yztz}Cjw1{ z2#Kznkm#`8N}Wpj2-nCrGvSZQ0}+Pf6~;6?5gS3Y#wE?4o*QQY_*c>{bkEom#8~5u zIyV;heIF1Q4i9oCGDm~(cWO;KB}nSHqRz!+S6Le4B{EsJW5ffHc!6VD5S_%_pg(VU zjQv64p-BrvbBc5+0H-c8Uw7DR7p%)r5khW4LmXb0b>455ehra;Ub3>2_h z%kNPckEA_v0e`wtH*l2;C$(W+x9d9yiImMhzVSu+$*ol`^RlH-UN*{Zh6APAI1UT! z4T;%sS*#l=JCU8hoQ3Nm;=}Mm1vhgfMo69I-$&}-vyRTJy`Hr}0qgrCECP6h&z2!9 zLKs$A$Vm!X&f_dJI!PipaK-a)N(Z6)M&}!i>OMY!vrGq!MQ5zo>z?t&NiK1u&SHV4 zCyq==7Ekg{bhiyKCcC7t$3h%N1H5JEC=-(VR8b!$qps@+vali3CWk)2ExJo5wo+bd z90o^3y3&?pbpC^Fy{Pq}Q(3;YDK0^d{RRWRY@H z&x7kZ$LITK(~(ymOlu3RMz@JWhDI18I!5CBq5X^s`eC-7(>viH$46K4nc90b@P|(?d${~wI^0DjGm*LQ ziO~_B5;!6b>=C=@^%y6T>@=tUN4GdnDo|(C83EKkA3NE@F0Yl9^iurd;5&Aw@>$OC za#-P2B3V6D8^?>%@r}rHgR>P8KbObua5u=HI8dAlD33tEzD2iTh!@Qd1qFToF(Kby z$elC`1MBvo;pQV#p-NL@*y>vX3MRus;Uq)`>7cH6-FJ`|=;CFVP6P>(XDV4D`{rDR zVgctC$65xWHNp!*i2&kPW7QoA_S7D5S0W?c<HOZ+59!4=fSU${$mLRj&&Hu6a)8(ox?(Mv zq>8Ms>d)yE^L`IymQiCNGTD?kAJaQ>YjC0jAR#eA4^Pwe7<3o2;23GYz=ZB7H(JYu zR>_SOusa1#gc;2z29xg7SyJ|)<&qo!jsEIsrLoi#6fD4JdJ#=k*AI=aRJUj#NiB8$LVHhfZ7B4UWhe9j1nQgeQ_lpVr^80)-!wk=;XcXvm=Sfj^pTASLmP6) zda@v$<;u|Q55ouvgZ``q7nIm2rci-{ax2!7>kaE)VHjBa7AtcoXCkoY2D`1!+~M3! zZwnEQX!^ESOcdOkxzlWI?CBMxC=$ez$gIEw?DD^?N$w|ZoBb%+!>PkbNy+|jNo1*S z!CflevINBK7`r=^GFfT#kXa_tC2GX$jWLq4qH`ACwH^1b)oOMZ~%;Gd|C z44%~-nM_7$Kwixv-xaR`oS|Y|I@e+=q{v)xup%8tB47;x184x*H^gL09-lZ+&w|mB zSsIq|VlJqg43I6L;!@7bIaGE*b;?OGhP@7}=!s9MLmtK#6h25Ox>@bEDL@*gU$Sz< zvGpm@};BRyTq7^mt7%3+yrKiH&SRbi=kJKCfD`?za!yWeB4fD#g7}R032B zuvB8`I8gw}DT@$_%yECX!v=C>r zD=QV^uwvvrL(51?Hi!kv$ul7PR52l~N(4?>haKu3J}TDVgn--2Q}YZm$^iv1Dxf%} zV$o@KkYNt)qZB);QD;LIc0(e%3*;9w4#GVaSY1um$agT?f!Q?<#_Q(1z3$%NrosQ8 zc(GG@-~rcWH3tz{{68K2eA z(nU-zok+N&T;n{PzI6+6M@8}z5Z>emIzUsV2g65ktPKXGWob)4LFzDutaD1=)itdp^e2HVL#CI+J? z43(6Kq@m?hfcBx;qpaEVAsqlFBDd^EXxgqSF zh^u`ZJeLl6U(t3Ps>Uds(uG4F+4YYw7Y;`kcWJ*@3pV?DvGJ161_I7Xl@hvQj(H_% z@+l3O9B(DF5CwHXuT*kMovnL5sppkF;)x!dhw%J@P3*>1;WQ|*k2oJ(*~dior7Vu3 zjlR-tV3meM`$#q0cB&36V9<;cWD(;Jq*|d$De3O?0>?VwS!NvGIu2WJB`f2l9hl%7%MR1#L=(M0u%I3FdH zjAG=E+M2hQoK~gGeg{4tBocOpV7&2X$CyEO3`ueZ_#P^r_GfcV9uR^4T((ig%SgT; zhy;4lm#iZxVQ+lcHQLQWF{WN%jVD+39{)TI7kXIgmK!ZOg?Dgw3D@|}VR04*q#-Jc zH|#X;SC`%`sjsu^KPWE7u3_dLqUeaW1s356^7hUuCumpr1no+lIsO>^SD*O{+uw-e zfkqI1+akf^FjGo8LzpFwJ&8^~HoA|214I3mO}sl93W`(eU2GRt(5x;U4mdJ z<|BhVFS2umyzVj25b~OE7KyokNUtVG%I8n2tA8>RN13U7huagir$oM#=MNbT$Yw_R ze>r%O^}2dDL0`O({$%Y6 z2QO@y(nkf@6knJ-z-1q=d4Ki9hGu{bh+$Jv1&$P+WxN7 z8$BWzFrkTZqo{+)LwbFWqGyG9DC45XW&z53K{;!dS#=nLGP3tB=E#@q!pn1!+|KhE zL*H;(CUP@sH5#k|jm3?aC^!|#hbkS<0&k4X z7v%x%#i}HNqCDdYZ~iqhL*jSpN+FC{pwVOfORn7+l%pBcTz*~#XwU}PuLN>P7e{)s zOT+n;q489IwMy(D1`d4D)OjQ*1Sg;OO3*yx+YS4ywm6t3hxlb@i}z-X9kq*1?r|l( zV44JSj!$kPCdks}qsn|Ry-S+U>vbdNt&q)NIEQn)Hr3$CA?jh^L!j#}Pk7eJL@*?u z?rqYN$a+X{rU;gt^B6pC%b~=U#*y$%?|qPHYz>6Oz)tYO<-r0&7497b)nIWuIUS8J z-=lO5=pzmi^Rgr)Db}rWjQtGKapAnHc+4B=ui2~H4GoRg4w-V;fOA5!d3Y(nxxFE! zmRFXBtVIcnlQ@%#4AZL^yJwI{^Ayd7s_1udW;UgdiQrFvSUclSRml;t8dMM}czmXloC7m>nJ*efS+$z2tB$)Ll zDSDLDi!_BaT`_Q#8vaO_B|)lLjcs#b<%UKWCaN?R4nxnJ#?0^u?4-fsc}-;7xDo#n z>#!PwH3UnioZzE;j6ZR!hjp1C9K!)%Ft$MMW&_ic8d|hkf7c>pl1E#>p^eTc04$Od z8oBl2SdYlPFe#M7JM42{)B}%7GEkMv2uIZPN#R2qWZGhFtWe~yD2rljP(y9wAlHF( z(45ABeEL`g-VA#+4vyM244$Mg|4~P@o~uFAFrc3u_-AaZPEN%T%E(Dy;A&9%Vj|{Y zAJVfvRvXJ&cgDpK$3$XRw?ygj>bXi|yER3e_(|%rn)QquDS;E&D0w*Fi$n5!rBs1? zEs<|z?QoTWCdZ*~_OX;9#v#XWw%LtdcDKk-)XMX=6b+f zKWDBlo9nBg>))FDZ<_0OL)R;Bm-p%Q7IS~AxxUX_-*2wV=6c3lpEuVJnd=RANP9P$ z>xt0yedhlC=KAr_^_R{4E9Uxo=z86q(!O4InR~q!&3(ySTcPU@nR~syWbQw0uD=|* z{-(Kq)m*=3uK&wi|I%EgR~Pvk>wk#Pezt+w7wi!zRB8l zNz{8Uv7Wmusyu7`S!DU8R&#Sy{mZPcULIAx*~(rORerfO8d-jYbz*B&{VmoLk>yuf zrME}bzshPxmS1iC+1*j~w^~o!8&y7HeJK}JevS3e-qD^PGS;=$qmkv;Sx-ckUvGUh zvV5EM$$e4n-(Xq$qsnizMkC7&0t@vtW8D-gk=u;*);{HL>r;MnpYqW@e2tV%rvm4)1){WMV=}|7D_tD=Wd{PnX zRYN(o^F*kf6|UdA?w>??RR3S@Q~vL`og1y(^eDbjALQ@1aiRCVNCUy&tX!;b;Y#IS zH|5uwa(XW6y<71^%GzpuAp&lr>W@-GR`0&p$?f#Q=U%RVO%I$OGv(oZ@dUTi3(rd^ zzZK(B96n~owE_4mw6y%ot$oU;`jpS2oZ45KG-cZVOH;12OwrjxndtXEhH`30Y0^>C z&M%m9r75}-uH0Z*S6Me$+xCx|nsT`g9 zc@~;q`uh&xcoh8!0 zguTWr&|L?L2-p^?!@?UNg`w z29LE-PVI!@;lG*kQG;yWVcPjSlwS?HuYA!}rk%?%kf?cXn{t(pI zl#BJ#2HwK^`g2@vD)}z|fO4V>VLZI?8fjl;ulvn2523$Tq5pfPM}4hW)-Rd*DzoVP zr@Z|N*rqB9ul;2`` z{IH4vpF=sVd&#^|<)m|5?(eyL{|d@!e!_73-}}`6r#|IZ@qXE2{mq@yuHutXl+%2M z@xV)5zqdc%?Nk0XEIG9k<~M#2K2HuSnfUbiDWPtthAV!+85ilt;DyT%Yn6 zO*<+(D_rG(h@#q=MLE4UO!q%;%ESBUAk(!i)=fslc);w(M@;z>MqUGZ#(xVar}o3} z^BmXjorlk$e6+XN`n5jgulH#ujeZdvs_sYmsIQ?u!EMvXYglgi!+4_R=MI!p|5b-@ zo7OM3I_*xkTplZ0B^=4NfG}>SWkb6Of8RRAv)iSHy-;n;L-kfd=q&t;aIPyEd8!Vg z>c)0Y-M=Tgk`3)u#V)j3g%un2gw~2xZWU^dUFz0qh+?pPcbxw&P_k((3&i3N(q?S91lb0(EN}C5Q-6UcwE-;Z^1*euDKKk&1>7#h0J8#e0P)4h5Rh0eq zp_9|c@^=3CL7SYd4j+Gyoqxy_K6LP;Wgq;3g}OYWl!YagFk+Eh9XI;WE3^^)x0UH4YS6iz=Bj6$Z^LC+8&KjZ7^_i&<~*DK(^I z-M|0v(b)qt_Qcr4*enOD@NsKP!R2ql!b6OHx6EU7d45#Er$HD8y>tRTKAv3g&l8dird5TFz;h*F#%^28qCPCL{$6@KR(MJj2$L78IDsqJ9m3H-9#lc2tZnBE zGV|!8(+6hl+}KX5jo`h|vrY}+$icF}@ib**l&^+mSUp+FA?& zo4dGSV7vE0EUcN?M<2C!j!lkDq84wh=#U^%j-_~`K!&>t>w%$ZVRS=voHLd1{s8}sM@7aJ!r04FxDOg5Q1=XSQb^-cxS24{Tl!FWQ$6QLzOQV<9sRG3_C z$<~5D$( zdD8yT;mJs=tOQrMz>6T)c>Q}rp2_q)rw>;(B_Mask~2AFva!DAW$z8xXdR1)+b5lNw?>-8nHlJwSh>UrV|t+zv!7HXXn$@OT1(Q7 zH=4>k88ZnwJ50p-M&+E0z^}+@lI$RP%Gu$f5wZdb8tKJ(qVM9WjJ0r3c%?@$TfoWO zg4Dj{p`h_$`1YBjw`N*49UC*2`2E3Wz#@fGBIM zy;AEG=5g(`3;)=s06gx^Ji02)SFRcgN9>)ZRmGuhu)4Rxu*qWV8j9D?EpV#q!$UJ|*G^p_mdfj2hPtVgc;pcxGW%LT_AN^_EgI?i&6!b+inKJ@$(#;HZGl%s z!kPxc?|&`yyvB{_^%wQU<{Ijb^*>NfK3BTU)Q|q5z4AbKzV-cj{RXPRHPd}w<4_(o z&ucwt&4XVp{}z6rKI!{4UgZh%{9XE>xsHbJ>0#ZQ^pnQ5d{p~y)=#HV->c*LB%blV zU*lgsxldm7L}?dEMu7=Z#{tv4KBtbqrjhXTC(ZNW`Mc>4<$>S-1OMA)t*J!Y`9Pod z|Mf3QjWGVy=d@M24^1)uH2SjCR6KkeN_XR