From 0e738cb7b9424d9212626c70bcce23a3806c72ec Mon Sep 17 00:00:00 2001 From: Makc Mikhin Date: Wed, 19 Nov 2025 19:57:54 +0100 Subject: [PATCH 1/2] Add logging direct to elasticsearch --- .dockerignore | 25 +++ DOCKER_README.md | 292 ++++++++++++++++++++++++++ Dockerfile | 66 ++++++ apm.c | 34 +++ apm.ini | 26 +++ config.m4 | 41 +++- docker-compose.yml | 61 ++++++ driver_elasticsearch.c | 464 +++++++++++++++++++++++++++++++++++++++++ driver_elasticsearch.h | 36 ++++ php_apm.h | 29 +++ start-docker.sh | 67 ++++++ test/index.php | 210 +++++++++++++++++++ test/info.php | 3 + 13 files changed, 1353 insertions(+), 1 deletion(-) create mode 100644 .dockerignore create mode 100644 DOCKER_README.md create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 driver_elasticsearch.c create mode 100644 driver_elasticsearch.h create mode 100755 start-docker.sh create mode 100644 test/index.php create mode 100644 test/info.php diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c360961 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +# Don't commit test data or logs +test/*.log +*.log + +# Don't commit Elasticsearch data +elasticsearch-data/ + +# Don't commit Docker volumes +.docker-data/ + +# OS files +.DS_Store +Thumbs.db + +# IDE files +.idea/ +.vscode/ +*.swp +*.swo + +# Compiled extension (built inside Docker) +modules/ +*.lo +*.la +.libs/ diff --git a/DOCKER_README.md b/DOCKER_README.md new file mode 100644 index 0000000..22c77cf --- /dev/null +++ b/DOCKER_README.md @@ -0,0 +1,292 @@ +# Docker Setup for PHP APM with Elasticsearch + +Complete Docker environment for testing PHP APM extension with Elasticsearch driver. + +## 🚀 Quick Start + +### 1. Build and Start Containers + +```bash +cd /Users/AnyKey/Projects/php-apm + +# Build and start all services +docker-compose up -d + +# View logs +docker-compose logs -f +``` + +### 2. Wait for Services to Start + +The services will be available at: +- **PHP Application**: http://localhost:8080 +- **Elasticsearch**: http://localhost:9200 +- **Kibana**: http://localhost:5601 + +Wait about 30 seconds for Elasticsearch and Kibana to fully start. + +### 3. Test APM + +Open http://localhost:8080 in your browser and click "Run Test" to generate sample events. + +## đŸ“Ļ What's Included + +### Services + +1. **php-app** (PHP 5.6 with APM Extension) + - Apache web server + - APM extension with Elasticsearch driver enabled + - Pre-configured to send data to Elasticsearch + - Batch sending enabled (10 docs or 5 seconds) + +2. **elasticsearch** (Elasticsearch 7.17.10) + - Single-node cluster + - No security (for testing only) + - Stores APM events and statistics + +3. **kibana** (Kibana 7.17.10) + - Web UI for Elasticsearch + - Visualize APM data + - Create dashboards + +### Configuration + +APM is pre-configured with: +```ini +apm.enabled=On +apm.elasticsearch_enabled=On +apm.elasticsearch_host=elasticsearch +apm.elasticsearch_port=9200 +apm.elasticsearch_index=apm-logs +apm.elasticsearch_batch_size=10 +apm.elasticsearch_batch_timeout=5 +``` + +## 🔍 Verifying Installation + +### Check APM Extension + +```bash +docker-compose exec php-app php -m | grep apm +``` + +Expected output: `apm` + +### Check APM Configuration + +```bash +docker-compose exec php-app php -i | grep elasticsearch +``` + +### Check Elasticsearch Connection + +```bash +curl http://localhost:9200/_cat/health?v +``` + +## 📊 Viewing Data + +### Via Command Line + +```bash +# View all APM documents +curl http://localhost:9200/apm-logs/_search?pretty + +# Count documents +curl http://localhost:9200/apm-logs/_count + +# View index info +curl http://localhost:9200/_cat/indices?v | grep apm +``` + +### Via Kibana + +1. Open http://localhost:5601 +2. Go to **Management** → **Stack Management** → **Index Patterns** +3. Create index pattern: `apm-logs*` +4. Go to **Discover** to view documents +5. Create visualizations and dashboards + +## đŸ› ī¸ Docker Commands + +### Start Services + +```bash +docker-compose up -d +``` + +### Stop Services + +```bash +docker-compose down +``` + +### Stop and Remove Data + +```bash +docker-compose down -v +``` + +### Rebuild PHP Container + +```bash +docker-compose build --no-cache php-app +docker-compose up -d php-app +``` + +### View Logs + +```bash +# All services +docker-compose logs -f + +# Specific service +docker-compose logs -f php-app +docker-compose logs -f elasticsearch +``` + +### Execute Commands in Container + +```bash +# PHP shell +docker-compose exec php-app bash + +# Test curl from PHP container +docker-compose exec php-app curl http://elasticsearch:9200 +``` + +## 🐛 Troubleshooting + +### APM Extension Not Loading + +Check build logs: +```bash +docker-compose build php-app 2>&1 | tee build.log +``` + +Verify extension file exists: +```bash +docker-compose exec php-app ls -l /usr/local/lib/php/extensions/ +``` + +### No Data in Elasticsearch + +1. Check if APM can reach Elasticsearch: +```bash +docker-compose exec php-app ping -c 3 elasticsearch +docker-compose exec php-app curl -v http://elasticsearch:9200 +``` + +2. Check APM debug output (if compiled with `--with-debugfile`): +```bash +docker-compose exec php-app tail -f /tmp/apm.debug +``` + +3. Verify PHP errors are being triggered: +```bash +docker-compose exec php-app php -r "trigger_error('Test', E_USER_WARNING);" +``` + +### Elasticsearch Won't Start + +Check memory limits: +```bash +docker stats +``` + +Elasticsearch needs at least 512MB RAM. Adjust in `docker-compose.yml` if needed. + +### Port Already in Use + +If ports are already taken, edit `docker-compose.yml`: +```yaml +ports: + - "8081:80" # Change 8080 to 8081 +``` + +## 📈 Performance Tuning + +### Batch Size + +Larger batches = fewer HTTP requests but higher latency: +```ini +apm.elasticsearch_batch_size=50 +``` + +### Batch Timeout + +Shorter timeout = more real-time but more requests: +```ini +apm.elasticsearch_batch_timeout=1 +``` + +### Disable Unused Features + +```ini +apm.store_stacktrace=Off +apm.store_cookies=Off +apm.store_post=Off +``` + +## 🔐 Production Considerations + +This setup is for **testing only**. For production: + +1. Enable Elasticsearch security: +```yaml +environment: + - xpack.security.enabled=true + - ELASTIC_PASSWORD=changeme +``` + +2. Use strong passwords +3. Enable HTTPS +4. Restrict network access +5. Use proper resource limits +6. Enable authentication in APM config + +## 📝 Example PHP Test Script + +Create `test/custom-test.php`: +```php + +``` + +Run it: +```bash +docker-compose exec php-app php /var/www/html/custom-test.php +``` + +## 🎓 Next Steps + +1. **Create Kibana Dashboards** + - Visualize error rates + - Monitor response times + - Track memory usage + +2. **Set Up Alerts** + - Alert on error spikes + - Monitor slow requests + - Track resource usage + +3. **Optimize Configuration** + - Tune batch settings + - Adjust thresholds + - Enable/disable features + +4. **Test in Production-Like Environment** + - Add load testing + - Test with realistic data + - Monitor performance impact diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a83ba2c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,66 @@ +# PHP 5.6 with APM Extension and Elasticsearch Support +FROM php:5.6-apache + +RUN echo "deb http://archive.debian.org/debian stretch main" > /etc/apt/sources.list +# Install dependencies (only curl needed for Elasticsearch driver) +RUN apt-get update && apt-get install -y \ + git \ + autoconf \ + build-essential \ + libcurl4-openssl-dev \ + --allow-unauthenticated \ + && rm -rf /var/lib/apt/lists/* + +# Copy APM source code +COPY . /tmp/php-apm + +# Build and install APM extension +WORKDIR /tmp/php-apm +RUN phpize \ + && ./configure \ + --enable-apm \ + --without-sqlite3 \ + --without-mysql \ + --disable-statsd \ + --disable-socket \ + --enable-elasticsearch \ + && make \ + && make install + +# Install APM extension +RUN echo "extension=apm.so" > /usr/local/etc/php/conf.d/apm.ini + +# Configure APM for Elasticsearch +RUN echo "; APM Configuration" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "apm.enabled=On" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "apm.event_enabled=On" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "apm.application_id=\"Docker PHP 5.6 App\"" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "; Elasticsearch driver" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "apm.elasticsearch_enabled=On" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "apm.elasticsearch_stats_enabled=On" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "apm.elasticsearch_host=elasticsearch" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "apm.elasticsearch_port=9200" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "apm.elasticsearch_index=apm-logs" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "apm.elasticsearch_batch_size=10" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "apm.elasticsearch_batch_timeout=5" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "; Disable other drivers" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "apm.sqlite_enabled=Off" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "apm.mysql_enabled=Off" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "apm.statsd_enabled=Off" >> /usr/local/etc/php/conf.d/apm.ini \ + && echo "apm.socket_enabled=Off" >> /usr/local/etc/php/conf.d/apm.ini + +# Clean up +RUN rm -rf /tmp/php-apm + +# Enable Apache mod_rewrite +RUN a2enmod rewrite + +# Set working directory +WORKDIR /var/www/html + +# Expose port 80 +EXPOSE 80 + +CMD ["apache2-foreground"] diff --git a/apm.c b/apm.c index 40a59f8..bc66c04 100644 --- a/apm.c +++ b/apm.c @@ -53,6 +53,9 @@ #ifdef APM_DRIVER_SOCKET # include "driver_socket.h" #endif +#ifdef APM_DRIVER_ELASTICSEARCH +# include "driver_elasticsearch.h" +#endif ZEND_DECLARE_MODULE_GLOBALS(apm); static PHP_GINIT_FUNCTION(apm); @@ -242,6 +245,33 @@ PHP_INI_BEGIN() /* process silenced events? */ STD_PHP_INI_BOOLEAN("apm.socket_process_silenced_events", "1", PHP_INI_PERDIR, OnUpdateBool, socket_process_silenced_events, zend_apm_globals, apm_globals) #endif + +#ifdef APM_DRIVER_ELASTICSEARCH + /* Boolean controlling whether the driver is active or not */ + STD_PHP_INI_BOOLEAN("apm.elasticsearch_enabled", "0", PHP_INI_PERDIR, OnUpdateBool, elasticsearch_enabled, zend_apm_globals, apm_globals) + /* Boolean controlling the collection of stats */ + STD_PHP_INI_BOOLEAN("apm.elasticsearch_stats_enabled", "1", PHP_INI_ALL, OnUpdateBool, elasticsearch_stats_enabled, zend_apm_globals, apm_globals) + /* Control which exceptions to collect (0: none exceptions collected, 1: collect uncaught exceptions (default), 2: collect ALL exceptions) */ + STD_PHP_INI_ENTRY("apm.elasticsearch_exception_mode","1", PHP_INI_PERDIR, OnUpdateLongGEZero, elasticsearch_exception_mode, zend_apm_globals, apm_globals) + /* error_reporting of the driver */ + STD_PHP_INI_ENTRY("apm.elasticsearch_error_reporting", NULL, PHP_INI_ALL, OnUpdateAPMelasticsearchErrorReporting, elasticsearch_error_reporting, zend_apm_globals, apm_globals) + /* Elasticsearch host */ + STD_PHP_INI_ENTRY("apm.elasticsearch_host", "localhost", PHP_INI_PERDIR, OnUpdateString, elasticsearch_host, zend_apm_globals, apm_globals) + /* Elasticsearch port */ + STD_PHP_INI_ENTRY("apm.elasticsearch_port", "9200", PHP_INI_PERDIR, OnUpdateLong, elasticsearch_port, zend_apm_globals, apm_globals) + /* Elasticsearch index */ + STD_PHP_INI_ENTRY("apm.elasticsearch_index", "apm-logs", PHP_INI_PERDIR, OnUpdateString, elasticsearch_index, zend_apm_globals, apm_globals) + /* Elasticsearch username (optional) */ + STD_PHP_INI_ENTRY("apm.elasticsearch_username", "", PHP_INI_PERDIR, OnUpdateString, elasticsearch_username, zend_apm_globals, apm_globals) + /* Elasticsearch password (optional) */ + STD_PHP_INI_ENTRY("apm.elasticsearch_password", "", PHP_INI_PERDIR, OnUpdateString, elasticsearch_password, zend_apm_globals, apm_globals) + /* Batch size - number of messages to buffer before sending */ + STD_PHP_INI_ENTRY("apm.elasticsearch_batch_size", "10", PHP_INI_PERDIR, OnUpdateLong, elasticsearch_batch_size, zend_apm_globals, apm_globals) + /* Batch timeout in seconds - maximum time to wait before sending buffered messages */ + STD_PHP_INI_ENTRY("apm.elasticsearch_batch_timeout", "5", PHP_INI_PERDIR, OnUpdateLong, elasticsearch_batch_timeout, zend_apm_globals, apm_globals) + /* process silenced events? */ + STD_PHP_INI_BOOLEAN("apm.elasticsearch_process_silenced_events", "1", PHP_INI_PERDIR, OnUpdateBool, elasticsearch_process_silenced_events, zend_apm_globals, apm_globals) +#endif PHP_INI_END() static PHP_GINIT_FUNCTION(apm) @@ -274,6 +304,10 @@ static PHP_GINIT_FUNCTION(apm) *next = apm_driver_socket_create(); next = &(*next)->next; #endif +#ifdef APM_DRIVER_ELASTICSEARCH + *next = apm_driver_elasticsearch_create(); + next = &(*next)->next; +#endif } static void recursive_free_driver(apm_driver_entry **driver) diff --git a/apm.ini b/apm.ini index 055884d..da95b01 100644 --- a/apm.ini +++ b/apm.ini @@ -97,3 +97,29 @@ extension=apm.so ; Socket path (accept multiple entries, separated by "|", prefixed with "file:" or "tcp:") ; Example: apm.socket_path=file:/var/tmp/apm.sock|tcp:localhost:1234 ; apm.socket_path=file:/tmp/apm.sock + +; Elasticsearch configuration +; Whether to enable the elasticsearch driver +; apm.elasticsearch_enabled=On +; Whether to collect stats for the Elasticsearch driver +; apm.elasticsearch_stats_enabled=On +; Error reporting level specific to the elasticsearch driver +; apm.elasticsearch_error_reporting=E_ALL|E_STRICT +; Control which exceptions to collect (0: none exceptions collected, 1: collect uncaught exceptions (default), 2: collect ALL exceptions) +; apm.elasticsearch_exception_mode=1 +; Stores silenced events +; apm.elasticsearch_process_silenced_events = On +; Elasticsearch host +; apm.elasticsearch_host=localhost +; Elasticsearch port +; apm.elasticsearch_port=9200 +; Elasticsearch index name +; apm.elasticsearch_index=apm-logs +; Elasticsearch username (optional, for basic auth) +; apm.elasticsearch_username= +; Elasticsearch password (optional, for basic auth) +; apm.elasticsearch_password= +; Batch size - number of documents to buffer before sending (default: 10) +; apm.elasticsearch_batch_size=10 +; Batch timeout in seconds - maximum time to wait before sending buffered documents (default: 5) +; apm.elasticsearch_batch_timeout=5 diff --git a/config.m4 b/config.m4 index 647bcaa..41c7824 100644 --- a/config.m4 +++ b/config.m4 @@ -35,6 +35,8 @@ PHP_ARG_ENABLE(statsd, enable support for statsd, [ --enable-statsd Enable statsd support], yes, no) PHP_ARG_ENABLE(socket, enable support for socket, [ --enable-socket Enable socket support], yes, no) +PHP_ARG_ENABLE(elasticsearch, enable support for elasticsearch, +[ --enable-elasticsearch Enable elasticsearch support], yes, no) PHP_ARG_WITH(debugfile, enable the debug file, [ --with-debugfile=[FILE] Location of debugging file (/tmp/apm.debug by default)], no, no) PHP_ARG_WITH(defaultdb, set default sqlite3 default DB path, @@ -199,6 +201,43 @@ if test "$PHP_APM" != "no"; then AC_DEFINE(APM_DRIVER_SOCKET, 1, [activate socket driver]) fi - PHP_NEW_EXTENSION(apm, apm.c backtrace.c $sqlite3_driver $mysql_driver $statsd_driver $socket_driver, $ext_shared) + if test "$PHP_ELASTICSEARCH" != "no"; then + elasticsearch_driver="driver_elasticsearch.c" + AC_DEFINE(APM_DRIVER_ELASTICSEARCH, 1, [activate elasticsearch driver]) + + dnl Check for libcurl + AC_MSG_CHECKING([for libcurl]) + if test -z "$PKG_CONFIG"; then + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + fi + + if test "$PKG_CONFIG" != "no" && $PKG_CONFIG --exists libcurl; then + CURL_CFLAGS=`$PKG_CONFIG --cflags libcurl` + CURL_LIBS=`$PKG_CONFIG --libs libcurl` + AC_MSG_RESULT([found via pkg-config]) + PHP_EVAL_LIBLINE($CURL_LIBS, APM_SHARED_LIBADD) + PHP_EVAL_INCLINE($CURL_CFLAGS) + else + AC_MSG_RESULT([checking manually]) + for i in /usr/local /usr; do + if test -f $i/include/curl/curl.h; then + CURL_DIR=$i + AC_MSG_RESULT([found in $i]) + break + fi + done + + if test -z "$CURL_DIR"; then + AC_MSG_ERROR([libcurl not found. Please install libcurl development package (e.g., libcurl4-openssl-dev)]) + fi + + PHP_ADD_INCLUDE($CURL_DIR/include) + PHP_ADD_LIBRARY_WITH_PATH(curl, $CURL_DIR/lib, APM_SHARED_LIBADD) + fi + + AC_DEFINE(HAVE_CURL,1,[libcurl found and included]) + fi + + PHP_NEW_EXTENSION(apm, apm.c backtrace.c $sqlite3_driver $mysql_driver $statsd_driver $socket_driver $elasticsearch_driver, $ext_shared) PHP_SUBST(APM_SHARED_LIBADD) fi diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..1e108a9 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,61 @@ +services: + # Elasticsearch for APM data + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:7.17.10 + container_name: apm-elasticsearch + environment: + - discovery.type=single-node + - xpack.security.enabled=false + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + ports: + - "9200:9200" + volumes: + - elasticsearch-data:/usr/share/elasticsearch/data + networks: + - apm-network + healthcheck: + test: ["CMD-SHELL", "curl -f http://localhost:9200/_cluster/health || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + + # Kibana for visualization (optional) + kibana: + image: docker.elastic.co/kibana/kibana:7.17.10 + container_name: apm-kibana + environment: + - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 + ports: + - "5601:5601" + depends_on: + elasticsearch: + condition: service_healthy + networks: + - apm-network + + # PHP 5.6 with APM extension + php: + build: + context: . + dockerfile: Dockerfile + container_name: apm-php56 + ports: + - "8080:80" + volumes: + - ./test:/var/www/html + depends_on: + elasticsearch: + condition: service_healthy + networks: + - apm-network + environment: + - PHP_DISPLAY_ERRORS=1 + - PHP_ERROR_REPORTING=E_ALL + +volumes: + elasticsearch-data: + driver: local + +networks: + apm-network: + driver: bridge diff --git a/driver_elasticsearch.c b/driver_elasticsearch.c new file mode 100644 index 0000000..8c7da2f --- /dev/null +++ b/driver_elasticsearch.c @@ -0,0 +1,464 @@ +/* + +----------------------------------------------------------------------+ + | APM stands for Alternative PHP Monitor | + +----------------------------------------------------------------------+ + | Copyright (c) 2008-2014 Davide Mendolia, Patrick Allaert | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Patrick Allaert | + +----------------------------------------------------------------------+ +*/ + +#include +#include +#include +#include +#include "php_apm.h" +#include "php_ini.h" +#include "driver_elasticsearch.h" +#include "SAPI.h" + +ZEND_EXTERN_MODULE_GLOBALS(apm); + +APM_DRIVER_CREATE(elasticsearch) + +/* Simple JSON string escape function */ +static void append_json_string(smart_str *dest, const char *src) +{ + const char *p; + if (!src) { + smart_str_appends(dest, "\"\""); + return; + } + + smart_str_appendc(dest, '"'); + for (p = src; *p; p++) { + switch (*p) { + case '"': + smart_str_appends(dest, "\\\""); + break; + case '\\': + smart_str_appends(dest, "\\\\"); + break; + case '\n': + smart_str_appends(dest, "\\n"); + break; + case '\r': + smart_str_appends(dest, "\\r"); + break; + case '\t': + smart_str_appends(dest, "\\t"); + break; + default: + smart_str_appendc(dest, *p); + } + } + smart_str_appendc(dest, '"'); +} + +/* Helper function to build JSON for events */ +static void build_event_json(smart_str *json, int type, char *error_filename, uint error_lineno, char *msg, char *trace TSRMLS_DC) +{ + char timestamp[32]; + time_t now = time(NULL); + const char *type_string; + + strftime(timestamp, sizeof(timestamp), "%Y-%m-%dT%H:%M:%S", gmtime(&now)); + + switch(type) { + case E_EXCEPTION: + type_string = "exception"; + break; + case E_ERROR: + type_string = "error"; + break; + case E_WARNING: + type_string = "warning"; + break; + case E_PARSE: + type_string = "parse_error"; + break; + case E_NOTICE: + type_string = "notice"; + break; + case E_CORE_ERROR: + type_string = "core_error"; + break; + case E_CORE_WARNING: + type_string = "core_warning"; + break; + case E_COMPILE_ERROR: + type_string = "compile_error"; + break; + case E_COMPILE_WARNING: + type_string = "compile_warning"; + break; + case E_USER_ERROR: + type_string = "user_error"; + break; + case E_USER_WARNING: + type_string = "user_warning"; + break; + case E_USER_NOTICE: + type_string = "user_notice"; + break; + case E_STRICT: + type_string = "strict"; + break; + case E_RECOVERABLE_ERROR: + type_string = "recoverable_error"; + break; + case E_DEPRECATED: + type_string = "deprecated"; + break; + case E_USER_DEPRECATED: + type_string = "user_deprecated"; + break; + default: + type_string = "unknown"; + } + + smart_str_appends(json, "{\"@timestamp\":\""); + smart_str_appends(json, timestamp); + smart_str_appends(json, "\",\"type\":\"event\",\"event_type\":\""); + smart_str_appends(json, type_string); + smart_str_appends(json, "\",\"severity\":"); + smart_str_append_long(json, type); + + if (APM_G(application_id)) { + smart_str_appends(json, ",\"application_id\":\""); + smart_str_appends(json, APM_G(application_id)); + smart_str_appends(json, "\""); + } + + if (error_filename) { + smart_str_appends(json, ",\"file\":\""); + smart_str_appends(json, error_filename); + smart_str_appends(json, "\""); + } + + if (error_lineno > 0) { + smart_str_appends(json, ",\"line\":"); + smart_str_append_long(json, error_lineno); + } + + if (msg) { + smart_str_appends(json, ",\"message\":"); + append_json_string(json, msg); + } + + if (trace) { + smart_str_appends(json, ",\"backtrace\":"); + append_json_string(json, trace); + } + + smart_str_appends(json, "}"); +} + +/* Helper function to build JSON for stats */ +static void build_stats_json(smart_str *json TSRMLS_DC) +{ + char timestamp[32]; + time_t now = time(NULL); + + strftime(timestamp, sizeof(timestamp), "%Y-%m-%dT%H:%M:%S", gmtime(&now)); + + smart_str_appends(json, "{\"@timestamp\":\""); + smart_str_appends(json, timestamp); + smart_str_appends(json, "\",\"type\":\"stats\""); + + if (APM_G(application_id)) { + smart_str_appends(json, ",\"application_id\":\""); + smart_str_appends(json, APM_G(application_id)); + smart_str_appends(json, "\""); + } + + smart_str_appends(json, ",\"duration\":"); + smart_str_append_long(json, (long)(APM_G(duration) / 1000)); + +#ifdef HAVE_GETRUSAGE + smart_str_appends(json, ",\"user_cpu\":"); + smart_str_append_long(json, (long)(APM_G(user_cpu) / 1000)); + + smart_str_appends(json, ",\"sys_cpu\":"); + smart_str_append_long(json, (long)(APM_G(sys_cpu) / 1000)); +#endif + + smart_str_appends(json, ",\"mem_peak_usage\":"); + smart_str_append_long(json, APM_G(mem_peak_usage)); + + smart_str_appends(json, ",\"response_code\":"); + smart_str_append_long(json, SG(sapi_headers).http_response_code); + + extract_data(TSRMLS_C); + + if (APM_RD(uri_found)) { + smart_str_appends(json, ",\"uri\":"); + append_json_string(json, APM_RD_STRVAL(uri)); + } + + if (APM_RD(host_found)) { + smart_str_appends(json, ",\"host\":"); + append_json_string(json, APM_RD_STRVAL(host)); + } + + if (APM_RD(method_found)) { + smart_str_appends(json, ",\"method\":"); + append_json_string(json, APM_RD_STRVAL(method)); + } + + smart_str_appends(json, "}"); +} + +/* Flush buffer to Elasticsearch using Bulk API */ +static int flush_buffer_to_elasticsearch(TSRMLS_D) +{ + CURL *curl; + CURLcode res; + char url[512]; + char auth[256]; + struct curl_slist *headers = NULL; + int success = 0; + + if (APM_G(elasticsearch_buffer_count) == 0) { + return 1; /* Nothing to send */ + } + +#if PHP_VERSION_ID >= 70000 + if (!APM_G(elasticsearch_buffer).s || ZSTR_LEN(APM_G(elasticsearch_buffer).s) == 0) { +#else + if (!APM_G(elasticsearch_buffer).c || APM_G(elasticsearch_buffer).len == 0) { +#endif + return 1; /* Empty buffer */ + } + + smart_str_0(&APM_G(elasticsearch_buffer)); + + curl = curl_easy_init(); + if (!curl) { + APM_DEBUG("[Elasticsearch driver] Failed to initialize CURL\n"); + return 0; + } + + /* Build URL for Bulk API: http://host:port/_bulk */ + snprintf(url, sizeof(url), "http://%s:%u/_bulk", + APM_G(elasticsearch_host), + APM_G(elasticsearch_port)); + + curl_easy_setopt(curl, CURLOPT_URL, url); + curl_easy_setopt(curl, CURLOPT_POST, 1L); +#if PHP_VERSION_ID >= 70000 + curl_easy_setopt(curl, CURLOPT_POSTFIELDS, ZSTR_VAL(APM_G(elasticsearch_buffer).s)); + curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, ZSTR_LEN(APM_G(elasticsearch_buffer).s)); +#else + curl_easy_setopt(curl, CURLOPT_POSTFIELDS, APM_G(elasticsearch_buffer).c); + curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, APM_G(elasticsearch_buffer).len); +#endif + curl_easy_setopt(curl, CURLOPT_TIMEOUT, 2L); + + /* Set Content-Type header for Bulk API */ + headers = curl_slist_append(headers, "Content-Type: application/x-ndjson"); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); + + /* Set basic auth if configured */ + if (APM_G(elasticsearch_username) && strlen(APM_G(elasticsearch_username)) > 0) { + snprintf(auth, sizeof(auth), "%s:%s", + APM_G(elasticsearch_username), + APM_G(elasticsearch_password) ? APM_G(elasticsearch_password) : ""); + curl_easy_setopt(curl, CURLOPT_USERPWD, auth); + } + + APM_DEBUG("[Elasticsearch driver] Sending batch of %d documents to %s\n", + APM_G(elasticsearch_buffer_count), url); + + res = curl_easy_perform(curl); + if (res == CURLE_OK) { + success = 1; + APM_DEBUG("[Elasticsearch driver] Batch sent successfully\n"); + } else { + APM_DEBUG("[Elasticsearch driver] CURL error: %s\n", curl_easy_strerror(res)); + } + + curl_slist_free_all(headers); + curl_easy_cleanup(curl); + + /* Clear buffer */ + smart_str_free(&APM_G(elasticsearch_buffer)); + memset(&APM_G(elasticsearch_buffer), 0, sizeof(smart_str)); + APM_G(elasticsearch_buffer_count) = 0; + APM_G(elasticsearch_buffer_start_time) = 0; + + return success; +} + +/* Add document to buffer */ +static void add_to_buffer(smart_str *document TSRMLS_DC) +{ + char index_action[512]; + + if (!document) { + return; + } + + smart_str_0(document); + + /* Bulk API format: action line, then document line */ + snprintf(index_action, sizeof(index_action), + "{\"index\":{\"_index\":\"%s\"}}\n", + APM_G(elasticsearch_index)); + + smart_str_appends(&APM_G(elasticsearch_buffer), index_action); + +#if PHP_VERSION_ID >= 70000 + if (document->s) { + smart_str_append(&APM_G(elasticsearch_buffer), document->s); + } +#else + if (document->c) { + smart_str_appendl(&APM_G(elasticsearch_buffer), document->c, document->len); + } +#endif + + smart_str_appendc(&APM_G(elasticsearch_buffer), '\n'); + + APM_G(elasticsearch_buffer_count)++; + + /* Set start time for timeout if this is the first document */ + if (APM_G(elasticsearch_buffer_count) == 1) { + APM_G(elasticsearch_buffer_start_time) = time(NULL); + } + + /* Check if we should flush based on batch size */ + if (APM_G(elasticsearch_buffer_count) >= APM_G(elasticsearch_batch_size)) { + APM_DEBUG("[Elasticsearch driver] Batch size reached (%d), flushing\n", + APM_G(elasticsearch_buffer_count)); + flush_buffer_to_elasticsearch(TSRMLS_C); + } +} + +/* Check and flush buffer if timeout reached */ +static void check_buffer_timeout(TSRMLS_D) +{ + time_t now; + + if (APM_G(elasticsearch_buffer_count) == 0) { + return; + } + + now = time(NULL); + if ((now - APM_G(elasticsearch_buffer_start_time)) >= APM_G(elasticsearch_batch_timeout)) { + APM_DEBUG("[Elasticsearch driver] Batch timeout reached (%ld seconds), flushing\n", + (long)(now - APM_G(elasticsearch_buffer_start_time))); + flush_buffer_to_elasticsearch(TSRMLS_C); + } +} + +/* Insert an event in Elasticsearch */ +void apm_driver_elasticsearch_process_event(PROCESS_EVENT_ARGS) +{ + smart_str document = {0}; + + build_event_json(&document, type, error_filename, error_lineno, msg, trace TSRMLS_CC); + add_to_buffer(&document TSRMLS_CC); + smart_str_free(&document); + + /* Check timeout after adding */ + check_buffer_timeout(TSRMLS_C); +} + +/* Module initialization */ +int apm_driver_elasticsearch_minit(int module_number TSRMLS_DC) +{ + if (!(APM_G(enabled) && APM_G(elasticsearch_enabled))) { + return SUCCESS; + } + + /* Initialize CURL globally */ + curl_global_init(CURL_GLOBAL_DEFAULT); + + /* Validate configuration */ + if (!APM_G(elasticsearch_host) || strlen(APM_G(elasticsearch_host)) == 0) { + zend_error(E_CORE_WARNING, "APM Elasticsearch driver: elasticsearch_host is not configured"); + APM_G(elasticsearch_enabled) = 0; + return SUCCESS; + } + + if (!APM_G(elasticsearch_index) || strlen(APM_G(elasticsearch_index)) == 0) { + zend_error(E_CORE_WARNING, "APM Elasticsearch driver: elasticsearch_index is not configured"); + APM_G(elasticsearch_enabled) = 0; + return SUCCESS; + } + + /* Validate batch configuration */ + if (APM_G(elasticsearch_batch_size) < 1) { + APM_G(elasticsearch_batch_size) = 1; + } + if (APM_G(elasticsearch_batch_timeout) < 1) { + APM_G(elasticsearch_batch_timeout) = 1; + } + + APM_DEBUG("[Elasticsearch driver] Initialized with host=%s:%u, index=%s, batch_size=%ld, batch_timeout=%ld\n", + APM_G(elasticsearch_host), APM_G(elasticsearch_port), APM_G(elasticsearch_index), + APM_G(elasticsearch_batch_size), APM_G(elasticsearch_batch_timeout)); + + return SUCCESS; +} + +/* Request initialization */ +int apm_driver_elasticsearch_rinit(TSRMLS_D) +{ + /* Initialize buffer */ + memset(&APM_G(elasticsearch_buffer), 0, sizeof(smart_str)); + APM_G(elasticsearch_buffer_count) = 0; + APM_G(elasticsearch_buffer_start_time) = 0; + + return SUCCESS; +} + +/* Module shutdown */ +int apm_driver_elasticsearch_mshutdown(SHUTDOWN_FUNC_ARGS) +{ + if (!(APM_G(enabled) && APM_G(elasticsearch_enabled))) { + return SUCCESS; + } + + curl_global_cleanup(); + + return SUCCESS; +} + +/* Request shutdown */ +int apm_driver_elasticsearch_rshutdown(TSRMLS_D) +{ + /* Flush any remaining buffered data */ + if (APM_G(elasticsearch_buffer_count) > 0) { + APM_DEBUG("[Elasticsearch driver] Flushing remaining %d documents at request shutdown\n", + APM_G(elasticsearch_buffer_count)); + flush_buffer_to_elasticsearch(TSRMLS_C); + } + + /* Clean up buffer */ + smart_str_free(&APM_G(elasticsearch_buffer)); + + return SUCCESS; +} + +/* Process statistics */ +void apm_driver_elasticsearch_process_stats(TSRMLS_D) +{ + smart_str document = {0}; + + build_stats_json(&document TSRMLS_CC); + add_to_buffer(&document TSRMLS_CC); + smart_str_free(&document); + + /* Check timeout after adding */ + check_buffer_timeout(TSRMLS_C); +} diff --git a/driver_elasticsearch.h b/driver_elasticsearch.h new file mode 100644 index 0000000..7a7ff95 --- /dev/null +++ b/driver_elasticsearch.h @@ -0,0 +1,36 @@ +/* + +----------------------------------------------------------------------+ + | APM stands for Alternative PHP Monitor | + +----------------------------------------------------------------------+ + | Copyright (c) 2008-2014 Davide Mendolia, Patrick Allaert | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Patrick Allaert | + +----------------------------------------------------------------------+ +*/ + +#ifndef DRIVER_ELASTICSEARCH_H +#define DRIVER_ELASTICSEARCH_H + +#include "zend_API.h" + +#define APM_E_elasticsearch APM_E_ALL + +apm_driver_entry * apm_driver_elasticsearch_create(); +void apm_driver_elasticsearch_process_event(PROCESS_EVENT_ARGS); +void apm_driver_elasticsearch_process_stats(TSRMLS_D); +int apm_driver_elasticsearch_minit(int TSRMLS_DC); +int apm_driver_elasticsearch_rinit(TSRMLS_D); +int apm_driver_elasticsearch_mshutdown(); +int apm_driver_elasticsearch_rshutdown(TSRMLS_D); + +PHP_INI_MH(OnUpdateAPMelasticsearchErrorReporting); + +#endif diff --git a/php_apm.h b/php_apm.h index 4cd0ea7..8f46aa1 100644 --- a/php_apm.h +++ b/php_apm.h @@ -339,6 +339,35 @@ ZEND_BEGIN_MODULE_GLOBALS(apm) apm_event_entry *socket_events; apm_event_entry **socket_last_event; #endif +#ifdef APM_DRIVER_ELASTICSEARCH + /* Boolean controlling whether the driver is active or not */ + zend_bool elasticsearch_enabled; + /* Boolean controlling the collection of stats */ + zend_bool elasticsearch_stats_enabled; + /* Control which exceptions to collect */ + long elasticsearch_exception_mode; + /* driver error reporting */ + int elasticsearch_error_reporting; + /* Option to process silenced events */ + zend_bool elasticsearch_process_silenced_events; + /* Elasticsearch host */ + char *elasticsearch_host; + /* Elasticsearch port */ + unsigned int elasticsearch_port; + /* Elasticsearch index */ + char *elasticsearch_index; + /* Elasticsearch username (optional) */ + char *elasticsearch_username; + /* Elasticsearch password (optional) */ + char *elasticsearch_password; + /* Batch sending configuration */ + long elasticsearch_batch_size; + long elasticsearch_batch_timeout; + /* Batch buffer */ + smart_str elasticsearch_buffer; + int elasticsearch_buffer_count; + time_t elasticsearch_buffer_start_time; +#endif ZEND_END_MODULE_GLOBALS(apm) ZEND_EXTERN_MODULE_GLOBALS(apm) diff --git a/start-docker.sh b/start-docker.sh new file mode 100755 index 0000000..cbb40f3 --- /dev/null +++ b/start-docker.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +echo "🚀 Starting PHP APM with Elasticsearch..." +echo "" + +# Check if Docker is running +if ! docker info > /dev/null 2>&1; then + echo "❌ Error: Docker is not running. Please start Docker first." + exit 1 +fi + +# Build and start containers +echo "đŸ“Ļ Building and starting containers..." +docker-compose up -d --build + +if [ $? -ne 0 ]; then + echo "❌ Failed to start containers" + exit 1 +fi + +echo "" +echo "âŗ Waiting for services to start..." +echo "" + +# Wait for Elasticsearch +echo "Waiting for Elasticsearch..." +for i in {1..30}; do + if curl -s http://localhost:9200/_cluster/health > /dev/null 2>&1; then + echo "✅ Elasticsearch is ready!" + break + fi + echo -n "." + sleep 2 +done + +echo "" +echo "Waiting for PHP application..." +for i in {1..10}; do + if curl -s http://localhost:8080 > /dev/null 2>&1; then + echo "✅ PHP application is ready!" + break + fi + echo -n "." + sleep 1 +done + +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "✅ All services started successfully!" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "" +echo "📍 Services:" +echo " 🌐 PHP Application: http://localhost:8080" +echo " 📊 Elasticsearch: http://localhost:9200" +echo " 📈 Kibana: http://localhost:5601" +echo "" +echo "🔍 Quick checks:" +echo " View APM config: http://localhost:8080" +echo " Run test: http://localhost:8080?test=1" +echo " View logs: curl http://localhost:9200/apm-logs/_search?pretty" +echo "" +echo "📚 Documentation: cat DOCKER_README.md" +echo "" +echo "🛑 To stop: docker-compose down" +echo "🔄 To restart: docker-compose restart" +echo "📋 View logs: docker-compose logs -f" +echo "" diff --git a/test/index.php b/test/index.php new file mode 100644 index 0000000..814e271 --- /dev/null +++ b/test/index.php @@ -0,0 +1,210 @@ + + + + + + PHP APM Elasticsearch Test + + + +
+

🚀 PHP APM with Elasticsearch - Test Page

+ +
+ PHP Version:
+ APM Extension: +
+ + '; + echo '

APM Configuration:

'; + echo '
';
+            $apm_config = array(
+                'apm.enabled' => ini_get('apm.enabled'),
+                'apm.elasticsearch_enabled' => ini_get('apm.elasticsearch_enabled'),
+                'apm.elasticsearch_host' => ini_get('apm.elasticsearch_host'),
+                'apm.elasticsearch_port' => ini_get('apm.elasticsearch_port'),
+                'apm.elasticsearch_index' => ini_get('apm.elasticsearch_index'),
+                'apm.elasticsearch_batch_size' => ini_get('apm.elasticsearch_batch_size'),
+                'apm.elasticsearch_batch_timeout' => ini_get('apm.elasticsearch_batch_timeout'),
+            );
+            foreach ($apm_config as $key => $value) {
+                printf("%-35s = %s\n", $key, $value ?: '(not set)');
+            }
+            echo '
'; + echo '
'; + } + + // Test different error levels + if (isset($_GET['test'])) { + echo '

📊 Generating Test Events...

'; + + // Generate some load for stats + echo '
Simulating workload...
'; + $data = array(); + for ($i = 0; $i < 10000; $i++) { + $data[] = str_repeat('x', 100); + } + usleep(100000); // 100ms delay + + // Trigger different types of errors + echo '
'; + echo '

Triggering Test Errors:

'; + + // Notice + echo '

1. Triggering E_USER_NOTICE...

'; + trigger_error("This is a test NOTICE", E_USER_NOTICE); + + // Warning + echo '

2. Triggering E_USER_WARNING...

'; + trigger_error("This is a test WARNING", E_USER_WARNING); + + // Deprecated + echo '

3. Triggering E_USER_DEPRECATED...

'; + trigger_error("This is a test DEPRECATED warning", E_USER_DEPRECATED); + + echo '
'; + + echo '
'; + echo '

✅ Test events generated! Check Elasticsearch for data.

'; + echo '

Documents should appear in the apm-logs index.

'; + echo '
'; + } + ?> + +

đŸŽ¯ Actions

+ + +

🔗 Useful Links

+ + +

📚 Example Queries

+
+

View all APM documents:

+
curl http://localhost:9200/apm-logs/_search?pretty
+ +

View only error events:

+
curl -X POST http://localhost:9200/apm-logs/_search?pretty -H 'Content-Type: application/json' -d '
+{
+  "query": {
+    "term": { "type.keyword": "event" }
+  }
+}'
+ +

View statistics:

+
curl -X POST http://localhost:9200/apm-logs/_search?pretty -H 'Content-Type: application/json' -d '
+{
+  "query": {
+    "term": { "type.keyword": "stats" }
+  }
+}'
+ +

Count documents by type:

+
curl -X POST http://localhost:9200/apm-logs/_search?pretty -H 'Content-Type: application/json' -d '
+{
+  "size": 0,
+  "aggs": {
+    "by_type": {
+      "terms": { "field": "type.keyword" }
+    }
+  }
+}'
+
+ +

🐛 Debugging

+
+

If events are not appearing in Elasticsearch:

+
    +
  • Check that Elasticsearch is running: curl http://localhost:9200
  • +
  • Verify APM extension is loaded (check above)
  • +
  • Check Docker logs: docker-compose logs php-app
  • +
  • View network connectivity: docker-compose exec php-app ping elasticsearch
  • +
+
+ + + diff --git a/test/info.php b/test/info.php new file mode 100644 index 0000000..968c8df --- /dev/null +++ b/test/info.php @@ -0,0 +1,3 @@ + \ No newline at end of file From 303bf5b491d21428ec06b794ff27a64c7dd5c637 Mon Sep 17 00:00:00 2001 From: Makc Mikhin Date: Fri, 19 Dec 2025 01:19:35 +0100 Subject: [PATCH 2/2] Version For php7 --- Dockerfile.build-legacy | 20 + Dockerfile.test74 | 21 + EXTENSION_README.md | 193 +++++++ apm-debug.so | Bin 0 -> 211187 bytes apm-php53.so | Bin 0 -> 207428 bytes apm.so | Bin 0 -> 243480 bytes backtrace.c | 1186 ++++++++++++++++++++------------------ build-extension-php53.sh | 97 ++++ build-extension.sh | 83 +++ build-info.txt | 3 + dependencies.txt | 28 + docker-compose.yml | 18 + php-apm.code-workspace | 8 + php_apm.h | 537 ++++++++--------- 14 files changed, 1361 insertions(+), 833 deletions(-) create mode 100644 Dockerfile.build-legacy create mode 100644 Dockerfile.test74 create mode 100644 EXTENSION_README.md create mode 100755 apm-debug.so create mode 100755 apm-php53.so create mode 100755 apm.so create mode 100755 build-extension-php53.sh create mode 100755 build-extension.sh create mode 100644 build-info.txt create mode 100644 dependencies.txt create mode 100644 php-apm.code-workspace diff --git a/Dockerfile.build-legacy b/Dockerfile.build-legacy new file mode 100644 index 0000000..7102129 --- /dev/null +++ b/Dockerfile.build-legacy @@ -0,0 +1,20 @@ +# Use old Debian for GLIBC compatibility +FROM debian:wheezy + +# Configure old repositories +RUN echo "deb http://archive.debian.org/debian wheezy main" > /etc/apt/sources.list && echo "deb http://archive.debian.org/debian-security wheezy/updates main" >> /etc/apt/sources.list + +# Install PHP and build dependencies +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y php5-dev php5-cli git autoconf build-essential libcurl4-openssl-dev curl --force-yes && rm -rf /var/lib/apt/lists/* + +# Copy source code +COPY . /tmp/php-apm +WORKDIR /tmp/php-apm + +# Build extension +RUN phpize && ./configure --enable-apm --without-sqlite3 --without-mysql --disable-statsd --disable-socket --enable-elasticsearch --with-debugfile=/tmp/apm.log && make && make install + +# Copy the built extension to output +RUN mkdir -p /output && cp $(php-config --extension-dir)/apm.so /output/apm.so && php -v > /output/php-version.txt && ldd $(php-config --extension-dir)/apm.so > /output/dependencies.txt || true + +CMD ["cat", "/output/apm.so"] diff --git a/Dockerfile.test74 b/Dockerfile.test74 new file mode 100644 index 0000000..feb9316 --- /dev/null +++ b/Dockerfile.test74 @@ -0,0 +1,21 @@ +FROM php:7.4-apache + +RUN apt-get update && apt-get install -y \ + git \ + autoconf \ + build-essential \ + libcurl4-openssl-dev \ + && rm -rf /var/lib/apt/lists/* + +COPY . /tmp/php-apm +WORKDIR /tmp/php-apm + +RUN phpize \ + && ./configure \ + --enable-apm \ + --without-sqlite3 \ + --without-mysql \ + --disable-statsd \ + --disable-socket \ + --enable-elasticsearch \ + && make diff --git a/EXTENSION_README.md b/EXTENSION_README.md new file mode 100644 index 0000000..38bf819 --- /dev/null +++ b/EXTENSION_README.md @@ -0,0 +1,193 @@ +# PHP APM Extension - Multiple Versions + +Built extensions for different PHP versions and system compatibility. + +## Available Builds + +### 1. apm.so - PHP 5.6 (Modern Systems) +- **PHP Version**: 5.6.x +- **API Version**: 20131226 +- **GLIBC**: 2.14+ (Debian 8+, Ubuntu 14.04+) +- **Size**: 238K +- **Built on**: Debian Stretch + +**Installation:** +```bash +cp apm.so $(php-config --extension-dir)/ +echo 'extension=apm.so' > /etc/php/5.6/mods-available/apm.ini +php5enmod apm +``` + +### 2. apm-php53.so - PHP 5.3/5.4 (Old Systems) +- **PHP Version**: 5.3.x, 5.4.x +- **API Version**: 20100525 (PHP 5.3), 20100412 (PHP 5.4) +- **GLIBC**: 2.13+ (Debian 7, Ubuntu 12.04+) +- **Size**: 203K +- **Built on**: Debian Wheezy + +**Installation for PHP 5.3:** +```bash +cp apm-php53.so /usr/lib/php5/20100525/apm.so +echo 'extension=apm.so' > /etc/php5/conf.d/apm.ini +service php5-fpm restart +``` + +**Installation for PHP 5.4:** +```bash +cp apm-php53.so /usr/lib/php5/20100412/apm.so +echo 'extension=apm.so' > /etc/php5/conf.d/apm.ini +service php5-fpm restart +``` + +## Checking Your PHP Version + +```bash +# Get PHP version +php -v + +# Get API version (extension directory) +php-config --extension-dir + +# Check GLIBC version +ldd --version +``` + +## Common Installation Directories + +| PHP Version | Extension Directory | Config Directory | +|-------------|-------------------|------------------| +| PHP 5.3 | `/usr/lib/php5/20090626` or `/usr/lib/php5/20100525` | `/etc/php5/conf.d/` | +| PHP 5.4 | `/usr/lib/php5/20100412` | `/etc/php5/conf.d/` | +| PHP 5.5 | `/usr/lib/php/20121212` | `/etc/php/5.5/mods-available/` | +| PHP 5.6 | `/usr/lib/php/20131226` | `/etc/php/5.6/mods-available/` | + +## Troubleshooting + +### Error: GLIBC version not found + +**Problem:** +``` +version `GLIBC_2.14' not found +``` + +**Solution:** Use `apm-php53.so` instead - it's compiled for older GLIBC. + +### Error: Undefined symbol + +**Problem:** +``` +undefined symbol: zend_parse_parameters_ex +``` + +**Solution:** You're using the wrong build. Check your PHP API version: +```bash +php -i | grep "PHP API" +``` + +Then use the matching build. + +### Error: Cannot load shared libraries + +**Problem:** +``` +libcurl.so.4: cannot open shared object file +``` + +**Solution:** Install libcurl: +```bash +# Debian/Ubuntu +apt-get install libcurl3 + +# CentOS/RHEL +yum install libcurl +``` + +### Checking Dependencies + +```bash +ldd apm-php53.so +``` + +This shows all required shared libraries. + +## Configuration + +After installation, configure APM in php.ini or a separate config file: + +```ini +; Enable APM +extension=apm.so +apm.enabled=On +apm.event_enabled=On + +; Elasticsearch driver +apm.elasticsearch_enabled=On +apm.elasticsearch_host=localhost +apm.elasticsearch_port=9200 +apm.elasticsearch_index=apm-logs + +; Batch sending +apm.elasticsearch_batch_size=10 +apm.elasticsearch_batch_timeout=5 +``` + +See [apm.ini](apm.ini) for all configuration options. + +## Rebuilding + +### For PHP 5.6: +```bash +./build-extension.sh +``` + +### For PHP 5.3/5.4: +```bash +./build-extension-php53.sh +``` + +## Testing + +After installation, verify the extension is loaded: + +```bash +php -m | grep apm +``` + +Should output: `apm` + +View configuration: + +```bash +php -i | grep apm +``` + +## Supported Features + +All builds include: +- ✅ Elasticsearch driver with batch sending +- ✅ Event tracking (errors, exceptions) +- ✅ Statistics collection (CPU, memory, duration) +- ✅ Configurable thresholds +- ❌ SQLite3 driver (disabled) +- ❌ MySQL driver (disabled) +- ❌ StatsD driver (disabled) +- ❌ Socket driver (disabled) + +## System Requirements + +### Minimum: +- Linux x86_64 +- GLIBC 2.13+ +- libcurl4 + +### Recommended: +- GLIBC 2.14+ +- PHP 5.4+ +- Elasticsearch 6.x or 7.x + +## Notes + +- Extensions are not portable between different PHP versions +- Always match the API version (check extension directory) +- Debian Wheezy build (`apm-php53.so`) has better old system compatibility +- Both builds are 64-bit only diff --git a/apm-debug.so b/apm-debug.so new file mode 100755 index 0000000000000000000000000000000000000000..f76bd1aced72746911dcb2f129199406dc109f5b GIT binary patch literal 211187 zcmeFad3=*q_CNk4T}Yue38h#8C6=NESy}|GtSz+g1X8IiiY%7WrnFkx+NMwhonl&S z48hLmC_2u_XY}LXGBda%AXLB>9T&unaYaTk5mej&9WlT6Irl!vlhB|u-_M`Fr?2Eb z=iGD8J?GqW&t0DTq`xV2Of?z|igv{*6BU9wMhZ-x%urL~PW<=Smqc1Mc}n`gPF+`OK*{C<%|HST;5{>pZA!JZ?yE7R7Fco zf=r1=N}qO_ADw1OIxQtyx{5z_mD9cJJ_b)q$4h=%s+GF}848x}ipQ!}kB9|`2 zXDI==RFNp>$&`|z_~hf0i%$hUv+*HYr{XgRAG#Lca}_=V@yWvHmo9Fw7(_`i@OrcZ z0QvoyE(uXBR&YAphqQwFuo7D3aQ~G2jX>_y6s*H}COtfTw@=21B{DEYq z_NTr=7wJZQkmMy>QokVi$j>VAx#e$@ZaDJBS1GSn$1Oa%a9;mseP5@1es8b31J}u%gr}K`ftMYF6;reqvn^O4J(a~#9yqtZ7XKmY*v*U;N zUq5AAz+N}!q4BHw9NN3^vi<8O4Vu<(t~F1&IC;nQ@%>uQo4I>pj|F2MO82C5P_}%fpKZZPwhVJ$13kT{>-$^m-(-8x|8vMJH=T*>m$N$F|dVLv# zfA1Ld=f3x{oi89xiSWyXJW`dJ_i2c82r1y zzdO4<0Rwc0|1O3>s+J_-T5lYd1FdHxXtpAiE;3jA%+ zMgVM#;pcb9z|+{A(G8#eG4!nktyMWk>3GJ*rP{!kF0y5B%zA#hlflr}B5wC&&!3#CJ$M&0**|pZojiS^ga+4WDbGGBk2b%X&UX7cxcFHc(`jF2z!RUvG>OJ_E9^zrD3%}m zTLoM!o$P(cZ^goc+oougllFw?5|Me1)D$?VU-XitY=8<2>cBzx?GF;l>ZluINTk_A5 z>;gzh9#zVtwc{FT|6*Ej;L77~McE|z9~>tT%O!rJq;Hq>YbAb!q%W2WnL`qPQrf}x zjEynv5^t3B$7sQVOPiB6N_-wo&~e=*?WvTMEL~PxQ_|ont#_4_C?yqDHC0N9eNItH zxwGE6w5q}7te;afrMkApIj3|Jtvm}Qp)ujy$&IYBl zZdu9F>e?lx)#ARqzG}I%zQl=aS5;Yqv$VdfvZSouS?Y2s%bd%~>Q*Wx5TmrZy0%QI zSW#aEd__fdV?!nI74=RhIMz99%1f4%mR;wnFD)a)G8Cz=tuHBCqAYKytE;c7aaAa_ z)#YLI4a-WZYAR|=K&#YM)(Lg~F1d9_Uzwtjl~iS7eNri_t#^j}lXa>rZKx!dE*JE|M{ZbNT3rIKZBk~|%&h}A=j7VjYRM5T zzXXu8w5CLQ0~!~usFBWwSJW&GfsWcJU|QjPXMJrbKfkyrqIVRMYtM4l)z-U+O-Vy( zg|o!DO!SZjSADf+$z`S2Ibm`*KYKLEtdy|i`;*sifIisGV+D9(W13=lD?rDp&fmRqNh@E8Ywy|T6&p|Hw?u336v;K z5x4}drz0yP&u^@YEqJ{aZDNxkP?R|v8l;7mE~5aap#BPRQ(9LQ@|&3USr)2>^%sK< zn*SH1TgFz`7h!~mZ`AdES!&TJ5Z8s6P+hfzn2l(t9Wj~#y1N8}7ssHIk|jdTdTwdt zDO2Xoa+J(0F1&p9Y)8q($~1?4@|2QMBSwvo6BTSqMPEkV9VTozPrH-T7nv6)DYRTI zCA{FG(Gw)Fdahb|O#&)!_<#Hpyok$Uo;xav4XA%jo{p75obp@X=%V~(GN0haepN{% z*+!YKJtxrSU+r=tIqxqvA`k6X7E63v6n^#wCR4UV;Y%d`SQNfg;%%F3Tu`gmCGqp3 z@NS83i^6OCJEHKv*XoVJYxG$UMb`VUR&Nwuqi>JGKO^ZoqVO91$te7bl0NI<$a*#U z#ZmYJlD<6(|GmWTjl%yR@h7A38h!R7k@fbyo6W8)j>33|;_IUD_euQ5DEu=Le;^9qA@QcaN7nnqUBW(jQTX??dZX|f{iZ1Vajo7c zyw>iP&5`x`rQPzP@Tn5t6oohaLCCo&3a_<`O|ExMf=toi#ZmZ4(oZ%-;rmECY>vVg z=Lm*dqVRbVe=rI^MdL5y5-sOaq)e1l%D54Y-xmX)EBkvi{l*x0lkBI_^cLyo(fFnq z_%>-5#rH^;#HW8jNr{2_hye73~E z+jMr*)3?RIAB%yXC*wnOy&W;|S+ZY8)3?XKpNxTDEc~g**bsF>$@QaKJN(| zdq-lFJvYhz5?${>onL9QA7Zds=O=o6y3QZ;_~saRe++!F&L8xA=IPo?kMD?q->0*K zo?g+(pUxH$Uz>I9tH(F%+Dni3$G{is+DlJgr_*bwuHFMN@Oe5v*VAu`flt@Tqo?1Z zlShxY>FlG&AJp0N9G#r1&OS?Y_-vhD(Q{nw%GKd3H6&71hnG`Q&MnsA=j-U_>F{Mb z{9+xxNQbY~;TP!ebvnGZ7fsnsI=ucIK(h{?spHe8!(XMtx9jlq3}3r8=F^ag`~e+)iVlBJho7p$ z`*rxsb@*dC{8AnMqzF`(T@a;PM zVjbQleRcRPI{eu>e1{I-Plw;D!}r(W_v!Ehboc{0Je?iWu7f)KKn;o1 zufyAP_+vW!`8xbb9X>;cSDq53$v+3_@FpF8unuq0;V;nP({=a@b$FW&pQXcR>F`5z z_-q~iA{{+mCW_<1_K+`{18#X3BlInu659e$LCL|UiA zU#!D7>F}d<_+}mc5*@xxhrd*ZZ`a{-b@&ZB{AD`)Mjd{v4!=ofQ{k(1XCyvSQvhZ;1q%t zhIbK6Aw6*HXCMY|C742a;2^_~6HFmIu#e$~38v5;=wSHI1XIWkY-ac#g8LA>k>TGF zoJMdv!?zMlp*hgZ@XZ8MNDkC7d;`HWg$^ucxSn8|k_L(yzLsDL)qy;Qmk>-LI*`rq ze1a)72W$+_BA7yQz{2o!f@vxkP#B&}Foov8u~Ve~Sb}W?A7pqG!4!%E`xqWdFoobi z2g4ZzQ|JwBX1E{0nFMcSxHrKRf&=Xg_ayiNf}0sO5=B(8-j-r zT+Hz21P>)RkKscEQ>YDOGyE>W6k-E5hW8Upp*3J(_$7iVqy`j*cM(jXG;r)EZhwL) zga!^W{5ZihRSoQ8_+f%6WCl7I{xiW8Dg&DtzK7t^1aD;ccLa|ixSio!38qjPXlD3k zf+<7>>KML(UnP?#>i*3<1!}mv=J^AtSoMxu5ZL%5*}p6A$h$iEJqt6B zsh;Z0lMo?Y^_)_>rm3XZ&c*ohKSxdGDa=znyVWj2D{5CB1xHGGzKN8A1;I9%Qs*If z9;G=Q{!PThTb*f9JyYhX-i4Vaw0SzTD*zel-{JYVGpugq=faD65!uzM37 zzJ%W8=m@C}FQid@Y4L!HT00!(f?cX7P~iDdMZG4^N5OrPS>qF$L?p~02vb4AP^=Zg z)ar$qOx}yOv7qr?34S+$Xr%><@)zbW%D*PRM79?w{KroaEs4?EVQz`%4lpM(oti#y z9HUO8{~sV%JE(eIAwPuwRc9W{_xwbzN1Z~od(r%kOq1R7eZJ@Ioa3;7>iJCd6aeMT zGda*TaBsmq931xdS90wMzrD$(G&flk*Vztld}e{?Ylr9a0?*-{Z0Af!p?b$>`nUZ+ zHwmjjZ1+GC7z*zDWr63jpoM(YMm+~kS)Q3qK8lV&jpyE@ivC0W-M@lt;Y+);j2v~$ z$EE1K6iLwao+D9wY3~AsoPX+a?njQl<|MK`A1w&9;)eSp9Bocv&L?wct80#K0uR+Y z{KXrg$Bl@Q7pvaq$bYB-EdE2sQMRj<5Ok?)_7FXKmS~aP6{3H8$6T?-rtG8v#QzZ$ z@s3dmK_iI&RYoAZc<0SiTi5)&kKYM*bg%@2JaJa7*!{KQ1BpmK% zvWHO8zhAWCzgFA8^tle^jTT9$hdE#Y)kDAslq&)wO!5^K>1rifx=`!@C0(t18Rpx4 z+ASNA+o!9Q$mjy;LB8Qzzq}2!z*%HJB=`HwfBgGk@Eg@U6ke%%)7n|Y_)PXJ^&%tX zbbMpJI-v)8;5X)Z&l6(0=^OLH=PS&8Ix5WbJH9nrTaSUg|0p=AJ{QI2){{UyOEb%y z4%KtwTlJBgpuZX_wRSYFhOW=9vO%RenHEuVx_S}c?IN5_y{OniRo(#~)T&guNU53P0Bv({}zh#_$vIx3`Z0GVmfk!@tU8QTh?Ko24+tYGn%Li zX8YN91+xdiEZ_uLJISc2S7_7Ac*{a~DrK`uq(W9i_5@@H&Iga2_W~J6ME}X3gHYr- zG1v3`Z2!S;$vYD+y8-<%SAqX}=j9zq6?7tE%(lVVX(}Rm%;%sU1ZvewzWOZPc`P{{ z)IkwFnxP7^5&|nloHDn(MhFbZh=mx45m_i89;1LrfiR0l-P=LqfBGA;NLtq-qW`ck zr{mckTol9M3;rq+)0g(R$W%RFQGPt~?Z|Y9%zKb&_v}GoUA})LGK;*07^wPW?ogUZ zI`}u{3mndP3K1Tx5d*UVA82u_yWyNDqUURvnT^RH$$S&eLoyqBnfxohBf}0q*kpq` z9MN(*IO18s!n9z~?(lfQfh^}efBDy>Ej3WvPcA%I^ z6z>Axe4_;t+*tf9tx*`C0e4&hc zT09KSPRGRO<1G{>10(PiqSySJ#fmGjmbVOVrlhv?*j9Z-R?$MDBEG1tHQF zNCXT;o)z}12|s`!=eU15*}*$z6_I-maC`|xmlV_!FhQzN{LY_)mbvRXOy$YrCmy4T z*5Dvll`szpxdw;cv{A&qqj{|28n1fi=N&Qgc;ophINL&<;6kkvd;wY4GJ~|g69Z3t zCNP^V7bTZR4;YY1ZjVL6p7g*tFr)b7o3Inb zc2K|TbQ5obf8$qdEf0jVdmqhgLfvZX7v`3YbmP4dWo8t^XK$nGXoJFEf|?NA`>Wn5 z#i|#Rl|G4$DVi}F1}<(~|f=R7WNXhiu9-Id=c%D;Iv>ZeBW zyTau;FI+#(T28Bfvnc-nm8X#J9~~~wdExR~BFZaDm&No&`^1a-uMt^GBe874@B z)#@~>nL4L58F(GKDphH`ws}<_#pOWTUXD^b5~$*Td_l{YCo>mwYaVxvP`!zmb)r*e zsy_DtmU9BdV_uu6{uy5egPrbeB$Sx%41l}Ci$WeG=8dT1&^+ls{-v^xI#GwY#f2_O z^%R?0_nTWP2=ci*L|xOvb$x_#o$jqvS0EomSj1zEqI%xqRjB(Yrr-NjUqNQFYA*2e z=8)X{Ndr6)XPDM}xuXzR`ntb@aS?*|%o*UBF{neB?r{Kjt_8 zu+TNAu;s8mrSWyd=Wil>maA}ur~=Ijr=0ueZl_^045-?JxhHS|J%>nemK@M)0B0hIfB zPREgLk^2FN7g)7o9g**Olh+lzo>0v@_G=3YEP)dm>um@>->Tz^vsYtomB{OqgK?<9 zyWFJuYI@OXwjN8OJH1pZ)|qQM*YVwKT1H*~;Z$z}7NBve;h6o|kwa|@MvNG-$l)v#1jYRHv_7im)cAOF%WuJde1f?p z2aQpf^Tqf?b4y=Hz}9C9(wSN<G6iP$@%8Bf541G^~SMb zJ5iX-!wPefVSQo4zJmI7hTUQtI;#*TUS~Tz3hZj1dHGO>rwkFfP-(8r zHw6AjYe~7zna0a-C{A@XQ&i%*SHYS&FVYkn?K&qj9vfb?3|3*cmJ;f3QpVYk7Zd4t z)w>FE4jU`1b}qSuq08@Nx#Gxx%rz4l!4yf3aSbp<7wm60yrAy1&E!+$HoNCWCBL)K zltl)jMKem#qWSV8q+TIVd3DSupGF{znfm}??q+Vu2EzPwo-|}33`uY7XhPb4wIN%u z>l8Mmx>YkI#$25to0q|e^TcFVv^U(y+{)vkw9B>Jj;l;++1n0ZCd^U>g%7il8`(6| zQ4=+a^r@cU7WhkO{;WxUh)c|dX|L@oOxr??u{-$e+?wlZ@N$Vw-NA1G!G@{_J*&=y z9WFYPj~>;>21{ON3OuH3Z{e3egNwskp?P`@gnJ$a3we6}a}?SF&tMBo_(|7P;UZmA zEwtN{v!8cLjB`L))cS=CO&4aETb4jx2ZGx^$P}2%!gKv>Q!>hjWX;E^tIMs;f#;DwNX zYt?CvAu9F%^;507z&X^%;6L4p)f%Sjfz2u1e6oB0$9R)3CeAa$CC@|2@V;o^N(>7O zYU&`BeJCfGzn$k;XHjV}Fb2lau2@ue2z9so9ZAsN|G_6=x7w!Tp|fx%EbJ&N z*EDQQ+VKV-dz7}a`P^ircO)95fIUGsbU*p4nkDyf46Sq z$dX{Fv?+GtiAkr~Hv`DR)=yknLJ)JyC`5B9hf&C}7;;o}#b*zb6^h3$5A%q(3M1YM z8SxH60|&+j)a<})6EX}S8F=!6y&p`_CM{rjJ`M)mCk^J-69_YSE@4(&6G@*e>}EBN zMzkK_{@ifHB*sb4Ue%`>@N|Qas>cB;ENB})Q{5d#!qQedWEV0WKTRfj|67LONf{Ub z2GBf}Hb^yfzvaP-=7cw$CDb(#2D9m{LmS16z`=7B8(sWlxKYUoghJnw!UrT4d`sGipw-y?ZEU-N`-8Msl`FY+}F zv=4c$$TxbD7`E=G40?F>qw0Cp|NTcaWHp%NaFvI6a?2VHE6?1FgrW+<-+iExJ^Lpf z*76X>?ra4C4cu!w*YX|DR$N3X)uiX*+V~B6Vkqd{Vfq3ceUqLZli4hCv2c!aI#bftOa&&~abTNq@joBiN$QxNTjNL!`&js6}R#wg2G6Lpyc!K_1ZUS!E)(e1( z83TecX8h&DklrTHi*>eGY9w-BL)7+N8(PEN%4;~^<8s9zZmHGi@D?rcV3yYFdoN1h)hV?&UA%o0^@II7pGMyj807h=XBRJb0%8-zo_58-wWw?6!o7$Uf!pBnaHJ{UxD6H=0bOpgD5rL^8S&cQXt^D z;}uXP+@?o9gAP$+FXw72oieUSOmBYri4-EcC~`cV!w(>N5$#PlSZc$Qv4YHEBA^>= zTqz1t2P3>2nkjO(zGrTEgl>H6GH*kM-Sczkxj3emG=${R{^XRb(|K`dd<=V=syCG$ zfMj`RVQksd4mKETuz@xO`)7+yMXjHhTjn#_D(tG@c`wcXug1!a8T=I%RJ~1@4X(~C z_8Z@YC4Fbzu7U?drApITUI>E1B3zsWfw9~k=Jt;tZ!oW=U%j!*9gi=OW%pi#0qQzK z(KuRI(r>sFd1|m^8i<{tds$0v33Us5#_qlfOO(y%014X`JxuWi5njO&afM@w1`rrO1JlQ*ugkclRhY9Sy zMF#u0YanMkN$$CZcV=v~82 zu^AI8OrQZ*0!AK#ma|)?pfAWa=V1!mqU(}PtR^6-7 z&B+T9K&~!!^`s7(?tcr4tL}nKive-U?!g{c0|pVCnV=A-8{FG5tF&N(Vs7~!`F8K6 zJ8dAqf`U8ANa`f=yj5pj8kFwhK7)-aOi0n^UhprZipqAY&mWAl59tb!y~Oz9?!sx6 z6(@P$@iU0rd{dtU*V5*j(v-$h?^HZ8Gc3Qt?Kg<}rds^FiIH};%hPH1PCE&wRXv!o z=OMyP1-EG@5xV+dBa15UoSLSzP3>d%tT+kQapqgTLB9ghK()F-LpvaUdJ`*vBL=f) z85|OhKzrjj+YvOk_9k_^#NHTE{aBszo?J*~zXcjkBD4;CkD*D-OMGsg2>7138A9aj zw__X2-y=-;G85(@i10p_+~JaRA3+?+(1H4S9@ibeXTo#}4^_l3YTrrpItpn1HX^40 z>Pe(%7TCiwv_L*N>p5LfOh=xBpDTU`mleIX12Q2b!tuAqaQqV=;vt5dpB+;%Ka2MN zPIsq>^Ovfgw;SK3nHfCU;j2aW#{}))&_)|cG@%?rj;QW`7n#=@D4hDl<2v6HWaS)K zYbwQ-2j3vWy$=OR&%o>9@f!tBZ;usB&J8y}+V8Y^mW)~sBE{eU)`2z9U-jKi4XgT| za8u&xl609&cMa3s#5{$4W6^)NpZE&;1K1Y}jgOHEB0PV^F0=>qh-aiBdetR>im=NY z7|Cu@aGGI4<<@}`V~i~K^XpU&7WxBM*=;#!1ecvdhwRY@<)zOBCbN*j9>ixa@&c`Fq;O=S<5p(}oQMR%f4mEdc?vZf7@F_E zKU_)8xkhtqK4ILevJ_Wno^Tx=JKMciB6wblp@QZngUDI1jM*L@Dr^x$1y2?@vb{m1 zG!64^rU@1f1BmGM`o3WBa$jZ^g;fq~X7~3Po@V&Q<5AWw{}Q$a*dWMKfIJ&A@be`h zz-l=;qUTFv!xJHzXvwLPw<${-I&}My|Iz&DpFCWW-j8yRv=8~9$XA}Gh>_s8$W?vg z@v!Vehv#$uW6;NrIS&hrdC#5D+wNPKX%u73|HNb5nA{a_ThxhezY_^f5b#G8+KCy`)T{fi)Z?+FY*S7Ypm+EVpiuGg-2n-#*cRm z9Y4W!!FW5J6w1%y4xfo4IbVQ7CUY1BP|gcz)~m}&LJq}4^2uB+G(cUkg}lH(sXr>O1qe;7AEM&EvnEXFZekty^LN}&wEAei*QBrStl0HULVe+KU-|R&rE@BsD~G?|d< z$3-k^wxO)zPlucwHo5|>&^`t^hEcJ>8h9l{J_@Z9Ub6+hL1j9yf5eI|@G~4#mpeDM zWTC2V3RgAgxGa6Tc(i-Zi_e)vE`xsyL_3{SE+O-`^I$oU=|xaq3I4I^#o+qY%fw&M zzws@3(HtzyFxM{je}}BrjxE$ws=1&556FFI9T*FMS8E=u-2&=2n7lMuEXxO>haN>< zppqOkw5|*F%Yh*D7F+OY!rR25tWP^4WAGq$_<1O!n7tgikGoMB2Ggrqsw;UY`xZ-k zaK9eqcv_u^8hA?PzZi{7hd;ZtNtvAViFqK_#QsuPgJzra_%R(#Twf#1>GIw4HCJ*z zDmijDYCC=zZrX9vgD|(?rY~*+w_+Hf$B!g5Jx(BT!vpaB{}4kW94|12DWe|*@wm1c zWYRaU!88b3%k33u1KMJN4dxOVx&?823VwF_V+?H6F~f@lL)!A|W(@JYL{ec@N=wPW z^UUeA2dHui@iAz%ItwA2wh{<=(UAA)5zva-u+xiqBaX%XFV*Au6yg$xKq9FIakQeU zcMA<|{-0k29+3`59ao$kW)q5VBhbTS@Y5dH961!N`wB)5#%0XF57YtJVSf6hf|z=Svk{& zJ&$HuHSETCmrw=R+iW9{#=o?y0pnobR$f+M2;6F=C};kC2hMV~)A@9qF#2AeFv3&- z=O{+f_=uNYXj(w$J|Z5SisvcX)6op`(}g%(-Z&@lXE3d3AD?7ySq%Q;dx~+;+>!xE z+vlfWFOOnIKSWE+h|lDG_RB!Qm4~@PIe;c>X|+{l0Nw~{=d`cYnc9h z3==y3(ew=ynYW8+H#2QB7$D$8hZB{aI1KMXhY`;bSAZD)665(nJQ0e0%p-r~d2{#A z8Q$*<(FLY*Z|t7#NgdsnEM^Odi8)L6^esC2^}m9Cj*kAQZhtq19R?G*umhhJ55JGr z-HD46FNCOHV%~XZ?;bq0dWF6HD$GZ&HLBxk`DoOwH?v}Ld{R9#F{ADBKTb@<^9nSX zB_o5+mxUcq_$vpd=#5|6AC^OQHFIg;a~y9&mS3VDucP1pE9jGT^nHH?{rh{u?N9Wl zi_Q{;L+2w@Kvz;{=s_*5<7gDf!@$G}ICvrLpTia-$aBVuWMeyB1JapxGe4v+? zObD3%FLyy-KG~*v&ow|!bIU~>u)J9)SKxJLBf+~0t*D50SrmXf6j0#RsYB1BET%t< z>wO^zJYNAl4o2q*){c>=S>P_@M!tP9l^z(PvZ8>5;hE@ByArShC4`L zyd)%Ez3V{Pbkf9gXh&K|wB^i=Pp4zhbY*#Or`Dw>CtTP!=C3daN}fmd^NLgKyXYRP zx0g_s7G-~i`1D-G&Do0UBE*OfsU|@WeGZUSJ-fi??J(Yd1NhLYY?kEruBd~IN3taN zA0kATn-Fy2Htdh?kUzS^{^)MjNZ0J4W-svga_qMdKkqiOF5JUAN_Fpw_pJ~9{PWKz z-ah~9H6J(Qa``>4KL4fV#PhWBH5a_9`s$5XAib@;sJh>ca}4=h9Ll_(+QsZnAyx*w z1$5Z|1XtFGDa!p^0p1-Qqpy4cS3Va95r*|~jC(|spNR6)edBHZMwE7V9^sPSZPGVz zV3-RrS{yRudK>B`V_8>cd{$54(e7Oa_m2h-d$+k|FG*LnOC9Gf#@%Y1Ru1)mesI?- z;1TfEp)9!Y`B!o8zYKvAJN0D!&>RbP=KW;d$wqcf|GFI@_OOiu6+ujd5kX)%UO=ru zN((s8?W8SMJta(hNYck{0NF@qYzKZxkj~@%UQ{O!_UUT-`Z;R;xfps`Jcm~_jJHt< zw9!}~_5s7a&F=XmA8*^(-FxDFH?vplKY!m~c8bqDyPp5t@{sU}U3M&^jd;!XkkVnt z12TG&LhGgi9vk_cW_q5@_Ca{Nmc;P7HzazW-Qdq>h3H$>E zA$exQP+OSyxdw=#Uc{C{7nny~AV=2)&P5makcJVC*qJ(c_Tqj)fZnICXcz3m`sQDW zsU5A!=uNsh+HA1EP`cepyaA9+Xd9vZ!-*{(LBa_O@YMG_(#e-Lb|_W*{0^d_A?6vb z9IQA@-3^Yko=?Xb#_SkZo@q0?eVF6$n-8lp^5{pm8}L##UVgxiv#WGj9nQ}rXN>L4 zOToq`xX|ku>CEbH7;|HHv)KJh9r8II7-y*C@IJQLjeoPjQHq{uzPy#1iA2Q)s;K0A zlGk^gMIDEq6fnCV??IyOR(EC$%W$o%b7t7LjLqQRR>uMi`|O@^a1m#o4VqVjgL{<; zvy{J+C73M@wYPyI;$5m#z6tfKIPU-Kunhb@dUaKqx}%i;;X+lp>L~)BM!W@5Xn_R^ zduPxFuCM@aD7^^_IA}eHeagkp(zDuOHYw;8V5>c>#Zzkk*T|Ntkzgdqt7aAi=l-}A zcH*%=f-UqQ1Bb-joI=9Wxe;GYvSd#G=L8L=ZXK3U-dGQD#ft#7H5p^^POSSFw>+x( z)_hGu+eLWSS2YjYiy_zCwx3GEi;8hHsaAKy0R|E0-|SdK$2gai-$sXnUT^$oShx@Q z=>wk0I(&@-i-sJ=_%qQVTB;on!1;{BH*^l*n=Mj(dPphM9|_|X`J8x%gw=1NrvYe( zEyFVSUqY1G@iI|VyPeE*9k?nb3>{QHmF>p^-*)V*FRM+&XI>YqMM zuYp1@tJI5r1&jO-@3)S(DR#Ia{wYRXZH@ie24@NVvzCk^a>&j?%h)1M5xP9}(y}%` zG^CDoKAO8b-Tu4w8Ub#s7k0A-I);4e@KsMxWXD=66yq3u*njs^G`FKZgcDD8k7I(nCg&t=#Izx)k)bdPMm6s*KLOL^K)RT@7)=dzBbKRByKbjU&Xi zlHa)1Mv}*1KW!v2Nh4lNY7)*q@zz@vU60>dmbig$$Eapo( zemx~WTHaHjLnm71bXC?OB;(b&Y&z0O{^i~r@-M;qBCrl~e3wFy9P31st-lakOlvqi z(vifQ`3^t0fa#;{Nh(Tl7K5p!Gd}x9O>F-Q^mGGWh7mOAO7UL_lZVD;ub0*$5zhr| z;0m9>;_KxTpmgu4)6S%5`-zxW{uVTN+DH3)Jc|`V{NV|-CdL>cM4%e8A)5Dqo(Mrt zKNz5+zb=x#{HGATSJ1DEq#qYazYwz!$)5WD~cXF^F$9LYK*lP{)GJRJ+3!m zU>^3j1^w;q#Mt))sjZX$5vHfHo{S#I!1lT1f14y+)5#@qaF7~lRV4puu&Q*r*Y5nh)&vkcB#X(!1;rJ@VfsPD_@9-@f7;4?3A)kszw*C3(b89n%3_Y@? zX?a1WtqAj&Hy;xYBh~tz)xv!E#6L+SF-n!a7#1}Ayz^I_KR;d0{boeB{*eWe zW&esvf8=iw23RNiZ%q1ak@PL0{u^};hkl5Q`n#9tJ@|zvM2FZ*4LUlSe#Z4i;GS=3 zy%kfgL6LG5;Bh&{m6-J3{xw4HWm0d|_j?{(#2cErIJcYWLvcNgk5y0{{XGYC-&1!) z#>Lws=@&wJ5$8DMgnmB_=aD$(_{%^~3lVznl59l_lGh$394r%XadGN5p~u&rBRHGw z-hJ9$L?B`>LiNq2{i%1A4%Pi$oH~ThvaOg9UY3h@_Yn2`AEUNkYN@~#*cebF&WIg( zPR9GTP`vl>oos*N8XA-X{}b|;J8ucmi;{wVK_q>@F#W9|dKwuu|GFrW{=fU<|<~OA9K+Cg)6i@g7c~4`OY* z4t^jC9*v<~pI?C3*RDOS;OR#?aU>~iw3{Md*_;nqbrXn3z9Gj^&RDKDO8YY+%k>xM ze$H6VO65L(IHJC7q8#hRzM&a0BUWW_r>@<8#uP2ozGt)-riqGw>qDe?C=etc z`z87Fx2ICMn79)!PlT8uL zc|YRK8Or2u$Glwe|2?u0#Y8N=9vWfe-{VS>kG~pw;fa>kfB5&Mo`Hb)O*K3#-A&tM z7Hs&qsL(hCM=ZBlNb|-NWYbTJ$meA{F-$7{^?#unZqEV*&h?pFZUT~i@n|KU{Lq#@ zzfVEYCm*j+np=K@J3Nn}-EGCZo+qyEZM4w`h@*CR!~3^bicpTj>m_pR{XKjR_Qt%~ z1bE^zu@QbgYb!RwU%-7}KDJ~*XaFIfNdnD{(5%zV8U)568_(m%oUhAYq|5Km`CYvE zPBH~bh+h|r!SEu$`Byo76Ke2d1@v02-GkR^=Xy@%1aaKsTRZ{TfMOVD2RL}d@Ref< zjqaKaEQgg`?Iw?I{2gRHY&K@m0F&i^jP&uPy^=;6ip@rP4mBOV}l(1Act#$`L>y8eIOA>fjo-xt}K9>+oHUZA?dIp4t5~Z3f^4iyhiFCcklz-R(AJwu9baVpfwNPwcrx>}iE# z$f3)9qp?!OPe_{GN$3c8*n)k5!~TQ^VH>O@PzfaDN~R<175SzPbd1Bhr)IYoqE7eq z$+kZm+Q-~FHiQ3{V1|9$FmYGn@bq+eW`X5=OV{Ld+U~6AnmhnIk(1BEP9$Eix8ks&h)?j00m}(yvdo66T1g2=lN(790JBmz`N)b&iVg)ny5<=_=@;F z-qj>(I*Xc|ZQlY>8z5pm{Tzd#E8kS*TA9(ApNx&H)tR~Gwt-~+vQxAVQKuaZR-e`0 zDslL39EkP9Njtyy_;GjdmE^Zg;`d6}bZoT?i6s`^Xyrm|FP_8;wz*OdK2OiDP>~w9 zv$lh)huUBT*xZg6M`-7F7aTFnjy6Kj2-x}MMj(Hg?n}<5-37VzyEDA?o1=PGV&^xX zc7F3|=QqOMOOn6}lEK*0;`Hw8!uz{7`kRqP{}g0V{;><~2cu(`f{lJZM8nzZY-|QY zdp=73*9cV}Mk7i8pNikDVSWBY))KqI6;;(v+JCWhVxuHV^rh&I_?gm>;Qj~y93l01 zxC#qV5tf=>QyUqUnq|Tc_LGp>?kh3SRz6(CC#25BVU~rNxdkxKfI@o0`c#DIZcTL6 zcezOwUH5kM9@;6buBsuqeTxPjV1+NN@1U#%xv0tR7Lu)M$Z0NNiO zieIyx8TQVRVa7FQ(Ka0{+DkB|kRbl&H8)&3_~M^mgL5)A!T9G!ajx7yg4j~n;lAV7 zu|oraU5w4IJgl<@{SOtTUk|;4_F7hWzt?>VN9iW~h?$+a#YT(!^*2Ca_bD5&_cFF8u;J~N&68k*9J8vUj!((BwZ$zPx=K7@Lq>XwVDJ%wF<$|=%yYoJj zv-_UjD2j9E&q&mU8Rgc?YGqw-+@~)R*iO1(etY5r&3(gr zKWf=495Q*&;MeT0h{)l)Daacwc#zckPq3#47St}>3`IkJ=2yel(l}#}d>NX5+79u; zKN2!>aOE~H@*E31%3>CrRs`?kyhcQM{(t|8dIlDH#>iD z%8Q+3oDUGb_QoG0+CN9OKlV*MpcnpmEAArd`x6RIJHDzT39}BNItQ{EBMDn^0$QeuWbgsY-f5M zSNh2t_tGI}`DB_sg@(roz=oaW2ydEDc`&$zQoHXN5?9B^ixLQVVSoGa4|*2YNPokG z(Z&_x}x3AsZdD_N`KVoCW?z@uCczi==JU+x3 zkHgemyW3dF^S6=4bi(5dT_&&>y9JT`oHkZyMi`0-{+;*0mVA7^)4X=R0d6R^F+#l* z9h|o@`huA_7Xp84LxTu^6`o5!k}aM5OJW#`i}aSRDR3zoRp+m0IxQyoCxzQDSxtKZHp6yk8|Zk-0rXV75vDb4?*;)5po#Vk6ajPQSjT`>4V$!Sx z7Sa9;{lA%3yf<}XOAy;5u4MiNWBe?285c-9I>4rQZnmLk$_*O&HP?v$?{d_%b1}I2 z9~TAU&b8scw-h6QivMqd6${>3`2cKG58nCmrhOxBaULe^8F6dF?H%G4FTJK!iCdi9 zOzR6~D27MQX-^2Oid(<9&Bg69ahu0`N308NB0-$|;v!o^V_jWsy-OK2B4@-X95!JOzQEF*bgUiX~%ImAJsz$L{&bsQ-vPf2iO|JUVG8ZAs zOI@Wsl>&U*N~`OgrR6JaRW((vs?zGJ8=R1&WOm`KD+^~SvkI@6TR3}8$=q3XMV&LJ zxI~>fdycr9RXDY9mX2hOy{J%`J!O`?cuvVwyQA>(e85`yqQW`q%mRQ#Gv^eRh z!wCB2&Kg&VR*E=~Nu4D)*Hv~MsSo>wkX3a$pscp`x+-Ub4pWDd2NFcfm5Ad}wKXNK zN*w2?tgVJr+1WY*an`7=QAZ%^qSE5vjy^9(lr3*uR#&pDw5g=rS?8)`cFyY323J*C zgR`{0tTIBG$Q(Kvp;XtFl~(f|+bg0dd*NlHq?D0`t7^)fO;p`*IFV30l7Q5yDP1NE z7MWF7+R(6~w!XX@X_u6`AaeuUNEw6fpcGWquc*v>YZdn$Sny^H?q)}4m;L13V(?* zmQWowsdmfwWz4If-SXRtbU zaM9Sovz5BidYph_!zyLeEp@jmO6zOL%w@I9>R_o*mVmTe?qi}9-$vkTYSC+)N`tGu zs>}romDM5`Qv8t2xCFWxa!OqYDs(L<)b|*h2%w8>Q%fO3xy@Cpi;K1?b7wg)f#+*V zZH)_|X80UzrH-}f!qCX3;Wg#gHXz{h6@&k5xG;4Fb{<=8g>7)Tt-Q9ZaT$0vP_=^* z#OaDrelm44TLY*u+LTe(s%WgPUfDAiJ&A5(yNwmB&&(Iy*M?!CtP(cJ8eBePn609^ zv7r(YYx>71KUI>U^s-V6DNr#&GyFmkxibbjTSH}|s~o@Y{44a7ol7TDbvcwTtF0+- zh?0%Q-|m`ptSz!vQpB`XHQ3-YHt?yaTH07oF7a#2v#)o49>y5mzf8R^SN-$(ih(uKbZ2JvQ#vikO5a5U2Q?+6B4kly=y&?7yHl-@aAjk$a> zo_W2GbUf0RvD~RfT8-uO14xe|eG}#P&?9{m>32xSzXCZidtHsxfpq-q;EQxS z(npaF*bjLr{WKWtgFRRW(qTxe55q180A+ZC!DG-zNwG{#NuO@+wZhb_OzJmo=*5{CluhLe@Y#D?FgTnL3sNjIQcR3r z2=HJOo_M!aU18Ogt&;`9r#c_)CgTv?ooV>0l$i{m#5g=arp7~YEg6; zP%q;6)AaZ6W7NX8+xXgXd{9z2fly8Cl7vbCDBh#vD{`X zOi5oKH#x=Ti!V&cT9=TYlD#&uASKt`V`@rWoXOBLB^Rjtlq`@;PDw|R$r?+tmjir? z;ZO9>El_{r+JvHY@xC}mO7VK5@h%}J>km3V=w=Wd>yL`10mcJG{+bSdyp`;ZN_<9C zwl1z9#kMvcmAezBrR+1*^-ReECSMa{n$V2w@FvPv-Wd#Dje9D;&WNU48#e_Oi#JYB zNk^5Cn=;{__>li^0R16CEN~~RjlUu#dtIE*X#8EzS6=Siono5aYo54KMuUX<$vmt! z?m|5z|61eBlyo=ASJIQY=ckxv^okn*d!ewgQ9act*MVi=a@-5K)UaI6NV&)l z?ghOC{Y~=?Dn@*s1l|PvaI(*A(rRtoI-~JMw6EGLZmbdMRIQ!KH$NeI^viE?FY1NW z){?yL_-QHG#)o^d9fesOy%qqRqDhl48BzNVLwz0KbBq?0Xy0}5^HUbDP4LB`dD~EF z0cah_nghBvJg~H*e^Gt6QTyrrsvzW7(^57X;)>$Cbu4aC;z#kN4abq*pz|S7{3eI| zG@tyGJR|O3-SeAFs*qjjUH$Z(SnuOry9l2g4|@Zjq9KtIJ`;Eo@aO69B-eOJe>vh3 z$tC?XpZv5y_-S@rPk2EVP$5S}6J3WUioi|lMfFg8v>^WF;aBnR9mrRauh51E?7H4q zkdp4BxU`P?|5}PmZp0CPQuW;0a zDkw;?Q0S)iZ2>+P_;nI*yhXE?qO`N{h^sOsl3%*0S!Zt$RLQ?YEb~hwJ(=X!Uevuy zWjSgp{iTmtdb~^0>-(5Kzq@;?hyRTfQaW0uzo==tyZ&2!elO+2F_DOiLQi+se_PMP zvL4!!)nC#2X?g!`J^cf?|MYnsbu=3xu56Ps; zdiq5P$4Ahja0H%^cK%P}PSZVtnN1|2Z)*%j|E)e7WIgAHY7jT+|A+NZ`*g^9GNS6? zF)9kD2dV6@y{LVb$o4rqst_Gv?Cx4A>1oRMYcHzD9itvPzu4V%kEExu>(^dX&wa97 zbpNOIaCg@;l0Me>)Lj{>r$d(OA4QNCqn;=3iX!|KAl36;jC$1n<9d$EdZOcKag2KY zo47;z_+#`_I@{Xal`83DWOrAD&V4GTKZvZMQ55_eHc>bN|C@Nw4V(XSl&1G$*|9Zv znS`}@)2$NL=64+z2~o89#7}n$_#7!=@n39wr}?ku|NUhCJejYJLt4JpAGb(BzW+H` zOGS>!44PuobxaQYn9B0yml@hd)uU2gIlWf2{;G}3rYCJ&j@pv0eX_hZe~`r$Ep8nf zEa)`+7RgYPJ69S)i(6WKc&5zqH%UZL!dks}8p`?i%8GuFFh9f)RsR3qzrq4}kJ-AV zIxPM4xJ(m=39`O2y+Edy$aJbquas$pOqa`atxWHf>4P$TTBe;ceOso7WqMquiM(m2 zD1BvmflM!v=~S6sDbos>E|=+AncgYW2W9%SOgm-zwoDJp^tenDM@ao;dVx$Yk?B;K zUMbTGnJ$;{VGHsIUct~aW3Y?IQBth`b*5F z$oi*EnKIUvRp4AwRa#>kJ>t?4qlS+eB5rt(PQ()tjXLBc`-7D3xsxjzl~OxKF(%kJ zNzkQco{64T#FBrRpc{X2_w#bbe#+iD& zf%!pvd_q-?ONoo`aR5+)iHPG&376P7$>F3&3E0IMd)$pA!PE$f#2bjrkoW*1aGb&P z2Tl_INQp7wz6{i{8=}PdW`oR_gD@Yro^RjAN;U5Hd`tf_Fzzn8?O{qV5kKPr(eB@#=I8B?j$pP*omB4$5GNxBzpvTmXT`^LlEDapXRv`C1sL=Xe3dE5_zw zXq}wDgU<3C40s^fY*-Bmtd(GpY%$1E)>Fu>60@JHU=xLEs#C=0;y4*b-E4UPzk!MuamyR z3^aW+4r;OksjWLQ0OuIm7{1wHy^V}K%5VXA#|?5Dte!Z)ml!T#xXoaF zi`Y#v{14N&8?3)2(Nx1OhBp|jACq2o32!u5H&Fg`32!o3?<07Igf|@5*K1{}aGWk*T;`HRLWb&j7&jxCnu)dOX zF15{eVSH24k7Umd;Y}8Vs(+#K1QWSk&l^wy*-eU(H>Nim@;1>s3syX*?J1 zWj<#O$)&=~=6-ye1+C2eSra#?%mX+?+0ZWLF^v5;Dl=blH+Uw~|IXQGaSgyMHYp9> zX<2?2x(-?3H8_}M#ZZP!NpHb7Elpz>vLwBTHn80AJ?M>t(v$i^Tg$57Ap#f?GiFk` z)k_)5N*V~pmK*7pERBP*lTy&umYY6hC^vPf)1_E`GYUB4puE%uf|@N1sY&M{Y+2UK zW~ex+4iV0B^WPYnmvj^Kv$)+1Elyep?JX^DF;toK8d0{MV5lxB4yk2rlbLF0O1g_= zxn&|Cju}no18h6WV4ET7IhezOe~d)A?S`a1B*3jVGq}N!bQR)_#k+&SjfN!JRkW=8 zguzXQq&sk9@qNYMX0W2%_36xciy>(?vAV54HgL&7lSYyl?N>3l7oqtF1bK@&w~(5E z9&nj2b3+trf)a2rkEIL>{|TlUxJz75nLnb8c^tJG9=ah$Wmn)f!Bma!K87ZIr|p7S zl;k;R8r6D<0mF1^rDDDGEpiobJ_?t#<{o6ol=NovCb#PwmcmZW4eE*1pnn$KVV4na5aaO*5Z6#%f{B7m@)+_(>(&A2ucv78tmB&K>Y<|N}?Z|?LB}(E*cEgT}V{> zQMmWHe7gdT)_WlNMDqLKo7;PEfLNx%mc1{aTVgp2_4d9{K&GU#k1-&5Z=1W+FjOLhc<)DI+# zVd)BjKa}uZgVhhuO8tn7#|_$Nu%?oo4$5I{gVFj9LTu{C628}HU41^_e;E!##JE8l zjn+z{|3t!@jMkxK&QB%0*=W6(q&+O*EkCQ}3?yw7O$ zVK__uT*3#8*0T_CQjbXZpwX%lzoQcN8?FDO_WMG@#~?q!UrP9-(YlG~j~O0^n25e{ z)(6Ra-x?ZVde|$@dI&Kf^*h7u40ps?$B;bV8~(=d-Z<+ivd3}5s|@dpv*wdMelR2; zF2@Zz5NDl4@Q;Q(h7ZPBhrriTe=^K~nc@cdGc693a8;BWg3Q zLXfp&DCl$vrbK+F8z^%y?$YQ+d`$x1G{S-CA|#2~_)4Y&MOl6FX%tQR4xZCzGIK<) zt%L#lOrakZq?k7sR_aqAI*m;+j)ioV!SyJGfQxTYBaO^aH7dq6kiatHk4$<$zWW$x zkk*m0h%A`#NgAPYUS!(Wn3jg{C|WGp5JD_tjxpJBe5bRw(}=Dk6&xp^wJn$RM^=LA ze0=vY&@>>8dJoeo#y`P-EfXg&#T0xCRcJyW34%m0^%^E9X96-M%?fn2g{^BuV<;B; zdZxc4L{D>yD0;M^VJ4$_N0>}8ZlLynw8yF~N`!0ZmZ^n<5CU7+VqiE%WV6HIu1GFPhe*)#4_N zwdD2+8IW;`aSlz}7Pz@&7rxJV0}>tUGu1#qKMJyarg2p5S4a1=4BH`4zqwGX&m6-_ zbb)@SAaI|#hRwi3d(|B4s6EG_FrS(^Qc zRwC0Y#*YD8t|bREUXSi?sriu$CM5X&%QZF%VM)m+Yq@8-HTrVmE za3EYs&6OjcNjc|jBN(S%%%gL^g-|JVw1K4U*M)ABI>tc%-s@Z(Z&p$-Gqi!U1STyx5v;< zX}J>+1ho7voawvS}Sn zwv{h?8tJrQdy*5-?qGhWz+8>SwMbIjoCZDc113(QVt1GPvZKZBzfmo;mP!wyfr{Nh z;EY`h!wd_WxqzyXTGU96cLiz%qr@R#vKh3*Xr&U~1h`4is#K-7JqK!xQaP^GtIXszOJ=uPTo^ElGkdyzI3pJ4b>x0qL$^D)vUaWy2@r*1XF zxhp;uu9o_v-E=w0jR**-KbeV86Jy#LFUF@f%VrHb&E#nq#?)<=w=#Jtm({;o-kei$ z4dkZoFmIxz#GzOeD^quwHEiRLRO)U?%RZ0fy|SF6jpR!RbE*3zTdVDx^1 z=_-1>(1%pQ+XKI==&3u3O79p9ZbiLPo#Bau#)+`;*b~rdQ)V(-le>k?l*QUPZwcgP z_SMlY@=nA^WTvjwu}`fyWto$)cUPYG2WXg?zPq=!ybVL2nel~Cl^!?lnVG6_&g+I1 zDKkrZTJN1lYIaIAZt$+bsAlFUHO#AHdvld)^=?KW&dgJ4lD81EDYIW6sW;PW>IQ0m zZDGE*1UAXc?ngP6u2dkb5}Nl@h|Zsg_(_QP?2L z&yaEw++=IHt$MW-F&1#YtwoGe`L*%(Le(!=E?W;t$pZQl@*w{^T#8-xz1Y1U^S9W2 zzEEudY^Zw(wipOWFAKPX1?Ny)B3gBuRE;8|*qtiBoU+C4d`X`xX&&yT&DqG&y%22} z2q~#gv4?RYyF~I4VA24-k?c~=5=guZ897tz-hykzY79oIPl!xi-O72d;@WNL3a4^E zcD9x$GnM=EWX6fzj8V*0&gz2cC%5U9vzg?g#9R2vIZC-Q_?2_@Y$uUA)v28ScL>EU z9!*nx=oSd7Jb+2Gc<>AesojmA%0nb6!WOPT2Kei6i9L@AldC+4St)3?z}_NI^r8l2 zs_1!4?Eq`#p-je>!*v!{9^Q)ndFR1;l}G6DhU4|=3hGFuOzN;xk8&!HX44E3|3OzP z7qeLgiTekEI!4PHyk!U(mB%VI%)1L?QF)wFt=>0?QI#jKu~6+KZ!E^L@ zgAq>`*??b}Y=xhui*3NqB^fZ&5nEcHe4k{ACHp2BT+^<(J4XXF$O%I_YB)`B^pspp z?aItWh=Vu+O*X>>Y2VhJl&mr!6Xx$ycV==KMJ4SXZGPvuPC8{-7bG8rP11NMA*_p% z>&aSSSr;eAv$WDYA*D-`m9S5`%9fs3dT(LGcQQ_b{zPB&S=nhI>g34L$V=# zY!X#u)k`0@8$N`&nOd@Rpp!oSO0m2PYLJsYL8*jyBh7cBQk5P9P@TLs14^b|Tl zt=#MHOSkW~{Lqt~^i)ZncAd}~9Z5URklbc^=uArJwqm)Ho+UBr zayBuWX6?2VJN5LO2ca~k5+^{hOOu3Fqv`bA&PZZ8;B;y2hKxmjMMh#YlIzkZng?L8 zafFM1+!ep%H%9M(8+fCI$RrYf*9=-SB5}1QDuToUCP6S6Zc(CMQ$JGc9>~@_mY0C8A^w{0Rn5ueS90 z@Tu8oGkxS!&>hP%esu}qp;f>iWQ$#o2$o2nJ`CRL4M17?jM3oZvTzOE zYlTupsl!e_4tgr(dOVR#uT(1Lg!rLY`phpV?;sP zEO}W=a-K}>SF~2W$Bk+FRV`~sVOyVmjjK5Vn-e;i4)gkHs2$@8Z!Z1jaXBa<&Az1q z9Pe8+n0{MTay{M&q~Fo9g!ehi-qo^7uP4R5r?aQC_Y^(!mzb8q62r}Xy4C3Jewf@9q{kS&D`>?oi3Pe#l5N{wCq~6Cm9O}gb7`z$=Q<5b zPd1~v<$E-xV~_Uj*rTZ(do-W=07Wq;U$4D8v2saDWx!uSpodZYs z776i)5+^nUa<_J>9e_o{`!oEsQ?J)h%1Qfcgr`ou)dO3-XHlBbg|!+4yb`NKZmu%?%t)O6NgR%}u%?biGTluc+C? z;pPhV5e`RcZqc%O?=xsv^9LFvv<^xKfv8%D3Wlc$}Cr(utQyyh-GI>DAA>#87ldVHuPKo<5Rbqca*$4;%&jyu6egJMmJo$CF1=WPE_+A2OHgwcr!7*YTj3JPsE!_ z7y5vEZ0!0m0<0sTD6ikl zN`Wf!u7Tier|ob}Myb#^RLgeeB#vDGtLC~?aSTL4mktv0luGE5m*8CwBXsGk@)GiR zwo8pJhm}s~LWt~=?Foq?er=!Yv<}H)_X_-`%}w}~Hw6OTmO7zzuuZPB9Br(Dp>s9& z3-d$5{Ct6#O*yg4;fcd?-N)4<`fyX1t9y_#5Pf(wo9l57__?_#h709-vMJs=@;PO$ z{x+d1Ok zy7A;W*Oz+M@=h~1fVw%cF<@!Ub$O7rUx07qa%vqs0;g(Sl``H#7~ott-DHG3zB-X> zV3RURV@VEVGqFS9u$8&NX*)H=o&4 zozOyv$_@J`lPlpBT^B5-2@hhl96uaF@vb9&V+SImvg*d=NJ|@4H|c0QDWG>aRhz6Y z$?-$g%?u7a^$gvJX;L#`EhXH5D`Zj&~1VadCq%;)I_D~y?>J0N2vynPx`w}R++=Rov=f< zDJrwoYhu|{Et}*$$FgZ!hVubxHeEHF>sZj&8GlC%P~i%jc4@p)-uqmY=Lws&0&voMc~?qO4XuIl(G*+_Gqu z9{DPKU{lpIUxi!yDtoqzD!HoOJOkD$eezYLmA?5Z-@=|%{rEx){R_uds1V^+yV$LP zA$nW@Ehb_A?_ylM-57$};rXfd9#*E>k#odQuGb&e+7_#>*B8THJ4&gfHxvV1+o~>6 z>D6M2)>?qr&8*@#h75V6O?N39>z*hJ5edT)sqA@NoBTr?{oznJZ1I_YYL}zPfXxVIUD|<9kwVv-? z4QtfSR%(%VX$hz~N-g##V5d|&SE;4m&4`?}^OQQ>%VKKQ?nep>nDL&WnEjQ+Y4Q&k z?AimA#4Bpg!I^6hq^jXs93TGNF)cguNXJkY_0Krm$B^yRK03=CJn})mW*v+8p+J(pIac ziW+x^y+aWBYu70Amaz9N>#kMufv`869Xw0P2gBY|Z1?9%J{0zDVcoNpd^qg=mSc2| zl8=PFqv>4dD*0&GdjfW-J)Z#}T)Q>wRj~UPSUY1|%nn|t|fg}uMA?k~0bYl^(jIdS9_cWjLCjD~7l zq0H-wyy+aHt5hpJu4@uqpbG)3=dvq?EyjBPFrD*eRv71$nx}Mpv#% z0k@O^MFhL}!}X`#4-JVx#j0t;l|%V$Hen9j%I?)K;F>zz>E6jImg1xF?w$LgF5+zJ zP^Wv1rm?;{7_aWxn@}UhyXyIM)6O4=j%{zjJ?8XHNU~$!HiMdRE9}BJee*C-Gyg7S z32!XoXWcA5JmQL)ZUki?YvsJ_27#KRW!Maj1vU2xsn_8Bf%WEnDAX`-A{40GPs>{6 z?x}8ntvAX0cQ=&Hr^!OKGtqBqrK?bzog~E{Sce_Z^@=(QCvyLUbWhnS<9W4kP$JuJ zThYYu;N6bg5Y16{z?-zptqA;!>JI9T?s%=3-*pT2kOP+CPOk1?7KCc&qvpSvPxiV) zn2cQr|KCt|)V_l;BB!2wj8k`X{`U651elK2Ug2p!`?y%k5?;>`DJ`o^0a>x`7%j?q z^WkxI$7oT#*ByRUcdV8*cn_pVY1yz89#hsGr$wz^IVB#aMU%Wyh>dl}YuQZijdD_2 zHs5m*3+hhLvPItSi%4nNV((>4{kkPe9plYnbCx>R8_Rl@I?g*Awyj%AN95ziG;Jmn zPvfznhgIrM8ValR=-CCZG^TFbNkd`V3u(A#RKDZA#kQa0pwjDpq>LR}mhj4Hh8LAe zdi!#yUQ(*uTgA3tQ7YyAgF3&aRN8Aq5UG2Efq>q62lfJWZz`4ZZs1tHtyI1D24Yj) zyGk{92V!d1+2gul-aRQ$A5dkS@OtyGEY*E@noyIxOWC(iIN1RtqIhMZl|@Z}0Wig_7UX zJO^5OeJDAF-CiKCxL_>}B`+HQ`Vjk!0dHFt(@2Xf|He>~hdp(N$?G#*){<{PtGXlP z6#*PWgp$>if0Ql9+m}7Cb*o!!X}o=T2u*pcrSbOV-PG@R+dkgD98LqCU}?O4xev{> z#Ly>j7!gX&r9Mloet5f*4~6SaGEazc)`T&cdc#4AT~?^5hnv(bGyB1;_2yd)hKYrY z*#VpP;>|WFhS=U+VFTl9`uAurpLR#JrAsjAraUBPV13L`Xl+h2qJ}9$^y7;ZVp-wDl$w>P>7{Pt#g&lGf{6#OCx%kNkIIpP+yFKXVZz z^_##}r}IpHDhm3)W*G*UdEqb2JU~d@g`jN?kf!$7!Wu*y{#}KC=9z+&11RMk$vztW|A-~wAVTSMvYcs}} zeBne}BXpW;mQZ9r+HH)aw?gF5JcH;A-HOq}+E&Ut6Y?6Sv8RDCGp(E_?X?2&%)C|* z7>K~bklDzHY%-$rpFlS)vo%hImfKJPZG_xK&Y-(({-xBu@2}y^=18$9gFpY?f%ow* z3_mtkW6c}Jdk-ToH*ka4@8Iz$IBpkM9tJs_yd$P!&YBasx~|6b8S!*LlA&QMNPOQ& zCdc_5+B_5z2bj5`)%cwiT7}XJZ0Un2U9F|zQ_&$4m*)7^i}1 zP`>aTbk}J*!dCef)cIgX7rk)hH6n&~G6QKQw~sUEB+FU54~|4GvBVu(C3L3PbeY(6 zIm#cg<*(Utmdq_$f7R*;#nJY&L*Q%rtX=aZFqt$z>A#xq)-@UqNlhtGf6n$U&7dnl$5I=$m zUVHr7o{Xek;xP@`9Fw(Ep!UN3w&@w1L z#;m|yoB7C?gtf^*_R5cRObi>%fq$tI4jw3MM&_U@%ds4~Hx0JL8W49`^#(ybFYI1P z6I0hjlyI7+wX3kZLxt-074n}pJA-E13co@NL-X31>p*dYB>;~z$CN|I4I2Iz z*$N-RV*HC^cV+5Ep(irWHpnO^u{;fw~S_6|vu;$TBu=a15poA?*47$)tI0*VS-DHVlK%58#s4N4{ zTtoz!tn&+Ioo$*BDX`o%J>0I+_5Zg@i`rEhVk^Dbt`c7b_^+0Z{O?LbQ`SJT#-oN| zI0=_JYtVaVUv4p5Eys%pAN>0oT{O30?(MT1rC%cy?DHiO129`BIdJExtc3r;QvPHQ zb(*;V?8Dd4e&pa6Fw^ zFasZLS9wPvUn=J}jZTxXUE<{UQJK8(ih`BwG#!uC+A_-IIJRA_A?O&a=7lfYyA~$* z^7ggvv;-&jQTbXk@5wp*Q+IGiK5LmcnK^v2V0+=*UCIW|kq6k0{aIPO@Cj`#d*Nd( zfoZ_){4OhRKg2u!UBr;Oa4d!_hti&DB>Ez;2#HCp$ADo|I>;Ysab<*n@6; zWm##^UkNK_+3*7ETr<>ZsY0ZQJJ=gHr}P)UT+11t~ayq4z~*iKH9Gje@9IpQT9 zWjMX-uzaM#rgQ?HmJpX<)^uz`%{abUhppFLIWfyDgH^(e*UW^?Eag)x{NE&c_?dBL zwUFt`Ly+Tz^V1+Q9OUe`D#3L_4&sfOU4tD_^hQfuhmae+Nr^d2GSKCZp$otbzLij+ z^1_MLLYNY~TGGImO;B+lQl&YTj}g z-cHVU4lqa4a1Wvs?0FFZUmyq$Wt{`fNGw&oMkx!of_kz{fqF`Mkcpv-y_$_-#84F$ zn6F@G-}#Bw9!BAu?JAaJAU|vs4XlC{qMypX#_*mf;OUifkU6;shch+C@b)9%t`xj6 zSfP(Xb{KB$1Np2-lo9L88}A33>Kfdh&oua4>jZ?fzSE82#$5EB?;LCvz)SkhV(}H7 z@Hq7dW4K+_r;!Jm?_iPWhpG=3QPpQZ(^!IsfE(@U4cDW9kIVx)E;PFs>C(wsD}qTA zya^Wyn8LBd&q8EbjmCOy5CjjyrAqC0pm`BnJa4{M9m9O0)dWnTD*fOfQvZ;TuWlOd3EF-5Ag1AD4S1vp2e}1fT6KewcU%pZMCl3& zUU1R(GGjOdhU<=gC_n+|zyM5yZhAUsK4hW%NE9e`_aGy}X}h0kfoADjLUPYx7z*2c zZg8OKhcQfEuiYKNLirILccGbJdk(+FZYzo+eD=1`jKObe4bJX@+n`swk2##|3>=v{ z^Uy0-0hXS|EWQ=X^#&W8{(3ls;qS%>7|WZ074-iXz*6xgbI`5;EEQiWNdhbt%hRV0 zs7jHkw~~>lN+oTmN+lLm$*uVYrGl#Dc3~1v5ENCZ1fC(!hAgU*o7;tA3zj74DZTO> zd^2DGh*(GPB!T|%22MsvnLz)P#!W>S6PM6Gr3L68pU^+0fw@OocYQ+tlvY?W;S>6& zG-Jt1pU^+0m6pu;g#Ib5vShta=%3PROE&m~{weKb$zlEmit231R-e#6rCCc(@(KM@ z+QpJHeM0|~<}5kiC-hHgH|)Y`qD6kz1KHgiDCA=QZ0KHEfd28P>lZ)9iMpnrUNSLsZ%T-pcp zPn^&^rMD*pny2($nna*^O8=(TQD~mh`_woJ%~QICGe%!;s6mBdmu?|$#D0mRF_-=! zx##9{fgV6So@mut3LqX&v|5tHtG*9f5 z{opAA%@bRGBF-uJ;Ed2bvC}RRN}+jTr(YqILi5B{?1wnXhctxdiT&&gp%j`YwsNab z3e6KcvkO+)JTy;i75~=;ewadNp4jSN2-TV-G*4{JNkSKk2%X5V0DI1}bLi3c3qyWCwOK6_5W~CIGr>sROh2|+6rIbSRl(mEA zp;7|PQ`X94LZErd#&SC-&^%@1R2zlnDI2epLi3bO$ZNVghxR9GFBF=mY#)lC8~U{< zo1~ON^OQ|iN}+kmrj!V$Li3dE`zvZ>p?S)ta)$9)A)$H7rpc7D&^%?+wT#d_V_=73 zSELe}r)>6A$ta^>-jtOc!m@;b@|4|6B!MJBdCLBlm8NA7?o;(GC{Nk_y-<`Mfo)y5 zi#ZzUGC{Bjk1~G&;q$$=aH}~Gu7H8_XTt#DG3Hv)HsSO9GCbC-7c%V=!6rP;k^w%l zf#-#D=6(nY6u~C^tQn7~sTB(dHaOe= zd?MI{cUtD|K3|Rwzih-Lwe@}&+llZimR#z;1$%{GHB+Dizq|5@U=x1L(p!vA1e@^d zmfmW7BG`oAkm^LR@rhs)-X;4PK1211U=x1R($|Lkm6+7wx6M8>Z#RT|0v3edvGk^p z&o@KE?^=3u$R~nL_&rPC9rB4_6Mo;)TS7h&Y{I)Oy*1<$!6y8HrMHLtOR)P2e`x8Q zA)g2~;g2l6E94WwCj7CbcZd9!IDVg4dJps`{Vz*@8}f-@6W(K_n|P<)CxQ)*w4aCR ziD2XNX<_(F^QF*R!afmf!e5zq!1AqOp9nVLugw6Vw}<^Pw8wYmD4}5YmER6YF*;Jfhg;f4Ej5&`swemEy-& z`ZF4GQ_KU?#kfS)<0o-3MyK8%!^K7rZ2Ykz5dn_pcmBAWWL_wOjXz!|O->PPVs+1< zRJ>*u;j; z61M&ETOr=gg|8i}N+g0!Z1_rHJqy3(hO1?YvqyLp!6r89x5B{}>a;6dH!TAZY+@7t zAqG@)9h-K72sW`9 zV}xxVVdL`L#-<21vDt?U$1(V=FqLo&uAjoC2sW{~XA8rH1qQC%aVxKlTL=CS4GDrxY{7hR6}x;>Lu+yOWjjp- zo7loLgn{4imK$!yY#|YBVvATP2sW|9ekXi4;kUwEh?R{S8Ouuqo7fQ#3d2@m;1a-B zq*MGs`>*2?k*Pxjo7j>60$uEWiC_J`H-&jEyeUalk)$=jM9UVtGPM?C=N>z%HwxkZ z_|>}HBK zZX?OTMJ@KR*ySh)f=%q?hotV~QkVYqcA>7MrlA%puy$1<+-QNQ4K=>Rd?#o3J9-R1(1^Jk&J7TRQQjgz#|l0g5{<2EgzL@$OFi zjvzcz#tI)vLQuF_+7twvc+E*@KCuKNR~c{IgtQ>o#G7=B{T3nKeYCAc1eKz zMo{Cq=u1c|w8tXN4k3 zttELLe!#>@RP64MUv?DlSfW4>Y~n*`AVpkC2!c(#nG2{O*u-1ZNQz(+A0-X}lM%rt zK3XY7u!*-Sr3g0hF-j?dO?<3UieM8Tr<6soiI3k1RnkPT3EymbICh+f=2K&XIe& z`2vkp<-*0GKe7QL*n|rRHa-z-!X>iVpti&S2)mYy`TR~eTtKk#`Jr&Q)RtCq4#z?} zD3k~`;j&OYb_6s55p2SK=nAyYIh+s#n?x;(1;HlK0l_9w_a}sO&at1MX`;u=^`sQR zCec%O6pCPzs8@;zHvJ(i!p0MVV3VB8)&#*O*#W^O*#W^OIdv@@8*L?tV3WrORRo*l z^pAUL%S5nA&iF%ZdG*$$glk9+Clk9+ClU$%NNfB(4hwx4`k6@ErsFWhuBo~c@Ou6?af=%*JE+KO7%@sD; z5y2*TIK>hRLOvx*c0{mA%1d6n6^FG4!`d~ua8ZaiD3wI82}eWoVf{)X*o5QaTj1ku zkS>ngPN%p)AopRUD=M!~r( zm#v4SWC2}-JTURa)jWbt7Cr`CnnJa8tR|ZkwwMxy=XKtRrC=|5pSmaP$m-NfK|S{Af1KDg7TfMEPPi%PCE~net<_Oz~#Qk5x+XX3CFKO7UjOPhewtyqWS7 zl~TN!@+C?s-c0#P8W{b*W6J80awF|It;4>q*m#JM_ z3nnK`yqWNX@FF%!ycvHe0hbbjH{<`b5+;>u?^2TpLjEV#Fp0k#GCO;EZNs*DD+)(AMQPIswd|Ge$>#Zah~FHuj-eX zYp}rLK*eu{n!a!APV$L2<0s66Qg^1mjG_v7Gu3k)KV?}L_{5v>1G80F7y0YSs?!Ny ziu>bPT50&76(HRB#G8R|&Qri}`>WVYXW3~n;P{`h_gN9mh$AbF--b6MOO4;vmgCfz zYmMK{(%0f#0^{Si;mycu<9D~^I7KGjj9+KzTa8b=8Na95z}sUS3HrpF@!RlbeB#ac zz0LE`o`-@y@n-xsycwT(Gk!nwvXpPPcr$+EdFXWFGi(+c{9|*FEqF8jaUWwNhq;*~ z-i&`dPq4X)5O2mmK`F(X@lRAr@n-xbPl&Y?Z^mD`Lny_Y@lVn-CB>WZPgY9tX8dJJ zDc+2Kic%JD#-G4D^X{v1cuM3?p%Zi^-i*I5-9AUW8GouIi8tdSA9oAFOH+hH)Dcr*SIb1{a38w29a_)EC@?&G;vo6+%|}{BGYr*-oFF zFZX`S%wO0bPPzDLvVV#kTwq32&s~Pyo#B%SOo(dY&G^d=ce|Vr1KG}L;+hB_KJjM! z)6FZwJkw_{{WGkj`9ASx{1ryy*CL;IGyc!yz<_h0mR((Gm0Ic(Z^l2wM1mW2`K5$nmqS_XasV*e zuumy}K17i`c?vsa0y5(dF_&^cA7gam-ijMZ7X0r+onn{DrwKCSk2UOE)i8gu8H;(Q zJ(|+7M+J}>?a|bZJ(||BN7Fm@Xhz2#&Ft8tS@|A0X@bo7`xzbpl?lj`U9c|Ie^Th`rpJ%g3P1_*j?=9B97rvKxWc8-l~?)fk*J8Yw?H@Cm|p+LG9oi ze4ijQL9aJa%1KL*nV^Ym zY9XB>!oyp%w%rTU7&)@WHvFPPaxo;xj8Bl6j3b)_g3R~?naPA?2af-?!1J$1Ak7rn zR~&YEK0#(O5z|u?-R;R{GvnFKCO~Eq0x|0{eOl4u33*B-ROKZI$V^pdm8T#xRW-UCT9BElY#&GzkeTXE zzeEy8R`@M9f55Li^G@+zR6%B{JIm<=LD6zW!PN5WJrn;9ttIr9@Om%Nv^A%*Kx{tlH z1jtNvzeCs*Z+@%$Tgy7#1!ShWb}fo>JRGj>OFg?1WTtumb#oE|GE?2IOC`qePII>Va$~As{o=gDc<&0y0xQgh`GwN4B(4KxR@mu0UGaNZq8P?IZ~@ zliFl`NzNQnH#0c!U{XM4G84|B1Ob`pJesjwPKG+SS_=xuOy@C5DacIcvG>S8D#%P{ z`-*{r%yb@~>P6`aGShj24!MHNbe^b`g3NT@M=1rF={#9wD#%RdDSFqWATyn(YMFw} zbe^VV3Nq7qx@x8%Go3qt%ygdBTXb23m$^zDhf9&Hl6;kn8Srwr9!|P){H5_qdBbyU zp3j2JBq#DHEFmB>$>krTRJN(fJjhIvAT!AhAT!AhAT!AoYsFqXz4;u~BeXdFg9Rpu zt)%w~JSWtB7kh;A5HiY5FJ|)xIn)erEg+D@t*ohDh->n2 zr>2uShLhwYq?$a^L-J6krX$irO|}6w5`y%QotEs4Zt&~T?DT<1G9nS_Av;4s$`$D$ zJ98f?Q>2INEFQAbt%>xIwa34T^pKsSWs3BWojXVBDbhoB-ZG&S=^?wHmMPLhc7Ls> zNDtZhIyf`YZ)&Bk&}Jt|@dsvQ2h^g}Q8XbchF^Cq${zGbWDC+mcEK6sfMpm?vj?+4ksi)witO1#m`n)LL-wfW`(Q+f^pHI| zzsDrfL-uIxl_EW47i*a!J!BVaS!EJP57}e1NRb}0$7qovJ!Fs7GDUjG9;;=;k~q%K z9;Zc$^pHJHixlZ0d%Tt@(nI!mEmNe2>4uprbrLjll~3^)hW_LcH8&;U|S+RWS>#_iu90uPJLLB9MOpzY4FDj)- z580QLQly9MD@rNSL-sYL6zL(`0qG&z0qG(8Ht#`jx*|vq*$zk#S$of{NDtW$sB#|Z zA^V}zpOhj!WIy46=aC+=pElsmq=590?TGY{{X$DE(nIzuB`wlJ_Pc)svi}PCM0&{1 zw;Qf?A)iPO*#j-TKI9YWA=`%Z;1lT~+lKVu6X_wl$ntLt`9yli9wv{OiS*#VfsSX} zkRE&@J!Frv<#ZAcG3ksh)qnSVeH-t=G^{uK^V?6N|dNDtX%<_(y&=V4gy!>f$k?}i&-_If-{ zK*r2cRPFgZ_AlYHZ0P~{(zB$r{^Y}1#yy48b0C(P@VS=pv^?XvR?KjUxzLvWDqnh` zExm+wFEwh+zvfFXwWS^vyxf*PlP|s8mVRH0(kpD~r}@$=w6xboNDkGTu#3^_{RLP< z_1dp}ppZE;By8qzl=it6%^-*AzWBmxb%^_zet#z4nh-1XJ@jOJIlLys$=vS_$TDl? z>;C@zJ|=OoFww-U*lT}?3uR6CtU}9KX?egsl!#9#%)4w=zD8}NClAT3-SVnirM+#PiAc&WvO@=DU%RmwEb5uAApuBPJG3P1n1gTY1k zF~1SosRG@T;P4Z*du3eFM z2Z>jaXk8ZqP{9wN@X`J1u`Y~rKO*SZG!k6p$L5guIR;>CUnE9hhp7ID8YC8ucH!|K#A#K8+$bpw;(aR!kT6Q_#6ERZK|CMep+#5!HSnpYAdx?q;)Y$ z5dR^?w?HbNsWkq)T_3mQ1r_>u7l$2x|J}!CrwILk?Z+MpQM}a}djb*!J#9R1qSm6O zHDIB2&O{GJwUdUfLcnqgSdDrO*pW5{?aB|*df_&E&-%jZ~yL+3ZUE z&H_q?)3~2iied4u!ZRzpe&cGVWs5Di){X--g{8JbyG}#%{(O%3^9m|?OgqavV4&sC zEEw$FcIIUJ;=1g-)0`*<5=%kiMI!M(kf<}{BAFpWdZC5G$Ex{g^uufmZDR{uZu!$8 z*?WdGx1yD=n;`W$oZy)2vejl^I+$yWb+B!kt zB{AZK`I$B6|J}uPXyu7QD-TL5R~K4&P+Hl}R&E{F*2*7jD{Y2+^#9$;7PQhpLrOrq zUHgJCufuh__62m~*mivhP~pGAR?ELSv;=p_PgJMbDFH}Ep_Qk#FO>RNJE=#DRD{Wb zo4wa=rnI@)a&&k6Lw0y>R#kK!gx7Ccjfp^qZ!)vF$c?qOq1TU}Z;2-gb)1%URspUC z=#rgJ%aF$62_f!E;|}ZY4(ow&Z$K|5flqDqOXzkCyiExP9*`V>_@}Gbi!ydklfFg; z$kL1`q^sJC^1t>T33>>&Lodn7Pqe`avT1rtHcjF6YgP~K-yO}ot$XVA=dT_ti@Vah z!9TQ&~Z+VS$GvH{I?6BRH0L}Vjo{E{!or1zIi@DW7ib7$HDuvJxPOi8Hg81>&5OXe6_QbaTM#Yi&q(@b zE(SFr%uwfO&`$F@aJE9E&gdFZ@;BrZ*Q*gzya&4RI6Hh?4LnqUSB0Q%Nw53i>hzQ_xuxa)CR^j5%-BqhoeC^KHYA(JXBy$+BUNP{C_$@ zum!Dd={AQ4{w!>TDEmX4(wJzC+2Yfx(zs422z z_^BWAry#!(xDN8i=sXDJa1=YQmpM*LuXd$$p=A>LiUE7|%OVKf0-+6%qI26Z9p|5ZNMp`sw4}2~ndV@Rth2`v2#ANdXKu|!^PW!YV;r!1P)~Qn)1L(0 zc%c=^iNnXB>;P16+|*9>c&p^wy^U4B<%WY*8M|36La!q5lzi`CGqis$s%o4uqQkOr zkUguN?BnvX+nc7Pa$$Sfd6S-r%;xQoN?bLS8WE}6Ays=8k)B;L9<97;d&XP+$E1~c z+^jc-=BjM=_zlU|JD67w)O_}*agQZfxd^S%+flh?=^@I*e4B?YQVg@Sppqvl#V6!d z@^PWOhV5kxJ#8$EKjCP}bs7TpsLbUAje;svrqce&}Vb@rt`9Ip33UdVpee|`+e+bfB z7a?=nI#6Ra;fFD8%6XVwGg@ABCnk?IrAQvjq(M3$-8w^t-~)H@;>WwxQ$DJ@$M*6!qIA}V5lq1$%_-D*U)2$sRdd)jsWb&;~S^WD~=^ZAfN=WE^rsV=6I z#_8-{aaut$ev4L`7sU~*F%LC1Yr#aUfEt^#5}Q|nhN9ry!5J$vI4g?YPEOg0WW|X4 z!aj|s@2B0Qv3`LHoS`5+abVH&-b4Ou>vOx$C=dX$ya zUiE*X&GxDnPp7EnL;_!D!W^o57twtrid6S5qWd|Z8)NOpaSkfbc{_%?a71H2fp&FKAQm{o)C>4vfCZn$Cm z4=m8^lw*>ky87P;@xNcq%KP64@xRYOH@54aHKT&4(Q=;*p4tJHU4M`&fF=e4f(~Zoim+o&hX;H+L|3+YYA2w zep@>NCP2ea78-7rhFh_%X}rB%&;BT~^Jg#lo=xe{v%O|ivy;M&17fsBw3fXhT8r#F zccP)GJr<~@%k8x{DrtyNrXg6HG(@yWbi09TRqITMS7Wt^&La@`5s=>j-zet@^KG-vH@Cjr31;ZjZ*6&jHo8~8VX)~ zA?U_S+FA48`L;T2%TDiL&Hv#it$PaHo*<1qS7>a4G*$!uZ+vl4+t@FLb`liZ$K;lq z{=YPaU1!>HzJ!1&57c3PY~yqFqu9WIYy%7l|BwbGEHrkpz2vNXSsTuqa-c1GQYN5X zVDK2tnL5o1TWzmHu|`ck;#8b4+%+2gco_}0EU;z&(%QV&lKsgKtKiUo!o1+0Oo=IW zoRf(gC z8wjoh@H!$AdN*2vh=krvmLLXU`GxZ`!bXgiiiYVq5;Fy9FdOL)q77+qmKh40b{Qe> zOv)p~R6q2g?Z=rVSbbeaDF-{JuLTJkE#u5K&qGG;GQICHd=ex$1kN1uN)OyucQ%He zFP{ZEa}^u#F4QxIPdZduFN2hf%{(&~mBK#*FdJ>89~1IcHU-LoOacRT0Wcu@WK8lY7f{EVIn@EWAStd4QmWd_1i}W|=e; zD*LN)j3$Ttbo_EVMX$`aIsr@(zW+PNjHU&80Q-*h#OSyownFgirvh-?OO7GUjW}DlgK;k#HfR3xxmO!SyrZn5^ zhV>HrTNZlkUJwWX-}{K&7;KD!4mcx@1?jx#VYjFVdAtw56+vOk;ZzoH)L)@j{=cSz zkQZ)`kQX-YuTeJ~D!Cfv;i8hAuy)u)ej}O1*LB0KXi@PoCjvykEpE&~#E=$bojVLd zL&g1&JdeX0daD)5^CjtGt6Ow|Fx)l($%`cSl)*?|EV&Pbki6s=RvU%>?k@Q0*c&i~dEr zn@&P5cF$(td)OW=b*JP&_O|3HE+OtBea&ss!P8wr+(jDff84UhxP-Wi3^a359Iidf zxP-Wi3^H9In-F&{A?_lLW}wjL8<(GVL`IwYg@2uK*Hg7g=4GL;GVYt~*JMj?FfJkP zB2z5A$+(2Li|lLZ&BoVuvL>QQ}ro24Q*v0Yq__y@nl7$l? zyL3s(BPepqVU*IPC7+AE9G5RnmYyU-!;fiG zFQc}TE-GDT1|p&d{fB}Kj%vmF6&!})2nCn)hH}9J2nj{OyU?OI;Qy`?33k#9!C(48 zk>Ij=^fLG-*2~i1o(br7@FmO{3;qG~mj!)L*AK3Q>hYi}ERYB~!Mw?!9^tDz;Qv{Y z3X1WY4)%;hYvhbpg>6djvm+oSwmB$gdBIkkcy|k6OKh z6==OruoL-x13pXd7kq$p|KLbidqD63bZ!VvfXfXG&IA9T;LoT#IJg-$84?hpacGc+ zWg3G@*sUoz19lh|Tm{bI!AA6YL~uAbM+QVVZw{_NTP?wE{EiB)gUr#vQw>;UoZw_! z9&mzXu)%{)a1W@5oM0lfdDsa$A!GtPj`O$^d;#k` z;RM4`{YfXd2zGeN32p)PPbb)o@p;+_)?gNHbAn4CWxEr6iLz$^ISXOWI>Bq>9p^bG z_#E|~cY^ET5jdby3D>VMayR4pG)D6lT$h8pQ?M4cx)s#JsP#u&4}q?K#`OhQEf*XNqje2l z$JllYmO;DQQ8E#|x&zm1Aong@e+?Vnjq7^k_X<9RCcT4$;0Jwz%ivFagC`-QU$73= z>>qp!`wR&99&|&n4m}tYbb*$GgOkwekl+Ih*wEld7`ic73+X#yi;b|+b{t_ELoa0IN}5==qP(bm0Z$?tlPz z)Mcm(kK+Fu1y^F^f-5}_gS-l!X{h-cuBV`TxEuzZKZQQM(LZ?88|WassR;t#Lg^!L zr?+u^9F~GV9SA3bKkbCz_mF!d#_oMwbFjf~Tpd*Y0N35n>SZVR8#?le6YzfndKK-W z1D~MqBMj`1Xz&#Drow8Uft-p_d<(t`ZQsV+K>J@J_e!+*t`pn_!C!;? z8g;+Hbzdm|Ev`Mm{Q=;o(b9)ba6EeWkrO6;8(E5MJ9L`#<|!8 zbqFVyn4lKD{SzcTgm(UnYd@53#`Q9E^8vJb3L1P6*F_la>mfM-E8ULrMQGs$(48<^ zSD0WP*seqq=+q|U{siGS<9asqyT%0NAb$-#;073t-@y)$FanvsH9-W*U1x$rz`4N$ zE)4fOY{Q_{ZK!_%Joh2+?%=!uJqB9cf$NFr*o`J=#N{y*mqLlVk^OtH-Gl2zQ1V_} zuYp7yb9Ob zF)py)9ncz(?;KE4W?&W4wy%W@!8xuKPlj*KvIujctRg!Ww%h2Cck_>@y+m zSrd35-v)UET6-R)5VFGrO~`%01pmVPdC>%)L;am57=khX0Ia_S>xbJA-Y-MTrQt|R z2{#WvIsAnw@!P))VOW!gA;UstTWn+ITWn)VDz@=7=Kj10n*_x+&V`X2D!Km-A=!8q zWR_Y$+6XlqmfjX##sEhegf#=P|c1gUXKEue9K4uJw1ACHmYKAi|d(Ge`rjph)f z{L@&dfW{m(3uycX2D)@E`U3dkoyg7*zL;Bj%K5k)OZl)Sq1@>24XEKS(>*Yh3SX>L zW%P(rl#QeS4yD2uD^(wT4en9aqEth4A4(ae)UfF37?QHlx>s+7zs{h9N_aw9E0d)b zzL?l@(es!+PPK8OPr?_=#w%46y%n7+n~>LZcMjAMK4}Q zoro(^6~6cb$+(4ru}%QKm}R9FzW5WQGYVh)H)&c1;XYNr0AKtlYdixvm44NLB+S9v z3BQ_24i(St{Z2}`QQmp@oq40n&+c$|K)KJNvR@;~(=c3q7a99kU2K5;IwI*s1N6@C z!6Ze_#+2}TD&kKWNX<=a;H}FQqD@{CwB%-758RVky6m+NM6r|6bJZt5O=E z%20B>hDQB<`yyE}0zdIC=0#je1d%yD%5;U_xkO}+x0)y5@6g7b4g1H(nEhk`5-!0q z;$zLeLZ)3JGRMbRGH@!0$Q;j^eh^fth|KY4&Fz?8TJbsat#rh332PF6-lzwhSA6PE0$d9z6DQ@ zziRG<4xHTXWDH6CHA~|#fQZcT*Dbx(xVzy~@i(M85t&^gEyj1*!-K0rE)kjIZ(91= zkV{17_}k_#2}>J7E)kjI?^t?M$mM6$@pmn~Iph+NIsTrd?+&>{WRAaY=`A6bh|KZb zmfjk2iO3xPz|z}8E)kjIA6j~6$SsS4{>ak1LM{=R;~!gkcgTH-r8J?LzMiyQ4{eZyYpBL}s^_2l@xoS;Fb=uuDYd__m5PRrswIMCQaqL!uLdY+@gYs-2cHJ=^eu z>rO=FO3XEHVoG!(B6DJ%DMLQmW%%Jg9jVWer;S?&J`hC~k$EeU5%+2QYAtRbZKu!W zo^jy^!tg16%MEvvwonn7Sr|GV;$w#;VZ(@|0(b?ZmDodbtB2aMJ@I*;&K!$ zBJ*GrM%>}}RsWh(s4FS)p@_@cofGj!vlhiQL}ZRP*;9I_hM&{NhuM|Sb*crCIX+lc z=S~Z_R1GoIwi6MV<3r7ph<;gqyci#D4uHHYz9EQ@5bw?sbR#}e#>%PSxpcf)+7v|Q zWX+pkFI|GLS($9CM39xuOtR@^+5++IFIXp%!+b0g*xN>l$ebK*cY02#ATlSroX2Y1 zlq9=ejihX5a7}jqvrul7h|I~Jj|!ED5|KICn+pi4;MCMFk-UA|i! zzs>SixS^0lrBjh3_jYqQ5hY}4c~9L@R7Q`1u=0API>QtByvS$crGm(un#|VZZXq>g zqKvN-T>?i+@tr%!D~g_okw{G)tz(}dB6Es|h$!=-e}JIW^a+EsWg;@CX3P|-GRlqn z|6%T3z^kgR{n54dg3TfeVM`Jqf|vvZ6d`~hF$Bye*+3v9ArA---Gsa)FSB=esi26D z+8ztmS04get+rKbTU)K#YU`<`Pi;L#?P;r3{A-_DtfxJvwcg)v%sJOuI|!%uyWjop zjk5QAjydL-V~*Ecd#>zSg>k-D2#u7zM$L4FcRh1;xRw)8=6IjNs%F=#T(NgH$7@iz zGVk*vk!w`B6<%^Ia%*ppezo30NcHS>YJ?`Q4>ZX(H!^#FgUHL?^b5hW)4LkWm3;}_ zDO~;FeUu|4Rc?ou%tvnXEr2P(1K!A--Mj@Ic`t-V4V%4%^L3_t%oaC3yM5u_p_i+e*TzY5jrRnc_Z@}FLDHoHIX+mj~OGpg?4mnUcbZtu!EQ>94nh|hR7y=WwQb;4@-MqMH6*L<@1v}H0n-} z^g5&q?5H~#xk5Lmu>#*ya92XkTH-L3fsveb42)P=p9gXCbJkps7UDhU)GT8WJxv~rrJNxKOcl;Gv+<(&0QV#JFd#rM>=u+?%dk)!}izJ^k?|2KSP z{Rj9YKW8J0#sjlW+Hxo8&3B*>N(fEA$rP_%&S_>cORiqdX}KSp$GaYL$!S&b2Fsg? zqMSCBv&Zx5<(v)<&ArR3mvcHfEcY(2Ue4)Kb#uHFc5=?8Dp%}18bNNW%9VM49fw>G z2g3y)9`DA==~cN}?@`b=r%&aYykR8PWl92U_8#YW11i^wS-i!OdG&J6)$byiGi*%U z`8lBGZsKa@%GJxcS5HABYaFj$9+PnBc*)hvu?2rXGOGrQ|4!_KpQBcs_n58Se9Pr; zR$>uf4mW{XF~`>&ym~n{Ov~X3ZrN~Thif^U?^2G%qPlj5%d3}TBXssWS8kzq?c5n8 zz#MV>W1da!#bu=~uU?LwX1_a?*)o?`FULmfzAIe*x+E5}CraO1msc;xPS>VW)0quc zEL%6-Q>C zFE&{~Q?!UmiRBA%C`?4B#0qpho@Ss@i52SnXApqElEgCwk zI{$#}^6KT-bo;+S1YW)D^6KT-3_)H39K3otcCI}O*vr!nym~n{Q`aNF!K;^Jv+VPw z{&{`%a_oXvG0Ut!gBj<GQm`F!B>&(r||0KSd}Ds^>S=AlT&$3K&+Zx`BYxL9IKJiQgUc5 zAxy#5%ds^gqj>dltd3-z!XI$O>ZuN}mAC<-E=eL+FUK18AsKalQ-Fdp$gEmBnZB>gCurn`SLH1g~C>Z5P&r_;7iFVr+*! zUmDlCd<-qNQ$uQUOI&1k*-CzGcAp~~UM`V=$dpcZ3aA{rLL=4h^6KT-l{&k_eUqSe z3nUXJa!6=|=Ce7bWB+EEvL ziafPT<%W&t)yuKVRnGMo9gJO}a-*!sJ&=8|D{Bc)u3nDq`#$0E>gCwATyMhT)yuK# zR8C*L9J~H7`)tBmmBoI}lPNK)Vn%0cKmVudHN&Hk82hEFn=>9JcI;Qwum07`v0wiOk&vsGW4}2W{sl>Lz&8$#nlmZJ9~lkI3$Cs?|Ny;|7eqrE>b}<=Ai6W3;RT z5qNyD|IUIqP$U0O#>jtHsJkk@^$+9mMQ%p7*!wR4LewSJc>W0xqAr&*>T&_1E;rC9 zew3q1p6qd~5pwl%Y`*;_%9LKYAXBd_%+xEznR?|y5rhm1i(bJKtWW|t`%rpik*?Kx zrBr9NURmtx6&l*HGFw^N#bTky;%uU^I_U|n}A@Bciv3d2fR|^*=?@g6`C+bz5j_hw~ zSi{sC;l)VU-znnUF~Z}|CG!5L#yvd3V*ozyZI!)egm-`g{aH=_{t?~{%pOGJC3yogxf zyn5N?)ysLq^rN@0j&ynTa$eNFN)UZ(q!^odBek)K%MP;S>g6-?NZ;{t3GW#s2)5&R zUcG#V&JFWE1;A%aq!CLgC08$>F^QWvORip?n8!5`2op0Pn4E$z(LnG%3nEOMq~OKm zsC43)oE4qE$cZmd152)ck;EStWl71<9`O`0TOhO0p6 zNoVpGdQmqYpSUp8Z_J^rEV+7l($vE!_GrmXI-8IveHbR4H0?Ex34f7SFHf4zq3AF2 z%y80-F_N1gPZdl$M?F=L@9`{j(z#0K&+zE*PMY~>KKspq*EMO@qa2FP@1)t9vewyh z_41@Czd+R#Mu8`tM?9y}y_{4;+^noPdX!B%>ntpsceD`Y`HDI?jwWgaDrbAoV1XwU zDkCG}@c?7e91ba~#H*Jl&E+sza`p10^ZN+zI_QK+^O@v2bJZs;Fa`||v?pDla-%#C z6rQwD;mz}Nq9a!?Pbxl_NnX8t=B8yN;YLc!irY{cbw7j8EV+6)_j4~GEo0=~r&ik< z&&&35@7KH}F^AmGQ#ddJDOWG&C4Nl^_rk91oO}^wxyKODZyhYbx^=vaU+it?*u8-D*{bpa3zeR+u$-p8-2emS2|Pj#%$^SdPhSo)=s; zTcapjsER~Oo&~b809+0^5p}73qb`XziVn|vrk%ceIeQsnURi$v&iUEf7#UQ7!0p;t z9M7wlvv;VRt3r4?jhQOJwp|wqy%=Iyh3=zCaUA0?Y2icp3JeG;yNfeI{YDgwwfC}^ zA1EPaQFj|M)5WJnBn#=-gxq{uBHm=sBey`S`0;e)atkRZxyk+lNuN7KaWY;bIU)CK znk=fzG}DELC%My27n=6DI?jqN`MKvZ9;>>{G+ktr^Guh&fl#@#_;3mN3+F%RFj`FQ zOBNv(KX%~(Lihztim}CJkJV$#jJ;4fgs%4wkZNoR)d+eORzg^;_Zny%2RxiraXvHL+6rETEgD_yL~f1k{csjwZVNN2I5VEr6ph zjG8BDjvwqOE7i?@nu~%lJcvBHufHKro1sAh|_gY8Y5~kR^ z;1VXYYx)!R25xqdPt4>xj1Gs!W? z2$Kauy5O=j2sBOIYhCc%!xw_KH1g^Zs(a8Po>ylgH-Nd>5kqeG{t-VoPptmo?sJz$O zYlY2K@Mi*bru@zJ{u6d`!Mm#Vs)#p>Bz#Y0_eH!ENBQqb()WglI|yT=ph;V^`y(#z zwJzA8^9Ld>@3k)2BnRrw6g=zoafs!DOLXWI&vx-%>w?X?{XG%)EwbDeIjrZs*6u67 zs-RU4B;ja9T;6M4(5~z8tk<-0$am^Ip7pwfq`Xw;@vPTl#IIYAk7vDjuXRC>&f{6H z)j5bwR(z56^P(Uh9I(aN`y0uX3=Ny1*b&mmS9OUh9ICeJjWst1Y~6 zdSaNG6)sksRObByvaN85%E1-C z8Vgr=(Gf1+#Pg6`It#!@oPlJ1VUE2W8TUJcW_}Zi-(*2y6ppi%72~>Z6OZwBem)0_ zxmjh%POv9o6x!#p`wMH1Edshv5ea?vXn7OQM{bQ_?yrDN3hPuZ<~R0Uj0eYseN#)8sna~Dh;;itl;q*4C zEmG^fNc=BWxiuaybS%6?Ld&}2oVaGQnY@NR^fE8PAIfF{S>$W}XkCzEl#0|k6&n>)C&EO8lTgBP#R@uXj zH-V$>(Y~_d{gYI?O38qS9q(0UuT}#+=6DN%PT^kC+nMsD<9&_9xP}kLz@c}%1P9vp z1*i@@&Fy$aXCQkm?J1B7P9w*?juskdGtA2;16;2_J&myOm&qPCyoUkC3U?~AgVX@s zJkV#xukm63O17kJV^z*MZ59e%c^Si>JJ6Q0>{t17!gB`)x-I)R(%?a`hyB`7%m_e-)>$*kGQB#=Jarfk-x(pXHZ=m>Hj*w&mvWbBQ&v3(X2vwQotTlU2w zfULRp-#MKx*aFF3kNSD^1W>|h%%g{;(`dUN7LmPEx82FMQomE7G1tBk3&Se~*wy(Y z>(2&-P{JK(oo_$46#XZQXnwi{CHQ+ze@C{v_WAZcl6kW9e_mJoI-|iXthI*ls;>BF zsKNY&oK1mkwJPYVe|#h=du9_HMkx>MoSH}AWQV#M|L4@l$gTIw2gS~ z`zr9;C$SYSl$$%`dG5U^FY!7Q&@bS7H|iJRLLpo^yGZUAFMXpks6`F#;X?(lNwSK` zz`yeWmV)Q39}%F_9&~x`1c29`9H52CRF@eH=MdnyP00R)lbpjzZbr7`mm&B?Xf6m} zZ4iDW13oSj^|7`=?BZI$y4N4$B98HS0=+Oqg?$<*t`F8!h-t!;MvLUeEgvdx-?EDN z8tIXcJ&L%q2sZ0tgZeC@-hgb$10mFZr$@ncVS1FQr$(J?-Q$mO0mr!0AL9a!@g~Q( zA~Z%dnrD)y;nZWq#;J?g)jZDU7;`Q$^EjVl>_WDrAv6YmewR7MzlUfEYMrnI7-IpL zSB-HY$9Tpc<3f&cS`uTN7aC(6nrDvjms5_hm`~~|`1}Q)wH5#s8=Xz~_YnT>5QJ?S zKCUCxYq2zQ#fQwnT4J9AM+n!2%jT}tjrZ$s?*5DHo7qB%2U9WbQXqprHt@&*~>R$JNKkIkfla?A6cuca51bK4dQd%D8b*dW^{RR87_r7AGIq0 zD!v4XN0C@siG*|D`OB9!sKm~A5(!3!D9ekts-;?~zay|p;%}h;tL$$|hxE^t{@c;B{HX5t zrv5$`{VU!@|AZ;|9eFu1Ph;{=3j-MF(s|E*N)FmK6bRBb`@1t?;r+-qbyd z(D(+`SU7&9^Uh~X8#4<6d_=X0Y?ob`WpUSxbdLM*aC9zztI_rs(zaowGvQ8ExQN%| zf^`zRb*pZ)D!EQ)_963u2EPrHx?7ijhK(K%!JP@7$81JAH)yz4;@L33pXkij(6Lt9 z$_1MxhMGS>d8aPNKqXCjL;V`%H>>iIPLq#wgFTlEifi){t-7V)eQT)O_f5CQG}VBg z?l#v-+!g9(E#qE(SeN`se^V?>S&qf!R<7VSuHY7~;Pze4t!pjkzO`1oraOobu_`~0 zon+6p?RRwX1O1B9(KeJHTY>AWUcW$EQ24p+xR^IN6Ztt}Epjc2-vL{{jFGFvI8Yai zeFF{86WzO5OtF#&dlcA_5Oa5kc)-UiUUFCqW@OEf2H)_hnkXmLip680eL>q zo=H_ovwr+_@k~lOV^a3P#Mcl zD{B2yHxPMH@=Ki~itEu-cFQ|Hif`#^LD7IFidGrT?Kygoz506=pxA!|n0P*F??SGm zSXXf>Uy%Wz?5&b+UCeQRYQ`-)sAgj&cIax3yJEM_*fMbSWfx(P&)N1%t8ow6m69RP zo)d?wV&A`a7~B}K_dm~g!_0*%Q6(JvAerYJVb%xP!J1j`*F6-}J*4XT{JJj%bzf3- zANA|L64ZS~)!paUeKn~2s;Ya&uX`k@dqmZ};@3SI)IF-|R;|LEz3{DH`=AFE5mLkbx!BCIMP}a;2bW)X11eH%HJYMkecrw7_Nx_5H zumVNkA$f(zlM0W=PhO|-crqC3NsY(bJ|5o+D!--h;1za?9!~{$JSBKcQ&qr2@(Pcq z6dp@YUZ?SRDj4c1jmLI$QuO#vQ28B&$Ll^G&jffpBX~UIk0p792d{R(y8PhebsCRn zf}x(#czodF@!g>Ey9$r3s|`J#4e)qY@VG!#fgX}qcs#4{s5^O`#^c#wsAn}Eyy{HR z}T;Z5-kGu?;{0q z3kn5|vmRPXwAK+7dpz*Y?lqJ?H|y5VL;Bl4uy1a{g?0af@;`Oql9f3VVD%2iZj-yJ zV@UkvQfdkmf4Z8I3nk}mMPeorpFyJJYrE8-)CO0e33WxFyS~0RsQnO6<{iKtUITEY z0C#sc63da8)&sb=45*&el|NB%=_!`nyE}mR2R$Bc57xS}=Bl7JLsxFj!?n5`sR;u# z^&-)N#IKMjxi&O|C1}DKqz)K}e?0XJo(9~n5pEjb&W1vW??K{LBuehw6X0^2hP&++ z1NWh8g4z$EObj8e(prGyn`Yi8+)pEMAJ(p_0t|(VG zSYtwLkoa*3p_1R|457?ct)cD!AT1q4Vj2=@B*5zcafo&2qv#8)TY^NKyoXB;<&PBZL=zJB3Vf~+ z`fs{i)p957lUniI#fCdAL@e?bE^${JYtkADD+KLWEbo`rG0jRcUgCgB;2 zI+WF-?60ich{XLnfYjL`dcCiZa<2S0!)8bIaw=o(giyj}!2Jv0F6{<5q1SdK-q{Iy z{YX!C1gV0*B!~YjYLgf+{tyzkbL8Tu0pdBkc%@q}Q=4 z1+EyQk4SAmuiVfsA40Dt-R)NW9lsvKefJ8CdovR6BLSrH&xBcAkFu9gc0O9hUq^x? zmb{0_@sAXlg(d?2V}@SSPR+NxtYc~e=*2s3g^bTs{ z7a%d?DhylvJV1QFx^fg zD1s66cYF+n+kqvX3GdR>erLa$F4dW}By zemo4g4UM4J6#ysnx*mzK*MeRtJ=sU~_fs7HtEjyNwefEu@gpRx;@DZ(s{j%IA&Mf` zA#oImPa;wBrx3mVrcevf>mEH}(kll5Li(UIadLW1(A^phy>7>FQ*OYxcO$V82_SV9 zka~bfy@j#^tb7-Vr5^!Ow}$BTZ!#>l`^|=4%T7(NR{?k5T0j~Gi$Lf#28kPQ1iflR z65#f6{rxtFUxeCuA4Osr5|<)j6_@2>ivmQv9z};)cL@@O9|LON(_P75Gtea1k04~p zun@f}q&DEM#o%H7DKU~EzxuV@`kIknXJNR8f5W)vBJnXKfYjl9-10=E`cd{BR$h)o z!A%(U=U1_X0{u;eloNyztF%p{20lT4y_1jIH={VGNw$D<;H}+O$!~SVji|Ut zRlvF;Ke+i&Oe3A_&nSRa;^=mjdJ;`bWg# z?*#)VT6Hw&u>J$Nb!_&Q?rNIh2(5l-*;@7} zIj&p&41@d(s8WQT4@*zOXMEt#Qj92`dq@pxB`(+1j1QE2LT7#t5L18(SAlEHxZgqD zqx7qxMxh2rOarv5jxE4s%56L6ViQ>?rz27$$Ajft(4=OU!zRa>TsMVDp3pZ*5MGsD ziM(o{0ul-F$Rr@Ki~)&rPMe1Y%X#EB^93NQe5tEu0iudcT&4V_xBa@SgSx9#oww2S z+Z)vFRdv(-x@&^EYgApiU$-x)+o$TjggWI@UmN(4*K(pWcd07)kdjwE4MF7%3XeDax{m~PA5nGACNu9FgSs14-C2I!O+npFs&0{A z_wk_a!$fSNyR)8B~5!jrDiG?qE=NQ0g?myMyw(6~J2i(Zygi+~02Y;GEmIVmLCo8Rat& zxLqlH-7Nvd8$N-&Fn6~+_cQWV|*k@zwbmm=|7CXz_Z{3H?$NPO~Bl!@4H zOK(HY!HW*!cOmh$PeZ#rfW#k>D1I3AYcD~`lPEd(86>`kM8Tbq5Pybgz(1DVnnG3CyXbKuxi$U6dj32^p6P{dzH;!jAFY`k9eq?z#%0VuEUDj9@Y<{t;TPnGjc zjC#ELAs$Vw9#4h2ufj-t^;-Nd7+}j`BtAgme~>6S_ur(8K>Tk5@vwpT5|)jBC$Sw~ z1>8FcH-=rc?`|X}A`$;A;J%_~K<9WBnouV0L3vcHKV_h|NV&YwF|i;tvyx>x!_GGZ zolF0$C&+RQ5Xb3fLvNu`{5*{P!+Vfeh(y=D80_NE$$jqBlY1C&zqc7Y zu>#;6yqYs!kHpCPpi$T8N!+Hti_t8;2en^DZTvCQ-AH^K ziIN}du3X`*XhOqb56bNj9j=%1z=V7)R7ac1UwNy(U(fVw`a9l&fr`F>5qpv7L;~pS z2RdgpqwEos9c1NGNL=tm3|k08iho>a3rz&PA8Dz@Zsp&}*Z^?vB;4l#?gs!D|4$^+ z4*+h%M^sO)Se?LCY;d_Q=kzaC<8k_li(y3Yk0X_&bcUTj9&}E86%vMjEXVp!$NF>h zKVZ<~7&QJ@BuXCyfQv)3I;uu-cKc6MY&-S#JPf$Ypp@e-#N$l>7tcoG^oIcV<`CTJ zXrlMu4W}m4I{^4Y0-OpsKLwn45g~sG0JGqp@Q*X%Z-L3&DU{FEFXgfeLd)0dRd4}8lY9Yc?OJ_7K~knu?rtYVigkINR+%En$<8gArI{FsdeV5C-*Sm zrU`cwzf_S*qCvi+_>;wbPcK9P9`Ir;8TZ-!@5z+TU81mt# zjLlV=I8jcBShb4Z!C?KsF@6N&?87+m7m#?J1J2Tm!r84s6M_tatPh@=^~%mg^n!4Y z0bK7RNW6{2V@Qf`w2%t3(S-O0 zaQ}G9#V?t2ouV#%r-jm4e5Z?aF@2|6RqPyi3BJ=>T|wXJa#ayw6!1jfspN9KaCDbG zshe`)lTD`(Qb<$AQUGW{<&;vnSK+zlqszI?Vn8wclfwzok-H>rrI+V=9%s5ZR40<}nKq zU_}mCn|6X^@!OEW-)jABPpNlyYVWX?!HkR9Mty0*Pp zUf(ojiTpCt=Ho2t*D$j%9rbgL&2|?uQ_qywTi9fPY(Au#%{LS@TU+FPOH=T^B|g9+ zeXSNd0@*folFfD)VQm@W`1NAd+I(0=Jq#-&(CccpTJ39QBh>3#GZoh~1m~MT5PaDi<*%Xr5 zKO@G>sthJaqf5y%R<9k-Y~gJY3AT!bII`kr_=0o9$6?H2j`CXkmYu0Jw4Fl~U^N zNtU6#9QQ5W<$44wLJW;#u<$_s^}yz9zF)8td35z_%(ugXuE9N^Vriy*~rs; zFvVGzj%`zToa_*4kwJ$HSFP)*@QjT zV2oL###P9(CMVaPK8ihZhYO~sR=v}Vk!7K=Ep{krKELMz>G!wAyLeFl*SBdVSabIM5K-uW_AP?Iw4uQse zmUx)rSiElyp;Ximux?nUK(HnrrensmmxlTPT6wskq3&&px)nr}&=MckNRwgNY|t!Y zgyqAnxq|qL`AFcgRp^iGI)G~O)(=Odf~B0-s-UMHuqxb=1Ft411Or*lF$jU>HHrqX zlxAC+xdP_k0>M%Vkr(r<3$hoD;x4Gy1)!ZOXb886pi5(T)}_L4Yr{pA*{X1zUx=kt zMNLo-)_PS=rk#%=iT8$}DT`I%#&Dr3+7uLBUp6{udU1HVoW&*K0s@4^;P(Z`v*7hg_%2ozB4$~4A@W*I zmv|xt7X=7s$e~grz7`wU5S~LN%tc06l_{x=2NxlofDq)Q5>w?vg-?Y7M`RMAIib%o zBbJu?dk|tN1F03kvXBau8h};;kd4OHVJ%)x<7WZBDv3EmvK2m# z9!zA#zi!qkqLLYupg1SsHJryF;}0-X?Nmx0e^Rq3Y-a0Lf_;&!2TX*J#8Hsv`m8AY zsR~2l2Ery&5z3xZhJdl(hVH}#nLF_UEz9&yTo|CwomgyS$%T3fx><=4EtCd}LSn1b zRKR{yl4XgHq0AwK;YI%JfTI?%#>y-Uj3g~|m4pILNM%O|zu+I$0 z^dW}>y5mn?G{o*jo}_Rh*DPMy09R}L2{-~l$ag@1NYx~IRWzq5Z< zbAOLjG?*GF>h9W7)X~yXw4?Zf`vwPE*gP|b z9vTe$rdzxE6hx5MBvINt(1Bu%Ub`!c}AYb!%7diq)iyM;2Q zPe)6rx@|{W%V1iA1c5H?=|?SS;io}H!M~%sZ%cD`D%sQAGSC-BUsr^HVyRlThVrWJ9A1~q{*@9`oYCN(XAte+1oF>>%zq^Nq)9;d6%Clez?J8BFCf7 znnH=L0NQ;J%8>St#k7`#@XqGviX!**YE zE{#mJok#W@**J6ch9_2C!`koN;Vvn1?yw)vb9TC8-OoAR{tfPmCF|YF#p_dx-MN2R zyTLv0u=Ct*K$!BvMyJr7?IdSAh3(E}ckCt3uG#CqF}UH-HwHIWzTu2)2WAf*cw^8V zADNv48st_MIb8=|a#uOu+~cmCd)exZcn|rQv~$_)4G-OU`(SF--9^qLyN}t3&QYU&{9VC4AB(- ze^6dS73cq|jsmeDN=XC`?m_Qr-lF6#D8e!b2c&$J1rcjB1QnH1S=2gOk3m}dDhmya z3PKB`f{>K4Ob~-I zCk8|yIBs%(H>f_WNHti0?-YrrmL4aAJd?mKYS6tA?H6i z-2U}9Z^4Ffq7TTYTga~!{D?;%kAB}7{eY8Rxp?>bd%wEO8B9B4k1bwuHEM0Aqq9Bs`2uy%mi*tuFOL zG&1LO=XN_%Y`?f@ab#xpqE+tTq5~by_jVr_b)kDw=8eD`rHJ2c{GEA2E7dgVms4Wc&Cr_ySpRh3h4n>+=jW?k!hz#=1p*R9dkM( za}}&R_ptWQR;0*wvXFd3VEsTw_;-tSV;^vOOP$jnclw%~(^pc}jc~^8bqYxMNR;~2 zEb3yWsS!trX|RqdF4725Vb1a+?#*ru0R&_}9OR>Dqz|)>Y^4ib(lY9_%XW$S%N?1Ki*hi7EVDu_>Xr&#SqD+&Mb0C-cGOu1LDdT{3wwD$crC$zI{dH0!-2!>kOn1-0XOJ zw>w|4_d7q?{eaW4-}#|k>b$Z$?ewp_;|{059lL1IDO$Pjz^cjv2M%m@cBG$oMk-SW zQ@@Z?$Xq3|1~!Y>io+w*gzj9nQ7#ENO6-PF-0q{o+a384(F2qe8k!=(i0GTFxsV@f zd&+7YjlLJO6u2Xz|HU@N{HT^X)sXq<_0G?&qwdDT?y8@<9jlx#?uo3h57X4i#2nAU zqxDcpq@@&1niJ}j#Vp%`(^kAP45qQ3x8gUM{YmB>b&3u)--_3sVC6oz^0;$duvI1AgI%F^}32A-s z@-&+NHgeEO??vGak(JKQz0O~+*bg|)LbZe>QZzE3ixkD0(JGHRW7J;ooPH#nKUxrZ zg5Q@ZS&(w{>O%TRN7>x2Sb|wfWJac(PDqg%G4(Z$U$BBTGiRH`f!!_@S=4#krbvi7 z2X@mRi8`-9JWAp&)8ZA~;x66dWz*um-7v1v)^q-ByAL?;MgZLT#FfWyb|xKjT30%w zIY&FXKYA^&cTuG<>=qCo9owGj%5K-qfi<1GV6)R0sU!v8c z&haaO2C6*=SA0@(f{D)^8wgVPAYb6?9YGD&I-D$MMmD$IGx-^rBN_8mlou(2Yq1TH zy@=Hb^Z8$QGn5Jc|AupMLQJdZgkV?;ZyC&pgAH+dj4$+m*YP+JrbN#^JfLCXWh(3; zmaLAQWjZ3p&p->~XCSHF6Q;C#0{b`Yo^X<|icN^gv@%hg6I~Khqg@h{HL)+92S`&B zI4hsXYa*fj?jWSCQ(Y_l}wEM)O&|ri-B1$77`XoOhGZ;4m3fi_* zc3;%luGL>;4(-6GqYbsFGmfgOUA0ytXL?f3L`pH+Nr~`>?3y6iw1Q_lBX#103Oxee z@NJs5!(DLx9)bAGfs1tLORx({HN|Ne4C9B#4~N#WNYAXaNLZ1fOpS17BWUD2WgmCO zA6dU>NvbAZ^} zFLP(7I-CuW^Xo@7}xtsVFcaSQWO@1q26^NSP;> zQ6)y5@sWhk%GnVqLs+zmorFZg0fHTds}92*>EJkH++)sIWu`mZjFKkO!^tz?^6E(0 zXarV|7rNO}K$PeJDOyAb6Curw&K-N)u`>qU4p4gXHs{yYap$!wXFCTYvky71U+LyM zcSf3=-(0zW1A>PSMT)W)xr^7Wk8I4w#|1e98y<`-V{$$|-1j0EW?#KNa+96gxG^%9 z$s6pPwHqQO*^yhMY)N)%ePkcY+(W6zwCu>FnbKH(p+Rjb8OOa~gav;Pjs5_t7Bl`~4Bn`X>^1$}b)_&)`E8Wt_oH3C(qtz#9 zItQE`6F&wn)BU!Me`6wt?a}x*Ci1+Uhqg{1TG2*%+Xy_JAcC}-VjMUFJJk%b6;fk1I{n6-0$3rS-o_ndvIgp zM)x6Snp^5@NIUsQoy}=y%3kNB&7rP>7UZb-u8>>Dp_UeR19Tjm~qjv|q;3J~w1( zd(_HiQ&2=GN}cfsou6L`TYPjW984$YnA4qh#_xB!($4AooxZfQ0F=$)|8ugjwlU|o zHrC>Hfc`BQ>(<@wLFe}@xfLb9N69A{_=uF{M#|7*oD;*Q!c59z=!BGqm*=+lRVfe@0 zInL=ABvN)7WH$yI#gE>|4%^-KXDm9`UD#lkn|@bPk>c@+OLhpCOhDM3d~r^@vo7uY zzIfDKfkXyR@dfOP)1=M6a&i{J*tbxH~Z`Zb#)OKrEd$PA}d(s#~R`X!G&m5E` zFYQWOy?sd>pDMgkIHpRr4Gi=RB)j`MEc{x(d0Sg6j`UJnt&9V(WPjg4+G@d>SSs1u z+|!oin>Pm9I&dM3K|}n_7C*+w+*CsCV7}m=@N30Q2lpD@tg6IEHNR?%Phv;$K^{tTL?ZUL3n(;kGq*ceP>y zNliOVG;J8S`lR7H$-*iiJlE8Gh6V3yZ^vYM8#s;CT=wKHz#VKuZ+r^v6o0gA(eV5F zO(OFE+wu=plfoxq+UZknjMvcy(uI#!lUth8EuBev6n%qftFpje23?R;pUr;}uztH0;z z@AJ{9wX3}g=kZqSAb0?;KTEdasJK(lS+OUJG6sOx5-{t~33m0iw(a2Bb)^PUDXX7* zXv@yzKwEnoSiYsr=lvGg<=B0x7I1wAjWz3GHTt42a#G?xSZo1YW>LA}V{@ zdRqE-Qc&qFq8?dMo3W*@Z)+FW1S>2Y)ZW^>6O0Hk)Rx3{wt9T37y+ZiGdn0A1LA3H z_^{}fIy@VY9vEy|@sliWT4nTpof?2y1INFejDfdwIzq9lYs;IkTF^KH$N0xx#x zMWO%<(T2=Rc`Hw$fH`;d_(EF7gwWC~FjUQ0%>%32c3NaPU%%+4-6Hk7$;1$%5Qu~6 z*1qk%Np1}cCQ3zZX>d`Bnxh4Zq`w6k$vlTb;R()E@)Hl!G!J%D$B7&Uq4nlc;#v92 zkcQgprJxz?ZiX%)5fr@w6iL;N7DWvzH(AXggDbuPXF`&5w^JVK^$F-B0+{qMUN{M+ zvd*_uMTK{OEDTKWgU zN>K5XDOx;JZai-S!+?4%#Ii;=DboN_R4pQ!TT034 zLtw2uAxj|#!OZ3{7>f~s?MVb}AS@tb3_r<2cJ)vSfDY~5gDE2j!Om?1P(;F8V#PqV z_YP7a>pjrY$!E9l)^DsL+P3348ORq3p(Lb`>-DFofbx83$1u z3%a>kvx-khe;Wy|gT20qWH_0^sueHH0(1LlDY0nvb!%Bn(X2KAj3aENYObSjDy5Hv z#FQ1nea)%UaB1O!nvJMMys&Ze7MgAY?JaYQFIdQ}oEFxnAlH_YuQ|ntQG;U#^>l;r zQoeSg^oQu=TMu_8SVJ+zAg=mv?-~dhFX6t%-W7gKS?O(*FD;foNxh%KU4{rK ze_Wp&oK2f>PuBn@OIC)>KqVPMTG>fhQc;subE{AV=4mU<8AYH0F-d8^ii*Jg;x0f_ zSp2?b5tf3i?rz2qTv19CtQU5VBAMtOt!onoRHQUO5XMh(?Qz62&FCszxT#r4(u#f0k7pV&4a!`x z=P4|bwAXwi&QLOCDLXldd*Mk`Xf92!WV#cNTy}!>4OKyxfdMM<3?q?7({_kNno&I< zOm`ZhjCw2OD?4pma7@v0LJ{~@JE7sM-s-`gn)ZZ}|L6m=uB*3yFb!V`Px)apcEg_U z#=WPIL9(KBa5`Z2g=sv*DFczov0BwI>60Ji5|V9c?&>BRgdfW-;=?2@oX8-x%8-dd zG-69x-9SQkgAN%CKA0P1J?wIrLg1}nDA7BQjugbn z7FpF=B^Ic!Fp&YJZE&G=Gkj5S2^OsvtEMb#qjt#?^sP=QvuT@h#lR*Ve2f@&jz|Nt zBy~94RpY*hv^qhOVzJtK`ml=KT|Mw#GugtpUus8ktzoUgn=pzVZ?*N)*osQIXM#}f zM+!PStn~a|0Y2cOfNdaGAP0n9xOGmVu#!nd$>jFVKE+8Nt`D@C#jOFC7W3VLO{b}i z?a?*>r`)%81l7<10oV}wL>u`sLxX(EQtrGo#_s2O!IhN57%f_r7b{ASMr${G(w=T( zpoe+CgAzlCi34J}juPElVG4{Ai02LBA1rwH|!Gg&!3j<>Uj|!=7nv%iJ{~1*G7cNC^c0K*u2UOiEnN9dtQmAt|6_iw&{4 zTe_EXTr9Dq%^Lg4TT13zwrxNyHAnDRwoZOVk7wbbFWxoUhm}4Um9{8zEu^ z9RP*VACj?w+Q6v2Xr`PwJtX;D7?VeWN+^RBwhVTNR1?FT8)nexV+^U8S^`1&z70sv zD=dKZfhg!B*2{n%Pl95t(DNey$?3f?lo(LZ!)PA>oFIA=js~`bb|;nWl0ce%pkH%| z;yd^R%`|>N;|u14wwe`SQCNu;$@<3H+PXx2y+j2YBzoa9j)?y7MpR13*EG;UEieq& zsTGHL1Km3r!fNFvA`DvEWG2dK^I*I9yW|F;rs82`|Mw1dcUuj#^8{fD@*A77qGmanL+s;Em;YkOS>O&~*veSbw*n)GaGZPqSd66Am@5GM79 zsdOwJY5AdYLYc+dejqz?7i5x)d=l7h2&aT-5;hVQ9)TQE%O%29ZJ;5ZGI)#jw*|MZ z2Tn;+Lb%E8h!Kbi5CS7yu@$C;C@t7}2y+RmanUFOSdQSQvF`OYkl(RjtpZa{{2#=W zMc{+^2EdWlHuK{L?e-h~RN-j2FG5$@$?afI5#+|=Q(;8qj%^ui*$N@l4n|b^4<--X zklsNZZ&TBTQs5$F7_5UQXc!?s_b!M4OBn8a$l7ckSSmxMl&>GsKm6^7Y~;WT(*Z0H zZ)ogH{aQ%P&gjNe$mJLB0eq!42x4DKpbr(_ev}04#rQ3vy;`zRO3@iq7LM##%Jp7} z_2c=DZVB8QlZ>H}ld-TwZxFF)+ZO1zkVPYVSB+xUnkp17yr@+ZTEcr+_{%18gfg&2 z^3l6h+Ap2%mPks7VT>G-t*yn05t4z)rmX&<+fTbYX|uQM6IIKEnMLbSvW0tS=LrxL&5Ylxb%KCo?11V+ zpNR#Mg_}tG2B8p{2{wlVF53I_-CwcEs0|q4hR+}_ZAjWPNE0@lLy@11*oN4RBEhwi zF;QKJFve#yaScT|LI-JLaltPa?L-_HTpk=S-iT_cd~&@9#fcK@kPeiFsstyG-RKo- z(W*KR361o^&`J98TLv_zde)$F>*?okD&lHrt=h1nE)lOV@q_=k|L>YoZi9g^&@tiso0ZMJS_?) z1xF7RV3i`$h&}6*1yzr8Se`KJ##%fBFBwXgs=Y?mm)%AA$q1}=gJ9JtM@Se_PlC3$ z5$Ce^K|D$;9zQCrU?MMiKbzQ#I?@YRj4nxVXoORI2L0xN1yqParlX`);P;7G#ehA{ zmoog7+||ot8!T^srH;kd_9?NdC>8d2Nh5vOcp?cz+>ki!Nd{}flaw)g846qmdg}0* zehfgdNTzuUfrltR>@9V+gm^Yj$)PRqc!0!!ImkfUcA9{pakS#>>K|e)E6uCrvmoBw z-=!pQa6IShdT7!vMkDF9ZG!|CT8aNl=F?9bFo-LZ`7px|tnlHMpDNGfcJfc)L4khS z9My(_xRdhi2X`I#!EhD>s^as=gfgOXB9=1U^C3)Yj6;~n>NF<2oD!S&Ehgm!lhb&f z%kwJj#EA^IlG~KOuK8UB@!*~Z(H8M2Ah|M^n2$49a9qskg*sn?gT|AJ6^#Ch9QO@7 z6(dzob*LE!UNTfL<_8a3%(b1Wr&vC@K5 ztO{{r`D6q5%kN}}A&e-o8yv+$<;bwyp5R4!2CA)x_Alb}I4u!-gphWqxS%@7Q=SaS z9mYh2dSE++rX7B^gOi2erH&5hLi~+1CX29 zA=^yY&>*j18~TGo)LKDHkc9pqLkX_=2up!hn!l9JW;Z!#7qk=@ZWLLU@WeS;9l2BX zV0mL*RZVR}a&^42Dp^-v+hCcJWev5-czJnEV|4=_uoCkO3InDnH>PP+*HB-ZY^aM@ z*Voq6slJJ1Lro3fRj*IhB`PZG66Fo`etSA`4V9}CenEB3(wd6(em36NP*ay!mZ(eA z1!d*s31FD0F0ZMmtX@vnrBiG|zs2f!69Ly(ZU_L^*HwwXeG{fgwO>Y8=cD{AV2DdGb1Xb3li@D1A`OjT38Hn|K$N>s?OiR8Mv%7#QT zQCC+JpvtMCWkqE}Wlgni2Sk9oU{YCK*^mLFF0r}>KtN^$6oF`Ur4OFn%H!pUx`yP^ zc!fB>3{22)G?)`qO?4&)%c@t$8_HKCE8-1tjX->Pyiy^u`idL}re8qwmtH#A+Wr5v*TTS(~hl*RM@h)+$E8Nfot=8IYaV zCh97et><$3#Xzd2YHcu|N``R#k_0APT`^=Wg|+J&;76@aHr7=NsAN?<1aw71L+!jd zbK+H%@%lu-<165KCF*=?8O*R1sw(RnYO1RgyC(p(3j3sL8BON^RYDCYRsnueT#pAf z=lJufto9k+Ff1gY2m@hrkk)TYl3?Y*k@b+62;Fz}ZuKj%b!3-H6-+VcT;Ke{$rSuI zbE`@cA`U8n)A4&JmRHo*l&?xOK*Uic&}>A2*i4yI!H!-b1&|9|!NzLYY?T!!A80#{ zFO@CoLz2yQ0!f8a8k&+B72KW9*L+J+-kudGIJ`q{w{UeF204vmdLJ4 zRMu4_=gnJ~3@wtLNOeuaG6+W{4!E;qcJ&Ymwe@Q?3_%d9?C)TXWNaTfjv_jVWMy>& zI0m~tQ^W|tDyymz%i&t7mKZg;w6U_P0eyVxaO83@Dn!ZZ%KCZ;$t1W% zB=FZM8LwO3xEf&eq*!MF`(j?rH&})GL>)FZW>f2LAi=0E(a=~|oiI~W-Kr|$wV=>i z?9B@9Gk>y__O*4DYe}nBiS;5^RTm+4Z2~VEHd7M5X~ekI@sP#}wjQKG-SPxX)h*py zTlm~Z&@*0Nzpkb(;EnP+L_%d}rsTm3rIY>kf>q<>Vq)2rUL*-SKBzk#$VvXNN zv@V5e2F2J#3EV&;K;0BR?f)zz%lPw3JifbFj)PA1g~3UWWBp9rhGre;-T0^+US zXf&3p9Yte9j@(Rq*bK;ZktPj|;G-&P8i^B}RJ06r*7^MMB2Jr*Fh$Z|lqDi7s ze&=;KzbcQ{RfyhIHmpoX8feWzqJneRRffbxO>LrD3C|4irO7L5G^E6{#}Nh^7}ZRd+(zw~to2zgxw>M3Uk@U})&aL9s}l`i<5m8~^_wgM zPp#mdrI?UXsI%It8gBByNRqi2yO5dX_55ukra_VB+ekh~iOE459#*D`CQxA^upJnj z#=bd$W}pN`kbp1}7EfCE7*pO88nuA>m4h~?4OPlvB|&^)ad9@l!hoxcA{lB@m|dj> zf$AhOzp{2ki2N0arH#vFF;BV!22Ai&54{|69}?FT?MNhkFerdoDew@FtH%bvByI4QQN8&mG$I@sw!oE`Hy-TGLogSpfX!N zCjesuTNs4zLV$quXTUq4RQ-y^h6)(pL)oTsIUS^6%TFRtsyb9{P8VtUc&Jbmm+KSw-EAabdJRwAf6^;hZS`9QZ=(5U0RfV`Q?c!0k zt5N$A8aK_%%E5qD8;|sW6{q)Npu>%RXh<}LeIIi`tK4bzMA4-w7;Rz&sUL8pWVA%G zW|awRutk_dIH+&5a9Q#E^EMwxk^SNjq6QX+Um;$m=pi$m@~WEpL~RW;pRtOS!h@z8 zVvj4JLlvu8MgtGzk%1*1OC^V6vy*PR9)Ht8Lm^hhs1u(8ATT9cl?UeIPjylaAEqiE zXje*8S`x-PGMI$jSQ=sFYxRUM)=vKL!2~$4wIxD9>)mvQ5CKg66q#=^W*D#`r&r4# zJV!3i5?QIi76x|pJcJ{a4{fL=CJTK@+JfXmS}$~XTXA%6aG(}n9%3@FmZ|z1YRYTy zHgD4|U|hebvZlPD%BKh>yqyzfheT3Lv-(854qj?VSAg4KgVrodu7*!s7m(L%GB|yi zCRJ6{yPBnN3lj~A zxfkdHigRrpK^|vX{7{c|<$;XkrU;0EU_?kSuue1s+?7*n0`Q@Bvs549F6m+jF8UdA z^2sCy5cUPk9L}HTLlw2_bD`os zx*F6sVyY;^SkGDc`^wNAB6>t@`HrkCO9Nc|z`mjk@Kr%Q?cJSty30odTU7}F#jnb3 zFhqpjS_&EHH^v;nC^A|Qu>!rqMx~kT{Gls|mk6kN`YjY66KATS+I1EFK=p{}WbhUF zQ(OAj6{04UR*>^QZGRwIwG<{Dw%yY8Xj4_SG+w?+pSY>t8^~d|I*3!ai1isFX~1v` zhT^|qp^u(k4{`d$@c|9+_@ZAg&R z1y-mr` zgoWzOqX9<$1ke~Y!eOKOp^<(jRyaeQ(5h(WNp+lm$j75}pLo@Yb+S2=ba(?%PD&7` z)rp1`H5E{Y(CQ%v3}m1X^P!Z-YvUoSj8wuSeZE`Ykf?%)(k584etmUAyor0G6PGso zFygiFgA`LjfaoYLXi^Tzj$r8jIxn$c@arD@*h%{g^d2%ISL&y`^x6hfc;FWY)@E@T z8u0}L9tXzrKKc}ss+PY6FfG->u8gZapDF4{7VwXR$$O~iY$BORQ;R zBLmSWHc~Akz`$4m=#XI_1iiFFi@-)GoEi9%85>$H08o(F9|u+>4hd;GY#hvBB`VF& z1)gAI!?NNN-9Q+jvcvoi+>~17Dg%>LPbI~`lpj#zfU6&BnkQk}4WtSorjFWU@UXw@t(SR2$Z~yQEx(XsvM7JoH3RtQ7=@IoKq+mRW zaAGedMPRFP#a5a-^+Mqns@=*MCYPzGi9dY20uMvuEU3O5(8N1=(BGHT8|a1X&7Y!dj&@=BA?=R}=~SleBbo)(nFOq%bQ9M7cJ24yjm#yh0t@5Asiu&Q($3}=$-bdkc#LSM)EIVW}*XhC! zhqhnW9@O8QrAcSmst{%QCe3$F@$bW^Z(!kN^YRDGO!9rdXst;aNFR>ZZ*_-v_4hEV z|0U~?$;k_HP&3R*q15D}8n+QFjZSGgr2G0`G2H;S>dGG{VbWjJWsbG|Y0G3D4mC9C zsklOsf6`DTgHJQUGTjj*FvhN*VB*eOL`9d52%L$s`Rx z+p0CmZ~3hnO!DV`(I%7pFTbe4By;twZEKTBp6M4gm}G!DUiqH+w?V`Fgb#bILCOqk zTWf!zYXd-L+xyUP6TAG~H0*#whb5|rhe z^hH7043jPo%I27KWl&aZ(ra)xEC0Yr?^q_o7f8793hD9bnL z^+DMLlinDV#Y}p0Q0AKSb-GLtRA>dChN4&KnSs?!(u{3e7n|fJ4N9@P$+hWH^fgH{ zCi(_rsnm%hHkc6&r65I3(u~0o8xEOV0RE&bVqn_V8k01=9qYgydrYRwM}Cb-8tBsQ ze@DO0z&DG4EpL)$6rx|}qi+VXtvZu5V}6LZIFVpYW<`WV=LEUDU$^?I{^sU1>6N$^mw({F=Pi?2r3=|mRR^C2*!TVA zX*9`F-3>y_Bn>3RmjM)&GO(WUVKta!+=q3sNrquHoOF`U`molR@Mc!>T(etT%mFO(r?dhgENqVOS?B*jn9TjsE8PnDlKySHCAS2`2sdpe)~{9}dc9 znDncr&d}d5bxg9# zFRK5)+B*|CxvDDvKN6N^5t>D9S)^oJSHTqNp7hR8Y_es3@p$0ppA_Mg$iICBwMjhGG4qj`Bb6-QV}#s{7ueX9>9;k3w-GHKgVtT%e|KbQuNZP%r2S{g118?_Jb{r=3 zxIj9>9-p56O&2s<_m@Ffkt%ac;r}8dh$8i14Gok~ns!j!Pqh!oo^!liJ?9F=K2rwz zRCe7HiS3X~JnxoDW_Qkq?d39hjdyh!Z@XeLMKJ9l;8O#w75vCRYXiS9&??{;1zH>U z#evoe{ttmBEaU>)UZYoR$$%nm(E~+O@!~+&8@#SAP|UN<8MIMXei?K~$Dr4hJKe0( zOScK8VFf>Bd*`Cj+QDZ9S_}AaptXaK1e!F5a53k%yje3r50{uNMbN59E?kUy10yI? zTJ*zQ4!d15F^#c+GEM1>v92ejYofQH1N1~s${kX7)=L%7(gAwBC*|H9y+ki{dX|pZ zocm?Y&wVgEK&N@B+!^gWy>z}{ns)G2fz}Fsd7!m{-xO#S@S6jz4g9l#)(XBZ&|1Ln zwI3u%|IC&O_}v{vx<2bzj0Scq*0 zi^l>6idb>L5Iocic7bAx^)t{$UHKT!l#cg#UAe+OEyt1z^IEZdT`;YE@M-pQmg!$w zgWx9wS_}9)b`E^t7YAAk_>Tjv;v~ZVL(=M zJNVB7tpfgwKx+g4WuUc!|0>X0z#j=TE)I(lz+|CT>Y%u1ix>3k;&Ro`2pf$Nl&MV} zC{`5o0?c4$J0qj}+up7&(0})&9?-izsRNX0O&988xTlwz0ZRI;JVCLf)lTU%-q&OQ zwNJJmPJF@c>Hn1$vH16O&~t#~G{+e4re4Gd>2N3VeB|t9sFcykQ*}HsTd^f?~_W zWMnIESO`uh6A}@79{{=;!TF@0unUy>-!>Ud&Q10kXUxjp&T3<3`T{fmF6aPdW^{Pp zLAdNIn09LWX}Ro=i@Ww7c4NYTi}5KV_@*74K*oq-52bCEpe;_&8$@yoo6((t5%fV% z>IOYQz1GPxs)}lpfIjR=-JttTbjBGM=$AdI8}yQqrm4;~qT_=*$$cP#;MqfD~%KmY_3c5fq_oON)Wt6J#8fO&L z=ej`pi}dN=US8J>&`Uk32NZ>=`Waq5g=+6XK`BYc$ml9xjXj`LrDJ6DD_@X3pp>9v zWb}luz8=u+d;YZX zP`oq78GS7cKN0}Nat~w)8 zHdKX?;v^f1ED>%a@rIJX8p%5^1k+jdwxxguZ~Xm$;LT=k9(f0It=^KAchI+Q>ejgO z4tD1q%r##!N#C;@Y-?8jEJ|2Lj8m2oV+S%~oTH2w?@Spn&QnIj5mrz}j9tlye<@q( zby?E2yYI}scyf+!t-TaqtJXy-2~I&yNDdv3{k5B^czc`gp}iywpHpqIt0sA)TF_Vh zZrh8`RB0-S>u33OpSw23-1mALIzVa2HXniI3XG9JxdLN{T2QPrE)3l04ebEMVBSkCl<0=#DBp-L8O%(8vWO47wD%ZRtjW8BP$IEo7y5ht)XBVscKX2iIx zD4l~t36a^*b9zsc+o(*-CDs)CRd5=bt)j$R+hFoV*Yj`M*uwhn!CCw?!Fc-VIo(Aq zHeadLyzX45{F8KZ>OAvr3y z5Z;@!yqcdsS7Z3eTe!44g0J@n>JCu)ysa{N27Nx2rk0P_F*{6VZ57e|5re4K?2V;Q+vO(Zm!H;z+YERTZ3#p~B5 zi&w9a@``fpvPGpv9?bujX;)z(7VRokRUoBdCa#wl8$pp6uRZLy)w5f`9}Tot@W%tK z4g8ORRsnx9&?bRT3^$(I!FLF>so-zf#jOgva=B(J2D3!8OPo`|PYbkm@G}B!5_oT* zRlsY3)&|}mXszH20<8u7h}{|tj8`xb<+iB3`2^ibx@>C$og-3u4PfRtqe+^;7(toS zF_ulbi^6H|`aubnRUatRq`JENq|8vTO!7X>z$c`v^Zsr{nOQK~=QKgdgViZ$qgkB= zX62eCX6@;VD8B z%Jl-W^F4x`1%T16-l*J1(AG&{ldt;DKMD;}xd5*|r3bMplOR^Gbf!u3F@ouRUGU=qtrh%@fz}3o zLZDT^rw7_3@Dl^A9ehThO$C3|3tg3FAD(9LY7x^@8TjFW)($>3&?bSuHqa{IM+I6N z`0E3$6?|HtwSez_K!bttiXx&Pk!N-)13g5#te`;OAd)+5F=B#(4z*lrPubl~Y&qRU zItYuAQ1li*WA*j>IDu~q8dt}Q9qB?rBi&GOq`h9^pplLh`kg>>uZ90VC!@aUeXfGy zsGZt=xB|0=WkW_}@cv*J=#8G#3EE&jDACHa1*05xw@hlV^&1s-PYzwKNZ^cB2QYjr$et5G{OHC+PjzMx>)Fk1Btwy=ws0XdYVYv*cHlc z_iw?0J$yQQ$ndWF`YDbVdUYV(D0D+0y}jZD?h`a~L4PBXW@Xso%cBRBA`&NsbfP%z z!{}#R>82Tnc5ToC`Wca=h2a;2mQ&CIjZ&3}nz_YDK8@h6%M;W ziVo6ZOfSrVHx%4PUvMPTN_FE3227MngOj+7k->-(n=*p4b}g81CJfM6%$X7fBqdb> zPG&Mj1_Uu>1Sb|5V;qgR^QD4`8W7Pa2;y6xB8YoQ+~!-qf&sZo^@9`3jFADsOc}w6 zWyZ*WfTfJ!#4BTDK)_N)aN?CQG9X|nBX~pb)~|?zH=-!8SEPb5Pq)hKPT%``LGSey zxT57ab)Pc@)3Y!5<-SSv(xkRilbVpM@GazS-)wq8xAw)iqJRe57X8^9 zTV=-37OSKs^sFk%M}0S{#<~|s=eq{xl@+Id=OaG@ zrxS(LxNw??8Yy;~RJZu8rj1(^?BgLVj1g85?Rk1UKs=7`y|G-;N?UC~r z_#ou(HKO#qpq$Npjo;j>pzQY(lee!J-%Hzi*zv1O{!?#62WW^)^{cYy-vsSS4`|r5 zt8CgIt+;^L;Vq8LUNU->H@*+!u{4c(&dxr96^!b`s9-@K7BplqwqR+_g5JCZy%)*_ z6ct_TS(wvQ1$m;7uQ; zLz2?k)47hF)JU7L;yI5$l z7gst`J9z{0TRN}p={5H*68gbFIz*E&S!Eyp5=i;N=($h9ebCo*&&#y3PZlh?GI*0r;Phzm#`S^pvK?UcnDyq6TcP(;$ znh!$t_eui6u*FCaf(6xAsudg+S^{WTFjeC6OCOgG(Cri#QxCeU4^{q{^+BwtDbz^dr0%!v`?jyv=TyVW&60I zi={-G*n;jM`X@*-mICRm}j?_@=@-^($G?S^M>~3Uw|C|B{HQ&qV4>?(iJO8#En$i6cHm`MU8Un zNX~ix6FKBnI?h^WQPnrQr+>HyDukrDmNr*Rk z(hSg_d(zB&U~=2v4`fii7zO2Y_Q74f-qfQe!4!Udy4ue-C?>aQ3%sjza)E6RCEYT@Lp)TqGw@Js>1+DSA3B&)>gdQW9-Cq}eT%fgrA0KFK;L`)G0?tIHZxZ^4Twdt`=VWP~Bc=nW8p z9m_PfQxoVvdQvy&qz3g}YOsu6@RNVeOJ)LUNXVqrwAH}#}sbZ+PzeyiRU`M%=_E(gfw8A?O8vT2K+7R z>W|BopsAYIRK*rF71S!<-evvU{Gg;_oAkrO`?nA^s?0cFtLRY^MLwS^U#|#0ub0nQ zY?@A%&%-`?`E3Jxf~IO-Q*~OTslaERYjJxpX^l)mp_%k{DdLfUMQOm4psAYIRK+PY z6_|9dOnEGrv_vMM&`kQR7Iy1XLZ3zCa|$$mr0(2-@Ams7~NP-juG`l&zA}@^*B^b{H2%@F+>!C_pj7 zxct;Y@)pd$t=XY!g?&zZUq~z`qe_t>Ap; zEp0^LzuCzJC!08q6A?H|7F)Xqoi6>h3_$9aZ z=+ZQ-C@z`ZxPbjex>3_HM^S^>B%X%^(~1C}^E_utTH4@q15F(* zm^-Z3&T8NR|3aX(g0Bm-7VxhIS}XY10xdV^GQD<@U_o2opqK7!Py_z`Kx+m6VW72v z|0vKZ;P(XDB=DaET08i)y31_~Yt2>+t`pH>+YZhrG>kS0{QAIG0smB>wSlhP?(GyxIYW8vG79$Q`W*#V~ zF2~4-gO@Ra;+kW`J2pW_#TP>EsDI54Lm=?kX{1wA?vBcG+!8y?*~;$iKJh(#{Ofd| z&@RwVdQuM|=p4N|#l zj8}+dgO}<(PBr~jL3;-ZO1WFJ8XF&#^C1Ym`5^S>gV0M5_VPjKjh!J46tGJ)BWn1W zlrt_kjU@89D(5Sj4ouH}IkQ~%51r@KaRzgJ^>)SaZ`DiFJWJ=Bg$AiyF|lY`cXj%# zxelS)1a%7_#LgP`x?9E1cmxQ!J@8ti>jW& zdbY}pCDL4Gw2Cd)HR&|Zb(y_M*}Wnp{_b2tyGZDOa%X9eGiM|gMZZ6{Fz{s~Wkfo~846p+Ra!EL9f^Pi3)wxQANfYeS0!rM9g_E*bx$f)G6J&3oL7 z$7gzvbN!G2Z}~#SURU}QD$CJPN!)W)zHAU~b{6n+UDU+jQ%a)spHs&f{Mz@aT<;v$ zOY1#L=l6sLsa%z@bbhL8vy}kK14gn2Na>L`<9kFOQ$EH|*aLcjNSWy6T6Z@$_Rg=U zXHu6LXQwKWb5_yAS1y*Jf18qIMLky~NqAgIveEp%QKD)(XkeU%oy-qC4yj1T` zb)p7N0!~^eL41kR(5w&WKESCC7ZUi zs+#a>K_h|ww@8^NX?$m6=jO0SwPu{JRekpQQ|~e3v757H=-;ML@r8Bg3ia7L3lknU z&wbkNHm7rM$&&m(iuv)X2+Q;px#V||ddU*p*J6d-h2>x z3BtR55OO`5G;I0O#|2kroTFLbjvA-eQDf&E^>4c%2xaq`drK||A~P8J+^ORXJ}F{B zkFM#Zi#^3=X&&1S@pLmRD9WTS0>^>xFUb{%j`Rf<0ZP=Z3%r$7qZBr6&WZ+X=6Y<>JyP_1e^Tn9=Y)mVbAuGI$|fYQ&6)J|oTl!)rfxEY zrUH{*AyfD;nT2E*&5uJxcV_W`n~A0ww0WJfQczZ4!kIDw1*N*;aN^dZGC2LPBKVVm z)(W1y#A!(R%5*&;Ir~H_C}QqYsef6pt4OdbmqOHT)nFC)Hi6a({^CHZfWIWrTEQm; zS_^n(KkvExYj8vSdkUK8p!(Jf*?FhHPah5q*t3vz&o`-~h*Ls|fVdo-`BmbDGg5jM0q;ds)zLi?nsJ zG}(8Y(FRW)F)E|#%bd7V%IHZ^%^=XN4{2m%boyjJJLu)FY-D8gaZybp=vSH;8P(gp zM$jK0+NhDyW1^ZyP~!j8B|YR5&;@$&OPRC^N_?{&LR4|6Sz2i*Kta`ssEWmh_tKrI@2tC2(7wZqQSIKS z(=OL}^ISr$JA>&N&dD>w2@rRPrj#1vQpy*2&#D&Up8DT{6S?WNkJjck0;xk6j zu#=^Ah+ovB6K6z8nm8zjEXRn$RH>sfqEJm7lqz+Mj3`uN1Z4#~M%FR4>!^$D0GBQj{>pvB2Nq^Yk^r6koUWkg<0DJV&GjEu;uF@ip;DZWuL zf3a^YvknmYnm{6A3w_pSfl>(eqoezd(}0HkTAxJ;wEKlUYX=3608U6w&AnUy=yO~P z6tT+&rA$pc%?iP19CYG;rxo%FmB9jE4t;DnSNn441HE1(d-CO|F9(8aonflV;CNpS z9iU;0>SK$#+V4jlpkdeQW7qn%=gPH|Z7{y+__5_%3K7B6Em}sj&cEw2;^e{=5j#(S zKB*+xspx?fMDowRwrZf$)KxM*mgr0Lu0A7D98^X|yi?^t7>gca(D5AC35{}#)CmiR zRpXQr3*7#@uAc8JKNlS64h>d4kEuYY4!ivbN_35jGFj>`{?zVK>*11(aS_bfB-5*nmt#8QunOF4s-T0{zpK6eCV$c60&dNah$BaVj%L(B=c$gvbXc zjvLQ#Q-11ILgw96f2UhDn=coL%^9mcMmzdLSyx;~-_%-qz&G8_M}!8cT=l(1Rd<=M zzF8j-dVL@ruBz+z)i(>2g0!>a?*8iQYX4S$7Ay5(e^{9H4pk>>u;>e_2Ws+P2)dkN z$Mv$qQP0(EU-egl)35v;+?Ij>@{hB1erQe3fkZu@6iiE$M0>m_AT!v{Ted z9~exuQ`8?6knQ}*rvns|jSG7(@hz+a^j1&GE%GIW(Zg6Q+fvbs<8)^r|n00*MHH*Qa$BncEmjn_CELLur3e zrOo@j3CR(;w?&)e)Q2^nGn6TtJ0tI2PiiV{Y-xT^i#Zg&(@PtqkQ|lwr4+uSQvO)) zsBwDVBD*j1@v33wF+MmoP%O8{GOrwu4YxA5MZvq>2eAVbM~n+EMtse8fZ~{O;nf_! z{pI%Pb{X9qeC)?q=Xh+bqyF__jswaqFKn_sH8#jdC(0>ORb^qqkeU)i!x-<+Zgvs}X}`Y6dKWy0*H_kUPHI-L0! z(tM1LCw9D>cm3=j&C2X)a^w<|7%85?NO6`QksE&$G$U+dXSBuCxA{c%9Vj&9ZU&|w zeAY-MQT>4*AnhZES6PmbLV7ko}?@$=+tN z{?GM&ta^_+4j1=|zW()A>0laD56U#o2S&F_z!>8x9V43<7aENb6hj+kZG)WgEk6wZie8jBEeakA$VGm;AuI*^W_^s zva1T9D6rUrzE|At(;ji`*Xq@q1=9imKk_igZM0VKqXI2g08_Ve{DXocf=dP03LY>a zw!)1+yN!dl3Em<2Ex~&Penr1%R>FU~JUVoHr|)pVBLz@ zlinZh;56SW_!Geg1YfvgJhL1Bweqi0el8WPD83zn@vPqzUx)I^h_0%)M-bq6S~N}S8_iStcmZ^5`KOpplltH*Vqo$ z(JJ{#-moj4H?9lf60fT`zlTnAlrseT1m_42E3cbtPprR8?`6_Y-)0`-h(EEu?@Mm7 z)(3rLN=g04eJhSPa>Og1?@`qScK)S!zFzsdK#)4*k-f40gVp!nEZ8YHTd*#;P;i^) zISnTWCOf-vyI`#UM#=H%9IW$?vq2qqhp~F4!i>lXJ0amGrL@ zjAt2?+!cZgc5xi51bOZd4{wR(uaewP1epiFklRq=A9BR?7RBWWLF~9i_Qdm(hwmsK z@ZmRc<&ib9e7EGT5L_*IrC`io#>f1B!cN7zMR0TN8Ij*h1eXc^i{QruKOu-;X$cXA5^U#>4oO%^;%aJ67OD{{Y*{BH#x5_~{%6+I_lgT7zh z_F|{$_738<4 ziObWqw`?AM?wPt_ol`fg^VlCA&PiVp-79+v^6R<$ zRBrq`xfkvqYjWcmpB#cu5UY>B-z|-QvoyBn zG!f1hY}fn0*@FBwV7uO@#qu8$;k$y9^uC?z0BiIHXynqdqDe1dOkSA4Bhig@j)X8kcpSY}5eB$|duzH#P z8PeM=$OF=!>3n7L{8D~BB>1@C35p+a+$29HDUPu}WqMZVdff$rJgs)M-p4G^I^%lH z#*%pP;N>!XKa#$m2;ToR^_S`Wn(S^2 zNZ%lC^eOr->yC9E>yMuk_IvfEKMV4FuV<>C2T{$?^}3mYrwcxz{dbbq#r%r1@Jhkh zUY-HeooP=1$nH_n>Fqb z&KhBdsPrTB-j$iRCWqRHy zy>Axei+ZzUKYn2MY}vnB^Q{$(=PT2@RP!toe77Ketd&3Oq!+(p{bhQdccA0kL-0j{ z=*6!@d6_1NAIuxi$5*q;^z&`GKgfQ*V)abt<2yEI%Kl+NzCD87=gI!zL!HIf3dZ)A z>A6*U*9r2ij`LpOG^`igsJvH{m-Do4R+X%uGQE6f2)ozHe)Oy_(Z?4vUiwmJ*UJU@ z&H#EgNgr|G>k@H1%JiHiy-Nl8)IM=&(K=qEcn}x*2yuz$E7QyO3Mz_ohu~D@k-WzG z_~88yWaobh-Y58=AfIe!-C{SN?&YJSvHs20dytc)F6ayKN6DY5em-v=%R}e0`A>I# zJ{JA~+5aKIPYIF-zYeI&lJ&(WvLBZGV}cX4f3^rdPmnq#?}_x1_t;-Pab31Qw@h&o zZmX@m;fp_>;+_%NLLJ&oMYQ;@|?X!J)DGhwf>Qj{^d>r{H=41Efr1YF)f)*{figQ zH9Lk(yZtvgo6@PDGdh|~o;$R7aedHU9H`G(GT$`y56-U}-3=EG&P%npm*&hFsV`-; zXyITT+`X0$XW+uFbMZ=JSf;LeWh|HlppqlPrf zZ;(82lj;ZlRw2L@kvzvb;8F9DbPzeH?~LUC=l$*#;Px;I#`a$#dE(#l&yEqeh=55x z8Yce~$&ZaYM&MCV!Nv2hiR9O&1p5Pih{QOu&!2|LCk#n*M3_51UddkS_;?0#{IUI? zGq!ZeAU{j;vo=%yYbKkzi2Q8H&)!V=Z$|RxN&Y;^^K}Db%l;~YfV&LY*8Va7w9izs zm!^Ft0|~bUwG4bbsG}bnTciE$H#zzCo1FX)9q|7XKj8iLN~3(s&6SL|O8@*A!^0`XJSxFOPf9oCa|5rTbkcSMUy6`{wd?kC~0m;vf=6A1VEZKjL+yCkO z?SYhG$m?pAe>LSz|A0?6;MoiMZ|l!HWK|>4aO5EGY=oGWzIM6fzdE7$)#g!>>{%i| z^NWu2ChZ5z7t2p7k#G4|$N4T@rYnort$x31rtg}tA2ri=OW0?c>ANTFAIKG;_QFD>p#H9G%(nLOM zm(yQ~C~i2BC;d0Pny#M-NxmM^KCpH2P}u#|sO#DA#KQ~O&Z{!Z~%4mE}LSIPcQlJw(Jsh(+~r)QV+?_AM4M1Pwj zXZNcI+2}=aSSLMe-ry#DMDuAhwU_mA5+ii?oRxBl_A!j-J+2`ZrtjO`_kX zO=D2>_Ol#crvp|A#r|Gm{97fh$q71NialAK(erhFO-9f6htFj6hn|f4&lko2fX;E~ zzeD_S|GC%byIFiz$$ndE+22I-uNC12_!6V<)-VP=%;>vX9adC_tMtO_O7xsA{&nKN z*z%YD%`4$wQbJ#8^hze#{NI&EPyO0B!_mK&CdB@(FVS;H3H`rH=nrM|hn|e%{Djfd zdDjlR`O^2N>EB-V#;YivuQYlZw-dfl$@p0BM;W~+&K)K6vr6=@D51ZngnnJ7Kff=3 zI-_SMHvRYY5FX5k_@mt>KIy2eH7K^@Vs-vGKFWz3F z=RGC#@k~!s2(rPKrN90C?zKb3^0N{>zZ3tecRI#)@$Y60xhM_?m(Y(bq4yfSC~jw! z@L!bi+rBJ&Dq4>pEzz^Sg#P0a{eLieMLsry^y|w-cJ5>JqBtC0LO->HKDR{wk`n%R zl+fQ_LcclFZ}oPe^QuEe|EK7!uXgk|%jsWa^u`D{d`DaOMRC}-gnn2?w|!Z4&ULaL z(K{A8z0)+++eF`Zq$4a9{Su?M+PQ1C`j5y-`nBUCdp;vQvyXC|Hq8ER%k*f_0KR4P zw7+#oKRLZqdWN-L-XocZGkSvpp)augKeaRNxBF%EJpbep`m0Om#~8iH-}EsUMf7tr zx}Bq5>*oGvt(Qwm_&-@f|8fcaZlhQ7ZY94g;ZHwSO>7&*cHg0x{$iu2`&7rP9QUmf zdb!beP1=%aIzL=1`cdK^R^IjYIGJ9ezf=6H7CHqNNzc*}{tssSVrl@lmC!dx|7@+V zOKjgw|L!l*|40eF#opf+#ce;MS2B&w{~cxYG;Zs(?zp^@evCbf=Mj$oeu*tF(SLaf z{c5A{*F0r5`f{c}|GxVhC3=#%{fidW<}V%^tc{NKkBlXAN5)3Smdu+sd2Ujxop@|# z?WF0|u39Y_sE^d=FB~1KkJQE%*XAx78noL?1*BSSV5l~K(a@a!MYVykp^?#A|B_{i z-KH8|R3EDkOg_B*h$*JIfT@<=J#+WMYIaL&WO?H5o((Knym+~ZG>mHLO}8f2{^7-D zvHf40V`iE&3m4S~=hkaO!*hoQ><(Q2;J~8#NKzXbSvdcxSyCPK!GWjN@DvOq^|?#z z?%~q98CG(i#a>7?n$99x?*dCKHhC$7MjjLvtG^Xp@^C8Ne1m0Frf zw+==Vmy6-Cku3Si($V2z3-H*yq&B_l~^(x2 zHVf*HvCl+81M(%fjON;-Qh{wc&dInO5BW^XsA3hvvMsK6lJ^fd0|ZLHl%r zdu42aMXVM|aKX^fnTctcJ6sex7irg^OsG6~i_;ovh=S!mE5BSM=DG4NNK@MLvK3*m z9I+N!JF~t#owL@k>siAw&0|B0n&k^C!@7lH)PH8()l60~sW*vQN7hbg*J%wk>upSQ zyvzodEL!CB=L}C5?o&pKzUH`ED}+AXVQUv}hJGMp`jbkl9L(`{urE7RV#cxYgWHOSHa;f21%x~@DnTwY6a zZ4ubM+SsAyru}}&aBh-X%|2YC1CfpynaQ(ovL^B3ohOgHC-4sV{M z-NJ1qX$Q$->DzspP8WF{&unk7Q;2Of>8G817cb3v)(BOa>6V+-w{_h5$eA-ifetD9mvv+pm{T%J2bq!mL0po29a5` zcql!(4UL@LKVo~G^@((gX5)x9=#o8jp`F?W)21+xMX<0p7WNi*1P=*FciCEP?y~-L W_v>G@@SLcTWV=E`w=k}OjhX9`+Luv^CVBw23>#q=lAI= zIcMgXGiPSboH>{0Jn0Pu&Y4DoLD8-_eegX}NoU%G z(4C%{7k?*kTB;~^Mo=AnD7T5eaBZ@4qNS=ufE_lGYUPXosobFl1^&>3cFt(&F=C8M zOHBe);*rv)UEYsQGbEjs5-nXtAGs?ipZF^Vd!$n&KP}bDU50Y3pD6aD-+DPyKuy-3 zHFtsXz=7u{uRB>+e*NIC7tSncob%Na+tP_y89pw2CgW3rPbNMU_|TOslF)Y+a>MW$ zAHs;t6*_n{^7HVSkI!I=%PzfW$A>-9HccGw?~2xDiNY*OM5L^hYugpGi9G`N+@3heE|U5?_pT zs?2Li4l+gfB;hk#L&|gz(kt;HpTAtq#N}$ zl9y~q{!j9eKP|)OroT>GedM(-l3uQfTYPkJ$X>*Ke3HIDYKVTV`wzI_irb zoU$h6@V>iMxIgKcwxfOP{%<@1lth^||F>+hvd6zv%hDTs-3W z|3HM(UU5o4C6_w7?#hO9lFg#8zXCx%AAQxs8GEB&0YmqOe-#XR!&AH4qnQJ~CkFq` zhTi#XMdSCze?ts;4k3v2rdLJ`JNz*QJ`h8mM?v2k|9{5N>$MpCT`~AuV&I2^e{c0Z z6NCQJ81-Hg1OFiG+#CNtpv`)-|HK&jJ{zN55@OK*7W{jw*Ahd{X)*Z242m6}=xYQ5 zM{oQyW7ut5jC%88&^O2Mx2t0CxhIDFXUD*wiqS3)fq!p$y&Z%8I>^~uJ3bsk{zBj%89HSlo6$5`H zhWv|T)Vn1HzHbct_!#N$Qr!R?-?bkHONmp1=X(XXw_ zzq{4H*%_~W?L~(9lc8{J7m4yHQo`G5LWAoyn@G=)a$1)PnC38a(R`oycl_PXu=e#P z@Wf~71cBKP`RMwd=UrIppS)k>+OxUjUs)!`@DJ^do zN~Nx*B8*942#f+QcaDpcU^sXU4^T(s;su6 z#?>G=^jajgcUr>^1J(t20fHDFq{+@*lHLF5EwQ{!@y zq^BGteXnxBZsdne^xWjiqHx?mFps zN_ky_E98W1*Q&C{D)QS3K`-25^~$oEQn+Tba%t^?dT?`1udAz(9MRaz0J+L)OQi$A zs_;IIbUqxRc6kVN)O%MPiV7pTKmmF4JXd{PgPYitHkMVoN?j{NH)wP> z)VOM8Ba~g^LbJo)*@;PJrIaPFaHBs|Hr193LRJxEt_JkZ()v2imNvM^C7@#13@hqZ zx=JhS8djAxz%TW8$mr!w4Gr*eHg4>@*SM~wo33V8IqcpLGPaPc-rZ12(kZ274Gp5_ zxRtVsiqcv%9r{LvtCL@IYRHcB%rUqQh{K`T^>Oj&(($T?yfVMVAKR#FTfXyYG|ZUviGUxX1NkW&Bp zajAvnA+8%8zovQ_F&o!dH*Nw0l)Dgv5(k>n(q%%;25wH=Q)Vof=PbRns9^5=`OeY{ zlvz&4^ckh&$BiFH`%!dZNRGPXWJ7mHqtWh!OKEqsG!CVRN~0u*aN!c+d!kypXZRod zjpjL@Sg-tR`fSXEYxAZps|~K}i(eCGqW1_~jDc5rtnZ@h7A3UWw1V*UlAba%%jSM&W;})f2n{5thY+aSs#VJLE<+@;k^=nFbcm(;;ny*2!dQ`qNF6#fIP-p!HqYV>Lp{(G(7D7@D0TcYso(r$;M@MlPT+Jlkx zZjpF33a_*dpCd+O_L zkAXiK1HV+pf#`bo#lUCD{u@nycMQBD`&~4BRSf+882B8WpXl{H^cOpsjh~I`@g~_{ zqU&whBH|g}! zo?nwfMY?v>Qx_yAFT0jy_X|zf6bE(&6Xo@HslX{uy{vmbQ(pblTIqd%m>SLpBo9ll71Kc>Ue*%R&Rkn)hv z#%V~T`*iqt9e%$KpP<7Z)Zxi@wd;@$U#KCG26T9n4u4FCH|y{xb@+Zdyz;P}A(EfY zXlR#7hfmayNUb`2k`AAy!&`KCyAE&F;WKr3n+~6)!w=Nqb9DG*9X?lwPtoC39X?fu zFVf-Z41so)=S5ADjj~Pj=o-pAEv`M>+ssMD!SdG!w=WdZ_wfGI()kh zpRU8-t;3Jd;Wz2<89MxC9e$(^zeR^XM~C04!)NO79Xk9d9e$qC!7rxP4U@D_$A5lkUCxQXHM1XJh@wlh4MU<$dx7KYOaCU*$d zGdzS~3bDbZ3=brjLTj*y;eG^DNDbyPY$TXMX)uf7Z`T1%B-qaImjn+W*vjyy1XCyt zDhwYc*h28JAAlJ74#5;UgNGPCKrn^O;C_amCzwKIu!G?}1XG9%Zee&E!4w*Un;3qC zUgkTDJ!KDljB$z^7 zu!!M)1XG9$<}z#~m_l1Hi{Wou0FNQq&hVE6k0sd3@TUZiBUoYhFu~^&eC&H}e}XAw z1rITNfMA;H1@|-jJi!#Yf*lO+A(%o|a0|oR2&PaK+{ExB1XG9#wln-^f-fYvh2cLC zOra`R519I=>Pwh-yYI#=~f9gcfo;r+;+sQRXUd4pXEjD^JlRrp%cna}}3!&lE#(lyR9yj7tK#Y%pG zV(#G(?pIQ{c`lhL#8%h+Y;pr*~1W~c-o4hEfd`I^0%02RqPJZv= zjAN>|CgUVTNK?J1)UH`7DfaYId<8zECi52Ls@`YREWsH4`QAf94wB00tH?-mB4>B{+!>ip-`b2U2$%x_ zbKzfYEu@YA@pVYD4?qQL;KaAx-Bh#c?NYsQM|@}}?>B1K3}G10slt_6QRSe`3~Tm* zz)qBOcs~~fiA8V@S_kEKT?+PF=i=+g0lk0aU6JQ~CGYaQ1$o7J-tQMUz0c0~ekBdE zWwjmlD~36{@-t*(? zB(MAOoYoHaCrs$@^>O+W##g|flbt>=RsE?MfC}3>oR<7OsyCSL{Z@sQOx}NX@0Yxq z9#dg5E84`J5J+Sn+ncj!N#5eTC3#onmCAPZgCwx)BzXeyZR@bKUc-)AoRLON5?lhP zvYq_lAT|9V)%z0p1^l5V;}~=&S0E=<9X>RNGsEQYev{{YGy6C+QN5q2-h7~Zxh5xE z6?rT2a5&f_ki)emth?5(v@}~4_h6?lJ|o}zZ>RUueDB9k8(^Ej9T+QA-;|8N9JCO6 zS`CODUPuCs;ZC2!Qr%Ya89RA0oTMTni+l!->CVW7yQo4>>VJVxh=)JbUrLTM@ztx) zo2X}_D_lpS_*0(;3U{8<-6_YNK+=D3+xyQ&!I8*t|KMi#o><`hW_}<`=8h_J_egRj(+LUZ+dU_{DHJU#QQO{a`V@-X2Wr&^(GxC)N~+hI-9c>wXf#A04DASzWi6aEK1VeV>6p z`X;`LZua!Wzz6D%Lv7#0eT1ONao{ROAUyg?*xuu$Of+eMCI6!%A96hMCA_-Q4zisc zOic~D6bhhi(6#_xpt~YeyRCui$lP6RL`xTn9i*hIZ6Cv&-LGZQfvtf#q6CrA1=2&D z;cP%=g9p%E*zVN*J_$VWO?UT~s%12KrRqyzGm7jCG;LDu~1(kEn3KU zBDGitOaawb7VDiPG!-oX<(0cF3lCIU#_eAnAi> zo1cp|KiWOtbmSA_z?Bj6OdW?+yMo(6oBeKZ2a*NZ9rMvQVfHicb;FM*D@_>n_nHmtQi4k0{8wLGe$bSPhDnHCDu{HAPR+ zykGSO&=yTg;HtUkAHrXUhx|1S18s0CxplA+U!gdYx(@Q8*&d;UUDeKr)L%;kq^8&; z#|z)oi-FHR9#}|{`zCI0q+$W~hmbeC|21lHqn1$r$t%Xx>#gOO3R1+p3OYG`Bd2ji z33r19g%++owE<9eN6RF|Jw^2`%spZearBGs`Bn;|XeZHaKZDGjRJkwp3u54n&j6-^ zFri?oZ_k8#aSKYw{)}*nNQxnhVyT#9`OZAvfTr616pX33&s2TGz_BL7M6nGsK}?Nw z{QOgQmMF?Dim#m>Dq#qigjQ#hG`@#2n&Faa+h>;6@s#mhhnAXCgtqph+%{S$23EmL z=rlIfH={`PA=sz%v9$I>q>|K2L46HT)3P(*2vaW&Q6CNQ_O*Zr1@fr?tvds0qCkr3 z^YA^bhJE2O?V`+?p)wz$RUs0U;d@-hU}?QSTxOFfbNmX_V?{o&C0vH@Y4x;(%WM&4 z4p12jm024u!}qi@i&3U!%|NB8wq;E+CP?>#xMfWW2Ei3H6Yx)c1T1#ZvOe(ZV>FR` zEMqBE({|j_I)~>9eK6OcSHHcyVJ8BctbEvik^)TQR z5|Z2JEi@=twfzE~j5ey*tlmaD1f4UQ4ZMO77H9L(fyAEg*Tr80i-l(-BynLljF3MVqv91r#mk-6E0^drL z>aXojtDS}ss{bw@)rxhZTUvh!{!O(t}hwpnPyg4WO6=V?o~SteS# zm75CvH5mpcRIzwoLtk@ZsW!bc{@iqCU}?Pywr#mCCC;+Gm|WTWMc~ZO5b$TQ$+h{? zCG0qRskpBe9Gk#!B^XX8*}RR!@cc!pZvj-9o`;s6V%RV}&$9lv@np<6Hf$#flewJ! z%0%bna$#6uPBN@NY}ivrBMiIMK6+jO&I8VOdKK8!ap~OAPH#B|;{v6nD$fx7KX|{G zpR2xEyi9}QR96f29nxSAACOgsEHay`cyw~ z3;s#4%nwU`m`luuX|En6OxsF~v3vB?g4%0papK>u?&7x{U_;f5o>gzc4hS7fMvqFd z!;;sSf`8YwxA4m!z{TmS)I7Zw!qF=>Ay3cSNns-RWN01JHB-1q*Gwzz24o-Loq_D` zowNlUxbD-C*@EdP)9&!!kyUD6V;8Dni_^<6!bj@J? zl6&6HK`0zJi_6TXGQ4|S3I1)wmIjWQR)_!b8;R@$wv>piw=4J?7CcwU!;0L%VOp%| zEW4fyDDVbqL9N%Pb5mUd8@td)(anadf;)Csh%b*$*1)er+^N~ndq)KqU{^u(BZvP^ z+V_DZHzNsaTY*AOAG{xu+jtmj#eE{YvxO7hzX{V%06ljnsKNaW-75G9D?{|~Xqrc% zzXfK~n%vhPi&wSnIZNyJXg#$&)Dbn0yPwd8SFlqMFq8bg$s7o1pX%4>qlM_-(3v`8 zF(?b$K9iy8+;mIpGRW&haNCc9!38Wl*UvU3qr6Yne1y8X-1=Hcu}vR88_st4TiF4~ z5p>3M2DGNqTn_Vg8J)VJSw13uyyg@RY+YH_KgjlKBQwCv!l`KUD!V)QY{NLj? zl?LAXM5``%2K6!cPp@J<9;WMy%@W;ww|D=?c$3EiYG6&cg-Zu+gj$wg8O&z4N z4`p}f?ckZ#R4Oe7#^7YyrHSeeq3)Kq%MASk13<62)ixcyv)pBJc)o|V-eWVhX0&iB zIw9GLHv9rFe@xYd`(PFP_{T*24VU4uJNN-r>A(3d@K*hg&}0W5OeUXW4Ky&F=&QxF z*V((J=Mb6btLxDsMAZU5TD%};uduA?M97Zq-Ax6kLySfVorN=CVP|=T-eJfD!eJu$ z5=%0}kw2-iS`?cf21pWk@S~7~AL&dSZatO&4zPpCSBJ^}L7R=ew;=DWF#YT>J#9Ye z)G47!MeO3j-};A(&qR1Q4ZYCj-48?B+zfi`-_qu-_a(9IgsBwfzO;c`MMHkhhT;rM zpc$4wQX%4-=cLinI-G(D52@{z)_0+Wn4Dan;GDb$5riHNU|N@F+4TluLzl9|KJ}8$ z+<1GQXD?!HKK8M_a5-O2;8wYrl0#Fc>D0c6XgO4|oiN8BDlI#IcnL-e(E)zm>7=;{5AxC9beAXCQq1cxHGmm&{FygI}5$_N*aAJHw%}&fV zA;U0|fhQl>8^i={+9Hs{?eeaOQ=s;l`+@Y^e*3mW+dd3b1 zPs89!z;_tUCL>l~(1-R@$dnk6HY_8~SVZM^=4X^D>eDa1C@zP;emL!??^8XW8`Kk@ z;AvQ#>W{xoHFT(>c6)ZC^nndYs`u5VcS#=azj?y90^F$U7y6rrJ4U@y=$|l63|sfn z4SKlpt?GR_FcMOc`Q&hwi+FO=Iu0vO-iU;v3c}wjAB6hC_dKlSB8=VD1_Bz0*LAMv z9M4wnCsL^RRSc3D|-Nj=!{m2A`xHK_| zo`BgRjmVo=HH_Uq1PZ~nu#Hu-w2p(ho!;(14mSa}Y}+}&#f$;na*TTGP)KhRHyQMn zGvq$p*ATV+SBKVcH}e|K|A<_1$oPI6G4XMH$28QjJ-miX!;DkEhV$&L(mig`=1IM@ z$F#6q^lX^c?Y*|!;4qyk>Da^66K@MA+ZA@Q=Ha3K==lPE_HnO%W(oP3|I+TxS>0pF z+1hRg^Fp|(W>CkdmmQuT3N1GsM?;4LwHQpvEQuL~-V=f5f0AXysOn412)cCb@9^K% zg2E2}6XcFO-%G@XANyEtRJpMzr&WzqKi@9Ej6ueKDkR3w92#!?cZua7`R^@U1@r#! zeUeFx+HZkQ^WW2SZ+IQ{yLIKZVDxkN*S7#KRbMhaAj|a4!`QO99c(bxVE1+g zHgA`j3fn%kv@T?_HP}_b^GBNhUx}3)Gk6#lRDI1@qpZy+3XJ~;Ea@NcT>*GNRH`(M z<%J+9EOsUaKwvDl$9Mu$rWh>ie?atb_{7TcbKG+HuEGFyjiGQdEiA1VFbci3STYUA z&d@!qB|n<&Y~{S7hWc%2J*|4NCw-(xzwPpL(fE+NVY2FdtLYs)7iJBTpc_3G&T;sz zH#tTfEcB1b5p^e`ZXO=+kof&TALs@-Nfk0fbzCCqK=VFKHu0CE4Jx7AKhQ#j-b!kNOxjYz!*=)tZ9O~i zbeX0-RoU+b*26wWvMK(G`4bxoc3ql{UBKg>XE2S+3A~Dpi%_9}hfPW>iZiN+&(c5^ zB*7lKv+Z5?9<7CTu!q2S{#w?$;deboP>1(&+9MnfEy>IdZ=c{w^i45tsCZ6a5;%Sk z)+V!jhGx}RU!}E+zjA<3_6q7wm=Qfa%3h9lj9nE@Zw?JjWo|oWM2pC_Fa_Ip7hHq)~E?SlAwR!F^K+akVAn}tL&72a_cPbRQAZvAVN-Y!C8=q z(p}tVuu+8xDf-;AfyGo&`7`S7LvfB#T|u&!7+*YHI6blIB=0+Z0+Cy;Pf2huZ@E5I zX)5#0#3M1o%F8?fgQ#z&HSj1g($4;PI~~4RC*icJ7c=%;M7WvYHtQrpR|+<=sPfL4 zsmg|#DGu+dlVBZZx#>&vDcxSOFX{SiCFXkZ=Ur8^?q7ZcE!hQnyR& zjUm;K)!FaLh2+w=K;!KLt%KiSXcF@hzlSFR{zq?w5ZMPD*v1N66efI;33Cxdc%Mt| za7j8#n9hm%`T2Wq{62x$vSQ_XLDys7N%T4jXo0OnP65>0hoV_h~fAr-p4}>IX^q5Vty9w|DB#r5$7*by>B+XLo+jUcc;G& z-5(RQ@1Tt~l4wFXM;%c;-xXTc8z`Lm#Unreqh#f5SYal`mN(xZgZu*ulAgg=*(fcf z9}4trk3TUvH{393zaH}}8MW3Dsf=3dpug(Bof=m4KkA{x+a>9WneHl%Zr3wUVc%Hv z89Mrd|Iy8#A{9h<{(@cT>(@~?<zy?8<0_0%Gz|WV20Bhysh@LM^3QvS+q9vzFzUEAA=+Ny) z{#Wy(w|TfEy&vKp=@|81p}!(k5hKAbaaZ+E!Naomo!(Ca9~_`2=_3Tjyyq_H?eH(o zFp4qe-gt}~)4SsBOZw4x7~BIFq4{Z?(?9a~WN<ra0&%Szac0_zV=u{tO&4n8OHw za$Z2QUfmrt?od1=pUlxh1Jo5;$cqf5N?Qw<$SvehXxRR0$Po*@f#5#LM`J;Agfx)g z$ZsJIom$ra8LU))3$a2cC#M!M2D{O#;Ibrj>)kX32u-Zt-Vd~Yz#nmlrRT&t_=m5# zpJ?^bd~Y)q(CQlyyS{0tFI?`6K)t@)hb&;Pa#Fd_dJOB=&D`*-P6khLpC#2oldO(- z%3qHCfrZi!K7v4)KUhZzH`pGzhk5@GVVNMCeq6+&W;@C%0Tps`*yswjL3>SwC~^#= zVuSUJF!^}2PI%20{1TPvz@ZT|Hl z;NJ?-dXmZ|WZn)QEH7nxF$i1>{;}!B;5uAK{~8XC&|KR|bM2x)25z-=Y^A1BE&2I) zK<*zvzx75P3#$*T-GVAkad?`o)|DgBLyK`QSVa!nvtJGep|8k_qwALthw_wmM8@tz z*x~1)jAHgm+HYv?EhTnVXQg9+}|H7)I#v zBMD896G+_f0Q}lZVn~GJ1t&6P^n)NC*B%0y^v$a<4T9EkdqvuSwpd_;HX@TYcpQG# z^DzcC>X_jo!O%fd-=1U0&KF54tV(Gq8QjgBdOSdtQwW=`&H~7$tpq||H0mGp2xwJZ z*y+W*5yuqYpnAL?K{Jv%*oRbuI9gHFx0Qyrz&MamcK3GfW`P&NO-)Zr zV~Qilp8~li%?Nmg{&*0^w}iLn*s1ev;i2@wnZ7L4_ z0Zc2~r*lk)owztRO#M9b&P99o<*C(6?Cn=zK615Dom|I9qi(*D z6_ewW>b(>*+OELiF0ue`*rLg->FIpFEbMr~UpX*EZ~W5!upF}QVJ>1H{Y}X7WArsT z`U5|Keu|EM&`+RGjH2%;I!hQ1o$q#rEKgfBKPLY}L@u8jr0{e>zC{%MJVJX~z9!6H z1%EsniP}Zijxc-{C<3XN(@9tO3kDaLlx0 zbnFZou#HMK~xP<*z(iz;zIHNn`eEEU^HZQ(L8YtYGk8Bluw-OIsdHwqzCdACZ&}U&2dAMydh;fjobU}PM;^2So;(HF_x0l$0_lCvWsjcUMuT>$==vQ(j4BE8ZymSux)TU zA}$@D4Yxn$15eGse4w4`$5Ix@^xK8(2i!w(u99R$bGj{^@kS+>L_W;^wH0`pKgjt3 zPGPJ&YJ!b zjM;2w5xj?e<5ka|c>gWkKm72+i8s&w_qq>SaJey^-~GAu#O{_B%vthZR{ae|EGXVo zo>M*V#5qTODh@H;M~0T?7!7#I@Z-RvTv-!_^!tR4$K4b4l}{#Rd<*d4eoTsU@?S*x zv%qDxe~LZOgwjs$U$~@CYivvFC0vNn;!qyf+c;Y?mUVT;XZG`PgL^s**a-G=-qO06 z^u1f1>`{?fn-HM)xv^zUW|fl-8h?3TRd>SAL!t#9+f5D5wmb4m_(`wl7;h(1%>Hj; z;=__YwqaEt8~?QS4L(FZ5qf{O$3Cs<)oQg-t+1%9*69<5_cbZO%^|c^B1{s58Kj;$H+EMAbULwe*f;s0Rt0W;#>Dq1r*jmr?ZzMDIJD{!_A zFR_+KZsBMm(Lum}a>;yZ9XY~9M~S&$8alJp`E;nY`K|e|{lhvR`919?%}2jGI1L@# z#~u8+>k|TI8WuxNi&xY(lOjJBp>PVH&aczEQPBM(62O;wJvgi9-ADmToqS^vlIxOa zZcKwvE17`~@SB3a!Z<1C$$6J!YC>xYddsSw7Ry#93$2=Qf<24Sc0vcPqk8ZN4NjAf zrACci zx{Y|r6^Hk+W9lwjQIGQ!fu4 zd1Ndguutrrj3!OE#174Cz`?V|q*z-2MwVc&K?V+qyCsQ)r*jYf+C<5GE$?q1Q@4#t zuV`w3xZ)stU2Xa#yvgS|#x0L(zOr1EV23+=rCP@9c*Vd!KjD@l4U_ZyH`W>SK%tmpDaBwf7^tiudC`4lILpxEMWT z6Y8H2;}!Z{cn5;jZ>HUBw8Pdh>HMqi2nwL1bRl=Q=fg@Ni={!c%VjQDC4w#{s z=u_y`*1&4CU&|W&8pmbfPCAt$oQxoSWdzyAt$wUaL2qk7gpaRI@67FkCc`_M+(U^Q z-VDS5qWZD|$)6G1Dy)>kZ2u1XX(NeA8u0?Kb)W}V)it`|0DPt<3rv>^bAcb2bshz? z?OS0u#XT>~?|B`+ev%(8Pcbs7Pm{B`tLhMvbLc!G^Txb!OUSubO|%<&xxL2|4U zQMTb+Y>})(A=qS=X`nXyw2}JjbBczzEvyP72($ z6`(dY`yQpKL&Uze9bEBVAyzj>@%RK|e7$z2Lfa3+JdoaR!_z9-pCVasu#1G~4*SKs zK1Uvp;6DrY75p)xiSwcu)Ix`nRSZg6|NHTC$(=KCP?Tpl{z`EmAsym7{VRrtTDNf2 zN8*v=P>g$#^VMvA-8DbMUWj>2K8uNAM5y%*tCg=PC*CHJ#3)t%Tv*W1eDJ57pYAE= z0W@Rpa&D(VHR{nQP4^+E)B9QAp2x_XAvqslcYvHEWlwWref9I?TL`!5UA`lTb1~#2 zJAVIYgnVP!{r>mz9Y*`~F5jZl%eOdEzQ?t8{vX@#YPfmt^1VQVaqsO*_S^ADg#D&+ zcY*zSS%-@L>x(RqDEn7T`bClS8)g5ENq=4>eQT)y-rgeOgBF`*fB)|9P{4~{+(C4R zz0{zik7=h}Zv=mX2dwmdSdaJfgxia!kH@_-j*?vRRDmvTl}FOAkb0~BJ6Qqo zhM|uB0;Uhe^;A9=(rI9Mj==Hk?ELJLXn5u7ddJkw+EAQ-WCp!(<2e$hKhhw6DZP94Q(u~tnD zFQdh~XNV?&%TU{owN&sjEacUQGfqc#3cc>yAPumt)5|&0F5mr)+C>|bgZGB~<*u7T z^rEDoe<6~7NSOZS5Iv2I+IaihNcvxD^mN`|vsK{uUm*ma*mxG_&}b7&J0T+9SA_n2 z=)6hWrwAJ;_#wuS(0X5oPeH70*TMHk!4oi)>+k0y_O)xf?L7TRgC5+X{9pUzD~HcR zR^0^RFJF@5X!|C#eV?!U$u8P8$=fjy-+|jA%ME1*J$*SFm0K8DZo4SQda-ZxsBb4G zqe@@|nKaz4S^pOPeVTH4JFr?-0-rt{QE=uLKc?SKD;0Z`i-qPH+qhWn>Gi{O6u(D< zf;xMiC+w+fw;wP?3$^cQ+XvG`B`}%=2?c`0V?QQ;-i~A{_vJ&Rcc|PPC~#V1ab-KX zP^kB0BC4IX5GLD7U_)e~acI%g6xxZ!h!QA{EOQ^?&1uTy?ZCVo&od$mQB1_*%Q42z zzc*%Z1ZN{NV5bvJG@Tdg( z{DnAs?6`}47xyIkIWyYL&XNcRA@WtvcG_81u3v~8ZPqC_Jb`^b$`NqnLE7K*PrMAT zuJaifJV!VMNjg1T>yev99GmzH-Tn8%_k+v3(SN~@>R^7q2EV*3oc^gRQ_&0Y+NOhE z+g#v1mEDcw1YhBa!QH49jF(&@8LLACBw3ktaBS#BAIY3#aF^lyP6M>^ziPqo~7DOv|e#5o|pMtOH8 zKum-Heo5dN0HFfF7YOW!%xiE`vJa-uS-iJ39-AT5!E>Dcx!7iOX5?BtKhRCT1Wy5eXfB7le{j1lGo~lo2Z!I|e*A2(~{-lH7tNWn0_ZIRtOyl{vw5^L8)5Hdcq^h1lEK*0;`DCim_PMy^w%Se{y4~@ z{9_N=4@So>0vr84h=#MhS=g+F_Iyr8O3=- z)tgB>NiOVr^+QX*Aj}Gu4~%>VmV}4m*E=r_d*}IK#x!3yr2B{rx2NgH)JfxADT zTl6ckygBusKLXT-i2~mp8QS(#!N42IJG4ryt+G+89 z%W5d>Ib{d-ems}J@45l&Ih70eUWUKLbk}nVqt(=F32r+CIQS91#6FDwuE>2I3WYQm zCmk&jI#O5+zRU%4;lp?R9zN>uKe35i)r+u#Uab{;^FHbynsGR&2B$$TTJQ1uvnY3q zD5n*%Zr-S&7hB#2dwQTi?ZVAa zIO+#}^>{svGmeOtaJ7A;+(7pqM8k?UFZ3P@KEz_?_b7t*J@Bg!3hdj zIlI5Gp6F}=8%zEP)xVn7iErg9$Hl>d!@+heiOK$v^+dGWSrH0~c6$yIhW!uaX?+Yi z?+|iElz;!;p6&i(ba_$`<;6}f@3WGx-4{_bm@V5M`cd>l?Jaa?1{c65Pn;8@u?%4%`5$MbIKZTH1aO zRPcT(fd1(@Wkh5tWZHJ%Jg4FT$1&W(umNxl!EKdP@ER@{o-P-9KhEYP>|zj`zG|GxH6#bB8H*3NN<6ff)}At zb^eN`(_&J<5~{x|;zbzQ>f!qPV4FkK@1Pl0n8Qo|r_-S2G#ac8J=che51Qz4EIOhL zn>DD&{k4c7>KOGt2hp2+MjT$d6n2oOS?CuWU@NEho4|IGh@zF?vsLczgsFpn6w0)s zxSmVUjV>3t-x3}`=YllvX{>Ot|A7j^V^6TLmwl7Sa)Hc<5_wyPgH5oVcj$x`+P+Ct zxnuX}TQlz|+71am++#n2UW7s8^w8%9;7_j)+Di%Cj9PU1q>26$v6zpPYddC(N??A3 zaKZNDqQ9P|oOoAYXk@v+%W@I>C{gvXnE(1Mi5ZHI=dzel`#F*20$aFSb7E`v4Op5d@^9?oXN?8_)T2Y}iucAeR4F%5 z__(7k9-zGVR}9NopwzgbcKr84bqrdEqAPCBLz0y7lD^WfA+1y)5iAhJ2gt`ON=-rHeaJp6BU6#Qp{6 z{J89Ky`$`=+CtC!{jEWEV1pfoQ(f1Xl0 z>{s(+EL*i_awtQ6zueIwif}Z|E zyZ%4Nk88yLrgzbQJukn;-GBuJlL=%s|3`I6QC?SfO|^^vLA=D&0k`$V?5ll!@q3xO$2uETT1S&-SRa@?=DCM20My+C` zEv@777|gvjckCs~q)AG3ZFx;og{!m<1(XKYFPf_1WemtW8WO)(%|Aw}xK@_c5RW^% zy1N_k`o`7xP`*s2l&4Qg6s+O3^efOTs4XvRT3+S0hfJkZx!v`X&Od)-QLuftYb*|HEb zE`g4KJ7sQH1)F?EU9B6PdTcSa1}E8d9sd00v9%RfHzI)XMe(gb@Ba3RhH9{%WRGlZ z>MQo@MmuD&m)F%+RxfXApsIdqdA4D143yRRhM{qjb1*WT1Bvo)@9r)}{`FsVcdtbn ze|LBH9Y`l2eF$kW(if3dApH>Ohe&Y(UWv!JGy&DZOu1fwcAI?(WBs?nU|{(&ASjFVd7(ySp>6dsd8e3evA%2VbQ5 zZ*+IxgR~Xt4oU;i3wuwGAsvR)9Rxkny;#?5L>iAt;{8am4bGQg^*qJUY&8r`>}zU= zT{3_jhEL#^n0!GWCCNH7DQ&i;|0+|9GHuA@(HCT-Q$Z@9k5AEE-Q8meu_(zpC&|S4 z#Q>|K@Wj)NPYdvNq)J|r)ni)Tao@Bk% zSdf%oHMED7NhZ3LQdA7*gnuYsU z(tXsj(FoJ8kDCFF9o5jdA%&_Vw}5&XX`JX}_VkUs5J8d77Rxgq{;n zg!;)A^oPEr2ZUK~oRO5~q4GujSh_qii}9}jW+Yh|U^#10ZUg$yN)!`%sbRfbk$RCI z+ynZ9px1nZijn;u1Aag7@#L5D$tvsPHX4_qdFS*eUwj?+JJ3JBLSEDZE!LBKp7>cw zS;jy2W4(kKo&6U9gaQK0lMcfE5B|;Q&&O!ujP~3Zzc6X(`UHO*nsWnc%Lgs_Q9kH$ z@pQ_8{zUcNO7@g~R1oP$vywI$;tJz?^`u!;HSxQH_~E$8YxJBtiXZzWyl{P=Jn~Cw zskndj&Tl&LBRhTwe*2%nx(0deBK-Hj?*l$bLn0-7N<8cb{8>6Y$u$OeqMwU6L~=>L z$s@nX7k-l!*UtdQ0V?D;YX7)vj8V8*{iz;`hx-r*bCK6B!ruY>G2qv0NTlSq4*_3= z`1lCH=hL1doDE->va_61J8GNUjkUWh;KafvA%%#347@H>h;#sXW$3F>;8_Er||u3Sl{Z*e7x`-magk&-=2TGozTMMZp^QousD_ z|5GpWx9%AA*kdsHx%CXYT`;70t-mt$fG(dS=`q#$$rtG}S(b}#cOEl(;q-Ibhh&;7 z>lqTolaCxl;Rrk>?fl=y9s3=EnO!8IZ~m>55ERb*Tzzt7J!gkman2e;;Ga_uwNI6- zCq1ej+W9=)MP+~LMeS21+h=f8A$yE^Zjkge75=Fg)#Hs(PiBmIHc5IKyMF3L_54wm zi|+qfG3wbV>0^ygz12oxNdCkE41%h*3}O|G1v-Wj)bxln(p# zcKw{VL;AGG=%+<7>N!Kw$GF{_XmsvR*&@r0j-ue-$cVxb_;dPcFKqtjC{6FtvSVxT zMH1HLO~n${=6AVLacw?v&o6~&XJ`^`vU5)JU(NruIBk;mwQ)$hul2{RQjl+c=&mD1 z2jvYcG5AvDz>lduU;E_^JlN)IrIeS}3Uq1xRU4N#KV)Y-wIyA-vV4jF6(=dj2;ZQ7H*fwKWZm$dE|NH(?3mkgT z-YZR|^wX6xT`$wSWcq+ipO9&%Oy890$1*)G(>~{kY6i*l9GPAy)0r~8T&9&WT`AM` zGQCTt56JWhnRd$bO__cy)8jJjGe*`g({p5cp-gAW^m3V2%5G=Mu}qK4w9i;szf8}O>4h?#DbvekS}D_&GF>mzyJY%+OrMZxr%d0JY0F>jqQV&8 zn}L7$@$p*N>OoZ?=X*VF{0QPP8PDj9hW@HQUqDM`s=wD;-XZIsHDkskduG0CS#?>h zeZshl#*H64ag@mLo~4KfBAOhMYwfQSd*dkfVvWkgSqdFX$8~73pi9mWY4kTWol&{y zE{$GUDk$#Zjgx34d0MN+WWWrbAK_`!wvdLswfI8)!hV|8Rrwh!W?Y4>F@2VLI*>&b~4b**iIVFYFcfE6VmYC76hx@m1W7cRobf4H!WZ zenoN`&%vmX@avh#np*mtX+#s7_hDh*XEu}35hsI1xODbNcusnTD(%nJtqdQL#O=6QBNF9=9A&!KWJ38={Y z9#k;x7f^}$102OM9T3n`^W!Ah>jJ7W-%T~VDWH0D14K6+6i~Cd3d5o49|XmXXfc>K zB4hfe05=#E<8fHSoVg4tCT3F&{Vu+rG=+ z-C#il#t}^GJU(jR!5?# zhCK}5ZLqyVdO0M#$zWSa_h(CZv%z*9!E+?M#b9eC*lC~;9yemE!G;K-^qFHc!JQE5`4jPf`)NrZExjWjSLV$#o9QY#G8?dWXd_ zlr`~y$})`Ok{#`0naJ4hP?_bzTfj4s{-MTxtJ{XDr}}})W!q7P>doJyChPhY7OJ7yyq09S=>k9;C@w!6;D!$v++Z;8ggLDE zUyF3N-C+I$f~EE5RSe#3FwaDgvHBimaFfCOMKZvRZ!@^rVD=+p^?%6V7K8aA^jzyL z1DNwxgE^a6-D<_ID>zsTui^kLrqWu4wgxDgJOPy zDHpju9=iEYl(9^vR>LDh#Hg%A$R?P|@SS24)`fmk21wyabJ8n^wm>b0HcDWjs#Bb19qnINU_FP2T}$HoK6w%@EQk<`>|SwtNA_ zoBxO=v=s=*WbU*BnklrfnkxyKMJ&h-KS~Fr3dn9g11)582q@G15bR)^y@x5Y%=e?) z*ya?GL?d#{XA&1Dom+q#n%^Lu3b`MR$TL3;N3zWo_ohRO?@=bf#9Z^x$hLWX!7{-_ zKTc$vq5yFf-Agc0kV#A?U$kwrAwDGIM3`dR{x%E1O|e5LVN#4KAhYfK6t@zeM}wyg zJYzmemy`R2Ld3IoI$x?n4?| z7Fr=W&#+ABWTWFP$jvS6Cfk4DX~}PdYIz3!nEa+;9!w1nvTcUe$#2Pl&~D48N)Jln4BM^f zo5}AOxUENI+5)g{^1BkOw{^kalmB6OANBFDG#$Yp`8^3^Sei}n`x4$~uzdi}O8zGo zj~lVyU`r%B9g@S?-A3Ev2(if@NcbM3ZQF%#=JDMa`eVb5f==NA%h<7%*kV3hoza<_ln@ zlzh=??22&|jZ!0*qZ9%zzD12RGDp>@7%L%xb=+-CdN;mP3^YjV$XG-c%=l{>p|a@* zY7OD-W z7=H)^w;-S?ieOU+p%vp|1b^$oOPDI3sYoxH)}+=Ulge6hdxZ?hIK?=g zrfrLwx#SLfpRorL9ZQ*MAYcf^%9L3gRfp75exBhk5NOCGD3(%es6rPQau@=qEHL~Y zct}U#hd!dE_J%5FgCv-)$1USa@J;LDqsS(hzQngEMbk>DbOi}jIsk|SQ!+WXfo7TV z=D)}@meNgQ4cJ?kO=P;s_)aqvAm-8xP162yI0z~(XM)8{Ktn(c5zrUdHz4W5UB`_0 zV|CpKIKi|5-)S6L|AZXVrgH9K0?C>ns^f3&S~JQ1mAkm?-cVVZ{fSm0(<{bz09&sn z2Qyxd?r*LAf(v{TD$ox>L=>PLs+dp3?y!Tlekd>rrnB)a1f#emXgN2NKx$kNk&X!_ zY6atH>X;2zaM>kXmi%i~s4VB$hZ0OwdZ;z|LcD#;fct^>a_tK3TRB=+tz>y}-u zBv0nHQU<*RM#)pSPUBoOSL&Gw;E-5|Y+CAtQ;_G$OzK5@$QFoix1ya=bH*de(NZfD zQ8x8rF;%iEi7x1ylREq_RE#Disb}v*mM1gt)zpmF7&4h($6%Lw?xze{&D{vhsiV(k zmTBfKh#RS6MLD~95d1ndOF)_C>mhCG1p>-~Up@&Asq_Vde+xAeOjNaKA*xHe_YCqW z2C9!SsbqH$za1jBpmK4GbEyOl#TSUE6D61q@i!@&V4{_%u@b7LP9Os%n9c=d;%XQs zCv^%9pu$K~g^?8VT_}}$2|EN#HkK?gO+Z#N1&!2P0i~J$Y6p}jAiFsQV^`{Q0cDz# z$r3XJl%*KgP&?%3pteDeL7U_U4ZDy(>rvzlgI+-MCI8v5pD@oOZ?LWc=gj1X4C824 zyb!LI{IHyKDYp9&5R(6Dm zNfh3b@MTZ#FdPao+Z|#y1i0kR(4>)mW+S;v%4D^@K{Klt<+LzGRQ0l~Doq(=A?p2x zn~)5(Cnp&5Fe=&>odaYaV;!47u{}t0$G$w-AZh2*+{z@uL|ZORz08u>YO|3w`^md$ z)Q1y|)x`95q8nh`fjpVu4usX@B;#nbDwryX%P}{w4;n$Y&Ger(2H_WHnbJ%_chJaR zqrpLFJ_*weI_KH*2(p^rfZq)|SIj8V%(KwAgE9p)44$|L%=%E}iGPDsn+H3nHeM|Z zo?Rum7lQBLIij`W%}dY{gPrU6o+){?yHOb|S661U7ZMJh`_^bt^DAij!IvIpD9ub0 z_rXO%V!OF7Mx?=)2~9K2H3ZEwvcy^D8_=qQ=L;yuoI>>#3nAeGFsTil{J_5bnq=J8P#S^M~{?sT{}oxbT# z`Zfunp-BjY)v$#C34~Sl9YjSz1q2sBalwtn6ne!W3xt%=$CwVC{GB3m8kltGzJlzM&J@U6fryNWxYyvGIt>z%SHXiarBi%#Jb6Gboys7mBR;&BPE*R2W-pzt zyE^fblbzC8cR(nfI8ijkhgL&S>A?)5#KQ(dNaZuQlpZcY5jJNLBEX--t?=*YDw)zl z8C3$!X4{7Yik{mZkt%uwL$8Ci^autEr^9I$mL7Eg>gSyTyOqwv%K%fd4diybG_?X-ib=hLxq>H7cFZdo8lDZQ zMFZQzAVvL95mPj)5=>6Y!>wdwxRHhS!yu9Dw+z9;z6kD3{x%z>%Kkvo*qsC?@fUQR zWGFY(&w{m*;oRg@hZaxf*`dBP!T0#dh#l%P2@aLXe4ARGc#&i)OLk9iSWUX-mJAJ0 zBYO+Us9^`erc+`bwTqe4F+Hlv*d!U4zY6Qz#D!!{S=NP#3Z|Bt2PAcA;%oR>vdpF~Ppn`uZDrNQ!7K3%Yu`>p zbM%r~E141FaJ-UfE7`%OW9y#tRN@V$=ahKw(uJSYm&z}$RhJy^4K@wL+G0&OP2O>lE{75A>E`4%fx z>T$)BT=KfZd>OAVoGZC>r%=`2GU|SU?oW01u#f8`PgJUh*N)UOrFwejunkU9>HsHn zBBrb4NIvCP&4%J`ax9&o@+;P59NoU+lp{`blH(<~_~hfA`FUM zlGqM3@nlMessLktfX0q_IyS?-RSr=H^I+cl4r=~L#T3L!mz4mTBVjI#!$zzEV(@K zB1NqbQPKzg!alyz(re&TH7GMV{~_oeaUaK3r;t|>3V1>6?^(ZoWLrSC!ZjGd;>qQm z;k{lAY01+#$#Pn_g6?&?Qh6muo_H+uRLb?Z7nwX$sX`~T7DAF|eMEWZV#;xo=N{S~ z@-F1KaUPqV@>U=@dA?G4PUt)^CNJm>zQWmPw#MY^JDG=zxa1qzJX}~M-{kDa(VZKj z$sI$4isKbQ@-21uQtuw-dRtR69@nJFcQjYECms7;O{*!vf4&@#mgY&pdYvZ;28skfw^Vj6N&jO?W}8eP}d$@4&RsL|(vMy!&UpsOTVuOJOJ!%bzjIUg3;6WaUTlfY1rdHp5DTjCRkF0 zz1|^^4=A}k?6pO8(+?dhd9Tj%1{8pNgr>n0P@Z=*Yxby;8}q#5Sngv=Zp!n1#0EpHgybp2znD>8F+4mgjMumwuKFiiJa-$9XHgP01a3 z-ZL0w($CW}c$JXng`j-;MK&<1pXc3!kvaXcsw$-~^mYzH;mUuaAX?*9Eofh! z_Z5}=8|Oz@BjSyv8m}qynuxarGShD;xi;ecfM!jD_E>R6pMv zgYK37RLQ;h-blL8XIx`r)z`|4)3BebajtIVeZYdg(sDPn@;0;jUn{w>mA8ZieWTUi z)XG~x@>?Z0xAN*}y6;Yq=Dxp`H;-ojzLnHyYb);-+WB9q^Nv>DM)dtGxwDmb4O4&M zN(Zgb%6p$W?>kjQ?QP|4pd|lOIV#V)0)pF>KL*$2C>5$kwsvjVi3^v*s+sm>Yy*+dzJ-J=r4rg_ zC3x4t2<_XdyturWZJ*ZZu+#~i29fRCr64gxkbq42N(3YBdAKIcRk+GG0s$XOozP;~ zCev0nHRi+6ne^?#e77(^nPX;APT^8`VqKZ$q=NdEZ?_%yd;2W8YS_dz`;oX@IN*V7@ zXy8nRE;2&iaF$cUBBhmjk?h4{3J-_FmS*}GID$71b3&#sgKTHEdZu4?LBrSQnOda^ zy}cMnGW}I=zOAP^p*awhse72gli?K|W-p`(8#!8zsD{vp+Y{HqA&4j~yLmpsQbyS= z+S*RZ{KfN}vQ0|4vi(qYD+dSecZSYIH%X6NN(tv6xUgaf$8wJwP8E&Tg5GTyUMq$w zl_v|dieXPlL+ZM)V)#y>;$C}<7ZoE;tD*E#?-2|L6(hCDGv3prMk!V8y+rCjrD{CB zyoR7_bX zy3BP7IJR&ql3B7n%*F_Opov=Jl^XPpxHMh?pM5UK@`aqxW;9CcQQToGKSy=O6!mrZ(l1=!&OSPcSI4WkxJEgf5l8uIZCNIuMX2!iH8uaH`gS1F^t`}06e(6q_kE;wDK{SIh~M*#K8Nt!m* z+r}DAR;_1w*T5Q;Q8HM3ovq4&QNN(_Y3u$NeUB~@m{5v zgOtQR@`q^b%7c}}$7y%LnJW*Ws^Lm(9It~HSI*W{e4O?rnx*nECGm0ErI`FG=O~Gf z(>}piS2$^#6t+7g(w}!np*e0u$d_3&6V+GGv@`y-R4?A^m2cBNK-Ri5_+JC1zO zj)hU4x0q^NrOfN{yoqe1t5q_V;~%pM*JxfW#|N?c*J>)(-&eBSKWJX8zfU0ZA2k*0 z@2A;<8#Hxmo>TY{dS$$_4;{@L&76J7$~8kiTcn>-SQPDI_pRkPQozB7EhS@n#3`V( zaap>R9bGvq1zb`F6cOy?h4W9d3k`{ZidmC}Gl%lq=#_|YOFOoC8uyZ;oQ~yIu@b%% z@7T5n@?xAVIl}3f)-dMRAE8Odc2^-s;hGKrgs7TuYA;mm;s!ipPW(NBtk^yEpe9`l zyKtPw4_!M|lkbqUxL1bpvuX-o8*xV6)en??p_TDY=?!X{rr}fjVW6fzAo*&%vzc$k zTSDQ}MJP};Q_~vd>8a`<%{SWnTLsc)(PW{@$*4EA(pjjk;)?o#7zM_u8iP%3N z+*wx25%;gcL5VECX+{&ngZDAShG>qegSXQ%*J9wGTXkp&s^c}He^<@^fE=(4S8`Q{ zF(Fhr3pqb$JlU%bXRz=H`2U8g1q1t_MNU3(kyCYa_VMrD=5~ctKfptR^*j#gurgCXMzg zF*a5mr)iVD9mS+HZI-v21stzwbG;k#NNL(a?=f`!swGM-^2V|_OC957FotBQV?BbX zR4t_=@REf8dI=`n>(ksUxQYB|9=&e^^fUWwF!vZ%I zu4G&8QmWef0Ao|tCrZ_LW6-s$>~>w9w~00Xj4Ja(+liQ#sy;tRsL|eh*6k}cIK0*S zhL-+%I&{akdd3@rfv4&l3Jq88Gu~E=a8=)F>Z*_zr3t@R^4w5jF-EwmS@z*>O(^jb z?Qw{u*M<^fSH4A2*P+|c_nySNP)rHA4l-QL4J=gN%!^_9$V@JxDGVX8_jC4cI|@JH#Zxu7Q4DE{}!=v*Vh{n-XwB*^n~E< zbLK2_%twZv;q+8$mr_nQ(-YP+r&>Ku&gpS#Gd(n{dYmSDAYW@3#*DK0?#SgE)hwTe zHQ#8>cK|=yGkUlrdp<1&f64xt?;xqB5*}hE@@2qyB=q{VrzZC{Gs54Q8IE%RG40I3 zQdHdLZm{>O!D|Ne&q_I%Qa+}X9+n{|rB5#!e1I{HHf658*D(G9i0I2f790$piD18j zEC=P+X4%ahBOo6i4Zyzrr=lyFp~hqr*%|m3I@L9AQe>2N8!F*#5LuUH5S^i01U0N| zq`bo*ug`ioy9tcRo@D&O%1dD&H6t+ts=z=59*M{SoC-{9(fKc+2VP-wJOM5HBLm6^ zxpSR`t&e1rl?! z<1~zs zDSLkg)*B|>aBPUiI2la+vWdM=U1#{omUTB+*+ggJIz6;ZjB^UoZ@1|_>ce!VOwU_? z^~!vjk4Bst0^i_|EZ;~-1z#BI0dC8DOn>#U&}$PaZuJKKZpnHL8RK` z2YDya7ju`|hZKY0SrKDw17u1N1&cHJ*Cw;I0sa;n%C{l1uS_&b{{UJ&d7cc`!!fZ9 z%vcGJps7P1Z%MbKoL4_fnfQwXar~AI6(E(MLxwN9x<4#+-}5n035d z$IB*M#xmKU)c}Lf?VU zTH*r`lc0bqPtTEl<%OTf*?X$#4~M`wGw|bPna=%hnVxT!sjtmsY+YH>1OF}4EB~3P zu8++mgDZ41^cwv511sx{=Nekt*HIBLNX{H~5^t+jUUi0*Uf3mt2j&hv$ zz{jR?2RH-oZWjN2Hh!Qp@IjlqEBH%b5c13DfkD9;D3wRq6OhUmgEVe0XK+W9&A<7G zW(FB!Sw}{W=OQd?Xik*;dmoyb;~HV-$w+;_7=hUcG?u{33lSL0Op|Tv$ZFwKQ@;vz z9mmugz&3^aQ#XoL!W*twm@vQsqT)d1R*)@_ga7DAs|IRYO5LY$J%yokp zZlGk&E{&XlDO(*{YqTJdoeYM&!V1%t8En4yCR~ouQ8x{`-23guP6EXW+q>=Tq=JEIcsd zyE&dIrk+#Vvh5IeK{M7*v#fiXv7#lxx)ZGTH)AaxCe`%9-!@}y5LP(fz%QGzHe^|U z`w!N2V9j9W(Sm9_{gtTZIY zI^Fbh2EJl>$_~T{m@H3r?a7ic7XR3+$b2-1IAph+oUA4H!aTh&k@Am4b`@3>*+0k1 zh8eub@~}v0xR%8^UE5(GEeV^0kUyX2-DmW{%Ek=mcUxX~q3sAWegc;np^-~%WC7oa zT!nnHwbt61QHz1n{Qfq?G8zFY*S86I zNfDbJE@mAE{mt2Y4?{VBQ8@>jf21%|?=i;kc|^7pokL7X6(Zk6927EqAPM*c;T(#` zSUh*P;kw%JnPIkbm^qq;6Gp=a1>Ke8>*?SK<~iK-Eq0tPgO!Dok8)6;?!nD55md2D zy)j%Ps|s_>iFxpwv@u+c2J)zUxcM2nc2gV&!=+vzXH7(sm`*;1o@@5C#Y6UFW9FFI z7$Uk)G=>W`DQvbg*9=7ycb~%Klgja?ZJse)OzDfNIVObWtC(X97c8pZ5oSEf?NlY- z|CmF}4QTY#R3l%|8O{;SzC0H-FdH}lca~tuay*`tZM2W&9PR_YgbnDdFwMmX7mShB zpE;0;+u=3=LwMdiBSe-EIz9~Q4w1q<@ zZd46?^x!})Vu78I6g-v@c}XPY^99S1rW39utFT`a{0Y6N*|+-6zbE36+~LlZtDreI zp)*~JiEO7GBEFjgVfZV}2jhpeSZ4nJ1)3ANWE#p9(40sUXih|4F|{xal7tMv!vc_6%a1*b$^00<_C0Ws!2+%uXa*02~3w=#u5&>)!)F6t)D!i3yyG zS7f4L3|NG7@p5o3ep`5f7nld6NY^KviY$KH*$Ed`>OQ8J}=2UYRAU zeZskTZ7f;i6VAmew`849I2W(2B^!Ohx!^-#6*bx?oQv1ql9PSHxp)~%&hiQ8;#HV2 z&_7f;*C(8d*U?N8a-n}N)bVm~E`D_eWDd^7C!C9ygLCl-=i)WNx%h;0@tWXV{L5fJ z53>zq6VAmaoQqd$xP!u7XrFK{UK5;)zl5rdHd~+r-$nX_bMeMldV}!^=i-gE^d{pI z&cz#N>CMI`oQu~4=im}aBSo(*=o{^2kiEv`96qK!o8iKJ>&_;s9SSe`2 zSSe79m8&WdD+|+5hO(OARtjpjAtEktE76n2(NhSw54y&r(hrx&;)RY(-F$&$1Vc5QZR_ECU7f-HNQhJ;$DkuvAG4; z68gUr=a)mH3u|lO9EpWaVgKjpHIPiWmBPB$g;Kbc!U4>|&!PyoQaDg4gO5s)tM`ksBCWG=vX)P3PrSL$Cpc@iyrEs)T3b#@?Mk$3`DIEKYa4OtN;kXN_ zk%e0+9M2xcw?KqjDYORy6>g<)qNWjUr4|w*u1F=^O5xO@5)p#Q1a779aHhotXr=H$ zo(@kCXr=I>5^~_U0vh3ARo?=w6h6`pNlBuTgxj0h2*(7KBs|#M48rFZOW{T{39f+r zehmx|9%|N$wsD`^QQ=|cd?AxQQAxtXEg3jTqLPF&=57cI6qO|WH^XmQHDeBy#OKHG z;T$T7&yVoKujfkPNr3Ph=C7zR4DIvVxNr`Y#3w3Ac!y=~=<~DJ@Y_aAQd#ZqLD}JV zEVksh57cA>b_ZH--F4n)4G&Zw~oHB?<4g^!*{9s3hS}Exk45 z6O|;q$I{zEK2b@+pILf)$R{dE_;X9|2>C=M34dYfogts7B;hYDy(i>vVf%e$>AldO z^gk@UFXR)IB)r$SR2yF_`$Q$d4&`$&JyA(~qLPIFX+9HrYuG0$N%(t{7chNW*e5DU z_+O@@(A&d)d)nhibEwce!ah++!atd-gx(qUiAoaw#r#P|qdj4ts3hTEr7?+0;uDo5 z{F_bR7xsxt5_UrLKj@d|Phxo{be+gs!@We%q0lCw*X8*{B?-qv>qXzIiAqAR&SH}Y z;t^3vq7^e?I2;JVH6?I7XCPEU1QWdsf!q?tfoU~v`RC&j7gUniP);_2N)j8U7)pvt z5*yCn9^ueHRFc>T?KBxjP)VXy+mI{bzKpAu$O&w}5*k|J(^Yq8-h+>A{tK~$3Hq*`IC7dB4MO>Bxv5}i6rI1a}(Wnyp=&Y!}i zs3g(prwPN#90O-^6*B=!D=JC!kn4r(CgEbeIQy4y9^y8q<%S%*}=)5h$@Q5&Q3V4YOyrBHoaLbpjLsXLJ{9T|U?q|5_$xRpiT6jw& zeOTyNaTcM313^2`Wi+@np#`Gne7mTn2_9 zOP=Sh%s}|kGllo;952T$6)vG$NV0K}i*<~+Yz09jiJo}BA3fIYO!xdTUH}DJ}5BHJTxs<3RVMQe=B`Qg{pXm>8 zDd$_?@Bs5ZlFNZg5*{etUCuAW!-J%)aQqE|!u3+7ppy9M1t>l)s3d;v9}pH)62HGL z%M@_KujA+YT%8k@#2@fHD!`9nz#Q|^T#|%NA$cY)U}7hVxUb8V6~*@gNDx#Kzb_4>C^~ULCGqPyfeI># z-=IcPR1$x%I0Q^aR1$xPQi@9AH!7v5B>qsP6qUpurj(+R_`{X5s3iV~YoJP!s3hTA zO?%wh3MxtR1$4adpG_~u2r5bJ)C~6H!nd2t5akn(sn@~xT%ON*>ujvo5F+n8>Z!vGM45E^R@0T!_k3=O2KPb~V{Kh9L zN%&zIuIM-smwF`+*+? zLnZNf1TS3;s&n;({TPIFwNdXg1p}sxIG%-NF+>uJl~N3m#1f?xLnLv64hf1Ok~mQ*Vu-9@$;1#ztX_*?MP7Jl z_*h7-6bz9{!4Rob43VT)2`3&Ip2R|lArk9%HiB`%5Q+VEEKDj-^D$$e`yKx;Xwz5@ zL&WFV(pWe*mDFLNjOE#Zxzy(Y?^whR%o(2;BC&j%TI~}P$pVa!tQB)2?q|J0ER$^Ia z`x{ZISYWmY>s+50A~EeqIQ{DrLnKye9+A|gJ~2dMISdhh1&e7bYb*{m{x__BI}t7W z#hhbeO&B6F$;3L?bnF*%mWfqZ`Z^=iOsok*MCO@TN1KlQV`7NJsw{oG@rfZ4>ufIL zgE25fd}4^inlMEChp;G!bv3f5f&(r-F+^fb7$QC~L}ES6bBN}Shhm7tYEMC>*h{TTjomk!l)!T_3uashl#1<>17$UJH&!gXQL$5EKE4K7? zp%g|q?E-FiH+nldB@oqycCL!r4w`@hDdB2-9AGM zk=S?%53{Qf^rfq@J z=t}GW5tk+r43XIMHVESM0J{q@L}GLALPSh3L}H80V_fqRLnOAuoPnm`l7JW@v885- zkZv1dh{R4Xi-auoc@{f%qU}BzU!MAwnGGxu`&&G28aqk0EYKs`Okd{2PBu?T*19&t z5Q&{)xXxvV;L-Egsp6U#K73+`#FiVb4A~)wArd>yN}A;pLnL;((eZ1pPYjXR8M0Nt zK44(w*qK(Tr9Lr4VrN-$xlas{*a{IPeSjDuv6YryLnN=KVFv9{uOn2#3u13(r3f4n zTR=O-*I<~8$Ch`4q5>QeYXKY*JADXpg(~wB1P+O{01k<@1P+OvwVUz;I3#xN9Lghb zNbEeeH|G`ths4fT$^wVPE~o`xT!2GjuYb%u1P+P4kZ-sYu@=A~u`F;%0&DKrdz{>Jz#*~skD(F*91{ERaCAyJks13ayGYyz6U26@ zN(vkj`&iQyI3)IorYUepY`1n91rCXQs;#TQA+bG5S>TY^XJ4~q0S<}%xFJ_^3*eAg z3*eC0FIr^_91{C=5pqRbY8`PYA>y(rBQ6^t;<5u3@bVUttgkr>4Wjc( zZOeHj2OOgFN?pr&Wq=HXn5uPN8Q5}O8DvxKyi#vTJFhh4<`n{m#2Sq*z3XJj9vfX)xgz2#80ta^eCUlB}%A!1wROIFszM9jWZJ1P)2^ z`#?|%9FpwDx8phBkYukO$W=gT4G4%tB!7sZJZLi-F;xm2lG?bV64D7AlDdhlN$FhC zrf$(ypaO@aHnEX8Z4o#m^=C~};E>d9nx?=ZsXLDED0&ERNNV%6&ZHDLBz4zOpmM+= zsk@c5z#*x76n4S_hotV~RuKkK1rAAV2?=R|LsAbYX@Nsh4=oYNIH^brr&G&J*nm5;NqLGQ|c)tw<>T*>S-k{a7gM|7Khb>0*9owDY-*|LsHMv zGCAOoR7>EH)XQu??DZ>fNNPI=p&W2X>Qyahp8|)Z{>DiW)==P()N9IYfkRSnC~1L1 zQtzp8EO1EbeI+e$NNQ&X%>6mwkW@?Hkkl^K*#d{8K338Khon9!LhIsqumXpqcC)cj zeFY9leX67d4oQ8+g*6@|6*wgIxf;g;hoo8phoo8phorvI>RaHD)VE4n;E>dJCrfi% z;E>e!QK^vy4oUq>b+*7ES<(WBq<-M?CI=jn+INPCvcMs!pSUQ1ofSAF^$UkStX>s3 zB=v7jhNzL}6F4O0$RYvt_k03}q(ZU+$5}1UCvZqA&wkvn)AI=&lFBzJQFMoVFmK?sS~ZRj58jtK&XWGRLHXkE@lEJvvjfkRriWhagca7bwx+dw3g zwvdpeR6=Q1f&hnCgg)l(uUFi2@u_R(=kG5qB-F#pZu-mABm`d=_;C zIHatt>^l%Rq%6HznC}zjXLHOf3NY80DC){O)>dKk;YzNoit`~ypT3AH>$DvFd|o7Q zNLgnV#pgwC@03;FB$NV&ly%X!^a>nO)>Y?x1r90eW}hqp98%U}0*m6qZ&^=kS*N1_ zhm=(=MN)>_!e!m5XNN&7<^byE#05B{to^;rP2iBSj9N#xbjvy@rNAL&6}re!;E=K! z7AdVn;E=LjEG90%A!U6ca0CGkDeKE1+nKFi)-SuDA#g}ptx^gcQq~MOgz5-zNLk%h z1_>O}rU^JCHKIF&M%>=G#sxT}_~u0jOBuztXlpwO0*4fDvc9B0EOILc2X09Ua7b$8 zNtAF7nrvbD5RT=tCsf{OEhxYt z@+oDa%Uq{`W6M#fo6M5@a*Pr1a*PuZw<5zUjaR@2o{O@47C0n6iko0@0S<|u!mUDC zrpB|tAqfJ9#9IJ|#9IJ|#7|!>_Tui%hsd5!i$~lq86;kgJ}YpCP}g0o5z@aw688TY z%?o0v8TS7{=m%gCwo=t5rOn5?qH|*1RvyzD>zQFlf8v|aiw}PfkTR`xMa~R zow8Z@Hl?_8Hp@Njk;QJj5;&x|D>rC0OSfzmDW!Wh3xPw5d+^f?`d7q#1sU?W)V3Q8 zXpRz&>m_W^61Jm`F7yNq*}DH78H){@Px)=MiwL*0ZJUX>CysL3maAhp3BEjPn?1ds zIKpY0?g5eFt@E2_bRdFhE61UVw{^nQBMeSsQ_r}xv7Yb8xj z@2975dzEg@)B9<=@vEoz)6+CfPw%Iv50iX)dOtnmNTKxfetM>+>FNFSL7Gob@26*J z<4i`qsg=4ylbs~Q3(U$2s70w`c1N@m!kuKg!mByqphTA6FNFSv6`f(_tVE|nx5WIAE#-0dOv-^_tW;7Sx@h$KcmWg z`rzsP^yfQ;($o9tuh`(()BEYKYw%=}JH4N7d3rznou;nR)BEY~l{`1(^YngtmR(`3 z3Hdy|pFYIWYePQ2flfD_-uHPPIo))6-`|x1J=gN%10|l`Pai37lzDpJ{{Zz)H=W-1 zd3ry+z^3B^C7#|-FSIm1P~z$R^f8vk2TFHQzoygsK2Ptbn@;chJiVV@V(0`sz3=n% ze!A)OzR$x$=@ZOjPy<*7JiUJdJR;&ULz1WW)62}uuw&-|nBc=Jj6C3m<2~^n6YmcY z!Ex2;d>a-l;j?Y(fNbj7l3IP@QB30^!s+Z{UJ0LX84t=bo^Qp(Dds|(dU7`PLYq2| zc`r3;%qy~~m)g{w%zL>_y(^n~xlMf)V?g*SoBB#N^(sy6at0)as!ezg61qMQ)=;(9 zs~v=zvqHjVhNEq}ErT5p!*F+;ZCV-P!llRgz-0a) zbX6JXe=}X_M?v@H^3VKH(uZNK)9+7|cfFV_w0?GN#wzr}c>Gi*^y$xop8e(Ya(|q1 z>gCkkXgSPRVA&`vJpDA_4jW%Y)jId5J*z`v6mvl@DEqU<(A;X%>JV+(<8HQa*ARCX zdK^riZlX+&Nep)noepU|zGNkOh|)a{WPDHI8Q2wq)#ANEkcER)^|_cKHs+9A%ovH$ zRv9COI|Gl)rH)m8+k%st@lH}+XV4C+da^M)ZB@6AVwpG|2}7ERSR(Y6N}eo^Q;CPa z-r_tbiwDey|MlJz7747>Q=sd&Vw4<$_hEg+ZI+AMJd*(}uCrV+{tCKwYy-03k4DcR z1DYfZv;nqBjnhy$v?-M>R>Kx^CuyoPn2vRe6|fg2n!lM_`=VgN^o+s?HRLG-42H_a zbs^vZybB6PXjcx~gTP0K9`;WJ?nE05b6~DbXnX*Kw8@a(P-zpY;by3+ z9Ivcj3ME#8ZP@WpVj0+morb_G2n?9nr~>Q3Upujxofd$fRy;Fj#lMYER#i=`Nb91N zApUuZPeW=qtX6BEY*xoRvx0JU{9$BsLAE8Nj`dC+9ywt9VM8HmEkq5QfWVKG`RuSJ zO@CFHKnrjNtY{|9sb2~KGbvyW^3A{!w01_b^g&3GO67F<-T!Lu+NZ5c90t>zE*WV~ zHp-c}PQeLfr}iqV6oW+l zdse->M7@VW4;VD0sdWb&XRS(Io%+Un;5yVIj|>8Li;QkPvNG-#87G6Tt#6jC3K>|% zvo6f`tSkP%tGEuO{5e<36H>~fxl*2xQod&?Us_G6+(ovOrcRPSQtQ#IlQbJ@>bIhl zI1MRvxku}QX>aTh|HgUV~axgHLUBrPShk)?#|I(IqB=FihoY@$`SK z1xL_^b~dAyo-G%%LGyA4y^6vO&aY;tud<2Sq}|cS%?}t9dM!MO4BQb}f$>jgu{Wjd zz9W5t3g9d@6{C>OYH!Mqu3iYbFP1}Z$;|&5sFAX0`bZW{;q|Ll_KS2xF}rk4y?)Kg zJ~Fv09m90d?_+kcj}_r+{koO?WWxVMZQd4>^g2Vx1E(AlDu-P81PM&i)UHC&S_Sr+T)KxB(Kw zgR(ld7K#7l93X3$)?)9$7$R#QZl=}8*%GoAZP?hNg#88s474a^My`}LQpyFC`dl;n z4g>@Hn=E}osBgpCX0>WzBd0#&0qp@Rxsh|`9O;;Jh+oVQfT-`BIdK29tTtao3H5Wq zxCxSxfJYEbn8uOxe0pj+gdXZ#4BDw*2hI#cYL8Bfl24FROpz8-L@`>_-e#MRtCG(| zX`&)Iwbji`6oDY?lCsE~+boS$S&=oJGwNzv%lGWPxu(-mUUN+^0S#60`oXy&r)peO zeUhxAYFtz;M9pf?vG%2^SBgqR!Ey%lZPs2+{p14d!(r&qntvsZI)h`Ii2F*q!^ITm zH*1j3R9v%#Y|IWt|GhiZ?z2PRI+WcRrR7Fgc6_IH%7LsJfSxhzjFV(L1iEKAcGRss z-16KB5y$+eh^039MI^6lnY>Ep0v64uIE~Etx>LDR$$N#WBBS%oSy#XVAXJ{ zH71u+A4x{cF8fwE4OiQQ>~e~I^*}l1Z+e)FwMzDw_Y*LrISTGDnr>uz@Hr}p4mE~* zucn5dmn;K0_DA}skS=^|EWbW7y@nvmjU@Tqn(4g+Z>O;UdSr#>rYjn`z{R1jp;KZ&C6v zsxht+jz|a}~Csm>RmRA1LNR{e%g4pyaXFUUi!@-gpZYX_U5 z`~{6!9gOI3^>D~u-%K{GE3%uLreW5h&1GkY%Citzza3J4%t_4`soz7Y)+}FYcJ~OB z(sr`S;G_O6$iQw03AMv)JZt=z#7~zen6?KgKkHLlV+m&dxG8hP=0lW;@m3&~NQLO7 zYyxo(PgLrQb)l-{iAsDvsy%aNQxPMOL44vI&emC@uAbe*0r}Rb)&N=4)~`Z=`D{%o zuuuwoHdkPw6nG9sq1rXgY;c5X#{IbkWNp=)sAm^SoE30%E$*aigJVKA&;2c`(J4Z967!w@rU3j!A- zP`h|ali@$G+O_oejx(A#{@13d{oE?a!Ji9V)>4N3B3l55{UMqF+`OiyuT5KqJCSo% zvz!ezHi4tPh~s#T5gB7V`vdCqDcIE)%EjKVqekj{<>CvoFapOZ9I+zyNRtkI@1!#e7)%nJvz>lroben2qV1GFU@u8_|NOr(68V~0?Q=JbC z18#4oY3+lSpp?Z;QX1U-oDUh%z|ifjoNj5+tsCa@+8>)W-lHOAztOni+yB-1>i0tG z9&|5VgSFdloK}2{Cs9iM+#+nVf>Fn2O*j_AiH^G!zBrz3j2lgWHLsZ;?}0 zBJIS8OHt$6`dvzP2>)I zk7?>Ob5Xe2HVF>ixBcK6>$YC~;UEf%-`Zv_;@*2C5PG34!{(;9iT7Vpu=K z96K3f3g0yR!HUf!Aok+W-=SqAVfZF2LLzqi_)_Cwa{azZQ;SS3>c%t?% zHv^^l8sr}~;a^SVKEiVMkDqW8n30F?XR^FMW%FDb`i6P-kDoA3^3)D(R=9^2VF!l- zwexKJ%!&A7#l~~y4cQssB*YJBif>qMUG#FqQwHaGr+zbPzXZLi&$dj`>T|<{~G4tIZYh@>zH0Y83j(|2q&F& zkQ6up1!#eTq(BdK9?*W4isM*SJJ=E&=DH#`WEestK?AJl@graZwW-6kE-PB5ky+W!(eKtE>h z0p_SN^G?PN!EBRb!*w?8WzEfJEm@!ZvH}kM4@B}$y2OR(rTqH_k%J%!&BjMD zr}k&`CjOm?J}^TQ^44!#k?#yRu-P>4^dOjEIBb@HC7)V z!4~8*hHpAlS{H-R5tKH=bVH`_8310Rjr80gA7x8GVTZ^Nf3H38_qgtq%!oU(Bj9N6 zGv-#tai6q=A-rYg>)RJ1*Vt;lGbj zS?IC*p&d9g%@eFfA7d0>z=hU|wEi(PH2QxRGQABKFoJ>ijwg4ZYhP!3)^D zp+7bvxJH6c4M%XTFs#M0C+{MO9oGjz?sGYzCqoEcvWUS9#*@5D83b>?>k#@%r!JJQ;cr7j`tBBhqhxP-8alv%RcC4^n1jU{VbLfA#hEm`Lh!Y>}+fIoc(JU8KDwC%c5Oi)1W0%O!+eq{0-yX+xEBT|(GJI-0nU3*B>}d!&=C z(NecM1G1|nPjc^MeY=~xrGm>{LfA!W>@RSvGA<$PBE8IXB!?@{HZCFTBE3xtvI$}5 zu0&|cE}?3p&D%m>ZCpawMaEcqgK-IA7a42mO~xgJU1Xf4 zHyf7_c9A9sI~T3#L?(*%_-Nh;phje}A=p^B5)gJCA?zae6bOV}i?hl(y64(g0WLb*=SNyj^N`R8@W17ET;QZ7(coak5m zK&??KFFK+D)LNz7Xl5{|3zaI2ju`;zBBkQdK?6ZutW+{Owm+y#lq!uL4D01zs#M$P zXVsuCQz{dE27NyNa@DIkIt{%p{|eR};@*;04j(w&xrDp=D4iUbQ_E-zR+1g#sKJQCFo zo`g9IgG*ulSP(*9KbQv9i-Nr{dOY|R{E2|?!is|);3*0I4$CBi+XtcW;3mjS1r^|F z9ejfL(x6W-e4ZY>06A@fV>pHux7()4@iB+XWFceEZ;5NXrC7Iqnd+(7z&h z3;I+B+Y#R}coaNU!8eHM6ikJj&cQiwiRxf0V!8wla&--+p!9CRm5A>iEJlevf}0TT z8PvlC4+yqmoUIAEz~y=c!@=J>I2QHl6RbjA`UYGt_Y1zjSXvu=-35!GU^MJd7fc7| zfZzb5QUzT(~|s9%VHIkKsBvI21C61UJ?=&Q>QFgWKayFcvm=!U_1(VNW_i z8rnSN1mA-FX(uR#CeJv*d5C=038tfEwmHEF%pT7BmC zFFCblimdQ)szc zala6)`DffGfV(_sfURx^buDt;fqNU6_fFjJfYmZVUl^@J@ITPMA~*n^bq`Vk)aqW` zXF~24+z)~c@5g;E;=2ToLX)mRZ}>sCU;+H8dvF6}^a#eonmvP8V4nkm$*5UPFdjAN z9lQgneS#h+wQq1g8mwRNAbheNg*B!BX(m2ZLbchM){F zFC+ar==%!p3s7r#*IpF#D#+a^3Jx^`x#3WoP}m!Y-3S5jsKb#L9>p(@;7ad6bGXtv z801~>bVQ@PhkFgGhuZ)M`WpKDh<1QC-G>Uoo4!LGK0@khxYI7&&x57lPrcw|@TWT= zcsF7Rd;cl!@1kaVaDNjP`3(2Rpw-(>a5*aSjuX6&8ocWS9xCt^5+6jv{u>33L&JOx zn!80ioq#U_zX9o@6+eQnLfc)?4(0z7v5QgSCr-eRpZ*2%CFK19_X;S#5BFVQ`^*X6 zL-glPFdQ}f!U=A~?czU}U@ZLOS1{cM<^KUuQ1)vlcm*}ui!7+`H%NovZ_y{)Oaq}xrv&ubn* zY(12G6!#GBkKw)sF1!`@2SGoM`xF@HZWsu*eG=q!Xm$_U1=hRQ1RgAZp9%KB;Ljp4 zgJ#(Q4OYN>&w(BfSEvu*K z9qkZx>gPhaQH3i0UZ{BVmNrN`{oW)wOQQ-^JT)MdiS}T=Gdl}a9nC`}qGzoTswUcs z#jLnVsJhk)Rs5|`jja``c)L)eqY71AlA_GX(TU~AclKhTW<`%e{i5d#7iw;FHtHEY z_jf`qjNU=c^R@`JH2Mpw7(KsEv|b)Ple%2+Z=~T6sEI06@$E?D(T(UM5u~n7m6BX% zq6$?!OvtNERH2Gj2)V&Tzb*mu#T$j(WTFaHe5a6`O;n+ZcSu3^o2Wt+zayzzO*Bb0 z*0nBULEDT|V4;fBMTl0Y;zOY}SLm}4RWOhVy2PwR$X~$3528pJ#8$IV#l-n3u)xI6 zf~_@yiMg1k90exsE|eR+!CgW@NNNZ54 zCVC*H3|6WxdKj9daEPwb8{wpbDdAsfL^d*5V1bFnPV?a)g~L@FC;9?>v2cV^dC{9t zxx$fIO`pkt8l|;}M;DMfkRs@G3QVk2CR&E}C>*0yb(C#dI94I*YN8wAQibFCNS*4U zX-XM?fLOROs=&n3Ybu9EAA>y$Cu-U-)Z!)N$#+HSQ22V`)EyE*V7d^7Tl`Wy(+Vsw z@w*7OR$$^ki;~g^53Bk)VB&k3<9Wy_jg_@apvn0l5o^OBn~GcYv2vx{D4#iEZTX1H z6K(nKrg;>jeqj>=S4sF~T*xw&&MoI(3U4oSP!wm6XLX}DPsP-U-TQYD`#9H<< zhI=2SinZ+j&D@B#(2TE{eNqv}C2WcRccUKYy2M)cU(c1oT{r&?lZJHoj=Kr9_TRJ{ z4;gm^3*BLvJG#VL_TM(r%9Yjb9&}g#9ZN2CpM|IU@0weo1F@D}VlDgcSsL2_#9H>> zxAZpSeh8oPKalK19&!t5r=51&;OdZjFNRY8LrY&5a*4I@ORQ!8d$U;RZDE&K%l^O2r9y8HyX|R@AI)Pz?+ClZTK0c3Ukkl6 z>=J9)|HVXQINcL=iM8ziDve33WtUjX{%TF&OjwV?wb*bnZpJ1mieeUPd9CnXCcK=g_v6iCEpHY!o}4Wc zZ|BV2j8!En*77^T`XR2xhSPlsdynv9uND3q9sH|sgyD-?6;Aw?L9v$GAp(PrFwm5o z{hO86WL=B3JW=?k=lHpH*pJ__Sj(pg>q=aU4VMwk*t8PwqYJ!4T4c9WW5sk?OfN*88mUjumXE_EgMN~`$if}@+DpTe{4G8+D5RJi$)m|1I2+ zMEOVX{Gu7=mue_dCf%7skhavfh||KY1CK$H#aiBiV7~hZu9}O>M_cK6=#$YoJA~nV zT#F4?lQvPYmYEnj4&tLnIAIbM!iDqKPdl5AY$Vjc5cwt~f4CPZJp zTaByw*RWh(35gHoyUg7-?$?^7NKO-L+3#=n=W(WW{$j_kvooLTv=OXjzmLq$<-}U{ z`xO<-_LBt=+};C75xEbG~~6zkpX|8cy~L3YWRbst(+9Gmi>AuQ?Qof>Fr=I z5Uk~RZ7U42vY3hYf19?z_;wlQiFn42s*bLJw(&kn5o`Hu zIHN>|Ig-H#t7DO zt5YGl+P~fWh$xp>%l;j9(dD?rTK4~9CO}QJY5J)7j=xzJYiJyopA!3bTi#OHE%*Ow zc{5IGIpq5Hnm<8ot5KK~OZ_dT5ia81Or`FZFqeEB;5Z|-RahF)jet}Ib zWgjjK^`%f^E&H+11qjmw#9H?K(Dzu8K&Vq7Sj&k@CPxe5*ols|_$U$I5>@}gkPgP^ zKA0}isiF_5c$AQ&iOyQN(kL+i6V*z!g(qGDVLl5lxD#4!Djvhq?mnpCprO+ zR6I^wJ1=?|TB3OT5N-R`#9A(%pp+L~3qi#b`}Wq7iM3ojiN|629LI%w@nqFF6K#bV zsd$Rkv^shmsi|{>vnIL{ty(-ysk&&A!aB z7awsXGRo!wXV~H+S>JHw#YP_Ei;tpM*-PN>85hq}X6z*lLC-CoPlfoiN3izg5SGdK zc_BWaloM;&kA}9uvC4_H>=%h|fscdxwZ!U-!UB;#K+;KY zk*(=A>%o%5v4HDsP5Ks$*}3tgT-LubU6vjak_q$y#6f-nt(5Pcg^ri+UYX1A88gT- zg=Lkr22%e79AG*HH*}F!^o_RE1kIqYv(tfJP{pNgX$+~2kQm(W~$#mUXiMKx4DVY@rUnz>Cc!5?f zIha9|c-YOjcO9LIFRzEY+&p_NOHX3^}sAGJc-LKe%uOK9biMVeL< zorRuUa*R@S(JdiR$12qr-HoB6%KpgkCKgI)<)VJ? zAXp&K%0<6Dg;aTXFEaKq-*I_Fr6`mehiAcBMd94cL1^WoJUb4Tx{a7+iXwI#&bS=M zit=r0wM%H_qE?pd?sCj4a!sBLfi?2rUlcX;UVxFhgjOz!nU6Y>Y;*~&T;$ulqg@^* zDTO^-N>PQSuQM{M z6jfUO4fxR`ny;fx$9D~@;dDh+mcHG%li&tLoy{H?fzZk>p_PlOMS0oacnB?A)YY_w z_VS$rp_Ple*>r4h5L&sYhv5rkZg42Ha#8IoXy<}&;EXjz$1H?wnT(2#?c0eaa#|Bw zx#+lmh~-^Sy`7@tm5N8Nr}-8uRT_Pi55h}yX_$%fa8uDz-5{)vE~D-z=;l%PC^l1_ zq7#+s5p73mnNmHY=dcY>14J^Jn=mPeIMmuf zaA@soE7(b2>(t@3R&DiZYptDZ-*fDswRW(hVh3Nx|M$Dr-shZ~0I&bg|MUO+eo^jS zds=(#wbx$5-skSKn&26{S~x|f4Td(B#ZntBT(9JmQTv(nDevl|FA=BXYoS5`~lgazylRiakX;( zpgZ*(7M4uq)ynxhT)MSf5WHGBf2W8h)Q8WjmGgJGGo*5z&#RU5cNfnl**0`_@}E~n#1FVdng4?JT7d2P{1;Wmivr%imj9BLqyl=0`9IKBGXq)8 zKh(0~$#Ajre?GoAc-~?}jA^AU5lKg;PdH!o!RuCLz z+0V4BC^(x!_j6q`rv?vG+<&37J2l`lH2J^Ol(||t|MeB;Bf?Y{Zwi8O`$l{y17CeNvtDi6QB8Dw94Z0MF5YyfOTk4_zbA^mtC5T&invfic5jkCiJ!!)mGhUn9NeiT`Bmk)u6aJBM; zIlpIS1$54YxyD_6NzhR}%GJsfQwxA?OeZ9w5`aiV9^T?Q%5k2WG~)_n1@}WvC(W7# zkc*aAD^EH{C2&dbeYBf2o6mE=lquU0Pll$Om5o&$wNpVqP^!MzZk zqI;hNLi%W9pcaZAxMvj0n!d zrg70TR6@L3Irs~?@jdP6?GeFmN#yrw6v2&=!Ag?xUt0Nwk--;%v*zfv^MVd0k81LPyr6`vd+R$g-4EskZDji&+hjzK z7VJ|@M`7Y$E5k~{}xnlP7|qEd2+KAx1RH=hezZjyMSz|0thVD;Fii1LxJsKCf0T8sSpOLjXqkyjr;^ z>GletzZ@mbX3;3)Y~pT%(Q>u&$tRP)ljV}#Q^*i3$H}}}`DBwC5%4hh`$iHuGlFUG3C5ZvMUC^Q|1`XI%mq&%2Q^114T2q3q0jq(s>5M%PDh7 zn=@LjR-SU&SWH}S@9D@-DR*=Scgl24xdAu)rkt)$Mk3$=#*|`qDYL|@m8Z;OH>0Vh zi>AEeQsQfaO_;KPAm^F0KIMGt(C|Qe%0f+z3EqImHRS@Oo9E{wN3K?$QgSjuUafrU zre$Q|5^BrJ>yVrD-;K}Fa<%e=Pd*M<`j~K+&bBj|ck4~K+sKmaIZXI>DhKXB%GJt6 z>2DLmHSjC9O}&`9Jm414)Fp<4!Ka~KrOvltUj|wfDoiWrcG(}=1PXpVS0V#)`NcyzC zNuSIc!+_^CThCmrJboGXyhi^HG^fVz;Lf0K1nxA>;$&W}Jbss^eBHv^ZQWGaY}<3O z@QYh4e8zVyIgVo-g1<*+8Y^%^Q2j2B0p%-^G2XqL+5A8bDNFk8NSrM(Eq1a17ZgoM z(Gv+y0zW29Hzs~E1Gx#OQ%`cHUWCn@FheC7FNiFfa3)+_bO*oGamr%ZN{(}Z%#nnD#5%%K8U9g`R9);BzS7O)L zIao5|F4Ta~4;}=o#+A~HP#MtTj$5RuqTrG;q{_6fl#`eOl;akk2aKbiFUKz&r_H$x z(;XZDhH1rp!f_{PLh-co4@t@oeuSBxw)ied6$G1DcF~6=RTQMpM{3Cxk~%f`;sr>R zUoWXtF!Lg$Dpa=42xhZpT6>ro{2P?rw3VNgn#I8bl}Oe6P*NqqLeMp>?iZ56#xJIC z+Qxdw5uK+WGPOxl>w~vR*(I9V7Tk=vnRXe6gIyQ(8hIO@NN>W(3)fj8jb!0b;4kE& zQ0>cQrH~OMHXZMBEogm{eIGL9hZ)ZT5Y+#KV4QZ!2n=s>t8>~E;-%K&LELHf-s;IM z&S|;#R-ZPF2u91j)v48AKV6|-1;NR)ky^v8 zYU&K$Tb(kS=&4`_a#IajHZ%D6QluK+mUhL#0k&%@TF7>IPznnwwN}fPh<}(`r|nh* z-#;B?>s8u#Z#AjXbr$hWAbvn*IRIUeq|xp!{}Axm;tSyDOKK1!`;XSFOaw6e1LbmW zb*ecZ;OGxcz;D7*8|zUySmJ`3P1A&KwNAlsd z?;gAmyxmR4eNXW_!K>{1zc{Isx_=PIvszXVya8L0dR|lGf?3m%dQns3gMIA#2bwAj zJ`P=#`jMt41XD2Qsh2wiXHjqqv|Z{ano0$?!s4WUs;Qa5%d{3h(^PT5cRr@fhD1ql zH%I(U%g*aD}r{+ci1_`+7sd{|ouC!KB}n@Of`_YLlFx!`)5z9niz6OU+&> z9`^ca3hB+JJ|6aZlrpwOPUjI>B>a~_MygFtAiWuQ*y|MH?=apr z?=CZGJnZ!u(${7B$HQK{w>s5r(sOl3)M`BJ3H zkcG0c;7M4P>5El#mIMz%nN7b)Q;5CmfNT22cXPguLJ3V@dQvI29p0oqnm)l@hlIb6 z*zC_A9si$aBRR=cx5f9r0s^N`c2yr1_)n6MBKL1ll01bexO;l-SJ8iP1u~|a!$v1K zIv=SuR+>M6g*&}oQw6~-u~bp;>RBjj(6UtU0PM>2Mk|&1l}I%yA;m!uODza~fcc-k zPTQ3PPr$HDU$3bpfedJa`ZOzoi#fbax+dy^Tb3YoiKf;BKc0isrJAY_{!9jK=5V0j zf?r~Orf*T4n}a*am3B>S3ueI!T7-&EZa@N;z>mC61lKP5o0ZGOCxy&<;k0IZ6e?m zoYSv-H^vAJmI%H=`P!=^xZMj*=VHBrjKi~!TGkLXk z^q?2K1)`@PAiupCk9fhgWX3go5(W{x7r2z6YjtnnDK9wb6eO>s0|i!%2rg&8*V85A z(}KaDDFE+ORKSqvrg+@&ENC4s(y4w1xdFcY8klGP8&-zkB{tmi7 zr@uYxxUcY+gXawPcRB7)q{6l6!+rH@;N2`PNB5`vx#FycLACoD$27ZxXdcCcyZ>a` znY{}c=Sqen9XYda40A@BoDYXNNt1J5nB$wA$HJU3Cg=NMPNC+UHz$(;(Pz3;#>O`~ zib`{zLh7HcQ~YBj+>N-A{UnIsoSxpDj(dqHAZMQYG*-3yDOWJL7ovPVU4P_o81orY z85nglaDm+2rfxIqO8IUjW1icBiQ$z2GRwPJ{s&-34p*S_4)@(l(SDk!W@j^U@Rz?? zzMRBP-+hO>k!+qO?F&r7w44ef;4m2sDN}G!tipmMM>E}BV)EYC?#SQi>yfo~8JivVy@=I5>D$>6K z`K2gdgv+yVrR*ZPKfLTr(gyfew$YKuiIwVU^jS-xW>O%0 zC`$MvYo1;*l=QX}lg_7QS3`s81TJJBkB5CMWFKQLMIVpE`j~_2x$L?1#C;S@a-7eE zeY}HxGy$nj!8_Q;VfJxrtdEys#n{Q_PK<OnN z51Pu)m~XEBi``DvQ1xI7)^>mx{ISBX(dYSJM*QGT<47lNM$$)~CXXPwuse$vSWKfu zI=uxSOA?C_!59?dw;>0A+fm}akj5Q+g(#%~E}sVA3jmh#SJ2*}XRcVfK!M%m7Xx^a zbyfm69~`LojKTMm`QBfF(hVqGkJ2)mI~ApicDZY?;4R88NRCEpI~0(GZO? zo14=z;g_MIEjraS>|w(@(Xf&YZEj9OcQNUmPo)RJ`Y0QG4h^nkgNqHCoCeFChN|CVwyT?V!Jj{QIN&WpTl*Z${<}M8@u=9D1zD$6Pz54;cP&@@|)g z(FCeg9kCObe#~^jc`VBqoDRCjtkV?NxR+o-xwt9``Ur$7i&mTOTTs!Rx&o_WvdO73 z-}%T?5AiYOz)VvhizscYvs-5g{l+>|{x0+VGErX!EalEcxEBdSD&1&`NZv-2D2Y|J zg)7Kv&x14Le$sV$SytVJlAyfIDxwR0_s$XUvBeqvcLu|=KMy>!L|X2p37RE>axWV= zv!4me?u*Lq)3V=$W%oyA_iLG7WpREsD*LRKoe`FOE-L$+mMsa(J|C5RUduLxWnYZS zzNlqSq3j&F1pPr7p4@-_APv&&TeJu+rle*a|6+WzV)UC91JQC6Ih|n=bi$I5@m5xW0jth=oX6Se%>go|gM;96?k$eY+nYXVf z9WR7*JQ~sQsL=7TurEm~9giv6w(7_uV%%d;Bs($CFW4PZ~N#VAUxd-;4^ssdS{mvS*^QXSA#=EPFO8dsfO!XD>$iFKTCN z+z-K1aG%80Ze5gU9BW*q-#fM;fB!mI2(cJX>BiWhH}=(2qugw2KLgF{KJDhCUc*l0 zAL+zpAH_wm#Rrg*i;~|9;FFgzbU=2|YG|X6Am_)(DZd*)&334z{}|Lxsi*%3!=Rpy z?8X=NMx~;#Xl^7vlStni05<_By)HI_hb_iK*7E)K#3OhNc<0vu-J3x7 zd@q2%0a)G#ydT*U(Nc&iV!>{;c<Vb2AaB>vsQ?r%rw?@(I)F#u<==aPd!!7Jj+A3)Y7 zWR*V*;4J{9J*Fu+{4*s@oX|DG|4np1@JHEmfxyhF_)jOrn8g9%266SQoW`fjcuz9T z%dbRti*};lcLK-)08!4VxX*}0eH(fI&cYV}Y}f^&&NS`W?H=hC=-+F_>^U=?u>}!d zfSZB$@-^Vs>p&;``U8NEVvSXN%M3QJj}+jt5O$w}!XJmRl+OlG#X*%k1{BpmQC@^6NEF&p(njPfA0-vTR~(l@H<9deiJS^Ibjy-R;CM z%ku%;FXJsqO+^GvqMDHRGZt z_;n?K6clg85j$A(JqFdv??&lIQCj{v054HLmplU$SF-FeWEJcO@J#@B0VthxISEtW zJdG;3{Hl!ct3^s9ehnUv1I_@f33v_1!-J8T)3}Desz&lbjj8gQgVR)}TG2SD<+d{mH zf$mzMD_;TNVd58e&1wYfb2t>?H&5% zKBx3`Q?MBYk7$A2Fiy!P$HTW7gz4vu(A3{+d zG~1MO$E6>IrjvA=$!B=(Ea4%H^^PAiGqeO9x<5seh7?NQgH*%00KNubE$e^S)azr< zpK=!;!S_1WSjYP5FPY+xfGzBT=QtMi-u;s2{DWQGz8;vXQF`eiY*?~dohj}!-#FjN zpi<+|{B>+q)@o|qjgB}v9}|RKuczLxec-e7SB91+P-O=&(erqRQ&w^8mN$egYhPXf z0xMj%eWTqis9~Er(#;20jxbV6X6gjhhar`n9s$Ca#b)9tO%sv%; zX_#o?3(MXYmAy~P-V>JH6qVhiWp{^V2cxos zTK3hj?AEC4RxO(V8PR=~+aiA5Cj9y^q65b_`Upxy1xIx5R%TL0pStYWr=`N%-zV0#c^(*`8xz-Qtmrk8$ zs5kmtAN@A`5cwZRgNE+`_#uHO0WA6efQJEO2|NJcKW+!`2>>(xjd~92ZRszN;?4Qx zM*&>?Ay|yR1K0_m@LrIM%e_ z40!jK0M9Jo8FdGM1psydDE;fz+LErrOM+0|2UR-pU7AmfZ)-kZ?PvO1@t&xZN(l#@ zx^284J$16DG&=arVE}aiu04XDo{o{e5>;pi_Z_hqcb#|yuK@4wh_?mk#(oq)7l3a9 zD81@{(!zlE!-BUd0liuJNt4f!eO~)xe)?JQ^psbnKQ{?BelcoXcE}8n`BctS#3glS z!il{UeeXrzO&R+7xU*432KPQYxMe3E+ylT{lz~iq5a{@>$MTN@xaE_u zl5d(pEWAbs`7U<<3`!T>1>gq&1^_rEsk1-`%YKQhPqFMR04LuK(z;Dk^5GFBP55(X zj1MnJemIY12V%1?L$NdOG!~d#{sEx$4`!I0v5yH}6@w|) zDn<_fVeL=E;P3FR`Ny703*W5?Hhv{)oNjn;l#ls88}q*zoi0YFSKb3)1%M|3l>R+7 zs?h{?f$&p?9USS?g0Lw8U#|3fF*d!b17LnSZ8#%rS{q|i9`JKzpi9kh8eTeikc@t5v7u z4RrROs9%0E`WgE<0A~Q`22lF#7&AX=P(~Z4t53|#CFej(v;y7vK=(HBE&;Ig^T693 z!}}M5H;Uh`J2BoPzF$sLob_b#zS{%ws+_S#6y2F1&oKjr3DfhW3McQIT_`J@lfd$Ll;A!Uzw_$IC)uQ zS%0ilMI0p~_zFxARPqXjJGadSKK&B-jQtNRpXW`pDDZj3z23`aIX=0}|2#^n9C@Pjg)=F0Hs#UsA+zxh_|n4)N>k;VERI z2X`X&gdUOyAl)L?;0K-!Wq{Z&FGM=az7UCP(-QUq1U~t?TZ=6DC~VSZeCS`YJAo5@?^}e2r5=>0(Ors}UTVnah;@QH-NG|b z1Fx(X4hdBl&p7wYv4w#*cFNds?s&H#i7JyEZ)|C>D5xrgfjPqof{Rd&S7sOx6pzeD zE{l_AIsD3F8jq0|xV?~Lt#It0=MEC45Y%y`95IV`!L_;haK{^t( z1!)oMDvc*kwq!`jDN%QhGsO&2N^fzT!W81JWd}C z9d`>_q7ieM&V;{bjEFToGo(rwd{#)lByr0r$%g|w$Gv!r%;3ng$E2ie)<~TT8TL5~ zVu{)D%2kD0{an-_6Q%lj0bU@5=STwRyt#A07jl<9QC^lLKd@BzTWop&)d|SZymuXN zAzC<;yzu~j|1$c}QcT7>Oly#p({@2b9owFdw$3QKKHiSsyfy#1;W_ zNlA6o^8Gqft66j^)?W>q5UDn))zM&sP1=H@HS7ak54pslG{hS)qj8R7BrOsMP6|AW z7)ya^ZIrxt441?@lL5wR#`<`T1e!F**-<7kwjrKXRj8R8!%R${W^IBQbuQ6-3hDxM zNpdfZsxn(MGx1E#+8iGiscng8upv}&*bLIljQ^vW^eps$Qm%>|Yt#rhOhuRm=i;lBf4x-q%kLlx=BikqTb=L$2BH(snIQ@3%^gZNd$pb zV@{20%xS7ItriucQxVb7rKU5{n5V}z<_v2;&Irkq=4XcEkmOlbb)Fq*7^@3sMk)Xs zg^~VKO?i${UDEYzlMuC;t3xAkAEHS^6Cqa~_w z%dLum-qeDMp}M6qQlUc?rBzhWijn%sAqv{jx-jGdbfgt=CRZA!7<~_28CC|5sw1tw zS{0xuN~2pvUTUKjs=c5xEsBfBPMP=6KhKYR zA84Z}G43o3W0(etujq+(Mdx~Qkvd@CMd9)mWpr|+rcMd8hqqk2`ks<&17cv|>6FUGcB`aw=F92II>`vWDXhB*G46>q@2O z2?qu54I0PP66)v5e85MDX&l8oFO(>ePtA;}8+vfZGx!T4&6u+i&(B?n3ym%_OYee+ zd@jrq>uFdY&Q#0w;bLm5EYdlPRkK_aQYd2(TGS=EI2>KBv%IRd5NOB-CFOHI)L(ry(ZnEH#7+!ES=F|;omodDe5TV`XD5*-jC1jomgzDZc^c`E{ zC7RzB%9W{%4TG?jFkkC+#4|N(t7gU3IWAO+LNt1ho$+SsVLB7QmxS|4#Qm=OSGaT7 zB*0pB@Xwt)(A_t;Z(HAaEq&e2+`(-B+^)_obGNp(&fQhAFtc#Md0m}7gS*b#+A}zJ z!JG@`cJ{P(4YsvwO_La2b4w>~P!MGQTK(+q-0CFg{J9%=e@`6Cu#R#|rBQcFXU{RR z+jkAj%?`Bmw6*lN!3*!}o`c_P;+%4zt*yOd&Ngtz8Q9&|o&^Xl4Rm(51HyKX&BS`l zc5cP1uW~A&Dt_wQJJ{dK>bWVjFlYdQr=7iu5nZ|9=Dk6wSCh7@W zPt3@6xAYGHb$_OBa7$Mw2R2GeC?ne_BSL%ouGaRxfzI9@LpNp-bBYQWTw8zVj`sdc zdsj<#ptCjG-qPR7*|1Gpy1IG|!?s{l1N|)`EtI~#zJ9#qn(_y7I(s@OBIq7FUWr$* zzsW!EJC0j;-xq7<`}5?>d%^YRq!u6k@@bn2y@sRDU386KICu^IuJgtp*x9t&`;UFE zC1y@=5+f2xzXM-+{&;>SpXX;4KUU$xO&&;Ii|=IO9K3HA$;3=n^N!+U@n_ArLAMy`vSbUoI=Ds^N&R)IY;Z@hL;n#2XFPiJ! z?ml#~x7#1@f6@yMZtz!J)a+L+Zq6?D=lx;r2LIe6-rM^UGx0M>TrxH4pm*_8-co;# zU+7O*g}1+{H4JShrcwq zvFc~u=sC@Y1_%9<(c#3ZxnAdi7yMP;m#^|y&bxf|Mt`-JKj2+HXTyCT`M_Xy)ko)g zpWpYI>wU{Rig!OPJnF6SA9`>{vp*>OfGlxbB;DDvMKv8b!aOWTK%tR!Kn1JxQA0Yg z)eQ2?aD8q|j6S!?NNd}ixYo9Lst0W<(%Lphw6;w|S{pfWO&!9P>S0>jqKI^<&9NHV zrsG=M=H+T_^kg>ur7L_ukY2 zZ~HyoQ+xgO{?@8P*~ME?l1M&;Pf?F~i5XC$KXUx1yt}UQk9xSVy<^FZe(~aM_ckYH zPr&MY`HBN~0@tg!jwo!J=cfSYC2#dNgn1!4De*tbuWP+i?^$v4TQ5+nYo~cWRdZgF zx-@SQKd9#uNowf4=kUgd!yEm=4W$=d=1-UW970(q=^ys4b^X-siFp&fSN91zi#nC` z{_Z47-NZ~$THcfUj(X3#iDGQXV+23jmzYB+2}L{K^&WSiq5WN}hjio9Xe5(fn?Hv@ zqIjJ50XI?NKEG&jVs_!8RsP_jLtDMC?>p)@M=hzq@qv6+OVH%9Sz1NcQfT6tqAH+kNGNv-!M z4Eno}<(Be8%shK@H*8&1wFy8tn}G9@H+!Qf17T*;e=(kvIv>ENi=~jb0I%XhRZigu z|6t-w@hQmHG5!I5;#EobN_uNK>ZEs`P6Y)59GZ#`fBGU0-^inSCdqq|V`O#fjeyye z*N|91)+=41>?geoeeyEtb;xo_hSQyxIT85~2AO6h4Q~q*x<=oDq9AcD$#s+7IuIf_ zW+>o#8x`=q*|sR_53q8ggd=vnz}DQY0Q#Z$j(m>90OchQdH;E3Vj%|UkN5fq4&Cep z2X=a&bq{*q*>{h(^`Q4nTwL?=z5%aqd>J>o4s8F&v>IK z%rf)~IfQUR0PAwbViE6bWa2F0JEv`oPfm{!w{8rV`CHzs_*$*S9zblDzU;na!6{CGAr#q z-N9j+$Y?40B*V(oN0nv46``^+0?w!zx5}H0{y5`KdUNk+xef1)z|8$~?@{mi#6#X& z`=A>h_MW<^X`bJF_2Fj!;#J?+>Rr&`Rh5nKP-{KvUY!^U|9NlX9M_vLfWkkzE1|9L zxMBd+U&nh82M!?fhQvy5_W|$ER~`f&?*g4d5&pyiPErzcMlU?+G3CC(sKf%m5C-{ZZN0CMk^y+?2MPJPX5Tj`DE z7~SN-Y_h03w zF1{RvZgPFnJM9i{v{2{0wvUW+SMcK^eysII&5@8{{fg>UUg65`%!L}6WCxlCq?*$>sZ>SiblbL=Ty+jeDtcP4jpRFeuEgjZ#twcEM;EO+mn+A_IP*g^H-ua z?i8e23Hg=u9==NSmD-bhn3u%dv9vrzuf0lKlAoB%8HdT@jJq=9-hC9CpUr*X3*PiQ zya^p%-9zv9CW)MQzjiRDk6%SG8$EE_;dTBXf;X?@xmyOk-E-ap6iM$@hl2sDRg})s zFR|)L@918Tf#Sf!m59`w5aM&jM~W1I#-}va7|BwPg9Xnh=B_`LpNV2g*sr-KC*~rw zScg5cgtGze^S>Tus0;u9M{qH07isRW?Wb1W+Lp8PG$iP;vC#k9z+*U0*{?eG7J}WO z(v1f3WX*0>ZXjag4Ad|&2_X}c!0C<0BpexBVY`!KYuU|`;US4FF(HXf+ASuN21;8J z1uHfu9<10r4OVO_3RY~61S>WX1uMu20~AD9A&db_h&3!&u_&To#pc*x#irxIip|Rn zR*;(;tRM)HUUiEJ#lXpZH&Aw*umzhtED6Jw2IT|RhYeutNNfNDtnDq?-8yI4o^ZoR znwY=_Z5Y@%oB55vW~%ER#eZCoNpTrR+>xyL!)-`g{X=U2wfi$~T#lPRC+YP(^sxWV zs3ugJI-PZF;qAG@n@C+_@o2Dejn^%ea&r&UqZ^X7Z+KR$Gh)t5(rrjS!jHsE?oELN z<4vlkm-KcTgO@0#=a=-1YnJpT(O7k8ZS6VqA5k$c=}n>Da=onXn(&v?ifE>|BB4 zkGe;_Q&xH%W!~h2&5IUyLEHOV{c^wA-{4>T{MC!^^hWzDy;Wu2`DL5EiZX9;NAq>q z=6MT!V$ZEVamGY%RpLzd6#r!4gc~WJk9rrrcKsi375G5%y2RPEAc^EreC8$U)gXV4 z32(Oq5m#u~A?5x`@%~J0jWv=I8|U4^CgMJJZohv65=rlJwn>7A5_};o(Hh(ybwMtt z*-Ltp6L{YQdA%#K1e=Z3q(GQ5(qI^=4Muv>!1MC488=>Cac_q;#3Xejr37+alUOnq z+m%O8_a`#8(SavO3^qPDdbeLSP(SEz_osQUI1hQR?w#Y^k(hJX`{`ak<$WZv-uubk zgB!4+cwb^};Ua(Wy5_{jLVPTo(7)l{#4>^l@ZtY4abe-r&58H96Pq?B<`KNXov?O8 zqO>q^tK?l&m~Bp6%RK*ZHgQ&A;*dLG!`8(4g;m}^-Sysqed}M`nm8BHZB_IAhY}@) zA8EedJL)E?TW(H#53;6sO$A|J;3#N$ou8qG63so;w$jr9rJq>MWVRS zyCspB<)V(?fl7%CL9LFghrH9-_em1{dY7`%lF44+5B%=;-sq#)aZQw*oG6*-^~10A zcHkpXG66m>5`*~g@lk-#`+OIx_Iwxb83djMuJ;^3xA374c)RYY-RLbJm@aHU^f&#W z*LKI9CUvR#&fIy}>pSYt9lXq+`yFr7QSWWc=M9Mg@5Q|jd3Pn|+~fUl??LYq7~czf z{W~@`ZS?Q+&cX|$Hw<{G=e*4W-i!m@B?I2n177QZH-FBZxs$$@(_PMwvkK4i=Ozxg zkb;L*3Pco6pLi&-FsyX?#OE=iRjYp5oaml-n5eK7f_eJXzV+8#!{qbpnm2mil}Y{# zCi%NVCb?VZxR81wLCxt+zQcQVFP!bMWr!fX39orw1JDIt=YTivpw~O#oev&Q;Qz&i znB@ZRbr-Yp0ib>zB6iz8{|@ih%()FYzedgnxwDa2GBL3PEhc#dSaFyg%sAB>q7Z!i z)J>f2dLP?|eW@R@>BrFYM`-#o*yo+w;WZ9;b3xdefk*oNnFvy`7mp3F+j_l)&!LON zW;g5%-9O|Pd*jeaV#!HR)#z*tKY9|oTz|)#n0`ut2*e(L;4Og?C6iTNc8RLcC@$Qlq|d5$vIQX^!4@+ zIITEl%4T|6y4y2+H$i{_z8!Kt^C;G^z~*3GT6<|I(S{9oFa-hnAwK2Ce()u zn8krrrlY^TJ)>t=PG2?7t{jx~xAzQ?J2>%kGQ!Hf{@%X!{(;>Yo=-XO?z+LP-aZ@) zw~N2i*~-3j=iJF;w}D2!61AN`JTlL_4b2oe1h}sJ4kMO54Y{xoDMR@8OUZjdIxcGyu79 z^_=<6HnK#sjqBbfvzB$X4Ge_Gf)3`rALH!Q86~z}oa}XU_3k8R@vpr_W*HuJ4^A>M zaXVVNI@>USjNzSOnsI{LLe_AeWMUNwj|z>PVZwVmIxv`?Mh;^&r#-U=cn90j8lS>D zm5$VJ|hu*;fr>!$fQWOQ2 z)VB7PHZmrg+0u@!^h_39ca$O#eKHEN+q&K980=}~a>@)4K~C@J6oc#rLopHkJ9!S@ zy^U<0XTIl~?{}b5TW3cnj<}t+LC64J5S3}e>FYK#W))9n<#d1u1&Y83>(Bvq_O!L{ z;@ov+`?Fc6k85bl?o5AsM>|BmwLO&mRyf{Rec4tZ%HgpQJj(J5w3Q&IRo1;4O|tu6UfLT8?FQqFP)(7_H4FgYdhz(ud8J@Ptp4a2K#J>VAwz} zqrf5fA~_OO+1=jV+P9mE$}ACm3PcxUYj5xNPKXI+SR|;Utz|a^5o)MCgXQdWhg`7= zM%6PLsEmQ|0WA2q>XtGbw-59Ww(4TfRMlp7_Cu$lcAFC(+&j=tS*k#20zUTu`QFhY z5QK26nH_4r7*i;GLc_!)2tw+Oaox3JQK!J zn+$ffz+iB|%9MyivTkduj+_=urff*(DjX0$sB121Dm^m^-L@Cive4X)4XZg5swCSw z`yDQojEc8m3trbMPhddDx5MhfqV!@lwL-vg7z%qS!iP5%Lh@M>FtMd!!qs8U@dM3x42wjo$;IotUrxcOfIbfQu_~8sgsE6j#@Hvs%tDH z6eg4%B-TDY;xMk?nZYg$Gy)Wfl_#0V&TcMs@S&q?Fl)6PM7O;k)<$GYToowro0754L3-7~mEo zDj_4oWhAr?_Jn?rm1Jt9HoP|o!X1*Oy3gtDG76XaR~G<0AS|UC&Z9^wRgCO$=_25| z=FsV#v~oi2LNt0@#JFV({j>g#)_ElhFW^!h5YeZ$Httbq9>r79&ar~JyC8Vk&;(J% zI~}sR`r8Kv`@!Crp~_@fLVe%asv6XIZQG%%AhLArvb(#t^mZ8)l5Oqp>>G#+F&zNf z7pwSobaQ1wG*l=CaRGWqXMfB?iOYj^YDFHi&cF`pmsTenq*+h#CPNfd*l)-Vj;39t zr?Ve}r6|KOpe3ZKHO{;`Lzq&rg-%PGaD^LZ^jXxB_lw_2CsoV=))!X+s=}=g&4-8- zbaht?y5NjbqhP+UdX!~iV2s_CnTnI4gE9JOH^$P^wX{D!HPh>vCZqt19)C_jlcBIuN01y1R&Yr%(0R%~SVh#(m3yyr3 zBYH_@nUT#__rrcT<3D@wUvV#q@@`$c&JPG zgH9KS5P4xF22U>w9~|O{l@A{X@)mU^wkTA!8t1_viH9gohV^*N7PiU+S)1LOg^JlC zGhL^uf;J2T=~oMc+k{&XghFz#I(p#TsY`85G3A6o)d}@Dol?#sL}x1>$;IS|hM<^o zVi2d=xJ5MBFzt%TYVYpF%yxBlBW%qT6&rV1?`bzQ6T=8={PDui5XSOUgP)5+mZM`Z<$F>p1^-_&WZM+2w(Qq3}roA80 zc<2EMsj*W4h#_o@@$O}WmiVlralBN9M&NuQhLjT*qi!{P6+=j;wF|*$cbE0d7&DKEH`}m8)dg4M zEuqIQasRP{(AymbiQ-;c2au}-SfQ1(aBJBcyqX+WF>>G{7Yiy1zEL#k+Ynedv;>Ga z`&#rdWg{odR7Y@kw=4|EUh6h&iHMwLvW&5)@e#3Oxq|n)V<8}h-A*^G74eJ?q_2g+ zC92DUr|lP$AQ}#9rma19)x?aF;*X+E&^1Wgla*L=7h_GCNGd2Ol;GH5L`Ix?ax`#!1A8)Uo{SG(qb6I_viyWjL8 zdthy__}T&Fy9X{4_YX`rCK|x}iv>l+wOgh$uK ziitH?_1~9vQx?9ipWnsp`wfc#R#vSd2PtJGN_t73vJ^$+Tr9)_3Zg z8p@ZaGZibUsw?Z$HO6x{dnC{tq`t2*u0y)Fw6&PvF9UWUD2TKAScV*vM_wLNJE()K z^25a~3p|%yl#|Gd!|q9pCvkUC>4>zCPM4@uT{c5vX2=#jaR&ijH^P&Q?AT^@Vz)pP zzc3iTF4zu-LQECBKJ03VsBzM`@R^Uj&Mv4a`uS!V$d5uWSCLaEkr1|!Ma@I_`XQ0d z4*T-~vjJe`Q+J;c$OvC${dPb+MSWY}Pj?M9FxxWNx*e*g1A?el4~`B3lAb}cy{5y4 zDc~gJxUPf4?253TYZpv_PmI7m=6AOAFO{yc8uiDl4u3r%3pt9%%zhP^H*~8^e{Z9s zvlcNM3;rdJfL!SU!B&^5@u5mP+%JK6al00qyGFB6OED}|zeZLpwRw+h?c;fkF4?EI zju^M1k0-*ikAuC7_8pN`i}^9KcC{Bf*EF06=Ea!WO(s!v3~SZI4GeV27D`M$tlE*4 zY_x~fiS*0WFH?7a=xQ@@&VXIY4e9D-BD-SRsL0|iOw+ zRi_>66qtA;JUU^70xrX~Q%wh4ySlsj`=DG!7@(@*im9EVsB&LMMHUUs4{79(#%=|1 zIdWfCXI%9wcUp{@=fc3M!zOAcghKXXxzyS+$Wf*lM@2L-whv@9sv|i+7_>O$^YrT- z`n5p6&ZmeVnn6q|Vya@>T_QR70v@riXg)meiYq0W%)R5626gL}vlUPv@3 z5^Z9AIN3U}X2Cg`6>_d6dqL4zkQwj*Jpu&G+@05Xf=T?V#3Za?iI(2%AecU5I~7#W6GVoGjabow&jzvsUgmxC~RX>?A9$b7B^;dX*D|q z>?d|iCTa6>X^Y=C1rMsvGv29A5~yh z7#JW^{fpAd)&Gn}Q}U7HCsOmmU1TH*Iq4eg?s0HJ3rP|ex@U_VEX5T=)=@i>vmt@e z<$A$6YKz<8+#^CT5bAw~W8$lGm0|OXDn7fj#h$Fe%-T&pJ(+8eC{-1ZaY0qDLVz|8zX_Xc3OG_CN#<>oCjf6dUWRC4q*2UhYBhwMhh7kG#D@z zd#1u|5}g5>XG<|B)@;*oUPT8D$`&m()E))|aDr=U>sOaoJ2;xqy)eaNx{9dEl4xu? znvg@^5Z zxL10pgpF*Tfx}wh@Lx86*-3x^pWWq54?}Z|Un)4ICZ5g|;4+w3FMA z4AOQ$gA1=D$ffX^X9>7_E1Wr&pNBKbV>^19pDXQ@pD17g|BUx(90Q3S<;f1NI>>{S zEbgRAh$92a*?JSTlpBK&5nAgD=8CfH#)qzwM!OU-Zlm*r$^>hoyq(MrjmC|j>lPh? z?`SVYA_u6f+_~jb3JwAkdtRX@N(jVwHnD>Hy`sQFk4|?$^>;; zKa9w7cLL^y2j|#^MV!Gix}DgQav0-alR-iq3NG|wmU^d8PPVvgXp*EhrrODFhb%+I zK}I>J*@k9GY8b}M6Z}bX=iNRpMR~Rc%lq`KlYkjH( zFi#{CM~NJ{I$_$Qo+U*6N}oa+8-zN@1XvVvqcO#ukYJS$EI_`(MwS^Oh_W+-6L#1d z>6YsfvM7%>wRh9;#m+p=N5l~!rd_)0r$=`hv4GuiN<^DSPE%~y@kcf|SZG`t=ZG(& z=FK4#MTC{qv8EjpLj?wKmdIj~t(+Y~q3nd9l1zm4_Hd%2L>ot1CL-P;CY}8WpLotA z5~EExeHl4~5G5-FceiZkkuj!{fw*#ox(iLSSX|qn)a<69C0=n`{zF1^u3#R>!myK} z3^#IwsX#3wUuvw`OdenovJ?#$ip)!V;2f;kms3ZuqN%>RwyrU=y1c47Q(sZn=-8ZP zjdhvwii+B%nnpY~C4Lz!1$8ZPS^?+FIbNY0lKAE34|$ z6^#vHeMWDMRjbosMosO~+RElIS>DuGTc2K*uE(pLY#$&Z4GPmW6}6RBHOm>ZY!hcN ztg*U$JrOrlZHN#zG*qW+mRHrJGnMIOiGZHvC4VMS(DP3^jx6}1hZ z6!E`2_`wAsa>IJqj;gI$n^^`Xr7NY|bY@+BRbx7nuCK3+NafH_v$CqOs3D3emG!MR`TKzA>}3yi%fGZa~muw3HK7ZA~r(%W77a zH&(33RF*fE8v@FgmscqqnrbR! zTw(Bl1A1tmke-^_y87DXvIlBOM8^7N6%b5nW_4|4+QHo*ozkXPuD`&!wAqI+gviJ- zZnRxmon9THCxH#Cs_HUzIGnI`dU<6-ZN;i| zBUBts0{um71lu8VC|J=eBm;VZGuTuki><2i_#N%U;iNjDAtqUD!&oYk(zrg8Q^2*V zQf#I;BSPqG?Ut<+OIsbpLq<*`*Vn1%>k?ELYDw(6bX9$2X8!yOGOVPXtM%Mt9P}i{5;1B{a%i#)UPuBO5!zPlG&Q#SjLSnGmb5)Emtg5;?y&N%>)Bgq|nzS9FHmj~IuLFnHVr^D(orQy?wy&$NT1#H7N;ivM z)h5F1x^#V{a71pJ&~Ht7%wk1L589x9c^aL{a z4hw8;HJ;Ih=YT-62aXvxCoN(MNVwCBO@#kNHOY2V*mxbzsVd6rE5+`r4=clw3dXXK zsgT@tRWWr@TbHg;<(Z?t412|l#*BD%Ej)-^4}q-U+zpvA@duVRErV!;G{QlHpxWV5 z+Grg!b)m>*R#%=MmV=4#bs#O7nsg(?cvZM?!z#-lQ!BV;sU{>B=B%!|mWw=cl4LB_ zFJxkQ1Am@~VNj)oK2j)A;&RZ3hnJ}v_%vA9(T*HW>)#CH88|@|Bq*$g#d8!P#nku2 zMk}B{UNG*o_^Opv4U~uKYIVQDhr28rDbkow87-dzfU|)m490h2gMj?!PIttqh80bX zm2kd?icQsWY$b}@E#`*4yzwI_EvxF`8Low9343jTcUK?kCrsWkt6l*c zu2wI6xKj5<@!){$p~tKkw)}V=D?fyWaA3p0cG_6oK<_5kQzmE2t6|P-AmD2m3{hw4 zQsjDFfu9)T`5y+X2sCh}YOzs3msO>!DM+J zcevPKnXpI2-6n*~X7sXvCGraCrx~e1>{4AGSygILdJr}$vXsQbS2|x6Yt4Yr*KYof z0d9c&CJIYhb|&bx+s5b{IL)(Rp{JPRxWwzxh1X& zV@Uddls|ec40PLYG;e93^BjWDg(ibiV7wye;apE2X0g5^(v4gc5i_s} z5wiy@6M;gQa$*YrIW*ywwh`$HJpks3U4}jxW|g@YBzv9QuoxmvG>SvUIA7yPaNZ1h z{(_-3E{r>?vXRHBi3JJkdRRy5(s^NlVBJ9;t=)kZt#t1oE7lh;)=1XKJ(G3IyPauZn65+)yJIBa%kI1gc zuH7|F+(grTFuOO^4f`p3+LqlEA)j z8`IU$N5;>}G&I*VmapeR*oHfdLmcIG2zFE`p)Jf-EqGD^HI5z6|8-pAuHZ*I_zjZ@ z3>YHhY)|RWZW)>lX7S7}j-&15a{nXL26&`_2)XGGy*u9ADSw;b4&Vtqn z012|e$Bvc7F^$ZqjGbAk#D0aTDBNpmTvjqX)`Q0>D=cilMQQA-dXwaOHY47o{P-EC zSbea`Jnk~iJ~<>CEK93b4c(?U`?WCX^*r`!r75>wrOtsl0f>1G#1|S5jcysh^UO|< z?Zxm9-Iu6Xfv_Oj8kcF4Ebjh>B4W8DyBLfbTl(ZzTK1|O;R7QKKJlws(i+5&MaYl{ zei%~v3Ax-9ce*-VzBVn>8ejC*XUA{*t%HuI3}gq-5-AFFsMN`1Lz8xdj-yP3J~GDN z5pCIxQ`wMM@!E1^ia}h%`8HgK?5?eOoU?k^(phr?!+3z71XiU=#!jCej36=6@g zc(Hd7mWT!x;}?I(d#-)jIld8%Q(hzG=z$XucPBZgbxpELvEhs3a_dV|M#J7f7u@Xd zgaft;DpFLp7?(=8q~_TW{T)%%pKN1dEoDSuYrcw=kxnyF_~B`ndcLGcw?@M5%Pa9@ zGY)(jD$pK-Dvh#8>!vS-HpjH1Nf6J-A(6cc*=Y&AR{r7-+9HZ| zB{(5l`LsiQ_zTXQ z-`x%MtyL)lC&8k{hD z90Q3k1Lr1MPJwXM9B)KNrzSkDD6e7trSW}Q-AWas6>Z>$108PIxv`$r|CjUK`~VSQu}Im%n4tWpP!TI_S=V z>r9r?Wm6W}G3eTC8nl>i_GjTMqPzkN?~n3^@oTdw+iJeiods=k*J-feep5?HHHq-c zmR@UefXjl{nJmv4TyoeZt~Z&-#&*z@-eJBuN(+y6H4}L$3-hf@{5ux+Ew1~t3SK$U zWWm3OS!*q5F&&$(*G+@B%=ZYV?*-?uP09OWP%^^FBG;yphPFKBCTFZaY}$rj1*QV7 zyp=x=!or_6d7iWLF~=qzh*h-k8FIfN?lok^p?|iAWu_rmV8Oe>tc(TkFd&{G=!*I(9#28vEW;# zmWsMf{XJ@HLE9(VMtvzXyvIh{qvaH|s0D2w?6L8%O-1OBD#VV$ZS6USZokSV zT*DpIv!KN;_5OGA>n(me30U$Lw7ro0`jC9vk?Yi3(Dr!@bupY_>urx#jIib`81Hd? z*kgo#*h;+0%$^l1*SU1)n4dLOBHV|LTs2HDrwk`6%r_UOg7kLF1o*m^4 z^O-EJUxq|9S(m-!X;5&frS@Ec|{h!F3L+;`1&ZX z$ig>7c?A}JSCltw=$5t%OdSl$g0?x-qXjLd6OZ%a5LcrGEqTxZ7L4N>F2Z#NM^A`r zm=Zl`iXJiFlmH9Y$SZHecPzH>`Y6x0a9@;HY~lVWZy395pWg_{YO)|+%PD`56bs_5 zkMgJNvZ+g=iWan8g8SMc`uv*d$##P(7PQ?Qx5o&JLjN?lypV!A3$6^aY@8A{9&3tH zVU;=yro*gZ7IeBPst>Ewg%}O+sv+m+Av5bNxFl>f%oOZ5MF-3`r`^KWMtKDmz9Gsh zvhcg2yp)9xMtL(W{Be^9ujComChm?^wD7-2c_|BjI?5}u@V!x9frTH4@_Y-|8Of85 zhw{yG;3K9XM8bminJkq!n|dUwXhGY-u~+i&9vY9;L*rrF!xzII8Z8*_VfgwU+C#!A zK5V7I=4L@YdB|^>ZM_`O=SkO7?0t@b`7aA+VNg_ zASHtt#;^|!ulx4#>RL+I7|OW-E!-I86Y?$l?cs{Bheiv=dlu7plx<+&f12ThYcGoXla3qV!=4B z;XJ&};P_sMYnZM2;IJyg*!+g6;^Dm({Nrk}@R?Cw%EHA_o^Rnl;BA(sZAzi&ldquR z--q#@XZ~S$j~eiIVOHZ`4cKfjp_T=22(ub*GobAcwG`>_PZNyEa4c-RYvvVLIL|ai zUXg{zMtLa8}pT?3s3EfvRD z_LdCWv+Fck+}{f6YP8_D!>mmfd^XIgv!Lx3xGegi-=~DF)>zO^AEeBJmXZSORIE9) z2_MCC@b-;Kg@YHI! zodqM@^`{3l z)mg&&Lqzo!w6u6mzZ()3F{j>kXgLB8&Vv5}b3Pq**l0m3|4Aq7T z8;jF|_nItS*f#b3sGdbz;HOJtYpcEclf$Ypn%u zG{KtoU{f}f13C--I*jU?EI1`}j@Mf7!Z54Jg8QuB%!xc~Q~w=STx&t=4l5}(b!XBJ zW32_x%+oBbXj8v4xuDsClZ>aK6>aKKlZ%QLoNuhQRS?O`UE;0~Ia! zn8{L%Hf3c96+_9ffSLWuPzo9?cx#x|U_mQJMBjMWrXuviv;Z6h`I{2rT4TYR!mLde zvHg#txpqngcrBW-})UQH;++;y3f?Cn0-VUX2lLhla30h-8 zD}~zDrfS2An=ELhP%GM$ABx&03tB1EiZ*2h5sa{)l|rp(Q#GMXZnEIPnDDMSY*UX% z6)pJvFl&tktpsZ)HnlI5=S>#8DJJ-9@Q!$$dn@fA+k%OhJg+%yQ&AYP$%1xGXxBDn zmjy6d(5?xsXj5at6|%{KcBN=Vn<|egTF@>Yt!Ps(MHMY*#a}Dhb!ER-7%{gpjx{*b zNQM=QgtN%nSli0MJACEOE=D*#7K|`8441WGEAZ z6j?*14p~-gtW+Rt=p-Y{&XQ#}vep2}q_q*yQ-&D!Ck`4^4H@Bt1} z^_Z;T0}R!-m0Q#rKESoZ2RKam+L^R^52tWPuKL-K36spBgOtpn1CY$2b0nEVEt6yp zohQk(1Fw+yUYy~pm%=>@Z`x5ZF zs%rn!q=krurY%Ek1ul~Wkdl_cf((IDXo1o+H;F0Sp*P8G6UcDANlMC)6a~Zq4GL1B zlESNgWf00J3TVZLR6q$bSOK9b`tMVOGRRky;lIw=zu(^X?tM-v5UPCd<@?&T_PT4Y zy{5hPKJ$=m?g;Dyh>33Rwj|rG zkloM%Bqgnt1;$Of#6wuv%=}N#SlTHa?crxTvcpQOo2hYEwo@tJg6y63o+C-rOrY*E zdumAD{1aJaa^7{^ZxH5f^wvNxyVOnW{RJd3#6n^;uGdMKAbLAUC0;kYY5c_r#k49| zK+Je?y4s8v=Xgx0kTvB^D`n*t046M_qmY(CI|>R*rxqk6HKdY~^D@g=Gg#;Sp4?T?Wj>8=drfC?gT3|j+2~4UvrnThX@^gvFZGlX8mH_uT}&H@ zG7bE$wxdJpNqTEv;6ZYMJ5Uw%4Ry zxx>Xd9P>D&s&zTTr8pd|l=5)}^rfH@?{Fv6n;c16aU*FjUYBQ$7S{3or4Xu)R($HeW(}q?-JY#6(#9IxmjQHUb z3KX~pER%yzqGKUTmNueIAo=G2>WA2>!~nublw&H!s6of+LF zP7lfvLZ*pp(>&V5UQ&5q>W@;3%yKg)QN}^?lxU$^wIOOb#gb}G(n;j5z8qpCc(g#*!oPU*alHwaINg;{INYh4HoOl`e3;IHFiVnLCW((KjKxwv+ZpYNy3Bw9$8PGL= ze#K<`2X%y!YkTKg7_>$ixHn~XqCiIGPEk<^9*e|@k4e| zSsL6E%EqA}`nxjXhZ$NG@#%(EN&E;yixEH4&?<-@ZD{4hs|~G;_{6;n6trg)J$f}P zlU*6n10hQiis&&Qsm&H!93Z4ZErHlmC#r!ZrsE)kZV?g%eNK-UKYCZy;bB1Gs@YAE zE(8?P4`PZmc@G7JGy~`(hNONo|KACv9?&+&iPBKnwXN%?S~=(t5ZU;)QHYJp{ zRe;j*Pe7BCHP^*JziUX0+ez9N38M2s8Y5>Yx7n+V2JEQAnP7y+@2-cK3G`Y+x)tcK zA)Oaf9i9Ueb&0+J5=LdSOs7YJD3b`BOr(>*Dfj7?Uap22B5jqCLi84pAcf5z8!4|} z1}UU5RnbNLYW{!J$_Y96VGx;&LZUmFUP3Y=6!rrM+82}2KQTwVAmP^QgkvxzRoC~k z!GZkV#2L7Nk&Qe8>oXGP+!bfON;iPwf$@`R=#}V^ku-v2A%0M5~nW%MmFd$pOHBI6)>_vhxv@e z>92s14LZzcBwpaWwf(m9^6&!J3csVx(||PljjsJkqR;3I>@PbW)#pq=fA35DGF_yS zEK=K|NR@c~x`aHTi%pW~Xq|lhWvn4}C>VZMTiH9I(c4GdcalM!us2RG92<8D~*0hdww2`_TWN36b zBpFS!^ysJ>A1Bu%n8wFR4%exDoFsbI7R1!d<`h-n$|YMCE?%65LZZc-a6;ld+oYY4 z;wr`2CS3L;6Ouihgk-ylDKJ~RDo#C(tKw@g@^7^U@dS+jqIQCNt&u{P8sS{rSLnq( zPL%6?sdrxg&}1y@X2p+l@aMG>HAIbP;y;5v4*|-V9-?N^j&sreUQ9VeHgC3PCPV2# zt$d2gQ&ZpTj-Dwx%P5tiQbvOmH7JOnt-)ePgQTlL@FJPwGLQvR z($zi1YCum*j2UiYPKs%{`MJz85;B*K(Rwbk(#VMPgRv&X)M1eP+{3<(E2)sSV8(Ml z{<02Xg6PL~QYq*!Qm$(fUxmBr{;+Eo|Af@*AxdJo1`Tt z+kswbNC#pN4i+{WTuG@$N79z4{Q!DR*jX7QTmQXL*J^ZqOE7(&H6%AN63@Z8FY265 z?2nl}2Qci+;B8QWyGQXiO%KUnPE6qn$zWHju&lFVR|ey&wG-lRAP97ZOh!7vXb?XL zrQk?Y5{Q}!6Q^JPNBgCQ=(g~Sh$lK;yUN{Wy&CN*qiBkO8%gi&sufK!mIc$;cIaVn z*XXhH6=CaDw=ftm$d!Y0R4IagDo!`)Hvj{@afZ%`(={MYl!;dAo!dX;Iw9^lAxb!DxFASE6Ov(*IShBks z=ptb9WlPeS`PmI`1Yuy~R+Ale_{cJ-S?ZPpHNBiLya4wbdlU3I9V}^H4~KE~g{=K$RY-x!a*-2M+(v|H@ zmSvE+T+2=q-4lA3dINn!w)B8#%MXaQ8+c-s;-p#=-A9kmJut+EF)3~jDqZa%g=7!7 z4yHV#O{yWfgAPR<1#PR>l{#CH2X6NAiz2%*Tw#TBwAD{)4ZCe-wCj))SAA0HA(n9v z?hM1urTDZruo1j;Pu=yOKxgcwN%cVQFr?>!@_b9!sgzfsSFP47xjTe^NspIw$4jOm z{6fI6?aQ+eUT^@+Ei82lnOQTS%6VF)1YJPYWU`+K?Tl9vpMWa+0Ln}vI!%)jL=V@b z8luLX37R#exe`RL11aoe&u-8;#A2g+in=pq;slPj8NYNx_KVstNunOkZ1^gCGcr^xE3n*8u9tZjtO`1oPeits9yi)tKo-SUmN%M&QMU(1X$2iO1>lk^8_Hcsp z=w%cKnGr;p0Ht1c{}9!pF2eU~jBSFGaCJy9IM3+dBxz=tF|b&$-a24=XFJ6wvx zZ6^O2ZZlk*UNFPO?}fe;6t)T28Gba9^r5wpv?VHi8p{hyxa7He*dBioDw#U$-mhaX z2I4qZQi?`VQb_frO}r-N&)DZ;Ds;R=<JY9Rz>`DL#rg7Ftix)l%Z7+ z=W9?!UODkr!&gT9u~IWG@y89VlK2yb79;*!L#rVEJ3}ic&NtWj{v-Z%+=TDj3m0in z4UCglDiu+>L6Vke23D!7@N7|UVI<0zB`QX?sE9CX1%ObGKD1@mMD**L)IhWnmaE$( z*{TLr`V!?^4&`zh(F=(MkvHG#({ni5g+$d(HX~9dVJ8r}Sq{}Hlim|j83a&Z*o?m$k{$(= zZhMp{{8T_8ts1RJ!+>Fu`10rdwY>?xB9^+zn)Q1~puJ&L{dMSKB*k4xaq2=zA-T$@ zcRBxMe4-4+82{$sy~^k{W|?pv0q-#qYjM9(X$4fGKvC&D2wJfjm8go56n7=XX%r=esPqg}`G--d7b;PpsPuPC z?DEa1L{*HWxGO2nIYmh!DvibX%yk)`=}v({+7+tM?P1AERg9##D=AJ@C@Dmx<*=U% ziBtljGziJshRkIB2~&%S%sMXv5~Va%@|oTg7NXfO#@h%eOApakKvJ^UD#3FY!bo&y zkQ5_ZQw<~0h9X8(0u5YM>TFd;dGlR8>TErPi%J}>m8c_1C4@^44aC)8o;%z;%KogD z?Hmj6`KTta_!|M@ErwQ3oR0ztUj^|t!xtl-Gqg(LKgSa;as%S(ZP<7KL=jj?e669y zh(Bm(6~rGlv~uFZhE_&=0`8&+2DV*!4m76z(lf)_O_d_?~pB9QFSLEYpuSeUfDrT z*MMmEsB4+!4*!IbZE4s^CWfd$+kHc|6{@Z60_0f} zU@)10^977TD<_^cd=3Ws%SQK0 zkZEKmUD-|nI1e({XxWKh1Eoo#H%*}aLb?ybag4A%rZ-lFdK93a+Qd&Wv~uEe3=OGZ zQl$pJ)fMm%Uus8!xDYK2}?h{o<#mE+Q7e=BN;1s`NWb1ZN zg^}pmLp>1}W#Ip| zXq^YI-w7y37%lMjSG3pTL>Z7$Z*gvjp?Fb;B0d%AXF?HY2wp)bLJnaL$Jq4!$VGzs zDv3-ZYNx1daSFYk+4MCSrzFy3&MHM^ixcaE%&{Bbv9cZX#AeiJvWPzy6XRNa!$bqo z8$psACOU?mg7$Cf*&^Q_Lw&dnFl3@%y|u%JJX7vu)^YZKbc6X8{Fv6kOfYhP(UD8A zaL08mPaKNaoTy`zxDqInt;Cz*6u!Sn4&UiC@);MTOjdYfD#Cz3-G|G zEasc~55Zc&DkOZYw!hNLNCQ#cB^Gq$L>{Y4lE`C77a`gK=NYI^thQmVOJN8{el4MC z%2BkAi=d*?7P?$fKgbG0N6=;^k(HY1uBe=jBeBAK2GPAxKNg(WerGkqCjrW}8=_}w zQi3k{q@Lml+Q48+Hs6f6KB{MP!Y&`LBjt85c{X>5jhRNRsD722rS?#urk8WVuO2Le zx>s^E5_f-{z)7M^cPUmqLkGinBt(thu*g&?Cg9PVS5fx;yrhW4fFb!$bOr2 ze%6kG#-^8()%$>Dfi^DrI8Kr9*%LWQN0hlOC9-$uZaBeMoOCTt(&7WO#ZEn>gGWA5 zsjsR?OjJ%sMP=Z&R{C;*P@{7KZ|$U}4?0c#nLEVB4Is*9z|PJze!5t*)P4)7>E&b@ zr_M^9WeK8X;|pphQ;%_z8FL$MRxZ&4CWy`eDX55bn0GyewQ~UFk$D+#PCzDdpB45d zlvz;p-;4KL!5=KzVW4t3XXJCmlKM&eG|aAi5r;pr|rO8BLiF6Cu4x511hOUmyit8OGxa zD>pZL%+`SOpD5?MB2P=aBL4?uG^znVg(E#K!#~iYU9bv)?MsQhNtb z(`%mHi?4Dk*Y+kqkJ@~tsnJ9^HKay&4V?qO7$+oMCnQ}bBeB?3 zX52?}f-9;WUPZNyQ`CR&grF;n_uL~nA?TSYrq0bBV&hB@Lw47@sEAQ?qTGNMdM;j&#IBwi_fUf+L^u+0*# zS8(h!ad%Y{g|shF-bElJyI#(Po=qkj=MJ&)T@W|ZZ>eUfy#%P~m)m0@;dKdjn+kl#0PKMaG>d1vH-ly|vOr@ZfxpSi7a4XwOyw5o0 z?HME>hY|5aIgIikTLq!FD<{6j(3~3w zDeErq$Q`Xj*-hP*8l?oeWz`{C*s*TN?#N&HJ||y$;=ePRmJ?rZXl2CDiz%tn7pGUu zD3t%Cv54qXASsL3`mji&uL*wu$HpYS|ZkkSfdqb-tKF-i8iH|q581adQRzZ9xLn|j9Gqf_| z!&Lk6sZ|G|57uZ|q4@1JQANkyKA~XN;%<#@2*NGByzXG)SYp#oq2iY*lG$ zUZ`x{rm6n7FW5@&r-c%2IY5!r=xqJ?)0&a!YX=rGvbF6L%}8{2kd#EW?l+7?kAhnj zBU|;LN=YF~|0_l{p!uHxcqB$u>WFUGo1{2V`q!6LH^kNn`)fv`&w!*D*`hb(7DA%0 z!&i!tt#jcnVI)eQDMq&TIY4$eQS-msua^Bd?PR-2l)m<@s@0z703rKQS9~MIvzMr~#!>5`m{O6j8aemW-EW%P+h_VPv)h1e)r}a8dS%jr8QC8sptH-7!2u5$O-A9q- z;9-6L5L^-*D9Zpt>t>HiW6mJQbQ}v%>Pfs6#gurJeWX~9i^nLb4uC?d#HYM0Oj51vC9={ zh_rk4ZXyEkOFuSo*n;2^SY7uH{1F0)FfiHJ*^_fpQ@ilKRd3zX*!H z1Sk*6QmH|$)cn`5OW9HHOXgFl6ZH;ceh1L=4Cz`+gRqAy=oe<*$mOA_5PmYyF6QIA zW+yjUijf90OBIzZCaR<&QD&)PWQ&Pfkh9!TDMoGun7fL~7SmU{6JJ8wR7GWr zas7`A@dSjnUx&Ey0-#qI5Ivwa-sSL}I z2H(@^P(#!#Q7JA_CAwJD5H+h-imTSin#(CESt>u``;_AKfgYiyBbr7moge8m;?9LT zaM@1~<;y2!SG1v@o=oZ7N)uh7b4&O*MbF2!BIwNIU}glwX-E&cG3>PitG9BVaHlpR zdBTaqS)+u~7c~1Lojr%)l-i&4skL-HvVqwlCwPg{yOLu}lPC4=GkpZk+VGT(aM4%H z8zKD`S@V)EE@_^78KaK~oGtOo$Rnnjdwacm4IL{rOZ_20O)uxFQ5{&W z)xA>Zz%9lHDf-|6?SqtSaEjLbLmxpo)s#{AuovYf%Z9BmOBnf&^eo}x%M-*Z``9`Y zUJbd)V_*CXWjK-$vH`OlMysQ6{A99VZU)?CU0d zsNcw$TC2~qHvSRW$vGJI;OT`>;zTH+VoE*6LcXGM)IIbma{q9T1G7XZUX}!I>J^pq zh8iiVJ-L|OY0qq#7D7&cB;E+YyF*QV~vT#w~zv>cJLv(WV zB!42*dsLR1jgQJ-bvlNP zHv_%Tkm#YQI;@S1Ts4wR4vTmRpaT1ml9@3Y1hdYNwH5lhDK&2>$EIwS}iLx7u z5}vvgpP-;ROnfDm$Fxi&MdeutCcdIF{i(g8+Tr~n^nO+QD@`@8)&5EorRMVPuTm#ug?-XTIplGnh z@l?u{?QBtPm%sPW+P=51V2GD_`C<|-Y6ORwod3`0Iu<_y(~jqF!yfB;5YFH*BAzIR zQ8utO8G{O=J)~mfBKEH59BoUFfaJU$p@Az3Yl>VM%fl$vfUv{qy&Oq#S5lmAp(L@$ zR_V(S#5+M`{IfCbIR(RN87<&NC6P?D_`FTXsc~C{wNQZqB4ybfS(hG%!v2j!#J#DC zJGemz_$Wgwi<0#eWXYvWjiQ@>$-Um$Fi?pNx?>&D7c{9}qXn|uTL>uYFS_GAjTUsA z7pa6E#;et6LC4xH=-3$6v2hDJ&JXK2-|6@V*hVMG!4gp|z|;QvJGj+N9CpykVcU*? zegY7`%FxP*FE=zN0j7^q(mMh3fQtcF1MXd7YoXfrk5+K%7zGal{4C(9fQ^8*ln>hf z#BG$sQvn+RPX}xV><7FM@G3xCpD4cJ2!6h|bJE9@q}>2xfR%us1GLBcp#2X)e7*q~ zgP&_6{QUs4&^k@I&Rc%96E!F=W~W+wk9h@ZUzue%g0_gnhH&-?IT3C;Hd+->vZ9&m!{2ju+!WyVX)8P9?1pg-RMa?6|)z*XaXb^TXZq&;j*Uk(2#hzDoe5aNw%ISb9z$QSx z#CuEivE@g}{TAd`BX2kk{YZOkc~7F>6wD9Sk!cb6Z`Uo`-|RsER z>Ir|B0dA>2dDz_x*a!GufZqqa9*}l1PW1D3c<{&8pMH%)Px2ie!GGLDC7~7Y06f({ z1@K_NWq|g0?Dtpn|2yEzfE&;+h9~Za@yuq$Zb}lr$yK+zEm^higq#mcew5ttcu0nJ zuYn!ZlV1n7wdNP=o6tWC$d^pV@XX@^Kz@VVgZ+FWWjMkgQF8fV^`&@fb~PZMDEUFm z)>O6G?-$VXmw>+l+yFV$`(nh6dh{_^zQlSxHsD)egrq#YMi4*K!SXtqB5O6VZ^ z55pen!Sf8c2z!>H-x@%E1CMgpkAAVoUyFVl0sAmM<*bJt%qErJoz&U*?T1 zFG@})&Tn)B@(t9?!yNYc%##@WL%-zUAA3B$Fg;5Cc*xxukS{)ezvD%Xa~cMl*>7i@ubd3X^N2jYp&uII2iBdX@B{r~%je5WqvXGVji0;~q)`b(dsJyCM_zAn}c`i*spb(iyw^W2tizyIq; zs7pTqYCO)v?gTgq@Gh*o8vyw>CcX;E)|c;gN~3=h;6lJN0J{LWu5%o| z*NEfT^7*2syV3uCzy|@TC)Y{pIT&&NgD+l++OKgPr(U)`eA&_r%)8lurvuvjQG6{U z#J?PNeh-lEZ~9S${qL3k3o&KUmjN#ayaMnBz}0{c0p9&7FZlZj;Lic=*Z3$d^Z(W! zuVxQ5_5k1)0KW}*6(FB^&h4xCR{;)AQSG&W#*+6Y_g@&t+f()9bG4f)ReQmH3T`++ z!KI&8(EdM4&gqc50FVz{(vJ18rxAA0E?a(-obN;K4S;-5?=I+1JE->>=)dVeH9~oW z|DxnRiE-8e{tb|Jlw;f&4C6^IY*;JEg9d^9UcKA)C5 z4f^vDtM@w|&(}Q!{f7bh^a%A{5B-M^QW}?4*_x|%l$^9ByVTWx6AI!K2dVUp<&kRsb4dl@ed|bko7bWLW$bAx! zckR;;t?-8jKhQ6%BlL?sUX)xuSFjX%uLfKOKQOMgJl=T!nSInRp9MSy@KiwF+0J=O zy?J*p?>V*QZ?RmA!@OW!ux}-Qzw&v%x!s?1-sApW$LDR~Z$SSy0e8T9$2jPDfOss3 z$WPvpU5ozpfX#rdfE|F$Q^uWg8F$-W-fpw*h`ZuO?LEa{Y<3ijmH zFN?GJ?zXPZqDESN%V*m&eg|N=_8xCaTW6d6-;?c={})O_e(P$<^klp#+1B*Je5NCt zZf%jiY^fgUOg^7kqIwWNqgmMeuKqY8CD19;(bg<_bcuBNZ%Qzv65rI_?M-R!>gdRJ z%8xDCrrt#&Dbu+qD|FRt>s;tdQ9m^`<+F>~YH#bz5*IfSZSRu76h9={ad|&&{}5tZ z`B#F@JO@vR(x^p`)|f)32^b^)*#E9kicT0SRc-bwQ%#R;e@S`$op-v}e;s}xe9hu# ze~`WDg7~MG*?-tqM*ax-_=bi=d zo@Vw`ko`!#!0NyJQuPZV(ueFiZ%OzH`qTfb(4Vjc{v$vA$M!d^{$sCDzYrd2C7kWQ z6;}UQ%T#~D3m6zh*6~BryIv4KM%v9QV(Ozl~_ z<>+6&h5a9}`p3{ehW=};0LFyB@b7VH_%7o3>#vIiKd-+o03NRiGK{pJdGvc>E7X7Z z2GxJ~2GxI^0{VaUC;X%QQrLghjj@1t)s3plI{(LlKlUU1oBUSTf9XxJfP3jps?%Bp z^#3u9Ddc4VzAW0m;O1EH!>pSF;4NTctEQ)ZMMJ>r^3NZ?%8&w#{q0lOG>7mV^tZZu zEf{~$`hopO-a!a9&HwE+^gsD+aw=%^PKxM%%uR~(s&Sj|Um4N=se4ubrz{63s*&kG z%i_~)|K0wS;#_`$;q@{0Cp<$|s5XURY2J=br4dWVg_X*WeZ#b2}v{_OD!esa)K z(T@9|!XHazwdMY%m|p5}-%?B;t@k6v^f7v$QB2>)* zDFWk7f9!z}^*<#+7*^JDPOLOyVmUx44PKhFq#g7{|;`pZ-c{z}C@?olbjhkFPe zmsJbN-oZj2FL}5W<8t41RD_(GJ-!J@Q?M@K%aY|&!rLkHwirkoMA8^wvQBSa0c4rFRXK_y*`}rYZW#3V2rqbTkUUPb27$K~DJs z#k>Rhyb1bXRuQT}pDYvKuN&3V6~W(s_<#Egy6aefUQz8TQj+rT>m`EEVDFQ6MfV!w`{KM_IyqtL_h zVN(QslI$0Je^z})jkqn=m;D1ewJ`AH2)ci7am=u3Y;gqtSA?h@9FO8UAS;cv%L8Bq#3p8Q)b8O z(rK?Ho6jz4>+Z?s(>)#O=Ju{mxuz3BN~c@8(u>-=nlkO_mY%MBcRJJC=gBppTzj@B z+cM>_s>7#=wT;ZPDggd>Pr!md#7p3`0KK+$)#r7H37_Y&PAJ z7c}pk-2ta`2VP0bD223U@l-(bM?Wjy)|2&e`L5<{cXv9w*uR+OyT*4)n|Qq`(|l%6 zKGU3q#hI3t?smCwC_iO#IbXGf?U|nR*^4Cv`65zqc~NPUmg|PyJ#Ee1*-XBcc z`f{d9fKRABcFxT7%u|n-bW^!UyrsJfA@tJ6&p-9pIkRU7N8Owm6W(cTzh7T*xcMCIhf5> zSD$#w?Biynr%jnQ#=5imd8L)04r(rZ3_$hh=K9c}iF3q7!GHmd$r5 zcV;u)OM>ba>C9tm<`hlcnSMBGv$?K(k1trllT|K`3~>h)Q&H&1c68;Jq;uKKnUctv zMOl;AT}@|Xn|q|%XS%yP<+cI!OHZqKEN#-QwX5q)Poy;G!d$03t%{L!igsRypF?T{ zzfJ{NEGd?kvX?$HyTtFCE?B9gNccBXbhQ_UD>T9~!(nUY%&dxi5P4rK57Rv;0W7h8 zE)>fx446GNI(ysOBNX>1+h(n1EmCD(mWd!eC3Y$wy4z*VRV#@^)kz99n~F7!jJuk+ zd7UbejFO>#BqW3VEkSQCNML_aEYwLYHI7Dp?dj-h>6HT3oyoQ75~!+XPcAzC&62pX z?iE&*X1^Zy=A1#&X}Qw`8y0K>0+rKQzg)|1BcIg+OOh;f!x@YcOtz>o#QaQiPupVA zDX`!4kh0a4bE}omikNU}^X>ToskSIUBND{A}GSygs_iU*F< zwbzfGax?ZyQmAE1Aa&or&qtTp$PfpW3OVPmf5D8Cl9N zacgCaSiIU~yVU8=?3Tb=p@k~6K&ZX1akjs_rPIxQ8Gk9tw6~pYRfC{J7fgBKYVrO* DC9Z!l literal 0 HcmV?d00001 diff --git a/apm.so b/apm.so new file mode 100755 index 0000000000000000000000000000000000000000..b39a7a26eeae71b83f31b051432d9809352f8edf GIT binary patch literal 243480 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 literal 0 HcmV?d00001 diff --git a/backtrace.c b/backtrace.c index 692a1a5..7f7ecf2 100644 --- a/backtrace.c +++ b/backtrace.c @@ -16,10 +16,13 @@ +----------------------------------------------------------------------+ */ -#include "php_apm.h" +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include "php.h" +#include "php_apm.h" #include "zend_types.h" -#include "ext/standard/php_string.h" #if PHP_VERSION_ID >= 70000 #include "Zend/zend_generators.h" @@ -27,11 +30,12 @@ #include "backtrace.h" -ZEND_DECLARE_MODULE_GLOBALS(apm); - -static void debug_print_backtrace_args(zval *arg_array TSRMLS_DC, smart_str *trace_str); -static void append_flat_zval_r(zval *expr TSRMLS_DC, smart_str *trace_str, char depth); -static void append_flat_hash(HashTable *ht TSRMLS_DC, smart_str *trace_str, char is_object, char depth); +static void debug_print_backtrace_args(zval *arg_array TSRMLS_DC, + smart_str *trace_str); +static void append_flat_zval_r(zval *expr TSRMLS_DC, smart_str *trace_str, + char depth); +static void append_flat_hash(HashTable *ht TSRMLS_DC, smart_str *trace_str, + char is_object, char depth); #if PHP_VERSION_ID >= 70000 static void debug_backtrace_get_args(zend_execute_data *call, zval *arg_array); @@ -42,666 +46,700 @@ static zval *debug_backtrace_get_args(void ***curpos TSRMLS_DC); static int append_variable(zval *expr, smart_str *trace_str); static char *apm_addslashes(char *str, uint length, int *new_length); -void append_backtrace(smart_str *trace_str TSRMLS_DC) -{ - /* backtrace variables */ - zend_execute_data *ptr, *skip; - int lineno; - const char *function_name; - const char *filename; - char *call_type; - const char *include_filename = NULL; -# if PHP_VERSION_ID >= 70000 - zval arg_array; - zend_execute_data *call; - zend_string *class_name = NULL; - zend_object *object; - zend_function *func; -# else - const char *class_name = NULL; - zval *arg_array = NULL; - const char *free_class_name = NULL; - zend_uint class_name_len = 0; -# endif - int indent = 0; - +void append_backtrace(smart_str *trace_str TSRMLS_DC) { + /* backtrace variables */ + zend_execute_data *ptr, *skip; + int lineno; + const char *function_name; + const char *filename; + char *call_type; + const char *include_filename = NULL; +#if PHP_VERSION_ID >= 70000 + zval arg_array; + zend_execute_data *call; + zend_string *class_name = NULL; + zend_object *object; + zend_function *func; +#else + const char *class_name = NULL; + zval *arg_array = NULL; + const char *free_class_name = NULL; + zend_uint class_name_len = 0; +#endif + int indent = 0; #if PHP_VERSION_ID >= 70000 - ZVAL_UNDEF(&arg_array); - //FIXME? ptr = EX(prev_execute_data); - ptr = EG(current_execute_data); - call = ptr; + ZVAL_UNDEF(&arg_array); + // FIXME? ptr = EX(prev_execute_data); + ptr = EG(current_execute_data); + call = ptr; #else - ptr = EG(current_execute_data); + ptr = EG(current_execute_data); #endif - while (ptr) { - class_name = NULL; - call_type = NULL; + while (ptr) { + class_name = NULL; + call_type = NULL; #if PHP_VERSION_ID >= 70000 - ZVAL_UNDEF(&arg_array); + ZVAL_UNDEF(&arg_array); - ptr = zend_generator_check_placeholder_frame(ptr); + ptr = zend_generator_check_placeholder_frame(ptr); #else - arg_array = NULL; + arg_array = NULL; #endif - skip = ptr; - /* skip internal handler */ + skip = ptr; + /* skip internal handler */ #if PHP_VERSION_ID >= 70000 - if ((!skip->func || !ZEND_USER_CODE(skip->func->common.type)) && + if ((!skip->func || !ZEND_USER_CODE(skip->func->common.type)) && #else - if (!skip->op_array && + if (!skip->op_array && #endif - skip->prev_execute_data && + skip->prev_execute_data && #if PHP_VERSION_ID >= 70000 - skip->prev_execute_data->func && - ZEND_USER_CODE(skip->prev_execute_data->func->common.type) && - skip->prev_execute_data->opline->opcode != ZEND_DO_ICALL && - skip->prev_execute_data->opline->opcode != ZEND_DO_UCALL && + skip->prev_execute_data->func && + ZEND_USER_CODE(skip->prev_execute_data->func->common.type) && + skip->prev_execute_data->opline->opcode != ZEND_DO_ICALL && + skip->prev_execute_data->opline->opcode != ZEND_DO_UCALL && #else - skip->prev_execute_data->opline && + skip->prev_execute_data->opline && #endif - skip->prev_execute_data->opline->opcode != ZEND_DO_FCALL && - skip->prev_execute_data->opline->opcode != ZEND_DO_FCALL_BY_NAME && - skip->prev_execute_data->opline->opcode != ZEND_INCLUDE_OR_EVAL) { - skip = skip->prev_execute_data; - } + skip->prev_execute_data->opline->opcode != ZEND_DO_FCALL && + skip->prev_execute_data->opline->opcode != ZEND_DO_FCALL_BY_NAME && + skip->prev_execute_data->opline->opcode != ZEND_INCLUDE_OR_EVAL) { + skip = skip->prev_execute_data; + } #if PHP_VERSION_ID >= 70000 - if (skip->func && ZEND_USER_CODE(skip->func->common.type)) { - filename = skip->func->op_array.filename->val; - if (skip->opline->opcode == ZEND_HANDLE_EXCEPTION) { - if (EG(opline_before_exception)) { - lineno = EG(opline_before_exception)->lineno; - } else { - lineno = skip->func->op_array.line_end; - } - } else { - lineno = skip->opline->lineno; - } - } + if (skip->func && skip->func->type != ZEND_INTERNAL_FUNCTION && + ZEND_USER_CODE(skip->func->common.type)) { + filename = (skip->func->op_array.filename) + ? ZSTR_VAL(skip->func->op_array.filename) + : NULL; + if (skip->opline->opcode == ZEND_HANDLE_EXCEPTION) { + if (EG(opline_before_exception)) { + lineno = EG(opline_before_exception)->lineno; + } else { + lineno = skip->func->op_array.line_end; + } + } else { + lineno = skip->opline->lineno; + } + } #else - if (skip->op_array) { - filename = skip->op_array->filename; - lineno = skip->opline->lineno; - } + if (skip->op_array) { + filename = skip->op_array->filename; + lineno = skip->opline->lineno; + } #endif - else { - filename = NULL; - lineno = 0; - } + else { + filename = NULL; + lineno = 0; + } #if PHP_VERSION_ID >= 70000 - /* $this may be passed into regular internal functions */ - object = Z_OBJ(call->This); - - if (call->func) { - func = call->func; - function_name = (func->common.scope && func->common.scope->trait_aliases) ? - ZSTR_VAL(zend_resolve_method_name( - (object ? object->ce : func->common.scope), func)) : - (func->common.function_name ? - ZSTR_VAL(func->common.function_name) : NULL); - } else { - func = NULL; - function_name = NULL; - } - - if (function_name) { - if (object) { - if (func->common.scope) { - class_name = func->common.scope->name; - } else if (object->handlers->get_class_name == std_object_handlers.get_class_name) { - class_name = object->ce->name; - } else { - class_name = object->handlers->get_class_name(object); - } - - call_type = "->"; - } else if (func->common.scope) { - class_name = func->common.scope->name; - call_type = "::"; - } else { - class_name = NULL; - call_type = NULL; - } - if (func->type != ZEND_EVAL_CODE) { - debug_backtrace_get_args(call, &arg_array); - } - } + /* $this may be passed into regular internal functions */ + object = (Z_TYPE(call->This) == IS_OBJECT) ? Z_OBJ(call->This) : NULL; + + if (call->func) { + func = call->func; + function_name = + (func->common.scope && func->common.scope->trait_aliases) + ? ZSTR_VAL(zend_resolve_method_name( + (object ? object->ce : func->common.scope), func)) + : (func->common.function_name + ? ZSTR_VAL(func->common.function_name) + : NULL); + } else { + func = NULL; + function_name = NULL; + } + + if (function_name) { + if (object) { + if (func->common.scope) { + class_name = func->common.scope->name; + } else if (object->handlers->get_class_name == + std_object_handlers.get_class_name) { + class_name = object->ce->name; + } else { + class_name = object->handlers->get_class_name(object); + } + + call_type = "->"; + } else if (func->common.scope) { + class_name = func->common.scope->name; + call_type = "::"; + } else { + class_name = NULL; + call_type = NULL; + } + if (func->type != ZEND_EVAL_CODE) { + debug_backtrace_get_args(call, &arg_array); + } + } #else - function_name = ptr->function_state.function->common.function_name; - - if (function_name) { - if (ptr->object) { - if (ptr->function_state.function->common.scope) { - class_name = ptr->function_state.function->common.scope->name; - class_name_len = strlen(class_name); - } else { - int dup = zend_get_object_classname(ptr->object, &class_name, &class_name_len TSRMLS_CC); - if(!dup) { - free_class_name = class_name; - } - } - - call_type = "->"; - } else if (ptr->function_state.function->common.scope) { - class_name = ptr->function_state.function->common.scope->name; - class_name_len = strlen(class_name); - call_type = "::"; - } else { - class_name = NULL; - call_type = NULL; - } - if ((! ptr->opline) || ((ptr->opline->opcode == ZEND_DO_FCALL_BY_NAME) || (ptr->opline->opcode == ZEND_DO_FCALL))) { - if (ptr->function_state.arguments) { - arg_array = debug_backtrace_get_args(&ptr->function_state.arguments TSRMLS_CC); - } - } - } + function_name = ptr->function_state.function->common.function_name; + + if (function_name) { + if (ptr->object) { + if (ptr->function_state.function->common.scope) { + class_name = ptr->function_state.function->common.scope->name; + class_name_len = strlen(class_name); + } else { + int dup = zend_get_object_classname(ptr->object, &class_name, + &class_name_len TSRMLS_CC); + if (!dup) { + free_class_name = class_name; + } + } + + call_type = "->"; + } else if (ptr->function_state.function->common.scope) { + class_name = ptr->function_state.function->common.scope->name; + class_name_len = strlen(class_name); + call_type = "::"; + } else { + class_name = NULL; + call_type = NULL; + } + if ((!ptr->opline) || ((ptr->opline->opcode == ZEND_DO_FCALL_BY_NAME) || + (ptr->opline->opcode == ZEND_DO_FCALL))) { + if (ptr->function_state.arguments) { + arg_array = debug_backtrace_get_args( + &ptr->function_state.arguments TSRMLS_CC); + } + } + } #endif - else { - /* i know this is kinda ugly, but i'm trying to avoid extra cycles in the main execution loop */ - zend_bool build_filename_arg = 1; + else { + /* i know this is kinda ugly, but i'm trying to avoid extra cycles in the + * main execution loop */ + zend_bool build_filename_arg = 1; #if PHP_VERSION_ID >= 70000 - if (!ptr->func || !ZEND_USER_CODE(ptr->func->common.type) || ptr->opline->opcode != ZEND_INCLUDE_OR_EVAL) { + if (!ptr->func || !ZEND_USER_CODE(ptr->func->common.type) || + ptr->opline->opcode != ZEND_INCLUDE_OR_EVAL) { #else - if (!ptr->opline || ptr->opline->opcode != ZEND_INCLUDE_OR_EVAL) { + if (!ptr->opline || ptr->opline->opcode != ZEND_INCLUDE_OR_EVAL) { #endif - /* can happen when calling eval from a custom sapi */ - function_name = "unknown"; - build_filename_arg = 0; - } else - switch (ptr->opline->op2.constant) { - case ZEND_EVAL: - function_name = "eval"; - build_filename_arg = 0; - break; - case ZEND_INCLUDE: - function_name = "include"; - break; - case ZEND_REQUIRE: - function_name = "require"; - break; - case ZEND_INCLUDE_ONCE: - function_name = "include_once"; - break; - case ZEND_REQUIRE_ONCE: - function_name = "require_once"; - break; - default: - /* this can actually happen if you use debug_backtrace() in your error_handler and - * you're in the top-scope */ - function_name = "unknown"; - build_filename_arg = 0; - break; - } - - if (build_filename_arg && include_filename) { + /* can happen when calling eval from a custom sapi */ + function_name = "unknown"; + build_filename_arg = 0; + } else + switch (ptr->opline->op2.constant) { + case ZEND_EVAL: + function_name = "eval"; + build_filename_arg = 0; + break; + case ZEND_INCLUDE: + function_name = "include"; + break; + case ZEND_REQUIRE: + function_name = "require"; + break; + case ZEND_INCLUDE_ONCE: + function_name = "include_once"; + break; + case ZEND_REQUIRE_ONCE: + function_name = "require_once"; + break; + default: + /* this can actually happen if you use debug_backtrace() in your + * error_handler and you're in the top-scope */ + function_name = "unknown"; + build_filename_arg = 0; + break; + } + + if (build_filename_arg && include_filename) { #if PHP_VERSION_ID >= 70000 - array_init(&arg_array); - add_next_index_string(&arg_array, include_filename); + array_init(&arg_array); + add_next_index_string(&arg_array, include_filename); #else - MAKE_STD_ZVAL(arg_array); - array_init(arg_array); - add_next_index_string(arg_array, include_filename, 1); + MAKE_STD_ZVAL(arg_array); + array_init(arg_array); + add_next_index_string(arg_array, include_filename, 1); #endif - } - call_type = NULL; - } - smart_str_appendc(trace_str, '#'); - smart_str_append_long(trace_str, indent); - smart_str_appendc(trace_str, ' '); - if (class_name) { + } + call_type = NULL; + } + smart_str_appendc(trace_str, '#'); + smart_str_append_long(trace_str, indent); + smart_str_appendc(trace_str, ' '); + if (class_name) { #if PHP_VERSION_ID >= 70000 - smart_str_appends(trace_str, ZSTR_VAL(class_name)); + smart_str_appends(trace_str, ZSTR_VAL(class_name)); #else - smart_str_appends(trace_str, class_name); + smart_str_appends(trace_str, class_name); #endif - /* here, call_type is either "::" or "->" */ - smart_str_appendl(trace_str, call_type, 2); - } - if (function_name) { - smart_str_appends(trace_str, function_name); - } else { - smart_str_appendl(trace_str, "main", 4); - } - smart_str_appendc(trace_str, '('); + /* here, call_type is either "::" or "->" */ + smart_str_appendl(trace_str, call_type, 2); + } + if (function_name) { + smart_str_appends(trace_str, function_name); + } else { + smart_str_appendl(trace_str, "main", 4); + } + smart_str_appendc(trace_str, '('); #if PHP_VERSION_ID >= 70000 - if (Z_TYPE(arg_array) != IS_UNDEF) { - debug_print_backtrace_args(&arg_array, trace_str); + if (Z_TYPE(arg_array) != IS_UNDEF) { + debug_print_backtrace_args(&arg_array, trace_str); #else - if (arg_array) { - debug_print_backtrace_args(arg_array TSRMLS_CC, trace_str); + if (arg_array) { + debug_print_backtrace_args(arg_array TSRMLS_CC, trace_str); #endif - zval_ptr_dtor(&arg_array); - } - if (filename) { - smart_str_appendl(trace_str, ") called at [", sizeof(") called at [") - 1); - smart_str_appends(trace_str, filename); - smart_str_appendc(trace_str, ':'); - smart_str_append_long(trace_str, lineno); - smart_str_appendl(trace_str, "]\n", 2); - } else { + zval_ptr_dtor(&arg_array); + } + if (filename) { + smart_str_appendl(trace_str, ") called at [", + sizeof(") called at [") - 1); + smart_str_appends(trace_str, filename); + smart_str_appendc(trace_str, ':'); + smart_str_append_long(trace_str, lineno); + smart_str_appendl(trace_str, "]\n", 2); + } else { #if PHP_VERSION_ID >= 70000 - zend_execute_data *prev_call = skip; + zend_execute_data *prev_call = skip; #endif - zend_execute_data *prev = skip->prev_execute_data; + zend_execute_data *prev = skip->prev_execute_data; - while (prev) { + while (prev) { #if PHP_VERSION_ID >= 70000 - if (prev_call && - prev_call->func && - !ZEND_USER_CODE(prev_call->func->common.type)) { - prev = NULL; - break; - } - if (prev->func && ZEND_USER_CODE(prev->func->common.type)) { - zend_printf(") called at [%s:%d]\n", prev->func->op_array.filename->val, prev->opline->lineno); - break; - } - prev_call = prev; + if (prev_call && prev_call->func && + !ZEND_USER_CODE(prev_call->func->common.type)) { + prev = NULL; + break; + } + if (prev->func && ZEND_USER_CODE(prev->func->common.type)) { + zend_printf(") called at [%s:%d]\n", + prev->func->op_array.filename->val, prev->opline->lineno); + break; + } + prev_call = prev; #else - if (prev->function_state.function && - prev->function_state.function->common.type != ZEND_USER_FUNCTION) { - prev = NULL; - break; - } - if (prev->op_array) { - smart_str_appendl(trace_str, ") called at [", sizeof(") called at [") - 1); - smart_str_appends(trace_str, prev->op_array->filename); - smart_str_appendc(trace_str, ':'); - smart_str_append_long(trace_str, (long) prev->opline->lineno); - smart_str_appendl(trace_str, "]\n", 2); - break; - } + if (prev->function_state.function && + prev->function_state.function->common.type != ZEND_USER_FUNCTION) { + prev = NULL; + break; + } + if (prev->op_array) { + smart_str_appendl(trace_str, ") called at [", + sizeof(") called at [") - 1); + smart_str_appends(trace_str, prev->op_array->filename); + smart_str_appendc(trace_str, ':'); + smart_str_append_long(trace_str, (long)prev->opline->lineno); + smart_str_appendl(trace_str, "]\n", 2); + break; + } #endif - prev = prev->prev_execute_data; - } - if (!prev) { - smart_str_appendl(trace_str, ")\n", 2); - } - } - include_filename = filename; - ptr = skip->prev_execute_data; - ++indent; + prev = prev->prev_execute_data; + } + if (!prev) { + smart_str_appendl(trace_str, ")\n", 2); + } + } + include_filename = filename; + ptr = skip->prev_execute_data; + ++indent; #if PHP_VERSION_ID >= 70000 - call = skip; + call = skip; #else - if (free_class_name) { - efree((char *) free_class_name); - free_class_name = NULL; - } + if (free_class_name) { + efree((char *)free_class_name); + free_class_name = NULL; + } #endif - } + } } #if PHP_VERSION_ID >= 70000 -static void debug_print_backtrace_args(zval *arg_array, smart_str *trace_str) -{ - zval *tmp; - int i = 0; - - ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(arg_array), tmp) { - if (i++) { - smart_str_appendl(trace_str, ", ", 2); - } - append_flat_zval_r(tmp, trace_str, 0); - } ZEND_HASH_FOREACH_END(); +static void debug_print_backtrace_args(zval *arg_array, smart_str *trace_str) { + zval *tmp; + int i = 0; + + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(arg_array), tmp) { + if (i++) { + smart_str_appendl(trace_str, ", ", 2); + } + append_flat_zval_r(tmp, trace_str, 0); + } + ZEND_HASH_FOREACH_END(); } #else -static void debug_print_backtrace_args(zval *arg_array TSRMLS_DC, smart_str *trace_str) -{ - zval **tmp; - HashPosition iterator; - int i = 0; - - zend_hash_internal_pointer_reset_ex(arg_array->value.ht, &iterator); - while (zend_hash_get_current_data_ex(arg_array->value.ht, (void **) &tmp, &iterator) == SUCCESS) { - if (i++) { - smart_str_appendl(trace_str, ", ", 2); - } - append_flat_zval_r(*tmp TSRMLS_CC, trace_str, 0); - zend_hash_move_forward_ex(arg_array->value.ht, &iterator); - } +static void debug_print_backtrace_args(zval *arg_array TSRMLS_DC, + smart_str *trace_str) { + zval **tmp; + HashPosition iterator; + int i = 0; + + zend_hash_internal_pointer_reset_ex(arg_array->value.ht, &iterator); + while (zend_hash_get_current_data_ex(arg_array->value.ht, (void **)&tmp, + &iterator) == SUCCESS) { + if (i++) { + smart_str_appendl(trace_str, ", ", 2); + } + append_flat_zval_r(*tmp TSRMLS_CC, trace_str, 0); + zend_hash_move_forward_ex(arg_array->value.ht, &iterator); + } } #endif -static void append_flat_zval_r(zval *expr TSRMLS_DC, smart_str *trace_str, char depth) -{ - if (depth >= APM_G(dump_max_depth)) { - smart_str_appendl(trace_str, "/* [...] */", sizeof("/* [...] */") - 1); - return; - } +static void append_flat_zval_r(zval *expr TSRMLS_DC, smart_str *trace_str, + char depth) { + if (depth >= APM_G(dump_max_depth)) { + smart_str_appendl(trace_str, "/* [...] */", sizeof("/* [...] */") - 1); + return; + } - switch (Z_TYPE_P(expr)) { + switch (Z_TYPE_P(expr)) { #if PHP_VERSION_ID >= 70000 - case IS_REFERENCE: - ZVAL_DEREF(expr); - smart_str_appendc(trace_str, '&'); - append_flat_zval_r(expr, trace_str, depth); - break; + case IS_REFERENCE: + ZVAL_DEREF(expr); + smart_str_appendc(trace_str, '&'); + append_flat_zval_r(expr, trace_str, depth); + break; #endif - case IS_ARRAY: - smart_str_appendc(trace_str, '['); -#if PHP_VERSION_ID >= 70000 - if (ZEND_HASH_APPLY_PROTECTION(Z_ARRVAL_P(expr)) && ++Z_ARRVAL_P(expr)->u.v.nApplyCount>1) { + case IS_ARRAY: + smart_str_appendc(trace_str, '['); +#if PHP_VERSION_ID >= 70300 + if (GC_IS_RECURSIVE(Z_ARRVAL_P(expr))) { + smart_str_appendl(trace_str, " *RECURSION*", sizeof(" *RECURSION*") - 1); + return; + } + GC_PROTECT_RECURSION(Z_ARRVAL_P(expr)); +#elif PHP_VERSION_ID >= 70000 + if (ZEND_HASH_GET_APPLY_COUNT(Z_ARRVAL_P(expr)) > 0) { + smart_str_appendl(trace_str, " *RECURSION*", sizeof(" *RECURSION*") - 1); + return; + } + ZEND_HASH_INC_APPLY_COUNT(Z_ARRVAL_P(expr)); #else - if (++Z_ARRVAL_P(expr)->nApplyCount>1) { + if (++Z_ARRVAL_P(expr)->nApplyCount > 1) { + smart_str_appendl(trace_str, " *RECURSION*", sizeof(" *RECURSION*") - 1); + Z_ARRVAL_P(expr)->nApplyCount--; + return; + } #endif - smart_str_appendl(trace_str, " *RECURSION*", sizeof(" *RECURSION*") - 1); -#if PHP_VERSION_ID >= 70000 - Z_ARRVAL_P(expr)->u.v.nApplyCount--; + append_flat_hash(Z_ARRVAL_P(expr) TSRMLS_CC, trace_str, 0, depth + 1); + smart_str_appendc(trace_str, ']'); +#if PHP_VERSION_ID >= 70300 + GC_UNPROTECT_RECURSION(Z_ARRVAL_P(expr)); +#elif PHP_VERSION_ID >= 70000 + ZEND_HASH_DEC_APPLY_COUNT(Z_ARRVAL_P(expr)); #else - Z_ARRVAL_P(expr)->nApplyCount--; + Z_ARRVAL_P(expr)->nApplyCount--; #endif - return; - } - append_flat_hash(Z_ARRVAL_P(expr) TSRMLS_CC, trace_str, 0, depth + 1); - smart_str_appendc(trace_str, ']'); + break; + case IS_OBJECT: { + HashTable *properties = NULL; #if PHP_VERSION_ID >= 70000 - if (ZEND_HASH_APPLY_PROTECTION(Z_ARRVAL_P(expr))) { - Z_ARRVAL_P(expr)->u.v.nApplyCount--; - } -#else - Z_ARRVAL_P(expr)->nApplyCount--; + zend_string *class_name = + Z_OBJ_HANDLER_P(expr, get_class_name)(Z_OBJ_P(expr)); + smart_str_appends(trace_str, ZSTR_VAL(class_name)); + smart_str_appendl(trace_str, " Object (", sizeof(" Object (") - 1); + zend_string_release(class_name); + +#if PHP_VERSION_ID >= 70300 + if (GC_IS_RECURSIVE(Z_OBJ_P(expr))) { + smart_str_appendl(trace_str, " *RECURSION*", sizeof(" *RECURSION*") - 1); + return; + } +#elif PHP_VERSION_ID >= 70100 + if (Z_OBJ_APPLY_COUNT_P(expr) > 0) { + smart_str_appendl(trace_str, " *RECURSION*", sizeof(" *RECURSION*") - 1); + return; + } #endif - break; - case IS_OBJECT: - { - HashTable *properties = NULL; -#if PHP_VERSION_ID >= 70000 - zend_string *class_name = Z_OBJ_HANDLER_P(expr, get_class_name)(Z_OBJ_P(expr)); - smart_str_appends(trace_str, ZSTR_VAL(class_name)); - smart_str_appendl(trace_str, " Object (", sizeof(" Object (") - 1); - zend_string_release(class_name); - - if (Z_OBJ_APPLY_COUNT_P(expr) > 0) { - smart_str_appendl(trace_str, " *RECURSION*", sizeof(" *RECURSION*") - 1); - return; - } #else - char *class_name = NULL; - zend_uint clen; - if (Z_OBJ_HANDLER_P(expr, get_class_name)) { - Z_OBJ_HANDLER_P(expr, get_class_name)(expr, (const char **) &class_name, &clen, 0 TSRMLS_CC); - } - if (class_name) { - smart_str_appendl(trace_str, class_name, clen); - smart_str_appendl(trace_str, " Object (", sizeof(" Object (") - 1); - } else { - smart_str_appendl(trace_str, "Unknown Class Object (", sizeof("Unknown Class Object (") - 1); - } - if (class_name) { - efree(class_name); - } + char *class_name = NULL; + zend_uint clen; + if (Z_OBJ_HANDLER_P(expr, get_class_name)) { + Z_OBJ_HANDLER_P(expr, get_class_name)(expr, (const char **)&class_name, + &clen, 0 TSRMLS_CC); + } + if (class_name) { + smart_str_appendl(trace_str, class_name, clen); + smart_str_appendl(trace_str, " Object (", sizeof(" Object (") - 1); + } else { + smart_str_appendl(trace_str, "Unknown Class Object (", + sizeof("Unknown Class Object (") - 1); + } + if (class_name) { + efree(class_name); + } #endif - if (Z_OBJ_HANDLER_P(expr, get_properties)) { - properties = Z_OBJPROP_P(expr); - } - if (properties) { -#if PHP_VERSION_ID >= 70000 - Z_OBJ_INC_APPLY_COUNT_P(expr); + if (Z_OBJ_HANDLER_P(expr, get_properties)) { + properties = Z_OBJPROP_P(expr); + } + if (properties) { +#if PHP_VERSION_ID >= 70300 + GC_PROTECT_RECURSION(Z_OBJ_P(expr)); +#elif PHP_VERSION_ID >= 70000 + Z_OBJ_INC_APPLY_COUNT_P(expr); #else - if (++properties->nApplyCount>1) { - smart_str_appendl(trace_str, " *RECURSION*", sizeof(" *RECURSION*") - 1); - properties->nApplyCount--; - return; - } + if (++properties->nApplyCount > 1) { + smart_str_appendl(trace_str, " *RECURSION*", + sizeof(" *RECURSION*") - 1); + properties->nApplyCount--; + return; + } #endif - append_flat_hash(properties TSRMLS_CC, trace_str, 1, depth + 1); -#if PHP_VERSION_ID >= 70000 - Z_OBJ_DEC_APPLY_COUNT_P(expr); + append_flat_hash(properties TSRMLS_CC, trace_str, 1, depth + 1); +#if PHP_VERSION_ID >= 70300 + GC_UNPROTECT_RECURSION(Z_OBJ_P(expr)); +#elif PHP_VERSION_ID >= 70000 + Z_OBJ_DEC_APPLY_COUNT_P(expr); #else - properties->nApplyCount--; + properties->nApplyCount--; #endif - } - smart_str_appendc(trace_str, ')'); - break; - } - default: - append_variable(expr, trace_str); - break; - } + } + smart_str_appendc(trace_str, ')'); + break; + } + default: + append_variable(expr, trace_str); + break; + } } -static void append_flat_hash(HashTable *ht TSRMLS_DC, smart_str *trace_str, char is_object, char depth) -{ - int i = 0; +static void append_flat_hash(HashTable *ht TSRMLS_DC, smart_str *trace_str, + char is_object, char depth) { + int i = 0; #if PHP_VERSION_ID >= 70000 - zval *tmp; - zend_string *string_key; - zend_ulong num_key; + zval *tmp; + zend_string *string_key; + zend_ulong num_key; - ZEND_HASH_FOREACH_KEY_VAL_IND(ht, num_key, string_key, tmp) { + ZEND_HASH_FOREACH_KEY_VAL_IND(ht, num_key, string_key, tmp) { #else - zval **tmp; - char *string_key, *temp; - ulong num_key; - int new_len; - uint str_len; - HashPosition iterator; - - zend_hash_internal_pointer_reset_ex(ht, &iterator); - while (zend_hash_get_current_data_ex(ht, (void **) &tmp, &iterator) == SUCCESS) { + zval **tmp; + char *string_key, *temp; + ulong num_key; + int new_len; + uint str_len; + HashPosition iterator; + + zend_hash_internal_pointer_reset_ex(ht, &iterator); + while (zend_hash_get_current_data_ex(ht, (void **)&tmp, &iterator) == + SUCCESS) { #endif - if (depth >= APM_G(dump_max_depth)) { - smart_str_appendl(trace_str, "/* [...] */", sizeof("/* [...] */") - 1); - return; - } - - if (i++ > 0) { - smart_str_appendl(trace_str, ", ", 2); - } - smart_str_appendc(trace_str, '['); + if (depth >= APM_G(dump_max_depth)) { + smart_str_appendl(trace_str, "/* [...] */", sizeof("/* [...] */") - 1); + return; + } + + if (i++ > 0) { + smart_str_appendl(trace_str, ", ", 2); + } + smart_str_appendc(trace_str, '['); #if PHP_VERSION_ID >= 70000 - if (string_key) { - smart_str_appendl(trace_str, ZSTR_VAL(string_key), ZSTR_LEN(string_key)); - } else { - smart_str_append_long(trace_str, num_key); - } - - smart_str_appendl(trace_str, "] => ", 5); - append_flat_zval_r(tmp, trace_str, depth); - } ZEND_HASH_FOREACH_END(); + if (string_key) { + smart_str_appendl(trace_str, ZSTR_VAL(string_key), ZSTR_LEN(string_key)); + } else { + smart_str_append_long(trace_str, num_key); + } + + smart_str_appendl(trace_str, "] => ", 5); + append_flat_zval_r(tmp, trace_str, depth); + } + ZEND_HASH_FOREACH_END(); #else - switch (zend_hash_get_current_key_ex(ht, &string_key, &str_len, &num_key, 0, &iterator)) { - case HASH_KEY_IS_STRING: - if (is_object) { - if (*string_key == '\0') { - do { - ++string_key; - --str_len; - } while (*(string_key) != '\0'); - ++string_key; - --str_len; - } - } - smart_str_appendc(trace_str, '"'); - - if (str_len > 0) { - temp = apm_addslashes(string_key, str_len - 1, &new_len); - smart_str_appendl(trace_str, temp, new_len); - if (temp) { - efree(temp); - } - } - else - { - smart_str_appendl(trace_str, "*unknown key*", sizeof("*unknown key*") - 1); - } - - smart_str_appendc(trace_str, '"'); - break; - case HASH_KEY_IS_LONG: - smart_str_append_long(trace_str, (long) num_key); - break; - } - - smart_str_appendl(trace_str, "] => ", 5); - append_flat_zval_r(*tmp TSRMLS_CC, trace_str, depth); - zend_hash_move_forward_ex(ht, &iterator); - } + switch (zend_hash_get_current_key_ex(ht, &string_key, &str_len, &num_key, 0, + &iterator)) { + case HASH_KEY_IS_STRING: + if (is_object) { + if (*string_key == '\0') { + do { + ++string_key; + --str_len; + } while (*(string_key) != '\0'); + ++string_key; + --str_len; + } + } + smart_str_appendc(trace_str, '"'); + + if (str_len > 0) { + temp = apm_addslashes(string_key, str_len - 1, &new_len); + smart_str_appendl(trace_str, temp, new_len); + if (temp) { + efree(temp); + } + } else { + smart_str_appendl(trace_str, "*unknown key*", + sizeof("*unknown key*") - 1); + } + + smart_str_appendc(trace_str, '"'); + break; + case HASH_KEY_IS_LONG: + smart_str_append_long(trace_str, (long)num_key); + break; + } + + smart_str_appendl(trace_str, "] => ", 5); + append_flat_zval_r(*tmp TSRMLS_CC, trace_str, depth); + zend_hash_move_forward_ex(ht, &iterator); + } #endif } -static int append_variable(zval *expr, smart_str *trace_str) -{ - zval expr_copy; - int use_copy; - char is_string = 0; - char * temp; - int new_len; +static int append_variable(zval *expr, smart_str *trace_str) { + zval expr_copy; + int use_copy; + char is_string = 0; + char *temp; + int new_len; - if (Z_TYPE_P(expr) == IS_STRING) { - smart_str_appendc(trace_str, '"'); - is_string = 1; - } + if (Z_TYPE_P(expr) == IS_STRING) { + smart_str_appendc(trace_str, '"'); + is_string = 1; + } #if PHP_VERSION_ID >= 70000 - use_copy = zend_make_printable_zval(expr, &expr_copy); + use_copy = zend_make_printable_zval(expr, &expr_copy); #else - zend_make_printable_zval(expr, &expr_copy, &use_copy); + zend_make_printable_zval(expr, &expr_copy, &use_copy); #endif - if (use_copy) { - expr = &expr_copy; - } - if (Z_STRLEN_P(expr) == 0) { /* optimize away empty strings */ - if (is_string) { - smart_str_appendc(trace_str, '"'); - } - if (use_copy) { - zval_dtor(expr); - } - return 0; - } - - if (is_string) { - temp = apm_addslashes(Z_STRVAL_P(expr), Z_STRLEN_P(expr), &new_len); - smart_str_appendl(trace_str, temp, new_len); - smart_str_appendc(trace_str, '"'); - if (temp) { - efree(temp); - } - } else { - smart_str_appendl(trace_str, Z_STRVAL_P(expr), Z_STRLEN_P(expr)); - } - - if (use_copy) { - zval_dtor(expr); - } - return Z_STRLEN_P(expr); + if (use_copy) { + expr = &expr_copy; + } + if (Z_STRLEN_P(expr) == 0) { /* optimize away empty strings */ + if (is_string) { + smart_str_appendc(trace_str, '"'); + } + if (use_copy) { + zval_dtor(expr); + } + return 0; + } + + if (is_string) { + temp = apm_addslashes(Z_STRVAL_P(expr), Z_STRLEN_P(expr), &new_len); + smart_str_appendl(trace_str, temp, new_len); + smart_str_appendc(trace_str, '"'); + if (temp) { + efree(temp); + } + } else { + smart_str_appendl(trace_str, Z_STRVAL_P(expr), Z_STRLEN_P(expr)); + } + + if (use_copy) { + zval_dtor(expr); + } + return Z_STRLEN_P(expr); } #if PHP_VERSION_ID >= 70000 -static void debug_backtrace_get_args(zend_execute_data *call, zval *arg_array) -{ - uint32_t num_args = ZEND_CALL_NUM_ARGS(call); - - array_init_size(arg_array, num_args); - if (num_args) { - uint32_t i = 0; - zval *p = ZEND_CALL_ARG(call, 1); - - zend_hash_real_init(Z_ARRVAL_P(arg_array), 1); - ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(arg_array)) { - if (call->func->type == ZEND_USER_FUNCTION) { - uint32_t first_extra_arg = call->func->op_array.num_args; - - if (ZEND_CALL_NUM_ARGS(call) > first_extra_arg) { - while (i < first_extra_arg) { - if (Z_OPT_REFCOUNTED_P(p)) Z_ADDREF_P(p); - ZEND_HASH_FILL_ADD(p); - zend_hash_next_index_insert_new(Z_ARRVAL_P(arg_array), p); - p++; - i++; - } - p = ZEND_CALL_VAR_NUM(call, call->func->op_array.last_var + call->func->op_array.T); - } - } - - while (i < num_args) { - if (Z_OPT_REFCOUNTED_P(p)) Z_ADDREF_P(p); - ZEND_HASH_FILL_ADD(p); - p++; - i++; - } - } ZEND_HASH_FILL_END(); - } +static void debug_backtrace_get_args(zend_execute_data *call, zval *arg_array) { + uint32_t num_args = ZEND_CALL_NUM_ARGS(call); + + array_init_size(arg_array, num_args); + if (num_args) { + uint32_t i = 0; + zval *p = ZEND_CALL_ARG(call, 1); + + zend_hash_real_init(Z_ARRVAL_P(arg_array), 1); + ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(arg_array)) { + if (call->func->type == ZEND_USER_FUNCTION) { + uint32_t first_extra_arg = call->func->op_array.num_args; + + if (ZEND_CALL_NUM_ARGS(call) > first_extra_arg) { + while (i < first_extra_arg) { + if (Z_OPT_REFCOUNTED_P(p)) + Z_ADDREF_P(p); + ZEND_HASH_FILL_ADD(p); + zend_hash_next_index_insert_new(Z_ARRVAL_P(arg_array), p); + p++; + i++; + } + p = ZEND_CALL_VAR_NUM(call, call->func->op_array.last_var + + call->func->op_array.T); + } + } + + while (i < num_args) { + if (Z_OPT_REFCOUNTED_P(p)) + Z_ADDREF_P(p); + ZEND_HASH_FILL_ADD(p); + p++; + i++; + } + } + ZEND_HASH_FILL_END(); + } } #else -static zval *debug_backtrace_get_args(void ***curpos TSRMLS_DC) -{ - void **p = *curpos; - zval *arg_array, **arg; - int arg_count = - (int)(zend_uintptr_t) *p; - - MAKE_STD_ZVAL(arg_array); - array_init_size(arg_array, arg_count); - p -= arg_count; - - while (--arg_count >= 0) { - arg = (zval **) p++; - if (*arg) { - if (Z_TYPE_PP(arg) != IS_OBJECT) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(arg); - } - Z_ADDREF_PP(arg); - add_next_index_zval(arg_array, *arg); - } else { - add_next_index_null(arg_array); - } - } - - return arg_array; +static zval *debug_backtrace_get_args(void ***curpos TSRMLS_DC) { + void **p = *curpos; + zval *arg_array, **arg; + int arg_count = (int)(zend_uintptr_t)*p; + + MAKE_STD_ZVAL(arg_array); + array_init_size(arg_array, arg_count); + p -= arg_count; + + while (--arg_count >= 0) { + arg = (zval **)p++; + if (*arg) { + if (Z_TYPE_PP(arg) != IS_OBJECT) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(arg); + } + Z_ADDREF_PP(arg); + add_next_index_zval(arg_array, *arg); + } else { + add_next_index_null(arg_array); + } + } + + return arg_array; } #endif -static char *apm_addslashes(char *str, uint length, int *new_length) -{ - /* maximum string length, worst case situation */ - char *new_str; - char *source, *target; - char *end; - int local_new_length; - - if (!new_length) { - new_length = &local_new_length; - } - - if (!str) { - *new_length = 0; - return str; - } - new_str = (char *) safe_emalloc(2, (length ? length : (length = strlen(str))), 1); - source = str; - end = source + length; - target = new_str; - - while (source < end) { - switch (*source) { - case '\0': - *target++ = '\\'; - *target++ = '0'; - break; - case '\"': - case '\\': - *target++ = '\\'; - /* break is missing *intentionally* */ - default: - *target++ = *source; - break; - } - - source++; - } - - *target = 0; - *new_length = target - new_str; - return (char *) erealloc(new_str, *new_length + 1); +static char *apm_addslashes(char *str, uint length, int *new_length) { + /* maximum string length, worst case situation */ + char *new_str; + char *source, *target; + char *end; + int local_new_length; + + if (!new_length) { + new_length = &local_new_length; + } + + if (!str) { + *new_length = 0; + return str; + } + new_str = + (char *)safe_emalloc(2, (length ? length : (length = strlen(str))), 1); + source = str; + end = source + length; + target = new_str; + + while (source < end) { + switch (*source) { + case '\0': + *target++ = '\\'; + *target++ = '0'; + break; + case '\"': + case '\\': + *target++ = '\\'; + /* break is missing *intentionally* */ + default: + *target++ = *source; + break; + } + + source++; + } + + *target = 0; + *new_length = target - new_str; + return (char *)erealloc(new_str, *new_length + 1); } diff --git a/build-extension-php53.sh b/build-extension-php53.sh new file mode 100755 index 0000000..9eefa9d --- /dev/null +++ b/build-extension-php53.sh @@ -0,0 +1,97 @@ +#!/bin/bash +# Build apm.so for different PHP versions and old GLIBC + +set -e + +PHP_VERSION=${1:-"5.3"} + +echo "🔨 Building apm.so for PHP $PHP_VERSION (compatible with old GLIBC)..." +echo "" + +# Create a temporary Dockerfile for building with old base +cat > Dockerfile.build-legacy << EOF +# Use old Debian for GLIBC compatibility +FROM debian:wheezy + +# Configure old repositories +RUN echo "deb http://archive.debian.org/debian wheezy main" > /etc/apt/sources.list && \ + echo "deb http://archive.debian.org/debian-security wheezy/updates main" >> /etc/apt/sources.list + +# Install PHP and build dependencies +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + php5-dev \ + php5-cli \ + git \ + autoconf \ + build-essential \ + libcurl4-openssl-dev \ + curl \ + --force-yes \ + && rm -rf /var/lib/apt/lists/* + +# Copy source code +COPY . /tmp/php-apm +WORKDIR /tmp/php-apm + +# Build extension +RUN phpize && \ + ./configure \ + --enable-apm \ + --without-sqlite3 \ + --without-mysql \ + --disable-statsd \ + --disable-socket \ + --enable-elasticsearch && \ + --with-debugfile= + make && \ + make install + +# Copy the built extension to output +RUN mkdir -p /output && \ + cp \$(php-config --extension-dir)/apm.so /output/apm.so && \ + php -v > /output/php-version.txt && \ + ldd \$(php-config --extension-dir)/apm.so > /output/dependencies.txt || true + +CMD ["cat", "/output/apm.so"] +EOF + +# Build the image +echo "đŸ“Ļ Building Docker image (this may take a while)..." +docker build -f Dockerfile.build-legacy -t apm-builder-legacy . 2>&1 | grep -E "(Step|Successfully|Error)" || true + +# Create a container and copy files +echo "📄 Extracting apm.so..." +CONTAINER_ID=$(docker create apm-builder-legacy) +docker cp $CONTAINER_ID:/output/apm.so ./apm-php53.so +docker cp $CONTAINER_ID:/output/php-version.txt ./build-info.txt 2>/dev/null || true +docker cp $CONTAINER_ID:/output/dependencies.txt ./dependencies.txt 2>/dev/null || true +docker rm $CONTAINER_ID > /dev/null 2>&1 + +# Clean up +rm Dockerfile.build-legacy +docker rmi apm-builder-legacy > /dev/null 2>&1 + +# Get file info +FILE_SIZE=$(ls -lh apm-php53.so | awk '{print $5}') +PHP_INFO=$(cat build-info.txt 2>/dev/null | head -1 || echo "PHP 5.3") + +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "✅ Build completed successfully!" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "" +echo "đŸ“Ļ Extension file: ./apm-php53.so" +echo "📏 Size: $FILE_SIZE" +echo "🔧 Built for: $PHP_INFO" +echo "" +echo "📋 Dependencies:" +[ -f dependencies.txt ] && cat dependencies.txt || echo " (check dependencies.txt)" +echo "" +echo "🔧 To install:" +echo " cp apm-php53.so /usr/lib/php5/20100525/apm.so" +echo " echo 'extension=apm.so' > /etc/php5/conf.d/apm.ini" +echo "" +echo "📋 Verify:" +echo " php -m | grep apm" +echo "" diff --git a/build-extension.sh b/build-extension.sh new file mode 100755 index 0000000..0841d41 --- /dev/null +++ b/build-extension.sh @@ -0,0 +1,83 @@ +#!/bin/bash +# Build standalone apm.so extension + +set -e + +echo "🔨 Building standalone apm.so for PHP 5.6..." +echo "" + +# Create a temporary Dockerfile for building +cat > Dockerfile.build << 'EOF' +FROM php:5.6-cli + +# Fix Debian repositories +RUN echo "deb http://archive.debian.org/debian stretch main" > /etc/apt/sources.list + +# Install build dependencies +RUN apt-get update && apt-get install -y \ + git \ + autoconf \ + build-essential \ + libcurl4-openssl-dev \ + --allow-unauthenticated \ + && rm -rf /var/lib/apt/lists/* + +# Copy source code +COPY . /tmp/php-apm +WORKDIR /tmp/php-apm + +# Build extension +RUN phpize \ + && ./configure \ + --enable-apm \ + --without-sqlite3 \ + --without-mysql \ + --disable-statsd \ + --disable-socket \ + --enable-elasticsearch \ + && make \ + && make install + +# Copy the built extension to a known location +RUN mkdir -p /output && \ + cp $(php-config --extension-dir)/apm.so /output/apm.so + +CMD ["cat", "/output/apm.so"] +EOF + +# Build the image +echo "đŸ“Ļ Building Docker image..." +docker build -f Dockerfile.build -t apm-builder . > /dev/null 2>&1 + +# Create a container and copy the .so file +echo "📄 Extracting apm.so..." +CONTAINER_ID=$(docker create apm-builder) +docker cp $CONTAINER_ID:/output/apm.so ./apm.so +docker rm $CONTAINER_ID > /dev/null 2>&1 + +# Clean up +rm Dockerfile.build +docker rmi apm-builder > /dev/null 2>&1 + +# Get file info +FILE_SIZE=$(ls -lh apm.so | awk '{print $5}') +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "✅ Build completed successfully!" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "" +echo "đŸ“Ļ Extension file: ./apm.so" +echo "📏 Size: $FILE_SIZE" +echo "" +echo "🔧 To install:" +echo " 1. Copy to PHP extension directory:" +echo " cp apm.so \$(php-config --extension-dir)/" +echo "" +echo " 2. Add to php.ini:" +echo " echo 'extension=apm.so' >> \$(php --ini | grep 'Loaded Configuration' | awk '{print \$4}')" +echo "" +echo " 3. Configure APM (see apm.ini for examples)" +echo "" +echo "📋 Verify installation:" +echo " php -m | grep apm" +echo "" diff --git a/build-info.txt b/build-info.txt new file mode 100644 index 0000000..57dea85 --- /dev/null +++ b/build-info.txt @@ -0,0 +1,3 @@ +PHP 5.4.45-0+deb7u14 (cli) (built: May 9 2018 16:47:00) +Copyright (c) 1997-2014 The PHP Group +Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies diff --git a/dependencies.txt b/dependencies.txt new file mode 100644 index 0000000..3724db6 --- /dev/null +++ b/dependencies.txt @@ -0,0 +1,28 @@ + linux-vdso.so.1 => (0x00007fbfc3753000) + libcurl.so.4 => /usr/lib/x86_64-linux-gnu/libcurl.so.4 (0x00007fbfc2f8b000) + libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbfc2bfe000) + libidn.so.11 => /usr/lib/x86_64-linux-gnu/libidn.so.11 (0x00007fbfc29ca000) + libssh2.so.1 => /usr/lib/x86_64-linux-gnu/libssh2.so.1 (0x00007fbfc27a1000) + liblber-2.4.so.2 => /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 (0x00007fbfc2592000) + libldap_r-2.4.so.2 => /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 (0x00007fbfc2341000) + librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fbfc2139000) + libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007fbfc1ef9000) + libssl.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fbfc1c98000) + libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fbfc189e000) + librtmp.so.0 => /usr/lib/x86_64-linux-gnu/librtmp.so.0 (0x00007fbfc1684000) + libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fbfc146d000) + /lib64/ld-linux-x86-64.so.2 (0x00007fbfc3400000) + libgcrypt.so.11 => /lib/x86_64-linux-gnu/libgcrypt.so.11 (0x00007fbfc11ee000) + libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fbfc0fd8000) + libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007fbfc0dbd000) + libgnutls.so.26 => /usr/lib/x86_64-linux-gnu/libgnutls.so.26 (0x00007fbfc0afd000) + libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fbfc08e1000) + libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007fbfc060d000) + libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007fbfc03e4000) + libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007fbfc01e0000) + libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007fbfbffd7000) + libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fbfbfdd3000) + libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007fbfbfbcf000) + libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007fbfbf9cc000) + libtasn1.so.3 => /usr/lib/x86_64-linux-gnu/libtasn1.so.3 (0x00007fbfbf7bb000) + libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007fbfbf5a9000) diff --git a/docker-compose.yml b/docker-compose.yml index 1e108a9..f6f362d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -52,6 +52,24 @@ services: - PHP_DISPLAY_ERRORS=1 - PHP_ERROR_REPORTING=E_ALL + php-legacy: + build: + context: . + dockerfile: Dockerfile.build-legacy + container_name: apm-php53 + ports: + - "8085:80" + volumes: + - ./test:/var/www/html + depends_on: + elasticsearch: + condition: service_healthy + networks: + - apm-network + environment: + - PHP_DISPLAY_ERRORS=1 + - PHP_ERROR_REPORTING=E_ALL + volumes: elasticsearch-data: driver: local diff --git a/php-apm.code-workspace b/php-apm.code-workspace new file mode 100644 index 0000000..876a149 --- /dev/null +++ b/php-apm.code-workspace @@ -0,0 +1,8 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": {} +} \ No newline at end of file diff --git a/php_apm.h b/php_apm.h index 8f46aa1..dc9829b 100644 --- a/php_apm.h +++ b/php_apm.h @@ -22,27 +22,35 @@ #define PHP_APM_VERSION "2.1.2" #ifdef HAVE_CONFIG_H -# include "config.h" +#include "config.h" #endif #include "php.h" #include "zend_errors.h" #if PHP_VERSION_ID >= 70000 -# include "zend_smart_str.h" +#include "zend_smart_str.h" +#if PHP_VERSION_ID < 70300 +#define ZEND_HASH_GET_APPLY_COUNT(ht) ((ht)->u.v.nApplyCount) +#define ZEND_HASH_INC_APPLY_COUNT(ht) (++(ht)->u.v.nApplyCount) +#define ZEND_HASH_DEC_APPLY_COUNT(ht) (--(ht)->u.v.nApplyCount) +#define Z_OBJ_APPLY_COUNT_P(ov) (Z_OBJ_P(ov)->gc.u.v.nApplyCount) +#define Z_OBJ_INC_APPLY_COUNT_P(ov) (++Z_OBJ_P(ov)->gc.u.v.nApplyCount) +#define Z_OBJ_DEC_APPLY_COUNT_P(ov) (--Z_OBJ_P(ov)->gc.u.v.nApplyCount) +#endif #else -# include "ext/standard/php_smart_str.h" +#include "ext/standard/php_smart_str.h" #endif #ifndef E_EXCEPTION -# define E_EXCEPTION (1<<15L) +#define E_EXCEPTION (1 << 15L) #endif #ifdef APM_DRIVER_SQLITE3 - #include +#include #endif #ifdef APM_DRIVER_MYSQL - #include +#include #endif #ifdef PHP_WIN32 @@ -58,134 +66,131 @@ #define APM_EVENT_ERROR 1 #define APM_EVENT_EXCEPTION 2 -#define PROCESS_EVENT_ARGS int type, char * error_filename, uint error_lineno, char * msg, char * trace TSRMLS_DC +#define PROCESS_EVENT_ARGS \ + int type, char *error_filename, uint error_lineno, char *msg, \ + char *trace TSRMLS_DC typedef struct apm_event { - int event_type; - int type; - char * error_filename; - uint error_lineno; - char * msg; - char * trace; + int event_type; + int type; + char *error_filename; + uint error_lineno; + char *msg; + char *trace; } apm_event; typedef struct apm_event_entry { - apm_event event; - struct apm_event_entry *next; + apm_event event; + struct apm_event_entry *next; } apm_event_entry; typedef struct apm_driver { - void (* process_event)(PROCESS_EVENT_ARGS); - void (* process_stats)(TSRMLS_D); - int (* minit)(int TSRMLS_DC); - int (* rinit)(TSRMLS_D); - int (* mshutdown)(SHUTDOWN_FUNC_ARGS); - int (* rshutdown)(TSRMLS_D); - zend_bool (* is_enabled)(TSRMLS_D); - zend_bool (* want_event)(int, int, char * TSRMLS_DC); - zend_bool (* want_stats)(TSRMLS_D); - int (* error_reporting)(TSRMLS_D); - zend_bool is_request_created; + void (*process_event)(PROCESS_EVENT_ARGS); + void (*process_stats)(TSRMLS_D); + int (*minit)(int TSRMLS_DC); + int (*rinit)(TSRMLS_D); + int (*mshutdown)(SHUTDOWN_FUNC_ARGS); + int (*rshutdown)(TSRMLS_D); + zend_bool (*is_enabled)(TSRMLS_D); + zend_bool (*want_event)(int, int, char *TSRMLS_DC); + zend_bool (*want_stats)(TSRMLS_D); + int (*error_reporting)(TSRMLS_D); + zend_bool is_request_created; } apm_driver; typedef struct apm_driver_entry { - apm_driver driver; - struct apm_driver_entry *next; + apm_driver driver; + struct apm_driver_entry *next; } apm_driver_entry; #if PHP_VERSION_ID >= 70000 -# define RD_DEF(var) zval *var; zend_bool var##_found; +#define RD_DEF(var) \ + zval *var; \ + zend_bool var##_found; #else -# define RD_DEF(var) zval **var; zend_bool var##_found; +#define RD_DEF(var) \ + zval **var; \ + zend_bool var##_found; #endif typedef struct apm_request_data { - RD_DEF(uri); - RD_DEF(host); - RD_DEF(ip); - RD_DEF(referer); - RD_DEF(ts); - RD_DEF(script); - RD_DEF(method); - - zend_bool initialized, cookies_found, post_vars_found; - smart_str cookies, post_vars; + RD_DEF(uri); + RD_DEF(host); + RD_DEF(ip); + RD_DEF(referer); + RD_DEF(ts); + RD_DEF(script); + RD_DEF(method); + + zend_bool initialized, cookies_found, post_vars_found; + smart_str cookies, post_vars; } apm_request_data; - #ifdef ZTS -#define APM_GLOBAL(driver, v) TSRMG(apm_globals_id, zend_apm_globals *, driver##_##v) +#define APM_GLOBAL(driver, v) \ + TSRMG(apm_globals_id, zend_apm_globals *, driver##_##v) #else #define APM_GLOBAL(driver, v) (apm_globals.driver##_##v) #endif #if PHP_VERSION_ID >= 70000 -# define apm_error_reporting_new_value (new_value && new_value->val) ? atoi(new_value->val) +#define apm_error_reporting_new_value \ + (new_value && new_value->val) ? atoi(new_value->val) #else -# define apm_error_reporting_new_value new_value ? atoi(new_value) +#define apm_error_reporting_new_value new_value ? atoi(new_value) #endif -#define APM_DRIVER_CREATE(name) \ -void apm_driver_##name##_process_event(PROCESS_EVENT_ARGS); \ -void apm_driver_##name##_process_stats(TSRMLS_D); \ -int apm_driver_##name##_minit(int TSRMLS_DC); \ -int apm_driver_##name##_rinit(TSRMLS_D); \ -int apm_driver_##name##_mshutdown(); \ -int apm_driver_##name##_rshutdown(TSRMLS_D); \ -PHP_INI_MH(OnUpdateAPM##name##ErrorReporting) \ -{ \ - APM_GLOBAL(name, error_reporting) = (apm_error_reporting_new_value : APM_E_##name); \ - return SUCCESS; \ -} \ -zend_bool apm_driver_##name##_is_enabled(TSRMLS_D) \ -{ \ - return APM_GLOBAL(name, enabled); \ -} \ -int apm_driver_##name##_error_reporting(TSRMLS_D) \ -{ \ - return APM_GLOBAL(name, error_reporting); \ -} \ -zend_bool apm_driver_##name##_want_event(int event_type, int error_level, char *msg TSRMLS_DC) \ -{ \ - return \ - APM_GLOBAL(name, enabled) \ - && ( \ - (event_type == APM_EVENT_EXCEPTION && APM_GLOBAL(name, exception_mode) == 2) \ - || \ - (event_type == APM_EVENT_ERROR && ((APM_GLOBAL(name, exception_mode) == 1) || (strncmp(msg, "Uncaught exception", 18) != 0)) && (error_level & APM_GLOBAL(name, error_reporting))) \ - ) \ - && ( \ - !APM_G(currently_silenced) || APM_GLOBAL(name, process_silenced_events) \ - ) \ - ; \ -} \ -zend_bool apm_driver_##name##_want_stats(TSRMLS_D) \ -{ \ - return \ - APM_GLOBAL(name, enabled) \ - && ( \ - APM_GLOBAL(name, stats_enabled)\ - ) \ - ; \ -} \ -apm_driver_entry * apm_driver_##name##_create() \ -{ \ - apm_driver_entry * driver_entry; \ - driver_entry = (apm_driver_entry *) malloc(sizeof(apm_driver_entry)); \ - driver_entry->driver.process_event = apm_driver_##name##_process_event; \ - driver_entry->driver.minit = apm_driver_##name##_minit; \ - driver_entry->driver.rinit = apm_driver_##name##_rinit; \ - driver_entry->driver.mshutdown = apm_driver_##name##_mshutdown; \ - driver_entry->driver.rshutdown = apm_driver_##name##_rshutdown; \ - driver_entry->driver.process_stats = apm_driver_##name##_process_stats; \ - driver_entry->driver.is_enabled = apm_driver_##name##_is_enabled; \ - driver_entry->driver.error_reporting = apm_driver_##name##_error_reporting; \ - driver_entry->driver.want_event = apm_driver_##name##_want_event; \ - driver_entry->driver.want_stats = apm_driver_##name##_want_stats; \ - driver_entry->driver.is_request_created = 0; \ - driver_entry->next = NULL; \ - return driver_entry; \ -} +#define APM_DRIVER_CREATE(name) \ + void apm_driver_##name##_process_event(PROCESS_EVENT_ARGS); \ + void apm_driver_##name##_process_stats(TSRMLS_D); \ + int apm_driver_##name##_minit(int TSRMLS_DC); \ + int apm_driver_##name##_rinit(TSRMLS_D); \ + int apm_driver_##name##_mshutdown(); \ + int apm_driver_##name##_rshutdown(TSRMLS_D); \ + PHP_INI_MH(OnUpdateAPM##name##ErrorReporting) { \ + APM_GLOBAL(name, error_reporting) = \ + (apm_error_reporting_new_value : APM_E_##name); \ + return SUCCESS; \ + } \ + zend_bool apm_driver_##name##_is_enabled(TSRMLS_D) { \ + return APM_GLOBAL(name, enabled); \ + } \ + int apm_driver_##name##_error_reporting(TSRMLS_D) { \ + return APM_GLOBAL(name, error_reporting); \ + } \ + zend_bool apm_driver_##name##_want_event(int event_type, int error_level, \ + char *msg TSRMLS_DC) { \ + return APM_GLOBAL(name, enabled) && \ + ((event_type == APM_EVENT_EXCEPTION && \ + APM_GLOBAL(name, exception_mode) == 2) || \ + (event_type == APM_EVENT_ERROR && \ + ((APM_GLOBAL(name, exception_mode) == 1) || \ + (strncmp(msg, "Uncaught exception", 18) != 0)) && \ + (error_level & APM_GLOBAL(name, error_reporting)))) && \ + (!APM_G(currently_silenced) || \ + APM_GLOBAL(name, process_silenced_events)); \ + } \ + zend_bool apm_driver_##name##_want_stats(TSRMLS_D) { \ + return APM_GLOBAL(name, enabled) && (APM_GLOBAL(name, stats_enabled)); \ + } \ + apm_driver_entry *apm_driver_##name##_create() { \ + apm_driver_entry *driver_entry; \ + driver_entry = (apm_driver_entry *)malloc(sizeof(apm_driver_entry)); \ + driver_entry->driver.process_event = apm_driver_##name##_process_event; \ + driver_entry->driver.minit = apm_driver_##name##_minit; \ + driver_entry->driver.rinit = apm_driver_##name##_rinit; \ + driver_entry->driver.mshutdown = apm_driver_##name##_mshutdown; \ + driver_entry->driver.rshutdown = apm_driver_##name##_rshutdown; \ + driver_entry->driver.process_stats = apm_driver_##name##_process_stats; \ + driver_entry->driver.is_enabled = apm_driver_##name##_is_enabled; \ + driver_entry->driver.error_reporting = \ + apm_driver_##name##_error_reporting; \ + driver_entry->driver.want_event = apm_driver_##name##_want_event; \ + driver_entry->driver.want_stats = apm_driver_##name##_want_stats; \ + driver_entry->driver.is_request_created = 0; \ + driver_entry->next = NULL; \ + return driver_entry; \ + } PHP_MINIT_FUNCTION(apm); PHP_MSHUTDOWN_FUNCTION(apm); @@ -195,8 +200,16 @@ PHP_MINFO_FUNCTION(apm); #ifdef APM_DEBUGFILE #define APM_INIT_DEBUG APM_G(debugfile) = fopen(APM_DEBUGFILE, "a+"); -#define APM_DEBUG(...) if (APM_G(debugfile)) { fprintf(APM_G(debugfile), __VA_ARGS__); fflush(APM_G(debugfile)); } -#define APM_SHUTDOWN_DEBUG if (APM_G(debugfile)) { fclose(APM_G(debugfile)); APM_G(debugfile) = NULL; } +#define APM_DEBUG(...) \ + if (APM_G(debugfile)) { \ + fprintf(APM_G(debugfile), __VA_ARGS__); \ + fflush(APM_G(debugfile)); \ + } +#define APM_SHUTDOWN_DEBUG \ + if (APM_G(debugfile)) { \ + fclose(APM_G(debugfile)); \ + APM_G(debugfile) = NULL; \ + } #else #define APM_INIT_DEBUG #define APM_DEBUG(...) @@ -205,168 +218,171 @@ PHP_MINFO_FUNCTION(apm); /* Extension globals */ ZEND_BEGIN_MODULE_GLOBALS(apm) - /* Boolean controlling whether the extension is globally active or not */ - zend_bool enabled; - /* Application identifier, helps identifying which application is being monitored */ - char *application_id; - /* Boolean controlling whether the event monitoring is active or not */ - zend_bool event_enabled; - /* Boolean controlling whether the stacktrace should be generated or not */ - zend_bool store_stacktrace; - /* Boolean controlling whether the ip should be generated or not */ - zend_bool store_ip; - /* Boolean controlling whether the cookies should be generated or not */ - zend_bool store_cookies; - /* Boolean controlling whether the POST variables should be generated or not */ - zend_bool store_post; - /* Time (in ms) before a request is considered for stats */ - long stats_duration_threshold; - /* User CPU time usage (in ms) before a request is considered for stats */ - long stats_user_cpu_threshold; - /* System CPU time usage (in ms) before a request is considered for stats */ - long stats_sys_cpu_threshold; - /* Maximum recursion depth used when dumping a variable */ - long dump_max_depth; - /* Determines whether we're currently silenced */ - zend_bool currently_silenced; - - apm_driver_entry *drivers; - smart_str *buffer; - - /* Structure used to store request data */ - apm_request_data request_data; - - float duration; - - long mem_peak_usage; +/* Boolean controlling whether the extension is globally active or not */ +zend_bool enabled; +/* Application identifier, helps identifying which application is being + * monitored */ +char *application_id; +/* Boolean controlling whether the event monitoring is active or not */ +zend_bool event_enabled; +/* Boolean controlling whether the stacktrace should be generated or not */ +zend_bool store_stacktrace; +/* Boolean controlling whether the ip should be generated or not */ +zend_bool store_ip; +/* Boolean controlling whether the cookies should be generated or not */ +zend_bool store_cookies; +/* Boolean controlling whether the POST variables should be generated or not */ +zend_bool store_post; +/* Time (in ms) before a request is considered for stats */ +long stats_duration_threshold; +/* User CPU time usage (in ms) before a request is considered for stats */ +long stats_user_cpu_threshold; +/* System CPU time usage (in ms) before a request is considered for stats */ +long stats_sys_cpu_threshold; +/* Maximum recursion depth used when dumping a variable */ +long dump_max_depth; +/* Determines whether we're currently silenced */ +zend_bool currently_silenced; + +apm_driver_entry *drivers; +smart_str *buffer; + +/* Structure used to store request data */ +apm_request_data request_data; + +float duration; + +long mem_peak_usage; #ifdef HAVE_GETRUSAGE - float user_cpu; +float user_cpu; - float sys_cpu; +float sys_cpu; #endif #ifdef APM_DEBUGFILE - FILE * debugfile; +FILE *debugfile; #endif #ifdef APM_DRIVER_SQLITE3 - /* Boolean controlling whether the driver is active or not */ - zend_bool sqlite3_enabled; - /* Boolean controlling the collection of stats */ - zend_bool sqlite3_stats_enabled; - /* Control which exceptions to collect (0: none exceptions collected, 1: collect uncaught exceptions (default), 2: collect ALL exceptions) */ - long sqlite3_exception_mode; - /* driver error reporting */ - int sqlite3_error_reporting; - /* Path to the SQLite database file */ - char *sqlite3_db_path; - /* The actual db file */ - char sqlite3_db_file[MAXPATHLEN]; - /* DB handle */ - sqlite3 *sqlite3_event_db; - /* Max timeout to wait for storing the event in the DB */ - long sqlite3_timeout; - /* Request ID */ - sqlite3_int64 sqlite3_request_id; - /* Boolean to ensure request content is only inserted once */ - zend_bool sqlite3_is_request_created; - /* Option to process silenced events */ - zend_bool sqlite3_process_silenced_events; +/* Boolean controlling whether the driver is active or not */ +zend_bool sqlite3_enabled; +/* Boolean controlling the collection of stats */ +zend_bool sqlite3_stats_enabled; +/* Control which exceptions to collect (0: none exceptions collected, 1: collect + * uncaught exceptions (default), 2: collect ALL exceptions) */ +long sqlite3_exception_mode; +/* driver error reporting */ +int sqlite3_error_reporting; +/* Path to the SQLite database file */ +char *sqlite3_db_path; +/* The actual db file */ +char sqlite3_db_file[MAXPATHLEN]; +/* DB handle */ +sqlite3 *sqlite3_event_db; +/* Max timeout to wait for storing the event in the DB */ +long sqlite3_timeout; +/* Request ID */ +sqlite3_int64 sqlite3_request_id; +/* Boolean to ensure request content is only inserted once */ +zend_bool sqlite3_is_request_created; +/* Option to process silenced events */ +zend_bool sqlite3_process_silenced_events; #endif #ifdef APM_DRIVER_MYSQL - /* Boolean controlling whether the driver is active or not */ - zend_bool mysql_enabled; - /* Boolean controlling the collection of stats */ - zend_bool mysql_stats_enabled; - /* Control which exceptions to collect (0: none exceptions collected, 1: collect uncaught exceptions (default), 2: collect ALL exceptions) */ - long mysql_exception_mode; - /* driver error reporting */ - int mysql_error_reporting; - /* MySQL host */ - char *mysql_db_host; - /* MySQL port */ - unsigned int mysql_db_port; - /* MySQL user */ - char *mysql_db_user; - /* MySQL password */ - char *mysql_db_pass; - /* MySQL database */ - char *mysql_db_name; - /* DB handle */ - MYSQL *mysql_event_db; - /* Option to process silenced events */ - zend_bool mysql_process_silenced_events; - - /* Boolean to ensure request content is only inserted once */ - zend_bool mysql_is_request_created; +/* Boolean controlling whether the driver is active or not */ +zend_bool mysql_enabled; +/* Boolean controlling the collection of stats */ +zend_bool mysql_stats_enabled; +/* Control which exceptions to collect (0: none exceptions collected, 1: collect + * uncaught exceptions (default), 2: collect ALL exceptions) */ +long mysql_exception_mode; +/* driver error reporting */ +int mysql_error_reporting; +/* MySQL host */ +char *mysql_db_host; +/* MySQL port */ +unsigned int mysql_db_port; +/* MySQL user */ +char *mysql_db_user; +/* MySQL password */ +char *mysql_db_pass; +/* MySQL database */ +char *mysql_db_name; +/* DB handle */ +MYSQL *mysql_event_db; +/* Option to process silenced events */ +zend_bool mysql_process_silenced_events; + +/* Boolean to ensure request content is only inserted once */ +zend_bool mysql_is_request_created; #endif #ifdef APM_DRIVER_STATSD - /* Boolean controlling whether the driver is active or not */ - zend_bool statsd_enabled; - /* Boolean controlling the collection of stats */ - zend_bool statsd_stats_enabled; - /* (unused for StatsD) */ - long statsd_exception_mode; - /* (unused for StatsD) */ - int statsd_error_reporting; - /* StatsD host */ - char *statsd_host; - /* StatsD port */ - unsigned int statsd_port; - /* StatsD key prefix */ - char *statsd_prefix; - /* addinfo for StatsD server */ - struct addrinfo *statsd_servinfo; - /* Option to process silenced events */ - zend_bool statsd_process_silenced_events; +/* Boolean controlling whether the driver is active or not */ +zend_bool statsd_enabled; +/* Boolean controlling the collection of stats */ +zend_bool statsd_stats_enabled; +/* (unused for StatsD) */ +long statsd_exception_mode; +/* (unused for StatsD) */ +int statsd_error_reporting; +/* StatsD host */ +char *statsd_host; +/* StatsD port */ +unsigned int statsd_port; +/* StatsD key prefix */ +char *statsd_prefix; +/* addinfo for StatsD server */ +struct addrinfo *statsd_servinfo; +/* Option to process silenced events */ +zend_bool statsd_process_silenced_events; #endif #ifdef APM_DRIVER_SOCKET - /* Boolean controlling whether the driver is active or not */ - zend_bool socket_enabled; - /* Boolean controlling the collection of stats */ - zend_bool socket_stats_enabled; - /* (unused for socket driver) */ - long socket_exception_mode; - /* (unused for socket driver) */ - int socket_error_reporting; - /* Option to process silenced events */ - zend_bool socket_process_silenced_events; - /* socket path */ - char *socket_path; - apm_event_entry *socket_events; - apm_event_entry **socket_last_event; +/* Boolean controlling whether the driver is active or not */ +zend_bool socket_enabled; +/* Boolean controlling the collection of stats */ +zend_bool socket_stats_enabled; +/* (unused for socket driver) */ +long socket_exception_mode; +/* (unused for socket driver) */ +int socket_error_reporting; +/* Option to process silenced events */ +zend_bool socket_process_silenced_events; +/* socket path */ +char *socket_path; +apm_event_entry *socket_events; +apm_event_entry **socket_last_event; #endif #ifdef APM_DRIVER_ELASTICSEARCH - /* Boolean controlling whether the driver is active or not */ - zend_bool elasticsearch_enabled; - /* Boolean controlling the collection of stats */ - zend_bool elasticsearch_stats_enabled; - /* Control which exceptions to collect */ - long elasticsearch_exception_mode; - /* driver error reporting */ - int elasticsearch_error_reporting; - /* Option to process silenced events */ - zend_bool elasticsearch_process_silenced_events; - /* Elasticsearch host */ - char *elasticsearch_host; - /* Elasticsearch port */ - unsigned int elasticsearch_port; - /* Elasticsearch index */ - char *elasticsearch_index; - /* Elasticsearch username (optional) */ - char *elasticsearch_username; - /* Elasticsearch password (optional) */ - char *elasticsearch_password; - /* Batch sending configuration */ - long elasticsearch_batch_size; - long elasticsearch_batch_timeout; - /* Batch buffer */ - smart_str elasticsearch_buffer; - int elasticsearch_buffer_count; - time_t elasticsearch_buffer_start_time; +/* Boolean controlling whether the driver is active or not */ +zend_bool elasticsearch_enabled; +/* Boolean controlling the collection of stats */ +zend_bool elasticsearch_stats_enabled; +/* Control which exceptions to collect */ +long elasticsearch_exception_mode; +/* driver error reporting */ +int elasticsearch_error_reporting; +/* Option to process silenced events */ +zend_bool elasticsearch_process_silenced_events; +/* Elasticsearch host */ +char *elasticsearch_host; +/* Elasticsearch port */ +unsigned int elasticsearch_port; +/* Elasticsearch index */ +char *elasticsearch_index; +/* Elasticsearch username (optional) */ +char *elasticsearch_username; +/* Elasticsearch password (optional) */ +char *elasticsearch_password; +/* Batch sending configuration */ +long elasticsearch_batch_size; +long elasticsearch_batch_timeout; +/* Batch buffer */ +smart_str elasticsearch_buffer; +int elasticsearch_buffer_count; +time_t elasticsearch_buffer_start_time; #endif ZEND_END_MODULE_GLOBALS(apm) @@ -381,24 +397,27 @@ ZEND_EXTERN_MODULE_GLOBALS(apm) #define APM_RD(data) APM_G(request_data).data #if PHP_VERSION_ID >= 70000 -# define APM_RD_STRVAL(var) Z_STRVAL_P(APM_RD(var)) -# define APM_RD_SMART_STRVAL(var) APM_RD(var).s->val +#define APM_RD_STRVAL(var) Z_STRVAL_P(APM_RD(var)) +#define APM_RD_SMART_STRVAL(var) APM_RD(var).s->val #else -# define APM_RD_STRVAL(var) Z_STRVAL_PP(APM_RD(var)) -# define APM_RD_SMART_STRVAL(var) APM_RD(var).c +#define APM_RD_STRVAL(var) Z_STRVAL_PP(APM_RD(var)) +#define APM_RD_SMART_STRVAL(var) APM_RD(var).c #endif #define SEC_TO_USEC(sec) ((sec) * 1000000.00) #define USEC_TO_SEC(usec) ((usec) / 1000000.00) #if PHP_VERSION_ID >= 70000 -# define zend_is_auto_global_compat(name) (zend_is_auto_global_str(ZEND_STRL((name)))) -# define add_assoc_long_compat(array, key, value) add_assoc_long_ex((array), (key), (sizeof(key) - 1), (value)); +#define zend_is_auto_global_compat(name) \ + (zend_is_auto_global_str(ZEND_STRL((name)))) +#define add_assoc_long_compat(array, key, value) \ + add_assoc_long_ex((array), (key), (sizeof(key) - 1), (value)); #else -# define zend_is_auto_global_compat(name) (zend_is_auto_global(ZEND_STRL((name)) TSRMLS_CC)) -# define add_assoc_long_compat(array, key, value) add_assoc_long_ex((array), (key), (sizeof(key)), (value)); +#define zend_is_auto_global_compat(name) \ + (zend_is_auto_global(ZEND_STRL((name)) TSRMLS_CC)) +#define add_assoc_long_compat(array, key, value) \ + add_assoc_long_ex((array), (key), (sizeof(key)), (value)); #endif void extract_data(TSRMLS_D); #endif -